From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by gabe.freedesktop.org (Postfix) with ESMTPS id 23AA76E029 for ; Wed, 17 Mar 2021 19:38:48 +0000 (UTC) Received: by mail-ed1-x52c.google.com with SMTP id o19so3755414edc.3 for ; Wed, 17 Mar 2021 12:38:48 -0700 (PDT) MIME-Version: 1.0 References: <20210317144610.108372-1-zbigniew.kempczynski@intel.com> <20210317144610.108372-6-zbigniew.kempczynski@intel.com> In-Reply-To: <20210317144610.108372-6-zbigniew.kempczynski@intel.com> From: Jason Ekstrand Date: Wed, 17 Mar 2021 14:38:35 -0500 Message-ID: Subject: Re: [igt-dev] [PATCH i-g-t v26 05/35] lib/intel_allocator_simple: Add simple allocator List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: =?UTF-8?Q?Zbigniew_Kempczy=C5=84ski?= Cc: IGT GPU Tools List-ID: T24gV2VkLCBNYXIgMTcsIDIwMjEgYXQgOTo0NiBBTSBaYmlnbmlldyBLZW1wY3p5xYRza2kKPHpi aWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4gd3JvdGU6Cj4KPiBGcm9tOiBEb21pbmlrIEdy emVnb3J6ZWsgPGRvbWluaWsuZ3J6ZWdvcnpla0BpbnRlbC5jb20+Cj4KPiBTaW1wbGUgYWxsb2Nh dG9yIGJvcnJvd2VkIGZyb20gTWVzYSBhZG9wdGVkIGZvciBJR1QgdXNlLgo+Cj4gRnJvbSBkZWZh dWx0IHdlIHByZWZlciBhbiBhbGxvY2F0aW9uIGZyb20gdGhlIHRvcCBvZiB2bSBhZGRyZXNzIHNw YWNlCj4gKHdlIGNhbiBjYXRjaCBhZGRyZXNzaW5nIGlzc3VlcyBwcm8tYWN0aXZlbHkpLiBXaGVu IGZ1bmN0aW9uCj4gaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9jcmVhdGUoKSBpcyB1c2VkIHdlIGV4 Y2x1ZGUgbGFzdCBwYWdlIGFzIEhXCj4gdGVuZHMgdG8gaGFuZyBvbiB0aGUgcmVuZGVyIGVuZ2lu ZSB3aGVuIGZ1bGwgM0QgcGlwZWxpbmUgaXMgZXhlY3V0ZWQgZnJvbQo+IHRoZSBsYXN0IHBhZ2Uu IEZvciBtb3JlIGNvbnRyb2wgb2Ygdm0gcmFuZ2UgdXNlciBjYW4gc3BlY2lmeSByYW5nZSB1c2lu Zwo+IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfY3JlYXRlX2Z1bGwoKSAod2l0aCB0aGUgcmVzcGVj dCBvZiB0aGUgZ3R0IHNpemUpLgo+Cj4gU2lnbmVkLW9mZi1ieTogRG9taW5payBHcnplZ29yemVr IDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFpiaWduaWV3 IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgo+IENjOiBDaHJp cyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0KPiAgbGliL2ludGVsX2Fs bG9jYXRvcl9zaW1wbGUuYyB8IDc0NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICAxIGZpbGUgY2hhbmdlZCwgNzQ0IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYi9pbnRlbF9hbGxvY2F0b3Jfc2ltcGxlLmMKPgo+IGRpZmYgLS1naXQgYS9saWIvaW50 ZWxfYWxsb2NhdG9yX3NpbXBsZS5jIGIvbGliL2ludGVsX2FsbG9jYXRvcl9zaW1wbGUuYwo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwLi5jYzIwN2M4ZTkKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvbGliL2ludGVsX2FsbG9jYXRvcl9zaW1wbGUuYwo+IEBAIC0wLDAgKzEs NzQ0IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiArLyoKPiArICogQ29w eXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8 c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgImlndC5oIgo+ ICsjaW5jbHVkZSAiaWd0X3g4Ni5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfYWxsb2NhdG9yLmgiCj4g KyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKPiArI2luY2x1ZGUgImlndF9tYXAuaCIKPiArCj4g Ky8qCj4gKyAqIFdlIGxpbWl0IGFsbG9jYXRvciBzcGFjZSB0byBhdm9pZCBoYW5nIHdoZW4gYmF0 Y2ggd291bGQgYmUKPiArICogcGlubmVkIGluIHRoZSBsYXN0IHBhZ2UuCj4gKyAqLwo+ICsjZGVm aW5lIFJFU0VSVkVEIDQwOTYKPiArCj4gKy8qIEF2b2lkIGNvbXBpbGF0aW9uIHdhcm5pbmcgKi8K PiArc3RydWN0IGludGVsX2FsbG9jYXRvciAqaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9jcmVhdGUo aW50IGZkKTsKPiArc3RydWN0IGludGVsX2FsbG9jYXRvciAqCj4gK2ludGVsX2FsbG9jYXRvcl9z aW1wbGVfY3JlYXRlX2Z1bGwoaW50IGZkLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBhbGxvY2F0b3Jfc3RyYXRl Z3kgc3RyYXRlZ3kpOwo+ICsKPiArc3RydWN0IHNpbXBsZV92bWFfaGVhcCB7Cj4gKyAgICAgICBz dHJ1Y3QgaWd0X2xpc3RfaGVhZCBob2xlczsKPiArCj4gKyAgICAgICAvKiBJZiB0cnVlLCBzaW1w bGVfdm1hX2hlYXBfYWxsb2Mgd2lsbCBwcmVmZXIgaGlnaCBhZGRyZXNzZXMKPiArICAgICAgICAq Cj4gKyAgICAgICAgKiBEZWZhdWx0IGlzIHRydWUuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGJv b2wgYWxsb2NfaGlnaDsKPiArfTsKPiArCj4gK3N0cnVjdCBzaW1wbGVfdm1hX2hvbGUgewo+ICsg ICAgICAgc3RydWN0IGlndF9saXN0X2hlYWQgbGluazsKPiArICAgICAgIHVpbnQ2NF90IG9mZnNl dDsKPiArICAgICAgIHVpbnQ2NF90IHNpemU7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yX3NpbXBsZSB7Cj4gKyAgICAgICBzdHJ1Y3QgaWd0X21hcCBvYmplY3RzOwo+ICsgICAg ICAgc3RydWN0IGlndF9tYXAgcmVzZXJ2ZWQ7Cj4gKyAgICAgICBzdHJ1Y3Qgc2ltcGxlX3ZtYV9o ZWFwIGhlYXA7Cj4gKwo+ICsgICAgICAgdWludDY0X3Qgc3RhcnQ7Cj4gKyAgICAgICB1aW50NjRf dCBlbmQ7Cj4gKwo+ICsgICAgICAgLyogc3RhdGlzdGljcyAqLwo+ICsgICAgICAgdWludDY0X3Qg dG90YWxfc2l6ZTsKPiArICAgICAgIHVpbnQ2NF90IGFsbG9jYXRlZF9zaXplOwo+ICsgICAgICAg dWludDY0X3QgYWxsb2NhdGVkX29iamVjdHM7Cj4gKyAgICAgICB1aW50NjRfdCByZXNlcnZlZF9z aXplOwo+ICsgICAgICAgdWludDY0X3QgcmVzZXJ2ZWRfYXJlYXM7Cj4gK307Cj4gKwo+ICtzdHJ1 Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCB7Cj4gKyAgICAgICB1aW50MzJfdCBoYW5kbGU7Cj4g KyAgICAgICB1aW50NjRfdCBvZmZzZXQ7Cj4gKyAgICAgICB1aW50NjRfdCBzaXplOwo+ICt9Owo+ ICsKPiArI2RlZmluZSBzaW1wbGVfdm1hX2ZvcmVhY2hfaG9sZShfaG9sZSwgX2hlYXApIFwKPiAr ICAgICAgIGlndF9saXN0X2Zvcl9lYWNoX2VudHJ5KF9ob2xlLCAmKF9oZWFwKS0+aG9sZXMsIGxp bmspCj4gKwo+ICsjZGVmaW5lIHNpbXBsZV92bWFfZm9yZWFjaF9ob2xlX3NhZmUoX2hvbGUsIF9o ZWFwLCBfdG1wKSBcCj4gKyAgICAgICBpZ3RfbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9ob2xl LCBfdG1wLCAgJihfaGVhcCktPmhvbGVzLCBsaW5rKQo+ICsKPiArI2RlZmluZSBzaW1wbGVfdm1h X2ZvcmVhY2hfaG9sZV9zYWZlX3JldihfaG9sZSwgX2hlYXAsIF90bXApIFwKPiArICAgICAgIGln dF9saXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShfaG9sZSwgX3RtcCwgICYoX2hlYXAp LT5ob2xlcywgbGluaykKPiArCj4gKyNkZWZpbmUgR0VOOF9HVFRfQUREUkVTU19XSURUSCA0OAo+ ICsjZGVmaW5lIERFQ0FOT05JQ0FMKG9mZnNldCkgKG9mZnNldCAmICgoMXVsbCA8PCBHRU44X0dU VF9BRERSRVNTX1dJRFRIKSAtIDEpKQo+ICsKPiArc3RhdGljIHZvaWQgc2ltcGxlX3ZtYV9oZWFw X3ZhbGlkYXRlKHN0cnVjdCBzaW1wbGVfdm1hX2hlYXAgKmhlYXApCj4gK3sKPiArICAgICAgIHVp bnQ2NF90IHByZXZfb2Zmc2V0ID0gMDsKPiArICAgICAgIHN0cnVjdCBzaW1wbGVfdm1hX2hvbGUg KmhvbGU7Cj4gKwo+ICsgICAgICAgc2ltcGxlX3ZtYV9mb3JlYWNoX2hvbGUoaG9sZSwgaGVhcCkg ewo+ICsgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KGhvbGUtPnNpemUgPiAwKTsKPiArCj4gKyAg ICAgICAgICAgICAgIGlmICgmaG9sZS0+bGluayA9PSBoZWFwLT5ob2xlcy5uZXh0KSB7Cj4gKyAg ICAgICAgICAgICAgIC8qIFRoaXMgbXVzdCBiZSB0aGUgdG9wLW1vc3QgaG9sZS4gIEFzc2VydCB0 aGF0LAo+ICsgICAgICAgICAgICAgICAgKiBpZiBpdCBvdmVyZmxvd3MsIGl0IG92ZXJmbG93cyB0 byAwLCBpLmUuIDJeNjQuCj4gKyAgICAgICAgICAgICAgICAqLwoKVGhpcyBpbmRlbnQgaXMgd2Vp cmQuCgo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlndF9hc3NlcnQoaG9sZS0+c2l6ZSArIGhv bGUtPm9mZnNldCA9PSAwIHx8Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo b2xlLT5zaXplICsgaG9sZS0+b2Zmc2V0ID4gaG9sZS0+b2Zmc2V0KTsKPiArICAgICAgICAgICAg ICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgLyogVGhpcyBpcyBub3QgdGhlIHRvcC1tb3N0 IGhvbGUgc28gaXQgbXVzdCBub3Qgb3ZlcmZsb3cgYW5kLAo+ICsgICAgICAgICAgICAgICAgKiBp biBmYWN0LCBtdXN0IGJlIHN0cmljdGx5IGxvd2VyIHRoYW4gdGhlIHRvcC1tb3N0IGhvbGUuICBJ Zgo+ICsgICAgICAgICAgICAgICAgKiBob2xlLT5zaXplICsgaG9sZS0+b2Zmc2V0ID09IHByZXZf b2Zmc2V0LCB0aGVuIHdlIGZhaWxlZCB0bwo+ICsgICAgICAgICAgICAgICAgKiBqb2luIGhvbGVz IGR1cmluZyBhIHNpbXBsZV92bWFfaGVhcF9mcmVlLgo+ICsgICAgICAgICAgICAgICAgKi8KCldl aXJkIGluZGVudC4KCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWd0X2Fzc2VydChob2xlLT5z aXplICsgaG9sZS0+b2Zmc2V0ID4gaG9sZS0+b2Zmc2V0ICYmCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBob2xlLT5zaXplICsgaG9sZS0+b2Zmc2V0IDwgcHJldl9vZmZzZXQp Owo+ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgIHByZXZfb2Zmc2V0ID0gaG9s ZS0+b2Zmc2V0Owo+ICsgICAgICAgfQo+ICt9Cj4gKwo+ICsKPiArc3RhdGljIHZvaWQgc2ltcGxl X3ZtYV9oZWFwX2ZyZWUoc3RydWN0IHNpbXBsZV92bWFfaGVhcCAqaGVhcCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCj4g K3sKPiArICAgICAgIHN0cnVjdCBzaW1wbGVfdm1hX2hvbGUgKmhpZ2hfaG9sZSA9IE5VTEwsICps b3dfaG9sZSA9IE5VTEwsICpob2xlOwo+ICsgICAgICAgYm9vbCBoaWdoX2FkamFjZW50LCBsb3df YWRqYWNlbnQ7Cj4gKwo+ICsgICAgICAgLyogRnJlZWluZyBzb21ldGhpbmcgd2l0aCBhIHNpemUg b2YgMCBpcyBub3QgdmFsaWQuICovCj4gKyAgICAgICBpZ3RfYXNzZXJ0KHNpemUgPiAwKTsKPiAr Cj4gKyAgICAgICAvKiBJdCdzIHBvc3NpYmxlIGZvciBvZmZzZXQgKyBzaXplIHRvIHdyYXAgYXJv dW5kIGlmIHdlIHRvdWNoIHRoZSB0b3Agb2YKPiArICAgICAgICAqIHRoZSA2NC1iaXQgYWRkcmVz cyBzcGFjZSwgYnV0IHdlIGNhbm5vdCBnbyBhbnkgaGlnaGVyIHRoYW4gMl42NC4KPiArICAgICAg ICAqLwo+ICsgICAgICAgaWd0X2Fzc2VydChvZmZzZXQgKyBzaXplID09IDAgfHwgb2Zmc2V0ICsg c2l6ZSA+IG9mZnNldCk7Cj4gKwo+ICsgICAgICAgc2ltcGxlX3ZtYV9oZWFwX3ZhbGlkYXRlKGhl YXApOwo+ICsKPiArICAgICAgIC8qIEZpbmQgaW1tZWRpYXRlbHkgaGlnaGVyIGFuZCBsb3dlciBo b2xlcyBpZiB0aGV5IGV4aXN0LiAqLwo+ICsgICAgICAgc2ltcGxlX3ZtYV9mb3JlYWNoX2hvbGUo aG9sZSwgaGVhcCkgewo+ICsgICAgICAgICAgICAgICBpZiAoaG9sZS0+b2Zmc2V0IDw9IG9mZnNl dCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGxvd19ob2xlID0gaG9sZTsKPiArICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICAgICBoaWdoX2hvbGUgPSBob2xlOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmIChoaWdo X2hvbGUpCj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQob2Zmc2V0ICsgc2l6ZSA8PSBoaWdo X2hvbGUtPm9mZnNldCk7Cj4gKyAgICAgICBoaWdoX2FkamFjZW50ID0gaGlnaF9ob2xlICYmIG9m ZnNldCArIHNpemUgPT0gaGlnaF9ob2xlLT5vZmZzZXQ7Cj4gKwo+ICsgICAgICAgaWYgKGxvd19o b2xlKSB7Cj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQobG93X2hvbGUtPm9mZnNldCArIGxv d19ob2xlLT5zaXplID4gbG93X2hvbGUtPm9mZnNldCk7Cj4gKyAgICAgICAgICAgICAgIGlndF9h c3NlcnQobG93X2hvbGUtPm9mZnNldCArIGxvd19ob2xlLT5zaXplIDw9IG9mZnNldCk7Cj4gKyAg ICAgICB9Cj4gKyAgICAgICBsb3dfYWRqYWNlbnQgPSBsb3dfaG9sZSAmJiBsb3dfaG9sZS0+b2Zm c2V0ICsgbG93X2hvbGUtPnNpemUgPT0gb2Zmc2V0Owo+ICsKPiArICAgICAgIGlmIChsb3dfYWRq YWNlbnQgJiYgaGlnaF9hZGphY2VudCkgewo+ICsgICAgICAgICAgICAgICAvKiBNZXJnZSB0aGUg dHdvIGhvbGVzICovCj4gKyAgICAgICAgICAgICAgIGxvd19ob2xlLT5zaXplICs9IHNpemUgKyBo aWdoX2hvbGUtPnNpemU7Cj4gKyAgICAgICAgICAgICAgIGlndF9saXN0X2RlbCgmaGlnaF9ob2xl LT5saW5rKTsKPiArICAgICAgICAgICAgICAgZnJlZShoaWdoX2hvbGUpOwo+ICsgICAgICAgfSBl bHNlIGlmIChsb3dfYWRqYWNlbnQpIHsKPiArICAgICAgICAgICAgICAgLyogTWVyZ2UgaW50byB0 aGUgbG93IGhvbGUgKi8KPiArICAgICAgICAgICAgICAgbG93X2hvbGUtPnNpemUgKz0gc2l6ZTsK PiArICAgICAgIH0gZWxzZSBpZiAoaGlnaF9hZGphY2VudCkgewo+ICsgICAgICAgICAgICAgICAv KiBNZXJnZSBpbnRvIHRoZSBoaWdoIGhvbGUgKi8KPiArICAgICAgICAgICAgICAgaGlnaF9ob2xl LT5vZmZzZXQgPSBvZmZzZXQ7Cj4gKyAgICAgICAgICAgICAgIGhpZ2hfaG9sZS0+c2l6ZSArPSBz aXplOwo+ICsgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgICAgLyogTmVpdGhlciBob2xl IGlzIGFkamFjZW50OyBtYWtlIGEgbmV3IG9uZSAqLwo+ICsgICAgICAgICAgICAgICBob2xlID0g Y2FsbG9jKDEsIHNpemVvZigqaG9sZSkpOwo+ICsgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0KGhv bGUpOwo+ICsKPiArICAgICAgICAgICAgICAgaG9sZS0+b2Zmc2V0ID0gb2Zmc2V0Owo+ICsgICAg ICAgICAgICAgICBob2xlLT5zaXplID0gc2l6ZTsKPiArICAgICAgICAgICAgICAgLyogQWRkIGl0 IGFmdGVyIHRoZSBoaWdoIGhvbGUgc28gd2UgbWFpbnRhaW4gaGlnaC10by1sb3cKPiArICAgICAg ICAgICAgICAgICogIG9yZGVyaW5nCj4gKyAgICAgICAgICAgICAgICAqLwo+ICsgICAgICAgICAg ICAgICBpZiAoaGlnaF9ob2xlKQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlndF9saXN0X2Fk ZCgmaG9sZS0+bGluaywgJmhpZ2hfaG9sZS0+bGluayk7Cj4gKyAgICAgICAgICAgICAgIGVsc2UK PiArICAgICAgICAgICAgICAgICAgICAgICBpZ3RfbGlzdF9hZGQoJmhvbGUtPmxpbmssICZoZWFw LT5ob2xlcyk7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgc2ltcGxlX3ZtYV9oZWFwX3ZhbGlk YXRlKGhlYXApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzaW1wbGVfdm1hX2hlYXBfaW5pdChz dHJ1Y3Qgc2ltcGxlX3ZtYV9oZWFwICpoZWFwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBzaXplLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVudW0gYWxsb2NhdG9yX3N0cmF0ZWd5IHN0cmF0ZWd5KQo+ICt7Cj4g KyAgICAgICBJR1RfSU5JVF9MSVNUX0hFQUQoJmhlYXAtPmhvbGVzKTsKPiArICAgICAgIHNpbXBs ZV92bWFfaGVhcF9mcmVlKGhlYXAsIHN0YXJ0LCBzaXplKTsKPiArCj4gKyAgICAgICBzd2l0Y2gg KHN0cmF0ZWd5KSB7Cj4gKyAgICAgICBjYXNlIEFMTE9DX1NUUkFURUdZX0xPV19UT19ISUdIOgo+ ICsgICAgICAgICAgICAgICBoZWFwLT5hbGxvY19oaWdoID0gZmFsc2U7Cj4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+ICsgICAgICAgY2FzZSBBTExPQ19TVFJBVEVHWV9ISUdIX1RPX0xPVzoKPiAr ICAgICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgICAgICAgIGhlYXAtPmFsbG9jX2hpZ2ggPSB0cnVl Owo+ICsgICAgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzaW1wbGVfdm1hX2hlYXBfZmlu aXNoKHN0cnVjdCBzaW1wbGVfdm1hX2hlYXAgKmhlYXApCj4gK3sKPiArICAgICAgIHN0cnVjdCBz aW1wbGVfdm1hX2hvbGUgKmhvbGUsICp0bXA7Cj4gKwo+ICsgICAgICAgc2ltcGxlX3ZtYV9mb3Jl YWNoX2hvbGVfc2FmZShob2xlLCBoZWFwLCB0bXApCj4gKyAgICAgICAgICAgICAgIGZyZWUoaG9s ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNpbXBsZV92bWFfaG9sZV9hbGxvYyhzdHJ1Y3Qg c2ltcGxlX3ZtYV9ob2xlICpob2xlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCj4gK3sKPiArICAgICAgIHN0cnVjdCBz aW1wbGVfdm1hX2hvbGUgKmhpZ2hfaG9sZTsKPiArICAgICAgIHVpbnQ2NF90IHdhc3RlOwo+ICsK PiArICAgICAgIGlndF9hc3NlcnQoaG9sZS0+b2Zmc2V0IDw9IG9mZnNldCk7Cj4gKyAgICAgICBp Z3RfYXNzZXJ0KGhvbGUtPnNpemUgPj0gb2Zmc2V0IC0gaG9sZS0+b2Zmc2V0ICsgc2l6ZSk7Cj4g Kwo+ICsgICAgICAgaWYgKG9mZnNldCA9PSBob2xlLT5vZmZzZXQgJiYgc2l6ZSA9PSBob2xlLT5z aXplKSB7Cj4gKyAgICAgICAgICAgICAgIC8qIEp1c3QgZ2V0IHJpZCBvZiB0aGUgaG9sZS4gKi8K PiArICAgICAgICAgICAgICAgaWd0X2xpc3RfZGVsKCZob2xlLT5saW5rKTsKPiArICAgICAgICAg ICAgICAgZnJlZShob2xlKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuOwo+ICsgICAgICAgfQo+ ICsKPiArICAgICAgIGlndF9hc3NlcnQob2Zmc2V0IC0gaG9sZS0+b2Zmc2V0IDw9IGhvbGUtPnNp emUgLSBzaXplKTsKPiArICAgICAgIHdhc3RlID0gKGhvbGUtPnNpemUgLSBzaXplKSAtIChvZmZz ZXQgLSBob2xlLT5vZmZzZXQpOwo+ICsgICAgICAgaWYgKHdhc3RlID09IDApIHsKPiArICAgICAg ICAgICAgICAgLyogV2UgYWxsb2NhdGVkIGF0IHRoZSB0b3AtPiAgU2hyaW5rIHRoZSBob2xlIGRv d24uICovCj4gKyAgICAgICAgICAgICAgIGhvbGUtPnNpemUgLT0gc2l6ZTsKPiArICAgICAgICAg ICAgICAgcmV0dXJuOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmIChvZmZzZXQgPT0gaG9s ZS0+b2Zmc2V0KSB7Cj4gKyAgICAgICAgICAgICAgIC8qIFdlIGFsbG9jYXRlZCBhdCB0aGUgYm90 dG9tLiBTaHJpbmsgdGhlIGhvbGUgdXAtPiAqLwo+ICsgICAgICAgICAgICAgICBob2xlLT5vZmZz ZXQgKz0gc2l6ZTsKPiArICAgICAgICAgICAgICAgaG9sZS0+c2l6ZSAtPSBzaXplOwo+ICsgICAg ICAgICAgICAgICByZXR1cm47Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAvKiBXZSBhbGxvY2F0ZWQg aW4gdGhlIG1pZGRsZS4gIFdlIG5lZWQgdG8gc3BsaXQgdGhlIG9sZCBob2xlIGludG8gdHdvCj4g KyAgICAqIGhvbGVzLCBvbmUgaGlnaCBhbmQgb25lIGxvdy4KPiArICAgICovCgpXZWlyZCBpbmRl bnQKCj4gKyAgICAgICBoaWdoX2hvbGUgPSBjYWxsb2MoMSwgc2l6ZW9mKCpob2xlKSk7Cj4gKyAg ICAgICBpZ3RfYXNzZXJ0KGhpZ2hfaG9sZSk7Cj4gKwo+ICsgICAgICAgaGlnaF9ob2xlLT5vZmZz ZXQgPSBvZmZzZXQgKyBzaXplOwo+ICsgICAgICAgaGlnaF9ob2xlLT5zaXplID0gd2FzdGU7Cj4g Kwo+ICsgICAvKiBBZGp1c3QgdGhlIGhvbGUgdG8gYmUgdGhlIGFtb3VudCBvZiBzcGFjZSBsZWZ0 IGF0IGhlIGJvdHRvbSBvZiB0aGUKPiArICAgICogb3JpZ2luYWwgaG9sZS4KPiArICAgICovCgpX ZWlyZCBpbmRlbnQKCj4gKyAgICAgICBob2xlLT5zaXplID0gb2Zmc2V0IC0gaG9sZS0+b2Zmc2V0 Owo+ICsKPiArICAgLyogUGxhY2UgdGhlIG5ldyBob2xlIGJlZm9yZSB0aGUgb2xkIGhvbGUgc28g dGhhdCB0aGUgbGlzdCBpcyBpbiBvcmRlcgo+ICsgICAgKiBmcm9tIGhpZ2ggdG8gbG93Lgo+ICsg ICAgKi8KCldlaXJkIGluZGVudAoKPiArICAgICAgIGlndF9saXN0X2FkZF90YWlsKCZoaWdoX2hv bGUtPmxpbmssICZob2xlLT5saW5rKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgc2ltcGxlX3Zt YV9oZWFwX2FsbG9jKHN0cnVjdCBzaW1wbGVfdm1hX2hlYXAgKmhlYXAsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpvZmZzZXQsIHVpbnQ2NF90IHNpemUsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGFsaWdubWVudCkKPiAr ewo+ICsgICAgICAgc3RydWN0IHNpbXBsZV92bWFfaG9sZSAqaG9sZSwgKnRtcDsKPiArICAgICAg IHVpbnQ2NF90IG1pc2FsaWduOwo+ICsKPiArICAgICAgIC8qIFRoZSBjYWxsZXIgaXMgZXhwZWN0 ZWQgdG8gcmVqZWN0IHplcm8tc2l6ZSBhbGxvY2F0aW9ucyAqLwo+ICsgICAgICAgaWd0X2Fzc2Vy dChzaXplID4gMCk7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KGFsaWdubWVudCA+IDApOwo+ICsKPiAr ICAgICAgIHNpbXBsZV92bWFfaGVhcF92YWxpZGF0ZShoZWFwKTsKPiArCj4gKyAgICAgICBpZiAo aGVhcC0+YWxsb2NfaGlnaCkgewo+ICsgICAgICAgICAgICAgICBzaW1wbGVfdm1hX2ZvcmVhY2hf aG9sZV9zYWZlKGhvbGUsIGhlYXAsIHRtcCkgewo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm IChzaXplID4gaG9sZS0+c2l6ZSkKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOwo+ICsKPiArICAgICAgIC8qIENvbXB1dGUgdGhlIG9mZnNldCBhcyB0aGUgaGlnaGVz dCBhZGRyZXNzIHdoZXJlIGEgY2h1bmsgb2YgdGhlCj4gKyAgICAgICAgKiBnaXZlbiBzaXplIGNh biBiZSB3aXRob3V0IGdvaW5nIG92ZXIgdGhlIHRvcCBvZiB0aGUgaG9sZS4KPiArICAgICAgICAq Cj4gKyAgICAgICAgKiBUaGlzIGNhbGN1bGF0aW9uIGlzIGtub3duIHRvIG5vdCBvdmVyZmxvdyBi ZWNhdXNlIHdlIGtub3cgdGhhdAo+ICsgICAgICAgICogaG9sZS0+c2l6ZSArIGhvbGUtPm9mZnNl dCBjYW4gb25seSBvdmVyZmxvdyB0byAwIGFuZCBzaXplID4gMC4KPiArICAgICAgICAqLwoKV2Vp cmQgaW5kZW50Cgo+ICsgICAgICAgICAgICAgICAgICAgICAgICpvZmZzZXQgPSAoaG9sZS0+c2l6 ZSAtIHNpemUpICsgaG9sZS0+b2Zmc2V0Owo+ICsKPiArICAgICAgICAgLyogQWxpZ24gdGhlIG9m ZnNldC4gIFdlIGFsaWduIGRvd24gYW5kIG5vdCB1cCBiZWNhdXNlIHdlIGFyZQo+ICsgICAgICAg ICAgKgo+ICsgICAgICAgICAgKiBhbGxvY2F0aW5nIGZyb20gdGhlIHRvcCBvZiB0aGUgaG9sZSBh bmQgbm90IHRoZSBib3R0b20uCj4gKyAgICAgICAgICAqLwoKV2VpcmQgaW5kZW50Cgo+ICsgICAg ICAgICAgICAgICAgICAgICAgICpvZmZzZXQgPSAoKm9mZnNldCAvIGFsaWdubWVudCkgKiBhbGln bm1lbnQ7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICgqb2Zmc2V0IDwgaG9sZS0+ b2Zmc2V0KQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV92bWFfaG9sZV9hbGxvYyhob2xlLCAqb2Zm c2V0LCBzaXplKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVfdm1hX2hlYXBfdmFs aWRhdGUoaGVhcCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAg ICAgICAgICAgICAgIH0KPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAgIHNpbXBs ZV92bWFfZm9yZWFjaF9ob2xlX3NhZmVfcmV2KGhvbGUsIGhlYXAsIHRtcCkgewo+ICsgICAgICAg ICAgICAgICAgICAgICAgIGlmIChzaXplID4gaG9sZS0+c2l6ZSkKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAq b2Zmc2V0ID0gaG9sZS0+b2Zmc2V0Owo+ICsKPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBB bGlnbiB0aGUgb2Zmc2V0ICovCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbWlzYWxpZ24gPSAq b2Zmc2V0ICUgYWxpZ25tZW50Owo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaXNhbGln bikgewo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgcGFkID0gYWxp Z25tZW50IC0gbWlzYWxpZ247Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHBhZCA+IGhvbGUtPnNpemUgLSBzaXplKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqb2Zmc2V0ICs9IHBhZDsKPiArICAgICAgICAgICAgICAgICAgICAgICB9Cj4gKwo+ICsg ICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZV92bWFfaG9sZV9hbGxvYyhob2xlLCAqb2Zmc2V0 LCBzaXplKTsKPiArICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGVfdm1hX2hlYXBfdmFsaWRh dGUoaGVhcCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAgICAg ICAgICAgICAgIH0KPiArICAgICAgIH0KPiArCj4gKyAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2Nh dGUgKi8KPiArICAgICAgIHJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW50 ZWxfYWxsb2NhdG9yX3NpbXBsZV9nZXRfYWRkcmVzc19yYW5nZShzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yICppYWwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50NjRfdCAqc3RhcnRwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgKmVuZHApCj4gK3sKPiArICAgICAgIHN0 cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzID0gaWFsLT5wcml2Owo+ICsKPiArICAg ICAgIGlmIChzdGFydHApCj4gKyAgICAgICAgICAgICAgICpzdGFydHAgPSBpYWxzLT5zdGFydDsK PiArCj4gKyAgICAgICBpZiAoZW5kcCkKPiArICAgICAgICAgICAgICAgKmVuZHAgPSBpYWxzLT5l bmQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHNpbXBsZV92bWFfaGVhcF9hbGxvY19hZGRyKHN0 cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKPiArewo+ ICsgICAgICAgc3RydWN0IHNpbXBsZV92bWFfaGVhcCAqaGVhcCA9ICZpYWxzLT5oZWFwOwo+ICsg ICAgICAgc3RydWN0IHNpbXBsZV92bWFfaG9sZSAqaG9sZSwgKnRtcDsKPiArICAgICAgIC8qIEFs bG9jYXRpbmcgc29tZXRoaW5nIHdpdGggYSBzaXplIG9mIDAgaXMgbm90IHZhbGlkLiAqLwo+ICsg ICAgICAgaWd0X2Fzc2VydChzaXplID4gMCk7Cj4gKwo+ICsgICAgICAgLyogSXQncyBwb3NzaWJs ZSBmb3Igb2Zmc2V0ICsgc2l6ZSB0byB3cmFwIGFyb3VuZCBpZiB3ZSB0b3VjaCB0aGUgdG9wIG9m Cj4gKyAgICAgICAgKiB0aGUgNjQtYml0IGFkZHJlc3Mgc3BhY2UsIGJ1dCB3ZSBjYW5ub3QgZ28g YW55IGhpZ2hlciB0aGFuIDJeNjQuCj4gKyAgICAgICAgKi8KPiArICAgICAgIGlndF9hc3NlcnQo b2Zmc2V0ICsgc2l6ZSA9PSAwIHx8IG9mZnNldCArIHNpemUgPiBvZmZzZXQpOwo+ICsKPiArICAg ICAgIC8qIEZpbmQgdGhlIGhvbGUgaWYgb25lIGV4aXN0cy4gKi8KPiArICAgICAgIHNpbXBsZV92 bWFfZm9yZWFjaF9ob2xlX3NhZmUoaG9sZSwgaGVhcCwgdG1wKSB7Cj4gKyAgICAgICAgICAgICAg IGlmIChob2xlLT5vZmZzZXQgPiBvZmZzZXQpCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7Cj4gKwo+ICsgICAgICAgLyogSG9sZXMgYXJlIG9yZGVyZWQgaGlnaC10by1sb3cgc28g dGhlIGZpcnN0IGhvbGUgd2UgZmluZCB3aXRoCj4gKyAgICAgICAgKiBob2xlLT5vZmZzZXQgPD0g aXMgb3VyIGhvbGUuICBJZiBpdCdzIG5vdCBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlCj4gKyAg ICAgICAgKiByZXF1ZXN0ZWQgcmFuZ2UsIHRoZW4gdGhlIGFsbG9jYXRpb24gZmFpbHMuCj4gKyAg ICAgICAgKi8KCldlaXJkIGluZGVudC4KCj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQoaG9s ZS0+b2Zmc2V0IDw9IG9mZnNldCk7Cj4gKyAgICAgICAgICAgICAgIGlmIChob2xlLT5zaXplIDwg b2Zmc2V0IC0gaG9sZS0+b2Zmc2V0ICsgc2l6ZSkKPiArICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgICAgICAgICAgICBzaW1wbGVfdm1hX2hvbGVfYWxsb2Mo aG9sZSwgb2Zmc2V0LCBzaXplKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAg ICAgICB9Cj4gKwo+ICsgICAgICAgLyogV2UgZGlkbid0IGZpbmQgYSBzdWl0YWJsZSBob2xlICov Cj4gKyAgICAgICByZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50NjRfdCBpbnRl bF9hbGxvY2F0b3Jfc2ltcGxlX2FsbG9jKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYW5k bGUsIHVpbnQ2NF90IHNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDY0X3QgYWxpZ25tZW50KQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxf YWxsb2NhdG9yX3JlY29yZCAqcmVjOwo+ICsgICAgICAgc3RydWN0IGludGVsX2FsbG9jYXRvcl9z aW1wbGUgKmlhbHM7Cj4gKyAgICAgICB1aW50NjRfdCBvZmZzZXQ7Cj4gKwo+ICsgICAgICAgaWd0 X2Fzc2VydChpYWwpOwo+ICsgICAgICAgaWFscyA9IChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3Np bXBsZSAqKSBpYWwtPnByaXY7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KGlhbHMpOwo+ICsgICAgICAg aWd0X2Fzc2VydChoYW5kbGUpOwo+ICsgICAgICAgYWxpZ25tZW50ID0gYWxpZ25tZW50ID4gMCA/ IGFsaWdubWVudCA6IDE7Cj4gKyAgICAgICByZWMgPSBpZ3RfbWFwX2ZpbmQoJmlhbHMtPm9iamVj dHMsICZoYW5kbGUpOwo+ICsgICAgICAgaWYgKHJlYykgewo+ICsgICAgICAgICAgICAgICBvZmZz ZXQgPSByZWMtPm9mZnNldDsKPiArICAgICAgICAgICAgICAgaWd0X2Fzc2VydChyZWMtPnNpemUg PT0gc2l6ZSk7Cj4gKyAgICAgICB9IGVsc2Ugewo+ICsgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0 KHNpbXBsZV92bWFfaGVhcF9hbGxvYygmaWFscy0+aGVhcCwgJm9mZnNldCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYWxpZ25tZW50KSk7 Cj4gKyAgICAgICAgICAgICAgIHJlYyA9IG1hbGxvYyhzaXplb2YoKnJlYykpOwo+ICsgICAgICAg ICAgICAgICByZWMtPmhhbmRsZSA9IGhhbmRsZTsKPiArICAgICAgICAgICAgICAgcmVjLT5vZmZz ZXQgPSBvZmZzZXQ7Cj4gKyAgICAgICAgICAgICAgIHJlYy0+c2l6ZSA9IHNpemU7Cj4gKwo+ICsg ICAgICAgICAgICAgICBpZ3RfbWFwX2FkZCgmaWFscy0+b2JqZWN0cywgJnJlYy0+aGFuZGxlLCBy ZWMpOwo+ICsgICAgICAgICAgICAgICBpYWxzLT5hbGxvY2F0ZWRfb2JqZWN0cysrOwo+ICsgICAg ICAgICAgICAgICBpYWxzLT5hbGxvY2F0ZWRfc2l6ZSArPSBzaXplOwo+ICsgICAgICAgfQo+ICsK PiArICAgICAgIHJldHVybiBvZmZzZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGludGVsX2Fs bG9jYXRvcl9zaW1wbGVfZnJlZShzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWwsIHVpbnQzMl90 IGhhbmRsZSkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJl YyA9IE5VTEw7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqaWFsczsK PiArCj4gKyAgICAgICBpZ3RfYXNzZXJ0KGlhbCk7Cj4gKyAgICAgICBpYWxzID0gKHN0cnVjdCBp bnRlbF9hbGxvY2F0b3Jfc2ltcGxlICopIGlhbC0+cHJpdjsKPiArICAgICAgIGlndF9hc3NlcnQo aWFscyk7Cj4gKwo+ICsgICAgICAgcmVjID0gaWd0X21hcF9kZWwoJmlhbHMtPm9iamVjdHMsICZo YW5kbGUpOwo+ICsgICAgICAgaWYgKHJlYykgewo+ICsgICAgICAgICAgICAgICBzaW1wbGVfdm1h X2hlYXBfZnJlZSgmaWFscy0+aGVhcCwgcmVjLT5vZmZzZXQsIHJlYy0+c2l6ZSk7Cj4gKyAgICAg ICAgICAgICAgIGlhbHMtPmFsbG9jYXRlZF9vYmplY3RzLS07Cj4gKyAgICAgICAgICAgICAgIGlh bHMtPmFsbG9jYXRlZF9zaXplIC09IHJlYy0+c2l6ZTsKPiArICAgICAgICAgICAgICAgZnJlZShy ZWMpOwo+ICsKPiArICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAgICAgICB9Cj4gKwo+ ICsgICAgICAgcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgX19z YW1lKGNvbnN0IHN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWMsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90 IG9mZnNldCkKPiArewo+ICsgICAgICAgcmV0dXJuIHJlYy0+aGFuZGxlID09IGhhbmRsZSAmJiBy ZWMtPnNpemUgPT0gc2l6ZSAmJgo+ICsgICAgICAgICAgICAgICAgICAgICAgIERFQ0FOT05JQ0FM KHJlYy0+b2Zmc2V0KSA9PSBERUNBTk9OSUNBTChvZmZzZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg Ym9vbCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2lzX2FsbG9jYXRlZChzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yICppYWwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBzaXplLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG9mZnNldCkKPiArewo+ICsg ICAgICAgc3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlYzsKPiArICAgICAgIHN0cnVj dCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzOwo+ICsgICAgICAgYm9vbCBzYW1lID0gZmFs c2U7Cj4gKwo+ICsgICAgICAgaWd0X2Fzc2VydChpYWwpOwo+ICsgICAgICAgaWFscyA9IChzdHJ1 Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7Cj4gKyAgICAgICBpZ3RfYXNz ZXJ0KGlhbHMpOwo+ICsgICAgICAgaWd0X2Fzc2VydChoYW5kbGUpOwo+ICsKPiArICAgICAgIHJl YyA9IGlndF9tYXBfZmluZCgmaWFscy0+b2JqZWN0cywgJmhhbmRsZSk7Cj4gKyAgICAgICBpZiAo cmVjICYmIF9fc2FtZShyZWMsIGhhbmRsZSwgc2l6ZSwgb2Zmc2V0KSkKPiArICAgICAgICAgICAg ICAgc2FtZSA9IHRydWU7Cj4gKwo+ICsgICAgICAgcmV0dXJuIHNhbWU7Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sIGludGVsX2FsbG9jYXRvcl9zaW1wbGVfcmVzZXJ2ZShzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yICppYWwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IGhhbmRsZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCkKPiArewo+ICsgICAgICAgdWludDY0 X3Qgc2l6ZSA9IGVuZCAtIHN0YXJ0OwoKV2l0aCBjYW5vbmljYWwgYWRkcmVzc2VzLCBvdXIgc2l6 ZSBjYWxjdWxhdGlvbnMgYXJlbid0IGdvaW5nIHRvIGJlCmNvcnJlY3QgaWYgc3RhcnQgYW5kIGVu ZCBhcmUgb24gZGlmZmVyZW50IHNpZGVzIG9mIHRoZSA0Ny1iaXQKYm91bmRhcnkuICBJJ20gbm90 IHN1cmUgaG93IHRvIGRlYWwgd2l0aCB0aGF0LCBUQkguICBNb3N0IG9mIHRoZSB0aW1lLApJIHRo aW5rIHlvdSBnZXQgc2F2ZWQgYnkgdGhlIGZhY3QgdGhhdCB5b3UncmUgb25seSByZWFsbHkgbGlr ZWx5IHRvCmhpdCB0aGF0IGlmIHlvdSBoYXZlIGEgPiAxMjggVEIgcmFuZ2Ugd2hpY2ggbmV2ZXIg aGFwcGVucy4gIE9uZSBzaW1wbGUKdGhpbmcgd2UgY291bGQgZG8gaXMKCmlndF9hc3NlcnQoZW5k ID4+IEdFTjhfR1RfQUREUkVTU19XSURUSCA9PSBzdGFydCA+PiBHRU44X0dUX0FERFJFU1NfV0lE VEgpOwoKb3Igc2ltaWxhci4gIFNhbWUgZ29lcyBmb3IgdGhlIDMtNCBvdGhlciBjYXNlcyBiZWxv dy4KCj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3JlY29yZCAqcmVjID0gTlVMTDsK PiArICAgICAgIHN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlICppYWxzOwo+ICsKPiArICAg ICAgIGlndF9hc3NlcnQoaWFsKTsKPiArICAgICAgIGlhbHMgPSAoc3RydWN0IGludGVsX2FsbG9j YXRvcl9zaW1wbGUgKikgaWFsLT5wcml2Owo+ICsgICAgICAgaWd0X2Fzc2VydChpYWxzKTsKPiAr Cj4gKyAgICAgICAvKiBjbGVhciBbNjM6NDhdIGJpdHMgdG8gZ2V0IHJpZCBvZiBjYW5vbmljYWwg Zm9ybSAqLwo+ICsgICAgICAgc3RhcnQgPSBERUNBTk9OSUNBTChzdGFydCk7Cj4gKyAgICAgICBl bmQgPSBERUNBTk9OSUNBTChlbmQpOwo+ICsgICAgICAgaWd0X2Fzc2VydChlbmQgPiBzdGFydCB8 fCBlbmQgPT0gMCk7CgpXaXRoIGFsd2F5cyByZXNlcnZpbmcgdGhlIHRvcCA0SywgZW5kID0gMCBz aG91bGQgbmV2ZXIgaGFwcGVuLgoKPiArCj4gKyAgICAgICBpZiAoc2ltcGxlX3ZtYV9oZWFwX2Fs bG9jX2FkZHIoaWFscywgc3RhcnQsIHNpemUpKSB7Cj4gKyAgICAgICAgICAgICAgIHJlYyA9IG1h bGxvYyhzaXplb2YoKnJlYykpOwo+ICsgICAgICAgICAgICAgICByZWMtPmhhbmRsZSA9IGhhbmRs ZTsKPiArICAgICAgICAgICAgICAgcmVjLT5vZmZzZXQgPSBzdGFydDsKPiArICAgICAgICAgICAg ICAgcmVjLT5zaXplID0gc2l6ZTsKPiArCj4gKyAgICAgICAgICAgICAgIGlndF9tYXBfYWRkKCZp YWxzLT5yZXNlcnZlZCwgJnJlYy0+b2Zmc2V0LCByZWMpOwo+ICsKPiArICAgICAgICAgICAgICAg aWFscy0+cmVzZXJ2ZWRfYXJlYXMrKzsKPiArICAgICAgICAgICAgICAgaWFscy0+cmVzZXJ2ZWRf c2l6ZSArPSByZWMtPnNpemU7Cj4gKyAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwo+ICsgICAg ICAgfQo+ICsKPiArICAgICAgIGlndF9kZWJ1ZygiRmFpbGVkIHRvIHJlc2VydmUgJWxseCArICVs bHhcbiIsIChsb25nIGxvbmcpc3RhcnQsIChsb25nIGxvbmcpc2l6ZSk7Cj4gKyAgICAgICByZXR1 cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGludGVsX2FsbG9jYXRvcl9zaW1wbGVf dW5yZXNlcnZlKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlhbCwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBoYW5kbGUsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2 NF90IGVuZCkKPiArewo+ICsgICAgICAgdWludDY0X3Qgc2l6ZSA9IGVuZCAtIHN0YXJ0Owo+ICsg ICAgICAgc3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlYyA9IE5VTEw7Cj4gKyAgICAg ICBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqaWFsczsKPiArCj4gKyAgICAgICBpZ3Rf YXNzZXJ0KGlhbCk7Cj4gKyAgICAgICBpYWxzID0gKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2lt cGxlICopIGlhbC0+cHJpdjsKPiArICAgICAgIGlndF9hc3NlcnQoaWFscyk7Cj4gKwo+ICsgICAg ICAgLyogY2xlYXIgWzYzOjQ4XSBiaXRzIHRvIGdldCByaWQgb2YgY2Fub25pY2FsIGZvcm0gKi8K PiArICAgICAgIHN0YXJ0ID0gREVDQU5PTklDQUwoc3RhcnQpOwo+ICsgICAgICAgZW5kID0gREVD QU5PTklDQUwoZW5kKTsKPiArCj4gKyAgICAgICBpZ3RfYXNzZXJ0KGVuZCA+IHN0YXJ0IHx8IGVu ZCA9PSAwKTsKPiArCj4gKyAgICAgICByZWMgPSBpZ3RfbWFwX2ZpbmQoJmlhbHMtPnJlc2VydmVk LCAmc3RhcnQpOwo+ICsKPiArICAgICAgIGlmICghcmVjKSB7Cj4gKyAgICAgICAgICAgICAgIGln dF9kZWJ1ZygiT25seSByZXNlcnZlZCBibG9ja3MgY2FuIGJlIHVucmVzZXJ2ZWRcbiIpOwo+ICsg ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICAgICB9Cj4gKwo+ICsgICAgICAgaWYg KHJlYy0+c2l6ZSAhPSBzaXplKSB7Cj4gKyAgICAgICAgICAgICAgIGlndF9kZWJ1ZygiT25seSB0 aGUgd2hvbGUgYmxvY2sgdW5yZXNlcnZhdGlvbiBhbGxvd2VkXG4iKTsKPiArICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlmIChyZWMtPmhhbmRs ZSAhPSBoYW5kbGUpIHsKPiArICAgICAgICAgICAgICAgaWd0X2RlYnVnKCJIYW5kbGUgJXUgZG9l c24ndCBtYXRjaCByZXNlcnZhdGlvbiBoYW5kbGU6ICV1XG4iLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICByZWMtPmhhbmRsZSwgaGFuZGxlKTsKPiArICAgICAgICAgICAgICAgcmV0dXJuIGZh bHNlOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAgIGlndF9tYXBfZGVsKCZpYWxzLT5yZXNlcnZl ZCwgJnN0YXJ0KTsKPiArCj4gKyAgICAgICBpYWxzLT5yZXNlcnZlZF9hcmVhcy0tOwo+ICsgICAg ICAgaWFscy0+cmVzZXJ2ZWRfc2l6ZSAtPSByZWMtPnNpemU7Cj4gKyAgICAgICBmcmVlKHJlYyk7 Cj4gKyAgICAgICBzaW1wbGVfdm1hX2hlYXBfZnJlZSgmaWFscy0+aGVhcCwgc3RhcnQsIHNpemUp Owo+ICsKPiArICAgICAgIHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpbnRl bF9hbGxvY2F0b3Jfc2ltcGxlX2lzX3Jlc2VydmVkKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3IgKmlh bCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2 NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQpCj4gK3sKPiArICAgICAgIHVpbnQ2NF90IHNpemUgPSBl bmQgLSBzdGFydDsKPiArICAgICAgIHN0cnVjdCBpbnRlbF9hbGxvY2F0b3JfcmVjb3JkICpyZWMg PSBOVUxMOwo+ICsgICAgICAgc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKmlhbHM7Cj4g Kwo+ICsgICAgICAgaWd0X2Fzc2VydChpYWwpOwo+ICsgICAgICAgaWFscyA9IChzdHJ1Y3QgaW50 ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KGlh bHMpOwo+ICsKPiArICAgICAgIC8qIGNsZWFyIFs2Mzo0OF0gYml0cyB0byBnZXQgcmlkIG9mIGNh bm9uaWNhbCBmb3JtICovCj4gKyAgICAgICBzdGFydCA9IERFQ0FOT05JQ0FMKHN0YXJ0KTsKPiAr ICAgICAgIGVuZCA9IERFQ0FOT05JQ0FMKGVuZCk7Cj4gKwo+ICsgICAgICAgaWd0X2Fzc2VydChl bmQgPiBzdGFydCB8fCBlbmQgPT0gMCk7Cj4gKwo+ICsgICAgICAgcmVjID0gaWd0X21hcF9maW5k KCZpYWxzLT5yZXNlcnZlZCwgJnN0YXJ0KTsKPiArCj4gKyAgICAgICBpZiAoIXJlYykKPiArICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICAgIGlmIChyZWMtPm9mZnNldCA9 PSBzdGFydCAmJiByZWMtPnNpemUgPT0gc2l6ZSkKPiArICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7Cj4gKwo+ICsgICAgICAgcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBl cXVhbF84Ynl0ZXMoY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5MikKPiArewo+ICsg ICAgICAgY29uc3QgdWludDY0X3QgKmsxID0ga2V5MSwgKmsyID0ga2V5MjsKPiArICAgICAgIHJl dHVybiAqazEgPT0gKmsyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpbnRlbF9hbGxvY2F0b3Jf c2ltcGxlX2Rlc3Ryb3koc3RydWN0IGludGVsX2FsbG9jYXRvciAqaWFsKQo+ICt7Cj4gKyAgICAg ICBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqaWFsczsKPiArICAgICAgIHN0cnVjdCBp Z3RfbWFwX2VudHJ5ICpwb3M7Cj4gKyAgICAgICBzdHJ1Y3QgaWd0X21hcCAqbWFwOwo+ICsgICAg ICAgaW50IGk7Cj4gKwo+ICsgICAgICAgaWd0X2Fzc2VydChpYWwpOwo+ICsgICAgICAgaWFscyA9 IChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSAqKSBpYWwtPnByaXY7Cj4gKyAgICAgICBz aW1wbGVfdm1hX2hlYXBfZmluaXNoKCZpYWxzLT5oZWFwKTsKPiArCj4gKyAgICAgICBtYXAgPSAm aWFscy0+b2JqZWN0czsKPiArICAgICAgIGlndF9tYXBfZm9yX2VhY2gobWFwLCBpLCBwb3MpCj4g KyAgICAgICAgICAgICAgIGZyZWUocG9zLT52YWx1ZSk7Cj4gKyAgICAgICBpZ3RfbWFwX2ZyZWUo JmlhbHMtPm9iamVjdHMpOwo+ICsKPiArICAgICAgIG1hcCA9ICZpYWxzLT5yZXNlcnZlZDsKPiAr ICAgICAgIGlndF9tYXBfZm9yX2VhY2gobWFwLCBpLCBwb3MpCj4gKyAgICAgICAgICAgICAgIGZy ZWUocG9zLT52YWx1ZSk7Cj4gKyAgICAgICBpZ3RfbWFwX2ZyZWUoJmlhbHMtPnJlc2VydmVkKTsK PiArCj4gKyAgICAgICBmcmVlKGlhbC0+cHJpdik7Cj4gKyAgICAgICBmcmVlKGlhbCk7Cj4gK30K PiArCj4gK3N0YXRpYyBib29sIGludGVsX2FsbG9jYXRvcl9zaW1wbGVfaXNfZW1wdHkoc3RydWN0 IGludGVsX2FsbG9jYXRvciAqaWFsKQo+ICt7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfYWxsb2Nh dG9yX3NpbXBsZSAqaWFscyA9IGlhbC0+cHJpdjsKPiArCj4gKyAgICAgICBpZ3RfZGVidWcoIjxp YWw6ICVwLCBmZDogJWQ+IG9iamVjdHM6ICUiIFBSSWQ2NAo+ICsgICAgICAgICAgICAgICAgICIs IHJlc2VydmVkX2FyZWFzOiAlIiBQUklkNjQgIlxuIiwKPiArICAgICAgICAgICAgICAgICBpYWws IGlhbC0+ZmQsCj4gKyAgICAgICAgICAgICAgICAgaWFscy0+YWxsb2NhdGVkX29iamVjdHMsIGlh bHMtPnJlc2VydmVkX2FyZWFzKTsKPiArCj4gKyAgICAgICByZXR1cm4gIWlhbHMtPmFsbG9jYXRl ZF9vYmplY3RzICYmICFpYWxzLT5yZXNlcnZlZF9hcmVhczsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9wcmludChzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICpp YWwsIGJvb2wgZnVsbCkKPiArewo+ICsgICAgICAgc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1w bGUgKmlhbHM7Cj4gKyAgICAgICBzdHJ1Y3Qgc2ltcGxlX3ZtYV9ob2xlICpob2xlOwo+ICsgICAg ICAgc3RydWN0IHNpbXBsZV92bWFfaGVhcCAqaGVhcDsKPiArICAgICAgIHN0cnVjdCBpZ3RfbWFw X2VudHJ5ICpwb3M7Cj4gKyAgICAgICBzdHJ1Y3QgaWd0X21hcCAqbWFwOwo+ICsgICAgICAgdWlu dDY0X3QgdG90YWxfZnJlZSA9IDAsIGFsbG9jYXRlZF9zaXplID0gMCwgYWxsb2NhdGVkX29iamVj dHMgPSAwOwo+ICsgICAgICAgdWludDY0X3QgcmVzZXJ2ZWRfc2l6ZSA9IDAsIHJlc2VydmVkX2Fy ZWFzID0gMDsKPiArICAgICAgIGludCBpOwo+ICsKPiArICAgICAgIGlndF9hc3NlcnQoaWFsKTsK PiArICAgICAgIGlhbHMgPSAoc3RydWN0IGludGVsX2FsbG9jYXRvcl9zaW1wbGUgKikgaWFsLT5w cml2Owo+ICsgICAgICAgaWd0X2Fzc2VydChpYWxzKTsKPiArICAgICAgIGhlYXAgPSAmaWFscy0+ aGVhcDsKPiArCj4gKyAgICAgICBpZ3RfaW5mbygiaW50ZWxfYWxsb2NhdG9yX3NpbXBsZSA8aWFs OiAlcCwgZmQ6ICVkPiBvbiAiCj4gKyAgICAgICAgICAgICAgICAiWzB4JSJQUkl4NjQiIDogMHgl IlBSSXg2NCJdOlxuIiwgaWFsLCBpYWwtPmZkLAo+ICsgICAgICAgICAgICAgICAgaWFscy0+c3Rh cnQsIGlhbHMtPmVuZCk7Cj4gKwo+ICsgICAgICAgaWYgKGZ1bGwpIHsKPiArICAgICAgICAgICAg ICAgaWd0X2luZm8oImhvbGVzOlxuIik7Cj4gKyAgICAgICAgICAgICAgIHNpbXBsZV92bWFfZm9y ZWFjaF9ob2xlKGhvbGUsIGhlYXApIHsKPiArICAgICAgICAgICAgICAgICAgICAgICBpZ3RfaW5m bygib2Zmc2V0ID0gJSJQUkl1NjQiICgweCUiUFJJeDY0IiwgIgo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJzaXplID0gJSJQUkl1NjQiICgweCUiUFJJeDY0IilcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZS0+b2Zmc2V0LCBob2xlLT5vZmZzZXQs IGhvbGUtPnNpemUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZS0+c2l6 ZSk7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfZnJlZSArPSBob2xlLT5zaXplOwo+ ICsgICAgICAgICAgICAgICB9Cj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQodG90YWxfZnJl ZSA8PSBpYWxzLT50b3RhbF9zaXplKTsKPiArICAgICAgICAgICAgICAgaWd0X2luZm8oInRvdGFs X2ZyZWU6ICUiIFBSSXg2NAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAiLCB0b3RhbF9zaXpl OiAlIiBQUkl4NjQKPiArICAgICAgICAgICAgICAgICAgICAgICAgIiwgYWxsb2NhdGVkX3NpemU6 ICUiIFBSSXg2NAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAiLCByZXNlcnZlZF9zaXplOiAl IiBQUkl4NjQgIlxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfZnJlZSwgaWFs cy0+dG90YWxfc2l6ZSwgaWFscy0+YWxsb2NhdGVkX3NpemUsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIGlhbHMtPnJlc2VydmVkX3NpemUpOwo+ICsgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0 KHRvdGFsX2ZyZWUgPT0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICBpYWxzLT50b3RhbF9z aXplIC0gaWFscy0+YWxsb2NhdGVkX3NpemUgLSBpYWxzLT5yZXNlcnZlZF9zaXplKTsKPiArCj4g KyAgICAgICAgICAgICAgIGlndF9pbmZvKCJvYmplY3RzOlxuIik7Cj4gKyAgICAgICAgICAgICAg IG1hcCA9ICZpYWxzLT5vYmplY3RzOwo+ICsgICAgICAgICAgICAgICBpZ3RfbWFwX2Zvcl9lYWNo KG1hcCwgaSwgcG9zKSB7Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2Fs bG9jYXRvcl9yZWNvcmQgKnJlYyA9IHBvcy0+dmFsdWU7Cj4gKwo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGlndF9pbmZvKCJoYW5kbGUgPSAlZCwgb2Zmc2V0ID0gJSJQUkl1NjQiICIKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoMHglIlBSSXg2NCIsIHNpemUgPSAlIlBSSXU2 NCIgKDB4JSJQUkl4NjQiKVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWMtPmhhbmRsZSwgcmVjLT5vZmZzZXQsIHJlYy0+b2Zmc2V0LAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlYy0+c2l6ZSwgcmVjLT5zaXplKTsKPiArICAgICAgICAgICAgICAg ICAgICAgICBhbGxvY2F0ZWRfb2JqZWN0cysrOwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGFs bG9jYXRlZF9zaXplICs9IHJlYy0+c2l6ZTsKPiArICAgICAgICAgICAgICAgfQo+ICsgICAgICAg ICAgICAgICBpZ3RfYXNzZXJ0KGlhbHMtPmFsbG9jYXRlZF9zaXplID09IGFsbG9jYXRlZF9zaXpl KTsKPiArICAgICAgICAgICAgICAgaWd0X2Fzc2VydChpYWxzLT5hbGxvY2F0ZWRfb2JqZWN0cyA9 PSBhbGxvY2F0ZWRfb2JqZWN0cyk7Cj4gKwo+ICsgICAgICAgICAgICAgICBpZ3RfaW5mbygicmVz ZXJ2ZWQgYXJlYXM6XG4iKTsKPiArICAgICAgICAgICAgICAgbWFwID0gJmlhbHMtPnJlc2VydmVk Owo+ICsgICAgICAgICAgICAgICBpZ3RfbWFwX2Zvcl9lYWNoKG1hcCwgaSwgcG9zKSB7Cj4gKyAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGludGVsX2FsbG9jYXRvcl9yZWNvcmQgKnJlYyA9 IHBvcy0+dmFsdWU7Cj4gKwo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlndF9pbmZvKCJvZmZz ZXQgPSAlIlBSSXU2NCIgKDB4JSJQUkl4NjQiLCAiCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInNpemUgPSAlIlBSSXU2NCIgKDB4JSJQUkl4NjQiKVxuIiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWMtPm9mZnNldCwgcmVjLT5vZmZzZXQsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjLT5zaXplLCByZWMtPnNpemUpOwo+ICsgICAg ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkX2FyZWFzKys7Cj4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmVzZXJ2ZWRfc2l6ZSArPSByZWMtPnNpemU7Cj4gKyAgICAgICAgICAgICAgIH0KPiAr ICAgICAgICAgICAgICAgaWd0X2Fzc2VydChpYWxzLT5yZXNlcnZlZF9hcmVhcyA9PSByZXNlcnZl ZF9hcmVhcyk7Cj4gKyAgICAgICAgICAgICAgIGlndF9hc3NlcnQoaWFscy0+cmVzZXJ2ZWRfc2l6 ZSA9PSByZXNlcnZlZF9zaXplKTsKPiArICAgICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgICAgICAg IHNpbXBsZV92bWFfZm9yZWFjaF9ob2xlKGhvbGUsIGhlYXApCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgdG90YWxfZnJlZSArPSBob2xlLT5zaXplOwo+ICsgICAgICAgfQo+ICsKPiArICAgICAg IGlndF9pbmZvKCJmcmVlIHNwYWNlOiAlIlBSSXU2NCJCICgweCUiUFJJeDY0IikgKCUuMmYlJSBm dWxsKVxuIgo+ICsgICAgICAgICAgICAgICAgImFsbG9jYXRlZCBvYmplY3RzOiAlIlBSSXU2NCIs IHJlc2VydmVkIGFyZWFzOiAlIlBSSXU2NCJcbiIsCj4gKyAgICAgICAgICAgICAgICB0b3RhbF9m cmVlLCB0b3RhbF9mcmVlLAo+ICsgICAgICAgICAgICAgICAgKChkb3VibGUpIChpYWxzLT50b3Rh bF9zaXplIC0gdG90YWxfZnJlZSkgLwo+ICsgICAgICAgICAgICAgICAgIChkb3VibGUpIGlhbHMt PnRvdGFsX3NpemUpICogMTAwLAo+ICsgICAgICAgICAgICAgICAgaWFscy0+YWxsb2NhdGVkX29i amVjdHMsIGlhbHMtPnJlc2VydmVkX2FyZWFzKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBp bnRlbF9hbGxvY2F0b3IgKgo+ICtfX2ludGVsX2FsbG9jYXRvcl9zaW1wbGVfY3JlYXRlKGludCBm ZCwgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gYWxsb2NhdG9yX3N0cmF0ZWd5IHN0cmF0ZWd5KQo+ICt7Cj4gKyAgICAg ICBzdHJ1Y3QgaW50ZWxfYWxsb2NhdG9yICppYWw7Cj4gKyAgICAgICBzdHJ1Y3QgaW50ZWxfYWxs b2NhdG9yX3NpbXBsZSAqaWFsczsKPiArCj4gKyAgICAgICBpZ3RfZGVidWcoIlVzaW5nIHNpbXBs ZSBhbGxvY2F0b3JcbiIpOwo+ICsKPiArICAgICAgIGlhbCA9IGNhbGxvYygxLCBzaXplb2YoKmlh bCkpOwo+ICsgICAgICAgaWd0X2Fzc2VydChpYWwpOwo+ICsKPiArICAgICAgIGlhbC0+ZmQgPSBm ZDsKPiArICAgICAgIGlhbC0+Z2V0X2FkZHJlc3NfcmFuZ2UgPSBpbnRlbF9hbGxvY2F0b3Jfc2lt cGxlX2dldF9hZGRyZXNzX3JhbmdlOwo+ICsgICAgICAgaWFsLT5hbGxvYyA9IGludGVsX2FsbG9j YXRvcl9zaW1wbGVfYWxsb2M7Cj4gKyAgICAgICBpYWwtPmZyZWUgPSBpbnRlbF9hbGxvY2F0b3Jf c2ltcGxlX2ZyZWU7Cj4gKyAgICAgICBpYWwtPmlzX2FsbG9jYXRlZCA9IGludGVsX2FsbG9jYXRv cl9zaW1wbGVfaXNfYWxsb2NhdGVkOwo+ICsgICAgICAgaWFsLT5yZXNlcnZlID0gaW50ZWxfYWxs b2NhdG9yX3NpbXBsZV9yZXNlcnZlOwo+ICsgICAgICAgaWFsLT51bnJlc2VydmUgPSBpbnRlbF9h bGxvY2F0b3Jfc2ltcGxlX3VucmVzZXJ2ZTsKPiArICAgICAgIGlhbC0+aXNfcmVzZXJ2ZWQgPSBp bnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2lzX3Jlc2VydmVkOwo+ICsgICAgICAgaWFsLT5kZXN0cm95 ID0gaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9kZXN0cm95Owo+ICsgICAgICAgaWFsLT5pc19lbXB0 eSA9IGludGVsX2FsbG9jYXRvcl9zaW1wbGVfaXNfZW1wdHk7Cj4gKyAgICAgICBpYWwtPnByaW50 ID0gaW50ZWxfYWxsb2NhdG9yX3NpbXBsZV9wcmludDsKPiArICAgICAgIGlhbHMgPSBpYWwtPnBy aXYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlKSk7Cj4gKyAg ICAgICBpZ3RfYXNzZXJ0KGlhbHMpOwo+ICsKPiArICAgICAgIGlndF9tYXBfaW5pdCgmaWFscy0+ b2JqZWN0cyk7Cj4gKyAgICAgICAvKiBSZXNlcnZlZCBhZGRyZXNzZXMgaGFzaHRhYmxlIGlzIGlu ZGV4ZWQgYnkgYW4gb2Zmc2V0ICovCj4gKyAgICAgICBfX2lndF9tYXBfaW5pdCgmaWFscy0+cmVz ZXJ2ZWQsIGVxdWFsXzhieXRlcywgTlVMTCwgMyk7CgpXZSBoYXZlIHRoaXMgc2FtZSBwcm9ibGVt IHdpdGggTWVzYS4gIE1heWJlIGp1c3QgbWFrZSB0aGUgaGFzaCBtYXAKdGFrZSBhIHVpbnQ2NF90 IGtleSBpbnN0ZWFkIG9mIGEgdm9pZCouICBUaGVuIGl0J2xsIHdvcmsgZm9yIGJvdGgKY2FzZXMg ZWFzaWx5IGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlIGV4dHJhIG1lbW9yeSBvbiAzMi1iaXQgcGxh dGZvcm1zLgoKTG9va2luZyBhIGJpdCBtb3JlLCBJIGd1ZXNzIGl0J3Mgbm90IHF1aXRlIGFzIGJh ZCBhcyB0aGUgTWVzYSBjYXNlCmJlY2F1c2UgeW91IGhhdmUgdGhlIHVpbnQ2NF90IGtleSBpbiB0 aGUgb2JqZWN0IHlvdSdyZSBhZGRpbmcgc28geW91CmRvbid0IGhhdmUgdG8gbWFsbG9jIGEgYnVu Y2ggb2YgdWludDY0X3QncyBqdXN0IHRvIHVzZSBhcyBrZXlzLgoKPiArCj4gKyAgICAgICBpYWxz LT5zdGFydCA9IHN0YXJ0Owo+ICsgICAgICAgaWFscy0+ZW5kID0gZW5kOwo+ICsgICAgICAgaWFs cy0+dG90YWxfc2l6ZSA9IGVuZCAtIHN0YXJ0Owo+ICsgICAgICAgc2ltcGxlX3ZtYV9oZWFwX2lu aXQoJmlhbHMtPmhlYXAsIGlhbHMtPnN0YXJ0LCBpYWxzLT50b3RhbF9zaXplLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3kpOwo+ICsKPiArICAgICAgIGlhbHMtPmFsbG9j YXRlZF9zaXplID0gMDsKPiArICAgICAgIGlhbHMtPmFsbG9jYXRlZF9vYmplY3RzID0gMDsKPiAr ICAgICAgIGlhbHMtPnJlc2VydmVkX3NpemUgPSAwOwo+ICsgICAgICAgaWFscy0+cmVzZXJ2ZWRf YXJlYXMgPSAwOwo+ICsKPiArICAgICAgIHJldHVybiBpYWw7Cj4gK30KPiArCj4gK3N0cnVjdCBp bnRlbF9hbGxvY2F0b3IgKgo+ICtpbnRlbF9hbGxvY2F0b3Jfc2ltcGxlX2NyZWF0ZShpbnQgZmQp Cj4gK3sKPiArICAgICAgIHVpbnQ2NF90IGd0dF9zaXplID0gZ2VtX2FwZXJ0dXJlX3NpemUoZmQp Owo+ICsKPiArICAgICAgIGlmICghZ2VtX3VzZXNfZnVsbF9wcGd0dChmZCkpCj4gKyAgICAgICAg ICAgICAgIGd0dF9zaXplIC89IDI7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAgICAgIGd0 dF9zaXplIC09IFJFU0VSVkVEOwo+ICsKPiArICAgICAgIHJldHVybiBfX2ludGVsX2FsbG9jYXRv cl9zaW1wbGVfY3JlYXRlKGZkLCAwLCBndHRfc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFMTE9DX1NUUkFURUdZX0hJR0hfVE9fTE9XKTsKPiAr fQo+ICsKPiArc3RydWN0IGludGVsX2FsbG9jYXRvciAqCj4gK2ludGVsX2FsbG9jYXRvcl9zaW1w bGVfY3JlYXRlX2Z1bGwoaW50IGZkLCB1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBhbGxvY2F0b3Jfc3RyYXRlZ3kg c3RyYXRlZ3kpCj4gK3sKPiArICAgICAgIHVpbnQ2NF90IGd0dF9zaXplID0gZ2VtX2FwZXJ0dXJl X3NpemUoZmQpOwo+ICsKPiArICAgICAgIGlndF9hc3NlcnQoZW5kIDw9IGd0dF9zaXplKTsKPiAr ICAgICAgIGlmICghZ2VtX3VzZXNfZnVsbF9wcGd0dChmZCkpCj4gKyAgICAgICAgICAgICAgIGd0 dF9zaXplIC89IDI7Cj4gKyAgICAgICBpZ3RfYXNzZXJ0KGVuZCAtIHN0YXJ0IDw9IGd0dF9zaXpl KTsKCkRvbid0IHlvdSB3YW50IGp1c3QgYGVuZCA8PSBndHRfc2l6ZWA/ICBXaGVuIGlzIHNvbWV0 aGluZyBvbmx5IGdvaW5nCnRvIHVzZSB0aGUgdG9wIGhhbGY/Cgo+ICsKPiArICAgICAgIHJldHVy biBfX2ludGVsX2FsbG9jYXRvcl9zaW1wbGVfY3JlYXRlKGZkLCBzdGFydCwgZW5kLCBzdHJhdGVn eSk7Cj4gK30KPiAtLQo+IDIuMjYuMAo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aWd0LWRldgo=