From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by sourceware.org (Postfix) with ESMTPS id C97953858CD1; Sat, 9 Dec 2023 11:12:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C97953858CD1 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C97953858CD1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::32a ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702120365; cv=none; b=oHLWV58YCinipIziA8Zee3dsR/7mOj+f6tYC7pmKHqLYXfAYTkk7BJWAvS4YlSlAQHZ5BH2kiOUFzpJizQWDtlF+77cPF0XrHanhaChIDDUxiRE4MwzJZrlzSqxuanJKWgYUQgWP2bvO6XPzferi3OgN7pB3NoARmBV4Dr3QxEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702120365; c=relaxed/simple; bh=rXEXTzAuwp7D2RHkyJozRmnUbszcxujem1AgT90M4EM=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=kkWAW8V2RP7nRCwCS4V8LNQZVfEXRo37xXbZ6l/NhVfdMmBXApfaSuJDUuwexKrGjK/kOThctyUmfAmPGv5R4xPy2CutnQmdRr82GM45VXfw+qnUyYPEdmXFLhNarF3HyqOL7NrNqWmNy7TLQpDuYC7VidTpv+VVSSWEZmoPx/w= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-40c29f7b068so27424445e9.0; Sat, 09 Dec 2023 03:12:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1702120357; x=1702725157; darn=gcc.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=i7G7zEPRJ9zwC+ahV2+XMIWoW50fzcxyYzsO7aM8YTg=; b=nljySOA4fhrC47jtnhAMfyCZdlJiAJOq4glNOwG9L9JIcSpv9VEugmuia2Qij7nHoY 7FNHOou91fdXU8qNgF8YhJLYbVVuuOQms2KNATaLGm+0iH3M3ANtKEagIhmNreAsqW86 a7NuANAiR6m3vFP7UjJUYXTLirWVCMM5qxSQ6nIMW8wL1cgnHQRkd/Kw6BbzGZPKHVss Inj2+No+wB/PpUuEj/4caqiaWa9RTWN13uX5udBlt3tz09yJTZZxoC5h2RFXvQQ18E/O 5iht366oQdjQLyvobHGCjbqI9fMo21t0qVc6KJ5lOqf6rno3M4KIAGY/8yYkxQDAeFvO sBSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702120357; x=1702725157; h=cc: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=i7G7zEPRJ9zwC+ahV2+XMIWoW50fzcxyYzsO7aM8YTg=; b=gsF0QUntD/uVZGSum98tTZBSzy6PAJccepk/W2O7WCpn/FXjm8RjtoHQ9jMh9wRAWH fdZwENotORbsGTHPHnaAZPV7SKP+cSimkPtg8DeK234goItt46QxwZbqjxu2HPCXVFfm seWmjE+ryI0TrzE3aFAgXgOUvxDPSPCmCJKjL/0dDDsWQkQpG2boXfn0keN1sK5q9wYv Wv/4R8PP7sx2UZTyRa0cEoeKmchGt6UaxuFIHpPXMoavaujXoc51qCioptwBxZdz8g3x h5S5rU1WzRzhDuUl8RjJe6UaK+tdMiNPEVwK5QhpAkKo6UAiKB1XfbvsA3n9OJkKIBaD gb4A== X-Gm-Message-State: AOJu0YzG6rkX5Htw4K1MVZWJ9ZW0RPax7VvgpfP9KNMuB9K4zWVifg8P dT7lnnrtmC2ZSJd8soJDH739qcXd+wA20eE5lDw= X-Google-Smtp-Source: AGHT+IGCLi9Kj8vN7I4KsmqPmJ59LE5ocBp1ocxWHkgEtVvTvi+5uWfV3ZTexKVzSz/NbqJ39R3kpb5W4ae0r99rlJs= X-Received: by 2002:a05:600c:2e95:b0:40c:2a85:85ee with SMTP id p21-20020a05600c2e9500b0040c2a8585eemr706247wmn.137.1702120357087; Sat, 09 Dec 2023 03:12:37 -0800 (PST) MIME-Version: 1.0 References: <77bb82eeebe99921773538e56b6c8baba12634a7.camel@zoho.com> <159640ff4a004359945ca9e8a81f6209f17fd39e.camel@zoho.com> In-Reply-To: <159640ff4a004359945ca9e8a81f6209f17fd39e.camel@zoho.com> From: Guillaume Gomez Date: Sat, 9 Dec 2023 12:12:25 +0100 Message-ID: Subject: Re: [PATCH] Add support for function attributes and variable attributes To: Antoni Boucher Cc: jit@gcc.gnu.org, gcc-patches@gcc.gnu.org, David Malcolm Content-Type: multipart/mixed; boundary="0000000000003ff13b060c11c762" X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000003ff13b060c11c762 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Added it. Le jeu. 7 d=C3=A9c. 2023 =C3=A0 18:13, Antoni Boucher a = =C3=A9crit : > > It seems like you forgot to prefix the commit message with "libgccjit: > ". > > On Thu, 2023-11-30 at 10:55 +0100, Guillaume Gomez wrote: > > Ping David. :) > > > > Le jeu. 23 nov. 2023 =C3=A0 22:59, Antoni Boucher a > > =C3=A9crit : > > > David: I found back the comment you made. Here it is: > > > > > > I see you have patches to add function and variable attributes; > > > I > > > wonder if this would be cleaner internally if there was a > > > recording::attribute class, rather than the std::pair currently > > > in > > > use > > > (some attributes have int arguments rather than string, others > > > have > > > multiple args). > > > > > > I also wondered if a "gcc_jit_attribute" type could be exposed > > > to > > > the > > > user, e.g.: > > > > > > attr1 =3D gcc_jit_context_new_attribute (ctxt, "noreturn"); > > > attr2 =3D gcc_jit_context_new_attribute_with_string (ctxt, > > > "alias", > > > "__foo"); > > > gcc_jit_function_add_attribute (ctxt, attr1); > > > gcc_jit_function_add_attribute (ctxt, attr2); > > > > > > or somesuch? But I think the API you currently have is OK. > > > > > > On Thu, 2023-11-23 at 22:52 +0100, Guillaume Gomez wrote: > > > > Ping David. :) > > > > > > > > Le mer. 15 nov. 2023 =C3=A0 17:56, Antoni Boucher a > > > > =C3=A9crit : > > > > > > > > > > David: another thing I remember you mentioned when you reviewed > > > > > an > > > > > earlier version of this patch is the usage of `std::pair`. > > > > > I can't find where you said that, but I remember you mentioned > > > > > that > > > > > we > > > > > should use a struct instead. > > > > > Can you please elaborate again? > > > > > Thanks. > > > > > > > > > > On Wed, 2023-11-15 at 17:53 +0100, Guillaume Gomez wrote: > > > > > > Hi, > > > > > > > > > > > > This patch adds the (incomplete) support for function and > > > > > > variable > > > > > > attributes. The added attributes are the ones we're using in > > > > > > rustc_codegen_gcc but all the groundwork is done to add more > > > > > > (and > > > > > > we > > > > > > will very likely add more as we didn't add all the ones we > > > > > > use in > > > > > > rustc_codegen_gcc yet). > > > > > > > > > > > > The only big question with this patch is about `inline`. We > > > > > > currently > > > > > > handle it as an attribute because it is more convenient for > > > > > > us > > > > > > but is > > > > > > it ok or should we create a separate function to mark a > > > > > > function > > > > > > as > > > > > > inlined? > > > > > > > > > > > > Thanks in advance for the review. > > > > > > > > > --0000000000003ff13b060c11c762 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-PATCH-Add-support-for-function-attributes-and-variab.patch" Content-Disposition: attachment; filename="0001-PATCH-Add-support-for-function-attributes-and-variab.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lpxyi2bn0 RnJvbSBkZjc1ZjBlYjhhYWNiYTI0OWI2ZTc5MTYwMzc1MmUzNTc3ODk1MWE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIwIEp1biAyMDIyIDE0OjM0OjM5IC0wNDAwClN1YmplY3Q6IFtQ QVRDSF0gbGliZ2Njaml0OiBBZGQgc3VwcG9ydCBmb3IgZnVuY3Rpb24gYXR0cmlidXRlcyBhbmQg dmFyaWFibGUKIGF0dHJpYnV0ZXMuCgpnY2Mvaml0L0NoYW5nZUxvZzoKCgkqIGR1bW15LWZyb250 ZW5kLmNjIChoYW5kbGVfYWxpYXNfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV9h bHdheXNfaW5saW5lX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfY29sZF9hdHRy aWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX2Zuc3BlY19hdHRyaWJ1dGUpOiBOZXcgZnVu Y3Rpb24uCgkoaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhh bmRsZV9mb3JtYXRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRsZV9ub2lubGluZV9h dHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX3RhcmdldF9hdHRyaWJ1dGUpOiBOZXcg ZnVuY3Rpb24uCgkoaGFuZGxlX3VzZWRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGhhbmRs ZV92aXNpYmlsaXR5X2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShoYW5kbGVfd2Vha19hdHRy aWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoaGFuZGxlX2FsaWFzX2lmdW5jX2F0dHJpYnV0ZSk6IE5l dyBmdW5jdGlvbi4KCSogaml0LXBsYXliYWNrLmNjIChmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nKTog TmV3IGZ1bmN0aW9uLgoJKHZhcmlhYmxlX2F0dHJpYnV0ZV90b19zdHJpbmcpOiBOZXcgZnVuY3Rp b24uCgkoZ2xvYmFsX25ld19kZWNsKTogQWRkIGF0dHJpYnV0ZXMgc3VwcG9ydC4KCShzZXRfdmFy aWFibGVfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKG5ld19nbG9iYWwpOiBBZGQgYXR0cmli dXRlcyBzdXBwb3J0LgoJKG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQpOiBBZGQgYXR0cmlidXRlcyBz dXBwb3J0LgoJKG5ld19sb2NhbCk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCgkqIGppdC1wbGF5 YmFjay5oIChmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nKTogTmV3IGZ1bmN0aW9uLgoJKHNldF92YXJp YWJsZV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkqIGppdC1yZWNvcmRpbmcuY2MgKHJlY29y ZGluZzo6bHZhbHVlOjphZGRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZGluZzo6 ZnVuY3Rpb246OmZ1bmN0aW9uKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29yZGluZzo6ZnVuY3Rpb246 OndyaXRlX3RvX2R1bXApOiBBZGQgYXR0cmlidXRlcyBzdXBwb3J0LgoJKHJlY29yZGluZzo6ZnVu Y3Rpb246OmFkZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkaW5nOjpmdW5jdGlv bjo6YWRkX3N0cmluZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkaW5nOjpmdW5j dGlvbjo6YWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKHJlY29y ZGluZzo6Z2xvYmFsOjpyZXBsYXlfaW50byk6IEFkZCBhdHRyaWJ1dGVzIHN1cHBvcnQuCgkocmVj b3JkaW5nOjpsb2NhbDo6cmVwbGF5X2ludG8pOiBBZGQgYXR0cmlidXRlcyBzdXBwb3J0LgoJKiBs aWJnY2NqaXQuY2MgKGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlv bi4KCShnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9u LgoJKGdjY19qaXRfZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlKTogTmV3IGZ1 bmN0aW9uLgoJKGdjY19qaXRfbHZhbHVlX2FkZF9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkq IGxpYmdjY2ppdC5oIChlbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlKTogTmV3IGVudW0uCgkoZ2Nj X2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKTogTmV3IGZ1bmN0aW9uLgoJKGdjY19qaXRfZnVu Y3Rpb25fYWRkX3N0cmluZ19hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoZ2NjX2ppdF9mdW5j dGlvbl9hZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1dGUpOiBOZXcgZnVuY3Rpb24uCgkoZW51bSBn Y2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCShnY2Nfaml0X2x2YWx1 ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSk6IE5ldyBmdW5jdGlvbi4KCSogbGliZ2Njaml0Lm1hcDog RGVjbGFyZSBuZXcgZnVuY3Rpb25zLgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBqaXQu ZGcvaml0LmV4cDogQWRkIGBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90YCB0ZXN0IGNv bW1hbmQuCgkqIGppdC5kZy90ZXN0LXJlc3RyaWN0LmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVz dC1yZXN0cmljdC1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWFsaWFzLWF0 dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1 dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWNvbGQtYXR0cmlidXRlLmM6IE5ldyB0ZXN0 LgoJKiBqaXQuZGcvdGVzdC1jb25zdC1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90 ZXN0LW5vaW5saW5lLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSogaml0LmRnL3Rlc3Qtbm9ubnVs bC1hdHRyaWJ1dGUuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LXB1cmUtYXR0cmlidXRlLmM6 IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVzdC11c2VkLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCSog aml0LmRnL3Rlc3QtdmFyaWFibGUtYXR0cmlidXRlLmM6IE5ldyB0ZXN0LgoJKiBqaXQuZGcvdGVz dC13ZWFrLWF0dHJpYnV0ZS5jOiBOZXcgdGVzdC4KCmdjYy9qaXQvQ2hhbmdlTG9nOgoJKiBkb2Nz L3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIExJQkdDQ0pJ VF9BQklfMjYuCgkqIGRvY3MvdG9waWNzL3R5cGVzLnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9y IG5ldyBmdW5jdGlvbnMuCgpDby1hdXRob3JlZC1ieTogQW50b25pIEJvdWNoZXIgPGJvdWFudG9A em9oby5jb20+ClNpZ25lZC1vZmYtYnk6IEd1aWxsYXVtZSBHb21leiA8Z3VpbGxhdW1lMS5nb21l ekBnbWFpbC5jb20+Ci0tLQogZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdCAg ICAgICAgIHwgIDEyICsKIGdjYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0ICAgICAgICAgICAg ICAgICB8ICA3NyArKysKIGdjYy9qaXQvZHVtbXktZnJvbnRlbmQuY2MgICAgICAgICAgICAgICAg ICAgICB8IDUwNCArKysrKysrKysrKysrKysrLS0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmNjICAg ICAgICAgICAgICAgICAgICAgICB8IDE2NSArKysrKy0KIGdjYy9qaXQvaml0LXBsYXliYWNrLmgg ICAgICAgICAgICAgICAgICAgICAgICB8ICAzNyArLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNj ICAgICAgICAgICAgICAgICAgICAgIHwgMTY2ICsrKysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5n LmggICAgICAgICAgICAgICAgICAgICAgIHwgIDE5ICstCiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDUgKysKIGdjYy9qaXQvbGliZ2Njaml0LmggICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICA0OSArKwogZ2NjL2ppdC9saWJnY2NqaXQubWFwICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIGdjYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5l eHAgICAgICAgICAgICAgICAgICB8ICAzMyArKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1h bGlhcy1hdHRyaWJ1dGUuYyAgIHwgIDUwICsrCiAuLi4vaml0LmRnL3Rlc3QtYWx3YXlzX2lubGlu ZS1hdHRyaWJ1dGUuYyAgICAgfCAxNTMgKysrKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0 LWNvbGQtYXR0cmlidXRlLmMgICAgfCAgNTQgKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt Y29uc3QtYXR0cmlidXRlLmMgICB8IDEzNCArKysrKwogLi4uL2ppdC5kZy90ZXN0LW5vaW5saW5l LWF0dHJpYnV0ZS5jICAgICAgICAgIHwgMTE0ICsrKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rl c3Qtbm9ubnVsbC1hdHRyaWJ1dGUuYyB8ICA5NCArKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LXB1cmUtYXR0cmlidXRlLmMgICAgfCAxMzQgKysrKysKIC4uLnQtcmVzdHJpY3QuYyA9PiB0 ZXN0LXJlc3RyaWN0LWF0dHJpYnV0ZS5jfSB8ICAgNCArLQogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC11c2VkLWF0dHJpYnV0ZS5jICAgIHwgMTEyICsrKysKIC4uLi9qaXQuZGcvdGVzdC12YXJp YWJsZS1hdHRyaWJ1dGUuYyAgICAgICAgICB8ICA0NiArKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC13ZWFrLWF0dHJpYnV0ZS5jICAgIHwgIDQxICsrCiAyMiBmaWxlcyBjaGFuZ2VkLCAxOTg2 IGluc2VydGlvbnMoKyksIDY1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWFsd2F5c19pbmxpbmUtYXR0cmlidXRlLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbGQtYXR0cmlidXRl LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbnN0LWF0 dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1u b2lubGluZS1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3Qtbm9ubnVsbC1hdHRyaWJ1dGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYwogcmVuYW1lIGdjYy90ZXN0c3VpdGUv aml0LmRnL3t0ZXN0LXJlc3RyaWN0LmMgPT4gdGVzdC1yZXN0cmljdC1hdHRyaWJ1dGUuY30gKDk1 JSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXVzZWQtYXR0 cmlidXRlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXZh cmlhYmxlLWF0dHJpYnV0ZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQu ZGcvdGVzdC13ZWFrLWF0dHJpYnV0ZS5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGlj cy9jb21wYXRpYmlsaXR5LnJzdCBiL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5y c3QKaW5kZXggZWJlZGU0NDBlZTQuLmI0YTZlOTk3OTQxIDEwMDY0NAotLS0gYS9nY2Mvaml0L2Rv Y3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvY29t cGF0aWJpbGl0eS5yc3QKQEAgLTM3OCwzICszNzgsMTUgQEAgYWxpZ25tZW50IG9mIGEgdmFyaWFi bGU6CiAtLS0tLS0tLS0tLS0tLS0tLS0tLQogYGBMSUJHQ0NKSVRfQUJJXzI1YGAgY292ZXJzIHRo ZSBhZGRpdGlvbiBvZgogOmZ1bmM6YGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3RgCisKKy4uIF9M SUJHQ0NKSVRfQUJJXzI2OgorCitgYExJQkdDQ0pJVF9BQklfMjZgYAorLS0tLS0tLS0tLS0tLS0t LS0tLS0KK2BgTElCR0NDSklUX0FCSV8yNmBgIGNvdmVycyB0aGUgYWRkaXRpb24gb2YgZnVuY3Rp b25zIHRvIHNldCBhdHRyaWJ1dGVzCitvbiBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlczoKKworICAq IDpmdW5jOmBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGVgCisgICogOmZ1bmM6YGdjY19q aXRfZnVuY3Rpb25fYWRkX3N0cmluZ19hdHRyaWJ1dGVgCisgICogOmZ1bmM6YGdjY19qaXRfZnVu Y3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlYAorICAqIDpmdW5jOmBnY2Nfaml0X2x2 YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZWAKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3Bp Y3MvdHlwZXMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QKaW5kZXggZDhjMWQx NWQ2OWQuLjZjNzJjOTljYmQ5IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVz LnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdApAQCAtNTUzLDMgKzU1Myw4 MCBAQCBSZWZsZWN0aW9uIEFQSQogICAgLi4gY29kZS1ibG9jazo6IGMKIAogICAgICAgI2lmZGVm IExJQkdDQ0pJVF9IQVZFX2djY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QKKworLi4gZnVuY3Rpb246 OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAo Z2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUpCisKKyAg ICAgQWRkIGFuIGF0dHJpYnV0ZSBgYGF0dHJpYnV0ZWBgIHRvIGEgZnVuY3Rpb24gYGBmdW5jYGAu CisKKyAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgY29kZToKKworICAu LiBjb2RlLWJsb2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisK KyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8yNmA7 IHlvdSBjYW4gdGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisgICAuLiBjb2RlLWJs b2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQVRUUklCVVRFUworCisuLiBm dW5jdGlvbjo6ICB2b2lkXAorICAgICAgICAgICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3Ry aW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gZ2NjX2ppdF9mbl9hdHRy aWJ1dGUgYXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFsdWUpCisKKyAgICAgQWRkIGEgc3RyaW5nIGF0 dHJpYnV0ZSBgYGF0dHJpYnV0ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBgIHRvIGEgZnVuY3Rpb24K KyAgICAgYGBmdW5jYGAuCisKKyAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dp bmcgY29kZToKKworICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgX19hdHRyaWJ1dGVfXyAoKGFs aWFzICgieHh4IikpKQorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJ QkdDQ0pJVF9BQklfMjZgOyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcK KworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FU VFJJQlVURVMKKworLi4gZnVuY3Rpb246OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRf ZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlIChnY2Nfaml0X2Z1bmN0aW9uICpm dW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGludCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCkKKworICAgICBBZGQgYW4gYXR0cmlidXRl IGBgYXR0cmlidXRlYGAgd2l0aCBgYGxlbmd0aGBgIGludGVnZXIgdmFsdWVzIGBgdmFsdWVgYCB0 byBhCisgICAgIGZ1bmN0aW9uIGBgZnVuY2BgLiBUaGUgaW50ZWdlciB2YWx1ZXMgbXVzdCBiZSB0 aGUgc2FtZSBhcyB5b3Ugd291bGQgd3JpdGUKKyAgICAgdGhlbSBpbiBhIEMgY29kZS4KKworICAg ICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyBjb2RlOgorCisgIC4uIGNvZGUt YmxvY2s6OiBjCisKKyAgICBfX2F0dHJpYnV0ZV9fICgobm9ubnVsbCAoMSwgMikpKQorCisgICBU aGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZgOyB5b3Ug Y2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6 IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKKworLi4gZnVuY3Rp b246OiAgdm9pZFwKKyAgICAgICAgICAgICAgIGdjY19qaXRfbHZhbHVlX2FkZF9zdHJpbmdfYXR0 cmlidXRlIChnY2Nfaml0X2x2YWx1ZSAqdmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBh dHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqdmFsdWUpCisKKyAgICAgQWRkIGFuIGF0dHJpYnV0ZSBgYGF0dHJp YnV0ZWBgIHdpdGggdmFsdWUgYGB2YWx1ZWBgIHRvIGEgdmFyaWFibGUgYGB2YXJpYWJsZWBgLgor CisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZg OyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1i bG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0FUVFJJQlVURVMKZGlmZiAt LWdpdCBhL2djYy9qaXQvZHVtbXktZnJvbnRlbmQuY2MgYi9nY2Mvaml0L2R1bW15LWZyb250ZW5k LmNjCmluZGV4IGE3MjkwODZiYWZiLi44OThiNGQ2ZTdmOCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9k dW1teS1mcm9udGVuZC5jYworKysgYi9nY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjCkBAIC0yOSwz MCArMjksNDIgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKICNpbmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RyaW5ncG9vbC5oIgogI2lu Y2x1ZGUgImF0dHJpYnMuaCIKKyNpbmNsdWRlICJjZ3JhcGguaCIKKyNpbmNsdWRlICJ0YXJnZXQu aCIKIAogI2luY2x1ZGUgPG1wZnIuaD4KIAogLyogQXR0cmlidXRlIGhhbmRsaW5nLiAgKi8KIAot c3RhdGljIHRyZWUgaGFuZGxlX25vcmV0dXJuX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVl LCBpbnQsIGJvb2wgKik7Ci1zdGF0aWMgdHJlZSBoYW5kbGVfbGVhZl9hdHRyaWJ1dGUgKHRyZWUg KiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX2FsaWFzX2F0 dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBo YW5kbGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LAor CQkJCQkgICAgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9jb2xkX2F0dHJpYnV0ZSAodHJl ZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVfY29uc3Rf YXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVl IGhhbmRsZV9mbnNwZWNfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAq KTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9mb3JtYXRfYXJnX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVl LCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfZm9ybWF0X2F0dHJpYnV0 ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVf bGVhZl9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGlj IHRyZWUgaGFuZGxlX21hbGxvY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBi b29sICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3B1cmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUs IHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGhhbmRsZV9ub3ZvcHNfYXR0cmlidXRl ICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9u b2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3Rh dGljIHRyZWUgaGFuZGxlX25vbm51bGxfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGlu dCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUgKHRyZWUg KiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwogc3RhdGljIHRyZWUgaGFuZGxlX25vdGhyb3df YXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVl IGhhbmRsZV9zZW50aW5lbF9hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29s ICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3R5cGVfZ2VuZXJpY19hdHRyaWJ1dGUgKHRyZWUgKiwg dHJlZSwgdHJlZSwgaW50LCBib29sICopOwotc3RhdGljIHRyZWUgaGFuZGxlX3RyYW5zYWN0aW9u X3B1cmVfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKLXN0YXRp YyB0cmVlIGhhbmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVl LCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfbm92b3BzX2F0dHJpYnV0ZSAodHJl ZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CiBzdGF0aWMgdHJlZSBoYW5kbGVfcGF0Y2hh YmxlX2Z1bmN0aW9uX2VudHJ5X2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLAogCQkJCQkJ ICAgICAgIGludCwgYm9vbCAqKTsKLXN0YXRpYyB0cmVlIGlnbm9yZV9hdHRyaWJ1dGUgKHRyZWUg KiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFuZGxlX3B1cmVfYXR0 cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhh bmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJv b2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfc2VudGluZWxfYXR0cmlidXRlICh0cmVlICosIHRy ZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRsZV90YXJnZXRfYXR0cmli dXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGhhbmRs ZV90cmFuc2FjdGlvbl9wdXJlX2F0dHJpYnV0ZSAodHJlZSAqLCB0cmVlLCB0cmVlLCBpbnQsIGJv b2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdHlwZV9nZW5lcmljX2F0dHJpYnV0ZSAodHJlZSAq LCB0cmVlLCB0cmVlLCBpbnQsIGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfdXNlZF9hdHRy aWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOworc3RhdGljIHRyZWUgaGFu ZGxlX3Zpc2liaWxpdHlfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRyZWUsIGludCwKKwkJCQkJ IGJvb2wgKik7CitzdGF0aWMgdHJlZSBoYW5kbGVfd2Vha19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJl ZSwgdHJlZSwgaW50LCBib29sICopIDsKIAotc3RhdGljIHRyZWUgaGFuZGxlX2Zvcm1hdF9hdHRy aWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwotc3RhdGljIHRyZWUgaGFu ZGxlX2Zuc3BlY19hdHRyaWJ1dGUgKHRyZWUgKiwgdHJlZSwgdHJlZSwgaW50LCBib29sICopOwot c3RhdGljIHRyZWUgaGFuZGxlX2Zvcm1hdF9hcmdfYXR0cmlidXRlICh0cmVlICosIHRyZWUsIHRy ZWUsIGludCwgYm9vbCAqKTsKK3N0YXRpYyB0cmVlIGlnbm9yZV9hdHRyaWJ1dGUgKHRyZWUgKiwg dHJlZSwgdHJlZSwgaW50LCBib29sICopOwogCiAvKiBIZWxwZXIgdG8gZGVmaW5lIGF0dHJpYnV0 ZSBleGNsdXNpb25zLiAgKi8KICNkZWZpbmUgQVRUUl9FWENMKG5hbWUsIGZ1bmN0aW9uLCB0eXBl LCB2YXJpYWJsZSkJXApAQCAtODEsNTUgKzkzLDk4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0 cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9yZXR1cm5zX3R3aWNlX2V4Y2x1c2lvbnNbXSA9 CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjOjpleGNsdXNpb25zIGF0dHJfY29u c3RfcHVyZV9leGNsdXNpb25zW10gPQogewogICBBVFRSX0VYQ0wgKCJjb25zdCIsIHRydWUsIHRy dWUsIHRydWUpLAorICBBVFRSX0VYQ0wgKCJhbGxvY19hbGlnbiIsIHRydWUsIHRydWUsIHRydWUp LAorICBBVFRSX0VYQ0wgKCJhbGxvY19zaXplIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJf RVhDTCAoIm1hbGxvYyIsIHRydWUsIHRydWUsIHRydWUpLAogICBBVFRSX0VYQ0wgKCJub3JldHVy biIsIHRydWUsIHRydWUsIHRydWUpLAogICBBVFRSX0VYQ0wgKCJwdXJlIiwgdHJ1ZSwgdHJ1ZSwg dHJ1ZSksCiAgIEFUVFJfRVhDTCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIH07CiAKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9pbmxpbmVf ZXhjbHVzaW9uc1tdID0KK3sKKyAgQVRUUl9FWENMICgibm9pbmxpbmUiLCB0cnVlLCB0cnVlLCB0 cnVlKSwKKyAgQVRUUl9FWENMIChOVUxMLCBmYWxzZSwgZmFsc2UsIGZhbHNlKSwKK307CisKK2V4 dGVybiBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9jb2xkX2hv dF9leGNsdXNpb25zW10gPQoreworICBBVFRSX0VYQ0wgKCJjb2xkIiwgdHJ1ZSwgdHJ1ZSwgdHJ1 ZSksCisgIEFUVFJfRVhDTCAoImhvdCIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRSX0VYQ0wg KE5VTEwsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0 dHJpYnV0ZV9zcGVjOjpleGNsdXNpb25zIGF0dHJfbm9pbmxpbmVfZXhjbHVzaW9uc1tdID0KK3sK KyAgQVRUUl9FWENMICgiYWx3YXlzX2lubGluZSIsIHRydWUsIHRydWUsIHRydWUpLAorICBBVFRS X0VYQ0wgKCJnbnVfaW5saW5lIiwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSksCisgIEFUVFJfRVhDTCAoTlVM TCwgZmFsc2UsIGZhbHNlLCBmYWxzZSksCit9OworCiAvKiBUYWJsZSBvZiBtYWNoaW5lLWluZGVw ZW5kZW50IGF0dHJpYnV0ZXMgc3VwcG9ydGVkIGluIGxpYmdjY2ppdC4gICovCiBjb25zdCBzdHJ1 Y3QgYXR0cmlidXRlX3NwZWMgaml0X2F0dHJpYnV0ZV90YWJsZVtdID0KIHsKICAgLyogeyBuYW1l LCBtaW5fbGVuLCBtYXhfbGVuLCBkZWNsX3JlcSwgdHlwZV9yZXEsIGZuX3R5cGVfcmVxLAogICAg ICAgIGFmZmVjdHNfdHlwZV9pZGVudGl0eSwgaGFuZGxlciwgZXhjbHVkZSB9ICovCi0gIHsgIm5v cmV0dXJuIiwgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwK LQkJCSAgICAgIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUsCi0JCQkgICAgICBhdHRyX25vcmV0 dXJuX2V4Y2x1c2lvbnMgfSwKLSAgeyAibGVhZiIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2Us IGZhbHNlLCBmYWxzZSwKLQkJCSAgICAgIGhhbmRsZV9sZWFmX2F0dHJpYnV0ZSwgTlVMTCB9LAor ICB7ICJhbGlhcyIsCQkgICAgICAxLCAxLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJ CSAgICAgIGhhbmRsZV9hbGlhc19hdHRyaWJ1dGUsIE5VTEwgfSwKKyAgeyAiYWx3YXlzX2lubGlu ZSIsCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFu ZGxlX2Fsd2F5c19pbmxpbmVfYXR0cmlidXRlLAorCQkJICAgICAgYXR0cl9pbmxpbmVfZXhjbHVz aW9ucyB9LAorICB7ICJjb2xkIiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZh bHNlLAorCQkJICAgICAgaGFuZGxlX2NvbGRfYXR0cmlidXRlLAorCQkJICAgICAgYXR0cl9jb2xk X2hvdF9leGNsdXNpb25zIH0sCiAgIC8qIFRoZSBzYW1lIGNvbW1lbnRzIGFzIGZvciBub3JldHVy biBhdHRyaWJ1dGVzIGFwcGx5IHRvIGNvbnN0IG9uZXMuICAqLwotICB7ICJjb25zdCIsICAgICAg ICAgICAgICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisgIHsgImNvbnN0 IiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFu ZGxlX2NvbnN0X2F0dHJpYnV0ZSwKIAkJCSAgICAgIGF0dHJfY29uc3RfcHVyZV9leGNsdXNpb25z IH0sCi0gIHsgIm1hbGxvYyIsICAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZh bHNlLCBmYWxzZSwKKyAgeyAiZm4gc3BlYyIsCQkgICAgICAxLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1 ZSwgZmFsc2UsCisJCQkgICAgICBoYW5kbGVfZm5zcGVjX2F0dHJpYnV0ZSwgTlVMTCB9LAorCisg IHsgImxlYWYiLAkJICAgICAgMCwgMCwgdHJ1ZSwgIGZhbHNlLCBmYWxzZSwgZmFsc2UsCisJCQkg ICAgICBoYW5kbGVfbGVhZl9hdHRyaWJ1dGUsIE5VTEwgfSwKKyAgeyAibWFsbG9jIiwJCSAgICAg IDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX21hbGxv Y19hdHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyAicHVyZSIsICAgICAgICAgICAgICAgICAgIDAsIDAs IHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAotCQkJICAgICAgaGFuZGxlX3B1cmVfYXR0cmli dXRlLAotCQkJICAgICAgYXR0cl9jb25zdF9wdXJlX2V4Y2x1c2lvbnMgfSwKLSAgeyAibm8gdm9w cyIsICAgICAgICAgICAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorICB7 ICJub3JldHVybiIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJ CSAgICAgIGhhbmRsZV9ub3JldHVybl9hdHRyaWJ1dGUsCisJCQkgICAgICBhdHRyX25vcmV0dXJu X2V4Y2x1c2lvbnMgfSwKKyAgeyAibm8gdm9wcyIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2Us IGZhbHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9ub3ZvcHNfYXR0cmlidXRlLCBOVUxMIH0s Ci0gIHsgIm5vbm51bGwiLCAgICAgICAgICAgICAgICAwLCAtMSwgZmFsc2UsIHRydWUsIHRydWUs IGZhbHNlLAorICB7ICJub2lubGluZSIsCQkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNl LCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9ub2lubGluZV9hdHRyaWJ1dGUsCisJCQkgICAgICBh dHRyX25vaW5saW5lX2V4Y2x1c2lvbnMgfSwKKyAgeyAibm9ubnVsbCIsCQkgICAgICAwLCAtMSwg ZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX25vbm51bGxfYXR0cmli dXRlLCBOVUxMIH0sCi0gIHsgIm5vdGhyb3ciLCAgICAgICAgICAgICAgICAwLCAwLCB0cnVlLCAg ZmFsc2UsIGZhbHNlLCBmYWxzZSwKKyAgeyAibm90aHJvdyIsCQkgICAgICAwLCAwLCB0cnVlLCAg ZmFsc2UsIGZhbHNlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9ub3Rocm93X2F0dHJpYnV0ZSwg TlVMTCB9LAogICB7ICJwYXRjaGFibGVfZnVuY3Rpb25fZW50cnkiLCAxLCAyLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX3BhdGNoYWJsZV9mdW5jdGlvbl9lbnRy eV9hdHRyaWJ1dGUsCiAJCQkgICAgICBOVUxMIH0sCi0gIHsgInJldHVybnNfdHdpY2UiLCAgICAg ICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKyAgeyAicHVyZSIsCQkgICAg ICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV9wdXJl X2F0dHJpYnV0ZSwKKwkJCSAgICAgIGF0dHJfY29uc3RfcHVyZV9leGNsdXNpb25zIH0sCisgIHsg InJldHVybnNfdHdpY2UiLAkgICAgICAwLCAwLCB0cnVlLCAgZmFsc2UsIGZhbHNlLCBmYWxzZSwK IAkJCSAgICAgIGhhbmRsZV9yZXR1cm5zX3R3aWNlX2F0dHJpYnV0ZSwKIAkJCSAgICAgIGF0dHJf cmV0dXJuc190d2ljZV9leGNsdXNpb25zIH0sCi0gIHsgInNlbnRpbmVsIiwgICAgICAgICAgICAg ICAwLCAxLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCisgIHsgInNlbnRpbmVsIiwJCSAgICAg IDAsIDEsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKIAkJCSAgICAgIGhhbmRsZV9zZW50aW5l bF9hdHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyAidHlwZSBnZW5lcmljIiwgICAgICAgICAgIDAsIDAs IGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKKyAgeyAidGFyZ2V0IiwJCSAgICAgIDEsIC0xLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxlX3RhcmdldF9hdHRyaWJ1 dGUsIE5VTEwgfSwKKyAgeyAidHlwZSBnZW5lcmljIiwJICAgICAgMCwgMCwgZmFsc2UsIHRydWUs IHRydWUsIGZhbHNlLAogCQkJICAgICAgaGFuZGxlX3R5cGVfZ2VuZXJpY19hdHRyaWJ1dGUsIE5V TEwgfSwKLSAgeyAiZm4gc3BlYyIsCSAJICAgICAgMSwgMSwgZmFsc2UsIHRydWUsIHRydWUsIGZh bHNlLAotCQkJICAgICAgaGFuZGxlX2Zuc3BlY19hdHRyaWJ1dGUsIE5VTEwgfSwKICAgeyAidHJh bnNhY3Rpb25fcHVyZSIsCSAgICAgIDAsIDAsIGZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwKIAkJ CSAgICAgIGhhbmRsZV90cmFuc2FjdGlvbl9wdXJlX2F0dHJpYnV0ZSwgTlVMTCB9LAogICAvKiBG b3IgaW50ZXJuYWwgdXNlIG9ubHkuICBUaGUgbGVhZGluZyAnKicgYm90aCBwcmV2ZW50cyBpdHMg dXNhZ2UgaW4KICAgICAgc291cmNlIGNvZGUgYW5kIHNpZ25hbHMgdGhhdCBpdCBtYXkgYmUgb3Zl cnJpZGRlbiBieSBtYWNoaW5lIHRhYmxlcy4gICovCi0gIHsgIip0bSByZWdwYXJtIiwgICAgICAg ICAgICAwLCAwLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsCisgIHsgIip0bSByZWdwYXJtIiwJ ICAgICAgMCwgMCwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLAogCQkJICAgICAgaWdub3JlX2F0 dHJpYnV0ZSwgTlVMTCB9LAotICB7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgMCwgMCwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIE5VTEwsIE5VTEwgfQorICB7ICJ1c2VkIiwJCSAgICAg IDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJICAgICAgaGFuZGxlX3VzZWRf YXR0cmlidXRlLCBOVUxMIH0sCisgIHsgInZpc2liaWxpdHkiLAkgICAgICAxLCAxLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwKKwkJCSAgICAgIGhhbmRsZV92aXNpYmlsaXR5X2F0dHJpYnV0 ZSwgTlVMTCB9LAorICB7ICJ3ZWFrIiwJCSAgICAgIDAsIDAsIHRydWUsICBmYWxzZSwgZmFsc2Us IGZhbHNlLAorCQkJICAgICAgaGFuZGxlX3dlYWtfYXR0cmlidXRlLCBOVUxMIH0sCisgIHsgTlVM TCwJCSAgICAgIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBOVUxMLCBOVUxMIH0K IH07CiAKIC8qIEdpdmUgdGhlIHNwZWNpZmljYXRpb25zIGZvciB0aGUgZm9ybWF0IGF0dHJpYnV0 ZXMsIHVzZWQgYnkgQyBhbmQgYWxsCkBAIC0xMzksMTEgKzE5NCwxMSBAQCBjb25zdCBzdHJ1Y3Qg YXR0cmlidXRlX3NwZWMgaml0X2Zvcm1hdF9hdHRyaWJ1dGVfdGFibGVbXSA9CiB7CiAgIC8qIHsg bmFtZSwgbWluX2xlbiwgbWF4X2xlbiwgZGVjbF9yZXEsIHR5cGVfcmVxLCBmbl90eXBlX3JlcSwK ICAgICAgICBhZmZlY3RzX3R5cGVfaWRlbnRpdHksIGhhbmRsZXIsIGV4Y2x1ZGUgfSAqLwotICB7 ICJmb3JtYXQiLCAgICAgICAgICAgICAgICAgMywgMywgZmFsc2UsIHRydWUsICB0cnVlLCBmYWxz ZSwKKyAgeyAiZm9ybWF0IiwJCSAgICAgIDMsIDMsIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgZmFsc2Us CiAJCQkgICAgICBoYW5kbGVfZm9ybWF0X2F0dHJpYnV0ZSwgTlVMTCB9LAotICB7ICJmb3JtYXRf YXJnIiwgICAgICAgICAgICAgMSwgMSwgZmFsc2UsIHRydWUsICB0cnVlLCBmYWxzZSwKKyAgeyAi Zm9ybWF0X2FyZyIsCSAgICAgIDEsIDEsIGZhbHNlLCB0cnVlLCAgdHJ1ZSwgZmFsc2UsCiAJCQkg ICAgICBoYW5kbGVfZm9ybWF0X2FyZ19hdHRyaWJ1dGUsIE5VTEwgfSwKLSAgeyBOVUxMLCAgICAg ICAgICAgICAgICAgICAgIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBOVUxMLCBO VUxMIH0KKyAgeyBOVUxMLAkJICAgICAgMCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IE5VTEwsIE5VTEwgfQogfTsKIAogLyogQXR0cmlidXRlIGhhbmRsZXJzLiAgKi8KQEAgLTQ4MCw2 ICs1MzUsMzg1IEBAIGhhbmRsZV9mbnNwZWNfYXR0cmlidXRlICh0cmVlICpub2RlIEFUVFJJQlVU RV9VTlVTRUQsIHRyZWUgQVJHX1VOVVNFRCAobmFtZSksCiAgIHJldHVybiBOVUxMX1RSRUU7CiB9 CiAKKy8qIEhhbmRsZSBhbiAidmlzaWJpbGl0eSIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4K KyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hh bmRsZV92aXNpYmlsaXR5X2F0dHJpYnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFy Z3MsCisJCQkgICAgIGludCBBUkdfVU5VU0VEIChmbGFncyksCisJCQkgICAgIGJvb2wgKkFSR19V TlVTRUQgKG5vX2FkZF9hdHRycykpCit7CisgIHRyZWUgZGVjbCA9ICpub2RlOworICB0cmVlIGlk ID0gVFJFRV9WQUxVRSAoYXJncyk7CisgIGVudW0gc3ltYm9sX3Zpc2liaWxpdHkgdmlzOworCisg IGlmIChUWVBFX1AgKCpub2RlKSkKKyAgICB7CisgICAgICBpZiAoVFJFRV9DT0RFICgqbm9kZSkg PT0gRU5VTUVSQUxfVFlQRSkKKwkvKiBPSy4gICovOworICAgICAgZWxzZSBpZiAoIVJFQ09SRF9P Ul9VTklPTl9UWVBFX1AgKCpub2RlKSkKKwl7CisJICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMs ICIlcUUgYXR0cmlidXRlIGlnbm9yZWQgb24gbm9uLWNsYXNzIHR5cGVzIiwKKwkJICAgbmFtZSk7 CisJICByZXR1cm4gTlVMTF9UUkVFOworCX0KKyAgICAgIGVsc2UgaWYgKFRZUEVfRklFTERTICgq bm9kZSkpCisJeworCSAgZXJyb3IgKCIlcUUgYXR0cmlidXRlIGlnbm9yZWQgYmVjYXVzZSAlcVQg aXMgYWxyZWFkeSBkZWZpbmVkIiwKKwkJIG5hbWUsICpub2RlKTsKKwkgIHJldHVybiBOVUxMX1RS RUU7CisJfQorICAgIH0KKyAgZWxzZSBpZiAoZGVjbF9mdW5jdGlvbl9jb250ZXh0IChkZWNsKSAh PSAwIHx8ICFUUkVFX1BVQkxJQyAoZGVjbCkpCisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dh dHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICByZXR1cm4g TlVMTF9UUkVFOworICAgIH0KKworICBpZiAoVFJFRV9DT0RFIChpZCkgIT0gU1RSSU5HX0NTVCkK KyAgICB7CisgICAgICBlcnJvciAoInZpc2liaWxpdHkgYXJndW1lbnQgbm90IGEgc3RyaW5nIik7 CisgICAgICByZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKworICAvKiAgSWYgdGhpcyBpcyBhIHR5 cGUsIHNldCB0aGUgdmlzaWJpbGl0eSBvbiB0aGUgdHlwZSBkZWNsLiAgKi8KKyAgaWYgKFRZUEVf UCAoZGVjbCkpCisgICAgeworICAgICAgZGVjbCA9IFRZUEVfTkFNRSAoZGVjbCk7CisgICAgICBp ZiAoIWRlY2wpCisJcmV0dXJuIE5VTExfVFJFRTsKKyAgICAgIGlmIChUUkVFX0NPREUgKGRlY2wp ID09IElERU5USUZJRVJfTk9ERSkKKwl7CisJICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAi JXFFIGF0dHJpYnV0ZSBpZ25vcmVkIG9uIHR5cGVzIiwKKwkJICAgIG5hbWUpOworCSAgIHJldHVy biBOVUxMX1RSRUU7CisJfQorICAgIH0KKworICBpZiAoc3RyY21wIChUUkVFX1NUUklOR19QT0lO VEVSIChpZCksICJkZWZhdWx0IikgPT0gMCkKKyAgICB2aXMgPSBWSVNJQklMSVRZX0RFRkFVTFQ7 CisgIGVsc2UgaWYgKHN0cmNtcCAoVFJFRV9TVFJJTkdfUE9JTlRFUiAoaWQpLCAiaW50ZXJuYWwi KSA9PSAwKQorICAgIHZpcyA9IFZJU0lCSUxJVFlfSU5URVJOQUw7CisgIGVsc2UgaWYgKHN0cmNt cCAoVFJFRV9TVFJJTkdfUE9JTlRFUiAoaWQpLCAiaGlkZGVuIikgPT0gMCkKKyAgICB2aXMgPSBW SVNJQklMSVRZX0hJRERFTjsKKyAgZWxzZSBpZiAoc3RyY21wIChUUkVFX1NUUklOR19QT0lOVEVS IChpZCksICJwcm90ZWN0ZWQiKSA9PSAwKQorICAgIHZpcyA9IFZJU0lCSUxJVFlfUFJPVEVDVEVE OworICBlbHNlCisgICAgeworICAgICAgZXJyb3IgKCJhdHRyaWJ1dGUgJXFFIGFyZ3VtZW50IG11 c3QgYmUgb25lIG9mICVxcywgJXFzLCAlcXMsIG9yICVxcyIsCisJICAgICBuYW1lLCAiZGVmYXVs dCIsICJoaWRkZW4iLCAicHJvdGVjdGVkIiwgImludGVybmFsIik7CisgICAgICB2aXMgPSBWSVNJ QklMSVRZX0RFRkFVTFQ7CisgICAgfQorCisgIGlmIChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVE IChkZWNsKQorICAgICAgJiYgdmlzICE9IERFQ0xfVklTSUJJTElUWSAoZGVjbCkpCisgICAgewor ICAgICAgdHJlZSBhdHRyaWJ1dGVzID0gKFRZUEVfUCAoKm5vZGUpCisJCQkgPyBUWVBFX0FUVFJJ QlVURVMgKCpub2RlKQorCQkJIDogREVDTF9BVFRSSUJVVEVTIChkZWNsKSk7CisgICAgICBpZiAo bG9va3VwX2F0dHJpYnV0ZSAoInZpc2liaWxpdHkiLCBhdHRyaWJ1dGVzKSkKKwllcnJvciAoIiVx RCByZWRlY2xhcmVkIHdpdGggZGlmZmVyZW50IHZpc2liaWxpdHkiLCBkZWNsKTsKKyAgICAgIGVs c2UgaWYgKFRBUkdFVF9ETExJTVBPUlRfREVDTF9BVFRSSUJVVEVTCisJICAgICAgICYmIGxvb2t1 cF9hdHRyaWJ1dGUgKCJkbGxpbXBvcnQiLCBhdHRyaWJ1dGVzKSkKKwllcnJvciAoIiVxRCB3YXMg ZGVjbGFyZWQgJXFzIHdoaWNoIGltcGxpZXMgZGVmYXVsdCB2aXNpYmlsaXR5IiwKKwkgICAgICAg ZGVjbCwgImRsbGltcG9ydCIpOworICAgICAgZWxzZSBpZiAoVEFSR0VUX0RMTElNUE9SVF9ERUNM X0FUVFJJQlVURVMKKwkgICAgICAgJiYgbG9va3VwX2F0dHJpYnV0ZSAoImRsbGV4cG9ydCIsIGF0 dHJpYnV0ZXMpKQorCWVycm9yICgiJXFEIHdhcyBkZWNsYXJlZCAlcXMgd2hpY2ggaW1wbGllcyBk ZWZhdWx0IHZpc2liaWxpdHkiLAorCSAgICAgICBkZWNsLCAiZGxsZXhwb3J0Iik7CisgICAgfQor CisgIERFQ0xfVklTSUJJTElUWSAoZGVjbCkgPSB2aXM7CisgIERFQ0xfVklTSUJJTElUWV9TUEVD SUZJRUQgKGRlY2wpID0gMTsKKworICAvKiBHbyBhaGVhZCBhbmQgYXR0YWNoIHRoZSBhdHRyaWJ1 dGUgdG8gdGhlIG5vZGUgYXMgd2VsbC4gIFRoaXMgaXMgbmVlZGVkCisgICAgIHNvIHdlIGNhbiBk ZXRlcm1pbmUgd2hldGhlciB3ZSBoYXZlIFZJU0lCSUxJVFlfREVGQVVMVCBiZWNhdXNlIHRoZQor ICAgICB2aXNpYmlsaXR5IHdhcyBub3Qgc3BlY2lmaWVkLCBvciBiZWNhdXNlIGl0IHdhcyBleHBs aWNpdGx5IG92ZXJyaWRkZW4KKyAgICAgZnJvbSB0aGUgY29udGFpbmluZyBzY29wZS4gICovCisK KyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgImFsd2F5c19pbmxpbmUiIGF0 dHJpYnV0ZTsgYXJndW1lbnRzIGFzIGluCisgICBzdHJ1Y3QgYXR0cmlidXRlX3NwZWMuaGFuZGxl ci4gICovCisKK3N0YXRpYyB0cmVlCitoYW5kbGVfYWx3YXlzX2lubGluZV9hdHRyaWJ1dGUgKHRy ZWUgKm5vZGUsIHRyZWUgbmFtZSwKKwkJCQl0cmVlIEFSR19VTlVTRUQgKGFyZ3MpLAorCQkJCWlu dCBBUkdfVU5VU0VEIChmbGFncyksCisJCQkJYm9vbCAqbm9fYWRkX2F0dHJzKQoreworICBpZiAo VFJFRV9DT0RFICgqbm9kZSkgPT0gRlVOQ1RJT05fREVDTCkKKyAgICB7CisgICAgICBpZiAobG9v a3VwX2F0dHJpYnV0ZSAoIm5vaW5saW5lIiwgREVDTF9BVFRSSUJVVEVTICgqbm9kZSkpKQorCXsK KwkgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3JlZCBkdWUg dG8gY29uZmxpY3QgIgorCQkgICAid2l0aCAlcXMgYXR0cmlidXRlIiwgbmFtZSwgIm5vaW5saW5l Iik7CisJICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlIGlmIChsb29rdXBf YXR0cmlidXRlICgidGFyZ2V0X2Nsb25lcyIsIERFQ0xfQVRUUklCVVRFUyAoKm5vZGUpKSkKKwl7 CisJICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQgZHVl IHRvIGNvbmZsaWN0ICIKKwkJICAgIndpdGggJXFzIGF0dHJpYnV0ZSIsIG5hbWUsICJ0YXJnZXRf Y2xvbmVzIik7CisJICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlCisJLyog U2V0IHRoZSBhdHRyaWJ1dGUgYW5kIG1hcmsgaXQgZm9yIGRpc3JlZ2FyZGluZyBpbmxpbmUKKwkg ICBsaW1pdHMuICAqLworCURFQ0xfRElTUkVHQVJEX0lOTElORV9MSU1JVFMgKCpub2RlKSA9IDE7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAi JXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFtZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1 ZTsKKyAgICB9CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgImNvbGQi IGFuZCBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVj LmhhbmRsZXIuICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX2NvbGRfYXR0cmlidXRlICh0cmVl ICpub2RlLCB0cmVlIG5hbWUsIHRyZWUgQVJHX1VOVVNFRCAoYXJncyksCisJCSAgICAgICBpbnQg QVJHX1VOVVNFRCAoZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIGlmIChUUkVFX0NP REUgKCpub2RlKSA9PSBGVU5DVElPTl9ERUNMCisgICAgICB8fCBUUkVFX0NPREUgKCpub2RlKSA9 PSBMQUJFTF9ERUNMKQorICAgIHsKKyAgICAgIC8qIEF0dHJpYnV0ZSBjb2xkIHByb2Nlc3Npbmcg aXMgZG9uZSBsYXRlciB3aXRoIGxvb2t1cF9hdHRyaWJ1dGUuICAqLworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdu b3JlZCIsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorCisgIHJl dHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhICJub2lubGluZSIgYXR0cmlidXRlOyBh cmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKwor c3RhdGljIHRyZWUKK2hhbmRsZV9ub2lubGluZV9hdHRyaWJ1dGUgKHRyZWUgKm5vZGUsIHRyZWUg bmFtZSwKKwkJCSAgIHRyZWUgQVJHX1VOVVNFRCAoYXJncyksCisJCQkgICBpbnQgQVJHX1VOVVNF RCAoZmxhZ3MpLCBib29sICpub19hZGRfYXR0cnMpCit7CisgIGlmIChUUkVFX0NPREUgKCpub2Rl KSA9PSBGVU5DVElPTl9ERUNMKQorICAgIHsKKyAgICAgIGlmIChsb29rdXBfYXR0cmlidXRlICgi YWx3YXlzX2lubGluZSIsIERFQ0xfQVRUUklCVVRFUyAoKm5vZGUpKSkKKwl7CisJICB3YXJuaW5n IChPUFRfV2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQgZHVlIHRvIGNvbmZsaWN0 ICIKKwkJICAgIndpdGggYXR0cmlidXRlICVxcyIsIG5hbWUsICJhbHdheXNfaW5saW5lIik7CisJ ICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlCisJREVDTF9VTklOTElOQUJM RSAoKm5vZGUpID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB3YXJuaW5nIChPUFRf V2F0dHJpYnV0ZXMsICIlcUUgYXR0cmlidXRlIGlnbm9yZWQiLCBuYW1lKTsKKyAgICAgICpub19h ZGRfYXR0cnMgPSB0cnVlOworICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOworfQorCisvKiBI YW5kbGUgYSAid2VhayIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRy aWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV93ZWFrX2F0dHJp YnV0ZSAodHJlZSAqbm9kZSwgdHJlZSBuYW1lLAorCQkgICAgICAgdHJlZSBBUkdfVU5VU0VEIChh cmdzKSwKKwkJICAgICAgIGludCBBUkdfVU5VU0VEIChmbGFncyksCisJCSAgICAgICBib29sICog QVJHX1VOVVNFRCAobm9fYWRkX2F0dHJzKSkKK3sKKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpID09 IEZVTkNUSU9OX0RFQ0wKKyAgICAgICYmIERFQ0xfREVDTEFSRURfSU5MSU5FX1AgKCpub2RlKSkK KyAgICB7CisgICAgICB3YXJuaW5nIChPUFRfV2F0dHJpYnV0ZXMsICJpbmxpbmUgZnVuY3Rpb24g JXErRCBkZWNsYXJlZCB3ZWFrIiwgKm5vZGUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7 CisgICAgfQorICBlbHNlIGlmIChsb29rdXBfYXR0cmlidXRlICgiaWZ1bmMiLCBERUNMX0FUVFJJ QlVURVMgKCpub2RlKSkpCisgICAgeworICAgICAgZXJyb3IgKCJpbmRpcmVjdCBmdW5jdGlvbiAl cStEIGNhbm5vdCBiZSBkZWNsYXJlZCB3ZWFrIiwgKm5vZGUpOworICAgICAgKm5vX2FkZF9hdHRy cyA9IHRydWU7CisgICAgICByZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKyAgZWxzZSBpZiAoVkFS X09SX0ZVTkNUSU9OX0RFQ0xfUCAoKm5vZGUpKQorICAgIGRlY2xhcmVfd2VhayAoKm5vZGUpOwor ICBlbHNlCisgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25v cmVkIiwgbmFtZSk7CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGEgInRh cmdldCIgYXR0cmlidXRlLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV90YXJnZXRfYXR0cmli dXRlICh0cmVlICpub2RlLCB0cmVlIG5hbWUsIHRyZWUgYXJncywgaW50IGZsYWdzLAorCQkJIGJv b2wgKm5vX2FkZF9hdHRycykKK3sKKyAgLyogRW5zdXJlIHdlIGhhdmUgYSBmdW5jdGlvbiB0eXBl LiAgKi8KKyAgaWYgKFRSRUVfQ09ERSAoKm5vZGUpICE9IEZVTkNUSU9OX0RFQ0wpCisgICAgewor ICAgICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwg bmFtZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisgIGVsc2UgaWYgKGxv b2t1cF9hdHRyaWJ1dGUgKCJ0YXJnZXRfY2xvbmVzIiwgREVDTF9BVFRSSUJVVEVTICgqbm9kZSkp KQorICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUg aWdub3JlZCBkdWUgdG8gY29uZmxpY3QgIgorCQkgICAid2l0aCAlcXMgYXR0cmlidXRlIiwgbmFt ZSwgInRhcmdldF9jbG9uZXMiKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOworICAgIH0K KyAgZWxzZSBpZiAoISB0YXJnZXRtLnRhcmdldF9vcHRpb24udmFsaWRfYXR0cmlidXRlX3AgKCpu b2RlLCBuYW1lLCBhcmdzLAorCQkJCQkJICAgICAgZmxhZ3MpKQorICAgICpub19hZGRfYXR0cnMg PSB0cnVlOworCisgIC8qIENoZWNrIHRoYXQgdGhlcmUncyBubyBlbXB0eSBzdHJpbmcgaW4gdmFs dWVzIG9mIHRoZSBhdHRyaWJ1dGUuICAqLworICBmb3IgKHRyZWUgdCA9IGFyZ3M7IHQgIT0gTlVM TF9UUkVFOyB0ID0gVFJFRV9DSEFJTiAodCkpCisgICAgeworICAgICAgdHJlZSB2YWx1ZSA9IFRS RUVfVkFMVUUgKHQpOworICAgICAgaWYgKFRSRUVfQ09ERSAodmFsdWUpID09IFNUUklOR19DU1QK KwkgICYmIFRSRUVfU1RSSU5HX0xFTkdUSCAodmFsdWUpID09IDEKKwkgICYmIFRSRUVfU1RSSU5H X1BPSU5URVIgKHZhbHVlKVswXSA9PSAnXDAnKQorCXsKKwkgIHdhcm5pbmcgKE9QVF9XYXR0cmli dXRlcywgImVtcHR5IHN0cmluZyBpbiBhdHRyaWJ1dGUgJTx0YXJnZXQlPiIpOworCSAgKm5vX2Fk ZF9hdHRycyA9IHRydWU7CisJfQorICAgIH0KKworICByZXR1cm4gTlVMTF9UUkVFOworfQorCisv KiBIYW5kbGUgYSAidXNlZCIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBh dHRyaWJ1dGVfc3BlYy5oYW5kbGVyLiAgKi8KKworc3RhdGljIHRyZWUKK2hhbmRsZV91c2VkX2F0 dHJpYnV0ZSAodHJlZSAqcG5vZGUsIHRyZWUgbmFtZSwgdHJlZSBBUkdfVU5VU0VEIChhcmdzKSwK KwkJICAgICAgIGludCBBUkdfVU5VU0VEIChmbGFncyksIGJvb2wgKm5vX2FkZF9hdHRycykKK3sK KyAgdHJlZSBub2RlID0gKnBub2RlOworCisgIGlmIChUUkVFX0NPREUgKG5vZGUpID09IEZVTkNU SU9OX0RFQ0wKKyAgICAgIHx8IChWQVJfUCAobm9kZSkgJiYgVFJFRV9TVEFUSUMgKG5vZGUpKQor ICAgICAgfHwgKFRSRUVfQ09ERSAobm9kZSkgPT0gVFlQRV9ERUNMKSkKKyAgICB7CisgICAgICBU UkVFX1VTRUQgKG5vZGUpID0gMTsKKyAgICAgIERFQ0xfUFJFU0VSVkVfUCAobm9kZSkgPSAxOwor ICAgICAgaWYgKFZBUl9QIChub2RlKSkKKwlERUNMX1JFQURfUCAobm9kZSkgPSAxOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRy aWJ1dGUgaWdub3JlZCIsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAg fQorCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKy8qIEhhbmRsZSBhbiAiYWxpYXMiIG9yICJp ZnVuYyIgYXR0cmlidXRlOyBhcmd1bWVudHMgYXMgaW4KKyAgIHN0cnVjdCBhdHRyaWJ1dGVfc3Bl Yy5oYW5kbGVyLCBleGNlcHQgdGhhdCBJU19BTElBUyB0ZWxscyB1cworICAgd2hldGhlciB0aGlz IGlzIGFuIGFsaWFzIGFzIG9wcG9zZWQgdG8gaWZ1bmMgYXR0cmlidXRlLiAgKi8KKworc3RhdGlj IHRyZWUKK2hhbmRsZV9hbGlhc19pZnVuY19hdHRyaWJ1dGUgKGJvb2wgaXNfYWxpYXMsIHRyZWUg Km5vZGUsIHRyZWUgbmFtZSwgdHJlZSBhcmdzLAorCQkJICAgICAgYm9vbCAqbm9fYWRkX2F0dHJz KQoreworICB0cmVlIGRlY2wgPSAqbm9kZTsKKworICBpZiAoVFJFRV9DT0RFIChkZWNsKSAhPSBG VU5DVElPTl9ERUNMCisgICAgICAmJiAoIWlzX2FsaWFzIHx8ICFWQVJfUCAoZGVjbCkpKQorICAg IHsKKyAgICAgIHdhcm5pbmcgKE9QVF9XYXR0cmlidXRlcywgIiVxRSBhdHRyaWJ1dGUgaWdub3Jl ZCIsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgfQorICBlbHNlIGlm ICgoVFJFRV9DT0RFIChkZWNsKSA9PSBGVU5DVElPTl9ERUNMICYmIERFQ0xfSU5JVElBTCAoZGVj bCkpCisgICAgICB8fCAoVFJFRV9DT0RFIChkZWNsKSAhPSBGVU5DVElPTl9ERUNMCisJICAmJiBU UkVFX1BVQkxJQyAoZGVjbCkgJiYgIURFQ0xfRVhURVJOQUwgKGRlY2wpKQorICAgICAgLyogQSBz dGF0aWMgdmFyaWFibGUgZGVjbGFyYXRpb24gaXMgYWx3YXlzIGEgdGVudGF0aXZlIGRlZmluaXRp b24sCisJIGJ1dCB0aGUgYWxpYXMgaXMgYSBub24tdGVudGF0aXZlIGRlZmluaXRpb24gd2hpY2gg b3ZlcnJpZGVzLiAgKi8KKyAgICAgIHx8IChUUkVFX0NPREUgKGRlY2wpICE9IEZVTkNUSU9OX0RF Q0wKKwkgICYmICEgVFJFRV9QVUJMSUMgKGRlY2wpICYmIERFQ0xfSU5JVElBTCAoZGVjbCkpKQor ICAgIHsKKyAgICAgIGVycm9yICgiJXErRCBkZWZpbmVkIGJvdGggbm9ybWFsbHkgYW5kIGFzICVx RSBhdHRyaWJ1dGUiLCBkZWNsLCBuYW1lKTsKKyAgICAgICpub19hZGRfYXR0cnMgPSB0cnVlOwor ICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICB9CisgIGVsc2UgaWYgKCFpc19hbGlhcworCSAg ICYmIChsb29rdXBfYXR0cmlidXRlICgid2VhayIsIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpCisJ ICAgICAgIHx8IGxvb2t1cF9hdHRyaWJ1dGUgKCJ3ZWFrcmVmIiwgREVDTF9BVFRSSUJVVEVTIChk ZWNsKSkpKQorICAgIHsKKyAgICAgIGVycm9yICgid2VhayAlcStEIGNhbm5vdCBiZSBkZWZpbmVk ICVxRSIsIGRlY2wsIG5hbWUpOworICAgICAgKm5vX2FkZF9hdHRycyA9IHRydWU7CisgICAgICBy ZXR1cm4gTlVMTF9UUkVFOworICAgIH0KKworICAvKiBOb3RlIHRoYXQgdGhlIHZlcnkgZmlyc3Qg dGltZSB3ZSBwcm9jZXNzIGEgbmVzdGVkIGRlY2xhcmF0aW9uLAorICAgICBkZWNsX2Z1bmN0aW9u X2NvbnRleHQgd2lsbCBub3QgYmUgc2V0LiAgSW5kZWVkLCAqd291bGQqIG5ldmVyCisgICAgIGJl IHNldCBleGNlcHQgZm9yIHRoZSBERUNMX0lOSVRJQUwvREVDTF9FWFRFUk5BTCBmcm9iYmVyeSB0 aGF0CisgICAgIHdlIGRvIGJlbG93LiAgQWZ0ZXIgc3VjaCBmcm9iYmVyeSwgcHVzaGRlY2wgd291 bGQgc2V0IHRoZSBjb250ZXh0LgorICAgICBJbiBhbnkgY2FzZSwgdGhpcyBpcyBuZXZlciB3aGF0 IHdlIHdhbnQuICAqLworICBlbHNlIGlmIChkZWNsX2Z1bmN0aW9uX2NvbnRleHQgKGRlY2wpID09 IDAgJiYgY3VycmVudF9mdW5jdGlvbl9kZWNsID09IE5VTEwpCisgICAgeworICAgICAgdHJlZSBp ZDsKKworICAgICAgaWQgPSBUUkVFX1ZBTFVFIChhcmdzKTsKKyAgICAgIGlmIChUUkVFX0NPREUg KGlkKSAhPSBTVFJJTkdfQ1NUKQorCXsKKwkgIGVycm9yICgiYXR0cmlidXRlICVxRSBhcmd1bWVu dCBub3QgYSBzdHJpbmciLCBuYW1lKTsKKwkgICpub19hZGRfYXR0cnMgPSB0cnVlOworCSAgcmV0 dXJuIE5VTExfVFJFRTsKKwl9CisgICAgICBpZCA9IGdldF9pZGVudGlmaWVyIChUUkVFX1NUUklO R19QT0lOVEVSIChpZCkpOworICAgICAgLyogVGhpcyBjb3VudHMgYXMgYSB1c2Ugb2YgdGhlIG9i amVjdCBwb2ludGVkIHRvLiAgKi8KKyAgICAgIFRSRUVfVVNFRCAoaWQpID0gMTsKKworICAgICAg aWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTCkKKwlERUNMX0lOSVRJQUwgKGRl Y2wpID0gZXJyb3JfbWFya19ub2RlOworICAgICAgZWxzZQorCVRSRUVfU1RBVElDIChkZWNsKSA9 IDE7CisKKyAgICAgIGlmICghaXNfYWxpYXMpCisJeworCSAgLyogaWZ1bmNzIGFyZSBhbHNvIGFs aWFzZXMsIHNvIHNldCB0aGF0IGF0dHJpYnV0ZSB0b28uICAqLworCSAgREVDTF9BVFRSSUJVVEVT IChkZWNsKQorCSAgICA9IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKCJhbGlhcyIpLCBhcmdz LAorCQkJIERFQ0xfQVRUUklCVVRFUyAoZGVjbCkpOworCSAgREVDTF9BVFRSSUJVVEVTIChkZWNs KSA9IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKCJpZnVuYyIpLAorCQkJCQkgICAgICBOVUxM LCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKTsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAg ICAgd2FybmluZyAoT1BUX1dhdHRyaWJ1dGVzLCAiJXFFIGF0dHJpYnV0ZSBpZ25vcmVkIiwgbmFt ZSk7CisgICAgICAqbm9fYWRkX2F0dHJzID0gdHJ1ZTsKKyAgICB9CisKKyAgaWYgKGRlY2xfaW5f c3ltdGFiX3AgKCpub2RlKSkKKyAgICB7CisgICAgICBzdHJ1Y3Qgc3ltdGFiX25vZGUgKm4gPSBz eW10YWJfbm9kZTo6Z2V0IChkZWNsKTsKKyAgICAgIGlmIChuICYmIG4tPnJlZnVzZV92aXNpYmls aXR5X2NoYW5nZXMpCisJZXJyb3IgKCIlK3FEIGRlY2xhcmVkICVxcyBhZnRlciBiZWluZyB1c2Vk IiwKKwkgICAgICAgZGVjbCwgaXNfYWxpYXMgPyAiYWxpYXMiIDogImlmdW5jIik7CisgICAgfQor CisKKyAgcmV0dXJuIE5VTExfVFJFRTsKK30KKworLyogSGFuZGxlIGFuICJhbGlhcyIgb3IgImlm dW5jIiBhdHRyaWJ1dGU7IGFyZ3VtZW50cyBhcyBpbgorICAgc3RydWN0IGF0dHJpYnV0ZV9zcGVj LmhhbmRsZXIuICAqLworCitzdGF0aWMgdHJlZQoraGFuZGxlX2FsaWFzX2F0dHJpYnV0ZSAodHJl ZSAqbm9kZSwgdHJlZSBuYW1lLCB0cmVlIGFyZ3MsCisJCQlpbnQgQVJHX1VOVVNFRCAoZmxhZ3Mp LCBib29sICpub19hZGRfYXR0cnMpCit7CisgIHJldHVybiBoYW5kbGVfYWxpYXNfaWZ1bmNfYXR0 cmlidXRlICh0cnVlLCBub2RlLCBuYW1lLCBhcmdzLCBub19hZGRfYXR0cnMpOworfQorCiAvKiAo ZW5kIG9mIGF0dHJpYnV0ZS1oYW5kbGluZykuICAqLwogCiAvKiBMYW5ndWFnZS1kZXBlbmRlbnQg Y29udGVudHMgb2YgYSB0eXBlLiAgKi8KZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXBsYXliYWNr LmNjIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKaW5kZXggMThjYzRkYTI1YjguLmQ4ZGJjNWFh YzYxIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYworKysgYi9nY2Mvaml0L2pp dC1wbGF5YmFjay5jYwpAQCAtMjAsNiArMjAsNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBm aWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZGVmaW5l IElOQ0xVREVfTVVURVgKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKICNpbmNsdWRlICJzeXN0ZW0u aCIKICNpbmNsdWRlICJjb3JldHlwZXMuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKQEAgLTQ5OSw2 ICs1MDAsNTAgQEAgbmV3X3BhcmFtIChsb2NhdGlvbiAqbG9jLAogICByZXR1cm4gbmV3IHBhcmFt ICh0aGlzLCBpbm5lcik7CiB9CiAKK2NvbnN0IGNoYXIqIGZuX2F0dHJpYnV0ZV90b19zdHJpbmcg KGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHIpCit7CisgIHN3aXRjaCAoYXR0cikKKyAgeworICAg IGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQUxJQVM6CisgICAgICByZXR1cm4gImFsaWFzIjsK KyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX0FMV0FZU19JTkxJTkU6CisgICAgICByZXR1 cm4gImFsd2F5c19pbmxpbmUiOworICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfSU5MSU5F OgorICAgICAgcmV0dXJuIE5VTEw7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9OT0lO TElORToKKyAgICAgIHJldHVybiAibm9pbmxpbmUiOworICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRS SUJVVEVfVEFSR0VUOgorICAgICAgcmV0dXJuICJ0YXJnZXQiOworICAgIGNhc2UgR0NDX0pJVF9G Tl9BVFRSSUJVVEVfVVNFRDoKKyAgICAgIHJldHVybiAidXNlZCI7CisgICAgY2FzZSBHQ0NfSklU X0ZOX0FUVFJJQlVURV9WSVNJQklMSVRZOgorICAgICAgcmV0dXJuICJ2aXNpYmlsaXR5IjsKKyAg ICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTEQ6CisgICAgICByZXR1cm4gImNvbGQiOwor ICAgIGNhc2UgR0NDX0pJVF9GTl9BVFRSSUJVVEVfUkVUVVJOU19UV0lDRToKKyAgICAgIHJldHVy biAicmV0dXJuc190d2ljZSI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9QVVJFOgor ICAgICAgcmV0dXJuICJwdXJlIjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRFX0NPTlNU OgorICAgICAgcmV0dXJuICJjb25zdCI7CisgICAgY2FzZSBHQ0NfSklUX0ZOX0FUVFJJQlVURV9X RUFLOgorICAgICAgcmV0dXJuICJ3ZWFrIjsKKyAgICBjYXNlIEdDQ19KSVRfRk5fQVRUUklCVVRF X05PTk5VTEw6CisgICAgICByZXR1cm4gIm5vbm51bGwiOworICB9CisgIHJldHVybiBOVUxMOwor fQorCitjb25zdCBjaGFyKiB2YXJpYWJsZV9hdHRyaWJ1dGVfdG9fc3RyaW5nIChnY2Nfaml0X3Zh cmlhYmxlX2F0dHJpYnV0ZSBhdHRyKQoreworICBzd2l0Y2ggKGF0dHIpCisgIHsKKyAgICBjYXNl IEdDQ19KSVRfVkFSSUFCTEVfQVRUUklCVVRFX1ZJU0lCSUxJVFk6CisgICAgICByZXR1cm4gInZp c2liaWxpdHkiOworICB9CisgIHJldHVybiBOVUxMOworfQorCiAvKiBDb25zdHJ1Y3QgYSBwbGF5 YmFjazo6ZnVuY3Rpb24gaW5zdGFuY2UuICAqLwogCiBwbGF5YmFjazo6ZnVuY3Rpb24gKgpAQCAt NTA5LDcgKzU1NCwxMyBAQCBuZXdfZnVuY3Rpb24gKGxvY2F0aW9uICpsb2MsCiAJICAgICAgY29u c3QgY2hhciAqbmFtZSwKIAkgICAgICBjb25zdCBhdXRvX3ZlYzxwYXJhbSAqPiAqcGFyYW1zLAog CSAgICAgIGludCBpc192YXJpYWRpYywKLQkgICAgICBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1 aWx0aW5faWQpCisJICAgICAgZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lkLAorCSAg ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdjY19qaXRfZm5fYXR0cmlidXRlPiAmYXR0cmlidXRlcywK KwkgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRyaWJ1dGUs CisJCQkJCSAgc3RkOjpzdHJpbmc+PiAmc3RyaW5nX2F0dHJpYnV0ZXMsCisJICAgICAgY29uc3Qg c3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfZm5fYXR0cmlidXRlLAorCQkJCQkgIHN0ZDo6 dmVjdG9yPGludD4+PgorCQkJCQkgICZpbnRfYXJyYXlfYXR0cmlidXRlcykKIHsKICAgaW50IGk7 CiAgIHBhcmFtICpwYXJhbTsKQEAgLTU0Myw2ICs1OTQsOCBAQCBuZXdfZnVuY3Rpb24gKGxvY2F0 aW9uICpsb2MsCiAgIERFQ0xfUkVTVUxUIChmbmRlY2wpID0gcmVzZGVjbDsKICAgREVDTF9DT05U RVhUIChyZXNkZWNsKSA9IGZuZGVjbDsKIAorICB0cmVlIGZuX2F0dHJpYnV0ZXMgPSBOVUxMX1RS RUU7CisKICAgaWYgKGJ1aWx0aW5faWQpCiAgICAgewogICAgICAgZ2NjX2Fzc2VydCAobG9jID09 IE5VTEwpOwpAQCAtNTg4LDEyICs2NDEsNjIgQEAgbmV3X2Z1bmN0aW9uIChsb2NhdGlvbiAqbG9j LAogICAgICAgREVDTF9ERUNMQVJFRF9JTkxJTkVfUCAoZm5kZWNsKSA9IDE7CiAKICAgICAgIC8q IEFkZCBhdHRyaWJ1dGUgImFsd2F5c19pbmxpbmUiOiAqLwotICAgICAgREVDTF9BVFRSSUJVVEVT IChmbmRlY2wpID0KLQl0cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgiYWx3YXlzX2lubGluZSIp LAotCQkgICBOVUxMLAotCQkgICBERUNMX0FUVFJJQlVURVMgKGZuZGVjbCkpOworICAgICAgZm5f YXR0cmlidXRlcyA9IHRyZWVfY29ucyAoZ2V0X2lkZW50aWZpZXIgKCJhbHdheXNfaW5saW5lIiks CisJCQkJIE5VTEwsCisJCQkJIGZuX2F0dHJpYnV0ZXMpOworICAgIH0KKworICAvKiBBbGwgYXR0 cmlidXRlcyBuZWVkIHRvIGJlIGRlY2xhcmVkIGluIGBkdW1teS1mcm9udGVuZC5jY2AgYW5kIG1v cmUKKyAgICAgc3BlY2lmaWNhbGx5IGluIGBqaXRfYXR0cmlidXRlX3RhYmxlYC4gKi8KKyAgZm9y IChhdXRvIGF0dHI6IGF0dHJpYnV0ZXMpCisgIHsKKyAgICBpZiAoYXR0ciA9PSBHQ0NfSklUX0ZO X0FUVFJJQlVURV9JTkxJTkUpCisgICAgICBERUNMX0RFQ0xBUkVEX0lOTElORV9QIChmbmRlY2wp ID0gMTsKKworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0dHJpYnV0ZV90b19zdHJp bmcgKGF0dHIpOworICAgIGlmIChhdHRyaWJ1dGUpCisgICAgeworICAgICAgdHJlZSBpZGVudCA9 IGdldF9pZGVudGlmaWVyIChhdHRyaWJ1dGUpOworICAgICAgZm5fYXR0cmlidXRlcyA9IHRyZWVf Y29ucyAoaWRlbnQsIE5VTExfVFJFRSwgZm5fYXR0cmlidXRlcyk7CiAgICAgfQorICB9CiAKKyAg Zm9yIChhdXRvIGF0dHI6IHN0cmluZ19hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2ppdF9mbl9h dHRyaWJ1dGUmIG5hbWUgPSBzdGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnN0cmluZyYgdmFs dWUgPSBzdGQ6OmdldDwxPihhdHRyKTsKKyAgICB0cmVlIGF0dHJpYnV0ZV92YWx1ZSA9IGJ1aWxk X3RyZWVfbGlzdCAoTlVMTF9UUkVFLAorCTo6YnVpbGRfc3RyaW5nICh2YWx1ZS5sZW5ndGggKCkg KyAxLCB2YWx1ZS5jX3N0ciAoKSkpOworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IGZuX2F0 dHJpYnV0ZV90b19zdHJpbmcgKG5hbWUpOworICAgIHRyZWUgaWRlbnQgPSBhdHRyaWJ1dGUgPyBn ZXRfaWRlbnRpZmllciAoYXR0cmlidXRlKSA6IE5VTEw7CisKKyAgICBpZiAoaWRlbnQpCisgICAg ICBmbl9hdHRyaWJ1dGVzID0gdHJlZV9jb25zIChpZGVudCwgYXR0cmlidXRlX3ZhbHVlLCBmbl9h dHRyaWJ1dGVzKTsKKyAgfQorCisgIGZvciAoYXV0byBhdHRyOiBpbnRfYXJyYXlfYXR0cmlidXRl cykKKyAgeworICAgIGdjY19qaXRfZm5fYXR0cmlidXRlJiBuYW1lID0gc3RkOjpnZXQ8MD4oYXR0 cik7CisgICAgc3RkOjp2ZWN0b3I8aW50PiYgdmFsdWVzID0gc3RkOjpnZXQ8MT4oYXR0cik7CisK KyAgICBjb25zdCBjaGFyKiBhdHRyaWJ1dGUgPSBmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1l KTsKKyAgICB0cmVlIGlkZW50ID0gYXR0cmlidXRlID8gZ2V0X2lkZW50aWZpZXIgKGF0dHJpYnV0 ZSkgOiBOVUxMOworCisgICAgaWYgKCFpZGVudCkKKyAgICAgIGNvbnRpbnVlOworCisgICAgdHJl ZSB0cmVlX2xpc3QgPSBOVUxMX1RSRUU7CisgICAgdHJlZSAqcF90cmVlX2xpc3QgPSAmdHJlZV9s aXN0OworICAgIGZvciAoYXV0byB2YWx1ZSA6IHZhbHVlcykKKyAgICB7CisgICAgICB0cmVlIGlu dF92YWx1ZSA9IGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLCB2YWx1ZSk7CisgICAg ICAqcF90cmVlX2xpc3QgPSBidWlsZF90cmVlX2xpc3QgKE5VTEwsIGludF92YWx1ZSk7CisgICAg ICBwX3RyZWVfbGlzdCA9ICZUUkVFX0NIQUlOICgqcF90cmVlX2xpc3QpOworICAgIH0KKyAgICBm bl9hdHRyaWJ1dGVzID0gdHJlZV9jb25zIChpZGVudCwgdHJlZV9saXN0LCBmbl9hdHRyaWJ1dGVz KTsKKyAgfQorCisgIGRlY2xfYXR0cmlidXRlcyAoJmZuZGVjbCwgZm5fYXR0cmlidXRlcywgMCk7 CiAgIGZ1bmN0aW9uICpmdW5jID0gbmV3IGZ1bmN0aW9uICh0aGlzLCBmbmRlY2wsIGtpbmQpOwog ICBtX2Z1bmN0aW9ucy5zYWZlX3B1c2ggKGZ1bmMpOwogICByZXR1cm4gZnVuYzsKQEAgLTYwNyw3 ICs3MTAsOSBAQCBnbG9iYWxfbmV3X2RlY2wgKGxvY2F0aW9uICpsb2MsCiAJCSBlbnVtIGdjY19q aXRfZ2xvYmFsX2tpbmQga2luZCwKIAkJIHR5cGUgKnR5cGUsCiAJCSBjb25zdCBjaGFyICpuYW1l LAotCQkgZW51bSBnbG9iYWxfdmFyX2ZsYWdzIGZsYWdzKQorCQkgZW51bSBnbG9iYWxfdmFyX2Zs YWdzIGZsYWdzLAorCQkgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFi bGVfYXR0cmlidXRlLAorCQkJCQkgICAgIHN0ZDo6c3RyaW5nPj4gJmF0dHJpYnV0ZXMpCiB7CiAg IGdjY19hc3NlcnQgKHR5cGUpOwogICBnY2NfYXNzZXJ0IChuYW1lKTsKQEAgLTY1Miw5ICs3NTcs MzIgQEAgZ2xvYmFsX25ld19kZWNsIChsb2NhdGlvbiAqbG9jLAogICBpZiAobG9jKQogICAgIHNl dF90cmVlX2xvY2F0aW9uIChpbm5lciwgbG9jKTsKIAorICBzZXRfdmFyaWFibGVfc3RyaW5nX2F0 dHJpYnV0ZSAoYXR0cmlidXRlcywgaW5uZXIpOworCiAgIHJldHVybiBpbm5lcjsKIH0KIAordm9p ZAorcGxheWJhY2s6Ogorc2V0X3ZhcmlhYmxlX3N0cmluZ19hdHRyaWJ1dGUgKAorICBjb25zdCBz dGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUsCisgIAkJCSAg ICAgIHN0ZDo6c3RyaW5nPj4gJnN0cmluZ19hdHRyaWJ1dGVzLAorICB0cmVlIGRlY2wpCit7Cisg IHRyZWUgdmFyX2F0dHJpYnV0ZXMgPSBOVUxMX1RSRUU7CisgIGZvciAoYXV0byBhdHRyOiBzdHJp bmdfYXR0cmlidXRlcykKKyAgeworICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlJiBuYW1l ID0gc3RkOjpnZXQ8MD4oYXR0cik7CisgICAgc3RkOjpzdHJpbmcmIHZhbHVlID0gc3RkOjpnZXQ8 MT4oYXR0cik7CisgICAgdHJlZSBhdHRyaWJ1dGVfdmFsdWUgPSBidWlsZF90cmVlX2xpc3QgKE5V TExfVFJFRSwKKwk6OmJ1aWxkX3N0cmluZyAodmFsdWUubGVuZ3RoICgpICsgMSwgdmFsdWUuY19z dHIgKCkpKTsKKyAgICB0cmVlIGlkZW50ID0gZ2V0X2lkZW50aWZpZXIgKHZhcmlhYmxlX2F0dHJp YnV0ZV90b19zdHJpbmcgKG5hbWUpKTsKKyAgICBpZiAoaWRlbnQpCisgICAgICB2YXJfYXR0cmli dXRlcyA9IHRyZWVfY29ucyAoaWRlbnQsIGF0dHJpYnV0ZV92YWx1ZSwgdmFyX2F0dHJpYnV0ZXMp OworICB9CisgIGRlY2xfYXR0cmlidXRlcyAoJmRlY2wsIHZhcl9hdHRyaWJ1dGVzLCAwKTsKK30K KwogLyogSW4gdXNlIGJ5IG5ld19nbG9iYWwgYW5kIG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQuICAq LwogCiBwbGF5YmFjazo6bHZhbHVlICoKQEAgLTY3NCwxMCArODAyLDEyIEBAIG5ld19nbG9iYWwg KGxvY2F0aW9uICpsb2MsCiAJICAgIGVudW0gZ2NjX2ppdF9nbG9iYWxfa2luZCBraW5kLAogCSAg ICB0eXBlICp0eXBlLAogCSAgICBjb25zdCBjaGFyICpuYW1lLAotCSAgICBlbnVtIGdsb2JhbF92 YXJfZmxhZ3MgZmxhZ3MpCisJICAgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncywKKwkgICAg Y29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAor CQkJCQlzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKQogewogICB0cmVlIGlubmVyID0KLSAgICBn bG9iYWxfbmV3X2RlY2wgKGxvYywga2luZCwgdHlwZSwgbmFtZSwgZmxhZ3MpOworICAgIGdsb2Jh bF9uZXdfZGVjbCAobG9jLCBraW5kLCB0eXBlLCBuYW1lLCBmbGFncywgYXR0cmlidXRlcyk7CiAK ICAgcmV0dXJuIGdsb2JhbF9maW5hbGl6ZV9sdmFsdWUgKGlubmVyKTsKIH0KQEAgLTgxOCwxMyAr OTQ4LDE1IEBAIHBsYXliYWNrOjpjb250ZXh0OjoKIG5ld19nbG9iYWxfaW5pdGlhbGl6ZWQgKGxv Y2F0aW9uICpsb2MsCiAJCQllbnVtIGdjY19qaXRfZ2xvYmFsX2tpbmQga2luZCwKIAkJCXR5cGUg KnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbWVudF9zaXplLAorCQkJ c2l6ZV90IGVsZW1lbnRfc2l6ZSwKIAkJCXNpemVfdCBpbml0aWFsaXplcl9udW1fZWxlbSwKIAkJ CWNvbnN0IHZvaWQgKmluaXRpYWxpemVyLAogCQkJY29uc3QgY2hhciAqbmFtZSwKLQkJCWVudW0g Z2xvYmFsX3Zhcl9mbGFncyBmbGFncykKKwkJCWVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncywK KwkJCWNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0 ZSwKKwkJCQkJCSAgICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKQogewotICB0cmVlIGlubmVy ID0gZ2xvYmFsX25ld19kZWNsIChsb2MsIGtpbmQsIHR5cGUsIG5hbWUsIGZsYWdzKTsKKyAgdHJl ZSBpbm5lciA9IGdsb2JhbF9uZXdfZGVjbCAobG9jLCBraW5kLCB0eXBlLCBuYW1lLCBmbGFncywg YXR0cmlidXRlcyk7CiAKICAgdmVjPGNvbnN0cnVjdG9yX2VsdCwgdmFfZ2M+ICpjb25zdHJ1Y3Rv cl9lbGVtZW50cyA9IE5VTEw7CiAKQEAgLTE4MTIsNyArMTk0NCw5IEBAIHBsYXliYWNrOjpsdmFs dWUgKgogcGxheWJhY2s6OmZ1bmN0aW9uOjoKIG5ld19sb2NhbCAobG9jYXRpb24gKmxvYywKIAkg ICB0eXBlICp0eXBlLAotCSAgIGNvbnN0IGNoYXIgKm5hbWUpCisJICAgY29uc3QgY2hhciAqbmFt ZSwKKwkgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9hdHRy aWJ1dGUsCisJCQkJICAgICAgIHN0ZDo6c3RyaW5nPj4gJmF0dHJpYnV0ZXMpCiB7CiAgIGdjY19h c3NlcnQgKHR5cGUpOwogICBnY2NfYXNzZXJ0IChuYW1lKTsKQEAgLTE4MjUsNiArMTk1OSw4IEBA IG5ld19sb2NhbCAobG9jYXRpb24gKmxvYywKICAgREVDTF9DSEFJTiAoaW5uZXIpID0gQklORF9F WFBSX1ZBUlMgKG1faW5uZXJfYmluZF9leHByKTsKICAgQklORF9FWFBSX1ZBUlMgKG1faW5uZXJf YmluZF9leHByKSA9IGlubmVyOwogCisgIHNldF92YXJpYWJsZV9zdHJpbmdfYXR0cmlidXRlIChh dHRyaWJ1dGVzLCBpbm5lcik7CisKICAgaWYgKGxvYykKICAgICBzZXRfdHJlZV9sb2NhdGlvbiAo aW5uZXIsIGxvYyk7CiAgIHJldHVybiBuZXcgbHZhbHVlIChtX2N0eHQsIGlubmVyKTsKQEAgLTE5 NDcsNiArMjA4Myw5IEBAIHBvc3Rwcm9jZXNzICgpCiAKICAgICAgIGN1cnJlbnRfZnVuY3Rpb25f ZGVjbCA9IE5VTEw7CiAgICAgfQorICAgIGVsc2UKKyAgICAgIC8qIEFkZCB0byBjZ3JhcGggdG8g b3V0cHV0IGFsaWFzZXM6ICovCisgICAgICByZXN0X29mX2RlY2xfY29tcGlsYXRpb24gKG1faW5u ZXJfZm5kZWNsLCB0cnVlLCAwKTsKIH0KIAogLyogRG9uJ3QgbGVhayB2ZWMncyBpbnRlcm5hbCBi dWZmZXIgKGluIG5vbi1HQyBoZWFwKSB3aGVuIHdlIGFyZQpAQCAtMzM2NSw3ICszNTA0LDcgQEAg dm9pZAogcGxheWJhY2s6OmNvbnRleHQ6OgogaW5pdF90eXBlcyAoKQogewotICAvKiBTZWUgbHRv X2luaXQoKSBpbiBsdG8tbGFuZy5jYyBvciB2b2lkIHZpc2l0IChUeXBlQmFzaWMgKnQpIGluIEQn cyB0eXBlcy5jYyAKKyAgLyogU2VlIGx0b19pbml0ICgpIGluIGx0by1sYW5nLmNjIG9yIHZvaWQg dmlzaXQgKFR5cGVCYXNpYyAqdCkgaW4gRCdzIHR5cGVzLmNjCiAgICAgIGZvciByZWZlcmVuY2Uu IElmIFRZUEVfTkFNRSBpcyBub3Qgc2V0LCBkZWJ1ZyBpbmZvIHdpbGwgbm90IGNvbnRhaW4gdHlw ZXMgKi8KICNkZWZpbmUgTkFNRV9UWVBFKHQsbikgXAogaWYgKHQpIFwKZGlmZiAtLWdpdCBhL2dj Yy9qaXQvaml0LXBsYXliYWNrLmggYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCmluZGV4IGY5ZTI5 ZDBiYWVjLi5hMGU1NjUyMDcwMiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAor KysgYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCkBAIC0yMSw3ICsyMSw5IEBAIGFsb25nIHdpdGgg R0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaWZuZGVmIEpJVF9QTEFZ QkFDS19ICiAjZGVmaW5lIEpJVF9QTEFZQkFDS19ICiAKKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5j bHVkZSA8dXRpbGl0eT4gLy8gZm9yIHN0ZDo6cGFpcgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2lu Y2x1ZGUgInRpbWV2YXIuaCIKICNpbmNsdWRlICJ2YXJhc20uaCIKQEAgLTM1LDEyICszNywyMSBA QCBuYW1lc3BhY2UgZ2NjIHsKIAogbmFtZXNwYWNlIGppdCB7CiAKK2NvbnN0IGNoYXIqIGZuX2F0 dHJpYnV0ZV90b19zdHJpbmcgKGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHIpOworY29uc3QgY2hh ciogdmFyaWFibGVfYXR0cmlidXRlX3RvX3N0cmluZyAoZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1 dGUgYXR0cik7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgUGxheWJhY2suCiAgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K IAogbmFtZXNwYWNlIHBsYXliYWNrIHsKIAordm9pZAorc2V0X3ZhcmlhYmxlX3N0cmluZ19hdHRy aWJ1dGUgKAorICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF92YXJpYWJsZV9h dHRyaWJ1dGUsCisJCQkgICAgICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzLAorICB0cmVlIGRl Y2wpOworCiAvKiBwbGF5YmFjazo6Y29udGV4dCBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLgog CiAgICBUaGUgdHdvIGNvbmNyZXRlIHN1YmNsYXNzZXMgYXJlOgpAQCAtMTA0LDE0ICsxMTUsMjIg QEAgcHVibGljOgogCQljb25zdCBjaGFyICpuYW1lLAogCQljb25zdCBhdXRvX3ZlYzxwYXJhbSAq PiAqcGFyYW1zLAogCQlpbnQgaXNfdmFyaWFkaWMsCi0JCWVudW0gYnVpbHRfaW5fZnVuY3Rpb24g YnVpbHRpbl9pZCk7CisJCWVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCwKKwkJY29u c3Qgc3RkOjp2ZWN0b3I8Z2NjX2ppdF9mbl9hdHRyaWJ1dGU+ICZhdHRyaWJ1dGVzLAorCQljb25z dCBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRyaWJ1dGUsCisJCQkJCSAgICBz dGQ6OnN0cmluZz4+ICZzdHJpbmdfYXR0cmlidXRlcywKKwkJY29uc3Qgc3RkOjp2ZWN0b3I8c3Rk OjpwYWlyPGdjY19qaXRfZm5fYXR0cmlidXRlLAorCQkJCQkgICAgc3RkOjp2ZWN0b3I8aW50Pj4+ CisJCQkJCSAgICAmaW50X2FycmF5X2F0dHJpYnV0ZXMpOwogCiAgIGx2YWx1ZSAqCiAgIG5ld19n bG9iYWwgKGxvY2F0aW9uICpsb2MsCiAJICAgICAgZW51bSBnY2Nfaml0X2dsb2JhbF9raW5kIGtp bmQsCiAJICAgICAgdHlwZSAqdHlwZSwKIAkgICAgICBjb25zdCBjaGFyICpuYW1lLAotCSAgICAg IGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncyk7CisJICAgICAgZW51bSBnbG9iYWxfdmFyX2Zs YWdzIGZsYWdzLAorCSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3Zh cmlhYmxlX2F0dHJpYnV0ZSwKKwkJCQkJICBzdGQ6OnN0cmluZz4+ICZhdHRyaWJ1dGVzKTsKIAog ICBsdmFsdWUgKgogICBuZXdfZ2xvYmFsX2luaXRpYWxpemVkIChsb2NhdGlvbiAqbG9jLApAQCAt MTIxLDcgKzE0MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBpbml0aWFsaXplcl9udW1fZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dm9pZCAqaW5pdGlhbGl6ZXIsCiAJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgIGVudW0gZ2xv YmFsX3Zhcl9mbGFncyBmbGFncyk7CisJCQkgIGVudW0gZ2xvYmFsX3Zhcl9mbGFncyBmbGFncywK KwkJCSAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPAorCQkJCQkgICAgZ2NjX2ppdF92YXJp YWJsZV9hdHRyaWJ1dGUsCisJCQkJCSAgICBzdGQ6OnN0cmluZz4+CisJCQkJCSAgICAmYXR0cmli dXRlcyk7CiAKICAgcnZhbHVlICoKICAgbmV3X2N0b3IgKGxvY2F0aW9uICpsb2csCkBAIC0zMDYs NyArMzI5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICBlbnVtIGdjY19qaXRfZ2xv YmFsX2tpbmQga2luZCwKICAgICAgICAgICAgICAgICAgICB0eXBlICp0eXBlLAogCQkgICBjb25z dCBjaGFyICpuYW1lLAotCQkgICBlbnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MpOworCQkgICBl bnVtIGdsb2JhbF92YXJfZmxhZ3MgZmxhZ3MsCisJCSAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6 cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwKKwkJCQkJICAgICAgIHN0ZDo6c3RyaW5n Pj4gJmF0dHJpYnV0ZXMpOwogICBsdmFsdWUgKgogICBnbG9iYWxfZmluYWxpemVfbHZhbHVlICh0 cmVlIGlubmVyKTsKIApAQCAtNTAwLDcgKzUyNSw5IEBAIHB1YmxpYzoKICAgbHZhbHVlICoKICAg bmV3X2xvY2FsIChsb2NhdGlvbiAqbG9jLAogCSAgICAgdHlwZSAqdHlwZSwKLQkgICAgIGNvbnN0 IGNoYXIgKm5hbWUpOworCSAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkgICAgIGNvbnN0IHN0ZDo6 dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSwKKwkJCQkJIHN0ZDo6 c3RyaW5nPj4gJmF0dHJpYnV0ZXMpOwogCiAgIGJsb2NrKgogICBuZXdfYmxvY2sgKGNvbnN0IGNo YXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2pp dC9qaXQtcmVjb3JkaW5nLmNjCmluZGV4IDliNWI4MDA1ZWJlLi42NDMwMWEzMjllYyAxMDA2NDQK LS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGlu Zy5jYwpAQCAtMjksNiArMjksNyBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJ TkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImppdC1idWlsdGlucy5oIgogI2luY2x1ZGUgImpp dC1yZWNvcmRpbmcuaCIKICNpbmNsdWRlICJqaXQtcGxheWJhY2suaCIKKyNpbmNsdWRlIDxzc3Ry ZWFtPgogCiBuYW1lc3BhY2UgZ2NjIHsKIG5hbWVzcGFjZSBqaXQgewpAQCAtMjA2OCw3ICsyMDY5 LDcgQEAgcmVjb3JkaW5nOjptZW1lbnRvOjpnZXRfZGVidWdfc3RyaW5nICgpCiB2b2lkCiByZWNv cmRpbmc6Om1lbWVudG86OndyaXRlX3RvX2R1bXAgKGR1bXAgJmQpCiB7Ci0gIGQud3JpdGUoIiAg JXNcbiIsIGdldF9kZWJ1Z19zdHJpbmcgKCkpOworICBkLndyaXRlICgiICAlc1xuIiwgZ2V0X2Rl YnVnX3N0cmluZyAoKSk7CiB9CiAKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjbGFzcyBnY2M6 OmppdDo6cmVjb3JkaW5nOjpzdHJpbmcuICAqLwpAQCAtNDAyNiw2ICs0MDI3LDEzIEBAIHZvaWQg cmVjb3JkaW5nOjpsdmFsdWU6OnNldF9hbGlnbm1lbnQgKHVuc2lnbmVkIGJ5dGVzKQogICBtX2Fs aWdubWVudCA9IGJ5dGVzOwogfQogCit2b2lkIHJlY29yZGluZzo6bHZhbHVlOjphZGRfc3RyaW5n X2F0dHJpYnV0ZSAoCisJZ2NjX2ppdF92YXJpYWJsZV9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCWNv bnN0IGNoYXIqIHZhbHVlKQoreworICBtX3N0cmluZ19hdHRyaWJ1dGVzLnB1c2hfYmFjayAoc3Rk OjptYWtlX3BhaXIgKGF0dHJpYnV0ZSwgc3RkOjpzdHJpbmcgKHZhbHVlKSkpOworfQorCiAvKiBU aGUgaW1wbGVtZW50YXRpb24gb2YgY2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6cGFyYW0uICAq LwogCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9vayByZWNvcmRpbmc6Om1l bWVudG86OnJlcGxheV9pbnRvCkBAIC00MTAyLDcgKzQxMTAsMTAgQEAgcmVjb3JkaW5nOjpmdW5j dGlvbjo6ZnVuY3Rpb24gKGNvbnRleHQgKmN0eHQsCiAgIG1fYnVpbHRpbl9pZCAoYnVpbHRpbl9p ZCksCiAgIG1fbG9jYWxzICgpLAogICBtX2Jsb2NrcyAoKSwKLSAgbV9mbl9wdHJfdHlwZSAoTlVM TCkKKyAgbV9mbl9wdHJfdHlwZSAoTlVMTCksCisgIG1fYXR0cmlidXRlcyAoKSwKKyAgbV9zdHJp bmdfYXR0cmlidXRlcyAoKSwKKyAgbV9pbnRfYXJyYXlfYXR0cmlidXRlcyAoKQogewogICBmb3Ig KGludCBpID0gMDsgaTwgbnVtX3BhcmFtczsgaSsrKQogICAgIHsKQEAgLTQxNjEsNyArNDE3Miwx MCBAQCByZWNvcmRpbmc6OmZ1bmN0aW9uOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiAJCQkJ ICAgICBtX25hbWUtPmNfc3RyICgpLAogCQkJCSAgICAgJnBhcmFtcywKIAkJCQkgICAgIG1faXNf dmFyaWFkaWMsCi0JCQkJICAgICBtX2J1aWx0aW5faWQpKTsKKwkJCQkgICAgIG1fYnVpbHRpbl9p ZCwKKwkJCQkgICAgIG1fYXR0cmlidXRlcywKKwkJCQkgICAgIG1fc3RyaW5nX2F0dHJpYnV0ZXMs CisJCQkJICAgICBtX2ludF9hcnJheV9hdHRyaWJ1dGVzKSk7CiB9CiAKIC8qIENyZWF0ZSBhIHJl Y29yZGluZzo6bG9jYWwgaW5zdGFuY2UgYW5kIGFkZCBpdCB0bwpAQCAtNDIxMCw2ICs0MjI0LDQw IEBAIHJlY29yZGluZzo6ZnVuY3Rpb246Om5ld19ibG9jayAoY29uc3QgY2hhciAqbmFtZSkKIHZv aWQKIHJlY29yZGluZzo6ZnVuY3Rpb246OndyaXRlX3RvX2R1bXAgKGR1bXAgJmQpCiB7CisgIGZv ciAoYXV0byBhdHRyOiBtX2F0dHJpYnV0ZXMpCisgIHsKKyAgICBjb25zdCBjaGFyKiBhdHRyaWJ1 dGUgPSBmbl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChhdHRyKTsKKyAgICBpZiAoYXR0cmlidXRlKQor ICAgICAgZC53cml0ZSAoIl9fYXR0cmlidXRlKCVzKV9fXG4iLCBhdHRyaWJ1dGUpOworICB9Cisg IGZvciAoYXV0byBhdHRyOiBtX3N0cmluZ19hdHRyaWJ1dGVzKQorICB7CisgICAgZ2NjX2ppdF9m bl9hdHRyaWJ1dGUmIG5hbWUgPSBzdGQ6OmdldDwwPihhdHRyKTsKKyAgICBzdGQ6OnN0cmluZyYg dmFsdWUgPSBzdGQ6OmdldDwxPihhdHRyKTsKKyAgICBjb25zdCBjaGFyKiBhdHRyaWJ1dGUgPSBm bl9hdHRyaWJ1dGVfdG9fc3RyaW5nIChuYW1lKTsKKworICAgIGlmIChhdHRyaWJ1dGUpCisgICAg ICBkLndyaXRlICgiX19hdHRyaWJ1dGUoJXMoXCIlc1wiKSlfX1xuIiwgYXR0cmlidXRlLCB2YWx1 ZS5jX3N0cigpKTsKKyAgfQorICBmb3IgKGF1dG8gYXR0cjogbV9pbnRfYXJyYXlfYXR0cmlidXRl cykKKyAgeworICAgIGdjY19qaXRfZm5fYXR0cmlidXRlJiBuYW1lID0gc3RkOjpnZXQ8MD4oYXR0 cik7CisgICAgc3RkOjp2ZWN0b3I8aW50PiYgdmFsdWVzID0gc3RkOjpnZXQ8MT4oYXR0cik7Cisg ICAgY29uc3QgY2hhciogYXR0cmlidXRlID0gZm5fYXR0cmlidXRlX3RvX3N0cmluZyAobmFtZSk7 CisgICAgaWYgKGF0dHJpYnV0ZSkKKyAgICB7CisgICAgICBkLndyaXRlICgiX19hdHRyaWJ1dGUo JXMoIiwgYXR0cmlidXRlKTsKKyAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNp emUoKTsgKytpKQorICAgICAgeworCWlmIChpID4gMCkKKwkgIGQud3JpdGUgKCIsICVkIiwgdmFs dWVzW2ldKTsKKwllbHNlCisJICBkLndyaXRlICgiJWQiLCB2YWx1ZXNbaV0pOworICAgICAgfQor ICAgICAgZC53cml0ZSAoIikpX19cbiIpOworICAgIH0KKyAgfQorCiAgIHN3aXRjaCAobV9raW5k KQogICAgIHsKICAgICBkZWZhdWx0OiBnY2NfdW5yZWFjaGFibGUgKCk7CkBAIC00NDA0LDYgKzQ0 NTIsMzEgQEAgcmVjb3JkaW5nOjpmdW5jdGlvbjo6Z2V0X2FkZHJlc3MgKHJlY29yZGluZzo6bG9j YXRpb24gKmxvYykKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZAorcmVjb3JkaW5nOjpmdW5j dGlvbjo6YWRkX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlKQorewor ICBtX2F0dHJpYnV0ZXMucHVzaF9iYWNrIChhdHRyaWJ1dGUpOworfQorCit2b2lkCityZWNvcmRp bmc6OmZ1bmN0aW9uOjphZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mbl9hdHRyaWJ1dGUg YXR0cmlidXRlLAorCQkJCQkgICBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgbV9zdHJpbmdfYXR0 cmlidXRlcy5wdXNoX2JhY2sgKAorCXN0ZDo6bWFrZV9wYWlyIChhdHRyaWJ1dGUsIHN0ZDo6c3Ry aW5nICh2YWx1ZSkpKTsKK30KKwordm9pZAorcmVjb3JkaW5nOjpmdW5jdGlvbjo6YWRkX2ludGVn ZXJfYXJyYXlfYXR0cmlidXRlICgKKwlnY2Nfaml0X2ZuX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisJ Y29uc3QgaW50KiB2YWx1ZSwKKwlzaXplX3QgbGVuZ3RoKQoreworICBtX2ludF9hcnJheV9hdHRy aWJ1dGVzLnB1c2hfYmFjayAoc3RkOjptYWtlX3BhaXIgKAorICAgIGF0dHJpYnV0ZSwKKyAgICBz dGQ6OnZlY3RvcjxpbnQ+ICh2YWx1ZSwgdmFsdWUgKyBsZW5ndGgpKSk7Cit9CisKIC8qIEltcGxl bWVudGF0aW9uIG9mIHJlY29yZGluZzo6bWVtZW50bzo6bWFrZV9kZWJ1Z19zdHJpbmcgZm9yCiAg ICBmdW5jdGlvbnMuICAqLwogCkBAIC00NDI1LDYgKzQ0OTgsMzkgQEAgc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCBuYW1lc19vZl9mdW5jdGlvbl9raW5kc1tdID0gewogCiAvKiBJbXBsZW1lbnRh dGlvbiBvZiByZWNvcmRpbmc6Om1lbWVudG86OndyaXRlX3JlcHJvZHVjZXIgZm9yIGZ1bmN0aW9u cy4gKi8KIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbl9hdHRyaWJ1dGVfcmVwcm9kdWNl cl9zdHJpbmdzW10gPQoreworICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfQUxJQVMiLAorICAiR0ND X0pJVF9GTl9BVFRSSUJVVEVfQUxXQVlTX0lOTElORSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVU RV9JTkxJTkUiLAorICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfTk9JTkxJTkUiLAorICAiR0NDX0pJ VF9GTl9BVFRSSUJVVEVfVEFSR0VUIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX1VTRUQiLAor ICAiR0NDX0pJVF9GTl9BVFRSSUJVVEVfVklTSUJJTElUWSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJ QlVURV9DT0xEIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklCVVRFX1JFVFVSTlNfVFdJQ0UiLAorICAi R0NDX0pJVF9GTl9BVFRSSUJVVEVfUFVSRSIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9DT05T VCIsCisgICJHQ0NfSklUX0ZOX0FUVFJJQlVURV9XRUFLIiwKKyAgIkdDQ19KSVRfRk5fQVRUUklC VVRFX05PTk5VTEwiLAorfTsKKworc3RkOjpzdHJpbmcKK2dldF92ZWN0b3JfaW50X2RlYnVnIChz dGQ6OnZlY3RvcjxpbnQ+ICZ2YWx1ZXMpCit7CisgIHN0ZDo6c3RyaW5nc3RyZWFtIHM7CisKKyAg cyA8PCAieyI7CisgIGZvcihhdXRvIGl0ID0gdmFsdWVzLmJlZ2luKCk7IGl0ICE9IHZhbHVlcy5l bmQoKTsgKytpdCkKKyAgICB7CisgICAgICBpZiAoaXQgIT0gdmFsdWVzLmJlZ2luKCkgKQorICAg ICAgICBzIDw8ICIsICI7CisgICAgICBzIDw8ICppdDsKKyAgICB9CisgIHMgPDwgIn0iOworICBy ZXR1cm4gcy5zdHIoKTsKK30KKwogdm9pZAogcmVjb3JkaW5nOjpmdW5jdGlvbjo6d3JpdGVfcmVw cm9kdWNlciAocmVwcm9kdWNlciAmcikKIHsKQEAgLTQ0NjcsNiArNDU3MywyNSBAQCByZWNvcmRp bmc6OmZ1bmN0aW9uOjp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQogCSAgIG1fcGFy YW1zLmxlbmd0aCAoKSwKIAkgICBwYXJhbXNfaWQsCiAJICAgbV9pc192YXJpYWRpYyk7CisgIGZv ciAoYXV0byBhdHRyaWJ1dGUgOiBtX2F0dHJpYnV0ZXMpCisgICAgci53cml0ZSgiICBnY2Nfaml0 X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUgKCVzLCAlcyk7XG4iLAorCSAgICBpZCwKKwkgICAgZm5f YXR0cmlidXRlX3JlcHJvZHVjZXJfc3RyaW5nc1thdHRyaWJ1dGVdKTsKKyAgZm9yIChhdXRvIGF0 dHJpYnV0ZSA6IG1fc3RyaW5nX2F0dHJpYnV0ZXMpCisgICAgci53cml0ZSgiICBnY2Nfaml0X2Z1 bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRlICglcywgJXMsIFwiJXNcIik7XG4iLAorCSAgICBp ZCwKKwkgICAgZm5fYXR0cmlidXRlX3JlcHJvZHVjZXJfc3RyaW5nc1tzdGQ6OmdldDwwPihhdHRy aWJ1dGUpXSwKKwkgICAgc3RkOjpnZXQ8MT4oYXR0cmlidXRlKS5jX3N0cigpKTsKKyAgZm9yIChh dXRvIGF0dHJpYnV0ZSA6IG1faW50X2FycmF5X2F0dHJpYnV0ZXMpIHsKKyAgICByLndyaXRlKCIg IGdjY19qaXRfZnVuY3Rpb25fYWRkX2ludGVnZXJfYXJyYXlfYXR0cmlidXRlICglcyxcbiIKKwkg ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLFxu IgorCSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGludFtdKSVzLFxuIgorCSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJWx1KTtcbiIsCisJICAgIGlkLAorCSAgICBmbl9hdHRyaWJ1dGVfcmVwcm9k dWNlcl9zdHJpbmdzW3N0ZDo6Z2V0PDA+KGF0dHJpYnV0ZSldLAorCSAgICBnZXRfdmVjdG9yX2lu dF9kZWJ1ZyAoc3RkOjpnZXQ8MT4oYXR0cmlidXRlKSkuY19zdHIoKSwKKwkgICAgc3RkOjpnZXQ8 MT4oYXR0cmlidXRlKS5zaXplICgpKTsKKyAgfQogfQogCiAKQEAgLTQ4NzksMTIgKzUwMDQsMTQg QEAgcmVjb3JkaW5nOjpnbG9iYWw6OnJlcGxheV9pbnRvIChyZXBsYXllciAqcikKIAkJCQkgLyBt X3R5cGUtPmRlcmVmZXJlbmNlICgpLT5nZXRfc2l6ZSAoKSwKIAkJCQkgbV9pbml0aWFsaXplciwK IAkJCQkgcGxheWJhY2tfc3RyaW5nIChtX25hbWUpLAotCQkJCSBtX2ZsYWdzKQorCQkJCSBtX2Zs YWdzLAorCQkJCSBtX3N0cmluZ19hdHRyaWJ1dGVzKQogICAgIDogci0+bmV3X2dsb2JhbCAocGxh eWJhY2tfbG9jYXRpb24gKHIsIG1fbG9jKSwKIAkJICAgICBtX2tpbmQsCiAJCSAgICAgbV90eXBl LT5wbGF5YmFja190eXBlICgpLAogCQkgICAgIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSwKLQkJ ICAgICBtX2ZsYWdzKTsKKwkJICAgICBtX2ZsYWdzLAorCQkgICAgIG1fc3RyaW5nX2F0dHJpYnV0 ZXMpOwogCiAgIGlmIChtX3Rsc19tb2RlbCAhPSBHQ0NfSklUX1RMU19NT0RFTF9OT05FKQogICAg IGdsb2JhbC0+c2V0X3Rsc19tb2RlbCAocmVjb3JkaW5nOjp0bHNfbW9kZWxzW21fdGxzX21vZGVs XSk7CkBAIC00OTQzLDYgKzUwNzAsMTUgQEAgcmVjb3JkaW5nOjpnbG9iYWw6OndyaXRlX3RvX2R1 bXAgKGR1bXAgJmQpCiAgICAgICBicmVhazsKICAgICB9CiAKKyAgZm9yIChhdXRvIGF0dHI6IG1f c3RyaW5nX2F0dHJpYnV0ZXMpCisgIHsKKyAgICBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSYg bmFtZSA9IHN0ZDo6Z2V0PDA+KGF0dHIpOworICAgIHN0ZDo6c3RyaW5nJiB2YWx1ZSA9IHN0ZDo6 Z2V0PDE+KGF0dHIpOworICAgIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZSA9IHZhcmlhYmxlX2F0dHJp YnV0ZV90b19zdHJpbmcgKG5hbWUpOworCisgICAgaWYgKGF0dHJpYnV0ZSkKKyAgICAgIGQud3Jp dGUgKCJfX2F0dHJpYnV0ZSglcyhcIiVzXCIpKV9fXG4iLCBhdHRyaWJ1dGUsIHZhbHVlLmNfc3Ry KCkpOworICB9CiAgIGQud3JpdGUgKCIlcyAlcyIsCiAJICAgbV90eXBlLT5nZXRfZGVidWdfc3Ry aW5nICgpLAogCSAgIGdldF9kZWJ1Z19zdHJpbmcgKCkpOwpAQCAtNTAxMyw2ICs1MTQ5LDEwIEBA IHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdGxzX21vZGVsX2VudW1fc3RyaW5nc1tdID0gewog ICAiR0NDX0pJVF9UTFNfTU9ERUxfTE9DQUxfRVhFQyIsCiB9OwogCitzdGF0aWMgY29uc3QgY2hh ciAqIGNvbnN0IGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlX2VudW1fc3RyaW5nc1tdID0gewor ICAiR0NDX0pJVF9WQVJJQUJMRV9BVFRSSUJVVEVfVklTSUJJTElUWSIsCit9OworCiB2b2lkCiBy ZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIHsKQEAg LTUwNDIsNiArNTE4MiwxMyBAQCByZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfcmVwcm9kdWNlciAo cmVwcm9kdWNlciAmcikKICAgICAgaWQsCiAgICAgIG1fbGlua19zZWN0aW9uLT5jX3N0ciAoKSk7 CiAKKyAgZm9yIChhdXRvIGF0dHJpYnV0ZSA6IG1fc3RyaW5nX2F0dHJpYnV0ZXMpCisgICAgci53 cml0ZSgiICBnY2Nfaml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoJXMsICVzLCBcIiVz XCIpO1xuIiwKKwkgICAgaWQsCisJICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlX2VudW1f c3RyaW5nc1tzdGQ6OmdldDwwPihhdHRyaWJ1dGUpXSwKKwkgICAgc3RkOjpnZXQ8MT4oYXR0cmli dXRlKS5jX3N0cigpKTsKKworCiAgIGlmIChtX2luaXRpYWxpemVyKQogICAgIHN3aXRjaCAobV90 eXBlLT5kZXJlZmVyZW5jZSAoKS0+Z2V0X3NpemUgKCkpCiAgICAgICB7CkBAIC02NjIyLDcgKzY3 NjksOCBAQCByZWNvcmRpbmc6OmxvY2FsOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCiAgIHBs YXliYWNrOjpsdmFsdWUgKm9iaiA9IG1fZnVuYy0+cGxheWJhY2tfZnVuY3Rpb24gKCkKICAgICAg IC0+bmV3X2xvY2FsIChwbGF5YmFja19sb2NhdGlvbiAociwgbV9sb2MpLAogCQkgICBtX3R5cGUt PnBsYXliYWNrX3R5cGUgKCksCi0JCSAgIHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSk7CisJCSAg IHBsYXliYWNrX3N0cmluZyAobV9uYW1lKSwKKwkJICAgbV9zdHJpbmdfYXR0cmlidXRlcyk7CiAK ICAgaWYgKG1fcmVnX25hbWUgIT0gTlVMTCkKICAgICBvYmotPnNldF9yZWdpc3Rlcl9uYW1lICht X3JlZ19uYW1lLT5jX3N0ciAoKSk7CkBAIC02NjQ0LDkgKzY3OTIsOSBAQCByZWNvcmRpbmc6Omxv Y2FsOjp3cml0ZV90b19kdW1wIChkdW1wICZkKQogewogICBpZiAoZC51cGRhdGVfbG9jYXRpb25z ICgpKQogICAgIG1fbG9jID0gZC5tYWtlX2xvY2F0aW9uICgpOwotICBkLndyaXRlKCIgICVzICVz O1xuIiwKLQkgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKLQkgIGdldF9kZWJ1Z19zdHJp bmcgKCkpOworICBkLndyaXRlICgiICAlcyAlcztcbiIsCisJICAgbV90eXBlLT5nZXRfZGVidWdf c3RyaW5nICgpLAorCSAgIGdldF9kZWJ1Z19zdHJpbmcgKCkpOwogfQogCiB2b2lkCmRpZmYgLS1n aXQgYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCmlu ZGV4IDRhODA4Mjk5MWZiLi40NDY5NGY2MTBmYSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVj b3JkaW5nLmgKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKQEAgLTIzLDYgKzIzLDEwIEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAKICNp bmNsdWRlICJqaXQtY29tbW9uLmgiCiAjaW5jbHVkZSAiaml0LWxvZ2dpbmcuaCIKKyNpbmNsdWRl ICJsaWJnY2NqaXQuaCIKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAK IGNsYXNzIHRpbWVyOwogCkBAIC0xMjE2LDcgKzEyMjAsOCBAQCBwdWJsaWM6CiAgICAgbV9saW5r X3NlY3Rpb24gKE5VTEwpLAogICAgIG1fcmVnX25hbWUgKE5VTEwpLAogICAgIG1fdGxzX21vZGVs IChHQ0NfSklUX1RMU19NT0RFTF9OT05FKSwKLSAgICBtX2FsaWdubWVudCAoMCkKKyAgICBtX2Fs aWdubWVudCAoMCksCisgICAgbV9zdHJpbmdfYXR0cmlidXRlcyAoKQogICB7fQogCiAgIHBsYXli YWNrOjpsdmFsdWUgKgpAQCAtMTIzNiw2ICsxMjQxLDkgQEAgcHVibGljOgogICBhc19ydmFsdWUg KCkgeyByZXR1cm4gdGhpczsgfQogCiAgIGNvbnN0IGNoYXIgKmFjY2Vzc19hc19ydmFsdWUgKHJl cHJvZHVjZXIgJnIpIG92ZXJyaWRlOworCisgIHZvaWQgYWRkX3N0cmluZ19hdHRyaWJ1dGUgKGdj Y19qaXRfdmFyaWFibGVfYXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3QgY2hhciogdmFsdWUpOwor CiAgIHZpcnR1YWwgY29uc3QgY2hhciAqYWNjZXNzX2FzX2x2YWx1ZSAocmVwcm9kdWNlciAmcik7 CiAgIHZpcnR1YWwgYm9vbCBpc19nbG9iYWwgKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg dm9pZCBzZXRfdGxzX21vZGVsIChlbnVtIGdjY19qaXRfdGxzX21vZGVsIG1vZGVsKTsKQEAgLTEy NDksNiArMTI1Nyw4IEBAIHByb3RlY3RlZDoKICAgc3RyaW5nICptX3JlZ19uYW1lOwogICBlbnVt IGdjY19qaXRfdGxzX21vZGVsIG1fdGxzX21vZGVsOwogICB1bnNpZ25lZCBtX2FsaWdubWVudDsK KyAgc3RkOjp2ZWN0b3I8c3RkOjpwYWlyPGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlLAorCSAg ICAgIHN0ZDo6c3RyaW5nPj4gbV9zdHJpbmdfYXR0cmlidXRlczsKIH07CiAKIGNsYXNzIHBhcmFt IDogcHVibGljIGx2YWx1ZQpAQCAtMTM0Miw2ICsxMzUyLDEwIEBAIHB1YmxpYzoKIAogICBydmFs dWUgKmdldF9hZGRyZXNzIChsb2NhdGlvbiAqbG9jKTsKIAorICB2b2lkIGFkZF9hdHRyaWJ1dGUg KGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSk7CisgIHZvaWQgYWRkX3N0cmluZ19hdHRy aWJ1dGUgKGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0ZSwgY29uc3QgY2hhciogdmFsdWUp OworICB2b2lkIGFkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoZ2NjX2ppdF9mbl9hdHRyaWJ1 dGUgYXR0cmlidXRlLCBjb25zdCBpbnQqIHZhbHVlLCBzaXplX3QgbGVuZ3RoKTsKKwogcHJpdmF0 ZToKICAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgZmluYWwgb3ZlcnJpZGU7CiAgIHZv aWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgZmluYWwgb3ZlcnJpZGU7CkBAIC0x MzU3LDYgKzEzNzEsOSBAQCBwcml2YXRlOgogICBhdXRvX3ZlYzxsb2NhbCAqPiBtX2xvY2FsczsK ICAgYXV0b192ZWM8YmxvY2sgKj4gbV9ibG9ja3M7CiAgIHR5cGUgKm1fZm5fcHRyX3R5cGU7Cisg IHN0ZDo6dmVjdG9yPGdjY19qaXRfZm5fYXR0cmlidXRlPiBtX2F0dHJpYnV0ZXM7CisgIHN0ZDo6 dmVjdG9yPHN0ZDo6cGFpcjxnY2Nfaml0X2ZuX2F0dHJpYnV0ZSwgc3RkOjpzdHJpbmc+PiBtX3N0 cmluZ19hdHRyaWJ1dGVzOworICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Z2NjX2ppdF9mbl9hdHRy aWJ1dGUsIHN0ZDo6dmVjdG9yPGludD4+PiBtX2ludF9hcnJheV9hdHRyaWJ1dGVzOwogfTsKIAog Y2xhc3MgYmxvY2sgOiBwdWJsaWMgbWVtZW50bwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2Nq aXQuY2MgYi9nY2Mvaml0L2xpYmdjY2ppdC5jYwppbmRleCAwNDUxYjRkZjdmOS4uMzM3ZDRlYTNi OTUgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmNjCisrKyBiL2djYy9qaXQvbGliZ2Nj aml0LmNjCkBAIC0zOTY1LDYgKzM5NjUsNTEgQEAgZ2NjX2ppdF90eXBlX2dldF9hbGlnbmVkIChn Y2Nfaml0X3R5cGUgKnR5cGUsCiAgIHJldHVybiAoZ2NjX2ppdF90eXBlICopdHlwZS0+Z2V0X2Fs aWduZWQgKGFsaWdubWVudF9pbl9ieXRlcyk7CiB9CiAKK3ZvaWQKK2djY19qaXRfZnVuY3Rpb25f YWRkX2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKwkJCQlnY2Nfaml0X2ZuX2F0 dHJpYnV0ZSBhdHRyaWJ1dGUpCit7CisgIFJFVFVSTl9JRl9GQUlMIChmdW5jLCBOVUxMLCBOVUxM LCAiTlVMTCBmdW5jIik7CisKKyAgZnVuYy0+YWRkX2F0dHJpYnV0ZSAoYXR0cmlidXRlKTsKK30K Kwordm9pZAorZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9m dW5jdGlvbiAqZnVuYywKKwkJCQkgICAgICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRl LAorCQkJCSAgICAgICBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgUkVUVVJOX0lGX0ZBSUwgKGZ1 bmMsIE5VTEwsIE5VTEwsICJOVUxMIGZ1bmMiKTsKKworICBmdW5jLT5hZGRfc3RyaW5nX2F0dHJp YnV0ZSAoYXR0cmlidXRlLCB2YWx1ZSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBh dHRyaWJ1dGUgd2l0aCBtdWx0aXBsZSBpbnRlZ2VyIHZhbHVlcy4gIEZvciBleGFtcGxlCisgICBg bm9ubnVsbCgxLCAyKWAuICBUaGUgbnVtYmVycyBpbiBgdmFsdWVzYCBhcmUgc3VwcG9zZWQgdG8g bWFwIGhvdyB0aGV5CisgICBzaG91bGQgYmUgd3JpdHRlbiBpbiBDIGNvZGUuICBTbyBmb3IgYG5v bm51bGwoMSwgMilgLCB5b3Ugc2hvdWxkIHBhc3MgYDFgCisgICBhbmQgYDJgIGluIGB2YWx1ZXNg IChhbmQgc2V0IGBsZW5ndGhgIHRvIGAyYCkuICovCit2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2Fk ZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYywKKwkJCQkJ ICAgICAgZ2NjX2ppdF9mbl9hdHRyaWJ1dGUgYXR0cmlidXRlLAorCQkJCQkgICAgICBjb25zdCBp bnQqIHZhbHVlcywKKwkJCQkJICAgICAgc2l6ZV90IGxlbmd0aCkKK3sKKyAgUkVUVVJOX0lGX0ZB SUwgKGZ1bmMsIE5VTEwsIE5VTEwsICJOVUxMIGZ1bmMiKTsKKyAgUkVUVVJOX0lGX0ZBSUwgKHZh bHVlcywgTlVMTCwgTlVMTCwgIk5VTEwgdmFsdWVzIik7CisKKyAgZnVuYy0+YWRkX2ludGVnZXJf YXJyYXlfYXR0cmlidXRlIChhdHRyaWJ1dGUsIHZhbHVlcywgbGVuZ3RoKTsKK30KKwordm9pZAor Z2NjX2ppdF9sdmFsdWVfYWRkX3N0cmluZ19hdHRyaWJ1dGUgKGdjY19qaXRfbHZhbHVlICp2YXJp YWJsZSwKKwkJCQkgICAgIGdjY19qaXRfdmFyaWFibGVfYXR0cmlidXRlIGF0dHJpYnV0ZSwKKwkJ CQkgICAgIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICBSRVRVUk5fSUZfRkFJTCAodmFyaWFibGUs IE5VTEwsIE5VTEwsICJOVUxMIHZhcmlhYmxlIik7CisKKyAgdmFyaWFibGUtPmFkZF9zdHJpbmdf YXR0cmlidXRlIChhdHRyaWJ1dGUsIHZhbHVlKTsKK30KKwogLyogUHVibGljIGVudHJ5cG9pbnQu ICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAKICAgIEFmdGVyIGVycm9yLWNoZWNr aW5nLCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xp YmdjY2ppdC5oIGIvZ2NjL2ppdC9saWJnY2NqaXQuaAppbmRleCA3NDlmNmMyNDE3Ny4uNzdhYWQy ZThmMjAgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmgKKysrIGIvZ2NjL2ppdC9saWJn Y2NqaXQuaApAQCAtMTk5OSw2ICsxOTk5LDU1IEBAIGdjY19qaXRfdmVjdG9yX3R5cGVfZ2V0X2Vs ZW1lbnRfdHlwZSAoZ2NjX2ppdF92ZWN0b3JfdHlwZSAqdmVjdG9yX3R5cGUpOwogZXh0ZXJuIGdj Y19qaXRfdHlwZSAqCiBnY2Nfaml0X3R5cGVfdW5xdWFsaWZpZWQgKGdjY19qaXRfdHlwZSAqdHlw ZSk7CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfQVRUUklCVVRFUworCisvKiBGdW5jdGlvbiBh dHRyaWJ1dGVzLiAgKi8KK2VudW0gZ2NjX2ppdF9mbl9hdHRyaWJ1dGUKK3sKKyAgR0NDX0pJVF9G Tl9BVFRSSUJVVEVfQUxJQVMsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX0FMV0FZU19JTkxJTkUs CisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX0lOTElORSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVf Tk9JTkxJTkUsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1RBUkdFVCwKKyAgR0NDX0pJVF9GTl9B VFRSSUJVVEVfVVNFRCwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVklTSUJJTElUWSwKKyAgR0ND X0pJVF9GTl9BVFRSSUJVVEVfQ09MRCwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfUkVUVVJOU19U V0lDRSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJVVEVfUFVSRSwKKyAgR0NDX0pJVF9GTl9BVFRSSUJV VEVfQ09OU1QsCisgIEdDQ19KSVRfRk5fQVRUUklCVVRFX1dFQUssCisgIEdDQ19KSVRfRk5fQVRU UklCVVRFX05PTk5VTEwsCit9OworCisvKiBBZGQgYW4gYXR0cmlidXRlIHRvIGEgZnVuY3Rpb24u ICAqLworZXh0ZXJuIHZvaWQKK2djY19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZSAoZ2NjX2pp dF9mdW5jdGlvbiAqZnVuYywKKwkJCQllbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlIGF0dHJpYnV0 ZSk7CisKK2V4dGVybiB2b2lkCitnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRl IChnY2Nfaml0X2Z1bmN0aW9uICpmdW5jLAorCQkJCSAgICAgICBlbnVtIGdjY19qaXRfZm5fYXR0 cmlidXRlIGF0dHJpYnV0ZSwKKwkJCQkgICAgICAgY29uc3QgY2hhciogdmFsdWUpOworCitleHRl cm4gdm9pZAorZ2NjX2ppdF9mdW5jdGlvbl9hZGRfaW50ZWdlcl9hcnJheV9hdHRyaWJ1dGUgKAor ICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jLAorICBlbnVtIGdjY19qaXRfZm5fYXR0cmlidXRlIGF0 dHJpYnV0ZSwKKyAgY29uc3QgaW50KiB2YWx1ZSwKKyAgc2l6ZV90IGxlbmd0aCk7CisKKy8qIFZh cmlhYmxlIGF0dHJpYnV0ZXMuICAqLworZW51bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZQor eworICBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJQlVURV9WSVNJQklMSVRZLAorfTsKKworLyogQWRk IGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBhIHZhcmlhYmxlLiAgKi8KK2V4dGVybiB2b2lkCitnY2Nf aml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZSAoZ2NjX2ppdF9sdmFsdWUgKnZhcmlhYmxl LAorCQkJCSAgICAgZW51bSBnY2Nfaml0X3ZhcmlhYmxlX2F0dHJpYnV0ZSBhdHRyaWJ1dGUsCisJ CQkJICAgICBjb25zdCBjaGFyKiB2YWx1ZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2Vu ZGlmIC8qIF9fY3BsdXNwbHVzICovCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAg Yi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKaW5kZXggOGI5MGEwZTJmZjMuLjNiZjhiYjVkOWI5IDEw MDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQu bWFwCkBAIC0yNzYsMyArMjc2LDExIEBAIExJQkdDQ0pJVF9BQklfMjUgewogICBnbG9iYWw6CiAg ICAgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdDsKIH0gTElCR0NDSklUX0FCSV8yNDsKKworTElC R0NDSklUX0FCSV8yNiB7CisgIGdsb2JhbDoKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRy aWJ1dGU7CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfc3RyaW5nX2F0dHJpYnV0ZTsKKyAgICBn Y2Nfaml0X2x2YWx1ZV9hZGRfc3RyaW5nX2F0dHJpYnV0ZTsKKyAgICBnY2Nfaml0X2Z1bmN0aW9u X2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZTsKK30gTElCR0NDSklUX0FCSV8yNTsKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2ppdC5leHAgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy9qaXQuZXhwCmluZGV4IDhiZjdlNTFjMjRmLi42NTdiNDU0YTAwMyAxMDA2NDQKLS0tIGEvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvaml0LmV4cAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9qaXQu ZXhwCkBAIC04OTksOCArODk5LDQxIEBAIHByb2Mgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0 IHsgYXJncyB9IHsKIAlwYXNzICIke2FzbV9maWxlbmFtZX0gb3V0cHV0IHBhdHRlcm4gdGVzdCwg JHtkZy1vdXRwdXQtdGV4dH0iCiAJdmVyYm9zZSAiUGFzc2VkIHRlc3QgZm9yIG91dHB1dCBwYXR0 ZXJuICR7ZGctb3V0cHV0LXRleHR9IiAzCiAgICAgfQorfQorCisjIEFzc3VtaW5nIHRoYXQgYSAu cyBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gb3V0IG5hbWVkCisjIE9VVFBVVF9GSUxFTkFNRSwgY2hl Y2sgdGhhdCB0aGUgYXJndW1lbnQgZG9lc24ndCBtYXRjaAorIyB0aGUgb3V0cHV0IGZpbGUuCitw cm9jIGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgeyBhcmdzIH0geworICAgIHZlcmJv c2UgImppdC12ZXJpZnktYXNzZW1ibGVyOiAkYXJncyIKKworICAgIHNldCBkZy1vdXRwdXQtdGV4 dCBbbGluZGV4ICRhcmdzIDBdCisgICAgdmVyYm9zZSAiZGctb3V0cHV0LXRleHQ6ICR7ZGctb3V0 cHV0LXRleHR9IgorCisgICAgdXB2YXIgMiBuYW1lIG5hbWUKKyAgICB2ZXJib3NlICJuYW1lOiAk bmFtZSIKKworICAgIHVwdmFyIDIgcHJvZyBwcm9nCisgICAgdmVyYm9zZSAicHJvZzogJHByb2ci CisgICAgc2V0IGFzbV9maWxlbmFtZSBbaml0LWdldC1vdXRwdXQtZmlsZW5hbWUgJHByb2ddCisg ICAgdmVyYm9zZSAiICBhc21fZmlsZW5hbWU6ICR7YXNtX2ZpbGVuYW1lfSIKIAorICAgICMgUmVh ZCB0aGUgYXNzZW1ibHkgZmlsZS4KKyAgICBzZXQgZiBbb3BlbiAkYXNtX2ZpbGVuYW1lIHJdCisg ICAgc2V0IGNvbnRlbnQgW3JlYWQgJGZdCisgICAgY2xvc2UgJGYKKworICAgICMgVmVyaWZ5IHRo YXQgdGhlIGFzc2VtYmx5IG1hdGNoZXMgdGhlIHJlZ2V4LgorICAgIGlmIHsgW3JlZ2V4cCAke2Rn LW91dHB1dC10ZXh0fSAkY29udGVudF0gfSB7CisJZmFpbCAiJHthc21fZmlsZW5hbWV9IG91dHB1 dCBwYXR0ZXJuIHRlc3QsIGlzICR7Y29udGVudH0sIHNob3VsZCBtYXRjaCAke2RnLW91dHB1dC10 ZXh0fSIKKwl2ZXJib3NlICJGYWlsZWQgdGVzdCBmb3Igb3V0cHV0IHBhdHRlcm4gJHtkZy1vdXRw dXQtdGV4dH0iIDMKKyAgICB9IGVsc2UgeworCXBhc3MgIiR7YXNtX2ZpbGVuYW1lfSBvdXRwdXQg cGF0dGVybiB0ZXN0LCAke2RnLW91dHB1dC10ZXh0fSIKKwl2ZXJib3NlICJQYXNzZWQgdGVzdCBm b3Igb3V0cHV0IHBhdHRlcm4gJHtkZy1vdXRwdXQtdGV4dH0iIDMKKyAgICB9CiB9CisKKwogIyBB c3N1bWluZyB0aGF0IGEgLm8gZmlsZSBoYXMgYmVlbiB3cml0dGVuIG91dCBuYW1lZAogIyBPVVRQ VVRfRklMRU5BTUUsIGludm9rZSB0aGUgZHJpdmVyIHRvIHRyeSB0byB0dXJuIGl0IGludG8KICMg YW4gZXhlY3V0YWJsZSwgYW5kIHRyeSB0byBydW4gdGhlIHJlc3VsdC4KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWFsaWFzLWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5lYjI5MDAzZGZjOQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtYWxpYXMtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw1MCBAQAorLyogeyBk Zy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRs aWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNk ZWZpbmUgVEVTVF9DT01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdD Q19KSVRfT1VUUFVUX0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91 dHB1dC1vZi10ZXN0LWFsaWFzLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgor Cit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2Rh dGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK3Zv aWQgeHh4ICgpIHt9Cit2b2lkIGYgKCkgX19hdHRyaWJ1dGVfXyAoKGFsaWFzICgieHh4IikpKTsK KyAgKi8KKyAgZ2NjX2ppdF90eXBlICp2b2lkX3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9n ZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX1ZPSUQpOworCisgIC8qIENyZWF0aW5nIHRoZSBg eHh4YCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqeHh4X2Z1bmMgPQorICAgIGdj Y19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisgICAgICAgICAgR0NDX0pJ VF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICAgICAgICB2b2lkX3R5cGUsCisgICAgICAgICAgInh4 eCIsCisgICAgICAgICAgMCwgTlVMTCwKKyAgICAgICAgICAwKTsKKworICAvKiBDcmVhdGluZyB0 aGUgYGZgIGZ1bmN0aW9uLiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICpmX2Z1bmMgPQorICAgIGdj Y19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0ZV TkNUSU9OX0lNUE9SVEVELAorCQkJCSAgdm9pZF90eXBlLAorCQkJCSAgImYiLAorCQkJCSAgMCwg TlVMTCwKKwkJCQkgIDApOworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9zdHJpbmdfYXR0cmlidXRl KGZfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfQUxJQVMsICJ4eHgiKTsKKworICAvKiB2b2lk IHh4eCAoKSB7fSAqLworICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25f bmV3X2Jsb2NrICh4eHhfZnVuYywgTlVMTCk7CisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfdm9p ZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnkt b3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSBhdHRy aWJ1dGUgd2FzIGFwcGxpZWQgY29ycmVjdGx5ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlm eS1hc3NlbWJsZXItb3V0cHV0ICIuc2V0XFxzK2YseHh4IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1dGUuYyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYWx3YXlzX2lubGluZS1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWMzZjM4NjY2M2YKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWFsd2F5c19pbmxpbmUtYXR0cmlidXRlLmMK QEAgLTAsMCArMSwxNTMgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0q IH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lu Y2x1ZGUgImxpYmdjY2ppdC5oIgorCisjZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUwor c3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hh ciAqYXJndjApCit7CisgIC8vIFNldCAiLU8wIi4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRf b3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09QVElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDApOwor fQorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQg ICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5B TUUgICJvdXRwdXQtb2YtdGVzdC1hbHdheXNfaW5saW5lLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVk ZSAiaGFybmVzcy5oIgorCitnY2Nfaml0X2Z1bmN0aW9uKgorY3JlYXRlX2Z1bmN0aW9uIChnY2Nf aml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFyICpmdW5jX25hbWUsCisJCSBnY2Nfaml0 X3R5cGUgKmludF90eXBlLAorCQkgZ2NjX2ppdF90eXBlICpwaW50X3R5cGUpCit7CisgIC8qIFRo ZSBgYWAgZnVuY3Rpb24gYXJndW1lbnQgKi8KKyAgZ2NjX2ppdF9wYXJhbSAqYSA9IGdjY19qaXRf Y29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIE5VTEwsIHBpbnRfdHlwZSwgImEiKTsKKyAgZ2NjX2pp dF9mdW5jdGlvbiAqZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4 dCwgTlVMTCwKKyAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lOVEVSTkFMLAorICAgICAgICAg IGludF90eXBlLAorICAgICAgICAgIGZ1bmNfbmFtZSwKKyAgICAgICAgICAxLCAmYSwKKyAgICAg ICAgICAwKTsKKworICBnY2Nfaml0X2Jsb2NrICppZl9jb25kID0KKyAgICBnY2Nfaml0X2Z1bmN0 aW9uX25ld19ibG9jayAoZnVuYywgImlmX2NvbmQiKTsKKyAgZ2NjX2ppdF9ibG9jayAqaWZfYm9k eSA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmMsICJpZl9ib2R5Iik7Cisg IGdjY19qaXRfYmxvY2sgKmFmdGVyX2lmID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9j ayAoZnVuYywgImFmdGVyX2lmIik7CisKKyAgLyogaWYgKCFhKSAqLworICBnY2Nfaml0X2Jsb2Nr X2VuZF93aXRoX2NvbmRpdGlvbmFsICgKKyAgICBpZl9jb25kLCBOVUxMLAorICAgIGdjY19qaXRf Y29udGV4dF9uZXdfY29tcGFyaXNvbiAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJ VF9DT01QQVJJU09OX0VRLAorICAgICAgZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKGEpLAorICAg ICAgZ2NjX2ppdF9jb250ZXh0X251bGwgKGN0eHQsIHBpbnRfdHlwZSkpLAorICAgIGlmX2JvZHks CisgICAgYWZ0ZXJfaWYpOworICAvKiByZXR1cm4gLTE7ICovCisgIGdjY19qaXRfYmxvY2tfZW5k X3dpdGhfcmV0dXJuICgKKyAgICBpZl9ib2R5LCBOVUxMLAorICAgIGdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgLTEpKTsKKworICAvKiByZXR1cm4g KmE7ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuICgKKyAgICBhZnRlcl9pZiwg TlVMTCwKKyAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorICAgICAgZ2NjX2ppdF9ydmFs dWVfZGVyZWZlcmVuY2UgKAorCWdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChhKSwgTlVMTCkpKTsK KworICByZXR1cm4gZnVuYzsKK30KKworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3Qg dGhlIGVxdWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpCitzdGF0 aWMgaW5saW5lIGludCByZW1vdmVkIChpbnQgKmEpIHsKKyAgaWYgKCFhKSB7CisgICAgcmV0dXJu IC0xOworICB9CisgIHJldHVybiAqYTsKK30KK3N0YXRpYyBpbnQgbm90X3JlbW92ZWQgKGludCAq YSkgeworICBpZiAoIWEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgcmV0dXJuICphOworfQor aW50IGZvbyAoKSB7CisgIGludCB4ID0gMDsKKyAgeCArPSByZW1vdmVkKE5VTEwpOworICB4ICs9 IG5vdF9yZW1vdmVkKE5VTEwpOworICByZXR1cm4geDsKK30KKyAgKi8KKyAgZ2NjX2ppdF90eXBl ICppbnRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklU X1RZUEVfSU5UKTsKKyAgZ2NjX2ppdF90eXBlICpwaW50X3R5cGUgPSBnY2Nfaml0X3R5cGVfZ2V0 X3BvaW50ZXIgKGludF90eXBlKTsKKworICAvKiBDcmVhdGluZyB0aGUgYHJlbW92ZWRgIGZ1bmN0 aW9uLiAqLworICBnY2Nfaml0X2Z1bmN0aW9uICpyZW1vdmVkX2Z1bmMgPQorICAgIGNyZWF0ZV9m dW5jdGlvbiAoY3R4dCwgInJlbW92ZWQiLCBpbnRfdHlwZSwgcGludF90eXBlKTsKKyAgLyogVGhp cyBvbmUgaXMgdG8gZGVjbGFyZSB0aGUgZnVuY3Rpb24gYXMgImlubGluZSIgKi8KKyAgZ2NjX2pp dF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKHJlbW92ZWRfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJV VEVfSU5MSU5FKTsKKyAgLyogX19hdHRyaWJ1dGVfXyAoKGFsd2F5c19pbmxpbmUpKSAqLworICBn Y2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUocmVtb3ZlZF9mdW5jLCBHQ0NfSklUX0ZOX0FU VFJJQlVURV9BTFdBWVNfSU5MSU5FKTsKKworICAvKiBDcmVhdGluZyB0aGUgYG5vdF9yZW1vdmVk YCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqbm90X3JlbW92ZWRfZnVuYyA9Cisg ICAgY3JlYXRlX2Z1bmN0aW9uIChjdHh0LCAibm90X3JlbW92ZWQiLCBpbnRfdHlwZSwgcGludF90 eXBlKTsKKworICAvKiBDcmVhdGluZyB0aGUgYGZvb2AgZnVuY3Rpb24uICovCisgIGdjY19qaXRf ZnVuY3Rpb24gKmZvb19mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChj dHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90 eXBlLAorCQkJCSAgImZvbyIsCisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisKKyAgZ2NjX2pp dF9ibG9jayAqZm9vX2Jsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZvb19mdW5j LCBOVUxMKTsKKworICAvKiBCdWlsZCBsb2NhbHM6ICAqLworICBnY2Nfaml0X2x2YWx1ZSAqeCA9 CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKGZvb19mdW5jLCBOVUxMLCBpbnRfdHlw ZSwgIngiKTsKKworICAvKiBpbnQgeCA9IDA7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2ln bm1lbnQgKAorICAgIGZvb19ibG9jaywgTlVMTCwKKyAgICB4LAorICAgIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8qIHggKz0g cmVtb3ZlZChOVUxMKTsgKi8KKyAgZ2NjX2ppdF9ydmFsdWUgKm51bGwgPSBnY2Nfaml0X2NvbnRl eHRfbnVsbCAoY3R4dCwgcGludF90eXBlKTsKKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVu dF9vcCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllf T1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5VTEwsIHJlbW92 ZWRfZnVuYywgMSwgJm51bGwpKTsKKyAgCisgIC8qIHggKz0gbm90X3JlbW92ZWQoTlVMTCk7ICov CisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGZvb19ibG9jaywgTlVM TCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCBub3RfcmVtb3ZlZF9mdW5jLCAxLCAmbnVsbCkpOwor CisgIC8qIHJldHVybiB4OyAqLworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoZm9v X2Jsb2NrLCBOVUxMLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoeCkpOworfQorCisvKiB7IGRn LWZpbmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8q IENoZWNrIHRoYXQgdGhlICJyZW1vdmVkIiBmdW5jdGlvbiB3YXMgaW5saW5lZCwgYnV0IG5vdCB0 aGUgb3RoZXJzICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0 LW5vdCAiLnR5cGVcXHMrcmVtb3ZlZCxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi50eXBlXFxzK25vdF9yZW1vdmVkLFxc cytAZnVuY3Rpb24iIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVy LW91dHB1dCAiLnR5cGVcXHMrZm9vLFxccytAZnVuY3Rpb24iIH0gfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0ZS5jIGIvZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1jb2xkLWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi44ZGM3ZWM1YTM0YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtY29sZC1hdHRyaWJ1dGUuYwpAQCAtMCwwICsxLDU0IEBACisvKiB7IGRn LWRvIGNvbXBpbGUgeyB0YXJnZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworLyog V2UgZG9uJ3Qgd2FudCBzZXRfb3B0aW9ucygpIGluIGhhcm5lc3MuaCB0byBzZXQgLU8yIHRvIHNl ZSB0aGF0IHRoZSBjb2xkCisgICBhdHRyaWJ1dGUgYWZmZWN0cyB0aGUgb3B0aW1pemF0aW9ucy4g Ki8KKyNkZWZpbmUgVEVTVF9FU0NIRVdTX1NFVF9PUFRJT05TCitzdGF0aWMgdm9pZCBzZXRfb3B0 aW9ucyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBjb25zdCBjaGFyICphcmd2MCkKK3sKKyAgLy8g U2V0ICItTzIiLgorICBnY2Nfaml0X2NvbnRleHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0NDX0pJ VF9JTlRfT1BUSU9OX09QVElNSVpBVElPTl9MRVZFTCwgMik7Cit9CisKKyNkZWZpbmUgVEVTVF9D T01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVU X0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0 LWNvbGQtYXR0cmlidXRlLmMucyIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0 ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgLyog TGV0J3MgdHJ5IHRvIGluamVjdCB0aGUgZXF1aXZhbGVudCBvZjoKK2ludAorX19hdHRyaWJ1dGVf XyAoKGNvbGQpKQordCgpCit7CisgIHJldHVybiAtMTsKK30KKworICAqLworICBnY2Nfaml0X3R5 cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19K SVRfVFlQRV9JTlQpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZ1bmNfdCA9CisgICAgZ2NjX2pp dF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKwkJCQkgIEdDQ19KSVRfRlVOQ1RJ T05fRVhQT1JURUQsCisJCQkJICBpbnRfdHlwZSwKKwkJCQkgICJ0IiwKKwkJCQkgIDAsIE5VTEws CisJCQkJICAwKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZ1bmNfdCwgR0ND X0pJVF9GTl9BVFRSSUJVVEVfQ09MRCk7CisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmNfdCwgTlVMTCk7CisgIGdjY19qaXRfcnZhbHVlICpy ZXQgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4dCwKKyAgICBpbnRf dHlwZSwKKyAgICAtMSk7CisKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2Nr LCBOVUxMLCByZXQpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmls ZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2Vt Ymxlci1vdXRwdXQgIm9ybCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWNvbnN0LWF0dHJpYnV0ZS5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb25z dC1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzA2 NzQyZDE2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNv bnN0LWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0 YXJnZXQgeDg2XzY0LSotKiB9IH0gKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg PHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworLyogV2UgZG9uJ3Qgd2FudCBz ZXRfb3B0aW9ucygpIGluIGhhcm5lc3MuaCB0byBzZXQgLU8zIHRvIHNlZSB0aGF0IHRoZSBjb25z dAorICAgYXR0cmlidXRlIGFmZmVjdHMgdGhlIG9wdGltaXphdGlvbnMuICovCisjZGVmaW5lIFRF U1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7CisgIC8vIFNldCAiLU8zIi4KKyAg Z2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09QVElPTl9P UFRJTUlaQVRJT05fTEVWRUwsIDMpOworfQorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJ TEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxF UgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2YtdGVzdC1jb25zdC1hdHRyaWJ1 dGUuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAvKiBMZXQncyB0cnkgdG8g aW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSkKK2ludCBm b28gKGludCB4KTsKK2ludCB4eHgodm9pZCkKK3sKKyAgaW50IHggPSA0NTsKKyAgaW50IHN1bSA9 IDA7CisKKyAgd2hpbGUgKHggPj49IDEpCisgICAgc3VtICs9IGZvbyAoeCkgKiAyOworICByZXR1 cm4gc3VtOworfQorICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0 X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIENyZWF0 aW5nIHRoZSBgZm9vYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9wYXJhbSAqbiA9CisgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgTlVMTCwgaW50X3R5cGUsICJ4Iik7CisgIGdj Y19qaXRfcGFyYW0gKnBhcmFtc1sxXSA9IHtufTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vX2Z1 bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIE5VTEwsCisgICAg ICAgICAgR0NDX0pJVF9GVU5DVElPTl9JTVBPUlRFRCwKKyAgICAgICAgICBpbnRfdHlwZSwKKyAg ICAgICAgICAiZm9vIiwKKyAgICAgICAgICAxLCBwYXJhbXMsCisgICAgICAgICAgMCk7CisgIGdj Y19qaXRfZnVuY3Rpb25fYWRkX2F0dHJpYnV0ZShmb29fZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJV VEVfQ09OU1QpOworCisgIC8qIENyZWF0aW5nIHRoZSBgeHh4YCBmdW5jdGlvbi4gKi8KKyAgZ2Nj X2ppdF9mdW5jdGlvbiAqeHh4X2Z1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rp b24gKGN0eHQsIE5VTEwsCisJCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAg aW50X3R5cGUsCisJCQkJICAieHh4IiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKworICBn Y2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVu YywgTlVMTCk7CisKKyAgLyogQnVpbGQgbG9jYWxzOiAgKi8KKyAgZ2NjX2ppdF9sdmFsdWUgKngg PQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsICh4eHhfZnVuYywgTlVMTCwgaW50X3R5 cGUsICJ4Iik7CisgIGdjY19qaXRfbHZhbHVlICpzdW0gPQorICAgIGdjY19qaXRfZnVuY3Rpb25f bmV3X2xvY2FsICh4eHhfZnVuYywgTlVMTCwgaW50X3R5cGUsICJzdW0iKTsKKworICAvKiBpbnQg eCA9IDQ1ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKAorICAgIGJsb2NrLCBO VUxMLAorICAgIHgsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0 eHQsIGludF90eXBlLCA0NSkpOworICAvKiBpbnQgc3VtID0gMCAqLworICBnY2Nfaml0X2Jsb2Nr X2FkZF9hc3NpZ25tZW50ICgKKyAgICBibG9jaywgTlVMTCwKKyAgICBzdW0sCisgICAgZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSk7CisKKyAg Lyogd2hpbGUgKHggPj49IDEpIHsgc3VtICs9IGZvbyAoeCkgKiAyOyB9ICovCisgIGdjY19qaXRf YmxvY2sgKmxvb3BfY29uZCA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9m dW5jLCAibG9vcF9jb25kIik7CisgIGdjY19qaXRfYmxvY2sgKmxvb3BfYm9keSA9CisgICAgZ2Nj X2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHh4eF9mdW5jLCAibG9vcF9ib2R5Iik7CisgIGdjY19q aXRfYmxvY2sgKmFmdGVyX2xvb3AgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4 eHhfZnVuYywgImFmdGVyX2xvb3AiKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX2p1bXAg KGJsb2NrLCBOVUxMLCBsb29wX2NvbmQpOworCisKKyAgLyogaWYgKHggPj49IDEpICovCisgIC8q IFNpbmNlIGdjY2ppdCBkb2Vzbid0ICh5ZXQ/KSBoYXZlIHN1cHBvcnQgZm9yIGA+Pj1gIG9wZXJh dG9yLCB3ZSB3aWxsIGRlY29tcG9zZSBpdCBpbnRvOgorICAgICBgaWYgKHggPSB4ID4+IDEpYCAq LworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKyAgICBsb29wX2NvbmQsIE5V TEwsCisgICAgeCwKKyAgICBHQ0NfSklUX0JJTkFSWV9PUF9SU0hJRlQsCisgICAgZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAxKSk7CisgIC8qIFRo ZSBjb25kaXRpb24gaXRzZWxmICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfY29uZGl0aW9u YWwgKAorICAgIGxvb3BfY29uZCwgTlVMTCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NvbXBh cmlzb24gKAorICAgICAgIGN0eHQsIE5VTEwsCisgICAgICAgR0NDX0pJVF9DT01QQVJJU09OX05F LAorICAgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoeCksCisgICAgICAgZ2NjX2ppdF9j b250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSksCisgICAgYWZ0 ZXJfbG9vcCwKKyAgICBsb29wX2JvZHkpOworCisgIC8qIHN1bSArPSBmb28gKHgpICogMjsgKi8K KyAgZ2NjX2ppdF9ydmFsdWUgKmFyZyA9IGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSh4KTsKKyAg Z2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisgICAgbG9vcF9ib2R5LCBOVUxMLAor ICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2JpbmFyeV9vcCAoCisgICAgICBjdHh0LCBOVUxMLAorICAgICAgR0NDX0pJVF9CSU5BUllf T1BfTVVMVCwgaW50X3R5cGUsCisgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQs IE5VTEwsIGZvb19mdW5jLCAxLCAmYXJnKSwKKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21faW50ICgKKwljdHh0LAorCWludF90eXBlLAorCTIpKSk7CisgIGdjY19qaXRfYmxv Y2tfZW5kX3dpdGhfanVtcCAobG9vcF9ib2R5LCBOVUxMLCBsb29wX2NvbmQpOworCisgIC8qIHJl dHVybiBzdW07ICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChhZnRlcl9sb29w LCBOVUxMLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoc3VtKSk7Cit9CisKKy8qIHsgZGctZmlu YWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVhdGVkICIiIH0gfSAqLworLyogQ2hl Y2sgdGhhdCB0aGUgbG9vcCB3YXMgb3B0aW1pemVkIGF3YXkgKi8KKy8qIHsgZGctZmluYWwgeyBq aXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90ICJqbmUiIH0gfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3Qtbm9pbmxpbmUtYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg0OTMzZTYwMDEwCi0tLSAvZGV2L251bGwKKysrIGIvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYwpAQCAtMCwwICsxLDEx NCBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Nj aml0LmgiCisKKy8qIFdlIGRvbid0IHdhbnQgc2V0X29wdGlvbnMoKSBpbiBoYXJuZXNzLmggdG8g c2V0IC1PMiB0byBzZWUgdGhhdCB0aGUgYG5vaW5saW5lYAorICAgYXR0cmlidXRlIGFmZmVjdHMg dGhlIG9wdGltaXphdGlvbnMuICovCisjZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUwor c3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hh ciAqYXJndjApCit7CisgIC8vIFNldCAiLU8yIi4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRf b3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5UX09QVElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDIpOwor fQorCisjZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQg ICAgICBHQ0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5B TUUgICJvdXRwdXQtb2YtdGVzdC1ub2lubGluZS1hdHRyaWJ1dGUuYy5zIgorI2luY2x1ZGUgImhh cm5lc3MuaCIKKworZ2NjX2ppdF9mdW5jdGlvbioKK2NyZWF0ZV9mdW5jdGlvbiAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LAorCQkgY29uc3QgY2hhciAqZnVuY19uYW1lLAorCQkgZ2NjX2ppdF90eXBl ICppbnRfdHlwZSwKKwkJIGludCByZXR1cm5lZF92YWx1ZSkKK3sKKyAgZ2NjX2ppdF9mdW5jdGlv biAqZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwK KyAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lOVEVSTkFMLAorICAgICAgICAgIGludF90eXBl LAorICAgICAgICAgIGZ1bmNfbmFtZSwKKyAgICAgICAgICAwLCBOVUxMLAorICAgICAgICAgIDAp OworCisgIGdjY19qaXRfYmxvY2sgKmZvb19ibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Js b2NrIChmdW5jLCBOVUxMKTsKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGZvb19i bG9jaywgTlVMTCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoY3R4 dCwgaW50X3R5cGUsIHJldHVybmVkX3ZhbHVlKSk7CisKKyAgcmV0dXJuIGZ1bmM7Cit9CisKKwor dm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRh KQoreworICAvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorX19hdHRy aWJ1dGVfXyAoKG5vaW5saW5lKSkKK3N0YXRpYyBpbnQgbm90X3JlbW92ZWQoKSB7IHJldHVybiAx OyB9CitzdGF0aWMgaW50IHJlbW92ZWQoKSB7IHJldHVybiAyOyB9CitpbnQgZm9vICgpIHsKKyAg aW50IHggPSAwOworICB4ICs9IHJlbW92ZWQoKTsKKyAgeCArPSBub3RfcmVtb3ZlZCgpOworICBy ZXR1cm4geDsKK30KKyAgKi8KKyAgZ2NjX2ppdF90eXBlICppbnRfdHlwZSA9CisgICAgZ2NjX2pp dF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5UKTsKKworICAvKiBDcmVh dGluZyB0aGUgYG5vdF9yZW1vdmVkYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAq bm90X3JlbW92ZWRfZnVuYyA9CisgICAgY3JlYXRlX2Z1bmN0aW9uIChjdHh0LCAibm90X3JlbW92 ZWQiLCBpbnRfdHlwZSwgMSk7CisgIC8qIF9fYXR0cmlidXRlX18gKChub19pbmxpbmUpKSAqLwor ICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUobm90X3JlbW92ZWRfZnVuYywgR0NDX0pJ VF9GTl9BVFRSSUJVVEVfTk9JTkxJTkUpOworCisgIC8qIENyZWF0aW5nIHRoZSBgcmVtb3ZlZGAg ZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKnJlbW92ZWRfZnVuYyA9CisgICAgY3Jl YXRlX2Z1bmN0aW9uIChjdHh0LCAicmVtb3ZlZCIsIGludF90eXBlLCAyKTsKKworICAvKiBDcmVh dGluZyB0aGUgYGZvb2AgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvb19mdW5j ID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCQkJCSAg R0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgImZvbyIs CisJCQkJICAwLCBOVUxMLAorCQkJCSAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqZm9vX2Jsb2Nr ID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZvb19mdW5jLCBOVUxMKTsKKworICAvKiBC dWlsZCBsb2NhbHM6ICAqLworICBnY2Nfaml0X2x2YWx1ZSAqeCA9CisgICAgZ2NjX2ppdF9mdW5j dGlvbl9uZXdfbG9jYWwgKGZvb19mdW5jLCBOVUxMLCBpbnRfdHlwZSwgIngiKTsKKworICAvKiBp bnQgeCA9IDA7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnQgKAorICAgIGZvb19i bG9jaywgTlVMTCwKKyAgICB4LAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f aW50IChjdHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8qIHggKz0gcmVtb3ZlZCgpOyAqLworICBn Y2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKyAgICBmb29fYmxvY2ssIE5VTEwsCisg ICAgeCwKKyAgICBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorICAgIGdjY19qaXRfY29udGV4dF9u ZXdfY2FsbCAoY3R4dCwgTlVMTCwgcmVtb3ZlZF9mdW5jLCAwLCBOVUxMKSk7CisgIAorICAvKiB4 ICs9IG5vdF9yZW1vdmVkKCk7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3Ag KAorICAgIGZvb19ibG9jaywgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BM VVMsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCBub3RfcmVtb3Zl ZF9mdW5jLCAwLCBOVUxMKSk7CisKKyAgLyogcmV0dXJuIHg7ICovCisgIGdjY19qaXRfYmxvY2tf ZW5kX3dpdGhfcmV0dXJuIChmb29fYmxvY2ssIE5VTEwsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1 ZSh4KSk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1j cmVhdGVkICIiIH0gfSAqLworLyogQ2hlY2sgdGhhdCB0aGUgInJlbW92ZWQiIGZ1bmN0aW9uIHdh cyBpbmxpbmVkLCBidXQgbm90IHRoZSBvdGhlcnMgKi8KKy8qIHsgZGctZmluYWwgeyBqaXQtdmVy aWZ5LWFzc2VtYmxlci1vdXRwdXQtbm90ICIudHlwZVxccytyZW1vdmVkLFxccytAZnVuY3Rpb24i IH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dCAiLnR5 cGVcXHMrbm90X3JlbW92ZWQsXFxzK0BmdW5jdGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg aml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIudHlwZVxccytmb28sXFxzK0BmdW5jdGlvbiIg fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5vbm51bGwtYXR0 cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LW5vbm51bGwtYXR0cmlidXRlLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzMDZmODkwNjU3Ci0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1ub25udWxsLWF0dHJpYnV0 ZS5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQt Ki0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwor I2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisvKiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25zKCkg aW4gaGFybmVzcy5oIHRvIHNldCAtTzIgdG8gc2VlIHRoYXQgdGhlIG5vbm51bGwKKyAgIGF0dHJp YnV0ZSBhZmZlY3RzIHRoZSBvcHRpbWl6YXRpb25zLiAqLworI2RlZmluZSBURVNUX0VTQ0hFV1Nf U0VUX09QVElPTlMKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIGNvbnN0IGNoYXIgKmFyZ3YwKQoreworICAvLyBTZXQgIi1PMiIuCisgIGdjY19qaXRfY29u dGV4dF9zZXRfaW50X29wdGlvbihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9O X0xFVkVMLCAyKTsKK30KKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5l IE9VVFBVVF9LSU5EICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUg T1VUUFVUX0ZJTEVOQU1FICAib3V0cHV0LW9mLXRlc3Qtbm9ubnVsbC5jLnMiCisjaW5jbHVkZSAi aGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2 b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxl bnQgb2Y6CisKK19fYXR0cmlidXRlX18oKG5vbm51bGwoMSkpKQoraW50IHQoaW50ICphKSB7Cisg IGlmICghYSkgeworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gKmE7Cit9CisgICovCisg IGdjY19qaXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAo Y3R4dCwgR0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2Nj X2ppdF90eXBlX2dldF9wb2ludGVyKGludF90eXBlKTsKKworICBnY2Nfaml0X3BhcmFtICphID0K KyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBwaW50X3R5cGUsICJh Iik7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZnVuY190ID0KKyAgICBnY2Nfaml0X2NvbnRleHRf bmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwK KwkgIGludF90eXBlLAorCSAgInQiLAorCSAgMSwgJmEsCisJICAwKTsKKyAgLyogQWRkaW5nIGBu b25udWxsKDEpYCBhdHRyaWJ1dGUuICovCisgIGludCBpbmRleGVzWzFdID0gezF9OworICBnY2Nf aml0X2Z1bmN0aW9uX2FkZF9pbnRlZ2VyX2FycmF5X2F0dHJpYnV0ZSAoCisgICAgZnVuY190LAor ICAgIEdDQ19KSVRfRk5fQVRUUklCVVRFX05PTk5VTEwsCisgICAgaW5kZXhlcywKKyAgICAxCisg ICk7CisKKyAgLyogaWYgKCFhKSB7CisgICAgcmV0dXJuIC0xOworICB9ICovCisgIGdjY19qaXRf YmxvY2sgKmlmX2NvbmQgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jX3Qs ICJpZl9jb25kIik7CisgIGdjY19qaXRfYmxvY2sgKmlmX2JvZHkgPQorICAgIGdjY19qaXRfZnVu Y3Rpb25fbmV3X2Jsb2NrIChmdW5jX3QsICJpZl9ib2R5Iik7CisgIGdjY19qaXRfYmxvY2sgKmFm dGVyX2lmID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuY190LCAiYWZ0ZXJf aWYiKTsKKworICAvKiBpZiAoIWEpICovCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfY29uZGl0 aW9uYWwgKAorICAgIGlmX2NvbmQsIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21w YXJpc29uICgKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICBHQ0NfSklUX0NPTVBBUklTT05fRVEs CisgICAgICBnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYSksCisgICAgICBnY2Nfaml0X2NvbnRl eHRfbnVsbCAoY3R4dCwgcGludF90eXBlKSksCisgICAgaWZfYm9keSwKKyAgICBhZnRlcl9pZik7 CisgIC8qIHJldHVybiAtMTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAor ICAgIGlmX2JvZHksIE5VTEwsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9p bnQgKGN0eHQsIGludF90eXBlLCAtMSkpOworCisgIC8qIHJldHVybiAqYTsgKi8KKyAgZ2NjX2pp dF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKAorICAgIGFmdGVyX2lmLCBOVUxMLAorICAgIGdjY19q aXRfbHZhbHVlX2FzX3J2YWx1ZSAoCisgICAgICBnY2Nfaml0X3J2YWx1ZV9kZXJlZmVyZW5jZSAo CisJZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKGEpLCBOVUxMKSkpOworfQorCisvKiB7IGRnLWZp bmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENo ZWNrIHRoYXQgdGhlICJpZiBibG9jayIgd2FzIG9wdGltaXplZCBhd2F5ICovCisvKiB7IGRnLWZp bmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5vdCAidGVzdHEiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgIi0xIiB9IH0gKi8K ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYyBi L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcHVyZS1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGM5YmExMzY2ZTAKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXB1cmUtYXR0cmlidXRlLmMKQEAgLTAsMCArMSwx MzQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisj aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdj Y2ppdC5oIgorCisvKiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25zKCkgaW4gaGFybmVzcy5oIHRv IHNldCAtTzMgdG8gc2VlIHRoYXQgdGhlIHB1cmUKKyAgIGF0dHJpYnV0ZSBhZmZlY3RzIHRoZSBv cHRpbWl6YXRpb25zLiAqLworI2RlZmluZSBURVNUX0VTQ0hFV1NfU0VUX09QVElPTlMKK3N0YXRp YyB2b2lkIHNldF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIGNvbnN0IGNoYXIgKmFy Z3YwKQoreworICAvLyBTZXQgIi1PMyIuCisgIGdjY19qaXRfY29udGV4dF9zZXRfaW50X29wdGlv bihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9OX0xFVkVMLCAzKTsKK30KKwor I2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9VVFBVVF9LSU5EICAgICAg R0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVOQU1FICAi b3V0cHV0LW9mLXRlc3QtcHVyZS1hdHRyaWJ1dGUuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIK Kwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9k YXRhKQoreworICAvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorX19h dHRyaWJ1dGVfXyAoKHB1cmUpKQoraW50IGZvbyAoaW50IHgpOworaW50IHh4eCh2b2lkKQorewor ICBpbnQgeCA9IDQ1OworICBpbnQgc3VtID0gMDsKKworICB3aGlsZSAoeCA+Pj0gMSkKKyAgICBz dW0gKz0gZm9vICh4KSAqIDI7CisgIHJldHVybiBzdW07Cit9CisgICovCisgIGdjY19qaXRfdHlw ZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJ VF9UWVBFX0lOVCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmb29gIGZ1bmN0aW9uLiAqLworICBn Y2Nfaml0X3BhcmFtICpuID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBO VUxMLCBpbnRfdHlwZSwgIngiKTsKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW1zWzFdID0ge259Owor ICBnY2Nfaml0X2Z1bmN0aW9uICpmb29fZnVuYyA9CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19m dW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0lNUE9SVEVE LAorICAgICAgICAgIGludF90eXBlLAorICAgICAgICAgICJmb28iLAorICAgICAgICAgIDEsIHBh cmFtcywKKyAgICAgICAgICAwKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZv b19mdW5jLCBHQ0NfSklUX0ZOX0FUVFJJQlVURV9QVVJFKTsKKworICAvKiBDcmVhdGluZyB0aGUg YHh4eGAgZnVuY3Rpb24uICovCisgIGdjY19qaXRfZnVuY3Rpb24gKnh4eF9mdW5jID0KKyAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9G VU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgInh4eCIsCisJCQkJICAw LCBOVUxMLAorCQkJCSAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1 bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsIE5VTEwpOworCisgIC8qIEJ1aWxkIGxvY2Fsczog ICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2Nh bCAoeHh4X2Z1bmMsIE5VTEwsIGludF90eXBlLCAieCIpOworICBnY2Nfaml0X2x2YWx1ZSAqc3Vt ID0KKyAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoeHh4X2Z1bmMsIE5VTEwsIGludF90 eXBlLCAic3VtIik7CisKKyAgLyogaW50IHggPSA0NSAqLworICBnY2Nfaml0X2Jsb2NrX2FkZF9h c3NpZ25tZW50ICgKKyAgICBibG9jaywgTlVMTCwKKyAgICB4LAorICAgIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgNDUpKTsKKyAgLyogaW50IHN1 bSA9IDAgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudCAoCisgICAgYmxvY2ssIE5V TEwsCisgICAgc3VtLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChj dHh0LCBpbnRfdHlwZSwgMCkpOworCisgIC8qIHdoaWxlICh4ID4+PSAxKSB7IHN1bSArPSBmb28g KHgpICogMjsgfSAqLworICBnY2Nfaml0X2Jsb2NrICpsb29wX2NvbmQgPQorICAgIGdjY19qaXRf ZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVuYywgImxvb3BfY29uZCIpOworICBnY2Nfaml0X2Js b2NrICpsb29wX2JvZHkgPQorICAgIGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrICh4eHhfZnVu YywgImxvb3BfYm9keSIpOworICBnY2Nfaml0X2Jsb2NrICphZnRlcl9sb29wID0KKyAgICBnY2Nf aml0X2Z1bmN0aW9uX25ld19ibG9jayAoeHh4X2Z1bmMsICJhZnRlcl9sb29wIik7CisKKyAgZ2Nj X2ppdF9ibG9ja19lbmRfd2l0aF9qdW1wIChibG9jaywgTlVMTCwgbG9vcF9jb25kKTsKKworCisg IC8qIGlmICh4ID4+PSAxKSAqLworICAvKiBTaW5jZSBnY2NqaXQgZG9lc24ndCAoeWV0PykgaGF2 ZSBzdXBwb3J0IGZvciBgPj49YCBvcGVyYXRvciwgd2Ugd2lsbCBkZWNvbXBvc2UgaXQgaW50bzoK KyAgICAgYGlmICh4ID0geCA+PiAxKWAgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVu dF9vcCAoCisgICAgbG9vcF9jb25kLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJVF9CSU5BUllf T1BfUlNISUZULAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0 LCBpbnRfdHlwZSwgMSkpOworICAvKiBUaGUgY29uZGl0aW9uIGl0c2VsZiAqLworICBnY2Nfaml0 X2Jsb2NrX2VuZF93aXRoX2NvbmRpdGlvbmFsICgKKyAgICBsb29wX2NvbmQsIE5VTEwsCisgICAg Z2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uICgKKyAgICAgICBjdHh0LCBOVUxMLAorICAg ICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9ORSwKKyAgICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFs dWUgKHgpLAorICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0 LCBpbnRfdHlwZSwgMCkpLAorICAgIGFmdGVyX2xvb3AsCisgICAgbG9vcF9ib2R5KTsKKworICAv KiBzdW0gKz0gZm9vICh4KSAqIDI7ICovCisgIGdjY19qaXRfcnZhbHVlICphcmcgPSBnY2Nfaml0 X2x2YWx1ZV9hc19ydmFsdWUoeCk7CisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3Ag KAorICAgIGxvb3BfYm9keSwgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BM VVMsCisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19iaW5hcnlfb3AgKAorICAgICAgY3R4dCwgTlVM TCwKKyAgICAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQsIGludF90eXBlLAorICAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCBmb29fZnVuYywgMSwgJmFyZyksCisgICAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2ludCAoCisJY3R4dCwKKwlpbnRfdHlw ZSwKKwkyKSkpOworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX2p1bXAgKGxvb3BfYm9keSwgTlVM TCwgbG9vcF9jb25kKTsKKworICAvKiByZXR1cm4gc3VtOyAqLworICBnY2Nfaml0X2Jsb2NrX2Vu ZF93aXRoX3JldHVybiAoYWZ0ZXJfbG9vcCwgTlVMTCwgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVl KHN1bSkpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMt Y3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQgdGhlIGxvb3Agd2FzIG9wdGltaXplZCBh d2F5ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0LW5vdCAi am5lIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJp Y3QuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMKc2lt aWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1y ZXN0cmljdC5jCnJlbmFtZSB0byBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXJlc3RyaWN0LWF0 dHJpYnV0ZS5jCmluZGV4IGE2YWM5NjMyNGQyLi43ZDc0NDRiNjI0ZiAxMDA2NDQKLS0tIGEvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1yZXN0cmljdC5jCisrKyBiL2djYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3QtcmVzdHJpY3QtYXR0cmlidXRlLmMKQEAgLTczLDUgKzczLDUgQEAgdm9pZCB0KGlu dCAqX19yZXN0cmljdF9fIGEsIGludCAqX19yZXN0cmljdF9fIGIsIGNoYXIgKl9fcmVzdHJpY3Rf XyBjKSB7CiB9CiAKIC8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1j cmVhdGVkICIiIH0gfSAqLwotLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91 dHB1dCAiYWRkbAklZWF4LCAoJXJkaSkKLQlhZGRsCSVlYXgsICglcnNpKSIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICJhZGRsXFxzKyVlYXgsXFxz KyglcmRpKQorXFxzK2FkZGxcXHMrJWVheCxcXHMrKCVyc2kpIiB9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYyBiL2djYy90ZXN0c3Vp dGUvaml0LmRnL3Rlc3QtdXNlZC1hdHRyaWJ1dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uY2IyMDk1MmM2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LXVzZWQtYXR0cmlidXRlLmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisj ZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9OUworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMg KGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3QgY2hhciAqYXJndjApCit7CisgIC8vIFNldCAi LU8yIi4KKyAgZ2NjX2ppdF9jb250ZXh0X3NldF9pbnRfb3B0aW9uKGN0eHQsIEdDQ19KSVRfSU5U X09QVElPTl9PUFRJTUlaQVRJT05fTEVWRUwsIDIpOworfQorCisjZGVmaW5lIFRFU1RfQ09NUElM SU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBHQ0NfSklUX09VVFBVVF9LSU5E X0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJvdXRwdXQtb2YtdGVzdC11c2Vk LWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCitnY2Nfaml0X2Z1bmN0aW9u KgorY3JlYXRlX2Z1bmN0aW9uIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBjb25zdCBjaGFy ICpmdW5jX25hbWUsCisJCSBnY2Nfaml0X3R5cGUgKmludF90eXBlLAorCQkgaW50IHJldHVybmVk X3ZhbHVlKQoreworICBnY2Nfaml0X2Z1bmN0aW9uICpmdW5jID0KKyAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorICAgICAgICAgIEdDQ19KSVRfRlVOQ1RJT05f SU5URVJOQUwsCisgICAgICAgICAgaW50X3R5cGUsCisgICAgICAgICAgZnVuY19uYW1lLAorICAg ICAgICAgIDAsIE5VTEwsCisgICAgICAgICAgMCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqZm9vX2Js b2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmMsIE5VTEwpOworICBnY2Nfaml0 X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoZm9vX2Jsb2NrLCBOVUxMLAorICAgIGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0LCBpbnRfdHlwZSwgcmV0dXJuZWRfdmFsdWUp KTsKKworICByZXR1cm4gZnVuYzsKK30KKworCit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmpl Y3QgdGhlIGVxdWl2YWxlbnQgb2Y6CitfX2F0dHJpYnV0ZV9fKCh1c2VkKSkKK3N0YXRpYyBpbnQg bm90X3JlbW92ZWQoKSB7IHJldHVybiAxOyB9CitzdGF0aWMgaW50IHJlbW92ZWQoKSB7IHJldHVy biAyOyB9CitpbnQgZm9vKCkgeworICBpbnQgeCA9IDA7CisgIHggKz0gbm90X3JlbW92ZWQoKTsK KyAgeCArPSByZW1vdmVkKCk7CisgIHJldHVybiB4OworfQorICAqLworICBnY2Nfaml0X3R5cGUg KmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRf VFlQRV9JTlQpOworCisgIC8qIENyZWF0aW5nIHRoZSBgbm90X3JlbW92ZWRgIGZ1bmN0aW9uLiAq LworICBnY2Nfaml0X2Z1bmN0aW9uICpub3RfcmVtb3ZlZF9mdW5jID0KKyAgICBjcmVhdGVfZnVu Y3Rpb24gKGN0eHQsICJub3RfcmVtb3ZlZCIsIGludF90eXBlLCAxKTsKKyAgLyogX19hdHRyaWJ1 dGVfXyAoKHVzZWQpKSAqLworICBnY2Nfaml0X2Z1bmN0aW9uX2FkZF9hdHRyaWJ1dGUobm90X3Jl bW92ZWRfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfVVNFRCk7CisKKyAgLyogQ3JlYXRpbmcg dGhlIGByZW1vdmVkYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5jdGlvbiAqcmVtb3ZlZF9m dW5jID0KKyAgICBjcmVhdGVfZnVuY3Rpb24gKGN0eHQsICJyZW1vdmVkIiwgaW50X3R5cGUsIDIp OworCisgIC8qIENyZWF0aW5nIHRoZSBgZm9vYCBmdW5jdGlvbi4gKi8KKyAgZ2NjX2ppdF9mdW5j dGlvbiAqZm9vX2Z1bmMgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQs IE5VTEwsCisJCQkJICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCSAgaW50X3R5cGUs CisJCQkJICAiZm9vIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKworICBnY2Nfaml0X2Js b2NrICpmb29fYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vX2Z1bmMsIE5V TEwpOworCisgIC8qIEJ1aWxkIGxvY2FsczogICovCisgIGdjY19qaXRfbHZhbHVlICp4ID0KKyAg ICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vX2Z1bmMsIE5VTEwsIGludF90eXBlLCAi eCIpOworCisgIC8qIGludCB4ID0gMDsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVu dCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9pbnQgKGN0eHQsIGludF90eXBlLCAwKSk7CisKKyAgLyogeCArPSByZW1v dmVkKCk7ICovCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2lnbm1lbnRfb3AgKAorICAgIGZvb19i bG9jaywgTlVMTCwKKyAgICB4LAorICAgIEdDQ19KSVRfQklOQVJZX09QX1BMVVMsCisgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCByZW1vdmVkX2Z1bmMsIDAsIE5VTEwp KTsKKyAgCisgIC8qIHggKz0gbm90X3JlbW92ZWQoKTsgKi8KKyAgZ2NjX2ppdF9ibG9ja19hZGRf YXNzaWdubWVudF9vcCAoCisgICAgZm9vX2Jsb2NrLCBOVUxMLAorICAgIHgsCisgICAgR0NDX0pJ VF9CSU5BUllfT1BfUExVUywKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIE5V TEwsIG5vdF9yZW1vdmVkX2Z1bmMsIDAsIE5VTEwpKTsKKworICAvKiByZXR1cm4geDsgKi8KKyAg Z2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGZvb19ibG9jaywgTlVMTCwgZ2NjX2ppdF9s dmFsdWVfYXNfcnZhbHVlKHgpKTsKK30KKworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0 cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0aGF0IHRoZSAicmVtb3Zl ZCIgZnVuY3Rpb24gd2FzIGlubGluZWQsIGJ1dCBub3QgdGhlIG90aGVycyAqLworLyogeyBkZy1m aW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1dC1ub3QgIi50eXBlXFxzK3JlbW92ZWQs XFxzK0BmdW5jdGlvbiIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJs ZXItb3V0cHV0ICIudHlwZVxccytub3RfcmVtb3ZlZCxcXHMrQGZ1bmN0aW9uIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi50eXBlXFxzK2Zvbyxc XHMrQGZ1bmN0aW9uIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rl c3QtdmFyaWFibGUtYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXZhcmlh YmxlLWF0dHJpYnV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5l YTg1NGZmNGE5ZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt dmFyaWFibGUtYXR0cmlidXRlLmMKQEAgLTAsMCArMSw0NiBAQAorLyogeyBkZy1kbyBjb21waWxl IHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs dWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisKKyNkZWZpbmUgVEVTVF9D T01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBPVVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVU X0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9VVFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0 LXZhcmlhYmxlLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7Cisg IC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK2ludCBQUklWQVRF IF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKSA9IDQyOworaW50IFBVQkxJ QyA9IDEyOworICAqLworICBnY2Nfaml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2Nv bnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9JTlQpOworCisgIC8qIENyZWF0aW5n IHRoZSBgUFJJVkFURWAgdmFyaWFibGUuICovCisgIGdjY19qaXRfbHZhbHVlICpwcml2YXRlID0g Z2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAgTlVMTCwgR0NDX0pJVF9HTE9C QUxfRVhQT1JURUQsIGludF90eXBlLCAiUFJJVkFURSIpOworICBnY2Nfaml0X2x2YWx1ZV9hZGRf c3RyaW5nX2F0dHJpYnV0ZSAocHJpdmF0ZSwKKyAgICBHQ0NfSklUX1ZBUklBQkxFX0FUVFJJQlVU RV9WSVNJQklMSVRZLCAiaGlkZGVuIik7CisgIGdjY19qaXRfcnZhbHVlICpydmFsID0gZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9pbnQgKAorICAgICAgY3R4dCwgaW50X3R5cGUsIDQy KTsKKyAgZ2NjX2ppdF9nbG9iYWxfc2V0X2luaXRpYWxpemVyX3J2YWx1ZSAocHJpdmF0ZSwgcnZh bCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBQVUJMSUNgIHZhcmlhYmxlLiAqLworICBnY2Nfaml0 X2x2YWx1ZSAqcHVibGljID0gZ2NjX2ppdF9jb250ZXh0X25ld19nbG9iYWwgKGN0eHQsCisgICAg TlVMTCwgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsIGludF90eXBlLCAiUFVCTElDIik7CisgIGdj Y19qaXRfcnZhbHVlICpydmFsMiA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50 ICgKKyAgICAgIGN0eHQsIGludF90eXBlLCAxMik7CisgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0 aWFsaXplcl9ydmFsdWUgKHB1YmxpYywgcnZhbDIpOworfQorCisvKiB7IGRnLWZpbmFsIHsgaml0 LXZlcmlmeS1vdXRwdXQtZmlsZS13YXMtY3JlYXRlZCAiIiB9IH0gKi8KKy8qIENoZWNrIHRoYXQg dGhlIGF0dHJpYnV0ZSB3YXMgYXBwbGllZCBjb3JyZWN0bHkgKi8KKy8qIHsgZGctZmluYWwgeyBq aXQtdmVyaWZ5LWFzc2VtYmxlci1vdXRwdXQgIi5oaWRkZW5cXHMrUFJJVkFURSIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIuZ2xvYmxcXHMrUFJJ VkFURSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0 LW5vdCAiLmhpZGRlblxccytQVUJMSUMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJp ZnktYXNzZW1ibGVyLW91dHB1dCAiLmdsb2JsXFxzK1BVQkxJQyIgfSB9ICovCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXdlYWstYXR0cmlidXRlLmMgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LXdlYWstYXR0cmlidXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjU0NmFkZTFjM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC13ZWFrLWF0dHJpYnV0ZS5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qIHsg ZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0gfSAqLworCisjaW5jbHVkZSA8c3Rk bGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisj ZGVmaW5lIFRFU1RfQ09NUElMSU5HX1RPX0ZJTEUKKyNkZWZpbmUgT1VUUFVUX0tJTkQgICAgICBH Q0NfSklUX09VVFBVVF9LSU5EX0FTU0VNQkxFUgorI2RlZmluZSBPVVRQVVRfRklMRU5BTUUgICJv dXRwdXQtb2YtdGVzdC13ZWFrLWF0dHJpYnV0ZS5jLnMiCisjaW5jbHVkZSAiaGFybmVzcy5oIgor Cit2b2lkCitjcmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2Rh dGEpCit7CisgIC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKK19f YXR0cmlidXRlX18gKCh3ZWFrKSkKK3ZvaWQgZiAoKSB7fQorICAqLworICBnY2Nfaml0X3R5cGUg KnZvaWRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklU X1RZUEVfVk9JRCk7CisKKyAgLyogQ3JlYXRpbmcgdGhlIGBmYCBmdW5jdGlvbi4gKi8KKyAgZ2Nj X2ppdF9mdW5jdGlvbiAqZl9mdW5jID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9u IChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIHZv aWRfdHlwZSwKKwkJCQkgICJmIiwKKwkJCQkgIDAsIE5VTEwsCisJCQkJICAwKTsKKyAgZ2NjX2pp dF9mdW5jdGlvbl9hZGRfYXR0cmlidXRlKGZfZnVuYywgR0NDX0pJVF9GTl9BVFRSSUJVVEVfV0VB Syk7CisKKyAgLyogdm9pZCBmICgpIHt9ICovCisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2Nj X2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZfZnVuYywgTlVMTCk7CisgIGdjY19qaXRfYmxvY2tf ZW5kX3dpdGhfdm9pZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKworLyogeyBkZy1maW5hbCB7 IGppdC12ZXJpZnktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9ICovCisvKiBDaGVjayB0 aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFwcGxpZWQgY29ycmVjdGx5ICovCisvKiB7IGRnLWZpbmFs IHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICIud2Vha1xccytmIiB9IH0gKi8KLS0gCjIu MzQuMQoK --0000000000003ff13b060c11c762--