LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqICBGaWxlICAgICAgICA6IExpbmtlclNjcmlwdC5sZAoqKgoqKgoqKiAgQWJzdHJhY3QgICAgOiBMaW5rZXIgc2NyaXB0IGZvciBTVE0zMkg3IHNlcmllcwoqKiAgICAgICAgICAgICAgICAxMDI0S2J5dGVzIEZMQVNIIGFuZCAyODhLYnl0ZXMgUkFNCioqCioqICAgICAgICAgICAgICAgIFNldCBoZWFwIHNpemUsIHN0YWNrIHNpemUgYW5kIHN0YWNrIGxvY2F0aW9uIGFjY29yZGluZwoqKiAgICAgICAgICAgICAgICB0byBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuCioqCioqICAgICAgICAgICAgICAgIFNldCBtZW1vcnkgYmFuayBhcmVhIGFuZCBzaXplIGlmIGV4dGVybmFsIG1lbW9yeSBpcyB1c2VkLgoqKgoqKiAgVGFyZ2V0ICAgICAgOiBTVE1pY3JvZWxlY3Ryb25pY3MgU1RNMzIKKioKKiogIERpc3RyaWJ1dGlvbjogVGhlIGZpbGUgaXMgZGlzdHJpYnV0ZWQgk2FzIGlzLJQgd2l0aG91dCBhbnkgd2FycmFudHkKKiogICAgICAgICAgICAgICAgb2YgYW55IGtpbmQuCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqIEBhdHRlbnRpb24KKioKKiogQ29weXJpZ2h0IChjKSAyMDE5IFNUTWljcm9lbGVjdHJvbmljcy4KKiogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKioKKiogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlCioqIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvZnR3YXJlIGNvbXBvbmVudC4KKiogSWYgbm8gTElDRU5TRSBmaWxlIGNvbWVzIHdpdGggdGhpcyBzb2Z0d2FyZSwgaXQgaXMgcHJvdmlkZWQgQVMtSVMuCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqLwoKLyogRW50cnkgUG9pbnQgKi8KRU5UUlkoUmVzZXRfSGFuZGxlcikKCi8qIEhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgdXNlciBtb2RlIHN0YWNrICovCl9lc3RhY2sgPSAweDEwMDQ4MDAwOyAgICAvKiBlbmQgb2YgUkFNICovCi8qIEdlbmVyYXRlIGEgbGluayBlcnJvciBpZiBoZWFwIGFuZCBzdGFjayBkb24ndCBmaXQgaW50byBSQU0gKi8KX01pbl9IZWFwX1NpemUgPSAweDIwMDsgICAgICAvKiByZXF1aXJlZCBhbW91bnQgb2YgaGVhcCAgKi8KX01pbl9TdGFja19TaXplID0gMHg0MDA7IC8qIHJlcXVpcmVkIGFtb3VudCBvZiBzdGFjayAqLwoKLyogU3BlY2lmeSB0aGUgbWVtb3J5IGFyZWFzICovCk1FTU9SWQp7CkZMQVNIIChyeCkgICAgICA6IE9SSUdJTiA9IDB4MDgxMDAwMDAsIExFTkdUSCA9IDEwMjRLClJBTSAoeHJ3KSAgICAgIDogT1JJR0lOID0gMHgxMDAwMDAwMCwgTEVOR1RIID0gMjg4Swp9CgovKiBEZWZpbmUgb3V0cHV0IHNlY3Rpb25zICovClNFQ1RJT05TCnsKICAvKiBUaGUgc3RhcnR1cCBjb2RlIGdvZXMgZmlyc3QgaW50byBGTEFTSCAqLwogIC5pc3JfdmVjdG9yIDoKICB7CiAgICAuID0gQUxJR04oNCk7CiAgICBLRUVQKCooLmlzcl92ZWN0b3IpKSAvKiBTdGFydHVwIGNvZGUgKi8KICAgIC4gPSBBTElHTig0KTsKICB9ID5GTEFTSAoKICAvKiBUaGUgcHJvZ3JhbSBjb2RlIGFuZCBvdGhlciBkYXRhIGdvZXMgaW50byBGTEFTSCAqLwogIC50ZXh0IDoKICB7CiAgICAuID0gQUxJR04oNCk7CiAgICAqKC50ZXh0KSAgICAgICAgICAgLyogLnRleHQgc2VjdGlvbnMgKGNvZGUpICovCiAgICAqKC50ZXh0KikgICAgICAgICAgLyogLnRleHQqIHNlY3Rpb25zIChjb2RlKSAqLwogICAgKiguZ2x1ZV83KSAgICAgICAgIC8qIGdsdWUgYXJtIHRvIHRodW1iIGNvZGUgKi8KICAgICooLmdsdWVfN3QpICAgICAgICAvKiBnbHVlIHRodW1iIHRvIGFybSBjb2RlICovCiAgICAqKC5laF9mcmFtZSkKCiAgICBLRUVQICgqKC5pbml0KSkKICAgIEtFRVAgKCooLmZpbmkpKQoKICAgIC4gPSBBTElHTig0KTsKICAgIF9ldGV4dCA9IC47ICAgICAgICAvKiBkZWZpbmUgYSBnbG9iYWwgc3ltYm9scyBhdCBlbmQgb2YgY29kZSAqLwogIH0gPkZMQVNICgogIC8qIENvbnN0YW50IGRhdGEgZ29lcyBpbnRvIEZMQVNIICovCiAgLnJvZGF0YSA6CiAgewogICAgLiA9IEFMSUdOKDQpOwogICAgKigucm9kYXRhKSAgICAgICAgIC8qIC5yb2RhdGEgc2VjdGlvbnMgKGNvbnN0YW50cywgc3RyaW5ncywgZXRjLikgKi8KICAgICooLnJvZGF0YSopICAgICAgICAvKiAucm9kYXRhKiBzZWN0aW9ucyAoY29uc3RhbnRzLCBzdHJpbmdzLCBldGMuKSAqLwogICAgLiA9IEFMSUdOKDQpOwogIH0gPkZMQVNICgogIC5BUk0uZXh0YWIgICA6IHsgKiguQVJNLmV4dGFiKiAuZ251LmxpbmtvbmNlLmFybWV4dGFiLiopIH0gPkZMQVNICiAgLkFSTSA6IHsKICAgIF9fZXhpZHhfc3RhcnQgPSAuOwogICAgKiguQVJNLmV4aWR4KikKICAgIF9fZXhpZHhfZW5kID0gLjsKICB9ID5GTEFTSAoKICAucHJlaW5pdF9hcnJheSAgICAgOgogIHsKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfc3RhcnQgPSAuKTsKICAgIEtFRVAgKCooLnByZWluaXRfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX3ByZWluaXRfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gKICAuaW5pdF9hcnJheSA6CiAgewogICAgUFJPVklERV9ISURERU4gKF9faW5pdF9hcnJheV9zdGFydCA9IC4pOwogICAgS0VFUCAoKihTT1JUKC5pbml0X2FycmF5LiopKSkKICAgIEtFRVAgKCooLmluaXRfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gKICAuZmluaV9hcnJheSA6CiAgewogICAgUFJPVklERV9ISURERU4gKF9fZmluaV9hcnJheV9zdGFydCA9IC4pOwogICAgS0VFUCAoKihTT1JUKC5maW5pX2FycmF5LiopKSkKICAgIEtFRVAgKCooLmZpbmlfYXJyYXkqKSkKICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfZW5kID0gLik7CiAgfSA+RkxBU0gKCiAgLyogdXNlZCBieSB0aGUgc3RhcnR1cCB0byBpbml0aWFsaXplIGRhdGEgKi8KICBfc2lkYXRhID0gTE9BREFERFIoLmRhdGEpOwoKICAvKiBJbml0aWFsaXplZCBkYXRhIHNlY3Rpb25zIGdvZXMgaW50byBSQU0sIGxvYWQgTE1BIGNvcHkgYWZ0ZXIgY29kZSAqLwogIC5kYXRhIDogCiAgewogICAgLiA9IEFMSUdOKDQpOwogICAgX3NkYXRhID0gLjsgICAgICAgIC8qIGNyZWF0ZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBzdGFydCAqLwogICAgKiguZGF0YSkgICAgICAgICAgIC8qIC5kYXRhIHNlY3Rpb25zICovCiAgICAqKC5kYXRhKikgICAgICAgICAgLyogLmRhdGEqIHNlY3Rpb25zICovCgogICAgLiA9IEFMSUdOKDQpOwogICAgX2VkYXRhID0gLjsgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgZGF0YSBlbmQgKi8KICB9ID5SQU0gQVQ+IEZMQVNICgogIAogIC8qIFVuaW5pdGlhbGl6ZWQgZGF0YSBzZWN0aW9uICovCiAgLiA9IEFMSUdOKDQpOwogIC5ic3MgOgogIHsKICAgIC8qIFRoaXMgaXMgdXNlZCBieSB0aGUgc3RhcnR1cCBpbiBvcmRlciB0byBpbml0aWFsaXplIHRoZSAuYnNzIHNlY2lvbiAqLwogICAgX3Nic3MgPSAuOyAgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgYnNzIHN0YXJ0ICovCiAgICBfX2Jzc19zdGFydF9fID0gX3Nic3M7CiAgICAqKC5ic3MpCiAgICAqKC5ic3MqKQogICAgKihDT01NT04pCgogICAgLiA9IEFMSUdOKDQpOwogICAgX2Vic3MgPSAuOyAgICAgICAgIC8qIGRlZmluZSBhIGdsb2JhbCBzeW1ib2wgYXQgYnNzIGVuZCAqLwogICAgX19ic3NfZW5kX18gPSBfZWJzczsKICB9ID5SQU0KCiAgLyogVXNlcl9oZWFwX3N0YWNrIHNlY3Rpb24sIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggUkFNIGxlZnQgKi8KICAuX3VzZXJfaGVhcF9zdGFjayA6CiAgewogICAgLiA9IEFMSUdOKDgpOwogICAgUFJPVklERSAoIGVuZCA9IC4gKTsKICAgIFBST1ZJREUgKCBfZW5kID0gLiApOwogICAgLiA9IC4gKyBfTWluX0hlYXBfU2l6ZTsKICAgIC4gPSAuICsgX01pbl9TdGFja19TaXplOwogICAgLiA9IEFMSUdOKDgpOwogIH0gPlJBTQoKICAKCiAgLyogUmVtb3ZlIGluZm9ybWF0aW9uIGZyb20gdGhlIHN0YW5kYXJkIGxpYnJhcmllcyAqLwogIC9ESVNDQVJELyA6CiAgewogICAgbGliYy5hICggKiApCiAgICBsaWJtLmEgKCAqICkKICAgIGxpYmdjYy5hICggKiApCiAgfQoKICAuQVJNLmF0dHJpYnV0ZXMgMCA6IHsgKiguQVJNLmF0dHJpYnV0ZXMpIH0KfQoKCg==