LyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiCpIDIwMTMgTWljcm9jaGlwIFRlY2hub2xvZ3kgSW5jLiBhbmQgaXRzIHN1YnNpZGlhcmllcy4KKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aAoqIE1pY3JvY2hpcCBwcm9kdWN0cy4KKiBUSElTIFNPRlRXQVJFIElTIFNVUFBMSUVEIEJZIE1JQ1JPQ0hJUCAiQVMgSVMiLgoqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsCiogSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLAoqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgSVRTIElOVEVSQUNUSU9OIFdJVEggTUlDUk9DSElQCiogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLgoqIElOIE5PIEVWRU5UIFdJTEwgTUlDUk9DSElQIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwKKiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgTE9TUywgREFNQUdFLCBDT1NUIE9SIEVYUEVOU0UgT0YgQU5ZIEtJTkQKKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTCiogQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPUiBUSEUgREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUuCiogVE8gVEhFIEZVTExFU1QgRVhURU5UIEFMTE9XRUQgQlkgTEFXLCBNSUNST0NISVAnUyBUT1RBTCBMSUFCSUxJVFkgT04gQUxMCiogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GCiogRkVFUywgSUYgQU5ZLCBUSEFUIFlPVSBIQVZFIFBBSUQgRElSRUNUTFkgVE8gTUlDUk9DSElQIEZPUiBUSElTIFNPRlRXQVJFLgoqIE1JQ1JPQ0hJUCBQUk9WSURFUyBUSElTIFNPRlRXQVJFIENPTkRJVElPTkFMTFkgVVBPTiBZT1VSIEFDQ0VQVEFOQ0UKKiBPRiBUSEVTRSBURVJNUy4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogIGRlZnMuaAogKiAgICAgIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gaGVhZGVyIGZpbGUgZm9yIGdlbmVyaWMgdXNhZ2VzCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICAjeHgKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogJEZpbGU6IC8vZGVwb3RfcGNzL0ZXRW5nL1JlbGVhc2UvcHJvamVjdHMvQ0VDMTMwMl9QTElCX0NMSUIvcmVsZWFzZTUvU291cmNlL2h3X2Jsa3MvY29tbW9uL2luY2x1ZGUvZGVmcy5oICQKICovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqIEBkZWZncm91cCBkZWZzIGRlZnMKICogIEB7CiAqLwoKLyoqIEBmaWxlIGRlZnMuaAoqIFxicmllZiBkZWZpbml0aW9uIGhlYWRlciBmaWxlIGZvciBnZW5lcmljIHVzYWdlcwoqIFxhdXRob3IgQXBwIEZpcm13YXJlIFRlYW0KKiAKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KI2lmbmRlZiBfREVGU19IXwojZGVmaW5lIF9ERUZTX0hfCgovKiBiaXQgb3BlcmF0aW9uIE1BQ1JPLCB4dmFyIGNvdWxkIGJlIGJ5dGUsIHdvcmQgb3IgZHdvcmQgKi8KI2RlZmluZSBtU0VUX0JJVCh4LCB4dmFyKQkJKCB4dmFyIHw9IHggKQojZGVmaW5lIG1DTFJfQklUKHgsIHh2YXIpCQkoIHh2YXIgJj0gfnggKQojZGVmaW5lIG1HRVRfQklUKHgsIHh2YXIpCQkoIHh2YXIgJiB4ICkKI2RlZmluZSBtQ0xSX1NSQ19CSVQoeCwgeHZhcikJKCB4dmFyID0geCApCiNkZWZpbmUgbVRPR0dMRV9CSVQoeCwgeHZhcikJe2lmKG1HRVRfQklUKHgsIHh2YXIpKXttQ0xSX0JJVCh4LCB4dmFyKTt9ZWxzZXttU0VUX0JJVCh4LCB4dmFyKTt9fQoKI2VuZGlmIC8qX0RFRlNfSF8qLwoKLyoqICAgQH0KICovCgo=