VGhhbmtzIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciBwYXRjaGVzIGFuZCBjb250cmlidXRpb25zOgoKTWljaGFlbCBIdW5vbGQgPG0uaHVub2xkQGdteC5kZT4KICBmb3IgdGhlIGluaXRpYWwgc2FhNzE0NiBkcml2ZXIgYW5kIGl0J3MgcmVjZW50IG92ZXJoYXVsCgpDaHJpc3RpYW4gVGhlaXNzCiAgZm9yIGhpcyB3b3JrIG9uIHRoZSBpbml0aWFsIExpbnV4IERWQiBkcml2ZXIKCk1hcmN1cyBNZXR6bGVyIDxtb2NtQG1ldHpsZXJicm9zLmRlPgpSYWxwaCBNZXR6bGVyIDxyamttQG1ldHpsZXJicm9zLmRlPgogIGZvciB0aGVpciBjb250aW51aW5nIHdvcmsgb24gdGhlIERWQiBkcml2ZXIKCk1pY2hhZWwgSG9senQgPGtqdUBkZWJpYW4ub3JnPgogIGZvciBoaXMgY29udHJpYnV0aW9ucyB0byB0aGUgZHZiLW5ldCBkcml2ZXIKCkRpZWdvIFBpY2NpYW5pIDxkLnBpY2NpYW5pQG5vdmFjb21wLml0PgogIGZvciBDeWJlckxvZ2luIGZvciBMaW51eCB3aGljaCBhbGxvd3MgbG9nZ2luZyBvbnRvIEVPTgogIChpbiBjYXNlIHlvdSBhcmUgd29uZGVyaW5nIHdoZXJlIEN5YmVyTG9naW4gaXMsIEVPTiBjaGFuZ2VkIGl0cyBsb2dpbgogIHByb2NlZHVyZSBhbmQgQ3liZXJMb2dpbiBpcyBubyBsb25nZXIgdXNlZC4pCgpNYXJ0aW4gU2NoYWxsZXIgPG1hcnRpbkBzbXVyZi5mcmFua2VuLmRlPgogIGZvciBwYXRjaGluZyB0aGUgY2FibGUgY2FyZCBkZWNvZGVyIGRyaXZlcgoKS2xhdXMgU2NobWlkaW5nZXIgPEtsYXVzLlNjaG1pZGluZ2VyQGNhZHNvZnQuZGU+CiAgZm9yIHZhcmlvdXMgZml4ZXMgcmVnYXJkaW5nIHR1bmluZywgT1NEIGFuZCBDSSBzdHVmZiBhbmQgaGlzIHdvcmsgb24gVkRSCgpTdGV2ZSBCcm93biA8c2Jyb3duQGNvcnRsYW5kLmNvbT4KICBmb3IgaGlzIEFGQyBrZXJuZWwgdGhyZWFkCgpDaHJpc3RvcGggTWFydGluIDxtYXJ0aW5AdW5pLW1haW56LmRlPgogIGZvciBoaXMgTElSQyBpbmZyYXJlZCBoYW5kbGVyCgpBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBsaW51eHR2Lm9yZz4KRGVubmlzIE5vZXJtYW5uIDxkZW5uaXMubm9lcm1hbm5Abm9lcm5ldC5kZT4KRmVsaXggRG9ta2UgPHRtYmluY0BlbGl0ZWR2Yi5uZXQ+CkZsb3JpYW4gU2NoaXJtZXIgPGpvbHRAdHV4Ym94Lm9yZz4KUm9ubnkgU3RydXR6IDwzZGVzQGVsaXRlZHZiLmRlPgpXb2xmcmFtIEpvb3N0IDxkYm94MkBmcm9rYXNjaHdlaS5kZT4KLi4uYW5kIGFsbCB0aGUgb3RoZXIgZGJveDIgcGVvcGxlCiAgZm9yIG1hbnkgYnVnZml4ZXMgaW4gdGhlIGdlbmVyaWMgRFZCIENvcmUsIGZyb250ZW5kIGRyaXZlcnMgYW5kCiAgdGhlaXIgd29yayBvbiB0aGUgZGJveDIgcG9ydCBvZiB0aGUgRFZCIGRyaXZlcgoKT2xpdmVyIEVuZHJpc3MgPG8uZW5kcmlzc0BnbXguZGU+CiAgZm9yIG1hbnkgYnVnZml4ZXMKCkFuZHJldyBkZSBRdWluY2V5IDxhZHFfZHZiQGxpZHNraWFsZi5uZXQ+CiAgZm9yIHRoZSB0ZGExMDA0eCBmcm9udGVuZCBkcml2ZXIsIGFuZCB2YXJpb3VzIGJ1Z2ZpeGVzCgpQZXRlciBTY2hpbGRtYW5uIDxwZXRlci5zY2hpbGRtYW5uQHdlYi5kZT4KICBmb3IgdGhlIGRyaXZlciBmb3IgdGhlIFRlY2huaXNhdCBTa3lTdGFyMiBQQ0kgRFZCIGNhcmQKClZhZGltIENhdGFuYSA8c2t5c3RhckBtb2xkb3ZhLmNjPgpSb2JlcnRvIFJhZ3VzYSA8ci5yYWd1c2FAbGliZXJvLml0PgpBdWd1c3RvIENhcmRvc28gPGF1Z3VzdG9AY2FyaGlsLm5ldD4KICBmb3IgYWxsIHRoZSB3b3JrIGZvciB0aGUgRmxleENvcElJIGNoaXBzZXQgYnkgQjJDMixJbmMuCgpEYXZvciBFbWFyZCA8ZW1hcmRAc29mdGhvbWUubmV0PgogIGZvciBoaXMgd29yayBvbiB0aGUgYnVkZ2V0IGRyaXZlcnMsIHRoZSBkZW11eCBjb2RlLAogIHRoZSBtb2R1bGUgdW5sb2FkaW5nIHByb2JsZW1zLCAuLi4KCkhhbnMtRnJpZWRlciBWb2d0IDxoZnZvZ3RAYXJjb3IuZGU+CiAgZm9yIGhpcyB3b3JrIG9uIGNhbGN1bGF0aW5nIGFuZCBjaGVja2luZyB0aGUgY3JjJ3MgZm9yIHRoZQogIFRlY2hub1RyZW5kL0hhdXBwYXVnZSBERUMgZHJpdmVyIGZpcm13YXJlCgpNaWNoYWVsIERyZWhlciA8bWljaGFlbEA1ZG90MS5kZT4KQW5kcmVhcyAncmFuZHknIFdlaW5iZXJnZXIKICBmb3IgdGhlIHN1cHBvcnQgb2YgdGhlIEZ1aml0c3UtU2llbWVucyBBY3RpdnkgYnVkZ2V0IERWQi1TCgpLZW5uZXRoIEFhZmz4eSA8a2UtYWFAZnJpc3VyZi5ubz4KICBmb3IgYWRkaW5nIHN1cHBvcnQgZm9yIFR5cGhvb24gRFZCLVMgYnVkZ2V0IGNhcmQKCkVybnN0IFBlaW5saWNoIDxlLnBlaW5saWNoQGlub2RlLmF0PgogIGZvciB0dW5pbmcvRGlTRXFDIHN1cHBvcnQgZm9yIHRoZSBERUMgMzAwMC1zCgpQZXRlciBCZXV0bmVyIDxwLmJldXRuZXJAZ214Lm5ldD4KICBmb3IgdGhlIElSIGNvZGUgZm9yIHRoZSB0dHVzYi1kZWMgZHJpdmVyCgpXaWxzb24gTWljaGFlbHMgPHdpbHNvbm1pY2hhZWxzQGVhcnRobGluay5uZXQ+CiAgZm9yIHRoZSBsZ2R0MzMweCBmcm9udGVuZCBkcml2ZXIsIGFuZCB2YXJpb3VzIGJ1Z2ZpeGVzCgpNaWNoYWVsIEtydWZreSA8bWtydWZreUBtMWsubmV0PgogIGZvciBtYWludGFpbmluZyB2NGwvZHZiIGludGVyLXRyZWUgZGVwZW5kZW5jaWVzCgpUYXlsb3IgSmFjb2IgPHJ0amFjb2JAZWFydGhsaW5rLm5ldD4KICBmb3IgdGhlIG54dDIwMDIgZnJvbnRlbmQgZHJpdmVyCgpKZWFuLUZyYW5jb2lzIFRoaWJlcnQgPGplYW5mcmFuY29pc0BzYWdldHYuY29tPgogIGZvciB0aGUgbnh0MjAwNCBmcm9udGVuZCBkcml2ZXIKCktpcmsgTGFwcmF5IDxraXJrLmxhcHJheUBnbWFpbC5jb20+CiAgZm9yIHRoZSBvcjUxMjExIGFuZCBvcjUxMTMyIGZyb250ZW5kIGRyaXZlcnMsIGFuZAogIGZvciBtZXJnaW5nIHRoZSBueHQyMDAyIGFuZCBueHQyMDA0IG1vZHVsZXMgaW50byBhCiAgc2luZ2xlIG54dDIwMHggZnJvbnRlbmQgZHJpdmVyLgoKKElmIHlvdSB0aGluayB5b3Ugc2hvdWxkIGJlIGluIHRoaXMgbGlzdCwgYnV0IHlvdSBhcmUgbm90LCBkcm9wIGEKIGxpbmUgdG8gdGhlIERWQiBtYWlsaW5nIGxpc3QpCg==