|
From: Fu, E. <el...@in...> - 2007-01-23 03:42:57
|
LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IHBvc2l4dGVzdC1kaXNjdXNzLWJvdW5j ZXNAbGlzdHMuc291cmNlZm9yZ2UubmV0IFttYWlsdG86cG9zaXh0ZXN0LWRpc2N1c3MtYm91bmNl c0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdIE9uIEJlaGFsZiBPZiBTqKZiYXN0aWVuIER1Z3Wopg0K U2VudDogMjAwNsTqN9TCNcjVIDIxOjU1DQpUbzogcG9zaXh0ZXN0LWRpc2N1c3NAbGlzdHMuc291 cmNlZm9yZ2UubmV0DQpTdWJqZWN0OiBbcG9zaXh0ZXN0LWRpc2N1c3NdIE1ha2UgdGhlIGFpb19y ZWFkL3dyaXRlIHRlc3RzIGNvbmNlcm5pbmcgdGhlIG9mZnNldCBtYXhpbXVtIHJldHVybiBQVFNf VU5URVNURUQNCg0KDQogIEhpIGFsbCwNCg0KICBUaGUgZm9sbG93aW5nIHRlc3RzOg0KDQoJYWlv X3JlYWQvNi0xLmMNCglhaW9fcmVhZC8xNS0xLmMNCglhaW9fd3JpdGUvNC0xLmMNCglhaW9fd3Jp dGUvMTMtMS5jDQoNCiAgYXJlIHdyb25nLg0KDQogIEkgbWlzdGFrZW5seSB0b29rIHRoZSBvZmZz ZXQgbWF4aW11bSBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIGRlc2NyaXB0b3INCnRvIGJlIHRoZSBs aW1pdCBzZXQgYnkgc2V0cmxpbWl0KFJMSU1JVF9GU0laRSwgLi4uKSB3aGljaCBpcyBwbGFpbg0K d3JvbmcuDQoNCiAgVGhpcyBwYXRjaCByZXZlcnRzIHRvIHRoZSBvcmlnaW5hbCBiZWhhdmlvdXIg d2hpY2ggd2FzIHRvIHJldHVybiANClBUU19VTlRFU1RFRC4gSSBkb24ndCB0aGluayB0aGlzIHBh cnQgb2YgdGhlIFBPU0lYIHNwZWNpZmljYXRpb24NCmlzIHRlc3RhYmxlLCBidXQgSSBtYXkgYmUg d3JvbmcuDQoNCiAgU6imYmFzdGllbi4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICBTqKZiYXN0aWVuIER1Z3WopiAgICAgICAgICAg ICAgICBCVUxML0ZSRUM6QjEtMjQ3DQogIHBob25lOiAoKzMzKSA0NzYgMjkgNzcgNzAgICAgICBC dWxsY29tOiAyMjktNzc3MA0KDQogIG1haWx0bzpzZWJhc3RpZW4uZHVndWVAYnVsbC5uZXQNCg0K ICBMaW51eCBQT1NJWCBBSU86IGh0dHA6Ly93d3cuYnVsbG9wZW5zb3VyY2Uub3JnL3Bvc2l4DQog ICAgICAgICAgICAgICAgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wYWlvbA0K ICANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQoNCkluZGV4OiBwb3NpeHRlc3RzdWl0ZS9jb25mb3JtYW5jZS9pbnRlcmZhY2VzL2Fpb19yZWFk LzE1LTEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3Bvc2l4dGVzdC9wb3NpeHRl c3RzdWl0ZS9jb25mb3JtYW5jZS9pbnRlcmZhY2VzL2Fpb19yZWFkLzE1LTEuYyx2DQpyZXRyaWV2 aW5nIHJldmlzaW9uIDEuMw0KZGlmZiAtVTMgLXIxLjMgMTUtMS5jDQotLS0gcG9zaXh0ZXN0c3Vp dGUvY29uZm9ybWFuY2UvaW50ZXJmYWNlcy9haW9fcmVhZC8xNS0xLmMJMiBKdW4gMjAwNSAxMDo0 OTo0OSAtMDAwMAkxLjMNCisrKyBwb3NpeHRlc3RzdWl0ZS9jb25mb3JtYW5jZS9pbnRlcmZhY2Vz L2Fpb19yZWFkLzE1LTEuYwk1IEp1bCAyMDA2IDEzOjMxOjUwIC0wMDAwDQpAQCAtMTUsMjYgKzE1 LDE3IEBADQogICoNCiAgKiBtZXRob2Q6DQogICoNCi0gKgktIHdyaXRlIEJVRl9TSVpFIGJ5dGVz IHRvIGEgZmlsZQ0KLSAqCS0gZHJvcCBSTElNSVRfRlNJWkUgdG8gQlVGX1NJWkUvMg0KLSAqCS0g cmVhZCBCVUZfU0laRS8yIGJ5dGVzIGF0IG9mZnNldCBCVUZfU0laRS8yDQotICoJLSBjaGVjayBl cnJvciBjb2RlDQorICoJVU5URVNURUQNCiAgKg0KICAqLw0KIA0KICNkZWZpbmUgX1hPUEVOX1NP VVJDRSA2MDANCiAjaW5jbHVkZSA8c3RkaW8uaD4NCiAjaW5jbHVkZSA8dW5pc3RkLmg+DQotI2lu Y2x1ZGUgPHN0cmluZy5oPg0KLSNpbmNsdWRlIDxlcnJuby5oPg0KLSNpbmNsdWRlIDxzdGRsaWIu aD4NCi0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+DQogI2luY2x1ZGUgPGFpby5oPg0KIA0KICNp bmNsdWRlICJwb3NpeHRlc3QuaCINCiANCi0jZGVmaW5lIFROQU1FICJhaW9fcmVhZC8xNS0xLmMi DQotDQogaW50IG1haW4oKQ0KIHsNCiAJY2hhciB0bXBmbmFtZVsyNTZdOw0KQEAgLTQ4LDc0ICsz OSw1IEBADQogCWV4aXQoUFRTX1VOU1VQUE9SVEVEKTsNCiAjZW5kaWYNCiANCi0Jc25wcmludGYo dG1wZm5hbWUsIHNpemVvZih0bXBmbmFtZSksICIvdG1wL3B0c19haW9fd3JpdGVfMTNfMV8lZCIs IA0KLQkJICBnZXRwaWQoKSk7DQotCXVubGluayh0bXBmbmFtZSk7DQotCWZkID0gb3Blbih0bXBm bmFtZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fRVhDTCwNCi0JCSAgU19JUlVTUiB8IFNfSVdVU1Ip Ow0KLQlpZiAoZmQgPT0gLTEpDQotCXsNCi0JCXByaW50ZihUTkFNRSAiIEVycm9yIGF0IG9wZW4o KTogJXNcbiIsDQotCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsNCi0JCWV4aXQoUFRTX1VOUkVT T0xWRUQpOw0KLQl9DQotDQotCXVubGluayh0bXBmbmFtZSk7DQotDQotCWlmICh3cml0ZShmZCwg YnVmLCBCVUZfU0laRSkgIT0gQlVGX1NJWkUpDQotCXsNCi0JCXByaW50ZihUTkFNRSAiIEVycm9y IGF0IHdyaXRlKCk6ICVzXG4iLA0KLQkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7DQotCQljbG9z ZShmZCk7DQotCQlleGl0KFBUU19VTlJFU09MVkVEKTsNCi0JfQ0KLQ0KLQkvKiBTZXQgZmlsZSBz aXplIHNvZnQgbGltaXQgdG8gNTEyICovDQotCWdldHJsaW1pdChSTElNSVRfRlNJWkUgLCAmbGlt aXQpOw0KLQ0KLQlsaW1pdC5ybGltX2N1ciA9IEJVRl9TSVpFIC8gMjsNCi0NCi0JaWYgKHNldHJs aW1pdChSTElNSVRfRlNJWkUgLCAmbGltaXQpID09IC0xKQ0KLQl7DQotCQlwcmludGYoVE5BTUUg IiBFcnJvciBhdCBzZXRsaW1pdCgpOiAlc1xuIiwNCi0JCSAgICAgICBzdHJlcnJvcihlcnJubykp Ow0KLQkJZXhpdChQVFNfVU5SRVNPTFZFRCk7DQotCX0NCi0NCi0JLyogdHJ5IHRvIHJlYWQgQlVG X1NJWkUvMiBieXRlcyBhdCBvZmZzZXQgQlVGX1NJWkUvMiAqLw0KLQltZW1zZXQoJmFpb2NiLCAw LCBzaXplb2Yoc3RydWN0IGFpb2NiKSk7DQotCWFpb2NiLmFpb19maWxkZXMgPSBmZDsNCi0JYWlv Y2IuYWlvX2J1ZiA9IGJ1ZjsNCi0JYWlvY2IuYWlvX25ieXRlcyA9IEJVRl9TSVpFLzI7DQotCWFp b2NiLmFpb19vZmZzZXQgPSBCVUZfU0laRS8yOw0KLQ0KLQlpZiAoYWlvX3JlYWQoJmFpb2NiKSAh PSAtMSkNCi0Jew0KLQkJd2hpbGUgKGFpb19lcnJvciAoJmFpb2NiKSA9PSBFSU5QUk9HUkVTUyk7 DQotDQotCQlpbnQgZXJyID0gYWlvX2Vycm9yICgmYWlvY2IpOw0KLQkJaW50IHJldCA9IGFpb19y ZXR1cm4gKCZhaW9jYik7DQotDQotCQlpZiAocmV0ICE9IC0xKSB7DQotCQkJcHJpbnRmKFROQU1F ICIgYmFkIGFpb19yZWFkIHJldHVybiB2YWx1ZVxuIik7DQotCQkJY2xvc2UgKGZkKTsNCi0JCQll eGl0KFBUU19GQUlMKTsNCi0JCX0gZWxzZSBpZiAoZXJyICE9IEVPVkVSRkxPVykgew0KLQkJCXBy aW50ZihUTkFNRSAiIGVycm9yIGNvZGUgaXMgbm90IEVPVkVSRkxPVyAlc1xuIiwgc3RyZXJyb3Io ZXJybm8pKTsNCi0JCQljbG9zZSAoZmQpOw0KLQkJCWV4aXQoUFRTX0ZBSUwpOw0KLQkJfQ0KLQl9 ICBlbHNlIHsNCi0NCi0JCWlmIChlcnJubyAhPSBFT1ZFUkZMT1cpDQotCQl7DQotCQkJcHJpbnRm KFROQU1FICIgZXJybm8gaXMgbm90IEVPVkVSRkxPVyAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsN Ci0JCQljbG9zZShmZCk7DQotCQkJZXhpdChQVFNfRkFJTCk7DQotCQl9DQotCX0NCi0NCi0JY2xv c2UoZmQpOw0KLQlwcmludGYgKCJUZXN0IFBBU1NFRFxuIik7DQotCXJldHVybiBQVFNfUEFTUzsN CisJcmV0dXJuIFBUU19VTlRFU1RFRDsNCiB9DQpJbmRleDogcG9zaXh0ZXN0c3VpdGUvY29uZm9y bWFuY2UvaW50ZXJmYWNlcy9haW9fcmVhZC82LTEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9j dnNyb290L3Bvc2l4dGVzdC9wb3NpeHRlc3RzdWl0ZS9jb25mb3JtYW5jZS9pbnRlcmZhY2VzL2Fp b19yZWFkLzYtMS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4zDQpkaWZmIC1VMyAtcjEuMyA2 LTEuYw0KLS0tIHBvc2l4dGVzdHN1aXRlL2NvbmZvcm1hbmNlL2ludGVyZmFjZXMvYWlvX3JlYWQv Ni0xLmMJMiBKdW4gMjAwNSAxMDo0OTo0OSAtMDAwMAkxLjMNCisrKyBwb3NpeHRlc3RzdWl0ZS9j b25mb3JtYW5jZS9pbnRlcmZhY2VzL2Fpb19yZWFkLzYtMS5jCTUgSnVsIDIwMDYgMTM6MzE6NTAg LTAwMDANCkBAIC0xNSwxMjUgKzE1LDIzIEBADQogICoNCiAgKiBtZXRob2Q6DQogICoNCi0gKgkt IG9wZW4gZmlsZQ0KLSAqCS0gd3JpdGUgMTAyNCBieXRlcyB1c2luZyBhaW9fd3JpdGUNCi0gKgkt IFNldCBSTElNSVRfRlNJWkUgdG8gNTEyDQotICoJLSB0cnkgdG8gcmVhZCAxMDI0IGJ5dGVzIHVz aW5nIGFpb19yZWFkDQotICoJLSBjaGVjayB0aGF0IG9ubHkgNTEyIGJ5dGVzIHdlcmUgcmVhZA0K KyAqCVVOVEVTVEVEDQogICoNCiAgKi8NCiANCiAjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwDQog I2luY2x1ZGUgPHN0ZGlvLmg+DQogI2luY2x1ZGUgPHVuaXN0ZC5oPg0KLSNpbmNsdWRlIDxzdHJp bmcuaD4NCi0jaW5jbHVkZSA8ZXJybm8uaD4NCi0jaW5jbHVkZSA8c3RkbGliLmg+DQotI2luY2x1 ZGUgPHN5cy9yZXNvdXJjZS5oPg0KICNpbmNsdWRlIDxhaW8uaD4NCiANCiAjaW5jbHVkZSAicG9z aXh0ZXN0LmgiDQogDQotI2RlZmluZSBUTkFNRSAiYWlvX3JlYWQvNi0xLmMiDQotDQogaW50IG1h aW4oKQ0KIHsNCi0JY2hhciB0bXBmbmFtZVsyNTZdOw0KLSNkZWZpbmUgQlVGX1NJWkUgMTAyNA0K LQljaGFyIGJ1ZltCVUZfU0laRV07DQotCWNoYXIgY2hlY2tbQlVGX1NJWkVdOw0KLQlpbnQgZmQ7 DQotCXN0cnVjdCBhaW9jYiBhaW9jYjsNCi0Jc3RydWN0IHJsaW1pdCBsaW1pdDsNCi0JaW50IGVy cjsNCi0JaW50IHJldDsNCiANCiAjaWYgX1BPU0lYX0FTWU5DSFJPTk9VU19JTyAhPSAyMDAxMTJM DQogCWV4aXQoUFRTX1VOU1VQUE9SVEVEKTsNCiAjZW5kaWYNCiANCi0Jc25wcmludGYodG1wZm5h bWUsIHNpemVvZih0bXBmbmFtZSksICIvdG1wL3B0c19haW9fd3JpdGVfNF8xXyVkIiwgDQotCQkg IGdldHBpZCgpKTsNCi0JdW5saW5rKHRtcGZuYW1lKTsNCi0JZmQgPSBvcGVuKHRtcGZuYW1lLCBP X0NSRUFUIHwgT19SRFdSIHwgT19FWENMLA0KLQkJICBTX0lSVVNSIHwgU19JV1VTUik7DQotCWlm IChmZCA9PSAtMSkNCi0Jew0KLQkJcHJpbnRmKFROQU1FICIgRXJyb3IgYXQgb3BlbigpOiAlc1xu IiwNCi0JCSAgICAgICBzdHJlcnJvcihlcnJubykpOw0KLQkJZXhpdChQVFNfVU5SRVNPTFZFRCk7 DQotCX0NCi0NCi0JdW5saW5rKHRtcGZuYW1lKTsNCi0NCi0JbWVtc2V0KGJ1ZiwgMHhhYSwgQlVG X1NJWkUpOw0KLQ0KLQlpZiAod3JpdGUoZmQsIGJ1ZiwgQlVGX1NJWkUpICE9IEJVRl9TSVpFKQ0K LQl7DQotCQlwcmludGYoVE5BTUUgIiBFcnJvciBhdCB3cml0ZSgpOiAlc1xuIiwNCi0JCSAgICAg ICBzdHJlcnJvcihlcnJubykpOw0KLQkJZXhpdChQVFNfVU5SRVNPTFZFRCk7DQotCX0NCi0NCi0J LyogU2V0IGZpbGUgc2l6ZSBzb2Z0IGxpbWl0IHRvIDUxMiAqLw0KLQlnZXRybGltaXQoUkxJTUlU X0ZTSVpFICwgJmxpbWl0KTsNCi0NCi0JbGltaXQucmxpbV9jdXIgPSBCVUZfU0laRSAvIDI7DQot DQotCWlmIChzZXRybGltaXQoUkxJTUlUX0ZTSVpFICwgJmxpbWl0KSA9PSAtMSkNCi0Jew0KLQkJ cHJpbnRmKFROQU1FICIgRXJyb3IgYXQgc2V0bGltaXQoKTogJXNcbiIsDQotCQkgICAgICAgc3Ry ZXJyb3IoZXJybm8pKTsNCi0JCWV4aXQoUFRTX1VOUkVTT0xWRUQpOw0KLQl9DQotDQotCW1lbXNl dChjaGVjaywgMCwgQlVGX1NJWkUpOw0KLQltZW1zZXQoJmFpb2NiLCAwLCBzaXplb2Yoc3RydWN0 IGFpb2NiKSk7DQotCWFpb2NiLmFpb19maWxkZXMgPSBmZDsNCi0JYWlvY2IuYWlvX2J1ZiA9IGNo ZWNrOw0KLQlhaW9jYi5haW9fbmJ5dGVzID0gQlVGX1NJWkU7DQotDQotCWlmIChhaW9fcmVhZCgm YWlvY2IpID09IC0xKQ0KLQl7DQotCQlwcmludGYoVE5BTUUgIiBFcnJvciBhdCBhaW9fcmVhZCgp OiAlc1xuIiwNCi0JCSAgICAgICBzdHJlcnJvcihlcnJubykpOw0KLQkJZXhpdChQVFNfRkFJTCk7 DQotCX0NCi0NCi0JLyogV2FpdCB1bnRpbCBlbmQgb2YgdHJhbnNhY3Rpb24gKi8NCi0Jd2hpbGUg KChlcnIgPSBhaW9fZXJyb3IgKCZhaW9jYikpID09IEVJTlBST0dSRVNTKTsNCi0NCi0JZXJyID0g YWlvX2Vycm9yKCZhaW9jYik7DQotCXJldCA9IGFpb19yZXR1cm4oJmFpb2NiKTsNCi0NCi0JaWYg KGVyciAhPSAwKQ0KLQl7DQotCQlwcmludGYoVE5BTUUgIiBFcnJvciBhdCBhaW9fZXJyb3IoKSA6 ICVzXG4iLCBzdHJlcnJvciAoZXJyKSk7DQotCQljbG9zZShmZCk7DQotCQlleGl0KFBUU19GQUlM KTsNCi0JfQ0KLQ0KLQlpZiAocmV0ICE9IEJVRl9TSVpFLzIpDQotCXsNCi0JCXByaW50ZihUTkFN RSAiIEVycm9yIGF0IGFpb19yZXR1cm4oKVxuIik7DQotCQljbG9zZShmZCk7DQotCQlleGl0KFBU U19GQUlMKTsNCi0JfQ0KLQ0KLQkvKiBjaGVjayBpdCAqLw0KLQlpZiAobWVtY21wIChidWYsIGNo ZWNrLCBCVUZfU0laRS8yKSAhPSAwKSB7DQotCQlwcmludGYoVE5BTUUgIiByZWFkIHZhbHVlcyBh cmUgY29ycnVwdGVkXG4iKTsNCi0JCWNsb3NlKGZkKTsNCi0JCWV4aXQoUFRTX0ZBSUwpOw0KLQl9 DQotDQotCWlmIChjaGVja1tCVUZfU0laRS8yICsgMV0gIT0gMCkgew0KLQkJcHJpbnRmKFROQU1F ICIgcmVhZCBwYXN0IGxpbWl0XG4iKTsNCi0JCWNsb3NlKGZkKTsNCi0JCWV4aXQoUFRTX0ZBSUwp Ow0KLQl9DQotDQotCWNsb3NlKGZkKTsNCi0JcHJpbnRmICgiVGVzdCBQQVNTRURcbiIpOw0KLQly ZXR1cm4gUFRTX1BBU1M7DQorCXJldHVybiBQVFNfVU5URVNURUQ7DQogfQ0KSW5kZXg6IHBvc2l4 dGVzdHN1aXRlL2NvbmZvcm1hbmNlL2ludGVyZmFjZXMvYWlvX3dyaXRlLzEzLTEuYw0KPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQ0KUkNTIGZpbGU6IC9jdnNyb290L3Bvc2l4dGVzdC9wb3NpeHRlc3RzdWl0ZS9jb25mb3Jt YW5jZS9pbnRlcmZhY2VzL2Fpb193cml0ZS8xMy0xLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjMNCmRpZmYgLVUzIC1yMS4zIDEzLTEuYw0KLS0tIHBvc2l4dGVzdHN1aXRlL2NvbmZvcm1hbmNl L2ludGVyZmFjZXMvYWlvX3dyaXRlLzEzLTEuYwkyIEp1biAyMDA1IDEwOjQ5OjQ5IC0wMDAwCTEu Mw0KKysrIHBvc2l4dGVzdHN1aXRlL2NvbmZvcm1hbmNlL2ludGVyZmFjZXMvYWlvX3dyaXRlLzEz LTEuYwk1IEp1bCAyMDA2IDEzOjMxOjUwIC0wMDAwDQpAQCAtMTUsMTE0ICsxNSwyMyBAQA0KICAq DQogICogbWV0aG9kOg0KICAqDQotICoJLSBvcGVuIGZpbGUgZm9yIHdyaXRpbmcNCi0gKgktIGRy b3AgUkxJTUlUX0ZTSVpFIHRvIDUxMg0KLSAqCS0gd3JpdGUgMTAyNCBieXRlcyBhdCBvZmZzZXQg NTEyIHVzaW5nIGFpb193cml0ZQ0KLSAqCS0gY2hlY2sgZXJyb3IgY29kZSBpcyBFRkJJRw0KKyAq CVVOVEVTVEVEDQogICoNCiAgKi8NCiANCiAjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNjAwDQogI2lu Y2x1ZGUgPHN0ZGlvLmg+DQogI2luY2x1ZGUgPHVuaXN0ZC5oPg0KLSNpbmNsdWRlIDxzdHJpbmcu aD4NCi0jaW5jbHVkZSA8ZXJybm8uaD4NCi0jaW5jbHVkZSA8c3RkbGliLmg+DQotI2luY2x1ZGUg PHN5cy9yZXNvdXJjZS5oPg0KICNpbmNsdWRlIDxhaW8uaD4NCiANCiAjaW5jbHVkZSAicG9zaXh0 ZXN0LmgiDQogDQotI2RlZmluZSBUTkFNRSAiYWlvX3dyaXRlLzEzLTEuYyINCi0NCi1pbnQgZ290 X3NpZ3hmc3ogPSAwOw0KLQ0KLXZvaWQNCi1zaWd4ZnN6X2hhbmRsZXIoaW50IHNpZ251bSwgc2ln aW5mb190ICppbmZvLCB2b2lkICpjb250ZXh0KQ0KLXsNCi0JZ290X3NpZ3hmc3ogPSAxOw0KLX0N Ci0NCiBpbnQgbWFpbigpDQogew0KLQljaGFyIHRtcGZuYW1lWzI1Nl07DQotI2RlZmluZSBCVUZf U0laRSAxMDI0DQotCWNoYXIgYnVmW0JVRl9TSVpFXTsNCi0JaW50IGZkOw0KLQlzdHJ1Y3QgYWlv Y2IgYWlvY2I7DQotCXN0cnVjdCBybGltaXQgbGltaXQ7DQotCXN0cnVjdCBzaWdhY3Rpb24gYWN0 aW9uOw0KIA0KICNpZiBfUE9TSVhfQVNZTkNIUk9OT1VTX0lPICE9IDIwMDExMkwNCiAJZXhpdChQ VFNfVU5TVVBQT1JURUQpOw0KICNlbmRpZg0KIA0KLQkvKiBTZXQgZmlsZSBzaXplIHNvZnQgbGlt aXQgdG8gNTEyICovDQotCWdldHJsaW1pdChSTElNSVRfRlNJWkUgLCAmbGltaXQpOw0KLQ0KLQls aW1pdC5ybGltX2N1ciA9IEJVRl9TSVpFIC8gMjsNCi0NCi0JaWYgKHNldHJsaW1pdChSTElNSVRf RlNJWkUgLCAmbGltaXQpID09IC0xKQ0KLQl7DQotCQlwcmludGYoVE5BTUUgIiBFcnJvciBhdCBz ZXRsaW1pdCgpOiAlc1xuIiwNCi0JCSAgICAgICBzdHJlcnJvcihlcnJubykpOw0KLQkJZXhpdChQ VFNfVU5SRVNPTFZFRCk7DQotCX0NCi0NCi0Jc25wcmludGYodG1wZm5hbWUsIHNpemVvZih0bXBm bmFtZSksICIvdG1wL3B0c19haW9fd3JpdGVfMTNfMV8lZCIsIA0KLQkJICBnZXRwaWQoKSk7DQot CXVubGluayh0bXBmbmFtZSk7DQotCWZkID0gb3Blbih0bXBmbmFtZSwgT19DUkVBVCB8IE9fUkRX UiB8IE9fRVhDTCwNCi0JCSAgU19JUlVTUiB8IFNfSVdVU1IpOw0KLQlpZiAoZmQgPT0gLTEpDQot CXsNCi0JCXByaW50ZihUTkFNRSAiIEVycm9yIGF0IG9wZW4oKTogJXNcbiIsDQotCQkgICAgICAg c3RyZXJyb3IoZXJybm8pKTsNCi0JCWV4aXQoUFRTX1VOUkVTT0xWRUQpOw0KLQl9DQotDQotCXVu bGluayh0bXBmbmFtZSk7DQotDQotCS8qIFNldHVwIGhhbmRsZXIgZm9yIFNJR1hGU1ogKi8NCi0J YWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHNpZ3hmc3pfaGFuZGxlcjsNCi0Jc2lnZW1wdHlzZXQoJmFj dGlvbi5zYV9tYXNrKTsNCi0JYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GT3xTQV9SRVNUQVJU Ow0KLQlzaWdhY3Rpb24oU0lHWEZTWiwgJmFjdGlvbiwgTlVMTCk7DQotDQotCW1lbXNldChidWYs IDB4YWEsIEJVRl9TSVpFKTsNCi0JbWVtc2V0KCZhaW9jYiwgMCwgc2l6ZW9mKHN0cnVjdCBhaW9j YikpOw0KLQlhaW9jYi5haW9fZmlsZGVzID0gZmQ7DQotCWFpb2NiLmFpb19idWYgPSBidWY7DQot CWFpb2NiLmFpb19uYnl0ZXMgPSBCVUZfU0laRTsNCi0JYWlvY2IuYWlvX29mZnNldCA9IDUxMjsN Ci0NCi0JaWYgKGFpb193cml0ZSgmYWlvY2IpICE9IC0xKQ0KLQl7DQotCQl3aGlsZSAoYWlvX2Vy cm9yICgmYWlvY2IpID09IEVJTlBST0dSRVNTKTsNCi0NCi0JCWludCBlcnIgPSBhaW9fZXJyb3Ig KCZhaW9jYik7DQotCQlpbnQgcmV0ID0gYWlvX3JldHVybiAoJmFpb2NiKTsNCi0NCi0JCWlmIChy ZXQgIT0gLTEpIHsNCi0JCQlwcmludGYoVE5BTUUgIiBiYWQgYWlvX3dyaXRlIHJldHVybiB2YWx1 ZVxuIik7DQotCQkJY2xvc2UgKGZkKTsNCi0JCQlleGl0KFBUU19GQUlMKTsNCi0JCX0gZWxzZSBp ZiAoZXJyICE9IEVGQklHKSB7DQotCQkJcHJpbnRmKFROQU1FICIgZXJyb3IgY29kZSBpcyBub3Qg RUZCSUcgJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQotCQkJY2xvc2UgKGZkKTsNCi0JCQlleGl0 KFBUU19GQUlMKTsNCi0JCX0NCi0JfSAgZWxzZSB7DQotDQotCQlpZiAoZXJybm8gIT0gRUZCSUcp DQotCQl7DQotCQkJcHJpbnRmKFROQU1FICIgZXJybm8gaXMgbm90IEVGQklHICVzXG4iLCBzdHJl cnJvcihlcnJubykpOw0KLQkJCWNsb3NlKGZkKTsNCi0JCQlleGl0KFBUU19GQUlMKTsNCi0JCX0N Ci0JfQ0KLQ0KLQljbG9zZShmZCk7DQotCXByaW50ZiAoIlRlc3QgUEFTU0VEXG4iKTsNCi0JcmV0 dXJuIFBUU19QQVNTOw0KKwlyZXR1cm4gUFRTX1VOVEVTVEVEOw0KIH0NCkluZGV4OiBwb3NpeHRl c3RzdWl0ZS9jb25mb3JtYW5jZS9pbnRlcmZhY2VzL2Fpb193cml0ZS80LTEuYw0KPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KUkNTIGZpbGU6IC9jdnNyb290L3Bvc2l4dGVzdC9wb3NpeHRlc3RzdWl0ZS9jb25mb3JtYW5j ZS9pbnRlcmZhY2VzL2Fpb193cml0ZS80LTEuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMw0K ZGlmZiAtVTMgLXIxLjMgNC0xLmMNCi0tLSBwb3NpeHRlc3RzdWl0ZS9jb25mb3JtYW5jZS9pbnRl cmZhY2VzL2Fpb193cml0ZS80LTEuYwkyIEp1biAyMDA1IDEwOjQ5OjQ5IC0wMDAwCTEuMw0KKysr IHBvc2l4dGVzdHN1aXRlL2NvbmZvcm1hbmNlL2ludGVyZmFjZXMvYWlvX3dyaXRlLzQtMS5jCTUg SnVsIDIwMDYgMTM6MzE6NTAgLTAwMDANCkBAIC0xNSwxMjcgKzE1LDIzIEBADQogICoNCiAgKiBt ZXRob2Q6DQogICoNCi0gKgktIFNldCBSTElNSVRfRlNJWkUgdG8gNTEyDQotICoJLSBvcGVuIGZp bGUNCi0gKgktIHdyaXRlIDEwMjQgYnl0ZXMgdXNpbmcgYWlvX3dyaXRlDQotICoJLSBjaGVjayB0 aGF0IG9ubHkgNTEyIGJ5dGVzIHdlcmUgd3JpdHRlbg0KLSAqCS0gdHJ5IHRvIHJlYWQgMTAyNCBi eXRlcw0KLSAqCS0gY2hlY2sgdGhhdCBvbmx5IDUxMiBieXRlcyB3ZXJlIHJlYWQNCisgKglVTlRF U1RFRA0KICAqDQogICovDQogDQogI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMA0KICNpbmNsdWRl IDxzdGRpby5oPg0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAjaW5jbHVkZSA8dW5pc3RkLmg+ DQotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQotI2luY2x1ZGUgPGZjbnRsLmg+DQotI2luY2x1ZGUg PHN0cmluZy5oPg0KLSNpbmNsdWRlIDxlcnJuby5oPg0KLSNpbmNsdWRlIDxzdGRsaWIuaD4NCi0j aW5jbHVkZSA8c3lzL3RpbWUuaD4NCi0jaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+DQogI2luY2x1 ZGUgPGFpby5oPg0KIA0KICNpbmNsdWRlICJwb3NpeHRlc3QuaCINCiANCi0jZGVmaW5lIFROQU1F ICJhaW9fd3JpdGUvNC0xLmMiDQotDQogaW50IG1haW4oKQ0KIHsNCi0JY2hhciB0bXBmbmFtZVsy NTZdOw0KLSNkZWZpbmUgQlVGX1NJWkUgMTAyNA0KLQljaGFyIGJ1ZltCVUZfU0laRV07DQotCWNo YXIgY2hlY2tbQlVGX1NJWkVdOw0KLQlpbnQgZmQ7DQotCXN0cnVjdCBhaW9jYiBhaW9jYjsNCi0J c3RydWN0IHJsaW1pdCBsaW1pdDsNCi0JaW50IGVycjsNCi0JaW50IHJldDsNCiANCiAjaWYgX1BP U0lYX0FTWU5DSFJPTk9VU19JTyAhPSAyMDAxMTJMDQogCWV4aXQoUFRTX1VOU1VQUE9SVEVEKTsN CiAjZW5kaWYNCiANCi0JLyogU2V0IGZpbGUgc2l6ZSBzb2Z0IGxpbWl0IHRvIDUxMiAqLw0KLQln ZXRybGltaXQoUkxJTUlUX0ZTSVpFICwgJmxpbWl0KTsNCi0NCi0JbGltaXQucmxpbV9jdXIgPSBC VUZfU0laRSAvIDI7DQotDQotCWlmIChzZXRybGltaXQoUkxJTUlUX0ZTSVpFICwgJmxpbWl0KSA9 PSAtMSkNCi0Jew0KLQkJcHJpbnRmKFROQU1FICIgRXJyb3IgYXQgc2V0bGltaXQoKTogJXNcbiIs DQotCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsNCi0JCWV4aXQoUFRTX1VOUkVTT0xWRUQpOw0K LQl9DQotDQotCXNucHJpbnRmKHRtcGZuYW1lLCBzaXplb2YodG1wZm5hbWUpLCAiL3RtcC9wdHNf YWlvX3dyaXRlXzRfMV8lZCIsIA0KLQkJICBnZXRwaWQoKSk7DQotCXVubGluayh0bXBmbmFtZSk7 DQotCWZkID0gb3Blbih0bXBmbmFtZSwgT19DUkVBVCB8IE9fUkRXUiB8IE9fRVhDTCwNCi0JCSAg U19JUlVTUiB8IFNfSVdVU1IpOw0KLQlpZiAoZmQgPT0gLTEpDQotCXsNCi0JCXByaW50ZihUTkFN RSAiIEVycm9yIGF0IG9wZW4oKTogJXNcbiIsDQotCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsN Ci0JCWV4aXQoUFRTX1VOUkVTT0xWRUQpOw0KLQl9DQotDQotCXVubGluayh0bXBmbmFtZSk7DQot DQotCW1lbXNldChidWYsIDB4YWEsIEJVRl9TSVpFKTsNCi0JbWVtc2V0KCZhaW9jYiwgMCwgc2l6 ZW9mKHN0cnVjdCBhaW9jYikpOw0KLQlhaW9jYi5haW9fZmlsZGVzID0gZmQ7DQotCWFpb2NiLmFp b19idWYgPSBidWY7DQotCWFpb2NiLmFpb19uYnl0ZXMgPSBCVUZfU0laRTsNCi0NCi0JaWYgKGFp b193cml0ZSgmYWlvY2IpID09IC0xKQ0KLQl7DQotCQlwcmludGYoVE5BTUUgIiBFcnJvciBhdCBh aW9fd3JpdGUoKTogJXNcbiIsDQotCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsNCi0JCWV4aXQo UFRTX0ZBSUwpOw0KLQl9DQotDQotCS8qIFdhaXQgdW50aWwgY29tcGxldGlvbiAqLw0KLQl3aGls ZSAoYWlvX2Vycm9yICgmYWlvY2IpID09IEVJTlBST0dSRVNTKTsNCi0NCi0JZXJyID0gYWlvX2Vy cm9yKCZhaW9jYik7DQotCXJldCA9IGFpb19yZXR1cm4oJmFpb2NiKTsNCi0NCi0JaWYgKGVyciAh PSAwKQ0KLQl7DQotCQlwcmludGYgKFROQU1FICIgRXJyb3IgYXQgYWlvX2Vycm9yKCkgOiAlc1xu Iiwgc3RyZXJyb3IgKGVycikpOw0KLQkJY2xvc2UgKGZkKTsNCi0JCWV4aXQoUFRTX0ZBSUwpOw0K LQl9DQotDQotCS8qIENoZWNrIHRoYXQgd3JpdHRlbiBzaXplIGRpZCBub3QgZXhjZWVkIG1heCB2 YWx1ZSAqLw0KLQlpZiAocmV0ICE9IEJVRl9TSVpFLzIpDQotCXsNCi0JCXByaW50ZihUTkFNRSAi IEVycm9yIGF0IGFpb19yZXR1cm4oKVxuIik7DQotCQljbG9zZShmZCk7DQotCQlleGl0KFBUU19G QUlMKTsNCi0JfQ0KLQ0KLQkvKiBjaGVjayB0aGUgdmFsdWVzIHdyaXR0ZW4gKi8NCi0NCi0JaWYg KGxzZWVrKGZkLCAwLCBTRUVLX1NFVCkgPT0gLTEpDQotCXsNCi0JCXByaW50ZihUTkFNRSAiIEVy cm9yIGF0IGxzZWVrKCk6ICVzXG4iLA0KLQkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7DQotCQll eGl0KFBUU19GQUlMKTsNCi0JfQ0KLQ0KLQkvKiB3ZSB0cnkgdG8gcmVhZCBtb3JlIHRoYW4gd2Ug d3JvdGUgdG8gYmUgc3VyZSBvZiB0aGUgc2l6ZSB3cml0dGVuICovDQotDQotCWlmIChyZWFkKGZk LCBjaGVjaywgQlVGX1NJWkUpICE9IEJVRl9TSVpFIC8gMikNCi0Jew0KLQkJcHJpbnRmKFROQU1F ICIgRXJyb3IgYXQgcmVhZCgpOiAlc1xuIiwNCi0JCSAgICAgICBzdHJlcnJvcihlcnJubykpOw0K LQkJZXhpdChQVFNfRkFJTCk7DQotCX0NCi0NCi0JY2xvc2UoZmQpOw0KLQlwcmludGYgKCJUZXN0 IFBBU1NFRFxuIik7DQotCXJldHVybiBQVFNfUEFTUzsNCisJcmV0dXJuIFBUU19VTlRFU1RFRDsN CiB9DQoNClVzaW5nIFRvbWNhdCBidXQgbmVlZCB0byBkbyBtb3JlPyBOZWVkIHRvIHN1cHBvcnQg d2ViIHNlcnZpY2VzLCBzZWN1cml0eT8NCkdldCBzdHVmZiBkb25lIHF1aWNrbHkgd2l0aCBwcmUt aW50ZWdyYXRlZCB0ZWNobm9sb2d5IHRvIG1ha2UgeW91ciBqb2IgZWFzaWVyDQpEb3dubG9hZCBJ Qk0gV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlciB2LjEuMC4xIGJhc2VkIG9uIEFwYWNoZSBH ZXJvbmltbw0KaHR0cDovL3NlbC5hcy11cy5mYWxrYWcubmV0L3NlbD9jbWQ9bG5rJmtpZD0xMjA3 MDkmYmlkPTI2MzA1NyZkYXQ9MTIxNjQyDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXw0KcG9zaXh0ZXN0LWRpc2N1c3MgbWFpbGluZyBsaXN0DQpwb3NpeHRl c3QtZGlzY3Vzc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQNCmh0dHBzOi8vbGlzdHMuc291cmNlZm9y Z2UubmV0L2xpc3RzL2xpc3RpbmZvL3Bvc2l4dGVzdC1kaXNjdXNzDQo= |