LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogIEZpbGUgICAgICAgIDogeG1jMTAwMF9mbGFzaC5sZAoqKgoqKiAgQWJzdHJhY3QgICAgOiBMaW5rZXIgc2NyaXB0IGZvciBYTUMxMjAwLVQwMzhGMDIwMCBEZXZpY2Ugd2l0aAoqKiAgICAgICAgICAgICAgICAyMDBLQnl0ZSBGTEFTSCwgMTZLQnl0ZSBSQU0KKioKKiogICAgICAgICAgICAgICAgU2V0IGhlYXAgc2l6ZSwgc3RhY2sgc2l6ZSBhbmQgc3RhY2sgbG9jYXRpb24gYWNjb3JkaW5nCioqICAgICAgICAgICAgICAgIHRvIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4KKioKKiogIFRhcmdldCAgICAgIDogSW5maW5lb24gWE1DMTAwMCBNaWNyb2NvbnRyb2xsZXJzCioqCioqICBFbnZpcm9ubWVudCA6IEF0b2xsaWMgVHJ1ZVNUVURJTyhSKQoqKgoqKiAgRGlzdHJpYnV0aW9uOiBUaGUgZmlsZSBpcyBkaXN0cmlidXRlZCCTYXMgaXMslCB3aXRob3V0IGFueSB3YXJyYW50eQoqKiAgICAgICAgICAgICAgICBvZiBhbnkga2luZC4KKioKKiogIChjKUNvcHlyaWdodCBBdG9sbGljIEFCLgoqKiAgWW91IG1heSB1c2UgdGhpcyBmaWxlIGFzLWlzIG9yIG1vZGlmeSBpdCBhY2NvcmRpbmcgdG8gdGhlIG5lZWRzIG9mIHlvdXIKKiogIHByb2plY3QuIFRoaXMgZmlsZSBtYXkgb25seSBiZSBidWlsdCAoYXNzZW1ibGVkIG9yIGNvbXBpbGVkIGFuZCBsaW5rZWQpCioqICB1c2luZyB0aGUgQXRvbGxpYyBUcnVlU1RVRElPKFIpIHByb2R1Y3QuIFRoZSB1c2Ugb2YgdGhpcyBmaWxlIHRvZ2V0aGVyCioqICB3aXRoIG90aGVyIHRvb2xzIHRoYW4gQXRvbGxpYyBUcnVlU1RVRElPKFIpIGlzIG5vdCBwZXJtaXR0ZWQuCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCgovKiBFbnRyeSBQb2ludCAqLwpFTlRSWShSZXNldF9IYW5kbGVyKQoKLyogSGlnaGVzdCBhZGRyZXNzIG9mIHRoZSB1c2VyIG1vZGUgc3RhY2sgKi8KX2VzdGFjayA9IDB4MjAwMDQwMDA7ICAgIC8qIGVuZCBvZiAxNksgUkFNICovCgovKiBHZW5lcmF0ZSBhIGxpbmsgZXJyb3IgaWYgaGVhcCBhbmQgc3RhY2sgZG9uJ3QgZml0IGludG8gUkFNICovCl9NaW5fSGVhcF9TaXplID0gMDsgICAgICAvKiByZXF1aXJlZCBhbW91bnQgb2YgaGVhcCAgKi8KX01pbl9TdGFja19TaXplID0gMHgyMDA7IC8qIHJlcXVpcmVkIGFtb3VudCBvZiBzdGFjayAqLwoKLyogU3BlY2lmeSB0aGUgbWVtb3J5IGFyZWFzICovCk1FTU9SWQp7CiAgRkxBU0ggKHJ4KSAgICAgOiBPUklHSU4gPSAweDEwMDAxMDAwLCBMRU5HVEggPSAyMDBLCiAgUkFNICh4cncpICAgICAgOiBPUklHSU4gPSAweDIwMDAwMDAwLCBMRU5HVEggPSAxNksKICBNRU1PUllfQjEgKHJ4KSA6IE9SSUdJTiA9IDB4NjAwMDAwMDAsIExFTkdUSCA9IDBLCn0KCi8qIERlZmluZSBvdXRwdXQgc2VjdGlvbnMgKi8KU0VDVElPTlMKewogIC8qIFRoZSBzdGFydHVwIGNvZGUgZ29lcyBmaXJzdCBpbnRvIEZMQVNIICovCiAgLmlzcl92ZWN0b3IgOgogIHsKICAgIC4gPSBBTElHTig0KTsKICAgIEtFRVAoKiguaXNyX3ZlY3RvcikpIC8qIFN0YXJ0dXAgY29kZSAqLwogICAgLiA9IEFMSUdOKDQpOwogIH0gPkZMQVNICgogIC8qIFRoZSBwcm9ncmFtIGNvZGUgYW5kIG90aGVyIGRhdGEgZ29lcyBpbnRvIEZMQVNIICovCiAgLnRleHQgOgogIHsKICAgIC4gPSBBTElHTig0KTsKICAgICooLnRleHQpICAgICAgICAgICAvKiAudGV4dCBzZWN0aW9ucyAoY29kZSkgKi8KICAgICooLnRleHQqKSAgICAgICAgICAvKiAudGV4dCogc2VjdGlvbnMgKGNvZGUpICovCiAgICAqKC5YbWNTdGFydHVwKTsKICAgICooLmdsdWVfNykgICAgICAgICAvKiBnbHVlIGFybSB0byB0aHVtYiBjb2RlICovCiAgICAqKC5nbHVlXzd0KSAgICAgICAgLyogZ2x1ZSB0aHVtYiB0byBhcm0gY29kZSAqLwogICAgKiguZWhfZnJhbWUpCgogICAgS0VFUCAoKiguaW5pdCkpCiAgICBLRUVQICgqKC5maW5pKSkKCiAgICAuID0gQUxJR04oNCk7CiAgICBfZXRleHQgPSAuOyAgICAgICAgLyogZGVmaW5lIGEgZ2xvYmFsIHN5bWJvbHMgYXQgZW5kIG9mIGNvZGUgKi8KICB9ID5GTEFTSAoKICAvKiBDb25zdGFudCBkYXRhIGdvZXMgaW50byBGTEFTSCAqLwogIC5yb2RhdGEgOgogIHsKICAgIC4gPSBBTElHTig0KTsKICAgICooLnJvZGF0YSkgICAgICAgICAvKiAucm9kYXRhIHNlY3Rpb25zIChjb25zdGFudHMsIHN0cmluZ3MsIGV0Yy4pICovCiAgICAqKC5yb2RhdGEqKSAgICAgICAgLyogLnJvZGF0YSogc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8KICAgIC4gPSBBTElHTig0KTsKICB9ID5GTEFTSAogIAogIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0gPkZMQVNICiAgLkFSTSA6IHsKICAgIF9fZXhpZHhfc3RhcnQgPSAuOwogICAgKiguQVJNLmV4aWR4KikKICAgIF9fZXhpZHhfZW5kID0gLjsKICB9ID5GTEFTSAoKICAucHJlaW5pdF9hcnJheSAgICAgOgogIHsKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gKICAuaW5pdF9hcnJheSA6CiAgewogICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOwogICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKICAgIEtFRVAgKCooLmluaXRfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gKICAuZmluaV9hcnJheSA6CiAgewogICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOwogICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKICAgIEtFRVAgKCooLmZpbmlfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gKCiAgLiA9IEFMSUdOKDQpOwogIGVST0RhdGEgPSAuIDsKCiAgLyogSW5pdGlhbGl6ZSBYTUMgVmVuZWVyIGludGVycnVwdCBjb2RlICovIAogIFZlbmVlckxvYWRBZGRyID0gQUJTT0xVVEUoZVJPRGF0YSk7CiAgLlZFTkVFUl9Db2RlIEFCU09MVVRFKDB4MjAwMDAwMEMpIDogCiAgewogICAgVmVuZWVyU3RhcnQgPSAuOwogICAgS0VFUCgqKC5YbWNWZW5lZXJDb2RlKSkgLyogS2VlcCB0aGUgVmVuZWVyQ29kZSAqLwogICAgKiguWG1jVmVuZWVyQ29kZSk7CiAgICAuID0gQUxJR04oNCk7CiAgICBWZW5lZXJFbmQgPSAuOwogICAgCiAgfSA+UkFNIEFUPiBGTEFTSAoKICBWZW5lZXJTaXplID0gQUJTT0xVVEUoVmVuZWVyRW5kKSAtIEFCU09MVVRFKFZlbmVlclN0YXJ0KTsKCiAgLyogdXNlZCBieSB0aGUgc3RhcnR1cCB0byBpbml0aWFsaXplIGRhdGEgKi8KICBfc2lkYXRhID0gTE9BREFERFIoLmRhdGEpOwoKICAvKiBJbml0aWFsaXplZCBkYXRhIHNlY3Rpb25zIGdvZXMgaW50byBSQU0sIGxvYWQgTE1BIGNvcHkgYWZ0ZXIgY29kZSAqLwogIC5kYXRhIDogCiAgewogICAgLiA9IEFMSUdOKDQpOwogICAgX3NkYXRhID0gLjsgICAgICAgIC8qIGNyZWF0ZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBzdGFydCAqLwogICAgKiguZGF0YSkgICAgICAgICAgIC8qIC5kYXRhIHNlY3Rpb25zICovCiAgICAqKC5kYXRhKikgICAgICAgICAgLyogLmRhdGEqIHNlY3Rpb25zICovCgogICAgLiA9IEFMSUdOKDQpOwogICAgX2VkYXRhID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBlbmQgKi8KICB9ID5SQU0gQVQ+IEZMQVNICgogIC8qIFVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uICovCiAgLiA9IEFMSUdOKDQpOwogIC5ic3MgOgogIHsKICAgIC8qIFRoaXMgaXMgdXNlZCBieSB0aGUgc3RhcnR1cCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSAuYnNzIHNlY2lvbiAqLwogICAgX3Nic3MgPSAuOyAgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgYnNzIHN0YXJ0ICovCiAgICBfX2Jzc19zdGFydF9fID0gX3Nic3M7CiAgICAqKC5ic3MpCiAgICAqKC5ic3MqKQogICAgKihDT01NT04pCgogICAgLiA9IEFMSUdOKDQpOwogICAgX2Vic3MgPSAuOyAgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgYnNzIGVuZCAqLwogICAgX19ic3NfZW5kX18gPSBfZWJzczsKICB9ID5SQU0KCiAgLyogVXNlcl9oZWFwX3N0YWNrIHNlY3Rpb24sIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggUkFNIGxlZnQgKi8KICAuX3VzZXJfaGVhcF9zdGFjayA6CiAgewogICAgLiA9IEFMSUdOKDQpOwogICAgUFJPVklERSAoIGVuZCA9IC4gKTsKICAgIFBST1ZJREUgKCBfZW5kID0gLiApOwogICAgLiA9IC4gKyBfTWluX0hlYXBfU2l6ZTsKICAgIC4gPSAuICsgX01pbl9TdGFja19TaXplOwogICAgLiA9IEFMSUdOKDQpOwogIH0gPlJBTQoKICAvKiBNRU1PUllfYmFuazEgc2VjdGlvbiwgY29kZSBtdXN0IGJlIGxvY2F0ZWQgaGVyZSBleHBsaWNpdGx5ICAgICAgICAgICAgKi8KICAvKiBFeGFtcGxlOiBleHRlcm4gaW50IGZvbyh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5tYjF0ZXh0IikpKTsgKi8KICAubWVtb3J5X2IxX3RleHQgOgogIHsKICAgICooLm1iMXRleHQpICAgICAgICAvKiAubWIxdGV4dCBzZWN0aW9ucyAoY29kZSkgKi8KICAgICooLm1iMXRleHQqKSAgICAgICAvKiAubWIxdGV4dCogc2VjdGlvbnMgKGNvZGUpICAqLwogICAgKigubWIxcm9kYXRhKSAgICAgIC8qIHJlYWQtb25seSBkYXRhIChjb25zdGFudHMpICovCiAgICAqKC5tYjFyb2RhdGEqKQogIH0gPk1FTU9SWV9CMQoKICAvKiBSZW1vdmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3RhbmRhcmQgbGlicmFyaWVzICovCiAgL0RJU0NBUkQvIDoKICB7CiAgICBsaWJjLmEgKCAqICkKICAgIGxpYm0uYSAoICogKQogICAgbGliZ2NjLmEgKCAqICkKICB9CgogIC5BUk0uYXR0cmlidXRlcyAwIDogeyAqKC5BUk0uYXR0cmlidXRlcykgfQp9Cg==