LyoKICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCiAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CiAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCiAqCiAqIENvbnRyaWJ1dG9yczoKICogICBJQk0gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoKICogJElkOiBSZW1vdmVTdHJ1Y3R1cmFsRmVhdHVyZVZhbHVlQWN0aW9uLmphdmEsdiAxLjYgMjAwNS8wNS8xOCAxNjozODoyOSBraHVzc2V5IEV4cCAkCiAqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLnVtbDI7CgoKLyoqCiAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CiAqIEEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsIG9iamVjdCAnPGVtPjxiPlJlbW92ZSBTdHJ1Y3R1cmFsIEZlYXR1cmUgVmFsdWUgQWN0aW9uPC9iPjwvZW0+Jy4KICogPCEtLSBlbmQtdXNlci1kb2MgLS0+CiAqCiAqIDwhLS0gYmVnaW4tbW9kZWwtZG9jIC0tPgogKiBUaGUgb2JqZWN0IHRvIGFjY2VzcyBpcyBzcGVjaWZpZWQgZHluYW1pY2FsbHksIGJ5IHJlZmVycmluZyB0byBhbiBpbnB1dCBwaW4gb24gd2hpY2ggdGhlIG9iamVjdCB3aWxsIGJlIHBsYWNlZCBhdCBydW50aW1lLiBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgb2YgdGhpcyBwaW4gaXMgdGhlIGNsYXNzaWZpZXIgdGhhdCBvd25zIHRoZSBzcGVjaWZpZWQgc3RydWN0dXJhbCBmZWF0dXJlLCBhbmQgdGhlIHZhbHVlknMgbXVsdGlwbGljaXR5IGlzIDEuLjEuIAogKiA8IS0tIGVuZC1tb2RlbC1kb2MgLS0+CiAqCiAqCiAqIEBzZWUgb3JnLmVjbGlwc2UudW1sMi5VTUwyUGFja2FnZSNnZXRSZW1vdmVTdHJ1Y3R1cmFsRmVhdHVyZVZhbHVlQWN0aW9uKCkKICogQG1vZGVsCiAqIEBnZW5lcmF0ZWQKICovCnB1YmxpYyBpbnRlcmZhY2UgUmVtb3ZlU3RydWN0dXJhbEZlYXR1cmVWYWx1ZUFjdGlvbiBleHRlbmRzIFdyaXRlU3RydWN0dXJhbEZlYXR1cmVBY3Rpb257CgkvKioKCSAqIDwhLS0gYmVnaW4tdXNlci1kb2MgLS0+CgkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4KCSAqIEBnZW5lcmF0ZWQKCSAqLwoJU3RyaW5nIGNvcHlyaWdodCA9ICJDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiI7IC8vJE5PTi1OTFMtMSQKCn0gLy8gUmVtb3ZlU3RydWN0dXJhbEZlYXR1cmVWYWx1ZUFjdGlvbgo=