From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [RFC PATCH 03/42] drm/i915: buddy allocator Date: Fri, 15 Feb 2019 14:34:02 +0200 Message-ID: <87a7ixut6t.fsf@intel.com> References: <20190214145740.14521-1-matthew.auld@intel.com> <20190214145740.14521-4-matthew.auld@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 18F5D6E09E for ; Fri, 15 Feb 2019 12:31:52 +0000 (UTC) In-Reply-To: <20190214145740.14521-4-matthew.auld@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matthew Auld , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCAxNCBGZWIgMjAxOSwgTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29t PiB3cm90ZToKPiBSZWFsbHkgc2ltcGx5IGJ1ZGR5IGFsbG9jYXRvci4KPgo+IFNpZ25lZC1vZmYt Ynk6IE1hdHRoZXcgQXVsZCA8bWF0dGhldy5hdWxkQGludGVsLmNvbT4KPiBDYzogSm9vbmFzIExh aHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+IENjOiBBYmRpZWwgSmFu dWxndWUgPGFiZGllbC5qYW51bGd1ZUBsaW51eC5pbnRlbC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2J1ZGR5LmMgICAgICAgICB8IDIwNiArKysrKysrKysrKysr KysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9idWRkeS5oICAgICAgICAgfCAx MTggKysrKysrKysrKwo+ICAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9idWRk eS5jICAgfCAyMDkgKysrKysrKysrKysrKysrKysrCj4gIC4uLi9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oICB8ICAgMSArCj4gIDUgZmlsZXMgY2hhbmdlZCwgNTM1IGlu c2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX2J1ZGR5LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2J1ZGR5LmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9idWRkeS5jCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IGlu ZGV4IDE3ODdlMTI5OWIxYi4uZTVjZTgxM2QxOTM2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK PiBAQCAtNjEsNiArNjEsNyBAQCBpOTE1LXkgKz0gXAo+ICAJICBpOTE1X2FjdGl2ZS5vIFwKPiAg CSAgaTkxNV9jbWRfcGFyc2VyLm8gXAo+ICAJICBpOTE1X2dlbV9iYXRjaF9wb29sLm8gXAo+ICsJ ICBpOTE1X2dlbV9idWRkeS5vIFwKPiAgCSAgaTkxNV9nZW1fY2xmbHVzaC5vIFwKPiAgCSAgaTkx NV9nZW1fY29udGV4dC5vIFwKPiAgCSAgaTkxNV9nZW1fZG1hYnVmLm8gXAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9idWRkeS5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fYnVkZHkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi40ZGM2ODhjMDkxYTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fYnVkZHkuYwo+IEBAIC0wLDAgKzEsMjA2IEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUg U09GVFdBUkUuCj4gKyAqCj4gKyAqLwoKUGxlYXNlIHJlcGxhY2UgdGhlIGFib3ZlIHdpdGgKCi8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKLyoKICogQ29weXJpZ2h0IMKpIDIwMTkgSW50 ZWwgQ29ycG9yYXRpb24KICovCgpEaXR0byBmb3IgYWxsIG5ldyBmaWxlcyBiZWluZyBhZGRlZC4g KEV4Y2VwdCAuaCB3aGljaCB3aWxsIG5lZWQgdG8gaGF2ZQpvbGQgc3R5bGUgLyogLi4uICovIGNv bW1lbnRzIGFyb3VuZCB0aGUgZmlyc3QgbGluZS4pCgpCUiwKSmFuaS4KCgo+ICsKPiArI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiArCj4gKyNpbmNs dWRlICJpOTE1X2dlbV9idWRkeS5oIgo+ICsjaW5jbHVkZSAiaTkxNV9nZW0uaCIKPiArCj4gK2lu dCBpOTE1X2dlbV9idWRkeV9pbml0KHN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSAqbW0sIHU2NCBz aXplLCB1NjQgbWluX3NpemUpCj4gK3sKPiArCXVuc2lnbmVkIGludCBpOwo+ICsKPiArCS8qCj4g KwkgKiBYWFg6IGlmIG5vdCBhIHBvd2VyIG9mIDIsIG1heWJlIHNwbGl0IGludG8gcG93ZXIgb2Yg MiBibG9ja3MsCj4gKwkgKiBlZmZlY3RpdmVseSBoYXZpbmcgbXVsdGlwbGUgcm9vdHMsIHNpbWls YXIgdG8gaWYgd2UgaGFkIGEgZ2xvYmFsCj4gKwkgKiBNQVhfT1JERVIuCj4gKwkgKi8KPiArCXNp emUgPSByb3VuZGRvd25fcG93X29mX3R3byhzaXplKTsKPiArCW1pbl9zaXplID0gcm91bmR1cF9w b3dfb2ZfdHdvKG1pbl9zaXplKTsKPiArCj4gKwlpZiAoc2l6ZSA8IG1pbl9zaXplKQo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsKPiArCWlmIChtaW5fc2l6ZSA8IFBBR0VfU0laRSkKPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiArCj4gKwltbS0+bWF4X29yZGVyID0gaWxvZzIoc2l6ZSkgLSBpbG9nMiht aW5fc2l6ZSk7Cj4gKwltbS0+bWluX3NpemUgPSBtaW5fc2l6ZTsKPiArCj4gKwltbS0+ZnJlZV9s aXN0ID0ga21hbGxvY19hcnJheShtbS0+bWF4X29yZGVyICsgMSwKPiArCQkJCSAgICAgIHNpemVv ZihzdHJ1Y3QgbGlzdF9oZWFkKSwKPiArCQkJCSAgICAgIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFt bS0+ZnJlZV9saXN0KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZvciAoaSA9IDA7IGkg PD0gbW0tPm1heF9vcmRlcjsgKytpKQo+ICsJCUlOSVRfTElTVF9IRUFEKCZtbS0+ZnJlZV9saXN0 W2ldKTsKPiArCj4gKwltbS0+YmxvY2tzID0gS01FTV9DQUNIRShpOTE1X2dlbV9idWRkeV9ibG9j aywgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKPiArCWlmICghbW0tPmJsb2NrcykKPiArCQlnb3RvIG91 dF9mcmVlX2xpc3Q7Cj4gKwo+ICsJbW0tPnJvb3QgPSBrbWVtX2NhY2hlX3phbGxvYyhtbS0+Ymxv Y2tzLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbW0tPnJvb3QpCj4gKwkJZ290byBvdXRfZnJlZV9i bG9ja3M7Cj4gKwo+ICsJbW0tPnJvb3QtPmhlYWRlciA9IG1tLT5tYXhfb3JkZXI7Cj4gKwo+ICsJ bGlzdF9hZGQoJm1tLT5yb290LT5saW5rLCAmbW0tPmZyZWVfbGlzdFttbS0+bWF4X29yZGVyXSk7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfZnJlZV9ibG9ja3M6Cj4gKwlrbWVtX2NhY2hl X2Rlc3Ryb3kobW0tPmJsb2Nrcyk7Cj4gK291dF9mcmVlX2xpc3Q6Cj4gKwlrZnJlZShtbS0+ZnJl ZV9saXN0KTsKPiArCj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiArdm9pZCBpOTE1X2dl bV9idWRkeV9maW5pKHN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSAqbW0pCj4gK3sKPiArCWlmIChX QVJOX09OKGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrX2FsbG9jYXRlZChtbS0+cm9vdCkpKQo+ICsJCXJl dHVybjsKPiArCj4gKwlrZnJlZShtbS0+ZnJlZV9saXN0KTsKPiArCWttZW1fY2FjaGVfZnJlZSht bS0+YmxvY2tzLCBtbS0+cm9vdCk7Cj4gKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobW0tPmJsb2Nrcyk7 Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoZSAnb3JkZXInIGhlcmUgbWVhbnM6Cj4gKyAqCj4gKyAq IDAgPSAyXjAgKiBtbS0+bWluX3NpemUKPiArICogMSA9IDJeMSAqIG1tLT5taW5fc2l6ZQo+ICsg KiAyID0gMl4yICogbW0tPm1pbl9zaXplCj4gKyAqIC4uLgo+ICsgKi8KPiArc3RydWN0IGk5MTVf Z2VtX2J1ZGR5X2Jsb2NrICoKPiAraTkxNV9nZW1fYnVkZHlfYWxsb2Moc3RydWN0IGk5MTVfZ2Vt X2J1ZGR5X21tICptbSwgdW5zaWduZWQgaW50IG9yZGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9n ZW1fYnVkZHlfYmxvY2sgKmJsb2NrID0gTlVMTDsKPiArCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9i bG9jayAqcm9vdDsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsKPiArCWZvciAoaSA9IG9yZGVyOyBp IDw9IG1tLT5tYXhfb3JkZXI7ICsraSkgewo+ICsJCWJsb2NrID0gbGlzdF9maXJzdF9lbnRyeV9v cl9udWxsKCZtbS0+ZnJlZV9saXN0W2ldLAo+ICsJCQkJCQkgc3RydWN0IGk5MTVfZ2VtX2J1ZGR5 X2Jsb2NrLAo+ICsJCQkJCQkgbGluayk7Cj4gKwkJaWYgKGJsb2NrKQo+ICsJCQlicmVhazsKPiAr CX0KPiArCj4gKwlpZiAoIWJsb2NrKQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOwo+ICsK PiArCUdFTV9CVUdfT04oaTkxNV9nZW1fYnVkZHlfYmxvY2tfYWxsb2NhdGVkKGJsb2NrKSk7Cj4g Kwo+ICsJcm9vdCA9IGJsb2NrOwo+ICsKPiArCXdoaWxlIChpICE9IG9yZGVyKSB7Cj4gKwkJdTY0 IG9mZnNldCA9IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayk7Cj4gKwo+ICsJCWJs b2NrLT5sZWZ0ID0ga21lbV9jYWNoZV96YWxsb2MobW0tPmJsb2NrcywgR0ZQX0tFUk5FTCk7Cj4g KwkJaWYgKCFibG9jay0+bGVmdCkKPiArCQkJZ290byBvdXRfZnJlZV9ibG9ja3M7Cj4gKwo+ICsJ CWJsb2NrLT5sZWZ0LT5oZWFkZXIgPSBvZmZzZXQ7Cj4gKwkJYmxvY2stPmxlZnQtPmhlYWRlciB8 PSBJOTE1X0dFTV9CVUREWV9IRUFERVJfQUxMT0NBVEVEOwo+ICsJCWJsb2NrLT5sZWZ0LT5oZWFk ZXIgfD0gaSAtIDE7Cj4gKwkJYmxvY2stPmxlZnQtPnBhcmVudCA9IGJsb2NrOwo+ICsKPiArCQlJ TklUX0xJU1RfSEVBRCgmYmxvY2stPmxlZnQtPmxpbmspOwo+ICsKPiArCQlibG9jay0+cmlnaHQg PSBrbWVtX2NhY2hlX3phbGxvYyhtbS0+YmxvY2tzLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIWJs b2NrLT5yaWdodCkgewo+ICsJCQlrbWVtX2NhY2hlX2ZyZWUobW0tPmJsb2NrcywgYmxvY2stPmxl ZnQpOwo+ICsJCQlnb3RvIG91dF9mcmVlX2Jsb2NrczsKPiArCQl9Cj4gKwo+ICsJCWJsb2NrLT5y aWdodC0+aGVhZGVyID0gb2Zmc2V0ICsgKEJJVChpIC0gMSkgKiBtbS0+bWluX3NpemUpOwo+ICsJ CWJsb2NrLT5yaWdodC0+aGVhZGVyIHw9IGkgLSAxOwo+ICsJCWJsb2NrLT5yaWdodC0+cGFyZW50 ID0gYmxvY2s7Cj4gKwo+ICsJCWxpc3RfYWRkKCZibG9jay0+cmlnaHQtPmxpbmssICZtbS0+ZnJl ZV9saXN0W2kgLSAxXSk7Cj4gKwo+ICsJCWJsb2NrID0gYmxvY2stPmxlZnQ7Cj4gKwkJaS0tOwo+ ICsJfQo+ICsKPiArCXJvb3QtPmhlYWRlciB8PSBJOTE1X0dFTV9CVUREWV9IRUFERVJfQUxMT0NB VEVEOwo+ICsJbGlzdF9kZWwoJnJvb3QtPmxpbmspOwo+ICsKPiArCXJldHVybiBibG9jazsKPiAr Cj4gK291dF9mcmVlX2Jsb2NrczoKPiArCXdoaWxlIChibG9jayAhPSByb290KSB7Cj4gKwkJaWYg KGJsb2NrLT5yaWdodCkKPiArCQkJbGlzdF9kZWwoJmJsb2NrLT5yaWdodC0+bGluayk7Cj4gKwo+ ICsJCWttZW1fY2FjaGVfZnJlZShtbS0+YmxvY2tzLCBibG9jay0+bGVmdCk7Cj4gKwkJa21lbV9j YWNoZV9mcmVlKG1tLT5ibG9ja3MsIGJsb2NrLT5yaWdodCk7Cj4gKwo+ICsJCWJsb2NrID0gYmxv Y2stPnBhcmVudDsKPiArCX0KPiArCj4gKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArfQo+ ICsKPiArdm9pZCBpOTE1X2dlbV9idWRkeV9mcmVlKHN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSAq bW0sCj4gKwkJCSBzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2sgKmJsb2NrKQo+ICt7Cj4gKwlH RU1fQlVHX09OKCFpOTE1X2dlbV9idWRkeV9ibG9ja19hbGxvY2F0ZWQoYmxvY2spKTsKPiArCj4g Kwl3aGlsZSAoYmxvY2stPnBhcmVudCkgewo+ICsJCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9j ayAqYnVkZHk7Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrICpwYXJlbnQ7Cj4gKwo+ ICsJCXBhcmVudCA9IGJsb2NrLT5wYXJlbnQ7Cj4gKwo+ICsJCWlmIChwYXJlbnQtPmxlZnQgPT0g YmxvY2spCj4gKwkJCWJ1ZGR5ID0gcGFyZW50LT5yaWdodDsKPiArCQllbHNlCj4gKwkJCWJ1ZGR5 ID0gcGFyZW50LT5sZWZ0Owo+ICsKPiArCQlpZiAoaTkxNV9nZW1fYnVkZHlfYmxvY2tfYWxsb2Nh dGVkKGJ1ZGR5KSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWxpc3RfZGVsKCZidWRkeS0+bGluayk7 Cj4gKwo+ICsJCWttZW1fY2FjaGVfZnJlZShtbS0+YmxvY2tzLCBibG9jayk7Cj4gKwkJa21lbV9j YWNoZV9mcmVlKG1tLT5ibG9ja3MsIGJ1ZGR5KTsKPiArCj4gKwkJYmxvY2sgPSBwYXJlbnQ7Cj4g Kwl9Cj4gKwo+ICsJYmxvY2stPmhlYWRlciAmPSB+STkxNV9HRU1fQlVERFlfSEVBREVSX0FMTE9D QVRFRDsKPiArCWxpc3RfYWRkKCZibG9jay0+bGluaywKPiArCQkgJm1tLT5mcmVlX2xpc3RbaTkx NV9nZW1fYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spXSk7Cj4gK30KPiArCj4gKyNpZiBJU19FTkFC TEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKPiArI2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1 X2dlbV9idWRkeS5jIgo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fYnVkZHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2J1ZGR5 LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYjNmMDZlOTA4 NmIzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2J1ZGR5LmgKPiBAQCAtMCwwICsxLDExOCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAx OCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4g KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgX19JOTE1X0dFTV9CVUREWV9IX18KPiArI2RlZmluZSBfX0k5MTVf R0VNX0JVRERZX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ICsKPiArc3Ry dWN0IGxpc3RfaGVhZDsKPiArCj4gK3N0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayB7Cj4gKyNk ZWZpbmUgSTkxNV9HRU1fQlVERFlfSEVBREVSX09GRlNFVCAofihCSVQoMTIpIC0gMSkpCj4gKyNk ZWZpbmUgSTkxNV9HRU1fQlVERFlfSEVBREVSX0FMTE9DQVRFRCBCSVQoMTEpCj4gKyNkZWZpbmUg STkxNV9HRU1fQlVERFlfSEVBREVSX09SREVSIChCSVQoMTEpIC0gMSkKPiArCXU2NCBoZWFkZXI7 Cj4gKwo+ICsJc3RydWN0IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrICpsZWZ0Owo+ICsJc3RydWN0IGk5 MTVfZ2VtX2J1ZGR5X2Jsb2NrICpyaWdodDsKPiArCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9j ayAqcGFyZW50Owo+ICsKPiArCS8qIEFsd2F5cyBzYWZlIHRvIHJldXNlIG9uY2UgdGhlIGJsb2Nr IGlzIGFsbG9jYXRlZCAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaW5rOwo+ICt9Owo+ICsKPiAr LyoKPiArICogQmluYXJ5IEJ1ZGR5IFN5c3RlbQo+ICsgKgo+ICsgKiBYWFg6IElkZWFseSB3ZSB3 b3VsZCBqdXN0IHVzZSB0aGUgaW50cnVzaXZlIHZlcnNpb24gb2YgdGhlIGJ1ZGR5IHN5c3RlbSBp LmUKPiArICogdGhlIGNsYXNzaWNhbCB2ZXJzaW9uLCB3aGVyZSB3ZSBzdG9yZSB0aGUgYmxvY2sg aW5mbyBpbiB0aGUgZnJlZSBibG9ja3MsIGJ1dAo+ICsgKiBpZiB3ZSBhcmUgZGVhbGluZyB3aXRo IHNvbWV0aGluZyBsaWtlIHN0b2xlbiBtZW1vcnksIHRoaXMgd291bGQgdmVyeSBxdWlja2x5Cj4g KyAqIHR1cm4gaW50byBhIGR1bWJzdGVyIGZpcmUgd2l0aCBoYXZpbmcgdG8gbWVtcmVtYXAvaW9y ZW1hcCBwYXJ0cyBvZiBzdG9sZW4gaW4KPiArICogdGhlIGFsbG9jYXRvci4KPiArICovCj4gK3N0 cnVjdCBpOTE1X2dlbV9idWRkeV9tbSB7Cj4gKwl1bnNpZ25lZCBpbnQgbWF4X29yZGVyOwo+ICsJ LyogTXVzdCBiZSBhdCBsZWFzdCBQQUdFX1NJWkUgKi8KPiArCXU2NCBtaW5fc2l6ZTsKPiArCj4g KwlzdHJ1Y3Qga21lbV9jYWNoZSAqYmxvY2tzOwo+ICsKPiArCS8qIE1haW50YWluIGEgZnJlZSBs aXN0IGZvciBlYWNoIG9yZGVyLiAqLwo+ICsJc3RydWN0IGxpc3RfaGVhZCAqZnJlZV9saXN0Owo+ ICsKPiArCS8qCj4gKwkgKiBNYWludGFpbiBhbiBleHBsaWNpdCBiaW5hcnkgdHJlZSB0byB0cmFj ayB0aGUgYWxsb2NhdGlvbiBvZiB0aGUKPiArCSAqIGFkZHJlc3Mgc3BhY2UuIFRoaXMgZ2l2ZXMg dXMgYSBzaW1wbGUgd2F5IG9mIGZpbmRpbmcgYSBidWRkeSBibG9jawo+ICsJICogYW5kIHBlcmZv cm1pbmcgdGhlIHBvdGVudGlhbGx5IHJlY3Vyc2l2ZSBtZXJnZSBzdGVwIHdoZW4gZnJlZWluZyBh Cj4gKwkgKiBibG9jay4gIE5vZGVzIGFyZSBlaXRoZXIgYWxsb2NhdGVkIG9yIGZyZWUsIGluIHdo aWNoIGNhc2UgdGhleSB3aWxsCj4gKwkgKiBhbHNvIGV4aXN0IG9uIHRoZSByZXNwZWN0aXZlIGZy ZWUgbGlzdC4KPiArCSAqLwo+ICsJc3RydWN0IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrICpyb290Owo+ ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSB1NjQKPiAraTkxNV9nZW1fYnVkZHlfYmxvY2tfb2Zm c2V0KHN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqYmxvY2spCj4gK3sKPiArCXJldHVybiBi bG9jay0+aGVhZGVyICYgSTkxNV9HRU1fQlVERFlfSEVBREVSX09GRlNFVDsKPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKPiAraTkxNV9nZW1fYnVkZHlfYmxvY2tfb3JkZXIo c3RydWN0IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrICpibG9jaykKPiArewo+ICsJcmV0dXJuIGJsb2Nr LT5oZWFkZXIgJiBJOTE1X0dFTV9CVUREWV9IRUFERVJfT1JERVI7Cj4gK30KPiArCj4gK3N0YXRp YyBpbmxpbmUgYm9vbAo+ICtpOTE1X2dlbV9idWRkeV9ibG9ja19hbGxvY2F0ZWQoc3RydWN0IGk5 MTVfZ2VtX2J1ZGR5X2Jsb2NrICpibG9jaykKPiArewo+ICsJcmV0dXJuIGJsb2NrLT5oZWFkZXIg JiBJOTE1X0dFTV9CVUREWV9IRUFERVJfQUxMT0NBVEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHU2NAo+ICtpOTE1X2dlbV9idWRkeV9ibG9ja19zaXplKHN0cnVjdCBpOTE1X2dlbV9idWRk eV9tbSAqbW0sCj4gKwkJICAgICAgICAgIHN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqYmxv Y2spCj4gK3sKPiArCXJldHVybiBCSVQoaTkxNV9nZW1fYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2sp KSAqIG1tLT5taW5fc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1NjQgaTkxNV9nZW1f YnVkZHlfc2l6ZShzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfbW0gKm1tKQo+ICt7Cj4gKwlyZXR1cm4g aTkxNV9nZW1fYnVkZHlfYmxvY2tfc2l6ZShtbSwgbW0tPnJvb3QpOwo+ICt9Cj4gKwo+ICtpbnQg aTkxNV9nZW1fYnVkZHlfaW5pdChzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfbW0gKm1tLAo+ICsJCQl1 NjQgc2l6ZSwKPiArCQkJdTY0IG1pbl9zaXplKTsKPiArCj4gK3ZvaWQgaTkxNV9nZW1fYnVkZHlf ZmluaShzdHJ1Y3QgaTkxNV9nZW1fYnVkZHlfbW0gKm1tKTsKPiArCj4gK3N0cnVjdCBpOTE1X2dl bV9idWRkeV9ibG9jayAqCj4gK2k5MTVfZ2VtX2J1ZGR5X2FsbG9jKHN0cnVjdCBpOTE1X2dlbV9i dWRkeV9tbSAqbW0sCj4gKwkJICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpOwo+ICsKPiArdm9pZCBp OTE1X2dlbV9idWRkeV9mcmVlKHN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSAqbW0sCj4gKwkJCSBz dHJ1Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2sgKmJsb2NrKTsKPiArCj4gKyNlbmRpZgo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fYnVkZHkuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9idWRkeS5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM2NzgyYTM5YTFlOQo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1f YnVkZHkuYwo+IEBAIC0wLDAgKzEsMjA5IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCDCqSAyMDE4 IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us Cj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQg cGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4g KyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G IEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gKyAqCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIKPiArCj4gKyNkZWZpbmUgU1pf NjRHICgxVUxMIDw8IDM2KQo+ICsKPiArc3RhdGljIGludCBpZ3RfYnVkZHlfaW5pdCh2b2lkICph cmcpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9tbSBtbTsKPiArCXU2NCBzaXplOwo+ ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJZm9yIChzaXplID0gUEFHRV9TSVpFOyBzaXplIDw9IFNa XzY0Rzsgc2l6ZSA8PD0gMSkgewo+ICsJCXN0cnVjdCBpOTE1X2dlbV9idWRkeV9ibG9jayAqYmxv Y2s7Cj4gKwo+ICsJCWVyciA9IGk5MTVfZ2VtX2J1ZGR5X2luaXQoJm1tLCBzaXplLCBQQUdFX1NJ WkUpOwo+ICsJCWlmIChlcnIpIHsKPiArCQkJcHJfZXJyKCJidWRkeV9pbml0IHdpdGggc2l6ZT0l bGx4XG4gZmFpbGVkKCVkKVxuIiwKPiArCQkJICAgICAgIHNpemUsIGVycik7Cj4gKwkJCXJldHVy biBlcnI7Cj4gKwkJfQo+ICsKPiArCQlibG9jayA9IGk5MTVfZ2VtX2J1ZGR5X2FsbG9jKCZtbSwg bW0ubWF4X29yZGVyKTsKPiArCQlpZiAoSVNfRVJSKGJsb2NrKSkgewo+ICsJCQllcnIgPSBQVFJf RVJSKGJsb2NrKTsKPiArCQkJcHJfZXJyKCJidWRkeV9hbGxvYyB3aXRoIHNpemU9JWxseFxuIGZh aWxlZCglZClcbiIsCj4gKwkJCSAgICAgICBzaXplLCBlcnIpOwo+ICsJCQlnb3RvIG91dF9idWRk eV9maW5pOwo+ICsJCX0KPiArCj4gKwkJaWYgKGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrX29yZGVyKGJs b2NrKSAhPSBtbS5tYXhfb3JkZXIpIHsKPiArCQkJcHJfZXJyKCJidWRkeV9hbGxvYyBzaXplIG1p c21hdGNoXG4iKTsKPiArCQkJZXJyID0gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCWlmIChpOTE1 X2dlbV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spICE9IDApIHsKPiArCQkJcHJfZXJyKCJidWRk eV9hbGxvYyBvZmZzZXQgbWlzbWF0Y2hcbiIpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCX0K PiArCj4gKwkJaWYgKCFsaXN0X2VtcHR5KCZtbS5mcmVlX2xpc3RbbW0ubWF4X29yZGVyXSkpIHsK PiArCQkJcHJfZXJyKCJidWRkeV9hbGxvYyBzdGF0ZSBtaXNtYXRjaCwgYmxvY2sgaXMgb24gZnJl ZSBsaXN0XG4iKTsKPiArCQkJZXJyID0gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCWlmIChibG9j ayAhPSBtbS5yb290KSB7Cj4gKwkJCXByX2VycigiYnVkZHlfYWxsb2Mgc3RhdGUgbWlzbWF0Y2gs IGJsb2NrICE9IHJvb3RcbiIpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCX0KPiArCj4gKwkJ aWYgKGJsb2NrLT5sZWZ0IHx8IGJsb2NrLT5yaWdodCkgewo+ICsJCQlwcl9lcnIoImJ1ZGR5X2Fs bG9jIHN0YXRlIG1pc21hdGNoLCBibG9jayBpcyBub3QgbGVhZlxuIik7Cj4gKwkJCWVyciA9IC1F SU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X2dlbV9idWRkeV9mcmVlKCZtbSwgYmxvY2spOwo+ ICsKPiArCQlpZiAobGlzdF9lbXB0eSgmbW0uZnJlZV9saXN0W21tLm1heF9vcmRlcl0pKSB7Cj4g KwkJCXByX2VycigiYnVkZHlfZnJlZSBzdGF0ZSBtaXNtYXRjaCwgYmxvY2sgbm90IG9uIGZyZWUg bGlzdFxuIik7Cj4gKwkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X2dlbV9i dWRkeV9maW5pKCZtbSk7Cj4gKwo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfYnVkZHlfZmluaToKPiArCWk5MTVfZ2VtX2J1 ZGR5X2ZpbmkoJm1tKTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGlndF9idWRkeV9hbGxvYyh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBpOTE1X2dlbV9idWRk eV9tbSBtbTsKPiArCXU2NCBzaXplOwo+ICsJaW50IG9yZGVyOwo+ICsJaW50IGVycjsKPiArCj4g KwllcnIgPSBpOTE1X2dlbV9idWRkeV9pbml0KCZtbSwgU1pfNjRHLCBQQUdFX1NJWkUpOwo+ICsJ aWYgKGVycikgewo+ICsJCXByX2VycigiYnVkZHlfaW5pdCB3aXRoIHNpemU9JWxseFxuIGZhaWxl ZCglZClcbiIsIFNaXzY0RywgZXJyKTsKPiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCWZv ciAob3JkZXIgPSBtbS5tYXhfb3JkZXI7IG9yZGVyID49IDA7IG9yZGVyLS0pIHsKPiArCQlzdHJ1 Y3QgaTkxNV9nZW1fYnVkZHlfYmxvY2sgKmJsb2NrLCAqb247Cj4gKwkJc3RydWN0IGxpc3RfaGVh ZCBibG9ja3M7Cj4gKwkJdTY0IGJsb2NrX3NpemU7Cj4gKwkJdTY0IG9mZnNldDsKPiArCQl1NjQg cHJldl9vZmZzZXQ7Cj4gKwkJdTY0IG5fYmxvY2tzOwo+ICsKPiArCQlzaXplID0gaTkxNV9nZW1f YnVkZHlfc2l6ZSgmbW0pOwo+ICsJCWlmIChzaXplICE9IFNaXzY0Rykgewo+ICsJCQlwcl9lcnIo ImJ1ZGR5X3NpemUgbWlzbWF0Y2hcbiIpOwo+ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQlicmVh azsKPiArCQl9Cj4gKwo+ICsJCWlmIChsaXN0X2VtcHR5KCZtbS5mcmVlX2xpc3RbbW0ubWF4X29y ZGVyXSkpIHsKPiArCQkJcHJfZXJyKCJyb290IG5vdCBvbiB0aGUgZnJlZSBsaXN0XG4iKTsKPiAr CQkJZXJyID0gLUVJTlZBTDsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsKPiArCQlwcl9pbmZvKCJm aWxsaW5nIGFkZHJlc3Mgc3BhY2UoJWxseCkgd2l0aCBvcmRlcj0lZFxuIiwKPiArCQkJaTkxNV9n ZW1fYnVkZHlfc2l6ZSgmbW0pLCBvcmRlcik7Cj4gKwo+ICsJCXByZXZfb2Zmc2V0ID0gMDsKPiAr CQluX2Jsb2NrcyA9IGRpdjY0X3U2NChzaXplLCBCSVQob3JkZXIpICogbW0ubWluX3NpemUpOwo+ ICsJCUlOSVRfTElTVF9IRUFEKCZibG9ja3MpOwo+ICsKPiArCQl3aGlsZSAobl9ibG9ja3MtLSkg ewo+ICsJCQlibG9jayA9IGk5MTVfZ2VtX2J1ZGR5X2FsbG9jKCZtbSwgb3JkZXIpOwo+ICsJCQlp ZiAoSVNfRVJSKGJsb2NrKSkgewo+ICsJCQkJZXJyID0gUFRSX0VSUihibG9jayk7Cj4gKwkJCQlp ZiAoZXJyID09IC1FTk9NRU0pIHsKPiArCQkJCQlwcl9pbmZvKCJidWRkeV9hbGxvYyBoaXQgLUVO T01FTSB3aXRoIG9yZGVyPSVkXG4iLAo+ICsJCQkJCSAgICAgICAgb3JkZXIpOwo+ICsJCQkJfSBl bHNlIHsKPiArCQkJCQlwcl9lcnIoImJ1ZGR5X2FsbG9jIHdpdGggb3JkZXI9JWQgZmFpbGVkKCVk KVxuIiwKPiArCQkJCQkgICAgICAgb3JkZXIsIGVycik7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJYnJl YWs7Cj4gKwkJCX0KPiArCj4gKwkJCWxpc3RfYWRkKCZibG9jay0+bGluaywgJmJsb2Nrcyk7Cj4g Kwo+ICsJCQlpZiAoaTkxNV9nZW1fYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spICE9IG9yZGVyKSB7 Cj4gKwkJCQlwcl9lcnIoImJ1ZGR5X2FsbG9jIG9yZGVyIG1pc21hdGNoXG4iKTsKPiArCQkJCWVy ciA9IC1FSU5WQUw7Cj4gKwkJCQlicmVhazsKPiArCQkJfQo+ICsKPiArCQkJYmxvY2tfc2l6ZSA9 IGk5MTVfZ2VtX2J1ZGR5X2Jsb2NrX3NpemUoJm1tLCBibG9jayk7Cj4gKwkJCW9mZnNldCA9IGk5 MTVfZ2VtX2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayk7Cj4gKwo+ICsJCQlpZiAoIUlTX0FMSUdO RUQob2Zmc2V0LCBibG9ja19zaXplKSkgewo+ICsJCQkJcHJfZXJyKCJidWRkeV9hbGxvYyBvZmZz ZXQgbWlzYWxpZ25lZCwgb2Zmc2V0PSVsbHgsIGJsb2NrX3NpemU9JWxsdVxuIiwKPiArCQkJCQlv ZmZzZXQsIGJsb2NrX3NpemUpOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJCWJyZWFrOwo+ ICsJCQl9Cj4gKwo+ICsJCQlpZiAob2Zmc2V0ICYmIG9mZnNldCAhPSAocHJldl9vZmZzZXQgKyBi bG9ja19zaXplKSkgewo+ICsJCQkJcHJfZXJyKCJidWRkeV9hbGxvYyBvZmZzZXQgbWlzbWF0Y2gs IHByZXZfb2Zmc2V0PSVsbHgsIG9mZnNldD0lbGx4XG4iLAo+ICsJCQkJICAgICAgIHByZXZfb2Zm c2V0LCBvZmZzZXQpOwo+ICsJCQkJZXJyID0gLUVJTlZBTDsKPiArCQkJCWJyZWFrOwo+ICsJCQl9 Cj4gKwo+ICsJCQlwcmV2X29mZnNldCA9IG9mZnNldDsKPiArCQl9Cj4gKwo+ICsJCWxpc3RfZm9y X2VhY2hfZW50cnlfc2FmZShibG9jaywgb24sICZibG9ja3MsIGxpbmspIHsKPiArCQkJbGlzdF9k ZWwoJmJsb2NrLT5saW5rKTsKPiArCQkJaTkxNV9nZW1fYnVkZHlfZnJlZSgmbW0sIGJsb2NrKTsK PiArCQl9Cj4gKwo+ICsJCWlmIChlcnIpCj4gKwkJCWJyZWFrOwo+ICsJfQo+ICsKPiArCWk5MTVf Z2VtX2J1ZGR5X2ZpbmkoJm1tKTsKPiArCj4gKwlpZiAoZXJyID09IC1FTk9NRU0pCj4gKwkJZXJy ID0gMDsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9nZW1fYnVkZHlf bW9ja19zZWxmdGVzdHModm9pZCkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1 YnRlc3QgdGVzdHNbXSA9IHsKPiArCQlTVUJURVNUKGlndF9idWRkeV9pbml0KSwKPiArCQlTVUJU RVNUKGlndF9idWRkeV9hbGxvYyksCj4gKwl9Owo+ICsKPiArCXJldHVybiBpOTE1X3N1YnRlc3Rz KHRlc3RzLCBOVUxMKTsKPiArfQo+ICsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKPiBpbmRleCA4OGU1YWI1ODYzMzcuLjk4 NGUwN2VkNjVlNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAo+IEBAIC0yNCwzICsyNCw0IEBAIHNlbGZ0ZXN0KGV2 aWN0LCBpOTE1X2dlbV9ldmljdF9tb2NrX3NlbGZ0ZXN0cykKPiAgc2VsZnRlc3QoZ3R0LCBpOTE1 X2dlbV9ndHRfbW9ja19zZWxmdGVzdHMpCj4gIHNlbGZ0ZXN0KGh1Z2VwYWdlcywgaTkxNV9nZW1f aHVnZV9wYWdlX21vY2tfc2VsZnRlc3RzKQo+ICBzZWxmdGVzdChjb250ZXh0cywgaTkxNV9nZW1f Y29udGV4dF9tb2NrX3NlbGZ0ZXN0cykKPiArc2VsZnRlc3QoYnVkZHksIGk5MTVfZ2VtX2J1ZGR5 X21vY2tfc2VsZnRlc3RzKQoKLS0gCkphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNvdXJjZSBHcmFw aGljcyBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4