JElkJAoKICAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAogICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCiAgIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIExhbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMy4zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGUgMy4zIHZlcnNpb24gb2YgCkFwYWNoZSBDb21tb25zIExhbmcuIENvbW1vbnMgTGFuZyBpcyBhIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgcmV1c2FibGUgCmNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgb2YgdXNlIGluIGFueSBKYXZhIGVudmlyb25tZW50LiBDb21tb25zIExhbmcgMy4zCmF0IGxlYXN0IHJlcXVpcmVzIEphdmEgNi4wLgoKRm9yIHRoZSBhZHZpY2Ugb24gdXBncmFkaW5nIGZyb20gMi54IHRvIDMueCwgc2VlIHRoZSBmb2xsb3dpbmcgcGFnZTogCgogICAgaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nL2FydGljbGUzXzAuaHRtbAoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctOTU1OiAgQWRkIG1ldGhvZHMgZm9yIHJlbW92aW5nIGFsbCBpbnZhbGlkIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvCiAgICAgICAgICAgICBYTUwgMS4wIGFuZCBYTUwgMS4xIGluIGFuIGlucHV0IHN0cmluZyB0byBTdHJpbmdFc2NhcGVVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBBZGFtIEhvb3Blci4KbyBMQU5HLTk3MDogIEFkZCBBUElzIE11dGFibGVCb29sZWFuIHNldFRydWUoKSBhbmQgc2V0RmFsc2UoKQpvIExBTkctOTYyOiAgQWRkIFNlcmlhbGl6YXRpb25VdGlscy5yb3VuZHRyaXAoVCBleHRlbmRzIFNlcmlhbGl6YWJsZSkgdG8KICAgICAgICAgICAgIHNlcmlhbGl6ZSB0aGVuIGRlc2VyaWFsaXplCm8gTEFORy02Mzc6ICBUaGVyZSBzaG91bGQgYmUgYSBEaWZmZXJlbmNlQnVpbGRlciB3aXRoIGEKICAgICAgICAgICAgIFJlZmxlY3Rpb25EaWZmZXJlbmNlQnVpbGRlciBpbXBsZW1lbnRhdGlvbgpvIExBTkctOTQ0OiAgQWRkIHRoZSBKYXJvLVdpbmtsZXIgc3RyaW5nIGRpc3RhbmNlIGFsZ29yaXRobSB0byBTdHJpbmdVdGlscy4KICAgICAgICAgICAgIFRoYW5rcyB0byBSZWtoYSBKb3NoaS4KbyBMQU5HLTQxNzogIE5ldyBjbGFzcyBDbGFzc1BhdGhVdGlscyB3aXRoIG1ldGhvZHMgZm9yIHR1cm5pbmcgRlFOIGludG8KICAgICAgICAgICAgIHJlc291cmNlIHBhdGgKbyBMQU5HLTgzNDogIFZhbGlkYXRlOiBhZGQgaW5jbHVzaXZlQmV0d2VlbiBhbmQgZXhjbHVzaXZlQmV0d2VlbiBvdmVybG9hZHMKICAgICAgICAgICAgIGZvciBwcmltaXRpdmUgdHlwZXMKbyBMQU5HLTkwMDogIE5ldyBSYW5kb21VdGlscyBjbGFzcy4gVGhhbmtzIHRvIER1bmNhbiBKb25lcy4KbyBMQU5HLTk2NjogIEFkZCBJQk0gT1MvNDAwIGRldGVjdGlvbgoKRklYRUQgQlVHUwo9PT09PT09PT09PT0KCm8gTEFORy02MjE6ICBSZWZsZWN0aW9uVG9TdHJpbmdCdWlsZGVyLnRvU3RyaW5nIGRvZXMgbm90IGRlYnVnIDNyZCBwYXJ0eSBvYmplY3QKICAgICAgICAgICAgIGZpZWxkcyB3aXRoaW4gM3JkIHBhcnR5IG9iamVjdC4gVGhhbmtzIHRvIFBoaWxpcCBIb2RnZXMsCiAgICAgICAgICAgICBUaG9tYXMgTmVpZGhhcnQuCm8gTEFORy05Nzc6ICBOdW1lcmljRW50aXR5RXNjYXBlciBpbmNvcnJlY3RseSBlbmNvZGVzIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycy4KICAgICAgICAgICAgIFRoYW5rcyB0byBDaHJpcyBLYXJjaGVyLgpvIExBTkctOTczOiAgTWFrZSBzb21lIHByaXZhdGUgZmllbGRzIGZpbmFsCm8gTEFORy05NzE6ICBOdW1iZXJVdGlscyNpc051bWJlcihTdHJpbmcpIGZhaWxzIHRvIHJlamVjdCBpbnZhbGlkIE9jdGFsIG51bWJlcnMKbyBMQU5HLTk3MjogIE51bWJlclV0aWxzI2lzTnVtYmVyIGRvZXMgbm90IGFsbG93IGZvciBoZXggMFhBQkNECm8gTEFORy05Njk6ICBTdHJpbmdVdGlscy50b0VuY29kZWRTdHJpbmcoYnl0ZVtdLCBDaGFyc2V0KSBuZWVkbGVzc2x5IHRocm93cwogICAgICAgICAgICAgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbi4gVGhhbmtzIHRvIE1hdHQgQmlzaG9wLgpvIExBTkctOTQ2OiAgQ29uc3RhbnRJbml0aWFsaXplclRlc3QgZmFpbHMgd2hlbiBidWlsZGluZyB3aXRoIElCTSBKREsgNwpvIExBTkctOTU0OiAgdW5jYXVnaHQgUGF0dGVyblN5bnRheEV4Y2VwdGlvbiBpbiBGYXN0RGF0ZUZvcm1hdCBvbiBBbmRyb2lkLgogICAgICAgICAgICAgVGhhbmtzIHRvIE1pY2hhZWwgS2VwcGxlci4KbyBMQU5HLTkzNjogIFN0cmluZ1V0aWxzLmdldExldmVuc2h0ZWluRGlzdGFuY2Ugd2l0aCB0b28gYmlnIG9mIGEgdGhyZXNob2xkCiAgICAgICAgICAgICByZXR1cm5zIHdyb25nIHJlc3VsdC4gVGhhbmtzIHRvIFlhbml2IEt1bmRhLCBFbGkgTGluZHNleS4KbyBMQU5HLTk0MzogIFRlc3QgRHVyYXRpb25Gb3JtYXRVdGlsc1Rlc3QudGVzdEVkZ2VEdXJhdGlvbiBmYWlscyBpbgogICAgICAgICAgICAgSkRLIDEuNiwgMS43IGFuZCAxLjgsIEJSU1QgdGltZSB6b25lCm8gTEFORy02MTM6ICBDb25zdHJ1Y3RvclV0aWxzLmdldEFjY2Vzc2libGVDb25zdHJ1Y3RvcigpIERvZXMgTm90IENoZWNrIHRoZQogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eSBvZiBFbmNsb3NpbmcgQ2xhc3NlcwpvIExBTkctOTUxOiAgRnJhZ21lbnRzIGFyZSB3cm9uZyBieSAxIGRheSB3aGVuIHVzaW5nIGZyYWdtZW50IFlFQVIgb3IgTU9OVEguCiAgICAgICAgICAgICBUaGFua3MgdG8gU2ViYXN0aWFuIEf2dHouCm8gTEFORy05NTA6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgdHdvIGRpZ2l0IHllYXIgcGFyc2luZyBsaWtlCiAgICAgICAgICAgICBTaW1wbGVEYXRlRm9ybWF0Cm8gTEFORy05NDk6ICBGYXN0RGF0ZVBhcnNlclRlc3QudGVzdFBhcnNlcyBkb2VzIG5vdCB0ZXN0IEZhc3REYXRlUGFyc2VyCm8gTEFORy05MTU6ICBXcm9uZyBsb2NhbGUgaGFuZGxpbmcgaW4gTG9jYWxlVXRpbHMudG9Mb2NhbGUoKS4KICAgICAgICAgICAgIFRoYW5rcyB0byBTZXJnaW8gRmVybuFuZGV6LgoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy05NjE6ICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMucmVmbGVjdC5GaWVsZFV0aWxzLnJlbW92ZUZpbmFsTW9kaWZpZXIoRmllbGQpCiAgICAgICAgICAgICBkb2VzIG5vdCBjbGVhbiB1cCBhZnRlciBpdHNlbGYKbyBMQU5HLTk1ODogIEZhc3REYXRlUGFyc2VyIGphdmFkb2MgaW5jb3JyZWN0bHkgc3RhdGVzIHRoYXQgU2ltcGxlRGF0ZUZvcm1hdAogICAgICAgICAgICBpcyB1c2VkIGludGVybmFsbHkKbyBMQU5HLTk1NjogIEltcHJvdmUgSmF2YURvYyBvZiBXb3JkVXRpbHMud3JhcCBtZXRob2RzCm8gTEFORy05Mzk6ICBNb3ZlIERvY3VtZW50YXRpb24gZnJvbSB1c2VyIGd1aWRlIHRvIHBhY2thZ2UtaW5mbyBmaWxlcwpvIExBTkctOTUzOiAgQ29udmVydCBwYWNrYWdlLmh0bWwgZmlsZXMgdG8gcGFja2FnZS1pbmZvLmphdmEgZmlsZXMKbyBMQU5HLTk0MDogIEZpeCBkZXByZWNhdGlvbiB3YXJuaW5ncwpvIExBTkctODE5OiAgRW51bVV0aWxzLmdlbmVyYXRlQml0VmVjdG9yIG5lZWRzIGEgIj8gZXh0ZW5kcyIKCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4yLjEKCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTkzNzogIEZpeCBtaXNzaW5nIEhhbWNyZXN0IGRlcGVuZGVuY3kgaW4gQW50IEJ1aWxkCm8gTEFORy05NDE6ICBUZXN0IGZhaWx1cmUgaW4gTG9jYWxlVXRpbHNUZXN0IHdoZW4gYnVpbGRpbmcgd2l0aCBKREsgOApvIExBTkctOTQyOiAgVGVzdCBmYWlsdXJlIGluIEZhc3REYXRlUGFyc2VyVGVzdCBhbmQgRmFzdERhdGVGb3JtYXRfUGFyc2VyVGVzdAogICAgICAgICAgICAgd2hlbiBidWlsZGluZyB3aXRoIEpESzguIFRoYW5rcyB0byBCcnVubyBQLiBLaW5vc2hpdGEsCiAgICAgICAgICAgICBIZW5yaSBZYW5kZWxsLgpvIExBTkctOTM4OiAgQnVpbGQgZmFpbHMgd2l0aCB0ZXN0IGZhaWx1cmVzIHdoZW4gYnVpbGRpbmcgd2l0aCBKREsgOCAKCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMy4yCgpDT01QQVRJQklMSVRZIFdJVEggMy4xCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyByZWxlYXNlIGludHJvZHVjZXMgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGluIApvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMudGltZS5GYXN0RGF0ZUZvcm1hdDoKbyBNZXRob2QgJ3Byb3RlY3RlZCBqYXZhLnV0aWwuTGlzdCBwYXJzZVBhdHRlcm4oKScgaGFzIGJlZW4gcmVtb3ZlZApvIE1ldGhvZCAncHJvdGVjdGVkIGphdmEubGFuZy5TdHJpbmcgcGFyc2VUb2tlbihqYXZhLmxhbmcuU3RyaW5nLCBpbnRbXSknIGhhcwogIGJlZW4gcmVtb3ZlZApvIE1ldGhvZCAncHJvdGVjdGVkIG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy50aW1lLkZhc3REYXRlRm9ybWF0JE51bWJlclJ1bGUKICBzZWxlY3ROdW1iZXJSdWxlKGludCwgaW50KScgaGFzIGJlZW4gcmVtb3ZlZAoKVGhlc2UgY2hhbmdlcyB3ZXJlIHRoZSByZXN1bHQgb2YgW0xBTkctNDYyXS4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMgY2hhbmdlIAp3aWxsIG5vdCBicmVhayBjbGllbnRzIGFzIENoYXJsZXMgSG9udG9uIHBvaW50ZWQgb3V0IG9uIDI1L0phbi8xMjoKIgogMS4gTWV0aG9kcyAiRmFzdERhdGVGb3JtYXQkTnVtYmVyUnVsZSBzZWxlY3ROdW1iZXJSdWxlKGludCwgaW50KSIgYW5kIAogICAgIkxpc3Q8UnVsZT4gcGFyc2VQYXR0ZXJuKCkiIGNvdWxkbid0IGhhdmUgYmVlbiBvdmVycmlkZGVuIGJlY2F1c2UKICAgIE51bWJlclJ1bGUgYW5kIFJ1bGUgd2VyZSBwcml2YXRlIHRvIEZhc3REYXRlRm9ybWF0LgogMi4gRHVlIHRvIHRoZSBmYWN0b3J5IHBhdHRlcm4gdXNlZCwgaXQncyB1bmxpa2VseSBvdGhlciB0d28gbWV0aG9kcyB3b3VsZCBoYXZlIAogICAgYmVlbiBvdmVycmlkZGVuLgogMy4gVGhlIGZvdXIgbWV0aG9kcyBhcmUgaGlnaGx5IGltcGxlbWVudGF0aW9uIHNwZWNpZmljLiBJIGNvbnNpZGVyIGl0IGEgCiAgICBtaXN0YWtlIHRoYXQgdGhlIG1ldGhvZHMgd2VyZSBleHBvc2VkLgoiCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0xBTkctNDYyLgoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctOTM0OiAgQWRkIHJlbW92ZUZpbmFsTW9kaWZpZXIgdG8gRmllbGRVdGlscwpvIExBTkctODYzOiAgTWV0aG9kIHJldHVybnMgbnVtYmVyIG9mIGluaGVyaXRhbmNlIGhvcHMgYmV0d2VlbiBwYXJlbnQgYW5kCiAgICAgICAgICAgICBzdWJjbGFzcy4gVGhhbmtzIHRvIERhbmVlbCBTLiBZYWl0c2tvdi4KbyBMQU5HLTc3NDogIEFkZGVkIGlzU3RhcnRlZCwgaXNTdXNwZW5kZWQgYW5kIGlzU3RvcHBlZCB0byBTdG9wV2F0Y2guCiAgICAgICAgICAgICBUaGFua3MgdG8gRXJoYW4gQmFnZGVtaXIuCm8gTEFORy04NDg6ICBBZGRlZCBTdHJpbmdVdGlscy5pc0JsYW5rL2lzRW1wdHkgQ2hhclNlcXVlbmNlLi4uIG1ldGhvZHMuCiAgICAgICAgICAgICBUaGFua3MgdG8gQWxleGFuZGVyIE11dGhtYW5uLgpvIExBTkctOTI2OiAgQWRkZWQgQXJyYXlVdGlscy5yZXZlcnNlKGFycmF5LCBmcm9tLCB0bykgbWV0aG9kcy4KbyBMQU5HLTc5NTogIFN0cmluZ1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSwgU3RyaW5nKSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBhIG5ldwogICAgICAgICAgICAgU3RyaW5nVXRpbHMudG9TdHJpbmcoYnl0ZVtdLCBDaGFyU2V0KS4gVGhhbmtzIHRvIEFhcm9uIERpZ3VsbGEuCm8gTEFORy04OTM6ICBTdHJTdWJzdGl0dXRvciBub3cgc3VwcG9ydHMgZGVmYXVsdCB2YWx1ZXMgZm9yIHZhcmlhYmxlcy4KICAgICAgICAgICAgIFRoYW5rcyB0byBXb29uc2FuIEtvLgpvIExBTkctOTEzOiAgQWRkaW5nIC5naXRpZ25vcmUgdG8gY29tbW9ucy1sYW5nLiBUaGFua3MgdG8gQWxsb24gTXVyZWluaWsuCm8gTEFORy04Mzc6ICBBZGQgT2JqZWN0VXRpbHMudG9JZGVudGl0eVN0cmluZyBtZXRob2RzIHRoYXQgc3VwcG9ydAogICAgICAgICAgICAgU3RyaW5nQnVpbGRlciwgU3RyQnVpbGRlciwgYW5kIEFwcGVuZGFibGUuCm8gTEFORy04ODY6ICBBZGRlZCBDaGFyU2V0VXRpbHMuY29udGFpbnNBbnkoU3RyaW5nLCBTdHJpbmcpLgpvIExBTkctNzk3OiAgQWRkZWQgZXNjYXBlL3VuZXNjYXBlSnNvbiB0byBTdHJpbmdFc2NhcGVVdGlscy4KbyBMQU5HLTg3NTogIEFkZGVkIGFwcGVuZElmTWlzc2luZyBhbmQgcHJlcGVuZElmTWlzc2luZyBtZXRob2RzIHRvIFN0cmluZ1V0aWxzLgpvIExBTkctODcwOiAgQWRkIFN0cmluZ1V0aWxzLkxGIGFuZCBTdHJpbmdVdGlscy5DUiB2YWx1ZXMuCm8gTEFORy04NzM6ICBBZGQgRmllbGRVdGlscyBnZXRBbGxGaWVsZHMoKSB0byByZXR1cm4gYWxsIHRoZSBmaWVsZHMgZGVmaW5lZCBpbgogICAgICAgICAgICAgdGhlIGdpdmVuIGNsYXNzIGFuZCBzdXBlciBjbGFzc2VzLgpvIExBTkctODM1OiAgU3RyQnVpbGRlciBzaG91bGQgc3VwcG9ydCBTdHJpbmdCdWlsZGVyIGFzIGFuIGlucHV0IHBhcmFtZXRlci4KbyBMQU5HLTg1NzogIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW4gQ2hhclNlcXVlbmNlVHJhbnNsYXRvci4KbyBMQU5HLTg1NjogIENvZGUgcmVmYWN0b3JpbmcgaW4gTnVtYmVyVXRpbHMuCm8gTEFORy04NTU6ICBOdW1iZXJVdGlscyNjcmVhdGVCaWdJbnRlZ2VyIGRvZXMgbm90IGFsbG93IGZvciBoZXggYW5kIG9jdGFsCiAgICAgICAgICAgICBudW1iZXJzLgpvIExBTkctODU0OiAgTnVtYmVyVXRpbHMjY3JlYXRlTnVtYmVyIC0gZG9lcyBub3QgYWxsb3cgZm9yIGhleCBudW1iZXJzIHRvIGJlCiAgICAgICAgICAgICBsYXJnZXIgdGhhbiBMb25nLiAKbyBMQU5HLTg1MzogIFN0cmluZ1V0aWxzIGpvaW4gQVBJcyBmb3IgcHJpbWl0aXZlcy4gCm8gTEFORy04NDE6ICBBZGQgU3RyaW5nVXRpbHMgQVBJIHRvIGNhbGwgU3RyaW5nLnJlcGxhY2VBbGwgaW4gRE9UQUxMIGEuay5hLgogICAgICAgICAgICAgc2luZ2xlLWxpbmUgbW9kZS4gCm8gTEFORy04MjU6ICBDcmVhdGUgU3RyQnVpbGRlciBBUElzIHNpbWlsYXIgdG8KICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoU3RyaW5nLCBPYmplY3QuLi4pLgpvIExBTkctNjc1OiAgQWRkIFRyaXBsZSBjbGFzcyAodGVybmFyeSB2ZXJzaW9uIG9mIFBhaXIpLgpvIExBTkctNDYyOiAgRmFzdERhdGVGb3JtYXQgc3VwcG9ydHMgcGFyc2UgbWV0aG9kcy4KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTkzMjogIFNwZWxsaW5nIGZpeGVzLiBUaGFua3MgdG8gVmlsbGUgU2t5dHTkLgpvIExBTkctOTI5OiAgT2N0YWxVbmVzY2FwZXIgdHJpZWQgdG8gcGFyc2UgYWxsIG9mIFwyNzkuCm8gTEFORy05Mjg6ICBPY3RhbFVuZXNjYXBlciBoYWQgYnVncyB3aGVuIHBhcnNpbmcgb2N0YWxzIHN0YXJ0aW5nIHdpdGggYSB6ZXJvLgpvIExBTkctOTA1OiAgRXF1YWxzQnVpbGRlciByZXR1cm5lZCB0cnVlIHdoZW4gY29tcGFyaW5nIGFycmF5cywgZXZlbiB3aGVuIHRoZQogICAgICAgICAgICAgZWxlbWVudHMgYXJlIGRpZmZlcmVudC4KbyBMQU5HLTkxNzogIEZpeGVkIGV4Y2VwdGlvbiB3aGVuIGNvbWJpbmluZyBjdXN0b20gYW5kIGNob2ljZSBmb3JtYXQgaW4KICAgICAgICAgICAgIEV4dGVuZGVkTWVzc2FnZUZvcm1hdC4gVGhhbmtzIHRvIEFybmUgQnVybWVpc3Rlci4KbyBMQU5HLTkwMjogIFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbSBqYXZhZG9jIHdhcyBpbmNvcnJlY3RseSBwcm9taXNpbmcgbGV0dGVycwogICAgICAgICAgICAgYW5kIG51bWJlcnMgd291bGQsIGFzIG9wcG9zZWQgdG8gbWF5LCBhcHBlYXIgIElzc3VlOi4gVGhhbmtzIHRvCiAgICAgICAgICAgICBBbmRyemVqIFdpbm5pY2tpLgpvIExBTkctOTIxOiAgQm9vbGVhblV0aWxzLnhvcihib29sZWFuLi4uKSBwcm9kdWNlcyB3cm9uZyByZXN1bHRzLgpvIExBTkctODk2OiAgQm9vbGVhblV0aWxzLnRvQm9vbGVhbihTdHJpbmcgc3RyKSBqYXZhZG9jIGlzIG5vdCB1cGRhdGVkLiBUaGFua3MKICAgICAgICAgICAgIHRvIE1hcmsgQnJ5YW4gWXUuCm8gTEFORy04Nzk6ICBMb2NhbGVVdGlscyB0ZXN0IGZhaWxzIHdpdGggbmV3IExvY2FsZSAiamFfSlBfSlBfI3UtY2EtamFwYW5lc2UiCiAgICAgICAgICAgICBvZiBKREs3LgpvIExBTkctODM2OiAgU3RyU3Vic3RpdHV0b3IgZG9lcyBub3Qgc3VwcG9ydCBTdHJpbmdCdWlsZGVyIG9yIENoYXJTZXF1ZW5jZS4KICAgICAgICAgICAgIFRoYW5rcyB0byBBcm5hdWQgQnJ1bmV0LgpvIExBTkctNjkzOiAgTWV0aG9kIGNyZWF0ZU51bWJlciBmcm9tIE51bWJlclV0aWxzIGRvZXNuJ3Qgd29yayBmb3IgZmxvYXRpbmcKICAgICAgICAgICAgIHBvaW50IG51bWJlcnMgb3RoZXIgdGhhbiBGbG9hdCAgSXNzdWU6IExBTkctNjkzLiBUaGFua3MgdG8KICAgICAgICAgICAgIENhbHZpbiBFY2hvbHMuCm8gTEFORy04ODc6ICBGYXN0RGF0ZUZvcm1hdCBkb2VzIG5vdCB1c2UgdGhlIGxvY2FsZSBzcGVjaWZpYyBjYWNoZSBjb3JyZWN0bHkuCm8gTEFORy03NTQ6ICBDbGFzc1V0aWxzLmdldFNob3J0TmFtZShTdHJpbmcpIHdpbGwgbm93IG9ubHkgZG8gYSByZXZlcnNlIGxvb2t1cAogICAgICAgICAgICAgZm9yIGFycmF5IHR5cGVzLgpvIExBTkctODgxOiAgTnVtYmVyVXRpbHMuY3JlYXRlTnVtYmVyKCkgSmF2YWRvYyBzYXlzIGl0IGRvZXMgbm90IHdvcmsgZm9yIG9jdGFsCiAgICAgICAgICAgICBudW1iZXJzLgpvIExBTkctODY1OiAgTG9jYWxlVXRpbHMudG9Mb2NhbGUgZG9lcyBub3QgcGFyc2Ugc3RyaW5ncyBzdGFydGluZyB3aXRoIGFuCiAgICAgICAgICAgICB1bmRlcnNjb3JlLgpvIExBTkctODU4OiAgU3RyaW5nRXNjYXBlVXRpbHMuZXNjYXBlSmF2YSgpIGFuZCBlc2NhcGVFY21hU2NyaXB0KCkgZG8gbm90CiAgICAgICAgICAgICBvdXRwdXQgdGhlIGVzY2FwZWQgc3Vycm9nYXRlIHBhaXJzIHRoYXQgYXJlIEphdmEgcGFyc2FibGUuCm8gTEFORy04NDk6ICBGYXN0RGF0ZUZvcm1hdCBhbmQgRmFzdERhdGVQcmludGVyIGdlbmVyYXRlcyBEYXRlIG9iamVjdHMgCiAgICAgICAgICAgICB3YXN0ZWZ1bGx5LgpvIExBTkctODQ1OiAgU3BlbGxpbmcgZml4ZXMuCm8gTEFORy04NDQ6ICBGaXggZXhhbXBsZXMgY29udGFpbmVkIGluIGphdmFkb2Mgb2YgU3RyaW5nVXRpbHMuY2VudGVyIG1ldGhvZHMuCm8gTEFORy04MzI6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgdW50ZXJtaW5hdGVkIHF1b3RlcyBjb3JyZWN0bHkuCm8gTEFORy04MzE6ICBGYXN0RGF0ZVBhcnNlciBkb2VzIG5vdCBoYW5kbGUgd2hpdGUtc3BhY2UgcHJvcGVybHkuCm8gTEFORy04MzA6ICBGYXN0RGF0ZVBhcnNlciBjb3VsZCB1c2UgXFEgXEUgdG8gcXVvdGUgcmVnZXhlcy4KbyBMQU5HLTgyODogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSBub24tR3JlZ29yaWFuIGNhbGVuZGFycyBwcm9wZXJseS4KbyBMQU5HLTgyNjogIEZhc3REYXRlUGFyc2VyIGRvZXMgbm90IGhhbmRsZSBub24tQVNDSUkgZGlnaXRzIGNvcnJlY3RseS4KbyBMQU5HLTgyMjogIE51bWJlclV0aWxzI2NyZWF0ZU51bWJlciAtIGJhZCBiZWhhdmlvdXIgZm9yIGxlYWRpbmcgIi0tIi4KbyBMQU5HLTgxODogIEZhc3REYXRlRm9ybWF0J3MgInoiIHBhdHRlcm4gZG9lcyBub3QgcmVzcGVjdCB0aW1lem9uZSBvZiBDYWxlbmRhcgogICAgICAgICAgICAgaW5zdGFuY2VzIHBhc3NlZCB0byBmb3JtYXQoKS4KbyBMQU5HLTgxNzogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3lzdGVtVXRpbHMuSVNfT1NfV0lORE9XU184LgpvIExBTkctODEzOiAgU3RyaW5nVXRpbHMuZXF1YWxzSWdub3JlQ2FzZSBkb2Vzbid0IGNoZWNrIHN0cmluZyByZWZlcmVuY2UKICAgICAgICAgICAgIGVxdWFsaXR5LgpvIExBTkctODEwOiAgU3RyaW5nVXRpbHMuam9pbigpIGVuZEluZGV4LCBidWdnZWQgZm9yIGxvb3AuCm8gTEFORy04MDc6ICBSYW5kb21TdHJpbmdVdGlscyB0aHJvd3MgY29uZnVzaW5nIElBRSB3aGVuIGVuZCA8PSBzdGFydC4KbyBMQU5HLTgwNTogIFJhbmRvbVN0cmluZ1V0aWxzLnJhbmRvbShjb3VudCwgMCwgMCwgZmFsc2UsIGZhbHNlLCB1bml2ZXJzZSwKICAgICAgICAgICAgIHJhbmRvbSkgYWx3YXlzIHRocm93cyBqYXZhLmxhbmcuQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uLgpvIExBTkctODAyOiAgTG9jYWxlVXRpbHMgLSB1bm5lY2Vzc2FyeSByZWN1cnNpdmUgY2FsbCBpbiBTeW5jQXZvaWQgY2xhc3MuCm8gTEFORy04MDA6ICBKYXZhZG9jIGJ1ZyBpbiBEYXRlVXRpbHMjY2VpbGluZyBmb3IgQ2FsZW5kYXIgYW5kIE9iamVjdCB2ZXJzaW9ucy4KbyBMQU5HLTc4ODogIFNlcmlhbGl6YXRpb25VdGlscyB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB3aGVuIGNsb25pbmcgCiAgICAgICAgICAgICBwcmltaXRpdmUgY2xhc3Nlcy4KbyBMQU5HLTc4NjogIFN0cmluZ1V0aWxzIGVxdWFscygpIHJlbGllcyBvbiB1bmRlZmluZWQgYmVoYXZpb3IuCm8gTEFORy03ODM6ICBEb2N1bWVudGF0aW9uIGJ1ZzogU3RyaW5nVXRpbHMuc3BsaXQuCm8gTEFORy03Nzc6ICBqYXIgY29udGFpbnMgdmVsb2NpdHkgdGVtcGxhdGUgb2YgcmVsZWFzZSBub3Rlcy4KbyBMQU5HLTc3NjogIFR5cGVVdGlsc1Rlc3QgY29udGFpbnMgaW5jb3JyZWN0IHR5cGUgYXNzaWduYWJpbGl0eSBhc3NlcnRpb24uCm8gTEFORy03NzU6ICBUeXBlVXRpbHMuZ2V0VHlwZUFyZ3VtZW50cygpIG1pc3NlcyB0eXBlIGFyZ3VtZW50cyBmb3IKICAgICAgICAgICAgIHBhcnRpYWxseS1hc3NpZ25lZCBjbGFzc2VzLgpvIExBTkctNzczOiAgSW1tdXRhYmxlUGFpciBkb2MgY29udGFpbnMgbm9uc2Vuc2UgdGV4dC4KbyBMQU5HLTc3MjogIENsYXNzVXRpbHMuUEFDS0FHRV9TRVBBUkFUT1IgSmF2YWRvYyBjb250YWlucyBnYXJiYWdlIHRleHQuCm8gTEFORy03NjU6ICBFdmVudExpc3RlbmVyU3VwcG9ydC5Qcm94eUludm9jYXRpb25IYW5kbGVyIG5vIGxvbmdlciBkZWZpbmVzIAogICAgICAgICAgICAgc2VyaWFsVmVyc2lvblVJRC4KbyBMQU5HLTc2NDogIFN0ckJ1aWxkZXIgaXMgbm93IHNlcmlhbGl6YWJsZS4KbyBMQU5HLTc2MTogIEZpeCBKYXZhZG9jIEFudCB3YXJuaW5ncy4KbyBMQU5HLTc0NzogIE51bWJlclV0aWxzIGRvZXMgbm90IGhhbmRsZSBMb25nIEhleCBudW1iZXJzLgpvIExBTkctNzQzOiAgSmF2YWRvYyBidWcgaW4gc3RhdGljIGlubmVyIGNsYXNzIERhdGVJdGVyYXRvci4KCkNIQU5HRVMKPT09PT09PT09CgpvIExBTkctOTMxOiAgTWlzbGVhZGluZyBKYXZhZG9jIGNvbW1lbnQgaW4gU3RyQnVpbGRlclJlYWRlciBjbGFzcy4gVGhhbmtzCiAgICAgICAgICAgICB0byBDaHJpc3RvcGggU2NobmVlZ2Fucy4KbyBMQU5HLTkxMDogIFN0cmluZ1V0aWxzLm5vcm1hbGl6ZVNwYWNlIG5vdyBoYW5kbGVzIG5vbi1icmVha2luZyBzcGFjZXMKICAgICAgICAgICAgIChVbmljb2RlIDAwQTApLiBUaGFua3MgdG8gVGltdXIgWWFyb3NoLgpvIExBTkctODA0OiAgUmVkdW5kYW50IGNoZWNrIGZvciB6ZXJvIGluIEhhc2hDb2RlQnVpbGRlciBjdG9yLiBUaGFua3MgdG8gCiAgICAgICAgICAgICBBbGxvbiBNdXJlaW5pay4KbyBMQU5HLTg4NDogIFNpbXBsaWZ5IEZhc3REYXRlRm9ybWF0OyBlbGltaW5hdGUgYm94aW5nLgpvIExBTkctODgyOiAgTG9va3VwVHJhbnNsYXRvciBub3cgd29ya3Mgd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2YgQ2hhclNlcXVlbmNlCiAgICAgICAgICAgICBvdGhlciB0aGFuIFN0cmluZy4KbyBMQU5HLTg0NjogIFByb3ZpZGUgQ2hhclNlcXVlbmNlVXRpbHMucmVnaW9uTWF0Y2hlcyB3aXRoIGEgcHJvcGVyIGdyZWVuCiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIGluZWZmaWNpZW50bHkgY29udmVydGluZyB0byBTdHJpbmdzLgpvIExBTkctODM5OiAgQXJyYXlVdGlscyByZW1vdmVFbGVtZW50cyBtZXRob2RzIHVzZSB1bm5lY2Vzc2FyeSBIYXNoU2V0LgpvIExBTkctODM4OiAgQXJyYXlVdGlscyByZW1vdmVFbGVtZW50cyBtZXRob2RzIGNsb25lIHRlbXBvcmFyeSBpbmRleCBhcnJheXMKICAgICAgICAgICAgIHVubmVjZXNzYXJpbHkuCm8gTEFORy03OTk6ICBEYXRlVXRpbHMjcGFyc2VEYXRlIHVzZXMgZGVmYXVsdCBsb2NhbGU7IGFkZCBMb2NhbGUgc3VwcG9ydC4KbyBMQU5HLTc5ODogIFVzZSBnZW5lcmljcyBpbiBTZXJpYWxpemF0aW9uVXRpbHMuCgpDSEFOR0VTIFdJVEhPVVQgVElDS0VUCj09PT09PT09PT09PT09PT09PT09PT09PQoKbyBGaXhlZCBVUkxzIGluIGphdmFkb2MgdG8gcG9pbnQgdG8gbmV3IG9yYWNsZS5jb20gcGFnZXMKCgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMQoKTkVXIEZFQVRVUkVTCj09PT09PT09PT09PT09CgpvIExBTkctODAxOiAgQWRkIENvbnZlcnNpb24gdXRpbGl0eSB0byBjb252ZXJ0IGJldHdlZW4gZGF0YSB0eXBlcyBvbiBieXRlIGxldmVsCm8gTEFORy03NjA6ICBBZGQgQVBJIFN0cmluZ1V0aWxzLnRvU3RyaW5nKGJ5dGVbXSBpbnRwdXQsIFN0cmluZyBjaGFyc2V0TmFtZSkKbyBMQU5HLTc1NjogIEFkZCBBUElzIENsYXNzVXRpbHMuaXNQcmltaXRpdmVXcmFwcGVyKENsYXNzPD8+KSBhbmQgCiAgICAgICAgICAgICBpc1ByaW1pdGl2ZU9yV3JhcHBlcihDbGFzczw/PikKbyBMQU5HLTY5NTogIFN5c3RlbVV0aWxzLklTX09TX1VOSVggZG9lc24ndCByZWNvZ25pemUgRnJlZUJTRCBhcyBhIFVuaXggc3lzdGVtCgpCVUcgRklYRVMKPT09PT09PT09PT0KCm8gTEFORy03NDk6ICBJbmNvcnJlY3QgQnVuZGxlLVN5bWJvbGljTmFtZSBpbiBNYW5pZmVzdApvIExBTkctNzQ2OiAgTnVtYmVyVXRpbHMgZG9lcyBub3QgaGFuZGxlIHVwcGVyLWNhc2UgaGV4OiAwWCBhbmQgLTBYCm8gTEFORy03NDQ6ICBTdHJpbmdVdGlscyB0aHJvd3MgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sRXhjZXB0aW9uIG9uIEdvb2dsZQogICAgICAgICAgICAgQXBwIEVuZ2luZQpvIExBTkctNzQxOiAgQW50IGJ1aWxkIGhhcyB3cm9uZyBjb21wb25lbnQubmFtZQpvIExBTkctNjk4OiAgRG9jdW1lbnQgdGhhdCB0aGUgTXV0YWJsZSBudW1iZXJzIGRvbid0IHdvcmsgYXMgZXhwZWN0ZWQgd2l0aAogICAgICAgICAgICAgU3RyaW5nLmZvcm1hdAoKQ0hBTkdFUwo9PT09PT09PT0KCm8gTEFORy03NTg6ICBBZGQgYW4gZXhhbXBsZSB3aXRoIHdoaXRlc3BhY2UgaW4gU3RyaW5nVXRpbHMuZGVmYXVsdElmRW1wdHkKbyBMQU5HLTc1MjogIEZpeCBjcmVhdGVMb25nKCkgc28gaXQgYmVoYXZlcyBsaWtlIGNyZWF0ZUludGVnZXIoKQpvIExBTkctNzUxOiAgSW5jbHVkZSB0aGUgYWN0dWFsIHR5cGUgaW4gdGhlIFZhbGlkYXRlLmlzSW5zdGFuY2UgYW5kCiAgICAgICAgICAgICBpc0Fzc2lnbmFibGVGcm9tIGV4Y2VwdGlvbiBtZXNzYWdlcwpvIExBTkctNzQ4OiAgRGVwcmVjYXRpbmcgY2hvbXAoU3RyaW5nLCBTdHJpbmcpCm8gTEFORy03MzY6ICBDaGFyVXRpbHMgc3RhdGljIGZpbmFsIGFycmF5IENIQVJfU1RSSU5HIGlzIG5vdCBuZWVkZWQgdG8gY29tcHV0ZQogICAgICAgICAgICAgQ0hBUl9TVFJJTkdfQVJSQVkKCgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDMuMAoKQURESVRJT05TCj09PT09PT09PT09CgpvIExBTkctMjc2OiAgTXV0YWJsZUJpZ0RlY2ltYWwgYW5kIE11dGFibGVCaWdJbnRlZ2VyLgpvIExBTkctMjg1OiAgV2lzaCA6IG1ldGhvZCB1bmFjY2VudC4KbyBMQU5HLTM1ODogIE9iamVjdFV0aWxzLmNvYWxlc2NlLgpvIExBTkctMzg2OiAgTGVmdE9mL1JpZ2h0T2ZOdW1iZXIgaW4gUmFuZ2UgY29udmVuaWVuY2UgbWV0aG9kcyBuZWNlc3NhcnkuCm8gTEFORy00MzU6ICBBZGQgQ2xhc3NVdGlscy5pc0Fzc2lnbmFibGUoKSB2YXJpYW50cyB3aXRoIGF1dG9ib3hpbmcuCm8gTEFORy00NDQ6ICBTdHJpbmdVdGlscy5lbXB0eVRvTnVsbC4KbyBMQU5HLTQ4MjogIEVuaGFuY2UgU3RyU3Vic3RpdHV0b3IgdG8gc3VwcG9ydCBuZXN0ZWQgJHt2YXItJHtzdWJ2cn19IGV4cGFuc2lvbgpvIExBTkctNDgyOiAgU3RyU3Vic3RpdHV0b3Igbm93IHN1cHBvcnRzIHN1YnN0aXR1dGlvbiBpbiB2YXJpYWJsZSBuYW1lcy4KbyBMQU5HLTQ5NjogIEEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTGF6eSBpbml0aWFsaXphdGlvbiBwYXR0ZXJuLgpvIExBTkctNDk3OiAgQWRkaXRpb24gb2YgQ29udGV4dGVkRXhjZXB0aW9uIGFuZCBDb250ZXh0ZWRSdW50aW1lRXhjZXB0aW9uLgpvIExBTkctNDk4OiAgQWRkIFN0cmluZ0VzY2FwZVV0aWxzLmVzY2FwZVRleHQoKSBtZXRob2RzLgpvIExBTkctNDk5OiAgQWRkIHN1cHBvcnQgZm9yIHRoZSBoYW5kbGluZyBvZiBFeGVjdXRpb25FeGNlcHRpb25zLgpvIExBTkctNTAxOiAgQWRkIHN1cHBvcnQgZm9yIGJhY2tncm91bmQgaW5pdGlhbGl6YXRpb24uCm8gTEFORy01Mjk6ICBBZGQgYSBjb25jdXJyZW50IHBhY2thZ2UuCm8gTEFORy01MzM6ICBWYWxpZGF0ZTogc3VwcG9ydCBmb3IgdmFsaWRhdGluZyBibGFuayBzdHJpbmdzLgpvIExBTkctNTM3OiAgQWRkIEFycmF5VXRpbHMudG9BcnJheSB0byBjcmVhdGUgZ2VuZXJpYyBhcnJheXMuCm8gTEFORy01NDU6ICBBZGQgYWJpbGl0eSB0byBjcmVhdGUgYSBGdXR1cmUgZm9yIGEgY29uc3RhbnQuCm8gTEFORy01NDY6ICBBZGQgbWV0aG9kcyB0byBWYWxpZGF0ZSB0byBjaGVjayB3aGV0aGVyIHRoZSBpbmRleCBpcyB2YWxpZCBmb3IKICAgICAgICAgICAgIHRoZSBhcnJheS9saXN0L3N0cmluZy4KbyBMQU5HLTU1MzogIEFkZCBUeXBlVXRpbHMgY2xhc3MgdG8gcHJvdmlkZSB1dGlsaXR5IGNvZGUgZm9yIHdvcmtpbmcgd2l0aCBnZW5lcmljCiAgICAgICAgICAgICB0eXBlcy4KbyBMQU5HLTU1OTogIEFkZGVkIGlzQXNzaWduYWJsZUZyb20gYW5kIGlzSW5zdGFuY2VPZiB2YWxpZGF0aW9uIG1ldGhvZHMuCm8gTEFORy01NTk6ICBBZGRlZCB2YWxpZFN0YXRlIHZhbGlkYXRpb24gbWV0aG9kLgpvIExBTkctNTYwOiAgTmV3IFRpbWVkU2VtYXBob3JlIGNsYXNzLgpvIExBTkctNTgyOiAgUHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGhyZWFkRmFjdG9yeSBpbnRlcmZhY2UuCm8gTEFORy01ODg6ICBDcmVhdGUgYSBiYXNpYyBQYWlyPEwsIFI+IGNsYXNzLgpvIExBTkctNTk0OiAgRGF0ZVV0aWxzIGVxdWFsICYgY29tcGFyZSBmdW5jdGlvbnMgdXAgdG8gbW9zdCBzaWduaWZpY2FudCBmaWVsZC4KbyBMQU5HLTYwMTogIEFkZCBCdWlsZGVyIEludGVyZmFjZSAvIFVwZGF0ZSBCdWlsZGVycyB0byBJbXBsZW1lbnQgSXQuCm8gTEFORy02MDk6ICBTdXBwb3J0IGxhenkgaW5pdGlhbGl6YXRpb24gdXNpbmcgYXRvbWljIHZhcmlhYmxlcwpvIExBTkctNjEwOiAgRXh0ZW5kIGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBDb25jdXJyZW50VXRpbHMgdG8gcnVudGltZSBleGNlcHRpb25zLgpvIExBTkctNjE0OiAgU3RyaW5nVXRpbHMuZW5kc1dpdGhBbnkgbWV0aG9kCm8gTEFORy02NDA6ICBBZGQgbm9ybWFsaXplU3BhY2UgdG8gU3RyaW5nVXRpbHMKbyBMQU5HLTY0NDogIFByb3ZpZGUgZG9jdW1lbnRhdGlvbiBhYm91dCB0aGUgbmV3IGNvbmN1cnJlbnQgcGFja2FnZQpvIExBTkctNjQ5OiAgQm9vbGVhblV0aWxzLnRvQm9vbGVhbk9iamVjdCB0byBzdXBwb3J0IHNpbmdsZSBjaGFyYWN0ZXIgaW5wdXQKbyBMQU5HLTY1MTogIEFkZCBBbm5vdGF0aW9uVXRpbHMKbyBMQU5HLTY1MzogIFByb3ZpZGUgYSB2ZXJ5IGJhc2ljIENvbmN1cnJlbnRJbml0aWFsaXplciBpbXBsZW1lbnRhdGlvbgpvIExBTkctNjU1OiAgQWRkIFN0cmluZ1V0aWxzLmRlZmF1bHRJZkJsYW5rKCkKbyBMQU5HLTY2NzogIEFkZCBhIE51bGwtc2FmZSBjb21wYXJlKCkgbWV0aG9kIHRvIE9iamVjdFV0aWxzCm8gTEFORy02NzY6ICBEb2N1bWVudGVkIHBvdGVudGlhbCBOUEUgaWYgYXV0by1ib3hpbmcgb2NjdXJzIGZvciBzb21lIEJvb2xlYW5VdGlscwogICAgICAgICAgICAgbWV0aG9kcwpvIExBTkctNjc4OiAgQWRkIHN1cHBvcnQgZm9yIENvbmN1cnJlbnRNYXAucHV0SWZBYnNlbnQoKQpvIExBTkctNjkyOiAgQWRkIGhhc2hDb2RlTXVsdGkgdmFyYXJncyBtZXRob2QKbyBMQU5HLTY5NzogIEFkZCBGb3JtYXR0YWJsZVV0aWxzIGNsYXNzCm8gTEFORy02ODQ6ICBMZXZlbnNodGVpbiBEaXN0YW5jZSBXaXRoaW4gYSBHaXZlbiBUaHJlc2hvbGQKClJFTU9WQUxTCj09PT09PT09PT0KCm8gTEFORy00Mzg6ICBSZW1vdmUgQGRlcHJlY2F0ZWRzLgpvIExBTkctNDkyOiAgUmVtb3ZlIGNvZGUgaGFuZGxlZCBub3cgYnkgdGhlIEpESy4KbyBMQU5HLTQ5MzogIFJlbW92ZSBjb2RlIHRoYXQgZG9lcyBub3QgaG9sZCBlbm91Z2ggdmFsdWUgdG8gcmVtYWluLgpvIExBTkctNTkwOiAgUmVtb3ZlIEpESyAxLjIvMS4zIGJ1ZyBoYW5kbGluZyBpbiAKICAgICAgICAgICAgIFN0cmluZ1V0aWxzLmluZGV4T2YoU3RyaW5nLCBTdHJpbmcsIGludCkuCm8gTEFORy02NzM6ICBXb3JkVXRpbHMuYWJicmV2aWF0ZSgpIHJlbW92ZWQKbyBMQU5HLTY5MTogIFJlbW92ZWQgRGF0ZVV0aWxzLlVUQ19USU1FX1pPTkUKCklNUFJPVkVNRU5UUwo9PT09PT09PT09PT09PQoKbyBMQU5HLTI5MDogIEVudW1VdGlscyBmb3IgSkRLIDUuMC4KbyBMQU5HLTMzNjogIEZpbmFsbHkgc3RhcnQgdXNpbmcgZ2VuZXJpY3MuCm8gTEFORy0zNTU6ICBTdHJCdWlsZGVyIHNob3VsZCBpbXBsZW1lbnQgQ2hhclNlcXVlbmNlIGFuZCBBcHBlbmRhYmxlLgpvIExBTkctMzk2OiAgSW52ZXN0aWdhdGUgZm9yIHZhcmFyZyB1c2FnZXMuCm8gTEFORy00MjQ6ICBJbXByb3ZlIEphdmFkb2MgZm9yIFN0cmluZ1V0aWxzIGNsYXNzLgpvIExBTkctNDU4OiAgUmVmYWN0b3IgVmFsaWRhdGUuamF2YSB0byBlbGltaW5hdGUgY29kZSByZWR1bmRhbmN5LgpvIExBTkctNDc5OiAgRG9jdW1lbnQgd2hlcmUgaW4gU1ZOIHRydW5rIGlzLgpvIExBTkctNTA0OiAgYnJpbmcgQXJyYXlVdGlscy5pc0VtcHR5IHRvIHRoZSBnZW5lcmljcyB3b3JsZC4KbyBMQU5HLTUwNTogIFJld3JpdGUgU3RyaW5nRXNjYXBlVXRpbHMuCm8gTEFORy01MDc6ICBTdHJpbmdFc2NhcGVVdGlscy51bmVzY2FwZUphdmEgc2hvdWxkIHN1cHBvcnQgXHUrIG5vdGF0aW9uLgpvIExBTkctNTEwOiAgQ29udmVydCBTdHJpbmdVdGlscyBBUEkgdG8gdGFrZSBDaGFyU2VxdWVuY2UuCm8gTEFORy01MTM6ICBCZXR0ZXIgRW51bVV0aWxzLgpvIExBTkctNTI4OiAgTXV0YWJsZSBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgYW4gYXBwcm9wcmlhdGVseSB0eXBlZCBNdXRhYmxlCiAgICAgICAgICAgICBpbnRlcmZhY2UuCm8gTEFORy01Mzk6ICBDb21waWxlIGNvbW1vbnMubGFuZyBmb3IgQ0RDIDEuMS9Gb3VuZGF0aW9uIDEuMS4KbyBMQU5HLTU0MDogIE1ha2UgTnVtZXJpY0VudGl0eUVzY2FwZXIgaW1tdXRhYmxlLgpvIExBTkctNTQxOiAgUmVwbGFjZSBTdHJpbmdCdWZmZXIgd2l0aCBTdHJpbmdCdWlsZGVyLgpvIExBTkctNTQ4OiAgVXNlIEl0ZXJhYmxlIG9uIEFQSSBpbnN0ZWFkIG9mIENvbGxlY3Rpb24uCm8gTEFORy01NTE6ICBSZXBsYWNlIFJhbmdlIGNsYXNzZXMgd2l0aCBnZW5lcmljIHZlcnNpb24uCm8gTEFORy01NjI6ICBDaGFuZ2UgTWF2ZW4gZ3JvdXBJZC4KbyBMQU5HLTU2MzogIENoYW5nZSBKYXZhIHBhY2thZ2UgbmFtZS4KbyBMQU5HLTU3MDogIERvIHRoZSB0ZXN0IGNhc2VzIHJlYWxseSBzdGlsbCByZXF1aXJlIG1haW4oKSBhbmQgc3VpdGUoKSBtZXRob2RzPwpvIExBTkctNTc5OiAgQWRkIG5ldyBWYWxpZGF0ZSBtZXRob2RzLgpvIExBTkctNTk5OiAgQ2xhc3NVdGlscy5nZXRDbGFzcygpOiBBbGxvdyBEb3RzIGFzIElubmVyIENsYXNzIFNlcGFyYXRvcnMuCm8gTEFORy02MDU6ICBEZWZhdWx0RXhjZXB0aW9uQ29udGV4dCBvdmVyd3JpdGVzIHZhbHVlcyBpbiByZWN1cnNpdmUgc2l0dWF0aW9ucy4KbyBMQU5HLTY2ODogIENoYW5nZSBPYmplY3RVdGlscyBtaW4oKSAmIG1heCgpIGZ1bmN0aW9ucyB0byB1c2UgdmFyYXJncyByYXRoZXIKICAgICAgICAgICAgIHRoYW4ganVzdCB0d28gcGFyYW1ldGVycwpvIExBTkctNjgxOiAgUHVzaCBkb3duIFdvcmRVdGlscyB0byAidGV4dCIgc3ViLXBhY2thZ2UuCm8gTEFORy03MTE6ICBBZGQgaW5jbHVkZWFudHJ1bnRpbWU9ZmFsc2UgdG8gamF2YWMgdGFyZ2V0cyB0byBxdWVsbCB3YXJuaW5ncyBpbgogICAgICAgICAgICAgYW50IDEuOC4xIGFuZCBiZXR0ZXIgKGFuZCBtb2Rlc3QgcGVyZm9ybWFuY2UgZ2FpbikuCm8gTEFORy03MTM6ICBJbmNyZWFzZSB0ZXN0IGNvdmVyYWdlIG9mIEZpZWxkVXRpbHMgcmVhZCBtZXRob2RzIGFuZCB0d2VhawogICAgICAgICAgICAgamF2YWRvYy4KbyBMQU5HLTcxODogIGJ1aWxkLnhtbCBKYXZhIDEuNSsgdXBkYXRlcy4KCkJVRyBGSVhFUwo9PT09PT09PT09PQoKbyBMQU5HLTExOiAgIERlcGVuZCBvbiBKREsgMS41Ky4KbyBMQU5HLTMwMjogIFN0ckJ1aWxkZXIgZG9lcyBub3QgaW1wbGVtZW50IGNsb25lKCkuCm8gTEFORy0zMzk6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIdG1sKCkgZXNjYXBlcyBtdWx0aWJ5dGUgY2hhcmFjdGVycyBsaWtlCiAgICAgICAgICAgICBDaGluZXNlLCBKYXBhbmVzZSwgZXRjLgpvIExBTkctMzY5OiAgRXhjZXB0aW9uVXRpbHMgbm90IHRocmVhZC1zYWZlLgpvIExBTkctNDE4OiAgSmF2YWRvYyBpbmNvcnJlY3QgZm9yIFN0cmluZ1V0aWxzLmVuZHNXaXRoSWdub3JlQ2FzZS4KbyBMQU5HLTQyODogIFN0cmluZ1V0aWxzLmlzQWxwaGEsIGlzQWxwaGFudW1lcmljIGFuZCBpc051bWVyaWMgbm93IHJldHVybiBmYWxzZQogICAgICAgICAgICAgZm9yICIiCm8gTEFORy00Mzk6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIVE1MKCkgZG9lcyBub3QgZXNjYXBlIGNoYXJzICgweDAwLTB4MjApLgpvIExBTkctNDQ4OiAgTG93ZXIgQXNjaWkgQ2hhcmFjdGVycyBkb24ndCBnZXQgZW5jb2RlZCBieSBFbnRpdGllcy5qYXZhLgpvIExBTkctNDY4OiAgSkRLIDEuNSBidWlsZC9ydW50aW1lIGZhaWx1cmUgb24gTEFORy0zOTMgKEVxdWFsc0J1aWxkZXIpLgpvIExBTkctNDc0OiAgRml4ZXMgZm9yIHRocmVhZCBzYWZldHkuCm8gTEFORy00Nzg6ICBTdG9wV2F0Y2ggZG9lcyBub3QgcmVzaXN0IHRvIHN5c3RlbSB0aW1lIGNoYW5nZXMuCm8gTEFORy00ODA6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVIdG1sIGluY29ycmVjdGx5IGNvbnZlcnRzIHVuaWNvZGUKICAgICAgICAgICAgIGNoYXJhY3RlcnMgYWJvdmUgVSswMEZGRkYgaW50byAyIGNoYXJhY3RlcnMuCm8gTEFORy00ODE6ICBQb3NzaWJsZSByYWNlLWNvbmRpdGlvbnMgaW4gaGFzaENvZGUgb2YgdGhlIHJhbmdlIGNsYXNzZXMuCm8gTEFORy01NjQ6ICBJbXByb3ZlIFN0ckxvb2t1cCBBUEkgZG9jdW1lbnRhdGlvbi4KbyBMQU5HLTU2ODogIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKSBpcyB1c2VkIHRvbyBnZW5lcmFsbHkuCm8gTEFORy01NzE6ICBBcnJheVV0aWxzLmFkZChUWzogIGFycmF5LCBUIGVsZW1lbnQpIGNhbiBjcmVhdGUgdW5leHBlY3RlZAogICAgICAgICAgICAgQ2xhc3NDYXN0RXhjZXB0aW9uLgpvIExBTkctNTg1OiAgZXhjZXB0aW9uLkRlZmF1bHRFeGNlcHRpb25Db250ZXh0LmdldEZvcm1hdHRlZEV4Y2VwdGlvbk1lc3NhZ2UKICAgICAgICAgICAgIGNhdGNoZXMgVGhyb3dhYmxlLgpvIExBTkctNTk2OiAgU3RyU3Vic3RpdHV0b3Igc2hvdWxkIGFsc28gaGFuZGxlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgb2YgYQogICAgICAgICAgICAgamF2YS51dGlsLlByb3BlcnRpZXMgY2xhc3MKbyBMQU5HLTYwMDogIEphdmFkb2MgaXMgaW5jb3JyZWN0IGZvciBwdWJsaWMgc3RhdGljIGludCAKICAgICAgICAgICAgIGxhc3RJbmRleE9mKFN0cmluZyBzdHIsIFN0cmluZyBzZWFyY2hTdHIpLgpvIExBTkctNjAyOiAgQ29udGV4dGVkUnVudGltZUV4Y2VwdGlvbiBubyBsb25nZXIgYW4gJ3VuY2hlY2tlZCcgZXhjZXB0aW9uLgpvIExBTkctNjA2OiAgRXF1YWxzQnVpbGRlciBjYXVzZXMgU3RhY2tPdmVyZmxvd0V4Y2VwdGlvbi4KbyBMQU5HLTYwODogIFNvbWUgU3RyaW5nVXRpbHMgbWV0aG9kcyBzaG91bGQgdGFrZSBhbiBpbnQgY2hhcmFjdGVyIGluc3RlYWQgb2YKICAgICAgICAgICAgIGNoYXIgdG8gdXNlIFN0cmluZyBBUEkgZmVhdHVyZXMuCm8gTEFORy02MTc6ICBTdHJpbmdFc2NhcGVVdGlscy5lc2NhcGVYTUwoKSBjYW4ndCBwcm9jZXNzIFVURi0xNiBzdXBwbGVtZW50YXJ5CiAgICAgICAgICAgICBjaGFyYWN0ZXJzCm8gTEFORy02MjQ6ICBTeXN0ZW1VdGlscy5nZXRKYXZhVmVyc2lvbkFzRmxvYXQgdGhyb3dzIAogICAgICAgICAgICAgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBvbiBBbmRyb2lkIHJ1bnRpbWUvRGFsdmlrIFZNCm8gTEFORy02Mjk6ICBDaGFyc2V0IG1heSBub3QgYmUgdGhyZWFkc2FmZSwgYmVjYXVzZSB0aGUgSGFzaFNldCBpcyBub3Qgc3luY2guCm8gTEFORy02Mzg6ICBOdW1iZXJVdGlscyBjcmVhdGVOdW1iZXIgdGhyb3dzIGEgU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgogICAgICAgICAgICAgd2hlbiBhcmd1bWVudCBjb250YWluaW5nICJlIiBhbmQgIkUiIGlzIHBhc3NlZCBpbgpvIExBTkctNjQzOiAgSmF2YWRvYyBTdHJpbmdVdGlscy5sZWZ0KCkgY2xhaW1zIHRvIHRocm93IG9uIG5lZ2F0aXZlIGxlbiwgYnV0CiAgICAgICAgICAgICBkb2Vzbid0Cm8gTEFORy02NDU6ICBGYXN0RGF0ZUZvcm1hdC5mb3JtYXQoKSBvdXRwdXRzIGluY29ycmVjdCB3ZWVrIG9mIHllYXIgYmVjYXVzZQogICAgICAgICAgICAgbG9jYWxlIGlzbid0IHJlc3BlY3RlZApvIExBTkctNjQ2OiAgU3RyaW5nRXNjYXBlVXRpbHMudW5lc2NhcGVKYXZhIGRvZXNuJ3QgaGFuZGxlIG9jdGFsIGVzY2FwZXMgYW5kCiAgICAgICAgICAgICBVbmljb2RlIHdpdGggZXh0cmEgdQpvIExBTkctNjU2OiAgRXhhbXBsZSBTdHJpbmdVdGlscy5pbmRleE9mQW55QnV0KCJ6emFieXljZHh4IiwgJycpID0gMCBpbmNvcnJlY3QKbyBMQU5HLTY1ODogIFNvbWUgRW50aXR5cyBsaWtlICZPdW1sOyBhcmUgbm90IG1hdGNoZWQgcHJvcGVybHkgYWdhaW5zdCBpdHMKICAgICAgICAgICAgIElTTzg4NTktMSByZXByZXNlbnRhdGlvbgpvIExBTkctNjU5OiAgRW50aXR5QXJyYXlzIHR5cG86IHsiXHUyMTIyIiwgIiZtaW51czsifSwgLy8gbWludXMgc2lnbiwgVSsyMjEyCiAgICAgICAgICAgICBJU090ZWNoCm8gTEFORy02NjogICBTdHJpbmdFc2NhcGVyLmVzY2FwZVhtbCgpIGVzY2FwZXMgY2hhcmFjdGVycyA+IDB4N2YuCm8gTEFORy02NjI6ICBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMubWF0aC5GcmFjdGlvbiBkb2VzIG5vdCByZWR1Y2UKICAgICAgICAgICAgIChJbnRlZ2VyLk1JTl9WQUxVRSwgMl5rKQpvIExBTkctNjYzOiAgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLm1hdGguRnJhY3Rpb24gZG9lcyBub3QgYWx3YXlzIHN1Y2NlZWQgaW4KICAgICAgICAgICAgIG11bHRpcGx5QnkgYW5kIGRpdmlkZUJ5Cm8gTEFORy02NjQ6ICBOdW1iZXJVdGlscy5pc051bWJlcihTdHJpbmcpIGlzIG5vdCByaWdodCB3aGVuIHRoZSBTdHJpbmcgaXMKICAgICAgICAgICAgICIxLjFMIgpvIExBTkctNjcyOiAgRG9jIGJ1ZyBpbiBEYXRlVXRpbHMjY2VpbGluZwpvIExBTkctNjc3OiAgRGF0ZVV0aWxzLmlzU2FtZUxvY2FsVGltZSBjb21wYXJlcyB1c2luZyAxMiBob3VyIGNsb2NrIGFuZCBub3QKICAgICAgICAgICAgIDI0IGhvdXIKbyBMQU5HLTY4NTogIEVxdWFsc0J1aWxkZXIgc3luY2hyb25pemVzIG9uIEhhc2hDb2RlQnVpbGRlci4KbyBMQU5HLTcwMzogIFN0cmluZ1V0aWxzLmpvaW4gdGhyb3dzIE5QRSB3aGVuIHRvU3RyaW5nIHJldHVybnMgbnVsbCBmb3Igb25lIG9mCiAgICAgICAgICAgICBvYmplY3RzIGluIGNvbGxlY3Rpb24KbyBMQU5HLTcxMDogIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gd2hlbiBjYWxsaW5nIHVuZXNjYXBlSHRtbDQoIiYjMDMiKQpvIExBTkctNzE0OiAgU3RyaW5nVXRpbHMgZG9jL2NvbW1lbnQgc3BlbGxpbmcgZml4ZXMuCm8gTEFORy03MTU6ICBDaGFyU2V0VXRpbHMuc3F1ZWV6ZSgpIHNwZWVkdXAuCm8gTEFORy03MTY6ICBzd2FwQ2FzZSBhbmQgKmNhcGl0YWxpemUgc3BlZWR1cHMuCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvbGFuZy9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQ29tbW9ucyBMYW5nLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bwpzdWJtaXQgYnVnIHJlcG9ydHMsIHBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSAKQXBhY2hlIENvbW1vbnMgTGFuZyB3ZWJzaXRlOgoKaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9sYW5nLwoKSGF2ZSBmdW4hCi1BcGFjaGUgQ29tbW9ucyBMYW5nIHRlYW0KCg==