LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSnVuIDI4IDE4OjM3OjAyIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2lmMTYzMi9zaWduYWwuY10gW21pc2NlbXUvaW5zdHIuY10gW21lbW9yeS92aXJ0dWFsLmNdCglNb3ZlZCBwYWdlLWZhdWx0IGhhbmRsaW5nIHRvIElOU1RSX0VtdWxhdGVJbnN0cnVjdGlvbi4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglBZGRlZCBsb2NraW5nIGFuZCBjaGVjayBmb3Igb3duIHRocmVhZCBpbiBTdXNwZW5kL1Jlc3VtZVRocmVhZC4KClNhdCBKdW4gMjcgMjE6MjU6MjEgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbb2JqZWN0cy9kaWIuY10gW29iamVjdHMvYml0bWFwLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXSAKCSAgW2dyYXBoaWNzL3gxMWRydi9iaXRibHQuY10gW2luY2x1ZGUvYml0bWFwLmhdCglJbXByb3ZlZCBESUIgc2VjdGlvbiBoYW5kbGluZyB1c2luZyBwYWdlIGZhdWx0IGhhbmRsZXJzLgoJKE5vdGU6IFRoaXMgcGF0Y2ggaW5jbHVkZXMgY29kZSBjb250cmlidXRlZCBieSBNYXR0aGV3IEouIEZyYW5jaXMuKQoKCSogW21lbW9yeS92aXJ0dWFsLmNdIFtpZjE2MzIvc2lnbmFsLmNdIFtpbmNsdWRlL2dsb2JhbC5oXQoJUGFnZSBGYXVsdCBoYW5kbGVyIHN1cHBvcnQgYWRkZWQuCgoJKiBbaWYxNjMyL3NpZ25hbC5jXSBbbG9hZGVyL3NpZ25hbC5jXSBbdG9vbHMvYnVpbGQuY10gW21pc2Mvc3lzdGVtLmNdCgkgIFttaXNjL3dpbnNvY2tfZG5zLmNdIFtpbmNsdWRlL3NpZ19jb250ZXh0LmhdIFtpbmNsdWRlL3RocmVhZC5oXQoJMTYtYml0ICVmcyBoYW5kbGluZyBpbXByb3ZlZDogQWx3YXlzIHByZXNlcnZlIDE2LWJpdCAlZnMgdmFsdWUsCglhbHdheXMgcmVzdG9yZSAzMi1iaXQgJWZzIHZhbHVlIGZvciBzaWduYWwgaGFuZGxlcnMuCgoJKiBbaWYxNjMyL3RodW5rLmNdIFtsb2FkZXIvbW9kdWxlLmNdIFttaXNjL2NhbGxiYWNrLmNdIFt3aW5kb3dzL3VzZXIuY10KCSAgW2xvYWRlci9uZS9yZXNvdXJjZS5jXSBbaW5jbHVkZS9jYWxsYmFjay5oXSBbaW5jbHVkZS9tb2R1bGUuaF0KCSAgW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi93cHJvY3Muc3BlY10KCVJlc291cmNlIEhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlciBzdG9yZWQgYXMgMTYtYml0IFNFR1BUUi4KCgkqIFtsb2FkZXIvdGFzay5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFtpZjE2MzIvdXNlci5zcGVjXQoJICBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL25lL21vZHVsZS5jXQoJU29tZSBtaW5vciBpbmNvbXBhdGliaWxpdGllcyBmaXhlZCAoV2luMzJzIHJlbGllcyBvbiB0aG9zZSk6CglHZXRFeGVQdHIsIElzV2luZG93MTYgc2hvdWxkIHNldCBFUyBvbiByZXR1cm47IFdJTlBPU19TZW5kTkNDYWxjU2l6ZQoJc2hvdWxkIGNvcGUgd2l0aCBoYXZpbmcgdGhlIFdJTkRPV1BPUyBzdHJ1Y3R1cmUgdHJhc2hlZDsKCXRoZSBPRlNUUlVDVCBpbiB0aGUgTkUgbW9kdWxlIGltYWdlIHNob3VsZCBiZSBwbGFjZWQgKmxhc3QqLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJTWlzc2luZyBwcm90b3R5cGUgZm9yIEZsdXNoVmlld09mRmlsZS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJQnVnZml4OiBDb21tYW5kIGxpbmUgc2hvdWxkICpub3QqIHN0YXJ0IHdpdGggYSBibGFuay4KCQoJKiBbbG9hZGVyL25lL3NlZ21lbnQuY10KCUJ1Z2ZpeDogRml4dXBzIHRvIG9mZnNldCAwIHdlcmUgbmV2ZXIgYXBwbGllZC4KCgkqIFttaXNjL2xzdHIuY10KCVVzZSBkZWJ1Z3N0cl9hIGluIE91dHB1dERlYnVnU3RyaW5nMTYuCgoJKiBbbXNkb3MvZHBtaS5jXQoJU3R1YiBmb3IgaW50IDMxIEJMPTJmIEFYPTdhMjAgKE5ldFdhcmU6IEdldCBWTE0gQ2FsbCBBZGRyZXNzKSBhZGRlZC4KCgkqIFttc2Rvcy9pbnQyMS5jXQoJU3R1YiBmb3IgaW50IDIxIEFYPTQ0MGQgQ0w9NmYgKGdldCBkcml2ZSBtYXAgaW5mb3JtYXRpb24pIGFkZGVkLgoKRnJpIEp1biAyNiAxODowODozMCAxOTk4ICBSZWluIEtsYXplcyA8cmtsYXplc0BjYXNlbWEubmV0PgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglGaXggc21hbGwgYnVnbGV0IHRoYXQgbWl4ZWQgdXAgbWF4aW1pemVkIGFuZCBtaW5pbWl6ZWQgd2luZG93cy4KCgkqIFtpbmNsdWRlL3gxMWRydi5oXSBbb2JqZWN0cy9kYy5jXSBbZ3JhcGhpY3MveDExZHJ2L3Blbi5jXQoJICBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCglGaXggc29tZSBidWdzIHdpdGggbGluZXMgam9pbmluZyBzdHlsZXMuIERyYXdzIHJlY3RhbmdsZXMKCXdpdGggdGhpY2sgcGVucyBub3cgY29ycmVjdGx5LgoKRnJpIEp1biAyNiAxNjoyMjoyMyAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgYnVnIEkgaW50cm9kdWNlZCBsYXN0IHJlbGVhc2UgaW4gSW50ZXJuYWxFeHRyYWN0SWNvbi4KCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCBkb2N1bWVudGF0aW9uIGZvciBDcmVhdGVGaWxlMzJBLgoKCSogW2RvY3VtZW50YXRpb24vd2luZS5tYW5dCglVcGRhdGVkIG1hbnBhZ2UuCQoKCSogW0NoYW5nZUxvZ10KCUFkZGVkIG15IGVudHJ5IGZyb20gbGFzdCByZWxlYXNlLgoKRnJpIEp1biAyNiAxMzozMzozMCAxOTk4ICBIdXcgRCBNIERhdmllcyA8ZGF2aWVzaEBhYmFjdXMucGh5c2ljcy5veC5hYy51az4KCgkqIFtncmFwaGljcy9wc2Rydi8qXSBbaWYxNjMyL3dpbmVwcy5zcGVjXSBbaW5jbHVkZS9wc2Rydi5oXQoJICBbaW5jbHVkZS9wcmludC5oXSBbb2JqZWN0cy9nZGlvYmouY10KCUZpcnN0IHN0YWdlcyBvZiBhbiBpbnRlcm5hbCBQb3N0c2NyaXB0IGRyaXZlci4gU2VlCglncmFwaGljcy9wc2Rydi9SRUFETUUgLiBTaG91bGQgcHJpbnQgdGV4dCAoYmFkbHkpIGZyb20gd2luMy4xIG5vdGVwYWQsCgl3cml0ZSBhbmQgd2lud29yZDYuCgoJKiBbZG9jdW1lbnRhdGlvbi9wcmludGluZ10KCVNvbWUgbm90ZXMgb24gcHJpbnRpbmcuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJU3RyaXAgb2ZmIFdTX0JPUkRFUiBpbiBXTV9OQ1JFQVRFLCBlZGl0IGRyYXdzIGl0cyBvd24gcmVjdGFuZ2xlLgoJRUNfVVNFRk9OVElORk8gc2VlbXMgdG8gYmUgdXNlZCBhcyBhIGxlZnQvcmlnaHQgdmFsdWUgZm9yIEVNX1NFVE1BUkdJTlMKCWFuZCBub3QgYXMgYW4gYWN0aW9uIGFzIHRoZSBkb2NzIHNheS4gVGhpcyBhY3R1YWxseSBtYWtlcyBtb3JlIHNlbnNlLgoJU2Nyb2xsIHRoZSBjYXJldCBiYWNrIHRvIHplcm8gYWZ0ZXIgYSBXTV9TRVRURVhULgoKRnJpIEp1biAyNiAxMDo1NjoyNSAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCgkqIFtpZjE2MzIvc25vb3AuY10KCUFkZGVkIHdpbjE2IGludGVyLWRsbCBzbm9vcGluZy4KCgkqIFt3aW4zMi9vcmRpbmFscy5jXQoJS0VSTkVMXzQ4NSBpcyBHZXRQcm9jZXNzRHdvcmQuCgoJKiBbaW5jbHVkZS94bWFsbG9jLmhdW2luY2x1ZGUvYml0bWFwLmhdW21pc2MveG1hbGxvYy5jXQoJQWRkZWQgeGNhbGxvYyBzbyB3ZSAwIGluaXRpYWxpemUgWEltYWdlcy4gCglGaXhlcy9IaWRlcyB0aGUgJ2p1bmsgYXJvdW5kIE1PUFlGaXNoJy4KCgkqIFttaXNjL250ZGxsLmNdCglTb21lIHN0dWJzIGFkZGVkLgoKVGh1IEp1biAyNSAxNToyMjo0MyAxOTk4ICBBZHJpYW4gSGFydmV5IDxhZHJpYW5Ac2VsZWN0LmNvbS5hdT4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdIAoJSW1wbGVtZW50ZWQgU3VzcGVuZFRocmVhZCBhbmQgUmVzdW1lVGhyZWFkLgoKVGh1IEp1biAyNSAwMDo1NTowMyAxOTk4ICBQZXRlciBIdW5uaXNldHQgPGh1bm5pc2VAbm9ydGVsLmNhPgoKCSogW2luY2x1ZGUvZGVidWcuaCxkcGxheS5oLGRzb3VuZC5oXVttdWx0aW1lZGlhL2Rzb3VuZC5jLGRwbGF5LmNdCgkgIFtyZWxheTMyL2RwbGF5eC5zcGVjLGRwbGF5LnNwZWNdW211bHRpbWVkaWEvTWFrZWZpbGUuaW5dCgkgIFtkb2N1bWVudGF0aW9uL3N0YXR1cy9kaXJlY3RwbGF5XQoJQWRkZWQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgRGlyZWN0UGxheSAmIERpcmVjdFBsYXlMb2JieS4gTW92ZWQgdGhlCglwcmVsaW1pbmFyeSBzdHVicyBwdXQgaW4gdGhlIGRzb3VuZCBmaWxlcyBpbnRvIHR3byBuZXcgZmlsZXMKCWRwbGF5LmggYW5kIGRwbGF5LmMuCglBZGRlZCBuZXcgZGVidWcgY2hhbm5lbCAoZHBsYXkpIGZvciB0aGlzLgoJQ3JlYXRlZCBuZXcgZG9jdW1lbnQgdG8ga2VlcCB0cmFjayBvZiBpbXBsZW1lbnRhdGlvbi4KCgkqIFtpbmNsdWRlL3dpbmlvY3RsLmhdW3dpbjMyL2RldmljZS5jXQoJQWRkZWQgc29tZSBmcmFtZXdvcmsgaW4gRGV2aWNlSW9Db250cm9sIHRvLCBpbiB0aGUgZnV0dXJlLCBzdXBwb3J0Cgl0aGUgImJ1aWx0aW4iIHdpbmRvd3MgZHdJb0NvbnRyb2xDb2Rlcy4gQWRkZWQgbmV3IGhlYWRlciBmaWxlCgl3aW5pb2N0bC5oIC4gCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQWRkZWQgc2xpZ2h0bHkgaW1wcm92ZWQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGZvciBQbGF5U291bmQuCgpXZWQgSnVuIDI0IDEyOjAwOjAwIDE5OTggIEp1ZXJnZW4gU2NobWllZCA8anVlcmdlbi5zY2htaWVkQG1ldHJvbmV0LmRlPiAKCgkqIFtmaWxlcy9wcm9maWxlLmNdW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXVtsb2FkZXIvbW9kdWxlLmNdCglDaGFuZ2VkIGxzdHJjbXBpMzJBIHRvIHN0cmNhc2VjbXAsIGxzdHJuY21waTMyQSB0byBzdHJuY2FzZWNtcCwKCWxzdHJjcHkzMkEgdG8gc3RyY3B5LCBsc3RybGVuMzJBIHRvIHN0cmxlbiwgbHN0cmNtcDMyQSB0byBzdHJjbXAKCWJlY2F1c2UgaXQncyBub3QgbmVjZXNzYXJ5IHRvIHN1cHBvcnQgbG9jYWxlIG9uIHN1Y2ggcGxhY2VzLgoJSXQgY2F1c2VzIGEgaHVnZSBvdmVyaGVhZCBhbmQgZXZlbiBmYWlscyBzb21ldGltZXMgCgoJKiBbaW5jbHVkZS9vbGVhdXRvLmhdW2luY2x1ZGUvd2luZXJyb3IuaF0KCUFkZGVkIHNvbWUgb2xlLXJlbGF0ZWQgY29uc3RhbnRzLgoKCSogW21pc2Mvc2hlbGwuY10KCVNIRUxMMzJfRGxsR2V0Q2xhc3NPYmplY3QsIFNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uLAoJU0hHZXRQYXRoRnJvbUlETGlzdCBpbXByb3ZlZCB0aGUgc3R1YnMKCgkqIFtvbGUvZm9sZGVycy5jXQoJSVNoZWxsRm9sZGVyKiBmdW5jdGlvbnMgcmV3cm90ZSB0aGUgc3R1YnMgc28gZG9uJ3QgY3Jhc2ggYW5kIGdpdmUKCXNvbWV0aGluZyBzZW5zaWJsZSBiYWNrLCBzdGFydGVkIGltcGxlbWVudGF0aW9uIG9mLgoKCSogW29sZS90eXBlbGliLmNdW3JlbGF5MzIvb2xlYXV0MzIuc3BlY10KCUxvYWRUeXBlTGliMzIsIFJlZ2lzdGVyVHlwZUxpYiBzdHViLgoKCSogW29sZS9vbGUybmxzLmNdCglGaXhlZCBhIGJ1ZmZlciBvdmVycnVuIGluIENvbXBhcmVTdHJpbmczMkEuCglUZXN0IGZvciBhIGJhZCBwb2ludGVyIGluIExDTWFwU3RyaW5nMzJBIChoYXBwZW5zCglpbiB3aW5obHAzMiB3aGlsZSBidWlsZGluZyBhIGluZGV4IGZvciBzZWFyY2hpbmcpLiAKCgkqIFtyZWxheTMyL29sZWF1dDMyLnNwZWNdIFtvbGUvdHlwZWxpYi5jXQoJQWRkZWQgc3R1YiBmb3IgTG9hZFR5cGVMaWIgKG9sZTMyKSB0byBtYWtlIGV4Y2VsOTUgaGFwcHkuCgpUdWUgSnVuIDIzIDIyOjQ3OjA5IDE5OTggIEFsZXggUHJpZW0gPGFsZXhwQHNjaS5rdW4ubmw+CgoJKiBbZmlsZXMvcHJvZmlsZS5jXSBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgV3JpdGVQcml2YXRlUHJvZmlsZVN0cnVjdEEsIEdldFByaXZhdGVQcm9maWxlU3RydWN0QSwKCUdldFByaXZhdGVQcm9maWxlU2VjdGlvbk5hbWVzMTYuCgpUdWUgSnVuIDIzIDAxOjM0OjQzIDE5OTggIFBhc2NhbCBDdW9xIDxwY3VvcUBlbnMtbHlvbi5mcj4KCgkqIFtvbGUvb2xlMm5scy5jXQoJR2V0U3RyaW5nVHlwZUV4MzJBOiBJbXBsZW1lbnRlZCBDVF9DVFlQRTIgYW5kIENUX0NUWVBFMyBjYXNlcy4KCUxDTWFwU3RyaW5nMzJBOiBNYXAgZmluYWwgJ1wwJyBmb3IgJ1wwJy10ZXJtaW5hdGVkIHN0cmluZ3MuCgoJKiBbbWlzYy9zaGVsbG9yZC5jXSBbZmlsZXMvcHJvZmlsZS5jXSBbZ3JhcGhpY3MvZHJpdmVyLmNdIAoJICBbbG9hZGVyL21vZHVsZS5jXSBbbXNkb3MvaW50MjEuY10gW3dpbmRvd3MvZHJpdmVyLmNdIFtmaWxlcy9kcml2ZS5jXQoJQ2hhbmdlZCBsc3RyY21waTMyQSAtPiBzdHJjYXNlY21wLiAgU2hvdWxkIGJlIE9LIGluIHRoZXNlIHBsYWNlcy4KClNhdCBKdW4gMjAgMjM6NDA6MDAgMTk5OCAgQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQGFraHBoZC5hdS5kaz4KCgkqIFt0b29scy93cmMvXQoJV3JjIHZlcnNpb24gMS4wLjIgKDIwLUp1bi0xOTk4KS4gUGxlYXNlIHJldmVydCB0byAKCXRoZSBmaWxlIHRvb2xzL3dyYy9DSEFOR0VTIGZvciBkZXRhaWxzLgoKU2F0IEp1biAyMCAxNDo1ODowMCAxOTk4ICBNYXJjZWwgQmF1ciAgPG1iYXVyQGcyNi5ldGh6LmNoPgoKCSogW29sZS9vbGUybmxzLmNdIFtvbGUvbmxzLypdCglBZGRlZCB0aGUgZmlyc3QgNTcgbmxzIGZpbGVzLCBtb3N0IGFyZSBub3QgeWV0IGNvbXBsZXRlLgoKV2VkIEp1biAxNyAxMToxNjo1NCAxOTk4ICBEYXZpZCBMdXllciA8bHV5ZXJAdWNzLnV3YS5lZHUuYXU+CgoJKiBbcmVsYXkzMi9yZWxheTM4Ni5jXSBbaWYxNjMyL3JlbGF5LmNdCglNb3ZlIGRlYnVnX3JlbGF5XyhpbmNsdWRlfGV4Y2x1ZGUpX2xpc3QgaGFuZGxpbmcgaW50bwoJc2VwZXJhdGUgZnVuY3Rpb24gUkVMQVlfU2hvd0RlYnVnbXNnc1JlbGF5KCkuICBJbmNsdWRlCgljaGVja2luZyBvZiB0aGlzIGZvciAxNiBiaXQgY2FsbHMgKG9yaWdpbmFsbHkgb25seQoJMzItYml0IGNhbGxzKS4KCgkqIFtyZWxheTMyL3Nub29wLmNdIFttaXNjL21haW4uY10KCUFkZCBkZWJ1Z19zbm9vcF8oaW5jbHVkZXxleGNsdWRlKV9saXN0IGFzIHBlciB0aGUgcmVsYXkgc3R1ZmYuCglGaXggdHlwbyBhbmQgYWRkIGluZm9ybWF0aW9uIG9uIC1kZWJ1Z21zZyArLy1yZWxheT0uLi4gaW4KCWhlbHAgb24gLWRlYnVnbXNnLiAgUmVmZXIgdG8gYXZhaWxhYmlsaXR5IG9mIHNub29wIHRvby4KClR1ZSBKdW4gMTAgMjI6MDA6MTggMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFtjb250cm9scy9oZWFkZXIuY11baW5jbHVkZS9oZWFkZXIuaF1baW5jbHVkZS9jb21tY3RybC5oXQoJQWRkZWQgb3duZXIgZHJhdyBzdXBwb3J0LgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdW3dpbmRvd3Mvc3lzbWV0aWNzLmNdCglGaXhlZCBtZW51IGJhciBoZWlnaHQgZm9yIFdpbjk1IGxvb2suCglTcGxpdCBOQ19BZGp1c3RSZWN0OTUoKSBpbnRvIE5DX0FkanVzdFJlY3RPdXRlcjk1KCkgYW5kCglOQ19BZGp1c3RSZWN0SW5uZXI5NSB0byBmaXggYSBtZW51IGJhciBidWcuCglJbXByb3ZlZCBXaW45NSBsb29rLgoKCSogW2NvbnRyb2xzL3Byb2dyZXNzLmNdCglJbXByb3ZlZCBkcmF3aW5nIGNvZGUuIEJvcmRlcnMgd2lsbCBiZSBkcmF3biBieSBub24tY2xpZW50IGNvZGUuCgoJKiBbY29udHJvbHMvdXBkb3duLmNdCglDaGFuZ2VkIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmaXhlZCBzb21lIGJ1Z3MuCgoJKiBbY29udHJvbHMvdG9vbGJhci5jXQoJRml4ZWQgVEJfQlVUVE9OU1RSVUNUU0laRSBidWcgaW4gTUZDIHByb2dyYW1zLgoJU2V2ZXJhbCBpbXByb3ZlbWVudHMuCgoJKiBbbWlzYy9zaGVsbC5jXQoJQWRkZWQgc3R1YiBmb3IgQnJvd3NlRm9yRm9sZGVyc0EoKS4KCgkqIFttaXNjL3NoZWxsb3JkLmNdCglBZGRlZCBzdHViIGZvciBTSEVMTDMyXzE0NygpLgoKCSogW2NvbnRyb2xzL2NvbWN0bDMydW5kb2MuY10KCU1pbm9yIGNoYW5nZXMuCgoJKiBbZG9jdW1lbnRhdGlvbi9jb21tb25fY29udHJvbHNdCglOZXcgRmlsZTogRG9jdW1lbnRhdGlvbiBhYm91dCBkZXZlbG9wbWVudCBzdGF0dXMsIHVuZG9jdW1lbnRlZAoJZmVhdHVyZXMgYW5kIGZ1bmN0aW9ucyBvZiB0aGUgY29tbW9uIGNvbnRyb2xzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gSnVuIDE1IDEwOjMwOjM1IDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL2Rvc19mcy5jXSBbZmlsZXMvZmlsZS5jXSBbaWYxNjMyL3dwcm9jcy5zcGVjXQoJICBbbWlzYy9hc3BpLmNdCglBZGRlZCBzdXBwb3J0IGZvciBzY2FubmVycyB0aGF0IG5lZWQgQWRhcHRlYydzIEFTUEkyRE9TLgoKCSogW2dyYXBoaWNzL2Vudi5jXSBbbWlzYy9wcmludGVyZHJ2LmNdIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCgkgIFtpZjE2MzIvZ2RpLnNwZWNdIFtpbmNsdWRlL2dkaS5oXQoJRW5oYW5jZWQgcHJpbnRlciBzdXBwb3J0IChlc3BlY2lhbGx5IFdpbjk1KToKCURydltHU11ldFByaW50ZXJEYXRhLCBbR1NdZXRFbnZpcm9ubWVudDsgYWRkZWQgQWJvcnRQcm9jIGhhbmRsaW5nLgoKCSogW21pc2MvdGFwaTMyLmNdIFtyZWxheTMyL3RhcGkzMi5zcGVjXQoJQWRkZWQgc29tZSBzdHVicy4KCgkqIFtjb25maWd1cmUuaW5dIFtncmFwaGljcy9mb250ZW5naW5lLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCSAgW21pc2MvY29tbS5jXSBbbWlzYy93MzJza3JubC5jXSBbbWlzYy93aW4zMnMxNi5jXQoJTWFkZSBXaW5lIGNvbXBpbGUgb24gSFAtVVggKGp1c3QgZm9yIGZ1biA7KQoKCSogW2NvbnRyb2xzL21lbnUuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQ29tcGxldGUgcmV3cml0ZSBvZiBFbmFibGVNZW51SXRlbTMyLgoJRnJlZSBBZ2VudCAzMiBzdGlsbCBkb2Vzbid0IHdvcmsgOigKCgkqIFttaXNjL3ZlcnNpb24uY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2luY2x1ZGUvd2luYmFzZS5oXQoJSW1wbGVtZW50ZWQgR2V0VmVyc2lvbkV4MTYuCgoJKiBbbWlzYy9uZXR3b3JrLmNdIFtpZjE2MzIvdXNlci5zcGVjXQoJRml4ZWQgYXJndW1lbnRzIG9mIFdOZXRHZXRQcm9wZXJ0eVRleHQuCgoJKiBbbWlzYy92ZXJzaW9uLmNdIFtyZWxheTMyL2NvbWN0bDMyLnNwZWNdIFtyZWxheTMyL29sZWF1dDMyLnNwZWNdCglJbXBsZW1lbnRlZCBDT01DVEwzMl9EbGxHZXRWZXJzaW9uLCBPYUJ1aWxkVmVyc2lvbi4KCgkqIFt3aW4zMi9maWxlLmNdCglGaXhlZCBVTkMgaGFuZGxpbmcgb2YgQ3JlYXRlRmlsZTMyLgoKU2F0IEp1biAxMyAyMjozNToxMiAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbTWFrZWZpbGUuaW5dIFtNYWtlLnJ1bGVzLmluXQoJQWRkZWQgcGF0dGVybiBmb3IgQ1ZTIG1lcmdlIGZpbGVzIHRvICdtYWtlIGNsZWFuJwoKCSogW29sZS9vbGVjbGkuY10gW3dpbmRvd3Mvc2Nyb2xsLmNdIFt3aW5kb3dzL2dyYWhpY3MuY10KCUFkZCBzb21lIERDIGhhbmRsZSB1bmxvY2tpbmcuIChXaGVuIGhkYydzIGFyZSBhbHdheXMgdW5sb2NrZWQsCgl0aGV5IGNhbiBiZSBtYWRlIG1vdmVhYmxlLikKCgkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10gCglTdGFydGVkIGEgV2luZSBEZXNpZ24gY2hhcHRlciB3aXRoIGRpc2N1c3Npb24gb2YgCglncmFwaGljcyBkcml2ZXIgbW9kZWwuCgpTYXQgSnVuIDEzIDExOjE5OjI1IDE5OTggIERhdmlkIEx1eWVyIDxsdXllckB1Y3MudXdhLmVkdS5hdT4KCgkqIFttaXNjL21haW4uY10gW3JlbGF5MzIvcmVsYXkzODYuY10KCUFkZGVkIG5ldyBvcHRpb24gLWRlYnVnbXNnICtyZWxheT0uLi4uIG9yIC1kZWJ1Z21zZyAtcmVsYXk9Li4uCgpGcmkgSnVuIDEyIDIyOjU2OjA5IDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQGpldC5mcmFua2VuLmRlPgoKCSogW3JlbGF5MzIvc25vb3AuY11bcmVsYXkzMi9idWlsdGluLmNdW2xvYWRlci9wZV9pbWFnZS5jXQoJQWRkZWQgaW50ZXIgd2luMzIgZGxsIHNub29waW5nLiBVc2UgLWRlYnVnbXNnICtzbm9vcC4KCU51bWJlciBvZiBhcmd1bWVudHMgYW5kIHN0cmluZyByZWZlcmVuY2VzIGFyZSBhdXRvZGV0ZWN0ZWQuCglTb21lIHNtYWxsIGJ1Z2ZpeGVzIGluIHRoZSBQRSBsb2FkZXIuCgoJKiBbbWlzYy9zeXN0ZW0uY10KCURpc2FibGVkIFN5c3RlbVRpbWVycy4gVGhleSBkbyBub3Qgd29yayB3aXRoIHRoZSBjdXJyZW50CgklZnMgaGFuZGxpbmcgaW4gdGhlIDMyLT4xNiByZWxheWNvZGUuIChoZWxwcyBsYWJ2aWV3KQoKCSogW21zZG9zL2RwbWkuY11bbXNkb3MvaW50MmYuY11bZmlsZXMvZHJpdmUuY10KCUFkZGVkIGEgbW9ub3RvbiBsaW5lYXIgaW5jcmVhc2luZyBtZW1vcnkgYWxsb2NhdG9yIGZvciBEUE1JIChyZXF1aXJlZAoJZm9yIExhYlZpZXcsIEhBRkFTLCAuLi4pCgltc2NkZXggaGFuZGxpbmcgaW4gZW11bGF0ZWQgcmVhbG1vZGUgaW50ZXJydXB0cyAoZm9yIG1jaWNkYS5kcnYpCglhbGxvY2F0ZSBsb2dpY2FsIGRyaXZlcyBvbmx5IG9uY2UuIChoZWxwcyBNeXN0KQoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUhhbmRsZSBeWiBhcyBzcGFjZS4gRm91bmQgb24gQ0RST01TIChoZWxwcyBNeXN0IEluc3RhbGxlcikuCgoJKiBbbXVsdGltZWRpYS9tbWlvLmNdCgltbWlvKiBwYXJ0aWFsbHkgdXBkYXRlZCB0byB3aW4zMi4gTm8gZnVubnkgYWRkaXRpb25zLgoKCSogW3dpbmRvd3MvZHJpdmVyLmNdCglBZGRlZCB3aW4zMiBkcml2ZXIgaGFuZGxpbmcgKHdpbGwgYmUgdXNlZCBmb3Igd2luMzIgbXVsdGltZWRpYS8KCW1zdmlkZW8gZHJpdmVycykuCgoJKiBbd2luMzIvZGV2aWNlLmNdCglBZGRlZCBkZXZpY2UgaGFuZGxpbmcgKEszMk9CSl9ERVZJQ0VfSU9DVEwpLiBJbXBsZW1lbnRlZCAKCVZUREFQSS41ICh1c2VkIGJ5IHdpbjk1JyBXSU5NTS50aW1lR2V0VGltZSgpKQoKRnJpIEp1biAxMiAxODowMToxOCAxOTk4IFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CgoJKiBbb2xlL2NvbXBvYmouYyByZWxheTMyL29sZTMyLnNwZWNdCglBZGQgYSBzdHViIGZvciBDb0xvY2tPYmplY3RFeHRlcm5hbDMyLgoKCSogW29iamVjdHMvY2xpcHBpbmcuY10KCUZpeCBpbiBJbnRlcnNlY3RDbGlwUmVjdCgpLCB3aGVuIHRoZXJlIGlzIG5vIGluaXRpYWwgY2xpcHBpbmcKCXJlZ2lvbi4KCgkqIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KCUNvcnJlY3RlZCBzZXZlcmFsICJvbmUtb2ZmIiBlcnJvcnMgZm9yIHRoZSBFbGxpcHNlLCBSZWN0YW5nbGUKCWFuZCBSb3VuZFJlY3RhbmdsZSAoZXNwZWNpYWxseSBzbWFsbCBvbmVzKSBkcmF3IHJvdXRpbmVzLiAKCUFyYyBhbmQgZnJpZW5kcyBzdGlsbCBoYXZlIHRvIGJlIGRvbmUuCgpGcmkgSnVuIDEyIDA2OjIzOjE5IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbbWlzYy9udGRsbC5jXQoJRml4ZWQgc29tZSBvZiB0aGUgcGFyYW1ldGVyIGNvdW50cy4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglHZW5lcmFsIGNsZWFudXAsIGRvY3VtZW50YXRpb24uCglTdGFuZGFyZCBrZXlzIGFyZSBhbGxvd2VkIHRvIGJlICdjbG9zZWQnIGFuZCBzdWNjZWVkLgoKCSogW21pc2Mvc2hlbGwuY10KCUNoZWNrIGZvciBjb3JyZWN0IHJldHVybiB2YWx1ZXMgZnJvbSBSZWcqIGZ1bmN0aW9ucy4KCgkqIFt3aW4zMi9uZXdmbnMuY10KCUFkZGVkIHN0dWJzIGZvciBPcGVuRGVza3RvcEEsIFNldFRocmVhZERlc2t0b3AsIGFuZAoJU2V0VXNlck9iamVjdEluZm9ybWF0aW9uQS4KCldlZCBKdW4gMTAgIDIwOjI4OjA4IDE5OTggIEphbWVzIEp1cmFuICA8anJqMTIwQHBzdS5lZHU+CgoJKiBbZGVidWdnZXIvYnJlYWsuY10KCUZpeGVkIGJ1ZyBpbnRyb2R1Y2VkIGluIDk4MDUwMyB0aGF0IGJyb2tlIHRoZSAtZGVidWcgY29tbWFuZCAKCWxpbmUgb3B0aW9uIGZvciBQRSBleGVjdXRhYmxlIGZpbGVzLgoKCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0gW2luY2x1ZGUvZGVidWd0b29scy5oXQoJICBbZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzXQoJQWRkZWQgJ2NvbmZpZ3VyZScgb3B0aW9ucyB0byBjb21waWxlIG91dCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCglVc2UgLS1kaXNhYmxlLWRlYnVnIHRvIGRpc2FibGUgYWxsIGRlYnVnZ2luZyBtZXNzYWdlcywgYW5kCgktLWRpc2FibGUtdHJhY2UgdG8ganVzdCBkaXNhYmxlIFRSQUNFIG1lc3NhZ2VzLiAgVGhpcyByZXN1bHRzCglpbiBhIHN0cmlwcGVkIGV4ZWN1dGFibGUgdGhhdCBpcyAxNS0yMCUgc21hbGxlci4gIFRoaXMgb3B0aW9uCglpcyB2ZXJ5IG11Y2ggdW50ZXN0ZWQtLWRvbid0IGV4cGVjdCBpdCB0byB3b3JrLgoKCSogW2RvY3VtZW50YXRpb24vZGVidWctbXNnc10gW2RvY3VtZW50YXRpb24vZGVidWdnaW5nXQoJTWlub3IgdXBkYXRlcy4KCgkqIFsqLyouY10KCUZpeGVkIHNvbWUgY29tcGlsZSB3YXJuaW5ncy4gIFRoaXMgYWxzbyBpbmNsdWRlcyB0aGUKCWNvbXBpbGVfd2FybmluZ3NfdHJpdmlhbCBwYXRjaCBmcm9tIFdpbmVIUS4KClR1ZSBKdW4gMTAgMjI6MDA6MTggMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFt3aW5kb3dzL3N5c21ldHJpY3MuY11baW5jbHVkZS9zeXNtZXRyaWNzLmhdCglGaXhlZCBzb21lIFdpbjk1IHZhbHVlcy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXVtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIHNvbWUgV2luOTUgZHJhd2luZyBidWdzLgoJQWRkZWQgZXh0ZW5kZWQgd2luZG93IHN0eWxlIGZsYWdzIChXU19FWF94eHgpLgoKCSogW21pc2MvcHJpbnRkcnYuY11bcmVsYXkzMi93aW5zcG9vbC5zcGVjXQoJQWRkZWQgc3R1YnMgZm9yIERlbGV0ZVByaW50ZXJEcml2ZXIzMkEsIERlbGV0ZU1vbml0b3IzMkEKCWFuZCBEZWxldGVQb3J0MzJBLgoKCSogW3dpbmRvd3MvbWRpLmNdW2luY2x1ZGUvd2luZG93cy5oXVtyZWxheTMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgc3R1YnMgZm9yIENhc2NhZGVXaW5kb3dzIGFuZCBUaWxlV2luZG93cy4KCgkqIFtjb250cm9scy90b29sYmFyLmNdW2luY2x1ZGUvdG9vbGJhci5oXQoJRml4ZWQgYSBmZXcgYnVncyBhbmQgaW1wbGVtZW50ZWQgbmV3IGZlYXR1cmVzLgoKCSogW21pc2Mvc2hlbGxvcmQuY11bcmVsYXkzMi9zaGVsbDMyLnNwZWNdCglBZGRlZCBzdHVicyBmb3IgU0hFTEwzMl82MCwgU0hFTEwzMl82MSBhbmQgU0hFTEwzMl8xODQuCgoJKiBbY29udHJvbHMvY29tY3RsMzJ1bmRvYy5jXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCglOZXcgZmlsZSBjb21jdGwzMnVuZG9jLmMuIENvbnRhaW5zIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMKCW9mIENPTUNUTDMyLkRMTC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBuZWVkZWQgdG8gcnVuIEVYUExPUkVSLkVYRQoJSUVYUExPUkUuRVhFIGFuZCBUQVNLTUFOLkVYRS4KCgkqIFtjb250cm9scy9zdGF0dXMuY10KCUFkZGVkIHRleHQgYWxpZ25tZW50LgoKVHVlIEp1biAgOCAyMjowMDowMCAxOTk4ICBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AYWtocGhkLmF1LmRrPgoKCSogW3Byb2dyYW1zLyovTWFrZWZpbGUuaW5dCglDaGFuZ2VkIHRoZSBydWxlcyB0byB1c2Ugd3JjIGFzIHJlc291cmNlIGNvbXBpbGVyIGJ1dAoJcGFzc2luZyB0aGUgc291cmNlIHRocm91Z2ggZ2NjIGZpcnN0IGZvciBtYWNybyBleHBhbnNpb24uCgoJKiBbcHJvZ3JhbXMvKi8qLnJjXQoJQWRkZWQgI2luY2x1ZGUgIndpbmRvd3MuaCIgZm9yIHRoZSByZXNvdXJjZSBjb21waWxlciBpbiB0aGUKCWFwcHJvcHJpYXRlIGZpbGVzLgoKCSogW3Rvb2xzL3dyYy93cmMuW2NoXV0gW3Rvb2xzL3dyYy93cml0ZXJlcy5jXQoJQWRkZWQgY29tbWFuZGxpbmUgb3B0aW9uIC1BIGZvciBhdXRvcmVnaXN0ZXIgY29kZS4KCUNvcnJlY3RlZCB0aGUgdW5kZXJzY29yZSBwcm9ibGVtIGJ5IGNoZWNraW5nIHRoZSBwcm9wZXIgZGVmaW5lCglmcm9tIGNvbmZpZy5oLgoKU3VuIEp1biAgNyAyMjowOToyOSAxOTk4ICBQYXNjYWwgQ3VvcSA8cGN1b3FAZW5zLWx5b24uZnI+CgoJKiBbb2xlL29sZTJubHMuY10gW21lbW9yeS9zdHJpbmcuY10KCUltcHJvdmVkIExDTWFwU3RyaW5nMzJBLCBhbmQgY2hhbmdlZCBDb21wYXJlU3RyaW5nMzJBLAoJbHN0cmNtcCwgbHN0cmNtcGkgdG8gdXNlIGl0LgoKU2F0IEp1biAgNiAxOTowMDo1MCAxOTk4ICBNYXJ0aW4gU3Ry9m1iZXJnIDxhbXNAbHVkZC5sdXRoLnNlPgoKCSogW2luY2x1ZGUvd2lubnQuaF0KCUFkZGVkIHR5cGVkZWZzIGZvciBzZWN1cml0eSBhbmQgdG9rZW5zLgoKU2F0IEp1biAgNiAxMjoyNjozMSAxOTk4ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW29iamVjdHMvdGV4dC5jXQoJVXNlIGRlYnVnc3RyX2FuIGluIERyYXdUZXh0MTYuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglVc2UgZGVidWdyZXNfdyBpbiBGaW5kUmVzb3VyY2VFeDMyVy4gIEF2b2lkIGNyYXNoaW5nIGR1cmluZwoJZGVidWcgd2hlbiB3bSBpcyBOVUxMLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJSW4gUkVMQVlfRGVidWdDYWxsVG8xNiwgc2VuZCBvdXRwdXQgdG8gdGhlIHJpZ2h0IHBsYWNlIGFuZAoJYXZvaWQgc2lkZSBlZmZlY3RzIGluIG1hY3JvIGFyZ3VtZW50cy4KCldlZCBKdW4gIDMgMjA6NTY6MDMgMTk5OCAgSHV3IEQgTSBEYXZpZXMgPGRhdmllc2hAYWJhY3VzLnBoeXNpY3Mub3guYWMudWs+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJRml4IHNldmVyYWwgb2ZmIGJ5IG9uZSBlcnJvcnMgaW4gc2Nyb2xsYmFyIHBhaW50aW5nLgoKVHVlIEp1biAgMiAyMzo1ODo1OSAxOTk4ICBJbnNvbW5pYSAoU3RlYSBHcmVlbmUpIDxpbnNvbW5pYUBjb3JlLmJpbmdoYW10b24uZWR1PgoKCSogW2dyYXBoaWNzL2Rzb3VuZC5jXQoJUmV3cm90ZSBtaXhlciBjb2RlIHRvIGhhbmRsZSBwYW5uaW5nIGFuZCB2b2x1bWUgZm9yIDE2LT4xNiwgMTYtPjgsCgk4LT4xNiwgYW5kIDgtPjggYml0IG1peGVzLiAgQ29uZm9ybXMgdG8gRGlyZWN0WCdzICJsb2dhcml0aG1pYwoJaGVhcmluZyBzY2FsZSIgYXMgc3BlY2lmaWVkIGluIE0kVkMgZG9jcy4gIFN0aWxsIGRvZXMgbm90IGhhbmRsZQoJbWl4aW5nIG9mIGRpZmZlcmVudCBmcmVxdWVuY2llcyAoSSBhbSBzdGlsbCB3b3JraW5nIG9uIHRoYXQpLiAKCVRlc3RlZCAxNi0+MTYgZXh0ZW5zaXZlbHkgd2l0aCBTdGFyQ3JhZnQuICBPdGhlciBtaXhpbmcgY29tYmluYXRpb25zCgl1bnRlc3RlZCBidXQgc2hvdWxkIHdvcmsgZmluZS4gIFN0aWxsIGtpbmQgb2YgYSB3b3JrIGluIHByb2dyZXNzLAoJc28gYmUgd2FybmVkLgoKVHVlIEp1biAgMiAwMzozMTozMyAxOTk4ICBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCgkqIFt0b29scy93cmMvdXRpbHMuY10KCWR1cF9iYXNlbmFtZTogZml4IHRvIHN0cmlwIGRpcmVjdG9yeS4KCk1vbiBKdW4gIDEgMjA6MDA6MDAgMTk5OCAgSnVlcmdlbiBTY2htaWVkIDxqdWVyZ2VuLnNjaG1pZWRAbWV0cm9uZXQuZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL2N1cnNvcmljb24uY10gW3JlbGF5MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBzdHVicyBMb2FkQ3Vyc29yRnJvbUZpbGVXIGFuZCBMb2FkQ3Vyc29yRnJvbUZpbGVBLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWF5IDMxIDEzOjQwOjEzIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2lmMTYzMi9zaWduYWwuY10KCUFkZGVkIGRpc3BsYXkgb2YgZXhjZXB0aW9uIG5hbWUuCgoJKiBbbG9hZGVyL3Rhc2suY10KCVlldCBhbm90aGVyIGF0dGVtcHQgYXQgZml4aW5nIFN3aXRjaFN0YWNrVG8vU3dpdGNoU3RhY2tCYWNrLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXSBbcmVsYXkzMi9idWlsdGluMzIuY10gW3Rvb2xzL2J1aWxkLmNdCgkgIFt3aW4zMi9rZXJuZWwzMi5jXQoJR2VuZXJhdGUgYW4gYXNzZW1ibHkgc3R1YiBmb3IgV2luMzIgcmVnaXN0ZXIgZnVuY3Rpb25zIHRvIG1ha2UKCXRoZWlyIG5hbWVzIGF2YWlsYWJsZSBhdCBsaW5rIHRpbWUuCgoJKiBbcHJvZ3JhbXMvKi9NYWtlZmlsZS5pbl0KCUFkZGVkIGhhY2tzIHRvIHN1cHBvcnQgb2xkIHJlc291cmNlIGNvbXBpbGVyLgoKRnJpIE1heSAyOSAxNjoyNzoxNCAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BqZXQuZnJhbmtlbi5kZT4KCgkqIFt0b29scy90ZXN0cnVuXQoJTWVyZ2Ugb2YgbXkgdGVzdHNjcmlwdHMgYXQgaG9tZSBpbnRvIG9uZSBzaW5nbGUgcGVybCBwcm9ncmFtCgkodGVzdGVkIHdpdGggcGVybDUpLiBXb3JrcyBvbmx5IG9uIExpbnV4IGR1ZSB0byAncHMnIGFuZCAnaXBjcycKCW1hZ2ljLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUFkZGVkIHNvbWUgRGVmYXVsdE1lbnVJdGVtIHN0dWJzLgoKCSogW2RlYnVnZ2VyL3N0YWJzLmNdCglGaXhlZCBzdGFicyBsb2FkaW5nLCBub3cgc3VwcG9ydHMgKGludCxpbnQpIHR5cGVpbmZvIGZvcm1hdCB1c2VkCglieSBnY2MtMi44IGFuZCBlZ2NzLTEuIElmIGl0IHN0aWxsIGNyYXNoZXMsIHBsZWFzZSBtYWlsIG1lLgoKCSogW2lmMTYzMi9dW3JlbGF5MzIvXQoJQWRkZWQgbXN2aWRlby5kbGwgKHN0dWJzIG9ubHkpCglSZXBsYWNlZCBzb21lIHB0ciBieSBzdHIgZm9yIHN0cmluZ2Nhc2VzCglBZGRlZCBzb21lIG5ldyBzdHVicyAoVnhEQ2FsbCwgRmluZENsb3NlTm90aWYuLi4uKQoKCSogW21pc2MvbmV0d29yay5jXQoJU29tZSBhcmd1bWVudCBmaXhlcy4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdW21pc2MvY3B1LmNdCglSZWdpc3RyeSBpbml0aWFsaXphdGlvbiBwYXJ0aWFsbHkgcmV3cml0dGVuIGFuZCBlbmhhbmNlZC4KCgkqIFtzY2hlZHVsZXIvKi5jXQoJU29tZSBhZGRpdGlvbnMgc28gd2UgZG9uJ3QgZG8ga2lsbCgwLFNJR1VTUjEpIChraWxsIHByb2Nlc3Nncm91cAoJaW5zdGVhZCBvZiB0YXJnZXRlZCB0aHJlYWQpCglBZGRlZCBTZXRUaHJlYWRDb250ZXh0LgoKVGh1IE1heSAyOCAyMzo1OTo1OSAxOTk4ICBCZXJ0aG8gU3R1bHRpZW5zIDxiZXJ0aG9AYWtocGhkLmF1LmRrPgoKCSogW3Rvb2xzL3dyYy8qXQoJTmV3IHJlc291cmNlIGNvbXBpbGVyIHZlcnNpb24gMS4wLjAgKDI4LU1heS0xOTk4KQoKCSogW01ha2UucnVsZXMuaW5dIFtNYWtlZmlsZS5pbl0KCUNoYW5nZWQgYW5kIGFkZGVkIHJjIHJ1bGVzIHRvIHBvaW50IHRvIHRvb2xzL3dyYy93cmMuCgoJKiBbY29uZmlndXJlLmluXSBbaW5jbHVkZS9jb25maWcuaC5pbl0KCUFkZGVkIGNoZWNrIGZvciBmdW5jdGlvbiAnc3RyaWNtcCcuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXQoJQ29tbWVudGVkIG91dCB0aGUgb2xkIHJlc291cmNlIHN0cnVjdHVyZSB0byBjYXRjaCByZWZlcmVuY2VzLgoJSXQgYWxzbyBpbmNsdWRlcyB3cmNfcnNjLmguCgoJKiBbaW5jbHVkZS93cmNfcnNjLmhdCglOZXcgZmlsZS4gRGVmaW5pdGlvbnMgZm9yIHRoZSByZXNvdXJjZXMgZ2VuZXJhdGVkIHdpdGggd3JjLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgI2lmZGVmIFJDX0lOVk9LRUQgdG8gZXhjbHVkZSBzdGRhcmcuaC4KCUFkZGVkIFNTX05PVElGWSBmbGFnLgoKCSogW2luY2x1ZGUvd2lubmxzLmhdCglBZGRlZCBTVUJMQU5HXyogZGVmaW5pdGlvbnMgYW5kIGNvcnJlY3RlZCBzb21lIGRlZmF1bHRzLgoKCSogW2xvYWRlci9saWJyZXMuY10KCUNoYW5nZWQgdGhlIHN5c3JlcyBsb2FkIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHdyYyBnZW5lcmF0ZWQKCXJlc291cmNlcy4KCgkqIFtyZXNvdXJjZS9zeXNyZXNfKi5yY10KCUFkZGVkICNpbmNsdWRlIDx3aW5kb3dzLmg+CgoJKiBbcmVzb3VyY2Uvc3lzcmVzLmNdCglDaGFuZ2VkIGRlY2xhcmF0aW9ucyB0byBtYXRjaCB3cmMncyBvdXRwdXQKCgkqIFtyZXNvdXJjZS9NYWtlZmlsZS5pbl0KCUNoYW5nZWQgcnVsZXMgdG8gd29yayB3aXRoIHdyYy4KCgkqIFt0b29scy9tYWtlZGVwLmNdCglDaGFuZ2VkIGdlbmVyYXRpb24gb2YgLnJjIGZpbGUgZGVwZW5kZW5jaWVzIHRvIC5zIHRhcmdldC4KClRodSBNYXkgMjggMjI6Mjg6MzkgMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFtmaWxlcy9maWxlLmNdW2luY2x1ZGUvd2luZG93cy5jXVtyZWxheTMyL2tlcm5lbDMyLnNwZWNdCglJbXBsZW1lbnRlZCBHZXRGaWxlQXR0cmlidXRlc0V4MzJBL1cuCgoJKiBbbWlzYy9pbWFnZWxpc3QuaF1baW5jbHVkZS9jb21tY3RybC5oXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCglBZGRlZCBJbWFnZUxpc3RfUmVhZCBhbmQgSW1hZ2VMaXN0X1dyaXRlIHN0dWJzLgoJQWRkZWQgSW1hZ2VMaXN0X0FkZEljb24gZnVuY3Rpb24uCglBZGRlZCBJbWFnZUxpc3RfTG9hZEltYWdlLiBJdCBpcyB0aGUgc2FtZSBhcyBJbWFnZUxpc3RfTG9hZEltYWdlMzJBLgoKCSogW2NvbnRyb2xzL2hlYWRlci5jXQoJRml4ZWQgYml0bWFwIGRyYXdpbmcgYnVnLgoJQWRkZWQgZnVsbCBiaXRtYXAgc3VwcG9ydC4KCgkqIFtpbmNsdWRlL2NvbW1jdHJsLmhdCglBZGRlZCBtaXNzaW5nIGhlYWRlciBtYWNyb3MuCgoJKiBbY29udHJvbHMvdG9vbGJhci5jXVtpbmNsdWRlL3Rvb2xiYXIuaF1baW5jbHVkZS9jb21tY3RybC5oXQoJICBbY29udHJvbHMvY29tbWN0cmwuY10gW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCUZpcnN0IGltcGxlbWVudGF0aW9uIG9mIHRvb2xiYXIgY29udHJvbC4KCUltcGxlbWVudGVkIENyZWF0ZVRvb2xiYXIsIENyZWF0ZVRvb2xiYXJFeCBhbmQgQ3JlYXRlTWFwcGVkQml0bWFwLgoKCSogW2NvbnRyb2xzL3Byb2dyZXNzLmNdW2NvbnRyb2xzL3N0YXR1cy5jXQoJU29tZSBjb2RlIGNsZWFudXAuCgoJKiBbY29udHJvbHMvY29tbWN0cmwuY11baW5jbHVkZS9jb21tY3RybC5oXVtyZWxheTMyL2NvbWN0bDMyLnNwZWNdCglSZW1vdmVkIENyZWF0ZVN0YXR1c1dpbmRvdzE2IGFuZCBEcmF3U3RhdHVzVGV4dDE2LgoJQ3JlYXRlU3RhdHVzV2luZG93IGlzIHRoZSBzYW1lIGFzIENyZWF0ZVN0YXR1c1dpbmRvdzMyQS4KCURyYXdTdGF0dXNUZXh0IGlzIHRoZSBzYW1lIGFzIERyYXdTdGF0dXNUZXh0MzJBLgoKVGh1IE1heSAyOCAxNjowMToyOCAxOTk4ICBNYXR0aGV3IEouIEZyYW5jaXMgIDxhc2JlbEBkaWFsLnBpcGV4LmNvbT4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9iaXRtYXAuaF0gW29iamVjdHMvb2VtYml0bWFwLmNdCgkgIFtvYmplY3RzL2RjLmNdIFtncmFwaGljcy94MTFkcnYvYml0Ymx0LmNdCglBZGRlZCBwYXJ0aWFsIGltcGxlbWVudGF0aW9uIG9mIENyZWF0ZURJQlNlY3Rpb24sIHdpdGggZ3JlYXQgdGhhbmtzCgl0byBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4gZm9yCgljb250cmlidXRpbmcgdGhlIGJ1bGsgb2YgdGhlIHBhdGNoLgoKV2VkIE1heSAyNyAxOTowNDozMSAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFt3aW4zMi9rZXJuZWwzMi5jXSBbaWYxNjMyL3RodW5rLmNdIFtpbmNsdWRlL2ZsYXR0aHVuay5oXQoJVGh1bmtDb25uZWN0MTYgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIG1vdmVkIHRvIGVtdWxhdG9yLgoKCSogW2xvYWRlci9uZS9zZWdtZW50LmNdCglDYWxsIERsbEVudHJ5UG9pbnQgd2l0aCBjb3JyZWN0IGFyZ3VtZW50cy4KCgkqIFtyZWxheTMyL2J1aWx0aW4zMi5jXQoJQnVnZml4OiBSZWxheSBkZWJ1Z2dpbmcgZGlkIG5vdCB3b3JrIGZvciBtdWx0aXBsZSBwcm9jZXNzZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQnVnZml4OiBkd0l0ZW1EYXRhIHdhcyBub3Qgc2V0IGZvciBNRl9PV05FUkRSQVcgbWVudXMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtyZWxheTMyL3JlbGF5Mzg2LmNdCglSZWxheSBtZXNzYWdlcyBjb252ZXJ0ZWQgdG8gdXNlIERQUklOVEYuCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXSBbcmVsYXkzMi91c2VyMzIuc3BlY10KCUltcGxlbWVudGVkIFBhaW50RGVza3RvcC4KCgkqIFtmaWxlcy9wcm9maWxlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFttaXNjL25ldHdvcmsuY10KCSAgW21pc2MvcHJpbnRkcnYuY10gW3JlbGF5MzIvd2luc3Bvb2wuc3BlY10gCgkgIFt3aW4zMi9vcmRpbmFscy5jXSBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXQoJU29tZSBzdHVicyBhZGRlZC4KCgkqIFtyZWxheTMyL21wci5zcGVjXQoJQWxsIG9yZGluYWxzIHdlcmUgb2ZmIGJ5IG9uZS4KClR1ZSBNYXkgMjYgMTM6MzI6NTcgMTk5OCAgQmlsbCBIYXdlcyA8d2hhd2VzQHN0YXIubmV0PgoKCSogW21pc2MvbHN0ci5jXSBbaW5jbHVkZS9jYXNlbWFwLmhdIFt0b29scy91bmltYXAucGxdCglBZGRlZCBVbmljb2RlIGNhc2UgY29udmVyc2lvbiByb3V0aW5lcyB0b3d1cHBlci90b3dsb3dlciwKCXdpdGggbWFwcGluZyB0YWJsZXMgY2FzZW1hcC5oIGNyZWF0ZWQgYnkgdG9vbHMvdW5pbWFwLnBsLgoKCSogW21pc2MvbnRkbGwuY10gW2luY2x1ZGUvd2lubmxzLmhdIFtyZWxheTMyL250ZGxsLnNwZWNdCgkgIFtyZWxheTMyL2FkdmFwaS5zcGVjXQoJTWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBJc1RleHRVbmljb2RlLCBqdXN0IGVub3VnaCB0byBnZXQKCU5UNCBub3RlcGFkIHRvIG9wZW4gYXNjaWkvdW5pY29kZSBmaWxlcy4KCgkqIFtNYWtlLnJ1bGVzLmluXSBbcmVzb3VyY2VzL3N5c3Jlc19Fbi5yY10KCUFkZGVkIGluY2x1ZGUgZmlsZSBkbGdzLmggZm9yIGJ1aWxkaW5nIHJlc291cmNlIGZpbGVzLCBzbyB0aGF0CglyZXNvdXJjZXMgY2FuIHJlZmVyIHRvIGRlZmluZWQgdmFsdWVzIChlLmcuIHBzaEhlbHApLgoKCSogW21pc2MvY3J0ZGxsLmNdIFtyZWxheTMyL2NydGRsbC5zcGVjXQoJVXNlIHRvd3VwcGVyL3Rvd2xvd2VyIGZvciAzMlcgY2FzZSBjb252ZXJzaW9ucy4KCgkqIFttZW1vcnkvc3RyaW5nLmNdCglVc2UgdG93dXBwZXIgZm9yIDMyVyBjYXNlIGNvbnZlcnNpb25zLgoKCSogW29sZS9vbGUybmxzLmNdCglVc2UgdG93dXBwZXIgZm9yIDMyVyBjYXNlIGNvbnZlcnNpb25zOyBmaXggbWVtIGxlYWs7IG1pbm9yIGNsZWFudXAKCgkqIFtjb250cm9scy9lZGl0LmNdCglBZGRlZCBzb2Z0IGJyZWFrIGZsYWcgdG8gZWRpdCBzdGF0ZS4gUHJpbnQgdW5rbm93biBhY3Rpb24gdmFsdWVzCglmb3IgV01fVlNDUk9MTCAoYWN0aW9uIDE5MCBvY2N1cnMgd2hlbiBydW5uaW5nIE5UNCBub3RlcGFkLikKCk1vbiBNYXkgMjUgMjI6NDI6NDAgMTk5OCAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogW2ZpbGVzL2ZpbGUuY10KCUNhcmUgZm9yIGEgcGF0aG9sb2dpY2FsIGNhc2UgaW4gU2V0RmlsZVBvaW50ZXIuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCglIYW5kbGUgbG9uZ2VyIEZvbnQgbmFtZXMgaW4gTEZEX0NvbXBvc2VMRkQgYW5kIHRyeSB0byBjYXRjaCBlcnJvcnMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglVbmxvYWQgRHVtbXltb2R1bGUgd2hlbiBQRV9Mb2FkTGlicmFyeUV4MzJBIGZhaWxzIHdpdGgKCVBFX0xvYWRJbWFnZSAobWFrZXMgRW5jYXJ0YSA5OCBpbnN0YWxsZXIgcHJvY2VlZCkuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJTW92ZSBhIGNoZWNrIGZvciBhIHNwZWNpYWwgY2FzZSBpbiBSZWdDcmVhdGVLZXlFeDMyVyBhZnRlciB0aGUKCWNoZWNrIGZvciBleGlzdGVuY2UuCgpUdWUgTWF5IDI1IDIwOjE4OjI2IDE5OTggIE1hdHRoZXcgQmVja2VyIDxtYmVja2VyQGdsYXNzY2l0eS5uZXQ+CgoJKiBbbWlzYy9udGRsbC5jXQoJQWRkZWQgc29tZSBzdHVicywganVzdCBndWVzc2luZyBhdCB0aGUgc2l6ZSBvZiB0aGVpciBwYXJhbSBsaXN0cy4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglBZGRlZCBzdHVicyBmb3IgUmVnVW5Mb2FkS2V5LCBSZWdTZXRLZXlTZWN1cml0eSwgUmVnU2F2ZUtleSwKCVJlZ1Jlc3RvcmVLZXksIGFuZCBSZWdSZXBsYWNlS2V5CgoJKiBbcHJvZ3JhbXMvcmVndGVzdC9yZWd0ZXN0LmNdCglVcGRhdGVkIHJlZ2lzdHJ5IHRlc3RpbmcgcHJvZ3JhbS4KClN1biBNYXkgMjQgMTg6MTE6NDAgMTk5OCAgQWxleCBQcmllbSA8YWxleHBAc2NpLmt1bi5ubD4KCgkqIFtmaWxlL3Byb2ZpbGUuY10KCUFkZGVkIGZsYWcgJ3JldHVybl92YWx1ZXMnIHRvIFBST0ZJTEVfR2V0U2VjdGlvbi4KClN1biBNYXkgMjQgMTM6NDE6MTAgMTk5OCAgSmFtZXMgSnVyYW4gPGpyajEyMEBwc3UuZWR1PgoKCSogW21pc2Mvc2hlbGwuY10gW2ZpbGVzL2RpcmVjdG9yeS5jXQoJRG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcgaW5mbyBhZGRpdGlvbnMuCgoJKiBbKi8qLmNdIFtpbmNsdWRlLyouaF0KCU1vdmVkIG1hbnkgZXh0ZXJuIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRvIGFwcHJvcHJpYXRlIGhlYWRlciBmaWxlcy4KCUNsZWFuZWQgdXAgYSBmZXcgY29tcGlsZSB3YXJuaW5ncy4KCUlmICNpbmNsdWRlICJkZWJ1Zy5oIiBpcyBwcmVzZW50LCByZW1vdmVkICNpbmNsdWRlIDxzdGRpby5oPi4KCWRlYnVnLmggaW5jbHVkZXMgc3RkaW8uaCwgc28gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbmNsdWRlIGJvdGguCgoJKiBbZ3JhcGhpY3MvKi5jXSBbaWYxNjMyL3NpZ25hbC5jXSBbaXBjLyouY10gW3NjaGVkdWxlci8qLmNdCgkgIFt3aW4zMi8qLmNdIFt3aW5kb3dzLyouY10KCUZpbmFsIHBhdGNoIHRvIGNvbnZlcnQgZnByaW50ZiBzdGF0ZW1lbnRzIHRvIG5ldyBkZWJ1Z2dpbmcgaW50ZXJmYWNlLgoJU29tZSBmcHJpbnRmcyBhcmUgc3RpbGwgbGVmdCwgZXNwZWNpYWxseSBpbiB0aGUgZGVidWdnZXIvIGRpcmVjdG9yeS4KCUhvd2V2ZXIsIElNSE8sIGl0J3Mgbm90IHdvcnRoIHRoZSBlZmZvcnQgdG8gY2hhbmdlIHRoZSByZXN0LgoKRnJpIE1heSAyMiAyMTo1ODozNSAxOTk4ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUNvcnJlY3QgaGFuZGxpbmcgb2Yga2V5cyAiYC09W11cOycsLi8iLgoKRnJpIE1heSAyMiAxMjowNjowMCAxOTk4ICBQZXIgTGluZHN0cvZtIDxwZWxpbnN0ckBhbGdvbmV0LnNlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXSBbd2luMzIvY29uc29sZS5jXQoJQWRkZWQgc3R1YiBmb3IgUmVhZENvbnNvbGVPdXRwdXRDaGFyYWN0ZXIzMkEuCgpUaHUgTWF5IDIxIDE2OjQ1OjQ4IDE5OTggIFBhc2NhbCBDdW9xIDxwY3VvcUBlbnMtbHlvbi5mcj4KCgkqIFtvbGUvb2xlMm5scy5jXQoJQmVnYW4gYmV0dGVyIGltcGxlbWVudGF0aW9uIG9mIExDTWFwU3RyaW5nMzJBLgoJTm90IHZlcnkgd2VsbCB0ZXN0ZWQgeWV0LCBhbmQgc3RpbGwgbmVlZCBpbXByb3ZlbWVudHMuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglEb2N1bWVudGVkIGZ1bmN0aW9ucy4KCldlZCBNYXkgMjAgMjE6Mzc6NTYgMTk5OCAgUGV0ZXIgSHVubmlzZXR0IDxodW5uaXNlQG5vcnRlbC5jYT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF1bbWlzYy9tYWluLmNdCglDaGFuZ2UgU3lzdGVtUGFyYW1ldGVySW5mbyB0byBzdXBwb3J0IFNQSV9HRVRISUdIQ09OVFJBU1QuIEFsc28KCWluY2x1ZGUgc29tZSBtaXNzaW5nIFNQSV8gZGVmaW5pdGlvbnMuCgoJKiBbaW5jbHVkZS9kc291bmQuaF1bbXVsdGltZWRpYS9kc291bmQuY11bcmVsYXkzMi9kcGxheXguc3BlY10KCUFkZGVkIHN0dWJzIGZvciBEaXJlY3RQbGF5TG9iYnlDcmVhdGVbQVddLiBOb3Qgc3VyZSBpZiB0aGVzZQoJc2hvdWxkIGdvIGludG8gYSBuZXcgZmlsZXMgZHBsYXl4LmM/IEFueW9uZSBjYXJlPwoKCSogW2luY2x1ZGUvd2lubmxzLmhdCglBZGRlZCB0d28gbWlzc2luZyBmbGFncyBmb3IgdGhlIENvbXBhcmVTdHJpbmczMiBmdW5jdGlvbnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXkgMTcgMTY6MjM6NTYgMTk5OCAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogW2ZpbGUvcHJvZmlsZS5jXQoJRml4IHRoZSByZXR1cm4gdmFsdWUgb2YgUFJPRklMRV9HZXRTZWN0aW9uCgoJKiBbbWlzYy9jcnRkbGwuY10KCURvIF9nZXRkcml2ZSwgZml4IF9jaGRyaXZlLgoKCSogW21pc2MvY29tbWRsZy5jXQoJRmlyc3QgY3V0IGF0IENob29zZUNvbG9yW1dBXS4KCgkqIFttaXNjL25ldHdvcmsuY10KCURvIHNvbWV0aGluZyBzZW5zaWJsZSBmb3IgV05ldEdldERpcmVjdG9yeVR5cGUxNi4KClN1biBNYXkgMTcgMTA6MjE6MzUgMTk5OCAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgZGlzYWJsZWQgc3ViIG1lbnVzIHdpdGggTUZfQllQT1NJVElPTiB0aGF0IHdlcmUgbm90IGRpc2FibGVkLgoKCSogW21pc2MvY3J0ZGxsLmNdIFtyZWxheTMyL2NydGRsbC5zcGVjXSBbaW5jbHVkZS93aW5lcnJvci5oXQoJSW1wbGVtZW50ZWQgZnNjYW5mLCBmc2V0cG9zLCBfYWNjZXNzLCBfZnByZXNldCAodGhhbmtzIHRvIFV3ZSBCb25uZXMpLAoJYW5kIF9sdG9hLiAKCgkqIFtsb2FkZXIvdGFzay5jXQoJTWFrZVByb2NJbnN0YW5jZTogbXVzdCB1c2UgQ1VSUkVOVF9EUyBpZiBoSW5zdCA9PSBOVUxMLgoKCSogW21pc2Mvc2hlbGwuY10KCVNIRUxMX0dldFJlc291cmNlVGFibGUsIEludGVybmFsRXh0cmFjdEljb246IGZpeGVkIGJyb2tlbiAuSUNPIGhhbmRsaW5nCgoJKiBbd2luZG93cy93aW5wb3MuY10KCURlZmVyV2luZG93UG9zOiByZW1vdmVkICJzYW1lIHBhcmVudCIgcmVxdWlyZW1lbnQuCglXaGljaCBkb2Mgc3RhdGVzIHRoYXQgdGhpcyBpcyByZXF1aXJlZCA/CgpTYXQgTWF5IDE2IDIwOjA4OjExIDE5OTggIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZS9tb2R1bGUuY10KCU1vcmUgTkUgbW9kdWxlIGNsZWFudXBzLgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCBTd2l0Y2hTdGFja0JhY2soKS4KCkZyaSBNYXkgMTUgMTA6MDQ6MjcgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtYXJjdXNAamV0LmZyYW5rZW4uZGU+CgoJKiBbY29uZmlndXJlLmluXVtpbmxjdWRlL2FjY29uZmlnLmhdCglGaXhlZCBicm9rZW4gT1NTIGNoZWNrLCBhZGRlZCBjaGVjayBmb3Igd29ya2luZyBzaWdhbHRzdGFjaywKCWZpeGVkIGJyb2tlbiBzdGF0ZnMgY2hlY2tzIG9uIHNvbWUgbGludXggc3lzdGVtcy4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY11bbG9hZGVyL3BlX2ltYWdlLmNdW3JlbGF5MzIvYnVpbHRpbi5jXQoJICBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgaGFuZGxpbmcgb2Ygd2luMzIgbW9kdWxlIHBhdGhuYW1lcy4KCgkqIFtyZWxheTMyL3duYXNwaTMyLnNwZWNdCglOZXcgZmlsZS4KCgkqIFttaXNjL2x6ZXhwYW5kLmNdCglMWkNvcHkgYXV0by1kZWNvbXByZXNzZXMgTFogY29tcHJlc3NlZCBmaWxlcywgZXZlbiBpZiB0aGV5IGFyZSBub3QKCXNwZWNpYWxseSBmbGFnZ2VkLiBGaXhlcyBzb21lIEluc3RhbGxTaGllbGQgcHJvYmxlbXMuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJU29tZSBmaXhlcyBmb3IgUmVnUXVlcnlJbmZvS2V5IChyZWZlcmVuY2UgcHJvZ3JhbSBtb25rZXkuZXhlCglmcm9tIFdpbjMyIFNESyB3b3JrcyBub3cgYmV0dGVyKS4gUHJvYmFibHkgc3RpbGwgaGFzIGZhdWx0cy4KCkZyaSBNYXkgMTUgMDg6NTg6NTggMTk5OCAgTWFydGluIEJvZWhtZSA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KCgkqIFtncmFwaGljcy9tYXBwaW5nLmNdIFtpbmNsdWRlL2RjLmhdIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9kYy5jXQoJUmV3b3JrZWQgdGhlIHdheSB3b3JsZCB0cmFuc2Zvcm1hdGlvbnMgYW5kIG1hcHBpbmcgbW9kZXMgYXJlIGhhbmRsZWQKCXNvIHRoYXQgYm90aCBvZiB0aGVzZSB0cmFuc2Zvcm1hdGlvbnMgY2FuIGJlIGNvbXB1dGVkIGluIGEgc2luZ2xlCglzdGVwLgoKCSogW2dyYXBoaWNzL3BhaW50aW5nLmNdIFtncmFwaGljcy9wYXRoLmNdIFtpbmNsdWRlL3BhdGguaF0KCU1vcmUgR0RJIHBhdGggc3VwcG9ydC4KCgkqIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KCUZpeGVkIHRoZSByZXR1cm4gdmFsdWUgb2YgR1JBUEhfRHJhd0FyYyBmb3IgdGhlIHplcm8gaGVpZ2h0IC8KCXplcm8gd2lkdGggY2FzZSB0byByZWZsZWN0IFdpbmRvd3MnIGJlaGF2aW91ci4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3JlbGF5MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvZGMuY10KCUltcGxlbWVudGVkIE1vZGlmeVdvcmxkVHJhbnNmb3JtIGFuZCBDb21iaW5lVHJhbnNmb3JtLgoKVHVlIE1heSAxNCAxODowMzo0NiAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW2NvbnRyb2xzL2NvbW1jdHJsLmNdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCSAgW2NvbnRyb2xzLyouY11baW5jbHVkZS8qLmhdCglJbXBsZW1lbnRlZCBJbml0Q29tbW9uQ29udHJvbHNFeCAoZGxsIHZlcnNpb24gNC43MiBjb21wYXRpYmxlKS4KCUluaXRDb21tb25Db250cm9scyBjYWxscyBJbWFnZUNvbW1vbkNvbnRyb2xzRXguCglSZWdpc3RlcmluZyBjb2RlIG9mIHRoZSBjb21tb24gY29udHJvbHMgaGFkIHRvIGJlIGNoYW5nZWQKCShzZWUgWFhYWF9SZWdpc3RlciBmdW5jdGlvbnMpLgoKCSogW2NvbnRyb2xzL3N0YXR1cy5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdW2luY2x1ZGUvc3RhdHVzLmhdCglJbXBsZW1lbnRlZCBtb3N0IG5ldyBmZWF0dXJlcyBhbmQgZml4ZWQgdGhlIGxvb2sgYW5kIGZlZWwuCgoJKiBbY29udG9scy9jb21tY3RybC5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCUltcGxlbWVudGVkIE1lbnVIZWxwIChpbmNvbXBsZXRlKS4KCgkqIFtjb250cm9scy9zdGF0dXMuY11bY29udHJvbHMvcHJvZ3Jlc3MuY10KCUNoYW5nZWQgYWxsb2NhdGlvbiBzdHJhdGVneSBmb3IgY29udHJvbCBzcGVjaWZpYyBtZW1vcnkuCgoJKiBbY29udHJvbHMvaGVhZGVyLmNdW2luY2x1ZGUvaGVhZGVyLmhdW2luY2x1ZGUvY29tbWN0cmwuaF0KCUZpcnN0IGltcGxlbWVudGF0aW9uIG9mIGhlYWRlciBjb250cm9sLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdW3dpbmRvd3Mvc3lzY29sb3JzLmNdCglGaXhlZCBkZWZhdWx0IGNvbnRyb2wgY29sb3JzIGZvciBXaW45NSBsb29rLgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglGaXhlZCBvZmYgYnkgb25lIGVycm9yIGZvciBXaW45NSBsb29rLiBUb3AgYm9yZGVyIG9mIGNoaWxkIHdpbmRvd3MKCXNob3VsZCBiZSB2aXNpYmxlLgoKCSogW21pc2MvaW1hZ2VsaXN0LmhdCglJbXByb3ZlZCBkb2N1bWVudGF0aW9uIGFuZCBmaXhlZCBzb21lIGJ1Z3MuCgpUaHUgTWF5IDE0IDE1OjQyOjIxIDE5OTggIFJvYmVydCBXaWxoZWxtICA8cm9iZXJ0QHBoeXNpb2wubWVkLnR1LW11ZW5jaGVuLmRlPgoKCSogW3JlbGF5MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBoeXBvdCxqMCxqMSxqbiBhbmQgY2VpbC4KCldlZCBNYXkgMTMgMTk6MTA6MTAgMTk5OCAgUGFzY2FsIEN1b3EgPHBjdW9xQGVucy1seW9uLmZyPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUl0ZW0gaGVpZ2h0IGlzIG5vdyBleGFjdGx5IGZvbnQgaGVpZ2h0LgoJV2luZSBsaXN0Ym94ZXMgbm93IGJlaGF2ZSBsaWtlIFdpbmRvd3MnIHdoZW4gdGhleSBhcmUgCgljcmVhdGVkIHdpdGhvdXQgV1NfVlNDUk9MTCBidXQgdGhlIHByb2dyYW0gc3Vic2VxdWVudGx5IAoJY2FsbHMgU2hvd1Njcm9sbEJhciBvciBTZXRTY3JvbGxJbmZvLgoKV2VkIE1heSAxMyAxODozMzowMSAxOTk4ICBVbHJpY2ggV2VpZ2FuZCA8d2VpZ2FuZEBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtyZWxheTMyL3JlbGF5Mzg2LmNdCglSZXN0b3JlIEVTIGFsc28gaW4gdGhlIG5vbi1kZWJ1ZyBjYXNlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUJ1Z2ZpeDogQmxvY2tpbmcgVFNYTmV4dEV2ZW50IGNvdWxkIGRlYWRsb2NrIFdpbmUuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglTaWxseSBzdHVicyBmb3IgTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cyAvIFBvc3RUaHJlYWRNZXNzYWdlCgl0aGF0IG1ha2Ugc29tZSBwcm9ncmFtcyBydW4gYmV0dGVyLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJV0lOUFJPQ19NYXBNc2czMkF0bzE2LzE2VG8zMkE6IGFkZGVkIFdNX05PVElGWS4gIAoKICAgICAgICAqIFt3aW4zMi9rZXJuZWwzMi5jXQoJQWRkZWQgMTYtPjMyIHRodW5raW5nIGFuZCBpbXByb3ZlZCAzMi0+MTYgdGh1bmtpbmcgZnVuY3Rpb25zLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBuZXcgdmFyaWFudCBvZiBDYWxsRnJvbTE2IHN0dWIgZm9yIHVzZSB3aXRoIFdpbjk1IHRodW5rcy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpZjE2MzIvYnVpbHRpbi5jXSBbd2luMzIva2VybmVsMzIuY10KCUFkZGVkIGEgZmV3IHVuZG9jdW1lbnRlZCBLRVJORUwgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9uZS9tb2R1bGUuY10gW2xvYWRlci9uZS9zZWdtZW50LmNdCglDYWxsIERsbEVudHJ5UG9pbnQgZm9yIDE2LWJpdCBETExzIHdpdGggc3Vic3lzdGVtID49IDQuMC4KCgkqIFt3aW4zMi9rZXJuZWwzMi5zcGVjXSBbd2luMzIvd293MzIuc3BlY10gW3dpbjMyL29yZGluYWxzLmNdCglVc2UgbmFtZXMgZnJvbSB0aGUgT2N0IDk0IGJldGEgcmVsZWFzZSBmb3IgdW5kb2MuIGZ1bmN0aW9ucy4KCldlZCBNYXkgMTMgMTQ6MTg6MjYgMTk5OCAgTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglDb2RlIGNsZWFudXAuCgoJKiBbbWlzYy9jcHUuY10KCUNvbW1lbnRlZCBvdXQgdGhlIHJlZ2lzdHJ5IHB1dHMgdGVtcG9yYXJpbHkuCgoJKiBbcHJvZ3JhbXMvcmVndGVzdC8qXQoJTmV3IHJlZ2lzdHJ5IHRlc3RpbmcgcHJvZ3JhbS4KClR1ZSBNYXkgMTIgMjI6NTQ6MDMgMTk5OCAgTWljaGFlbCBNZXNzIDxtaWNoYWVsQGthd28yLnJ3dGgtYWFjaGVuLmRlPgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCWlvY3RsJ3MgZG8gbm90IGNvbW11dGUgaW4gL2Rldi9kc3AgaW5pdGlhbGl6YXRpb24uCgpUdWUgTWF5IDEyIDIwOjExOjQyIDE5OTggIEthcmwgR2Fycmlzb24gPGthcmxvc0Blem5ldC5uZXQ+CgoJKiBbd2luMzIvY29uc29sZS5jXQoJSW1wbGVtZW50ZWQgU2V0Q29uc29sZVRleHRBdHRyaWJ1dGUsIEZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyLgoJSW1wcm92ZWQgY3Vyc29yIHBvc2l0aW9uaW5nLgoJVGhpcyBhbGxvd3MgZm9yIHRleHQgY29sb3JzIGluIGFuIHh0ZXJtLCByeHZ0LCBvciBjb25zb2xlLgoKVHVlIE1heSAxMiAxNzo1Nzo1MiAxOTk4ICBQZXR0ZXIgUmVpbmhvbGR0c2VuIDxwZXJlQHRkLm9yZy51aXQubm8+CgoJKiBbTWFrZWZpbGUuaW5dCglDcmVhdGUgcHJlZml4L3tiaW58bGlifSBkaXJlY3RvcmllcyBpZiBtaXNzaW5nIGR1cmluZyBpbnN0YWxsLgoKU3VuIE1heSAxMCAxOTozNzo1MSAxOTk4ICBKYW4gV2lsbGFtb3dpdXMgPGphbkBqYW5oaC5zaG5ldC5vcmc+CgoJKiBbbXVsdGltZWRpYS9tbWlvLmNdCglIYXZlIG1taW9TZXRCdWZmZXIgcmV0dXJuIHN1Y2Nlc3MgKDApLCBzbyBDb3JlbCBEcmF3IDQKCWtlZXBzIHdvcmtpbmcuIChJTyBpcyBzdGlsbCB1bmJ1ZmZlcmVkKQoKV2VkIE1heSAgNiAxNjo1Nzo1NSAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CgogICAgICAgICogW01ha2VmaWxlLmluXSBbTWFrZS5ydWxlcy5pbl0KCUNoYW5nZWQgIm1ha2UgY2xlYW4iIHRvIHJlbW92ZSBgdGV4dGVkaXRgIGJhY2t1cCBmaWxlcyAoKiUpCgoJKiBbY29udHJvbHMvbWVudS5jXVtncmFwaGljcy94MTFkcnYveGZvbnQuY11baW5jbHVkZS9saWJyZXMuaF0KCSAgW2xvYWRlci9tYWluLmNdW2xvYWRlci9uZS9tb2R1bGUuY11bc2NoZWR1bGVyL3N5bmNocm8uY10KCSAgW3dpbjMyL3RpbWUuY11bd2luZG93cy93aW5wb3MuY11baW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBtaXNjZWxsYW5lb3VzIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgoKCSogW21pc2MvbWFpbi5jXVttaXNjZW11L21haW4uY11baW5jbHVkZS9tYWluLmhdCglNb3ZlZCBwcm90b3R5cGVzIHRvIG5ldyBpbmNsdWRlIGZpbGUgbWFpbi5oLCB2YXJpb3VzIGNsZWFudXBzLgoKVHVlIE1heSAgNSAyMTowNTowNiAxOTk4ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW21pc2Mvd2luc29jay5jXQoJRG9uJ3QgcmVmZXIgdG8gX19GcmVlQlNEX18gd2hlbiBIQVZFX1NUUkVSUk9SIGlzIG1lYW50LgoKCSogW21pc2MvZGVidWdzdHIuY10KCUZvciBkZWJ1Z19kdW1wc3RyU2VuZCwgc2VuZCBzdHJpbmdzIHRvIHN0ZGVyci4KClR1ZSBNYXkgIDUgMjE6NDc6NDAgMTk5OCAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL3JlZ2lvbi5jXQoJRml4IGZvciBSRUdJT05fUmVnaW9uT3AoKSBpZiBuZXdSZWcgaXMgb25lIG9mIHRoZSBzb3VyY2UgcmVnaW9ucy4KClR1ZSBNYXkgIDUgMTg6Mjc6MzIgMTk5OCAgSmltIFBldGVyc29uIDxqc3BldGVyQHJvYW5va2UuaW5maS5uZXQ+CgoJKiBbbWlzYy9tYWluLmNdCglBZGQgJy1oLy1oZWxwJyBvcHRpb24gYW5kIHByaW50IFdJTkVfUkVMRUFTRV9JTkZPIHdpdGggdXNhZ2UgbWVzc2FnZS4KCgkqIFttaXNjL3NweS5jXQoJUmVhbGlnbiB0cmFjZSBtZXNzYWdlcy4KClR1ZSBNYXkgIDUgMTU6NDY6NDcgMTk5OCAgRG9ubmllIFYuIFNhdmFnZSA8ZHNhdmFnZUBjaXNjby5jb20+CgoJKiBbZ3JhcGhpY3MvZGRyYXcuY10KCUZpeGVkIGNvbXBpbGUgd2FybmluZ3MKCgkqIFttaXNjL3dpbnNvY2suY10KCVdhcm5pbmdzIHNob3VsZCBub3QgYmUgZXJyb3JzLgoKVHVlIE1heSAgNSAxMzo0MDo0MiAxOTk4ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAcm9hbm9rZS5pbmZpLm5ldD4KCgkqIFsqLypdCglSZW1vdmUgbWFueSB3YXJuaW5ncyB0aHJvdWdoIGV4cGxpY2l0IGNhc3RzLCBhZGRlZCAjaW5jbHVkZSdzLAoJYW5kIGNvcnJlY3RlZCBwcmludGYgZm9ybWF0cy4KClR1ZSBNYXkgIDUgMDU6MTg6MTIgMTk5OCAgSW5zb21uaWEgKFN0ZWEgR3JlZW5lKSA8aW5zb21uaWFAY29yZS5iaW5naGFtdG9uLmVkdT4KCgkqIFtncmFwaGljcy9kZHJhdy5jXQoJS2VwdCB1bmNoYW5nZWQgcG9ydGlvbiBvZiBvbGQgcGFsZXR0ZSB3aGVuIGNoYW5naW5nIG9ubHkgYSBmZXcKCXBhbGV0dGUgZW50cmllcy4gIFJlYWxseSBzaG91bGQgb25seSBkZWFsbG9jYXRlIHRoZSBjaGFuZ2VkIGNlbGxzLgoJVGhpcyBtYWtlIFN0YXJDcmFmdCB3b3JrIGFsbW9zdCBwZXJmZWN0bHkgKHNvdW5kIG92ZXJmbG93cyBzdGlsbAoJY2F1c2Ugc3RhdGljKS4KCk1vbiBNYXkgIDQgMTU6MDQ6NTcgMTk5OCAgQWxleGFuZGVyIFYuIEx1a3lhbm92IDxsYXZAbG9uZy55YXIucnU+CgoJKiBbbWlzYy9sc3RyLmNdCglGb3JtYXRNZXNzYWdlOiB0ZXJtaW5hdGUgc3RyaW5nIG9uICUwLCB1bmRvIGxpbmVmZWVkIHN0cmlwLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXByIDMwIDE2OjI4OjEyIDE5OTggIEphbWVzIEp1cmFuIDxqcmoxMjBAcHN1LmVkdT4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJSW1wbGVtZW50ZWQgR2V0RXhpdENvZGVQcm9jZXNzLiAgVGhlIGNvZGUgaXMgYSBkaXJlY3QgdHJhbnNsYXRpb24KCW9mIEdldEV4aXRDb2RlVGhyZWFkLgoKTW9uIEFwciAyNyAyMjoyMDoyNSAxOTk4ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglVbmxvYWQgZHVtbXkgbW9kdWxlIHdoZW4gUEVfTG9hZExpYnJhcnlFeDMyQSBmYWlscyB3aXRoCglQRV9Mb2FkSW1hZ2UgKG1ha2VzIEVuY2FydGEgOTggaW5zdGFsbGVyIHByb2NlZWQpLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglNYWtlIEdldERyaXZlVHlwZTE2IHJldHVybiBEUklWRV9SRU1PVkFCTEUgZm9yIFRZUEVfQ0RST00uCglNYWtlIEdldEN1cnJlbnREaXJlY3RvcnkzMiBiZWhhdmUgbGlrZSB0aGUgY29kZSBkb2VzIGFuZCBub3QKCWxpa2UgdGhlIGhlbHAgZGVzY3JpYmVzLgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCVJldm9rZSByZWNlbnQgY2hhbmdlIGluIFBST0ZJTEVfR2V0U2VjdGlvbiBhbmQgdHJ5IGJldHRlciAKCWhhbmRsaW5nIG9mIHNwZWNpYWwgY2FzZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUNoYW5nZSBkZWZpbml0aW9uIG9mIEFDQ0VMMzIuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglSZXBsYWNlIHRoZSBHZXRYWFhGaWxlbmFtZTMyIG1hY3JvcyBieSBub3JtYWwgY29kZS4KCUZpeCB0d28gcmVwb3J0ZWQgYnVncyBpbiBteSBjaGFuZ2VzIHRvIGNvbW1kbGcuCgoJKiBbd2luZG93cy93aW4uY10KCUFkZCBhIGhvb2sgdG8gY2F0Y2ggYm9ndXMgV01fU0laRSBtZXNzYWdlcyBieSBlbWl0dGluZyBhIHdhcm5pbmcKCWluIHRoZSBhcHByb3ByaWF0ZSBjYXNlLgoKCSogW29iamVjdHMvYml0bWFwLmNdCglSZWplY3QgdW5yZWFzb25iYWJsZSBsYXJnZSBzaXplIGFyZ3VtZW50cyBpbgoJQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcDMyIGFuZCBhZGQgYW4gZml4bWUgZm9yIHRoYXQgc2l0dWF0aW9uLgoKU3VuIEFwciAyNiAxODozMDowNyAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpbmNsdWRlL2xkdC5oXSBbZGVidWdnZXIvKi5jXSBbbWlzY2VtdS9pbnN0ci5jXQoJQWRkZWQgSVNfU0VMRUNUT1JfU1lTVEVNIGFuZCBJU19TRUxFQ1RPUl8zMkJJVCBtYWNyb3MuCglNYWtlIGluc3RydWN0aW9uIGVtdWxhdGlvbiBzdXBwb3J0IHN5c3RlbSBzZWxlY3RvcnMuCgoJKiBbbG9hZGVyLyouY10KCVN0YXJ0ZWQgbW92aW5nIE5FIHNwZWNpZmljIGZ1bmN0aW9ucyB0byB0aGUgbmV3IGxvYWRlci9uZQoJZGlyZWN0b3J5LgoKCSogW21lbW9yeS9lbnZpcm9uLmNdCglFbmZvcmNlIHRoZSAxMjcgY2hhcnMgbGltaXQgb25seSB3aGVuIGNyZWF0aW5nIHRoZSBlbnZpcm9ubWVudCBvZgoJYSBXaW4xNiBwcm9jZXNzLgoKU3VuIEFwciAyNiAxMjoyMjoyMyAxOTk4ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtmaWxlcy9maWxlLmNdCglGaXhlZCBhbiBpbmNyZWRpYmxlIHR5cG8gaW4gQ29weUZpbGUzMkEgdGhhdCBtYWRlIGl0IHVudXNhYmxlCglzaW5jZSBhIHJld3JpdGUgaW4gOTcwMTEyICghISkuCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglGaXhlZCBHZXRUZW1wUGF0aDMyQS9XIHRvIGluY2x1ZGUgdHJhaWxpbmcgYmFja3NsYXNoLgoKCSogW21pc2MvdmVyLmNdCglNYWtlIGZpbmRfcGVfcmVzb3VyY2UgIndvcmsiIHdpdGggY29ycnVwdCBmaWxlcy4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglBbHRlcmVkIFdQUklOVEZfUGFyc2VGb3JtYXRBL1cgdG8gdHJlYXQgaW52YWxpZCBmb3JtYXQgY2hhcnMKCWFzIG5vcm1hbCBvdXRwdXQsIHRvby4KCgkqIFttc2Rvcy9kcG1pLmNdCglJbXBsZW1lbnRlZCAiQWxsb2NhdGUvRnJlZSByZWFsIG1vZGUgY2FsbGJhY2siICgweDAzMDMvMHgwMzA0KS4KCUNyb3NzIHlvdXIgZmluZ2VycyBpZiB5b3UgbmVlZCB0byB1c2UgaXQgOykgKGNvbXBsZXRlbHkgdW50ZXN0ZWQpCglJbXBsZW1lbnRlZCAiQ2FsbCByZWFsIG1vZGUgcHJvYyB3aXRoIGZhciByZXR1cm4iICgweDAzMDEsIHRlc3RlZCkuCgoJKiBbbXNkb3MvaW50MjEuY10KCUZpeGVkIGlvY3RsR2VuZXJpY0Jsa0RldlJlcS8weDYwLgoKCSogW3JlbGF5MzIvZHBsYXl4LnNwZWNdIFtyZWxheTMyL2J1aWx0aW4zMi5jXSBbcmVsYXkzMi9NYWtlZmlsZS5pbl0KCUFkZGVkIGJ1aWx0LWluIERQTEFZWC5ETEwuIAoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBHZXRXaW5kb3dXb3JkKCkvR1dXX0hXTkRQQVJFTlQgdG8gcmV0dXJuIHRoZSB3aW5kb3cncyBvd25lcgoJaWYgaXQgaGFzIG5vIHBhcmVudCAoU0RLKS4KClNhdCBBcHIgMjUgMTU6MDk6NTMgMTk5OCAgTS5ULkZvcnRlc2N1ZSAgPG1hcmtAbXRmaHBjLmRlbW9uLmNvLnVrPgoKCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQoJRml4ZWQgZGlzYXNzZW1ibGUgYnVnIGZvciBuby1kaXNwbGF5IG9wdGlvbiBhbmQgJ2xvY2snLAoJJ3JlcG5lJyBhbmQgJ3JlcGUnIHByZWZpeGVzLgoKCSogW2RlYnVnZ2VyL3JlZ2lzdGVycy5jXQoJQWRkZWQgdGV4dHVhbCBmbGFnIGRlc2NyaXB0aW9uIG91dHB1dCBvbiAnaW5mbyByZWdzJy4KClNhdCBBcHIgMjUgMTQ6MTg6MjYgMTk5OCAgTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCgkqIFsqLyouY10KCUFkZGVkIHN0dWJzIGFuZC9vciBkb2N1bWVudGF0aW9uIGZvciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogCglMb29rdXBQcml2aWxlZ2VWYWx1ZSwgT3BlblNlcnZpY2UsIENvbnRyb2xTZXJ2aWNlLCBSZWdHZXRLZXlTZWN1cml0eSwgCglTdGFydFNlcnZpY2UsIFNldENvbXB1dGVyTmFtZSwgRGVsZXRlU2VydmljZSwgQ2xvc2VTZXJ2aWNlSGFuZGxlLCAKCU9wZW5Qcm9jZXNzVG9rZW4sIE9wZW5TQ01hbmFnZXIsIERlcmVnaXN0ZXJFdmVudFNvdXJjZSwgCglXYWl0Rm9yRGVidWdFdmVudCwgV2FpdEZvcklucHV0SWRsZSwgUmVnaXN0ZXJFdmVudFNvdXJjZSwKCVNldERlYnVnRXJyb3JMZXZlbCwgU2V0Q29uc29sZUN1cnNvclBvc2l0aW9uLCBDaG9vc2VQaXhlbEZvcm1hdCwKCVNldFBpeGVsRm9ybWF0LCBHZXRQaXhlbEZvcm1hdCwgRGVzY3JpYmVQaXhlbEZvcm1hdCwgU3dhcEJ1ZmZlcnMsCglQb2x5QmV6aWVyLCBBYm9ydFBhdGgsIERlc3Ryb3lBY2NlbGVyYXRvclRhYmxlLCBIZWFwV2FsaywKCURkZUluaXRpYWxpemUsIERkZVVuaW5pdGlhbGl6ZSwgRGRlQ29ubmVjdExpc3QsIERkZURpc2Nvbm5lY3RMaXN0LAoJRGRlQ3JlYXRlU3RyaW5nSGFuZGxlLCBEZGVQb3N0QWR2aXNlLCBEZGVHZXREYXRhLCBEZGVOYW1lU2VydmljZSwKCURkZUdldExhc3RFcnJvciwgV05ldEdldERpcmVjdG9yeVR5cGUsIEVudW1QcmludGVycywgUmVnRmx1c2hLZXksCglSZWdHZXRLZXlTZWN1cml0eSwgRGxsR2V0Q2xhc3NPYmplY3QsIERsbENhblVubG9hZE5vdywgQ3JlYXRlQml0bWFwLAoJQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcCwgQ3JlYXRlQml0bWFwSW5kaXJlY3QsIEdldEJpdG1hcEJpdHMsCglTZXRCaXRtYXBCaXRzLCBMb2FkSW1hZ2UsIENvcHlJbWFnZSwgTG9hZEJpdG1hcCwgRHJhd0ljb24sCglDcmVhdGVEaXNjYXJkYWJsZUJpdG1hcCwgU2V0RElCaXRzLCBHZXRDaGFyQUJDV2lkdGhzLCBMb2FkVHlwZUxpYiwKCVNldENvbnNvbGVDdHJsSGFuZGxlciwgQ3JlYXRlQ29uc29sZVNjcmVlbkJ1ZmZlciwgUmVhZENvbnNvbGVJbnB1dCwKCUdldENvbnNvbGVDdXJzb3JJbmZvLCBTZXRDb25zb2xlQ3Vyc29ySW5mbywgU2V0Q29uc29sZVdpbmRvd0luZm8sCglTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZSwgU2V0Q29uc29sZVNjcmVlbkJ1ZmZlclNpemUsCglGaWxsQ29uc29sZU91dHB1dENoYXJhY3RlciwgRmlsbENvbnNvbGVPdXRwdXRBdHRyaWJ1dGUsCglDcmVhdGVNYWlsc2xvdCwgR2V0TWFpbHNsb3RJbmZvLCBHZXRDb21wcmVzc2VkRmlsZVNpemUsCglHZXRQcm9jZXNzV2luZG93U3RhdGlvbiwgR2V0VGhyZWFkRGVza3RvcCwgU2V0RGVidWdFcnJvckxldmVsLAoJV2FpdEZvckRlYnVnRXZlbnQsIFNldENvbXB1dGVyTmFtZSwgQ3JlYXRlTURJV2luZG93LgoKVGh1IEFwciAyMyAyMzo1NDowNCAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL2VuaG1ldGFmaWxlLmNdIFtyZWxheTMyL2dkaTMyLnNwZWNdCglJbXBsZW1lbnQgQ29weUVuaE1ldGFGaWxlLCBHZXQvU2V0RW5oTWV0YUZpbGVCaXRzLCBvdGhlciBmaXhlcy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW29iamVjdHMvbWV0YWZpbGUuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10KCTMyLWJpdCBtZXRhZmlsZSBmaXhlcywgaW1wbGVtZW50IEVudW1NZXRhRmlsZTMyLCBHZXRNZXRhRmlsZUJpdHNFeC4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXSBbZ3JhcGhpY3MveDExZHJ2L3RleHQuY10KCVNvbWUgcm90YXRlZCB0ZXh0IHN1cHBvcnQgZm9yIFgxMVI2IGRpc3BsYXlzLgoKCSogW3dpbjMyL25ld2Zucy5jXSBbb2xlL29sZTJubHMuY10KCU1vdmVkIEdldE51bWJlckZvcm1hdDMyQS4KCldlZCBBcHIgMjIgMTc6Mzg6MjAgMTk5OCAgRGF2aWQgTGVlIExhbWJlcnQgPGxhbWJlcjQ1QGVnci5tc3UuZWR1PgoKCSogW29sZS9vbGUybmxzLmNdIFttaXNjL25ldHdvcmsuY10KCUNoYW5nZWQgc29tZSBmdW5jdGlvbiBkb2N1bWVudGF0aW9uIHRvIHRoZSBuZXcgc3R5bGUuCgoJKiBbbWlzYy9uZXR3b3JrLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2lmMTYzMi91c2VyLnNwZWNdCgkgIFtyZWxheTMyL21wci5zcGVjXSBbbWlzYy9tcHIuY10KCUFkZGVkIHN0dWJzIGZvciBzb21lIFdpbjMyIG5ldHdvcmsgZnVuY3Rpb25zOyAgcmVuYW1lZCBzb21lIAoJMTYtYml0IG9uZXMgd2l0aCAzMi1iaXQgY291bnRlcnBhcnRzLCAgYXMgd2VsbCBhcwoJV05ldEdldERpcmVjdG9yeVR5cGU7ICBtb3ZlZCB0aGUgc3R1YnMgaW4gbWlzYy9tcHIuYyAodGhyZWUgb2YKCXRoZW0hKSB0byBtaXNjL25ldHdvcmsuYy4KCgkqIFtvbGUvY29tcG9iai5jXSBbb2xlL3N0b3JhZ2UuY10gW29sZS9vbGUyZGlzcC5jXSAKCSAgW29sZS9vbGUybmxzLmNdIFtvbGUvZm9sZGVycy5jXSBbb2xlL21vbmlrZXIuY10gW29sZS9vbGUyLmNdCgkgIFtncmFwaGljcy9mb250ZW5naW5lLmNdIFtncmFwaGljcy9kZHJhdy5jXSBbZ3JhcGhpY3MvZW52LmNdCgkgIFtncmFwaGljcy9kcml2ZXIuY10gW2dyYXBoaWNzL2VzY2FwZS5jXQoJQ2hhbmdlZCBmcHJpbnRmJ3MgdG8gcHJvcGVyIGRlYnVnLW1hY3Jvcy4KCgkqIFtpbmNsdWRlL3dpbm5scy5oXQoJQWRkZWQgc29tZSBmbGFncyAoZm9yIGludGVybmFsIHVzZSkuCgoJKiBbb2xlL29sZTJubHMuY10gCglBZGRlZCB0aGUgVW5pY29kZSBjb3JlIGZ1bmN0aW9uLCBhbmQgd29ya2VkIG91dCBhIHdheSB0byBoaWRlCgl0aGUgY29tbW9uYWxpdHkgb2YgdGhlIGNvcmUuCgoJKiBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgc3VwcG9ydCBmb3IgR2V0RGF0ZS9UaW1lMzJBL1cuCgpXZWQgQXByIDIyIDA5OjE2OjAzIDE5OTggIEdvcmRvbiBDaGFmZmVlICA8Y2hhZmZlZUBjcy5iZXJrZWxleS5lZHU+CgoJKiBbd2luMzIvY29kZV9wYWdlLmNdCglGaXhlZCBwcm9ibGVtIHdpdGggTXVsdGlCeXRlVG9XaWRlQ2hhciB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluCglsYXN0IHJlbGVhc2UuICBNYWRlIE11bHRpQnl0ZVRvV2lkZUNoYXIgbW9yZSBjb21wYXRpYmxlIHdpdGggV2luMzIuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCglGaXhlZCBwcm9ibGVtIHdpdGggZHJhd2luZyBhcmNzLgoKVHVlIEFwciAyMSAxMToyNDo1OCAxOTk4ICBDb25zdGFudGluZSBTYXB1bnR6YWtpcyAgPGNzYXB1bnR6QHRtYS0xLmxjcy5taXQuZWR1PgoKCSogIFtvbGUvb2xlMm5scy5jXQoJTW92ZSBzdHVmZiBmcm9tIDB4NDA5IGNhc2UgdG8gTGFuZ19Fbi4gCgoJKiAgW3JlbGF5MzIvdXNlcjMyLnNwZWNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQWRkZWQgc3R1YnMgZm9yIEdldFdpbmRvd1JnbjMyIGFuZCBTZXRXaW5kb3dSZ24zMi4gTWFrZXMgT2ZmaWNlCglQYXBlcmNsaXAgaGFwcHkuCgpUdWUgQXByIDIxIDExOjE2OjE2IDE5OTggIENvbnN0YW50aW5lIFNhcHVudHpha2lzICA8Y3NhcHVudHpAdG1hLTEubGNzLm1pdC5lZHU+CgoJKiAgW2xvYWRlci9wZV9pbWFnZS5jXQoJSWYgaW1hZ2UgaXMgcmVsb2NhdGVkLCBUTFMgYWRkcmVzc2VzIG5lZWQgdG8gYmUgYWRqdXN0ZWQuCgoJKiBbZGVidWdnZXIvKi5jXQoJR2VuZXJhbGl6ZWQgdGVzdHMgZm9yIDMyLWJpdCBzZWdtZW50cy4KClR1ZSBBcHIgMjEgMDI6MDQ6NTkgMTk5OCAgSmFtZXMgSnVyYW4gIDxqcmoxMjBAcHN1LmVkdT4KCQoJKiBbbWlzYy8qLmNdIFttaXNjZW11LyouY10gW21zZG9zLyouY10gW2lmMTYzMi8qLmNdIAoJICBbaW5jbHVkZS8qLmhdIFtsb2FkZXIvKi5jXSBbbWVtb3J5LyouY10gW211bHRpbWVkaWEvKi5jXSAKCSAgW29iamVjdHMvKi5jXQoJQWxtb3N0IGFsbCBmcHJpbnRmIHN0YXRlbWVudHMgY29udmVydGVkIHRvIGFwcHJvcHJpYXRlIAoJZGVidWcgbWVzc2FnZXMuCgoJKiBbUkVBRE1FXQoJVXBkYXRlZCAiR0VUVElORyBNT1JFIElORk9STUFUSU9OIiBzZWN0aW9uIHRvIGluY2x1ZGUgV2luZUhRLgoKCSogW2RvY3VtZW50YXRpb24vZGVidWdnZXJdCglGaXhlZCB0eXBvLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdCglBZGRlZCBmdW5jdGlvbiBkb2N1bWVudGF0aW9uLgoKU3VuIEFwciAxOSAxNjozMDo1OCAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1hcmN1c0BtdWQuZGU+CgoJKiBbTWFrZS5ydWxlcy5pbl0KCUFkZGVkIGxpbnQgdGFyZ2V0ICh1c2luZyBsY2xpbnQpLgoKCSogW3JlbGF5MzIvb2xlYXV0MzIuc3BlY11bcmVsYXkzMi9NYWtlZmlsZS5pbl1bb2xlL3R5cGVsaWIuY10KCSAgW29sZS9vbGUyZGlzcC5jXQoJQWRkZWQgb2xlYXV0MzIgc3BlYywgYWRkZWQgc29tZSBTeXNTdHJpbmcgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9zaWduYWwuY10KCUFkZGVkIHByaW50aW5nIG9mIGZhdWx0YWRkcmVzcyBpbiBMaW51eCAodXNpbmcgQ1IyIGRlYnVnIHJlZ2lzdGVyKS4KCgkqIFtjb25maWd1cmUuaW5dCglBZGRlZCA8c3lzL3R5cGVzLmg+IGZvciBzdGF0ZnMgY2hlY2tzLgoKCSogW2xvYWRlci8qLmNdW2RlYnVnZ2VyL2JyZWFrLmNdW2RlYnVnZ2VyL2hhc2guY10KCVN0YXJ0ZWQgdG8gc3BsaXQgd2luMzIvd2luMTYgbW9kdWxlIGhhbmRsaW5nLCBwcmVwYXJpbmcgc3VwcG9ydAoJZm9yIG90aGVyIGJpbmFyeSBmb3JtYXRzIChsaWtlIEVMRikuCgpTYXQgQXByIDE4IDEwOjA3OjQxIDE5OTggIFJlaW4gS2xhemVzIDxya2xhemVzQGNhc2VtYS5uZXQ+CgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJRml4ZWQgYSBidWcgdGhhdCBtYWRlIFJlZ1F1ZXJ5VmFsdWV4eHggcmV0dXJuaW5nCglpbmNvcnJlY3QgcmVnaXN0cnkgdmFsdWVzLgoKRnJpIEFwciAxNyAyMjo1OToyMiAxOTk4ICBBbGV4YW5kZXIgVi4gTHVreWFub3YgPGxhdkBsb25nLnlhci5ydT4KCgkqIFttaXNjL2xzdHIuY10KCUZvcm1hdE1lc3NhZ2UzMio6IHJlbW92ZSBsaW5lZmVlZCB3aGVuIG5vbGluZWZlZWQgc2V0OwoJY2hlY2sgZm9yIHRhcmdldCB1bmRlcmZsb3cuCgpGcmkgQXByIDE3IDAwOjM4OjE0IDE5OTggIEFsZXhhbmRlciBWLiBMdWt5YW5vdiA8bGF2QGxvbmcueWFyLnJ1PgoKCSogW21pc2MvY3J0ZGxsLmNdCglJbXBsZW1lbnQgeGxhdF9maWxlX3B0ciBmb3IgQ1JUIHN0ZGluL3N0ZG91dC9zdGRlcnIgYWRkcmVzcwoJdHJhbnNsYXRpb24uCgpXZWQgQXByIDE1IDIwOjQzOjU2IDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWRkZWQgJ29kYWN0aW9uJyBwYXJhbWV0ZXIgdG8gTUVOVV9EcmF3TWVudUl0ZW0oKSBhbmQgcmVkaXJlY3RlZAoJV01fRFJBV0lURU0gbWVzc2FnZXMgdG8gR2V0V2luZG93KGh3bmQsR1dfT1dORVIpLgoKVHVlIEFwciAxNCAxNjoxNzo1NSAxOTk4ICBCZXJlbmQgUmVpdHNtYSA8YmVyZW5kQHVuaXRlZC1pbmZvLmNvbT4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdCVtncmFwaGljcy9wYWludGluZy5jXSAKCSAgW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10gW2dyYXBoaWNzL3gxMWRydi9ncmFwaGljcy5jXQoJICBbZ3JhcGhpY3MveDExZHJ2L2luaXQuY10gW2luY2x1ZGUvZ2RpLmhdIFtpbmNsdWRlL3gxMWRydi5oXQoJICBbcmVsYXkzMi9nZGkzMi5zcGVjXQoJQWRkZWQgUG9seVBvbHlsaW5lIHJvdXRpbmUuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglDaGFuZ2VkIFdJTlBST0NfR2V0UHJvYygpIHRvIHJldHVybiBwcm9jIGluc3RlYWQgb2YgJihqbXAgcHJvYykuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBcHIgMTIgMTI6MjI6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUZpeGVkICJubyBmcmVlIHNwYWNlIiBwcm9ibGVtIHdpdGggcGFydGl0aW9uIHNpemVzIGJldHdlZW4gMSBhbmQgMiBHQgoJKGNsdXN0ZXJfc2VjdG9ycyBtYXkgbm90IGV4Y2VlZCAweDQwKS4KCgkqIFt3aW5kb3dzL21zZ2JveC5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJSW1wbGVtZW50ZWQgTWVzc2FnZUJveEluZGlyZWN0MTYsIGNvcnJlY3RlZCBNU0dCT1hQQVJBTVMxNi4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRE9TIGVudmlyb25tZW50IHN0cmluZ3MgbWF5IG5ldmVyIGV4Y2VlZCAxMjcgY2hhcnMKCS0+IHRydW5jYXRlIFVuaXggZW52aXJvbm1lbnQgc3RyaW5ncyBpZiBuZWNlc3NhcnkuCgpTdW4gQXByIDEyIDAyOjUxOjQ0IDE5OTggIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+CgoJKiBbZmlsZXMvKi5jXQoJQWxsIGZwcmludGYgc3RhdGVtZW50cyB3ZXJlIGNvbnZlcnRlZCB0byBhcHByb3ByaWF0ZSBkZWJ1ZwoJbWVzc2FnZXMuCgoJKiBbdG9vbHMvZmluZF9kZWJ1Z19jaGFubmVsc10KCVVwZGF0ZWQgY29tbWVudHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KClNhdCBBcHIgMTEgMTU6Mjc6MjEgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL3Rhc2suY10gW3NjaGVkdWxlci9wcm9jZXNzLmNdCglNb3ZlZCBzb21lIGNvZGUgYXJvdW5kIHRvIHByZXBhcmUgdGhlIGdyb3VuZCBmb3IgQ3JlYXRlUHJvY2VzcygpLgoKCSogW21lbW9yeS9lbnZpcm9uLmNdIFtsb2FkZXIvdGFzay5jXQoJTW92ZWQgV2luMzIgZW52aXJvbm1lbnQgc3RyaW5ncyBmdW5jdGlvbnMgdG8gZW52aXJvbi5jLgoJVW5pZmllZCBXaW4xNiBhbmQgV2luMzIgZW52aXJvbm1lbnQgbWFuYWdlbWVudC4KCgkqIFtzY2hlZHVsZXIvaGFuZGxlLmNdIFtzY2hlZHVsZXIvazMyb2JqLmNdIFtzY2hlZHVsZXIvKi5jXQoJSW1wbGVtZW50ZWQgaGFuZGxlIGluaGVyaXRhbmNlIGFuZCBEdXBsaWNhdGVIYW5kbGUoKS4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglDcmVhdGUgYSAxNi1iaXQgc3RhY2sgZm9yIGFsbCB0aHJlYWRzLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBESUFMT0dFWCByZXNvdXJjZSBmb3JtYXQuCgpGcmkgQXByIDEwIDIwOjIxOjUxIDE5OTggIE1hcmN1cyBNZWlzc25lciA8bWFyY3VzQG11ZC5kZT4KCgkqIFtjb25maWd1cmUuaW5dW2luY2x1ZGUvYWNjb25maWcuaF1bKi8qXVttdWx0aW1lZGlhLypdCglDbGVhbmVkIHVwIHRoZSBPU1MgZGV0ZWN0aW9uIHN0dWZmLCBhZGRlZCBzb21lIG1vcmUgY2hlY2tzIGZvcgoJaGVhZGVyZmlsZXMvZnVuY3Rpb25zLgoJUmVtb3ZlZCBhIGxvdCBvZiBPUyBzcGVjaWZpYyAjaWZkZWZzLgoJTG90cyBvZiBkZXBlbmRlbmQgbXVsdGltZWRpYSBjbGVhbnVwcy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUVuaGFuY2VkIGNvbW1lbnQsIGFkZGVkIG1pc3NpbmcgcmVmZXJlbmNlIGNvdW50IGluY3JlYXNlLgoKCSogW29sZS9jb21wb2JqLmNdCglSZXBsYWNlZCBicm9rZW4gU3RyaW5nRnJvbUdVSUQyIGJ5IHdvcmtpbmcgb25lLgoKCSogW21pc2Mvd2luc29jay5jXQoJU09fTElOR0VSIHVzZXMgdW5zaWduZWQgMTYgYml0IGluIFdpbjE2IGFuZCBXaW4zMiwgYnV0IHVuc2lnbmVkCglpbnQgKDMyYml0KSBmb3IgVU5JWC4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglBbGxvdyByZWFsbG9jIGZvciBsb2NrY291bnQgMSB0b28uCgpGcmkgQXByIDEwIDE1OjI3OjM0IDE5OTggIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbZ3JhcGhpY3MveDExZHJ2L3RleHQuY10KCUhhbmRsZSBjb250cm9sIGNoYXJhY3RlcnMgaW4gdHJhY2UuICBJZ25vcmUgdGVybWluYXRpbmcgbmV3bGluZS4KCgkqIFttdWx0aW1lZGlhL2luaXQuY10KCShNVUxUSU1FRElBX0luaXQpOiBDb3JyZWN0IGFsbG9jYXRpb25zLgoKCSogW3Rvb2xzL2V4YW1pbmUtcmVsYXldCiAJVGlkeSB1cC4KCgkqIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglDaGFuZ2UgaGlnaGxpZ2h0IGNvbG91ciBmcm9tIGxpZ2h0Ymx1ZSB0byBsaWdodGdyYXkuICBUaGlzCglsb29rcyBjb3JyZWN0IGZvciBtZW51cy4KCkZyaSBBcHIgMTAgMDE6NDk6NTggMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgoKCSogW2NvbmZpZ3VyZS5pbl0gW01ha2UucnVsZXMuaW5dCglBZGQgY2hlY2sgZm9yIGMybWFuIGJlZm9yZSB1c2luZyBpdC4KCkZyaSBBcHIgMTAgMDI6NTk6MjEgMTk5OCAgRG91Z2xhcyBSaWRnd2F5ICA8cmlkZ3dheUB3aW5laHEuY29tPgoKCSogW0RFVkVMT1BFUlMtSElOVFNdCglTaW1wbGUgZGVzY3JpcHRpb24gb2YgYWRkaW5nIEFQSSBjYWxscy4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldCByaWQgb2YgV2luZWxpYjE2LCBhdm9pZCBkZWNsYXJpbmcgc29tZSBpbGxlZ2FsIGZ1bmN0aW9ucyBpbgoJV2luZWxpYiwgYWRkIHByb3RvdHlwZXMgZm9yIHNvbWUgZW5oYW5jZWQgbWV0YWZpbGUgZnVuY3Rpb25zLCBmaXgKCUdldFRleHRFeHRlbnRQb2ludDMyIGRlY2xhcmF0aW9ucy4KCgkqIFtyZWxheTMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2VuaG1ldGFmaWxlLmNdCglDb3NtZXRpYyBhbmQgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMuCgoJKiBbaW5jbHVkZS93aW5jb24uaF0gW3Byb2dyYW1zL3ZpZXcvKl0KCUZpeGVzLCBpbXByb3ZlZCBjb21wYXRpYmlsaXR5IHdpdGggbmF0aXZlIGNvbXBpbGVycy4KClRodSBBcHIgIDkgMTU6NDg6NDkgMTk5OCAgVWxyaWNoIFdlaWdhbmQgPHdlaWdhbmRAaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbd2luMzIva2VybmVsMzIuY10KCUltcGxlbWVudGVkIEZUX1RodW5rIC8gRlRfUHJvbG9nIC8gRlRfRXhpdCAvIEZUX1Byb2xvZ1ByaW1lLgoJRml4ZWQgQ29tbW9uMzJUaGtMUyB0aHVuayBmdW5jdGlvbi4KCgkqIFt0b29scy9idWlsZC5jXSBbcmVsYXkzMi9yZWxheTM4Ni5jXSBbaWYxNjMyL3JlbGF5LmNdCglDaGFuZ2VkIHJlbGF5IGNvZGUgdG8gYWxsb3cgcmVnaXN0ZXIgZnVuY3Rpb25zIHRvIG1vZGlmeSBzdGFjayBsYXlvdXQuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglJbXBsZW1lbnRlZCBBbGxvY01hcHBlZEJ1ZmZlciAvIEZyZWVNYXBwZWRCdWZmZXIuCgoJKiBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbd2luMzIvb3JkaW5hbHMuY10KCUFkZGVkIG5hbWVzIGZvciB1bmRvY3VtZW50ZWQgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUJ1Z2ZpeDogTG9hZExpYnJhcnkxNiBzaG91bGQgKm5vdCogc2lsZW50bHkgbG9hZCAzMi1iaXQgRExMLgoKVGh1IEFwciAgOSAwMzo1NDo1OCAxOTk4ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUZpeCBhbiBlcnJvbmVvdXMgdGVzdCBpbiBUcmFuc2xhdGVBY2NlbGVyYXRvcnsxNiwzMn0gZm9yIHRoZSBlbmQKCW9mIHRoZSBhY2NlbGVyYXRvciB0YWJsZS4KClRodSBBcHIgIDggMjA6MzY6MjggMTk5OCAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPiAKCgkqIFttaXNjL2NydGRsbC5jXQoJSW1wbGVtZW50IGdldGVudi4KCgkqIFttaXNjL2NvbW1kbGcuY10KCU1ha2UgR2V0W1NhdmUvT3Blbl1GaWxlTmFtZSB3b3JrIGluIG1vc3Qgc2l0dWF0aW9ucy4KCgkqIFttaXNjL2xzdHIuY10KCVVzZSB3dnNwcmludGYzMkEgaW5zdGVhZCBvZiB2c3ByaW50ZiBpbiBGb3JtYXRNZXNzYWdlMzJYCgoJKiBbbWlzYy92ZXJzaW9uXQoJTWFrZSBOVDMuNTAgYSByZWNvZ25pc2VkIHZlcnNpb24KCgkqIFtncmFwaGljcy94MTFkcnYvZ3JhcGhpY3MuY10KCUNoYW5nZSB0aGUgYWxnb3JpdGhtZSB0byBkcmF3IGFyY3MKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCVJldHVybiBhbiBlbXB0eSBidWZmZXIgaW4gTG9hZFN0cmluZzMyQSBpZiBubyByZXNvdXJjZSBmb3VuZC4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KCVRyeSBoYXJkZXIgdG8gZ2V0IHRoZSByaWdodCBzaXplIGluIE11bHRpQnl0ZVRvV2lkZUNoYXIuCgoJKiBbd2luMzIvcHJvY2Vzcy5jXQoJQ2FsbCBXaW5FeGVjMzIgZm9yIENyZWF0ZVByb2Nlc3MzMkEuCgoJKiBbd2luZG93cy91c2VyLmNdCglJbnN0YWxsIGRlZmF1bHQgSW50MCBIYW5kbGVyIGluIEluaXRBcHAoKS4KClRodSBBcHIgIDggMTk6Mjk6NDggMTk5OCAgRXJpYyBLb2hsIDxla29obEBhYm8ucmhlaW4temVpdHVuZy5kZT4KCgkqIFttaXNjL2ltYWdlbGlzdC5jXQoJUHJlbGltaW5hcnkgZml4IGZvciBkcmF3aW5nIHNlbGVjdGVkIGltYWdlcy4KCVZhcmlvdXMgaW1wcm92ZW1lbnRzLgoKCSogW2NvbnRyb2xzL3Byb2dyZXNzLmNdW2luY2x1ZGUvcHJvZ3Jlc3MuY11baW5jbHVkZS9jb21tY3RybC5oXQoJQWRkZWQgcHJvZ3Jlc3MgYmFyIG1lc3NhZ2VzIGFuZCBzdHlsZXMgZm9yIElFNC4wMSAoZGxsIHZlcnNpb24gNC43MikKCWNvbXBhdGliaWxpdHkuCglGaXhlZCBsZWQgc2l6ZSBwcm9ibGVtLgoKCSogW2NvbnRyb2xzL3VwZG93bi5jXVtpbmNsdWRlL2NvbW1jdHJsLmhdCglBZGRlZCBVRE1fR0VUUkFOR0UzMiBhbmQgVURNX1NFVFJBTkdFMzIuCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXBzLmNdW2luY2x1ZGUvd2luZG93cy5oXVtpbmNsdWRlL2JpdG1hcHMvKl0KCUFkZGVkIFdpbjk1IGljb25zIGFuZCBmaXhlZCBXaW45NSBjdXJzb3IgYW5kIHJlc3RvcmUgYnV0dG9uIGJ1Zy4KCU5vdyB0aGV5IHNob3VsZCBiZSB2aXNpYmxlLiBTb3JyeSEhIQoKCSogW3JlbGF5MzIvY29tY3RsMzIuc3BlY10KCUFkZGVkIG1vc3QgbWlzc2luZyBmdW5jdGlvbiBuYW1lcy4KClR1ZSBBcHIgIDYgMTg6NDg6MzYgMTk5OCAgTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkuc3BlY10KCUdldE91dGxpbmVUZXh0TWV0cmljczogc3R1YgoKCSogW29iamVjdHMvdGV4dC5jXQoJR2V0VGV4dENoYXJzZXQgc2hvdWxkIGp1c3QgY2FsbCBHZXRUZXh0Q2hhcnNldEluZm8uCgoJKiBbbWlzYy9tcHIuY10gW3JlbGF5MzIvbXByLnNwZWNdCglXTmV0Q2FjaGVQYXNzd29yZDogc3R1YgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10gW3JlbGF5MzIvdXNlcjMyLnNwZWNdCglBdHRhY2hUaHJlYWRJbnB1dDogc3R1YgoJVXBkYXRlZCBkb2N1bWVudGF0aW9uLgoKCSogW29iamVjdHMvcGFsZXR0ZS5jXQoJVXBkYXRlZCBkb2N1bWVudGF0aW9uLgoKVHVlIE1hciAzMSAxNzowNjozMCAxOTk4ICBKYW1lcyBKdXJhbiA8anJqMTIwQHBzdS5lZHU+CgoJKiBbKi8qLmNdCglGaW5pc2hlZCBmaXhpbmcgVVNFUjMyIG9yZGluYWwgbnVtYmVycyBpbiBmdW5jdGlvbiBkb2N1bWVudGF0aW9uLgoKTW9uIE1hciAzMCAyMDoyNzozOCAxOTk4ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW21pc2MvZGVidWdzdHIuY10gW2luY2x1ZGUvZGVidWdzdHIuaF0KCU1vdmVkIF9kdW1wc3RyIGZyb20gcmVsYXkzMi9yZWxheTM4Ni5jLiAgSW1wcm92ZWQgY29udHJvbAoJY2hhcmFjdGVyIGhhbmRsaW5nLgoKCSogW21zZG9zL2ludDIxLmNdCglJbXBsZW1lbnQgMjE1RTAwIC0tIGdldCBtYWNoaW5lIG5hbWUuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVNldFdpbmRvd1BvczMyOiBNYWtlIGFuIGV4dHJhIHN5bmMgd2hlbiBtYXBwaW5nIG1hbmFnZWQKCXdpbmRvd3MuICBUaGlzIG1ha2VzIHN1cmUgdGhlIHJlY29uZmlndXJlIGV2ZW50IGhhcyBiZWVuCgloYW5kbGVkLiAgU2VlIE1zaGVhcnRzJyB3aGF0J3MteW91ci1uYW1lIHdpbmRvdy4KCk1vbiBNYXIgMzAgMDE6MTM6NTAgMTk5OCAgQWxleGFuZGVyIFYuIEx1a3lhbm92IDxsYXZAbG9uZy55YXIucnU+CgoJKiBbTWFrZWZpbGUuaW5dCglJbnN0YWxsIGluY2x1ZGVzIGZyb20gVE9QU1JDRElSLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDI5IDE1OjE4OjU3IDE5OTggIFV3ZSBCb25uZXMgPGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogW21zZG9zL2ludDIxLmNdCglNb3JlIHZlcmJvc2UgVHJhY2UgbWVzc2FnZXMKClN1biBNYXIgMjkgMTU6MDM6MzAgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglUZXJtaW5hdGUgcmVsb2NhdGlvbiBjaGFpbnMgb24gMCBvZmZzZXQuCgpTdW4gTWFyIDI5IDAyOjM1OjQ1IDE5OTggIEphbWVzIEp1cmFuICA8anJqMTIwQHBzdS5lZHU+CgoJKiBbd2luZG93cy9jYXJldC5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy9jbGlwYm9hcmQuY10KCUZpeGVkIG1vcmUgVVNFUjMyIG9yZGluYWwgbnVtYmVycyBpbiBmdW5jdGlvbiBkb2N1bWVudGF0aW9uLgoKU2F0IE1hciAyOCAyMjo0MDoyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglSZXR1cm4gMSBmb3IgV01fTkNDUkVBVEUgaW4gRGVza3RvcFduZFByb2MuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgY3Jhc2ggd2hlbiBkZXN0cm95aW5nIGEgdG9wIHBvcHVwIHdpbiB0aGF0IHdhcyBvbmx5IGNyZWF0ZWQKCWJ1dCBub3Qgc2hvd24uCgoJKiBbb2xlL3R5cGVsaWIuY10gW2lmMTYzMi90eXBlbGliLnNwZWNdCglJbXBsZW1lbnRlZCBPQUJ1aWxkVmVyc2lvbi4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRmluYWxseSBmaXhlZCB1Z2x5IGJ1ZyBpbiBHZXRQYXJlbnQzMiB0aGF0IGFmZmVjdGVkIHdpbmRvdyBwbGFjZW1lbnQ6CglEaWRuJ3QgcmV0dXJuIDAgZm9yIHdpbmRvd3MgdGhhdCBoYXZlIG5laXRoZXIgV1NfUE9QVVAgbm9yCglXU19DSElMRCBzZXQuIE5vdyBpdCBhY3RzIGV4YWN0bHkgbGlrZSBXaW5kb3dzIChhdCBsZWFzdCBJIGhvcGUgc28gOykKClNhdCBNYXIgMjggMDI6MjY6NDMgMTk5OCAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAbWFpbC5jcy50b3JvbnRvLmVkdT4KCgkqIFtERVZFTE9QRVJTLUhJTlRTXSBbZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2dzXQoJVXBkYXRlZCBkb2N1bWVudGF0aW9uIG9uIGRlYnVnIG1lc3NhZ2VzCgoJKiBbaW5jbHVkZS9idXR0b24uaF0gW2NvbnRyb2xzL2J1dHRvbi5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglbaW5jbHVkZS9jb21iby5oXSBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2NvbW1jdHJsLmNdCglbY29udHJvbHMvaWNvbnRpdGxlLmNdIFtjb250cm9scy9saXN0Ym94LmNdCVtjb250cm9scy9tZW51LmNdCglbY29udHJvbHMvc2Nyb2xsLmNdIFtjb250cm9scy93aWRnZXRzLmNdIAoJQ2hhbmdlZCBzb21lIDE2LWJpdCBjb2RlIHRvIDMyLWJpdCBjb2RlLiBJIGFtIHBvc2l0aXZlIHRoaXMgd2lsbAoJbm90IGJyZWFrIGFueXRoaW5nLgoKCSogW2NvbnRyb2xzL3VpdG9vbHMuY10gCglSZW5hbWVkIHRoZSBwcmVmaXggb2Ygc29tZSBmdW5jdGlvbnMgZnJvbSBVSVRPT0xTXyB0byBVSVRPT0xTOTVfCgl0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhleSBpbXBsZW1lbnQgV2luOTUgbG9vay4gTWF5YmUgd2Ugd2lsbAoJaGF2ZSBhIFVJVE9PTFMzMV8gaW4gdGhlIGZ1dHVyZS4gQW55aG93LCB0aGUgY2hhbmdlIGlzIGNvbXBsZXRlbHkKCWludGVybmFsIHRvIHRoaXMgZmlsZS4KCgkqIFsqLyouY10KCUNoYW5nZWQgYSBsb3Qgb2YgW2ZdcHJpbnRmIGludG8gYXBwcm9wcmlhdGUgZGVidWcgbWVzc2FnZXMuCgpGcmkgTWFyIDI3IDE5OjU2OjEyIDE5OTggIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJKiBbZG9jdW1lbnRhdGlvbi9zdGF0dXMvXQoJQWRkZWQgZGlyZWN0ZHJhdyBhbmQgZGlyZWN0c291bmQgc3RhdHVzLgoKCSogW2lmMTYzMi90aHVuay5jXVtvbGUvKi5jXVt3aW4zMi9rZXJuZWwzMi5jXQoJQWRkZWQgc29tZSBkb2N1bWVudGF0aW9uLgoJTW92ZWQgRlVOQzAwNCB0byB0aHVuay5jIHNpbmNlIGl0IHNlZW1zIHRvIGJlIGEgMTYtPjMyIHRodW5rCgkoY2FsbGluZyBjb252ZW50aW9ucyBhbmQgdGhlIGxpa2Ugc3RpbGwgdW5rbm93bikuCgpGcmkgTWFyIDI3IDA5OjU5OjMyIDE5OTggIE1vcnRlbiBFcmlrc2VuICA8bW9ydGVuZUBwdnYub3JnPgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXVt3aW5kb3dzL2tleWJvYXJkLmNdCglJbXBsZW1lbnRlZCBDb3B5QWNjZWxlcmF0b3JUYWJsZSgpIGFuZCBDcmVhdGVBY2NlbGVyYXRvclRhYmxlKCkuCgkKCSogW2luY2x1ZGUvY29tcG9iai5oXVtvbGUvY29tcG9iai5jXVtyZWxheTMyL29sZTMyLnNwZWNdCglBZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiBTdHJpbmdGcm9tR1VJRDIoKS4gCgpUdWUgTWFyIDI2IDIzOjEyOjA1IDE5OTggIEVyaWMgS29obCA8ZWtvaGxAYWJvLnJoZWluLXplaXR1bmcuZGU+CgoJKiBbbWlzYy9pbWFnZWxpc3QuY11bcmVsYXkzMi9jb21jdGwzMi5zcGVjXQoJSW1wbGVtZW50ZWQgbmV3IGRlYnVnZ2luZyBpbnRlcmZhY2UuCglBZGRlZCBtaXNzaW5nIGZ1bmN0aW9ucyAoc29tZSBhcmUgZW1wdHkgc3R1YnMpLgoJQ2hhbmdlZCBvcmRpbmFscyBpbiBjb21jdGwzMi5zcGVjIChub3cgZGxsIHZlcnNpb24gNC43MiBjb21hdGlibGUpLgoKCSogW29iamVjdHMvb2VtYml0bWFwcy5jXVtpbmNsdWRlL3dpbmRvd3MuaF0KCSAgW2luY2x1ZGUvYml0bWFwcy8qXQoJQWRkZWQgbWlzc2luZyByZXN0b3JlIGJpdG1hcHMgZm9yIFdpbjk1IGxvb2suCglBZGRlZCBtaXNzaW5nIFdpbjk1IGN1cnNvcnMuCgpUaHUgTWFyIDI2IDEwOjE4OjIwIDE5OTggIERvdWdsYXMgUmlkZ3dheSAgPHJpZGd3YXlAd2luZWhxLmNvbT4KCgkqIFtwcm9ncmFtcy92aWV3L01ha2VmaWxlLmluXSBbcHJvZ3JhbXMvdmlldy92aWV3LmNdCglGaXggY29tcGlsYXRpb24sIEFsZHVzIHBsYWNlYWJsZSBtZXRhZmlsZSBsb2FkaW5nLgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW3JlbGF5MzIvZ2RpMzIuc3BlY10gCgkgIFtvYmplY3RzL21ldGFmaWxlLmNdCglJbXBsZW1lbnRlZCB2YXJpb3VzIDMyIGJpdCB2ZXJzaW9ucyBvZiByZWd1bGFyIG1ldGFmaWxlIEFQSS4KCgkqIFtvYmplY3RzL2VuaG1ldGFmaWxlLmNdCglJbXBsZW1lbnRlZCByZW5kZXJpbmcgb2YgYSBjb3VwbGUgb2YgZG96ZW4gcmVjb3Jkcy4KClR1ZSBNYXIgMjQgMjA6MDY6MzkgMTk5OCAgTWF0dGhldyBCZWNrZXIgPG1iZWNrZXJAZ2xhc3NjaXR5Lm5ldD4KCgkqIFttZW1vcnkvKi5jXQoJVXBkYXRlZCBkb2N1bWVudGF0aW9uIGZvciBBUEkgbWFucGFnZXMuCgpNb24gTWFyIDIzIDA5OjA5OjAwIDE5OTggIEFsZXggS29yb2JrYSA8YWxleEBwaGFybS5zdW55c2IuZWR1PgoKCSogW21pc2Mvd2luc29jay5jXQoJRml4ZWQgMzItYml0IEROUyBsb29rdXAuCgpNb24gTWFyIDIzIDIzOjU0OjQ3IDE5OTggIEx1aXogT3RhdmlvIEwuIFpvcnplbGxhICA8em9yemVsbGFAbnIuY29uZXh3YXJlLmNvbT4KCgkqIFttdWx0aW1lZGlhL2luaXQuY10KCU5ldyBjb2RlIGZvciB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGdhdGhlcmluZyBvZiBpbmZvcm1hdGlvbiBhYm91dAoJdGhlIE1JREkgZGV2aWNlcywgZm9yIGZ1dHVyZSB1c2UuCgpUaHUgTWFyIDE5IDAwOjU5OjI5IDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckBub3NwYW0uYmlyY2guZWUudnQuZWR1PgoKCSogW3dpbmRvd3Mvd2luLmNdCglFbGltaW5hdGVkIGluYWNjdXJhdGUgc2V0dGluZyBvZiBjcy0+aE1lbnUgaW4KCVdJTl9DcmVhdGVXaW5kb3dFeCwgYWxvbmcgd2l0aCBzdXBlcmZsdW91cyBTZXRNZW51MzIgY2FsbC4KCk1vbiBNYXIgMTYgMTc6NDA6NTMgMTk5OCAgUGV0dGVyIFJlaW5ob2xkdHNlbiA8cGVyZUB0ZC5vcmcudWl0Lm5vPgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvTWFrZWZpbGUuaW5dIFtNYWtlZmlsZS5pbl0KCUluc3RhbGwgd2luZS5zeW0gaW4gJChleGVjX3ByZWZpeCkvbGliIGFuZCBtYWtlIHN1cmUgdGhlIGRlYnVnZ2VyCglmaW5kcyBpdC4KClN1biBNYXIgMTUgMjI6MzY6MzUgMTk5OCAgTWljaGFlbCBWZWtzbGVyIDxtdmVrc2xlckB0eC50ZWNobmlvbi5hYy5pbD4KCgkqIFtkdW1teS5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJRml4ZWQgc3R1YiBkZWNsYXJhdGlvbiBvZiBHRElfNTMyLCBzbyBIZWJyZXctV29yZDIga2luZCBvZiB3b3Jrcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAxNSAwMzo0Njo1MCAxOTk4ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBtYWlsLmNzLnRvcm9udG8uZWR1PgoKCSogWyovKl0KCUZpeGVkIHNvbWUgZHByaW50Zl8gc3VjaCB0aGF0IHRoZXJlIGlzIG9uZSBhbmQgb25seSBvbmUKCW5ldyBsaW5lIGZvciBlYWNoIGRwcmludGYgYW5kIHRoYXQgbmV3IGxpbmUgb2NjdXJzIGF0IHRoZSBlbmQuCglUcmFuc2Zvcm1lZCBzb21lIGZwcmludGZzIGludG8gcHJvcGVyIGRlYnVnIHN0YXRlbWVudHMuCglSZW1vdmVkIG11Y2ggcmVkdW5kYW5jeSBmcm9tIG1vc3Qgb2YgdGhlIGRlYnVnIHN0YXRlbWVudHMuIFRoZQoJcmVkdW5kYW5jeSBhcHBlYXJlZCBiZWNhdXNlIG5vdyB0aGUgY29tcG9uZW50IGFuZCBmdW5jdGlvbgoJbmFtZSBpcyBvdXRwdXQgYXV0b21hdGljYWxseS4gTW9zdCBkZWJ1ZyBzdGF0ZW1lbnRzIGFsc28gdXNlZCB0bwoJb3V0cHV0IHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KCUFsbCB0aGVzZSBjaGFuZ2VzIHByZXBhcmVkIHRoZSBzb3VyY2UgdG8gc3dpdGNoIGNvbXBsZXRlbHkgdG8KCXRoZSBuZXcgZGVidWdnaW5nIGludGVyZmFjZS4KCUZvciBtb3JlIGluZm8sIHJlZmVyIHRvIC4vZG9jdW1lbnRhdGlvbi9kZWJ1Zy1tc2cKClNhdCBNYXIgMTQgMTk6NDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbbWlzYy9zaGVsbC5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJQ2hhbmdlZCBwYXJhbWV0ZXJzIG9mIEZVTkMwMDQoKSB0byBmaXggYSBjcmFzaC4KCU5vdCBzdXJlIGlmIHRoaXMgZml4IGlzIGNvcnJlY3QgKGRvYyB3YW50ZWQpLgoKCSogW3dpbmRvd3MvdXNlci5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW2luY2x1ZGUvdXNlci5oXQoJSW1wbGVtZW50ZWQgVXNlclNlZVVzZXJEby4KCgkqIFttc2Rvcy9pbnQyMS5jXSBbaW5jbHVkZS9tc2Rvcy5oXQoJQWRkZWQgIkdFVCBMSVNUIE9GIExJU1RTIiAoSU5UIDIxLzUyaCkuCgpTYXQgTWFyIDE0IDE1OjQ4OjAyIDE5OTggIERvdWdsYXMgUmlkZ3dheSA8cmlkZ3dheUBnbWNsLmNvbT4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3JlbGF5MzIvZ2RpMzIuc3BlY10gW29iamVjdHMvZW5obWV0YWZpbGUuY10KCUJlZ2lubmluZ3Mgb2YgZW5oYW5jZWQgbWV0YWZpbGUgc3VwcG9ydC4KCkZyaSBNYXIgMTMgMjA6NTM6MDkgMTk5OCAgSm9obiBSaWNoYXJkc29uIDxqcmljaGFyZEB6a28uZGVjLmNvbT4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglSZXN0YXJ0IGludGVycnVwdGVkIGNvbnNvbGUgd3JpdGVzLgoKRnJpIE1hciAxMyAxODo1OToyNCAxOTk4ICBNYXR0aGV3IEJlY2tlciA8bWJlY2tlckBnbGFzc2NpdHkubmV0PgoKCSogWyovKi5jXQoJVXBkYXRlZCBkb2N1bWVudGF0aW9uIGZvciBBUEkgbWFucGFnZXMuCgoJKiBbd2luZG93cy9kY2UuY10KCVJlbGVhc2VEQzE2OiBGaXhlZCBjYXN0LgoKCSogW2luY2x1ZGUvd2luZG93cy5oXSBbbWVtb3J5L3ZpcnR1YWwuY10KCVZpcnR1YWxRdWVyeXtFeH0gc2hvdWxkIHJldHVybiBEV09SRCBpbnN0ZWFkIG9mIEJPT0wzMi4KCkZyaSBNYXIgMTMgMTM6MDM6MDYgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbUkVBRE1FXVtkb2N1bWVudGF0aW9uL3N0YXR1cy9dCglSRUFETUUgdXBkYXRlZCwgYWRkZWQgbHpleHBhbmQsdmVyc2lvbiBhbmQgbXVsdGltZWRpYQoJc3RhdHVzIG5vdGVzIHRvIG5ldyBkb2N1bWVudGF0aW9uL3N0YXR1cyBkaXJlY3RvcnkuCgoJKiBbb2xlLyouY11baWYxNjMyL3R5cGVsaWIuc3BlY10KCUFkZGVkIHR5cGVsaWIgc3R1YnMsIHNldmVyYWwgc21hbGwgYWRkaXRpb25zIGFuZCBmaXhlcy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeGVkIGEgc21hbGwgYnVnIChmaXh1cF9pbXBvcnRzIGdvdCBwYXNzZWQgdGhlIHdyb25nIGhNb2R1bGUgaW4gYQoJcmVtYXBjYXNlKS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdW2lmMTYzMi9zaWduYWwuY11bbWlzYy93aW5zb2NrX2Rucy5jXQoJICBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgc29tZSByZWN1cnNpdmUgZGVidWdnZXIgY3Jhc2hlcyAoY2F1c2VkIGJ5IGludmFsaWQgRlMpLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVR3byBidWdzIGZpeGVkLgoKRnJpIE1hciAxMyAwNDo1NTowMSAxOTk4ICBEYXZpZCBMZWUgTGFtYmVydCA8bGFtYmVyNDVAZWdyLm1zdS5lZHU+CgoJKiBbaW5jbHVkZS93aW5udC5oXSBbaW5jbHVkZS93aW5ubHMuaF0KCU1vdmVkIExBTkdfeHh4IGZsYWdzIHRvIHdpbm5scy5oCgoJKiBbaW5jbHVkZS93aW5ubHMuaF0KCUFkZGVkIGZsYWdzIGZvciBHZXREYXRlRm9ybWF0KCk7IGZpeGVkIHZhbGlkaXR5IG9mCglMT0NBTEVfU1lTVEVNX0RFRkFVTFQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIAoJQWRkZWQgR2V0VGltZUZvcm1hdCgpIHByb3RvdHlwZXMuCgoJKiBbb2xlL29sZTJubHMuY10KCUltcGxlbWVudGVkIEFTQ0lJIGRhdGUtIGFuZCB0aW1lLWZ1bmN0aW9ucywgIHVzaW5nIGFuCglvcHRpbWl6ZWQgY29tbW9uIGNvcmU7ICBhZGRlZCBzdHVicyBmb3IgVW5pY29kZSB2ZXJzaW9uczsgIAoJc3RhcnRlZCB3b3JrIG9uIGEgVW5pY29kZSBjb3JlLgoKCSogW0FVVEhPUlNdCglBZGRlZCBteSBuYW1lLgoKTW9uIE1hciAgOSAyMDoxMDoxNSAxOTk4ICBFcmljIEtvaGwgPGVrb2hsQGFiby5yaGVpbi16ZWl0dW5nLmRlPgoKCSogW3JlbGF5MzIvY29tY3RsMzIuc3BlY10gW2luY2x1ZGUvaW1hZ2VsaXN0LmhdCgkgIFtpbmNsdWRlL2NvbW1jdHJsLmhdIFttaXNjL2ltYWdlbGlzdC5jXSBbbWlzYy9NYWtlZmlsZS5pbl0KCUZpcnN0IGF0dGVtcHQgYXQgaW1wbGVtZW50aW5nIEltYWdlTGlzdHMuCgpTdW4gTWFyICA4IDIwOjE5OjQ5IDE5OTggIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdIFtjb25maWd1cmUuaW5dCglUcnkgdG8gZ2V0IEZpbGVUaW1lVG9Mb2NhbEZpbGVUaW1lLEZpbGVUaW1lVG9TeXN0ZW1UaW1lIGFuZAoJU3lzdGVtVGltZVRvRmlsZVRpbWUgcmlnaHQuCglVc2UgdGltZWdtKCkgd2hlcmUgYXZhaWxhYmxlLgoKCSogW21pc2MvbHN0ci5jXQoJRml4IGFuIG9mZiBieSBvbmUgZXJyb3IgaW4gRm9ybWF0TWVzc2FnZSBhbmQgaGFuZGxlIHRoZSBjYXNlIAoJd2hlbiBhcmdzID0gTlVMTCAodXNlZCBieSBwcm9ncmFtcyB0byBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgCglzdHJpbmcpLgoKCSogW3dpbjMyL2NvbnNvbGUuY10KCUFjdHVhbCBkaXNwbGF5IGEgcGVyLXByb2Nlc3MgVGl0bGUgc3RyaW5nLCBiZXR0ZXIgd29ya2luZwoJYXR0ZW1wdCBmb3IgV3JpdGVDb25zb2xlMzJXIGFuZCBSZWFkQ29uc29sZTMyVy4KCkZyaSBNYXIgIDYgMjA6MzM6NDUgMTk5OCAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFtpbmNsdWRlL2NvbmZpZy5oLmluXVtjb25maWd1cmUuaW5dW211bHRpbWVkaWEvYXVkaW8uY10KCSAgW211bHRpbWVkaWEvZHNvdW5kLmNdCglBZGRlZCBjaGVjayBmb3IgRnJlZUJTRCBzb3VuZCBzeXN0ZW0uCgpTdW4gTWFyICAxIDE3OjQwOjEwIDE5OTggIEphc29uIFNjaG9uYmVyZyA8c2Nob25AbXRpLnNnaS5jb20+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbaW5jbHVkZS9vbGUuaF0gW2luY2x1ZGUvc2hsb2JqLmhdCglSZW1vdmVkIGZpbmFsIGNvbW1hcyBpbiBlbnVtIHR5cGVzLgoKTW9uIEZlYiAyMyAwNzo1MjoxOCAxOTk4ICBMdWl6IE90YXZpbyBMLiBab3J6ZWxsYSAgPHpvcnplbGxhQG5yLmNvbmV4d2FyZS5jb20+CgoJKiBbbXVsdGltZWRpYS90aW1lLmNdCglXb3JrYXJvdW5kIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpbnNpZGUgdGltZUdldFRpbWUuCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJV09ETV9HRVROVU1ERVZTIGFuZCBXSURNX0dFVE5VTURFVlMgb25seSByZXR1cm4gMSBub3cgaWYgdGhlCglTT1VORF9ERVYgY2FuIGJlIG9wZW5lZCwgb3IgaWYgaXQncyBidXN5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyICAxIDEwOjQ1OjIzIDE5OTggIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJRml4ZWQgcHJvYmxlbSB3aXRoIHdlaXJkIERMTHMgKE5FX0ZGTEFHU19TSU5HTEVEQVRBICYmIERHUk9VUCA9IDApLgoKCSogW21zZG9zL2Rvc21lbS5jXQoJRXhwb3J0IGFkZHJlc3MgZm9yIF9fMDAwMEgsIHRvby4KCgkqIFttc2Rvcy9kcG1pLmNdCglDaGFuZ2VkIE1lbUFsbG9jIGZ1bmN0aW9ucyB0byByZXR1cm4gbGVzcyBmcmFnbWVudGVkIGFkZHJlc3Nlcy4KClNhdCBGZWIgMjggMTg6NTA6MTIgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3NjaGVkdWxlci9zeXNkZXBzLmNdCglEb24ndCB1c2UgJWZzIHJlZ2lzdGVyIGJlZm9yZSB0aHJlYWRpbmcgaW5pdGlhbGl6YXRpb24uCgpTYXQgRmViIDI4IDE0OjA0OjU2IDE5OTggIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgoKCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0KCUF1dG9jb25mIG1hY3JvIHRvIGNoZWNrIGZvciBub24tcmVlbnRyYW50IFggbGlicmFyaWVzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbiBTZXRXaW5kb3dQb3MzMigpLCBkbyBub3QgY2F1c2UgV01fU0laRSBtZXNzYWdlcyB3aGVuIHRoZQoJU1dQX05PU0laRSBmbGFnIGlzIHNwZWNpZmllZC4gVGhpcyBmaXhlcyB0aGUgZGl2aXNpb24tYnktemVybyBpbgoJQm9ybGFuZCBDKysgNC4wICJPcGVuIFByb2plY3QiIG1lbnUgaXRlbS4KClNhdCBGZWIgMjggMTM6MTE6MjYgMTk5OCAgSmFtZXMgTW9vZHkgIDwwMTMyNjNtQGRyYWdvbi5hY2FkaWF1LmNhPgoKCSogW29sZS9vbGUybmxzLmNdCglDaGFuZ2VkICJFbmdsaXNoIiB2YWx1ZXMgZnJvbSBHZXJtYW4gdG8gRW5nbGlzaC4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUZpeGVkIG9mZi1ieS1vbmUgbW9udGggYnVnLgoKRnJpIEZlYiAyNyAyMjoxMjowMSAxOTk4ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbd2luZG93cy93aW4uY10KCUZpeCB3aW5lbGliIGNsYXNzIG1lbnUgbG9hZGluZyBidWcuCgoJKiBbaW5jbHVkZS9tb2R1bGUuaF0gW2xvYWRlci9tb2R1bGUuY10KCUxvYWRNb2R1bGUzMiBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgQ3JlYXRlUHJvY2Vzcy4KCgkqIFtwcm9ncmFtcy92aWV3LypdCglNZXRhZmlsZSB2aWV3ZXIgc2FtcGxlIHByb2dyYW0uCgoJKiBbZG9jdW1lbnRhdGlvbi93aW5lLnRleGluZm9dIFtkb2N1bWVudGF0aW9uL01ha2VmaWxlLmluXQoJSW1wcm92ZW1lbnRzIGFuZCBhZGRpdGlvbnMsIEhUTUwgdGFyZ2V0LgoKRnJpIEZlYiAyNyAwNDoyNzo0OCAxOTk4ICBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoKCSogWyovKl0KCVN3aXRjaGVkIHRvIHRoZSBuZXcgZGVidWcgbWVzc2FnZXMgaW50ZXJmYWNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbgoJcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YXRpb24vZGVidWctbXNncy4gQmVjYXVzZSB0aGUgbmV3IHNjaGVtZQoJaW50cm9kdWNlcyBhIG5ldyBzZW1hbnRpYyBsZXZlbCwgSSBoYWQgdG8gbWFudWFsbHkgZG8gdGhyb3VnaAoJYWJvdXQgNTMwIGRwcmludGZfeHh4ISAgVGhlIHJlc3Qgb2YgYWJvdXQgMjQwMCB3aGVyZSB0cmFuc2Zvcm1lZAoJdmlhIGEgc2NyaXB0LiAgQmVjYXVzZSBvZiB0aGUgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZXMgdGhhdCBJIGhhZAoJdG8gZG8sIHNvbWUgbWF5IGhhdmUgbm90IGNvbWUgb3V0IGFzIG5pY2VseSBhcyBJIHdhbnRlZCB0aGVtLiAgSWYKCXRoaXMgaXMgdGhlIGNhc2UsIHBsZWFzZSBsZXQgbWUga25vdy4gVGhlcmUgaXMgYSBsb3Qgb2Ygd29yayBsZWZ0Cgl0byBkbzogLS0gYSBmZXcgaHVuZHJlZCBwcmludGYncyB0byBiZSBjb252ZXJ0ZWQgLS0gYWJvdXQgMjMwMAoJZnByaW50ZidzIHRvIGJlIGNvbnZlcnRlZCAtLSBhYm91dCA2MDAgRklYTUUncyB0byBiZSB0cmFuc2Zvcm1lZAoJVGhlIHByb2JsZW0gaXMgdGhhdCBpbiB0aGUgYWJvdmUgbWVudGlvbmVkIGNhc2VzLCBhIGxvdCBvZiBtYW51YWwKCWludGVydmVudGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIGEgbG90IG9mIHRoZSBpbmZvcm1hdGlvbiBpcwoJbWlzc2luZy4gIFRoZXJlIGFyZSBhbHNvIGEgbG90IG9mIG90aGVyIHRoaW5ncyB0byBiZSBkb25lIHRvIHRoZQoJaW50ZXJmYWNlIGFuZCBzbyBmb3J0aC4gSSBoYXZlIG5vdyBpZGVhcyBmb3IgYSBhdCBsZWFzdCBhIG1vbnRoCgl3b3J0aCBvZiBmdWxsIHRpbWUgd29yayA6KSBJIHdpbGwgcHJvY2VlZCB3aXRoIG1hbnkgY2hhbmdlcyBpbiB0aGUKCW5leHQgZmV3IHJlbGVhc2VzLCBzbyBwbGVhc2UgZG8gbm90IHN0YXJ0IG1vZGlmaW5nIHRoaW5ncyBiZWNhdXNlCgl0aGVyZSB3aWxsIGJlIGEgaGVsbCBvZiBhIGxvdCBvZiBjb25mbGljdHMuIElmIHlvdSBoYXZlIGlkZWFzIHRoYXQKCXlvdSB3YW50IHRvIGludGVncmF0ZSBvciB5b3Ugd2FudCB0byB3b3JrIG9uIGRpZmZlcmVudCB0aGluZ3MsCglwbGVhc2UgY29vcmRpbmF0ZSB3aXRoIG1lLgoKVGh1IEZlYiAyNiAxMzowNDoyOSAxOTk4ICBEYXZpZCBMZWUgTGFtYmVydCA8bGFtYmVyNDVAZWdyLm1zdS5lZHU+CgoJKiBbb2xlL29sZTJubHMuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJRmlyc3QgdHJ5IGF0IE9MRSBkYXRlLSBhbmQgdGltZS1mb3JtYXR0aW5nIGZ1bmN0aW9ucy4KCldlZCBGZWIgMjUgMTE6MjA6MzUgMTk5OCBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy8qLmNdCglDaGFuZ2VkIGRvcyBkZXZpY2UgaGFuZGxpbmcsIGFkZGVkICdDT04nIGRldmljZWhhbmRsaW5nLgoKCSogW2dyYXBoaWNzL2RkcmF3LmNdCglCdWcgZml4ZXMsIHNvbWUgYWRkaXRpb25zLgoKCSogW2lmMTYzMi9idWlsdGluLmNdW2xvYWRlci9tb2R1bGUuY11bbGlicmFyeS93aW5lc3R1Yi5jXQoJU21hbGwgaGFjayBzbyB3ZSBkb24ndCBuZWVkIGEgZHVtbXkgQlVJTFRJTl9Mb2FkTW9kdWxlCglpbiB3aW5lc3R1Yi5jLgoKCSogW29sZS8qXVtyZWxheTMyL29sZTMyLnNwZWNdW2lmMTYzMi9zdG9yYWdlLnNwZWNdCglzdG9yYWdlLmRsbCBzdGFydGVkLiB3aW53b3JkIGxvYWRzIGRvY3VtZW50cyAoc2F2aW5nCglkb2Vzbid0IHdvcmsgeWV0LCBkdW5ubyB3aHkpLgoJU2V2ZXJhbCBvbGUgYWRkaXRpb25zLCBzb21lIGNsZWFudXBzIGFuZCBidWdmaXhlcy4KCUlNYWxsb2MxNiBpbXBsZW1lbnRlZC4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUFkZGVkIHNvbWUgY29tbWVudHMsIGZpeGVkIGNpcmN1bGFyIGRsbCByZWZlcmVuY2VzLAoJZml4ZWQgbW9kcmVmIG9yZGVyaW5nLCBmaXhlZCB0bHMgYWxsb2NhdGlvbi4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglBZGRlZCB2YWxpZGl0eSBjaGVja3MgYmVmb3JlIGV2ZXJ5IEdFVF9BUkVOQV9QVFIuCgkoc2V2ZXJhbCBmdW5jdGlvbnMgcmVseSBvbiBHbG9iYWwqIHJldHVybiB2YWx1ZXMKCSBvbiBpbnZhbGlkIGhhbmRsZXMsIGxpa2UgSXNUYXNrKS4KCUltcGxlbWVudGVkIEdsb2JhbFVubG9ja0ZyZWUxNi4KCgkqIFttZW1vcnkvdmlydHVhbC5jXQoJUmVwbGFjZWQgZHByaW50Zl92aXJ0dWFsIGJ5IGZwcmludGYsIHNvIHdlIGNhbgoJZG8gJ2luZm8gbWFwJyBhZ2FpbiBpbiB0aGUgZGVidWdnZXIuIEluY3JlYXNlIHJlYWQKCWxpbmVzaXplIGZvciBMaW51eDIuMSBjYXNlcy4KCgkqIFttaXNjL2NwdS5jXVttaXNjL3JlZ2lzdHJ5LmNdCglNb3ZlZCBjcHUgcmVnaXN0cnkgaW5pdGlhbGl6YXRpb24gdG8gbWlzYy9jcHUuYy4KCgkqIFttdWx0aW1lZGlhL2Rzb3VuZC5jXQoJRW5oYW5jZWQsIHJlcGxhY2VkIEdFVE9TUEFDRSBidWZmZXJpbmdjaGVjayBieSBTRVRGUkFHTUVOVC4KCgkqIFtyZWxheTMyL2NydGRsbC5zcGVjXVtyZWxheTMyL250ZGxsLnNwZWNdCglSZXBsYWNlZCBzb21lIHB0ciBieSByZXNwZWN0aXZlICdzdHInIGFuZCAnd3N0cicgYXJndW1lbnRzCglmb3IgbGliYyBmdW5jdGlvbnMuCgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXQoJQWRkZWQgc29tZSBzYW5pdHkgY2hlY2tzIHRvIHN0YWNrYWxsb2NhdGlvbiwgdGxzaGFuZGxpbmcgZml4ZWQuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIGNkZWNsIGFyZ3VtZW50dHlwZSBvcmRlciAod2FzIHJldmVyc2VkKS4KCgkqIFt3aW4zMi9vcmRpbmFscy5jXQoJSW1wbGVtZW50ZWQgS0VSTkVMXzQ0OS4KCgkqIFt3aW5kb3dzL2RpbnB1dC5jXQoJU29tZSBmaXhlcywgbmVlZHMgbXVjaCBtb3JlIHdvcmsuIFRvbWIgUmFpZGVyMiB3b3JrcyB3aXRoIGtleWJvYXJkIDspCgpUdWUgRmViIDI0IDIwOjQ2OjM3IDE5OTggIEphbWVzIEp1cmFuICAgPGpyajEyMEBwc3UuZWR1PgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBVU0VSMzIgb3JkaW5hbCBudW1iZXJzIGluIGRvY3VtZW50YXRpb24uCgpTYXQgRmViIDIxIDEyOjMwOjM4IDE5OTggIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemtvLmRlYy5jb20+CgoJKiBbZmlsZXMvZmlsZS5jXSBbaW5jbHVkZS9rMzJvYmouaF0gW21lbW9yeS92aXJ0dWFsLmNdCglbc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmNdIFtzY2hlZHVsZXIvZXZlbnQuY10gW3NjaGVkdWxlci9oYW5kbGUuY10KCVtzY2hlZHVsZXIvazMyb2JqLmNdIFtzY2hlZHVsZXIvbXV0ZXguY10gW3NjaGVkdWxlci9wcm9jZXNzLmNdCglbc2NoZWR1bGVyL3NlbWFwaG9yZS5jXSBbc2NoZWR1bGVyL3RocmVhZC5jXQoJQWRkZWQgZ2VuZXJpYyBrMzJvYmogcmVhZCBhbmQgd3JpdGUgcm91dGluZXMgZm9yIGszMm9ianMgdGhhdAoJc3VwcG9ydCBJL08uCgoJKiBbZG9jdW1lbnRhdGlvbi9jb25zb2xlXQoJVXBkYXRlZCBjb25zb2xlIGRvY3MuCgoJKiBbd2luMzIvY29uc29sZS5jXQoJTWFrZSBjb25zb2xlIHdvcmsgbGlrZSBhIGszMm9iaiB0aGF0IHN1cHBvcnRzIEkvTy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU1ha2UgV3JpdGVGaWxlIGFuZCBSZWFkRmlsZSB0YWtlIEhBTkRMRTMyIGZvciBoYW5kbGUuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBGZWIgMTUgMTQ6MDc6MDcgMTk5OCAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAbWFpbC5jcy50b3JvbnRvLmVkdT4KCgkqIFtjb250cm9scy9tZW51LmNdIFttaXNjL3Zlci5jXSBbbXVsdGltZWRpYS9kc291bmQuY10KCSAgW211bHRpbWVkaWEvam95c3RpY2suY10gW3dpbmRvd3MvZGlhbG9nLmNdCglNb2RpZmllZCBzb21lIGRwcmludGZfeHh4J3MgdG8gcHJlcGFyZSB0aGVtIGZvciBhIG5ldwoJZHByaW50Zl8gc2NoZW1lLiBCYXNpY2FsbHksIEkgY2hhbmdlZCB0aGUgZHByaW50ZidzIHRoYXQKCW91dHB1dGVkIGEgbGluZSB3aXRoIG1hbnkgZHByaW50ZiBjYWxscyB0byBkbyBqdXN0IG9uZQoJZHByaW50ZiBjYWxsLgoKU3VuIEZlYiAxNSAxMjowMjo1OSAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtncmFwaGljcy94MTFkcnYvKi5jXSBbb2JqZWN0cy8qLmNdCglBIGZldyBYMTEgY3JpdGljYWwgc2VjdGlvbiBvcHRpbWl6YXRpb25zLCBtb3N0bHkgd2l0aCBYR2V0L1B1dFBpeGVsLgoKCSogW3NjaGVkdWxlci9zeXNkZXBzLmNdIFttaXNjL21haW4uY10KCU1ha2Ugc3VyZSBYMTEgY3JpdGljYWwgc2VjdGlvbiBpcyBhdmFpbGFibGUgYmVmb3JlIGFueSBYbGliIGNhbGwuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFt0b29scy9idWlsZC5jXQoJWWV0IGFub3RoZXIgYXR0ZW1wdCBhdCBmaXhpbmcgQ2F0Y2gvVGhyb3cuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXhlZCBicm9rZW4gUEUgRExMIGxvYWRpbmcuCgoJKiBbaW5jbHVkZS93aW5udC5oXSBbc2NoZWR1bGVyL2hhbmRsZS5jXSBbc2NoZWR1bGVyLyouY10KCUltcGxlbWVudGVkIGhhbmRsZSBhY2Nlc3MgcmlnaHRzLgoJQWRkZWQgR2V0L1NldEhhbmRsZUluZm9ybWF0aW9uLgoKU3VuIEZlYiAxNSAwOTo0NToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFttaXNjL3dpbnNvY2suY10KCUZpeGVkIGJ1ZyBpbiBXU0FDbGVhbnVwIHdoaWNoIGxlYWQgdG8gY3Jhc2hlcyBpbiBXSU5TT0NLX0hhbmRsZUlPLgoKCSogW2dyYXBoaWNzL2ZvbnRlbmdpbmUuY10gW2luY2x1ZGUvZm9udC5oXQoJTWlub3IgaW1wcm92ZW1lbnRzLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudGVkIEdsb2JhbEVudHJ5SGFuZGxlLgoKCSogW21pc2MvdG9vbGhlbHAuY10KCUZpeGVkIGEgbWVtb3J5IGJ1ZyBpbiBOb3RpZnkqcmVnaXN0ZXIuCgoJKiBbbWlzYy93MzJzY29tYi5jXQoJSW1wcm92ZWQgR2V0MTZETExBZGRyZXNzLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglJbXBsZW1lbnRlZCBHZGlTZWVHZGlEby4KCgpTYXQgRmViIDE0IDE0OjU3OjM5IDE5OTggIEpvaG4gUmljaGFyZHNvbiA8anJpY2hhcmRAemtvLmRlYy5jb20+CgoJKiBbd2luMzIvY29uc29sZS5jXQoJQWRkZWQgdGhlIGNvbnNvbGUgaW1wbGVtZW50YXRpb24sIEFsbG9jQ29uc29sZSwgRnJlZUNvbnNvbGUsCglDT05TT0xFX0luaGVyaXRDb25zb2xlLgoKCSogW2RvY3VtZW50YXRpb24vY29uc29sZV0KCVNvbWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY29uc29sZS4KCgkqIFtpbmNsdWRlL3dpbmVycm9yLmhdCglBZGRlZCBzb21lIGVycm9yIGRlZmluZXMuCgoJKiBbc2NoZWR1bGVyL2szMm9iai5jXQoJUmVnaXN0ZXJlZCB0aGUgc2NoZWR1bGVyIG9wcy4KCkZyaSBGZWIgMTMgMTk6MzU6MzUgMTk5OCAgSmFtZXMgTW9vZHkgIDwwMTMyNjNtQGRyYWdvbi5hY2FkaWF1LmNhPgoKCSogW29sZS9vbGUybmxzLmNdCglTb21lIEVuZ2xpc2ggbGFuZ3VhZ2UgZml4ZXMgZm9yIG1pc3NpbmcgdmFsdWVzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeCB0byBhbGxvdyBhbiBlbXB0eSBsaXN0Ym94IHRvIGRlc2VsZWN0IGFsbCBpdGVtcy4KCgkqIFtyZWxheTMyL3VzZXIzMi5zcGVjXSBbd2luZG93cy9rZXlib2FyZC5jXQoJQ3JlYXRlQWNjZWxlcmF0b3JUYWJsZUEgc3R1YiBtZXRob2QuCgoJKiBbd2luZG93cy9zeXNtZXRyaWNzLmNdCglBZGRlZCBtaXNzaW5nIFNNX0NYQ1VSU09SICYgU01fQ1lDVVJTT1IgaW5pdGlhbGl6ZXJzLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJUG9zdFRocmVhZE1lc3NhZ2UzMkEgc3R1YiBtZXRob2QuCgpGcmkgRmViIDEzIDE3OjEyOjI0IDE5OTggIEppbSBQZXRlcnNvbiA8anNwZXRlckByb2Fub2tlLmluZmkubmV0PgoKCSogW2xpYnRlc3QvaGVsbG8zcmVzLnJjXSBbbGlidGVzdC9oZWxsbzMuY10gW2xpYnRlc3QvTWFrZWZpbGUuaW5dCglVcGRhdGVkIHRoZSAnaGVsbG8zJyB0ZXN0IHNvIHRoYXQgaXQgZnVuY3Rpb25zIHByb3Blcmx5IGFnYWluLgoKRnJpIEZlYiAxMyAxNDowODowNyAxOTk4ICBNYXJ0aW4gQm9laG1lICA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KCQoJKiBbZ3JhcGhpY3MvbWFwcGluZy5jXQoJRml4ZWQgdGhlIGVtYmFycmFzc2luZyBidWdzIEkgaW50cm9kdWNlZCBpbnRvIERQdG9MUCBhbmQKCUxQdG9EUC4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJUHJldmVudCBTY3JvbGxXaW5kb3czMiBmcm9tIHNlbmRpbmcgV01fRVJBU0VCS0dORC4KClRodSBGZWIgMTIgMjI6NDY6NTMgMTk5OCAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtvYmplY3RzL21ldGFmaWxlXSBbaW5jbHVkZS9sZHQuaF0KCUZpeCB0byBjb3BlIHdpdGggcmVjb3JkcyBsb25nZXIgdGhhbiA2NEsuCgoJKiBbd2luZG93cy9jbGlwYm9hcmQuY10KCUNsZWFuIHVwIGJpdG1hcHMgYW5kIG1ldGFwaWN0cyBwcm9wZXJseS4KCk1vbiBGZWIgIDMgMjE6NTI6MTggMTk5OCAgS2FybCBCYWNrc3Ry9m0gPGthcmxfYkBnZW9jaXRpZXMuY29tPgoKCSogW3Byb2dyYW1zL3dpbmhlbHAvU3cucmNdIFtyZXNvdXJjZXMvc3lzcmVzX1N3LnJjXQoJTWlub3IgdXBkYXRlIG9mIFN3ZWRpc2ggbGFuZ3VhZ2Ugc3VwcG9ydC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEZlYiAgMSAxMzoyNDo1NCAxOTk4ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJQWRkZWQgRGV2aWNlPSBwYXJhbWV0ZXIgdG8gZHJpdmUgY29uZmlndXJhdGlvbi4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCVRocm93KCkgYW5kIENhdGNoKCkgbm93IHVzZSB0aGUgY29ycmVjdCBDQVRDSEJVRiBsYXlvdXQgKHVudGVzdGVkKS4KCgkqIFt0b29scy9idWlsZC5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdIFtsb2FkZXIvdGFzay5jXQoJTW92ZWQgMTYtYml0IHN0YWNrIHBvaW50ZXIgaW50byB0aHJlYWQgZGF0YWJhc2UuCglTYXZlIGN1cnJlbnQgJWZzIHdoaWxlIHJ1bm5pbmcgMTYtYml0IGNvZGUuCgpGcmkgSmFuIDMwIDA5OjI1OjQ5IDE5OTggIE1hcnRpbiBCb2VobWUgIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgoKCSogW2dyYXBoaWNzL21hcHBpbmcuY10KCU1hZGUgRFB0b0xQMzIgYW5kIExQdG9EUDMyIHJlc3BlY3Qgd29ybGQgdHJhbnNmb3Jtcy4KCgkqIFtncmFwaGljcy9wYXRoLmNdIFtncmFwaGljcy9wYWludGluZy5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJICBbaW5jbHVkZS9wYXRoLmhdCglNb3JlIHBhdGggc3VwcG9ydC4KCgkqIFtpbmNsdWRlL2dkaS5oXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL2RjLmNdCgkgIFtyZWxheS9nZGkzMi5zcGVjXQoJU3VwcG9ydCBmb3IgR2V0L1NldEFyY0RpcmVjdGlvbiBhbmQgR2V0L1NldFdvcmxkVHJhbnNmb3JtCgoJKiBbd2luZG93cy9ob29rLmNdCglGaXhlZCBhIGJ1ZyBpbiBIT09LX01hcDE2VG8zMkNvbW1vbi4KClRodSBKYW4gMjkgMjM6NDM6MTggMTk5OCAgRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHRhaWdhLmdtY2wuY29tPgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10gW29iamVjdHMvbWV0YWZpbGUuY10KCURvY3VtZW50YXRpb24gZm9yIG1ldGFmaWxlIHJlbGF0ZWQgQVBJIGNhbGxzLiBGaXhlZCBhIGJ1ZyB0byBhdm9pZAoJZG9jdW1lbnRpbmcgaXQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglEZWNsYXJhdGlvbiBmb3IgTG9hZEltYWdlLgoKVGh1IEphbiAyOSAyMTo0NDo0NSAxOTk4ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2LypdCglDaGFuZ2VzIHRvIHByaW50aW5nIGNvZGUgdG8gZW5hYmxlIHVzZSBvZiBwcmludGVyIGZvbnRzIHdpdGggdGhlCgl3aW4zLjEgcG9zdHNjcmlwdCBkcml2ZXIuIFJlbWVtYmVyIHRvIGFkZCBwcmludGVyPW9uIHRvIFt3aW5lXQoJc2VjdGlvbiBvZiB3aW5lLmNvbmYgLiBZb3Ugd2lsbCBhbHNvIG5lZWQgdG8gZGlzYWJsZSB0cnVldHlwZQoJZm9udHMgZnJvbSBjb250cm9sIHBhbmVsLiBXaW53b3JkIDYuMCBhbmQgV3JpdGUgc2VlbSB0byBiZSBoYXBweQoJd2l0aCB0aGlzLi4uCgoJKiBbaW5jbHVkZS9iaXRtYXAuaF0KCUZpeCBXaWR0aGJ5dGVzIGZvciAxNWJwcCBkaXNwbGF5cy4KClR1ZSBKYW4gMjcgMjA6NTQ6MDggMTk5OCAgS3Jpc3RpYW4gTmllbHNlbiA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KCgkqIFt0c3gxMS8qXSBbaW5jbHVkZS90cypdIFt0b29scy9tYWtlX1gxMXdyYXBwZXJzXQoJSW1wbGVtZW50ZWQgdGhyZWFkLXNhZmUgWDExIHdyYXBwZXJzLgoKVHVlIEphbiAyNyAxMzo1NDowOSAxOTk4ICBDb25zdGFudGluZSBTYXB1bnR6YWtpcyAgPGNzYXB1bnR6QHRtYS0xLmxjcy5taXQuZWR1PgoKCSogW3dpbmRvd3MvcXVldWUuY10KCUZvcmdvdCB0byBjb252ZXJ0IHRoZGIgdG8gdGhyZWFkX2lkLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNwZWQgdXAgV2luZG93cyA5NSByZWdpc3RyeSByZWFkaW5nLiBDaGFuZ2VkIGNvZGUgdG8gdHJhdmVyc2UKCXJlZ2lzdHJ5IGFzIGEgdHJlZSByYXRoZXIgdGhhbiByZWFkIGluIGFsbCBwb3NzaWJsZSBrZXlzCgkoaW5jbHVkaW5nIGRlYWQgb25lcykuIAoKVHVlIEphbiAyNyAxMjo0NjowOSAxOTk4ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY11bTWFrZWZpbGUuaW5dW3NjaGVkdWxlci90aHJlYWQuY10KCSAgW2xpYnRlc3QvaGVsbG81LmNdCglEb24ndCBleGl0KCkgb24gZmFpbGVkIHRvIGxvYWQgcmVmZXJlbmNlZCBkbGxzLgoJRml4ZWQgc3RhdGljIHRscyBhbGxvY2F0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzLgoJV0lORUxJQiBzaG91bGQgbm93IGJlIGFibGUgdG8gbG9hZCBQRSBkbGxzLiBBIHNhbXBsZQoJd2luZWxpYiBwcm9ncmFtLCB0aGF0IGR5bmFtaWNhbGx5IGxvYWRzIGEgaW50ZXJuYWwgZGxsCglpcyBpbmNsdWRlZC4KCgkqIFtncmFwaGljcy9kZHJhdy5jXVtpbmNsdWRlL2RkcmF3LmhdW2luY2x1ZGUvZDNkLmhdCglDbGVhbmVkIHVwIGFuZCBlbmhhbmNlZCBmdXJ0aGVyLiBBZGRlZCBzZXZlcmFsIERpcmVjdFg1CglpbnRlcmZhY2UgZGVmaW5pdGlvbnMgYW5kIERpcmVjdFN1cmZhY2UzIGltcGxlbWVudGF0aW9uLgoJU3R1YnMgZm9yIEQzRCAoTk9UIGNvbWluZyBzb29uLCBqdXN0IHRoZXJlIHNvIGl0IGZhaWxzIHNhZmVseSkuCgoJKiBbbXVsdGltZWRpYS9kc291bmQuY11baW5jbHVkZS9kc291bmQuaF0KCUFjdHVhbGx5IHdvcmtzIG5vdyBmb3IgYSBsb3Qgb2YgY2FzZXMuIFNvbWUgRGlyZWN0WDUgc3R1ZmYKCWFkZGVkLiBTdGlsbCBsYWNraW5nIHNldmVyYWwgZmVhdHVyZXMuCgoJKiBbd2luZG93cy9kaW5wdXQuY11baW5jbHVkZS9kaW5wdXQuaF0KCVN0YXJ0ZWQgaW1wbGVtZW50aW5nIERpcmVjdElucHV0LiBEb2Vzbid0IHdvcmsgeWV0LCBkb24ndCAKCWtub3cgd2h5LgoKCSogW2lmMTYzMi90aHVuay5jXVttaXNjL2NhbGxiYWNrcy5jXQoJICBbd2luMzIva2VybmVsLmNdW2luY2x1ZGUvY2FsbGJhY2tzLmhdCglBZGRlZCBXT1dDYWxsYmFjazE2RXgsIFdPV0hhbmRsZTMyLgoKCSogW21pc2MvY3B1LmNdCglGaXhlZCBHZXRTeXN0ZW1JbmZvLCBJc1Byb2Nlc3NvckZlYXR1cmVQcmVzZW50LgoKCSogW211bHRpbWVkaWEvam95c3RpY2suY11bbXVsdGltZWRpYS90aW1lLmNdCglTZXZlcmFsIGZpeGVzLiBTbWFsbCBoYWNrIHRvIGdldCB0aW1lcmV2ZW50cyBpbiB0aW1lR2V0VGltZSgpIGxvb3BzLgoKVHVlIEphbiAyMCAxMToyNjoyNyAxOTk4ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUZpeGVkIGNoZWNrIGZvciB1bmlvbiBzZW11biBvbiBGcmVlQlNEIHN5c3RlbXMuCgpTdW4gSmFuIDE4IDIzOjA1OjA0IDE5OTggIEthcmwgQmFja3N0cvZtIDxrYXJsX2JAZ2VvY2l0aWVzLmNvbT4KCgkqIFttaXNjL29sZTJubHMuY10gW3Byb2dyYW1zL3Byb2dtYW4vU3cucmNdIFtwcm9ncmFtcy93aW5oZWxwL1N3LnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19Tdy5yY10KCUFkZGVkL3VwZGF0ZWQgU3dlZGlzaCBsYW5ndWFnZSBzdXBwb3J0LgoKU3VuIEphbiAxOCAxODo0OTowMSAxOTk4ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW21pc2Mvd2luc29jay5jXSBbbWlzYy93aW5zb2NrX2Rucy5jXSBbd2luZG93cy9ldmVudC5jXQoJICBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeGVzLgoKU3VuIEphbiAxOCAxMjo0NToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFttc2Rvcy9pbnQyNS5jXSBbbXNkb3MvaW50MjYuY10KICAgICAgICBJbXBsZW1lbnRlZCAibmF0aXZlIiBhYnNvbHV0ZSBkaXNrIHJlYWQvd3JpdGUgYWNjZXNzLgoKCSogW21zZG9zL2ludDEzLmNdIFttc2Rvcy9pb3BvcnRzLmNdCglFbmhhbmNlZCBHRVQgRFJJVkUgUEFSQU1FVEVSUyAoaW50MTMgQUg9MDgpLgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L3BydGRydi5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJRml4ZWQgdHlwb3MsIGltcGxlbWVudGVkIGRtRW51bURGb250cywKCVN0YXJ0ZWQgaW1wbGVtZW50YXRpb24gb2YgZG1SZWFsaXplT2JqZWN0LgoKCSogW2lmMTYzMi9jb21wb2JqLnNwZWNdIFtvbGUvY29tcG9iai5jXSBbcmVsYXkzMi9vbGUzMi5zcGVjXQoJU3R1YnMgQ29DcmVhdGVJbnN0YW5jZSwgQ29GcmVlVW51c2VkTGlicmFyaWVzLCBpbXBsZW1lbnRlZAoJQ29GaWxlVGltZU5vdy4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21lbW9yeS9nbG9iYWwuY10KCSAgW21lbW9yeS9zdHJpbmcuY10gW21pc2Mva2VybmVsLmNdIFttaXNjL01ha2VmaWxlLmluXQoJICBbbWlzYy90b29saGVscC5jXSBbbXNkb3MvaW50MjEuY10KCUltcGxlbWVudGVkIEdsb2JhbEhhbmRsZU5vUklQLCBHZXRGcmVlTWVtSW5mbywgRGVidWdGaWxsQnVmZmVyLCAKCXN0dWJzIEdldFNldEtlcm5lbERPU1Byb2MsIERpYWdRdWVyeSwgRGlhZ091dHB1dCwgVG9vbEhlbHBIb29rCgkoVW5kb2N1bWVudGVkIFdpbmRvd3MpLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvd2luMzJzMTYuc3BlY10gW21pc2Mvd2luMzJzMTYuY10KCU1pc2Mgc3R1YnMuCgoJKiBbaWYxNjMyL3dpbmFzcGkuc3BlY10gW21pc2MvYXNwaS5jXQoJSW1wbGVtZW50ZWQgR2V0QVNQSURMTFZlcnNpb24uCgoJKiBbaWYxNjMyL3dwcm9jcy5zcGVjXSBbbXNkb3MvaW50MjAuY10gW21zZG9zL01ha2VmaWxlLmluXQoJQWRkZWQgaGFuZGxlciBmb3IgSW50IDB4MjAgKHRlcm1pbmF0ZSBwcm9ncmFtLCBfdmVyeV8gb2xkLWZhc2hpb25lZCkuCgoJKiBbbWlzYy93MzJzY29tYi5jXQoJSW1wbGVtZW50ZWQgR2V0MTZETExBZGRyZXNzKCkgcGFydGlhbGx5CgkoYmlnIHRoYW5rcyB0byBNYXJjdXMgYW5kIEFsZXhhbmRyZSkuCgoJKiBbcmVsYXkzMi9NYWtlZmlsZS5pbl0gW3JlbGF5MzIvYnVpbHRpbjMyLmNdIFtyZWxheTMyL2RwbGF5LnNwZWNdCglBZGRlZCBidWlsdC1pbiBEUExBWS5ETEwuCgoJKiBbcmVsYXkzMi93aW5tbS5zcGVjXSBbbXVsdGltZWRpYS9qb3lzdGljay5jXQoJQWRkZWQgam95U2V0VGhyZXNob2xkLgoKCSogW21pc2Mvd2luZGVidWcuY10KCUFkZGVkIFdpbk5vdGlmeS4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglTdHVicyBDcmVhdGVDb25zb2xlU2NyZWVuQnVmZmVyLCBTZXRDb25zb2xlQWN0aXZlU2NyZWVuQnVmZmVyLAoJV3JpdGVDb25zb2xlT3V0cHV0MzJBLgoKCSogW3dpbmRvd3MvdXNlci5jXQoJU3R1YiBTZXRFdmVudEhvb2suCgpTYXQgSmFuIDE3IDE5OjMwOjM1IDE5OTggIE1hdHRoZXcgVG9zZWxhbmQgIDxQYXVsLlRvc2VsYW5kQGJ0aW50ZXJuZXQuY29tPgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeGVkIGJyb2tlbiByZXN0b3JlLXRvLW1heGltaXplZC4KCk1vbiBKYW4gMTIgMjE6MjU6MzIgMTk5OCAgUGVyY2V2YWwgLSBNYXJjIEh1Z3VldCBQdWlnIDxtaHBAdGluZXQuZnV0LmVzPgoKCSogW2RvY3VtZW50YXRpb24vd2luZS5tYW5dIFtpbmNsdWRlL29wdGlvbnMuaF0KCSAgW21pc2MvbWFpbi5jXSBbb2xlL29sZTJubHMuY10gW3Jlc291cmNlcy9zeXNyZXMuY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfQ2EucmNdIFtyZXNvdXJjZXMvTWFrZWZpbGUuaW5dCglBZGRlZCBsYW5ndWFnZSBjYXRhbGFuLiAoQWZlZ2l0IGwnaWRpb21hIGNhdGFs4CkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMTggMTc6MDU6NTggMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdIFt0b29scy9idWlsZC5jXQoJU29tZSBjbGVhbnVwcyBpbiBzdGFjayBmcmFtZSBidWlsZGluZy4KCgkqIFttaXNjL3BvcnQuY10KCUltcGxlbWVudGVkIGNsb25lKCkgd3JhcHBlciBmb3IgbGliYzUgdXNlcnMuCgoJKiBbc2NoZWR1bGVyL211dGV4LmNdIFtzY2hlZHVsZXIvc3luY2hyby5jXQoJSW1wbGVtZW50ZWQgYWJhbmRvbmVkIG11dGV4ZXMuCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10gW3NjaGVkdWxlci90aHJlYWQuY10KCVdlIG5vdyBjcmVhdGUgYSBwcm9jZXNzIGFuZCBhIHRocmVhZCBzdHJ1Y3R1cmUgYXMgc29vbiBhcyBwb3NzaWJsZQoJZHVyaW5nIGluaXRpYWxpemF0aW9uLgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10gW3NjaGVkdWxlci9zeXNkZXBzLmNdCglNb3ZlZCBzeXN0ZW0tc3BlY2lmaWMgdGhyZWFkIGhhbmRsaW5nIHRvIHN5c2RlcHMuYy4KCkZyaSBKYW4gMTYgMTA6NDU6MTUgMTk5OCAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZ3JhcGhpY3MvZGRyYXcuY11baW5jbHVkZS9kZHJhdy5oXQoJU3VyZmFjZSBoYW5kbGluZyBlbmhhbmNlZC4gU29tZSBzdHVmZiBhbHJlYWR5IHdvcmtzIDspCgoJKiBbbXVsdGltZWRpYS9kc291bmQuY11baW5jbHVkZS9kc291bmQuaF0KCUltcGxlbWVudGVkIHVzaW5nIHRoZSBPcGVuIFNvdW5kIFN5c3RlbS4KCVNsb3dseSBzdGFydHMgdG8gd29yayAoc291bmRzIHRlcnJpYmxlIGZvciBzb21lIHByb2dyYW1zKS4KCgkqIFtjb25maWd1cmUuaW5dW211bHRpbWVkaWEvYXVkaW8uY11baW5jbHVkZS9jb25maWcuaC5pbl0KCUFkZGVkIGNoZWNrIGZvciBPcGVuU291bmRTeXN0ZW0sIGZpeGVkIC1sWHhmODZkZ2EgY2hlY2suCglSZXBsYWNlZCBPUyAjaWZkZWZzIGJ5ICNpZmRlZiBIQVZFX09TUyBpbiBtbS9hdWRpby5jLgoKCSogW2lmMTYzMi9yZWxheS5jXVtyZWxheTMyL3JlbGF5Mzg2LmNdCglEbyBub3QgcHJpbnQgY29udHJvbCBjaGFyYWN0ZXJzIGZvciAnc3RyJyBvciAnd3N0cicgYXJncy4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCgkiIiBzZWVtcyB0byBlcXVhbHMgTlVMTCBpbiBrZXluYW1lcy4gUmVwbGFjZSB3aGVyZSBuZWVkZWQuIFNlZW1zCgl0byBoZWxwIHRoZSB3aW45NSByZWdlZGl0LmV4ZS4uLgoKCSogW3dpbjMyL25ld2Zucy5jXQoJSW1wbGVtZW50ZWQgUXVlcnlQZXJmb3JtYW5jZSogdXNpbmcgZ2V0dGltZW9mZGF5KDIpCgkoc2hvdWxkIGJlIGRvbmUgdXNpbmcgdGhlIHBlbnRpdW0gdGltZXJzIHByb2JhYmx5KS4KCgkqIFt0b29scy9pcGNsXQoJUmVtb3ZlZCB1c2VsZXNzIG9wZW5fcGlwZSBjb25zdHJ1Y3QuCgpTdW4gSmFuIDExIDE3OjEwOjAyIDE5OTggIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9yZWdpb24uY10gW2luY2x1ZGUvcmVnaW9uLmhdIFtncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuY10KCVJlZ2lvbnMgYXJlIG5vdyBpbnRlcm5hbCB0byBXaW5lLiBUaGUgYmFzaXMgb2YgdGhpcyBjb2RlIGlzIHRha2VuCglmcm9tIHRoZSBYMTEgZGlzdHJpYnV0aW9uLiBHZXRSZWdpb25EYXRhKCkgaXMgaW1wbGVtZW50ZWQgYXMgaXMgCglFeHRDcmVhdGVSZWdpb24oKSAod2l0aG91dCBYZm9ybXMpLiBDcmVhdGVQb2x5UG9seWdvblJnbigpIHNob3VsZAoJYmVoYXZlIGNvcnJlY3RseSBub3cuIAoKCSogW29iamVjdHMvbWV0YWZpbGUuY10gW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2dyYXBoaWNzLmNdCgkgIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdCgkgIFtpbmNsdWRlL21ldGFmaWxlZHJ2LmhdCglQbGF5YmFjayBvZiBNRVRBX0NSRUFURVJFR0lPTiBzaG91bGQgbm93IHdvcmsuIEltcGxlbWVudGVkIHJlY29yZGluZwoJb2YgTUVUQV9DUkVBVEVSRUdJT04gYW5kIE1FVEFfUEFJTlRSRUdJT04uCgoJKiBbZ3JhcGhpY3MveDExZHJ2L2dyYXBoaWNzLmNdCglGaWxsUmduKCkgKGFuZCB0aGVyZWZvcmUgaXRzIGZyaWVuZHMpIHJlc3BlY3QgbG9naWNhbCBjby1vcmRzLgoKV2VkIEphbiAgNyAwMToyMTo0NSAxOTk4ICBTdGVpbmFyIEhhbXJlICA8c3RlaW5hcmhAc3R1ZC5maW0ubnRudS5ubz4KCgkqIFtjb25maWd1cmUuaW5dIFtpbmNsdWRlL2FjY29uZmlnLmhdIFt0b29scy9idWlsZC5jXQoJTm93IGNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIC5zdHJpbmcgb3IgLmFzY2lpLgoKCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0gW3NjaGVkdWxlci9jcml0c2VjdGlvbi5jXQoJRGVmaW5pbmcgdW5pb24gc2VtdW4gaWYgdGhpcyBpcyBub3QgYXZhaWxhYmxlIGZyb20gaGVhZGVyIGZpbGVzLgoKCSogW21pc2MvbHN0ci5jXQoJTW92ZWQgd2luZSdzIG93biBoZWFkZXIgZmlsZXMgYmVsb3cgPHdjdHlwZS5oPiB0byBhdm9pZAoJcGFyc2UgZXJyb3Igb24gU29sYXJpcy4KClN1biBKYW4gIDQgMTU6Mzg6MDcgMTk5OCAgQW5kcmV3IFRheWxvciA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvbW1pby5jXQoJSW1wbGVtZW50ZWQgbW1pb1NlbmRNZXNzYWdlIGFuZCByZWFycmFuZ2VkIHRoZSBtbWlvCglzdWJzeXN0ZW0gaW4gdGVybXMgb2YgdGhpcyBmdW5jdGlvbi4KCldlZCBEZWMgMjQgMDA6NTE6MjkgMTk5NyAgQ2hhcmxlcyBEdWZmeSA8Y2R1ZmZ5QGJpZ2Zvb3QuY29tPgoKCSogW3dpbmRvd3MvY2xpcGJvYXJkLmNdIFtyZWxheTMyL3VzZXIzMi5zcGVjXQoJR2V0UHJpb3JpdHlDbGlwYm9hcmRGb3JtYXQzMiBub3cgaGFzIHNvbWV0aGluZyBvdGhlciB0aGFuIGp1c3QKCWEgc3R1Yi4gSSBoYXZlIG5vIGlkZWEgaWYgaXQgd29ya3MgKGNhbid0IHRlc3QgdW50aWwKCVNldENsaXBib2FyZERhdGEgaXMgZmluaXNoZWQpIGJ1dCBIRWRpdCBsaWtlcyB0aGluZ3MgYSBsb3QgbW9yZQoJdGhpcyB3YXkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBKYW4gIDMgMTc6MTU6NTYgMTk5OCAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZGVidWdnZXIvZGJfZGlzYXNtLmNdCglBZGRlZCBjcHVpZCBhbmQgY21weGNoZyBpbnN0cnVjdGlvbnMuCgoJKiBbaWYxNjMyL2J1aWx0aW4uY10gW3JlbGF5MzIvYnVpbHRpbjMyLmNdCglGaXhlZCBicm9rZW4gLWRsbCBvcHRpb24gd2l0aCBXaW4zMiBETExzLgoKCSogW2luY2x1ZGUvaGVhcC5oXQoJQWRkZWQgU1lTVEVNX0xPQ0svU1lTVEVNX1VOTE9DSyBtYWNyb3MuCgoJKiBbY29uZmlndXJlLmluXSBbbWlzYy9sc3RyLmNdCglBZGRlZCBjaGVjayBmb3Igd2N0eXBlLmguCglDb21tZW50ZWQgb3V0IC0tZW5hYmxlLWlwYyBvcHRpb24gKElQQyBjb2RlIGhhcyBiZWVuIGJyb2tlbiBmb3IgYQoJbG9uZyB0aW1lIGFueXdheSkuCgoJKiBbc2NoZWR1bGVyL2NyaXRzZWN0aW9uLmNdIFtzY2hlZHVsZXIvZXZlbnQuY10KCSAgW3NjaGVkdWxlci9tdXRleC5jXSBbc2NoZWR1bGVyL3NlbWFwaG9yZS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgc3luY2hyb25pemF0aW9uIG9iamVjdHMuCgoJKiBbc2NoZWR1bGVyL3N5bmNocm8uY10KCUltcGxlbWVudGVkIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10KCUlmIHBvc3NpYmxlLCB1c2UgY2xvbmUoKSBpbiBDcmVhdGVUaHJlYWQoKS4KCgkqIFtzY2hlZHVsZXIvdGhyZWFkLmNdIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJTWFkZSB0aHJlYWQgYW5kIHByb2Nlc3Mgd2FpdGFibGUgb2JqZWN0cy4KCVRocmVhZCBhbmQgcHJvY2VzcyBpZCB2YWx1ZXMgYXJlIG5vdyBkaWZmZXJlbnQgZnJvbSB0aGUgcG9pbnRlcnMKCXRoZXkgcmVwcmVzZW50LgoKCSogW3dpbjMyL2szMm9iai5jXQoJTW92ZWQgdG8gc2NoZWR1bGVyIGRpcmVjdG9yeS4KCUFkZGVkIGZ1bmN0aW9uIHRhYmxlIGZvciB3YWl0aW5nIG9wZXJhdGlvbnMgb24gb2JqZWN0cy4KCgkqIFtmaWxlcy9maWxlLmNdIFttZW1vcnkvdmlydHVhbC5jXQoJQWRkZWQgbmV3IEszMk9CSiBmdW5jdGlvbiB0YWJsZS4KClN1biBKYW4gIDEgMTY6NDg6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbZmlsZXMvZmlsZS5jXQoJRml4ZWQgbXkgcGF0Y2ggZm9yIEdldFRlbXBGaWxlTmFtZTE2KCkgYXMgbmVlZGVkLgoJSXQgd2FzIC4uLk5hbWUzMkEoKSB0aGF0IGRpZG4ndCB3b3JrIHByb3Blcmx5LCBub3QgLi4uTmFtZTE2KCkuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L2JydXNoLmNdCglGaXhlZCBhIEJhZE1hdGNoIGVycm9yLgoKCSogW21zZG9zL2ludDIxLmNdCglGaXhlZCBJTlQyMV9GaW5kTmV4dEZDQigpIHRvIGdldCBjb3JyZWN0IHZvbHVtZSBsYWJlbHMgZS5nLgoJaW4gImZpbGUgb3BlbiIgZGlhbG9nLgoKCSogW211bHRpbWVkaWEvam95c3RpY2suY10gW3JlbGF5MzIvd2lubW0uc3BlY10KCVN0dWIgSm95R2V0UG9zRXgoKS4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbcmVsYXkzMi9rZXJuZWwzMi5zcGVjXQoJSW1wbGVtZW50ZWQgUmVnaXN0ZXJTZXJ2aWNlUHJvY2VzcygpLgoKV2VkIERlYyAzMSAxMToxNDo0MyAxOTk3ICBMYXdzb24gV2hpdG5leSAgPGxhd3Nvbl93aGl0bmV5QGp1bm8uY29tPgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9yZWxheS5jXQoJRGVmaW5lIENhbGxQcm9jRXgzMncgLSBUaGFua3MgdG8gTWFyY3VzIE1laXNzbmVyIGZvciBoaXMgZXhjZWxsZW50CglDYWxsUHJvYzMyVy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglUYWtlIGEgc2hvdCBhdCBkZWZpbmluZyBGcmVlTGlicmFyeTMyVy4KClN1biBEZWMgMjggMTI6NDQ6MDQgMTk5NyAgS2FpIE1vcmljaCA8a2FpLm1vcmljaEByaGVpbi1uZWNrYXIubmV0c3VyZi5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdCglNZW51IG1vZGlmaWNhdGlvbiBmcm9tIFdNX0lOSVRNRU5VUE9QVVAgbWVzc2FnZSBmaXhlZC4KCU1lbnUgaXRlbXMgbm93IGNhbiBoYXZlIGRpZmZlcmVudCB3SUQgYW5kIGhTdWJNZW51IChXaW45NSBiZWhhdmlvcikuCgoJKiBbbWlzYy9jcHUuY10KCUltcHJvdmVkIElzUHJvY2Vzc29yRmVhdHVyZVByZXNlbnQuCgpTdW4gRGVjIDI4IDAzOjIxOjA4IDE5OTcgIE92ZSBLYWF2ZW4gPG92ZWtAbWFpbi5hcmN0aWNuZXQubm8+CgoJKiBbaW5jbHVkZS93aW5zb2NrLmhdIFttaXNjL3dpbnNvY2suY10KCUZpeGVkIFdTX1NPTF9TT0NLRVQgZm9yIHNldHNvY2tvcHQoKSwgYW5kIG1hZGUgc2VsZWN0KCkgcmV0dXJuCgllbXB0eSBmZF9zZXRzIGlmIHRpbWVvdXQuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglBbmltYXRlUGFsZXR0ZSgpIGJhaWxlZCBvdXQgaWYgZW50aXJlIHBhbGV0dGUgaXMgYW5pbWF0ZWQuIEZpeGVkLgoKCSogW29iamVjdHMvZGliLmNdCglBZGRlZCBzb21lIGNvZGUgdG8gU2V0RElCaXRzVG9EZXZpY2UoKSBhbmQgaXRzIGhlbHBlcnMgdG8gZml4Cglzb21lIG9mZnNldGluZyBwcm9ibGVtcy4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCU1hZGUgQ3JlYXRlQ3Vyc29yMzIoKSBjb252ZXJ0IHRoZSBpbnN0YW5jZSBoYW5kbGUgcHJvcGVybHkuIE1hZGUKCURlc3Ryb3lDdXJzb3IoKSByZXR1cm4gY29ycmVjdCBzdWNjZXNzIHN0YXR1cy4KCldlZCBEZWMgMjQgMTc6NTY6MzQgMTk5NyAgRGltaXRyaWUgTy4gUGF1biAgPGRpbWlAY3MudG9yb250by5lZHU+CgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQoJQWRkZWQgZGVmaW5pdGlvbiBvZiBHZXRTeXNDb2xvclBlbjE2LzMyLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90CglleGlzdCBpbiB0aGUgV2luMzIgQVBJIGJ1dCBpcyBhIHZlcnkgY2xvc2UgKGFuZCBuYXR1cmFsKSByZWxhdGl2ZQoJdG8gR2V0U3lzQ29sb3JCcnVzaCBmdW5jdGlvbi4gTW9yZW92ZXIsIGl0IGlzICp2ZXJ5KiBtdWNoIHVzZWQgCgl3aXRoaW4gV2luZSBzaW5jZSB0aGVyZSBhcmUgYSBsb3Qgb2YgcGxhY2VzIHdoZXJlIHdlIG5lZWQgdG8gZHJhdwoJbGluZXMgd2l0aCB0aGUgc3RhbmRhcmQgY29sb3JzLgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvY29tYm8uY10gW2NvbnRyb2xzL2ljb250aXRsZS5jXQoJICBbY29udHJvbHMvbWVudS5jXSBbY29udHJvbHMvcHJvZ3Jlc3MuY10gW2NvbnRyb2xzL3Njcm9sbC5jXQoJICBbY29udHJvbHMvdXBkb3duLmNdIFtncmFwaGljcy9wYWludGluZy5jXSBbbWlzYy90d2Vhay5jXQoJICBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglSZXBsYWNlZCByZWZlcmVuY2VzIHRvIHN5c0NvbG9yT2JqZWN0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZQoJY2FsbCB0byBHZXRTeXNDb2xvckJydXNoMzIvR2V0U3lzQ29sb3JQZW4zMi4gVGhlcmUgaXMgbm8gbmVlZCB0bwoJZXhwb3NlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMsIGV2ZW4gd2l0aGluIFdpbmUuCglUaGlzIG1ha2VzIHRoZSBjb2RlIGVhc2llciB0byB1bmRlcnN0YW5kLCBkZWJ1ZywgbWFpbnRhaW4uCgoJKiBbY29udHJvbHMvdWl0b29scy5jXQoJTW9kaWZpZWQgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSB0byB1c2UgdGhlIG5vdwoJc3RhbmRhcmQgcGVucyAoaS5lLiBHZXRTeXNDb2xvclBlbjMyKS4gVGhlc2UgZnVuY3Rpb25zIG1hZGUKCSpoZWF2eSogdXNlIG9mIHN0YW5kYXJkIHBlbnMgc28gSSBleHBlY3QgYSBsb3QgbGVzcwoJQ3JlYXRlUGVuL0RlbGV0ZU9iamVjdCBjYWxscyBjYW4gZG8gb25seSBnb29kLi4uOikKCVBsdXMgc29tZSBtaW5vciBtb2RpZmljYXRpb25zICgqbm8qIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aG91Z2gpLgoKCSogW2NvbnRyb2xzL3VwZG93bi5jXQoJVXNlZCB0aGUgbmV3IERyYXdGcmFtZUNvbnRyb2wzMiBmdW5jdGlvbiB0byBwYWludCB0aGUgY29udHJvbC4KCUkgYWxzbyBkZWxldGVkIFVERE9XTl9EcmF3QXJyb3cgc2luY2UgaXQgd2FzIG5vIGxvbmdlciByZXF1aXJlZC4KClR1ZSBEZWMgMjMgMDA6MDM6MzMgMTk5NyAgU3RlaW5hciBIYW1yZSAgPHN0ZWluYXJoQHN0dWQuZmltLm50bnUubm8+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgY2hlY2sgZm9yIC1sdy4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdIFt0b29scy9idWlsZC5jXQoJQ2hhbmdlcyB0byBtYWtlIHRoZSBhc3NlbWJseSB1bmRlcnN0YW5kYWJsZSBmb3IgZXZlbiBzdW4gYXMuCgkiLmFzY2lpIiAtPiAiLnN0cmluZyIsICJjYWxsICVmb28iIC0+ICJjYWxsIColZm9vIiwKCSJwdXNody9wb3B3ICVbY2Rlc11zIiB3cml0dGVuIG91dCB0byAiLmJ5dGUgMHg2NlxucHVzaGwvcG9wbCAlW2NkZXNdcyIuCgoJKiBbbWVtb3J5L2xkdC5jXQoJI2lmZGVmIGFkZGVkIHNvIDxzeXMvc2VnLmg+IHdpbGwgbm90IGJlIGluY2x1ZGVkIG9uIFNvbGFyaXMuCgpNb24gRGVjIDIyIDE4OjU1OjE5IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIFhGODZER0EgY2hlY2suCgoJKiBbbXVsdGltZWRpYS9kc291bmQuY11bcmVsYXkzMi9kc291bmQuc3BlY11baW5jbHVkZS9kc291bmQuaF0KCVN0YXJ0ZWQgRGlyZWN0U291bmQuIE9ubHkgc3R1YnMgZm9yIG5vdy4KCgkqIFtncmFwaGljcy9kZHJhdy5jXVtpbmNsdWRlL2RkcmF3LmhdW3JlbGF5MzIvZGRyYXcuc3BlY10KCVN0YXJ0ZWQgdG8gaW1wbGVtZW50IERpcmVjdERyYXcuIE1vc3RseSBzdHVicywgc29tZQoJdGVzdGNhc2VzIHdvcmsuIFJlcXVpcmVzIHRoZSBYRjg2REdBIGV4dGVuc2lvbiB0byBYRnJlZTg2LgoJKGNoZWNrIGRlbW8vYmxpemRlbW8uZXhlIGZyb20gdGhlIERpYWJsbyBDRC1ST00pLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglSZXR1cm4gY29ycmVjdCAiQ0RGUyIgZnNuYW1lIHNvIERpYWJsbyBpcyBhIGJpdCBoYXBwaWVyLgoKU3VuIERlYyAyMSAyMTo0NTo0OCAxOTk3ICBLZXZpbiBDb3plbnMgPGtjb3plbnNAaW50ZXJsb2cuY29tPgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUZpeGVkIGJ1Z3MgaW4gdGhlIHJvdXRpbmVzIHdoaWNoIHJlYWQgdGhlIFdpbmRvd3MgJzk1IHJlZ2lzdHJ5CglmaWxlcy4gQWRkZWQgZXh0cmEgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHRoZSBmb3JtYXQgb2YgdGhlIFdpbmRvd3MKCSc5NSByZWdpc3RyeSBmaWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIERlYyAxOSAxMDo1MDo0NiAxOTk3ICBEb3VnbGFzIFJpZGd3YXkgIDxyaWRnd2F5QHdpbmVocS5jb20+CgoJKiBbTWFrZS5ydWxlcy5pbl0gW01ha2VmaWxlLmluXSBbZG9jdW1lbnRhdGlvbi9NYWtlZmlsZS5pbl0KIAkgIFtkb2N1bWVudGF0aW9uL1JFQURNRS5kb2N1bWVudGF0aW9uXQoJRmlyc3QgY3V0IGF0IFdpbmUgQVBJIGRvY3VtZW50YXRpb24uIE5vIGxvbmdlciBpbnN0YWxsIHJlZmVyZW5jZQoJbWFudWFsIGJ5IGRlZmF1bHQuCgpXZWQgRGVjIDE3IDIxOjMyOjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZpeGVkIEdldFRlbXBGaWxlTmFtZTE2KCkgdG8gdXNlIGN1cnJlbnQgcGF0aCBvZiByZXF1ZXN0ZWQgZHJpdmUKCWFzIG5lZWRlZC4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtpZjE2MzIvYnVpbHRpbi5jXSBbaWYxNjMyL2RjaW1hbjMyLnNwZWNdCgkgIFtpZjE2MzIvbXN2ZnczMi5zcGVjXSBbaWYxNjMyL3RhcGkzMi5zcGVjXSBbaWYxNjMyL3dvdzMyLnNwZWNdCglBZGRlZCBtaXNjIERMTHMgbmVlZGVkIGJ5IHZhcmlvdXMgYXBwcy4KCldlZCBEZWMgMTcgMTI6MDE6NTAgMTk5NyAgTW9ydGVuIEVyaWtzZW4gPG1vcnRlbmVAc2ltLm5vPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL3BhbGV0dGUuY10KCUluc2VydGVkIGVtcHR5IHN0dWIgZm9yIENyZWF0ZUhhbGZ0b25lUGFsZXR0ZS4KClR1ZSBEZWMgMTYgMjI6MDg6MDYgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFt3aW5kb3dzL21kaS5jXQoJVXNlIFZLX1RBQiBpbnN0ZWFkIG9mIFZLX1NFUEFSQVRPUiBpbiBUcmFuc2xhdGVNRElTeXNBY2NlbCgpLgoKCSogW2dyYXBoaWNzL21ldGFmaWxlZHJ2L2luaXQuY10KCURlbGV0ZURDKCkgb24gYSBNZXRhREMgZG9lc24ndCBkbyBhbnl0aGluZyAtIGl0IHNob3VsZG4ndC4gVGhlcmVmb3JlCglmaXggY2xlYW51cCBvZiBNZXRhRENzIGluIENsb3NlTWV0YUZpbGUoKTsgdGhleSBub3cgYWN0dWFsbHkgZ2V0CglyZW1vdmVkIGZyb20gdGhlIEdESSBoZWFwIQoKCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQoJUHJlc2VydmUgRk9fTUFUQ0hfWFlJTkRFUCBmbGFnIGluIFhGT05UX01hdGNoRklMaXN0KCkuIFNob3VsZCByZWR1Y2UKCXRoZSBudW1iZXIgb2YgYm9sZC1pdGFsaWMgbWF0Y2hlcy4KClR1ZSBEZWMgMTYgMjA6MTE6NDMgMTk5NyAgQmVydGhvIFN0dWx0aWVucyA8YmVydGhvQHBhbnRlci5zb2NpLmFhdS5kaz4KCgkqIFtncmFwaGljcy9wYWludGluZy5jXQoJSW5jbHVkZWQgYW4gaW1wbGVtZW50YXRpb24gb2YgRHJhd1N0YXRlCgoJKiBbaWYxNjMyL3RodW5rLmNdCglDaGFuZ2VkIG1hbnkgZnByaW50ZnMgaW50byBkcHJpbnRmX3RodW5rCgoJKiBbaW5jbHVkZS9jYWNoZS5oXSBbZ3JhcGhpY3MvY2FjaGUuY10KCU5ldyBmaWxlcyB0byBob2xkIGNhY2hlZCBoYW5kbGVzIHRvIHJlZ3VsYXJ5IHVzZWQgR0RJIG9iamVjdC4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIERSQVdTVEFURXh4IHR5cGVkZWZzCglBZGRlZCBEU1NfREVGQVVMVCBkZWZpbmUgZm9yIERyYXdTdGF0ZQoKCSogW29iamVjdHMvdGV4dC5jXQoJTmV3IGltcGxlbWVudGF0aW9uIG9mIEdyYXlTdHJpbmcoKQoKCSogW2NvbnRyb2xzL3VpdG9vbHMuY10KCUltcGxlbWVudGVkIERyYXdGcmFtZUNvbnRyb2woKSBmdW5jdGlvbnMKCUNoYW5nZWQgRHJhd0VkZ2UoKSBiZWhhdmlvdXIgdG8gd2luOTUgaW1wbGVtZW50YXRpb24KCk1vbiBEZWMgMTUgMjM6NDM6MDEgMTk5NyAgTWFydGluIEJvZWhtZSA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KCgkqIFtncmFwaGljcy9wYXRoLmNdIFtpbmNsdWRlL3BhdGguaF0gW2dyYXBoaWNzL3BhaW50aW5nLmNdCgkgIFtpZjE2MzIvZ2RpMzIuc3BlY10gW2luY2x1ZGUvZ2RpLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCSAgW29iamVjdHMvZGMuY10KICAgICAgICBBZGRlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBHREkgcGF0aHMuCgoJKiBbb2JqZWN0cy9kYy5jXQoJQWRkZWQgRENfSW5pdF9EQ19JTkZPIGZ1bmN0aW9uIGZvciBpbml0aWFsaXppbmcgV0lOX0RDX0lORk8KCXN0cnVjdHVyZS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2dkaW9iai5jXQoJQWRkZWQgREVGQVVMVF9HVUlfRk9OVC4KCgkqIFtpbmNsdWRlL3dpbmVycm9yLmhdCglBZGRlZCBhIGZldyBlcnJvciBjb2Rlcy4KCgkqIFttZW1vcnkvaGVhcC5jXQoJQ2hhbmdlZCBIZWFwQWxsb2MgdG8gbWFrZSB0aGUgY29ycmVjdCBjYWxscyB0byBTZXRMYXN0RXJyb3IKCShub3cgY29uZm9ybXMgdG8gTlQncyBiZWhhdmlvdXIpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglDaGFuZ2VkIFdJTl9DcmVhdGVXaW5kb3dFeCB0byBhbGxvdyBjaGlsZCB3aW5kb3dzIHdpdGggemVybwoJd2lkdGggLyBoZWlnaHQuCgpTdW4gRGVjIDE0IDEyOjAxOjA3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2lmMTYzMi8qXSBbcmVsYXkzMi8qXQoJTW92ZWQgYWxsIDMyLWJpdCByZWxheSBzdHVmZiB0byByZWxheTMyLwoKCSogW2ZpMTYzMi90aHVuay5jXSBbd2luMzIva2VybmVsMzIuY10KCU1vdmVkIGFsbCBLRVJORUwzMiBvcmRpbmFsIGZ1bmN0aW9ucyB0byBrZXJuZWwzMi5jCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglJbml0aWFsaXplIHNlbGVjdG9ycyBpbiBBbGxvY1NlbGVjdG9yQXJyYXkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUdlbmVyYXRlIEMgaW5zdGVhZCBvZiBhc3NlbWJseSBmb3IgV2luMzIgcmVsYXlzLgoJRml4ZWQgc3RhY2sgY29ycnVwdGlvbiBpbiBDYWxsVG8xNiBmdW5jdGlvbnMsIGZvdW5kIGJ5IEJlcnRobwoJU3R1bHRpZW5zLgoJClN1biBEZWMgMTQgMTA6NTU6MDAgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXSBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi9vbGUydGhrLnNwZWNdCglBZGRlZCBidWlsdC1pbiBPTEUyVEhLLkRMTC4gCgoJKiBbaWYxNjMyL3Rvb2xoZWxwLnNwZWNdIFtpbmNsdWRlL3Rvb2xoZWxwLmhdIFttZW1vcnkvc2VsZWN0b3IuY10KCSAgW21pc2MvdG9vbGhlbHAuY10KCUFkZGVkIHN0dWJzIGZvciBTdGFja1RyYWNlRmlyc3QoKSwgU3RhY2tUcmFjZUNTSVBGaXJzdCgpLAoJU3RhY2tUcmFjZU5leHQoKSwgVVRTZWxlY3Rvck9mZnNldFRvTGluZWFyKCkKCWFuZCBVVExpbmVhclRvU2VsZWN0b3JPZmZzZXQoKS4KClNhdCBEZWMgMTMgMTc6MjY6NDEgMTk5NyAgQWxleCBLb3JvYmthICA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbWlzYy93aW5zb2NrLmNdCgkzMi1iaXQgQVBJIGZpeGVzIGZvciByZXBvcnRlZCBwcm9ibGVtcyAodGhhbmtzIHRvIE1hcmN1cwoJYW5kIERhdmlkKS4KCgkqIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCUxpdHRsZSB0d2VhayBpbiBwb2ludCBzaXplIGNhbGN1bGF0aW9uLgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy93aW5oZWxwLmNdCgkgIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4ZXMuCgpTYXQgRGVjIDEzIDE2OjM1OjE0IDE5OTcgIEthaSBNb3JpY2ggPGthaS5tb3JpY2hAcmhlaW4tbmVja2FyLm5ldHN1cmYuZGU+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglPcGVuRmlsZSB3aXRoIGVtcHR5IGZpbGVuYW1lIGFuZCBPRl9QQVJTRSByZXR1cm5zIGN1cnJlbnQgZGlyLgoKCSogW21pc2MvY29tbWRsZy5jXQoJSWdub3JlIGluaXRpYWwgZGlyIGlmIGJvZ3VzLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUxvY2tpbmcgYW4gaWRlbnRpYyByZWdpb24gaW4gYSBmaWxlIG11c3Qgbm90IGJlIGFuIGVycm9yLgoKCSogW21pc2MvbHN0ci5jXQoJVXNlIHdpZGUgY2hhciBjdHlwZSBmdW5jdGlvbnMuCgpGcmkgRGVjIDEyIDIzOjQ2OjIyIDE5OTcgIFV3ZSBCb25uZXMgIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50dS1kYXJtc3RhZHQuZGU+CgoJKiBbZmlsZS9kcml2ZS5jXQoJRmlyc3QgYXR0ZW1wdCBmb3IgR2V0RGlza0ZyZWVTcGFjZUV4LgoKRnJpIERlYyAxMiAyMzoxODo0MSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCQoJRml4ZWQgd3JvbmdseSBhcHBlYXJpbmcgbWVudXMgcHJvYmxlbSAob25seSB1c2UgZGVmYXVsdCBsb29rdXBzIGluCglsYXN0IHJlc291cmNlIHN1YnRyZWUpLgoKCSogW211bHRpbWVkaWEvKi5jXQoJQWRkZWQgd2luMzIgc3VwcG9ydCBmb3IgdGltZSogYW5kIGpveSogbG93bGV2ZWwgZHJpdmVycywKCShub3QgZXhjZXNzaXZlbHkgdGVzdGVkKSwgc29tZSBtaXNjIGZpeGVzIGFuZCBjbGVhbnVwcy4KCgkqIFttaXNjL3NoZWxsb3JkLmNdW21pc2Mvc2hlbGwuY11bb2xlL2ZvbGRlcnMuY11bb2xlL2lmcy5jXQoJICBbaW5jbHVkZS9pbnRlcmZhY2VzLmhdW2luY2x1ZGUvc2hsb2JqLmhdCglBZGRlZCBzb21lIG1vcmUgdW5kb2N1bWVudGVkIFNIRUxMMzIgZnVuY3Rpb25zLCBzb21lIHNoZWxsIGZvbGRlcgogCWludGVyZmFjZSBzdHVicyBhZGRlZCwgU0hHZXRNYWxsb2MsIFNIR2V0RGVza3RvcEZvbGRlciwKCVNIR2V0U3BlY2lhbEZvbGRlckxvY2F0aW9uLCBTSEdldFBhdGhGcm9tSURMaXN0IHN0dWJzIGFkZGVkLAoJSU1hbGxvYywgSVVua25vd24gaW1wbGVtZW50ZWQuCgoJKiBbd2luZG93cy9tc2dib3guY10KCUltcGxlbWVudGVkIE1lc3NhZ2VCb3hJbmRpcmVjdCosIHNvbWUgaW50ZXJuYWwgY2hhbmdlcy4KCgkqIFtpZjE2MzIvdGh1bmsuY10KCUtFUk5FTF80MzEgaW1wbGVtZW50ZWQuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCUdldEN1cnJlbnRPYmplY3QgaW1wbGVtZW50ZWQuCgpXZWQgRGVjICAzIDAxOjA5OjE3IDE5OTcgIEdvcmRvbiBDaGFmZmVlICA8Y2hhZmZlZUBhcHUuY3MuYmVya2VsZXkuZWR1PgoKCSogW29iamVjdHMvZGliLmNdCglGaXggYSBjb3VwbGUgc21hbGwgRElCIHByb2JsZW1zLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeCBhIHR5cG8uCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglUcnkgbm9ybWFsIHJlYWRkaXIgaW4gY2FzZSBmcyBpcyBzcGVjaWZpZWQgYXMgdmZhdCBidXQgaXNuJ3QuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJSW1wbGVtZW50YXRpb24gb2YgV3JpdGVQcml2YXRlUHJvZmlsZVNlY3Rpb24zMkEgZnJvbSBVd2UgQm9ubmVzLgoKCSogW21pc2MvcHJpbnRkcnYuY10KCU9wZW5QcmludGVyMzJBIHN0dWIsIGhlbHBzIFdvcmQ5NyBzdGFydC4KCgkqIFtvYmplY3RzL3RleHQuY10KCUZpeHVwIGltcGxlbWVudGF0aW9uIG9mIEdldFRleHRDaGFyc2V0SW5mby4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXQoJRml4IGVudmlyb25tZW50IHZhcmlhYmxlIGV4cGFuc2lvbi4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KCU1ha2UgTXVsdGlCeXRlVG9XaWRlQ2hhciBhbmQgV2lkZUNoYXJUb011bHRpQnl0ZSBjb25mb3JtIGluIHJldHVybgoJdmFsdWVzIGFuZCBlcnJvciBjb25kaXRpb25zIHRvIHRob3NlIGluIFdpbmRvd3MgTlQgNC4wLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4IGJyb2FkY2FzdGluZyBwcm9ibGVtcyBpbiBXaW4zMi4gIFRoZSBXaW4zMiBkb2NzIHNheSB0byB1c2UKCUhXTkRfVE9QTU9TVCB0byBicm9hZGNhc3QgdG8gYWxsIFdpbjMyIFdpbmRvd3MuCgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10gW2xvYWRlci9wZV9pbWFnZS5jXQoJRG8gbm90IG1hcCBpbiBWaXJ0dWFsQWxsb2MgaWYgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYW5kIHNwYWNlIGlzCglub3QgYXZhaWxhYmxlLiAgVGhpcyBpcyByZXF1aXJlZCBieSBXaW4zMi4KCgkqIFtpbmNsdWRlL3Blbi5oXSBbaW5jbHVkZS94MTFkcnYuaF0gW29iamVjdHMvZGMuY10KCSAgW29iamVjdHMvcGVuLmNdIFtncmFwaGljcy94MTFkcnYvcGVuLmNdCglTdXBwb3J0IGZvciBFeHRDcmVhdGVQZW4uCgpUdWUgRGVjICAyIDIwOjIyOjA2IDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbKi8qLmNdIFsqLyouaF0KCUFkZCBsb3RzIG9mIHByb3RvdHlwZXMuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW2luY2x1ZGUvd2luZG93cy5oXVtpbmNsdWRlL3dpbm50LmhdCgkgIFttaXNjL2NwdS5jXQoJRGVmaW5lIElzUHJvY2Vzc29yRmVhdHVyZVByZXNlbnQuCgoJKiBbbWlzYy9jcnRkbGwuY10KIAkoQ1JURExMX19nZXRjd2QpOiBBbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciB0aGUgdGVybWluYXRpbmcgemVyby4KCgkqIFttaXNjL3Zlci5jXQoJSW1wcm92ZSBjaGVjayBmb3IgbnVsbCBjb21wb25lbnQgaW4gX2ZpbmRfZGF0YVtBV10uICBQbHVnIGxlYWtzCglpbiBWZXJRdWVyeVZhbHVlKi4KCgkqIFt3aW4zMi9jb25zb2xlLmNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkIHN0dWJzIGZvciBHZXRDb25zb2xlQ3Vyc29ySW5mbzMyLCBTZXRDb25zb2xlQ3Vyc29ySW5mbzMyLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXVtpZjE2MzIvdXNlcjMyLnNwZWNdW2luY2x1ZGUvd2luZG93cy5oXQoJRGVmaW5lIFNlbmRNZXNzYWdlVGltZW91dCouCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCglDaGFuZ2UgYWxnb3JpdGhtIG9mIF9fZ2VuZXJpY0NoZWNrU3VtIHRvIGJlIGFsaWdubWVudCBzYWZlLgoKCSogW21pc2MvbWFpbi5jXSBbbWlzYy93aW5zb2NrLmNdIFttaXNjL3dpbnNvY2tfZG5zLmNdCglJbmNsdWRlIHdpbnNvY2suaCBlYXJseSB0byBhdm9pZCBTb2xhcmlzIHByb2JsZW0uCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglVbmRlZiBGU0hJRlQgYmVmb3JlIHdlIGRlZmluZSBpdC4KCgkqIFtyYy93aW5lcmMuY10KCUluY2x1ZGUgPGZjbnRsLmg+IGluc3RlYWQgb2YgPHN5cy9mY250bC5oPi4KCgkqIFtmaWxlcy9maWxlLmNdCglVc2Ugc3RyZXJyb3IgaW4gRklMRV9TZXREb3NFcnJvciBpZiBhdmFpbGFibGUuCgoJKiBbaW5jbHVkZS9jb25maWcuaC5pbl0gW2NvbmZpZ3VyZS5pbl0KCUNoZWNrIGZvciBzdHJlcnJvci4KCgkqIFtvYmplY3RzL2dkaW9iai5jXQoJTWFrZSBzdGF0aWMgZm9udCBzdHJ1Y3R1cmVzIGFsaWduZWQuCgpNb24gRGVjICAxIDEwOjEwOjIxIDE5OTcgIEthcmwgR2Fycmlzb24gIDxrYXJsb3NAZXpuZXQubmV0PgoKCSogW3dpbjMyL2NvbnNvbGUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBzdHViIGZvciBHZXROdW1iZXJPZkNvbnNvbGVNb3VzZUJ1dHRvbnMuCglBZGRlZCBzdHViIGZvciBQZWVrQ29uc29sZUlucHV0KEEsVykuCglGaXhlZCBwYXJhbWV0ZXIgbGlzdCBmb3IgV3JpdGVDb25zb2xlKEEsVykuCglHZXROdW1iZXJPZkNvbnNvbGVJbnB1dEV2ZW50cyBub3cgcmV0dXJucyAwIGV2ZW50cyBpbnN0ZWFkIG9mIDEKCShzaW5jZSBsb3ctbGV2ZWwgY29uc29sZSBmdW5jdGlvbnMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkKS4KCUdldENvbnNvbGVNb2RlIG5vIGxvbmdlciByZXR1cm5zIEVOQUJMRV9XSU5ET1dfSU5QVVQgYW5kCglFTkFCTEVfTU9VU0VfSU5QVVQgc2luY2UgdGhlc2UgYXJlIG5vdCBjdXJyZW50bHkgaW1wbGVtZW50ZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBOb3YgMjkgMTI6MzU6MjYgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaWYxNjMyL2J1aWx0aW4uY10KCUJ1aWxkIGEgY29tcGxldGUgUEUgaGVhZGVyIGZvciBidWlsdGluIFdpbjMyIG1vZHVsZXMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdIFtsb2FkZXIvbW9kdWxlLmNdCglITU9EVUxFMzIgbm93IHBvaW50cyB0byB0aGUgbG9hZGluZyBhZGRyZXNzIG9mIHRoZSBtb2R1bGUuIFRoZXJlCglpcyBubyBsb25nZXIgYSBzZXBhcmF0ZSBQRV9NT0RVTEUgc3RydWN0dXJlLgoKRnJpIE5vdiAyOCAxMToyMTo0NyAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtvbGUvKl1bY29uZmlndXJlLmluXVtNYWtlZmlsZS5pbl1baW5jbHVkZS9pbnRlcmZhY2VzLmhdCgkgIFtpZjE2MzIvb2xlc3ZyMzIuc3BlY11baWYxNjMyL29sZWNsaTMyLnNwZWNdCglOZXcgZGlyZWN0b3J5LCBtb3ZlZCBPTEUgc3R1ZmYgdGhlcmUuCgluZXcgLnNwZWMgZmlsZXMgZm9yIG9sZWNsaTMyLG9sZXN2cjMyLCBzb21lIHN0dWJzIGFkZGVkLgoKCSogW21pc2Mvc2hlbGwuY10KCUFkZGVkIHN1cHBvcnQgZm9yIGV4dHJhY3RpbmcgaWNvbnMgZnJvbSBQRSBkbGxzLgoKCSogW21pc2Mvc2hlbGxvcmQuY11baWYxNjMyL3NoZWxsMzIuc3BlY10KCUFkZGVkIGEgaHVnZSBoZWFwIG9mIG9yZGluYWwgb25seSBleHBvcnRlZCBzaGVsbCBmdW5jdGlvbnMKCSh3aWxsIHdvcmsgb25seSBpbiBXaW45NSkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUhhY2sgdG8gbWFrZSBNYWtlUHJvY0luc3RhbmNlMTYgd29yayBpbiBhbGwgY2FzZXMgKG1wbGF5ZXIuZXhlKS4KCgkqIFt3aW4zMi9zdHJpbmczMi5jXVtpbmNsdWRlL3N0cmluZzMyLmhdCglPYnNvbGV0ZSwgcmVtb3ZlZC4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdCglBZGRlZCAqUmVnaXN0ZXJIb3RrZXkuCgoJKiBbb2JqZWN0cy9mb250LmNdW29iamVjdHMvdGV4dC5jXQoJQWRkZWQgR2V0Rm9udExhbmd1YWdlSW5mbywgR2V0VGV4dENoYXJzZXRJbmZvLgoKV2VkIE5vdiAyNiAxODoxMDo0MCAxOTk3ICBVd2UgQm9ubmVzICA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudHUtZGFybXN0YWR0LmRlPgoKCSogW21pc2MvbmV0d29yay5jXQoJSW4gV05ldEdldENvbm5lY3Rpb24xNiByZXR1cm4gdGhlIERyaXZlIGxhYmVsIGFuZCBub3QgdGhlIERPUy1Dd2QuCglNYWtlcyBXb3JkdmlldyA2IHN0YXJ0IG9uIGEgbmV0d29yayBjb25uZWN0ZWQgbWFjaGluZS4KCgkqIFtjb250cm9scy9zdGF0dXMuY10KCUNhdGNoIGEgTnVsbCBwb2ludGVyIGluIFNXX1NldFRleHQuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCiAJQWRkIE5UNSBmdW5jdGlvbnMgR2V0TG9uZ1BhdGhOYW1lMzIuCgoJKiBbZmlsZXMvZmlsZS5jXQoJTWFrZSBHZXRUZW1wRmlsZU5hbWUxNiBhY2NlcHQgZHJpdmUgMCAoQ3VycmVudCBEcml2ZSkgdG9vLgoJSGFuZGxlIG1vcmUgZXJyb3JzIGFuZCBiZSBtb3JlIHZlcmJvc2UgaW4gRklMRV9TZXREb3NFcnJvciwgZml4CglhbiBlcnJvciBpbiBEZWxldGVGaWxlMzJXCgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10KCUltcGxlbWVudCBGbHVzaFZpZXdPZkZpbGUuCgoJKiBbbWlzYy9jcnRkbGxdCglJbXBsZW1lbnQgX3JvdGwgYW5kIHNwbGl0cGF0aCBhbmQgYWRkIGEgc3R1YiBmb3IgCglfYWJub3JtYWxfdGVybWluYXRpb24uCgoJKiBbbWlzYy9wcmludGRydi5jXQoJU3R1YiBmb3IgRW51bVByaW50ZXJzMzJBLgoKCSogW3dpbjMyL25ld2Zuc10KCUFkZCBTdHViIGZvciBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5LCBjaGFuZ2UgcmV0dXJuIHZhbHVlCglmb3IgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIuCiAJQWRkIHN0dWIgZm9yIERldmljZUlvQ29udHJvbC4KClR1ZSBOb3YgMjUgMTU6NTU6MDEgMTk5NyBNYXJ0aW4gQm9laG1lIDxib2VobWVAaW5mb3JtYXRpay5tdS1sdWViZWNrLmRlPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy9lZGl0LmNdIFt3aW5kb3dzL2RlZnduZC5jXQoJICBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3Mvd2luLmNdCglSZW1vdmVkIFdJTl9OT19SRURSQVcgZmxhZy4KClR1ZSBOb3YgMjUgMTM6MjA6MzUgMTk5NyAgRG91Z2xhcyBSaWRnd2F5IDxyaWRnd2F5QHRhaWdhLnYtd2F2ZS5jb20+CgoJKiBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXQoJRml4ZWQgbWVtb3J5IGxlYWsgaW4gQklUQkxUX0dldERzdEFyZWEuCgpTdW4gTm92IDIzIDE0OjA1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJRXhwb3J0IHdpbmRvd3Mgc3lzdGVtIGRpcmVjdG9yeSB0byBlbnZpcm9ubWVudC4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFtpZjE2MzIvYnVpbHRpbi5jXSBbaWYxNjMyL3czMnNrcm5sLnNwZWNdCgkgIFtpZjE2MzIvd2luMzJzMTYuc3BlY10gW21pc2MvdzMyc2NvbWIuY10gW21pc2MvdzMyc2tybmwuY10KCUFkZGVkIFdpbjMycyBETExzIFczMlNLUk5MIGFuZCBXSU4zMlMxNi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIG1pc2MgZnVuY3Rpb25zIGZvciBXaW4zMnMuCgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbbG9hZGVyL3Rhc2suY10KCUFkZGVkIERlZmluZUhhbmRsZVRhYmxlKCkuCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUZpeGVkIFNldEVudmlyb25tZW50VmFyaWFibGUzMkEoKSB0byBhdm9pZCBoZWFwIGNvcnJ1cHRpb24uCgpTYXQgTm92IDIyIDE0OjExOjQyIDE5OTcgIEtyaXN0aWFuIE5pZWxzZW4gIDxrcmlzdGlhbi5uaWVsc2VuQHJpc29lLmRrPgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUZpeCBsZWFrIGluIEJlZ2luUGFpbnQxNigpIGZvciBDU19QQVJFTlREQyB3aW5kb3dzIHdoZXJlIHRoZQoJdXBkYXRlIHJlZ2lvbiB3YXMgbm90IHByb3Blcmx5IHJlbGVhc2VkLgoKVGh1IE5vdiAyMCAwMzo1NToyOSAxOTk3ICBHb3Jkb24gQ2hhZmZlZSA8Y2hhZmZlZUBDUy5CZXJrZWxleS5FRFU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglJbXBsZW1lbnRlZCBmb3J3YXJkZWQgRExMIGZ1bmN0aW9ucy4KCgkqIFtvYmplY3RzL2RpYi5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgMTYtIGFuZCAzMi1iaXQgbW9kZSBESUJzLgoJU3VwcG9ydCBuZWdhdGl2ZSBiaXRtYXAgaGVpZ2h0cy4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdCglBZGRlZCBzdHViIGZvciBDcmVhdGVQcm9jZXNzMzJXLgoKCSogW3dpbjMyL3NlY3VyaXR5LmNdIFtpbmNsdWRlL250ZGxsLmhdCglBZGRlZCBzdHVicyBmb3IgTG9va3VwQWNjb3VudFNpZDMyQS9XLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdCglVc2UgdGhlIHNpemUgc3BlY2lmaWVkIGluIHRoZSBQRSBoZWFkZXIgZm9yIHRoZSBwcm9jZXNzIGhlYXAuCgpNb24gTm92IDE3IDAwOjUzOjM1IDE5OTcgIExlbiBXaGl0ZSA8cGhyZWFrQGNnb2NhYmxlLm5ldD4KCgkqIFttc2Rvcy9pbnQzZC5jXQoJTmV3IGZpbGUuIFN0dWJzIGZvciBpbnQzZC4KClN1biBOb3YgMTYgMTI6MzA6MDAgUFNUIDE5OTcgIEphc29uIFNjaG9uYmVyZyAgPHNjaG9uQG10aS5zZ2kuY29tPgoKCSogW2luY2x1ZGUvYXNwaS5oXQoJQ2hhbmdlZCBjb21tZW50IHN0eWxlIGZyb20gQysrIHRvIEMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBOb3YgMTYgMDc6NDI6NDQgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXSBbd2luZG93cy9jbGlwYm9hcmQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglCdWcgZml4ZXMuCgoJKiBbbWlzYy9zaGVsbC5jXSBbcmVzb3VyY2VzLypdCglOZXcgIkFib3V0IiBkaWFsb2cuCgpTYXQgTm92IDE1IDE3OjMwOjE4IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbmZpZ3VyZS5pbl0gW01ha2VmaWxlLmluXQoJUmVwbGFjZWQgLS13aXRoLWxpYnJhcnkgb3B0aW9uIGJ5IC0tZGlzYWJsZS1lbXVsYXRvci4gVGhlIGRlZmF1bHQKIAlpcyBub3cgdG8gYnVpbGQgYm90aCB0aGUgbGlicmFyeSBhbmQgdGhlIGVtdWxhdG9yLgoJUmVuYW1lZCAtLXdpdGggb3B0aW9ucyB0byAtLWVuYWJsZSB0byBmb2xsb3cgYXV0b2NvbmYgZ3VpZGVsaW5lcy4KCgkqIFtsb2FkZXIvbWFpbi5jXSBbbWlzY2VtdS9tYWluLmNdIChOZXcgZmlsZSkKCVNwbGl0IGluaXRpYWxpemF0aW9uIGluIFdpbmVsaWJJbml0L0VtdWxhdG9ySW5pdC4KCgkqIFtsb2FkZXIvKi5jXQoJUmVtb3ZlZCBhbGwgcmVtYWluaW5nICNpZmRlZidzIFdJTkVMSUIuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXSBbd2luZG93cy9tZGkuY10KCUNvbnZlcnRlZCBNRElDbGllbnRXbmRQcm9jIHRvIDMyLWJpdC4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXSBbaWYxNjMyL3NpZ25hbC5jXSBbaW5jbHVkZS9zZWxlY3RvcnMuaF0KCSAgW3NjaGVkdWxlci90aHJlYWQuY10KCUNvZGUgYW5kIGRhdGEgc2VsZWN0b3IgdmFsdWVzIGFyZSBub3cgY29tcHV0ZWQgYXQgcnVuLXRpbWUuCgoJKiBbbGlicmFyeS9saWJyZXMuY10KCU1vdmVkIHRvIGxvYWRlci8gZGlyZWN0b3J5LgoKCSogW21pc2MvbWFpbi5jXSBbbWlzYy92ZXJzaW9uLmNdIChOZXcgZmlsZSkKCU1vdmVkIGFsbCB2ZXJzaW9uIHN0dWZmIHRvIHZlcnNpb24uYy4gQ2xlYW5lZCB1cCBhIGJpdC4KCgkqIFttc2Rvcy9kcG1pLmNdCglVcGRhdGUgdGhlIFJFQUxNT0RFQ0FMTCBzdHJ1Y3R1cmUgb24gcmV0dXJuIGZyb20gcmVhbC1tb2RlCglpbnRlcnJ1cHQuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9rZXlib2FyZC5jXQoJQ2hhbmdlZCB0aGUgd2F5IGV2ZW50IGNvb3JkaW5hdGVzIGFyZSBkZXRlcm1pbmVkLiBEb24ndCByZWx5IG9uCgl0aGUgQ29uZmlndXJlTm90aWZ5IGV2ZW50IHZhbHVlcy4gVGhpcyBzaG91bGQgZml4IGFsbCBwcm9ibGVtcwoJd2l0aCBjdXJzb3IgcG9zaXRpb24gaW4gLWRlc2t0b3AgYW5kIC1tYW5hZ2VkIG1vZGVzLgoKU2F0IE5vdiAxNSAxNjowOTozNiAxOTk3ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJKEJVVFRPTl9DaGVja0F1dG9SYWRpb0J1dHRvbik6IFByZXZlbnQgcG9zc2libGUgZW5kbGVzcyBsb29wLgoKV2VkIE5vdiAxMiAwMzo0Mjo0NSAxOTk3ICBDaHJpcyBGYWhlcnR5IDxjaHJpc2ZAYW1lcmljYS5jb20+CgoJKiBbbWlzYy92ZXIuY10KCUNoYW5nZWQgVmVySW5zdGFsbDMyQSB0byBhc3N1bWUgc3JjZGlyIGFzIGRlc3RpbmF0aW9uIGlmIGRlc3RkaXIKCWlzIGJsYW5rLiAgVGhpcyB3YXMgY2F1c2luZyBhbG90IG9mIERMTCBpbnN0YWxsYXRpb24gaW50byBTWVNURU0KCWRpcmVjdG9yeSB0byBmYWlsLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTkVfTG9hZFNlZ21lbnQgYnVmZmVyWzEwMF0gd2FzIHRvbyBzbWFsbCBhbmQgZ2V0dGluZyBvdmVycnVucy4KCUNoYW5nZWQgaXQgdG8gYnVmZmVyWzIwMF0uCgpTYXQgTm92ICA4IDA2OjA5OjU3IDE5OTcgIExlbiBXaGl0ZSA8cGhyZWFrQGNnb2NhYmxlLm5ldD4KCgkqIFttaXNjL2RkZW1sLmNdIFtpbmNsdWRlL2RkZW1sLmhdIFtpZjE2MzIvZGRlbWwuc3BlY10KCUFkZGVkIHN0dWIgZnVuY3Rpb25zIERkZUNvbm5lY3RMaXN0KCksIERkZVF1ZXJ5TmV4dFNlcnZlcigpLAoJRGRlRGlzY29ubmVjdExpc3QoKSwgRGRlU2V0VXNlckhhbmRsZSgpLCBEZGVBYmFuZG9uVHJhbnNhY3Rpb24oKSwKCURkZVBvc3RBZHZpc2UoKSwgRGRlQ3JlYXRlRGF0YUhhbmRsZSgpLCBEZGVBZGREYXRhKCksIERkZUdldERhdGEoKSwKCURkZUFjY2Vzc0RhdGEoKSwgRGRlVW5hY2Nlc3NEYXRhKCksIERkZUVuYWJsZUNhbGxiYWNrKCksCglEZGVDbXBTdHJpbmdIYW5kbGVzKCkuCgpGcmkgTm92ICA3IDE5OjQ0OjI2IDE5OTcgIE9sYWYgRmxlYmJlICA8by5mbGViYmVAc2NpZW5jZS1jb21wdXRpbmcuZGU+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglGaXggdHlwbyBpbiBkaXJlY3RvcnkuYyBbYnJva2UgbG9hZGluZyBvZiBjZHBsYXllciBvbiBudDQwXQoKCSogW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50ZWQgLXdpbnZlciBudDQwLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbdXNlcjMyLnNwZWNdCglTdHVicyBmb3IgQ29weUFjY2VsZXJhdG9yVGFibGUsIERlc3Ryb3kgQWNjZWxlcmF0b3JUYWJsZS4KClRodSBOb3YgIDYgMjI6Mzc6MDQgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJKEdldERpc2tGcmVlU3BhY2UzMkEpOiBDYXAgYXQgMkdCLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJUHJvdG90eXBlIERyYXdJY29uRXggYW5kIENyZWF0ZURJQlNlY3Rpb24zMi4KCURlZmluZSBPQk1fUkFESU9DSEVDSy4KCUFkZCBESV8qIG1hY3Jvcy4KCgkqIFtvYmplY3RzL2RpYi5jXSBbaWYxNjMyL2dkaS5zcGVjXQoJQ3JlYXRlRElCU2VjdGlvbiBpcyBhIFdJTkFQSS4gIFJlbmFtZWQgdG8gQ3JlYXRlRElCU2VjdGlvbjMyLgoJSW1wbGVtZW50IENyZWF0ZURJQlNlY3Rpb24xNi4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkIERyYXdJY29uRXguCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCgkoQ29weUljb24zMik6IEZpeCBib2d1cyBpbXBsZW1lbnRhdGlvbi4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJKENvcHlCaXRtYXAzMik6IE5ldyBmdW5jdGlvbi4KCShDb3B5SW1hZ2UzMik6IERvIGJpdG1hcHMuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3RleHQuY10KCShYMTFEUlZfRXh0VGV4dE91dCk6IENoYW5nZSBhc2NlbnQgYW5kIGRlc2NlbnQgZGVmYXVsdCB0byBhdm9pZAoJemVyby10aGlua25lc3Mgb3ZlcnN0cmlrZSBsaW5lLgoKCSogW2luY2x1ZGUvZGVidWdzdHIuaF0gW21pc2MvZGVidWdzdHIuY10KCU5ldyBmaWxlcy4KCgkqIFttc2Rvcy9kcG1pLmNdCglEb24ndCBwcm90b3R5cGUgZG9fbXNjZGV4LiBJbiBJTlRfSW50MzFIYW5kbGVyLCBoYW5kbGUgcmVhbC1tb2RlCglpbnQgMHgyMSwgYWg9MHg1Mi4KCgkqIFttc2Rvcy9pbnQyZi5jXQoJQWRkIGR1bW15cyBmb3IgMHgxNjgxIGFuZCAweDE2ODIuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJRml4IG1lbW9yeSBsZWFrcyBpbiBSZWdEZWxldGVLZXkzMlcuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglJbiBURVhUX05leHRMaW5lLCBmaXggYW5vdGhlciBvZmYtYnktb25lIGJ1Zy4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2JtX3JhZGlvY2hlY2tdCglOZXcgZmlsZS4gIChJdCBhIHNtYWxsIGNpcmNsZSB1c2VkIHRvIHJhZGlvLWJ1dHRvbiBtZW51IGl0ZW1zCgl3aGVuIHNlbGVjdGVkLikKCQoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUFkZCBvYm1fcmFkaW9jaGVjay4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2lmMTYzMi91c2VyMzIuc3BlY10gW2NvbnRyb2xzL21lbnUuY10KCSAgW2lmMTYzMi91c2VyLnNwZWNdCglEZWZpbmUgQ2hlY2tNZW51UmFkaW9JdGVtezE2LDMyfS4gIERlZmluZSBHZXRNZW51SXRlbVJlY3R7MTYsMzJ9LgoKV2VkIE5vdiAgNSAxMTozMDoxNCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCSogW21pc2MvbWFpbi5jXQoJQXV0byBhZGp1c3QgdmVyc2lvbnMgZGVwZW5kaW5nIG9uIGJpbmFyeS4KClR1ZSBOb3YgIDQgMTU6MjE6MDAgMTk5NyAgS3Jpc3RpYW4gTmllbHNlbiAgPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJUGFpbnQgZnVsbCBiYWNrZ3JvdW5kIGluIGxpc3Rib3ggaXRlbXMgd2l0aCB0YWIgc3RvcHMgZW5hYmxlZC4KCgkqIFtpZjE2MzIvdGh1bmsuY10KCUNvcHkgc29tZSBtb3JlIG1lc3NhZ2UgcGFyYW1ldGVyIHN0cnVjdHVyZXMgKERSQVdJVEVNU1RSVUNUMTYsCglDT01QQVJFSVRFTVNUUlVDVDE2KSB0byB0aGUgc3RhY2sgc2VnbWVudCB0byBmaXggYnJva2VuIHByb2dyYW1zCgl0aGF0IG5lZWQgdGhpcy4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJT25seSBjbGlwIHNpYmxpbmcgd2luZG93cyB3aGVuIHRoZSBwYXJlbnQgaGFzIHRoZSBXU19DTElQU0lCTElOR1MKCXN0eWxlIHNldC4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdCglNYWtlIG9yZGVyIG9mIGV2ZW50cyBpbiBGT0NVU19Td2l0Y2hGb2N1cygpIHJlZmxlY3QgQVBJIGRvY3MuCgoJKiBbd2luZG93cy9kZWZkbGcuY10KCUZpeCBwcm9ibGVtIHdpdGggbG9zcyBvZiBmb2N1cyBpbiBzb21lIGRpYWxvZ3MuCgoJKiBbd2luMzIvY29kZV9wYWdlLmNdCglGaXggcmV0dXJuIHZhbHVlIGZvciBNdWx0aUJ5dGVUb1dpZGVDaGFyKCkuCgoJKiBbQlVHU10KCUJDVyBub3cgd29ya3MuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBPY3QgMzAgMjE6NTI6MjMgMTk5NyAgTWFydGluIEJvZWhtZSA8Ym9laG1lQGluZm9ybWF0aWsubXUtbHVlYmVjay5kZT4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQ2hhbmdlZCBOQ19UcmFja1N5c01lbnUgdG8gZ2l2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgTVMtV2luZG93cywKCWkuZS4gc3lzdGVtIG1lbnUgYWxyZWFkeSBhcHBlYXJzIHdoZW4gbW91c2UgYnV0dG9uIGlzIGRlcHJlc3NlZC4KCUNoYW5nZWQgTkNfSGFuZGxlTkNMQnV0dG9uRGJsQ2xrIHNvIHRoYXQgZG91YmxlIGNsaWNrcyBvbiBzY3JvbGwKCWJhciBhcnJvd3MgYXJlIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIHNpbmdsZSBjbGlja3MuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUZpeGVkIFNldFdpbmRvd1BvczMyIHRvIGNsZWFyIFdJTl9OT19SRURSQVcgd2hlbiBTV1BfU0hPV1dJTkRPVyBpcwoJc2V0OyB0aGlzIGlzIHRoZSB3YXkgTVMtV2luZG93cyBiZWhhdmVzLgoKVGh1IE9jdCAzMCAyMTowODo1NyAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2NvbnRyb2xzL3N0YXR1cy5jXQoJSW4gU1dfU2V0VGV4dCwgZml4IGNvbmRpdGlvbiwgSSBob3BlLgoKCSogW2NvbnRyb2xzL21lbnUuY10KIAkoR2V0TWVudVN0YXRlMzIpOiBEb24ndCBtYXNrIHJldHVybiB2YWx1ZS4gUHJpbnQgbW9yZSBkZWJ1ZyBpbmZvLgoJKE1FTlVfTWVudUJhckNhbGNTaXplKTogQmUgbW9yZSBjYXJlZnVsIHdoZW4gcHJpbnRpbmcgZGVidWcKCWluZm9ybWF0aW9uLgoJKE1FTlVfU2V0SXRlbURhdGEpOiBFbXB0eSBzdHJpbmdzIGFyZSBzZXBhcmF0b3JzLgoKCSogW2dyYXBoaWNzL3gxMWRydi90ZXh0LmNdCglEb24ndCBwcm90b3R5cGUgQ0xJUFBJTkdfSW50ZXJzZWN0Q2xpcFJlY3QuCgoJKiBbaW5jbHVkZS9kYy5oXQoJUHJvdG90eXBlIENMSVBQSU5HX0ludGVyc2VjdENsaXBSZWN0LgoKCSogW29iamVjdHMvZm9udC5jXQoJUmVtb3ZlIG5vbi1wb3J0YWJsZSAoYW5kIGZhdWx0eSkgc21hcnRuZXNzIGluIEZPTlRfVGV4dE1ldHJpYyp0byouCglJbiBDcmVhdGVGb250MzJXIGFuZCBDcmVhdGVGb250MTYsIGhhbmRsZSBudWxsIGZvbnQgbmFtZS4KCgkqIFtvYmplY3RzL3RleHQuY10KIAkoVEVYVF9OZXh0TGluZSk6IEZpeCBlbmQtb2YtbGluZSBidWcuCgoJKiBbaWYxNjMyL3NoZWxsMzIuc3BlY10KCUFjdGl2YXRlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uIG9mIEV4dHJhY3RJY29uQS4KCgkqIFttaXNjL3NoZWxsLmNdCglGb3IgQ29udHJvbF9SdW5ETEwsIGFkZCB0eXBlcyBmb3IgcGFyYW1ldGVycy4KClRodSBPY3QgMzAgMTQ6NTQ6MTEgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbY29udHJvbHMvc3RhdGljLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21pc2Mvc3B5LmNdCglBZGRlZCBzb21lIHdpbjMyIGRlZmluZXMgdG8gc3RhdGljIGNvbnRyb2xzLCBiYXNpYyBTU19CSVRNQVAgc3R5bGUKCWhhbmRsaW5nIGltcGxlbWVudGVkLiBbcGxlYXNlIGFkZCBtb3JlLCBJIGFtIGxhY2tpbmcga25vd2xlZGdlIGFuZAoJdGltZV0KCgkqIFtjb250cm9scy9zdGF0dXMuY10KCXBhcnRfbnVtIDI1NSBzZWVtcyB0byBpbmRpY2F0ZSB3aG9sZSBzdGF0dXNsaW5lICh3aW45NSBjZHBsYXllci5leGUpCgoJKiBbaWYxNjMyL3RodW5rLmNdIFt0b29scy9idWlsZC5jXQoJU3VwcG9ydCBscmV0IGFuZCAweDY2IGxyZXQgY2FsbHMgZm9yIENhbGxUbzE2X3JlZ3MKCShuZWVkZWQgZm9yIEtFUk5FTDMyXzQ1KQoJRml4ZWQgS0VSTkVMMzJfNDUsIFFUX1RodW5rIChzaG91bGQgd29yayBub3cpLgoKCSogW2lmMTYzMi9yZWxheS5jXVtpZjE2MzIvYnVpbHRpbi5jXVt0b29scy9idWlsZC5jXVtpZjE2MzIvKjMyLnNwZWNdCglBZGRlZCBzdHJpbmcgZHVtcGluZyB0byByZWxheSBkZWJ1Z2dpbmcgZm9yIHdpbjMyIGFwaWZ1bmNzLgoKCSogW21pc2MvdmVyLmNdCglGaXhlZCBhbmQgY2xlYW5lZCB1cCBWZXJRdWVyeVZhbHVlKi4KCgkqIFttdWx0aW1lZGlhLyouY11baW5jbHVkZS9tbXN5c3RlbS5oXVtpZjE2MzIvbW1zeXN0ZW0uc3BlY10KCSAgW2lmMTYzMi93aW5tbS5zcGVjXQoJV2luMzIgc3VwcG9ydCBmb3IgbG93bGV2ZWwgbXVsdGltZWRpYSBmdW5jdGlvbnMuCglBZGRlZCBzb21lIG1peGVyKiBsb3dsZXZlbCBmdW5jdGlvbnMuCglTb21lIHNtYWxsIGZpeGVzIGluIHRoZSBhdWRpbyBsb3dsZXZlbCBxdWV1ZSBoYW5kbGluZywgY29kZQoJcmVmb3JtYXR0aW5nL2NsZWFudXBzLgoKCSogW2RlYnVnZ2VyL2hhc2guY10KCURvbid0IHNob3cgZGlmZmVyZW5jZSBiZXR3ZWVuIDE2Yml0IHN5bWJvbHMgaWYgdGhleSBhcmUgaW4KCWRpZmZlcmVudCBzZWdtZW50cy4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10KCUFkZGVkIEdldEljb25JbmZvIChwYXJ0aWFsKSBhbmQgQ3JlYXRlSWNvbkluZGlyZWN0LgoKCSogW3dpbmRvd3MvbWRpLmNdCglGaXhlZCBzb21lICJiYWQgY2xhc3MiIHByb2JsZW1zIGFuZCBjcmFzaGVzIGluIE1ESUNyZWF0ZUNoaWxkLAoJd2hpY2ggaGFwcGVuIGluIFdpbjMyIChqd3AzMi5leGUpLgoKV2VkIE9jdCAyOSAwMDo1NzoyNyAxOTk3ICBCcnVjZSBNaWxuZXIgIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbaWYxNjMyL3dpbmFzcGkuc3BlY10gW21pc2MvYXNwaS5jXSBbaW5jbHVkZS9hc3BpLmNdCgkgIFtkb2N1bWVudGF0aW9uL2FzcGldIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCBzdXBwb3J0IGZvciAxNiBiaXQgQVNQSSBjYWxscyB0byBsaW51eCBnZW5lcmljIFNDU0kuCglUaGUgc3VwcG9ydCBpcyBub3QgY29tcGxldGUsIGJ1dCBhcHBlYXJzIHRvIHJ1biBteSBNdXN0ZWsKCXNjYW5uZXIgZnJvbSB3aXRoaW4gaXBwbHVzLmV4ZS4KCk1vbiBPY3QgMjcgMDA6NTk6NDEgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2RjZS5jXQoJREMgcmV1c2UgZnJhbWV3b3JrLgoKU3VuIE9jdCAyNiAxODo0MToyMSAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQoJU3Vic3RpdHV0ZWQgZm9udHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYWxpYXMgdGFibGUuIFJlZmVyZW5jZXMgdG8KCXRoZSBvbGQgbmFtZSBhcmUgYWxzbyB1cGRhdGVkLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglMQl9TRUxFQ1RTVFJJTkczMiBub3QgQ0JfU0VMRUNUU1RSSU5HMzIgc2hvdWxkIGJlIHNlbnQgdG8KCUNvbWJvTEJveC4KClN1biBPY3QgMjYgMTQ6MjU6MDAgMTk5NyAgTmlraXRhIFYuIFlvdXNoY2hlbmtvIDx5b3VzaEBjcy5tc3Uuc3U+CgoJKiBbaW5jbHVkZS9kcml2ZS5oXSBbZmlsZXMvZHJpdmUuY10gW21zZG9zL2ludDIxLmNdCglQYXJ0aWFsbHkgaW1wbGVtZW50ZWQgRE9TIGRyaXZlIG1hcHBpbmcgKGludDIxIEFYPTQ0MEYpLgoKU2F0IE9jdCAyNSAxMzowMzoyOSAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJU3VwcG9ydCAnLicgaW4gaWRlbnRpZmllcnMuIFVzZSAieCAuIHkiIHRvIGFjY2VzcyBzdHJ1Y3R1cmUKCWZpZWxkcy4KCgkqIFtkZWJ1Z2dlci9oYXNoLmNdIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUxvYWQgZW50cnkgcG9pbnRzIG9mIFdpbjMyIG1vZHVsZXMgb25seSB3aGVuIGVudGVyaW5nIHRoZQoJZGVidWdnZXIuCgoJKiBbZGVidWdnZXIvYnJlYWsuY10KCU5ldyBmdW5jdGlvbiBERUJVR19BZGRNb2R1bGVCcmVha3BvaW50KCkgdG8gc2V0IGEgYnJlYWtwb2ludCBhdAoJdGhlIHN0YXJ0IG9mIGV2ZXJ5IG1vZHVsZS4KCgkqIFtmaWxlcy9maWxlLmNdCglGSUxFX21tYXAoKSBjYW4gbm93IGZha2UgbW1hcCgpIGZvciB1bmFsaWduZWQgb2Zmc2V0cyBvciBicm9rZW4KCWZpbGVzeXN0ZW1zLgoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0gW21pc2MvY2FsbGJhY2suY10gW2lmMTYzMi90aHVuay5jXQoJVXNlIGEgdGFibGUgb2YgY2FsbGJhY2tzIGluc3RlYWQgb2YgbWFjcm9zIHRvIGRpZmZlcmVudGlhdGUKCWJldHdlZW4gZW11bGF0b3IgYW5kIFdpbmVsaWIuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUluaXRpYWxpemUgY3VycmVudCBkaXJlY3RvcnkgZnJvbSBjd2QsIG5vdCBmcm9tIG1vZHVsZSBwYXRoLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglSZWFkIENhbGxUbzE2IHByb3RvdHlwZXMgZGlyZWN0bHkgZnJvbSB0aHVuay5jIHNvdXJjZSBmaWxlLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy9tZGkuY10KCUFkZGVkIHRyYW5zbGF0aW9uIGZvciBXTV9NRElBQ1RJVkFURSBhbmQgV01fTURJR0VUQUNUSVZFLgoKRnJpIE9jdCAyNCAyMTo0MToyNSAxOTk3ICBVd2UgQm9ubmVzICA8Ym9uQGVsZWt0cm9uLmlrcC50dS1kYXJtc3RhZHQuZGU+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUFsbG93IGFyZ3VtZW50cyBsaWtlICJhIiBmb3IgdGhlIGRyaXZlIHJlbGF0ZWQgYXBpcy4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglLZWVwIHRoZSBjYWxjdWxhdGlvbiBmb3IgZHdNZW1vcnlMb2FkIGluIHJhbmdlLgoKCSogW21pc2MvY3J0ZGxsLmNdCglNYWtlIENSVERMTF9nZXRjd2QgdXNlIEdldEN1cnJlbnREaXJlY3RvcnkzMkEgYW5kIGFsbG9jCglpdHMgbWVtb3J5IGlmIHJlcXVlc3RlZC4KCUltcGxlbWVudGVkIENSVERMTF9yZW5hbWUgYW5kIENSVERMTF9zdGF0IG5lZWRlZCBmb3IKCWxjYy13aW4zMjp3ZWRpdC5leGUuCglJbXBsZW1lbnRlZCBDUlRETExfX2Z1bGxwYXRoLgoKCSogW21pc2MvY29tbS5jXQoJSGlnaCBzcGVlZCBtb2RlcyBmb3IgdGhlIDE2LWJpdCBtb2RlIENvbW0gZnVuY3Rpb25zLgoKCSogW21pc2MvY3B1LmNdCglBcyBhcHBsaWNhdGlvbnMgbWF5IHRyZWF0IGxwTWF4aW11bUFwcGxpY2F0aW9uQWRkcmVzcyBhcyBsb25nLAoJdXNlIGEgdmFsaWQgbG9uZyBudW1iZXIuCgoJKiBbbWlzYy9tYWluLmNdCglJbiBTeXN0ZW1QYXJhbWV0ZXJzSW5mbzE2IGlnbm9yZSBTUElfR0VUSElHSENPTlRSQVNUIHRvby4KCgkqIFttaXNjL29sZTJubHMuY10KCUltcGxlbWVudCBMQ01BUF9VUFBFUkNBU0UgZm9yIExDTWFwU3RyaW5nMzIuCgoJKiBbbWlzYy93c3ByaW50Zl0KCU1hZGUgV1BSSU5URl9QYXJzZUZvcm1hdEEgdW5kZXJzdGFuZCAld3MuCgoJKiBbd2luMzIvZmlsZS5jXQoJSWdub3JlIEZJTEVfQVRUUklCVVRFX05PUk1BTC4KCVN0dWIgZm9yIFJlYWRGaWxlRXguCgpGcmkgT2N0IDI0IDE1OjM2OjAyIDE5OTcgIERvdWcgUmlkZ3dheSA8cmlkZ3dheUByb3V0aC51Y3NkLmVkdT4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUxvY2FsIGhlYXAgZXhoYXVzdGlvbiBtZXNzYWdlIG5vdyBwcmludHMgd2hpY2ggYnVpbHRpbiBoZWFwIGZpbGxlZC4KCkZyaSBPY3QgMjQgMDA6NDY6MzQgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJUmV2ZXJzZWQgQ3JlYXRlRm9udDE2LzMyVyB0eXBvLgoKVGh1IE9jdCAyMyAyMzo0NDoyMCAxOTk3ICBLcmlzdGlhbiBOaWVsc2VuICA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KCgkqIFtpZjE2MzIvdXNlci5zcGVjXQoJRml4ZWQgYXJndW1lbnQgbGlzdCBmb3IgQ2hhbmdlQ2xpcGJvYXJkQ2hhaW4uCgoJKiBbd2luZG93cy9tZGkuY10KCVBhc3MgY29ycmVjdCBoSW5zdGFuY2UgdG8gQ3JlYXRlV2luZG93MTYoKSBpbiBNRElDcmVhdGVDaGlsZCgpLgoKTW9uIE9jdCAyMCAxMTo1MToyNCAxOTk3ICBDYXJzdGVuIEZhbGxlc2VuIDxjZkBpdC5kdHUuZGs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgTUVUQV9TRVRURVhUQ0hBUkVYVFJBLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglGaXhlZCBjcmFzaCBpbiBYUG9seWdvblJlZ2lvbiBpZiB0aGVyZSBpcyBvbmx5IG9uZSBwb2ludCBpbiAKCWluIHRoZSByZWdpb24uCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdW2luY2x1ZGUvZ2RpLmhdW2luY2x1ZGUvd2luZG93cy5oXQoJICBbb2JqZWN0cy9nZGlvYmouY10KCUNvbXBsZXRlZCBPQkpfWFhYIGRlZmluZXMgaW4gZ2RpLmgsIHJlbW92ZWQgT0JKX1hYWCBpbiBnZGlvYmouYyAKCWFuZCBpbmNsdWRlZCBnZGkuaCBpbnN0ZWFkLiBJbXBsZW1lbnRlZCBHZXRPYmplY3RUeXBlMzIoKS4KClRodSBPY3QgMTYgMTc6MjE6MzIgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10KCUZpeGVkIFdJTjMyIGFuZCBNYWtlZmlsZXMgZW50cmllcyBvZiBSZWZlcmVuY2UgbWFudWFsIG5vZGUsIHRoYXQKCW1hZGUgbWFrZWluZm8gZHVtcCBjb3JlLgoKTW9uIE9jdCAxMyAxNzoxNTo1NyAxOTk3ICBSb2JlcnQgV2lsaGVsbSAgPHJvYmVydEBwaHlzaW9sLm1lZC50dS1tdWVuY2hlbi5kZT4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBtaXNzaW5nIG1hdGggZnVuY3Rpb25zIHkwKCksIHkxKCksIHkyKCksIGZsb29yKCksIGZyZXhwKCksCglsZGV4cCgpLCBtb2RmKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMTIgMTU6MDM6MDEgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbaWYxNjMyL2J1aWx0aW4uY10gW2lmMTYzMi9yZWxheS5jXQoJUmVsYXkgZGVidWdnaW5nIGVudHJ5IHBvaW50cyBhcmUgbm93IGdlbmVyYXRlZCBvbiB0aGUgZmx5IGZvcgoJV2luMzIgRExMcy4KCgkqIFtpbmNsdWRlL3N0YWNrZnJhbWUuaF0KCUFkZGVkIFZBX0xJU1QxNiB0eXBlIGFuZCBtYWNyb3MgdG8gYWNjZXNzIGFyZ3VtZW50cyBvbiB0aGUgMTYtYml0CglzdGFjay4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglGaXhlZCBHbG9iYWxIYW5kbGUzMiB0byB3b3JrIHdpdGggZml4ZWQgYmxvY2tzLgoKCSogW21pc2MvZGRlbWwuY10gKE5ldyBmaWxlKQoJQWRkZWQgYSBsb3Qgb2Ygc3R1YnMgZm9yIERERU1MIGZ1bmN0aW9ucy4KCgkqIFtvYmplY3RzL2RjLmNdCglBZGRlZCBHZXQvU2V0R3JhcGhpY3NNb2RlKCkuCgoJKiBbb2JqZWN0cy9nZGlvYmouY10gW3dpbmRvd3Mvd2lucG9zLmNdCglBZGRlZCBhIGZldyBzdHVicy4KCgkqIFt0b29scy9idWlsZC5jXQoJUmVtb3ZlZCAnYnl0ZScsICd3b3JkJywgJ2xvbmcnIGFuZCAncmV0dXJuJyBlbnRyeSBwb2ludHMgZm9yIFdpbjMyLgoJJ3JlZ2lzdGVyJyBmdW5jdGlvbnMgY2FuIG5vIGxvbmdlciB0YWtlIGFyZ3VtZW50cyBpbiBXaW4zMi4KIAlUaGUgV2luMzIgTkUgbW9kdWxlIGlzIG5vdyBnZW5lcmF0ZWQgYnkgTU9EVUxFX0NyZWF0ZUR1bW15TW9kdWxlLgoJQ2FsbEZyb20zMiBjYWxsYmFja3MgcmVtb3ZlZCBleGNlcHQgZm9yIHJlZ2lzdGVyIGZ1bmN0aW9ucy4KCkZyaSBPY3QgMTAgMTg6MjI6MTggMTk5NyAgSm9obiBIYXJ2ZXkgPGpvaG5AZGl2aXNpb24uY28udWs+CgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvTWFrZWZpbGUuaW5dIFtncmFwaGljcy93aW4xNmRydi9icnVzaC5jXQoJICBbZ3JhcGhpY3Mvd2luMTZkcnYvZ3JhcGhpY3MuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCSAgW2dyYXBoaWNzL3dpbjE2ZHJ2L29iamVjdHMuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L3Blbi5jXQoJICBbZ3JhcGhpY3Mvd2luMTZkcnYvcHJ0ZHJ2LmNdIFtncmFwaGljcy93aW4xNmRydi90ZXh0LmNdCgkgIFtpbmNsdWRlL2NhbGxiYWNrLmhdIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCglBZGRlZCBzdXBwb3J0IGZvciBwZW5zIGFuZCBicnVzaGVzIGluIFNlbGVjdE9iamVjdC4gQWRkZWQgc3VwcG9ydAoJZm9yIExpbmVUbywgTW92ZVRvRXgsIFBhdEJsdCAodmVyeSBwcmVsaW1pbmFyeSksIFBvbHlnb24gYW5kCglSZWN0YW5nbGUuIFRleHQgaXMgZHJhd24gaW4gdGhlIGNvcnJlY3QgcGxhY2UgbW9yZSBvZnRlbi4gVGhlc2UKCWNoYW5nZXMgbWF5IG9ubHkgd29yayB3aXRoIHRoZSBXaW5kb3dzIFBvc3RzY3JpcHQgZHJpdmVyIHNpbmNlCgltYW55IG90aGVyIGRyaXZlcnMgbm93IG5lZWQgbW9yZSBHREkgc3VwcG9ydC4KClR1ZSBPY3QgIDcgMjE6MDY6MjMgMTk5NyAgS3Jpc3RpYW4gTmllbHNlbiAgPGtyaXN0aWFuLm5pZWxzZW5Acmlzb2UuZGs+CgoJKiBbZGVidWdnZXIvZXhwci5jXQoJRml4ZWQgdHlwbyBmb3IgdGhlID4+IG9wZXJhdG9yLgoKCSogW2xvYWRlci90YXNrLmNdCglGaXhlZCBTd2l0Y2hTdGFja1RvKCk7IGl0IHVzZWQgdG8gcmV0dXJuIHdpdGggdGhlIG5ldyBzdGFjayBwbGFjZWQKCWZvdXIgYnl0ZXMgdG9vIGhpZ2ggaW4gbWVtb3J5LgoKCSogW2xvYWRlci9uZV9yZXNvdXJjZS5jXQoJUmVtb3ZlZCBwcm9ibGVtYXRpYyBuYW1ldGFibGUgY29kZSBpbnRyb2R1Y2VkIGluIFdpbmUgOTcwOTE0LgoKVHVlIE9jdCAgNyAwMjoyNDoxMiAxOTk3ICBEaW1pdHJpZSBPLiBQYXVuICA8ZGltaUBjcy50b3JvbnRvLmVkdT4KCgkqIFtjb250cm9scy9jb21tY3RybC5jXQoJQWRkZWQgdGhpcyBmaWxlcyB0byBob2xkIGZ1bmN0aW9ucyBmcm9tIHRoZSBjb21jdGwzMi5kbGwKCUFkZGVkIHRvIHRoaXMgZmlsZXMgc29tZSBmdW5jdGlvbnMgc2NhdHRlcmVkIGluIGRpZmZlcmVudCBwbGFjZXMKCShzdWNoIGFzIEluaXRDb21tb25Db250cm9scykgYW5kIGFkZGVkIHNvbWUgbmV3IG9uZXMgYXMgd2VsbC4KCgkqIFtpbmNsdWRlL3N5c2NvbG9yLmhdIFt3aW5kb3dzL3N5c2NvbG9yLmNdCglBZGRlZCBwcm9wZXIgZW50cmllcyBmb3IgYWxsIHBvc3NpYmxlIENPTE9SXyogdmFsdWVzLgoKCSogW29iamVjdHMvYnJ1c2guY10KCU1vZGlmaWVkIEdldFN5c0NvbG9yQnJ1c2ggdG8gcmV0dXJuIHRoZSBjb3JyZWN0IGJydXNoIGZvciAKCWFsbCBwb3NzaWJsZSBDT0xPUl8qIGNvbnN0YW50cy4KClNhdCBPY3QgIDQgMjM6MzU6MjAgMTk5NyAgVS5Cb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbd2luMzIvZW52aXJvbm1lbnQuY10KCUFub3RoZXIgYXBwcm9hY2ggdG8gZ2V0IGFjY2VzcyB0byBhbiB1bnJlc3RyaWN0ZWQgY29tbWFuZGxpbmUuCgoJKiBbbWlzYy9jcnRkbGwuY10KCU1ha2UgZmNsb3NlIHdvcmsgYWdhaW4uCgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXQoJVXNlIHNwcmludGYgZm9yIGNydGRsbC1zcHJpbnRmIGFnYWluIGFzIGUuZy4gJWcgaXMgbm90IGF2YWlsYWJsZQoJZm9yIHdzcHJpbnRmLgoKCSogW21pc2Mvd3NwcmludGYuY10KCU1ha2UgV1BSX1NUUklORyB3b3JrIGluIG1vcmUgc2l0dWF0aW9ucy4KCUFkZGVkIGRlYnVnIG91dHB1dCBmb3IgdGhlIHdzcHJpbnRmIGZ1bmN0aW9ucy4KCgkqIFttaXNjL2NydGRsbC5jXSBbbWlzYy9tYWluLmNdCglVc2UgYXJndlswXSBhcyBjb21hbmQgd2l0aCBDUlRETExfc3lzdGVtLgoKRnJpIE9jdCAgMyAxNDowMDoyOSBNRVQgRFNUIDE5OTcgIEphbiBXaWxsYW1vd2l1cyAgPGphbkBqYW5oaC5zaG5ldC5vcmc+CgoJKiBbKi8qXQogICAgICAgIFJlbW92ZWQgc29tZSBjb21waWxlciB3YXJuaW5ncy4KCgkqIFttc2Rvcy9pbnQxNS5jXQogICAgICAgIE5ldyBJTlQgMTUgaGFuZGxlci4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IFNlcCAyNyAxMjozNjo1NiAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtpZjE2MzIvcmVsYXkuY10KCU1hZGUgQ2F0Y2ggYW5kIFRocm93IGFsc28gc2F2ZSAlc2kgYW5kICVkaSAodW50ZXN0ZWQpLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXQoJQWRkZWQgY2hlY2sgZm9yICVmcyBhbmQgJWdzIGluIFNFTEVDVE9SX0ZyZWVCbG9jay4KCgkqIFtyYy93aW5lcmMuY10KCUdlbmVyYXRlZCBmaWxlcyBubyBsb25nZXIgZGVwZW5kIG9uIFdpbmUgaW5jbHVkZXMuCglNYWRlIC5oIGdlbmVyYXRpb24gb3B0aW9uYWwuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2xvYWRlci90YXNrLmNdCglBZGRlZCBDQUxMMzJfSW5pdCBmdW5jdGlvbi4KCUFkZGVkIHBvc3NpYmlsaXR5IHRvIHBhc3MgYXJndW1lbnRzIHdoZW4gdXNpbmcgQ0FMTFRPMTZfcmVnc18uCgkzMi1iaXQgc3RhY2sgcG9pbnRlciBpcyBub3cgc2F2ZWQgb24gdGhlIDE2LWJpdCBzdGFjaywgaW5zdGVhZCBvZgoJdXNpbmcgSUYxNjMyX1NhdmVkMzJfZXNwLgoJUmVtb3ZlZCBDYWxsVG8zMiBjYWxsYmFja3MuCgoJKiBbdG9vbHMvbWFrZWRlcC5jXSBbKi9NYWtlZmlsZS5pbl0KCUFkZGVkIHN1cHBvcnQgZm9yIGRpcmVjdGx5IGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGZvciAueSwgLmwgYW5kCgkucmMgZmlsZXMuIE1vZGlmaWVkIHRoZSBtYWtlZmlsZXMgdG8gdXNlIHRoaXMgZmVhdHVyZS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW2lmMTYzMi90aHVuay5jXQoJVXNlIENBTExUTzE2X3JlZ3MgdG8gY2FsbCB3aW5kb3cgcHJvY2VkdXJlcy4KClRodSBTZXAgMjUgMTI6MTg6NTcgMTk5NyAgS3Jpc3RpYW4gTmllbHNlbiA8a3Jpc3RpYW4ubmllbHNlbkByaXNvZS5kaz4KCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglDaGFuZ2VkIGVudHJ5IGZvciBTd2l0Y2hTdGFja0JhY2sgdG8gcmVtb3ZlIGFyZ3VtZW50cyBmcm9tIHN0YWNrCgl1cG9uIHJldHVybiAoYXJndW1lbnRzIGxlZnQgb3ZlciBmcm9tIHByZXZpb3VzIFN3aXRjaFN0YWNrVG8oKSkuCglCb3JsYW5kIEMrKyA0LjAgbm93IGNvbXBpbGVzICJIZWxsbyBXb3JsZCIgKGJ1dCBjcmFzaGVzIGFmdGVyCglvdXRwdXR0aW5nIHRoZSAuZXhlKS4KCldlZCBTZXAgMjQgMTM6NTQ6NDQgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglTZWFyY2hQYXRoIG1pZ2h0IGdldCBOVUxMIGJ1ZmZlciAoZW1wdHkgTFJVIGxpc3QgaW4gd29yZHBhZCkuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglBZGRlZCBTVW5NYXBMUyouCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglCZSBhYmxlIHRvIHJ1biBleGVjdXRlYWJsZXMgZnJvbSBub24gbW1hcCgpYmxlIGZpbGVzeXN0ZW1zLgoJUEVfTG9hZExpYnJhcnkgYWRkcyBsaWJyYXJ5cyBsb2FkZWQgYnkgYW5vdGhlciBwcm9jZXNzIHRvCglpdHMgb3duIG1vZHJlZiBsaXN0IHRvby4KCgkqIFt3aW5kb3dzL2tleWJvYXJkLmNdW2luY2x1ZGUvYWNjZWwuaF1bbG9hZGVyL3Jlc291cmNlLmNdCglGaXhlZCBhY2NlbGVyYXRvciBsZWFrYWdlLCB1c2UgU0RLIGRlZmluZXMvbmFtZXMuCgoJKiBbZ3JhcGhpY3MvZW52LmNdW21pc2MvbWFpbi5jXQoJU2V0L0dldEVudmlyb25lbW50IGhhdmUgbm90aGluZyB0byBkbyB3aXRoIGVudmlyb25tZW50IHZhcnMsCglidXQgd2l0aCBQcmludGVyIEVudmlyb25tZW50LgoKCSogW2dyYXBoaWNzL2VzY2FwZS5jXQoJRXNjYXBlMzI6IG1hcCBhcmdzIGJhY2sgdG8gc2VnbWVudGVkIHBvaW50ZXJzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglXU19QT1BVUHxXU19DSElMRCB3aW5kb3dzIGRvbid0IG5lZWQgYSBwYXJlbnQgd2luZG93IChTREspLgoKVHVlIFNlcCAxNiAxNDo0MDoxNiAxOTk3ICBSb2JlcnQgV2lsaGVsbSAgPHJvYmVydEBwaHlzaW9sLm1lZC50dS1tdWVuY2hlbi5kZT4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdIFttaXNjL2NydGRsbC5jXQoJQWRkZWQgc2lnbmFsKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClRodSBTZXAgMTEgMTg6MjQ6NTYgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtvYmplY3RzL2RjLmNdCglJbiBEQ19TZXR1cEdDRm9yUGF0Qmx0LCByZXBsYWNlIFIyX05PVCBieSBHWHhvciB3aXRoIChibGFjayB4b3Igd2hpdGUpLgoKVHVlIFNlcCAgOSAyMzowNDowMiAxOTk3ICBVLiBCb25uZXMgPGJvbkBlbGVrdHJvbi5pa3AucGh5c2lrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFttZW1vcnkvdmlydHVhbC5jXSAKCURvIG5vdCB3cml0ZSBkZWJ1Z2dpbmcgaW5mbyB1bmNvbmRpdGlvbmFsbHkgdG8gc3RkZXJyLgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUNhbGwgUFJPRklMRV9HZXRTZWN0aW9uIGluIFBST0ZJTEVfR2V0U3RyaW5nIGZvciBrZXlfbmFtZSAiIiB0b28uCgoJKiBbbWlzYy9jcnRkbGwuY10KCU1hbnkgbmV3IGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0gW3dpbmRvd3Mvd2lucG9zLmNdCglDbGllbnRUb1NjcmVlbjE2IGRvZXNuJ3QgaGF2ZSBhIHJldHVybiB2YWx1ZS4KClN1biBTZXAgIDcgMTA6MDY6MzkgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbWlzYy9tYWluLmNdIFtBVVRIT1JTXQoJVXBkYXRlIHRoZSBsaXN0IG9mIGNvbnRyaWJ1dG9ycy4gUGxlYXNlIGxldCBtZSBrbm93IGlmIEkgZm9yZ290Cglzb21lb25lLgoKCSogW2lmMTYzMi8qLnNwZWNdIFtpZjE2MzIvYnVpbHRpbi5jXSBbdG9vbHMvYnVpbGQuY10KCU9yZGluYWwgYmFzZSBmb3IgV2luMzIgRExMcyBpcyBub3cgY29tcHV0ZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZQoJbG93ZXN0IG9yZGluYWwgZm91bmQuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJV0lOQVBJIGlzIG5vdyBkZWZpbmVkIGFzIGF0dHJpYnV0ZSgoc3RkY2FsbCkpLiBUaGlzIHdpbGwgcmVxdWlyZQoJZ2NjIHRvIGNvbXBpbGUuCgoJKiBbaWYxNjMyL3RodW5rLmNdCglSZW1vdmVkIFdpbjMyIHRodW5rcyAobm8gbG9uZ2VyIG5lZWRlZCB3aXRoIHN0ZGNhbGwpLgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY10gW21pc2MvY3J0ZGxsLmNdCglNYWtlIHN1cmUgd2Ugb25seSByZWZlcmVuY2UgY2RlY2wgZnVuY3Rpb25zIGluIHRoZSBzcGVjIGZpbGUuCgoJKiBbb2JqZWN0cy9kYy5jXQoJVXNlIENhcE5vdExhc3QgZHJhd2luZyBzdHlsZSBmb3IgMS1waXhlbCB3aWRlIGxpbmVzLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCAnZG91YmxlJyBhcmd1bWVudCB0eXBlLgoJQWRkZWQgJ3ZhcmFyZ3MnIGZ1bmN0aW9uIHR5cGUgZm9yIFdpbjMyLgoJTWFkZSBDYWxsVG8xNl94eHggZnVuY3Rpb25zIHN0ZGNhbGwuCgpGcmkgU2VwICA1IDE0OjUwOjQ5IDE5OTcgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbdG9vbHMvYnVpbGQuY10gW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCU1vcmUgZml4ZXMgdG8gZ2V0IG1lc3NhZ2UgZXhjaGFuZ2UgY2xvc2VyIHRvIHRoZSBvcmlnaW5hbC4KCgkqIFttaXNjL3NweS5jXQoJTWVzc2FnZSBsb2dzIG5vdyBjb250YWluIHdpbmRvdyBuYW1lcy4KCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10gW2xvYWRlci9uZV9yZXNvdXJjZS5jXSBbbG9hZGVyL3Rhc2suY10KCSAgW29iamVjdHMvY3Vyc29yaWNvbi5jXSBbd2luZG93cy91c2VyLmNdCglBZGRlZCBzb21lIG9ic2N1cmUgZmVhdHVyZXMgdG8gZml4IG1lbW9yeSBsZWFrcy4KCkZyaSBTZXAgIDUgMDA6NDY6MjggMTk5NyAgSmFuIFdpbGxhbW93aXVzIDxqYW5AamFuaGguc2huZXQub3JnPgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbd2luMzIvbmV3Zm5zLmNdCglBZGRlZCBzdHViIGZvciBVVFJlZ2lzdGVyKCkgYW5kIFVUVW5SZWdpc3RlcigpLgoKVGh1IFNlcCAgNCAxMjowMzoxMiAxOTk3ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobXBjNDkuTGVpZGVuVW5pdi5ubD4KCSogW2NvbnRyb2xzL2VkaXQuY10KCUFsbG93IEFTQ0lJIGNvZGVzID4gMTI3IGluIFdNX0NIQVIuCgpNb24gU2VwICAxIDE3OjIzOjI0IDE5OTcgIERpbWl0cmllIE8uIFBhdW4gIDxkaW1pQG1haWwuY3MudG9yb250by5lZHU+CgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJSW4gSW5pdENvbW1vbkNvbnRyb2xzLCByZW1lbWJlciB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKCWJlY2F1c2UgbHBzekNsYXNzTmFtZSB3YXMgbWFkZSB0byBwb2ludCB0byBhIGxvY2FsIGFycmF5CglBZGRlZCB0aGUgUHJvZ3Jlc3NCYXIgdG8gdGhlIGxpc3Qgb2YgaW1wbGVtZW50ZWQgY29udHJvbHMuCglDYWxsIEluaXRDb21tb25Db250cm9scyBmcm9tIFdJREdFVFNfSW5pdCB0byByZWdpc3RlciBhbGwKCWltcGxlbWVudGVkIENvbW1vbiBDb250cm9scy4KCQoJKiBbaW5jbHVkZS9jb21tY3RybC5oXQoJQWRkZWQgbWlzYyBkZWNsIGZvciB0aGUgUHJvZ3Jlc3MgQmFyLgoKCSogW2NvbnRyb2xzL3Byb2dyZXNzLmNdIFtpbmNsdWRlL3Byb2dyZXNzLmhdCglGaXJzdCBhdHRlbXB0IGF0IGltcGxlbWVudGlvbmcgdGhlIFByb2dyZXNzIEJhciBjbGFzcy4KCgkqIFtvYmplY3RzL2JydXNoLmhdCglJbXBsZW1lbnRhdGlvbiBmb3IgR2V0U3lzQ29sb3JCcnVzaFsxNnwzMl0KCgkqIFtjb250cm9scy9zdGF0dXMuY10KCVVzZSBEcmF3RWRnZSB0byBkcmF3IHRoZSBib3JkZXJzIGFuZCBmaWxsIHRoZSBiYWNrZ3JvdW5kCgoJKiBbY29udHJvbHMvdWl0b29scy5jXQoJQWRkZWQgRHJhd0RpYWdFZGdlMzIgYW5kIERyYXdSZWN0RWRnZTMyCgoJKiBbZ3JhcGhpY3MvcGFpbnRpbmcuY10KCUltcGxlbWVudCBEcmF3RWRnZVsxNnwzMl0KCVN0YXJ0ZWQgRHJhd0ZyYW1lQ29udHJvbDMyCgpNb24gU2VwICAxIDEwOjA3OjA5IDE5OTcgIExhd3NvbiBXaGl0bmV5IDxsYXdzb25fd2hpdG5leUBqdW5vLmNvbT4KCgkqIFttaXNjL2NvbW0uY10gW2luY2x1ZGUvd2luZG93cy5oXQoJU2V0Q29tbUV2ZW50TWFzayByZXR1cm5zIGEgU0VHUFRSLgoKU3VuIEF1ZyAzMSAyMzoyODozMiAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY11bbG9hZGVyL21vZHVsZS5jXVtpbmNsdWRlL3BlX2ltYWdlLmhdCgkgIFtpbmNsdWRlL21vZHVsZS5oXQoJQ2xlYW5lZCB1cCB0aGUgd2hvbGUgV2luMzIgbGlicmFyeSBtZXNzIChhIGJpdCkuCgoJKiBbZGVidWdnZXIvc3RhYnMuY10KCUlmICd3aW5lJyBoYXMgbm8gYWJzb2x1dGUgcGF0aCBhbmQgaXNuJ3QgZm91bmQsIGNoZWNrICRQQVRIIHRvby4KCgkqIFttaXNjL29sZTJubHMuY10KCVNvbWUgZml4ZXMuCgoJKiBbbWlzYy92ZXIuY10KCUFkZGVkIHN1cHBvcnQgZm9yIFBFIHN0eWxlIHZlcnNpb24gcmVzb3VyY2VzLgoKCSogW21lbW9yeS9zdHJpbmcuY10KCUNoZWNrIGZvciBOVUxMIHBvaW50ZXJzIHRvIF9sc3RyKiBmdW5jdGlvbnMsIGp1c3QgYXMgV2luZG93czk1IGRvZXMuCgoJKiBbbXVsdGltZWRpYS90aW1lLmNdCglNYWRlIGxpc3Qgb2YgdGltZXJzIGEgc2ltcGxlIGxpbmtlZCBsaXN0LgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJTmV0c2NhcGUgMyBzZWVtcyB0byBwYXNzIE5FR0FUSVZFIHJlc291cmNlIElkcyAoaW4gYW4KCXVuc2lnbmVkIGludCwgeWVzKS4gRG9uJ3Qga25vdyB3aHksIGZpeGVkIGl0IGFueXdheS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJTG9hZEltYWdlVyBhZGRlZC4KCgkqIFtpbmNsdWRlL3dpbi5oXVt3aW5kb3dzL3dpbi5jXQoJQ2hhbmdlIHdJRG1lbnUgZnJvbSBVSU5UMTYgdG8gVUlOVDMyIGFuZCBjaGFuZ2VkIHRoZQoJU2V0V2luZG93KExvbmd8V29yZCkgYWNjb3JkaW5nbHkuCgpUaHUgQXVnIDI4IDE5OjMwOjA4IDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGQgYSBmZXcgbW9yZSBjb2xvcnMgZGVmaW5lZCBmb3IgV2luOTUuCglBZGQgYSBmZXcgbW9yZSBicnVzaCBzdHlsZXMuCgoJKiBbd2luZG93cy9zeXNjb2xvci5jXQogCUFkZCBlcnJvciBjaGVja3MgZm9yIFNZU0NPTE9SX1NldENvbG9yLCBTWVNDT0xPUl9Jbml0LAoJR2V0U3lzQ29sb3IxNiwgR2V0U3lzQ29sb3IzMi4gIEFkZCBzdXBwb3J0IGZvciBhYm92ZSBjb2xvcnMuCgpTdW4gQXVnIDI0IDE2OjIyOjU3IDE5OTcgIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglDaGFuZ2VkIG1taW9EZXNjZW5kIHRvIHVzZSBtbWlvIGZ1bmN0aW9ucyBmb3IgZmlsZSBJL08sIG5lY2Nlc3NhcnkKCWZvciBtZW1vcnkgZmlsZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBBdWcgMjMgMDA6MDU6MjMgMTk5NyAgQW5kcmVhcyBNb2hyIDwxMDAuMzA5MzZAZ2VybWFueS5uZXQ+CgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL21tc3lzdGVtLnNwZWNdCglBZGRlZCBzb21lIHN0dWJzLgoKCSogW2luY2x1ZGUvbmVleGUuaF0gW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIHdhcm5pbmcgZm9yIE9TLzIgZXhlY3V0YWJsZXMuCgoJKiBbbXVsdGltZWRpYS9taWRpLmNdCglTaG9ydGVuZWQgTUlESU9VVCBkcml2ZXIgdmVyc2lvbiBzdHJpbmcgdG8gYmUgbGVzcyB0aGFuIDMxIGNoYXJzLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglGaXhlZCBEZWxldGVPYmplY3QzMigpIHRvIHJlYWN0IHByb3Blcmx5IHdoZW4gY2FsbGVkIHdpdGggc3RvY2sgb2JqZWN0LgoKRnJpIEF1ZyAyMiAxODowMzoyNiAxOTk3ICBEaW1pdHJpZSBPLiBQYXVuIDxkaW1pQGNzLnRvcm9udG8uZWR1PgoKCSogW2NvbnRyb2xzL3VwZG93bi5jXSBbaW5jbHVkZS91cGRvd24uaF0KCUZpcnN0IGF0dGVtcHQgYXQgaW1wbGVtZW50aW9uZyB0aGUgVXBEb3duIGNsYXNzLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUFkZGVkIHRoZSBVcERvd24gY2xhc3MgdG8gYmUgaW5pdGlhbGl6ZWQgYnkgSW5pdENvbW1vbkNvbnRyb2xzKCkuCgpXZWQgQXVnIDIwIDE4OjAxOjMzIDE5OTcgIERvdWcgUmlkZ3dheSA8cmlkZ3dheUByb3V0aC5VQ1NELkVEVT4KCgkqIFtncmFwaGljcy8qXSBbb2JqZWN0cy8qXSBbaW5jbHVkZS9nZGkuaF0KCU1hZGUgYWxsIEdESSBvYmplY3RzIChleGNlcHQgRENzKSBtb3ZlYWJsZS4KCk1vbiBBdWcgMTggMDM6MjU6MzAgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19kbnMuY10KCVJlbW92ZWQgSVBDIGNvbW11bmljYXRpb24gdG8gc3BlZWQgdXAgd2luc29jayBzZXJ2aWNlcwoJKHRlc3RlZCBvbmx5IHdpdGggMTYtYml0IG5ldHNjYXBlIDMuMDMpLgoKCSogW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXSBbZG9jdW1lbnRhdGlvbi9mb250c10KCU1pc2NlbGxhbmVvdXMgaW1wcm92ZW1lbnRzLiBVcGRhdGVkIGRvY3MuCgpTdW4gQXVnIDE3IDIwOjM5OjU1IDE5OTcgIEluZ28gU2NobmVpZGVyIDxzY2huZWlkaUBpbmZvcm1hdGlrLnR1LW11ZW5jaGVuLmRlPgoKCSogW21pc2MvY29tbS5jXQoJQSBjb3VwbGUgb2YgYnVnIGZpeGVzLgoKU3VuIEF1ZyAxNyAxOToyOToyMiAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCURpc3BsYXkgbmV4dCBpbnN0cnVjdGlvbiBhZnRlciBzdGVwaS9uZXh0aS4KCgkqIFtpZjE2MzIvcmVsYXkuY10gW2luY2x1ZGUvY2FsbGJhY2suaF0gW3Rvb2xzL2J1aWxkLmNdCglSZXBsYWNlZCBDYWxsVG8zMl9MYXJnZVN0YWNrIHdpdGggdGhlIENBTExfTEFSR0VfU1RBQ0sgbWFjcm8gZm9yCgliZXR0ZXIgV2luZWxpYiBzdXBwb3J0LgoKCSogW2luY2x1ZGUvc2lnY29udGV4dC5oXQoJUmVuYW1lZCB0byBzaWdfY29udGV4dC5oIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGxpYmMuCgoJKiBbKi8qXQoJQWxsIEFQSSBmdW5jdGlvbnMgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIFdJTkFQSSBpbiBwcmV2aXNpb24gb2YKCWZ1dHVyZSBXaW5lbGliIGludGVncmF0aW9uLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21lbW9yeS9sZHQuY10KCUZpeGVkIGFzc2VtYmx5IGNvZGUgdG8gYmUgLWZQSUMgY29tcGF0aWJsZS4KClRodSBBdWcgMTQgMTQ6Mzg6MTUgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXVt3aW4zMi9leGNlcHQuY10KCV9nbG9iYWxfdW53aW5kLCBfbG9jYWxfdW53aW5kIHN0dWIgYWRkZWQuCgoJKiBbb2JqZWN0cy9kaWIuY10JCglEb24ndCByZWFkIG1lbW9yeSB5b3UgZG9uJ3QgZXZlbiBuZWVkIGZvciB0aGUgdGFyZ2V0IGJpdG1hcCAoZml4ZXMKCW9uZSAnbGF6eScgcHJvZ3JhbSkuCgoJKiBbaWYxNjMyL3JlbGF5LmNdW2lmMTYzMi90aHVuay5jXVtpZjE2MzIva2VybmVsMzIuc3BlY10KCSAgW3dpbjMyL29yZGluYWxzLmNdW21lbW9yeS9zZWxlY3Rvci5jXVttZW1vcnkvZ2xvYmFsLmNdCgkgIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZC9tb3ZlZCBzb21lIG1vcmUgd2luOTUgb3JkaW5hbCBzdHVmZi4gSW1wbGVtZW50ZWQgUVRfVGh1bmsKCShub3QgMTAwJSBjb3JyZWN0IHlldCkgYW5kIHNvbWUgZnJpZW5kcy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUFkZCBwb3NzaWJpbGl0eSB0byBicmVhayBhdCB0aGUgRExMIGVudHJ5cG9pbnQuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdW21pc2MvY29tbWRsZy5jXVtzY2hlZHVsZXIvdGhyZWFkLmNdCglNaXNjIGJ1Z2ZpeGVzIGFuZCBhZGRpdGlvbnMuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJVGhlIHJlZ2lzdHJ5IHNlZW1zIHRvIGJlIGNhc2UtcHJlc2VydmluZyBidXQgY2FzZS1pbnNlbnNpdGl2ZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCQoJQWRhcHRlZCB0byBuZXcgL3Byb2MvbWVtaW5mbyBmb3JtYXQuCgoJKiBbb2JqZWN0cy9mb250LmNdW2dyYXBoaWNzL3gxMWRydi94Zm9udC5jXQoJRk9OVF9TZWxlY3RPYmplY3QgYW5kIEdldFRleHRNZXRyaWNzKiBnZXQgcGFzc2VkIHJhbmdlcyBpbiBsb2dpY2FsCiAJYW5kIG5vdCBkZXZpY2UgcG9pbnRzICh0aGFua3MgdG8gTWFyaW9uIFJleXpsIGZvciBwb2ludGluZyB0aGlzCiAJb3V0KS4KCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglVc2UgdGhlIHdpbmRvd3Mgb3duIERDIGlmIHByZXNlbnQgKFRoZSBjYXJldCBjb29yZGluYXRlcyBhcmUKCWxvZ2ljYWwgY29vcmRpbmF0ZXMgYmFzZWQgb24gaXQpLiBGaXhlcyBhbm90aGVyIEFNSVBSTyBwcm9ibGVtLgoKV2VkIEF1ZyAgNiAxODoyMjoyMiAxOTk3ICBNb3J0ZW4gV2VsaW5kZXIgIDx0ZXJyYUBkaWt1LmRrPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUdlbmVyYWwgY2xlYW4tdXAgYW5kIFdpbjMyIHdvcms6IHNwbGl0IGl0ZW1fZmxhZ3MgaW50byBmVHlwZSBhbmQKCWZTdGF0ZTsgc3BsaXQgaXRlbV9pZCBpbnRvIHdJRCBhbmQgaFN1Yk1lbnUuICBJbXByb3ZlZAoJZGVidWctcHJpbnRpbmcuICBJbXBsZW1lbnRlZCBJbnNlcnRNZW51SXRlbTMyW0FXXSwKCVNldE1lbnVEZWZhdWx0SXRlbTMyLCBhbmQgU2V0TWVudUl0ZW1JbmZvMzJbQVddLiAgRml4ZWQKCUdldE1lbnVJdGVtSW5mbzMyW0FXXS4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglEZWZpbmUgYWJvdmUgbmV3IGZ1bmN0aW9ucy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCURlZmluZSBNRl9ERUZBVUxUIGFuZCBNRl9SSUdIVEpVU1RJRlkuICBQcm90b3R5cGUgYWJvdmUgZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvbWVudS5oXQoJRG9uJ3QgcHJvdG90eXBlIG5vdy1zdGF0aWMgTUVOVV9Jbml0U3lzTWVudVBvcHVwLgoKCSogW2luY2x1ZGUvY29tbS5oXQoJUmVkdWNlIE1BWF9QT1JUUyB0byA5ICh3aGljaCB0aGUgcHJvZmlsZSBjb2RlIGNhbiBoYW5kbGUpLgoKVHVlIEF1ZyAgNSAyMDoxNjoyMiAxOTk3ICBWaWN0b3IgU2NobmVpZGVyIDx2aXNjaG5lQGlibS5uZXQ+CgoJKiBbbGlicmFyeS93aW5lc3R1Yi5jXSBbbGlidGVzdC9leHBhbmQuY10KCVRoZXNlIHBhdGNoZXMgbGV0IHBlb3BsZSBwb3J0aW5nIFdpbmRvd3MgYXBwcyBjb21waWxlIHRoZW0gdXNpbmcKCXRoZSBzYW1lIGNvbnZlbnRpb25zIHJlZ2FyZGluZyBnbG9iYWwgX2FyZ2MgYW5kIF9hcmd2IGFzIHRob3NlIG9uCglXaW5kb3dzIEMvQysrIGNvbXBpbGVycy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEF1ZyAgMyAxNDowMzo0MyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtkb2N1bWVudGF0aW9uL01ha2VmaWxlLmluXQoJQ3JlYXRlIGxpbmtzIGZvciBmaWxlcyBpbmNsdWRlZCBmcm9tIHdpbmUudGV4aW5mby4KCgkqIFt3aW5lLm1hbl0KCU1vdmVkIHRvIGRvY3VtZW50YXRpb24gZGlyLgoKCSogW2lmMTYzMi9idWlsdGluLmNdCglNYWRlIFNZU1RFTS5ETEwgYWx3YXlzIGxvYWRlZCBieSBkZWZhdWx0LgoKCSogW2xvYWRlci9zaWduYWwuY10gW2lmMTYzMi9zaWduYWwuY10KCVNwbGl0IHNpZ25hbC5jIGluIGdlbmVyaWMvZW11bGF0b3Itc3BlY2lmaWMgcGFydHMuCgoJKiBbbWlzYy9zeXN0ZW0uY10gW2lmMTYzMi90aHVuay5jXQoJSW1wbGVtZW50ZWQgc3lzdGVtIHRpbWVyIGZ1bmN0aW9ucy4KCUZpeGVkIElucXVpcmVTeXN0ZW0gcGFyYW1ldGVycy4KCgkqIFttc2Rvcy9pb3BvcnRzLmNdCglEZWZpbmVkIGluYi9vdXRiIGZ1bmN0aW9ucyB0byBhdm9pZCBpbmNsdWRpbmcgYXNtL2lvLmguCglVc2UgdGhlIHJpZ2h0IGluc3RydWN0aW9uIGZvciB3b3JkIGFuZCBkd29yZCBkaXJlY3QgYWNjZXNzLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUZpeGVkIENhbGxUbzE2IHVzYWdlLgoKU2F0IEF1ZyAyIDEzOjA1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVdoZW4gdGV4dCBpcyBpbnNlcnRlZCBpbnRvIGEgbmV3bHkgY3JlYXRlZCBlZGl0bGluZSwgdGhlIGNhcmV0CglpcyBwbGFjZWQgYWZ0ZXIgdGhlIHRleHQuIFNob3VsZCBiZSBwbGFjZWQgYmVmb3JlIHRoZSB0ZXh0LiBGaXhlZC4KCgkqIFtmaWxlcy9maWxlLmNdCglSZW1vdmVkIE9fVFJVTkMgZmxhZyBmcm9tIE9GX1dSSVRFIG1vZGUgaW4gX2xvcGVuMzIoKS4KCUFjY29yZGluZyB0byBkb2MgX2xvcGVuKCkgbmV2ZXIgdHJ1bmNhdGVzIGZpbGVzLgoKCSogW2lmMTYzMi91c2VyLnNwZWNdIFttaXNjL2NvbW0uY10KCUFkZGVkIHN0dWIgZm9yIEVuYWJsZUNvbW1Ob3RpZmljYXRpb24oKS4KCgkqIFttaXNjL3Zlci5jXQoJRml4ZWQgcHJvYmxlbSB3aXRoIFZlclF1ZXJ5VmFsdWUqKCkgcnVubmluZyBvdmVyIGVuZCBvZiBuYW1lIHRhYmxlCglpbiByYXJlIGNhc2VzLgoKCSogW21zZG9zL2ludDIxLmNdCglFbmhhbmNlZCBpb2N0bEdldERldmljZUluZm8oKSB0byBjb3JyZWN0bHkgcmV0dXJuIHRoZSBjdXJyZW50IGRyaXZlLgoKCSogW211bHRpbWVkaWEvam95c3RpY2suY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJQWRkZWQgam95c3RpY2sgc3VwcG9ydCAhISEKCU5lZWRzIExpbnV4ID49IDIuMS40NSBvciBqb3lzdGljay0wLjguMC50YXIuZ3ouCgpGcmkgQXVnICAxIDE4OjAyOjA5IDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJRGVmaW5lIERyYXdBbmltYXRlZFJlY3RzMzIuCgoJKiBbZ3JhcGhpY3MvcGFpbnRpbmcuY10KCShEcmF3QW5pbWF0ZWRSZWN0czMyKTogQ3JlYXRlIHN0dWIuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJQ29wZSB3aXRoIE5VTEwgY2xhc3MgaW4gUmVnUXVlcnlJbmZvS2V5MzJBLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZCBHZXRNZW51SXRlbUluZm8zMltBV10uCgoJKiBbY29udHJvbHMvbWVudS5jXQoJKEluc2VydE1lbnUzMkEpOiBVcGdyYWRlIGZsYWdzIHRvIDggaGV4LWRpZ2l0cy4KCShNRU5VRVhfUGFyc2VSZXNvdXJjZSk6IEZpcnN0IHNob3QgYXQgaW1wbGVtZW50YXRpb24uCgkoTG9hZE1lbnVJbmRpcmVjdDMyQSk6IEhhbmRsZSBleHRlbmRlZCBtZW51cy4KCShHZXRNZW51SXRlbUluZm8zMltBV10pOiBGaXJzdCBzaG90IGF0IGltcGxlbWVudGF0aW9uLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJRGVmaW5lIE1GVF8qLCBNRlNfKiwgTUlJTV8qIG1hY3Jvcy4gIERlZmluZSBNRU5VSVRFTUlORk9bQVddCiAJc3RydWN0dXJlcyBhbmQgcG9pbnRlcnMuCgoJKiBbTWFrZWZpbGUuaW5dCgkoZXRhZ3MpOiBBZGQgVEFHUyBhcyB0YXJnZXQuCgoJKiBbaWYxNjMyL2NvbWN0bDMyLnNwZWNdCglVc2UgV2luZG93cyA5NSdzIG9yZGluYWxzLiAgQWRkIGEgZmV3IG1pc3Npbmcgc3R1YnMuCgpUaHUgSnVsIDMxIDE0OjAxOjEzIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW29iamVjdHMvY29sb3IuY10KCUZpeCBmb3IgMTYgY29sb3IgbW9kZSBvZiBYRnJlZS4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvb3JkaW5hbHMuY10KCU1vdmVkL2FkZGVkIHNvbWUgb3JkaW5hbCBvbmx5IGV4cG9ydGVkIGZ1bmN0aW9ucyBmcm9tIGtlcm5lbDMyLmRsbAoJKG1vc3RseSB0aHVua2luZyBwcmVwYXJhdGlvbiBzdHVmZikuCgpXZWQgSnVsIDMwIDA5OjE2OjM4IDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10gW2luY2x1ZGUvd2luMTZkcnYuaF0KICAgICAgICBFc2NhcGUoU0VUQUJPUlRQUk9DKSByZXR1cm5zIHN1Y2Nlc3MgdG8ga2VlcCBwYnJ1c2guZXhlIGhhcHB5LgogICAgICAgIEVzY2FwZShORVhUQkFORCkgaW1wbGVtZW50ZWQgdG8gbWFrZSBIUCBQQ0wgcHJpbnRlciBkcml2ZXIgd29yayBpbgogCXdvcmQuICBTdHViIGZvciBQQVRCTFQgYWRkZWQgdG8gc3RhcnQgd29yayBvbiBwcmludGluZyBtb3JlIHRoYW4KIAl0ZXh0LgoKTW9uIEp1bCAyOCAxMzoxNDoyOCAxOTk3ICBWaWN0b3IgU2NobmVpZGVyIDx2aXNjaG5lQGlibS5uZXQ+CgoJKiBbbGlidGVzdC9leHBhbmQuY10KCU5ldyBXaW5lbGliIHRlc3QgcHJvZ3JhbS4KCldlZCBKdWwgMjMgMDk6Mzc6MTMgMTk5NyAgQWRyaWFuIEhhcnZleSA8YWRyaWFuQHNlbGVjdC5jb20uYXU+CgoJKiBbdG9vbHMvYnVpbGQuY10gW3Rvb2xzL2J1aWxkLXNwZWMudHh0XSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJICBbaWYxNjMyL3VzZXIuc3BlY10KCUFkZGVkIGFiaWxpdHkgdG8gc2V0IGZpbGVuYW1lIHdpbmUgY29uc2lkZXJzIHRoZSBidWlsdC1pbiBETExzIAoJdG8gYmUgaW4gIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIG5hbWUuRExMIHdpdGggbmV3ICJmaWxlIiBrZXkKCWluIC5zcGVjIGZpbGVzLgoJTWFkZSBrZXJuZWwgZmlsZW5hbWUgS1JOTDM4Ni5FWEUgKHNvbWUgcHJvZ3JhbXMgdXNlIHRoaXMgbmFtZSAKCWV4cGxpY2l0bHkgLSBDaGVtT2ZmaWNlIGluc3RhbGwgbm93IHN0YXJ0cyB1cCkuCglNYWRlIHVzZXIgZmlsZW5hbWUgVVNFUi5FWEUgKGp1c3QgdG8gYmUgdGlkeSkuCgpTdW4gSnVsIDIwIDIzOjUxOjAyIDE5OTcgIERhdmlkIEEuIEN1dGhiZXJ0IDxkYWN1dEBoZW5yeS5lY2UuY211LmVkdT4KCgkqIFtjb250cm9scy9tZW51LmNdIFttaXNjL3R3ZWFrLmNdIFtpbmNsdWRlL3R3ZWFrLmhdCglGaXhlZCBNRU5VX0tleUxlZnQgYW5kIE1FTlVfS2V5UmlnaHQgdG8gaGFuZGxlIG11bHRpcGxlLWNvbHVtbgoJbWVudXMuICBNaXNjIG1lbnUgZHJhd2luZyBpc3N1ZXMgZm9yIFdpbjk1IHR3ZWFrcyBmaXhlZC4gIE1pc2MKCXdhcm5pbmdzIGZpeGVkLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCVNwYWNlcyBhcmUgbm93IHBlcm1pdHRlZCBpbiBmaWxlL3BhdGggbmFtZXMgb24gdGhlIGNvbW1hbmQgbGluZS4KCUlmIG11bHRpcGxlIG1hdGNoZXMgY2FuIGJlIG1hZGUsIHRoZSBwcmVmZXJyZWQgbWF0Y2ggaXMgdGhlCglwYXRoL2ZpbGUgd2l0aCBmZXdlciBzcGFjZXMuCgpUdWUgSnVsIDI5IDAyOjIxOjE1IDE5OTcgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW21pc2MvY29tcG9iai5jXQoJQWRkZWQgQ0xTSURGcm9tU3RyaW5nIGFuZCBTdHJpbmdGcm9tQ0xTSUQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBKdWwgMTkgMTM6MDM6MDEgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbdG9vbHMvYnVpbGQuY10gW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJU2F2ZSB0aGUgY29tcGxldGUgJWVicCByZWdpc3RlciBpbiBDYWxsRnJvbTE2OyBmaXhlcyBhIGNyYXNoIHdpdGgKCUxhYlZpZXcgcmVwb3J0ZWQgYnkgQW5kcmVhcyBNb2hyLgoKCSogW2xvYWRlci9tYWluLmNdCglBdm9pZCBleGVjdXRpbmcgYSBidWlsdC1pbiBETEwuCgoJKiBbY29udHJvbHMvc3RhdGljLmNdCglDb252ZXJ0ZWQgc3RhdGljIHdpbmRvdyBwcm9jZWR1cmUgdG8gV2luMzIuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3F1ZXVlLmNdIFtpbmNsdWRlL3F1ZXVlLmhdCglIYWNrZWQgU2VuZE1lc3NhZ2UgZnVuY3Rpb25zIHRvIHN1cHBvcnQgaW50ZXItdGFzayBtZXNzYWdlcyB3aXRoCglTZW5kTWVzc2FnZTMyQS9XLgoKU3VuIEp1bCAxMyAxNjo1NTozNSAxOTk3ICBCZXJuaGFyZCBSb3NlbmtyYWVuemVyIDxiZXJvQGJlcm8tb25saW5lLm1sLm9yZz4KCgkqIFtpcGMvYml0X2FycmF5LmNdCglEb24ndCB1c2UgYml0b3BzLmggaW4gTGludXggMi4xLnggKHRoZXNlIHZlcnNpb25zIGRvIG5vdCByZXR1cm4KCXRoZSBwcmV2aW91cyBzdGF0ZSBmb3IgY2xlYXJfYml0IGFuZCBzZXRfYml0KQoKCSogW2lwYy9zaG1fbWFpbl9ibGsuY10KCUFkYXB0IHRvIEdMSUJDJ3MgaXBjX3Blcm0gc3RydWN0dXJlLgoKCSogW21lbW9yeS9sZHQuY10KCUluY2x1ZGUgPGFzbS91bmlzdGQuaD4gb24gTGludXgvR0xJQkMgc3lzdGVtcyAocmVxdWlyZWQgZm9yCglfc3lzY2FsbDMpLgoKV2VkIEp1bCA5IDIzOjUzOjE5IDE5OTcgIERhdmlkIEEuIEN1dGhiZXJ0ICA8ZGFjdXRAaGVucnkuZWNlLmNtdS5lZHU+CgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFtmaWxlcy9wcm9maWxlLmNdCglBZGRlZCBQUk9GSUxFX0dldFdpbmVJbmlCb29sIGFuZCBQUk9GSUxFX0VudW1lcmF0ZVdpbmVJbmlTZWN0aW9uLgoKCSogW2luY2x1ZGUvc3lzbWV0cmljcy5oXSBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL3N5c21ldHJpY3MuY10KCUFsbCBzeXNtZXRyaWNzIG1vdmVkIHRvIGFycmF5IChubyBtb3JlIGNvbnN0YW50IG1hY3JvcykuICBBZGRlZAoJTU9VU0VXSEVFTFBSRVNFTlQgbWV0cmljLgoKCSogW2luY2x1ZGUvYml0bWFwLmhdIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJQWRkZWQgT0JNX0luaXQoKSAoc2VlIGFsc28gbG9hZGVyL21haW4uYykgYW5kIG1vcmUgc3VwcG9ydCBmb3IgV2luOTUKCWJpdG1hcHM7IGFkZGVkIHNpemUgaW5mbyB0byBPRU0gYml0bWFwcy4KCgkqIFtpbmNsdWRlL2dyYXBoaWNzLmhdIFt3aW5kb3dzL2dyYXBoaWNzLmhdCglBZGRlZCBHUkFQSF9EcmF3R2VuZXJpY1JlbGllZlJlY3QuCgoJKiBbbG9hZGVyL21haW4uY10KCUFkZGVkIFRXRUFLX0luaXQoKSBhbmQgVFdFQUtfQ2hlY2tDb25maWd1cmF0aW9uKCkgY2FsbHMgKHRoZQoJbGF0dGVyIGNoZWNrcyBmb3IgaW52YWxpZCBlbnRyaWVzIGluIHdpbmUuY29uZikuCgoJKiBbaW5jbHVkZS9kZWJ1Zy5oXSBbaW5jbHVkZS9zdGRkZWJ1Zy5oXSBbaW5jbHVkZS9ub25jbGllbnQuaF0KCSAgW2luY2x1ZGUvdHdlYWsuaF0gW2NvbnRyb2xzL21lbnUuY10gW21pc2MvdHdlYWsuY10KCSAgW29iamVjdHMvZ2Rpb2JqLmNdIFt3aW5kb3dzL3N5c2NvbG9yLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJICBbQlVHU10gW2RvY3VtZW50YXRpb24vd2luOTVsb29rXQoJQWRkZWQgdHdlYWtzIGZvciBXaW5kb3dzIDk1IGludGVyZmFjZSBzdXBwb3J0LiAgU2VlCiAJZG9jdW1lbnRhdGlvbi93aW45NWxvb2sgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgRURJVF9Nb3ZlSG9tZSBidWcuCgoJKiBbbWlzYy92ZXIuY10KCUNoYW5nZWQgbmFtZSBvZiBkcHJpbnRmX3Zlcl9zdHJpbmcgdG8gdmVyX2RzdHJpbmcgdG8gZml4Cglwcm9ibGVtIHdpdGggdG9vbHMvbWFrZV9kZWJ1ZyB1dGlsaXR5LgoKV2VkIEp1bCA5IDIxOjMxOjU0IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW29iamVjdHMvZGliLmNdCglEb24ndCB1c2UgcGFsZXR0ZXMgd2l0aCBkaWJzIHdpdGggYmlCaXRDb3VudCA+IDguCgoJKiBbbWlzYy9vbGUybmxzLmNdW21pc2MvdmVyLmNdCglJc1ZhbGlkTG9jYWxlLCBFbnVtU3lzdGVtTG9jYWxlcyBmaXhlZCAod2luaGxwMzIuZXhlIHdvcmtzKQoJU29tZSBWZXJMYW5ndWFnZSBjb2RlZCBtb3ZlZCB0byBvbGUybmxzLmMsIHNvbWUgY2xlYW51cHMuCgoJKiBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCUZpeGVkICJjYXBhYmlsaXRpZXMgPGRldj4gZGV2aWNlIHR5cGUiIGNyYXNoIChjb29sLmV4ZSkuCgoJKiBbbWlzYy9tYWluLmNdCglTeXN0ZW1QYXJhbWV0ZXJzSW5mbyo6IGFkZGVkIHN0dWIgb3B0aW9uIDQxCgkoR0VUTk9OQ0xJRU5UTUVUUklDUyksIGR1cGxpY2F0ZWQgc29tZSBzdHVmZiBhd2F5IGZyb20gU1BJMTYKCXRoYXQgd3JpdGVzIDMyYml0IHZhcnMuKG9uZSBDT01DVEwzMi5ETEwgY3Jhc2gsIGZyZWVjZWxsLmV4ZSkKClR1ZSBKdWwgIDggMjI6NDA6NTMgMTk5NyAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtpZjE2MzIvc2hlbGwzMi5zcGVjXQoJVXNlIFdpbmRvd3MgOTUncyBvcmRpbmFscy4gSGVscCB3YW50ZWQsIGlucXVpcmUgd2l0aGluLgoKTW9uIEp1bCAgNyAxMToyMDozNiAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCSAgW3Rvb2xzL2J1aWxkLXNwZWMudHh0XSBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIHR5cGUgJ3NlZ3N0cicgKHNlZ21lbnRlZCBwb2ludGVyIHRvIG51bGwtdGVybWluYXRlZCBzdHJpbmcpCgl0byAuc3BlYyBmaWxlcy4KCgkqIFt3aW5kb3dzL3VzZXIuY10gW2lmMTYzMi91c2VyLnNwZWNdCglFeGl0V2luZG93c0V4ZWMgc3R1YiBmdW5jdGlvbiBhZGRlZC4KCk1vbiBKdWwgIDcgMDE6MTg6MjUgMTk5NyAgVS4gQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbZmlsZXMvZmlsZS5jXSBbaW5jbHVkZS93aW5iYXNlLmhdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUltcGxlbWVudCBNb3ZlRmlsZUV4MzIsIHNvbWUgZW5oYW5jZW1lbnQgZm9yIE1vdmVmaWxlMzIuCgpTYXQgSnVsICA1IDE4OjEzOjQ4IDE5OTcgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1LgoKCSogW2ZpbGVzL2ZpbGUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS93aW5lcnJvci5oXQogICAgICAgICAgW21zZG9zL2ludDIxLmNdIFt3aW4zMi9maWxlLmNdCglBZGQgTG9ja0ZpbGUvVW5sb2NrRmlsZSBpbXBsZW1lbnRhdGlvbi4KCUFkZCBiYWNrIGluIGludDIxIGZ1bmMoMHg1YykgUmVjb3JkIGxvY2tpbmcgZnVuY3Rpb25zLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZpeGVkIGJ1ZyB3aXRoIE9GX1JFT1BFTiBpbiBGSUxFX0RvT3BlbkZpbGUuCgpGcmkgSnVsIDQgMTI6MDA6MDAgMTk5NyAgSGVucmlrIE9sc2VuIDxIZW5yaWsuT2xzZW5AaWFlc3RlLmRrPgoKCSogW21pc2Mvb2xlMm5scy5jXSBbcHJvZ3JhbXMvcHJvZ21hbi9EYS5yY10gW3Byb2dyYW1zL3dpbmhlbHAvRGEucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0RhLnJjXQoJQWRkZWQvdXBkYXRlZCBEYW5pc2ggbGFuZ3VhZ2Ugc3VwcG9ydC4KClRodSBKdWwgIDMgMTM6MDQ6MjAgMTk5NyAgQ2xhdXMgRmlzY2hlciAgPGZpc2NoZXJAaXVlLnR1d2llbi5hYy5hdD4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCVByb3Blcmx5IGltcGxlbWVudGVkIERPU0ZTX1VuaXhUaW1lVG9GaWxlVGltZSBhbmQKCURPU0ZTX0ZpbGVUaW1lVG9Vbml4VGltZS4KCgkqIFtkb2N1bWVudGF0aW9uL3dpbmUudGV4aW5mb10KCUZpcnN0IHZlcnNpb24gb2YgdGV4aW5mbyBkb2N1bWVudGF0aW9uLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgSnVuIDI2IDAyOjE0OjAzIDE5OTcgIFNsYXZlbiBSZXppYyAgPGVzZXJ0ZUBjcy50dS1iZXJsaW4uZGU+CgoJKiBbTWFrZWZpbGUuaW5dCglOZXcgdGFyZ2V0IGluc3RhbGxfaW5jbHVkZXMuCgoJKiBbcmMvcGFyc2VyLmhdIFtyYy9wYXJzZXIueV0gW3JjL3dpbmVyYy5jXQoJU29tZSBidWcgZml4ZXMuCgpXZWQgSnVuIDI1IDE0OjQzOjQxIDE5OTcgIFZpY3RvciBTY2huZWlkZXIgPHZpc2NobmVAaWJtLm5ldD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCBXTV9HRVRURVhUIHJldHVybiB2YWx1ZS4KClR1ZSBKdW4gMjQgMjM6NDY6MDQgMTk5NyAgTWljaGllbCB2YW4gTG9vbiA8bWZ2bEB4czRhbGwubmw+CgoJKiBbbXVsdGltZWRpYS8qLmNdIFtpbmNsdWRlL21tc3lzdGVtLmhdCglBZGRlZCBtb3JlIGNhbGxiYWNrIGNvZGUsIGluY2x1ZGluZyAoSSBob3BlKSBmdW5jdGlvbiBjYWxsYmFjay4KCUNoYW5nZWQgc29tZSBsaW5lYXIgcG9pbnRlcnMgaW50byBzZWdtZW50ZWQuCgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJUmVtb3ZlZCBzb21lIGJ1Z3MuCgpTYXQgSnVuIDI4IDExOjM3OjU2IDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9jb21tZGxnLnNwZWNdW2lmMTYzMi9jb21kbGczMi5zcGVjXVttaXNjL2NvbW1kbGcuY10KCSAgW2luY2x1ZGUvY29tbWRsZy5oXQoJSW1wbGVtZW50ZWQgcGFydHMgb2YgY29tZGxnMzI6IEdldE9wZW5GaWxlTmFtZTMyKiwKCUdldFNhdmVGaWxlTmFtZTMyKiwgR2V0RmlsZVRpdGxlMzIqIHVzaW5nIHRoZSAxNiBiaXQgZXF1aXZhbGVudHMuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJRVZFTlRfUXVlcnlaT3JkZXI6IGNoZWNrIGZvciBjaGlsZHJlbiAhPU5VTEwgKGhhcHBlbnMgd2hlbgoJdXNpbmcgLW1hbmFnZWQpLgoKCSogW0JVR1NdW0RFVkVMT1BFUi1ISU5UU10KCVVwZGF0ZWQuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBHZXRUZXh0Q2hhcnNldC4uLiAoc3R1YiBtb3N0bHkpLgoKU2F0IEp1biAyMSAwODo0Nzo1OCAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJICBbbG9hZGVyL3Jlc291cmNlLmNdIFtncmFwaGljcy94MTFkcnYveGZvbnQuY10KCVNldFJlc291cmNlSGFuZGxlciAmIFJlbW92ZUZvbnRSZXNvdXJjZSBwcm90b3R5cGVzIGZpeGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaWYxNjMyL3VzZXIuc3BlY10KCSAgW2lmMTYzMi9vbGVzdnIuc3BlY10gW2lmMTYzMi9jb21tZGxnLnNwZWNdIFtpZjE2MzIvZGRlbWwuc3BlY10KCSAgW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi9semV4cGFuZC5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdCgkgIFtpbmNsdWRlL3dpbmRvd3MuaF0gW21lbW9yeS9zdHJpbmcuY10gW3Rvb2xzL2J1aWxkLmNdCglOZXcgdHlwZSBvZiBwYXJhbWV0ZXIgYWxsb3dlZCBpbiAuc3BlYyBmaWxlcyA6IHN0ciwgcHJpbnRlZAoJYXMgYSBzdHJpbmcgd2l0aCAtZGVidWdtc2cgK3JlbGF5LiAuc3BlYyBmaWxlcyB1cGRhdGVkLgoKCSogW29iamVjdHMvZGMuY10KCUluIERDX1NldHVwR0NGb3JQZW4sIGNhbGwgQmxhY2tQaXhlbE9mU2NyZWVuLCBub3QgQmxhY2tQaXhlbC4KCUxpa2V3aXNlIGZvciBXaGl0ZVBpeGVsLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdIFtncmFwaGljcy94MTFkcnYvYnJ1c2guY10KCVVzZSBCU19IQVRDSEVEIHdpdGggYW4gYWRkZWQgZW50cnkgaW4gSGF0Y2hCcnVzaGVzIGZvciBEa0dyYXlCcnVzaCwKIAlpbnN0ZWFkIG9mIEJTX1NPTElELgoKRnJpIE1heSAzMCAxNzo1ODowMCAxOTk3ICBDaHJpcyBGYWhlcnR5IDxjaHJpc2ZAYW1lcmljYS5jb20+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJQWRkZWQgdmtleSB0byBzY2FuY29kZSB0cmFuc2xhdGlvbiB0YWJsZS4KCVRoaXMgd2FzIHByaW1hcmlseSB0byBmaXggQ2l0cml4IFdpbkZyYW1lIGNsaWVudCB3aGljaAoJYWx3YXlzIG5lZWRzIHNjYW5jb2RlcyBpbiBXTV9LRVlET1dOLgoJVGVzdGVkIHdpdGggRXhjZWVkIDUuMS4wLjEgJiBYRnJlZTg2IDMuMS4yLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgSnVuIDE0IDEzOjA1OjIzIDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2luY2x1ZGUvbW1zeXN0ZW0uaF0KCUF2b2lkZWQgaW5maW5pdGUgbG9vcCBpbiBhdWRpbyBjb2RlIHdoZW4gYWNjZXNzaW5nCiAJV0FWRU9VVENBUFMvV0FWRUlOQ0FQUy9NSURJT1VUQ0FQUy9BVVhDQVBTIHdpdGggcmlnaWQgdmFyaWFibGUKIAlvZmZzZXRzIChJIGFwcGxpZWQgV0lORV9QQUNLRUQpLgoKCSogWyovKl0KCUFkZGVkICJXQVJOSU5HOiIgYW5kICJFUlJPUjoiIHRvIHNvbWUgcHJpbnRmJ3MuCglKdXN0IGdyZXAgZm9yIHRoZW0gd2l0aCAnLWRlYnVnbXNnICthbGwnLgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10gW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUltcGxlbWVudGVkIHdhdmUgY2FsbGJhY2tzOiB3aW5kb3cgYW5kIGZ1bmN0aW9uIGNhbGxiYWNrLgoJRml4ZWQgcHJvYmxlbSB3aXRoIFdBVkVfTm90aWZ5Q2xpZW50KCkuCglNaXNjIGZpeGVzLgoKCSogW3dpbmRvd3Mvd2luaGVscC5jXQoJRml4ZWQgcHJvYmxlbSB3aXRoIHdpbmRvd3MgaGVscCB0ZWxsaW5nICJIZWxwIHRvcGljIGRvZXNuJ3QgZXhpc3QiLgoJQnV0IHRoaXMgcHJvYmxlbSBzdGlsbCByZW1haW5zIHdoZW4gdXNpbmcgV2lud29yZC4KCldlZCBKdW4gMTEgMDk6MTQ6MjAgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5lLmluaV0KCU5ldyAnZm9udHMnIHNlY3Rpb24gZm9ybWF0LiBSZWFkIGRvY3VtZW50YXRpb24vZm9udHMuCgoJKiBbY29udHJvbHMvaWNvbnRpdGxlLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCSAgW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL3dpbi5oXQoJSW1wbGVtZW50ZWQgaWNvbiB0aXRsZXMuCgoJKiBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdIFtvYmplY3RzL2ZvbnQuY10gW29iamVjdHMvZGMuY10KCSAgW2luY2x1ZGUveDExZHJ2LmhdIFtpbmNsdWRlL3gxMWZvbnQuaF0gW2RvY3VtZW50YXRpb24vZm9udHNdCglSZXdyb3RlIGZvbnQgbWFwcGVyIGZyb20gc2NyYXRjaC4KCgkqIFt0b29scy9mbnQyYmRmLmNdCglCdWcgZml4ZXMuIFJFUExBQ0UgRk9OVFMgQ1JFQVRFRCBCWSBUSEUgUFJFVklPVVMgVkVSU0lPTlMuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglXb3JkIGRvY3VtZW50IHdpbmRvdyBhY3RpdmF0aW9uIGZpeC4KCgkqIFt3aW5kb3dzL21kaS5jXSBbd2luZG93cy93aW4uY10KCVJlcGxhY2VkIFdDTCBsaXN0cyB3aXRoIFdJTl9CdWlsZFdpbkFycmF5KCkuCgpNb24gSnVuICA5IDIzOjUxOjE2IDE5OTcgIEFuZHJldyBUYXlsb3IgPGF0YXlsb3JAY2FkdmlzaW9uLmNvbT4KCgkqIFttaXNjL2Vycm9yLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0gW2lmMTYzMi9rZXJuZWwuc3BlY10KCUltcGxlbWVudGVkIExvZ1BhcmFtRXJyb3IsIExvZ0Vycm9yIGZ1bmN0aW9ucy4KClR1ZSBKdW4gIDMgMjM6NDY6MDQgMTk5NyAgTWljaGllbCB2YW4gTG9vbiA8bWZ2bEB4czRhbGwubmw+CgoJKiBbaW5jbHVkZS9tbXN5c3RlbS5oXSBbbXVsdGltZWRpYS9hdWRpby5jXQoJQ29uc3RhbnRzIGZvciBhc3luY2hyb25vdXMgcGxheSBhbmQgcmVjb3JkLgoKCSogW211bHRpbWVkaWEvdGltZS5jXQoJRmlsbGVkIGluIHNvbWUgZW1wdHkgZnVuY3Rpb25zLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUZpeGVkIGJ1Z3MgaW4gd2F2ZU91dE9wZW4uCgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSBbbXVsdGltZWRpYS9hdWRpby5jXQoJSW1wbGVtZW50ZWQgV2luZG93IENhbGxiYWNrIGZvciB3YXZlIG91dHB1dCBhdCBsZWFzdC4KCgkqIFtmaWxlcy9maWxlLmNdCglDb3JyZWN0ZWQgYnVnIGluIEZpbGVEb3NTZXRFcnJvci4KCU5VTEwgcG9pbnRlciBjaGVja2luZyBhZGRlZC4KCgkqIFttaXNjL3NweS5jXQoJQWRkZWQgTXVsdGltZWRpYSBtZXNzYWdlcyB0byBTUFlfR2V0TXNnTmFtZS4KClR1ZSBKdW4gMyAyMjozNDozMCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtkZWJ1Z2dlci8qLmNdW2luY2x1ZGUvcGVleGUuaF1bbG9hZGVyLyouY11bdG9vbHMvYnVpbGQuY10KCSAgW3Rvb2xzL2ZudDJiZGYuY11bbGlicmFyeS9zdXAuY10KCUlNQUdFXyogc3RydWN0cy9kZWZpbmVzIGNoYW5nZWQgZml0IGJldHRlciB0byBTREsgbmFtaW5nCglEb24ndCBsb2FkIG5vbi1pMzg2IFBFIGV4ZWN1dGFibGVzLgoJJWZzIHNob3VsZCBhbHJlYWR5IGJlIGluaXRpYWxpc2VkIGZvciB0aGUgRklSU1QgbG9hZGVkIFBFIG1vZHVsZS4KCgkqIFtpZjE2MzIvYWR2YXBpLnNwZWNdW3dpbjMyL2FkdmFwaS5jXQoJU29tZSBzbWFsbCBzdHVicyBhZGRlZCB0byBicmluZyB3aW4zMiBzZXR1cC5leGUgYSBiaXQgZmFydGhlci4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUFkYXB0ZWQgdG8gbWF0Y2ggd2luOTUga2VybmVsMzIuZGxsIG9yZGluYWxzIChOVCBkb2Vzbid0IHVzZQogCW9yZGluYWwgaW1wb3J0KSwgc29tZSBvcmRpbmFsIG9ubHkgZXhwb3J0ZWQgZnVuY3Rpb25zIGFkZGVkLgoKCSogW2lmMTYzMi9yZWxheS5jXQoJQWRkZWQgQ2FsbFByb2MzMlcuCgoJKiBbbWlzYy9semV4cGFuZC5jXQoJRml4ZWQgcmV0dXJuIHZhbHVlcyBvZiBHZXRFeHBhbmRlZE5hbWUqICh0aGFua3MgdG8gQW5kcmVhcyBNb2hyKS4KCgkqIFtvYmplY3RzL2RpYi5jXQoJRXZlcnl0aGluZyB3aXRoIG1vcmUgdGhhbiA4IGJpdCBvZiBjb2xvciBpcyBhIHRydWVjb2xvciBtb2RlCglhbmQgZG9lc24ndCBoYXZlIGEgY29sb3JtYXAuCgpUdWUgSnVuICAzIDA5OjI0OjUzIDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2ZvbnQuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCSAgW2dyYXBoaWNzL3dpbjE2ZHJ2L3BydGRydi5jXSBbZ3JhcGhpY3Mvd2luMTZkcnYvdGV4dC5jXQoJICBbaW5jbHVkZS93aW4xNmRydi5oXQoJQ2hhbmdlZCBzb21lIHN0cnVjdHVyZXMgdGhhdCBhcmUgcGFzc2VkIHRvIGFuZCBmcm9tIHRoZSAxNiBiaXQKIAlkcml2ZXJzIHRvIGJlIGFsbG9jYXRlZCBvbiB0aGUgZ2xvYmFsIGhlYXAuCglJbXBsZW1lbnRlZCBFc2NhcGUoQ29udHJvbCkgMHgxMDAgR2V0RXh0VGV4dERhdGEgcHJvcGVybHkgdG8KCXN0b3Agd29yZCBmcm9tIGNyYXNoaW5nLgoJUG9zdHNjcmlwdCBkcml2ZXIgbm93IHByaW50cyBvbiBjb21wbGV0ZSBwYWdlIGluc3RlYWQgb2YgdG9wCglsZWZ0IGNvcm5lci4KCVByaW50IHNwb29saW5nIGltcGxlbWVudGVkLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCU1PRFVMRV9HZXRPcmRpbmFsIGNoYW5nZWQgY2hhciBidWZmZXIgdG8gdW5zaWduZWQgY2hhciB0byBzdG9wCglhIGxvb3AgdGhhdCB3YXMgaGFwcGVuaW5nIHdoZW4gcnVubmluZyB0aGUgZm9udCBjb250cm9sCglwcm9ncmFtIGZyb20gdGhlIGNvbnRyb2wgcGFuZWwuCgpTdW4gSnVuICAxIDE5OjA1OjAyIDE5OTcgIFBldGVyIFNjaGxhaWxlIDx1cDluQHJ6LnVuaS1rYXJsc3J1aGUuZGU+CgoJKiBbaW5jbHVkZS9taXNjZW11LmhdIFtsb2FkZXIvbWFpbi5jXSBbbXNkb3MvaW9wb3J0cy5jXQoJQWRkZWQgc3VwcG9ydCBmb3IgZGlyZWN0IGlvIHBvcnQgYWNjZXNzLgoKRnJpIE1heSAzMCAxNjoxODozNSAxOTk3ICBEYXZpZCBBLiBDdXRoYmVydCA8ZGFjdXRAZHNzYzMzNTMuZWNlLmNtdS5lZHU+CgoJKiBbbWlzYy92ZXIuY10KCUltcGxlbWVudGVkIFZlckZpbmRGaWxlMTYuCgpUdWUgTWF5IDI3IDIyOjAwOjM5IDE5OTcgIFJpY2sgUmljaGFyZHNvbiA8cmlja0BkZ2lpLmNvbT4KCgkqIFttaXNjL2NvbW0uY10KCUZpeGVkIEdldENvbW1FcnJvciBhbmQgR2V0Q29tbUV2ZW50TWFzay4KClR1ZSBNYXkgMjcgIDk6MTA6NTMgMTk5NyAgR2VvcmcgQmV5ZXJsZSA8Z2JleWVybGVAYXdpLXBvdHNkYW0uZGU+CgoJKiBbc2NoZWR1bGVyL3RocmVhZC5jXQoJTWlub3IgZml4IGluIHRocmVhZCBkYXRhYmFzZSBpbml0aWFsaXphdGlvbi4KCk1vbiBNYXkgMjYgMTk6NDY6MzQgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtvYmplY3RzL2RjLmNdCglJbiBEQ19TZXR1cEdDRm9yUGVuLCBhdm9pZCB0byBkcmF3IGluIEdYeG9yIG1vZGUgd2l0aCBhIDAgbWFzay4KCk1vbiBNYXkgMjYgMTU6MjI6NDIgMTk5NyAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglBZGQgY29kZSBmb3IgbW9kdWxlcyB0aGF0IGNvLXJlZmVyZW5jZSBlYWNoIG90aGVyLiBQaG90b2RleCdzCglhZ2RzLmV4ZSAoY3BpYzMyKSBoYXMgdHdvIGRsbCdzIHRoYXQgbWFrZSBjYWxscyBpbnRvIGVhY2ggb3RoZXIuCgpNb24gTWF5IDI2IDEzOjM4OjE2IDE5OTcgIEpvZHkgR29sZGJlcmcgPGpvZHlnQGlkdC5uZXQ+CgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10KCURvbnQgdXNlIHN0ZGlvIHdoZW4gcmVhZGluZyAvcHJvYy9zZWxmL21hcHMuICBJdCBjYXVzZXMgcHJvYmxlbXMKCXdpdGggbGliYzYuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCVRyYW5zbGF0ZSBtZXNzYWdlcyBpbiBJc0RpYWxvZ01lc3NhZ2Ugd2hlbiBETEdDX1dBTlRNRVNTQUdFCglpcyB1c2VkLgoKU3VuIE1heSAyNSAxNzowMjoyMSAxOTk3ICBIdXcgRCBNIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCVJlc291cmNlIGNsZWFudXAgaW4gRW51bU1ldGFGaWxlKCkuIFRoaXMgd2FzIG9uZSByZWFzb24gV29yZCB3YXMKCWNyYXNoaW5nIGFmdGVyIGxvbmcgcGVyaW9kcyBvZiB1c2UuIChUaGFua3MgdG8gQ2hyaXMgVW5kZXJoaWxsIGZvcgoJdGhlIGxvZ3MpCgpTdW4gTWF5IDI1IDE0OjU5OjMzIDE5OTcgIEppbWVuIENoaW5nICA8amNoaW5nQGZsZXguY29tPgoKCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglJbml0aWFsIHN1cHBvcnQgZm9yIGNvbXBvdW5kIE1DSSBjb21tYW5kcy4KCVVzZSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmUgZm9yICdhbGlhcycgYW5kICdlbGVtZW50JyBrZXl3b3Jkcy4KCUZpeGVkIHBvaW50ZXIgY29weSBvZiBhcmdzIGtleXdvcmRzIGFycmF5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDIwIDE5OjIwOjIzIDE5OTcgIFBhYmxvIFNhcmF0eGFnYSA8c3J0eGdAbGludXguY2hhbmFlLnN0YmVuLmJlPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRXMucmNdCglVcGRhdGVkIENIT09TRV9GT05ULCBDSE9PU0VfQ09MT1IsIEVESVRNRU5VIGZvciBTcGFuaXNoLgoKTW9uIE1heSAxOSAyMjowNjowNCAxOTk3ICBNaWNoaWVsIHZhbiBMb29uIDxtZnZsQHhzNGFsbC5ubD4KCgkqIFttdWx0aW1lZGlhL21jaXN0cmluZy5jXQoJQ29ycmVjdGVkIGJ1ZyBmb3IgZGV2aWNlIWVsZW1lbnQgY29tbWFuZC4KCgkqIFttdWx0aW1lZGlhL21tYXV4LmNdCglSZXBsYWNlZCBwcmludGYgYW5kIGZwcmludGYgY2FsbHMgYnkgZHByaW50Zl9tbWF1eC4KCgkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCglDb3JyZWN0ZWQgZGVidWdtZXNzYWdlIGluIHdvZEdldFZvbHVtZS4KCUluY2x1ZGUgY29kZSBmb3IgTUNJX0NVRSBjb21tYW5kLgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10KCUFkZGVkIHRoZSBNQ0lFUlJfU0VRIGVycm9yIG1lc3NhZ2VzLgoKCSogW2lmMTYzMi9tbXN5c3RlbS5zcGVjXSBbbXVsdGltZWRpYS9hdWRpby5jXSBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXQoJQ2hhbmdlZCBjYWxsIHN0cnVjdHVyZSBvZiB3YXZlSW5PcGVuIGFuZCB3YXZlT3V0T3Blbi4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdIFttdWx0aW1lZGlhL2F1ZGlvLmNdIFttdWx0aW1lZGlhL21pZGkuY10KCSAgW211bHRpbWVkaWEvbW1hdXguY10gW211bHRpbWVkaWEvbWNpY2RhLmNdIFttdWx0aW1lZGlhL21jaWFuaW0uY10KCSAgW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdIFtpbmNsdWRlL21tc3lzdGVtLmhdCglDaGFuZ2VkIHRoZSBkZXZpY2VJRCBzY2hlbWUuCgoJKiBbaW5jbHVkZS9xdWV1ZS5oXSBbaW5jbHVkZS93aW4xNmRydi5oXSBbbXNkb3MvZHBtaS5jXQoJICBbd2luZG93cy91c2VyLmNdIFt3aW5kb3dzL2RyaXZlci5jXSBbZ3JhcGhpYy93aW5nLmNdCgkgIFtncmFwaGljcy94MTFkcnYvYml0bWFwLmNdIFttaXNjL3dzcHJpbnRmLmNdIFttaXNjL2NydGRsbC5jXQoJUmVtb3ZlZCBjb21waWxlciB3YXJuaW5ncy4KCk1vbiBNYXkgMTkgMDE6MzI6MjQgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9tZW51LmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9ncmFwaGljcy5jXQoJUG9wdXAgbWVudSBzaGFkZSwgbmV3IHN5c3RlbSBtZW51IGltcGxlbWVudGF0aW9uLCAKCU1vZGlmeU1lbnUoKSBmaXhlcywgYmV0dGVyIGNoZWNrIG1hcmsgcGFpbnRpbmcuCgoJKiBbd2luZG93cy9tZGkuY10KCU1ESSBjbGllbnQgZml4IGZvciBXaW4zMi4KClNhdCBNYXkgMTcgMTI6MDI6MTEgMTk5NyAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglBZGRlZCBoYW5kbGluZyBvZiBNRVRBX0RJQkJJVEJMVCwgTUVUQV9TRVRURVhUSlVTVElGSUNBVElPTgoJcGx1cyBidWdmaXggaW4gTUVUQV9FWFRURVhUT1VUIChzdGFydF9vZl90ZXh0IGV0Yy4pCgpUaHUgTWF5IDE1IDIyOjUyOjAwIDE5OTcgIEppbWVuIENoaW5nICA8amNoaW5nQGZsZXguY29tPgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJTWFrZSBzdXJlIGRncm91cCBpcyB2YWxpZCBieSBjaGVja2luZyBwTW9kdWxlLT5mbGFncyBjb25zaXN0ZW50bHkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBNYXkgIDYgMTk6MTI6MjAgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL3Rhc2suY10gW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIGNvbW1hbmQgbGluZSBpbiBMb2FkTW9kdWxlIHRvIGFscmVhZHkgaW5jbHVkZSB0aGUgbGVuZ3RoCglpbmRpY2F0b3IgKHRoYW5rcyB0byBBbmRyZWFzIE1vaHIpLgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglEbGdEaXJMaXN0OiBmaXhlZCBiZWhhdmlvciB3aXRoIERETF9EUklWRVMgfCBERExfRVhDTFVTSVZFICh0aGFua3MKCXRvIEJydWNlIE1pbG5lciBmb3IgdGhpcyBvbmUpOyBjb3JyZWN0bHkgdXBkYXRlIGZpbGUgc3BlYyBvbiBleGl0LgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbaWYxNjMyL3RodW5rLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglNb3ZlZCBlbXVsYXRvci1zcGVjaWZpYyBjb2RlIGZvciBjYWxsaW5nIHdpbmRvdyBwcm9jZWR1cmUgdG8KCXRodW5rLmMuCgpNb24gQXByIDI4IDEwOjIxOjU5IDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglCZXR0ZXIgaW1wbGVtZW50YXRpb24gb2YgbW92ZWFibGUgYmxvY2tzIChmaXJzdCB3b3JkIGluIGJsb2NrIGlzCgl0aGUgaGFuZGxlIGl0c2VsZikgYW5kIGRpc2NhcmRlZCBibG9ja3MuIExvY2FsKFJlKUFsbG9jIGlzIG11Y2gKCW1vcmUgbGlrZSB0aGUgcmVhbCB0aGluZy4KClRodSBBcHIgMjQgMTk6NTA6MTkgMTk5NyAgQWxicmVjaHQgS2xlaW5lIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUFkZGVkIGhhbmRsaW5nIG9mIG1ldGEgcmVjb3JkIE1FVEFfRElCQ1JFQVRFUEFUVEVSTkJSVVNILgoKTW9uIEFwciAyMSAxNDowMzozMiAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW211bHRpbWVkaWEvbW1zeXN0ZW0uY10gW211bHRpbWVkaWEvYXVkaW8uY10KCUZpeGVkIGxlZnRvdmVyIHByb2JsZW1zIHdpdGggbWFza2VkIGRldmljZSBJRHMuCgoJKiBbbXNkb3MvaW50MjEuY10KCVJlbW92ZWQgY29kZSBkdXBsaWNhdGlvbnMsIGZpeGVkIFdyaXRlLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvZGNlLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJICBbd2luZG93cy93aW5wb3MuY10KCVlldCBhbm90aGVyIGF0dGVtcHQgdG8gbWFrZSAtbWFuYWdlZCB3b3JrIGJldHRlci4KCgkqIFtjb250cm9scy9jb21iby5jXQoJVUkgZml4LgoKTW9uIEFwciAyMSAxMzoxMDoyNCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGltbWQ0LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2RlYnVnZ2VyLypdCglBbGwgIkxvYWRpbmcgZnJvbSAuLi4iIGxpbmVzIG1lcmdlZCBpbnRvIG9uZSBzbyBpbXBvcnRhbnQKCWluZm9ybWF0aW9uIGJlZm9yZSB0aGUgY3Jhc2ggZG9lc24ndCBzY3JvbGwgb3V0LgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10KCUFkZGVkIHNvbWUgb3JkaW5hbCBzdHVicyB1c2VkIGJ5IHdpbjk1IE9MRSBhbmQgZnJpZW5kcy4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdIFtsb2FkZXIvbW9kdWxlLmNdCglNc2dXYWl0Rm9yTXVsdGlwbGVPYmplY3RzLEdldFByb2Nlc3NUaW1lcyxSdGxJbWFnZU50SGVhZGVycywKIAlMb2FkTGlicmFyeUV4MzJXIGFuZCBHZXRQcm9jQWRkcmVzczMyVyBhZGRlZC4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXQoJWEltYWdlcyB1c2UgYW5vdGhlciBtZW1vcnkgbGF5b3V0IGZvciBkZXB0aCA0IChhbmQgcG9zcy4gb3RoZXIKIAlkZXB0aHMpIHRoZW4gV2luZG93cyBiaXRtYXBzLiBSZXBsYWNlZCBzcGVlZHVwIGhhY2sgYnkgZ2VuZXJpYwogCShhbmQgYmV0dGVyIHdvcmtpbmcpIGNvZGUuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFub3RoZXIgeGltYWdlIT1iaXRtYXAgbWVtb3J5IGxheW91dCBidWcuIAoJQWxsIF9YaW5pdEltYWdlRnVuY1B0cnMgZXhjZXB0IG9uZSByZW1vdmVkLgoKU3VuIEFwciAyMCAxNzoxMjozMCAxOTk3ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbbXVsdGltZWRpYS9hdWRpby5jXQoJRml4ZWQgc29tZSByZWdyZXNzaW9uIGJ1Z3MuCgpTdW4gQXByIDIwIDEyOjE1OjA5IDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIE1PRFVMRV9Mb2FkRXhlSGVhZGVyKCkgdG8gdXNlIHRoZSBjb3JyZWN0IG9mZnNldCBmb3IKCWZhc3QtbG9hZCBhcmVhLgoKU2F0IEFwciAxOSAxNjo0MDowMCAxOTk3ICBDaGFkIEZyYWxlaWdoIDxjaGFkZkBib29rY2FzZS5jb20+CgoJKiBbY29udHJvbHMvKl0gW2RlYnVnZ2VyLypdIFtncmFwaGljcy93aW4xNmRydi8qXSBbbG9hZGVyLypdIFttaXNjLypdCgkgIFt3aW4zMi8qXQoJUmVtb3ZlZCA8bWFsbG9jLmg+IGFuZCBhZGRlZCA8c3RkbGliLmg+IHdoZXJlIG5lZWRlZC4KCUNoYW5nZWQgcHJpbnRmIGZvcm1hdGVycyB0byBtYXRjaCBhcmd1bWVudCB0eXBlcyAoJWx4IGluc3RlYWQgb2YgJXgpLgoJQ2FzdGVkIHNvbWUgdHlwZXMgdG8gbWFrZSB0aGUgY29tcGlsZXIgaGFwcHkuIE1vc3RseSBwb2ludGVyPC0+dWxvbmcuCgoJKiBbZ3JhcGhpY3Mvd2luMTZkcnYvaW5pdC5jXQoJRml4ZWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCgkqIFtpbmNsdWRlL21zZG9zLmhdCglBZGRlZCA8c3lzL3R5cGVzLmg+IG5lZWRlZCBmb3IgPGRpcmVudC5oPi4KCgkqIFtpbmNsdWRlL3NpZ2NvbnRleHQuaF0KCUNvbWJpbmVkIGEgY29tbW9uIE5ldEJTRCAmIEZyZWVCU0QgI2lmZGVmLCBhbmQgYWRkZWQgaW4gT3BlbkJTRC4KCUNhc3RlZCBFSVBfc2lnL0VTUF9zaWcgdG8gYmUgdW5zaWduZWQgbG9uZyAoZGVjbGFyZWQgYXMgJ2ludCcgaW4gKkJTRCkuCgoJKiBbbWlzYy9jcnRkbGwuY10gW21pc2MvbHN0ci5jXQoJQ2FzdGVkIGxhc3QgYXJndW1lbnQgaW4gdipwcmludGYoKSB0byBiZSB2YV9saXN0LiBUaGlzIGNvZGUgc2VlbXMgdG8KCW1ha2UgQklHIGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB2YV9saXN0LgoKCSogW21pc2MvdmVyLmNdCglGaXhlZCBpbXBvc3NpYmxlIGlmKCkgZXhwcmVzc2lvbiAodW5zaWduZWQgPCAwKS4KCgkqIFttaXNjL3dpbnNvY2suY10KCVJlbW92ZWQgc2VtaWNvbG9uIG9uIHRoZSBlbmQgb2YgYW4gaWYoKSBzdGF0ZW1lbnQuCgoJKiBbd2luZG93cy9tZGkuY10KCUNoYW5nZWQgYSBjb3VudGVyL2luZGV4IHRvIHVuc2lnbmVkIHNpbmNlIGl0IHdhcyBjb21wbGFpbmluZyBhYm91dAoJc2lnbmVkL3Vuc2lnbmVkIGNvbXBhcmlzb24gYW5kIGRpZG4ndCBuZWVkIHRvIGJlIG5lZ2F0aXZlLgoKV2VkIEFwciAxNiAxNzo0MzoxOSAxOTk3IEdlb3JnIEJleWVybGUgPGdiZXllcmxlQGF3aS1wb3RzZGFtLmRlPgoKCSogW3NjaGVkdWxlci90aHJlYWQuY10KCU1pbm9yIGZpeCBpbiB0aHJlYWQgZGF0YWJhc2UgaW5pdGlhbGl6YXRpb24uCgpXZWQgQXByIDE2IDE3OjI4OjA1IDE5OTcgIEFuZHJlYXMgTW9ociA8MTAwLjMwOTM2QGdlcm1hbnkubmV0PgoKCSogW2ZpbGVzL2ZpbGUuY10KCUZpeGVkIEZJTEVfRmlsbEluZm8oKSB0byBvbWl0IHRoZSBhcmNoaXZlIGZsYWcgd2hlbiBoYW5kbGluZyBhIERPUwoJZGlyZWN0b3J5IGVudHJ5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpNb24gQXByIDE0IDExOjIyOjU0IDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCU1pbm9yIGNoYW5nZXMgdG8gaGVscCBkZWJ1ZyBwcm9ibGVtcy4KCgkqIFtpZjE2MzIvZHVtbXkuY10gW2lmMTYzMi9nZGkuc3BlY10KCUR1bW15IHJvdXRpbmVzIGZvciBTdGFydFBhZ2UsIEVuZFBhZ2UsIFNldEFib3J0UHJvYywgQWJvcnRQcm9jLgoKCSogW21pc2MvcHJpbnRkcnYuY10gW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJU3RhcnREb2MxNiwgRW5kRG9jMTYgbmV3IGZ1bmN0aW9ucy4KClN1biBBcHIgMTMgMTE6MTg6MzUgMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbWVtb3J5L3ZpcnR1YWwuY10KCUltcGxlbWVudGVkIE1hcFZpZXdPZkZpbGUuCgoJKiBbZGVidWdnZXIvZGJnLnldCglBZGRlZCAnaW5mbyBtYXBzJyBjb21tYW5kLgoKRnJpIEFwciAxMSAxNjozNDowOCAxOTk3ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZGV2ZWxAcnVsaG1wYzU4LkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvRURJVC5UT0RPXQoJU3RhcnRlZCByZXN0cnVjdHVyaW5nLiAgUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgoJRml4ZWQ6CXdvcmR3cmFwLCBzY3JvbGxiYXIgaGFuZGxpbmcsIHNjcm9sbGluZywgcGFpbnRpbmcsCgkJRWRpdFduZFByb2MoKSBpcyBub3cgcmVlbnRyYW50LCB3b3JkYnJlYWsgcHJvY3MsCgkJYmV0dGVyIGNvbXBsaWFuY2UgdG8gc3BlY3MuCglOZXc6CW1hcmdpbnMsIGZvcm1hdCByZWN0YW5nbGUuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQ2hhbmdlZCB0aGUgY3Vyc29yIGZvciB0aGUgZWRpdCBjb250cm9sIGNsYXNzIHRvIGFuIEktYmVhbS4KCgkqIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCAzMiBiaXQgd29yZGJyZWFrIGNhbGxiYWNrLgoKTW9uIEFwciAgNyAyMDo1MzoyOCAxOTk3ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUFkZGVkIGhhbmRsaW5nIG9mIHNvbWUgbW9yZSBtZXRhZmlsZSByZWNvcmRzOiAKCU1FVEFfQ1JFQVRFUkVHSU9OLCBNRVRBX0lOVkVSVFJFR0lPTiBldGMuCgpTYXQgQXByICA1IDA5OjIzOjAyIE1FVCBEU1QgMTk5NyBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BicmV1Z2hlbC51ZnNpYS5hYy5iZT4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglEZWZpbmUga2VybmVsIHNpZ2FjdGlvbiBvdXJzZWx2ZXMgaW5zdGVhZCBvZiBnZXR0aW5nIGl0Cglmcm9tIHRoZSBrZXJuZWwgc291cmNlLgoKV2VkIEFwciAgMiAyMTowNTowMCAxOTk3ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbY29udHJvbC9tZW51LmNdCglGaXggcmV0dXJuIHZhbHVlIHJhbmdlIGZvciBHZXRNZW51U3RhdGUuCgoJKiBbZmlsZXMvZmlsZS5jXQoJQWx3YXlzIGZpbGwgb3V0IG9mcy0+c3pQYXRoTmFtZSBpbiBGSUxFX0RvT3BlbkZpbGUuCgoJKiBbbWVtb3J5L3N0cmluZy5jXQoJQWRkIGRlYnVnIG9wdGlvbiBzdHJpbmcuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglGaXggcmV0dXJuIHZhbHVlIGZvciBEZXN0cm95SWNvbjMyLgoKTW9uIE1hciAzMSAxNzoxNjoxMiAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW0RFVkVMT1BFUlMtSElOVFNdIFttaXNjLypdIFt3aW5kb3dzLypdIFtncmFwaGljcy8qXQoJQWRkZWQgZGVzY3JpcHRpb24gb2YgdGhlIHNvdXJjZSB0cmVlLiBNb3ZlZCBzZXZlcmFsCglmaWxlcyB0byBmaXQgaXQuCgoJKiBbbWlzYy9zaGVsbC5jXQoJVXNlIFdpbjMyIGhlYXAgZnVuY3Rpb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgTWFyIDI4IDE0OjE4OjMyIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW21pc2MvbWFpbi5jXSBbQU5OT1VOQ0VdCglVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKCXNvbWVvbmUuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUZpeGVkIGJ1ZyBpbiBDQl9ESVIxNiBoYW5kbGluZy4KCVVzZSBjb3JyZWN0IHRleHQgY29sb3IgaW4gQ0JQYWludFRleHQuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgV01fQ1RMQ09MT1IgaGFuZGxpbmcuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCB0cmFuc2xhdGlvbiBmb3IgRU1fKjMyIG1lc3NhZ2VzLgoKTW9uIE1hciAyNCAwMTozMTo1MiAxOTk3ICBTdGVmZmVuIE1vZWxsZXIgPG1vZWxsZXJAbXBpbWctYmVybGluLWRhaGxlbS5tcGcuZGU+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUFkZGVkIGluZm9ybWF0aW9uIG9uIGRldmljZSBhbmQgaW5vZGUgbnVtYmVycyB0byB0aGUgRE9TRFJJVkUKCXN0cnVjdCwgdXNpbmcgaXQgdG8gZmluZCBET1MgZHJpdmVzIGluIGEgcGF0aCBldmVuIGlmIGl0IGNvbnRhaW5zCglzeW1ib2xpYyBsaW5rcywgZWxpbWluYXRpbmcgYW5ub3lpbmcgbWVzc2FnZXMgYXQgc3RhcnR1cC4gIAoJRWRpdGVkIGZ1bmN0aW9ucyBEUklWRV9Jbml0IGFuZCByZXdyb3RlIERSSVZFX0ZpbmREcml2ZVJvb3QuCgpXZWQgTWFyIDE5IDE2OjMxOjE4IDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L2ZvbnQuY10gW2dyYXBoaWNzL3dpbjE2ZHJ2L2luaXQuY10KCSAgW2dyYXBoaWNzL3gxMWRydi9mb250LmNdIFtvYmplY3RzL2ZvbnQuY10gW2luY2x1ZGUvZ2RpLmhdCgkgIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdIFtpbmNsdWRlL3gxMWRydi5oXQoJSW1wbGVtZW50ZWQgR2V0Q2hhcldpZHRoIHZpYSBncmFwaGljcyBkcml2ZXJzLgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L01ha2VmaWxlLmluXSBbZ3JhcGhpY3Mvd2luMTZkcnYvcHJ0ZHJ2LmNdCglNb3ZlZCBwcmludGVyIGRyaXZlciBpbnRlcmZhY2VzIGludG8gYSBzZXBhcmF0ZSBmaWxlLgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2L3RleHQuY10KCUZpeGVkIGJ1Z3MgdGhhdCBzZWctZmF1bHRlZCB3cml0ZS4KCldlZCBNYXIgMTkgMTM6NTI6NDEgMTk5NyAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtCVUdTXQoJVXBkYXRlLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVJlbW92ZWQgdXNlbGVzcyBwYXJhbWV0ZXJzIGZyb20gYSBsb3Qgb2YgZnVuY3Rpb25zLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUltcHJvdmVkIGtleWJvYXJkIHNob3J0Y3V0cy4gQWRkZWQgY2hlY2sgZm9yIGVudHJpZXMgd2l0aCBwb3B1cCAKCW1lbnUgaW4gRW5hYmxlTWVudUl0ZW0oKS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10gW3dpbmRvd3Mvd2luLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KCURvIG5vdCBhbGxvY2F0ZSBzZXBhcmF0ZSB0aHVua3MgZm9yIG5ldyB3aW5kb3dzLgoKCSogW21pc2MvY2xpcGJvYXJkLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglGaXhlZCBwcm9ibGVtcyB3aXRoIENsaXBCb29rLgoKICAgICAgICAqIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvZWRpdC5jXSBbY29udHJvbHMvbGlzdGJveC5jXQoJICBbY29udHJvbHMvd2lkZ2V0cy5jXSBbd2luZG93cy9ncmFwaGljcy5jXSBbd2luZG93cy9kZWZkbGcuY10KICAgICAgICBDb21ibyByZXdyaXRlLgoKCSogW29iamVjdHMvZGliLmNdCglTbGlnaHQgaW1wcm92ZW1lbnRzLgoKV2VkIE1hciAxOSAxMToyMToxNyAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL2NydGRsbC5jXQoJQWRkZWQgY2hkaXIvbWtkaXIuCgoJKiBbbWlzYy9udGRsbC5jXQoJRml4ZWQgc29tZSBidWdzLCBhZGRlZCBSdGxVbmljb2RlU3RyaW5nVG9BbnNpU3RyaW5nLgoKCSogW3dpbjMyL3Byb2Nlc3MuY10KCUFkZGVkIGluaXRpYWxpc2F0aW9uIG9mIGV2ZW50cy9zZW1hcGhvcmVzL211dGljZXMuCgpXZWQgTWFyIDE5IDAxOjU1OjQwIDE5OTcgIFJpY2FyZG8gUi4gTWFzc2FybyA8bWFzc2Fyb0BpbWUudXNwLmJyPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfUG8ucmNdCglBZGRlZCBzdXBwb3J0IGZvciBQb3J0dWd1ZXNlIGxhbmd1YWdlLgoKU2F0IE1hciAxOCAxODowMDoxNCAxOTk3ICBVd2UgQm9ubmVzICA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJSW1wbGVtZW50ZWQgU3dpdGNoVG9UaGlzV2luZG93KCkuCgkKCSogW21pc2MvdmVyLmNdCglDb3JyZWN0ZWQgYSBmbGF3IGluIFZlckluc3RhbGxGaWxlMzJBLgoJCgkqIFttc2Rvcy9pbnQyMS5jXQoJQ29ycmVjdGVkIHdyb25nIG51bWJlciBpbiBJbnQyMSAzMzA1CglDb3JyZWN0ZWQgSW50MjEgNzE0ZSwgaW1wbGVtZW50ZWQgSW50MjEgNzE2MCxDTD0yLCA3MTQzIGFuZCA3MTQ3CgkKU3VuIE1hciAxNiAwOTo1MzowNCAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KCgkqIFtsb2FkZXIvbmVfbW9kdWxlLmNdCglGaXhlZCBORV9Mb2FkU2VnbWVudHMoKSB0byBzZXQgc2l6ZSB0byBwU2VnLT5taW5zaXplIHJhdGhlciB0aGFuCglzZXR0aW5nIGl0IHRvIDB4MTAwMDAgaWYgcFNlZy0+c2l6ZSBpcyAwLgoKVGh1IE1hciAxMyAxMjoxNTowMCAxOTk3ICBBbmFuZCBLdW1yaWEgPGFrdW1yaWFAb3plbWFpbC5jb20uYXU+CgoJKiBbQU5OT1VOQ0VdCglBZGRlZCBmdHAucHJvZ3NvYy51dHMuZWR1LmF1IGFzIGEgbWlycm9yIG9mIFdpbmUuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJUmVtb3ZlZCBNZW1NYW5JbmZvIHNpemVvZiBjaGVjay4KCk1vbiBNYXIgMTAgMTA6MzU6NDQgTUVUIDE5OTcgU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9AYnJldWdoZWwudWZzaWEuYWMuYmU+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglQaWNrIHVwIGtlcm5lbCBkaXJlbnQgb24gZ2xpYmMgc3lzdGVtcy4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglQaWNrIHVwIGtlcm5lbCBzaWdhY3Rpb24gb24gZ2xpYmMgc3lzdGVtcy4KClNhdCBNYXIgIDggMjE6MDU6MzcgMTk5NyAgSmltZW4gQ2hpbmcgIDxqY2hpbmdAYWxvaGEuY29tPgoKCSogW2RlYnVnZ2VyL3N0YWJzLmNdIFtkZWJ1Z2dlci9tc2MuY10KCUNoZWNrIHJldHVybiB2YWx1ZSBvZiBtbWFwLgoKRnJpIE1hciAgNyAwNTo0MjowMyAxOTk3ICBMZWUgSmFla2lsIDxqdXJpYUBzZW9kdS5jby5rcj4KCgkqIFt3aW4zMi9jb2RlX3BhZ2UuY10KCUFkZGVkIElzVmFsaWRDb2RlUGFnZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE1hciAgMiAxNDo1NzozNyAxOTk3ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFsqLypdCglDb21wbGV0ZWQgdHJhbnNpdGlvbiB0byBuZXcgV2luMzIgdHlwZXMuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZWQgQ2FsbFRvMTZfcmVncyB0byB0YWtlIGEgQ09OVEVYVCBhcmd1bWVudC4KCgkqIFttZW1vcnkvdmlydHVhbC5jXQoJUmV3cm90ZSBWaXJ0dWFsKiBmdW5jdGlvbnMuIEltcGxlbWVudGVkIENyZWF0ZUZpbGVNYXBwaW5nIGFuZAoJT3BlbkZpbGVNYXBwaW5nLiBCcm9rZSBNYXBWaWV3T2ZGaWxlIDstKQoKCSogW3dpbjMyL2szMm9iai5jXQoJSW1wbGVtZW50ZWQgbmFtZWQgb2JqZWN0cy4KClN1biBNYXIgIDIgMDA6MzM6MjEgMTk5NyAgTWlrb2xhaiBaYWxld3NraSA8em1pa29sYWpAZnJlZS5wb2xib3gucGw+CgoJKiBbbWlzYy9vbGUybmxzLmNdIFtyZXNvdXJjZXMvc3lzcmVzX1BsLmNdCglBZGRlZCBQb2xpc2ggbGFuZ3VhZ2Ugc3VwcG9ydC4KClNhdCBNYXIgIDEgMTM6MzE6MjUgMTk5NyAgRGF2aWQgRmF1cmUgPGRhdmlkLmZhdXJlQGlmaGFteS5pbnNhLWx5b24uZnI+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJV3JvdGUgVmtLZXlTY2FuIGFuZCB0ZXN0ZWQgd2l0aCBXaW53b3JkLiBXb3JrcyBvayBleGNlcHQgZm9yIGRlYWQKCWNoYXJzLgoKRnJpIEZlYiAyOCAwOTozNDowMyAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy93aW4xNmRydi9mb250LmNdIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCgkgIFtncmFwaGljcy93aW4xNmRydi9vYmVjdHMuY10KCUFkZGVkIHN0YXJ0IG9mIFNlbGVjdE9iamVjdCBjYWxsIGZvciBwcmludGVyIGRyaXZlci4gV3JpdGUgc2hvdWxkCglub3cgcnVuIHdpdGggdGhlIHByaW50ZXIgZHJpdmVyIGVuYWJsZWQuCgpXZWQgRmViIDI2IDIwOjAzOjMyIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2RlYnVnZ2VyLyouY10KCVJlLWFkZGVkIGEgZGlzYXNzZW1ibHkgY29tbWFuZCAobGlzdCBzZXJ2ZXMgYW5vdGhlciBmdW5jdGlvbmFsaXR5Cglub3cpLgoKCSogW2xvYWRlci9wZV9yZXNvdXJjZS5jXQoJQWRkZWQgIyBzdXBwb3J0LgoKCSogW21pc2Mvb2xlMm5scy5jXQoJR2V0U3RyaW5nVHlwZSogYWRkZWQuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJVkdBMTYgZml4ZXMuCgoJKiBbd2luZG93cy9jbGFzcy5jXQoJTG9vayBmb3IgZ2xvYmFsIHdpZGdldCBjbGFzc2VzIHRvbyBpbiBHZXRDbGFzc0luZm8zMi4KCgkqIFt3aW5kb3dzL3N5c21ldHJpY3MuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgV2luMzIgc3lzbWV0cmljcy4KClNhdCBGZWIgMjIgMjM6NTY6MjkgMTk5NyAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFtkb2N1bWVudGF0aW9uL2xhbmd1YWdlc10KCVRoZSBmb3VydGggY2FzZSB1cGRhdGVkLgoKCSogW2lmMTYzMi9udGRsbC5zcGVjXQoJQWRkZWQgc29tZSBpcyogYW5kIHRvKiBmdW5jdGlvbnMuCgpTYXQgRmViIDIyIDIzOjA1OjQ3IDE5OTcgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkIHRlc3RzIGZvciB3YWl0NCBhbmQgd2FpdHBpZC4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglDbGVhbiB1cCBPUy1kZXBlbmRlbnQgY29kZS4gIEkgaG9wZSBJIGdvdCBpdCByaWdodCwgOi0pCgoJKiBbdG9vbHMvd2luZWNvbmZdCglSZWNvZ25pc2UgdmZhdCBmaWxlIHN5c3RlbXMuICBJZ25vcmUgZmxvcHB5IGRyaXZlcyBzcGVjaWZpZWQgaW4KCS9ldGMvZnN0YWIuCgoJKiBbZmlsZXMvKl0KCUZpeCBmdW5jdGlvbiBuYW1lcyBpbiBlcnJvciBtZXNzYWdlcy4KClNhdCBGZWIgMjIgMDY6MTU6MTMgMTk5NyAgUGFibG8gU2FyYXR4YWdhIDxzcnR4Z0BjaGFuYWUuc3RiZW4uYmU+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9tZXNzYWdlLmNdCglTdXBwb3J0IGZvciBtb3JlIGxhdGluIGFscGhhYmV0IGRlYWQga2V5cyBmb3IgaXNvLTg4NTktezEsMiwzLDQsOX0KCWNoYXJhY3RlcnMgc2V0cy4KCkZyaSBGZWIgMjEgMjA6Mzc6NTAgMTk5NyAgSHV3IEQgTSBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXggaW5jb3JyZWN0IGFyZyBvcmRlciBpbiBMT0NBTF9BbGxvYygpIGNhbGwuCgpGcmkgRmViIDIxIDE4OjE5OjE3IDE5OTcgIEFuZHJldyBUYXlsb3IgIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCUZpeGVkIGJ1ZyByZWxhdGVkIHRvIGRldmljZSBJRHMgcmV0dXJuZWQgYnkgbXVsdGltZWRpYQoJc3lzdGVtLiAgSW1wbGVtZW50ZWQgbWNpR2V0RGV2aWNlSUQuCgpTYXQgRmViIDE1IDAwOjU4OjE5IDE5OTcgIEppbWVuIENoaW5nICA8amNoaW5nQGFsb2hhLmNvbT4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCURvIG5vdCBkZXJlZmVyZW5jZSBpbnZhbGlkIGV4cHJlc3Npb25zLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgRmViIDE1IDExOjU5OjE3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogWyovKl0KCUNvbnZlcnRlZCBhIGxvdCBvZiBmdW5jdGlvbnMgdG8gV2luMzIgdHlwZXMuCglSZW1vdmVkIEhXTkQgdHlwZS4KCkZyaSBGZWIgMTQgMTU6MDk6MTkgMTk5NyAgT25ubyBIb3ZlcnMgPG9ubm9Ac3RhY2submw+CgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJSW1wbGVtZW50ZWQgR01FTV9NT1ZFQUJMRSBibG9ja3MgZm9yIFdpbjMyLgoKRnJpIEZlYiAxNCAwMDoyNDozOSAxOTk3ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW2xvYWRlci90YXNrLmNdIFt3aW5kb3dzL3F1ZXVlLmNdCglEbyBub3QgcmVhZCBYIGV2ZW50cyB3aGlsZSBpbiB0aGUgaW50ZXJ0YXNrIFNlbmRNZXNzYWdlKCkuCgoJKiBbbWlzYy9sc3RyLmNdCglGaXhlZCBDaGFyUHJldjMyQSgpLgoKCSogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS9ob29rLmhdCglSZXN0b3JlZCBicm9rZW4gV0hfQ0FMTFdORFBST0MgZnVuY3Rpb25hbGl0eSBmb3IgZGlhbG9ncywgZXRjLi4uCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL21kaS5jXQoJICBbd2luZG93cy9ldmVudC5jXSBbY29udHJvbHMvZWRpdC5jXSAKCUFkZGVkIFdJTl9JU1dJTjMyIGZsYWcgdG8gd2luZG93cyBjcmVhdGVkIGJ5IFdpbjMyIGNhbGxzLiAKCVNldmVyYWwgbmV3IFdpbjMyIG1lc3NhZ2VzIGFyZSBzZW50IHdoZW4gdGhpcyBmbGFnIGlzIG9uLgoJCgkqIFttc2Rvcy9kb3NtZW0uY10gW21lbW9yeS9nbG9iYWwuY10KCVNvbWUgY2hhbmdlcyBpbiBET1MgbWVtb3J5IGFsbG9jYXRpb24uCgpGcmkgRmViICA3IDIxOjQ2OjAzIDE5OTcgIEFuZHJldyBUYXlsb3IgIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbd2luMzIvc2VjdXJpdHkuY10KCUFkZGVkIFNJRCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgoKCSogW2luY2x1ZGUvZGVidWcuaF0KCUFkZGVkIGRlYnVnZ2luZyBjbGFzcyAic2VjdXJpdHkiLgoKRnJpICBGZWIgNyAyMDo0NjozMyAxOTk3ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgoKCSogW2RlYnVnZ2VyL21zYy5jXSBbZGVidWdnZXIvc291cmNlLmNdIAoJICBbZG9jdW1lbnRhdGlvbi93aW5lX29zMi50eHRdIFtsb2FkZXIvc2lnbmFsLmNdCglTb21lIG1vcmUgY2hhbmdlcyBmb3IgT1MvMi4gRG9lc24ndCB3b3JrIHlldC4KCkZyaSAgRmViIDcgMDk6MzE6MTcgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUFkZGVkIEV4cGFuZEVudmlyb25tZW50U3RyaW5ncyouCgoJKiBbbWlzYy9udGRsbC5jXSBbaW5jbHVkZS9udGRsbC5oXQoJQWRkZWQgc29tZSBuZXcgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJQ1VSU09SSUNPTl9Mb2FkSGFuZGxlcjogY2hlY2sgYWdhaW5zdCBzb21lIGJpemFycmUgb3V0IG9mIG1lbW9yeQoJY29uZGl0aW9ucy4KCQoJKiBbd2luZG93cy9tZGkuY10KCUZpeGVkIERlZkZyYW1lUHJvYzMyKiwgYWRkZWQgVHJhbnNsYXRlTURJU3lzQWNjZWwzMi4KCldlZCBGZWIgIDUgMDE6MzE6MDUgMTk5NyAgSm9obiBaZXJvIDxqb2huQGdsb2JlLmdyYXBoaXNvZnQuaHU+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19IdS5yY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9tYWluLmNdCgkgIFtwcm9ncmFtcy9wcm9nbWFuL0h1LnJjXSBbcHJvZ3JhbXMvd2luaGVscC9IdS5yY10KCUFkZGVkIEh1bmdhcmlhbiBsYW5ndWFnZSBzdXBwb3J0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViICAyIDEyOjMxOjAzIDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL2RyaXZlLmNdCglGaXhlZCBTZXRDdXJyZW50RGlyZWN0b3J5KCkgdG8gYWxzbyBjaGFuZ2UgdGhlIGN1cnJlbnQgZHJpdmUuCgoJKiBbd2luMzIvZXhjZXB0LmNdIFt0b29scy9idWlsZC5jXQoJVXNlIFdpbjMyIHJlZ2lzdGVyIGZ1bmN0aW9ucyB0byBpbXBsZW1lbnQgZXhjZXB0aW9uIGhhbmRsaW5nLgoJRml4ZWQgVW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyLgoKRnJpIEphbiAzMSAxNTo0Mjo0MSAgMTk5NyAgRGF2aWQgRmF1cmUgIDxkYXZpZC5mYXVyZUBpaGFteS5pbnNhLWx5b24uZnI+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJQWRkZWQgS0VZQk9BUkRfR2VuZXJhdGVNc2cgdG8gZ2VuZXJhdGUgQ2FwcyBMb2NrIGFuZCBOdW1Mb2NrIGV2ZW50cwoJQWRkZWQgY2FsbHMgdG8gS0VZQk9BUkRfR2VuZXJhdGVNc2cgd2hlbiB0aGUga2V5IGlzIHByZXNzZWQvcmVsZWFzZWQKCW9yIHdoZW4gdGhlIHN0YXRlIGhhcyBjaGFuZ2VkLCBvdXQgb2Ygd2luZS4KCUNoYW5nZWQgdHlwZSAzLXN0YXRlICdUb2dnbGVLZXlTdGF0ZScgdG8gYm9vbGVhbi4gVGhlIE9uL09mZiBpcyBnaXZlbgoJYnkgSW5wdXRLZXlTdGF0ZVRhYmxlLgoKV2VkIEphbiAyOSAyMTo1MzowNCAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtsb2FkZXIvKnJlc291cmNlLmNdW2lmMTYzMi90aHVuay5jXQoJRW51bVJlc291cmNlKiBhZGRlZC4KCgkqIFtsb2FkZXIvcGVfcmVzb3VyY2UuXSBbbG9hZGVyL3Jlc291cmNlLmNdCglTaXplb2ZSZXNvdXJjZTMyKCksIExvYWRBY2NlbGVyYXRvcnMzMigpIGFkZGVkLgoKCSogW21pc2MvbHN0ci5jXQoJRm9ybWF0TWVzc2FnZSAlbiBhZGRlZC4KCgkqIFttaXNjL2NydGRsbC5jXVtpbmNsdWRlL2N0cmRsbC5oXVtpZjE2MzIvY3J0ZGxsLnNwZWNdCglfY2hkcml2ZSxfZXJybm8sX2lzY3R5cGUgYWRkZWQuCgoJKiBbbWlzYy9jcHUuY10KCVJlcGxhY2VkIHJ1bnRpbWVfY3B1IGJ5IEdldFN5c3RlbUluZm8oKS4KCgkqIFt3aW5kb3dzL2hvb2suY11baW5jbHVkZS9ob29rLmhdCglGaXhlZCBtYXBwaW5nIG9mIGhvb2tzIHRvIHdpbjMyL3VuaWNvZGUuCgoJKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9kZWZ3bmQuY10KCVVwZGF0ZWQgdG8gd2luMzIgc3RhbmRhcmQuCglBTFQtPE1lbnVrZXk+IGZpeGVkLgoKCSogW3dpbmRvd3MvcXVldWUuY10KCUdldFdpbmRvd1RocmVhZFByb2Nlc3NJZCgpIGltcGxlbWVudGVkLgoKTW9uIEphbiAyNyAxNjo0Mjo0OSAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi8qXSBbZ3JhcGhpY3MveDExZHJ2LypdCgkgIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9icnVzaC5jXSBbb2JqZWN0cy9mb250LmNdCgkgIFtvYmplY3RzL2dkaW9iai5jXSBbb2JqZWN0cy9wZW4uY10KCU1vdmVkIFNlbGVjdE9iamVjdCB0byBncmFwaGljcyBkcml2ZXJzLiBQcmludGVyIHN1cHBvcnQgbm93IHdvcmtzCglpbiBhIGZldyBjYXNlcyBidXQgaXMgZGVmaW5pdGVseSBub3QgY29tcGxldGUuIEdlbmVyaWMvdGV4dCBkcml2ZXIKCXdvcmtzLiBUaGUgcG9zdHNjcmlwdCBkcml2ZXIgd29ya3MgaWYgdHJ1ZSB0eXBlIGZvbnRzIGFyZSBkaXNhYmxlZAoJZnJvbSB0aGUgY29udHJvbCBwYW5lbC4gVG8gZW5hYmxlIHByaW50ZXIgc3VwcG9ydCBhZGQgUHJpbnRlcj1vbgoJdG8gdGhlIHdpbmUgc2VjdGlvbiBvZiB5b3VyIHdpbmUuY29uZiBmaWxlLiBUaGlzIGNhdXNlcyB3cml0ZSBub3QKCXRvIHdvcmsgcHJvcGVybHkuIEkga25vdyB0aGF0IHNldmVyYWwgb3RoZXIgcHJpbnRlciBkcml2ZXJzIGRvIG5vdAoJd29yay4KCgkqIFt0b29scy9idWlsZC5jXQoJTWFrZSAuc3RhYnMgbm90IHVzZWQgZm9yIHN2cjQgc2luY2UgaXQgZG9lc24ndCB1c2UgR05VIGFzc2VtYmxlci4KCgkqIFttaXNjL2ZvbnRlbmdpbmUuY10KCU1ha2Ugc3VyZSBhIHByaW50ZiBkb2Vzbid0IGNyYXNoIHRoZSBzeXN0ZW0uCgpTYXQgSmFuIDI1IDE1OjUzOjM1IDE5OTcgIEh1dyBEIE0gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRml4ZWQgc29tZSBwcm9ibGVtcyB3aXRoIFBsYXlNZXRhRmlsZVJlY29yZCgpLgoKCSogW29iamVjdHMvZGMuY10KCWhDbGlwUmduIGdldHMgaW5pdGlhbGl6ZWQgaW4gR2V0RENTdGF0ZSgpLgoKRnJpIEphbiAyNCAyMToyMjoyNiAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW2RlYnVnZ2VyL3N0YWJzLmNdCglIYW5kbGUgZmlsZSBuYW1lcyBiZWdpbm5pbmcgd2l0aCAnLycuCgpGcmkgSmFuIDI0IDE4OjMzOjA0IDE5OTcgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgoJKiBbKi8qXQoJU29tZSBtb3JlIHBhdGNoZXMgZm9yIE9TLzIgc3VwcG9ydC4KCkZyaSBKYW4gMjQgMTE6MzA6NDEgMTk5NyAgQmFuZyBKdW4tWW91bmcgIDxiYW5nanlAbm93bnVyaS5ub3djb20uY28ua3I+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Lby5yY10KCVVwZGF0ZWQgc3VwcG9ydCBmb3IgS29yZWFuIChLbykgbGFuZ3VhZ2UuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKYW4gMTkgMTE6NDY6NDggMTk5NyAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRml4ZWQgTG9hZE1vZHVsZSgpIHRvIGFsd2F5cyBjYWxsIHRoZSBETEwgaW5pdGlhbGl6YXRpb24gY29kZS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb3ZlZCBhbGwgdGhlIGtleWJvYXJkIHN0dWZmIHRvIHdpbmRvd3Mva2V5Ym9hcmQuYwoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBXaW4zMiByZWdpc3RlciBmdW5jdGlvbnMuCgpTYXQgSmFuIDE4IDIyOjI0OjQxIDE5OTcgIERhdmlkIE1ha2VwZWFjZSAgPEQuTWFrZXBlYWNlQG1haWxib3gudXEub3ouYXU+CgogICAgICAgICogW3Rvb2xzL21ha2VkZXAuY10KICAgICAgICBGaXhlZCBidWcgd2hpY2ggY2F1c2VzIFNFR1Ygb24gU29sYXJpcyB4ODYuCgpGcmkgSmFuIDE3IDE4OjMyOjI3IDE5OTcgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtcGM0OS5MZWlkZW5Vbml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIFdNX1VORE8sIFdNX0NPTlRFWFRNRU5VICh0ZW1wb3JhcnkgdXNpbmcgV01fUkJVVFRPTlVQKSwKCVdNX0NPTU1BTkQsIFdNX0lOSVRQT1BVUE1FTlUsIFdNX1NZU0tFWURPV04uCglGaXhlZCBFTV9TRVRTRUwgYW5kIHNvbWUgbWlub3IgYnVncyAoZmVhdHVyZXMpLgoJSGVuY2U6IGZ1bGx5IGZ1bmN0aW9uYWwgdW5kbyBhbmQgYSB3aW45NSBtZW51IHdpdGggdGhlIHJpZ2h0IG1vdXNlCgkJYnV0dG9uLgoKCSogW2luY2x1ZGUvcmVzb3VyY2VzLmhdIFtyZXNvdXJjZXMvVE9ET10gW3Jlc291cmNlcy9zeXNyZXNfPz8ucmNdCglBZGRlZCBhIGNvbnRleHQgbWVudSBmb3IgdGhlIGVkaXQgY29udHJvbC4KCVRyYW5zbGF0aW9ucywgcGxlYXNlIC4uLgoKRnJpIEphbgkxNyAwODoyOTo1MiAxOTk3ICBEYXZpZCBGYXVyZSA8ZGF2aWQuZmF1cmVAaWZoYW15Lmluc2EtbHlvbi5mcj4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglNb3ZlIEVWRU5UX1RvQXNjaWkgdG8gd2luZG93cy9rZXlib2FyZC5jICh3aGVyZSBuYW1lIFRvQXNjaWkpCglGaXhlZCBLZXlwYWQga2V5cyAwLTkgYW5kIC4gaW4gRVZFTlRfZXZlbnRfdG9fdmtleS4KCUFkZGVkIDMtc3RhdGUgaGFuZGxpbmcgb2YgdG9nZ2xlIGtleXMgKENhcHNMb2NrLCBOdW1Mb2NrKSBpbiBvcmRlcgoJdG8gbWFrZSB0aGVtIHdvcmsgd2l0aCBhbnkgWCBzZXJ2ZXIuCglUb2dnbGUga2V5cyBub3cgZ2VuZXJhdGUgV01fS0VZRE9XTiBhbmQgV01fS0VZVVAgb24gZWFjaCBwcmVzc2luZy4KCgkqIFtpbmNsdWRlL2tleWJvYXJkLmhdCglUb3RhbGx5IHJlcGxhY2VkIHRoZSBmaWxlIChmb3JtZXJseSBjb250YWluaW5nIHRoZSB2a2Nhc2UgZGVmaW5pdGlvbnMpCglieSB0aGUgZGVjbGFyYXRpb24gb2YgJ2V4dGVybicgdmFyaWFibGVzIGNvbnRhaW5lZCBieSBldmVudC5jIGFuZCB1c2VkCglieSBrZXlib2FyZC5jCgkKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCVN0YXJ0ZWQgdG8gcmV3cml0ZSBWa0tleVNjYW4gYW5kIE1hcFZpcnR1YWxLZXksIHRvIG1ha2UgdGhlbSB1c2UgdGhlIAoJdGFibGUga2V5YzJ2a2V5IG9yIFggZnVuY3Rpb25zIG9ubHkuCglUb0FzY2lpIDogYWRkZWQga2V5cGFkIDAtOSBhbmQgLiBzcGVjaWFsIGNhc2UuCglDaGFuZ2VkIHRvZ2dsZSBrZXlzIGFjdGl2ZSBtYXNrIGZyb20gMHg4MCB0byAweDEuCgoJKiBbbWlzYy9rZXlib2FyZC5jXQoJRmlsZSBkZWxldGVkLiBDb250ZW50cyBtb3ZlZCB0byB3aW5kb3dzL2tleWJvYXJkLmMuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBwdXRlbnYgWEtCX0RJU0FCTEUgdG8gZGlzYWJsZSBYS0IgZXh0ZW5zaW9uICh3aGljaCwgd2hlbgoJcHJlc2VudCwgY2F1c2VzIEFsdEdyIHRvIGNoYW5nZSBrZXlib2FyZCBncm91cCBpbnN0ZWFkIG9mIGJlaW5nIGEKCW1vZGlmaWVyKS4KClR1ZSBKYW4gMTQgMjI6NTY6NDMgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglEbyBub3QgYXNzdW1lIE51bUxvY2tNYXNrIGlzIE1vZDJNYXNrLCBidXQgY29tcHV0ZSBpdCBieSBzY2FubmluZwoJb3V0cHV0IG9mIFhHZXRNb2RpZmllck1hcHBpbmcgZm9yIFhLX051bV9Mb2NrLgoKVHVlIEphbiAxNCAxNTo0OTo0OSAxOTk3ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtsb2FkZXIvcGVfKi5jXSBbaW5jbHVkZS9wZWV4ZS5oXSBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCgkgIFtkZWJ1Z2dlci8qLmNdCglHZW5lcmFsIGNsZWFuIHVwLgoJQ2hhbmdlZCBkZWZpbmVzL3N0cnVjdHVyZXMgdG8gbWF0Y2ggV2luZG93cyBOVCBTREsuCgoJKiBbbG9hZGVyL21haW4uY10KCURvbid0IGNyYXNoIG9uIGVtcHR5IGNvbW1hbmQtbGluZS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJd2lucG9zLmMgbWFkZSB3aW4zMiBjbGVhbi4KCgkqIFttaXNjL250ZGxsLmNdCglTb21lIHN0cmluZyBjb252ZXJzaW9uIGFkZGl0aW9ucy4KCgkqIFtmaWxlcy9maWxlLmNdCglHZXRGaWxlQXR0cmlidXRlcy9HZXRUZW1wRmlsZU5hbWUgZml4ZWQuCgoJKiBbbWlzYy92ZXIuY10KCVZlckluc3RhbGxGaWxlIGltcGxlbWVudGVkLgoKTW9uIEphbiAxMyAxNTowMzoxMSAxOTk3ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW3Rvb2xzL2J1aWxkLmNdOiBVc2UgUFJFRklYIGFsc28gaW4gc3RhYnMgbWVzc2FnZXMuCgpNb24gSmFuIDEzIDEwOjQwOjMzIDE5OTcgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2dyYXBoaWNzL3dpbjE2ZHJ2LypdIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCglNYW55IGZpeGVzIGFuZCBzb21lIG5ldyBmZWF0dXJlcy4KCgkqIFtncmFwaGljcy94MTFkcnYvZm9udC5jXSBbZ3JhcGhpY3MveDExZHJ2L2luaXQuY10KCSAgW2luY2x1ZGUveDExZHJ2LmhdIFtvYmplY3RzL2ZvbnQuY10KCUdldFRleHRNZXRyaWNzKCkgbW92ZWQgdG8gZ3JhcGhpY3MgZHJpdmVyLgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW21pc2MvZm9udGVuZ2luZS5jXSBbbWlzYy9NYWtlZmlsZS5pbl0KCU5ldyBkdW1teSBFbmdpbmVFbnVtZXJhdGVGb250LCBFbmdpbmVSZWFsaXplRm9udCBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglURVhURk9STTE2IGFuZCBGT05USU5GTzE2IHN0cnVjdHVyZSBkZWZpbml0aW9ucyBtb3ZlZCBoZXJlIGZyb20KCWluY2x1ZGUvd2luMTZkcnYuaAoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgSmFuIDExIDE4OjE3OjU5IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVVwZGF0ZWQgdG8gbmV3IFdpbjMyIHR5cGVzLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIFdpbmZpbGUgZXh0ZW5kZWQgc2VsZWN0aW9uIGJ1Zy4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUNoYW5nZWQgRElSX1NlYXJjaFBhdGggdG8gcmV0dXJuIGJvdGggbG9uZyBhbmQgc2hvcnQgZmlsZSBuYW1lcy4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCUltcGxlbWVudGVkIFZGQVQgaW9jdGwgdG8gcmV0cmlldmUgdGhlIG9yaWdpbmFsIHNob3J0IGZpbGVuYW1lcwoJZnJvbSBhIFZGQVQgZmlsZXN5c3RlbSAoTGludXggb25seSBmb3Igbm93KS4KCVJlcGxhY2VkIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpL0RPU0ZTX0dldERvc1RydWVOYW1lKCkgYnkKCURPU19HZXRGdWxsTmFtZSgpLgoJUHJvcGVybHkgaW1wbGVtZW50ZWQgR2V0U2hvcnRQYXRoTmFtZSgpIGFuZCBHZXRGdWxsUGF0aE5hbWUoKS4KCU1hZGUgYWxsIGZ1bmN0aW9ucyByZS1lbnRyYW50LgoKCSogW2ZpbGVzL2ZpbGUuY10gW21pc2MvbWFpbi5jXQoJUmVwbGFjZWQgLWFsbG93cmVhZG9ubHkgb3B0aW9uIGJ5IC1mYWlscmVhZG9ubHkuIFRoZSBkZWZhdWx0IGlzCglub3cgdG8gcmVwb3J0IHN1Y2Nlc3Mgd2hlbiBvcGVuaW5nIGEgcmVhZC1vbmx5IGZpbGUgZm9yIHdyaXRpbmcuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRml4ZWQgYnVnIGluIERJQiBiaXRtYXBzIHBvaW50ZXIgY2FsY3VsYXRpb24uCgoJKiBbc2NoZWR1bGVyL3Byb2Nlc3MuY10KCUltcGxlbWVudGVkIGVudmlyb25tZW50IHN0cmluZ3MgYW5kIEdldC9TZXRTdGRIYW5kbGUgd2l0aCBwcm9jZXNzCiAJZW52aXJvbm1lbnQgYmxvY2suCgoJKiBbdG9vbHMvYnVpbGQuY10KCVJld3JvdGUgQnVpbGRDb250ZXh0MzIoKSB0byBhdm9pZCBpbnN0cnVjdGlvbnMgdGhhdCBtYXkgbm90IGJlCglzdXBwb3J0ZWQgYnkgYWxsIGFzc2VtYmxlcnMuCgkKRnJpIEphbiAxMCAxNzoxMTowOSAxOTk3ICBEYXZpZCBGYXVyZSAgPGRhdmlkLmZhdXJlQGlmaGFteS5pbnNhLWx5b24uZnI+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJQ3JlYXRlZCB0YWJsZSBrZXljMnZrZXksIHdoaWNoIGFzc29jaWF0ZSBhIHZrZXkoK2V4dGVuZGVkIGJpdCkgdG8KCWFueSBrZXljb2RlLiBDaGFuZ2VkIEVWRU5UX2V2ZW50X3RvX3ZrZXkgdG8gdXNlIHRoaXMgdGFibGUgdG8KCXJldHVybiB0aGUgY29ycmVjdCB2a2V5LiBDaGFuZ2VkIEVWRU5UX1RvQXNjaWkgdG8gZ2V0IHRoZSBrZXljb2RlCglmcm9tIHRoaXMgdGFibGUgdG9vLiAgQXNzaWduZWQgT0VNIHNwZWNpZmljIHZrZXlzIGFyYml0cmFyaWx5LgoKRnJpIEphbiAxMCAwOToyNjoxNyAxOTk3ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29jX2FzeW5jLmNdCiAgICAgICAgRml4ZWQgc3ZyNCBoZWFkZXIgZmlsZXMuCiAgICAgICAgQ2hhbmdlZCBiemVybygpIHRvIG1lbXNldCgpLgoKCSogW3Rvb2xzL2ZudDJiZGYuY10KICAgICAgICBSZW1vdmVkIGJjb3B5KCkgYW5kIHVzZWQgbWVtY3B5KCkgaW5zdGVhZC4KCgkqIFtkZWJ1Z2dlci9tc2MuY10KICAgICAgICBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oCgoJKiBbZGVidWdnZXIvc3RhYnMuY10KICAgICAgICBJbmNsdWRlIHN0cmluZy5oIGluc3RlYWQgb2Ygc3RyaW5ncy5oLgogICAgICAgIERlZmluZSBfX0VMRl9fIGZvciBzdnI0IHN5c3RlbXMuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXQogICAgICAgIFVzZSB3YWl0KCkgaW5zdGVhZCBvZiB3YWl0NCgpIHdoaWNoIGRvZXNudCBleGlzdCBvbiBVbml4d2FyZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCiAgICAgICAgVXNlIHN5c2NvbmYoKSBpbnN0ZWFkIG9mIGdldHBhZ2VzaXplKCkgZm9yIHN2cjQgc3lzdGVtcy4KClRodSBKYW4gIDkgMjE6MDc6MjAgMTk5NyAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BjbGljLm5ldD4KCgkqIFtNYWtlLnJ1bGVzLmluXSBbTWFrZWZpbGUuaW5dIFttYWtlX29zMi5zaF0gW3JjL01ha2VmaWxlLmluXQoJICBbdG9vbHMvTWFrZWZpbGUuaW5dIFtkb2N1bWVudGF0aW9uL3dpbmVfb3MyLnR4dF0KCVBhdGNoZXMgZm9yIE9TLzIgc3VwcG9ydC4gTm90ZSB0aGF0IGl0IGRvZXNuJ3QgY29tcGlsZSB5ZXQuCgpUdWUgSmFuICA3IDIwOjAzOjUzIDE5OTcgIEVyaWMgWW91bmdkYWxlIDxlcmljQHN1YjIzMDQuamljLmNvbT4KCgkqIFtkZWJ1Z2dlci8qXQoJTWFueSBtb3JlIGRlYnVnZ2VyIGltcHJvdmVtZW50cyAoc2VlIGRlYnVnZ2VyL1JFQURNRSBmb3IgZGV0YWlscykuCgpUdWUgSmFuICA3IDE1OjEyOjIxIDE5OTcgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10gW29iamVjdHMvdGV4dC5jXSBbZ3JhcGhpY3MveDExZHJ2LypdCgkgIFtncmFwaGljcy9tZXRhZmlsZWRydi8qXQoJTW92ZWQgc29tZSBkZXZpY2UgZGVwZW5kZW50IGNvZGUgaW50byB0aGUgcmVzcC4gc3ViZGlycy4KCgkqIFtpbmNsdWRlL2dkaS5oXSBbaW5jbHVkZS9tZXRhZmlsZWRydi5oXSBbaW5jbHVkZS94MTFkcnYuaF0KCVByb3RvdHlwZXMgYWRkZWQsCglEQ19GVU5DVElPTlM6IEdldFBpeGVsIGFkZGVkLCBzb21lIHVubmVjZXNzYXJ5IGZ1bmN0aW9ucyByZW1vdmVkLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglDcmVhdGVQb2x5UG9seWdvblJnbjMyIGFkZGVkLgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJUXVlcnlEb3NEZXZpY2UgYWRkZWQuCgoJKiBbbWlzYy9sc3RyLmNdCglGb3JtYXRNZXNzYWdlOiBicm9rZW4gaGVhcCBtYW5hZ2VtZW50IGZpeGVkLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdCglHZXQvU2V0VGhyZWFkUHJpb3JpdHkvUHJpb3JpdHlDbGFzcyBhZGRlZC4KCk1vbiBKYW4gIDYgMjE6NTU6MzAgMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFttaXNjL2tleWJvYXJkLmNdCglUb0FzY2lpIDogVXNlIEVWRU5UX1RvQXNjaWkgaW5zdGVhZC4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglrZXlwYWRfa2V5IDogRG8gbm90IGNvbnZlcnQgWEtfTW9kZV9zd2l0Y2ggdG8gVktfTUVOVTsgcmVjb2duaXplCglrZXlwYWQgY3Vyc29yIGtleXMuCglFVkVOVF9ldmVudF90b192a2V5IDogTmV3IGZ1bmN0aW9uLCB0byB0cmFuc2Zvcm0gYSBYIGtleWNvZGUKCWludG8gYSBNU3dpbiB2a2V5ICsgZXh0ZW5kZWQgYml0LgoJRVZFTlRfVG9Bc2NpaSA6IE5ldyBmdW5jdGlvbiwgdG8gdHJhbnNmb3JtIGEgdmtleSArIGV4dGVuZGVkIGJpdAoJKCsga2V5IHN0YXRlIHRhYmxlKSBpbnRvIGFzY2lpIGNoYXIocyksIHVzaW5nIFhMb29rdXBTdHJpbmcsIGFuZAoJcmVjb2duaXppbmcgZGVhZCBjaGFycy4KCUVWRU5UX2tleSA6IFRyYW5zZm9ybSBBbHRHciBpbnRvIEN0cmwrQWx0IHNlcXVlbmNlOyBjYWxsCglFVkVOVF9ldmVudF90b192a2V5IGZvciBrZXljb2RlIHRvIHZrZXkgY29udmVyc2lvbjsgZml4ZWQKCXByZXZpb3VzLCBjb250ZXh0IGFuZCBleHRlbmRlZCBiaXRzLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUluY2x1ZGUgc3RkZGVidWcuaCwgdG8gZ2V0IC1kZWJ1Z21zZyBtZXNzYWdlcy4KCUdldEtleVN0YXRlIDogSGFuZGxlIFZLX01CVVRUT04gY2FzZS4KCUdldEtleWJvYXJkU3RhdGUsIFNldEtleWJvYXJkU3RhdGUgOiBEZWJ1Z2dpbmcgbWVzc2FnZXMgYWRkZWQuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglUcmFuc2xhdGVNZXNzYWdlIDogSGFuZGxlIGRlYWQgY2hhcnMuCgpNb24gSmFuICA2IDIwOjEwOjExIDE5OTcgIERvbWluaWsgU3RyYXNzZXIgIDxibTQyNDk1M0BtdWVuY2hlbi5vcmc+CgoJKiBbaWYxNjMyL2NydGRsbC5zcGVjXSBbbWlzYy9jcnRkbGwuY10KCUMrKyBmdW5jdGlvbnMgbmV3L2RlbGV0ZS9zZXRfbmV3X2hhbmRsZXIgaW1wbGVtZW50ZWQuCgpNb24gSmFuICA2IDE1OjQ4OjE1IDE5OTcgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG1wYzQ5LkxlaWRlblVuaXYubmw+CgoJKiBbY29udHJvbHMvZWRpdC5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglNb3ZlZCB0aGUgZWRpdCBjb250cm9sIHRvIDMyIGJpdHMuCglJbmNsdWRlZCBuZXcgKHdpbjk1KSBtZXNzYWdlIGRlZmluaXRpb25zIGluIHdpbmRvd3MuaAoJSW1wbGVtZW50ZWQgRU1fU0NST0xMQ0FSRVQsIEVNX1NFVE1BUkdJTlMsIEVNX0dFVE1BUkdJTlMsCglFTV9HRVRMSU1JVFRFWFQsIEVNX1BPU0ZST01DSEFSLCBFTV9DSEFSRlJPTVBPUy4KCUJyb2tlIEVNX1NFVFdPUkRCUkVBS1BST0MgKGludGVybmFsIHdvcmR3cmFwIHN0aWxsIHdvcmtzKS4KCUZpeGVkIHNvbWUgYnVncywgaW50cm9kdWNlZCBhIGNvdXBsZSBvZiBvdGhlcnMuCglUZXh0IGJ1ZmZlciBpcyBub3cgaW5pdGlhbGx5IGluIDMyLWJpdCBoZWFwLgoKCSogW2NvbnRyb2xzL0VESVQuVE9ET10gW2NvbnRyb2xzL2NvbWJvLmNdIFtjb250cm9scy93aWRnZXRzLmNdCgkgIFtpZjE2MzIvd3Byb2NzLnNwZWNdIFtsaWJyYXJ5L21pc2NzdHVicy5jXSBbd2luZG93cy9kZWZkbGcuY10KCSAgW21pc2MvY29tbWRsZy5jXQoJVXBkYXRlZCB0byB3b3JrIHdpdGggMzItYml0IGVkaXQgY29udHJvbC4KClNhdCBKYW4gIDQgMjI6MDc6MjcgMTk5NyAgTy5GbGViYmUgIDxPLkZsZWJiZUBzY2llbmNlLWNvbXB1dGluZy51bmktdHVlYmluZ2VuLmRlPgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJVXNlIG1tYXAgcmF0aGVyIHRoZW4gbWFsbG9jLiBCZXR0ZXIgd29ya2Fyb3VuZCBmb3IgY2xlYW4KCXNlZ21lbnRzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSmFuICAxIDE1OjM2OjE3IDE5OTcgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCVVzZSBGaW5kRmlyc3RGaWxlL0ZpbmROZXh0RmlsZSBpbiBMSVNUQk9YX0RpcmVjdG9yeS4KCgkqIFtmaWxlcy9kb3NfZnMuY10KCVJld3JvdGUgRmluZEZpcnN0RmlsZS9GaW5kTmV4dEZpbGUgdG8gdXNlIERPU0ZTX0ZpbmROZXh0KCkuCgoJKiBbZmlsZXMvZmlsZS5jXSBbZmlsZXMvZGlyZWN0b3J5LmNdCglVc2UgV2luMzIga2VybmVsIG9iamVjdHMgYW5kIGhhbmRsZXMgZm9yIGZpbGUgaGFuZGxlcy4KCVVuaWZpZWQgU2VhcmNoUGF0aCgpIGFuZCBPcGVuRmlsZSgpLgoKCSogW2xvYWRlci9idWlsdGluLmNdCglNb3ZlZCB0byBpZjE2MzIvIGRpcmVjdG9yeS4KCgkqIFt0b29scy9idWlsZC5jXSBbZGVidWdnZXIvKl0gW21pc2NlbXUvKl0KCVdpbjE2IHJlZ2lzdGVyIGZ1bmN0aW9ucyBub3cgcmVjZWl2ZSB0aGUgc2FtZSBDT05URVhUICogc3RydWN0dXJlCglhcyBXaW4zMiBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS9zaWdjb250ZXh0LmhdIFttaXNjZW11L2luc3RyLmNdCglBZGRlZCBuZXcgbWFjcm9zIHRvIGdldCByZWdpc3RlciB2YWx1ZXMgZnJvbSB0aGUgU0lHQ09OVEVYVAoJc3RydWN0dXJlIChvbmx5IHVzZWQgZm9yIGluc3RydWN0aW9uIGVtdWxhdGlvbiBub3cpLgoKCSogW3NjaGVkdWxlci9wcm9jZXNzLmNdIFtzY2hlZHVsZXIvdGhyZWFkLmNdIChOZXcgZmlsZXMpCglBbGxvY2F0ZSBwcm9jZXNzIGFuZCB0aHJlYWQgc3RydWN0dXJlcy4KCgkqIFtzY2hlZHVsZXIvcHJvY2Vzcy5jXSBbd2luMzIvazMyb2JqLmNdCglBZGRlZCBXaW4zMiBrZXJuZWwgb2JqZWN0cyBhbmQgaGFuZGxlcyBtYW5hZ2VtZW50LgoKCSogW2xvYWRlci90YXNrLmNdCglDcmVhdGUgYSBXaW4zMiBwcm9jZXNzIGFuZCB0aHJlYWQgZm9yIGV2ZXJ5IFdpbjE2IHRhc2suCgoJKiBbbWlzYy9jb21tZGxnLmNdIFttaXNjL3NoZWxsLmNdIFt3aW5kb3dzL21zZ2JveC5jXQoJQnVpbHQtaW4gcmVzb3VyY2VzIGFyZSBub3cgaW4gV2luMzIgZm9ybWF0LiBUaGlzIGFsc28gYXZvaWRzCgkxNi1iaXQgY2FsbGJhY2tzIGZvciBidWlsdC1pbiBkaWFsb2dzLgoKCSogW21pc2MvbHpleHBhbmQuY10KCURpZmZlcmVudGlhdGUgYmV0d2VlbiAxNi1iaXQgYW5kIDMyLWJpdCBmaWxlIGhhbmRsZXMuCgoJKiBbbWlzY2VtdS9pbnQqLmNdCglNb3ZlZCBhbGwgaW50IGVtdWxhdGlvbiB0byBtc2Rvcy8gZGlyZWN0b3J5LgoKCSogW21zZG9zLypdCglOZXcgZGlyZWN0b3J5IG1zZG9zLyBjb250YWlucyBhbGwgTVMtRE9TIGVtdWxhdGlvbiBjb2RlIHRoYXQgY2FuCglhbHNvIGJlIHVzZWQgZm9yIFdpbmVsaWI7IHRoaXMgc2hvdWxkIGVuYWJsZSBXaW5lbGliIGFwcHMgdG8gdXNlCglET1MzQ2FsbCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMuCgoJKiBbcmMvd2luZXJjLmNdCglBIGZldyBidWcgZml4ZXMgZm9yIFdpbjMyIHJlc291cmNlIGZvcm1hdC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJSGFjayBpbiBXSU5QT1NfUmVvcmRlck93bmVyUG9wdXBzKCkgdG8gYXZvaWQgWCBjcmFzaGVkIChzdGlsbCBub3QKCXJpZ2h0IHRob3VnaCkuCgpTdW4gRGVjIDI5IDE3OjQ3OjU1IDE5OTYgIE8uIEZsZWJiZSA8ZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglNYWtlIHN1cmUgQlNTIG9mIGEgUEVfSW1hZ2UgaXMgemVyby4KClNhdCBEZWMgMjggMjI6MTU6MzQgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvc2Nyb2xsLmNdCglTY3JvbGxXaW5kb3dFeCgpIHJld3JpdGUsIFNjcm9sbERDKCkgZml4LgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBBbHQtU3BhY2UgY3Jhc2hlcyBpbiBkaWFsb2dzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJU29tZSBjaGFuZ2VzIGluIG1vdXNlIG1lc3NhZ2UgZ2VuZXJhdGlvbi4KClRodSBEZWMgMjYgMDk6MjU6MjQgMTk5NiAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KCgkqIFtkZWJ1Z2dlci9zdGFicy5jXQoJRHVtbXkgREVCVUdfUmVhZEV4ZWN1dGFibGVEYmdJbmZvIHByb3ZpZGVkIGZvciAhX19FTEZfXyBjYXNlLgoKVHVlIERlYyAyNCAwMDo1OTowNSBNRVQgMTk5NiAgTWFydGluIEJ1Y2sgPG1hcnRpbi0yLmJ1Y2tAc3R1ZGVudC51bmktdWxtLmRlPgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUNoYW5nZWQgWEtfUGFnZV97VXAsRG93bn0gdG8gWEtfe1ByaW9yLE5leHR9IGZvciBYMTFSNQoJY29tcGF0aWJpbGl0eS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIERlYyAyMiAxMzozMDoxOCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtncmFwaGlzYy9tZXRhZmlsZWRydi9tYXBwaW5nLmNdCglBZGRlZCBtYXBwaW5nIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzLyouY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgYSBsb3Qgb2YgV2luMzIgZnVuY3Rpb25zLgoKCSogW21lbW9yeS9oZWFwLmNdCglBZGRlZCBIRUFQX3N0cmR1cEF0b1cgYW5kIEhFQVBfc3RyZHVwV3RvQS4KCgkqIFttaXNjL2xzdHIuY10gW21lbW9yeS9zdHJpbmcuY10KCU1vdmVkIE9FTTwtPkFuc2kgY29udmVyc2lvbiB0byBzdHJpbmcuYy4gRml4ZWQgYSBjb3VwbGUgb2YgYnVncy4KCgkqIFtvYmplY3QvZm9udC5jXQoJQXZvaWQgdXBwZXJjYXNpbmcgZm9udCBuYW1lcy4KCgkqIFt3aW5kb3dzL2hvb2suY10KCVNldCBkcyA9IHNzIGJlZm9yZSBjYWxsaW5nIGhvb2sgcHJvY2VkdXJlLgoKU2F0IERlYyAyMSAyMTo0NDoxNyAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW29iamVjdHMvY29sb3IuY10KCVVzZSBjb2xvcnMgYWxsb2NhdGVkIGJ5IG90aGVyIGNsaWVudHMuIAoKCSogW3dpbmRvd3MvY2FyZXQuY10KCVNldCBkZWZhdWx0IGJsaW5rIHRpbWUgdG8gNTAwLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglEZWxldGUgWCBjb250ZXh0IGJlZm9yZSBYRGVzdHJveVdpbmRvdygpLgoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUZpeGVkIEdldEtleVN0YXRlKCkgb25jZSBtb3JlLgoKRnJpIERlYyAyMCAwODoyNjozMyAxOTk2ICBFcmljIFlvdW5nZGFsZSA8ZXJpY0BzdWIyMzA0LmppYy5jb20+CgoJKiBbZGVidWdnZXIvKi5jXQoJTG90cyBvZiBidWlsdC1pbiBkZWJ1Z2dlciBpbXByb3ZlbWVudHM6IHBhcnNlIFdpbjMyIEVYRXMgZGVidWcKIAlpbmZvcm1hdGlvbiwgZGlzcGxheSBsb2NhbCB2YXJpYWJsZXMsIHNvdXJjZSBmaWxlcyBhbmQgbGluZQogCW51bWJlcnMsIGdldCBzeW1ib2xzIGRpcmVjdGx5IGZyb20gdGhlIFdpbmUgZXhlY3V0YWJsZSwgZXRjLgoKVHVlIERlYyAxNyAyMjozOTo0MiAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW21pc2Mvd2luc29ja19hc3luYy5jXQogCUV4dGVybiBkZWNsYXJhdGlvbiBhZGRlZCBmb3IgaF9lcnJuby4KClR1ZSBEZWMgMTcgMjE6Mjk6MzQgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIHR3byBtb3JlIENCVCBob29rIGNhbGxzOiBIQ0JUX0NMSUNLU0tJUFBFRC9IQ0JUX0tFWVNLSVBQRUQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBEZWMgMTUgMTY6MTg6MTUgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZ3JhcGhpY3MveDExZHJ2L2JpdGJsdC5jXQoJRml4ZWQgQklUQkxUX1N0cmV0Y2hJbWFnZSBmb3IgcGFydGlhbGx5IGNvdmVyZWQgb3IgaW52ZXJ0ZWQKCWJpdG1hcHMuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUZpeGVkIHRoZSB1cHNpZGUtZG93biBiaXRtYXAgcHJvYmxlbS4KClNhdCBEZWMgMTQgMDI6NDk6NTcgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglJc01lbnUgYW5kIFJlbW92ZU1lbnUgYWRkZWQgKHVzZSBleGlzdGluZyBXaW4xNiBmdW5jdGlvbnMpLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQ29ycmVjdGlvbnMgdG8gQklUTUFQSU5GT0hFQURFUiBzdHJ1Y3R1cmUuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglOZXcgZnVuY3Rpb24gR2V0TW9kdWxlRmlsZU5hbWUzMkEgKGhlYXZpbHkgYmFzZWQgb24gb3JpZ2luYWwKCVdpbjE2IHZlcnNpb24pLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJSGFjayB0byBhbGxvdyBmaWxlcyB3aXRoIHNob3J0IFBFIGhlYWRlciB0byBiZSBsb2FkZWQgKGUuZy4KCUNPTURMRzMyLkRMTCBmcm9tIFdpbjMycykuCgoJKiBbbWlzYy93aW5zb2NrX2FzeW5jLmNdCgkjaWYgb3V0IEVJRFJNIGNhc2UgKG5vdCBwcmVzZW50IGluIEZyZWVCU0QpLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglSZW1vdmUgdHJhaWxpbmcgY29tbWVudHMgZnJvbSAucyBmaWxlcyBnZW5lcmF0ZWQgYnkgYnVpbGQKCWFzIHRoZXNlIGJyZWFrIGFzc2VtYmx5IHdoZW4gbm90IHJ1biB0aHJvdWdoIHByZS1wcm9jZXNzb3IuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXSBbaWYxNjMyL2dkaTMyLnNwZWNdCglOZXcgZnVuY3Rpb24gUG9seWxpbmUzMiAtIGJhc2VkIG9uIG9yaWdpbmFsIFBvbHlsaW5lLiBOZWVkcwoJbWV0YWZpbGUgc3VwcG9ydCBhZGRpbmcgc3RpbGwuCgpGcmkgRGVjIDEzIDEzOjA0OjA2IDE5OTYgIEJydWNlIE1pbG5lciA8QnJ1Y2UuTWlsbmVyQGdlbmV0aWNzLnV0YWguZWR1PgoKCSogW3dpbjMyL2ZpbmRmaWxlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCglGaW5kRmlyc3RGaWxlMzJBKCk6IFVzZSBkb3MgY3VycmVudCBkaXJlY3RvcnkgZm9yIGRyaXZlIHByZWZpeGVzLgoJRmluZE5leHRGaWxlMzJBKCk6IEZpbGwgaW4gZmlsZSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24uCglJbXBsZW1lbnQgRmluZEZpcnN0RmlsZTE2LCBGaW5kTmV4dEZpbGUxNiwgRmluZENsb3NlMTYuCgoJKiBbZmlsZXMvZHJpdmUuY10KCUdldEN1cnJlbnREaXJlY3RvcnkzMkEgLSBGaXggcHJvYmxlbSB3aXRoIG51bGwgM3JkIGNoYXJhY3RlciBpbgoJc3RyaW5nLgoKVHVlIERlYyAxMCAxNDo0OTowNyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFt3aW5kb3dzL3BhaW50aW5nLmNdW3dpbmRvd3MvbWVzc2FnZS5jXQoJRG9uJ3QgdXNlIGxpbmtlZCBsaXN0cyB0byBjYWxsIFNlbmRNZXNzYWdlKCksIGZvciBpdCBtaWdodCBkZXN0cm95CiAJdGhlIGN1cnJlbnQgbGlzdGVudHJ5LgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUZpeGVkIHRlbXBvcmFyeSBmaWxlIHNhdmluZyAocmVuYW1lIGRvZXNuJ3Qgd29yayBhY3Jvc3MKCXBhcnRpdGlvbnMpLgoKCSogW2ZpbGVzLyouY10KCUdldEZ1bGxQYXRoTmFtZSosR2V0RHJpdmVUeXBlMzJBIGZpeGVkLCBDcmVhdGVEaXJlY3RvcnlFeCosCglHZXRWb2x1bWVJbmZvcm1hdGlvbjMyVyBmaXhlZC4KCgkqIFt3aW4zMi9wcm9jZXNzLmNdW2lmMTYzMi9rZXJuZWwuc3BlY11baWYxNjMyL2tlcm5lbDMyLnNwZWNdCglMb2FkTGlicmFyeSogdXBkYXRlZCB0byBuZXcgbmFtaW5nIHN0ZC4sICozMlcgYWRkZWQuCgoJKiBbd2luMzIvY29uc29sZS5jXSBbaW5jbHVkZS93aW5jb24uaF0KCUFkZGl0aW9ucyBmb3IgTlQgY29tbWFuZGxpbmUgZXhlY3V0YWJsZXMuCgoJKiBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9pbml0LmNdCQoJR2V0VXNlck5hbWUzMlcgYWRkZWQsIEdldENvbXB1dGVyTmFtZTMyVyBhZGRlZCwKCUdldFN0YXJ0dXBJbmZvMzJXIGFkZGVkLCBHZXRTeXN0ZW1JbmZvIHVwZGF0ZWQgdG8gTlQgc3RhbmRhcmQuCgoJKiBbd2luZG93cy9tc2dib3guY11bbWlzYy9zaGVsbC5jXVt3aW5kb3dzL2dyYXBoaWNzLmNdCglNZXNzYWdlQm94MzJXLCBTaGVsbEFib3V0MzJXLCBDb21tYW5kTGluZVRvQXJndlcsIFBvbHlnb24zMiBhZGRlZC4KCgkqIFttaXNjL2NydGRsbC5jXVtpbmNsdWRlL2NydGRsbC5oXVtpZjE2MzIvY3J0ZGxsLnNwZWNdW21pc2MvbnRkbGwuY10KCSAgW2lmMTYzMi9udGRsbC5zcGVjXQoJTG90IG9mIG5ldyB1bmljb2RlIGZ1bmN0aW9ucyBhZGRlZCAobmVlZGVkIGZvciBOVCkuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglOdEN1cnJlbnRUZWIgYWRkZWQuCgpUdWUgRGVjIDEwIDIyOjM5OjMzIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXQoJUmV3cm90ZSBmdW5jdGlvbiBUcmFuc2xhdGVBY2NlbGVyYXRvcigpLgoKTW9uIERlYyAgOSAxNDo1MjoxMyAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIAoJREVGV05EX1NldFRleHQoKTogU2V0IGljb24gbmFtZS4KClN1biBEZWMgIDggMjM6MzA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19hc3luYy5jXQoJICBbaWYxNjMyL3dpbnNvY2suc3BlY10KCUlQQyByZXNvdXJjZSBjbGVhbnVwLCBidWdmaXhlcy4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9kZWZkbGcuY10KCU1vcmUgRGVmRGxnUHJvYygpIGZpeGVzLgoKU3VuIERlYyAgOCAxNDowMTo0MiAxOTk2ICBWYWRpbSBTdHJpemhldnNreSAgPHN0cml2QG1zLmNvbT4KCgkqIFttaXNjL2NsaXBib2FyZC5jXSBbb2JqZWN0cy9mb250LmNdIFt3aW4zMi9pbml0LmNdCiAJICBbd2luMzIvbmV3Zm5zLmNdIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglBZGRlZCBhIGZldyBXSU4zMiBmdW5jdGlvbnMgd2hpY2ggbmVlZGVkIHRvIHJ1biBzb21lIHdpbjMyCglhY2Nlc3Nvcmllcy4gQ2xvY2sgc2hvdWxkIG5vdyB3b3JrIGFsbW9zdCBhcyB3ZWxsIGFzIDE2IGJpdCB2ZXJzaW9uLgoJQWRkOiBSZWdpc3RlckNsaXBib2FyZEZvcm1hdDMyVyBHZXRUZXh0RXh0ZW50RXhQb2ludDMyKgoJICAgICBHZXRNb2R1bGVIYW5kbGVXLCBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzIChlbXB0eSBzdHViKSwKCSAgICAgUG9seWdvbjMyCglGaXg6IFBvbHlnb24xNiBwb3NzaWJsZSBtZW1vcnkgbGVhayBvbiBlcnJvciByZXR1cm4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBEZWMgIDggMTQ6NTE6NTcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgY2hlY2sgdG8gc2VlIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBidWlsZGluZyBhIERMTCB3aGVuCgl0aGUgLS13aXRoLWRsbCBvcHRpb24gaXMgdXNlZC4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglEb24ndCBzZW5kIExCTl9TRUxDSEFOR0UgdG9vIG9mdGVuLgoJQWRkZWQgV01fQ0hBUlRPSVRFTSBzdXBwb3J0LgoKCSogW01ha2UucnVsZXMuaW5dIFtsaWJyYXJ5L01ha2VmaWxlLmluXQoJQnVpbGQgd2luZXN0dWIubyBhbmQgbGluayBpdCB3aXRoIFdpbmVsaWIgcHJvZ3JhbXMuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglBZGRlZCBzdXBwb3J0IGZvciAnJiYnIGluIERyYXdUZXh0KCkuCgoJKiBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIC1vIG9wdGlvbi4KClNhdCBEZWMgNyAxMjowNzowNyAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KCgkqIFt3aW4zMi90aHJlYWQuY10KCUdldEN1cnJlbnRUaHJlYWQoKTogcmV0dXJuIC0yIChjdXJyZW50IHRocmVhZCBwc2V1ZG8taGFuZGxlKS4KCUdldEN1cnJlbnRUaHJlYWRJZCgpOiByZXR1cm4gR2V0Q3VycmVudFRhc2soKS4KCgkqIFtvYmplY3RzL2ZvbnQuY10gW2lmMTYzMi9nZGkzMi5zcGVjXQoJR2V0VGV4dEV4dGVudFBvaW50MzJ7QSxXfUJ1Z2d5KCk6IGZvciBmdXR1cmUgYnVnLWNvbXBhdGliaWxpdHkuCgoJKiBbd2luMzIvZmluZGZpbGUuY10KCUZpbmRDbG9zZSgpOiBpZ25vcmUgSU5WQUxJRF9IQU5ETEVfVkFMVUUgKGxpa2UgV2luOTUpLgoKCSogW3dpbmRvd3MvaG9vay5jXSBbaW5jbHVkZS9ob29rLmhdIFtpZjE2MzIvdXNlci5zcGVjXQoJICBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbd2luZG93cy9mb2N1cy5jXSBbd2luZG93cy9tZXNzYWdlLmNdCgkgIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3Mvd2lucG9zLmNdCglIb29rcyByZXdyaXR0ZW4gdG8gc3VwcG9ydCBXaW4zMi4KCgkqIFttaXNjL3dpbnNvY2suY10KCVdJTlNPQ0tfc2VsZWN0KCk6IG5lZWQgdG8gcHV0IHNvY2tldHMgd2l0aCBlcnJvcnMgaW50byBleGNlcHRmZHMuCglXSU5TT0NLX3NvY2tldCgpOiBmaXggZXJyb3IgcmV0dXJuLgoKCSogW3dpbmRvd3Mvd2luLmNdCglTZXRXaW5kb3dXb3JkKCk6IGNhbGwgU2V0UGFyZW50IG9uIEdXV19IV05EUEFSRU5ULgoKV2VkIERlYyAgNCAyMjowMzowNSAxOTk2ICBBbmRyZXcgVGF5bG9yIDxhdGF5bG9yQGNhZHZpc2lvbi5jb20+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglDaGVjayBpZiBidWYgaXMgTlVMTCBiZWZvcmUgY29weWluZyBzdHJpbmcgaW4gR2V0RnVsbFBhdGhOYW1lMzJBKCkuCgpXZWQgRGVjICA0IDIxOjQwOjU5IDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgogICAgICAgICogW2dyYXBoaWNzL3dpbmcuY10gW2lmMTYzMi93aW5nLnNwZWNdCglJbXBsZW1lbnRlZCBtYW55IFdpbkcgZnVuY3Rpb25zLCBidXQgc29tZSBkb24ndCBzZWVtIHRvCgl3b3JrIGNvcnJlY3RseSAocHJvYmFibHkgZHVlIHRvIHRoZSBvbmUgbm90IGRvbmUpLgoJCldlZCBEZWMgIDQgMDM6Mzg6MjUgMTk5NiAgTGVlIEphZWtpbCA8anVyaWFAcHVtYS5rYWl0ZWNoLnJlLmtyPgoKCSogW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50ZWQgYSBmZXcgbW9yZSBvZiB0aGUgU3lzdGVtUGFyYW1ldGVyc0luZm8oKSBjYXNlcy4KClN1biBEZWMgIDEgMjI6MzA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHRyYW50b3IucGhhcm0uc3VueXNiLmVkdT4gCgoJKiBbY29udHJvbHMvYnV0dG9uLmNdCglJbXByb3ZlZCBmb2N1cyByZWN0YW5nbGUgcGFpbnRpbmcuCgoJKiBbd2luZG93cy9kaWFsb2cuY10gW3dpbmRvd3MvZGVmZGxnLmNdCglGaXhlZCBJRTMuMCBwcm9ibGVtcyB3aXRoIERXTF9NU0dSRVNVTFQuCgpTdW4gRGVjICAxIDIwOjQ5OjMyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJQ2hhbmdlZCBlcnJvciBoYW5kbGluZyBpbiBQUk9GSUxFX1NldFN0cmluZygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgTm92IDMwIDE5OjIxOjE3IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbmZpZ3VyZV0KCVJlLWdlbmVyYXRlZCB3aXRoIGF1dG9jb25mIDIuMTEuIExldCBtZSBrbm93IGlmIHlvdSBoYXZlCglwcm9ibGVtcy4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdIFtjb250cm9scy9vbGRsYm94LmNdCglMaXN0Ym94ZXMgcmV3cml0dGVuIGZyb20gc2NyYXRjaC4gTW92ZWQgb2xkIGNvZGUgc3RpbGwgdXNlZCBieQoJY29tYm9ib3hlcyB0byBvbGRsYm94LmMKCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglVc2UgdGVtcG9yYXJ5IGZpbGUgd2hlbiBzYXZpbmcgcmVnaXN0cnkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgRGxnRGlyTGlzdCgpIGFuZCBEbGdEaXJMaXN0Q29tYm9Cb3goKS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIHRyYW5zbGF0aW9uIGZvciBsaXN0Ym94IFdpbjMyIG1lc3NhZ2VzLgoKU2F0IE5vdiAzMCAyMTowMDowMCBBbGV4IEtvcm9ia2EgPGFsZXhAdHJhbnRvci5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10gW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4ZWQgc29tZSBpbmNvbXBhdGliaWxpdGllcyB3aXRoIENUTDNEIERMTC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJTWFkZSBkaWFsb2cgd2luZG93cyBmaXQgaW50byB0aGUgZGVza3RvcC4KCgkqIFttaXNjL3dpbnNvY2suY10gW21pc2Mvd2luc29ja19hc3luYy5jXQoJTmV3IFdpbnNvY2sgZW5naW5lLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJR2V0TWVzc2FnZSgpIGZpeGVzLgoKCSogW3dpbmRvd3MvcXVldWUuY10gW3dpbmRvd3MvaG9vay5jXSBbd2luZG93cy93aW4uY10KCVNldE1lc3NhZ2VRdWV1ZSgpIGZpeGVzLgoKRnJpIE5vdiAyOSAxMDoyNToxMiAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW29iamVjdHMvdGV4dC5jXQoJRHJhd1RleHQxNigpOiBGaXhlZCByZXR1cm4gdmFsdWUuCgpUdWUgTm92IDI2IDE0OjQ3OjA5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10gWyovKl0KCUFkZGVkIFdpbjMyIHByb2ZpbGUgZnVuY3Rpb25zLCB1cGRhdGVkIHRvIG5ldyBuYW1pbmcgc3RhbmRhcmQuCgoJKiBbb2JqZWN0cy9mb250LmNdIFtpZjE2MzIvdGh1bmsuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgRW51bUZvbnRzMzIqLCBFbnVtRm9udEZhbWlsaWVzRXgqLCBjaGFuZ2VkIHByb3RvdHlwZXMgYW5kCglzdHJ1Y3R1cmVzLgoKCSogW21pc2Mvb2xlMm5scy5jXSBbaWYxNjMyL3RodW5rLmNdCglBZGRlZCBFbnVtU3lzdGVtTG9jYWxlcygpICh3aW5oZWxwLmV4ZSkuCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJQWRkZWQgV2luZG93cyAzLjEgcmVnaXN0cnkgbG9hZGVyIHN1cHBsaWVkIGJ5IFRvciBTanh3YWxsLCB0b3JAc24ubm8KCgkqIFt3aW4zMi9maWxlLmNdCglQYXJ0aWFsbHkgZml4ZWQgQ3JlYXRlRmlsZU1hcHBpbmcoKSwgYWRkZWQgVW5tYXBWaWV3T2ZGaWxlKCkuCgpTYXQgTm92IDIzIDIzOjM2OjA1IDE5OTYgIFJvbmFuIFdhaWRlICA8d2FpZGVyQHdhaWRlci5pZT4KCgkqIFttaXNjL3NoZWxsLmNdCglGaXhlZCBzb21lIEZJWE1FcyByZWxhdGluZyB0byBTaGVsbEV4ZWMoKSBhbmQgRmluZEV4ZWN1dGFibGUoKS4KCgkqIFttaXNjL21haW4uY10KCUltcGxlbWVudGVkIGEgZmV3IG1vcmUgb2YgdGhlIFN5c3RlbVBhcmFtZXRlcnNJbmZvKCkgY2FzZXMuCgpUdWUgTm92IDE5IDAxOjI0OjM0IDE5OTYgIFBoaWxpcHBlIERlIE11eXRlciAgPHBoZG1AaW5mby51Y2wuYWMuYmU+CgoJKiBbaW5jbHVkZS9rZXlib2FyZC5oXQoJTmV3IGZpbGUsIG5ldyBtYWNybyBXSU5FX1ZLRVlfTUFQUElOR1MgKHVzaW5nIGNvZGUgdGFrZW4gZnJvbSBldmVudC5jKS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU5ldyBbVktfQSwgVktfWl0gYW5kIFtWS18wLCBWSzldIG1hY3Jvcy4KCgkqIFttaXNjL2tleWJvYXJkLmNdCglGaXhlcyBpbiBLZXlUYWJsZSBhbmQgVG9Bc2NpaS4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfaW5pdCA6IEdpdmUgZGVmYXVsdCB2YWx1ZSBmb3IgTVNXSU4gInN5c3RlbSIgZm9udC4KCUZPTlRfTWF0Y2hGb250IDogRG8gbm90IHRyeSBldmVyeSBzaXplIG9mIGEgZm9udCBmYW1pbHkgaWYgdGhlCglmYW1pbHkgZG9lcyBub3QgZXhpc3QuCgoJKiBbd2luZG93cy9ldmVudC5jXQoJbGFzdEV2ZW50Q2hhciBoYWNrIHJlbW92ZWQuCglLZXlTdGF0ZVRhYmxlIHJlcGxhY2VkIGJ5IElucHV0S2V5U3RhdGVUYWJsZSAobWFpbnRhaW5lZCBpbiBldmVudC5jKQoJYW5kIFF1ZXVlS2V5U3RhdGVUYWJsZSAobWFpbnRhaW5lZCBpbiBtZXNzYWdlLmMpLgoJRVZFTlRfa2V5IDogQ29ycmVjdGlvbnMgdG8gdGhlIGV4dGVuZGVkIGJpdCBzZXR0aW5nLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9rZXlib2FyZC5jXQoJSW1wbGVtZW50YXRpb24gb2YgYSBuZXcgUXVldWVLZXlTdGF0ZVRhYmxlIDogdGFibGUgb2Yga2V5IHN0YXRlcwoJdmFsaWQgd2hlbiBtZXNzYWdlcyBhcmUgcmV0cmlldmVkIGJ5IEdldE1lc3NhZ2Ugb3IgUGVla01lc3NhZ2UsCglhbmQgdmFsaWQgZm9yIFRyYW5zbGF0ZU1lc3NhZ2UuCglUcmFuc2xhdGVNZXNzYWdlIDogQ29udmVydCBXTSpLRVkgbWVzc2FnZXMgdXNpbmcgUXVldWVLZXlTdGF0ZVRhYmxlCglhbmQgVG9Bc2NpaS4KCQpNb24gTm92IDE4IDE2OjU5OjAxIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgoJKiBbZ3JhcGhpY3MvTWFrZWZpbGUuaW5dIFtncmFwaGljcy93aW5nLmNdCgkgIFtpZjE2MzIvd2luZy5zcGVjXQoJU29tZSBmdW5jdGlvbnMgZm9yIFdpbkcgc3VwcG9ydCwgbW9zdGx5IGVtcHR5IHN0dWJzLgoKCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglNYW55IGZ1bmN0aW9ucyBhZGRlZCB0byBDUlRETEwsIG1vc3RseSBjYWxscyB0byBVbml4IEMgbGlicmFyeS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIE5vdiAxNyAxNTowMTo0NSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtncmFwaGljcy9iaXRibHQuY10gW2dyYXBoaWNzL3gxMWRydi9iaXRibHQuY10KCU1vdmVkIEJpdEJsdCBvcGVyYXRpb25zIHRvIHRoZSBuZXcgZ3JhcGhpY3MgZHJpdmVyCglpbnRlcmZhY2UuIEltcGxlbWVudGVkIFBhdEJsdDMyLCBCaXRCbHQzMiBhbmQgU3RyZXRjaEJsdDMyLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCVVuaWZpZWQgTWVtTWFuSW5mbygpIGFuZCBHbG9iYWxNZW1vcnlTdGF0dXMoKS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUZpeGVkIEV4dFRleHRPdXQoKSB0byBhbHdheXMgdXNlIHBoeXNpY2FsIGNvb3JkcyBmb3IgY2xpcCByZWN0LgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglJbXBsZW1lbnRlZCBEbGdEaXJTZWxlY3RFeCgpIGFuZCBXaW4zMiB2ZXJzaW9uIG9mIERsZ0RpclNlbGVjdCouCgoJKiBbd2luZG93cy9ldmVudC5jXQoJQXZvaWQgYnVzeS1sb29waW5nIGluIEVWRU5UX1dhaXRYRXZlbnQgd2hlbiBubyB0aW1lciBpcyBwZW5kaW5nCgkodGhhbmtzIHRvIFRob21hcyBLb2VuaWcpLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCU1vdmVkIHVwZGF0ZSByZWdpb24gY2xpcHBpbmcgZm9yIENTX1BBUkVOVERDIHdpbmRvd3MgdG8gQmVnaW5QYWludCgpLgoJCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBTY3JvbGxXaW5kb3coKSBhbmQgU2Nyb2xsREMoKS4KClR1ZSBOb3YgMTIgMDk6NTI6MTcgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvKi5jXSBbd2luMzIvZmlsZS5jXQoJU29tZSB3aW4zMiBmaWxldGltZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhZGRlZC4KCUZpeGVkIGJlaGF2aW91ciB3aXRoIERPUyBkcml2ZXMgcG9pbnRpbmcgdG8gVU5JWCAvCglTZXRDdXJyZW50RGlyZWN0b3J5KCkgbWF5IGFsc28gZ2V0IFg6XHh4eCBwYXRocy4KCUZpeGVkIEZJTEVfT3BlbiB3aGVuIGNhbGxlZCBmcm9tIENyZWF0ZUZpbGUoKS4KCUFkZGVkIEdldEZpbGVTaXplKCksIE1hcFZpZXdPZkZpbGUoKSwgU2V0RmlsZVRpbWUoKSwgR2V0RmlsZVRpbWUoKS4KCgkqIFttaXNjL2NydGRsbC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgc29tZSBuZXcgZnVuY3Rpb25zLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCVNvbWUgdGh1bmtzIGludG8gd2luMTYgY29kZSBhZGRlZC4KCgkqIFt3aW4zMi9pbml0LmNdCglBZGRlZCBHZXRTeXN0ZW1JbmZvKCksIHJlbW92ZWQgR2V0TW9kdWxlRmlsZU5hbWUoKSBzdHViLgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXSBbaWYxNjMyL3RodW5rLmNdCglBZGRlZCBFbnVtU3lzdGVtQ29kZVBhZ2VzKiAodW50ZXN0ZWQpLgoKCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL3RodW5rLmNdCglBZGRlZCBFbnVtRm9udEZhbWlsaWVzMzIqLgoJCk1vbiBOb3YgMTEgMTQ6NTA6MjQgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3MvbWRpLmNdCglEb24ndCBkZWxldGUgdGhlIE1ESSBgd2luZG93cycgbWVudSBpZiBpdCdzIGFscmVhZHkgYmVlbiBkZWxldGVkLgoKCSogW21pc2MvZXhlYy5jXQoJTm90ZXBhZCBhbHdheXMgY2FsbHMgV2luSGVscCguLiwgSEVMUF9RVUlULCAuLi4pIGF0IHRlcm1pbmF0aW9uCiAJYW5kIGNvbXBsYWlucyBpZiBpdCByZXR1cm5zIEZBTFNFLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglHZXQgbWF4aW1pemVkIE1ESSBjaGlsZCdzIG5vbmNsaWVudCBhcmVhIHJlZHJhd24gYWZ0ZXIgcmVzaXplLgoKVGh1IE5vdiAgNyAxMzozMjozNCAxOTk2ICBMZWUgSmFla2lsIDxqdXJpYUBzZW9kdS5jby5rcj4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglVc2UgL3Byb2MgZmlsZXN5c3RlbSBmb3IgR2xvYmFsTWVtb3J5U3RhdHVzKCkgb24gTGludXguCgpNb24gTm92ICA0IDE4OjMwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9ldmVudC5jXQoJQWRkZWQgT2ZmaVgtc3R5bGUgZmlsZSBkcm9wIGhhbmRsaW5nLiBGaWxlIHBhdGhzIG11c3QgYmUKCURPUy1tYXBwYWJsZSBieSBXaW5lICh2aWEgd2luZS5jb25mKS4KCgkqIFtjb250cm9scy9jb21iby5jXQogICAgICAgIEFkZGVkIFdNX0dFVFRFWFQgaGFuZGxlci4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUFkZGVkIFJlc2l6ZVBhbGV0dGUoKSAodW50ZXN0ZWQpLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJSW1wbGVtZW50ZWQgaWNvbiB0byBjdXJzb3IgY29udmVyc2lvbi4KCgkqIFtvYmplY3RzL2NvbG9yLmNdCglGaXhlZCBjcmFzaCBvbiBzdGFydHVwIHdoZW4gbm8gY29sb3JjZWxscyBhcmUgd3JpdGVhYmxlLgoKTW9uIE5vdiAgNCAwMDo0OTo0MSAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW3JjL3dpbmVyYy5jXQoJQWRkZWQgc3VwcG9ydCBmb3Igd2luMzIgb3V0cHV0LgoKCSogW2xpYnJhcnkvbGlicmVzLmNdIFtpbmNsdWRlL2xpYnJlcy5oXSBbbG9hZGVyL3Jlc291cmNlLmNdCglSZW5hbWVkIExJQlJFU19GaW5kUmVzb3VyY2UgdG8gTElCUkVTX0ZpbmRSZXNvdXJjZTE2LgoJQWRkZWQgTElCUkVTX0ZpbmRSZXNvdXJjZTMyLgoKU3VuIE5vdiAzIDIxOjIxOjQ1IDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgoJKiBbbG9hZGVyL2J1aWx0aW4uY10gW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi93aW5nLnNwZWNdCglBZGRlZCB0aGUgc3BlYyBmaWxlIGZvciBXaW5HLCBpdCdzIG9ubHkgc3R1YiBmb3Igbm93LCBidXQgaXQKCXNob3VsZCBiZSBlYXN5IHRvIGRvIGJ5IHNvbWVvbmUgd2l0aCBXaW5kb3dzIHByb2dyYW1taW5nCglrbm93bGVkZ2UuIFNlZTogZnRwLm1pY3Jvc29mdC5jb20vU29mdExpYi9NU0xGSUxFUy93aW5nMTAuZXhlLgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkIHNvbWUgc3RyaW5nIGFuZCBtZW1vcnkgZnVuY3Rpb25zIHRvIG1ha2Ugc2Z4ZWQ5NS5leGUgKG9mCiAJV2FyY3JhZnQgMikgYWxtb3N0IHdvcmsuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBOb3YgIDIgMTI6NTA6NDAgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglBZGRlZCBsb25nIGZpbGUgbmFtZSBtYXNrIGluIERPU0ZTX0ZpbmROZXh0KCkuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdIFtsb2FkZXIvdGFzay5jXQoJTW92ZWQgV2luMzIgdGFzayBzdGFydHVwIGludG8gVEFTS19DYWxsVG9TdGFydCgpLgoKCSogW29iamVjdHMvZGMuY10KCUZpeGVkIFNldERDU3RhdGUoKSBmb3IgbWVtb3J5IERDICh0aGFua3MgdG8gQ29uc3RhbnRpbmUKCVNhcHVudHpha2lzIGZvciBzcG90dGluZyB0aGlzIG9uZSkuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUZpeGVkIFdJTlBPU19Gb3JjZVhXaW5kb3dSYWlzZSgpIHRvIHByZXNlcnZlIGNvcnJlY3QgWi1vcmRlci4KCgkqIFsqLypdCglBZGRlZCBXaW4zMiB2ZXJzaW9uIGZvciBtYW55IGdyYXBoaWNzIGZ1bmN0aW9ucy4KClRodSBPY3QgMzEgMTA6MDA6MTggMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQlVUVE9OX0NoZWNrQXV0b1JhZGlvQnV0dG9uKCkgdW5jaGVja3Mgb25seSBhdXRvIHJhZGlvIGJ1dHRvbnMuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJRU1fR0VUU0VMIHJlc3VsdCBzaG91bGQgaGF2ZSBISVdPUkQocmVzdWx0KSA+PSBMT1dPUkQocmVzdWx0KTsgb2xkCglFRElUX0VNX0dldFNlbCgpIHJlbmFtZWQgdG8gRURJVF9HZXRTZWwoKS4gCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCURTX0xPQ0FMRURJVCBpcyBhIGRpYWxvZyBzdHlsZSBub3QgYW4gZWRpdCBzdHlsZS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCVN0b3Agc3RhY2sgdHJhc2hpbmcgd2hlbiB3bmRQdHItPnRleHQgPT0gTlVMTC4KClR1ZSBPY3QgMjkgMjM6MzU6MDQgMTk5NiAgIENvbnN0YW50aW5lIFAgU2FwdW50emFraXMgPGNzYXB1bnR6QG1pdC5lZHU+CgoJKiBbd2luZG93cy9kY2UuY10KCUdldERDRXgzMiAtIFRoZSBkZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgdG8gdXNlIHRoZSBEQyBjYWNoZSBvcgogCW5vdCBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2YgRENYX1VTRVNUWUxFLgoKU2F0IE9jdCAyNiAxNzozMTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXQoJQWRkZWQgZXJybm8uaCB0byAjaW5jbHVkZXMKCgkqIFt0b29scy9tYWtlZGVwLmNdCglDbG9zZSBmaWxlcyBvbmNlIHRoZXkgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE9jdCAyMiAyMDowOTo1MiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFsqL01ha2VmaWxlLmluXSBbdG9vbHMvbWFrZWRlcC5jXQoJTmV3IHByb2dyYW0gdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzOyBzaG91bGQgYmUgZmFzdGVyIGFuZCBtb3JlCglwb3J0YWJsZSB0aGFuICdnY2MgLU1NJy4KCgkqIFsqLypdCglSZXBsYWNlZCBXUEFSQU0gYW5kIEhEQyBieSBleHBsaWNpdGx5LXNpemVkIHR5cGVzLgoKCSogW3dpbmRvd3MvaG9vay5jXQoJRml4ZWQgYnVnIGluIEhPT0tfR2V0SG9vazE2IGZ1bmN0aW9uLgoKVGh1IE9jdCAxNyAwOToxMzo1MCAxOTk2ICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtpbmNsdWRlL2RlYnVnLmhdIFtpbmNsdWRlL3N0ZGRlYnVnLmhdCiAgICAgICAgQWRkZWQgZGVidWcgb3B0aW9uIGZvciB3aW4xNmRydiAoLWRlYnVnbXNnICt3aW4xNmRydikKCgkqIFtncmFwaGljcy93aW4xNmRydi9pbml0LmNdCiAgICAgICAgT25seSBlbmFibGUgQ3JlYXRlREMgaWYgcHJpbnRlcj1vbiBzcGVjaWZpZWQgaW4gd2luZSBzZWN0aW9uIG9mCiAJd2luZS5jb25mLgogCXByaW50ZnMgY2hhbmdlZCB0byBkcHJpbnRmX3dpbjE2ZHJ2LgoJU29tZSB0aWR5aW5nIHVwLgoKCSogW2luY2x1ZGUvZ2RpLmhdIFtncmFwaGljcy94MTFkcnYvY2xpcHBpbmcuY10KCSAgW2dyYXBoaWNzL3gxMWRydi9NYWtlZmlsZS5pbl0KICAgICAgICBNb3ZlZCBTZXREZXZpY2VDbGlwcGluZyBpbnRvIGRyaXZlcnMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgMTMgMTU6MzI6MzIgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbTWFrZS5ydWxlcy5pbl0gWyovTWFrZWZpbGUuaW5dCglNYWRlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgZnJvbSBhIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBzb3VyY2UKCWRpcmVjdG9yeS4KCgkqIFtncmFwaGljcy9tZXRhZmlsZWRydi9pbml0LmNdIFtpbmNsdWRlL21ldGFmaWxlZHJ2LmhdCgkgIFtvYmplY3RzL21ldGFmaWxlLmNdIFtvYmplY3RzL2RjLmNdCglOZXcgZ3JhcGhpY3MgZHJpdmVyIGZvciBtZXRhZmlsZXMuCgoJKiBbaWYxNjMyL3RodW5rLmNdCglBZGRlZCB0aHVua3MgZm9yIFNldFdpbmRvd3NIb29rIGFuZCBTZXREQ0hvb2suCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVkIEdldE5leHREbGdHcm91cEl0ZW0gYW5kIEdldE5leHREbGdUYWJJdGVtIHRvIHNraXAgZGlzYWJsZWQKCWl0ZW1zLgoKCSogWyovKl0KCVJlbW92ZWQgbm9uIFdpbjMyLWNsZWFuIHR5cGVzIEhBTkRMRSwgSEJJVE1BUCwgSEJSVVNILCBIRk9OVCwKIAlISU5TVEFOQ0UsIEhNRU5VLCBIUkdOIGFuZCBIVEFTSy4KCldlZCBPY3QgIDkgMTQ6NTk6NDUgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgIDxkb3Jzc2VsQHJ1bGhtMS5MZWlkZW5Vbml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUZpeGVkIEVkaXRXbmRQcm9jKCkgdG8gZmFsbCBiYWNrIHRvIERlZlduZFByb2MoKSB3aGVuIHRoZQoJZWRpdCBzdGF0ZSBzdHJ1Y3R1cmUgaXMgbm90IGF2YWlsYWJsZS4KCldlZCBPY3QgIDIgMTQ6MDA6MzQgMTk5NiAgSHV3IEQuIE0uIERhdmllcyAgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy9tZGkuY10KCUFkanVzdFdpbmRvd1JlY3RFeDE2KCkgc2hvdWxkIG9ubHkgdGFrZSBub3RpY2Ugb2YgdGhlIHN0eWxlcwogCVdTX0RMR0ZSQU1FLCBXU19CT1JERVIsIFdTX1RISUNLRlJBTUUgYW5kCiAJV1NfRVhfRExHTU9EQUxGUkFNRS4gVGhhbmtzIHRvIEFsZXggS29yb2JrYS4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUZpeGVkIHR5cG8gaW4gU2hvd1Njcm9sbEJhcjMyKCkuCgpTdW4gQXVnIDI1IDIwOjE4OjU2IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbaWYxNjMyL3dpbm1tLnNwZWNdCglBZGRlZCBTZXRQYXJlbnQgYW5kIHNuZFBsYXlTb3VuZEEuCgkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgU2VwIDI3IDE0OjE4OjQyIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJRml4ZWQgZm9jdXMgcmVjdGFuZ2xlIHNpemUgYW5kIGNsaXBwaW5nLgoKCSogW2NvbnRyb2xzL3Njcm9sbC5jXQoJQ29udmVydGVkIHRvIFdpbjMyIGFuZCBhZGRlZCBzdXBwb3J0IGZvciBzY3JvbGwgcGFnZS4KCUNvbXBsZXRlZCBTZXRTY3JvbGxJbmZvKCkgYW5kIGltcGxlbWVudGVkIG90aGVyIFdpbjMyIGZ1bmN0aW9ucy4KCgkqIFtmaWxlcy9maWxlLmNdCglSZW1vdmVkIEZJTEVfUmVhZCgpICh1c2UgX2xyZWFkMzIgaW5zdGVhZCkuCgoJKiBbb2JqZWN0cy9kY2UuY10gW2luY2x1ZGUvZGNlLmhdCglBbGxvY2F0ZSBEQ0Ugb24gdGhlIFdpbjMyIGhlYXAsIGFuZCB1c2UgcG9pbnRlcnMgaW5zdGVhZCBvZgoJaGFuZGxlcy4KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgREMgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3MvcGFpbnRpbmcuY10KCUF0dGVtcHQgdG8gbWFrZSBDU19QQVJFTlREQyBzdHlsZSB3b3JrIGFnYWluLgoKV2VkIFNlcCAyNSAyMzo0MDo1MiAxOTk2IEFsZXggS29yb2JrYSA8YWxleEB0cmFudG9yLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kY2UuY10gW3dpbmRvd3Mvd2lucG9zLmNdCglPdmVycmlkZSBTYXZlVW5kZXIgYXR0cmlidXRlIHdoZW4gcGFpbnRpbmcgdG9vayBwbGFjZQoJaW4gYSB3aW5kb3cgYmVsb3cuIEZvcmNlIFggdG8gcmFpc2UgYWN0aXZhdGVkIHdpbmRvdyAKCWluIHNlYW1sZXNzIG1vZGUuCgoJKiBbbWlzYy9jbGlwYm9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KCVRyYW5zbGF0aW9uIGJldHdlZW4gRE9TIGFuZCBVbml4IHRleHQgZm9ybWF0cyBhbmQgc2V2ZXJhbAoJb3RoZXIgZml4ZXMgZm9yIHRoZSBzdWRkZW4gc2VsZWN0aW9uIGxvc3MuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglBcHBseSAiZmlyc3QiIGFuZCAibGFzdCIgd2hlbiBjaGVja2luZyBmb3IgV01fUVVJVCBpbiAKICAgICAgICBNU0dfUGVla01lc3NhZ2UoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJUmVhcnJhbmdlZCBEZXN0cm95V2luZG93KCkgdG8gZml0ICJXaW5kb3dzIEludGVybmFscyIKCWRlc2NyaXB0aW9uLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCU1pc2MuIGZpeGVzIHRvIENCVCBob29rIGNhbGxzLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW21pc2MvdXNlci5jXQoJRml4dXAgcmVzaWRlbnQgcG9wdXAgbWVudSB3aW5kb3cgc28gdGhhdCBpdCBkb2Vzbid0IGdldAoJZGVzdHJveWVkIGJ5IFVTRVJfQXBwRXhpdCgpLgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci90YXNrLmNdIFt3aW5kb3dzL2V2ZW50LmNdCglQcm9jZXNzICJ1bnNhZmUiIFggZXZlbnRzIG91dHNpZGUgdGhlIHNjaGVkdWxlciB0byBwcmV2ZW50CglkZWFkbG9ja3MuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3F1ZXVlLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJTG90cyBvZiBmaXhlcyBmb3IgYmV0dGVyIFdpbjE2IG11bHRpdGFza2luZy4KCldlZCBTZXAgMjUgMjA6MzY6MzAgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBzb21lIG1pc3NpbmcgSE9PSyBkZWZpbmVzLgoKCSogW21pc2Mvc2hlbGwuY11baWYxNjMyL3NoZWxsMzIuc3BlY11baW5jbHVkZS9zaGVsbC5oXQoJU0hHZXRGaWxlSW5mb0Egc3R1YiBhZGRlZCAod2luOTUgbXBsYXllci5leGUgL3BsYXkgYmxhLmF2aSkuCgoJKiBbd2luMzIvY29uc29sZS5jXVtpbmNsdWRlL3dpbmNvbi5oXQoJR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8sIEdldExhcmdlc3RDb25zb2xlV2luZG93U2l6ZSBhZGRlZC4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglTb21lIG51bGwgcHRyIGZpeGVzLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRml4ZWQgZXhwb3J0ZWQgZnVuY3Rpb24gbG9va3VwLiAobXN2Y3J0MjAuZGxsKQoJQWRkIGRlYnVnc3ltcyBmb3IgZW50cnlwb2ludCwgZXhwb3J0ZWQgZnVuY3Rpb25zIGFuZCBzZWN0aW9ucy4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglNQ0lPcGVuOiBzdXBwb3J0IGZvciBlbGVtZW50IG9wZW5zIChtcGxheWVyLmV4ZSAvcGxheSBibGEuYXZpKS4KCgkqIFtzZXZlcmFsXQoJQWRkZWQgc2V2ZXJhbCBtaXNzaW5nIHRoaW5ncy9zdHVicy9zaW1wbGUgdGh1bmtzIGZyb20gd2luMzIKCXRvIHdpbjE2IGNvZGUuCgpTYXQgU2VwIDIxIDE3OjI3OjQ0IDE5OTYgIE8uRmxlYmJlICA8ZmxlYmJlQHNjaWVuY2UtY29tcHV0aW5nLnVuaS10dWViaW5nZW4uZGU+CgoJKiBbd2luZG93cy9wcm9wZXJ0eS5jXQoJRml4ZWQgZGVidWdnaW5nIG9mIDE2IEJpdCBSZW1vdmVQcm9wKCkuCgoJKiBbZGVidWdnZXIvbWVtb3J5LmNdCglBZGRlZCBERUJVR19jaGVja21hcF9iYWQoKSBmb3IgbGludXguCgpUaHUgU2VwIDE5IDIwOjQ4OjMxIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy9ldmVudC5jXSBbd2luZG93cy9ob29rLmNdCglVc2UgRW5hYmxlSGFyZHdhcmVJbnB1dCgpIGZvciBKb3VybmFsUGxheWJhY2sgaG9vay4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDaGFuZ2VkIGhhbmRsaW5nIG9mIExCX0dFVElURU1SRUNUIGluIGVtcHR5IGxpc3Rib3hlcy4KClRodSBTZXAgMTkgMTM6MzQ6MzUgMTk5NiAgU2xhdmVuIFJlemljICA8ZXNlcnRlQGNzLnR1LWJlcmxpbi5kZT4KCgkqIFttaXNjL21haW4uY10KCUZpeGVzIHRvIFggcmVzb3VyY2VzIGhhbmRsaW5nLgkKCldlZCBTZXAgMTggMDA6MzE6MTUgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10gW2luY2x1ZGUvZ2RpLmhdIFtvYmplY3RzL2RjLmNdCglJbmRpdmlkdWFsIGhhbmRsZSB0YWJsZSBjcmVhdGVkIGZvciBlYWNoIG1ldGFmaWxlLiBGaXhlZAogCUdsb2JhbFJlQWxsb2MoKSBidWcgaW4gTUZfQWRkSGFuZGxlREMoKSAod2FzIE1GX0FkZEhhbmRsZUludGVybmFsKS4KCgkqIFt3aW5kb3dzL2dyYXBoaWNzLmNdIFtvYmplY3RzL2RjLmNdCglSZWN0YW5nbGUoKSBjaGFuZ2VkIHRvIHdvcmsgYmV0dGVyIHdpdGggd2lkZSBwZW5zIGFuZCBQU19OVUxMLgoJVXNlIEpvaW5NaXRlci4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJTWFrZSB0aGUgd2hvbGUgKG5vbiBYKSB3aW5kb3cgaW52YWxpZCBvbiByZXNpemUgaWYgQ1NfW1ZIXVJFRFJBVwogCWlzIHNldC4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRqdXN0V2luZG93UmVjdEV4KCkgc2hvdWxkIHBlcmZvcm0gY2FsY3VsYXRpb25zIGV2ZW4gaWYgdGhlCiAJd2luZG93IGlzIG1pbmltaXplZC4KCgkqIFt3aW5kb3dzL21kaS5jXQoJQmV0dGVyIGhhbmRsaW5nIG9mIHN5c3RlbSBidXR0b24gcGFpbnRpbmcuIE1heGltaXplZCB3aW5kb3dzIGNhbgogCWNvbnRhaW4gc2Nyb2xsIGJhcnMuIEljb25zIG5vdyBtYXhpbWl6ZSBwcm9wZXJseS4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXSBbd2luZG93cy9ub25jbGllbnQuY10gW2NvbnRyb2xzL21lbnUuY10KCUltcHJvdmVkIGdyZXlpbmcgb2YgaXRlbXMgaW4gc3lzdGVtIG1lbnUuIFdNX0lOSVRNRU1VUE9QVVAgbm8KIAlsb25nZXIgY2F1Z2h0IGluIERlZlduZFByb2MsIERFRldORF9Jbml0U3lzTWVudVBvcHVwIG1vdmVkIHRvCiAJbWVudS5jLgoKTW9uIFNlcCAxNiAyMTozMDowMCAxOTk2ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbc2V2ZXJhbCBmaWxlc10KCUZpeCBtaXNzaW5nIGluY2x1ZGVzIGFuZCB3cm9uZyBwcmludGluZyBhcmd1bWVudHMuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRG9uJ3Qgc29ydCBkcml2ZXMgaW4gTGlzdEJveERpcmVjdG9yeSgpLgoJClNhdCBTZXAgMTQgMDk6MDU6NDcgMTk5NiAgUGV0cmkgVHVvbW9sYSA8cHR1b21vbGFAeHM0YWxsLm5sPgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglGaXhlZCBoYW5kbGluZyBvZiBTaGlmdC1UQUIgaW4gZGlhbG9ncy4KClRodSBTZXAgMTIgMTg6MzE6MDAgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0LmQuZy5zYW5kZm9yZEBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUFkZGVkIFNlbGVjdENsaXBSZ24gLSBjYWxsIHdpbjE2IHZlcnNpb24uCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgR2V0QXN5bmNLZXlTdGF0ZSwgR2V0TWVudUl0ZW1JRCBhbmQgR2V0TWVudVN0cmluZ0EuCgoJKiBbaW5jbHVkZS93aW5jb24uaF0KCUFkZGVkIENPT1JEIGFuZCBTTUFMTF9SRUNUIHR5cGVkZWZzLCBtb3ZlZCBDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTwoJb3V0IG9mICNpZiAwIHByb3RlY3RlZCBwb3J0aW9uIG9mIGZpbGUuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglQRV9Jbml0VEVCKCkgLSBUaWR5IHVwLCBidWcgZml4IHRvIHN0YWNrIHBvaW50ZXIgdmFsdWUgKEJvcmxhbmQKCXByb2dyYW1zIG5vdyB3b3JrIGJldHRlcikKCgkqIFt3aW4zMi9jb25zb2xlLmNdCglBZGRlZCBzdHViIGZ1bmN0aW9ucyBmb3IgR2V0Q29uc29sZVNjcmVlbkJ1ZmZlckluZm8gYW5kIAoJR2V0TGFyZ2VzdENvbnNvbGVXaW5kb3dTaXplCgoJKiBbd2luMzIvZmluZGZpbGUuY10KCUZpbmRGaXJzdEZpbGUzMkEoKSAtIHJlbW92ZWQgZXJyb25lb3VzIHN0cmNweQoKCSogW3dpbmRvd3Mva2V5Ym9hcmQuY10KCUdldEFzeW5jS2V5U3RhdGUoKSAtIGJ1ZyBmaXggLSBub3cgcmV0dXJucyB2YWx1ZSBhcyBwZXIgTWljcm9zb2Z0CglzcGVjaWZpY2F0aW9uLiBOQiAtIEkgc3RpbGwgaGF2ZSBkb3VidHMgYWJvdXQgc29tZSBvdGhlciBmdW5jdGlvbnMKCWluIHRoaXMgZmlsZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIFNlcCAxMSAxODowODozMCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCU1pbm9yIGltcHJvdmVtZW50cyBpbiBzZXR0aW5nIGV2ZW50IHRpbWUgaW4gTVNHIHN0cnVjdC4KCgkqIFt3aW5kb3dzL2hvb2suY10KCVJlbW92ZWQgYW4gdXNlbGVzcyAndW5pbXBsZW1lbnRlZCBob29rJyBtZXNzYWdlLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBhIFdIX0NCVCBob29rIGNhbGwgZHVyaW5nIHdpbmRvdyBjcmVhdGlvbjogZ29vZCBmb3IgQ1RMM0QuRExMCgpXZWQgU2VwIDExIDExOjE5OjU2IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXhlZCBpbXBvcnRzIHdpdGggbm8gbmFtZS9vcmRpbmFsIGxpc3QgKE1GQzMwLkRMTCkuCglBZGRlZCBib3JsYW5kIHN0eWxlIC0gb3JkaW5hbCBpbXBvcnQgKHdzb2NrMzIuZGxsKS4KCgkqIFtmaWxlcy9maWxlLmNdIFt3aW4zMi9maWxlLmNdIFtpZjE2MzIva2VybmVsLnNwZWNdCgkgIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJV2luMzIgYW5kIFdpbjE2IGNvZGUgdXNlIHRoZSBzYW1lIGZpbGVoYW5kbGVzL0hGSUxFcy4KCUFkZGVkIFNldEVuZE9mRmlsZSwgTW92ZUZpbGUqLCBkaXZlcnNlICpXIGZ1bmN0aW9ucy4KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCUZpeGVkIGFyZ3VtZW50IDIgdG8gRGxsRW50cnkuCgoJKiBbbWlzYy9jb21tLmNdCglBZGFwdCB0byBmaWxlaGFuZGxpbmcgY2hhbmdlcywgd2luMzIgY29kZSBzdGlsbCBicm9rZW4uCgoJKiBbbWlzYy9yZWdpc3RyeS5jXQoJVXNlIFdpbmUgZmlsZWhhbmRsaW5nLgoJU3RhcnR1cFJlZ2lzdHJ5IHRvIGFkZCBzdGFydHVwLWRldGVjdGVkIHJlZ2lzdHJ5IGVudHJpZXMuCgoJKiBbbWlzY2VtdS9kcG1pLmNdIFttaXNjZW11L2ludDIxLmNdCglTb21lIG1pc3NpbmcgaW50ZXJydXB0LWZ1bmN0aW9ucyBhZGRlZC4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY11baWYxNjMyL3VzZXIzMi5zcGVjXQoJU29tZSB0aHVua3MgdG8gMTYgYml0IGVxdWl2YWxlbnQgZnVuY3Rpb25zIGFkZGVkLgoKU2F0IFNlcCAgNyAxMTozNjo1NyBFRFQgMTk5NiAgTWF0dGhldyBHaGlvIDxnaGlvQG5ldGNvbS5jb20+CgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCVJld3JvdGUgV0lOU09DS19zZWxlY3QoKSBhbmQgV1NBRkRJc1NldCgpIHRvIHByb3Blcmx5IGNvbnZlcnQKCVdpbmRvd3MgZmRfc2V0IHN0cnVjdHMuCgoJKiBbaWYxNjMyL3dpbnNvY2suc3BlY10KCUNvcnJlY3RlZCBhcmd1bWVudHMgdG8gc2VsZWN0KCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBTZXAgIDEgMTk6MjI6NDYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbWlzYy9jb21tZGxnLmNdIFtpZjE2MzIvY29tbWRsZy5zcGVjXQoJRml4ZWQgc29tZSBTRUdQVFIgcHJvYmxlbXMuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglBZGRlZCBtZXNzYWdlIHRyYW5zbGF0aW9uIGZvciBXTV9DT01QQVJFSVRFTSwgV01fREVMRVRFSVRFTQoJYW5kIFdNX01FQVNVUkVJVEVNCglGaXhlZCAxNi10by0zMiB0cmFuc2xhdGlvbiBmb3IgV01fSFNDUk9MTC9XTV9WU0NST0xMLgoKRnJpIEF1ZyAzMCAxMzozOTowMCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCSogW2ZpbGVzL2RyaXZlLmNdCglHZXREcml2ZVR5cGUxNiBzaG91bGQgcmVwb3J0IENEUk9NcyBhcyBEUklWRV9SRU1PVEUgKEFDTUUgc2V0dXApLgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCVRoZSBtaW5pbXVtIGF1ZGlvYnVmZmVyIHNpemUgc2hydW5rIHNvbWV3aGVyZSBpbiBsaW51eCAxLjMueHgKCWJlbG93IDQwOTYgYnl0ZXMuCgoJKiBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCVNlZ3B0ciBzdHJpbmcgaGFuZGxpbmcgZml4ZWQgJiBlbmhhbmNlZC4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdW21pc2MvY3J0ZGxsLmNdCgltYWxsb2MsZnJlZSxfc3RydXByLF9zdHJpY21wLF9zdHJjbXBpIGFkZGVkLgoKCSogW2lmMTYzMi93c29jazMyLnNwZWNdW21pc2Mvd2luc29jay5jXQoJTW9yZSBkaXJlY3QgdGh1bmtzIGludG8gdW5peCBsaWJjIGFuZCBXc0NvbnRyb2wtc3R1YiBhZGRlZC4KClRodSBBdWcgMjkgMjM6NTQ6MjUgMTk5NiAgSHV3IEQuIE0uIERhdmllcyA8aC5kYXZpZXMxQHBoeXNpY3Mub3hmb3JkLmFjLnVrPgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10KCUJ1ZyBmaXhlcyB0byBib3RoIHJlY29yZGluZyBhbmQgcGxheWJhY2sgb2YgRXh0VGV4dE91dCgpLgoKVHVlIEF1ZyAyNyAxNTo0MzoyMSAxOTk2ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10gW211bHRpbWVkaWEvbWNpYW5pbS5jXQoJICBbbXVsdGltZWRpYS9tY2ljZGEuY10gW211bHRpbWVkaWEvbWlkaS5jXQoJTWFkZSBjZGF1ZGlvLCBhdWRpbyBhbmQgbWlkaSB3b3JrIGZvciBGcmVlQlNELgoKU3VuIEF1ZyAyNSAyMDoxODo1NiAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW21pc2MvY3J0ZGxsLmNdIFtpZjE2MzIvY3J0ZGxsLnNwZWNdCglBZGRlZCBhIGxvdCBvZiBmdW5jdGlvbnMuCgoJKiBbbWlzYy9vbGUybmxzLmNdCglBZGRlZCBJRCB2YWx1ZXMgZm9yIGFsbCBsYW5ndWFnZXMgaW4gR2V0VXNlckRlZmF1bHRMQ0lEKCkuCgkKRnJpIEF1ZyAyNCAyMTowMjoyOCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJRmlyc3QgYXR0ZW1wdCBhdCBob29rIFdIX0pPVVJOQUxQTEFZQkFDSy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU2F0IEF1ZyAyNCAxMzo1NzowMSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVJlbmFtZWQgU0NST0xMSU5GTyB0byBTQ1JPTExCQVJfSU5GTyB0byBhdm9pZCBjb25mbGljdCB3aXRoIFdpbjMyLgoKCSogW2dyYXBoaWNzL2RyaXZlci5jXSBbaW5jbHVkZS94MTFkcnYuaF0KCU5ldyBmaWxlcyBmb3IgZ3JhcGhpY3MgZHJpdmVyIGhhbmRsaW5nLgoKCSogW2lmMTYzMi9yZWxheS5jXSBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW3Rvb2xzL2J1aWxkLmNdCglJbXBsZW1lbnRlZCBXaW4zMiByZWdpc3RlciBmdW5jdGlvbnMuIE5vdCByZWFsbHkgdGVzdGVkIHlldC4KCgkqIFtpbmNsdWRlL2dkaS5oXQoJQWRkZWQgYSBsb3Qgb2YgZnVuY3Rpb25zIHRvIHRoZSBEQyBmdW5jIHRhYmxlLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJSW5pdGlhbGlzZSAlZnMgYmVmb3JlIGNhbGxpbmcgb3V0IHRvIDMyLWJpdCBjb2RlLgoKCSogW3dpbmRvd3MvaG9vay5jXQoJRml4ZWQgYnVnIGluIEhPT0tfR2V0SG9vaygpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglGaXhlZCBGaW5kV2luZG93IHRvIHJldHVybiBhbiBlcnJvciBpZiB0aGUgY2xhc3MgbmFtZSBkb2Vzbid0IGV4aXN0LgoKV2VkIEF1ZyAyMSAxNToxNTo1MyAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dIFttaXNjL21wci5jXSBbaWYxNjMyL21wci5zcGVjXQoJbXByLmRsbCBzcGVjcyBhZGRlZC4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW3dpbjMyL25ld2Zucy5jXSBbbWVtb3J5L2dsb2JhbC5jXQoJUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoKSwgR2xvYmFsTWVtb3J5U3RhdHVzKCkgYWRkZWQuCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXSBbd2luMzIvZXJyb3IuY10KCVNldExhc3RFcnJvckV4KCkgYWRkZWQuCgoJKiBbbWlzYy9jb21tZGxnLmNdCglscHN0ckZpbHRlciBtaWdodCBiZSBOVUxMIGluIEZJTEVfV01Jbml0RGlhbG9nIChOUyAzLjAgc2V0dXApLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNvbWUgbWlzc2luZyBOVUxMIHB0ciBjaGVja3MgYWRkZWQsIG1pc2MgY2xlYW4gdXAuCgpUdWUgQXVnIDIwIDIxOjAwOjAwIDE5OTYgQWxleCBLb3JvYmthICA8YWxleEBwaGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUFkanVzdCBwb3B1cCBtZW51IGNvb3JkaW5hdGVzIHNvIHRoYXQgaXQgYWx3YXlzIHN0YXlzIHdpdGhpbiAKCXRoZSBkZXNrdG9wLgoKCSogW21pc2MvbWFpbi5jXQoJRml4ZWQgR2V0RW52aXJvbm1lbnQoKSByZXR1cm4gdmFsdWUgZm9yIGxwRW52ID09IE5VTEwgY2FzZS4KCk1vbiBBdWcgMTkgMjI6NDg6MzYgMTk5NiAgSnVra2EgSWl2b25lbiA8aWl2b25lbkBjYy5oZWxzaW5raS5maT4KCgkqIFttaXNjL2NydGRsbC5jXSBbaWYxNjMyL2NydGRsbC5zcGVjXQoJQWRkZWQgc29tZSBpcyogZnVuY3Rpb25zLCBzdHJsZW4gYW5kIHRvbG93ZXIuCgkKTW9uIEF1ZyAxOSAxMzozMzoxMyAxOTk2ICBTdGVwaGVuIFNpbW1vbnMgIDxzc2ltbW9uc0B2aXRzZW1pLmNvbT4KCgkqIFt0b29scy93aW5lY29uZl0KCU5ldyBwZXJsIHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgd2luZS5jb25mIGZpbGUuCgpGcmkgQXVnIDE2IDE1OjMxOjQ0IDE5OTYgICBKb2huIEhhcnZleSA8am9obkBkaXZpc2lvbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdCiAgICAgICAgTG90cyBvZiBwcmludGVyIGZ1bmN0aW9ucy4KCQoJKiBbaW5jbHVkZS9jYWxsYmFjay5oXQogICAgICAgIE5ldyBmdW5jdGlvbnMgZm9yIHByaW50ZXIgZHJpdmVyIHN1cHBvcnQuCgoJKiBbaW5jbHVkZS9nZGkuaF0KICAgICAgICBOZXcvY2hhbmdlZCBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgcHJpbnRlciBkcml2ZXIuCgoJKiBbbWlzYy9lc2NhcGUuY10KICAgICAgICBOZXcgdmVyc2lvbiB0aGF0IHVzZXMgZnVuY3Rpb24gdGFibGUgaW4gREMgc3RydWN0dXJlLgoKCSogW29iamVjdHMvZGMuY10KICAgICAgICBDcmVhdGVEQyBjb3BlcyB3aXRoIHRoaW5ncyBvdGhlciB0aGFuIERpc3BsYXkuCglYIGNvZGUgZm9yIENyZWF0ZURDIG1vdmVkIHRvIGdyYXBoaWNzL3gxMWRydiBkaXJlY3RvcnkuCglDcmVhdGVDb21wYXRpYmxlREMgY29waWVzIGZ1bmMgdGFibGUgZnJvbSBvcmlnaW5hbCBEQy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KICAgICAgICBHZXRUZXh0RXh0ZW50UG9pbnQzMkEsR2V0VGV4dE1ldHJpY3MxNiB1c2UgZnVuY3Rpb24gdGFibGUgaW4KICAgICAgICBEQyBhbmQgY29kZSBtb3ZlZCB0byBkcml2ZXJzIGRpcmVjdG9yeS4KCgkqIFttaXNjL3ByaW50ZHJ2LmNdIFtncmFwaGljcy8qLypdIFtpbmNsdWRlL3dpbjE2ZHJ2LmhdCiAgICAgICAgTmV3IGZpbGVzIGZvciBwcmludGVyIHN1cHBvcnQuIAoKRnJpIEF1ZyAxNiAxMjozMzowMCAxOTk2ICBCcnVjZSBNaWxuZXIgPEJydWNlLk1pbG5lckBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUFkZGVkIFNldFNjcm9sbEluZm8zMiBhbmQgR2V0U2Nyb2xsSW5mbzMyLiAgVGhlc2UganVzdCBjYWxsIGV4aXN0aW5nCgljb2RlLiBUaGVyZSBhcmUgYSBmZXcgb3B0aW9ucyBpbiB3aGljaCBJJ20gcHJvYmFibHkgdGhlIHdyb25nIHBlcnNvbgoJZm9yIHRoZSBqb2IgKHBhZ2Ugc2l6ZSBhbmQgZGlzYWJsZSBiYXIpLiBUaGVyZSBhcmUgY29tbWVudHMgaW4gdGhlCgljb2RlIGFzIHRvIHdoYXQgdGhleSBzaG91bGQgZG8uCgoJKiBbb2JqZWN0cy9nZGlvYmouY10gW29iamVjdHMvZm9udC5jXSBbaW5jbHVkZS9mb250LmhdCglBZGRlZCAzMiBiaXQgdmVyc2lvbiBvZiBGT05UX0dldE9iamVjdC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEF1ZyAxOCAxMjoxNzo1NCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtmaWxlcy9kcml2ZS5jXQoJQWRkZWQgJ0ZpbGVzeXN0ZW0nIG9wdGlvbiBpbiBkcml2ZXMgY29uZmlndXJhdGlvbi4KCgkqIFtmaWxlcy9kb3NfZnMuY10gCglBZGRlZCBoYW5kbGluZyBvZiBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXSBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdCglSZW1vdmVkIE1BS0VfU0VHUFRSLgoKCSogW21pc2MvY29tbWRsZy5jXSBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10KCVJlcGxhY2VkIE1BS0VfU0VHUFRSIGJ5IHRoZSBTRUdQVFJfKiBtYWNyb3MuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10gW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVVzZSBhbiBpbnRlcm1lZGlhcnkgcGl4bWFwIHRvIGF2b2lkIHNvbWUgQmFkTWF0Y2ggZXJyb3JzIG9uCglYR2V0SW1hZ2UoKS4KClN1biBBdWcgMTggMDk6MjE6MjcgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUFkZGVkIGhhbmRsaW5nIG9mIFdNX05DLi4ubW91c2UgbWVzc2FnZXMgaW4gSk9VUk5BTFJFQ09SRCBob29rLgoKCSogW21pc2MvdmVyLmNdCglGaXhlZCBhIGJhZCBzdHJpbmcgcmVzdWx0IGluIFZlclF1ZXJ5VmFsdWVbMTZ8MzJBfDMyV10uCgpGcmkgQXVnIDE2IDE5OjU1OjA0IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9jcnRkbGwuc3BlY10gW21pc2MvY3J0ZGxsLmNdCglNb3JlIGFkZGl0aW9ucyB0byBnZXQgd2luOTUgcHJvZ3JhbXMgZnVydGhlciBkb3duIHRoZSByb2FkLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2xvYWRlci9tb2R1bGUuY10KCUdldE1vZHVsZU5hbWUoKSBhZGRlZC4KCUxvYWRNb2R1bGUoKTogcGFyYW1zLT5zaG93Q21kIGNhbiBiZSBOVUxMLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3RodW5rLmNdCglUaHVua0Nvbm5lY3QzMigpIHN0dWIgYWRkZWQuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdCglFbnRyaWVzIGluY2x1ZGUgbGFzdGVudHJ5LgoKCSogW21pc2Mvc2hlbGwuY10gW2ZpbGVzL2ZpbGUuY10KCU1hZGUgcHJvZ21hbiB3b3JrIGFnYWluLgoKRnJpIEF1ZyAxNiAwOTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCQoJKiBbd2luZG93cy9kZWZ3bmQuY10gW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglJY29uIHBhaW50aW5nIGZpeGVzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdCglFbmZvcmNlIGFuZCBmb2xsb3cgaHJnblVwZGF0ZSBtb3JlIGNsb3NlbHkgdG8gY3V0IGRvd24gb24KCXJlZHVuZGFudCBSZWRyYXdXaW5kb3coKSBjYWxscy4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglQcm9jZXNzIENvbmZpZ3VyZU5vdGlmeSBvbmx5IGZvciBtYW5hZ2VkIHdpbmRvd3MuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCURvIG5vdCByZWRyYXcgcGFyZW50IGlmIHRoZSB3aW5kb3cgd2FzIGhpZGRlbiBiZWZvcmUgU2V0V2luZG93UG9zKCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCU9taXQgc29tZSBub25jbGllbnQgZGVjb3JhdGlvbiBwYWludGluZyBmb3IgbWFuYWdlZCB3aW5kb3dzLgoKCSogW2NvbnRyb2xzL21lbnUuY10gW3dpbmRvd3MvbWRpLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJSW1wbGVtZW50ZWQgV01fTkVYVE1FTlUuCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTXVsdGljb2x1bW4gbGlzdGJveGVzIHJldHVybiBXVlJfVlJFRFJBVyBvbiBXTV9OQ0NBTENTSVpFLgoKCSogW21pc2Mvc2hlbGwuY10KCUFkZGVkIC5JQ08gZmlsZSBoYW5kbGluZyB0byBFeHRyYWN0SWNvbigpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gQXVnIDExIDEzOjAwOjIwIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbmZpZ3VyZS5pbl0gW2luY2x1ZGUvYWNjb25maWcuaF0gW3Rvb2xzL2J1aWxkLmNdCglBZGRlZCBjaGVjayBmb3IgdW5kZXJzY29yZSBvbiBleHRlcm5hbCBzeW1ib2xzLgoKCSogW21lbW9yeS9zZWxlY3Rvci5jXSBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgRnJlZVNlbGVjdG9yKCkgdG8gZnJlZSBvbmx5IG9uZSBzZWxlY3Rvci4KCUFkZGVkIFNFTEVDVE9SX0ZyZWVCbG9jaygpIHRvIGZyZWUgYW4gYXJyYXkgb2Ygc2VsZWN0b3JzLgoKCSogW29iamVjdHMvY29sb3IuY10KCUZpeGVkIGEgYnVnIGluIENPTE9SX1RvTG9naWNhbCgpIHRoYXQgY2F1c2VkIEdldFBpeGVsKCkgdG8gZmFpbCBvbgoJaGktY29sb3IgZGlzcGxheXMuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2lmMTYzMi9jcnRkbGwuc3BlY10KCUFkZGVkICdleHRlcm4nIHR5cGUsIHVzZWQgZm9yIGV4dGVybmFsIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCUFsbG93IGRlLWFjdGl2YXRpbmcgYSB3aW5kb3cgaW4gV0lOUE9TX0NoYW5nZUFjdGl2ZVdpbmRvdygpLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWRkZWQgMzItdG8tMTYgdHJhbnNsYXRpb24gZm9yIGJ1dHRvbiBtZXNzYWdlcy4KCUZpeGVkIFdJTlBST0NfR2V0UHRyKCkgdG8gYXZvaWQgY3Jhc2hlcyBvbiAzMi1iaXQgcHJvY2VkdXJlcyB0aGF0CgloYXBwZW4gdG8gYmUgdmFsaWQgU0VHUFRScy4KClNhdCBBdWcgMTAgMTg6MjI6MjUgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCVJlbW92ZWQgYSBGSVhNRSBpbiBNU0dfUGVla0hhcmR3YXJlTXNnKCk6IHByb2R1Y2VzIGNvcnJlY3QgCglkYXRhIGZvciB0aGUgSk9VUk5BTFJFQ09SRC1ob29rICh1c2luZyBFVkVOVE1TRzE2IHN0cnVjdHVyZSkuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtvYmplY3RzL21ldGFmaWxlLmNdCglJbnRyb2R1Y2VkIHVuZG9jdW1lbnRlZCBBUEkgZnVuY3Rpb24gSXNWYWxpZE1ldGFGaWxlKCksIHBsdXMgYQogCW1pbm9yIGZpeCBpbiBsYXN0IHBhdGNoIG9mIENvcHlNZXRhRmlsZSgpLgoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglSZW1vdmVkIGEgRklYTUUgaW4gSXNHRElPYmplY3QoKTogYWRkZWQgbWFnaWMgd29yZCBjaGVjay4KClN1biBBdWcgMTAgMTg6MTA6MTAgMTk5NiAgQnJ1Y2UgTWlsbmVyIDxCcnVjZS5NaWxuZXJAZ2VuZXRpY3MudXRhaC5lZHU+CgoJKiBbY29udHJvbHMvc3RhdHVzd2luLmNdCglGaXJzdCBwYXNzIGF0IGltcGxlbWVudGluZyB0aGUgU3RhdHVzV2luZG93IGNsYXNzLgoKCSogW2luY2x1ZGUvY29tbWN0cmwuaF0KCUhlYWRlciBmaWxlIGZvciBjb21tb24gY29udHJvbHMuCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJQWRkZWQgSW5pdENvbW1vbkNvbnRyb2xzKCkuCgoJKiBbaWYxNjMyL2NvbWN0bDMyLnNwZWNdCglBZGQgRHJhd1N0YXR1c1RleHRBLCBDcmVhdGVTdGF0dXNXaW5kb3dBLCBJbml0Q29tbW9uQ29udHJvbHMuCgoJKiBbd2luMzIvZmluZGZpbGUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkIEZpbmROZXh0RmlsZTMyQSwgRmluZENsb3NlLgoJTW9kaWZpZWQgRmluZEZpcnN0RmlsZTMyQSBzbyBpdCB3b3JrcyB3aXRoIEZpbmROZXh0RmlsZTMyQS4KCgkqIFtpbmNsdWRlL3dpbmJhc2UuaF0KCUZpeGVkIFdJTjMyX0ZJTkRfREFUQSBzdHJ1Y3R1cmUgbWVtYmVyIG5hbWVzLgoKU2F0IEF1ZyAxMCAwOTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJQ2hhbmdlZCBzY3JvbGxpbmcgcm91dGluZXMgdG8gYmVuZWZpdCBmcm9tIERDRSBjb2RlIHVwZGF0ZS4KClRodSBBdWcgIDggMTg6MDU6MDkgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZmlsZS5jXQoJU2VhcmNoUGF0aCogY291bGQgZ2V0IE5VTEwgZm9yIGxhc3RwYXJ0IGFyZ3VtZW50LgoKCSogW2lmMTYzMi9idWlsZC1zcGVjLnR4dF0gW2RvY3VtZW50YXRpb24vZGVidWdnaW5nXQoJVmFyYXJncyBkb2N1bWVudGF0aW9uIGFkZGVkLCBkZWJ1Z2dpbmcgaGludHMgdXBkYXRlZC4KCgkqIFtpZjE2MzIvY3J0ZGxsLnNwZWNdW21pc2MvY3J0ZGxsLmNdW21pc2MvTWFrZWZpbGUuaW5dCglTdGFydGVkIHRvIGltcGxlbWVudCBDUlRETEwuCgoJKiBbaWYxNjMyL3dzb2NrMzIuc3BlY10KCVNvbWUgdGh1bmtzIHRvIHN0YW5kYXJkIGxpYmMgZnVuY3Rpb25zIChzdHJ1Y3R1cmVzIGhhdmUgdGhlIHNhbWUKIAllbGVtZW50cywgYnV0IHBlcmhhcHMgd3Jvbmcgb2Zmc2V0IGR1ZSB0byBwYWNraW5nKS4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdW2luY2x1ZGUvd2luZG93cy5oXVt3aW4zMi8qLmNdW2xvYWRlci9tYWluLmNdCglNZXJnZWQga2VybmVsMzIuaCBpbnRvIHdpbmRvd3MuaC4KCgkqIFttaXNjL2xzdHIuY10KCUVuaGFuY2VkIEZvcm1hdE1lc3NhZ2UoKS4KCgkqIFttaXNjL21haW4uY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2V0VmVyc2lvbigpIHVwZGF0ZWQgdG8gbmV3IG5hbWluZyBzdGFuZGFyZC4KCUNoYW5nZWQgbGFuZ3VhZ2UgaGFuZGxpbmcgdG8gc3VwcG9ydCBsYW5ndWFnZSBpZHMuCgoJKiBbbWlzYy9zaGVsbC5jXQoJRW5oYW5jZWQgRmluZEV4ZWN1dGFibGUsIHNvIGl0IGZpbmRzIGZpbGVzIGluIHRoZSBzZWFyY2ggcGF0aCB0b28uCgoJKiBbd2luMzIvZW52aXJvbm1lbnQuY10KCUdldENvbW1hbmRMaW5lKiB1cGRhdGVkLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXSBbbG9hZGVyL3BlX3Jlc291cmNlLmNdCglGaW5kUmVzb3VyY2VFeDMyKiBhZGRlZC4KCUxvYWRpbmcgb2YgbWVzc2FnZXRhYmxlcyBhZGRlZC4KCUxhbmd1YWdlIGhhbmRsaW5nIG5vdyB1c2VzIFdpbmUgZGVmYXVsdCBsYW5ndWFnZSBpZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEF1ZyAgNCAxODoxODo0OCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCUF0dGVtcHRlZCB0byBpbXBsZW1lbnQgdW5kb2N1bWVudGVkIHNjcm9sbC1iYXIgbWVzc2FnZXMuCgoJKiBbdG9vbHMvYnVpbGQuY10gW2luY2x1ZGUvY2FsbGJhY2suaF0gW3dpbmRvd3Mvd2lucHJvYy5jXQoJQ2FsbFRvMTZfKiBmdW5jdGlvbnMgbm93IGdldCBEUyBmcm9tIHRoZSBwcmV2aW91cyAxNi1iaXQgc3RhY2tmcmFtZS4KCgkqIFtpZjE2MzIvdGh1bmsuY10gW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHRodW5rcyB0byBpbXBsZW1lbnQgY2FsbGJhY2tzIGZvciB0aGUgZW11bGF0b3IuIE5vdyBhbGwgdGhlCglFbnVtKiBmdW5jdGlvbnMgYWx3YXlzIHRha2UgYSByZWFsIGZ1bmN0aW9uIHBvaW50ZXIgZXZlbiBpbiB0aGUKCWVtdWxhdG9yLgoJCgkqIFtsb2FkZXIvYnVpbHRpbi5jXQoJUmVtb3ZlZCBiaW5hcnkgc2VhcmNoIGluIEJVSUxUSU5fR2V0RW50cnlQb2ludDMyKCksIGFzIGl0IGRpZG4ndAogCXdvcmsgd2l0aCBOVUxMIGVudHJ5IHBvaW50cy4gVXNpbmcgbGluZWFyIHNlYXJjaCBub3cuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJSW1wbGVtZW50ZWQgSXNTaGFyZWRTZWxlY3RvcigpLgoKCSogW2xvYWRlci90YXNrLmNdCglDaGFuZ2VkIFN3aXRjaFN0YWNrVG8vQmFjayB0byB1c2UgdGhlIGluc3RhbmNlIGRhdGEgdG8gc3RvcmUgdGhlCglwcmV2aW91cyBzdGFjayBpbnN0ZWFkIG9mIHRoZSBUREIuIEFsc28gY29weSB0aGUgbG9jYWwgdmFyaWFibGVzCglvbnRvIHRoZSBuZXcgc3RhY2suCglBZGRlZCBHZXRFeGVWZXJzaW9uKCkgYW5kIFNldFRhY2tTaWduYWxQcm9jKCkuCglJbXBsZW1lbnRlZCBTZXRTaWdIYW5kbGVyKCkuCgpTYXQgQXVnICAzIDIyOjE5OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJIkZpeGVkIiBwcm9ibGVtIGluIGRlbGV0aW5nIG1lbnVzIHdoZXJlIHdpbjMyIGNvdWxkIGdldCBpbnRvIGFuCgllbmRsZXNzIGxvb3Agd2hlbiBpdCBjcmFzaGVkLiBJIHRoaW5rIEkndmUgZml4ZWQgdGhlIHN5bXB0b21zLCBub3QKCXRoZSBvcmlnaW5hbCBwcm9ibGVtIHNvIGl0IG1pZ2h0IGJlIHdvcnRoIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgkqIFtkZWJ1Z2dlci9yZWdpc3RlcnMuY10KCUFkZGVkIG1pc3NpbmcgI2lmZGVmcyBvbiBGU19SRUcgYW5kIEdTX1JFRywgbmVlZGVkIGZvciBGcmVlQlNEIHRvCgljb21waWxlIHdpbmUgcHJvcGVybHkuCgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglNYWRlIERPU0ZTX0hhc2ggYW5kIERPU0ZTX01hdGNoIG5vbi1zdGF0aWMgc28gdGhleSBjYW4gYmUgY2FsbGVkCglmcm9tIHdpbjMyL2ZpbmRmaWxlLmMgKHEudi4pLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJQWRkZWQgU2V0TWFwTW9kZSAoY2FsbCBleGlzdGluZyBmdW5jdGlvbikKCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUFkZGVkIEZpbmRGaXJzdEZpbGVBIGFuZCBTZXRGaWxlQXR0cmlidXRlc0EuCgoJKiBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJQWRkZWQgQnJpbmdXaW5kb3dUb1RvcCwgQ3JlYXRlUG9wdXBNZW51LCBHZXRLZXlTdGF0ZSwgR2V0UGFyZW50LAoJSXNEbGdCdXR0b25DaGVja2VkIChjYWxsIGV4aXN0aW5nIGZ1bmN0aW9ucykgYW5kIElzRGlhbG9nTWVzc2FnZUEsCglVbmhvb2tXaW5kb3dzSG9va0V4LgoKCSogW3dpbjMyL2ZpbGUuY10KCUFkZGVkIHN0dWIgZnVuY3Rpb24gU2V0RmlsZUF0dHJpYnV0ZXMzMkEuIEl0J3MgYSBzdHViIGJlY2F1c2UgSQoJY2FuJ3QgcmVhbGx5IHdvcmsgb3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgZG8gd2l0aCBtb3N0CglhdHRyaWJ1dGVzIGluIGEgVW5peCBlbnZpcm9ubWVudC4gQW55b25lIGNhcmUgdG8gZXhwYW5kIGl0PwoKCSogW3dpbjMyL2ZpbmRmaWxlLmNdCglOZXcgZmlsZS4gSW5pdGlhbCBzdGFiIGF0IEZpbmRGaXJzdEZpbGUuIFRoaXMgZG9lc24ndCB3b3JrIGFzCglzcGVjaWZpZWQgeWV0LCB0aG91Z2ggYSBsb3Qgb2YgdGhlIGdyb3VuZHdvcmsgaXMgdGhlcmUuIEkgaGF2ZW4ndAoJdGltZSB0byB3b3JrIG9uIHRoaXMgZm9yIHRoZSBuZXh0IG1vbnRoLCBzbyBpZiBhbnlvbmUgd2FudHMgdG8gcGljawoJaXQgdXAgYW5kIHJ1biB3aXRoIGl0IHBsZWFzZSBkby4KCgkqIFt3aW4zMi9tZW1vcnkuY10KCVJlbW92ZWQgbWFsbG9jLmggZnJvbSBpbmNsdWRlcyAoY292ZXJlZCBieSBzdGRsaWIuaCBpbmNsdWRlLCBhbmQKCWdldHMgcmlkIG9mIGEgd2FybmluZyBpbiBGcmVlQlNEKS4KCgkqIFt3aW4zMi9uZXdmbnMuY10KCVVuaG9va1dpbmRvd3NIb29rRXgzMkEgc3R1YiBhZGRlZC4KCgkqIFt3aW4zMi91c2VyMzIuY10KCUFkZGVkIGltcGxlbWVudGF0aW9uIG9mIElzRGlhbG9nTWVzc2FnZTMyQS4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJSXNEbGdCdXR0b25DaGVja2VkIG5vdyBjYWxscyBTZW5kRGxnSXRlbU1lc3NhZ2UzMkEgaW5zdGVhZCBvZgoJU2VuZERsZ0l0ZW1NZXNzYWdlMTYuCgpTYXQgQXVnICAzIDE4OjAwOjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJUmVtb3ZlZCByZWN0YW5nbGUgY2hlY2tpbmcgKGNvbmZsaWN0ZWQgd2l0aCBub25zdGFuZGFyZAoJbWFwcGluZyBtb2RlcykuIAoKCSogW3dpbmRvd3MvZGlhbG9nLmNdCglBZGRlZCBjaGVjayBmb3IgY2hpbGQtc3R5bGUgZGlhbG9ncyB0byBEU19BQlNBTElHTgoJY29vcmRpbmF0ZSBjb252ZXJzaW9uLgoKCSogW29iamVjdHMvY29sb3IuY10KCUNsZWFuZWQgdXAgbWlzYy4gYml0cwoKVGh1IEF1ZyAgMSAxMDo1MTo0NSAxOTk2ICBBbmRyZXcgTGV3eWNreSA8cGxld3lja3lAb2lzZS51dG9yb250by5jYT4KCgkqIFt3aW5kb3dzL2ZvY3VzLmNdIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbi5jXQoJICBbd2luZG93cy9kZWZkbGcuY10KCUZpeGVzIHRvIGZvY3VzaW5nIGFuZCBhY3RpdmF0aW9uLgoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglQcm9wZXJseSg/KSBoYW5kbGUgRE1fR0VUREVGSUQuCgoJKiBbY29udHJvbHMvY29tYm8uY10KCUhhbmRsZSBDQl9GSU5EU1RSSU5HRVhBQ1QsIENCX1NFVEVESVRTRUwsIENCX0dFVEVESVRTRUwuCglDQkNoZWNrU2l6ZTogQWRqdXN0IGVkaXQgcG9zaXRpb24uCgpUdWUgSnVsIDMwIDA5OjQ2OjM2IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2ZpbGUuY10gW2luY2x1ZGUvZmlsZS5oXSBbbG9hZGVyL21vZHVsZS5jXSBbbG9hZGVyL25lX2ltYWdlLmNdCglQYXNzIEhGSUxFcyBpbnN0ZWFkIG9mIHVuaXgtZmRzIHRvIHNlbGYtbG9hZGVyIGNvZGUuCgpNb24gSnVsIDI5IDIxOjQ4OjI1IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbaW5jbHVkZS9tZXRhZmlsZS5oXSBbb2JqZWN0cy9tZXRhZmlsZS5jXSBbb2JqZWN0cy90ZXh0LmNdCglJbXBsZW1lbnRlZCBoYW5kbGluZyBvZiBzb21lIG5ldyBtZXRhZmlsZSByZWNvcmRzIChNRVRBXy4uLikKCWluIFBsYXlNZXRhRmlsZVJlY29yZCgpLCByZXdyaXRlIG9mICdjYXNlIE1FVEFfRVhUVEVYVE9VVCcuCglBZGRlZCBmdW5jdGlvbnMgbGlrZSBNRl9TdHJldGNoQmx0KCkgZm9yIHVzYWdlIGluIG1ldGFmaWxlcy4KCU1pbm9yIGJ1Z2ZpeCBpbiBDb3B5TWV0YWZpbGUoKS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXVtvYmplY3RzL2RpYi5jXQoJQWRkZWQgY2hlY2sgZm9yIG1ldGFmaWxlLURDIGluIEJpdG1hcCBhbmQgRElCIGZ1bmN0aW9uczoKCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoKSBldGMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKdWwgMjggMTc6NTc6MTkgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbG9hZGVyL3Rhc2suY10gW2luY2x1ZGUvdGFzay5oXQoJSW1wbGVtZW50ZWQgU3dpdGNoU3RhY2tUbygpL1N3aXRjaFN0YWNrQmFjaygpLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gW2xvYWRlci9tYWluLmNdCglBZGRlZCBfX3dpbmVsaWIgdmFyaWFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBlbXVsYXRvciBhbmQKIAlsaWJyYXJ5IGF0IHJ1bi10aW1lLiBMYXRlciBvbiwgdGhpcyBzaG91bGQgYXZvaWQgc29tZQogCXJlY29tcGlsYXRpb25zIHdoZW4gYnVpbGRpbmcgV2luZWxpYi4KCgkqIFt3aW5kb3dzL3Byb3BlcnR5LmNdCglJbXBsZW1lbnRlZCBXaW4zMiBmdW5jdGlvbnMgZm9yIHdpbmRvdyBwcm9wZXJ0aWVzLgoKRnJpIEp1bCAyNiAxODowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglJbXBsZW1lbnRlZCBMQlNfU09SVCBzdHlsZSwgV01fQ09NUEFSRUlURU0sIGFuZCBXTV9ERUxFVEVJVEVNCgltZXNzYWdlcy4KCgkqIFtjb250cm9scy9tZW51LmNdCglDYWxsIFRyYW5zbGF0ZU1lc3NhZ2UoKSB0byBlbmFibGUgc2hvcnRjdXRzIChvbiBXTV9DSEFSKS4KCgkqIFtpbmNsdWRlL2N1cnNvcmljb24uaF0KCU1vdmVkICNwcmFnbWEgcGFjaygxKSBiYWNrIHRvIHdoZXJlIGl0IGJlbG9uZ3MuCgoJKiBbb2JqZWN0cy9wYWxldHRlLmNdCglSZWFsaXplRGVmYXVsdFBhbGV0dGUoKSBtYXBzIHRvIHN5c3RlbSBjb2xvcnMgb25seS4KCURvIG5vdCBicm9hZGNhc3QgcGFsZXR0ZSBub3RpZmljYXRpb25zIHdoZW4gaW4gVHJ1ZUNvbG9yLgoKCSogW29iamVjdHMvY29sb3IuY10gW2luY2x1ZGUvcGFsZXR0ZS5oXQoJTWlzY2VsbGFuZW91cyBvcHRpbWl6YXRpb25zLiBIYWQgdG8gZml4IHNldmVyYWwKCSJpbXByb3ZlbWVudHMiIG1hZGUgdG8gbXkgcGF0Y2ggZm9yIHByZXZpb3VzIHJlbGVhc2UuCgoJKiBbb2JqZWN0cy9kaWIuY10KCVJldmVyc2UgZGliIGJpdHMgb3JkZXIgZm9yIDI0LWJpdCBTZXRESUJpdHMoKS4KCgkqIFtvYmplY3RzL2RjLmNdCglHZXREZXZpY2VDYXBzKCkgZG9lcyBub3QgcmV0dXJuIFJDX1BBTEVUVEUgd2hlbiBpbiBUcnVlQ29sb3IuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCVNjcm9sbCB1cGRhdGUgcmVnaW9uIHRvby4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUluY2x1ZGUgUVNfTU9VU0UgaW50byB0aGUgZXZlbnQgbWFzayBmb3Igbm9uY2xpZW50IG1vdXNlCgltZXNzYWdlIGZpbHRlci4gRml4ZXMgcHJvYmxlbXMgd2l0aCBXb3JkIDYgZnJlZXppbmcgd2hlbgoJbW91c2UgaGl0cyBub25jbGllbnQgYXJlYS4KCgkqIFt3aW5kb3dzL3dpbi5jXSAKCUFsbG93IHRvcC1sZXZlbCB3aW5kb3dzIHRvIGJlIGxpbmtlZCBhcyBIV05EX1RPUCBpbiBDcmVhdGVXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9tZGkuY10KCUF0dGVtcHQgdG8gZml4IGNvbnRyb2wgbWVudSBkdXBsaWNhdGlvbi4KCkZyaSBKdWwgMjYgMDk6NDk6MzUgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbZmlsZXMvZHJpdmUuY10KCUdldERyaXZlVHlwZTMyQSgpOiByZXR1cm4gdmFsdWUgZm9yIENEUk9NIGZpeGVkLgoKCSogW2ZpbGVzL2ZpbGUuY10KCVNlYXJjaFBhdGgqIGFkZGVkLgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXSBbb2JqZWN0cy9icnVzaC5jXQoJU2V0QnJ1c2hPcmdFeCgpIGFkZGVkLgoKCSogW2xvYWRlci9wZV9yZXNvdXJjZS5jXQoJSWYgZXZlbiBsb2FkaW5nIHRoZSBkZWZhdWx0IGVudHJ5IGZhaWxzLCB3ZSBqdXN0IHVzZSB0aGUgZmlyc3QKCWVudHJ5IGZyb20gdGhlIHJlc291cmNlIGRpcmVjdG9yeS4KCglbbG9hZGVyL3Rhc2suY10KCVNldFNpZ0hhbmRsZXIoKSBzdHViIGFkZGVkLCBQYXJhZG94IDQuNSBub3cgc3RhcnRzIHVwLgoKCSogW21pc2MvY29tbS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUNPTU0gZnVuY3Rpb25zIHVwZGF0ZWQgdG8gd2luMzIsIG5vdCBjb21wbGV0ZS4KCgkqIFttaXNjL2xzdHIuY10KCUZvcm1hdE1lc3NhZ2VBIHBhcnRpYWxseSBpbXBsZW1lbnRlZC4KCgkqIFtpbmNsdWRlL21pc2NlbXUuaF0gW21lbW9yeS9zZWxlY3Rvci5jXQoJICBbbWVtb3J5L2dsb2JhbC5jXSBbbWlzY2VtdS9kb3NtZW0uY10KCURPUyBtZW1vcnkgaGFuZGxpbmcgY2hhbmdlZDogMU1CIHByZWFsbG9jYXRlZCBibG9jaywgcmVhbC1tb2RlCglzZWdtZW50IGhhbmRsaW5nIHBvc3NpYmxlLCBTZXRTZWxlY3RvckJhc2UgaW50byBsb3dlciBwaHlzaWNhbCAxTUIKCXBvc3NpYmxlLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJUmVhbC1tb2RlIHNlZ21lbnRzIGNoYW5nZWQsIHJlYWwtbW9kZSBpbnQgMjEsYXg9NjUwNiBhZGRlZC4KCUFYPTB4MDMwMyBhZGRlZC4KCgkqIFttdWx0aW1lZGlhL3RpbWUuY10KCUZpeGVkIGJ1ZyBpbiBraWxsVGltZXIuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUxvYWRJbWFnZUEgcGFydGlhbGx5IGltcGxlbWVudGVkLgoKV2VkIEp1bCAyNCAxODoyMDoyNCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2luY2x1ZGUvZGRlX21lbS5oXVtpbmNsdWRlL2RkZV9wcm9jLmhdCgkgIFtpcGMvZGRlX2F0b20uY11baXBjL2RkZV9wcm9jLmNdW3dpbmRvd3MvbWVzc2FnZS5jXQoJICBbaXBjL2dlbmVyaWNfaGFzaC5oXVtsaWJyYXJ5L21pc2NzdHVicy5jXQoJQ2hhbmdlcyBmb3IgZXJyb3IgZnJlZSBjb21waWxhdGlvbiB1c2luZyAiLS13aXRoLWlwYyI6CglyZXBsYWNlZCBzb21lIG5hbWVzIHdpdGggKjE2LWVxdWl2YWxlbnQgKGUuZy4gTVNHIHRvIE1TRzE2KSwKCW1vZGlmaWVkIHByb3RvdHlwZSBvZiBmdW5jdGlvbiBEREVfR2xvYmFsRnJlZSgpIC4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUFkZGVkIGNoZWNrIGZvciBtZXRhZmlsZS1EQyBpbiBHRElTZWxlY3RQYWxldHRlKCksCglHRElSZWFsaXplUGFsZXR0ZSgpLFJlYWxpemVEZWZhdWx0UGFsZXR0ZSgpIGFuZAoJSXNEQ0N1cnJlbnRQYWxldHRlKCkuCgpUdWUgSnVsIDIzIDIyOjQ2OjUzIDE5OTYgIEFuZHJldyBMZXd5Y2t5IDxwbGV3eWNreUBvaXNlLnV0b3JvbnRvLmNhPgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUVESVRfV01fQ3JlYXRlOiBEb24ndCBFRElUX0VNX1JlcGxhY2VTZWwgaWYgY3JlYXRlZCB3aXRoIGxQYXJhbSA9ICIiLAoJZml4ZXMgV2luaGVscC4KCgkqIFt3aW5kb3dzL2RpYWxvZy5jXQoJRElBTE9HX0NyZWF0ZUluZGlyZWN0OiBJbml0aWFsaXNlIGRsZ1Byb2MgYmVmb3JlIGNyZWF0aW5nIGNoaWxkcmVuLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSnVsIDE3IDE2OjEwOjE2IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbmZpZ3VyZS5pbl0KCUdlbmVyYXRlIGluY2x1ZGUvY29uZmlnLmggaW5zdGVhZCBvZiBwdXR0aW5nIGV2ZXJ5dGhpbmcgb24gdGhlCgljb21tYW5kLWxpbmUuCglSZW1vdmVkIC13aXRoLW1hbGxvYy1kZWJ1ZyBvcHRpb24gKG5vdCB1c2VmdWwgZm9yIGVuZCB1c2VycwoJYW55d2F5KS4KCUFkZGVkIGNoZWNrIGZvciBtZW1tb3ZlKCkuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXSBbKi9NYWtlZmlsZS5pbl0KCUFkZGVkIGRlZmluaXRpb24gb2YgX19XSU5FX18gc3ltYm9sIHdoZW4gY29tcGlsaW5nIFdpbmUgY29kZQoJKGVtdWxhdG9yIG9yIGxpYnJhcnkpIGFzIG9wcG9zZWQgdG8gdXNlciBwcm9ncmFtcy4KCgkqIFtkZWJ1Z2dlci9lZGl0bGluZS5jXSBbZGVidWdnZXIvcmVhZGxpbmUvKl0KCU1vdmVkIGFsbCB0aGUgcmVhZGxpbmUgY29kZSBpbnRvIGRlYnVnZ2VyL2VkaXRsaW5lLmMuIFJlbW92ZWQgdGhlCglyZWFkbGluZSBzdWJkaXJlY3RvcnkuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJQWRkZWQgUFJPRklMRV9HZXRXaW5lSW5pSW50KCkuCgoJKiBbaW5jbHVkZS9zdGFja2ZyYW1lLmhdIFtsb2FkZXIvdGFzay5jXQoJVGhlIDE2LWJpdCBzdGFja2ZyYW1lIG5vdyBhbHNvIGV4aXN0cyBmb3IgV2luZWxpYiAoZXZlbiB0aG91Z2ggaXQKCW9ubHkgZXZlciBjb250YWlucyBvbmUgZnJhbWUpLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUFkZGVkIGZ1bmN0aW9uIE1PRFVMRV9DcmVhdGVEdW1teU1vZHVsZSgpIHRvIGNyZWF0ZSBhIGR1bW15IFdpbjE2Cgltb2R1bGUgZm9yIFdpbmVsaWIgYW5kIFdpbjMyLgoKCSogW21lbW9yeS9sZHQuY10KCU1ha2Ugc3VyZSB0aGUgbGR0IGVudHJ5IGNvbnRlbnRzIHdpbGwgYmUgYWNjZXB0YWJsZSBmb3IgdGhlIExpbnV4CglrZXJuZWwuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglGaXhlZCBTZXRTZWxlY3RvckxpbWl0KCkgd2hlbiB0aGUgbGltaXQgaXMgaW4gcGFnZXMuCgoJKiBbbWlzYy9wb3J0LmNdCglBZGRlZCBtZW1tb3ZlKCkuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglDbGVhciB0aGUgc2VnbWVudCByZWdpc3RlcnMgdGhhdCBjb250YWluIHRoZSBzZWxlY3RvciBiZWluZyBmcmVlZAoJaW4gaW50MzEvYXg9MDAwMS4KCUFkZGVkIG1pc3NpbmcgYnJlYWsgYWZ0ZXIgU2VsZWN0b3JBY2Nlc3NSaWdodHMgY2FsbC4KCgkqIFt3aW4zMi9zdHJ1Y3QzMi5jXQoJQWRkZWQgY29udmVyc2lvbnMgZm9yIE1ESUNSRUFURVNUUlVDVC4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIG1lc3NhZ2UgY29udmVyc2lvbnMgZm9yIFdNX01ESUNSRUFURS4KClR1ZSBKdWwgMTYgMTk6NDY6MjQgMTk5NiAgUGF2ZWwgS2Fua292c2t5IDxLQU5AZnJvZGUuZGNpdC5jej4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglBZGRlZCBHZXRFeGVQdHIoKSBjYWxsIGluIENMQVNTX0ZpbmRDbGFzc0J5QXRvbSgpLgoKTW9uIEp1bCAxNSAxNzo0OTozOCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvKi5zcGVjXQoJU29tZSBtb3JlIHRyaXZpYWwgc3BlY3MgYWRkZWQuCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdIFtvYmplY3RzL2ZvbnQuY11bd2luZG93cy9kaWFsb2cuY10KCUNyZWF0ZUZvbnQzMiogYWRkZWQsIGNoYW5nZWQgdG8gbmV3IG5hbWluZyBzdGQuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFtpbmNsdWRlL21tc3lzdGVtLmhdIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglTb21lIGRlZmluZXMvdHlwZXMgYWRkZWQuCgoJKiBbd2luMzIvdGhyZWFkLmNdCglUbHNTZXRWYWx1ZSgpIHJldHVybnMgYm9vbGVhbi4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXSBbbG9hZGVyL3BlX3Jlc291cmNlLmNdIFtsb2FkZXIvcmVzb3VyY2UuY10KIAkgIFtjb250cm9scy9tZW51LmNdIFtvYmplY3RzL2JpdG1hcC5jXQoJQ2xlYW51cCBvZiB0aGUgcmVzb3VyY2UgZnVuY3Rpb25zLCBtb3N0bHkgY2hhbmdlcyB0byBuZXcgbmFtaW5nCiAJc3RhbmRhcmQgYW5kIGZpeGluZyBvZiBhcmd1bWVudCB0eXBlcyBzbyB0aGF0IHRoZXkgYWdyZWUgd2l0aCB0aGUKIAl3aW4xNi93aW4zMiBBUEkuCgpUaHUgSnVsIDExIDE1OjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglTaG93V2luZG93KCkgZml4ZXMuCgoJKiBbd2luZG93cy9tZGkuY10KCUZpeCByZXZlcnNlZCBMUEFSQU0gaW4gV01fTURJQUNUSVZBVEUuCgoJKiBbd2luZS5pbmldCglOZXcgb3B0aW9uIEFsbG9jU3lzdGVtQ29sb3JzIHRlbGxzIFdpbmUgaG93IG1hbnkgY29sb3JzIHRvIGdyYWIKCWZyb20gdGhlIHN5c3RlbSBjb2xvcm1hcC4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXSBbb2JqZWN0cy9kYy5jXQoJRml4ZWQgcGluayBnYXJiYWdlIG92ZXIgV29yZCBidXR0b25zIGluIFBzZXVkb0NvbG9yLiBBZGRlZAoJb3B0aW9uYWwgRFNUSU5WRVJUIHNob3J0Y3V0IGZvciBmYXN0ZXIgdGV4dCBzZWxlY3Rpb24uCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJU2tpcCBib2d1cyBzZWdtZW50ZWQgcG9pbnRlcnMgaW4gd3N2bnByaW50ZjE2KCkuIAoKCSogW29iamVjdHMvZ2Rpb2JqLmNdCglBZGRlZCBwYWxldHRlIGhhbmRsaW5nIHRvIFVucmVhbGl6ZU9iamVjdCgpLiAKCgkqIFtvYmplY3RzL2NvbG9yLmNdIFtvYmplY3RzL3BhbGV0dGUuY10gW3dpbmRvd3MvZGNlLmNdCglXaW5lIGdldHMgcGFsZXR0ZSBtYW5hZ2VyIHdpdGggc3VwcG9ydCBmb3IgbW9yZSB0aGFuIDIwIGNvbG9ycy4gCglPbmx5IFBzZXVkb0NvbG9yIGFuZCBUcnVlQ29sb3IgdmlzdWFscyB0ZXN0ZWQgc28gZmFyLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL3dpbi5jXSAKCVNldCBYIHNpemUgaGludHMgZm9yIFdTX0VYX0RMR01PREFMRlJBTUUgd2luZG93cyAobm8gcmVzaXplKSBhbmQKCXVzZSBYUmVjb25maWd1cmVXTVdpbmRvd3MoKSBpbnN0ZWFkIG9mIFhDb25maWd1cmVXaW5kb3coKSBpbgoJbWFuYWdlZCBtb2RlLgoKCSogW21lbW9yeS9nbG9iYWwuY10KCURvIG5vdCBhbGxvY2F0ZSBtb3JlIHRoYW4gNjQwSyBvZiBET1MgbWVtb3J5LgoKCSogW21pc2MvbWFpbi5jXQoJRG8gbm90IGFsbG93IC1kZXNrdG9wIGFuZCAtbWFuYWdlZCB0b2dldGhlci4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIEp1bCAxMiAxNzo0MzowNSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9zY3JvbGwuY10KCVVzZSBXaW4zMiBoZWFwIGZ1bmN0aW9ucyB0byBhbGxvY2F0ZSBzY3JvbGwtYmFyIGluZm8gc3RydWN0dXJlLgoKCSogW2RlYnVnZ2VyL2RiZy55XSBbZGVidWdnZXIvcmVnaXN0ZXJzLmNdCglBZGRlZCBzdXBwb3J0IGZvciBGUyBhbmQgR1Mgc2VnbWVudCByZWdpc3RlcnMuCglDaGVjayB0aGF0IHNlZ21lbnQgcmVnaXN0ZXJzIHZhbHVlIGFyZSBPSyBiZWZvcmUgcmV0dXJuaW5nIGZyb20KCXRoZSBzaWduYWwgaGFuZGxlci4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL3JlbGF5LmNdIFtsb2FkZXIvYnVpbHRpbi5jXQoJQ2hhbmdlZCByZWxheSBkZWJ1Z2dpbmcgZm9yIFdpbjMyIGZ1bmN0aW9uOiB0aGUgcmVsYXkgY29kZSBub3cKCXBhc3NlcyB0aGUgZW50cnkgcG9pbnQgYWRkcmVzcyBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBuYW1lLgoKCSogW3Rvb2xzL2J1aWxkLmNdIFttaXNjZW11LyouY10KCUFkZGVkIHN1cHBvcnQgZm9yIGRhdGEgZW50cnkgcG9pbnRzIGluIFdpbjMyIERMTHMuCglBZGRlZCAnY2RlY2wnIGZ1bmN0aW9uIHR5cGUgZm9yIFdpbjMyLgoJRm9yICdyZWdpc3RlcicgZnVuY3Rpb24sIHRoZSByZWxheSBjb2RlIG5vdyBwYXNzZXMgYSBwb2ludGVyIHRvCgl0aGUgU0lHQ09OVEVYVCBzdHJ1Y3R1cmUuCgkKCSogW2luY2x1ZGUvcmVnaXN0ZXJzLmhdIFtpbmNsdWRlL3dpbmUuaF0KCU1vdmVkIFNJR0NPTlRFWFQgc3RydWN0dXJlIGRlZmluaXRpb24gaW4gcmVnaXN0ZXJzLmguCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglEb24ndCBkaWUgYXQgb25jZSBpZiBzb21lIFdpbjMyIGVudHJ5IHBvaW50cyBjYW5ub3QgYmUgZm91bmQsIGJ1dAoJc2V0IHRoZW0gdG8gTlVMTCwganVzdCBsaWtlIHdlIGRvIGZvciBXaW4xNi4gVGhpcyBhbGxvd3Mgc29tZQoJcHJvZ3JhbXMgdG8gZ28gZnVydGhlciBiZWZvcmUgY3Jhc2hpbmcuCgoJKiBbbG9hZGVyL3Rhc2suY10gW2xvYWRlci9tYWluLmNdCglNb3ZlZCBnbG9iYWwgaW5pdGlhbGl6YXRpb25zIGZyb20gSW5pdFRhc2soKSB0byBNQUlOX0luaXQoKSwgYXMKCXRoZXkgbm8gbG9uZ2VyIG5lZWQgYSB0YXNrIGNvbnRleHQgd2l0aCB0aGUgbmV3IFNFR1BUUiBoZWFwIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvc3RyaW5nLmNdCglBZGRlZCBsc3RyY3B5bkF0b1cgYW5kIGxzdHJjcHluV3RvQTsgbm90IHJlYWwgQVBJIGZ1bmN0aW9ucywgYnV0CiAJdmVyeSBjb252ZW5pZW50LgoKCSogW3dpbmRvd3MvZ3JhcGhpY3MuY10KCVBhcnRpYWxseSBpbXBsZW1lbnRlZCBEcmF3RWRnZSgpLgoKCSogW3dpbmRvd3MvdGltZXIuY10gW3dpbmRvd3MvY2FyZXQuY10KCUltcGxlbWVudGVkIFdpbjMyIHRpbWVyIGhhbmRsaW5nLiBVcGRhdGVkIGNhcmV0IG1hbmFnZW1lbnQgdG8gdXNlCglXaW4zMiB0aW1lcnMgKGF2b2lkcyBoYXZpbmcgdG8gdXNlIGEgV2luMTYgY2FsbGJhY2spLgoKCSogW3dpbmRvd3Mvd2luLmNdCglQcmV2ZW50IHByb2dyYW1zIGZyb20gc2V0dGluZyBzb21lIHN0eWxlIGJpdHMgd2l0aAoJU2V0V2luZG93TG9uZygpLiBUaGlzIHNob3VsZCBmaXggc29tZSBCYWRNYXRjaCBjcmFzaGVzLgoJTGluayBuZXcgd2luZG93cyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5rZWQgbGlzdC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJRG9uJ3QgdHJ5IHRvIGFjdGl2YXRlIGEgY2hpbGQgd2luZG93IGluIFNob3dXaW5kb3coKS4KCgkqIFt3aW5kb3dzL3dpbnByb2MuY10KCUFkZGVkIGEgMzItPjMyIHRodW5rIHRvIHN1cHBvcnQgQW5zaS1Vbmljb2RlIHRyYW5zbGF0aW9uLgoKV2VkIEp1bCAxMCAyMjoxMToxMiAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtmaWxlcy9kaXJlY3RvcnkuY10KCUFkZGl0aW9uYWwgKHVuZG9jdW1lbnRlZCkgcmV0dXJuIHZhbHVlIGZvciBHZXRUZW1wRHJpdmUoKSBhZGRlZC4KCgkqIFtmaWxlcy9kb3NfZnMuY10gW2ZpbGVzL2ZpbGUuY10gW2luY2x1ZGUvd2luZG93cy5oXQoJR2V0VGVtcEZpbGVOYW1lMzIqIGFkZGVkLgoJR2V0U2hvcnRQYXRoTmFtZSogYWRkZWQuCgoJKiBbbWVtb3J5L3N0cmluZy5jXQoJV2luMTYgbHN0cmNweSgpIGNhbiBnZXQgTlVMTCBwdHJzIGFzIGFyZ3VtZW50IGFuZCBzdXJ2aXZlLgoKCSogW21pc2MvbHpleHBhbmQuY10KCUxaT3BlbkZpbGUoKTogYWxzbyB0cnkgb3BlbmluZyB3aXRoIGNvbXByZXNzZWQgZmlsZW5hbWUgaWYgbm9ybWFsCiAJb3BlbiBmYWlscy4KCgkqIFttaXNjL29sZTJubHMuY10gW21pc2MvbHN0ci5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglDaGFyKiBhZGRlZC4KCUNvbXBhcmVTdHJpbmcqIGFkZGVkLgoKU3VuIEp1bCAgNyAwMToyMjoxNCAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW29iamVjdHMvZm9udC5jXSBbaWYxNjMyL2dkaTMyLnNwZWNdCglDcmVhdGVGb250SW5kaXJlY3QzMkEgYW5kIENyZWF0ZUZvbnRJbmRpcmVjdDMyVyBhZGRlZC4KCgkqIFttaXNjL29sZTJubHMuY10KCUdldFVzZXJEZWZhdWx0TENJRCByZXR1cm4gdmFsdWVzIHVwZGF0ZWQgZm9yIG5ldyBsYW5ndWFnZXMuCglGaW5uaXNoIHN1cHBvcnQgYWRkZWQgZm9yIEdldExvY2FsZUluZm9BLgoKCSogW29iamVjdC9wYWxldHRlXSBbZ2RpMzIuc3BlY10KCVJlYWxpemVQYWxldHRlMzIgYW5kIFNlbGVjdFBhbGV0dGUzMiBhZGRlZC4KCQpTYXQgSnVsICA2IDE3OjI3OjMwIDE5OTYgIFJvbmFuIFdhaWRlICA8cm9vdEB3YWlkZXIuaWU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJRml4dXAgZm9yIFNIRUxMX0ZpbmRFeGVjdXRhYmxlIHNvIHRoYXQgRmlsZS0+UnVuIGZyb20gcHJvZ21hbgoJd29ya3Mgb25jZSBtb3JlLiBTdGlsbCBuZWVkcyBzb21lIG1vcmUgZml4dXBzIC0gZ3JlcCBmb3IgRklYTUUgaW4KCXRoaXMgZmlsZS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIEp1bCAgNSAxNjoyNzo0MyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdCglVc2UgV2luZG93cyBmaWxlIEkvTyByb3V0aW5lcyB0byBsb2FkIHRoZSBkZXNrdG9wIGJpdG1hcC4KCgkqIFtmaWxlcy9maWxlLmNdCglJbXBsZW1lbnRlZCBSZW1vdmVEaXJlY3RvcnkqIGFuZCBEZWxldGVGaWxlKi4KCgkqIFtpbmNsdWRlL3dpbmUuaF0KCUFkZGVkIFNJR0NPTlRFWFQgdHlwZWRlZiB0byByZXBsYWNlICNkZWZpbmUgc2lnY29udGV4dF9zdHJ1Y3QuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUZpeGVkIGluaXRpYWwgYnJlYWtwb2ludCBzZXR0aW5nIGZvciBXaW4zMiB0YXNrcy4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglJZ25vcmUgVW5pY29kZSBmb3JtYXRzIGZvciB3c3ByaW50ZjE2KCkuCgoJKiBbb2JqZWN0cy9mb250LmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEdldFRleHRNZXRyaWNzLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvY2xhc3MuY10KCSAgW3dpbmRvd3MvZGlhbG9nLmNdCglNb2RpZmllZCB3aW5kb3dzIHByb2NlZHVyZXMgdG8gdXNlIHRodW5rcywgdG8gZW5zdXJlIHRoYXQgdGhlCglwcm9jZWR1cmUgY2FuIGJlIGNhbGxlZCBkaXJlY3RseSBmcm9tIHRoZSBXaW5kb3dzIHByb2dyYW0uCgoJKiBbd2luZG93cy93aW4uY10KCUFkZGVkIGZ1bmN0aW9uIFdJTl9CdWlsZFdpbkFycmF5KCkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZW51bWVyYXRlCgl3aW5kb3dzLiBJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIEVudW1XaW5kb3dzKCkgYW5kIGZyaWVuZHMuCgpGcmkgSnVsICA1IDExOjU2OjIyIDE5OTYgIEFuZHJlYXMgS2lyc2NoYmF1bSA8YW5rQHJiZy5pbmZvcm1hdGlrLnRoLWRhcm1zdGFkdC5kZT4KCgkqIFtjb250cm9scy9idXR0b24uY10gW3dpbmRvd3Mvd2luLmNdCglPcGVyYXRvciBwcmVjZWRlbmNlIGZpeGVzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIEVTX1BBU1NXT1JELCBFU19MT1dFUkNBU0UgYW5kIEVTX1VQUEVSQ0FTRSBzdHlsZXMuCglGaXhlZCB3b3JkIHdyYXAgd2l0aCBsb25nIHdvcmRzLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglOZXcgYWxpYXMgIndoZXJlIiBmb3IgY29tbWFuZCAiYmFja3RyYWNlIi4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdCglDb3JyZWN0ZWQgcGFyYW1ldGVyIG9mIEV4dFRleHRPdXQuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQ29ycmVjdGVkIHByaW50aW5nIG9mIHRhYmxlIG9mIG1vZHVsZXMuCgoJKiBbbWlzYy9zcHkuY10KCVJlbW92ZWQgc3VwZXJmbHVvdXMgXG4gaW4gbWVzc2FnZSBuYW1lLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRGVjbGFyZWQgTVNHX1NlbmRNZXNzYWdlIGFzIHN0YXRpYy4KCUNoYW5nZWQgcGFyYW1ldGVyIG9mIERpcmVjdGVkWWllbGQoKSBmcm9tIHF1ZXVlIGhhbmRsZSB0byB0YXNrIGhhbmRsZS4KCVJlbW92ZWQgd2FybmluZyBtZXNhZ2VzIGZvciBhcmd1bWVudCBvZiBwcmludGYuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUFkZGVkIHRoZSBmbGFnIERUX05PUFJFRklYIHdoZW4gZHJhd2luZyB3aW5kb3cgdGl0bGVzLgoKCSogW3dpbmRvd3Mvd2luLmNdCglXSU5fV2Fsa1dpbmRvd3Mgbm93IHByaW50cyB0aGUgaW52YWxpZCB3aW5kb3cgaGFuZGxlLgoJQWRkZWQgYSB3YXJuaW5nIGlmIEdldC0vU2V0V2luZG93V29yZC8tTG9uZyBnZXRzIGFuIGludmFsaWQgb2Zmc2V0LgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXQoJQWxsb3dzIGNyZWF0aW5nIGRpYWxvZyB3aW5kb3dzIHdpdGggTlVMTCBhcyBkaWFsb2cgZnVuY3Rpb24uCgpXZWQgSnVsICAzIDA5OjI2OjQxIDE5OTYgIEFuZHJldyBMZXd5Y2t5IDxwbGV3eWNreUBvaXNlLnV0b3JvbnRvLmNhPgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUVWRU5UX2tleTogRml4ZXMgdG8gVktfIGNvZGUgZ2VuZXJhdGlvbiBmb3Igc3BhY2UgYmFyIGFuZAoJcHVuY3R1YXRpb24uCgoJKiBbZmlsZXMvZmlsZS5jXQoJR2V0VGVtcEZpbGVOYW1lOiBmaXJzdCBjaGFyYWN0ZXIgaW4gdGVtcG9yYXJ5IG5hbWUgaXMgIn4iLgoKCSogW21lbW9yeS9oZWFwLmNdCglIRUFQX01ha2VJblVzZUJsb2NrRnJlZSBub3cgZnJlZXMgdGhlIHdob2xlIHN1YmhlYXAgaWYgcG9zc2libGUuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglFeHRUZXh0T3V0MTYoKTogaGFuZGxlIE5VTEwgbHBSZWN0IGFuZCBFVE9fT1BBUVVFLgoKCSogW21pc2MvZHJpdmVyLmNdCglSZW1vdmVkIHNvbWUgYnVncyBhbmQgcmVmb3JtYXR0ZWQuIEFjdHVhbGx5IGxvYWRzIGRyaXZlcnMgbm93LgoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIENhbGxEcml2ZXJQcm9jKCkgYW5kIENhbGxXaW5kb3dzRXhpdFByb2MoKS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglNT0RVTEVfQ2FsbFdFUCgpOiBuZXcgZnVuY3Rpb24uCgoJKiBbbWlzYy9semV4cGFuZC5jXQoJTFpTZWVrKCk6IHJldHVybiBuZXcgcG9pbnRlciwgbm90IG9sZCBvbmUuCgoJKiBbbWlzYy92ZXIuY10KCWZpbmRfbmVfcmVzb3VyY2UoKTogZml4ZWQgZGVwZW5kZW5jZSBvbiBMWlNlZWsoKSBidWcuCglHZXRGaWxlUmVzb3VyY2UoKTogaW5pdGlhbGl6ZSByZXNsZW4gYmVmb3JlIHVzaW5nIGl0LgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCVNldENsYXNzV29yZCgpOiBhZGQgbWlzc2luZyBlbHNlLgoKCSogW29iamVjdHMvZm9udC5jXQoJbHBGb250TGlzdCBpcyBub3cgTUFYX0ZPTlRTKzEuIEl0IHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBhcnJheS4KCUluaXRGb250TGlzdDogYWxsb2NhdGUgb25lIGh1Z2UgYXJyYXkgb2Ygc3RydWN0dXJlcy4KCUZPTlRfTWF0Y2hGb250OiB1cHBlcmNhc2UgdGhlIGZhY2UgbmFtZS4KClRodSBKdW4gMjcgMTI6NDE6NDAgMTk5NiAgQnJ1Y2UgTWlsbmVyIDxicnVjZUBnZW5ldGljcy51dGFoLmVkdT4KCgkqIFttZW1vcnkvaGVhcC5jXQoJRml4ZWQgYSB0eXBvIGluIEhlYXBSZUFsbG9jKCkuCgpUdWUgSnVuIDI1IDIyOjIyOjAzIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RpcmVjdG9yeS5jXSBbZmlsZXMvZHJpdmUuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10KCSAgW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdldFRlbXBQYXRoKiBhZGRlZAoJR2V0RHJpdmVUeXBlKiBmaXhlZCwgdXBkYXRlZCB0byBOZXdOYW1lU3RhbmRhcmQuCglHZXRDdXJyZW50RGlyZWN0b3J5KiBmaXhlZCAobmVlZHMgdG8gcHJlcGVuZCBYOlwpLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1pc3NpbmcgTlVMTCBjaGVjayBhZGRlZC4KCgkqIFtpZjE2MzIvd2lubW0uc3BlY10gW2xvYWRlci9idWlsdGluLmNdCgl3aW5tbS5kbGwgKDMyYml0IG1tc3lzdGVtIGVxdWl2YWxlbnQpIHNwZWNzIGFkZGVkLgoKCSogW21lbW9yeS9zdHJpbmcuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdCglSdGx7TW92ZSxaZXJvLEZpbGx9TWVtb3J5IGFkZGVkLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNvbWUgTlVMTCBwdHIgZGVyZWZlcmVuY2UgYnVncyBmaXhlZC4KCgkqIFttdWx0aW1lZGlhL21jaWNkYS5jXVttdWx0aW1lZGlhL21jaXN0cmluZy5jXVttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglDaGVjayBmb3IgTlVMTCBwdHIuCglGaWxsIG1jaU9wZW5EcnYgd2hlbiBtaXhpbmcgbWNpT3BlbiBhbmQgbWNpU2VuZFN0cmluZygib3BlbiAuLiIpLgoJQWxpYXNpbmcgc2hvdWxkIHdvcmsgZm9yIGFsbCBNQ0kgZGV2aWNlcy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJQWxsb3cgcGFzc2luZyBpbnZhbGlkIHdpbmRvdyBoYW5kbGVzIHRvIENsb3NlV2luZG93KCkuCgpUdWUgSnVuIDI1IDIwOjAyOjE1IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10KCUdldFN5c3RlbURpcmVjdG9yeTMyQSBhbmQgR2V0U3lzdGVtRGlyZWN0b3J5MzJXIGFkZGVkLgoKCSogW21pc2MvbWFpbi5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglCZWVwIGFuZCBTZXRFbnZpcm9ubWVudFZhcmlhYmxlMzJXIGFkZGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpXZWQgSnVuIDE5IDE0OjQ5OjI3IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AZmF1aTQ1LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RyaXZlLmNdIAoJR2V0RnJlZURpc2tTcGFjZSosIEdldFZvbHVtZUluZm9ybWF0aW9uKiBhZGRlZC4KCgkqIFtmaWxlcy9maWxlLmNdCglGbHVzaEZpbGVCdWZmZXJzLCBDcmVhdGVEaXJlY3RvcnkqIGFkZGVkLgoKCSogW2luY2x1ZGUvd2luYmFzZS5oXSBbaW5jbHVkZS93aW5kb3dzLmhdCglQcm90b3R5cGVzLCBkZWZpbmVzIGFkZGVkIGFuZCBmaXhlcy4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2luY2x1ZGUvcmVzb3VyY2UzMi5oXQoJICBbd2luMzIvY3Vyc29yaWNvbjMyLmNdIFt3aW4zMi9yZXNvdXJjZS5jXSBbd2luZG93cy9kaWFsb2cuY10KCUZpeGVzIHRvIHJlc291cmNlIGhhbmRsaW5nLgoKCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXQoJU3BlY3MgZm9yIGltcGxlbWVudGVkIGZ1bmN0aW9ucyBhZGRlZAoJU29tZSB0aHVua3MgdG8gZnVuY3Rpb25zIHdoaWNoIGFyZSBzYW1lIGFzIHdpbjE2IGVxdWl2YWxlbnRzLgoKCSogW2xvYWRlci90YXNrLmNdCglHZXRBcHBDb21wYXRGbGFncygpIGFkZGVkLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCU9uZSBtaXNzaW5nIGVsc2UgYWRkZWQsIHNtYWxsIGhhY2sgdG8gUmVnUXVlcnlWYWx1ZTE2KCkuCgoJKiBbd2luMzIvZmlsZS5jXQoJR2V0RmlsZUF0dHJpYnV0ZXNBKCkgZml4ZWQgKHdhcyB1c2luZyBET1MgcGF0aCBhcyBVTklYIHBhdGgpLgoKVHVlIEp1biAxOCAyMTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10KCUZpeGVkIEZyZWVSZXNvdXJjZSgpIHJldHVybiB2YWx1ZS4KCgkqIFtvYmplY3RzL3RleHQuY10KCUZpeGVkIGEgYnVnIGluIEV4dFRleHRPdXQoKSB0aGF0IHdhcyBjYXVzaW5nIG92ZXJsYXBwZWQgY2hhcmFjdGVycwoJaW4gV2luV29yZC4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJU1dQX0ZSQU1FQ0hBTkdFRCBmb3IgdG9wLWxldmVsIHdpbmRvd3Mgbm93IGludmFsaWRhdGVzIGNsaWVudAoJYXJlYSBhcyBjbG9jay5leGUgd2FudHMuCgpUdWUgSnVuIDE4IDExOjMwOjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJTWluaSBidWdmaXg6ICdyZXZpdmFsJyBvZiBtaXNzaW5nIHNjcm9sbGJhciBpbiBsaXN0Ym94ZXMuCgpNb24gSnVuIDE3IDIwOjI3OjQxIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAY2xpYy5uZXQ+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Gci5yY10gW3Jlc291cmNlcy9UT0RPXQoJTWFkZSBjaGFuZ2VzIGZvciBDaG9vc2VfRm9udCBkaWFsb2cuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBKdW4gMTYgMTY6NTE6MzEgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbbWVtb3J5L2hlYXAuY10KCUZpeGVkIGJ1ZyBpbiBIZWFwUmVhbGxvYyAodGhhbmtzIHRvIEJydWNlIE1pbG5lcikuCgoJKiBbbWlzYy93c3ByaW50Zi5jXQoJRml4ZWQgYXJndW1lbnQgc2l6ZSBmb3IgJWMgZm9ybWF0IGluIHdzcHJpbnRmMTYoKS4KCgkqIFtvYmplY3RzL2RjLmNdCglEb24ndCBmcmVlIGhGaXJzdEJpdG1hcCBmb3Igc2F2ZWQgRENzLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCUFkZGVkIHRpbWVyIGhhbmRsaW5nIGluIEVWRU5UX1dhaXRYRXZlbnQoKS4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUluIE1TR19UcmFuc2xhdGVNb3VzZU1zZyBhbmQgTVNHX1RyYW5zbGF0ZUtiZE1zZywgY2hlY2sgaWYgdGhlCglldmVudCBpcyBmb3IgdGhlIGN1cnJlbnQgdGFzazsgaWYgbm90LCB3YWtlIHRoZSBvdGhlciB0YXNrLgoKCSogW3dpbmRvd3MvcXVldWUuY10gW2luY2x1ZGUvcXVldWUuaF0KCUFkZGVkICdzZWxmJyBoYW5kbGUgaW4gcXVldWUgc3RydWN0dXJlLgoKCSogW3dpbmRvd3MvdGltZXIuY10KCUFkZGVkIFRJTUVSX0V4cGlyZVRpbWVycygpIGZ1bmN0aW9uIHRvIG1hcmsgZXhwaXJlZCB0aW1lcnMgYW5kCgl3YWtlIHVwIHRoZSBjb3JyZXNwb25kaW5nIHRhc2tzLgoKVGh1IEp1biAxMyAwMTo0NjozMyBFRFQgMTk5NiAgV2lsbGlhbSBNYWdybyA8d21hZ3JvQHRjLmNvcm5lbGwuZWR1PgoKCSogW3dpbmRvd3MvbWFwcGluZy5jXQoJRmlyc3QgcG9pbnQgaW4gbGlzdCB3YXMgbWFwcGVkIG11bHRpcGxlIHRpbWVzIGluIERQdG9MUCBhbmQKIAlMUHRvRFAuICBPdGhlciBwb2ludHMgd2VyZSBub3QgbWFwcGVkLgoKV2VkIEp1biAxMiAxODowODo0NSAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFttaXNjL3NoZWxsLmNdCglTb21lIGZpeGVzIGZvciBFeHRyYWN0SWNvbiBmdW5jdGlvbiBmYW1pbHkuCgoJKiBbZG9jdW1lbnRhdGlvbi91c2VyX21vZHVsZV0KCUNoYXB0ZXIgYWJvdXQgd2luZG93aW5nIGFuZCBtZXNzYWdpbmcgc3Vic3lzdGVtcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIEp1biAxMSAxNToyMDo0MyAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtkZWJ1Z2dlci9icmVhay5jXSBbbG9hZGVyL3NpZ25hbC5jXQoJRml4ZWQgYnJlYWtwb2ludHMgaW4gMzItYml0IGNvZGUuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBtYW55IG1vcmUgV2luMzIgdmVyc2lvbnMgb2Ygc3RhbmRhcmQgc3RydWN0dXJlcy4KCgkqIFtpbmNsdWRlL3dpbnJlZy5oXSBbbWlzYy9yZWdpc3RyeS5jXQoJTW92ZWQgcHJpdmF0ZSB0eXBlcyBpbnRvIHJlZ2lzdHJ5LmMuCgoJKiBbbWVtb3J5L3N0cmluZy5jXSAoTmV3IGZpbGUpCglNb3ZlZCBtb3N0IHN0cmluZyBmdW5jdGlvbnMgZnJvbSBtaXNjL2xzdHIuYzsgYWRkZWQgV2luMzIgdmVyc2lvbgoJb2YgYWxsIGZ1bmN0aW9ucy4KCgkqIFttaXNjL3dzcHJpbnRmLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB3c3ByaW50ZiBmdW5jdGlvbnMuCgoJKiBbb2JqZWN0cy9iaXRtYXAuY10KCUltcGxlbWVudGVkIFdpbjMyIGJpdG1hcCBmdW5jdGlvbnMuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCURvbid0IHNldCBkaWFsb2cgcHJvY2VkdXJlIGJlZm9yZSB0aGUgY29udHJvbHMgYXJlIGNyZWF0ZWQuIFRoaXMKCWF2b2lkcyBhIGNyYXNoIGluIFdpbmhlbHAuCgpUdWUgSnVuIDExIDE0OjEwOjA2IDE5OTYgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtjb250cm9scy9tZW51LmNdIFtpZjE2MzIvdXNlci5zcGVjXSBbd2luZG93cy9tZXNzYWdlLmNdCglSZXBsYWNlIFBlZWtNZXNzYWdlIHdpdGggUGVla01lc3NhZ2UxNi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bbWlzYy9tYWluLmNdCglHZXRWZXJzaW9uMzIsR2V0VmVyc2lvbkV4MzJBLEdldFZlcnNpb25FeDMyVzogbmV3IGZ1bmN0aW9ucy4KCU1BSU5fUGFyc2VWZXJzaW9uOiBuZXcgZnVuY3Rpb24sIG5ldyBjb21tYW5kIGxpbmUgb3B0aW9uIC13aW52ZXIuCglHZXRWZXJzaW9uOiBtb2RpZmllZCB0byB0YWtlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBpbnRvIGFjY291bnQuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFt3aW4zMi9wcm9jZXNzLmNdCglGcmVlTGlicmFyeTMyOiBuZXcgZnVuY3Rpb24uCglUbHNBbGxvYzogaW5pdGlhbGl6ZSBUbHMgdG8gemVyby4KCUludGVybG9ja2VkSW5jcmVtZW50LEludGVybG9ja2VkRGVjcmVtZW50LEludGVybG9ja2VkRXhjaGFuZ2U6IG5ldwoJZnVuY3Rpb25zLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJU2V0RXJyb3JNb2RlLEdldEFjdGl2ZVdpbmRvdzogbmV3IHJlbGF5cyB0byBleGlzdGluZyBmdW5jdGlvbnMuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL3VzZXIzMi5jXQoJUGVla01lc3NhZ2UzMkEsUGVla01lc3NhZ2UzMlc6IG5ldyBmdW5jdGlvbnMuCgoJKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXVtpbmNsdWRlL3dpbmRvd3MuaF0KCU1vdmVkIE1TRzMyIHRvIHdpbmRvd3MuaC4KCVJlbmFtZWQgTVNHIHRvIE1TRzE2LgoJTW9kaWZpZWQgcHJvdG90eXBlcyB0byB1c2UgTVNHMTYKCgkqIFtpbmNsdWRlL3dpbmJhc2UuaF0KCU9TVkVSU0lPTklORk8zMkEsT1NWRVJTSU9OSU5GTzMyVzogbmV3IHN0cnVjdHVyZXMuCgpTdW4gSnVuICA5IDIwOjUzOjMwIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2xvYWRlci9idWlsdGluLmNdCgl2ZXJzaW9uLmRsbCxsejMyLmRsbCBhZGRlZC4KCgkqIFtpbmNsdWRlL2x6ZXhwYW5kLmhdIFtpZjE2MzIvbHozMi5zcGVjXSBbaWYxNjMyL2x6ZXhwYW5kLnNwZWNdCgkgIFttaXNjL2x6ZXhwYW5kLmNdCglsejMyLmRsbCBhZGRlZC4KCU1vZGlmaWVkIHRvIG5ldyBmdW5jdGlvbiBuYW1pbmcgc3RhbmRhcmQuCgoJKiBbaW5jbHVkZS92ZXIuaF0gW2lmMTYzMi92ZXIuc3BlY10gW2lmMTYzMi92ZXJzaW9uLnNwZWNdIFttaXNjL3Zlci5jXQoJdmVyc2lvbi5kbGwgYWRkZWQgKHdpbjMyIHZlcnNpb24gb2YgdmVyLmRsbCkuCglNb2RpZmllZCB0byBuZXcgZnVuY3Rpb24gbmFtaW5nIHN0YW5kYXJkLgoJVXNlIHJlZ2lzdHJ5IHRvIGxvb2sgdXAgYSBMT0NBTEUgbGFuZ2lkcyB0b28uCgkoVmVySW5zdGFsbEZpbGUsVmVyRmluZEZpbGUgc3RpbGwgc3R1YnMpCgpGcmkgSnVuICA3IDIwOjQwOjIwIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbZmlsZXMvZmlsZS5jXQoJQWRkZWQgYSB3YXJuaW5nIGlmIEdldFRlbXBGaWxlTmFtZSgpIGdldHMgYSBiYWQgZHJpdmUgcGFyYW1ldGVyLgoKCSogW21pc2MvY29tbWRsZy5jXQoJQ2hhbmdlZCBmaWxlIGxpc3Rib3ggY29sb3IgdG8gZ3JheSBpbiBTYXZlRmlsZSBkaWFsb2cgCgkoanVzdCBsaWtlIFdpbmRvd3MgZG9lcyB0aGlzKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIEp1biAgNSAyMDoxMzo1NCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVkIHdQYXJhbSBvZiBXTV9EUkFXSVRFTSBtZXNzYWdlLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2xvYWRlci9idWlsdGluLmNdCglSZW1vdmUgV1BST0NTMzIgRExMLCBhcyB0aGUgcmVsYXkgY29kZSBjYW4gY2FsbCBXaW5lIHJvdXRpbmVzCglkaXJlY3RseS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFtsb2FkZXIvbmVfaW1hZ2UuY10KCUZpeGVkIGluaXRpYWwgc3RhY2sgbGF5b3V0IGZvciBzZWxmLWxvYWRpbmcgbW9kdWxlcy4KCgkqIFt0b29scy9idWlsZC5jXQoJRml4ZWQgZGF0YSBzZWdtZW50IGJ1aWxkaW5nIGZvciBXaW4xNiBtb2R1bGVzLgoKCSogW3dpbmRvd3MvZGVmZGxnLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9ucyBvZiBEZWZEbGdQcm9jKCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1lcmdlZCBXaW4xNiBhbmQgV2luMzIgZGlhbG9nIGNvZGUuCglBZGRlZCBzdXBwb3J0IGZvciBjb250cm9sIGV4dHJhIGRhdGEgaW4gZGlhbG9nIGl0ZW0gdGVtcGxhdGUuCgoJKiBbd2luZG93cy93aW4uY10KCVVuaWZpZWQgV2luMTYgYW5kIFdpbjMyIHZlcnNpb25zIG9mIENyZWF0ZVdpbmRvdygpLgoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBHZXRXaW5kb3dMb25nKCkuCgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglDaGFuZ2VkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB3aW5kb3cgcHJvY2VkdXJlcywgc28gdGhhdCAxNi1iaXQKCXdpbnByb2NzIGFyZSB2YWxpZCBzZWdtZW50ZWQgcG9pbnRlcnMuCgpTdW4gSnVuICAyIDE2OjM5OjQ2IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10KCUZpeGVkIGFub3RoZXIgYnVnIGluIHRoZSB3OTUgbG9hZGVyLiBRdWlldGVuZWQgc29tZSBkZWJ1ZyBvdXRwdXQuCgpTdW4gSnVuICAyIDEwOjAwOjIyIDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbd2luZG93cy93aW5wcm9jLmNdCglCdWcgZml4OiBXTV9QQVJFTlROT1RJRlk6IGRvbid0IGZhbGwgdGhyb3VnaCB0byBXTV9TRVRURVhULgoKU2F0IEp1biAgMSAxMjozNzoyMiAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBzdGhpbmMuZGVtb24uY28udWs+CgoJKiBbcmVzb3VyY2VzL1RPRE9dIFtyZXNvdXJjZXMvc3lzcmVzX0l0LnJjXQoJVXBkYXRlZCBmb250IGRpYWxvZyBib3guCgpUaHUgTWF5IDMwIDIxOjA1OjE5IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbaW5jbHVkZS9jb21tZGxnLmhdIFttaXNjL2NvbW1kbGcuY10KCUNob29zZUZvbnQoKSBhbmQgQ2hvb3NlQ29sb3IoKTogCglCdWdmaXhlcyBhbmQgYWRkZWQgbW9yZSBzdXBwb3J0IGZvciBzb21lIENGXyogYW5kIENDXyogZmxhZ3M6IAoJZGlhbG9nIHRlbXBsYXRlcyBhbmQgZm9udCBzaXplIGNvbnRyb2wuCglCdWdmaXggaW4gc3RydWN0dXJlIGRlZmluaXRpb24gb2YgQ0hPT1NFQ09MT1IgZGVmaW5pdGlvbi4KCgkqIFtpcGMvZGRlX3Byb2MuY10gW3dpbmRvd3MvZXZlbnQuY10KCVJlcGxhY2VkIFNlbmRNZXNzYWdlIHdpdGggU2VuZE1lc3NhZ2UxNiBhbmQgYWRkZWQgaW5jbHVzaW9uIG9mCiAJZGRlX3Byb2MuaCBmb3IgZXJyb3ItZnJlZSBjb21waWxhdGlvbiBvZiBpcGMgbW9kdWxlLgoKVGh1IE1heSAzMCAxOTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJTWFkZSBTY3JvbGxEQyB0byBzYXZlL3Jlc3RvcmUgY3VycmVudCBjbGlwcGluZyByZWdpb24uCgoJKiBbbWlzYy9jbGlwYm9hcmQuY10gW3dpbmRvd3MvZXZlbnQuY10KCUltcGxlbWVudGVkIG1vc3Qgb2YgdGhlIHByZXZpb3VzbHkgbWlzc2luZyBmZWF0dXJlcyAobm90IHRlc3RlZCksIAoJaW1wcm92ZWQgdGV4dCBwYXN0aW5nIGZyb20vdG8gWC4gCgoJKiBbaWYxNjMyL3VzZXIuc3BlY10gW2lmMTYzMi9nZGkuc3BlY10gW29iamVjdHMvZGMuY10KCSAgW29iamVjdHMvZ2Rpb2JqLmNdIFtvYmplY3RzL2NsaXBwaW5nLmNdIFt3aW5kb3dzL2RjZS5jXQoJICBbd2luZG93cy93aW5wb3MuY10gW3dpbmRvd3MvcGFpbnRpbmcuY10KCVVwZGF0ZWQgRENFIGNvZGUsIGltcGxlbWVudGVkIGR5bmFtaWMgaW52YWxpZGF0aW9uIG9mIG93bmVkIERDcy4KCVRoaXMgZml4ZXMgYSBsb3Qgb2YgcHJvYmxlbXMgd2l0aCBzY3JvbGxpbmcgaW4gV2luV29yZC4gTm90CglzdXJlIGFib3V0IHRoZSBlZmZlY3Qgb24gLWRlc2t0b3AuCgpXZWQgTWF5IDI5IDIzOjM1OjQ0IDE5OTYgIEp1a2thIElpdm9uZW4gPGlpdm9uZW5AY2MuaGVsc2lua2kuZmk+CgoJKiBbd2luMzIvdGltZS5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBTZXRTeXN0ZW1UaW1lIGFuZCBTZXRUaW1lWm9uZUluZm9ybWF0aW9uLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgbHN0cmNhdCwgbHN0cmNhdEEsIGxzdHJjbXAsIGxzdHJjbXBBLCBsc3RyY3B5LCBsc3RybGVuLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgU1lTVEVNX1BPV0VSX1NUQVRVUyBzdHJ1Y3R1cmUgYW5kIHByb3RvdHlwZXMgZm9yCglHZXRTeXN0ZW1Qb3dlclN0YXR1cywgU2V0U3lzdGVtUG93ZXJTdGF0ZSwgU2V0U3lzdGVtVGltZS4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdCglBZGRlZCBhIHByb3RvdHlwZSBmb3IgU2V0VGltZVpvbmVJbmZvcm1hdGlvbi4KCgkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBHZXRTeXN0ZW1Qb3dlclN0YXR1cyBhbmQgU2V0U3lzdGVtUG93ZXJTdGF0ZSBzdHVicy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVHVlIE1heSAyOCAxOTozNjozNiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9jb21iby5jXQoJRGVzdHJveSB0aGUgbGlzdGJveCBhbmQgZWRpdCBjb250cm9sIHdoZW4gZGVzdHJveWluZyB0aGUKCWNvbWJvLiBUaGlzIHNob3VsZCBwcmV2ZW50IGNyYXNoZXMgb24gYXBwbGljYXRpb24gZXhpdC4KCgkqIFttaXNjL3N5c3RlbS5jXSBbaWYxNjMyL3N5c3RlbS5zcGVjXQoJSW1wbGVtZW50ZWQgSW5xdWlyZVN5c3RlbSgpLgoKCSogW2xvYWRlci90YXNrLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10gW3dpbmRvd3MvcXVldWUuY10KCUZpcnN0IGF0dGVtcHQgYXQgaW50ZXItdGFzayBTZW5kTWVzc2FnZSgpLiBTdGlsbCBoYXMgYSBsb3Qgb2YKCXByb2JsZW1zLgoKVHVlIE1heSAyOCAxNDoyNjowNCAxOTk2ICBQZXRlciBCYWp1c3ogIDxoeXAteEBpbmYuYm1lLmh1PgoKCSogW3dpbmRvd3MvbWRpLmNdCglGaXhlZCBNRElUaWxlIHdpdGggaWNvbmljIGNoaWxkcmVuLgoKTW9uIE1heSAyNyAyMDoyODoxOCAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW21pc2MvY29tbWRsZy5jXQoJQ2hvb3NlRm9udCBkaWFsb2c6CgktIGNvbXBsZXRlIHJld3JpdGUgb2YgRm9udEZhbWlseUVudW1Qcm9jKCkgYW5kIEZvbnRTdHlsZUVudW1Qcm9jKCkKCSAgbm90IHJlYWwgYXZhaWxhYmxlIGZvbnQgdHlwZXMgKGUuZy4gIkJvbGQiKSBjYW4gbm90IHNlbGVjdGVkCgktIHN1cHBvcnRpbmcgbW9yZSBDRl9MSU1JVFNJWkUtIGFuZCBDRl8uLi5PTkxZLSBmbGFncwoKCSogW29iamVjdHMvZm9udC5jXQoJSW4gRk9OVF9NYXRjaEZvbnQgcGVyZm9ybSBjaGVjayBpZiAibGZGYWNlTmFtZSIgaXMgZmFtaWx5IGZyb20gWDExCglvbmx5IGlmICJsZkZhY2VOYW1lIiBpcyBhIHdpbmRvd3MgZm9udCBmYW1pbHkgdGhlbiBkbyBhIGNhbGwgb2YKCUZPTlRfVHJhbnNsYXRlTmFtZSgpIDogdGhpcyByZXN1bHRzIGluIGJldHRlciBmb250IHNlbGVjdGlvbnMgaW4gCglDaG9vc2VGb250KCkgb3IgYXBwbGljYXRpb25zIGxpa2UgY2hhcm1hcC5leGUgb3Igd3JpdGUuZXhlLgoJQWRkZWQgYSBQYXJzZUZvbnRQYXJtcygpIGNhbGwgaWYgbmVjZXNzYXJ5IGluIGZ1bmN0aW9uIAoJRk9OVF9NYXRjaEZvbnQoKTogd2UgbmVlZCBhIGZvbnQgbmFtZSBhcyBiYXNpcyBmb3IgR2V0VGV4dEZhY2UoKSAKCWV2ZW4gaWYgdGhlcmUgaXNuJ3Qgb25lLi4uCgoJKiBbcmVzb3VyY2VzL1RPRE9dCglJbnZlbnRvcnkgb2YgcmVzb3VyY2UgdHJhbnNsYXRpb25zIGluIHN5c3Jlc18/Py5yYwoKRnJpIE1heSAyNCAxNjozMzoyOCAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFttaXNjL3JlZ2lzdHJ5LmNdCglfdzk1X2xvYWRyZWc6IHVzZSBvZmZzZXQgdG8gZGV0ZXJtaW5lIG5leHQgUkdEQiBwb3NpdGlvbiB0b28uCgpUaHUgTWF5IDIzIDE5OjM1OjM4IDE5OTYgIEdyZWcgS3JlaWRlciA8a3JlaWRlckBuYXRsYWIucmVzZWFyY2gucGhpbGlwcy5jb20+CgoJKiBbY29udHJvbHMvY29tYm8uY10KCUZpeGVkIHNpemUgb2YgY29tYm8sIGxib3gsIGFuZCBidXR0b24gKGxiIHNvbWV0aW1lcyBvZmYgYnkgMiBwaXhlbHMpLgoKCSogW21pc2MvbWFpbi5jXQoJUmVzdWx0IG9mIG9wdGlvbiAiLWZpeGVkbWFwIiBpcyB0byB0dXJuIGZsYWcgb24uCgpUaHUgTWF5IDIzIDE5OjE1OjQxIDE5OTYgIFJvbmFuIFdhaWRlICA8cm9vdEB3YWlkZXIuaWU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxFeGVjdXRlIGFuZCBGaW5kRXhlY3V0YWJsZSBub3cgYm90aCB1c2UgY29tbW9uIGNvZGUgdG8KCWRldGVybWluZSB0aGUgcmVxdWlyZWQgZXhlY3V0YWJsZSBmaWxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTWF5IDIxIDE0OjA2OjA3IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJTWFkZSBCdXR0b25XbmRQcm9jIGEgMzItYml0IHdpbmRvdyBwcm9jZWR1cmUuCgoJKiBbY29udHJvbHMvZGVza3RvcC5jXQoJTWFkZSBEZXNrdG9wV25kUHJvYyBhIDMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlLgoJQWRkZWQgaGFuZGxpbmcgb2YgV01fU0VUQ1VSU09SLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUFsbG9jYXRlIG1lbnUgaXRlbXMgYW5kIHN0cmluZ3Mgb24gdGhlIDMyLWJpdCBzeXN0ZW0gaGVhcC4KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb25zIGZvciBDaGFuZ2VNZW51LCBJbnNlcnRNZW51LCBNb2RpZnlNZW51LAoJQXBwZW5kTWVudSBhbmQgTG9hZE1lbnVJbmRpcmVjdC4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglBZGRlZCBwb3NzaWJpbGl0eSB0byBoYXZlIDMyLWJpdCBidWlsdC1pbiBjbGFzc2VzLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglJbXBsZW1lbnRlZCBHZXRMb2dpY2FsRHJpdmUoKSBhbmQgR2V0TG9naWNhbERyaXZlU3RyaW5ncygpLgoKCSogW21pc2Mvc3B5LmNdIFtpbmNsdWRlL3NweS5oXQoJQWRkZWQgc3VwcG9ydCBmb3Igc3B5aW5nIFdpbjMyIG1lc3NhZ2VzLgoKCSogW2xvYWRlci9idWlsdGluLmNdCglGaXhlZCBidWcgaW4gLWRsbCBvcHRpb24gcGFyc2luZy4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUFkZGVkIGJhY2sgdGhlIGNoYW5nZSBieSBIdXcgRC4gTS4gRGF2aWVzIHRvIGZyZWUgdGhlIGJsb2NrIGluCglMb2NhbFJlYWxsb2MoKSBiZWZvcmUgYWxsb2NhdGluZyB0aGUgbmV3IG9uZS4KCgkqIFtvYmplY3RzL2JpdG1hcC5jXSBbb2JqZWN0cy9jdXJzb3JpY29uLmNdIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJRml4ZWQgYnVnIGluIGJpdG1hcCBzaXplIHRoYXQgY2F1c2VkIG1lbW9yeSBjb3JydXB0aW9uIGZvciAyNGJwcC4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEZWZXaW5kb3dQcm9jKCkuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCUltcGxlbWVudGVkIFdpbjMyIHZlcnNpb24gb2YgU2VuZERsZ0l0ZW1NZXNzYWdlLAoJR2V0L1NldERsZ0l0ZW1UZXh0IGFuZCBHZXQvU2V0RGxnSXRlbUludC4KCgkqIFt3aW5kb3dzL21kaS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBEZWZGcmFtZVByb2MoKSBhbmQgRGVmTURJQ2hpbGRQcm9jKCkuCglEb24ndCBtYWtlIGEgY29weSBvZiB0aGUgT0JNIGJpdG1hcHMgZm9yIGV2ZXJ5IE1ESSB3aW5kb3cuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglJbXBsZW1lbnRlZCBXaW4zMiB2ZXJzaW9uIG9mIFNlbmRNZXNzYWdlKCkuCgkKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSBbd2luZG93cy9jbGFzcy5jXSBbd2luZG93cy93aW4uY10KCU5ldyBzY2hlbWUgZm9yIDMyLWJpdCB3aW5kb3cgcHJvY2VkdXJlcyB0byByZXBsYWNlIGFsaWFzZXMuIEFsbAoJMzItYml0IHdpbmRvdyBwcm9jZWR1cmUgZ2V0IGEgMTYtYml0IGFkZHJlc3MgcG9pbnRpbmcgdG8gYQoJV0lORE9XUFJPQyBzdHJ1Y3R1cmUuCglJbXBsZW1lbnRlZCBBbnNpPC0+VW5pY29kZSB0cmFuc2xhdGlvbiBmb3IgQ2FsbFdpbmRvd1Byb2MoKS4KCUFkZGVkIHRyYW5zbGF0aW9uIG9mIFdNX0RSQVdJVEVNIGJldHdlZW4gV2luMTYgYW5kIFdpbjMyLgoKCSogW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL2NhbGxiYWNrLmhdCglBZGRlZCB1Z2x5IGhhY2sgdG8gYnVpbGQgQ1JFQVRFU1RSVUNUIG9uIHRoZSBzdGFjayB3aGVuIHNlbmRpbmcKCVdNX05DQ1JFQVRFLgoJSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBHZXQvU2V0V2luZG93V29yZC9Mb25nIGFuZAoJR2V0L1NldFdpbmRvd1RleHQuCgkKRnJpIE1heSAxNyAxMDoyMDoxNiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQXZvaWQgZ3JheSB0ZXh0IG9uIGdyYXkgYmFja2dyb3VuZCBpbiBkaXNhYmxlZCBwdXNoIGJ1dHRvbnMKCXVzaW5nIGEgYi93IHJhc3RlciBhbmQgc29tZSByYXN0ZXIgb3BlcmF0aW9ucyAoUGF0Qmx0LEJpdEJsdCkuCgoJKiBbb2JqZWN0cy90ZXh0LmNdCglEcmF3VGV4dCgpOiBkb24ndCBkcmF3IGFuIHVuZGVyYmFyIGFueW1vcmUgaWYgRFRfQ0FMQ1JFQ1QgaXMgc2V0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgTWF5IDE2IDEzOjM1OjMxIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogWyovKi5jXQoJUmVuYW1lZCBSRUNULCBQT0lOVCBhbmQgU0laRSBzdHJ1Y3R1cmVzIHRvIFJFQ1QxNiwgUE9JTlQxNiBhbmQKCVNJWkUxNi4gSW1wbGVtZW50ZWQgV2luMzIgdmVyc2lvbiBvZiBtb3N0IGZ1bmN0aW9ucyB0aGF0IHRha2UKCXRoZXNlIHR5cGVzIGFzIHBhcmFtZXRlcnMuCgoJKiBbY29uZmlndXJlXQoJUGF0Y2hlZCBhdXRvY29uZiB0byBhdHRlbXB0IHRvIGNvcnJlY3RseSBkZXRlY3QgLWxuc2wgYW5kCgktbHNvY2tldC4gUGxlYXNlIGNoZWNrIHRoaXMgb3V0LgoJCgkqIFtjb250cm9scy9idXR0b24uY10KCUFkZGVkIHN1cHBvcnQgZm9yIFdpbjMyIEJNXyogbWVzc2FnZXMuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQXZvaWQgc2VuZGluZyBleHRyYSBXTV9NRU5VU0VMRUNUIG1lc3NhZ2VzLiBUaGlzIGF2b2lkcyBjcmFzaGVzCgl3aXRoIEV4Y2VsLgoKCSogW21lbW9yeS5oZWFwLmNdIFtpbmNsdWRlL2hlYXAuaF0KCUFkZGVkIHN1cHBvcnQgZm9yIFNFR1BUUnMgaW4gV2luMzIgaGVhcHMuIEFkZGVkIGEgZmV3IG1hY3JvcyB0bwogCW1ha2UgdXNpbmcgU0VHUFRScyBlYXNpZXIuIFRoZXkgYXJlIGEgYml0IHNsb3dlciB0aGFuIE1BS0VfU0VHUFRSLAogCWJ1dCB0aGV5IHdvcmsgd2l0aCBXaW4zMi4KCgkqIFttZW1vcnkvYXRvbS5jXQoJSW1wbGVtZW50ZWQgV2luMzIgYXRvbSBmdW5jdGlvbnMuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCBMb2NhbFJlQWxsb2MoKSBjaGFuZ2VzIHRvIGF2b2lkIGNvcHlpbmcgdGhlIHdob2xlIGJsb2NrIHR3aWNlLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJVXNlIC9kZXYvemVybyBpbnN0ZWFkIG9mIE1BUF9BTk9OIGZvciBWaXJ0dWFsQWxsb2MoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglQcm9wZXJseSBpbXBsZW1lbnRlZCB0aGUgV2luMzIgY2xhc3MgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3Mvd2lucHJvYy5jXSAoTmV3IGZpbGUpCglOZXcgZmlsZSBoYW5kbGluZyB0aGUgbWVzc2FnZSB0cmFuc2xhdGlvbiBiZXR3ZWVuIFdpbjE2IGFuZCBXaW4zMi4KCk1vbiBNYXkgMTMgMTg6MDA6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL21kaS5jXSBbd2luZG93cy9tZW51LmNdCglJbXByb3ZlZCBXTV9NRElDUkVBVEUgYW5kIFdNX01ESUNBU0NBREUgaGFuZGxpbmcuCgoJKiBbd2luZG93cy9ldmVudC5jXSBbb2JqZWN0cy9iaXRibHQuY10KCUhhbmRsZSBHcmFwaGljc0V4cG9zZSBldmVudCBmb3IgQml0Qmx0IGZyb20gc2NyZWVuIHRvIHNjcmVlbi4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCUJ1bmNoIG9mIGZpeGVzIGZvciBwcm9ibGVtcyB3aXRoIC1tYW5hZ2VkLgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQ2hhbmdlZCBjb25kaXRpb25zIGZvciBXTV9TSVpFLCBXTV9NT1ZFLCBhbmQgV01fR0VUTUlOTUFYSU5GTwoJaW4gQ3JlYXRlV2luZG93LgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3F1ZXVlLmNdIFttaXNjL3VzZXIuY10KCURvIG5vdCBzZW5kIFdNX1BBUkVOVE5PVElGWSB3aGVuIGluIEFwcEV4aXQgYW5kIGNhbGwgV0hfU0hFTEwKCW9uIHdpbmRvdyBjcmVhdGlvbi9kZXN0cnVjdGlvbi4KCgkqIFtvYmplY3RzL3BhbGV0dGUuY10KCUNydWRlIFJlYWxpemVQYWxldHRlKCkuIEF0IGxlYXN0IHNvbWV0aGluZyBpcyB2aXNpYmxlIGluIEx2aWV3UHJvLgoKU3VuIE1heSAxMiAwMjowNTowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJQWRkZWQgUmVjdGFuZ2xlICh1c2Ugd2luMTYgdmVyc2lvbikuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdCglBZGRlZCBHZXRXaW5kb3dzRGlyZWN0b3J5QSAodXNlIHdpbjE2IEdldFdpbmRvd3NEaXJlY3RvcnkpLgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIEdldFN1Yk1lbnUsIE1vdmVXaW5kb3csIFNldFNjcm9sbFBvcywgU2V0U2Nyb2xsUmFuZ2UgKHVzZSB3aW4xNgoJdmVyc2lvbnMpLgoJQWRkZWQgU2V0V2luZG93c0hvb2tFeEEgKGVtcHR5IHN0dWIgZm9yIG5vdykuCgoJKiBbaW5jbHVkZS9oYW5kbGUzMi5oXQoJQ2hhbmdlZCAjaW5jbHVkZSA8bWFsbG9jLmg+IHRvICNpbmNsdWRlIDxzdGRsaWIuaD4gdG8gcHJldmVudAoJaGF0ZSBtZXNzYWdlIGZyb20gRnJlZUJTRCBjb21waWxlci4KCgkqIFt3aW4zMi9uZXdmbnMuY10KCUFkZGVkIG5ldyBmdW5jdGlvbiBTZXRXaW5kb3dzSG9va0V4MzJBIChlbXB0eSBzdHViIGZvciBub3cpLgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJUmVtb3ZlZCByZWR1bmRhbnQgZGVidWdnaW5nIHByaW50ZiBzdGF0ZW1lbnQuCgpTdW4gTWF5IDEyIDAxOjI0OjU3IDE5OTYgIEh1dyBELiBNLiBEYXZpZXMgPGguZGF2aWVzMUBwaHlzaWNzLm94Zm9yZC5hYy51az4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUF2b2lkIGNyZWF0aW5nIGFkamFjZW50IGZyZWUgYmxvY2tzLgoJRnJlZSB0aGUgYmxvY2sgaW4gTG9jYWxSZUFsbG9jKCkgYmVmb3JlIGFsbG9jYXRpbmcgYSBuZXcgb25lLgoJRml4ZWQgTG9jYWxSZUFsbG9jKCkgZm9yIGRpc2NhcmRlZCBibG9ja3MuCgkKRnJpIE1heSAxMCAyMzowNToxMiAxOTk2ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRmkucmNdCglDaG9vc2VGb250IGFuZCBDaG9vc2VDb2xvciBkaWFsb2dzIHVwZGF0ZWQuCgpGcmkgTWF5IDEwIDE3OjE5OjMzIDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2ZpbGVzL2RyaXZlLmMsaWYxNjMyL2tlcm5lbC5zcGVjXQoJR2V0Q3VycmVudERpcmVjdG9yeSgpLFNldEN1cnJlbnREaXJlY3RvcnkoKSBpbXBsZW1lbnRlZC4KCgkqIFtpZjE2MzIvYWR2YXBpMzIuc3BlY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXQoJICBbaW5jbHVkZS93aW5kb3dzLmhdIFtpbmNsdWRlL3dpbnJlZy5oXSBbbG9hZGVyL21haW4uY10KCSAgW21pc2MvbWFpbi5jXSBbbWlzYy9zaGVsbC5jXSBbbWlzYy9yZWdpc3RyeS5jXQoJUmVnaXN0cnkgZml4ZXM6CgktIGxvYWRzIHdpbjk1IHJlZ2lzdHJ5IGRhdGFiYXNlcywKCS0gc2F2ZSBvbmx5IHVwZGF0ZWQga2V5cyBvbiBkZWZhdWx0LAoJLSBub3cgYWRoZXJzIHRvIHRoZSBuZXcgZnVuY3Rpb24gbmFtaW5nIHN0YW5kYXJkLAoJLSBtaW5vciBjbGVhbnVwcy4KClR1ZSBNYXkgNyAyMjozNjoxMyAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2NvbWJvLmNdCglBZGRlZCBXTV9DT01NQU5ELWhhbmRsaW5nIGZvciBpbnRlcmFjdGlvbiBiZXR3ZWVuIEVESVQgYW5kIENPTUJPTEJPWAogICAgICAgIGFuZCBzeW5jaHJvbml6ZWQgbWluZSB3aXRoIEdyZWcgS3JlaWRlcidzIHdvcmtzLgoKCSogW2NvbW1kbGcuY10KCUJ1Z2ZpeCBpbiBDaG9vc2VGb250OiBmb250IHNpemUgaGFuZGxpbmcuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBNYXkgIDYgMTI6NTY6MjYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbREVWRUxPUEVSUy1ISU5UU10KCUFkZGVkIHBhcmFncmFwaCBvbiBuYW1pbmcgY29udmVudGlvbnMgZm9yIFdpbjE2L1dpbjMyL1dpbmVsaWIuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJQ3JlYXRlIGEgZGVmYXVsdCBzeXN0ZW0gbWVudSB0aGF0IGlzIHRoZSBzYW1lIGZvciBhbGwgd2luZG93cwoJaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGV2ZXJ5IHRpbWUuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgV0lORUxJQl9OQU1FIGFuZCBERUNMX1dJTkVMSUJfVFlQRSBtYWNyb3MuCglBZGRlZCB4eDE2IGFuZCB4eDMyIGRlZmluaXRpb25zIGZvciBtb3N0IHR5cGVzLiBHZW5lcmFsIGNsZWFuLXVwLgoKCSogW21lbW9yeS9nbG9iYWwuY10gW21lbW9yeS9sb2NhbC5jXSBbKi8qXQoJUmVuYW1lZCBHbG9iYWwgYW5kIExvY2FsIGhlYXAgZnVuY3Rpb25zIHRvIHh4eDE2LiBBZGRlZCBhbGwgeHh4MzIKCXZlcnNpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9ucy4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10KCU1hc2sgb3V0IGxvd2VyIGJpdHMgb2Ygc2VsZWN0b3IgaW4gRnJlZVNlbGVjdG9yKCkuCgoJKiBbbWlzYy9sc3RyLmNdCglGaXhlZCB3dnNwcmludGYoKS4KCgkqIFt3aW5kb3dzL2NsYXNzLmNdCglDaGFuZ2VkIHRoZSBjbGFzcyBzdHJ1Y3R1cmUgdG8gbWFrZSBXaW4zMiBzdXBwb3J0IGVhc2llci4KCgkqIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgaGFuZGxpbmcgb2YgV01fSU5JVE1FTlVQT1BVUCBmb3Igc3lzdGVtIG1lbnUgdG8gZ3JheSBvdXQKCWludmFsaWQgb3B0aW9ucy4KCgkqIFt3aW5kb3dzL3dpbnBvcy5jXQoJQnVnIGZpeDogdGhlIFdJTkRPU1BPUyBzdHJ1Y3R1cmUgcG9pbnRlciBpbiBXTV9OQ0NBTENTSVpFIG11c3QgYmUKCWEgU0VHUFRSLgoKU3VuIE1heSAgNSAwMzo1MToyNiAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbbWVtb3J5L2xvY2FsLmNdCglJbXBsZW1lbnRhdGlvbiBvZiBtb3ZlYWJsZSBhbmQgKHJ1ZGltZW50YXJ5KSBzdXBwb3J0IGZvcgogCWRpc2NhcmRhYmxlIGxvY2FsIG1lbW9yeSwgcGx1cyBzZXZlcmFsIGJ1ZyBmaXhlcy4KClNhdCBNYXkgIDQgMTg6MzM6MzUgMTk5NiAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL3dpbi5jXSBbaWYxNjMyL3VzZXIuc3BlY10gCglGaW5kV2luZG93RXgoKSBpbXBsZW1lbnRlZCAoc29tZW9uZSByZXBvcnRlZCBpdCB3YXMgbWlzc2luZwoJZm9yIEZyYW1lTWFrZXIgNC4xKS4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi91c2VyMzIuc3BlY10gW3dpbjMyL21lbW9yeS5jXQoJICBbd2luMzIvcmVzb3VyY2UuY10KCU1pc2Mgc21hbGwgc3R1YnMvc21hbGwgZnVuY3Rpb25zIHdoaWNoIGJyaW5nIHdpbjk1IGJpbmFyaWVzCglmdXJ0aGVyIGRvd24gdGhlIHJvYWQuIChJc0JhZENvZGVQdHIsIExvY2FsUmVBbGxvYyxHZXRDdXJzb3JQb3MpCglTbWFsbCBmaXggaW4gV0lOMzJfTG9hZEFjY2VsZXJhdG9yc0EuCgpGcmkgTWF5ICAzIDE5OjQzOjEyIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5MZWlkZW5Vbml2Lm5sPgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW2NvbnRyb2xzL0VESVQuVE9ET10KCUNoYW5nZWQgLyBmaXhlZCBzb21lIHR5cGVzIGFuZCB0eXBlY2FzdHMuCglGaXhlZCB0aGUgc2Nyb2xsYmFyIHJlc2V0IGFmdGVyIFdNX1NFVEhBTkRMRSAvIFdNX1NFVFRFWFQuCglBZGRlZCBoZWFwIGluaXRpYWxpemF0aW9uIGluIFdNX0NSRUFURS4KCkZyaSBNYXkgIDMgMTk6MzA6MDIgMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXSBbY29udHJvbHMvbGlzdGJveC5jXQoJUGFzcyBXTV9bSFZdU0NST0xMIHRvIGxpc3Rib3gsIGJ1dCBub3QgY29tYm8uCglEb24ndCB0cnkgdG8gcmVkcmF3IG5vbi1leGlzdGFudCBzY3JvbGwgYmFycyAoY2hhbmdlcyBkd1N0eWxlIGZsYWdzKS4KCUNvbWJvIGJveCBnZXRzIGJvcmRlci4KCUNvbWJvIGJveCBpbmNsdWRlcyBidXR0b24gKG90aGVyd2lzZSBidXR0b24gd29uJ3QgdHJpZ2dlciBkcm9wZG93bikuCglQcm9wZXIgYm9yZGVyIGFyb3VuZCBSZWN0QnV0dG9uLgoJQ2hlY2sgc2l6ZSBjb25zaXN0YW5jeSBvZiBjb21ibywgbGlzdGJveCwgYW5kIGJ1dHRvbiBhZnRlciByZXNpemluZyAKCW9yIGJlZm9yZSBwYWludGluZy4gIFRoZXNlIHJvdXRpbmVzIHN0aWxsIGFyZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QuCglMb2NhbGl6ZSBzaXplIGNoZWNrcyBpbiBzZXBhcmF0ZSByb3V0aW5lcy4KCUxpc3Rib3hlcyBhcmUgd2hpdGUuCgpUaHUgTWF5ICAyIDE5OjIxOjIzIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbY29udHJvbHMvY29tYm8uY11baW5jbHVkZS9jb21tZGxnLmhdW2luY2x1ZGUvY29tbWRsZy5jXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY11bcmVzb3VyY2VzL3N5c3Jlc19Fbi5yY10KCUludHJvZHVjZWQgQ2hvb3NlRm9udCBkaWFsb2csIGJ1dCBuZWVkZWQgc29tZSBwYXRjaGVzIGluIAoJaGFuZGxpbmcgb2YgY29tYm9ib3hlcyB3aXRoIGVkaXQgY29udHJvbHMuCgpUdWUgQXByIDMwIDAwOjMzOjI3IDE5OTYgIFVscmljaCBTY2htaWQgIDx1c2NobWlkQG1haWwuaGgucHJvdmkuZGU+CgoJKiBbcHJvZ3JhbXMvd2luaGVscC8qXQoJQWRkZWQgYSBoZWxwIHZpZXdlciBhbmQgYSBzaW1wbGUgYC5obHAnIHRvIGAuc2dtbCcgY29udmVydGVyLgoKTW9uIEFwciAyOSAxNDoxNzo1NyAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBzdGhpbmMuZGVtb24uY28udWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc18qLnJjXSBbbWlzYy9zaGVsbC5jXQoJTW9kaWZpZWQgc2l6ZSBvZiAiQWJvdXQiIGRpYWxvZyBib3hlcy4KClNhdCBBcHIgMjcgMTg6MTA6MTEgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dW2xvYWRlci9idWlsdGluLmNdCgljcnRkbGwuc3BlYywgbnRkbGwuc3BlYywgd3NvY2szMi5zcGVjOiBuZXcgZmlsZXMuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglGaXggZXJyb3IgbWVzc2FnZSBpZiBpbXBvcnQgYnkgb3JkaW5hbCBmYWlsZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBcHIgMjggMTQ6MzI6NDMgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbTWFrZWZpbGUuaW5dCglTdWJkaXIgbWVtb3J5IGlzIG5vdyBhbHNvIGNvbXBpbGVkIGZvciBXaW5lbGliLCBpbiBvcmRlciB0byBnZXQKCXRoZSBXaW4zMiBoZWFwIGZ1bmN0aW9ucy4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dCglSZW5hbWVkIHdpbnByb2NzIGFuZCB3aW5wcm9jczMyIHRvIHdwcm9jcyBhbmQgd3Byb2NzMzIgdG8gYXZvaWQKCURMTCBuYW1lcyA+IDggY2hhcmFjdGVycy4KCgkqIFtsb2FkZXIvYnVpbHRpbi5jXSAoTmV3IGZpbGUpCglHcm91cGVkIGFsbCBidWlsdC1pbiBETExzIGNvZGUgaW4gYSBzaW5nbGUgZmlsZS4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglVc2UgdGhlIFdpbjMyIGhlYXAgY29kZSBpbnN0ZWFkIG9mIG1hbGxvYygpIHRvIGFsbG9jYXRlIGxpbmVhcgoJbWVtb3J5LiBUaGlzIHdpbGwgaGVscCB0ZXN0IHRoZSBoZWFwIGNvZGUuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCBGcmVlU2VsZWN0b3IoKSB0byBjbGVhciBEUyBhbmQgRVMgY29ycmVjdGx5IGZvciBodWdlIGJsb2Nrcy4KCgkqIFt0b29scy9idWlsZC5jXSBbaWYxNjMyL3JlbGF5LmNdCglSZW1vdmVkICdpZCcgZGlyZWN0aXZlIGluIHNwZWMgZmlsZXMuIEZvciByZWxheSBkZWJ1Z2dpbmcsIHRoZSBETEwKCWVudHJ5IHBvaW50IGlzIG5vdyBjb21wdXRlZCBmcm9tIHRoZSBDUzpJUCBlbnRyeSBwb2ludCBhZGRyZXNzLgoJQWRkZWQgJ2hlYXAnIGRpcmVjdGl2ZSB0byBzcGVjaWZpeSBhIGxvY2FsIGhlYXAgZm9yIHRoZSBETEwuIFVTRVIKCWFuZCBHREkgaGVhcCBhcmUgbm93IGNyZWF0ZWQgdGhpcyB3YXkuCgoJKiBbd2luZG93cy9jbGFzcy5jXSBbaW5jbHVkZS9jbGFzcy5oXQoJQ2hhbmdlZCB0aGUgY2xhc3Mgc3RydWN0dXJlIHRvIHVzZSBwb2ludGVycyBpbnN0ZWFkIG9mIGhhbmRsZXMuCglDaGFuZ2VkIEdldC9TZXRDbGFzc1dvcmQvTG9uZyB0byB1c2UgYSBzd2l0Y2ggc3RhdGVtZW50OyB0aGlzCglhbGxvd3MgY2hhbmdpbmcgdGhlIGxheW91dCBvZiB0aGUgQ0xBU1Mgc3RydWN0dXJlLgoKCSogW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL3dpbi5oXQoJVXNlIGEgQ0xBU1MgKiBpbnN0ZWFkIG9mIGEgaGFuZGxlIGZvciB0aGUgd2luZG93IGNsYXNzLgoKU2F0IEFwciAyNyAxODoxMDoxMSBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbbWVtb3J5L2dsb2JhbC5jXQoJICBbd2luMzIvbWVtb3J5LmNdIFt3aW4zMi9wcm9jZXNzLmNdCglHZXRQcm9jZXNzQWZmaW5pdHlNYXNrLEdsb2JhbExvY2ssSXNCYWRSZWFkUHRyLElzQmFkV3JpdGVQdHIsCglMb2NhbExvY2ssU2V0VGhyZWFkQWZmaW5pdHlNYXNrOiBuZXcgcmVsYXlzLgoKCSogW3dpbjMyL2N1cnNvcmljb24zMi5jXQoJUmV0dXJuIHNhbWUgaGFuZGxlIGlmIGEgY3Vyc29yIGlzIGxvYWRlZCBtdWx0aXBsZSB0aW1lcy4KClNhdCBBcHIgMjcgMTU6MTM6MzcgMTk5NiAgQmFuZyBKdW4gWW91bmcgPGJhbmdqeUBub3dudXJpLm5vd2NvbS5jby5rcj4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0tvLnJjXQogICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIEtvcmVhbiBbS29dIGxhbmd1YWdlLgoKRnJpIEFwciAyNiAwMDo0OTowNSAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9kYy5jXSBbb2JqZWN0cy9mb250LmNdCglGaXhlZCBwcm9ibGVtIHdpdGggU2F2ZURDKCkvUmVzdG9yZURDKCkgYW5kIGZvbnQgY2FjaGUgJ3VzZWQnIGNvdW50LgoKCSogW29iamVjdHMvbWV0YWZpbGUuY10gW29iamVjdHMvZGN2YWx1ZXMuY10KCUZpeGVkIGJyb2tlbiBTZXRUZXh0QWxpZ24oKSBvbiBtZXRhZmlsZXMuCgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRGVsZXRlIG9iamVjdHMgaW4gaGFuZGxlIHRhYmxlIGF0IGVuZCBvZiBQbGF5TWV0YUZpbGUoKS4KCldlZCBBcHIgMjQgMTk6MjE6MDEgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2lmMTYzMi92ZXIuc3BlY10gW21pc2MvdmVyLmNdIFtpbmNsdWRlL3Zlci5oXSAoTmV3IGZpbGVzKQoJVkVSLkRMTCAocGFydGlhbGx5KSBpbXBsZW1lbnRlZCAoVmVyRmluZEZpbGUsVmVySW5zdGFsbEZpbGUpCglbSWYgaXQgZG9lc24ndCB3b3JrIGZvciB5b3UsIHVzZSAtZGxsIC12ZXIgYW5kIHJlcG9ydCBpdCB0byBtZV0KCgkqIFtpZjE2MzIvdXNlcjMyLnNwZWNdIFtpZjE2MzIva2VybmVsMzIuc3BlY10gW2lmMTYzMi9zaGVsbC5zcGVjXQoJICBbaWYxNjMyL3NoZWxsMzIuc3BlY10gW21pc2Mvb2xlMm5scy5jXSBbd2luZG93cy9tZXNzYWdlLmNdCgkgIFt3aW5kb3dzL2dyYXBoaWNzLmNdCglTaW1wbGUgd2luMzIgZnVuY3Rpb25zLCB3aGVyZSB3ZSBjYW4ganVzdCB1c2UgdGhlIHdpbjE2IGNvdW50ZXJwYXJ0LgoJTWlzYy4gc3R1YnMuIAoKCSogW21pc2MvbHN0ci5jXQoJU29tZW9uZSByZXBvcnRlZCBhIF9sc3RybGVuKE5VTEwpLiBOVUxMIGlzIGEgdmFsaWQgYXJndW1lbnQuIEZpeGVkLgoKCSogW21pc2MvcmVnaXN0cnkuY10KCVNvbWUgYWxsb2NsZW5zIHdlcmUgb2ZmIGJ5IDEsIG9uZSBkb3VibGUgZmNsb3NlKCkgZml4ZWQuCglSZXF1ZXN0aW5nIHZhbHVlIDAgb2YgYSBrZXkgd2l0aCBubyB2YWx1ZXMgcmV0dXJucyBhbiBlcnJvciAKCShzaG91bGQgd2UgYWx3YXlzIHJldHVybiBhIG1hZGUgdXAgdmFsdWUgTlVMTD8gd2hhdCBkb2VzIHdpbjMuMT8pCgpUdWUgQXByIDIzIDE3OjAwOjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbbWlzYy9zaGVsbC5jXQoJSW1wbGVtZW50ZWQgRmluZEVudmlyb25tZW50U3RyaW5nKCksIERvRW52aXJvbm1lbnRTdWJzdCgpLAoJRXh0cmFjdEljb24oKSwgSW50ZXJuYWxFeHRyYWN0SWNvbigpIGFuZCBFeHRyYWN0QXNzb2NpYXRlZEljb24oKS4KCgkqIFttaXNjL3VzZXIuY10KCURvIGV4dGVuc2l2ZSBjbGVhbnVwIG9uIGFwcGxpY2F0aW9uIGV4aXQuCgoJKiBbd2luZG93cy9ob29rLmNdIFt3aW5kb3dzL3dpbi5jXSBbd2luZG93cy9jbGFzcy5jXQoJQWRkZWQgbWlzY2VsbGFuZW91cyBjbGVhbnVwIHJvdXRpbmVzLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCU1vcmUgZWZmaWNpZW50IHBvcHVwIG1lbnUgd2luZG93IGhhbmRsaW5nLgoKTW9uIEFwciAyMiAyMTozNToyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW2luY2x1ZGUvd2luZG93cy5oXVtvYmplY3RzL29lbWJpdG1hcC5jXVtpbmNsdWRlL2JpdG1hcHMvb2JtX3RydHlwZV0KCUFkZGVkICJUVC1iaXRtYXAiIGZvciBsYXRlciB1c2FnZSBpbiBhIENob29zZUZvbnQoKSBvd25lcmRyYXcgY29tYm9ib3guCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBBcHIgMjAgMjM6MjM6MTYgMTk5NiAgUm9iZXJ0IFBvdWxpb3QgPGtyeW5vc0BxYmMuY2xpYy5uZXQ+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19Gci5yY10gW3Jlc291cmNlcy9UT0RPXQoJTWFkZSBjaGFuZ2VzIGZvciBDaG9vc2VfQ29sb3IgZGlhbG9nLgoKU2F0IEFwciAyMCAxNTo0Mzo0OSAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUZpeGVkIHRlc3QgdGhhdCBnb3QgbWlzY29tcGlsZWQgYnkgc29tZSBvbGQgZ2NjIHZlcnNpb25zLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJRml4ZWQgdGhlIGxheW91dCBvZiBoYW5kbGUgdGFibGVzIHNvIHRoYXQgbW92ZWFibGUgaGFuZGxlIGVudHJpZXMKCWNhbiBiZSBmcmVlZCBvbiBMb2NhbEZyZWUoKS4KCUltcGxlbWVudGVkIExvY2FsRmxhZ3MoKSwgTG9jYWxDb3VudEZyZWUoKSwgTG9jYWxIYW5kbGVEZWx0YSgpIGFuZAoJR2V0SGVhcFNwYWNlcygpLgoKCSogW21pc2MvbWFpbi5jXSBbQU5OT1VOQ0VdCglVcGRhdGUgdGhlIGxpc3Qgb2YgY29udHJpYnV0b3JzLiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgSSBmb3Jnb3QKCXNvbWVvbmUuCgpGcmkgQXByIDE5IDIwOjA3OjIwIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyICA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCglGaXhlZCBFTV9TRVRIQU5ETEUgLyBXTV9DUkVBVEUgLyBFRElUX01ha2VGaXIoKSBidWZmZXIgYWxsb2NhdGlvbi4KCUZpeGVkIEVTX05PSElERVNFTCAvIFdNX01PVVNFTU9WRSAvIFdNX0xCVVRUT05ET1dOIGltcGxlbWVudGF0aW9uLgoJQWRkZWQgV01fRU5BQkxFIGltcGxlbWVudGF0aW9uIChncmF5IHRleHQpLgoJRml4ZWQgYnVmZmVyID4gMzI3NjcgYnVnLgoJRml4ZWQgYXJndW1lbnQgdHlwZXMgLyB0eXBlY2FzdGluZy4KCUZhc3RlciBzZWxlY3Rpb24gKHJlKWRyYXdpbmcuCgpUaHUgQXByIDE4IDEzOjM4OjI2IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10gW2luY2x1ZGUvd2lucmVnLmhdCglDaGFuZ2VkIHNhdmVmaWxlIGZvcm1hdCBhZ2FpbiB0byBodW1hbiByZWFkYWJsZS9lZGl0YWJsZQoJKFVOSUNPREUgY2hhcnMgPjB4ZmYgYXJlIHNwZWNpZmllZCBieSBcdVhYWFgsIGRhdGEgYnkgWFgpLgoJSGFzIG5vdyBnbG9iYWwgLyBsb2NhbCByZWdpc3RyeSBkYXRhYmFzZXMgKGluY2x1ZGluZyBtZXJnaW5nIHRoZW0pLgoJSEtFWV9DTEFTU0VTX1JPT1QgPT0gSEtFWV9MT0NBTF9NQUNISU5FXFxTT0ZUV0FSRVxcQ2xhc3Nlcy4KCUhLRVlfQ1VSUkVOVF9VU0VSID09IEhLRVlfVVNFUlNcXDxsb2dpbm5hbWU+LgoKCSogW21pc2MvY29tbS5jXQoJQWxsb3cgIiAiIGFzIENPTXg6IC4uLiBzcGVjIGRlbGltaXRlciB0b28uCgkoQU9MLUNEIHNldHVwLmV4ZSB0cmllcyB0byBpbml0aWFsaXplIG1vZGVtMiBhcyAiOTYwMCx4LHggeCIgKGNhbid0IAoJcmVtZW1iZXIgdGhlIHgpLgoKVGh1IEFwciAxOCAwOTowMDowMCAxOTk2ICBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL21kaS5jXQoJTWlzY2VsbGFuZW91cyBjaGFuZ2VzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIAoJVXNlIEJpdEJsdCB3aGVuZXZlciBwb3NzaWJsZSBpbiBTZXRXaW5kb3dQb3MuCgoJKiBbd2luZG93cy9wYWludGluZy5jXQoJRml4IGluY29tcGF0aWJpbGl0aWVzIHdpdGggaHJnblVwZGF0ZSBiZWluZyAxLgoKV2VkIEFwciAxNyAxOToxOToyMiAxOTk2ICBBbGJyZWNodCBLbGVpbmUgIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW21pc2MvY29tbWRsZy5jXQoJTWFueSBidWdmaXhlcyBpbiBDaG9vc2VDb2xvciBkaWFsb2cuCglBZGRlZCBhIHVzZXIgZGVmaW5lZCBkaWFsb2cgdGl0bGUgaW4gRmlsZU9wZW4tL0ZpbGVTYXZlLSBkaWFsb2cuCgoJKiBbbWlzYy9jb21tZGxnLmNdW2luY2x1ZGUvY29tbWRsZy5oXQoJICBbaWYxNjMyL2NvbW1kbGcuc3BlY11baWYxNjMyL3dpbnByb2NzLnNwZWNdCglJbnRyb2R1Y2VkIGRpYWxvZy0sIGNhbGxiYWNrLSBhbmQgZW51bS0gc3R1YiBmdW5jdGlvbnMKCWZvciBDaG9vc2VGb250IGRpYWxvZwoKV2VkIEFwciAxNyAxOTowODozOCAxOTk2ICBOaWVscyBkZSBDYXJwZW50aWVyICA8bmllbHNAY2luZHkuZXQudHVkZWxmdC5ubD4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdIFtpbmNsdWRlL21ldGFmaWxlLmhdIFtpZjE2MzIvZ2RpLnNwZWNdCglJbXBsZW1lbnRlZCBFbnVtTWV0YUZpbGUgYW5kIENvcHlNZXRhRmlsZS4gUmVtb3ZlZCBNRVRBRklMRSBzdHJ1Y3QuCglJbXBsZW1lbnRlZCBNRVRBX1NUUkVUQ0hESUIgaW4gUGxheU1ldGFGaWxlUmVjb3JkLCBzZXZlcmFsIGJ1ZyAKCWZpeGVzLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglEb24ndCB0cnkgdG8gaGlkZSB0aGUgd2luZG93IGlmIGl0J3MgYWxyZWFkeSBoaWRkZW4uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglMZXQgTVNHX1BlZWtIYXJkd2FyZU1zZyBmaWxsIHRoZSBtZXNzYWdlIHF1ZXVlIHdpdGggZXZlbnRzIGlmCglpdCdzIGVtcHR5LgoKV2VkIEFwciAxNyAxNzo1NDowNCAxOTk2ICBUcmlzdGFuIFRhcnJhbnQgPHRzdEBzdGhpbmMuZGVtb24uY28udWs+CgoJKiBbcmVzb3VyY2VzL3N5c3Jlc19JdC5yY10KCVVwZGF0ZWQgdG8gc3VwcG9ydCB0aGUgbmV3IENIT09TRV9DT0xPUl9ESUFMT0cuCgpUdWUgQXByIDE2IDExOjUwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFtpZjE2MzIvTWFrZWZpbGVdIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMS93MzJzeXMuc3BlY10KCSAgW2luY2x1ZGUvdzMyc3lzLmhdIFtpbmNsdWRlL2RsbHMuaF0KCSAgW21pc2MvTWFrZWZpbGVdIFttaXNjL3czMnN5cy5jXQoJVzMyU1lTLkRMTCBwYXJ0aWFsbHkgaW1wbGVtZW50ZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBBcHIgMTQgMTI6NTE6MjcgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvbWVudS5jXSBbaW5jbHVkZS9kaWFsb2cuaF0gW3dpbmRvd3MvZGlhbG9nLmNdCglNYWRlIHRoZSByZXNvdXJjZSBsb2FkaW5nIGNvZGUgYWx3YXlzIHVzZSB0aGUgY29ycmVjdCBXaW5kb3dzCglsYXlvdXQgZm9yIFdpbmVsaWIgb24gb3RoZXIgQ1BVcy4KCgkqIFtpbmNsdWRlL21vZHVsZS5oXSBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgc2VsZiBoYW5kbGUgaW4gTkVfTU9EVUxFIHN0cnVjdHVyZSwgc28gd2UgY2FuIHVzZSBhIHBvaW50ZXIKCWluc3RlYWQgb2YgYSBoYW5kbGUuCglBZGRlZCBmdW5jdGlvbiBNT0RVTEVfR2V0UHRyKCkgdG8gdmFsaWRhdGUgYSBITU9EVUxFLgoKCSogW21lbW9yeS9oZWFwLmNdCglJbXBsZW1lbnRlZCBXaW4zMiBoZWFwIG1hbmFnZW1lbnQuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglGaXggc2VsZWN0b3IgbGltaXQgZm9yIGh1Z2UgYmxvY2tzLgoKU2F0IEFwciAxMyAwMDoxOToxMiAxOTk2ICBIdXcgRC4gTS4gRGF2aWVzIDxoLmRhdmllczFAcGh5c2ljcy5veGZvcmQuYWMudWs+CgoJKiBbb2JqZWN0cy9tZXRhZmlsZS5jXQoJRml4ZWQgbWVtY3B5IGJ1ZyB0byBhbGxvdyBtZW1vcnkgYmFzZWQgbWV0YWZpbGVzIHRvIHdvcmsuCgpGcmkgQXByIDEyIDE5OjI1OjQxIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyICA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdIFtjb250cm9scy9FRElULlRPRE9dCglDb21wbGV0ZSByZXdyaXRlLiAgRXZlcnl0aGluZyBjaGFuZ2VkOiBuZXcgZmVhdHVyZXMsIG5ldyBidWdzLgoJTWFpbiBhZGRpdGlvbjogV29yZFdyYXAuCgpGcmkgQXByIDEyIDIwOjI5OjU1IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QGRjcy5lZC5hYy51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX0l0LnJjXQoJRml4ZWQgYSBmZXcgbWlzdGFrZXMgaW4gdGhlIGZpbGUgYW5kIHJlc2l6ZWQgc29tZSBvZiB0aGUgY29udHJvbHMuCgpGcmkgQXByIDEyIDA5OjU1OjEzIDE5OTYgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW21pc2Mvd2luc29ja2V0LmNdCglGaXhlZCBicm9rZW4gI2lmIGRlZmluZWQgdGhhdCBzdG9wcGVkIHVuaXh3YXJlIGNvbXBpbGluZy4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXQogICAgICAgIEFkZGVkIG1pc3NpbmcgcmV0dXJuIHRvIGVuZCBvZiBGaW5kUmVzb3VyY2UzMi4KClRodSBBcHIgMTEgMTg6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9rZXlib2FyZC5jXSBbd2luZG93cy9ldmVudC5jXQoJRml4ZWQgR2V0S2V5U3RhdGUgZm9yIG1vdXNlIGJ1dHRvbnMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdCglXTV9NT1VTRUFDVElWQVRFIHdhc24ndCBzZW50IGluIHNvbWUgY2FzZXMuCgpXZWQgQXByIDEwIDE4OjU5OjUzIDE5OTYgIE5pZWxzIGRlIENhcnBlbnRpZXIgIDxuaWVsc0BjaW5keS5ldC50dWRlbGZ0Lm5sPgoKCSogW29iamVjdHMvZm9udC5jXQoJTWF0Y2ggc2xpZ2h0bHkgYmlnZ2VyIGZvbnQgaWYgaGVpZ2h0IG5lZ2F0aXZlLgoKTW9uIEFwciAgOCAxMzo0NjoxNSAxOTk2ICBEZWFubyBDYWx2ZXIgPGRlYW5vQHJhdHRpZS5kZW1vbi5jby51az4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglDaGFuZ2VkIHJlYWQncyB0byBGSUxFX3JlYWQncyBpbiBtbXN5c3RlbSB0byBmaXggbW1pbyBidWcuCgpTdW4gQXByICA3IDIxOjQwOjI5IDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdIFtyZXNvdXJjZXMvc3lzcmVzX0VuLnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY10KCUludHJvZHVjZWQgQ29sb3JEbGdQcm9jKCkgZm9yIENob29zZUNvbG9yKCkgYW5kIHJlcGxhY2VkIGZpdHRpbmcKCUVuLSxEZS0gcmVzb3VyY2VzLiAKCUFzIHdyaXR0ZW4gaW4gVE9ETzogc29tZSBuYXRpb25hbCBsYW5ndWFnZSBzdXBwb3J0IGlzIG5lZWRlZCBoZXJlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgQXByICA1IDE1OjIyOjU1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXSBbY29udHJvbHMvc3RhdGljLmNdCglDaGFuZ2VzIHRvIHVzZSBXTkQgKiB3aGVyZXZlciBwb3NzaWJsZS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0gW2RlYnVnZ2VyL2RlYnVnLmxdCglBZGRlZCAnaW5mbyBtb2R1bGUnIGFuZCAnd2FsayBtb2R1bGUnIGNvbW1hbmRzLgoKCSogW2lmMTYzMi9NYWtlZmlsZS5pbl0gW2lmMTYzMi9yZWxheS5jXSBbdG9vbHMvYnVpbGQuY10KCUFkZGVkIGFzc2VtYmx5IGNvZGUgZ2VuZXJhdGlvbiB0byBjYWxsIGZyb20gV2luZSBpbnRvIDMyLWJpdCBjb2RlLgoJQ2hhbmdlZCBhbGwgJ2NhbGwzMicgcmVmZXJlbmNlcyBpbiAnY2FsbGZyb20xNicgdG8gYXZvaWQgY29uZnVzaW9uCgl3aXRoIFdpbjMyIHJvdXRpbmVzLgoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHByb3RvdHlwZXMgZm9yIDMyLWJpdCBjYWxsYmFja3MuCgoJKiBbbG9hZGVyL21vZHVsZS5jXSBbaWYxNjMyL3JlbGF5MzIuY10gW3Rvb2xzL2J1aWxkLmNdCglVbmlmaWVkIDE2LSBhbmQgMzItYml0IG1vZHVsZXMuIFRoZSBmYWtlIG1vZHVsZSBmb3IgMzItYml0IERMTHMgaXMKCW5vdyBnZW5lcmF0ZWQgYnkgdGhlIGJ1aWxkIHByb2dyYW0uCgoJKiBbaW5jbHVkZS9tb2R1bGUuaF0KCUFkZGVkIGV4dHJhIGluZm8gdG8gTkVfTU9EVUxFIGZvciBXaW4zMiBtb2R1bGVzIHRvIHBvaW50IHRvIHRoZSBQRQoJbW9kdWxlIGRhdGEuCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXSBbbG9hZGVyL3BlX2ltYWdlLmNdIFt3aW4zMi9yZXNvdXJjZS5jXQoJUmVtb3ZlZCB0aGUgd2luZV9maWxlcyBsaXN0LiBUaGUgUEUgZGF0YSBmb3IgYSBtb2R1bGUgY2FuIG5vdyBiZQoJYWNjZXNzZWQgd2l0aCB0aGUgTkVfV0lOMzJfTU9EVUxFIG1hY3JvLgoKCSogW2xvYWRlci9zaWduYWwuY10gW21pc2NlbXUvaW5zdHIuY10KCURvbid0IHN0YXJ0IHRoZSBCSU9TIHRpbWVyIGF0IHN0YXJ0dXAsIGJ1dCBvbmx5IGFmdGVyIGFuIGFjY2VzcyB0bwoJdGhlIDB4NDAgc2VnbWVudC4KCgkqIFttZW1vcnkvbG9jYWwuY10KCUNoYW5nZWQgTE9DQUxfTG9jaygpIHRvIHJldHVybiBhIDMyLWJpdCBwb2ludGVyLgoKCSogW21pc2MvbWFpbi5jXSBbaW5jbHVkZS9kbGxzLmhdCglTb21lIGJ1aWx0LWluIERMTHMgKGxpa2UgS0VSTkVMKSBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIGZyb20KIAl0aGUgY29tbWFuZC1saW5lLgoJClRodSBBcHIgIDQgMTk6NTQ6MzkgMTk5NiAgS2VpdGggUmV5bm9sZHMgPGtlaXRockBzY28uQ09NPgoKCSogWyovKl0KCUEgbG90IG9mIHNtYWxsIGNoYW5nZXMgdG8gc3VwcG9ydCBTQ08gT3BlblNlcnZlciA1LgoKVGh1IEFwciAgNCAxNTozODoxMyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglGaXhlZCBHZXRLZXlTdGF0ZSgpIGNhbGwgdG8gdXNlIDB4ODAwMCBjb252ZW50aW9uLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgdW5kb2N1bWVudGVkIG1lc3NhZ2VzIEVNX1NDUk9MTCBhbmQgRU1fR0VUVEhVTUIuCgpUaHUgQXByICA0IDA5OjUyOjUyIDE5OTYgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2lmMTYzMi9leGNlcHQuU10KCU1vZGlmaWVkIGNvZGUgdG8gYXNzZW1ibGUgb24gdW5peHdhcmUuCgpXZWQgQXByICAzIDA5OjM4OjI2IDE5OTYgIEp1ZXJnZW4gTWFycXVhcmR0IDxtYXJxdUBsdW5hci5hZHZhbnRlc3QuZGU+CgoJKiBbb2JqZWN0cy9mb250LmNdCglJbXBsZW1lbnRhdGlvbiBvZiBhIHNlY29uZCBmb250IGNhY2hlIHdoaWNoIHdpbGwgYmUgdXBkYXRlZAoJZHluYW1pY2FsbHkuCgpNb24gQXByICAxIDE2OjQ3OjQwIDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfQ3oucmNdIFtyZXNvdXJjZXMvc3lzcmVzX0RhLnJjXQoJICBbcmVzb3VyY2VzL3N5c3Jlc19EZS5yY10gW3Jlc291cmNlcy9zeXNyZXNfRW8ucmNdCgkgIFtyZXNvdXJjZXMvc3lzcmVzX0VzLnJjXSBbcmVzb3VyY2VzL3N5c3Jlc19GaS5yY10KCSAgW3Jlc291cmNlcy9zeXNyZXNfTm8ucmNdIFtyZXNvdXJjZXMvVE9ET10KCVVwZGF0ZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgdG8gd29yayBsaWtlIHRoZSBFbmdsaXNoIHZlcnNpb24uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBNYXIgMzEgMTM6NTQ6NDYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbdG9vbHMvYnVpbGQuY10KCUNoYW5nZWQgQnVpbGRTcGVjMzJGaWxlcygpIHRvIGdlbmVyYXRlIGFzc2VtYmx5IGluc3RlYWQgb2YgQyBjb2RlLgoJVW5pZmllZCAtc3BlYzE2IGFuZCAtc3BlYzMyIG9wdGlvbnM7IERMTCB0eXBlIGlzIG5vdyBkZXRlcm1pbmVkIGJ5Cgl0aGUgJ3R5cGUnIGRlY2xhcmF0aW9uIGluIHRoZSAuc3BlYyBmaWxlLgoJTmV3IC1zdGRjYWxsIG9wdGlvbiB0byBidWlsZCBhbGwgc3RkY2FsbCBhc3NlbWJseSByZWxheXMuCgoJKiBbaWYxNjMyL3JlbGF5LmNdIFtpZjE2MzIvcmVsYXkzMi5jXSBbaW5jbHVkZS9kbGxzLmhdCglTdGFydGVkIHRvIHVuaWZ5IDE2LSBhbmQgMzItYml0IGJ1aWx0aW4gRExMcy4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglBZGRlZCBNT0RVTEVfR2V0V25kUHJvY0VudHJ5MzIoKSB0byBtaXJyb3IgTU9EVUxFX0dldFduZFByb2NFbnRyeTE2KCkuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdIFtsb2FkZXIvcmVzb3VyY2UuY10KCUFsbCBtb2R1bGVzIG5vdyBoYXZlIGEgTkUgc2lnbmF0dXJlLCBhbmQgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkKCXRoZSBORV9GRkxBR1NfV0lOMzIgZmxhZy4KCgkqIFt3aW5kb3dzL2FsaWFzLmNdCglBbGlhc2VzIGZvciBidWlsdC1pbiB3aW5kb3cgcHJvY2VkdXJlcyBhcmUgbm93IGFsbCBjcmVhdGVkIGF0CglzdGFydHVwIGluIEFMSUFTX0luaXQoKS4KCkZyaSBNYXIgMjkgMTQ6NTY6MzkgMTk5NiAgR3JlZyBLcmVpZGVyIDxrcmVpZGVyQG5hdGxhYi5yZXNlYXJjaC5waGlsaXBzLmNvbT4KCgkqIFtjb250cm9scy9jb21iby5jXQoJTGltaXQgcmVjdGFuZ2xlIHRvIGNsZWFyIHRvIHNpemUgb2YgaXRlbSB3aGVuIHBhaW50aW5nIGNvbWJvLCBub3QKIAlkZWZhdWx0LiAgT25seSBkcmF3IGl0ZW1zIGluIGxpc3Qgd2hlbiB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgdGhlbS4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglHZXQgdGhlIG1lYXN1cmUgb2YgZXZlcnkgaXRlbSB0aGF0J3MgYWRkZWQgYW5kIHN0b3JlIGluIHRoZSBpdGVtJ3MKIAlkYXRhIHN0cnVjdHVyZS4gIFNjcm9sbCBsaXN0Ym94IGlmIG1vdXNlIG5lYXIgZWRnZSBvZiBib3guICBPbmx5CiAJZHJhdyBpdGVtcyBpbiBsaXN0IHdoZW4gdGhlcmUgaXMgZW5vdWdoIHJvb20uCgpGcmkgTWFyIDI5IDEyOjAwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGVmd25kLmNdIFt3aW5kb3dzL2RpYWxvZy5jXSBbd2luZG93cy9tZGkuY10KCSAgW3dpbmRvd3Mvbm9uY2xpZW50LmNdIFtjb250cm9scy9tZW51LmNdIAoJVmFyaW91cyBjaGFuZ2VzIGZvciBiZXR0ZXIga2V5Ym9hcmQgaGFuZGxpbmcuIAoKCSogW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3MvbWVzc2FnZS5jXSBbbWlzYy9rZXlib2FyZC5jXQoJUHJvcGVyIGtleWJvYXJkIG1lc3NhZ2Ugb3JkZXJpbmcsIHdvcmtpbmcgR2V0S2V5U3RhdGUoKSAoZmluYWxseSEpLCAKCWltcHJvdmVtZW50cyBpbiBUb0FzY2lpKCkuCgoJKiBbd2luZG93cy93aW4uY10gW3dpbmRvd3MvbWVzc2FnZS5jXQoJU21hbGwgaW1wcm92ZW1lbnRzIGluIFdJTl9GaW5kV2luVG9SZXBhaW50LgoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3BhaW50aW5nLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJUHV0IHVwZGF0ZSByZWdpb24gaW4gV01fTkNQQUlOVCB3UGFyYW0uCgoJKiBbbG9hZGVyL3Rhc2suY10KCUtpbGwgdGFzayB0aW1lcnMgd2hlbiB0YXNrIGlzIGRlbGV0ZWQsIHN3aXRjaCB0aW1lcnMgdG8gdGhlCgluZXcgcXVldWUgaW4gU2V0VGFza1F1ZXVlKCkuCgoJKiBbbG9hZGVyL3NpZ25hbC5jXSBbbWlzY2VtdS9kb3NtZW0uY10KCUFkZGVkIFNJR0FMUk0gc2lnbmFsIGhhbmRsZXIgdG8gaW5jcmVtZW50IEJJT1MgY2xvY2suIAoKCSogW3dpbmRvd3Mvd2luLmNdIFt3aW5kb3dzL3dpbnBvcy5jXSBbd2luZG93cy9tZGkuY10KCUZpeGVkIENoaWxkV2luZG93RnJvbVBvaW50KCksIFdNX1BBUkVOVE5PVElGWSBhbmQgaXRzIGhhbmRsaW5nIGJ5CglNREkgY2xpZW50LgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdCglJbXByb3ZlbWVudHMgaW4gaGFuZGxpbmcgb2Ygb3duZWQgcG9wdXBzLiAiRmxvYXRpbmciIHRvb2xib3hlcyAKCXdvcmsgYmV0dGVyIG5vdy4gCgpUaHUgTWFyIDI4IDEyOjM4OjI5IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2MvcmVnaXN0cnkuY10KCU5ldyBmaWxlLCByZWdpc3RyeSByZXdyaXRlIGluY2x1ZGluZyB3aW4zMiBleHRlbnNpb25zCgktIFVuaWNvZGUKCS0gbXVsdGlwbGUgdmFsdXMgcGVyIGtleQoJLSBkaWZmZXJlbnQgZGF0YXR5cGVzIGZvciB2YWx1ZXMKCS0gbXVsdGlwbGUgcm9vdGtleXMKCS0gc2F2aW5nIGFuZCBsb2FkaW5nIGluIGRpZmZlcmVudCByZWdpc3RyaWVzLgoKCSogW2luY2x1ZGUvd2lucmVnLmhdCglOZXcgZmlsZSwgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHMgZm9yIHJlZ2lzdHJ5LgoKCSogW2luY2x1ZGUvd2luZXJyb3IuaF0KCVNvbWUgbmV3IGVycm9yIGRlZmluZXMgYWRkZWQuLi4gdGhlcmUgYXJlIG1vcmUsIHNvbWVvbmUgcGxlYXNlCiAJY2hlY2sgYSAocmVhbC0pd2luZG93cyB3aW5lcnJvci5oLgoJCgkqIFtpZjE2MzIvc2hlbGwuc3BlY10gW2lmMTYzMi9hZHZhcGkzMi5zcGVjXSBbaWYxNjMyL2tlcm5lbC5zcGVjXQoJUmVnaXN0cnkgc3BlY3MgYWRkZWQuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglTd2l0Y2ggaW50ZXJuYWwgU0hFTEwuRExMIHRvIGRlZmF1bHQgJ3VzZWQnLgoKCSogW3dpbjMyL3N0cmluZzMyLmNdIFtpbmNsdWRlL3N0cmluZzMyLmhdCglTb21lIG5ldyBmdW5jdGlvbnMgYWRkZWQuCgljaGFyIHNob3VsZCBiZSB1bnNpZ25lZCBjaGFyIHdoZW4gY29udmVydGluZyB0byAxNmJpdCBpbnRzLgoKCSogW21pc2Mvc2hlbGwuY10gW2luY2x1ZGUvc2hlbGwuaF0gW3dpbjMyL2FkdmFwaS5jXQoJUmVtb3ZlZCBvbGQgcmVnaXN0cnkgZnVuY3Rpb25zLgoKVHVlIE1hciAyNiAxNTowMTo0NiAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2NyX2liZWFtXQoJRml4ZWQgdGhlIHBvc2l0aW9uIG9mIHRoZSBob3RzcG90LgoKCSogW29iamVjdHMvdGV4dC5jXQoJRml4ZWQgYSBmZXcgYnVncyBpbiBURVhUX1RhYmJlZFRleHRPdXQoKS4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdCglGaXhlZCB0aGUgb3JkZXIgb2YgdGhlIGJpdHMgaW4gdGhlIEtleVN0YXRlVGFibGUuCgkweDgwIGlzIHRoZSB1cC9kb3duLWJpdC4gIDB4MDEgaXMgdGhlIHRvZ2dsZSBiaXQuCgoJKiBbbG9hZGVyL3Jlc291cmNlLmNdIFt3aW5kb3dzL21kaS5jXSBbY29udHJvbHMvZWRpdC5jXQoJRml4ZWQgdGhlIGNhbGxzIHRvIEdldEtleVN0YXRlKCkuCgpUdWUgTWFyIDI2IDA4OjQzOjE1IDE5OTYgIFJvYmVydCBQb3VsaW90IDxrcnlub3NAcWJjLmNsaWMubmV0PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRnIucmNdIFtyZXNvdXJjZXMvVE9ET10KCVVwZGF0ZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgdG8gd29yayBsaWtlIHRoZSBFbmdsaXNoIHZlcnNpb24uCgpNb24gTWFyIDI1IDE3OjM4OjU5IDE5OTYgIFRyaXN0YW4gVGFycmFudCA8dHN0QGRjcy5lZC5hYy51az4KCgkqIFtyZXNvdXJjZXMvc3lzcmVzX2l0LnJjXQoJQWRkZWQgc3VwcG9ydCBmb3IgSXRhbGlhbiBbSXRdIGxhbmd1YWdlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gTWFyIDI0IDEzOjEzOjExIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2luY2x1ZGUvd2luLmhdIFt3aW5kb3dzLyouY10KCVJlcGxhY2VkIG5leHQsIHBhcmVudCwgY2hpbGQgYW5kIG93bmVyIGhhbmRsZXMgYnkgcG9pbnRlcnMgaW4gV05ECglzdHJ1Y3R1cmUuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UsIGFuZCBzaG91bGQgYmUKCXJlYXNvbmFibHkgc2FmZSBzaW5jZSBNaWNyb3NvZnQgZGlkIHRoZSBzYW1lIGluIFdpbjk1LgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0gWyovKl0KCVJlZGVmaW5lZCBIQU5ETEUgdG8gYmUgVUlOVCBpbnN0ZWFkIG9mIGEgcG9pbnRlciBmb3IgV2luZWxpYi4gVGhpcwoJYWxsb3dzIHJlbW92aW5nIGEgbG90IG9mIHVubmVjZXNzYXJ5IGNhc3RzIGFuZCBOUEZNVHMuCgoJKiBbd2luZG93cy9jYXJldC5jXQoJQ3JlYXRlIHRoZSBjYXJldCBicnVzaCB1cG9uIENyZWF0ZUNhcmV0KCk7IHVzZSB0aGUgYml0bWFwCglkaW1lbnNpb25zIGZvciB0aGUgY2FyZXQuCglGaXhlZCBDQVJFVF9EaXNwbGF5Q2FyZXQoKSB0byB1c2UgUGF0Qmx0KCkuCgpGcmkgTWFyIDIyIDE2OjAwOjAwIDE5OTYgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCgkqIFttaXNjL3dpbnNvY2tldC5jXQoJTW9yZSBzYW5pdHkgY2hlY2tzLCBmaXh1cCBzb21lIGVycm9uZW91cyByZXR1cm4gY29kZXMuCgoJKiBbZG9jdW1lbnRhdGlvbi93aW5zb2NrXQoJRGVzY3JpcHRpb24gb2YgaG93IGNvbXBhdGlibGUgdGhlIHdpbnNvY2sgaXMgY3VycmVudGx5LgoKRnJpIE1hciAyMiAxMzowNTozNCAxOTk2ICBVbHJpY2ggU2NobWlkICA8dXNjaG1pZEBtYWlsLmhoLnByb3ZpLmRlPgoKCSogW2xpYnJhcnkvd2lubWFpbi5jXQoJU2V0IGBscHN6Q21kUGFyYW0nIGJ5IGNvbmNhdGVuYXRpbmcgYXJndW1lbnRzLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCVdpbkV4ZWM6IGFjY2VwdCBVbml4IGNvbW1hbmRzLCB1c2UgV2luZSBlbXVsYXRvci4KCk1vbiBNYXIgMTggMTI6MTY6MjcgMTk5NiAgTWFydGluIHZvbiBMb2V3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bd2luMzIvdGhyZWFkLmNdW2luY2x1ZGUva2VybmVsMzIuaF0KCURlbGV0ZUNyaXRpY2FsU2VjdGlvbiwgRW50ZXJDcml0aWNhbFNlY3Rpb24sCiAJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbiwgTGVhdmVDcml0aWNhbFNlY3Rpb24sIFRsc0FsbG9jLAogCVRsc0ZyZWUsIFRsc0dldFZhbHVlLCBUbHNTZXRWYWx1ZTogbmV3IGZ1bmN0aW9ucy4KCUNSSVRJQ0FMX1NFQ1RJT046IG5ldyBzdHJ1Y3R1cmUuCgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL2NvZGVfcGFnZS5jXQoJV2lkZUNoYXJUb011bHRpQnl0ZTogbmV3IGZ1bmN0aW9uLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVt3aW4zMi9maWxlLmNdCglHZXRGaWxlQXR0cmlidXRlc0E6IG5ldyBmdW5jdGlvbi4KCgkqIFtpZjE2MzIva2VybmVsMzIuc3BlY11bbWlzYy9tYWluLmNdCglHZXRFbnZpcm9ubWVudFN0cmluZ3NXLCBGcmVlRW52aXJvbm1lbnRTdHJpbmdzQSwKIAlGcmVlRW52aXJvbm1lbnRTdHJpbmdzVzogbmV3IGZ1bmN0aW9ucy4KCQoJKiBbaWYxNjMyL3VzZXIuc3BlY11bd2luMzIvY3Vyc29yaWNvbjMyLmNdW3dpbjMyL01ha2VmaWxlLmluXQoJY3Vyc29yaWNvbjMyLmM6IG5ldyBmaWxlLgoJTG9hZEN1cnNvckEsIExvYWRDdXJzb3JXOiBtb2RpZmllZCBpbXBsZW1lbnRhdGlvbiBmcm9tIExvYWRDdXJzb3IKIAl0byBXSU4zMl8qLgoJTG9hZEljb25BLCBMb2FkSWNvblc6IG1vZGlmaWVkIGltcGxlbWVudGF0aW9uIGZyb20gTG9hZEljb25BMzIKCXRvIFdJTjMyXyouCgoJKiBbaW5jbHVkZS9zdHJ1Y3QzMi5oXQoJcHJhZ21hIHBhY2sgaW5zZXJ0ZWQuCglDVVJTT1JJQ09OMzIgc3RydWN0dXJlcyBhZGRlZC4KCgkqIFtpbmNsdWRlL3dpbm5scy5oXQoJQ29uc3RhbnRzIENQXyogYW5kIFdDXyogYWRkZWQuCgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglQRV9Mb2FkTW9kdWxlOiBjYWxsIFBFX0luaXRETEwgd2l0aCBoTW9kdWxlIHJhdGhlciB0aGFuIHdwbnQuCgpTdW4gTWFyIDE3IDE2OjU5OjEyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbbWlzYy9jb21tZGxnLmNdCglJbnRyb2R1Y2VkIGhvb2sgZnVuY3Rpb24gaGFuZGxpbmcgaW4gZmlsZSBkaWFsb2cuCglSZW1vdmVkIGFuIHVubmVjZXNzYXJ5IFNob3dXaW5kb3cgY2FsbCBpbiBGSUxFRExHX1dNQ29tbWFuZCgpLgoKVGh1IE1hciAxNCAxMDo1MDowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJQWRkZWQgR2V0TmVhcmVzdENvbG9yLgoKCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgR2xvYmFsQWRkQXRvbUEuCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJQWRkZWQgc3RhY2tmcmFtZS5oIHRvIGluY2x1ZGVzLgoJV0lOMzJfR2xvYmFsQWRkQXRvbUEoKSAtIG5ldyBmdW5jdGlvbi4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIE1hciAxMyAxOTo0Njo1MCAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBscmMuZXBmbC5jaD4KCgkqIFtjb250cm9scy9lZGl0LmNdCglSZW1vdmVkIGNhbGxzIHRvIG1lbW1vdmUgKG5vdCBwb3J0YWJsZSkuCgoJKiBbZGVidWdnZXIvZGJnLnldIFtkZWJ1Z2dlci9kZWJ1Zy5sXQoJUHJlZml4ZWQgYWxsIHRva2VuIHdpdGggJ3QnIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHR5cGUKCWRlZmluaXRpb25zLgoJQWRkZWQgJ3dhbGsgcXVldWUnLCAnd2FsayBjbGFzcycgYW5kICdpbmZvIGNsYXNzJyBjb21tYW5kcy4KCgkqIFtkZWJ1Z2dlci9pbmZvLmNdCglNb3ZlZCBxdWV1ZSBhbmQgd2luZG93IGluZm9ybWF0aW9uIGZ1bmN0aW9ucyB0byB3aW5kb3dzL3F1ZXVlLmMKCWFuZCB3aW5kb3dzL3dpbi5jIHJlc3BlY3RpdmVseS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdCglBZGRlZCBTSUdIVVAgaGFuZGxpbmcgdG8gZm9yY2UgZW50cnkgaW50byBidWlsdC1pbiBkZWJ1Z2dlci4KCUNsZWFuZWQgdXAgYSBiaXQuCgoJKiBbbWlzYy9zcHkuY10KCUdlbmVyYWwgY2xlYW51cCBhbmQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgoKCSogW3dpbmRvd3MvY2xhc3MuY10KCUFkZGVkIENMQVNTX0R1bXBDbGFzcygpIGFuZCBDTEFTU19XYWxrQ2xhc3NlcygpIGZ1bmN0aW9ucyBmb3IKCWRlYnVnZ2VyLgoKCSogW3dpbmRvd3MvZXZlbnQuY10KCVByZXNzaW5nIEN0cmwtQWx0LVJldHVybiBmb3JjZXMgYW4gZW50cnkgaW50byB0aGUgZGVidWdnZXIuIE5vdAoJc3VyZSBpZiB0aGlzIGtleSBjb21iaW5hdGlvbiBpcyBhIGdvb2QgY2hvaWNlLi4uCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3F1ZXVlLmNdIChOZXcgZmlsZSkKCU1vdmVkIG1lc3NhZ2UgcXVldWUgaGFuZGxpbmcgZnVuY3Rpb25zIHRvIHdpbmRvd3MvcXVldWUuYy4KClR1ZSBNYXIgMTIgMTQ6NTU6MTYgMTk5NiAgT25ubyBIb3ZlcnMgIDxvbm5vQHN0YWNrLnVyYy50dWUubmw+CgoJKiBbaWYxNjMyL2V4Y2VwdC5TXSBbaW5jbHVkZS9leGNlcHQuaF0gW3dpbjMyL2V4Y2VwdC5jXSAoTmV3IGZpbGVzKQoJSW1wbGVtZW50ZWQgV2luMzIgZXhjZXB0aW9uIGZ1bmN0aW9uczogUmFpc2VFeGNlcHRpb24oKSwKIAlSdGxVbndpbmQoKSwgU2V0VW5oYW5kbGVkRXhjZXB0aW9uRmlsdGVyKCkgYW5kCglVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIoKS4KCk1vbiBNYXIgMTEgMTk6MjM6MjkgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KCgkqIFtjb250cm9scy9saXN0Ym94LmNdIFtpbmNsdWRlL2xpc3Rib3guaF0KCVNwZWNpYWwgaGFuZGxpbmcgZm9yIENPTUJPTEJPWCBzdHlsZXMgaW50cm9kdWNlZCB2aWEgZXh0ZW5zaW9uIG9mCiAJSEVBRExJU1Qgc3RydWN0dXJlOiBscGhsLT5kd1N0eWxlLgoKTW9uIE1hciAxMSAxMzozMTowNiAxOTk2ICBHcmVnIEtyZWlkZXIgPGtyZWlkZXJAbmF0bGFiLnJlc2VhcmNoLnBoaWxpcHMuY29tPgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBbnkgbW91c2UgbW92ZW1lbnQgd2l0aGluIGEgc21hbGwgZGlzdGFuY2UgKGRlZmluZWQgYnkgQ0JMTU1fRURHRSkKCW9mIHRoZSB0b3Agb3IgYm90dG9tIGVkZ2UgY2F1c2VzIHRoZSB3aW5kb3cgdG8gc2Nyb2xsLiAgQWxzbyBtb3ZlZCAKCXNvbWUgYXNzaWdubWVudHMgc28gdGhlIHJvdXRpbmUgd29ya3MgY29ycmVjdGx5LgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNoYW5naW5nIHNlbGVjdGlvbiBpbiBMaXN0Qm94U2V0Q3VyU2VsIG5vdyB1cGRhdGVzIFByZXZGb2N1c2VkLgoJQWRkZWQgdG8gTEJTZXRGb250IGFuZCBDcmVhdGVMaXN0Qm94U3RydWN0IGEgZmFrZSBoZGMgdGhhdCB0ZXN0cyAKCWFuZCBzZXRzIHRoZSBzdGFuZGFyZCB0ZXh0IGhlaWdodC4KClN1biBNYXIgMTAgMDg6Mzk6MjMgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbd2luZG93cy9kY2UuY10KCUZpeGVkIG1lbW9yeSBsZWFrIGluIERDRV9DbGlwV2luZG93cygpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGcmkgTWFyICA4IDE5OjA3OjE4IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbmZpZ3VyZS5pbl0KCVF1b3RlICdbJyBhbmQgJ10nIGluIHRoZSB0ZXN0IHByb2dyYW0gZm9yIHRoZSBzdHJlbmd0aC1yZWR1Y2UKCWJ1Zy4gVGhpcyBzaG91bGQgd29yayBtdWNoIGJldHRlci4uLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUF1Z21lbnRlZCBET1NfRklMRSBzdHJ1Y3R1cmUuIE1vc3QgaW50ZXJuYWwgZnVuY3Rpb25zIG5vdyByZXR1cm4gYQoJRE9TX0ZJTEUqIGluc3RlYWQgb2YgYSBVbml4IGhhbmRsZS4KCUFkZGVkIGEgbG9jYWwgZmlsZSBhcnJheSB0byByZXBsYWNlIHRoZSBQREIgbGlzdCB1cG9uIHN0YXJ0dXAsIHRvCglhbGxvdyB1c2luZyBmaWxlIEkvTyBmdW5jdGlvbnMgYmVmb3JlIHRoZSBmaXJzdCB0YXNrIGlzIGNyZWF0ZWQuCglBZGRlZCBGSUxFX1NldERhdGVUaW1lKCkgYW5kIEZJTEVfU3luYygpIGZ1bmN0aW9ucy4KCQoJKiBbbG9hZGVyL21vZHVsZS5jXQoJVXNlIHRoZSBET1MgZmlsZSBJL08gZnVuY3Rpb25zIGluIE1PRFVMRV9Mb2FkRXhlSGVhZGVyKCkuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCVVzZSB2aXNpYmxlIHJlZ2lvbiBpbnN0ZWFkIG9mIEdDIGNsaXAgcmVnaW9uIHRvIGNsaXAgc291cmNlCglhcmVhLiBUaGlzIGZpeGVzIHRoZSBjYXJkIGRyYXdpbmcgYnVnIGluIGZyZWVjZWxsLgoKCSogW29iamVjdHMvcmVnaW9uLmNdCglGaXhlZCBDb21iaW5lUmduKCkgdG8gYWxsb3cgc3JjIGFuZCBkZXN0IHJlZ2lvbnMgdG8gYmUgdGhlIHNhbWUuCgpGcmkgTWFyICA4IDE2OjMyOjIzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2NvbnRyb2xzL0VESVQuVE9ET10KCVVwZGF0ZWQgc28gaXQgcmVmbGVjdHMgdGhlIGN1cnJlbnQgc3RhdHVzLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCUltcGxlbWVudGVkIGludGVybmFsIEVESVRfV29yZEJyZWFrUHJvYygpLgoJSW1wbGVtZW50ZWQgRVNfUkVBRE9OTFkuCglJbXBsZW1lbnRlZCBXTV9MQlVUVE9OREJMQ0xLIHRvIHNlbGVjdCB3aG9sZSB3b3Jkcy4KCUZpeGVkIGEgbG90IG9mIHR5cGVzIGluIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4KCldlZCBNYXIgIDYgMTk6NTU6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbZGVidWdnZXIvaW5mby5jXQoJQWRkZWQgIndhbGsgd2luZG93IiBjb21tYW5kIHRvIHdhbGsgd2luZG93IGxpc3QuIAoKCSogW3dpbmRvd3MvbWRpLmNdCglBZGRlZCBwcm9wZXIoPykgV01fTURJU0VUTUVOVSBtZXNzYWdlIGhhbmRsaW5nLgoKV2VkIE1hciAgNiAwOToyNzoxMiAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXVtpZjE2MzIvcmVsYXkzMi5jXQoJUkVMQVkzMl9DYWxsV2luZG93UHJvY0NvbnZTdHJ1Y3Q6IG5ldyBmdW5jdGlvbi4KCgkqIFt3aW4zMi9zdHJ1Y3QzMi5jXVt3aW4zMi9NYWtlZmlsZS5pbl1bd2luMzIvcGFyYW0uY11bd2luMzIvdXNlcjMyLmNdCglzdHJ1Y3QzMi5jOiBuZXcgZmlsZS4gTW92ZWQgYWxsIHN0cnVjdHVyZSBjb252ZXJzaW9ucyBpbnRvIHRoYXQgZmlsZQoJUEFSQU0zMl9QT0lOVDMydG8xNixNU0cxNnRvMzIsVVNFUjMyX1JFQ1QzMnRvMTY6IAoJcmVuYW1lZCB0byBTVFJVQ1QzMl9QT0lOVDMydG8xNiwgLi4uCglXSU4zMl9QT0lOVCxXSU4zMl9NU0csV0lOMzJfUkVDVCxXSU4zMl9QQUlOVFNUUlVDVDogcmVuYW1lZCB0bwoJUE9JTlQzMiwgLi4uCglOZXcgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIE5DQ0FMQ1NJWkVfUEFSQU1TLCBXSU5ET1dQT1MsCiAJQ1JFQVRFU1RSVUNULgoKCSogW2luY2x1ZGUvd2luZG93cy5oXVttaXNjL2V4ZWMuY10KCVdJTkhFTFAsIE1VTFRJS0VZSEVMUCwgSEVMUFdJTklORk86IG5ldyBzdHJ1Y3R1cmVzCglXaW5IZWxwOiBSZWltcGxlbWVudGVkLiBUaGFua3MgdG8gUGV0ZXIgQmFsY2gKIAkoMTAwNzEwLjI1NjZAY29tcHVzZXJ2ZS5jb20pIGZvciBoaXMgdmFsdWFibGUgcmVzZWFyY2guCgoJKiBbd2luMzIvd2lucHJvY3MuY10KCVdJTjMyX0NhbGxXaW5kb3dQcm9jVG8xNjogbmV3IGZ1bmN0aW9uLCBjYWxsIGluCiAJVVNFUjMyX0RlZldpbmRvd1Byb2NBLC4uLgoKTW9uIE1hciAgNCAyMzoyMjo0MCAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICIjZGVmaW5lIF9fZXhwb3J0Ii4KCgkqIFtvYmplY3RzL2JpdGJsdC5jXQoJUHV0IGluIGEgZmV3IGhhY2tzIHRvIG1ha2UgYml0Ymx0LWluZyB3b3JrIHdoZW4gdXBzaWRlLWRvd24gYW5kL29yCgltaXJyb3JlZC4gIEJJVEJMVF9TdHJldGNoSW1hZ2Ugc2hvdWxkIHJlYWxseSBiZSBjaGVja2VkIG92ZXIKCXRob3JvdWdobHkuCgoJKiBbcHJvZ3JhbXMvcHJvZ21hbi9tYWluLmNdCglBZGRlZCAiI2luY2x1ZGUgPHJlc291cmNlLmg+IiBmb3IgZGVmaW5pdGlvbiBvZiBIQVZFX1dJTkVfQ09OU1RSVUNUT1IuCgoJKiBbcmMvcGFyc2VyLmhdIFtyYy9wYXJzZXIubF0gW3JjL3BhcnNlci55XSBbcmMvd2luZXJjLmNdCglFbGltaW5hdGVkIHNoaWZ0L3JlZHVjZSBjb25mbGljdCBpbiBzdHlsZSBkZWZpbml0aW9uLgoJQWRkZWQgY3J1ZGUgZXJyb3IgbWVzc2FnZSBzdXBwb3J0OiAic3RkaW46JWQ6IHBhcnNlIGVycm9yIGJlZm9yZSAnJXMnIi4KCUltcGxlbWVudGVkIHN0cmluZyB0YWJsZSBzdXBwb3J0IHRvIHRoZSBiZXN0IG9mIG15IGFiaWxpdHkgKGl0IHdvcmtzCgl3aXRoIExvYWRTdHJpbmcoKSBjYWxscykuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10KCUZpeGVkIGJ1ZyBpbiBOQ19Eb1NpemVNb3ZlKCkgdGhhdCBtYWRlIHN5c3RlbSBtZW51IHBvcCB1cCB3aGVuIHRpdGxlCgliYXIgb2Ygbm9uLWljb25pemVkIHdpbmRvdyB3YXMgY2xpY2tlZCAoY2hlY2tlZCBmb3IgaWNvbml6YXRpb24pLgoKTW9uIE1hciAwNCAyMDo1NToxOSAxOTk2ICBNYXJjdXMgTWVpc3NuZXIgPG1zbWVpc3NuQGNpcC5pbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIFtpZjE2MzIvbHpleHBhbmQuc3BlY10gW2lmMTYzMi9yZWxheS5jXQoJICBbaW5jbHVkZS9semV4cGFuZC5oXVttaXNjL2x6ZXhwYW5kLmNdCglMWkVYUEFORC5ETEwgYWRkZWQuCgpTdW4gTWFyIDAzIDE4OjEwOjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbd2luZG93cy93aW4uY10KCVByZXZlbnQgdXNhZ2Ugb2YgaW52YWxpZCBIV05EcyBpbiBXSU5fRW51bUNoaWxkV2luKCksCgl0aGlzIHByZXZlbnRzIHRvbyBlYXJseSB0ZXJtaW5hdGlvbiBvZiBFbnVtQ2hpbGRXaW5kb3dzKCkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBNYXIgIDIgMTg6MTk6MDYgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAbHJjLmVwZmwuY2g+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBTQ1JPTExfVEhVTUIgcGFpbnRpbmcgZml4ZXMgZnJvbSBBbGV4IEtvcm9ia2EgdG8gc3RvcmUgdGhlCiAJY3VycmVudCB0cmFja2luZyB3aW5kb3cuCgoJKiBbZmlsZXMvZmlsZS5jXQoJRml4ZWQgdHdvIGZpbGUgZGVzY3JpcHRvciBsZWFrcyBpbiBGSUxFX09wZW5GaWxlKCkuCgoJKiBbaWYxNjMyL3JlbGF5MzIuY10gW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9wZV9pbWFnZS5jXQoJICBbdG9vbHMvYnVpbGQuY10KCVJlcGxhY2VkIExPQURFREZJTEVJTkZPIHN0cnVjdHVyZSBieSBPRlNUUlVDVC4KCgkqIFttZW1vcnkvYXRvbS5jXQoJUmVsb2FkIHRoZSBwb2ludGVyIHRvIHRoZSBhdG9tIHRhYmxlIGluIEFUT01fR2V0VGFibGUoKSBhbmQKIAlBVE9NX0FkZEF0b20oKSBpbiBjYXNlIHRoZSBMT0NBTF9BbGxvYygpIGNhbGxzIGNhdXNlZCB0aGUgdGFibGUgdG8KIAltb3ZlIGluIGxpbmVhciBtZW1vcnkuCgpGcmkgTWFyICAxIDExOjU3OjEzIDE5OTYgIEZyYW5zIHZhbiBEb3Jzc2VsYWVyIDxkb3Jzc2VsQHJ1bGhtMS5sZWlkZW51bml2Lm5sPgoKCSogW2luY2x1ZGUvY2FsbGJhY2suaF0KCUFkZGVkIHN1cHBvcnQgZm9yIENhbGxXb3JkQnJlYWtQcm9jKCkuCgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTmV3IGNhcmV0IGhhbmRsaW5nIChyZWFsbHkgZWZmaWNpZW50IC8gZmFzdCkuCglJbXBsZW1lbnRlZCBFTV9TRVRXT1JEQlJFQUtQUk9DIGFuZCBFTV9HRVRXT1JEQlJFQUtQUk9DLgoJRml4ZWQgRU1fU0VURk9OVCBzbyBpdCBub3cgYWxzbyBjcmVhdGVzIGEgcHJvcGVyIG5ldyBjYXJldC4KCldlZCBGZWIgMjggMjI6MDM6MzQgMTk5NiAgRGFuaWVsIFNjaGVwbGVyICA8ZGFuaWVsQGZyb2JuaXR6Lnd1c3RsLmVkdT4KCgkqIFtjb250cm9scy9kZXNrdG9wLmNdIFttaXNjL21haW4uY10gW3dpbmRvd3MvZXZlbnQuY10gW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBXTV9ERUxFVEUgcHJvdG9jb2wgdG8gdG9wLWxldmVsIHdpbmRvd3MuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBhIHByb2JsZW0gd2hpY2ggY2F1c2VkIHNsb3cgc2Nyb2xsaW5nIHRvIGNvbnRpbnVlCXVuY29udHJvbGxhYmx5LgoKCSogW21pc2MvZXhlYy5jXQoJSW1wbGVtZW50ZWQgRXhpdFdpbmRvd3MoKS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJU2V0IHRvcC1sZXZlbCBvd25lZCB3aW5kb3dzIHRvIGJlIHRyYW5zaWVudC4KCldlZCBGZWIgMjggMTk6MTM6MjIgMTk5NiAgVWxyaWNoIFNjaG1pZCAgPHVzY2htaWRAbWFpbC5oaC5wcm92aS5kZT4KCgkqIFtwcm9ncmFtcy9wcm9nbWFuLypdCglBZGRlZCBhIHByb2dyYW0gbWFuYWdlci4KCldlZCBGZWIgMjggMTg6Mzg6MDEgMTk5NiAgRHVuY2FuIEMgVGhvbXNvbiA8ZHVuY2FuQHNwZC5lZWUuc3RyYXRoLmFjLnVrPgoKCSogW3Jlc291cmNlcy9zeXNyZXNfRW8uY10KCUFkZGVkIHN1cHBvcnQgZm9yIEVzcGVyYW50byBbRW9dIGxhbmd1YWdlLgoKV2VkIEZlYiAyOCAwMDoyMzowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi91c2VyMzIuc3BlY10KCUFkZGVkIEVuZERpYWxvZywgR2V0RGxnSXRlbSwgR2V0RGxnSXRlbUludCwgU2V0RGxnSXRlbUludCwKCgkqIFt3aW4zMi9pbml0LmNdCglBZGRlZCB0YXNrLmggdG8gaW5jbHVkZXMuIEdldE1vZHVsZUhhbmRsZUEoKSAtIHJldHVybiBoSW5zdGFuY2UKCWlmIGNhbGxlZCB3aXRoIE5VTEwgcGFyYW1ldGVyLiBGcmVlY2VsbCBuZWVkcyB0aGlzLiBOT1RFIHRoaXMKCW1heSBpbmRpY2F0ZSBhIHByb2JsZW0gd2l0aCBkaWZmZXJlbnRpYXRpb24gYmV0d2VlbiBoTW9kdWxlIGFuZAoJaEluc3RhbmNlIHdpdGhpbiBXaW5lLgoKCSogW3dpbjMyL3Jlc291cmNlLmNdCglGaW5kUmVzb3VyY2UzMigpIGFuZCBMb2FkUmVzb3VyY2UzMigpIC0gUmVtb3ZlZCAjaWYgMCdzIGFyb3VuZAoJY29udmVyc2lvbiBmcm9tIGhJbnN0YW5jZSB0byBoTW9kdWxlLiBTZWUgcmVtYXJrcyBhYm92ZS4KCgkqIFt3aW4zMi9zdHJpbmczMi5jXQoJV0lOMzJfVW5pTGVuKCkgLSByZW1vdmVkIHN0cmF5IHNlbWljb2xvbi4KClR1ZSBGZWIgMjcgMjE6MDU6MTggMTk5NiAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCQoJKiBbd2luZG93cy9jYXJldC5jXQoJU2V0IGJsaW5rIHJhdGUgd2l0aCBjYWxsIHRvIEdldFByb2ZpbGVJbnQoKS4KCgkqIFtyYy93aW5lcmMuY10KCUluIG5ld19zdHlsZSgpLCBtYWRlIGluaXRpYWwgZmxhZyBzZXR0aW5ncyBXU19DSElMRCB8IFdTX1ZJU0lCTEUKIAlpbnN0ZWFkIG9mIDAuICBUaGlzIHNlZW1zIHRvIGNvcnJlc3BvbmQgdG8gQm9ybGFuZCdzIGRlZmF1bHRzLCBhbmQKIAl0aGUgZmxhZ3MgY2FuIGJlIHVuc2V0IGJ5IHVzaW5nIHRoZSAocmF0aGVyIG9idHVzZSkgInwgTk9UIFdTX0NISUxEIgoJb3IgInwgTk9UIFdTX1ZJU0lCTEUiIHRlY2huaXF1ZSBpbiB0aGUgKi5yYyBmaWxlLgoKCSogW3dpbjMyL3RpbWUuY10KCUluIEdldExvY2FsVGltZSgpIGFuZCBHZXRTeXN0ZW1UaW1lKCksIHVzZWQgdHZfc2VjIGZpZWxkIG9mIHJlc3VsdAogCXJldHVybmVkIGJ5IGdldHRpbWVvZmRheSgpIGluc3RlYWQgb2YgbWFraW5nIHNlY29uZCBjYWxsIHRvCiAJdGltZSgpLiAgVGhpcyBlbGltaW5hdGVzIGNsb2NrIGppdHRlciBpZiB0aGUgc2Vjb25kcyBjaGFuZ2UKIAliZXR3ZWVuIHRoZSB0d28gY2FsbHMgKHJhcmUsIGJ1dCBwb3NzaWJsZSkuCgoJKiBbaW5jbHVkZS93aW50eXBlcy5oXQoJQWRkZWQgIiNkZWZpbmUgX2ZhciIgYW5kICIjZGVmaW5lIF9wYXNjYWwiLgoKCSogW3dpbmRvd3Mvd2luLmNdCglBZGRlZCBmdW5jdGlvbiBHZXREZXNrdG9wSHduZCgpLgoKCSogW2luY2x1ZGUveG1hbGxvYy5oXQoJUmVtb3ZlZCB0aGUgJyNpZmRlZiBIQVZFX1NURExJQl9IJyBzdHJ1Y3R1cmUsIHNpbmNlIGl0IHNlZW1lZCB0bwogCWhhdmUgYmVlbiByZW1vdmVkIGZyb20gJ2NvbmZpZ3VyZScsIGFuZCB3YXMgY2F1c2luZyByZWRlZmluaXRpb24KIAl3YXJuaW5ncy4KClR1ZSBGZWIgMjcgMTk6MzE6MTEgMTk5NiAgQWxicmVjaHQgS2xlaW5lIDxrbGVpbmVAYWsuc2F4LmRlPgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIAoJQWRkZWQgUkRXX0FMTENISUxEUkVOIGZsYWcgaW4gU2V0V2luZG93UG9zIChoYW5kbGluZyBTV1BfRlJBTUVDSEFOR0VEKQoJdG8gZm9yY2UgYSByZXBhaW50IHdoZW4gc2V0dGluZyBtZW51IGJhcnMgd2l0aCBkaWZmZXJlbnQgcm93cy4KClN1biBGZWIgMjUgMjE6MTU6MDAgMTk5NiBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3N5c2NvbG9ycy5jXSBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBEcmF3Rm9jdXNSZWN0IHBlbiBhbmQgU0NST0xMX1RIVU1CIHBhaW50aW5nLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTYXQgRmViIDI0IDE2OjE3OjA1IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2ZpbGVzL3Byb2ZpbGUuY10KCUFkZGVkIFxyIHdoZW4gd3JpdGluZyBwcm9maWxlIGZpbGVzLCBmb3IgRE9TIGNvbXBhdGliaWxpdHkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgYnVnIGluIEdsb2JhbFJlQWxsb2MoKSB0aGF0IGNhdXNlZCBhIGRpc2NhcmRlZCBibG9jayBub3QgdG8KIAliZSByZWFsbG9jYXRlZCBpZiBpdHMgc2l6ZSB3YXMgbm90IGNoYW5nZWQuCgoJKiBbbWVtb3J5L3NlbGVjdG9yLmNdCglBdm9pZCBzZXR0aW5nIGEgdmFsaWQgTERUIGVudHJ5IHdpdGggYmFzZSBhbmQgbGltaXQgc2V0IHRvIDAsIGFzCiAJdGhpcyBjYXVzZXMgdGhlIGtlcm5lbCB0byBjbGVhciB0aGUgZW50cnkuIFRoaXMgZml4ZXMgYSBjcmFzaCB3aGVuCiAJZXhpdGluZyBXaW5kb3dzIHByb2dyYW0gbWFuYWdlci4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglSZW1vdmVkIGNhbGwgdG8gY3JlYXQoKSBpbnN0ZWFkIG9mIF9sY3JlYXQoKSBmb3IgV0lORUxJQi4KCkZyaSBGZWIgMjMgMDA6MzU6NTQgMTk5NiAgVGhvbWFzIFNhbmRmb3JkIDx0ZGdzYW5kZkBwcmRzLWdybi5kZW1vbi5jby51az4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCUdldFRleHRFeHRlbnRQb2ludEEgbm93IGhhcyB3aW4zMiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KCgkqIFtpbmNsdWRlL3N0cnVjdDMyLmhdCglEZWZpbmUgbmV3IHN0cnVjdHVyZSB0YWdTSVpFMzIgYW5kIHR5cGVkZWYgU0laRTMyIHRvIGl0LgoJRGVmaW5lIHByb3RvdHlwZSBmb3IgZnVuY3Rpb24gUEFSQU0zMl9TSVpFMTZ0bzMyCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJTmV3IGZ1bmN0aW9ucyBQQVJBTTMyX1NJWkUxNnRvMzIgYW5kIFdJTjMyX0dldFRleHRFeHRlbnRQb2ludEEKCgkqIFt3aW4zMi9tZW1vcnkuY10KCUFkZGVkIG1pc3NpbmcgZmlsZSBwb2ludGVyIHBhcmFtZXRlciB0byBmcHJpbnRmLgoKVGh1IEZlYiAyMiAwMToxNDoyMSAxOTk2ICBFcmljIFdhcm5rZSA8ZXcyMTkzQGNzYy5hbGJhbnkuZWR1PgoKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglBZGRlZCBtb3JlIGZhbWlsaWFyIGljb24gYWN0aXZpdHksIGllIHNpbmdsZSBjbGljayBicmluZ3MgdXAKIAlzeXN0ZW0gbWVudS4KCldlZCBGZWIgMjEgMTM6MDc6MDQgMTk5NiAgRnJhbnMgdmFuIERvcnNzZWxhZXIgPGRvcnNzZWxAcnVsaG0xLmxlaWRlbnVuaXYubmw+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJQWRkZWQgY2FsbHMgdG8gSGlkZUNhcmV0KCkgYW5kIFNob3dDYXJldCgpIGZyb20gd2l0aGluCiAJVHJhY2tQb3B1cE1lbnUoKSwgTUVOVV9UcmFja01vdXNlTWVudUJhcigpIGFuZAogCU1FTlVfVHJhY2tLYmRNZW51QmFyKCkuICBBcmUgdGhlcmUgYW55IG1vcmUgcGxhY2VzIHdoZXJlIHRoaXMKIAlzaG91bGQgYmUgZG9uZT8KCgkqIFtjb250cm9scy9zdGF0aWMuY10KCUZpeGVkIGEgRklYTUUgaW4gU1RBVElDX1NldEljb24oKSwgd2hpY2ggbm93IHJldHVybnMgYSBoYW5kbGUgdG8KIAl0aGUgcHJldmlvdXMgaWNvbi4gIEFkZGVkIGEgbmV3IEZJWE1FIGF0IHRoZSBwb2ludCB3aGVyZQogCVdNX1NFVFRFWFQgaXMgaGFuZGxlZCBmb3IgYSBTU19JQ09OIHN0YXRpYyBjb250cm9sLgoKCSogW21pc2MvY29tbWRsZy5jXQoJSW1wbGVtZW50ZWQgRmluZFRleHQoKSBhbmQgUmVwbGFjZVRleHQoKQoJU3RpbGwgbWlzc2luZyA6IFRlbXBsYXRlcyBhbmQgSG9va3MgaGFuZGxpbmcgLyBlcnJvciBjaGVja2luZwoKCSogW3Jlc291cmNlcy9zeXNyZXNfRW4uY10KCVJlZGVzaWduZWQgRklORF9URVhUIGFuZCBSRVBMQUNFX1RFWFQgZGlhbG9ncywgc28gdGhleSBub3cgd29yay4KCUxhbmd1YWdlcyBvdGhlciB0aGFuIEVuIHNob3VsZCB1cGRhdGUgdGhlc2UgdG9vLCB0aG91Z2gsIGFzIHdlbGwKIAlhcyByZWRpbWVuc2lvbiB0aGUgY29udHJvbHMgYmVjYXVzZSBzb21lIG9mIHRoZSB0ZXh0IGRvZXNuJ3QgZml0LgogIAlDcmVhdGVkIGZpbGUgcmVzb3VyY2VzL1RPRE8gdG8gZXhwbGFpbiB0aGlzLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCVJlLXdyaXR0ZW4uICBJdCBub3cgdXNlcyB0aGUgY29ycmVjdCBSMl9YT1JQRU4uICBJdCByZXNldHMgdGhlCiAJYmxpbmsgdGltZXIgb24gU2V0Q2FyZXRQb3MoKS4gIEl0IGRvZXMgaXRzIG93biBoaWRlL3Nob3cgc2NoZW1lCiAJd2hlbiBTZXRDYXJldFBvcygpIGlzIGNhbGxlZCAoc2hvdWxkIGJlIGZhc3RlcikuCgpNb24gRmViIDE5IDIxOjUwOjAwIDE5OTYgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCU1pc2NlbGxhbmVvdXMgY2hhbmdlcyBmb3IgYmV0dGVyIExCU19FWFRFTkRFRFNFTCBzdXBwb3J0LgoJUmVtb3ZlZCBzZXZlcmFsIHN1cGVyZmx1b3VzIHJlZHJhd2FscyBvZiBpdGVtIGxpc3QuCgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglXTV9HRVRETEdDT0RFIHJldHVybiB2YWx1ZS4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRmxhc2hXaW5kb3cgZnVuY3Rpb24uCgoJKiBbd2luZG93cy9wYWludGluZy5jXSBbd2luZG93cy9zY3JvbGwuY10KCUFkZGVkIEhpZGVDYXJldC9TaG93Q2FyZXQgY2FsbHMuCgoJKiBbb2JqZWN0cy9mb250LmNdCglBZGRlZCBHZXRDaGFyQUJDV2lkdGhzIHN0dWIuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCgkiI2RlZmluZSJzIG5lZWRlZCBmb3IgY2hhbmdlcyBtZW50aW9uZWQgYWJvdmUuCgpNb24gRmViIDE5IDIwOjEyOjAzIDE5OTYgIEhhbnMgZGUgR3JhYWZmICA8SGFucy5kZUdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCUNoYW5nZSBvcmRlciBvZiBpbmNsdWRlcyB0byBnZXQgaW5fYWRkciBzdHJ1Y3QgZGVmaW5lZCBpbiB0aW1lLgoJKE5vdGU6IExpbnV4IDEuMy42NiwgbGliYyA1LjIuMTgpCgoJKiBbbWlzYy9tYWluLmNdIFtpbmNsdWRlL29wdGlvbnMuaF0gW21pc2NlbXUvaW50MmYuY10KCUNoYW5nZWQgdGhlIC1lbmhhbmNlZCBvcHRpb24gaW50byBhIC1tb2RlIG9wdGlvbiwgd2hpY2ggY2FuIGJlCgllaXRoZXIgJ3N0YW5kYXJkJyBvciAnZW5oYW5jZWQnLiAnZW5oYW5jZWQnIGlzIHRoZSBkZWZhdWx0LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTdW4gRmViIDE4IDE2OjM1OjU0IDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY10KCUxvb2sgZm9yIHRoZSB3YWxscGFwZXIgZmlsZSBpbiB0aGUgV2luZG93cyBkaXJlY3RvcnkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgc3dhcHBlZCBwYXJhbWV0ZXJzIGluIFNldE1lbnVJdGVtQml0bWFwcygpLgoJQ3JlYXRlIGEgc2VwYXJhdG9yIGluIE1FTlVfU2V0SXRlbURhdGEoKSB3aGVuIHRoZSBzdHJpbmcgaXMgTlVMTC4KCgkqIFtmaWxlL2Rvc2ZzLmNdCglET1NGU19GaW5kTmV4dDogZG9uJ3QgcmV0dXJuICcuJyBhbmQgJy4uJyBpbiBhIGRyaXZlIHJvb3QgZGlyLgoKCSogW2ZpbGVzL2ZpbGUuY10KCUFkZGVkIGEgRE9TX0ZJTEUgc3RydWN0dXJlIHRvIHN0b3JlIHBlci1maWxlIGluZm9ybWF0aW9uIChub3QKCXJlYWxseSB1c2VkIHlldCkuCglGaXhlZCBfbHJlYWQgYW5kIF9ocmVhZCB0byBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGJlZm9yZQoJY2FsbGluZyBVbml4IHJlYWQoKSB0byBhdm9pZCBFRkFVTFQgZXJyb3IuCgoJKiBbbWlzYy9leGVjLmNdCglSZXR1cm4gVFJVRSBpbiBXaW5IZWxwKCkgZm9yIEhFTFBfUVVJVCB0byBxdWlldCBOb3RlcGFkIG9uIGV4aXQuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJQ2FsbCBET1NNRU1fQWxhcm0oKSBpbiBJTlNUUl9SZXBsYWNlU2VsZWN0b3IoKS4gVGhpcyBzaG91bGQgZml4CiAJcHJvZ3JhbXMgdGhhdCBwb2xsIHRoZSBCSU9TIGNvdW50ZXIsIHByb3ZpZGVkIHRoZXkgcmVsb2FkIHRoZQogCXNlbGVjdG9yIG9uIGV2ZXJ5IHJlYWQuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJUmUtaW1wbGVtZW50ZWQgRmluZEZpcnN0L0ZpbmROZXh0IGZvciBGQ0IgY2FsbHMuCgoJKiBbd2luZG93cy9tZXNzYWdlLmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJTWVyZ2VkIE1TR19HZXRXaW5kb3dGb3JFdmVudCgpIGFuZCBXSU5QT1NfV2luZG93RnJvbVBvaW50KCkuCgoJKiBbd2luZG93cy9ub25jbGllbnQuY10gW3dpbmRvd3Mvd2luLmNdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUFkZGVkIGEgcGVyLXdpbmRvdyBXSU5fTUFOQUdFRCBmbGFnOyBvbmx5IHdpbmRvd3MgdGhhdCBoYXZlIGEKCWRpYWxvZyBmcmFtZSBvciBhIHNpemluZyBib3JkZXIgYXJlIG1hbmFnZWQuCgpTYXQgRmViIDE3IDE4OjI1OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dGRnc2FuZGZAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXQoJQWRkZWQgLWcgZmxhZyB0byBjb21waWxhdGlvbiBvZiAuYyBmaWxlcyBnZW5lcmF0ZWQgZnJvbSAqMzIuc3BlYy4KCgkqIFtpZjE2MzIvZ2RpMzIuc3BlY10KCU51bWVyb3VzIGFkZGl0aW9uYWwgZnVuY3Rpb25zIGltcGxlbWVudGVkLgoKCSogaWYxNjMyL3VzZXIzMi5zcGVjXQoJd3NwcmludGZBIG1hcHMgdG8gdnNwcmludGYgbm90IHdzcHJpbnRmCglOdW1lcm91cyBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZC4KCgkqIFtpbmNsdWRlL2dkaS5oXSBbb2JqZWN0cy9nZGlvYmouY10KCU5ldyAjZGVmaW5lIE1BR0lDX0RPTlRDQVJFIGFkZGVkLiBUaGlzIGlzIHVzZWQgaW4KCUdESV9HZXRPYmpQdHIgdG8gZW5hYmxlIGdldHRpbmcgYSBwb2ludGVyIHRvIGEgR0RJIG9iamVjdCBvZgoJdW5rbm93IHR5cGUuCgoJKiBbd2luMzIvZ2RpMzIuY10KCU5ldyBmaWxlLgoKCSogW3dpbjMyL3BhcmFtMzIuY10KCVdJTjMyX01vdmVUb0V4KCkgLSBoYW5kbGUgTlVMTCBwb2ludGVyIGFyZ3VtZW50LgoKCSogW3dpbjMyL3VzZXIzMi5jXQoJVVNFUjMyX0ludmFsaWRhdGVSZWN0IC0gaGFuZGxlIHBhc3Npbmcgb2YgYSBOVUxMIHBvaW50ZXIuCglVU0VSMzJfU2V0VGltZXIgLSBOZXcgZnVuY3Rpb24uCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglGaXhlZCBESVJfSW5pdCgpIChvZmYgYnkgb25lIGluIGFsbG9jYXRpb24gb2Ygc3BhY2UgZm9yCgllbnZpcm9ubWVudCB2YXJpYWJsZXMpLgoKCSogW2ZpbGVzL2RyaXZlLmNdCglBZGRlZCA8c3lzL3R5cGVzLmg+IHRvICNpbmNsdWRlcyAocHJlcmVxdWlzaXRlIGZvciA8c3lzL3N0YXQuaD4KCW9uIEZyZWVCU0QpLgoKRnJpIEZlYiAxNiAxMDoyNjo1NiAxOTk2ICBBbmRyZWFzIEtpcnNjaGJhdW0gPGFua0ByYmcuaW5mb3JtYXRpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJTWVtb3J5IGxlYWsgcGx1Z2dlZC4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFcmFzZSBzcGFjZSB3aXRoIGZ1bmN0aW9uIEV4dFRleHRPdXQoKS4gVGhpcyBlbGltaW5hdGVzIHRoZSB1c2Ugb2YKIAl4bWFsbG9jKCkuICBNZW1vcnkgbGVhayBpbiBFRElUX1dyaXRlVGV4dCBwbHVnZ2VkLgoKCSogW2RlYnVnZ2VyL2RiX2Rpc2FzbS5jXQoJT3BlcmFuZCBmb3Igc2NhcyBub3cgaXMgZGkuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJUFJPRklMRV9HZXRTZWN0aW9uIHdhcyBjb3B5aW5nIHRvbyBtdWNoIGRhdGEuCglQUk9GSUxFX0dldFNlY3Rpb24gbm93IHJldHVybnMgdGhlIGNvcnJlY3QgdmFsdWUuIEl0IHdhcyByZXR1cm5pbmcKIAl0aGUgbnVtYmVyIG9mIHVudXNlZCBpbnN0ZWFkIG9mIHVzZWQgYnl0ZXMuCgoJKiBbb2JqZWN0cy9kYy5jXQoJQ29ycmVjdGVkIHR3byB0eXBvcyBpbiBjb21tZW50cy4KCgkqIFtvYmplY3RzL2ZvbnQuY10KCUZPTlRfTWF0Y2hGb250IGRpZG4ndCByZXR1cm4gaWYgaXQgY291bGRuJ3QgZmluZCBhbnkgZm9udC4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJRnJlZSBvYmplY3Qgb25seSBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQuCgoJKiBbd2luZG93cy9zY3JvbGwuY10KCU1lbW9yeSBsZWFrIGluIFNjcm9sbERDIHBsdWdnZWQuCgpUdWUgRmViIDEzIDExOjE3OjAwIDE5OTYgV2lsbGlhbSBNYWdybyAgPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBFU19OT0hJREVTRUwgc3R5bGUsIHNoaWZ0K2NsaWNrIHNlbGVjdGlvbiwKIAlzaGlmdCt7YXJyb3csaG9tZSxlbmQscGd1cCxwZ2RufSBzZWxlY3Rpb24uICBPcHRpbWl6ZWQKCShkZSlzZWxlY3Rpb24gZHJhd2luZy4gIENoYW5nZWQgc2VsZWN0aW9uIGRyYXdpbmcgdG8gdXNlIGNvcnJlY3QKIAlzeXN0ZW0gY29sb3JzIGluc3RlYWQgb2YgaW52ZXJ0aW5nLiAgRml4ZWQgZGVsZXRpbmcgb3IgYmFja3NwYWNpbmcKIAlhY3Jvc3MgYSAnXHJcbicgZW5kIG9mIGxpbmUgcGFpci4gIFNlbGVjdGlvbiBub3cgYW5jaG9ycwogCWNvcnJlY3RseS4gRml4ZWQgdGV4dCBsZWFraW5nIGFuZCBleHRyYSBnYXJiYWdlIHByb2JsZW0gYnVnCiAJdW5jb3ZlcmVkIGJ5IGNoYW5nZSBpbiBjbGFzcyBzdHlsZSBpbiB3aW5lOTYwMTMxLgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCUNsYXNzIGZsYWdzIG5vdyBtYXRjaCB0aG9zZSBvZiBXaW5kb3dzLgoKTW9uIEZlYiAxMiAyMToyODoxOSAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL3dpZGdldHMuY10KCVdJREdFVFNfSW5pdDogUkVMQVkzMl9HZXRFbnRyeVBvaW50IGRvZXMgbm90IHRha2UgYSBzdHJpbmcgYW55bW9yZS4KCgkqIFtpZjE2MzIvTWFrZWZpbGUuaW5dW2lmMTYzMi9yZWxheTMyLmNdW2luY2x1ZGUvcmVsYXkzMi5oXQoJY29tY3RsMzIuc3BlYyBvbGUzMi5zcGVjIHdpbnNwb29sLnNwZWM6IG5ldyBmaWxlcy4KCVJFTEFZMzJfSW5pdDogY2FsbCBpbml0aWFsaXphdGlvbiBvZiBuZXcgRExMcy4KCVJFTEFZMzJfR2V0RW50cnlQb2ludDogZXhwZWN0cyBXSU4zMl9idWlsdGluKiBub3cuCglSRUxBWTMyX01ha2VGYWtlTW9kdWxlOiBuZXcgZnVuY3Rpb24uCgoJKiBbaWYxNjMyL2dkaTMyLnNwZWNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVtpZjE2MzIvdXNlcjMyLnNwZWNdCglBZGRlZCBXaW45NSBmdW5jdGlvbnMuIE9yZGluYWxzIG5vdyBkaWZmZXIgZnJvbSBib3RoIE5UIGFuZCBXaW45NQoJSGVhcENyZWF0ZSwgQ3JlYXRlRGlhbG9nSW5kaXJlY3RQYXJhbUEsIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW1XLAoJQ3JlYXRlRGlhbG9nUGFyYW1BLCBDcmVhdGVEaWFsb2dQYXJhbVcsIERpYWxvZ0JveEluZGlyZWN0UGFyYW1BCglEaWFsb2dCb3hJbmRpcmVjdFBhcmFtVywgRGlhbG9nQm94UGFyYW1BLCBEaWFsb2dCb3hQYXJhbVc6CgluZXcgcmVsYXlzLgoKCSogW2lmMTYzMi9zaGVsbDMyLnNwZWNdCglzaGVsbDMyLnNwZWM6IHJlbnVtYmVyZWQgYWxsIGZ1bmN0aW9ucyB0byB0YWtlIGludG8gYWNjb3VudCBvcmRpbmFscy4KCVRoZXNlIHNlZW0gdG8gYmUgaWRlbnRpY2FsIGJldHdlZW4gTlQgYW5kIFdpbjk1LgoKCSogW2luY2x1ZGUvZGlhbG9nLmhdW3dpbmRvd3MvZGlhbG9nLmNdCgl4QmFzZVVuaXQseUJhc2VVbml0LERJQUxPR19Eb0RpYWxvZ0JveDogbWFkZSBub24tc3RhdGljLgoKCSogW2luY2x1ZGUvaGFuZGxlMzIuaF0KCU5ldyBoYW5kbGUgdHlwZXMgVlJBTkdFLCBIRUFQLCBIRUFQSVRFTS4KCgkqIFtpbmNsdWRlL3BlX2ltYWdlLmhdW2xvYWRlci9wZV9pbWFnZS5jXQoJc3RydWN0IHdfZmlsZXM6IG5ldyBmaWVsZCBidWlsdGluLgoJUEVfRmluZEV4cG9ydGVkRnVuY3Rpb246IHN1cHBvcnQgb3JkaW5hbHMuCglQRV9HZXRQcm9jQWRkcmVzczogY2FsbCBSRUxBWTMyX0dldEVudHJ5UG9pbnQgZm9yIGJ1aWx0aW5zLgoJZml4dXBfaW1wb3J0czogc3VwcG9ydCBvcmRpbmFscy4KCVBFX0xvYWRJbWFnZTogcHJlZmVyIGRpcmVjdG9yaWVzIG92ZXIgc2VnbWVudHMuCgoJKiBbaW5jbHVkZS9yZXNvdXJjZS5oXVt3aW4zMi9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlMzI6IGNoYW5nZWQgcGFyYW1ldGVyIGZyb20gTFBDVFNUUiB0byBMUENXU1RSCgkJY2hlY2sgTEFOR19ORVVUUkFMIGlmIExBTkdfRU5HTElTSCBmYWlscy4KCUxvYWRBY2NlbGVyYXRvcnNXLFNpemVvZlJlc291cmNlMzIsQWNjZXNzUmVzb3VyY2UzMjogCgkJZGlzYWJsZWQgYmVjYXVzZSBpdCdzIGJyb2tlbi4KCUNhc3RlZCB0byBhbmQgZnJvbSBMUFdTVFIgYXQgdmFyaW91cyBwbGFjZXMuCgoJKiBbaW5jbHVkZS9zdHJpbmczMi5oXVt3aW4zMi9zdHJpbmczMi5jXQoJQ2hhbmdlZCBwcm90b3R5cGVzIHRvIHRha2UgY29uc3QgYXJndW1lbnRzIHdoZXJlIGFwcHJvcHJpYXRlLgoKCSogW2luY2x1ZGUvc3RydWN0MzIuaF0KCU5ldyBzdHJ1Y3R1cmVzIERMR1RFTVBMQVRFMzIsIERMR0lURU1URU1QTEFURTMyLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglCdWlsZFNwZWMzMkZpbGVzOiBnZW5lcmF0ZSBCYXNlIHZhbHVlIGludG8gY29kZSwgZ2VuZXJhdGUgY2FsbCB0bwoJUkVMQVkzMl9NYWtlRmFrZU1vZHVsZS4KCQoJKiBbd2luMzIvaGVhcC5jXQoJVGhpcyBpcyBzdGlsbCBub3QgZmluaXNoZWQgYW5kIG5lZWRzIHJld29yay4KCUhlYXBBbGxvYzogcmVuYW1lZCB0byBTSU1QTEVfSGVhcEFsbG9jLCBpbXBsZW1lbnRlZCBIZWFwQWxsb2MuCglIZWFwQ3JlYXRlOiBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgVmlydHVhbEFsbG9jLCB3aGljaCBkb2VzIG5vdCB3b3JrIHlldAoJSGVhcERlc3Ryb3ksIEhFQVBfR3Jvd0hlYXAsIEhlYXBGcmVlOiBuZXcgZnVuY3Rpb25zLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJU3VwcG9ydCBmb3IgVlJBTkdFX09CSkVDVC4gVGhpcyBpcyBub3QgeWV0IGNhbGxlZCBmcm9tIGFueSBwbGFjZSwKCWFuZCBuZWVkcyBtb3JlIHBsYXRmb3JtIHNwZWNpZmljIHN1cHBvcnQKCU1FTU9SWV9GaW5kVnJhbmdlLCBNRU1PUllfSXNWcmFuZ2VGcmVlLCBNRU1PUllfSW5zZXJ0VnJhbmdlLAoJTUVNT1JZX0FsbG9jVnJhbmdlLCBNRU1PUllfUmVsZWFzZVZyYW5nZTogbmV3IGZ1bmN0aW9ucy4KCgkqIFt3aW4zMi91c2VyMzIuY10KCVdJTjMyX0NyZWF0ZVdpbmRvd0V4QTogZG9uJ3QgR2xvYmFsQWxsb2MgZm9yIGludGVnZXIgY2xhc3MgYW5kIHdpbmRvdwoJbmFtZXMsIGFzIGluIGRpYWxvZ3MuCglJbXBsZW1lbnRlZCBkaWFsb2cgZnVuY3Rpb25zIChzZWUgdXNlcjMyLnNwZWMpLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNBUkVUX0luaXRpYWxpemU6IGNhbGwgUkVMQVkzMl9HZXRCdWlsdGluRExMLgoKTW9uIEZlYiAxMiAxODo1Mjo0MCAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVJlbW92ZWQgY29tbWVudGVkIG91dCAjaWZkZWZzIGZvciBXSU5FTElCLgoKCSogW3Rvb2xzL21ha2VodG1sLnBsXQoJUHV0IGluIGVycm9yIGNoZWNraW5nIHdoZW4gdHJ5aW5nIHRvIG9wZW4gYSBmaWxlLgoKCSogW2xpYnRlc3QvTWFrZWZpbGUuaW5dIFtsaWJ0ZXN0L25ldy5jXSBbbGlidGVzdC9oZWxsbzQuY10KCUFkZGVkIHR3byBuZXcgdGFyZ2V0czogaGVsbG80IGFuZCBuZXcuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBkZWZpbml0aW9uIG9mIERFVk1PREUgc3RydWN0dXJlLCBhbHRob3VnaCBpdCdzIG5vdCB5ZXQgdXNlZC4KICAJTW9kaWZpZWQgdmFyaW91cyBBUEkgZnVuY3Rpb25zIGZyb20gQ3JlYXRlREMoKSB0byBFc2NhcGUoKSwgaW4KIAlvcmRlciB0byBtYWtlIHRoZW0gbW9yZSBjb21wbGlhbnQgd2l0aCB0aGUgc3RyaWN0IEFQSSBkZWZpbml0aW9ucy4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCAndHlwZWRlZiBjaGFyIFRDSEFSJy4gIEl0IHByb2JhYmx5IHNob3VsZCBiZSBkZWZpbmVkIGFzCgknc2hvcnQnLCBidXQgdGhlbiB3ZSB3b3VsZCBoYXZlIHRvIHN1cHBvcnQgc3VjaCBjaGFyYWN0ZXJzLiAgQWxzbyBkaWQKCSd0eXBlZGVmIGNvbnN0IFRDSEFSKiBMUENUU1RSJyBhbmQgJ3R5cGVkZWYgVENIQVIqIExQVFNUUicuCglBbHNvIGRlZmluZWQgV05ERU5VTVBST0MsIEZPTlRFTlVNUFJPQywgR09CSkVOVU1QUk9DLCBQUk9QRU5VTVBST0MKCU1GRU5VTVBST0MsIGFuZCBIR0RJT0JKLgoKTW9uIEZlYiAgNSAxNjo0MjowNyAxOTk2ICBGcmFucyB2YW4gRG9yc3NlbGFlciA8ZG9yc3NlbEBydWxobTEubGVpZGVudW5pdi5ubD4KCgkqIFttaXNjL2NvbW1kbGcuY10KCVBhdGNoZWQgYSBidWcgdGhhdCBvY2N1cnJlZCBpbiB0aGUgaW50ZXJuYWwgQ09NTURMRyBtb2R1bGUgZm9yIHRoZQogCUZpbGVPcGVuKCksIEZpbGVTYXZlKCkgYW5kIEZpbGVTYXZlQXMoKSBmdW5jdGlvbnMuICBUaGUgZmlsZS10eXBlCiAJY29tYm9ib3ggaXMgbm93IGhhbmRsZWQgY29ycmVjdGx5LgoKRnJpIEZlYiAgMiAyMjo1Mjo1OCAxOTk2ICBSb21hbiBEb2xlanNpICA8cm9tYW5Ac29ycnkudnNlLmN6PgoKCSogW3Jlc291cmNlcy9zeXNyZXNfQ3oucmNdCglBZGRlZCBzdXBwb3J0IGZvciBDemVjaCBbQ3pdIGxhbmd1YWdlLgoKVGh1IEZlYiAgMSAwMDozNTowNCAxOTk2ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW29iamVjdHMvZm9udC5jXQoJRk9OVF9tYXRjaGZvbnQgOiBmb3IgZml4ZWQtc3BhY2luZyBmb250cywgYWxsb3cgJ2MnIGlmICdtJyBmYWlsczsKCWZvciB2YXJpYWJsZS1zcGFjaW5nIGZvbnRzIDogYWxsb3cgJyonIGlmICdwJyBmYWlsczsgaWYgYXNrZWQgbGZIZWlnaHQKCWlzIC0xLCBhc3N1bWUgMC4KCUNyZWF0ZUZvbnRJbmRpcmVjdCA6IGlmIGZvbnQgcGFyYW1ldGVyIGlzIE5VTEwsIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UuCglDcmVhdGVGb250IDogbnVsbC10ZXJtaW5hdGUgbGZGYWNlTmFtZS4KCVBhcnNlRm9udFBhcm1zIDogZGVidWcgY29kZSB0dXJuZWQgb2ZmIDogdG9vIHZlcmJvc2UuCglJbml0Rm9udHNMaXN0IDogcmVjb2duaXplICotYy0qIGZvbnRzIGFzIGZpeGVkLXNwYWNpbmcgZm9udHMuCgoJKiBbb2JqZWN0cy9jb2xvci5jXQoJQ29sb3JUb1BoeXNpY2FsIDogYWRtaXQgMHhmZi4uLi4uLiBDT0xPUlJFRidzIGFzIDB4MDAuLi4uLi4gb25lcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCldlZCBKYW4gMzEgMTA6NTg6MDAgMTk5NiAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0KCUFkZGVkIC0td2l0aC1kbGwgb3B0aW9uIHRvIGJ1aWxkIGxpYndpbmUuc28uCgoJKiBbY29udHJvbHMvbGlzdGJveC5jXQoJRml4ZWQgTGlzdEJveERpcmVjdG9yeSgpLCBEbGdEaXJTZWxlY3QoKSBhbmQKCURsZ0Rpckxpc3QoKS4gSG9wZWZ1bGx5IHRoZWlyIGJlaGF2aW9yIGlzIGNvcnJlY3Qgbm93LgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVVzZSBTRUdQVFJzIGluIENoYW5nZU1lbnUoKSwgSW5zZXJ0TWVudSgpLCBBcHBlbmRNZW51KCkgYW5kCiAJTW9kaWZ5TWVudSgpIGZvciB0aGUgaXRlbSBkYXRhLCB0byBhdm9pZCBjb3JydXB0aW5nIHRoZSBwb2ludGVyCiAJZm9yIG93bmVyLWRyYXduIGl0ZW1zLgoKCSogW2NvbnRyb2xzL3N0YXRpYy5jXQoJQXR0ZW1wdCB0byBsb2FkIE9FTSBpY29ucyBmb3IgU1NfSUNPTiBjb250cm9scy4gUHJvYmFibHkgbm90CgllbnRpcmVseSBjb3JyZWN0LgoJRG9uJ3QgY2xpcCB0aGUgdGV4dCBvdXRwdXQuCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdCglBZGQgdGVtcCBkaXIgYW5kIFdpbmRvd3MgZGlyIHRvIGVudmlyb25tZW50LgoKCSogW2ZpbGVzL2Rvc19mcy5jXQoJRml4ZWQgYSBmZXcgcGF0aCBoYW5kbGluZyBidWdzIGluIERPU0ZTX0dldFVuaXhGaWxlTmFtZSgpLgoJQ2FjaGUgbGFzdCB1c2VkIGRpcmVjdG9yeSBpbiBET1NGU19GaW5kTmV4dCgpIHRvIGF2b2lkIHF1YWRyYXRpYwoJc2VhcmNoIHRpbWUuCgoJKiBbZmlsZXMvZHJpdmUuY10KCU5ldyBmb3JtYXQgZm9yIGRyaXZlcyBjb25maWd1cmF0aW9uIGluIHdpbmUuY29uZjsgYWxsb3dzCglzcGVjaWZ5aW5nIHRoZSB0eXBlLCBsYWJlbCBhbmQgc2VyaWFsIG51bWJlciBvZiBhIGRyaXZlLgoKCSogW2ZpbGVzL2ZpbGUuY10KCU5ldyBmdW5jdGlvbiBGSUxFX09wZW5Vbml4RmlsZSB0byBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3BlbiBhCglkaXJlY3RvcnkgaW5zdGVhZCBvZiBhIGZpbGUuCglGaXhlZCBET1NGU19HZXRVbml4RmlsZU5hbWUoKSBjaGVja19sYXN0IGZsYWcgaW4gRklMRV9NYWtlRGlyKCkuCgoJKiBbZmlsZXMvcHJvZmlsZS5jXQoJUmV3cm90ZSBwcm9maWxlIGhhbmRsaW5nLiBTaG91bGQgYmUgY2xvc2VyIHRvIFdpbmRvd3MgYmVoYXZpb3Igbm93LgoJTmV3IGZ1bmN0aW9uIFBST0ZJTEVfR2V0V2luZUluaVN0cmluZygpIHRvIGdldCBhIHN0cmluZyBmcm9tIHdpbmUuY29uZi4KCVN1cHBvcnQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGluIHdpbmUuY29uZi4KCgkqIFtsb2FkZXIvdGFzay5jXQoJRml4ZWQgdGhlIG9yZGVyIG9mIGRlbGV0aW9uIGluIFRBU0tfRGVsZXRlVGFzaygpIHRvIGF2b2lkIG1lbW9yeQoJY29ycnVwdGlvbi4KCgkqIFttZW1vcnkvZ2xvYmFsLmNdCglDcmVhdGUgYSBkaXNjYXJkZWQgYmxvY2sgb24gR2xvYmFsQWxsb2MoKSBpZiB0aGUgc2l6ZSBpcyAwOyB0aGFua3MKCXRvIEpvaG4gSGFydmV5IGZvciBub3RpY2luZyB0aGlzLgoKCSogW21lbW9yeS9sb2NhbC5jXQoJTE9DQUxfR2V0SGVhcDogbWFrZSBzdXJlIHRoZSBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSBjaGVja2luZwoJbWFnaWMgbnVtYmVyLgoKCSogW21pc2MvbWFpbi5jXQoJTW92ZWQgcHJvZmlsZSBhbmQgcmVnaXN0cnkgc2F2aW5nIHRvIEV4aXRXaW5kb3dzKCksIHNvIHdlIGRvbid0Cgl0cnkgdG8gc2F2ZSB0aGVtIGluIGNhc2Ugb2YgYSBjcmFzaC4KCgkqIFttaXNjZW11L2ludDIxLmNdCglJTlQyMV9HZXRGcmVlRGlza1NwYWNlOiB0cnkgdG8gY29tcHV0ZSB0aGUgY2x1c3RlciBzaXplIGZyb20gdGhlCglmaWxlc3lzdGVtIHNpemUgaW5zdGVhZCBvZiBoYXJkLWNvZGluZyBpdCB0byA2NC4KCUZpeGVkIGZ1bmN0aW9ucyAweDNmIGFuZCAweDQwIHRvIHVzZSBfaHJlYWQgYW5kIF9od3JpdGUgdG8gYWxsb3cKCXJlYWRpbmcgb3Igd3JpdGluZyA2NTUzNSBieXRlcyAodGhhbmtzIHRvIEJydWNlIE1pbG5lciBmb3IgdGhpcwlvbmUpLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgYnVnIGluIGxpbmtlZC1saXN0IGhhbmRsaW5nIGluIE1TR19EZWxldGVRdWV1ZSgpLgoJU2ltcGxpZmllZCBTZXRNZXNzYWdlUXVldWUoKS4KCgkqIFt3aW5lLmluaV0gW3dpbmUubWFuXQoJVXBkYXRlZCBmb3IgbmV3IGRyaXZlcyBjb25maWd1cmF0aW9uIGZvcm1hdC4KClR1ZSBKYW4gMzAgMTE6MjQ6NDYgMTk5NiAgV2lsbGlhbSBNYWdybyAgPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFtjb250cm9scy9lZGl0LmNdCglJbXBsZW1lbnRlZCBFU19QQVNTV09SRCBzdHlsZSwgRU1fU0VUUEFTU1dPUkRDSEFSIGFuZAogCUVNX0dFVFBBU1NXT1JEQ0hBUiBtZXNzYWdlcy4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglBZGp1c3RlZCBjbGFzcyBjcmVhdGlvbiBmbGFncyB0byBiZXR0ZXIgbWF0Y2ggdmFsdWVzIFdpbmRvd3MgdXNlcy4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZpeGVkIEVTX05PSElERVNFTCB0eXBvLgoKCSogW2xvYWRlci9uZV9pbWFnZS5jXQoJQWRkZWQgZGV0ZWN0aW9uIGZvciB6ZXJvIG9mZnNldCBpbiBSQUREUiBmaXh1cHMuIFF1aWNrZW4KCXdhcyBpbiBhbiBpbmZpbml0ZSBsb29wIGhlcmUuCgpNb24gSmFuIDI5IDIwOjEyOjIyIDE5OTYgIEFsYnJlY2h0IEtsZWluZSAgPGtsZWluZUBhay5zYXguZGU+CgoJKiBbZmlsZXMvZG9zX2ZzLmNdCglCdWdmaXg6IHJhbmdlIGVycm9yIGluIG1vbnRoIHZhbHVlICgwLi4xMSBzZXQgdG8gMS4uMTIpLgoKCSogW3dpbmRvd3MvY2FyZXQuY10KCUNoYW5nZWQgUk9QMi1tb2RlIHRvIFIyX05PVFhPUlBFTiBpbiBDQVJFVF9DYWxsYmFjayBmb3IgcHVsc2VkCiAJYXBwZWFyYW5jZSBvZiB0aGUgY2FyZXQuCgoJKiBbd2luZG93cy9tZGkuY10gW2luY2x1ZGUvbWRpLmhdCglDaGFuZ2VkIE1ESVRpbGUoKTogYWRkZWQgYSBuZXcgcGFyYW1ldGVyIFdPUkQgd1BhcmFtIGZvcgogCVdNX01ESVRJTEUgc2Vjb25kIHRpbGluZyBtZXRob2QgKE1ESVRJTEVfSE9SSVpPTlRBTCBpbiB3UGFyYW0pIGFzCiAJdXNlZCBpbiBXaW4zLjEKClN1biBKYW4gMjggMTQ6MjA6MDAgMTk5NiAgQ2FtZXJvbiBIZWlkZSAgPGhlaWRlQGVlLnVhbGJlcnRhLmNhPgoKCSogW21pc2NlbXUvaW50MmYuY10KCUFkZGVkIGEgc21hbGwgYml0IG9mIE1TQ0RFWCBlbXVsYXRpb24uCgoJKiBbd2luZG93cy9hbGlhcy5jXQoJQUxJQVNfUmVnaXN0ZXJBbGlhcyB3YXMgcmV0dXJuaW5nIHRoZSBoYXNoIHZhbHVlIHdoZW4gaXQgc2hvdWxkCiAJaGF2ZSBiZWVuIHJldHVybmluZyB0aGUgcmVjb3JkIG51bWJlci4KCQpTYXQgSmFuIDI3IDEwOjUzOjUxIDE5OTYgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbaW5jbHVkZS9zaGVsbC5oXSBbaW5jbHVkZS93aW50eXBlcy5oXQoJTW92ZWQgZGVmaW5pdGlvbiBvZiBIS0VZIGFuZCBMUEhLRVkgdHlwZXMgdG8gaW5jbHVkZS93aW50eXBlcy5oLgoJRGVjbGFyZWQgRk9OVEVOVU1QUk9DIGluIHdpbnR5cGVzLmguCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglBZGRlZCBkZWZpbml0aW9uIG9mIEtFUk5JTkdQQUlSIGFuZCBMUEtFUk5JTkdQQUlSIHR5cGVzLiAgQWRkZWQKCWRlY2xhcmF0aW9ucyBmb3IgQ29weUN1cnNvcigpLCBDb3B5SWNvbigpLCBFbnVtRm9udEZhbWlsaWVzKCksCglFeHRyYWN0SWNvbigpLCBGYXRhbEFwcEV4aXQoKSwgRmluZEV4ZWN1dGFibGUoKSwgR2V0Q2xpcEN1cnNvcigpLAoJR2V0S2VybmluZ1BhaXJzKCksIEdldFF1ZXVlU3RhdHVzKCksIEdldFJhc3Rlcml6ZXJDYXBzKCksCglJc0dESU9iamVjdCgpLCBJc01lbnUoKSwgSXNUYXNrKCksIFJlZ0Nsb3NlS2V5KCksIFJlZ0NyZWF0ZUtleSgpLAoJUmVnRGVsZXRlS2V5KCksIFJlZ0VudW1LZXkoKSwgUmVnT3BlbktleSgpLCBSZWdRdWVyeVZhbHVlKCksCglSZWdTZXRWYWx1ZSgpLCBSZXNldERDKCksIFNoZWxsRXhlY3V0ZSgpLCBTeXN0ZW1QYXJhbWV0ZXJzSW5mbygpLAoJYW5kIHdzcHJpbnRmKCkuCgoJKiBbdG9vbHMvbWFrZWh0bWwucGxdIFtkb2N1bWVudGF0aW9uL2FwaXcuaW5kZXhdCglOZXcgZmlsZXMgdGhhdCBzY2FuIHdpbmRvd3MuaCwgY29tbWRsZy5oLCBhbmQgdG9vbGhlbHAuaCBhbmQgb3V0cHV0CglhbiBIVE1MIHNvcnRlZCBsaXN0IHdpdGggb3B0aW9uYWwgbGlua3MgdG8gd3d3LndpbGxvd3MuY29tIGFuZCBhCgl0YWxseSBvZiB1bmltcGxlbWVudGVkIEFQSVcgZnVuY3Rpb25zLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJQWRkZWQgV2luMzIgdmVyc2lvbnMgb2YgQ29weUljb24oKSBhbmQgQ29weUN1cnNvcigpIGZvciB1c2UgaW4KCWxpYndpbmUuCgoJKiBbd2luMzIvcmVzb3VyY2UuY10gW3dpbjMyL3dpbnByb2NzLmNdCglBZGRlZCAnI2luY2x1ZGUgImxpYnJlcy5oIicgYW5kIGV4cGxpY2l0IGRlY2xhcmF0aW9ucyBvZiB3aW5kb3dzCglwcm9jcyBpbiBvcmRlciB0byBhdm9pZCB3YXJuaW5ncy4KCgkqIFt3aW5kb3dzL3V0aWxpdHkuY10KCUFkZGVkIFdpbjMyIHZlcnNpb24gb2YgTXVsRGl2KCkgZm9yIGxpYndpbmUuCgoJKiBbKi8qXSBbaW5jbHVkZS93aW5kb3dzLmhdCglDaGFuZ2VkIHNldmVyYWwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIGNvbXBseSBtb3JlIHN0cmljdGx5IHRvCgl0aGUgd2luZG93cyBBUEkgKHdpdGhvdXQsIGhvcGVmdWxseSwgYWx0ZXJpbmcgdGhlaXIgZnVuY3Rpb25hbGl0eSkuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJTWFkZSB0aGUgcmV0dXJuIHZhbHVlIG9mIENoZWNrTWVudUl0ZW0gYmUgdGhlIHByZXZpb3VzIHN0YXRlIG9mCiAJdGhlIG1lbnUgaXRlbSBpZiBpdCB3YXMgZm91bmQsIG90aGVyd2lzZSAtMSBhcyBzcGVjaWZpZWQgaW4gdGhlCiAJU0RLLiBUaGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBBUElXIHNwZWNpZmljYXRpb24sIHdoaWNoIHNheXMgaXQKIAlzaG91bGQgcmV0dXJuIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIEZBTFNFLgoKCSogW2luY2x1ZGUvd2luZG93cy5oXQoJQWRkZWQgb2Jzb2xldGUgV01fU0laRSBtZXNzYWdlIHdQYXJhbSBuYW1lcyBmb3IgY29tcGF0aWJpbGl0eS4KICAJQWRkZWQgV2luSGVscCgpIGNvbW1hbmQgY29uc3RhbnRzLCBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgeWV0CiAJc3VwcG9ydGVkLgoKCSogW3JjL3dpbmVyYy5jXQoJVGlkaWVkIHVwIHRyYW5zZm9ybV9iaW5hcnlfZmlsZSgpLiAgSW4gYXJndW1lbnQgY2hlY2tpbmcsIGZsYXR0ZW5lZAoJYW55IGludmFsaWQgY2hhcmFjdGVycyBzcGVjaWZpZWQgd2l0aCB0aGUgcHJlZml4IGFyZ3VtZW50LgoKCSogW2xpYnJhcnkvbGlicmVzLmNdCglNYWRlIEZpbmRSZXNvdXJjZSgpIGNhc2UtaW5zZW5zaXRpdmUgd2hlbiBwYXJhbWV0ZXIgJ25hbWUnIGlzIGEgc3RyaW5nLgoKU2F0IEphbiAyNyAwMjozMCAxOTk2ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGUKCgkqIFtmaWxlcy9kcml2ZS5jXQoJSWYgcm9vdCAiLyIgaXMgZ2l2ZW4gaW4gd2luZS5jb25mLCB1c2UgaXQgYXMgbGFzdCByZXNvcnQuCgoJKiBbZmlsZXMvZmlsZS5jXQoJUmVwb3J0IEVSX0FjY2Vzc0RlbmllZCBpdCBkaXNrIGlzdCBub3Qgd3JpdGFibGUKCU1vcmUgRGVidWcgT3V0cHV0CgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJU3F1ZWV6ZWQgc29tZSBidWdzIGluIEV4dGVuZGVkT3BlbkNyZWF0ZUZpbGUKCQoJKiBbd2luZG93cy93aW5wb3MuY10KCVNvbWUgd2luZG93cyBtYXkgbm90IGJlIG1vdmVkIG9yIHJlc2l6ZWQuIFdlIGFyZSBtaXNzaW5nIHNvbWUKCXN0cnVjdHVyZXMgdG8gYmUgZXhhY3QsIGJ1dCB0aGUgYXBwcm9hY2ggc2hvdWxkIGhlbHAgaW4gc29tZSBjYXNlcwoJYW5kIG1ha2UgdGhpbmdzIHdvcnNlIGluIG11Y2ggZmV3ZXIuCgpGcmkgSmFuIDI2IDEwOjI0OjAwIDE5OTYgIFRob21hcyBTYW5kZm9yZCA8dC5kLmcuc2FuZGZvcmRAcHJkcy1ncm4uZGVtb24uY28udWs+CgoJKiBbbG9hZGVyL3BlX2ltYWdlLmNdCglmaXh1cF9pbXBvcnRzOiBGaW5kIGJ1aWx0aW5zIGZvciBCb3JsYW5kIHN0eWxlIGVudHJpZXMsIHRvbwoKRnJpIEphbiAyNiAxMDoyNDowMCAxOTk2ICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL21lbnUuY10KCUxvYWRNZW51OiBicmFuY2ggdG8gV2luMzIgZm9yIFBFIG1vZHVsZXMKCgkqIFtpZjE2MzIvZ2RpLnNwZWNdW2lmMTYzMi9rZXJuZWwzMi5zcGVjXVtpZjE2MzIvdXNlcjMyLnNwZWNdCglEZWxldGVPYmplY3QsIEdldFBpeGVsLCBTZXRQaXhlbCxXcml0ZVByaXZhdGVQcm9maWxlU3RyaW5nQSwKCVdyaXRlUHJvZmlsZVN0cmluZ0EsIEVtcHR5Q2xpcGJvYXJkLCBFbmFibGVNZW51SXRlbSwgRW5hYmxlU2Nyb2xsQmFyLAoJRW5hYmxlV2luZG93LCBJbnZhbGlkYXRlUmVjdCwgU2V0V2luZG93VGV4dEEsIFdpbkhlbHBBOiBuZXcgcmVsYXlzCglEcmF3VGV4dEEsIE1vdmVUb0V4LCBHZXRDbGllbnRSZWN0LCBJbnZhbGlkYXRlUmVjdCwgTG9hZEJpdG1hcEEvVywKCUxvYWRBY2NlbGVyYXRvcnNBL1csIExvYWRNZW51W0luZGlyZWN0XUEvVywgTG9hZFN0cmluZ0EvVzogY2hhbmdlZAoJdG8gY29udmVydCBwYXJhbWV0ZXJzIG9yIG5hbWluZyBjb252ZW50aW9uCgoJKiBbaW5jbHVkZS9rZXJuZWwzMi5oXVtpbmNsdWRlL3dpbnR5cGVzLmhdCgltb3ZlZCBXQ0hBUiwgZGVmaW5lZCBMUFdTVFIKCgkqIFtpbmNsdWRlL3N0cmluZzMyLmhdW3dpbjMyL3N0cmluZzMyLmNdW2luY2x1ZGUvc3RydWN0MzIuaF0KCU5ldyBmaWxlcwoKCSogW2xvYWRlci9tb2R1bGUuaF0KCUxvYWRNb2R1bGU6IGV4aXQgYWZ0ZXIgcmV0dXJuaW5nIGZyb20gUEVfTG9hZE1vZHVsZQoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJbXlfd2NzdG9tYnM6IGlzYXNjaWkgZG9lcyBub3Qgd29yayBvbiBMaW51eCBmb3IgVW5pY29kZQoJUEVfTG9hZEltYWdlOiBIYW5kbGUgZGlyZWN0b3JpZXMKCgkqIFttaXNjL3VzZXIzMi5jXQoJVVNFUjMyX1JFQ1QzMnRvMTYsIFVTRVIzMl9SRUNUMTZ0bzMyOiBuZXcgZnVuY3Rpb25zCglpbXBsZW1lbnRlZCBuZXcgdXNlcjMyIHJlbGF5cwoKCSogW21pc2MvbmV3Zm5zLmNdCglXSU4zMl9XaW5IZWxwQTogbmV3IGZ1bmN0aW9uCgoJKiBbd2luMzIvcGFyYW0zMi5jXQoJTmV3IGZpbGUKCgkqIFt3aW4zMi9yZXNvdXJjZS5jXQoJR2V0UmVzRGlyRW50cnk6IGFkZGVkIHN1cHBvcnQgZm9yIG5hbWVkIGVudHJpZXMKCVdJTjMyX0xvYWRBY2NlbGVyYXRvcnNXOiBpbnZva2UgKjMyIHJlc291cmNlIGZ1bmN0aW9ucwoJV0lOMzJfTG9hZEJpdG1hcEE6IGNvbnZlcnQgbmFtZSB0byB1bmljb2RlIGlmIGFwcHJvcHJpYXRlCglXSU4zMl9QYXJzZU1lbnU6IG5ldyBmdW5jdGlvbgoJaW1wbGVtZW50ZWQgbmV3IHJlc291cmNlIGZ1bmN0aW9ucyBmcm9tIHVzZXIzMi5zcGVjCgpXZWQgSmFuIDI0IDE4OjA5OjAwIDE5OTYgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglHZXRJY29uSWQoKSBhbmQgTG9hZEljb25IYW5kbGVyKCkgZnVuY3Rpb25zLgoKCSogW3dpbmRvd3MvbWRpLmNdCglCZXR0ZXIgbWF4aW1pemF0aW9uIHN1cHBvcnQsIFRyYW5zbGF0ZU1ESVN5c0FjY2VsKCkgZnVuY3Rpb24sIAoJbWlzYyBpbXByb3ZlbWVudHMuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCUZpeCBmb3IgV01fV0lORE9XUE9TQ0hBTkdFRCBtZXNzYWdlIGhhbmRsZXIuCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVJld3JvdGUgV2luZG93RnJvbVBvaW50KCkgZnVuY3Rpb24uCgpTdW4gSmFuIDIxIDE5OTYgMTc6MDU6MDkgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2luY2x1ZGUvdG9vbGhlbHAuaF0gW21pc2MvdG9vbGhlbHAuY10KCUFkZGVkIE5vdGlmeShVbilSZWdpc3RlciwgYnV0IG5vIGNhbGxiYWNrcyB5ZXQuCgpGcmkgSmFuIDE5IDAxOjQzOjM3IDE5OTYgVmljdG9yIFNjaG5laWRlciA8cm9vdEB0YWlsb3Iucm9tYW4ub3JnPgoKCSogW01ha2VmaWxlLmluXQoJQWRkZWQgdGFyZ2V0IGZvciBsaWJ3aW5lLnNvLjEuMC4KCgkqIFtsaWJyYXJ5L3dpbm1haW4uY10KCUZvciBXSU5FTElCRExMLCBfV2luTWFpbiBqdXN0IHJldHVybnMgaEluc3RhbmNlIGluc3RlYWQgb2YgY2FsbGluZwoJV2luTWFpbigpLgoKCSogW21pc2MvbWFpbi5jXQoJRm9yIFdJTkVMSUJETEwsIHJlbmFtZWQgbWFpbigpIHRvIF93aW5lX21haW4oKSBmb3IgY2FsbGluZyBmcm9tIHRoZQoJc3R1YiBtYWluIGZ1bmN0aW9uLgoKCSogW2xpYnJhcnkvd2luZXN0dWIuY10gKG5ldyBmaWxlKQoJUHJvdmlkZXMgYSBzdHViIG1haW4oKSBmdW5jdGlvbiBmb3IgdXNpbmcgbGlid2luZS5zby4KClR1ZSBKYW4gMTYgMTE6MDQ6MzQgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW3dpbnNvY2tldC5jXQoJRml4IEVQRVJNIHByb2JsZW0uCgoJKiBbZ2xvYmFsLmNdCglBdHRlbXB0IHRvIGRvIHNvbWUgc2FuaXR5IGNoZWNraW5nIGluIE1lbU1hbkluZm8oKS4KCgkqIFtDaGFuZ2Vsb2ddCglGaXggY2hhbmdlbG9nIG92ZXJzaWdodCBmb3IgcHJldmlvdXMgZW50cnkuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KU3VuIEphbiAxNCAxMzo0NToyMiAxOTk2ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgY2hlY2sgZm9yIGdjYyBzdHJlbmd0aC1yZWR1Y2UgYnVnLgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10KCUNoYW5nZWQgTGlzdEJveERpcmVjdG9yeSgpIHRvIHVzZSB0aGUgbmV3IERPUyBmaWxlIGZ1bmN0aW9ucy4KCgkqIFtjb250cm9scy9tZW51LmNdCglGaXhlZCBwYXJhbWV0ZXJzIGZvciBEZWxldGVNZW51KCkgY2FsbCBpbiBDaGFuZ2VNZW51KCkuCgoJKiBbZGVidWdnZXIvc3RhY2suY10KCUFsc28gZGlzcGxheSBjdXJyZW50IGZyYW1lIGluIGJhY2stdHJhY2UuCgoJKiBbZmlsZXMvZGlyZWN0b3J5LmNdIFtmaWxlcy9kb3NfZnMuY10gW2ZpbGVzL2RyaXZlLmNdIFtmaWxlcy9maWxlLmNdCglDb21wbGV0ZSByZXdyaXRlIG9mIHRoZSBET1MgZmlsZSBoYW5kbGluZy4KCUltcGxlbWVudGVkIHBlci10YXNrIGZpbGUgaGFuZGxlcy4KCVJlbW92ZWQgZGVmYXVsdCBaOiBkcml2ZTsgbmVlZHMgdG8gYmUgcHV0IGV4cGxpY2l0ZWx5IGluIHdpbmUuaW5pCglpZiBkZXNpcmVkLgoKCSogW2xvYWRlci9tb2R1bGUuY10KCUZpeGVkIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIExvYWRNb2R1bGUoKS4KCgkqIFtsb2FkZXIvdGFzay5jXQoJSW5pdGlhbGlzZSBQREIgZmlsZSBoYW5kbGUgdGFibGUgaW4gVEFTS19DcmVhdGVUYXNrKCkuCglDbG9zZSBmaWxlIGhhbmRsZXMgb24gdGFzayB0ZXJtaW5hdGlvbi4KCUltcGxlbWVudGVkIFNldEVycm9yTW9kZSgpLgoKCSogW21pc2MvbmV0d29yay5jXQoJRml4ZWQgV05ldEdldENvbm5lY3Rpb24oKSB0byB1c2UgR2V0RHJpdmVUeXBlKCkuCgoJKiBbbWlzYy94bWFsbG9jLmNdCglBZGRlZCBmdW5jdGlvbiB4c3RyZHVwKCkuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJTWFueSBjaGFuZ2VzIGZvciBuZXcgRE9TIGZpbGUgZnVuY3Rpb25zLgoKCSogW21pc2NlbXUvaW50ZXJydXB0cy5jXQoJTW92ZWQgRE9TX0dldEVxdWlwbWVudCgpIGZ1bmN0aW9uIGludG8gSU5UX0ludDExSGFuZGxlcigpLgoKCSogW3dpbmRvd3Mvd2luLmNdCglCdWcgZml4OiBjcmVhdGUgc3lzdGVtIG1lbnUgYmVmb3JlIHNlbmRpbmcgV01fTkNDUkVBVEUuCgoJKiBbKi8qLmNdCglSZXBsYWNlZCBzdHJjYXNlY21wIGFuZCBzdHJuY2FzZWNtcCBieSBsc3RyY21waSBhbmQgbHN0cm5jbXBpIGZvcgoJYmV0dGVyIHBvcnRhYmlsaXR5LgoKU2F0IEphbiAxMyAxNjoxMzowMiAxOTk2ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCUFkZGVkICd0eXBlZGVmIEhHTE9CQUwgR09CQUxIQU5ETEU7Jy4gIFRoaXMgaXMgbm90IHByZWNpc2VseSBpbiBsaW5lCgl3aXRoIHRoZSB0cnVlIHdpbmRvd3MgJ3R5cGVkZWYgSEFORExFIEdMT0JBTEhBTkRMRTsnLCBidXQgSSBiZWxpZXZlCglpdCBzaG91bGQgc3VmZmljZS4KCgkqIFtpbmNsdWRlL3dpbnNvY2suaF0KCUFkZGVkICcjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+JyBmb3IgdmFyaW91cyBkZWNsYXJhdGlvbnMuICAnI2lmZGVmJy1lZAoJb3V0IHNvbWUgb2xkIHN0eWxlIGludGVybmV0IGFkZHJlc3MgI2RlZmluZSdzLgoKCSogW2xvYWRlci90YXNrLmNdCglNYWRlIE1ha2VQcm9jSW5zdGFuY2UoKSByZXR1cm4gZmlyc3QgcGFyYW1ldGVyICNpZmRlZiBXSU5FTElCMzIuCglNYWRlIEZyZWVQcm9jSW5zdGFuY2UoKSBkbyBub3RoaW5nICNpZmRlZiBXSU5FTElCMzIuCgknI2lmZGVmJy1lZCBvdXQgVEFTS19BbGxvY1RodW5rKCksIGFzIGl0IHdhcyB1bnVzZWQgaW4gV0lORUxJQjMyLgoKCSogW2xpYnJhcnkvbWlzY3N0dWJzLmNdCglNYWRlIEdldFduZFByb2NFbnRyeTE2KCkgcmV0dXJuIEFDVElWQVRFQVBQX2NhbGxiYWNrKCkgd2hlbiBjYWxsZWQKCXdpdGggbmFtZT0iQWN0aXZhdGVBcHBQcm9jIi4gIFRoaXMgaGFyZGx5IHNlZW1zIGNvcnJlY3QsIGJ1dCBpdCdzIG15CgliZXN0IGd1ZXNzIGFzIHRvIGhvdyB0aGUgZW11bGF0b3IgcmVzcG9uZHMuCgpTYXQgSmFuICA2IDE3OjU3OjQ1IDE5OTYgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdW3dpbjMyL3Byb2Nlc3MuY10KCVdJTjMyX0dldFByb2NBZGRyZXNzLCBMb2FkTGlicmFyeUE6IG5ldyBmdW5jdGlvbnMKCgkqIFtpZjE2MzIvcmVsYXkzMi5jXQoJUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBSZW1vdmVkIGNvZGUgdG8gbG9hZCBQRSBETExzCgoJKiBbaW5jbHVkZS9wZV9pbWFnZS5oXVtpbmNsdWRlL3BlX2V4ZS5oXQoJc3RydWN0IHBlX2RhdGE6IG5ldyBmaWVsZHMgYmFzZV9hZGRyLGxvYWRfYWRkcix2bWFfc2l6ZSxwZV9yZWxvYwoJc3RydWN0IFBFX1JlbG9jX0Jsb2NrOiBuZXcgc3RydWN0dXJlCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJTU9EVUxFX1JlZ2lzdGVyTW9kdWxlOiBuZXcgZnVuY3Rpb24KCgkqIFtsb2FkZXIvcGVfaW1hZ2UuY10KCVBFX0ZpbmRFeHBvcnRlZEZ1bmN0aW9uLFBFX0dldFByb2NBZGRyZXNzOiBuZXcgZnVuY3Rpb25zCglmaXh1cF9pbXBvcnRzOiBleHBlY3Qgc3RydWN0IHdfZmlsZXMqIG5vdywgZmlsbCBkbGxzX3RvX2luaXQsCgkgICAgICAgICAgICAgICBsb2FkIFBFIERMTHMKCWRvX3JlbG9jYXRpb25zOiBuZXcgZnVuY3Rpb25zCgljYWxjX3ZtYV9zaXplOiByZW5hbWVkIGZyb20gZHVtcF90YWJsZQoJUEVfTG9hZEltYWdlOiB1c2UgbWFsbG9jIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgaW1hZ2UKCVBFX0luaXRETEw6IGV4cGVjdCBITU9EVUxFCglQRV9Jbml0aWFsaXplRExMczogbmV3IGZ1bmN0aW9uCgoJKiBbbG9hZGVyL3Rhc2suY10KCU5FX0luaXRpYWxpemVETExzOiBicmFuY2ggdG8gUEVfSW5pdGlhbGl6ZURMTHMgZm9yIFBFIG1vZHVsZXMKCUdldEV4ZVB0cjogQWNjZXB0IFBFIG1vZHVsZXMKCgkqIFttaXNjL2NvbW1kbGcuY10KCUZJTEVETEdfV01Db21tYW5kOiB1bnBhY2sgV0lOMzIgV01fQ09NTUFORCBhcHByb3ByaWF0ZWx5IGZvciBXaW5lTGliCgpUaHUgSmFuICA0IDExOjM2OjIxIDE5OTYgIE1hbmZyZWQgV2VpY2hlbCA8TWFuZnJlZC5XZWljaGVsQG1jaC5zbmkuZGU+CgoJKiBbbWlzYy9wb3J0LmNdCglOZXcgZmlsZSB3aXRoIHVzbGVlcCgpIGZ1bmN0aW9uIGZvciBTVlI0LgoKCSogW2NvbmZpZ3VyZS5pbl0KCUNoZWNrIGZvciB1c2xlZXAoKSBmdW5jdGlvbi4KClR1ZSBKYW4gMDIgMTQ6MDA6MDAgMTk5NiAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoKCSogW2lmMTYzMi90b29saGVscC5zcGVjXSBbaW5jbHVkZS90b29saGVscC5oXQoJICBbbWlzYy91c2VyLmNdIFt3aW5kb3dzL21lc3NhZ2UuY10KCUltcGxlbWVudCBUT09MSEVMUC44MCBUaW1lckNvdW50LiBGaXggR2V0VGlja0NvdW50LgoKCSogW3dpbnNvY2tldC5jXQoJRml4ZWQgRU5PRU5UIGVycm9yLgoKCSogW21pc2NlbXUvZHBtaS5jXQoJSW1wbGVtZW50IERQTUkgR2V0IFBhZ2UgU2l6ZSAoQVg9MDYwNCwgSU5UIDMxKQoKCSogW21lbW9yeS9nbG9iYWwuY10KCUltcGxlbWVudCBUT09MSEVMUC43MiBHZXRNZW1NYW5JbmZvLgoKTW9uIEphbiAgMiAxMDozMzowMCAxOTk2ICBUaG9tYXMgU2FuZGZvcmQgPHQuZC5nLnNhbmRmb3JkQHByZHMtZ3JuLmRlbW9uLmNvLnVrPgoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ2FsbFdpbmRvd1Byb2MoKSAtIFdoZW4gY2FsbGluZyBSRUxBWTMyX0NhbGxXaW5kb3dQcm9jLCBjaGVjawoJd2hldGhlciBsUGFyYW0gc2hvdWxkIGJlIGEgU0VHUFRSLCBhbmQgaWYgc28gY29udmVydCBpdCB0byBvbmUuCgoJKiBbaWYxNjMyL2dkaS5zcGVjXSBbaWYxNjMyL2tlcm5lbDMyLnNwZWNdIFtpZjE2MzIvdXNlcjMyLnNwZWNdCglOdW1lcm91cyBmdW5jdGlvbnMgYWRkZWQsIG1vc3RseSBjYWxscyB0byBvcmlnaW5hbCAod2luMTYpCiAJZnVuY3Rpb25zLiAgTm90ZSB0aGF0IHNvbWUgKG1hbnkpIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBub3QKIAlzdHJpY3RseSBjb3JyZWN0LCBidXQgd2l0aCB0aGVzZSBhZGRpdGlvbnMgZnJlZWNlbGwgd2lsbCBhdCBsZWFzdAogCWRpc3BsYXkgaXRzIG1haW4gd2luZG93IHRob3VnaCBpdCBpcyBnYXJibGVkLgoKCSogW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJQ29tcGxldGVseSByZXdyaXR0ZW4gLSBhbGwgV25kUHJvY3Mgbm93IGhhdmUgd2luMzIgdmVyc2lvbnMgdG8KCWhlbHAgd2l0aCB0aGUgbHBhcmFtIFNFR1BUUiBmaXggaW4gY2FsbGJhY2suYwoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0KCUxQVENTVFIgZGVmaW5lZC4KCgkqIFtpbmNsdWRlL3BlZXhlLmhdCglEZWZpbml0aW9uIG9mIFBFX0V4cG9ydF9EaXJlY3RvcnkgYW1lbmRlZC4KCgkqIFtpbmNsdWRlL3Jlc291cmNlMzIuaF0KCU5ldyBmaWxlLgoKCSogW2luY2x1ZGUvc3RhY2tmcmFtZS5oXQoJRGVmaW5pdGlvbiBvZiBNQUtFX1NFR1BUUiBtYWNybyAjaWZkZWYnZCBvdXQgYW5kIHJlcGxhY2VkIHdpdGgKCXByb3RvdHlwZSBmb3IgcmVwbGFjZW1lbnQgZnVuY3Rpb24gaW4gbWVtb3J5L3NlbGVjdG9yLmMgd2hpY2gKCWNhbiBvcGVyYXRlIG9uIGFueSBnaXZlbiBtZW1vcnkgYWRkcmVzcy4gVGhpcyBpcyBjdXJyZW50bHkKCXJlcXVpcmVkIGZvciB3aW4zMiBzdXBwb3J0LiBJdCBpcyBhIGRyZWFkZnVsIGNsdWRnZSwgYW5kIHdpbGwKCWNlcnRhaW5seSBzbG93IGRvd24gb3RoZXIgcHJvZ3JhbXMuIElmIHlvdSBhcmUgbm90IGludGVyZXN0ZWQKCWluIHdpbjMyIGRldmVsb3BtZW50IHlvdSBtYXkgd2lzaCB0byByZXZlcnNlIHRoaXMgcGF0Y2guCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglEZWZpbml0aW9uIG9mIFNXX1NIT1dERUZBVUxUIGFkZGVkLgoKCSogW2xvYWRlci9wZV9pbWFnZS5jXQoJRXh0ZW5zaXZlIHJld3JpdGVzIG9mIHhtbWFwKCkgZml4dXBfaW1wb3J0cygpLgoJUEVfTG9hZEltYWdlKCkgLSBpbml0aWFsaXNhdGlvbiBvZiBic3MgYWRkZWQsIGV4dHJhY3Rpb24gb2YKCW1vZHVsZSBuYW1lIGZpeGVkLCBpbml0aWFsaXNhdGlvbiBvZiBETEwgYWRkZWQuCglQRV9Jbml0RExMKCkgLSBub3cgZG9lcyBzb21ldGhpbmcuCglQRV9XaW4zMkNhbGxUb1N0YXJ0KCkgLSBpbml0aWFsaXNhdGlvbiBvZiBURUIgcG9pbnRlZCB0byBieQoJZnMgYWRkZWQuCglQRV9Jbml0VEVCKCkgY3JlYXRlZCB0byBwZXJmb3JtIFRFQiBpbml0aWFsaXNhdGlvbi4KCgkqIFttZW1vcnkvc2VsZWN0b3IuY10gCglOZXcgZnVuY3Rpb24gTUFLRV9TRUdQVFIoKSAtIHNlZSBpbmNsdWRlL3N0YWNrZnJhbWUuaCBhYm92ZS4KCgkqIFttaXNjL3VzZXIzMi5jXQoJVVNFUjMyX1JlZ2lzdGVyQ2xhc3NBKCksIENyZWF0ZVdpbmRvd0V4QSgpIG1lbW9yeSBhbGxvY2F0aW9uCgltZXRob2QgY2hhbmdlZC4gVGhpcyBpcyBwcm9iYWJseSBub3cgdW5uZWNlc3Nhcnkgd2l0aCB0aGUKCW5ldyBNQUtFX1NFR1BUUiBoYW5kbGluZyBjb2RlLgoJVVNFUjMyX0RlZlduZFByb2NBKCkgcmVtb3ZlZCB0byB3aW4zMi93aW5wcm9jcy5jCglVU0VSMzJfVHJhbnNsYXRlTWVzc2FnZSBhZGRlZC4KCgkqIFt0b29scy9idWlsZC5jXQoJaGFuZGxpbmcgb2Ygd2luMzIgc3BlYyBmaWxlcyBjaGFuZ2VkIHRvIHN1cHBvcnQgZ2NjMi42LlgKCXRoaXMgcmVxdWlyZXMgb3B0aW1pc2F0aW9ucyB0byBiZSBkaXNhYmxlZC4KCgkqIFt3aW4zMi9yZXNvdXJjZS5jXSBbd2luMzIvbmV3Zm5zLmNdIFt3aW4zMi9oZWFwLmNdIFt3aW4zMi93aW5wcm9jcy5jXQoJTmV3IGZpbGVzLgoKCSogW3dpbjMyL01ha2VmaWxlLmluXQoJTmV3IGZpbGVzIGhlYXAuYywgbmV3Zm5zLmMsIHJlc291cmNlLmMgYW5kIHdpbnByb2NzLmMgYWRkZWQgdG8gYnVpbGQuCgoJKiBbd2luMzIvZmlsZS5jXQoJTmV3IGZ1bmN0aW9uIFczMl9TZXRIYW5kbGVDb3VudC4KCgkqIFt3aW4zMi9pbml0LmNdCglXSU4zMl9HZXRNb2R1bGVIYW5kbGUoKSAtIG5vdyByZXR1cm5zIGhhbmRsZSBvZiBydW5uaW5nIHByb2Nlc3MKCWlmIGNhbGxlZCB3aXRoIE5VTEwuCglHZXRTdGFydHVwSW5mb0EoKSAtIHNldCBjYlJlc2VydmVkMiB0byAwLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJVmlydHVhbEFsbG9jKCkgLSBzZXQgbW1hcCgpIGZpbGUgcGFyYW1ldGVyIHRvIC0xIGluc3RlYWQgb2YgMCB0byBtYWtlCglpdCB3b3JrIHdpdGggRnJlZUJTRC4gQWxzbyBjaGVjayBmb3IgcmV0dXJuIHZhbHVlLiBSZW1vdmVkIGV4dHJhCglyZXR1cm4uCgoJKiBbd2luZG93cy93aW5wb3MuY10KCVNob3dXaW5kb3coKSAtIFNXX1NIT1dERUZBVUxUIGhhbmRsaW5nIGtsdWRnZWQgaW4uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNhdCBEZWMgMjMgMTg6MTU6NTkgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0gW01ha2VmaWxlLmluXSBbdG9vbHMvaW5zdGFsbC1zaF0KCU5ldyAnaW5zdGFsbCcgdGFyZ2V0IGluc3RhbGxzIFdpbmUgYmluYXJ5LCBsaWJyYXJ5IGFuZCBtYW4gcGFnZS4KCUxpYnJhcnkgaXMgbm93IG1vcmUgbG9naWNhbGx5IG5hbWVkIGxpYndpbmUuYS4KCVNwbGl0IHRvb2xraXQvIGRpcmVjdG9yeSBpbnRvIGxpYnJhcnkgKGZvciBsaWJyYXJ5IGNvZGUpIGFuZAoJbGlidGVzdCAoZm9yIHRlc3QgcHJvZ3JhbXMpLgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVF1aWNrIGhhY2sgdG8gcGFydGlhbGx5IHN1cHBvcnQgRU1fUEFTU1dPUkQgc3R5bGUgKGF2b2lkcwoJZGlzcGxheWluZyB5b3VyIHBhc3N3b3JkcyBvbiB0aGUgc2NyZWVuIHdoZW4gdGVzdGluZyBwcm9ncmFtcy4uLikKCgkqIFtjb25maWd1cmUuaW5dIFtjb250cm9scy9tZW51LmNdIFtpbmNsdWRlL3Jlc291cmNlLmhdCgkgIFttaXNjL2NvbW1kbGcuY10gW21pc2Mvb2xlMm5scy5jXSBbbWlzYy9zaGVsbC5jXSBbd2luZG93cy9tc2dib3guY10KCUxhbmd1YWdlIGlzIG5vdyBhIHJ1bi10aW1lIG9wdGlvbiAod2luZSAtbGFuZ3VhZ2UgeHgpLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJRHVtcCBzb21lIG1vcmUgZGVidWdnaW5nIGluZm8gb24gY3Jhc2guCgoJKiBbbWlzYy9wcm9maWxlLmNdCglPbmx5IGNvbnNpZGVyICc7JyBhcyBhIGNvbW1lbnQgaWYgaXQncyB0aGUgZmlyc3Qgbm9uLWJsYW5rCgljaGFyYWN0ZXIgb24gdGhlIGxpbmUuCgoJKiBbbWlzY2VtdS9kcG1pLmNdCglNb3JlIGRlYnVnZ2luZyBpbmZvIGZvciByZWFsLW1vZGUgY2FsbGJhY2suCgoJKiBbb2JqZWN0cy9nZGlvYmouY10KCVJld3JvdGUgRW51bU9iamVjdHMoKSB0byBkbyB0aGUgUmlnaHQgVGhpbmcuCgoJKiBbcmVzb3VyY2VzL3N5c3JlcypdCglOZXcgZGlyZWN0b3J5IGNvbnRhaW5pbmcgc3lzdGVtIHJlc291cmNlcy4KCkZyaSBEZWMgMjIgMTE6MjQ6MzkgR01UIDE5OTUgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW3dpbjMyL2ZpbGUuY10gW3dpbjMyL21lbW9yeS5jXQogICAgICAgIFVuaXh3YXJlIGRvZXNuJ3QgaGF2ZSBNQVBfQU5PTiBpZmRlZmVkIG91dCBmb3Igbm93LgoKCSogW21pc2MvZG9zX2ZzLmNdCiAgICAgICAgRE9TX0dldERvc0ZpbGVOYW1lIGRpZG4ndCB0cnVuY2F0ZSBwYXRocyBzdGFydGluZyAuLyBwcm9wZXJseS4KCgkqIFt0b29scy9idWlsZC5jXQoJUHJvZHVjZXMgYXNzZW1ibHkgY29kZSB0aGF0IHdvcmtzIHdpdGggdGhlIHVuaXh3YXJlIGFzc2VtYmxlci4KCldlZCBEZWMgMjAgMjI6MjI6MjkgKzAxMDAgMTk5NSAgTW9ydGVuIFdlbGluZGVyIDx0ZXJyYUBkaWt1LmRrPgoKCSogW21pc2NlbXUvaW5zdHIuY10KCUlOU1RSX0dldE9wZXJhbmRBZGRyOiAxNi1iaXQgYWRkcmVzc2VzIHNob3VsZCBiZSBtYXNrZWQgdG8gMTYgYml0cy4KCgkqIFttaXNjL2Rvc19mcy5jXQoJRE9TX3JlYWRkaXIgc2hvdWxkIGFsd2F5cyByZXR1cm4gZGlyZWN0b3JpZXMsIGV2ZW4gaWYgdGhleSBkb24ndAogCW1hdGNoIHRoZSBmaWxlIG5hbWUgbWFzay4KClR1ZSBEZWMgMTkgMTg6MDA6MDAgMTk5NSAgVXdlIEJvbm5lcyA8Ym9uQGVsZWt0cm9uLmlrcC5waHlzaWsudGgtZGFybXN0YWR0LmRlPgoJCgkqIFttaXNjL2V4ZWMuY10KCUdpdmUgYXJndW1lbnRzIHRvIHdpbmhlbHAuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJSW1wbGVtZW50ZWQgSW50ZXJydXB0IDIxIEFYPTZDMDAgRVhURU5ERUQgT1BFTi9DUkVBVEUuCglDcmVhdGVkIGZ1bmN0aW9uIEV4dGVuZGVkT3BlbkNyZWF0ZUZpbGUuCglHaXZlIGZvciBzb21lIFdpbmRvd3M5NSBpbnRlcnJ1cHRzIHRoZSByZXR1cm4gdmFsdWUgJ25vdAoJaW1wbGVtZW50ZWQnLgoKU3VuIERlYyAxNyAxNjo1MTo1NiBFU1QgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KCU1vdmVkIHRoZSB0eXBlZGVmcyBmb3IgU1lTVEVNVElNRSBhbmQgTFBTWVNURU1USU1FIGZyb20KIAlpbmNsdWRlL2tlcm5lbDMyLmggdG8gaW5jbHVkZS93aW5kb3dzLmggYW5kIGRlY2xhcmVkIHRoZSBuZXcgV2luMzIKIAlBUEkgZnVuY3Rpb25zIFNsZWVwKCksIEdldExvY2FsVGltZSgpLCBhbmQgR2V0U3lzdGVtVGltZSgpLgogIAlSZWRlZmluZWQgSU5GSU5JVEUgYXMgMHhGRkZGRkZGRiBpZiBXSU5FTElCMzIuCgoJKiBbcmMvcmMgKG5ldyBmaWxlKV0KCUNyZWF0ZWQgdGhlIHNoZWxsIHNjcmlwdCAncmMnLCB3aGljaCBzaG91bGQgc2ltcGxpZnkgcmVzb3VyY2UKIAljb21waWxhdGlvbi4KCgkqIFt3aW4zMi9lbnZpcm9ubWVudC5jXQoJS2x1ZGdlZCBhcm91bmQgYW4gdW5kZWZpbmVkIHJlZmVyZW5jZSB0byB3aW5lX2ZpbGVzLiAgVGhpcyBjaGFuZ2UKIAlzaG91bGQgYmUgZml4ZWQgc29tZSB0aW1lLgoKCSogW3dpbjMyL3RpbWUuY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXQoJQWRkZWQgdGhlIGZ1bmN0aW9ucyBHZXRTeXN0ZW1UaW1lKCksIGFuZCBTbGVlcCgpLgoKCSogW21pc2NlbXUvaW50MjEuY10KCVJlbmFtZWQgc3RhdGljIGZ1bmN0aW9uIEdldFN5c3RlbVRpbWUgdG8gSU5UMjFfR2V0U3lzdGVtVGltZSB0bwogCWF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBBUEkgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZS4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglBZGRlZCB0aGUgU1BGTVQgZGVmaW5pdGlvbiBmb3IgcHJpbnRmIHN0YXRlbWVudHMuCgoJKiBbbWlzYy9zaGVsbC5jXSBbaW5jbHVkZS9zaGVsbC5oXQoJQ2hhbmdlZCBFUlJPUl8qIGRlZmluZXMgdG8gU0hFTExfRVJST1JfKiwgYXMgdGhleSB3ZXJlIGNvbmZsaWN0aW5nCiAJd2l0aCB0aGUgb25lcyBpbiBpbmNsdWRlL3dpbmVycm9yLmguICBUaGV5IHNob3VsZCBwcm9iYWJseSB1c2UgdGhlCiAJdmVyc2lvbnMgaW4gd2luZXJyb3IuaCwgYnV0IEknbSBub3QgY2VydGFpbiwgYW5kIHRoYXQgY2FuIGJlIGRvbmUKIAlsYXRlci4KCgkqIFt3aW5kb3dzL21kaS5jXQoJVHJhbnNsYXRlZCBXTV9NRElBQ1RJVkFURSg/LChMT2h3bmQsSElod25kKSkgbWVzc2FnZXMgdG8KIAlXTV9NRElBQ1RJVkFURShISWh3bmQsTE9od25kKSBmb3IgV0lORUxJQjMyLiAgVGhlID8gcGFyYW1ldGVyCiAJKGJvb2xlYW4pIHdhcyBkaXNjYXJkZWQgd2l0aCB0aGlzIHRyYW5zbGF0aW9uLiAgVHJhbnNsYXRlZCBoYW5kbGVyCiAJb2YgV01fTURJU0VUTUVOVShyZWYsKGxvSE1FTlUsaGlITUVOVSkpIHRvIGhhbmRsZQogCVdNX01ESVNFVE1FTlUobG9ITUVOVSwgaGlITUVOVSkgbWVzc2FnZXMgaW4gV0lORUxJQjMyIChyZWYgYXNzdW1lZAogCWZhbHNlLCBjYWxsIERyYXdNZW51QmFyKCkgaWYgZGVzaXJlZCkuCgoJKiBbKi8qXQoJR2VuZXJhbCBleHBsaWNpdCBjYXN0cyBhbmQgbW9yZSByaWdpZCB0eXBpbmcgdG8gcmVtb3ZlIHdhcm5pbmdzLgoKCSogW2luY2x1ZGUvd2lucG9zLmhdIFt3aW5kb3dzL3dpbnBvcy5jXQoJQ2hhbmdlZCByZXR1cm4gdHlwZSBvZiBXSU5QT1NfQ2hhbmdlQWN0aXZlV2luZG93IHRvIEJPT0wuCgoJKiBbaW5jbHVkZS9jb21tZGxnLmhdIFttaXNjL2NvbW1kbGcuY10KCUFkZGVkIHByb3RvdHlwZXMgZm9yIENob29zZUNvbG9yKCksIENvbW1EbGdFeHRlbmRlZEVycm9yKCksCiAJRmluZFRleHQoKSBHZXRGaWxlVGl0bGUoKSwgR2V0T3BlbkZpbGVOYW1lKCksIEdldFNhdmVGaWxlTmFtZSgpLAogCVByaW50RGxnLCBhbmQgUmVwbGFjZVRleHQoKS4KCVJlbmFtZWQgdGhlIENvbW1EbGdFeHRlbmRFcnJvcigpIGZ1bmN0aW9uIHRvIENvbW1EbGdFeHRlbmRlZEVycm9yKCkuCglNYWRlIEdldEZpbGVUaXRsZSByZXR1cm4gYSBzaG9ydCwgYXMgcGVyIHRoZSBBUEkgZGVmaW5pdGlvbi4KCgkqIFtNYWtlZmlsZS5pbl0KCUFkZGVkIGxpbmUgdG8gY2xlYW4gYW5kIGRpc3RjbGVhbiB0aGF0IHJlbW92ZXMgdGVtcG9yYXJpZXMgZnJvbQogCXRoZSBpbmNsdWRlIGRpcmVjdG9yeS4KClNhdCBEZWMgMTYgMTk6Mzk6MTQgTUVUIDE5OTUgIFN0ZWZmZW4gTW9lbGxlciA8c21vZTAwMjRAcnoudW5pLWhpbGRlc2hlaW0uZGU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJQWxtb3N0IHJld3JvdGUgRURJVF9HZXRMaW5lTXNnLgoKU2F0IERlYyAxNiAxMzo1MTo0OCBNU1QgMTk5NSAgQW5kcmV3IFRheWxvciA8YXRheWxvckBjYWR2aXNpb24uY29tPgoKCSogW3dpbmRvd3MvbWRpLmNdCglGaXhlZCBNRElUaWxlKCkgYnVnIHRoYXQgb2NjdXJzIHdoZW4gMCB3aW5kb3dzIGFyZSBwcmVzZW50IG9yIGFsbAoJd2luZG93cyBhcmUgbWluaW1pemVkLgoKV2VkIERlYyAxMiAyMzozMDowMCAxOTk1ICBVd2UgQm9ubmVzIDxib25AZWxla3Ryb24uaWtwLnBoeXNpay50aC1kYXJtc3RhZHQuZGU+CgoJKiBbbWlzYy9wcm9maWxlLmNdCiAgICAgICAgVHJ5IGhhcmRlciB0byBmaW5kIGZpbGVzLCBlc3BlY2lhbGx5IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KCUxvb2sgaW4gJEhPTUUvLndpbmUgdG9vIGFuZCBjcmVhdGUgaXQgdGhlcmUgaWYgaXQgaXNuJ3QgZm91bmQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1vbiBEZWMgMTEgMTk6MDg6NTUgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW21pc2MvbHN0ci5jXQoJUmVwbGFjZWQgd2luZV9zdHJuY3B5KCkgYnkgYSAzMi1iaXQgdmVyc2lvbiBvZiBsc3RyY3B5bigpLCBzaW5jZQogCXRoZXkgZG8gdGhlIHNhbWUgam9iLgoKCSogW3Rvb2xzL2J1aWxkLmNdCglGaXhlZCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZ2NjCgl2ZXJzaW9ucyB1bmRlciAyLjcuIERvZXNuJ3QgbWVhbiBpdCB3aWxsIHJ1biBPSyB0aG91Z2guLi4KClNhdCBEZWMgMDkgMTM6MjI6NTggMTk5NSAgQ2FtZXJvbiBIZWlkZSAgPGhlaWRlQGVlLnVhbGJlcnRhLmNhPgoKCSogW2luY2x1ZGUva2VybmVsMzIuaF0gW2luY2x1ZGUvd2luZXJyb3IuaF0KCUFkZGVkIGZpbGUgYXR0cmlidXRlIGRlZmluaXRpb25zIGFuZCBtb3JlIGVycm9yIGNvZGVzLgoKCSogW3dpbjMyL2Vycm9yLmNdCglBZGRlZCBzb21lIHJ1ZGltZW50YXJ5IGVycm5vLXRvLVdpbjMyIGVycm9yIGNvbnZlcnNpb24KCWNvZGUuCgoJKiBbd2luMzIvZmlsZS5jXQoJQWRkZWQgdG8gR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUsIGZpbGxlZCBpbiBzb21lIGtub3duCgllcnJvciBjb2RlcywgYW5kIHN3aXRjaGVkIHRvIGRwcmludGZfd2luMzIuCgoJKiBbd2luMzIvdGltZS5jXQoJQWRkZWQgR2V0TG9jYWxUaW1lLgoKRnJpIERlYyAgOCAxNDozNzozOSAxOTk1ICBKaW0gUGV0ZXJzb24gPGpzcGV0ZXJAYmlyY2guZWUudnQuZWR1PgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglDb252ZXJ0ZWQgZnVuY3Rpb25zIG9mIHRoZSB0eXBlIExPTkcgXyhIV05ELFdPUkQsTE9ORykgdG8gdGhlIHR5cGUKCUxSRVNVTFQgXyhIV05ELFdQQVJBTSxMUEFSQU0pIHdoZXJlIG5lZWRlZC4KCgkqIFtpbmNsdWRlL2xpYnJlcy5oXQoJUmVzdHJ1Y3R1cmVkIGxpYnJlcyBwcm90b3R5cGVzIHRvIGNsb3NlciBtYXRjaCB0aGUgd2luZG93cyBBUEkuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglDaGFuZ2VkIHNldmVyYWwgQVBJIHByb3RvdHlwZXMnIHBhcmFtZXRlciB0eXBlcyBmcm9tICdzaG9ydCcgdG8gSU5ULAoJd2hpY2ggaXMgI2RlZmluZWQgYXMgc2hvcnQgaW4gdGhlIGVtdWxhdG9yLCBidXQgaXMgYSBub3JtYWwgaW50IGluCglXSU5FTElCMzIuICBBbHNvIGNoYW5nZWQgU0VHUFRSIGZyb20gRFdPUkQgdG8gdm9pZCogd2hlbiBXSU5FTElCMzIuCgkoVGhpcyBjcmVhdGVzIGEgbG90IG9mIHdhcm5pbmdzIGF0IGxpYnJhcnktY29tcGlsZSB0aW1lLCBidXQgbGVzcwoJd2FybmluZ3MgYXQgYXBwLWNvbXBpbGUgdGltZS4gIEknbGwgcmVtb3ZlIHRoZSB3YXJuaW5ncyBzb29uLikKCgkqIFtsb2FkZXIvcmVzb3VyY2UuY10KCUZpeGVkIHBhcmFtZXRlciBtaXNtYXRjaCBpbiBjYWxsIHRvIExJQlJFU19GaW5kUmVzb3VyY2UoKS4gIENoYW5nZWQKCXZhcmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBMSUJSRVNfKiBBUEkgZnVuY3Rpb25zLgoKCSogW2xvYWRlci9zaWduYWwuY10KCURlbGV0ZWQgbG9jYWwgJ2knIGZyb20gd2luX2ZhdWx0KCksIHNpbmNlIGl0IHdhcyB1bnVzZWQuCgoJKiBbb2JqZWN0cy9iaXRibHQuY10KCU1pcnJvcmVkIGNoYW5nZXMgdG8gaW5jbHVkZS93aW5kb3dzLmggbWVudGlvbmVkIGFib3ZlLgoKCSogW3Rvb2xraXQvaGVsbG8zLmNdCglDaGFuZ2VkIExvYWRNZW51SW5kaXJlY3QoKSBjYWxsIHRvIExvYWRNZW51KCkgdG8gdGVzdCB0aGUgbmV3CglyZXNvdXJjZSByZWdpc3RyYXRpb24gdGVjaG5pcXVlLgoKCSogW3Rvb2xraXQvbGlicmVzLmNdCglSZW1vdmVkIGRlZmluaXRpb24gb2YgJ3N0cnVjdCByZXNvdXJjZScgYW5kIGZpeGVkIGJ1Z3MgaW4gdGhlIHJlc291cmNlCglpbXBsZW1lbnRhdGlvbi4gIEltcGxlbWVudGVkIExJQlJFU19GaW5kUmVzb3VyY2UuCgoJKiBbd2luZG93cy9ncmFwaGljcy5jXQoJTWlycm9yZWQgY2hhbmdlcyB0byBpbmNsdWRlL3dpbmRvd3MuaCBtZW50aW9uZWQgYWJvdmUuCgpUaHUgRGVjICA3IDIzOjE1OjU2IDE5OTUgICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbY29udHJvbHMvZWRpdC5jXQoJTE9DQUxfSGVhcEV4aXN0czogQ2hhbmdlZCBwYXJhbWV0ZXIgdG8gSEFORExFLiBGb3IgV2luZUxpYiwgcmV0dXJuIHRydWUKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglDcmVhdGVMaXN0Qm94U3RydWN0OiBJbml0aWFsaXplIEhlYXBTZWwgdG8gMCBmb3IgV2luZUxpYgoKCSogW2luY2x1ZGUvbGlzdGJveC5oXQoJY2hhbmdlIEhlYXBTZWwgZnJvbSBXT1JEIHRvIEhBTkRMRQoKCSogW2luY2x1ZGUvcmVzb3VyY2UuaF1bcmMvd2luZXJjLmNdCglzdHJ1Y3QgUmVzb3VyY2VUYWJsZTogcmVtb3ZlZAoJc3RydWN0IHJlc291cmNlOiBtb3ZlZCB0byBoZWFkZXIgZmlsZQoJYXV0b3JlZ2lzdGVyIHJlc291cmNlcyBpZiBzdXBwb3J0ZWQgYnkgY29tcGlsZXIKCgkqIFttZW1vcnkvbG9jYWwuaF0KCUxPQ0FMX0dldEhlYXA6IGV4cGVjdCBIQU5ETEUgcmF0aGVyIHRoYW4gV09SRAoJCgkqIFt0b29sa2l0L01ha2VmaWxlLmluXQoJQWRkIEFMTENGTEFHUyB0byBtYWtlIGhlbGxvMwoKCSogW3Rvb2xraXQvaGVhcC5jXQoJTG9jYWxGcmVlLCBIRUFQX0ZyZWU6IGhhbmRsZSAwIHBhcmFtZXRlciBncmFjZWZ1bGx5CgpXZWQgRGVjIDA2IDE1OjM0OjIzIDE5OTUgIEdyZWcgQ29vcGVyIDxjb29wZXJAaW1hLWluYy5jb20+CgoJKiBbbWlzYy93aW5zb2NrZXQuY10KCUZpeGVkIHRoZSBtc2dzbmQgYW5kIG1zZ3JjdiBlcnJvcnMgdGhhdCB3aW5zb2NrIHByb2dyYW1zIGdldC4KCldlZCBEZWMgMDYgMTI6NDc6MjMgTUVUIDE5OTUgU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9AZG5zLnVmc2lhLmFjLmJlPgoJCgkqIFtpZjE2MzIva2VybmVsLnNwZWNdCglGaXhlZCBfaHJlYWQgYW5kIF9od3JpdGUgcmV0dXJuIHR5cGUKCgkqIFtpZjE2MzIvcmVsYXkzMi5jXSBbbG9hZGVyL3BlX2ltYWdlLmNdCglIYWNrZWQgbG9hZGluZyBvZiBQRS1kbGwncyBpbgoKCSogW3dpbjMyL2FkdmFwaS5jXQoJQWRkZWQgc3R1YnMgZm9yIFJlZ0NyZWF0ZUtleUV4LCBSZWdTZXRWYWx1ZUV4LCBSZWdRdWVyeVZhbHVlRXgKCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCBzdHVicyBmb3IgT3BlbkZpbGVNYXBwaW5nLCBDcmVhdGVGaWxlTWFwcGluZywgTWFwVmlld09mRmlsZUV4CgoJKiBbd2luMzIvcHJvY2Vzcy5jXQoJQWRkZWQgc3R1YnMgZm9yIENyZWF0ZU11dGV4QSwgUmVsZWFzZU11dGV4LCBDcmVhdGVFdmVudEEsCglXYWl0Rm9yU2luZ2xlT2JqZWN0LCBEdXBsaWNhdGVIYW5kbGUsIEdldEN1cnJlbnRQcm9jZXNzCgkKTW9uIERlYyAwNCAxMzowNjozNyAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbaW5jbHVkZS93aW5lLmhdIFttaXNjL2xzdHIuY10KCURlZmluZSB3aW5lX3N0cm5jcHkoKS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBwYWQgdGhlIGJ1ZmZlciB3aXRoIAoJemVyb2VzIGxpa2UgR05VIHN0cm5jcHkoKSwgd2hpY2ggbWlnaHQgYnJlYWsgc29tZSBXaW5kb3dzIHByb2dyYW1zCgl0aGF0IHBhc3MgYm9ndXMgc2l6ZSBhcmd1bWVudHMuCgoJKiBbbG9hZGVyL21vZHVsZS5jXTogR2V0TW9kdWxlRmlsZU5hbWUoKSwKCVttaXNjL2NvbW1kbGcuY106IEdldEZpbGVUaXRsZSgpLAoJW21pc2Mva2V5Ym9hcmQuY10sIFttaXNjL2xzdHIuY106IGxzdHJjcHluKCksCglbbWlzYy9vbGUybmxzLmNdLCBbbWlzYy9wcm9maWxlLmNdLCBbbXVsdGltZWRpYS9tY2lzdHJpbmcuY10sCglbbXVsdGltZWRpYS9tbXN5c3RlbS5jXSwgW29iamVjdHMvZm9udC5jXToKCVVzZSB3aW5lX3N0cm5jcHkoKSB3aGVyZSBzdHJpbmdzIGFyZSByZXR1cm5lZCB0byBXaW5kb3dzIHByb2dyYW1zLgoJCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglQbGF5TWV0YWZpbGUoKTogQ2xlYXIgdGhlIGhhbmRsZSB0YWJsZSBiZWZvcmUgdXNpbmcgaXQuCgoJKiBbbWlzYy9zaGVsbC5jXSBbbWlzYy9tYWluLmNdCglSZW5hbWUgU0hFTExfUmVnQ2hlY2tGb3JSb290KCkgdG8gU0hFTExfSW5pdCgpIGFuZCBjYWxsIGl0IGZyb20gbWFpbigpLgoJCgkqIFttaXNjL3Byb2ZpbGUuY10KCWxvYWQoKTogTmVlZCB0byBoYW5kbGUgY29tbWVudHMuCgkKCSogW3Rvb2xraXQvbGlicmVzLmNdCglNYWtlIGl0IGNvbXBpbGUuCgkKCSogW3dpbmRvd3Mvbm9uY2xpZW50LmNdCglVc2UgTUFLRV9TRUdQVFIgbWFjcm8gaW4gdHdvIHBsYWNlcyB3aGVyZSBhIHVzZXIgaGVhcCBibG9jayB1c2VkCgl0byBiZSBhbGxvY2F0ZWQgaW5zdGVhZC4KClNhdCBEZWMgMDIgMTY6NDM6NDMgMTk5NSBSYW1vbiBHYXJjaWEgPHJhbW9uQGllMy5jbHVicy5ldHNpdC51cG0uZXM+CgoJKiBbd2luZG93cy93aW5wb3MuY10KCUluIGZ1bmN0aW9uIFNldFdpbmRvd1BvczogZG8gbm90IHJlZHJhdyB0aGUgcGFyZW50IG9mCglhIHdpbmRvdyBpZiB0aGUgc3BlY2lmaWVkIHdpbmRvdyBpcyBwbGFjZWQgb24gdGhlIHRvcC4KCVRoaXMgYXZvaWRzIHRoYXQgU2hvd1dpbmRvdyhod25kLDEpIGhpZGVzIGh3bmQgaW5zdGVhZAoJb2Ygc2hvd2luZyBpdC4KClNhdCBEZWMgMDIgMTE6MDA6MDAgMTk5NSBBbGV4IEtvcm9ia2EgPGFsZXhAcGhtMzAucGhhcm0uc3VueXNiLmVkdT4KCgkqIFt3aW5kb3dzL3Njcm9sbC5jXQoJTm93IGl0IGNhbiBzY3JvbGwgY2hpbGRyZW4gYWxvbmcgd2l0aCB0aGUgY2xpZW50IHJlZ2lvbiBvZiBwYXJlbnQgCiAgICAgICAgd2luZG93LiBUcmllZCB0byBvcHRpbWl6ZSB1cGRhdGUgcmVnaW9uIGNhbGN1bGF0aW9uLiAKCgkqIFt3aW5kb3dzL21kaS5jXQoJU2Nyb2xsQ2hpbGRyZW4gZnVuY3Rpb24sIG1vcmUgb3RoZXIgZmVhdHVyZXMgYWRkZWQuIEJhc2ljYWxseQoJYSByZXdyaXRlLgoKCSogW3dpbmRvd3Mvd2lucG9zLmNdIFt3aW5kb3dzL2ZvY3VzLmNdCglSZWltcGxlbWVudGVkIHdpbmRvdyBhY3RpdmF0aW9uIGFuZCBmb2N1cyBoYW5kbGluZy4KCgkqIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJQWRkZWQgbmV3IGZsYWcgV0lOX05DQUNUSVZBVEVELgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbbG9hZGVyL3Rhc2suY10KCVNtYWxsIGNoYW5nZXMgKHRvIG1haW50YWluIGxpbmtlZCBsaXN0IG9mIG1lc3NhZ2UgcXVldWVzKS4KCldlZCBOb3YgMjkgMTU6NTE6NDggMTk5NSAgRGFuaWVsIFNjaGVwbGVyICA8ZGFuaWVsQHNoZXAxMy53dXN0bC5lZHU+CgoJKiBbaW5jbHVkZS9vcHRpb25zLmhdIFttaXNjL21haW4uY10gW3dpbmRvd3MvZGVmd25kLmNdCgkgIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXSBbd2luZG93cy93aW4uY10gW1dpbmUubWFuXQoJSW1wbGVtZW50ZWQgYSAtbWFuYWdlZCBvcHRpb24gdG8gcmVwbGFjZSB0aGUgc3RhbmRhcmQgV2luZG93cwoJZnJhbWUgb2YgdG9wLWxldmVsIHdpbmRvd3Mgd2l0aCB0aGUgd2luZG93IG1hbmFnZXIncyBkZWNvcmF0aW9ucy4KCUlmIGEgdG9wLWxldmVsIHdpbmRvdyBtYWtlcyBpdHMgb3duIGZyYW1lLCB0aGlzIHdpbGwgc3RpbGwgc2hvdwoJdXAsIGluc2lkZSB0aGUgd2luZG93IG1hbmFnZXIgZGVjb3JhdGlvbnMgKEkgYmVsaWV2ZSBjdGwzZHYyLmRsbAoJd291bGQgZG8gdGhpcywgYWx0aG91Z2ggSSBjYW4ndCB0ZXN0IHRoaXMpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUdWUgTm92IDIxIDE4OjQ5OjEwIDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtjb25maWd1cmUuaW5dIFtNYWtlZmlsZV0gW21pc2MvZG9zX2ZzLmNdCglHb3QgcmlkIG9mIGF1dG9jb25mLmggZmlsZS4KCgkqIFtkZWJ1Z2dlci9kYmcueV0KCU1vcmUgbG9naWNhbCBiZWhhdmlvciB1cG9uIHN5bnRheCBlcnJvcnMuCgoJKiBbaW5jbHVkZS9ob29rLmhdIFt3aW5kb3dzL2hvb2suY10KCUNoYW5nZWQgaG9vayBzdHJ1Y3R1cmUgYW5kIHJld3JvdGUgbW9zdCBvZiB0aGUgaG9vayBmdW5jdGlvbnMgZm9yCgliZXR0ZXIgY29tcGF0aWJpbGl0eSwgYmFzZWQgb24gaW52ZXN0aWdhdGlvbnMgYnkgQWxleCBLb3JvYmthLgoKCSogW2luY2x1ZGUvbWVzc2FnZS5oXSBbd2luZG93cy9tZXNzYWdlLmNdCglBZGRlZCBob29rcyB0byBtZXNzYWdlIHF1ZXVlIHN0cnVjdHVyZSBhbmQgbWFkZSB0aGUgc3RydWN0dXJlCglsYXlvdXQgV2luZG93cy1jb21wYXRpYmxlLgoJQWRkZWQgc3VwcG9ydCBmb3IgV0hfTU9VU0UsIFdIX0tFWUJPQVJELCBXSF9IQVJEV0FSRSBhbmQKCVdIX0pPVVJOQUxSRUNPUkQgaG9va3MuCgoJKiBbbWlzYy9tYWluLmNdCglBZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9uIGZvciBjaGFuZ2luZyB0aGUgbGFuZ3VhZ2UgYXQgcnVuLXRpbWUKIAkobm90IGltcGxlbWVudGVkIHlldCksIGJhc2VkIG9uIGEgc3VnZ2VzdGlvbiBmcm9tIE1pY2hhZWwgUGF0cmEuCgoJKiBbb2JqZWN0cy9jdXJzb3JpY29uLmNdCglGaXhlZCBzaWxseSBTRUdQVFIgYnVnIGluIER1bXBJY29uKCkuCgpNb24gTm92IDIwIDIyOjIyOjIyIDE5OTUgIEFsZXggS29yb2JrYSA8YWxleEBwaG0zMC5waGFybS5zdW55c2IuZWR1PgoKCSogW2NvbnRyb2xzL2xpc3Rib3guY10gW2NvbnRyb2xzL2NvbWJvLmNdIFtpbmNsdWRlL2xpc3Rib3guaF0KCVBhcnRpYWwgaW1wbGVtZW50YWlvbiBvZiBMQlNfRVhURU5ERURTRUwgc3R5bGUsCgl5ZXQgbW9yZSB1cGRhdGVzIGZvciBkcmFnICYgZHJvcCBzdXBwb3J0LiBOb3cgd29ya3MuCgoJKiBbd2luZG93cy9kZWZ3bmQuY10KCU1vcmUgbWVzc2FnZSBoYW5kbGVycy4KCgkqIFt3aW5kb3dzL3dpbi5jXQoJRHJhZ09iamVjdCwgRHJhZ0RldGVjdCwgQW55UG9wdXAgZnVuY3Rpb25zLiAKCgkqIFtjb250cm9scy9saXN0Ym94LmNdCglNb3JlIGtsdWRneSBmaXhlcyAoV01fLi4uVE9JVEVNLCBldGMuKS4KCgkqIFtvYmplY3RzL2N1cnNvcmljb24uY10gW29iamVjdHMvb2VtYml0bWFwLmNdCglJY29uVG9DdXJzb3Igc2tlbGV0b24sIHBhdGNoIGZvciBPQk1fTG9hZEN1cnNvckljb24gdG8gaGFuZGxlIG5ldwoJY3Vyc29yLgoKCSogW2luY2x1ZGUvYml0bWFwcy9vY3IqXQoJTmV3IE9FTSBjdXJzb3JzLgoKTW9uIE5vdiAyMCAxMTowNToyMCBFU1QgMTk5NSAgSmltIFBldGVyc29uIDxqc3BldGVyQGJpcmNoLmVlLnZ0LmVkdT4KCgkqIFt0b29sa2l0L2hlYXAuY10KCVN3YXBwZWQgZmxhZ3MgYW5kIHNpemUgYXJndW1lbnRzIHRvIExvY2FsUmVhbGxvYyBhcyBwZXIgY2hhbmdlcyBpbgoJbWVtb3J5L2xvY2FsLmMgYnkgV2lsbGlhbSBNYWdybyBpbiBwcmV2aW91cyByZWxlYXNlLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCVJlaW5zdGF0ZWQgdGhlICNkZWZpbmUncyBmb3IgJ21pbicgYW5kICdtYXgnLCBzaW5jZSB0aGV5J3JlIHBhcnQgb2YKCXRoZSBXaW5kb3dzIEFQSS4gIEkgcmVhbGx5IGRvbid0IHRoaW5rIGl0J3MgYSB3aXNlIGlkZWEsIHNvIEkgcHV0CglhICcjaWZuZGVmIERPTlRfREVGSU5FX21pbl9BTkRfbWF4JyBhcm91bmQgdGhlbS4gIEkgdGhpbmsgdGhlIGFjdHVhbAoJV0lORSBjb2RlIHNob3VsZCBuZXZlciB1c2UgdGhlc2UgKGl0IHNob3VsZCB1c2UgJ01JTicgYW5kICdNQVgnCglpbnN0ZWFkKS4KCgkqIFtsb2FkZXIvKl0KCVB1dCAnI2lmbmRlZiBXSU5FTElCJyBhcm91bmQgbWFueSB0aGluZ3MgdGhhdCBXSU5FbGliIHNob3VsZCBub3QgbmVlZC4KCgkqIFtjb250cm9scy9lZGl0LmNdCglUb29rIG91dCBtYW55ICcjaWYgZGVmaW5lZChXSU5FTElCKScgc2VjdGlvbnMgd2l0aCB0aGUgYXNzb2NpYXRlZAoJY29tbWVudCAndGVtcG9yYXJ5IGZpeCwgdW50aWwgTG9jYWwgbWVtb3J5IGlzIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBpbgoJV0lORUxJQicsIHNpbmNlIHRoZSBlZmZlY3RpdmUgdHJhbnNsYXRpb25zIGFyZSBub3cgaW4gCgl0b29sa2l0L21pc2NzdHVicy5jLgoJVG9vayBvdXQgdGhlICNpZm5kZWYncyBJIHB1dCBpbiBFRElUX0NsZWFyVGV4dC4gIFdob2V2ZXIgbW9kaWZpZWQgdGhpcwoJZmlsZSBmaXhlZCAob3IgYXQgbGVhc3QgcG9zdHBvbmVkKSB0aGUgYnVnIEkgaGFkIGVuY291bnRlcmVkLgoKCSogW2xvYWRlci90YXNrLmNdCglQdXQgYW4gI2lmZGVmIGluIFRBU0tfQ3JlYXRlVGFzaygpIHRoYXQgaGFyZHdpcmVzIHRoZSBjdXJyZW50IGRyaXZlIHRvCglDOiAgVGhpcyB3aWxsIHByb2JhYmx5IGNhdXNlIGEgbG90IG9mIHRyb3VibGUgaWYgdGhpcyBjaGFuZ2UgaXMKCWZvcmdvdHRlbiBpbiB0aGUgZnV0dXJlLCBidXQgaXQgd2lsbCBsZXQgdGhpbmdzIGxpa2UgdGhlIE9wZW5GaWxlTmFtZQoJZGlhbG9nIHdvcmsgZm9yIG5vdy4KCgkqIFt0b29sa2l0L2xpYnJlcy5jXSBbdG9vbGtpdC9NYWtlZmlsZS5pbl0gW3Rvb2xraXQvTWFrZWZpbGVdCgkgIFtpbmNsdWRlL2xpYnJlcy5oXQoJTWFkZSBuZXcgbGlicmVzLmMgZmlsZSwgd2hpY2ggd2lsbCBjb250YWluIGZ1bmN0aW9ucyBmb3Igc3VwcG9ydGluZwoJYWNjZXNzaW5nIHJlc291cmNlcyBieSBuYW1lIGluIFdJTkVsaWIuICAnd2luZXJjJyB3aWxsIG5lZWQgdG8gYmUKCWNoYW5nZWQuCgoJKiBbdG9vbGtpdC9oZWFwLmNdCglSZWZpbmVkIG1lbW9yeSByb3V0aW5lcyB0byBhbGxvdyBmb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiBMb2NhbEFsbG9jCglhbmQgR2xvYmFsQWxsb2MgYW5kIGJldHdlZW4gTG9jYWxTaXplIGFuZCBHbG9iYWxTaXplLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXSBbaW5jbHVkZS93aW5kb3dzLmhdCglEZWZpbmVkIHRoZSBHZXRDdXJyZW50VGltZSByb3V0aW5lIGluIHdpbmRvd3MvbWVzc2FnZS5jLCBhbmQgcmVtb3ZlZAoJdGhlICNkZWZpbmUgaW4gd2luZG93cy5oLgoKTW9uIE5vdiAyMCAwMDozNjo0MiBNRVQgMTk5NSBTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0BkbnMudWZzaWEuYWMuYmU+CgoJKiBbKi8qXQoJQWRkZWQgbmV3IGRlYnVnZ2luZyB0eXBlIERFQlVHX1dJTjMyIGFuZCBERUJVR19FTlYuCgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJQWRkZWQgdW5kb2N1bWVudGVkIEdldEV4cFdpblZlci4KCgkqIFt0b29scy9idWlsZC5jXQoJUHJldmlvdXMgY29kZSBkaWRuJ3QgcG9wIHBvc3NpYmx5IGNoYW5nZWQgJWVzaSwgJWVkaSBhbmQgJWVkeAoJZnJvbSB0aGUgc3RhY2suCgkKCSogW3dpbjMyL2FkdmFwaS5jXQoJQWRkZWQgR2V0VXNlck5hbWVBLgoKCSogW3dpbjMyL2NvZGVfcGFnZS5jXQoJQWRkZWQgc3R1YiBmb3IgTXVsdGlCeXRlVG9XaWRlQ2hhci4KCgkqIFt3aW4zMi9jb25zb2xlLmNdCglBZGRlZCBTZXRDb25zb2xlQ3RybEhhbmRsZXIgc3R1Yi4KCgkqIFt3aW4zMi9maWxlLmNdCglBZGRlZCBSZWFkRmlsZSBDcmVhdGVGaWxlQSBHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSBzdHVicy4KCUFkZGVkIENsb3NlSGFuZGxlLgoKCSogW3dpbjMyL21lbW9yeS5jXQoJQ2hhbmdlZCBWaXJ0dWFsQWxsb2MgYW5kIFZpcnR1YWxGcmVlLgoKCSogW3dpbjMyL3Byb2Nlc3MuY10KCUFkZGVkIEV4aXRQcm9jZXNzLgoKU3VuIE5vdiAxOSAxNzo1NDo0MiAxOTk1ICAgQmVybmQgU2NobWlkdCA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglGaXhlZCBhIGZldyBicm9rZW4gc3RydWN0dXJlIGRlZmluaXRpb25zLgoKCSogW2xvYWRlci9yZXNvdXJjZS5jXQoJRmluZFJlc291cmNlKCk6IE5lZWQgdG8gY2hlY2sgZm9yICcjeHh4JyBzdHJpbmdzIGhlcmUuCgoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRmluZE5leHQoKTogUmV0dXJuIE1TLURPUyBmaWxlbmFtZXMgdXBwZXJjYXNlLgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJQ3JlYXRlSWNvbigpLCBDcmVhdGVDdXJzb3IoKTogQWRkZWQgbWlzc2luZyBlbGVtZW50IHRvIENVUlNPUklDT05JTkZPCglpbml0aWFsaXplcnMuCgkKCSogW21pc2MvZmlsZS5jXQoJX2xvcGVuKCk6IEZpbGVzIG9wZW5lZCBpbiBPRl9XUklURSBtb2RlIGFyZSB0cnVuY2F0ZWQuCglPcGVuRmlsZSgpOiBJZ25vcmUgT0ZfUkVBRC9PRl9XUklURS9PRl9SRUFEV1JJVEUgd2hlbiBmaWxlcyBhcmUKCWNyZWF0ZWQ7IHVzZSByZWFkL3dyaXRlIG1vZGUuCgkKCSogW21pc2MvcHJvZmlsZS5jXQoJbG9hZCgpOiBSZXdyaXR0ZW4uCgkKCSogW21pc2MvY29tbWRsZy5jXQoJRml4ZWQgYmFkIGNhbGwgdG8gc3RybmNweSgpIHRoYXQgc21hc2hlZCB0aGUgc3RhY2suCgoJKiBbY29udHJvbHMvY29tYm8uY10gW3dpbmRvd3Mvd2lucG9zLmNdIFttZW1vcnkvc2VsZWN0b3IuY10KCU9wZXJhdG9yIHByZWNlZGVuY2UgZml4ZXMuIFBlb3BsZSB3aG8gdXNlIGdjYyAyLjcuMSBkb24ndCBuZWVkIGEKCWRlYnVnZ2VyIDotKQoJCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL3BhbGV0dGUuY10KCUFkZCBSZXNpemVQYWxldHRlKCkgYW5kIEFuaW1hdGVQYWxldHRlKCkgc3R1YnMuIFRoZXkgZG9uJ3QgZG8gYW55dGhpbmcsCglidXQgc29tZXRpbWVzIHRoYXQncyBnb29kIGVub3VnaC4KCkZyaSBOb3YgMTcgMDk6MTA6MzUgR01UIDE5OTUgIEpvaG4gSGFydmV5IDxqb2huQGRpdmlzaW9uLmNvLnVrPgoKCSogW2luY2x1ZGUvd2luZS5oXSBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW2luY2x1ZGUvd2luc29jay5oXQogICAgICAgIEFkZGVkIGRlZmluaXRpb25zIGZvciBVbml4d2FyZS4KCgkqIFtsb2FkZXIvc2lnbmFsLmNdIFttaXNjL2NvbW0uY10gW21pc2Mvd2luc29ja2V0LmNdCglNaXNjLiBmaXhlcyBmb3IgVW5peHdhcmUuCgoJKiBbbG9hZGVyL3Rhc2suY10KICAgICAgICBNYWRlIGFzc2lnbmVtdHMgdG8gY29udGV4dCBpbiBJbml0VGFzayBmb3IgcmVnaXN0ZXJzIHVzZSB0aGUgbWFjcm9zCiAgICAgICAgZnJvbSByZWdpc3RlcnMuaCB0byBtYWtlIHRoZW0gbW9yZSBwb3J0YWJsZS4gKE5lZWRlZCBmb3IgVW5peHdhcmUpCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIHJlZ2lzdGVyIGFjY2VzIHJvdXRpbmVzIHRvIHdvcmsgb24gVW5peHdhcmUuIEJpdCBncnViYnkgYnV0CiAJaXQgc2VlbXMgdG8gd29yay4KCgkqIFtjb250cm9scy9lZGl0LmNdCglFRElUX1dNX05DQ3JlYXRlIGFsbG9jYXRlcyBsb2NhbCBoZWFwIGlmIGhhc24ndCBiZWVuIHByZXZpb3VzbHkKCWFsbG9jYXRlZC4KCQoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJbWtkaXIgbm93IGNyZWF0ZXMgZGlyZWN0b3J5IHdpdGggcGVybWlzc2lvbiB0byBhY2Nlc3MgaXQuCgoJKiBbbWlzYy9kb3NfZnMuY10KCW1rZGlyIG5vdyBjcmVhdGVzIGRpcmVjdG9yeSB3aXRoIHBlcm1pc3Npb24gdG8gYWNjZXNzIGl0LgoJRE9TX29wZW5kaXIgbm93IHVzZXMgbGlua2VkIGxpc3Qgb2YgZGlyZW50cyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIAoJcmVhbGxvYyBjaGFuZ2luZyBhZGRyZXNzIG9mIG1hbGxvY2VkIG1lbW9yeS4KClRodSBOb3YgMTYgMTI6NDc6MTMgMTk5NSAgTWljaGFlbCBQYXRyYSAgPHBhdHJhQGl0cDEuUGh5c2lrLlRVLUJlcmxpbi5ERT4KCgkqIFtjb250cm9scy9tZW51LmNdCglNRU5VX0NhbGNJdGVtU2l6ZSgpOiBGaXhlZCBoYW5kbGluZyBvZiBlbXB0eSBtZW51IGl0ZW1zLgoKU2F0IE5vdiAxMSAyMTo0Njo1NCAxOTk1ICBIYW5zIGRlIEdyYWFmZiAgPGdyYWFmZkB0d2k3Mi50d2kudHVkZWxmdC5ubD4KCgkqIFttaXNjL2ZpbGUuY10KCUluIE9wZW5GaWxlLCB1bmxpbmsgc2hvdWxkIGJlIGRvbmUgb24gdGhlIHVuaXggZmlsZW5hbWUuCgpTYXQgTm92IDExIDE2OjQzOjI5IDE5OTUgIENhbWVyb24gSGVpZGUgIChoZWlkZUBlZS51YWxiZXJ0YS5jYSkKCiAgICAgICAgKiBbaW5jbHVkZS9oYW5kbGUzMi5oXQogICAgICAgIE5ldyBoZWFkZXIgZmlsZSBjb250YWluaW5nIGludGVybmFsIFdpbjMyIGtlcm5lbCBoYW5kbGUKICAgICAgICBpbmZvcm1hdGlvbi4KCiAgICAgICAgKiBbd2luMzIvZmlsZS5jXQogICAgICAgIEFkZGVkIFJlYWRGaWxlLCBDcmVhdGVGaWxlLCBhbmQgQ2xvc2VGaWxlSGFuZGxlLCBhbmQgZGlkCiAgICAgICAgc29tZSByZW9yZ2FuaXppbmcgdG8gbWF0Y2ggdGhlIG5ldyBoYW5kbGUgYWxsb2NhdGlvbiBzY2hlbWUuCgogICAgICAgICogW3dpbjMyL2luaXQuY10KICAgICAgICBBZGRlZCBDbG9zZUhhbmRsZSBhbmQgdGhlIGNyZWF0aW9uIG9mIHN0YW5kYXJkIEkvTyBoYW5kbGVzLgoKICAgICAgICAqIFt3aW4zMi9vYmplY3RfbWd0LmNdCiAgICAgICAgTmV3IG1vZHVsZSBmb3IgYWxsb2NhdGluZyBhbmQgZnJlZWluZyBXaW4zMiBrZXJuZWwgaGFuZGxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRnJpIE5vdiAgMyAyMDowODoxNyAxOTk1ICBBbGV4YW5kcmUgSnVsbGlhcmQgIDxqdWxsaWFyZEBzdW5zaXRlLnVuYy5lZHU+CgoJKiBbY29uZmlndXJlLmluXQoJQXR0ZW1wdCB0byBjaGVjayBmb3IgLWxpMzg2IG9uIE5ldEJTRC4gUGxlYXNlIHRlc3QgdGhpcy4KCk1vbiBPY3QgMzAgMTI6NDA6MzIgRVNUIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbKi8qXQoJRWxpbWluYXRlZCB2YXJpb3VzIHdhcm5pbmdzIHdpdGggZWl0aGVyIGV4cGxpY2l0IGNhc3RzIG9yIG1vcmUKCWFjY3VyYXRlIHZhcmlhYmxlL3BhcmFtZXRlciBkZWNsYXJhdGlvbnMgKGUuZy4gSU5UIGluc3RlYWQgb2Ygc2hvcnQKCW9yIFdPUkQpLgoJQ2hhbmdlZCBtYWNyb3MgJ21pbicgYW5kICdtYXgnIHRvICdNSU4nIGFuZCAnTUFYJywgc2luY2UgdGhleSdyZQoJbWFjcm9zLgoKCSogW2NvbnRyb2xzL2VkaXQuY10gW3dpbmRvd3MvZGVmZGxnLmNdCglBZGRlZCAnI2lmZGVmIFNVUEVSRkxVT1VTX0ZVTkNUSU9OUycgd3JhcHBlcnMgYXJvdW5kIGZ1bmN0aW9uCglkZWZpbml0aW9uIG9mIEVESVRfS2V5VlNjcm9sbERvYywgRURJVF9UZXh0TGluZU51bWJlciwgYW5kCglERUZETEdfRmluZERlZkJ1dHRvbiB0byBhdm9pZCB3YXJuaW5ncy4KCgkqIFtjb250cm9scy9idXR0b24uY10gW2NvbnRyb2xzL3Njcm9sbC5jXSBbd2luZG93cy9kZWZ3bmQuY10KCSAgW3dpbmRvd3MvbWVzc2FnZS5jXSBbd2luZG93cy9ub25jbGllbnQuY10KCUNvbnZlcnRlZCBNQUtFUE9JTlQgbWFjcm8gY2FsbCB0byBtYW51YWwgY29udmVyc2lvbi4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUZvciBXSU5FTElCMzIsIHN0cnVjdHVyZXMgUE9JTlQsIFNJWkUsIGFuZCBSRUNUIGhhdmUgTE9ORyBtZW1iZXJzCglpbnN0ZWFkIG9mIElOVC4gIFRoaXMgYWxzbyBpbnZhbGlkYXRlcyB0aGUgbWFjcm8gTUFLRVBPSU5UKCksIHdoaWNoCglpcyBub3Qgc3VwcG9ydGVkIGluIFdpbjMyLiAgQWxzbyBkZWZpbmVkIHRoZSBQT0lOVFMgc3RydWN0dXJlIChTSE9SVAoJbWVtYmVycykgYW5kIHRoZSBNQUtFUE9JTlRTIG1hY3JvLgoKCSogW21pc2MvY29tbWRsZy5jXQoJQ2hhbmdlZCBhIGxvdCBvZiAnc3RyY3B5JyBjYWxscyB0byAnc3RybmNweScgY2FsbHMuICBJJ20gZGVzcGVyYXRlIHRvCglmaW5kIHRoaXMgbWVtb3J5IGJ1ZywgYW5kIHRoaXMgc2hvdWxkIGJlIGRvbmUgYW55d2F5LgoKCSogW2NvbnRyb2xzL2VkaXQuY10KCVdlbGwsIHRoZSBhbHRlcmF0aW9uIG1lbnRpb25lZCBhYm92ZSBkaWRuJ3QgZG8gaXQsIGJ1dCAjaWZkZWYnaW5nIG91dAoJYSBmZXcgbGluZXMgaW4gRURJVF9DbGVhclRleHQgZGlkLiAgVGhpcyBsZWFkcyB0byBidWdzLCBidXQgZm9yIG5vdywKCWl0J3MgYmV0dGVyIHRoYW4gYml6emFyZSBtZW1vcnkgdHJvdWJsZXMuCgoJKiBbdG9vbGtpdC9taXNjc3R1YnMuY10KCVJlbW92ZWQgd2FybmluZyBtZXNzYWdlcyBpbiBHTE9CQUxfQ3JlYXRlQmxvY2soKSwgR0xPQkFMX0ZyZWVCbG9jaygpLAoJYW5kIFJFTEFZMzJfR2V0RW50cnlQb2ludCgpLiAgVGhlc2UgYXJlIHRoZSBtb3N0IHBvcHVsYXIgd2FybmluZ3MsIGFuZAoJdGhlaXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzZWVtcyBmaW5lLgoKU2F0IE9jdCAyOCAwOTozOToxOCAxOTk1ICBKb2NoZW4gS2FycmVyIDxjaXAzMDdAd3BheDAxLlBoeXNpay5VbmktV3VlcnpidXJnLkRFPgoKCSogW29iamVjdHMvY3Vyc29yaWNvbi5jXQoJRml4IGZvciAiYnJva2VuIiBYIHNlcnZlcnMgdGhhdCBpbnZlcnQgbWFza2VkIGN1cnNvciBjb2xvcnMuCgpGcmkgT2N0IDI3IDE5OjI3OjIxIDE5OTUgIEFsZXggS29yb2JrYSAgPGFsZXhAcGhtNi5waGFybS5zdW55c2IuZWR1PgoKCSogW3dpbmRvd3MvZGlhbG9nLmNdIFt3aW5kb3dzL25vbmNsaWVudC5jXQoJUmVtb3ZlIHVubmVjZXNzYXJ5IGl0ZW1zIGZyb20gdGhlIHN5c3RlbSBtZW51LgoKVGh1IE9jdCAyNiAwNTowMzowMyBNRVQgMTk5NSAgUGhpbGlwcGUgRGUgTXV5dGVyIDxwaGRtQGluZm8udWNsLmFjLmJlPgoKCSogW29iamVjdHMvY29sb3IuY10gW29iamVjdHMvcGFsZXR0ZS5jXQoJTWFrZSBHZXROZWFyZXN0Q29sb3IgcmV0dXJuIGEgUkdCIHZhbHVlIGluc3RlYWQgb2YgYSBwaXhlbCB2YWx1ZS4KCldlZCBPY3QgMjUgMjM6MzM6MzkgMTk5NSAgICBNYXJ0aW4gdm9uIExvZXdpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogW2NvbnRyb2xzL2Rlc2t0b3AuY11bY29udHJvbHMvbWVudS5jXVtpbmNsdWRlL21lbnUuaF0KCUNoYW5nZWQgV09SRCBwYXJhbWV0ZXJzIHRvIFVJTlQgcGFyYW1ldGVycy4KCgkqIFtpbmNsdWRlL3dpbnR5cGVzLmhdCglNYWRlIFVJTlQgMzJiaXQgZm9yIFdJTkVMSUIuCgoJKiBbbG9hZGVyL21haW4uY10KCURpc2FibGVkIFJFTEFZMzJfSW5pdCBhbmQgTU9EVUxFX0luaXQgZm9yIFdJTkVMSUIuCgoJKiBbbWlzYy9tYWluLmNdCglBc3N1bWUgQ1BVMzg2IGZvciBXSU5FTElCLgoKCSogW3JjL3dpbmVyY10KCWFkZF9wb3B1cDogc2V0IE1GX1BPUFVQIGZsYWcgb24gbWVudSBpdGVtLgoKCSogW3Rvb2xraXQvTWFrZWZpbGUuaW5dW3Rvb2xraXQvaGVsbG8zLmNdW3Rvb2xraXQvaGVsbG8zcmVzLmNdCglBZGQgcmVzb3VyY2UgZGVtbyBoZWxsbzMgZm9yIFdJTkVMSUIuCglOZXcgZmlsZSBSRUFETUUucmVzb3VyY2VzLgoKCSogW3Rvb2xraXQvbWlzY3N0dWJzLmNdCglBZGQgYSBjYXNlIGZvciAxNy4KClR1ZSBPY3QgMTcgMTU6MTM6MTAgSVNUIDE5OTUgIEl0YWkgTmFoc2hvbiA8bmFoc2hvbkB2bmV0LmlibS5jb20+CgoJKiBbbG9hZGVyL21vZHVsZS5jXQoJRG8gbm90IGFwcGVuZCAuZXhlIGlmIHRoZSBmaWxlIG5hbWUgYWxyZWFkeSBoYXMgYW4gZXh0ZW5zaW9uLgoKCSogW21pc2MvcHJvZmlsZS5jXQoJQXZvaWQgY3JlYXRpbmcgYSBmaWxlIHdpdGggYSBqdW5rIG5hbWUgaWYgYSAuaW5pIGZpbGUgZG9lcyBub3QKCWV4aXN0LgoKCSogW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdIFtpZjE2MzIvZHVtbXkuY10KCUFkZGVkIGEgbG90IG9mIGR1bW15IHN0dWJzIGZvciBXaW5kb3dzIEhlYnJldyB2ZXJzaW9uLgoKVHVlIE9jdCAxNyAwMTowMzoyNCAxOTk1IFdpbGxpYW0gTWFncm8gPHdtYWdyb0B0Yy5jb3JuZWxsLmVkdT4KCgkqIFtjb250cm9scy9idXR0b24uY10KCUZpeCBmb3IgYnV0dG9ucyB3aXRoIG5vIGxhYmVsLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdW2NvbnRyb2xzL2xpc3Rib3guY10KCUZpeGVzIGZvciBzY3JvbGxiYXIgcG9zaXRpb25pbmcuICBOb3cgZGlzYXBwZWFycyBjb3JyZWN0bHkKCWZvciBzaG9ydCBsaXN0cy4KCgkqIFtjb250cm9scy9lZGl0LmNdCglIYW5kbGUgbWVtb3J5IGFsbG9jYXRpb24gZGlmZmVyZW50bHkgd2hlbiBidWlsZGluZyBhcyBsaWJyYXJ5LgoKCSogW2NvbnRyb2xzL3N0YXRpY10KCURvbid0IGRlc3Ryb3kgb2xkIGljb24gYmVmb3JlIGRyYXdpbmcgbmV3IGljb24uIChGaXhlcyBsYW5kc2NhcGUvCglwb3J0cmFpdCB0b2dnbGUgaWNvbiBpbiBwcmludCBkaWFsb2cuKQoKCSogW2lmMTYzMi9nZGkuc3BlY10KCU5ldyBmdW5jdGlvbnMgU2V0TWV0YUZpbGVCaXRzIGFuZCBHZXRNZXRhRmlsZUJpdHMKCgkqIFtpbmNsdWRlL3N5c21ldHJpY3MuaF0gW3dpbmRvd3Mvc3lzbWV0cmljcy5jXQoJQWRkIHN1cHBvcnQgZm9yIEdldFN5c3RlbU1ldHJpY3MoU01fQ01FVFJJQ1MpID09IFNNX0NNRVRSSUNTCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdCglNRVRBX0VYVFRFWFRPVVQsIG5vdCBNRVRBX1NFVFRFWFRPVVQKCWRlZmluZSBHZXRDdXJyZW50VGltZSBhcyBHZXRUaWNrQ291bnQgKGZvciB3aW5lIGxpYnJhcnkpCgoJKiBbbG9hZGVyL21haW4uY10KCURvbid0IGluaXRpYWxpemUgYnVpbHQtaW4gbW9kdWxlcyBpbiB3aW5lIGxpYnJhcnkKCgkqIFttZW1vcnkvbG9jYWwuY10KCUxvY2FsUmVBbGxvYyB3YXMgZGVmaW5lZCBpbmNvcnJlY3RseS4gU3dhcCBmbGFncyBhbmQgc2l6ZSBhcmd1bWVudHMuCgoJKiBbbWlzYy9tYWluLmNdCglBbHdheXMgcmVwb3J0IENQVVRZUEU9NCB0byB3aW5lIGxpYnJhcnkuCgoJKiBbb2JqZWN0cy9kaWIuY10KCVJMRTggaW1hZ2VzIHdlcmUgbWlzc2luZyB0b3AgbGluZSB3aGVuIGRlY29tcHJlc3NlZC4KCgkqIFtvYmplY3RzL21ldGFmaWxlLmNdCglTZXRNZXRhRmlsZUJpdHMgYW5kIEdldE1ldGFGaWxlQml0cyBpbXBsZW1lbnRlZC4gIFdvcmtzIHdoZW4gY2FsbGVkCglmcm9tIHdpbmhlbHAuICBNb3JlIHRlc3RpbmcgbmVlZGVkLiAgVmFyaW91cyBtZW1vcnkgbGVha3MgcGx1Z2dlZC4KCVZhcmlvdXMgb3RoZXIgYnVnIGZpeGVzLiAgTmV3IG1ldGFmaWxlIG9wZXJhdGlvbnMgYWRkZWQgaW4KCVBsYXlNZXRhRmlsZVJlY29yZDogQ3JlYXRlUGFsZXR0ZSwgU2V0VGV4dEFsaWduLCBTZWxlY3RQYWxldHRlLAoJU2V0TWFwcGVyRmxhZ3MsIFJlYWxpemVQYWxldHRlLCBFeHRUZXh0T3V0LCBFc2NhcGUuICBUZXN0aW5nIG5lZWRlZC4KCgkqIFt0b29sa2l0L2hlYXAuY10KCUxvY2FsVW5Mb2NrIGNoYW5nZWQgdG8gTG9jYWxVbmxvY2sKClN1biBPY3QgMTUgMjE6NTU6MzMgMTk5NSAgQW5hbmQgS3VtcmlhIDxha3VtcmlhQG96ZW1haWwuY29tLmF1PgoJCgkqIFttaXNjL3dpbnNvY2suY10gCglSZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IgbnVtYmVyLCBmb3IgaG9zdCBsb29rdXAgb3BlcmF0aW9ucy4KCUFsc28sIGNvcnJlY3QgdGhlIHByb2JsZW0gd2l0aCBzZW5kX21lc3NhZ2UuCgpGcmkgT2N0IDEzIDE5OjA0OjM1IDE5OTUgIE1vcnRlbiBXZWxpbmRlciAgPHRlcnJhQGRpa3UuZGs+CgoJKiBbTWFrZWZpbGUuaW5dCglVc2luZyBubSdzIGJ1aWx0LWluIHNvcnRpbmcuCgoJKiBbKi8qLmNdCglVc2UgeG1hbGxvYyBmb3IgbWFsbG9jIGFuZCB4cmVhbGxvYyBmb3IgcmVhbGxvYyBpbiBhbGwgdW5nYXJkZWQKCWNhc2VzLgoKCSogW2RlYnVnZ2VyL2RiZy55XQoJSGFuZGxlIEMtbGlrZSBleHByZXNzaW9ucy4gIENsZWFuLXVwLgoKCSogW2RlYnVnZ2VyL2RlYnVnLmxdCglMb3RzIG9mIG5ldyB0b2tlbnMgZm9yIGV4cHJlc3Npb25zLgoKCSogW2RlYnVnZ2VyL2luZm8uY10KCUltcGxlbWVudCAibGlzdCIgY29tbWFuZCBmb3IgZGlzYXNzZW1ibGluZy4KCgkqIFttaXNjL29sZTJubHMuY10KCUltcGxlbWVudCBtb3JlIERhbmlzaCBzdHVmZi4KCkZyaSBPY3QgIDYgMTA6Mzk6MzkgMTk5NSBSYW0nb24gR2FyYydpYSA8cmFtb25AaWUzLmNsdWJzLmV0c2l0LnVwbS5lcz4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglVcGRhdGVkIHNlbGYtbG9hZGluZyBtb2R1bGVzIHRvIHN1cHBvcnQgZm9yIG5ldyAzMiBiaXQgCglzdGFjayBmcmFtZXMuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBPY3QgIDEgMTU6NDg6MzQgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmM+CgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgR2V0TWVudVN0cmluZygpIGZvciBub24tc3RyaW5nIGl0ZW1zLgoKCSogW2RlYnVnZ2VyLyouY10KCUZpcnN0IGF0dGVtcHQgdG8gY2hlY2sgdmFsaWRpdHkgb2YgcG9pbnRlcnMgYmVmb3JlIG1lbW9yeQoJYWNjZXNzZXMuIEZvciBub3cgb25seSBzZWdtZW50ZWQgcG9pbnRlcnMgYXJlIGNoZWNrZWQuCgoJKiBbZGVidWdnZXIvZGJnLnldIFttZW1vcnkvbGR0LmNdCglBZGRlZCBwb3NzaWJpbGl0eSB0byBkdW1wIG9ubHkgb25lIHNlZ21lbnQgd2l0aCAnaW5mbyBzZWdtZW50Jy4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvb2NyXypdCglBZGRlZCBhbGwgT0VNIGN1cnNvcnMgYXMgWFBNIGJpdG1hcHMuCgoJKiBbaW5jbHVkZS9jdXJzb3JpY29uLmhdIFtvYmplY3RzL2N1cnNvcmljb24uY10KCVJld3JvdGUgYWxsIGN1cnNvciBhbmQgaWNvbiBtYW5hZ2VtZW50IHRvIHVzZSB0aGUgc2FtZSBtZW1vcnkKIAlsYXlvdXQgYXMgV2luZG93cywgYW5kIHRvIGZhY3RvciBjb21tb24gY29kZSBiZXR3ZWVuIGljb25zIGFuZAoJY3Vyc29ycy4gSW1wbGVtZW50ZWQgaWNvbiBkaXJlY3RvcnkgbG9va3VwIHRvIGZpbmQgdGhlIGJlc3QKCW1hdGNoaW5nIGljb24gKGkuZS4gdGhlIGNvbG9yIG9uZSkuCiAgCUltcGxlbWVudGVkIENvcHlDdXJzb3IoKSBhbmQgRHVtcEljb24oKS4KCgkqIFtsb2FkZXIvbW9kdWxlLmNdCglGb3IgZGlzYWJsZWQgYnVpbHQtaW4gbW9kdWxlcywgd2Ugbm93IHRyeSB0byBsb2FkIHRoZSBXaW5kb3dzIERMTAoJZmlyc3QsIGFuZCBpZiB0aGlzIGZhaWxzIHdlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgYnVpbHQtaW4gbW9kdWxlCglhbnl3YXkuCgoJKiBbbWVtb3J5L2dsb2JhbC5jXQoJRml4ZWQgR2xvYmFsSGFuZGxlKCkgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IHNlbGVjdG9yIGluIHRoZSBoaWdoCgl3b3JkIGV2ZW4gaWYgd2UgYXJlIHBhc3NlZCBhIGhhbmRsZSBpbiB0aGUgZmlyc3QgcGxhY2UuCgoJKiBbbWlzY2VtdS9pbnN0ci5jXQoJVGFrZSBpbnRvIGFjY291bnQgdGhlIHNpemUgb2YgdGhlIG9wZXJhbmQgYW5kIG9mIHRoZSBzdGFjayBzZWdtZW50Cgl3aGVuIGluY3JlbWVudGluZyB0aGUgc3RhY2sgcG9pbnRlci4KCUF2b2lkIHJlZmVyZW5jaW5nIEZTX3JlZyBhbmQgR1NfcmVnIG9uICpCU0QuCgoJKiBbb2JqZWN0cy9kaWIuY10KCUFsbCBESUIgZnVuY3Rpb25zIG5vdyBhY2NlcHQgYSBCSVRNQVBDT1JFSEVBREVSIGZvcm1hdCBiaXRtYXAuCglNb25vY2hyb21lIERJQnMgYXJlIGNyZWF0ZWQgYXMgbW9ub2Nocm9tZSBiaXRtYXAgaWZmIHRoZXkgYXJlCglibGFjayBhbmQgd2hpdGUuCgoJKiBbb2JqZWN0cy9vZW1iaXRtYXAuY10KCUFkZGVkIHN1cHBvcnQgZm9yIE9FTSBjdXJzb3JzLCBjaGFuZ2VkIE9CTV9Mb2FkSWNvbiB0byB1c2UgdGhlIG5ldwoJaWNvbiBtZW1vcnkgbGF5b3V0LgoKCSogW3JjL3N5c3Jlc19Gci5yY10KCUFkZGVkIEZyZW5jaCBbRnJdIGxhbmd1YWdlIHN1cHBvcnQuCgoJKiBbd2luMzIvZW52aXJvbm1lbnQuY10KCUZpeGVkIEdldENvbW1hbmRMaW5lQSgpIHRvIHVzZSBjdXJyZW50IFBEQi4KCgkqIFt3aW5kb3dzL2V2ZW50LmNdIFt3aW5kb3dzL3dpbnBvcy5jXQoJU2ltdWxhdGUgYSBtb3VzZSBtb3Rpb24gZXZlbnQgdXBvbiBTZXRXaW5kb3dQb3MoKSB0byBmb3JjZSB0aGUKCWN1cnNvciB0byBiZSBzZXQgY29ycmVjdGx5LgoKU2F0IFNlcCAzMCAxNzo0OTozMiAgQ2FtZXJvbiBIZWlkZSAgKGhlaWRlQGVlLnVhbGJlcnRhLmNhKQoKCSogW3dpbjMyLypdCiAgICAgICAgTmV3IFdpbjMyIGtlcm5lbCBmdW5jdGlvbnM6IEdldEFDUCwgR2V0Q1BJbmZvLAogCUdldEVudmlyb25tZW50VmFyaWFibGVBLCBHZXRGaWxlVHlwZSwgR2V0TGFzdEVycm9yLCBHZXRPRU1DUCwKIAlHZXRTdGFydHVwSW5mb0EsIEdldFRpbWVab25lSW5mb3JtYXRpb24sIFNldEVudmlyb25tZW50VmFyaWFibGUsCiAJU2V0RmlsZVBvaW50ZXIsIFNldExhc3RFcnJvciwgVmlydHVhbEFsbG9jLCBWaXJ0dWFsRnJlZSwKIAlXcml0ZUZpbGUuICBDb21wbGV0ZWQgaW1wbGVtZW50YXRpb25zIG9mIEdldENvbW1hbmRMaW5lQS4KCgkqIFtpbmNsdWRlL2tlcm5lbDMyLmhdCiAgICAgICAgTmV3IGZpbGUuCgoJKiBbbG9hZGVyL21haW4uY10KICAgICAgICBDYWxsIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBXaW4zMiBkYXRhIChkb2Vzbid0IGN1cnJlbnRseSBkbwogCWFueXRoaW5nKS4KCgkqIFttaXNjL21haW4uY10KCUltcGxlbWVudGVkIEdldEVudmlyb25tZW50VmFyaWFibGVBLCBTZXRFbnZpcm9ubWVudFZhcmlhYmxlQS4KClNhdCBTZXAgMzAgMDA6MjY6NTYgMTk5NSAgTmllbHMgZGUgQ2FycGVudGllciAgPG5pZWxzQGNpbmR5LmV0LnR1ZGVsZnQubmw+CgoJKiBbd2luZG93cy93aW5wb3MuY11bbWlzY2VtdS9lbXVsYXRlLmNdW2xvYWRlci9tb2R1bGUuY10KCSAgW21pc2MvY29tbWRsZy5jXQoJTWlzYy4gYnVnIGZpeGVzCgpGcmkgU2VwIDI5IDE2OjE2OjEzIDE5OTUgIEppbSBQZXRlcnNvbiA8anNwZXRlckBiaXJjaC5lZS52dC5lZHU+CgoJKiBbKi8qXQoJRm9yIFdpbmVsaWIsIGV4cGxpY2l0IGNhc3RzIGhhdmUgYmVlbiBwbGFjZWQgd2hlcmUgd2FybmluZ3Mgd2VyZQogCXVzdWFsbHkgZ2VuZXJhdGVkLgoJcHJpbnRmIGZvcm1hdHMgd2hpY2ggZ2l2ZSB0aGUgZm9ybWF0IGZvciBwcmludGluZyBhIGhhbmRsZSBhcwogCSIlMDR4IiBvciBzb21ldGhpbmcgc2ltaWxhciBoYXZlIGJlZW4gY2hhbmdlZCB0byB1c2UgdGhlIE5QRk1UCiAJbWFjcm8gZGVmaW5lZCBpbiBpbmNsdWRlL3dpbnR5cGVzLmguICBTb21lIHRpbWVzLCBleHBsaWNpdCBjYXN0cwogCXdlcmUgYWxzbyBuZWNlc3NhcnkuCiAgICAgCVBhcmFtZXRlciwgZmllbGQsIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMgaGF2ZSBiZWVuIG1hZGUgbW9yZQogCWV4YWN0LCBzdWNoIGFzIGNvbnZlcnRpbmcgJ1dPUkQgd1BhcmFtJyB0byAnV1BBUkFNIHdQYXJhbScgb3IKIAknV09SRCBoRm9udCcgdG8gJ0hGT05UIGhGb250Jy4KICAgICAJQW55IGNhbGwgb2YgdGhlIGZvcm0gR2V0V2luZG93V29yZChod25kLEdXV19ISU5TVEFOQ0UpIGhhcyBiZWVuCiAJcmVwbGFjZWQgd2l0aCBhIGNhbGwgdG8gV0lOX0dldFdpbmRvd0luc3RhbmNlKGh3bmQpLgoKCSogW2NvbnRyb2xzL2NvbWJvLmNdCglBZGRlZCBXSU5FTElCMzIgc3VwcG9ydCBpbiBDTEJveEdldENvbWJvKCkuCgoJKiBbaW5jbHVkZS9kaWFsb2cuaF0KCUNvbW1lbnRlZCBvdXQgdGhlICcjaWZuZGVmIFdJTkVMSUInIGFyb3VuZCB0aGUgJyNwcmFnbWEgcGFjaygxKScuCgl3aW5lbGliIG5lZWRzIHRoZSBwYWNraW5nIGFzIHdlbGwgKGUuZy4gd2hlbiBhY2Nlc3NpbmcgcmVzb3VyY2VzCglsaWtlIHN5c3Jlc19ESUFMT0dfU0hFTExfQUJPVVRfTVNHQk9YKS4KCgkqIFtpbmNsdWRlL3dpbmRvd3MuaF0KCUdvdCByaWQgb2YgdGhlIEZbYS1rXSBtYWNyb3MsIHdoaWNoIHdlcmUgY2x1dHRlcmluZyB1cCB0aGUgZ2xvYmFsCgluYW1lc3BhY2UuCgoJKiBbaW5jbHVkZS93aW5kb3dzLmhdIFt3aW5kb3dzL2RlZnduZC5jXQoJQWRkZWQgV2luMzIgbWVzc2FnZXMgV01fQ1RMQ09MT1IqLgoKCSogW2luY2x1ZGUvd2ludHlwZXMuaF0KCVB1dCBpbiBwcmVwcm9jZXNzb3IgJyNkZWZpbmUgV0lORUxJQjMyJyBpZiBhcHByb3ByaWF0ZSBhbmQgY2hhbmdlZAoJdGhlIHR5cGVzIG9mIHNvbWUgdHlwZWRlZnMgKFdQQVJBTSwgSEFORExFKSBiYXNlZCBvbiB0aGlzLgoJCgkqIFtsb2FkZXIvbW9kdWxlLmNdIFt0b29sa2l0L21pc2NzdHVicy5jXQoJQWRkZWQgI2lmZGVmJ2QgcG9ydGlvbiBpbiBMb2FkTW9kdWxlIHRvIGhhbmRsZSBsb2FkaW5nIGEgV0lORWxpYgoJbW9kdWxlIChhbHJlYWR5IGxvYWRlZCwganVzdCBpbml0IHZhbHVlcykuICAnI2lmZGVmJ2VkIG91dCB0aGUKCWRlZmluaXRpb24gZm9yIEdldFduZFByb2NFbnRyeTE2IGFuZCBhZGRlZCBhIG5ldyB2ZXJzaW9uIHRvCgl0b29sa2l0L21pc2NzdHVicy5jLgoKCSogW21pc2Mvc2hlbGwuY10KCUFkanVzdGVkIHRoZSBsZW5ndGhzIG9mIEFwcE5hbWUgYW5kIEFwcE1pc2MgZnJvbSA1MTIsNTEyIHRvIDEyOCw5MDYuCglTYW1lIGFtb3VudCBvZiB0b3RhbCBzdG9yYWdlLCBidXQgbXVjaCBtb3JlIHJlYXNvbmFibGUuICBBbHNvLCBjaGFuZ2VkCgljYWxscyB0byBzdHJjcHkoKSBpbiBTaGVsbEFib3V0KCkgdG8gY2FsbHMgdG8gc3RybmNweSgpIGluc3RlYWQuCglUaGlzIHdhcyBhIGRpZmZpY3VsdCBidWcgdG8gdHJhY2sgZG93biwgYnV0IHRoZSBBcHBNaXNjIGZpZWxkIHdhcwoJYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgY29udHJpYnV0ZXJzIHRleHQsIHdoaWNoIHdhcyBtdWNoIGxhcmdlcgoJdGhhbiA1MTIgY2hhcmFjdGVycy4KCgkqIFt0b29sa2l0L2F0b20uY10KCU5ldyBmaWxlIGZvciBhdG9tLWhhbmRsaW5nIGZ1bmN0aW9ucy4gIENvcGllZCBmcm9tIG1lbW9yeS9hdG9tLmMgYW5kCgl0aGVuIGhlYXZpbHkgbW9kaWZpZWQuICBSaWdodCBub3csIGl0J3MganVzdCBhIGxpbmtlZCBsaXN0IG9mIGF0b21zLgoJQ29uc2lkZXIgaXQgYXMgYSBoYXNoIHRhYmxlIHdpdGgganVzdCBvbmUgZW50cnkuICBJdCdzIGVhc2lseSBjaGFuZ2VkCglsYXRlci4KCgkqIFt0b29sa2l0L2hlYXAuY10KCUNvbW1lbnRlZCBvdXQgdGhlIGhlYXAgZnVuY3Rpb25zIHdpdGggYSAiI2lmZGVmIFdJTkVMSUIxNiIgYW5kIHB1dCBpbgoJYSBXaW4zMiB2ZXJzaW9uICh3aGljaCBpcyBiYXNpY2FsbHkgYSBtb2RpZmllZCBjb3B5KS4KCgkqIFt0b29sa2l0L3N1cC5jXSBbdG9vbGtpdC9taXNjc3R1YnMuY10KCU1vdmVkIHRoZSBzdHVmZiBJIHB1dCBpbiB0b29sa2l0L3N1cC5jIGludG8gdG9vbGtpdC9taXNjc3R1YnMuYyBhbmQKCWFkZGVkIHF1aXRlIGEgZmV3IG1vcmUgc3R1YnMuCgoJKiBbdG9vbGtpdC93aW5tYWluLmNdCglSZWFycmFuZ2VkIHN0YXJ0dXAgY29kZSBpbiBfV2luTWFpbi4gIEkgdGhpbmsgdGhpcyB3aWxsIHdvcmsuCgoJKiBbdG9vbGtpdC9NYWtlZmlsZS5pbl0KCUFkZGVkIHRhcmdldHMgZm9yICdoZWxsbycgYW5kICdoZWxsbzInIGluIGNhc2UgYW55b25lIGNhcmVzIHRvIHRyeQoJb3V0IHRoZSBzYW1wbGUgcHJvZ3JhbXMuCgpXZWQgU2VwIDI3IDIzOjEzOjQzIDE5OTUgIEFuYW5kIEt1bXJpYSA8YWt1bXJpYUBvemVtYWlsLmNvbS5hdT4KCQoJKiBbbWlzY2VtdS9pbnQyZi5jXSBbbWlzY2VtdS92eGQuY10gW2lmMTYzMi93aW5wcm9jcy5zcGVjXQoJRmlyc3QgYXR0ZW1wdCBhdCBzdXBwb3J0IGZvciBzb21lIFZ4RHMuIENvbW0sIFNoZWxsIGFuZCBQYWdlZmlsZS4KClR1ZSBTZXAgMjYgMjE6MzQ6NDUgMTk5NSAgSGFucyBkZSBHcmFhZmYgIDxncmFhZmZAdHdpNzIudHdpLnR1ZGVsZnQubmw+CgoJKiBbbWlzYy9kb3NfZnMuY10KCURPU19TaW1wbGlmeVBhdGg6IEFsc28gcmVtb3ZlICIvLi8iIGZyb20gcGF0aC4gKEhhcHBlbnMgd2hlbgogCXN0YXJ0aW5nIGFwcGxpY2F0aW9ucyBsaWtlICd3aW5lIC4vZXhjZWwuZXhlJykKClNhdCBTZXAgMjMgMjM6MzI6NDAgMTk5NSAgTW9ydGVuIFdlbGluZGVyICA8dGVycmFAZGlrdS5kaz4KCgkqIFtjb25maWd1cmUuaW5dCglBdm9pZCByZWxhdGl2ZSBwYXRoIGZvciB3aW5lLmluaS4KCgkqIFtyYy9zeXNyZXNfRGEucmNdCglTdXBwb3J0IGZvciBEYW5pc2ggW0RhXSBsYW5ndWFnZS4KCgkqIFttaXNjL21haW4uY10gW21pc2NlbXUvY3B1LmNdCglSZXR1cm4gdGhlIHByb2Nlc3NvciB3ZSdyZSBydW5uaW5nIG9uIGNvcnJlY3RseS4KCgkqIFttaXNjZW11L2ludDJmLmNdCglNaW5vciBzdHVmZiBpbiBpbnQgMHgyZiwgZnVuY3Rpb24gMHgxNi4KClNhdCBTZXAgMjMgMTk5NSAxNzo1ODowNCAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2Mvc2hlbGwuY10gW21pc2MvbWFpbi5jXQoJSW1wbGVtZW50IHNhdmluZyBhbmQgbG9hZGluZyBvZiB0aGUgcmVnaXN0cnkgZGF0YWJhc2UgKG5lZWRlZCBmb3IKCU9MRSkuIFZlcnkgZXhwZXJpbWVudGFsLiBGaXhlZCBTaGVsbEV4ZWN1dGUoKS4KCQoJKiBbbWlzY2VtdS9pbnQyMS5jXQoJRUVYSVNUIGlzIG5vdCBhIGNyaXRpY2FsIGVycm9yIGNvbmRpdGlvbiBmb3IgbWtkaXIoKS4KCkZyaSBTZXAgMjIgMDE6MzM6MzQgMTk5NSAgQWxleCBLb3JvYmthICA8YWxleEBwaG02LnBoYXJtLnN1bnlzYi5lZHU+CgoJKiBbaW5jbHVkZS9zaGVsbC5oXSBbbWlzYy9zaGVsbC5jXQoJSW1wbGVtZW50ZWQgNCBkcmFnL2Ryb3AgZnVuY3Rpb25zIHdpdGggZG9jdW1lbnRlZCBmdW5jdGlvbmFsaXR5LgoKICAgICAgICAqIFttdWx0aW1lZGlhL3RpbWUuY10KICAgICAgICAiRml4ZWQiIE1NU3lzVGltZUNhbGxiYWNrIGtsdWRnZSBzbyBFeGNlbDUgbG9hZHMgdXAgd2l0aG91dCBjcmFzaGluZy4KCgkqIFsqLypdIAogICAgICAgIEFkZGVkIG5ldyBmaWxlcywgbW9yZSBtZXNzYWdlIGRlZmluaXRpb25zLCBzdHJ1Y3R1cmVzLCBkZWJ1ZyBpbmZvLAogCWV0Yy4gIFJld3JvdGUgbWVzc2FnZSBsb2dnaW5nIGZ1bmN0aW9ucyB0byBwcm9kdWNlIG91dHB1dCBzaW1pbGFyCiAJdG8gV2luU2lnaHQuICBDaGVjayBvdXQgLWRlYnVnbXNnICttZXNzYWdlIG9wdGlvbi4KCgkqIFttaXNjL2ZpbGUuY10KICAgICAgICBGaXhlZCBHZXREcml2ZVR5cGUgcmV0dXJuIHZhbHVlLiAgCgogICAgICAgICogW3dpbmRvd3MvbWVzc2FnZS5jXSAKICAgICAgICBIb29rcyBhcmUgaW52b2tlZCBpbiBub3JtYWwgb3JkZXIuCgogICAgICAgICogW21pc2NlbXUvKl0KICAgICAgICBBZGRlZCBzb21lIGZ1bmN0aW9ucyBhbmQgaW50ZXJydXB0cy4KCiAgICAgICAgKiBbbWlzYy9zaGVsbC5jXQogICAgICAgIEltcGxlbWVudGVkIERyYWcuLi4gZnVuY3Rpb25zLgoKVGh1IFNlcCAyMSAyMzo1MDoxMiAxOTk1ICBKdWtrYSBJaXZvbmVuIDxpaXZvbmVuQGNjLmhlbHNpbmtpLmZpPgoKCSogW3JjL3N5c3Jlc19GaS5yY10gW3JjL3N5c3Jlcy5yY10KCUZpcnN0IGF0dGVtcHQgYXQgRmlubmlzaCBbRmldIGxhbmd1YWdlIHN1cHBvcnQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClN1biBTZXAgMTcgMTY6NDc6NDkgMTk5NSAgQWxleGFuZHJlIEp1bGxpYXJkICA8anVsbGlhcmRAc3Vuc2l0ZS51bmMuZWR1PgoKCSogW2NvbmZpZ3VyZS5pbl0gWyovTWFrZWZpbGUuaW5dIFtNYWtlLnJ1bGVzLmluXQoJQ2xlYW5lZCB1cCBtYWtlZmlsZXMsIGFkZGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvciBXaW5lbGliLAoJZ3JvdXBlZCBjb21tb24gbWFrZSBydWxlcyBpbiBNYWtlLnJ1bGVzLmluLgoKCSogW0NvbmZpZ3VyZV0KCVJlbmFtZWQgdG8gJ0NvbmZpZ3VyZS5vbGQnOyBwbGVhc2UgdXNlICdjb25maWd1cmUnIGluc3RlYWQuCgoJKiBbY29udHJvbHMvbWVudS5jXQoJRml4ZWQgRGVzdHJveU1lbnUoKSB0byBhdm9pZCBkZWxldGluZyB0aGUgc2FtZSBtZW51IHR3aWNlLgoJTW9yZSBmaXhlcyB0byBXTV9NRU5VU0VMRUNULCBhbmQgYWRkZWQgV01fSU5JVE1FTlUuCgoJKiBbaWYxNjMyL3JlbGF5LmNdCglGaXhlZCB3cm9uZyByZWdpc3RlciB2YWx1ZXMgZGlzcGxheWVkIGJ5IFJFTEFZX0RlYnVnQ2FsbDMyKCkuCgoJKiBbbWVtb3J5L2xvY2FsLmNdCglGaXhlZCBMb2NhbExvY2soKSBhbmQgTG9jYWxVbmxvY2soKSB0byBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZQoJbG9jayBjb3VudCBmb3IgbW92ZWFibGUgYmxvY2tzLgoKCSogW21pc2MvY29tbWRsZy5jXSBbbWlzYy9zaGVsbC5jXSBbcmMvd2luZXJjLmNdCglNb2RpZmllZCB0aGUgZ2VuZXJhdGVkIEMgZmlsZSBzbyB0aGF0IHRoZSByZXNvdXJjZSBpbmZvcm1hdGlvbgoJKHNpemUsIGV0Yy4pIGlzIGFsc28gZXhwb3J0ZWQuCglNb2RpZmllZCBjb21tb24gZGlhbG9ncyB0byB1c2UgdGhlIG5ldyBpbmZvcm1hdGlvbnMuCgoJKiBbbWlzYy9tYWluLmNdIFtBTk5PVU5DRV0KCVVwZGF0ZSB0aGUgbGlzdCBvZiBjb250cmlidXRvcnMuIFBsZWFzZSBsZXQgbWUga25vdyBpZiBJIGZvcmdvdAoJc29tZW9uZS4KCgkqIFtyYy9zeXNyZXMucmNdIFtyYy9zeXNyZXNfRW4ucmNdCglNb3ZlZCBFbmdsaXNoIHJlc291cmNlcyB0byBzeXNyZXNfRW4ucmMuCglDaGFuZ2VkIGlkcyBmcm9tIG51bWVyaWMgdG8gc3ltYm9saWMgZm9yIGRpYWxvZ3MuCgoJKiBbd2luZG93cy9kaWFsb2cuY10KCU1vZGlmaWVkIHRlbXBsYXRlIHBhcnNpbmcgdG8gYmUgYWJsZSB0byBwYXNzIHNlZ21lbnRlZCBwb2ludGVycyB0bwoJQ3JlYXRlV2luZG93KCkuCgoJKiBbd2luZG93cy93aW4uY10KCUNyZWF0ZVdpbmRvdygpIG5vdyB0YWtlcyBzZWdtZW50ZWQgcG9pbnRlcnMgZm9yIGNsYXNzIGFuZCB3aW5kb3cKCW5hbWVzLgoJTWF4bWltaXplIG9yIG1pbmltaXplIHRoZSB3aW5kb3cgdXBvbiBjcmVhdGlvbiBpZiB0aGUgV1NfTUFYSU1JWkUKCW9yIFdTX01JTklNSVpFIGJpdHMgYXJlIHNldC4KClRodSBTZXAgMTQgMTc6MTk6NTcgMTk5NSAgUGF1bCBXaWxoZWxtICA8cGF1bEBwYXVsLmFjY2Vzc29uZS5jb20+CgoJKiBbY29udHJvbHMvc2Nyb2xsLmNdCglGaXhlZCBzY3JvbGwtYmFyIGJ1Z3MgZm9yIG5vbi1jbGllbnQgd2luZG93cy4KClRodSBTZXAgMTQgMTQ6MDQ6MTQgTUVUIERTVCAxOTk1IEpvY2hlbiBIb2VuaWNrZSA8Sm9jaGVuLkhvZW5pY2tlQGFyYmkuSW5mb3JtYXRpay5VbmktT2xkZW5idXJnLmRlPgoKCSogW2luY2x1ZGUvY3Vyc29yLmhdIFt3aW5kb3dzL2N1cnNvci5jXQoJQ3Vyc29yIGlzIG5vdCBtaXJyb3JlZCBhbnkgbW9yZSBhbmQgdGhlIGhvdHNwb3QgaXMgc2V0IHJpZ2h0LgoKV2VkIFNlcCAxMyAxNDoyMjozMSAxOTk1ICBNYXJjdXMgTWVpc3NuZXIgIDxtc21laXNzbkBmYXVpMDEuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CgoJKiBbb2xlLmhdCglNaXNjIHNtYWxsIGZpeGVzLgoKTW9uIFNlcCAgNCAwMDowMToyMyAxOTk1ICBKb24gVG9tYnMgPGpvbkBndGUuZXNpLnVzLmVzPgoKCSogW3JjL3N5c3Jlc19Fcy5yY10KCUZpcnN0IGF0dGVtcHQgYXQgU3BhbmlzaCBbRXNdIGxhbmd1YWdlIHN1cHBvcnQuCgpTdW4gU2VwICAzIDEzOjIyOjMzIDE5OTUgICAgIE1hcnRpbiB2b24gTG9ld2lzIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBbaW5jbHVkZS9hbGlhcy5oXVt3aW5kb3dzL2FsaWFzLmNdW2luY2x1ZGUvcmVsYXkzMi5oXQoJTmV3IGZpbGVzCgoJKiBbY29udHJvbHMvd2lkZ2V0cy5jXQoJV0lER0VUU19Jbml0OiByZWdpc3RlciBhbGlhcyB3aW5kb3cgcHJvY2VkdXJlcwoKCSogW2lmMTYzMi9jYWxsYmFjay5jXQoJQ2FsbFduZFByb2M6IENhbGwgYWxpYXMgZnVuY3Rpb25zIGlmIG5lY2Vzc2FyeQoKCSogW2lmMTYzMi9nZGkzMi5zcGVjXQoJR2V0U3RvY2tPYmplY3QsIFRleHRPdXRBOiBuZXcgcmVsYXlzCgoJKiBbbWlzYy91c2VyMzIuY11baWYxNjMyL3VzZXIzMi5zcGVjXVttaXNjL01ha2VmaWxlLmluXVttaXNjL0ltYWtlZmlsZV0KCXVzZXIzMi5jOiBuZXcgZmlsZQoJQmVnaW5QYWludCxDcmVhdGVXaW5kb3dFeEEsRGVmV2luZG93UHJvY0EsRGlzcGF0Y2hNZXNzYWdlLEVuZFBhaW50LAoJR2V0TWVzc2FnZUEsUmVnaXN0ZXJDbGFzc0EsU2hvd1dpbmRvdyxVcGRhdGVXaW5kb3c6IG5ldyByZWxheXMKCgkqIFtpZjE2MzIvd2lucHJvY3MzMi5zcGVjXVtsb2FkZXIvcGVfaW1hZ2UuY11bbG9hZGVyL21vZHVsZS5jXQoJUEVfV2luMzJDYWxsVG9TdGFydDogbmV3IGZ1bmN0aW9uCglNT0RVTEVfQ3JlYXRlSW5zdGFuY2U6IHJlbW92ZWQgc3RhdGljIGF0dHJpYnV0ZQoJTG9hZE1vZHVsZTogVHJ5IGxvYWRpbmcgUEUgaW1hZ2Ugb24gZXJyb3IgMjEKCVBFX0xvYWRNb2R1bGU6IG5ldyBmdW5jdGlvbgoJUEVfTG9hZEltYWdlOiBpbml0aWFsaXplIHBlX2RhdGEgd2l0aCAwCgkKCSogW2luY2x1ZGUvZGxscy5oXVtpbmNsdWRlL3BlZXhlLmhdCgltb3ZlZCBwZV9kYXRhIGFuZCB3X2ZpbGVzIHRvIHBlZXhlLmgKCQoJKiBbbWlzYy9zaGVsbC5jXQoJU2hlbGxBYm91dDogUmVnaXN0ZXIgQWJvdXRXbmRQcm9jIGFsaWFzZXMKCgkqIFttaXNjZW11L2ludDIxLmNdCgloYW5kbGUgMHg0NDBBIGFuZCAweERDCgoJKiBbbWlzY2VtdS9pbnQyZi5jXQoJaGFuZGxlIDB4ODQKCgkqIFtvYmplY3RzL2RpYi5jXQoJQ3JlYXRlRElCaXRtYXA6IGNvbXBsYWluIGlmIEJJVE1BUElORk9IRUFERVIgaXMgb2Ygd3Jvbmcgc2l6ZQoKCSogW3Rvb2xzL2J1aWxkLmNdCglpbmNsdWRlIHdpbmRvd3MuaCBhbmQgcmVsYXkzMi5oIGludG8gZ2VuZXJhdGVkIFdpbjMyIHJlbGF5cywKCWRvbid0IGRlY2xhcmUgdGhlIGltcGxlbWVudGF0aW9uIGFzIGludCAoKikoKTsKCWxpbWl0IGluIFdJTjMyX2J1aWx0aW4gd2FzIG9mZiBieSBvbmUKCgkqIFt3aW5kb3dzL2NhcmV0LmNdCglDQVJFVF9Jbml0aWFsaXplOiBuZXcgZnVuY3Rpb24sIGNhbGwgb24gc3RyYXRlZ2ljIHBsYWNlcwoKCSogW3dpbmRvd3MvbWVzc2FnZWJveC5jXQoJTWVzc2FnZUJveDogcmVnaXN0ZXIgbWVzc2FnZSBib3ggcHJvYyBhbGlhc2VzCgoJKiBbaWYxNjMyL2FkdmFwaTMyLnNwZWNdW2lmMTYzMi9jb21kbGczMi5zcGVjXQoJTmV3IGZpbGVzCgoJKiBbaWYxNjMyL01ha2VmaWxlLmluXVtpZjE2MzIvSW1ha2VmaWxlXVtpZjE2MzIvcmVsYXkzMi5jXQoJYWRkZWQgbmV3IHNwZWMgZmlsZXMKCVJFTEFZMzJfR2V0QnVpbHRpbkRMTDogcGVyZm9ybSBsb29rdXAgY2FzZSBpbnNlbnNpdGl2ZQoJUkVMQVkzMl9HZXRFbnRyeVBvaW50OiBzdGFydCBuYW1lIHNlYXJjaCBhdCAwCgoJKiBbaWYxNjMyL3VzZXIuc3BlY11baWYxNjMyL2tlcm5lbC5zcGVjXVtpZjE2MzIvZ2RpLnNwZWNdCglBZGRlZCBzdHVicyBmb3IgbmV3IFdpbjk1IEFQSQoKU2F0IFNlcCAyIDE5OTUgIE1hcnRpbiBSb3kKCgkqIFttaXNjL2NvbW1kbGcuY10KCUluIFdNX0lOSVRESUFMT0csIGN1cnJlbnQgZmlsdGVyIG11c3QgcmVmbGVjdCBscG9mbi0+bkZpbHRlckluZGV4LgogIAlXaGVuIHByb2Nlc3MgSURPSyBidXR0b24gaW4gRklMRURMR19XTUNvbW1hbmQoKSwKIAlscG9mbi0+bkZpbHRlckluZGV4IHNob3VsZCBiZSB1cGRhdGVkIHRvIGN1cnJlbnQgc2VsZWN0aW9uLgoKVGh1IEF1ZyAzMSAxNTowMDowMCAxOTk1IFJhbSdvbiBHYXJjJ2lhIDxyYW1vbkBpZTMuY2x1YnMuZXRzaXQudXBtLmVzPgoKCSogW2xvYWRlci9tb2R1bGUuY10gW2xvYWRlci9uZV9pbWFnZS5jXQoJQWRkZWQgc3VwcG9ydCBvZiBzZWxmLWxvYWRpbmcgbW9kdWxlcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnIDMxIDE3OjE5OjU3IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFtDb25maWd1cmVdCglBZGRlZCBjb21waWxlLXRpbWUgb3B0aW9uIGZvciBJUEMuCgoJKiBbY29uZmlndXJlLmluXQoJQWRkZWQgY29tbWFuZC1saW5lIG9wdGlvbnMgZm9yIGxhbmd1YWdlLCBJUEMgYW5kIG1hbGxvYwoJZGVidWdnaW5nLgoKCSogW2NvbnRyb2xzL21lbnUuY10KCVdNX01FTlVTRUxFQ1Qgd2FzIHNvbWV0aW1lcyBzZW50IHRvIHRoZSB3cm9uZyB3aW5kb3cuCgoJKiBbZGVidWdnZXIvYnJlYWsuY10KCUZvciB0aGUgJ25leHQnIGNvbW1hbmQsIG9ubHkgc3RlcCBvdmVyIGluc3RydWN0aW9uIHRoYXQgcmVxdWlyZQoJaXQuIFRoaXMgYWxsb3dzICduZXh0JyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aCBqbXAgYW5kIHJldAoJaW5zdHJ1Y3Rpb25zLgoKCSogW2lwYy8qLmNdIFttZW1vcnkvYXRvbS5jXSBbbWVtb3J5L2dsb2JhbC5jXQoJSVBDIGNhbiBub3cgYmUgY29uZmlndXJlZCBvdXQgYXQgY29tcGlsZS10aW1lLgoKCSogW2xvYWRlci90YXNrLmNdCglCdWcgZml4IGluIFRBU0tfUmVzY2hlZHVsZSgpIHRoYXQgY291bGQgY2F1c2UgYSB0YXNrIHRvIGJlIGRlbGV0ZWQKCXR3aWNlLgoKCSogW21pc2NlbXUvZG9zbWVtLmNdIChOZXcgZmlsZSkKCVBhcnRpYWwgZW11bGF0aW9uIG9mIHRoZSBCSU9TIGRhdGEgc2VnbWVudC4KCgkqIFttaXNjZW11L2luc3RyLmNdCglUcmFwIGF0dGVtcHRzIHRvIGFjY2VzcyBzZWxlY3RvciAweDQwIGFuZCByZW1hcCB0aGUgYWNjZXNzIHRvCglzZWdtZW50IF9fMDA0MEguCgoJKiBbdG9vbHMvYnVpbGQuY10KCUZpeGVkIGJ1ZyBpbiBDYWxsVG8zMl9MYXJnZVN0YWNrKCkgdGhhdCBjYXVzZWQgcHJvYmxlbXMgd2hlbgoJY29tcGlsaW5nIFdpbmUgd2l0aCB0aGUgLWZvbWl0LWZyYW1lLXBvaW50ZXIgb3B0aW9uLgoKCSogW3dpbmRvd3MvbWVzc2FnZS5jXQoJRml4ZWQgYnVnIGluIGhhcmR3YXJlIGV2ZW50IGhhbmRsaW5nIHRoYXQgY291bGQgY2F1c2Ugc29tZSBldmVudHMKCXRvIGdldCBpZ25vcmVkLgoKU2F0IEF1ZyAyNiAxMzoxMjo1OSBJU1QgMTk5NSBNaWNoYWVsIFZla3NsZXIgPG12ZWtzbGVyQHZuZXQuaWJtLmNvbT4KCgkqIFtpcGMvUkVBRE1FXSBbaXBjL2RkZS50ZXhdCglMYVRlWCBkb2N1bWVudGF0aW9uIGZvciB0aGUgaXBjIGFuZCBEREUgc3R1ZmYuCgpXZWQgQXVnIDIzIDIyOjAxOjIzIEdNVCAxOTk1IE1pY2hhZWwgVmVrc2xlciA8bXZla3NsZXJAdm5ldC5pYm0uY29tPgoKCSogW2lwYy9JbWFrZWZpbGVdIFtpcGMvd2luZV90ZXN0X3N0dWIuY10KCUZpeGVkIElQQyB0ZXN0aW5nLiBOb3cgaXQgY2FuIGJlIGNvbXBpbGVkIHdpdGggIm1ha2UgdGVzdHMiCgpXZWQgQXVnIDIzIDIxOjA0OjE0IDE5OTUgIEZvbnMgQm90bWFuICA8Ym90bWFuQHdhYi10aXMucmFib2Jhbmsubmw+CgoJKiBbaWYxNjMyL2tlcm5lbC5zcGVjXSBbaW5jbHVkZS93aW5kb3dzLmhdIFttaXNjL21haW4uY10KCUFkZGVkIEdldFdpbkRlYnVnSW5mby9TZXRXaW5EZWJ1Z0luZm8gc3R1YiBmb3IgcGxheWVyLmV4ZQoKU3VuIEF1ZyAgMjAgMTM6NDk6NDIgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW21pc2NlbXUvaW50MjEuY10KCU1pc2MgZml4IHRvIGludDIxLGFoPTQwICh3cml0ZSkgdG8gbWF0Y2ggX2x3cml0ZSgpLgoJQVg9MHg0NDBBIChjaGVjayBpZiBoYW5kbGUgaXMgcmVtb3RlKSBhZGRlZC4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglNb3ZlZCBtY2lTZW5kU3RyaW5nIHRvIG1jaXN0cmluZy5jLgoKCSogW211bHRpbWVkaWEvbWNpc3RyaW5nLmNdCglOZXcgZmlsZSwgc3RyaW5nIGludGVyZmFjZSBmb3IgTUNJIChub3QgY29tcGxldGUsIG5vdCB0aG9yb3VnaGx5Cgl0ZXN0ZWQpLgoKCSogW211bHRpbWVkaWEvYXVkaW8uY10KCUlPQ1RMIHByaW50cyBlcnJvcnM7IG9uZSBwYXJhbm9pZCBjaGVjayBkaXNhYmxlZC4KCgkqIFttaXNjL2ZpbGUuY10KCU1pc2Mgb3BlcmF0b3IgcHJlY2VkZW5jZSBmaXhlcy4KCgkqIFtpZjE2MzIvZ2RpLnNwZWNdIFtvYmplY3RzL2JpdGJsdC5jXQoJU3R1YiBmb3IgRmFzdFdpbmRvd0ZyYW1lIChwYXJhbWV0ZXJzIG5vdCBjb3JyZWN0KS4KClNhdCBBdWcgMTkgMDE6MzE6MjMgMTk5NSAgR3JhaGFtIE1lbmhlbm5pdHQgPGdmbUB3ZXJwbGUubWlyYS5uZXQuYXU+CgoJKiBbbG9hZGVyL25lX2ltYWdlLmNdCglQcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBpdGVyYXRlZCBzZWdtZW50cy4KClNhdCBBdWcgMTkgMDA6NDM6MDQgMTk5NSAgQW5kcmV3IFRheWxvciAgKGF0YXlsb3JAY2FkdmlzaW9uLmNvbSkKCgkqIFt3aW5kb3dzL21hcHBpbmcuY10KCUluIGZ1bmN0aW9uIE1BUFBJTkdfRml4SXNvdHJvcGljKCksIFZwb3J0RXh0W1hZXSBpcyBtdWx0aXBsaWVkIGJ5CiAJdGhlIGFic29sdXRlIHZhbHVlIG9mICh5ZGltIC8geGRpbSkgb3IgKHhkaW0gLyB5ZGltKS4KClRodSBBdWcgMTUgMjM6MDA6MTYgIEdyZWdvcnkgVHJ1YmV0c2tveSAgPGdyaXNoYUBtaXJhLmNvbT4KCgkqIFtvYmplY3RzL29lbWJpdG1hcC5jXQoJQWRkZWQgc29tZSBpbmNsdWRlcyBmb3IgV2luZG93cyA5NS4KCgkqIFtpbmNsdWRlL3N5c21ldHJpY3MuaF0KCUFkZGVkIHNvbWUgc3lzbWV0cmljcyBmb3IgV2luZG93cyA5NS4KCgkqIFtpbmNsdWRlL2JpdG1hcHMvKjk1XQoJTmV3IGZpbGVzOiBvYm1fY2xvc2VfOTUsIG9ibV9jbG9zZWRfOTUsIG9ibV9yZWR1Y2VfOTUsIG9ibV9yZWR1Y2VkXzk1CglvYm1fem9vbV85NSwgb2JtX3pvb21kXzk1IC0gdGhlc2UgYXJlIHNvbWUgcGl4bWFwcyBmb3IgV2luZG93cyA5NS4KClRodSBBdWcgMTAgMTI6MDA6MDAgMTk5NSAgSmFuIFdpbGxhbW93aXVzICAoamFuQGphbmhoLnNobmV0Lm9yZykKCgkqIFttaXNjL3NoZWxsLmNdIFtyYy9zeXNyZXMqLnJjXQoJVGhlIGNhcHRpb24gb2YgdGhlIFNoZWxsQWJvdXQgZGlhbG9nIGJveCBpcyBsYW5ndWFnZSBzcGVjaWZpYyBhbmQKIAlzaG91bGQgYmUgZGVmaW5lZCBpbiB0aGUgcmVzb3VyY2VzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaHUgQXVnIDE3IDE5OjMwOjE0IDE5OTUgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQHN1bnNpdGUudW5jLmVkdT4KCgkqIFsqL01ha2VmaWxlLmluXQoJUmVtb3ZlZCB3aW5lbGliY2xlYW4gdGFyZ2V0LCBhcyBpdCBkb2Vzbid0IHdvcmsgYW55d2F5LgoKCSogW2NvbnRyb2xzL2J1dHRvbi5jXQoJQXZvaWQgZHJhd2luZyB0aGUgZm9jdXMgcmVjdGFuZ2xlIG91dHNpZGUgb2YgdGhlIGJ1dHRvbi4KCgkqIFtjb250cm9scy93aWRnZXRzLmNdCglGaXhlZCBidWcgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgYnl0ZXMgZm9yIHRoZSBFZGl0Cgljb250cm9sIChjYXVzZWQgRXVkb3JhIHRvIGNyYXNoKS4KCgkqIFtkZWJ1Z2dlci8qXSBbaW5jbHVkZS9kZWJ1Z2dlci5oXQoJVW5pZmllZCBkZWJ1Z2dlciBhZGRyZXNzIGhhbmRsaW5nLiBTZWdtZW50ZWQgYW5kIGxpbmVhciBhZGRyZXNzZXMKCWFyZSBubyBncm91cGVkIGluIGEgc2luZ2xlIHR5cGUgREJHX0FERFIuCglBbGwgY29tbWFuZHMgbm93IGFjY2VwdCBzZWc6b2ZmIGFkZHJlc3Nlcy4KCU1vZHVsZSBlbnRyeSBwb2ludHMgYXJlIG5vdyBsb2FkZWQgdXBvbiBmaXJzdCBlbnRyeSB0byB0aGUKCWRlYnVnZ2VyLCBzbyB0aGF0IGVudHJ5IHBvaW50cyBvZiB0aGUgbG9hZGVkIGV4ZWN1dGFibGUgYWxzbwoJYXBwZWFyIGluIHRoZSBzeW1ib2wgdGFibGUuCgoJKiBbaW5jbHVkZS9yZWdpc3RlcnMuaF0gW21pc2NlbXUvKi5jXQoJUmVnaXN0ZXIgbWFjcm9zIGFyZSBub3cgb2YgdGhlIGZvcm0gJ0FYX3JlZyhjb250ZXh0KScgaW5zdGVhZCBvZiAnQVgnLgoJVGhpcyBtYWtlcyBjb2RlIGxlc3MgcmVhZGFibGUsIGJ1dCB3aWxsIHByZXZlbnQgYSBsb3Qgb2YgbmFtZQoJY2xhc2hlcyB3aXRoIG90aGVyIGRlZmluaXRpb25zLiBJdCBhbHNvIGF2b2lkcyBhIGhpZGRlbiByZWZlcmVuY2UKCXRvIHRoZSAnY29udGV4dCcgdmFyaWFibGUuCgoJKiBbaXBjL2RkZV9hdG9tLmNdIFttaXNjL2F0b20uY10KCUFsbCAqQWRkQXRvbSBhbmQgKkZpbmRBdG9tIGZ1bmN0aW9ucyBub3cgdGFrZSBhIFNFR1BUUiBwYXJhbWV0ZXIsCgl0byBhbGxvdyBzdXBwb3J0aW5nIGludGVnZXIgYXRvbXMuCglNb3ZlZCBhdG9tLmMgdG8gbWVtb3J5LyBkaXJlY3RvcnkuCgoJKiBbbG9hZGVyL3Rhc2suY10KCUZpeGVkIGVudmlyb25tZW50IGFsbG9jYXRpb24gdG8gY29tcHV0ZSB0aGUgc2l6ZSBkeW5hbWljYWxseS4KCUFkZGVkICd3aW5kaXInIGVudmlyb25tZW50IHZhcmlhYmxlLgoJRml4ZWQgR2V0RE9TRW52aXJvbm1lbnQoKSB0byByZXR1cm4gdGhlIGN1cnJlbnQgdGFzayBlbnZpcm9ubWVudC4KCgkqIFt3aW5kb3dzL21lc3NhZ2UuY10KCUZpeGVkIGJ1ZyBpbiBNU0dfR2V0V2luZG93Rm9yRXZlbnQoKS4KCldlZCBBdWcgIDkgMTE6NDA6NDMgMTk5NSAgTWFyY3VzIE1laXNzbmVyICA8bXNtZWlzc25AZmF1aTAxLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgoKCSogW2luY2x1ZGUvb2xlLmhdCglBZGRlZCBhIGxvdCBvZiBzdHJ1Y3R1cmVzICBmcm9tIG15IEJvcmxhbmQgTWFudWFsLiBOZWl0aGVyIGNvbXBsZXRlLAoJbm9yIDEwMCUgcmlnaHQgKGNoZWNrIHBsZWFzZSkKCQoJKiBbbWlzYy9zaGVsbC5jXQoJRml4ZWQgc29tZSBvZiB0aGUgUmVnKiBmdW5jdGlvbnMuCglFbmhhbmNlZCBTaGVsbEV4ZWN1dGUuCglQbGVhc2UgdGVzdDogd2luZSAicmVnZWRpdC5leGUgL3YiIG1wbGF5ZXIuZXhlIHNvdW5kcmVjLmV4ZQoJRG8gWU9VIGtub3cgdGhlIGZvcm1hdCBvZiBcV0lORE9XU1xSRUcuREFUPyBNYWlsIG1lIHBsZWFzZSA6KQoKCSogW21pc2MvZG9zX2ZzLmNdCglNYWtlIHVtc2RvcyBtb3VudGVkIHdpbmRvd3MgZGlycyB3b3JrIGFnYWluLgoKCSogW21pc2NlbXUvZW11bGF0ZS5jXQoJQWRkZWQgc29tZSBjb21tZW50cywgcHJlaW1wbGVtZW50YXRpb24gb2Ygc3ViZnVuY3Rpb24gNy4KCgkqIFttdWx0aW1lZGlhL21tc3lzdGVtLmNdCglJbXBsZW1lbnRlZCBtY2lTZW5kU3RyaW5nLiBub3QgY29tcGxldGUsIG5vdCBjbGVhbiwgbm90CgluZWNlc3NhcmlseSB3b3JraW5nIChvbmx5IGNoZWNrZWQgd2l0aCBhIHByb2dyYW0gd2hpY2ggdXNlcwogCSdjZGF1ZGlvJyAob25lIHdvcmtpbmcgcHJvZ3JhbSBpcyBjb29sLmV4ZSwgYSBzaGFyZXdhcmUgd2F2ZWRpdG9yCiAJd2l0aCBjZGF1ZGlvIHBsYXkgZmFjaWxpdGllcy4pCgoJKiBbbXVsdGltZWRpYS9tY2ljZGEuY10KCVNlZ3B0ciBmaXhlcyBpbiBEcml2ZXJQcm9jCglEZWZhdWx0IGNkcm9tIGRyaXZlIGluIExpbnV4IGlzIC9kZXYvY2Ryb20gLi4uIHVzdWFsbHkgYSBzeW1ib2xpYwogCWxpbmsgdG8geW91ciByZWFsIGNkcm9tIGRldmljZS4KClR1ZSBBdWcgIDggMTk6NDE6NTAgQ0RUIDE5OTUgRGFuaWVsIFNjaGVwbGVyIDxka3MyQGNlYy53dXN0bC5lZHU+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