LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRElTQ0xBSU1FUg0KKiBUaGlzIHNvZnR3YXJlIGlzIHN1cHBsaWVkIGJ5IFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gYW5kIGlzIG9ubHkNCiogaW50ZW5kZWQgZm9yIHVzZSB3aXRoIFJlbmVzYXMgcHJvZHVjdHMuIE5vIG90aGVyIHVzZXMgYXJlIGF1dGhvcml6ZWQuIFRoaXMNCiogc29mdHdhcmUgaXMgb3duZWQgYnkgUmVuZXNhcyBFbGVjdHJvbmljcyBDb3Jwb3JhdGlvbiBhbmQgaXMgcHJvdGVjdGVkIHVuZGVyDQoqIGFsbCBhcHBsaWNhYmxlIGxhd3MsIGluY2x1ZGluZyBjb3B5cmlnaHQgbGF3cy4NCiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBSRU5FU0FTIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HDQoqIFRISVMgU09GVFdBUkUsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORyBCVVQgTk9UDQoqIExJTUlURUQgVE8gV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQoqIEFORCBOT04tSU5GUklOR0VNRU5ULiBBTEwgU1VDSCBXQVJSQU5USUVTIEFSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4NCiogVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIE5FSVRIRVIgUkVORVNBUw0KKiBFTEVDVFJPTklDUyBDT1JQT1JBVElPTiBOT1IgQU5ZIE9GIElUUyBBRkZJTElBVEVEIENPTVBBTklFUyBTSEFMTCBCRSBMSUFCTEUNCiogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBGT1INCiogQU5ZIFJFQVNPTiBSRUxBVEVEIFRPIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgUkVORVNBUyBPUiBJVFMgQUZGSUxJQVRFUyBIQVZFDQoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLg0KKiBSZW5lc2FzIHJlc2VydmVzIHRoZSByaWdodCwgd2l0aG91dCBub3RpY2UsIHRvIG1ha2UgY2hhbmdlcyB0byB0aGlzIHNvZnR3YXJlDQoqIGFuZCB0byBkaXNjb250aW51ZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUuIEJ5IHVzaW5nIHRoaXMgc29mdHdhcmUsDQoqIHlvdSBhZ3JlZSB0byB0aGUgYWRkaXRpb25hbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3VuZCBieSBhY2Nlc3NpbmcgdGhlDQoqIGZvbGxvd2luZyBsaW5rOg0KKiBodHRwOi8vd3d3LnJlbmVzYXMuY29tL2Rpc2NsYWltZXINCioNCiogQ29weXJpZ2h0IChDKSAyMDEyIFJlbmVzYXMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRmlsZSBOYW1lICAgIDogcmV0YXJnZXQuYw0KKiAkUmV2OiAkDQoqICREYXRlOjogICAgICAgICAgICAgICAgICAgICAgICAgICAkDQoqIERldmljZShzKSAgICA6IEFyYWdvbg0KKiBUb29sLUNoYWluICAgOiBEUy01IFZlciA1LjEzDQoqICAgICAgICAgICAgICA6IEFSTSBDb21wbGllcg0KKiBPUyAgICAgICAgICAgOiANCiogSC9XIFBsYXRmb3JtIDogQXJhZ29uIENQVSBCb2FyZA0KKiBEZXNjcmlwdGlvbiAgOiBBcmFnb24gU2FtcGxlIFByb2dyYW0gLSBSZXRhcmdldCBzdGFuZGFyZCBJL08NCiogT3BlcmF0aW9uICAgIDogDQoqIExpbWl0YXRpb25zICA6IA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KICAgICAgICAjaWZkZWYgICAgICAgIF9fU1RBTkRBTE9ORV9fDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkluY2x1ZGVzICAgPFN5c3RlbSBJbmNsdWRlcz4gLCAiUHJvamVjdCBJbmNsdWRlcyINCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgInJfdHlwZWRlZnMuaCINCiNpbmNsdWRlICJzaW9fY2hhci5oIg0KDQojcHJhZ21hIGltcG9ydChfX3VzZV9ub19zZW1paG9zdGluZykNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KVHlwZWRlZiBkZWZpbml0aW9ucw0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kc3RydWN0IF9fRklMRQ0Kew0KICBpbnRfdCBoYW5kbGU7DQoNCiAgLyogV2hhdGV2ZXIgeW91IHJlcXVpcmUgaGVyZS4gSWYgdGhlIG9ubHkgZmlsZSB5b3UgYXJlIHVzaW5nIGlzICAgKi8NCiAgLyogc3RhbmRhcmQgb3V0cHV0IHVzaW5nIHByaW50ZigpIGZvciBkZWJ1Z2dpbmcsIG5vIGZpbGUgaGFuZGxpbmcgKi8NCiAgLyogaXMgcmVxdWlyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCn07DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCk1hY3JvIGRlZmluaXRpb25zDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBGaWxlIGRlc2NyaXB0b3IgKi8NCiNkZWZpbmUgU1RESU4gICAgICAgKDApDQojZGVmaW5lIFNURE9VVCAgICAgICgxKQ0KI2RlZmluZSBTVERFUlIgICAgICAoMikNCg0KI2RlZmluZSBJT1NUUkVBTSAgICAoMSkNCiNkZWZpbmUgQlVGRl9TSVpFICAgKDI1NikNCg0KI2lmIDANCiNkZWZpbmUgREVGQVVMVF9IQU5ETEUgICgweDEwMCkNCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQpJbXBvcnRlZCBnbG9iYWwgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgKGZyb20gb3RoZXIgZmlsZXMpDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkV4cG9ydGVkIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyAodG8gYmUgYWNjZXNzZWQgYnkgb3RoZXIgZmlsZXMpDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpGSUxFIF9fc3Rkb3V0Ow0KRklMRSBfX3N0ZGluOw0KI2lmIDANCkZJTEUgX19zdGRlcnI7DQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KUHJpdmF0ZSBnbG9iYWwgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiBGdW5jdGlvbiBOYW1lOiBmZ2V0Yw0KKiBEZXNjcmlwdGlvbiAgOg0KKiBBcmd1bWVudHMgICAgOg0KKiBSZXR1cm4gVmFsdWUgOg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KaW50X3QgZmdldGMoRklMRSAqIGZpbGVfcCkNCnsNCiAgICAvKiBubyBjaGFyYWN0ZXIgdG8gcmVhZCAqLw0KICAgIHJldHVybiBFT0Y7DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZTogZnB1dGMNCiogRGVzY3JpcHRpb24gIDoNCiogQXJndW1lbnRzICAgIDoNCiogUmV0dXJuIFZhbHVlIDoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCmludF90IGZwdXRjKGludF90IGNoYW5uZWwsIEZJTEUgKiBmaWxlX3ApDQp7DQogICAgIHJldHVybiBjaGFubmVsOw0KfQ0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIEZ1bmN0aW9uIE5hbWU6IGZlcnJvcg0KKiBEZXNjcmlwdGlvbiAgOiANCiogQXJndW1lbnRzICAgIDogDQoqIFJldHVybiBWYWx1ZSA6IA0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KaW50X3QgZmVycm9yKEZJTEUgKiBmaWxlX3ApDQp7DQogICAgcmV0dXJuIDA7DQp9DQoNCmludF90IF9fYmFja3NwYWNlKEZJTEUgKiBmaWxlX3ApDQp7DQogICAgcmV0dXJuIDA7DQp9DQoNCg0Kdm9pZCBfc3lzX2V4aXQoaW50X3QgcmV0dXJuY29kZSkNCnsNCiAgICB3aGlsZSAoMSkNCiAgICB7DQogICAgICAgIC8qIERvIE5vdGhpbmcgKi8NCiAgICB9DQp9DQoNCmNoYXJfdCAqIF9zeXNfY29tbWFuZF9zdHJpbmcoY2hhcl90ICogY21kLCBpbnRfdCBsZW4pDQp7DQogICAgcmV0dXJuIGNtZDsNCn0NCg0KICAgICNlbmRpZiAgICAgICAgLyogX19TVEFOREFMT05FX18gICAgg1qDfoN6g1iDZYNCg5ODT5azjPggICAgKi8NCg0KLyogRW5kIG9mIEZpbGUgKi8NCg0K