From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from relay.sgi.com (relay2.corp.sgi.com [137.38.102.29]) by oss.sgi.com (Postfix) with ESMTP id B902D7F4C for ; Fri, 15 Feb 2013 15:20:19 -0600 (CST) Date: Fri, 15 Feb 2013 15:20:15 -0600 From: Ben Myers Subject: Re: [PATCH 2/9] xfs: add support for large btree blocks Message-ID: <20130215212015.GO22182@sgi.com> References: <1358774760-21841-1-git-send-email-david@fromorbit.com> <1358774760-21841-3-git-send-email-david@fromorbit.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <1358774760-21841-3-git-send-email-david@fromorbit.com> List-Id: XFS Filesystem from SGI List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xfs-bounces@oss.sgi.com Sender: xfs-bounces@oss.sgi.com To: Dave Chinner Cc: xfs@oss.sgi.com T24gVHVlLCBKYW4gMjIsIDIwMTMgYXQgMTI6MjU6NTNBTSArMTEwMCwgRGF2ZSBDaGlubmVyIHdy b3RlOgo+IEZyb206IENocmlzdG9waCBIZWxsd2lnIDxoY2hAbHN0LmRlPgo+IAo+IEFkZCBzdXBw b3J0IGZvciBsYXJnZXIgYnRyZWUgYmxvY2tzIHRoYXQgY29udGFpbnMgYSBDUkMzMkMgY2hlY2tz dW0sCj4gYSBmaWxlc3lzdGVtIHV1aWQgYW5kIGJsb2NrIG51bWJlciBmb3IgZGV0ZWN0aW5nIGZp bGVzeXN0ZW0KPiBjb25zaXN0ZW5jeSBhbmQgb3V0IG9mIHBsYWNlIHdyaXRlcy4KPiAKPiBbZGNo aW5uZXJAcmVkaGF0LmNvbV0gQWxzbyBpbmNsdWRlIGFuIG93bmVyIGZpZWxkIHRvIGFsbG93IHJl dmVyc2UKPiBtYXBwaW5ncyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgaW1wcm92ZWQgcmVwYWlyYWJp bGl0eSBhbmQgYSBMU04KPiBmaWVsZCB0byBzbyB0aGF0IGxvZyByZWNvdmVyeSBjYW4gZWFzaWx5 IGRldGVybWluZSB0aGUgbGFzdAo+IG1vZGlmaWNhdGlvbiB0aGF0IG1hZGUgaXQgdG8gZGlzayBm b3IgZWFjaCBidWZmZXIuCj4gCj4gW2RjaGlubmVyQHJlZGhhdC5jb21dIEFkZCBidWZmZXIgbG9n IGZvcm1hdCBmbGFncyB0byBpbmRpY2F0ZSB0aGUKPiB0eXBlIG9mIGJ1ZmZlciB0byByZWNvdmVy eSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZG8gYmxpbmQgbWFnaWMKPiBudW1iZXIgdGVzdHMg dG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGJ1ZmZlciBpcy4KPiAKPiBbZGNoaW5uZXJAcmVkaGF0LmNv bV0gTW9kaWZpZWQgdG8gZml0IGludG8gdGhlIHZlcmlmaWVyIHN0cnVjdHVyZS4KClRoaXMgcGF0 Y2ggaXMgZmFyIHRvbyBsYXJnZSBmb3IgYSBnb29kIHJldmlldy4gIEl0IG5lZWRzIHRvIGJlIHNw bGl0IHVwIGludG8KaXQncyB2YXJpb3VzIGlkZWFzIHdoaWNoIHlvdSBvdXRsaW5lZCBpbiBwYXRj aCAwLiAgSWYgeW91IG5lZWQgdG8gYWRkIGRlYWQgY29kZQppbiBlYWNoIHBpZWNlIGFuZCB0aGVu IGVuYWJsZSBpdCBhdCB0aGUgZW5kLCB0aGF0J3MgZmluZSB3aXRoIG1lLgoKU29tZSBjb21tZW50 cyBiZWxvdy4KCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEhlbGx3aWcgPGhjaEBsc3QuZGU+ Cj4gU2lnbmVkLW9mZi1ieTogRGF2ZSBDaGlubmVyIDxkY2hpbm5lckByZWRoYXQuY29tPgo+IC0t LQo+ICBmcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMgIHwgIDEwNSArKysrKysrKysrKysrLS0tLS0t Cj4gIGZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuaCAgfCAgIDEyICsrLQo+ICBmcy94ZnMveGZzX2F0 dHJfbGVhZi5jICAgIHwgICAgMiArLQo+ICBmcy94ZnMveGZzX2JtYXAuYyAgICAgICAgIHwgICA0 MiArKysrKy0tLQo+ICBmcy94ZnMveGZzX2JtYXBfYnRyZWUuYyAgIHwgIDExMCArKysrKysrKysr KysrLS0tLS0tCj4gIGZzL3hmcy94ZnNfYm1hcF9idHJlZS5oICAgfCAgIDE5ICsrLS0KPiAgZnMv eGZzL3hmc19idHJlZS5jICAgICAgICB8ICAyNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKy0tLS0tLS0tCj4gIGZzL3hmcy94ZnNfYnRyZWUuaCAgICAgICAgfCAgIDY0ICsr KysrKysrKystLQo+ICBmcy94ZnMveGZzX2J1Zl9pdGVtLmggICAgIHwgICAyNCArKysrLQo+ICBm cy94ZnMveGZzX2Rpbm9kZS5oICAgICAgIHwgICAgNCArLQo+ICBmcy94ZnMveGZzX2Zzb3BzLmMg ICAgICAgIHwgICAyMyArKystCj4gIGZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmMgfCAgIDg3ICsr KysrKysrKystLS0tLQo+ICBmcy94ZnMveGZzX2lhbGxvY19idHJlZS5oIHwgICAgOSArLQo+ICBm cy94ZnMveGZzX2lub2RlLmMgICAgICAgIHwgICAzMyArKystLS0KPiAgZnMveGZzL3hmc19sb2df cmVjb3Zlci5jICB8ICAgMjggKysrKysKPiAgZnMveGZzL3hmc190cmFucy5oICAgICAgICB8ICAg IDIgKwo+ICBmcy94ZnMveGZzX3RyYW5zX2J1Zi5jICAgIHwgICAyOSArKystLQo+ICAxNyBmaWxl cyBjaGFuZ2VkLCA2NDMgaW5zZXJ0aW9ucygrKSwgMjA2IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYg LS1naXQgYS9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMgYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVl LmMKPiBpbmRleCBiMWRkZWY2Li4zMGM0YzE0IDEwMDY0NAo+IC0tLSBhL2ZzL3hmcy94ZnNfYWxs b2NfYnRyZWUuYwo+ICsrKyBiL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYwo+IEBAIC0zMyw2ICsz Myw3IEBACj4gICNpbmNsdWRlICJ4ZnNfZXh0ZW50X2J1c3kuaCIKPiAgI2luY2x1ZGUgInhmc19l cnJvci5oIgo+ICAjaW5jbHVkZSAieGZzX3RyYWNlLmgiCj4gKyNpbmNsdWRlICJ4ZnNfY2tzdW0u aCIKPiAgCj4gIAo+ICBTVEFUSUMgc3RydWN0IHhmc19idHJlZV9jdXIgKgo+IEBAIC0yNzIsNyAr MjczLDcgQEAgeGZzX2FsbG9jYnRfa2V5X2RpZmYoCj4gIAlyZXR1cm4gKF9faW50NjRfdCliZTMy X3RvX2NwdShrcC0+YXJfc3RhcnRibG9jaykgLSByZWMtPmFyX3N0YXJ0YmxvY2s7Cj4gIH0KPiAg Cj4gLXN0YXRpYyB2b2lkCj4gK3N0YXRpYyBib29sCj4gIHhmc19hbGxvY2J0X3ZlcmlmeSgKPiAg CXN0cnVjdCB4ZnNfYnVmCQkqYnApCj4gIHsKPiBAQCAtMjgwLDY2ICsyODEsMTAzIEBAIHhmc19h bGxvY2J0X3ZlcmlmeSgKPiAgCXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sJKmJsb2NrID0gWEZTX0JV Rl9UT19CTE9DSyhicCk7Cj4gIAlzdHJ1Y3QgeGZzX3BlcmFnCSpwYWcgPSBicC0+Yl9wYWc7Cj4g IAl1bnNpZ25lZCBpbnQJCWxldmVsOwo+IC0JaW50CQkJc2Jsb2NrX29rOyAvKiBibG9jayBwYXNz ZXMgY2hlY2tzICovCj4gIAo+ICAJLyoKPiAgCSAqIG1hZ2ljIG51bWJlciBhbmQgbGV2ZWwgdmVy aWZpY2F0aW9uCj4gIAkgKgo+IC0JICogRHVyaW5nIGdyb3dmcyBvcGVyYXRpb25zLCB3ZSBjYW4n dCB2ZXJpZnkgdGhlIGV4YWN0IGxldmVsIGFzIHRoZQo+IC0JICogcGVyYWcgaXMgbm90IGZ1bGx5 IGluaXRpYWxpc2VkIGFuZCBoZW5jZSBub3QgYXR0YWNoZWQgdG8gdGhlIGJ1ZmZlci4KPiAtCSAq IEluIHRoaXMgY2FzZSwgY2hlY2sgYWdhaW5zdCB0aGUgbWF4aW11bSB0cmVlIGRlcHRoLgo+ICsJ ICogRHVyaW5nIGdyb3dmcyBvcGVyYXRpb25zLCB3ZSBjYW4ndCB2ZXJpZnkgdGhlIGV4YWN0IGxl dmVsIG9yIG93bmVyIGFzCj4gKwkgKiB0aGUgcGVyYWcgaXMgbm90IGZ1bGx5IGluaXRpYWxpc2Vk IGFuZCBoZW5jZSBub3QgYXR0YWNoZWQgdG8gdGhlCj4gKwkgKiBidWZmZXIuICBJbiB0aGlzIGNh c2UsIGNoZWNrIGFnYWluc3QgdGhlIG1heGltdW0gdHJlZSBkZXB0aC4KPiArCSAqCj4gKwkgKiBT aW1pbGFybHksIGR1cmluZyBsb2cgcmVjb3Zlcnkgd2Ugd2lsbCBoYXZlIGEgcGVyYWcgc3RydWN0 dXJlCj4gKwkgKiBhdHRhY2hlZCwgYnV0IHRoZSBhZ2YgaW5mb3JtYXRpb24gd2lsbCBub3QgeWV0 IGhhdmUgYmVlbiBpbml0aWFsaXNlZAo+ICsJICogZnJvbSB0aGUgb24gZGlzayBBR0YuIEFnYWlu LCB3ZSBjYW4gb25seSBjaGVjayBhZ2FpbnN0IG1heGltdW0gbGltaXRzCj4gKwkgKiBpbiB0aGlz IGNhc2UuCj4gIAkgKi8KPiAgCWxldmVsID0gYmUxNl90b19jcHUoYmxvY2stPmJiX2xldmVsKTsK PiAgCXN3aXRjaCAoYmxvY2stPmJiX21hZ2ljKSB7Cj4gKwljYXNlIGNwdV90b19iZTMyKFhGU19B QlRCX0NSQ19NQUdJQyk6Cj4gKwkJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNjcmMoJm1wLT5tX3Ni KSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCWlmICghdXVpZF9lcXVhbCgmYmxvY2stPmJiX3Uu cy5iYl91dWlkLCAmbXAtPm1fc2Iuc2JfdXVpZCkpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQlp ZiAoYmxvY2stPmJiX3Uucy5iYl9ibGtubyAhPSBjcHVfdG9fYmU2NChicC0+Yl9ibikpCj4gKwkJ CXJldHVybiBmYWxzZTsKPiArCQlpZiAocGFnICYmCj4gKwkJICAgIGJlMzJfdG9fY3B1KGJsb2Nr LT5iYl91LnMuYmJfb3duZXIpICE9IHBhZy0+cGFnX2Fnbm8pCj4gKwkJCXJldHVybiBmYWxzZTsK PiArCQkvKiBmYWxsIHRocm91Z2ggKi8KPiAgCWNhc2UgY3B1X3RvX2JlMzIoWEZTX0FCVEJfTUFH SUMpOgo+IC0JCWlmIChwYWcpCj4gLQkJCXNibG9ja19vayA9IGxldmVsIDwgcGFnLT5wYWdmX2xl dmVsc1tYRlNfQlROVU1fQk5PaV07Cj4gLQkJZWxzZQo+IC0JCQlzYmxvY2tfb2sgPSBsZXZlbCA8 IG1wLT5tX2FnX21heGxldmVsczsKPiArCQlpZiAocGFnICYmIHBhZy0+cGFnZl9pbml0KSB7Cj4g KwkJCWlmIChsZXZlbCA+PSBwYWctPnBhZ2ZfbGV2ZWxzW1hGU19CVE5VTV9CTk9pXSkKPiArCQkJ CXJldHVybiBmYWxzZTsKPiArCQl9IGVsc2UgaWYgKGxldmVsID49IG1wLT5tX2FnX21heGxldmVs cykKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICAJCWJyZWFrOwo+ICsJY2FzZSBjcHVfdG9fYmUzMihY RlNfQUJUQ19DUkNfTUFHSUMpOgo+ICsJCWlmICgheGZzX3NiX3ZlcnNpb25faGFzY3JjKCZtcC0+ bV9zYikpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQlpZiAoIXV1aWRfZXF1YWwoJmJsb2NrLT5i Yl91LnMuYmJfdXVpZCwgJm1wLT5tX3NiLnNiX3V1aWQpKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4g KwkJaWYgKGJsb2NrLT5iYl91LnMuYmJfYmxrbm8gIT0gY3B1X3RvX2JlNjQoYnAtPmJfYm4pKQo+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJaWYgKHBhZyAmJgo+ICsJCSAgICBiZTMyX3RvX2NwdShi bG9jay0+YmJfdS5zLmJiX293bmVyKSAhPSBwYWctPnBhZ19hZ25vKQo+ICsJCQlyZXR1cm4gZmFs c2U7Cj4gKwkJLyogZmFsbCB0aHJvdWdoICovCj4gIAljYXNlIGNwdV90b19iZTMyKFhGU19BQlRD X01BR0lDKToKPiAtCQlpZiAocGFnKQo+IC0JCQlzYmxvY2tfb2sgPSBsZXZlbCA8IHBhZy0+cGFn Zl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldOwo+IC0JCWVsc2UKPiAtCQkJc2Jsb2NrX29rID0gbGV2 ZWwgPCBtcC0+bV9hZ19tYXhsZXZlbHM7Cj4gKwkJaWYgKHBhZyAmJiBwYWctPnBhZ2ZfaW5pdCkg ewo+ICsJCQlpZiAobGV2ZWwgPj0gcGFnLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0pCj4g KwkJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfSBlbHNlIGlmIChsZXZlbCA+PSBtcC0+bV9hZ19tYXhs ZXZlbHMpCj4gKwkJCXJldHVybiBmYWxzZTsKPiAgCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gLQkJ c2Jsb2NrX29rID0gMDsKPiAtCQlicmVhazsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAl9Cj4gIAo+ ICAJLyogbnVtcmVjcyB2ZXJpZmljYXRpb24gKi8KPiAtCXNibG9ja19vayA9IHNibG9ja19vayAm Jgo+IC0JCWJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSA8PSBtcC0+bV9hbGxvY19teHJb bGV2ZWwgIT0gMF07Cj4gKwlpZiAoYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpID4gbXAt Pm1fYWxsb2NfbXhyW2xldmVsICE9IDBdKQo+ICsJCXJldHVybiBmYWxzZTsKPiAgCj4gIAkvKiBz aWJsaW5nIHBvaW50ZXIgdmVyaWZpY2F0aW9uICovCj4gLQlzYmxvY2tfb2sgPSBzYmxvY2tfb2sg JiYKPiAtCQkoYmxvY2stPmJiX3Uucy5iYl9sZWZ0c2liID09IGNwdV90b19iZTMyKE5VTExBR0JM T0NLKSB8fAo+IC0JCSBiZTMyX3RvX2NwdShibG9jay0+YmJfdS5zLmJiX2xlZnRzaWIpIDwgbXAt Pm1fc2Iuc2JfYWdibG9ja3MpICYmCj4gLQkJYmxvY2stPmJiX3Uucy5iYl9sZWZ0c2liICYmCj4g LQkJKGJsb2NrLT5iYl91LnMuYmJfcmlnaHRzaWIgPT0gY3B1X3RvX2JlMzIoTlVMTEFHQkxPQ0sp IHx8Cj4gLQkJIGJlMzJfdG9fY3B1KGJsb2NrLT5iYl91LnMuYmJfcmlnaHRzaWIpIDwgbXAtPm1f c2Iuc2JfYWdibG9ja3MpICYmCj4gLQkJYmxvY2stPmJiX3Uucy5iYl9yaWdodHNpYjsKPiAtCj4g LQlpZiAoIXNibG9ja19vaykgewo+IC0JCXRyYWNlX3hmc19idHJlZV9jb3JydXB0KGJwLCBfUkVU X0lQXyk7Cj4gLQkJWEZTX0NPUlJVUFRJT05fRVJST1IoX19mdW5jX18sIFhGU19FUlJMRVZFTF9M T1csIG1wLCBibG9jayk7Cj4gLQkJeGZzX2J1Zl9pb2Vycm9yKGJwLCBFRlNDT1JSVVBURUQpOwo+ IC0JfQo+ICsJaWYgKCFibG9jay0+YmJfdS5zLmJiX2xlZnRzaWIgfHwKPiArCSAgICAoYmUzMl90 b19jcHUoYmxvY2stPmJiX3Uucy5iYl9sZWZ0c2liKSA+PSBtcC0+bV9zYi5zYl9hZ2Jsb2NrcyAm Jgo+ICsJICAgICBibG9jay0+YmJfdS5zLmJiX2xlZnRzaWIgIT0gY3B1X3RvX2JlMzIoTlVMTEFH QkxPQ0spKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwlpZiAoIWJsb2NrLT5iYl91LnMuYmJfcmln aHRzaWIgfHwKPiArCSAgICAoYmUzMl90b19jcHUoYmxvY2stPmJiX3Uucy5iYl9yaWdodHNpYikg Pj0gbXAtPm1fc2Iuc2JfYWdibG9ja3MgJiYKPiArCSAgICAgYmxvY2stPmJiX3Uucy5iYl9yaWdo dHNpYiAhPSBjcHVfdG9fYmUzMihOVUxMQUdCTE9DSykpKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwlyZXR1cm4gdHJ1ZTsKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQKPiAgeGZzX2FsbG9jYnRf cmVhZF92ZXJpZnkoCj4gIAlzdHJ1Y3QgeGZzX2J1ZgkqYnApCj4gIHsKPiAtCXhmc19hbGxvY2J0 X3ZlcmlmeShicCk7Cj4gKwlpZiAoISh4ZnNfYnRyZWVfc2Jsb2NrX3ZlcmlmeV9jcmMoYnApICYm Cj4gKwkgICAgICB4ZnNfYWxsb2NidF92ZXJpZnkoYnApKSkgewo+ICsJCXRyYWNlX3hmc19idHJl ZV9jb3JydXB0KGJwLCBfUkVUX0lQXyk7Cj4gKwkJWEZTX0NPUlJVUFRJT05fRVJST1IoX19mdW5j X18sIFhGU19FUlJMRVZFTF9MT1csCj4gKwkJCQkgICAgIGJwLT5iX3RhcmdldC0+YnRfbW91bnQs IGJwLT5iX2FkZHIpOwo+ICsJCXhmc19idWZfaW9lcnJvcihicCwgRUZTQ09SUlVQVEVEKTsKPiAr CX0KPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQKPiAgeGZzX2FsbG9jYnRfd3JpdGVfdmVyaWZ5KAo+ ICAJc3RydWN0IHhmc19idWYJKmJwKQo+ICB7Cj4gLQl4ZnNfYWxsb2NidF92ZXJpZnkoYnApOwo+ ICsJaWYgKCF4ZnNfYWxsb2NidF92ZXJpZnkoYnApKSB7Cj4gKwkJdHJhY2VfeGZzX2J0cmVlX2Nv cnJ1cHQoYnAsIF9SRVRfSVBfKTsKPiArCQlYRlNfQ09SUlVQVElPTl9FUlJPUihfX2Z1bmNfXywg WEZTX0VSUkxFVkVMX0xPVywKPiArCQkJCSAgICAgYnAtPmJfdGFyZ2V0LT5idF9tb3VudCwgYnAt PmJfYWRkcik7Cj4gKwkJeGZzX2J1Zl9pb2Vycm9yKGJwLCBFRlNDT1JSVVBURUQpOwo+ICsJfQo+ ICsJeGZzX2J0cmVlX3NibG9ja19jYWxjX2NyYyhicCk7Cj4gKwo+ICB9Cj4gIAo+ICBjb25zdCBz dHJ1Y3QgeGZzX2J1Zl9vcHMgeGZzX2FsbG9jYnRfYnVmX29wcyA9IHsKPiBAQCAtNDQ0LDYgKzQ4 Miw5IEBAIHhmc19hbGxvY2J0X2luaXRfY3Vyc29yKAo+ICAJY3VyLT5iY19wcml2YXRlLmEuYWdi cCA9IGFnYnA7Cj4gIAljdXItPmJjX3ByaXZhdGUuYS5hZ25vID0gYWdubzsKPiAgCj4gKwlpZiAo eGZzX3NiX3ZlcnNpb25faGFzY3JjKCZtcC0+bV9zYikpCj4gKwkJY3VyLT5iY19mbGFncyB8PSBY RlNfQlRSRUVfQ1JDX0JMT0NLUzsKPiArCj4gIAlyZXR1cm4gY3VyOwo+ICB9Cj4gIAo+IGRpZmYg LS1naXQgYS9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmggYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVl LmgKPiBpbmRleCA3ZTg5YTJiLi4wODc0NjViIDEwMDY0NAo+IC0tLSBhL2ZzL3hmcy94ZnNfYWxs b2NfYnRyZWUuaAo+ICsrKyBiL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuaAo+IEBAIC0zMSw4ICsz MSwxMCBAQCBzdHJ1Y3QgeGZzX21vdW50Owo+ICAgKiBieSBibG9ja2NvdW50IGFuZCBibG9ja25v LiAgQWxsIGJsb2NrcyBsb29rIHRoZSBzYW1lIHRvIG1ha2UgdGhlIGNvZGUKPiAgICogc2ltcGxl cjsgaWYgd2UgaGF2ZSB0aW1lIGxhdGVyLCB3ZSdsbCBtYWtlIHRoZSBvcHRpbWl6YXRpb25zLgo+ ICAgKi8KPiAtI2RlZmluZQlYRlNfQUJUQl9NQUdJQwkweDQxNDI1NDQyCS8qICdBQlRCJyBmb3Ig Ym5vIHRyZWUgKi8KPiAtI2RlZmluZQlYRlNfQUJUQ19NQUdJQwkweDQxNDI1NDQzCS8qICdBQlRD JyBmb3IgY250IHRyZWUgKi8KPiArI2RlZmluZQlYRlNfQUJUQl9NQUdJQwkJMHg0MTQyNTQ0Mgkv KiAnQUJUQicgZm9yIGJubyB0cmVlICovCj4gKyNkZWZpbmUJWEZTX0FCVEJfQ1JDX01BR0lDCTB4 NDE0MjU0NGEKPiArI2RlZmluZQlYRlNfQUJUQ19NQUdJQwkJMHg0MTQyNTQ0MwkvKiAnQUJUQycg Zm9yIGNudCB0cmVlICovCj4gKyNkZWZpbmUJWEZTX0FCVENfQ1JDX01BR0lDCTB4NDE0MjU0NGIK Ci8qICdBVEI/JyAqLwoKQWRkIGNvbW1lbnQuCgo+ICAvKgo+ICAgKiBEYXRhIHJlY29yZC9rZXkg c3RydWN0dXJlCj4gQEAgLTU5LDEwICs2MSwxMCBAQCB0eXBlZGVmIF9fYmUzMiB4ZnNfYWxsb2Nf cHRyX3Q7Cj4gIAo+ICAvKgo+ICAgKiBCdHJlZSBibG9jayBoZWFkZXIgc2l6ZSBkZXBlbmRzIG9u IGEgc3VwZXJibG9jayBmbGFnLgo+IC0gKgo+IC0gKiAobm90IHF1aXRlIHlldCwgYnV0IHNvb24p Cj4gICAqLwo+IC0jZGVmaW5lIFhGU19BTExPQ19CTE9DS19MRU4obXApCVhGU19CVFJFRV9TQkxP Q0tfTEVOCj4gKyNkZWZpbmUgWEZTX0FMTE9DX0JMT0NLX0xFTihtcCkgXAo+ICsJKHhmc19zYl92 ZXJzaW9uX2hhc2NyYygmKChtcCktPm1fc2IpKSA/IFwKPiArCQlYRlNfQlRSRUVfU0JMT0NLX0NS Q19MRU4gOiBYRlNfQlRSRUVfU0JMT0NLX0xFTikKClRoZSBhbGxvY2J0IGNoYW5nZXMgc2VlbSB0 byBiZSBhIGdvb2QgZml0IGZvciB0aGVpciBvd24gcGF0Y2guCgo+ICAKPiAgLyoKPiAgICogUmVj b3JkLCBrZXksIGFuZCBwb2ludGVyIGFkZHJlc3MgbWFjcm9zIGZvciBidHJlZSBibG9ja3MuCj4g ZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMgYi9mcy94ZnMveGZzX2F0dHJfbGVh Zi5jCj4gaW5kZXggZjk2YTczNC4uYWE0NzY1ZiAxMDA2NDQKPiAtLS0gYS9mcy94ZnMveGZzX2F0 dHJfbGVhZi5jCj4gKysrIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwo+IEBAIC0yMzIsNyArMjMy LDcgQEAgeGZzX2F0dHJfc2hvcnRmb3JtX2J5dGVzZml0KHhmc19pbm9kZV90ICpkcCwgaW50IGJ5 dGVzKQo+ICAJCQkJcmV0dXJuIDA7Cj4gIAkJCXJldHVybiBkcC0+aV9kLmRpX2ZvcmtvZmY7Cj4g IAkJfQo+IC0JCWRzaXplID0gWEZTX0JNQVBfQlJPT1RfU1BBQ0UoZHAtPmlfZGYuaWZfYnJvb3Qp Owo+ICsJCWRzaXplID0gWEZTX0JNQVBfQlJPT1RfU1BBQ0UobXAsIGRwLT5pX2RmLmlmX2Jyb290 KTsKCkNoYW5nZXMgdG8gWEZTX0JNQVBfQlJPT1RfU1BBQ0UgYXJlIGEgZ29vZCBjYW5kaWRhdGUg Zm9yIGEgc2VwYXJhdGUgcGF0Y2gsIGp1c3QKYXMgd2l0aCBMSVRJTk8uCgo+ICAJCWJyZWFrOwo+ ICAJfQo+ICAKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2Jt YXAuYwo+IGluZGV4IGYzMzgwMTIuLjgyMWY1OTkgMTAwNjQ0Cj4gLS0tIGEvZnMveGZzL3hmc19i bWFwLmMKPiArKysgYi9mcy94ZnMveGZzX2JtYXAuYwo+IEBAIC0zMDUzLDYgKzMwNTMsNyBAQCB4 ZnNfYm1hcF9leHRlbnRzX3RvX2J0cmVlKAo+ICAJeGZzX2V4dG51bV90CQluZXh0ZW50czsJLyog bnVtYmVyIG9mIGZpbGUgZXh0ZW50cyAqLwo+ICAJeGZzX2JtYnRfcHRyX3QJCSpwcDsJCS8qIHJv b3QgYmxvY2sgYWRkcmVzcyBwb2ludGVyICovCj4gIAo+ICsJbXAgPSBpcC0+aV9tb3VudDsKPiAg CWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7Cj4gIAlBU1NFUlQoWEZTX0lGT1JL X0ZPUk1BVChpcCwgd2hpY2hmb3JrKSA9PSBYRlNfRElOT0RFX0ZNVF9FWFRFTlRTKTsKPiAgCj4g QEAgLTMwNjYsMTYgKzMwNjcsMTggQEAgeGZzX2JtYXBfZXh0ZW50c190b19idHJlZSgKPiAgCSAq IEZpbGwgaW4gdGhlIHJvb3QuCj4gIAkgKi8KPiAgCWJsb2NrID0gaWZwLT5pZl9icm9vdDsKPiAt CWJsb2NrLT5iYl9tYWdpYyA9IGNwdV90b19iZTMyKFhGU19CTUFQX01BR0lDKTsKPiAtCWJsb2Nr LT5iYl9sZXZlbCA9IGNwdV90b19iZTE2KDEpOwo+IC0JYmxvY2stPmJiX251bXJlY3MgPSBjcHVf dG9fYmUxNigxKTsKPiAtCWJsb2NrLT5iYl91LmwuYmJfbGVmdHNpYiA9IGNwdV90b19iZTY0KE5V TExERlNCTk8pOwo+IC0JYmxvY2stPmJiX3UubC5iYl9yaWdodHNpYiA9IGNwdV90b19iZTY0KE5V TExERlNCTk8pOwo+ICsJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2NyYygmbXAtPm1fc2IpKQo+ICsJ CXhmc19idHJlZV9pbml0X2Jsb2NrX2ludChtcCwgYmxvY2ssIFhGU19CVUZfREFERFJfTlVMTCwK PiArCQkJCSBYRlNfQk1BUF9DUkNfTUFHSUMsIDEsIDEsIGlwLT5pX2lubywKPiArCQkJCSBYRlNf QlRSRUVfTE9OR19QVFJTIHwgWEZTX0JUUkVFX0NSQ19CTE9DS1MpOwo+ICsJZWxzZQo+ICsJCXhm c19idHJlZV9pbml0X2Jsb2NrX2ludChtcCwgYmxvY2ssIFhGU19CVUZfREFERFJfTlVMTCwKPiAr CQkJCSBYRlNfQk1BUF9NQUdJQywgMSwgMSwgaXAtPmlfaW5vLAo+ICsJCQkJIFhGU19CVFJFRV9M T05HX1BUUlMpOwo+ICAKPiAgCS8qCj4gIAkgKiBOZWVkIGEgY3Vyc29yLiAgQ2FuJ3QgYWxsb2Nh dGUgdW50aWwgYmJfbGV2ZWwgaXMgZmlsbGVkIGluLgo+ICAJICovCj4gLQltcCA9IGlwLT5pX21v dW50Owo+ICAJY3VyID0geGZzX2JtYnRfaW5pdF9jdXJzb3IobXAsIHRwLCBpcCwgd2hpY2hmb3Jr KTsKPiAgCWN1ci0+YmNfcHJpdmF0ZS5iLmZpcnN0YmxvY2sgPSAqZmlyc3RibG9jazsKPiAgCWN1 ci0+YmNfcHJpdmF0ZS5iLmZsaXN0ID0gZmxpc3Q7Cj4gQEAgLTMxMjQsMTAgKzMxMjcsMTUgQEAg eGZzX2JtYXBfZXh0ZW50c190b19idHJlZSgKPiAgCSAqLwo+ICAJYWJwLT5iX29wcyA9ICZ4ZnNf Ym1idF9idWZfb3BzOwo+ICAJYWJsb2NrID0gWEZTX0JVRl9UT19CTE9DSyhhYnApOwo+IC0JYWJs b2NrLT5iYl9tYWdpYyA9IGNwdV90b19iZTMyKFhGU19CTUFQX01BR0lDKTsKPiAtCWFibG9jay0+ YmJfbGV2ZWwgPSAwOwo+IC0JYWJsb2NrLT5iYl91LmwuYmJfbGVmdHNpYiA9IGNwdV90b19iZTY0 KE5VTExERlNCTk8pOwo+IC0JYWJsb2NrLT5iYl91LmwuYmJfcmlnaHRzaWIgPSBjcHVfdG9fYmU2 NChOVUxMREZTQk5PKTsKPiArCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNjcmMoJm1wLT5tX3NiKSkK PiArCQl4ZnNfYnRyZWVfaW5pdF9ibG9ja19pbnQobXAsIGFibG9jaywgYWJwLT5iX2JuLAo+ICsJ CQkJWEZTX0JNQVBfQ1JDX01BR0lDLCAwLCAwLCBpcC0+aV9pbm8sCj4gKwkJCQlYRlNfQlRSRUVf TE9OR19QVFJTIHwgWEZTX0JUUkVFX0NSQ19CTE9DS1MpOwo+ICsJZWxzZQo+ICsJCXhmc19idHJl ZV9pbml0X2Jsb2NrX2ludChtcCwgYWJsb2NrLCBhYnAtPmJfYm4sCj4gKwkJCQlYRlNfQk1BUF9N QUdJQywgMCwgMCwgaXAtPmlfaW5vLAo+ICsJCQkJWEZTX0JUUkVFX0xPTkdfUFRSUyk7Cj4gKwo+ ICAJYXJwID0gWEZTX0JNQlRfUkVDX0FERFIobXAsIGFibG9jaywgMSk7Cj4gIAluZXh0ZW50cyA9 IGlmcC0+aWZfYnl0ZXMgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwo+ICAJZm9yIChj bnQgPSBpID0gMDsgaSA8IG5leHRlbnRzOyBpKyspIHsKPiBAQCAtMzE1NSw4ICszMTYzLDggQEAg eGZzX2JtYXBfZXh0ZW50c190b19idHJlZSgKPiAgCSAqIERvIGFsbCB0aGlzIGxvZ2dpbmcgYXQg dGhlIGVuZCBzbyB0aGF0Cj4gIAkgKiB0aGUgcm9vdCBpcyBhdCB0aGUgcmlnaHQgbGV2ZWwuCj4g IAkgKi8KPiAtCXhmc19idHJlZV9sb2dfYmxvY2soY3VyLCBhYnAsIFhGU19CQl9BTExfQklUUyk7 Cj4gIAl4ZnNfYnRyZWVfbG9nX3JlY3MoY3VyLCBhYnAsIDEsIGJlMTZfdG9fY3B1KGFibG9jay0+ YmJfbnVtcmVjcykpOwo+ICsJeGZzX2J0cmVlX2xvZ19ibG9jayhjdXIsIGFicCwgWEZTX0JCX0FM TF9CSVRTKTsKCkh1aC4gIFdoeSB3YXMgdGhhdCBuZWNlc3Nhcnk/Cgo+ICAJQVNTRVJUKCpjdXJw ID09IE5VTEwpOwo+ICAJKmN1cnAgPSBjdXI7Cj4gIAkqbG9nZmxhZ3NwID0gWEZTX0lMT0dfQ09S RSB8IHhmc19pbG9nX2Zicm9vdCh3aGljaGZvcmspOwo+IEBAIC0zMjY4LDggKzMyNzYsMTIgQEAg eGZzX2JtYXBfbG9jYWxfdG9fZXh0ZW50cygKPiAgCQkqZmlyc3RibG9jayA9IGFyZ3MuZnNibm87 Cj4gIAkJYnAgPSB4ZnNfYnRyZWVfZ2V0X2J1ZmwoYXJncy5tcCwgdHAsIGFyZ3MuZnNibm8sIDAp Owo+ICAJCWJwLT5iX29wcyA9ICZ4ZnNfYm1idF9idWZfb3BzOwo+ICsKPiAgCQltZW1jcHkoYnAt PmJfYWRkciwgaWZwLT5pZl91MS5pZl9kYXRhLCBpZnAtPmlmX2J5dGVzKTsKCkNvbmZsaWN0cyBu b3cgZHVlIHRvIDFlODIzNzliMAoKPiArCj4gKwkJeGZzX3RyYW5zX2J1Zl9zZXRfdHlwZSh0cCwg YnAsIFhGU19CTEZfQlRSRUVfQlVGKTsKClRoZSB4ZnNfdHJhbnNfYnVmX3NldF90eXBlIGNoYW5n ZXMgYXJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGEgc2VwYXJhdGUgcGF0Y2guCgo+ICAJCXhmc190 cmFuc19sb2dfYnVmKHRwLCBicCwgMCwgaWZwLT5pZl9ieXRlcyAtIDEpOwo+ICsKPiAgCQl4ZnNf Ym1hcF9mb3Jrb2ZmX3Jlc2V0KGFyZ3MubXAsIGlwLCB3aGljaGZvcmspOwo+ICAJCXhmc19pZGF0 YV9yZWFsbG9jKGlwLCAtaWZwLT5pZl9ieXRlcywgd2hpY2hmb3JrKTsKPiAgCQl4ZnNfaWV4dF9h ZGQoaWZwLCAwLCAxKTsKPiBAQCAtNDAyMywxMSArNDAzNSwxNSBAQCB4ZnNfYm1hcF9zYW5pdHlf Y2hlY2soCj4gIHsKPiAgCXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sgICpibG9jayA9IFhGU19CVUZf VE9fQkxPQ0soYnApOwo+ICAKPiAtCWlmIChibG9jay0+YmJfbWFnaWMgIT0gY3B1X3RvX2JlMzIo WEZTX0JNQVBfTUFHSUMpIHx8Cj4gLQkgICAgYmUxNl90b19jcHUoYmxvY2stPmJiX2xldmVsKSAh PSBsZXZlbCB8fAo+ICsJaWYgKGJsb2NrLT5iYl9tYWdpYyAhPSBjcHVfdG9fYmUzMihYRlNfQk1B UF9DUkNfTUFHSUMpICYmCj4gKwkgICAgYmxvY2stPmJiX21hZ2ljICE9IGNwdV90b19iZTMyKFhG U19CTUFQX01BR0lDKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpZiAoYmUxNl90b19jcHUoYmxv Y2stPmJiX2xldmVsKSAhPSBsZXZlbCB8fAo+ICAJICAgIGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9u dW1yZWNzKSA9PSAwIHx8Cj4gIAkgICAgYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpID4g bXAtPm1fYm1hcF9kbXhyW2xldmVsICE9IDBdKQo+ICAJCXJldHVybiAwOwo+ICsKPiAgCXJldHVy biAxOwo+ICB9Cj4gIAo+IGRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYyBiL2Zz L3hmcy94ZnNfYm1hcF9idHJlZS5jCj4gaW5kZXggMDYxYjQ1Yy4uM2E4NmMzZiAxMDA2NDQKPiAt LS0gYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuYwo+ICsrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJl ZS5jCj4gQEAgLTM3LDYgKzM3LDcgQEAKPiAgI2luY2x1ZGUgInhmc19lcnJvci5oIgo+ICAjaW5j bHVkZSAieGZzX3F1b3RhLmgiCj4gICNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKPiArI2luY2x1ZGUg Inhmc19ja3N1bS5oIgo+ICAKPiAgLyoKPiAgICogRGV0ZXJtaW5lIHRoZSBleHRlbnQgc3RhdGUu Cj4gQEAgLTU5LDI0ICs2MCwzMSBAQCB4ZnNfZXh0ZW50X3N0YXRlKAo+ICAgKi8KPiAgdm9pZAo+ ICB4ZnNfYm1kcl90b19ibWJ0KAo+IC0Jc3RydWN0IHhmc19tb3VudAkqbXAsCj4gKwlzdHJ1Y3Qg eGZzX2lub2RlCSppcCwKPiAgCXhmc19ibWRyX2Jsb2NrX3QJKmRibG9jaywKPiAgCWludAkJCWRi bG9ja2xlbiwKPiAgCXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sJKnJibG9jaywKPiAgCWludAkJCXJi bG9ja2xlbikKPiAgewo+ICsJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKPiAg CWludAkJCWRteHI7Cj4gIAl4ZnNfYm1idF9rZXlfdAkJKmZrcDsKPiAgCV9fYmU2NAkJCSpmcHA7 Cj4gIAl4ZnNfYm1idF9rZXlfdAkJKnRrcDsKPiAgCV9fYmU2NAkJCSp0cHA7Cj4gIAo+IC0JcmJs b2NrLT5iYl9tYWdpYyA9IGNwdV90b19iZTMyKFhGU19CTUFQX01BR0lDKTsKPiArCWlmICh4ZnNf c2JfdmVyc2lvbl9oYXNjcmMoJm1wLT5tX3NiKSkKPiArCQl4ZnNfYnRyZWVfaW5pdF9ibG9ja19p bnQobXAsIHJibG9jaywgWEZTX0JVRl9EQUREUl9OVUxMLAo+ICsJCQkJIFhGU19CTUFQX0NSQ19N QUdJQywgMCwgMCwgaXAtPmlfaW5vLAo+ICsJCQkJIFhGU19CVFJFRV9MT05HX1BUUlMgfCBYRlNf QlRSRUVfQ1JDX0JMT0NLUyk7Cj4gKwllbHNlCj4gKwkJeGZzX2J0cmVlX2luaXRfYmxvY2tfaW50 KG1wLCByYmxvY2ssIFhGU19CVUZfREFERFJfTlVMTCwKPiArCQkJCSBYRlNfQk1BUF9NQUdJQywg MCwgMCwgaXAtPmlfaW5vLAo+ICsJCQkJIFhGU19CVFJFRV9MT05HX1BUUlMpOwo+ICsKPiAgCXJi bG9jay0+YmJfbGV2ZWwgPSBkYmxvY2stPmJiX2xldmVsOwo+ICAJQVNTRVJUKGJlMTZfdG9fY3B1 KHJibG9jay0+YmJfbGV2ZWwpID4gMCk7Cj4gIAlyYmxvY2stPmJiX251bXJlY3MgPSBkYmxvY2st PmJiX251bXJlY3M7Cj4gLQlyYmxvY2stPmJiX3UubC5iYl9sZWZ0c2liID0gY3B1X3RvX2JlNjQo TlVMTERGU0JOTyk7Cj4gLQlyYmxvY2stPmJiX3UubC5iYl9yaWdodHNpYiA9IGNwdV90b19iZTY0 KE5VTExERlNCTk8pOwo+ICAJZG14ciA9IHhmc19ibWRyX21heHJlY3MobXAsIGRibG9ja2xlbiwg MCk7Cj4gIAlma3AgPSBYRlNfQk1EUl9LRVlfQUREUihkYmxvY2ssIDEpOwo+ICAJdGtwID0gWEZT X0JNQlRfS0VZX0FERFIobXAsIHJibG9jaywgMSk7Cj4gQEAgLTQyNCw3ICs0MzIsMTMgQEAgeGZz X2JtYnRfdG9fYm1kcigKPiAgCXhmc19ibWJ0X2tleV90CQkqdGtwOwo+ICAJX19iZTY0CQkJKnRw cDsKPiAgCj4gLQlBU1NFUlQocmJsb2NrLT5iYl9tYWdpYyA9PSBjcHVfdG9fYmUzMihYRlNfQk1B UF9NQUdJQykpOwo+ICsJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2NyYygmbXAtPm1fc2IpKSB7Cj4g KwkJQVNTRVJUKHJibG9jay0+YmJfbWFnaWMgPT0gY3B1X3RvX2JlMzIoWEZTX0JNQVBfQ1JDX01B R0lDKSk7Cj4gKwkJQVNTRVJUKHV1aWRfZXF1YWwoJnJibG9jay0+YmJfdS5sLmJiX3V1aWQsICZt cC0+bV9zYi5zYl91dWlkKSk7Cj4gKwkJQVNTRVJUKHJibG9jay0+YmJfdS5sLmJiX2Jsa25vID09 Cj4gKwkJICAgICAgIGNwdV90b19iZTY0KFhGU19CVUZfREFERFJfTlVMTCkpOwo+ICsJfSBlbHNl Cj4gKwkJQVNTRVJUKHJibG9jay0+YmJfbWFnaWMgPT0gY3B1X3RvX2JlMzIoWEZTX0JNQVBfTUFH SUMpKTsKPiAgCUFTU0VSVChyYmxvY2stPmJiX3UubC5iYl9sZWZ0c2liID09IGNwdV90b19iZTY0 KE5VTExERlNCTk8pKTsKPiAgCUFTU0VSVChyYmxvY2stPmJiX3UubC5iYl9yaWdodHNpYiA9PSBj cHVfdG9fYmU2NChOVUxMREZTQk5PKSk7Cj4gIAlBU1NFUlQocmJsb2NrLT5iYl9sZXZlbCAhPSAw KTsKPiBAQCAtNzA4LDU5ICs3MjIsODkgQEAgeGZzX2JtYnRfa2V5X2RpZmYoCj4gIAkJCQkgICAg ICBjdXItPmJjX3JlYy5iLmJyX3N0YXJ0b2ZmOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZAo+ICtz dGF0aWMgaW50Cj4gIHhmc19ibWJ0X3ZlcmlmeSgKPiAgCXN0cnVjdCB4ZnNfYnVmCQkqYnApCj4g IHsKPiAgCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gYnAtPmJfdGFyZ2V0LT5idF9tb3VudDsKPiAg CXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sJKmJsb2NrID0gWEZTX0JVRl9UT19CTE9DSyhicCk7Cj4g IAl1bnNpZ25lZCBpbnQJCWxldmVsOwo+IC0JaW50CQkJbGJsb2NrX29rOyAvKiBibG9jayBwYXNz ZXMgY2hlY2tzICovCj4gIAo+IC0JLyogbWFnaWMgbnVtYmVyIGFuZCBsZXZlbCB2ZXJpZmljYXRp b24uCj4gKwlzd2l0Y2ggKGJsb2NrLT5iYl9tYWdpYykgewo+ICsJY2FzZSBjcHVfdG9fYmUzMihY RlNfQk1BUF9DUkNfTUFHSUMpOgo+ICsJCWlmICgheGZzX3NiX3ZlcnNpb25faGFzY3JjKCZtcC0+ bV9zYikpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQlpZiAoIXV1aWRfZXF1YWwoJmJsb2NrLT5i Yl91LmwuYmJfdXVpZCwgJm1wLT5tX3NiLnNiX3V1aWQpKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4g KwkJaWYgKGJlNjRfdG9fY3B1KGJsb2NrLT5iYl91LmwuYmJfYmxrbm8pICE9IGJwLT5iX2JuKQo+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJLyoKPiArCQkgKiBYWFg6IG5lZWQgYSBiZXR0ZXIgd2F5 IG9mIHZlcmlmeWluZyB0aGUgb3duZXIgaGVyZS4gUmlnaHQgbm93Cj4gKwkJICoganVzdCBtYWtl IHN1cmUgdGhlcmUgaGFzIGJlZW4gb25lIHNldC4KPiArCQkgKi8KPiArCQlpZiAoYmU2NF90b19j cHUoYmxvY2stPmJiX3UubC5iYl9vd25lcikgPT0gMCkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJ CS8qIGZhbGwgdGhyb3VnaCAqLwo+ICsJY2FzZSBjcHVfdG9fYmUzMihYRlNfQk1BUF9NQUdJQyk6 Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4g KwkvKgo+ICsJICogbnVtcmVjcyBhbmQgbGV2ZWwgdmVyaWZpY2F0aW9uLgo+ICAJICoKPiAtCSAq IFdlIGRvbid0IGtub3cgd2FodCBmb3JrIHdlIGJlbG9uZyB0bywgc28ganVzdCB2ZXJpZnkgdGhh dCB0aGUgbGV2ZWwKPiArCSAqIFdlIGRvbid0IGtub3cgd2hhdCBmb3JrIHdlIGJlbG9uZyB0bywg c28ganVzdCB2ZXJpZnkgdGhhdCB0aGUgbGV2ZWwKPiAgCSAqIGlzIGxlc3MgdGhhbiB0aGUgbWF4 aW11bSBvZiB0aGUgdHdvLiBMYXRlciBjaGVja3Mgd2lsbCBiZSBtb3JlCj4gIAkgKiBwcmVjaXNl Lgo+ICAJICovCj4gIAlsZXZlbCA9IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9sZXZlbCk7Cj4gLQls YmxvY2tfb2sgPSBibG9jay0+YmJfbWFnaWMgPT0gY3B1X3RvX2JlMzIoWEZTX0JNQVBfTUFHSUMp ICYmCj4gLQkJICAgIGxldmVsIDwgbWF4KG1wLT5tX2JtX21heGxldmVsc1swXSwgbXAtPm1fYm1f bWF4bGV2ZWxzWzFdKTsKPiAtCj4gLQkvKiBudW1yZWNzIHZlcmlmaWNhdGlvbiAqLwo+IC0JbGJs b2NrX29rID0gbGJsb2NrX29rICYmCj4gLQkJYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3Mp IDw9IG1wLT5tX2JtYXBfZG14cltsZXZlbCAhPSAwXTsKPiArCWlmIChsZXZlbCA+IG1heChtcC0+ bV9ibV9tYXhsZXZlbHNbMF0sIG1wLT5tX2JtX21heGxldmVsc1sxXSkpCj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsJaWYgKGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSA+IG1wLT5tX2JtYXBf ZG14cltsZXZlbCAhPSAwXSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gIAo+ICAJLyogc2libGluZyBw b2ludGVyIHZlcmlmaWNhdGlvbiAqLwo+IC0JbGJsb2NrX29rID0gbGJsb2NrX29rICYmCj4gLQkJ YmxvY2stPmJiX3UubC5iYl9sZWZ0c2liICYmCj4gLQkJKGJsb2NrLT5iYl91LmwuYmJfbGVmdHNp YiA9PSBjcHVfdG9fYmU2NChOVUxMREZTQk5PKSB8fAo+IC0JCSBYRlNfRlNCX1NBTklUWV9DSEVD SyhtcCwKPiAtCQkJYmU2NF90b19jcHUoYmxvY2stPmJiX3UubC5iYl9sZWZ0c2liKSkpICYmCj4g LQkJYmxvY2stPmJiX3UubC5iYl9yaWdodHNpYiAmJgo+IC0JCShibG9jay0+YmJfdS5sLmJiX3Jp Z2h0c2liID09IGNwdV90b19iZTY0KE5VTExERlNCTk8pIHx8Cj4gLQkJIFhGU19GU0JfU0FOSVRZ X0NIRUNLKG1wLAo+IC0JCQliZTY0X3RvX2NwdShibG9jay0+YmJfdS5sLmJiX3JpZ2h0c2liKSkp Owo+IC0KPiAtCWlmICghbGJsb2NrX29rKSB7Cj4gLQkJdHJhY2VfeGZzX2J0cmVlX2NvcnJ1cHQo YnAsIF9SRVRfSVBfKTsKPiAtCQlYRlNfQ09SUlVQVElPTl9FUlJPUihfX2Z1bmNfXywgWEZTX0VS UkxFVkVMX0xPVywgbXAsIGJsb2NrKTsKPiAtCQl4ZnNfYnVmX2lvZXJyb3IoYnAsIEVGU0NPUlJV UFRFRCk7Cj4gLQl9Cj4gKwlpZiAoIWJsb2NrLT5iYl91LmwuYmJfbGVmdHNpYiB8fAo+ICsJICAg IChibG9jay0+YmJfdS5sLmJiX2xlZnRzaWIgIT0gY3B1X3RvX2JlNjQoTlVMTERGU0JOTykgJiYK PiArCSAgICAgIVhGU19GU0JfU0FOSVRZX0NIRUNLKG1wLCBiZTY0X3RvX2NwdShibG9jay0+YmJf dS5sLmJiX2xlZnRzaWIpKSkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJaWYgKCFibG9jay0+YmJf dS5sLmJiX3JpZ2h0c2liIHx8Cj4gKwkgICAgKGJsb2NrLT5iYl91LmwuYmJfcmlnaHRzaWIgIT0g Y3B1X3RvX2JlNjQoTlVMTERGU0JOTykgJiYKPiArCSAgICAgIVhGU19GU0JfU0FOSVRZX0NIRUNL KG1wLCBiZTY0X3RvX2NwdShibG9jay0+YmJfdS5sLmJiX3JpZ2h0c2liKSkpKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArCj4gIH0KPiAgCj4gIHN0YXRpYyB2b2lk Cj4gIHhmc19ibWJ0X3JlYWRfdmVyaWZ5KAo+ICAJc3RydWN0IHhmc19idWYJKmJwKQo+ICB7Cj4g LQl4ZnNfYm1idF92ZXJpZnkoYnApOwo+ICsJaWYgKCEoeGZzX2J0cmVlX2xibG9ja192ZXJpZnlf Y3JjKGJwKSAmJgo+ICsJICAgICAgeGZzX2JtYnRfdmVyaWZ5KGJwKSkpIHsKPiArCQl0cmFjZV94 ZnNfYnRyZWVfY29ycnVwdChicCwgX1JFVF9JUF8pOwo+ICsJCVhGU19DT1JSVVBUSU9OX0VSUk9S KF9fZnVuY19fLCBYRlNfRVJSTEVWRUxfTE9XLAo+ICsJCQkJICAgICBicC0+Yl90YXJnZXQtPmJ0 X21vdW50LCBicC0+Yl9hZGRyKTsKPiArCQl4ZnNfYnVmX2lvZXJyb3IoYnAsIEVGU0NPUlJVUFRF RCk7Cj4gKwl9Cj4gKwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+ICB4ZnNfYm1idF93cml0ZV92 ZXJpZnkoCj4gIAlzdHJ1Y3QgeGZzX2J1ZgkqYnApCj4gIHsKPiAtCXhmc19ibWJ0X3ZlcmlmeShi cCk7Cj4gKwlpZiAoIXhmc19ibWJ0X3ZlcmlmeShicCkpIHsKPiArCQl4ZnNfd2FybihicC0+Yl90 YXJnZXQtPmJ0X21vdW50LCAiYm1idCBkYWRkciAweCVsbHggZmFpbGVkIiwgYnAtPmJfYm4pOwo+ ICsJCXRyYWNlX3hmc19idHJlZV9jb3JydXB0KGJwLCBfUkVUX0lQXyk7Cj4gKwkJWEZTX0NPUlJV UFRJT05fRVJST1IoX19mdW5jX18sIFhGU19FUlJMRVZFTF9MT1csCj4gKwkJCQkgICAgIGJwLT5i X3RhcmdldC0+YnRfbW91bnQsIGJwLT5iX2FkZHIpOwo+ICsJCXhmc19idWZfaW9lcnJvcihicCwg RUZTQ09SUlVQVEVEKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwl4ZnNfYnRyZWVfbGJsb2NrX2Nh bGNfY3JjKGJwKTsKPiAgfQo+ICAKPiAgY29uc3Qgc3RydWN0IHhmc19idWZfb3BzIHhmc19ibWJ0 X2J1Zl9vcHMgPSB7Cj4gQEAgLTgzOCw2ICs4ODIsOCBAQCB4ZnNfYm1idF9pbml0X2N1cnNvcigK PiAgCj4gIAljdXItPmJjX29wcyA9ICZ4ZnNfYm1idF9vcHM7Cj4gIAljdXItPmJjX2ZsYWdzID0g WEZTX0JUUkVFX0xPTkdfUFRSUyB8IFhGU19CVFJFRV9ST09UX0lOX0lOT0RFOwo+ICsJaWYgKHhm c19zYl92ZXJzaW9uX2hhc2NyYygmbXAtPm1fc2IpKQo+ICsJCWN1ci0+YmNfZmxhZ3MgfD0gWEZT X0JUUkVFX0NSQ19CTE9DS1M7Cj4gIAo+ICAJY3VyLT5iY19wcml2YXRlLmIuZm9ya3NpemUgPSBY RlNfSUZPUktfU0laRShpcCwgd2hpY2hmb3JrKTsKPiAgCWN1ci0+YmNfcHJpdmF0ZS5iLmlwID0g aXA7Cj4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oIGIvZnMveGZzL3hmc19i bWFwX2J0cmVlLmgKPiBpbmRleCA4ODQ2OWNhLi4xYjJmM2U3IDEwMDY0NAo+IC0tLSBhL2ZzL3hm cy94ZnNfYm1hcF9idHJlZS5oCj4gKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmgKPiBAQCAt MTgsNyArMTgsOCBAQAo+ICAjaWZuZGVmIF9fWEZTX0JNQVBfQlRSRUVfSF9fCj4gICNkZWZpbmUg X19YRlNfQk1BUF9CVFJFRV9IX18KPiAgCj4gLSNkZWZpbmUgWEZTX0JNQVBfTUFHSUMJMHg0MjRk NDE1MAkvKiAnQk1BUCcgKi8KPiArI2RlZmluZSBYRlNfQk1BUF9NQUdJQwkJMHg0MjRkNDE1MAkv KiAnQk1BUCcgKi8KPiArI2RlZmluZSBYRlNfQk1BUF9DUkNfTUFHSUMJMHg0MjRkNDE1OAoKQk1B WQoKQWRkIGEgY29tbWVudC4KCj4gIHN0cnVjdCB4ZnNfYnRyZWVfY3VyOwo+ICBzdHJ1Y3QgeGZz X2J0cmVlX2Jsb2NrOwo+IEBAIC0xMzYsMTAgKzEzNywxMCBAQCB0eXBlZGVmIF9fYmU2NCB4ZnNf Ym1idF9wdHJfdCwgeGZzX2JtZHJfcHRyX3Q7Cj4gIAo+ICAvKgo+ICAgKiBCdHJlZSBibG9jayBo ZWFkZXIgc2l6ZSBkZXBlbmRzIG9uIGEgc3VwZXJibG9jayBmbGFnLgo+IC0gKgo+IC0gKiAobm90 IHF1aXRlIHlldCwgYnV0IHNvb24pCj4gICAqLwo+IC0jZGVmaW5lIFhGU19CTUJUX0JMT0NLX0xF TihtcCkJWEZTX0JUUkVFX0xCTE9DS19MRU4KPiArI2RlZmluZSBYRlNfQk1CVF9CTE9DS19MRU4o bXApIFwKPiArCSh4ZnNfc2JfdmVyc2lvbl9oYXNjcmMoJigobXApLT5tX3NiKSkgPyBcCj4gKwkJ WEZTX0JUUkVFX0xCTE9DS19DUkNfTEVOIDogWEZTX0JUUkVFX0xCTE9DS19MRU4pCj4gIAo+ICAj ZGVmaW5lIFhGU19CTUJUX1JFQ19BRERSKG1wLCBibG9jaywgaW5kZXgpIFwKPiAgCSgoeGZzX2Jt YnRfcmVjX3QgKikgXAo+IEBAIC0xODYsMTIgKzE4NywxMiBAQCB0eXBlZGVmIF9fYmU2NCB4ZnNf Ym1idF9wdHJfdCwgeGZzX2JtZHJfcHRyX3Q7Cj4gICNkZWZpbmUgWEZTX0JNQVBfQlJPT1RfUFRS X0FERFIobXAsIGJiLCBpLCBzeikgXAo+ICAJWEZTX0JNQlRfUFRSX0FERFIobXAsIGJiLCBpLCB4 ZnNfYm1idF9tYXhyZWNzKG1wLCBzeiwgMCkpCj4gIAo+IC0jZGVmaW5lIFhGU19CTUFQX0JST09U X1NQQUNFX0NBTEMobnJlY3MpIFwKPiAtCShpbnQpKFhGU19CVFJFRV9MQkxPQ0tfTEVOICsgXAo+ ICsjZGVmaW5lIFhGU19CTUFQX0JST09UX1NQQUNFX0NBTEMobXAsIG5yZWNzKSBcCj4gKwkoaW50 KShYRlNfQk1CVF9CTE9DS19MRU4obXApICsgXAo+ICAJICAgICAgICgobnJlY3MpICogKHNpemVv Zih4ZnNfYm1idF9rZXlfdCkgKyBzaXplb2YoeGZzX2JtYnRfcHRyX3QpKSkpCj4gIAo+IC0jZGVm aW5lIFhGU19CTUFQX0JST09UX1NQQUNFKGJiKSBcCj4gLQkoWEZTX0JNQVBfQlJPT1RfU1BBQ0Vf Q0FMQyhiZTE2X3RvX2NwdSgoYmIpLT5iYl9udW1yZWNzKSkpCj4gKyNkZWZpbmUgWEZTX0JNQVBf QlJPT1RfU1BBQ0UobXAsIGJiKSBcCj4gKwkoWEZTX0JNQVBfQlJPT1RfU1BBQ0VfQ0FMQyhtcCwg YmUxNl90b19jcHUoKGJiKS0+YmJfbnVtcmVjcykpKQo+ICAjZGVmaW5lIFhGU19CTURSX1NQQUNF X0NBTEMobnJlY3MpIFwKPiAgCShpbnQpKHNpemVvZih4ZnNfYm1kcl9ibG9ja190KSArIFwKPiAg CSAgICAgICAoKG5yZWNzKSAqIChzaXplb2YoeGZzX2JtYnRfa2V5X3QpICsgc2l6ZW9mKHhmc19i bWJ0X3B0cl90KSkpKQoKQXJlIHRoZXNlIGxhcmdlIGJyb290cyBnb2luZyB0byBmb3JjZSBhdHRy aWJ1dGVzIG91dCBvZiBsaW5lPwoKPiBAQCAtMjA0LDcgKzIwNSw3IEBAIHR5cGVkZWYgX19iZTY0 IHhmc19ibWJ0X3B0cl90LCB4ZnNfYm1kcl9wdHJfdDsKPiAgLyoKPiAgICogUHJvdG90eXBlcyBm b3IgeGZzX2JtYXAuYyB0byBjYWxsLgo+ICAgKi8KPiAtZXh0ZXJuIHZvaWQgeGZzX2JtZHJfdG9f Ym1idChzdHJ1Y3QgeGZzX21vdW50ICosIHhmc19ibWRyX2Jsb2NrX3QgKiwgaW50LAo+ICtleHRl cm4gdm9pZCB4ZnNfYm1kcl90b19ibWJ0KHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX2JtZHJfYmxv Y2tfdCAqLCBpbnQsCj4gIAkJCXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sgKiwgaW50KTsKPiAgZXh0 ZXJuIHZvaWQgeGZzX2JtYnRfZ2V0X2FsbCh4ZnNfYm1idF9yZWNfaG9zdF90ICpyLCB4ZnNfYm1i dF9pcmVjX3QgKnMpOwo+ICBleHRlcm4geGZzX2ZpbGJsa3NfdCB4ZnNfYm1idF9nZXRfYmxvY2tj b3VudCh4ZnNfYm1idF9yZWNfaG9zdF90ICpyKTsKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19i dHJlZS5jIGIvZnMveGZzL3hmc19idHJlZS5jCj4gaW5kZXggZGIwMTA0MC4uOWU4ZmNhZCAxMDA2 NDQKPiAtLS0gYS9mcy94ZnMveGZzX2J0cmVlLmMKPiArKysgYi9mcy94ZnMveGZzX2J0cmVlLmMK PiBAQCAtMzAsOSArMzAsMTEgQEAKPiAgI2luY2x1ZGUgInhmc19kaW5vZGUuaCIKPiAgI2luY2x1 ZGUgInhmc19pbm9kZS5oIgo+ICAjaW5jbHVkZSAieGZzX2lub2RlX2l0ZW0uaCIKPiArI2luY2x1 ZGUgInhmc19idWZfaXRlbS5oIgo+ICAjaW5jbHVkZSAieGZzX2J0cmVlLmgiCj4gICNpbmNsdWRl ICJ4ZnNfZXJyb3IuaCIKPiAgI2luY2x1ZGUgInhmc190cmFjZS5oIgo+ICsjaW5jbHVkZSAieGZz X2Nrc3VtLmgiCj4gIAo+ICAvKgo+ICAgKiBDdXJzb3IgYWxsb2NhdGlvbiB6b25lLgo+IEBAIC00 Miw5ICs0NCwxMyBAQCBrbWVtX3pvbmVfdAkqeGZzX2J0cmVlX2N1cl96b25lOwo+ICAvKgo+ICAg KiBCdHJlZSBtYWdpYyBudW1iZXJzLgo+ICAgKi8KPiAtY29uc3QgX191aW50MzJfdCB4ZnNfbWFn aWNzW1hGU19CVE5VTV9NQVhdID0gewo+IC0JWEZTX0FCVEJfTUFHSUMsIFhGU19BQlRDX01BR0lD LCBYRlNfQk1BUF9NQUdJQywgWEZTX0lCVF9NQUdJQwo+ICtzdGF0aWMgY29uc3QgX191aW50MzJf dCB4ZnNfbWFnaWNzWzJdW1hGU19CVE5VTV9NQVhdID0gewo+ICsJeyBYRlNfQUJUQl9NQUdJQywg WEZTX0FCVENfTUFHSUMsIFhGU19CTUFQX01BR0lDLCBYRlNfSUJUX01BR0lDIH0sCj4gKwl7IFhG U19BQlRCX0NSQ19NQUdJQywgWEZTX0FCVENfQ1JDX01BR0lDLAo+ICsJICBYRlNfQk1BUF9DUkNf TUFHSUMsIFhGU19JQlRfQ1JDX01BR0lDIH0KPiAgfTsKPiArI2RlZmluZSB4ZnNfYnRyZWVfbWFn aWMoY3VyKSBcCj4gKwl4ZnNfbWFnaWNzWyEhKChjdXIpLT5iY19mbGFncyAmIFhGU19CVFJFRV9D UkNfQkxPQ0tTKV1bY3VyLT5iY19idG51bV0KPiAgCj4gIAo+ICBTVEFUSUMgaW50CQkJCS8qIGVy cm9yICgwIG9yIEVGU0NPUlJVUFRFRCkgKi8KPiBAQCAtNTQsMzAgKzYwLDM4IEBAIHhmc19idHJl ZV9jaGVja19sYmxvY2soCj4gIAlpbnQJCQlsZXZlbCwJLyogbGV2ZWwgb2YgdGhlIGJ0cmVlIGJs b2NrICovCj4gIAlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQkvKiBidWZmZXIgZm9yIGJsb2NrLCBpZiBh bnkgKi8KPiAgewo+IC0JaW50CQkJbGJsb2NrX29rOyAvKiBibG9jayBwYXNzZXMgY2hlY2tzICov Cj4gKwlpbnQJCQlsYmxvY2tfb2sgPSAxOyAvKiBibG9jayBwYXNzZXMgY2hlY2tzICovCj4gIAlz dHJ1Y3QgeGZzX21vdW50CSptcDsJLyogZmlsZSBzeXN0ZW0gbW91bnQgcG9pbnQgKi8KPiAgCj4g IAltcCA9IGN1ci0+YmNfbXA7Cj4gLQlsYmxvY2tfb2sgPQo+IC0JCWJlMzJfdG9fY3B1KGJsb2Nr LT5iYl9tYWdpYykgPT0geGZzX21hZ2ljc1tjdXItPmJjX2J0bnVtXSAmJgo+ICsKPiArCWlmICh4 ZnNfc2JfdmVyc2lvbl9oYXNjcmMoJm1wLT5tX3NiKSkgewo+ICsJCWxibG9ja19vayA9IGxibG9j a19vayAmJgo+ICsJCQl1dWlkX2VxdWFsKCZibG9jay0+YmJfdS5sLmJiX3V1aWQsICZtcC0+bV9z Yi5zYl91dWlkKSAmJgo+ICsJCQlibG9jay0+YmJfdS5sLmJiX2Jsa25vID09IGNwdV90b19iZTY0 KAo+ICsJCQkJYnAgPyBicC0+Yl9ibiA6IFhGU19CVUZfREFERFJfTlVMTCk7Cj4gKwl9Cj4gKwo+ ICsJbGJsb2NrX29rID0gbGJsb2NrX29rICYmCj4gKwkJYmUzMl90b19jcHUoYmxvY2stPmJiX21h Z2ljKSA9PSB4ZnNfYnRyZWVfbWFnaWMoY3VyKSAmJgo+ICAJCWJlMTZfdG9fY3B1KGJsb2NrLT5i Yl9sZXZlbCkgPT0gbGV2ZWwgJiYKPiAgCQliZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykg PD0KPiAgCQkJY3VyLT5iY19vcHMtPmdldF9tYXhyZWNzKGN1ciwgbGV2ZWwpICYmCj4gIAkJYmxv Y2stPmJiX3UubC5iYl9sZWZ0c2liICYmCj4gIAkJKGJsb2NrLT5iYl91LmwuYmJfbGVmdHNpYiA9 PSBjcHVfdG9fYmU2NChOVUxMREZTQk5PKSB8fAo+ICAJCSBYRlNfRlNCX1NBTklUWV9DSEVDSyht cCwKPiAtCQkgCWJlNjRfdG9fY3B1KGJsb2NrLT5iYl91LmwuYmJfbGVmdHNpYikpKSAmJgo+ICsJ CQliZTY0X3RvX2NwdShibG9jay0+YmJfdS5sLmJiX2xlZnRzaWIpKSkgJiYKPiAgCQlibG9jay0+ YmJfdS5sLmJiX3JpZ2h0c2liICYmCj4gIAkJKGJsb2NrLT5iYl91LmwuYmJfcmlnaHRzaWIgPT0g Y3B1X3RvX2JlNjQoTlVMTERGU0JOTykgfHwKPiAgCQkgWEZTX0ZTQl9TQU5JVFlfQ0hFQ0sobXAs Cj4gLQkJIAliZTY0X3RvX2NwdShibG9jay0+YmJfdS5sLmJiX3JpZ2h0c2liKSkpOwo+ICsJCQli ZTY0X3RvX2NwdShibG9jay0+YmJfdS5sLmJiX3JpZ2h0c2liKSkpOwo+ICsKPiAgCWlmICh1bmxp a2VseShYRlNfVEVTVF9FUlJPUighbGJsb2NrX29rLCBtcCwKPiAgCQkJWEZTX0VSUlRBR19CVFJF RV9DSEVDS19MQkxPQ0ssCj4gIAkJCVhGU19SQU5ET01fQlRSRUVfQ0hFQ0tfTEJMT0NLKSkpIHsK PiAgCQlpZiAoYnApCj4gIAkJCXRyYWNlX3hmc19idHJlZV9jb3JydXB0KGJwLCBfUkVUX0lQXyk7 Cj4gLQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX2J0cmVlX2NoZWNrX2xibG9jayIsIFhGU19FUlJM RVZFTF9MT1csCj4gLQkJCQkgbXApOwo+ICsJCVhGU19FUlJPUl9SRVBPUlQoX19mdW5jX18sIFhG U19FUlJMRVZFTF9MT1csIG1wKTsKPiAgCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7 Cj4gIAl9Cj4gIAlyZXR1cm4gMDsKPiBAQCAtOTAsMTYgKzEwNCwyNiBAQCB4ZnNfYnRyZWVfY2hl Y2tfc2Jsb2NrKAo+ICAJaW50CQkJbGV2ZWwsCS8qIGxldmVsIG9mIHRoZSBidHJlZSBibG9jayAq Lwo+ICAJc3RydWN0IHhmc19idWYJCSpicCkJLyogYnVmZmVyIGNvbnRhaW5pbmcgYmxvY2sgKi8K PiAgewo+ICsJc3RydWN0IHhmc19tb3VudAkqbXA7CS8qIGZpbGUgc3lzdGVtIG1vdW50IHBvaW50 ICovCj4gIAlzdHJ1Y3QgeGZzX2J1ZgkJKmFnYnA7CS8qIGJ1ZmZlciBmb3IgYWcuIGZyZWVzcGFj ZSBzdHJ1Y3QgKi8KPiAgCXN0cnVjdCB4ZnNfYWdmCQkqYWdmOwkvKiBhZy4gZnJlZXNwYWNlIHN0 cnVjdHVyZSAqLwo+ICAJeGZzX2FnYmxvY2tfdAkJYWdmbGVuOwkvKiBuYXRpdmUgYWcuIGZyZWVz cGFjZSBsZW5ndGggKi8KPiAtCWludAkJCXNibG9ja19vazsgLyogYmxvY2sgcGFzc2VzIGNoZWNr cyAqLwo+ICsJaW50CQkJc2Jsb2NrX29rID0gMTsgLyogYmxvY2sgcGFzc2VzIGNoZWNrcyAqLwo+ ICAKPiArCW1wID0gY3VyLT5iY19tcDsKPiAgCWFnYnAgPSBjdXItPmJjX3ByaXZhdGUuYS5hZ2Jw Owo+ICAJYWdmID0gWEZTX0JVRl9UT19BR0YoYWdicCk7Cj4gIAlhZ2ZsZW4gPSBiZTMyX3RvX2Nw dShhZ2YtPmFnZl9sZW5ndGgpOwo+IC0Jc2Jsb2NrX29rID0KPiAtCQliZTMyX3RvX2NwdShibG9j ay0+YmJfbWFnaWMpID09IHhmc19tYWdpY3NbY3VyLT5iY19idG51bV0gJiYKPiArCj4gKwlpZiAo eGZzX3NiX3ZlcnNpb25faGFzY3JjKCZtcC0+bV9zYikpIHsKPiArCQlzYmxvY2tfb2sgPSBzYmxv Y2tfb2sgJiYKPiArCQkJdXVpZF9lcXVhbCgmYmxvY2stPmJiX3Uucy5iYl91dWlkLCAmbXAtPm1f c2Iuc2JfdXVpZCkgJiYKPiArCQkJYmxvY2stPmJiX3Uucy5iYl9ibGtubyA9PSBjcHVfdG9fYmU2 NCgKPiArCQkJCWJwID8gYnAtPmJfYm4gOiBYRlNfQlVGX0RBRERSX05VTEwpOwo+ICsJfQo+ICsK PiArCXNibG9ja19vayA9IHNibG9ja19vayAmJgo+ICsJCWJlMzJfdG9fY3B1KGJsb2NrLT5iYl9t YWdpYykgPT0geGZzX2J0cmVlX21hZ2ljKGN1cikgJiYKPiAgCQliZTE2X3RvX2NwdShibG9jay0+ YmJfbGV2ZWwpID09IGxldmVsICYmCj4gIAkJYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3Mp IDw9Cj4gIAkJCWN1ci0+YmNfb3BzLT5nZXRfbWF4cmVjcyhjdXIsIGxldmVsKSAmJgo+IEBAIC0x MDksMTMgKzEzMywxMyBAQCB4ZnNfYnRyZWVfY2hlY2tfc2Jsb2NrKAo+ICAJCShibG9jay0+YmJf dS5zLmJiX3JpZ2h0c2liID09IGNwdV90b19iZTMyKE5VTExBR0JMT0NLKSB8fAo+ICAJCSBiZTMy X3RvX2NwdShibG9jay0+YmJfdS5zLmJiX3JpZ2h0c2liKSA8IGFnZmxlbikgJiYKPiAgCQlibG9j ay0+YmJfdS5zLmJiX3JpZ2h0c2liOwo+IC0JaWYgKHVubGlrZWx5KFhGU19URVNUX0VSUk9SKCFz YmxvY2tfb2ssIGN1ci0+YmNfbXAsCj4gKwo+ICsJaWYgKHVubGlrZWx5KFhGU19URVNUX0VSUk9S KCFzYmxvY2tfb2ssIG1wLAo+ICAJCQlYRlNfRVJSVEFHX0JUUkVFX0NIRUNLX1NCTE9DSywKPiAg CQkJWEZTX1JBTkRPTV9CVFJFRV9DSEVDS19TQkxPQ0spKSkgewo+ICAJCWlmIChicCkKPiAgCQkJ dHJhY2VfeGZzX2J0cmVlX2NvcnJ1cHQoYnAsIF9SRVRfSVBfKTsKPiAtCQlYRlNfQ09SUlVQVElP Tl9FUlJPUigieGZzX2J0cmVlX2NoZWNrX3NibG9jayIsCj4gLQkJCVhGU19FUlJMRVZFTF9MT1cs IGN1ci0+YmNfbXAsIGJsb2NrKTsKPiArCQlYRlNfRVJST1JfUkVQT1JUKF9fZnVuY19fLCBYRlNf RVJSTEVWRUxfTE9XLCBtcCk7Cj4gIAkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwo+ ICAJfQo+ICAJcmV0dXJuIDA7Cj4gQEAgLTE5NCw2ICsyMTgsNzIgQEAgeGZzX2J0cmVlX2NoZWNr X3B0cigKPiAgI2VuZGlmCj4gIAo+ICAvKgo+ICsgKiBDYWxjdWxhdGUgQ1JDIG9uIHRoZSB3aG9s ZSBidHJlZSBibG9jayBhbmQgc3R1ZmYgaXQgaW50byB0aGUKPiArICogbG9uZy1mb3JtIGJ0cmVl IGhlYWRlci4KPiArICoKPiArICogUHJpb3IgdG8gY2FsY3VsdGluZyB0aGUgQ1JDLCBwdWxsIHRo ZSBMU04gb3V0IG9mIHRoZSBidWZmZXIgbG9nIGl0ZW0gYW5kIHB1dAoJICAgICAgIGNhbGN1bGF0 aW5nCgo+ICsgKiBpdCBpbnRvIHRoZSBidWZmZXIgc28gcmVjb3Zlcnkga25vd3Mgd2hhdCB0aGUg bGFzdCBtb2RpZmNhdGlvbiB3YXMgdGhhdCBtYWRlCj4gKyAqIGl0IHRvIGRpc2suCj4gKyAqLwo+ ICt2b2lkCj4gK3hmc19idHJlZV9sYmxvY2tfY2FsY19jcmMoCj4gKwlzdHJ1Y3QgeGZzX2J1ZgkJ KmJwKQo+ICt7Cj4gKwlzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrCSpibG9jayA9IFhGU19CVUZfVE9f QkxPQ0soYnApOwo+ICsJc3RydWN0IHhmc19idWZfbG9nX2l0ZW0JKmJpcCA9IGJwLT5iX2ZzcHJp djsKPiArCj4gKwlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc2NyYygmYnAtPmJfdGFyZ2V0LT5idF9t b3VudC0+bV9zYikpCj4gKwkJcmV0dXJuOwo+ICsJaWYgKGJpcCkKPiArCQlibG9jay0+YmJfdS5s LmJiX2xzbiA9IGNwdV90b19iZTY0KGJpcC0+YmxpX2l0ZW0ubGlfbHNuKTsKPiArCXhmc191cGRh dGVfY2tzdW0oYnAtPmJfYWRkciwgQkJUT0IoYnAtPmJfbGVuZ3RoKSwKPiArCQkJIFhGU19CVFJF RV9MQkxPQ0tfQ1JDX09GRik7Cj4gK30KPiArCj4gK2Jvb2wKPiAreGZzX2J0cmVlX2xibG9ja192 ZXJpZnlfY3JjKAo+ICsJc3RydWN0IHhmc19idWYJCSpicCkKPiArewo+ICsJaWYgKHhmc19zYl92 ZXJzaW9uX2hhc2NyYygmYnAtPmJfdGFyZ2V0LT5idF9tb3VudC0+bV9zYikpCj4gKwkJcmV0dXJu IHhmc192ZXJpZnlfY2tzdW0oYnAtPmJfYWRkciwgQkJUT0IoYnAtPmJfbGVuZ3RoKSwKPiArCQkJ CQlYRlNfQlRSRUVfTEJMT0NLX0NSQ19PRkYpOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIENhbGN1bGF0ZSBDUkMgb24gdGhlIHdob2xlIGJ0cmVlIGJsb2NrIGFuZCBzdHVm ZiBpdCBpbnRvIHRoZQo+ICsgKiBzaG9ydC1mb3JtIGJ0cmVlIGhlYWRlci4KPiArICoKPiArICog UHJpb3IgdG8gY2FsY3VsdGluZyB0aGUgQ1JDLCBwdWxsIHRoZSBMU04gb3V0IG9mIHRoZSBidWZm ZXIgbG9nIGl0ZW0gYW5kIHB1dAo+ICsgKiBpdCBpbnRvIHRoZSBidWZmZXIgc28gcmVjb3Zlcnkg a25vd3Mgd2hhdCB0aGUgbGFzdCBtb2RpZmNhdGlvbiB3YXMgdGhhdCBtYWRlCj4gKyAqIGl0IHRv IGRpc2suCj4gKyAqLwo+ICt2b2lkCj4gK3hmc19idHJlZV9zYmxvY2tfY2FsY19jcmMoCj4gKwlz dHJ1Y3QgeGZzX2J1ZgkJKmJwKQo+ICt7Cj4gKwlzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrCSpibG9j ayA9IFhGU19CVUZfVE9fQkxPQ0soYnApOwo+ICsJc3RydWN0IHhmc19idWZfbG9nX2l0ZW0JKmJp cCA9IGJwLT5iX2ZzcHJpdjsKPiArCj4gKwlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc2NyYygmYnAt PmJfdGFyZ2V0LT5idF9tb3VudC0+bV9zYikpCj4gKwkJcmV0dXJuOwo+ICsJaWYgKGJpcCkKPiAr CQlibG9jay0+YmJfdS5zLmJiX2xzbiA9IGNwdV90b19iZTY0KGJpcC0+YmxpX2l0ZW0ubGlfbHNu KTsKPiArCXhmc191cGRhdGVfY2tzdW0oYnAtPmJfYWRkciwgQkJUT0IoYnAtPmJfbGVuZ3RoKSwK PiArCQkJIFhGU19CVFJFRV9TQkxPQ0tfQ1JDX09GRik7Cj4gK30KPiArCj4gK2Jvb2wKPiAreGZz X2J0cmVlX3NibG9ja192ZXJpZnlfY3JjKAo+ICsJc3RydWN0IHhmc19idWYJCSpicCkKPiArewo+ ICsJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2NyYygmYnAtPmJfdGFyZ2V0LT5idF9tb3VudC0+bV9z YikpCj4gKwkJcmV0dXJuIHhmc192ZXJpZnlfY2tzdW0oYnAtPmJfYWRkciwgQkJUT0IoYnAtPmJf bGVuZ3RoKSwKPiArCQkJCQlYRlNfQlRSRUVfU0JMT0NLX0NSQ19PRkYpOwo+ICsJcmV0dXJuIHRy dWU7Cj4gK30KPiArCj4gKy8qCj4gICAqIERlbGV0ZSB0aGUgYnRyZWUgY3Vyc29yLgo+ICAgKi8K PiAgdm9pZAo+IEBAIC0yNzcsMTAgKzM2Nyw4IEBAIHhmc19idHJlZV9kdXBfY3Vyc29yKAo+ICAJ CQkJKm5jdXIgPSBOVUxMOwo+ICAJCQkJcmV0dXJuIGVycm9yOwo+ICAJCQl9Cj4gLQkJCW5ldy0+ YmNfYnVmc1tpXSA9IGJwOwo+IC0JCQlBU1NFUlQoIXhmc19idWZfZ2V0ZXJyb3IoYnApKTsKPiAt CQl9IGVsc2UKPiAtCQkJbmV3LT5iY19idWZzW2ldID0gTlVMTDsKPiArCQl9Cj4gKwkJbmV3LT5i Y19idWZzW2ldID0gYnA7CgpXaHkgcmVtb3ZlIHRoZSBhc3NlcnQ/Cgo+ICAJfQo+ICAJKm5jdXIg PSBuZXc7Cj4gIAlyZXR1cm4gMDsKPiBAQCAtMzIxLDkgKzQwOSwxNCBAQCB4ZnNfYnRyZWVfZHVw X2N1cnNvcigKPiAgICovCj4gIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHhmc19idHJlZV9ibG9ja19s ZW4oc3RydWN0IHhmc19idHJlZV9jdXIgKmN1cikKPiAgewo+IC0JcmV0dXJuIChjdXItPmJjX2Zs YWdzICYgWEZTX0JUUkVFX0xPTkdfUFRSUykgPwo+IC0JCVhGU19CVFJFRV9MQkxPQ0tfTEVOIDoK PiAtCQlYRlNfQlRSRUVfU0JMT0NLX0xFTjsKPiArCWlmIChjdXItPmJjX2ZsYWdzICYgWEZTX0JU UkVFX0xPTkdfUFRSUykgewo+ICsJCWlmIChjdXItPmJjX2ZsYWdzICYgWEZTX0JUUkVFX0NSQ19C TE9DS1MpCj4gKwkJCXJldHVybiBYRlNfQlRSRUVfTEJMT0NLX0NSQ19MRU47Cj4gKwkJcmV0dXJu IFhGU19CVFJFRV9MQkxPQ0tfTEVOOwo+ICsJfQo+ICsJaWYgKGN1ci0+YmNfZmxhZ3MgJiBYRlNf QlRSRUVfQ1JDX0JMT0NLUykKPiArCQlyZXR1cm4gWEZTX0JUUkVFX1NCTE9DS19DUkNfTEVOOwo+ ICsJcmV0dXJuIFhGU19CVFJFRV9TQkxPQ0tfTEVOOwo+ICB9Cj4gIAo+ICAvKgo+IEBAIC04NjMs NDMgKzk1Niw4NSBAQCB4ZnNfYnRyZWVfc2V0X3NpYmxpbmcoCj4gIH0KPiAgCj4gIHZvaWQKPiAr eGZzX2J0cmVlX2luaXRfYmxvY2tfaW50KAo+ICsJc3RydWN0IHhmc19tb3VudAkqbXAsCj4gKwlz dHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrCSpidWYsCj4gKwl4ZnNfZGFkZHJfdAkJYmxrbm8sCj4gKwlf X3UzMgkJCW1hZ2ljLAo+ICsJX191MTYJCQlsZXZlbCwKPiArCV9fdTE2CQkJbnVtcmVjcywKPiAr CV9fdTY0CQkJb3duZXIsCj4gKwl1bnNpZ25lZCBpbnQJCWZsYWdzKQo+ICt7Cj4gKwlidWYtPmJi X21hZ2ljID0gY3B1X3RvX2JlMzIobWFnaWMpOwo+ICsJYnVmLT5iYl9sZXZlbCA9IGNwdV90b19i ZTE2KGxldmVsKTsKPiArCWJ1Zi0+YmJfbnVtcmVjcyA9IGNwdV90b19iZTE2KG51bXJlY3MpOwo+ ICsKPiArCWlmIChmbGFncyAmIFhGU19CVFJFRV9MT05HX1BUUlMpIHsKPiArCQlidWYtPmJiX3Uu bC5iYl9sZWZ0c2liID0gY3B1X3RvX2JlNjQoTlVMTERGU0JOTyk7Cj4gKwkJYnVmLT5iYl91Lmwu YmJfcmlnaHRzaWIgPSBjcHVfdG9fYmU2NChOVUxMREZTQk5PKTsKPiArCQlpZiAoZmxhZ3MgJiBY RlNfQlRSRUVfQ1JDX0JMT0NLUykgewo+ICsJCQlidWYtPmJiX3UubC5iYl9ibGtubyA9IGNwdV90 b19iZTY0KGJsa25vKTsKPiArCQkJYnVmLT5iYl91LmwuYmJfb3duZXIgPSBjcHVfdG9fYmU2NChv d25lcik7Cj4gKwkJCXV1aWRfY29weSgmYnVmLT5iYl91LmwuYmJfdXVpZCwgJm1wLT5tX3NiLnNi X3V1aWQpOwo+ICsJCQlidWYtPmJiX3UubC5iYl9wYWQgPSAwOwo+ICsJCX0KPiArCX0gZWxzZSB7 Cj4gKwkJLyogb3duZXIgaXMgYSAzMiBiaXQgdmFsdWUgb24gc2hvcnQgYmxvY2tzICovCj4gKwkJ X191MzIgX19vd25lciA9IChfX3UzMilvd25lcjsKPiArCj4gKwkJYnVmLT5iYl91LnMuYmJfbGVm dHNpYiA9IGNwdV90b19iZTMyKE5VTExBR0JMT0NLKTsKPiArCQlidWYtPmJiX3Uucy5iYl9yaWdo dHNpYiA9IGNwdV90b19iZTMyKE5VTExBR0JMT0NLKTsKPiArCQlpZiAoZmxhZ3MgJiBYRlNfQlRS RUVfQ1JDX0JMT0NLUykgewo+ICsJCQlidWYtPmJiX3Uucy5iYl9ibGtubyA9IGNwdV90b19iZTY0 KGJsa25vKTsKPiArCQkJYnVmLT5iYl91LnMuYmJfb3duZXIgPSBjcHVfdG9fYmUzMihfX293bmVy KTsKPiArCQkJdXVpZF9jb3B5KCZidWYtPmJiX3Uucy5iYl91dWlkLCAmbXAtPm1fc2Iuc2JfdXVp ZCk7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwoKVGhlIHhmc19idHJlZV9pbml0X2Jsb2NrX2ludCBt aWdodCBiZSBnb29kIGluIGl0J3Mgb3duIHBhdGNoLgoKPiArdm9pZAo+ICB4ZnNfYnRyZWVfaW5p dF9ibG9jaygKPiAgCXN0cnVjdCB4ZnNfbW91bnQgKm1wLAo+ICAJc3RydWN0IHhmc19idWYJKmJw LAo+ICAJX191MzIJCW1hZ2ljLAo+ICAJX191MTYJCWxldmVsLAo+ICAJX191MTYJCW51bXJlY3Ms Cj4gKwlfX3U2NAkJb3duZXIsCj4gIAl1bnNpZ25lZCBpbnQJZmxhZ3MpCj4gIHsKPiAtCXN0cnVj dCB4ZnNfYnRyZWVfYmxvY2sJKm5ldyA9IFhGU19CVUZfVE9fQkxPQ0soYnApOwo+IC0KPiAtCW5l dy0+YmJfbWFnaWMgPSBjcHVfdG9fYmUzMihtYWdpYyk7Cj4gLQluZXctPmJiX2xldmVsID0gY3B1 X3RvX2JlMTYobGV2ZWwpOwo+IC0JbmV3LT5iYl9udW1yZWNzID0gY3B1X3RvX2JlMTYobnVtcmVj cyk7Cj4gLQo+IC0JaWYgKGZsYWdzICYgWEZTX0JUUkVFX0xPTkdfUFRSUykgewo+IC0JCW5ldy0+ YmJfdS5sLmJiX2xlZnRzaWIgPSBjcHVfdG9fYmU2NChOVUxMREZTQk5PKTsKPiAtCQluZXctPmJi X3UubC5iYl9yaWdodHNpYiA9IGNwdV90b19iZTY0KE5VTExERlNCTk8pOwo+IC0JfSBlbHNlIHsK PiAtCQluZXctPmJiX3Uucy5iYl9sZWZ0c2liID0gY3B1X3RvX2JlMzIoTlVMTEFHQkxPQ0spOwo+ IC0JCW5ldy0+YmJfdS5zLmJiX3JpZ2h0c2liID0gY3B1X3RvX2JlMzIoTlVMTEFHQkxPQ0spOwo+ IC0JfQo+ICsJeGZzX2J0cmVlX2luaXRfYmxvY2tfaW50KG1wLCBYRlNfQlVGX1RPX0JMT0NLKGJw KSwgYnAtPmJfYm4sCj4gKwkJCQkgbWFnaWMsIGxldmVsLCBudW1yZWNzLCBvd25lciwgZmxhZ3Mp Owo+ICB9Cj4gIAo+ICBTVEFUSUMgdm9pZAo+ICB4ZnNfYnRyZWVfaW5pdF9ibG9ja19jdXIoCj4g IAlzdHJ1Y3QgeGZzX2J0cmVlX2N1cgkqY3VyLAo+ICsJc3RydWN0IHhmc19idWYJCSpicCwKPiAg CWludAkJCWxldmVsLAo+IC0JaW50CQkJbnVtcmVjcywKPiAtCXN0cnVjdCB4ZnNfYnVmCQkqYnAp Cj4gKwlpbnQJCQludW1yZWNzKQoKV2h5IHJlYXJyYW5nZSB0aGUgb3JkZXIgb2YgdGhlIGFyZ3Mg aGVyZT8KCj4gIHsKPiAtCXhmc19idHJlZV9pbml0X2Jsb2NrKGN1ci0+YmNfbXAsIGJwLCB4ZnNf bWFnaWNzW2N1ci0+YmNfYnRudW1dLAo+IC0JCQkgICAgICAgbGV2ZWwsIG51bXJlY3MsIGN1ci0+ YmNfZmxhZ3MpOwo+ICsJX191NjQgb3duZXI7Cj4gKwo+ICsJLyoKPiArCSAqIHdlIGNhbiBwdWxs IHRoZSBvd25lciBmcm9tIHRoZSBjdXJzb3IgcmlnaHQgbm93IGFzIHRoZSBkaWZmZXJlbnQKPiAr CSAqIG93bmVycyBhbGlnbiBkaXJlY3RseSB3aXRoIHRoZSBwb2ludGVyIHNpemUgb2YgdGhlIGJ0 cmVlLiBUaGlzIG1heQo+ICsJICogY2hhbmdlIGluIGZ1dHVyZSwgYnV0IGlzIHNhZmUgZm9yIGN1 cnJlbnQgdXNlcnMgb2YgdGhlIGdlbmVyaWMgYnRyZWUKPiArCSAqIGNvZGUuCj4gKwkgKi8KPiAr CWlmIChjdXItPmJjX2ZsYWdzICYgWEZTX0JUUkVFX0xPTkdfUFRSUykKPiArCQlvd25lciA9IGN1 ci0+YmNfcHJpdmF0ZS5iLmlwLT5pX2lubzsKPiArCWVsc2UKPiArCQlvd25lciA9IGN1ci0+YmNf cHJpdmF0ZS5hLmFnbm87CgpUaGlzIGlzIHNvbWV0aGluZyBJIGNhbiBsb29rIGludG8gYSBiaXQg bGF0ZXIuLi4gYnV0IEknbSBhIGxpdHRsZSBmbHVtbW94ZWQgYnkKdGhpcyBvbmUuICBBcHBhcmVu dGx5IG9ubHkgaW5vZGVzIHVzZSBsb25nIHBvaW50ZXJzPwoKPiArCj4gKwl4ZnNfYnRyZWVfaW5p dF9ibG9ja19pbnQoY3VyLT5iY19tcCwgWEZTX0JVRl9UT19CTE9DSyhicCksIGJwLT5iX2JuLAo+ ICsJCQkJIHhmc19idHJlZV9tYWdpYyhjdXIpLCBsZXZlbCwgbnVtcmVjcywKPiArCQkJCSBvd25l ciwgY3VyLT5iY19mbGFncyk7Cj4gIH0KPiAgCj4gIC8qCj4gICAqIFJldHVybiB0cnVlIGlmIHB0 ciBpcyB0aGUgbGFzdCByZWNvcmQgaW4gdGhlIGJ0cmVlIGFuZAo+IC0gKiB3ZSBuZWVkIHRvIHRy YWNrIHVwZGF0ZdGVIHRvIHRoaXMgcmVjb3JkLiAgVGhlIGRlY2lzaW9uCj4gKyAqIHdlIG5lZWQg dG8gdHJhY2sgdXBkYXRlcyB0byB0aGlzIHJlY29yZC4gIFRoZSBkZWNpc2lvbgoKSSBjYW4ndCBm aW5kIGEgY2hhbmdlIGluIHRoYXQgbGluZS4gIFRpbWUgZm9yIG5ldyBnbGFzc2VzPwoKPiAgICog d2lsbCBiZSBmdXJ0aGVyIHJlZmluZWQgaW4gdGhlIHVwZGF0ZV9sYXN0cmVjIG1ldGhvZC4KPiAg ICovCj4gIFNUQVRJQyBpbnQKPiBAQCAtMTE0Nyw2ICsxMjgyLDcgQEAgeGZzX2J0cmVlX2xvZ19r ZXlzKAo+ICAJWEZTX0JUUkVFX1RSQUNFX0FSR0JJSShjdXIsIGJwLCBmaXJzdCwgbGFzdCk7Cj4g IAo+ICAJaWYgKGJwKSB7Cj4gKwkJeGZzX3RyYW5zX2J1Zl9zZXRfdHlwZShjdXItPmJjX3RwLCBi cCwgWEZTX0JMRl9CVFJFRV9CVUYpOwo+ICAJCXhmc190cmFuc19sb2dfYnVmKGN1ci0+YmNfdHAs IGJwLAo+ICAJCQkJICB4ZnNfYnRyZWVfa2V5X29mZnNldChjdXIsIGZpcnN0KSwKPiAgCQkJCSAg eGZzX2J0cmVlX2tleV9vZmZzZXQoY3VyLCBsYXN0ICsgMSkgLSAxKTsKPiBAQCAtMTE3MSw2ICsx MzA3LDcgQEAgeGZzX2J0cmVlX2xvZ19yZWNzKAo+ICAJWEZTX0JUUkVFX1RSQUNFX0NVUlNPUihj dXIsIFhCVF9FTlRSWSk7Cj4gIAlYRlNfQlRSRUVfVFJBQ0VfQVJHQklJKGN1ciwgYnAsIGZpcnN0 LCBsYXN0KTsKPiAgCj4gKwl4ZnNfdHJhbnNfYnVmX3NldF90eXBlKGN1ci0+YmNfdHAsIGJwLCBY RlNfQkxGX0JUUkVFX0JVRik7Cj4gIAl4ZnNfdHJhbnNfbG9nX2J1ZihjdXItPmJjX3RwLCBicCwK PiAgCQkJICB4ZnNfYnRyZWVfcmVjX29mZnNldChjdXIsIGZpcnN0KSwKPiAgCQkJICB4ZnNfYnRy ZWVfcmVjX29mZnNldChjdXIsIGxhc3QgKyAxKSAtIDEpOwo+IEBAIC0xMTk1LDYgKzEzMzIsNyBA QCB4ZnNfYnRyZWVfbG9nX3B0cnMoCj4gIAkJc3RydWN0IHhmc19idHJlZV9ibG9jawkqYmxvY2sg PSBYRlNfQlVGX1RPX0JMT0NLKGJwKTsKPiAgCQlpbnQJCQlsZXZlbCA9IHhmc19idHJlZV9nZXRf bGV2ZWwoYmxvY2spOwo+ICAKPiArCQl4ZnNfdHJhbnNfYnVmX3NldF90eXBlKGN1ci0+YmNfdHAs IGJwLCBYRlNfQkxGX0JUUkVFX0JVRik7Cj4gIAkJeGZzX3RyYW5zX2xvZ19idWYoY3VyLT5iY190 cCwgYnAsCj4gIAkJCQl4ZnNfYnRyZWVfcHRyX29mZnNldChjdXIsIGZpcnN0LCBsZXZlbCksCj4g IAkJCQl4ZnNfYnRyZWVfcHRyX29mZnNldChjdXIsIGxhc3QgKyAxLCBsZXZlbCkgLSAxKTsKPiBA QCAtMTIyMyw3ICsxMzYxLDEyIEBAIHhmc19idHJlZV9sb2dfYmxvY2soCj4gIAkJb2Zmc2V0b2Yo c3RydWN0IHhmc19idHJlZV9ibG9jaywgYmJfbnVtcmVjcyksCj4gIAkJb2Zmc2V0b2Yoc3RydWN0 IHhmc19idHJlZV9ibG9jaywgYmJfdS5zLmJiX2xlZnRzaWIpLAo+ICAJCW9mZnNldG9mKHN0cnVj dCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3Uucy5iYl9yaWdodHNpYiksCj4gLQkJWEZTX0JUUkVFX1NC TE9DS19MRU4KPiArCQlvZmZzZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LnMuYmJf Ymxrbm8pLAo+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3Uucy5iYl9s c24pLAo+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3Uucy5iYl91dWlk KSwKPiArCQlvZmZzZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LnMuYmJfb3duZXIp LAo+ICsJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX3Uucy5iYl9jcmMpLAo+ ICsJCVhGU19CVFJFRV9TQkxPQ0tfQ1JDX0xFTgo+ICAJfTsKPiAgCXN0YXRpYyBjb25zdCBzaG9y dAlsb2Zmc2V0c1tdID0gewkvKiB0YWJsZSBvZiBvZmZzZXRzIChsb25nKSAqLwo+ICAJCW9mZnNl dG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2ssIGJiX21hZ2ljKSwKPiBAQCAtMTIzMSwxNyArMTM3 NCw0MCBAQCB4ZnNfYnRyZWVfbG9nX2Jsb2NrKAo+ICAJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRy ZWVfYmxvY2ssIGJiX251bXJlY3MpLAo+ICAJCW9mZnNldG9mKHN0cnVjdCB4ZnNfYnRyZWVfYmxv Y2ssIGJiX3UubC5iYl9sZWZ0c2liKSwKPiAgCQlvZmZzZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Js b2NrLCBiYl91LmwuYmJfcmlnaHRzaWIpLAo+IC0JCVhGU19CVFJFRV9MQkxPQ0tfTEVOCj4gKwkJ b2Zmc2V0b2Yoc3RydWN0IHhmc19idHJlZV9ibG9jaywgYmJfdS5sLmJiX2Jsa25vKSwKPiArCQlv ZmZzZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LmwuYmJfbHNuKSwKPiArCQlvZmZz ZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LmwuYmJfdXVpZCksCj4gKwkJb2Zmc2V0 b2Yoc3RydWN0IHhmc19idHJlZV9ibG9jaywgYmJfdS5sLmJiX293bmVyKSwKPiArCQlvZmZzZXRv ZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LmwuYmJfY3JjKSwKPiArCQlvZmZzZXRvZihz dHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LmwuYmJfcGFkKSwKPiArCQlYRlNfQlRSRUVfTEJM T0NLX0NSQ19MRU4KPiAgCX07Cj4gIAo+ICAJWEZTX0JUUkVFX1RSQUNFX0NVUlNPUihjdXIsIFhC VF9FTlRSWSk7Cj4gIAlYRlNfQlRSRUVfVFJBQ0VfQVJHQkkoY3VyLCBicCwgZmllbGRzKTsKPiAg Cj4gIAlpZiAoYnApIHsKPiArCQlpbnQgbmJpdHM7Cj4gKwo+ICsJCWlmIChjdXItPmJjX2ZsYWdz ICYgWEZTX0JUUkVFX0NSQ19CTE9DS1MpIHsKPiArCQkJLyoKPiArCQkJICogV2UgZG9uJ3QgbG9n IHRoZSBDUkMgd2hlbiB1cGRhdGluZyBhIGJ0cmVlCj4gKwkJCSAqIGJsb2NrIGJ1dCBpbnN0ZWFk IHJlY3JlYXRlIGl0IGR1cmluZyBsb2cKPiArCQkJICogcmVjb3ZlcnkuICBBcyB0aGUgbG9nIGJ1 ZmZlcnMgaGF2ZSBjaGVja3N1bXMKPiArCQkJICogb2YgdGhlaXIgdGhpcyBpcyBzYWZlIGFuZCBh dm9pZHMgbG9nZ2luZyBhIGNyYwoJCQkJICAgb3duCgo+ICsJCQkgKiB1cGRhdGUgaW4gYSBsb3Qg b2YgcGxhY2VzLgo+ICsJCQkgKi8KPiArCQkJaWYgKGZpZWxkcyA9PSBYRlNfQkJfQUxMX0JJVFMp Cj4gKwkJCQlmaWVsZHMgPSBYRlNfQkJfQUxMX0JJVFNfQ1JDOwo+ICsJCQluYml0cyA9IFhGU19C Ql9OVU1fQklUU19DUkM7Cj4gKwkJfSBlbHNlIHsKPiArCQkJbmJpdHMgPSBYRlNfQkJfTlVNX0JJ VFM7Cj4gKwkJfQo+ICAJCXhmc19idHJlZV9vZmZzZXRzKGZpZWxkcywKPiAgCQkJCSAgKGN1ci0+ YmNfZmxhZ3MgJiBYRlNfQlRSRUVfTE9OR19QVFJTKSA/Cj4gIAkJCQkJbG9mZnNldHMgOiBzb2Zm c2V0cywKPiAtCQkJCSAgWEZTX0JCX05VTV9CSVRTLCAmZmlyc3QsICZsYXN0KTsKPiArCQkJCSAg bmJpdHMsICZmaXJzdCwgJmxhc3QpOwo+ICsJCXhmc190cmFuc19idWZfc2V0X3R5cGUoY3VyLT5i Y190cCwgYnAsIFhGU19CTEZfQlRSRUVfQlVGKTsKPiAgCQl4ZnNfdHJhbnNfbG9nX2J1ZihjdXIt PmJjX3RwLCBicCwgZmlyc3QsIGxhc3QpOwo+ICAJfSBlbHNlIHsKPiAgCQl4ZnNfdHJhbnNfbG9n X2lub2RlKGN1ci0+YmNfdHAsIGN1ci0+YmNfcHJpdmF0ZS5iLmlwLAo+IEBAIC0yMjA0LDcgKzIz NzAsNyBAQCB4ZnNfYnRyZWVfc3BsaXQoCj4gIAkJZ290byBlcnJvcjA7Cj4gIAo+ICAJLyogRmls bCBpbiB0aGUgYnRyZWUgaGVhZGVyIGZvciB0aGUgbmV3IHJpZ2h0IGJsb2NrLiAqLwo+IC0JeGZz X2J0cmVlX2luaXRfYmxvY2tfY3VyKGN1ciwgeGZzX2J0cmVlX2dldF9sZXZlbChsZWZ0KSwgMCwg cmJwKTsKPiArCXhmc19idHJlZV9pbml0X2Jsb2NrX2N1cihjdXIsIHJicCwgeGZzX2J0cmVlX2dl dF9sZXZlbChsZWZ0KSwgMCk7Cj4gIAo+ICAJLyoKPiAgCSAqIFNwbGl0IHRoZSBlbnRyaWVzIGJl dHdlZW4gdGhlIG9sZCBhbmQgdGhlIG5ldyBibG9jayBldmVubHkuCj4gQEAgLTI1MTMsNyArMjY3 OSw3IEBAIHhmc19idHJlZV9uZXdfcm9vdCgKPiAgCQlucHRyID0gMjsKPiAgCX0KPiAgCS8qIEZp bGwgaW4gdGhlIG5ldyBibG9jaydzIGJ0cmVlIGhlYWRlciBhbmQgbG9nIGl0LiAqLwo+IC0JeGZz X2J0cmVlX2luaXRfYmxvY2tfY3VyKGN1ciwgY3VyLT5iY19ubGV2ZWxzLCAyLCBuYnApOwo+ICsJ eGZzX2J0cmVlX2luaXRfYmxvY2tfY3VyKGN1ciwgbmJwLCBjdXItPmJjX25sZXZlbHMsIDIpOwo+ ICAJeGZzX2J0cmVlX2xvZ19ibG9jayhjdXIsIG5icCwgWEZTX0JCX0FMTF9CSVRTKTsKPiAgCUFT U0VSVCgheGZzX2J0cmVlX3B0cl9pc19udWxsKGN1ciwgJmxwdHIpICYmCj4gIAkJCSF4ZnNfYnRy ZWVfcHRyX2lzX251bGwoY3VyLCAmcnB0cikpOwo+IGRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0 cmVlLmggYi9mcy94ZnMveGZzX2J0cmVlLmgKPiBpbmRleCBmOTMyODk3Li42ZTZjOTE1IDEwMDY0 NAo+IC0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuaAo+ICsrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuaAo+ IEBAIC00MiwxMSArNDIsMTUgQEAgZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfYnRyZWVfY3VyX3pv bmU7Cj4gICAqIEdlbmVyaWMgYnRyZWUgaGVhZGVyLgo+ICAgKgo+ICAgKiBUaGlzIGlzIGEgY29t YmluYXRpb24gb2YgdGhlIGFjdHVhbCBmb3JtYXQgdXNlZCBvbiBkaXNrIGZvciBzaG9ydCBhbmQg bG9uZwo+IC0gKiBmb3JtYXQgYnRyZWVzLiAgVGhlIGZpcnN0IHRocmVlIGZpZWxkcyBhcmUgc2hh cmVkIGJ5IGJvdGggZm9ybWF0LCBidXQKPiAtICogdGhlIHBvaW50ZXJzIGFyZSBkaWZmZXJlbnQg YW5kIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZS4KPiArICogZm9ybWF0IGJ0cmVlcy4gIFRoZSBm aXJzdCB0aHJlZSBmaWVsZHMgYXJlIHNoYXJlZCBieSBib3RoIGZvcm1hdCwgYnV0IHRoZQo+ICsg KiBwb2ludGVycyBhcmUgZGlmZmVyZW50IGFuZCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuCj4g ICAqCj4gLSAqIFRvIGdldCB0aGUgc2l6ZSBvZiB0aGUgYWN0dWFsIHNob3J0IG9yIGxvbmcgZm9y bSBoZWFkZXJzIHBsZWFzZSB1c2UKPiAtICogdGhlIHNpemUgbWFjcm9zIGJlbG93LiAgTmV2ZXIg dXNlIHNpemVvZih4ZnNfYnRyZWVfYmxvY2spLgo+ICsgKiBUbyBnZXQgdGhlIHNpemUgb2YgdGhl IGFjdHVhbCBzaG9ydCBvciBsb25nIGZvcm0gaGVhZGVycyBwbGVhc2UgdXNlIHRoZSBzaXplCj4g KyAqIG1hY3JvcyBiZWxvdy4gIE5ldmVyIHVzZSBzaXplb2YoeGZzX2J0cmVlX2Jsb2NrKS4KPiAr ICoKPiArICogVGhlIGJsa25vLCBjcmMsIGxzbiwgb3duZXIgYW5kIHV1aWQgZmllbGRzIGFyZSBv bmx5IGF2YWlsYWJsZSBpbiBmaWxlc3lzdGVtcwo+ICsgKiB3aXRoIHRoZSBjcmMgZmVhdHVyZSBi aXQsIGFuZCBhbGwgYWNjZXNzZXMgdG8gdGhlbSBtdXN0IGJlIGNvbmRpdGlvbmFsIG9uCj4gKyAq IHRoYXQgZmxhZy4KPiAgICovCj4gIHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sgewo+ICAJX19iZTMy CQliYl9tYWdpYzsJLyogbWFnaWMgbnVtYmVyIGZvciBibG9jayB0eXBlICovCj4gQEAgLTU2LDEw ICs2MCwyMyBAQCBzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrIHsKPiAgCQlzdHJ1Y3Qgewo+ICAJCQlf X2JlMzIJCWJiX2xlZnRzaWI7Cj4gIAkJCV9fYmUzMgkJYmJfcmlnaHRzaWI7Cj4gKwo+ICsJCQlf X2JlNjQJCWJiX2Jsa25vOwo+ICsJCQlfX2JlNjQJCWJiX2xzbjsKPiArCQkJdXVpZF90CQliYl91 dWlkOwo+ICsJCQlfX2JlMzIJCWJiX293bmVyOwo+ICsJCQlfX2xlMzIJCWJiX2NyYzsKPiAgCQl9 IHM7CQkJLyogc2hvcnQgZm9ybSBwb2ludGVycyAqLwo+ICAJCXN0cnVjdAl7Cj4gIAkJCV9fYmU2 NAkJYmJfbGVmdHNpYjsKPiAgCQkJX19iZTY0CQliYl9yaWdodHNpYjsKPiArCj4gKwkJCV9fYmU2 NAkJYmJfYmxrbm87Cj4gKwkJCV9fYmU2NAkJYmJfbHNuOwo+ICsJCQl1dWlkX3QJCWJiX3V1aWQ7 Cj4gKwkJCV9fYmU2NAkJYmJfb3duZXI7Cj4gKwkJCV9fbGUzMgkJYmJfY3JjOwo+ICsJCQlfX2Jl MzIJCWJiX3BhZDsgLyogcGFkZGluZyBmb3IgYWxpZ25tZW50ICovCj4gIAkJfSBsOwkJCS8qIGxv bmcgZm9ybSBwb2ludGVycyAqLwo+ICAJfSBiYl91OwkJCQkvKiByZXN0ICovCj4gIH07CgpzdHJ1 Y3QgeGZzX2J0cmVlX2Jsb2NrIHsKICAgICAgICBfX2JlMzIgICAgICAgICAgYmJfbWFnaWM7ICAg ICAgIC8qIG1hZ2ljIG51bWJlciBmb3IgYmxvY2sgdHlwZSAqLwogICAgICAgIF9fYmUxNiAgICAg ICAgICBiYl9sZXZlbDsgICAgICAgLyogMCBpcyBhIGxlYWYgKi8KICAgICAgICBfX2JlMTYgICAg ICAgICAgYmJfbnVtcmVjczsgICAgIC8qIGN1cnJlbnQgIyBvZiBkYXRhIHJlY29yZHMgKi8KICAg ICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAg ICAgICBfX2JlMzIgICAgICAgICAgYmJfbGVmdHNpYjsKICAgICAgICAgICAgICAgICAgICAgICAg X19iZTMyICAgICAgICAgIGJiX3JpZ2h0c2liOwoJCX0gczsJCQkvKiBzaG9ydCBmb3JtIHBvaW50 ZXJzICovCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBf X2JlMzIgICAgICAgICAgYmJfbGVmdHNpYjsKICAgICAgICAgICAgICAgICAgICAgICAgX19iZTMy ICAgICAgICAgIGJiX3JpZ2h0c2liOwogICAgICAgICAgICAgICAgICAgICAgICBfX2JlNjQgICAg ICAgICAgYmJfYmxrbm87CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYmU2NCAgICAgICAgICBi Yl9sc247CiAgICAgICAgICAgICAgICAgICAgICAgIHV1aWRfdCAgICAgICAgICBiYl91dWlkOwog ICAgICAgICAgICAgICAgICAgICAgICBfX2JlMzIgICAgICAgICAgYmJfb3duZXI7CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGUzMiAgICAgICAgICBiYl9jcmM7CiAgICAgICAgICAgICAgICB9 IHNfY3JjOwkJLyogc2hvcnQgZm9ybSBwb2ludGVycyB3aXRoIGNyY3MgKi8KICAgICAgICAgICAg ICAgIHN0cnVjdCAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2JlNjQgICAgICAgICAgYmJf bGVmdHNpYjsKICAgICAgICAgICAgICAgICAgICAgICAgX19iZTY0ICAgICAgICAgIGJiX3JpZ2h0 c2liOwoJCX0gbDsJCQkvKiBsb25nIGZvcm0gcG9pbnRlcnMgKi8KICAgICAgICAgICAgICAgIHN0 cnVjdCAgewogICAgICAgICAgICAgICAgICAgICAgICBfX2JlNjQgICAgICAgICAgYmJfbGVmdHNp YjsKICAgICAgICAgICAgICAgICAgICAgICAgX19iZTY0ICAgICAgICAgIGJiX3JpZ2h0c2liOwog ICAgICAgICAgICAgICAgICAgICAgICBfX2JlNjQgICAgICAgICAgYmJfYmxrbm87CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fYmU2NCAgICAgICAgICBiYl9sc247CiAgICAgICAgICAgICAgICAg ICAgICAgIHV1aWRfdCAgICAgICAgICBiYl91dWlkOwogICAgICAgICAgICAgICAgICAgICAgICBf X2JlNjQgICAgICAgICAgYmJfb3duZXI7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGUzMiAg ICAgICAgICBiYl9jcmM7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYmUzMiAgICAgICAgICBi Yl9wYWQ7IC8qIHBhZGRpbmcgZm9yIGFsaWdubWVudCAqLwogICAgICAgICAgICAgICAgfSBsX2Ny YzsJCS8qIGxvbmcgZm9ybSBwb2ludGVycyB3aXRoIGNyY3MgKi8KICAgICAgICB9IGJiX3U7ICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3QgKi8KfTsKCj4gQEAgLTY3LDYgKzg0LDE2IEBA IHN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sgewo+ICAjZGVmaW5lIFhGU19CVFJFRV9TQkxPQ0tfTEVO CTE2CS8qIHNpemUgb2YgYSBzaG9ydCBmb3JtIGJsb2NrICovCj4gICNkZWZpbmUgWEZTX0JUUkVF X0xCTE9DS19MRU4JMjQJLyogc2l6ZSBvZiBhIGxvbmcgZm9ybSBibG9jayAqLwo+ICAKPiArLyog c2l6ZXMgb2YgQ1JDIGVuYWJsZWQgYnRyZWUgYmxvY2tzICovCj4gKyNkZWZpbmUgWEZTX0JUUkVF X1NCTE9DS19DUkNfTEVOCShYRlNfQlRSRUVfU0JMT0NLX0xFTiArIDQwKQo+ICsjZGVmaW5lIFhG U19CVFJFRV9MQkxPQ0tfQ1JDX0xFTgkoWEZTX0JUUkVFX0xCTE9DS19MRU4gKyA0OCkKPiArCj4g Kwo+ICsjZGVmaW5lIFhGU19CVFJFRV9TQkxPQ0tfQ1JDX09GRiBcCj4gKwlvZmZzZXRvZihzdHJ1 Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91LnMuYmJfY3JjKQo+ICsjZGVmaW5lIFhGU19CVFJFRV9M QkxPQ0tfQ1JDX09GRiBcCj4gKwlvZmZzZXRvZihzdHJ1Y3QgeGZzX2J0cmVlX2Jsb2NrLCBiYl91 LmwuYmJfY3JjKQo+ICsKPiAgCj4gIC8qCj4gICAqIEdlbmVyaWMga2V5LCBwdHIgYW5kIHJlY29y ZCB3cmFwcGVyIHN0cnVjdHVyZXMuCj4gQEAgLTEwMSwxMyArMTI4LDExIEBAIHVuaW9uIHhmc19i dHJlZV9yZWMgewo+ICAjZGVmaW5lCVhGU19CQl9OVU1SRUNTCQkweDA0Cj4gICNkZWZpbmUJWEZT X0JCX0xFRlRTSUIJCTB4MDgKPiAgI2RlZmluZQlYRlNfQkJfUklHSFRTSUIJCTB4MTAKPiArI2Rl ZmluZQlYRlNfQkJfQkxLTk8JCTB4MjAKPiAgI2RlZmluZQlYRlNfQkJfTlVNX0JJVFMJCTUKPiAg I2RlZmluZQlYRlNfQkJfQUxMX0JJVFMJCSgoMSA8PCBYRlNfQkJfTlVNX0JJVFMpIC0gMSkKCkRp ZCBYRlNfQkJfQkxLTk8gc25lYWsgaW4gZnJvbSBhIHN1YnNlcXVlbnQgcGF0Y2g/Cgo+IC0KPiAt LyoKPiAtICogTWFnaWMgbnVtYmVycyBmb3IgYnRyZWUgYmxvY2tzLgo+IC0gKi8KPiAtZXh0ZXJu IGNvbnN0IF9fdWludDMyX3QJeGZzX21hZ2ljc1tdOwo+ICsjZGVmaW5lCVhGU19CQl9OVU1fQklU U19DUkMJOAo+ICsjZGVmaW5lCVhGU19CQl9BTExfQklUU19DUkMJKCgxIDw8IFhGU19CQl9OVU1f QklUU19DUkMpIC0gMSkKCkknbSBhIGxpdHRsZSBjb25mdXNlZCBoZXJlLiAgV2Ugd2VyZSB1c2lu ZyA1IGJpdHMsIHlvdSBhZGRlZCBCQl9CTEtOTyBmb3IgNiwKYW5kIG5vdyB5b3UncmUgc2V0dGlu ZyBOVU1fQklUU19DUkMgdG8gOD8KClByb2JhYmx5IG1vcmUgcmVhZGFibGUgd2l0aCB0aGUgKDE8 PDApIGlkaW9tLCBhcyBiZWxvdy4KIAo+ICAvKgo+ICAgKiBHZW5lcmljIHN0YXRzIGludGVyZmFj ZQo+IEBAIC0yNTYsNiArMjgxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGZzX2J0cmVlX2N1cgo+ICAj ZGVmaW5lIFhGU19CVFJFRV9MT05HX1BUUlMJCSgxPDwwKQkvKiBwb2ludGVycyBhcmUgNjRiaXRz IGxvbmcgKi8KPiAgI2RlZmluZSBYRlNfQlRSRUVfUk9PVF9JTl9JTk9ERQkJKDE8PDEpCS8qIHJv b3QgbWF5IGJlIHZhcmlhYmxlIHNpemUgKi8KPiAgI2RlZmluZSBYRlNfQlRSRUVfTEFTVFJFQ19V UERBVEUJKDE8PDIpCS8qIHRyYWNrIGxhc3QgcmVjIGV4dGVybmFsbHkgKi8KPiArI2RlZmluZSBY RlNfQlRSRUVfQ1JDX0JMT0NLUwkJKDE8PDMpCS8qIHVzZXMgZXh0ZW5kZWQgYnRyZWUgYmxvY2tz ICovCj4gIAo+ICAKPiAgI2RlZmluZQlYRlNfQlRSRUVfTk9FUlJPUgkwCj4gQEAgLTM5Myw4ICs0 MTksMjAgQEAgeGZzX2J0cmVlX2luaXRfYmxvY2soCj4gIAlfX3UzMgkJbWFnaWMsCj4gIAlfX3Ux NgkJbGV2ZWwsCj4gIAlfX3UxNgkJbnVtcmVjcywKPiArCV9fdTY0CQlvd25lciwKPiAgCXVuc2ln bmVkIGludAlmbGFncyk7Cj4gIAo+ICt2b2lkCj4gK3hmc19idHJlZV9pbml0X2Jsb2NrX2ludCgK PiArCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAo+ICsJc3RydWN0IHhmc19idHJlZV9ibG9jawkqYnVm LAo+ICsJeGZzX2RhZGRyX3QJCWJsa25vLAo+ICsJX191MzIJCQltYWdpYywKPiArCV9fdTE2CQkJ bGV2ZWwsCj4gKwlfX3UxNgkJCW51bXJlY3MsCj4gKwlfX3U2NAkJCW93bmVyLAo+ICsJdW5zaWdu ZWQgaW50CQlmbGFncyk7Cj4gKwo+ICAvKgo+ICAgKiBDb21tb24gYnRyZWUgY29yZSBlbnRyeSBw b2ludHMuCj4gICAqLwo+IEBAIC00MDgsNiArNDQ2LDE0IEBAIGludCB4ZnNfYnRyZWVfZGVsZXRl KHN0cnVjdCB4ZnNfYnRyZWVfY3VyICosIGludCAqKTsKPiAgaW50IHhmc19idHJlZV9nZXRfcmVj KHN0cnVjdCB4ZnNfYnRyZWVfY3VyICosIHVuaW9uIHhmc19idHJlZV9yZWMgKiosIGludCAqKTsK PiAgCj4gIC8qCj4gKyAqIGJ0cmVlIGJsb2NrIENSQyBoZWxwZXJzCj4gKyAqLwo+ICt2b2lkIHhm c19idHJlZV9sYmxvY2tfY2FsY19jcmMoc3RydWN0IHhmc19idWYgKik7Cj4gK2Jvb2wgeGZzX2J0 cmVlX2xibG9ja192ZXJpZnlfY3JjKHN0cnVjdCB4ZnNfYnVmICopOwo+ICt2b2lkIHhmc19idHJl ZV9zYmxvY2tfY2FsY19jcmMoc3RydWN0IHhmc19idWYgKik7Cj4gK2Jvb2wgeGZzX2J0cmVlX3Ni bG9ja192ZXJpZnlfY3JjKHN0cnVjdCB4ZnNfYnVmICopOwo+ICsKPiArLyoKPiAgICogSW50ZXJu YWwgYnRyZWUgaGVscGVycyBhbHNvIHVzZWQgYnkgeGZzX2JtYXAuYy4KPiAgICovCj4gIHZvaWQg eGZzX2J0cmVlX2xvZ19ibG9jayhzdHJ1Y3QgeGZzX2J0cmVlX2N1ciAqLCBzdHJ1Y3QgeGZzX2J1 ZiAqLCBpbnQpOwo+IGRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmggYi9mcy94ZnMv eGZzX2J1Zl9pdGVtLmgKPiBpbmRleCBlZTM2Yzg4Li4xMDFlZjgzIDEwMDY0NAo+IC0tLSBhL2Zz L3hmcy94ZnNfYnVmX2l0ZW0uaAo+ICsrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uaAo+IEBAIC0y NCwxOSArMjQsMzMgQEAgZXh0ZXJuIGttZW1fem9uZV90CSp4ZnNfYnVmX2l0ZW1fem9uZTsKPiAg ICogVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBidWZmZXIgY29udGFpbnMgb24gZGlzayBp bm9kZXMKPiAgICogYW5kIHJlcXVpcmVzIHNwZWNpYWwgcmVjb3ZlcnkgaGFuZGxpbmcuCj4gICAq Lwo+IC0jZGVmaW5lCVhGU19CTEZfSU5PREVfQlVGCTB4MQo+ICsjZGVmaW5lCVhGU19CTEZfSU5P REVfQlVGCSgxPDwwKQo+ICAvKgo+ICAgKiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhlIGJ1 ZmZlciBzaG91bGQgbm90IGJlIHJlcGxheWVkCj4gICAqIGR1cmluZyByZWNvdmVyeSBiZWNhdXNl IGl0cyBibG9ja3MgYXJlIGJlaW5nIGZyZWVkLgo+ICAgKi8KPiAtI2RlZmluZQlYRlNfQkxGX0NB TkNFTAkJMHgyCj4gKyNkZWZpbmUJWEZTX0JMRl9DQU5DRUwJCSgxPDwxKQo+ICsKPiAgLyoKPiAg ICogVGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IHRoZSBidWZmZXIgY29udGFpbnMgb24gZGlzawo+ ICAgKiB1c2VyIG9yIGdyb3VwIGRxdW90cyBhbmQgbWF5IHJlcXVpcmUgc3BlY2lhbCByZWNvdmVy eSBoYW5kbGluZy4KPiAgICovCj4gLSNkZWZpbmUJWEZTX0JMRl9VRFFVT1RfQlVGCTB4NAo+IC0j ZGVmaW5lIFhGU19CTEZfUERRVU9UX0JVRgkweDgKPiAtI2RlZmluZQlYRlNfQkxGX0dEUVVPVF9C VUYJMHgxMAo+ICsjZGVmaW5lCVhGU19CTEZfVURRVU9UX0JVRgkoMTw8MikKPiArI2RlZmluZSBY RlNfQkxGX1BEUVVPVF9CVUYJKDE8PDMpCj4gKyNkZWZpbmUJWEZTX0JMRl9HRFFVT1RfQlVGCSgx PDw0KQo+ICsKPiArLyoKPiArICogYWxsIGJ1ZmZlcnMgbm93IG5lZWQgZmxhZ3MgdG8gdGVsbCBy ZWNvdmVyeSB3aGVyZSB0aGUgbWFnaWMgbnVtYmVyCj4gKyAqIGlzIHNvIHRoYXQgaXQgY2FuIHZl cmlmeSBhbmQgY2FsY3VsYXRlIHRoZSBDUkNzIG9uIHRoZSBidWZmZXIgY29ycmVjdGx5Cj4gKyAq IG9uY2UgdGhlIGNoYW5nZXMgaGF2ZSBiZWVuIHJlcGxheWVkIGludG8gdGhlIGJ1ZmZlci4KPiAr ICovCj4gKyNkZWZpbmUgWEZTX0JMRl9CVFJFRV9CVUYJKDE8PDUpCj4gKwo+ICsjZGVmaW5lIFhG U19CTEZfVFlQRV9NQVNLCVwKPiArCQkoWEZTX0JMRl9VRFFVT1RfQlVGIHwgXAo+ICsJCSBYRlNf QkxGX1BEUVVPVF9CVUYgfCBcCj4gKwkJIFhGU19CTEZfR0RRVU9UX0JVRiB8IFwKPiArCQkgWEZT X0JMRl9CVFJFRV9CVUYpCj4gIAo+ICAjZGVmaW5lCVhGU19CTEZfQ0hVTksJCTEyOAo+ICAjZGVm aW5lCVhGU19CTEZfU0hJRlQJCTcKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaW5vZGUuaCBi L2ZzL3hmcy94ZnNfZGlub2RlLmgKPiBpbmRleCA4OGEzMzY4Li42YjViZDE3IDEwMDY0NAo+IC0t LSBhL2ZzL3hmcy94ZnNfZGlub2RlLmgKPiArKysgYi9mcy94ZnMveGZzX2Rpbm9kZS5oCj4gQEAg LTEwNyw4ICsxMDcsOCBAQCB0eXBlZGVmIGVudW0geGZzX2Rpbm9kZV9mbXQgewo+ICAjZGVmaW5l IFhGU19MSVRJTk8obXAsIHZlcnNpb24pIFwKPiAgCSgoaW50KSgoKG1wKS0+bV9zYi5zYl9pbm9k ZXNpemUpIC0gc2l6ZW9mKHN0cnVjdCB4ZnNfZGlub2RlKSkpCj4gIAo+IC0jZGVmaW5lCVhGU19C Uk9PVF9TSVpFX0FESglcCj4gLQkoWEZTX0JUUkVFX0xCTE9DS19MRU4gLSBzaXplb2YoeGZzX2Jt ZHJfYmxvY2tfdCkpCj4gKyNkZWZpbmUgWEZTX0JST09UX1NJWkVfQURKKGlwKSBcCj4gKwkoWEZT X0JNQlRfQkxPQ0tfTEVOKChpcCktPmlfbW91bnQpIC0gc2l6ZW9mKHhmc19ibWRyX2Jsb2NrX3Qp KQoKQSBnb29kIGNhbmRpZGF0ZSBmb3IgYSBzZXBhcmF0ZSBwYXRjaC4KCj4gIAo+ICAvKgo+ICAg KiBJbm9kZSBkYXRhICYgYXR0cmlidXRlIGZvcmsgc2l6ZXMsIHBlciBpbm9kZS4KPiBkaWZmIC0t Z2l0IGEvZnMveGZzL3hmc19mc29wcy5jIGIvZnMveGZzL3hmc19mc29wcy5jCj4gaW5kZXggOTRl YWVlZC4uNTBjNDNlYyAxMDA2NDQKPiAtLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKPiArKysgYi9m cy94ZnMveGZzX2Zzb3BzLmMKPiBAQCAtMzE2LDcgKzMxNiwxMyBAQCB4ZnNfZ3Jvd2ZzX2RhdGFf cHJpdmF0ZSgKPiAgCQkJZ290byBlcnJvcjA7Cj4gIAkJfQo+ICAKPiAtCQl4ZnNfYnRyZWVfaW5p dF9ibG9jayhtcCwgYnAsIFhGU19BQlRCX01BR0lDLCAwLCAxLCAwKTsKPiArCQlpZiAoeGZzX3Ni X3ZlcnNpb25faGFzY3JjKCZtcC0+bV9zYikpCj4gKwkJCXhmc19idHJlZV9pbml0X2Jsb2NrKG1w LCBicCwgWEZTX0FCVEJfQ1JDX01BR0lDLCAwLCAxLAo+ICsJCQkJCQlhZ25vLCBYRlNfQlRSRUVf Q1JDX0JMT0NLUyk7Cj4gKwkJZWxzZQo+ICsJCQl4ZnNfYnRyZWVfaW5pdF9ibG9jayhtcCwgYnAs IFhGU19BQlRCX01BR0lDLCAwLCAxLAo+ICsJCQkJCQlhZ25vLCAwKTsKPiArCj4gIAkJYXJlYyA9 IFhGU19BTExPQ19SRUNfQUREUihtcCwgWEZTX0JVRl9UT19CTE9DSyhicCksIDEpOwo+ICAJCWFy ZWMtPmFyX3N0YXJ0YmxvY2sgPSBjcHVfdG9fYmUzMihYRlNfUFJFQUxMT0NfQkxPQ0tTKG1wKSk7 Cj4gIAkJYXJlYy0+YXJfYmxvY2tjb3VudCA9IGNwdV90b19iZTMyKAo+IEBAIC0zMzksNyArMzQ1 LDEzIEBAIHhmc19ncm93ZnNfZGF0YV9wcml2YXRlKAo+ICAJCQlnb3RvIGVycm9yMDsKPiAgCQl9 Cj4gIAo+IC0JCXhmc19idHJlZV9pbml0X2Jsb2NrKG1wLCBicCwgWEZTX0FCVENfTUFHSUMsIDAs IDEsIDApOwo+ICsJCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNjcmMoJm1wLT5tX3NiKSkKPiArCQkJ eGZzX2J0cmVlX2luaXRfYmxvY2sobXAsIGJwLCBYRlNfQUJUQ19DUkNfTUFHSUMsIDAsIDEsCj4g KwkJCQkJCWFnbm8sIFhGU19CVFJFRV9DUkNfQkxPQ0tTKTsKPiArCQllbHNlCj4gKwkJCXhmc19i dHJlZV9pbml0X2Jsb2NrKG1wLCBicCwgWEZTX0FCVENfTUFHSUMsIDAsIDEsCj4gKwkJCQkJCWFn bm8sIDApOwo+ICsKPiAgCQlhcmVjID0gWEZTX0FMTE9DX1JFQ19BRERSKG1wLCBYRlNfQlVGX1RP X0JMT0NLKGJwKSwgMSk7Cj4gIAkJYXJlYy0+YXJfc3RhcnRibG9jayA9IGNwdV90b19iZTMyKFhG U19QUkVBTExPQ19CTE9DS1MobXApKTsKPiAgCQlhcmVjLT5hcl9ibG9ja2NvdW50ID0gY3B1X3Rv X2JlMzIoCj4gQEAgLTM2Myw3ICszNzUsMTIgQEAgeGZzX2dyb3dmc19kYXRhX3ByaXZhdGUoCj4g IAkJCWdvdG8gZXJyb3IwOwo+ICAJCX0KPiAgCj4gLQkJeGZzX2J0cmVlX2luaXRfYmxvY2sobXAs IGJwLCBYRlNfSUJUX01BR0lDLCAwLCAwLCAwKTsKPiArCQlpZiAoeGZzX3NiX3ZlcnNpb25faGFz Y3JjKCZtcC0+bV9zYikpCj4gKwkJCXhmc19idHJlZV9pbml0X2Jsb2NrKG1wLCBicCwgWEZTX0lC VF9DUkNfTUFHSUMsIDAsIDAsCj4gKwkJCQkJCWFnbm8sIFhGU19CVFJFRV9DUkNfQkxPQ0tTKTsK PiArCQllbHNlCj4gKwkJCXhmc19idHJlZV9pbml0X2Jsb2NrKG1wLCBicCwgWEZTX0lCVF9NQUdJ QywgMCwgMCwKPiArCQkJCQkJYWdubywgMCk7Cj4gIAo+ICAJCWVycm9yID0geGZzX2J3cml0ZShi cCk7Cj4gIAkJeGZzX2J1Zl9yZWxzZShicCk7Cj4gZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaWFs bG9jX2J0cmVlLmMgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5jCj4gaW5kZXggYmVjMzQ0Yi4u YzgyYWM4OCAxMDA2NDQKPiAtLS0gYS9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5jCj4gKysrIGIv ZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYwo+IEBAIC0zNCw2ICszNCw3IEBACj4gICNpbmNsdWRl ICJ4ZnNfYWxsb2MuaCIKPiAgI2luY2x1ZGUgInhmc19lcnJvci5oIgo+ICAjaW5jbHVkZSAieGZz X3RyYWNlLmgiCj4gKyNpbmNsdWRlICJ4ZnNfY2tzdW0uaCIKPiAgCj4gIAo+ICBTVEFUSUMgaW50 Cj4gQEAgLTE4Miw1MiArMTgzLDg4IEBAIHhmc19pbm9idF9rZXlfZGlmZigKPiAgCQkJICBjdXIt PmJjX3JlYy5pLmlyX3N0YXJ0aW5vOwo+ICB9Cj4gIAo+IC12b2lkCj4gK3N0YXRpYyBpbnQKPiAg eGZzX2lub2J0X3ZlcmlmeSgKPiAgCXN0cnVjdCB4ZnNfYnVmCQkqYnApCj4gIHsKPiAgCXN0cnVj dCB4ZnNfbW91bnQJKm1wID0gYnAtPmJfdGFyZ2V0LT5idF9tb3VudDsKPiAgCXN0cnVjdCB4ZnNf YnRyZWVfYmxvY2sJKmJsb2NrID0gWEZTX0JVRl9UT19CTE9DSyhicCk7Cj4gKwlzdHJ1Y3QgeGZz X3BlcmFnCSpwYWcgPSBicC0+Yl9wYWc7Cj4gIAl1bnNpZ25lZCBpbnQJCWxldmVsOwo+IC0JaW50 CQkJc2Jsb2NrX29rOyAvKiBibG9jayBwYXNzZXMgY2hlY2tzICovCj4gIAo+IC0JLyogbWFnaWMg bnVtYmVyIGFuZCBsZXZlbCB2ZXJpZmljYXRpb24gKi8KPiAtCWxldmVsID0gYmUxNl90b19jcHUo YmxvY2stPmJiX2xldmVsKTsKPiAtCXNibG9ja19vayA9IGJsb2NrLT5iYl9tYWdpYyA9PSBjcHVf dG9fYmUzMihYRlNfSUJUX01BR0lDKSAmJgo+IC0JCSAgICBsZXZlbCA8IG1wLT5tX2luX21heGxl dmVsczsKPiArCS8qCj4gKwkgKiBEdXJpbmcgZ3Jvd2ZzIG9wZXJhdGlvbnMsIHdlIGNhbid0IHZl cmlmeSB0aGUgZXhhY3Qgb3duZXIgYXMgdGhlCj4gKwkgKiBwZXJhZyBpcyBub3QgZnVsbHkgaW5p dGlhbGlzZWQgYW5kIGhlbmNlIG5vdCBhdHRhY2hlZCB0byB0aGUgYnVmZmVyLgo+ICsJICoKPiAr CSAqIFNpbWlsYXJseSwgZHVyaW5nIGxvZyByZWNvdmVyeSB3ZSB3aWxsIGhhdmUgYSBwZXJhZyBz dHJ1Y3R1cmUKPiArCSAqIGF0dGFjaGVkLCBidXQgdGhlIGFnaSBpbmZvcm1hdGlvbiB3aWxsIG5v dCB5ZXQgaGF2ZSBiZWVuIGluaXRpYWxpc2VkCj4gKwkgKiBmcm9tIHRoZSBvbiBkaXNrIEFHSS4g V2UgZG9uJ3QgY3VycmVudGx5IHVzZSBhbnkgb2YgdGhpcyBpbmZvcm1hdGlvbiwKPiArCSAqIGJ1 dCBiZXdhcmUgb2YgdGhlIGxhbmRtaW5lIChpLmUuIG5lZWQgdG8gY2hlY2sgcGFnLT5wYWdpX2lu aXQpIGlmIHdlCj4gKwkgKiBldmVyIGRvLgo+ICsJICovCj4gKwlzd2l0Y2ggKGJsb2NrLT5iYl9t YWdpYykgewo+ICsJY2FzZSBjcHVfdG9fYmUzMihYRlNfSUJUX0NSQ19NQUdJQyk6Cj4gKwkJaWYg KCF4ZnNfc2JfdmVyc2lvbl9oYXNjcmMoJm1wLT5tX3NiKSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ ICsJCWlmICghdXVpZF9lcXVhbCgmYmxvY2stPmJiX3Uucy5iYl91dWlkLCAmbXAtPm1fc2Iuc2Jf dXVpZCkpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQlpZiAoYmxvY2stPmJiX3Uucy5iYl9ibGtu byAhPSBjcHVfdG9fYmU2NChicC0+Yl9ibikpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQlpZiAo cGFnICYmCj4gKwkJICAgIGJlMzJfdG9fY3B1KGJsb2NrLT5iYl91LnMuYmJfb3duZXIpICE9IHBh Zy0+cGFnX2Fnbm8pCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQkvKiBmYWxsIHRocm91Z2ggKi8K PiArCWNhc2UgY3B1X3RvX2JlMzIoWEZTX0lCVF9NQUdJQyk6Cj4gKwkJYnJlYWs7Cj4gKwlkZWZh dWx0Ogo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICAKPiAtCS8qIG51bXJlY3MgdmVyaWZpY2F0aW9u ICovCj4gLQlzYmxvY2tfb2sgPSBzYmxvY2tfb2sgJiYKPiAtCQliZTE2X3RvX2NwdShibG9jay0+ YmJfbnVtcmVjcykgPD0gbXAtPm1faW5vYnRfbXhyW2xldmVsICE9IDBdOwo+ICsJLyogbnVtcmVj cyBhbmQgbGV2ZWwgdmVyaWZpY2F0aW9uICovCj4gKwlsZXZlbCA9IGJlMTZfdG9fY3B1KGJsb2Nr LT5iYl9sZXZlbCk7Cj4gKwlpZiAobGV2ZWwgPj0gbXAtPm1faW5fbWF4bGV2ZWxzKQo+ICsJCXJl dHVybiBmYWxzZTsKPiArCWlmIChiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykgPiBtcC0+ bV9pbm9idF9teHJbbGV2ZWwgIT0gMF0pCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICAKPiAgCS8qIHNp YmxpbmcgcG9pbnRlciB2ZXJpZmljYXRpb24gKi8KPiAtCXNibG9ja19vayA9IHNibG9ja19vayAm Jgo+IC0JCShibG9jay0+YmJfdS5zLmJiX2xlZnRzaWIgPT0gY3B1X3RvX2JlMzIoTlVMTEFHQkxP Q0spIHx8Cj4gLQkJIGJlMzJfdG9fY3B1KGJsb2NrLT5iYl91LnMuYmJfbGVmdHNpYikgPCBtcC0+ bV9zYi5zYl9hZ2Jsb2NrcykgJiYKPiAtCQlibG9jay0+YmJfdS5zLmJiX2xlZnRzaWIgJiYKPiAt CQkoYmxvY2stPmJiX3Uucy5iYl9yaWdodHNpYiA9PSBjcHVfdG9fYmUzMihOVUxMQUdCTE9DSykg fHwKPiAtCQkgYmUzMl90b19jcHUoYmxvY2stPmJiX3Uucy5iYl9yaWdodHNpYikgPCBtcC0+bV9z Yi5zYl9hZ2Jsb2NrcykgJiYKPiAtCQlibG9jay0+YmJfdS5zLmJiX3JpZ2h0c2liOwo+IC0KPiAt CWlmICghc2Jsb2NrX29rKSB7Cj4gLQkJdHJhY2VfeGZzX2J0cmVlX2NvcnJ1cHQoYnAsIF9SRVRf SVBfKTsKPiAtCQlYRlNfQ09SUlVQVElPTl9FUlJPUihfX2Z1bmNfXywgWEZTX0VSUkxFVkVMX0xP VywgbXAsIGJsb2NrKTsKPiAtCQl4ZnNfYnVmX2lvZXJyb3IoYnAsIEVGU0NPUlJVUFRFRCk7Cj4g LQl9Cj4gKwlpZiAoIWJsb2NrLT5iYl91LnMuYmJfbGVmdHNpYiB8fAo+ICsJICAgIChiZTMyX3Rv X2NwdShibG9jay0+YmJfdS5zLmJiX2xlZnRzaWIpID49IG1wLT5tX3NiLnNiX2FnYmxvY2tzICYm Cj4gKwkgICAgIGJsb2NrLT5iYl91LnMuYmJfbGVmdHNpYiAhPSBjcHVfdG9fYmUzMihOVUxMQUdC TE9DSykpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCWlmICghYmxvY2stPmJiX3Uucy5iYl9yaWdo dHNpYiB8fAo+ICsJICAgIChiZTMyX3RvX2NwdShibG9jay0+YmJfdS5zLmJiX3JpZ2h0c2liKSA+ PSBtcC0+bV9zYi5zYl9hZ2Jsb2NrcyAmJgo+ICsJICAgICBibG9jay0+YmJfdS5zLmJiX3JpZ2h0 c2liICE9IGNwdV90b19iZTMyKE5VTExBR0JMT0NLKSkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCXJldHVybiB0cnVlOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZAo+ICB4ZnNfaW5vYnRfcmVh ZF92ZXJpZnkoCj4gIAlzdHJ1Y3QgeGZzX2J1ZgkqYnApCj4gIHsKPiAtCXhmc19pbm9idF92ZXJp ZnkoYnApOwo+ICsJaWYgKCEoeGZzX2J0cmVlX3NibG9ja192ZXJpZnlfY3JjKGJwKSAmJgo+ICsJ ICAgICAgeGZzX2lub2J0X3ZlcmlmeShicCkpKSB7Cj4gKwkJdHJhY2VfeGZzX2J0cmVlX2NvcnJ1 cHQoYnAsIF9SRVRfSVBfKTsKPiArCQlYRlNfQ09SUlVQVElPTl9FUlJPUihfX2Z1bmNfXywgWEZT X0VSUkxFVkVMX0xPVywKPiArCQkJCSAgICAgYnAtPmJfdGFyZ2V0LT5idF9tb3VudCwgYnAtPmJf YWRkcik7Cj4gKwkJeGZzX2J1Zl9pb2Vycm9yKGJwLCBFRlNDT1JSVVBURUQpOwo+ICsJfQo+ICB9 Cj4gIAo+ICBzdGF0aWMgdm9pZAo+ICB4ZnNfaW5vYnRfd3JpdGVfdmVyaWZ5KAo+ICAJc3RydWN0 IHhmc19idWYJKmJwKQo+ICB7Cj4gLQl4ZnNfaW5vYnRfdmVyaWZ5KGJwKTsKPiArCWlmICgheGZz X2lub2J0X3ZlcmlmeShicCkpIHsKPiArCQl0cmFjZV94ZnNfYnRyZWVfY29ycnVwdChicCwgX1JF VF9JUF8pOwo+ICsJCVhGU19DT1JSVVBUSU9OX0VSUk9SKF9fZnVuY19fLCBYRlNfRVJSTEVWRUxf TE9XLAo+ICsJCQkJICAgICBicC0+Yl90YXJnZXQtPmJ0X21vdW50LCBicC0+Yl9hZGRyKTsKPiAr CQl4ZnNfYnVmX2lvZXJyb3IoYnAsIEVGU0NPUlJVUFRFRCk7Cj4gKwl9Cj4gKwl4ZnNfYnRyZWVf c2Jsb2NrX2NhbGNfY3JjKGJwKTsKPiArCj4gIH0KPiAgCj4gIGNvbnN0IHN0cnVjdCB4ZnNfYnVm X29wcyB4ZnNfaW5vYnRfYnVmX29wcyA9IHsKPiBAQCAtMzAxLDYgKzMzOCw4IEBAIHhmc19pbm9i dF9pbml0X2N1cnNvcigKPiAgCWN1ci0+YmNfYmxvY2tsb2cgPSBtcC0+bV9zYi5zYl9ibG9ja2xv ZzsKPiAgCj4gIAljdXItPmJjX29wcyA9ICZ4ZnNfaW5vYnRfb3BzOwo+ICsJaWYgKHhmc19zYl92 ZXJzaW9uX2hhc2NyYygmbXAtPm1fc2IpKQo+ICsJCWN1ci0+YmNfZmxhZ3MgfD0gWEZTX0JUUkVF X0NSQ19CTE9DS1M7Cj4gIAo+ICAJY3VyLT5iY19wcml2YXRlLmEuYWdicCA9IGFnYnA7Cj4gIAlj dXItPmJjX3ByaXZhdGUuYS5hZ25vID0gYWdubzsKPiBkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19p YWxsb2NfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmgKPiBpbmRleCAyNWMwMjM5 Li43OGRmZDFlIDEwMDY0NAo+IC0tLSBhL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmgKPiArKysg Yi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5oCj4gQEAgLTI5LDcgKzI5LDggQEAgc3RydWN0IHhm c19tb3VudDsKPiAgLyoKPiAgICogVGhlcmUgaXMgYSBidHJlZSBmb3IgdGhlIGlub2RlIG1hcCBw ZXIgYWxsb2NhdGlvbiBncm91cC4KPiAgICovCj4gLSNkZWZpbmUJWEZTX0lCVF9NQUdJQwkweDQ5 NDE0MjU0CS8qICdJQUJUJyAqLwo+ICsjZGVmaW5lCVhGU19JQlRfTUFHSUMJCTB4NDk0MTQyNTQJ LyogJ0lBQlQnICovCj4gKyNkZWZpbmUJWEZTX0lCVF9DUkNfTUFHSUMJMHg0OTQxNDI1YwoKLyog J0lBQj8nICovCgo+ICAKPiAgdHlwZWRlZglfX3VpbnQ2NF90CXhmc19pbm9mcmVlX3Q7Cj4gICNk ZWZpbmUJWEZTX0lOT0RFU19QRVJfQ0hVTksJCShOQkJZICogc2l6ZW9mKHhmc19pbm9mcmVlX3Qp KQo+IEBAIC03NiwxMCArNzcsMTAgQEAgdHlwZWRlZiBfX2JlMzIgeGZzX2lub2J0X3B0cl90Owo+ ICAKPiAgLyoKPiAgICogQnRyZWUgYmxvY2sgaGVhZGVyIHNpemUgZGVwZW5kcyBvbiBhIHN1cGVy YmxvY2sgZmxhZy4KPiAtICoKPiAtICogKG5vdCBxdWl0ZSB5ZXQsIGJ1dCBzb29uKQo+ICAgKi8K PiAtI2RlZmluZSBYRlNfSU5PQlRfQkxPQ0tfTEVOKG1wKQlYRlNfQlRSRUVfU0JMT0NLX0xFTgo+ ICsjZGVmaW5lIFhGU19JTk9CVF9CTE9DS19MRU4obXApIFwKPiArCSh4ZnNfc2JfdmVyc2lvbl9o YXNjcmMoJigobXApLT5tX3NiKSkgPyBcCj4gKwkJWEZTX0JUUkVFX1NCTE9DS19DUkNfTEVOIDog WEZTX0JUUkVFX1NCTE9DS19MRU4pCj4gIAo+ICAvKgo+ICAgKiBSZWNvcmQsIGtleSwgYW5kIHBv aW50ZXIgYWRkcmVzcyBtYWNyb3MgZm9yIGJ0cmVlIGJsb2Nrcy4KPiBkaWZmIC0tZ2l0IGEvZnMv eGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCj4gaW5kZXggNGYyMDE2NS4uMjAy Y2UzNyAxMDA2NDQKPiAtLS0gYS9mcy94ZnMveGZzX2lub2RlLmMKPiArKysgYi9mcy94ZnMveGZz X2lub2RlLmMKPiBAQCAtNzg2LDYgKzc4Niw3IEBAIHhmc19pZm9ybWF0X2J0cmVlKAo+ICAJeGZz X2Rpbm9kZV90CQkqZGlwLAo+ICAJaW50CQkJd2hpY2hmb3JrKQo+ICB7Cj4gKwlzdHJ1Y3QgeGZz X21vdW50CSptcCA9IGlwLT5pX21vdW50Owo+ICAJeGZzX2JtZHJfYmxvY2tfdAkqZGZwOwo+ICAJ eGZzX2lmb3JrX3QJCSppZnA7Cj4gIAkvKiBSRUZFUkVOQ0VEICovCj4gQEAgLTc5NCw3ICs3OTUs NyBAQCB4ZnNfaWZvcm1hdF9idHJlZSgKPiAgCj4gIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3 aGljaGZvcmspOwo+ICAJZGZwID0gKHhmc19ibWRyX2Jsb2NrX3QgKilYRlNfREZPUktfUFRSKGRp cCwgd2hpY2hmb3JrKTsKPiAtCXNpemUgPSBYRlNfQk1BUF9CUk9PVF9TUEFDRShkZnApOwo+ICsJ c2l6ZSA9IFhGU19CTUFQX0JST09UX1NQQUNFKG1wLCBkZnApOwo+ICAJbnJlY3MgPSBiZTE2X3Rv X2NwdShkZnAtPmJiX251bXJlY3MpOwo+ICAKPiAgCS8qCj4gQEAgLTgwNSwxNCArODA2LDE0IEBA IHhmc19pZm9ybWF0X2J0cmVlKAo+ICAJICogYmxvY2tzLgo+ICAJICovCj4gIAlpZiAodW5saWtl bHkoWEZTX0lGT1JLX05FWFRFTlRTKGlwLCB3aGljaGZvcmspIDw9Cj4gLQkJCVhGU19JRk9SS19N QVhFWFQoaXAsIHdoaWNoZm9yaykgfHwKPiArCQkJCQlYRlNfSUZPUktfTUFYRVhUKGlwLCB3aGlj aGZvcmspIHx8Cj4gIAkJICAgICBYRlNfQk1EUl9TUEFDRV9DQUxDKG5yZWNzKSA+Cj4gLQkJCVhG U19ERk9SS19TSVpFKGRpcCwgaXAtPmlfbW91bnQsIHdoaWNoZm9yaykgfHwKPiArCQkJCQlYRlNf REZPUktfU0laRShkaXAsIG1wLCB3aGljaGZvcmspIHx8Cj4gIAkJICAgICBYRlNfSUZPUktfTkVY VEVOVFMoaXAsIHdoaWNoZm9yaykgPiBpcC0+aV9kLmRpX25ibG9ja3MpKSB7Cj4gLQkJeGZzX3dh cm4oaXAtPmlfbW91bnQsICJjb3JydXB0IGlub2RlICVMdSAoYnRyZWUpLiIsCj4gLQkJCSh1bnNp Z25lZCBsb25nIGxvbmcpIGlwLT5pX2lubyk7Cj4gKwkJeGZzX3dhcm4obXAsICJjb3JydXB0IGlu b2RlICVMdSAoYnRyZWUpLiIsCj4gKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgaXAtPmlfaW5v KTsKPiAgCQlYRlNfQ09SUlVQVElPTl9FUlJPUigieGZzX2lmb3JtYXRfYnRyZWUiLCBYRlNfRVJS TEVWRUxfTE9XLAo+IC0JCQkJIGlwLT5pX21vdW50LCBkaXApOwo+ICsJCQkJCSBtcCwgZGlwKTsK PiAgCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7Cj4gIAl9Cj4gIAo+IEBAIC04MjMs OCArODI0LDcgQEAgeGZzX2lmb3JtYXRfYnRyZWUoCj4gIAkgKiBDb3B5IGFuZCBjb252ZXJ0IGZy b20gdGhlIG9uLWRpc2sgc3RydWN0dXJlCj4gIAkgKiB0byB0aGUgaW4tbWVtb3J5IHN0cnVjdHVy ZS4KPiAgCSAqLwo+IC0JeGZzX2JtZHJfdG9fYm1idChpcC0+aV9tb3VudCwgZGZwLAo+IC0JCQkg WEZTX0RGT1JLX1NJWkUoZGlwLCBpcC0+aV9tb3VudCwgd2hpY2hmb3JrKSwKPiArCXhmc19ibWRy X3RvX2JtYnQoaXAsIGRmcCwgWEZTX0RGT1JLX1NJWkUoZGlwLCBpcC0+aV9tb3VudCwgd2hpY2hm b3JrKSwKPiAgCQkJIGlmcC0+aWZfYnJvb3QsIHNpemUpOwoKY2hhbmdpbmcgeGZzX2JtZHJfdG9f Ym1idCB0byB0YWtlIGFuIGlub2RlIHBvaW50ZXIgY291bGQgYmUgaXQncyBvd24gcGF0Y2guCgo+ ICAJaWZwLT5pZl9mbGFncyAmPSB+WEZTX0lGRVhURU5UUzsKPiAgCWlmcC0+aWZfZmxhZ3MgfD0g WEZTX0lGQlJPT1Q7Cj4gQEAgLTIwMzcsNyArMjAzNyw3IEBAIHhmc19pcm9vdF9yZWFsbG9jKAo+ ICAJCSAqIGFsbG9jYXRlIGl0IG5vdyBhbmQgZ2V0IG91dC4KPiAgCQkgKi8KPiAgCQlpZiAoaWZw LT5pZl9icm9vdF9ieXRlcyA9PSAwKSB7Cj4gLQkJCW5ld19zaXplID0gKHNpemVfdClYRlNfQk1B UF9CUk9PVF9TUEFDRV9DQUxDKHJlY19kaWZmKTsKPiArCQkJbmV3X3NpemUgPSBYRlNfQk1BUF9C Uk9PVF9TUEFDRV9DQUxDKG1wLCByZWNfZGlmZik7Cj4gIAkJCWlmcC0+aWZfYnJvb3QgPSBrbWVt X2FsbG9jKG5ld19zaXplLCBLTV9TTEVFUCB8IEtNX05PRlMpOwo+ICAJCQlpZnAtPmlmX2Jyb290 X2J5dGVzID0gKGludCluZXdfc2l6ZTsKPiAgCQkJcmV0dXJuOwo+IEBAIC0yMDUxLDkgKzIwNTEs OSBAQCB4ZnNfaXJvb3RfcmVhbGxvYygKPiAgCQkgKi8KPiAgCQljdXJfbWF4ID0geGZzX2JtYnRf bWF4cmVjcyhtcCwgaWZwLT5pZl9icm9vdF9ieXRlcywgMCk7Cj4gIAkJbmV3X21heCA9IGN1cl9t YXggKyByZWNfZGlmZjsKPiAtCQluZXdfc2l6ZSA9IChzaXplX3QpWEZTX0JNQVBfQlJPT1RfU1BB Q0VfQ0FMQyhuZXdfbWF4KTsKPiArCQluZXdfc2l6ZSA9IFhGU19CTUFQX0JST09UX1NQQUNFX0NB TEMobXAsIG5ld19tYXgpOwo+ICAJCWlmcC0+aWZfYnJvb3QgPSBrbWVtX3JlYWxsb2MoaWZwLT5p Zl9icm9vdCwgbmV3X3NpemUsCj4gLQkJCQkoc2l6ZV90KVhGU19CTUFQX0JST09UX1NQQUNFX0NB TEMoY3VyX21heCksIC8qIG9sZCBzaXplICovCj4gKwkJCQlYRlNfQk1BUF9CUk9PVF9TUEFDRV9D QUxDKG1wLCBjdXJfbWF4KSwKPiAgCQkJCUtNX1NMRUVQIHwgS01fTk9GUyk7Cj4gIAkJb3AgPSAo Y2hhciAqKVhGU19CTUFQX0JST09UX1BUUl9BRERSKG1wLCBpZnAtPmlmX2Jyb290LCAxLAo+ICAJ CQkJCQkgICAgIGlmcC0+aWZfYnJvb3RfYnl0ZXMpOwo+IEBAIC0yMDYxLDcgKzIwNjEsNyBAQCB4 ZnNfaXJvb3RfcmVhbGxvYygKPiAgCQkJCQkJICAgICAoaW50KW5ld19zaXplKTsKPiAgCQlpZnAt PmlmX2Jyb290X2J5dGVzID0gKGludCluZXdfc2l6ZTsKPiAgCQlBU1NFUlQoaWZwLT5pZl9icm9v dF9ieXRlcyA8PQo+IC0JCQlYRlNfSUZPUktfU0laRShpcCwgd2hpY2hmb3JrKSArIFhGU19CUk9P VF9TSVpFX0FESik7Cj4gKwkJCVhGU19JRk9SS19TSVpFKGlwLCB3aGljaGZvcmspICsgWEZTX0JS T09UX1NJWkVfQURKKGlwKSk7Cj4gIAkJbWVtbW92ZShucCwgb3AsIGN1cl9tYXggKiAodWludClz aXplb2YoeGZzX2Rmc2Jub190KSk7Cj4gIAkJcmV0dXJuOwo+ICAJfQo+IEBAIC0yMDc2LDcgKzIw NzYsNyBAQCB4ZnNfaXJvb3RfcmVhbGxvYygKPiAgCW5ld19tYXggPSBjdXJfbWF4ICsgcmVjX2Rp ZmY7Cj4gIAlBU1NFUlQobmV3X21heCA+PSAwKTsKPiAgCWlmIChuZXdfbWF4ID4gMCkKPiAtCQlu ZXdfc2l6ZSA9IChzaXplX3QpWEZTX0JNQVBfQlJPT1RfU1BBQ0VfQ0FMQyhuZXdfbWF4KTsKPiAr CQluZXdfc2l6ZSA9IFhGU19CTUFQX0JST09UX1NQQUNFX0NBTEMobXAsIG5ld19tYXgpOwo+ICAJ ZWxzZQo+ICAJCW5ld19zaXplID0gMDsKPiAgCWlmIChuZXdfc2l6ZSA+IDApIHsKPiBAQCAtMjA4 NCw3ICsyMDg0LDggQEAgeGZzX2lyb290X3JlYWxsb2MoCj4gIAkJLyoKPiAgCQkgKiBGaXJzdCBj b3B5IG92ZXIgdGhlIGJ0cmVlIGJsb2NrIGhlYWRlci4KPiAgCQkgKi8KPiAtCQltZW1jcHkobmV3 X2Jyb290LCBpZnAtPmlmX2Jyb290LCBYRlNfQlRSRUVfTEJMT0NLX0xFTik7Cj4gKwkJbWVtY3B5 KG5ld19icm9vdCwgaWZwLT5pZl9icm9vdCwKPiArCQkJWEZTX0JNQlRfQkxPQ0tfTEVOKGlwLT5p X21vdW50KSk7Cj4gIAl9IGVsc2Ugewo+ICAJCW5ld19icm9vdCA9IE5VTEw7Cj4gIAkJaWZwLT5p Zl9mbGFncyAmPSB+WEZTX0lGQlJPT1Q7Cj4gQEAgLTIxMTQsNyArMjExNSw3IEBAIHhmc19pcm9v dF9yZWFsbG9jKAo+ICAJaWZwLT5pZl9icm9vdCA9IG5ld19icm9vdDsKPiAgCWlmcC0+aWZfYnJv b3RfYnl0ZXMgPSAoaW50KW5ld19zaXplOwo+ICAJQVNTRVJUKGlmcC0+aWZfYnJvb3RfYnl0ZXMg PD0KPiAtCQlYRlNfSUZPUktfU0laRShpcCwgd2hpY2hmb3JrKSArIFhGU19CUk9PVF9TSVpFX0FE Sik7Cj4gKwkJWEZTX0lGT1JLX1NJWkUoaXAsIHdoaWNoZm9yaykgKyBYRlNfQlJPT1RfU0laRV9B REooaXApKTsKPiAgCXJldHVybjsKPiAgfQo+ICAKPiBAQCAtMjQyNyw3ICsyNDI4LDcgQEAgeGZz X2lmbHVzaF9mb3JrKAo+ICAJCQlBU1NFUlQoaWZwLT5pZl9icm9vdCAhPSBOVUxMKTsKPiAgCQkJ QVNTRVJUKGlmcC0+aWZfYnJvb3RfYnl0ZXMgPD0KPiAgCQkJICAgICAgIChYRlNfSUZPUktfU0la RShpcCwgd2hpY2hmb3JrKSArCj4gLQkJCQlYRlNfQlJPT1RfU0laRV9BREopKTsKPiArCQkJCVhG U19CUk9PVF9TSVpFX0FESihpcCkpKTsKPiAgCQkJeGZzX2JtYnRfdG9fYm1kcihtcCwgaWZwLT5p Zl9icm9vdCwgaWZwLT5pZl9icm9vdF9ieXRlcywKPiAgCQkJCSh4ZnNfYm1kcl9ibG9ja190ICop Y3AsCj4gIAkJCQlYRlNfREZPUktfU0laRShkaXAsIG1wLCB3aGljaGZvcmspKTsKPiBkaWZmIC0t Z2l0IGEvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5j Cj4gaW5kZXggOTZmY2JiOC4uYzU3YTk4NyAxMDA2NDQKPiAtLS0gYS9mcy94ZnMveGZzX2xvZ19y ZWNvdmVyLmMKPiArKysgYi9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKPiBAQCAtMjksNiArMjks NyBAQAo+ICAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKPiAgI2luY2x1ZGUgInhmc19hbGxv Y19idHJlZS5oIgo+ICAjaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgo+ICsjaW5jbHVkZSAi eGZzX2J0cmVlLmgiCj4gICNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCj4gICNpbmNsdWRlICJ4ZnNf aW5vZGUuaCIKPiAgI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCj4gQEAgLTE5MjksNiArMTkz MCwzMyBAQCB4bG9nX3JlY292ZXJfZG9fcmVnX2J1ZmZlcigKPiAgCj4gIAkvKiBTaG91bGRuJ3Qg YmUgYW55IG1vcmUgcmVnaW9ucyAqLwo+ICAJQVNTRVJUKGkgPT0gaXRlbS0+cmlfdG90YWwpOwo+ ICsKPiArCXN3aXRjaCAoYnVmX2YtPmJsZl9mbGFncyAmIFhGU19CTEZfVFlQRV9NQVNLKSB7Cj4g KwljYXNlIFhGU19CTEZfQlRSRUVfQlVGOgo+ICsJCXN3aXRjaCAoYmUzMl90b19jcHUoKihfX2Jl MzIgKilicC0+Yl9hZGRyKSkgewo+ICsJCWNhc2UgWEZTX0FCVEJfQ1JDX01BR0lDOgo+ICsJCWNh c2UgWEZTX0FCVENfQ1JDX01BR0lDOgo+ICsJCWNhc2UgWEZTX0FCVEJfTUFHSUM6Cj4gKwkJY2Fz ZSBYRlNfQUJUQ19NQUdJQzoKPiArCQkJYnAtPmJfb3BzID0gJnhmc19hbGxvY2J0X2J1Zl9vcHM7 Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgWEZTX0lCVF9DUkNfTUFHSUM6Cj4gKwkJY2FzZSBYRlNf SUJUX01BR0lDOgo+ICsJCQlicC0+Yl9vcHMgPSAmeGZzX2lub2J0X2J1Zl9vcHM7Cj4gKwkJCWJy ZWFrOwo+ICsJCWNhc2UgWEZTX0JNQVBfQ1JDX01BR0lDOgo+ICsJCWNhc2UgWEZTX0JNQVBfTUFH SUM6Cj4gKwkJCWJwLT5iX29wcyA9ICZ4ZnNfYm1idF9idWZfb3BzOwo+ICsJCQlicmVhazsKPiAr CQlkZWZhdWx0Ogo+ICsJCQl4ZnNfd2FybihtcCwgIkJhZCBidHJlZSBibG9jayBtYWdpYyEiKTsK PiArCQkJQVNTRVJUKDApOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJYnJlYWs7Cj4gKwlkZWZh dWx0Ogo+ICsJCWJyZWFrOwo+ICsJfQo+ICB9Cj4gIAo+ICAvKgo+IGRpZmYgLS1naXQgYS9mcy94 ZnMveGZzX3RyYW5zLmggYi9mcy94ZnMveGZzX3RyYW5zLmgKPiBpbmRleCBjNmMwNjAxLi45MzJk ZTIyIDEwMDY0NAo+IC0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAo+ICsrKyBiL2ZzL3hmcy94ZnNf dHJhbnMuaAo+IEBAIC01MDMsNiArNTAzLDggQEAgdm9pZAkJeGZzX3RyYW5zX2lub2RlX2J1Zih4 ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKPiAgdm9pZAkJeGZzX3RyYW5zX3N0YWxl X2lub2RlX2J1Zih4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqKTsKPiAgdm9pZAkJeGZz X3RyYW5zX2RxdW90X2J1Zih4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3QgeGZzX2J1ZiAqLCB1aW50KTsK PiAgdm9pZAkJeGZzX3RyYW5zX2lub2RlX2FsbG9jX2J1Zih4ZnNfdHJhbnNfdCAqLCBzdHJ1Y3Qg eGZzX2J1ZiAqKTsKPiArdm9pZAkJeGZzX3RyYW5zX2J1Zl9zZXRfdHlwZShzdHJ1Y3QgeGZzX3Ry YW5zICosIHN0cnVjdCB4ZnNfYnVmICosCj4gKwkJCQkgICAgICAgdWludCk7Cj4gIHZvaWQJCXhm c190cmFuc19pY2hndGltZShzdHJ1Y3QgeGZzX3RyYW5zICosIHN0cnVjdCB4ZnNfaW5vZGUgKiwg aW50KTsKPiAgdm9pZAkJeGZzX3RyYW5zX2lqb2luKHN0cnVjdCB4ZnNfdHJhbnMgKiwgc3RydWN0 IHhmc19pbm9kZSAqLCB1aW50KTsKPiAgdm9pZAkJeGZzX3RyYW5zX2xvZ19idWYoeGZzX3RyYW5z X3QgKiwgc3RydWN0IHhmc19idWYgKiwgdWludCwgdWludCk7Cj4gZGlmZiAtLWdpdCBhL2ZzL3hm cy94ZnNfdHJhbnNfYnVmLmMgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCj4gaW5kZXggM2VkZjVk Yi4uZjk1MGVkZCAxMDA2NDQKPiAtLS0gYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCj4gKysrIGIv ZnMveGZzL3hmc190cmFuc19idWYuYwo+IEBAIC02NTksNiArNjU5LDcgQEAgeGZzX3RyYW5zX2Jp bnZhbCgKPiAgCQlBU1NFUlQoWEZTX0JVRl9JU1NUQUxFKGJwKSk7Cj4gIAkJQVNTRVJUKCEoYmlw LT5ibGlfZmxhZ3MgJiAoWEZTX0JMSV9MT0dHRUQgfCBYRlNfQkxJX0RJUlRZKSkpOwo+ICAJCUFT U0VSVCghKGJpcC0+X19ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTEZfSU5PREVfQlVGKSk7 Cj4gKwkJQVNTRVJUKCEoYmlwLT5fX2JsaV9mb3JtYXQuYmxmX2ZsYWdzICYgWEZTX0JMRl9UWVBF X01BU0spKTsKPiAgCQlBU1NFUlQoYmlwLT5fX2JsaV9mb3JtYXQuYmxmX2ZsYWdzICYgWEZTX0JM Rl9DQU5DRUwpOwo+ICAJCUFTU0VSVChiaXAtPmJsaV9pdGVtLmxpX2Rlc2MtPmxpZF9mbGFncyAm IFhGU19MSURfRElSVFkpOwo+ICAJCUFTU0VSVCh0cC0+dF9mbGFncyAmIFhGU19UUkFOU19ESVJU WSk7Cj4gQEAgLTY3MSw2ICs2NzIsNyBAQCB4ZnNfdHJhbnNfYmludmFsKAo+ICAJYmlwLT5ibGlf ZmxhZ3MgJj0gfihYRlNfQkxJX0lOT0RFX0JVRiB8IFhGU19CTElfTE9HR0VEIHwgWEZTX0JMSV9E SVJUWSk7Cj4gIAliaXAtPl9fYmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJj0gflhGU19CTEZfSU5PREVf QlVGOwo+ICAJYmlwLT5fX2JsaV9mb3JtYXQuYmxmX2ZsYWdzIHw9IFhGU19CTEZfQ0FOQ0VMOwo+ ICsJYmlwLT5fX2JsaV9mb3JtYXQuYmxmX2ZsYWdzICY9IH5YRlNfQkxGX1RZUEVfTUFTSzsKPiAg CWZvciAoaSA9IDA7IGkgPCBiaXAtPmJsaV9mb3JtYXRfY291bnQ7IGkrKykgewo+ICAJCW1lbXNl dChiaXAtPmJsaV9mb3JtYXRzW2ldLmJsZl9kYXRhX21hcCwgMCwKPiAgCQkgICAgICAgKGJpcC0+ YmxpX2Zvcm1hdHNbaV0uYmxmX21hcF9zaXplICogc2l6ZW9mKHVpbnQpKSk7Cj4gQEAgLTc1MSw2 ICs3NTMsMjYgQEAgeGZzX3RyYW5zX2lub2RlX2FsbG9jX2J1ZigKPiAgCWJpcC0+YmxpX2ZsYWdz IHw9IFhGU19CTElfSU5PREVfQUxMT0NfQlVGOwo+ICB9Cj4gIAo+ICsvKgo+ICsgKiBTZXQgdGhl IHR5cGUgb2YgdGhlIGJ1ZmZlciBmb3IgbG9nIHJlY292ZXJ5IHNvIHRoYXQgaXQgY2FuIGNvcnJl Y3RseSBpZGVudGlmeQo+ICsgKiBhbmQgaGVuY2UgYXR0YWNoIHRoZSBjb3JyZWN0IGJ1ZmZlciBv cHMgdG8gdGhlIGJ1ZmZlciBhZnRlciByZXBsYXkuCj4gKyAqLwo+ICt2b2lkCj4gK3hmc190cmFu c19idWZfc2V0X3R5cGUoCj4gKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKPiArCXN0cnVjdCB4ZnNf YnVmCQkqYnAsCj4gKwl1aW50CQkJdHlwZSkKPiArewo+ICsJc3RydWN0IHhmc19idWZfbG9nX2l0 ZW0JKmJpcCA9IGJwLT5iX2ZzcHJpdjsKPiArCj4gKwlBU1NFUlQoYnAtPmJfdHJhbnNwID09IHRw KTsKPiArCUFTU0VSVChiaXAgIT0gTlVMTCk7Cj4gKwlBU1NFUlQoYXRvbWljX3JlYWQoJmJpcC0+ YmxpX3JlZmNvdW50KSA+IDApOwo+ICsJQVNTRVJUKCh0eXBlICYgWEZTX0JMRl9UWVBFX01BU0sp ICE9IDApOwo+ICsKPiArCWJpcC0+X19ibGlfZm9ybWF0LmJsZl9mbGFncyAmPSB+WEZTX0JMRl9U WVBFX01BU0s7Cj4gKwliaXAtPl9fYmxpX2Zvcm1hdC5ibGZfZmxhZ3MgfD0gdHlwZTsKPiArfQo+ ICAKPiAgLyoKPiAgICogU2ltaWxhciB0byB4ZnNfdHJhbnNfaW5vZGVfYnVmKCksIHRoaXMgbWFy a3MgdGhlIGJ1ZmZlciBhcyBhIGNsdXN0ZXIgb2YKPiBAQCAtNzY5LDE0ICs3OTEsOSBAQCB4ZnNf dHJhbnNfZHF1b3RfYnVmKAo+ICAJeGZzX2J1Zl90CSpicCwKPiAgCXVpbnQJCXR5cGUpCj4gIHsK PiAtCXhmc19idWZfbG9nX2l0ZW1fdAkqYmlwID0gYnAtPmJfZnNwcml2Owo+IC0KPiAtCUFTU0VS VChicC0+Yl90cmFuc3AgPT0gdHApOwo+IC0JQVNTRVJUKGJpcCAhPSBOVUxMKTsKPiAgCUFTU0VS VCh0eXBlID09IFhGU19CTEZfVURRVU9UX0JVRiB8fAo+ICAJICAgICAgIHR5cGUgPT0gWEZTX0JM Rl9QRFFVT1RfQlVGIHx8Cj4gIAkgICAgICAgdHlwZSA9PSBYRlNfQkxGX0dEUVVPVF9CVUYpOwo+ IC0JQVNTRVJUKGF0b21pY19yZWFkKCZiaXAtPmJsaV9yZWZjb3VudCkgPiAwKTsKPiAgCj4gLQli aXAtPl9fYmxpX2Zvcm1hdC5ibGZfZmxhZ3MgfD0gdHlwZTsKPiArCXhmc190cmFuc19idWZfc2V0 X3R5cGUodHAsIGJwLCB0eXBlKTsKPiAgfQo+IC0tIAo+IDEuNy4xMAo+IAo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4geGZzIG1haWxpbmcgbGlzdAo+ IHhmc0Bvc3Muc2dpLmNvbQo+IGh0dHA6Ly9vc3Muc2dpLmNvbS9tYWlsbWFuL2xpc3RpbmZvL3hm cwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KeGZzIG1h aWxpbmcgbGlzdAp4ZnNAb3NzLnNnaS5jb20KaHR0cDovL29zcy5zZ2kuY29tL21haWxtYW4vbGlz dGluZm8veGZzCg==