MTk5Ny0xMi0xOSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQHByb2ZpdHByZXNzLmNvbT4KCgkqIGx0bWFpbi5pbjogRG9uJ3QgZm9yZ2V0IHRvIHF1b3RlIHRoZSBDRFBBVEggc3Vic3RpdHV0aW9uLiAgRnJvbQoJVG9yIExpbGxxdmlzdC4KCjE5OTctMTItMTggIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBwcm9maXRwcmVzcy5jb20+CgoJKiBsdGNvbmZpZy5pbiwgbHRtYWluLmluIChDRFBBVEgpOiBVbnNldCB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlCglzbyB0aGF0IEhQLVVYIHNoZWxscywgYXQgbGVhc3QsIGRvbid0IHByaW50IG91dCB0aGUgZGlyZWN0b3J5IG5hbWUKCWFmdGVyIGEgYGNkJyBjb21tYW5kLiAgRnJvbSBUb3IgTGlsbHF2aXN0LgoKMTk5Ny0xMi0xMCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5vcmc+CgoJKiBkZW1vL01ha2VmaWxlLmFtIChoYXJkY29kZSk6IENoYW5nZSBhIGJ1bmNoIG9mIHJlZmVyZW5jZXMgdG8KCWAkKExJQlMpJyB0byBgLWxtJywgc2luY2Ugd2Ugbm8gbG9uZ2VyIHB1dCAtbG0gaW4gTElCUy4KCgkqIGRlbW8vY29uZmlndXJlLmluOiBEZWxldGUgdGhlIHRlc3QgZm9yIGxpYm0sIHNpbmNlIGl0IGlzCglzdGFuZGFyZCBvbiBldmVyeSBzeXN0ZW0uCgoJKiBkZW1vL01ha2VmaWxlLmFtIChsaWJoZWxsb19sYV9MREZMQUdTKTogQ2hhbmdlIHRvIGluY2x1ZGUgLWxtLAoJaW4gYWNjb3JkYW5jZSB3aXRoIG5ldyBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY3kgY29kZS4KCgkqIGx0bWFpbi5pbiAoZGVwZW5kZW5jeV9saWJzKTogQWRkZWQgdG8gaGVscCBwZW9wbGUgbGluayBwcm9ncmFtcwoJd2l0aG91dCBoYXZpbmcgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzLgoKCSogbHRjb25maWcuaW4gKENPTExFQ1RfTkFNRVMpOiBPb3BzLi4uIEkgZm9yZ290IHRvIGFwcGx5IHRoZSBBSVggMwoJcmVzdHJpY3Rpb24gdG8gdGhlIGdlbmVyYXRlZCBsaWJ0b29sIHNjcmlwdC4gIFJlcG9ydGVkIGJ5IFN0ZWZhbgoJV2VzdGVyZmVsZC4KCjE5OTctMTItMDUgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUub3JnPgoKCSogbHRjb25maWcuaW4gKHRoaXNkaXIpOiBRdW90ZSAkZWNobyBpbiB0aGUgZ2VuZXJhdGVkIGxpYnRvb2wKCXNjcmlwdCBmb3IgSFAtVVguICBGcm9tIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyLgoKCSogbHRtYWluLmluIChsaW5rKTogUmVjb2duaXplIHRoZSBgLnMnIHN1ZmZpeC4gIEZyb20gTWFya3VzCglGLlguSi4gT2Jlcmh1bWVyLgoKCSogbHRjb25maWcuaW4gKGxpbmtfc3RhdGljX2ZsYWcpOiBEb24ndCBxdW90ZSAke3dsfSBvbiBIUC1VWAoJYmVjYXVzZSBsaW5rX3N0YXRpY19mbGFnIGlzIG5ldmVyIGV2YWxlZC4gIEZyb20gRXJpYyBCYWNrdXMuCgoJKiB0ZXN0cy9zdWZmaXgudGVzdCAoZXh0ZW5zaW9ucyk6IFJlY29nbml6ZSBgLnMnLiAgRnJvbSBNYXJrdXMKCUYuWC5KLiBPYmVyaHVtZXIuCgoxOTk3LTEyLTAxICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251Lm9yZz4KCgkqIGRlbW8vTWFrZWZpbGUuYW0gKGhlbGxkbF9ERVBFTkRFTkNJRVMpOiBBZGQgYGxpYmhlbGxvLmxhJyB0byBvdXIKCWRlcGVuZGVuY2llcyBzbyB0aGF0IHBhcmFsbGVsIGJ1aWxkcyB3b3JrIGNvcnJlY3RseS4gIEZyb20gSmltCglNZXllcmluZy4KCgkqIE1ha2VmaWxlLmFtICgkKHNyY2RpcikvbHRjb25maWcsICQoc3JjZGlyKS9sdG1haW4uc2gpOiBSZXdyaXRlCgl0aGVzZSBydWxlcyBzbyB0aGF0IHRoZXkgYXJlIHBhcmFsbGVsaXphYmxlLiAgUmVwb3J0ZWQgYnkgSmltCglNZXllcmluZy4KCgkqIGx0Y29uZmlnLmluIChsdGVjaG8pOiBXZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgdG8gcXVvdGUgdGhlCglgZWNobycgdmFyaWFibGUgaXRzZWxmLiAgRnJvbSBBbGV4YW5kcmUgT2xpdmEuCgoxOTk3LTExLTI5ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251Lm9yZz4KCgkqIGx0Y29uZmlnLmluIChDT0xMRUNUX05BTUVTKTogRW5hYmxlIHRoaXMgd29ya2Fyb3VuZCBmb3IgYSBicm9rZW4KCWNvbGxlY3QyIG9ubHkgb24gQUlYIDMuICBUaGlzIGF2b2lkcyBwcm9ibGVtcyBvbiBvdGhlciBBSVgKCXZlcnNpb25zLiAgUmVwb3J0ZWQgYnkgU3RlZmFuIFdlc3RlcmZlbGQuCgoJKiBsdG1haW4uaW4sIGx0Y29uZmlnLmluIChmaW5pc2hfZXZhbCk6IFZhcmlhYmxlIGxpa2UgZmluaXNoX2NtZHMsCglleGNlcHQgaXQgaXMgYSBzaW5nbGUgY29tbWFuZCB3aGljaCBpcyBldmFsZWQsIGFuZCBub3Qgc2hvd24uCgoJKiBsdGNvbmZpZy5pbjogUG9ydCB0byBBbWlnYU9TLiAgRnJvbSBKb29wIHZhbiBkZSBXZWdlLgoKCSogbHRtYWluLmluIChlY2hvKTogRGVsZXRlIHByZWFtYmxlIHRvIGNoZWNrIGZvciBhIHdvcmtpbmcgZWNobywKCXNpbmNlIHdlIGp1c3QgdXNlIHRoZSBvbmUgaW5jbHVkZWQgaW4gdGhlIGdlbmVyYXRlZCBsaWJ0b29sLgoKCSogbHRjb25maWcuaW4gKGVjaG8pOiBJbmNsdWRlIHRoaXMgZGVmaW5pdGlvbiBpbiB0aGUgZ2VuZXJhdGVkCglsaWJ0b29sIHNjcmlwdC4KCjE5OTctMTEtMjggIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUub3JnPgoKCSogbHRjb25maWcuaW4sIGxpYnRvb2wubTQgKE5NKTogQWRkIC91c3IvY2NzL2JpbiB0byB0aGUgUEFUSAoJYmVmb3JlIGNoZWNraW5nLiAgRnJvbSBLYXZlaCBSLiBHaGF6aS4KCShOTSk6IERlbGV0ZSBhbiBleHRyYW5lb3VzIGVncmVwIGZyb20gbHRjb25maWcuCgoJKiBsdGNvbmZpZy5pbiAoZmluaXNoX2NtZHMpOiBDaGFuZ2UgYmFjayB0byB1c2luZyBgbGRjb25maWcgLW4nLgoJVGhpcyBtYWtlcyBMaW51eCBiZWhhdmUgbGlrZSBvdGhlciBzeXN0ZW1zLCB3aGljaCBpcyBtb3JlIGluIGxpbmUKCXdpdGggd2hhdCBsaWJ0b29sIG5lZWRzLgoKMTk5Ny0xMS0yNyAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5vcmc+CgoJKiBsdG1haW4uaW46IENoYW5nZSBhIHdob2xlIGJ1bmNoIG9mIGBwcm9nbmFtZScgdmFyaWFibGVzIHRvCglgbW9kZW5hbWUnLiAgVGhpcyBpcyBmb3IgY2xhcml0eSwgYW5kIHRvIGZpeCBhIHRpbnkgdHlwbyBpbiBmaW5pc2gKCW1vZGUuCgoJKiBsaWJ0b29sLnNwZWMgKE5hbWUsIFZlcnNpb24pOiBEaXR0by4KCgkqIGNvbmZpZ3VyZS5pbiAoQU1fSU5JVF9BVVRPTUFLRSk6IFVzZSBQUkNTIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUKCXRoZSBwcm9wZXIgcGFja2FnZSBuYW1lIGFuZCB2ZXJzaW9uIG51bWJlci4KCgkqIGx0Y29uZmlnLmluIChnbnVfbGRfYWN0c19uYXRpdmUpOiBUcmVhdCBHTlUgbGQgbGlrZSB0aGUgbmF0aXZlCglsaW5rZXIgb24gU3VuT1MgNC54LiAgU3VnZ2VzdGVkIGJ5IEFsZXhhbmRyZSBPbGl2YS4KCShkZXBsaWJzKTogQ2hhbmdlIHRoZSBkZWZhdWx0cyBhbGwgb3Zlciwgc2luY2UgbW9zdCBzeXN0ZW1zIGNhbm5vdAoJaGFuZGxlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzLgoKCSogbGlidG9vbC5tNCwgbHRjb25maWcuaW4gKE5NKTogT25seSBsb29rIGF0IHRoZSBmaXJzdCBsaW5lIG9mIHRoZQoJb3V0cHV0IGZyb20gTk0gd2hlbiBkZXRlcm1pbmluZyB3aGV0aGVyIGl0IHN1cHBvcnRzIGEgY29tbWFuZCBsaW5lCglvcHRpb24uICBUaGlzIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBPU2VzIHdoaWNoIGlnbm9yZQoJaW52YWxpZCBmbGFncywgbGlrZSBIUC1VWCwgd2hpY2ggcHJpbnRzIGBubTogdW5rbm93biBvcHRpb24gIkIiCglpZ25vcmVkJy4gIFJlcG9ydGVkIGJ5IEthdmVoIFIuIEdoYXppLgoKCSogbHRjb25maWcuaW4gKGZpbmlzaF9jbWRzKTogT24gTGludXgsIHVwZGF0ZSBsZC5zby5jYWNoZSBieQoJcmVtb3ZpbmcgdGhlIGAtbicgZmxhZyBmcm9tIGxkY29uZmlnLiAgU3VnZ2VzdGVkIGJ5IEtlbm5ldGgKCUFsYmFub3dza2kuCgoJKiBNYWtlZmlsZS5hbSAobWFpbnRhaW5lci1jaGVja2luLCBtYWludGFpbmVyLXJlbGVhc2UpOiBOZXcKCWNvbW1hbmRzIHRvIHJlYXAgdGhlIGZ1bGwgYmVuZWZpdCBvZiB1c2luZyBQUkNTIHRvIG1haW50YWluCglsaWJ0b29sIHZlcnNpb24gbnVtYmVycy4KCgkqIGx0Y29uZmlnLmluLCBsdG1haW4uaW4gKGdsb2JhbF9zeW1ib2xfcGlwZSk6IEV4cGxpY2l0bHkgY2FzdCBhbGwKCWFkZHJlc3NlcyB0byBfX3B0cl90LiAgVGhpcyBmaXhlcyBhIGJ1ZyBkdWUgdG8gYSBzdHJpY3QgSVJJWAoJY29tcGlsZXIuICBTdWdnZXN0ZWQgYnkgS2F2ZWggUi4gR2hhemkuCgoxOTk3LTExLTIzICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251Lm9yZz4KCgkqIGx0bWFpbi5pbiAoZWNobyk6IEZvciBhZXN0aGV0aWNzLCBhdm9pZCB1c2luZyBgJGVjaG8nIHdoZW4KCWBlY2hvJyB3aWxsIGRvICpleGFjdGx5KiB0aGUgc2FtZSB0aGluZy4gIFRoaXMgcHJldmVudHMgdWdseQoJYHByaW50ZiAlc1xuIHRpbWVzdGFtcCA+IHNvbWUubG8nIGNvbW1hbmRzIGZyb20gYXBwZWFyaW5nIGluIHRoZQoJbGlidG9vbCBvdXRwdXQuCgkobGluayk6IERlbGV0ZSB0aGUgYC1hbGxvdy11bmRlZmluZWQnIGZsYWcgYmVjYXVzZSBpdCBpcyBub3cgdGhlCglkZWZhdWx0LiAgTWFrZSBgLW5vLXVuZGVmaW5lZCcgaW4gb3JkZXIgZm9yIHBlb3BsZSB0byBkZWNsYXJlIHRoYXQKCWEgbGlicmFyeSBpcyBlbnRpcmVseSBzZWxmLWNvbnRhaW5lZC4gIFRoaXMgcHJldmVudHMgbWFpbnRhaW5lcnMKCWZyb20gYWNjaWRlbnRhbGx5IGNyZWF0aW5nIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCB3b24ndCB3b3JrIG9uCglBSVguICBSZXBvcnRlZCBieSBTdGVmYW4gV2VzdGVyZmVsZCBhbmQgRGFubnkgQmFja3guCgoJKiBsdGNvbmZpZy5pbiAoZWNobyk6IFVzZSBhbiBlY2hvIHZhcmlhYmxlLCBqdXN0IGFzIGluIGx0bWFpbi5pbiwKCWJlY2F1c2Ugd2UgbmVlZCBpdCBmb3IgcXVvdGluZyBzdWJzdGl0dXRpb25zLiAgRm9yIG1vc3Qgb2YgdGhlCglzY3JpcHQsIHRob3VnaCwgdXNlIHRoZSBkZWZhdWx0IGVjaG8sIGp1c3QgbGlrZSBBdXRvY29uZiBkb2VzLgoJV2l0aG91dCB0aGlzIHBhdGNoLCBjaGFyYWN0ZXIgXDAwMSBlbmRzIHVwIGluIGdsb2JhbF9zeW1ib2xfcGlwZS4KCVJlcG9ydGVkIGJ5IExhcnMgSGVja2luZyBhbmQgSvxyZ2VuIEZsdWsuCgoJKiBsdG1haW4uaW4gKGVjaG8pOiBTZXQgZGVmYXVsdCB0byBgZWNobz1lY2hvJy4gIE9vb3BzLiAgVGhhdCdzCgl3aGF0IHlvdSBnZXQgZm9yIHRlc3Rpbmcgb2JzY3VyZSBjb2RlIHBhdGhzIGFuZCBmb3JnZXR0aW5nIHRvCglyZXZlcnQgdG8gdGhlIG9yaWdpbmFsIHZlcnNpb24uICBSZXBvcnRlZCBieSBEYW5ueSBCYWNreC4KCjE5OTctMTEtMTQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUub3JnPgoKCSogbHRjb25maWcuaW4gKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMpOiBTZXQgdG8gYC1SJyBmb3IgRnJlZUJTRAoJMi4yLiAgRnJvbSBTZWFuIEtlbGx5LgoJKHBvc3R1bmluc3RhbGxfY21kcywgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyk6IENvbW1hbmRzIHRvIHJ1bgoJYWZ0ZXIgdW5pbnN0YWxsIG1vZGUgZGVsZXRlcyB0aGUgbGlicmFyaWVzLiAgU3VnZ2VzdGVkIGJ5IEpvb3AgdmFuCglkZSBXZWdlLgoJKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyk6IE9uIEhQLVVYLCBhZGQgdGhlIGAke3dsfS1FJwoJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLiAgUmVwb3J0ZWQgYnkgTWF0dGhpYXMgSG9lbHplci4KCjE5OTctMTEtMTEgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUub3JnPgoKCSogbHRjb25maWcuaW4sIGx0bWFpbi5pbiAoc2VkX3F1b3RlX3N1YnN0KTogT29wcy4gIFdlIGZvcmdvdCB0bwoJcXVvdGUgYmFja3RpY2tzLiAgUmVwb3J0ZWQgYnkgSm9vcCB2YW4gZGUgV2VnZS4KCgkqIHRlc3RzL3F1b3RlLnRlc3Q6IEFkZCBiYWNrdGlja3MgdG8gdGhlIGJhY2tzbGFzaGlmeSB0ZXN0LgoKMTk5Ny0xMS0wOSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5vcmc+CgoJKiBsdGNvbmZpZy5pbiAoc3ltY29kZSk6IE9uIElSSVgsIGRvbid0IGV4dHJhY3QgdW5kZWZpbmVkCglzeW1ib2xzLiAgV2hlbiBhIGZ1bmN0aW9uIGlzIGlubGluZWQgYnkgRysrLCByZWZlcmVuY2VzIHRvIGl0IGFyZQoJc3RpbGwgbWFya2VkIGFzIHVuZGVmaW5lZCBpbiB0aGUgb2JqZWN0IGZpbGUuICBUaGlzIG1lYW5zIHRoYXQgb3VyCglzeW1ib2wgZmlsZSBjYXVzZXMgdW5kZWZpbmVkIHJlZmVyZW5jZXMsIGJlY2F1c2UgdGhlcmUgYXJlCglhY3R1YWxseSBubyBtYXRjaGluZyBnbG9iYWwgc3ltYm9scy4gIFJlcG9ydGVkIGJ5IFBhdWwgS2VuZGFsbC4KCjE5OTctMTEtMDggIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUub3JnPgoKCSogbHRjb25maWcuaW46IERvbid0IGZvcmdldCB0byByZWRpcmVjdCB0aGUgQ09MTEVDVF9OQU1FUyBsaWJ0b29sCglzY3JpcHQgZnJhZ21lbnQgdG8gdGhlIGdlbmVyYXRlZCBsaWJ0b29sLCByYXRoZXIgdGhhbiB0byBzdGRvdXQuCgoxOTk3LTExLTA3ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251Lm9yZz4KCgkqIGxpYnRvb2wubTQgKExEKTogQWRkIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHRlc3QgdG8gZGV0ZXJtaW5lIHRoZQoJQUJJIGZsYWcgb24gSVJJWCA2LiAgU3VnZ2VzdGVkIGJ5IExhcnMgSGVja2luZyBhbmQgSWFuIExhbmNlCglUYXlsb3IuCgoJKiBsdGNvbmZpZy5pbiwgbHRtYWluLmluIChDT0xMRUNUX05BTUVTKTogT25seSBleHBvcnQgdGhpcwoJdmFyaWFibGUgaWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgQUlYLiAgT3RoZXJ3aXNlLCB3ZSB0aWNrbGUgYSBnKysKCWJ1ZyB1bmRlciBJUklYLiAgRnJvbSBQYXVsIEtlbmRhbGwuCgoJKiBDaGFuZ2UgYnVnIHJlcG9ydGluZyBhZGRyZXNzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KCgkqIGx0Y29uZmlnLmluIChhbGxvd191bmRlZmluZWRfZmxhZyk6IE9TRi8xIDMueCBhbHNvIHJlcXVpcmVzIGEKCXdpbGRjYXJkIGFyZ3VtZW50IHRvIGAtZXhwZWN0X3VucmVzb2x2ZWQnLiAgRnJvbSBTdGVwaGFuIEt1bG93LgoKMTk5Ny0xMS0wNiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5vcmc+CgoJKiBsdG1haW4uaW4gKGxpbmspOiBVc2UgbGlibmFtZV9zcGVjLgoKCSogbHRjb25maWcuaW4gKHBpY19mbGFnKTogU29tZWhvdywgdGhlIEhQLVVYIHBpY19mbGFnIChgK1onKSB3YXMKCWRyb3BwZWQgYmV0d2VlbiBsaWJ0b29sLTEuMCBhbmQgbm93LiAgQWRkIGl0IGJhY2sgaW4uICBSZXBvcnRlZCBieQoJQWtpbSBEZW1haWxsZS4KCUludGVncmF0ZWQgbW9yZSBwYXRjaGVzIGZvciBPUy8yLiAgRnJvbSBKZWZmIEZyZWVkbWFuLgoJKGxpYm5hbWVfc3BlYyk6IE5ldyB2YXJpYWJsZSBmb3IgT1NlcyB0aGF0IGRvbid0IHJlcXVpcmUgdGhlaXIKCWxpYnJhcmllcyB0byBsb29rIGxpa2UgYGxpYk5BTUUuYScuCgoJKiBsdG1haW4uaW4gKGxpbmspOiBPbmx5IHVzZSBnbG9iYWxfc3ltYm9sX3BpcGUgaWYgaXQgaGFzIGJlZW4KCWRlZmluZWQuICBGcm9tIFN0ZXBoYW4gS3Vsb3cuCgoJKiBsdGNvbmZpZy5pbiAoZ2xvYmFsX3N5bWJvbF9waXBlKTogUHJvdGVjdCBDIGZyYWdtZW50IHVuZGVyIEMrKwoJY29tcGlsZXJzLiAgRnJvbSBTdGVwaGFuIEt1bG93LgoKCSogTWFrZWZpbGUuYW0gKCQoc3JjZGlyKS9hY2luY2x1ZGUubTQsCgkkKHNyY2RpcikvZGVtby9hY2luY2x1ZGUubTQpOiBDaGFuZ2UgcnVsZXMgdG8gdXNlIExOX1Mgc28gdGhhdAoJdGhleSBjYW4gYmUgcnVuIG9uIGFueSBzeXN0ZW0uCgoJKiBsdGNvbmZpZy5pbiAoYXJjaGl2ZV9jbWRzKTogRm9yIE5ldEJTRCwgZG9uJ3QgaW5jbHVkZSBkZXBsaWJzLgoJRnJvbSBEaWV0ZXIgQmFyb24uCgoJKiBsdG1haW4uaW4gKG1rZGlyKTogQ2hlY2sgdGhhdCB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QgYmVmb3JlCgl3ZSBleGl0IHdpdGggZXJyb3IsIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHJhY2VzIGR1cmluZyBwYXJhbGxlbAoJYnVpbGRzLiAgRnJvbSBILkouIEx1LgoJKGZic2RfaGlkZW91c19zaF9idWcpOiBBcHBhcmVudGx5LCBzb21lIEZyZWVCU0QgL2Jpbi9zaCdzIGhhdmUgYQoJYnVnIHRoYXQgd2lsbCBlbXB0eSBiYXNlX2NvbXBpbGUgdW5sZXNzIHdlIGRvIHRoaXMgZHVtbXkKCWFzc2lnbm1lbnQuICBGcm9tIE1hcmMgdmFuIEtlbXBlbi4KCjE5OTctMTAtMjIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUub3JnPgoKCSogbGlidG9vbC5tNCAobGlidG9vbF9zaGFyZWQsIGxpYnRvb2xfc3RhdGljKTogRml4ZWQgbG9naWMgZXJyb3IKCXRvIHJlZW5hYmxlIG92ZXJyaWRlIG9mIGxpYnRvb2wncyBkZWZhdWx0cyBieSBzZXR0aW5nCgllbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaW4gY29uZmlndXJlLmluLiAgUmVwb3J0ZWQgYnkgVG9tCglUcm9tZXkgYW5kIFN0ZXBoYW4gS3Vsb3cuCgoJKiBsdG1haW4uaW4gKGxpbmspOiBBZGQgZXhwbGljaXQgc3VwcG9ydCBmb3IgY29tcGlsZXIgb3B0aW9ucyB0aGF0CgliZWdpbiB3aXRoIGArJy4gIFJlcG9ydGVkIGJ5IEF1YmVydCBQaWVycmUuCgoxOTk3LTEwLTIwICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251Lm9yZz4KCgkqIGx0bWFpbi5pbjogU2lsbHkgbWUuICBDaGFuZ2UgYSBidW5jaCBvZiBvY2N1cmFuY2VzIG9mICIqICRkaXIgKiIKCWludG8gKiIgJGRpciAiKi4KCgkqIGx0Y29uZmlnLmluIChwaWNfZmxhZyk6IFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgQUlYLiAgRnJvbSBNYXJrCglLZXR0ZW5pcy4gIEl0IGlzIGFsc28gdGhlIGRlZmF1bHQgZm9yIE9TRi8xLgoKCSogZGVtby9NYWtlZmlsZS5hbSAob2JqZGlyKTogUXVvdGUgZG91YmxlLXF1b3Rlcy4gIEZyb20gTWFyawoJS2V0dGVuaXMuCgoJKiBsdGNvbmZpZy5pbiAoZ2xvYmFsX3N5bWJvbF9waXBlKTogVGhpcyB2YXJpYWJsZSBpcyBub3QKCWRvdWJsZS1ldmFsZWQsIHNvIGl0IHNob3VsZCBub3QgYmUgZG91YmxlIHF1b3RlZC4gIEZyb20gTWFyawoJS2V0dGVuaXMuCgoxOTk3LTEwLTE5ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251Lm9yZz4KCgkqIGx0Y29uZmlnLmluIChMRCk6IFNhbWUgYXMgYmVsb3cuCgoJKiBsaWJ0b29sLm00IChMRCk6IFNldCBMRCBpZiB3ZSBkaXNjb3ZlciBhbiBhYnNvbHV0ZSBwYXRoIHRvIEdOVQoJbGQuICBUaGlzIHByZXZlbnRzIGJyZWFrYWdlIHdoZW4gYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkJyByZXR1cm5zCglhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4gIFJlcG9ydGVkIGJ5IFVscmljaCBEcmVwcGVyLgoKCSogbHRjb25maWcuaW46IFBvcnQgdG8gT1MvMiB1c2luZyBFTVguICBGcm9tIEplZmYgRnJlZWRtYW4uCgoJKiBsdG1haW4uaW4gKGxpbmspOiBVc2Ugb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcy4KCgkqIGx0Y29uZmlnLmluIChvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzKTogTmV3IHZhcmlhYmxlIHRvCglzdXBwb3J0IERMTCBsaWJyYXJpZXMuCgoJKiBsdG1haW4uaW4gKGxpbmspOiBPbmx5IGBldmFsJyBleHBvcnRfZHluYW1pY19mbGFnX3NwZWMgaWYgaXQgaXMKCW5vdCBlbXB0eS4gIFJlcG9ydGVkIGJ5IFN0ZXBoYW4gS3Vsb3cuCgoxOTk3LTEwLTE4ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251Lm9yZz4KCgkqIGx0Y29uZmlnLmluIChvYmpkaXIpOiBVc2UgdGhlIC5saWJzIGRpcmVjdG9yeSBvbiBhbGwgc3lzdGVtcyBmb3IKCXdoaWNoIHRoYXQgbmFtZSBpcyB2YWxpZCwgYW5kIF9saWJzIG9uIHRoZSBvdGhlcnMgKGxpa2UgTVMtRE9TKS4KCVN1Z2dlc3RlZCBieSBKdWVyZ2VuIEVyaGFyZC4KCjE5OTctMTAtMTQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUub3JnPgoKCSogbHRtYWluLmluIChsaW5rKTogQWRkZWQgYSBiaXQgbW9yZSBpbnRlci1sYW5ndWFnZSBzdXBwb3J0IHRvIHRoZQoJc3ltYm9sIGZpbGUgZ2VuZXJhdGlvbiBwcm9jZXNzLgoJSW5zdGVhZCBvZiBjb21wbGFpbmluZyBhYm91dCB1bnJlY29nbml6ZWQgYXJndW1lbnQgc3VmZmljZXMsIHBhc3MKCXRoZW0gdG8gdGhlIGxpbmtlci4gIFRoaXMgcHJldmVudHMgbGlidG9vbCBmcm9tIGJhcmZpbmcgb24KCW1hbmRhdG9yeSBhcmd1bWVudHMgdG8gbGlua2VyIGZsYWdzLiAgUmVwb3J0ZWQgYnkgTWljaGFlbAoJVGllbWFubi4KCjE5OTctMTAtMDkgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5pbiAobGluayk6IENoYW5nZSB0aGUgd3JhcHBlciBzY3JpcHQgdG8gZm9sbG93IHN5bWxpbmtzCglpbiBvcmRlciB0byBmaW5kIHRoaXNkaXIuICBUaGlzIHNob3VsZCBwdXQgdGhlIGZpbmFsIG5haWwgaW4gdGhlCgljb2ZmaW4gZm9yIHByb2JsZW1zIHdpdGggd3JhcHBlciBzY3JpcHRzLiAgRnJvbSBJYW4gTGFuY2UgVGF5bG9yLgoKMTk5Ny0xMC0wNyAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRtYWluLmluOiBDaGFuZ2UgYSBmZXcgYCRlY2hvJyBjb21tYW5kcyBpbnRvIGAkc2hvdycgdG8gbWFrZQoJLS1zaWxlbnQgbW9kZSBiZWhhdmUgYXMgYWR2ZXJ0aXNlZC4KCgkqIGx0Y29uZmlnLmluIChhbGxvd191bmRlZmluZWRfZmxhZyk6IE9uIE9TRi8xIDQueCwgdXNlCglgLWV4cGVjdF91bnJlc29sdmVkIFwqJy4gIEZyb20gQ2hyaXN0aWFuIE1vbmRydXAuCgoJKiBsdG1haW4uaW4gKGluc3RhbGwpOiBDaGFuZ2UgaW5zdGFsbCBtb2RlIHRvIGFsbG93IGEgc3BlY2lmaWVkCgkvYmluL3NoIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGluc3RhbGxfcHJvZy4gIEFsc28sCglzcGVjaWZ5IHRoZSBzaGVsbCB0byBydW4gd2hlbiBpbnZva2luZyBsaWJ0b29sIHJlY3Vyc2l2ZWx5IGZvcgoJZmluaXNoIG1vZGUuICBGcm9tIENocmlzIFByb3Zlbnphbm8uCgoJKiBsaWJ0b29sLm00IChMSUJUT09MKTogQ2hhbmdlIGRlZmluaXRpb24gdG8gaW5jbHVkZSAkKFNIRUxMKS4KCUZyb20gQ2hyaXMgUHJvdmVuemFuby4KCgkqIGx0Y29uZmlnLmluOiBQb3J0IHRvIFVUUyA0LnguICBGcm9tIEFsaXN0YWlyIENyb29rcy4KCgkqIGRlbW8vTWFrZWZpbGUuYW0gKGhjLWxpYmZsYWcpOiBBZGQgcnVsZXMgdG8gbWFrZSB0aGlzIGJpbmFyeSBmb3IKCWhhcmRjb2RlLnRlc3QuCgoJKiB0ZXN0cy9oYXJkY29kZS50ZXN0IChoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjKTogQ2hlY2sgdGhlIGhhcmRjb2RpbmcKCXByb3BlcnRpZXMgb2YgdGhlIGZsYWdfc3BlYywgdG9vLgoKMTk5Ny0wOS0yNCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW4gKExEKTogQXMgd2l0aCBsaWJ0b29sLm00LCBkb24ndCBvdmVycmlkZSBMRC4KCURvIGEgd2hvbGUgYnVuY2ggb2YgYWNfdCBxdW90aW5nLgoKMTk5Ny0wOS0yNCAgSWFuIExhbmNlIFRheWxvciAgPGlhbkBjeWdudXMuY29tPgoKCSogbGlidG9vbC5tNCAoQU1fUFJPR19MRCk6IERvbid0IG92ZXJyaWRlIExEIGluIHRoZSBlbnZpcm9ubWVudC4KCjE5OTctMDktMjEgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGxpYnRvb2wubTQsIGx0Y29uZmlnLmluIChOTSk6IEFyZ3VtZW50cyB0byB0aGUgZm9yIGxvb3AgbXVzdCBiZQoJd2hpdGVzcGFjZSBzZXBhcmF0ZWQuICBUaGlzIGZpeGVzIGEgYnVnIHVuZGVyIEZyZWVCU0QncyAvYmluL3NoLgoJRnJvbSBHZW9yZ2UgU2NvdHQuCgoJKiB0ZXN0cy9kZWZzLCB0ZXN0cy9NYWtlZmlsZS5hbSAoY2xlYW4tbG9jYWwpOiBDaGFuZ2UgPWluc3QgdG8KCV9pbnN0IHRvIGZpeCBwb3J0YWJpbGl0eSBvbiBNUy1ET1MuICBGcm9tIFJvYmVydCBIb2VobmUuCgoxOTk3LTA5LTIwICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uaW4gKGRlcGxpYnMpOiBXaGVuIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFsd2F5cyBhZGQKCS1sYyB0byBkZXBsaWJzLiAgUmVwb3J0ZWQgYnkgQW5kcmVhcyBKZWxsaW5naGF1cy4KCjE5OTctMDktMTUgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluLCBsdG1haW4uaW4gKENPTExFQ1RfTkFNRVMpOiBJZiB0aGUgQ09MTEVDVF9OQU1FUwoJZW52aXJvbm1lbnQgdmFyaWFibGUgaGFzIG5vdCBiZWVuIHNldCwgc2V0IGl0IHRvIGVtcHR5LiAgVGhpcwoJYXBwYXJlbnRseSBmaXhlcyB0aGUgQUlYIGJ1ZyB3aXRoIEdDQydzIGNvbGxlY3QyLiAgUmVwb3J0ZWQgYnkKCU1hcmsgS2V0dGVuaXMuCgoJKiBkZW1vL01ha2VmaWxlLmFtLCBsdG1haW4uaW4sIHRlc3RzL2hhcmRjb2RlLnRlc3QgKG9iamRpcik6CglDaGFuZ2VkIG9iamRpciB2YXJpYWJsZSAubGlicyB0byBfbGlicy4gIFRoaXMgaXMgYW5vdGhlciBNUy1ET1MKCXBvcnRhYmlsaXR5IGZpeC4gIFN1Z2dlc3RlZCBieSBSb2JlcnQgSG9laG5lLgoKCSogdGVzdHMvaGFyZGNvZGUudGVzdCAob2JqZGlyKTogTmV3IHZhcmlhYmxlIHRvIHNpbXBsaWZ5IGNoYW5nZSBmcm9tCgkubGlicyB0byBfbGlicyAoTVMtRE9TIHBvcnRhYmlsaXR5IGZpeCkuCgoxOTk3LTA5LTEzICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbiwgbHRtYWluLmluIChoYXJkY29kZV9taW51c0wpOiBGaXggdHlwbyBieSByZW5hbWluZwoJaGFyZGNvZGVfbWludXNMIHRvIGhhcmRjb2RlX21pbnVzX0wuICBBbHNvIGFkZCBGcmVlQlNECgloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLiBGcm9tIFBhdWwgVHJhaW5hLgoKCSogbHRtYWluLmluIChsaW5rKTogSG9ub3VyIG11bHRpcGxlIGAtcnBhdGgnIGZsYWdzIHdoZW4gbGlua2luZwoJcHJvZ3JhbXMuICBTdWdnZXN0ZWQgYnkgQmVuZ3QgTWFydGVuc3Nvbi4KCVF1b3RlIGFwcGVhcmFuY2VzIG9mICRlY2hvIGluIHRoZSB3cmFwcGVyIHNjcmlwdC4gIEZyb20gQWxleGFuZHJlCglPbGl2YS4KCgkqIE1ha2VmaWxlLmFtLCBjb25maWd1cmUuaW4sIHRlc3RzL3RsaWJ0b29sOiBVc2UgbHRtYWluLmluIGluc3RlYWQKCW9mIGx0bWFpbi5zaC5pbi4KCgkqIGx0bWFpbi5pbjogUmVuYW1lIGx0bWFpbi5zaC5pbiB0byBsdG1haW4uaW4uICBUaGlzIGZpeGVzIGEKCXBvcnRhYmlsaXR5IHByb2JsZW0gKG9uIE1TLURPUywgb2YgYWxsIHBsYWNlcyEpLiAgRnJvbSBSb2JlcnQKCUhvZWhuZS4KCjE5OTctMDktMTEgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IERvIG5vdCB0cmFuc2Zvcm0gbGlidG9vbCBvYmplY3RzIHRvIHJlZ3VsYXIKCW9iamVjdHMgaWYgd2UgZGlkIG5vdCBidWlsZCBvbGQgbGlicy4gIFJlcG9ydGVkIGJ5IFRvbWFzIEhpbGxlci4KCjE5OTctMDktMDUgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGRlbW8vTWFrZWZpbGUuYW0gKGhlbGxfZGVidWdfTERGTEFHUyk6IENoYW5nZSBoZWxsLnN0YXRpYyB0bwoJaGVsbC5kZWJ1ZyBpbiBvcmRlciB0byByZWZsZWN0IHRoZSBuZXcgc3RhdGljIGxpbmtpbmcgc2VtYW50aWNzLgoKCSogbHRtYWluLnNoLmluIChsaW5rKTogQWRkIG5ldyBgLWFsbC1zdGF0aWMnIGZsYWcgdG8gcHJldmVudCBhbGwKCWR5bmFtaWMgbGlua2luZy4gIFRoZSBvbGQgYC1zdGF0aWMnIGZsYWcganVzdCBwcmV2ZW50cyBkeW5hbWljCglsaW5raW5nIGFnYWluc3QgbGlidG9vbCBsaWJyYXJpZXMuICBTdWdnZXN0ZWQgYnkgQmVuZ3QKCU1hcnRlbnNzb24uCgoJKiBsdGNvbmZpZy5pbiAod2l0aF9nbnVfbGQpOiBBZGQgYSB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZQoJYWN0dWFsbHkgdXNpbmcgR05VIGxkLiAgVGhpcyBmaXhlcyBhbiBpbmNvbnNpc3RlbmN5IHdoZW4gcnVubmluZwoJbHRjb25maWcgd2l0aG91dCB1c2luZyBsaWJ0b29sLm00LiAgUmVwb3J0ZWQgYnkgVWxyaWNoIERyZXBwZXIuCgkoZ2xvYmFsX3N5bWJvbF9waXBlKTogRGVsZXRlIHN5bWJvbHMgdGhhdCBhcmUgbm90IHZhbGlkIEMKCWlkZW50aWZpZXJzLiAgUmVwb3J0ZWQgYnkgSm9oYW4gRGFuaWVsc3NvbiBhbmQgQmVuZ3QgTWFydGVuc3Nvbi4KCgkqIHRlc3RzL2RlbW8tZXhlYy50ZXN0LCB0ZXN0cy9kZW1vLWluc3QudGVzdDogQ2hhbmdlIHJlZmVyZW5jZXMgZnJvbQoJaGVsbC5zdGF0aWMgdG8gaGVsbC5kZWJ1Zy4KCgkqIHRlc3RzL3F1b3RlLnRlc3QgKGVjaG8pOiBBZGQgdGhlIHNhbWUgRGlnaXRhbCBVbml4IGVjaG8gdGVzdCBmaXhlcyBhcwoJdGhlIG9uZXMgdG8gbHRtYWluLnNoLmluIGZyb20gVG9kZCBLb3Zlci4KCgkqIHRlc3RzL2lmLnRlc3QsIHRlc3RzL3Rlc3QtZS50ZXN0IChzY3JpcHRzKTogQWRkIC4uL2xpbmVubyB0bwoJdGhlIHNjcmlwdHMgd2UgY2hlY2suCgkqIHRlc3RzL2lmLnRlc3Q6IENoZWNrIGZvciBhY2NpZGVudGFsIHVzZSBvZiB0ZXN0IFgkc29tZXRoaW5nIHJhdGhlcgoJdGhhbiB0ZXN0ICJYJHNvbWV0aGluZyIuCgoxOTk3LTA5LTA0ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGVjaG8pOiBRdW90ZSBhbGwgdGhlIHVzZXMgb2YgYGVjaG8nIGluIGFsbCBldmFsCglzdGF0ZW1lbnRzLiAgUmVwb3J0ZWQgYnkgQmVuZ3QgTWFydGVuc3NvbiBhbmQgQWxleGFuZHJlIE9saXZhLgoJKGVjaG8pOiBOZWVkIHRvIHN1cnJvdW5kIHRlc3QgYXJncyB3aXRoIGRvdWJsZSBxdW90ZXMsIG9yIHRoZSBlY2hvCgl0ZXN0IGZhaWxzIG9uIERpZ2l0YWwgVW5peCA0LjAuICBGcm9tIFRvZGQgS292ZXIuCgoxOTk3LTA4LTI4ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGVjaG8pOiBDaGFuZ2UgdGVzdCB0byBvbmUgdGhhdCB1c2VzIHByaW50Zi4KCVRoaXMgd29ya3Mgb24gQUlYLCB3aGljaCBoYXMgdGhlIHNhbWUgcHJvYmxlbXMgdGhhdCBTb2xhcmlzIGRvZXMsCglidXQgbm8gd29ya2luZyBlY2hvIHByb2dyYW0uCgoJKiB0ZXN0cy9xdW90ZS50ZXN0IChlY2hvKTogQ2hhbmdlIHRlc3QgdG8gdmVyc2lvbiB0aGF0IHVzZXMgcHJpbnRmLgoJQmUgbGVzcyBzdHJpY3QgYWJvdXQgcmV0dXJuIHJlc3VsdHMuCgoxOTk3LTA4LTI3ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBNYWtlIHN1cmUgdGhhdCBjb21waWxlX2NvbW1hbmQgYW5kCglmaW5hbGl6ZV9jb21tYW5kIGFyZSBhbHdheXMgZXZhbGVkLiAgUXVvdGUgYW55IHVua25vd24gbGlua2VyCglmbGFncyB3ZSBuZWVkIHRvIHBhc3MgdGhyb3VnaC4KCShjb21waWxlKTogVXNlIHF1b3RpbmcgZm9yIGZsYWdzIHdlIHBhc3MuCgkoZWNobyk6IEkgaGF0ZSBTdW4hICBUaGUgL3Vzci9iaW4vZWNobyBvbiBTb2xhcmlzIGhhbmRsZXMKCWJhY2tzbGFzaCBzZXF1ZW5jZXMsIHdoaWNoIG1ha2VzIGl0IGltcG9zc2libGUgdG8gZG8gYmFja3NsYXNoCglxdW90aW5nIHVzaW5nIGVjaG8gYW5kIHNlZC4gIFNvLCB3ZSBzZWFyY2ggZm9yIGFuIGVjaG8gdGhhdCBvYmV5cwoJdGhlIGBlY2hvICdcdCdgID0gJ1x0JyBlcXVhbGl0eS4gIFRoZW4gd2UgdXNlIGAkZWNobycgZXZlcnl3aGVyZQoJaW4gbHRtYWluLnNoLgoJUHV0IHRhYnMgYmFjayBpbnRvIHRoZSAke0lGUz0JfSBzZXF1ZW5jZXMuICBFbWFjcyB1bnRhYmlmeSBpcwoJbGlidG9vbCBiYW5lLgoKCSogbHRjb25maWcuaW46IFF1b3RlIGFsbCB2YXJpYWJsZSB2YWx1ZXMgdGhhdCBtYXkgY29udGFpbgoJbWV0YWNoYXJhY3RlcnMgY3JlYXRpbmcgdGhlIGxpYnRvb2wgc2NyaXB0LiAgVGhpcyBwcm92aWRlcwoJY29tcGxldGUgcHJvdGVjdGlvbiwgc28gdGhhdCBldmVuIHNpbmdsZS1xdW90ZXMgbWF5IGFwcGVhciBpbnNpZGUKCWEgbGlidG9vbCB2YXJpYWJsZSB2YWx1ZS4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IFF1b3RlIGZpbmFsaXplX2NvbW1hbmQgYmVmb3JlIHB1dHRpbmcgaXQgaW4KCXRoZSB3cmFwcGVyIHNjcmlwdC4KCgkqIHRlc3RzL3F1b3RlLnRlc3QgKGVjaG8pOiBBZGQgdGhlIHRlc3QgZm9yIGEgbm9uLWJhY2tzbGFzaC1tYW5nbGluZwoJZWNoby4KCjE5OTctMDgtMjYgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAoc2VkX3F1b3RlX3N1YnN0KTogQ2hhbmdlIHRoZSBxdW90aW5nIHByb2NlZHVyZQoJYWdhaW4uICBJIHRoaW5rIHRoYXQgdGhlIG5ldyBvbmUgaXMgcm9idXN0IGZvciAqYWxsKiBjaGFyYWN0ZXJzLAoJaW5jbHVkaW5nIHdoaXRlc3BhY2UgYW5kIG1ldGFjaGFyYWN0ZXJzLgoKCSogdGVzdHMvcXVvdGUudGVzdDogTmV3IHRvcnR1cmUgdGVzdCBmb3IgbGlidG9vbCBtZXRhY2hhcmFjdGVyIHF1b3RpbmcuCgoxOTk3LTA4LTI1ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW46IENoYW5nZSBxdW90aW5nIHByb2NlZHVyZSBiZWNhdXNlIHNvbWUgc2hlbGxzCgljYW5ub3QgaGFuZGxlIGBdJyBpbiBzY2FuIHNldHMuICBGcm9tIElhbiBEYWxsLgoKMTk5Ny0wOC0yMiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRtYWluLnNoLmluIChleGVjdXRlKTogQWRkZWQgLWRsb3BlbiBmbGFnIGhhbmRsaW5nLiAgU3VnZ2VzdGVkCglieSBBbGV4YW5kcmUgT2xpdmEuCgoxOTk3LTA4LTIxICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBDaGFuZ2UgZXhlY3V0YWJsZSB3cmFwcGVyIHRvIGZpeCB1cCB2YWx1ZQoJb2YgdGhpc2RpciwgYXMgd2VsbCBhcyBwcm9nZGlyLCBpZiB0aGUgJDAgcGF0aCBkb2Vzbid0IHdvcmsuICBUaGlzCglndWFyYW50ZWVzIHRoYXQgc2hsaWJwYXRoX3ZhciBpcyBzZXQgY29ycmVjdGx5LiAgQWRkIHN1cHBvcnQgZm9yCglleGVjdXRlIG1vZGUuCgoJKiBsdG1haW4uc2guaW4gKGV4ZWN1dGUpOiBOZXcgbW9kZSB0byBhdXRvbWF0aWNhbGx5IHNldAoJc2hsaWJwYXRoX3Zhciwgd2hpY2ggYWxsb3dzIGVhc3kgZGVidWdnaW5nIG9mIHVuaW5zdGFsbGVkCglleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgU3VnZ2VzdGVkIGJ5IEtlbm5ldGggQWxiYW5vd3NraS4KCjE5OTctMDgtMjAgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIE1ha2VmaWxlLmFtICgkKHNyY2RpcikvbHRjb25maWcpOiBVc2UgbGluZW5vLgoKCSogY29uZmlndXJlLmluOiBBZGQgQU1fUFJPR19BV0sgZm9yIGxpbmVuby4KCgkqIGxpbmVubzogTmV3IHByb2dyYW0gdG8gYXV0b21hdGljYWxseSBwdXQgbGluZSBudW1iZXJzIGluCglsdGNvbmZpZy4KCgkqIGxpYnRvb2wubTQsIGx0Y29uZmlnLmluIChBTV9QUk9HX0xEKTogWWV0IEFub3RoZXIgUmV3cml0ZSwgd2hpY2gKCWluY29ycG9yYXRlcyB0aGUgcmVzdWx0cyBvZiBgZ2NjIC1wcmludC1wcm9ncmFtLW5hbWU9bGQnLgoJU3VnZ2VzdGVkIGJ5IEFsZXhhbmRyZSBPbGl2YS4KCjE5OTctMDgtMTQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbjogQWNjZXB0IGAtLXF1aWV0JyBhbmQgYC0tc2lsZW50JyBmbGFncyB0byB0dXJuIG9mZgoJY29tbWFuZCBlY2hvaW5nLiAgRnJvbSBKdWVyZ2VuIEEuIEVyaGFyZC4KCgkoY29tcGlsZSk6IFJlY29nbml6ZSB0aGUgT2JqZWN0aXZlIEMgYC5tJyBleHRlbnNpb24uICBGcm9tIEp1ZXJnZW4KCUEuIEVyaGFyZC4KCgkoY29tcGlsZSk6IFN1cHByZXNzIGVycm9yIG91dHB1dCBmcm9tIHRoZSBzZWNvbmQgY29tcGlsYXRpb24gKGlmCglhbnkpIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0IHRob3NlIGZydXN0cmF0aW5nIGR1cGxpY2F0ZSBlcnJvcgoJbWVzc2FnZXMuCgoJKiB0ZXN0cy9zdWZmaXgudGVzdCAoZXh0ZW5zaW9ucyk6IEFkZGVkIE9iamVjdGl2ZSBDIGV4dGVuc2lvbiwgYC5tJy4KCjE5OTctMDgtMTIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluOiBBZGRlZCBtZXNzYWdlcyB0byBjb25maWcubG9nIHRvIGRlc2NyaWJlIHdoYXQgc29ydAoJb2YgdGVzdCB3ZSBhcmUgcnVubmluZy4KCShwaWNfZmxhZyk6IEFkZGVkIGEgc2FuaXR5IGNoZWNrIGZvciBwaWNfZmxhZy4gIFRoaXMgc2hvdWxkIGZpeAoJYnVncyByZXBvcnRlZCB1c2luZyB0aGUgY2MgYnVuZGxlZCB3aXRoIEhQLVVYIDEwLiAgU3VnZ2VzdGVkIGJ5CglCcnVubyBIYWlibGUgYW5kIEFraW0gRGVtYWlsbGUuCgoxOTk3LTA4LTAxICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBBZGQgLWRsb3BlbiBhbmQgLWRscHJlb3BlbiBzdXBwb3J0IGZvcgoJbGlidG9vbCBvYmplY3RzLiAgVGhpcyBtZWFucyB0aGF0IGRsb3BlbmVkIG1vZHVsZXMgbm8gbG9uZ2VyIG5lZWQKCXRvIGJlIHNoYXJlZCBsaWJyYXJpZXMuCgoJKiBsdGNvbmZpZy5pbiAocGljX2ZsYWcpOiBHQ0Mgb24gSVJJWCA2IGFsd2F5cyBidWlsZHMgUElDLgoJUmVwb3J0ZWQgYnkgSWFuIExhbmNlIFRheWxvci4KCgkqIGxpYnRvb2wubTQgKExEKTogQWx3YXlzIGFkZCBgLW4zMicgdG8gdGhlIGxpbmtlciBpZiB3ZSBhcmUgdXNpbmcKCUdDQyBvbiBJUklYIDYuICBSZXBvcnRlZCBieSBJYW4gTGFuY2UgVGF5bG9yLgoKMTk5Ny0wNy0zMCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbGlidG9vbC5tNCAoQU1fUFJPR19MSUJUT09MKTogRXhwbGljaXRseSBjaGVjayBlbmFibGVfc2hhcmVkIGFuZAoJZW5hYmxlX3N0YXRpYyByYXRoZXIgdGhhbiBqdXN0IGVuYWJsZXZhbC4gIFRoaXMgYWxsb3dzCgljb25maWd1cmUuaW4gc2NyaXB0cyB0byBzZXQgdGhlaXIgb3duIGRlZmF1bHRzLiAgU3VnZ2VzdGVkIGJ5CglUb21teSBSZWlsbHkuCgoxOTk3LTA3LTI5ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW46IEFkZCBOTFMgZW52aXJvbm1lbnQgdmFyaWFibGUgaGFuZGxpbmcgY29waWVkIGZyb20KCWx0Y29uZmlnLmluLiAgUmVwb3J0ZWQgYnkgQWtpbSBEZW1haWxsZS4KCShsaW5rKTogSWYgYWxsb3dfdW5kZWZpbmVkX2ZsYWcgaXMgbm90IHN1cHBvcnRlZCwgdGhlbiB0dXJuIG9uIG9sZAoJbGlicmFyaWVzLiAgUmVwb3J0ZWQgYnkgQWtpbSBEZW1haWxsZS4KCgkqIGRlbW8vZGxtYWluLmMgKG1haW4pOiBVc2UgZGxkX3ByZWxvYWRlZF9zeW1ib2xfY291bnQgdG8gZGlzcGxheQoJYSBtZXNzYWdlIGFib3V0IHRoZSBzb3J0ZWRuZXNzIG9mIHRoZSBzeW1ib2wgdGFibGUuCgoJKiBsdGNvbmZpZy5pbiAobmxpc3QpOiBVc2UgYW4gbmxpc3QgY29udmVuaWVuY2UgdmFyaWFibGUsIHNvIHRoYXQKCWNvZGUgY2FuIGJlIHNoYXJlZCBkaXJlY3RseSB3aXRoIGx0bWFpbi5zaC5pbi4KCgkqIGx0Y29uZmlnLmluLCBsdG1haW4uc2guaW4gKGRsZF9wcmVsb2FkZWRfc3ltYm9sX2NvdW50KTogQ291bnQgdXAKCXRoZSBudW1iZXIgb2Ygc3ltYm9scyBpbiB0aGUgZGxkX3ByZWxvYWRlZF9zeW1ib2xzLiAgU2V0IHRvIGAtMScKCWlmIHRoZSBsaXN0IHdhc24ndCBib3RoIHNvcnRlZCBhbmQgY291bnRlZC4gIFRoaXMgYWxsb3dzCglhcHBsaWNhdGlvbnMgdG8gZG8gYSBxdWljayBiaW5hcnkgc2VhcmNoLCBpZiB0aGV5IGFyZSBzbyBpbmNsaW5lZC4KCjE5OTctMDctMjUgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IFJlbW92ZSBjb2RlIGZvciBgLXZlcnNpb24tZmlsZScsIHNpbmNlIGl0CgloYXMgYmVlbiBsb25nLWRlcHJlY2F0ZWQuCgoJRGlzYWJsZSBzdGF0aWMgbGlua2luZyBpZiBoYXJkY29kZV9kaXJlY3QgaXMgdW5zdXBwb3J0ZWQgYW5kIHRoZXJlCglpcyBubyB3b3JraW5nIGxpbmtfc3RhdGljX2ZsYWcuICBUaGlzIHByb3ZpZGVzIGNvcnJlY3QgYmVoYXZpb3VyCglmb3IgYWxsIGNhc2VzIG9uIEFJWCAzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgY29sbGVjdDIgaXMgYnJva2VuCglvciBub3QuICBSZXBvcnRlZCBieSBNYXJrIEtldHRlbmlzLgoKCSogbHRjb25maWcuaW46IEZpeCB0eXBvIGluIHRlc3QgcG9sYXJpdHkuICBGcm9tIE1hcmsgS2V0dGVuaXMuCgoxOTk3LTA3LTI0ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbiAoaGFyZGNvZGVfZGlyZWN0KTogU2V0IHRvIGB1bnN1cHBvcnRlZCcgaWYgYWl4MyB1c2VzCglhIGJyb2tlbiBjb2xsZWN0Mi4gIEFkYXB0ZWQgb3V0IG9mIHRlc3QgcmVzdWx0cyBmcm9tIE1hcmsKCUtldHRlbmlzLgoJKGxpbmtfc3RhdGljX2ZsYWcpOiBNYWtlIHN1cmUgdGhlIGxpbmtfc3RhdGljX2ZsYWcgYWN0dWFsbHkgd29ya3MKCXdpdGggYSB0cml2aWFsIGJpbmFyeS4KCgkqIGx0bWFpbi5zaC5pbiwgbHRjb25maWcuaW4gKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyk6IFJlbmFtZWQKCWZyb20gZXhwb3J0X2R5bmFtaWNfZmxhZyBiZWNhdXNlIHdlIGV2YWwgaXQgaW4gbHRtYWluLnNoLgoKCSogbHRtYWluLnNoLmluIChsaW5rX3N0YXRpYyk6IERvbid0IGV2YWwgbGlua19zdGF0aWNfZmxhZy4KCgkqIGRlbW8vZGxtYWluLmMgKG1haW4pOiBDaGFuZ2UgZnVuY3Rpb24gcHJvdG90eXBlIHRvIGJlIEtOUgoJY29tcGF0aWJsZS4gIEZyb20gS2F2ZWggUi4gR2hhemkuCgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBVc2Ugbm9fYnVpbHRpbl9mbGFnLiAgVGhpcyB3b3JrcyBhcm91bmQKCWNvbmZsaWN0aW5nIGRlZmluaXRpb25zIG9mIGJ1aWx0aW4gZnVuY3Rpb25zIHdpdGggYXQgbGVhc3QgR0NDLgoJUmVwb3J0ZWQgYnkgS2F6dWhpcm8gU2FzYXlhbWEuCgoJKiBsdGNvbmZpZy5pbiAobm9fYnVpbHRpbl9mbGFnKTogTmV3IGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbgoJZnVuY3Rpb25zIHdoZW4gY29tcGlsaW5nIGFuIG9iamVjdCBmaWxlLgoJKHBpcGVfd29ya3MpOiBVc2UgaXQuCgoJKiB0ZXN0cy9kZW1vLWV4ZWMudGVzdCAoc3RhdHVzKTogVXNlIHN0YXR1cyB2YXJpYWJsZXMgc28gdGhhdCB3ZSB0cnkgdG8KCWV4ZWN1dGUgYWxsIHRoZSBwcm9ncmFtcy4KCjE5OTctMDctMjMgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluIChwaWNfZmxhZyk6IEFjY29yZGluZyB0byB0aGUgbGliZysrIDIuNy4yIGNvbmZpZ3VyZQoJc2NyaXB0LCBERUMgYWxwaGEgQ1BVcyBhcmUgUElDLW9ubHksIGFzIHdlbGwuICBSZXBvcnRlZCBieSBLZXZpbgoJSmFjb2JzLgoKMTk5Ny0wNy0yMSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW4sIGx0bWFpbi5zaC5pbjogUmVwbGFjZSBhbGwgb2NjdXJhbmNlcyBvZiAic2VkICdYOwoJWSciIHdpdGggInNlZCAtZSAnWCcgLWUgJ1knIi4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IEZpbmlzaCBmdWxsIGludGVncmF0aW9uIGZvciBgLWRsb3BlbicgYW5kCglgLWRscHJlb3BlbicuCgoJRml4IHR3byBzaWxseSB0eXBvcyB3aGVyZSBJIHVzZWQgYSBjb21waWxlX2NvbW1hbmQgaW4gcGxhY2Ugb2YgYQoJZmluYWxpemVfY29tbWFuZCwgYW5kIHZpY2UgdmVyc2EuCgoJQ2hhbmdlIHRoZSB3cmFwcGVyIHNjcmlwdCB0byBjaGVjayBhIGhhcmRjb2RlZCBwYXRoIG9ubHkgaWYgdGhlCglhcmd2WzBdIG1ldGhvZCBmYWlscy4gIFRoaXMgaXMgYSBjb21wcm9taXNlIGZvciB0aGUgcHJldmlvdXMgdHdvCglwYXRjaGVzLCBhbmQgc2hvdWxkIHNvbHZlIHRoZSBtYWpvcml0eSBvZiBwcm9ibGVtcyB3aXRoIHdyYXBwZXIKCXNjcmlwdHMuICBGcm9tIEtlbm5ldGggQWxiYW5vd3NraS4KCgkobGluayk6IENoYW5nZSBhIHJlZmVyZW5jZSB0byBoYXJkY29kZV9saWJkaXJfY29sb25fc2VwYXJhdGVkIHRvCgl1c2UgdGhlIG5ldyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIHZhcmlhYmxlLgoKCSogZGVtby9NYWtlZmlsZS5hbSAoaGVsbGRsX0xERkxBR1MpOiBBZGQgYC1leHBvcnQtZHluYW1pYycgYW5kCglgLWRscHJlb3BlbicgZm9yIGJ1aWxkaW5nIGhlbGxkbC4KCgkqIGRlbW8vZGxtYWluLmMgKG1haW4pOiBTdWNjZWVkLCBldmVuIGlmIG5vbmUgb2YgdGhlIGxpYmhlbGxvCglzeW1ib2xzIGhhdmUgYmVlbiBwcmVsb2FkZWQuCgoxOTk3LTA3LTIwICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbiAoZ2xvYmFsX3N5bWJvbF9waXBlKTogQWRkIGBVJyB0byB0aGUgYWNjZXB0ZWQgZ2xvYmFsCglzeW1ib2wgdHlwZXMuICBUaGlzIG1lYW5zIHRoYXQgd2Ugd2lsbCBnZXQgZHVwbGljYXRlIHN5bWJvbHMsIGJ1dAoJd2UnbGwgYWxzbyBiZSBzdXJlIHRvIGdldCBhbGwgZ2xvYmFsIHN5bWJvbHMgdXNlZCBieSB0aGUgcHJvZ3JhbS4KCgkqIGx0Y29uZmlnLmluIChwaXBlX3dvcmtzKSwgbHRtYWluLnNoLmluIChsaW5rKTogU29ydCBhbmQgbWFrZQoJc3ltYm9sIG91dHB1dCB1bmlxdWUuCgoxOTk3LTA3LTE5ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbiAocGlwZV93b3Jrcyk6IENoZWNrIHRvIG1ha2Ugc3VyZSBvdXIgZ3Vlc3NlZAoJZ2xvYmFsX3N5bWJvbF9waXBlIGFjdHVhbGx5IHdvcmtzLgoKCSogbHRtYWluLnNoLmluIChsaW5rKTogUmV2ZXJ0IGNoYW5nZSBmcm9tIEtlbm5ldGggQWxiYW5vd3NraS4gIFRoZQoJd3JhcHBlciBzY3JpcHRzIGFyZSBtb3JlIHJlbGlhYmxlIHdoZW4gdGhleSBqdXN0IHVzZSB0aGUgYXJndlswXQoJdmFsdWUuICBHZW5lcmFsbHksIHdoZW4gdGhlIGFyZ3ZbMF0gbWV0aG9kIGRvZXNuJ3Qgd29yaywgdGhlIHVzZXIKCWlzIHRyeWluZyB0byBkbyBzb21ldGhpbmcgd2VpcmQgd2l0aCBhbiB1bmluc3RhbGxlZCBiaW5hcnksIGFuZAoJc2hvdWxkIHRyeSBhIGRpZmZlcmVudCBhcHByb2FjaC4KCgkqIGx0Y29uZmlnLmluLCBsdG1haW4uc2guaW4gKENDKTogQWx3YXlzIHVzZSBgJENDJyBpbnN0ZWFkIG9mCglgJGNjJy4gIFRoaXMgZml4ZXMgYSBGcmVlQlNEIGJ1Zy4gIFJlcG9ydGVkIGJ5IENodWNrIFJvYmV5LCBhbmQKCW90aGVycy4KCjE5OTctMDctMTQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IEluIHdyYXBwZXIgc2NyaXB0cywgaGFyZGNvZGUgdGhlIGN1cnJlbnQKCWRpcmVjdG9yeSB0byBwcmV2ZW50IHBob255IGFyZ3ZbMF0gdmFsdWVzIGZyb20gc2NyZXdpbmcgdXAgb3VyCglwcm9ncmFtLiAgRnJvbSBLZW5uZXRoIEFsYmFub3dza2kuCgoxOTk3LTA3LTEzICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoZGVtb19kaXN0ZmlsZXMpOiBBZGQgZGVtby9kbG1haW4uYyB0byB0aGUKCWRpc3RyaWJ1dGlvbi4KCjE5OTctMDctMTIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGRlbW8vTWFrZWZpbGUuYW06IEFkZCBoZWxsZGwsIG1hZGUgZnJvbSBkbG1haW4uYywgdG8gZGVtb3N0cmF0ZQoJYC1kbG9wZW4nIHVzYWdlLgoKCSogZGVtby9kbG1haW4uYzogTmV3IGZpbGUgdG8gZGVtb25zdHJhdGUgcHJlbG9hZGVkIG1vZHVsZXMuCgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBBZGQgYC1kbG9wZW4nIGZsYWcgdG8gcHJlbG9hZCBkeW5hbWljCgltb2R1bGVzLCBldmVuIG9uIHN0YXRpYyBwbGF0Zm9ybXMuICBVc2UgYCROTScgYW5kCglgJGdsb2JhbF9zeW1ib2xfY21kJyB0byBleHRyYWN0IHN5bWJvbHMgZnJvbSByZXF1aXJlZCBmaWxlcy4KCShkbG5hbWUpOiBEZWxldGUgZGxuYW1lIG1vZGUgZW50aXJlbHkuICBJdCBpcyByZW5kZXJlZCBvYnNvbGV0ZQoJYmVjYXVzZSB0aGUgYC5sYScgZmlsZSBmb3JtYXQgaXMgbm93IGEgcHVibGljIGludGVyZmFjZS4KCgkqIGx0Y29uZmlnLmluIChOTSk6IE5ldyB2YXJpYWJsZSBmb3IgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KCShnbG9iYWxfc3ltYm9sX2NtZCk6IFBpcGVsaW5lIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSB0aGUKCW5tIG91dHB1dC4KCgkqIGx0bWFpbi5zaC5pbjogVGhlIC5sYSBmaWxlIGhlYWRlciBzaG91bGQgZGVwZW5kIG9uIGBsdG1haW4uc2gnLAoJbm90IGAkUFJPR1JBTScuCgkobGluayk6IE1ha2Ugc3VyZSAkZXhwb3J0X2R5bmFtaWNfZmxhZyBpcyBldmFsJ2VkIGJlZm9yZSBpdCBpcwoJdXNlZC4KCgkqIHRlc3RzL2RlbW8tZXhlYy50ZXN0LCB0ZXN0cy9kZW1vLWluc3QudGVzdDogQ2hlY2sgdGhlIG5ldwoJaGVsbGRsIHByb2dyYW0sCXRvby4KCjE5OTctMDctMTEgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGxpYnRvb2wuc3BlYzogTmV3IFJlZCBIYXQgUGFja2FnZSBNYW5hZ2VyIHNwZWNpZmljYXRpb24gZmlsZSBpbgoJb3JkZXIgdG8gaGVscCBwZW9wbGUgcHJlcGFyZSBkaXN0cmlidXRpb25zIG9mIGxpYnRvb2wgZm9yIExpbnV4LgoKCSogbHRtYWluLnNoLmluOiBFbGltaW5hdGUgdHdvIGFjY2lkZW50YWwgdXNlcyBvZiB0aGUgTk9ORSBtYWdpYwoJdmFsdWUuICBUaGVzZSB3ZXJlIGJyZWFraW5nIGxpYnRvb2wncyBiZWhhdmlvdXIgd2hlbiBubyBtb2RlIGlzCglzcGVjaWZpZWQuCgoJKiB0ZXN0cy9ub21vZGUudGVzdDogTmV3IHRlc3QgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIGNvcnJlY3QgYmVoYXZpb3VyCgl3aGVuIHdlIGRvbid0IHNwZWNpZnkgYSBtb2RlLgoKMTk5Ny0wNy0wOCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogUmVsZWFzZSAxLjAuCgoJKiBsdGNvbmZpZy5pbjogT24gU3VuT1MsIGFwcGVuZCAvdXNyL2V0YyB0byB0aGUgUEFUSCBiZWZvcmUKCXJ1bm5pbmcgbGRjb25maWc7IG9uICpCU0QsIGFwcGVuZCAvc2Jpbi4gIFRoaXMgd2FzIGRvbmUgaW4gbGluZQoJd2l0aCB0aGUgTGludXggY2hhbmdlIHN1Z2dlc3RlZCBieSBLZW5uZXRoIEFsYmFub3dza2kuCgoJKiBkZW1vL01ha2VmaWxlLmFtIChoYXJkY29kZV90ZXN0cyk6IEFlc3RoZXRpYyBjaGFuZ2UgdG8KCWFscGhhYmV0aXplIG9yZGVyIG9mIGNvbXBpbGluZyB0aGUgaGFyZGNvZGUgdGVzdHMuCgoJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERlbGV0ZSBSRUFETUUtYXV0b21ha2UuCgoJKiBSRUFETUUtYXV0b21ha2U6IFJlbW92ZSBmcm9tIGRpc3RyaWJ1dGlvbi4KCjE5OTctMDctMDIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IEluIHRoZSBleGVjdXRhYmxlIHdyYXBwZXIsIHN0cmlwIHRyYWlsaW5nCgljb2xvbnMgZnJvbSB0aGUgc2hsaWJwYXRoX3ZhciBiZWNhdXNlIHNvbWUgbGQuc28ncywgbm90YWJseQoJT3BlbkJTRCAyLjAncyAoISksIGRvbid0IHBhcnNlIGNvbG9uLXRlcm1pbmF0ZWQgdmFsdWVzIGNvcnJlY3RseS4KCUZyb20gVGltIFBpZXJjZS4KCjE5OTctMDctMDEgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiwgbHRjb25maWcuaW46IEVsaW1pbmF0ZSB1c2VzIG9mIHRoZSBOT05FIG1hZ2ljCgl2YXJpYWJsZSB2YWx1ZS4gIFVzZSBhbiBlbXB0eSB2YXJpYWJsZSBpbnN0ZWFkLgoKCSogbHRjb25maWcuaW4gKHdpdGhfZ2NjLCB3aXRoX2dudV9sZCk6IERvIHRoZSB0ZXN0cyBmb3IgdGhlIEMKCWNvbXBpbGVyIGFuZCBsaW5rZXIgaWYgdGhlIHZhcmlhYmxlcyBhcmUgdW5zZXQsIG9yIGlmIHRoZXkgYXJlIG5vdAoJR05VIEMgYW5kIGxkLgoJKFJBTkxJQik6IEVsaW1pbmF0ZSByZWR1bmRhbnQgYGlmJyBzdGF0ZW1lbnQuCgoJKiBjb25maWd1cmUuaW46IFVzZSBBTV9QUk9HX0xELgoKCSogbGlidG9vbC5tNCAoQU1fUFJPR19MRF9HTlUpOiBOZXcgbWFjcm8gdG8gZGV0ZXJtaW5lIGlmIExEIGlzIEdOVQoJbGQuCgkoQU1fUFJPR19MRCk6IFJlbmFtZSBBTV9QQVRIX1BST0dfTEQgdG8gQU1fUFJPR19MRC4gIFBhcmFtZXRlcml6ZQoJc28gdGhhdCB0aGUgdXNlciBjYW4gc3BlY2lmeSBgLS13aXRoLWdudS1sZCcgb3IgYC0td2l0aG91dC1nbnUtbGQnCgl0byBpbmRpY2F0ZSBoaXMgcHJlZmVyZW5jZS4KCShBTV9QUk9HX0xJQlRPT0wpOiBVc2UgaXQuCgoxOTk3LTA2LTMwICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbjogQXBwZW5kIC9zYmluIHRvIHRoZSBwYXRoIGJlZm9yZSBydW5uaW5nIGxkY29uZmlnIG9uCglMaW51eC4gIFRoaXMgaGVscHMgc3VwZXJ1c2VycyB3aG8gaGF2ZW4ndCBzZXQgdGhlaXIgUEFUSAoJY29ycmVjdGx5LiAgU3VnZ2VzdGVkIGJ5IEtlbm5ldGggQWxiYW5vd3NraS4KCgkqIHRlc3RzL2lmLnRlc3Q6IE5ldyB0ZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmVuJ3QgZm9yZ290dGVuIHRvCglmb2xsb3cgYW4gYGlmJyBzdGF0ZW1lbnQgd2l0aCBhIGB0ZXN0JyBjb21tYW5kLiAgVGhpcyBzaG91bGQgYXZvaWQKCXRoZSBtYWpvcml0eSBvZiBoYXJkLXRvLXRyYWNrIGJ1Z3MuCgoxOTk3LTA2LTI5ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW46IENoYW5nZSBhbGwgdGhlIGBldmFsICIkcnVuIC4uLiInIHNlcXVlbmNlcyB0bwoJYCRydW4gImV2YWwgLi4uIicuCgoJQ2hhbmdlIGFsbCBgJGxuX3MgLi4uJyBzZXF1ZW5jZXMgdG8gdXNlIGAoY2QgL2RpciAmJiAkTE5fUyAuLi4pJy4KCVRoaXMgaXMgdGhlIHNlcXVlbmNlIHJlY29tbWVuZGVkIGJ5IHRoZSBBdXRvY29uZiBtYW51YWwsIGFuZAoJc2hvdWxkIGF2b2lkIGFueSBwcm9ibGVtcyBvbiBvbGRlciBtYWNoaW5lcy4gIEVsaW1pbmF0ZSBhbGwgdXNlcwoJb2YgYGNwIC1wJy4gIFJlcG9ydGVkIGJ5IEFraW0gRGVtYWlsbGUuCgoJKGluc3RhbGwpOiBVc2UgYHRlc3QgJCMgLWd0IDAnIGluc3RlYWQgb2YgYHRlc3QgLW4gIiQxIicuCgoJKiBsdGNvbmZpZy5pbiAoTE5fUyk6IEFkZCB0ZXN0IHRvIHNlZSBpZiBgbG4gLXMnIHdvcmtzLgoKCSogbGlidG9vbC5tNDogSW5jcmVtZW50IHNlcmlhbCBudW1iZXIsIGFuZCByZXF1aXJlIEFDX1BST0dfTE5fUy4KCjE5OTctMDYtMjYgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IEFkZCBtaXNzaW5nIGB0ZXN0JyBzdGF0ZW1lbnQuICBSZXBvcnRlZCBieQoJQWtpbSBEZW1haWxsZS4KCjE5OTctMDYtMjQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGxpYnRvb2wubTQgKExEKTogQ29uc2lzdGVudGx5IHVzZSBhY19jdl9wYXRoX2xkIGluc3RlYWQgb2YKCWFtX2N2X3BhdGhfbGQuICBGcm9tIFRpbSBQaWVyY2UuCgoxOTk3LTA2LTIwICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW46IFJlZG8gdHdvIHJvYnVzdG5lc3MgZml4ZXMuICBBbGV4YW5kcmUgaGFkIHRoZQoJY29ycmVjdCBhcHByb2FjaCwgYnV0IEkgYm90Y2hlZCB0aGVtLgoKCSogbHRjb25maWcuaW4gKGR5bmFtaWNfbGlua2VyKTogRGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCglNa0xpbnV4IHVubGVzcyBHTlUgbGliYyBpcyBpbiB1c2UuICBSZXBvcnRlZCBieSBBa2ltIERlbWFpbGxlLgoKMTk5Ny0wNi0xOSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRtYWluLnNoLmluIChpbnN0YWxsKTogQWRkIGEgbWlzc2luZyBgdGVzdCcgY29tbWFuZC4gIFJlcG9ydGVkCglieSBKb2VsIFdlYmVyLgoJTWlzY2VsbGFuZW91cyBmaXhlcyB0byBpbXByb3ZlIHJvYnVzdG5lc3MuICBGcm9tIEFsZXhhbmRyZSBPbGl2YS4KCgkqIHRlc3RzL2RlbW8tY29uZi50ZXN0IChDT05GSUdfU0lURSk6IFNldCB0byAvZGV2L251bGwsIHNvIHRoYXQgdGhlCgljb25maWcuc2l0ZSBmaWxlIGRvZXNuJ3QgbWVzcyB1cCBvdXIgcHJlZml4LiAgUmVwb3J0ZWQgYnkgSm9lbAoJV2ViZXIuCgoJKiB0ZXN0cy9kZW1vLWluc3QudGVzdDogQWx3YXlzIHJ1biBib3RoIGhlbGwuc3RhdGljIGFuZCBoZWxsLgoKCSogdGVzdHMvZGVtby1jb25mLnRlc3Q6IEFsd2F5cyByZW1vdmUgdGhlIGxvY2FsIGNvbmZpZy5jYWNoZSwgYnV0IHJ1bgoJYG1ha2UgZGlzdGNsZWFuJyBvbmx5IGlmIHRoZSBNYWtlZmlsZSBleGlzdHMuICBPdGhlcndpc2UsIHRoZSBkZW1vCglkaXJlY3RvcnkgaXMgbm90IGNsZWFuZWQgdXAgaWYgYSB1c2VyIHVzZXMgdGhlaXIgb3duIGNvbmZpZy5jYWNoZS4KCVJlcG9ydGVkIGJ5IEpvZWwgV2ViZXIuCgoxOTk3LTA2LTE0ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBDcmVhdGUgaW52YWxpZCBsaWJ0b29sIG9iamVjdHMgd2hlbiBwYXJ0aWFsCglsaW5raW5nIGlmIHdlIGRvbid0IGhhdmUgUElDLiAgRnJvbSBKZWZmIERhaXJpa2kuCgkoaW5zdGFsbCk6IEZpeCBidWcgaWYgbGlidG9vbCBvYmplY3QgaXMgaW5zdGFsbGVkIHRvIGEgZmlsZSBuYW1lCgl3aXRob3V0IGRpcmVjdG9yeSBjb21wb25lbnRzLiAgRnJvbSBKZWZmIERhaXJpa2kuCgoxOTk3LTA2LTEzICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoZGVtby9jb25maWd1cmUpOiBGaXggdXAgcnVsZXMgdG8gcnVuIGF1dG9jb25mLgoJKGFjbG9jYWwubTQpOiBOb3cgd2UgZGVwZW5kIG9uIG91ciBvd24gbGlidG9vbC5tNC4KCgkqIGNvbmZpZ3VyZS5pbiAoQU1fUEFUSF9QUk9HX0xEKTogVXNlIGl0LgoKCSogbGlidG9vbC5tNCAoQU1fUEFUSF9QUk9HX0xEKTogTmV3IG1hY3JvIHRvIGZpbmQgdGhlIGxpbmtlciB1c2VkCglieSB0aGUgQyBjb21waWxlci4KCShBTV9QUk9HX0xJQlRPT0wpOiBVc2UgaXQuCgoJKiBsdG1haW4uc2guaW4gKGluc3RhbGwsIHVuaW5zdGFsbCk6IFN1cHBvcnQgaW5zdGFsbGluZyBhbmQKCXVuaW5zdGFsbGluZyBgLmxvJyBmaWxlcy4gIEZyb20gSmVmZiBEYWlyaWtpLgoKMTk5Ny0wNi0xMSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogTWFrZWZpbGUuYW0gKGx0Y29uZmlnLCBsdG1haW4uc2gpOiBPbmx5IG1vdmUgaWYgJChzcmNkaXIpIGlzIG5vdAoJdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgRG9uJ3QgcmVnZW5lcmF0ZSBldmVyeSB0aW1lIHRoZSBwYWNrYWdlIGlzCglyZWNvbmZpZ3VyZWQuICBSZXBvcnRlZCBieSBUb20gVHJvbWV5LgoJKE1BSU5UQUlORVJDTEVBTkZJTEVTKTogQWRkZWQgbHRjb25maWcsIGx0bWFpbi5zaCwgc28gdGhhdAoJJChzcmNkaXIpIGlzIG5vdCBtZXNzZWQgd2l0aCBkdXJpbmcgYSByZWd1bGFyIGNsZWFuLgoKMTk5Ny0wNi0xMCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogTWFrZWZpbGUuYW0gKGx0Y29uZmlnLCBsdG1haW4uc2gpOiBCZSBzdXJlIHRvIG1vdmUgdGhlc2UgZmlsZXMKCWludG8gJChzcmNkaXIpIG9uY2UgdGhleSBhcmUgY3JlYXRlZC4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IERpc2FibGUgYnVpbGRpbmcgc3RhdGljIGxpYnJhcmllcy4KCVBlb3BsZSBzaG91bGQgdXNlIHRoZWlyIGZhdm91cml0ZSBBUiBhbmQgUkFOTElCIGNvbW1hbmRzLgoJRGlzYWJsZSBidWlsZGluZyBvbGQtc3R5bGUgb2JqZWN0cyBpZiBgLS1kaXNhYmxlLXN0YXRpYycgaXMKCWdpdmVuLiAgU3VnZ2VzdGVkIGJ5IFRvbSBMZWVzIGFuZCBTdGVwaGFuIEt1bG93LgoKMTk5Ny0wNi0wOCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW4gKGhvc3RfY3B1LCBob3N0X3ZlbmRvciwgaG9zdF9vcyk6IFBhdGNoIHVwCglkZWZpbml0aW9ucywgdG8gYWxsb3cgZm9yIHRoZSBmYWN0IHRoYXQgdGhlIGhvc3Rfb3MgbWF5IGNvbnRhaW4KCWh5cGhlbnMgKGFzIGluIGxpbnV4LWdudSkuICBGcm9tIFNjb3R0IEdvZWhyaW5nLgoKCSogbHRtYWluLnNoLmluIChsaW5rKTogTW92ZSB0aGUgYGRsbmFtZScgc2V0dGluZyBjbG9zZXIgdG8gdGhlIHRvcAoJb2YgdGhlIGZpbGUuICBTdWdnZXN0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcuCglTeW1saW5rIHRoZSBsaWJ0b29sIGFyY2hpdmUgaW50byB0aGUgYC5saWJzJyBkaXJlY3Rvcnkgc28gdGhhdCBpdAoJY2FuIGJlIGZvdW5kIGJ5IHByb2dyYW1zIHRoYXQgd2FudCB0byBmaW5kIGEgbGlicmFyeSdzIGRsbmFtZSBieQoJc2VhcmNoaW5nIExEX0xJQlJBUllfUEFUSC4gIFJlcG9ydGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nLgoKMTk5Ny0wNi0wNiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogVGVsbCBwZW9wbGUgdG8gcmVwb3J0IGJ1Z3MgdG8gdGhlIG5ldyBsaWJ0b29sIG1haWxpbmcgbGlzdCwKCTxidWctbGlidG9vbEBnbnUuYWkubWl0LmVkdT4uCgoxOTk3LTA2LTA1ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbiAoYWxsb3dfdW5kZWZpbmVkX2ZsYWcpOiBOZXcgdmFyaWFibGUgdGhhdCBpbXBsZW1lbnRzCglgLWFsbG93LXVuZGVmaW5lZCcuCgkoYXJjaGl2ZV9jbWRzKTogRW5hYmxlIEMrKyBjb25zdHJ1Y3RvcnMgZm9yIEZyZWVCU0QgMi4yLiAgRnJvbQoJRGF2aWQgTnVnZW50LgoKCSogbHRtYWluLnNoLmluIChsaW5rKTogQWNjZXB0IG5ldyBgLWFsbG93LXVuZGVmaW5lZCcgZmxhZyB3aGVuCglidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4gIFRoaXMgdGVsbHMgbGlidG9vbCB0byBhbGxvdwoJdW5yZXNvbHZlZCBzeW1ib2xzIHRvIGV4aXN0IGluIHNoYXJlZCBsaWJyYXJpZXMuICBCYXNpY2FsbHksIHRoaXMKCXR1cm5zIG9mZiBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4gIFN1Z2dlc3RlZCBieSBJYW4gTGFuY2UgVGF5bG9yLgoKMTk5Ny0wNS0yNiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbGlidG9vbC5tNCAoTEQpOiBPbiBhdCBsZWFzdCBJUklYLCBtYW55IGRpZmZlcmVudCBmbGFncyBuZWVkIHRvCgliZSBwcm9wYWdhdGVkIHRvIHRoZSBsaW5rZXIgaWYgdGhleSBhcmUgcGFydCBvZiB0aGUgY29tcGlsZXIKCWNvbW1hbmQgbGluZS4gIFJlcG9ydGVkIGJ5IEFudGhvbnkgR3JlZW4uCgoxOTk3LTA1LTEwICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbjogVHJpdmlhbCBwb3J0IHRvIEZyZWVCU0QgMy4gIEZyb20gRGF2aWQgTnVnZW50LgoKMTk5Ny0wNC0yNSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRtYWluLnNoLmluIChsaW5rKTogUmVtb3ZlIGFsbCB0cmFjZXMgb2YgYC13aG9sZS1hcmNoaXZlJywKCWAtbm8td2hvbGUtYXJjaGl2ZScsIGFuZCBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoZXkgd2VyZQoJbW9yZSB0cm91YmxlIHRoYW4gdGhleSdyZSB3b3J0aC4gIElmIHRoZXNlIGFyZSBldmVyIHJlaW1wbGVtZW50ZWQsCgl0aGV5IG5lZWQgbW9yZSBjYXJlZnVsIGF0dGVudGlvbiB0byBtYWtlIHBvcnRhYmxlLgoKCSogbGlidG9vbC5tNCwgbHRjb25maWcuaW46IEFkZGVkIGEgYC0tZGlzYWJsZS1zdGF0aWMnIGZsYWcgdG8gdHVybgoJb2ZmIHN0YXRpYyBsaWJyYXJ5IGNyZWF0aW9uLiAgRnJvbSBUb20gTGVlcyAod2hvIGZpbmFsbHkgY29udmluY2VkCgltZSB0aGF0IGl0IHdhcyB0aGUgUmlnaHQgVGhpbmcgdG8gZG8pLgoKMTk5Ny0wNC0yMiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRtYWluLnNoLmluIChoYXJkY29kZV9ydW5wYXRoX3ZhciwgcnVucGF0aF92YXIpOiBVc2UgdGhlbSwgaWYKCXRoZSBsaW5rZXIgaGFzIG5vIC1ycGF0aCBmbGFnLgoJUXVvdGUgdGhlIHZhbHVlcyB3ZSB1c2UgdG8gc2V0IHJ1bnBhdGhfdmFyIGFuZCBzaGxpYnBhdGhfdmFyLgoJKGxpbmspOiBVc2UgbGlib2JqbGlicyBmb3IgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJpZXMuCgoJKiBsdGNvbmZpZy5pbiAoaGFyZGNvZGVfcnVucGF0aF92YXIsIHJ1bnBhdGhfdmFyKTogQWRkIG5ldwoJdmFyaWFibGVzIHRvIGRlc2NyaWJlIGxpbmtlcnMgdGhhdCBob25vdXIgYExEX1JVTl9QQVRIJy4KCShob3N0X2NwdSwgaG9zdF9vcyk6IFVzZSB0aGVzZSBtb3JlIHNwZWNpZmljIHZhcmlhYmxlcywgcmF0aGVyCgl0aGFuIHRoZSBmdWxsIGNhbm9uaWNhbCBob3N0IHN5c3RlbSBuYW1lLgoKCSogbHRtYWluLnNoLmluIChkbG5hbWUpOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIG1pc3NpbmcKCWAtZXhwb3J0LWR5bmFtaWMnIGFuZCB3aGVuIHRoZSBsaWJyYXJ5IGlzIG9ubHkgc3RhdGljYWxseSBsaW5rZWQuCgoxOTk3LTA0LTIxICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbjogVHJpdmlhbCBwb3J0IHRvIE9wZW5CU0QgYnkgbWFraW5nIGl0IGFuIGFsaWFzIGZvcgoJTmV0QlNELiAgRnJvbSBUaW0gUGllcmNlLgoKMTk5Ny0wNC0xNiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW46IFRlbXBvcmFyeSBtZWFzdXJlcyB0byBjaGVjayBmb3IgYSBicm9rZW4gY29sbGVjdDIKCXByb2dyYW0uICBSaWdodCBub3csIHdlIGp1c3Qgc2VlIGlmIHdlJ3JlIHVzaW5nIEdDQyBvbiBBSVggMy4KCgkqIHRlc3RzL2hhcmRjb2RlLnRlc3Q6IEFJWCBhbHNvIGhhcyBhcmJpdHJhcnkgbGltaXRzIG9uIHRoZSBsaW5lIGxlbmd0aAoJb2YgaW5wdXQgdG8gZmdyZXAoMSksIHNvIHdlIG5lZWQgdG8gdHJhbnNsYXRlIE5VTCBjaGFyYWN0ZXJzIHRvCgluZXdsaW5lcyBpbiBvcmRlciB0byBwcm9wZXJseSBkZXRlY3QgZW1iZWRkZWQgYC5saWJzJy4gIEZyb20gQnJ1bm8KCUhhaWJsZS4KCUFsc28gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbCwgc28gdGhhdCBBSVggdXNlcnMgZG9uJ3QgZ2V0Cgl3b3JyaWVkIGJ5IGBmZ3JlcDogTWF4aW11bSBsaW5lIGxlbmd0aCBvZiAyMDQ4IGV4Y2VlZGVkLicuCgoxOTk3LTA0LTEzICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKG1vZGUpOiBVc2UgYGVncmVwIC1lJyB3aGVuIGluZmVycmluZyB0aGUgb3BlcmF0aW9uCgltb2RlLgoKMTk5Ny0wNC0xMiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW4gKGxpbmtlcik6IFNvbWUgR05VIGxkJ3MgZG9uJ3QgYWNjZXB0IGAtLXZlcnNpb24nLAoJYnV0IGRvIGFjY2VwdCBgLXYnLiAgRnJvbSBKdWtrYSBIb25rZWxhLgoJKGxkX3NobGlicyk6IEFJWCBsb3NzYWdlIG1heSBiZSBzZXR0bGluZyBkb3duLiAgQUlYIDMuMi41IGxkIGRvZXMKCSpub3QqIGhhcmRjb2RlIGRpcmVjdCBsaWJyYXJpZXMsIGJ1dCBBSVggNC4xLls0NV0gbGQgZG9lcy4KCjE5OTctMDQtMDcgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluIChoYXJkY29kZV9hY3Rpb24pOiBGaXggc2lsbHkgbG9naWMgZXJyb3IuICBGcm9tCglCcnVubyBIYWlibGUuCgoxOTk3LTA0LTA1ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGluc3RhbGwpOiBSZWxpbmsgaWYgaGFyZGNvZGVfYWN0aW9uIGlzIGByZWxpbmsnLAoJcmF0aGVyIHRoYW4gdXNpbmcgY29tcGxleCBjb25kaXRpb25hbHMgYmFzZWQgb24gdGhlIG90aGVyCgloYXJkY29kZSB2YXJpYWJsZXMuCgoJKiBsdGNvbmZpZy5pbiAoaGFyZGNvZGVfYWN0aW9uKTogU2V0IHRvIGByZWxpbmsnLCBub3QgYGltbWVkaWF0ZScsCglpZiB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZyBkaXJlY3Rvcmllcy4gIFJlYXJyYW5nZQoJY29uZGl0aW9uYWxzIHRvIG1ha2UgdGhlIGludGVudCBjbGVhcmVyLCBvdGhlcndpc2UgdGhpcyBjYW4gYmUgb25lCgloZWxsaXNoIHBpZWNlIG9mIGNvZGUgZm9yIHRoZSBhbHJlYWR5LWRpenp5IGxpYnRvb2wgbWFpbnRhaW5lci4KCjE5OTctMDQtMDIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIHJlcGxmdW5jLm00OiBEZWxldGUgZnJvbSB0aGUgZGlzdHJpYnV0aW9uLiAgRG9jdW1lbnRhdGlvbiBub3cKCWRlc2NyaWJlcyBob3cgdG8gc2V0IExUQUxMT0NBIGFuZCBMVExJQk9CSlMgaW4geW91ciBvd24KCWNvbmZpZ3VyZS5pbi4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IE1ha2Ugc3VyZSBhIGxpYnRvb2wgbGlicmFyeSBvbmx5IGNvdW50cyBhcwoJYSBzaGFyZWQgbGlicmFyeSBpZiBpdHMgbGlicmFyeV9uYW1lcyBhcmUgbm9uLW51bGwuCglVc2UgdGltZXN0YW1wcyBmb3IgLmxvJ3Mgd2hlbiBQSUMgaXMgdHVybmVkIG9mZiwgcmF0aGVyIHRoYW4KCXN5bWxpbmtpbmcgdG8gdGhlIHJlYWwgb2JqZWN0LiAgVGhpcyBoZWxwcyBpbnZhbGlkIG1peHR1cmVzIG9mIFBJQwoJYW5kIG5vbi1QSUMgdG8gZmFpbC4KCjE5OTctMDQtMDEgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogRGlzdHJpYnV0ZSBsaWJ0b29sLnByai4KCgkqIFNoYW1lbGVzcyBwbHVnOiBDaGFuZ2VkIHNvdXJjZSBjb2RlIG1hbmFnZW1lbnQgc3lzdGVtIGZyb20gQ1ZTCgl0byBQUkNTLgoKCSogbGlidG9vbC5zY206IEluaXRpYWwgR3VpbGUgaW1wbGVtZW50YXRpb24gb2YgbGlidG9vbC4KCgkqIGx0bWFpbi5zaC5pbjogQW4gdW5leHBlY3RlZCBpbmNvbnNpc3RlbmN5IGluIG15IHdob2xlIGFwcHJvYWNoCgl0byBzaGFyZWQgbGlicmFyaWVzIGhhcyBwcm92ZW4gdGhhdCBsaWJ0b29sIG5lZWRzIHRvIGJlIGNvbXBsZXRlbHkKCXJld3JpdHRlbiBpZiBJJ20gZ29pbmcgdG8gZ2l2ZSBmdWxsIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQgZm9yCglwbGF0Zm9ybXMgdGhhdCBkb24ndCB1c2UgdGhlIEdOVSBDIGxpYnJhcnkgdmVyc2lvbiAyICh3aGljaCB0byBteQoJa25vd2xlZGdlIGN1cnJlbnRseSBvbmx5IHdvcmtzIG9uIEdOVSBIdXJkIGFuZCBMaW51eC9HTlUgc3lzdGVtcykuCglQb3J0aW5nIHRoZSBHTlUgQyBsaWJyYXJ5IHNob3VsZCBub3QgYmUgZGlmZmljdWx0LCB0aG91Z2guCgoJUGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSB0aGUgZGxvcGVuKDMpIGZhbWlseSBvZiBmdW5jdGlvbnMgd2lsbAoJbmVlZCB0byBpbnN0YWxsIEdOVSBETEQgdmVyc2lvbiA0IGluIG9yZGVyIHRvIGJ1aWxkIGFueSBraW5kIG9mCglsaWJyYXJpZXMgYXQgYWxsLiAgVW5mb3J0dW5hdGVseSwgRExEIDQgd29uJ3QgYmUgcmVsZWFzZWQgZm9yIGEKCXdoaWxlLCBiZWNhdXNlIEkgbWFpbnRhaW4gaXQsIGFuZCBJJ20gdG9vIGJ1c3kgd29ya2luZyBvbiBsaWJ0b29sLgoKCUknbGwga2VlcCB0aGUgb2xkIGx0Y29uZmlnL2x0bWFpbi5zaCBpbXBsZW1lbnRhdGlvbiBhcm91bmQgZm9yIGFzCglsb25nIGFzIEkgY2FuLCBhbmQgY29udGludWUgYXBwbHlpbmcgYnVnIGZpeGVzLCBzbyB0aGF0IEknbGwgaGF2ZQoJYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIG5ldyBsaWJ0b29sIGltcGxlbWVudGF0aW9uLgoKCUl0IGxvb2tzIGxpa2UgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGV2ZW4gbW9yZSBjb21wbGV4IHRoYW4KCXRoZSBvcmlnaW5hbCAocHJlLTAuNykgbGlidG9vbC4gIEluaXRpYWwgZXN0aW1hdGVzIHNob3cgdGhhdCBpdAoJbWF5IGJlIHVwIHRvIDMgdGltZXMgc2xvd2VyLCBhbmQgNSB0aW1lcyBsYXJnZXIgdGhhbiBsaWJ0b29sLTAuOS4KCUknbGwgcHJvYmFibHkgaGF2ZSB0byByZXdyaXRlIGl0IGluIEd1aWxlIHRvIGdldCByZWFzb25hYmxlCglwZXJmb3JtYW5jZSwgd2hpY2ggd2lsbCBzZXZlcmVseSBsaW1pdCBpdHMgcG9ydGFiaWxpdHkgZm9yIGEKCXdoaWxlLgoKCVRoYXQgd2lsbCBhbHNvIGludHJvZHVjZSBhIGJvb3RzdHJhcHBpbmcgaXNzdWUsIHNpbmNlIHRoZSBuZXh0CglyZWxlYXNlIG9mIEd1aWxlIHdpbGwgdXNlIGxpYnRvb2wgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4gIFNvLAoJaWYgdXNlcnMgd2FudCB0byBoYXZlIHNoYXJlZCBHdWlsZSBsaWJyYXJpZXMsIHRoZXkgd2lsbCBoYXZlIHRvCgljb25maWd1cmUgR3VpbGUgd2l0aCBgLS1kaXNhYmxlLXNoYXJlZCcsIGNvbXBpbGUgaXQsIGluc3RhbGwgaXQsCgl0aGVuIHJlY29uZmlndXJlIEd1aWxlIHdpdGggYC0tZW5hYmxlLXNoYXJlZCcgYW5kIHJlcGVhdC4KCglJIHdhcyBob3BpbmcgdG8gZ2V0IGxpYnRvb2wgMS4wIG91dCB0aGUgZG9vciBieSBlYXJseSBBcHJpbCwgYnV0Cglub3cgaXQgbG9va3MgbGlrZSBpdCB3aWxsIHRha2UgYXQgbGVhc3QgYW5vdGhlciB5ZWFyIGJlZm9yZSBpdCdsbAoJYmUgdXNhYmxlIGJ5IHRoZSBwdWJsaWMgYXQgbGFyZ2UuICBBcHJpbCBmb29scy4gIGxpYnRvb2wuc2NtCglkb2Vzbid0IGV4aXN0IHlldCwgZWl0aGVyLgoKCSogbHRjb25maWcuaW4gKHZlcmlmeV9ob3N0KTogUmVtb3ZlIHJlZHVuZGFudCBgVHJhbnNmb3JtICotKi1saW51eCoKCXRvICotKi1saW51eC1nbnUqJy4gIEZyb20gQnJ1bm8gSGFpYmxlLgoKCSogdGVzdHMvaGFyZGNvZGUudGVzdDogQUlYIDMgZG9lc24ndCBoYXZlIHN0cmluZ3MoMSkgc28gd2UgbmVlZCB0byBkbyBhCglmdW5ueSB0ciBhbmQgcGlwZSB0aGUgb3V0cHV0IHRvIGZncmVwLiAgRnJvbSBCcnVubyBIYWlibGUuCgoxOTk3LTAzLTMxICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBNYWtlZmlsZS5hbTogVXNlIHRoZSBuZXcgQVVUT01BS0UgYW5kIEFDTE9DQUwgdmFyaWFibGVzLgoKCSogbHRtYWluLnNoLmluIChsaW5rKTogT25seSBmYWlsIGlmIGEgY29udmVuaWVuY2UgbGlicmFyeSBkb2Vzbid0CglleGlzdCwgYW5kIHRoZSB1c2VyIHNwZWNpZmllZCAtd2hvbGUtYXJjaGl2ZS4KCUZpeCBzaGVsbCBxdW90aW5nIHRoYXQgd2FzIGJyZWFraW5nIEBPVVRQVVRAIHN1YnN0aXR1dGlvbi4KCjE5OTctMDMtMjggIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IFVzZSB0aGUgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvci4KCUNvbnZlbmllbmNlIGxpYnJhcmllcyBhcmUgbGlidG9vbCBvYmplY3RzIGlmIHdlJ3JlIG5vdCBidWlsZGluZwoJbGlidG9vbCBsaWJzLgoKCSogbHRjb25maWcuaW4gKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IpOiBBZGRlZCBpbiBjYXNlIHRoZQoJbGlua2VyIG9ubHkgaG9ub3VycyB0aGUgbGFzdCBvZiB0aGUgLXJwYXRoIGZsYWdzIChidXQgaXQgY2FuCgljb250YWluIG11bHRpcGxlIGNvbG9uLXNlcGFyYXRlZCBkaXJlY3RvcmllcyksIHN1Y2ggYXMgb24gT1NGLzEuCglSZXBvcnRlZCBieSBDYXJsIEQuIFJvdGguCgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBTZXQgdGhlIGRsbmFtZSBpZiAtZXhwb3J0LWR5bmFtaWMgaXMgZ2l2ZW4uCgkoaW5zdGFsbCwgdW5pbnN0YWxsKTogSGFuZGxlIHRoZSBkbG5hbWUgZmlsZSBzZXBhcmF0ZWx5LgoKCSogbHRjb25maWcuaW4gKGV4cG9ydF9keW5hbWljX2ZsYWcpOiBBZGRlZCB0byBhbGxvdyBwcm9ncmFtcyB0bwoJdXNlIHJlZmxleGl2ZSBkbG9wZW5zLgoKCSogbHRtYWluLnNoLmluOiBJbmNsdWRlIHRoZSBtb2RlIG5hbWUgaW4gYW55IGhlbHAgbWVzc2FnZXMuCgkoZGxuYW1lKTogTmV3IG1vZGUgdG8gZ2l2ZSB0aGUgbmFtZSB0byBiZSB1c2VkIHdpdGggZGxvcGVuKDMpLgoKCSogbHRjb25maWcuaW4gKEFSKTogQWxsb3cgQVIgdG8gYmUgc2V0IGJ5IHRoZSB1c2VyLCBhbmQgZXhwb3J0IGl0Cgl0byBsdG1haW4uc2guCgoJKiBsdG1haW4uc2guaW46IFJlbW92ZSBicm9rZW4gcHJvZmlsZWQgbGlicmFyeSBzdXBwb3J0LgoJQWRkZWQgYC13aG9sZS1hcmNoaXZlJyBhbmQgYC1uby13aG9sZS1hcmNoaXZlJyB0byBtYW5pcHVsYXRlCgljb252ZW5pZW5jZSBsaWJyYXJpZXMuCgoxOTk3LTAzLTI3ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBBbGxvdyB0aGUgY3JlYXRpb24gb2Ygc3RhdGljIGNvbnZlbmllbmNlCglsaWJyYXJpZXMgbWFkZSBvZiBsaWJ0b29sIG9iamVjdHMuICBTdWdnZXN0ZWQgYnkgRGF2aWQKCU1vc2Jlcmdlci1UYW5nLgoKMTk5Ny0wMy0yNSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW46IE9uIEFJWCwgbGlidG9vbCBhbHNvIG5lZWRzIHRvIGxvb2sgZm9yIGBCJyBzeW1ib2xzCglpbiBubSBvdXRwdXQuICBUaGVzZSBhcmUgZ2xvYmFsIHZhcmlhYmxlIGRlZmluaXRpb25zLgoKCSogbHRtYWluLnNoLmluOiBMaW5raW5nIHdpdGggLXN0YXRpYyBzaG91bGQgbGluayBhZ2FpbnN0IHRoZQoJbGlua2xpYiBpZiBvbGRfbGlicmFyeSBpcyBlbXB0eSAobGlrZSBpdCBpcyBvbiBBSVgpLgoKCSogbHRjb25maWcuaW46IENoYW5nZSB0aGUgb3JkZXIgb2YgT1MgZGV0ZWN0aW9uLCBzbyB0aGF0CglsaW51eC1nbnUqIGlzIGRldGVjdGVkIGJlZm9yZSBnbnUqLgoKCSogTWFrZWZpbGUuYW0gKGxpYnRvb2wpOiBVc2UgdGhlIGNvcnJlY3QgQ0MsIFJBTkxJQiwgTEQsIHdoZW4KCWdlbmVyYXRpbmcgbGlidG9vbC4gIEZyb20gQ2FybCBELiBSb3RoLgoKCSogY29uZmlndXJlLmluOiBGaW5kIG91dCB0aGUgdXNlci1zdXBwbGllZCBDQywgTEQsIFJBTkxJQi4gIEZyb20KCUNhcmwgRC4gUm90aC4KCjE5OTctMDMtMjQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbjogTGlua2luZyB3aXRoIC1zdGF0aWMgc2hvdWxkIGxpbmsgYWdhaW5zdCB0aGUgb2xkCglsaWJyYXJ5LCBub3QgbGlua2xpYi4KCgkqIFJFQURNRS1hdXRvbWFrZTogVXBkYXRlZCB0byBwb2ludCB0byBBdXRvbWFrZSAxLjFtLgoKMTk5Ny0wMy0xNSAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogZGVtby9tYWluLmM6IFVzZSBpdC4KCgkqIGRlbW8vZm9vLmg6IERlY2xhcmUgaXQuCgoJKiBkZW1vL2Zvby5jOiBBZGRlZCBkZWZpbml0aW9uIG9mIGBub3RoaW5nJyBzbyB0aGF0IHdlIGhhdmUgYW4KCWdsb2JhbCB2YXJpYWJsZSBkZWZpbml0aW9uLCBhcyB3ZWxsIGFzIGZ1bmN0aW9ucy4KCjE5OTctMDMtMTIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluOiBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcwoJY29uZmlndXJlZC4gIFJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCgoJKiBsdG1haW4uc2guaW46IEJvbWIgb3V0IGlmIG5vIGxpYnJhcnkgdHlwZXMgYXJlIGNvbmZpZ3VyZWQuCgoxOTk3LTAyLTIyICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbiwgbHRtYWluLnNoLmluIChoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjKTogUmVuYW1lZAoJZnJvbSBgaGFyZGNvZGVfbGliZGlyX2ZsYWcnLgoJKGxpYnJhcnlfbmFtZXNfc3BlYyk6IFJlbmFtZWQgZnJvbSBgbGliX25hbWVzJy4KCgkqIGx0Y29uZmlnLmluLCBsdG1haW4uc2guaW4gKGhhcmRjb2RlX2FjdGlvbik6IENoYW5nZSB2YWx1ZSBmcm9tCglgcnBhdGgnIHRvIGBpbW1lZGlhdGUnLgoKCSogcmVwbGZ1bmMubTQ6IEFkZCBBTV9GVU5DX0FMTE9DQSwgQU1fRlVOQ19NRU1DTVAsIGFuZAoJQU1fU1RSVUNUX1NUX0JMT0NLUy4KCjE5OTctMDItMTggIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluOiBUcmFuc2Zvcm0gKi0qLWxpbnV4KiB0byAqLSotbGludXgtZ251KiB0byBzdXBwb3J0CglvbGQtc3R5bGUgY29uZmlnLmd1ZXNzIHNjcmlwdHMuCgoxOTk3LTAyLTE3ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW46IENyZWF0ZSBvYmpkaXIgKmJlZm9yZSogbGlua2luZyBhIHByb2dyYW0gaW50byBpdC4KCjE5OTctMDItMTIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluOiBBbnkgbGQgLS12ZXJzaW9uIHRoYXQgcmV0dXJucyBHTlUgaXMgcHJvYmFibHkgYSBHTlUKCWxkLiAgRnJvbSBNYXJjdXMgRGFuaWVscy4KCgkqIGxpYnRvb2wubTQ6IEFkZGVkIEFNX1JFUExBQ0VfRlVOQ1MuCgoxOTk3LTAyLTExICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbjogVHJpdmlhbCBwb3J0IHRvICotKi1vc2Y0LiAgRnJvbSBCcnVubyBIYWlibGUuCgoxOTk3LTAyLTEwICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdGNvbmZpZy5pbjogQUlYIDMgYW5kIDQgbGQgb25seSBoYXJkY29kZXMgTElCUEFUSCBpZiAtTCBpcyBub3QKCXNwZWNpZmllZC4gIFRoaXMgYmVoYXZpb3VyIGlzIHRoZSBzYW1lIHdpdGggYm90aCB4bGMgYW5kIGdjYy4KCjE5OTctMDItMDcgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGRvYy9wbGF0Zm9ybXMudGV4aTogWWFheSEgIFdlIGZvdW5kIGEgd29ya2Fyb3VuZCBmb3IgSFAtVVgKCS9iaW4vc2ggYnVmZmVyIG92ZXJmbG93cy4gIEZyb20gRXJpYyBCYWNrdXMuCgoxOTk3LTAyLTAzICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBSZWxlYXNlIDAuOS4KCgkqIFBMQVRGT1JNUywgZG9jL3BsYXRmb3Jtcy50ZXhpLCBNYWtlZmlsZS5hbSwgZG9jL01ha2VmaWxlLmFtOgoJTW92ZSBQTEFURk9STVMgdG8gZG9jL3BsYXRmb3Jtcy50ZXhpLgoKCSogbHRtYWluLnNoLmluIChsaW5rKTogVXNlIGhhcmRjb2RlX2xpYmRpcl9mbGFnIHRvIGdldCBhIGxpYnJhcnkKCWRpcmVjdG9yeSBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoJVXNlIGhhcmRjb2RlX2FjdGlvbiwgYW5kIG1ha2UgbWFueSBzaW1wbGlmeWluZyBjaGFuZ2VzIHRvIGhhdmUKCWNvbXBpbGF0aW9uIGFuZCBmaW5hbGl6YXRpb24gYmUgY29uc2lzdGVudCB3aXRoIGVhY2ggb3RoZXIuCgoJKiBsdGNvbmZpZy5pbjogTm90IHNvIGFtYXppbmchICBJdCdzIEFJWCBjYyB0aGF0IGhhcmRjb2RlcyBkaXJlY3QKCWxpYnJhcmllcy4uLiBnY2MgZG9lc24ndCwgdGhvdWdoLgoJKGxpbmtfcnBhdGhfZmxhZyk6IENoYW5nZSBsaW5rX3JwYXRoX2ZsYWcgdG8gYmUKCWhhcmRjb2RlX2xpYmRpcl9mbGFnLgoJKGhhcmRjb2RlX2FjdGlvbik6IE5ldyB2YXJpYWJsZSB0byBzaW1wbGlmeSBsdG1haW4uc2guCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoVEVTVFMpOiBEbyB0aGUgZnVsbCBtYWtlIHNlcXVlbmNlIHdpdGgKCS0tZGlzYWJsZS1zaGFyZWQsIHRoZW4gd2l0aG91dC4KCgkqIHRlc3RzL2RlbW8tc3R0Yy50ZXN0OiBDb25maWd1cmUgdGhlIGRlbW8gZGlyZWN0b3J5IHdpdGgKCS0tZGlzYWJsZS1zaGFyZWQuCgoxOTk3LTAxLTI5ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW46IENoYW5nZSB0byB0YWtlIGFkdmFudGFnZSBvZiBsaW5rZXJzIHRoYXQgZG9uJ3QKCWhhcmRjb2RlIGRpcmVjdCBsaWJyYXJpZXMuCgoJKiBsdGNvbmZpZy5pbjogQW1hemluZyEgIEFJWCAzIGxpbmtlciBkb2Vzbid0IGhhcmRjb2RlIGRpcmVjdAoJbGlicmFyaWVzLCB3aGljaCBtYWtlcyBpdCBsZXNzIGJ1Z2d5IHRoYW4gQUlYIDQuICBSZXBvcnRlZCBieSBNYXJrCglLZXR0ZW5pcy4KCgkqIGRlbW8vY29uZmlndXJlLmluOiBDaGVjayBmb3IgdGhlIG1hdGggbGlicmFyeS4KCgkqIGRlbW8vZm9vLmMgKGZvbyk6IENoYW5nZSB0byB1c2UgdGhlIGBjb3MnIGZ1bmN0aW9uLCBzbyB0aGF0IHdlCgluZWVkIHRvIGxpbmsgYWdhaW5zdCBhbm90aGVyIGxpYnJhcnkuCgoJKiB0ZXN0cy9oYXJkY29kZS50ZXN0OiBSZXdyaXRlIHRvIHVzZSBmZ3JlcCBvbiBvdXRwdXQgZnJvbSBgYHN0cmluZ3MKCS1hJycgaWYgdXNpbmcgZmdyZXAgZGlyZWN0bHkgb24gdGhlIGJpbmFyeSBmaWxlcyBmYWlscy4gIEZyb20gTWFyawoJS2V0dGVuaXMuCgoxOTk3LTAxLTI4ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBFeHBvcnQgdGhlIFBBVEggdmFyaWFibGUgaW4gb3JkZXIgdG8gZmluZAoJdGhlIHByb2dyYW0sIHJhdGhlciB0aGFuIGdpdmluZyBhIGZ1bGwgcGF0aC4gIFRoaXMgaGVscHMgZ2l2ZSB0aGUKCXByb2dyYW0gYSBsZXNzIGNvbmZ1c2luZyB2YWx1ZSBmb3IgYXJndlswXS4KCgkqIHRlc3RzL2hhcmRjb2RlLnRlc3Q6IE1ha2Ugc3VyZSB0aGF0IC4uL2RlbW8vbGliaGVsbG8ubGEgcmVhbGx5IGlzIGEKCXNoYXJlZCBsaWJyYXJ5IGJlZm9yZSBydW5uaW5nIGhhcmRjb2RpbmcgdGVzdHMuCgoxOTk3LTAxLTI2ICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBSZWxlYXNlIDAuOC4KCjE5OTctMDEtMjQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIE1ha2VmaWxlLmFtIChkZW1vX2Rpc3RmaWxlcyk6IEFkZCBkZW1vL2FjaW5jbHVkZS5tNCB0byB0aGUKCWRpc3RyaWJ1dGlvbi4KCjE5OTctMDEtMjIgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGxpYnRvb2wubTQ6IEZvciBJUklYIDYsIGxkIG5lZWRzIC1uMzIgaWYgY2MgdXNlcyBpdC4gIFJlcG9ydGVkCglieSBCcnVubyBIYWlibGUuCgoJKiBsdGNvbmZpZy5pbjogSVJJWCBsZCBkb2VzIG5vdCBoYXJkY29kZSBkaXJlY3QgbGlicmFyaWVzLgoJUmVwb3J0ZWQgYnkgQnJ1bm8gSGFpYmxlLgoKMTk5Ny0wMS0xOCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW4sIGx0bWFpbi5zaC5pbiAoaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcik6IEFsbG93IG5ldwoJdmFsdWUsIGB1bnN1cHBvcnRlZCcsIHNpbmNlIG1vc3QgbGlua2VycyBkbyBub3QgYWxsb3cgeW91IHRvIHVzZQoJc2hsaWJwYXRoX3ZhciBmb3IgaW5pdGlhbCBsaW5raW5nLgoKCSogbHRjb25maWcuaW46IExvdHMgb2YgYnVnIGZpeGVzIGZyb20gQnJ1bm8gSGFpYmxlLiAgU2V0IHdsIG9uCglPU0YvMSwgZml4IGRlZmluaXRpb25zIG9mIGhhcmRjb2RlXyogdmFyaWFibGVzLgoJKGFyY2hpdmVfY21kcyk6IEZpeCBub3QgdG8gdXNlICtoIG9uIEhQLVVYIDkueC4gIFJlcG9ydGVkIGJ5IEJydW5vCglIYWlibGUuCgoJKiB0ZXN0cy9kZW1vLWNvbmYudGVzdDogVXNlIHRoZSBDT05GSUdfU0hFTEwgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbgoJcnVubmluZyBjb25maWd1cmUgaW4gdGhlIGRlbW8gZGlyZWN0b3J5LiAgRnJvbSBCcnVubyBIYWlibGUuCgoJKiB0ZXN0cy9NYWtlZmlsZS5hbSAoY2xlYW4tbG9jYWwpOiBNYWtlIGRpc3RjbGVhbiBpbiB0aGUgZGVtbyBkaXJlY3RvcnksCglzbyB0aGF0IGBgbWFrZSBjbGVhbjsgZW52IENDPWNjIG1ha2UgY2hlY2snJyB3b3JrcyBhcyBvbmUgd291bGQKCWV4cGVjdC4KCgkqIHRlc3RzL2RlbW8tbWFrZS50ZXN0OiBGaXggdHlwbyAodXNlICRtYWtlIGluc3RlYWQgb2YgbWFrZSkuICBSZXBvcnRlZAoJYnkgQWtpbSBEZW1haWxsZS4KCjE5OTctMDEtMTcgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGxpYnRvb2xpemUuaW46IEhhbmRsZSBleHBsaWNpdCBBQ19DT05GSUdfQVVYX0RJUiBzZXR0aW5ncy4KCVN1Z2dlc3RlZCBieSBBa2ltIERlbWFpbGxlLgoKCSogbGlidG9vbC5tNDogQ2hhbmdlIGx0Y29uZmlnIGxpbmUgdG8gdXNlICRDT05GSUdfU0hFTEwgd2hlbiBpdCBpcwoJc3BlY2lmaWVkLiAgUmVwb3J0ZWQgYnkgQnJ1bm8gSGFpYmxlLgoKMTk5Ny0wMS0xNiAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogZGVtby9NYWtlZmlsZS5hbSAoaGMtZGlyZWN0KTogRG8gYmV0dGVyIHNlYXJjaGluZyBmb3IgdGhlIHByb3BlcgoJbmFtZSB0byBkbyBhIGRpcmVjdCBsaW5rLgoJKGhjLWxpYnBhdGgpOiBNYWtlIGFsbG93YW5jZXMgaWYgc2hsaWJwYXRoX3ZhciBjYW5ub3QgYmUgdXNlZAoJdG8gZmluZCBsaWJyYXJpZXMgYXQgbGluayB0aW1lLCBzdWNoIGFzIG9uIEFJWC4KCgkqIE1ha2VmaWxlLmFtIChkZW1vX2Rpc3RmaWxlcyk6IFJlbW92ZSBhbnNpMmtuci4xIGFuZCBhbnNpMmtuci5jLgoKCSogZGVtby9mb28uYywgZGVtby9oZWxsby5jLCBkZW1vL21haW4uYzogQ2hhbmdlIEFOU0kgcHJvdG90eXBlcyB0bwoJS05SIGZvcm0sIGZvciBiZXR0ZXIgcG9ydGFiaWxpdHksIGFuZCBsZXNzIGFuc2kya25yIGhhaXIuCgoJKiBkZW1vL2NvbmZpZ3VyZS5pbjogUmVtb3ZlIEFNX0ZVTkNfUFJPVE9UWVBFUy4KCgkqIGRlbW8vTWFrZWZpbGUuYW06IFJlbW92ZSBhbnNpMmtuciBmcm9tIHRoZSBBVVRPTUFLRV9PUFRJT05TLgoKCSogZGVtby9hbnNpMmtuci4xLCBkZW1vL2Fuc2kya25yLmM6IFJlbW92ZWQgdGhlc2UgZmlsZXMuCgoJKiBsdG1haW4uc2guaW46IFVzZSAxPiYyIGNvbnNpc3RlbnRseSB0byBkaXJlY3QgZXJyb3JzIGFuZAoJd2FybmluZ3MgdG8gc3RkZXJyLgoJKGNvbXBpbGUpOiBGaXggbWlzc2luZyBzaW5nbGUgcXVvdGUuCgoJKiBsdGNvbmZpZy5pbiAoaGFyZGNvZGVfZGlyZWN0KTogT24gU29sYXJpcyBhdCBsZWFzdCwgdXNpbmcKCURJUi9saWJOQU1FLnNvIGRvZXMgbm90IGhhcmRjb2RlIERJUiwgc28gaW50cm9kdWNlIGEgbmV3IGhhcmRjb2RlCgl2YXJpYWJsZSB0byByZWZsZWN0IHRoYXQuCgoJKiBsdG1haW4uc2guaW4gKGxpbmspOiBJZiBsaW5raW5nIHdpdGggJGxpbmtfc3RhdGljX2ZsYWcgZmFpbHMsCgl0aGVuIHJldHJ5IHdpdGhvdXQgaXQsIGJ1dCBzdGlsbCB1c2UgdGhlIC5hIHZlcnNpb25zIG9mCgl1bmluc3RhbGxlZCBsaWJ0b29sIGFyY2hpdmVzLgoKCSogdGVzdHMvdGxpYnRvb2w6IFJld3JvdGUgdG8gZ3JhYiBhbGwgdGhlIHNldHRpbmdzIGZyb20gdGhlIGdlbmVyYXRlZAoJbGlidG9vbCBzY3JpcHQuCgoJKiB0ZXN0cy9oYXJkY29kZS50ZXN0OiBNYWtlIGFsbG93YW5jZXMgaWYgc2hsaWJwYXRoX3ZhciBjYW5ub3QgYmUgdXNlZAoJdG8gZmluZCBsaWJyYXJpZXMgYXQgbGluayB0aW1lLCBzdWNoIGFzIG9uIEFJWC4KCjE5OTctMDEtMTUgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IEV2YWwgJGxpbmtfc3RhdGljX2ZsYWcuICBSZXBvcnRlZCBieSBCcnVubwoJSGFpYmxlLgoKCSogUExBVEZPUk1TOiBBZGQgdG8gZGlzdHJpYnV0aW9uLiAgU3VnZ2VzdGVkIGJ5IEJydW5vIEhhaWJsZS4KCjE5OTctMDEtMTQgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIHRlc3RzL2RlbW8tY29uZi50ZXN0LCB0ZXN0cy9kZW1vLWluc3QudGVzdCwgdGVzdHMvZGVtby11bnN0LnRlc3QsCgl0ZXN0cy9oYXJkY29kZS50ZXN0OgoJVXNlICRtYWtlIGluc3RlYWQgb2YgbWFrZS4KCgkqIHRlc3RzL2RlZnMgKG1ha2UpOiBBZGQgZGVmaW5pdGlvbiBvZiAkbWFrZSB0aGF0IHVzZXMgdGhlICRNQUtFCgllbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0LiAgU3VnZ2VzdGVkIGJ5IEJydW5vIEhhaWJsZS4KCgkqIHRlc3RzL2RlbW8tdW5zdC50ZXN0IChsZWZ0b3ZlcnMpOiBDaGFuZ2UgdGhlIGZpbmQgY29tbWFuZCB0byBpZ25vcmUKCWZpbGVzIGJlZ2lubmluZyB3aXRoIGEgZG90LCBhcyBlZ3JlcCAtdiBkb2Vzbid0IHNlZW0gdG8gZG8gdGhlCgl0cmljay4gIFJlcG9ydGVkIGJ5IEJydW5vIEhhaWJsZS4KCjE5OTctMDEtMTMgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluOiBBZGQgc3VwcG9ydCBmb3IgU0NPIE9wZW5TZXJ2ZXIgNS54LiAgRnJvbQoJQ2hyaXN0b3BoZXIgT2xzZW4uCgoJKGNhbl9idWlsZF9zaGFyZWQpOiBJbml0aWFsaXplIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsIHNvIHRoYXQKCXNoYXJlZCBsaWJyYXJpZXMgYXJlbid0IGJ1aWx0IG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQKCXRoZW0uCgoJKiB0ZXN0cy9oYXJkY29kZS50ZXN0OiBBZGRlZCBhIHRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgbGlidG9vbCdzIGlkZWEgb2YKCWhhcmRjb2Rpbmcgc3lzdGVtIGxpbmtlcnMgaXMgY29ycmVjdC4KCjE5OTctMDEtMTEgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiwgbHRjb25maWcuaW4sIGxpYnRvb2xpemUuaW4sIGRvYy9saWJ0b29sLnRleGk6CglVcGRhdGUgdGhlIGNvcHlyaWdodCBjb21wbGV0aW9uIHllYXJzLgoKMTk5Ny0wMS0wOCAgR29yZG9uIE1hdHppZ2tlaXQgIDxnb3JkQGdudS5haS5taXQuZWR1PgoKCSogbHRjb25maWcuaW46IFBvcnQgdG8gSVJJWCA1LjMsIDYuMi4KCjE5OTctMDEtMDYgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0Y29uZmlnLmluOiBIUC1VWCA5IHN1cHBvcnQgaXMgdGhlIHNhbWUgYXMgSFAtVVggMTAsIHNvIHRoZQoJcG9ydCBpcyB0cml2aWFsLgoKCSogbGlidG9vbGl6ZS5pbjogQWRkIC0tZHJ5LXJ1biBvcHRpb24sIC1uIGZvciBzaG9ydC4KCjE5OTctMDEtMDMgIEdvcmRvbiBNYXR6aWdrZWl0ICA8Z29yZEBnbnUuYWkubWl0LmVkdT4KCgkqIGx0bWFpbi5zaC5pbiAobGluayk6IE9uIGF0IGxlYXN0IFN1bk9TLCAvYmluL3NoIGRvZXNuJ3QKCXVuZGVyc3RhbmQgImV4cG9ydCBzb21ldGhpbmc9dmFsIi4gIEZyb20gQnJ1bm8gSGFpYmxlLgoKCSogdGVzdHMvTWFrZWZpbGUuYW0gKGRpc3RjbGVhbi1sb2NhbCk6IFJlbW92ZSBhbGwgZmlsZXMgdGhhdCB0aGUgdGVzdHMKCW1heSBoYXZlIGNyZWF0ZWQuICBSZXBvcnRlZCBieSBCcnVubyBIYWlibGUuCgoJKiBGb3IgYWxsIHRlc3RzLCBkaXNjb3ZlciBzcmNkaXIgd2hlbiBydW5uaW5nIGZyb20gdGhlIGNvbW1hbmQKCWxpbmUuCgoJKiB0ZXN0cy9kZW1vLXVuc3QudGVzdDogRG9uJ3QgZmFpbCBpZiBtYWtlIHVuaW5zdGFsbCBkb2Vzbid0IGRlbGV0ZQoJZmlsZXMgYmVnaW5uaW5nIHdpdGggYSBkb3QsIHNpbmNlIHNwdXJpb3VzIC5uZnNYWFggZmlsZXMgbWF5IGJlCglwcmVzZW50IHdoZW4gcnVubmluZyBORlMuICBSZXBvcnRlZCBieSBCcnVubyBIYWlibGUuCgoxOTk3LTAxLTAyICBHb3Jkb24gTWF0emlna2VpdCAgPGdvcmRAZ251LmFpLm1pdC5lZHU+CgoJKiBsdG1haW4uc2guaW4gKGNvbXBpbGUpOiBSZWNvZ25pemUgdmFsaWQgc291cmNlIGZpbGUgc3VmZml4ZXMgZm9yCglGb3J0cmFuIGFuZCBDKysuCgoJKiB0ZXN0cy9zdWZmaXgudGVzdDogTmV3IHRlc3QgdG8gZ3VhcmFudGVlIHRoYXQgbGlidG9vbCBjb21waWxlCglyZWNvZ25pemVzIHZhbGlkIHNvdXJjZSBmaWxlIHN1ZmZpY2VzLgoKQ29udGludWVkIGluIENoYW5nZUxvZy4xOTk2Cg==