LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIENvcHlyaWdodCAoQykgMjAxNiBieSBTYXZvaXItZmFpcmUgTGludXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogQXV0aG9yOiBK5GdlciBOaWNvbGFzIDxuaWNvbGFzLmphZ2VyQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAgICAgKg0KKiBBdXRob3I6IFRyYWN6eWsgQW5kcmVhcyA8YW5kcmVhcy50cmFjenlrQHNhdm9pcmZhaXJlbGludXguY29tPiAgICAgICAgICAqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAgKg0KKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgICAqDQoqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAgICoNCiogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICoNCiogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAgKg0KKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgICAqDQoqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgICAqDQoqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2luY2x1ZGUgInBjaC5oIg0KDQojaW5jbHVkZSAiQWJvdXRQYWdlLnhhbWwuaCINCg0KdXNpbmcgbmFtZXNwYWNlIFJpbmdDbGllbnRVV1A7DQp1c2luZyBuYW1lc3BhY2UgUmluZ0NsaWVudFVXUDo6Vmlld3M7DQoNCnVzaW5nIG5hbWVzcGFjZSBXaW5kb3dzOjpVSTo6Vmlld01hbmFnZW1lbnQ7DQp1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OkNvcmU7DQp1c2luZyBuYW1lc3BhY2UgV2luZG93czo6VUk6OlhhbWw6OkNvbnRyb2xzOw0KDQpBYm91dFBhZ2U6OkFib3V0UGFnZSgpDQp7DQogICAgSW5pdGlhbGl6ZUNvbXBvbmVudCgpOw0KfTsNCg0Kdm9pZCBSaW5nQ2xpZW50VVdQOjpWaWV3czo6QWJvdXRQYWdlOjpfYWJvdXRCYXNpY0J1dHRvbl9fQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKQ0Kew0KICAgIF9hYm91dE5hdkdyaWRfLT5TZXRSb3coX2Fib3V0U2Nyb2xsVmlld2VyXywgMSk7DQogICAgX2Fib3V0TmF2R3JpZF8tPlNldFJvdyhfY3JlZGl0c1Njcm9sbFZpZXdlcl8sIDApOw0KfQ0KDQoNCnZvaWQgUmluZ0NsaWVudFVXUDo6Vmlld3M6OkFib3V0UGFnZTo6X2Fib3V0Q3JlZGl0c0J1dHRvbl9fQ2xpY2soUGxhdGZvcm06Ok9iamVjdF4gc2VuZGVyLCBXaW5kb3dzOjpVSTo6WGFtbDo6Um91dGVkRXZlbnRBcmdzXiBlKQ0Kew0KICAgIF9hYm91dE5hdkdyaWRfLT5TZXRSb3coX2Fib3V0U2Nyb2xsVmlld2VyXywgMCk7DQogICAgX2Fib3V0TmF2R3JpZF8tPlNldFJvdyhfY3JlZGl0c1Njcm9sbFZpZXdlcl8sIDEpOw0KfQ0KDQoNCnZvaWQgUmluZ0NsaWVudFVXUDo6Vmlld3M6OkFib3V0UGFnZTo6X2Fib3V0Q2xvc2VCdXR0b25fX0NsaWNrKFBsYXRmb3JtOjpPYmplY3ReIHNlbmRlciwgV2luZG93czo6VUk6OlhhbWw6OlJvdXRlZEV2ZW50QXJnc14gZSkNCnsNCiAgICBhdXRvIHJvb3RGcmFtZSA9IGR5bmFtaWNfY2FzdDxXaW5kb3dzOjpVSTo6WGFtbDo6Q29udHJvbHM6OkZyYW1lXj4oV2luZG93OjpDdXJyZW50LT5Db250ZW50KTsNCiAgICByb290RnJhbWUtPk5hdmlnYXRlKFdpbmRvd3M6OlVJOjpYYW1sOjpJbnRlcm9wOjpUeXBlTmFtZShNYWluUGFnZTo6dHlwZWlkKSwgdHJ1ZSk7DQp9DQo=