From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 089D6484FE for ; Wed, 6 Dec 2023 11:23:13 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2EAAA68CF2A; Wed, 6 Dec 2023 13:23:12 +0200 (EET) Received: from mail-yb1-f175.google.com (mail-yb1-f175.google.com [209.85.219.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CBB0068CC45 for ; Wed, 6 Dec 2023 13:23:04 +0200 (EET) Received: by mail-yb1-f175.google.com with SMTP id 3f1490d57ef6-db4364ecd6aso4283427276.2 for ; Wed, 06 Dec 2023 03:23:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701861783; x=1702466583; darn=ffmpeg.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=daTJh0Sc3NOOMDmGaCXuUPgcyCumT8s7EczFruv1HmM=; b=GUAFVd1cxr/Sgrkvd+SWFRC0BIK/o35vtUfgF+mD2lJa3JJzCY24CN2d7TkeL3WaHa 2pnS+Vi1b+v/mi88fD0DZdN7gT+igAZjQTdwRglsNkoWFeKWMOb/2s35tBtSrIx3MMtu 2pOLL4GcP1dhgx7bvMv7F4J2ZheB439+xozb2DUQlMttlyq3it93g497Yu8P3f7dZXAL T1r0P6WzCuSp9xL1jW9h9XEoDP6K/Qk1e0vw2cBP6pLZSJZdOjt4AZgljZb+N2QSfegw HERzNUi4LG1OdqqDCGUkMNYgY3Fzt6xC+30ByFJLGDmKDOVDhboSo42qxy88MofJVPue llsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701861783; x=1702466583; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=daTJh0Sc3NOOMDmGaCXuUPgcyCumT8s7EczFruv1HmM=; b=KY3emyTxyWTFJ9UHUG6xeaDdOotFwkeYs/NuH3hLkF50R3+XmOeVdjUnc7O4rWZqGP uPR92w6OKb2gd0rukZi8jRVp9kuQmJlZZ2GSeKaNuUpM6rxgu1ZEHZcuIEfzYBk+v3IM ISQbtpCqc4M7jWKxhm1sqaLPVvfPz1+2tB/Ty/K0zbcf75xv5wlw2AUkYCalpKZc/jqx rbs2VJwIMoWFPvbGt3/zLPMAu6tby8d7T4OptH+O+5kKXrmZVXx7PhELK2PTFCuP5ncO 5vKzVK+IQ6ZZzfRziTei8Szy/ziprmnoiLY3Jtbc00evl8L098v4PRxUojnbubzIk3YF 7dXQ== X-Gm-Message-State: AOJu0Yznr9g8DRwI2M+IfDlphailQU/er38sA3PauqbinVudVUtUst5M 5ogsLmTibvi/wHQjbUmIS5uHcV9Jk+Yp5N2/fQAMkR1f X-Google-Smtp-Source: AGHT+IHJKn1rIV8HeGTLuJWYm7OKrXWhOX3Mcr5lN4d4zSagdm5mDOdsZOuKtOu1p+ZIVGBPnGuyP5Jn1PsTPTOoGNM= X-Received: by 2002:a25:ac24:0:b0:db7:dacf:4d67 with SMTP id w36-20020a25ac24000000b00db7dacf4d67mr376851ybi.99.1701861782817; Wed, 06 Dec 2023 03:23:02 -0800 (PST) MIME-Version: 1.0 References: <20231206103002.30084-1-anton@khirnov.net> <20231206103002.30084-11-anton@khirnov.net> In-Reply-To: <20231206103002.30084-11-anton@khirnov.net> From: Paul B Mahol Date: Wed, 6 Dec 2023 12:22:48 +0100 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [FFmpeg-devel] [PATCH 10/10] fftools/ffmpeg: convert to a threaded architecture X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gV2VkLCBEZWMgNiwgMjAyMyBhdCAxMTozMuKAr0FNIEFudG9uIEtoaXJub3YgPGFudG9uQGto aXJub3YubmV0PiB3cm90ZToKCj4gQ2hhbmdlIHRoZSBtYWluIGxvb3AgYW5kIGV2ZXJ5IGNvbXBv bmVudCAoZGVtdXhlcnMsIGRlY29kZXJzLCBmaWx0ZXJzLAo+IGVuY29kZXJzLCBtdXhlcnMpIHRv IHVzZSB0aGUgcHJldmlvdXNseSBhZGRlZCB0cmFuc2NvZGUgc2NoZWR1bGVyLiBFdmVyeQo+IGlu c3RhbmNlIG9mIGV2ZXJ5IHN1Y2ggY29tcG9uZW50IHdhcyBhbHJlYWR5IHJ1bm5pbmcgaW4gYSBz ZXBhcmF0ZQo+IHRocmVhZCwgYnV0IG5vdyB0aGV5IGNhbiBhY3R1YWxseSBydW4gaW4gcGFyYWxs ZWwuCj4KPiBDaGFuZ2VzIHRoZSByZXN1bHRzIG9mIGZmbXBlZy1maXhfc3ViX2R1cmF0aW9uX2hl YXJ0YmVhdCAtIHRlc3RlZCBieQo+IEpFRUIgdG8gYmUgbW9yZSBjb3JyZWN0IGFuZCBkZXRlcm1p bmlzdGljLgo+CgpVbi1yZXZpZXdhYmxlLCBwbGVhc2Ugc3BsaXQgaXQuCgoKPiAtLS0KPiAgQ2hh bmdlbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKPiAgZmZ0 b29scy9mZm1wZWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzc0ICstLS0tLS0t LQo+ICBmZnRvb2xzL2ZmbXBlZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTcg Ky0tCj4gIGZmdG9vbHMvZmZtcGVnX2RlYy5jICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMy MSArKy0tLS0tLQo+ICBmZnRvb2xzL2ZmbXBlZ19kZW11eC5jICAgICAgICAgICAgICAgICAgICAg ICAgfCAyNjggKysrKy0tLQo+ICBmZnRvb2xzL2ZmbXBlZ19lbmMuYyAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAzNjggKystLS0tLS0tCj4gIGZmdG9vbHMvZmZtcGVnX2ZpbHRlci5jICAgICAg ICAgICAgICAgICAgICAgICB8IDcyMiArKysrKy0tLS0tLS0tLS0tLS0KPiAgZmZ0b29scy9mZm1w ZWdfbXV4LmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzI0ICsrLS0tLS0tCj4gIGZmdG9v bHMvZmZtcGVnX211eC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyNCArLQo+ICBmZnRv b2xzL2ZmbXBlZ19tdXhfaW5pdC5jICAgICAgICAgICAgICAgICAgICAgfCAgODggKy0tCj4gIGZm dG9vbHMvZmZtcGVnX29wdC5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQo+ICAu Li4vZmF0ZS9mZm1wZWctZml4X3N1Yl9kdXJhdGlvbl9oZWFydGJlYXQgICAgfCAgMzYgKy0KPiAg MTIgZmlsZXMgY2hhbmdlZCwgNjAwIGluc2VydGlvbnMoKyksIDIwMzAgZGVsZXRpb25zKC0pCj4K PiBkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCj4gaW5kZXggZjAwYmMyN2NhNC4u NjdlZjkyZWIwMiAxMDA2NDQKPiAtLS0gYS9DaGFuZ2Vsb2cKPiArKysgYi9DaGFuZ2Vsb2cKPiBA QCAtNyw2ICs3LDggQEAgdmVyc2lvbiA8bmV4dD46Cj4gIC0gRVZDIGVuY29kaW5nIHVzaW5nIGV4 dGVybmFsIGxpYnJhcnkgbGlieGV2ZQo+ICAtIFFPQSBkZWNvZGVyIGFuZCBkZW11eGVyCj4gIC0g YWFwIGZpbHRlcgo+ICstIGRlbXV4aW5nLCBkZWNvZGluZywgZmlsdGVyaW5nLCBlbmNvZGluZywg YW5kIG11eGluZyBpbiB0aGUKPiArICBmZm1wZWcgQ0xJIG5vdyBhbGwgcnVuIGluIHBhcmFsbGVs Cj4KPiAgdmVyc2lvbiA2LjE6Cj4gIC0gbGliYXJpYmNhcHRpb24gZGVjb2Rlcgo+IGRpZmYgLS1n aXQgYS9mZnRvb2xzL2ZmbXBlZy5jIGIvZmZ0b29scy9mZm1wZWcuYwo+IGluZGV4IGI4YTk3MjU4 YTAuLjMwYjU5NGZkOTcgMTAwNjQ0Cj4gLS0tIGEvZmZ0b29scy9mZm1wZWcuYwo+ICsrKyBiL2Zm dG9vbHMvZmZtcGVnLmMKPiBAQCAtMTE3LDcgKzExNyw3IEBAIHR5cGVkZWYgc3RydWN0IEJlbmNo bWFya1RpbWVTdGFtcHMgewo+ICBzdGF0aWMgQmVuY2htYXJrVGltZVN0YW1wcyBnZXRfYmVuY2ht YXJrX3RpbWVfc3RhbXBzKHZvaWQpOwo+ICBzdGF0aWMgaW50NjRfdCBnZXRtYXhyc3Modm9pZCk7 Cj4KPiAtdW5zaWduZWQgbmJfb3V0cHV0X2R1bXBlZCA9IDA7Cj4gK2F0b21pY191aW50IG5iX291 dHB1dF9kdW1wZWQgPSAwOwo+Cj4gIHN0YXRpYyBCZW5jaG1hcmtUaW1lU3RhbXBzIGN1cnJlbnRf dGltZTsKPiAgQVZJT0NvbnRleHQgKnByb2dyZXNzX2F2aW8gPSBOVUxMOwo+IEBAIC0xMzgsMzAg KzEzOCw2IEBAIHN0YXRpYyBzdHJ1Y3QgdGVybWlvcyBvbGR0dHk7Cj4gIHN0YXRpYyBpbnQgcmVz dG9yZV90dHk7Cj4gICNlbmRpZgo+Cj4gLS8qIHN1YjJ2aWRlbyBoYWNrOgo+IC0gICBDb252ZXJ0 IHN1YnRpdGxlcyB0byB2aWRlbyB3aXRoIGFscGhhIHRvIGluc2VydCB0aGVtIGluIGZpbHRlciBn cmFwaHMuCj4gLSAgIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwgbGliYXZmaWx0 ZXIgZ2V0cyByZWFsIHN1YnRpdGxlcwo+IHN1cHBvcnQuCj4gLSAqLwo+IC0KPiAtc3RhdGljIHZv aWQgc3ViMnZpZGVvX2hlYXJ0YmVhdChJbnB1dEZpbGUgKmluZmlsZSwgaW50NjRfdCBwdHMsCj4g QVZSYXRpb25hbCB0YikKPiAtewo+IC0gICAgLyogV2hlbiBhIGZyYW1lIGlzIHJlYWQgZnJvbSBh IGZpbGUsIGV4YW1pbmUgYWxsIHN1YjJ2aWRlbyBzdHJlYW1zIGluCj4gLSAgICAgICB0aGUgc2Ft ZSBmaWxlIGFuZCBzZW5kIHRoZSBzdWIydmlkZW8gZnJhbWUgYWdhaW4uIE90aGVyd2lzZSwKPiBk ZWNvZGVkCj4gLSAgICAgICB2aWRlbyBmcmFtZXMgY291bGQgYmUgYWNjdW11bGF0aW5nIGluIHRo ZSBmaWx0ZXIgZ3JhcGggd2hpbGUgYQo+IGZpbHRlcgo+IC0gICAgICAgKHBvc3NpYmx5IG92ZXJs YXkpIGlzIGRlc3BlcmF0ZWx5IHdhaXRpbmcgZm9yIGEgc3VidGl0bGUgZnJhbWUuICovCj4gLSAg ICBmb3IgKGludCBpID0gMDsgaSA8IGluZmlsZS0+bmJfc3RyZWFtczsgaSsrKSB7Cj4gLSAgICAg ICAgSW5wdXRTdHJlYW0gKmlzdCA9IGluZmlsZS0+c3RyZWFtc1tpXTsKPiAtCj4gLSAgICAgICAg aWYgKGlzdC0+ZGVjX2N0eC0+Y29kZWNfdHlwZSAhPSBBVk1FRElBX1RZUEVfU1VCVElUTEUpCj4g LSAgICAgICAgICAgIGNvbnRpbnVlOwo+IC0KPiAtICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IGlzdC0+bmJfZmlsdGVyczsgaisrKQo+IC0gICAgICAgICAgICBpZmlsdGVyX3N1YjJ2aWRlb19o ZWFydGJlYXQoaXN0LT5maWx0ZXJzW2pdLCBwdHMsIHRiKTsKPiAtICAgIH0KPiAtfQo+IC0KPiAt LyogZW5kIG9mIHN1YjJ2aWRlbyBoYWNrICovCj4gLQo+ICBzdGF0aWMgdm9pZCB0ZXJtX2V4aXRf c2lnc2FmZSh2b2lkKQo+ICB7Cj4gICNpZiBIQVZFX1RFUk1JT1NfSAo+IEBAIC00OTksMjMgKzQ3 NSwxMyBAQCB2b2lkIHVwZGF0ZV9iZW5jaG1hcmsoY29uc3QgY2hhciAqZm10LCAuLi4pCj4gICAg ICB9Cj4gIH0KPgo+IC12b2lkIGNsb3NlX291dHB1dF9zdHJlYW0oT3V0cHV0U3RyZWFtICpvc3Qp Cj4gLXsKPiAtICAgIE91dHB1dEZpbGUgKm9mID0gb3V0cHV0X2ZpbGVzW29zdC0+ZmlsZV9pbmRl eF07Cj4gLSAgICBvc3QtPmZpbmlzaGVkIHw9IEVOQ09ERVJfRklOSVNIRUQ7Cj4gLQo+IC0gICAg aWYgKG9zdC0+c3FfaWR4X2VuY29kZSA+PSAwKQo+IC0gICAgICAgIHNxX3NlbmQob2YtPnNxX2Vu Y29kZSwgb3N0LT5zcV9pZHhfZW5jb2RlLCBTUUZSQU1FKE5VTEwpKTsKPiAtfQo+IC0KPiAtc3Rh dGljIHZvaWQgcHJpbnRfcmVwb3J0KGludCBpc19sYXN0X3JlcG9ydCwgaW50NjRfdCB0aW1lcl9z dGFydCwgaW50NjRfdAo+IGN1cl90aW1lKQo+ICtzdGF0aWMgdm9pZCBwcmludF9yZXBvcnQoaW50 IGlzX2xhc3RfcmVwb3J0LCBpbnQ2NF90IHRpbWVyX3N0YXJ0LCBpbnQ2NF90Cj4gY3VyX3RpbWUs IGludDY0X3QgcHRzKQo+ICB7Cj4gICAgICBBVkJQcmludCBidWYsIGJ1Zl9zY3JpcHQ7Cj4gICAg ICBpbnQ2NF90IHRvdGFsX3NpemUgPSBvZl9maWxlc2l6ZShvdXRwdXRfZmlsZXNbMF0pOwo+ICAg ICAgaW50IHZpZDsKPiAgICAgIGRvdWJsZSBiaXRyYXRlOwo+ICAgICAgZG91YmxlIHNwZWVkOwo+ IC0gICAgaW50NjRfdCBwdHMgPSBBVl9OT1BUU19WQUxVRTsKPiAgICAgIHN0YXRpYyBpbnQ2NF90 IGxhc3RfdGltZSA9IC0xOwo+ICAgICAgc3RhdGljIGludCBmaXJzdF9yZXBvcnQgPSAxOwo+ICAg ICAgdWludDY0X3QgbmJfZnJhbWVzX2R1cCA9IDAsIG5iX2ZyYW1lc19kcm9wID0gMDsKPiBAQCAt NTMzLDcgKzQ5OSw3IEBAIHN0YXRpYyB2b2lkIHByaW50X3JlcG9ydChpbnQgaXNfbGFzdF9yZXBv cnQsIGludDY0X3QKPiB0aW1lcl9zdGFydCwgaW50NjRfdCBjdXJfdGkKPiAgICAgICAgICAgICAg bGFzdF90aW1lID0gY3VyX3RpbWU7Cj4gICAgICAgICAgfQo+ICAgICAgICAgIGlmICgoKGN1cl90 aW1lIC0gbGFzdF90aW1lKSA8IHN0YXRzX3BlcmlvZCAmJiAhZmlyc3RfcmVwb3J0KSB8fAo+IC0g ICAgICAgICAgICAoZmlyc3RfcmVwb3J0ICYmIG5iX291dHB1dF9kdW1wZWQgPCBuYl9vdXRwdXRf ZmlsZXMpKQo+ICsgICAgICAgICAgICAoZmlyc3RfcmVwb3J0ICYmIGF0b21pY19sb2FkKCZuYl9v dXRwdXRfZHVtcGVkKSA8Cj4gbmJfb3V0cHV0X2ZpbGVzKSkKPiAgICAgICAgICAgICAgcmV0dXJu Owo+ICAgICAgICAgIGxhc3RfdGltZSA9IGN1cl90aW1lOwo+ICAgICAgfQo+IEBAIC01NDQsNyAr NTEwLDcgQEAgc3RhdGljIHZvaWQgcHJpbnRfcmVwb3J0KGludCBpc19sYXN0X3JlcG9ydCwgaW50 NjRfdAo+IHRpbWVyX3N0YXJ0LCBpbnQ2NF90IGN1cl90aQo+ICAgICAgYXZfYnByaW50X2luaXQo JmJ1ZiwgMCwgQVZfQlBSSU5UX1NJWkVfQVVUT01BVElDKTsKPiAgICAgIGF2X2JwcmludF9pbml0 KCZidWZfc2NyaXB0LCAwLCBBVl9CUFJJTlRfU0laRV9BVVRPTUFUSUMpOwo+ICAgICAgZm9yIChP dXRwdXRTdHJlYW0gKm9zdCA9IG9zdF9pdGVyKE5VTEwpOyBvc3Q7IG9zdCA9IG9zdF9pdGVyKG9z dCkpIHsKPiAtICAgICAgICBjb25zdCBmbG9hdCBxID0gb3N0LT5lbmMgPyBvc3QtPnF1YWxpdHkg LyAoZmxvYXQpIEZGX1FQMkxBTUJEQSA6Cj4gLTE7Cj4gKyAgICAgICAgY29uc3QgZmxvYXQgcSA9 IG9zdC0+ZW5jID8gYXRvbWljX2xvYWQoJm9zdC0+cXVhbGl0eSkgLyAoZmxvYXQpCj4gRkZfUVAy TEFNQkRBIDogLTE7Cj4KPiAgICAgICAgICBpZiAodmlkICYmIG9zdC0+dHlwZSA9PSBBVk1FRElB X1RZUEVfVklERU8pIHsKPiAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAicT0lMi4xZiAi LCBxKTsKPiBAQCAtNTY1LDIyICs1MzEsMTggQEAgc3RhdGljIHZvaWQgcHJpbnRfcmVwb3J0KGlu dCBpc19sYXN0X3JlcG9ydCwgaW50NjRfdAo+IHRpbWVyX3N0YXJ0LCBpbnQ2NF90IGN1cl90aQo+ ICAgICAgICAgICAgICBpZiAoaXNfbGFzdF9yZXBvcnQpCj4gICAgICAgICAgICAgICAgICBhdl9i cHJpbnRmKCZidWYsICJMIik7Cj4KPiAtICAgICAgICAgICAgbmJfZnJhbWVzX2R1cCAgPSBvc3Qt PmZpbHRlci0+bmJfZnJhbWVzX2R1cDsKPiAtICAgICAgICAgICAgbmJfZnJhbWVzX2Ryb3AgPSBv c3QtPmZpbHRlci0+bmJfZnJhbWVzX2Ryb3A7Cj4gKyAgICAgICAgICAgIG5iX2ZyYW1lc19kdXAg ID0gYXRvbWljX2xvYWQoJm9zdC0+ZmlsdGVyLT5uYl9mcmFtZXNfZHVwKTsKPiArICAgICAgICAg ICAgbmJfZnJhbWVzX2Ryb3AgPSBhdG9taWNfbG9hZCgmb3N0LT5maWx0ZXItPm5iX2ZyYW1lc19k cm9wKTsKPgo+ICAgICAgICAgICAgICB2aWQgPSAxOwo+ICAgICAgICAgIH0KPiAtICAgICAgICAv KiBjb21wdXRlIG1pbiBvdXRwdXQgdmFsdWUgKi8KPiAtICAgICAgICBpZiAob3N0LT5sYXN0X211 eF9kdHMgIT0gQVZfTk9QVFNfVkFMVUUpIHsKPiAtICAgICAgICAgICAgaWYgKHB0cyA9PSBBVl9O T1BUU19WQUxVRSB8fCBvc3QtPmxhc3RfbXV4X2R0cyA+IHB0cykKPiAtICAgICAgICAgICAgICAg IHB0cyA9IG9zdC0+bGFzdF9tdXhfZHRzOwo+IC0gICAgICAgICAgICBpZiAoY29weV90cykgewo+ IC0gICAgICAgICAgICAgICAgaWYgKGNvcHlfdHNfZmlyc3RfcHRzID09IEFWX05PUFRTX1ZBTFVF ICYmIHB0cyA+IDEpCj4gLSAgICAgICAgICAgICAgICAgICAgY29weV90c19maXJzdF9wdHMgPSBw dHM7Cj4gLSAgICAgICAgICAgICAgICBpZiAoY29weV90c19maXJzdF9wdHMgIT0gQVZfTk9QVFNf VkFMVUUpCj4gLSAgICAgICAgICAgICAgICAgICAgcHRzIC09IGNvcHlfdHNfZmlyc3RfcHRzOwo+ IC0gICAgICAgICAgICB9Cj4gLSAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIGlmIChjb3B5 X3RzKSB7Cj4gKyAgICAgICAgaWYgKGNvcHlfdHNfZmlyc3RfcHRzID09IEFWX05PUFRTX1ZBTFVF ICYmIHB0cyA+IDEpCj4gKyAgICAgICAgICAgIGNvcHlfdHNfZmlyc3RfcHRzID0gcHRzOwo+ICsg ICAgICAgIGlmIChjb3B5X3RzX2ZpcnN0X3B0cyAhPSBBVl9OT1BUU19WQUxVRSkKPiArICAgICAg ICAgICAgcHRzIC09IGNvcHlfdHNfZmlyc3RfcHRzOwo+ICAgICAgfQo+Cj4gICAgICB1cyAgICA9 IEZGQUJTNjRVKHB0cykgJSBBVl9USU1FX0JBU0U7Cj4gQEAgLTc4Myw4MSArNzQ1LDYgQEAgaW50 IHN1YnRpdGxlX3dyYXBfZnJhbWUoQVZGcmFtZSAqZnJhbWUsIEFWU3VidGl0bGUKPiAqc3VidGl0 bGUsIGludCBjb3B5KQo+ICAgICAgcmV0dXJuIDA7Cj4gIH0KPgo+IC1pbnQgdHJpZ2dlcl9maXhf c3ViX2R1cmF0aW9uX2hlYXJ0YmVhdChPdXRwdXRTdHJlYW0gKm9zdCwgY29uc3QgQVZQYWNrZXQK PiAqcGt0KQo+IC17Cj4gLSAgICBPdXRwdXRGaWxlICpvZiA9IG91dHB1dF9maWxlc1tvc3QtPmZp bGVfaW5kZXhdOwo+IC0gICAgaW50NjRfdCBzaWduYWxfcHRzID0gYXZfcmVzY2FsZV9xKHBrdC0+ cHRzLCBwa3QtPnRpbWVfYmFzZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBVl9USU1FX0JBU0VfUSk7Cj4gLQo+IC0gICAgaWYgKCFvc3QtPmZpeF9zdWJfZHVyYXRp b25faGVhcnRiZWF0IHx8ICEocGt0LT5mbGFncyAmCj4gQVZfUEtUX0ZMQUdfS0VZKSkKPiAtICAg ICAgICAvLyB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGhlYXJ0YmVhdHMgb24gc3RyZWFtcyBj b25maWd1cmVkLCBhbmQKPiAtICAgICAgICAvLyBvbmx5IG9uIHJhbmRvbSBhY2Nlc3MgcG9pbnRz Lgo+IC0gICAgICAgIHJldHVybiAwOwo+IC0KPiAtICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2Yt Pm5iX3N0cmVhbXM7IGkrKykgewo+IC0gICAgICAgIE91dHB1dFN0cmVhbSAqaXRlcl9vc3QgPSBv Zi0+c3RyZWFtc1tpXTsKPiAtICAgICAgICBJbnB1dFN0cmVhbSAgKmlzdCAgICAgID0gaXRlcl9v c3QtPmlzdDsKPiAtICAgICAgICBpbnQgcmV0ID0gQVZFUlJPUl9CVUc7Cj4gLQo+IC0gICAgICAg IGlmIChpdGVyX29zdCA9PSBvc3QgfHwgIWlzdCB8fCAhaXN0LT5kZWNvZGluZ19uZWVkZWQgfHwK PiAtICAgICAgICAgICAgaXN0LT5kZWNfY3R4LT5jb2RlY190eXBlICE9IEFWTUVESUFfVFlQRV9T VUJUSVRMRSkKPiAtICAgICAgICAgICAgLy8gV2Ugd2lzaCB0byBza2lwIHRoZSBzdHJlYW0gdGhh dCBjYXVzZXMgdGhlIGhlYXJ0YmVhdCwKPiAtICAgICAgICAgICAgLy8gb3V0cHV0IHN0cmVhbXMg d2l0aG91dCBhbiBpbnB1dCBzdHJlYW0sIHN0cmVhbXMgbm90IGRlY29kZWQKPiAtICAgICAgICAg ICAgLy8gKGFzIGZpeF9zdWJfZHVyYXRpb24gaXMgb25seSBkb25lIGZvciBkZWNvZGVkIHN1YnRp dGxlcykgYXMKPiAtICAgICAgICAgICAgLy8gd2VsbCBhcyBub24tc3VidGl0bGUgc3RyZWFtcy4K PiAtICAgICAgICAgICAgY29udGludWU7Cj4gLQo+IC0gICAgICAgIGlmICgocmV0ID0gZml4X3N1 Yl9kdXJhdGlvbl9oZWFydGJlYXQoaXN0LCBzaWduYWxfcHRzKSkgPCAwKQo+IC0gICAgICAgICAg ICByZXR1cm4gcmV0Owo+IC0gICAgfQo+IC0KPiAtICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC0v KiBwa3QgPSBOVUxMIG1lYW5zIEVPRiAobmVlZGVkIHRvIGZsdXNoIGRlY29kZXIgYnVmZmVycykg Ki8KPiAtc3RhdGljIGludCBwcm9jZXNzX2lucHV0X3BhY2tldChJbnB1dFN0cmVhbSAqaXN0LCBj b25zdCBBVlBhY2tldCAqcGt0LAo+IGludCBub19lb2YpCj4gLXsKPiAtICAgIElucHV0RmlsZSAq ZiA9IGlucHV0X2ZpbGVzW2lzdC0+ZmlsZV9pbmRleF07Cj4gLSAgICBpbnQ2NF90IGR0c19lc3Qg PSBBVl9OT1BUU19WQUxVRTsKPiAtICAgIGludCByZXQgPSAwOwo+IC0gICAgaW50IGVvZl9yZWFj aGVkID0gMDsKPiAtCj4gLSAgICBpZiAoaXN0LT5kZWNvZGluZ19uZWVkZWQpIHsKPiAtICAgICAg ICByZXQgPSBkZWNfcGFja2V0KGlzdCwgcGt0LCBub19lb2YpOwo+IC0gICAgICAgIGlmIChyZXQg PCAwICYmIHJldCAhPSBBVkVSUk9SX0VPRikKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAt ICAgIH0KPiAtICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YgfHwgKCFwa3QgJiYgIWlzdC0+ZGVj b2RpbmdfbmVlZGVkKSkKPiAtICAgICAgICBlb2ZfcmVhY2hlZCA9IDE7Cj4gLQo+IC0gICAgaWYg KHBrdCAmJiBwa3QtPm9wYXF1ZV9yZWYpIHsKPiAtICAgICAgICBEZW11eFBrdERhdGEgKnBkID0g KERlbXV4UGt0RGF0YSopcGt0LT5vcGFxdWVfcmVmLT5kYXRhOwo+IC0gICAgICAgIGR0c19lc3Qg PSBwZC0+ZHRzX2VzdDsKPiAtICAgIH0KPiAtCj4gLSAgICBpZiAoZi0+cmVjb3JkaW5nX3RpbWUg IT0gSU5UNjRfTUFYKSB7Cj4gLSAgICAgICAgaW50NjRfdCBzdGFydF90aW1lID0gMDsKPiAtICAg ICAgICBpZiAoY29weV90cykgewo+IC0gICAgICAgICAgICBzdGFydF90aW1lICs9IGYtPnN0YXJ0 X3RpbWUgIT0gQVZfTk9QVFNfVkFMVUUgPyBmLT5zdGFydF90aW1lCj4gOiAwOwo+IC0gICAgICAg ICAgICBzdGFydF90aW1lICs9IHN0YXJ0X2F0X3plcm8gPyAwIDogZi0+c3RhcnRfdGltZV9lZmZl Y3RpdmU7Cj4gLSAgICAgICAgfQo+IC0gICAgICAgIGlmIChkdHNfZXN0ID49IGYtPnJlY29yZGlu Z190aW1lICsgc3RhcnRfdGltZSkKPiAtICAgICAgICAgICAgcGt0ID0gTlVMTDsKPiAtICAgIH0K PiAtCj4gLSAgICBmb3IgKGludCBvaWR4ID0gMDsgb2lkeCA8IGlzdC0+bmJfb3V0cHV0czsgb2lk eCsrKSB7Cj4gLSAgICAgICAgT3V0cHV0U3RyZWFtICpvc3QgPSBpc3QtPm91dHB1dHNbb2lkeF07 Cj4gLSAgICAgICAgaWYgKG9zdC0+ZW5jIHx8ICghcGt0ICYmIG5vX2VvZikpCj4gLSAgICAgICAg ICAgIGNvbnRpbnVlOwo+IC0KPiAtICAgICAgICByZXQgPSBvZl9zdHJlYW1jb3B5KG9zdCwgcGt0 LCBkdHNfZXN0KTsKPiAtICAgICAgICBpZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJu IHJldDsKPiAtICAgIH0KPiAtCj4gLSAgICByZXR1cm4gIWVvZl9yZWFjaGVkOwo+IC19Cj4gLQo+ ICBzdGF0aWMgdm9pZCBwcmludF9zdHJlYW1fbWFwcyh2b2lkKQo+ICB7Cj4gICAgICBhdl9sb2co TlVMTCwgQVZfTE9HX0lORk8sICJTdHJlYW0gbWFwcGluZzpcbiIpOwo+IEBAIC05MzQsNDMgKzgy MSw2IEBAIHN0YXRpYyB2b2lkIHByaW50X3N0cmVhbV9tYXBzKHZvaWQpCj4gICAgICB9Cj4gIH0K Pgo+IC0vKioKPiAtICogU2VsZWN0IHRoZSBvdXRwdXQgc3RyZWFtIHRvIHByb2Nlc3MuCj4gLSAq Cj4gLSAqIEByZXR2YWwgMCBhbiBvdXRwdXQgc3RyZWFtIHdhcyBzZWxlY3RlZAo+IC0gKiBAcmV0 dmFsIEFWRVJST1IoRUFHQUlOKSBuZWVkIHRvIHdhaXQgdW50aWwgbW9yZSBpbnB1dCBpcyBhdmFp bGFibGUKPiAtICogQHJldHZhbCBBVkVSUk9SX0VPRiBubyBtb3JlIHN0cmVhbXMgbmVlZCBvdXRw dXQKPiAtICovCj4gLXN0YXRpYyBpbnQgY2hvb3NlX291dHB1dChPdXRwdXRTdHJlYW0gKipwb3N0 KQo+IC17Cj4gLSAgICBpbnQ2NF90IG9wdHNfbWluID0gSU5UNjRfTUFYOwo+IC0gICAgT3V0cHV0 U3RyZWFtICpvc3RfbWluID0gTlVMTDsKPiAtCj4gLSAgICBmb3IgKE91dHB1dFN0cmVhbSAqb3N0 ID0gb3N0X2l0ZXIoTlVMTCk7IG9zdDsgb3N0ID0gb3N0X2l0ZXIob3N0KSkgewo+IC0gICAgICAg IGludDY0X3Qgb3B0czsKPiAtCj4gLSAgICAgICAgaWYgKG9zdC0+ZmlsdGVyICYmIG9zdC0+Zmls dGVyLT5sYXN0X3B0cyAhPSBBVl9OT1BUU19WQUxVRSkgewo+IC0gICAgICAgICAgICBvcHRzID0g b3N0LT5maWx0ZXItPmxhc3RfcHRzOwo+IC0gICAgICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgICAg IG9wdHMgPSBvc3QtPmxhc3RfbXV4X2R0cyA9PSBBVl9OT1BUU19WQUxVRSA/Cj4gLSAgICAgICAg ICAgICAgICAgICBJTlQ2NF9NSU4gOiBvc3QtPmxhc3RfbXV4X2R0czsKPiAtICAgICAgICB9Cj4g LQo+IC0gICAgICAgIGlmICghb3N0LT5pbml0aWFsaXplZCAmJiAhb3N0LT5maW5pc2hlZCkgewo+ IC0gICAgICAgICAgICBvc3RfbWluID0gb3N0Owo+IC0gICAgICAgICAgICBicmVhazsKPiAtICAg ICAgICB9Cj4gLSAgICAgICAgaWYgKCFvc3QtPmZpbmlzaGVkICYmIG9wdHMgPCBvcHRzX21pbikg ewo+IC0gICAgICAgICAgICBvcHRzX21pbiA9IG9wdHM7Cj4gLSAgICAgICAgICAgIG9zdF9taW4g ID0gb3N0Owo+IC0gICAgICAgIH0KPiAtICAgIH0KPiAtICAgIGlmICghb3N0X21pbikKPiAtICAg ICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gLSAgICAqcG9zdCA9IG9zdF9taW47Cj4gLSAgICBy ZXR1cm4gb3N0X21pbi0+dW5hdmFpbGFibGUgPyBBVkVSUk9SKEVBR0FJTikgOiAwOwo+IC19Cj4g LQo+ICBzdGF0aWMgdm9pZCBzZXRfdHR5X2VjaG8oaW50IG9uKQo+ICB7Cj4gICNpZiBIQVZFX1RF Uk1JT1NfSAo+IEBAIC0xMDQyLDE0OSArODkyLDIxIEBAIHN0YXRpYyBpbnQgY2hlY2tfa2V5Ym9h cmRfaW50ZXJhY3Rpb24oaW50NjRfdAo+IGN1cl90aW1lKQo+ICAgICAgcmV0dXJuIDA7Cj4gIH0K Pgo+IC1zdGF0aWMgdm9pZCByZXNldF9lYWdhaW4odm9pZCkKPiAtewo+IC0gICAgZm9yIChPdXRw dXRTdHJlYW0gKm9zdCA9IG9zdF9pdGVyKE5VTEwpOyBvc3Q7IG9zdCA9IG9zdF9pdGVyKG9zdCkp Cj4gLSAgICAgICAgb3N0LT51bmF2YWlsYWJsZSA9IDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lk IGRlY29kZV9mbHVzaChJbnB1dEZpbGUgKmlmaWxlKQo+IC17Cj4gLSAgICBmb3IgKGludCBpID0g MDsgaSA8IGlmaWxlLT5uYl9zdHJlYW1zOyBpKyspIHsKPiAtICAgICAgICBJbnB1dFN0cmVhbSAq aXN0ID0gaWZpbGUtPnN0cmVhbXNbaV07Cj4gLQo+IC0gICAgICAgIGlmIChpc3QtPmRpc2NhcmQg fHwgIWlzdC0+ZGVjb2RpbmdfbmVlZGVkKQo+IC0gICAgICAgICAgICBjb250aW51ZTsKPiAtCj4g LSAgICAgICAgZGVjX3BhY2tldChpc3QsIE5VTEwsIDEpOwo+IC0gICAgfQo+IC19Cj4gLQo+IC0v Kgo+IC0gKiBSZXR1cm4KPiAtICogLSAwIC0tIG9uZSBwYWNrZXQgd2FzIHJlYWQgYW5kIHByb2Nl c3NlZAo+IC0gKiAtIEFWRVJST1IoRUFHQUlOKSAtLSBubyBwYWNrZXRzIHdlcmUgYXZhaWxhYmxl IGZvciBzZWxlY3RlZCBmaWxlLAo+IC0gKiAgIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxl ZCBhZ2Fpbgo+IC0gKiAtIEFWRVJST1JfRU9GIC0tIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBi ZSBjYWxsZWQgYWdhaW4KPiAtICovCj4gLXN0YXRpYyBpbnQgcHJvY2Vzc19pbnB1dChpbnQgZmls ZV9pbmRleCwgQVZQYWNrZXQgKnBrdCkKPiAtewo+IC0gICAgSW5wdXRGaWxlICppZmlsZSA9IGlu cHV0X2ZpbGVzW2ZpbGVfaW5kZXhdOwo+IC0gICAgSW5wdXRTdHJlYW0gKmlzdDsKPiAtICAgIGlu dCByZXQsIGk7Cj4gLQo+IC0gICAgcmV0ID0gaWZpbGVfZ2V0X3BhY2tldChpZmlsZSwgcGt0KTsK PiAtCj4gLSAgICBpZiAocmV0ID09IDEpIHsKPiAtICAgICAgICAvKiB0aGUgaW5wdXQgZmlsZSBp cyBsb29wZWQ6IGZsdXNoIHRoZSBkZWNvZGVycyAqLwo+IC0gICAgICAgIGRlY29kZV9mbHVzaChp ZmlsZSk7Cj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKPiAtICAgIH0KPiAtICAg IGlmIChyZXQgPCAwKSB7Cj4gLSAgICAgICAgaWYgKHJldCAhPSBBVkVSUk9SX0VPRikgewo+IC0g ICAgICAgICAgICBhdl9sb2coaWZpbGUsIEFWX0xPR19FUlJPUiwKPiAtICAgICAgICAgICAgICAg ICAgICJFcnJvciByZXRyaWV2aW5nIGEgcGFja2V0IGZyb20gZGVtdXhlcjogJXNcbiIsCj4gYXZf ZXJyMnN0cihyZXQpKTsKPiAtICAgICAgICAgICAgaWYgKGV4aXRfb25fZXJyb3IpCj4gLSAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+IC0gICAgICAgIH0KPiAtCj4gLSAgICAgICAgZm9yIChp ID0gMDsgaSA8IGlmaWxlLT5uYl9zdHJlYW1zOyBpKyspIHsKPiAtICAgICAgICAgICAgaXN0ID0g aWZpbGUtPnN0cmVhbXNbaV07Cj4gLSAgICAgICAgICAgIGlmICghaXN0LT5kaXNjYXJkKSB7Cj4g LSAgICAgICAgICAgICAgICByZXQgPSBwcm9jZXNzX2lucHV0X3BhY2tldChpc3QsIE5VTEwsIDAp Owo+IC0gICAgICAgICAgICAgICAgaWYgKHJldD4wKQo+IC0gICAgICAgICAgICAgICAgICAgIHJl dHVybiAwOwo+IC0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmV0IDwgMCkKPiAtICAgICAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+IC0gICAgICAgICAgICB9Cj4gLQo+IC0gICAgICAgICAg ICAvKiBtYXJrIGFsbCBvdXRwdXRzIHRoYXQgZG9uJ3QgZ28gdGhyb3VnaCBsYXZmaSBhcyBmaW5p c2hlZCAqLwo+IC0gICAgICAgICAgICBmb3IgKGludCBvaWR4ID0gMDsgb2lkeCA8IGlzdC0+bmJf b3V0cHV0czsgb2lkeCsrKSB7Cj4gLSAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gKm9zdCA9 IGlzdC0+b3V0cHV0c1tvaWR4XTsKPiAtICAgICAgICAgICAgICAgIE91dHB1dEZpbGUgICAgKm9m ID0gb3V0cHV0X2ZpbGVzW29zdC0+ZmlsZV9pbmRleF07Cj4gLQo+IC0gICAgICAgICAgICAgICAg cmV0ID0gb2Zfb3V0cHV0X3BhY2tldChvZiwgb3N0LCBOVUxMKTsKPiAtICAgICAgICAgICAgICAg IGlmIChyZXQgPCAwKQo+IC0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICAg ICAgICAgIH0KPiAtICAgICAgICB9Cj4gLQo+IC0gICAgICAgIGlmaWxlLT5lb2ZfcmVhY2hlZCA9 IDE7Cj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKPiAtICAgIH0KPiAtCj4gLSAg ICByZXNldF9lYWdhaW4oKTsKPiAtCj4gLSAgICBpc3QgPSBpZmlsZS0+c3RyZWFtc1twa3QtPnN0 cmVhbV9pbmRleF07Cj4gLQo+IC0gICAgc3ViMnZpZGVvX2hlYXJ0YmVhdChpZmlsZSwgcGt0LT5w dHMsIHBrdC0+dGltZV9iYXNlKTsKPiAtCj4gLSAgICByZXQgPSBwcm9jZXNzX2lucHV0X3BhY2tl dChpc3QsIHBrdCwgMCk7Cj4gLQo+IC0gICAgYXZfcGFja2V0X3VucmVmKHBrdCk7Cj4gLQo+IC0g ICAgcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwo+IC19Cj4gLQo+IC0vKioKPiAtICogUnVuIGEg c2luZ2xlIHN0ZXAgb2YgdHJhbnNjb2RpbmcuCj4gLSAqCj4gLSAqIEByZXR1cm4gIDAgZm9yIHN1 Y2Nlc3MsIDwwIGZvciBlcnJvcgo+IC0gKi8KPiAtc3RhdGljIGludCB0cmFuc2NvZGVfc3RlcChP dXRwdXRTdHJlYW0gKm9zdCwgQVZQYWNrZXQgKmRlbXV4X3BrdCkKPiAtewo+IC0gICAgSW5wdXRT dHJlYW0gICppc3QgPSBOVUxMOwo+IC0gICAgaW50IHJldDsKPiAtCj4gLSAgICBpZiAob3N0LT5m aWx0ZXIpIHsKPiAtICAgICAgICBpZiAoKHJldCA9IGZnX3RyYW5zY29kZV9zdGVwKG9zdC0+Zmls dGVyLT5ncmFwaCwgJmlzdCkpIDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAg ICAgICBpZiAoIWlzdCkKPiAtICAgICAgICAgICAgcmV0dXJuIDA7Cj4gLSAgICB9IGVsc2Ugewo+ IC0gICAgICAgIGlzdCA9IG9zdC0+aXN0Owo+IC0gICAgICAgIGF2X2Fzc2VydDAoaXN0KTsKPiAt ICAgIH0KPiAtCj4gLSAgICByZXQgPSBwcm9jZXNzX2lucHV0KGlzdC0+ZmlsZV9pbmRleCwgZGVt dXhfcGt0KTsKPiAtICAgIGlmIChyZXQgPT0gQVZFUlJPUihFQUdBSU4pKSB7Cj4gLSAgICAgICAg cmV0dXJuIDA7Cj4gLSAgICB9Cj4gLQo+IC0gICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgcmV0 dXJuIHJldCA9PSBBVkVSUk9SX0VPRiA/IDAgOiByZXQ7Cj4gLQo+IC0gICAgLy8gcHJvY2Vzc19p bnB1dCgpIGFib3ZlIG1pZ2h0IGhhdmUgY2F1c2VkIG91dHB1dCB0byBiZWNvbWUgYXZhaWxhYmxl Cj4gLSAgICAvLyBpbiBtdWx0aXBsZSBmaWx0ZXJncmFwaHMsIHNvIHdlIHByb2Nlc3MgYWxsIG9m IHRoZW0KPiAtICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfZmlsdGVyZ3JhcGhzOyBpKyspIHsK PiAtICAgICAgICByZXQgPSByZWFwX2ZpbHRlcnMoZmlsdGVyZ3JhcGhzW2ldLCAwKTsKPiAtICAg ICAgICBpZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgIH0KPiAt Cj4gLSAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAgLyoKPiAgICogVGhlIGZvbGxvd2luZyBjb2Rl IGlzIHRoZSBtYWluIGxvb3Agb2YgdGhlIGZpbGUgY29udmVydGVyCj4gICAqLwo+IC1zdGF0aWMg aW50IHRyYW5zY29kZShTY2hlZHVsZXIgKnNjaCwgaW50ICplcnJfcmF0ZV9leGNlZWRlZCkKPiAr c3RhdGljIGludCB0cmFuc2NvZGUoU2NoZWR1bGVyICpzY2gpCj4gIHsKPiAgICAgIGludCByZXQg PSAwLCBpOwo+IC0gICAgSW5wdXRTdHJlYW0gKmlzdDsKPiAtICAgIGludDY0X3QgdGltZXJfc3Rh cnQ7Cj4gLSAgICBBVlBhY2tldCAqZGVtdXhfcGt0ID0gTlVMTDsKPiArICAgIGludDY0X3QgdGlt ZXJfc3RhcnQsIHRyYW5zY29kZV90cyA9IDA7Cj4KPiAgICAgIHByaW50X3N0cmVhbV9tYXBzKCk7 Cj4KPiAtICAgICplcnJfcmF0ZV9leGNlZWRlZCA9IDA7Cj4gICAgICBhdG9taWNfc3RvcmUoJnRy YW5zY29kZV9pbml0X2RvbmUsIDEpOwo+Cj4gLSAgICBkZW11eF9wa3QgPSBhdl9wYWNrZXRfYWxs b2MoKTsKPiAtICAgIGlmICghZGVtdXhfcGt0KSB7Cj4gLSAgICAgICAgcmV0ID0gQVZFUlJPUihF Tk9NRU0pOwo+IC0gICAgICAgIGdvdG8gZmFpbDsKPiAtICAgIH0KPiArICAgIHJldCA9IHNjaF9z dGFydChzY2gpOwo+ICsgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPgo+ ICAgICAgaWYgKHN0ZGluX2ludGVyYWN0aW9uKSB7Cj4gICAgICAgICAgYXZfbG9nKE5VTEwsIEFW X0xPR19JTkZPLCAiUHJlc3MgW3FdIHRvIHN0b3AsIFs/XSBmb3IgaGVscFxuIik7Cj4gQEAgLTEx OTIsOCArOTE0LDcgQEAgc3RhdGljIGludCB0cmFuc2NvZGUoU2NoZWR1bGVyICpzY2gsIGludAo+ ICplcnJfcmF0ZV9leGNlZWRlZCkKPgo+ICAgICAgdGltZXJfc3RhcnQgPSBhdl9nZXR0aW1lX3Jl bGF0aXZlKCk7Cj4KPiAtICAgIHdoaWxlICghcmVjZWl2ZWRfc2lndGVybSkgewo+IC0gICAgICAg IE91dHB1dFN0cmVhbSAqb3N0Owo+ICsgICAgd2hpbGUgKCFzY2hfd2FpdChzY2gsIHN0YXRzX3Bl cmlvZCwgJnRyYW5zY29kZV90cykpIHsKPiAgICAgICAgICBpbnQ2NF90IGN1cl90aW1lPSBhdl9n ZXR0aW1lX3JlbGF0aXZlKCk7Cj4KPiAgICAgICAgICAvKiBpZiAncScgcHJlc3NlZCwgZXhpdHMg Ki8KPiBAQCAtMTIwMSw0OSArOTIyLDExIEBAIHN0YXRpYyBpbnQgdHJhbnNjb2RlKFNjaGVkdWxl ciAqc2NoLCBpbnQKPiAqZXJyX3JhdGVfZXhjZWVkZWQpCj4gICAgICAgICAgICAgIGlmIChjaGVj a19rZXlib2FyZF9pbnRlcmFjdGlvbihjdXJfdGltZSkgPCAwKQo+ICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4KPiAtICAgICAgICByZXQgPSBjaG9vc2Vfb3V0cHV0KCZvc3QpOwo+IC0gICAgICAg IGlmIChyZXQgPT0gQVZFUlJPUihFQUdBSU4pKSB7Cj4gLSAgICAgICAgICAgIHJlc2V0X2VhZ2Fp bigpOwo+IC0gICAgICAgICAgICBhdl91c2xlZXAoMTAwMDApOwo+IC0gICAgICAgICAgICByZXQg PSAwOwo+IC0gICAgICAgICAgICBjb250aW51ZTsKPiAtICAgICAgICB9IGVsc2UgaWYgKHJldCA8 IDApIHsKPiAtICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19WRVJCT1NFLCAiTm8gbW9y ZSBvdXRwdXQgc3RyZWFtcyB0byB3cml0ZQo+IHRvLCBmaW5pc2hpbmcuXG4iKTsKPiAtICAgICAg ICAgICAgcmV0ID0gMDsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLSAgICAgICAgfQo+IC0KPiAt ICAgICAgICByZXQgPSB0cmFuc2NvZGVfc3RlcChvc3QsIGRlbXV4X3BrdCk7Cj4gLSAgICAgICAg aWYgKHJldCA8IDAgJiYgcmV0ICE9IEFWRVJST1JfRU9GKSB7Cj4gLSAgICAgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJFcnJvciB3aGlsZSBmaWx0ZXJpbmc6ICVzXG4iLAo+IGF2 X2VycjJzdHIocmV0KSk7Cj4gLSAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgIH0KPiAtCj4g ICAgICAgICAgLyogZHVtcCByZXBvcnQgYnkgdXNpbmcgdGhlIG91dHB1dCBmaXJzdCB2aWRlbyBh bmQgYXVkaW8gc3RyZWFtcwo+ICovCj4gLSAgICAgICAgcHJpbnRfcmVwb3J0KDAsIHRpbWVyX3N0 YXJ0LCBjdXJfdGltZSk7Cj4gKyAgICAgICAgcHJpbnRfcmVwb3J0KDAsIHRpbWVyX3N0YXJ0LCBj dXJfdGltZSwgdHJhbnNjb2RlX3RzKTsKPiAgICAgIH0KPgo+IC0gICAgLyogYXQgdGhlIGVuZCBv ZiBzdHJlYW0sIHdlIG11c3QgZmx1c2ggdGhlIGRlY29kZXIgYnVmZmVycyAqLwo+IC0gICAgZm9y IChpc3QgPSBpc3RfaXRlcihOVUxMKTsgaXN0OyBpc3QgPSBpc3RfaXRlcihpc3QpKSB7Cj4gLSAg ICAgICAgZmxvYXQgZXJyX3JhdGU7Cj4gLQo+IC0gICAgICAgIGlmICghaW5wdXRfZmlsZXNbaXN0 LT5maWxlX2luZGV4XS0+ZW9mX3JlYWNoZWQpIHsKPiAtICAgICAgICAgICAgaW50IGVyciA9IHBy b2Nlc3NfaW5wdXRfcGFja2V0KGlzdCwgTlVMTCwgMCk7Cj4gLSAgICAgICAgICAgIHJldCA9IGVy cl9tZXJnZShyZXQsIGVycik7Cj4gLSAgICAgICAgfQo+IC0KPiAtICAgICAgICBlcnJfcmF0ZSA9 IChpc3QtPmZyYW1lc19kZWNvZGVkIHx8IGlzdC0+ZGVjb2RlX2Vycm9ycykgPwo+IC0gICAgICAg ICAgICAgICAgICAgaXN0LT5kZWNvZGVfZXJyb3JzIC8gKGlzdC0+ZnJhbWVzX2RlY29kZWQgKwo+ IGlzdC0+ZGVjb2RlX2Vycm9ycykgOiAwLmY7Cj4gLSAgICAgICAgaWYgKGVycl9yYXRlID4gbWF4 X2Vycm9yX3JhdGUpIHsKPiAtICAgICAgICAgICAgYXZfbG9nKGlzdCwgQVZfTE9HX0ZBVEFMLCAi RGVjb2RlIGVycm9yIHJhdGUgJWcgZXhjZWVkcwo+IG1heGltdW0gJWdcbiIsCj4gLSAgICAgICAg ICAgICAgICAgICBlcnJfcmF0ZSwgbWF4X2Vycm9yX3JhdGUpOwo+IC0gICAgICAgICAgICAqZXJy X3JhdGVfZXhjZWVkZWQgPSAxOwo+IC0gICAgICAgIH0gZWxzZSBpZiAoZXJyX3JhdGUpCj4gLSAg ICAgICAgICAgIGF2X2xvZyhpc3QsIEFWX0xPR19WRVJCT1NFLCAiRGVjb2RlIGVycm9yIHJhdGUg JWdcbiIsCj4gZXJyX3JhdGUpOwo+IC0gICAgfQo+IC0gICAgcmV0ID0gZXJyX21lcmdlKHJldCwg ZW5jX2ZsdXNoKCkpOwo+IC0KPiAtICAgIHRlcm1fZXhpdCgpOwo+ICsgICAgcmV0ID0gc2NoX3N0 b3Aoc2NoKTsKPgo+ICAgICAgLyogd3JpdGUgdGhlIHRyYWlsZXIgaWYgbmVlZGVkICovCj4gICAg ICBmb3IgKGkgPSAwOyBpIDwgbmJfb3V0cHV0X2ZpbGVzOyBpKyspIHsKPiBAQCAtMTI1MSwxMSAr OTM0LDEwIEBAIHN0YXRpYyBpbnQgdHJhbnNjb2RlKFNjaGVkdWxlciAqc2NoLCBpbnQKPiAqZXJy X3JhdGVfZXhjZWVkZWQpCj4gICAgICAgICAgcmV0ID0gZXJyX21lcmdlKHJldCwgZXJyKTsKPiAg ICAgIH0KPgo+IC0gICAgLyogZHVtcCByZXBvcnQgYnkgdXNpbmcgdGhlIGZpcnN0IHZpZGVvIGFu ZCBhdWRpbyBzdHJlYW1zICovCj4gLSAgICBwcmludF9yZXBvcnQoMSwgdGltZXJfc3RhcnQsIGF2 X2dldHRpbWVfcmVsYXRpdmUoKSk7Cj4gKyAgICB0ZXJtX2V4aXQoKTsKPgo+IC1mYWlsOgo+IC0g ICAgYXZfcGFja2V0X2ZyZWUoJmRlbXV4X3BrdCk7Cj4gKyAgICAvKiBkdW1wIHJlcG9ydCBieSB1 c2luZyB0aGUgZmlyc3QgdmlkZW8gYW5kIGF1ZGlvIHN0cmVhbXMgKi8KPiArICAgIHByaW50X3Jl cG9ydCgxLCB0aW1lcl9zdGFydCwgYXZfZ2V0dGltZV9yZWxhdGl2ZSgpLCB0cmFuc2NvZGVfdHMp Owo+Cj4gICAgICByZXR1cm4gcmV0Owo+ICB9Cj4gQEAgLTEzMDgsNyArOTkwLDcgQEAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICB7Cj4gICAgICBTY2hlZHVsZXIgKnNjaCA9IE5V TEw7Cj4KPiAtICAgIGludCByZXQsIGVycl9yYXRlX2V4Y2VlZGVkOwo+ICsgICAgaW50IHJldDsK PiAgICAgIEJlbmNobWFya1RpbWVTdGFtcHMgdGk7Cj4KPiAgICAgIGluaXRfZHlubG9hZCgpOwo+ IEBAIC0xMzUwLDcgKzEwMzIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4g ICAgICB9Cj4KPiAgICAgIGN1cnJlbnRfdGltZSA9IHRpID0gZ2V0X2JlbmNobWFya190aW1lX3N0 YW1wcygpOwo+IC0gICAgcmV0ID0gdHJhbnNjb2RlKHNjaCwgJmVycl9yYXRlX2V4Y2VlZGVkKTsK PiArICAgIHJldCA9IHRyYW5zY29kZShzY2gpOwo+ICAgICAgaWYgKHJldCA+PSAwICYmIGRvX2Jl bmNobWFyaykgewo+ICAgICAgICAgIGludDY0X3QgdXRpbWUsIHN0aW1lLCBydGltZTsKPiAgICAg ICAgICBjdXJyZW50X3RpbWUgPSBnZXRfYmVuY2htYXJrX3RpbWVfc3RhbXBzKCk7Cj4gQEAgLTEz NjIsOCArMTA0NCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiAgICAgICAg ICAgICAgICAgdXRpbWUgLyAxMDAwMDAwLjAsIHN0aW1lIC8gMTAwMDAwMC4wLCBydGltZSAvIDEw MDAwMDAuMCk7Cj4gICAgICB9Cj4KPiAtICAgIHJldCA9IHJlY2VpdmVkX25iX3NpZ25hbHMgPyAy NTUgOgo+IC0gICAgICAgICAgZXJyX3JhdGVfZXhjZWVkZWQgICA/ICA2OSA6IHJldDsKPiArICAg IHJldCA9IHJlY2VpdmVkX25iX3NpZ25hbHMgICAgICAgICAgICAgICAgID8gMjU1IDoKPiArICAg ICAgICAgIChyZXQgPT0gRkZNUEVHX0VSUk9SX1JBVEVfRVhDRUVERUQpID8gIDY5IDogcmV0Owo+ Cj4gIGZpbmlzaDoKPiAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FWElUKQo+IGRpZmYgLS1naXQg YS9mZnRvb2xzL2ZmbXBlZy5oIGIvZmZ0b29scy9mZm1wZWcuaAo+IGluZGV4IGE4OTAzOGI3NjUu LmJhODJiNzQ5MGQgMTAwNjQ0Cj4gLS0tIGEvZmZ0b29scy9mZm1wZWcuaAo+ICsrKyBiL2ZmdG9v bHMvZmZtcGVnLmgKPiBAQCAtNjEsNiArNjEsOCBAQAo+ICAjZGVmaW5lIEZGTVBFR19PUFRfVE9Q IDEKPiAgI2RlZmluZSBGRk1QRUdfT1BUX0ZPUkNFX0tGX1NPVVJDRV9OT19EUk9QIDEKPgo+ICsj ZGVmaW5lIEZGTVBFR19FUlJPUl9SQVRFX0VYQ0VFREVEIEZGRVJSVEFHKCdFJywgJ1InLCAnRScs ICdEJykKPiArCj4gIGVudW0gVmlkZW9TeW5jTWV0aG9kIHsKPiAgICAgIFZTWU5DX0FVVE8gPSAt MSwKPiAgICAgIFZTWU5DX1BBU1NUSFJPVUdILAo+IEBAIC04MiwxMyArODQsMTYgQEAgZW51bSBI V0FjY2VsSUQgewo+ICB9Owo+Cj4gIGVudW0gRnJhbWVPcGFxdWUgewo+IC0gICAgRlJBTUVfT1BB UVVFX1JFQVBfRklMVEVSUyA9IDEsCj4gLSAgICBGUkFNRV9PUEFRVUVfQ0hPT1NFX0lOUFVULAo+ IC0gICAgRlJBTUVfT1BBUVVFX1NVQl9IRUFSVEJFQVQsCj4gKyAgICBGUkFNRV9PUEFRVUVfU1VC X0hFQVJUQkVBVCA9IDEsCj4gICAgICBGUkFNRV9PUEFRVUVfRU9GLAo+ICAgICAgRlJBTUVfT1BB UVVFX1NFTkRfQ09NTUFORCwKPiAgfTsKPgo+ICtlbnVtIFBhY2tldE9wYXF1ZSB7Cj4gKyAgICBQ S1RfT1BBUVVFX1NVQl9IRUFSVEJFQVQgPSAxLAo+ICsgICAgUEtUX09QQVFVRV9GSVhfU1VCX0RV UkFUSU9OLAo+ICt9Owo+ICsKPiAgdHlwZWRlZiBzdHJ1Y3QgSFdEZXZpY2Ugewo+ICAgICAgY29u c3QgY2hhciAqbmFtZTsKPiAgICAgIGVudW0gQVZIV0RldmljZVR5cGUgdHlwZTsKPiBAQCAtMzA5 LDExICszMTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRGaWx0ZXIgewo+Cj4gICAgICBlbnVt IEFWTWVkaWFUeXBlICAgICB0eXBlOwo+Cj4gLSAgICAvKiBwdHMgb2YgdGhlIGxhc3QgZnJhbWUg cmVjZWl2ZWQgZnJvbSB0aGlzIGZpbHRlciwgaW4gQVZfVElNRV9CQVNFX1EKPiAqLwo+IC0gICAg aW50NjRfdCBsYXN0X3B0czsKPiAtCj4gLSAgICB1aW50NjRfdCBuYl9mcmFtZXNfZHVwOwo+IC0g ICAgdWludDY0X3QgbmJfZnJhbWVzX2Ryb3A7Cj4gKyAgICBhdG9taWNfdWludF9sZWFzdDY0X3Qg bmJfZnJhbWVzX2R1cDsKPiArICAgIGF0b21pY191aW50X2xlYXN0NjRfdCBuYl9mcmFtZXNfZHJv cDsKPiAgfSBPdXRwdXRGaWx0ZXI7Cj4KPiAgdHlwZWRlZiBzdHJ1Y3QgRmlsdGVyR3JhcGggewo+ IEBAIC00MjYsMTEgKzQyOCw2IEBAIHR5cGVkZWYgc3RydWN0IElucHV0RmlsZSB7Cj4KPiAgICAg IGZsb2F0IHJlYWRyYXRlOwo+ICAgICAgaW50IGFjY3VyYXRlX3NlZWs7Cj4gLQo+IC0gICAgLyog d2hlbiBsb29waW5nIHRoZSBpbnB1dCBmaWxlLCB0aGlzIHF1ZXVlIGlzIHVzZWQgYnkgZGVjb2Rl cnMgdG8KPiByZXBvcnQKPiAtICAgICAqIHRoZSBsYXN0IGZyYW1lIHRpbWVzdGFtcCBiYWNrIHRv IHRoZSBkZW11eGVyIHRocmVhZCAqLwo+IC0gICAgQVZUaHJlYWRNZXNzYWdlUXVldWUgKmF1ZGlv X3RzX3F1ZXVlOwo+IC0gICAgaW50ICAgICAgICAgICAgICAgICAgIGF1ZGlvX3RzX3F1ZXVlX3Np emU7Cj4gIH0gSW5wdXRGaWxlOwo+Cj4gIGVudW0gZm9yY2VkX2tleWZyYW1lc19jb25zdCB7Cj4g QEAgLTUzMiw4ICs1MjksNiBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRTdHJlYW0gewo+ICAgICAg SW5wdXRTdHJlYW0gKmlzdDsKPgo+ICAgICAgQVZTdHJlYW0gKnN0OyAgICAgICAgICAgIC8qIHN0 cmVhbSBpbiB0aGUgb3V0cHV0IGZpbGUgKi8KPiAtICAgIC8qIGR0cyBvZiB0aGUgbGFzdCBwYWNr ZXQgc2VudCB0byB0aGUgbXV4aW5nIHF1ZXVlLCBpbiBBVl9USU1FX0JBU0VfUQo+ICovCj4gLSAg ICBpbnQ2NF90IGxhc3RfbXV4X2R0czsKPgo+ICAgICAgQVZSYXRpb25hbCBlbmNfdGltZWJhc2U7 Cj4KPiBAQCAtNTc4LDEzICs1NzMsNiBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRTdHJlYW0gewo+ ICAgICAgQVZEaWN0aW9uYXJ5ICpzd3NfZGljdDsKPiAgICAgIEFWRGljdGlvbmFyeSAqc3dyX29w dHM7Cj4gICAgICBjaGFyICphcGFkOwo+IC0gICAgT1NURmluaXNoZWQgZmluaXNoZWQ7ICAgICAg ICAvKiBubyBtb3JlIHBhY2tldHMgc2hvdWxkIGJlIHdyaXR0ZW4gZm9yCj4gdGhpcyBzdHJlYW0g Ki8KPiAtICAgIGludCB1bmF2YWlsYWJsZTsgICAgICAgICAgICAgICAgICAgICAvKiB0cnVlIGlm IHRoZSBzdGVyYW0gaXMKPiB1bmF2YWlsYWJsZSAocG9zc2libHkgdGVtcG9yYXJpbHkpICovCj4g LQo+IC0gICAgLy8gaW5pdF9vdXRwdXRfc3RyZWFtKCkgaGFzIGJlZW4gY2FsbGVkIGZvciB0aGlz IHN0cmVhbQo+IC0gICAgLy8gVGhlIGVuY29kZXIgYW5kIHRoZSBiaXRzdHJlYW0gZmlsdGVycyBo YXZlIGJlZW4gaW5pdGlhbGl6ZWQgYW5kCj4gdGhlIHN0cmVhbQo+IC0gICAgLy8gcGFyYW1ldGVy cyBhcmUgc2V0IGluIHRoZSBBVlN0cmVhbS4KPiAtICAgIGludCBpbml0aWFsaXplZDsKPgo+ICAg ICAgY29uc3QgY2hhciAqYXR0YWNobWVudF9maWxlbmFtZTsKPgo+IEBAIC01OTgsOSArNTg2LDgg QEAgdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0U3RyZWFtIHsKPiAgICAgIHVpbnQ2NF90IHNhbXBsZXNf ZW5jb2RlZDsKPgo+ICAgICAgLyogcGFja2V0IHF1YWxpdHkgZmFjdG9yICovCj4gLSAgICBpbnQg cXVhbGl0eTsKPiArICAgIGF0b21pY19pbnQgcXVhbGl0eTsKPgo+IC0gICAgaW50IHNxX2lkeF9l bmNvZGU7Cj4gICAgICBpbnQgc3FfaWR4X211eDsKPgo+ICAgICAgRW5jU3RhdHMgZW5jX3N0YXRz X3ByZTsKPiBAQCAtNjU4LDcgKzY0NSw2IEBAIGV4dGVybiBGaWx0ZXJHcmFwaCAqKmZpbHRlcmdy YXBoczsKPiAgZXh0ZXJuIGludCAgICAgICAgbmJfZmlsdGVyZ3JhcGhzOwo+Cj4gIGV4dGVybiBj aGFyICp2c3RhdHNfZmlsZW5hbWU7Cj4gLWV4dGVybiBjaGFyICpzZHBfZmlsZW5hbWU7Cj4KPiAg ZXh0ZXJuIGZsb2F0IGR0c19kZWx0YV90aHJlc2hvbGQ7Cj4gIGV4dGVybiBmbG9hdCBkdHNfZXJy b3JfdGhyZXNob2xkOwo+IEBAIC02OTEsNyArNjc3LDcgQEAgZXh0ZXJuIGNvbnN0IEFWSU9JbnRl cnJ1cHRDQiBpbnRfY2I7Cj4gIGV4dGVybiBjb25zdCBPcHRpb25EZWYgb3B0aW9uc1tdOwo+ICBl eHRlcm4gSFdEZXZpY2UgKmZpbHRlcl9od19kZXZpY2U7Cj4KPiAtZXh0ZXJuIHVuc2lnbmVkIG5i X291dHB1dF9kdW1wZWQ7Cj4gK2V4dGVybiBhdG9taWNfdWludCBuYl9vdXRwdXRfZHVtcGVkOwo+ Cj4gIGV4dGVybiBpbnQgaWdub3JlX3Vua25vd25fc3RyZWFtczsKPiAgZXh0ZXJuIGludCBjb3B5 X3Vua25vd25fc3RyZWFtczsKPiBAQCAtNzM3LDEwICs3MjMsNiBAQCBGcmFtZURhdGEgKmZyYW1l X2RhdGEoQVZGcmFtZSAqZnJhbWUpOwo+Cj4gIGNvbnN0IEZyYW1lRGF0YSAqZnJhbWVfZGF0YV9j KEFWRnJhbWUgKmZyYW1lKTsKPgo+IC1pbnQgaWZpbHRlcl9zZW5kX2ZyYW1lKElucHV0RmlsdGVy ICppZmlsdGVyLCBBVkZyYW1lICpmcmFtZSwgaW50Cj4ga2VlcF9yZWZlcmVuY2UpOwo+IC1pbnQg aWZpbHRlcl9zZW5kX2VvZihJbnB1dEZpbHRlciAqaWZpbHRlciwgaW50NjRfdCBwdHMsIEFWUmF0 aW9uYWwgdGIpOwo+IC12b2lkIGlmaWx0ZXJfc3ViMnZpZGVvX2hlYXJ0YmVhdChJbnB1dEZpbHRl ciAqaWZpbHRlciwgaW50NjRfdCBwdHMsCj4gQVZSYXRpb25hbCB0Yik7Cj4gLQo+ICAvKioKPiAg ICogU2V0IHVwIGZhbGxiYWNrIGZpbHRlcmluZyBwYXJhbWV0ZXJzIGZyb20gYSBkZWNvZGVyIGNv bnRleHQuIFRoZXkgd2lsbAo+IG9ubHkKPiAgICogYmUgdXNlZCBpZiBubyBmcmFtZXMgYXJlIGV2 ZXIgc2VudCBvbiB0aGlzIGlucHV0LCBvdGhlcndpc2UgdGhlIGFjdHVhbAo+IEBAIC03NjEsMjYg Kzc0Myw5IEBAIGludCBmZ19jcmVhdGUoRmlsdGVyR3JhcGggKipwZmcsIGNoYXIgKmdyYXBoX2Rl c2MsCj4gU2NoZWR1bGVyICpzY2gpOwo+Cj4gIHZvaWQgZmdfZnJlZShGaWx0ZXJHcmFwaCAqKnBm Zyk7Cj4KPiAtLyoqCj4gLSAqIFBlcmZvcm0gYSBzdGVwIG9mIHRyYW5zY29kaW5nIGZvciB0aGUg c3BlY2lmaWVkIGZpbHRlciBncmFwaC4KPiAtICoKPiAtICogQHBhcmFtW2luXSAgZ3JhcGggICAg IGZpbHRlciBncmFwaCB0byBjb25zaWRlcgo+IC0gKiBAcGFyYW1bb3V0XSBiZXN0X2lzdCAgaW5w dXQgc3RyZWFtIHdoZXJlIGEgZnJhbWUgd291bGQgYWxsb3cgdG8KPiBjb250aW51ZQo+IC0gKiBA cmV0dXJuICAwIGZvciBzdWNjZXNzLCA8MCBmb3IgZXJyb3IKPiAtICovCj4gLWludCBmZ190cmFu c2NvZGVfc3RlcChGaWx0ZXJHcmFwaCAqZ3JhcGgsIElucHV0U3RyZWFtICoqYmVzdF9pc3QpOwo+ IC0KPiAgdm9pZCBmZ19zZW5kX2NvbW1hbmQoRmlsdGVyR3JhcGggKmZnLCBkb3VibGUgdGltZSwg Y29uc3QgY2hhciAqdGFyZ2V0LAo+ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpj b21tYW5kLCBjb25zdCBjaGFyICphcmcsIGludAo+IGFsbF9maWx0ZXJzKTsKPgo+IC0vKioKPiAt ICogR2V0IGFuZCBlbmNvZGUgbmV3IG91dHB1dCBmcm9tIHNwZWNpZmllZCBmaWx0ZXJncmFwaCwg d2l0aG91dCBjYXVzaW5nCj4gLSAqIGFjdGl2aXR5Lgo+IC0gKgo+IC0gKiBAcmV0dXJuICAwIGZv ciBzdWNjZXNzLCA8MCBmb3Igc2V2ZXJlIGVycm9ycwo+IC0gKi8KPiAtaW50IHJlYXBfZmlsdGVy cyhGaWx0ZXJHcmFwaCAqZmcsIGludCBmbHVzaCk7Cj4gLQo+ICBpbnQgZmZtcGVnX3BhcnNlX29w dGlvbnMoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBTY2hlZHVsZXIgKnNjaCk7Cj4KPiAgdm9pZCBl bmNfc3RhdHNfd3JpdGUoT3V0cHV0U3RyZWFtICpvc3QsIEVuY1N0YXRzICplcywKPiBAQCAtODA3 LDI1ICs3NzIsMTEgQEAgaW50IGh3YWNjZWxfcmV0cmlldmVfZGF0YShBVkNvZGVjQ29udGV4dCAq YXZjdHgsCj4gQVZGcmFtZSAqaW5wdXQpOwo+ICBpbnQgZGVjX29wZW4oSW5wdXRTdHJlYW0gKmlz dCwgU2NoZWR1bGVyICpzY2gsIHVuc2lnbmVkIHNjaF9pZHgpOwo+ICB2b2lkIGRlY19mcmVlKERl Y29kZXIgKipwZGVjKTsKPgo+IC0vKioKPiAtICogU3VibWl0IGEgcGFja2V0IGZvciBkZWNvZGlu Zwo+IC0gKgo+IC0gKiBXaGVuIHBrdD09TlVMTCBhbmQgbm9fZW9mPTAsIHRoZXJlIHdpbGwgYmUg bm8gbW9yZSBpbnB1dC4gRmx1c2gKPiBkZWNvZGVycyBhbmQKPiAtICogbWFyayBhbGwgZG93bnN0 cmVhbXMgYXMgZmluaXNoZWQuCj4gLSAqCj4gLSAqIFdoZW4gcGt0PT1OVUxMIGFuZCBub19lb2Y9 MSwgdGhlIHN0cmVhbSB3YXMgcmVzZXQgKGUuZy4gYWZ0ZXIgYSBzZWVrKS4KPiBGbHVzaAo+IC0g KiBkZWNvZGVycyBhbmQgYXdhaXQgZnVydGhlciBpbnB1dC4KPiAtICovCj4gLWludCBkZWNfcGFj a2V0KElucHV0U3RyZWFtICppc3QsIGNvbnN0IEFWUGFja2V0ICpwa3QsIGludCBub19lb2YpOwo+ IC0KPiAgaW50IGVuY19hbGxvYyhFbmNvZGVyICoqcGVuYywgY29uc3QgQVZDb2RlYyAqY29kZWMs Cj4gICAgICAgICAgICAgICAgU2NoZWR1bGVyICpzY2gsIHVuc2lnbmVkIHNjaF9pZHgpOwo+ICB2 b2lkIGVuY19mcmVlKEVuY29kZXIgKipwZW5jKTsKPgo+IC1pbnQgZW5jX29wZW4oT3V0cHV0U3Ry ZWFtICpvc3QsIGNvbnN0IEFWRnJhbWUgKmZyYW1lKTsKPiAtaW50IGVuY19zdWJ0aXRsZShPdXRw dXRGaWxlICpvZiwgT3V0cHV0U3RyZWFtICpvc3QsIGNvbnN0IEFWU3VidGl0bGUKPiAqc3ViKTsK PiAtaW50IGVuY19mcmFtZShPdXRwdXRTdHJlYW0gKm9zdCwgQVZGcmFtZSAqZnJhbWUpOwo+IC1p bnQgZW5jX2ZsdXNoKHZvaWQpOwo+ICtpbnQgZW5jX29wZW4odm9pZCAqb3BhcXVlLCBjb25zdCBB VkZyYW1lICpmcmFtZSk7Cj4KPiAgLyoKPiAgICogSW5pdGlhbGl6ZSBtdXhpbmcgc3RhdGUgZm9y IHRoZSBnaXZlbiBzdHJlYW0sIHNob3VsZCBiZSBjYWxsZWQKPiBAQCAtODQwLDMwICs3OTEsMTEg QEAgdm9pZCBvZl9mcmVlKE91dHB1dEZpbGUgKipwb2YpOwo+Cj4gIHZvaWQgb2ZfZW5jX3N0YXRz X2Nsb3NlKHZvaWQpOwo+Cj4gLWludCBvZl9vdXRwdXRfcGFja2V0KE91dHB1dEZpbGUgKm9mLCBP dXRwdXRTdHJlYW0gKm9zdCwgQVZQYWNrZXQgKnBrdCk7Cj4gLQo+IC0vKioKPiAtICogQHBhcmFt IGR0cyBwcmVkaWN0ZWQgcGFja2V0IGR0cyBpbiBBVl9USU1FX0JBU0VfUQo+IC0gKi8KPiAtaW50 IG9mX3N0cmVhbWNvcHkoT3V0cHV0U3RyZWFtICpvc3QsIGNvbnN0IEFWUGFja2V0ICpwa3QsIGlu dDY0X3QgZHRzKTsKPiAtCj4gIGludDY0X3Qgb2ZfZmlsZXNpemUoT3V0cHV0RmlsZSAqb2YpOwo+ Cj4gIGludCBpZmlsZV9vcGVuKGNvbnN0IE9wdGlvbnNDb250ZXh0ICpvLCBjb25zdCBjaGFyICpm aWxlbmFtZSwgU2NoZWR1bGVyCj4gKnNjaCk7Cj4gIHZvaWQgaWZpbGVfY2xvc2UoSW5wdXRGaWxl ICoqZik7Cj4KPiAtLyoqCj4gLSAqIEdldCBuZXh0IGlucHV0IHBhY2tldCBmcm9tIHRoZSBkZW11 eGVyLgo+IC0gKgo+IC0gKiBAcGFyYW0gcGt0IHRoZSBwYWNrZXQgaXMgd3JpdHRlbiBoZXJlIHdo ZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAKPiAtICogQHJldHVybgo+IC0gKiAtIDAgd2hlbiBh IHBhY2tldCBoYXMgYmVlbiByZWFkIHN1Y2Nlc3NmdWxseQo+IC0gKiAtIDEgd2hlbiBzdHJlYW0g ZW5kIHdhcyByZWFjaGVkLCBidXQgdGhlIHN0cmVhbSBpcyBsb29wZWQ7Cj4gLSAqICAgICBjYWxs ZXIgc2hvdWxkIGZsdXNoIGRlY29kZXJzIGFuZCByZWFkIGZyb20gdGhpcyBkZW11eGVyIGFnYWlu Cj4gLSAqIC0gYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKPiAtICovCj4gLWludCBp ZmlsZV9nZXRfcGFja2V0KElucHV0RmlsZSAqZiwgQVZQYWNrZXQgKnBrdCk7Cj4gLQo+ICBpbnQg aXN0X291dHB1dF9hZGQoSW5wdXRTdHJlYW0gKmlzdCwgT3V0cHV0U3RyZWFtICpvc3QpOwo+ICBp bnQgaXN0X2ZpbHRlcl9hZGQoSW5wdXRTdHJlYW0gKmlzdCwgSW5wdXRGaWx0ZXIgKmlmaWx0ZXIs IGludCBpc19zaW1wbGUpOwo+Cj4gQEAgLTg4MCw5ICs4MTIsNiBAQCBJbnB1dFN0cmVhbSAqaXN0 X2l0ZXIoSW5wdXRTdHJlYW0gKnByZXYpOwo+ICAgKiBwYXNzIE5VTEwgdG8gc3RhcnQgaXRlcmF0 aW9uICovCj4gIE91dHB1dFN0cmVhbSAqb3N0X2l0ZXIoT3V0cHV0U3RyZWFtICpwcmV2KTsKPgo+ IC12b2lkIGNsb3NlX291dHB1dF9zdHJlYW0oT3V0cHV0U3RyZWFtICpvc3QpOwo+IC1pbnQgdHJp Z2dlcl9maXhfc3ViX2R1cmF0aW9uX2hlYXJ0YmVhdChPdXRwdXRTdHJlYW0gKm9zdCwgY29uc3Qg QVZQYWNrZXQKPiAqcGt0KTsKPiAtaW50IGZpeF9zdWJfZHVyYXRpb25faGVhcnRiZWF0KElucHV0 U3RyZWFtICppc3QsIGludDY0X3Qgc2lnbmFsX3B0cyk7Cj4gIHZvaWQgdXBkYXRlX2JlbmNobWFy ayhjb25zdCBjaGFyICpmbXQsIC4uLik7Cj4KPiAgI2RlZmluZSBTUEVDSUZJRVJfT1BUX0ZNVF9z dHIgICIlcyIKPiBkaWZmIC0tZ2l0IGEvZmZ0b29scy9mZm1wZWdfZGVjLmMgYi9mZnRvb2xzL2Zm bXBlZ19kZWMuYwo+IGluZGV4IDkwZWEwZDZkOTMuLjVkZGU4MmEyNzYgMTAwNjQ0Cj4gLS0tIGEv ZmZ0b29scy9mZm1wZWdfZGVjLmMKPiArKysgYi9mZnRvb2xzL2ZmbXBlZ19kZWMuYwo+IEBAIC01 NCwyNCArNTQsNiBAQCBzdHJ1Y3QgRGVjb2RlciB7Cj4KPiAgICAgIFNjaGVkdWxlciAgICAgICpz Y2g7Cj4gICAgICB1bnNpZ25lZCAgICAgICAgc2NoX2lkeDsKPiAtCj4gLSAgICBwdGhyZWFkX3Qg ICAgICAgdGhyZWFkOwo+IC0gICAgLyoqCj4gLSAgICAgKiBRdWV1ZSBmb3Igc2VuZGluZyBjb2Rl ZCBwYWNrZXRzIGZyb20gdGhlIG1haW4gdGhyZWFkIHRvCj4gLSAgICAgKiB0aGUgZGVjb2RlciB0 aHJlYWQuCj4gLSAgICAgKgo+IC0gICAgICogQW4gZW1wdHkgcGFja2V0IGlzIHNlbnQgdG8gZmx1 c2ggdGhlIGRlY29kZXIgd2l0aG91dCB0ZXJtaW5hdGluZwo+IC0gICAgICogZGVjb2RpbmcuCj4g LSAgICAgKi8KPiAtICAgIFRocmVhZFF1ZXVlICAgICpxdWV1ZV9pbjsKPiAtICAgIC8qKgo+IC0g ICAgICogUXVldWUgZm9yIHNlbmRpbmcgZGVjb2RlZCBmcmFtZXMgZnJvbSB0aGUgZGVjb2RlciB0 aHJlYWQKPiAtICAgICAqIHRvIHRoZSBtYWluIHRocmVhZC4KPiAtICAgICAqCj4gLSAgICAgKiBB biBlbXB0eSBmcmFtZSBpcyBzZW50IHRvIHNpZ25hbCB0aGF0IGEgc2luZ2xlIHBhY2tldCBoYXMg YmVlbgo+IGZ1bGx5Cj4gLSAgICAgKiBwcm9jZXNzZWQuCj4gLSAgICAgKi8KPiAtICAgIFRocmVh ZFF1ZXVlICAgICpxdWV1ZV9vdXQ7Cj4gIH07Cj4KPiAgLy8gZGF0YSB0aGF0IGlzIGxvY2FsIHRv IHRoZSBkZWNvZGVyIHRocmVhZCBhbmQgbm90IHZpc2libGUgb3V0c2lkZSBvZiBpdAo+IEBAIC04 MCwyNCArNjIsNiBAQCB0eXBlZGVmIHN0cnVjdCBEZWNUaHJlYWRDb250ZXh0IHsKPiAgICAgIEFW UGFja2V0ICAgICAgICAqcGt0Owo+ICB9IERlY1RocmVhZENvbnRleHQ7Cj4KPiAtc3RhdGljIGlu dCBkZWNfdGhyZWFkX3N0b3AoRGVjb2RlciAqZCkKPiAtewo+IC0gICAgdm9pZCAqcmV0Owo+IC0K PiAtICAgIGlmICghZC0+cXVldWVfaW4pCj4gLSAgICAgICAgcmV0dXJuIDA7Cj4gLQo+IC0gICAg dHFfc2VuZF9maW5pc2goZC0+cXVldWVfaW4sIDApOwo+IC0gICAgdHFfcmVjZWl2ZV9maW5pc2go ZC0+cXVldWVfb3V0LCAwKTsKPiAtCj4gLSAgICBwdGhyZWFkX2pvaW4oZC0+dGhyZWFkLCAmcmV0 KTsKPiAtCj4gLSAgICB0cV9mcmVlKCZkLT5xdWV1ZV9pbik7Cj4gLSAgICB0cV9mcmVlKCZkLT5x dWV1ZV9vdXQpOwo+IC0KPiAtICAgIHJldHVybiAoaW50cHRyX3QpcmV0Owo+IC19Cj4gLQo+ICB2 b2lkIGRlY19mcmVlKERlY29kZXIgKipwZGVjKQo+ICB7Cj4gICAgICBEZWNvZGVyICpkZWMgPSAq cGRlYzsKPiBAQCAtMTA1LDggKzY5LDYgQEAgdm9pZCBkZWNfZnJlZShEZWNvZGVyICoqcGRlYykK PiAgICAgIGlmICghZGVjKQo+ICAgICAgICAgIHJldHVybjsKPgo+IC0gICAgZGVjX3RocmVhZF9z dG9wKGRlYyk7Cj4gLQo+ICAgICAgYXZfZnJhbWVfZnJlZSgmZGVjLT5mcmFtZSk7Cj4gICAgICBh dl9wYWNrZXRfZnJlZSgmZGVjLT5wa3QpOwo+Cj4gQEAgLTE0OCwyNSArMTEwLDYgQEAgZmFpbDoK PiAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gIH0KPgo+IC1zdGF0aWMgaW50IHNlbmRf ZnJhbWVfdG9fZmlsdGVycyhJbnB1dFN0cmVhbSAqaXN0LCBBVkZyYW1lICpkZWNvZGVkX2ZyYW1l KQo+IC17Cj4gLSAgICBpbnQgaSwgcmV0ID0gMDsKPiAtCj4gLSAgICBmb3IgKGkgPSAwOyBpIDwg aXN0LT5uYl9maWx0ZXJzOyBpKyspIHsKPiAtICAgICAgICByZXQgPSBpZmlsdGVyX3NlbmRfZnJh bWUoaXN0LT5maWx0ZXJzW2ldLCBkZWNvZGVkX2ZyYW1lLAo+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpIDwgaXN0LT5uYl9maWx0ZXJzIC0gMSB8fAo+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpc3QtPmRlYy0+dHlwZSA9PSBBVk1FRElBX1RZUEVfU1VCVElU TEUpOwo+IC0gICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpCj4gLSAgICAgICAgICAgIHJl dCA9IDA7IC8qIGlnbm9yZSAqLwo+IC0gICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gLSAgICAgICAg ICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfRVJST1IsCj4gLSAgICAgICAgICAgICAgICAgICAiRmFp bGVkIHRvIGluamVjdCBmcmFtZSBpbnRvIGZpbHRlciBuZXR3b3JrOiAlc1xuIiwKPiBhdl9lcnIy c3RyKHJldCkpOwo+IC0gICAgICAgICAgICBicmVhazsKPiAtICAgICAgICB9Cj4gLSAgICB9Cj4g LSAgICByZXR1cm4gcmV0Owo+IC19Cj4gLQo+ICBzdGF0aWMgQVZSYXRpb25hbCBhdWRpb19zYW1w bGVyYXRlX3VwZGF0ZSh2b2lkICpsb2djdHgsIERlY29kZXIgKmQsCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lKQo+ICB7Cj4g QEAgLTQyMSwyOCArMzY0LDE0IEBAIHN0YXRpYyBpbnQgcHJvY2Vzc19zdWJ0aXRsZShJbnB1dFN0 cmVhbSAqaXN0LAo+IEFWRnJhbWUgKmZyYW1lKQo+ICAgICAgaWYgKCFzdWJ0aXRsZSkKPiAgICAg ICAgICByZXR1cm4gMDsKPgo+IC0gICAgcmV0ID0gc2VuZF9mcmFtZV90b19maWx0ZXJzKGlzdCwg ZnJhbWUpOwo+ICsgICAgcmV0ID0gc2NoX2RlY19zZW5kKGQtPnNjaCwgZC0+c2NoX2lkeCwgZnJh bWUpOwo+ICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAg ICBhdl9mcmFtZV91bnJlZihmcmFtZSk7Cj4KPiAtICAgIHN1YnRpdGxlID0gKEFWU3VidGl0bGUq KWZyYW1lLT5idWZbMF0tPmRhdGE7Cj4gLSAgICBpZiAoIXN1YnRpdGxlLT5udW1fcmVjdHMpCj4g LSAgICAgICAgcmV0dXJuIDA7Cj4gLQo+IC0gICAgZm9yIChpbnQgb2lkeCA9IDA7IG9pZHggPCBp c3QtPm5iX291dHB1dHM7IG9pZHgrKykgewo+IC0gICAgICAgIE91dHB1dFN0cmVhbSAqb3N0ID0g aXN0LT5vdXRwdXRzW29pZHhdOwo+IC0gICAgICAgIGlmICghb3N0LT5lbmMgfHwgb3N0LT50eXBl ICE9IEFWTUVESUFfVFlQRV9TVUJUSVRMRSkKPiAtICAgICAgICAgICAgY29udGludWU7Cj4gLQo+ IC0gICAgICAgIHJldCA9IGVuY19zdWJ0aXRsZShvdXRwdXRfZmlsZXNbb3N0LT5maWxlX2luZGV4 XSwgb3N0LCBzdWJ0aXRsZSk7Cj4gLSAgICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIDA7Cj4gKyAgICByZXR1cm4g cmV0ID09IEFWRVJST1JfRU9GID8gQVZFUlJPUl9FWElUIDogcmV0Owo+ICB9Cj4KPiAtaW50IGZp eF9zdWJfZHVyYXRpb25faGVhcnRiZWF0KElucHV0U3RyZWFtICppc3QsIGludDY0X3Qgc2lnbmFs X3B0cykKPiArc3RhdGljIGludCBmaXhfc3ViX2R1cmF0aW9uX2hlYXJ0YmVhdChJbnB1dFN0cmVh bSAqaXN0LCBpbnQ2NF90Cj4gc2lnbmFsX3B0cykKPiAgewo+ICAgICAgRGVjb2RlciAqZCA9IGlz dC0+ZGVjb2RlcjsKPiAgICAgIGludCByZXQgPSBBVkVSUk9SX0JVRzsKPiBAQCAtNDY4LDEyICsz OTcsMjQgQEAgaW50IGZpeF9zdWJfZHVyYXRpb25faGVhcnRiZWF0KElucHV0U3RyZWFtICppc3Qs Cj4gaW50NjRfdCBzaWduYWxfcHRzKQo+ICBzdGF0aWMgaW50IHRyYW5zY29kZV9zdWJ0aXRsZXMo SW5wdXRTdHJlYW0gKmlzdCwgY29uc3QgQVZQYWNrZXQgKnBrdCwKPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWRnJhbWUgKmZyYW1lKQo+ICB7Cj4gLSAgICBEZWNvZGVyICAgICAg ICAgICpkID0gaXN0LT5kZWNvZGVyOwo+ICsgICAgRGVjb2RlciAqZCA9IGlzdC0+ZGVjb2RlcjsK PiAgICAgIEFWUGFja2V0ICpmbHVzaF9wa3QgPSBOVUxMOwo+ICAgICAgQVZTdWJ0aXRsZSBzdWJ0 aXRsZTsKPiAgICAgIGludCBnb3Rfb3V0cHV0Owo+ICAgICAgaW50IHJldDsKPgo+ICsgICAgaWYg KHBrdCAmJiAoaW50cHRyX3QpcGt0LT5vcGFxdWUgPT0gUEtUX09QQVFVRV9TVUJfSEVBUlRCRUFU KSB7Cj4gKyAgICAgICAgZnJhbWUtPnB0cyAgICAgICA9IHBrdC0+cHRzOwo+ICsgICAgICAgIGZy YW1lLT50aW1lX2Jhc2UgPSBwa3QtPnRpbWVfYmFzZTsKPiArICAgICAgICBmcmFtZS0+b3BhcXVl ICAgID0gKHZvaWQqKShpbnRwdHJfdClGUkFNRV9PUEFRVUVfU1VCX0hFQVJUQkVBVDsKPiArCj4g KyAgICAgICAgcmV0ID0gc2NoX2RlY19zZW5kKGQtPnNjaCwgZC0+c2NoX2lkeCwgZnJhbWUpOwo+ ICsgICAgICAgIHJldHVybiByZXQgPT0gQVZFUlJPUl9FT0YgPyBBVkVSUk9SX0VYSVQgOiByZXQ7 Cj4gKyAgICB9IGVsc2UgaWYgKHBrdCAmJiAoaW50cHRyX3QpcGt0LT5vcGFxdWUgPT0KPiBQS1Rf T1BBUVVFX0ZJWF9TVUJfRFVSQVRJT04pIHsKPiArICAgICAgICByZXR1cm4gZml4X3N1Yl9kdXJh dGlvbl9oZWFydGJlYXQoaXN0LCBhdl9yZXNjYWxlX3EocGt0LT5wdHMsCj4gcGt0LT50aW1lX2Jh c2UsCj4gKwo+IEFWX1RJTUVfQkFTRV9RKSk7Cj4gKyAgICB9Cj4gKwo+ICAgICAgaWYgKCFwa3Qp IHsKPiAgICAgICAgICBmbHVzaF9wa3QgPSBhdl9wYWNrZXRfYWxsb2MoKTsKPiAgICAgICAgICBp ZiAoIWZsdXNoX3BrdCkKPiBAQCAtNDk2LDcgKzQzNyw3IEBAIHN0YXRpYyBpbnQgdHJhbnNjb2Rl X3N1YnRpdGxlcyhJbnB1dFN0cmVhbSAqaXN0LCBjb25zdAo+IEFWUGFja2V0ICpwa3QsCj4KPiAg ICAgIGlzdC0+ZnJhbWVzX2RlY29kZWQrKzsKPgo+IC0gICAgLy8gWFhYIHRoZSBxdWV1ZSBmb3Ig dHJhbnNmZXJyaW5nIGRhdGEgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQgcnVucwo+ICsgICAgLy8g WFhYIHRoZSBxdWV1ZSBmb3IgdHJhbnNmZXJyaW5nIGRhdGEgdG8gY29uc3VtZXJzIHJ1bnMKPiAg ICAgIC8vIG9uIEFWRnJhbWVzLCBzbyB3ZSB3cmFwIEFWU3VidGl0bGUgaW4gYW4gQVZCdWZmZXJS ZWYgYW5kIHB1dCB0aGF0Cj4gICAgICAvLyBpbnNpZGUgdGhlIGZyYW1lCj4gICAgICAvLyBldmVu dHVhbGx5LCBzdWJ0aXRsZXMgc2hvdWxkIGJlIHN3aXRjaGVkIHRvIHVzZSBBVkZyYW1lcyBuYXRp dmVseQo+IEBAIC01MDksMjYgKzQ1MCw3IEBAIHN0YXRpYyBpbnQgdHJhbnNjb2RlX3N1YnRpdGxl cyhJbnB1dFN0cmVhbSAqaXN0LAo+IGNvbnN0IEFWUGFja2V0ICpwa3QsCj4gICAgICBmcmFtZS0+ d2lkdGggID0gaXN0LT5kZWNfY3R4LT53aWR0aDsKPiAgICAgIGZyYW1lLT5oZWlnaHQgPSBpc3Qt PmRlY19jdHgtPmhlaWdodDsKPgo+IC0gICAgcmV0ID0gdHFfc2VuZChkLT5xdWV1ZV9vdXQsIDAs IGZyYW1lKTsKPiAtICAgIGlmIChyZXQgPCAwKQo+IC0gICAgICAgIGF2X2ZyYW1lX3VucmVmKGZy YW1lKTsKPiAtCj4gLSAgICByZXR1cm4gcmV0Owo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHNlbmRf ZmlsdGVyX2VvZihJbnB1dFN0cmVhbSAqaXN0KQo+IC17Cj4gLSAgICBEZWNvZGVyICpkID0gaXN0 LT5kZWNvZGVyOwo+IC0gICAgaW50IGksIHJldDsKPiAtCj4gLSAgICBmb3IgKGkgPSAwOyBpIDwg aXN0LT5uYl9maWx0ZXJzOyBpKyspIHsKPiAtICAgICAgICBpbnQ2NF90IGVuZF9wdHMgPSBkLT5s YXN0X2ZyYW1lX3B0cyA9PSBBVl9OT1BUU19WQUxVRSA/Cj4gQVZfTk9QVFNfVkFMVUUgOgo+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgIGQtPmxhc3RfZnJhbWVfcHRzICsgZC0+bGFzdF9mcmFt ZV9kdXJhdGlvbl9lc3Q7Cj4gLSAgICAgICAgcmV0ID0gaWZpbHRlcl9zZW5kX2VvZihpc3QtPmZp bHRlcnNbaV0sIGVuZF9wdHMsCj4gZC0+bGFzdF9mcmFtZV90Yik7Cj4gLSAgICAgICAgaWYgKHJl dCA8IDApCj4gLSAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICB9Cj4gLSAgICByZXR1cm4g MDsKPiArICAgIHJldHVybiBwcm9jZXNzX3N1YnRpdGxlKGlzdCwgZnJhbWUpOwo+ICB9Cj4KPiAg c3RhdGljIGludCBwYWNrZXRfZGVjb2RlKElucHV0U3RyZWFtICppc3QsIEFWUGFja2V0ICpwa3Qs IEFWRnJhbWUgKmZyYW1lKQo+IEBAIC02MzUsOSArNTU3LDExIEBAIHN0YXRpYyBpbnQgcGFja2V0 X2RlY29kZShJbnB1dFN0cmVhbSAqaXN0LCBBVlBhY2tldAo+ICpwa3QsIEFWRnJhbWUgKmZyYW1l KQo+Cj4gICAgICAgICAgaXN0LT5mcmFtZXNfZGVjb2RlZCsrOwo+Cj4gLSAgICAgICAgcmV0ID0g dHFfc2VuZChkLT5xdWV1ZV9vdXQsIDAsIGZyYW1lKTsKPiAtICAgICAgICBpZiAocmV0IDwgMCkK PiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArICAgICAgICByZXQgPSBzY2hfZGVjX3NlbmQo ZC0+c2NoLCBkLT5zY2hfaWR4LCBmcmFtZSk7Cj4gKyAgICAgICAgaWYgKHJldCA8IDApIHsKPiAr ICAgICAgICAgICAgYXZfZnJhbWVfdW5yZWYoZnJhbWUpOwo+ICsgICAgICAgICAgICByZXR1cm4g cmV0ID09IEFWRVJST1JfRU9GID8gQVZFUlJPUl9FWElUIDogcmV0Owo+ICsgICAgICAgIH0KPiAg ICAgIH0KPiAgfQo+Cj4gQEAgLTY3OSw3ICs2MDMsNiBAQCBmYWlsOgo+ICB2b2lkICpkZWNvZGVy X3RocmVhZCh2b2lkICphcmcpCj4gIHsKPiAgICAgIElucHV0U3RyZWFtICppc3QgPSBhcmc7Cj4g LSAgICBJbnB1dEZpbGUgKmlmaWxlID0gaW5wdXRfZmlsZXNbaXN0LT5maWxlX2luZGV4XTsKPiAg ICAgIERlY29kZXIgICAgICAgKmQgPSBpc3QtPmRlY29kZXI7Cj4gICAgICBEZWNUaHJlYWRDb250 ZXh0IGR0Owo+ICAgICAgaW50IHJldCA9IDAsIGlucHV0X3N0YXR1cyA9IDA7Cj4gQEAgLTY5MSwx OSArNjE0LDMxIEBAIHZvaWQgKmRlY29kZXJfdGhyZWFkKHZvaWQgKmFyZykKPiAgICAgIGRlY190 aHJlYWRfc2V0X25hbWUoaXN0KTsKPgo+ICAgICAgd2hpbGUgKCFpbnB1dF9zdGF0dXMpIHsKPiAt ICAgICAgICBpbnQgZHVtbXksIGZsdXNoX2J1ZmZlcnM7Cj4gKyAgICAgICAgaW50IGZsdXNoX2J1 ZmZlcnMsIGhhdmVfZGF0YTsKPgo+IC0gICAgICAgIGlucHV0X3N0YXR1cyA9IHRxX3JlY2VpdmUo ZC0+cXVldWVfaW4sICZkdW1teSwgZHQucGt0KTsKPiAtICAgICAgICBmbHVzaF9idWZmZXJzID0g aW5wdXRfc3RhdHVzID49IDAgJiYgIWR0LnBrdC0+YnVmOwo+IC0gICAgICAgIGlmICghZHQucGt0 LT5idWYpCj4gKyAgICAgICAgaW5wdXRfc3RhdHVzICA9IHNjaF9kZWNfcmVjZWl2ZShkLT5zY2gs IGQtPnNjaF9pZHgsIGR0LnBrdCk7Cj4gKyAgICAgICAgaGF2ZV9kYXRhICAgICA9IGlucHV0X3N0 YXR1cyA+PSAwICYmCj4gKyAgICAgICAgICAgIChkdC5wa3QtPmJ1ZiB8fCBkdC5wa3QtPnNpZGVf ZGF0YV9lbGVtcyB8fAo+ICsgICAgICAgICAgICAgKGludHB0cl90KWR0LnBrdC0+b3BhcXVlID09 IFBLVF9PUEFRVUVfU1VCX0hFQVJUQkVBVCB8fAo+ICsgICAgICAgICAgICAgKGludHB0cl90KWR0 LnBrdC0+b3BhcXVlID09IFBLVF9PUEFRVUVfRklYX1NVQl9EVVJBVElPTik7Cj4gKyAgICAgICAg Zmx1c2hfYnVmZmVycyA9IGlucHV0X3N0YXR1cyA+PSAwICYmICFoYXZlX2RhdGE7Cj4gKyAgICAg ICAgaWYgKCFoYXZlX2RhdGEpCj4gICAgICAgICAgICAgIGF2X2xvZyhpc3QsIEFWX0xPR19WRVJC T1NFLCAiRGVjb2RlciB0aHJlYWQgcmVjZWl2ZWQgJXMKPiBwYWNrZXRcbiIsCj4gICAgICAgICAg ICAgICAgICAgICBmbHVzaF9idWZmZXJzID8gImZsdXNoIiA6ICJFT0YiKTsKPgo+IC0gICAgICAg IHJldCA9IHBhY2tldF9kZWNvZGUoaXN0LCBkdC5wa3QtPmJ1ZiA/IGR0LnBrdCA6IE5VTEwsIGR0 LmZyYW1lKTsKPiArICAgICAgICByZXQgPSBwYWNrZXRfZGVjb2RlKGlzdCwgaGF2ZV9kYXRhID8g ZHQucGt0IDogTlVMTCwgZHQuZnJhbWUpOwo+Cj4gICAgICAgICAgYXZfcGFja2V0X3VucmVmKGR0 LnBrdCk7Cj4gICAgICAgICAgYXZfZnJhbWVfdW5yZWYoZHQuZnJhbWUpOwo+Cj4gKyAgICAgICAg Ly8gQVZFUlJPUl9FT0YgIC0gRU9GIGZyb20gdGhlIGRlY29kZXIKPiArICAgICAgICAvLyBBVkVS Uk9SX0VYSVQgLSBFT0YgZnJvbSB0aGUgc2NoZWR1bGVyCj4gKyAgICAgICAgLy8gd2UgdHJlYXQg dGhlbSBkaWZmZXJlbnRseSB3aGVuIGZsdXNoaW5nCj4gKyAgICAgICAgaWYgKHJldCA9PSBBVkVS Uk9SX0VYSVQpIHsKPiArICAgICAgICAgICAgcmV0ID0gQVZFUlJPUl9FT0Y7Cj4gKyAgICAgICAg ICAgIGZsdXNoX2J1ZmZlcnMgPSAwOwo+ICsgICAgICAgIH0KPiArCj4gICAgICAgICAgaWYgKHJl dCA9PSBBVkVSUk9SX0VPRikgewo+ICAgICAgICAgICAgICBhdl9sb2coaXN0LCBBVl9MT0dfVkVS Qk9TRSwgIkRlY29kZXIgcmV0dXJuZWQgRU9GLCAlc1xuIiwKPiAgICAgICAgICAgICAgICAgICAg IGZsdXNoX2J1ZmZlcnMgPyAicmVzZXR0aW5nIiA6ICJmaW5pc2hpbmciKTsKPiBAQCAtNzExLDEx ICs2NDYsMTAgQEAgdm9pZCAqZGVjb2Rlcl90aHJlYWQodm9pZCAqYXJnKQo+ICAgICAgICAgICAg ICBpZiAoIWZsdXNoX2J1ZmZlcnMpCj4gICAgICAgICAgICAgICAgICBicmVhazsKPgo+IC0gICAg ICAgICAgICAvKiByZXBvcnQgbGFzdCBmcmFtZSBkdXJhdGlvbiB0byB0aGUgZGVtdXhlciB0aHJl YWQgKi8KPiArICAgICAgICAgICAgLyogcmVwb3J0IGxhc3QgZnJhbWUgZHVyYXRpb24gdG8gdGhl IHNjaGVkdWxlciAqLwo+ICAgICAgICAgICAgICBpZiAoaXN0LT5kZWMtPnR5cGUgPT0gQVZNRURJ QV9UWVBFX0FVRElPKSB7Cj4gLSAgICAgICAgICAgICAgICBUaW1lc3RhbXAgdHMgPSB7IC50cyA9 IGQtPmxhc3RfZnJhbWVfcHRzICsKPiBkLT5sYXN0X2ZyYW1lX2R1cmF0aW9uX2VzdCwKPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRiID0gZC0+bGFzdF9mcmFtZV90YiB9Owo+ IC0gICAgICAgICAgICAgICAgYXZfdGhyZWFkX21lc3NhZ2VfcXVldWVfc2VuZChpZmlsZS0+YXVk aW9fdHNfcXVldWUsICZ0cywKPiAwKTsKPiArICAgICAgICAgICAgICAgIGR0LnBrdC0+cHRzICAg ICAgID0gZC0+bGFzdF9mcmFtZV9wdHMgKwo+IGQtPmxhc3RfZnJhbWVfZHVyYXRpb25fZXN0Owo+ ICsgICAgICAgICAgICAgICAgZHQucGt0LT50aW1lX2Jhc2UgPSBkLT5sYXN0X2ZyYW1lX3RiOwo+ ICAgICAgICAgICAgICB9Cj4KPiAgICAgICAgICAgICAgYXZjb2RlY19mbHVzaF9idWZmZXJzKGlz dC0+ZGVjX2N0eCk7Cj4gQEAgLTcyNCwxNDkgKzY1OCw0NyBAQCB2b2lkICpkZWNvZGVyX3RocmVh ZCh2b2lkICphcmcpCj4gICAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOwo+ICAg ICAgICAgICAgICBicmVhazsKPiAgICAgICAgICB9Cj4gLQo+IC0gICAgICAgIC8vIHNpZ25hbCB0 byB0aGUgY29uc3VtZXIgdGhyZWFkIHRoYXQgdGhlIGVudGlyZSBwYWNrZXQgd2FzCj4gcHJvY2Vz c2VkCj4gLSAgICAgICAgcmV0ID0gdHFfc2VuZChkLT5xdWV1ZV9vdXQsIDAsIGR0LmZyYW1lKTsK PiAtICAgICAgICBpZiAocmV0IDwgMCkgewo+IC0gICAgICAgICAgICBpZiAocmV0ICE9IEFWRVJS T1JfRU9GKQo+IC0gICAgICAgICAgICAgICAgYXZfbG9nKGlzdCwgQVZfTE9HX0VSUk9SLCAiRXJy b3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZQo+IG1haW4gdGhyZWFkXG4iKTsKPiAtICAgICAgICAg ICAgYnJlYWs7Cj4gLSAgICAgICAgfQo+ICAgICAgfQo+Cj4gICAgICAvLyBFT0YgaXMgbm9ybWFs IHRocmVhZCB0ZXJtaW5hdGlvbgo+ICAgICAgaWYgKHJldCA9PSBBVkVSUk9SX0VPRikKPiAgICAg ICAgICByZXQgPSAwOwo+Cj4gKyAgICAvLyBvbiBzdWNjZXNzIHNlbmQgRU9GIHRpbWVzdGFtcCB0 byBvdXIgZG93bnN0cmVhbXMKPiArICAgIGlmIChyZXQgPj0gMCkgewo+ICsgICAgICAgIGZsb2F0 IGVycl9yYXRlOwo+ICsKPiArICAgICAgICBhdl9mcmFtZV91bnJlZihkdC5mcmFtZSk7Cj4gKwo+ ICsgICAgICAgIGR0LmZyYW1lLT5vcGFxdWUgICAgPSAodm9pZCopKGludHB0cl90KUZSQU1FX09Q QVFVRV9FT0Y7Cj4gKyAgICAgICAgZHQuZnJhbWUtPnB0cyAgICAgICA9IGQtPmxhc3RfZnJhbWVf cHRzID09IEFWX05PUFRTX1ZBTFVFID8KPiBBVl9OT1BUU19WQUxVRSA6Cj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGQtPmxhc3RfZnJhbWVfcHRzICsKPiBkLT5sYXN0X2ZyYW1lX2R1 cmF0aW9uX2VzdDsKPiArICAgICAgICBkdC5mcmFtZS0+dGltZV9iYXNlID0gZC0+bGFzdF9mcmFt ZV90YjsKPiArCj4gKyAgICAgICAgcmV0ID0gc2NoX2RlY19zZW5kKGQtPnNjaCwgZC0+c2NoX2lk eCwgZHQuZnJhbWUpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwICYmIHJldCAhPSBBVkVSUk9SX0VP Rikgewo+ICsgICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0ZBVEFMLAo+ICsgICAgICAg ICAgICAgICAgICAgIkVycm9yIHNpZ25hbGxpbmcgRU9GIHRpbWVzdGFtcDogJXNcbiIsCj4gYXZf ZXJyMnN0cihyZXQpKTsKPiArICAgICAgICAgICAgZ290byBmaW5pc2g7Cj4gKyAgICAgICAgfQo+ ICsgICAgICAgIHJldCA9IDA7Cj4gKwo+ICsgICAgICAgIGVycl9yYXRlID0gKGlzdC0+ZnJhbWVz X2RlY29kZWQgfHwgaXN0LT5kZWNvZGVfZXJyb3JzKSA/Cj4gKyAgICAgICAgICAgICAgICAgICBp c3QtPmRlY29kZV9lcnJvcnMgLyAoaXN0LT5mcmFtZXNfZGVjb2RlZCArCj4gaXN0LT5kZWNvZGVf ZXJyb3JzKSA6IDAuZjsKPiArICAgICAgICBpZiAoZXJyX3JhdGUgPiBtYXhfZXJyb3JfcmF0ZSkg ewo+ICsgICAgICAgICAgICBhdl9sb2coaXN0LCBBVl9MT0dfRkFUQUwsICJEZWNvZGUgZXJyb3Ig cmF0ZSAlZyBleGNlZWRzCj4gbWF4aW11bSAlZ1xuIiwKPiArICAgICAgICAgICAgICAgICAgIGVy cl9yYXRlLCBtYXhfZXJyb3JfcmF0ZSk7Cj4gKyAgICAgICAgICAgIHJldCA9IEZGTVBFR19FUlJP Ul9SQVRFX0VYQ0VFREVEOwo+ICsgICAgICAgIH0gZWxzZSBpZiAoZXJyX3JhdGUpCj4gKyAgICAg ICAgICAgIGF2X2xvZyhpc3QsIEFWX0xPR19WRVJCT1NFLCAiRGVjb2RlIGVycm9yIHJhdGUgJWdc biIsCj4gZXJyX3JhdGUpOwo+ICsgICAgfQo+ICsKPiAgZmluaXNoOgo+IC0gICAgdHFfcmVjZWl2 ZV9maW5pc2goZC0+cXVldWVfaW4sICAwKTsKPiAtICAgIHRxX3NlbmRfZmluaXNoICAgKGQtPnF1 ZXVlX291dCwgMCk7Cj4gLQo+IC0gICAgLy8gbWFrZSBzdXJlIHRoZSBkZW11eGVyIGRvZXMgbm90 IGdldCBzdHVjayB3YWl0aW5nIGZvciBhdWRpbwo+IGR1cmF0aW9ucwo+IC0gICAgLy8gdGhhdCB3 aWxsIG5ldmVyIGFycml2ZQo+IC0gICAgaWYgKGlmaWxlLT5hdWRpb190c19xdWV1ZSAmJiBpc3Qt PmRlYy0+dHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8pCj4gLSAgICAgICAgYXZfdGhyZWFkX21l c3NhZ2VfcXVldWVfc2V0X2Vycl9yZWN2KGlmaWxlLT5hdWRpb190c19xdWV1ZSwKPiBBVkVSUk9S X0VPRik7Cj4gLQo+ICAgICAgZGVjX3RocmVhZF91bmluaXQoJmR0KTsKPgo+IC0gICAgYXZfbG9n KGlzdCwgQVZfTE9HX1ZFUkJPU0UsICJUZXJtaW5hdGluZyBkZWNvZGVyIHRocmVhZFxuIik7Cj4g LQo+ICAgICAgcmV0dXJuICh2b2lkKikoaW50cHRyX3QpcmV0Owo+ICB9Cj4KPiAtaW50IGRlY19w YWNrZXQoSW5wdXRTdHJlYW0gKmlzdCwgY29uc3QgQVZQYWNrZXQgKnBrdCwgaW50IG5vX2VvZikK PiAtewo+IC0gICAgRGVjb2RlciAqZCA9IGlzdC0+ZGVjb2RlcjsKPiAtICAgIGludCByZXQgPSAw LCB0aHJlYWRfcmV0Owo+IC0KPiAtICAgIC8vIHRocmVhZCBhbHJlYWR5IGpvaW5lZAo+IC0gICAg aWYgKCFkLT5xdWV1ZV9pbikKPiAtICAgICAgICByZXR1cm4gQVZFUlJPUl9FT0Y7Cj4gLQo+IC0g ICAgLy8gc2VuZCB0aGUgcGFja2V0L2ZsdXNoIHJlcXVlc3QvRU9GIHRvIHRoZSBkZWNvZGVyIHRo cmVhZAo+IC0gICAgaWYgKHBrdCB8fCBub19lb2YpIHsKPiAtICAgICAgICBhdl9wYWNrZXRfdW5y ZWYoZC0+cGt0KTsKPiAtCj4gLSAgICAgICAgaWYgKHBrdCkgewo+IC0gICAgICAgICAgICByZXQg PSBhdl9wYWNrZXRfcmVmKGQtPnBrdCwgcGt0KTsKPiAtICAgICAgICAgICAgaWYgKHJldCA8IDAp Cj4gLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKPiAtICAgICAgICB9Cj4gLQo+IC0gICAg ICAgIHJldCA9IHRxX3NlbmQoZC0+cXVldWVfaW4sIDAsIGQtPnBrdCk7Cj4gLSAgICAgICAgaWYg KHJldCA8IDApCj4gLSAgICAgICAgICAgIGdvdG8gZmluaXNoOwo+IC0gICAgfSBlbHNlCj4gLSAg ICAgICAgdHFfc2VuZF9maW5pc2goZC0+cXVldWVfaW4sIDApOwo+IC0KPiAtICAgIC8vIHJldHJp ZXZlIGFsbCBkZWNvZGVkIGRhdGEgZm9yIHRoZSBwYWNrZXQKPiAtICAgIHdoaWxlICgxKSB7Cj4g LSAgICAgICAgaW50IGR1bW15Owo+IC0KPiAtICAgICAgICByZXQgPSB0cV9yZWNlaXZlKGQtPnF1 ZXVlX291dCwgJmR1bW15LCBkLT5mcmFtZSk7Cj4gLSAgICAgICAgaWYgKHJldCA8IDApCj4gLSAg ICAgICAgICAgIGdvdG8gZmluaXNoOwo+IC0KPiAtICAgICAgICAvLyBwYWNrZXQgZnVsbHkgcHJv Y2Vzc2VkCj4gLSAgICAgICAgaWYgKCFkLT5mcmFtZS0+YnVmWzBdKQo+IC0gICAgICAgICAgICBy ZXR1cm4gMDsKPiAtCj4gLSAgICAgICAgLy8gcHJvY2VzcyB0aGUgZGVjb2RlZCBmcmFtZQo+IC0g ICAgICAgIGlmIChpc3QtPmRlYy0+dHlwZSA9PSBBVk1FRElBX1RZUEVfU1VCVElUTEUpIHsKPiAt ICAgICAgICAgICAgcmV0ID0gcHJvY2Vzc19zdWJ0aXRsZShpc3QsIGQtPmZyYW1lKTsKPiAtICAg ICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAgICByZXQgPSBzZW5kX2ZyYW1lX3RvX2ZpbHRlcnMo aXN0LCBkLT5mcmFtZSk7Cj4gLSAgICAgICAgfQo+IC0gICAgICAgIGF2X2ZyYW1lX3VucmVmKGQt PmZyYW1lKTsKPiAtICAgICAgICBpZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgZ290byBmaW5p c2g7Cj4gLSAgICB9Cj4gLQo+IC1maW5pc2g6Cj4gLSAgICB0aHJlYWRfcmV0ID0gZGVjX3RocmVh ZF9zdG9wKGQpOwo+IC0gICAgaWYgKHRocmVhZF9yZXQgPCAwKSB7Cj4gLSAgICAgICAgYXZfbG9n KGlzdCwgQVZfTE9HX0VSUk9SLCAiRGVjb2RlciB0aHJlYWQgcmV0dXJuZWQgZXJyb3I6ICVzXG4i LAo+IC0gICAgICAgICAgICAgICBhdl9lcnIyc3RyKHRocmVhZF9yZXQpKTsKPiAtICAgICAgICBy ZXQgPSBlcnJfbWVyZ2UocmV0LCB0aHJlYWRfcmV0KTsKPiAtICAgIH0KPiAtICAgIC8vIG5vbi1F T0YgZXJyb3JzIGhlcmUgYXJlIGFsbCBmYXRhbAo+IC0gICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9 IEFWRVJST1JfRU9GKQo+IC0gICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgLy8gc2lnbmFs IEVPRiB0byBvdXIgZG93bnN0cmVhbXMKPiAtICAgIHJldCA9IHNlbmRfZmlsdGVyX2VvZihpc3Qp Owo+IC0gICAgaWYgKHJldCA8IDApIHsKPiAtICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0ZB VEFMLCAiRXJyb3IgbWFya2luZyBmaWx0ZXJzIGFzIGZpbmlzaGVkXG4iKTsKPiAtICAgICAgICBy ZXR1cm4gcmV0Owo+IC0gICAgfQo+IC0KPiAtICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiAtfQo+ IC0KPiAtc3RhdGljIGludCBkZWNfdGhyZWFkX3N0YXJ0KElucHV0U3RyZWFtICppc3QpCj4gLXsK PiAtICAgIERlY29kZXIgKmQgPSBpc3QtPmRlY29kZXI7Cj4gLSAgICBPYmpQb29sICpvcDsKPiAt ICAgIGludCByZXQgPSAwOwo+IC0KPiAtICAgIG9wID0gb2JqcG9vbF9hbGxvY19wYWNrZXRzKCk7 Cj4gLSAgICBpZiAoIW9wKQo+IC0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gLQo+ IC0gICAgZC0+cXVldWVfaW4gPSB0cV9hbGxvYygxLCAxLCBvcCwgcGt0X21vdmUpOwo+IC0gICAg aWYgKCFkLT5xdWV1ZV9pbikgewo+IC0gICAgICAgIG9ianBvb2xfZnJlZSgmb3ApOwo+IC0gICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gLSAgICB9Cj4gLQo+IC0gICAgb3AgPSBvYmpw b29sX2FsbG9jX2ZyYW1lcygpOwo+IC0gICAgaWYgKCFvcCkKPiAtICAgICAgICBnb3RvIGZhaWw7 Cj4gLQo+IC0gICAgZC0+cXVldWVfb3V0ID0gdHFfYWxsb2MoMSwgNCwgb3AsIGZyYW1lX21vdmUp Owo+IC0gICAgaWYgKCFkLT5xdWV1ZV9vdXQpIHsKPiAtICAgICAgICBvYmpwb29sX2ZyZWUoJm9w KTsKPiAtICAgICAgICBnb3RvIGZhaWw7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0ID0gcHRocmVh ZF9jcmVhdGUoJmQtPnRocmVhZCwgTlVMTCwgZGVjb2Rlcl90aHJlYWQsIGlzdCk7Cj4gLSAgICBp ZiAocmV0KSB7Cj4gLSAgICAgICAgcmV0ID0gQVZFUlJPUihyZXQpOwo+IC0gICAgICAgIGF2X2xv Zyhpc3QsIEFWX0xPR19FUlJPUiwgInB0aHJlYWRfY3JlYXRlKCkgZmFpbGVkOiAlc1xuIiwKPiAt ICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKPiAtICAgICAgICBnb3RvIGZhaWw7Cj4g LSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIDA7Cj4gLWZhaWw6Cj4gLSAgICBpZiAocmV0ID49IDAp Cj4gLSAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOwo+IC0KPiAtICAgIHRxX2ZyZWUoJmQt PnF1ZXVlX2luKTsKPiAtICAgIHRxX2ZyZWUoJmQtPnF1ZXVlX291dCk7Cj4gLSAgICByZXR1cm4g cmV0Owo+IC19Cj4gLQo+ICBzdGF0aWMgZW51bSBBVlBpeGVsRm9ybWF0IGdldF9mb3JtYXQoQVZD b2RlY0NvbnRleHQgKnMsIGNvbnN0IGVudW0KPiBBVlBpeGVsRm9ybWF0ICpwaXhfZm10cykKPiAg ewo+ICAgICAgSW5wdXRTdHJlYW0gKmlzdCA9IHMtPm9wYXF1ZTsKPiBAQCAtMTExOCwxMiArOTUw LDUgQEAgaW50IGRlY19vcGVuKElucHV0U3RyZWFtICppc3QsIFNjaGVkdWxlciAqc2NoLAo+IHVu c2lnbmVkIHNjaF9pZHgpCj4gICAgICBpZiAocmV0IDwgMCkKPiAgICAgICAgICByZXR1cm4gcmV0 Owo+Cj4gLSAgICByZXQgPSBkZWNfdGhyZWFkX3N0YXJ0KGlzdCk7Cj4gLSAgICBpZiAocmV0IDwg MCkgewo+IC0gICAgICAgIGF2X2xvZyhpc3QsIEFWX0xPR19FUlJPUiwgIkVycm9yIHN0YXJ0aW5n IGRlY29kZXIgdGhyZWFkOiAlc1xuIiwKPiAtICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQp KTsKPiAtICAgICAgICByZXR1cm4gcmV0Owo+IC0gICAgfQo+IC0KPiAgICAgIHJldHVybiAwOwo+ ICB9Cj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMvZmZtcGVnX2RlbXV4LmMgYi9mZnRvb2xzL2ZmbXBl Z19kZW11eC5jCj4gaW5kZXggMjIzNGRiZTA3Ni4uOTFjZDdhMTEyNSAxMDA2NDQKPiAtLS0gYS9m ZnRvb2xzL2ZmbXBlZ19kZW11eC5jCj4gKysrIGIvZmZ0b29scy9mZm1wZWdfZGVtdXguYwo+IEBA IC0yMiw4ICsyMiw2IEBACj4gICNpbmNsdWRlICJmZm1wZWcuaCIKPiAgI2luY2x1ZGUgImZmbXBl Z19zY2hlZC5oIgo+ICAjaW5jbHVkZSAiZmZtcGVnX3V0aWxzLmgiCj4gLSNpbmNsdWRlICJvYmpw b29sLmgiCj4gLSNpbmNsdWRlICJ0aHJlYWRfcXVldWUuaCIKPgo+ICAjaW5jbHVkZSAibGliYXZ1 dGlsL2F2YXNzZXJ0LmgiCj4gICNpbmNsdWRlICJsaWJhdnV0aWwvYXZzdHJpbmcuaCIKPiBAQCAt MzUsNyArMzMsNiBAQAo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKPiAgI2luY2x1 ZGUgImxpYmF2dXRpbC90aW1lLmgiCj4gICNpbmNsdWRlICJsaWJhdnV0aWwvdGltZXN0YW1wLmgi Cj4gLSNpbmNsdWRlICJsaWJhdnV0aWwvdGhyZWFkLmgiCj4KPiAgI2luY2x1ZGUgImxpYmF2Y29k ZWMvcGFja2V0LmgiCj4KPiBAQCAtNjYsNyArNjMsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgRGVtdXhT dHJlYW0gewo+Cj4gICAgICBkb3VibGUgdHNfc2NhbGU7Cj4KPiArICAgIC8vIHNjaGVkdWxlciBy ZXR1cm5lZCBFT0YgZm9yIHRoaXMgc3RyZWFtCj4gKyAgICBpbnQgZmluaXNoZWQ7Cj4gKwo+ICAg ICAgaW50IHN0cmVhbWNvcHlfbmVlZGVkOwo+ICsgICAgaW50IGhhdmVfc3ViMnZpZGVvOwo+Cj4g ICAgICBpbnQgd3JhcF9jb3JyZWN0aW9uX2RvbmU7Cj4gICAgICBpbnQgc2F3X2ZpcnN0X3RzOwo+ IEBAIC0xMDEsNiArMTAyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRGVtdXhlciB7Cj4KPiAgICAgIC8q IG51bWJlciBvZiB0aW1lcyBpbnB1dCBzdHJlYW0gc2hvdWxkIGJlIGxvb3BlZCAqLwo+ICAgICAg aW50IGxvb3A7Cj4gKyAgICBpbnQgaGF2ZV9hdWRpb19kZWM7Cj4gICAgICAvKiBkdXJhdGlvbiBv ZiB0aGUgbG9vcGVkIHNlZ21lbnQgb2YgdGhlIGlucHV0IGZpbGUgKi8KPiAgICAgIFRpbWVzdGFt cCBkdXJhdGlvbjsKPiAgICAgIC8qIHB0cyB3aXRoIHRoZSBzbWFsbGVzdC9sYXJnZXN0IHZhbHVl cyBldmVyIHNlZW4gKi8KPiBAQCAtMTEzLDExICsxMTUsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgRGVt dXhlciB7Cj4gICAgICBkb3VibGUgcmVhZHJhdGVfaW5pdGlhbF9idXJzdDsKPgo+ICAgICAgU2No ZWR1bGVyICAgICAgICAgICAgKnNjaDsKPiAtICAgIFRocmVhZFF1ZXVlICAgICAgICAgICp0aHJl YWRfcXVldWU7Cj4gLSAgICBpbnQgICAgICAgICAgICAgICAgICAgdGhyZWFkX3F1ZXVlX3NpemU7 Cj4gLSAgICBwdGhyZWFkX3QgICAgICAgICAgICAgdGhyZWFkOwo+ICsKPiArICAgIEFWUGFja2V0 ICAgICAgICAgICAgICpwa3RfaGVhcnRiZWF0Owo+Cj4gICAgICBpbnQgICAgICAgICAgICAgICAg ICAgcmVhZF9zdGFydGVkOwo+ICsgICAgaW50ICAgICAgICAgICAgICAgICAgIG5iX3N0cmVhbXNf dXNlZDsKPiArICAgIGludCAgICAgICAgICAgICAgICAgICBuYl9zdHJlYW1zX2ZpbmlzaGVkOwo+ ICB9IERlbXV4ZXI7Cj4KPiAgc3RhdGljIERlbXV4U3RyZWFtICpkc19mcm9tX2lzdChJbnB1dFN0 cmVhbSAqaXN0KQo+IEBAIC0xNTMsNyArMTU2LDcgQEAgc3RhdGljIHZvaWQgcmVwb3J0X25ld19z dHJlYW0oRGVtdXhlciAqZCwgY29uc3QKPiBBVlBhY2tldCAqcGt0KQo+ICAgICAgZC0+bmJfc3Ry ZWFtc193YXJuID0gcGt0LT5zdHJlYW1faW5kZXggKyAxOwo+ICB9Cj4KPiAtc3RhdGljIGludCBz ZWVrX3RvX3N0YXJ0KERlbXV4ZXIgKmQpCj4gK3N0YXRpYyBpbnQgc2Vla190b19zdGFydChEZW11 eGVyICpkLCBUaW1lc3RhbXAgZW5kX3B0cykKPiAgewo+ICAgICAgSW5wdXRGaWxlICAgICppZmls ZSA9ICZkLT5mOwo+ICAgICAgQVZGb3JtYXRDb250ZXh0ICppcyA9IGlmaWxlLT5jdHg7Cj4gQEAg LTE2MywyMSArMTY2LDEwIEBAIHN0YXRpYyBpbnQgc2Vla190b19zdGFydChEZW11eGVyICpkKQo+ ICAgICAgaWYgKHJldCA8IDApCj4gICAgICAgICAgcmV0dXJuIHJldDsKPgo+IC0gICAgaWYgKGlm aWxlLT5hdWRpb190c19xdWV1ZV9zaXplKSB7Cj4gLSAgICAgICAgaW50IGdvdF90cyA9IDA7Cj4g LQo+IC0gICAgICAgIHdoaWxlIChnb3RfdHMgPCBpZmlsZS0+YXVkaW9fdHNfcXVldWVfc2l6ZSkg ewo+IC0gICAgICAgICAgICBUaW1lc3RhbXAgdHM7Cj4gLSAgICAgICAgICAgIHJldCA9IGF2X3Ro cmVhZF9tZXNzYWdlX3F1ZXVlX3JlY3YoaWZpbGUtPmF1ZGlvX3RzX3F1ZXVlLAo+ICZ0cywgMCk7 Cj4gLSAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+IC0gICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiAtICAgICAgICAgICAgZ290X3RzKys7Cj4gLQo+IC0gICAgICAgICAgICBpZiAoZC0+bWF4 X3B0cy50cyA9PSBBVl9OT1BUU19WQUxVRSB8fAo+IC0gICAgICAgICAgICAgICAgYXZfY29tcGFy ZV90cyhkLT5tYXhfcHRzLnRzLCBkLT5tYXhfcHRzLnRiLCB0cy50cywgdHMudGIpCj4gPCAwKQo+ IC0gICAgICAgICAgICAgICAgZC0+bWF4X3B0cyA9IHRzOwo+IC0gICAgICAgIH0KPiAtICAgIH0K PiArICAgIGlmIChlbmRfcHRzLnRzICE9IEFWX05PUFRTX1ZBTFVFICYmCj4gKyAgICAgICAgKGQt Pm1heF9wdHMudHMgPT0gQVZfTk9QVFNfVkFMVUUgfHwKPiArICAgICAgICAgYXZfY29tcGFyZV90 cyhkLT5tYXhfcHRzLnRzLCBkLT5tYXhfcHRzLnRiLCBlbmRfcHRzLnRzLAo+IGVuZF9wdHMudGIp IDwgMCkpCj4gKyAgICAgICAgZC0+bWF4X3B0cyA9IGVuZF9wdHM7Cj4KPiAgICAgIGlmIChkLT5t YXhfcHRzLnRzICE9IEFWX05PUFRTX1ZBTFVFKSB7Cj4gICAgICAgICAgaW50NjRfdCBtaW5fcHRz ID0gZC0+bWluX3B0cy50cyA9PSBBVl9OT1BUU19WQUxVRSA/IDAgOgo+IGQtPm1pbl9wdHMudHM7 Cj4gQEAgLTQwNCw3ICszOTYsNyBAQCBzdGF0aWMgaW50IHRzX2ZpeHVwKERlbXV4ZXIgKmQsIEFW UGFja2V0ICpwa3QpCj4gICAgICBkdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcShkLT5kdXJhdGlvbi50 cywgZC0+ZHVyYXRpb24udGIsCj4gcGt0LT50aW1lX2Jhc2UpOwo+ICAgICAgaWYgKHBrdC0+cHRz ICE9IEFWX05PUFRTX1ZBTFVFKSB7Cj4gICAgICAgICAgLy8gYXVkaW8gZGVjb2RlcnMgdGFrZSBw cmVjZWRlbmNlIGZvciBlc3RpbWF0aW5nIHRvdGFsIGZpbGUKPiBkdXJhdGlvbgo+IC0gICAgICAg IGludDY0X3QgcGt0X2R1cmF0aW9uID0gaWZpbGUtPmF1ZGlvX3RzX3F1ZXVlX3NpemUgPyAwIDoK PiBwa3QtPmR1cmF0aW9uOwo+ICsgICAgICAgIGludDY0X3QgcGt0X2R1cmF0aW9uID0gZC0+aGF2 ZV9hdWRpb19kZWMgPyAwIDogcGt0LT5kdXJhdGlvbjsKPgo+ICAgICAgICAgIHBrdC0+cHRzICs9 IGR1cmF0aW9uOwo+Cj4gQEAgLTQ0MCw3ICs0MzIsNyBAQCBzdGF0aWMgaW50IHRzX2ZpeHVwKERl bXV4ZXIgKmQsIEFWUGFja2V0ICpwa3QpCj4gICAgICByZXR1cm4gMDsKPiAgfQo+Cj4gLXN0YXRp YyBpbnQgaW5wdXRfcGFja2V0X3Byb2Nlc3MoRGVtdXhlciAqZCwgQVZQYWNrZXQgKnBrdCkKPiAr c3RhdGljIGludCBpbnB1dF9wYWNrZXRfcHJvY2VzcyhEZW11eGVyICpkLCBBVlBhY2tldCAqcGt0 LCB1bnNpZ25lZAo+ICpzZW5kX2ZsYWdzKQo+ICB7Cj4gICAgICBJbnB1dEZpbGUgICAgICpmID0g JmQtPmY7Cj4gICAgICBJbnB1dFN0cmVhbSAqaXN0ID0gZi0+c3RyZWFtc1twa3QtPnN0cmVhbV9p bmRleF07Cj4gQEAgLTQ1MSw2ICs0NDMsMTYgQEAgc3RhdGljIGludCBpbnB1dF9wYWNrZXRfcHJv Y2VzcyhEZW11eGVyICpkLCBBVlBhY2tldAo+ICpwa3QpCj4gICAgICBpZiAocmV0IDwgMCkKPiAg ICAgICAgICByZXR1cm4gcmV0Owo+Cj4gKyAgICBpZiAoZi0+cmVjb3JkaW5nX3RpbWUgIT0gSU5U NjRfTUFYKSB7Cj4gKyAgICAgICAgaW50NjRfdCBzdGFydF90aW1lID0gMDsKPiArICAgICAgICBp ZiAoY29weV90cykgewo+ICsgICAgICAgICAgICBzdGFydF90aW1lICs9IGYtPnN0YXJ0X3RpbWUg IT0gQVZfTk9QVFNfVkFMVUUgPyBmLT5zdGFydF90aW1lCj4gOiAwOwo+ICsgICAgICAgICAgICBz dGFydF90aW1lICs9IHN0YXJ0X2F0X3plcm8gPyAwIDogZi0+c3RhcnRfdGltZV9lZmZlY3RpdmU7 Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmIChkcy0+ZHRzID49IGYtPnJlY29yZGluZ190aW1l ICsgc3RhcnRfdGltZSkKPiArICAgICAgICAgICAgKnNlbmRfZmxhZ3MgfD0gREVNVVhfU0VORF9T VFJFQU1DT1BZX0VPRjsKPiArICAgIH0KPiArCj4gICAgICBkcy0+ZGF0YV9zaXplICs9IHBrdC0+ c2l6ZTsKPiAgICAgIGRzLT5uYl9wYWNrZXRzKys7Cj4KPiBAQCAtNDY1LDYgKzQ2Nyw4IEBAIHN0 YXRpYyBpbnQgaW5wdXRfcGFja2V0X3Byb2Nlc3MoRGVtdXhlciAqZCwgQVZQYWNrZXQKPiAqcGt0 KQo+ICAgICAgICAgICAgICAgICBhdl90czJ0aW1lc3RyKGlucHV0X2ZpbGVzW2lzdC0+ZmlsZV9p bmRleF0tPnRzX29mZnNldCwKPiAmQVZfVElNRV9CQVNFX1EpKTsKPiAgICAgIH0KPgo+ICsgICAg cGt0LT5zdHJlYW1faW5kZXggPSBkcy0+c2NoX2lkeF9zdHJlYW07Cj4gKwo+ICAgICAgcmV0dXJu IDA7Cj4gIH0KPgo+IEBAIC00ODgsNiArNDkyLDY1IEBAIHN0YXRpYyB2b2lkIHJlYWRyYXRlX3Ns ZWVwKERlbXV4ZXIgKmQpCj4gICAgICB9Cj4gIH0KPgo+ICtzdGF0aWMgaW50IGRvX3NlbmQoRGVt dXhlciAqZCwgRGVtdXhTdHJlYW0gKmRzLCBBVlBhY2tldCAqcGt0LCB1bnNpZ25lZAo+IGZsYWdz LAo+ICsgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGt0X2Rlc2MpCj4gK3sKPiArICAg IGludCByZXQ7Cj4gKwo+ICsgICAgcmV0ID0gc2NoX2RlbXV4X3NlbmQoZC0+c2NoLCBkLT5mLmlu ZGV4LCBwa3QsIGZsYWdzKTsKPiArICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPiArICAg ICAgICBhdl9wYWNrZXRfdW5yZWYocGt0KTsKPiArCj4gKyAgICAgICAgYXZfbG9nKGRzLCBBVl9M T0dfVkVSQk9TRSwgIkFsbCBjb25zdW1lcnMgb2YgdGhpcyBzdHJlYW0gYXJlCj4gZG9uZVxuIik7 Cj4gKyAgICAgICAgZHMtPmZpbmlzaGVkID0gMTsKPiArCj4gKyAgICAgICAgaWYgKCsrZC0+bmJf c3RyZWFtc19maW5pc2hlZCA9PSBkLT5uYl9zdHJlYW1zX3VzZWQpIHsKPiArICAgICAgICAgICAg YXZfbG9nKGQsIEFWX0xPR19WRVJCT1NFLCAiQWxsIGNvbnN1bWVycyBhcmUgZG9uZVxuIik7Cj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiArICAgICAgICB9Cj4gKyAgICB9IGVs c2UgaWYgKHJldCA8IDApIHsKPiArICAgICAgICBpZiAocmV0ICE9IEFWRVJST1JfRVhJVCkKPiAr ICAgICAgICAgICAgYXZfbG9nKGQsIEFWX0xPR19FUlJPUiwKPiArICAgICAgICAgICAgICAgICAg ICJVbmFibGUgdG8gc2VuZCAlcyBwYWNrZXQgdG8gY29uc3VtZXJzOiAlc1xuIiwKPiArICAgICAg ICAgICAgICAgICAgIHBrdF9kZXNjLCBhdl9lcnIyc3RyKHJldCkpOwo+ICsgICAgICAgIHJldHVy biByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgZGVtdXhfc2VuZChEZW11eGVyICpkLCBEZW11eFN0cmVhbSAqZHMsIEFWUGFja2V0ICpwa3Qs Cj4gdW5zaWduZWQgZmxhZ3MpCj4gK3sKPiArICAgIElucHV0RmlsZSAgKmYgPSAmZC0+ZjsKPiAr ICAgIGludCByZXQ7Cj4gKwo+ICsgICAgLy8gc2VuZCBoZWFydGJlYXQgZm9yIHN1YjJ2aWRlbyBz dHJlYW1zCj4gKyAgICBpZiAoZC0+cGt0X2hlYXJ0YmVhdCAmJiBwa3QtPnB0cyAhPSBBVl9OT1BU U19WQUxVRSkgewo+ICsgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZi0+bmJfc3RyZWFtczsg aSsrKSB7Cj4gKyAgICAgICAgICAgIERlbXV4U3RyZWFtICpkczEgPSBkc19mcm9tX2lzdChmLT5z dHJlYW1zW2ldKTsKPiArCj4gKyAgICAgICAgICAgIGlmIChkczEtPmZpbmlzaGVkIHx8ICFkczEt PmhhdmVfc3ViMnZpZGVvKQo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAg ICAgICAgICBkLT5wa3RfaGVhcnRiZWF0LT5wdHMgICAgICAgICAgPSBwa3QtPnB0czsKPiArICAg ICAgICAgICAgZC0+cGt0X2hlYXJ0YmVhdC0+dGltZV9iYXNlICAgID0gcGt0LT50aW1lX2Jhc2U7 Cj4gKyAgICAgICAgICAgIGQtPnBrdF9oZWFydGJlYXQtPnN0cmVhbV9pbmRleCA9IGRzMS0+c2No X2lkeF9zdHJlYW07Cj4gKyAgICAgICAgICAgIGQtPnBrdF9oZWFydGJlYXQtPm9wYXF1ZSAgICAg ICA9Cj4gKHZvaWQqKShpbnRwdHJfdClQS1RfT1BBUVVFX1NVQl9IRUFSVEJFQVQ7Cj4gKwo+ICsg ICAgICAgICAgICByZXQgPSBkb19zZW5kKGQsIGRzMSwgZC0+cGt0X2hlYXJ0YmVhdCwgMCwgImhl YXJ0YmVhdCIpOwo+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAgICAgICAgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldCA9IGRvX3Nl bmQoZCwgZHMsIHBrdCwgZmxhZ3MsICJkZW11eGVkIik7Cj4gKyAgICBpZiAocmV0IDwgMCkKPiAr ICAgICAgICByZXR1cm4gcmV0Owo+ICsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiAg c3RhdGljIHZvaWQgZGlzY2FyZF91bnVzZWRfcHJvZ3JhbXMoSW5wdXRGaWxlICppZmlsZSkKPiAg ewo+ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpZmlsZS0+Y3R4LT5uYl9wcm9ncmFtczsgaisr KSB7Cj4gQEAgLTUyNyw5ICs1OTAsMTMgQEAgc3RhdGljIHZvaWQgKmlucHV0X3RocmVhZCh2b2lk ICphcmcpCj4KPiAgICAgIGRpc2NhcmRfdW51c2VkX3Byb2dyYW1zKGYpOwo+Cj4gKyAgICBkLT5y ZWFkX3N0YXJ0ZWQgICAgPSAxOwo+ICAgICAgZC0+d2FsbGNsb2NrX3N0YXJ0ID0gYXZfZ2V0dGlt ZV9yZWxhdGl2ZSgpOwo+Cj4gICAgICB3aGlsZSAoMSkgewo+ICsgICAgICAgIERlbXV4U3RyZWFt ICpkczsKPiArICAgICAgICB1bnNpZ25lZCBzZW5kX2ZsYWdzID0gMDsKPiArCj4gICAgICAgICAg cmV0ID0gYXZfcmVhZF9mcmFtZShmLT5jdHgsIHBrdCk7Cj4KPiAgICAgICAgICBpZiAocmV0ID09 IEFWRVJST1IoRUFHQUlOKSkgewo+IEBAIC01MzgsMTEgKzYwNSwxMyBAQCBzdGF0aWMgdm9pZCAq aW5wdXRfdGhyZWFkKHZvaWQgKmFyZykKPiAgICAgICAgICB9Cj4gICAgICAgICAgaWYgKHJldCA8 IDApIHsKPiAgICAgICAgICAgICAgaWYgKGQtPmxvb3ApIHsKPiAtICAgICAgICAgICAgICAgIC8q IHNpZ25hbCBsb29waW5nIHRvIHRoZSBjb25zdW1lciB0aHJlYWQgKi8KPiArICAgICAgICAgICAg ICAgIC8qIHNpZ25hbCBsb29waW5nIHRvIG91ciBjb25zdW1lcnMgKi8KPiAgICAgICAgICAgICAg ICAgIHBrdC0+c3RyZWFtX2luZGV4ID0gLTE7Cj4gLSAgICAgICAgICAgICAgICByZXQgPSB0cV9z ZW5kKGQtPnRocmVhZF9xdWV1ZSwgMCwgcGt0KTsKPiArCj4gKyAgICAgICAgICAgICAgICByZXQg PSBzY2hfZGVtdXhfc2VuZChkLT5zY2gsIGYtPmluZGV4LCBwa3QsIDApOwo+ICAgICAgICAgICAg ICAgICAgaWYgKHJldCA+PSAwKQo+IC0gICAgICAgICAgICAgICAgICAgIHJldCA9IHNlZWtfdG9f c3RhcnQoZCk7Cj4gKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gc2Vla190b19zdGFydChkLCAo VGltZXN0YW1wKXsgLnRzID0gcGt0LT5wdHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRiID0KPiBwa3QtPnRpbWVfYmFzZSB9KTsK PiAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkKPiAgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsKPgo+IEBAIC01NTEsOSArNjIwLDExIEBAIHN0YXRpYyB2b2lkICppbnB1dF90aHJl YWQodm9pZCAqYXJnKQo+Cj4gICAgICAgICAgICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpCj4g ICAgICAgICAgICAgICAgICBhdl9sb2coZCwgQVZfTE9HX1ZFUkJPU0UsICJFT0Ygd2hpbGUgcmVh ZGluZyBpbnB1dFxuIik7Cj4gLSAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgZWxzZSB7 Cj4gICAgICAgICAgICAgICAgICBhdl9sb2coZCwgQVZfTE9HX0VSUk9SLCAiRXJyb3IgZHVyaW5n IGRlbXV4aW5nOiAlc1xuIiwKPiAgICAgICAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJl dCkpOwo+ICsgICAgICAgICAgICAgICAgcmV0ID0gZXhpdF9vbl9lcnJvciA/IHJldCA6IDA7Cj4g KyAgICAgICAgICAgIH0KPgo+ICAgICAgICAgICAgICBicmVhazsKPiAgICAgICAgICB9Cj4gQEAg LTU2NSw4ICs2MzYsOSBAQCBzdGF0aWMgdm9pZCAqaW5wdXRfdGhyZWFkKHZvaWQgKmFyZykKPgo+ ICAgICAgICAgIC8qIHRoZSBmb2xsb3dpbmcgdGVzdCBpcyBuZWVkZWQgaW4gY2FzZSBuZXcgc3Ry ZWFtcyBhcHBlYXIKPiAgICAgICAgICAgICBkeW5hbWljYWxseSBpbiBzdHJlYW0gOiB3ZSBpZ25v cmUgdGhlbSAqLwo+IC0gICAgICAgIGlmIChwa3QtPnN0cmVhbV9pbmRleCA+PSBmLT5uYl9zdHJl YW1zIHx8Cj4gLSAgICAgICAgICAgIGYtPnN0cmVhbXNbcGt0LT5zdHJlYW1faW5kZXhdLT5kaXNj YXJkKSB7Cj4gKyAgICAgICAgZHMgPSBwa3QtPnN0cmVhbV9pbmRleCA8IGYtPm5iX3N0cmVhbXMg Pwo+ICsgICAgICAgICAgICAgZHNfZnJvbV9pc3QoZi0+c3RyZWFtc1twa3QtPnN0cmVhbV9pbmRl eF0pIDogTlVMTDsKPiArICAgICAgICBpZiAoIWRzIHx8IGRzLT5pc3QuZGlzY2FyZCB8fCBkcy0+ ZmluaXNoZWQpIHsKPiAgICAgICAgICAgICAgcmVwb3J0X25ld19zdHJlYW0oZCwgcGt0KTsKPiAg ICAgICAgICAgICAgYXZfcGFja2V0X3VucmVmKHBrdCk7Cj4gICAgICAgICAgICAgIGNvbnRpbnVl Owo+IEBAIC01ODMsMTIyICs2NTUsMjYgQEAgc3RhdGljIHZvaWQgKmlucHV0X3RocmVhZCh2b2lk ICphcmcpCj4gICAgICAgICAgICAgIH0KPiAgICAgICAgICB9Cj4KPiAtICAgICAgICByZXQgPSBp bnB1dF9wYWNrZXRfcHJvY2VzcyhkLCBwa3QpOwo+ICsgICAgICAgIHJldCA9IGlucHV0X3BhY2tl dF9wcm9jZXNzKGQsIHBrdCwgJnNlbmRfZmxhZ3MpOwo+ICAgICAgICAgIGlmIChyZXQgPCAwKQo+ ICAgICAgICAgICAgICBicmVhazsKPgo+ICAgICAgICAgIGlmIChmLT5yZWFkcmF0ZSkKPiAgICAg ICAgICAgICAgcmVhZHJhdGVfc2xlZXAoZCk7Cj4KPiAtICAgICAgICByZXQgPSB0cV9zZW5kKGQt PnRocmVhZF9xdWV1ZSwgMCwgcGt0KTsKPiAtICAgICAgICBpZiAocmV0IDwgMCkgewo+IC0gICAg ICAgICAgICBpZiAocmV0ICE9IEFWRVJST1JfRU9GKQo+IC0gICAgICAgICAgICAgICAgYXZfbG9n KGYsIEFWX0xPR19FUlJPUiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIHNl bmQgcGFja2V0IHRvIG1haW4gdGhyZWFkOiAlc1xuIiwKPiAtICAgICAgICAgICAgICAgICAgICAg ICBhdl9lcnIyc3RyKHJldCkpOwo+ICsgICAgICAgIHJldCA9IGRlbXV4X3NlbmQoZCwgZHMsIHBr dCwgc2VuZF9mbGFncyk7Cj4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gICAgICAgICAgICAgIGJy ZWFrOwo+IC0gICAgICAgIH0KPiAgICAgIH0KPgo+ICsgICAgLy8gRU9GL0VYSVQgaXMgbm9ybWFs IHRlcm1pbmF0aW9uCj4gKyAgICBpZiAocmV0ID09IEFWRVJST1JfRU9GIHx8IHJldCA9PSBBVkVS Uk9SX0VYSVQpCj4gKyAgICAgICAgcmV0ID0gMDsKPiArCj4gIGZpbmlzaDoKPiAtICAgIGF2X2Fz c2VydDAocmV0IDwgMCk7Cj4gLSAgICB0cV9zZW5kX2ZpbmlzaChkLT50aHJlYWRfcXVldWUsIDAp Owo+IC0KPiAgICAgIGF2X3BhY2tldF9mcmVlKCZwa3QpOwo+Cj4gLSAgICBhdl9sb2coZCwgQVZf TE9HX1ZFUkJPU0UsICJUZXJtaW5hdGluZyBkZW11eGVyIHRocmVhZFxuIik7Cj4gLQo+IC0gICAg cmV0dXJuIE5VTEw7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHRocmVhZF9zdG9wKERlbXV4ZXIg KmQpCj4gLXsKPiAtICAgIElucHV0RmlsZSAqZiA9ICZkLT5mOwo+IC0KPiAtICAgIGlmICghZC0+ dGhyZWFkX3F1ZXVlKQo+IC0gICAgICAgIHJldHVybjsKPiAtCj4gLSAgICB0cV9yZWNlaXZlX2Zp bmlzaChkLT50aHJlYWRfcXVldWUsIDApOwo+IC0KPiAtICAgIHB0aHJlYWRfam9pbihkLT50aHJl YWQsIE5VTEwpOwo+IC0KPiAtICAgIHRxX2ZyZWUoJmQtPnRocmVhZF9xdWV1ZSk7Cj4gLQo+IC0g ICAgYXZfdGhyZWFkX21lc3NhZ2VfcXVldWVfZnJlZSgmZi0+YXVkaW9fdHNfcXVldWUpOwo+IC19 Cj4gLQo+IC1zdGF0aWMgaW50IHRocmVhZF9zdGFydChEZW11eGVyICpkKQo+IC17Cj4gLSAgICBp bnQgcmV0Owo+IC0gICAgSW5wdXRGaWxlICpmID0gJmQtPmY7Cj4gLSAgICBPYmpQb29sICpvcDsK PiAtCj4gLSAgICBpZiAoZC0+dGhyZWFkX3F1ZXVlX3NpemUgPD0gMCkKPiAtICAgICAgICBkLT50 aHJlYWRfcXVldWVfc2l6ZSA9IChuYl9pbnB1dF9maWxlcyA+IDEgPyA4IDogMSk7Cj4gLQo+IC0g ICAgb3AgPSBvYmpwb29sX2FsbG9jX3BhY2tldHMoKTsKPiAtICAgIGlmICghb3ApCj4gLSAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAtCj4gLSAgICBkLT50aHJlYWRfcXVldWUgPSB0 cV9hbGxvYygxLCBkLT50aHJlYWRfcXVldWVfc2l6ZSwgb3AsIHBrdF9tb3ZlKTsKPiAtICAgIGlm ICghZC0+dGhyZWFkX3F1ZXVlKSB7Cj4gLSAgICAgICAgb2JqcG9vbF9mcmVlKCZvcCk7Cj4gLSAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAtICAgIH0KPiAtCj4gLSAgICBpZiAoZC0+ bG9vcCkgewo+IC0gICAgICAgIGludCBuYl9hdWRpb19kZWMgPSAwOwo+IC0KPiAtICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IGYtPm5iX3N0cmVhbXM7IGkrKykgewo+IC0gICAgICAgICAgICBJ bnB1dFN0cmVhbSAqaXN0ID0gZi0+c3RyZWFtc1tpXTsKPiAtICAgICAgICAgICAgbmJfYXVkaW9f ZGVjICs9ICEhKGlzdC0+ZGVjb2RpbmdfbmVlZGVkICYmCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpc3QtPnN0LT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9PQo+IEFWTUVESUFfVFlQ RV9BVURJTyk7Cj4gLSAgICAgICAgfQo+IC0KPiAtICAgICAgICBpZiAobmJfYXVkaW9fZGVjKSB7 Cj4gLSAgICAgICAgICAgIHJldCA9IGF2X3RocmVhZF9tZXNzYWdlX3F1ZXVlX2FsbG9jKCZmLT5h dWRpb190c19xdWV1ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmJfYXVkaW9fZGVjLAo+IHNpemVvZihUaW1lc3RhbXApKTsKPiAtICAgICAgICAg ICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gLSAgICAgICAg ICAgIGYtPmF1ZGlvX3RzX3F1ZXVlX3NpemUgPSBuYl9hdWRpb19kZWM7Cj4gLSAgICAgICAgfQo+ IC0gICAgfQo+IC0KPiAtICAgIGlmICgocmV0ID0gcHRocmVhZF9jcmVhdGUoJmQtPnRocmVhZCwg TlVMTCwgaW5wdXRfdGhyZWFkLCBkKSkpIHsKPiAtICAgICAgICBhdl9sb2coZCwgQVZfTE9HX0VS Uk9SLCAicHRocmVhZF9jcmVhdGUgZmFpbGVkOiAlcy4gVHJ5IHRvCj4gaW5jcmVhc2UgYHVsaW1p dCAtdmAgb3IgZGVjcmVhc2UgYHVsaW1pdCAtc2AuXG4iLCBzdHJlcnJvcihyZXQpKTsKPiAtICAg ICAgICByZXQgPSBBVkVSUk9SKHJldCk7Cj4gLSAgICAgICAgZ290byBmYWlsOwo+IC0gICAgfQo+ IC0KPiAtICAgIGQtPnJlYWRfc3RhcnRlZCA9IDE7Cj4gLQo+IC0gICAgcmV0dXJuIDA7Cj4gLWZh aWw6Cj4gLSAgICB0cV9mcmVlKCZkLT50aHJlYWRfcXVldWUpOwo+IC0gICAgcmV0dXJuIHJldDsK PiAtfQo+IC0KPiAtaW50IGlmaWxlX2dldF9wYWNrZXQoSW5wdXRGaWxlICpmLCBBVlBhY2tldCAq cGt0KQo+IC17Cj4gLSAgICBEZW11eGVyICpkID0gZGVtdXhlcl9mcm9tX2lmaWxlKGYpOwo+IC0g ICAgaW50IHJldCwgZHVtbXk7Cj4gLQo+IC0gICAgaWYgKCFkLT50aHJlYWRfcXVldWUpIHsKPiAt ICAgICAgICByZXQgPSB0aHJlYWRfc3RhcnQoZCk7Cj4gLSAgICAgICAgaWYgKHJldCA8IDApCj4g LSAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0ID0gdHFfcmVj ZWl2ZShkLT50aHJlYWRfcXVldWUsICZkdW1teSwgcGt0KTsKPiAtICAgIGlmIChyZXQgPCAwKQo+ IC0gICAgICAgIHJldHVybiByZXQ7Cj4gLQo+IC0gICAgaWYgKHBrdC0+c3RyZWFtX2luZGV4ID09 IC0xKSB7Cj4gLSAgICAgICAgYXZfYXNzZXJ0MCghcGt0LT5kYXRhICYmICFwa3QtPnNpZGVfZGF0 YV9lbGVtcyk7Cj4gLSAgICAgICAgcmV0dXJuIDE7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJu IDA7Cj4gKyAgICByZXR1cm4gKHZvaWQqKShpbnRwdHJfdClyZXQ7Cj4gIH0KPgo+ICBzdGF0aWMg dm9pZCBkZW11eF9maW5hbF9zdGF0cyhEZW11eGVyICpkKQo+IEBAIC03NjksOCArNzQ1LDYgQEAg dm9pZCBpZmlsZV9jbG9zZShJbnB1dEZpbGUgKipwZikKPiAgICAgIGlmICghZikKPiAgICAgICAg ICByZXR1cm47Cj4KPiAtICAgIHRocmVhZF9zdG9wKGQpOwo+IC0KPiAgICAgIGlmIChkLT5yZWFk X3N0YXJ0ZWQpCj4gICAgICAgICAgZGVtdXhfZmluYWxfc3RhdHMoZCk7Cj4KPiBAQCAtNzgwLDYg Kzc1NCw4IEBAIHZvaWQgaWZpbGVfY2xvc2UoSW5wdXRGaWxlICoqcGYpCj4KPiAgICAgIGF2Zm9y bWF0X2Nsb3NlX2lucHV0KCZmLT5jdHgpOwo+Cj4gKyAgICBhdl9wYWNrZXRfZnJlZSgmZC0+cGt0 X2hlYXJ0YmVhdCk7Cj4gKwo+ICAgICAgYXZfZnJlZXAocGYpOwo+ICB9Cj4KPiBAQCAtODAyLDcg Kzc3OCwxMSBAQCBzdGF0aWMgaW50IGlzdF91c2UoSW5wdXRTdHJlYW0gKmlzdCwgaW50Cj4gZGVj b2RpbmdfbmVlZGVkKQo+ICAgICAgICAgIGRzLT5zY2hfaWR4X3N0cmVhbSA9IHJldDsKPiAgICAg IH0KPgo+IC0gICAgaXN0LT5kaXNjYXJkICAgICAgICAgID0gMDsKPiArICAgIGlmIChpc3QtPmRp c2NhcmQpIHsKPiArICAgICAgICBpc3QtPmRpc2NhcmQgPSAwOwo+ICsgICAgICAgIGQtPm5iX3N0 cmVhbXNfdXNlZCsrOwo+ICsgICAgfQo+ICsKPiAgICAgIGlzdC0+c3QtPmRpc2NhcmQgICAgICA9 IGlzdC0+dXNlcl9zZXRfZGlzY2FyZDsKPiAgICAgIGlzdC0+ZGVjb2RpbmdfbmVlZGVkIHw9IGRl Y29kaW5nX25lZWRlZDsKPiAgICAgIGRzLT5zdHJlYW1jb3B5X25lZWRlZCB8PSAhZGVjb2Rpbmdf bmVlZGVkOwo+IEBAIC04MjMsNiArODAzLDggQEAgc3RhdGljIGludCBpc3RfdXNlKElucHV0U3Ry ZWFtICppc3QsIGludAo+IGRlY29kaW5nX25lZWRlZCkKPiAgICAgICAgICByZXQgPSBkZWNfb3Bl bihpc3QsIGQtPnNjaCwgZHMtPnNjaF9pZHhfZGVjKTsKPiAgICAgICAgICBpZiAocmV0IDwgMCkK PiAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICAgICAgZC0+aGF2ZV9hdWRpb19k ZWMgfD0gaXNfYXVkaW87Cj4gICAgICB9Cj4KPiAgICAgIHJldHVybiAwOwo+IEBAIC04NDgsNiAr ODMwLDcgQEAgaW50IGlzdF9vdXRwdXRfYWRkKElucHV0U3RyZWFtICppc3QsIE91dHB1dFN0cmVh bSAqb3N0KQo+Cj4gIGludCBpc3RfZmlsdGVyX2FkZChJbnB1dFN0cmVhbSAqaXN0LCBJbnB1dEZp bHRlciAqaWZpbHRlciwgaW50IGlzX3NpbXBsZSkKPiAgewo+ICsgICAgRGVtdXhlciAgICAgICpk ID0gZGVtdXhlcl9mcm9tX2lmaWxlKGlucHV0X2ZpbGVzW2lzdC0+ZmlsZV9pbmRleF0pOwo+ICAg ICAgRGVtdXhTdHJlYW0gKmRzID0gZHNfZnJvbV9pc3QoaXN0KTsKPiAgICAgIGludCByZXQ7Cj4K PiBAQCAtODY2LDYgKzg0OSwxNSBAQCBpbnQgaXN0X2ZpbHRlcl9hZGQoSW5wdXRTdHJlYW0gKmlz dCwgSW5wdXRGaWx0ZXIKPiAqaWZpbHRlciwgaW50IGlzX3NpbXBsZSkKPiAgICAgIGlmIChyZXQg PCAwKQo+ICAgICAgICAgIHJldHVybiByZXQ7Cj4KPiArICAgIGlmIChpc3QtPmRlY19jdHgtPmNv ZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1NVQlRJVExFKSB7Cj4gKyAgICAgICAgaWYgKCFkLT5w a3RfaGVhcnRiZWF0KSB7Cj4gKyAgICAgICAgICAgIGQtPnBrdF9oZWFydGJlYXQgPSBhdl9wYWNr ZXRfYWxsb2MoKTsKPiArICAgICAgICAgICAgaWYgKCFkLT5wa3RfaGVhcnRiZWF0KQo+ICsgICAg ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiArICAgICAgICB9Cj4gKyAgICAg ICAgZHMtPmhhdmVfc3ViMnZpZGVvID0gMTsKPiArICAgIH0KPiArCj4gICAgICByZXR1cm4gZHMt PnNjaF9pZHhfZGVjOwo+ICB9Cj4KPiBAQCAtMTYwNyw4ICsxNTk5LDYgQEAgaW50IGlmaWxlX29w ZW4oY29uc3QgT3B0aW9uc0NvbnRleHQgKm8sIGNvbnN0IGNoYXIKPiAqZmlsZW5hbWUsIFNjaGVk dWxlciAqc2NoKQo+ICAgICAgICAgICAgICAgICAic2luY2UgbmVpdGhlciAtcmVhZHJhdGUgbm9y IC1yZSB3ZXJlIGdpdmVuXG4iKTsKPiAgICAgIH0KPgo+IC0gICAgZC0+dGhyZWFkX3F1ZXVlX3Np emUgPSBvLT50aHJlYWRfcXVldWVfc2l6ZTsKPiAtCj4gICAgICAvKiBBZGQgYWxsIHRoZSBzdHJl YW1zIGZyb20gdGhlIGdpdmVuIGlucHV0IGZpbGUgdG8gdGhlIGRlbXV4ZXIgKi8KPiAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgaWMtPm5iX3N0cmVhbXM7IGkrKykgewo+ICAgICAgICAgIHJldCA9 IGlzdF9hZGQobywgZCwgaWMtPnN0cmVhbXNbaV0pOwo+IGRpZmYgLS1naXQgYS9mZnRvb2xzL2Zm bXBlZ19lbmMuYyBiL2ZmdG9vbHMvZmZtcGVnX2VuYy5jCj4gaW5kZXggOTg3MTM4MWMwZS4uOTM4 M2IxNjdmNyAxMDA2NDQKPiAtLS0gYS9mZnRvb2xzL2ZmbXBlZ19lbmMuYwo+ICsrKyBiL2ZmdG9v bHMvZmZtcGVnX2VuYy5jCj4gQEAgLTQxLDEyICs0MSw2IEBACj4gICNpbmNsdWRlICJsaWJhdmZv cm1hdC9hdmZvcm1hdC5oIgo+Cj4gIHN0cnVjdCBFbmNvZGVyIHsKPiAtICAgIEFWRnJhbWUgKnNx X2ZyYW1lOwo+IC0KPiAtICAgIC8vIHBhY2tldCBmb3IgcmVjZWl2aW5nIGVuY29kZWQgb3V0cHV0 Cj4gLSAgICBBVlBhY2tldCAqcGt0Owo+IC0gICAgQVZGcmFtZSAgKnN1Yl9mcmFtZTsKPiAtCj4g ICAgICAvLyBjb21iaW5lZCBzaXplIG9mIGFsbCB0aGUgcGFja2V0cyByZWNlaXZlZCBmcm9tIHRo ZSBlbmNvZGVyCj4gICAgICB1aW50NjRfdCBkYXRhX3NpemU7Cj4KPiBAQCAtNTQsMjUgKzQ4LDkg QEAgc3RydWN0IEVuY29kZXIgewo+ICAgICAgdWludDY0X3QgcGFja2V0c19lbmNvZGVkOwo+Cj4g ICAgICBpbnQgb3BlbmVkOwo+IC0gICAgaW50IGZpbmlzaGVkOwo+Cj4gICAgICBTY2hlZHVsZXIg ICAgICAqc2NoOwo+ICAgICAgdW5zaWduZWQgICAgICAgIHNjaF9pZHg7Cj4gLQo+IC0gICAgcHRo cmVhZF90ICAgICAgIHRocmVhZDsKPiAtICAgIC8qKgo+IC0gICAgICogUXVldWUgZm9yIHNlbmRp bmcgZnJhbWVzIGZyb20gdGhlIG1haW4gdGhyZWFkIHRvCj4gLSAgICAgKiB0aGUgZW5jb2RlciB0 aHJlYWQuCj4gLSAgICAgKi8KPiAtICAgIFRocmVhZFF1ZXVlICAgICpxdWV1ZV9pbjsKPiAtICAg IC8qKgo+IC0gICAgICogUXVldWUgZm9yIHNlbmRpbmcgZW5jb2RlZCBwYWNrZXRzIGZyb20gdGhl IGVuY29kZXIgdGhyZWFkCj4gLSAgICAgKiB0byB0aGUgbWFpbiB0aHJlYWQuCj4gLSAgICAgKgo+ IC0gICAgICogQW4gZW1wdHkgcGFja2V0IGlzIHNlbnQgdG8gc2lnbmFsIHRoYXQgYSBwcmV2aW91 c2x5IHNlbnQKPiAtICAgICAqIGZyYW1lIGhhcyBiZWVuIGZ1bGx5IHByb2Nlc3NlZC4KPiAtICAg ICAqLwo+IC0gICAgVGhyZWFkUXVldWUgICAgKnF1ZXVlX291dDsKPiAgfTsKPgo+ICAvLyBkYXRh IHRoYXQgaXMgbG9jYWwgdG8gdGhlIGRlY29kZXIgdGhyZWFkIGFuZCBub3QgdmlzaWJsZSBvdXRz aWRlIG9mIGl0Cj4gQEAgLTgxLDI0ICs1OSw2IEBAIHR5cGVkZWYgc3RydWN0IEVuY29kZXJUaHJl YWQgewo+ICAgICAgQVZQYWNrZXQgICpwa3Q7Cj4gIH0gRW5jb2RlclRocmVhZDsKPgo+IC1zdGF0 aWMgaW50IGVuY190aHJlYWRfc3RvcChFbmNvZGVyICplKQo+IC17Cj4gLSAgICB2b2lkICpyZXQ7 Cj4gLQo+IC0gICAgaWYgKCFlLT5xdWV1ZV9pbikKPiAtICAgICAgICByZXR1cm4gMDsKPiAtCj4g LSAgICB0cV9zZW5kX2ZpbmlzaChlLT5xdWV1ZV9pbiwgMCk7Cj4gLSAgICB0cV9yZWNlaXZlX2Zp bmlzaChlLT5xdWV1ZV9vdXQsIDApOwo+IC0KPiAtICAgIHB0aHJlYWRfam9pbihlLT50aHJlYWQs ICZyZXQpOwo+IC0KPiAtICAgIHRxX2ZyZWUoJmUtPnF1ZXVlX2luKTsKPiAtICAgIHRxX2ZyZWUo JmUtPnF1ZXVlX291dCk7Cj4gLQo+IC0gICAgcmV0dXJuIChpbnQpKGludHB0cl90KXJldDsKPiAt fQo+IC0KPiAgdm9pZCBlbmNfZnJlZShFbmNvZGVyICoqcGVuYykKPiAgewo+ICAgICAgRW5jb2Rl ciAqZW5jID0gKnBlbmM7Cj4gQEAgLTEwNiwxMyArNjYsNiBAQCB2b2lkIGVuY19mcmVlKEVuY29k ZXIgKipwZW5jKQo+ICAgICAgaWYgKCFlbmMpCj4gICAgICAgICAgcmV0dXJuOwo+Cj4gLSAgICBl bmNfdGhyZWFkX3N0b3AoZW5jKTsKPiAtCj4gLSAgICBhdl9mcmFtZV9mcmVlKCZlbmMtPnNxX2Zy YW1lKTsKPiAtICAgIGF2X2ZyYW1lX2ZyZWUoJmVuYy0+c3ViX2ZyYW1lKTsKPiAtCj4gLSAgICBh dl9wYWNrZXRfZnJlZSgmZW5jLT5wa3QpOwo+IC0KPiAgICAgIGF2X2ZyZWVwKHBlbmMpOwo+ICB9 Cj4KPiBAQCAtMTI3LDI1ICs4MCwxMiBAQCBpbnQgZW5jX2FsbG9jKEVuY29kZXIgKipwZW5jLCBj b25zdCBBVkNvZGVjICpjb2RlYywKPiAgICAgIGlmICghZW5jKQo+ICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Cj4KPiAtICAgIGlmIChjb2RlYy0+dHlwZSA9PSBBVk1FRElBX1RZUEVf U1VCVElUTEUpIHsKPiAtICAgICAgICBlbmMtPnN1Yl9mcmFtZSA9IGF2X2ZyYW1lX2FsbG9jKCk7 Cj4gLSAgICAgICAgaWYgKCFlbmMtPnN1Yl9mcmFtZSkKPiAtICAgICAgICAgICAgZ290byBmYWls Owo+IC0gICAgfQo+IC0KPiAtICAgIGVuYy0+cGt0ID0gYXZfcGFja2V0X2FsbG9jKCk7Cj4gLSAg ICBpZiAoIWVuYy0+cGt0KQo+IC0gICAgICAgIGdvdG8gZmFpbDsKPiAtCj4gICAgICBlbmMtPnNj aCAgICAgPSBzY2g7Cj4gICAgICBlbmMtPnNjaF9pZHggPSBzY2hfaWR4Owo+Cj4gICAgICAqcGVu YyA9IGVuYzsKPgo+ICAgICAgcmV0dXJuIDA7Cj4gLWZhaWw6Cj4gLSAgICBlbmNfZnJlZSgmZW5j KTsKPiAtICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gIH0KPgo+ICBzdGF0aWMgaW50IGh3 X2RldmljZV9zZXR1cF9mb3JfZW5jb2RlKE91dHB1dFN0cmVhbSAqb3N0LCBBVkJ1ZmZlclJlZgo+ ICpmcmFtZXNfcmVmKQo+IEBAIC0yMjQsNTIgKzE2NCw5IEBAIHN0YXRpYyBpbnQgc2V0X2VuY29k ZXJfaWQoT3V0cHV0RmlsZSAqb2YsCj4gT3V0cHV0U3RyZWFtICpvc3QpCj4gICAgICByZXR1cm4g MDsKPiAgfQo+Cj4gLXN0YXRpYyBpbnQgZW5jX3RocmVhZF9zdGFydChPdXRwdXRTdHJlYW0gKm9z dCkKPiAtewo+IC0gICAgRW5jb2RlciAqZSA9IG9zdC0+ZW5jOwo+IC0gICAgT2JqUG9vbCAqb3A7 Cj4gLSAgICBpbnQgcmV0ID0gMDsKPiAtCj4gLSAgICBvcCA9IG9ianBvb2xfYWxsb2NfZnJhbWVz KCk7Cj4gLSAgICBpZiAoIW9wKQo+IC0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4g LQo+IC0gICAgZS0+cXVldWVfaW4gPSB0cV9hbGxvYygxLCAxLCBvcCwgZnJhbWVfbW92ZSk7Cj4g LSAgICBpZiAoIWUtPnF1ZXVlX2luKSB7Cj4gLSAgICAgICAgb2JqcG9vbF9mcmVlKCZvcCk7Cj4g LSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAtICAgIH0KPiAtCj4gLSAgICBvcCA9 IG9ianBvb2xfYWxsb2NfcGFja2V0cygpOwo+IC0gICAgaWYgKCFvcCkKPiAtICAgICAgICBnb3Rv IGZhaWw7Cj4gLQo+IC0gICAgZS0+cXVldWVfb3V0ID0gdHFfYWxsb2MoMSwgNCwgb3AsIHBrdF9t b3ZlKTsKPiAtICAgIGlmICghZS0+cXVldWVfb3V0KSB7Cj4gLSAgICAgICAgb2JqcG9vbF9mcmVl KCZvcCk7Cj4gLSAgICAgICAgZ290byBmYWlsOwo+IC0gICAgfQo+IC0KPiAtICAgIHJldCA9IHB0 aHJlYWRfY3JlYXRlKCZlLT50aHJlYWQsIE5VTEwsIGVuY29kZXJfdGhyZWFkLCBvc3QpOwo+IC0g ICAgaWYgKHJldCkgewo+IC0gICAgICAgIHJldCA9IEFWRVJST1IocmV0KTsKPiAtICAgICAgICBh dl9sb2cob3N0LCBBVl9MT0dfRVJST1IsICJwdGhyZWFkX2NyZWF0ZSgpIGZhaWxlZDogJXNcbiIs Cj4gLSAgICAgICAgICAgICAgIGF2X2VycjJzdHIocmV0KSk7Cj4gLSAgICAgICAgZ290byBmYWls Owo+IC0gICAgfQo+IC0KPiAtICAgIHJldHVybiAwOwo+IC1mYWlsOgo+IC0gICAgaWYgKHJldCA+ PSAwKQo+IC0gICAgICAgIHJldCA9IEFWRVJST1IoRU5PTUVNKTsKPiAtCj4gLSAgICB0cV9mcmVl KCZlLT5xdWV1ZV9pbik7Cj4gLSAgICB0cV9mcmVlKCZlLT5xdWV1ZV9vdXQpOwo+IC0gICAgcmV0 dXJuIHJldDsKPiAtfQo+IC0KPiAtaW50IGVuY19vcGVuKE91dHB1dFN0cmVhbSAqb3N0LCBjb25z dCBBVkZyYW1lICpmcmFtZSkKPiAraW50IGVuY19vcGVuKHZvaWQgKm9wYXF1ZSwgY29uc3QgQVZG cmFtZSAqZnJhbWUpCj4gIHsKPiArICAgIE91dHB1dFN0cmVhbSAqb3N0ID0gb3BhcXVlOwo+ICAg ICAgSW5wdXRTdHJlYW0gKmlzdCA9IG9zdC0+aXN0Owo+ICAgICAgRW5jb2RlciAgICAgICAgICAg ICAgKmUgPSBvc3QtPmVuYzsKPiAgICAgIEFWQ29kZWNDb250ZXh0ICplbmNfY3R4ID0gb3N0LT5l bmNfY3R4Owo+IEBAIC0yNzcsNiArMTc0LDcgQEAgaW50IGVuY19vcGVuKE91dHB1dFN0cmVhbSAq b3N0LCBjb25zdCBBVkZyYW1lICpmcmFtZSkKPiAgICAgIGNvbnN0IEFWQ29kZWMgICAgICAqZW5j ID0gZW5jX2N0eC0+Y29kZWM7Cj4gICAgICBPdXRwdXRGaWxlICAgICAgKm9mID0gb3V0cHV0X2Zp bGVzW29zdC0+ZmlsZV9pbmRleF07Cj4gICAgICBGcmFtZURhdGEgKmZkOwo+ICsgICAgaW50IGZy YW1lX3NhbXBsZXMgPSAwOwo+ICAgICAgaW50IHJldDsKPgo+ICAgICAgaWYgKGUtPm9wZW5lZCkK PiBAQCAtNDIwLDE3ICszMTgsOCBAQCBpbnQgZW5jX29wZW4oT3V0cHV0U3RyZWFtICpvc3QsIGNv bnN0IEFWRnJhbWUgKmZyYW1lKQo+Cj4gICAgICBlLT5vcGVuZWQgPSAxOwo+Cj4gLSAgICBpZiAo b3N0LT5zcV9pZHhfZW5jb2RlID49IDApIHsKPiAtICAgICAgICBlLT5zcV9mcmFtZSA9IGF2X2Zy YW1lX2FsbG9jKCk7Cj4gLSAgICAgICAgaWYgKCFlLT5zcV9mcmFtZSkKPiAtICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAtICAgIH0KPiAtCj4gLSAgICBpZiAob3N0LT5lbmNf Y3R4LT5mcmFtZV9zaXplKSB7Cj4gLSAgICAgICAgYXZfYXNzZXJ0MChvc3QtPnNxX2lkeF9lbmNv ZGUgPj0gMCk7Cj4gLSAgICAgICAgc3FfZnJhbWVfc2FtcGxlcyhvdXRwdXRfZmlsZXNbb3N0LT5m aWxlX2luZGV4XS0+c3FfZW5jb2RlLAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgb3N0LT5z cV9pZHhfZW5jb2RlLCBvc3QtPmVuY19jdHgtPmZyYW1lX3NpemUpOwo+IC0gICAgfQo+ICsgICAg aWYgKG9zdC0+ZW5jX2N0eC0+ZnJhbWVfc2l6ZSkKPiArICAgICAgICBmcmFtZV9zYW1wbGVzID0g b3N0LT5lbmNfY3R4LT5mcmFtZV9zaXplOwo+Cj4gICAgICByZXQgPSBjaGVja19hdm9wdGlvbnMo b3N0LT5lbmNvZGVyX29wdHMpOwo+ICAgICAgaWYgKHJldCA8IDApCj4gQEAgLTQ3NiwxOCArMzY1 LDExIEBAIGludCBlbmNfb3BlbihPdXRwdXRTdHJlYW0gKm9zdCwgY29uc3QgQVZGcmFtZSAqZnJh bWUpCj4gICAgICBpZiAob3N0LT5zdC0+dGltZV9iYXNlLm51bSA8PSAwIHx8IG9zdC0+c3QtPnRp bWVfYmFzZS5kZW4gPD0gMCkKPiAgICAgICAgICBvc3QtPnN0LT50aW1lX2Jhc2UgPSBhdl9hZGRf cShvc3QtPmVuY19jdHgtPnRpbWVfYmFzZSwKPiAoQVZSYXRpb25hbCl7MCwgMX0pOwo+Cj4gLSAg ICByZXQgPSBlbmNfdGhyZWFkX3N0YXJ0KG9zdCk7Cj4gLSAgICBpZiAocmV0IDwgMCkgewo+IC0g ICAgICAgIGF2X2xvZyhvc3QsIEFWX0xPR19FUlJPUiwgIkVycm9yIHN0YXJ0aW5nIGVuY29kZXIg dGhyZWFkOiAlc1xuIiwKPiAtICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKPiAtICAg ICAgICByZXR1cm4gcmV0Owo+IC0gICAgfQo+IC0KPiAgICAgIHJldCA9IG9mX3N0cmVhbV9pbml0 KG9mLCBvc3QpOwo+ICAgICAgaWYgKHJldCA8IDApCj4gICAgICAgICAgcmV0dXJuIHJldDsKPgo+ IC0gICAgcmV0dXJuIDA7Cj4gKyAgICByZXR1cm4gZnJhbWVfc2FtcGxlczsKPiAgfQo+Cj4gIHN0 YXRpYyBpbnQgY2hlY2tfcmVjb3JkaW5nX3RpbWUoT3V0cHV0U3RyZWFtICpvc3QsIGludDY0X3Qg dHMsIEFWUmF0aW9uYWwKPiB0YikKPiBAQCAtNTE0LDggKzM5Niw3IEBAIHN0YXRpYyBpbnQgZG9f c3VidGl0bGVfb3V0KE91dHB1dEZpbGUgKm9mLAo+IE91dHB1dFN0cmVhbSAqb3N0LCBjb25zdCBB VlN1YnRpdGxlICoKPiAgICAgICAgICBhdl9sb2cob3N0LCBBVl9MT0dfRVJST1IsICJTdWJ0aXRs ZSBwYWNrZXRzIG11c3QgaGF2ZSBhIHB0c1xuIik7Cj4gICAgICAgICAgcmV0dXJuIGV4aXRfb25f ZXJyb3IgPyBBVkVSUk9SKEVJTlZBTCkgOiAwOwo+ICAgICAgfQo+IC0gICAgaWYgKG9zdC0+Zmlu aXNoZWQgfHwKPiAtICAgICAgICAob2YtPnN0YXJ0X3RpbWUgIT0gQVZfTk9QVFNfVkFMVUUgJiYg c3ViLT5wdHMgPCBvZi0+c3RhcnRfdGltZSkpCj4gKyAgICBpZiAoKG9mLT5zdGFydF90aW1lICE9 IEFWX05PUFRTX1ZBTFVFICYmIHN1Yi0+cHRzIDwgb2YtPnN0YXJ0X3RpbWUpKQo+ICAgICAgICAg IHJldHVybiAwOwo+Cj4gICAgICBlbmMgPSBvc3QtPmVuY19jdHg7Cj4gQEAgLTU3OSw3ICs0NjAs NyBAQCBzdGF0aWMgaW50IGRvX3N1YnRpdGxlX291dChPdXRwdXRGaWxlICpvZiwKPiBPdXRwdXRT dHJlYW0gKm9zdCwgY29uc3QgQVZTdWJ0aXRsZSAqCj4gICAgICAgICAgfQo+ICAgICAgICAgIHBr dC0+ZHRzID0gcGt0LT5wdHM7Cj4KPiAtICAgICAgICByZXQgPSB0cV9zZW5kKGUtPnF1ZXVlX291 dCwgMCwgcGt0KTsKPiArICAgICAgICByZXQgPSBzY2hfZW5jX3NlbmQoZS0+c2NoLCBlLT5zY2hf aWR4LCBwa3QpOwo+ICAgICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gICAgICAgICAgICAgIGF2X3Bh Y2tldF91bnJlZihwa3QpOwo+ICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+IEBAIC02NzEsMTAg KzU1MiwxMyBAQCBzdGF0aWMgaW50IHVwZGF0ZV92aWRlb19zdGF0cyhPdXRwdXRTdHJlYW0gKm9z dCwKPiBjb25zdCBBVlBhY2tldCAqcGt0LCBpbnQgd3JpdGVfCj4gICAgICBpbnQ2NF90IGZyYW1l X251bWJlcjsKPiAgICAgIGRvdWJsZSB0aTEsIGJpdHJhdGUsIGF2Z19iaXRyYXRlOwo+ICAgICAg ZG91YmxlIHBzbnJfdmFsID0gLTE7Cj4gKyAgICBpbnQgcXVhbGl0eTsKPgo+IC0gICAgb3N0LT5x dWFsaXR5ICAgPSBzZCA/IEFWX1JMMzIoc2QpIDogLTE7Cj4gKyAgICBxdWFsaXR5ICAgICAgICA9 IHNkID8gQVZfUkwzMihzZCkgOiAtMTsKPiAgICAgIHBpY3RfdHlwZSAgICAgID0gc2QgPyBzZFs0 XSA6IEFWX1BJQ1RVUkVfVFlQRV9OT05FOwo+Cj4gKyAgICBhdG9taWNfc3RvcmUoJm9zdC0+cXVh bGl0eSwgcXVhbGl0eSk7Cj4gKwo+ICAgICAgaWYgKChlbmMtPmZsYWdzICYgQVZfQ09ERUNfRkxB R19QU05SKSAmJiBzZCAmJiBzZFs1XSkgewo+ICAgICAgICAgIC8vIEZJWE1FIHRoZSBzY2FsaW5n IGFzc3VtZXMgOGJpdAo+ICAgICAgICAgIGRvdWJsZSBlcnJvciA9IEFWX1JMNjQoc2QgKyA4KSAv IChlbmMtPndpZHRoICogZW5jLT5oZWlnaHQgKgo+IDI1NS4wICogMjU1LjApOwo+IEBAIC02OTcs MTAgKzU4MSwxMCBAQCBzdGF0aWMgaW50IHVwZGF0ZV92aWRlb19zdGF0cyhPdXRwdXRTdHJlYW0g Km9zdCwKPiBjb25zdCBBVlBhY2tldCAqcGt0LCBpbnQgd3JpdGVfCj4gICAgICBmcmFtZV9udW1i ZXIgPSBlLT5wYWNrZXRzX2VuY29kZWQ7Cj4gICAgICBpZiAodnN0YXRzX3ZlcnNpb24gPD0gMSkg ewo+ICAgICAgICAgIGZwcmludGYodnN0YXRzX2ZpbGUsICJmcmFtZT0gJTUiUFJJZDY0IiBxPSAl Mi4xZiAiLCBmcmFtZV9udW1iZXIsCj4gLSAgICAgICAgICAgICAgICBvc3QtPnF1YWxpdHkgLyAo ZmxvYXQpRkZfUVAyTEFNQkRBKTsKPiArICAgICAgICAgICAgICAgIHF1YWxpdHkgLyAoZmxvYXQp RkZfUVAyTEFNQkRBKTsKPiAgICAgIH0gZWxzZSAgewo+ICAgICAgICAgIGZwcmludGYodnN0YXRz X2ZpbGUsICJvdXQ9ICUyZCBzdD0gJTJkIGZyYW1lPSAlNSJQUklkNjQiIHE9ICUyLjFmCj4gIiwg b3N0LT5maWxlX2luZGV4LCBvc3QtPmluZGV4LCBmcmFtZV9udW1iZXIsCj4gLSAgICAgICAgICAg ICAgICBvc3QtPnF1YWxpdHkgLyAoZmxvYXQpRkZfUVAyTEFNQkRBKTsKPiArICAgICAgICAgICAg ICAgIHF1YWxpdHkgLyAoZmxvYXQpRkZfUVAyTEFNQkRBKTsKPiAgICAgIH0KPgo+ICAgICAgaWYg KHBzbnJfdmFsID49IDApCj4gQEAgLTgwMSwxOCArNjg1LDExIEBAIHN0YXRpYyBpbnQgZW5jb2Rl X2ZyYW1lKE91dHB1dEZpbGUgKm9mLCBPdXRwdXRTdHJlYW0KPiAqb3N0LCBBVkZyYW1lICpmcmFt ZSwKPiAgICAgICAgICAgICAgICAgICAgIGF2X3RzMnN0cihwa3QtPmR1cmF0aW9uKSwgYXZfdHMy dGltZXN0cihwa3QtPmR1cmF0aW9uLAo+ICZlbmMtPnRpbWVfYmFzZSkpOwo+ICAgICAgICAgIH0K Pgo+IC0gICAgICAgIGlmICgocmV0ID0gdHJpZ2dlcl9maXhfc3ViX2R1cmF0aW9uX2hlYXJ0YmVh dChvc3QsIHBrdCkpIDwgMCkgewo+IC0gICAgICAgICAgICBhdl9sb2coTlVMTCwgQVZfTE9HX0VS Uk9SLAo+IC0gICAgICAgICAgICAgICAgICAgIlN1YnRpdGxlIGhlYXJ0YmVhdCBsb2dpYyBmYWls ZWQgaW4gJXMhICglcylcbiIsCj4gLSAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgYXZfZXJy MnN0cihyZXQpKTsKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgICAgICB9Cj4gLQo+ ICAgICAgICAgIGUtPmRhdGFfc2l6ZSArPSBwa3QtPnNpemU7Cj4KPiAgICAgICAgICBlLT5wYWNr ZXRzX2VuY29kZWQrKzsKPgo+IC0gICAgICAgIHJldCA9IHRxX3NlbmQoZS0+cXVldWVfb3V0LCAw LCBwa3QpOwo+ICsgICAgICAgIHJldCA9IHNjaF9lbmNfc2VuZChlLT5zY2gsIGUtPnNjaF9pZHgs IHBrdCk7Cj4gICAgICAgICAgaWYgKHJldCA8IDApIHsKPiAgICAgICAgICAgICAgYXZfcGFja2V0 X3VucmVmKHBrdCk7Cj4gICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gQEAgLTgyMiw1MCArNjk5 LDYgQEAgc3RhdGljIGludCBlbmNvZGVfZnJhbWUoT3V0cHV0RmlsZSAqb2YsIE91dHB1dFN0cmVh bQo+ICpvc3QsIEFWRnJhbWUgKmZyYW1lLAo+ICAgICAgYXZfYXNzZXJ0MCgwKTsKPiAgfQo+Cj4g LXN0YXRpYyBpbnQgc3VibWl0X2VuY29kZV9mcmFtZShPdXRwdXRGaWxlICpvZiwgT3V0cHV0U3Ry ZWFtICpvc3QsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmcmFt ZSwgQVZQYWNrZXQgKnBrdCkKPiAtewo+IC0gICAgRW5jb2RlciAqZSA9IG9zdC0+ZW5jOwo+IC0g ICAgaW50IHJldDsKPiAtCj4gLSAgICBpZiAob3N0LT5zcV9pZHhfZW5jb2RlIDwgMCkKPiAtICAg ICAgICByZXR1cm4gZW5jb2RlX2ZyYW1lKG9mLCBvc3QsIGZyYW1lLCBwa3QpOwo+IC0KPiAtICAg IGlmIChmcmFtZSkgewo+IC0gICAgICAgIHJldCA9IGF2X2ZyYW1lX3JlZihlLT5zcV9mcmFtZSwg ZnJhbWUpOwo+IC0gICAgICAgIGlmIChyZXQgPCAwKQo+IC0gICAgICAgICAgICByZXR1cm4gcmV0 Owo+IC0gICAgICAgIGZyYW1lID0gZS0+c3FfZnJhbWU7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0 ID0gc3Ffc2VuZChvZi0+c3FfZW5jb2RlLCBvc3QtPnNxX2lkeF9lbmNvZGUsCj4gLSAgICAgICAg ICAgICAgICAgIFNRRlJBTUUoZnJhbWUpKTsKPiAtICAgIGlmIChyZXQgPCAwKSB7Cj4gLSAgICAg ICAgaWYgKGZyYW1lKQo+IC0gICAgICAgICAgICBhdl9mcmFtZV91bnJlZihmcmFtZSk7Cj4gLSAg ICAgICAgaWYgKHJldCAhPSBBVkVSUk9SX0VPRikKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsK PiAtICAgIH0KPiAtCj4gLSAgICB3aGlsZSAoMSkgewo+IC0gICAgICAgIEFWRnJhbWUgKmVuY19m cmFtZSA9IGUtPnNxX2ZyYW1lOwo+IC0KPiAtICAgICAgICByZXQgPSBzcV9yZWNlaXZlKG9mLT5z cV9lbmNvZGUsIG9zdC0+c3FfaWR4X2VuY29kZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNRRlJBTUUoZW5jX2ZyYW1lKSk7Cj4gLSAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9S X0VPRikgewo+IC0gICAgICAgICAgICBlbmNfZnJhbWUgPSBOVUxMOwo+IC0gICAgICAgIH0gZWxz ZSBpZiAocmV0IDwgMCkgewo+IC0gICAgICAgICAgICByZXR1cm4gKHJldCA9PSBBVkVSUk9SKEVB R0FJTikpID8gMCA6IHJldDsKPiAtICAgICAgICB9Cj4gLQo+IC0gICAgICAgIHJldCA9IGVuY29k ZV9mcmFtZShvZiwgb3N0LCBlbmNfZnJhbWUsIHBrdCk7Cj4gLSAgICAgICAgaWYgKGVuY19mcmFt ZSkKPiAtICAgICAgICAgICAgYXZfZnJhbWVfdW5yZWYoZW5jX2ZyYW1lKTsKPiAtICAgICAgICBp ZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgIH0KPiAtfQo+IC0K PiAgc3RhdGljIGludCBkb19hdWRpb19vdXQoT3V0cHV0RmlsZSAqb2YsIE91dHB1dFN0cmVhbSAq b3N0LAo+ICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmcmFtZSwgQVZQYWNrZXQg KnBrdCkKPiAgewo+IEBAIC04ODEsNyArNzE0LDcgQEAgc3RhdGljIGludCBkb19hdWRpb19vdXQo T3V0cHV0RmlsZSAqb2YsIE91dHB1dFN0cmVhbQo+ICpvc3QsCj4gICAgICBpZiAoIWNoZWNrX3Jl Y29yZGluZ190aW1lKG9zdCwgZnJhbWUtPnB0cywgZnJhbWUtPnRpbWVfYmFzZSkpCj4gICAgICAg ICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+Cj4gLSAgICByZXR1cm4gc3VibWl0X2VuY29kZV9mcmFt ZShvZiwgb3N0LCBmcmFtZSwgcGt0KTsKPiArICAgIHJldHVybiBlbmNvZGVfZnJhbWUob2YsIG9z dCwgZnJhbWUsIHBrdCk7Cj4gIH0KPgo+ICBzdGF0aWMgZW51bSBBVlBpY3R1cmVUeXBlIGZvcmNl ZF9rZl9hcHBseSh2b2lkICpsb2djdHgsIEtleWZyYW1lRm9yY2VDdHgKPiAqa2YsCj4gQEAgLTk0 OSw3ICs3ODIsNyBAQCBzdGF0aWMgaW50IGRvX3ZpZGVvX291dChPdXRwdXRGaWxlICpvZiwgT3V0 cHV0U3RyZWFtCj4gKm9zdCwKPiAgICAgIH0KPiAgI2VuZGlmCj4KPiAtICAgIHJldHVybiBzdWJt aXRfZW5jb2RlX2ZyYW1lKG9mLCBvc3QsIGluX3BpY3R1cmUsIHBrdCk7Cj4gKyAgICByZXR1cm4g ZW5jb2RlX2ZyYW1lKG9mLCBvc3QsIGluX3BpY3R1cmUsIHBrdCk7Cj4gIH0KPgo+ICBzdGF0aWMg aW50IGZyYW1lX2VuY29kZShPdXRwdXRTdHJlYW0gKm9zdCwgQVZGcmFtZSAqZnJhbWUsIEFWUGFj a2V0ICpwa3QpCj4gQEAgLTk1OCw5ICs3OTEsMTIgQEAgc3RhdGljIGludCBmcmFtZV9lbmNvZGUo T3V0cHV0U3RyZWFtICpvc3QsIEFWRnJhbWUKPiAqZnJhbWUsIEFWUGFja2V0ICpwa3QpCj4gICAg ICBlbnVtIEFWTWVkaWFUeXBlIHR5cGUgPSBvc3QtPnR5cGU7Cj4KPiAgICAgIGlmICh0eXBlID09 IEFWTUVESUFfVFlQRV9TVUJUSVRMRSkgewo+ICsgICAgICAgIGNvbnN0IEFWU3VidGl0bGUgKnN1 YnRpdGxlID0gZnJhbWUgJiYgZnJhbWUtPmJ1ZlswXSA/Cj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoQVZTdWJ0aXRsZSopZnJhbWUtPmJ1ZlswXS0+ZGF0YSA6Cj4gTlVM TDsKPiArCj4gICAgICAgICAgLy8gbm8gZmx1c2hpbmcgZm9yIHN1YnRpdGxlcwo+IC0gICAgICAg IHJldHVybiBmcmFtZSA/Cj4gLSAgICAgICAgICAgICAgIGRvX3N1YnRpdGxlX291dChvZiwgb3N0 LCAoQVZTdWJ0aXRsZSopZnJhbWUtPmJ1ZlswXS0+ZGF0YSwKPiBwa3QpIDogMDsKPiArICAgICAg ICByZXR1cm4gc3VidGl0bGUgJiYgc3VidGl0bGUtPm51bV9yZWN0cyA/Cj4gKyAgICAgICAgICAg ICAgIGRvX3N1YnRpdGxlX291dChvZiwgb3N0LCBzdWJ0aXRsZSwgcGt0KSA6IDA7Cj4gICAgICB9 Cj4KPiAgICAgIGlmIChmcmFtZSkgewo+IEBAIC05NjgsNyArODA0LDcgQEAgc3RhdGljIGludCBm cmFtZV9lbmNvZGUoT3V0cHV0U3RyZWFtICpvc3QsIEFWRnJhbWUKPiAqZnJhbWUsIEFWUGFja2V0 ICpwa3QpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk b19hdWRpb19vdXQob2YsIG9zdCwKPiBmcmFtZSwgcGt0KTsKPiAgICAgIH0KPgo+IC0gICAgcmV0 dXJuIHN1Ym1pdF9lbmNvZGVfZnJhbWUob2YsIG9zdCwgTlVMTCwgcGt0KTsKPiArICAgIHJldHVy biAgZW5jb2RlX2ZyYW1lKG9mLCBvc3QsIE5VTEwsIHBrdCk7Cj4gIH0KPgo+ICBzdGF0aWMgdm9p ZCBlbmNfdGhyZWFkX3NldF9uYW1lKGNvbnN0IE91dHB1dFN0cmVhbSAqb3N0KQo+IEBAIC0xMDA5 LDI0ICs4NDUsNTAgQEAgZmFpbDoKPiAgdm9pZCAqZW5jb2Rlcl90aHJlYWQodm9pZCAqYXJnKQo+ ICB7Cj4gICAgICBPdXRwdXRTdHJlYW0gKm9zdCA9IGFyZzsKPiAtICAgIE91dHB1dEZpbGUgICAg Km9mID0gb3V0cHV0X2ZpbGVzW29zdC0+ZmlsZV9pbmRleF07Cj4gICAgICBFbmNvZGVyICAgICAg ICAqZSA9IG9zdC0+ZW5jOwo+ICAgICAgRW5jb2RlclRocmVhZCBldDsKPiAgICAgIGludCByZXQg PSAwLCBpbnB1dF9zdGF0dXMgPSAwOwo+ICsgICAgaW50IG5hbWVfc2V0ID0gMDsKPgo+ICAgICAg cmV0ID0gZW5jX3RocmVhZF9pbml0KCZldCk7Cj4gICAgICBpZiAocmV0IDwgMCkKPiAgICAgICAg ICBnb3RvIGZpbmlzaDsKPgo+IC0gICAgZW5jX3RocmVhZF9zZXRfbmFtZShvc3QpOwo+ICsgICAg LyogT3BlbiB0aGUgc3VidGl0bGUgZW5jb2RlcnMgaW1tZWRpYXRlbHkuIEFWRnJhbWUtYmFzZWQg ZW5jb2RlcnMKPiArICAgICAqIGFyZSBvcGVuZWQgdGhyb3VnaCBhIGNhbGxiYWNrIGZyb20gdGhl IHNjaGVkdWxlciBvbmNlIHRoZXkgZ2V0Cj4gKyAgICAgKiB0aGVpciBmaXJzdCBmcmFtZQo+ICsg ICAgICoKPiArICAgICAqIE4uQi46IGJlY2F1c2UgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9t IGEgZGlmZmVyZW50IHRocmVhZCwKPiArICAgICAqIGVuY19jdHggTVVTVCBOT1QgYmUgYWNjZXNz ZWQgYmVmb3JlIHNjaF9lbmNfcmVjZWl2ZSgpIHJldHVybnMKPiArICAgICAqIGZvciB0aGUgZmly c3QgdGltZSBmb3IgYXVkaW8vdmlkZW8uICovCj4gKyAgICBpZiAob3N0LT50eXBlICE9IEFWTUVE SUFfVFlQRV9WSURFTyAmJiBvc3QtPnR5cGUgIT0KPiBBVk1FRElBX1RZUEVfQVVESU8pIHsKPiAr ICAgICAgICByZXQgPSBlbmNfb3Blbihvc3QsIE5VTEwpOwo+ICsgICAgICAgIGlmIChyZXQgPCAw KQo+ICsgICAgICAgICAgICBnb3RvIGZpbmlzaDsKPiArICAgIH0KPgo+ICAgICAgd2hpbGUgKCFp bnB1dF9zdGF0dXMpIHsKPiAtICAgICAgICBpbnQgZHVtbXk7Cj4gLQo+IC0gICAgICAgIGlucHV0 X3N0YXR1cyA9IHRxX3JlY2VpdmUoZS0+cXVldWVfaW4sICZkdW1teSwgZXQuZnJhbWUpOwo+IC0g ICAgICAgIGlmIChpbnB1dF9zdGF0dXMgPCAwKQo+ICsgICAgICAgIGlucHV0X3N0YXR1cyA9IHNj aF9lbmNfcmVjZWl2ZShlLT5zY2gsIGUtPnNjaF9pZHgsIGV0LmZyYW1lKTsKPiArICAgICAgICBp ZiAoaW5wdXRfc3RhdHVzID09IEFWRVJST1JfRU9GKSB7Cj4gICAgICAgICAgICAgIGF2X2xvZyhv c3QsIEFWX0xPR19WRVJCT1NFLCAiRW5jb2RlciB0aHJlYWQgcmVjZWl2ZWQgRU9GXG4iKTsKPgo+ ICsgICAgICAgICAgICBpZiAoIWUtPm9wZW5lZCkgewo+ICsgICAgICAgICAgICAgICAgYXZfbG9n KG9zdCwgQVZfTE9HX0VSUk9SLCAiQ291bGQgbm90IG9wZW4gZW5jb2RlciBiZWZvcmUKPiBFT0Zc biIpOwo+ICsgICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFSU5WQUwpOwo+ICsgICAgICAg ICAgICAgICAgZ290byBmaW5pc2g7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9IGVsc2Ug aWYgKGlucHV0X3N0YXR1cyA8IDApIHsKPiArICAgICAgICAgICAgcmV0ID0gaW5wdXRfc3RhdHVz Owo+ICsgICAgICAgICAgICBhdl9sb2cob3N0LCBBVl9MT0dfRVJST1IsICJFcnJvciByZWNlaXZp bmcgYSBmcmFtZSBmb3IKPiBlbmNvZGluZzogJXNcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBh dl9lcnIyc3RyKHJldCkpOwo+ICsgICAgICAgICAgICBnb3RvIGZpbmlzaDsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIGlmICghbmFtZV9zZXQpIHsKPiArICAgICAgICAgICAgZW5jX3RocmVh ZF9zZXRfbmFtZShvc3QpOwo+ICsgICAgICAgICAgICBuYW1lX3NldCA9IDE7Cj4gKyAgICAgICAg fQo+ICsKPiAgICAgICAgICByZXQgPSBmcmFtZV9lbmNvZGUob3N0LCBpbnB1dF9zdGF0dXMgPj0g MCA/IGV0LmZyYW1lIDogTlVMTCwKPiBldC5wa3QpOwo+Cj4gICAgICAgICAgYXZfcGFja2V0X3Vu cmVmKGV0LnBrdCk7Cj4gQEAgLTEwNDAsMTUgKzkwMiw2IEBAIHZvaWQgKmVuY29kZXJfdGhyZWFk KHZvaWQgKmFyZykKPiAgICAgICAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOwo+ ICAgICAgICAgICAgICBicmVhazsKPiAgICAgICAgICB9Cj4gLQo+IC0gICAgICAgIC8vIHNpZ25h bCB0byB0aGUgY29uc3VtZXIgdGhyZWFkIHRoYXQgdGhlIGZyYW1lIHdhcyBlbmNvZGVkCj4gLSAg ICAgICAgcmV0ID0gdHFfc2VuZChlLT5xdWV1ZV9vdXQsIDAsIGV0LnBrdCk7Cj4gLSAgICAgICAg aWYgKHJldCA8IDApIHsKPiAtICAgICAgICAgICAgaWYgKHJldCAhPSBBVkVSUk9SX0VPRikKPiAt ICAgICAgICAgICAgICAgIGF2X2xvZyhvc3QsIEFWX0xPR19FUlJPUiwKPiAtICAgICAgICAgICAg ICAgICAgICAgICAiRXJyb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBtYWluIHRocmVhZFxuIik7 Cj4gLSAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgIH0KPiAgICAgIH0KPgo+ICAgICAgLy8g RU9GIGlzIG5vcm1hbCB0aHJlYWQgdGVybWluYXRpb24KPiBAQCAtMTA1NiwxMTggKzkwOSw3IEBA IHZvaWQgKmVuY29kZXJfdGhyZWFkKHZvaWQgKmFyZykKPiAgICAgICAgICByZXQgPSAwOwo+Cj4g IGZpbmlzaDoKPiAtICAgIGlmIChvc3QtPnNxX2lkeF9lbmNvZGUgPj0gMCkKPiAtICAgICAgICBz cV9zZW5kKG9mLT5zcV9lbmNvZGUsIG9zdC0+c3FfaWR4X2VuY29kZSwgU1FGUkFNRShOVUxMKSk7 Cj4gLQo+IC0gICAgdHFfcmVjZWl2ZV9maW5pc2goZS0+cXVldWVfaW4sICAwKTsKPiAtICAgIHRx X3NlbmRfZmluaXNoICAgKGUtPnF1ZXVlX291dCwgMCk7Cj4gLQo+ICAgICAgZW5jX3RocmVhZF91 bmluaXQoJmV0KTsKPgo+IC0gICAgYXZfbG9nKG9zdCwgQVZfTE9HX1ZFUkJPU0UsICJUZXJtaW5h dGluZyBlbmNvZGVyIHRocmVhZFxuIik7Cj4gLQo+ICAgICAgcmV0dXJuICh2b2lkKikoaW50cHRy X3QpcmV0Owo+ICB9Cj4gLQo+IC1pbnQgZW5jX2ZyYW1lKE91dHB1dFN0cmVhbSAqb3N0LCBBVkZy YW1lICpmcmFtZSkKPiAtewo+IC0gICAgT3V0cHV0RmlsZSAqb2YgPSBvdXRwdXRfZmlsZXNbb3N0 LT5maWxlX2luZGV4XTsKPiAtICAgIEVuY29kZXIgICAgICplID0gb3N0LT5lbmM7Cj4gLSAgICBp bnQgcmV0LCB0aHJlYWRfcmV0Owo+IC0KPiAtICAgIHJldCA9IGVuY19vcGVuKG9zdCwgZnJhbWUp Owo+IC0gICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgcmV0dXJuIHJldDsKPiAtCj4gLSAgICBp ZiAoIWUtPnF1ZXVlX2luKQo+IC0gICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiAtCj4gLSAg ICAvLyBzZW5kIHRoZSBmcmFtZS9FT0YgdG8gdGhlIGVuY29kZXIgdGhyZWFkCj4gLSAgICBpZiAo ZnJhbWUpIHsKPiAtICAgICAgICByZXQgPSB0cV9zZW5kKGUtPnF1ZXVlX2luLCAwLCBmcmFtZSk7 Cj4gLSAgICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAgIGdvdG8gZmluaXNoOwo+IC0g ICAgfSBlbHNlCj4gLSAgICAgICAgdHFfc2VuZF9maW5pc2goZS0+cXVldWVfaW4sIDApOwo+IC0K PiAtICAgIC8vIHJldHJpZXZlIGFsbCBlbmNvZGVkIGRhdGEgZm9yIHRoZSBmcmFtZQo+IC0gICAg d2hpbGUgKDEpIHsKPiAtICAgICAgICBpbnQgZHVtbXk7Cj4gLQo+IC0gICAgICAgIHJldCA9IHRx X3JlY2VpdmUoZS0+cXVldWVfb3V0LCAmZHVtbXksIGUtPnBrdCk7Cj4gLSAgICAgICAgaWYgKHJl dCA8IDApCj4gLSAgICAgICAgICAgIGJyZWFrOwo+IC0KPiAtICAgICAgICAvLyBmcmFtZSBmdWxs eSBlbmNvZGVkCj4gLSAgICAgICAgaWYgKCFlLT5wa3QtPmRhdGEgJiYgIWUtPnBrdC0+c2lkZV9k YXRhX2VsZW1zKQo+IC0gICAgICAgICAgICByZXR1cm4gMDsKPiAtCj4gLSAgICAgICAgLy8gcHJv Y2VzcyB0aGUgZW5jb2RlZCBwYWNrZXQKPiAtICAgICAgICByZXQgPSBvZl9vdXRwdXRfcGFja2V0 KG9mLCBvc3QsIGUtPnBrdCk7Cj4gLSAgICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAg IGdvdG8gZmluaXNoOwo+IC0gICAgfQo+IC0KPiAtZmluaXNoOgo+IC0gICAgdGhyZWFkX3JldCA9 IGVuY190aHJlYWRfc3RvcChlKTsKPiAtICAgIGlmICh0aHJlYWRfcmV0IDwgMCkgewo+IC0gICAg ICAgIGF2X2xvZyhvc3QsIEFWX0xPR19FUlJPUiwgIkVuY29kZXIgdGhyZWFkIHJldHVybmVkIGVy cm9yOiAlc1xuIiwKPiAtICAgICAgICAgICAgICAgYXZfZXJyMnN0cih0aHJlYWRfcmV0KSk7Cj4g LSAgICAgICAgcmV0ID0gZXJyX21lcmdlKHJldCwgdGhyZWFkX3JldCk7Cj4gLSAgICB9Cj4gLQo+ IC0gICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9IEFWRVJST1JfRU9GKQo+IC0gICAgICAgIHJldHVy biByZXQ7Cj4gLQo+IC0gICAgLy8gc2lnbmFsIEVPRiB0byB0aGUgbXV4ZXIKPiAtICAgIHJldHVy biBvZl9vdXRwdXRfcGFja2V0KG9mLCBvc3QsIE5VTEwpOwo+IC19Cj4gLQo+IC1pbnQgZW5jX3N1 YnRpdGxlKE91dHB1dEZpbGUgKm9mLCBPdXRwdXRTdHJlYW0gKm9zdCwgY29uc3QgQVZTdWJ0aXRs ZSAqc3ViKQo+IC17Cj4gLSAgICBFbmNvZGVyICplID0gb3N0LT5lbmM7Cj4gLSAgICBBVkZyYW1l ICpmID0gZS0+c3ViX2ZyYW1lOwo+IC0gICAgaW50IHJldDsKPiAtCj4gLSAgICAvLyBYWFggdGhl IHF1ZXVlIGZvciB0cmFuc2ZlcnJpbmcgZGF0YSB0byB0aGUgZW5jb2RlciB0aHJlYWQgcnVucwo+ IC0gICAgLy8gb24gQVZGcmFtZXMsIHNvIHdlIHdyYXAgQVZTdWJ0aXRsZSBpbiBhbiBBVkJ1ZmZl clJlZiBhbmQgcHV0Cj4gLSAgICAvLyB0aGF0IGluc2lkZSB0aGUgZnJhbWUKPiAtICAgIC8vIGV2 ZW50dWFsbHksIHN1YnRpdGxlcyBzaG91bGQgYmUgc3dpdGNoZWQgdG8gdXNlIEFWRnJhbWVzIG5h dGl2ZWx5Cj4gLSAgICByZXQgPSBzdWJ0aXRsZV93cmFwX2ZyYW1lKGYsIHN1YiwgMSk7Cj4gLSAg ICBpZiAocmV0IDwgMCkKPiAtICAgICAgICByZXR1cm4gcmV0Owo+IC0KPiAtICAgIHJldCA9IGVu Y19mcmFtZShvc3QsIGYpOwo+IC0gICAgYXZfZnJhbWVfdW5yZWYoZik7Cj4gLQo+IC0gICAgcmV0 dXJuIHJldDsKPiAtfQo+IC0KPiAtaW50IGVuY19mbHVzaCh2b2lkKQo+IC17Cj4gLSAgICBpbnQg cmV0ID0gMDsKPiAtCj4gLSAgICBmb3IgKE91dHB1dFN0cmVhbSAqb3N0ID0gb3N0X2l0ZXIoTlVM TCk7IG9zdDsgb3N0ID0gb3N0X2l0ZXIob3N0KSkgewo+IC0gICAgICAgIE91dHB1dEZpbGUgICAg ICAqb2YgPSBvdXRwdXRfZmlsZXNbb3N0LT5maWxlX2luZGV4XTsKPiAtICAgICAgICBpZiAob3N0 LT5zcV9pZHhfZW5jb2RlID49IDApCj4gLSAgICAgICAgICAgIHNxX3NlbmQob2YtPnNxX2VuY29k ZSwgb3N0LT5zcV9pZHhfZW5jb2RlLCBTUUZSQU1FKE5VTEwpKTsKPiAtICAgIH0KPiAtCj4gLSAg ICBmb3IgKE91dHB1dFN0cmVhbSAqb3N0ID0gb3N0X2l0ZXIoTlVMTCk7IG9zdDsgb3N0ID0gb3N0 X2l0ZXIob3N0KSkgewo+IC0gICAgICAgIEVuY29kZXIgICAgICAgICAgKmUgPSBvc3QtPmVuYzsK PiAtICAgICAgICBBVkNvZGVjQ29udGV4dCAqZW5jID0gb3N0LT5lbmNfY3R4Owo+IC0gICAgICAg IGludCBlcnI7Cj4gLQo+IC0gICAgICAgIGlmICghZW5jIHx8ICFlLT5vcGVuZWQgfHwKPiAtICAg ICAgICAgICAgKGVuYy0+Y29kZWNfdHlwZSAhPSBBVk1FRElBX1RZUEVfVklERU8gJiYgZW5jLT5j b2RlY190eXBlICE9Cj4gQVZNRURJQV9UWVBFX0FVRElPKSkKPiAtICAgICAgICAgICAgY29udGlu dWU7Cj4gLQo+IC0gICAgICAgIGVyciA9IGVuY19mcmFtZShvc3QsIE5VTEwpOwo+IC0gICAgICAg IGlmIChlcnIgIT0gQVZFUlJPUl9FT0YgJiYgcmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0ID0g ZXJyX21lcmdlKHJldCwgZXJyKTsKPiAtCj4gLSAgICAgICAgYXZfYXNzZXJ0MCghZS0+cXVldWVf aW4pOwo+IC0gICAgfQo+IC0KPiAtICAgIHJldHVybiByZXQ7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEv ZmZ0b29scy9mZm1wZWdfZmlsdGVyLmMgYi9mZnRvb2xzL2ZmbXBlZ19maWx0ZXIuYwo+IGluZGV4 IDYzNWIxYjBiNmUuLmFkYTIzNWIwODQgMTAwNjQ0Cj4gLS0tIGEvZmZ0b29scy9mZm1wZWdfZmls dGVyLmMKPiArKysgYi9mZnRvb2xzL2ZmbXBlZ19maWx0ZXIuYwo+IEBAIC0yMSw4ICsyMSw2IEBA Cj4gICNpbmNsdWRlIDxzdGRpbnQuaD4KPgo+ICAjaW5jbHVkZSAiZmZtcGVnLmgiCj4gLSNpbmNs dWRlICJmZm1wZWdfdXRpbHMuaCIKPiAtI2luY2x1ZGUgInRocmVhZF9xdWV1ZS5oIgo+Cj4gICNp bmNsdWRlICJsaWJhdmZpbHRlci9hdmZpbHRlci5oIgo+ICAjaW5jbHVkZSAibGliYXZmaWx0ZXIv YnVmZmVyc2luay5oIgo+IEBAIC01MywxMCArNTEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgRmlsdGVy R3JhcGhQcml2IHsKPiAgICAgIC8vIHRydWUgd2hlbiB0aGUgZmlsdGVyZ3JhcGggY29udGFpbnMg b25seSBtZXRhIGZpbHRlcnMKPiAgICAgIC8vIHRoYXQgZG8gbm90IG1vZGlmeSB0aGUgZnJhbWUg ZGF0YQo+ICAgICAgaW50IGlzX21ldGE7Cj4gKyAgICAvLyBzb3VyY2UgZmlsdGVycyBhcmUgcHJl c2VudCBpbiB0aGUgZ3JhcGgKPiArICAgIGludCBoYXZlX3NvdXJjZXM7Cj4gICAgICBpbnQgZGlz YWJsZV9jb252ZXJzaW9uczsKPgo+IC0gICAgaW50IG5iX2lucHV0c19ib3VuZDsKPiAtICAgIGlu dCBuYl9vdXRwdXRzX2JvdW5kOwo+ICsgICAgdW5zaWduZWQgbmJfb3V0cHV0c19kb25lOwo+Cj4g ICAgICBjb25zdCBjaGFyICpncmFwaF9kZXNjOwo+Cj4gQEAgLTY3LDQxICs2Niw2IEBAIHR5cGVk ZWYgc3RydWN0IEZpbHRlckdyYXBoUHJpdiB7Cj4KPiAgICAgIFNjaGVkdWxlciAgICAgICAqc2No Owo+ICAgICAgdW5zaWduZWQgICAgICAgICBzY2hfaWR4Owo+IC0KPiAtICAgIHB0aHJlYWRfdCAg ICAgICAgdGhyZWFkOwo+IC0gICAgLyoqCj4gLSAgICAgKiBRdWV1ZSBmb3Igc2VuZGluZyBmcmFt ZXMgZnJvbSB0aGUgbWFpbiB0aHJlYWQgdG8gdGhlIGZpbHRlcmdyYXBoLgo+IEhhcwo+IC0gICAg ICogbmJfaW5wdXRzKzEgc3RyZWFtcyAtIHRoZSBmaXJzdCBuYl9pbnB1dHMgc3RyZWFtIGNvcnJl c3BvbmQgdG8KPiAtICAgICAqIGZpbHRlcmdyYXBoIGlucHV0cy4gRnJhbWVzIG9uIHRob3NlIHN0 cmVhbXMgbWF5IGhhdmUgdGhlaXIgb3BhcXVlCj4gc2V0IHRvCj4gLSAgICAgKiAtIEZSQU1FX09Q QVFVRV9FT0Y6IGZyYW1lIGNvbnRhaW5zIG5vIGRhdGEsIGJ1dCBwdHMrdGltZWJhc2Ugb2YgdGhl Cj4gLSAgICAgKiAgIEVPRiBldmVudCBmb3IgdGhlIGNvcnJlc3BvbmRpbnQgc3RyZWFtLiBXaWxs IGJlIGltbWVkaWF0ZWx5Cj4gZm9sbG93ZWQgYnkKPiAtICAgICAqICAgdGhpcyBzdHJlYW0gYmVp bmcgc2VuZC1jbG9zZWQuCj4gLSAgICAgKiAtIEZSQU1FX09QQVFVRV9TVUJfSEVBUlRCRUFUOiBm cmFtZSBjb250YWlucyBubyBkYXRhLCBidXQKPiBwdHMrdGltZWJhc2Ugb2YKPiAtICAgICAqICAg YSBzdWJ0aXRsZSBoZWFydGJlYXQgZXZlbnQuIFdpbGwgb25seSBiZSBzZW50IGZvciBzdWIydmlk ZW8KPiBzdHJlYW1zLgo+IC0gICAgICoKPiAtICAgICAqIFRoZSBsYXN0IHN0cmVhbSBpcyAiY29u dHJvbCIgLSB0aGUgbWFpbiB0aHJlYWQgc2VuZHMgZW1wdHkKPiBBVkZyYW1lcyB3aXRoCj4gLSAg ICAgKiBvcGFxdWUgc2V0IHRvCj4gLSAgICAgKiAtIEZSQU1FX09QQVFVRV9SRUFQX0ZJTFRFUlM6 IGEgcmVxdWVzdCB0byByZXRyaWV2ZSBhbGwgZnJhbWUKPiBhdmFpbGFibGUKPiAtICAgICAqICAg ZnJvbSBmaWx0ZXJncmFwaCBvdXRwdXRzLiBUaGVzZSBmcmFtZXMgYXJlIHNlbnQgdG8gY29ycmVz cG9uZGluZwo+IC0gICAgICogICBzdHJlYW1zIGluIHF1ZXVlX291dC4gRmluYWxseSBhbiBlbXB0 eSBmcmFtZSBpcyBzZW50IHRvIHRoZQo+IGNvbnRyb2wKPiAtICAgICAqICAgc3RyZWFtIGluIHF1 ZXVlX291dC4KPiAtICAgICAqIC0gRlJBTUVfT1BBUVVFX0NIT09TRV9JTlBVVDogc2FtZSBhcyBh Ym92ZSwgYnV0IGluIGNhc2Ugbm8gZnJhbWVzCj4gYXJlCj4gLSAgICAgKiAgIGF2YWlsYWJsZSB0 aGUgdGVybWluYXRpbmcgZW1wdHkgZnJhbWUncyBvcGFxdWUgd2lsbCBjb250YWluIHRoZQo+IGlu ZGV4KzEKPiAtICAgICAqICAgb2YgdGhlIGZpbHRlcmdyYXBoIGlucHV0IHRvIHdoaWNoIG1vcmUg aW5wdXQgZnJhbWVzIHNob3VsZCBiZQo+IHN1cHBsaWVkLgo+IC0gICAgICovCj4gLSAgICBUaHJl YWRRdWV1ZSAgICAgKnF1ZXVlX2luOwo+IC0gICAgLyoqCj4gLSAgICAgKiBRdWV1ZSBmb3Igc2Vu ZGluZyBmcmFtZXMgZnJvbSB0aGUgZmlsdGVyZ3JhcGggYmFjayB0byB0aGUgbWFpbgo+IHRocmVh ZC4KPiAtICAgICAqIEhhcyBuYl9vdXRwdXRzKzEgc3RyZWFtcyAtIHRoZSBmaXJzdCBuYl9vdXRw dXRzIHN0cmVhbSBjb3JyZXNwb25kCj4gdG8KPiAtICAgICAqIGZpbHRlcmdyYXBoIG91dHB1dHMu Cj4gLSAgICAgKgo+IC0gICAgICogVGhlIGxhc3Qgc3RyZWFtIGlzICJjb250cm9sIiAtIHNlZSBk b2N1bWVudGF0aW9uIGZvciBxdWV1ZV9pbiBmb3IKPiBtb3JlCj4gLSAgICAgKiBkZXRhaWxzLgo+ IC0gICAgICovCj4gLSAgICBUaHJlYWRRdWV1ZSAgICAgKnF1ZXVlX291dDsKPiAtICAgIC8vIHN1 Ym1pdHRpbmcgZnJhbWVzIHRvIGZpbHRlciB0aHJlYWQgcmV0dXJuZWQgRU9GCj4gLSAgICAvLyB0 aGlzIG9ubHkgaGFwcGVucyBvbiB0aHJlYWQgZXhpdCwgc28gaXMgbm90IHBlci1pbnB1dAo+IC0g ICAgaW50ICAgICAgICAgICAgICBlb2ZfaW47Cj4gIH0gRmlsdGVyR3JhcGhQcml2Owo+Cj4gIHN0 YXRpYyBGaWx0ZXJHcmFwaFByaXYgKmZncF9mcm9tX2ZnKEZpbHRlckdyYXBoICpmZykKPiBAQCAt MTIzLDYgKzg3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgRmlsdGVyR3JhcGhUaHJlYWQgewo+ICAgICAg Ly8gVGhlIG91dHB1dCBpbmRleCBpcyBzdG9yZWQgaW4gZnJhbWUgb3BhcXVlLgo+ICAgICAgQVZG aWZvICAqZnJhbWVfcXVldWVfb3V0Owo+Cj4gKyAgICAvLyBpbmRleCBvZiB0aGUgbmV4dCBpbnB1 dCB0byByZXF1ZXN0IGZyb20gdGhlIHNjaGVkdWxlcgo+ICsgICAgdW5zaWduZWQgbmV4dF9pbjsK PiArICAgIC8vIHNldCB0byAxIGFmdGVyIGF0IGxlYXN0IG9uZSBmcmFtZSBwYXNzZWQgdGhyb3Vn aCB0aGlzIG91dHB1dAo+ICAgICAgaW50ICAgICAgZ290X2ZyYW1lOwo+Cj4gICAgICAvLyBFT0Yg c3RhdHVzIG9mIGVhY2ggaW5wdXQvb3V0cHV0LCBhcyByZWNlaXZlZCBieSB0aGUgdGhyZWFkCj4g QEAgLTI1Myw5ICsyMjAsNiBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRGaWx0ZXJQcml2IHsKPiAg ICAgIGludDY0X3QgdHNfb2Zmc2V0Owo+ICAgICAgaW50NjRfdCBuZXh0X3B0czsKPiAgICAgIEZQ U0NvbnZDb250ZXh0IGZwczsKPiAtCj4gLSAgICAvLyBzZXQgdG8gMSBhZnRlciBhdCBsZWFzdCBv bmUgZnJhbWUgcGFzc2VkIHRocm91Z2ggdGhpcyBvdXRwdXQKPiAtICAgIGludCBnb3RfZnJhbWU7 Cj4gIH0gT3V0cHV0RmlsdGVyUHJpdjsKPgo+ICBzdGF0aWMgT3V0cHV0RmlsdGVyUHJpdiAqb2Zw X2Zyb21fb2ZpbHRlcihPdXRwdXRGaWx0ZXIgKm9maWx0ZXIpCj4gQEAgLTY1Myw1NyArNjE3LDYg QEAgc3RhdGljIGludCBpZmlsdGVyX2hhc19hbGxfaW5wdXRfZm9ybWF0cyhGaWx0ZXJHcmFwaAo+ ICpmZykKPgo+ICBzdGF0aWMgdm9pZCAqZmlsdGVyX3RocmVhZCh2b2lkICphcmcpOwo+Cj4gLS8v IHN0YXJ0IHRoZSBmaWx0ZXJpbmcgdGhyZWFkIG9uY2UgYWxsIGlucHV0cyBhbmQgb3V0cHV0cyBh cmUgYm91bmQKPiAtc3RhdGljIGludCBmZ190aHJlYWRfdHJ5X3N0YXJ0KEZpbHRlckdyYXBoUHJp diAqZmdwKQo+IC17Cj4gLSAgICBGaWx0ZXJHcmFwaCAqZmcgPSAmZmdwLT5mZzsKPiAtICAgIE9i alBvb2wgKm9wOwo+IC0gICAgaW50IHJldCA9IDA7Cj4gLQo+IC0gICAgaWYgKGZncC0+bmJfaW5w dXRzX2JvdW5kICA8IGZnLT5uYl9pbnB1dHMgfHwKPiAtICAgICAgICBmZ3AtPm5iX291dHB1dHNf Ym91bmQgPCBmZy0+bmJfb3V0cHV0cykKPiAtICAgICAgICByZXR1cm4gMDsKPiAtCj4gLSAgICBv cCA9IG9ianBvb2xfYWxsb2NfZnJhbWVzKCk7Cj4gLSAgICBpZiAoIW9wKQo+IC0gICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gLQo+IC0gICAgZmdwLT5xdWV1ZV9pbiA9IHRxX2FsbG9j KGZnLT5uYl9pbnB1dHMgKyAxLCAxLCBvcCwgZnJhbWVfbW92ZSk7Cj4gLSAgICBpZiAoIWZncC0+ cXVldWVfaW4pIHsKPiAtICAgICAgICBvYmpwb29sX2ZyZWUoJm9wKTsKPiAtICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwo+IC0gICAgfQo+IC0KPiAtICAgIC8vIGF0IGxlYXN0IG9uZSBv dXRwdXQgaXMgbWFuZGF0b3J5Cj4gLSAgICBvcCA9IG9ianBvb2xfYWxsb2NfZnJhbWVzKCk7Cj4g LSAgICBpZiAoIW9wKQo+IC0gICAgICAgIGdvdG8gZmFpbDsKPiAtCj4gLSAgICBmZ3AtPnF1ZXVl X291dCA9IHRxX2FsbG9jKGZnLT5uYl9vdXRwdXRzICsgMSwgMSwgb3AsIGZyYW1lX21vdmUpOwo+ IC0gICAgaWYgKCFmZ3AtPnF1ZXVlX291dCkgewo+IC0gICAgICAgIG9ianBvb2xfZnJlZSgmb3Ap Owo+IC0gICAgICAgIGdvdG8gZmFpbDsKPiAtICAgIH0KPiAtCj4gLSAgICByZXQgPSBwdGhyZWFk X2NyZWF0ZSgmZmdwLT50aHJlYWQsIE5VTEwsIGZpbHRlcl90aHJlYWQsIGZncCk7Cj4gLSAgICBp ZiAocmV0KSB7Cj4gLSAgICAgICAgcmV0ID0gQVZFUlJPUihyZXQpOwo+IC0gICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJwdGhyZWFkX2NyZWF0ZSgpIGZvciBmaWx0ZXJncmFwaCAl ZAo+IGZhaWxlZDogJXNcbiIsCj4gLSAgICAgICAgICAgICAgIGZnLT5pbmRleCwgYXZfZXJyMnN0 cihyZXQpKTsKPiAtICAgICAgICBnb3RvIGZhaWw7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJu IDA7Cj4gLWZhaWw6Cj4gLSAgICBpZiAocmV0ID49IDApCj4gLSAgICAgICAgcmV0ID0gQVZFUlJP UihFTk9NRU0pOwo+IC0KPiAtICAgIHRxX2ZyZWUoJmZncC0+cXVldWVfaW4pOwo+IC0gICAgdHFf ZnJlZSgmZmdwLT5xdWV1ZV9vdXQpOwo+IC0KPiAtICAgIHJldHVybiByZXQ7Cj4gLX0KPiAtCj4g IHN0YXRpYyBjaGFyICpkZXNjcmliZV9maWx0ZXJfbGluayhGaWx0ZXJHcmFwaCAqZmcsIEFWRmls dGVySW5PdXQgKmlub3V0LAo+IGludCBpbikKPiAgewo+ICAgICAgQVZGaWx0ZXJDb250ZXh0ICpj dHggPSBpbm91dC0+ZmlsdGVyX2N0eDsKPiBAQCAtNzI5LDcgKzY0Miw2IEBAIHN0YXRpYyBPdXRw dXRGaWx0ZXIgKm9maWx0ZXJfYWxsb2MoRmlsdGVyR3JhcGggKmZnKQo+ICAgICAgb2ZpbHRlci0+ Z3JhcGggICAgPSBmZzsKPiAgICAgIG9mcC0+Zm9ybWF0ICAgICAgID0gLTE7Cj4gICAgICBvZnAt PmluZGV4ICAgICAgICA9IGZnLT5uYl9vdXRwdXRzIC0gMTsKPiAtICAgIG9maWx0ZXItPmxhc3Rf cHRzID0gQVZfTk9QVFNfVkFMVUU7Cj4KPiAgICAgIHJldHVybiBvZmlsdGVyOwo+ICB9Cj4gQEAg LTc2MCwxMCArNjcyLDcgQEAgc3RhdGljIGludCBpZmlsdGVyX2JpbmRfaXN0KElucHV0RmlsdGVy ICppZmlsdGVyLAo+IElucHV0U3RyZWFtICppc3QpCj4gICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7Cj4gICAgICB9Cj4KPiAtICAgIGZncC0+bmJfaW5wdXRzX2JvdW5kKys7Cj4g LSAgICBhdl9hc3NlcnQwKGZncC0+bmJfaW5wdXRzX2JvdW5kIDw9IGlmaWx0ZXItPmdyYXBoLT5u Yl9pbnB1dHMpOwo+IC0KPiAtICAgIHJldHVybiBmZ190aHJlYWRfdHJ5X3N0YXJ0KGZncCk7Cj4g KyAgICByZXR1cm4gMDsKPiAgfQo+Cj4gIHN0YXRpYyBpbnQgc2V0X2NoYW5uZWxfbGF5b3V0KE91 dHB1dEZpbHRlclByaXYgKmYsIE91dHB1dFN0cmVhbSAqb3N0KQo+IEBAIC05MDIsMTAgKzgxMSw3 IEBAIGludCBvZmlsdGVyX2JpbmRfb3N0KE91dHB1dEZpbHRlciAqb2ZpbHRlciwKPiBPdXRwdXRT dHJlYW0gKm9zdCwKPiAgICAgIGlmIChyZXQgPCAwKQo+ICAgICAgICAgIHJldHVybiByZXQ7Cj4K PiAtICAgIGZncC0+bmJfb3V0cHV0c19ib3VuZCsrOwo+IC0gICAgYXZfYXNzZXJ0MChmZ3AtPm5i X291dHB1dHNfYm91bmQgPD0gZmctPm5iX291dHB1dHMpOwo+IC0KPiAtICAgIHJldHVybiBmZ190 aHJlYWRfdHJ5X3N0YXJ0KGZncCk7Cj4gKyAgICByZXR1cm4gMDsKPiAgfQo+Cj4gIHN0YXRpYyBJ bnB1dEZpbHRlciAqaWZpbHRlcl9hbGxvYyhGaWx0ZXJHcmFwaCAqZmcpCj4gQEAgLTkzNSwzNCAr ODQxLDYgQEAgc3RhdGljIElucHV0RmlsdGVyICppZmlsdGVyX2FsbG9jKEZpbHRlckdyYXBoICpm ZykKPiAgICAgIHJldHVybiBpZmlsdGVyOwo+ICB9Cj4KPiAtc3RhdGljIGludCBmZ190aHJlYWRf c3RvcChGaWx0ZXJHcmFwaFByaXYgKmZncCkKPiAtewo+IC0gICAgdm9pZCAqcmV0Owo+IC0KPiAt ICAgIGlmICghZmdwLT5xdWV1ZV9pbikKPiAtICAgICAgICByZXR1cm4gMDsKPiAtCj4gLSAgICBm b3IgKGludCBpID0gMDsgaSA8PSBmZ3AtPmZnLm5iX2lucHV0czsgaSsrKSB7Cj4gLSAgICAgICAg SW5wdXRGaWx0ZXJQcml2ICppZnAgPSBpIDwgZmdwLT5mZy5uYl9pbnB1dHMgPwo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWZwX2Zyb21faWZpbHRlcihmZ3AtPmZnLmlucHV0c1tp XSkgOiBOVUxMOwo+IC0KPiAtICAgICAgICBpZiAoaWZwKQo+IC0gICAgICAgICAgICBpZnAtPmVv ZiA9IDE7Cj4gLQo+IC0gICAgICAgIHRxX3NlbmRfZmluaXNoKGZncC0+cXVldWVfaW4sIGkpOwo+ IC0gICAgfQo+IC0KPiAtICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGZncC0+ZmcubmJfb3V0cHV0 czsgaSsrKQo+IC0gICAgICAgIHRxX3JlY2VpdmVfZmluaXNoKGZncC0+cXVldWVfb3V0LCBpKTsK PiAtCj4gLSAgICBwdGhyZWFkX2pvaW4oZmdwLT50aHJlYWQsICZyZXQpOwo+IC0KPiAtICAgIHRx X2ZyZWUoJmZncC0+cXVldWVfaW4pOwo+IC0gICAgdHFfZnJlZSgmZmdwLT5xdWV1ZV9vdXQpOwo+ IC0KPiAtICAgIHJldHVybiAoaW50KShpbnRwdHJfdClyZXQ7Cj4gLX0KPiAtCj4gIHZvaWQgZmdf ZnJlZShGaWx0ZXJHcmFwaCAqKnBmZykKPiAgewo+ICAgICAgRmlsdGVyR3JhcGggKmZnID0gKnBm ZzsKPiBAQCAtOTcyLDggKzg1MCw2IEBAIHZvaWQgZmdfZnJlZShGaWx0ZXJHcmFwaCAqKnBmZykK PiAgICAgICAgICByZXR1cm47Cj4gICAgICBmZ3AgPSBmZ3BfZnJvbV9mZyhmZyk7Cj4KPiAtICAg IGZnX3RocmVhZF9zdG9wKGZncCk7Cj4gLQo+ICAgICAgYXZmaWx0ZXJfZ3JhcGhfZnJlZSgmZmct PmdyYXBoKTsKPiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmctPm5iX2lucHV0czsgaisrKSB7 Cj4gICAgICAgICAgSW5wdXRGaWx0ZXIgKmlmaWx0ZXIgPSBmZy0+aW5wdXRzW2pdOwo+IEBAIC0x MDcyLDYgKzk0OCwxNSBAQCBpbnQgZmdfY3JlYXRlKEZpbHRlckdyYXBoICoqcGZnLCBjaGFyICpn cmFwaF9kZXNjLAo+IFNjaGVkdWxlciAqc2NoKQo+ICAgICAgaWYgKHJldCA8IDApCj4gICAgICAg ICAgZ290byBmYWlsOwo+Cj4gKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ3JhcGgtPm5i X2ZpbHRlcnM7IGkrKykgewo+ICsgICAgICAgIGNvbnN0IEFWRmlsdGVyICpmID0gZ3JhcGgtPmZp bHRlcnNbaV0tPmZpbHRlcjsKPiArICAgICAgICBpZiAoIWF2ZmlsdGVyX2ZpbHRlcl9wYWRfY291 bnQoZiwgMCkgJiYKPiArICAgICAgICAgICAgIShmLT5mbGFncyAmIEFWRklMVEVSX0ZMQUdfRFlO QU1JQ19JTlBVVFMpKSB7Cj4gKyAgICAgICAgICAgIGZncC0+aGF2ZV9zb3VyY2VzID0gMTsKPiAr ICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiAgICAgIGZvciAo QVZGaWx0ZXJJbk91dCAqY3VyID0gaW5wdXRzOyBjdXI7IGN1ciA9IGN1ci0+bmV4dCkgewo+ICAg ICAgICAgIElucHV0RmlsdGVyICpjb25zdCBpZmlsdGVyID0gaWZpbHRlcl9hbGxvYyhmZyk7Cj4g ICAgICAgICAgSW5wdXRGaWx0ZXJQcml2ICAgICAgICppZnA7Cj4gQEAgLTE4MDAsNiArMTY4NSw3 IEBAIHN0YXRpYyBpbnQgY29uZmlndXJlX2ZpbHRlcmdyYXBoKEZpbHRlckdyYXBoICpmZywKPiBj b25zdCBGaWx0ZXJHcmFwaFRocmVhZCAqZmd0KQo+ICAgICAgQVZCdWZmZXJSZWYgKmh3X2Rldmlj ZTsKPiAgICAgIEFWRmlsdGVySW5PdXQgKmlucHV0cywgKm91dHB1dHMsICpjdXI7Cj4gICAgICBp bnQgcmV0LCBpLCBzaW1wbGUgPSBmaWx0ZXJncmFwaF9pc19zaW1wbGUoZmcpOwo+ICsgICAgaW50 IGhhdmVfaW5wdXRfZW9mID0gMDsKPiAgICAgIGNvbnN0IGNoYXIgKmdyYXBoX2Rlc2MgPSBmZ3At PmdyYXBoX2Rlc2M7Cj4KPiAgICAgIGNsZWFudXBfZmlsdGVyZ3JhcGgoZmcpOwo+IEBAIC0xOTIy LDExICsxODA4LDE4IEBAIHN0YXRpYyBpbnQgY29uZmlndXJlX2ZpbHRlcmdyYXBoKEZpbHRlckdy YXBoICpmZywKPiBjb25zdCBGaWx0ZXJHcmFwaFRocmVhZCAqZmd0KQo+ICAgICAgICAgICAgICBy ZXQgPSBhdl9idWZmZXJzcmNfYWRkX2ZyYW1lKGlmcC0+ZmlsdGVyLCBOVUxMKTsKPiAgICAgICAg ICAgICAgaWYgKHJldCA8IDApCj4gICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Cj4gKyAgICAg ICAgICAgIGhhdmVfaW5wdXRfZW9mID0gMTsKPiAgICAgICAgICB9Cj4gICAgICB9Cj4KPiAtICAg IHJldHVybiAwOwo+ICsgICAgaWYgKGhhdmVfaW5wdXRfZW9mKSB7Cj4gKyAgICAgICAgLy8gbWFr ZSBzdXJlIHRoZSBFT0YgcHJvcGFnYXRlcyB0byB0aGUgZW5kIG9mIHRoZSBncmFwaAo+ICsgICAg ICAgIHJldCA9IGF2ZmlsdGVyX2dyYXBoX3JlcXVlc3Rfb2xkZXN0KGZnLT5ncmFwaCk7Cj4gKyAg ICAgICAgaWYgKHJldCA8IDAgJiYgcmV0ICE9IEFWRVJST1IoRUFHQUlOKSAmJiByZXQgIT0gQVZF UlJPUl9FT0YpCj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDsKPiArICAgIH0KPgo+ICsgICAgcmV0 dXJuIDA7Cj4gIGZhaWw6Cj4gICAgICBjbGVhbnVwX2ZpbHRlcmdyYXBoKGZnKTsKPiAgICAgIHJl dHVybiByZXQ7Cj4gQEAgLTIxODIsNyArMjA3NSw3IEBAIHN0YXRpYyB2b2lkIHZpZGVvX3N5bmNf cHJvY2VzcyhPdXRwdXRGaWx0ZXJQcml2Cj4gKm9mcCwgQVZGcmFtZSAqZnJhbWUsCj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcy0+ZnJhbWVzX3By ZXZfaGlzdFsyXSk7Cj4KPiAgICAgICAgICBpZiAoISpuYl9mcmFtZXMgJiYgZnBzLT5sYXN0X2Ry b3BwZWQpIHsKPiAtICAgICAgICAgICAgb2ZpbHRlci0+bmJfZnJhbWVzX2Ryb3ArKzsKPiArICAg ICAgICAgICAgYXRvbWljX2ZldGNoX2FkZCgmb2ZpbHRlci0+bmJfZnJhbWVzX2Ryb3AsIDEpOwo+ ICAgICAgICAgICAgICBmcHMtPmxhc3RfZHJvcHBlZCsrOwo+ICAgICAgICAgIH0KPgo+IEBAIC0y MjYwLDIxICsyMTUzLDIzIEBAIGZpbmlzaDoKPiAgICAgIGZwcy0+ZnJhbWVzX3ByZXZfaGlzdFsw XSA9ICpuYl9mcmFtZXNfcHJldjsKPgo+ICAgICAgaWYgKCpuYl9mcmFtZXNfcHJldiA9PSAwICYm IGZwcy0+bGFzdF9kcm9wcGVkKSB7Cj4gLSAgICAgICAgb2ZpbHRlci0+bmJfZnJhbWVzX2Ryb3Ar KzsKPiArICAgICAgICBhdG9taWNfZmV0Y2hfYWRkKCZvZmlsdGVyLT5uYl9mcmFtZXNfZHJvcCwg MSk7Cj4gICAgICAgICAgYXZfbG9nKG9zdCwgQVZfTE9HX1ZFUkJPU0UsCj4gICAgICAgICAgICAg ICAgICIqKiogZHJvcHBpbmcgZnJhbWUgJSJQUklkNjQiIGF0IHRzICUiUFJJZDY0IlxuIiwKPiAg ICAgICAgICAgICAgICAgZnBzLT5mcmFtZV9udW1iZXIsIGZwcy0+bGFzdF9mcmFtZS0+cHRzKTsK PiAgICAgIH0KPiAgICAgIGlmICgqbmJfZnJhbWVzID4gKCpuYl9mcmFtZXNfcHJldiAmJiBmcHMt Pmxhc3RfZHJvcHBlZCkgKyAoKm5iX2ZyYW1lcwo+ID4gKm5iX2ZyYW1lc19wcmV2KSkgewo+ICsg ICAgICAgIHVpbnQ2NF90IG5iX2ZyYW1lc19kdXA7Cj4gICAgICAgICAgaWYgKCpuYl9mcmFtZXMg PiBkdHNfZXJyb3JfdGhyZXNob2xkICogMzApIHsKPiAgICAgICAgICAgICAgYXZfbG9nKG9zdCwg QVZfTE9HX0VSUk9SLCAiJSJQUklkNjQiIGZyYW1lIGR1cGxpY2F0aW9uIHRvbwo+IGxhcmdlLCBz a2lwcGluZ1xuIiwgKm5iX2ZyYW1lcyAtIDEpOwo+IC0gICAgICAgICAgICBvZmlsdGVyLT5uYl9m cmFtZXNfZHJvcCsrOwo+ICsgICAgICAgICAgICBhdG9taWNfZmV0Y2hfYWRkKCZvZmlsdGVyLT5u Yl9mcmFtZXNfZHJvcCwgMSk7Cj4gICAgICAgICAgICAgICpuYl9mcmFtZXMgPSAwOwo+ICAgICAg ICAgICAgICByZXR1cm47Cj4gICAgICAgICAgfQo+IC0gICAgICAgIG9maWx0ZXItPm5iX2ZyYW1l c19kdXAgKz0gKm5iX2ZyYW1lcyAtICgqbmJfZnJhbWVzX3ByZXYgJiYKPiBmcHMtPmxhc3RfZHJv cHBlZCkgLSAoKm5iX2ZyYW1lcyA+ICpuYl9mcmFtZXNfcHJldik7Cj4gKyAgICAgICAgbmJfZnJh bWVzX2R1cCA9IGF0b21pY19mZXRjaF9hZGQoJm9maWx0ZXItPm5iX2ZyYW1lc19kdXAsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5iX2ZyYW1lcyAtICgqbmJf ZnJhbWVzX3ByZXYgJiYKPiBmcHMtPmxhc3RfZHJvcHBlZCkgLSAoKm5iX2ZyYW1lcyA+ICpuYl9m cmFtZXNfcHJldikpOwo+ICAgICAgICAgIGF2X2xvZyhvc3QsIEFWX0xPR19WRVJCT1NFLCAiKioq ICUiUFJJZDY0IiBkdXAhXG4iLCAqbmJfZnJhbWVzIC0KPiAxKTsKPiAtICAgICAgICBpZiAob2Zp bHRlci0+bmJfZnJhbWVzX2R1cCA+IGZwcy0+ZHVwX3dhcm5pbmcpIHsKPiArICAgICAgICBpZiAo bmJfZnJhbWVzX2R1cCA+IGZwcy0+ZHVwX3dhcm5pbmcpIHsKPiAgICAgICAgICAgICAgYXZfbG9n KG9zdCwgQVZfTE9HX1dBUk5JTkcsICJNb3JlIHRoYW4gJSJQUkl1NjQiIGZyYW1lcwo+IGR1cGxp Y2F0ZWRcbiIsIGZwcy0+ZHVwX3dhcm5pbmcpOwo+ICAgICAgICAgICAgICBmcHMtPmR1cF93YXJu aW5nICo9IDEwOwo+ICAgICAgICAgIH0KPiBAQCAtMjI4NCw4ICsyMTc5LDU3IEBAIGZpbmlzaDoK PiAgICAgIGZwcy0+ZHJvcHBlZF9rZXlmcmFtZSB8PSBmcHMtPmxhc3RfZHJvcHBlZCAmJiAoZnJh bWUtPmZsYWdzICYKPiBBVl9GUkFNRV9GTEFHX0tFWSk7Cj4gIH0KPgo+ICtzdGF0aWMgaW50IGNs b3NlX291dHB1dChPdXRwdXRGaWx0ZXJQcml2ICpvZnAsIEZpbHRlckdyYXBoVGhyZWFkICpmZ3Qp Cj4gK3sKPiArICAgIEZpbHRlckdyYXBoUHJpdiAqZmdwID0gZmdwX2Zyb21fZmcob2ZwLT5vZmls dGVyLmdyYXBoKTsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgLy8gd2UgYXJlIGZpbmlzaGVk IGFuZCBubyBmcmFtZXMgd2VyZSBldmVyIHNlZW4gYXQgdGhpcyBvdXRwdXQsCj4gKyAgICAvLyBh dCBsZWFzdCBpbml0aWFsaXplIHRoZSBlbmNvZGVyIHdpdGggYSBkdW1teSBmcmFtZQo+ICsgICAg aWYgKCFmZ3QtPmdvdF9mcmFtZSkgewo+ICsgICAgICAgIEFWRnJhbWUgKmZyYW1lID0gZmd0LT5m cmFtZTsKPiArICAgICAgICBGcmFtZURhdGEgKmZkOwo+ICsKPiArICAgICAgICBmcmFtZS0+dGlt ZV9iYXNlICAgPSBvZnAtPnRiX291dDsKPiArICAgICAgICBmcmFtZS0+Zm9ybWF0ICAgICAgPSBv ZnAtPmZvcm1hdDsKPiArCj4gKyAgICAgICAgZnJhbWUtPndpZHRoICAgICAgICAgICAgICAgPSBv ZnAtPndpZHRoOwo+ICsgICAgICAgIGZyYW1lLT5oZWlnaHQgICAgICAgICAgICAgID0gb2ZwLT5o ZWlnaHQ7Cj4gKyAgICAgICAgZnJhbWUtPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSBvZnAtPnNhbXBs ZV9hc3BlY3RfcmF0aW87Cj4gKwo+ICsgICAgICAgIGZyYW1lLT5zYW1wbGVfcmF0ZSA9IG9mcC0+ c2FtcGxlX3JhdGU7Cj4gKyAgICAgICAgaWYgKG9mcC0+Y2hfbGF5b3V0Lm5iX2NoYW5uZWxzKSB7 Cj4gKyAgICAgICAgICAgIHJldCA9IGF2X2NoYW5uZWxfbGF5b3V0X2NvcHkoJmZyYW1lLT5jaF9s YXlvdXQsCj4gJm9mcC0+Y2hfbGF5b3V0KTsKPiArICAgICAgICAgICAgaWYgKHJldCA8IDApCj4g KyAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAg ZmQgPSBmcmFtZV9kYXRhKGZyYW1lKTsKPiArICAgICAgICBpZiAoIWZkKQo+ICsgICAgICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+ICsKPiArICAgICAgICBmZC0+ZnJhbWVfcmF0ZV9m aWx0ZXIgPSBvZnAtPmZwcy5mcmFtZXJhdGU7Cj4gKwo+ICsgICAgICAgIGF2X2Fzc2VydDAoIWZy YW1lLT5idWZbMF0pOwo+ICsKPiArICAgICAgICBhdl9sb2cob2ZwLT5vZmlsdGVyLm9zdCwgQVZf TE9HX1dBUk5JTkcsCj4gKyAgICAgICAgICAgICAgICJObyBmaWx0ZXJlZCBmcmFtZXMgZm9yIG91 dHB1dCBzdHJlYW0sIHRyeWluZyB0byAiCj4gKyAgICAgICAgICAgICAgICJpbml0aWFsaXplIGFu eXdheS5cbiIpOwo+ICsKPiArICAgICAgICByZXQgPSBzY2hfZmlsdGVyX3NlbmQoZmdwLT5zY2gs IGZncC0+c2NoX2lkeCwgb2ZwLT5pbmRleCwgZnJhbWUpOwo+ICsgICAgICAgIGlmIChyZXQgPCAw KSB7Cj4gKyAgICAgICAgICAgIGF2X2ZyYW1lX3VucmVmKGZyYW1lKTsKPiArICAgICAgICAgICAg cmV0dXJuIHJldDsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgZmd0LT5lb2Zfb3V0 W29mcC0+aW5kZXhdID0gMTsKPiArCj4gKyAgICByZXR1cm4gc2NoX2ZpbHRlcl9zZW5kKGZncC0+ c2NoLCBmZ3AtPnNjaF9pZHgsIG9mcC0+aW5kZXgsIE5VTEwpOwo+ICt9Cj4gKwo+ICBzdGF0aWMg aW50IGZnX291dHB1dF9mcmFtZShPdXRwdXRGaWx0ZXJQcml2ICpvZnAsIEZpbHRlckdyYXBoVGhy ZWFkICpmZ3QsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmZyYW1lLCBp bnQgYnVmZmVyKQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmcmFtZSkK PiAgewo+ICAgICAgRmlsdGVyR3JhcGhQcml2ICAqZmdwID0gZmdwX2Zyb21fZmcob2ZwLT5vZmls dGVyLmdyYXBoKTsKPiAgICAgIEFWRnJhbWUgICAqZnJhbWVfcHJldiA9IG9mcC0+ZnBzLmxhc3Rf ZnJhbWU7Cj4gQEAgLTIzMzIsMjggKzIyNzYsMTcgQEAgc3RhdGljIGludCBmZ19vdXRwdXRfZnJh bWUoT3V0cHV0RmlsdGVyUHJpdiAqb2ZwLAo+IEZpbHRlckdyYXBoVGhyZWFkICpmZ3QsCj4gICAg ICAgICAgICAgIGZyYW1lX291dCA9IGZyYW1lOwo+ICAgICAgICAgIH0KPgo+IC0gICAgICAgIGlm IChidWZmZXIpIHsKPiAtICAgICAgICAgICAgQVZGcmFtZSAqZiA9IGF2X2ZyYW1lX2FsbG9jKCk7 Cj4gLQo+IC0gICAgICAgICAgICBpZiAoIWYpIHsKPiAtICAgICAgICAgICAgICAgIGF2X2ZyYW1l X3VucmVmKGZyYW1lX291dCk7Cj4gLSAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwo+IC0gICAgICAgICAgICB9Cj4gLQo+IC0gICAgICAgICAgICBhdl9mcmFtZV9tb3ZlX3Jl ZihmLCBmcmFtZV9vdXQpOwo+IC0gICAgICAgICAgICBmLT5vcGFxdWUgPSAodm9pZCopKGludHB0 cl90KW9mcC0+aW5kZXg7Cj4gLQo+IC0gICAgICAgICAgICByZXQgPSBhdl9maWZvX3dyaXRlKGZn dC0+ZnJhbWVfcXVldWVfb3V0LCAmZiwgMSk7Cj4gLSAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7 Cj4gLSAgICAgICAgICAgICAgICBhdl9mcmFtZV9mcmVlKCZmKTsKPiAtICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICB9IGVs c2Ugewo+IC0gICAgICAgICAgICAvLyByZXR1cm4gdGhlIGZyYW1lIHRvIHRoZSBtYWluIHRocmVh ZAo+IC0gICAgICAgICAgICByZXQgPSB0cV9zZW5kKGZncC0+cXVldWVfb3V0LCBvZnAtPmluZGV4 LCBmcmFtZV9vdXQpOwo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgLy8gc2VuZCB0aGUgZnJh bWUgdG8gY29uc3VtZXJzCj4gKyAgICAgICAgICAgIHJldCA9IHNjaF9maWx0ZXJfc2VuZChmZ3At PnNjaCwgZmdwLT5zY2hfaWR4LCBvZnAtPmluZGV4LAo+IGZyYW1lX291dCk7Cj4gICAgICAgICAg ICAgIGlmIChyZXQgPCAwKSB7Cj4gICAgICAgICAgICAgICAgICBhdl9mcmFtZV91bnJlZihmcmFt ZV9vdXQpOwo+IC0gICAgICAgICAgICAgICAgZmd0LT5lb2Zfb3V0W29mcC0+aW5kZXhdID0gMTsK PiArCj4gKyAgICAgICAgICAgICAgICBpZiAoIWZndC0+ZW9mX291dFtvZnAtPmluZGV4XSkgewo+ ICsgICAgICAgICAgICAgICAgICAgIGZndC0+ZW9mX291dFtvZnAtPmluZGV4XSA9IDE7Cj4gKyAg ICAgICAgICAgICAgICAgICAgZmdwLT5uYl9vdXRwdXRzX2RvbmUrKzsKPiArICAgICAgICAgICAg ICAgIH0KPiArCj4gICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09IEFWRVJST1JfRU9GID8g MCA6IHJldDsKPiAgICAgICAgICAgICAgfQo+ICAgICAgICAgIH0KPiBAQCAtMjM3NCwxNiArMjMw NywxNCBAQCBzdGF0aWMgaW50IGZnX291dHB1dF9mcmFtZShPdXRwdXRGaWx0ZXJQcml2ICpvZnAs Cj4gRmlsdGVyR3JhcGhUaHJlYWQgKmZndCwKPiAgICAgICAgICBhdl9mcmFtZV9tb3ZlX3JlZihm cmFtZV9wcmV2LCBmcmFtZSk7Cj4gICAgICB9Cj4KPiAtICAgIGlmICghZnJhbWUpIHsKPiAtICAg ICAgICB0cV9zZW5kX2ZpbmlzaChmZ3AtPnF1ZXVlX291dCwgb2ZwLT5pbmRleCk7Cj4gLSAgICAg ICAgZmd0LT5lb2Zfb3V0W29mcC0+aW5kZXhdID0gMTsKPiAtICAgIH0KPiArICAgIGlmICghZnJh bWUpCj4gKyAgICAgICAgcmV0dXJuIGNsb3NlX291dHB1dChvZnAsIGZndCk7Cj4KPiAgICAgIHJl dHVybiAwOwo+ICB9Cj4KPiAgc3RhdGljIGludCBmZ19vdXRwdXRfc3RlcChPdXRwdXRGaWx0ZXJQ cml2ICpvZnAsIEZpbHRlckdyYXBoVGhyZWFkICpmZ3QsCj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgQVZGcmFtZSAqZnJhbWUsICBpbnQgYnVmZmVyKQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWRnJhbWUgKmZyYW1lKQo+ICB7Cj4gICAgICBGaWx0ZXJHcmFwaFByaXYgICAgKmZn cCA9IGZncF9mcm9tX2ZnKG9mcC0+b2ZpbHRlci5ncmFwaCk7Cj4gICAgICBPdXRwdXRTdHJlYW0g ICAgICAgKm9zdCA9IG9mcC0+b2ZpbHRlci5vc3Q7Cj4gQEAgLTIzOTMsOCArMjMyNCw4IEBAIHN0 YXRpYyBpbnQgZmdfb3V0cHV0X3N0ZXAoT3V0cHV0RmlsdGVyUHJpdiAqb2ZwLAo+IEZpbHRlckdy YXBoVGhyZWFkICpmZ3QsCj4KPiAgICAgIHJldCA9IGF2X2J1ZmZlcnNpbmtfZ2V0X2ZyYW1lX2Zs YWdzKGZpbHRlciwgZnJhbWUsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBVl9CVUZGRVJTSU5LX0ZMQUdfTk9fUkVRVUVTVCk7Cj4gLSAgICBpZiAocmV0ID09IEFW RVJST1JfRU9GICYmICFidWZmZXIgJiYgIWZndC0+ZW9mX291dFtvZnAtPmluZGV4XSkgewo+IC0g ICAgICAgIHJldCA9IGZnX291dHB1dF9mcmFtZShvZnAsIGZndCwgTlVMTCwgYnVmZmVyKTsKPiAr ICAgIGlmIChyZXQgPT0gQVZFUlJPUl9FT0YgJiYgIWZndC0+ZW9mX291dFtvZnAtPmluZGV4XSkg ewo+ICsgICAgICAgIHJldCA9IGZnX291dHB1dF9mcmFtZShvZnAsIGZndCwgTlVMTCk7Cj4gICAg ICAgICAgcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6IDE7Cj4gICAgICB9IGVsc2UgaWYgKHJldCA9 PSBBVkVSUk9SKEVBR0FJTikgfHwgcmV0ID09IEFWRVJST1JfRU9GKSB7Cj4gICAgICAgICAgcmV0 dXJuIDE7Cj4gQEAgLTI0NDgsNyArMjM3OSw3IEBAIHN0YXRpYyBpbnQgZmdfb3V0cHV0X3N0ZXAo T3V0cHV0RmlsdGVyUHJpdiAqb2ZwLAo+IEZpbHRlckdyYXBoVGhyZWFkICpmZ3QsCj4gICAgICAg ICAgZmQtPmZyYW1lX3JhdGVfZmlsdGVyID0gb2ZwLT5mcHMuZnJhbWVyYXRlOwo+ICAgICAgfQo+ Cj4gLSAgICByZXQgPSBmZ19vdXRwdXRfZnJhbWUob2ZwLCBmZ3QsIGZyYW1lLCBidWZmZXIpOwo+ ICsgICAgcmV0ID0gZmdfb3V0cHV0X2ZyYW1lKG9mcCwgZmd0LCBmcmFtZSk7Cj4gICAgICBhdl9m cmFtZV91bnJlZihmcmFtZSk7Cj4gICAgICBpZiAocmV0IDwgMCkKPiAgICAgICAgICByZXR1cm4g cmV0Owo+IEBAIC0yNDU2LDQ0ICsyMzg3LDY4IEBAIHN0YXRpYyBpbnQgZmdfb3V0cHV0X3N0ZXAo T3V0cHV0RmlsdGVyUHJpdiAqb2ZwLAo+IEZpbHRlckdyYXBoVGhyZWFkICpmZ3QsCj4gICAgICBy ZXR1cm4gMDsKPiAgfQo+Cj4gLS8qIHJldHJpZXZlIGFsbCBmcmFtZXMgYXZhaWxhYmxlIGF0IGZp bHRlcmdyYXBoIG91dHB1dHMgYW5kIGVpdGhlciBzZW5kCj4gdGhlbSB0bwo+IC0gKiB0aGUgbWFp biB0aHJlYWQgKGJ1ZmZlcj0wKSBvciBidWZmZXIgdGhlbSBmb3IgbGF0ZXIgKGJ1ZmZlcj0xKSAq Lwo+ICsvKiByZXRyaWV2ZSBhbGwgZnJhbWVzIGF2YWlsYWJsZSBhdCBmaWx0ZXJncmFwaCBvdXRw dXRzCj4gKyAqIGFuZCBzZW5kIHRoZW0gdG8gY29uc3VtZXJzICovCj4gIHN0YXRpYyBpbnQgcmVh ZF9mcmFtZXMoRmlsdGVyR3JhcGggKmZnLCBGaWx0ZXJHcmFwaFRocmVhZCAqZmd0LAo+IC0gICAg ICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmZyYW1lLCBpbnQgYnVmZmVyKQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIEFWRnJhbWUgKmZyYW1lKQo+ICB7Cj4gICAgICBGaWx0ZXJHcmFwaFBy aXYgKmZncCA9IGZncF9mcm9tX2ZnKGZnKTsKPiAtICAgIGludCByZXQgPSAwOwo+ICsgICAgaW50 IGRpZF9zdGVwID0gMDsKPgo+IC0gICAgaWYgKCFmZy0+Z3JhcGgpCj4gLSAgICAgICAgcmV0dXJu IDA7Cj4gLQo+IC0gICAgLy8gcHJvY2VzcyBidWZmZXJlZCBmcmFtZXMKPiAtICAgIGlmICghYnVm ZmVyKSB7Cj4gLSAgICAgICAgQVZGcmFtZSAqZjsKPiAtCj4gLSAgICAgICAgd2hpbGUgKGF2X2Zp Zm9fcmVhZChmZ3QtPmZyYW1lX3F1ZXVlX291dCwgJmYsIDEpID49IDApIHsKPiAtICAgICAgICAg ICAgaW50IG91dF9pZHggPSAoaW50cHRyX3QpZi0+b3BhcXVlOwo+IC0gICAgICAgICAgICBmLT5v cGFxdWUgPSBOVUxMOwo+IC0gICAgICAgICAgICByZXQgPSB0cV9zZW5kKGZncC0+cXVldWVfb3V0 LCBvdXRfaWR4LCBmKTsKPiAtICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmZik7Cj4gLSAgICAg ICAgICAgIGlmIChyZXQgPCAwICYmIHJldCAhPSBBVkVSUk9SX0VPRikKPiAtICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7Cj4gKyAgICAvLyBncmFwaCBub3QgY29uZmlndXJlZCwganVzdCBzZWxl Y3QgdGhlIGlucHV0IHRvIHJlcXVlc3QKPiArICAgIGlmICghZmctPmdyYXBoKSB7Cj4gKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmZy0+bmJfaW5wdXRzOyBpKyspIHsKPiArICAgICAgICAg ICAgSW5wdXRGaWx0ZXJQcml2ICppZnAgPSBpZnBfZnJvbV9pZmlsdGVyKGZnLT5pbnB1dHNbaV0p Owo+ICsgICAgICAgICAgICBpZiAoaWZwLT5mb3JtYXQgPCAwICYmICFmZ3QtPmVvZl9pbltpXSkg ewo+ICsgICAgICAgICAgICAgICAgZmd0LT5uZXh0X2luID0gaTsKPiArICAgICAgICAgICAgICAg IHJldHVybiAwOwo+ICsgICAgICAgICAgICB9Cj4gICAgICAgICAgfQo+ICsKPiArICAgICAgICAv LyBUaGlzIHN0YXRlIC0gZ3JhcGggaXMgbm90IGNvbmZpZ3VyZWQsIGJ1dCBhbGwgaW5wdXRzIGFy ZSBlaXRoZXIKPiArICAgICAgICAvLyBpbml0aWFsaXplZCBvciBFT0YgLSBzaG91bGQgYmUgdW5y ZWFjaGFibGUgYmVjYXVzZSBzZW5kaW5nIEVPRgo+IHRvIGEKPiArICAgICAgICAvLyBmaWx0ZXIg d2l0aG91dCBldmVuIGEgZmFsbGJhY2sgZm9ybWF0IHNob3VsZCBmYWlsCj4gKyAgICAgICAgYXZf YXNzZXJ0MCgwKTsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUl9CVUc7Cj4gICAgICB9Cj4KPiAt ICAgIC8qIFJlYXAgYWxsIGJ1ZmZlcnMgcHJlc2VudCBpbiB0aGUgYnVmZmVyIHNpbmtzICovCj4g LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZnLT5uYl9vdXRwdXRzOyBpKyspIHsKPiAtICAgICAg ICBPdXRwdXRGaWx0ZXJQcml2ICpvZnAgPSBvZnBfZnJvbV9vZmlsdGVyKGZnLT5vdXRwdXRzW2ld KTsKPiAtICAgICAgICBpbnQgcmV0ID0gMDsKPiArICAgIHdoaWxlIChmZ3AtPm5iX291dHB1dHNf ZG9uZSA8IGZnLT5uYl9vdXRwdXRzKSB7Cj4gKyAgICAgICAgaW50IHJldDsKPgo+IC0gICAgICAg IHdoaWxlICghcmV0KSB7Cj4gLSAgICAgICAgICAgIHJldCA9IGZnX291dHB1dF9zdGVwKG9mcCwg Zmd0LCBmcmFtZSwgYnVmZmVyKTsKPiAtICAgICAgICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ICsgICAgICAgIHJldCA9IGF2ZmlsdGVyX2dyYXBoX3Jl cXVlc3Rfb2xkZXN0KGZnLT5ncmFwaCk7Cj4gKyAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SKEVB R0FJTikpIHsKPiArICAgICAgICAgICAgZmd0LT5uZXh0X2luID0gY2hvb3NlX2lucHV0KGZnLCBm Z3QpOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9IGVsc2UgaWYgKHJldCA8IDAp IHsKPiArICAgICAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SX0VPRikKPiArICAgICAgICAgICAg ICAgIGF2X2xvZyhmZywgQVZfTE9HX1ZFUkJPU0UsICJGaWx0ZXJncmFwaCByZXR1cm5lZCBFT0Ys Cj4gZmluaXNoaW5nXG4iKTsKPiArICAgICAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICAg YXZfbG9nKGZnLCBBVl9MT0dfRVJST1IsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIkVycm9y IHJlcXVlc3RpbmcgYSBmcmFtZSBmcm9tIHRoZSBmaWx0ZXJncmFwaDoKPiAlc1xuIiwKPiArICAg ICAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKHJldCkpOwo+ICsgICAgICAgICAgICByZXR1 cm4gcmV0Owo+ICAgICAgICAgIH0KPiAtICAgIH0KPiArICAgICAgICBmZ3QtPm5leHRfaW4gPSBm Zy0+bmJfaW5wdXRzOwo+Cj4gLSAgICByZXR1cm4gMDsKPiArICAgICAgICAvLyByZXR1cm4gYWZ0 ZXIgb25lIGl0ZXJhdGlvbiwgc28gdGhhdCBzY2hlZHVsZXIgY2FuIHJhdGUtY29udHJvbAo+IHVz Cj4gKyAgICAgICAgaWYgKGRpZF9zdGVwICYmIGZncC0+aGF2ZV9zb3VyY2VzKQo+ICsgICAgICAg ICAgICByZXR1cm4gMDsKPiArCj4gKyAgICAgICAgLyogUmVhcCBhbGwgYnVmZmVycyBwcmVzZW50 IGluIHRoZSBidWZmZXIgc2lua3MgKi8KPiArICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZn LT5uYl9vdXRwdXRzOyBpKyspIHsKPiArICAgICAgICAgICAgT3V0cHV0RmlsdGVyUHJpdiAqb2Zw ID0gb2ZwX2Zyb21fb2ZpbHRlcihmZy0+b3V0cHV0c1tpXSk7Cj4gKwo+ICsgICAgICAgICAgICBy ZXQgPSAwOwo+ICsgICAgICAgICAgICB3aGlsZSAoIXJldCkgewo+ICsgICAgICAgICAgICAgICAg cmV0ID0gZmdfb3V0cHV0X3N0ZXAob2ZwLCBmZ3QsIGZyYW1lKTsKPiArICAgICAgICAgICAgICAg IGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAg ICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICAgICAgZGlkX3N0ZXAgPSAxOwo+ICsgICAgfTsK PiArCj4gKyAgICByZXR1cm4gKGZncC0+bmJfb3V0cHV0c19kb25lID09IGZnLT5uYl9vdXRwdXRz KSA/IEFWRVJST1JfRU9GIDogMDsKPiAgfQo+Cj4gIHN0YXRpYyB2b2lkIHN1YjJ2aWRlb19oZWFy dGJlYXQoSW5wdXRGaWx0ZXIgKmlmaWx0ZXIsIGludDY0X3QgcHRzLAo+IEFWUmF0aW9uYWwgdGIp Cj4gQEAgLTI1NzEsNiArMjUyNiw5IEBAIHN0YXRpYyBpbnQgc2VuZF9lb2YoRmlsdGVyR3JhcGhU aHJlYWQgKmZndCwKPiBJbnB1dEZpbHRlciAqaWZpbHRlciwKPiAgICAgIElucHV0RmlsdGVyUHJp diAqaWZwID0gaWZwX2Zyb21faWZpbHRlcihpZmlsdGVyKTsKPiAgICAgIGludCByZXQ7Cj4KPiAr ICAgIGlmIChmZ3QtPmVvZl9pbltpZnAtPmluZGV4XSkKPiArICAgICAgIHJldHVybiAwOwo+ICsK PiAgICAgIGZndC0+ZW9mX2luW2lmcC0+aW5kZXhdID0gMTsKPgo+ICAgICAgaWYgKGlmcC0+Zmls dGVyKSB7Cj4gQEAgLTI2NzIsNyArMjYzMCw3IEBAIHN0YXRpYyBpbnQgc2VuZF9mcmFtZShGaWx0 ZXJHcmFwaCAqZmcsCj4gRmlsdGVyR3JhcGhUaHJlYWQgKmZndCwKPiAgICAgICAgICAgICAgcmV0 dXJuIHJldDsKPiAgICAgICAgICB9Cj4KPiAtICAgICAgICByZXQgPSBmZy0+Z3JhcGggPyByZWFk X2ZyYW1lcyhmZywgZmd0LCB0bXAsIDEpIDogMDsKPiArICAgICAgICByZXQgPSBmZy0+Z3JhcGgg PyByZWFkX2ZyYW1lcyhmZywgZmd0LCB0bXApIDogMDsKPiAgICAgICAgICBhdl9mcmFtZV9mcmVl KCZ0bXApOwo+ICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICAgICAgICAgICAgICByZXR1cm4gcmV0 Owo+IEBAIC0yNzA1LDgyICsyNjYzLDYgQEAgc3RhdGljIGludCBzZW5kX2ZyYW1lKEZpbHRlckdy YXBoICpmZywKPiBGaWx0ZXJHcmFwaFRocmVhZCAqZmd0LAo+ICAgICAgcmV0dXJuIDA7Cj4gIH0K Pgo+IC1zdGF0aWMgaW50IG1zZ19wcm9jZXNzKEZpbHRlckdyYXBoUHJpdiAqZmdwLCBGaWx0ZXJH cmFwaFRocmVhZCAqZmd0LAo+IC0gICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmZyYW1l KQo+IC17Cj4gLSAgICBjb25zdCBlbnVtIEZyYW1lT3BhcXVlIG1zZyA9IChpbnRwdHJfdClmcmFt ZS0+b3BhcXVlOwo+IC0gICAgRmlsdGVyR3JhcGggICAgICAgICAgICAqZmcgPSAmZmdwLT5mZzsK PiAtICAgIGludCAgICAgICAgICAgICAgZ3JhcGhfZW9mID0gMDsKPiAtICAgIGludCByZXQ7Cj4g LQo+IC0gICAgZnJhbWUtPm9wYXF1ZSA9IE5VTEw7Cj4gLSAgICBhdl9hc3NlcnQwKG1zZyA+IDAp Owo+IC0gICAgYXZfYXNzZXJ0MChtc2cgPT0gRlJBTUVfT1BBUVVFX1NFTkRfQ09NTUFORCB8fCAh ZnJhbWUtPmJ1ZlswXSk7Cj4gLQo+IC0gICAgaWYgKCFmZy0+Z3JhcGgpIHsKPiAtICAgICAgICAv LyBncmFwaCBub3QgY29uZmlndXJlZCB5ZXQsIGlnbm9yZSBhbGwgbWVzc2FnZXMgb3RoZXIgdGhh bgo+IGNob29zaW5nCj4gLSAgICAgICAgLy8gdGhlIGlucHV0IHRvIHJlYWQgZnJvbQo+IC0gICAg ICAgIGlmIChtc2cgIT0gRlJBTUVfT1BBUVVFX0NIT09TRV9JTlBVVCkgewo+IC0gICAgICAgICAg ICBhdl9mcmFtZV91bnJlZihmcmFtZSk7Cj4gLSAgICAgICAgICAgIGdvdG8gZG9uZTsKPiAtICAg ICAgICB9Cj4gLQo+IC0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmctPm5iX2lucHV0czsg aSsrKSB7Cj4gLSAgICAgICAgICAgIElucHV0RmlsdGVyICppZmlsdGVyID0gZmctPmlucHV0c1tp XTsKPiAtICAgICAgICAgICAgSW5wdXRGaWx0ZXJQcml2ICppZnAgPSBpZnBfZnJvbV9pZmlsdGVy KGlmaWx0ZXIpOwo+IC0gICAgICAgICAgICBpZiAoaWZwLT5mb3JtYXQgPCAwICYmICFmZ3QtPmVv Zl9pbltpXSkgewo+IC0gICAgICAgICAgICAgICAgZnJhbWUtPm9wYXF1ZSA9ICh2b2lkKikoaW50 cHRyX3QpKGkgKyAxKTsKPiAtICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKPiAtICAgICAgICAg ICAgfQo+IC0gICAgICAgIH0KPiAtCj4gLSAgICAgICAgLy8gVGhpcyBzdGF0ZSAtIGdyYXBoIGlz IG5vdCBjb25maWd1cmVkLCBidXQgYWxsIGlucHV0cyBhcmUgZWl0aGVyCj4gLSAgICAgICAgLy8g aW5pdGlhbGl6ZWQgb3IgRU9GIC0gc2hvdWxkIGJlIHVucmVhY2hhYmxlIGJlY2F1c2Ugc2VuZGlu ZyBFT0YKPiB0byBhCj4gLSAgICAgICAgLy8gZmlsdGVyIHdpdGhvdXQgZXZlbiBhIGZhbGxiYWNr IGZvcm1hdCBzaG91bGQgZmFpbAo+IC0gICAgICAgIGF2X2Fzc2VydDAoMCk7Cj4gLSAgICAgICAg cmV0dXJuIEFWRVJST1JfQlVHOwo+IC0gICAgfQo+IC0KPiAtICAgIGlmIChtc2cgPT0gRlJBTUVf T1BBUVVFX1NFTkRfQ09NTUFORCkgewo+IC0gICAgICAgIEZpbHRlckNvbW1hbmQgKmZjID0gKEZp bHRlckNvbW1hbmQqKWZyYW1lLT5idWZbMF0tPmRhdGE7Cj4gLSAgICAgICAgc2VuZF9jb21tYW5k KGZnLCBmYy0+dGltZSwgZmMtPnRhcmdldCwgZmMtPmNvbW1hbmQsIGZjLT5hcmcsCj4gZmMtPmFs bF9maWx0ZXJzKTsKPiAtICAgICAgICBhdl9mcmFtZV91bnJlZihmcmFtZSk7Cj4gLSAgICAgICAg Z290byBkb25lOwo+IC0gICAgfQo+IC0KPiAtICAgIGlmIChtc2cgPT0gRlJBTUVfT1BBUVVFX0NI T09TRV9JTlBVVCkgewo+IC0gICAgICAgIHJldCA9IGF2ZmlsdGVyX2dyYXBoX3JlcXVlc3Rfb2xk ZXN0KGZnLT5ncmFwaCk7Cj4gLQo+IC0gICAgICAgIGdyYXBoX2VvZiA9IHJldCA9PSBBVkVSUk9S X0VPRjsKPiAtCj4gLSAgICAgICAgaWYgKHJldCA9PSBBVkVSUk9SKEVBR0FJTikpIHsKPiAtICAg ICAgICAgICAgZnJhbWUtPm9wYXF1ZSA9ICh2b2lkKikoaW50cHRyX3QpKGNob29zZV9pbnB1dChm ZywgZmd0KSArIDEpOwo+IC0gICAgICAgICAgICBnb3RvIGRvbmU7Cj4gLSAgICAgICAgfSBlbHNl IGlmIChyZXQgPCAwICYmICFncmFwaF9lb2YpCj4gLSAgICAgICAgICAgIHJldHVybiByZXQ7Cj4g LSAgICB9Cj4gLQo+IC0gICAgcmV0ID0gcmVhZF9mcmFtZXMoZmcsIGZndCwgZnJhbWUsIDApOwo+ IC0gICAgaWYgKHJldCA8IDApIHsKPiAtICAgICAgICBhdl9sb2coZmcsIEFWX0xPR19FUlJPUiwg IkVycm9yIHNlbmRpbmcgZmlsdGVyZWQgZnJhbWVzIGZvcgo+IGVuY29kaW5nXG4iKTsKPiAtICAg ICAgICByZXR1cm4gcmV0Owo+IC0gICAgfQo+IC0KPiAtICAgIGlmIChncmFwaF9lb2YpCj4gLSAg ICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+IC0KPiAtICAgIC8vIHNpZ25hbCB0byB0aGUgbWFp biB0aHJlYWQgdGhhdCB3ZSBhcmUgZG9uZSBwcm9jZXNzaW5nIHRoZSBtZXNzYWdlCj4gLWRvbmU6 Cj4gLSAgICByZXQgPSB0cV9zZW5kKGZncC0+cXVldWVfb3V0LCBmZy0+bmJfb3V0cHV0cywgZnJh bWUpOwo+IC0gICAgaWYgKHJldCA8IDApIHsKPiAtICAgICAgICBpZiAocmV0ICE9IEFWRVJST1Jf RU9GKQo+IC0gICAgICAgICAgICBhdl9sb2coZmcsIEFWX0xPR19FUlJPUiwgIkVycm9yIGNvbW11 bmljYXRpbmcgd2l0aCB0aGUgbWFpbgo+IHRocmVhZFxuIik7Cj4gLSAgICAgICAgcmV0dXJuIHJl dDsKPiAtICAgIH0KPiAtCj4gLSAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQg ZmdfdGhyZWFkX3NldF9uYW1lKGNvbnN0IEZpbHRlckdyYXBoICpmZykKPiAgewo+ICAgICAgY2hh ciBuYW1lWzE2XTsKPiBAQCAtMjg2NywyOTQgKzI3NDksOTQgQEAgc3RhdGljIHZvaWQgKmZpbHRl cl90aHJlYWQodm9pZCAqYXJnKQo+ICAgICAgICAgIElucHV0RmlsdGVyICppZmlsdGVyOwo+ICAg ICAgICAgIElucHV0RmlsdGVyUHJpdiAqaWZwOwo+ICAgICAgICAgIGVudW0gRnJhbWVPcGFxdWUg bzsKPiAtICAgICAgICBpbnQgaW5wdXRfaWR4LCBlb2ZfZnJhbWU7Cj4gKyAgICAgICAgdW5zaWdu ZWQgaW5wdXRfaWR4ID0gZmd0Lm5leHRfaW47Cj4KPiAtICAgICAgICBpbnB1dF9zdGF0dXMgPSB0 cV9yZWNlaXZlKGZncC0+cXVldWVfaW4sICZpbnB1dF9pZHgsIGZndC5mcmFtZSk7Cj4gLSAgICAg ICAgaWYgKGlucHV0X2lkeCA8IDAgfHwKPiAtICAgICAgICAgICAgKGlucHV0X2lkeCA9PSBmZy0+ bmJfaW5wdXRzICYmIGlucHV0X3N0YXR1cyA8IDApKSB7Cj4gKyAgICAgICAgaW5wdXRfc3RhdHVz ID0gc2NoX2ZpbHRlcl9yZWNlaXZlKGZncC0+c2NoLCBmZ3AtPnNjaF9pZHgsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dF9pZHgsIGZndC5mcmFtZSk7 Cj4gKyAgICAgICAgaWYgKGlucHV0X3N0YXR1cyA9PSBBVkVSUk9SX0VPRikgewo+ICAgICAgICAg ICAgICBhdl9sb2coZmcsIEFWX0xPR19WRVJCT1NFLCAiRmlsdGVyaW5nIHRocmVhZCByZWNlaXZl ZCBFT0ZcbiIpOwo+ICAgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9IGVsc2UgaWYgKGlu cHV0X3N0YXR1cyA9PSBBVkVSUk9SKEVBR0FJTikpIHsKPiArICAgICAgICAgICAgLy8gc2hvdWxk IG9ubHkgaGFwcGVuIHdoZW4gd2UgZGlkbid0IHJlcXVlc3QgYW55IGlucHV0Cj4gKyAgICAgICAg ICAgIGF2X2Fzc2VydDAoaW5wdXRfaWR4ID09IGZnLT5uYl9pbnB1dHMpOwo+ICsgICAgICAgICAg ICBnb3RvIHJlYWRfZnJhbWVzOwo+ICAgICAgICAgIH0KPiArICAgICAgICBhdl9hc3NlcnQwKGlu cHV0X3N0YXR1cyA+PSAwKTsKPiArCj4gKyAgICAgICAgbyA9IChpbnRwdHJfdClmZ3QuZnJhbWUt Pm9wYXF1ZTsKPgo+ICAgICAgICAgIG8gPSAoaW50cHRyX3QpZmd0LmZyYW1lLT5vcGFxdWU7Cj4K PiAgICAgICAgICAvLyBtZXNzYWdlIG9uIHRoZSBjb250cm9sIHN0cmVhbQo+ICAgICAgICAgIGlm IChpbnB1dF9pZHggPT0gZmctPm5iX2lucHV0cykgewo+IC0gICAgICAgICAgICByZXQgPSBtc2df cHJvY2VzcyhmZ3AsICZmZ3QsIGZndC5mcmFtZSk7Cj4gLSAgICAgICAgICAgIGlmIChyZXQgPCAw KQo+IC0gICAgICAgICAgICAgICAgZ290byBmaW5pc2g7Cj4gKyAgICAgICAgICAgIEZpbHRlckNv bW1hbmQgKmZjOwo+Cj4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAobyA9PSBGUkFNRV9PUEFRVUVf U0VORF9DT01NQU5EICYmCj4gZmd0LmZyYW1lLT5idWZbMF0pOwo+ICsKPiArICAgICAgICAgICAg ZmMgPSAoRmlsdGVyQ29tbWFuZCopZmd0LmZyYW1lLT5idWZbMF0tPmRhdGE7Cj4gKyAgICAgICAg ICAgIHNlbmRfY29tbWFuZChmZywgZmMtPnRpbWUsIGZjLT50YXJnZXQsIGZjLT5jb21tYW5kLCBm Yy0+YXJnLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZmMtPmFsbF9maWx0ZXJzKTsKPiAr ICAgICAgICAgICAgYXZfZnJhbWVfdW5yZWYoZmd0LmZyYW1lKTsKPiAgICAgICAgICAgICAgY29u dGludWU7Cj4gICAgICAgICAgfQo+Cj4gICAgICAgICAgLy8gd2UgcmVjZWl2ZWQgYW4gaW5wdXQg ZnJhbWUgb3IgRU9GCj4gICAgICAgICAgaWZpbHRlciAgID0gZmctPmlucHV0c1tpbnB1dF9pZHhd Owo+ICAgICAgICAgIGlmcCAgICAgICA9IGlmcF9mcm9tX2lmaWx0ZXIoaWZpbHRlcik7Cj4gLSAg ICAgICAgZW9mX2ZyYW1lID0gaW5wdXRfc3RhdHVzID49IDAgJiYgbyA9PSBGUkFNRV9PUEFRVUVf RU9GOwo+ICsKPiAgICAgICAgICBpZiAoaWZwLT50eXBlX3NyYyA9PSBBVk1FRElBX1RZUEVfU1VC VElUTEUpIHsKPiAgICAgICAgICAgICAgaW50IGhiX2ZyYW1lID0gaW5wdXRfc3RhdHVzID49IDAg JiYgbyA9PQo+IEZSQU1FX09QQVFVRV9TVUJfSEVBUlRCRUFUOwo+ICAgICAgICAgICAgICByZXQg PSBzdWIydmlkZW9fZnJhbWUoaWZpbHRlciwgKGZndC5mcmFtZS0+YnVmWzBdIHx8Cj4gaGJfZnJh bWUpID8gZmd0LmZyYW1lIDogTlVMTCk7Cj4gLSAgICAgICAgfSBlbHNlIGlmIChpbnB1dF9zdGF0 dXMgPj0gMCAmJiBmZ3QuZnJhbWUtPmJ1ZlswXSkgewo+ICsgICAgICAgIH0gZWxzZSBpZiAoZmd0 LmZyYW1lLT5idWZbMF0pIHsKPiAgICAgICAgICAgICAgcmV0ID0gc2VuZF9mcmFtZShmZywgJmZn dCwgaWZpbHRlciwgZmd0LmZyYW1lKTsKPiAgICAgICAgICB9IGVsc2Ugewo+IC0gICAgICAgICAg ICBpbnQ2NF90ICAgcHRzID0gaW5wdXRfc3RhdHVzID49IDAgPyBmZ3QuZnJhbWUtPnB0cyA6Cj4g QVZfTk9QVFNfVkFMVUU7Cj4gLSAgICAgICAgICAgIEFWUmF0aW9uYWwgdGIgPSBpbnB1dF9zdGF0 dXMgPj0gMCA/IGZndC5mcmFtZS0+dGltZV9iYXNlIDoKPiAoQVZSYXRpb25hbCl7IDEsIDEgfTsK PiAtICAgICAgICAgICAgcmV0ID0gc2VuZF9lb2YoJmZndCwgaWZpbHRlciwgcHRzLCB0Yik7Cj4g KyAgICAgICAgICAgIGF2X2Fzc2VydDEobyA9PSBGUkFNRV9PUEFRVUVfRU9GKTsKPiArICAgICAg ICAgICAgcmV0ID0gc2VuZF9lb2YoJmZndCwgaWZpbHRlciwgZmd0LmZyYW1lLT5wdHMsCj4gZmd0 LmZyYW1lLT50aW1lX2Jhc2UpOwo+ICAgICAgICAgIH0KPiAgICAgICAgICBhdl9mcmFtZV91bnJl ZihmZ3QuZnJhbWUpOwo+ICAgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICBnb3Rv IGZpbmlzaDsKPiArCj4gK3JlYWRfZnJhbWVzOgo+ICsgICAgICAgIC8vIHJldHJpZXZlIGFsbCBu ZXdseSBhdmFsYWJsZSBmcmFtZXMKPiArICAgICAgICByZXQgPSByZWFkX2ZyYW1lcyhmZywgJmZn dCwgZmd0LmZyYW1lKTsKPiArICAgICAgICBpZiAocmV0ID09IEFWRVJST1JfRU9GKSB7Cj4gKyAg ICAgICAgICAgIGF2X2xvZyhmZywgQVZfTE9HX1ZFUkJPU0UsICJBbGwgY29uc3VtZXJzIHJldHVy bmVkIEVPRlxuIik7Cj4gICAgICAgICAgICAgIGJyZWFrOwo+IC0KPiAtICAgICAgICBpZiAoZW9m X2ZyYW1lKSB7Cj4gLSAgICAgICAgICAgIC8vIGFuIEVPRiBmcmFtZSBpcyBpbW1lZGlhdGVseSBm b2xsb3dlZCBieSBzZW5kZXIgY2xvc2luZwo+IC0gICAgICAgICAgICAvLyB0aGUgY29ycmVzcG9u ZGluZyBzdHJlYW0sIHNvIHJldHJpZXZlIHRoYXQgZXZlbnQKPiAtICAgICAgICAgICAgaW5wdXRf c3RhdHVzID0gdHFfcmVjZWl2ZShmZ3AtPnF1ZXVlX2luLCAmaW5wdXRfaWR4LAo+IGZndC5mcmFt ZSk7Cj4gLSAgICAgICAgICAgIGF2X2Fzc2VydDAoaW5wdXRfc3RhdHVzID09IEFWRVJST1JfRU9G ICYmIGlucHV0X2lkeCA9PQo+IGlmcC0+aW5kZXgpOwo+IC0gICAgICAgIH0KPiAtCj4gLSAgICAg ICAgLy8gc2lnbmFsIHRvIHRoZSBtYWluIHRocmVhZCB0aGF0IHdlIGFyZSBkb25lCj4gLSAgICAg ICAgcmV0ID0gdHFfc2VuZChmZ3AtPnF1ZXVlX291dCwgZmctPm5iX291dHB1dHMsIGZndC5mcmFt ZSk7Cj4gLSAgICAgICAgaWYgKHJldCA8IDApIHsKPiAtICAgICAgICAgICAgaWYgKHJldCA9PSBB VkVSUk9SX0VPRikKPiAtICAgICAgICAgICAgICAgIGJyZWFrOwo+IC0KPiAtICAgICAgICAgICAg YXZfbG9nKGZnLCBBVl9MT0dfRVJST1IsICJFcnJvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIG1h aW4KPiB0aHJlYWRcbiIpOwo+ICsgICAgICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgewo+ICsgICAg ICAgICAgICBhdl9sb2coZmcsIEFWX0xPR19FUlJPUiwgIkVycm9yIHNlbmRpbmcgZnJhbWVzIHRv IGNvbnN1bWVyczoKPiAlc1xuIiwKPiArICAgICAgICAgICAgICAgICAgIGF2X2VycjJzdHIocmV0 KSk7Cj4gICAgICAgICAgICAgIGdvdG8gZmluaXNoOwo+ICAgICAgICAgIH0KPiAgICAgIH0KPgo+ ICsgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZnLT5uYl9vdXRwdXRzOyBpKyspIHsKPiAr ICAgICAgICBPdXRwdXRGaWx0ZXJQcml2ICpvZnAgPSBvZnBfZnJvbV9vZmlsdGVyKGZnLT5vdXRw dXRzW2ldKTsKPiArCj4gKyAgICAgICAgaWYgKGZndC5lb2Zfb3V0W2ldKQo+ICsgICAgICAgICAg ICBjb250aW51ZTsKPiArCj4gKyAgICAgICAgcmV0ID0gZmdfb3V0cHV0X2ZyYW1lKG9mcCwgJmZn dCwgTlVMTCk7Cj4gKyAgICAgICAgaWYgKHJldCA8IDApCj4gKyAgICAgICAgICAgIGdvdG8gZmlu aXNoOwo+ICsgICAgfQo+ICsKPiAgZmluaXNoOgo+ICAgICAgLy8gRU9GIGlzIG5vcm1hbCB0ZXJt aW5hdGlvbgo+ICAgICAgaWYgKHJldCA9PSBBVkVSUk9SX0VPRikKPiAgICAgICAgICByZXQgPSAw Owo+Cj4gLSAgICBmb3IgKGludCBpID0gMDsgaSA8PSBmZy0+bmJfaW5wdXRzOyBpKyspCj4gLSAg ICAgICAgdHFfcmVjZWl2ZV9maW5pc2goZmdwLT5xdWV1ZV9pbiwgaSk7Cj4gLSAgICBmb3IgKGlu dCBpID0gMDsgaSA8PSBmZy0+bmJfb3V0cHV0czsgaSsrKQo+IC0gICAgICAgIHRxX3NlbmRfZmlu aXNoKGZncC0+cXVldWVfb3V0LCBpKTsKPiAtCj4gICAgICBmZ190aHJlYWRfdW5pbml0KCZmZ3Qp Owo+Cj4gLSAgICBhdl9sb2coZmcsIEFWX0xPR19WRVJCT1NFLCAiVGVybWluYXRpbmcgZmlsdGVy aW5nIHRocmVhZFxuIik7Cj4gLQo+ICAgICAgcmV0dXJuICh2b2lkKikoaW50cHRyX3QpcmV0Owo+ ICB9Cj4KPiAtc3RhdGljIGludCB0aHJlYWRfc2VuZF9mcmFtZShGaWx0ZXJHcmFwaFByaXYgKmZn cCwgSW5wdXRGaWx0ZXIgKmlmaWx0ZXIsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZGcmFtZSAqZnJhbWUsIGVudW0gRnJhbWVPcGFxdWUgdHlwZSkKPiAtewo+IC0gICAgSW5wdXRG aWx0ZXJQcml2ICppZnAgPSBpZnBfZnJvbV9pZmlsdGVyKGlmaWx0ZXIpOwo+IC0gICAgaW50IG91 dHB1dF9pZHgsIHJldDsKPiAtCj4gLSAgICBpZiAoaWZwLT5lb2YpIHsKPiAtICAgICAgICBhdl9m cmFtZV91bnJlZihmcmFtZSk7Cj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+IC0gICAg fQo+IC0KPiAtICAgIGZyYW1lLT5vcGFxdWUgPSAodm9pZCopKGludHB0cl90KXR5cGU7Cj4gLQo+ IC0gICAgcmV0ID0gdHFfc2VuZChmZ3AtPnF1ZXVlX2luLCBpZnAtPmluZGV4LCBmcmFtZSk7Cj4g LSAgICBpZiAocmV0IDwgMCkgewo+IC0gICAgICAgIGlmcC0+ZW9mID0gMTsKPiAtICAgICAgICBh dl9mcmFtZV91bnJlZihmcmFtZSk7Cj4gLSAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgIH0KPiAt Cj4gLSAgICBpZiAodHlwZSA9PSBGUkFNRV9PUEFRVUVfRU9GKQo+IC0gICAgICAgIHRxX3NlbmRf ZmluaXNoKGZncC0+cXVldWVfaW4sIGlmcC0+aW5kZXgpOwo+IC0KPiAtICAgIC8vIHdhaXQgZm9y IHRoZSBmcmFtZSB0byBiZSBwcm9jZXNzZWQKPiAtICAgIHJldCA9IHRxX3JlY2VpdmUoZmdwLT5x dWV1ZV9vdXQsICZvdXRwdXRfaWR4LCBmcmFtZSk7Cj4gLSAgICBhdl9hc3NlcnQwKG91dHB1dF9p ZHggPT0gZmdwLT5mZy5uYl9vdXRwdXRzIHx8IHJldCA9PSBBVkVSUk9SX0VPRik7Cj4gLQo+IC0g ICAgcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAtaW50IGlmaWx0ZXJfc2VuZF9mcmFtZShJbnB1dEZp bHRlciAqaWZpbHRlciwgQVZGcmFtZSAqZnJhbWUsIGludAo+IGtlZXBfcmVmZXJlbmNlKQo+IC17 Cj4gLSAgICBGaWx0ZXJHcmFwaFByaXYgKmZncCA9IGZncF9mcm9tX2ZnKGlmaWx0ZXItPmdyYXBo KTsKPiAtICAgIGludCByZXQ7Cj4gLQo+IC0gICAgaWYgKGtlZXBfcmVmZXJlbmNlKSB7Cj4gLSAg ICAgICAgcmV0ID0gYXZfZnJhbWVfcmVmKGZncC0+ZnJhbWUsIGZyYW1lKTsKPiAtICAgICAgICBp ZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgIH0gZWxzZQo+IC0g ICAgICAgIGF2X2ZyYW1lX21vdmVfcmVmKGZncC0+ZnJhbWUsIGZyYW1lKTsKPiAtCj4gLSAgICBy ZXR1cm4gdGhyZWFkX3NlbmRfZnJhbWUoZmdwLCBpZmlsdGVyLCBmZ3AtPmZyYW1lLCAwKTsKPiAt fQo+IC0KPiAtaW50IGlmaWx0ZXJfc2VuZF9lb2YoSW5wdXRGaWx0ZXIgKmlmaWx0ZXIsIGludDY0 X3QgcHRzLCBBVlJhdGlvbmFsIHRiKQo+IC17Cj4gLSAgICBGaWx0ZXJHcmFwaFByaXYgKmZncCA9 IGZncF9mcm9tX2ZnKGlmaWx0ZXItPmdyYXBoKTsKPiAtICAgIGludCByZXQ7Cj4gLQo+IC0gICAg ZmdwLT5mcmFtZS0+cHRzICAgICAgID0gcHRzOwo+IC0gICAgZmdwLT5mcmFtZS0+dGltZV9iYXNl ID0gdGI7Cj4gLQo+IC0gICAgcmV0ID0gdGhyZWFkX3NlbmRfZnJhbWUoZmdwLCBpZmlsdGVyLCBm Z3AtPmZyYW1lLCBGUkFNRV9PUEFRVUVfRU9GKTsKPiAtCj4gLSAgICByZXR1cm4gcmV0ID09IEFW RVJST1JfRU9GID8gMCA6IHJldDsKPiAtfQo+IC0KPiAtdm9pZCBpZmlsdGVyX3N1YjJ2aWRlb19o ZWFydGJlYXQoSW5wdXRGaWx0ZXIgKmlmaWx0ZXIsIGludDY0X3QgcHRzLAo+IEFWUmF0aW9uYWwg dGIpCj4gLXsKPiAtICAgIEZpbHRlckdyYXBoUHJpdiAqZmdwID0gZmdwX2Zyb21fZmcoaWZpbHRl ci0+Z3JhcGgpOwo+IC0KPiAtICAgIGZncC0+ZnJhbWUtPnB0cyAgICAgICA9IHB0czsKPiAtICAg IGZncC0+ZnJhbWUtPnRpbWVfYmFzZSA9IHRiOwo+IC0KPiAtICAgIHRocmVhZF9zZW5kX2ZyYW1l KGZncCwgaWZpbHRlciwgZmdwLT5mcmFtZSwKPiBGUkFNRV9PUEFRVUVfU1VCX0hFQVJUQkVBVCk7 Cj4gLX0KPiAtCj4gLWludCBmZ190cmFuc2NvZGVfc3RlcChGaWx0ZXJHcmFwaCAqZ3JhcGgsIElu cHV0U3RyZWFtICoqYmVzdF9pc3QpCj4gLXsKPiAtICAgIEZpbHRlckdyYXBoUHJpdiAqZmdwID0g ZmdwX2Zyb21fZmcoZ3JhcGgpOwo+IC0gICAgaW50IHJldCwgZ290X2ZyYW1lcyA9IDA7Cj4gLQo+ IC0gICAgaWYgKGZncC0+ZW9mX2luKQo+IC0gICAgICAgIHJldHVybiBBVkVSUk9SX0VPRjsKPiAt Cj4gLSAgICAvLyBzaWduYWwgdG8gdGhlIGZpbHRlcmluZyB0aHJlYWQgdG8gcmV0dXJuIGFsbCBm cmFtZXMgaXQgY2FuCj4gLSAgICBhdl9hc3NlcnQwKCFmZ3AtPmZyYW1lLT5idWZbMF0pOwo+IC0g ICAgZmdwLT5mcmFtZS0+b3BhcXVlID0gKHZvaWQqKShpbnRwdHJfdCkoYmVzdF9pc3QgICAgICAg ICAgICAgPwo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJB TUVfT1BBUVVFX0NIT09TRV9JTlBVVCA6Cj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGUkFNRV9PUEFRVUVfUkVBUF9GSUxURVJTKTsKPiAtCj4gLSAgICByZXQg PSB0cV9zZW5kKGZncC0+cXVldWVfaW4sIGdyYXBoLT5uYl9pbnB1dHMsIGZncC0+ZnJhbWUpOwo+ IC0gICAgaWYgKHJldCA8IDApIHsKPiAtICAgICAgICBmZ3AtPmVvZl9pbiA9IDE7Cj4gLSAgICAg ICAgZ290byBmaW5pc2g7Cj4gLSAgICB9Cj4gLQo+IC0gICAgd2hpbGUgKDEpIHsKPiAtICAgICAg ICBPdXRwdXRGaWx0ZXIgKm9maWx0ZXI7Cj4gLSAgICAgICAgT3V0cHV0RmlsdGVyUHJpdiAqb2Zw Owo+IC0gICAgICAgIE91dHB1dFN0cmVhbSAqb3N0Owo+IC0gICAgICAgIGludCBvdXRwdXRfaWR4 Owo+IC0KPiAtICAgICAgICByZXQgPSB0cV9yZWNlaXZlKGZncC0+cXVldWVfb3V0LCAmb3V0cHV0 X2lkeCwgZmdwLT5mcmFtZSk7Cj4gLQo+IC0gICAgICAgIC8vIEVPRiBvbiB0aGUgd2hvbGUgcXVl dWUgb3IgdGhlIGNvbnRyb2wgc3RyZWFtCj4gLSAgICAgICAgaWYgKG91dHB1dF9pZHggPCAwIHx8 Cj4gLSAgICAgICAgICAgIChyZXQgPCAwICYmIG91dHB1dF9pZHggPT0gZ3JhcGgtPm5iX291dHB1 dHMpKQo+IC0gICAgICAgICAgICBnb3RvIGZpbmlzaDsKPiAtCj4gLSAgICAgICAgLy8gRU9GIGZv ciBhIHNwZWNpZmljIHN0cmVhbQo+IC0gICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gLSAgICAgICAg ICAgIG9maWx0ZXIgPSBncmFwaC0+b3V0cHV0c1tvdXRwdXRfaWR4XTsKPiAtICAgICAgICAgICAg b2ZwICAgICA9IG9mcF9mcm9tX29maWx0ZXIob2ZpbHRlcik7Cj4gLQo+IC0gICAgICAgICAgICAv LyB3ZSBhcmUgZmluaXNoZWQgYW5kIG5vIGZyYW1lcyB3ZXJlIGV2ZXIgc2VlbiBhdCB0aGlzCj4g b3V0cHV0LAo+IC0gICAgICAgICAgICAvLyBhdCBsZWFzdCBpbml0aWFsaXplIHRoZSBlbmNvZGVy IHdpdGggYSBkdW1teSBmcmFtZQo+IC0gICAgICAgICAgICBpZiAoIW9mcC0+Z290X2ZyYW1lKSB7 Cj4gLSAgICAgICAgICAgICAgICBBVkZyYW1lICpmcmFtZSA9IGZncC0+ZnJhbWU7Cj4gLSAgICAg ICAgICAgICAgICBGcmFtZURhdGEgKmZkOwo+IC0KPiAtICAgICAgICAgICAgICAgIGZyYW1lLT50 aW1lX2Jhc2UgICA9IG9mcC0+dGJfb3V0Owo+IC0gICAgICAgICAgICAgICAgZnJhbWUtPmZvcm1h dCAgICAgID0gb2ZwLT5mb3JtYXQ7Cj4gLQo+IC0gICAgICAgICAgICAgICAgZnJhbWUtPndpZHRo ICAgICAgICAgICAgICAgPSBvZnAtPndpZHRoOwo+IC0gICAgICAgICAgICAgICAgZnJhbWUtPmhl aWdodCAgICAgICAgICAgICAgPSBvZnAtPmhlaWdodDsKPiAtICAgICAgICAgICAgICAgIGZyYW1l LT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gb2ZwLT5zYW1wbGVfYXNwZWN0X3JhdGlvOwo+IC0KPiAt ICAgICAgICAgICAgICAgIGZyYW1lLT5zYW1wbGVfcmF0ZSA9IG9mcC0+c2FtcGxlX3JhdGU7Cj4g LSAgICAgICAgICAgICAgICBpZiAob2ZwLT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpIHsKPiAtICAg ICAgICAgICAgICAgICAgICByZXQgPSBhdl9jaGFubmVsX2xheW91dF9jb3B5KCZmcmFtZS0+Y2hf bGF5b3V0LAo+ICZvZnAtPmNoX2xheW91dCk7Cj4gLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl dCA8IDApCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICAgICAg ICAgICAgICB9Cj4gLQo+IC0gICAgICAgICAgICAgICAgZmQgPSBmcmFtZV9kYXRhKGZyYW1lKTsK PiAtICAgICAgICAgICAgICAgIGlmICghZmQpCj4gLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKPiAtCj4gLSAgICAgICAgICAgICAgICBmZC0+ZnJhbWVfcmF0ZV9m aWx0ZXIgPSBvZnAtPmZwcy5mcmFtZXJhdGU7Cj4gLQo+IC0gICAgICAgICAgICAgICAgYXZfYXNz ZXJ0MCghZnJhbWUtPmJ1ZlswXSk7Cj4gLQo+IC0gICAgICAgICAgICAgICAgYXZfbG9nKG9maWx0 ZXItPm9zdCwgQVZfTE9HX1dBUk5JTkcsCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIk5vIGZp bHRlcmVkIGZyYW1lcyBmb3Igb3V0cHV0IHN0cmVhbSwgdHJ5aW5nIHRvICIKPiAtICAgICAgICAg ICAgICAgICAgICAgICAiaW5pdGlhbGl6ZSBhbnl3YXkuXG4iKTsKPiAtCj4gLSAgICAgICAgICAg ICAgICBlbmNfb3BlbihvZmlsdGVyLT5vc3QsIGZyYW1lKTsKPiAtICAgICAgICAgICAgICAgIGF2 X2ZyYW1lX3VucmVmKGZyYW1lKTsKPiAtICAgICAgICAgICAgfQo+IC0KPiAtICAgICAgICAgICAg Y2xvc2Vfb3V0cHV0X3N0cmVhbShncmFwaC0+b3V0cHV0c1tvdXRwdXRfaWR4XS0+b3N0KTsKPiAt ICAgICAgICAgICAgY29udGludWU7Cj4gLSAgICAgICAgfQo+IC0KPiAtICAgICAgICAvLyByZXF1 ZXN0IHdhcyBmdWxseSBwcm9jZXNzZWQgYnkgdGhlIGZpbHRlcmluZyB0aHJlYWQsCj4gLSAgICAg ICAgLy8gcmV0dXJuIHRoZSBpbnB1dCBzdHJlYW0gdG8gcmVhZCBmcm9tLCBpZiBuZWVkZWQKPiAt ICAgICAgICBpZiAob3V0cHV0X2lkeCA9PSBncmFwaC0+bmJfb3V0cHV0cykgewo+IC0gICAgICAg ICAgICBpbnQgaW5wdXRfaWR4ID0gKGludHB0cl90KWZncC0+ZnJhbWUtPm9wYXF1ZSAtIDE7Cj4g LSAgICAgICAgICAgIGF2X2Fzc2VydDAoaW5wdXRfaWR4IDw9IGdyYXBoLT5uYl9pbnB1dHMpOwo+ IC0KPiAtICAgICAgICAgICAgaWYgKGJlc3RfaXN0KSB7Cj4gLSAgICAgICAgICAgICAgICAqYmVz dF9pc3QgPSAoaW5wdXRfaWR4ID49IDAgJiYgaW5wdXRfaWR4IDwKPiBncmFwaC0+bmJfaW5wdXRz KSA/Cj4gLQo+IGlmcF9mcm9tX2lmaWx0ZXIoZ3JhcGgtPmlucHV0c1tpbnB1dF9pZHhdKS0+aXN0 IDogTlVMTDsKPiAtCj4gLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRfaWR4IDwgMCAmJiAhZ290 X2ZyYW1lcykgewo+IC0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3Jh cGgtPm5iX291dHB1dHM7IGkrKykKPiAtICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGgtPm91 dHB1dHNbaV0tPm9zdC0+dW5hdmFpbGFibGUgPSAxOwo+IC0gICAgICAgICAgICAgICAgfQo+IC0g ICAgICAgICAgICB9Cj4gLSAgICAgICAgICAgIGJyZWFrOwo+IC0gICAgICAgIH0KPiAtCj4gLSAg ICAgICAgLy8gZ290IGEgZnJhbWUgZnJvbSB0aGUgZmlsdGVyaW5nIHRocmVhZCwgc2VuZCBpdCBm b3IgZW5jb2RpbmcKPiAtICAgICAgICBvZmlsdGVyID0gZ3JhcGgtPm91dHB1dHNbb3V0cHV0X2lk eF07Cj4gLSAgICAgICAgb3N0ICAgICA9IG9maWx0ZXItPm9zdDsKPiAtICAgICAgICBvZnAgICAg ID0gb2ZwX2Zyb21fb2ZpbHRlcihvZmlsdGVyKTsKPiAtCj4gLSAgICAgICAgaWYgKG9zdC0+Zmlu aXNoZWQpIHsKPiAtICAgICAgICAgICAgYXZfZnJhbWVfdW5yZWYoZmdwLT5mcmFtZSk7Cj4gLSAg ICAgICAgICAgIHRxX3JlY2VpdmVfZmluaXNoKGZncC0+cXVldWVfb3V0LCBvdXRwdXRfaWR4KTsK PiAtICAgICAgICAgICAgY29udGludWU7Cj4gLSAgICAgICAgfQo+IC0KPiAtICAgICAgICBpZiAo ZmdwLT5mcmFtZS0+cHRzICE9IEFWX05PUFRTX1ZBTFVFKSB7Cj4gLSAgICAgICAgICAgIG9maWx0 ZXItPmxhc3RfcHRzID0gYXZfcmVzY2FsZV9xKGZncC0+ZnJhbWUtPnB0cywKPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmdwLT5mcmFtZS0+dGltZV9iYXNl LAo+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVl9USU1F X0JBU0VfUSk7Cj4gLSAgICAgICAgfQo+IC0KPiAtICAgICAgICByZXQgPSBlbmNfZnJhbWUob3N0 LCBmZ3AtPmZyYW1lKTsKPiAtICAgICAgICBhdl9mcmFtZV91bnJlZihmZ3AtPmZyYW1lKTsKPiAt ICAgICAgICBpZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgZ290byBmaW5pc2g7Cj4gLQo+IC0g ICAgICAgIG9mcC0+Z290X2ZyYW1lID0gMTsKPiAtICAgICAgICBnb3RfZnJhbWVzICAgICA9IDE7 Cj4gLSAgICB9Cj4gLQo+IC1maW5pc2g6Cj4gLSAgICBpZiAocmV0IDwgMCkgewo+IC0gICAgICAg IGZncC0+ZW9mX2luID0gMTsKPiAtICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyYXBoLT5u Yl9vdXRwdXRzOyBpKyspCj4gLSAgICAgICAgICAgIGNsb3NlX291dHB1dF9zdHJlYW0oZ3JhcGgt Pm91dHB1dHNbaV0tPm9zdCk7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIHJldDsKPiAtfQo+ IC0KPiAtaW50IHJlYXBfZmlsdGVycyhGaWx0ZXJHcmFwaCAqZmcsIGludCBmbHVzaCkKPiAtewo+ IC0gICAgcmV0dXJuIGZnX3RyYW5zY29kZV9zdGVwKGZnLCBOVUxMKTsKPiAtfQo+IC0KPiAgdm9p ZCBmZ19zZW5kX2NvbW1hbmQoRmlsdGVyR3JhcGggKmZnLCBkb3VibGUgdGltZSwgY29uc3QgY2hh ciAqdGFyZ2V0LAo+ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tYW5kLCBj b25zdCBjaGFyICphcmcsIGludAo+IGFsbF9maWx0ZXJzKQo+ICB7Cj4gICAgICBGaWx0ZXJHcmFw aFByaXYgKmZncCA9IGZncF9mcm9tX2ZnKGZnKTsKPiAgICAgIEFWQnVmZmVyUmVmICpidWY7Cj4g ICAgICBGaWx0ZXJDb21tYW5kICpmYzsKPiAtICAgIGludCBvdXRwdXRfaWR4LCByZXQ7Cj4gLQo+ IC0gICAgaWYgKCFmZ3AtPnF1ZXVlX2luKQo+IC0gICAgICAgIHJldHVybjsKPgo+ICAgICAgZmMg PSBhdl9tYWxsb2N6KHNpemVvZigqZmMpKTsKPiAgICAgIGlmICghZmMpCj4gQEAgLTMxODAsMTMg KzI4NjIsNSBAQCB2b2lkIGZnX3NlbmRfY29tbWFuZChGaWx0ZXJHcmFwaCAqZmcsIGRvdWJsZSB0 aW1lLAo+IGNvbnN0IGNoYXIgKnRhcmdldCwKPiAgICAgIGZncC0+ZnJhbWUtPmJ1ZlswXSA9IGJ1 ZjsKPiAgICAgIGZncC0+ZnJhbWUtPm9wYXF1ZSA9ICh2b2lkKikoaW50cHRyX3QpRlJBTUVfT1BB UVVFX1NFTkRfQ09NTUFORDsKPgo+IC0gICAgcmV0ID0gdHFfc2VuZChmZ3AtPnF1ZXVlX2luLCBm Zy0+bmJfaW5wdXRzLCBmZ3AtPmZyYW1lKTsKPiAtICAgIGlmIChyZXQgPCAwKSB7Cj4gLSAgICAg ICAgYXZfZnJhbWVfdW5yZWYoZmdwLT5mcmFtZSk7Cj4gLSAgICAgICAgcmV0dXJuOwo+IC0gICAg fQo+IC0KPiAtICAgIC8vIHdhaXQgZm9yIHRoZSBmcmFtZSB0byBiZSBwcm9jZXNzZWQKPiAtICAg IHJldCA9IHRxX3JlY2VpdmUoZmdwLT5xdWV1ZV9vdXQsICZvdXRwdXRfaWR4LCBmZ3AtPmZyYW1l KTsKPiAtICAgIGF2X2Fzc2VydDAob3V0cHV0X2lkeCA9PSBmZ3AtPmZnLm5iX291dHB1dHMgfHwg cmV0ID09IEFWRVJST1JfRU9GKTsKPiArICAgIHNjaF9maWx0ZXJfY29tbWFuZChmZ3AtPnNjaCwg ZmdwLT5zY2hfaWR4LCBmZ3AtPmZyYW1lKTsKPiAgfQo+IGRpZmYgLS1naXQgYS9mZnRvb2xzL2Zm bXBlZ19tdXguYyBiL2ZmdG9vbHMvZmZtcGVnX211eC5jCj4gaW5kZXggZWY1YzJmNjBlMC4uMDY3 ZGM2NWQ0ZSAxMDA2NDQKPiAtLS0gYS9mZnRvb2xzL2ZmbXBlZ19tdXguYwo+ICsrKyBiL2ZmdG9v bHMvZmZtcGVnX211eC5jCj4gQEAgLTIzLDE2ICsyMywxMyBAQAo+ICAjaW5jbHVkZSAiZmZtcGVn LmgiCj4gICNpbmNsdWRlICJmZm1wZWdfbXV4LmgiCj4gICNpbmNsdWRlICJmZm1wZWdfdXRpbHMu aCIKPiAtI2luY2x1ZGUgIm9ianBvb2wuaCIKPiAgI2luY2x1ZGUgInN5bmNfcXVldWUuaCIKPiAt I2luY2x1ZGUgInRocmVhZF9xdWV1ZS5oIgo+Cj4gICNpbmNsdWRlICJsaWJhdnV0aWwvZmlmby5o Igo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL2ludHJlYWR3cml0ZS5oIgo+ICAjaW5jbHVkZSAibGli YXZ1dGlsL2xvZy5oIgo+ICAjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgo+ICAjaW5jbHVkZSAi bGliYXZ1dGlsL3RpbWVzdGFtcC5oIgo+IC0jaW5jbHVkZSAibGliYXZ1dGlsL3RocmVhZC5oIgo+ Cj4gICNpbmNsdWRlICJsaWJhdmNvZGVjL3BhY2tldC5oIgo+Cj4gQEAgLTQxLDEwICszOCw5IEBA Cj4KPiAgdHlwZWRlZiBzdHJ1Y3QgTXV4VGhyZWFkQ29udGV4dCB7Cj4gICAgICBBVlBhY2tldCAq cGt0Owo+ICsgICAgQVZQYWNrZXQgKmZpeF9zdWJfZHVyYXRpb25fcGt0Owo+ICB9IE11eFRocmVh ZENvbnRleHQ7Cj4KPiAtaW50IHdhbnRfc2RwID0gMTsKPiAtCj4gIHN0YXRpYyBNdXhlciAqbXV4 X2Zyb21fb2YoT3V0cHV0RmlsZSAqb2YpCj4gIHsKPiAgICAgIHJldHVybiAoTXV4ZXIqKW9mOwo+ IEBAIC0yMDcsMTQgKzIwMyw0MSBAQCBzdGF0aWMgaW50IHN5bmNfcXVldWVfcHJvY2VzcyhNdXhl ciAqbXV4LAo+IE91dHB1dFN0cmVhbSAqb3N0LCBBVlBhY2tldCAqcGt0LCBpbnQKPiAgICAgIHJl dHVybiAwOwo+ICB9Cj4KPiArc3RhdGljIGludCBvZl9zdHJlYW1jb3B5KE91dHB1dFN0cmVhbSAq b3N0LCBBVlBhY2tldCAqcGt0KTsKPiArCj4gIC8qIGFwcGx5IHRoZSBvdXRwdXQgYml0c3RyZWFt IGZpbHRlcnMgKi8KPiAtc3RhdGljIGludCBtdXhfcGFja2V0X2ZpbHRlcihNdXhlciAqbXV4LCBP dXRwdXRTdHJlYW0gKm9zdCwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVlBhY2tl dCAqcGt0LCBpbnQgKnN0cmVhbV9lb2YpCj4gK3N0YXRpYyBpbnQgbXV4X3BhY2tldF9maWx0ZXIo TXV4ZXIgKm11eCwgTXV4VGhyZWFkQ29udGV4dCAqbXQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0U3RyZWFtICpvc3QsIEFWUGFja2V0ICpwa3QsIGludAo+ICpzdHJlYW1f ZW9mKQo+ICB7Cj4gICAgICBNdXhTdHJlYW0gKm1zID0gbXNfZnJvbV9vc3Qob3N0KTsKPiAgICAg IGNvbnN0IGNoYXIgKmVycl9tc2c7Cj4gICAgICBpbnQgcmV0ID0gMDsKPgo+ICsgICAgaWYgKHBr dCAmJiAhb3N0LT5lbmMpIHsKPiArICAgICAgICByZXQgPSBvZl9zdHJlYW1jb3B5KG9zdCwgcGt0 KTsKPiArICAgICAgICBpZiAocmV0ID09IEFWRVJST1IoRUFHQUlOKSkKPiArICAgICAgICAgICAg cmV0dXJuIDA7Cj4gKyAgICAgICAgZWxzZSBpZiAocmV0ID09IEFWRVJST1JfRU9GKSB7Cj4gKyAg ICAgICAgICAgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+ICsgICAgICAgICAgICBwa3QgPSBOVUxM Owo+ICsgICAgICAgICAgICByZXQgPSAwOwo+ICsgICAgICAgIH0gZWxzZSBpZiAocmV0IDwgMCkK PiArICAgICAgICAgICAgZ290byBmYWlsOwo+ICsgICAgfQo+ICsKPiArICAgIC8vIGVtaXQgaGVh cnRiZWF0IGZvciAtZml4X3N1Yl9kdXJhdGlvbjsKPiArICAgIC8vIHdlIGFyZSBvbmx5IGludGVy ZXN0ZWQgaW4gaGVhcnRiZWF0cyBvbiBvbiByYW5kb20gYWNjZXNzIHBvaW50cy4KPiArICAgIGlm IChwa3QgJiYgKHBrdC0+ZmxhZ3MgJiBBVl9QS1RfRkxBR19LRVkpKSB7Cj4gKyAgICAgICAgbXQt PmZpeF9zdWJfZHVyYXRpb25fcGt0LT5vcGFxdWUgICAgPQo+ICh2b2lkKikoaW50cHRyX3QpUEtU X09QQVFVRV9GSVhfU1VCX0RVUkFUSU9OOwo+ICsgICAgICAgIG10LT5maXhfc3ViX2R1cmF0aW9u X3BrdC0+cHRzICAgICAgID0gcGt0LT5wdHM7Cj4gKyAgICAgICAgbXQtPmZpeF9zdWJfZHVyYXRp b25fcGt0LT50aW1lX2Jhc2UgPSBwa3QtPnRpbWVfYmFzZTsKPiArCj4gKyAgICAgICAgcmV0ID0g c2NoX211eF9zdWJfaGVhcnRiZWF0KG11eC0+c2NoLCBtdXgtPnNjaF9pZHgsIG1zLT5zY2hfaWR4 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdC0+Zml4X3N1Yl9kdXJh dGlvbl9wa3QpOwo+ICsgICAgICAgIGlmIChyZXQgPCAwKQo+ICsgICAgICAgICAgICBnb3RvIGZh aWw7Cj4gKyAgICB9Cj4gKwo+ICAgICAgaWYgKG1zLT5ic2ZfY3R4KSB7Cj4gICAgICAgICAgaW50 IGJzZl9lb2YgPSAwOwo+Cj4gQEAgLTI3OCw2ICszMDEsNyBAQCBzdGF0aWMgdm9pZCB0aHJlYWRf c2V0X25hbWUoT3V0cHV0RmlsZSAqb2YpCj4gIHN0YXRpYyB2b2lkIG11eF90aHJlYWRfdW5pbml0 KE11eFRocmVhZENvbnRleHQgKm10KQo+ICB7Cj4gICAgICBhdl9wYWNrZXRfZnJlZSgmbXQtPnBr dCk7Cj4gKyAgICBhdl9wYWNrZXRfZnJlZSgmbXQtPmZpeF9zdWJfZHVyYXRpb25fcGt0KTsKPgo+ ICAgICAgbWVtc2V0KG10LCAwLCBzaXplb2YoKm10KSk7Cj4gIH0KPiBAQCAtMjkwLDYgKzMxNCwx MCBAQCBzdGF0aWMgaW50IG11eF90aHJlYWRfaW5pdChNdXhUaHJlYWRDb250ZXh0ICptdCkKPiAg ICAgIGlmICghbXQtPnBrdCkKPiAgICAgICAgICBnb3RvIGZhaWw7Cj4KPiArICAgIG10LT5maXhf c3ViX2R1cmF0aW9uX3BrdCA9IGF2X3BhY2tldF9hbGxvYygpOwo+ICsgICAgaWYgKCFtdC0+Zml4 X3N1Yl9kdXJhdGlvbl9wa3QpCj4gKyAgICAgICAgZ290byBmYWlsOwo+ICsKPiAgICAgIHJldHVy biAwOwo+Cj4gIGZhaWw6Cj4gQEAgLTMxNiwxOSArMzQ0LDIyIEBAIHZvaWQgKm11eGVyX3RocmVh ZCh2b2lkICphcmcpCj4gICAgICAgICAgT3V0cHV0U3RyZWFtICpvc3Q7Cj4gICAgICAgICAgaW50 IHN0cmVhbV9pZHgsIHN0cmVhbV9lb2YgPSAwOwo+Cj4gLSAgICAgICAgcmV0ID0gdHFfcmVjZWl2 ZShtdXgtPnRxLCAmc3RyZWFtX2lkeCwgbXQucGt0KTsKPiArICAgICAgICByZXQgPSBzY2hfbXV4 X3JlY2VpdmUobXV4LT5zY2gsIG9mLT5pbmRleCwgbXQucGt0KTsKPiArICAgICAgICBzdHJlYW1f aWR4ID0gbXQucGt0LT5zdHJlYW1faW5kZXg7Cj4gICAgICAgICAgaWYgKHN0cmVhbV9pZHggPCAw KSB7Cj4gICAgICAgICAgICAgIGF2X2xvZyhtdXgsIEFWX0xPR19WRVJCT1NFLCAiQWxsIHN0cmVh bXMgZmluaXNoZWRcbiIpOwo+ICAgICAgICAgICAgICByZXQgPSAwOwo+ICAgICAgICAgICAgICBi cmVhazsKPiAgICAgICAgICB9Cj4KPiAtICAgICAgICBvc3QgPSBvZi0+c3RyZWFtc1tzdHJlYW1f aWR4XTsKPiAtICAgICAgICByZXQgPSBtdXhfcGFja2V0X2ZpbHRlcihtdXgsIG9zdCwgcmV0IDwg MCA/IE5VTEwgOiBtdC5wa3QsCj4gJnN0cmVhbV9lb2YpOwo+ICsgICAgICAgIG9zdCA9IG9mLT5z dHJlYW1zW211eC0+c2NoX3N0cmVhbV9pZHhbc3RyZWFtX2lkeF1dOwo+ICsgICAgICAgIG10LnBr dC0+c3RyZWFtX2luZGV4ID0gb3N0LT5pbmRleDsKPiArCj4gKyAgICAgICAgcmV0ID0gbXV4X3Bh Y2tldF9maWx0ZXIobXV4LCAmbXQsIG9zdCwgcmV0IDwgMCA/IE5VTEwgOiBtdC5wa3QsCj4gJnN0 cmVhbV9lb2YpOwo+ICAgICAgICAgIGF2X3BhY2tldF91bnJlZihtdC5wa3QpOwo+ICAgICAgICAg IGlmIChyZXQgPT0gQVZFUlJPUl9FT0YpIHsKPiAgICAgICAgICAgICAgaWYgKHN0cmVhbV9lb2Yp IHsKPiAtICAgICAgICAgICAgICAgIHRxX3JlY2VpdmVfZmluaXNoKG11eC0+dHEsIHN0cmVhbV9p ZHgpOwo+ICsgICAgICAgICAgICAgICAgc2NoX211eF9yZWNlaXZlX2ZpbmlzaChtdXgtPnNjaCwg b2YtPmluZGV4LCBzdHJlYW1faWR4KTsKPiAgICAgICAgICAgICAgfSBlbHNlIHsKPiAgICAgICAg ICAgICAgICAgIGF2X2xvZyhtdXgsIEFWX0xPR19WRVJCT1NFLCAiTXV4ZXIgcmV0dXJuZWQgRU9G XG4iKTsKPiAgICAgICAgICAgICAgICAgIHJldCA9IDA7Cj4gQEAgLTM0MywyNDMgKzM3NCw1NSBA QCB2b2lkICptdXhlcl90aHJlYWQodm9pZCAqYXJnKQo+ICBmaW5pc2g6Cj4gICAgICBtdXhfdGhy ZWFkX3VuaW5pdCgmbXQpOwo+Cj4gLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG11 eC0+ZmMtPm5iX3N0cmVhbXM7IGkrKykKPiAtICAgICAgICB0cV9yZWNlaXZlX2ZpbmlzaChtdXgt PnRxLCBpKTsKPiAtCj4gLSAgICBhdl9sb2cobXV4LCBBVl9MT0dfVkVSQk9TRSwgIlRlcm1pbmF0 aW5nIG11eGVyIHRocmVhZFxuIik7Cj4gLQo+ICAgICAgcmV0dXJuICh2b2lkKikoaW50cHRyX3Qp cmV0Owo+ICB9Cj4KPiAtc3RhdGljIGludCB0aHJlYWRfc3VibWl0X3BhY2tldChNdXhlciAqbXV4 LCBPdXRwdXRTdHJlYW0gKm9zdCwgQVZQYWNrZXQKPiAqcGt0KQo+IC17Cj4gLSAgICBpbnQgcmV0 ID0gMDsKPiAtCj4gLSAgICBpZiAoIXBrdCB8fCBvc3QtPmZpbmlzaGVkICYgTVVYRVJfRklOSVNI RUQpCj4gLSAgICAgICAgZ290byBmaW5pc2g7Cj4gLQo+IC0gICAgcmV0ID0gdHFfc2VuZChtdXgt PnRxLCBvc3QtPmluZGV4LCBwa3QpOwo+IC0gICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgZ290 byBmaW5pc2g7Cj4gLQo+IC0gICAgcmV0dXJuIDA7Cj4gLQo+IC1maW5pc2g6Cj4gLSAgICBpZiAo cGt0KQo+IC0gICAgICAgIGF2X3BhY2tldF91bnJlZihwa3QpOwo+IC0KPiAtICAgIG9zdC0+Zmlu aXNoZWQgfD0gTVVYRVJfRklOSVNIRUQ7Cj4gLSAgICB0cV9zZW5kX2ZpbmlzaChtdXgtPnRxLCBv c3QtPmluZGV4KTsKPiAtICAgIHJldHVybiByZXQgPT0gQVZFUlJPUl9FT0YgPyAwIDogcmV0Owo+ IC19Cj4gLQo+IC1zdGF0aWMgaW50IHF1ZXVlX3BhY2tldChPdXRwdXRTdHJlYW0gKm9zdCwgQVZQ YWNrZXQgKnBrdCkKPiAtewo+IC0gICAgTXV4U3RyZWFtICptcyA9IG1zX2Zyb21fb3N0KG9zdCk7 Cj4gLSAgICBBVlBhY2tldCAqdG1wX3BrdCA9IE5VTEw7Cj4gLSAgICBpbnQgcmV0Owo+IC0KPiAt ICAgIGlmICghYXZfZmlmb19jYW5fd3JpdGUobXMtPm11eGluZ19xdWV1ZSkpIHsKPiAtICAgICAg ICBzaXplX3QgY3VyX3NpemUgPSBhdl9maWZvX2Nhbl9yZWFkKG1zLT5tdXhpbmdfcXVldWUpOwo+ IC0gICAgICAgIHNpemVfdCBwa3Rfc2l6ZSA9IHBrdCA/IHBrdC0+c2l6ZSA6IDA7Cj4gLSAgICAg ICAgdW5zaWduZWQgaW50IGFyZV93ZV9vdmVyX3NpemUgPQo+IC0gICAgICAgICAgICAobXMtPm11 eGluZ19xdWV1ZV9kYXRhX3NpemUgKyBwa3Rfc2l6ZSkgPgo+IG1zLT5tdXhpbmdfcXVldWVfZGF0 YV90aHJlc2hvbGQ7Cj4gLSAgICAgICAgc2l6ZV90IGxpbWl0ICAgID0gYXJlX3dlX292ZXJfc2l6 ZSA/IG1zLT5tYXhfbXV4aW5nX3F1ZXVlX3NpemUgOgo+IFNJWkVfTUFYOwo+IC0gICAgICAgIHNp emVfdCBuZXdfc2l6ZSA9IEZGTUlOKDIgKiBjdXJfc2l6ZSwgbGltaXQpOwo+IC0KPiAtICAgICAg ICBpZiAobmV3X3NpemUgPD0gY3VyX3NpemUpIHsKPiAtICAgICAgICAgICAgYXZfbG9nKG9zdCwg QVZfTE9HX0VSUk9SLAo+IC0gICAgICAgICAgICAgICAgICAgIlRvbyBtYW55IHBhY2tldHMgYnVm ZmVyZWQgZm9yIG91dHB1dCBzdHJlYW0gJWQ6JWQuXG4iLAo+IC0gICAgICAgICAgICAgICAgICAg b3N0LT5maWxlX2luZGV4LCBvc3QtPnN0LT5pbmRleCk7Cj4gLSAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT1NQQyk7Cj4gLSAgICAgICAgfQo+IC0gICAgICAgIHJldCA9IGF2X2ZpZm9fZ3Jv dzIobXMtPm11eGluZ19xdWV1ZSwgbmV3X3NpemUgLSBjdXJfc2l6ZSk7Cj4gLSAgICAgICAgaWYg KHJldCA8IDApCj4gLSAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gLSAgICB9Cj4gLQo+IC0gICAg aWYgKHBrdCkgewo+IC0gICAgICAgIHJldCA9IGF2X3BhY2tldF9tYWtlX3JlZmNvdW50ZWQocGt0 KTsKPiAtICAgICAgICBpZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAt Cj4gLSAgICAgICAgdG1wX3BrdCA9IGF2X3BhY2tldF9hbGxvYygpOwo+IC0gICAgICAgIGlmICgh dG1wX3BrdCkKPiAtICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAtCj4gLSAg ICAgICAgYXZfcGFja2V0X21vdmVfcmVmKHRtcF9wa3QsIHBrdCk7Cj4gLSAgICAgICAgbXMtPm11 eGluZ19xdWV1ZV9kYXRhX3NpemUgKz0gdG1wX3BrdC0+c2l6ZTsKPiAtICAgIH0KPiAtICAgIGF2 X2ZpZm9fd3JpdGUobXMtPm11eGluZ19xdWV1ZSwgJnRtcF9wa3QsIDEpOwo+IC0KPiAtICAgIHJl dHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IHN1Ym1pdF9wYWNrZXQoTXV4ZXIgKm11eCwg QVZQYWNrZXQgKnBrdCwgT3V0cHV0U3RyZWFtICpvc3QpCj4gLXsKPiAtICAgIGludCByZXQ7Cj4g LQo+IC0gICAgaWYgKG11eC0+dHEpIHsKPiAtICAgICAgICByZXR1cm4gdGhyZWFkX3N1Ym1pdF9w YWNrZXQobXV4LCBvc3QsIHBrdCk7Cj4gLSAgICB9IGVsc2Ugewo+IC0gICAgICAgIC8qIHRoZSBt dXhlciBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LCBidWZmZXIgdGhlIHBhY2tldCAqLwo+IC0gICAg ICAgIHJldCA9IHF1ZXVlX3BhY2tldChvc3QsIHBrdCk7Cj4gLSAgICAgICAgaWYgKHJldCA8IDAp IHsKPiAtICAgICAgICAgICAgaWYgKHBrdCkKPiAtICAgICAgICAgICAgICAgIGF2X3BhY2tldF91 bnJlZihwa3QpOwo+IC0gICAgICAgICAgICByZXR1cm4gcmV0Owo+IC0gICAgICAgIH0KPiAtICAg IH0KPiAtCj4gLSAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAtaW50IG9mX291dHB1dF9wYWNrZXQo T3V0cHV0RmlsZSAqb2YsIE91dHB1dFN0cmVhbSAqb3N0LCBBVlBhY2tldCAqcGt0KQo+IC17Cj4g LSAgICBNdXhlciAqbXV4ID0gbXV4X2Zyb21fb2Yob2YpOwo+IC0gICAgaW50IHJldCA9IDA7Cj4g LQo+IC0gICAgaWYgKHBrdCAmJiBwa3QtPmR0cyAhPSBBVl9OT1BUU19WQUxVRSkKPiAtICAgICAg ICBvc3QtPmxhc3RfbXV4X2R0cyA9IGF2X3Jlc2NhbGVfcShwa3QtPmR0cywgcGt0LT50aW1lX2Jh c2UsCj4gQVZfVElNRV9CQVNFX1EpOwo+IC0KPiAtICAgIHJldCA9IHN1Ym1pdF9wYWNrZXQobXV4 LCBwa3QsIG9zdCk7Cj4gLSAgICBpZiAocmV0IDwgMCkgewo+IC0gICAgICAgIGF2X2xvZyhvc3Qs IEFWX0xPR19FUlJPUiwgIkVycm9yIHN1Ym1pdHRpbmcgYSBwYWNrZXQgdG8gdGhlCj4gbXV4ZXI6 ICVzIiwKPiAtICAgICAgICAgICAgICAgYXZfZXJyMnN0cihyZXQpKTsKPiAtICAgICAgICByZXR1 cm4gcmV0Owo+IC0gICAgfQo+IC0KPiAtICAgIHJldHVybiAwOwo+IC19Cj4gLQo+IC1pbnQgb2Zf c3RyZWFtY29weShPdXRwdXRTdHJlYW0gKm9zdCwgY29uc3QgQVZQYWNrZXQgKnBrdCwgaW50NjRf dCBkdHMpCj4gK3N0YXRpYyBpbnQgb2Zfc3RyZWFtY29weShPdXRwdXRTdHJlYW0gKm9zdCwgQVZQ YWNrZXQgKnBrdCkKPiAgewo+ICAgICAgT3V0cHV0RmlsZSAqb2YgPSBvdXRwdXRfZmlsZXNbb3N0 LT5maWxlX2luZGV4XTsKPiAgICAgIE11eFN0cmVhbSAgKm1zID0gbXNfZnJvbV9vc3Qob3N0KTsK PiArICAgIERlbXV4UGt0RGF0YSAqcGQgPSBwa3QtPm9wYXF1ZV9yZWYgPwo+IChEZW11eFBrdERh dGEqKXBrdC0+b3BhcXVlX3JlZi0+ZGF0YSA6IE5VTEw7Cj4gKyAgICBpbnQ2NF90ICAgICAgZHRz ID0gcGQgPyBwZC0+ZHRzX2VzdCA6IEFWX05PUFRTX1ZBTFVFOwo+ICAgICAgaW50NjRfdCBzdGFy dF90aW1lID0gKG9mLT5zdGFydF90aW1lID09IEFWX05PUFRTX1ZBTFVFKSA/IDAgOgo+IG9mLT5z dGFydF90aW1lOwo+ICAgICAgaW50NjRfdCB0c19vZmZzZXQ7Cj4gLSAgICBBVlBhY2tldCAqb3Br dCA9IG1zLT5wa3Q7Cj4gLSAgICBpbnQgcmV0Owo+IC0KPiAtICAgIGF2X3BhY2tldF91bnJlZihv cGt0KTsKPgo+ICAgICAgaWYgKG9mLT5yZWNvcmRpbmdfdGltZSAhPSBJTlQ2NF9NQVggJiYKPiAg ICAgICAgICBkdHMgPj0gb2YtPnJlY29yZGluZ190aW1lICsgc3RhcnRfdGltZSkKPiAtICAgICAg ICBwa3QgPSBOVUxMOwo+IC0KPiAtICAgIC8vIEVPRjogZmx1c2ggb3V0cHV0IGJpdHN0cmVhbSBm aWx0ZXJzLgo+IC0gICAgaWYgKCFwa3QpCj4gLSAgICAgICAgcmV0dXJuIG9mX291dHB1dF9wYWNr ZXQob2YsIG9zdCwgTlVMTCk7Cj4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRU9GOwo+Cj4gICAg ICBpZiAoIW1zLT5zdHJlYW1jb3B5X3N0YXJ0ZWQgJiYgIShwa3QtPmZsYWdzICYgQVZfUEtUX0ZM QUdfS0VZKSAmJgo+ICAgICAgICAgICFtcy0+Y29weV9pbml0aWFsX25vbmtleWZyYW1lcykKPiAt ICAgICAgICByZXR1cm4gMDsKPiArICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdBSU4pOwo+Cj4g ICAgICBpZiAoIW1zLT5zdHJlYW1jb3B5X3N0YXJ0ZWQpIHsKPiAgICAgICAgICBpZiAoIW1zLT5j b3B5X3ByaW9yX3N0YXJ0ICYmCj4gICAgICAgICAgICAgIChwa3QtPnB0cyA9PSBBVl9OT1BUU19W QUxVRSA/Cj4gICAgICAgICAgICAgICBkdHMgPCBtcy0+dHNfY29weV9zdGFydCA6Cj4gICAgICAg ICAgICAgICBwa3QtPnB0cyA8IGF2X3Jlc2NhbGVfcShtcy0+dHNfY29weV9zdGFydCwgQVZfVElN RV9CQVNFX1EsCj4gcGt0LT50aW1lX2Jhc2UpKSkKPiAtICAgICAgICAgICAgcmV0dXJuIDA7Cj4g KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVBR0FJTik7Cj4KPiAgICAgICAgICBpZiAob2Yt PnN0YXJ0X3RpbWUgIT0gQVZfTk9QVFNfVkFMVUUgJiYgZHRzIDwgb2YtPnN0YXJ0X3RpbWUpCj4g LSAgICAgICAgICAgIHJldHVybiAwOwo+ICsgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFQUdB SU4pOwo+ICAgICAgfQo+Cj4gLSAgICByZXQgPSBhdl9wYWNrZXRfcmVmKG9wa3QsIHBrdCk7Cj4g LSAgICBpZiAocmV0IDwgMCkKPiAtICAgICAgICByZXR1cm4gcmV0Owo+IC0KPiAtICAgIHRzX29m ZnNldCA9IGF2X3Jlc2NhbGVfcShzdGFydF90aW1lLCBBVl9USU1FX0JBU0VfUSwgb3BrdC0+dGlt ZV9iYXNlKTsKPiArICAgIHRzX29mZnNldCA9IGF2X3Jlc2NhbGVfcShzdGFydF90aW1lLCBBVl9U SU1FX0JBU0VfUSwgcGt0LT50aW1lX2Jhc2UpOwo+Cj4gICAgICBpZiAocGt0LT5wdHMgIT0gQVZf Tk9QVFNfVkFMVUUpCj4gLSAgICAgICAgb3BrdC0+cHRzIC09IHRzX29mZnNldDsKPiArICAgICAg ICBwa3QtPnB0cyAtPSB0c19vZmZzZXQ7Cj4KPiAgICAgIGlmIChwa3QtPmR0cyA9PSBBVl9OT1BU U19WQUxVRSkgewo+IC0gICAgICAgIG9wa3QtPmR0cyA9IGF2X3Jlc2NhbGVfcShkdHMsIEFWX1RJ TUVfQkFTRV9RLCBvcGt0LT50aW1lX2Jhc2UpOwo+ICsgICAgICAgIHBrdC0+ZHRzID0gYXZfcmVz Y2FsZV9xKGR0cywgQVZfVElNRV9CQVNFX1EsIHBrdC0+dGltZV9iYXNlKTsKPiAgICAgIH0gZWxz ZSBpZiAob3N0LT5zdC0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX0FVRElP KSB7Cj4gLSAgICAgICAgb3BrdC0+cHRzID0gb3BrdC0+ZHRzIC0gdHNfb2Zmc2V0Owo+IC0gICAg fQo+IC0gICAgb3BrdC0+ZHRzIC09IHRzX29mZnNldDsKPiAtCj4gLSAgICB7Cj4gLSAgICAgICAg aW50IHJldCA9IHRyaWdnZXJfZml4X3N1Yl9kdXJhdGlvbl9oZWFydGJlYXQob3N0LCBwa3QpOwo+ IC0gICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gLSAgICAgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9M T0dfRVJST1IsCj4gLSAgICAgICAgICAgICAgICAgICAiU3VidGl0bGUgaGVhcnRiZWF0IGxvZ2lj IGZhaWxlZCBpbiAlcyEgKCVzKVxuIiwKPiAtICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBh dl9lcnIyc3RyKHJldCkpOwo+IC0gICAgICAgICAgICByZXR1cm4gcmV0Owo+IC0gICAgICAgIH0K PiArICAgICAgICBwa3QtPnB0cyA9IHBrdC0+ZHRzIC0gdHNfb2Zmc2V0Owo+ICAgICAgfQo+Cj4g LSAgICByZXQgPSBvZl9vdXRwdXRfcGFja2V0KG9mLCBvc3QsIG9wa3QpOwo+IC0gICAgaWYgKHJl dCA8IDApCj4gLSAgICAgICAgcmV0dXJuIHJldDsKPiArICAgIHBrdC0+ZHRzIC09IHRzX29mZnNl dDsKPgo+ICAgICAgbXMtPnN0cmVhbWNvcHlfc3RhcnRlZCA9IDE7Cj4KPiAgICAgIHJldHVybiAw Owo+ICB9Cj4KPiAtc3RhdGljIGludCB0aHJlYWRfc3RvcChNdXhlciAqbXV4KQo+IC17Cj4gLSAg ICB2b2lkICpyZXQ7Cj4gLQo+IC0gICAgaWYgKCFtdXggfHwgIW11eC0+dHEpCj4gLSAgICAgICAg cmV0dXJuIDA7Cj4gLQo+IC0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtdXgtPmZj LT5uYl9zdHJlYW1zOyBpKyspCj4gLSAgICAgICAgdHFfc2VuZF9maW5pc2gobXV4LT50cSwgaSk7 Cj4gLQo+IC0gICAgcHRocmVhZF9qb2luKG11eC0+dGhyZWFkLCAmcmV0KTsKPiAtCj4gLSAgICB0 cV9mcmVlKCZtdXgtPnRxKTsKPiAtCj4gLSAgICByZXR1cm4gKGludCkoaW50cHRyX3QpcmV0Owo+ IC19Cj4gLQo+IC1zdGF0aWMgaW50IHRocmVhZF9zdGFydChNdXhlciAqbXV4KQo+IC17Cj4gLSAg ICBBVkZvcm1hdENvbnRleHQgKmZjID0gbXV4LT5mYzsKPiAtICAgIE9ialBvb2wgKm9wOwo+IC0g ICAgaW50IHJldDsKPiAtCj4gLSAgICBvcCA9IG9ianBvb2xfYWxsb2NfcGFja2V0cygpOwo+IC0g ICAgaWYgKCFvcCkKPiAtICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwo+IC0KPiAtICAg IG11eC0+dHEgPSB0cV9hbGxvYyhmYy0+bmJfc3RyZWFtcywgbXV4LT50aHJlYWRfcXVldWVfc2l6 ZSwgb3AsCj4gcGt0X21vdmUpOwo+IC0gICAgaWYgKCFtdXgtPnRxKSB7Cj4gLSAgICAgICAgb2Jq cG9vbF9mcmVlKCZvcCk7Cj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKPiAtICAg IH0KPiAtCj4gLSAgICByZXQgPSBwdGhyZWFkX2NyZWF0ZSgmbXV4LT50aHJlYWQsIE5VTEwsIG11 eGVyX3RocmVhZCwgKHZvaWQqKW11eCk7Cj4gLSAgICBpZiAocmV0KSB7Cj4gLSAgICAgICAgdHFf ZnJlZSgmbXV4LT50cSk7Cj4gLSAgICAgICAgcmV0dXJuIEFWRVJST1IocmV0KTsKPiAtICAgIH0K PiAtCj4gLSAgICAvKiBmbHVzaCB0aGUgbXV4aW5nIHF1ZXVlcyAqLwo+IC0gICAgZm9yIChpbnQg aSA9IDA7IGkgPCBmYy0+bmJfc3RyZWFtczsgaSsrKSB7Cj4gLSAgICAgICAgT3V0cHV0U3RyZWFt ICpvc3QgPSBtdXgtPm9mLnN0cmVhbXNbaV07Cj4gLSAgICAgICAgTXV4U3RyZWFtICAgICAqbXMg PSBtc19mcm9tX29zdChvc3QpOwo+IC0gICAgICAgIEFWUGFja2V0ICpwa3Q7Cj4gLQo+IC0gICAg ICAgIHdoaWxlIChhdl9maWZvX3JlYWQobXMtPm11eGluZ19xdWV1ZSwgJnBrdCwgMSkgPj0gMCkg ewo+IC0gICAgICAgICAgICByZXQgPSB0aHJlYWRfc3VibWl0X3BhY2tldChtdXgsIG9zdCwgcGt0 KTsKPiAtICAgICAgICAgICAgaWYgKHBrdCkgewo+IC0gICAgICAgICAgICAgICAgbXMtPm11eGlu Z19xdWV1ZV9kYXRhX3NpemUgLT0gcGt0LT5zaXplOwo+IC0gICAgICAgICAgICAgICAgYXZfcGFj a2V0X2ZyZWUoJnBrdCk7Cj4gLSAgICAgICAgICAgIH0KPiAtICAgICAgICAgICAgaWYgKHJldCA8 IDApCj4gLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+IC0gICAgICAgIH0KPiAtICAgIH0K PiAtCj4gLSAgICByZXR1cm4gMDsKPiAtfQo+IC0KPiAgaW50IHByaW50X3NkcChjb25zdCBjaGFy ICpmaWxlbmFtZSk7Cj4KPiAgaW50IHByaW50X3NkcChjb25zdCBjaGFyICpmaWxlbmFtZSkKPiBA QCAtNTkwLDExICs0MzMsNiBAQCBpbnQgcHJpbnRfc2RwKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQo+ ICAgICAgQVZJT0NvbnRleHQgKnNkcF9wYjsKPiAgICAgIEFWRm9ybWF0Q29udGV4dCAqKmF2YzsK Pgo+IC0gICAgZm9yIChpID0gMDsgaSA8IG5iX291dHB1dF9maWxlczsgaSsrKSB7Cj4gLSAgICAg ICAgaWYgKCFtdXhfZnJvbV9vZihvdXRwdXRfZmlsZXNbaV0pLT5oZWFkZXJfd3JpdHRlbikKPiAt ICAgICAgICAgICAgcmV0dXJuIDA7Cj4gLSAgICB9Cj4gLQo+ICAgICAgYXZjID0gYXZfbWFsbG9j X2FycmF5KG5iX291dHB1dF9maWxlcywgc2l6ZW9mKCphdmMpKTsKPiAgICAgIGlmICghYXZjKQo+ ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4gQEAgLTYyOSwyNSArNDY3LDE3IEBA IGludCBwcmludF9zZHAoY29uc3QgY2hhciAqZmlsZW5hbWUpCj4gICAgICAgICAgYXZpb19jbG9z ZXAoJnNkcF9wYik7Cj4gICAgICB9Cj4KPiAtICAgIC8vIFNEUCBzdWNjZXNzZnVsbHkgd3JpdHRl biwgYWxsb3cgbXV4ZXIgdGhyZWFkcyB0byBzdGFydAo+IC0gICAgcmV0ID0gMTsKPiAtCj4gIGZh aWw6Cj4gICAgICBhdl9mcmVlcCgmYXZjKTsKPiAgICAgIHJldHVybiByZXQ7Cj4gIH0KPgo+IC1p bnQgbXV4X2NoZWNrX2luaXQoTXV4ZXIgKm11eCkKPiAraW50IG11eF9jaGVja19pbml0KHZvaWQg KmFyZykKPiAgewo+ICsgICAgTXV4ZXIgICAgICptdXggPSBhcmc7Cj4gICAgICBPdXRwdXRGaWxl ICpvZiA9ICZtdXgtPm9mOwo+ICAgICAgQVZGb3JtYXRDb250ZXh0ICpmYyA9IG11eC0+ZmM7Cj4g LSAgICBpbnQgcmV0LCBpOwo+IC0KPiAtICAgIGZvciAoaSA9IDA7IGkgPCBmYy0+bmJfc3RyZWFt czsgaSsrKSB7Cj4gLSAgICAgICAgT3V0cHV0U3RyZWFtICpvc3QgPSBvZi0+c3RyZWFtc1tpXTsK PiAtICAgICAgICBpZiAoIW9zdC0+aW5pdGlhbGl6ZWQpCj4gLSAgICAgICAgICAgIHJldHVybiAw Owo+IC0gICAgfQo+ICsgICAgaW50IHJldDsKPgo+ICAgICAgcmV0ID0gYXZmb3JtYXRfd3JpdGVf aGVhZGVyKGZjLCAmbXV4LT5vcHRzKTsKPiAgICAgIGlmIChyZXQgPCAwKSB7Cj4gQEAgLTY1OSwy NyArNDg5LDcgQEAgaW50IG11eF9jaGVja19pbml0KE11eGVyICptdXgpCj4gICAgICBtdXgtPmhl YWRlcl93cml0dGVuID0gMTsKPgo+ICAgICAgYXZfZHVtcF9mb3JtYXQoZmMsIG9mLT5pbmRleCwg ZmMtPnVybCwgMSk7Cj4gLSAgICBuYl9vdXRwdXRfZHVtcGVkKys7Cj4gLQo+IC0gICAgaWYgKHNk cF9maWxlbmFtZSB8fCB3YW50X3NkcCkgewo+IC0gICAgICAgIHJldCA9IHByaW50X3NkcChzZHBf ZmlsZW5hbWUpOwo+IC0gICAgICAgIGlmIChyZXQgPCAwKSB7Cj4gLSAgICAgICAgICAgIGF2X2xv ZyhOVUxMLCBBVl9MT0dfRVJST1IsICJFcnJvciB3cml0aW5nIHRoZSBTRFAuXG4iKTsKPiAtICAg ICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgICAgICB9IGVsc2UgaWYgKHJldCA9PSAxKSB7Cj4g LSAgICAgICAgICAgIC8qIFNEUCBpcyB3cml0dGVuIG9ubHkgYWZ0ZXIgYWxsIHRoZSBtdXhlcnMg YXJlIHJlYWR5LCBzbyBub3cKPiB3ZQo+IC0gICAgICAgICAgICAgKiBzdGFydCBBTEwgdGhlIHRo cmVhZHMgKi8KPiAtICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5iX291dHB1dF9maWxlczsg aSsrKSB7Cj4gLSAgICAgICAgICAgICAgICByZXQgPSB0aHJlYWRfc3RhcnQobXV4X2Zyb21fb2Yo b3V0cHV0X2ZpbGVzW2ldKSk7Cj4gLSAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiAtICAg ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+IC0gICAgICAgICAgICB9Cj4gLSAgICAgICAg fQo+IC0gICAgfSBlbHNlIHsKPiAtICAgICAgICByZXQgPSB0aHJlYWRfc3RhcnQobXV4X2Zyb21f b2Yob2YpKTsKPiAtICAgICAgICBpZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJl dDsKPiAtICAgIH0KPiArICAgIGF0b21pY19mZXRjaF9hZGQoJm5iX291dHB1dF9kdW1wZWQsIDEp Owo+Cj4gICAgICByZXR1cm4gMDsKPiAgfQo+IEBAIC03MzYsOSArNTQ2LDEwIEBAIGludCBvZl9z dHJlYW1faW5pdChPdXRwdXRGaWxlICpvZiwgT3V0cHV0U3RyZWFtICpvc3QpCj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3N0LT5zdC0+dGltZV9iYXNlKTsKPiAg ICAgIH0KPgo+IC0gICAgb3N0LT5pbml0aWFsaXplZCA9IDE7Cj4gKyAgICBpZiAobXMtPnNjaF9p ZHggPj0gMCkKPiArICAgICAgICByZXR1cm4gc2NoX211eF9zdHJlYW1fcmVhZHkobXV4LT5zY2gs IG9mLT5pbmRleCwgbXMtPnNjaF9pZHgpOwo+Cj4gLSAgICByZXR1cm4gbXV4X2NoZWNrX2luaXQo bXV4KTsKPiArICAgIHJldHVybiAwOwo+ICB9Cj4KPiAgc3RhdGljIGludCBjaGVja193cml0dGVu KE91dHB1dEZpbGUgKm9mKQo+IEBAIC04NTIsMTUgKzY2MywxMyBAQCBpbnQgb2Zfd3JpdGVfdHJh aWxlcihPdXRwdXRGaWxlICpvZikKPiAgICAgIEFWRm9ybWF0Q29udGV4dCAqZmMgPSBtdXgtPmZj Owo+ICAgICAgaW50IHJldCwgbXV4X3Jlc3VsdCA9IDA7Cj4KPiAtICAgIGlmICghbXV4LT50cSkg ewo+ICsgICAgaWYgKCFtdXgtPmhlYWRlcl93cml0dGVuKSB7Cj4gICAgICAgICAgYXZfbG9nKG11 eCwgQVZfTE9HX0VSUk9SLAo+ICAgICAgICAgICAgICAgICAiTm90aGluZyB3YXMgd3JpdHRlbiBp bnRvIG91dHB1dCBmaWxlLCBiZWNhdXNlICIKPiAgICAgICAgICAgICAgICAgImF0IGxlYXN0IG9u ZSBvZiBpdHMgc3RyZWFtcyByZWNlaXZlZCBubyBwYWNrZXRzLlxuIik7Cj4gICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKPiAgICAgIH0KPgo+IC0gICAgbXV4X3Jlc3VsdCA9IHRocmVh ZF9zdG9wKG11eCk7Cj4gLQo+ICAgICAgcmV0ID0gYXZfd3JpdGVfdHJhaWxlcihmYyk7Cj4gICAg ICBpZiAocmV0IDwgMCkgewo+ICAgICAgICAgIGF2X2xvZyhtdXgsIEFWX0xPR19FUlJPUiwgIkVy cm9yIHdyaXRpbmcgdHJhaWxlcjogJXNcbiIsCj4gYXZfZXJyMnN0cihyZXQpKTsKPiBAQCAtOTA1 LDEzICs3MTQsNiBAQCBzdGF0aWMgdm9pZCBvc3RfZnJlZShPdXRwdXRTdHJlYW0gKipwb3N0KQo+ ICAgICAgICAgIG9zdC0+bG9nZmlsZSA9IE5VTEw7Cj4gICAgICB9Cj4KPiAtICAgIGlmIChtcy0+ bXV4aW5nX3F1ZXVlKSB7Cj4gLSAgICAgICAgQVZQYWNrZXQgKnBrdDsKPiAtICAgICAgICB3aGls ZSAoYXZfZmlmb19yZWFkKG1zLT5tdXhpbmdfcXVldWUsICZwa3QsIDEpID49IDApCj4gLSAgICAg ICAgICAgIGF2X3BhY2tldF9mcmVlKCZwa3QpOwo+IC0gICAgICAgIGF2X2ZpZm9fZnJlZXAyKCZt cy0+bXV4aW5nX3F1ZXVlKTsKPiAtICAgIH0KPiAtCj4gICAgICBhdmNvZGVjX3BhcmFtZXRlcnNf ZnJlZSgmb3N0LT5wYXJfaW4pOwo+Cj4gICAgICBhdl9ic2ZfZnJlZSgmbXMtPmJzZl9jdHgpOwo+ IEBAIC05NzYsOCArNzc4LDYgQEAgdm9pZCBvZl9mcmVlKE91dHB1dEZpbGUgKipwb2YpCj4gICAg ICAgICAgcmV0dXJuOwo+ICAgICAgbXV4ID0gbXV4X2Zyb21fb2Yob2YpOwo+Cj4gLSAgICB0aHJl YWRfc3RvcChtdXgpOwo+IC0KPiAgICAgIHNxX2ZyZWUoJm9mLT5zcV9lbmNvZGUpOwo+ICAgICAg c3FfZnJlZSgmbXV4LT5zcV9tdXgpOwo+Cj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMvZmZtcGVnX211 eC5oIGIvZmZ0b29scy9mZm1wZWdfbXV4LmgKPiBpbmRleCBlZWUyYjJjYjA3Li41ZDdjZjNmYTc2 IDEwMDY0NAo+IC0tLSBhL2ZmdG9vbHMvZmZtcGVnX211eC5oCj4gKysrIGIvZmZ0b29scy9mZm1w ZWdfbXV4LmgKPiBAQCAtMjUsNyArMjUsNiBAQAo+ICAjaW5jbHVkZSA8c3RkaW50Lmg+Cj4KPiAg I2luY2x1ZGUgImZmbXBlZ19zY2hlZC5oIgo+IC0jaW5jbHVkZSAidGhyZWFkX3F1ZXVlLmgiCj4K PiAgI2luY2x1ZGUgImxpYmF2Zm9ybWF0L2F2Zm9ybWF0LmgiCj4KPiBAQCAtMzMsNyArMzIsNiBA QAo+Cj4gICNpbmNsdWRlICJsaWJhdnV0aWwvZGljdC5oIgo+ICAjaW5jbHVkZSAibGliYXZ1dGls L2ZpZm8uaCIKPiAtI2luY2x1ZGUgImxpYmF2dXRpbC90aHJlYWQuaCIKPgo+ICB0eXBlZGVmIHN0 cnVjdCBNdXhTdHJlYW0gewo+ICAgICAgT3V0cHV0U3RyZWFtIG9zdDsKPiBAQCAtNDEsOSArMzks NiBAQCB0eXBlZGVmIHN0cnVjdCBNdXhTdHJlYW0gewo+ICAgICAgLy8gbmFtZSB1c2VkIGZvciBs b2dnaW5nCj4gICAgICBjaGFyIGxvZ19uYW1lWzMyXTsKPgo+IC0gICAgLyogdGhlIHBhY2tldHMg YXJlIGJ1ZmZlcmVkIGhlcmUgdW50aWwgdGhlIG11eGVyIGlzIHJlYWR5IHRvIGJlCj4gaW5pdGlh bGl6ZWQgKi8KPiAtICAgIEFWRmlmbyAqbXV4aW5nX3F1ZXVlOwo+IC0KPiAgICAgIEFWQlNGQ29u dGV4dCAqYnNmX2N0eDsKPiAgICAgIEFWUGFja2V0ICAgICAqYnNmX3BrdDsKPgo+IEBAIC01Nywx NyArNTIsNiBAQCB0eXBlZGVmIHN0cnVjdCBNdXhTdHJlYW0gewo+Cj4gICAgICBpbnQ2NF90IG1h eF9mcmFtZXM7Cj4KPiAtICAgIC8qCj4gLSAgICAgKiBUaGUgc2l6ZSBvZiB0aGUgQVZQYWNrZXRz JyBidWZmZXJzIGluIHF1ZXVlLgo+IC0gICAgICogVXBkYXRlZCB3aGVuIGEgcGFja2V0IGlzIGVp dGhlciBwdXNoZWQgb3IgcHVsbGVkIGZyb20gdGhlIHF1ZXVlLgo+IC0gICAgICovCj4gLSAgICBz aXplX3QgbXV4aW5nX3F1ZXVlX2RhdGFfc2l6ZTsKPiAtCj4gLSAgICBpbnQgbWF4X211eGluZ19x dWV1ZV9zaXplOwo+IC0KPiAtICAgIC8qIFRocmVzaG9sZCBhZnRlciB3aGljaCBtYXhfbXV4aW5n X3F1ZXVlX3NpemUgd2lsbCBiZSBpbiBlZmZlY3QgKi8KPiAtICAgIHNpemVfdCBtdXhpbmdfcXVl dWVfZGF0YV90aHJlc2hvbGQ7Cj4gLQo+ICAgICAgLy8gdGltZXN0YW1wIGZyb20gd2hpY2ggdGhl IHN0cmVhbWNvcGllZCBzdHJlYW1zIHNob3VsZCBzdGFydCwKPiAgICAgIC8vIGluIEFWX1RJTUVf QkFTRV9ROwo+ICAgICAgLy8gZXZlcnl0aGluZyBiZWZvcmUgaXQgc2hvdWxkIGJlIGRpc2NhcmRl ZAo+IEBAIC0xMDYsOSArOTAsNiBAQCB0eXBlZGVmIHN0cnVjdCBNdXhlciB7Cj4gICAgICBpbnQg ICAgICAgICAqc2NoX3N0cmVhbV9pZHg7Cj4gICAgICBpbnQgICAgICAgbmJfc2NoX3N0cmVhbV9p ZHg7Cj4KPiAtICAgIHB0aHJlYWRfdCAgICB0aHJlYWQ7Cj4gLSAgICBUaHJlYWRRdWV1ZSAqdHE7 Cj4gLQo+ICAgICAgQVZEaWN0aW9uYXJ5ICpvcHRzOwo+Cj4gICAgICBpbnQgdGhyZWFkX3F1ZXVl X3NpemU7Cj4gQEAgLTEyMiwxMCArMTAzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgTXV4ZXIgewo+ICAg ICAgQVZQYWNrZXQgKnNxX3BrdDsKPiAgfSBNdXhlcjsKPgo+IC0vKiB3aGV0aGVyIHdlIHdhbnQg dG8gcHJpbnQgYW4gU0RQLCBzZXQgaW4gb2Zfb3BlbigpICovCj4gLWV4dGVybiBpbnQgd2FudF9z ZHA7Cj4gLQo+IC1pbnQgbXV4X2NoZWNrX2luaXQoTXV4ZXIgKm11eCk7Cj4gK2ludCBtdXhfY2hl Y2tfaW5pdCh2b2lkICphcmcpOwo+Cj4gIHN0YXRpYyBNdXhTdHJlYW0gKm1zX2Zyb21fb3N0KE91 dHB1dFN0cmVhbSAqb3N0KQo+ICB7Cj4gZGlmZiAtLWdpdCBhL2ZmdG9vbHMvZmZtcGVnX211eF9p bml0LmMgYi9mZnRvb2xzL2ZmbXBlZ19tdXhfaW5pdC5jCj4gaW5kZXggNTM0YjQzNzljNy4uNjQ1 OTI5NmFiMCAxMDA2NDQKPiAtLS0gYS9mZnRvb2xzL2ZmbXBlZ19tdXhfaW5pdC5jCj4gKysrIGIv ZmZ0b29scy9mZm1wZWdfbXV4X2luaXQuYwo+IEBAIC05MjQsMTMgKzkyNCw2IEBAIHN0YXRpYyBp bnQgbmV3X3N0cmVhbV9hdWRpbyhNdXhlciAqbXV4LCBjb25zdAo+IE9wdGlvbnNDb250ZXh0ICpv LAo+ICAgICAgcmV0dXJuIDA7Cj4gIH0KPgo+IC1zdGF0aWMgaW50IG5ld19zdHJlYW1fYXR0YWNo bWVudChNdXhlciAqbXV4LCBjb25zdCBPcHRpb25zQ29udGV4dCAqbywKPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0U3RyZWFtICpvc3QpCj4gLXsKPiAtICAgIG9zdC0+ ZmluaXNoZWQgICAgPSAxOwo+IC0gICAgcmV0dXJuIDA7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQg bmV3X3N0cmVhbV9zdWJ0aXRsZShNdXhlciAqbXV4LCBjb25zdCBPcHRpb25zQ29udGV4dCAqbywK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dFN0cmVhbSAqb3N0KQo+ICB7 Cj4gQEAgLTExNjgsOSArMTE2MSw2IEBAIHN0YXRpYyBpbnQgb3N0X2FkZChNdXhlciAqbXV4LCBj b25zdCBPcHRpb25zQ29udGV4dAo+ICpvLCBlbnVtIEFWTWVkaWFUeXBlIHR5cGUsCj4gICAgICBp ZiAoIW9zdC0+cGFyX2luKQo+ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4KPiAt ICAgIG1zLT5tdXhpbmdfcXVldWUgPSBhdl9maWZvX2FsbG9jMig4LCBzaXplb2YoQVZQYWNrZXQq KSwgMCk7Cj4gLSAgICBpZiAoIW1zLT5tdXhpbmdfcXVldWUpCj4gLSAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKPiAgICAgIG1zLT5sYXN0X211eF9kdHMgPSBBVl9OT1BUU19WQUxVRTsK Pgo+ICAgICAgb3N0LT5zdCAgICAgICAgID0gc3Q7Cj4gQEAgLTExOTAsNyArMTE4MCw4IEBAIHN0 YXRpYyBpbnQgb3N0X2FkZChNdXhlciAqbXV4LCBjb25zdCBPcHRpb25zQ29udGV4dAo+ICpvLCBl bnVtIEFWTWVkaWFUeXBlIHR5cGUsCj4gICAgICAgICAgaWYgKCFvc3QtPmVuY19jdHgpCj4gICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cj4KPiAtICAgICAgICByZXQgPSBzY2hf YWRkX2VuYyhtdXgtPnNjaCwgZW5jb2Rlcl90aHJlYWQsIG9zdCwgTlVMTCk7Cj4gKyAgICAgICAg cmV0ID0gc2NoX2FkZF9lbmMobXV4LT5zY2gsIGVuY29kZXJfdGhyZWFkLCBvc3QsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgb3N0LT50eXBlID09IEFWTUVESUFfVFlQRV9TVUJUSVRMRSA/ IE5VTEwgOgo+IGVuY19vcGVuKTsKPiAgICAgICAgICBpZiAocmV0IDwgMCkKPiAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPiAgICAgICAgICBtcy0+c2NoX2lkeF9lbmMgPSByZXQ7Cj4gQEAgLTE0 MTQsOSArMTQwNSw2IEBAIHN0YXRpYyBpbnQgb3N0X2FkZChNdXhlciAqbXV4LCBjb25zdCBPcHRp b25zQ29udGV4dAo+ICpvLCBlbnVtIEFWTWVkaWFUeXBlIHR5cGUsCj4KPiAgICAgICAgICBzY2hf bXV4X3N0cmVhbV9idWZmZXJpbmcobXV4LT5zY2gsIG11eC0+c2NoX2lkeCwgbXMtPnNjaF9pZHgs Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9tdXhpbmdfcXVldWVfc2l6 ZSwKPiBtdXhpbmdfcXVldWVfZGF0YV90aHJlc2hvbGQpOwo+IC0KPiAtICAgICAgICBtcy0+bWF4 X211eGluZ19xdWV1ZV9zaXplICAgICAgID0gbWF4X211eGluZ19xdWV1ZV9zaXplOwo+IC0gICAg ICAgIG1zLT5tdXhpbmdfcXVldWVfZGF0YV90aHJlc2hvbGQgPSBtdXhpbmdfcXVldWVfZGF0YV90 aHJlc2hvbGQ7Cj4gICAgICB9Cj4KPiAgICAgIE1BVENIX1BFUl9TVFJFQU1fT1BUKGJpdHNfcGVy X3Jhd19zYW1wbGUsIGksIG9zdC0+Yml0c19wZXJfcmF3X3NhbXBsZSwKPiBAQCAtMTQzNCw4ICsx NDIyLDYgQEAgc3RhdGljIGludCBvc3RfYWRkKE11eGVyICptdXgsIGNvbnN0IE9wdGlvbnNDb250 ZXh0Cj4gKm8sIGVudW0gQVZNZWRpYVR5cGUgdHlwZSwKPiAgICAgIGlmIChvc3QtPmVuY19jdHgg JiYKPiBhdl9nZXRfZXhhY3RfYml0c19wZXJfc2FtcGxlKG9zdC0+ZW5jX2N0eC0+Y29kZWNfaWQp ID09IDI0KQo+ICAgICAgICAgIGF2X2RpY3Rfc2V0KCZvc3QtPnN3cl9vcHRzLCAib3V0cHV0X3Nh bXBsZV9iaXRzIiwgIjI0IiwgMCk7Cj4KPiAtICAgIG9zdC0+bGFzdF9tdXhfZHRzID0gQVZfTk9Q VFNfVkFMVUU7Cj4gLQo+ICAgICAgTUFUQ0hfUEVSX1NUUkVBTV9PUFQoY29weV9pbml0aWFsX25v bmtleWZyYW1lcywgaSwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zLT5jb3B5X2luaXRp YWxfbm9ua2V5ZnJhbWVzLCBvYywgc3QpOwo+Cj4gQEAgLTE0NDMsNyArMTQyOSw2IEBAIHN0YXRp YyBpbnQgb3N0X2FkZChNdXhlciAqbXV4LCBjb25zdCBPcHRpb25zQ29udGV4dAo+ICpvLCBlbnVt IEFWTWVkaWFUeXBlIHR5cGUsCj4gICAgICBjYXNlIEFWTUVESUFfVFlQRV9WSURFTzogICAgICBy ZXQgPSBuZXdfc3RyZWFtX3ZpZGVvICAgICAobXV4LCBvLAo+IG9zdCk7IGJyZWFrOwo+ICAgICAg Y2FzZSBBVk1FRElBX1RZUEVfQVVESU86ICAgICAgcmV0ID0gbmV3X3N0cmVhbV9hdWRpbyAgICAg KG11eCwgbywKPiBvc3QpOyBicmVhazsKPiAgICAgIGNhc2UgQVZNRURJQV9UWVBFX1NVQlRJVExF OiAgIHJldCA9IG5ld19zdHJlYW1fc3VidGl0bGUgIChtdXgsIG8sCj4gb3N0KTsgYnJlYWs7Cj4g LSAgICBjYXNlIEFWTUVESUFfVFlQRV9BVFRBQ0hNRU5UOiByZXQgPSBuZXdfc3RyZWFtX2F0dGFj aG1lbnQobXV4LCBvLAo+IG9zdCk7IGJyZWFrOwo+ICAgICAgfQo+ICAgICAgaWYgKHJldCA8IDAp Cj4gICAgICAgICAgcmV0dXJuIHJldDsKPiBAQCAtMTkzOCw3ICsxOTIzLDYgQEAgc3RhdGljIGlu dCBzZXR1cF9zeW5jX3F1ZXVlcyhNdXhlciAqbXV4LAo+IEFWRm9ybWF0Q29udGV4dCAqb2MsIGlu dDY0X3QgYnVmX3NpemVfdQo+ICAgICAgICAgIE11eFN0cmVhbSAgICAgKm1zID0gbXNfZnJvbV9v c3Qob3N0KTsKPiAgICAgICAgICBlbnVtIEFWTWVkaWFUeXBlIHR5cGUgPSBvc3QtPnR5cGU7Cj4K PiAtICAgICAgICBvc3QtPnNxX2lkeF9lbmNvZGUgPSAtMTsKPiAgICAgICAgICBvc3QtPnNxX2lk eF9tdXggICAgPSAtMTsKPgo+ICAgICAgICAgIG5iX2ludGVybGVhdmVkICs9IElTX0lOVEVSTEVB VkVEKHR5cGUpOwo+IEBAIC0xOTYxLDExICsxOTQ1LDE3IEBAIHN0YXRpYyBpbnQgc2V0dXBfc3lu Y19xdWV1ZXMoTXV4ZXIgKm11eCwKPiBBVkZvcm1hdENvbnRleHQgKm9jLCBpbnQ2NF90IGJ1Zl9z aXplX3UKPiAgICAgICAqIC0gYXQgbGVhc3Qgb25lIGVuY29kZWQgYXVkaW8vdmlkZW8gc3RyZWFt IGlzIGZyYW1lLWxpbWl0ZWQsIHNpbmNlCj4gICAgICAgKiAgIHRoYXQgaGFzIHNpbWlsYXIgc2Vt YW50aWNzIHRvICdzaG9ydGVzdCcKPiAgICAgICAqIC0gYXQgbGVhc3Qgb25lIGF1ZGlvIGVuY29k ZXIgcmVxdWlyZXMgY29uc3RhbnQgZnJhbWUgc2l6ZXMKPiArICAgICAqCj4gKyAgICAgKiBOb3Rl IHRoYXQgZW5jb2Rpbmcgc3luYyBxdWV1ZXMgYXJlIGhhbmRsZWQgaW4gdGhlIHNjaGVkdWxlciwK PiBiZWNhdXNlCj4gKyAgICAgKiBkaWZmZXJlbnQgZW5jb2RlcnMgcnVuIGluIGRpZmZlcmVudCB0 aHJlYWRzIGFuZCBuZWVkIGV4dGVybmFsCj4gKyAgICAgKiBzeW5jaHJvbml6YXRpb24sIHdoaWxl IG11eGVyIHN5bmMgcXVldWVzIGNhbiBiZSBoYW5kbGVkIGluc2lkZSB0aGUKPiBtdXhlcgo+ICAg ICAgICovCj4gICAgICBpZiAoKG9mLT5zaG9ydGVzdCAmJiBuYl9hdl9lbmMgPiAxKSB8fCBsaW1p dF9mcmFtZXNfYXZfZW5jIHx8Cj4gbmJfYXVkaW9fZnMpIHsKPiAtICAgICAgICBvZi0+c3FfZW5j b2RlID0gc3FfYWxsb2MoU1lOQ19RVUVVRV9GUkFNRVMsIGJ1Zl9zaXplX3VzLCBtdXgpOwo+IC0g ICAgICAgIGlmICghb2YtPnNxX2VuY29kZSkKPiAtICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKPiArICAgICAgICBpbnQgc3FfaWR4LCByZXQ7Cj4gKwo+ICsgICAgICAgIHNxX2lk eCA9IHNjaF9hZGRfc3FfZW5jKG11eC0+c2NoLCBidWZfc2l6ZV91cywgbXV4KTsKPiArICAgICAg ICBpZiAoc3FfaWR4IDwgMCkKPiArICAgICAgICAgICAgcmV0dXJuIHNxX2lkeDsKPgo+ICAgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2MtPm5iX3N0cmVhbXM7IGkrKykgewo+ICAgICAgICAg ICAgICBPdXRwdXRTdHJlYW0gKm9zdCA9IG9mLT5zdHJlYW1zW2ldOwo+IEBAIC0xOTc1LDEzICsx OTY1LDExIEBAIHN0YXRpYyBpbnQgc2V0dXBfc3luY19xdWV1ZXMoTXV4ZXIgKm11eCwKPiBBVkZv cm1hdENvbnRleHQgKm9jLCBpbnQ2NF90IGJ1Zl9zaXplX3UKPiAgICAgICAgICAgICAgaWYgKCFJ U19BVl9FTkMob3N0LCB0eXBlKSkKPiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Cj4gLSAg ICAgICAgICAgIG9zdC0+c3FfaWR4X2VuY29kZSA9IHNxX2FkZF9zdHJlYW0ob2YtPnNxX2VuY29k ZSwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZi0+ c2hvcnRlc3QgfHwKPiBtcy0+bWF4X2ZyYW1lcyA8IElOVDY0X01BWCk7Cj4gLSAgICAgICAgICAg IGlmIChvc3QtPnNxX2lkeF9lbmNvZGUgPCAwKQo+IC0gICAgICAgICAgICAgICAgcmV0dXJuIG9z dC0+c3FfaWR4X2VuY29kZTsKPiAtCj4gLSAgICAgICAgICAgIGlmIChtcy0+bWF4X2ZyYW1lcyAh PSBJTlQ2NF9NQVgpCj4gLSAgICAgICAgICAgICAgICBzcV9saW1pdF9mcmFtZXMob2YtPnNxX2Vu Y29kZSwgb3N0LT5zcV9pZHhfZW5jb2RlLAo+IG1zLT5tYXhfZnJhbWVzKTsKPiArICAgICAgICAg ICAgcmV0ID0gc2NoX3NxX2FkZF9lbmMobXV4LT5zY2gsIHNxX2lkeCwgbXMtPnNjaF9pZHhfZW5j LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZi0+c2hvcnRlc3QgfHwgbXMt Pm1heF9mcmFtZXMgPAo+IElOVDY0X01BWCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbXMtPm1heF9mcmFtZXMpOwo+ICsgICAgICAgICAgICBpZiAocmV0IDwgMCkKPiArICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gICAgICAgICAgfQo+ICAgICAgfQo+Cj4gQEAgLTI2 NTIsMjMgKzI2NDAsNiBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2VuY19hdm9wdChNdXhlciAqbXV4 LCBjb25zdAo+IEFWRGljdGlvbmFyeSAqY29kZWNfYXZvcHQpCj4gICAgICByZXR1cm4gMDsKPiAg fQo+Cj4gLXN0YXRpYyBpbnQgaW5pdF9vdXRwdXRfc3RyZWFtX25vZmlsdGVyKE91dHB1dFN0cmVh bSAqb3N0KQo+IC17Cj4gLSAgICBpbnQgcmV0ID0gMDsKPiAtCj4gLSAgICBpZiAob3N0LT5lbmNf Y3R4KSB7Cj4gLSAgICAgICAgcmV0ID0gZW5jX29wZW4ob3N0LCBOVUxMKTsKPiAtICAgICAgICBp ZiAocmV0IDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIHJldDsKPiAtICAgIH0gZWxzZSB7Cj4g LSAgICAgICAgcmV0ID0gb2Zfc3RyZWFtX2luaXQob3V0cHV0X2ZpbGVzW29zdC0+ZmlsZV9pbmRl eF0sIG9zdCk7Cj4gLSAgICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIHJldDsKPiAtfQo+IC0KPiAgc3RhdGljIGNv bnN0IGNoYXIgKm91dHB1dF9maWxlX2l0ZW1fbmFtZSh2b2lkICpvYmopCj4gIHsKPiAgICAgIGNv bnN0IE11eGVyICptdXggPSBvYmo7Cj4gQEAgLTI3NTEsOCArMjcyMiw2IEBAIGludCBvZl9vcGVu KGNvbnN0IE9wdGlvbnNDb250ZXh0ICpvLCBjb25zdCBjaGFyCj4gKmZpbGVuYW1lLCBTY2hlZHVs ZXIgKnNjaCkKPiAgICAgIGF2X3N0cmxjYXQobXV4LT5sb2dfbmFtZSwgIi8iLCAgICAgICAgICAg ICAgIHNpemVvZihtdXgtPmxvZ19uYW1lKSk7Cj4gICAgICBhdl9zdHJsY2F0KG11eC0+bG9nX25h bWUsIG9jLT5vZm9ybWF0LT5uYW1lLCBzaXplb2YobXV4LT5sb2dfbmFtZSkpOwo+Cj4gLSAgICBp ZiAoc3RyY21wKG9jLT5vZm9ybWF0LT5uYW1lLCAicnRwIikpCj4gLSAgICAgICAgd2FudF9zZHAg PSAwOwo+Cj4gICAgICBvZi0+Zm9ybWF0ID0gb2MtPm9mb3JtYXQ7Cj4gICAgICBpZiAocmVjb3Jk aW5nX3RpbWUgIT0gSU5UNjRfTUFYKQo+IEBAIC0yNzY4LDcgKzI3MzcsNyBAQCBpbnQgb2Zfb3Bl bihjb25zdCBPcHRpb25zQ29udGV4dCAqbywgY29uc3QgY2hhcgo+ICpmaWxlbmFtZSwgU2NoZWR1 bGVyICpzY2gpCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB VkZNVF9GTEFHX0JJVEVYQUNUKTsKPiAgICAgIH0KPgo+IC0gICAgZXJyID0gc2NoX2FkZF9tdXgo c2NoLCBtdXhlcl90aHJlYWQsIE5VTEwsIG11eCwKPiArICAgIGVyciA9IHNjaF9hZGRfbXV4KHNj aCwgbXV4ZXJfdGhyZWFkLCBtdXhfY2hlY2tfaW5pdCwgbXV4LAo+ICAgICAgICAgICAgICAgICAg ICAgICAgIXN0cmNtcChvYy0+b2Zvcm1hdC0+bmFtZSwgInJ0cCIpKTsKPiAgICAgIGlmIChlcnIg PCAwKQo+ICAgICAgICAgIHJldHVybiBlcnI7Cj4gQEAgLTI4NTQsMjYgKzI4MjMsMTUgQEAgaW50 IG9mX29wZW4oY29uc3QgT3B0aW9uc0NvbnRleHQgKm8sIGNvbnN0IGNoYXIKPiAqZmlsZW5hbWUs IFNjaGVkdWxlciAqc2NoKQo+Cj4gICAgICBvZi0+dXJsICAgICAgICA9IGZpbGVuYW1lOwo+Cj4g LSAgICAvKiBpbml0aWFsaXplIHN0cmVhbSBjb3B5IGFuZCBzdWJ0aXRsZS9kYXRhIHN0cmVhbXMu Cj4gLSAgICAgKiBFbmNvZGVkIEFWRnJhbWUgYmFzZWQgc3RyZWFtcyB3aWxsIGdldCBpbml0aWFs aXplZCB3aGVuIHRoZSBmaXJzdAo+IEFWRnJhbWUKPiAtICAgICAqIGlzIHJlY2VpdmVkIGluIGRv X3ZpZGVvX291dAo+IC0gICAgICovCj4gKyAgICAvKiBpbml0aWFsaXplIHN0cmVhbWNvcHkgc3Ry ZWFtcy4gKi8KPiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2YtPm5iX3N0cmVhbXM7IGkrKykg ewo+ICAgICAgICAgIE91dHB1dFN0cmVhbSAqb3N0ID0gb2YtPnN0cmVhbXNbaV07Cj4KPiAtICAg ICAgICBpZiAob3N0LT5maWx0ZXIpCj4gLSAgICAgICAgICAgIGNvbnRpbnVlOwo+IC0KPiAtICAg ICAgICBlcnIgPSBpbml0X291dHB1dF9zdHJlYW1fbm9maWx0ZXIob3N0KTsKPiAtICAgICAgICBp ZiAoZXJyIDwgMCkKPiAtICAgICAgICAgICAgcmV0dXJuIGVycjsKPiAtICAgIH0KPiAtCj4gLSAg ICAvKiB3cml0ZSB0aGUgaGVhZGVyIGZvciBmaWxlcyB3aXRoIG5vIHN0cmVhbXMgKi8KPiAtICAg IGlmIChvZi0+Zm9ybWF0LT5mbGFncyAmIEFWRk1UX05PU1RSRUFNUyAmJiBvYy0+bmJfc3RyZWFt cyA9PSAwKSB7Cj4gLSAgICAgICAgaW50IHJldCA9IG11eF9jaGVja19pbml0KG11eCk7Cj4gLSAg ICAgICAgaWYgKHJldCA8IDApCj4gLSAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gKyAgICAgICAg aWYgKCFvc3QtPmVuYykgewo+ICsgICAgICAgICAgICBlcnIgPSBvZl9zdHJlYW1faW5pdChvZiwg b3N0KTsKPiArICAgICAgICAgICAgaWYgKGVyciA8IDApCj4gKyAgICAgICAgICAgICAgICByZXR1 cm4gZXJyOwo+ICsgICAgICAgIH0KPiAgICAgIH0KPgo+ICAgICAgcmV0dXJuIDA7Cj4gZGlmZiAt LWdpdCBhL2ZmdG9vbHMvZmZtcGVnX29wdC5jIGIvZmZ0b29scy9mZm1wZWdfb3B0LmMKPiBpbmRl eCBkNDYzMzA2NTQ2Li42MTc3YTk2YTRlIDEwMDY0NAo+IC0tLSBhL2ZmdG9vbHMvZmZtcGVnX29w dC5jCj4gKysrIGIvZmZ0b29scy9mZm1wZWdfb3B0LmMKPiBAQCAtNjQsNyArNjQsNiBAQCBjb25z dCBjaGFyICpjb25zdCBvcHRfbmFtZV90b3BfZmllbGRfZmlyc3RbXQo+ICAgICAgID0geyJ0b3Ai LCBOVUxMfTsKPiAgSFdEZXZpY2UgKmZpbHRlcl9od19kZXZpY2U7Cj4KPiAgY2hhciAqdnN0YXRz X2ZpbGVuYW1lOwo+IC1jaGFyICpzZHBfZmlsZW5hbWU7Cj4KPiAgZmxvYXQgYXVkaW9fZHJpZnRf dGhyZXNob2xkID0gMC4xOwo+ICBmbG9hdCBkdHNfZGVsdGFfdGhyZXNob2xkICAgPSAxMDsKPiBA QCAtNTgwLDkgKzU3OSw4IEBAIGZhaWw6Cj4KPiAgc3RhdGljIGludCBvcHRfc2RwX2ZpbGUodm9p ZCAqb3B0Y3R4LCBjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKmFyZykKPiAgewo+IC0gICAg YXZfZnJlZShzZHBfZmlsZW5hbWUpOwo+IC0gICAgc2RwX2ZpbGVuYW1lID0gYXZfc3RyZHVwKGFy Zyk7Cj4gLSAgICByZXR1cm4gMDsKPiArICAgIFNjaGVkdWxlciAqc2NoID0gb3B0Y3R4Owo+ICsg ICAgcmV0dXJuIHNjaF9zZHBfZmlsZW5hbWUoc2NoLCBhcmcpOwo+ICB9Cj4KPiAgI2lmIENPTkZJ R19WQUFQSQo+IGRpZmYgLS1naXQgYS90ZXN0cy9yZWYvZmF0ZS9mZm1wZWctZml4X3N1Yl9kdXJh dGlvbl9oZWFydGJlYXQKPiBiL3Rlc3RzL3JlZi9mYXRlL2ZmbXBlZy1maXhfc3ViX2R1cmF0aW9u X2hlYXJ0YmVhdAo+IGluZGV4IDk1N2E0MTA5MjEuLmJjOWI4MzM3OTkgMTAwNjQ0Cj4gLS0tIGEv dGVzdHMvcmVmL2ZhdGUvZmZtcGVnLWZpeF9zdWJfZHVyYXRpb25faGVhcnRiZWF0Cj4gKysrIGIv dGVzdHMvcmVmL2ZhdGUvZmZtcGVnLWZpeF9zdWJfZHVyYXRpb25faGVhcnRiZWF0Cj4gQEAgLTEs NDggKzEsNDAgQEAKPiAgMQo+IC0wMDowMDowMCw5NjggLS0+IDAwOjAwOjAxLDAwMQo+ICswMDow MDowMCw5NjggLS0+IDAwOjAwOjAxLDE2OAo+ICA8Zm9udCBmYWNlPSJNb25vc3BhY2UiPntcYW43 fSg8L2ZvbnQ+Cj4KPiAgMgo+IC0wMDowMDowMSwwMDEgLS0+IDAwOjAwOjAxLDE2OAo+IC08Zm9u dCBmYWNlPSJNb25vc3BhY2UiPntcYW43fSg8L2ZvbnQ+Cj4gLQo+IC0zCj4gIDAwOjAwOjAxLDE2 OCAtLT4gMDA6MDA6MDEsMzY4Cj4gIDxmb250IGZhY2U9Ik1vbm9zcGFjZSI+e1xhbjd9KDxpPiBp bmF1ZGlibDwvaT48L2ZvbnQ+Cj4KPiAtNAo+ICszCj4gIDAwOjAwOjAxLDM2OCAtLT4gMDA6MDA6 MDEsNTY4Cj4gIDxmb250IGZhY2U9Ik1vbm9zcGFjZSI+e1xhbjd9KDxpPiBpbmF1ZGlibGUgcmFk aW8gY2hhdDwvaT48L2ZvbnQ+Cj4KPiAtNQo+ICs0Cj4gIDAwOjAwOjAxLDU2OCAtLT4gMDA6MDA6 MDIsMDAyCj4gIDxmb250IGZhY2U9Ik1vbm9zcGFjZSI+e1xhbjd9KDxpPiBpbmF1ZGlibGUgcmFk aW8gY2hhdHRlcjwvaT4gKTwvZm9udD4KPgo+ICs1Cj4gKzAwOjAwOjAyLDAwMiAtLT4gMDA6MDA6 MDMsMTAzCj4gKzxmb250IGZhY2U9Ik1vbm9zcGFjZSI+e1xhbjd9KDxpPiBpbmF1ZGlibGUgcmFk aW8gY2hhdHRlcjwvaT4gKTwvZm9udD4KPiArCj4gIDYKPiAtMDA6MDA6MDIsMDAyIC0tPiAwMDow MDowMywwMDMKPiAtPGZvbnQgZmFjZT0iTW9ub3NwYWNlIj57XGFuN30oPGk+IGluYXVkaWJsZSBy YWRpbyBjaGF0dGVyPC9pPiApPC9mb250Pgo+IC0KPiAtNwo+IC0wMDowMDowMywwMDMgLS0+IDAw OjAwOjAzLDEwMwo+IC08Zm9udCBmYWNlPSJNb25vc3BhY2UiPntcYW43fSg8aT4gaW5hdWRpYmxl IHJhZGlvIGNoYXR0ZXI8L2k+ICk8L2ZvbnQ+Cj4gLQo+IC04Cj4gIDAwOjAwOjAzLDEwMyAtLT4g MDA6MDA6MDMsMzAzCj4gLTxmb250IGZhY2U9Ik1vbm9zcGFjZSI+e1xhbjd9KDxpPiBpbmF1ZGli bGUgcmFkaW8gY2hhdHRlcjwvaT4gKQo+ICs8Zm9udCBmYWNlPSJNb25vc3BhY2UiPntcYW43fSg8 aT4gaW5hdWRpYmxlIHJhZGlvIGNoYXR0ZXI8L2k+ICkKPiAgPj48L2ZvbnQ+Cj4KPiAtOQo+ICs3 Cj4gIDAwOjAwOjAzLDMwMyAtLT4gMDA6MDA6MDMsNTAzCj4gLTxmb250IGZhY2U9Ik1vbm9zcGFj ZSI+e1xhbjd9KDxpPiBpbmF1ZGlibGUgcmFkaW8gY2hhdHRlcjwvaT4gKQo+ICs8Zm9udCBmYWNl PSJNb25vc3BhY2UiPntcYW43fSg8aT4gaW5hdWRpYmxlIHJhZGlvIGNoYXR0ZXI8L2k+ICkKPiAg Pj4gU2FmZXR5IHJlbWE8L2ZvbnQ+Cj4KPiAtMTAKPiArOAo+ICAwMDowMDowMyw1MDQgLS0+IDAw OjAwOjAzLDcwNAo+IC08Zm9udCBmYWNlPSJNb25vc3BhY2UiPntcYW43fSg8aT4gaW5hdWRpYmxl IHJhZGlvIGNoYXR0ZXI8L2k+ICkKPiArPGZvbnQgZmFjZT0iTW9ub3NwYWNlIj57XGFuN30oPGk+ IGluYXVkaWJsZSByYWRpbyBjaGF0dGVyPC9pPiApCj4gID4+IFNhZmV0eSByZW1haW5zIG91ciBu dW1iPC9mb250Pgo+Cj4gLTExCj4gKzkKPiAgMDA6MDA6MDMsNzA0IC0tPiAwMDowMDowNCwwMDQK PiAtPGZvbnQgZmFjZT0iTW9ub3NwYWNlIj57XGFuN30oPGk+IGluYXVkaWJsZSByYWRpbyBjaGF0 dGVyPC9pPiApCj4gKzxmb250IGZhY2U9Ik1vbm9zcGFjZSI+e1xhbjd9KDxpPiBpbmF1ZGlibGUg cmFkaW8gY2hhdHRlcjwvaT4gKQo+ICA+PiBTYWZldHkgcmVtYWlucyBvdXIgbnVtYmVyIG9uZTwv Zm9udD4KPgo+IC0tCj4gMi40Mi4wCj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IGZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBmZm1wZWctZGV2 ZWxAZmZtcGVnLm9yZwo+IGh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBl Zy1kZXZlbAo+Cj4gVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCj4g ZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJl Ii4KPgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1w ZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZt cGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZp c2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcg d2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==