KnNwZWxsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDcuMGFhLiAgTGFzdCBjaGFuZ2U6IDIwMDUgQXVnIDI5CgoKCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMCSAgYnkgQnJhbSBNb29sZW5hYXIKCgpTcGVsbCBjaGVja2luZwkJCQkJCSpzcGVsbCoKCjEuIFF1aWNrIHN0YXJ0CQkJfHNwZWxsLXF1aWNrc3RhcnR8CjIuIFJlbWFya3Mgb24gc3BlbGwgY2hlY2tpbmcJfHNwZWxsLXJlbWFya3N8CjMuIEdlbmVyYXRpbmcgYSBzcGVsbCBmaWxlCXxzcGVsbC1ta3NwZWxsfAo0LiBTcGVsbCBmaWxlIGZvcm1hdAkJfHNwZWxsLWZpbGUtZm9ybWF0fAoKe1ZpIGRvZXMgbm90IGhhdmUgYW55IG9mIHRoZXNlIGNvbW1hbmRzfQoKU3BlbGwgY2hlY2tpbmcgaXMgbm90IGF2YWlsYWJsZSB3aGVuIHRoZSB8K3N5bnRheHwgZmVhdHVyZSBoYXMgYmVlbiBkaXNhYmxlZAphdCBjb21waWxlIHRpbWUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gUXVpY2sgc3RhcnQJCQkJCQkqc3BlbGwtcXVpY2tzdGFydCoKClRoaXMgY29tbWFuZCBzd2l0Y2hlcyBvbiBzcGVsbCBjaGVja2luZzogPgoKCTpzZXRsb2NhbCBzcGVsbCBzcGVsbGxhbmc9ZW5fdXMKClRoaXMgc3dpdGNoZXMgb24gdGhlICdzcGVsbCcgb3B0aW9uIGFuZCBzcGVjaWZpZXMgdG8gY2hlY2sgZm9yIFVTIEVuZ2xpc2guCgpUaGUgd29yZHMgdGhhdCBhcmUgbm90IHJlY29nbml6ZWQgYXJlIGhpZ2hsaWdodGVkIHdpdGggb25lIG9mIHRoZXNlOgoJU3BlbGxCYWQJd29yZCBub3QgcmVjb2duaXplZAkJCXxobC1TcGVsbEJhZHwKCVNwZWxsQ2FwCXdvcmQgbm90IGNhcGl0YWxpc2VkCQkJfGhsLVNwZWxsQ2FwfAoJU3BlbGxSYXJlCXJhcmUgd29yZAkJCQl8aGwtU3BlbGxSYXJlfAoJU3BlbGxMb2NhbAl3cm9uZyBzcGVsbGluZyBmb3Igc2VsZWN0ZWQgcmVnaW9uCXxobC1TcGVsbExvY2FsfAoKVmltIG9ubHkgY2hlY2tzIHdvcmRzIGZvciBzcGVsbGluZywgdGhlcmUgaXMgbm8gZ3JhbW1hciBjaGVjay4KCklmIHRoZSAnbW91c2Vtb2RlbCcgb3B0aW9uIGlzIHNldCB0byAicG9wdXAiIGFuZCB0aGUgY3Vyc29yIGlzIG9uIGEgYmFkbHkKc3BlbGxlZCB3b3JkIG9yIGl0IGlzICJwb3B1cF9zZXRwb3MiIGFuZCB0aGUgbW91c2UgcG9pbnRlciBpcyBvbiBhIGJhZGx5CnNwZWxsZWQgd29yZCwgdGhlbiB0aGUgcG9wdXAgbWVudSB3aWxsIGNvbnRhaW4gYW4gc3VibWVudSB0byByZXBsYWNlIHRoZSBiYWQKd29yZC4gIE5vdGU6IHRoaXMgc2xvd3MgZG93biB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgcG9wdXAgbWVudS4KClRvIHNlYXJjaCBmb3IgdGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkOgoKCQkJCQkJCSpdcyogKkU3NTYqCl1zCQkJTW92ZSB0byBuZXh0IG1pc3NwZWxsZWQgd29yZCBhZnRlciB0aGUgY3Vyc29yLgoJCQlBIGNvdW50IGJlZm9yZSB0aGUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byByZXBlYXQuCgkJCSd3cmFwc2NhbicgYXBwbGllcy4KCgkJCQkJCQkqW3MqCltzCQkJTGlrZSAiXXMiIGJ1dCBzZWFyY2ggYmFja3dhcmRzLCBmaW5kIHRoZSBtaXNzcGVsbGVkCgkJCXdvcmQgYmVmb3JlIHRoZSBjdXJzb3IuICBEb2Vzbid0IHJlY29nbml6ZSB3b3JkcwoJCQlzcGxpdCBvdmVyIHR3byBsaW5lcywgdGh1cyBtYXkgc3RvcCBhdCB3b3JkcyB0aGF0IGFyZQoJCQlub3QgaGlnaGxpZ2h0ZWQgYXMgYmFkLiAgRG9lcyBub3Qgc3RvcCBhdCB3b3JkIHdpdGgKCQkJbWlzc2luZyBjYXBpdGFsIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUuCgoJCQkJCQkJKl1TKgpdUwkJCUxpa2UgIl1zIiBidXQgb25seSBzdG9wIGF0IGJhZCB3b3Jkcywgbm90IGF0IHJhcmUKCQkJd29yZHMgb3Igd29yZHMgZm9yIGFub3RoZXIgcmVnaW9uLgoKCQkJCQkJCSpbUyoKW1MJCQlMaWtlICJdUyIgYnV0IHNlYXJjaCBiYWNrd2FyZHMuCgoKVG8gYWRkIHdvcmRzIHRvIHlvdXIgb3duIHdvcmQgbGlzdDoJCQkJKkU3NjQqCgoJCQkJCQkJKnpnKgp6ZwkJCUFkZCB3b3JkIHVuZGVyIHRoZSBjdXJzb3IgYXMgYSBnb29kIHdvcmQgdG8gdGhlIGZpcnN0CgkJCW5hbWUgaW4gJ3NwZWxsZmlsZScuICBJbiBWaXN1YWwgbW9kZSB0aGUgc2VsZWN0ZWQKCQkJY2hhcmFjdGVycyBhcmUgYWRkZWQgYXMgYSB3b3JkIChpbmNsdWRpbmcgd2hpdGUKCQkJc3BhY2UhKS4gIElmIHRoZSB3b3JkIGlzIGV4cGxpY2l0bHkgbWFya2VkIGFzIGJhZCB3b3JkCgkJCWluIGFub3RoZXIgc3BlbGwgZmlsZSB0aGUgcmVzdWx0IGlzIHVucHJlZGljdGFibGUuCgkJCUEgY291bnQgbWF5IHByZWNlZGUgdGhlIGNvbW1hbmQgdG8gaW5kaWNhdGUgdGhlIGVudHJ5CgkJCWluICdzcGVsbGZpbGUnIHRvIGJlIHVzZWQuICBBIGNvdW50IG9mIHR3byB1c2VzIHRoZQoJCQlzZWNvbmQgZW50cnkuCgoJCQkJCQkJKnpHKgp6RwkJCUxpa2UgInpnIiBidXQgYWRkIHRoZSB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkIGxpc3QKCQkJfGludGVybmFsLXdvcmRsaXN0fC4KCgkJCQkJCQkqencqCnp3CQkJTGlrZSAiemciIGJ1dCBtYXJrIHRoZSB3b3JkIGFzIGEgd3JvbmcgKGJhZCkgd29yZC4KCgkJCQkJCQkqelcqCnpXCQkJTGlrZSAienciIGJ1dCBhZGQgdGhlIHdvcmQgdG8gdGhlIGludGVybmFsIHdvcmQgbGlzdAoJCQl8aW50ZXJuYWwtd29yZGxpc3R8LgoKCQkJCQkJCSo6c3BlKiAqOnNwZWxsZ29vZCoKOltjb3VudF1zcGVbbGxnb29kXSB7d29yZH0KCQkJQWRkIHt3b3JkfSBhcyBhIGdvb2Qgd29yZCB0byAnc3BlbGxmaWxlJywgbGlrZSB3aXRoCgkJCSJ6ZyIuICBXaXRob3V0IGNvdW50IHRoZSBmaXJzdCBuYW1lIGlzIHVzZWQsIHdpdGggYQoJCQljb3VudCBvZiB0d28gdGhlIHNlY29uZCBlbnRyeSwgZXRjLgoKOnNwZVtsbGdvb2RdISB7d29yZH0JQWRkIHt3b3JkfSBhcyBhIGdvb2Qgd29yZCB0byB0aGUgaW50ZXJuYWwgd29yZCBsaXN0LAoJCQlsaWtlIHdpdGggInpHIi4KCgkJCQkJCQkqOnNwZWxsdyogKjpzcGVsbHdyb25nKgo6W2NvdW50XXNwZWxsd1tyb25nXSB7d29yZH0KCQkJQWRkIHt3b3JkfSBhcyBhIHdyb25nIChiYWQpIHdvcmQgdG8gJ3NwZWxsZmlsZScsIGFzCgkJCXdpdGggInp3Ii4gIFdpdGhvdXQgY291bnQgdGhlIGZpcnN0IG5hbWUgaXMgdXNlZCwgd2l0aAoJCQlhIGNvdW50IG9mIHR3byB0aGUgc2Vjb25kIGVudHJ5LCBldGMuCgo6c3BlbGx3W3JvbmddISB7d29yZH0JQWRkIHt3b3JkfSBhcyBhIHdyb25nIChiYWQpIHdvcmQgdG8gdGhlIGludGVybmFsIHdvcmQKCQkJbGlzdC4KCkFmdGVyIGFkZGluZyBhIHdvcmQgdG8gJ3NwZWxsZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZHMgaXRzIGFzc29jaWF0ZWQKIi5zcGwiIGZpbGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHVwZGF0ZWQgYW5kIHJlbG9hZGVkLiAgSWYgeW91IGNoYW5nZQonc3BlbGxmaWxlJyBtYW51YWxseSB5b3UgbmVlZCB0byB1c2UgdGhlIHw6bWtzcGVsbHwgY29tbWFuZC4gIFRoaXMgc2VxdWVuY2Ugb2YKY29tbWFuZHMgbW9zdGx5IHdvcmtzIHdlbGw6ID4KCTplZGl0IDxmaWxlIGluICdzcGVsbGZpbGUnPgo8CShtYWtlIGNoYW5nZXMgdG8gdGhlIHNwZWxsIGZpbGUpID4KCTpta3NwZWxsISAlCgpNb3JlIGRldGFpbHMgYWJvdXQgdGhlICdzcGVsbGZpbGUnIGZvcm1hdCBiZWxvdyB8c3BlbGwtd29yZGxpc3QtZm9ybWF0fC4KCgkJCQkJCQkqaW50ZXJuYWwtd29yZGxpc3QqClRoZSBpbnRlcm5hbCB3b3JkIGxpc3QgaXMgdXNlZCBmb3IgYWxsIGJ1ZmZlcnMgd2hlcmUgJ3NwZWxsJyBpcyBzZXQuICBJdCBpcwpub3Qgc3RvcmVkLCBpdCBpcyBsb3N0IHdoZW4geW91IGV4aXQgVmltLiAgSXQgaXMgYWxzbyBjbGVhcmVkIHdoZW4gJ2VuY29kaW5nJwppcyBzZXQuCgoKRmluZGluZyBzdWdnZXN0aW9ucyBmb3IgYmFkIHdvcmRzOgoJCQkJCQkJKno/Kgp6PwkJCUZvciB0aGUgd29yZCB1bmRlci9hZnRlciB0aGUgY3Vyc29yIHN1Z2dlc3QgY29ycmVjdGx5CgkJCXNwZWxsZWQgd29yZHMuICBUaGlzIGFsc28gd29ya3MgdG8gZmluZCBhbHRlcm5hdGl2ZXMKCQkJZm9yIGEgd29yZCB0aGF0IGlzIG5vdCBoaWdobGlnaHRlZCBhcyBhIGJhZCB3b3JkLAoJCQllLmcuLCB3aGVuIHRoZSB3b3JkIGFmdGVyIGl0IGlzIGJhZC4KCQkJVGhlIHJlc3VsdHMgYXJlIHNvcnRlZCBvbiBzaW1pbGFyaXR5IHRvIHRoZSB3b3JkCgkJCXVuZGVyL2FmdGVyIHRoZSBjdXJzb3IuCgkJCVRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUuICBIaXQgQ1RSTC1DIHdoZW4geW91IGdldAoJCQlib3JlZC4KCgkJCUlmIHRoZSBjb21tYW5kIGlzIHVzZWQgd2l0aG91dCBhIGNvdW50IHRoZQoJCQlhbHRlcm5hdGl2ZXMgYXJlIGxpc3RlZCBhbmQgeW91IGNhbiBlbnRlciB0aGUgbnVtYmVyCgkJCW9mIHlvdXIgY2hvaWNlIG9yIHByZXNzIDxFbnRlcj4gaWYgeW91IGRvbid0IHdhbnQgdG8KCQkJcmVwbGFjZS4gIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG1vdXNlIHRvIGNsaWNrIG9uIHlvdXIKCQkJY2hvaWNlIChvbmx5IHdvcmtzIGlmIHRoZSBtb3VzZSBjYW4gYmUgdXNlZCBpbiBOb3JtYWwKCQkJbW9kZSBhbmQgd2hlbiB0aGVyZSBhcmUgbm8gbGluZSB3cmFwcykuICBDbGljayBvbiB0aGUKCQkJZmlyc3QgbGluZSAodGhlIGhlYWRlcikgdG8gY2FuY2VsLgoKCQkJSWYgYSBjb3VudCBpcyB1c2VkIHRoYXQgc3VnZ2VzdGlvbiBpcyB1c2VkLCB3aXRob3V0CgkJCXByb21wdGluZy4gIEZvciBleGFtcGxlLCAiMXo/IiBhbHdheXMgdGFrZXMgdGhlIGZpcnN0CgkJCXN1Z2dlc3Rpb24uCgoJCQlJZiAndmVyYm9zZScgaXMgbm9uLXplcm8gYSBzY29yZSB3aWxsIGJlIGRpc3BsYXllZAoJCQl3aXRoIHRoZSBzdWdnZXN0aW9ucyB0byBpbmRpY2F0ZSB0aGUgbGlrZWxpbmVzcyB0byB0aGUKCQkJYmFkbHkgc3BlbGxlZCB3b3JkICh0aGUgaGlnaGVyIHRoZSBzY29yZSB0aGUgbW9yZQoJCQlkaWZmZXJlbnQpLgoJCQlXaGVuIGEgd29yZCB3YXMgcmVwbGFjZWQgdGhlIHJlZG8gY29tbWFuZCAiLiIgd2lsbAoJCQlyZXBlYXQgdGhlIHdvcmQgcmVwbGFjZW1lbnQuICBUaGlzIHdvcmtzIGxpa2UgImNpdyIsCgkJCXRoZSBnb29kIHdvcmQgYW5kIDxFc2M+LiAgVGhpcyBkb2VzIE5PVCB3b3JrIGZvciBUaGFpCgkJCWFuZCBvdGhlciBsYW5ndWFnZXMgd2l0aG91dCBzcGFjZXMgYmV0d2VlbiB3b3Jkcy4KCgkJCQkJKjpzcGVsbHIqICo6c3BlbGxyZXBhbGwqICpFNzUyKiAqRTc1MyoKOnNwZWxscltlcGFsbF0JCVJlcGVhdCB0aGUgcmVwbGFjZW1lbnQgZG9uZSBieSB8ej98IGZvciBhbGwgbWF0Y2hlcwoJCQl3aXRoIHRoZSByZXBsYWNlZCB3b3JkIGluIHRoZSBjdXJyZW50IHdpbmRvdy4KCkluIEluc2VydCBtb2RlLCB3aGVuIHRoZSBjdXJzb3IgaXMgYWZ0ZXIgYSBiYWRseSBzcGVsbGVkIHdvcmQsIHlvdSBjYW4gdXNlCkNUUkwtWCBzIHRvIGZpbmQgc3VnZ2VzdGlvbnMuICBUaGlzIHdvcmtzIGxpa2UgSW5zZXJ0IG1vZGUgY29tcGxldGlvbi4gIFVzZQpDVFJMLU4gdG8gdXNlIHRoZSBuZXh0IHN1Z2dlc3Rpb24sIENUUkwtUCB0byBnbyBiYWNrLiB8aV9DVFJMLVhfc3wKClRoZSAnc3BlbGxzdWdnZXN0JyBvcHRpb24gaW5mbHVlbmNlcyBob3cgdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgaXMgZ2VuZXJhdGVkCmFuZCBzb3J0ZWQuICBTZWUgfCdzcGVsbHN1Z2dlc3QnfC4KClRoZSAnc3BlbGxjYXBjaGVjaycgb3B0aW9uIGlzIHVzZWQgdG8gY2hlY2sgdGhlIGZpcnN0IHdvcmQgb2YgYSBzZW50ZW5jZQpzdGFydHMgd2l0aCBhIGNhcGl0YWwuICBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgdGhlIGZpcnN0IHdvcmQgaW4gdGhlIGZpbGUuCldoZW4gdGhlcmUgaXMgYSBsaW5lIGJyZWFrIHJpZ2h0IGFmdGVyIGEgc2VudGVuY2UgdGhlIGhpZ2hsaWdodGluZyBvZiB0aGUgbmV4dApsaW5lIG1heSBiZSBwb3N0cG9uZWQuICBVc2UgfENUUkwtTHwgd2hlbiBuZWVkZWQuICBBbHNvIHNlZSB8c2V0LXNwYy1hdXRvfCBmb3IKaG93IGl0IGNhbiBiZSBzZXQgYXV0b21hdGljYWxseSB3aGVuICdzcGVsbGxhbmcnIGlzIHNldC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBSZW1hcmtzIG9uIHNwZWxsIGNoZWNraW5nCQkJCSpzcGVsbC1yZW1hcmtzKgoKUEVSRk9STUFOQ0UKClZpbSBkb2VzIG9uLXRoZS1mbHkgc3BlbGwgY2hlY2tpbmcuICBUbyBtYWtlIHRoaXMgd29yayBmYXN0IHRoZSB3b3JkIGxpc3QgaXMKbG9hZGVkIGluIG1lbW9yeS4gIFRodXMgdGhpcyB1c2VzIGEgbG90IG9mIG1lbW9yeSAoMSBNYnl0ZSBvciBtb3JlKS4gIFRoZXJlCm1pZ2h0IGFsc28gYmUgYSBub3RpY2VhYmxlIGRlbGF5IHdoZW4gdGhlIHdvcmQgbGlzdCBpcyBsb2FkZWQsIHdoaWNoIGhhcHBlbnMKd2hlbiAnc3BlbGwnIGlzIHNldCBhbmQgd2hlbiAnc3BlbGxsYW5nJyBpcyBzZXQgd2hpbGUgJ3NwZWxsJyB3YXMgYWxyZWFkeSBzZXQuClRvIG1pbmltaXplIHRoZSBkZWxheSBlYWNoIHdvcmQgbGlzdCBpcyBvbmx5IGxvYWRlZCBvbmNlLCBpdCBpcyBub3QgZGVsZXRlZAp3aGVuICdzcGVsbGxhbmcnIGlzIG1hZGUgZW1wdHkgb3IgJ3NwZWxsJyBpcyByZXNldC4gIFdoZW4gJ2VuY29kaW5nJyBpcyBzZXQKYWxsIHRoZSB3b3JkIGxpc3RzIGFyZSByZWxvYWRlZCwgdGh1cyB5b3UgbWF5IG5vdGljZSBhIGRlbGF5IHRoZW4gdG9vLgoKClJFR0lPTlMKCkEgd29yZCBtYXkgYmUgc3BlbGxlZCBkaWZmZXJlbnRseSBpbiB2YXJpb3VzIHJlZ2lvbnMuICBGb3IgZXhhbXBsZSwgRW5nbGlzaApjb21lcyBpbiAoYXQgbGVhc3QpIHRoZXNlIHZhcmlhbnRzOgoKCWVuCQlhbGwgcmVnaW9ucwoJZW5fYXUJCUF1c3RyYWxpYQoJZW5fY2EJCUNhbmFkYQoJZW5fZ2IJCUdyZWF0IEJyaXRhaW4KCWVuX256CQlOZXcgWmVhbGFuZAoJZW5fdXMJCVVTQQoKV29yZHMgdGhhdCBhcmUgbm90IHVzZWQgaW4gb25lIHJlZ2lvbiBidXQgYXJlIHVzZWQgaW4gYW5vdGhlciByZWdpb24gYXJlCmhpZ2hsaWdodGVkIHdpdGggU3BlbGxMb2NhbCB8aGwtU3BlbGxMb2NhbHwuCgpBbHdheXMgdXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciB0aGUgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBuYW1lcy4KCldoZW4gYWRkaW5nIGEgd29yZCB3aXRoIHx6Z3wgb3IgYW5vdGhlciBjb21tYW5kIGl0J3MgYWx3YXlzIGFkZGVkIGZvciBhbGwKcmVnaW9ucy4gIFlvdSBjYW4gY2hhbmdlIHRoYXQgYnkgbWFudWFsbHkgZWRpdGluZyB0aGUgJ3NwZWxsZmlsZScuICBTZWUKfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuICBOb3RlIHRoYXQgdGhlIHJlZ2lvbnMgYXMgc3BlY2lmaWVkIGluIHRoZSBmaWxlcyBpbgonc3BlbGxmaWxlJyBhcmUgb25seSB1c2VkIHdoZW4gYWxsIGVudHJpZXMgaW4gInNwZWxsbGFuZyIgc3BlY2lmeSB0aGUgc2FtZQpyZWdpb24gKG5vdCBjb3VudGluZyBmaWxlcyBzcGVjaWZpZWQgYnkgdGhlaXIgLnNwbCBuYW1lKS4KCgkJCQkJCQkqc3BlbGwtZ2VybWFuKgpTcGVjaWZpYyBleGNlcHRpb246IEZvciBHZXJtYW4gdGhlc2Ugc3BlY2lhbCByZWdpb25zIGFyZSB1c2VkOgoJZGUJCWFsbCBHZXJtYW4gd29yZHMgYWNjZXB0ZWQKCWRlX2RlCQlvbGQgYW5kIG5ldyBzcGVsbGluZwoJZGVfMTkJCW9sZCBzcGVsbGluZwoJZGVfMjAJCW5ldyBzcGVsbGluZwoJZGVfYXQJCUF1c3RyaWEKCWRlX2NoCQlTd2l0emVybGFuZAoKCQkJCQkJCSpzcGVsbC15aWRkaXNoKgpZaWRkaXNoIHJlcXVpcmVzIHVzaW5nICJ1dGYtOCIgZW5jb2RpbmcsIGJlY2F1c2Ugb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycwp1c2VkLiAgSWYgeW91IGFyZSB1c2luZyBsYXRpbjEgVmltIHdpbGwgdXNlIHRyYW5zbGl0ZXJhdGVkIChyb21hbml6ZWQpIFlpZGRpc2gKaW5zdGVhZC4gIElmIHlvdSB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRlZCBZaWRkaXNoIHdpdGggdXRmLTggdXNlICJ5aS10ciIuCkluIGEgdGFibGU6CgknZW5jb2RpbmcnCSdzcGVsbGxhbmcnCgl1dGYtOAkJeWkJCVlpZGRpc2gKCWxhdGluMQkJeWkJCXRyYW5zbGl0ZXJhdGVkIFlpZGRpc2gKCXV0Zi04CQl5aS10cgkJdHJhbnNsaXRlcmF0ZWQgWWlkZGlzaAoKClNQRUxMIEZJTEVTCQkJCQkJKnNwZWxsLWxvYWQqCgpWaW0gc2VhcmNoZXMgZm9yIHNwZWxsIGZpbGVzIGluIHRoZSAic3BlbGwiIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3JpZXMgaW4KJ3J1bnRpbWVwYXRoJy4gIFRoZSBuYW1lIGlzOiBMTC5FRUUuc3BsLCB3aGVyZToKCUxMCXRoZSBsYW5ndWFnZSBuYW1lCglFRUUJdGhlIHZhbHVlIG9mICdlbmNvZGluZycKClRoZSB2YWx1ZSBmb3IgIkxMIiBjb21lcyBmcm9tICdzcGVsbGxhbmcnLCBidXQgZXhjbHVkZXMgdGhlIHJlZ2lvbiBuYW1lLgpFeGFtcGxlczoKCSdzcGVsbGxhbmcnCUxMIH4KCWVuX3VzCQllbgoJZW4tcmFyZQkJZW4tcmFyZQoJbWVkaWNhbF9jYQltZWRpY2FsCgpPbmx5IHRoZSBmaXJzdCBmaWxlIGlzIGxvYWRlZCwgdGhlIG9uZSB0aGF0IGlzIGZpcnN0IGluICdydW50aW1lcGF0aCcuICBJZgp0aGlzIHN1Y2NlZWRzIHRoZW4gYWRkaXRpb25hbGx5IGZpbGVzIHdpdGggdGhlIG5hbWUgTEwuRUVFLmFkZC5zcGwgYXJlIGxvYWRlZC4KQWxsIHRoZSBvbmVzIHRoYXQgYXJlIGZvdW5kIGFyZSB1c2VkLgoKQWRkaXRpb25hbGx5LCB0aGUgZmlsZXMgcmVsYXRlZCB0byB0aGUgbmFtZXMgaW4gJ3NwZWxsZmlsZScgYXJlIGxvYWRlZC4gIFRoZXNlCmFyZSB0aGUgZmlsZXMgdGhhdCB8emd8IGFuZCB8end8IGFkZCBnb29kIGFuZCB3cm9uZyB3b3JkcyB0by4KCkV4Y2VwdGlvbnM6Ci0gVmltIHVzZXMgImxhdGluMSIgd2hlbiAnZW5jb2RpbmcnIGlzICJpc28tODg1OS0xNSIuICBUaGUgZXVybyBzaWduIGRvZXNuJ3QKICBtYXR0ZXIgZm9yIHNwZWxsaW5nLgotIFdoZW4gbm8gc3BlbGwgZmlsZSBmb3IgJ2VuY29kaW5nJyBpcyBmb3VuZCAiYXNjaWkiIGlzIHRyaWVkLiAgVGhpcyBvbmx5CiAgd29ya3MgZm9yIGxhbmd1YWdlcyB3aGVyZSBuZWFybHkgYWxsIHdvcmRzIGFyZSBBU0NJSSwgc3VjaCBhcyBFbmdsaXNoLiAgSXQKICBoZWxwcyB3aGVuICdlbmNvZGluZycgaXMgbm90ICJsYXRpbjEiLCBzdWNoIGFzIGlzby04ODU5LTIsIGFuZCBFbmdsaXNoIHRleHQKICBpcyBiZWluZyBlZGl0ZWQuICBGb3IgdGhlICIuYWRkIiBmaWxlcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBmb3VuZCBtYWluCiAgc3BlbGwgZmlsZSBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHdpdGggdGhlc2UgdmFsdWVzOgoJJ3J1bnRpbWVwYXRoJyBpcyAifi8udmltLC91c3Ivc2hhcmUvdmltNzAsfi8udmltL2FmdGVyIgoJJ2VuY29kaW5nJyAgICBpcyAiaXNvLTg4NTktMiIKCSdzcGVsbGxhbmcnICAgaXMgInBsIgoKVmltIHdpbGwgbG9vayBmb3I6CjEuIH4vLnZpbS9zcGVsbC9wbC5pc28tODg1OS0yLnNwbAoyLiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmlzby04ODU5LTIuc3BsCjMuIH4vLnZpbS9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKNC4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKNS4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmlzby04ODU5LTIuYWRkLnNwbAoKVGhpcyBhc3N1bWVzIDEuIGlzIG5vdCBmb3VuZCBhbmQgMi4gaXMgZm91bmQuCgpJZiAnZW5jb2RpbmcnIGlzICJsYXRpbjEiIFZpbSB3aWxsIGxvb2sgZm9yOgoxLiB+Ly52aW0vc3BlbGwvcGwubGF0aW4xLnNwbAoyLiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmxhdGluMS5zcGwKMy4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmxhdGluMS5zcGwKNC4gfi8udmltL3NwZWxsL3BsLmFzY2lpLnNwbAo1LiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmFzY2lpLnNwbAo2LiB+Ly52aW0vYWZ0ZXIvc3BlbGwvcGwuYXNjaWkuc3BsCgpUaGlzIGFzc3VtZXMgbm9uZSBvZiB0aGVtIGFyZSBmb3VuZCAoUG9saXNoIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aGVuIGxlYXZpbmcKb3V0IHRoZSBub24tQVNDSUkgY2hhcmFjdGVycykuCgpTcGVsbGluZyBmb3IgRUJDRElDIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgoKQSBzcGVsbCBmaWxlIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgJ2VuY29kaW5nJy4gIFNlZQp8c3BlbGwtbWtzcGVsbHwgYWJvdXQgaG93IHRvIGNyZWF0ZSBhIHNwZWxsIGZpbGUuICBDb252ZXJ0aW5nIGEgc3BlbGwgZmlsZQp3aXRoICJpY29udiIgd2lsbCBOT1Qgd29yayEKCgkJCQkJCQkqRTc1OCogKkU3NTkqCldoZW4gbG9hZGluZyBhIHNwZWxsIGZpbGUgVmltIGNoZWNrcyB0aGF0IGl0IGlzIHByb3Blcmx5IGZvcm1hdHRlZC4gIElmIHlvdQpnZXQgYW4gZXJyb3IgdGhlIGZpbGUgbWF5IGJlIHRydW5jYXRlZCwgbW9kaWZpZWQgb3IgaW50ZW5kZWQgZm9yIGFub3RoZXIgVmltCnZlcnNpb24uCgoKV09SRFMKClZpbSB1c2VzIGEgZml4ZWQgbWV0aG9kIHRvIHJlY29nbml6ZSBhIHdvcmQuICBUaGlzIGlzIGluZGVwZW5kZW50IG9mCidpc2tleXdvcmQnLCBzbyB0aGF0IGl0IGFsc28gd29ya3MgaW4gaGVscCBmaWxlcyBhbmQgZm9yIGxhbmd1YWdlcyB0aGF0CmluY2x1ZGUgY2hhcmFjdGVycyBsaWtlICctJyBpbiAnaXNrZXl3b3JkJy4gIFRoZSB3b3JkIGNoYXJhY3RlcnMgZG8gZGVwZW5kIG9uCidlbmNvZGluZycuCgpUaGUgdGFibGUgd2l0aCB3b3JkIGNoYXJhY3RlcnMgaXMgc3RvcmVkIGluIHRoZSBtYWluIC5zcGwgZmlsZS4gIFRoZXJlZm9yZSBpdAptYXR0ZXJzIHdoYXQgdGhlIGN1cnJlbnQgbG9jYWxlIGlzIHdoZW4gZ2VuZXJhdGluZyBpdCEgIEEgLmFkZC5zcGwgZmlsZSBkb2VzCm5vdCBjb250YWluIGEgd29yZCB0YWJsZSB0aG91Z2guCgpBIHdvcmQgdGhhdCBzdGFydHMgd2l0aCBhIGRpZ2l0IGlzIGFsd2F5cyBpZ25vcmVkLiAgVGhhdCBpbmNsdWRlcyBoZXggbnVtYmVycwppbiB0aGUgZm9ybSAweGZmIGFuZCAwWEZGLgoKCldPUkQgQ09NQklOQVRJT05TCgpJdCBpcyBwb3NzaWJsZSB0byBzcGVsbC1jaGVjayB3b3JkcyB0aGF0IGluY2x1ZGUgYSBzcGFjZS4gIFRoaXMgaXMgdXNlZCB0bwpyZWNvZ25pemUgd29yZHMgdGhhdCBhcmUgaW52YWxpZCB3aGVuIHVzZWQgYnkgdGhlbXNlbHZlcywgZS5nLiBmb3IgImV0IGFsLiIuCkl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVjb2duaXplICJ0aGUgdGhlIiBhbmQgaGlnaGxpZ2h0IGl0LgoKVGhlIG51bWJlciBvZiBzcGFjZXMgaXMgaXJyZWxldmFudC4gIEluIG1vc3QgY2FzZXMgYSBsaW5lIGJyZWFrIG1heSBhbHNvCmFwcGVhci4gIEhvd2V2ZXIsIHRoaXMgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZpbmQgb3V0IHdoZXJlIHRvIHN0YXJ0IGNoZWNraW5nCmZvciBzcGVsbGluZyBtaXN0YWtlcy4gIFdoZW4geW91IG1ha2UgYSBjaGFuZ2UgdG8gb25lIGxpbmUgYW5kIG9ubHkgdGhhdCBsaW5lCmlzIHJlZHJhd24gVmltIHdvbid0IGxvb2sgaW4gdGhlIHByZXZpb3VzIGxpbmUsIHRodXMgd2hlbiAiZXQiIGlzIGF0IHRoZSBlbmQKb2YgdGhlIHByZXZpb3VzIGxpbmUgImFsLiIgd2lsbCBiZSBmbGFnZ2VkIGFzIGFuIGVycm9yLiAgQW5kIHdoZW4geW91IHR5cGUKInRoZTxDUj50aGUiIHRoZSBoaWdobGlnaHRpbmcgZG9lc24ndCBhcHBlYXIgdW50aWwgdGhlIGZpcnN0IGxpbmUgaXMgcmVkcmF3bi4KVXNlIHxDVFJMLUx8IHRvIHJlZHJhdyByaWdodCBhd2F5LiAgIltzIiB3aWxsIGFsc28gc3RvcCBhdCBhIHdvcmQgY29tYmluYXRpb24Kd2l0aCBhIGxpbmUgYnJlYWsuCgpXaGVuIGVuY291bnRlcmluZyBhIGxpbmUgYnJlYWsgVmltIHNraXBzIGNoYXJhY3RlcnMgc3VjaCBhcyAnKicsICc+JyBhbmQgJyInLApzbyB0aGF0IGNvbW1lbnRzIGluIEMsIHNoZWxsIGFuZCBWaW0gY29kZSBjYW4gYmUgc3BlbGwgY2hlY2tlZC4KCgpTWU5UQVggSElHSExJR0hUSU5HCQkJCQkqc3BlbGwtc3ludGF4KgoKRmlsZXMgdGhhdCB1c2Ugc3ludGF4IGhpZ2hsaWdodGluZyBjYW4gc3BlY2lmeSB3aGVyZSBzcGVsbCBjaGVja2luZyBzaG91bGQgYmUKZG9uZToKCjEuICBldmVyeXdoZXJlCQkJICAgZGVmYXVsdAoyLiAgaW4gc3BlY2lmaWMgaXRlbXMJCSAgIHVzZSAiY29udGFpbnM9QFNwZWxsIgozLiAgZXZlcnl3aGVyZSBidXQgc3BlY2lmaWMgaXRlbXMgIHVzZSAiY29udGFpbnM9QE5vU3BlbGwiCgpGb3IgdGhlIHNlY29uZCBtZXRob2QgYWRkaW5nIHRoZSBATm9TcGVsbCBjbHVzdGVyIHdpbGwgZGlzYWJsZSBzcGVsbCBjaGVja2luZwphZ2Fpbi4gIFRoaXMgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhZGQgQFNwZWxsIHRvIHRoZSBjb21tZW50cyBvZiBhCnByb2dyYW0sIGFuZCBhZGQgQE5vU3BlbGwgZm9yIGl0ZW1zIHRoYXQgc2hvdWxkbid0IGJlIGNoZWNrZWQuCgoKVklNIFNDUklQVFMKCklmIHlvdSB3YW50IHRvIHdyaXRlIGEgVmltIHNjcmlwdCB0aGF0IGRvZXMgc29tZXRoaW5nIHdpdGggc3BlbGxpbmcsIHlvdSBtYXkKZmluZCB0aGVzZSBmdW5jdGlvbnMgdXNlZnVsOgoKICAgIHNwZWxsYmFkd29yZCgpCWZpbmQgYmFkbHkgc3BlbGxlZCB3b3JkIGF0IHRoZSBjdXJzb3IKICAgIHNwZWxsc3VnZ2VzdCgpCWdldCBsaXN0IG9mIHNwZWxsaW5nIHN1Z2dlc3Rpb25zCiAgICBzb3VuZGZvbGQoKQkJZ2V0IHRoZSBzb3VuZC1hLWxpa2UgdmVyc2lvbiBvZiBhIHdvcmQKCgpTRVRUSU5HICdzcGVsbGNhcGNoZWNrJyBBVVRPTUFUSUNBTExZCQkJKnNldC1zcGMtYXV0byoKCkFmdGVyIHRoZSAnc3BlbGxsYW5nJyBvcHRpb24gaGFzIGJlZW4gc2V0IHN1Y2Nlc3NmdWxseSwgVmltIHdpbGwgc291cmNlIHRoZQpmaWxlcyAic3BlbGwvTEFORy52aW0iIGluICdydW50aW1lcGF0aCcuICAiTEFORyIgaXMgdGhlIHZhbHVlIG9mICdzcGVsbGxhbmcnCnVwIHRvIHRoZSBmaXJzdCBjb21tYSwgZG90IG9yIHVuZGVyc2NvcmUuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBvcHRpb25zCnNwZWNpZmljYWxseSBmb3IgdGhlIGxhbmd1YWdlLCBlc3BlY2lhbGx5ICdzcGVsbGNhcGNoZWNrJy4KClRoZSBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBmZXcgb2YgdGhlc2UgZmlsZXMuICBVc2UgdGhpcyBjb21tYW5kIHRvIHNlZSB3aGF0CnRoZXkgZG86ID4KCTpuZXh0ICRWSU1SVU5USU1FL3NwZWxsLyoudmltCgpOb3RlIHRoYXQgdGhlIGRlZmF1bHQgc2NyaXB0cyBkb24ndCBzZXQgJ3NwZWxsY2FwY2hlY2snIGlmIGl0IHdhcyBjaGFuZ2VkIGZyb20KdGhlIGRlZmF1bHQgdmFsdWUuICBUaGlzIGFzc3VtZXMgdGhlIHVzZXIgcHJlZmVycyBhbm90aGVyIHZhbHVlIHRoZW4uCgoKRE9VQkxFIFNDT1JJTkcJCQkJCQkqc3BlbGwtZG91YmxlLXNjb3JpbmcqCgpUaGUgJ3NwZWxsc3VnZ2VzdCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCAiZG91YmxlIiBzY29yaW5nLiAgVGhpcwptZWNoYW5pc20gaXMgYmFzZWQgb24gdGhlIHByaW5jaXBsZSB0aGF0IHRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc3BlbGxpbmcKbWlzdGFrZXM6CgoxLiBZb3Uga25vdyBob3cgdG8gc3BlbGwgdGhlIHdvcmQsIGJ1dCBtaXN0eXBlIHNvbWV0aGluZy4gIFRoaXMgcmVzdWx0cyBpbiBhCiAgIHNtYWxsIGVkaXRpbmcgZGlzdGFuY2UgKGNoYXJhY3RlciBzd2FwcGVkL29taXR0ZWQvaW5zZXJ0ZWQpIGFuZCBwb3NzaWJseSBhCiAgIHdvcmQgdGhhdCBzb3VuZHMgY29tcGxldGVseSBkaWZmZXJlbnQuCgoyLiBZb3UgZG9uJ3Qga25vdyBob3cgdG8gc3BlbGwgdGhlIHdvcmQgYW5kIHR5cGUgc29tZXRoaW5nIHRoYXQgc291bmRzIHJpZ2h0LgogICBUaGUgZWRpdCBkaXN0YW5jZSBjYW4gYmUgYmlnIGJ1dCB0aGUgd29yZCBpcyBzaW1pbGFyIGFmdGVyIHNvdW5kLWZvbGRpbmcuCgpTaW5jZSBzY29yZXMgZm9yIHRoZXNlIHR3byBtaXN0YWtlcyB3aWxsIGJlIHZlcnkgZGlmZmVyZW50IHdlIHVzZSBhIGxpc3QKZm9yIGVhY2ggYW5kIG1peCB0aGVtLgoKVGhlIHNvdW5kLWZvbGRpbmcgaXMgc2xvdyBhbmQgcGVvcGxlIHRoYXQga25vdyB0aGUgbGFuZ3VhZ2Ugd29uJ3QgbWFrZSB0aGUKc2Vjb25kIGtpbmQgb2YgbWlzdGFrZXMuICBUaGVyZWZvcmUgJ3NwZWxsc3VnZ2VzdCcgY2FuIGJlIHNldCB0byBzZWxlY3QgdGhlCnByZWZlcnJlZCBtZXRob2QgZm9yIHNjb3JpbmcgdGhlIHN1Z2dlc3Rpb25zLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIEdlbmVyYXRpbmcgYSBzcGVsbCBmaWxlCQkJCSpzcGVsbC1ta3NwZWxsKgoKVmltIHVzZXMgYSBiaW5hcnkgZmlsZSBmb3JtYXQgZm9yIHNwZWxsaW5nLiAgVGhpcyBncmVhdGx5IHNwZWVkcyB1cCBsb2FkaW5nCnRoZSB3b3JkIGxpc3QgYW5kIGtlZXBzIGl0IHNtYWxsLgoJCQkJCQkgICAgKi5hZmYqICouZGljKiAqTXlzcGVsbCoKWW91IGNhbiBjcmVhdGUgYSBWaW0gc3BlbGwgZmlsZSBmcm9tIHRoZSAuYWZmIGFuZCAuZGljIGZpbGVzIHRoYXQgTXlzcGVsbAp1c2VzLiAgTXlzcGVsbCBpcyB1c2VkIGJ5IE9wZW5PZmZpY2Uub3JnIGFuZCBNb3ppbGxhLiAgWW91IHNob3VsZCBiZSBhYmxlIHRvCmZpbmQgdGhlbSBoZXJlOgoJaHR0cDovL2xpbmd1Y29tcG9uZW50Lm9wZW5vZmZpY2Uub3JnL3NwZWxsX2RpYy5odG1sCllvdSBjYW4gYWxzbyB1c2UgYSBwbGFpbiB3b3JkIGxpc3QuICBUaGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUsIHRoZSBjaG9pY2UKZGVwZW5kcyBvbiB3aGF0IHdvcmQgbGlzdHMgeW91IGNhbiBmaW5kLgoKSWYgeW91IGluc3RhbGwgQWFwIChmcm9tIHd3dy5hLWEtcC5vcmcpIHlvdSBjYW4gdXNlIHRoZSByZWNpcGVzIGluIHRoZQpydW50aW1lL3NwZWxsLz8/LyBkaXJlY3Rvcmllcy4gIEFhcCB3aWxsIHRha2UgY2FyZSBvZiBkb3dubG9hZGluZyB0aGUgZmlsZXMsCmFwcGx5IHBhdGNoZXMgbmVlZGVkIGZvciBWaW0gYW5kIGJ1aWxkIHRoZSAuc3BsIGZpbGUuCgpNYWtlIHN1cmUgeW91ciBjdXJyZW50IGxvY2FsZSBpcyBzZXQgcHJvcGVybHksIG90aGVyd2lzZSBWaW0gZG9lc24ndCBrbm93IHdoYXQKY2hhcmFjdGVycyBhcmUgdXBwZXIvbG93ZXIgY2FzZSBsZXR0ZXJzLiAgSWYgdGhlIGxvY2FsZSBpc24ndCBhdmFpbGFibGUgKGUuZy4sCndoZW4gdXNpbmcgYW4gTVMtV2luZG93cyBjb2RlcGFnZSBvbiBVbml4KSBhZGQgdGFibGVzIHRvIHRoZSAuYWZmIGZpbGUKfHNwZWxsLWFmZml4LWNoYXJzfC4gIElmIHRoZSAuYWZmIGZpbGUgZG9lc24ndCBkZWZpbmUgYSB0YWJsZSB0aGVuIHRoZSB3b3JkCnRhYmxlIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNwZWxsaW5nIGlzIHVzZWQuICBJZiBzcGVsbGluZyBpcyBub3QgYWN0aXZlCnRoZW4gVmltIHdpbGwgdHJ5IHRvIGd1ZXNzLgoKCQkJCQkJCSo6bWtzcCogKjpta3NwZWxsKgo6bWtzcFtlbGxdWyFdIFstYXNjaWldIHtvdXRuYW1lfSB7aW5uYW1lfSAuLi4KCQkJR2VuZXJhdGUgYSBWaW0gc3BlbGwgZmlsZSB3b3JkIGxpc3RzLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIC90bXAvbmwgbmxfTkwud29yZHMKPAkJCQkJCQkJKkU3NTEqCgkJCVdoZW4ge291dG5hbWV9IGVuZHMgaW4gIi5zcGwiIGl0IGlzIHVzZWQgYXMgdGhlIG91dHB1dAoJCQlmaWxlIG5hbWUuICBPdGhlcndpc2UgaXQgc2hvdWxkIGJlIGEgbGFuZ3VhZ2UgbmFtZSwKCQkJc3VjaCBhcyAiZW4iLCB3aXRob3V0IHRoZSByZWdpb24gbmFtZS4gIFRoZSBmaWxlCgkJCXdyaXR0ZW4gd2lsbCBiZSAie291dG5hbWV9LntlbmNvZGluZ30uc3BsIiwgd2hlcmUKCQkJe2VuY29kaW5nfSBpcyB0aGUgdmFsdWUgb2YgdGhlICdlbmNvZGluZycgb3B0aW9uLgoKCQkJV2hlbiB0aGUgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMgWyFdIG11c3QgYmUgdXNlZAoJCQl0byBvdmVyd3JpdGUgaXQuCgoJCQlXaGVuIHRoZSBbLWFzY2lpXSBhcmd1bWVudCBpcyBwcmVzZW50LCB3b3JkcyB3aXRoCgkJCW5vbi1hc2NpaSBjaGFyYWN0ZXJzIGFyZSBza2lwcGVkLiAgVGhlIHJlc3VsdGluZyBmaWxlCgkJCWVuZHMgaW4gImFzY2lpLnNwbCIuCgoJCQlUaGUgaW5wdXQgY2FuIGJlIHRoZSBNeXNwZWxsIGZvcm1hdCBmaWxlcyB7aW5uYW1lfS5hZmYKCQkJYW5kIHtpbm5hbWV9LmRpYy4gIElmIHtpbm5hbWV9LmFmZiBkb2VzIG5vdCBleGlzdCB0aGVuCgkJCXtpbm5hbWV9IGlzIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBvZiBhIHBsYWluIHdvcmQKCQkJbGlzdC4KCgkJCU11bHRpcGxlIHtpbm5hbWV9IGFyZ3VtZW50cyBjYW4gYmUgZ2l2ZW4gdG8gY29tYmluZQoJCQlyZWdpb25zIGludG8gb25lIFZpbSBzcGVsbCBmaWxlLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIH4vLnZpbS9zcGVsbC9lbiAvdG1wL2VuX1VTIC90bXAvZW5fQ0EgL3RtcC9lbl9BVQo8CQkJVGhpcyBjb21iaW5lcyB0aGUgRW5nbGlzaCB3b3JkIGxpc3RzIGZvciBVUywgQ0EgYW5kIEFVCgkJCWludG8gb25lIGVuLnNwbCBmaWxlLgoJCQlVcCB0byBlaWdodCByZWdpb25zIGNhbiBiZSBjb21iaW5lZC4gKkU3NTQqICo3NTUqCgkJCVRoZSBSRVAgYW5kIFNBTCBpdGVtcyBvZiB0aGUgZmlyc3QgLmFmZiBmaWxlIHdoZXJlCgkJCXRoZXkgYXBwZWFyIGFyZSB1c2VkLiB8c3BlbGwtUkVQfCB8c3BlbGwtU0FMfAoKCQkJVGhpcyBjb21tYW5kIHVzZXMgYSBsb3Qgb2YgbWVtb3J5LCByZXF1aXJlZCB0byBmaW5kCgkJCXRoZSBvcHRpbWFsIHdvcmQgdHJlZSAoUG9saXNoLCBJdGFsaWFuIGFuZCBIdW5nYXJpYW4KCQkJcmVxdWlyZSBzZXZlcmFsIGh1bmRyZWQgTWJ5dGUpLiAgVGhlIGZpbmFsIHJlc3VsdCB3aWxsCgkJCWJlIG11Y2ggc21hbGxlciwgYmVjYXVzZSBjb21wcmVzc2lvbiBpcyB1c2VkLiAgVG8KCQkJYXZvaWQgcnVubmluZyBvdXQgb2YgbWVtb3J5IGNvbXByZXNzaW9uIHdpbGwgYmUgZG9uZQoJCQlub3cgYW5kIHRoZW4uICBUaGlzIGNhbiBiZSB0dW5lZCB3aXRoIHRoZSAnbWtzcGVsbG1lbScKCQkJb3B0aW9uLgoKCQkJQWZ0ZXIgdGhlIHNwZWxsIGZpbGUgd2FzIHdyaXR0ZW4gYW5kIGl0IHdhcyBiZWluZyB1c2VkCgkJCWluIGEgYnVmZmVyIGl0IHdpbGwgYmUgcmVsb2FkZWQgYXV0b21hdGljYWxseS4KCjpta3NwW2VsbF0gWy1hc2NpaV0ge25hbWV9LntlbmN9LmFkZAoJCQlMaWtlICI6bWtzcGVsbCIgYWJvdmUsIHVzaW5nIHtuYW1lfS57ZW5jfS5hZGQgYXMgdGhlCgkJCWlucHV0IGZpbGUgYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZQoJCQlkaXJlY3RvcnkgdGhhdCBoYXMgIi5zcGwiIGFwcGVuZGVkLgoKOm1rc3BbZWxsXSBbLWFzY2lpXSB7bmFtZX0KCQkJTGlrZSAiOm1rc3BlbGwiIGFib3ZlLCB1c2luZyB7bmFtZX0gYXMgdGhlIGlucHV0IGZpbGUKCQkJYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKCQkJdGhhdCBoYXMgIi57ZW5jfS5zcGwiIGFwcGVuZGVkLgoKVmltIHdpbGwgcmVwb3J0IHRoZSBudW1iZXIgb2YgZHVwbGljYXRlIHdvcmRzLiAgVGhpcyBtaWdodCBiZSBhIG1pc3Rha2UgaW4gdGhlCmxpc3Qgb2Ygd29yZHMuICBCdXQgc29tZXRpbWVzIGl0IGlzIHVzZWQgdG8gaGF2ZSBkaWZmZXJlbnQgcHJlZml4ZXMgYW5kCnN1ZmZpeGVzIGZvciB0aGUgc2FtZSBiYXNpYyB3b3JkIHRvIGF2b2lkIHRoZW0gY29tYmluaW5nIChlLmcuIEN6ZWNoIHVzZXMKdGhpcykuICBJZiB5b3Ugd2FudCBWaW0gdG8gcmVwb3J0IGFsbCBkdXBsaWNhdGUgd29yZHMgc2V0IHRoZSAndmVyYm9zZScKb3B0aW9uLgoKU2luY2UgeW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGEgTXlzcGVsbCB3b3JkIGxpc3QgZm9yIHVzZSB3aXRoIFZpbSB0aGUKZm9sbG93aW5nIHByb2NlZHVyZSBpcyByZWNvbW1lbmRlZDoKCjEuIE9idGFpbiB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgZnJvbSBNeXNwZWxsLgoyLiBNYWtlIGEgY29weSBvZiB0aGVzZSBmaWxlcyB0byB4eF9ZWS5vcmlnLmFmZiBhbmQgeHhfWVkub3JpZy5kaWMuCjMuIENoYW5nZSB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgdG8gcmVtb3ZlIGJhZCB3b3JkcywgYWRkIG1pc3NpbmcKICAgd29yZHMsIGRlZmluZSB3b3JkIGNoYXJhY3RlcnMgd2l0aCBGT0wvTE9XL1VQUCwgZXRjLiAgVGhlIGRpc3RyaWJ1dGVkCiAgICJzcmMvc3BlbGwvKi5kaWZmIiBmaWxlcyBjYW4gYmUgdXNlZC4KNC4gU3RhcnQgVmltIHdpdGggdGhlIHJpZ2h0IGxvY2FsZSBhbmQgdXNlIHw6bWtzcGVsbHwgdG8gZ2VuZXJhdGUgdGhlIFZpbQogICBzcGVsbCBmaWxlLgo1LiBUcnkgb3V0IHRoZSBzcGVsbCBmaWxlIHdpdGggIjpzZXQgc3BlbGwgc3BlbGxsYW5nPXh4IiBpZiB5b3Ugd3JvdGUgaXQgaW4KICAgYSBzcGVsbCBkaXJlY3RvcnkgaW4gJ3J1bnRpbWVwYXRoJywgb3IgIjpzZXQgc3BlbGxsYW5nPXh4LmVuYy5zcGwiIGlmIHlvdQogICB3cm90ZSBpdCBzb21ld2hlcmUgZWxzZS4KCldoZW4gdGhlIE15c3BlbGwgZmlsZXMgYXJlIHVwZGF0ZWQgeW91IGNhbiBtZXJnZSB0aGUgZGlmZmVyZW5jZXM6CjEuIE9idGFpbiB0aGUgbmV3IE15c3BlbGwgZmlsZXMgYXMgeHhfWVkubmV3LmFmZiBhbmQgeHhfVVUubmV3LmRpYy4KMi4gVXNlIFZpbWRpZmYgdG8gc2VlIHdoYXQgY2hhbmdlZDogPgoJdmltZGlmZiB4eF9ZWS5vcmlnLmRpYyB4eF9ZWS5uZXcuZGljCjMuIFRha2Ugb3ZlciB0aGUgY2hhbmdlcyB5b3UgbGlrZSBpbiB4eF9ZWS5kaWMuCiAgIFlvdSBtYXkgYWxzbyBuZWVkIHRvIGNoYW5nZSB4eF9ZWS5hZmYuCjQuIFJlbmFtZSB4eF9ZWS5uZXcuZGljIHRvIHh4X1lZLm9yaWcuZGljIGFuZCB4eF9ZWS5uZXcuYWZmIHRvIHh4X1lZLm5ldy5hZmYuCgoKU1BFTEwgRklMRSBWRVJTSU9OUwkJCQkJKkU3NzAqICpFNzcxKiAqRTc3MioKClNwZWxsIGNoZWNraW5nIGlzIGEgcmVsYXRpdmVseSBuZXcgZmVhdHVyZSBpbiBWaW0sIHRodXMgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQouc3BsIGZpbGUgZm9ybWF0IHdpbGwgYmUgY2hhbmdlZCB0byBzdXBwb3J0IG1vcmUgbGFuZ3VhZ2VzLiAgVmltIHdpbGwgY2hlY2sKdGhlIHZhbGlkaXR5IG9mIHRoZSBzcGVsbCBmaWxlIGFuZCByZXBvcnQgYW55dGhpbmcgd3JvbmcuCgoJRTc3MTogT2xkIHNwZWxsIGZpbGUsIG5lZWRzIHRvIGJlIHVwZGF0ZWQgfgpUaGlzIHNwZWxsIGZpbGUgaXMgb2xkZXIgdGhhbiB5b3VyIFZpbS4gIFlvdSBuZWVkIHRvIHVwZGF0ZSB0aGUgLnNwbCBmaWxlLgoKCUU3NzI6IFNwZWxsIGZpbGUgaXMgZm9yIG5ld2VyIHZlcnNpb24gb2YgVmltIH4KVGhpcyBtZWFucyB0aGUgc3BlbGwgZmlsZSB3YXMgbWFkZSBmb3IgYSBsYXRlciB2ZXJzaW9uIG9mIFZpbS4gIFlvdSBuZWVkIHRvCnVwZGF0ZSBWaW0uCgoJRTc3MDogVW5zdXBwb3J0ZWQgc2VjdGlvbiBpbiBzcGVsbCBmaWxlIH4KVGhpcyBtZWFucyB0aGUgc3BlbGwgZmlsZSB3YXMgbWFkZSBmb3IgYSBsYXRlciB2ZXJzaW9uIG9mIFZpbSBhbmQgY29udGFpbnMgYQpzZWN0aW9uIHRoYXQgaXMgcmVxdWlyZWQgZm9yIHRoZSBzcGVsbCBmaWxlIHRvIHdvcmsuICBJbiB0aGlzIGNhc2UgaXQncwpwcm9iYWJseSBhIGdvb2QgaWRlYSB0byB1cGdyYWRlIHlvdXIgVmltLgoKClNQRUxMIEZJTEUgRFVNUAoKSWYgZm9yIHNvbWUgcmVhc29uIHlvdSB3YW50IHRvIGNoZWNrIHdoYXQgd29yZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudGx5CnVzZWQgc3BlbGxpbmcgZmlsZXMsIHVzZSB0aGlzIGNvbW1hbmQ6CgoJCQkJCQkJKjpzcGVsbGR1bXAqICo6c3BlbGxkKgo6c3BlbGxkW3VtcF0JCU9wZW4gYSBuZXcgd2luZG93IGFuZCBmaWxsIGl0IHdpdGggYWxsIGN1cnJlbnRseSB2YWxpZAoJCQl3b3Jkcy4gIENvbXBvdW5kIHdvcmRzIGFyZSBub3QgaW5jbHVkZWQuCgkJCU5vdGU6IEZvciBzb21lIGxhbmd1YWdlcyB0aGUgcmVzdWx0IG1heSBiZSBlbm9ybW91cywKCQkJY2F1c2luZyBWaW0gdG8gcnVuIG91dCBvZiBtZW1vcnkuCgpUaGUgZm9ybWF0IG9mIHRoZSB3b3JkIGxpc3QgaXMgdXNlZCB8c3BlbGwtd29yZGxpc3QtZm9ybWF0fC4gIFlvdSBzaG91bGQgYmUKYWJsZSB0byByZWFkIGl0IHdpdGggIjpta3NwZWxsIiB0byBnZW5lcmF0ZSBvbmUgLnNwbCBmaWxlIHRoYXQgaW5jbHVkZXMgYWxsCnRoZSB3b3Jkcy4KCldoZW4gYWxsIGVudHJpZXMgdG8gJ3NwZWxsbGFuZycgdXNlIHRoZSBzYW1lIHJlZ2lvbnMgb3Igbm8gcmVnaW9ucyBhdCBhbGwgdGhlbgp0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGlzIGluY2x1ZGVkIGluIHRoZSBkdW1wZWQgd29yZHMuICBPdGhlcndpc2Ugb25seSB3b3Jkcwpmb3IgdGhlIGN1cnJlbnQgcmVnaW9uIGFyZSBpbmNsdWRlZCBhbmQgbm8gIi9yZWdpb25zIiBsaW5lIGlzIGdlbmVyYXRlZC4KCkNvbW1lbnQgbGluZXMgd2l0aCB0aGUgbmFtZSBvZiB0aGUgLnNwbCBmaWxlIGFyZSB1c2VkIGFzIGEgaGVhZGVyIGFib3ZlIHRoZQp3b3JkcyB0aGF0IHdlcmUgZ2VuZXJhdGVkIGZyb20gdGhhdCAuc3BsIGZpbGUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gU3BlbGwgZmlsZSBmb3JtYXQJCQkJCSpzcGVsbC1maWxlLWZvcm1hdCoKClRoaXMgaXMgdGhlIGZvcm1hdCBvZiB0aGUgZmlsZXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgcGVyc29uIHdobyBjcmVhdGVzIGFuZAptYWludGFpbnMgYSB3b3JkIGxpc3QuCgpOb3RlIHRoYXQgd2UgYXZvaWQgdGhlIHdvcmQgImRpY3Rpb25hcnkiIGhlcmUuICBUaGF0IGlzIGJlY2F1c2UgdGhlIGdvYWwgb2YKc3BlbGwgY2hlY2tpbmcgZGlmZmVycyBmcm9tIHdyaXRpbmcgYSBkaWN0aW9uYXJ5IChhcyBpbiB0aGUgYm9vaykuICBGb3IKc3BlbGxpbmcgd2UgbmVlZCBhIGxpc3Qgb2Ygd29yZHMgdGhhdCBhcmUgT0ssIHRodXMgc2hvdWxkIG5vdCB0byBiZQpoaWdobGlnaHRlZC4gIFBlcnNvbiBhbmQgY29tcGFueSBuYW1lcyB3aWxsIG5vdCBhcHBlYXIgaW4gYSBkaWN0aW9uYXJ5LCBidXQgZG8KYXBwZWFyIGluIGEgd29yZCBsaXN0LiAgQW5kIHNvbWUgb2xkIHdvcmRzIGFyZSByYXJlbHkgdXNlZCB3aGlsZSB0aGV5IGFyZQpjb21tb24gbWlzc3BlbGxpbmdzLiAgVGhlc2UgZG8gYXBwZWFyIGluIGEgZGljdGlvbmFyeSBidXQgbm90IGluIGEgd29yZCBsaXN0LgoKVGhlcmUgYXJlIHR3byBmb3JtYXRzOiBBIHN0cmFpZ2h0IGxpc3Qgb2Ygd29yZHMgYW5kIGEgbGlzdCB1c2luZyBhZmZpeApjb21wcmVzc2lvbi4gIFRoZSBmaWxlcyB3aXRoIGFmZml4IGNvbXByZXNzaW9uIGFyZSB1c2VkIGJ5IE15c3BlbGwgKE1vemlsbGEKYW5kIE9wZW5PZmZpY2Uub3JnKS4gIFRoaXMgcmVxdWlyZXMgdHdvIGZpbGVzLCBvbmUgd2l0aCAuYWZmIGFuZCBvbmUgd2l0aCAuZGljCmV4dGVuc2lvbi4KCgpGT1JNQVQgT0YgU1RSQUlHSFQgV09SRCBMSVNUCQkJCSpzcGVsbC13b3JkbGlzdC1mb3JtYXQqCgpUaGUgd29yZHMgbXVzdCBhcHBlYXIgb25lIHBlciBsaW5lLiAgVGhhdCBpcyBhbGwgdGhhdCBpcyByZXF1aXJlZC4KCkFkZGl0aW9uYWxseSB0aGUgZm9sbG93aW5nIGl0ZW1zIGFyZSByZWNvZ25pemVkOgoKLSBFbXB0eSBhbmQgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuCgotIExpbmVzIHN0YXJ0aW5nIHdpdGggYSAjIGFyZSBpZ25vcmVkIChjb21tZW50IGxpbmVzKS4KCi0gQSBsaW5lIHN0YXJ0aW5nIHdpdGggIi9lbmNvZGluZz0iLCBiZWZvcmUgYW55IHdvcmQsIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcKICBvZiB0aGUgZmlsZS4gIEFmdGVyIHRoZSBzZWNvbmQgJz0nIGNvbWVzIGFuIGVuY29kaW5nIG5hbWUuICBUaGlzIHRlbGxzIFZpbQogIHRvIHNldHVwIGNvbnZlcnNpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIHRvICdlbmNvZGluZycuICBUaHVzIHlvdSBjYW4KICB1c2Ugb25lIHdvcmQgbGlzdCBmb3Igc2V2ZXJhbCB0YXJnZXQgZW5jb2RpbmdzLgoKLSBBIGxpbmUgc3RhcnRpbmcgd2l0aCAiL3JlZ2lvbnM9IiBzcGVjaWZpZXMgdGhlIHJlZ2lvbiBuYW1lcyB0aGF0IGFyZQogIHN1cHBvcnRlZC4gIEVhY2ggcmVnaW9uIG5hbWUgbXVzdCBiZSB0d28gQVNDSUkgbGV0dGVycy4gIFRoZSBmaXJzdCBvbmUgaXMKICByZWdpb24gMS4gIFRodXMgIi9yZWdpb25zPXVzY2EiIGhhcyByZWdpb24gMSAidXMiIGFuZCByZWdpb24gMiAiY2EiLgogIEluIGFuIGFkZGl0aW9uIHdvcmQgbGlzdCB0aGUgcmVnaW9uIG5hbWVzIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgbWFpbiB3b3JkCiAgbGlzdCEKCi0gT3RoZXIgbGluZXMgc3RhcnRpbmcgd2l0aCAnLycgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiAgVGhlIG9uZXMgdGhhdAogIGFyZSBub3QgcmVjb2duaXplZCBhcmUgaWdub3JlZCAoYnV0IHlvdSBkbyBnZXQgYSB3YXJuaW5nIG1lc3NhZ2UpLgoKLSBBICIvIiBtYXkgZm9sbG93IHRoZSB3b3JkIHdpdGggdGhlIGZvbGxvd2luZyBpdGVtczoKICAgID0gICAJQ2FzZSBtdXN0IG1hdGNoIGV4YWN0bHkuCiAgICA/CQlSYXJlIHdvcmQuCiAgICAhCQlCYWQgKHdyb25nKSB3b3JkLgogICAgZGlnaXQJQSByZWdpb24gaW4gd2hpY2ggdGhlIHdvcmQgaXMgdmFsaWQuICBJZiBubyByZWdpb25zIGFyZQogICAgCQlzcGVjaWZpZWQgdGhlIHdvcmQgaXMgdmFsaWQgaW4gYWxsIHJlZ2lvbnMuCgpFeGFtcGxlOgoKCSMgVGhpcyBpcyBhbiBleGFtcGxlIHdvcmQgbGlzdAkJY29tbWVudAoJL2VuY29kaW5nPWxhdGluMQkJCWVuY29kaW5nIG9mIHRoZSBmaWxlCgkvcmVnaW9ucz11c2NhZ2IJCQkJcmVnaW9ucyAidXMiLCAiY2EiIGFuZCAiZ2IiCglleGFtcGxlCQkJCQl3b3JkIGZvciBhbGwgcmVnaW9ucwoJYmxhaC8xMgkJCQkJd29yZCBmb3IgcmVnaW9ucyAidXMiIGFuZCAiY2EiCgl2aW0vIQkJCQkJYmFkIHdvcmQKCUNhbXBiZWxsLz8zCQkJCXJhcmUgd29yZCBpbiByZWdpb24gMyAiZ2IiCgkncyBtb3JuaW5ncy89CQkJCWtlZXAtY2FzZSB3b3JkCgpOb3RlIHRoYXQgd2hlbiAiLz0iIGlzIHVzZWQgdGhlIHNhbWUgd29yZCB3aXRoIGFsbCB1cHBlci1jYXNlIGxldHRlcnMgaXMgbm90CmFjY2VwdGVkLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIHdvcmQgd2l0aCBtaXhlZCBjYXNlIHRoYXQgaXMgYXV0b21hdGljYWxseQptYXJrZWQgYXMga2VlcC1jYXNlLCB0aG9zZSB3b3JkcyBtYXkgYXBwZWFyIGluIGFsbCB1cHBlci1jYXNlIGxldHRlcnMuCgoKRk9STUFUIFdJVEggQUZGSVggQ09NUFJFU1NJT04KClRoZXJlIGFyZSB0d28gZmlsZXM6IHRoZSBiYXNpYyB3b3JkIGxpc3QgYW5kIGFuIGFmZml4IGZpbGUuICBUaGUgYWZmaXhlcyBhcmUKdXNlZCB0byBtb2RpZnkgdGhlIGJhc2ljIHdvcmRzIHRvIGdldCB0aGUgZnVsbCB3b3JkIGxpc3QuICBUaGlzIHNpZ25pZmljYW50bHkKcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdvcmRzLCBlc3BlY2lhbGx5IGZvciBhIGxhbmd1YWdlIGxpa2UgUG9saXNoLiAgVGhpcyBpcwpjYWxsZWQgYWZmaXggY29tcHJlc3Npb24uCgpUaGUgYmFzaWMgd29yZCBsaXN0IGFuZCB0aGUgYWZmaXggZmlsZSBhcmUgY29tYmluZWQgYW5kIHR1cm5lZCBpbnRvIGEgYmluYXJ5CnNwZWxsIGZpbGUuICBBbGwgdGhlIHByZXByb2Nlc3NpbmcgaGFzIGJlZW4gZG9uZSwgdGh1cyB0aGlzIGZpbGUgbG9hZHMgZmFzdC4KVGhlIGJpbmFyeSBzcGVsbCBmaWxlIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4gdGhlIHNvdXJjZSBjb2RlIChzcmMvc3BlbGwuYykuCkJ1dCBvbmx5IGRldmVsb3BlcnMgbmVlZCB0byBrbm93IGFib3V0IGl0LgoKVGhlIHByZXByb2Nlc3NpbmcgYWxzbyBhbGxvd3MgdXMgdG8gdGFrZSB0aGUgTXlzcGVsbCBsYW5ndWFnZSBmaWxlcyBhbmQgbW9kaWZ5CnRoZW0gYmVmb3JlIHRoZSBWaW0gd29yZCBsaXN0IGlzIG1hZGUuICBUaGUgdG9vbHMgZm9yIHRoaXMgY2FuIGJlIGZvdW5kIGluIHRoZQoic3JjL3NwZWxsIiBkaXJlY3RvcnkuCgpUaGUgZm9ybWF0IGZvciB0aGUgYWZmaXggYW5kIHdvcmQgbGlzdCBmaWxlcyBpcyBiYXNlZCBvbiB3aGF0IE15c3BlbGwgdXNlcwoodGhlIHNwZWxsIGNoZWNrZXIgb2YgTW96aWxsYSBhbmQgT3Blbk9mZmljZS5vcmcpLiAgQSBkZXNjcmlwdGlvbiBjYW4gYmUgZm91bmQKaGVyZToKCWh0dHA6Ly9saW5ndWNvbXBvbmVudC5vcGVub2ZmaWNlLm9yZy9hZmZpeC5yZWFkbWUgfgpOb3RlIHRoYXQgYWZmaXhlcyBhcmUgY2FzZSBzZW5zaXRpdmUsIHRoaXMgaXNuJ3Qgb2J2aW91cyBmcm9tIHRoZSBkZXNjcmlwdGlvbi4KClZpbSBkb2VzIG5vdCB1c2UgdGhlIFRSWSBpdGVtLCBpdCBpcyBpZ25vcmVkLiAgRm9yIG1ha2luZyBzdWdnZXN0aW9ucyB0aGUKcG9zc2libGUgY2hhcmFjdGVycyBpbiB0aGUgd29yZHMgYXJlIHVzZWQuCgpWaW0gc3VwcG9ydHMgcXVpdGUgYSBmZXcgZXh0cmFzLiAgVGhleSBhcmUgZGVzY3JpYmVkIGJlbG93IHxzcGVsbC1hZmZpeC12aW18LgpBdHRlbXB0cyBoYXZlIGJlZW4gbWFkZSB0byBrZWVwIHRoaXMgY29tcGF0aWJsZSB3aXRoIG90aGVyIHNwZWxsIGNoZWNrZXJzLCBzbwp0aGF0IHRoZSBzYW1lIGZpbGVzIGNhbiBiZSB1c2VkLgoKCldPUkQgTElTVCBGT1JNQVQJCQkJKnNwZWxsLWRpYy1mb3JtYXQqCgpBIHZlcnkgc2hvcnQgZXhhbXBsZSwgd2l0aCBsaW5lIG51bWJlcnM6CgoJMQkxMjM0CgkyCWFhbgoJMwlBbHMKCTQJRXR0ZW4tTGV1cgoJNQlldCBhbC4KCTYJJ3MtR3JhdmVuaGFnZQoJNwkncy1HcmF2ZW5oYWFncwoJOAliZWRlbC9QCgk5CWthZG8vMQoJMTAJY2FkZWF1LzIKCTExCVRDUCxJUAoKVGhlIGZpcnN0IGxpbmUgY29udGFpbnMgdGhlIG51bWJlciBvZiB3b3Jkcy4gIFZpbSBpZ25vcmVzIGl0LCBidXQgeW91IGRvIGdldAphbiBlcnJvciBtZXNzYWdlIGlmIGl0J3Mgbm90IHRoZXJlLiAgKkU3NjAqCgpXaGF0IGZvbGxvd3MgaXMgb25lIHdvcmQgcGVyIGxpbmUuICBUaGVyZSBzaG91bGQgYmUgbm8gd2hpdGUgc3BhY2UgYmVmb3JlIG9yCmFmdGVyIHRoZSB3b3JkLiAgQWZ0ZXIgdGhlIHdvcmQgdGhlcmUgaXMgYW4gb3B0aW9uYWwgc2xhc2ggYW5kIGZsYWdzLiAgTW9zdCBvZgp0aGVzZSBmbGFncyBhcmUgbGV0dGVycyB0aGF0IGluZGljYXRlIHRoZSBhZmZpeGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGlzCndvcmQuICBUaGVzZSBhcmUgc3BlY2lmaWVkIHdpdGggU0ZYIGFuZCBQRlggbGluZXMgaW4gdGhlIC5hZmYgZmlsZS4gIFNlZSB0aGUKTXlzcGVsbCBkb2N1bWVudGF0aW9uLiAgVmltIGFsbG93cyB1c2luZyBvdGhlciBmbGFnIHR5cGVzIHdpdGggdGhlIEZMQUcgaXRlbQppbiB0aGUgYWZmaXggZmlsZSB8c3BlbGwtRkxBR3wuCgpXaGVuIHRoZSB3b3JkIG9ubHkgaGFzIGxvd2VyLWNhc2UgbGV0dGVycyBpdCB3aWxsIGFsc28gbWF0Y2ggd2l0aCB0aGUgd29yZApzdGFydGluZyB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyLgoKV2hlbiB0aGUgd29yZCBpbmNsdWRlcyBhbiB1cHBlci1jYXNlIGxldHRlciwgdGhpcyBtZWFucyB0aGUgdXBwZXItY2FzZSBsZXR0ZXIKaXMgcmVxdWlyZWQgYXQgdGhpcyBwb3NpdGlvbi4gIFRoZSBzYW1lIHdvcmQgd2l0aCBhIGxvd2VyLWNhc2UgbGV0dGVyIGF0IHRoaXMKcG9zaXRpb24gd2lsbCBub3QgbWF0Y2guIFdoZW4gc29tZSBvZiB0aGUgb3RoZXIgbGV0dGVycyBhcmUgdXBwZXItY2FzZSBpdCB3aWxsCm5vdCBtYXRjaCBlaXRoZXIuCgpUaGUgd29yZCB3aXRoIGFsbCB1cHBlci1jYXNlIGNoYXJhY3RlcnMgd2lsbCBhbHdheXMgYmUgT0suCgoJd29yZCBsaXN0CW1hdGNoZXMJCQlkb2VzIG5vdCBtYXRjaCB+CglhbHMJCWFscyBBbHMgQUxTCQlBTHMgQWxTIGFMcyBhTFMKCUFscwkJQWxzICBBTFMJCWFscyBBTHMgQWxTIGFMcyBhTFMKCUFMUwkJQUxTCQkJYWxzIEFscyBBTHMgQWxTIGFMcyBhTFMKCUFsUwkJQWxTIEFMUwkJCWFscyBBbHMgQUxzIGFMcyBhTFMKClRoZSBLRVAgYWZmaXggSUQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmaWNhbGx5IG1hdGNoIGEgd29yZCB3aXRoIGlkZW50aWNhbCBjYXNlCm9ubHksIHNlZSBiZWxvdyB8c3BlbGwtS0VQfC4KCk5vdGUgaW4gbGluZSA1IHRvIDcgdGhhdCBub24td29yZCBjaGFyYWN0ZXJzIGFyZSB1c2VkLiAgWW91IGNhbiBpbmNsdWRlCmFueSBjaGFyYWN0ZXIgaW4gYSB3b3JkLiAgV2hlbiBjaGVja2luZyB0aGUgdGV4dCBhIHdvcmQgc3RpbGwgb25seSBtYXRjaGVzCndoZW4gaXQgYXBwZWFycyB3aXRoIGEgbm9uLXdvcmQgY2hhcmFjdGVyIGJlZm9yZSBhbmQgYWZ0ZXIgaXQuICBGb3IgTXlzcGVsbCBhCndvcmQgc3RhcnRpbmcgd2l0aCBhIG5vbi13b3JkIGNoYXJhY3RlciBwcm9iYWJseSB3b24ndCB3b3JrLgoKSW4gbGluZSAxMiB0aGUgd29yZCAiVENQL0lQIiBpcyBkZWZpbmVkLiAgU2luY2UgdGhlIHNsYXNoIGhhcyBhIHNwZWNpYWwKbWVhbmluZyB0aGUgY29tbWEgaXMgdXNlZCBpbnN0ZWFkLiAgVGhpcyBpcyBkZWZpbmVkIHdpdGggdGhlIFNMQVNIIGl0ZW0gaW4gdGhlCmFmZml4IGZpbGUsIHNlZSB8c3BlbGwtU0xBU0h8LiAgTm90ZSB0aGF0IHdpdGhvdXQgdGhpcyBTTEFTSCBpdGVtIHRoZQp3b3JkIHdpbGwgYmUgIlRDUCxJUCIuCgoJCQkJCQkJKnNwZWxsLWFmZml4LXZpbSoKQSBmbGFnIHRoYXQgVmltIGFkZHMgYW5kIGlzIG5vdCBpbiBNeXNwZWxsIGlzIHRoZSBmbGFnIGRlZmluZWQgd2l0aCBLRVAgaW4gdGhlCmFmZml4IGZpbGUuICBUaGlzIGhhcyB0aGUgbWVhbmluZyB0aGF0IGNhc2UgbWF0dGVycy4gIFRoaXMgY2FuIGJlIHVzZWQgaWYgdGhlCndvcmQgZG9lcyBub3QgaGF2ZSB0aGUgZmlyc3QgbGV0dGVyIGluIHVwcGVyIGNhc2UgYXQgdGhlIHN0YXJ0IG9mIGEgc2VudGVuY2UuCkV4YW1wbGUgKGFzc3VtaW5nIHRoYXQgPSB3YXMgdXNlZCBmb3IgS0VQKToKCiAgICB3b3JkIGxpc3QJICAgIG1hdGNoZXMJCSAgICBkb2VzIG5vdCBtYXRjaCB+CiAgICAncyBtb3JnZW5zLz0gICAgJ3MgbW9yZ2VucwkJICAgICdTIG1vcmdlbnMgJ3MgTW9yZ2VucyAnUyBNT1JHRU5TCiAgICAncyBNb3JnZW5zCSAgICAncyBNb3JnZW5zICdTIE1PUkdFTlMgICAnUyBtb3JnZW5zICdzIG1vcmdlbnMKClRoZSBmbGFnIGNhbiBhbHNvIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgd29yZCBtYXRjaGVzIHdoZW4gaXQgaXMgaW4gYWxsCnVwcGVyLWNhc2UgbGV0dGVycy4KCgkJCQkJCQkqc3BlbGwtYWZmaXgtbWJ5dGUqClRoZSBiYXNpYyB3b3JkIGxpc3QgaXMgbm9ybWFsbHkgaW4gYW4gOC1iaXQgZW5jb2RpbmcsIHdoaWNoIGlzIG1lbnRpb25lZCBpbgp0aGUgYWZmaXggZmlsZS4gIFRoZSBhZmZpeCBmaWxlIG11c3QgYWx3YXlzIGJlIGluIHRoZSBzYW1lIGVuY29kaW5nIGFzIHRoZQp3b3JkIGxpc3QuICBUaGlzIGlzIGNvbXBhdGlibGUgd2l0aCBNeXNwZWxsLiAgRm9yIFZpbSB0aGUgZW5jb2RpbmcgbWF5IGFsc28gYmUKc29tZXRoaW5nIGVsc2UsIGFueSBlbmNvZGluZyB0aGF0ICJpY29udiIgc3VwcG9ydHMuICBUaGUgIlNFVCIgbGluZSBtdXN0CnNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nLiAgV2hlbiB1c2luZyBhIG11bHRpLWJ5dGUgZW5jb2RpbmcgaXQncwpwb3NzaWJsZSB0byB1c2UgbW9yZSBkaWZmZXJlbnQgYWZmaXhlcyAoYnV0IE15c3BlbGwgZG9lc24ndCBzdXBwb3J0IHRoYXQsIHRodXMKeW91IG1heSBub3Qgd2FudCB0byB1c2UgaXQgYW55d2F5KS4KCgpDSEFSQUNURVIgVEFCTEVTCgkJCQkJCQkqc3BlbGwtYWZmaXgtY2hhcnMqCldoZW4gdXNpbmcgYW4gOC1iaXQgZW5jb2RpbmcgdGhlIGFmZml4IGZpbGUgc2hvdWxkIGRlZmluZSB3aGF0IGNoYXJhY3RlcnMgYXJlCndvcmQgY2hhcmFjdGVycyAoYXMgc3BlY2lmaWVkIHdpdGggRU5DKS4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgc3lzdGVtIHdoZXJlCiI6bWtzcGVsbCIgaXMgdXNlZCBtYXkgbm90IHN1cHBvcnQgYSBsb2NhbGUgd2l0aCB0aGlzIGVuY29kaW5nIGFuZCBpc2FscGhhKCkKd29uJ3Qgd29yay4gIEZvciBleGFtcGxlIHdoZW4gdXNpbmcgImNwMTI1MCIgb24gVW5peC4KCgkJCQkJCSpFNzYxKiAqRTc2MiogKnNwZWxsLUZPTCoKCQkJCQkJKnNwZWxsLUxPVyogKnNwZWxsLVVQUCoKVGhyZWUgbGluZXMgaW4gdGhlIGFmZml4IGZpbGUgYXJlIG5lZWRlZC4gIFNpbXBsaXN0aWMgZXhhbXBsZToKCglGT0wgIOHr8SB+CglMT1cgIOHr8SB+CglVUFAgIMHL0SB+CgpBbGwgdGhyZWUgbGluZXMgbXVzdCBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuCgpUaGUgIkZPTCIgbGluZSBzcGVjaWZpZXMgdGhlIGNhc2UtZm9sZGVkIGNoYXJhY3RlcnMuICBUaGVzZSBhcmUgdXNlZCB0bwpjb21wYXJlIHdvcmRzIHdoaWxlIGlnbm9yaW5nIGNhc2UuICBGb3IgbW9zdCBlbmNvZGluZ3MgdGhpcyBpcyBpZGVudGljYWwgdG8KdGhlIGxvd2VyIGNhc2UgbGluZS4KClRoZSAiTE9XIiBsaW5lIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyBpbiBsb3dlci1jYXNlLiAgTW9zdGx5IGl0J3MgZXF1YWwgdG8KdGhlICJGT0wiIGxpbmUuCgpUaGUgIlVQUCIgbGluZSBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcnMgd2l0aCB1cHBlci1jYXNlLiAgVGhhdCBpcywgYSBjaGFyYWN0ZXIKaXMgdXBwZXItY2FzZSB3aGVyZSBpdCdzIGRpZmZlcmVudCBmcm9tIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4KIkZPTCIuCgpBbiBleGNlcHRpb24gaXMgbWFkZSBmb3IgdGhlIEdlcm1hbiBzaGFycCBzIN8uICBUaGUgdXBwZXItY2FzZSB2ZXJzaW9uIGlzCiJTUyIuICBJbiB0aGUgRk9ML0xPVy9VUFAgbGluZXMgaXQgc2hvdWxkIGJlIGluY2x1ZGVkLCBzbyB0aGF0IGl0J3MgcmVjb2duaXplZAphcyBhIHdvcmQgY2hhcmFjdGVyLCBidXQgdXNlIHRoZSDfIGNoYXJhY3RlciBpbiBhbGwgdGhyZWUuCgpBU0NJSSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBvbWl0dGVkLCBWaW0gYWx3YXlzIGhhbmRsZXMgdGhlc2UgaW4gdGhlIHNhbWUgd2F5LgpXaGVuIHRoZSBlbmNvZGluZyBpcyBVVEYtOCBubyB3b3JkIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBzcGVjaWZpZWQuCgoJCQkJCQkJKkU3NjMqClZpbSBhbGxvd3MgeW91IHRvIHVzZSBzcGVsbCBjaGVja2luZyBmb3Igc2V2ZXJhbCBsYW5ndWFnZXMgaW4gdGhlIHNhbWUgZmlsZS4KWW91IGNhbiBsaXN0IHRoZW0gaW4gdGhlICdzcGVsbGxhbmcnIG9wdGlvbi4gIEFzIGEgY29uc2VxdWVuY2UgYWxsIHNwZWxsIGZpbGVzCmZvciB0aGUgc2FtZSBlbmNvZGluZyBtdXN0IHVzZSB0aGUgc2FtZSB3b3JkIGNoYXJhY3RlcnMsIG90aGVyd2lzZSB0aGV5IGNhbid0CmJlIGNvbWJpbmVkIHdpdGhvdXQgZXJyb3JzLiAgSWYgeW91IGdldCBhIHdhcm5pbmcgdGhhdCB0aGUgd29yZCB0YWJsZXMgZGlmZmVyCnlvdSBtYXkgbmVlZCB0byBnZW5lcmF0ZSB0aGUgLnNwbCBmaWxlIGFnYWluIHdpdGggfDpta3NwZWxsfC4gIENoZWNrIHRoZSBGT0wsCkxPVyBhbmQgVVBQIGxpbmVzIGluIHRoZSB1c2VkIC5hZmYgZmlsZS4KClRoZSBYWC5hc2NpaS5zcGwgc3BlbGwgZmlsZSBnZW5lcmF0ZWQgd2l0aCB0aGUgIi1hc2NpaSIgYXJndW1lbnQgd2lsbCBub3QKY29udGFpbiB0aGUgdGFibGUgd2l0aCBjaGFyYWN0ZXJzLCBzbyB0aGF0IGl0IGNhbiBiZSBjb21iaW5lIHdpdGggc3BlbGwgZmlsZXMKZm9yIGFueSBlbmNvZGluZy4gIFRoZSAuYWRkLnNwbCBmaWxlcyBhbHNvIGRvIG5vdCBjb250YWluIHRoZSB0YWJsZS4KCgpNSUQtV09SRCBDSEFSQUNURVJTCgkJCQkJCQkqc3BlbGwtbWlkd29yZCoKU29tZSBjaGFyYWN0ZXJzIGFyZSBvbmx5IHRvIGJlIGNvbnNpZGVyZWQgd29yZCBjaGFyYWN0ZXJzIGlmIHRoZXkgYXJlIHVzZWQgaW4KYmV0d2VlbiB0d28gb3JkaW5hcnkgd29yZCBjaGFyYWN0ZXJzLiAgQW4gZXhhbXBsZSBpcyB0aGUgc2luZ2xlIHF1b3RlOiBJdCBpcwpvZnRlbiB1c2VkIHRvIHB1dCB0ZXh0IGluIHF1b3RlcywgdGh1cyBpdCBjYW4ndCBiZSByZWNvZ25pemVkIGFzIGEgd29yZApjaGFyYWN0ZXIsIGJ1dCB3aGVuIGl0IGFwcGVhcnMgaW4gYmV0d2VlbiB3b3JkIGNoYXJhY3RlcnMgaXQgbXVzdCBiZSBwYXJ0IG9mCnRoZSB3b3JkLiAgVGhpcyBpcyBuZWVkZWQgdG8gZGV0ZWN0IGEgc3BlbGxpbmcgZXJyb3Igc3VjaCBhcyB0aGV5J2FyZS4gIFRoYXQKc2hvdWxkIGJlIHRoZXkncmUsIGJ1dCBzaW5jZSAidGhleSIgYW5kICJhcmUiIGFyZSB3b3JkcyB0aGVtc2VsdmVzIHRoYXQgd291bGQKZ28gdW5ub3RpY2VkLgoKVGhlc2UgY2hhcmFjdGVycyBhcmUgZGVmaW5lZCB3aXRoIE1JRFdPUkQgaW4gdGhlIC5hZmYgZmlsZToKCglNSURXT1JECSctIH4KCgpGTEFHIFRZUEVTCQkJCQkJKnNwZWxsLUZMQUcqCgpGbGFncyBhcmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBhZmZpeGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBhIHdvcmQgYW5kIGZvcgpvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZSB3b3JkLiAgTm9ybWFsbHkgc2luZ2xlLWNoYXJhY3RlciBmbGFncyBhcmUgdXNlZC4gIFRoaXMKbGltaXRzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgZmxhZ3MsIGVzcGVjaWFsbHkgZm9yIDgtYml0IGVuY29kaW5ncy4gIFRoZSBGTEFHCml0ZW0gY2FuIGJlIHVzZWQgaWYgbW9yZSBhZmZpeGVzIGFyZSB0byBiZSB1c2VkLiAgUG9zc2libGUgdmFsdWVzOgoKCUZMQUcgbG9uZwl1c2UgdHdvLWNoYXJhY3RlciBmbGFncwoJRkxBRyBudW0JdXNlIG51bWJlcnMsIGZyb20gMSB1cCB0byA2NTAwMAoJRkxBRyBjYXBsb25nCXVzZSBvbmUtY2hhcmFjdGVyIGZsYWdzIHdpdGhvdXQgQS1aIGFuZCB0d28tY2hhcmFjdGVyCgkJCWZsYWdzIHRoYXQgc3RhcnQgd2l0aCBBLVoKCldpdGggIkZMQUcgbnVtIiB0aGUgbnVtYmVycyBpbiBhIGxpc3Qgb2YgYWZmaXhlcyBuZWVkIHRvIGJlIHNlcGFyYXRlZCB3aXRoIGEKY29tbWE6ICIyMzQsMjE0MywxNDM1Ii4gIFRoaXMgbWV0aG9kIGlzIGluZWZmaWNpZW50LCBidXQgdXNlZnVsIGlmIHRoZSBmaWxlIGlzCmdlbmVyYXRlZCB3aXRoIGEgcHJvZ3JhbS4KCldoZW4gdXNpbmcgImNhcGxvbmciIHRoZSB0d28tY2hhcmFjdGVyIGZsYWdzIGFsbCBzdGFydCB3aXRoIGEgY2FwaXRhbDogIkFhIiwKIkIxIiwgIkJCIiwgZXRjLiAgVGhpcyBpcyB1c2VmdWwgdG8gdXNlIG9uZS1jaGFyYWN0ZXIgZmxhZ3MgZm9yIHRoZSBtb3N0CmNvbW1vbiBpdGVtcyBhbmQgdHdvLWNoYXJhY3RlciBmbGFncyBmb3IgdW5jb21tb24gaXRlbXMuCgpOb3RlOiBXaGVuIHVzaW5nIHV0Zi04IG9ubHkgY2hhcmFjdGVycyB1cCB0byA2NTAwMCBtYXkgYmUgdXNlZCBmb3IgZmxhZ3MuCgoKQUZGSVhFUwoJCQkJCSAgICAqc3BlbGwtUEZYKiAqc3BlbGwtU0ZYKgpUaGUgdXN1YWwgUEZYIChwcmVmaXgpIGFuZCBTRlggKHN1ZmZpeCkgbGluZXMgYXJlIHN1cHBvcnRlZCAoc2VlIHRoZSBNeXNwZWxsCmRvY3VtZW50YXRpb24gb3IgdGhlIEFzcGVsbCBtYW51YWw6Cmh0dHA6Ly9hc3BlbGwubmV0L21hbi1odG1sL0FmZml4LUNvbXByZXNzaW9uLmh0bWwpLgoKTm90ZSB0aGF0IE15c3BlbGwgaWdub3JlcyBhbnkgZXh0cmEgdGV4dCBhZnRlciB0aGUgcmVsZXZhbnQgaW5mby4gIFZpbQpyZXF1aXJlcyB0aGlzIHRleHQgdG8gc3RhcnQgd2l0aCBhICIjIiBzbyB0aGF0IG1pc3Rha2VzIGRvbid0IGdvIHVubm90aWNlZC4KRXhhbXBsZToKCglTRlggRiAwIGluICAgW15pXW4gICAgICAjIFNwaW9uID4gU3Bpb25pbiAgfgoJU0ZYIEYgMCBuZW4gIGluICAgICAgICAgIyBCYXVlcmluID4gQmF1ZXJpbm5lbiB+CgpBcHBhcmVudGx5IE15c3BlbGwgYWxsb3dzIGFuIGFmZml4IG5hbWUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlLiAgU2luY2UgdGhpcwptaWdodCBhbHNvIGJlIGEgbWlzdGFrZSwgVmltIGNoZWNrcyBmb3IgYW4gZXh0cmEgIlMiLiAgVGhlIGFmZml4IGZpbGVzIGZvcgpNeXNwZWxsIHRoYXQgdXNlIHRoaXMgZmVhdHVyZSBhcHBhcmVudGx5IGhhdmUgdGhpcyBmbGFnLiAgRXhhbXBsZToKCglTRlggYSBZIDEgUyB+CglTRlggYSAwIGFuIC4gfgoKCVNGWCBhIFkgMiBTIH4KCVNGWCBhIDAgZW4gLiB+CglTRlggYSAwIG9uIC4gfgoKCQkJCQkJCSpzcGVsbC1hZmZpeC1yYXJlKgpBbiBleHRyYSBpdGVtIGZvciBWaW0gaXMgdGhlICJyYXJlIiBmbGFnLiAgSXQgbXVzdCBjb21lIGFmdGVyIHRoZSBvdGhlcgpmaWVsZHMsIGJlZm9yZSBhIGNvbW1lbnQuICBXaGVuIHVzZWQgdGhlbiBhbGwgd29yZHMgdGhhdCB1c2UgdGhlIGFmZml4IHdpbGwgYmUKbWFya2VkIGFzIHJhcmUgd29yZHMuICBFeGFtcGxlOgoKCVBGWCBGIDAgbmVuZSAgLiAgIHJhcmUgfgoJU0ZYIEYgMCBvaW4gICBuICAgcmFyZSAgICMgaGFyZGx5IGV2ZXIgdXNlZCB+CgpIb3dldmVyLCBpZiB0aGUgd29yZCBhbHNvIGFwcGVhcnMgYXMgYSBnb29kIHdvcmQgaW4gYW5vdGhlciB3YXkgaXQgd29uJ3QgYmUKbWFya2VkIGFzIHJhcmUuCgoJCQkJCQkJKnNwZWxsLWFmZml4LW5vY29tcCoKQW5vdGhlciBleHRyYSBpdGVtIGZvciBWaW0gaXMgdGhlICJub2NvbXAiIGZsYWcuICBJdCBtdXN0IGNvbWUgYWZ0ZXIgdGhlIG90aGVyCmZpZWxkcywgYmVmb3JlIGEgY29tbWVudC4gIEl0IGNhbiBiZSBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyICJyYXJlIi4gIFdoZW4KcHJlc2VudCB0aGVuIGFsbCB3b3JkcyB0aGF0IHVzZSB0aGUgYWZmaXggd2lsbCBub3QgYmUgcGFydCBvZiBhIGNvbXBvdW5kIHdvcmQuCkV4YW1wbGU6CglhZmZpeCBmaWxlOgoJCUNPTVBPVU5ERkxBRyBjIH4KCQlTRlggYSBZIDIgfgoJCVNGWCBhIDAgcyAgIC4gfgoJCVNGWCBhIDAgaXplIC4gbm9jb21wIH4KCWRpY3Rpb25hcnk6CgkJd29yZC9jIH4KCQl1dGlsL2FjIH4KClRoaXMgYWxsb3dzIGZvciAid29yZHV0aWwiIGFuZCAid29yZHV0aWxzIiBidXQgbm90ICJ3b3JkdXRpbGl6ZSIuCgoJCQkJCQkgICAgKnNwZWxsLVBGWFBPU1RQT05FKgpXaGVuIGFuIGFmZml4IGZpbGUgaGFzIHZlcnkgbWFueSBwcmVmaXhlcyB0aGF0IGFwcGx5IHRvIG1hbnkgd29yZHMgaXQncyBub3QKcG9zc2libGUgdG8gYnVpbGQgdGhlIHdob2xlIHdvcmQgbGlzdCBpbiBtZW1vcnkuICBUaGlzIGFwcGxpZXMgdG8gSGVicmV3IChhCmxpc3Qgd2l0aCBhbGwgd29yZHMgaXMgb3ZlciBhIEdieXRlKS4gIEluIHRoYXQgY2FzZSBhcHBseWluZyBwcmVmaXhlcyBtdXN0IGJlCnBvc3Rwb25lZC4gIFRoaXMgbWFrZXMgc3BlbGwgY2hlY2tpbmcgc2xvd2VyLiAgSXQgaXMgaW5kaWNhdGVkIGJ5IHRoaXMga2V5d29yZAppbiB0aGUgLmFmZiBmaWxlOgoKCVBGWFBPU1RQT05FIH4KCk9ubHkgcHJlZml4ZXMgd2l0aG91dCBhIGNob3Agc3RyaW5nIGNhbiBiZSBwb3N0cG9uZWQsIHByZWZpeGVzIHdpdGggYSBjaG9wCnN0cmluZyB3aWxsIHN0aWxsIGJlIGluY2x1ZGVkIGluIHRoZSB3b3JkIGxpc3QuICBBbiBleGNlcHRpb24gaWYgdGhlIGNob3AKc3RyaW5nIGlzIG9uZSBjaGFyYWN0ZXIgYW5kIGVxdWFsIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgYWRkZWQgc3RyaW5nLApidXQgaW4gbG93ZXIgY2FzZS4gIFRodXMgd2hlbiB0aGUgY2hvcCBzdHJpbmcgaXMgdXNlZCB0byBhbGxvdyB0aGUgZm9sbG93aW5nCndvcmQgdG8gc3RhcnQgd2l0aCBhbiB1cHBlciBjYXNlIGxldHRlci4KCgpXT1JEUyBXSVRIIEEgU0xBU0gJCQkJCSpzcGVsbC1TTEFTSCoKClRoZSBzbGFzaCBpcyB1c2VkIGluIHRoZSAuZGljIGZpbGUgdG8gc2VwYXJhdGUgdGhlIGJhc2ljIHdvcmQgZnJvbSB0aGUgYWZmaXgKbGV0dGVycyB0aGF0IGNhbiBiZSB1c2VkLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBtZWFucyB5b3UgY2Fubm90IHVzZSBhIHNsYXNoIGluCmEgd29yZC4gIFRodXMgIlRDUC9JUCIgY2Fubm90IGJlIGEgd29yZC4gIFRvIHdvcmsgYXJvdW5kIHRoYXQgeW91IGNhbiBkZWZpbmUgYQpyZXBsYWNlbWVudCBjaGFyYWN0ZXIgZm9yIHRoZSBzbGFzaC4gIEV4YW1wbGU6CgoJU0xBU0ggLCB+CgpOb3cgeW91IGNhbiB1c2UgIlRDUCxJUCIgdG8gYWRkIHRoZSB3b3JkICJUQ1AvSVAiLgoKT2YgY291cnNlLCB0aGUgbGV0dGVyIHVzZWQgc2hvdWxkIGl0c2VsZiBub3QgYXBwZWFyIGluIGFueSB3b3JkISAgVGhlIGxldHRlcgptdXN0IGJlIEFTQ0lJLCB0aHVzIGEgc2luZ2xlIGJ5dGUuCgoKS0VFUC1DQVNFIFdPUkRTCQkJCQkJKnNwZWxsLUtFUCoKCkluIHRoZSBhZmZpeCBmaWxlIGEgS0VQIGxpbmUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBhZmZpeCBuYW1lIHVzZWQgZm9yCmtlZXAtY2FzZSB3b3Jkcy4gIEV4YW1wbGU6CgoJS0VQID0gfgoKU2VlIGFib3ZlIGZvciBhbiBleGFtcGxlIHxzcGVsbC1hZmZpeC12aW18LgoKClJBUkUgV09SRFMJCQkJCQkqc3BlbGwtUkFSKgoKSW4gdGhlIGFmZml4IGZpbGUgYSBSQVIgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKcmFyZSB3b3Jkcy4gIEV4YW1wbGU6CgoJUkFSID8gfgoKUmFyZSB3b3JkcyBhcmUgaGlnaGxpZ2h0ZWQgZGlmZmVyZW50bHkgZnJvbSBiYWQgd29yZHMuICBUaGlzIGlzIHRvIGJlIHVzZWQgZm9yCndvcmRzIHRoYXQgYXJlIGNvcnJlY3QgZm9yIHRoZSBsYW5ndWFnZSwgYnV0IGFyZSBoYXJkbHkgZXZlciB1c2VkIGFuZCBjb3VsZCBiZQphIHR5cGluZyBtaXN0YWtlIGFueXdheS4gIFdoZW4gdGhlIHNhbWUgd29yZCBpcyBmb3VuZCBhcyBnb29kIGl0IHdvbid0IGJlCmhpZ2hsaWdodGVkIGFzIHJhcmUuCgoKQkFEIFdPUkRTCQkJCQkJKnNwZWxsLUJBRCoKCkluIHRoZSBhZmZpeCBmaWxlIGEgQkFEIGxpbmUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBhZmZpeCBuYW1lIHVzZWQgZm9yCmJhZCB3b3Jkcy4gIEV4YW1wbGU6CgoJQkFEICEgfgoKVGhpcyBjYW4gYmUgdXNlZCB0byBleGNsdWRlIHdvcmRzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIGdvb2QuICBGb3IgZXhhbXBsZQoidGhlIHRoZSIgaW4gdGhlIC5kaWMgZmlsZToKCgl0aGUgdGhlLyEgfgoKT25jZSBhIHdvcmQgaGFzIGJlZW4gbWFya2VkIGFzIGJhZCBpdCB3b24ndCBiZSB1bmRvbmUgYnkgZW5jb3VudGVyaW5nIHRoZSBzYW1lCndvcmQgYXMgZ29vZC4KCgkJCQkJCQkqc3BlbGwtTkVFREFGRklYKgpUaGUgTkVFREFGRklYIGZsYWcgaXMgdXNlZCB0byByZXF1aXJlIHRoYXQgYSB3b3JkIGlzIHVzZWQgd2l0aCBhbiBhZmZpeC4gIFRoZQp3b3JkIGl0c2VsZiBpcyBub3QgYSBnb29kIHdvcmQuICBFeGFtcGxlOgoKCU5FRURBRkZJWCArIH4KCgkJCQkJCQkqc3BlbGwtTkVFRENPTVBPVU5EKgpUaGUgTkVFRENPTVBPVU5EIGZsYWcgaXMgdXNlZCB0byByZXF1aXJlIHRoYXQgYSB3b3JkIGlzIHVzZWQgYXMgcGFydCBvZiBhCmNvbXBvdW5kIHdvcmQgVGhlIHdvcmQgaXRzZWxmIGlzIG5vdCBhIGdvb2Qgd29yZC4gIEV4YW1wbGU6CgoJTkVFRENPTVBPVU5EICYgfgoKCkNPTVBPVU5EIFdPUkRTCQkJCQkJKnNwZWxsLWNvbXBvdW5kKgoKQSBjb21wb3VuZCB3b3JkIGlzIGEgbG9uZ2VyIHdvcmQgbWFkZSBieSBjb25jYXRlbmF0aW5nIHdvcmRzIHRoYXQgYXBwZWFyIGluCnRoZSAuZGljIGZpbGUuICBUbyBzcGVjaWZ5IHdoaWNoIHdvcmRzIG1heSBiZSBjb25jYXRlbmF0ZWQgYSBjaGFyYWN0ZXIgaXMKdXNlZC4gIFRoaXMgY2hhcmFjdGVyIGlzIHB1dCBpbiB0aGUgbGlzdCBvZiBhZmZpeGVzIGFmdGVyIHRoZSB3b3JkLiAgV2Ugd2lsbApjYWxsIHRoaXMgY2hhcmFjdGVyIGEgZmxhZyBoZXJlLiAgT2J2aW91c2x5IHRoZXNlIGZsYWdzIG11c3QgYmUgZGlmZmVyZW50IGZyb20KYW55IGFmZml4IElEcyB1c2VkLgoKCQkJCQkJCSpzcGVsbC1DT01QT1VOREZMQUcqClRoZSBNeXNwZWxsIGNvbXBhdGlibGUgbWV0aG9kIHVzZXMgb25lIGZsYWcsIHNwZWNpZmllZCB3aXRoIENPTVBPVU5ERkxBRy4KQWxsIHdvcmRzIHdpdGggdGhpcyBmbGFnIGNvbWJpbmUgaW4gYW55IG9yZGVyLiAgVGhpcyBtZWFucyB0aGVyZSBpcyBubyBjb250cm9sCm92ZXIgd2hpY2ggd29yZCBjb21lcyBmaXJzdC4gIEV4YW1wbGU6CglDT01QT1VOREZMQUcgYyB+CgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5ERkxBR1MqCkEgbW9yZSBhZHZhbmNlZCBtZXRob2QgdG8gc3BlY2lmeSBob3cgY29tcG91bmQgd29yZHMgY2FuIGJlIGZvcm1lZCB1c2VzCm11bHRpcGxlIGl0ZW1zIHdpdGggbXVsdGlwbGUgZmxhZ3MuICBUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTXlzcGVsbCAzLjAuCkxldCdzIHN0YXJ0IHdpdGggYW4gZXhhbXBsZToKCUNPTVBPVU5ERkxBR1MgYysgfgoJQ09NUE9VTkRGTEFHUyBzZSB+CgpUaGUgZmlyc3QgbGluZSBkZWZpbmVzIHRoYXQgd29yZHMgd2l0aCB0aGUgImMiIGZsYWcgY2FuIGJlIGNvbmNhdGVuYXRlZCBpbiBhbnkKb3JkZXIuICBUaGUgc2Vjb25kIGxpbmUgZGVmaW5lcyBjb21wb3VuZCB3b3JkcyB0aGF0IGFyZSBtYWRlIG9mIG9uZSB3b3JkIHdpdGgKdGhlICJzIiBmbGFnIGFuZCBvbmUgd29yZCB3aXRoIHRoZSAiZSIgZmxhZy4gIFdpdGggdGhpcyBkaWN0aW9uYXJ5OgoJYm9yay9jIH4KCW9uaW9uL3MgfgoJc291cC9lIH4KCllvdSBjYW4gbWFrZSB0aGVzZSB3b3JkczoKCWJvcmsKCWJvcmtib3JrCglib3JrYm9ya2JvcmsKCShldGMuKQoJb25pb24KCXNvdXAKCW9uaW9uc291cAoKVGhlIENPTVBPVU5ERkxBR1MgaXRlbSBtYXkgYXBwZWFyIG11bHRpcGxlIHRpbWVzLiAgVGhlIGFyZ3VtZW50IGlzIG1hZGUgb3V0IG9mCm9uZSBvciBtb3JlIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBjYW4gYmU6CglvbmUgZmxhZwkJCWUuZy4sIGMKCWFsdGVybmF0ZSBmbGFncyBpbnNpZGUgW10JZS5nLiwgW2FiY10KT3B0aW9uYWxseSB0aGlzIG1heSBiZSBmb2xsb3dlZCBieToKCSoJdGhlIGdyb3VwIGFwcGVhcnMgemVybyBvciBtb3JlIHRpbWVzLCBlLmcuLCBzbSplCgkrCXRoZSBncm91cCBhcHBlYXJzIG9uZSBvciBtb3JlIHRpbWVzLCBlLmcuLCBjKwoKVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSByZWdleHAgcGF0dGVybiBzeW50YXggKGJ1dCBub3QgdGhlIHNhbWUhKS4gIEEgZmV3CmV4YW1wbGVzIHdpdGggdGhlIHNlcXVlbmNlIG9mIHdvcmQgZmxhZ3MgdGhleSByZXF1aXJlOgogICAgQ09NUE9VTkRGTEFHUyB4KwkgICAgeCB4eCB4eHggZXRjLgogICAgQ09NUE9VTkRGTEFHUyB5egkgICAgeXoKICAgIENPTVBPVU5ERkxBR1MgeCt6CSAgICB4eiB4eHogeHh4eiBldGMuCiAgICBDT01QT1VOREZMQUdTIHl4KwkgICAgeXggeXh4IHl4eHggZXRjLgoKICAgIENPTVBPVU5ERkxBR1MgW2FiY116ICAgIGF6IGJ6IGN6CiAgICBDT01QT1VOREZMQUdTIFthYmNdK3ogICBheiBhYXogYWJheiBieiBiYXogYmNieiBjeiBjYXogY2JheiBldGMuCiAgICBDT01QT1VOREZMQUdTIGFbeHl6XSsgICBheCBheHggYXh5eiBheSBheXggYXl6eiBheiBhenkgYXp4eSBldGMuCiAgICBDT01QT1VOREZMQUdTIHNtKmUJICAgIHNlIHNtZSBzbW1lIHNtbW1lIGV0Yy4KICAgIENPTVBPVU5ERkxBR1Mgc1t4eXpdKmUgIHNlIHN4ZSBzeHllIHN4eXhlIHN5ZSBzeXplIHN6ZSBzenllIHN6eXhlICBldGMuCgpBIHNwZWNpZmljIGV4YW1wbGU6IEFsbG93IGEgY29tcG91bmQgdG8gYmUgbWFkZSBvZiB0d28gd29yZHMgYW5kIGEgZGFzaDoKCUluIHRoZSAuYWZmIGZpbGU6CgkgICAgQ09NUE9VTkRGTEFHUyBzZGUgfgoJICAgIE5FRURBRkZJWCB4IH4KCSAgICBDT01QT1VORE1BWCAzIH4KCSAgICBDT01QT1VORE1JTiAxIH4KCUluIHRoZSAuZGljIGZpbGU6CgkgICAgc3RhcnQvcyB+CgkgICAgZW5kL2UgfgoJICAgIC0veGQgfgoKVGhpcyBhbGxvd3MgZm9yIHRoZSB3b3JkICJzdGFydC1lbmQiLCBidXQgbm90ICJzdGFydGVuZCIuCgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5ETUlOKgpUaGUgbWluaW1hbCBjaGFyYWN0ZXIgbGVuZ3RoIG9mIGEgd29yZCB1c2VkIGZvciBjb21wb3VuZGluZyBpcyBzcGVjaWZpZWQgd2l0aApDT01QT1VORE1JTi4gIEV4YW1wbGU6CglDT01QT1VORE1JTiA1IH4KCldoZW4gb21pdHRlZCB0aGVyZSBpcyBubyBtaW5pbWFsIGxlbmd0aC4gIE9idmlvdXNseSB5b3UgY291bGQganVzdCBsZWF2ZSBvdXQKdGhlIGNvbXBvdW5kIGZsYWcgZnJvbSBzaG9ydCB3b3JkcyBpbnN0ZWFkLCB0aGlzIGZlYXR1cmUgaXMgcHJlc2VudCBmb3IKY29tcGF0aWJpbGl0eSB3aXRoIE15c3BlbGwuCgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5ETUFYKgpUaGUgbWF4aW11bSBudW1iZXIgb2Ygd29yZHMgdGhhdCBjYW4gYmUgY29uY2F0ZW5hdGVkIGludG8gYSBjb21wb3VuZCB3b3JkIGlzCnNwZWNpZmllZCB3aXRoIENPTVBPVU5ETUFYLiAgRXhhbXBsZToKCUNPTVBPVU5ETUFYIDMgfgoKV2hlbiBvbWl0dGVkIHRoZXJlIGlzIG5vIG1heGltdW0uICBJdCBhcHBsaWVzIHRvIGFsbCBjb21wb3VuZCB3b3Jkcy4KClRvIHNldCBhIGxpbWl0IGZvciB3b3JkcyB3aXRoIHNwZWNpZmljIGZsYWdzIG1ha2Ugc3VyZSB0aGUgaXRlbXMgaW4KQ09NUE9VTkRGTEFHUyB3aGVyZSB0aGV5IGFwcGVhciBkb24ndCBhbGxvdyB0b28gbWFueSB3b3Jkcy4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRTWUxNQVgqClRoZSBtYXhpbXVtIG51bWJlciBvZiBzeWxsYWJsZXMgdGhhdCBhIGNvbXBvdW5kIHdvcmQgbWF5IGNvbnRhaW4gaXMgc3BlY2lmaWVkCndpdGggQ09NUE9VTkRTWUxNQVguICBFeGFtcGxlOgoJQ09NUE9VTkRTWUxNQVggNiB+CgpUaGlzIGhhcyBubyBlZmZlY3QgaWYgdGhlcmUgaXMgbm8gU1lMTEFCTEUgaXRlbS4gIFdpdGhvdXQgQ09NUE9VTkRTWUxNQVggdGhlcmUKaXMgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzeWxsYWJsZXMuCgpJZiBib3RoIENPTVBPVU5ETUFYIGFuZCBDT01QT1VORFNZTE1BWCBhcmUgZGVmaW5lZCwgYSBjb21wb3VuZCB3b3JkIGlzCmFjY2VwdGVkIGlmIGl0IGZpdHMgb25lIG9mIHRoZSBjcml0ZXJpYSwgdGh1cyBpcyBlaXRoZXIgbWFkZSBmcm9tIHVwIHRvCkNPTVBPVU5ETUFYIHdvcmRzIG9yIGNvbnRhaW5zIHVwIHRvIENPTVBPVU5EU1lMTUFYIHN5bGxhYmxlcy4KCgkJCQkJCQkqc3BlbGwtU1lMTEFCTEUqClRoZSBTWUxMQUJMRSBpdGVtIGRlZmluZXMgY2hhcmFjdGVycyBvciBjaGFyYWN0ZXIgc2VxdWVuY2VzIHRoYXQgYXJlIHVzZWQgdG8KY291bnQgdGhlIG51bWJlciBvZiBzeWxsYWJsZXMgaW4gYSB3b3JkLiAgRXhhbXBsZToKCVNZTExBQkxFIGHhZelp7W/z9vV1+vz7eS9hYS9hdS9lYS9lZS9laS9pZS9vYS9vZS9vby9vdS91dS91aSB+CgpCZWZvcmUgdGhlIGZpcnN0IHNsYXNoIGlzIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBjb3VudGVkIGZvciBvbmUKc3lsbGFibGUsIGFsc28gd2hlbiByZXBlYXRlZCBhbmQgbWl4ZWQsIHVudGlsIHRoZSBuZXh0IGNoYXJhY3RlciB0aGF0IGlzIG5vdAppbiB0aGlzIHNldC4gIEFmdGVyIHRoZSBzbGFzaCBjb21lIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNvdW50ZWQKZm9yIG9uZSBzeWxsYWJsZS4gIFRoZXNlIGFyZSBwcmVmZXJyZWQgb3ZlciB1c2luZyBjaGFyYWN0ZXJzIGZyb20gdGhlIHNldC4KV2l0aCB0aGUgZXhhbXBsZSAiaWRlZWVuIiBoYXMgdGhyZWUgc3lsbGFibGVzLCBjb3VudGVkIGJ5ICJpIiwgImVlIiBhbmQgImUiLgoKT25seSBjYXNlLWZvbGRlZCBsZXR0ZXJzIG5lZWQgdG8gYmUgaW5jbHVkZWQuCgpBYm92ZSBhbm90aGVyIHdheSB0byByZXN0cmljdCBjb21wb3VuZGluZyB3YXMgbWVudGlvbmVkIGFib3ZlOiBhZGRpbmcgIm5vY29tcCIKYWZ0ZXIgYW4gYWZmaXggY2F1c2VzIGFsbCB3b3JkcyB0aGF0IGFyZSBtYWRlIHdpdGggdGhhdCBhZmZpeCBub3QgYmUgYmUgdXNlZApmb3IgY29tcG91bmRpbmcuIHxzcGVsbC1hZmZpeC1ub2NvbXB8CgoKVU5MSU1JVEVEIENPTVBPVU5ESU5HCQkJCQkqc3BlbGwtTk9CUkVBSyoKCkZvciBzb21lIGxhbmd1YWdlcywgc3VjaCBhcyBUaGFpLCB0aGVyZSBpcyBubyBzcGFjZSBpbiBiZXR3ZWVuIHdvcmRzLiAgVGhpcwpsb29rcyBsaWtlIGFsbCB3b3JkcyBhcmUgY29tcG91bmRlZC4gIFRvIHNwZWNpZnkgdGhpcyB1c2UgdGhlIE5PQlJFQUsgaXRlbSBpbgp0aGUgYWZmaXggZmlsZSwgd2l0aG91dCBhcmd1bWVudHM6CglOT0JSRUFLIH4KClZpbSB3aWxsIHRyeSB0byBmaWd1cmUgb3V0IHdoZXJlIG9uZSB3b3JkIGVuZHMgYW5kIGEgbmV4dCBzdGFydHMuICBXaGVuIHRoZXJlCmFyZSBzcGVsbGluZyBtaXN0YWtlcyB0aGlzIG1heSBub3QgYmUgcXVpdGUgcmlnaHQuCgo+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PApOT1RFOiBUaGUgZm9sbG93aW5nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHdvcmQKbGlzdHMgdGhhdCBzdXBwb3J0IHRoaXMuCj4gCQkJCQkJCSpzcGVsbC1DTVAqCj4gU29tZXRpbWVzIGl0IGlzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgYSB3b3JkIHdoZW4gY29uY2F0ZW5hdGluZyBpdCB0byBhbm90aGVyLAo+IGJ5IHJlbW92aW5nIGEgZmV3IGxldHRlcnMsIGluc2VydGluZyBzb21ldGhpbmcgb3IgYm90aC4gIEl0IGNhbiBhbHNvIGJlIHVzZWZ1bAo+IHRvIHJlc3RyaWN0IGNvbmNhdGVuYXRpb24gdG8gd29yZHMgdGhhdCBtYXRjaCBhIHBhdHRlcm4uICBGb3IgdGhpcyBwdXJwb3NlIENNUAo+IGl0ZW1zIGNhbiBiZSB1c2VkLiAgVGhleSBsb29rIGxpa2UgdGhpczoKPiAJQ01QIHtmbGFnfSB7ZmxhZ3N9IHtzdHJpcH0ge3N0cmlwMn0ge2FkZH0ge2NvbmR9IHtjb25kMn0KPiAKPiAJe2ZsYWd9CQl0aGUgZmxhZywgYXMgdXNlZCBpbiBDT01QT1VOREZMQUdTIGZvciB0aGUgbGVhZCB3b3JkCj4gCXtmbGFnc30JCWFjY2VwdGVkIGZsYWdzIGZvciB0aGUgZm9sbG93aW5nIHdvcmQgKCcuJyB0byBhY2NlcHQKPiAJCQlhbGwpCj4gCXtzdHJpcH0JCXRleHQgdG8gcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgbGVhZCB3b3JkICh6ZXJvCj4gCQkJZm9yIG5vIHN0cmlwcGluZykKPiAJe3N0cmlwMn0JdGV4dCB0byByZW1vdmUgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyB3b3JkCj4gCQkJKHplcm8gZm9yIG5vIHN0cmlwcGluZykKPiAJe2FkZH0JCXRleHQgdG8gaW5zZXJ0IGJldHdlZW4gdGhlIHdvcmRzICh6ZXJvIGZvciBubwo+IAkJCWFkZGl0aW9uKQo+IAl7Y29uZH0JCWNvbmRpdGlvbiB0byBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBsZWFkIHdvcmQKPiAJe2NvbmQyfQkJY29uZGl0aW9uIHRvIG1hdGNoIGF0IHRoZSBzdGFydCBvZiB0aGUgZm9sbG93aW5nIHdvcmQKPiAKPiBUaGlzIGlzIHRoZSBzYW1lIGFzIHdoYXQgaXMgdXNlZCBmb3IgU0ZYIGFuZCBQRlggaXRlbXMsIHdpdGggdGhlIGV4dHJhIHtmbGFnc30KPiBhbmQge2NvbmQyfSBmaWVsZHMuICBFeGFtcGxlOgo+IAlDTVAgZiBtcnQgMCAtIC4gLiB+Cj4gCj4gV2hlbiB1c2VkIHdpdGggdGhlIGZvb2QgYW5kIGRpc2ggd29yZCBsaXN0IGFib3ZlLCB0aGlzIG1lYW5zIHRoYXQgYSBkYXNoIGlzCj4gaW5zZXJ0ZWQgYWZ0ZXIgZWFjaCBmb29kIGl0ZW0uICBUaHVzIHlvdSBnZXQgIm9uaW9uLXNvdXAiIGFuZAo+ICJvbmlvbi10b21hdG8tc2FsYXQiLgo+IAo+IFdoZW4gdGhlcmUgYXJlIENNUCBpdGVtcyBmb3IgYSBjb21wb3VuZCBmbGFnIHRoZSBjb25jYXRlbmF0aW9uIGlzIG9ubHkgZG9uZQo+IHdoZW4gYSBDTVAgaXRlbSBtYXRjaGVzLgo+IAo+IFdoZW4gdGhlcmUgYXJlIG5vIENNUCBpdGVtcyBmb3IgYSBjb21wb3VuZCBmbGFnLCB0aGVuIGFsbCB3b3JkcyB3aWxsIGJlCj4gY29uY2F0ZW5hdGVkLCBhcyBpZiB0aGVyZSB3YXMgYW4gaXRlbToKPiAJQ01QIHtmbGFnfSAuIDAgMCAuIC4KPgo+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PAoKClJFUExBQ0VNRU5UUwkJCQkJCSpzcGVsbC1SRVAqCgpJbiB0aGUgYWZmaXggZmlsZSBSRVAgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGNvbW1vbiBtaXN0YWtlcy4gIFRoaXMgaXMKdXNlZCB0byBtYWtlIHNwZWxsaW5nIHN1Z2dlc3Rpb25zLiAgVGhlIGl0ZW1zIGRlZmluZSB0aGUgImZyb20iIHRleHQgYW5kIHRoZQoidG8iIHJlcGxhY2VtZW50LiAgRXhhbXBsZToKCglSRVAgNCB+CglSRVAgZiBwaCB+CglSRVAgcGggZiB+CglSRVAgayBjaCB+CglSRVAgY2ggayB+CgpUaGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBSRVAgbGluZXMgZm9sbG93aW5nLiAgVmltIGlnbm9yZXMgdGhlCm51bWJlciwgYnV0IGl0IG11c3QgYmUgdGhlcmUuCgpEb24ndCBpbmNsdWRlIHNpbXBsZSBvbmUtY2hhcmFjdGVyIHJlcGxhY2VtZW50cyBvciBzd2Fwcy4gIFZpbSB3aWxsIHRyeSB0aGVzZQphbnl3YXkuICBZb3UgY2FuIGluY2x1ZGUgd2hvbGUgd29yZHMgaWYgeW91IHdhbnQgdG8sIGJ1dCB5b3UgbWlnaHQgd2FudCB0byB1c2UKdGhlICJmaWxlOiIgaXRlbSBpbiAnc3BlbGxzdWdnZXN0JyBpbnN0ZWFkLgoKClNJTUlMQVIgQ0hBUkFDVEVSUwkJCQkJKnNwZWxsLU1BUCoKCkluIHRoZSBhZmZpeCBmaWxlIE1BUCBpdGVtcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgbGV0dGVycyB0aGF0IGFyZSB2ZXJ5IG11Y2gKYWxpa2UuICBUaGlzIGlzIG1vc3RseSB1c2VkIGZvciBhIGxldHRlciB3aXRoIGRpZmZlcmVudCBhY2NlbnRzLiAgVGhpcyBpcyB1c2VkCnRvIHByZWZlciBzdWdnZXN0aW9ucyB3aXRoIHRoZXNlIGxldHRlcnMgc3Vic3RpdHV0ZWQuICBFeGFtcGxlOgoKCU1BUCAyIH4KCU1BUCBl6evq6CB+CglNQVAgdfz5+vsgfgoKVGhlIGZpcnN0IGxpbmUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgTUFQIGxpbmVzIGZvbGxvd2luZy4gIFZpbSBpZ25vcmVzIHRoZQpudW1iZXIsIGJ1dCB0aGUgbGluZSBtdXN0IGJlIHRoZXJlLgoKRWFjaCBsZXR0ZXIgbXVzdCBhcHBlYXIgaW4gb25seSBvbmUgb2YgdGhlIE1BUCBpdGVtcy4gIEl0J3MgYSBiaXQgbW9yZQplZmZpY2llbnQgaWYgdGhlIGZpcnN0IGxldHRlciBpcyBBU0NJSSBvciBhdCBsZWFzdCBvbmUgd2l0aG91dCBhY2NlbnRzLgoKClNPVU5ELUEtTElLRQkJCQkJCSpzcGVsbC1TQUwqCgpJbiB0aGUgYWZmaXggZmlsZSBTQUwgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBzb3VuZHMtYS1saWtlIG1lY2hhbmlzbQp0byBiZSB1c2VkLiAgVGhlIG1haW4gaXRlbXMgZGVmaW5lIHRoZSAiZnJvbSIgdGV4dCBhbmQgdGhlICJ0byIgcmVwbGFjZW1lbnQuClNpbXBsaXN0aWMgZXhhbXBsZToKCglTQUwgQ0lBICAgICAgICAgICAgICAgICAgWCB+CglTQUwgQ0ggICAgICAgICAgICAgICAgICAgWCB+CglTQUwgQyAgICAgICAgICAgICAgICAgICAgSyB+CglTQUwgSyAgICAgICAgICAgICAgICAgICAgSyB+CgpUaGVyZSBhcmUgYSBmZXcgcnVsZXMgYW5kIHRoaXMgY2FuIGJlY29tZSBxdWl0ZSBjb21wbGljYXRlZC4gIEFuIGV4cGxhbmF0aW9uCmhvdyBpdCB3b3JrcyBjYW4gYmUgZm91bmQgaW4gdGhlIEFzcGVsbCBtYW51YWw6Cmh0dHA6Ly9hc3BlbGwubmV0L21hbi1odG1sL1Bob25ldGljLUNvZGUuaHRtbC4KClRoZXJlIGFyZSBhIGZldyBzcGVjaWFsIGl0ZW1zOgoKCVNBTCBmb2xsb3d1cAkJdHJ1ZSB+CglTQUwgY29sbGFwc2VfcmVzdWx0CXRydWUgfgoJU0FMIHJlbW92ZV9hY2NlbnRzCXRydWUgfgoKIjEiIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzICJ0cnVlIi4gIEFueSBvdGhlciB2YWx1ZSBtZWFucyAiZmFsc2UiLgoKClNJTVBMRSBTT1VOREZPTERJTkcJCQkJKnNwZWxsLVNPRk9GUk9NKiAqc3BlbGwtU09GT1RPKgoKVGhlIFNBTCBtZWNoYW5pc20gaXMgY29tcGxleCBhbmQgc2xvdy4gIEEgc2ltcGxlciBtZWNoYW5pc20gaXMgbWFwcGluZyBhbGwKY2hhcmFjdGVycyB0byBhbm90aGVyIGNoYXJhY3RlciwgbWFwcGluZyBzaW1pbGFyIHNvdW5kaW5nIGNoYXJhY3RlcnMgdG8gdGhlCnNhbWUgY2hhcmFjdGVyLiAgQXQgdGhlIHNhbWUgdGltZSB0aGlzIGRvZXMgY2FzZSBmb2xkaW5nLiAgWW91IGNhbiBub3QgaGF2ZQpib3RoIFNBTCBpdGVtcyBhbmQgc2ltcGxlIHNvdW5kZm9sZGluZy4KClRoZXJlIGFyZSB0d28gaXRlbXMgcmVxdWlyZWQ6IG9uZSB0byBzcGVjaWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG1hcHBlZAphbmQgb25lIHRoYXQgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHRoZXkgYXJlIG1hcHBlZCB0by4gIFRoZXkgbXVzdCBoYXZlCmV4YWN0bHkgdGhlIHNhbWUgbnVtYmVyIG9mIGNoYXJhY3RlcnMuICBFeGFtcGxlOgoKICAgIFNPRk9GUk9NIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVogfgogICAgU09GT1RPICAgZWJjdGVmZ2hlamtsbm5lcGtyc3RldnZrZXNlYmN0ZWZnaGVqa2xubmVwa3JzdGV2dmtlcyB+CgpJbiB0aGUgZXhhbXBsZSBhbGwgdm93ZWxzIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUgY2hhcmFjdGVyICdlJy4gIEFub3RoZXIKbWV0aG9kIHdvdWxkIGJlIHRvIGxlYXZlIG91dCBhbGwgdm93ZWxzLiAgU29tZSBjaGFyYWN0ZXJzIHRoYXQgc291bmQgbmVhcmx5CnRoZSBzYW1lIGFuZCBhcmUgb2Z0ZW4gbWl4ZWQgdXAsIHN1Y2ggYXMgJ20nIGFuZCAnbicsIGFyZSBtYXBwZWQgdG8gdGhlIHNhbWUKY2hhcmFjdGVyLiAgRG9uJ3QgZG8gdGhpcyB0b28gbXVjaCwgYWxsIHdvcmRzIHdpbGwgc3RhcnQgbG9va2luZyBhbGlrZS4KCkNoYXJhY3RlcnMgdGhhdCBkbyBub3QgYXBwZWFyIGluIFNPRk9GUk9NIHdpbGwgYmUgbGVmdCBvdXQsIGV4Y2VwdCB0aGF0IGFsbAp3aGl0ZSBzcGFjZSBpcyByZXBsYWNlZCBieSBvbmUgc3BhY2UuICBTZXF1ZW5jZXMgb2YgdGhlIHNhbWUgY2hhcmFjdGVyIGluClNPRk9GUk9NIGFyZSByZXBsYWNlZCBieSBvbmUuCgpZb3UgY2FuIHVzZSB0aGUgfHNvdW5kZm9sZCgpfCBmdW5jdGlvbiB0byB0cnkgb3V0IHRoZSByZXN1bHRzLiAgT3Igc2V0IHRoZQondmVyYm9zZScgb3B0aW9uIHRvIHNlZSB0aGUgc2NvcmUgaW4gdGhlIG91dHB1dCBvZiB0aGUgfHo/fCBjb21tYW5kLgoKCiB2aW06dHc9Nzg6c3c9NDp0cz04OmZ0PWhlbHA6bm9ybDoK