LyoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKg0KKiogIEZpbGUgICAgICAgIDogU1RNMzJGMTAyWDZfRkxBU0gubGQNCioqDQoqKiAgQWJzdHJhY3QgICAgOiBMaW5rZXIgc2NyaXB0IGZvciBTVE0zMkYxMDJ4NiBEZXZpY2Ugd2l0aA0KKiogICAgICAgICAgICAgICAgMzJLQnl0ZSBGTEFTSCwgNktCeXRlIFJBTQ0KKioNCioqICAgICAgICAgICAgICAgIFNldCBoZWFwIHNpemUsIHN0YWNrIHNpemUgYW5kIHN0YWNrIGxvY2F0aW9uIGFjY29yZGluZw0KKiogICAgICAgICAgICAgICAgdG8gYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLg0KKioNCioqICAgICAgICAgICAgICAgIFNldCBtZW1vcnkgYmFuayBhcmVhIGFuZCBzaXplIGlmIGV4dGVybmFsIG1lbW9yeSBpcyB1c2VkLg0KKioNCioqICBUYXJnZXQgICAgICA6IFNUTWljcm9lbGVjdHJvbmljcyBTVE0zMg0KKioNCioqICBFbnZpcm9ubWVudCA6IEF0b2xsaWMgVHJ1ZVNUVURJTyhSKQ0KKioNCioqICBEaXN0cmlidXRpb246IFRoZSBmaWxlIGlzIGRpc3RyaWJ1dGVkIJNhcyBpcyyUIHdpdGhvdXQgYW55IHdhcnJhbnR5DQoqKiAgICAgICAgICAgICAgICBvZiBhbnkga2luZC4NCioqDQoqKiAgKGMpQ29weXJpZ2h0IEF0b2xsaWMgQUIuDQoqKiAgWW91IG1heSB1c2UgdGhpcyBmaWxlIGFzLWlzIG9yIG1vZGlmeSBpdCBhY2NvcmRpbmcgdG8gdGhlIG5lZWRzIG9mIHlvdXINCioqICBwcm9qZWN0LiBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgYnVpbHQgKGFzc2VtYmxlZCBvciBjb21waWxlZCBhbmQgbGlua2VkKQ0KKiogIHVzaW5nIHRoZSBBdG9sbGljIFRydWVTVFVESU8oUikgcHJvZHVjdC4gVGhlIHVzZSBvZiB0aGlzIGZpbGUgdG9nZXRoZXINCioqICB3aXRoIG90aGVyIHRvb2xzIHRoYW4gQXRvbGxpYyBUcnVlU1RVRElPKFIpIGlzIG5vdCBwZXJtaXR0ZWQuDQoqKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiovDQowDQovKiBFbnRyeSBQb2ludCAqLw0KRU5UUlkoUmVzZXRfSGFuZGxlcikNCjANCi8qIEhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgdXNlciBtb2RlIHN0YWNrICovDQpfZXN0YWNrID0gMHgyMDAwMTdGRjsgICAgLyogZW5kIG9mIFJBTSAqLw0KMA0KLyogR2VuZXJhdGUgYSBsaW5rIGVycm9yIGlmIGhlYXAgYW5kIHN0YWNrIGRvbid0IGZpdCBpbnRvIFJBTSAqLw0KX01pbl9IZWFwX1NpemUgPSAweDIwMDsgICAgICAvKiByZXF1aXJlZCBhbW91bnQgb2YgaGVhcCAgKi8NCl9NaW5fU3RhY2tfU2l6ZSA9IDB4NDAwOyAvKiByZXF1aXJlZCBhbW91bnQgb2Ygc3RhY2sgKi8NCjANCi8qIFNwZWNpZnkgdGhlIG1lbW9yeSBhcmVhcyAqLw0KTUVNT1JZDQp7DQpGTEFTSCAocngpICAgICAgOiBPUklHSU4gPSAweDA4MDAwMDAwLCBMRU5HVEggPSAzMksNClJBTSAoeHJ3KSAgICAgICA6IE9SSUdJTiA9IDB4MjAwMDAwMDAsIExFTkdUSCA9IDZLDQp9DQowDQovKiBEZWZpbmUgb3V0cHV0IHNlY3Rpb25zICovDQpTRUNUSU9OUw0Kew0KICAvKiBUaGUgc3RhcnR1cCBjb2RlIGdvZXMgZmlyc3QgaW50byBGTEFTSCAqLw0KICAuaXNyX3ZlY3RvciA6DQogIHsNCiAgICAuID0gQUxJR04oNCk7DQogICAgS0VFUCgqKC5pc3JfdmVjdG9yKSkgLyogU3RhcnR1cCBjb2RlICovDQogICAgLiA9IEFMSUdOKDQpOw0KICB9ID5GTEFTSA0KMA0KICAvKiBUaGUgcHJvZ3JhbSBjb2RlIGFuZCBvdGhlciBkYXRhIGdvZXMgaW50byBGTEFTSCAqLw0KICAudGV4dCA6DQogIHsNCiAgICAuID0gQUxJR04oNCk7DQogICAgKigudGV4dCkgICAgICAgICAgIC8qIC50ZXh0IHNlY3Rpb25zIChjb2RlKSAqLw0KICAgICooLnRleHQqKSAgICAgICAgICAvKiAudGV4dCogc2VjdGlvbnMgKGNvZGUpICovDQogICAgKiguZ2x1ZV83KSAgICAgICAgIC8qIGdsdWUgYXJtIHRvIHRodW1iIGNvZGUgKi8NCiAgICAqKC5nbHVlXzd0KSAgICAgICAgLyogZ2x1ZSB0aHVtYiB0byBhcm0gY29kZSAqLw0KICAgICooLmVoX2ZyYW1lKQ0KMA0KICAgIEtFRVAgKCooLmluaXQpKQ0KICAgIEtFRVAgKCooLmZpbmkpKQ0KMA0KICAgIC4gPSBBTElHTig0KTsNCiAgICBfZXRleHQgPSAuOyAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbHMgYXQgZW5kIG9mIGNvZGUgKi8NCiAgfSA+RkxBU0gNCjANCiAgLyogQ29uc3RhbnQgZGF0YSBnb2VzIGludG8gRkxBU0ggKi8NCiAgLnJvZGF0YSA6DQogIHsNCiAgICAuID0gQUxJR04oNCk7DQogICAgKigucm9kYXRhKSAgICAgICAgIC8qIC5yb2RhdGEgc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8NCiAgICAqKC5yb2RhdGEqKSAgICAgICAgLyogLnJvZGF0YSogc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8NCiAgICAuID0gQUxJR04oNCk7DQogIH0gPkZMQVNIDQowDQogIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0gPkZMQVNIDQogIC5BUk0gOiB7DQogICAgX19leGlkeF9zdGFydCA9IC47DQogICAgKiguQVJNLmV4aWR4KikNCiAgICBfX2V4aWR4X2VuZCA9IC47DQogIH0gPkZMQVNIDQowDQogIC5wcmVpbml0X2FycmF5ICAgICA6DQogIHsNCiAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7DQogICAgS0VFUCAoKigucHJlaW5pdF9hcnJheSopKQ0KICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7DQogIH0gPkZMQVNIDQogIC5pbml0X2FycmF5IDoNCiAgew0KICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsNCiAgICBLRUVQICgqKFNPUlQoLmluaXRfYXJyYXkuKikpKQ0KICAgIEtFRVAgKCooLmluaXRfYXJyYXkqKSkNCiAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOw0KICB9ID5GTEFTSA0KICAuZmluaV9hcnJheSA6DQogIHsNCiAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X3N0YXJ0ID0gLik7DQogICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkNCiAgICBLRUVQICgqKC5maW5pX2FycmF5KikpDQogICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9lbmQgPSAuKTsNCiAgfSA+RkxBU0gNCjANCiAgLyogdXNlZCBieSB0aGUgc3RhcnR1cCB0byBpbml0aWFsaXplIGRhdGEgKi8NCiAgX3NpZGF0YSA9IExPQURBRERSKC5kYXRhKTsNCjANCiAgLyogSW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9ucyBnb2VzIGludG8gUkFNLCBsb2FkIExNQSBjb3B5IGFmdGVyIGNvZGUgKi8NCiAgLmRhdGEgOiANCiAgew0KICAgIC4gPSBBTElHTig0KTsNCiAgICBfc2RhdGEgPSAuOyAgICAgICAgLyogY3JlYXRlIGEgZ2xvYmFsIHN5bWJvbCBhdCBkYXRhIHN0YXJ0ICovDQogICAgKiguZGF0YSkgICAgICAgICAgIC8qIC5kYXRhIHNlY3Rpb25zICovDQogICAgKiguZGF0YSopICAgICAgICAgIC8qIC5kYXRhKiBzZWN0aW9ucyAqLw0KMA0KICAgIC4gPSBBTElHTig0KTsNCiAgICBfZWRhdGEgPSAuOyAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbCBhdCBkYXRhIGVuZCAqLw0KICB9ID5SQU0gQVQ+IEZMQVNIDQowDQogIA0KICAvKiBVbmluaXRpYWxpemVkIGRhdGEgc2VjdGlvbiAqLw0KICAuID0gQUxJR04oNCk7DQogIC5ic3MgOg0KICB7DQogICAgLyogVGhpcyBpcyB1c2VkIGJ5IHRoZSBzdGFydHVwIGluIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIC5ic3Mgc2VjaW9uICovDQogICAgX3Nic3MgPSAuOyAgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgYnNzIHN0YXJ0ICovDQogICAgX19ic3Nfc3RhcnRfXyA9IF9zYnNzOw0KICAgICooLmJzcykNCiAgICAqKC5ic3MqKQ0KICAgICooQ09NTU9OKQ0KMA0KICAgIC4gPSBBTElHTig0KTsNCiAgICBfZWJzcyA9IC47ICAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbCBhdCBic3MgZW5kICovDQogICAgX19ic3NfZW5kX18gPSBfZWJzczsNCiAgfSA+UkFNDQowDQogIC8qIFVzZXJfaGVhcF9zdGFjayBzZWN0aW9uLCB1c2VkIHRvIGNoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIFJBTSBsZWZ0ICovDQogIC5fdXNlcl9oZWFwX3N0YWNrIDoNCiAgew0KICAgIC4gPSBBTElHTig0KTsNCiAgICBQUk9WSURFICggZW5kID0gLiApOw0KICAgIFBST1ZJREUgKCBfZW5kID0gLiApOw0KICAgIC4gPSAuICsgX01pbl9IZWFwX1NpemU7DQogICAgLiA9IC4gKyBfTWluX1N0YWNrX1NpemU7DQogICAgLiA9IEFMSUdOKDQpOw0KICB9ID5SQU0NCjANCiAgDQowDQogIC8qIFJlbW92ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJpZXMgKi8NCiAgL0RJU0NBUkQvIDoNCiAgew0KICAgIGxpYmMuYSAoICogKQ0KICAgIGxpYm0uYSAoICogKQ0KICAgIGxpYmdjYy5hICggKiApDQogIH0NCjANCiAgLkFSTS5hdHRyaWJ1dGVzIDAgOiB7ICooLkFSTS5hdHRyaWJ1dGVzKSB9DQp9DQo=