ICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuNwogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgo9PT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGlzIHZlcnNpb24gb2YgdGhlIENvbW1vbnMKQ29uZmlndXJhdGlvbiBjb21wb25lbnQuIEl0IGRlc2NyaWJlcyB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KVGhlIENvbW1vbnMgQ29uZmlndXJhdGlvbiBzb2Z0d2FyZSBsaWJyYXJ5IHByb3ZpZGVzIGEgZ2VuZXJpYyBjb25maWd1cmF0aW9uCmludGVyZmFjZSB3aGljaCBlbmFibGVzIGFuIGFwcGxpY2F0aW9uIHRvIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYSB2YXJpZXR5Cm9mIHNvdXJjZXMuCgpUb29scyB0byBhc3Npc3QgaW4gdGhlIHJlYWRpbmcgb2YgY29uZmlndXJhdGlvbi9wcmVmZXJlbmNlcyBmaWxlcyBpbgp2YXJpb3VzIGZvcm1hdHMKCk1pbm9yIHJlbGVhc2Ugd2l0aCBuZXcgZmVhdHVyZXMgYW5kIHVwZGF0ZWQgZGVwZW5kZW5jaWVzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBDT05GSUdVUkFUSU9OLTc2NTogIFJlZmFjdG9yIFhNTENvbmZpZ3VyYXRpb24ud3JpdGUoV3JpdGVyKSB0byBhZGQgWE1MQ29uZmlndXJhdGlvbi53cml0ZShXcml0ZXIsIFRyYW5zZm9ybWVyKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCkZpeGVkIEJ1Z3M6Cm8gQ09ORklHVVJBVElPTi03NjE6ICBTaW5nbGUgYXJndW1lbnQgRGF0YUNvbmZpZ3VyYXRpb24gQVBJcyBhbHdheXMgY3JlYXRlIGVtcHR5IGFycmF5cy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc2NzogIE51bGxQb2ludGVyRXhjZXB0aW9uIGluIFhNTENvbmZpZ3VyYXRpb24jY3JlYXRlVHJhbnNmb3JtZXIoKSB3aGVuIG5vIEZpbGVMb2NhdG9yIGlzIHNldC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc2ODogIFhNTENvbmZpZ3VyYXRpb24jd3JpdGUgZG9lcyBub3QgaW5kZW50IFhNTCBlbGVtZW50cy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc3MTogIFVwZGF0ZSBjb20uZmFzdGVyeG1sLmphY2tzb24uY29yZTpqYWNrc29uLWRhdGFiaW5kIDIuMTAuMCAtPiAyLjEwLjEuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQ09ORklHVVJBVElPTi03NzM6ICBVc2VyJ3MgR3VpZGUgPiBQcm9wZXJ0aWVzIGZpbGVzID4gU2F2aW5nIC0gc21hbGwgZG9jdW1lbnRhdGlvbiBidWdzICM0MS4gVGhhbmtzIHRvIERhbiBEcmFndXQuCgpDaGFuZ2VzOgpvIENPTkZJR1VSQVRJT04tNzYyOiAgVXNlIHZhcmlhYmxlIGFyZ3VtZW50cy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBdY29tLnB1cHB5Y3Jhd2wudG9vbHM6Y2hlY2tzdHlsZSBmcm9tIDguMjQgdG8gIDguMjUuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQ09ORklHVVJBVElPTi03NjM6ICBVcGRhdGUgY29tLmZhc3RlcnhtbC5qYWNrc29uLmNvcmU6amFja3Nvbi1kYXRhYmluZCBmcm9tIDIuOS45IHRvIDIuMTAuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgICAgICAgICAgIFt0ZXN0XSBvcmcuZWFzeW1vY2s6ZWFzeW1vY2sgNC4wLjIgLT4gNC4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzc1OiAgVXBkYXRlIEFwYWNoZSBDb21tb25zIFZGUyBmcm9tIDIuNC4xIHRvIDIuNS4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzc3OiAgVXBkYXRlIEFwYWNoZSBDb21tb25zIFZGUyBmcm9tIDIuNS4wIHRvIDIuNi4wLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzc4OiAgVXBkYXRlIG9wdGlvbmFsIEFwYWNoZSBDb21tb25zIENvZGVjIGZyb20gMS4xMyB0byAxLjE0LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIHRlc3RzIGZyb20gSlVuaXQgNC4xMiB0byA0LjEzLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzc5OiAgVXBkYXRlIG9wdGlvbmFsIGphY2tzb24tZGF0YWJpbmQgZnJvbSAyLjEwLjEgdG8gMi4xMC4yLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzgzOiAgVXBkYXRlIGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5jb3JlOmphY2tzb24tZGF0YWJpbmQgZnJvbSAyLjEwLjIgdG8gMi4xMC4zLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzg0OiAgVXBkYXRloG9yZy55YW1sOnNuYWtleWFtbCBmcm9tIDEuMjUgdG8gMS4yNiBhbmQgdHdlYWsgcGFyc2VyIGNvbmZpZ3VyYXRpb24uIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQ09ORklHVVJBVElPTi03ODU6ICBVcGRhdGUgb3JnLnNwcmluZ2ZyYW1ld29yazpzcHJpbmctKiBmcm9tIDQuMy4yNS5SRUxFQVNFIHRvIDQuMy4yNi5SRUxFQVNFLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIG9yZy5hcGFjaGUuY29tbW9uczpjb21tb25zLXBhcmVudCBmcm9tIDQ4IHRvIDUwIFRoYW5rcyB0byBSb2IgVG9tcGtpbnMuCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24sIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb25maWd1cmF0aW9uLwoKRG93bmxvYWQgaXQgZnJvbSBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb25maWd1cmF0aW9uLy9kb3dubG9hZF90ZXh0LmNnaQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjYKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwogICAgICAgICAgICAgICAgICAgICAgICAyMDE5LTA5LTEzCgoKSU5UUk9EVUNUSU9OOgo9PT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGlzIHZlcnNpb24gb2YgdGhlIENvbW1vbnMKQ29uZmlndXJhdGlvbiBjb21wb25lbnQuIEl0IGRlc2NyaWJlcyB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KVGhlIENvbW1vbnMgQ29uZmlndXJhdGlvbiBzb2Z0d2FyZSBsaWJyYXJ5IHByb3ZpZGVzIGEgZ2VuZXJpYyBjb25maWd1cmF0aW9uCmludGVyZmFjZSB3aGljaCBlbmFibGVzIGFuIGFwcGxpY2F0aW9uIHRvIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYSB2YXJpZXR5Cm9mIHNvdXJjZXMuCgpUb29scyB0byBhc3Npc3QgaW4gdGhlIHJlYWRpbmcgb2YgY29uZmlndXJhdGlvbi9wcmVmZXJlbmNlcyBmaWxlcyBpbgp2YXJpb3VzIGZvcm1hdHMKCk1pbm9yIHJlbGVhc2Ugd2l0aCBuZXcgZmVhdHVyZXMgYW5kIHVwZGF0ZWQgZGVwZW5kZW5jaWVzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyAgICAgICAgICAgICAgICAgICAgIERvY3VtZW50ICJpbmNsdWRlT3B0aW9uYWwiIG9uIHRoZSBzaXRlLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzU2OiAgQWxsb3cgZm9yIGN1c3RvbSBiZWhhdmlvciB0byBoYW5kbGUgZXJyb3JzIGxvYWRpbmcgaW5jbHVkZWQgcHJvcGVydGllcyBmaWxlcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCkZpeGVkIEJ1Z3M6Cm8gQ09ORklHVVJBVElPTi03NTA6ICBYTUxQcm9wZXJ0eUxpc3RDb25maWd1cmF0aW9uIGNhbm5vdCBzZXQgYXJyYXlzIGluIHRoZSBjb3JyZWN0IHBsaXN0IGZvcm0uIFRoYW5rcyB0byBKYXNvbiBQaWNrZW5zLCBHYXJ5IEdyZWdvcnksIEVtbWFudWVsIEJvdXJnLgpvICAgICAgICAgICAgICAgICAgICAgRml4IEphdmFkb2MgZm9yIG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5Qcm9wZXJ0aWVzQ29uZmlndXJhdGlvbi5nZXRJbmNsdWRlT3B0aW9uYWwoKS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc2MDogIFByb3BlcnRpZXMgZmlsZSB1c2luZyBjeWNsaWNhbCBpbmNsdWRlcyBjYXVzZSBhIFN0YWNrT3ZlcmZsb3dFcnJvciBpbnN0ZWFkIG9mIGRldGVjdGluZyB0aGUgbWlzY29uZmlndXJhdGlvbi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCkNoYW5nZXM6Cm8gQ09ORklHVVJBVElPTi03NTE6ICBVcGRhdGUgQXBhY2hlIENvbW1vbnMgVGV4dCBmcm9tIDEuNiB0byAxLjcuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQ09ORklHVVJBVElPTi03NTI6ICBVcGRhdGUgQXBhY2hlIENvbW1vbnMgVkZTIGZyb20gMi4zIHRvIDIuNC4xLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzU0OiAgVXBkYXRlIEFwYWNoZSBDb21tb25zIFRleHQgZnJvbSAxLjcgdG8gMS44LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzU1OiAgW0NWRS0yMDE0LTAxMTRdIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBCZWFuVXRpbHMgZnJvbSAxLjkuMyB0byAxLjkuNC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgICAgICAgICAgIEZpeCBzeW50YXggaW4gdXNlciBndWlkZSBkb2N1bWVudGF0aW9uICMzMy4gVGhhbmtzIHRvIEtldmluIFdhbmcuCm8gQ09ORklHVVJBVElPTi03NTc6ICBVcGRhdGUgb3JnLnlhbWw6c25ha2V5YW1sIGZyb20gMS4yNCB0byAxLjI1LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIHRlc3RzIGZyb20gb3JnLmFwYWNoZS5jb21tb25zOmNvbW1vbnMtZGJjcDIgMi42LjAgdG8gMi43LjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICAgICAgICAgICBVcGRhdGUgdGVzdHMgZnJvbSBvcmcuYXBhY2hlLmNvbW1vbnM6Y29tbW9ucy1wb29sMiAyLjYuMiB0byAyLjcuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc1ODogIFVwZGF0ZSBjb21tb25zLWNvZGVjOmNvbW1vbnMtY29kZWMgZnJvbSAxLjEyIHRvIDEuMTMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICAgICAgICAgICBVcGRhdGUgdGVzdHMgZnJvbSBvcmcuaHNxbGRiOmhzcWxkYiAyLjQuMSB0byAyLjUuMC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSB0ZXN0cyBmcm9tIGNvbS5zdW4ubWFpbDptYWlsYXBpIDEuNi4zIHRvIDEuNi40LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzU5OiAgVXBkYXRlIFNwcmluZyBmcm9tIDQuMy4yNC5SRUxFQVNFIHRvIDQuMy4yNS5SRUxFQVNFLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvICAgICAgICAgICAgICAgICAgICAgVXBkYXRlIG1hdmVuLWNoZWNrc3R5bGUtcGx1Z2luIGZyb20gMy4wLjAgdG8gMy4xLjAuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gICAgICAgICAgICAgICAgICAgICBVc2UgY3VycmVudCB2ZXJzaW9uIG9mIENoZWNrc3R5bGU6IDYuMTggdG8gOC4yNC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vCgpEb3dubG9hZCBpdCBmcm9tIGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vZG93bmxvYWRfY29uZmlndXJhdGlvbi5jZ2kKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi41CiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCgpJTlRST0RVQ1RJT046Cj09PT09PT09PT09PT0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoaXMgdmVyc2lvbiBvZiB0aGUgQ29tbW9ucwpDb25maWd1cmF0aW9uIGNvbXBvbmVudC4gSXQgZGVzY3JpYmVzIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyB2ZXJzaW9uLgpUaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uIHNvZnR3YXJlIGxpYnJhcnkgcHJvdmlkZXMgYSBnZW5lcmljIGNvbmZpZ3VyYXRpb24KaW50ZXJmYWNlIHdoaWNoIGVuYWJsZXMgYW4gYXBwbGljYXRpb24gdG8gcmVhZCBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSBhIHZhcmlldHkKb2Ygc291cmNlcy4KCk1pbm9yIHJlbGVhc2Ugd2l0aCBuZXcgZmVhdHVyZXMgYW5kIHVwZGF0ZWQgZGVwZW5kZW5jaWVzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCgpGaXhlZCBCdWdzOgpvIENPTkZJR1VSQVRJT04tNzMxOiAgQWxsb3cgdXNlciB0byBzcGVjaWZ5IHRoZSBjb21tZW50cyBhbmQgc2VwYXJhdG9yIGNoYXJzLiBUaGFua3MgdG8gU2h1YWkgWmhhbmcsIEdhcnkgR3JlZ29yeS4KCkNoYW5nZXM6Cm8gQ09ORklHVVJBVElPTi03Mzg6ICBVcGRhdGUgSmFja3NvbiBmcm9tIDIuOS43IHRvIDIuOS44LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzM5OiAgVXBkYXRlIEFwYWNoZSBDb21tb25zIENvZGVjIGZyb20gMS4xMSB0byAxLjEyLiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzQwOiAgVXBkYXRlIEFwYWNoZSBDb21tb25zIFZGUyBmcm9tIDIuMiB0byAyLjMuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQ09ORklHVVJBVElPTi03NDE6ICBVcGRhdGUgU3ByaW5nIGZyb20gNC4zLjE5IHRvIDQuMy4yMi4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc0MzogIFVwZGF0ZSBvcHRpb25hbCBsaWJyYXJ5IHNuYWtleWFtbCBmcm9tIDEuMjMgdG8gMS4yNC4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc0NzogIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBMYW5nIGZyb20gMy44LjEgdG8gMy45LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzQ2OiAgVXBkYXRlIEphY2tzb24gZnJvbSAyLjkuOCB0byAyLjkuOS4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KbyBDT05GSUdVUkFUSU9OLTc0NzogIFVwZGF0ZSBTcHJpbmcgZnJvbSA0LjMuMjIgdG8gNC4zLjI0LiBUaGFua3MgdG8gR2FyeSBHcmVnb3J5LgpvIENPTkZJR1VSQVRJT04tNzQ1OiAgQWRkIHRoZSBzcGVjaWFsIGtleSAiaW5jbHVkZW9wdGlvbmFsIiBmb3IgcHJvcGVydGllcyBmaWxlcy4gVGhhbmtzIHRvIEdhcnkgR3JlZ29yeS4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuNAogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgo9PT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGlzIHZlcnNpb24gb2YgdGhlIENvbW1vbnMKQ29uZmlndXJhdGlvbiBjb21wb25lbnQuIEl0IGRlc2NyaWJlcyB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KVGhlIENvbW1vbnMgQ29uZmlndXJhdGlvbiBzb2Z0d2FyZSBsaWJyYXJ5IHByb3ZpZGVzIGEgZ2VuZXJpYyBjb25maWd1cmF0aW9uCmludGVyZmFjZSB3aGljaCBlbmFibGVzIGFuIGFwcGxpY2F0aW9uIHRvIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYSB2YXJpZXR5Cm9mIHNvdXJjZXMuCgpNaW5vciByZWxlYXNlIHdpdGggbmV3IGZlYXR1cmVzIGFuZCB1cGRhdGVkIGRlcGVuZGVuY2llcy4KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpORVcgRkVBVFVSRVMKPT09PT09PT09PT09CgpvIENPTkZJR1VSQVRJT04tNzEyOiAgRmlsZUhhbmRsZXJSZWxvYWRpbmdEZXRlY3RvciBub3cgaGFzIGEgbmV3IHJlZnJlc2goKSBtZXRob2QgdG8KICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemUgdGhlIHJlbG9hZGluZyBzdGF0ZSBmcm9tIHRoZSB1bmRlcmx5aW5nIGZpbGUuIFRoaXMgbmV3CiAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgaXMgY2FsbGVkIGJ5IERlZmF1bHRSZWxvYWRpbmdEZXRlY3RvckZhY3Rvcnkgd2hlbiBhIG5ldyBkZXRlY3RvcgogICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgaXMgY3JlYXRlZC4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgYSBjaGFuZ2VkIGNvbmZpZ3VyYXRpb24gZmlsZQogICAgICAgICAgICAgICAgICAgICAgaXMgZGlyZWN0bHkgZGV0ZWN0ZWQgb24gdGhlIGZpcnN0IGludm9jYXRpb24gb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICBpc1JlbG9hZGluZ1JlcXVpcmVkKCkgbWV0aG9kLiBUaGFua3MgdG8gUm9sbGFuZCBIb2JiaWUuCm8gQ09ORklHVVJBVElPTi03MTM6ICBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgY2FuIG5vdyBiZSBjb252ZXJ0ZWQgdG8gcmVndWxhciBleHByZXNzaW9ucy4gVGhhbmtzIHRvIExhcnMgVy4KbyBDT05GSUdVUkFUSU9OLTcxNTogIFdpdGggSnVwSU9GYWN0b3J5IGEgbmV3IElPRmFjdG9yeSBpbXBsZW1lbnRhdGlvbiBpcyBub3cgYXZhaWxhYmxlIHRoYXQKICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudHMgaGFuZGxpbmcgb2Ygd2hpdGVzcGFjZSBpbiBhIHdheSBjbG9zZXIgdG8gamF2YS51dGlsLlByb3BlcnRpZXMuCiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHdoZW4gc3RyaWN0ZXIgY29tcGF0aWJpbGl0eSB3aXRoIEphdmEgc3RhbmRhcmQKICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgcHJvcGVydGllcyBmaWxlcyBpcyBuZWVkZWQuIFRoYW5rcyB0byBQYXRyaWNrIFNjaG1pZHQuCm8gQ09ORklHVVJBVElPTi03MTY6ICBKdXBJT0ZhY3RvcnkgKGludHJvZHVjZWQgZm9yIENPTkZJR1VSQVRJT04tNzE1KSBhbHNvIGltcGxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgIGhhbmRsaW5nIG9mIGVzY2FwZSBzZXF1ZW5jZXMgaW4gYSB3YXkgY2xvc2VyIHRvIGphdmEudXRpbC5Qcm9wZXJ0aWVzLiBUaGFua3MgdG8gUGF0cmljayBTY2htaWR0LgpvIENPTkZJR1VSQVRJT04tNzI0OiAgQWRkIHN1cHBvcnQgZm9yIENvbW1vbnMgVGV4dCAxLjQgbG9jYWxob3N0IHN0cmluZyBsb29rdXAgYXMgYSBkZWZhdWx0IGxvb2t1cC4KbyBDT05GSUdVUkFUSU9OLTcyNjogIEFkZCBzdXBwb3J0IGZvciBDb21tb25zIFRleHQgMS41IG5ldyBzdHJpbmcgbG9va3VwcyBhcyBkZWZhdWx0IGxvb2t1cHMuCgpGSVhFRCBCVUdTCj09PT09PT09PT0KCm8gQ09ORklHVVJBVElPTi03MTA6ICBGaXhlZCBudW1lcm91cyB0eXBvcyBpbiB1c2VyIGd1aWRlcy4gVGhhbmtzIHRvIHRoYzIwMi4KbyBDT05GSUdVUkFUSU9OLTcxMTogIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBMYW5nIGZyb20gMy43IHRvIDMuOC4xLgpvIENPTkZJR1VSQVRJT04tNzI3OiAgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yLkRhdGFiYXNlQ29uZmlndXJhdGlvbiBuZXZlciBjbG9zZXMgcmVzdWx0IHNldHMgYW5kIHN0YXRlbWVudHMuCgpDSEFOR0VTCj09PT09PT0KCm8gQ09ORklHVVJBVElPTi03MjA6ICBSZXBsYWNlIHVzZSBvZiBkZXByZWNhdGVkIENvbW1vbnMgTGFuZyBzdHJpbmcgc3Vic3RpdHV0aW9uIGNvZGUgZm9yIENvbW1vbnMgVGV4dC4KbyBDT05GSUdVUkFUSU9OLTY5NDogIFVwZGF0ZSBKYXZhIHJlcXVpcmVtZW50IGZyb20gdmVyc2lvbiA3IHRvIDguCm8gQ09ORklHVVJBVElPTi03MjE6ICBVcGRhdGUgSmFja3NvbiBmcm9tIDIuOS42IHRvIDIuOS43LgpvIENPTkZJR1VSQVRJT04tNzIyOiAgVXBkYXRlIG9wdGlvbmFsIGRlcGVuZGVuY3kgc25ha2V5YW1sIGZyb20gMS4yMSB0byAxLjIzLgpvIENPTkZJR1VSQVRJT04tNzIzOiAgVXBkYXRlIG9wdGlvbmFsIFNwcmluZyBkZXBlbmRlbmNpZXMgZnJvbSA0LjMuMTguUkVMRUFTRSB0byA0LjMuMTkuUkVMRUFTRS4KbyBDT05GSUdVUkFUSU9OLTcyNTogIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBUZXh0IGZyb20gMS40IHRvIDEuNS4KbyBDT05GSUdVUkFUSU9OLTcyODogIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBUZXh0IGZyb20gMS41IHRvIDEuNi4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vCgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjMKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKPT09PT09PT09PT09PQoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBDb21tb25zCkNvbmZpZ3VyYXRpb24gY29tcG9uZW50LiBJdCBkZXNjcmliZXMgdGhlIGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHZlcnNpb24uClRoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gc29mdHdhcmUgbGlicmFyeSBwcm92aWRlcyBhIGdlbmVyaWMgY29uZmlndXJhdGlvbgppbnRlcmZhY2Ugd2hpY2ggZW5hYmxlcyBhbiBhcHBsaWNhdGlvbiB0byByZWFkIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIGEKdmFyaWV0eSBvZiBzb3VyY2VzLgoKVmVyc2lvbiAyLjMgaXMgYW5vdGhlciBtYWludGVuYW5jZSByZWxlYXNlIGZvciB0aGUgQ29uZmlndXJhdGlvbiAyLnggc2VyaWVzLiBJdApjb250YWlucyBidWcgZml4ZXMgYW5kIGFsc28gYSBmZXcgbmV3IGZlYXR1cmVzIGxpa2Ugc3VwcG9ydCBmb3IgRmlsZSBhbmQgUGF0aAphcyBkYXRhIHR5cGVzLiBUaGUgcmVsZWFzZSBpcyBmdWxseSBzb3VyY2UgYW5kIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggdmVyc2lvbgoyLjIuCgpDb21tb25zIENvbmZpZ3VyYXRpb24gMi4zIHJlcXVpcmVzIEphdmEgMS43IG9yIGhpZ2hlci4KCk5ldyBmZWF0dXJlcwo9PT09PT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTY5MgogIENvbnZlcnNpb25FeGNlcHRpb25zIHRocm93biB3aGVuIGFjY2Vzc2luZyB0aGUgcHJvcGVydGllcyBvZiBhIGNvbmZpZ3VyYXRpb24KICBub3cgY29udGFpbiB0aGUgb3JpZ2luYWwgY2F1c2Ugb2YgdGhlIGV4Y2VwdGlvbi4KCm8gQ09ORklHVVJBVElPTi02OTMKICBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgY2FuIG5vdyBiZSBjb252ZXJ0ZWQgdG8gdGhlIGRhdGEgdHlwZXMgRmlsZSBhbmQKICBQYXRoLgoKbyBDT05GSUdVUkFUSU9OLTY5OAogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuTWFwQ29uZmlndXJhdGlvbi50b1N0cmluZygpLgoKbyBDT05GSUdVUkFUSU9OLTY5OAogIEFkZCB0b1N0cmluZygpIG1ldGhvZHMgaGVyZSBhbmQgdGhlcmUgdG8gaGVscCBkZWJ1Z2dpbmcuCgpvIENPTkZJR1VSQVRJT04tNzAxCiAgQ29tcG9zaXRlQ29uZmlndXJhdGlvbiBub3cgc3VwcG9ydHMgYW4gYWRkQ29uZmlndXJhdGlvbkZpcnN0KCkgbWV0aG9kIHRvIGFkZAogIGNoaWxkIGNvbmZpZ3VyYXRpb25zIHdpdGggYSBoaWdoZXIgcHJpb3JpdHkuCgpGaXhlZCBCdWdzCj09PT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTY1MgogIFJvb3Qgbm9kZSBhdHRyaWJ1dGVzIGFyZSBub3cgdXBkYXRlZCBjb3JyZWN0bHkgd2hlbiBsb2FkaW5nIFhNTCBjb25maWd1cmF0aW9uCiAgZmlsZXMuCgpvIENPTkZJR1VSQVRJT04tNjg2CiAgSlNPTkNvbmZpZ3VyYXRpb24gY2FuIG5vdyBoYW5kbGUgbGlzdCBzdHJ1Y3R1cmVzIHdpdGggY29tcGxleCBvYmplY3RzIGFzCiAgZWxlbWVudHMuCgpvIENPTkZJR1VSQVRJT04tNjg3CiAgRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBDb21iaW5lZENvbmZpZ3VyYXRpb25CdWlsZGVyLiBCdWlsZGVyIGZvciB0aGUgY2hpbGQKICBzb3VyY2VzIHdlcmUgY3JlYXRlZCBlYWNoIHRpbWUgYSBuZXcgcmVzdWx0IGNvbmZpZ3VyYXRpb24gd2FzIHJlcXVlc3RlZDsgdGh1cwogIHRoZSBsaXN0IHdpdGggY2hpbGQgYnVpbGRlcnMgZ290IGxvbmdlciBhbmQgbG9uZ2VyLiBUaGlzIGFsc28gaGFkIGFuIGltcGFjdAogIG9uIHJlbG9hZGluZyBiZWNhdXNlIHVubmVjZXNzYXJ5IHJlbG9hZGluZyBvcGVyYXRpb25zIGNvdWxkIGJlIHRyaWdnZXJlZC4gTm93CiAgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IGNoaWxkIGJ1aWxkZXJzIGFyZSBjcmVhdGVkIG9ubHkgb25jZS4KCm8gQ09ORklHVVJBVElPTi02ODgKICBGaXhlZCBhIGJ1ZyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBtdWx0aXBsZSBpbmNsdWRlIGZpbGVzIGluCiAgUHJvcGVydGllc0NvbmZpZ3VyYXRpb24uCgpvIENPTkZJR1VSQVRJT04tNjkwCiAgRXhwckxvb2t1cC5nZXRWYXJpYWJsZXMoKSBubyBsb25nZXIgcmV0dXJucyBudWxsLCBidXQgYSBjb3B5IG9mIHRoZSBjdXJyZW50CiAgdmFyaWFibGVzIG9mIHRoaXMgbG9va3VwIG9iamVjdC4KCm8gQ09ORklHVVJBVElPTi02OTEKICBFeHByTG9va3VwIG5vdyBoYW5kbGVzIGV4cHJlc3Npb25zIHRoYXQgZG8gbm90IHJldHVybiBhIHN0cmluZyByZXN1bHQgYnkKICBjb252ZXJ0aW5nIHRoZW0gdG8gc3RyaW5nLgoKbyBDT05GSUdVUkFUSU9OLTcwMwogIFhNTENvbmZpZ3VyYXRpb24gbm93IGhhbmRsZXMgZWxlbWVudHMgY29ycmVjdGx5IHdob3NlIHZhbHVlIGNvbnNpc3RzIG9ubHkgb2YKICB3aGl0ZXNwYWNlIGlmIHRoZSB4bWw6c3BhY2UgYXR0cmlidXRlIGlzIHNldCB0byBwcmVzZXJ2ZS4KCk90aGVyIGNoYW5nZXMKPT09PT09PT09PT09PQpvIENPTkZJR1VSQVRJT04tNjc1CiAgQWRkZWQgYSAuZ2l0aWdub3JlIGZpbGUgdG8gdGhlIHByb2plY3QuCgpvIFNvbWUgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIHRoZWlyIG1vc3QgcmVjZW50IHZlcnNpb25zLiBIb3dldmVyLAogIGFzIG5vIG5ldyBmZWF0dXJlcyBvZiB0aGVzZSBkZXBlbmRlbmNpZXMgYXJlIHVzZWQsIHRoZSBvbGRlciB2ZXJzaW9ucyBzaG91bGQKICBzdGlsbCB3b3JrLiBUaGUgZm9sbG93aW5nIGRlcGVuZGVuY2llcyBhcmUgYWZmZWN0ZWQ6CiAgbyBVcGRhdGUgQXBhY2hlIENvbW1vbnMgTGFuZyBkZXBlbmRlbmN5IGZyb20gMy42IHRvIDMuNy4KICBvIFVwZGF0ZSBBcGFjaGUgQ29tbW9ucyBWRlMgZnJvbSAyLjEgdG8gMi4yLgogIG8gVXBkYXRlIEFwYWNoZSBDb21tb25zIENvZGVjIGZyb20gMS4xMCB0byAxLjExLgogIG8gVXBkYXRlIFNwcmluZyBmcm9tIDQuMy45LlJFTEVBU0UgdG8gNC4zLjE4LlJFTEVBU0UKICBvIFVwZGF0ZSBvcHRpb25hbCBkZXBlbmRlbmN5IHNuYWtleWFtbCBmcm9tIDEuMTggdG8gMS4yMS4KICBvIFVwZGF0ZSBvcHRpb25hbCBkZXBlbmRlbmN5IEphY2tzb24gZnJvbSAyLjguOSB0byAyLjkuNi4KCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGluc3RydWN0aW9ucyBvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLApwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUgQXBhY2hlIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKSU5UUk9EVUNUSU9OOgo9PT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGlzIHZlcnNpb24gb2YgdGhlIENvbW1vbnMKQ29uZmlndXJhdGlvbiBjb21wb25lbnQuIEl0IGRlc2NyaWJlcyB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KVGhlIENvbW1vbnMgQ29uZmlndXJhdGlvbiBzb2Z0d2FyZSBsaWJyYXJ5IHByb3ZpZGVzIGEgZ2VuZXJpYyBjb25maWd1cmF0aW9uCmludGVyZmFjZSB3aGljaCBlbmFibGVzIGFuIGFwcGxpY2F0aW9uIHRvIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYQp2YXJpZXR5IG9mIHNvdXJjZXMuCgpWZXJzaW9uIDIuMiBpcyBhbm90aGVyIG1haW50ZW5hbmNlIHJlbGVhc2UgZm9yIHRoZSBDb25maWd1cmF0aW9uIDIueCBzZXJpZXMuIEl0CmNvbnRhaW5zIGEgbnVtYmVyIG9mIGJ1ZyBmaXhlcyBhbmQgYWxzbyBzb21lIG5ldyBmZWF0dXJlcy4gQW1vbmcgdGhlIGhpZ2hsaWdodHMKaXMgdGhlIG5ldyBzdXBwb3J0IGZvciBKU09OIGFuZCBZQU1MIGNvbmZpZ3VyYXRpb25zLiBUaGUgcmVsZWFzZSBpcyBmdWxseQpzb3VyY2UgYW5kIGJpbmFyeSBjb21wYXRpYmxlIHdpdGggdmVyc2lvbiAyLjEuMS4KCkNvbW1vbnMgQ29uZmlndXJhdGlvbiAyLjIgcmVxdWlyZXMgSmF2YSAxLjcgb3IgaGlnaGVyLgoKTmV3IGZlYXR1cmVzCj09PT09PT09PT09PQpvIENPTkZJR1VSQVRJT04tNjY2CiAgQWRkIGNvbnZlbmllbmNlIGN0b3IgQ29uZmlndXJhdGlvblJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nLCBPYmplY3QuLi4pLgoKbyBDT05GSUdVUkFUSU9OLTY2NQogIEFkZCBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIuQWJzdHJhY3RIaWVyYXJjaGljYWxDb25maWd1cmF0aW9uLnRvU3RyaW5nKCkuCgpvIENPTkZJR1VSQVRJT04tNjY0CiAgQWRkIEFQSSBvcmcuYXBhY2hlLmNvbW1vbnMuY29uZmlndXJhdGlvbjIudHJlZS5JbW11dGFibGVOb2RlLmdldENoaWxkcmVuKFN0cmluZykuCgpvIENPTkZJR1VSQVRJT04tNjYwCiAgQWRkIHRvU3RyaW5nKCkgbWV0aG9kcyBoZXJlIGFuZCB0aGVyZSB0byBoZWxwIGRlYnVnZ2luZy4KCm8gQ09ORklHVVJBVElPTi02NTgKICBBZGQgQVBJIG9yZy5hcGFjaGUuY29tbW9ucy5jb25maWd1cmF0aW9uMi5EYXRhQ29uZmlndXJhdGlvbi5nZXRVUkkoU3RyaW5nKQogIG1ldGhvZHMuCgpvIENPTkZJR1VSQVRJT04tNjU2CiAgQWRkZWQgbmV3IFlBTUxDb25maWd1cmF0aW9uIGNsYXNzIHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBZQU1MCiAgZm9ybWF0LgoKbyBDT05GSUdVUkFUSU9OLTY1MwogIENvbmZpZ3VyYXRpb25VdGlscyBhbmQgQ29uZmlndXJhdGlvbkNvbnZlcnRlciBub3cgb2ZmZXIgYmV0dGVyIHN1cHBvcnQgZm9yCiAgaW1tdXRhYmxlIGNvbmZpZ3VyYXRpb25zLgoKbyBDT05GSUdVUkFUSU9OLTY0NwogIElOSUNvbmZpZ3VyYXRpb24gY2FuIG5vdyBiZSBjb25maWd1cmVkIHRvIHVzZSBhIGN1c3RvbSBzZXBhcmF0b3IgYmV0d2VlbgogIHByb3BlcnRpZXMgYW5kIHZhbHVlcyB3aGVuIHdyaXRpbmcgYW4gaW5pIGZpbGUuCgpvIENPTkZJR1VSQVRJT04tMjU4CiAgQWRkZWQgbmV3IEpTT05Db25maWd1cmF0aW9uIGNsYXNzIHRvIHN1cHBvcnQgY29uZmlndXJhdGlvbiBmaWxlcyBpbiBKU09OCiAgZm9ybWF0LgoKRml4ZWQgQnVncwo9PT09PT09PT09Cm8gQ09ORklHVVJBVElPTi02NzEKICBGaXhlZCBhIE5QRSBpbiBJTklDb25maWd1cmF0aW9uIHdoZW4gc2F2aW5nIGEgY29uZmlndXJhdGlvbiB3aXRoIGFuIGVtcHR5CiAgc2VjdGlvbi4KCm8gQ09ORklHVVJBVElPTi02NjkKICBUaGUgbm9kZSBtb2RlbCByZXR1cm5lZCBieSBTdWJub2RlQ29uZmlndXJhdGlvbi5nZXROb2RlTW9kZWwoKSBoYXMgbm93IHRoZQogIGNvcnJlY3Qgcm9vdCBub2RlIHNldC4KCk90aGVyIGNoYW5nZXMKPT09PT09PT09PT09PQpvIENPTkZJR1VSQVRJT04tNjczCiAgQWRkZWQgYW4gQXV0b21hdGljLU1vZHVsZS1OYW1lIGhlYWRlciB0byB0aGUgbWFuaWZlc3QgZm9yIGNvbXBhdGliaWxpdHkgd2l0aAogIHRoZSBKYXZhIDkgbW9kdWxlIHN5c3RlbS4KCm8gQ09ORklHVVJBVElPTi02NjkKICBVcGRhdGUgb3B0aW9uYWwgU3ByaW5nIGRlcGVuZGVuY3kgZnJvbSA0LjIuNS5SRUxFQVNFIHRvIDQuMy45LlJFTEVBU0UuCgpvIENPTkZJR1VSQVRJT04tNjY3CiAgVXBkYXRlIEFwYWNoZSBDb21tb25zIExhbmcgZGVwZW5kZW5jeSBmcm9tIDMuMy4yIHRvIDMuNi4KCm8gQ09ORklHVVJBVElPTi02NjMKICBGaXhlZCBhIHR5cG8gaW4gdGhlIHVwZ3JhZGUgdG8gMi4wIGd1aWRlLgoKbyBDT05GSUdVUkFUSU9OLTY2MQogIFVwZGF0ZSBwbGF0Zm9ybSByZXF1aXJlbWVudCBmcm9tIEphdmEgNiB0byA3LgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb25maWd1cmF0aW9uL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi8KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4xLjEKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKCklOVFJPRFVDVElPTjoKPT09PT09PT09PT09PQoKVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgcmVsZWFzZSBub3RlcyBmb3IgdGhpcyB2ZXJzaW9uIG9mIHRoZSBDb21tb25zCkNvbmZpZ3VyYXRpb24gY29tcG9uZW50LiBJdCBkZXNjcmliZXMgdGhlIGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHZlcnNpb24uClRoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gc29mdHdhcmUgbGlicmFyeSBwcm92aWRlcyBhIGdlbmVyaWMgY29uZmlndXJhdGlvbgppbnRlcmZhY2Ugd2hpY2ggZW5hYmxlcyBhbiBhcHBsaWNhdGlvbiB0byByZWFkIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIGEKdmFyaWV0eSBvZiBzb3VyY2VzLgoKVGhlIHJlbGVhc2UgaXMgZnVsbHkgc291cmNlIGFuZCBiaW5hcnkgY29tcGF0aWJsZSB3aXRoIHZlcnNpb24gMi4xLgoKQ29tbW9ucyBDb25maWd1cmF0aW9uIDIuMSByZXF1aXJlcyBKYXZhIDEuNiBvciBoaWdoZXIuCgpGaXhlZCBCdWdzCj09PT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTY0OQogIEltcHJvdmVkIHRoZSBoYW5kbGluZyBvZiBsaXN0cyBkZWZpbmVkIGJ5IGEgc3RyaW5nIHdpdGggZGVsaW1pdGVyIGNoYXJhY3RlcnMKICBpbiBYTUxDb25maWd1cmF0aW9uLiBTdWNoIGxpc3RzIG5vdyByZXRhaW4gdGhlaXIgb3JpZ2luYWwgZm9ybWF0IHdoZW4gdGhlCiAgY29uZmlndXJhdGlvbiBpcyBzYXZlZC4KCm8gQ09ORklHVVJBVElPTi02NDgKICBNYWRlIHRoZSBJT0ZhY3RvcnkgcHJvcGVydHkgb2YgUHJvcGVydGllc0J1aWxkZXJQYXJhbWV0ZXIgY29tcGF0aWJsZSB3aXRoIHRoZQogIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgQ29tbW9ucyBCZWFuVXRpbHMuIFRoaXMgdmVyc2lvbiBjaGFuZ2VkIHRoZSBoYW5kbGluZwogIG9mIHByb3BlcnRpZXMgc3RhcnRpbmcgd2l0aCBtdWx0aXBsZSB1cHBlcmNhc2UgbGV0dGVycy4KCm8gQ09ORklHVVJBVElPTi02NDYKICBQcm9wZXJ0aWVzQ29uZmlndXJhdGlvbiBub3cgd29ya3MgY29ycmVjdGx5IHdpdGggdGhlIGF1dG8tc2F2ZSBtb2RlLgoKbyBDT05GSUdVUkFUSU9OLTY0NAogIFByb3BlcnRpZXNDb25maWd1cmF0aW9uTGF5b3V0IG5vIGxvbmdlciBkdXBsaWNhdGVzIGEgaGVhZGVyIGNvbW1lbnQgaWYgYSBmaWxlCiAgd2l0aCBhbm90aGVyIGNvbW1lbnQgaXMgbG9hZGVkLiBUaGFua3MgdG8gQW5kcmV3IERlTWFyaWEuCgpvIENPTkZJR1VSQVRJT04tNjQzCiAgRG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMgZm9yIHRoZSB1c2VyJ3MgZ3VpZGUuCgpvIENPTkZJR1VSQVRJT04tNjQxCiAgSW1wcm92ZWQgZG9jdW1lbnRhdGlvbiBvZiBGaWxlQmFzZWQgaW50ZXJmYWNlLiBUaGUgSmF2YWRvY3Mgbm93IHN0YXRlCiAgZXhwbGljaXRseSB0aGF0IHRoZSBtZXRob2RzIHNob3VsZCBub3QgYmUgY2FsbGVkIGJ5IGNsaWVudCBjb2RlLiBFeGNlcHRpb24KICBoYW5kbGluZyBpbiBjb25maWd1cmF0aW9uIGNsYXNzZXMgaW1wbGVtZW50aW5nIEZpbGVMb2NhdG9yQXdhcmUgaGFzIGJlZW4KICBpbXByb3ZlZC4KCm8gQ09ORklHVVJBVElPTi02NDAKICBQcm9wZXJ0aWVzQ29uZmlndXJhdGlvbiBub3cgY29ycmVjdGx5IHVuZXNjYXBlcyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0CiAgYXJlIGFsd2F5cyBlc2NhcGVkIGluIEphdmEgcHJvcGVydGllcyBmaWxlcy4KCk90aGVyIGNoYW5nZXMKPT09PT09PT09PT09PQpvIENPTkZJR1VSQVRJT04tNjM5CiAgSW4gdGhlIE9TR2kgYnVuZGxlIG1hbmlmZXN0IG9mIHRoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gYnVuZGxlIHRoZSBwYWNrYWdlCiAgaW1wb3J0cyBmb3IgU3ByaW5nIHBhY2thZ2VzIGFyZSBub3cgbWFya2VkIGFzIG9wdGlvbmFsLgogIFRoYW5rcyB0byBSaWNvIE5ldWJhdWVyLgoKbyBDT05GSUdVUkFUSU9OLTYzOAogIEltcHJvdmVkIGhhbmRsaW5nIG9mIHRlbXBvcmFyeSBmaWxlcyBhbmQgZm9sZGVycyBpbiB1bml0IHRlc3RzLgogIFRoYW5rcyB0byBBaG1ldCBDZWxpay4KCm8gQ09ORklHVVJBVElPTi02MjcKICBVcGRhdGVkIGRlcGVuZGVuY3kgdG8gQ29tbW9ucyBCZWFuVXRpbHMgdG8gdmVyc2lvbiAxLjkuMy4gVGhpcyBmaXhlcyBhbiBpc3N1ZQogIHdpdGggYW4gZXhjZXB0aW9uIHN0YWNrdHJhY2UgdGhhdCB3YXMgbG9nZ2VkIHdoZW4gYSBDb25maWd1cmF0aW9uQnVpbGRlciB3YXMKICB1c2VkLgoKCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb25maWd1cmF0aW9uL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiB3ZWJzaXRlOgoKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi8KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBDb21tb25zIENvbmZpZ3VyYXRpb24gUGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMQogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT04KPT09PT09PT09PT09CgpUaGlzIGRvY3VtZW50IGNvbnRhaW5zIHRoZSByZWxlYXNlIG5vdGVzIGZvciB0aGlzIHZlcnNpb24gb2YgdGhlIENvbW1vbnMKQ29uZmlndXJhdGlvbiBjb21wb25lbnQuIEl0IGRlc2NyaWJlcyB0aGUgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KVGhlIENvbW1vbnMgQ29uZmlndXJhdGlvbiBzb2Z0d2FyZSBsaWJyYXJ5IHByb3ZpZGVzIGEgZ2VuZXJpYyBjb25maWd1cmF0aW9uCmludGVyZmFjZSB3aGljaCBlbmFibGVzIGFuIGFwcGxpY2F0aW9uIHRvIHJlYWQgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gYSB2YXJpZXR5Cm9mIHNvdXJjZXMuCgpWZXJzaW9uIDIuMSBpcyBhIGZpcnN0IGJ1Zy1maXggcmVsZWFzZSBmb3IgdGhlIENvbmZpZ3VyYXRpb24gMi54IHNlcmllcyBhbmQKYWxzbyBhZGRzIGEgbmV3IGZlYXR1cmUgcmVsYXRlZCB0byB0aGUgaW50ZWdyYXRpb24gd2l0aCB0aGUgU3ByaW5nIGZyYW1ld29yay4KQSBsaXN0IG9mIGFsbCBjaGFuZ2VzIGNhbiBiZSBmb3VuZCBiZWxvdy4KClRoZSByZWxlYXNlIGlzIGZ1bGx5IHNvdXJjZSBhbmQgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCB2ZXJzaW9uIDIuMC4KCkNvbW1vbnMgQ29uZmlndXJhdGlvbiAyLjEgcmVxdWlyZXMgSmF2YSAxLjYgb3IgaGlnaGVyLgoKTmV3IEZlYXR1cmVzCj09PT09PT09PT09PQpvIENPTkZJR1VSQVRJT04tNjM2CiAgUHJvcGVydGllc0NvbmZpZ3VyYXRpb25MYXlvdXQgbm93IGFsbG93cyBtYW5pcHVsYXRpbmcgdGhlIG9yZGVyIG9mIGtleXMgd2hlbgogIHRoZSBwcm9wZXJ0aWVzIGZpbGUgaXMgd3JpdHRlbi4KCm8gQ09ORklHVVJBVElPTi02MjQKICBTdXBwb3J0IENvbW1vbnMgQ29uZmlndXJhdGlvbiBhcyBQcm9wZXJ0eVNvdXJjZSBpbiBTcHJpbmcuCgpGaXhlZCBCdWdzCj09PT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTYzNAogIEhvbWVEaXJlY3RvcnlMb2NhdGlvblN0cmF0ZWd5IG5vdyB3b3JrcyBjb3JyZWN0bHkgaW4gdGhlIG1vZGUgdGhhdCBldmFsdWF0ZXMKICB0aGUgRmlsZUxvY2F0b3IncyBiYXNlIHBhdGguCgpvIENPTkZJR1VSQVRJT04tNjMzCiAgSW50ZXJwb2xhdGlvbiB3YXMgaW1wcm92ZWQgdG8gYmV0dGVyIHN1cHBvcnQgcHJvcGVydGllcyB3aXRoIG11bHRpcGxlIHZhbHVlcy4KCm8gQ09ORklHVVJBVElPTi02MzIKICBUaGUgbWV0aG9kcyBnZXRTdHJpbmdBcnJheSgpIGFuZCBnZXRMaXN0KCkgb2YgQ29tcG9zaXRlQ29uZmlndXJhdGlvbiBub3cKICBzdXBwb3J0IHRoZSBpbnRlcnBvbGF0aW9uIG9mIHZhcmlhYmxlcyB0aGF0IHJlZmVyZW5jZSBwcm9wZXJ0aWVzIHdpdGgKICBtdWx0aXBsZSB2YWx1ZXMuCgpvIENPTkZJR1VSQVRJT04tNjIyCiAgRml4ZWQgYSBwcm9ibGVtIGluIElOSUNvbmZpZ3VyYXRpb24ud3JpdGUoKSB3aXRoIGtleXMgY29udGFpbmluZyBhIHNlcGFyYXRvcgogIGNoYXJhY3Rlci4gVGhpcyBzZXBhcmF0b3IgaGFkIGJlZW4gZHVwbGljYXRlZC4gU3VjaCBrZXlzIGFyZSBub3cgaGFuZGxlZAogIGNvcnJlY3RseSB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGlzIHNhdmVkLgoKT3RoZXIgY2hhbmdlcwo9PT09PT09PT09PT09Cm8gQ09ORklHVVJBVElPTi02MjgKICBTdXBwb3J0IGZvciB0aGUgYW50IGJ1aWxkIHdhcyBkcm9wcGVkLgoKbyBDT05GSUdVUkFUSU9OLTYyNgogIEltbXV0YWJsZUNvbmZpZ3VyYXRpb24uZ2V0QXJyYXkoKSBoYXMgYmVlbiBkZXByZWNhdGVkLiBBcnJheXMgY2FuIG5vdyBiZQogIHF1ZXJpZWQgdXNpbmcgdGhlIGdlbmVyaWMgZ2V0KCkgbWV0aG9kIGluIGEgdHlwZS1zYWZlIHdheS4KCm8gQ09ORklHVVJBVElPTi02MzEKICBVcGRhdGVkIG9wdGlvbmFsIGRlcGVuZGVuY3kgdG8gQXBhY2hlIENvbW1vbnMgVkZTIGZyb20gMi4wIHRvIDIuMS4gKFRoZSBvbGRlcgogIHZlcnNpb24gc3RpbGwgd29ya3MuKQoKbyBDT05GSUdVUkFUSU9OLTYzNQogIFVwZGF0ZWQgb3B0aW9uYWwgZGVwZW5kZW5jeSB0byBBcGFjaGUgQ29tbW9ucyBDb2RlYyBmcm9tIDEuOSB0byAxLjEwLiAoVGhlCiAgb2xkZXIgdmVyc2lvbiBzdGlsbCB3b3Jrcy4pCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24sIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMKb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywgcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlCkFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gd2Vic2l0ZToKaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi8KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKCklOVFJPRFVDVElPTgo9PT09PT09PT09PT0KCkFmdGVyIGEgc2VyaWVzIG9mIGFscGhhIGFuZCBiZXRhIHJlbGVhc2VzIChwbGVhc2UgY29uc3VsdCB0aGUgY29ycmVzcG9uZGluZwpyZWxlYXNlIG5vdGVzIGJlbG93KSwgdGhpcyBpcyB0aGUgZmlyc3QgZmluYWwgcmVsZWFzZSBmb3IgQXBhY2hlIENvbW1vbnMKQ29uZmlndXJhdGlvbiAyLjAuCgpWZXJzaW9uIDIuMCBpcyBhIGNvbXBsZXRlIHJlZGVzaWduIG9mIHRoZSBDb25maWd1cmF0aW9uIDEueCBBUEkgd2l0aCB0aGUgYWltIHRvCmZpeCBzb21lIGxpbWl0YXRpb25zIGluIHRoZSBvcmlnaW5hbCBkZXNpZ24gYW5kIG1ha2UgdGhlIGxpYnJhcnkgbW9yZSBmbGV4aWJsZQphbmQgcG93ZXJmdWwuIFRoZXJlZm9yZSwgdGhpcyByZWxlYXNlIGlzIG5vdCBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIENvbW1vbnMKQ29uZmlndXJhdGlvbiAxLng7IHRoZXJlIGhhdmUgYmVlbiBpbmNvbXBhdGlibGUgY2hhbmdlcyBpbiBtYW55IGFyZWFzIHRoYXQKcmVxdWlyZSBhZGFwdGF0aW9ucyBvbiBjbGllbnQgY29kZS4gQSBtaWdyYXRpb24gZ3VpZGUgaXMgYXZhaWxhYmxlIGF0CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9jb25maWd1cmF0aW9uL3VzZXJndWlkZS91cGdyYWRldG8yXzAuaHRtbAoKdGhhdCBkZXNjcmliZXMgYWxsIGJyZWFraW5nIGNoYW5nZXMgYW5kIGhlbHBzIHdoZW4gdXBncmFkaW5nIHRvIHRoZSBuZXcKdmVyc2lvbi4gT25lIG9idmlvdXMgYnJlYWtpbmcgY2hhbmdlIGlzIHRoZSByZW5hbWluZyBvZiB0aGUgbWFpbiBwYWNrYWdlCihhbGwgY2xhc3NlcyBhcmUgbm93IGxvY2F0ZWQgdW5kZXIgb3JnLmFwYWNoZS5jb21tb25zLmNvbmZpZ3VyYXRpb24yKSBhbmQgdGhlCk1hdmVuIGNvb3JkaW5hdGVzIChncm91cElkOiBvcmcuYXBhY2hlLmNvbW1vbnMsIGFydGlmYWN0SWQ6CmNvbW1vbnMtY29uZmlndXJhdGlvbjIpLiBUaGlzIHdhcyBuZWNlc3NhcnkgdG8gYWxsb3cgYm90aCB2ZXJzaW9ucyB0byBjb2V4aXN0Cm9uIHRoZSBjbGFzc3BhdGggd2l0aG91dCBjb25mbGljdHMuCgpUaGUgdXNlcidzIGd1aWRlIGhhcyBiZWVuIGNvbXBsZXRlbHkgcmV3b3JrZWQgdG8gZGVzY3JpYmUgYWxsIGZlYXR1cmVzIG9mIHRoZQpuZXcgdmVyc2lvbi4gSXQgY2FuIGJlIGZvdW5kIGF0CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9jb25maWd1cmF0aW9uL3VzZXJndWlkZS91c2VyX2d1aWRlLmh0bWwKCkNoYW5nZXM6Cj09PT09PT09Cm8gQ09ORklHVVJBVElPTi02MjE6CiAgTW92ZWQgQ29uZmlndXJhdGlvbkxvZ2dlciBjbGFzcyB0byBpbyBwYWNrYWdlIHRvIGF2b2lkIGN5Y2xpYyBkZXBlbmRlbmNpZXMKICBiZXR3ZWVuIHBhY2thZ2VzLgpvIENPTkZJR1VSQVRJT04tNjE5OgogIENvbWJpbmVkQ29uZmlndXJhdGlvbkJ1aWxkZXIgbm93IHN1cHBvcnRzIGluaGVyaXRhbmNlIG9mIGl0cyBwYXJhbWV0ZXJzIHRvCiAgY2hpbGQgY29uZmlndXJhdGlvbiBzb3VyY2VzLiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KbyBDT05GSUdVUkFUSU9OLTYxNToKICBDaGFuZ2VkIGdlbmVyaWMgdHlwZXMgaW4gdGhlIHNpZ25hdHVyZXMgb2YgYSBNYXBDb25maWd1cmF0aW9uIGNvbnN0cnVjdG9yCiAgYW5kIEFic3RyYWN0Q29uZmlndXJhdGlvbi5nZXRMaXN0KFN0cmluZywgTGlzdCkuIFRoZXNlIGNoYW5nZXMgd2VyZSBtYWRlIGluCiAgdmVyc2lvbiAxLjEwIGFzIGZpeGVzIGZvciBDT05GSUdVUkFUSU9OLTU1NyBhbmQgQ09ORklHVVJBVElPTi01NTguIEJ1dCBpdAogIGhhZCBiZWVuIG1pc3NlZCB0byBtZXJnZSB0aGVtIHRvIHRydW5rLgoKRml4ZWQgQnVnczoKPT09PT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTYyMDoKICBGaXhlZCB0d28gaW52YWxpZCBleGFtcGxlcyBpbiB0aGUgdXNlcidzIGd1aWRlIGZvciBmaWxlLWJhc2VkIGNvbmZpZ3VyYXRpb25zLgpvIENPTkZJR1VSQVRJT04tNjE4OgogIFdoZW4gdXNpbmcgaW1tdXRhYmxlIGNvbmZpZ3VyYXRpb25zIGV4Y2VwdGlvbnMgdGhyb3duIGJ5IHRoZSB3cmFwcGVkCiAgY29uZmlndXJhdGlvbiBjYW1lIG91dCBhcyBVbmRlY2xhcmVkVGhyb3dhYmxlRXhjZXB0aW9uLiBUaGlzIGhhcyBiZWVuIGZpeGVkOwogIG5vdyB0aGUgY29ycmVjdCBvcmlnaW5hbCBleGNlcHRpb24gaXMgdGhyb3duLgoKQ29tbW9ucyBDb25maWd1cmF0aW9uIDIuMCByZXF1aXJlcyBKYXZhIDEuNiBvciBoaWdoZXIuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMC1iZXRhMgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgpBZnRlciB0aGUgZmlyc3QgYmV0YSByZWxlYXNlIGluIEp1bmUgMjAxNSB0aGVyZSBoYXMgYmVlbiBzb21lIGZlZWRiYWNrIGZyb20gdGhlCmNvbW11bml0eSByZXN1bHRpbmcgaW4gKG1pbm9yKSBhZGFwdGF0aW9ucyBvZiB0aGUgQVBJLiBJbiBtb3N0IGNhc2VzLCB0aGUKcmV0dXJuIHZhbHVlcyBvZiBtZXRob2RzIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGJlIG1vcmUgZ2VuZXJpYy4gVGhlcmUgaGFzIGFsc28KYmVlbiBhIGNoYW5nZSBpbiB0aGUgc3VwcG9ydCBmb3IgbG9nZ2luZy4gVGhlcmVmb3JlLCB0aGlzIHNlY29uZCBiZXRhIHJlbGVhc2UKaXMgcHJvdmlkZWQgdG8gbWFrZSB0aGVzZSBjaGFuZ2VzIG1vcmUgIm9mZmljaWFsIi4KClRoaXMgcmVsZWFzZSBhbHNvIGluY2x1ZGVzIHNvbWUgYnVnIGZpeGVzLiBUaGUgYnVncyBhZGRyZXNzZWQgaGVyZSBoYXZlIHBhcnRseQpleGlzdGVkIGFscmVhZHkgaW4gdGhlIENvbmZpZ3VyYXRpb24gMS4wIGNvZGUgYmFzZTsgc28gdGhlc2UgZml4ZXMgYXJlIG5vdCBhbGwKcmVsYXRlZCB0byBjaGFuZ2VzIGludHJvZHVjZWQgaW4gdGhlIDIuMCB2ZXJzaW9uLgoKQmVsb3cgaXMgYSBsaXN0IG9mIGFsbCBjaGFuZ2VzIGluIHRoaXMgdmVyc2lvbi4gUGxlYXNlIHJlZmVyIHRvIHRoZSBjbGlycgpyZXBvcnQgYXQgaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi9jbGlyci1yZXBvcnQuaHRtbApmb3IgaW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlcyB3aGljaCBicmVhayBiaW5hcnkgY29tcGF0aWJpbGl0eS4KCkNoYW5nZXM6Cj09PT09PT09Cm8gQ09ORklHVVJBVElPTi02MTQ6CiAgUmVmZXJlbmNlcyB0byBDb21tb25zIExvZ2dpbmcgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgQ29uZmlndXJhdGlvbiBBUEkuCiAgSXQgaXMgc3RpbGwgcG9zc2libGUgdG8gaW5mbHVlbmNlIGxvZ2dpbmcgYnkgbWFraW5nIHVzZSBvZiB0aGUgbmV3CiAgQ29uZmlndXJhdGlvbkxvZ2dlciBhYnN0cmFjdGlvbi4KbyBDT05GSUdVUkFUSU9OLTYxMjoKICBUaGUgcmV0dXJuIHR5cGUgb2YgQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0Q29uZmlndXJhdGlvbigpIHdhcyBjaGFuZ2VkIGZyb20KICBDb25maWd1cmF0aW9uIHRvIEltbXV0YWJsZUNvbmZpZ3VyYXRpb24gYmVjYXVzZSB0aGlzIGlzIHRoZSBiYXNlIGludGVyZmFjZQogIGZvciBhbGwgY29uZmlndXJhdGlvbiBvYmplY3RzLiBUaGFua3MgdG8gSm9uIFdleWdhbmQuCm8gQ09ORklHVVJBVElPTi02MDg6CiAgQWRhcHRlZCB0aGUgcmV0dXJuIHR5cGUgb2YgUmVsb2FkaW5nRmlsZUJhc2VkQ29uZmlndXJhdGlvbkJ1aWxkZXIuY29uZmlndXJlKCkuCgpGaXhlZCBCdWdzOgo9PT09PT09PT09PQpvIENPTkZJR1VSQVRJT04tNjA5OgogIEZpeGVkIGEgYnVnIGluIFByb3BlcnRpZXNDb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gdGhlIGxvYWRpbmcgb2YgaW5jbHVkZQogIGZpbGVzLiBUaGUgRmlsZUhhbmRsZXIgdXNlZCBmb3IgdGhpcyBwdXJwb3NlIHdhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQuCm8gQ09ORklHVVJBVElPTi02MDU6CiAgWE1MQ29uZmlndXJhdGlvbiBubyBsb25nZXIgZHJvcHMga2V5cyB3aGVuIGxpc3QgZGVsaW1pdGVyIGNoYXJhY3RlcnMgb2NjdXIKICBpbiBlbGVtZW50IHZhbHVlcy4KbyBDT05GSUdVUkFUSU9OLTYwNDoKICBGaXhlZCBhIHByb2JsZW0gaW4gdGhlIGNvbnZlcnNpb24gb2YgYSBmbGF0IGNvbmZpZ3VyYXRpb24gdG8gYSBoaWVyYXJjaGljYWwKICBvbmUgdGhhdCBjb3VsZCBjYXVzZSB0aGUgbG9zcyBvZiBwcm9wZXJ0aWVzIGluIGEgY29tYmluZWQgY29uZmlndXJhdGlvbgogIGNvbnN0cnVjdGVkIGJ5IGFuIG92ZXJyaWRlIGNvbWJpbmVyLgoKQ29tbW9ucyBDb25maWd1cmF0aW9uIDIuMC1iZXRhMiByZXF1aXJlcyBKYXZhIDEuNiBvciBoaWdoZXIuCgpIaXN0b3JpY2FsIGxpc3Qgb2YgY2hhbmdlczogaHR0cHM6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtY29uZmlndXJhdGlvbi9jaGFuZ2VzLXJlcG9ydC5odG1sCgpGb3IgY29tcGxldGUgaW5mb3JtYXRpb24gb24gQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGluc3RydWN0aW9ucwpvbiBob3cgdG8gc3VibWl0IGJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBvciBzdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnQsIHNlZSB0aGUKQXBhY2hlIENvbW1vbnMgQ29uZmlndXJhdGlvbiB3ZWJzaXRlOgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb25maWd1cmF0aW9uLwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAtYmV0YTEKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKVGhpcyBpcyB0aGUgZmlyc3QgYmV0YSByZWxlYXNlIG9mIENvbW1vbnMgQ29uZmlndXJhdGlvbiAyLjAgYWZ0ZXIgdHdvIGFscGhhCnZlcnNpb25zLiBUaGVyZSBoYXMgbm90IGJlZW4gbXVjaCBmZWVkYmFjayBzbyBmYXIgYW5kIG5vIHJlcXVlc3RzIGZvciBBUEkKY2hhbmdlcy4gVGhlcmVmb3JlLCB3ZSBtb3ZlIGZvcndhcmRzIHRvIGEgYmV0YSByZWxlYXNlIGluZGljYXRpbmcgdGhhdCB0aGUgQVBJCmNhbiBiZSBjb25zaWRlcmVkIG1vcmUgc3RhYmxlLiBIb3dldmVyLCBhdCB0aGlzIHN0YWdlLCBjaGFuZ2VzIG9mIHRoZSBBUEkgY2FuCnN0aWxsIG5vdCBiZSBmdWxseSBleGNsdWRlZC4KCkJlbG93IGlzIGEgbGlzdCBvZiBhbGwgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb24uIENvbXBhcmVkIHRvIHZlcnNpb24gMi4wLWFscGhhMiwKdGhlcmUgaGFzIG9ubHkgYmUgYSBzaW5nbGUgY2hhbmdlOiBhbiBvYnNvbGV0ZSBpbnRlcmZhY2UgKHdoaWNoIGhhZCBiZWVuCm92ZXJsb29rZWQgZHVyaW5nIGEgbWFqb3IgcmVmYWN0b3JpbmcpIHdhcyByZW1vdmVkLiBTbyBhcHBsaWNhdGlvbnMgdGhhdCBhcmUKdXNpbmcgMi4wLWFscGhhMiBzaG91bGQgYmUgYWJsZSB0byBtaWdyYXRlIHRvIDIuMC1iZXRhMSB3aXRob3V0IHByb2JsZW1zLgoKQ2hhbmdlczoKPT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTU5ODogUmVtb3ZlZCBvYnNvbGV0ZSBDb25maWd1cmF0aW9uQnVpbGRlciBpbnRlcmZhY2UgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIGJhc2UgcGFja2FnZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLWFscGhhMgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzCgoKQWZ0ZXIgdmVyc2lvbiAyLjAtYWxwaGExIGhhcyBiZWVuIG91dCBmb3IgYSB3aGlsZSAodGhlIGNvcnJlc3BvbmRpbmcgcmVsZWFzZQpub3RlcyBjYW4gYmUgZm91bmQgYmVsb3cpLCB0aGlzIHNlY29uZCBhbHBoYSByZWxlYXNlIGNvbnRhaW5zIGEgZmV3IG51bWJlciBvZgppbXByb3ZlbWVudHMgYW5kIG5ldyBmZWF0dXJlcyB3aG9zZSBpbXBsZW1lbnRhdGlvbiByZXF1aXJlZCBzb21lIGNoYW5nZXMgb24KZXhpc3RpbmcgaW50ZXJmYWNlcy4gSW4gbW9zdCBjYXNlcywgbmV3IG1ldGhvZHMgd2VyZSBhZGRlZCBvZmZlcmluZyBlbmhhbmNlZApmdW5jdGlvbmFsaXR5LiBCZWNhdXNlIHRoZXNlIGFyZSB0eXBpY2FsbHkgaW50ZXJmYWNlcyBpbXBsZW1lbnRlZCBieSB0aGUKbGlicmFyeSBpdHNlbGYgY2xpZW50IGNvZGUgdXNpbmcgdGhlIHByZXZpb3VzIGFscGhhIHZlcnNpb24gc2hvdWxkIGhhcmRseSBiZQphZmZlY3RlZC4KCkJlbG93IGlzIGEgbGlzdCBvZiBhbGwgY2hhbmdlcyBpbiB0aGlzIHZlcnNpb246CgpOZXcgZmVhdHVyZXM6Cj09PT09PT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTU3NDogIERlZmF1bHRFeHByZXNzaW9uRW5naW5lIGNhbiBub3cgYmUgY3VzdG9taXplZCB0byBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBrZXlzIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYW5uZXIuIFRoaXMgaXMgdXNlZnVsCiAgICAgICAgICAgICAgICAgICAgICBmb3IgaW5zdGFuY2UgZm9yIGRlYWxpbmcgd2l0aCBXaW5kb3dzIElOSSBmaWxlcy4KbyBDT05GSUdVUkFUSU9OLTU2NTogIEFkZGVkIHN1cHBvcnQgZm9yIHF1ZXJ5aW5nIGVuY29kZWQgcHJvcGVydGllcy4KbyBDT05GSUdVUkFUSU9OLTIwMDogIEEgc2l6ZSgpIG1ldGhvZCB3YXMgYWRkZWQgdG8gdGhlIEltbXV0YWJsZUNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgoKRml4ZWQgQnVnczoKPT09PT09PT09PT0KbyBDT05GSUdVUkFUSU9OLTU2NDogIFByb3BlcnRpZXNDb25maWd1cmF0aW9uIG5vdyBzdXBwb3J0cyBhZ2FpbiBwcm9wZXJ0aWVzIHdpdGhvdXQgYQogICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYW5kIGEgc2VwYXJhdG9yIGNoYXJhY3Rlci4gVGhlIGtleXMgb2Ygc3VjaCBwcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICBhcmUgYWRkZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBhbiBlbXB0eSBTdHJpbmcgYXMgdmFsdWUuCm8gQ09ORklHVVJBVElPTi00Mjc6ICBYTUxQcm9wZXJ0eUxpc3RDb25maWd1cmF0aW9uIGNhbiBub3cgc2F2ZSBhcnJheXMgaW4gdGhlIGNvcnJlY3QgZm9ybS4KCkhpc3RvcmljYWwgbGlzdCBvZiBjaGFuZ2VzOiBodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb25maWd1cmF0aW9uL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBzdWJtaXQgYnVnIHJlcG9ydHMsCnBhdGNoZXMsIG9yIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCwgc2VlIHRoZSBBcGFjaGUgQ29tbW9ucyBDb25maWd1cmF0aW9uIHdlYnNpdGU6CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9wcm9wZXIvY29tbW9ucy1jb25maWd1cmF0aW9uLwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAtYWxwaGExCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMKClRoaXMgaXMgdGhlIGZpcnN0IGFscGhhIHJlbGVhc2UgZm9yIHZlcnNpb24gMi4wIG9mIENvbW1vbnMgQ29uZmlndXJhdGlvbi4KVmVyc2lvbiAyIGlzIGEgbWFqb3IgcmVkZXNpZ24gb2YgdGhlIENvbmZpZ3VyYXRpb24gQVBJLiBJdCBicmVha3MgY29tcGF0aWJpbGl0eQppbiBtYW55IGFyZWFzIGFuZCwgdGhlcmVmb3JlLCBpcyBub3QgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciBDb21tb25zCkNvbmZpZ3VyYXRpb24gMS54LiBUbyBhbGxvdyBjb2xsYWJvcmF0aW9uIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeQooYW5kIHRvIHByZXZlbnQgamFyIGFuZCBkZXBlbmRlbmN5IGhlbGwpLCB0aGUgdG9wLWxldmVsIHBhY2thZ2UgYW5kIHRoZSBNYXZlbgpjb29yZGluYXRlcyBoYXZlIGJlZW4gY2hhbmdlZC4gVGhlcmUgaXMgYW4gdXBncmFkZSBndWlkZSBhdmFpbGFibGUgYXQKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL2NvbmZpZ3VyYXRpb24vdXNlcmd1aWRlL3VwZ3JhZGV0bzJfMC5odG1sCgpkZXNjcmliaW5nIHRoZSBtb3N0IGltcG9ydGFudCBicmVha2luZyBjaGFuZ2VzLiBCZSBzdXJlIHRvIHJlYWQgdGhpcwpkb2N1bWVudCBpZiB5b3Ugd2FudCB0byBzd2l0Y2ggZnJvbSBhIDEueCB2ZXJzaW9uIHRvIHRoaXMgbmV3IHZlcnNpb24uIFRoZQp1c2VyJ3MgZ3VpZGUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0CgpodHRwczovL2NvbW1vbnMuYXBhY2hlLm9yZy9jb25maWd1cmF0aW9uL3VzZXJndWlkZS91c2VyX2d1aWRlLmh0bWwKCmhhcyBiZWVuIHJld29ya2VkIHRvIGNvdmVyIGFsbCB0aGUgbmV3IGFuZCBjaGFuZ2VkIGZlYXR1cmVzLgoKVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIGFscGhhIHJlbGVhc2UgaXMgdG8gZ2F0aGVyIGZlZWRiYWNrIGZyb20gdGhlCmNvbW11bml0eSBhYm91dCB0aGUgcmV3b3JrZWQgQVBJLiBJVCBJUyBOT1QgWUVUIFBST0RVQ1RJT04gUkVBRFkuIEl0IGlzCmV4cGVjdGVkIHRoYXQgdGhlcmUgd2lsbCBzdGlsbCBiZSBzb21lIGNoYW5nZXMgb24gdGhlIHB1YmxpYyBBUEkuCgpCZWxvdyBpcyBhIGxpc3Qgb2YgYWxsIGNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uOgoKTmV3IGZlYXR1cmVzOgo9PT09PT09PT09PT09Cm8gQ09ORklHVVJBVElPTi01Nzk6ICBBIG1pZ3JhdGlvbiBndWlkZSBoYXMgYmVlbiBjcmVhdGVkIHdoaWNoIHN1cHBvcnRzIHdoZW4gdXBncmFkaW5nIGZyb20KICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gMS54IHRvIDIuMC4KbyBDT05GSUdVUkFUSU9OLTU1OTogIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBkZWZpbmUgZGVmYXVsdCB2YWx1ZXMgZm9yIGluaXRpYWxpemF0aW9uCiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIG9mIGNvbmZpZ3VyYXRpb25zLgpvIENPTkZJR1VSQVRJT04tNTUxOiAgVGhlIGRhdGEgdHlwZSBjb252ZXJzaW9uIG1lY2hhbmlzbSBoYXMgYmVlbiBtYWRlIGV4dGVuc2libGUuIFRoZXJlIGlzIGEKICAgICAgICAgICAgICAgICAgICAgIG5ldyBpbnRlcmZhY2UgQ29udmVyc2lvbkhhbmRsZXIgd2hpY2ggY29udHJvbHMgdGhlIGRhdGEgdHlwZSBjb252ZXJzaW9ucwogICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGZvciBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LiBCeSBzZXR0aW5nIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbnMgY2FuIGJlIGFkYXB0ZWQgb3IgZXh0ZW5kZWQuCm8gQ09ORklHVVJBVElPTi01NTA6ICBDb252ZXJzaW9uIHRvIENoYXJhY3RlciBpcyBub3cgc3VwcG9ydGVkLgpvIENPTkZJR1VSQVRJT04tNTQxOiAgTXVsdGktZmlsZSBjb25maWd1cmF0aW9ucyBhcmUgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gWE1MIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLiBBcmJpdHJhcnkgZmlsZS1iYXNlZCBjb25maWd1cmF0aW9ucyBhcmUgbm93IHN1cHBvcnRlZC4KbyBDT05GSUdVUkFUSU9OLTUzNTogIERhdGFiYXNlQ29uZmlndXJhdGlvbiBub3cgcHJvdmlkZXMgZ2V0IG1ldGhvZHMgZm9yIHF1ZXJ5aW5nIGl0cwogICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyBkZWZpbmluZyB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSBzdHJ1Y3R1cmVzLgpvIENPTkZJR1VSQVRJT04tNTMzOiAgRGF0YWJhc2VDb25maWd1cmF0aW9uIG5vdyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIENMT0JzIHRvIHN0cmluZ3MgaWYKICAgICAgICAgICAgICAgICAgICAgIHRoZXkgYXBwZWFyIGluIHByb3BlcnR5IHZhbHVlcy4KbyBDT05GSUdVUkFUSU9OLTUyNTogIFByb3BlcnRpZXNDb25maWd1cmF0aW9uIG5vdyBrZWVwcyBhIGNvbW1lbnQgYXQgdGhlIGJvdHRvbSBvZiBhCiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIGZpbGUuIEEgbmV3IGZvb3RlciBwcm9wZXJ0eSB3YXMgYWRkZWQgZm9yIHJlYWRpbmcgYW5kCiAgICAgICAgICAgICAgICAgICAgICB3cml0aW5nIHRoaXMgZm9vdGVyIGNvbW1lbnQuCm8gQ09ORklHVVJBVElPTi01MTk6ICBDb25maWd1cmF0aW9uIG9iamVjdHMgYXJlIG5vdyBjcmVhdGVkIHZpYSBjb25maWd1cmF0aW9uIGJ1aWxkZXJzLiBBIG5ldwogICAgICAgICAgICAgICAgICAgICAgQVBJIGZvciBjb25maWd1cmF0aW9uIGJ1aWxkZXJzIGhhcyBiZWVuIGFkZGVkLgpvIENPTkZJR1VSQVRJT04tNTE3OiAgSGllcmFyY2hpY2FsIGNvbmZpZ3VyYXRpb25zIG5vdyBwcm92aWRlIG1ldGhvZHMgdG8gb2J0YWluIHN1YgogICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbnMgZm9yIGFsbCBjaGlsZCBlbGVtZW50cyBvZiBhIGdpdmVuIGtleS4KbyBDT05GSUdVUkFUSU9OLTUxNDogIEJlYW4gZGVjbGFyYXRpb25zIG5vdyBzdXBwb3J0IGNvbnN0cnVjdG9yIGludm9jYXRpb25zLgpvIENPTkZJR1VSQVRJT04tNTEyOiAgSXQgaXMgbm93IHBvc3NpYmxlIHRvIG9idGFpbiBhbiBpbW11dGFibGUgdmlldyBvbiBhIENvbmZpZ3VyYXRpb24gb3IKICAgICAgICAgICAgICAgICAgICAgIEhpZXJhcmNoaWNhbENvbmZpZ3VyYXRpb24gb2JqZWN0LiBOZXcgaW50ZXJmYWNlcywKICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZUNvbmZpZ3VyYXRpb24sIGFuZCBJbW11dGFibGVIaWVyYXJjaGljYWxDb25maWd1cmF0aW9uIGhhdmUKICAgICAgICAgICAgICAgICAgICAgIGJlZW4gaW50cm9kdWNlZC4KbyBDT05GSUdVUkFUSU9OLTUwODogIEdlbmVyaWMgZ2V0KCkgbWV0aG9kcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogICAgICAgICAgICAgICAgICAgICAgVGhlc2UgbWV0aG9kcyBleHBlY3QgYSB0YXJnZXQgY2xhc3MgYW5kIHRyeSB0byBjb252ZXJ0IHRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgICAgICAgICAgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSB0byB0aGlzIHRhcmdldCBjbGFzcy4KbyBDT05GSUdVUkFUSU9OLTIwNDogIFdpdGggdGhlIG5ldyByZWxvYWRpbmcgbWVjaGFuaXNtIGF1dG9tYXRpYyBhbmQgcGVyaW9kaWMgcmVsb2FkaW5nIGNoZWNrcwogICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHBlcmZvcm1lZC4KbyBDT05GSUdVUkFUSU9OLTIwMjogIFJlbG9hZGluZyBjaGVja3MgY2FuIG5vdyBiZSBwZXJmb3JtZWQgaW4gYSBiYWNrZ3JvdW5kIHRocmVhZC4KCkZpeGVkIEJ1Z3M6Cj09PT09PT09PT09Cm8gQ09ORklHVVJBVElPTi01ODI6ICBGaXhlZCBhIFN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaW4gUHJvcGVydGllc0NvbmZpZ3VyYXRpb25MYXlvdXQKICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdhcyBjYXVzZWQgYnkgbGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2UuCm8gQ09ORklHVVJBVElPTi01NzI6ICBXaGVuIGEgQ29tYmluZWRDb25maWd1cmF0aW9uIGlzIGNsZWFyZWQgaXQgcmVtb3ZlcyBpdHNlbGYgYXMgY2hhbmdlCiAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lciBmcm9tIGFsbCBjaGlsZCBjb25maWd1cmF0aW9ucy4gVGhpcyBmaXhlcyBhIHBvc3NpYmxlIG1lbW9yeQogICAgICAgICAgICAgICAgICAgICAgbGVhay4KbyBDT05GSUdVUkFUSU9OLTU3MDogIEZpeGVkIGEgcG9zc2libGUgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiB3aGVuIGEgU3lzdGVtQ29uZmlndXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgaXMgcGFzc2VkIHRvIHRoZSBhcHBlbmQoKSBvciBjb3B5KCkgbWV0aG9kcy4KbyBDT05GSUdVUkFUSU9OLTU2NzogIFhNTEJlYW5EZWNsYXJhdGlvbiBub3cgZXNjYXBlcyBub2RlIG5hbWVzIGJlZm9yZSB0aGV5IGFyZSB1c2VkIHRvCiAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmUgbmVzdGVkIHByb3BlcnRpZXMuIFRoYW5rcyB0byBTaGVuIGxpYW5nLgoKQ2hhbmdlczoKbyBDT05GSUdVUkFUSU9OLTU5MTogIFJlbW92ZWQgbWV0aG9kcyBmcm9tIENvbmZpZ3VyYXRpb25Db252ZXJ0ZXIgcmVsYXRlZCB0byBFeHRlbmRlZFByb3BlcnRpZXMuCiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNsYXNzIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgYnkgcmVjZW50IHZlcnNpb25zIG9mIENvbW1vbnMKICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb25zLgpvIENPTkZJR1VSQVRJT04tNTkwOiAgUmVtb3ZlZCBTZXJpYWxpemFibGUgaW50ZXJmYWNlIGZyb20gYWxsIGNvbmZpZ3VyYXRpb24gaW1wbGVtZW50YXRpb25zLgogICAgICAgICAgICAgICAgICAgICAgU29tZSBjb25maWd1cmF0aW9uIGNsYXNzZXMgZGVjbGFyZWQgdGhpcyBpbnRlcmZhY2Ugd2l0aG91dCBiZWluZwogICAgICAgICAgICAgICAgICAgICAgYWN0dWFsbHkgc2VyaWFsaXphYmxlLgpvIENPTkZJR1VSQVRJT04tNTg4OiAgVGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBwYWNrYWdlIGFuZCB0aGUgbWF2ZW4gY29vcmRpbmF0ZXMgaGF2ZSBiZWVuCiAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHRvIGFsbG93IGEgY29leGlzdGVuY2Ugb2YgQ29tbW9ucyBDb25maWd1cmF0aW9uIDEueCB3aXRoIDIuMC4KbyBDT05GSUdVUkFUSU9OLTU4NDogIFRoZSBldmVudCBtZWNoYW5pc20gaGFzIGJlZW4gcmV3b3JrZWQuIFRoZXJlIGlzIG5vdyBhIGdlbmVyaWMgZXZlbnQKICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyIGludGVyZmFjZSB3aGljaCBjYW4gYmUgdXNlZCB0byByZWNlaXZlIG5vdGlmaWNhdGlvbnMgZnJvbQogICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgdHlwZXMgb2YgZXZlbnQgc291cmNlcy4KbyBDT05GSUdVUkFUSU9OLTU3ODogIFRoZSB1c2VyJ3MgZ3VpZGUgaGFzIGJlZW4gZnVsbHkgcmV3b3JrZWQgdG8gY292ZXIgYWxsIG5ldyBhbmQgZW5oYW5jZWQKICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIG9mIHZlcnNpb24gMi4wLgpvIENPTkZJR1VSQVRJT04tNTc3OiAgVGhlIGRlcGVuZGVuY3kgdG8gQ29tbW9ucyBDb2xsZWN0aW9ucyBpcyBubyBsb25nZXIgbmVlZGVkLgpvIENPTkZJR1VSQVRJT04tNTc2OiAgQSBuZXcgYWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgaGllcmFyY2hpY2FsIGNvbmZpZ3VyYXRpb25zIHdhcyBpbnRyb2R1Y2VkCiAgICAgICAgICAgICAgICAgICAgICB3aGljaCBzdXBwb3J0cyBhcmJpdHJhcnkgaGllcmFyY2hpY2FsIGRhdGEgc3RydWN0dXJlcy4gVGhlIHR5cGUgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICBub2RlcyB1c2VkIGJ5IHRoZSBjb25maWd1cmF0aW9uIGNhbiBub3cgYmUgc3BlY2lmaWVkIGFzIGEgZ2VuZXJpYyB0eXBlCiAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC4gVGhpcyBtYWtlcyB0aGUgaW50ZWdyYXRpb24gb2Ygb3RoZXIgaGllcmFyY2hpY2FsIHN0cnVjdHVyZXMKICAgICAgICAgICAgICAgICAgICAgIGVhc2llci4KbyBDT05GSUdVUkFUSU9OLTU3NTogIEhpZXJhcmNoaWNhbCBjb25maWd1cmF0aW9ucyBub3cgb3BlcmF0ZSBvbiBpbW11dGFibGUgc3RydWN0dXJlcy4KICAgICAgICAgICAgICAgICAgICAgIERhdGEgaXMgbm8gbG9uZ2VyIHJlcHJlc2VudGVkIGJ5IENvbmZpZ3VyYXRpb25Ob2RlIG9iamVjdHMuIFRoZQogICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxlTm9kZSBjbGFzcyBub3cgc2VydmVzIGFzIGRhdGEgY29udGFpbmVyLgpvIENPTkZJR1VSQVRJT04tNTczOiAgWFBhdGhFeHByZXNzaW9uRW5naW5lIGNhbiBub3cgZGVhbCB3aXRoIG5hbWVzcGFjZSBwcmVmaXhlcyBpbiBub2RlIGFuZAogICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIG5hbWVzLgpvIENPTkZJR1VSQVRJT04tNTYzOiAgVGhlIERlZmF1bHRFeHByZXNzaW9uRW5naW5lIGNsYXNzIGlzIG5vdyBpbW11dGFibGUuIEFuIGluc3RhbmNlIGNhbiBiZQogICAgICAgICAgICAgICAgICAgICAgc2hhcmVkIGJldHdlZW4gbXVsdGlwbGUgY29uZmlndXJhdGlvbiBvYmplY3RzLgpvIENPTkZJR1VSQVRJT04tNTYyOiAgSW1wcm92ZWQgdGhlIEFQSSBvZiBFeHByTG9va3VwLgpvIENPTkZJR1VSQVRJT04tNTU1OiAgRml4ZWQgYSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIHRoZSB4bWw6c3BhY2UgYXR0cmlidXRlIGluCiAgICAgICAgICAgICAgICAgICAgICBYTUxDb25maWd1cmF0aW9uLiBUaGUgYXR0cmlidXRlIGlzIG5vdyBhbHNvIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnQKICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsIG5vdCBvbmx5IHRvIHN1YiBlbGVtZW50cy4KbyBDT05GSUdVUkFUSU9OLTU1NDogIEJlYW5IZWxwZXIgaXMgbm8gbG9uZ2VyIGEgc3RhdGljIHV0aWxpdHkgY2xhc3MuIEluc3RhbmNlcyBjYW4gYmUKICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgd2l0aCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb2YgYmVhbiBmYWN0b3JpZXMuIFRoZXJlIGlzIHN0aWxsCiAgICAgICAgICAgICAgICAgICAgICBhIGRlZmF1bHQgaW5zdGFuY2Ugd2hpY2ggY2FuIGJlIG9idGFpbmVkIHZpYSB0aGUgQmVhbkhlbHBlci5JTlNUQU5DRQogICAgICAgICAgICAgICAgICAgICAgZmllbGQuCm8gQ09ORklHVVJBVElPTi01NTM6ICBUaGUgY29kZSBmb3IgYWNjZXNzaW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgaGFzIGJlZW4gcmV3b3JrZWQuIE1ldGhvZHMKICAgICAgICAgICAgICAgICAgICAgIHJlbGF0ZWQgdG8gbG9jYXRpbmcgY29uZmlndXJhdGlvbiBmaWxlcyBoYXZlIGJlZW4gbW92ZWQgZnJvbQogICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvblV0aWxzIHRvIGEgbmV3IEZpbGVMb2NhdG9yVXRpbHMgY2xhc3MuIEN1c3RvbWl6YWJsZQogICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3kgY2xhc3NlcyAoaW1wbGVtZW50aW5nIHRoZSBuZXcgRmlsZUxvY2F0aW9uU3RyYXRlZ3kpIGNhbiBiZQogICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3Igc2VhcmNoaW5nIGZvciBjb25maWd1cmF0aW9uIGZpbGVzLgpvIENPTkZJR1VSQVRJT04tNTQ2OiAgQmVhbkhlbHBlciBjYW4gbm93IHByb2Nlc3MgQmVhbkRlZmluaXRpb25zIGluaXRpYWxpemluZyBwcm9wZXJ0aWVzIG9mCiAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uIHR5cGVzIG9mIHRoZWlyIHRhcmdldCBiZWFucy4gVGhhbmtzIHRvIEp1c3RpbiBDb3VjaC4KbyBDT05GSUdVUkFUSU9OLTU0NDogIEFkZGVkIG1pc3NpbmcgZGVwZW5kZW5jaWVzIHRvIGJ1aWxkLnhtbC4gVGhhbmtzIHRvIE9saXZlciBLb3BwLgpvIENPTkZJR1VSQVRJT04tNTQyOiAgVGhlIG1lY2hhbmlzbSBmb3Igc3luY2hyb25pemluZyBjb25maWd1cmF0aW9ucyBoYXMgYmVlbiBjb21wbGV0ZWx5CiAgICAgICAgICAgICAgICAgICAgICByZWRlc2lnbmVkLiBJdCBpcyBub3cgYmFzZWQgb24gU3luY2hyb25pemVyIG9iamVjdHMgd2hpY2ggY2FuIGJlCiAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkIGJ5IGNsaWVudCBjb2RlLiBBIG5ldyBjaGFwdGVyIHdhcyBhZGRlZCB0byB0aGUgdXNlcidzIGd1aWRlCiAgICAgICAgICAgICAgICAgICAgICByZWdhcmRpbmcgdGhyZWFkLXNhZmV0eSBvZiBjb25maWd1cmF0aW9ucy4KbyBDT05GSUdVUkFUSU9OLTU0MDogIE1hcENvbmZpZ3VyYXRpb24gbm93IGRpcmVjdGx5IHVzZXMgYSBQcm9wZXJ0aWVzIG9iamVjdCBwYXNzZWQgdG8gaXRzCiAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciBhcyBkYXRhIHN0b3JlIHJhdGhlciB0aGFuIGNvcHlpbmcgaXQuIFRoaXMgYWxsb3dzCiAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1Db25maWd1cmF0aW9uIHRvIGJlIGNvbm5lY3RlZCB0byBzeXN0ZW0gcHJvcGVydGllczsgaS5lLgogICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcgYSBwcm9wZXJ0eSB0aHJvdWdoIFN5c3RlbUNvbmZpZ3VyYXRpb24gaW1tZWRpYXRlbHkgYWZmZWN0cwogICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgc3lzdGVtIHByb3BlcnR5LgpvIENPTkZJR1VSQVRJT04tNTM5OiAgVGhlIGRlcHJlY2F0ZWQgSU5JQ29uZmlndXJhdGlvbiBjbGFzcyB3YXMgcmVtb3ZlZC4KICAgICAgICAgICAgICAgICAgICAgIEhpZXJhcmNoaWNhbElOSUNvbmZpZ3VyYXRpb24gd2FzIHJlbmFtZWQgdG8gSU5JQ29uZmlndXJhdGlvbi4KbyBDT05GSUdVUkFUSU9OLTUzNzogIFRoZSBkZXByZWNhdGVkIENvbmZpZ3VyYXRpb25GYWN0b3J5IGNsYXNzIHdhcyByZW1vdmVkLgpvIENPTkZJR1VSQVRJT04tNTM2OiAgRmlsZS1iYXNlZCBjb25maWd1cmF0aW9ucyBhcmUgbm93IGltcGxlbWVudGVkIGluIGEgZGlmZmVyZW50IHdheS4KICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbnRlcmZhY2VzIEZpbGVDb25maWd1cmF0aW9uIGFuZCBSZWxvYWRpbmdTdHJhdGVneSBoYXZlIGJlZW4KICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQsIGFsc28gdGhlIGJhc2UgY2xhc3NlcyBBYnN0cmFjdEZpbGVDb25maWd1cmF0aW9uIGFuZAogICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RIaWVyYXJjaGljYWxGaWxlQ29uZmlndXJhdGlvbi4gVGhleSBhcmUgcmVwbGFjZWQgYnkgdGhlCiAgICAgICAgICAgICAgICAgICAgICBGaWxlQmFzZWQgaW50ZXJmYWNlIGFuZCB0aGUgRmlsZUhhbmRsZXIgY2xhc3Mgd2hpY2ggaW1wbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgY2VudHJhbCBJL08gZnVuY3Rpb25hbGl0eS4gUmVsb2FkaW5nIGlzIG5vdyBpbiB0aGUgcmVzcG9uc2liaWxpdHkgb2YKICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gYnVpbGRlcnMuCm8gQ09ORklHVVJBVElPTi01MzQ6ICBUaGUgaW5jbHVkZXNBbGxvd2VkIHByb3BlcnR5IG9mIFByb3BlcnR5Q29uZmlndXJhdGlvbiBpcyBub3cgaW5kZXBlbmRlbnQKICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGhlIGV4aXN0ZW5jZSBvZiBhIGJhc2UgcGF0aC4KbyBDT05GSUdVUkFUSU9OLTUzMDogIENvbmN1cnJlbnQgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxvYWRpbmcgaGF2ZSBiZWVuIGNvbXBsZXRlbHkKICAgICAgICAgICAgICAgICAgICAgIHJlZGVzaWduZWQuIEJlY2F1c2UgcmVsb2FkaW5nIGlzIG5vdyBoYW5kbGVkIGJ5IGNvbmZpZ3VyYXRpb24gYnVpbGRlcnMKICAgICAgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWNxdWlyZSBhIGxvY2sgaW4gb3JkZXIgdG8gcHJvdGVjdGVkIGFnYWluc3QgYQogICAgICAgICAgICAgICAgICAgICAgcmVsb2FkIG9wZXJhdGlvbnMuCm8gQ09ORklHVVJBVElPTi01Mjc6ICBBYnN0cmFjdENvbmZpZ3VyYXRpb24uY2xlYXJQcm9wZXJ0eURpcmVjdCgpIGlzIG5vdyBhYnN0cmFjdC4gVGhhbmtzIHRvIE1hdHRoaWFzIFJpY2h0ZXIuCm8gQ09ORklHVVJBVElPTi01MjY6ICBYTUxQcm9wZXJ0aWVzQ29uZmlndXJhdGlvbiBub3cgc3VwcG9ydHMgbG9hZGluZyBmcm9tIGFuZCBzYXZpbmcgdG8gRE9NCiAgICAgICAgICAgICAgICAgICAgICBub2Rlcy4gVGhhbmtzIHRvIE9saXZlciBLb3BwLgpvIENPTkZJR1VSQVRJT04tNTI0OiAgSW50ZXJwb2xhdGlvbiBub3cgd29ya3MgY29ycmVjdGx5IGFmdGVyIGEgY29uZmlndXJhdGlvbiB3YXMgY2xvbmVkLgogICAgICAgICAgICAgICAgICAgICAgVGhlIENvbmZpZ3VyYXRpb25JbnRlcnBvbGF0b3IgaW5zdGFuY2UgaXMgbm93IGNsb25lZCwgdG9vLgpvIENPTkZJR1VSQVRJT04tNTIxOiAgQ29uZmlndXJhdGlvblV0aWxzLmZpbGVGcm9tVXJsKCkgbm93IGNvcnJlY3RseSBoYW5kbGVzIFVSTCBjb250YWluaW5nCiAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkIHBlcmNlbnQgY2hhcmFjdGVycy4gVGhhbmtzIHRvIE9saXZlciBLb3BwLgpvIENPTkZJR1VSQVRJT04tNTIwOiAgU3VwcG9ydCBmb3IgcmVsb2FkaW5nIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSBoYXMgYmVlbiByZXdvcmtlZC4KbyBDT05GSUdVUkFUSU9OLTUxODogIENsYXNzZXMgYW5kIGludGVyZmFjZXMgcmVsYXRlZCB0byBpbnRlcnBvbGF0aW9uIGhhdmUgYmVlbiBzbGlnaHRseQogICAgICAgICAgICAgICAgICAgICAgcmV3b3JrZWQuIENvbmZpZ3VyYXRpb25JbnRlcnBvbGF0b3IgaXMgbm93IHRocmVhZC1zYWZlLiBUaGVyZSBhcmUKICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlIHdheXMgdG8gZGVmaW5lIHRoZSBDb25maWd1cmF0aW9uSW50ZXJwb2xhdG9yIG9iamVjdCB0byBiZQogICAgICAgICAgICAgICAgICAgICAgdXNlZCBieSBhbiBBYnN0cmFjdENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuCm8gQ09ORklHVVJBVElPTi01MTY6ICBQcm9wZXJ0aWVzQ29uZmlndXJhdGlvbiBubyBsb25nZXIgZXNjYXBlcyBkb3VibGUgcXVvdGVzIG9uIHNhdmluZy4KbyBDT05GSUdVUkFUSU9OLTUxNTogIFRoZSB2aXNpYmlsaXR5IG9mIHNvbWUgaW50ZXJuYWwgbWV0aG9kcyBvZiBQcm9wZXJ0aWVzQ29uZmlndXJhdGlvbi5Qcm9wZXJ0aWVzV3JpdGVyCiAgICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gcHJvdGVjdGVkLiBUaGlzIHNpbXBsaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9mCiAgICAgICAgICAgICAgICAgICAgICBhIGN1c3RvbSBlc2NhcGluZyBzdHJhdGVneS4KbyBDT05GSUdVUkFUSU9OLTUxMzogIEhpZXJhcmNoaWNhbENvbmZpZ3VyYXRpb24gaXMgbm93IGFuIGludGVyZmFjZS4gVGhlIGJhc2UgaW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIGlzIG5hbWVkIEJhc2VIaWVyYXJjaGljYWxDb25maWd1cmF0aW9uLgpvIENPTkZJR1VSQVRJT04tNTA2OiAgUmVtb3ZlZCBvYnNvbGV0ZSBuZXN0ZWQgY2xhc3NlcyBOb2RlIGFuZCBOb2RlVmlzaXRvciBvZgogICAgICAgICAgICAgICAgICAgICAgSGllcmFyY2hpY2FsQ29uZmlndXJhdGlvbi4gVGhlIHJlbGF0ZWQgZGVwcmVjYXRlZCBjbGFzcwogICAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbktleSB3YXMgcmVtb3ZlZCwgdG9vLgpvIENPTkZJR1VSQVRJT04tNTA1OiAgWE1MQ29uZmlndXJhdGlvbiBubyBsb25nZXIgc3VwcG9ydHMgYXR0cmlidXRlcyB3aXRoIG11bHRpcGxlIHZhbHVlcyBvcgogICAgICAgICAgICAgICAgICAgICAgbGlzdCBkZWxpbWl0ZXIgcGFyc2luZyBpbiBhdHRyaWJ1dGVzLiBUaGlzIGZlYXR1cmUgd2FzIGNvbXBsZXggYW5kCiAgICAgICAgICAgICAgICAgICAgICBlcnJvciBwcm9uZSBhbmQgYnJvdWdodCBsaXR0bGUgdmFsdWUgdG8gdGhlIHVzZXIuCm8gQ09ORklHVVJBVElPTi01MDQ6ICBTdWJub2RlQ29uZmlndXJhdGlvbiBub3cgcHJvdmlkZXMgYSBuZXcgbWV0aG9kIGZvciBjbGVhcmluZyBpdCBhbmQKICAgICAgICAgICAgICAgICAgICAgIHJlbW92aW5nIGl0cyByb290IG5vZGUgZnJvbSB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24uIFRoZSBtZXRob2QKICAgICAgICAgICAgICAgICAgICAgIEhpZXJhcmNoaWNhbENvbmZpZ3VyYXRpb24uY29uZmlndXJhdGlvbnNBdCgpIG5vdyByZXR1cm5zIGEgbGlzdAogICAgICAgICAgICAgICAgICAgICAgb2YgU3Vibm9kZUNvbmZpZ3VyYXRpb24gc28gdGhhdCBpdCBpcyBlYXNpZXIgdG8gbWFrZSBkaXJlY3QgdXNlIG9mCiAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZlYXR1cmUuCm8gQ09ORklHVVJBVElPTi01MDA6ICBYTUxDb25maWd1cmF0aW9uIG5vdyBhZGRzIGF0dHJpYnV0ZXMgb2YgZWxlbWVudHMgZGVmaW5pbmcgYSBsaXN0IHRvCiAgICAgICAgICAgICAgICAgICAgICBhbGwgbGlzdCBub2Rlcy4KbyBDT05GSUdVUkFUSU9OLTQ5NjogIENvbmN1cnJlbnQgYWNjZXNzIHRvIGNvbmZpZ3VyYXRpb25zIGFuZCByZWxvYWRpbmcgaGF2ZSBiZWVuIGNvbXBsZXRlbHkKICAgICAgICAgICAgICAgICAgICAgIHJlZGVzaWduZWQuIFRoaXMgc2hvdWxkIHJlZHVjZSB0aGUgYW1vdW50IG9mIHN5bmNocm9uaXphdGlvbi4KbyBDT05GSUdVUkFUSU9OLTQ4NjogIFJlbW92ZWQgc29tZSBzdGF0aWMgZmllbGRzIGZvciBzcGVjaWZ5aW5nIGdsb2JhbCBkZWZhdWx0IHZhbHVlcy4KICAgICAgICAgICAgICAgICAgICAgIFVzaW5nIHN0YXRpYyBmaWVsZHMgaW4gdGhpcyB3YXkgaXMgdGhyZWFkLWhvc3RpbGUuIFRoZXJlIGFyZSBub3cKICAgICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcyBmb3Igc2V0dGluZyBkZWZhdWx0IHZhbHVlcy4KbyBDT05GSUdVUkFUSU9OLTQ2MjogIFVwZGF0ZWQgZGVwZW5kZW5jeSB0byBDb21tb25zIExhbmcgZnJvbSB2ZXJzaW9uIDIuNiB0byAzLjEuCm8gQ09ORklHVVJBVElPTi00MTk6ICBFdmVudFNvdXJjZSBpcyBub3cgYW4gaW50ZXJmYWNlLiBXaXRoIEJhc2VFdmVudFNvdXJjZSB0aGVyZSBpcyBhCiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGltcGxlbWVudGF0aW9uLgpvIENPTkZJR1VSQVRJT04tNDE4OiAgVGhlIGhhbmRsaW5nIG9mIGxpc3QgZGVsaW1pdGVycyBhbmQgdGhlaXIgZXNjYXBlIGNoYXJhY3RlcnMgaGFzIGJlZW4KICAgICAgICAgICAgICAgICAgICAgIHJld29ya2VkLiBBIG5ldyBMaXN0RGVsaW1pdGVySGFuZGxlciBpbnRlcmZhY2Ugd2FzIGludHJvZHVjZWQgYWxsb3dpbmcKICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucyB0byBjdXN0b21pemUgdGhlIHRyZWF0bWVudCBvZiBsaXN0IGRlbGltaXRlcnMuCm8gQ09ORklHVVJBVElPTi0zMzA6ICBDb25jdXJyZW50IGFjY2VzcyB0byBjb25maWd1cmF0aW9ucyBoYXMgYmVlbiByZXdvcmtlZC4KbyBDT05GSUdVUkFUSU9OLTE1MzogIEl0IGlzIG5vdyBwb3NzaWJsZSB0byBkZWZpbmUgdGhlIHN0cmF0ZWd5IHVzZWQgZm9yIGxvY2F0aW5nCiAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgpvIENPTkZJR1VSQVRJT04tMTM2OiAgUmVsb2FkaW5nIGNhbiBubyBsb25nZXIgY29ycnVwdCBhIGNvbmZpZ3VyYXRpb24gaW5zdGFuY2UuIFRoaXMgaXMgbm93CiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkIGJ5IGEgY29uZmlndXJhdGlvbiBidWlsZGVyOyB0aGUgb3JpZ2luYWwgY29uZmlndXJhdGlvbiBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgICAgaXMgbm90IG1vZGlmaWVkLgpvIENPTkZJR1VSQVRJT04tMjY6ICAgSXQgaXMgbm93IHBvc3NpYmxlIHRvIGluZmx1ZW5jZSB0aGUgY29udmVyc2lvbiBmcm9tIGEgY29udGFpbmVyIG9iamVjdAogICAgICAgICAgICAgICAgICAgICAgKGEgY29sbGVjdGlvbiBvciBhbiBhcnJheSkgdG8gYSBzaW5nbGUgdmFsdWUgKGUuZy4gd2hhdCBpcyByZXR1cm5lZCBieQogICAgICAgICAgICAgICAgICAgICAgZ2V0U3RyaW5nKCkgaWYgdGhlIGN1cnJlbnQgcHJvcGVydHkgaGFzIG11bHRpcGxlIHZhbHVlcykuIFBlciBkZWZhdWx0LAogICAgICAgICAgICAgICAgICAgICAgdGhlIGZpcnN0IHZhbHVlIGlzIHJldHVybmVkLiBCeSBvdmVycmlkaW5nIG1ldGhvZHMgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uJ3MgQ29udmVyc2lvbkhhbmRsZXIsIHRoaXMgYmVoYXZpb3IgY2FuIGJlIGNoYW5nZWQuCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vY2hhbmdlcy1yZXBvcnQuaHRtbAoKRm9yIGNvbXBsZXRlIGluZm9ybWF0aW9uIG9uIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24sIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBDb21tb25zIENvbmZpZ3VyYXRpb24gd2Vic2l0ZToKCmh0dHBzOi8vY29tbW9ucy5hcGFjaGUub3JnL3Byb3Blci9jb21tb25zLWNvbmZpZ3VyYXRpb24vCg==