ICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjkKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjkgdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSAKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy45IGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgOC4wLCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgOC4wLgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZTogCgogICAgaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKQXBhY2hlIENvbW1vbnMgTGFuZywgYSBwYWNrYWdlIG9mIEphdmEgdXRpbGl0eSBjbGFzc2VzIGZvciB0aGUKY2xhc3NlcyB0aGF0IGFyZSBpbiBqYXZhLmxhbmcncyBoaWVyYXJjaHksIG9yIGFyZSBjb25zaWRlcmVkIHRvIGJlIHNvCnN0YW5kYXJkIGFzIHRvIGp1c3RpZnkgZXhpc3RlbmNlIGluIGphdmEubGFuZy4KCk5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLiBSZXF1aXJlcyBKYXZhIDguMCwgc3VwcG9ydHMgSmF2YSA5LCAxMCwgMTEKCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gTEFORy0xNDQyOiBKYXZhZG9jIHBvaW50aW5nIHRvIENvbW1vbnMgUk5HLgpvICAgICAgICAgICAgQWRkaW5nIHRoZSBGdW5jdGlvbnMgY2xhc3MuCm8gTEFORy0xNDExOiBBZGQgaXNFbXB0eSBtZXRob2QgdG8gT2JqZWN0VXRpbHMgVGhhbmtzIHRvIEFsZXhhbmRlciBUc3ZldGtvdi4KbyBMQU5HLTE0MjI6IEFkZCBudWxsLXNhZmUgU3RyaW5nVXRpbHMudmFsdWVPZihjaGFyW10pIHRvIGRlbGVnYXRlIHRvIFN0cmluZy52YWx1ZU9mKGNoYXJbXSkKbyBMQU5HLTE0Mjc6IEFkZCBBUEkgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLmlzSmF2YVZlcnNpb25BdE1vc3QoSmF2YVZlcnNpb24pCgoKQ2hhbmdlczoKbyBMQU5HLTE0MTY6IEFkZCBtb3JlIFN5c3RlbVV0aWxzLklTX0pBVkFfWFggdmFyaWFudHMuCm8gTEFORy0xNDE2OiBVcGRhdGUgdG8gSlVuaXQgNQpvIExBTkctMTQxNzogQWRkIEBGdW5jdGlvbmFsSW50ZXJmYWNlIHRvIFRocmVhZFByZWRpY2F0ZSBhbmQgVGhyZWFkR3JvdXBQcmVkaWNhdGUKbyBMQU5HLTE0MTU6IFVwZGF0ZSBKYXZhIExhbmd1YWdlIHJlcXVpcmVtZW50IHRvIDEuOApvIExBTkctMTQzNjogQ29uc29saWRhdGUgdGhlIFN0cmluZ1V0aWxzIGVxdWFscyBhbmQgZXF1YWxzSWdub3JlQ2FzZSBKYXZhZG9jIGFuZCBpbXBsZW1lbnRhdGlvbgpvICAgICAgICAgICAgKGRvYykgRml4IGphdmFkb2MgZm9yICdzdGFydEluZGV4JyBwYXJhbWV0ZXIgb2YgU3RyaW5nVXRpbHMuam9pbigpIG1ldGhvZHMuIEdpdEh1YiBQUiAjNDEyLiBUaGFua3MgdG8gQW5kcmVpIFRyb2llIGFmdDkwLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIExhbmcsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBBcGFjaGUgQ29tbW9ucyBMYW5nIHdlYnNpdGU6CgpodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWxhbmcvCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjguMQogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuOC4xIHZlcnNpb24gb2YgQXBhY2hlIENvbW1vbnMgTGFuZy4KQ29tbW9ucyBMYW5nIGlzIGEgc2V0IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCByZXVzYWJsZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIG9mIHVzZSBpbiBhbnkKSmF2YSBlbnZpcm9ubWVudC4KCkxhbmcgMy4wIGFuZCBvbndhcmRzIG5vdyB0YXJnZXRzIEphdmEgNy4wLCBtYWtpbmcgdXNlIG9mIGZlYXR1cmVzIHRoYXQgYXJyaXZlZCB3aXRoIEphdmEgNy4wLgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZToKCiAgICBodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKVGhpcyByZWxlYXNlIGlzIGEgYnVnZml4IGZvciBSZXN0b3JpbmcgQnVuZGxlLVN5bWJvbGljTmFtZSBpbiB0aGUgTUFOSUZFU1QubWYgZmlsZS4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgoKRml4ZWQgQnVnczoKbyBMQU5HLTE0MTk6IFJlc3RvcmUgQnVuZGxlU3ltYm9saWNOYW1lIGZvciBPU0dpCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgTGFuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLjgKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoZSAzLjggdmVyc2lvbiBvZiBBcGFjaGUgQ29tbW9ucyBMYW5nLgpDb21tb25zIExhbmcgaXMgYSBzZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIHJldXNhYmxlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueQpKYXZhIGVudmlyb25tZW50LgoKTGFuZyAzLjAgYW5kIG9ud2FyZHMgbm93IHRhcmdldHMgSmF2YSA3LjAsIG1ha2luZyB1c2Ugb2YgZmVhdHVyZXMgdGhhdCBhcnJpdmVkIHdpdGggSmF2YSA3LjAuCgpGb3IgdGhlIGFkdmljZSBvbiB1cGdyYWRpbmcgZnJvbSAyLnggdG8gMy54LCBzZWUgdGhlIGZvbGxvd2luZyBwYWdlOgoKICAgIGh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9hcnRpY2xlM18wLmh0bWwKCkFwYWNoZSBDb21tb25zIExhbmcsIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBmb3IgdGhlCmNsYXNzZXMgdGhhdCBhcmUgaW4gamF2YS5sYW5nJ3MgaGllcmFyY2h5LCBvciBhcmUgY29uc2lkZXJlZCB0byBiZSBzbwpzdGFuZGFyZCBhcyB0byBqdXN0aWZ5IGV4aXN0ZW5jZSBpbiBqYXZhLmxhbmcuCgpOZXcgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcy4gUmVxdWlyZXMgSmF2YSA3LCBzdXBwb3J0cyBKYXZhIDgsIDksIDEwLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBMQU5HLTEzNTI6IEVudW1VdGlscy5nZXRFbnVtSWdub3JlQ2FzZSBhbmQgaXNWYWxpZEVudW1JZ25vcmVDYXNlIG1ldGhvZHMgYWRkZWQgVGhhbmtzIHRvIFJ1c2xhbiBTaWJnYXR1bGxpbi4KbyBMQU5HLTEzNzI6IEFkZCBUb1N0cmluZ1N1bW1hcnkgYW5ub3RhdGlvbiBUaGFua3MgdG8gU+lyZ2lvIE96YWtpLgpvIExBTkctMTM1NjogQWRkIGJ5cGFzcyBvcHRpb24gZm9yIGNsYXNzZXMgdG8gcmVjdXJzaXZlIGFuZCByZWZsZWN0aXZlIEVxdWFsc0J1aWxkZXIgVGhhbmtzIHRvIFlhdGhvcyBVRy4KbyBMQU5HLTEzOTE6IEltcHJvdmUgSmF2YWRvYyBmb3IgU3RyaW5nVXRpbHMuaXNBbnlFbXB0eShudWxsKSBUaGFua3MgdG8gU2F1cm8gTWF0dWxsaSwgT2xlZyBDaHViYXJ5b3YuCm8gTEFORy0xMzkzOiBBZGQgQVBJIFN5c3RlbVV0aWxzLlN0cmluZyBnZXRFbnZpcm9ubWVudFZhcmlhYmxlKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgZGVmYXVsdFZhbHVlKSBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTM5NDogb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzIHNob3VsZCBub3Qgd3JpdGUgdG8gU3lzdGVtLmVyci4gVGhhbmtzIHRvIFNlYmIsIEdhcnkgR3JlZ29yeS4KbyBMQU5HLTEyMzg6IEFkZCBSZWdleFV0aWxzIGNsYXNzIGluc3RlYWQgb2Ygb3ZlcmxvYWRpbmcgbWV0aG9kcyBpbiBTdHJpbmdVdGlscyB0aGF0IHRha2UgYSByZWdleCB0byB0YWtlIHByZWNvbXBpbGVkIFBhdHRlcm4uIFRoYW5rcyB0byBDaHJpc3RvcGhlciBDb3JkZWlybywgR2FyeSBHcmVnb3J5LCBCcnVubyBQLiBLaW5vc2hpdGEsIE9sZWcgQ2h1YmFyeW92LgpvIExBTkctMTM5MDogU3RyaW5nVXRpbHMuam9pbigpIHdpdGggc3VwcG9ydCBmb3IgTGlzdDw/PiB3aXRoIGNvbmZpZ3VyYWJsZSBzdGFydC9lbmQgaW5kaWNlcy4gVGhhbmtzIHRvIEpvY2hlbiBTY2hhbGFuZGEuCm8gTEFORy0xMzkyOiBNZXRob2RzIGZvciBnZXR0aW5nIGZpcnN0IG5vbiBlbXB0eSBvciBub24gYmxhbmsgdmFsdWUgVGhhbmtzIHRvIEplZmYgTmVsc29uLgpvIExBTkctMTQwODogUm91bmRpbmcgdXRpbGl0aWVzIGZvciBjb252ZXJ0aW5nIHRvIEJpZ0RlY2ltYWwKCkZpeGVkIEJ1Z3M6Cm8gTEFORy0xMzgwOiBGYXN0RGF0ZVBhcnNlciB0b28gc3RyaWN0IG9uIGFiYnJldmlhdGVkIHNob3J0IG1vbnRoIHN5bWJvbHMgVGhhbmtzIHRvIE1hcmt1cyBKZWxzbWEuCm8gTEFORy0xMzk2OiBKc29uVG9TdHJpbmdTdHlsZSBkb2VzIG5vdCBlc2NhcGUgc3RyaW5nIG5hbWVzCm8gTEFORy0xMzk1OiBKc29uVG9TdHJpbmdTdHlsZSBkb2VzIG5vdCBlc2NhcGUgZG91YmxlIHF1b3RlIGluIGEgc3RyaW5nIHZhbHVlIFRoYW5rcyB0byBKaW0gR2FuLgpvIExBTkctMTM4NDogTmV3IEphdmEgdmVyc2lvbiAoIjExIikgbXVzdCBiZSBoYW5kbGVkIFRoYW5rcyB0byBJYW4gWW91bmcuCm8gTEFORy0xMzY0OiBFeGNlcHRpb25VdGlscyNnZXRSb290Q2F1c2UoVGhyb3dhYmxlIHQpIHNob3VsZCByZXR1cm4gdCBpZiBubyBsb3dlciBsZXZlbCBjYXVzZSBleGlzdHMgVGhhbmtzIHRvIFpoZW5nIFhpZS4KbyBMQU5HLTEwNjA6IE51bWJlclV0aWxzLmlzTnVtYmVyIGFzc3VtZXMgbnVtYmVyIHN0YXJ0aW5nIHdpdGggWmVybyBUaGFua3MgdG8gUGlvdHIgS29zbWFsYS4KbyBMQU5HLTEzNzU6IGRlZmF1bHRTdHJpbmcoZmluYWwgU3RyaW5nIHN0cikgaW4gU3RyaW5nVXRpbHMgdG8gcmV1c2UgZGVmYXVsdFN0cmluZyhmaW5hbCBTdHJpbmcgc3RyLCBmaW5hbCBTdHJpbmcgZGVmYXVsdFN0cikgVGhhbmtzIHRvIEplcnJ5IFpoYW8uCm8gTEFORy0xMzc0OiBQYXJzaW5nIEpzb24gQXJyYXkgZmFpbGVkIFRoYW5rcyB0byBKYXN3YW50aCBCYWxhLgpvIExBTkctMTM3MTogRml4IFR5cGVVdGlscyNwYXJhbWV0ZXJpemUgdG8gd29yayBjb3JyZWN0bHkgd2l0aCBuYXJyb3dlci10eXBlZCBhcnJheSBUaGFua3MgdG8gRG1pdHJ5IE92Y2hpbm5pa292LgpvIExBTkctMTM3MDogRml4IEV2ZW50Q291bnRDaXJjdWl0QnJlYWtlciBpbmNyZW1lbnQgYmF0Y2ggVGhhbmtzIHRvIEFuZHJlIERpZWIuCm8gTEFORy0xMzg1OiBOdW1iZXJVdGlscy5jcmVhdGVOdW1iZXIoKSB0aHJvd3MgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpbnN0ZWFkIG9mIE51bWJlckZvcm1hdEV4Y2VwdGlvbiBUaGFua3MgdG8gUm9oYW4gUGFkaHllLgpvIExBTkctMTM5NzogV29yZFV0aWxzLndyYXAgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiB3cmFwTGVuZ3RoIGlzIEludGVnZXIuTUFYX1ZBTFVFLiBUaGFua3MgdG8gVGFrYW5vYnUgQXNhbnVtYS4KbyBMQU5HLTE0MDE6IFR5cG8gaW4gSmF2YURvYyBmb3IgbGFzdEluZGV4T2YgVGhhbmtzIHRvIFJvbWFuIEdvbHlzaGV2LCBBbGV4IE1hbWVkb3YuCgpDaGFuZ2VzOgpvIExBTkctMTM2NzogT2JqZWN0VXRpbHMuaWRlbnRpdHlUb1N0cmluZyhPYmplY3QpIGFuZCBmcmllbmRzIHNob3VsZCBhbGxvY2F0ZSBidWlsZGVycyBhbmQgYnVmZmVycyB3aXRoIGEgc2l6ZSBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTQwNTogUmVtb3ZlIGNoZWNrcyBmb3IgamF2YSB2ZXJzaW9ucyBiZWxvdyB0aGUgbWluaW11bSBzdXBwb3J0ZWQgb25lIFRoYW5rcyB0byBMYXJzIEdyZWZlci4KbyBMQU5HLTE0MDI6IE51bGwvaW5kZXggc2FmZSBnZXQgbWV0aG9kcyBmb3IgQXJyYXlVdGlscyBUaGFua3MgdG8gTWFyayBEYWNlay4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBMYW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMuNwogICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhlIDMuNyB2ZXJzaW9uIG9mIEFwYWNoZSBDb21tb25zIExhbmcuCkNvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55CkphdmEgZW52aXJvbm1lbnQuCgpMYW5nIDMuMCBhbmQgb253YXJkcyBub3cgdGFyZ2V0cyBKYXZhIDUuMCwgbWFraW5nIHVzZSBvZiBmZWF0dXJlcyB0aGF0IGFycml2ZWQgd2l0aCBKYXZhIDUuMCBzdWNoIGFzIGdlbmVyaWNzLAp2YXJpYWJsZSBhcmd1bWVudHMsIGF1dG9ib3hpbmcsIGNvbmN1cnJlbmN5IGFuZCBmb3JtYXR0ZWQgb3V0cHV0LgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZToKCiAgICBodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2xhbmcvYXJ0aWNsZTNfMC5odG1sCgpBcGFjaGUgQ29tbW9ucyBMYW5nLCBhIHBhY2thZ2Ugb2YgSmF2YSB1dGlsaXR5IGNsYXNzZXMgZm9yIHRoZQpjbGFzc2VzIHRoYXQgYXJlIGluIGphdmEubGFuZydzIGhpZXJhcmNoeSwgb3IgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28Kc3RhbmRhcmQgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5sYW5nLgoKTmV3IGZlYXR1cmVzIGFuZCBidWcgZml4ZXMuIFJlcXVpcmVzIEphdmEgNywgc3VwcG9ydHMgSmF2YSA4LCA5LCAxMC4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gTEFORy0xMzU1OiBUaW1lWm9uZS5nZXRUaW1lWm9uZSgpIGluIEZhc3REYXRlUGFyc2VyIGNhdXNlcyByZXNvdXJjZSBjb250ZW50aW9uIChQUiAjMjk2LikgVGhhbmtzIHRvIENoYXMgSG9udG9uLgpvIExBTkctMTM2MDogQWRkIG1ldGhvZHMgdG8gT2JqZWN0VXRpbHMgdG8gZ2V0IHZhcmlvdXMgZm9ybXMgb2YgY2xhc3MgbmFtZXMgaW4gYSBudWxsLXNhZmUgbWFubmVyIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCgpGaXhlZCBCdWdzOgpvIExBTkctMTM2MjogRml4IHRlc3RzIERhdGVVdGlsc1Rlc3QgZm9yIEphdmEgOSB3aXRoIGVuX0dCIGxvY2FsZSBUaGFua3MgdG8gU3RlcGhlbiBDb2xlYm91cm5lLgpvIExBTkctMTM2NTogRml4IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIGlzSmF2YVZlcnNpb25BdExlYXN0IG9uIEphdmEgMTAsIGFkZCBTeXN0ZW1VdGlscy5JU19KQVZBXzEwLCBhZGQgSmF2YVZlcnNpb24uSkFWQV8xMCBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIExBTkctMTM0ODogU3RhY2tPdmVyZmxvd0Vycm9yIG9uIFR5cGVVdGlscy50b1N0cmluZyguLi4pIGZvciBhIGdlbmVyaWMgcmV0dXJuIHR5cGUgb2YgRW51bS52YWx1ZU9mIFRoYW5rcyB0byBtYnVzc28uCm8gTEFORy0xMzUwOiBDb25zdHJ1Y3RvclV0aWxzLmludm9rZUNvbnN0cnVjdG9yKENsYXNzLCBPYmplY3QuLi4pIHJlZ3Jlc3Npb24gVGhhbmtzIHRvIEJyZXR0IEthaWwuCm8gTEFORy0xMzQ5OiBFcXVhbHNCdWlsZGVyI2lzUmVnaXN0ZXJlZDogc3dhcHBlZFBhaXIgY29uc3RydWN0aW9uIGJ1ZyBUaGFua3MgdG8gTmFtYW4gTmlnYW0uCm8gTEFORy0xMzU3OiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5GYXN0RGF0ZVBhcnNlciBzaG91bGQgdXNlIHRvVXBwZXJDYXNlKExvY2FsZSkgVGhhbmtzIHRvIEJydWNlS3VpTGl1LgoKQ2hhbmdlczoKbyBMQU5HLTEzNTg6IEltcHJvdmUgU3RyaW5nVXRpbHMjcmVwbGFjZSB0aHJvdWdocHV0IFRoYW5rcyB0byBTdGVwaGFuZSBMYW5kZWxsZS4KbyBMQU5HLTEzNDY6IFJlbW92ZSBkZXByZWNhdGlvbiBmcm9tIFJhbmRvbVN0cmluZ1V0aWxzCm8gTEFORy0xMzYxOiBFeGNlcHRpb25VdGlscy5nZXRUaHJvd2FibGVMaXN0KCkgaXMgdXNpbmcgZGVwcmVjYXRlZCBFeGNlcHRpb25VdGlscy5nZXRDYXVzZSgpIFRoYW5rcyB0byBBbmEuCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy42CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy42IHZlcnNpb24gb2YKQXBhY2hlIENvbW1vbnMgTGFuZyBhcyB3ZWxsIGFzIGEgaGlzdG9yeSBhbGwgY2hhbmdlcyBpbiB0aGUgQ29tbW9ucyBMYW5nIDMueApyZWxlYXNlIGxpbmUuIENvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUKY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBvZiB1c2UgaW4gYW55IEphdmEgZW52aXJvbm1lbnQuIENvbW1vbnMgTGFuZyAzLjYgYXQKbGVhc3QgcmVxdWlyZXMgSmF2YSA3LjAuIE5vdGUgdGhhdCB0aGlzIGhhcyBjaGFuZ2VkIGZyb20gQ29tbW9ucyBMYW5nIDMuNSwgd2hpY2gKb25seSByZXF1aXJlZCBKYXZhIDEuNi4KCkZvciB0aGUgYWR2aWNlIG9uIHVwZ3JhZGluZyBmcm9tIDIueCB0byAzLngsIHNlZSB0aGUgZm9sbG93aW5nIHBhZ2U6CgogICAgaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKSElHSExJR0hUUwo9PT09PT09PT09CgpTb21lIG9mIHRoZSBoaWdobGlnaHRzIGluIHRoaXMgcmVsZWFzZSBpbmNsdWRlOgoKbyBUaGUgY2xhc3Mgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLmNvbmN1cnJlbnQuTWVtb2l6ZXIgaXMgYW4gaW1wbGVtZW50YXRpb24KICAgIG9mIHRoZSBNZW1vaXplciBwYXR0ZXJuIGFzIHNob3duIGluCiAgICBHb2V0eiwgQnJpYW4gZXQgYWwuICgyMDA2KSAtIEphdmEgQ29uY3VycmVuY3kgaW4gUHJhY3RpY2UsIHAuIDEwOC4KbyBUaGUgY2xhc3Mgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFyY2hVdGlscyBoYXMgYmVlbiBhZGRlZC4gQXJjaFV0aWxzIGlzCiAgICBhIHV0aWxpdHkgY2xhc3MgZm9yIHRoZSAib3MuYXJjaCIgc3lzdGVtIHByb3BlcnR5LgoKREVQUkVDQVRJT05TCj09PT09PT09PT09PQoKVGhlIEFwYWNoZSBDb21tb25zIENvbW11bml0eSBoYXMgcmVjZW50bHkgc2V0IHVwIHRoZSBDb21tb25zIFRleHQgY29tcG9uZW50CmFzIGEgaG9tZSBmb3IgYWxnb3JpdGhtcyB3b3JraW5nIG9uIHN0cmluZ3MuIEZvciB0aGlzIHJlYXNvbiBtb3N0IG9mIHRoZSBzdHJpbmcKZm9jdXNlZCBmdW5jdGlvbmFsaXR5IGluIENvbW1vbnMgTGFuZyBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBtb3ZlZCB0bwpDb21tb25zIFRleHQuIFRoaXMgaW5jbHVkZXM6CgpvIEFsbCBjbGFzc2VzIGluIHRoZSBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGV4dCBhbmQgdGhlCiAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGV4dC50cmFuc2xhdGUgcGFja2FnZXMKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nRXNjYXBlVXRpbHMKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuUmFuZG9tU3RyaW5nVXRpbHMKbyBUaGUgbWV0aG9kcyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nVXRpbHMuZ2V0SmFyb1dpbmtsZXJEaXN0YW5jZSBhbmQKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlscy5nZXRMZXZlbnNodGVpbkRpc3RhbmNlCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIENvbW1vbnMgVGV4dCB3ZWJzaXRlOgoKICAgIGh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvdGV4dAoKVGhlIGNsYXNzIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5DaGFyRW5jb2RpbmcgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZgpqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuCgpUaGUgZm9sbG93aW5nIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgaW4Kb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMgaW4gZmF2b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zZXJ0Cm1ldGhvZHMuIE5vdGUgdGhhdCB0aGUgaGFuZGxpbmcgZm9yIG51bGwgaW5wdXRzIGRpZmZlcnMgYmV0d2VlbiBhZGQgYW5kIGluc2VydC4KCm8gYWRkKGJvb2xlYW5bXSwgaW50LCBib29sZWFuKSAtPiBpbnNlcnQoaW50LCBib29sZWFuW10sIGJvb2xlYW4uLi4pCm8gYWRkKGJ5dGVbXSwgaW50LCBib29sZWFuKSAgICAtPiBpbnNlcnQoaW50LCBieXRlW10sIGJ5dGUuLi4pCm8gYWRkKGNoYXJbXSwgaW50LCBib29sZWFuKSAgICAtPiBpbnNlcnQoaW50LCBjaGFyW10sIGNoYXIuLi4pCm8gYWRkKGRvdWJsZVtdLCBpbnQsIGJvb2xlYW4pICAtPiBpbnNlcnQoaW50LCBkb3VibGVbXSwgZG91YmxlLi4uKQpvIGFkZChmbG9hdFtdLCBpbnQsIGJvb2xlYW4pICAgLT4gaW5zZXJ0KGludCwgZmxvYXRbXSwgZmxvYXQuLi4pCm8gYWRkKGludFtdLCBpbnQsIGJvb2xlYW4pICAgICAtPiBpbnNlcnQoaW50LCBpbnRbXSwgaW50Li4uKQpvIGFkZChsb25nW10sIGludCwgYm9vbGVhbikgICAgLT4gaW5zZXJ0KGludCwgbG9uZ1tdLCBsb25nLi4uKQpvIGFkZChzaG9ydFtdLCBpbnQsIGJvb2xlYW4pICAgLT4gaW5zZXJ0KGludCwgc2hvcnRbXSwgc2hvcnQuLi4pCm8gYWRkKFRbXSwgaW50LCBib29sZWFuKSAgICAgICAtPiBpbnNlcnQoaW50LCBUW10sIFQuLi4pCgoKQ09NUEFUSUJJTElUWSBXSVRIIEpBVkEgOQo9PT09PT09PT09PT09PT09PT0KClRoZSBNQU5JRkVTVC5NRiBub3cgY29udGFpbnMgYW4gYWRkaXRpb25hbCBlbnRyeToKCiAgQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMKClRoaXMgc2hvdWxkIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIENvbW1vbnMgTGFuZyAzLjYgYXMgYSBtb2R1bGUgaW4gdGhlIEphdmEgOQptb2R1bGUgc3lzdGVtLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgaXNzdWUgYW5kIHRoZQpyZWZlcmVuY2VkIG1haWxpbmcgbGlzdCBkaXNjdXNzaW9uczoKCiAgICBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTMzOAoKVGhlIGJ1aWxkIHByb2JsZW1zIHByZXNlbnQgaW4gdGhlIDMuNSByZWxlYXNlIGhhdmUgYmVlbiByZXNvbHZlZC4gQnVpbGRpbmcKQ29tbW9ucyBMYW5nIDMuNiBzaG91bGQgd29yayBvdXQgb2YgdGhlIGJveCB3aXRoIHRoZSBsYXRlc3QgSmF2YSA5IEVBIGJ1aWxkLgpQbGVhc2UgcmVwb3J0IGFueSBKYXZhIDkgcmVsYXRlZCBpc3N1ZXMgYXQ6CgogICAgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09CgpvIExBTkctMTMzNjogQWRkIE5VTCBCeXRlIFRvIENoYXJVdGlscy4gVGhhbmtzIHRvIEJlbHVnYSBCZWhyLgpvIExBTkctMTMwNDogQWRkIG1ldGhvZCBpbiBTdHJpbmdVdGlscyB0byBkZXRlcm1pbmUgaWYgc3RyaW5nIGNvbnRhaW5zIGJvdGgKICAgICAgICAgICAgIG1peGVkIGNhc2VkIGNoYXJhY3RlcnMuIFRoYW5rcyB0byBBbmR5IEtsaW1jemFrLgpvIExBTkctMTMyNTogSW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBUb1N0cmluZ0J1aWxkZXIgY2xhc3MgdG8gMTAwJS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBcnNoYWQgQmFzaGEuCm8gTEFORy0xMzA3OiBBZGQgYSBtZXRob2QgaW4gU3RyaW5nVXRpbHMgdG8gZXh0cmFjdCBvbmx5IGRpZ2l0cyBvdXQgb2YgaW5wdXQKICAgICAgICAgICAgIHN0cmluZy4gVGhhbmtzIHRvIEFyc2hhZCBCYXNoYS4KbyBMQU5HLTEyNTY6IEFkZCBKTUggbWF2ZW4gZGVwZW5kZW5jaWVzLiBUaGFua3MgdG8gQzByV2luLgpvIExBTkctMTE2NzogQWRkIG51bGwgZmlsdGVyIHRvIFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIuCiAgICAgICAgICAgICBUaGFua3MgdG8gTWFyayBEYWNlay4KbyBMQU5HLTEyOTk6IEFkZCBtZXRob2QgZm9yIGNvbnZlcnRpbmcgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGNvZGUgcG9pbnRzLgpvIExBTkctNjYwOiAgQWRkIG1ldGhvZHMgdG8gaW5zZXJ0IGFycmF5cyBpbnRvIGFycmF5cyBhdCBhbiBpbmRleC4KbyBMQU5HLTEwMzQ6IEFkZCBzdXBwb3J0IGZvciByZWN1cnNpdmUgY29tcGFyaXNvbiB0bwogICAgICAgICAgICAgRXF1YWxzQnVpbGRlciNyZWZsZWN0aW9uRXF1YWxzLiBUaGFua3MgdG8gWWF0aG9zIFVHLgpvIExBTkctMTA2NzogQWRkIGEgcmVmbGVjdGlvbi1iYXNlZCB2YXJpYW50IG9mIERpZmZCdWlsZGVyLgpvIExBTkctNzQwOiAgSW1wbGVtZW50YXRpb24gb2YgYSBNZW1vbWl6ZXIuIFRoYW5rcyB0byBKYW1lcyBTYXdsZS4KbyBMQU5HLTEyNTg6IEFkZCBBcnJheVV0aWxzI3RvU3RyaW5nQXJyYXkgbWV0aG9kLgogICAgICAgICAgICAgVGhhbmtzIHRvIElHLCBHcnplZ29yeiBSbz9uaWVja2kuCm8gTEFORy0xMTYwOiBTdHJpbmdVdGlscyNhYmJyZXZpYXRlIHNob3VsZCBzdXBwb3J0ICdjdXN0b20gZWxsaXBzZXMnIHBhcmFtZXRlci4KbyBMQU5HLTEyOTM6IEFkZCBTdHJpbmdVdGlscyNpc0FsbEVtcHR5IGFuZCAjaXNBbGxCbGFuayBtZXRob2RzLgogICAgICAgICAgICAgVGhhbmtzIHRvIFBpZXJyZSBUZW1wbGllciwgTWFydGluIFRhcmphbnlpLgpvIExBTkctMTMxMzogQWRkIEFyY2hVdGlscyAtIEFuIHV0aWxpdHkgY2xhc3MgZm9yIHRoZSAib3MuYXJjaCIgc3lzdGVtIHByb3BlcnR5LgogICAgICAgICAgICAgVGhhbmtzIHRvIFRvbXNjaGkuCm8gTEFORy0xMjcyOiBBZGQgc2h1ZmZsZSBtZXRob2RzIHRvIEFycmF5VXRpbHMuCm8gTEFORy0xMzE3OiBBZGQgTWV0aG9kVXRpbHMjZmluZEFubm90YXRpb24gYW5kIGV4dGVuZAogICAgICAgICAgICAgTWV0aG9kVXRpbHMjZ2V0TWV0aG9kc1dpdGhBbm5vdGF0aW9uIGZvciBub24tcHVibGljLCBzdXBlci1jbGFzcwogICAgICAgICAgICAgYW5kIGludGVyZmFjZSBtZXRob2RzLiBUaGFua3MgdG8gWWFzc2VyIFphbWFuaS4KbyBMQU5HLTEzMzE6IEFkZCBJbW11dGFibGVQYWlyLm51bGxQYWlyKCkuCm8gTEFORy0xMzMyOiBBZGQgSW1tdXRhYmxlVHJpcGxlLm51bGxUcmlwbGUoKS4KCkZJWEVEIEJVR1MKPT09PT09PT09PQoKbyBMQU5HLTEzMzc6IEZpeCB0ZXN0IGZhaWx1cmVzIGluIElCTSBKREsgOCBmb3IgVG9TdHJpbmdCdWlsZGVyVGVzdC4KbyBMQU5HLTEzMTk6IE11bHRpbGluZVJlY3Vyc2l2ZVRvU3RyaW5nU3R5bGUgU3RhY2tPdmVyZmxvd0Vycm9yIHdoZW4gb2JqZWN0IGlzCiAgICAgICAgICAgICBhbiBhcnJheS4KbyBMQU5HLTEzMjA6IExvY2FsZVV0aWxzI3RvTG9jYWxlIGRvZXMgbm90IHN1cHBvcnQgbGFuZ3VhZ2UgZm9sbG93ZWQgYnkgVU4gTS40OQogICAgICAgICAgICAgbnVtZXJpYy0zIGFyZWEgY29kZSBmb2xsb3dlZCBieSB2YXJpYW50LgpvIExBTkctMTMwMDogQ2xhcmlmeSBvciBpbXByb3ZlIGJlaGF2aW91ciBvZiBpbnQtYmFzZWQgaW5kZXhPZiBtZXRob2RzIGluCiAgICAgICAgICAgICBTdHJpbmdVdGlscy4gVGhhbmtzIHRvIE1hcmsgRGFjZWsuCm8gTEFORy0xMjg2OiBSYW5kb21TdHJpbmdVdGlscyByYW5kb20gbWV0aG9kIGNhbiBvdmVyZmxvdyBhbmQgcmV0dXJuIGNoYXJhY3RlcnMKICAgICAgICAgICAgIG91dHNpZGUgb2Ygc3BlY2lmaWVkIHJhbmdlLgpvIExBTkctMTI5MjogV29yZFV0aWxzLndyYXAgdGhyb3dzIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24uCm8gTEFORy0xMjg3OiBSYW5kb21TdHJpbmdVdGlscyNyYW5kb20gY2FuIGVudGVyIGluZmluaXRlIGxvb3AgaWYgZW5kIHBhcmFtZXRlcgogICAgICAgICAgICAgaXMgdG8gc21hbGwuIFRoYW5rcyB0byBJdmFuIE1vcm96b3YuCm8gTEFORy0xMjg1OiBOdWxsUG9pbnRlckV4Y2VwdGlvbiBpbiBGYXN0RGF0ZVBhcnNlciRUaW1lWm9uZVN0cmF0ZWd5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEZyYW5jZXNjbyBDaGljY2hpcmljY/IuCm8gTEFORy0xMjgxOiBKYXZhZG9jIG9mIFN0cmluZ1V0aWxzLm9yZGluYWxJbmRleE9mIGlzIGNvbnRyYWRpY3RvcnkuCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5kcmVhcyBMdW5kYmxhZC4KbyBMQU5HLTExODg6IFN0cmluZ1V0aWxzI2pvaW4oVC4uLik6IHdhcm5pbmc6IFt1bmNoZWNrZWRdIFBvc3NpYmxlIGhlYXAKICAgICAgICAgICAgIHBvbGx1dGlvbiBmcm9tIHBhcmFtZXRlcml6ZWQgdmFyYXJnIHR5cGUgVC4KbyBMQU5HLTExNDQ6IE11bHRpcGxlIGNhbGxzIG9mCiAgICAgICAgICAgICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuY29uY3VycmVudC5MYXp5SW5pdGlhbGl6ZXIuaW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBhcmUgcG9zc2libGUuIFRoYW5rcyB0byBXYWxkZW1hciBNYWllciwgR2FyeSBHcmVnb3J5LgpvIExBTkctMTI3NjogU3RyQnVpbGRlciNyZXBsYWNlQWxsIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbi4KICAgICAgICAgICAgIFRoYW5rcyB0byBBbmR5IEtsaW1jemFrLgpvIExBTkctMTI3ODogQm9vbGVhblV0aWxzIGphdmFkb2MgaXNzdWVzLiBUaGFua3MgdG8gRHVrZSBZaW4uCm8gTEFORy0xMDcwOiBBcnJheVV0aWxzI2FkZCBjb25mdXNpbmcgZXhhbXBsZSBpbiBqYXZhZG9jLgogICAgICAgICAgICAgVGhhbmtzIHRvIFBhdWwgUG9nb255c2hldi4KbyBMQU5HLTEyNzE6IFN0cmluZ1V0aWxzI2lzQW55RW1wdHkgYW5kICNpc0FueUJsYW5rIHNob3VsZCByZXR1cm4gZmFsc2UgZm9yIGFuCiAgICAgICAgICAgICBlbXB0eSBhcnJheS4gVGhhbmtzIHRvIFBpZXJyZSBUZW1wbGllci4KbyBMQU5HLTExNTU6IEFkZCBTdHJpbmdVdGlscyN1bndyYXAuIFRoYW5rcyB0byBTYWlmIEFzaWYsIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTMxMTogVHlwZVV0aWxzLnRvU3RyaW5nKCkgZG9lc24ndCBoYW5kbGUgcHJpbWl0aXZlIGFuZCBPYmplY3QgYXJyYXlzCiAgICAgICAgICAgICBjb3JyZWN0bHkuIFRoYW5rcyB0byBBYXJvbiBEaWd1bGxhLgpvIExBTkctMTMxMjogTG9jYWxlVXRpbHMjdG9Mb2NhbGUgZG9lcyBub3Qgc3VwcG9ydCBsYW5ndWFnZSBmb2xsb3dlZCBieSBVTiBNLjQ5CiAgICAgICAgICAgICBudW1lcmljLTMgYXJlYSBjb2RlLgpvIExBTkctMTI2NTogQnVpbGQgZmFpbHVyZXMgd2hlbiBidWlsZGluZyB3aXRoIEphdmEgOSBFQS4KbyBMQU5HLTEzMTQ6IGphdmFkb2MgY3JlYXRpb24gYnJva2VuIHdpdGggSmF2YSA4LiBUaGFua3MgdG8gQWxsb24gTXVyaWVuaWsuCm8gTEFORy0xMzEwOiBNZXRob2RVdGlscy5pbnZva2VNZXRob2QgdGhyb3dzIEFycmF5U3RvcmVFeGNlcHRpb24gaWYgdXNpbmcKICAgICAgICAgICAgIHZhcmFyZ3MgYXJndW1lbnRzIGFuZCBzbWFsbGVyIHR5cGVzIHRoYW4gdGhlIG1ldGhvZCBkZWZpbmVzLgogICAgICAgICAgICAgVGhhbmtzIHRvIERvbiBKZWJhLgoKQ0hBTkdFUwo9PT09PT09CgpvIExBTkctMTMzODogQWRkIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZSBNQU5JRkVTVCBlbnRyeSBmb3IgSmF2YSA5CiAgICAgICAgICAgICBjb21wYXRpYmlsaXR5LgpvIExBTkctMTMzNDogRGVwcmVjYXRlIENoYXJFbmNvZGluZyBpbiBmYXZvdXIgb2YKICAgICAgICAgICAgIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy4KbyBMQU5HLTExMTA6IEltcGxlbWVudCBIYXNoU2V0dkJpdFNldFRlc3QgdXNpbmcgSk1ILgogICAgICAgICAgICAgVGhhbmtzIHRvIEJydW5vIFAuIEtpbm9zaGl0YS4KbyBMQU5HLTEyOTA6IEluY3JlYXNlIHRlc3QgY292ZXJhZ2Ugb2Ygb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQW5kcmlpIEFicmFtb3YuCm8gTEFORy0xMjc0OiBTdHJTdWJzdGl0dXRvciBzaG91bGQgc3RhdGUgaXRzIHRocmVhZCBzYWZldHkuCm8gTEFORy0xMjc3OiBTdHJpbmdVdGlscyNnZXRMZXZlbnNodGVpbkRpc3RhbmNlIHJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24uCiAgICAgICAgICAgICBUaGFua3MgdG8geXVmY3V5LgpvIExBTkctMTI3OTogVXBkYXRlIEphdmEgcmVxdWlyZW1lbnQgZnJvbSBKYXZhIDYgdG8gNy4KbyBMQU5HLTExNDM6IFN0cmluZ1V0aWxzIHNob3VsZCB1c2UgdG9YeHh4Q2FzZShpbnQpIHJhdGhlciB0aGFuCiAgICAgICAgICAgICB0b1h4eHhDYXNlKGNoYXIpLiBUaGFua3MgdG8gc2ViYi4KbyBMQU5HLTEyOTc6IEFkZCBTeXN0ZW1VdGlscy5nZXRIb3N0TmFtZSgpIEFQSS4KbyBMQU5HLTEzMDE6IE1vdmluZyBhcGFjaGUtcmF0LXBsdWdpbiBjb25maWd1cmF0aW9uIGludG8gcGx1Z2luTWFuYWdlbWVudC4KICAgICAgICAgICAgIFRoYW5rcyB0byBLYXJsIEhlaW56IE1hcmJhaXNlLgpvIExBTkctMTMxNjogRGVwcmVjYXRlIGNsYXNzZXMvbWV0aG9kcyBtb3ZlZCB0byBjb21tb25zLXRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjUKCgpISUdITElHSFRTCj09PT09PT09PT0KClNvbWUgb2YgdGhlIGhpZ2hsaWdodHMgaW4gdGhpcyByZWxlYXNlIGluY2x1ZGU6CgpvIEFkZGVkIEphdmEgOSBkZXRlY3Rpb24gdG8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLgpvIFN1cHBvcnQgZm9yIHNoaWZ0aW5nIGFuZCBzd2FwcGluZyBlbGVtZW50cyBpbgogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLkFycmF5VXRpbHMuCm8gTmV3IG1ldGhvZHMgZm9yIGdlbmVyYXRpbmcgcmFuZG9tIHN0cmluZ3MgZnJvbSBkaWZmZXJlbnQgY2hhcmFjdGVyIGNsYXNzZXMKICAgIGluY2x1ZGluZyBhbHBoYWJldGljLCBhbHBoYS1udW1lcmljIGFuZCBBU0NJSSBhZGRlZCB0bwogICAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlJhbmRvbVN0cmluZ1V0aWxzLgpvIE51bWVyb3VzIGV4dGVuc2lvbnMgdG8gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzIGluY2x1ZGluZwogICAgbnVsbCBzYWZlIGNvbXBhcmUgdmFyaWFudHMsIG1vcmUgcmVtb3ZlIGFuZCByZXBsYWNlIHZhcmlhbnRzLCByb3RhdGlvbiBhbmQKICAgIHRydW5jYXRpb24uCm8gQWRkZWQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlRocmVhZFV0aWxzIC0gYSB1dGlsaXR5IGNsYXNzIHRvIHdvcmsgd2l0aAogICAgaW5zdGFuY2VzIG9mIGphdmEubGFuZy5UaHJlYWQgYW5kIGphdmEubGFuZy5UaHJlYWRHcm91cC4KbyBBZGRlZCBhbm5vdGF0aW9ucyBARXF1YWxzRXhjbHVkZSwgQEhhc2hDb2RlRXhjbHVkZSBhbmQgQFRvU3RyaW5nRWNsdWRlIHRvCiAgICBtYXJrIGZpZWxkcyB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgcmVmbGVjdGl2ZSBidWlsZGVycyBpbiB0aGUKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5idWlsZGVyIHBhY2thZ2UuCm8gU3VwcG9ydCBmb3IgdmFyaW91cyBtb2RpZnkgYW5kIHJldHJpZXZlIHZhbHVlIHVzZSBjYXNlcyBhZGRlZCB0byB0aGUgY2xhc3NlcwogICAgaW4gb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLm11dGFibGUuCgpDT01QQVRJQklMSVRZCj09PT09PT09PT09PT0KCkFwYWNoZSBDb21tb25zIExhbmcgMy41IGlzIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggdGhlIDMuNCByZWxlYXNlLiBVc2VycwpzaG91bGQgbm90IGV4cGVyaWVuY2UgYW55IHByb2JsZW1zIHdoZW4gdXBncmFkaW5nIGZyb20gMy40IHRvIDMuNS4KClRoZXJlIGhhcyBiZWVuIGFuIGFkZGl0aW9uIHRvIHRoZSBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5EYXRlUHJpbnRlcgppbnRlcmZhY2U6CgpvIEFkZGVkIG1ldGhvZCAncHVibGljIGJvb2xlYW4gcGFyc2UoamF2YS5sYW5nLlN0cmluZywgamF2YS50ZXh0LlBhcnNlUG9zaXRpb24sCiAgICBqYXZhLnV0aWwuQ2FsZW5kYXIpJwpvIEFkZGVkIG1ldGhvZCAncHVibGljIGphdmEubGFuZy5BcHBlbmRhYmxlIGZvcm1hdChsb25nLCBqYXZhLmxhbmcuQXBwZW5kYWJsZSknCm8gQWRkZWQgbWV0aG9kICdwdWJsaWMgamF2YS5sYW5nLkFwcGVuZGFibGUgZm9ybWF0KGphdmEudXRpbC5EYXRlLAogICAgamF2YS5sYW5nLkFwcGVuZGFibGUpJwpvIEFkZGVkIG1ldGhvZCAncHVibGljIGphdmEubGFuZy5BcHBlbmRhYmxlIGZvcm1hdChqYXZhLnV0aWwuQ2FsZW5kYXIsCiAgICBqYXZhLmxhbmcuQXBwZW5kYWJsZSknCgpGb3IgdGhpcyByZWFzb24gMy41IGlzIG5vdCBzdHJpY3RseSBzb3VyY2UgY29tcGF0aWJsZSB0byAzLjQuIFNpbmNlIHRoZQpEYXRlUHJpbnRlciBpbnRlcmZhY2UgaXMgbm90IG1lYW50IHRvIGJlIGltcGxlbWVudGVkIGJ5IGNsaWVudHMsIHRoaXMKY2hhbmdlIGl0IG5vdCBjb25zaWRlcmVkIHRvIGNhdXNlIGFueSBwcm9ibGVtcy4KCkpBVkEgOSBTVVBQT1JUCj09PT09PT09PT09PT09CgpKYXZhIDkgaW50cm9kdWNlcyBhIG5ldyB2ZXJzaW9uLXN0cmluZyBzY2hlbWUuIERldGFpbHMgb2YgdGhpcyBuZXcgc2NoZW1lIGFyZQpkb2N1bWVudGVkIGluIEpFUC0yMjMgKGh0dHA6Ly9vcGVuamRrLmphdmEubmV0L2plcHMvMjIzKS4gSW4gb3JkZXIgdG8gc3VwcG9ydApKRVAtMjIzIHR3byBjbGFzc2VzIGhhZCB0byBiZSBjaGFuZ2VkOgoKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuSmF2YVZlcnNpb24KICAgIGRlcHJlY2F0ZWQgZW51bSBjb25zdGFudCBKQVZBXzFfOQogICAgaW50cm9kdWNlZCBlbnVtIGNvbnN0YW50IEpBVkFfOQoKbyBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMKICAgIGRlcHJlY2F0ZWQgY29uc3RhbnQgSVNfSkFWQV8xXzkKICAgIGludHJvZHVjZWQgY29uc3RhbnQgSVNfSkFWQV85CgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgTEFORy0xMTk3CihodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTE5NykuIEFsbCBvdGhlciBBUElzIGFyZSBleHBlY3RlZAp0byB3b3JrIHdpdGggSmF2YSA5LgoKQlVJTERJTkcgT04gSkFWQSA5Cj09PT09PT09PT09PT09PT09PQoKSmF2YSA4IGludHJvZHVjZWQgdGhlIFVuaWNvZGUgQ29uc29ydGl1bSdzIENvbW1vbiBMb2NhbGUgRGF0YSBSZXBvc2l0b3J5IGFzCmFsdGVybmF0aXZlIHNvdXJjZSBmb3IgbG9jYWxlIGRhdGEuIEphdmEgOSB3aWxsIHVzZSB0aGUgQ0xEUiBwcm92aWRlciBhcwpkZWZhdWx0IHByb3ZpZGVyIGZvciBsb2NhbGUgZGF0YSAoc2VlIGh0dHA6Ly9vcGVuamRrLmphdmEubmV0L2plcHMvMjUyKS4gVGhpcwpjYXVzZXMgYW4gbnVtYmVyIG9mIGxvY2FsZS1zZW5zaXRpdmUgdGVzdCBpbiBDb21tb25zIExhbmcgdG8gZmFpbC4gSW4gb3JkZXIKdG8gYnVpbGQgQ29tbW9ucyBMYW5nIDMuNSBvbiBKYXZhIDksIHRoZSBsb2NhbGUgcHJvdmlkZXIgaGFzIHRvIGJlIHNldCB0bwonSlJFJzoKCiAgICBtdm4gLURqYXZhLmxvY2FsZS5wcm92aWRlcnM9SlJFIGNsZWFuIGluc3RhbGwKCldlIGFyZSBjdXJyZW50bHkgaW52ZXN0aWdhdGluZyB3YXlzIHRvIHN1cHBvcnQgYnVpbGRpbmcgb24gSmF2YSA5IHdpdGhvdXQKZnVydGhlciBjb25maWd1cmF0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6Cmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvTEFORy0xMjY1CgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctMTI3NTogQWRkZWQgYSB0cnlBY3F1aXJlKCkgbWV0aG9kIHRvIFRpbWVkU2VtYXBob3JlLgpvIExBTkctMTI1NTogQWRkIERhdGVVdGlscy50b0NhbGVuZGFyKERhdGUsIFRpbWVab25lKS4gVGhhbmtzIHRvIEthaXl1YW4gV2FuZy4KbyBMQU5HLTEwMjM6IEFkZCBXb3JkVXRpbHMud3JhcCBvdmVybG9hZCB3aXRoIGN1c3RvbWl6YWJsZSBicmVha2FibGUgY2hhcmFjdGVyLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1hcmtvIEJla2h0YS4KbyBMQU5HLTc4NzogIEFkZCBtZXRob2QgcmVtb3ZlSWdub3JlQ2FzZShTdHJpbmcsIFN0cmluZykgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gR29rdWwgTmFudGhha3VtYXIgQy4KbyBMQU5HLTEyMjQ6IEV4dGVuZCBSYW5kb21TdHJpbmdVdGlscyB3aXRoIG1ldGhvZHMgdGhhdCBnZW5lcmF0ZSBzdHJpbmdzCiAgICAgICAgICAgICBiZXR3ZWVuIGEgbWluIGFuZCBtYXggbGVuZ3RoLiBUaGFua3MgdG8gQ2FsZWIgQ3VzaGluZy4KbyBMQU5HLTEyNTc6IEFkZCBBUElzIFN0cmluZ1V0aWxzLndyYXBJZk1pc3NpbmcoU3RyaW5nLCBjaGFyfFN0cmluZykuIFRoYW5rcyB0bwogICAgICAgICAgICAgR2FyeSBHcmVnb3J5LgpvIExBTkctMTI1MzogQWRkIFJhbmRvbVV0aWxzI25leHRCb29sZWFuKCkgbWV0aG9kLiBUaGFua3MgdG8gYWRpbGVrLgpvIExBTkctMTA4NTogQWRkIGEgY2lyY3VpdCBicmVha2VyIGltcGxlbWVudGF0aW9uLiBUaGFua3MgdG8gT2xpdmVyIEhlZ2VyIGFuZAogICAgICAgICAgICAgQnJ1bm8gUC4gS2lub3NoaXRhLgpvIExBTkctMTAxMzogQWRkIFN0cmluZ1V0aWxzLnRydW5jYXRlKCkuIFRoYW5rcyB0byBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTExOTU6IEVuaGFuY2UgTWV0aG9kVXRpbHMgdG8gYWxsb3cgaW52b2NhdGlvbiBvZiBwcml2YXRlIG1ldGhvZHMuIFRoYW5rcwogICAgICAgICAgICAgdG8gRGVyZWsgQy4gQXNobW9yZS4KbyBMQU5HLTExODk6IEFkZCBnZXRBbmRJbmNyZW1lbnQvZ2V0QW5kRGVjcmVtZW50L2dldEFuZEFkZC9pbmNyZW1lbnRBbmRHZXQvCiAgICAgICAgICAgICBkZWNyZW1lbnRBbmRHZXQvYWRkQW5kR2V0IGluIE11dGFibGUqIGNsYXNzZXMuIFRoYW5rcyB0bwogICAgICAgICAgICAgSGFpeWFuZyBMaSBhbmQgTWF0dGhldyBCYXJ0ZW5zY2hsYWcuCm8gTEFORy0xMjI1OiBBZGQgUmFuZG9tU3RyaW5nVXRpbHMjcmFuZG9tR3JhcGggYW5kICNyYW5kb21QcmludCB3aGljaCBtYXRjaAogICAgICAgICAgICAgY29ycmVzcG9uZGluZyByZWd1bGFyIGV4cHJlc3Npb24gY2xhc3MuIFRoYW5rcyB0byBDYWxlYiBDdXNoaW5nLgpvIExBTkctMTIyMzogQWRkIFN0b3BXYXRjaCNnZXRUaW1lKFRpbWVVbml0KS4gVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctNzgxOiAgQWRkIG1ldGhvZHMgdG8gT2JqZWN0VXRpbHMgY2xhc3MgdG8gY2hlY2sgZm9yIG51bGwgZWxlbWVudHMgaW4gdGhlCiAgICAgICAgICAgICBhcnJheS4gVGhhbmtzIHRvIEtyenlzenRvZiBXb2xueS4KbyBMQU5HLTEyMjg6IFByZWZlciBUaHJvd2FibGUuZ2V0Q2F1c2UoKSBpbiBFeGNlcHRpb25VdGlscy5nZXRDYXVzZSgpLgogICAgICAgICAgICAgVGhhbmtzIHRvIEJyYWQgSGVzcy4KbyBMQU5HLTEyMzM6IERpZmZCdWlsZGVyIGFkZCBtZXRob2QgdG8gYWxsb3cgYXBwZW5kaW5nIGZyb20gYSBEaWZmUmVzdWx0LgogICAgICAgICAgICAgVGhhbmtzIHRvIE5pY2sgTWFubGV5LgpvIExBTkctMTE2ODogQWRkIFN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfMTAgcHJvcGVydHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMTE1OiBBZGQgc3VwcG9ydCBmb3IgdmFyYXJncyBpbiBDb25zdHJ1Y3RvclV0aWxzLCBNZW1iZXJVdGlscywgYW5kCiAgICAgICAgICAgICBNZXRob2RVdGlscy4gVGhhbmtzIHRvIEppbSBMbG95ZCBhbmQgSm9lIEZlcm5lci4KbyBMQU5HLTExMzQ6IEFkZCBtZXRob2RzIHRvIGNoZWNrIG51bWJlcnMgYWdhaW5zdCBOYU4gYW5kIGluaWZpbml0ZSB0bwogICAgICAgICAgICAgVmFsaWRhdGUuIFRoYW5rcyB0byBBbGFuIFNtaXRoZWUuCm8gTEFORy0xMjIwOiBBZGQgdGVzdHMgZm9yIG1pc3NlZCBicmFuY2hlcyBpbiBEYXRlVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQ2FzZXkgU2NhcmJvcm91Z2guCm8gTEFORy0xMTQ2OiB6L09TIGlkZW50aWZpY2F0aW9uIGluIFN5c3RlbVV0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEdhYm9yIExpcHRhay4KbyBMQU5HLTExOTI6IEZhc3REYXRlRm9ybWF0IHN1cHBvcnQgb2YgdGhlIHdlZWsteWVhciBjb21wb25lbnQgKHVwcGVyY2FzZSAnWScpLgogICAgICAgICAgICAgVGhhbmtzIHRvIERvbWluaWsgU3RhZGxlci4KbyBMQU5HLTExNjk6IEFkZCBTdHJpbmdVdGlscyBtZXRob2RzIHRvIGNvbXBhcmUgYSBzdHJpbmcgdG8gbXVsdGlwbGUgc3RyaW5ncy4KICAgICAgICAgICAgIFRoYW5rcyB0byBSYWZhbCBHbG93aW5za2ksIFJvYmVydCBQYXJyIGFuZCBBcm1hbiBTaGFyaWYuCm8gTEFORy0xMTg1OiBBZGQgcmVtb3ZlIGJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiBtZXRob2RzIGluIFN0cmluZ1V0aWxzLgpvIExBTkctMTEzOTogQWRkIHJlcGxhY2UgYnkgcmVndWxhciBleHByZXNzaW9uIG1ldGhvZHMgaW4gU3RyaW5nVXRpbHMuCm8gTEFORy0xMTcxOiBBZGQgY29tcGFyZSBtZXRob2RzIGluIFN0cmluZ1V0aWxzLgpvIExBTkctMTE3NDogQWRkIHN1Z2FyIHRvIFJhbmRvbVV0aWxzLiBUaGFua3MgdG8gUHVua3JhdHozMTIuCm8gTEFORy0xMTU0OiBGYXN0RGF0ZUZvcm1hdCBBUElzIHRoYXQgdXNlIGEgU3RyaW5nQnVpbGRlci4gVGhhbmtzIHRvCiAgICAgICAgICAgICBHYXJ5IEdyZWdvcnkuCm8gTEFORy0xMTQ5OiBBYmlsaXR5IHRvIHRocm93IGNoZWNrZWQgZXhjZXB0aW9ucyB3aXRob3V0IGRlY2xhcmluZyB0aGVtLiBUaGFua3MKICAgICAgICAgICAgIHRvIEdyZWdvcnkgWmFrLgpvIExBTkctMTE1MzogSW1wbGVtZW50IFBhcnNlUG9zaXRpb24gYXBpIGZvciBGYXN0RGF0ZVBhcnNlci4KbyBMQU5HLTExMzc6IEFkZCBjaGVjayBmb3IgZHVwbGljYXRlIGV2ZW50IGxpc3RlbmVyIGluIEV2ZW50TGlzdGVuZXJTdXBwb3J0LgogICAgICAgICAgICAgVGhhbmtzIHRvIE1hdHRoZXcgQWd1aXJyZS4KbyBMQU5HLTExMzU6IEFkZCBtZXRob2QgY29udGFpbnNBbGxXb3JkcyB0byBXb3JkVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgRWR1YXJkbyBNYXJ0aW5zLgpvIExBTkctMTEzMjogUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlciBkb2Vzbid0IHRocm93IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgogICAgICAgICAgICAgd2hlbiB0aGUgY29uc3RydWN0b3IncyBvYmplY3QgcGFyYW0gaXMgbnVsbC4gVGhhbmtzIHRvIEphY2sgVGFuLgpvIExBTkctNzAxOiAgU3RyaW5nVXRpbHMgam9pbiB3aXRoIHZhciBhcmdzLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMTA1OiBBZGQgVGhyZWFkVXRpbHMgLSBBIHV0aWxpdHkgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgaGVscGVyIG1ldGhvZHMKICAgICAgICAgICAgIHJlbGF0ZWQgdG8gamF2YS5sYW5nLlRocmVhZCAgSXNzdWU6IExBTkctMTEwNS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBIZW5kcmlrIFNhbHkuCm8gTEFORy0xMDMxOiBBZGQgYW5ub3RhdGlvbnMgdG8gZXhjbHVkZSBmaWVsZHMgZnJvbSBSZWZsZWN0aW9uRXF1YWxzQnVpbGRlciwKICAgICAgICAgICAgIFJlZmxlY3Rpb25Ub1N0cmluZ0J1aWxkZXIgYW5kIFJlZmxlY3Rpb25IYXNoQ29kZUJ1aWxkZXIuIFRoYW5rcwogICAgICAgICAgICAgdG8gRmVsaXBlIEFkb3Juby4KbyBMQU5HLTExMjc6IFVzZSBKVW5pdCBydWxlcyB0byBzZXQgYW5kIHJlc2V0IHRoZSBkZWZhdWx0IExvY2FsZSBhbmQgVGltZVpvbmUuCm8gTEFORy0xMTE5OiBBZGQgcm90YXRlKHN0cmluZywgaW50KSBtZXRob2QgdG8gU3RyaW5nVXRpbHMuIFRoYW5rcyB0bwogICAgICAgICAgICAgTG9pYyBHdWliZXJ0LgpvIExBTkctMTA5OTogQWRkIHN3YXAgYW5kIHNoaWZ0IG9wZXJhdGlvbnMgZm9yIGFycmF5cyB0byBBcnJheVV0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFkcmlhbiBCZXIuCm8gTEFORy0xMDUwOiBDaGFuZ2UgbnVsbFRvRW1wdHkgbWV0aG9kcyB0byBnZW5lcmljcy4gVGhhbmtzIHRvIEphbWVzIFNhd2xlLgpvIExBTkctMTA3NDogQWRkIGEgbWV0aG9kIHRvIEFycmF5VXRpbHMgZm9yIHJlbW92aW5nIGFsbCBvY2N1cnJlbmNlcyBvZiBhIGdpdmVuCiAgICAgICAgICAgICBlbGVtZW50ICBJc3N1ZTogTEFORy0xMDc0LiBUaGFua3MgdG8gSGFpeWFuZyBMaS4KCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctMTI2MTogQXJyYXlVdGlscy5jb250YWlucyByZXR1cm5zIGZhbHNlIGZvciBpbnN0YW5jZXMgb2Ygc3VidHlwZXMuCm8gTEFORy0xMjUyOiBSZW5hbWUgTnVtYmVyVXRpbHMuaXNOdW1iZXIsIGlzQ3JlYXRhYmxlIHRvIGJldHRlciByZWZsZWN0CiAgICAgICAgICAgICBjcmVhdGVOdW1iZXIuIEFsc28sIGFjY29tbW9kYXRlZCBmb3IgIisiIHN5bWJvbCBhcyBwcmVmaXggaW4KICAgICAgICAgICAgIGlzQ3JlYXRhYmxlIGFuZCBpc051bWJlci4gVGhhbmtzIHRvIFJvYiBUb21wa2lucy4KbyBMQU5HLTEyMzA6IFJlbW92ZSB1bm5lY2Vzc2FyeSBzeW5jaHJvbml6YXRpb24gZnJvbSByZWdpc3RyeSBsb29rdXAgaW4KICAgICAgICAgICAgIEVxdWFsc0J1aWxkZXIgYW5kIEhhc2hDb2RlQnVpbGRlci4gVGhhbmtzIHRvIFBoaWxpcHBlIE1hcnNjaGFsbC4KbyBMQU5HLTEyMTQ6IEhhbmRsZSAidm9pZCIgaW4gQ2xhc3NVdGlscy5nZXRDbGFzcygpLiBUaGFua3MgdG8gSGVucnkgVHVuZy4KbyBMQU5HLTEyNTA6IFNlcmlhbGl6YXRpb25VdGlscyNkZXNlcmlhbGl6ZSBoYXMgdW5uZWNlc3NhcnkgY29kZSBhbmQgYSBjb21tZW50CiAgICAgICAgICAgICBmb3IgdGhhdC4gVGhhbmtzIHRvIEdsZWFzZSBXYW5nLgpvIExBTkctMTE5MDogVHlwZVV0aWxzLmlzQXNzaWduYWJsZSB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hlbiBmcm9tVHlwZQogICAgICAgICAgICAgaGFzIHR5cGUgdmFyaWFibGVzIGFuZCB0b1R5cGUgZ2VuZXJpYyBzdXBlcmNsYXNzIHNwZWNpZmllcyB0eXBlCiAgICAgICAgICAgICB2YXJpYWJsZS4gVGhhbmtzIHRvIFBhc2NhbCBTY2h1bWFjaGVyLgpvIExBTkctMTIyNjogU3RyaW5nVXRpbHMjbm9ybWFsaXplU3BhY2UgZG9lcyBub3QgdHJpbSB0aGUgc3RyaW5nIGFueW1vcmUuCiAgICAgICAgICAgICBUaGFua3MgdG8gUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMjUxOiBTZXJpYWxpemF0aW9uVXRpbHMuQ2xhc3NMb2FkZXJBd2FyZU9iamVjdElucHV0U3RyZWFtIHNob3VsZCB1c2UKICAgICAgICAgICAgIHN0YXRpYyBpbml0aWFsaXplciB0byBpbml0aWFsaXplIHByaW1pdGl2ZVR5cGVzIG1hcC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUYWt1eWEgVWVzaGluLgpvIExBTkctMTI0ODogRmFzdERhdGVQcmludGVyIE1lbW9yeSBhbGxvY2F0aW9uIHJlZ3Jlc3Npb24uIFRoYW5rcyB0bwogICAgICAgICAgICAgQmVub2l0IFdpYXJ0LgpvIExBTkctMTAxODogRml4IHByZWNpc2lvbiBsb3NzIG9uIE51bWJlclV0aWxzLmNyZWF0ZU51bWJlcihTdHJpbmcpLiBUaGFua3MgdG8KICAgICAgICAgICAgIE5pY2sgTWFubGV5LgpvIExBTkctMTE5OTogRml4IGltcGxlbWVudGF0aW9uIG9mIFN0cmluZ1V0aWxzLmdldEphcm9XaW5rbGVyRGlzdGFuY2UoKS4gVGhhbmtzCiAgICAgICAgICAgICB0byBNLiBTdGVpZ2VyLgpvIExBTkctMTI0NDogRml4IGRlYWQgbGlua3MgaW4gU3RyaW5nVXRpbHMuZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSgpIGphdmFkb2MuCiAgICAgICAgICAgICBUaGFua3MgdG8gampiYW5rZXJ0LgpvIExBTkctMTI0MjogIlx1MjI4NCI6Ij8iIG1hcHBpbmcgbWlzc2luZyBmcm9tCiAgICAgICAgICAgICBFbnRpdHlBcnJheXMjSFRNTDQwX0VYVEVOREVEX0VTQ0FQRS4gVGhhbmtzIHRvIE5lYWwgU3Rld2FydC4KbyBMQU5HLTkwMTogIFN0cmluZ1V0aWxzI3N0YXJ0c1dpdGhBbnkvZW5kc1dpdGhBbnkgaXMgY2FzZSBzZW5zaXRpdmUgLQogICAgICAgICAgICAgZG9jdW1lbnRlZCBhcyBjYXNlIGluc2Vuc2l0aXZlLiBUaGFua3MgdG8gTWF0dGhldyBCYXJ0ZW5zY2hsYWcuCm8gTEFORy0xMjMyOiBEaWZmQnVpbGRlcjogQWRkIG51bGwgY2hlY2sgb24gZmllbGROYW1lIHdoZW4gYXBwZW5kaW5nIE9iamVjdCBvcgogICAgICAgICAgICAgT2JqZWN0W10uIFRoYW5rcyB0byBOaWNrIE1hbmxleS4KbyBMQU5HLTExNzg6IEFycmF5VXRpbHMucmVtb3ZlQWxsKE9iamVjdCBhcnJheSwgaW50Li4uIGluZGljZXMpIHNob3VsZCBkbyB0aGUKICAgICAgICAgICAgIGNsb25lLCBub3QgaXRzIGNhbGxlcnMuIFRoYW5rcyB0byBIZW5yaSBZYW5kZWxsLgpvIExBTkctMTEyMDogU3RyaW5nVXRpbHMuc3RyaXBBY2NlbnRzIHNob3VsZCByZW1vdmUgYWNjZW50cyBmcm9tICI/IiBhbmQgIj8iLgogICAgICAgICAgICAgVGhhbmtzIHRvIGthY2hpbmc4OC4KbyBMQU5HLTEyMDU6IE51bWJlclV0aWxzLmNyZWF0ZU51bWJlcigpIGJlaGF2ZXMgaW5jb25zaXN0ZW50bHkgd2l0aAogICAgICAgICAgICAgTnVtYmVyVXRpbHMuaXNOdW1iZXIoKS4gVGhhbmtzIHRvIHBicm9zZS4KbyBMQU5HLTEyMjI6IEZpeCBmb3IgaW5jb3JyZWN0IGNvbW1lbnQgb24gU3RyaW5nVXRpbHMuY29udGFpbnNJZ25vcmVDYXNlCiAgICAgICAgICAgICBtZXRob2QuIFRoYW5rcyB0byBBZGFtIEouCm8gTEFORy0xMjIxOiBGaXggdHlwbyBvbiBhcHBlbmRJZk1pc3NpbmcgamF2YWRvYy4gVGhhbmtzIHRvIFBpZXJyZSBUZW1wbGllci4KbyBMQU5HLTEyMDI6IHBhcnNlRGF0ZVN0cmljdGx5IGRvZXMndCBwYXNzIHNwZWNpZmllZCBsb2NhbGUuIFRoYW5rcyB0bwogICAgICAgICAgICAgTWFya3VzIEplbHNtYS4KbyBMQU5HLTEyMTk6IEZhc3REYXRlRm9ybWF0IGRvZXNuJ3QgcmVzcGVjdCBzdW1tZXIgZGF5bGlnaHQgaW4gc29tZSBsb2NhbGl6ZWQKICAgICAgICAgICAgIHN0cmluZ3MuIFRoYW5rcyB0byBKYXJlay4KbyBMQU5HLTExNzU6IFJlbW92ZSBBbnQtYmFzZWQgYnVpbGQuCm8gTEFORy0xMTk0OiBMaW1pdCBtYXggaGVhcCBtZW1vcnkgZm9yIGNvbnNpc3RlbnQgVHJhdmlzIENJIGJ1aWxkLgpvIExBTkctMTE4NjogRml4IE51bGxQb2ludGVyRXhjZXB0aW9uIGluIEZhc3REYXRlUGFyc2VyJFRpbWVab25lU3RyYXRlZ3kuCiAgICAgICAgICAgICBUaGFua3MgdG8gTmlja01hbmxleS4KbyBMQU5HLTExOTM6IG9yZGluYWxJbmRleE9mKCJhYmMiLCAiYWIiLCAxKSBnaXZlcyBpbmNvcnJlY3QgYW5zd2VyIG9mIC0xCiAgICAgICAgICAgICAoY29ycmVjdCBhbnN3ZXIgc2hvdWxkIGJlIDApOyByZXZlcnQgZml4IGZvciBMQU5HLTEwNzcuIFRoYW5rcyB0bwogICAgICAgICAgICAgUWluIExpLgpvIExBTkctMTAwMjogU2V2ZXJhbCBwcmVkZWZpbmVkIElTTyBGYXN0RGF0ZUZvcm1hdHMgaW4gRGF0ZUZvcm1hdFV0aWxzIGFyZQogICAgICAgICAgICAgaW5jb3JyZWN0LiBUaGFua3MgdG8gTWljaGFlbCBPc2lwb3YuCm8gTEFORy0xMTUyOiBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIG9yIGZpZWxkIG92ZXItd3JpdGUgZm9yIGxhcmdlIHllYXIKICAgICAgICAgICAgIGZpZWxkcyBpbiBGYXN0RGF0ZVBhcnNlci4gVGhhbmtzIHRvIFBhcyBGaWxpcC4KbyBMQU5HLTExNDE6IFN0ckxvb2t1cC5zeXN0ZW1Qcm9wZXJ0aWVzTG9va3VwKCkgbm8gbG9uZ2VyIHJlYWN0cyBvbiBjaGFuZ2VzIG9uCiAgICAgICAgICAgICBzeXN0ZW0gcHJvcGVydGllcy4KbyBMQU5HLTExNDc6IEVudW1VdGlscyAqQml0VmVjdG9yIGlzc3VlIHdpdGggbW9yZSB0aGFuIDMyIHZhbHVlcyBFbnVtLiBUaGFua3MKICAgICAgICAgICAgIHRvIExvaWMgR3VpYmVydC4KbyBMQU5HLTEwNTk6IENhcGl0YWxpemUgamF2YWRvYyBpcyBpbmNvcnJlY3QuIFRoYW5rcyB0byBDb2xpbiBDYXNleS4KbyBMQU5HLTExMjI6IEluY29uc2lzdGVudCBiZWhhdmlvciBvZiBzd2FwIGZvciBtYWxmb3JtZWQgaW5wdXRzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEFkcmlhbiBCZXIuCm8gTEFORy0xMTMwOiBGaXggY3JpdGljYWwgaXNzdWVzIHJlcG9ydGVkIGJ5IFNvbmFyUXViZS4KbyBMQU5HLTExMzE6IFN0ckJ1aWxkZXIuZXF1YWxzKFN0ckJ1aWxkZXIpIGRvZXNuJ3QgY2hlY2sgZm9yIG51bGwgaW5wdXRzLgpvIExBTkctMTEyODogSnNvblRvU3RyaW5nU3R5bGUgZG9lc24ndCBoYW5kbGUgY2hhcnMgYW5kIG9iamVjdHMgY29ycmVjdGx5LgogICAgICAgICAgICAgVGhhbmtzIHRvIEphY2sgVGFuLgpvIExBTkctMTEyNjogRGF0ZUZvcm1hdFV0aWxzVGVzdC50ZXN0U01UUCBkZXBlbmRzIG9uIHRoZSBkZWZhdWx0IExvY2FsZS4KbyBMQU5HLTExMjM6IFVuaXQgdGVzdCBGYXN0RGF0ZVByaW50ZXJUaW1lWm9uZXNUZXN0IG5lZWRzIGEgdGltZXpvbmUgc2V0LgogICAgICAgICAgICAgVGhhbmtzIHRvIENocmlzdGlhbiBQLiBNb21vbi4KbyBMQU5HLTkxNjogIERhdGVGb3JtYXRVdGlscy5mb3JtYXQgZG9lcyBub3QgY29ycmVjdGx5IGNoYW5nZSBDYWxlbmRhcgogICAgICAgICAgICAgVGltZVpvbmUgaW4gY2VydGFpbiBzaXR1YXRpb25zLiBUaGFua3MgdG8gQ2hyaXN0aWFuIFAuIE1vbW9uLgpvIExBTkctMTExNjogRGF0ZVV0aWxzVGVzdC50ZXN0TGFuZzUzMCBmYWlscyBmb3Igc29tZSB0aW1lem9uZXMuIFRoYW5rcyB0bwogICAgICAgICAgICAgQWFyb24gU2hlbGRvbi4KbyBMQU5HLTExMTQ6IFR5cGVVdGlscy5QYXJhbWV0ZXJpemVkVHlwZSNlcXVhbHMgZG9lc24ndCB3b3JrIHdpdGggd2lsZGNhcmQKICAgICAgICAgICAgIHR5cGVzLiBUaGFua3MgdG8gQW5keSBDb2F0ZXMuCm8gTEFORy0xMTE4OiBTdHJpbmdVdGlscy5yZXBlYXQoJ3onLCAtMSkgdGhyb3dzIE5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uLgogICAgICAgICAgICAgVGhhbmtzIHRvIExvaWMgR3VpYmVydC4KbyBMQU5HLTExMTE6IEZpeCBGaW5kQnVncyB3YXJuaW5ncyBpbiBEdXJhdGlvbkZvcm1hdFV0aWxzLgpvIExBTkctMTE2MjogU3RyaW5nVXRpbHMjZXF1YWxzIGZhaWxzIHdpdGggSW5kZXggT09CRSBvbiBub24tU3RyaW5ncyB3aXRoCiAgICAgICAgICAgICBpZGVudGljYWwgbGVhZGluZyBwcmVmaXguLgpvIExBTkctMTE2MzogVGhlcmUgYXJlIG5vIHRlc3RzIGZvciBDaGFyU2VxdWVuY2VVdGlscy5yZWdpb25NYXRjaGVzLgpvIExBTkctMTIwMDogRml4IEphdmFkb2Mgb2YgU3RyaW5nVXRpbHMub3JkaW5hbEluZGV4T2YuIFRoYW5rcyB0byBCYXJrWmhhbmcuCm8gTEFORy0xMTkxOiBJbmNvcnJlY3QgSmF2YWRvYwogICAgICAgICAgICAgU3RyaW5nVXRpbHMuY29udGFpbnNBbnkoQ2hhclNlcXVlbmNlLCBDaGFyU2VxdWVuY2UuLi4pLiBUaGFua3MgdG8KICAgICAgICAgICAgIHFlZCwgQnJlbnQgV29yZGVuIGFuZCBHYXJ5IEdyZWdvcnkuCgpDSEFOR0VTCj09PT09PT09PQpvIExBTkctMTE5NzogUHJlcGFyZSBKYXZhIDkgZGV0ZWN0aW9uLgpvIExBTkctMTI2MjogQ29tcGFyZVRvQnVpbGRlci5hcHBlbmQoT2JqZWN0LCBPYmplY3QsIENvbXBhcmF0b3IpIG1ldGhvZCBpcyB0b28KICAgICAgICAgICAgIGJpZyB0byBiZSBpbmxpbmVkLiBUaGFua3MgdG8gUnVzbGFuIENoZXJlbWluLgpvIExBTkctMTI1OTogSmF2YWRvYyBmb3IgQXJyYXlVdGlscy5pc05vdEVtcHR5KCkgaXMgc2xpZ2h0bHkgbWlzbGVhZGluZy4gVGhhbmtzCiAgICAgICAgICAgICB0byBEb21pbmlrIFN0YWRsZXIuCm8gTEFORy0xMjQ3OiBGYXN0RGF0ZVByaW50ZXIgZ2VuZXJhdGVzIGV4dHJhIERhdGUgb2JqZWN0cy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBCZW5vaXQgV2lhcnQuCm8gTEFORy0xMjI5OiBIYXNoQ29kZUJ1aWxkZXIuYXBwZW5kKE9iamVjdCxPYmplY3QpIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwKICAgICAgICAgICAgIHdoaWNoIHByZXZlbnRzIHdob2xlIGJ1aWxkZXIgdG8gYmUgc2NhbGFyaXplZC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBSdXNsYW4gQ2hlcmVtaW4uCm8gTEFORy0xMjQzOiBTaW1wbGlmeSBBcnJheVV0aWxzIHJlbW92ZUVsZW1lbnRzIGJ5IHVzaW5nIG5ldyBkZWNyZW1lbnRBbmRHZXQoKQogICAgICAgICAgICAgbWV0aG9kLgpvIExBTkctMTI0MDogT3B0aW1pemUgQml0RmllbGQgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb24uIFRoYW5rcyB0byB6aGFuaGIuCm8gTEFORy0xMjA2OiBJbXByb3ZlIENoYXJTZXRVdGlscy5zcXVlZXplKCkgcGVyZm9ybWFuY2UuIFRoYW5rcyB0bwogICAgICAgICAgICAgTW9oYW1tZWQgQWxmYWxsYWouCm8gTEFORy0xMTc2OiBJbXByb3ZlIEFycmF5VXRpbHMgcmVtb3ZlRWxlbWVudHMgdGltZSBjb21wbGV4aXR5IHRvIE8obikuIFRoYW5rcwogICAgICAgICAgICAgdG8gSmVmZmVyeSBZdWFuLgpvIExBTkctMTIzNDogZ2V0TGV2ZW5zaHRlaW5EaXN0YW5jZSB3aXRoIGEgdGhyZXNob2xkOiBvcHRpbWl6ZSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgdGhlIHN0cmluZ3MgbGVuZ3RocyBkaWZmZXIgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQuIFRoYW5rcyB0bwogICAgICAgICAgICAgSm9uYXRhbiBK9m5zc29uLgpvIExBTkctMTE1MTogUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIGZvciBOdW1iZXJVdGlscy5pc1BhcnNhYmxlLiBUaGFua3MgdG8KICAgICAgICAgICAgIEp1YW4gUGFibG8gU2FudG9zIFJvZHLtZ3Vlei4KbyBMQU5HLTEyMTg6IEVxdWFsc0J1aWxkZXIuYXBwZW5kKE9iamVjdCxPYmplY3QpIGlzIHRvbyBiaWcgdG8gYmUgaW5saW5lZCwKICAgICAgICAgICAgIHdoaWNoIHByZXZlbnRzIHdob2xlIGJ1aWxkZXIgdG8gYmUgc2NhbGFyaXplZC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBSdXNsYW4gQ2hlcmVtaW4uCm8gTEFORy0xMjEwOiBTdHJpbmdVdGlscyNzdGFydHNXaXRoQW55IGhhcyBlcnJvciBpbiBKYXZhZG9jLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1hdHRoaWFzIE5pZWhvZmYuCm8gTEFORy0xMjA4OiBTdHJTdWJzdGl0dXRvciBjYW4gcHJlc2VydmUgZXNjYXBlcy4gVGhhbmtzIHRvIFNhbXVlbCBLYXJwLgpvIExBTkctMTE4MjogQ2xhcmlmeSBKYXZhZG9jIG9mIFN0cmluZ1V0aWxzLmNvbnRhaW5zQW55KCkuIFRoYW5rcyB0bwogICAgICAgICAgICAgTGFycnkgV2VzdCBhbmQgUGFzY2FsIFNjaHVtYWNoZXIuCm8gTEFORy0xMTgzOiBNYWtpbmcgcmVwbGFjZVBhdHRlcm4vcmVtb3ZlUGF0dGVybiBtZXRob2RzIG51bGwgc2FmZSBpbgogICAgICAgICAgICAgU3RyaW5nVXRpbHMuCm8gTEFORy0xMDU3OiBSZXBsYWNlIFN0cmluZ0J1aWxkZXIgd2l0aCBTdHJpbmcgY29uY2F0ZW5hdGlvbiBmb3IgYmV0dGVyCiAgICAgICAgICAgICBvcHRpbWl6YXRpb24uIFRoYW5rcyB0byBPdOF2aW8gU2FudGFuYS4KbyBMQU5HLTEwNzU6IERlcHJlY2F0ZSBTeXN0ZW1VdGlscy5GSUxFX1NFUEFSQVRPUiBhbmQKICAgICAgICAgICAgIFN5c3RlbVV0aWxzLlBBVEhfU0VQQVJBVE9SLgpvIExBTkctOTc5OiAgVHlwZVV0aWxzLnBhcmFtZXRlcml6ZVdpdGhPd25lciAtIHdyb25nIGZvcm1hdCBkZXNjcmlwdG9yIGZvcgogICAgICAgICAgICAgImludmFsaWQgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyIuIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEuCm8gTEFORy0xMTEyOiBNdWx0aWxpbmVSZWN1cnNpdmVUb1N0cmluZ1N0eWxlIGxhcmdlbHkgdW51c2FibGUgZHVlIHRvIGJlaW5nCiAgICAgICAgICAgICBwYWNrYWdlLXByaXZhdGUuCm8gTEFORy0xMDU4OiBTdHJpbmdVdGlscy51bmNhcGl0YWxpemUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIFRoYW5rcyB0bwogICAgICAgICAgICAgTGVvIFdhbmcuCm8gTEFORy0xMDY5OiBDaGFyU2V0LmdldEluc3RhbmNlIGRvY3VtZW50YXRpb24gZG9lcyBub3QgY2xlYXJseSBleHBsYWluIGhvdwogICAgICAgICAgICAgdG8gaW5jbHVkZSBuZWdhdGlvbiBjaGFyYWN0ZXIgaW4gc2V0LiBUaGFua3MgdG8gQXJubyBOb29yZG92ZXIuCm8gTEFORy0xMTA3OiBGaXggcGFyc2luZyBlZGdlIGNhc2VzIGluIEZhc3REYXRlUGFyc2VyLgpvIExBTkctMTI3MzogQWRkZWQgbmV3IHByb3BlcnR5IElTX09TX01BQ19PU1hfRUxfQ0FQSVRBTiBpbiBTeXN0ZW1VdGlscy4gVGhhbmtzCiAgICAgICAgICAgICB0byBKYWtlIFdhbmcuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjQKCgpDT01QQVRJQklMSVRZCj09PT09PT09PT09PT0KCkNvbW1vbnMgTGFuZyAzLjQgaXMgZnVsbHkgYmluYXJ5IGNvbXBhdGlibGUgdG8gdGhlIGxhc3QgcmVsZWFzZSBhbmQgY2FuCnRoZXJlZm9yZSBiZSB1c2VkIGFzIGEgZHJvcCBpbiByZXBsYWNlbWVudCBmb3IgMy4zLjIuIE5vdGUgdGhhdCB0aGUgdmFsdWUgb2YKb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRHVyYXRpb25Gb3JtYXRVdGlscy5JU09fRVhURU5ERURfRk9STUFUX1BBVFRFUk4KaGFzIGNoYW5nZWQsIHdoaWNoIG1heSBhZmZlY3QgY2xpZW50cyB1c2luZyB0aGUgY29uc3RhbnQuIEZ1cnRoZXJtb3JlIHRoZQpjb25zdGFudCBpcyB1c2VkIGludGVybmFsbHkgaW4KbyBEdXJhdGlvbkZvcm1hdFV0aWxzLmZvcm1hdER1cmF0aW9uSVNPKGxvbmcpCm8gRHVyYXRpb25Gb3JtYXRVdGlscy5mb3JtYXRQZXJpb2RJU08obG9uZywgbG9uZykKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctMTAwMC4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTgyMTogIFN1cHBvcnQgT1MgWCB2ZXJzaW9ucyBpbiBTeXN0ZW1VdGlscy4gVGhhbmtzIHRvIFRpbW8gS29ja2VydC4KbyBMQU5HLTExMDM6IEFkZCBTeXN0ZW1VdGlscy5JU19KQVZBXzFfOQpvIExBTkctMTA5MzogQWRkIENsYXNzVXRpbHMuZ2V0QWJicmV2aWF0ZWROYW1lKCkuIFRoYW5rcyB0byBGYWJpYW4gTGFuZ2UuCm8gTEFORy0xMDgyOiBBZGQgb3B0aW9uIHRvIGRpc2FibGUgdGhlICJvYmplY3RzVHJpdmlhbGx5RXF1YWwiIHRlc3QgaW4KICAgICAgICAgICAgIERpZmZCdWlsZGVyLiBUaGFua3MgdG8gSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDE1OiBBZGQgSnNvblRvU3RyaW5nU3R5bGUgaW1wbGVtZW50YXRpb24gdG8gVG9TdHJpbmdTdHlsZS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTEwODA6IEFkZCBOb0NsYXNzTmFtZVRvU3RyaW5nU3R5bGUgaW1wbGVtZW50YXRpb24gb2YgVG9TdHJpbmdTdHlsZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBJbm5va2VudHkgU2h1dmFsb3YuCm8gTEFORy04ODM6ICBBZGQgU3RyaW5nVXRpbHMuY29udGFpbnNBbnkoQ2hhclNlcXVlbmNlLCBDaGFyU2VxdWVuY2UuLi4pIG1ldGhvZC4KICAgICAgICAgICAgIFRoYW5rcyB0byBEYW5pZWwgU3Rld2FydC4KbyBMQU5HLTEwNTI6IE11bHRpbGluZSByZWN1cnNpdmUgdG8gc3RyaW5nIHN0eWxlLiBUaGFua3MgdG8gSmFuIE1hdOhybmUuCm8gTEFORy01MzY6ICBBZGQgaXNTb3J0ZWQoKSB0byBBcnJheVV0aWxzLiBUaGFua3MgdG8gSmFtZXMgU2F3bGUuCm8gTEFORy0xMDMzOiBBZGQgU3RyaW5nVXRpbHMuY291bnRNYXRjaGVzKENoYXJTZXF1ZW5jZSwgY2hhcikKbyBMQU5HLTEwMjE6IFByb3ZpZGUgbWV0aG9kcyB0byByZXRyaWV2ZSBhbGwgZmllbGRzL21ldGhvZHMgYW5ub3RhdGVkIHdpdGggYQogICAgICAgICAgICAgc3BlY2lmaWMgdHlwZS4gVGhhbmtzIHRvIEFsZXhhbmRlciBN/GxsZXIuCm8gTEFORy0xMDE2OiBOdW1iZXJVdGlscyNpc1BhcnNhYmxlIG1ldGhvZChzKS4gVGhhbmtzIHRvCiAgICAgICAgICAgICBKdWFuIFBhYmxvIFNhbnRvcyBSb2Ry7Wd1ZXouCm8gTEFORy05OTk6ICBBZGQgZnV6enkgU3RyaW5nIG1hdGNoaW5nIGxvZ2ljIHRvIFN0cmluZ1V0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEJlbiBSaXBrZW5zLgpvIExBTkctOTk0OiAgQWRkIHplcm8gY29weSByZWFkIG1ldGhvZCB0byBTdHJCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pa2hhaWwgTWF6dXJza3kuCm8gTEFORy05OTM6ICBBZGQgemVybyBjb3B5IHdyaXRlIG1ldGhvZCB0byBTdHJCdWlsZGVyLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pa2hhaWwgTWF6dXJza3kuCm8gTEFORy0xMDQ0OiBBZGQgbWV0aG9kIE1ldGhvZFV0aWxzLmludm9rZUV4YWN0TWV0aG9kKE9iamVjdCwgU3RyaW5nKQpvIExBTkctMTA0NTogQWRkIG1ldGhvZCBNZXRob2RVdGlscy5pbnZva2VNZXRob2QoT2JqZWN0LCBTdHJpbmcpCgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTc5NDogIFN5c3RlbVV0aWxzLklTX09TX1dJTkRPV1NfMjAwOCwgVklTVEEgYXJlIGluY29ycmVjdC4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaW1vIEtvY2tlcnQuCm8gTEFORy0xMTA0OiBQYXJzZSB0ZXN0IGZhaWxzIGZvciBUaW1lWm9uZSBBbWVyaWNhL1Nhb19QYXVsbwpvIExBTkctOTQ4OiAgRXhjZXB0aW9uIHdoaWxlIHVzaW5nIEV4dGVuZGVkTWVzc2FnZUZvcm1hdCBhbmQgZXNjYXBpbmcgYnJhY2VzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJleSBLaG9ibnlhLgpvIExBTkctMTA5MjogV3JvbmcgZm9ybWF0aW5nIG9mIHRpbWUgem9uZXMgd2l0aCBkYXlsaWdodCBzYXZpbmcgdGltZSBpbgogICAgICAgICAgICAgRmFzdERhdGVQcmludGVyCm8gTEFORy0xMDkwOiBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBzZXQgZXJyb3IgaW5kaWNhdGlvbiBpbiBQYXJzZVBvc2l0aW9uCm8gTEFORy0xMDg5OiBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgZXhjZXNzIGhvdXJzIGFzIHBlcgogICAgICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdApvIExBTkctMTA2MTogRmFzdERhdGVQYXJzZXIgZXJyb3IgLSB0aW1lem9uZXMgbm90IGhhbmRsZWQgY29ycmVjdGx5LiBUaGFua3MgdG8KICAgICAgICAgICAgIGRtZW5lc2VzLgpvIExBTkctMTA4NzogTnVtYmVyVXRpbHMjY3JlYXRlTnVtYmVyKCkgcmV0dXJucyBwb3NpdGl2ZSBCaWdEZWNpbWFsIHdoZW4KICAgICAgICAgICAgIG5lZ2F0aXZlIEZsb2F0IGlzIGV4cGVjdGVkLiBUaGFua3MgdG8gUmVuYXQgWmhpbGtpYmFldi4KbyBMQU5HLTEwODE6IERpZmZCdWlsZGVyLmFwcGVuZChTdHJpbmcsIE9iamVjdCBsZWZ0LCBPYmplY3QgcmlnaHQpIGRvZXMgbm90IGRvCiAgICAgICAgICAgICBhIGxlZnQuZXF1YWxzKHJpZ2h0KSBjaGVjay4gVGhhbmtzIHRvIEpvbmF0aGFuIEJha2VyLgpvIExBTkctMTA1NTogU3RyU3Vic3RpdHV0b3IucmVwbGFjZVN5c3RlbVByb3BlcnRpZXMgZG9lcyBub3Qgd29yayBjb25zaXN0ZW50bHkuCiAgICAgICAgICAgICBUaGFua3MgdG8gSm9uYXRoYW4gQmFrZXIuCm8gTEFORy0xMDgzOiBBZGQgKFQpIGNhc3RzIHRvIGdldCB1bml0IHRlc3RzIHRvIHBhc3MgaW4gb2xkIEpESy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBKb25hdGhhbiBCYWtlci4KbyBMQU5HLTEwNzM6IFJlYWQgd3JvbmcgY29tcG9uZW50IHR5cGUgb2YgYXJyYXkgaW4gYWRkIGluIEFycmF5VXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gaGFpeWFuZyBsaS4KbyBMQU5HLTEwNzc6IFN0cmluZ1V0aWxzLm9yZGluYWxJbmRleE9mKCJhYWFhYWEiLCAiYWEiLCAyKSAhPSAzIGluIFN0cmluZ1V0aWxzLgogICAgICAgICAgICAgVGhhbmtzIHRvIGhhaXlhbmcgbGkuCm8gTEFORy0xMDcyOiBEdXBsaWNhdGVkICIweCIgY2hlY2sgaW4gY3JlYXRlQmlnSW50ZWdlciBpbiBOdW1iZXJVdGlscy4gVGhhbmtzCiAgICAgICAgICAgICB0byBoYWl5YW5nIGxpLgpvIExBTkctMTA2NDogU3RyaW5nVXRpbHMuYWJicmV2aWF0ZSBkZXNjcmlwdGlvbiBkb2Vzbid0IGFncmVlIHdpdGggdGhlCiAgICAgICAgICAgICBleGFtcGxlcy4gVGhhbmtzIHRvIEIuSi4gSGVyYmlzb24uCm8gTEFORy0xMDQxOiBGaXggTWV0aG9kVXRpbHNUZXN0IHNvIGl0IGRvZXMgbm90IGRlcGVuZCBvbiBKREsgbWV0aG9kIG9yZGVyaW5nLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFsZXhhbmRyZSBCYXJ0ZWwuCm8gTEFORy0xMDAwOiBQYXJzZUV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBwYXJzZSBVVEMgZGF0ZXMgd2l0aCBaIGFzIHpvbmUKICAgICAgICAgICAgIGRlc2lnbmF0b3IgdXNpbmcgRGF0ZUZvcm1hdFV0aWxzLklTT19EQVRFVElNRV9USU1FX1pPTkVfRk9STUFUCm8gTEFORy0xMDM1OiBKYXZhZG9jIGZvciBFcXVhbHNCdWlsZGVyLnJlZmxlY3Rpb25FcXVhbHMoKSBpcyB1bmNsZWFyCm8gTEFORy0xMDAxOiBJU08gODYwMSBtaXNzcGVsbGVkIHRocm91Z2hvdXQgdGhlIEphdmFkb2NzLiBUaGFua3MgdG8KICAgICAgICAgICAgIE1pY2hhZWwgT3NpcG92LgpvIExBTkctMTA4ODogRmFzdERhdGVQYXJzZXIgc2hvdWxkIGJlIGNhc2UgaW5zZW5zaXRpdmUKbyBMQU5HLTk5NTogIEZpeCBidWcgd2l0aCBzdHJpcHBpbmcgc3BhY2VzIG9uIGxhc3QgbGluZSBpbiBXb3JkVXRpbHMud3JhcCgpLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFuZHJleSBLaG9ibnlhLgoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy0xMTAyOiBNYWtlIGxvZ2ljIGZvciBjb21wYXJpbmcgT1MgdmVyc2lvbnMgaW4gU3lzdGVtVXRpbHMgc21hcnRlcgpvIExBTkctMTA5MTogU2h1dGRvd24gdGhyZWFkIHBvb2xzIGluIHRlc3QgY2FzZXMuIFRoYW5rcyB0byBGYWJpYW4gTGFuZ2UuCm8gTEFORy0xMTAxOiBGYXN0RGF0ZVBhcnNlciBhbmQgRmFzdERhdGVQcmludGVyIHN1cHBvcnQgJ1gnIGZvcm1hdApvIExBTkctMTEwMDogQXZvaWQgbWVtb3J5IGFsbG9jYXRpb24gd2hlbiB1c2luZyBkYXRlIGZvcm1hdGluZyB0byBTdHJpbmdCdWZmZXIuCiAgICAgICAgICAgICBUaGFua3MgdG8gbWJyYWNoZXIuCm8gTEFORy05MzU6ICBQb3NzaWJsZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbiBzdHJpbmcgZXNjYXBlIGZ1bmN0aW9ucy4KICAgICAgICAgICAgIFRoYW5rcyB0byBGYWJpYW4gTGFuZ2UsIFRob21hcyBOZWlkaGFydC4KbyBMQU5HLTEwOTg6IEF2b2lkIFN0cmluZyBhbGxvY2F0aW9uIGluIFN0ckJ1aWxkZXIuYXBwZW5kKENoYXJTZXF1ZW5jZSkuIFRoYW5rcwogICAgICAgICAgICAgdG8gTWlraGFpbCBNYXp1cnNraXksIEZhYmlhbiBMYW5nZS4KbyBMQU5HLTEwOTg6IFVwZGF0ZSBtYXZlbi1jaGVja3N0eWxlLXBsdWdpbiB0byAyLjE0LiBUaGFua3MgdG8gTWljaGE/IEtvcmRhcy4KbyBMQU5HLTEwOTc6IFVwZGF0ZSBvcmcuZWFzeW1vY2s6ZWFzeW1vY2sgdG8gMy4zLjEuIFRoYW5rcyB0byBNaWNoYT8gS29yZGFzLgpvIExBTkctMTA5NjogVXBkYXRlIG1hdmVuLXBtZC1wbHVnaW4gdG8gMy40LiBUaGFua3MgdG8gTWljaGE/IEtvcmRhcy4KbyBMQU5HLTEwOTU6IFVwZGF0ZSBtYXZlbi1hbnRydW4tcGx1Z2luIHRvIDEuOC4gVGhhbmtzIHRvIE1pY2hhPyBLb3JkYXMuCm8gTEFORy04Nzc6ICBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZm9yIFN0cmluZ0VzY2FwZVV0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIEZhYmlhbiBMYW5nZS4KbyBMQU5HLTEwNzE6IEZpeCB3cm9uZyBleGFtcGxlcyBpbiBKYXZhZG9jIG9mCiAgICAgICAgICAgICBTdHJpbmdVdGlscy5yZXBsYWNlRWFjaFJlcGVhdGVkbHkoLi4uKSwKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLnJlcGxhY2VFYWNoKC4uLikgVGhhbmtzIHRvIEFybm8gTm9vcmRvdmVyLgpvIExBTkctODI3OiAgQ29tcGFyZVRvQnVpbGRlcidzIGRvYyBkb2Vzbid0IHNwZWNpZnkgcHJlY2VkZW5jZSBvZiBmaWVsZHMgaXQKICAgICAgICAgICAgIHVzZXMgaW4gcGVyZm9ybWluZyBjb21wYXJpc29ucwpvIExBTkctMTAyMDogSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBub3JtYWxpemUgc3BhY2UuIFRoYW5rcyB0byBMaWJvciBPbmRydXNlay4KbyBMQU5HLTEwMjc6IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TeXN0ZW1VdGlscyNpc0phdmFWZXJzaW9uQXRMZWFzdCBzaG91bGQKICAgICAgICAgICAgIHJldHVybiB0cnVlIGJ5IGRlZmF1bHQKbyBMQU5HLTEwMjY6IEJyaW5nIHN0YXRpYyBtZXRob2QgcmVmZXJlbmNlcyBpbiBTdHJpbmdVdGlscyB0byBjb25zaXN0ZW50IHN0eWxlLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFsZXggWXVyc2hhLgpvIExBTkctMTAxNzogVXNlIG5vbi1BU0NJSSBkaWdpdHMgaW4gSmF2YWRvYyBleGFtcGxlcyBmb3IKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmlzTnVtZXJpYy4gVGhhbmtzIHRvIENocmlzdG9waCBTY2huZWVnYW5zLgpvIExBTkctMTAwODogQ2hhbmdlIG1pbi9tYXggbWV0aG9kcyBpbiBOdW1iZXJVdGlscy9JRUVFNzU0clV0aWxzIGZyb20gYXJyYXkKICAgICAgICAgICAgIGlucHV0IHBhcmFtZXRlcnMgdG8gdmFyYXJncy4gVGhhbmtzIHRvIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTAwNjogQWRkIHdyYXAgKHdpdGggU3RyaW5nIG9yIGNoYXIpIHRvIFN0cmluZ1V0aWxzLiBUaGFua3MgdG8KICAgICAgICAgICAgIFRoaWFnbyBBbmRyYWRlLgpvIExBTkctMTAwNTogRXh0ZW5kIER1cmF0aW9uRm9ybWF0VXRpbHMjZm9ybWF0RHVyYXRpb25JU08gZGVmYXVsdCBwYXR0ZXJuIHRvCiAgICAgICAgICAgICBtYXRjaCAjZm9ybWF0RHVyYXRpb25ITVMuIFRoYW5rcyB0byBNaWNoYWVsIE9zaXBvdi4KbyBMQU5HLTEwMDc6IEZpeGluZyBOdW1iZXJVdGlscyBKQVZBRG9jIGNvbW1lbnRzIGZvciBtYXggbWV0aG9kcy4gVGhhbmtzIHRvCiAgICAgICAgICAgICBUaGlhZ28gQW5kcmFkZS4KbyBMQU5HLTczMTogIEJldHRlciBKYXZhZG9jIGZvciBCaXRGaWVsZCBjbGFzcwpvIExBTkctMTAwNDogRHVyYXRpb25Gb3JtYXRVdGlscyNmb3JtYXREdXJhdGlvbkhNUyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdAogICAgICAgICAgICAgY29ycmVzcG9uZCB0byBKYXZhZG9jIGFuZCB2aWNlIHZlcnNhLiBUaGFua3MgdG8gTWljaGFlbCBPc2lwb3YuCm8gTEFORy0xMDAzOiBEdXJhdGlvbkZvcm1hdFV0aWxzIGFyZSBub3QgYWJsZSB0byBoYW5kbGUgbmVnYXRpdmUKICAgICAgICAgICAgIGR1cmF0aW9ucy9wZXJpb2RzCm8gTEFORy05OTg6ICBKYXZhZG9jIGlzIG5vdCBjbGVhciBvbiBwcmVmZXJyZWQgcGF0dGVybiB0byBpbnN0YW50aWF0ZQogICAgICAgICAgICAgRmFzdERhdGVQYXJzZXIgLyBGYXN0RGF0ZVByaW50ZXIKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMy4yCgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09PT0KCm8gTEFORy05ODk6ICBBZGQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN5c3RlbVV0aWxzLklTX0pBVkFfMV84CgpGSVhFRCBCVUdTCj09PT09PT09PT09PQoKbyBMQU5HLTk5MjogIE51bWJlclV0aWxzI2lzTnVtYmVyKCkgcmV0dXJucyBmYWxzZSBmb3IgIjAuMCIsICIwLjQ3OTAiLCBldCBhbAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4zLjEKCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctOTg3OiAgRGF0ZVV0aWxzLmdldEZyYWdtZW50SW5EYXlzKERhdGUsIENhbGVuZGFyLk1PTlRIKSByZXR1cm5zIHdyb25nCiAgICAgICAgICAgICBkYXlzCm8gTEFORy05ODM6ICBEdXJhdGlvbkZvcm1hdFV0aWxzIGRvZXMgbm90IGRlc2NyaWJlIGZvcm1hdCBzdHJpbmcgZnVsbHkKbyBMQU5HLTk4MTogIER1cmF0aW9uRm9ybWF0VXRpbHMjbGV4eCBkb2VzIG5vdCBkZXRlY3QgdW5tYXRjaGVkIHF1b3RlIGNoYXIKbyBMQU5HLTk4NDogIER1cmF0aW9uRm9ybWF0VXRpbHMgZG9lcyBub3QgaGFuZGxlIGxhcmdlIGR1cmF0aW9ucyBjb3JyZWN0bHkKbyBMQU5HLTk4MjogIER1cmF0aW9uRm9ybWF0VXRpbHMuZm9ybWF0RHVyYXRpb24oNjE5OTksICJzLlNTU1MiKSAtIG1zIGZpZWxkCiAgICAgICAgICAgICBzaXplIHNob3VsZCBiZSA0IGRpZ2l0cwpvIExBTkctOTc4OiAgRmFpbGluZyB0ZXN0cyB3aXRoIEphdmEgOCBiMTI4Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAzLjMKCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTk1NTogIEFkZCBtZXRob2RzIGZvciByZW1vdmluZyBhbGwgaW52YWxpZCBjaGFyYWN0ZXJzIGFjY29yZGluZyB0bwogICAgICAgICAgICAgWE1MIDEuMCBhbmQgWE1MIDEuMSBpbiBhbiBpbnB1dCBzdHJpbmcgdG8gU3RyaW5nRXNjYXBlVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWRhbSBIb29wZXIuCm8gTEFORy05NzA6ICBBZGQgQVBJcyBNdXRhYmxlQm9vbGVhbiBzZXRUcnVlKCkgYW5kIHNldEZhbHNlKCkKbyBMQU5HLTk2MjogIEFkZCBTZXJpYWxpemF0aW9uVXRpbHMucm91bmR0cmlwKFQgZXh0ZW5kcyBTZXJpYWxpemFibGUpIHRvCiAgICAgICAgICAgICBzZXJpYWxpemUgdGhlbiBkZXNlcmlhbGl6ZQpvIExBTkctNjM3OiAgVGhlcmUgc2hvdWxkIGJlIGEgRGlmZmVyZW5jZUJ1aWxkZXIgd2l0aCBhCiAgICAgICAgICAgICBSZWZsZWN0aW9uRGlmZmVyZW5jZUJ1aWxkZXIgaW1wbGVtZW50YXRpb24KbyBMQU5HLTk0NDogIEFkZCB0aGUgSmFyby1XaW5rbGVyIHN0cmluZyBkaXN0YW5jZSBhbGdvcml0aG0gdG8gU3RyaW5nVXRpbHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gUmVraGEgSm9zaGkuCm8gTEFORy00MTc6ICBOZXcgY2xhc3MgQ2xhc3NQYXRoVXRpbHMgd2l0aCBtZXRob2RzIGZvciB0dXJuaW5nIEZRTiBpbnRvCiAgICAgICAgICAgICByZXNvdXJjZSBwYXRoCm8gTEFORy04MzQ6ICBWYWxpZGF0ZTogYWRkIGluY2x1c2l2ZUJldHdlZW4gYW5kIGV4Y2x1c2l2ZUJldHdlZW4gb3ZlcmxvYWRzCiAgICAgICAgICAgICBmb3IgcHJpbWl0aXZlIHR5cGVzCm8gTEFORy05MDA6ICBOZXcgUmFuZG9tVXRpbHMgY2xhc3MuIFRoYW5rcyB0byBEdW5jYW4gSm9uZXMuCm8gTEFORy05NjY6ICBBZGQgSUJNIE9TLzQwMCBkZXRlY3Rpb24KCkZJWEVEIEJVR1MKPT09PT09PT09PT09CgpvIExBTkctNjIxOiAgUmVmbGVjdGlvblRvU3RyaW5nQnVpbGRlci50b1N0cmluZyBkb2VzIG5vdCBkZWJ1ZyAzcmQgcGFydHkgb2JqZWN0CiAgICAgICAgICAgICBmaWVsZHMgd2l0aGluIDNyZCBwYXJ0eSBvYmplY3QuIFRoYW5rcyB0byBQaGlsaXAgSG9kZ2VzLAogICAgICAgICAgICAgVGhvbWFzIE5laWRoYXJ0LgpvIExBTkctOTc3OiAgTnVtZXJpY0VudGl0eUVzY2FwZXIgaW5jb3JyZWN0bHkgZW5jb2RlcyBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQ2hyaXMgS2FyY2hlci4KbyBMQU5HLTk3MzogIE1ha2Ugc29tZSBwcml2YXRlIGZpZWxkcyBmaW5hbApvIExBTkctOTcxOiAgTnVtYmVyVXRpbHMjaXNOdW1iZXIoU3RyaW5nKSBmYWlscyB0byByZWplY3QgaW52YWxpZCBPY3RhbCBudW1iZXJzCm8gTEFORy05NzI6ICBOdW1iZXJVdGlscyNpc051bWJlciBkb2VzIG5vdCBhbGxvdyBmb3IgaGV4IDBYQUJDRApvIExBTkctOTY5OiAgU3RyaW5nVXRpbHMudG9FbmNvZGVkU3RyaW5nKGJ5dGVbXSwgQ2hhcnNldCkgbmVlZGxlc3NseSB0aHJvd3MKICAgICAgICAgICAgIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24uIFRoYW5rcyB0byBNYXR0IEJpc2hvcC4KbyBMQU5HLTk0NjogIENvbnN0YW50SW5pdGlhbGl6ZXJUZXN0IGZhaWxzIHdoZW4gYnVpbGRpbmcgd2l0aCBJQk0gSkRLIDcKbyBMQU5HLTk1NDogIHVuY2F1Z2h0IFBhdHRlcm5TeW50YXhFeGNlcHRpb24gaW4gRmFzdERhdGVGb3JtYXQgb24gQW5kcm9pZC4KICAgICAgICAgICAgIFRoYW5rcyB0byBNaWNoYWVsIEtlcHBsZXIuCm8gTEFORy05MzY6ICBTdHJpbmdVdGlscy5nZXRMZXZlbnNodGVpbkRpc3RhbmNlIHdpdGggdG9vIGJpZyBvZiBhIHRocmVzaG9sZAogICAgICAgICAgICAgcmV0dXJucyB3cm9uZyByZXN1bHQuIFRoYW5rcyB0byBZYW5pdiBLdW5kYSwgRWxpIExpbmRzZXkuCm8gTEFORy05NDM6ICBUZXN0IER1cmF0aW9uRm9ybWF0VXRpbHNUZXN0LnRlc3RFZGdlRHVyYXRpb24gZmFpbHMgaW4KICAgICAgICAgICAgIEpESyAxLjYsIDEuNyBhbmQgMS44LCBCUlNUIHRpbWUgem9uZQpvIExBTkctNjEzOiAgQ29uc3RydWN0b3JVdGlscy5nZXRBY2Nlc3NpYmxlQ29uc3RydWN0b3IoKSBEb2VzIE5vdCBDaGVjayB0aGUKICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHkgb2YgRW5jbG9zaW5nIENsYXNzZXMKbyBMQU5HLTk1MTogIEZyYWdtZW50cyBhcmUgd3JvbmcgYnkgMSBkYXkgd2hlbiB1c2luZyBmcmFnbWVudCBZRUFSIG9yIE1PTlRILgogICAgICAgICAgICAgVGhhbmtzIHRvIFNlYmFzdGlhbiBH9nR6LgpvIExBTkctOTUwOiAgRmFzdERhdGVQYXJzZXIgZG9lcyBub3QgaGFuZGxlIHR3byBkaWdpdCB5ZWFyIHBhcnNpbmcgbGlrZQogICAgICAgICAgICAgU2ltcGxlRGF0ZUZvcm1hdApvIExBTkctOTQ5OiAgRmFzdERhdGVQYXJzZXJUZXN0LnRlc3RQYXJzZXMgZG9lcyBub3QgdGVzdCBGYXN0RGF0ZVBhcnNlcgpvIExBTkctOTE1OiAgV3JvbmcgbG9jYWxlIGhhbmRsaW5nIGluIExvY2FsZVV0aWxzLnRvTG9jYWxlKCkuCiAgICAgICAgICAgICBUaGFua3MgdG8gU2VyZ2lvIEZlcm7hbmRlei4KCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctOTYxOiAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnJlZmxlY3QuRmllbGRVdGlscy5yZW1vdmVGaW5hbE1vZGlmaWVyKEZpZWxkKQogICAgICAgICAgICAgZG9lcyBub3QgY2xlYW4gdXAgYWZ0ZXIgaXRzZWxmCm8gTEFORy05NTg6ICBGYXN0RGF0ZVBhcnNlciBqYXZhZG9jIGluY29ycmVjdGx5IHN0YXRlcyB0aGF0IFNpbXBsZURhdGVGb3JtYXQKICAgICAgICAgICAgIGlzIHVzZWQgaW50ZXJuYWxseQpvIExBTkctOTU2OiAgSW1wcm92ZSBKYXZhZG9jIG9mIFdvcmRVdGlscy53cmFwIG1ldGhvZHMKbyBMQU5HLTkzOTogIE1vdmUgRG9jdW1lbnRhdGlvbiBmcm9tIHVzZXIgZ3VpZGUgdG8gcGFja2FnZS1pbmZvIGZpbGVzCm8gTEFORy05NTM6ICBDb252ZXJ0IHBhY2thZ2UuaHRtbCBmaWxlcyB0byBwYWNrYWdlLWluZm8uamF2YSBmaWxlcwpvIExBTkctOTQwOiAgRml4IGRlcHJlY2F0aW9uIHdhcm5pbmdzCm8gTEFORy04MTk6ICBFbnVtVXRpbHMuZ2VuZXJhdGVCaXRWZWN0b3IgbmVlZHMgYSAiPyBleHRlbmRzIgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4yLjEKCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTkzNzogIEZpeCBtaXNzaW5nIEhhbWNyZXN0IGRlcGVuZGVuY3kgaW4gQW50IEJ1aWxkCm8gTEFORy05NDE6ICBUZXN0IGZhaWx1cmUgaW4gTG9jYWxlVXRpbHNUZXN0IHdoZW4gYnVpbGRpbmcgd2l0aCBKREsgOApvIExBTkctOTQyOiAgVGVzdCBmYWlsdXJlIGluIEZhc3REYXRlUGFyc2VyVGVzdCBhbmQgRmFzdERhdGVGb3JtYXRfUGFyc2VyVGVzdAogICAgICAgICAgICAgd2hlbiBidWlsZGluZyB3aXRoIEpESzguIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEsCiAgICAgICAgICAgICBIZW5yaSBZYW5kZWxsLgpvIExBTkctOTM4OiAgQnVpbGQgZmFpbHMgd2l0aCB0ZXN0IGZhaWx1cmVzIHdoZW4gYnVpbGRpbmcgd2l0aCBKREsgOAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4yCgpDT01QQVRJQklMSVRZIFdJVEggMy4xCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyByZWxlYXNlIGludHJvZHVjZXMgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGluCm9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkZhc3REYXRlRm9ybWF0OgpvIE1ldGhvZCAncHJvdGVjdGVkIGphdmEudXRpbC5MaXN0IHBhcnNlUGF0dGVybigpJyBoYXMgYmVlbiByZW1vdmVkCm8gTWV0aG9kICdwcm90ZWN0ZWQgamF2YS5sYW5nLlN0cmluZyBwYXJzZVRva2VuKGphdmEubGFuZy5TdHJpbmcsIGludFtdKScgaGFzCiAgYmVlbiByZW1vdmVkCm8gTWV0aG9kICdwcm90ZWN0ZWQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLnRpbWUuRmFzdERhdGVGb3JtYXQkTnVtYmVyUnVsZQogIHNlbGVjdE51bWJlclJ1bGUoaW50LCBpbnQpJyBoYXMgYmVlbiByZW1vdmVkCgpUaGVzZSBjaGFuZ2VzIHdlcmUgdGhlIHJlc3VsdCBvZiBbTEFORy00NjJdLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBjaGFuZ2UKd2lsbCBub3QgYnJlYWsgY2xpZW50cyBhcyBDaGFybGVzIEhvbnRvbiBwb2ludGVkIG91dCBvbiAyNS9KYW4vMTI6CiIKIDEuIE1ldGhvZHMgIkZhc3REYXRlRm9ybWF0JE51bWJlclJ1bGUgc2VsZWN0TnVtYmVyUnVsZShpbnQsIGludCkiIGFuZAogICAgIkxpc3Q8UnVsZT4gcGFyc2VQYXR0ZXJuKCkiIGNvdWxkbid0IGhhdmUgYmVlbiBvdmVycmlkZGVuIGJlY2F1c2UKICAgIE51bWJlclJ1bGUgYW5kIFJ1bGUgd2VyZSBwcml2YXRlIHRvIEZhc3REYXRlRm9ybWF0LgogMi4gRHVlIHRvIHRoZSBmYWN0b3J5IHBhdHRlcm4gdXNlZCwgaXQncyB1bmxpa2VseSBvdGhlciB0d28gbWV0aG9kcyB3b3VsZCBoYXZlCiAgICBiZWVuIG92ZXJyaWRkZW4uCiAzLiBUaGUgZm91ciBtZXRob2RzIGFyZSBoaWdobHkgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMuIEkgY29uc2lkZXIgaXQgYQogICAgbWlzdGFrZSB0aGF0IHRoZSBtZXRob2RzIHdlcmUgZXhwb3NlZC4KIgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9MQU5HLTQ2Mi4KCk5FVyBGRUFUVVJFUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTkzNDogIEFkZCByZW1vdmVGaW5hbE1vZGlmaWVyIHRvIEZpZWxkVXRpbHMKbyBMQU5HLTg2MzogIE1ldGhvZCByZXR1cm5zIG51bWJlciBvZiBpbmhlcml0YW5jZSBob3BzIGJldHdlZW4gcGFyZW50IGFuZAogICAgICAgICAgICAgc3ViY2xhc3MuIFRoYW5rcyB0byBEYW5lZWwgUy4gWWFpdHNrb3YuCm8gTEFORy03NzQ6ICBBZGRlZCBpc1N0YXJ0ZWQsIGlzU3VzcGVuZGVkIGFuZCBpc1N0b3BwZWQgdG8gU3RvcFdhdGNoLgogICAgICAgICAgICAgVGhhbmtzIHRvIEVyaGFuIEJhZ2RlbWlyLgpvIExBTkctODQ4OiAgQWRkZWQgU3RyaW5nVXRpbHMuaXNCbGFuay9pc0VtcHR5IENoYXJTZXF1ZW5jZS4uLiBtZXRob2RzLgogICAgICAgICAgICAgVGhhbmtzIHRvIEFsZXhhbmRlciBNdXRobWFubi4KbyBMQU5HLTkyNjogIEFkZGVkIEFycmF5VXRpbHMucmV2ZXJzZShhcnJheSwgZnJvbSwgdG8pIG1ldGhvZHMuCm8gTEFORy03OTU6ICBTdHJpbmdVdGlscy50b1N0cmluZyhieXRlW10sIFN0cmluZykgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYSBuZXcKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSwgQ2hhclNldCkuIFRoYW5rcyB0byBBYXJvbiBEaWd1bGxhLgpvIExBTkctODkzOiAgU3RyU3Vic3RpdHV0b3Igbm93IHN1cHBvcnRzIGRlZmF1bHQgdmFsdWVzIGZvciB2YXJpYWJsZXMuCiAgICAgICAgICAgICBUaGFua3MgdG8gV29vbnNhbiBLby4KbyBMQU5HLTkxMzogIEFkZGluZyAuZ2l0aWdub3JlIHRvIGNvbW1vbnMtbGFuZy4gVGhhbmtzIHRvIEFsbG9uIE11cmVpbmlrLgpvIExBTkctODM3OiAgQWRkIE9iamVjdFV0aWxzLnRvSWRlbnRpdHlTdHJpbmcgbWV0aG9kcyB0aGF0IHN1cHBvcnQKICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIsIFN0ckJ1aWxkZXIsIGFuZCBBcHBlbmRhYmxlLgpvIExBTkctODg2OiAgQWRkZWQgQ2hhclNldFV0aWxzLmNvbnRhaW5zQW55KFN0cmluZywgU3RyaW5nKS4KbyBMQU5HLTc5NzogIEFkZGVkIGVzY2FwZS91bmVzY2FwZUpzb24gdG8gU3RyaW5nRXNjYXBlVXRpbHMuCm8gTEFORy04NzU6ICBBZGRlZCBhcHBlbmRJZk1pc3NpbmcgYW5kIHByZXBlbmRJZk1pc3NpbmcgbWV0aG9kcyB0byBTdHJpbmdVdGlscy4KbyBMQU5HLTg3MDogIEFkZCBTdHJpbmdVdGlscy5MRiBhbmQgU3RyaW5nVXRpbHMuQ1IgdmFsdWVzLgpvIExBTkctODczOiAgQWRkIEZpZWxkVXRpbHMgZ2V0QWxsRmllbGRzKCkgdG8gcmV0dXJuIGFsbCB0aGUgZmllbGRzIGRlZmluZWQgaW4KICAgICAgICAgICAgIHRoZSBnaXZlbiBjbGFzcyBhbmQgc3VwZXIgY2xhc3Nlcy4KbyBMQU5HLTgzNTogIFN0ckJ1aWxkZXIgc2hvdWxkIHN1cHBvcnQgU3RyaW5nQnVpbGRlciBhcyBhbiBpbnB1dCBwYXJhbWV0ZXIuCm8gTEFORy04NTc6ICBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGluIENoYXJTZXF1ZW5jZVRyYW5zbGF0b3IuCm8gTEFORy04NTY6ICBDb2RlIHJlZmFjdG9yaW5nIGluIE51bWJlclV0aWxzLgpvIExBTkctODU1OiAgTnVtYmVyVXRpbHMjY3JlYXRlQmlnSW50ZWdlciBkb2VzIG5vdCBhbGxvdyBmb3IgaGV4IGFuZCBvY3RhbAogICAgICAgICAgICAgbnVtYmVycy4KbyBMQU5HLTg1NDogIE51bWJlclV0aWxzI2NyZWF0ZU51bWJlciAtIGRvZXMgbm90IGFsbG93IGZvciBoZXggbnVtYmVycyB0byBiZQogICAgICAgICAgICAgbGFyZ2VyIHRoYW4gTG9uZy4KbyBMQU5HLTg1MzogIFN0cmluZ1V0aWxzIGpvaW4gQVBJcyBmb3IgcHJpbWl0aXZlcy4KbyBMQU5HLTg0MTogIEFkZCBTdHJpbmdVdGlscyBBUEkgdG8gY2FsbCBTdHJpbmcucmVwbGFjZUFsbCBpbiBET1RBTEwgYS5rLmEuCiAgICAgICAgICAgICBzaW5nbGUtbGluZSBtb2RlLgpvIExBTkctODI1OiAgQ3JlYXRlIFN0ckJ1aWxkZXIgQVBJcyBzaW1pbGFyIHRvCiAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0KFN0cmluZywgT2JqZWN0Li4uKS4KbyBMQU5HLTY3NTogIEFkZCBUcmlwbGUgY2xhc3MgKHRlcm5hcnkgdmVyc2lvbiBvZiBQYWlyKS4KbyBMQU5HLTQ2MjogIEZhc3REYXRlRm9ybWF0IHN1cHBvcnRzIHBhcnNlIG1ldGhvZHMuCgpCVUcgRklYRVMKPT09PT09PT09PT0KCm8gTEFORy05MzI6ICBTcGVsbGluZyBmaXhlcy4gVGhhbmtzIHRvIFZpbGxlIFNreXR05C4KbyBMQU5HLTkyOTogIE9jdGFsVW5lc2NhcGVyIHRyaWVkIHRvIHBhcnNlIGFsbCBvZiBcMjc5LgpvIExBTkctOTI4OiAgT2N0YWxVbmVzY2FwZXIgaGFkIGJ1Z3Mgd2hlbiBwYXJzaW5nIG9jdGFscyBzdGFydGluZyB3aXRoIGEgemVyby4KbyBMQU5HLTkwNTogIEVxdWFsc0J1aWxkZXIgcmV0dXJuZWQgdHJ1ZSB3aGVuIGNvbXBhcmluZyBhcnJheXMsIGV2ZW4gd2hlbiB0aGUKICAgICAgICAgICAgIGVsZW1lbnRzIGFyZSBkaWZmZXJlbnQuCm8gTEFORy05MTc6ICBGaXhlZCBleGNlcHRpb24gd2hlbiBjb21iaW5pbmcgY3VzdG9tIGFuZCBjaG9pY2UgZm9ybWF0IGluCiAgICAgICAgICAgICBFeHRlbmRlZE1lc3NhZ2VGb3JtYXQuIFRoYW5rcyB0byBBcm5lIEJ1cm1laXN0ZXIuCm8gTEFORy05MDI6ICBSYW5kb21TdHJpbmdVdGlscy5yYW5kb20gamF2YWRvYyB3YXMgaW5jb3JyZWN0bHkgcHJvbWlzaW5nIGxldHRlcnMKICAgICAgICAgICAgIGFuZCBudW1iZXJzIHdvdWxkLCBhcyBvcHBvc2VkIHRvIG1heSwgYXBwZWFyICBJc3N1ZTouIFRoYW5rcyB0bwogICAgICAgICAgICAgQW5kcnplaiBXaW5uaWNraS4KbyBMQU5HLTkyMTogIEJvb2xlYW5VdGlscy54b3IoYm9vbGVhbi4uLikgcHJvZHVjZXMgd3JvbmcgcmVzdWx0cy4KbyBMQU5HLTg5NjogIEJvb2xlYW5VdGlscy50b0Jvb2xlYW4oU3RyaW5nIHN0cikgamF2YWRvYyBpcyBub3QgdXBkYXRlZC4gVGhhbmtzCiAgICAgICAgICAgICB0byBNYXJrIEJyeWFuIFl1LgpvIExBTkctODc5OiAgTG9jYWxlVXRpbHMgdGVzdCBmYWlscyB3aXRoIG5ldyBMb2NhbGUgImphX0pQX0pQXyN1LWNhLWphcGFuZXNlIgogICAgICAgICAgICAgb2YgSkRLNy4KbyBMQU5HLTgzNjogIFN0clN1YnN0aXR1dG9yIGRvZXMgbm90IHN1cHBvcnQgU3RyaW5nQnVpbGRlciBvciBDaGFyU2VxdWVuY2UuCiAgICAgICAgICAgICBUaGFua3MgdG8gQXJuYXVkIEJydW5ldC4KbyBMQU5HLTY5MzogIE1ldGhvZCBjcmVhdGVOdW1iZXIgZnJvbSBOdW1iZXJVdGlscyBkb2Vzbid0IHdvcmsgZm9yIGZsb2F0aW5nCiAgICAgICAgICAgICBwb2ludCBudW1iZXJzIG90aGVyIHRoYW4gRmxvYXQgIElzc3VlOiBMQU5HLTY5My4gVGhhbmtzIHRvCiAgICAgICAgICAgICBDYWx2aW4gRWNob2xzLgpvIExBTkctODg3OiAgRmFzdERhdGVGb3JtYXQgZG9lcyBub3QgdXNlIHRoZSBsb2NhbGUgc3BlY2lmaWMgY2FjaGUgY29ycmVjdGx5LgpvIExBTkctNzU0OiAgQ2xhc3NVdGlscy5nZXRTaG9ydE5hbWUoU3RyaW5nKSB3aWxsIG5vdyBvbmx5IGRvIGEgcmV2ZXJzZSBsb29rdXAKICAgICAgICAgICAgIGZvciBhcnJheSB0eXBlcy4KbyBMQU5HLTg4MTogIE51bWJlclV0aWxzLmNyZWF0ZU51bWJlcigpIEphdmFkb2Mgc2F5cyBpdCBkb2VzIG5vdCB3b3JrIGZvciBvY3RhbAogICAgICAgICAgICAgbnVtYmVycy4KbyBMQU5HLTg2NTogIExvY2FsZVV0aWxzLnRvTG9jYWxlIGRvZXMgbm90IHBhcnNlIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCBhbgogICAgICAgICAgICAgdW5kZXJzY29yZS4KbyBMQU5HLTg1ODogIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZUphdmEoKSBhbmQgZXNjYXBlRWNtYVNjcmlwdCgpIGRvIG5vdAogICAgICAgICAgICAgb3V0cHV0IHRoZSBlc2NhcGVkIHN1cnJvZ2F0ZSBwYWlycyB0aGF0IGFyZSBKYXZhIHBhcnNhYmxlLgpvIExBTkctODQ5OiAgRmFzdERhdGVGb3JtYXQgYW5kIEZhc3REYXRlUHJpbnRlciBnZW5lcmF0ZXMgRGF0ZSBvYmplY3RzCiAgICAgICAgICAgICB3YXN0ZWZ1bGx5LgpvIExBTkctODQ1OiAgU3BlbGxpbmcgZml4ZXMuCm8gTEFORy04NDQ6ICBGaXggZXhhbXBsZXMgY29udGFpbmVkIGluIGphdmFkb2Mgb2YgU3RyaW5nVXRpbHMuY2VudGVyIG1ldGhvZHMuCm8gTEFORy04MzI6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgdW50ZXJtaW5hdGVkIHF1b3RlcyBjb3JyZWN0bHkuCm8gTEFORy04MzE6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgd2hpdGUtc3BhY2UgcHJvcGVybHkuCm8gTEFORy04MzA6ICBGYXN0RGF0ZVBhcnNlciBjb3VsZCB1c2UgXFEgXEUgdG8gcXVvdGUgcmVnZXhlcy4KbyBMQU5HLTgyODogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSBub24tR3JlZ29yaWFuIGNhbGVuZGFycyBwcm9wZXJseS4KbyBMQU5HLTgyNjogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSBub24tQVNDSUkgZGlnaXRzIGNvcnJlY3RseS4KbyBMQU5HLTgyMjogIE51bWJlclV0aWxzI2NyZWF0ZU51bWJlciAtIGJhZCBiZWhhdmlvdXIgZm9yIGxlYWRpbmcgIi0tIi4KbyBMQU5HLTgxODogIEZhc3REYXRlRm9ybWF0J3MgInoiIHBhdHRlcm4gZG9lcyBub3QgcmVzcGVjdCB0aW1lem9uZSBvZiBDYWxlbmRhcgogICAgICAgICAgICAgaW5zdGFuY2VzIHBhc3NlZCB0byBmb3JtYXQoKS4KbyBMQU5HLTgxNzogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMuSVNfT1NfV0lORE9XU184LgpvIExBTkctODEzOiAgU3RyaW5nVXRpbHMuZXF1YWxzSWdub3JlQ2FzZSBkb2Vzbid0IGNoZWNrIHN0cmluZyByZWZlcmVuY2UKICAgICAgICAgICAgIGVxdWFsaXR5LgpvIExBTkctODEwOiAgU3RyaW5nVXRpbHMuam9pbigpIGVuZEluZGV4LCBidWdnZWQgZm9yIGxvb3AuCm8gTEFORy04MDc6ICBSYW5kb21TdHJpbmdVdGlscyB0aHJvd3MgY29uZnVzaW5nIElBRSB3aGVuIGVuZCA8PSBzdGFydC4KbyBMQU5HLTgwNTogIFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbShjb3VudCwgMCwgMCwgZmFsc2UsIGZhbHNlLCB1bml2ZXJzZSwKICAgICAgICAgICAgIHJhbmRvbSkgYWx3YXlzIHRocm93cyBqYXZhLmxhbmcuQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLgpvIExBTkctODAyOiAgTG9jYWxlVXRpbHMgLSB1bm5lY2Vzc2FyeSByZWN1cnNpdmUgY2FsbCBpbiBTeW5jQXZvaWQgY2xhc3MuCm8gTEFORy04MDA6ICBKYXZhZG9jIGJ1ZyBpbiBEYXRlVXRpbHMjY2VpbGluZyBmb3IgQ2FsZW5kYXIgYW5kIE9iamVjdCB2ZXJzaW9ucy4KbyBMQU5HLTc4ODogIFNlcmlhbGl6YXRpb25VdGlscyB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB3aGVuIGNsb25pbmcKICAgICAgICAgICAgIHByaW1pdGl2ZSBjbGFzc2VzLgpvIExBTkctNzg2OiAgU3RyaW5nVXRpbHMgZXF1YWxzKCkgcmVsaWVzIG9uIHVuZGVmaW5lZCBiZWhhdmlvci4KbyBMQU5HLTc4MzogIERvY3VtZW50YXRpb24gYnVnOiBTdHJpbmdVdGlscy5zcGxpdC4KbyBMQU5HLTc3NzogIGphciBjb250YWlucyB2ZWxvY2l0eSB0ZW1wbGF0ZSBvZiByZWxlYXNlIG5vdGVzLgpvIExBTkctNzc2OiAgVHlwZVV0aWxzVGVzdCBjb250YWlucyBpbmNvcnJlY3QgdHlwZSBhc3NpZ25hYmlsaXR5IGFzc2VydGlvbi4KbyBMQU5HLTc3NTogIFR5cGVVdGlscy5nZXRUeXBlQXJndW1lbnRzKCkgbWlzc2VzIHR5cGUgYXJndW1lbnRzIGZvcgogICAgICAgICAgICAgcGFydGlhbGx5LWFzc2lnbmVkIGNsYXNzZXMuCm8gTEFORy03NzM6ICBJbW11dGFibGVQYWlyIGRvYyBjb250YWlucyBub25zZW5zZSB0ZXh0LgpvIExBTkctNzcyOiAgQ2xhc3NVdGlscy5QQUNLQUdFX1NFUEFSQVRPUiBKYXZhZG9jIGNvbnRhaW5zIGdhcmJhZ2UgdGV4dC4KbyBMQU5HLTc2NTogIEV2ZW50TGlzdGVuZXJTdXBwb3J0LlByb3h5SW52b2NhdGlvbkhhbmRsZXIgbm8gbG9uZ2VyIGRlZmluZXMKICAgICAgICAgICAgIHNlcmlhbFZlcnNpb25VSUQuCm8gTEFORy03NjQ6ICBTdHJCdWlsZGVyIGlzIG5vdyBzZXJpYWxpemFibGUuCm8gTEFORy03NjE6ICBGaXggSmF2YWRvYyBBbnQgd2FybmluZ3MuCm8gTEFORy03NDc6ICBOdW1iZXJVdGlscyBkb2VzIG5vdCBoYW5kbGUgTG9uZyBIZXggbnVtYmVycy4KbyBMQU5HLTc0MzogIEphdmFkb2MgYnVnIGluIHN0YXRpYyBpbm5lciBjbGFzcyBEYXRlSXRlcmF0b3IuCgpDSEFOR0VTCj09PT09PT09PQoKbyBMQU5HLTkzMTogIE1pc2xlYWRpbmcgSmF2YWRvYyBjb21tZW50IGluIFN0ckJ1aWxkZXJSZWFkZXIgY2xhc3MuIFRoYW5rcwogICAgICAgICAgICAgdG8gQ2hyaXN0b3BoIFNjaG5lZWdhbnMuCm8gTEFORy05MTA6ICBTdHJpbmdVdGlscy5ub3JtYWxpemVTcGFjZSBub3cgaGFuZGxlcyBub24tYnJlYWtpbmcgc3BhY2VzCiAgICAgICAgICAgICAoVW5pY29kZSAwMEEwKS4gVGhhbmtzIHRvIFRpbXVyIFlhcm9zaC4KbyBMQU5HLTgwNDogIFJlZHVuZGFudCBjaGVjayBmb3IgemVybyBpbiBIYXNoQ29kZUJ1aWxkZXIgY3Rvci4gVGhhbmtzIHRvCiAgICAgICAgICAgICBBbGxvbiBNdXJlaW5pay4KbyBMQU5HLTg4NDogIFNpbXBsaWZ5IEZhc3REYXRlRm9ybWF0OyBlbGltaW5hdGUgYm94aW5nLgpvIExBTkctODgyOiAgTG9va3VwVHJhbnNsYXRvciBub3cgd29ya3Mgd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2YgQ2hhclNlcXVlbmNlCiAgICAgICAgICAgICBvdGhlciB0aGFuIFN0cmluZy4KbyBMQU5HLTg0NjogIFByb3ZpZGUgQ2hhclNlcXVlbmNlVXRpbHMucmVnaW9uTWF0Y2hlcyB3aXRoIGEgcHJvcGVyIGdyZWVuCiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGluZWZmaWNpZW50bHkgY29udmVydGluZyB0byBTdHJpbmdzLgpvIExBTkctODM5OiAgQXJyYXlVdGlscyByZW1vdmVFbGVtZW50cyBtZXRob2RzIHVzZSB1bm5lY2Vzc2FyeSBIYXNoU2V0LgpvIExBTkctODM4OiAgQXJyYXlVdGlscyByZW1vdmVFbGVtZW50cyBtZXRob2RzIGNsb25lIHRlbXBvcmFyeSBpbmRleCBhcnJheXMKICAgICAgICAgICAgIHVubmVjZXNzYXJpbHkuCm8gTEFORy03OTk6ICBEYXRlVXRpbHMjcGFyc2VEYXRlIHVzZXMgZGVmYXVsdCBsb2NhbGU7IGFkZCBMb2NhbGUgc3VwcG9ydC4KbyBMQU5HLTc5ODogIFVzZSBnZW5lcmljcyBpbiBTZXJpYWxpemF0aW9uVXRpbHMuCgpDSEFOR0VTIFdJVEhPVVQgVElDS0VUCj09PT09PT09PT09PT09PT09PT09PT09PQoKbyBGaXhlZCBVUkxzIGluIGphdmFkb2MgdG8gcG9pbnQgdG8gbmV3IG9yYWNsZS5jb20gcGFnZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMQoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctODAxOiAgQWRkIENvbnZlcnNpb24gdXRpbGl0eSB0byBjb252ZXJ0IGJldHdlZW4gZGF0YSB0eXBlcyBvbiBieXRlIGxldmVsCm8gTEFORy03NjA6ICBBZGQgQVBJIFN0cmluZ1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSBpbnRwdXQsIFN0cmluZyBjaGFyc2V0TmFtZSkKbyBMQU5HLTc1NjogIEFkZCBBUElzIENsYXNzVXRpbHMuaXNQcmltaXRpdmVXcmFwcGVyKENsYXNzPD8+KSBhbmQKICAgICAgICAgICAgIGlzUHJpbWl0aXZlT3JXcmFwcGVyKENsYXNzPD8+KQpvIExBTkctNjk1OiAgU3lzdGVtVXRpbHMuSVNfT1NfVU5JWCBkb2Vzbid0IHJlY29nbml6ZSBGcmVlQlNEIGFzIGEgVW5peCBzeXN0ZW0KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTc0OTogIEluY29ycmVjdCBCdW5kbGUtU3ltYm9saWNOYW1lIGluIE1hbmlmZXN0Cm8gTEFORy03NDY6ICBOdW1iZXJVdGlscyBkb2VzIG5vdCBoYW5kbGUgdXBwZXItY2FzZSBoZXg6IDBYIGFuZCAtMFgKbyBMQU5HLTc0NDogIFN0cmluZ1V0aWxzIHRocm93cyBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xFeGNlcHRpb24gb24gR29vZ2xlCiAgICAgICAgICAgICBBcHAgRW5naW5lCm8gTEFORy03NDE6ICBBbnQgYnVpbGQgaGFzIHdyb25nIGNvbXBvbmVudC5uYW1lCm8gTEFORy02OTg6ICBEb2N1bWVudCB0aGF0IHRoZSBNdXRhYmxlIG51bWJlcnMgZG9uJ3Qgd29yayBhcyBleHBlY3RlZCB3aXRoCiAgICAgICAgICAgICBTdHJpbmcuZm9ybWF0CgpDSEFOR0VTCj09PT09PT09PQoKbyBMQU5HLTc1ODogIEFkZCBhbiBleGFtcGxlIHdpdGggd2hpdGVzcGFjZSBpbiBTdHJpbmdVdGlscy5kZWZhdWx0SWZFbXB0eQpvIExBTkctNzUyOiAgRml4IGNyZWF0ZUxvbmcoKSBzbyBpdCBiZWhhdmVzIGxpa2UgY3JlYXRlSW50ZWdlcigpCm8gTEFORy03NTE6ICBJbmNsdWRlIHRoZSBhY3R1YWwgdHlwZSBpbiB0aGUgVmFsaWRhdGUuaXNJbnN0YW5jZSBhbmQKICAgICAgICAgICAgIGlzQXNzaWduYWJsZUZyb20gZXhjZXB0aW9uIG1lc3NhZ2VzCm8gTEFORy03NDg6ICBEZXByZWNhdGluZyBjaG9tcChTdHJpbmcsIFN0cmluZykKbyBMQU5HLTczNjogIENoYXJVdGlscyBzdGF0aWMgZmluYWwgYXJyYXkgQ0hBUl9TVFJJTkcgaXMgbm90IG5lZWRlZCB0byBjb21wdXRlCiAgICAgICAgICAgICBDSEFSX1NUUklOR19BUlJBWQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4wCgpBRERJVElPTlMKPT09PT09PT09PT0KCm8gTEFORy0yNzY6ICBNdXRhYmxlQmlnRGVjaW1hbCBhbmQgTXV0YWJsZUJpZ0ludGVnZXIuCm8gTEFORy0yODU6ICBXaXNoIDogbWV0aG9kIHVuYWNjZW50LgpvIExBTkctMzU4OiAgT2JqZWN0VXRpbHMuY29hbGVzY2UuCm8gTEFORy0zODY6ICBMZWZ0T2YvUmlnaHRPZk51bWJlciBpbiBSYW5nZSBjb252ZW5pZW5jZSBtZXRob2RzIG5lY2Vzc2FyeS4KbyBMQU5HLTQzNTogIEFkZCBDbGFzc1V0aWxzLmlzQXNzaWduYWJsZSgpIHZhcmlhbnRzIHdpdGggYXV0b2JveGluZy4KbyBMQU5HLTQ0NDogIFN0cmluZ1V0aWxzLmVtcHR5VG9OdWxsLgpvIExBTkctNDgyOiAgRW5oYW5jZSBTdHJTdWJzdGl0dXRvciB0byBzdXBwb3J0IG5lc3RlZCAke3Zhci0ke3N1YnZyfX0gZXhwYW5zaW9uCm8gTEFORy00ODI6ICBTdHJTdWJzdGl0dXRvciBub3cgc3VwcG9ydHMgc3Vic3RpdHV0aW9uIGluIHZhcmlhYmxlIG5hbWVzLgpvIExBTkctNDk2OiAgQSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMYXp5IGluaXRpYWxpemF0aW9uIHBhdHRlcm4uCm8gTEFORy00OTc6ICBBZGRpdGlvbiBvZiBDb250ZXh0ZWRFeGNlcHRpb24gYW5kIENvbnRleHRlZFJ1bnRpbWVFeGNlcHRpb24uCm8gTEFORy00OTg6ICBBZGQgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlVGV4dCgpIG1ldGhvZHMuCm8gTEFORy00OTk6ICBBZGQgc3VwcG9ydCBmb3IgdGhlIGhhbmRsaW5nIG9mIEV4ZWN1dGlvbkV4Y2VwdGlvbnMuCm8gTEFORy01MDE6ICBBZGQgc3VwcG9ydCBmb3IgYmFja2dyb3VuZCBpbml0aWFsaXphdGlvbi4KbyBMQU5HLTUyOTogIEFkZCBhIGNvbmN1cnJlbnQgcGFja2FnZS4KbyBMQU5HLTUzMzogIFZhbGlkYXRlOiBzdXBwb3J0IGZvciB2YWxpZGF0aW5nIGJsYW5rIHN0cmluZ3MuCm8gTEFORy01Mzc6ICBBZGQgQXJyYXlVdGlscy50b0FycmF5IHRvIGNyZWF0ZSBnZW5lcmljIGFycmF5cy4KbyBMQU5HLTU0NTogIEFkZCBhYmlsaXR5IHRvIGNyZWF0ZSBhIEZ1dHVyZSBmb3IgYSBjb25zdGFudC4KbyBMQU5HLTU0NjogIEFkZCBtZXRob2RzIHRvIFZhbGlkYXRlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGluZGV4IGlzIHZhbGlkIGZvcgogICAgICAgICAgICAgdGhlIGFycmF5L2xpc3Qvc3RyaW5nLgpvIExBTkctNTUzOiAgQWRkIFR5cGVVdGlscyBjbGFzcyB0byBwcm92aWRlIHV0aWxpdHkgY29kZSBmb3Igd29ya2luZyB3aXRoIGdlbmVyaWMKICAgICAgICAgICAgIHR5cGVzLgpvIExBTkctNTU5OiAgQWRkZWQgaXNBc3NpZ25hYmxlRnJvbSBhbmQgaXNJbnN0YW5jZU9mIHZhbGlkYXRpb24gbWV0aG9kcy4KbyBMQU5HLTU1OTogIEFkZGVkIHZhbGlkU3RhdGUgdmFsaWRhdGlvbiBtZXRob2QuCm8gTEFORy01NjA6ICBOZXcgVGltZWRTZW1hcGhvcmUgY2xhc3MuCm8gTEFORy01ODI6ICBQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUaHJlYWRGYWN0b3J5IGludGVyZmFjZS4KbyBMQU5HLTU4ODogIENyZWF0ZSBhIGJhc2ljIFBhaXI8TCwgUj4gY2xhc3MuCm8gTEFORy01OTQ6ICBEYXRlVXRpbHMgZXF1YWwgJiBjb21wYXJlIGZ1bmN0aW9ucyB1cCB0byBtb3N0IHNpZ25pZmljYW50IGZpZWxkLgpvIExBTkctNjAxOiAgQWRkIEJ1aWxkZXIgSW50ZXJmYWNlIC8gVXBkYXRlIEJ1aWxkZXJzIHRvIEltcGxlbWVudCBJdC4KbyBMQU5HLTYwOTogIFN1cHBvcnQgbGF6eSBpbml0aWFsaXphdGlvbiB1c2luZyBhdG9taWMgdmFyaWFibGVzCm8gTEFORy02MTA6ICBFeHRlbmQgZXhjZXB0aW9uIGhhbmRsaW5nIGluIENvbmN1cnJlbnRVdGlscyB0byBydW50aW1lIGV4Y2VwdGlvbnMuCm8gTEFORy02MTQ6ICBTdHJpbmdVdGlscy5lbmRzV2l0aEFueSBtZXRob2QKbyBMQU5HLTY0MDogIEFkZCBub3JtYWxpemVTcGFjZSB0byBTdHJpbmdVdGlscwpvIExBTkctNjQ0OiAgUHJvdmlkZSBkb2N1bWVudGF0aW9uIGFib3V0IHRoZSBuZXcgY29uY3VycmVudCBwYWNrYWdlCm8gTEFORy02NDk6ICBCb29sZWFuVXRpbHMudG9Cb29sZWFuT2JqZWN0IHRvIHN1cHBvcnQgc2luZ2xlIGNoYXJhY3RlciBpbnB1dApvIExBTkctNjUxOiAgQWRkIEFubm90YXRpb25VdGlscwpvIExBTkctNjUzOiAgUHJvdmlkZSBhIHZlcnkgYmFzaWMgQ29uY3VycmVudEluaXRpYWxpemVyIGltcGxlbWVudGF0aW9uCm8gTEFORy02NTU6ICBBZGQgU3RyaW5nVXRpbHMuZGVmYXVsdElmQmxhbmsoKQpvIExBTkctNjY3OiAgQWRkIGEgTnVsbC1zYWZlIGNvbXBhcmUoKSBtZXRob2QgdG8gT2JqZWN0VXRpbHMKbyBMQU5HLTY3NjogIERvY3VtZW50ZWQgcG90ZW50aWFsIE5QRSBpZiBhdXRvLWJveGluZyBvY2N1cnMgZm9yIHNvbWUgQm9vbGVhblV0aWxzCiAgICAgICAgICAgICBtZXRob2RzCm8gTEFORy02Nzg6ICBBZGQgc3VwcG9ydCBmb3IgQ29uY3VycmVudE1hcC5wdXRJZkFic2VudCgpCm8gTEFORy02OTI6ICBBZGQgaGFzaENvZGVNdWx0aSB2YXJhcmdzIG1ldGhvZApvIExBTkctNjk3OiAgQWRkIEZvcm1hdHRhYmxlVXRpbHMgY2xhc3MKbyBMQU5HLTY4NDogIExldmVuc2h0ZWluIERpc3RhbmNlIFdpdGhpbiBhIEdpdmVuIFRocmVzaG9sZAoKUkVNT1ZBTFMKPT09PT09PT09PQoKbyBMQU5HLTQzODogIFJlbW92ZSBAZGVwcmVjYXRlZHMuCm8gTEFORy00OTI6ICBSZW1vdmUgY29kZSBoYW5kbGVkIG5vdyBieSB0aGUgSkRLLgpvIExBTkctNDkzOiAgUmVtb3ZlIGNvZGUgdGhhdCBkb2VzIG5vdCBob2xkIGVub3VnaCB2YWx1ZSB0byByZW1haW4uCm8gTEFORy01OTA6ICBSZW1vdmUgSkRLIDEuMi8xLjMgYnVnIGhhbmRsaW5nIGluCiAgICAgICAgICAgICBTdHJpbmdVdGlscy5pbmRleE9mKFN0cmluZywgU3RyaW5nLCBpbnQpLgpvIExBTkctNjczOiAgV29yZFV0aWxzLmFiYnJldmlhdGUoKSByZW1vdmVkCm8gTEFORy02OTE6ICBSZW1vdmVkIERhdGVVdGlscy5VVENfVElNRV9aT05FCgpJTVBST1ZFTUVOVFMKPT09PT09PT09PT09PT0KCm8gTEFORy0yOTA6ICBFbnVtVXRpbHMgZm9yIEpESyA1LjAuCm8gTEFORy0zMzY6ICBGaW5hbGx5IHN0YXJ0IHVzaW5nIGdlbmVyaWNzLgpvIExBTkctMzU1OiAgU3RyQnVpbGRlciBzaG91bGQgaW1wbGVtZW50IENoYXJTZXF1ZW5jZSBhbmQgQXBwZW5kYWJsZS4KbyBMQU5HLTM5NjogIEludmVzdGlnYXRlIGZvciB2YXJhcmcgdXNhZ2VzLgpvIExBTkctNDI0OiAgSW1wcm92ZSBKYXZhZG9jIGZvciBTdHJpbmdVdGlscyBjbGFzcy4KbyBMQU5HLTQ1ODogIFJlZmFjdG9yIFZhbGlkYXRlLmphdmEgdG8gZWxpbWluYXRlIGNvZGUgcmVkdW5kYW5jeS4KbyBMQU5HLTQ3OTogIERvY3VtZW50IHdoZXJlIGluIFNWTiB0cnVuayBpcy4KbyBMQU5HLTUwNDogIGJyaW5nIEFycmF5VXRpbHMuaXNFbXB0eSB0byB0aGUgZ2VuZXJpY3Mgd29ybGQuCm8gTEFORy01MDU6ICBSZXdyaXRlIFN0cmluZ0VzY2FwZVV0aWxzLgpvIExBTkctNTA3OiAgU3RyaW5nRXNjYXBlVXRpbHMudW5lc2NhcGVKYXZhIHNob3VsZCBzdXBwb3J0IFx1KyBub3RhdGlvbi4KbyBMQU5HLTUxMDogIENvbnZlcnQgU3RyaW5nVXRpbHMgQVBJIHRvIHRha2UgQ2hhclNlcXVlbmNlLgpvIExBTkctNTEzOiAgQmV0dGVyIEVudW1VdGlscy4KbyBMQU5HLTUyODogIE11dGFibGUgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IGFuIGFwcHJvcHJpYXRlbHkgdHlwZWQgTXV0YWJsZQogICAgICAgICAgICAgaW50ZXJmYWNlLgpvIExBTkctNTM5OiAgQ29tcGlsZSBjb21tb25zLmxhbmcgZm9yIENEQyAxLjEvRm91bmRhdGlvbiAxLjEuCm8gTEFORy01NDA6ICBNYWtlIE51bWVyaWNFbnRpdHlFc2NhcGVyIGltbXV0YWJsZS4KbyBMQU5HLTU0MTogIFJlcGxhY2UgU3RyaW5nQnVmZmVyIHdpdGggU3RyaW5nQnVpbGRlci4KbyBMQU5HLTU0ODogIFVzZSBJdGVyYWJsZSBvbiBBUEkgaW5zdGVhZCBvZiBDb2xsZWN0aW9uLgpvIExBTkctNTUxOiAgUmVwbGFjZSBSYW5nZSBjbGFzc2VzIHdpdGggZ2VuZXJpYyB2ZXJzaW9uLgpvIExBTkctNTYyOiAgQ2hhbmdlIE1hdmVuIGdyb3VwSWQuCm8gTEFORy01NjM6ICBDaGFuZ2UgSmF2YSBwYWNrYWdlIG5hbWUuCm8gTEFORy01NzA6ICBEbyB0aGUgdGVzdCBjYXNlcyByZWFsbHkgc3RpbGwgcmVxdWlyZSBtYWluKCkgYW5kIHN1aXRlKCkgbWV0aG9kcz8KbyBMQU5HLTU3OTogIEFkZCBuZXcgVmFsaWRhdGUgbWV0aG9kcy4KbyBMQU5HLTU5OTogIENsYXNzVXRpbHMuZ2V0Q2xhc3MoKTogQWxsb3cgRG90cyBhcyBJbm5lciBDbGFzcyBTZXBhcmF0b3JzLgpvIExBTkctNjA1OiAgRGVmYXVsdEV4Y2VwdGlvbkNvbnRleHQgb3ZlcndyaXRlcyB2YWx1ZXMgaW4gcmVjdXJzaXZlIHNpdHVhdGlvbnMuCm8gTEFORy02Njg6ICBDaGFuZ2UgT2JqZWN0VXRpbHMgbWluKCkgJiBtYXgoKSBmdW5jdGlvbnMgdG8gdXNlIHZhcmFyZ3MgcmF0aGVyCiAgICAgICAgICAgICB0aGFuIGp1c3QgdHdvIHBhcmFtZXRlcnMKbyBMQU5HLTY4MTogIFB1c2ggZG93biBXb3JkVXRpbHMgdG8gInRleHQiIHN1Yi1wYWNrYWdlLgpvIExBTkctNzExOiAgQWRkIGluY2x1ZGVhbnRydW50aW1lPWZhbHNlIHRvIGphdmFjIHRhcmdldHMgdG8gcXVlbGwgd2FybmluZ3MgaW4KICAgICAgICAgICAgIGFudCAxLjguMSBhbmQgYmV0dGVyIChhbmQgbW9kZXN0IHBlcmZvcm1hbmNlIGdhaW4pLgpvIExBTkctNzEzOiAgSW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBGaWVsZFV0aWxzIHJlYWQgbWV0aG9kcyBhbmQgdHdlYWsKICAgICAgICAgICAgIGphdmFkb2MuCm8gTEFORy03MTg6ICBidWlsZC54bWwgSmF2YSAxLjUrIHVwZGF0ZXMuCgpCVUcgRklYRVMKPT09PT09PT09PT0KCm8gTEFORy0xMTogICBEZXBlbmQgb24gSkRLIDEuNSsuCm8gTEFORy0zMDI6ICBTdHJCdWlsZGVyIGRvZXMgbm90IGltcGxlbWVudCBjbG9uZSgpLgpvIExBTkctMzM5OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSHRtbCgpIGVzY2FwZXMgbXVsdGlieXRlIGNoYXJhY3RlcnMgbGlrZQogICAgICAgICAgICAgQ2hpbmVzZSwgSmFwYW5lc2UsIGV0Yy4KbyBMQU5HLTM2OTogIEV4Y2VwdGlvblV0aWxzIG5vdCB0aHJlYWQtc2FmZS4KbyBMQU5HLTQxODogIEphdmFkb2MgaW5jb3JyZWN0IGZvciBTdHJpbmdVdGlscy5lbmRzV2l0aElnbm9yZUNhc2UuCm8gTEFORy00Mjg6ICBTdHJpbmdVdGlscy5pc0FscGhhLCBpc0FscGhhbnVtZXJpYyBhbmQgaXNOdW1lcmljIG5vdyByZXR1cm4gZmFsc2UKICAgICAgICAgICAgIGZvciAiIgpvIExBTkctNDM5OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSFRNTCgpIGRvZXMgbm90IGVzY2FwZSBjaGFycyAoMHgwMC0weDIwKS4KbyBMQU5HLTQ0ODogIExvd2VyIEFzY2lpIENoYXJhY3RlcnMgZG9uJ3QgZ2V0IGVuY29kZWQgYnkgRW50aXRpZXMuamF2YS4KbyBMQU5HLTQ2ODogIEpESyAxLjUgYnVpbGQvcnVudGltZSBmYWlsdXJlIG9uIExBTkctMzkzIChFcXVhbHNCdWlsZGVyKS4KbyBMQU5HLTQ3NDogIEZpeGVzIGZvciB0aHJlYWQgc2FmZXR5LgpvIExBTkctNDc4OiAgU3RvcFdhdGNoIGRvZXMgbm90IHJlc2lzdCB0byBzeXN0ZW0gdGltZSBjaGFuZ2VzLgpvIExBTkctNDgwOiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSHRtbCBpbmNvcnJlY3RseSBjb252ZXJ0cyB1bmljb2RlCiAgICAgICAgICAgICBjaGFyYWN0ZXJzIGFib3ZlIFUrMDBGRkZGIGludG8gMiBjaGFyYWN0ZXJzLgpvIExBTkctNDgxOiAgUG9zc2libGUgcmFjZS1jb25kaXRpb25zIGluIGhhc2hDb2RlIG9mIHRoZSByYW5nZSBjbGFzc2VzLgpvIExBTkctNTY0OiAgSW1wcm92ZSBTdHJMb29rdXAgQVBJIGRvY3VtZW50YXRpb24uCm8gTEFORy01Njg6ICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikgaXMgdXNlZCB0b28gZ2VuZXJhbGx5LgpvIExBTkctNTcxOiAgQXJyYXlVdGlscy5hZGQoVFs6ICBhcnJheSwgVCBlbGVtZW50KSBjYW4gY3JlYXRlIHVuZXhwZWN0ZWQKICAgICAgICAgICAgIENsYXNzQ2FzdEV4Y2VwdGlvbi4KbyBMQU5HLTU4NTogIGV4Y2VwdGlvbi5EZWZhdWx0RXhjZXB0aW9uQ29udGV4dC5nZXRGb3JtYXR0ZWRFeGNlcHRpb25NZXNzYWdlCiAgICAgICAgICAgICBjYXRjaGVzIFRocm93YWJsZS4KbyBMQU5HLTU5NjogIFN0clN1YnN0aXR1dG9yIHNob3VsZCBhbHNvIGhhbmRsZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIG9mIGEKICAgICAgICAgICAgIGphdmEudXRpbC5Qcm9wZXJ0aWVzIGNsYXNzCm8gTEFORy02MDA6ICBKYXZhZG9jIGlzIGluY29ycmVjdCBmb3IgcHVibGljIHN0YXRpYyBpbnQKICAgICAgICAgICAgIGxhc3RJbmRleE9mKFN0cmluZyBzdHIsIFN0cmluZyBzZWFyY2hTdHIpLgpvIExBTkctNjAyOiAgQ29udGV4dGVkUnVudGltZUV4Y2VwdGlvbiBubyBsb25nZXIgYW4gJ3VuY2hlY2tlZCcgZXhjZXB0aW9uLgpvIExBTkctNjA2OiAgRXF1YWxzQnVpbGRlciBjYXVzZXMgU3RhY2tPdmVyZmxvd0V4Y2VwdGlvbi4KbyBMQU5HLTYwODogIFNvbWUgU3RyaW5nVXRpbHMgbWV0aG9kcyBzaG91bGQgdGFrZSBhbiBpbnQgY2hhcmFjdGVyIGluc3RlYWQgb2YKICAgICAgICAgICAgIGNoYXIgdG8gdXNlIFN0cmluZyBBUEkgZmVhdHVyZXMuCm8gTEFORy02MTc6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVYTUwoKSBjYW4ndCBwcm9jZXNzIFVURi0xNiBzdXBwbGVtZW50YXJ5CiAgICAgICAgICAgICBjaGFyYWN0ZXJzCm8gTEFORy02MjQ6ICBTeXN0ZW1VdGlscy5nZXRKYXZhVmVyc2lvbkFzRmxvYXQgdGhyb3dzCiAgICAgICAgICAgICBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIG9uIEFuZHJvaWQgcnVudGltZS9EYWx2aWsgVk0KbyBMQU5HLTYyOTogIENoYXJzZXQgbWF5IG5vdCBiZSB0aHJlYWRzYWZlLCBiZWNhdXNlIHRoZSBIYXNoU2V0IGlzIG5vdCBzeW5jaC4KbyBMQU5HLTYzODogIE51bWJlclV0aWxzIGNyZWF0ZU51bWJlciB0aHJvd3MgYSBTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uCiAgICAgICAgICAgICB3aGVuIGFyZ3VtZW50IGNvbnRhaW5pbmcgImUiIGFuZCAiRSIgaXMgcGFzc2VkIGluCm8gTEFORy02NDM6ICBKYXZhZG9jIFN0cmluZ1V0aWxzLmxlZnQoKSBjbGFpbXMgdG8gdGhyb3cgb24gbmVnYXRpdmUgbGVuLCBidXQKICAgICAgICAgICAgIGRvZXNuJ3QKbyBMQU5HLTY0NTogIEZhc3REYXRlRm9ybWF0LmZvcm1hdCgpIG91dHB1dHMgaW5jb3JyZWN0IHdlZWsgb2YgeWVhciBiZWNhdXNlCiAgICAgICAgICAgICBsb2NhbGUgaXNuJ3QgcmVzcGVjdGVkCm8gTEFORy02NDY6ICBTdHJpbmdFc2NhcGVVdGlscy51bmVzY2FwZUphdmEgZG9lc24ndCBoYW5kbGUgb2N0YWwgZXNjYXBlcyBhbmQKICAgICAgICAgICAgIFVuaWNvZGUgd2l0aCBleHRyYSB1Cm8gTEFORy02NTY6ICBFeGFtcGxlIFN0cmluZ1V0aWxzLmluZGV4T2ZBbnlCdXQoInp6YWJ5eWNkeHgiLCAnJykgPSAwIGluY29ycmVjdApvIExBTkctNjU4OiAgU29tZSBFbnRpdHlzIGxpa2UgJk91bWw7IGFyZSBub3QgbWF0Y2hlZCBwcm9wZXJseSBhZ2FpbnN0IGl0cwogICAgICAgICAgICAgSVNPODg1OS0xIHJlcHJlc2VudGF0aW9uCm8gTEFORy02NTk6ICBFbnRpdHlBcnJheXMgdHlwbzogeyJcdTIxMjIiLCAiJm1pbnVzOyJ9LCAvLyBtaW51cyBzaWduLCBVKzIyMTIKICAgICAgICAgICAgIElTT3RlY2gKbyBMQU5HLTY2OiAgIFN0cmluZ0VzY2FwZXIuZXNjYXBlWG1sKCkgZXNjYXBlcyBjaGFyYWN0ZXJzID4gMHg3Zi4KbyBMQU5HLTY2MjogIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5tYXRoLkZyYWN0aW9uIGRvZXMgbm90IHJlZHVjZQogICAgICAgICAgICAgKEludGVnZXIuTUlOX1ZBTFVFLCAyXmspCm8gTEFORy02NjM6ICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMubWF0aC5GcmFjdGlvbiBkb2VzIG5vdCBhbHdheXMgc3VjY2VlZCBpbgogICAgICAgICAgICAgbXVsdGlwbHlCeSBhbmQgZGl2aWRlQnkKbyBMQU5HLTY2NDogIE51bWJlclV0aWxzLmlzTnVtYmVyKFN0cmluZykgaXMgbm90IHJpZ2h0IHdoZW4gdGhlIFN0cmluZyBpcwogICAgICAgICAgICAgIjEuMUwiCm8gTEFORy02NzI6ICBEb2MgYnVnIGluIERhdGVVdGlscyNjZWlsaW5nCm8gTEFORy02Nzc6ICBEYXRlVXRpbHMuaXNTYW1lTG9jYWxUaW1lIGNvbXBhcmVzIHVzaW5nIDEyIGhvdXIgY2xvY2sgYW5kIG5vdAogICAgICAgICAgICAgMjQgaG91cgpvIExBTkctNjg1OiAgRXF1YWxzQnVpbGRlciBzeW5jaHJvbml6ZXMgb24gSGFzaENvZGVCdWlsZGVyLgpvIExBTkctNzAzOiAgU3RyaW5nVXRpbHMuam9pbiB0aHJvd3MgTlBFIHdoZW4gdG9TdHJpbmcgcmV0dXJucyBudWxsIGZvciBvbmUgb2YKICAgICAgICAgICAgIG9iamVjdHMgaW4gY29sbGVjdGlvbgpvIExBTkctNzEwOiAgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiB3aGVuIGNhbGxpbmcgdW5lc2NhcGVIdG1sNCgiJiMwMyIpCm8gTEFORy03MTQ6ICBTdHJpbmdVdGlscyBkb2MvY29tbWVudCBzcGVsbGluZyBmaXhlcy4KbyBMQU5HLTcxNTogIENoYXJTZXRVdGlscy5zcXVlZXplKCkgc3BlZWR1cC4KbyBMQU5HLTcxNjogIHN3YXBDYXNlIGFuZCAqY2FwaXRhbGl6ZSBzcGVlZHVwcy4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBDb21tb25zIExhbmcsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvCnN1Ym1pdCBidWcgcmVwb3J0cywgcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlCkFwYWNoZSBDb21tb25zIExhbmcgd2Vic2l0ZToKCmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy8KCkhhdmUgZnVuIQotQXBhY2hlIENvbW1vbnMgTGFuZyB0ZWFtCgo=