ICAgICAgICAgICAgICBBcGFjaGUgQ29tbW9ucyBCZWFuVXRpbHMgMS45LjMKICAgICAgICAgICAgICAgICAgUkVMRUFTRSBOT1RFUwoKVGhlIEFwYWNoZSBDb21tb25zIEJlYW5VdGlscyB0ZWFtIGlzIHBsZWFzZWQgdG8gYW5ub3VuY2UgdGhlIHJlbGVhc2Ugb2YgQXBhY2hlIENvbW1vbnMgQmVhblV0aWxzIDEuOS4zCgpBcGFjaGUgQ29tbW9ucyBCZWFuVXRpbHMgcHJvdmlkZXMgYW4gZWFzeS10by11c2UgYnV0IGZsZXhpYmxlIHdyYXBwZXIgYXJvdW5kIHJlZmxlY3Rpb24gYW5kIGludHJvc3BlY3Rpb24uCgpUaGlzIGlzIGEgYnVnIGZpeCByZWxlYXNlLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCkZpeGVkIEJ1Z3M6Cm8gQkVBTlVUSUxTLTQ3MDogIFByZWNpc2lvbiBsb3N0IHdoZW4gY29udmVydGluZyBCaWdEZWNpbWFsIFRoYW5rcyB0byBUb21teSBUeW5q5C4KbyBCRUFOVVRJTFMtNDY1OiAgSW5kZXhlZCBMaXN0IFNldHRlcnMgbm8gbG9uZ2VyIHdvcmsgVGhhbmtzIHRvIERhbmllbCBBdGFsbGFoLgoKQ2hhbmdlczoKbyBCRUFOVVRJTFMtNDMzOiAgVXBkYXRlIGRlcGVuZGVuY3kgZnJvbSBKVW5pdCAzLjguMSB0byA0LjEyLiBUaGFua3MgdG8gQmVuZWRpa3QgUml0dGVyLCBHYXJ5IEdyZWdvcnkuCm8gQkVBTlVUSUxTLTQ5MDogIFVwZGF0ZSBKYXZhIHJlcXVpcmVtZW50IGZyb20gSmF2YSA1IHRvIDYuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQkVBTlVUSUxTLTQ3NDogIEZsdWVudFByb3BlcnR5QmVhbkludHJvc3BlY3RvciBkb2VzIG5vdCB1c2UgdGhlIHNhbWUgbmFtaW5nIGFsZ29yaXRobSBhcyBEZWZhdWx0QmVhbkludHJvc3BlY3Rvci4gVGhhbmtzIHRvIE1pY2hhZWwgR3JvdmUuCm8gQkVBTlVUSUxTLTQ4MjogIFVwZGF0ZSBjb21tb25zLWNvbGxlY3Rpb25zIGZyb20gMy4yLjEgdG8gMy4yLjIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCm8gQkVBTlVUSUxTLTQ2OTogIFVwZGF0ZSBjb21tb25zLWxvZ2dpbmcgZnJvbSAxLjEuMSB0byAxLjIuIFRoYW5rcyB0byBHYXJ5IEdyZWdvcnkuCgoKSGlzdG9yaWNhbCBsaXN0IG9mIGNoYW5nZXM6IGh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtYmVhbnV0aWxzL2NoYW5nZXMtcmVwb3J0Lmh0bWwKCkZvciBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbiBBcGFjaGUgQ29tbW9ucyBCZWFuVXRpbHMsIGluY2x1ZGluZyBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHN1Ym1pdCBidWcgcmVwb3J0cywKcGF0Y2hlcywgb3Igc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBzZWUgdGhlIEFwYWNoZSBBcGFjaGUgQ29tbW9ucyBCZWFuVXRpbHMgd2Vic2l0ZToKCmh0dHA6Ly9jb21tb25zLmFwYWNoZS5vcmcvcHJvcGVyL2NvbW1vbnMtYmVhbnV0aWxzLwoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbW9ucyBCZWFuVXRpbHMgUGFja2FnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjkuMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcwoKSU5UUk9EVUNUSU9OOgo9PT09PT09PT09PT0KClRoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJlbGVhc2Ugbm90ZXMgZm9yIHRoaXMgdmVyc2lvbiBvZiB0aGUgQ29tbW9ucwpCZWFuVXRpbHMgcGFja2FnZSwgYW5kIGhpZ2hsaWdodHMgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4KCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIENvbW1vbnMgQmVhblV0aWxzLCBzZWUKbyBodHRwOi8vY29tbW9ucy5hcGFjaGUub3JnL2JlYW51dGlscy8KClJlbGVhc2UgMS45LjIgbWFpbmx5IGFkZHJlc3NlcyBhIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZSB3aGVuIGFjY2Vzc2luZwpwcm9wZXJ0aWVzIGluIGFuIHVuY29udHJvbGxlZCB3YXkuIEluIGEgbnV0c2hlbGwsIGlmIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcwpDb21tb25zIEJlYW5VdGlscyBwYXNzZXMgcHJvcGVydHkgcGF0aHMgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2UgZGlyZWN0bHkgdG8KdGhlIGdldFByb3BlcnR5KCkgbWV0aG9kIG9mIEJlYW5VdGlsc0JlYW4sIGFuIGF0dGFja2VyIGNhbiBhY2Nlc3MgdGhlIGNsYXNzCmxvYWRlciB2aWEgdGhlIGNsYXNzIHByb3BlcnR5IGF2YWlsYWJsZSBvbiBhbGwgSmF2YSBvYmplY3RzLgoKSW4gdmVyc2lvbiAxLjkuMiBub3cgYSBzcGVjaWFsIEJlYW5JbnRyb3NwZWN0b3IgY2xhc3Mgd2FzIGFkZGVkIHdoaWNoIGFsbG93cwpzdXBwcmVzc2luZyB0aGlzIHByb3BlcnR5LiBOb3RlIHRoYXQgdGhpcyBCZWFuSW50cm9zcGVjdG9yIGlzIE5PVCBlbmFibGVkIGJ5CmRlZmF1bHQhIENvbW1vbnMgQmVhblV0aWxzIGlzIGEgbG93LWxldmVsIGxpYnJhcnksIGFuZCBvbiB0aGlzIGxheWVyIGl0IGNhbm5vdApiZSBkZWNpZGVkIHdoZXRoZXIgYWNjZXNzIHRvIGEgY2VydGFpbiBwcm9wZXJ0eSBpcyBsZWdhbCBvciBub3QuIFRoZXJlZm9yZSwKYW4gYXBwbGljYXRpb24gaGFzIHRvIGFjdGl2YXRlIHRoaXMgc3VwcHJlc3NpbmcgQmVhbkludHJvc3BlY3RvciBleHBsaWNpdGx5LgpUaGlzIGNhbiBiZSBkb25lIHdpdGggdGhlIGZvbGxvd2luZyBsaW5lcyBvZiBjb2RlOgoKQmVhblV0aWxzQmVhbiBidWIgPSBuZXcgQmVhblV0aWxzQmVhbigpOwpidWIuZ2V0UHJvcGVydHlVdGlscygpLmFkZEJlYW5JbnRyb3NwZWN0b3IoCiAgICBTdXBwcmVzc1Byb3BlcnRpZXNCZWFuSW50cm9zcGVjdG9yLlNVUFBSRVNTX0NMQVNTKTsKCk5vdyBhbGwgYWNjZXNzIHRvIHByb3BlcnRpZXMgaGFzIHRvIGJlIGRvbmUgdmlhIHRoZSBzcGVjaWFsbHkgY29uZmlndXJlZApCZWFuVXRpbHNCZWFuIGluc3RhbmNlLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgaXNzdWUgY2FuIGJlIGZvdW5kIGF0Cmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQkVBTlVUSUxTLTQ2MyBvciBpbiBzZWN0aW9uIDIuNSBvZiB0aGUKdXNlcidzIGd1aWRlLgoKQlVHRklYRVMgaW4gdmVyc2lvbiAxLjkuMgo9PT09PT09PT09PT09PT09PT09PT09PT09CiogW0JFQU5VVElMUy00NThdCiAgQmFzZUxvY2FsZUNvbnZlcnRlci5jaGVja0NvbnZlcnNpb25SZXN1bHQoKSBubyBsb25nZXIgdGhyb3dzIGEKICBDb252ZXJzaW9uRXhjZXB0aW9uIGlmIHRoZSByZXN1bHQgb2YgYSBjb252ZXJzaW9uIGlzIG51bGwuCgpOZXcgZmVhdHVyZXMgaW4gdmVyc2lvbiAxLjkuMgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqIFtCRUFOVVRJTFMtNDYzXQogIEFkZGVkIG5ldyBTdXBwcmVzc1Byb3BlcnRpZXNCZWFuSW50cm9zcGVjdG9yIGNsYXNzIHRvIGRlYWwgd2l0aCBhIHBvdGVudGlhbAogIGNsYXNzIGxvYWRlciB2dWxuZXJhYmlsaXR5LgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbGVhc2UgTm90ZXMgZm9yIHZlcnNpb24gMS45LjEKClJlbGVhc2UgMS45LjEgaXMgYSBidWcgZml4IHJlbGVhc2Ugd2hpY2ggYWRkcmVzc2VzIGEgcHJvYmxlbSB3aXRoIHRoZSBuZXcKZmVhdHVyZSBvZiBjdXN0b20gaW50cm9zcGVjdGlvbiBpbnRyb2R1Y2VkIHdpdGggcmVsZWFzZSAxLjkuMC4gSXQgaXMgZnVsbHkKYmluYXJ5IGNvbXBhdGlibGUgd2l0aCB0aGUgcHJldmlvdXMgcmVsZWFzZS4gVGhlIG1pbmltdW0gcmVxdWlyZWQgSmF2YSB2ZXJzaW9uCmlzIDEuNS4KCkJVR0ZJWEVTIGluIHZlcnNpb24gMS45LjEKPT09PT09PT09PT09PT09PT09PT09PT09PQoqIFtCRUFOVVRJTFMtNDU2XQogIEZvciBQcm9wZXJ0eURlc2NyaXB0b3JzIG9idGFpbmVkIHZpYSBjdXN0b20gaW50cm9zcGVjdGlvbiBub3cgYWRkaXRpb25hbAogIGluZm9ybWF0aW9uIGlzIHN0b3JlZCB0byBwcmV2ZW50IHRoYXQgd3JpdGUgbWV0aG9kcyBhcmUgbG9zdCBkdXJpbmcKICBnYXJiYWdlIGNvbGxlY3Rpb24uCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgICAgICAgICAgICAgICAgICAgICAgUmVsZWFzZSBOb3RlcyBmb3IgdmVyc2lvbiAxLjkuMAoKUmVsZWFzZSAxLjkuMCBjb250YWlucyBzb21lIGJ1ZyBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZAphZnRlciB0aGUgMS44LjMgcmVsZWFzZS4gVGhlIG1vc3Qgb2J2aW91cyBjaGFuZ2UgaXMgdGhhdCB0aGUgbmV3IHZlcnNpb24gbm93CnJlcXVpcmVzIEpESyAxLjUgb3IgaGlnaGVyLCBhbmQgdGhhdCBsYW5ndWFnZSBmZWF0dXJlcyBpbnRyb2R1Y2VkIHdpdGggSmF2YSA1CihtYWlubHkgZ2VuZXJpY3MpIGFyZSB1c2VkLiBBIG5ldyBmZWF0dXJlIGhhcyBiZWVuIGludHJvZHVjZWQsIHRvbzogdGhlIHN1cHBvcnQKZm9yIGN1c3RvbWl6aW5nIGJlYW4gaW50cm9zcGVjdGlvbi4KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjguMwo9PT09PT09PT09PT09PT09PT09PT09PT0KQWRkaW5nIGdlbmVyaWNzIHRvIHRoZSBCZWFuVXRpbHMgQVBJIGhhcyBiZWVuIGRvbmUgaW4gYSBiYWNrd2FyZHMgY29tcGF0aWJsZQp3YXkuIFRoaXMgbWVhbnMgdGhhdCBhZnRlciB0eXBlIGVyYXN1cmUgdGhlIHJlc3VsdGluZyBjbGFzc2VzIGxvb2sgdGhlIHNhbWUgYXMKaW4gdGhlIHByZXZpb3VzIHZlcnNpb24uIEEgZHJhd2JhY2sgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHNvbWV0aW1lcyBpdCBpcwpub3QgcG9zc2libGUgdG8gdXNlIHRoZSBsb2dpY2FsbHkgY29ycmVjdCB0eXBlIHBhcmFtZXRlcnMgYmVjYXVzZSB0aGVuCmJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdvdWxkIGJlIGJyb2tlbi4gT25lIGV4YW1wbGUgaXMgdGhlIEJlYW5NYXAgY2xhc3M6IFRoZQpjbGFzcyBpcyBub3cgYSBNYXA8T2JqZWN0LCBPYmplY3Q+IHdoaWxlIGl0cyBrZXlzIGFjdHVhbGx5IGFyZSBzdHJpbmdzLgpIb3dldmVyLCBpbXBsZW1lbnRpbmcgTWFwPFN0cmluZywgT2JqZWN0PiB3b3VsZCBjaGFuZ2UgdGhlIHNpZ25hdHVyZXMgb2Ygc29tZQptZXRob2RzIGluIGFuIGluY29tcGF0aWJsZSB3YXkuIE1vcmUgZGV0YWlscyBhYm91dCBsaW1pdGF0aW9ucyBvZiB0aGUKZ2VuZXJpZmljYXRpb24gY2FuIGJlIGZvdW5kIGF0Cmh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQkVBTlVUSUxTLTQ1MgoKT25lIGV4Y2VwdGlvbiBmcm9tIHRoZSBjb21wYXRpYmlsaXR5IHJ1bGUgaXMgdGhlIFJlc3VsdFNldEl0ZXJhdG9yIGNsYXNzIHdoaWNoCm5vdyBpbXBsZW1lbnRzIHRoZSBJdGVyYXRvcjxEeW5hQmVhbj4gaW50ZXJmYWNlLiBUaGlzIGNhdXNlcyBhIGNoYW5nZSBpbiB0aGUKcmV0dXJuIHZhbHVlIG9mIGl0cyBuZXh0KCkgbWV0aG9kLiBSZXN1bHRTZXRJdGVyYXRvciBpcyB1c2VkIGludGVybmFsbHkgYXMgdGhlCml0ZXJhdG9yIGltcGxlbWVudGF0aW9uIHdpdGhpbiBSZXN1bHRTZXREeW5hQ2xhc3MgKGl0IGlzIHByb2JhYmx5IGEgbWlzdGFrZSB0aGF0Cml0IGlzIHB1YmxpYykuIFNvIGNoYW5jZXMgYXJlIG1pbmltYWwgdGhhdCB0aGlzIGNoYW5nZSBhZmZlY3RzIGV4aXN0aW5nIGNvZGUuCgpBbm90aGVyIGNoYW5nZSB3aGljaCBtYXkgYWZmZWN0IGNvbXBhdGliaWxpdHkgaXMgW0JFQU5VVElMUy0zNzldIChkZXRhaWxzIGNhbgpiZSBmb3VuZCBhdCBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0JFQU5VVElMUy0zNzkpLiBPbGRlcgp2ZXJzaW9ucyBvZiBCZWFuVXRpbHMgY29udGFpbmVkIHNvbWUgY2xhc3NlcyB0aGF0IHdlcmUgY29waWVkIGZyb20gQ29tbW9ucwpDb2xsZWN0aW9ucy4gVGhlc2UgY2xhc3NlcyBoYXZlIG5vdyBiZWVuIHJlbW92ZWQsIGFuZCBhIGRlcGVuZGVuY3kgdG8gQ29tbW9ucwpDb2xsZWN0aW9ucyBoYXMgYmVlbiBhZGRlZDsgdGhlIGNvbGxlY3Rpb25zIGphciBub3cgaGFzIHRvIGJlIGNvbnRhaW5lZCBpbiB0aGUKY2xhc3NwYXRoLCB0b28uCgpFeGNlcHQgZm9yIHRoZSBjaGFuZ2Ugb24gUmVzdWx0U2V0SXRlcmF0b3IgYW5kIHRoZSBhZGRpdGlvbmFsIGRlcGVuZGVuY3kgdG8KQ29tbW9ucyBDb2xsZWN0aW9ucywgQ29tbW9ucyBCZWFuVXRpbHMgMS45LjAgaXMgZnVsbHkgYmluYXJ5IGNvbXBhdGlibGUgd2l0aAp0aGUgcHJldmlvdXMgdmVyc2lvbiAxLjguMy4KCkNoYW5nZXMgb24gQ29udmVydGVycwo9PT09PT09PT09PT09PT09PT09PT0KVGhlIGNvbnZlcnQoKSBtZXRob2QgaW4gdGhlIENvbnZlcnRlciBpbnRlcmZhY2Ugbm93IHVzZXMgYSB0eXBlIHBhcmFtZXRlciBpbgp0aGUgZm9sbG93aW5nIHdheToKCiAgICA8VD4gVCBjb252ZXJ0KENsYXNzPFQ+IHR5cGUsIE9iamVjdCB2YWx1ZSk7CgpUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGFjY2VzcyB0aGUgY29udmVydGVyJ3MgcmVzdWx0IGluIGEgdHlwZS1zYWZlIHdheS4KQXBwbHlpbmcgZ2VuZXJpY3MgaW4gdGhpcyB3YXkgcmV2ZWFsZWQgc29tZSBpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIENvbnZlcnRlcgppbXBsZW1lbnRhdGlvbnMuIFRoZXJlIHdlcmUgc2l0dWF0aW9ucyBpbiB3aGljaCBjb252ZXJ0ZXJzIGNvdWxkIHJldHVybiBhCnJlc3VsdCBvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZSBhcyB3YXMgcmVxdWVzdGVkLiBUaGlzIHdhcyBub3QgYSBwcm9ibGVtCmJlZm9yZSBiZWNhdXNlIHRoZSByZXN1bHQgdHlwZSB3YXMganVzdCBPYmplY3QuIE5vdyB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGlmCmEgY29udmVydGVyJ3MgcmVzdWx0IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGRlc2lyZWQgdGFyZ2V0IHR5cGUuCgpCZWNhdXNlIG9mIHRoYXQgQ29udmVydGVyIGltcGxlbWVudGF0aW9ucyBoYXZlIGJlZW4gbWFkZSBtb3JlIHN0cmljdC4gQQpjb252ZXJ0ZXIgbm93IGNoZWNrcyB0aGUgcGFzc2VkIGluIHRhcmdldCB0eXBlLCBhbmQgaWYgaXQgY2Fubm90IGhhbmRsZSBpdCwKdGhyb3dzIGEgQ29udmVyc2lvbkV4Y2VwdGlvbi4gVGhpcyBwcmV2ZW50cyB1bmV4cGVjdGVkIHJlc3VsdHMgYW5kIG1ha2VzCmNvbnZlcnRlcnMgbW9yZSByZWxpYWJsZSAoaXQgY291bGQgYmUgY29uc2lkZXJlZCBhIGJ1ZyB0aGF0IGEgY29udmVydGVyIHJldHVybnMKYSByZXN1bHQgb2JqZWN0IG9mIGEgZGlmZmVyZW50IGRhdGEgdHlwZSBhcyB0aGUgcGFzc2VkIGluIHRhcmdldCB0eXBlKS4gSW4gYQp0eXBpY2FsIHNjZW5hcmlvLCB3aGVuIGNvbnZlcnRlcnMgYXJlIGFjY2Vzc2VkIHZpYSBDb252ZXJ0VXRpbHMsIHRoaXMgY2hhbmdlCnNob3VsZCBub3QgY2F1c2UgYW55IHByb2JsZW1zIGJlY2F1c2UgdGhlIGNvbnZlcnRlcnMgYXJlIG9ubHkgY2FsbGVkIGZvciB0aGUKZGF0YSB0eXBlcyB0aGV5IGhhdmUgYmVlbiByZWdpc3RlcmVkIGZvci4gQnV0IGlmIGNvbnZlcnRlcnMgYXJlIHVzZWQgZGlyZWN0bHksCnRoZXkgbWlnaHQgbm93IHRocm93IENvbnZlcnNpb25FeGNlcHRpb25zIHdoZW4gdGhleSBkaWQgbm90IGluIGEgcHJldmlvdXMKdmVyc2lvbi4KCkJVR0ZJWEVTIGluIHZlcnNpb24gMS45LjAKPT09PT09PT09PT09PT09PT09PT09PT09PQoqIFtCRUFOVVRJTFMtNDU0XQogIEJlYW5VdGlsc0JlYW4uY29weVByb3BlcnRpZXMoKSBubyBsb25nZXIgdGhyb3dzIGEgQ29udmVyc2lvbkV4Y2VwdGlvbiBmb3IKICBudWxsIHByb3BlcnRpZXMgb2YgY2VydGFpbiBkYXRhIHR5cGVzLiBUaGlzIGZpeGVzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluCiAgdmVyc2lvbiAxLjguMC4gVGhlIGlzc3VlIGlzIHJlbGF0ZWQgdG8gW0JFQU5VVElMUy0zODddLgoqIFtCRUFOVVRJTFMtNDExXQogIEJlYW5VdGlsc0JlYW4uc2V0UHJvcGVydHkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpZiBnZXR0ZXIgb2YgbmVzdGVkCiAgcHJvcGVydHkgcmV0dXJucyBudWxsLgoqIFtCRUFOVVRJTFMtNDA4XQogIE1ldGhvZFV0aWxzLmludm9rZU1ldGhvZCgpIHRocm93cyBOdWxsUG9pbnRlckV4Y2VwdGlvbiB3aGVuIGFyZ3M9PW51bGwuCiogW0JFQU5VVElMUy00MjZdCiAgQ29uc3RydWN0b3JVdGlscy5pbnZva2VDb25zdHJ1Y3RvcihDbGFzcyBrbGFzcywgT2JqZWN0IGFyZykgdGhyb3dzCiAgTnVsbFBvaW50ZXJFeGNlcHRpb24gd2hlbiBhcmc9PW51bGwuCiogW0JFQU5VVElMUy0zODBdCiAgQmVhbk1hcCBtZXRob2RzIHNob3VsZCBpbml0aWFsaXplIHRoZSByb290IGNhdXNlIG9mIGV4Y2VwdGlvbnMgdGhhdCBhcmUKICB0aHJvd24gd2hlbiBydW5uaW5nIG9uIEpESyAxLjQrLgoqIFtCRUFOVVRJTFMtMzc5XQogIFJlbW92ZSBjb3BpZWQgQ29sbGVjdGlvbiBjbGFzc2VzLgoqIFtCRUFOVVRJTFMtMzc4XQogIEJlYW5NYXAgZG9lcyBub3Qgd29yayBpbiBvc2dpIChmaXhlZCBieSBCRUFOVVRJTFMtMzc4KS4KKiBbQkVBTlVUSUxTLTM4MV0KICBNZXRob2RVdGlscyBnZXRNYXRjaGluZ0FjY2Vzc2libGVNZXRob2QoKSBkb2VzIG5vdCBjb3JyZWN0bHkgaGFuZGxlCiAgaW5oZXJpdGFuY2UgYW5kIG1ldGhvZCBvdmVybG9hZGluZy4KCk5ldyBmZWF0dXJlcyBpbiB2ZXJzaW9uIDEuOS4wCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiogW0JFQU5VVElMUy00MjVdCiAgU3VwcG9ydCBjdXN0b21pemF0aW9uIG9mIGludHJvc3BlY3Rpb24gbWVjaGFuaXNtLgoqIFtCRUFOVVRJTFMtNDI4XQogIFByb3ZpZGUgYSBCZWFuSW50cm9zcGVjdG9yIGltcGxlbWVudGF0aW9uIHdoaWNoIHN1cHBvcnRzIHByb3BlcnRpZXMgaW4gYQogIGZsdWVudCBBUEkuCiogW0JFQU5VVElMUy00NTVdCiAgV3JhcER5bmFCZWFucyBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgdG8gdXNlIGEgc3BlY2lmaWMgaW5zdGFuY2Ugb2YKICBQcm9wZXJ0eVV0aWxzQmVhbiBmb3IgaW50cm9zcGVjdGlvbiBvciBwcm9wZXJ0eSBhY2Nlc3MuCgpPdGhlciBjaGFuZ2VzIGluIHZlcnNpb24gMS45LjAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiogW0JFQU5VVElMUy00NTJdCiAgQWRkIGdlbmVyaWNzLgoqIFtCRUFOVVRJTFMtNDQ5XQogIExvY2FsZUNvbnZlcnRlcnMgZG8gbm90IHRha2UgdGhlIHRhcmdldCB0eXBlIGludG8gYWNjb3VudC4KKiBbQkVBTlVUSUxTLTQ0OF0KICBMb2NhbGVDb252ZXJ0ZXJzIGRvIG5vdCBjaGVjayB0aGVpciBkZWZhdWx0IHZhbHVlLgoqIFtCRUFOVVRJTFMtNDQ3XQogIExhenlEeW5hTGlzdC50b0FycmF5KCkgaXMgbm90IGNvbmZvcm0gdG8gdGhlIGNvbnRyYWN0IGRlZmluZWQgYnkgdGhlCiAgQ29sbGVjdGlvbiBpbnRlcmZhY2UuCiogW0JFQU5VVElMUy00NDZdCiAgU29tZSBvZiB0aGUgY29udmVydGVycyBpZ25vcmUgdGhlIHBhc3NlZCBpbiB0YXJnZXQgdHlwZS4KKiBbQkVBTlVUSUxTLTQ0NV0KICBDb252ZXJ0ZXJzIGNhbiByZXR1cm4gYW4gaW52YWxpZCByZXN1bHQgb2JqZWN0IGlmIGEgZGVmYXVsdCB2YWx1ZSBpcyBzZXQuCiogW0JFQU5VVElMUy00NDFdCiAgUmVwbGFjZSBVbm1vZGlmaWFibGVTZXQuZGVjb3JhdGUgd2l0aCBDb2xsZWN0aW9ucy51bk1vZGlmaWFibGVTZXQuCiogW0JFQU5VVElMUy00MzZdCiAgUmVwbGFjZSBwYWNrYWdlLmh0bWwgd2l0aCBwYWNrYWdlLWluZm8uamF2YS4KKiBbQkVBTlVUSUxTLTQzOF0KICBBZGQgQERlcHJlY2F0ZWQgYW5kIEBPdmVycmlkZSBBbm5vdGF0aW9ucy4KKiBbQkVBTlVUSUxTLTQzN10KICBSZXBsYWNlIERhdGUgYW5kIFJldmlzaW9uIFNWTiBrZXl3b3JkcyB3aXRoIElkLgoqIFtCRUFOVVRJTFMtNDMxXQogIFJlbW92ZSBAYXV0aG9yIHRhZ3MgYW5kIG1vdmUgbWlzc2luZyBhdXRob3JzIHRvIHBvbS54bWwuCiogW0JFQU5VVElMUy00MzJdCiAgU3dpdGNoIHRvIEphdmEgMS41LgoqIFtCRUFOVVRJTFMtNDI5XQogIERlbGV0ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZXMgYW5kIHdoaXRlIHNwYWNlcyBvbiBlbXB0eSBsaW5lcyBmcm9tIGFsbCBmaWxlcy4KKiBbQkVBTlVUSUxTLTQyN10KICBDb25maWd1cmUgQ2hlY2tzdHlsZSB0byBjaGVjayBmb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2VzIGFuZCB3aGl0ZSBzcGFjZXMgb24KICBlbXB0eSBsaW5lcy4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogICAgICAgICAgICAgICAgICAgICAgICBSZWxlYXNlIE5vdGVzIGZvciB2ZXJzaW9uIDEuOC4zCgpDb21wYXRpYmlsaXR5IHdpdGggMS44LjIKPT09PT09PT09PT09PT09PT09PT09PT09CkJlYW5VdGlscyAxLjguMyBpcyBiaW5hcnkgY29tcGF0aWJsZSByZWxlYXNlIHdpdGggQmVhbnV0aWxzIDEuOC4yLCBjb250YWluaW5nIG9ubHkgYnVnIGZpeGVzLgoKQmVhblV0aWxzIDEuOC4zIHJlcXVpcmVzIGEgbWluaW11bSBvZiBKREsgMS4zLgoKTWVtb3J5IExlYWsKPT09PT09PT09PT0KQSBtZW1vcnkgbGVhayB3YXMgZm91bmQgaW4gQmVhblV0aWxzIDEuNy4wIChzZWUgQkVBTlVUSUxTLTI5MSkgd2hpY2ggd2FzIGZpeGVkCmluIEJlYW5VdGlscyAxLjguMCBmb3IgSkRLIDEuNSsuCgpUZXN0aW5nIG9mIEJlYW5VdGlscyAxLjguMSByZXZlYWxlZCB0aGF0IHRoZSBsZWFrIHN0aWxsIGFwcGVhcnMgdG8gZXhpc3QKaW4gSUJNJ3MgSkRLIDEuNiBpbXBsZW1lbnRhdGlvbi4KCgpzZWUgaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0JFQU5VVElMUy0yOTEKICAgIGh0dHA6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9CRUFOVVRJTFMtMzY2CgoKQlVHUyBGSVhFRDoKPT09PT09PT09PT0KClRoZSBmb2xsb3dpbmcgaXMgYSBsaXN0IG9mIHRoZSBidWdzIGZpeGVkIGluIHRoaXMgcmVsZWFzZSwgd2l0aCB0aGVpciBKaXJhIGlzc3VlIG51bWJlcjoKCiAgKiBbQkVBTlVUSUxTLTM3M10gLSBNZXRob2RVdGlscyBpcyBub3QgdGhyZWFkIHNhZmUgYmVjYXVzZSBXZWFrRmFzdEhhc2hNYXAgd2hpY2ggdXNlcyBXZWFrSGFzaE1hcCBpcyBub3QgdGhyZWFkLXNhZmUKICAqIFtCRUFOVVRJTFMtMzcxXSAtIEFkZCBjb25zdHJ1Y3RvcnMgd2hpY2ggaGF2ZSB1c2VDb2x1bW5MYWJlbCBwYXJhbWV0ZXIgdG8gUmVzdWx0U2V0RHluYUNsYXNzIGFuZCBSb3dTZXREeW5hQ2xhc3MKCg==