LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqKiCw5sioy/nT0CAoQykyMDE1LCDW0NDLzajRtrnJt93T0M/euavLvqGjDQoqKiANCioqIM7EvP7D+7PGOiAgICAgYWxzYV92b2ljZS5jDQoqKiDOxLz+serKtjogICAgIA0KKiogxNrI3dWq0qo6ICAgIA0KKiogyrnTw7e9t6g6ICAgICANCioqIA0KKiog0N64xMjVxtogICAgICAgILDmsb66xSAgICAgINDeuMSx6rzHICAgICAgICDQ3rjEyMsgICAgICAgICAg0N64xMTayN0NCioqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoqKiAyMDE5LzA5LzI1ICAgICBWMS4wICAgICAgICBDcmVhdGUgICAgICAgICAgeHhxICAgICAgICC0tL2oDQoqKiANCiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2lmZGVmIF9VU0VfVk9JQ0VfQUxTQQ0KDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCg0KI2luY2x1ZGUgPHN0ZGludC5oPg0KLy8jaW5jbHVkZSAidm9sdGVfZHJ2LmgiDQojaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQojaW5jbHVkZSA8ZmNudGwuaD4NCiNpbmNsdWRlIDx0aW55YWxzYS9hdWRpb19taXhlcl9jdHJsLmg+DQoNCg0KDQojaW5jbHVkZSA8c3RkYm9vbC5oPiANCiNpbmNsdWRlICJ0aW55YWxzYS9hc291bmRsaWIuaCINCiNpbmNsdWRlICJ0aW55YWxzYS9hdWRpb19taXhlcl9jdHJsLmgiDQovLyNpbmNsdWRlICJhdWRpb19yZXNfY3RybC5oIg0KI2luY2x1ZGUgInZvaWNlX2xpYi5oIg0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICAgICAgICAgICAgILrqtqjS5SAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLy8jZGVmaW5lIEFWT0lDRV9URUFLXzJHXzNHX0RFVl9OVU0gMw0KLy8jZGVmaW5lIEFWT0lDRV9TT0ZUXzNHX0RFVl9OVU0gNA0KLy8jZGVmaW5lIEFWT0lDRV80R19ERVZfTlVNIDINCi8vI2RlZmluZSBBVk9JQ0VfNUdfREVWX05VTSAyDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICAgICAgICAgICAgIMDg0M22qNLlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qDQp0eXBlZGVmIGVudW0NCnsNCiAgICBBVk9JQ0VfVEVBS18yR18zRyA9IDAsICAgICANCiAgICBBVk9JQ0VfU09GVF8zR19OQiwvLzENCiAgICBBVk9JQ0VfU09GVF8zR19XQiwgLy8yICAgDQogICAgQVZPSUNFXzRHX05CLCAvLzMgICAgICAgICAgICAgICAgIA0KICAgIEFWT0lDRV80R19XQiwgLy80DQogICAgQVZPSUNFXzVHX05CLC8vNSAgICANCiAgICBBVk9JQ0VfNUdfV0IsLy82ICAgICAgDQogICAgTUFYX0FWT0lDRV9NT0RFICAgICAgICAgICAgICAgDQp9VF9BbHNhX1ZvaWNlX01vZGU7DQoqLw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICAgICAgICAgICAgIL7Wsr+6r8r91K3Qzcn5w/cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAgICAgICAgICAgICAgICAgvrLMrMirvtax5MG/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgyKu+1rqvyv0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIL7Wsr+6r8r9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogc3RhcnQgZm9yIHRlc3RpbmcgIGN0bSovDQoNCi8qIGRhdGEgdHlwZSBmb3Igdm9pY2UgZGV2aWNlICBoYW5kbGUgKi8NCg0Kc3RydWN0IHZvaWNlX2hhbmRsZQ0Kew0KICAgIHN0cnVjdCBwY20gICpwY21fdm9pY2Vfb3V0Ow0KICAgIHN0cnVjdCBwY20gICpwY21fdm9pY2VfaW47DQp9Ow0KDQovKiBzdGF0aWMgIGhhbmRsZSAqLw0Kc3RhdGljIHN0cnVjdCB2b2ljZV9oYW5kbGUgdm9pY2VfaGFuZGxlID0gezB9Ow0KDQpzdGF0aWMgaW50IGN1cnJlbnRfY2hhbmwgPSBUX09VVFBVVF9SRUNFSVZFUjsvL1RfT1VUUFVUX0hFQURTRVQ7Ly9UX09VVFBVVF9SRUNFSVZFUjsNCnN0YXRpYyBpbnQgY3VycmVudF92b2wgPSBUX1ZPSUNFX1ZPTF81X0xFVkVMOw0Kc3RhdGljIGludCBkZXZfbnVtID0gMTsNCnN0YXRpYyBpbnQgY3VycmVudF9tb2RlID0gTUFYX0FWT0lDRV9NT0RFOw0KY2hhciogdm9jaWVfbW9kZVtdPXsiQVZPSUNFX1RFQUtfMkdfM0ciLCJBVk9JQ0VfU09GVF8zR19OQiIsIkFWT0lDRV9TT0ZUXzNHX1dCIiwiQVZPSUNFXzRHX05CIiwiQVZPSUNFXzRHX1dCIiwiQVZPSUNFXzVHX05CIiwiQVZPSUNFXzVHX1dCIn07DQoNCi8qDQogKiBwaG9uZSBjYWxsICAgDQogKi8NCmludCBhbHNhX3ZvaWNlX29wZW4oaW50IHZtb2RlKQ0Kew0KICAgIGludCByZXQgPSAwOw0KCS8vaW50IHN0YXR1cyA9IDA7DQogICAgc3RydWN0IHBjbV9jb25maWcgY29uZmlnX3ZvaWNlID0gezB9Ow0KICAgIHN0cnVjdCBteGllciAqdm9pY2VfbWl4ZXIgPSBOVUxMOw0KCQ0KCXByaW50ZiggIiVzOiBzdGFydCB2b2NpZV9tb2RlKCVkKSAlcywgY3VycmVudF9tb2RlPSVkIVxuIixfX2Z1bmNfXyx2bW9kZSx2b2NpZV9tb2RlW3Ztb2RlXSxjdXJyZW50X21vZGUpOw0KDQogICAgaWYodm1vZGUgPj0gTUFYX0FWT0lDRV9NT0RFfHx2bW9kZSA8IEFWT0lDRV9URUFLXzJHXzNHKQ0KCXsNCgkJcHJpbnRmKCJhbHNhX3ZvaWNlX29wZW46IG1vZGUgbm90IHN1cHBvcnQgZmFpbCFcbiIpOw0KCQlyZXR1cm4gLTI7DQoJDQoJfQ0KICAgIC8qIG9wZW4gbWl4ZXIgZGV2IGZvciBjb2RlYyBjb250cm9sICovDQogICAgaWYoISh2b2ljZV9taXhlciA9IG1peGVyX29wZW4oMCkpKSB7DQogICAgICAgcHJpbnRmKCJtaXhlciBvcGVuIGZhaWwsIGZpbGUoJXMpLCBsaW5lKCVkKVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsNCiAgICAgICByZXR1cm4gLTI7DQogICAgfQ0KDQoNCglpZihUX09VVFBVVF9TUEVBS0VSID09IGN1cnJlbnRfY2hhbmwpIHsNCgkJbWl4X3NldF92b2ljZV9wYXRoKHZvaWNlX21peGVyLFRfT1VUUFVUX1NQRUFLRVIpOw0KCQkNCgkJcHJpbnRmKCJjaGFubCBTUEVBS0VSOiBtaXhfc2V0X3ZvaWNlX3BhdGggcmV0PSVkIVxuIixyZXQpOw0KCQltaXhfc2V0X3ZvaWNlX3ZvbCh2b2ljZV9taXhlcixUX1ZPSUNFX1ZPTF81X0xFVkVMKTsNCgkJDQoJICAgIHByaW50ZigiY2hhbmwgU1BFQUtFUjogbWl4X3NldF92b2ljZV92b2wgcmV0PSVkIVxuIixyZXQpOw0KCX0NCgllbHNlIGlmIChUX09VVFBVVF9SRUNFSVZFUiA9PSBjdXJyZW50X2NoYW5sKXsNCgkJbWl4X3NldF92b2ljZV9wYXRoKHZvaWNlX21peGVyLCBUX09VVFBVVF9SRUNFSVZFUik7DQoJCQ0KCQlwcmludGYoImNoYW5sIFJFQ0VJVkVSOiBtaXhfc2V0X3ZvaWNlX3BhdGggcmV0PSVkIVxuIixyZXQpOw0KCQltaXhfc2V0X3ZvaWNlX3ZvbCh2b2ljZV9taXhlcixUX1ZPSUNFX1ZPTF81X0xFVkVMKTsNCgkJDQoJICAgIHByaW50ZigiY2hhbmwgUkVDRUlWRVI6IG1peF9zZXRfdm9pY2Vfdm9sIHJldD0lZCFcbiIscmV0KTsNCgl9DQoJZWxzZSBpZiAoVF9PVVRQVVRfSEVBRFNFVCA9PSBjdXJyZW50X2NoYW5sKXsNCgkJDQoJCXJldD0gbWl4X3NldF92b2ljZV9wYXRoKHZvaWNlX21peGVyLCBUX09VVFBVVF9IRUFEU0VUKTsNCgkJDQoJICAgIHByaW50ZigiY2hhbmwgSEVBRFNFVDogbWl4X3NldF92b2ljZV9wYXRoIHJldD0lZCFcbiIscmV0KTsNCgkJcmV0ID0gbWl4X3NldF92b2ljZV92b2wodm9pY2VfbWl4ZXIsVF9WT0lDRV9WT0xfNV9MRVZFTCk7DQoJICAgIHByaW50ZigiY2hhbmwgSEVBRFNFVDogbWl4X3NldF92b2ljZV92b2wgcmV0PSVkIVxuIixyZXQpOw0KCQkNCgl9CQ0KCWVsc2UNCgl7DQoJCXByaW50ZigiYWxzYV92b2ljZV9vcGVuOiBjaGFubCBub3Qgc3VwcG9ydCBmYWlsIVxuIik7DQogICAgICAgIG1peGVyX2Nsb3NlKHZvaWNlX21peGVyKTsNCgkJcmV0dXJuIC0yOw0KDQoJfQ0KDQogICAgLypjbG9zZSBtaXhlciAqLw0KICAgIG1peGVyX2Nsb3NlKHZvaWNlX21peGVyKTsNCiAgICANCiAgICAvKiBvcGVuIHBjbSBkZXYgZm9yIGRhdGEgdHJhbmYqLw0KICAgIGNvbmZpZ192b2ljZS5jaGFubmVscyA9IDE7IC8qIG9uZSBjaGFubmVsICovIA0KICAgIGNvbmZpZ192b2ljZS5yYXRlID0gODAwMDsgIC8qIDhLIHJhdGUgKi8gDQogICAgY29uZmlnX3ZvaWNlLnBlcmlvZF9jb3VudCA9IDM7IC8qIGJ1ZmZlciBudW0gKi8NCiAgICBjb25maWdfdm9pY2UucGVyaW9kX3NpemUgPSA2NDA7IC8qIGJ1ZmZlciBzaXplICovDQogICAgY29uZmlnX3ZvaWNlLmZvcm1hdCA9IFBDTV9GT1JNQVRfUzE2X0xFOyAvKiAxNi1iaXQgc2lnbmVkICovDQogICAgaWYodm1vZGUgPT0gQVZPSUNFX1RFQUtfMkdfM0cpDQogICAgew0KICAgICAgICAgZGV2X251bSA9IEFWT0lDRV9URUFLXzJHXzNHX0RFVl9OVU07DQoJCSBjb25maWdfdm9pY2UucmF0ZSA9IDgwMDA7ICAvKiA4SyByYXRlICovIA0KICAgIH0NCgllbHNlIGlmKHZtb2RlID09IEFWT0lDRV9TT0ZUXzNHX05CKQ0KICAgIHsNCiAgICAgICAgIGRldl9udW0gPSBBVk9JQ0VfU09GVF8zR19ERVZfTlVNOw0KCQkgY29uZmlnX3ZvaWNlLnJhdGUgPSA4MDAwOyAgLyogOEsgcmF0ZSAqLyAgDQogICAgfQ0KCWVsc2UgaWYodm1vZGUgPT0gQVZPSUNFX1NPRlRfM0dfV0IpDQogICAgew0KICAgICAgICAgZGV2X251bSA9IEFWT0lDRV9TT0ZUXzNHX0RFVl9OVU07DQoJCSBjb25maWdfdm9pY2UucmF0ZSA9IDE2MDAwOyAgLyogMTZLIHJhdGUgKi8gIA0KICAgIH0NCgllbHNlIGlmKHZtb2RlID09IEFWT0lDRV80R19OQikNCiAgICB7DQogICAgICAgICBkZXZfbnVtID0gQVZPSUNFXzRHX0RFVl9OVU07DQoJCSBjb25maWdfdm9pY2UucmF0ZSA9IDgwMDA7ICAvKiA4SyByYXRlICovICANCiAgICB9DQoJZWxzZSBpZih2bW9kZSA9PSBBVk9JQ0VfNEdfV0IpDQogICAgew0KICAgICAgICAgZGV2X251bSA9IEFWT0lDRV80R19ERVZfTlVNOw0KCQkgY29uZmlnX3ZvaWNlLnJhdGUgPSAxNjAwMDsgIC8qIDE2SyByYXRlICovICANCiAgICB9DQoJZWxzZSBpZih2bW9kZSA9PSBBVk9JQ0VfNUdfTkIpDQogICAgew0KICAgICAgICAgZGV2X251bSA9IEFWT0lDRV81R19ERVZfTlVNOw0KCQkgY29uZmlnX3ZvaWNlLnJhdGUgPSA4MDAwOyAgLyogOEsgcmF0ZSAqLyAgDQogICAgfQ0KCWVsc2UgaWYodm1vZGUgPT0gQVZPSUNFXzVHX1dCKQ0KICAgIHsNCiAgICAgICAgIGRldl9udW0gPSBBVk9JQ0VfNUdfREVWX05VTTsNCgkJIGNvbmZpZ192b2ljZS5yYXRlID0gMTYwMDA7ICAvKiAxNksgcmF0ZSAqLyAgDQogICAgfQ0KCWVsc2UNCgl7DQoJCXByaW50ZigiYWxzYV92b2ljZV9vcGVuOiBtb2RlIG5vdCBzdXBwb3J0IGZhaWwhXG4iKTsNCgkJcmV0dXJuIC0yOw0KCQ0KCX0NCg0KDQogICAgaWYoISh2b2ljZV9oYW5kbGUucGNtX3ZvaWNlX291dCA9IHBjbV9vcGVuKDAsIGRldl9udW0sIFBDTV9PVVQsICZjb25maWdfdm9pY2UpKSkgDQoJCXByaW50ZigicGNtX291dCBkZXZfbnVtPSVkIG9wZW4gZmFpbCwgZmlsZSglcyksIGxpbmUoJWQpXG4iLGRldl9udW0sIF9fRklMRV9fLCBfX0xJTkVfXyk7DQoJDQoJcHJpbnRmKCIlczpwY21fb3BlbiBwY21fdm9pY2Vfb3V0IGRldl9udW09JWQgZW5kIVxuIixfX2Z1bmNfXyxkZXZfbnVtKTsNCgkJDQogICAgaWYoISh2b2ljZV9oYW5kbGUucGNtX3ZvaWNlX2luID0gcGNtX29wZW4oMCxkZXZfbnVtLFBDTV9JTiwgJmNvbmZpZ192b2ljZSkpKSANCgkJcHJpbnRmKCJwY21faW4gb3BlbiBkZXZfbnVtPSVkIGZhaWwsIGZpbGUoJXMpLCBsaW5lKCVkKVxuIixkZXZfbnVtLCBfX0ZJTEVfXywgX19MSU5FX18pOw0KCQ0KCXByaW50ZigiJXM6cGNtX29wZW4gcGNtX3ZvaWNlX2luIGRldl9udW09JWQgZW5kIVxuIixfX2Z1bmNfXyxkZXZfbnVtKTsNCiAgICAgICANCiAgICBpZigwICE9IHBjbV9wcmVwYXJlKHZvaWNlX2hhbmRsZS5wY21fdm9pY2Vfb3V0KSkgDQogICAgCXByaW50ZigicGNtX291dCBkZXZfbnVtPSVkIHByZXBhcmUgZmFpbCwgZmlsZSglcyksIGxpbmUoJWQpXG4iLGRldl9udW0sIF9fRklMRV9fLCBfX0xJTkVfXyk7DQoJDQoJcHJpbnRmKCIlczogcGNtX3ZvaWNlX291dCBwY21fcHJlcGFyZSBkZXZfbnVtPSVkIGVuZCFcbiIsX19mdW5jX18sZGV2X251bSk7DQoJCQ0KICAgIGlmKDAgIT0gcGNtX3ByZXBhcmUodm9pY2VfaGFuZGxlLnBjbV92b2ljZV9pbikpDQogICAJCXByaW50ZigicGNtX2luIGRldl9udW09JWQgcHJlcGFyZSBmYWlsLCBmaWxlKCVzKSwgbGluZSglZClcbiIsZGV2X251bSwgX19GSUxFX18sIF9fTElORV9fKTsNCg0KCQ0KCXByaW50ZigiJXM6IHBjbV92b2ljZV9pbiBwY21fcHJlcGFyZSB2bW9kZT0lZCBkZXZfbnVtPSVkIGVuZCFcbiIsX19mdW5jX18sdm1vZGUsZGV2X251bSk7DQogICAgY3VycmVudF9tb2RlID0gdm1vZGU7DQoJcHJpbnRmKCIlczogZW5kIVxuIixfX2Z1bmNfXyk7IA0KCQ0KICAgIHJldHVybiAwOw0KfQ0KDQppbnQgYWxzYV92b2ljZV9jbG9zZShpbnQgdm1vZGUpDQp7DQogICAgaW50IHJldCA9IDA7DQoJcHJpbnRmKCIlczogc3RhcnQhXG4iLF9fZnVuY19fKTsgDQoNCiAgICBpZih2bW9kZSA+PSBNQVhfQVZPSUNFX01PREV8fHZtb2RlIDwgQVZPSUNFX1RFQUtfMkdfM0cpDQoJew0KCQlwcmludGYoImFsc2Ffdm9pY2VfY2xvc2U6IG1vZGUgbm90IHN1cHBvcnQgZmFpbCFcbiIpOw0KCQlyZXR1cm4gLTI7DQoJDQoJfQ0KDQppZih2b2ljZV9oYW5kbGUucGNtX3ZvaWNlX2luKSB7DQoJcmV0ID0gcGNtX2Nsb3NlKHZvaWNlX2hhbmRsZS5wY21fdm9pY2VfaW4pOw0KCXZvaWNlX2hhbmRsZS5wY21fdm9pY2VfaW4gPSAwOw0KDQoJcHJpbnRmKCJwY21fY2xvc2UgcGNtX3ZvaWNlX2luCXJldD0lZCFcbiIscmV0KTsNCn0NCg0KaWYodm9pY2VfaGFuZGxlLnBjbV92b2ljZV9vdXQpIHsNCglyZXQgPSBwY21fY2xvc2Uodm9pY2VfaGFuZGxlLnBjbV92b2ljZV9vdXQpOw0KCXZvaWNlX2hhbmRsZS5wY21fdm9pY2Vfb3V0ID0gMDsNCg0KCXByaW50ZigicGNtX2Nsb3NlIHBjbV92b2ljZV9vdXQgIHJldD0lZCFcbiIscmV0KTsNCn0NCg0KDQoNCg0KDQoJY3VycmVudF9tb2RlID0gTUFYX0FWT0lDRV9NT0RFOw0KCXByaW50ZigiJXM6IGVuZCFcbiIsX19mdW5jX18pOyANCgkNCiAgICByZXR1cm4gcmV0OyANCn0NCg0KDQoNCiNlbmRpZg0K