From mboxrd@z Thu Jan 1 00:00:00 1970 From: jack_wang Subject: Re: [PATCH] pm8001: Add FUNC_GET_EVENTS Date: Sat, 14 Jan 2012 10:31:17 +0800 Message-ID: <201201141031150158092@usish.com> References: <46C64AF8-8DB5-4380-AB15-DF861E10F3A8@xyratex.com>, Reply-To: jack_wang Mime-Version: 1.0 Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Return-path: Received: from sr-smtp.usish.com ([210.5.144.203]:60882 "EHLO sr-smtp.usish.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753689Ab2ANCbU (ORCPT ); Fri, 13 Jan 2012 21:31:20 -0500 Sender: linux-scsi-owner@vger.kernel.org List-Id: linux-scsi@vger.kernel.org To: Mark Salyzyn , linux-scsi Cc: James Bottomley , crystal_yu , john_gong , lindar_liu VGhhbmtzIE1hcmsgZm9yIGNhdGNoaW5nIHRoaXMuIExvb2tzIGdvb2QgdG8gbWUsIGJ1dCBJIG5l ZWQgdG8gdmVyaWZ5IG9uIE1vbmRheSBvbiBIYXJkd2FyZSB0aGVuIGFja2VkLg0KDQoNCg0KLS0t LS0tLS0tLS0tLS0NCmphY2tfd2FuZw0KPlRoZSBwbTgwMDEgZHJpdmVyIGlzIG1pc3NpbmcgdGhl IEZVTkNfR0VUX0VWRU5UUyBoYW5kbGVyIGluIHRoZSBwaHkgY29udHJvbCBmdW5jdGlvbi4gU2lu Y2UgdGhlIHBtODAwMV9iYXI0X3NoaWZ0IGZ1bmN0aW9uIHdhcyBub3QgZGVzaWduZWQgdG8gYmUg Y2FsbGVkIGF0IHJ1bnRpbWUsIHdlIGhhZCB0byB0YWtlIHNvbWUgcHJlLWVtcHRpdmUgYWRkaXRp b25hbCBhdHRlbnRpb24gdG8gcHJvdGVjdCB0aGUgaGFyZHdhcmUgYWNjZXNzZXMgdGhyb3VnaG91 dCB0aGUgZHJpdmVyLg0KPg0KPlNpZ25lZC1vZmYtYnk6IG1hcmtfc2FseXp5bkB4eXJhdGV4LmNv bQ0KPkNjOiBqYWNrX3dhbmdAdXNpc2guY29tDQo+Q2M6IEpCb3R0b21sZXlAcGFyYWxsZWxzLmNv bQ0KPkNjOiBjcnlzdGFsX3l1QHVzaXNoLmNvbQ0KPkNjOiBqb2huX2dvbmdAdXNpc2guY29tDQo+ Q2M6IGxpbmRhcl9saXUgPGxpbmRhcl9saXVAdXNpc2guY29tPg0KPg0KPiBkcml2ZXJzL3Njc2kv cG04MDAxL3BtODAwMV9od2kuYyB8ICAgODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gZHJpdmVycy9zY3NpL3BtODAwMS9wbTgw MDFfc2FzLmMgfCAgIDM0ICsrKysrKysrKysrKysrKysrKysrKysrDQo+IGRyaXZlcnMvc2NzaS9w bTgwMDEvcG04MDAxX3Nhcy5oIHwgICAgMSANCj4gMyBmaWxlcyBjaGFuZ2VkLCA5MiBpbnNlcnRp b25zKCspLCAyNyBkZWxldGlvbnMoLSkNCj4NCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Bt ODAwMS9wbTgwMDFfaHdpLmMgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuYw0KPmlu ZGV4IGI3YjkyZjcuLjRiZGRiMmEgMTAwNjQ0DQo+LS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9w bTgwMDFfaHdpLmMNCj4rKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9od2kuYw0KPkBA IC0zMzgsMjYgKzMzOCwyNSBAQCB1cGRhdGVfb3V0Ym5kX3F1ZXVlX3RhYmxlKHN0cnVjdCBwbTgw MDFfaGJhX2luZm8gKnBtODAwMV9oYSwgaW50IG51bWJlcikNCj4gfQ0KPiANCj4gLyoqDQo+LSAq IGJhcjRfc2hpZnQgLSBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gc2hpZnQgQkFSIGJhc2UgYWRkcmVz cw0KPi0gKiBAcG04MDAxX2hhIDogb3VyIGhiYSBjYXJkIGluZm9ybWF0aW9uDQo+KyAqIHBtODAw MV9iYXI0X3NoaWZ0IC0gZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHNoaWZ0IEJBUiBiYXNlIGFkZHJl c3MNCj4rICogQHBtODAwMV9oYSA6IG91ciBoYmEgY2FyZCBpbmZvbWF0aW9uDQo+ICAqIEBzaGlm dFZhbHVlIDogc2hpZnRpbmcgdmFsdWUgaW4gbWVtb3J5IGJhci4NCj4gICovDQo+LXN0YXRpYyBp bnQgYmFyNF9zaGlmdChzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEsIHUzMiBzaGlm dFZhbHVlKQ0KPitpbnQgcG04MDAxX2JhcjRfc2hpZnQoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAq cG04MDAxX2hhLCB1MzIgc2hpZnRWYWx1ZSkNCj4gew0KPiAJdTMyIHJlZ1ZhbDsNCj4tCXUzMiBt YXhfd2FpdF9jb3VudDsNCj4rCXVuc2lnbmVkIGxvbmcgc3RhcnQ7DQo+IA0KPiAJLyogcHJvZ3Jh bSB0aGUgaW5ib3VuZCBBWEkgdHJhbnNsYXRpb24gTG93ZXIgQWRkcmVzcyAqLw0KPiAJcG04MDAx X2N3MzIocG04MDAxX2hhLCAxLCBTUENfSUJXX0FYSV9UUkFOU0xBVElPTl9MT1csIHNoaWZ0VmFs dWUpOw0KPiANCj4gCS8qIGNvbmZpcm0gdGhlIHNldHRpbmcgaXMgd3JpdHRlbiAqLw0KPi0JbWF4 X3dhaXRfY291bnQgPSAxICogMTAwMCAqIDEwMDA7ICAvKiAxIHNlYyAqLw0KPisJc3RhcnQgPSBq aWZmaWVzICsgSFo7IC8qIDEgc2VjICovDQo+IAlkbyB7DQo+LQkJdWRlbGF5KDEpOw0KPiAJCXJl Z1ZhbCA9IHBtODAwMV9jcjMyKHBtODAwMV9oYSwgMSwgU1BDX0lCV19BWElfVFJBTlNMQVRJT05f TE9XKTsNCj4tCX0gd2hpbGUgKChyZWdWYWwgIT0gc2hpZnRWYWx1ZSkgJiYgKC0tbWF4X3dhaXRf Y291bnQpKTsNCj4rCX0gd2hpbGUgKChyZWdWYWwgIT0gc2hpZnRWYWx1ZSkgJiYgdGltZV9iZWZv cmUoamlmZmllcywgc3RhcnQpKTsNCj4gDQo+LQlpZiAoIW1heF93YWl0X2NvdW50KSB7DQo+Kwlp ZiAocmVnVmFsICE9IHNoaWZ0VmFsdWUpIHsNCj4gCQlQTTgwMDFfSU5JVF9EQkcocG04MDAxX2hh LA0KPiAJCQlwbTgwMDFfcHJpbnRrKCJUSU1FT1VUOlNQQ19JQldfQVhJX1RSQU5TTEFUSU9OX0xP VyINCj4gCQkJIiA9IDB4JXhcbiIsIHJlZ1ZhbCkpOw0KPkBAIC0zODgsMTYgKzM4NywyMyBAQCBt cGlfc2V0X3BoeXNfZzNfd2l0aF9zc2Moc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hh LCB1MzIgU1NDYml0KQ0KPiAgICAgKiBVc2luZyBzaGlmdGVkIGRlc3RpbmF0aW9uIGFkZHJlc3Mg MHgzXzAwMDA6MHgxMDc0ICsgMHg0MDAwKk4gKE49MDozKQ0KPiAgICAgKiBVc2luZyBzaGlmdGVk IGRlc3RpbmF0aW9uIGFkZHJlc3MgMHg0XzAwMDA6MHgxMDc0ICsgMHg0MDAwKihOLTQpIChOPTQ6 NykNCj4gICAgICovDQo+LQlpZiAoLTEgPT0gYmFyNF9zaGlmdChwbTgwMDFfaGEsIFNBUzJfU0VU VElOR1NfTE9DQUxfUEhZXzBfM19TSElGVF9BRERSKSkNCj4rCXNwaW5fbG9ja19pcnFzYXZlKCZw bTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4rCWlmICgtMSA9PSBwbTgwMDFfYmFyNF9zaGlmdChw bTgwMDFfaGEsDQo+KwkJCQlTQVMyX1NFVFRJTkdTX0xPQ0FMX1BIWV8wXzNfU0hJRlRfQUREUikp IHsNCj4rCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsN Cj4gCQlyZXR1cm47DQo+Kwl9DQo+IA0KPiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgew0KPiAJ CW9mZnNldCA9IFNBUzJfU0VUVElOR1NfTE9DQUxfUEhZXzBfM19PRkZTRVQgKyAweDQwMDAgKiBp Ow0KPiAJCXBtODAwMV9jdzMyKHBtODAwMV9oYSwgMiwgb2Zmc2V0LCAweDgwMDAxNTAxKTsNCj4g CX0NCj4gCS8qIHNoaWZ0IG1lbWJhc2UgMyBmb3IgU0FTMl9TRVRUSU5HU19MT0NBTF9QSFkgNCAt IDcgKi8NCj4tCWlmICgtMSA9PSBiYXI0X3NoaWZ0KHBtODAwMV9oYSwgU0FTMl9TRVRUSU5HU19M T0NBTF9QSFlfNF83X1NISUZUX0FERFIpKQ0KPisJaWYgKC0xID09IHBtODAwMV9iYXI0X3NoaWZ0 KHBtODAwMV9oYSwNCj4rCQkJCVNBUzJfU0VUVElOR1NfTE9DQUxfUEhZXzRfN19TSElGVF9BRERS KSkgew0KPisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3Mp Ow0KPiAJCXJldHVybjsNCj4rCX0NCj4gCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspIHsNCj4gCQlv ZmZzZXQgPSBTQVMyX1NFVFRJTkdTX0xPQ0FMX1BIWV80XzdfT0ZGU0VUICsgMHg0MDAwICogKGkt NCk7DQo+IAkJcG04MDAxX2N3MzIocG04MDAxX2hhLCAyLCBvZmZzZXQsIDB4ODAwMDE1MDEpOw0K PkBAIC00MjEsNyArNDI3LDggQEAgbXBpX3NldF9waHlzX2czX3dpdGhfc3NjKHN0cnVjdCBwbTgw MDFfaGJhX2luZm8gKnBtODAwMV9oYSwgdTMyIFNTQ2JpdCkNCj4gCXBtODAwMV9jdzMyKHBtODAw MV9oYSwgMiwgMHhkOCwgMHg4MDAwQzAxNik7DQo+IA0KPiAJLypzZXQgdGhlIHNoaWZ0ZWQgZGVz dGluYXRpb24gYWRkcmVzcyB0byAweDAgdG8gYXZvaWQgZXJyb3Igb3BlcmF0aW9uICovDQo+LQli YXI0X3NoaWZ0KHBtODAwMV9oYSwgMHgwKTsNCj4rCXBtODAwMV9iYXI0X3NoaWZ0KHBtODAwMV9o YSwgMHgwKTsNCj4rCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxh Z3MpOw0KPiAJcmV0dXJuOw0KPiB9DQo+IA0KPkBAIC00MzcsNiArNDQ0LDcgQEAgbXBpX3NldF9v cGVuX3JldHJ5X2ludGVydmFsX3JlZyhzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEs DQo+IAl1MzIgb2Zmc2V0Ow0KPiAJdTMyIHZhbHVlOw0KPiAJdTMyIGk7DQo+Kwl1bnNpZ25lZCBs b25nIGZsYWdzOw0KPiANCj4gI2RlZmluZSBPUEVOX1JFVFJZX0lOVEVSVkFMX1BIWV8wXzNfU0hJ RlRfQUREUiAweDAwMDMwMDAwDQo+ICNkZWZpbmUgT1BFTl9SRVRSWV9JTlRFUlZBTF9QSFlfNF83 X1NISUZUX0FERFIgMHgwMDA0MDAwMA0KPkBAIC00NDUsMjQgKzQ1MywzMCBAQCBtcGlfc2V0X29w ZW5fcmV0cnlfaW50ZXJ2YWxfcmVnKHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSwN Cj4gI2RlZmluZSBPUEVOX1JFVFJZX0lOVEVSVkFMX1JFR19NQVNLIDB4MDAwMEZGRkYNCj4gDQo+ IAl2YWx1ZSA9IGludGVydmFsICYgT1BFTl9SRVRSWV9JTlRFUlZBTF9SRUdfTUFTSzsNCj4rCXNw aW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4gCS8qIHNoaWZ0IGJh ciBhbmQgc2V0IHRoZSBPUEVOX1JFSkVDVChSRVRSWSkgaW50ZXJ2YWwgdGltZSBvZiBQSFkgMCAt My4qLw0KPi0JaWYgKC0xID09IGJhcjRfc2hpZnQocG04MDAxX2hhLA0KPi0JCQkgICAgIE9QRU5f UkVUUllfSU5URVJWQUxfUEhZXzBfM19TSElGVF9BRERSKSkNCj4rCWlmICgtMSA9PSBwbTgwMDFf YmFyNF9zaGlmdChwbTgwMDFfaGEsDQo+KwkJCSAgICAgT1BFTl9SRVRSWV9JTlRFUlZBTF9QSFlf MF8zX1NISUZUX0FERFIpKSB7DQo+KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hh LT5sb2NrLCBmbGFncyk7DQo+IAkJcmV0dXJuOw0KPisJfQ0KPiAJZm9yIChpID0gMDsgaSA8IDQ7 IGkrKykgew0KPiAJCW9mZnNldCA9IE9QRU5fUkVUUllfSU5URVJWQUxfUEhZXzBfM19PRkZTRVQg KyAweDQwMDAgKiBpOw0KPiAJCXBtODAwMV9jdzMyKHBtODAwMV9oYSwgMiwgb2Zmc2V0LCB2YWx1 ZSk7DQo+IAl9DQo+IA0KPi0JaWYgKC0xID09IGJhcjRfc2hpZnQocG04MDAxX2hhLA0KPi0JCQkg ICAgIE9QRU5fUkVUUllfSU5URVJWQUxfUEhZXzRfN19TSElGVF9BRERSKSkNCj4rCWlmICgtMSA9 PSBwbTgwMDFfYmFyNF9zaGlmdChwbTgwMDFfaGEsDQo+KwkJCSAgICAgT1BFTl9SRVRSWV9JTlRF UlZBTF9QSFlfNF83X1NISUZUX0FERFIpKSB7DQo+KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm cG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJcmV0dXJuOw0KPisJfQ0KPiAJZm9yIChpID0g NDsgaSA8IDg7IGkrKykgew0KPiAJCW9mZnNldCA9IE9QRU5fUkVUUllfSU5URVJWQUxfUEhZXzRf N19PRkZTRVQgKyAweDQwMDAgKiAoaS00KTsNCj4gCQlwbTgwMDFfY3czMihwbTgwMDFfaGEsIDIs IG9mZnNldCwgdmFsdWUpOw0KPiAJfQ0KPiAJLypzZXQgdGhlIHNoaWZ0ZWQgZGVzdGluYXRpb24g YWRkcmVzcyB0byAweDAgdG8gYXZvaWQgZXJyb3Igb3BlcmF0aW9uICovDQo+LQliYXI0X3NoaWZ0 KHBtODAwMV9oYSwgMHgwKTsNCj4rCXBtODAwMV9iYXI0X3NoaWZ0KHBtODAwMV9oYSwgMHgwKTsN Cj4rCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPiAJ cmV0dXJuOw0KPiB9DQo+IA0KPkBAIC02ODgsOCArNzAyLDExIEBAIHN0YXRpYyB1MzIgc29mdF9y ZXNldF9yZWFkeV9jaGVjayhzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEpDQo+IAkJ UE04MDAxX0lOSVRfREJHKHBtODAwMV9oYSwNCj4gCQkJcG04MDAxX3ByaW50aygiRmlybXdhcmUg aXMgcmVhZHkgZm9yIHJlc2V0IC5cbiIpKTsNCj4gCX0gZWxzZSB7DQo+LQkvKiBUcmlnZ2VyIE5N SSB0d2ljZSB2aWEgUkI2ICovDQo+LQkJaWYgKC0xID09IGJhcjRfc2hpZnQocG04MDAxX2hhLCBS QjZfQUNDRVNTX1JFRykpIHsNCj4rCQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPisJCS8qIFRyaWdn ZXIgTk1JIHR3aWNlIHZpYSBSQjYgKi8NCj4rCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hh LT5sb2NrLCBmbGFncyk7DQo+KwkJaWYgKC0xID09IHBtODAwMV9iYXI0X3NoaWZ0KHBtODAwMV9o YSwgUkI2X0FDQ0VTU19SRUcpKSB7DQo+KwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAw MV9oYS0+bG9jaywgZmxhZ3MpOw0KPiAJCQlQTTgwMDFfRkFJTF9EQkcocG04MDAxX2hhLA0KPiAJ CQkJcG04MDAxX3ByaW50aygiU2hpZnQgQmFyNCB0byAweCV4IGZhaWxlZFxuIiwNCj4gCQkJCQlS QjZfQUNDRVNTX1JFRykpOw0KPkBAIC03MTUsOCArNzMyLDEwIEBAIHN0YXRpYyB1MzIgc29mdF9y ZXNldF9yZWFkeV9jaGVjayhzdHJ1Y3QgcG04MDAxX2hiYV9pbmZvICpwbTgwMDFfaGEpDQo+IAkJ CVBNODAwMV9GQUlMX0RCRyhwbTgwMDFfaGEsDQo+IAkJCQlwbTgwMDFfcHJpbnRrKCJTQ1JBVENI X1BBRDMgdmFsdWUgPSAweCV4XG4iLA0KPiAJCQkJcG04MDAxX2NyMzIocG04MDAxX2hhLCAwLCBN U0dVX1NDUkFUQ0hfUEFEXzMpKSk7DQo+KwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtODAw MV9oYS0+bG9jaywgZmxhZ3MpOw0KPiAJCQlyZXR1cm4gLTE7DQo+IAkJfQ0KPisJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPiAJfQ0KPiAJcmV0dXJu IDA7DQo+IH0NCj5AQCAtNzMzLDYgKzc1Miw3IEBAIHBtODAwMV9jaGlwX3NvZnRfcnN0KHN0cnVj dCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSwgdTMyIHNpZ25hdHVyZSkNCj4gCXUzMglyZWdW YWwsIHRvZ2dsZVZhbDsNCj4gCXUzMgltYXhfd2FpdF9jb3VudDsNCj4gCXUzMglyZWdWYWwxLCBy ZWdWYWwyLCByZWdWYWwzOw0KPisJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gDQo+IAkvKiBzdGVw MTogQ2hlY2sgRlcgaXMgcmVhZHkgZm9yIHNvZnQgcmVzZXQgKi8NCj4gCWlmIChzb2Z0X3Jlc2V0 X3JlYWR5X2NoZWNrKHBtODAwMV9oYSkgIT0gMCkgew0KPkBAIC03NDMsNyArNzYzLDkgQEAgcG04 MDAxX2NoaXBfc29mdF9yc3Qoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB1MzIg c2lnbmF0dXJlKQ0KPiAJLyogc3RlcCAyOiBjbGVhciBOTUkgc3RhdHVzIHJlZ2lzdGVyIG9uIEFB UDEgYW5kIElPUCwgd3JpdGUgdGhlIHNhbWUNCj4gCXZhbHVlIHRvIGNsZWFyICovDQo+IAkvKiBt YXAgMHg2MDAwMCB0byBCQVI0KDB4MjApLCBCQVIyKHdpbikgKi8NCj4tCWlmICgtMSA9PSBiYXI0 X3NoaWZ0KHBtODAwMV9oYSwgTUJJQ19BQVAxX0FERFJfQkFTRSkpIHsNCj4rCXNwaW5fbG9ja19p cnFzYXZlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4rCWlmICgtMSA9PSBwbTgwMDFfYmFy NF9zaGlmdChwbTgwMDFfaGEsIE1CSUNfQUFQMV9BRERSX0JBU0UpKSB7DQo+KwkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJUE04MDAxX0ZBSUxf REJHKHBtODAwMV9oYSwNCj4gCQkJcG04MDAxX3ByaW50aygiU2hpZnQgQmFyNCB0byAweCV4IGZh aWxlZFxuIiwNCj4gCQkJTUJJQ19BQVAxX0FERFJfQkFTRSkpOw0KPkBAIC03NTQsNyArNzc2LDgg QEAgcG04MDAxX2NoaXBfc29mdF9yc3Qoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hh LCB1MzIgc2lnbmF0dXJlKQ0KPiAJCXBtODAwMV9wcmludGsoIk1CSUMgLSBOTUkgRW5hYmxlIFZQ RTAgKElPUCk9IDB4JXhcbiIsIHJlZ1ZhbCkpOw0KPiAJcG04MDAxX2N3MzIocG04MDAxX2hhLCAy LCBNQklDX05NSV9FTkFCTEVfVlBFMF9JT1AsIDB4MCk7DQo+IAkvKiBtYXAgMHg3MDAwMCB0byBC QVI0KDB4MjApLCBCQVIyKHdpbikgKi8NCj4tCWlmICgtMSA9PSBiYXI0X3NoaWZ0KHBtODAwMV9o YSwgTUJJQ19JT1BfQUREUl9CQVNFKSkgew0KPisJaWYgKC0xID09IHBtODAwMV9iYXI0X3NoaWZ0 KHBtODAwMV9oYSwgTUJJQ19JT1BfQUREUl9CQVNFKSkgew0KPisJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPiAJCVBNODAwMV9GQUlMX0RCRyhwbTgw MDFfaGEsDQo+IAkJCXBtODAwMV9wcmludGsoIlNoaWZ0IEJhcjQgdG8gMHgleCBmYWlsZWRcbiIs DQo+IAkJCU1CSUNfSU9QX0FERFJfQkFTRSkpOw0KPkBAIC03OTYsNyArODE5LDggQEAgcG04MDAx X2NoaXBfc29mdF9yc3Qoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB1MzIgc2ln bmF0dXJlKQ0KPiANCj4gCS8qIHJlYWQgcmVxdWlyZWQgcmVnaXN0ZXJzIGZvciBjb25maXJtbWlu ZyAqLw0KPiAJLyogbWFwIDB4MDcwMDAwMCB0byBCQVI0KDB4MjApLCBCQVIyKHdpbikgKi8NCj4t CWlmICgtMSA9PSBiYXI0X3NoaWZ0KHBtODAwMV9oYSwgR1NNX0FERFJfQkFTRSkpIHsNCj4rCWlm ICgtMSA9PSBwbTgwMDFfYmFyNF9zaGlmdChwbTgwMDFfaGEsIEdTTV9BRERSX0JBU0UpKSB7DQo+ KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJ UE04MDAxX0ZBSUxfREJHKHBtODAwMV9oYSwNCj4gCQkJcG04MDAxX3ByaW50aygiU2hpZnQgQmFy NCB0byAweCV4IGZhaWxlZFxuIiwNCj4gCQkJR1NNX0FERFJfQkFTRSkpOw0KPkBAIC04NjIsNyAr ODg2LDggQEAgcG04MDAxX2NoaXBfc29mdF9yc3Qoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04 MDAxX2hhLCB1MzIgc2lnbmF0dXJlKQ0KPiAJLyogc3RlcCA1OiBkZWxheSAxMCB1c2VjICovDQo+ IAl1ZGVsYXkoMTApOw0KPiAJLyogc3RlcCA1LWI6IHNldCBHUElPLTAgb3V0cHV0IGNvbnRyb2wg dG8gdHJpc3RhdGUgYW55d2F5ICovDQo+LQlpZiAoLTEgPT0gYmFyNF9zaGlmdChwbTgwMDFfaGEs IEdQSU9fQUREUl9CQVNFKSkgew0KPisJaWYgKC0xID09IHBtODAwMV9iYXI0X3NoaWZ0KHBtODAw MV9oYSwgR1BJT19BRERSX0JBU0UpKSB7DQo+KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04 MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJUE04MDAxX0lOSVRfREJHKHBtODAwMV9oYSwNCj4g CQkJCXBtODAwMV9wcmludGsoIlNoaWZ0IEJhcjQgdG8gMHgleCBmYWlsZWRcbiIsDQo+IAkJCQlH UElPX0FERFJfQkFTRSkpOw0KPkBAIC04NzgsNyArOTAzLDggQEAgcG04MDAxX2NoaXBfc29mdF9y c3Qoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB1MzIgc2lnbmF0dXJlKQ0KPiAN Cj4gCS8qIFN0ZXAgNjogUmVzZXQgdGhlIElPUCBhbmQgQUFQMSAqLw0KPiAJLyogbWFwIDB4MDAw MDAgdG8gQkFSNCgweDIwKSwgQkFSMih3aW4pICovDQo+LQlpZiAoLTEgPT0gYmFyNF9zaGlmdChw bTgwMDFfaGEsIFNQQ19UT1BfTEVWRUxfQUREUl9CQVNFKSkgew0KPisJaWYgKC0xID09IHBtODAw MV9iYXI0X3NoaWZ0KHBtODAwMV9oYSwgU1BDX1RPUF9MRVZFTF9BRERSX0JBU0UpKSB7DQo+KwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJUE04 MDAxX0ZBSUxfREJHKHBtODAwMV9oYSwNCj4gCQkJcG04MDAxX3ByaW50aygiU1BDIFNoaWZ0IEJh cjQgdG8gMHgleCBmYWlsZWRcbiIsDQo+IAkJCVNQQ19UT1BfTEVWRUxfQUREUl9CQVNFKSk7DQo+ QEAgLTkxNSw3ICs5NDEsOCBAQCBwbTgwMDFfY2hpcF9zb2Z0X3JzdChzdHJ1Y3QgcG04MDAxX2hi YV9pbmZvICpwbTgwMDFfaGEsIHUzMiBzaWduYXR1cmUpDQo+IA0KPiAJLyogc3RlcCAxMTogcmVh ZHMgYW5kIHNldHMgdGhlIEdTTSBDb25maWd1cmF0aW9uIGFuZCBSZXNldCBSZWdpc3RlciAqLw0K PiAJLyogbWFwIDB4MDcwMDAwMCB0byBCQVI0KDB4MjApLCBCQVIyKHdpbikgKi8NCj4tCWlmICgt MSA9PSBiYXI0X3NoaWZ0KHBtODAwMV9oYSwgR1NNX0FERFJfQkFTRSkpIHsNCj4rCWlmICgtMSA9 PSBwbTgwMDFfYmFyNF9zaGlmdChwbTgwMDFfaGEsIEdTTV9BRERSX0JBU0UpKSB7DQo+KwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJUE04MDAx X0ZBSUxfREJHKHBtODAwMV9oYSwNCj4gCQkJcG04MDAxX3ByaW50aygiU1BDIFNoaWZ0IEJhcjQg dG8gMHgleCBmYWlsZWRcbiIsDQo+IAkJCUdTTV9BRERSX0JBU0UpKTsNCj5AQCAtOTY4LDcgKzk5 NSw4IEBAIHBtODAwMV9jaGlwX3NvZnRfcnN0KHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAw MV9oYSwgdTMyIHNpZ25hdHVyZSkNCj4gDQo+IAkvKiBzdGVwIDEzOiBicmluZyB0aGUgSU9QIGFu ZCBBQVAxIG91dCBvZiByZXNldCAqLw0KPiAJLyogbWFwIDB4MDAwMDAgdG8gQkFSNCgweDIwKSwg QkFSMih3aW4pICovDQo+LQlpZiAoLTEgPT0gYmFyNF9zaGlmdChwbTgwMDFfaGEsIFNQQ19UT1Bf TEVWRUxfQUREUl9CQVNFKSkgew0KPisJaWYgKC0xID09IHBtODAwMV9iYXI0X3NoaWZ0KHBtODAw MV9oYSwgU1BDX1RPUF9MRVZFTF9BRERSX0JBU0UpKSB7DQo+KwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJUE04MDAxX0ZBSUxfREJHKHBtODAw MV9oYSwNCj4gCQkJcG04MDAxX3ByaW50aygiU2hpZnQgQmFyNCB0byAweCV4IGZhaWxlZFxuIiwN Cj4gCQkJU1BDX1RPUF9MRVZFTF9BRERSX0JBU0UpKTsNCj5AQCAtMTAxMCw2ICsxMDM4LDcgQEAg cG04MDAxX2NoaXBfc29mdF9yc3Qoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB1 MzIgc2lnbmF0dXJlKQ0KPiAJCQkJcG04MDAxX3ByaW50aygiU0NSQVRDSF9QQUQzIHZhbHVlID0g MHgleFxuIiwNCj4gCQkJCXBtODAwMV9jcjMyKHBtODAwMV9oYSwgMCwNCj4gCQkJCU1TR1VfU0NS QVRDSF9QQURfMykpKTsNCj4rCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5s b2NrLCBmbGFncyk7DQo+IAkJCXJldHVybiAtMTsNCj4gCQl9DQo+IA0KPkBAIC0xMDM5LDkgKzEw NjgsMTIgQEAgcG04MDAxX2NoaXBfc29mdF9yc3Qoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04 MDAxX2hhLCB1MzIgc2lnbmF0dXJlKQ0KPiAJCQkJcG04MDAxX3ByaW50aygiU0NSQVRDSF9QQUQz IHZhbHVlID0gMHgleFxuIiwNCj4gCQkJCXBtODAwMV9jcjMyKHBtODAwMV9oYSwgMCwNCj4gCQkJ CU1TR1VfU0NSQVRDSF9QQURfMykpKTsNCj4rCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04 MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJCXJldHVybiAtMTsNCj4gCQl9DQo+IAl9DQo+Kwlw bTgwMDFfYmFyNF9zaGlmdChwbTgwMDFfaGEsIDApOw0KPisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IA0KPiAJUE04MDAxX0lOSVRfREJHKHBtODAw MV9oYSwNCj4gCQlwbTgwMDFfcHJpbnRrKCJTUEMgc29mdCByZXNldCBDb21wbGV0ZVxuIikpOw0K PkBAIC0xMTU3LDggKzExODksOCBAQCBwbTgwMDFfY2hpcF9tc2l4X2ludGVycnVwdF9kaXNhYmxl KHN0cnVjdCBwbTgwMDFfaGJhX2luZm8gKnBtODAwMV9oYSwNCj4gCW1zaV9pbmRleCA9IGludF92 ZWNfaWR4ICogTVNJWF9UQUJMRV9FTEVNRU5UX1NJWkU7DQo+IAltc2lfaW5kZXggKz0gTVNJWF9U QUJMRV9CQVNFOw0KPiAJcG04MDAxX2N3MzIocG04MDAxX2hhLCAwLCAgbXNpX2luZGV4LCBNU0lY X0lOVEVSUlVQVF9ESVNBQkxFKTsNCj4tDQo+IH0NCj4rDQo+IC8qKg0KPiAgKiBwbTgwMDFfY2hp cF9pbnRlcnJ1cHRfZW5hYmxlIC0gZW5hYmxlIFBNODAwMSBjaGlwIGludGVycnVwdA0KPiAgKiBA cG04MDAxX2hhOiBvdXIgaGJhIGNhcmQgaW5mb3JtYXRpb24NCj5kaWZmIC0tZ2l0IGEvZHJpdmVy cy9zY3NpL3BtODAwMS9wbTgwMDFfc2FzLmMgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9z YXMuYw0KPmluZGV4IGZiM2RjOTkuLjk1N2JkNmEgMTAwNjQ0DQo+LS0tIGEvZHJpdmVycy9zY3Np L3BtODAwMS9wbTgwMDFfc2FzLmMNCj4rKysgYi9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9z YXMuYw0KPkBAIC0xNjYsNiArMTY2LDcgQEAgaW50IHBtODAwMV9waHlfY29udHJvbChzdHJ1Y3Qg YXNkX3Nhc19waHkgKnNhc19waHksIGVudW0gcGh5X2Z1bmMgZnVuYywNCj4gCXN0cnVjdCBwbTgw MDFfaGJhX2luZm8gKnBtODAwMV9oYSA9IE5VTEw7DQo+IAlzdHJ1Y3Qgc2FzX3BoeV9saW5rcmF0 ZXMgKnJhdGVzOw0KPiAJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGlvbik7DQo+ Kwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiAJcG04MDAxX2hhID0gc2FzX3BoeS0+aGEtPmxsZGRf aGE7DQo+IAlwbTgwMDFfaGEtPnBoeVtwaHlfaWRdLmVuYWJsZV9jb21wbGV0aW9uID0gJmNvbXBs ZXRpb247DQo+IAlzd2l0Y2ggKGZ1bmMpIHsNCj5AQCAtMTg4LDcgKzE4OSw5IEBAIGludCBwbTgw MDFfcGh5X2NvbnRyb2woc3RydWN0IGFzZF9zYXNfcGh5ICpzYXNfcGh5LCBlbnVtIHBoeV9mdW5j IGZ1bmMsDQo+IAkJYnJlYWs7DQo+IAljYXNlIFBIWV9GVU5DX0hBUkRfUkVTRVQ6DQo+IAkJaWYg KHBtODAwMV9oYS0+cGh5W3BoeV9pZF0ucGh5X3N0YXRlID09IDApIHsNCj4rCQkJc3Bpbl9sb2Nr X2lycXNhdmUoJnBtODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPiAJCQlQTTgwMDFfQ0hJUF9ESVNQ LT5waHlfc3RhcnRfcmVxKHBtODAwMV9oYSwgcGh5X2lkKTsNCj4rCQkJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJCXdhaXRfZm9yX2NvbXBsZXRp b24oJmNvbXBsZXRpb24pOw0KPiAJCX0NCj4gCQlQTTgwMDFfQ0hJUF9ESVNQLT5waHlfY3RsX3Jl cShwbTgwMDFfaGEsIHBoeV9pZCwNCj5AQCAtMTk2LDIxICsxOTksNTAgQEAgaW50IHBtODAwMV9w aHlfY29udHJvbChzdHJ1Y3QgYXNkX3Nhc19waHkgKnNhc19waHksIGVudW0gcGh5X2Z1bmMgZnVu YywNCj4gCQlicmVhazsNCj4gCWNhc2UgUEhZX0ZVTkNfTElOS19SRVNFVDoNCj4gCQlpZiAocG04 MDAxX2hhLT5waHlbcGh5X2lkXS5waHlfc3RhdGUgPT0gMCkgew0KPisJCQlzcGluX2xvY2tfaXJx c2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJCVBNODAwMV9DSElQX0RJU1AtPnBo eV9zdGFydF9yZXEocG04MDAxX2hhLCBwaHlfaWQpOw0KPisJCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4gCQkJd2FpdF9mb3JfY29tcGxldGlvbigm Y29tcGxldGlvbik7DQo+IAkJfQ0KPisJCXNwaW5fbG9ja19pcnFzYXZlKCZwbTgwMDFfaGEtPmxv Y2ssIGZsYWdzKTsNCj4gCQlQTTgwMDFfQ0hJUF9ESVNQLT5waHlfY3RsX3JlcShwbTgwMDFfaGEs IHBoeV9pZCwNCj4gCQkJCQkgICAgICBQSFlfTElOS19SRVNFVCk7DQo+KwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJYnJlYWs7DQo+IAljYXNl IFBIWV9GVU5DX1JFTEVBU0VfU1BJTlVQX0hPTEQ6DQo+KwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBt ODAwMV9oYS0+bG9jaywgZmxhZ3MpOw0KPiAJCVBNODAwMV9DSElQX0RJU1AtPnBoeV9jdGxfcmVx KHBtODAwMV9oYSwgcGh5X2lkLA0KPiAJCQkJCSAgICAgIFBIWV9MSU5LX1JFU0VUKTsNCj4rCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFfaGEtPmxvY2ssIGZsYWdzKTsNCj4gCQlicmVh azsNCj4gCWNhc2UgUEhZX0ZVTkNfRElTQUJMRToNCj4rCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04 MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+IAkJUE04MDAxX0NISVBfRElTUC0+cGh5X3N0b3BfcmVx KHBtODAwMV9oYSwgcGh5X2lkKTsNCj4rCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbTgwMDFf aGEtPmxvY2ssIGZsYWdzKTsNCj4gCQlicmVhazsNCj4rCWNhc2UgUEhZX0ZVTkNfR0VUX0VWRU5U UzoNCj4rCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+KwkJ aWYgKC0xID09IHBtODAwMV9iYXI0X3NoaWZ0KHBtODAwMV9oYSwNCj4rCQkJCQkocGh5X2lkIDwg NCkgPyAweDMwMDAwIDogMHg0MDAwMCkpIHsNCj4rCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm cG04MDAxX2hhLT5sb2NrLCBmbGFncyk7DQo+KwkJCXJldHVybiAtRUlOVkFMOw0KPisJCX0NCj4r CQl7DQo+KwkJCXN0cnVjdCBzYXNfcGh5ICpwaHkgPSBzYXNfcGh5LT5waHk7DQo+KwkJCXVpbnQz Ml90ICpxcCA9ICh1aW50MzJfdCAqKSgoKGNoYXIgKikNCj4rCQkJCXBtODAwMV9oYS0+aW9fbWVt WzJdLm1lbXZpcnRhZGRyKQ0KPisJCQkJKyAweDEwMzQgKyAoMHg0MDAwICogKHBoeV9pZCAmIDMp KSk7DQo+Kw0KPisJCQlwaHktPmludmFsaWRfZHdvcmRfY291bnQgPSBxcFswXTsNCj4rCQkJcGh5 LT5ydW5uaW5nX2Rpc3Bhcml0eV9lcnJvcl9jb3VudCA9IHFwWzFdOw0KPisJCQlwaHktPmxvc3Nf b2ZfZHdvcmRfc3luY19jb3VudCA9IHFwWzNdOw0KPisJCQlwaHktPnBoeV9yZXNldF9wcm9ibGVt X2NvdW50ID0gcXBbNF07DQo+KwkJfQ0KPisJCXBtODAwMV9iYXI0X3NoaWZ0KHBtODAwMV9oYSwg MCk7DQo+KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG04MDAxX2hhLT5sb2NrLCBmbGFncyk7 DQo+KwkJcmV0dXJuIDA7DQo+IAlkZWZhdWx0Og0KPi0JCXJjID0gLUVOT1NZUzsNCj4rCQlyYyA9 IC1FT1BOT1RTVVBQOw0KPiAJfQ0KPiAJbXNsZWVwKDMwMCk7DQo+IAlyZXR1cm4gcmM7DQo+ZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oIGIvZHJpdmVycy9zY3Np L3BtODAwMS9wbTgwMDFfc2FzLmgNCj5pbmRleCA5Mzk1OWZlLi44M2E0OGYzIDEwMDY0NA0KPi0t LSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5oDQo+KysrIGIvZHJpdmVycy9zY3Np L3BtODAwMS9wbTgwMDFfc2FzLmgNCj5AQCAtNDg4LDYgKzQ4OCw3IEBAIGludCBwbTgwMDFfbWVt X2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB2b2lkICoqdmlydF9hZGRyLA0KPiAJZG1hX2Fk ZHJfdCAqcHBoeXNfYWRkciwgdTMyICpwcGh5c19hZGRyX2hpLCB1MzIgKnBwaHlzX2FkZHJfbG8s DQo+IAl1MzIgbWVtX3NpemUsIHUzMiBhbGlnbik7DQo+IA0KPitpbnQgcG04MDAxX2JhcjRfc2hp ZnQoc3RydWN0IHBtODAwMV9oYmFfaW5mbyAqcG04MDAxX2hhLCB1MzIgc2hpZnRWYWx1ZSk7DQo+ IA0KPiAvKiBjdGwgc2hhcmVkIEFQSSAqLw0KPiBleHRlcm4gc3RydWN0IGRldmljZV9hdHRyaWJ1 dGUgKnBtODAwMV9ob3N0X2F0dHJzW107DQo+DQo+X19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPlRoaXMgZW1haWwg bWF5IGNvbnRhaW4gcHJpdmlsZWdlZCBvciBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24sIHdoaWNo IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHRoZSBwdXJwb3NlIGZvciB3aGljaCBpdCB3YXMgc2Vu dCBieSBYeXJhdGV4LiBObyBmdXJ0aGVyIHJpZ2h0cyBvciBsaWNlbnNlcyBhcmUgZ3JhbnRlZCB0 byB1c2Ugc3VjaCBpbmZvcm1hdGlvbi4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lw aWVudCBvZiB0aGlzIG1lc3NhZ2UsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBieSByZXR1cm4g YW5kIGRlbGV0ZSBpdC4gWW91IG1heSBub3QgdXNlLCBjb3B5LCBkaXNjbG9zZSBvciByZWx5IG9u IHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gaXQuDQo+IA0KPkludGVybmV0IGVtYWlsIGlz IHN1c2NlcHRpYmxlIHRvIGRhdGEgY29ycnVwdGlvbiwgaW50ZXJjZXB0aW9uIGFuZCB1bmF1dGhv cmlzZWQgYW1lbmRtZW50IGZvciB3aGljaCBYeXJhdGV4IGRvZXMgbm90IGFjY2VwdCBsaWFiaWxp dHkuIFdoaWxlIHdlIGhhdmUgdGFrZW4gcmVhc29uYWJsZSBwcmVjYXV0aW9ucyB0byBlbnN1cmUg dGhhdCB0aGlzIGVtYWlsIGlzIGZyZWUgb2YgdmlydXNlcywgWHlyYXRleCBkb2VzIG5vdCBhY2Nl cHQgbGlhYmlsaXR5IGZvciB0aGUgcHJlc2VuY2Ugb2YgYW55IGNvbXB1dGVyIHZpcnVzZXMgaW4g dGhpcyBlbWFpbCwgbm9yIGZvciBhbnkgbG9zc2VzIGNhdXNlZCBhcyBhIHJlc3VsdCBvZiB2aXJ1 c2VzLg0KPiANCj5YeXJhdGV4IFRlY2hub2xvZ3kgTGltaXRlZCAoMDMxMzQ5MTIpLCBSZWdpc3Rl cmVkIGluIEVuZ2xhbmQgJiBXYWxlcywgUmVnaXN0ZXJlZCBPZmZpY2UsIExhbmdzdG9uZSBSb2Fk LCBIYXZhbnQsIEhhbXBzaGlyZSwgUE85IDFTQS4NCj4gDQo+VGhlIFh5cmF0ZXggZ3JvdXAgb2Yg Y29tcGFuaWVzIGFsc28gaW5jbHVkZXMsIFh5cmF0ZXggTHRkLCByZWdpc3RlcmVkIGluIEJlcm11 ZGEsIFh5cmF0ZXggSW50ZXJuYXRpb25hbCBJbmMsIHJlZ2lzdGVyZWQgaW4gQ2FsaWZvcm5pYSwg WHlyYXRleCAoTWFsYXlzaWEpIFNkbiBCaGQgcmVnaXN0ZXJlZCBpbiBNYWxheXNpYSwgWHlyYXRl eCBUZWNobm9sb2d5IChXdXhpKSBDbyBMdGQgcmVnaXN0ZXJlZCBpbiBUaGUgUGVvcGxlJ3MgUmVw dWJsaWMgb2YgQ2hpbmEgYW5kIFh5cmF0ZXggSmFwYW4gTGltaXRlZCByZWdpc3RlcmVkIGluIEph cGFuLg0KPl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18NCj4gDQo+DQo+DQo+X19fX19fX19fXyBJbmZvcm1hdGlvbiBm cm9tIEVTRVQgTk9EMzIgQW50aXZpcnVzLCB2ZXJzaW9uIG9mIHZpcnVzIHNpZ25hdHVyZSBkYXRh YmFzZSA1NjU5ICgyMDEwMTEyOSkgX19fX19fX19fXw0KPg0KPlRoZSBtZXNzYWdlIHdhcyBjaGVj a2VkIGJ5IEVTRVQgTk9EMzIgQW50aXZpcnVzLg0KPg0KPmh0dHA6Ly93d3cuZXNldC5jb20NCj4N Cj4NCj4=