LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIENvcHlyaWdodCAoQykgMjAxNiBieSBTYXZvaXItZmFpcmUgTGludXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KKiBBdXRob3I6IFRyYWN6eWsgQW5kcmVhcyA8dHJhY3p5ay5hbmRyZWFzQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKg0KKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqDQoqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoNCiogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoNCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKg0KKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqDQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqDQoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2luY2x1ZGUgInBjaC5oIg0KDQojaW5jbHVkZSAiU21hcnRQYW5lbEl0ZW0uaCINCg0KdXNpbmcgbmFtZXNwYWNlIFdpbmRvd3M6OkFwcGxpY2F0aW9uTW9kZWw6OkNvcmU7DQp1c2luZyBuYW1lc3BhY2UgUGxhdGZvcm07DQp1c2luZyBuYW1lc3BhY2UgV2luZG93czo6RGF0YTo6SnNvbjsNCnVzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6Q29yZTsNCg0KdXNpbmcgbmFtZXNwYWNlIFJpbmdDbGllbnRVV1A7DQp1c2luZyBuYW1lc3BhY2UgUmluZ0NsaWVudFVXUDo6Q29udHJvbHM7DQp1c2luZyBuYW1lc3BhY2UgVmlld01vZGVsOw0KDQpTbWFydFBhbmVsSXRlbTo6U21hcnRQYW5lbEl0ZW0oKQ0Kew0KICAgIF9jYWxsSWQgPSAiIjsNCiAgICB2aWRlb011dGVkXyA9IGZhbHNlOw0KICAgIGlzU2VsZWN0ZWRfID0gZmFsc2U7DQogICAgaXNIb3ZlcmVkXyA9IGZhbHNlOw0KICAgIF9jYWxsU3RhdHVzID0gQ2FsbFN0YXR1czo6Tk9ORTsNCg0KICAgIFJpbmdEOjppbnN0YW5jZS0+Y2FsbFBsYWNlZCArPSByZWYgbmV3IFJpbmdDbGllbnRVV1A6OkNhbGxQbGFjZWQodGhpcywgJlJpbmdDbGllbnRVV1A6OkNvbnRyb2xzOjpTbWFydFBhbmVsSXRlbTo6T25jYWxsUGxhY2VkKTsNCn0NCg0Kdm9pZCBSaW5nQ2xpZW50VVdQOjpDb250cm9sczo6U21hcnRQYW5lbEl0ZW06Om11dGVWaWRlbyhib29sIHN0YXRlKQ0Kew0KICAgIHZpZGVvTXV0ZWRfID0gc3RhdGU7DQogICAgUmluZ0Q6Omluc3RhbmNlLT5tdXRlVmlkZW8oX2NhbGxJZCwgc3RhdGUpOw0KfQ0KDQp2b2lkDQpTbWFydFBhbmVsSXRlbTo6Tm90aWZ5UHJvcGVydHlDaGFuZ2VkKFN0cmluZ14gcHJvcGVydHlOYW1lKQ0Kew0KICAgIENvcmVBcHBsaWNhdGlvblZpZXdeIHZpZXcgPSBDb3JlQXBwbGljYXRpb246Ok1haW5WaWV3Ow0KICAgIHZpZXctPkNvcmVXaW5kb3ctPkRpc3BhdGNoZXItPlJ1bkFzeW5jKA0KICAgICAgICBDb3JlRGlzcGF0Y2hlclByaW9yaXR5OjpIaWdoLA0KICAgICAgICByZWYgbmV3IERpc3BhdGNoZWRIYW5kbGVyKFt0aGlzLCBwcm9wZXJ0eU5hbWVdKCkNCiAgICB7DQogICAgICAgIFByb3BlcnR5Q2hhbmdlZCh0aGlzLCByZWYgbmV3IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncyhwcm9wZXJ0eU5hbWUpKTsNCiAgICB9KSk7DQp9DQoNCnZvaWQgUmluZ0NsaWVudFVXUDo6Q29udHJvbHM6OlNtYXJ0UGFuZWxJdGVtOjpPbmNhbGxQbGFjZWQoUGxhdGZvcm06OlN0cmluZyBeY2FsbElkKQ0Kew0KICAgIGlmIChfY2FsbElkID09IGNhbGxJZCkgew0KICAgICAgICBfY2FsbFN0YXR1cyA9IENhbGxTdGF0dXM6OlNFQVJDSElORzsNCiAgICB9DQp9DQo=