From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender3-pp-o99.zoho.com (sender3-pp-o99.zoho.com [136.143.184.99]) by sourceware.org (Postfix) with ESMTPS id 5173B3858D32; Sun, 12 Feb 2023 00:32:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5173B3858D32 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=zoho.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=zoho.com ARC-Seal: i=1; a=rsa-sha256; t=1676161942; cv=none; d=zohomail.com; s=zohoarc; b=hxC9tHgk7MIOTa6RDimRK+C99v0XBNl/7i8Mv4ZEEq8zOgFk0tWkmKsZnOhIITx2hCAmEfrOeB7CUIMrb5MJQh2YUTkBacLGvq2zhVTWGTr72tTj8x4zzw4JDIDq/JDiqh1DbeX89/lvOeyp0fV7FyuCPsaT1vmKDqWUXonsR3o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1676161942; h=Content-Type:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=A2rAAGG/LbnVLrWBs1AYbNAGFK4ZFt6yZ9BtAswRLdo=; b=E4EWhTv54JcSY8FKq0DOyumVvHfKViFgVAsdzuqvTtI4DRYyi2kawP71bRvwDG3WxQiN/+ycCL8si3nUte4gPn+dso4j369llx9ZU0J/pME0gQO5Q+G+823QgZJmwdAyX906unoHpczqHI3sToHIkJrSRgTDKnMrBqRw1y/E6Fg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1676161942; s=zm2022; d=zoho.com; i=bouanto@zoho.com; h=Message-ID:Subject:Subject:From:From:To:To:Cc:Cc:Date:Date:In-Reply-To:References:Content-Type:MIME-Version:Message-Id:Reply-To; bh=A2rAAGG/LbnVLrWBs1AYbNAGFK4ZFt6yZ9BtAswRLdo=; b=bOTho3nsfhcfPOWWkT7lsWLInMdq9uvfbUcE/oBEMaorTPALL69j384SgB2Wl493 WnKzdjLJpjKNuzkF/NlWnc0ZcNcc25HoRxaBlPu+p5qvYl28a72XCs+UjIopDHIIBcv sScv1nb6CSdF9kLLih0IItcfMwhYrg6C7pM8Isao= Received: from [192.168.1.174] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 1676161941227920.5038911093353; Sat, 11 Feb 2023 16:32:21 -0800 (PST) Message-ID: <75551971f85c70f8e3df8584d81ced627e293177.camel@zoho.com> Subject: Re: [PATCH] libgccjit: Add support for machine-dependent builtins From: Antoni Boucher To: jit@gcc.gnu.org, gcc-patches@gcc.gnu.org Cc: David Malcolm Date: Sat, 11 Feb 2023 19:32:19 -0500 In-Reply-To: <184790403bd8227db4054b9e672afbfdf879dc0c.camel@zoho.com> References: <184790403bd8227db4054b9e672afbfdf879dc0c.camel@zoho.com> Content-Type: multipart/mixed; boundary="=-V3+hIAvUMa/WcLvWzNM2" User-Agent: Evolution 3.46.3 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-ZohoMailClient: External X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP 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: --=-V3+hIAvUMa/WcLvWzNM2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I forgot to attach the patch. Here it is. On Sat, 2023-02-11 at 19:30 -0500, Antoni Boucher via Jit wrote: > Hi. > This patch adds support for machine-dependent builtins in libgccjit > (bug 108762). >=20 > There are two things I don't like in this patch: >=20 > =C2=A01. There are a few functions copied from the C frontend > (common_mark_addressable_vec and a few others). >=20 > =C2=A02. Getting a target builtin only works from the second compilation > since the type information is recorded at the first compilation. I > couldn't find a way to get the builtin data without using the > langhook. > It is necessary to get the type information for type checking and > instrospection. >=20 > Any idea how to fix these issues? >=20 > Thanks for the review. --=-V3+hIAvUMa/WcLvWzNM2 Content-Disposition: attachment; filename*0=0001-libgccjit-Add-support-for-machine-dependent-builtins.pat; filename*1=ch Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="0001-libgccjit-Add-support-for-machine-dependent-builtins.patch"; charset="UTF-8" RnJvbSBmMWY0YTExMzg1M2I0MTY3NzYyNTNiNTk2ZDdmZWViODdlNjA4YmZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogTW9uLCAyMyBKYW4gMjAyMyAxNzoyMToxNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIGxpYmdj Y2ppdDogQWRkIHN1cHBvcnQgZm9yIG1hY2hpbmUtZGVwZW5kZW50IGJ1aWx0aW5zCgpnY2MvY29u ZmlnOgoJUFIgaml0LzEwODc2MgoJKiBpMzg2L2kzODYtYnVpbHRpbnMuY2M6IE5ldyBmdW5jdGlv biAoY2xlYXJfYnVpbHRpbl90eXBlcykuCgpnY2Mvaml0OgoJUFIgaml0LzEwODc2MgoJKiBkb2Nz L3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdCAoTElCR0NDSklUX0FCSV8yNSk6IE5ldyBBQkkgdGFn LgoJKiBkb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3Q6IEFkZCBkb2N1bWVudGF0aW9uIGZvciB0 aGUKCWZ1bmN0aW9ucyBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV92ZWN0b3JfcGVybSBhbmQK CWdjY19qaXRfY29udGV4dF9uZXdfdmVjdG9yX2FjY2Vzcy4KCSogZG9jcy90b3BpY3MvZnVuY3Rp b25zLnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbgoJZ2NjX2ppdF9jb250 ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbi4KCSogZG9jcy90b3BpY3MvdHlwZXMucnN0 OiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgR0NDX0pJVF9UWVBFX0JGTE9BVDE2LgoJKiBkdW1teS1m cm9udGVuZC5jYzogSW5jbHVkZSBoZWFkZXJzIHRhcmdldC5oLCBqaXQtcmVjb3JkaW5nLmgsCglw cmludC10cmVlLmgsIHVub3JkZXJlZF9tYXAgYW5kIHN0cmluZywgbmV3IHZhcmlhYmxlcyAodGFy Z2V0X2J1aWx0aW5zLAoJdGFyZ2V0X2Z1bmN0aW9uX3R5cGVzLCBhbmQgdGFyZ2V0X2J1aWx0aW5z X2N0eHQpLCBuZXcgZnVuY3Rpb24KCSh0cmVlX3R5cGVfdG9faml0X3R5cGUpLgoJKiBqaXQtYnVp bHRpbnMuY2M6IFNwZWNpZnkgdGhhdCB0aGUgZnVuY3Rpb24gdHlwZXMgYXJlIG5vdCBmcm9tCgl0 YXJnZXQgYnVpbHRpbnMuCgkqIGppdC1wbGF5YmFjay5jYzogTmV3IGFyZ3VtZW50IGlzX3Rhcmdl dF9idWlsdGluIHRvIG5ld19mdW5jdGlvbiwgbmV3CglmdW5jdGlvbnMgKG5ld19ydmFsdWVfdmVj dG9yX3Blcm0sIGNvbW1vbl9tYXJrX2FkZHJlc3NhYmxlX3ZlYywKCWdudV92ZWN0b3JfdHlwZV9w LCBsdmFsdWVfcCwgY29udmVydF92ZWN0b3JfdG9fYXJyYXlfZm9yX3N1YnNjcmlwdCwKCW5ld192 ZWN0b3JfYWNjZXNzKS4KCSogaml0LXBsYXliYWNrLmg6IE5ldyBhcmd1bWVudCBpc190YXJnZXRf YnVpbHRpbiB0bwoJbmV3X2Z1bmN0aW9uLCBuZXcgZnVuY3Rpb25zIChuZXdfcnZhbHVlX3ZlY3Rv cl9wZXJtLAoJbmV3X3ZlY3Rvcl9hY2Nlc3MpLgoJKiBqaXQtcmVjb3JkaW5nLmNjOiBOZXcgYXJn dW1lbnQgaXNfdGFyZ2V0X2J1aWx0aW4gdG8KCW5ld19mdW5jdGlvbl90eXBlLCBmdW5jdGlvbl90 eXBlIGNvbnN0cnVjdG9yIGFuZCBmdW5jdGlvbgoJY29uc3RydWN0b3IsIG5ldyBmdW5jdGlvbnMK CShnZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24sIG5ld19ydmFsdWVfdmVjdG9yX3Blcm0sCglu ZXdfdmVjdG9yX2FjY2VzcywgbWVtZW50b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtLAoJbWVt ZW50b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtOjpyZXBsYXlfaW50bywKCW1lbWVudG9fb2Zf bmV3X3J2YWx1ZV92ZWN0b3JfcGVybTo6dmlzaXRfY2hpbGRyZW4sCgltZW1lbnRvX29mX25ld19y dmFsdWVfdmVjdG9yX3Blcm06Om1ha2VfZGVidWdfc3RyaW5nLAoJbWVtZW50b19vZl9uZXdfcnZh bHVlX3ZlY3Rvcl9wZXJtOjp3cml0ZV9yZXByb2R1Y2VyLAoJdmVjdG9yX2FjY2Vzczo6cmVwbGF5 X2ludG8sIHZlY3Rvcl9hY2Nlc3M6OnZpc2l0X2NoaWxkcmVuLAoJdmVjdG9yX2FjY2Vzczo6bWFr ZV9kZWJ1Z19zdHJpbmcsIHZlY3Rvcl9hY2Nlc3M6OndyaXRlX3JlcHJvZHVjZXIpLgoJKiBqaXQt cmVjb3JkaW5nLmg6IEluY2x1ZGUgaGVhZGVycyBzdHJpbmcgYW5kIHVub3JkZXJlZF9tYXAsIG5l dwoJdmFyaWFibGUgdGFyZ2V0X2Z1bmN0aW9uX3R5cGVzLCBuZXcgYXJndW1lbnQgaXNfdGFyZ2V0 X2J1aWx0aW4KCXRvIG5ld19mdW5jdGlvbl90eXBlLCBmdW5jdGlvbl90eXBlIGFuZCBmdW5jdGlv biwgbmV3IGNsYXNzZXMKCW1lbWVudG9fb2ZfbmV3X3J2YWx1ZV92ZWN0b3JfcGVybSBhbmQgdmVj dG9yX2FjY2VzcywgbmV3IGZ1bmN0aW9ucwoJKGdldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiwg bmV3X3J2YWx1ZV92ZWN0b3JfcGVybSwKCW5ld192ZWN0b3JfYWNjZXNzLCBjb3B5LCBtZW1lbnRv X29mX25ld19ydmFsdWVfdmVjdG9yX3Blcm0sCgltZW1lbnRvX29mX25ld19ydmFsdWVfdmVjdG9y X3Blcm06OnJlcGxheV9pbnRvLAoJbWVtZW50b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtOjp2 aXNpdF9jaGlsZHJlbiwKCW1lbWVudG9fb2ZfbmV3X3J2YWx1ZV92ZWN0b3JfcGVybTo6bWFrZV9k ZWJ1Z19zdHJpbmcsCgltZW1lbnRvX29mX25ld19ydmFsdWVfdmVjdG9yX3Blcm06OndyaXRlX3Jl cHJvZHVjZXIsCgl2ZWN0b3JfYWNjZXNzOjpyZXBsYXlfaW50bywgdmVjdG9yX2FjY2Vzczo6dmlz aXRfY2hpbGRyZW4sCgl2ZWN0b3JfYWNjZXNzOjptYWtlX2RlYnVnX3N0cmluZywgdmVjdG9yX2Fj Y2Vzczo6d3JpdGVfcmVwcm9kdWNlcikuCgkqIGxpYmdjY2ppdC5jYzogTmV3IGZ1bmN0aW9ucwoJ KGdjY19qaXRfY29udGV4dF9nZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24sCglnY2Nfaml0X2Nv bnRleHRfbmV3X3ZlY3Rvcl9hY2Nlc3MsCglnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV92ZWN0 b3JfcGVybSkuCgkqIGxpYmdjY2ppdC5oOiBOZXcgdmFyaWFudCBHQ0NfSklUX1RZUEVfQkZMT0FU MTYgZW4gZW51bQoJZ2NjX2ppdF90eXBlcywgbmV3IGZ1bmN0aW9ucwoJKGdjY19qaXRfY29udGV4 dF9nZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24sCglnY2Nfaml0X2NvbnRleHRfbmV3X3ZlY3Rv cl9hY2Nlc3MsCglnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV92ZWN0b3JfcGVybSkuCgkqIGxp YmdjY2ppdC5tYXA6IE5ldyBmdW5jdGlvbnMKCShnY2Nfaml0X2NvbnRleHRfZ2V0X3RhcmdldF9i dWlsdGluX2Z1bmN0aW9uLAoJZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfdmVjdG9yX3Blcm0s CglnY2Nfaml0X2NvbnRleHRfbmV3X3ZlY3Rvcl9hY2Nlc3MpLgoKZ2NjL3Rlc3RzdWl0ZToKCVBS IGppdC8xMDg3NjIKCSogaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oOiBOZXcgdGVzdCB0 ZXN0LXRhcmdldC1idWlsdGlucy5jLgoJKiBqaXQuZGcvdGVzdC10YXJnZXQtYnVpbHRpbnMuYzog TmV3IHRlc3QuCi0tLQogZ2NjL2NvbmZpZy9pMzg2L2kzODYtYnVpbHRpbnMuY2MgICAgICAgICAg ICAgfCAgMTggKysKIGdjYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QgICAgICAg IHwgIDEwICsKIGdjYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0ICAgICAgICAgIHwg IDQ1ICsrKysKIGdjYy9qaXQvZG9jcy90b3BpY3MvZnVuY3Rpb25zLnJzdCAgICAgICAgICAgIHwg IDE5ICsrCiBnY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdCAgICAgICAgICAgICAgICB8ICAg MiArCiBnY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjICAgICAgICAgICAgICAgICAgICB8IDIwMyAr KysrKysrKysrKysrKy0KIGdjYy9qaXQvaml0LWJ1aWx0aW5zLmNjICAgICAgICAgICAgICAgICAg ICAgIHwgICA2ICstCiBnY2Mvaml0L2ppdC1jb21tb24uaCAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMiArLQogZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MgICAgICAgICAgICAgICAgICAgICAg fCAxNjYgKysrKysrKysrKystCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAg ICAgICAgICB8ICAxNiArLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjICAgICAgICAgICAgICAg ICAgICAgfCAyNTUgKysrKysrKysrKysrKysrKysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgg ICAgICAgICAgICAgICAgICAgICAgfCAxNzYgKysrKysrKysrKysrLQogZ2NjL2ppdC9saWJnY2Nq aXQuY2MgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMjcgKysrKysrKysrCiBnY2Mvaml0L2xp YmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0NCArKystCiBnY2Mvaml0L2xp YmdjY2ppdC5tYXAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBnY2MvdGVzdHN1aXRl L2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCB8ICAgMyArCiBnY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LXRhcmdldC1idWlsdGlucy5jICB8ICA3NyArKysrKysKIDE3IGZpbGVzIGNoYW5n ZWQsIDExNTMgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC10YXJnZXQtYnVpbHRpbnMuYwoKZGlmZiAtLWdp dCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWJ1aWx0aW5zLmNjIGIvZ2NjL2NvbmZpZy9pMzg2L2kz ODYtYnVpbHRpbnMuY2MKaW5kZXggZmMwYzgyYjE1NmUuLmY5Yjk5MzdhNjY5IDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2kzODYvaTM4Ni1idWlsdGlucy5jYworKysgYi9nY2MvY29uZmlnL2kzODYv aTM4Ni1idWlsdGlucy5jYwpAQCAtMjI2LDYgKzIyNiwyMiBAQCBzdGF0aWMgR1RZKCgpKSB0cmVl IGl4ODZfYnVpbHRpbnNbKGludCkgSVg4Nl9CVUlMVElOX01BWF07CiAKIHN0cnVjdCBidWlsdGlu X2lzYSBpeDg2X2J1aWx0aW5zX2lzYVsoaW50KSBJWDg2X0JVSUxUSU5fTUFYXTsKIAorc3RhdGlj IHZvaWQKK2NsZWFyX2J1aWx0aW5fdHlwZXMgKHZvaWQpCit7CisgIGZvciAoaW50IGkgPSAwIDsg aSA8IElYODZfQlRfTEFTVF9DUFRSICsgMSA7IGkrKykKKyAgICBpeDg2X2J1aWx0aW5fdHlwZV90 YWJbaV0gPSBOVUxMOworCisgIGZvciAoaW50IGkgPSAwIDsgaSA8IElYODZfQlVJTFRJTl9NQVgg OyBpKyspCisgIHsKKyAgICBpeDg2X2J1aWx0aW5zW2ldID0gTlVMTDsKKyAgICBpeDg2X2J1aWx0 aW5zX2lzYVtpXS5zZXRfYW5kX25vdF9idWlsdF9wID0gdHJ1ZTsKKyAgfQorCisgIGZvciAoaW50 IGkgPSAwIDsgaSA8IElYODZfQlRfTEFTVF9BTElBUyArIDEgOyBpKyspCisgICAgaXg4Nl9idWls dGluX2Z1bmNfdHlwZV90YWJbaV0gPSBOVUxMOworfQorCiB0cmVlIGdldF9peDg2X2J1aWx0aW4g KGVudW0gaXg4Nl9idWlsdGlucyBjKQogewogICByZXR1cm4gaXg4Nl9idWlsdGluc1tjXTsKQEAg LTE0NDMsNiArMTQ1OSw4IEBAIGl4ODZfaW5pdF9idWlsdGlucyAodm9pZCkKIHsKICAgdHJlZSBm dHlwZSwgZGVjbDsKIAorICBjbGVhcl9idWlsdGluX3R5cGVzICgpOworCiAgIGl4ODZfaW5pdF9i dWlsdGluX3R5cGVzICgpOwogCiAgIC8qIEJ1aWx0aW5zIHRvIGdldCBDUFUgdHlwZSBhbmQgZmVh dHVyZXMuICovCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHku cnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdAppbmRleCBmNGZmYTA3 ZWM0OC4uNDAyZGY1YjYwYjcgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0 aWJpbGl0eS5yc3QKKysrIGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdApA QCAtMzcxLDMgKzM3MSwxMyBAQCBhbGlnbm1lbnQgb2YgYSB2YXJpYWJsZToKIAogICAqIDpmdW5j OmBnY2Nfaml0X2x2YWx1ZV9zZXRfYWxpZ25tZW50YAogICAqIDpmdW5jOmBnY2Nfaml0X2x2YWx1 ZV9nZXRfYWxpZ25tZW50YAorCisuLiBfTElCR0NDSklUX0FCSV8yNToKKworYGBMSUJHQ0NKSVRf QUJJXzI1YGAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitgYExJQkdDQ0pJVF9BQklfMjVgYCBjb3Zl cnMgdGhlIGFkZGl0aW9uIG9mIGZ1bmN0aW9ucyB0byBnZXQgdGFyZ2V0IGJ1aWx0aW5zIGFuZCBt YW5pcHVsYXRlIHZlY3RvcnM6CisKKyAgKiA6ZnVuYzpgZ2NjX2ppdF9jb250ZXh0X2dldF90YXJn ZXRfYnVpbHRpbl9mdW5jdGlvbmAKKyAgKiA6ZnVuYzpgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfdmVjdG9yX3Blcm1gCisgICogOmZ1bmM6YGdjY19qaXRfY29udGV4dF9uZXdfdmVjdG9yX2Fj Y2Vzc2AKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0IGIv Z2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKaW5kZXggNDJjZmVlMzYzMDIuLjU3 OTA1OTU5NjM0IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJz dAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdApAQCAtMjk1LDYgKzI5 NSwzNSBAQCBWZWN0b3IgZXhwcmVzc2lvbnMKIAogICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZF X2djY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fdmVjdG9yCiAKKy4uIGZ1bmN0aW9uOjog Z2NjX2ppdF9ydmFsdWUgKiBcCisgICAgICAgICAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX3ZlY3Rvcl9wZXJtIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfbG9jYXRpb24g KmxvYywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2NjX2ppdF9ydmFsdWUgKmVsZW1lbnRzMSwgXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NjX2ppdF9ydmFsdWUgKmVsZW1lbnRz MiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2NjX2ppdF9ydmFsdWUgKm1hc2spOworCisgICBCdWlsZCBhIHBlcm11dGF0aW9uIG9mIHR3 byB2ZWN0b3JzLgorCisgICAiZWxlbWVudHMxIiBhbmQgImVsZW1lbnRzMiIgc2hvdWxkIGhhdmUg dGhlIHNhbWUgdHlwZS4KKyAgIFRoZSBsZW5ndGggb2YgIm1hc2siIGFuZCAiZWxlbWVudHMxIiBz aG91bGQgYmUgdGhlIHNhbWUuCisgICBUaGUgZWxlbWVudCB0eXBlIG9mICJtYXNrIiBzaG91bGQg YmUgaW50ZWdyYWwuCisgICBUaGUgc2l6ZSBvZiB0aGUgZWxlbWVudCB0eXBlIG9mICJtYXNrIiBh bmQgImVsZW1lbnRzMSIgc2hvdWxkIGJlIHRoZSBzYW1lLgorCisgICBUaGlzIGVudHJ5cG9pbnQg d2FzIGFkZGVkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjVgOyB5b3UgY2FuIHRlc3QgZm9yCisg ICBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lm ZGVmIExJQkdDQ0pJVF9IQVZFX1RBUkdFVF9CVUlMVElOCisKKyAgICBBbmFsb2dvdXMgdG86CisK KyAgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAgX19idWlsdGluX3NodWZmbGUgKGVsZW1l bnRzMSwgZWxlbWVudHMyLCBtYXNrKQorCisgICAgaW4gQy4KKwogVW5hcnkgT3BlcmF0aW9ucwog KioqKioqKioqKioqKioqKgogCkBAIC0xMDIwLDMgKzEwNDksMTkgQEAgRmllbGQgYWNjZXNzIGlz IHByb3ZpZGVkIHNlcGFyYXRlbHkgZm9yIGJvdGggbHZhbHVlcyBhbmQgcnZhbHVlcy4KICAgICAg IFBUUltJTkRFWF0KIAogICAgaW4gQyAob3IsIGluZGVlZCwgdG8gYGBQVFIgKyBJTkRFWGBgKS4K KworLi4gZnVuY3Rpb246OiBnY2Nfaml0X2x2YWx1ZSAqXAorICAgICAgICAgICAgICBnY2Nfaml0 X2NvbnRleHRfbmV3X3ZlY3Rvcl9hY2Nlc3MgKGdjY19qaXRfY29udGV4dCAqY3R4dCxcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NjX2ppdF9sb2Nh dGlvbiAqbG9jLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnY2Nfaml0X3J2YWx1ZSAqdmVjdG9yLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3J2YWx1ZSAqaW5kZXgpCisKKyAgIEdpdmVu IGFuIHJ2YWx1ZSBvZiB2ZWN0b3IgdHlwZSBgYFQgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3Np emVfXyAoU0laRSkpKWBgLCBnZXQgdGhlIGVsZW1lbnQgYFRgIGF0CisgICB0aGUgZ2l2ZW4gaW5k ZXguCisgICBBbmFsb2dvdXMgdG86CisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisKKyAgICAgIFZF Q1RPUltJTkRFWF0KKworICAgaW4gQy4KZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3Mv ZnVuY3Rpb25zLnJzdCBiL2djYy9qaXQvZG9jcy90b3BpY3MvZnVuY3Rpb25zLnJzdAppbmRleCBj ZjVjYjcxNmRhZi4uZTliNzdmZGI4OTIgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3Mv ZnVuY3Rpb25zLnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2Z1bmN0aW9ucy5yc3QKQEAg LTE0MCw2ICsxNDAsMjUgQEAgRnVuY3Rpb25zCiAgICAgICB1c2VzIHN1Y2ggYSBwYXJhbWV0ZXIg d2lsbCBsZWFkIHRvIGFuIGVycm9yIGJlaW5nIGVtaXR0ZWQgd2l0aGluCiAgICAgICB0aGUgY29u dGV4dC4KIAorLi4gZnVuY3Rpb246OiAgZ2NjX2ppdF9mdW5jdGlvbiAqXAorICAgICAgICAgICAg ICAgZ2NjX2ppdF9jb250ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCisKKyAgIEdldCB0aGUgOnR5cGU6 YGdjY19qaXRfZnVuY3Rpb25gIGZvciB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gd2l0aCB0aGUKKyAg IGdpdmVuIG5hbWUuICBGb3IgZXhhbXBsZToKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAg ICAgZ2NjX2ppdF9mdW5jdGlvbiAqZm4KKyAgICAgICAgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3Rh cmdldF9idWlsdGluX2Z1bmN0aW9uIChjdHh0LCAiX19idWlsdGluX2lhMzJfcG11bGRxNTEyX21h c2siKTsKKworICAgLi4gbm90ZTo6IER1ZSB0byB0ZWNobmljYWwgbGltaXRhdGlvbnMgd2l0aCBo b3cgbGliZ2Njaml0IGludGVyYWN0cyB3aXRoCisgICAgICB0aGUgaW5zaWRlcyBvZiBHQ0MsIG5v dCBhbGwgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQuICBNb3JlCisgICAgICBwcmVj aXNlbHksIG5vdCBhbGwgdHlwZXMgYXJlIHN1cHBvcnRlZCBmb3IgcGFyYW1ldGVycyBvZiBidWls dC1pbgorICAgICAgZnVuY3Rpb25zIGZyb20gbGliZ2Njaml0LiAgQXR0ZW1wdHMgdG8gZ2V0IGEg YnVpbHQtaW4gZnVuY3Rpb24gdGhhdAorICAgICAgdXNlcyBzdWNoIGEgcGFyYW1ldGVyIHdpbGwg bGVhZCB0byBhbiBlcnJvciBiZWluZyBlbWl0dGVkIHdpdGhpbgorICAgICAgdGhlIGNvbnRleHQu CisKIC4uIGZ1bmN0aW9uOjogIGdjY19qaXRfb2JqZWN0ICpcCiAgICAgICAgICAgICAgICBnY2Nf aml0X2Z1bmN0aW9uX2FzX29iamVjdCAoZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYykKIApkaWZmIC0t Z2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QgYi9nY2Mvaml0L2RvY3MvdG9waWNz L3R5cGVzLnJzdAppbmRleCBmNWYyYWFjMWYwYy4uZTdkYjAwNzc5Y2MgMTAwNjQ0Ci0tLSBhL2dj Yy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvdHlw ZXMucnN0CkBAIC0xMjksNiArMTI5LDggQEAgU3RhbmRhcmQgdHlwZXMKICAgICAgICAtIEM5OSdz IGBgX0NvbXBsZXggZG91YmxlYGAKICAgICAgKiAtIDpjOmRhdGE6YEdDQ19KSVRfVFlQRV9DT01Q TEVYX0xPTkdfRE9VQkxFYAogICAgICAgIC0gQzk5J3MgYGBfQ29tcGxleCBsb25nIGRvdWJsZWBg CisgICAgICogLSA6YzpkYXRhOmBHQ0NfSklUX1RZUEVfQkZMT0FUMTZgCisgICAgICAgLQogCiAu LiBmdW5jdGlvbjo6IGdjY19qaXRfdHlwZSAqXAogICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRl eHRfZ2V0X2ludF90eXBlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKZGlmZiAtLWdpdCBhL2dj Yy9qaXQvZHVtbXktZnJvbnRlbmQuY2MgYi9nY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjCmluZGV4 IDhiNzI5NGUzMmNjLi5jZjdlZjY2ZDViOCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kdW1teS1mcm9u dGVuZC5jYworKysgYi9nY2Mvaml0L2R1bW15LWZyb250ZW5kLmNjCkBAIC0yMCw2ICsyMCw3IEBA IGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5j bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAic3lzdGVtLmgiCiAjaW5jbHVkZSAiY29yZXR5cGVz LmgiCisjaW5jbHVkZSAidGFyZ2V0LmgiCiAjaW5jbHVkZSAiaml0LXBsYXliYWNrLmgiCiAjaW5j bHVkZSAic3Rvci1sYXlvdXQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgpAQCAtMjksOCArMzAsMTQg QEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNp bmNsdWRlICJvcHRpb25zLmgiCiAjaW5jbHVkZSAic3RyaW5ncG9vbC5oIgogI2luY2x1ZGUgImF0 dHJpYnMuaCIKKyNpbmNsdWRlICJqaXQtcmVjb3JkaW5nLmgiCisjaW5jbHVkZSAicHJpbnQtdHJl ZS5oIgogCiAjaW5jbHVkZSA8bXBmci5oPgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5j bHVkZSA8c3RyaW5nPgorCit1c2luZyBuYW1lc3BhY2UgZ2NjOjpqaXQ7CiAKIC8qIEF0dHJpYnV0 ZSBoYW5kbGluZy4gICovCiAKQEAgLTg2LDYgKzkzLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg YXR0cmlidXRlX3NwZWM6OmV4Y2x1c2lvbnMgYXR0cl9jb25zdF9wdXJlX2V4Y2x1c2lvbnNbXSA9 CiAgIEFUVFJfRVhDTCAoTlVMTCwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKIH07CiAKK2hhc2hfbWFw PG5vZnJlZV9zdHJpbmdfaGFzaCwgdHJlZT4gdGFyZ2V0X2J1aWx0aW5ze307CitzdGQ6OnVub3Jk ZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHJlY29yZGluZzo6ZnVuY3Rpb25fdHlwZSo+IHRhcmdldF9m dW5jdGlvbl90eXBlcwore307CityZWNvcmRpbmc6OmNvbnRleHQgdGFyZ2V0X2J1aWx0aW5zX2N0 eHR7TlVMTH07CisKIC8qIFRhYmxlIG9mIG1hY2hpbmUtaW5kZXBlbmRlbnQgYXR0cmlidXRlcyBz dXBwb3J0ZWQgaW4gbGliZ2Njaml0LiAgKi8KIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfc3BlYyBq aXRfYXR0cmlidXRlX3RhYmxlW10gPQogewpAQCAtNTk0LDYgKzYwNiw3IEBAIGppdF9sYW5naG9v a19pbml0ICh2b2lkKQogCiAgIGJ1aWxkX2NvbW1vbl90cmVlX25vZGVzIChmYWxzZSk7CiAKKyAg dGFyZ2V0X2J1aWx0aW5zLmVtcHR5ICgpOwogICBidWlsZF9jb21tb25fYnVpbHRpbl9ub2RlcyAo KTsKIAogICAvKiBUaGUgZGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0aW5nIHBvaW50IG51bWJl cnMuICBUaGlzIGlzIHVzZWQKQEAgLTYwMSw2ICs2MTQsOCBAQCBqaXRfbGFuZ2hvb2tfaW5pdCAo dm9pZCkKICAgICAgZXZlbnR1YWxseSBiZSBjb250cm9sbGFibGUgYnkgYSBjb21tYW5kIGxpbmUg b3B0aW9uLiAgKi8KICAgbXBmcl9zZXRfZGVmYXVsdF9wcmVjICgyNTYpOwogCisgIHRhcmdldG0u aW5pdF9idWlsdGlucyAoKTsKKwogICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjY4LDExICs2ODMs MTk3IEBAIGppdF9sYW5naG9va190eXBlX2Zvcl9tb2RlIChtYWNoaW5lX21vZGUgbW9kZSwgaW50 IHVuc2lnbmVkcCkKICAgcmV0dXJuIE5VTEw7CiB9CiAKLS8qIFJlY29yZCBhIGJ1aWx0aW4gZnVu Y3Rpb24uICBXZSBqdXN0IGlnbm9yZSBidWlsdGluIGZ1bmN0aW9ucy4gICovCityZWNvcmRpbmc6 OnR5cGUqIHRyZWVfdHlwZV90b19qaXRfdHlwZSAodHJlZSB0eXBlKQoreworICBpZiAoVFJFRV9D T0RFICh0eXBlKSA9PSBWRUNUT1JfVFlQRSkKKyAgeworICAgIHRyZWUgaW5uZXJfdHlwZSA9IFRS RUVfVFlQRSAodHlwZSk7CisgICAgcmVjb3JkaW5nOjp0eXBlKiBlbGVtZW50X3R5cGUgPSB0cmVl X3R5cGVfdG9faml0X3R5cGUgKGlubmVyX3R5cGUpOworICAgIHBvbHlfdWludDY0IHNpemUgPSBU WVBFX1ZFQ1RPUl9TVUJQQVJUUyAodHlwZSk7CisgICAgbG9uZyBjb25zdGFudF9zaXplID0gc2l6 ZS50b19jb25zdGFudCAoKTsKKyAgICBpZiAoZWxlbWVudF90eXBlICE9IE5VTEwpCisgICAgICBy ZXR1cm4gZWxlbWVudF90eXBlLT5nZXRfdmVjdG9yIChjb25zdGFudF9zaXplKTsKKyAgICByZXR1 cm4gTlVMTDsKKyAgfQorICBpZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBSRUZFUkVOQ0VfVFlQRSkK KyAgICAvLyBGb3IgX19idWlsdGluX21zX3ZhX3N0YXJ0LgorICAgIC8vIEZJWE1FOiB3cm9uZyB0 eXBlLgorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFy Z2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfVk9JRCk7CisgIGlm IChUUkVFX0NPREUgKHR5cGUpID09IFJFQ09SRF9UWVBFKQorICAgIC8vIEZvciBfX2J1aWx0aW5f c3lzdl92YV9jb3B5LgorICAgIC8vIEZJWE1FOiB3cm9uZyB0eXBlLgorICAgIHJldHVybiBuZXcg cmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJ CQkJCSAgICAgICBHQ0NfSklUX1RZUEVfVk9JRCk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVN X0ZMT0FUTl9OWF9UWVBFUzsgaSsrKQorICAgIGlmICh0eXBlID09IEZMT0FUTl9OWF9UWVBFX05P REUgKGkpKQorICAgICAgLy8gRklYTUU6IHdyb25nIHR5cGUuCisgICAgICByZXR1cm4gbmV3IHJl Y29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJ CQkJIEdDQ19KSVRfVFlQRV9WT0lEKTsKKyAgaWYgKHR5cGUgPT0gdm9pZF90eXBlX25vZGUpCisg ICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVp bHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9WT0lEKTsKKyAgZWxzZSBpZiAo dHlwZSA9PSBwdHJfdHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRv X29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklU X1RZUEVfVk9JRF9QVFIpOworICBlbHNlIGlmICh0eXBlID09IGNvbnN0X3B0cl90eXBlX25vZGUp CisgIHsKKyAgICAvLyBWb2lkIGNvbnN0IHB0ci4KKyAgICByZWNvcmRpbmc6OnR5cGUqIHJlc3Vs dCA9CisgICAgICBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFyZ2V0X2J1 aWx0aW5zX2N0eHQsCisJCQkJCSAgR0NDX0pJVF9UWVBFX1ZPSURfUFRSKTsKKyAgICByZXR1cm4g bmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfY29uc3QgKHJlc3VsdCk7CisgIH0KKyAgZWxz ZSBpZiAodHlwZSA9PSB1bnNpZ25lZF90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRp bmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAg ICAgIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9JTlQpOworICBlbHNlIGlmICh0eXBlID09IGxvbmdf dW5zaWduZWRfdHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29m X2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZ UEVfVU5TSUdORURfTE9ORyk7CisgIGVsc2UgaWYgKHR5cGUgPT0gaW50ZWdlcl90eXBlX25vZGUp CisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRf YnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9JTlQpOworICBlbHNlIGlm ICh0eXBlID09IGxvbmdfaW50ZWdlcl90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRp bmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAg ICAgIEdDQ19KSVRfVFlQRV9MT05HKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBsb25nX2xvbmdfaW50 ZWdlcl90eXBlX25vZGUpCisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0 X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9M T05HX0xPTkcpOworICBlbHNlIGlmICh0eXBlID09IHNpZ25lZF9jaGFyX3R5cGVfbm9kZSkKKyAg ICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWls dGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX1NJR05FRF9DSEFSKTsKKyAgZWxz ZSBpZiAodHlwZSA9PSBjaGFyX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6 bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAg R0NDX0pJVF9UWVBFX0NIQVIpOworICBlbHNlIGlmICh0eXBlID09IHVuc2lnbmVkX2ludFFJX3R5 cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAo JnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX1VJTlQ4X1Qp OworICBlbHNlIGlmICh0eXBlID09IHNob3J0X2ludGVnZXJfdHlwZV9ub2RlKQorICAgIHJldHVy biBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0 eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfU0hPUlQpOworICBlbHNlIGlmICh0eXBlID09 IHNob3J0X3Vuc2lnbmVkX3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVt ZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0ND X0pJVF9UWVBFX1VOU0lHTkVEX1NIT1JUKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBjb21wbGV4X2Zs b2F0X3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRf dHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX0NP TVBMRVhfRkxPQVQpOworICBlbHNlIGlmICh0eXBlID09IGNvbXBsZXhfZG91YmxlX3R5cGVfbm9k ZSkKKyAgICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdl dF9idWlsdGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxF KTsKKyAgZWxzZSBpZiAodHlwZSA9PSBjb21wbGV4X2xvbmdfZG91YmxlX3R5cGVfbm9kZSkKKyAg ICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWls dGluc19jdHh0LAorCQkJCQkgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUpOwor ICBlbHNlIGlmICh0eXBlID09IGZsb2F0X3R5cGVfbm9kZSkKKyAgICByZXR1cm4gbmV3IHJlY29y ZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWlsdGluc19jdHh0LAorCQkJCQkg ICAgICAgR0NDX0pJVF9UWVBFX0ZMT0FUKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBkb3VibGVfdHlw ZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlICgm dGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfRE9VQkxFKTsK KyAgZWxzZSBpZiAodHlwZSA9PSBsb25nX2RvdWJsZV90eXBlX25vZGUpCisgICAgcmV0dXJuIG5l dyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwK KwkJCQkJICAgICAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSk7CisgIGVsc2UgaWYgKHR5cGUg PT0gYmZsb2F0MTZfdHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRv X29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklU X1RZUEVfQkZMT0FUMTYpOworICBlbHNlIGlmICh0eXBlID09IGRmbG9hdDEyOF90eXBlX25vZGUp CisgICAgLy8gRklYTUU6IHdyb25nIHR5cGUuCisgICAgcmV0dXJuIG5ldyByZWNvcmRpbmc6Om1l bWVudG9fb2ZfZ2V0X3R5cGUgKCZ0YXJnZXRfYnVpbHRpbnNfY3R4dCwKKwkJCQkJICAgICAgIEdD Q19KSVRfVFlQRV9WT0lEKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBsb25nX2xvbmdfdW5zaWduZWRf dHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBl ICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfVU5TSUdO RURfTE9OR19MT05HKTsKKyAgZWxzZSBpZiAodHlwZSA9PSBib29sZWFuX3R5cGVfbm9kZSkKKyAg ICByZXR1cm4gbmV3IHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZSAoJnRhcmdldF9idWls dGluc19jdHh0LAorCQkJCQkgICAgICAgR0NDX0pJVF9UWVBFX0JPT0wpOworICBlbHNlIGlmICh0 eXBlID09IHNpemVfdHlwZV9ub2RlKQorICAgIHJldHVybiBuZXcgcmVjb3JkaW5nOjptZW1lbnRv X29mX2dldF90eXBlICgmdGFyZ2V0X2J1aWx0aW5zX2N0eHQsCisJCQkJCSAgICAgICBHQ0NfSklU X1RZUEVfU0laRV9UKTsKKyAgZWxzZSBpZiAoVFJFRV9DT0RFICh0eXBlKSA9PSBQT0lOVEVSX1RZ UEUpCisgIHsKKyAgICB0cmVlIGlubmVyX3R5cGUgPSBUUkVFX1RZUEUgKHR5cGUpOworICAgIHJl Y29yZGluZzo6dHlwZSogZWxlbWVudF90eXBlID0gdHJlZV90eXBlX3RvX2ppdF90eXBlIChpbm5l cl90eXBlKTsKKyAgICByZXR1cm4gZWxlbWVudF90eXBlLT5nZXRfcG9pbnRlciAoKTsKKyAgfQor ICBlbHNlCisgIHsKKyAgICAvLyBBdHRlbXB0IHRvIGZpbmQgYW4gdW5xdWFsaWZpZWQgdHlwZSB3 aGVuIHRoZSBjdXJyZW50IHR5cGUgaGFzIHF1YWxpZmllcnMuCisgICAgdHJlZSB0cCA9IFRZUEVf TUFJTl9WQVJJQU5UICh0eXBlKTsKKyAgICBmb3IgKCA7IHRwICE9IE5VTEwgOyB0cCA9IFRZUEVf TkVYVF9WQVJJQU5UICh0cCkpCisgICAgeworICAgICAgaWYgKFRZUEVfUVVBTFMgKHRwKSA9PSAw ICYmIHR5cGUgIT0gdHApCisgICAgICB7CisJcmVjb3JkaW5nOjp0eXBlKiByZXN1bHQgPSB0cmVl X3R5cGVfdG9faml0X3R5cGUgKHRwKTsKKwlpZiAocmVzdWx0ICE9IE5VTEwpCisJeworCSAgaWYg KFRZUEVfUkVBRE9OTFkgKHRwKSkKKwkgICAgcmVzdWx0ID0gbmV3IHJlY29yZGluZzo6bWVtZW50 b19vZl9nZXRfY29uc3QgKHJlc3VsdCk7CisJICBpZiAoVFlQRV9WT0xBVElMRSAodHApKQorCSAg ICByZXN1bHQgPSBuZXcgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF92b2xhdGlsZSAocmVzdWx0 KTsKKwkgIHJldHVybiByZXN1bHQ7CisJfQorICAgICAgfQorICAgIH0KKworICAgIGZwcmludGYg KHN0ZGVyciwgIlVua25vd24gdHlwZTpcbiIpOworICAgIGRlYnVnX3RyZWUgKHR5cGUpOworICAg IGFib3J0ICgpOworICB9CisKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJlY29yZCBhIGJ1aWx0 aW4gZnVuY3Rpb24uICBXZSBzYXZlIHRoZWlyIHR5cGVzIHRvIGJlIGFibGUgdG8gY2hlY2sgdHlw ZXMKKyAgIGluIHJlY29yZGluZyBhbmQgZm9yIHJlZmxlY3Rpb24uICAqLwogCiBzdGF0aWMgdHJl ZQogaml0X2xhbmdob29rX2J1aWx0aW5fZnVuY3Rpb24gKHRyZWUgZGVjbCkKIHsKKyAgaWYgKFRS RUVfQ09ERSAoZGVjbCkgPT0gRlVOQ1RJT05fREVDTCkKKyAgeworICAgIGNvbnN0IGNoYXIqIG5h bWUgPSBJREVOVElGSUVSX1BPSU5URVIgKERFQ0xfTkFNRSAoZGVjbCkpOworICAgIHRhcmdldF9i dWlsdGlucy5wdXQgKG5hbWUsIGRlY2wpOworCisgICAgc3RkOjpzdHJpbmcgc3RyaW5nX25hbWUg KG5hbWUpOworICAgIGlmICh0YXJnZXRfZnVuY3Rpb25fdHlwZXMuY291bnQgKHN0cmluZ19uYW1l KSA9PSAwKQorICAgIHsKKyAgICAgIHRyZWUgZnVuY3Rpb25fdHlwZSA9IFRSRUVfVFlQRSAoZGVj bCk7CisgICAgICB0cmVlIGFyZyA9IFRZUEVfQVJHX1RZUEVTIChmdW5jdGlvbl90eXBlKTsKKyAg ICAgIGJvb2wgaXNfdmFyaWFkaWMgPSBmYWxzZTsKKworICAgICAgYXV0b192ZWMgPHJlY29yZGlu Zzo6dHlwZSAqPiBwYXJhbV90eXBlczsKKworICAgICAgd2hpbGUgKGFyZyAhPSB2b2lkX2xpc3Rf bm9kZSkKKyAgICAgIHsKKwlpZiAoYXJnID09IE5VTEwpCisJeworCSAgaXNfdmFyaWFkaWMgPSB0 cnVlOworCSAgYnJlYWs7CisJfQorCWlmIChhcmcgIT0gdm9pZF9saXN0X25vZGUpCisJeworCSAg cmVjb3JkaW5nOjp0eXBlKiBhcmdfdHlwZSA9IHRyZWVfdHlwZV90b19qaXRfdHlwZSAoVFJFRV9W QUxVRSAoYXJnKSk7CisJICBpZiAoYXJnX3R5cGUgPT0gTlVMTCkKKwkgICAgcmV0dXJuIGRlY2w7 CisJICBwYXJhbV90eXBlcy5zYWZlX3B1c2ggKGFyZ190eXBlKTsKKwl9CisJYXJnID0gVFJFRV9D SEFJTiAoYXJnKTsKKyAgICAgIH0KKworICAgICAgdHJlZSByZXN1bHRfdHlwZSA9IFRSRUVfVFlQ RSAoZnVuY3Rpb25fdHlwZSk7CisgICAgICByZWNvcmRpbmc6OnR5cGUqIHJldHVybl90eXBlID0g dHJlZV90eXBlX3RvX2ppdF90eXBlIChyZXN1bHRfdHlwZSk7CisKKyAgICAgIGlmIChyZXR1cm5f dHlwZSA9PSBOVUxMKQorCXJldHVybiBkZWNsOworCisgICAgICByZWNvcmRpbmc6OmZ1bmN0aW9u X3R5cGUqIGZ1bmNfdHlwZSA9CisJbmV3IHJlY29yZGluZzo6ZnVuY3Rpb25fdHlwZSAoJnRhcmdl dF9idWlsdGluc19jdHh0LCByZXR1cm5fdHlwZSwKKwkJCQkgICAgICBwYXJhbV90eXBlcy5sZW5n dGggKCksCisJCQkJICAgICAgcGFyYW1fdHlwZXMuYWRkcmVzcyAoKSwgaXNfdmFyaWFkaWMsCisJ CQkJICAgICAgZmFsc2UpOworCisgICAgICB0YXJnZXRfZnVuY3Rpb25fdHlwZXNbc3RyaW5nX25h bWVdID0gZnVuY190eXBlOworICAgIH0KKyAgfQogICByZXR1cm4gZGVjbDsKIH0KIApkaWZmIC0t Z2l0IGEvZ2NjL2ppdC9qaXQtYnVpbHRpbnMuY2MgYi9nY2Mvaml0L2ppdC1idWlsdGlucy5jYwpp bmRleCBmZGQwNzM5Nzg5ZC4uNjM2MjhiZWFjODEgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LWJ1 aWx0aW5zLmNjCisrKyBiL2djYy9qaXQvaml0LWJ1aWx0aW5zLmNjCkBAIC0yMTUsNyArMjE1LDgg QEAgYnVpbHRpbnNfbWFuYWdlcjo6bWFrZV9idWlsdGluX2Z1bmN0aW9uIChlbnVtIGJ1aWx0X2lu X2Z1bmN0aW9uIGJ1aWx0aW5faWQpCiAJCQkgICAgIHBhcmFtX3R5cGVzLmxlbmd0aCAoKSwKIAkJ CSAgICAgcGFyYW1zLAogCQkJICAgICBmdW5jX3R5cGUtPmlzX3ZhcmlhZGljICgpLAotCQkJICAg ICBidWlsdGluX2lkKTsKKwkJCSAgICAgYnVpbHRpbl9pZCwKKwkJCSAgICAgZmFsc2UpOwogICBk ZWxldGVbXSBwYXJhbXM7CiAKICAgLyogUFIvNjQwMjAgLSBJZiB0aGUgY2xpZW50IGNvZGUgaXMg dXNpbmcgYnVpbHRpbiBjb3Mgb3Igc2luLApAQCAtNTgyLDcgKzU4Myw4IEBAIGJ1aWx0aW5zX21h bmFnZXI6Om1ha2VfZm5fdHlwZSAoZW51bSBqaXRfYnVpbHRpbl90eXBlLAogICByZXN1bHQgPSBt X2N0eHQtPm5ld19mdW5jdGlvbl90eXBlIChyZXR1cm5fdHlwZSwKIAkJCQkgICAgICBudW1fYXJn cywKIAkJCQkgICAgICBwYXJhbV90eXBlcywKLQkJCQkgICAgICBpc192YXJpYWRpYyk7CisJCQkJ ICAgICAgaXNfdmFyaWFkaWMsCisJCQkJICAgICAgZmFsc2UpOwogCiAgZXJyb3I6CiAgIGRlbGV0 ZVtdIHBhcmFtX3R5cGVzOwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtY29tbW9uLmggYi9nY2Mv aml0L2ppdC1jb21tb24uaAppbmRleCA4MGMxNjE4ZGE5Ni4uOTgzYzkxOTBkNDQgMTAwNjQ0Ci0t LSBhL2djYy9qaXQvaml0LWNvbW1vbi5oCisrKyBiL2djYy9qaXQvaml0LWNvbW1vbi5oCkBAIC0z Niw3ICszNiw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBu b3Qgc2VlCiAjZW5kaWYKICNlbmRpZgogCi1jb25zdCBpbnQgTlVNX0dDQ19KSVRfVFlQRVMgPSBH Q0NfSklUX1RZUEVfSU5UMTI4X1QgKyAxOworY29uc3QgaW50IE5VTV9HQ0NfSklUX1RZUEVTID0g R0NDX0pJVF9UWVBFX0JGTE9BVDE2ICsgMTsKIAogLyogVGhpcyBjb21tZW50IGlzIGluY2x1ZGVk IGJ5IHRoZSBkb2NzLgogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYyBiL2dj Yy9qaXQvaml0LXBsYXliYWNrLmNjCmluZGV4IGUwNmYxNjFhYWQ5Li4yMDliNGNjYTE5MSAxMDA2 NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJh Y2suY2MKQEAgLTI4MCw2ICsyODAsOCBAQCBnZXRfdHJlZV9ub2RlX2Zvcl90eXBlIChlbnVtIGdj Y19qaXRfdHlwZXMgdHlwZV8pCiAKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9GTE9BVDoKICAgICAg IHJldHVybiBmbG9hdF90eXBlX25vZGU7CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfQkZMT0FUMTY6 CisgICAgICByZXR1cm4gYmZsb2F0MTZfdHlwZV9ub2RlOwogICAgIGNhc2UgR0NDX0pJVF9UWVBF X0RPVUJMRToKICAgICAgIHJldHVybiBkb3VibGVfdHlwZV9ub2RlOwogICAgIGNhc2UgR0NDX0pJ VF9UWVBFX0xPTkdfRE9VQkxFOgpAQCAtNTA5LDcgKzUxMSw4IEBAIG5ld19mdW5jdGlvbiAobG9j YXRpb24gKmxvYywKIAkgICAgICBjb25zdCBjaGFyICpuYW1lLAogCSAgICAgIGNvbnN0IGF1dG9f dmVjPHBhcmFtICo+ICpwYXJhbXMsCiAJICAgICAgaW50IGlzX3ZhcmlhZGljLAotCSAgICAgIGVu dW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCkKKwkgICAgICBlbnVtIGJ1aWx0X2luX2Z1 bmN0aW9uIGJ1aWx0aW5faWQsCisJICAgICAgaW50IGlzX3RhcmdldF9idWlsdGluKQogewogICBp bnQgaTsKICAgcGFyYW0gKnBhcmFtOwpAQCAtNTQzLDYgKzU0NiwxNCBAQCBuZXdfZnVuY3Rpb24g KGxvY2F0aW9uICpsb2MsCiAgIERFQ0xfUkVTVUxUIChmbmRlY2wpID0gcmVzZGVjbDsKICAgREVD TF9DT05URVhUIChyZXNkZWNsKSA9IGZuZGVjbDsKIAorICBpZiAoaXNfdGFyZ2V0X2J1aWx0aW4p CisgIHsKKyAgICB0cmVlICpkZWNsID0gdGFyZ2V0X2J1aWx0aW5zLmdldCAobmFtZSk7CisgICAg aWYgKGRlY2wgIT0gTlVMTCkKKyAgICAgIGZuZGVjbCA9ICpkZWNsOworICAgIGVsc2UKKyAgICAg IGFkZF9lcnJvciAobG9jLCAiY2Fubm90IGZpbmQgdGFyZ2V0IGJ1aWx0aW4gJXMiLCBuYW1lKTsK KyAgfQogICBpZiAoYnVpbHRpbl9pZCkKICAgICB7CiAgICAgICBnY2NfYXNzZXJ0IChsb2MgPT0g TlVMTCk7CkBAIC0xMDA3LDEwICsxMDE4LDMxIEBAIHBsYXliYWNrOjpjb250ZXh0OjpuZXdfcnZh bHVlX2Zyb21fdmVjdG9yIChsb2NhdGlvbiAqLAogICB2ZWNfYWxsb2MgKHYsIGVsZW1lbnRzLmxl bmd0aCAoKSk7CiAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGggKCk7 ICsraSkKICAgICBDT05TVFJVQ1RPUl9BUFBFTkRfRUxUICh2LCBOVUxMX1RSRUUsIGVsZW1lbnRz W2ldLT5hc190cmVlICgpKTsKLSAgdHJlZSB0X2N0b3IgPSBidWlsZF9jb25zdHJ1Y3RvciAodHlw ZS0+YXNfdHJlZSAoKSwgdik7CisgIHRyZWUgdF9jdG9yOworICB0X2N0b3IgPSBidWlsZF9jb25z dHJ1Y3RvciAodHlwZS0+YXNfdHJlZSAoKSwgdik7CiAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlz LCB0X2N0b3IpOwogfQogCisvKiBDb25zdHJ1Y3QgYSBwbGF5YmFjazo6cnZhbHVlIGluc3RhbmNl ICh3cmFwcGluZyBhIHRyZWUpIGZvciBhCisgICB2ZWN0b3IgcGVybS4gICovCisKK3BsYXliYWNr OjpydmFsdWUgKgorcGxheWJhY2s6OmNvbnRleHQ6Om5ld19ydmFsdWVfdmVjdG9yX3Blcm0gKGxv Y2F0aW9uICpsb2MsCisJCQkJCSAgIHJ2YWx1ZSogZWxlbWVudHMxLAorCQkJCQkgICBydmFsdWUq IGVsZW1lbnRzMiwKKwkJCQkJICAgcnZhbHVlKiBtYXNrKQoreworICB0cmVlIHRfZWxlbWVudHMx ID0gZWxlbWVudHMxLT5hc190cmVlICgpOworICB0cmVlIHRfZWxlbWVudHMyID0gZWxlbWVudHMy LT5hc190cmVlICgpOworICB0cmVlIHRfbWFzayA9IG1hc2stPmFzX3RyZWUgKCk7CisKKyAgdHJl ZSB0X3ZlY3Rvcl9wZXJtID0gYnVpbGQzIChWRUNfUEVSTV9FWFBSLCBUUkVFX1RZUEUgKHRfZWxl bWVudHMxKSwKKwkJCSAgICAgICB0X2VsZW1lbnRzMSwgdF9lbGVtZW50czIsIHRfbWFzayk7Cisg IGlmIChsb2MpCisgICAgc2V0X3RyZWVfbG9jYXRpb24gKHRfdmVjdG9yX3Blcm0sIGxvYyk7Cisg IHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCB0X3ZlY3Rvcl9wZXJtKTsKK30KKwogLyogQ29lcmNl IGEgdHJlZSBleHByZXNzaW9uIGludG8gYSBib29sZWFuIHRyZWUgZXhwcmVzc2lvbi4gICovCiAK IHRyZWUKQEAgLTE1MjcsNiArMTU1OSwxMzYgQEAgbmV3X2FycmF5X2FjY2VzcyAobG9jYXRpb24g KmxvYywKICAgICB9CiB9CiAKKy8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbWUgZnJvbSBj LWNvbW1vbi5oLiAgKi8KKy8qIExpa2UgY19tYXJrX2FkZHJlc3NhYmxlIGJ1dCBkb24ndCBjaGVj ayByZWdpc3RlciBxdWFsaWZpZXIuICAqLwordm9pZAorY29tbW9uX21hcmtfYWRkcmVzc2FibGVf dmVjICh0cmVlIHQpCit7CisgIHdoaWxlIChoYW5kbGVkX2NvbXBvbmVudF9wICh0KSB8fCBUUkVF X0NPREUgKHQpID09IENfTUFZQkVfQ09OU1RfRVhQUikKKyAgICB7CisgICAgICB0ID0gVFJFRV9P UEVSQU5EICh0LCAwKTsKKyAgICB9CisgIGlmICghVkFSX1AgKHQpCisgICAgICAmJiBUUkVFX0NP REUgKHQpICE9IFBBUk1fREVDTAorICAgICAgJiYgVFJFRV9DT0RFICh0KSAhPSBDT01QT1VORF9M SVRFUkFMX0VYUFIKKyAgICAgICYmIFRSRUVfQ09ERSAodCkgIT0gVEFSR0VUX0VYUFIpCisgICAg cmV0dXJuOworICBpZiAoIVZBUl9QICh0KSB8fCAhREVDTF9IQVJEX1JFR0lTVEVSICh0KSkKKyAg ICBUUkVFX0FERFJFU1NBQkxFICh0KSA9IDE7CisgIGlmIChUUkVFX0NPREUgKHQpID09IENPTVBP VU5EX0xJVEVSQUxfRVhQUikKKyAgICBUUkVFX0FERFJFU1NBQkxFIChDT01QT1VORF9MSVRFUkFM X0VYUFJfREVDTCAodCkpID0gMTsKKyAgZWxzZSBpZiAoVFJFRV9DT0RFICh0KSA9PSBUQVJHRVRf RVhQUikKKyAgICBUUkVFX0FERFJFU1NBQkxFIChUQVJHRVRfRVhQUl9TTE9UICh0KSkgPSAxOwor fQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBUWVBFIGlzIGEgdmVjdG9yIHR5cGUgdGhhdCBzaG91bGQg YmUgc3ViamVjdCB0byB0aGUgR05VCisgICB2ZWN0b3IgZXh0ZW5zaW9ucyAoYXMgb3Bwb3NlZCB0 byBhIHZlY3RvciB0eXBlIHRoYXQgaXMgdXNlZCBvbmx5IGZvcgorICAgdGhlIHB1cnBvc2VzIG9m IGRlZmluaW5nIHRhcmdldC1zcGVjaWZpYyBidWlsdC1pbiBmdW5jdGlvbnMpLiAgKi8KKworaW5s aW5lIGJvb2wKK2dudV92ZWN0b3JfdHlwZV9wIChjb25zdF90cmVlIHR5cGUpCit7CisgIHJldHVy biBUUkVFX0NPREUgKHR5cGUpID09IFZFQ1RPUl9UWVBFICYmICFUWVBFX0lORElWSVNJQkxFX1Ag KHR5cGUpOworfQorCisvKiBSZXR1cm4gbm9uemVybyBpZiBSRUYgaXMgYW4gbHZhbHVlIHZhbGlk IGZvciB0aGlzIGxhbmd1YWdlLgorICAgTHZhbHVlcyBjYW4gYmUgYXNzaWduZWQsIHVubGVzcyB0 aGVpciB0eXBlIGhhcyBUWVBFX1JFQURPTkxZLgorICAgTHZhbHVlcyBjYW4gaGF2ZSB0aGVpciBh ZGRyZXNzIHRha2VuLCB1bmxlc3MgdGhleSBoYXZlIENfREVDTF9SRUdJU1RFUi4gICovCisKK2Jv b2wKK2x2YWx1ZV9wIChjb25zdF90cmVlIHJlZikKK3sKKyAgY29uc3QgZW51bSB0cmVlX2NvZGUg Y29kZSA9IFRSRUVfQ09ERSAocmVmKTsKKworICBzd2l0Y2ggKGNvZGUpCisgICAgeworICAgIGNh c2UgUkVBTFBBUlRfRVhQUjoKKyAgICBjYXNlIElNQUdQQVJUX0VYUFI6CisgICAgY2FzZSBDT01Q T05FTlRfUkVGOgorICAgICAgcmV0dXJuIGx2YWx1ZV9wIChUUkVFX09QRVJBTkQgKHJlZiwgMCkp OworCisgICAgY2FzZSBDX01BWUJFX0NPTlNUX0VYUFI6CisgICAgICByZXR1cm4gbHZhbHVlX3Ag KFRSRUVfT1BFUkFORCAocmVmLCAxKSk7CisKKyAgICBjYXNlIENPTVBPVU5EX0xJVEVSQUxfRVhQ UjoKKyAgICBjYXNlIFNUUklOR19DU1Q6CisgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2Ug TUVNX1JFRjoKKyAgICBjYXNlIFRBUkdFVF9NRU1fUkVGOgorICAgICAgLyogTUVNX1JFRnMgY2Fu IGFwcGVhciBmcm9tIC1mZ2ltcGxlIHBhcnNpbmcgb3IgZm9sZGluZywgc28gYWxsb3cgdGhlbQor CSBoZXJlIGFzIHdlbGwuICAqLworICAgIGNhc2UgSU5ESVJFQ1RfUkVGOgorICAgIGNhc2UgQVJS QVlfUkVGOgorICAgIGNhc2UgVkFSX0RFQ0w6CisgICAgY2FzZSBQQVJNX0RFQ0w6CisgICAgY2Fz ZSBSRVNVTFRfREVDTDoKKyAgICBjYXNlIEVSUk9SX01BUks6CisgICAgICByZXR1cm4gKFRSRUVf Q09ERSAoVFJFRV9UWVBFIChyZWYpKSAhPSBGVU5DVElPTl9UWVBFCisJICAgICAgJiYgVFJFRV9D T0RFIChUUkVFX1RZUEUgKHJlZikpICE9IE1FVEhPRF9UWVBFKTsKKworICAgIGNhc2UgQklORF9F WFBSOgorICAgICAgcmV0dXJuIFRSRUVfQ09ERSAoVFJFRV9UWVBFIChyZWYpKSA9PSBBUlJBWV9U WVBFOworCisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv b2wKK2NvbnZlcnRfdmVjdG9yX3RvX2FycmF5X2Zvcl9zdWJzY3JpcHQgKHRyZWUgKnZlY3ApCit7 CisgIGJvb2wgcmV0ID0gZmFsc2U7CisgIGlmIChnbnVfdmVjdG9yX3R5cGVfcCAoVFJFRV9UWVBF ICgqdmVjcCkpKQorICAgIHsKKyAgICAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoKnZlY3ApOwor CisgICAgICByZXQgPSAhbHZhbHVlX3AgKCp2ZWNwKTsKKworICAgICAgLyogV2UgYXJlIGJ1aWxk aW5nIGFuIEFSUkFZX1JFRiBzbyBtYXJrIHRoZSB2ZWN0b3IgYXMgYWRkcmVzc2FibGUKKwl0byBu b3QgcnVuIGludG8gdGhlIGdpbXBsaWZpZXJzIHByZW1hdHVyZSBzZXR0aW5nIG9mIERFQ0xfR0lN UExFX1JFR19QCisJIGZvciBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAgKi8KKyAgICAgIC8qIE5PVEU6 IHRoYXQgd2FzIHRoZSBtaXNzaW5nIHBpZWNlIGZvciBtYWtpbmcgdmVjdG9yIGFjY2VzcyB3b3Jr IHdpdGgKKwlvcHRpbWl6YXRpb25zIGVuYWJsZWQuICAqLworICAgICAgY29tbW9uX21hcmtfYWRk cmVzc2FibGVfdmVjICgqdmVjcCk7CisKKyAgICAgICp2ZWNwID0gYnVpbGQxIChWSUVXX0NPTlZF UlRfRVhQUiwKKwkJICAgICAgYnVpbGRfYXJyYXlfdHlwZV9uZWx0cyAoVFJFRV9UWVBFICh0eXBl KSwKKwkJCQkJICAgICAgVFlQRV9WRUNUT1JfU1VCUEFSVFMgKHR5cGUpKSwKKwkJICAgICAgKnZl Y3ApOworICAgIH0KKyAgcmV0dXJuIHJldDsKK30KKworLyogQ29uc3RydWN0IGEgcGxheWJhY2s6 Omx2YWx1ZSBpbnN0YW5jZSAod3JhcHBpbmcgYSB0cmVlKSBmb3IgYQorICAgdmVjdG9yIGFjY2Vz cy4gICovCisKK3BsYXliYWNrOjpsdmFsdWUgKgorcGxheWJhY2s6OmNvbnRleHQ6OgorbmV3X3Zl Y3Rvcl9hY2Nlc3MgKGxvY2F0aW9uICpsb2MsCisJCSAgIHJ2YWx1ZSAqdmVjdG9yLAorCQkgICBy dmFsdWUgKmluZGV4KQoreworICBnY2NfYXNzZXJ0ICh2ZWN0b3IpOworICBnY2NfYXNzZXJ0IChp bmRleCk7CisKKyAgLyogRm9yIGNvbXBhcmlzb24sIHNlZToKKyAgICAgICBjL2MtdHlwZWNrLmNj OiBidWlsZF9hcnJheV9yZWYKKyAgKi8KKworICB0cmVlIHRfdmVjdG9yID0gdmVjdG9yLT5hc190 cmVlICgpOworICBib29sIG5vbl9sdmFsdWUgPSBjb252ZXJ0X3ZlY3Rvcl90b19hcnJheV9mb3Jf c3Vic2NyaXB0ICgmdF92ZWN0b3IpOworICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKFRSRUVfVFlQ RSAodF92ZWN0b3IpKTsKKyAgdHJlZSB0X3Jlc3VsdCA9IGJ1aWxkNCAoQVJSQVlfUkVGLCB0eXBl LCB0X3ZlY3RvciwgaW5kZXgtPmFzX3RyZWUgKCksCisJCQkgIE5VTExfVFJFRSwgTlVMTF9UUkVF KTsKKyAgaWYgKG5vbl9sdmFsdWUpCisgICAgdF9yZXN1bHQgPSBub25fbHZhbHVlICh0X3Jlc3Vs dCk7CisKKyAgaWYgKGxvYykKKyAgICBzZXRfdHJlZV9sb2NhdGlvbiAodF9yZXN1bHQsIGxvYyk7 CisgIHJldHVybiBuZXcgbHZhbHVlICh0aGlzLCB0X3Jlc3VsdCk7Cit9CisKIC8qIENvbnN0cnVj dCBhIHRyZWUgZm9yIGEgZmllbGQgYWNjZXNzLiAgKi8KIAogdHJlZQpkaWZmIC0tZ2l0IGEvZ2Nj L2ppdC9qaXQtcGxheWJhY2suaCBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgKaW5kZXggODgzMTU5 ZjAzYzMuLjY0OGRkMmJjMDU4IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCisr KyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgKQEAgLTEwNCw3ICsxMDQsOCBAQCBwdWJsaWM6CiAJ CWNvbnN0IGNoYXIgKm5hbWUsCiAJCWNvbnN0IGF1dG9fdmVjPHBhcmFtICo+ICpwYXJhbXMsCiAJ CWludCBpc192YXJpYWRpYywKLQkJZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lkKTsK KwkJZW51bSBidWlsdF9pbl9mdW5jdGlvbiBidWlsdGluX2lkLAorCQlpbnQgaXNfdGFyZ2V0X2J1 aWx0aW4pOwogCiAgIGx2YWx1ZSAqCiAgIG5ld19nbG9iYWwgKGxvY2F0aW9uICpsb2MsCkBAIC0x NDcsNiArMTQ4LDEyIEBAIHB1YmxpYzoKIAkJCSAgdHlwZSAqdHlwZSwKIAkJCSAgY29uc3QgYXV0 b192ZWM8cnZhbHVlICo+ICZlbGVtZW50cyk7CiAKKyAgcnZhbHVlICoKKyAgbmV3X3J2YWx1ZV92 ZWN0b3JfcGVybSAobG9jYXRpb24gKmxvYywKKwkJCSAgcnZhbHVlKiBlbGVtZW50czEsCisJCQkg IHJ2YWx1ZSogZWxlbWVudHMyLAorCQkJICBydmFsdWUqIG1hc2spOworCiAgIHJ2YWx1ZSAqCiAg IG5ld191bmFyeV9vcCAobG9jYXRpb24gKmxvYywKIAkJZW51bSBnY2Nfaml0X3VuYXJ5X29wIG9w LApAQCAtMTkxLDYgKzE5OCwxMSBAQCBwdWJsaWM6CiAJCSAgICBydmFsdWUgKnB0ciwKIAkJICAg IHJ2YWx1ZSAqaW5kZXgpOwogCisgIGx2YWx1ZSAqCisgIG5ld192ZWN0b3JfYWNjZXNzIChsb2Nh dGlvbiAqbG9jLAorCQkgICAgIHJ2YWx1ZSAqdmVjdG9yLAorCQkgICAgIHJ2YWx1ZSAqaW5kZXgp OworCiAgIHZvaWQKICAgc2V0X3N0cl9vcHRpb24gKGVudW0gZ2NjX2ppdF9zdHJfb3B0aW9uIG9w dCwKIAkJICBjb25zdCBjaGFyICp2YWx1ZSk7CkBAIC04MTMsNCArODI1LDYgQEAgZXh0ZXJuIHBs YXliYWNrOjpjb250ZXh0ICphY3RpdmVfcGxheWJhY2tfY3R4dDsKIAogfSAvLyBuYW1lc3BhY2Ug Z2NjCiAKK2V4dGVybiBoYXNoX21hcDxub2ZyZWVfc3RyaW5nX2hhc2gsIHRyZWU+IHRhcmdldF9i dWlsdGluczsKKwogI2VuZGlmIC8qIEpJVF9QTEFZQkFDS19IICovCmRpZmYgLS1naXQgYS9nY2Mv aml0L2ppdC1yZWNvcmRpbmcuY2MgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MKaW5kZXggZGYw MzY4ZmY4ZjcuLjBjM2VhOGVjNDIzIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcu Y2MKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCkBAIC05MzMsMTQgKzkzMywxNiBAQCBy ZWNvcmRpbmc6OmZ1bmN0aW9uX3R5cGUgKgogcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfZnVuY3Rp b25fdHlwZSAocmVjb3JkaW5nOjp0eXBlICpyZXR1cm5fdHlwZSwKIAkJCQkgICAgICAgaW50IG51 bV9wYXJhbXMsCiAJCQkJICAgICAgIHJlY29yZGluZzo6dHlwZSAqKnBhcmFtX3R5cGVzLAotCQkJ CSAgICAgICBpbnQgaXNfdmFyaWFkaWMpCisJCQkJICAgICAgIGludCBpc192YXJpYWRpYywKKwkJ CQkgICAgICAgaW50IGlzX3RhcmdldF9idWlsdGluKQogewogICByZWNvcmRpbmc6OmZ1bmN0aW9u X3R5cGUgKmZuX3R5cGUKICAgICA9IG5ldyBmdW5jdGlvbl90eXBlICh0aGlzLAogCQkJIHJldHVy bl90eXBlLAogCQkJIG51bV9wYXJhbXMsCiAJCQkgcGFyYW1fdHlwZXMsCi0JCQkgaXNfdmFyaWFk aWMpOworCQkJIGlzX3ZhcmlhZGljLAorCQkJIGlzX3RhcmdldF9idWlsdGluKTsKICAgcmVjb3Jk IChmbl90eXBlKTsKICAgcmV0dXJuIGZuX3R5cGU7CiB9CkBAIC05NjIsNyArOTY0LDggQEAgcmVj b3JkaW5nOjpjb250ZXh0OjpuZXdfZnVuY3Rpb25fcHRyX3R5cGUgKHJlY29yZGluZzo6bG9jYXRp b24gKiwgLyogdW51c2VkIGxvYwogICAgID0gbmV3X2Z1bmN0aW9uX3R5cGUgKHJldHVybl90eXBl LAogCQkJIG51bV9wYXJhbXMsCiAJCQkgcGFyYW1fdHlwZXMsCi0JCQkgaXNfdmFyaWFkaWMpOwor CQkJIGlzX3ZhcmlhZGljLAorCQkJIGZhbHNlKTsKIAogICAvKiBSZXR1cm4gYSBwb2ludGVyLXR5 cGUgdG8gdGhlIGZ1bmN0aW9uIHR5cGUuICAqLwogICByZXR1cm4gZm5fdHlwZS0+Z2V0X3BvaW50 ZXIgKCk7CkBAIC0xMDA1LDcgKzEwMDgsNyBAQCByZWNvcmRpbmc6OmNvbnRleHQ6Om5ld19mdW5j dGlvbiAocmVjb3JkaW5nOjpsb2NhdGlvbiAqbG9jLAogCQkJICAgICBsb2MsIGtpbmQsIHJldHVy bl90eXBlLAogCQkJICAgICBuZXdfc3RyaW5nIChuYW1lKSwKIAkJCSAgICAgbnVtX3BhcmFtcywg cGFyYW1zLCBpc192YXJpYWRpYywKLQkJCSAgICAgYnVpbHRpbl9pZCk7CisJCQkgICAgIGJ1aWx0 aW5faWQsIGZhbHNlKTsKICAgcmVjb3JkIChyZXN1bHQpOwogICBtX2Z1bmN0aW9ucy5zYWZlX3B1 c2ggKHJlc3VsdCk7CiAKQEAgLTEwNDQsNiArMTA0Nyw1MyBAQCByZWNvcmRpbmc6OmNvbnRleHQ6 OmdldF9idWlsdGluX2Z1bmN0aW9uIChjb25zdCBjaGFyICpuYW1lKQogICByZXR1cm4gYm0tPmdl dF9idWlsdGluX2Z1bmN0aW9uIChuYW1lKTsKIH0KIAorLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjpm dW5jdGlvbiBpbnN0YW5jZSBmb3IgYSB0YXJnZXQtc3BlY2lmaWMgYnVpbHRpbi4KKworICAgSW1w bGVtZW50cyB0aGUgcG9zdC1lcnJvci1jaGVja2luZyBwYXJ0IG9mCisgICBnY2Nfaml0X2NvbnRl eHRfZ2V0X3RhcmdldF9idWlsdGluX2Z1bmN0aW9uLiAgKi8KKworcmVjb3JkaW5nOjpmdW5jdGlv biAqCityZWNvcmRpbmc6OmNvbnRleHQ6OmdldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiAoY29u c3QgY2hhciAqbmFtZSkKK3sKKyAgY29uc3QgY2hhciAqYXNtX25hbWUgPSBuYW1lOworICBpZiAo dGFyZ2V0X2Z1bmN0aW9uX3R5cGVzLmNvdW50IChuYW1lKSA9PSAwKQorICB7CisgICAgZnByaW50 ZiAoc3RkZXJyLCAiQ2Fubm90IGZpbmQgdGFyZ2V0IGJ1aWx0aW4gJXNcbiIsIG5hbWUpOworICAg IHJldHVybiBOVUxMOworICB9CisKKyAgcmVjb3JkaW5nOjpmdW5jdGlvbl90eXBlKiBmdW5jX3R5 cGUgPSB0YXJnZXRfZnVuY3Rpb25fdHlwZXNbbmFtZV0KKyAgICAtPmNvcHkgKHRoaXMpLT5keW5f Y2FzdF9mdW5jdGlvbl90eXBlICgpOworICBjb25zdCB2ZWM8dHlwZSAqPiYgcGFyYW1fdHlwZXMg PSBmdW5jX3R5cGUtPmdldF9wYXJhbV90eXBlcyAoKTsKKyAgcmVjb3JkaW5nOjpwYXJhbSAqKnBh cmFtcyA9IG5ldyByZWNvcmRpbmc6OnBhcmFtICpbcGFyYW1fdHlwZXMubGVuZ3RoICgpXTsKKwor ICBpbnQgaTsKKyAgcmVjb3JkaW5nOjp0eXBlICpwYXJhbV90eXBlOworICBGT1JfRUFDSF9WRUNf RUxUIChwYXJhbV90eXBlcywgaSwgcGFyYW1fdHlwZSkKKyAgICB7CisgICAgICBjaGFyIGJ1Zlsx Nl07CisgICAgICBzbnByaW50ZiAoYnVmLCAxNiwgImFyZyVkIiwgaSk7CisgICAgICBwYXJhbXNb aV0gPSBuZXdfcGFyYW0gKE5VTEwsCisJCQkgICAgIHBhcmFtX3R5cGUsCisJCQkgICAgIGJ1Zik7 CisgIH0KKworICByZWNvcmRpbmc6OmZ1bmN0aW9uICpyZXN1bHQgPQorICAgIG5ldyByZWNvcmRp bmc6OmZ1bmN0aW9uICh0aGlzLAorCSAgTlVMTCwKKwkgIEdDQ19KSVRfRlVOQ1RJT05fSU1QT1JU RUQsCisJICBmdW5jX3R5cGUtPmdldF9yZXR1cm5fdHlwZSAoKSwKKwkgIG5ld19zdHJpbmcgKGFz bV9uYW1lKSwKKwkgIHBhcmFtX3R5cGVzLmxlbmd0aCAoKSwKKwkgIHBhcmFtcywKKwkgIGZ1bmNf dHlwZS0+aXNfdmFyaWFkaWMgKCksCisJICBCVUlMVF9JTl9OT05FLAorCSAgdHJ1ZSk7CisgIHJl Y29yZCAocmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBDcmVhdGUgYSByZWNv cmRpbmc6Omdsb2JhbCBpbnN0YW5jZSBhbmQgYWRkIGl0IHRvIHRoaXMgY29udGV4dCdzIGxpc3QK ICAgIG9mIG1lbWVudG9zLgogCkBAIC0xMTA4LDYgKzExNTgsMTkgQEAgcmVjb3JkaW5nOjpjb250 ZXh0OjpuZXdfcnZhbHVlX2Zyb21fdmVjdG9yIChsb2NhdGlvbiAqbG9jLAogICByZXR1cm4gcmVz dWx0OwogfQogCityZWNvcmRpbmc6OnJ2YWx1ZSAqCityZWNvcmRpbmc6OmNvbnRleHQ6Om5ld19y dmFsdWVfdmVjdG9yX3Blcm0gKGxvY2F0aW9uICpsb2MsCisJCQkgIHJ2YWx1ZSAqZWxlbWVudHMx LAorCQkJICBydmFsdWUgKmVsZW1lbnRzMiwKKwkJCSAgcnZhbHVlICptYXNrKQoreworICByZWNv cmRpbmc6OnJ2YWx1ZSAqcmVzdWx0CisgICAgPSBuZXcgbWVtZW50b19vZl9uZXdfcnZhbHVlX3Zl Y3Rvcl9wZXJtICh0aGlzLCBsb2MsIGVsZW1lbnRzMSwgZWxlbWVudHMyLAorCQkJCQkgICAgIG1h c2spOworICByZWNvcmQgKHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKIHJlY29yZGlu Zzo6cnZhbHVlICoKIHJlY29yZGluZzo6Y29udGV4dDo6bmV3X2N0b3IgKHJlY29yZGluZzo6bG9j YXRpb24gKmxvYywKIAkJCSAgICAgIHJlY29yZGluZzo6dHlwZSAqdHlwZSwKQEAgLTEzMDksNiAr MTM3MiwyMiBAQCByZWNvcmRpbmc6OmNvbnRleHQ6Om5ld19hcnJheV9hY2Nlc3MgKHJlY29yZGlu Zzo6bG9jYXRpb24gKmxvYywKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogQ3JlYXRlIGEgcmVj b3JkaW5nOjp2ZWN0b3JfYWNjZXNzIGluc3RhbmNlIGFuZCBhZGQgaXQgdG8gdGhpcyBjb250ZXh0 J3MgbGlzdAorICAgb2YgbWVtZW50b3MuCisKKyAgIEltcGxlbWVudHMgdGhlIHBvc3QtZXJyb3It Y2hlY2tpbmcgcGFydCBvZgorICAgZ2NjX2ppdF9jb250ZXh0X25ld192ZWN0b3JfYWNjZXNzLiAg Ki8KKworcmVjb3JkaW5nOjpsdmFsdWUgKgorcmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfdmVjdG9y X2FjY2VzcyAocmVjb3JkaW5nOjpsb2NhdGlvbiAqbG9jLAorCQkJCSAgICAgIHJlY29yZGluZzo6 cnZhbHVlICp2ZWN0b3IsCisJCQkJICAgICAgcmVjb3JkaW5nOjpydmFsdWUgKmluZGV4KQorewor ICByZWNvcmRpbmc6Omx2YWx1ZSAqcmVzdWx0ID0gbmV3IHZlY3Rvcl9hY2Nlc3MgKHRoaXMsIGxv YywgdmVjdG9yLCBpbmRleCk7CisgIHJlY29yZCAocmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsK K30KKwogLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjpjYXNlXyBpbnN0YW5jZSBhbmQgYWRkIGl0IHRv IHRoaXMgY29udGV4dCdzIGxpc3QKICAgIG9mIG1lbWVudG9zLgogCkBAIC0yMzcyLDYgKzI0NTEs OCBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGU6OmdldF9zaXplICgpCiAgICAgY2Fz ZSBHQ0NfSklUX1RZUEVfRkxPQVQ6CiAgICAgICBzaXplID0gRkxPQVRfVFlQRV9TSVpFOwogICAg ICAgYnJlYWs7CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfQkZMT0FUMTY6CisgICAgICByZXR1cm4g R0VUX01PREVfVU5JVF9TSVpFIChCRm1vZGUpOwogICAgIGNhc2UgR0NDX0pJVF9UWVBFX0RPVUJM RToKICAgICAgIHNpemUgPSBET1VCTEVfVFlQRV9TSVpFOwogICAgICAgYnJlYWs7CkBAIC0yNDMx LDYgKzI1MTIsNyBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGU6OmRlcmVmZXJlbmNl ICgpCiAgICAgY2FzZSBHQ0NfSklUX1RZUEVfSU5UNjRfVDoKICAgICBjYXNlIEdDQ19KSVRfVFlQ RV9JTlQxMjhfVDoKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9GTE9BVDoKKyAgICBjYXNlIEdDQ19K SVRfVFlQRV9CRkxPQVQxNjoKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9ET1VCTEU6CiAgICAgY2Fz ZSBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEU6CiAgICAgY2FzZSBHQ0NfSklUX1RZUEVfQ09NUExF WF9GTE9BVDoKQEAgLTI0OTUsNiArMjU3Nyw3IEBAIHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRf dHlwZTo6aXNfaW50ICgpIGNvbnN0CiAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgR0ND X0pJVF9UWVBFX0ZMT0FUOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0JGTE9BVDE2OgogICAgIGNh c2UgR0NDX0pJVF9UWVBFX0RPVUJMRToKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJM RToKICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NTMsNiArMjYzNiw3IEBAIHJlY29yZGluZzo6 bWVtZW50b19vZl9nZXRfdHlwZTo6aXNfc2lnbmVkICgpIGNvbnN0CiAgICAgY2FzZSBHQ0NfSklU X1RZUEVfVUlOVDEyOF9UOgogCiAgICAgY2FzZSBHQ0NfSklUX1RZUEVfRkxPQVQ6CisgICAgY2Fz ZSBHQ0NfSklUX1RZUEVfQkZMT0FUMTY6CiAgICAgY2FzZSBHQ0NfSklUX1RZUEVfRE9VQkxFOgog ICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFOgogCkBAIC0yNjEyLDYgKzI2OTYsNyBA QCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGU6OmlzX2Zsb2F0ICgpIGNvbnN0CiAgICAg ICByZXR1cm4gZmFsc2U7CiAKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9GTE9BVDoKKyAgICBjYXNl IEdDQ19KSVRfVFlQRV9CRkxPQVQxNjoKICAgICBjYXNlIEdDQ19KSVRfVFlQRV9ET1VCTEU6CiAg ICAgY2FzZSBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEU6CiAgICAgICByZXR1cm4gdHJ1ZTsKQEAg LTI2NzUsNiArMjc2MCw3IEBAIHJlY29yZGluZzo6bWVtZW50b19vZl9nZXRfdHlwZTo6aXNfYm9v bCAoKSBjb25zdAogICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBHQ0NfSklUX1RZUEVf RkxPQVQ6CisgICAgY2FzZSBHQ0NfSklUX1RZUEVfQkZMT0FUMTY6CiAgICAgY2FzZSBHQ0NfSklU X1RZUEVfRE9VQkxFOgogICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFOgogICAgICAg cmV0dXJuIGZhbHNlOwpAQCAtMjc1NCw2ICsyODQwLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBnZXRfdHlwZV9zdHJpbmdzW10gPSB7CiAgICJfX2ludDMyX3QiLCAgICAvKiBHQ0NfSklU X1RZUEVfSU5UMzJfVCAqLwogICAiX19pbnQ2NF90IiwgICAgLyogR0NDX0pJVF9UWVBFX0lOVDY0 X1QgKi8KICAgIl9faW50MTI4X3QiLCAgIC8qIEdDQ19KSVRfVFlQRV9JTlQxMjhfVCAqLworICAi YmZsb2F0MTYiLCAgICAgLyogR0NDX0pJVF9UWVBFX0JGTE9BVDE2ICovCiAKIH07CiAKQEAgLTI4 MDAsNiArMjg4Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2V0X3R5cGVfZW51bV9z dHJpbmdzW10gPSB7CiAgICJHQ0NfSklUX1RZUEVfSU5UMzJfVCIsCiAgICJHQ0NfSklUX1RZUEVf SU5UNjRfVCIsCiAgICJHQ0NfSklUX1RZUEVfSU5UMTI4X1QiLAorICAiR0NDX0pJVF9UWVBFX0JG TE9BVDE2IiwKIH07CiAKIHZvaWQKQEAgLTMwOTgsMTEgKzMxODYsMTMgQEAgcmVjb3JkaW5nOjpm dW5jdGlvbl90eXBlOjpmdW5jdGlvbl90eXBlIChjb250ZXh0ICpjdHh0LAogCQkJCQkgdHlwZSAq cmV0dXJuX3R5cGUsCiAJCQkJCSBpbnQgbnVtX3BhcmFtcywKIAkJCQkJIHR5cGUgKipwYXJhbV90 eXBlcywKLQkJCQkJIGludCBpc192YXJpYWRpYykKKwkJCQkJIGludCBpc192YXJpYWRpYywKKwkJ CQkJIGludCBpc190YXJnZXRfYnVpbHRpbikKIDogdHlwZSAoY3R4dCksCiAgIG1fcmV0dXJuX3R5 cGUgKHJldHVybl90eXBlKSwKICAgbV9wYXJhbV90eXBlcyAoKSwKLSAgbV9pc192YXJpYWRpYyAo aXNfdmFyaWFkaWMpCisgIG1faXNfdmFyaWFkaWMgKGlzX3ZhcmlhZGljKSwKKyAgbV9pc190YXJn ZXRfYnVpbHRpbiAoaXNfdGFyZ2V0X2J1aWx0aW4pCiB7CiAgIGZvciAoaW50IGkgPSAwOyBpPCBu dW1fcGFyYW1zOyBpKyspCiAgICAgbV9wYXJhbV90eXBlcy5zYWZlX3B1c2ggKHBhcmFtX3R5cGVz W2ldKTsKQEAgLTQwNDQsNyArNDEzNCw4IEBAIHJlY29yZGluZzo6ZnVuY3Rpb246OmZ1bmN0aW9u IChjb250ZXh0ICpjdHh0LAogCQkJICAgICAgIGludCBudW1fcGFyYW1zLAogCQkJICAgICAgIHJl Y29yZGluZzo6cGFyYW0gKipwYXJhbXMsCiAJCQkgICAgICAgaW50IGlzX3ZhcmlhZGljLAotCQkJ ICAgICAgIGVudW0gYnVpbHRfaW5fZnVuY3Rpb24gYnVpbHRpbl9pZCkKKwkJCSAgICAgICBlbnVt IGJ1aWx0X2luX2Z1bmN0aW9uIGJ1aWx0aW5faWQsCisJCQkgICAgICAgaW50IGlzX3RhcmdldF9i dWlsdGluKQogOiBtZW1lbnRvIChjdHh0KSwKICAgbV9sb2MgKGxvYyksCiAgIG1fa2luZCAoa2lu ZCksCkBAIC00MDU1LDcgKzQxNDYsOCBAQCByZWNvcmRpbmc6OmZ1bmN0aW9uOjpmdW5jdGlvbiAo Y29udGV4dCAqY3R4dCwKICAgbV9idWlsdGluX2lkIChidWlsdGluX2lkKSwKICAgbV9sb2NhbHMg KCksCiAgIG1fYmxvY2tzICgpLAotICBtX2ZuX3B0cl90eXBlIChOVUxMKQorICBtX2ZuX3B0cl90 eXBlIChOVUxMKSwKKyAgbV9pc190YXJnZXRfYnVpbHRpbiAoaXNfdGFyZ2V0X2J1aWx0aW4pCiB7 CiAgIGZvciAoaW50IGkgPSAwOyBpPCBudW1fcGFyYW1zOyBpKyspCiAgICAgewpAQCAtNDExNCw3 ICs0MjA2LDggQEAgcmVjb3JkaW5nOjpmdW5jdGlvbjo6cmVwbGF5X2ludG8gKHJlcGxheWVyICpy KQogCQkJCSAgICAgbV9uYW1lLT5jX3N0ciAoKSwKIAkJCQkgICAgICZwYXJhbXMsCiAJCQkJICAg ICBtX2lzX3ZhcmlhZGljLAotCQkJCSAgICAgbV9idWlsdGluX2lkKSk7CisJCQkJICAgICBtX2J1 aWx0aW5faWQsCisJCQkJICAgICBtX2lzX3RhcmdldF9idWlsdGluKSk7CiB9CiAKIC8qIENyZWF0 ZSBhIHJlY29yZGluZzo6bG9jYWwgaW5zdGFuY2UgYW5kIGFkZCBpdCB0bwpAQCAtNDM0Nyw3ICs0 NDQwLDggQEAgcmVjb3JkaW5nOjpmdW5jdGlvbjo6Z2V0X2FkZHJlc3MgKHJlY29yZGluZzo6bG9j YXRpb24gKmxvYykKIAk9IG1fY3R4dC0+bmV3X2Z1bmN0aW9uX3R5cGUgKG1fcmV0dXJuX3R5cGUs CiAJCQkJICAgICBtX3BhcmFtcy5sZW5ndGggKCksCiAJCQkJICAgICBwYXJhbV90eXBlcy5hZGRy ZXNzICgpLAotCQkJCSAgICAgbV9pc192YXJpYWRpYyk7CisJCQkJICAgICBtX2lzX3ZhcmlhZGlj LAorCQkJCSAgICAgbV9pc190YXJnZXRfYnVpbHRpbik7CiAgICAgICBtX2ZuX3B0cl90eXBlID0g Zm5fdHlwZS0+Z2V0X3BvaW50ZXIgKCk7CiAgICAgfQogICBnY2NfYXNzZXJ0IChtX2ZuX3B0cl90 eXBlKTsKQEAgLTUzOTAsNiArNTQ4NCw5MSBAQCByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2 YWx1ZV9mcm9tX3ZlY3Rvcjo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIAkgICBl bGVtZW50c19pZCk7CiB9CiAKKy8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjbGFzcworICAgZ2Nj OjpqaXQ6OnJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtLiAgKi8K KworLyogVGhlIGNvbnN0cnVjdG9yIGZvcgorICAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6bWVtZW50 b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtLiAgKi8KKworcmVjb3JkaW5nOjptZW1lbnRvX29m X25ld19ydmFsdWVfdmVjdG9yX3Blcm06OgorbWVtZW50b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9w ZXJtIChjb250ZXh0ICpjdHh0LAorCQkJCSAgIGxvY2F0aW9uICpsb2MsCisJCQkJICAgcnZhbHVl ICplbGVtZW50czEsCisJCQkJICAgcnZhbHVlICplbGVtZW50czIsCisJCQkJICAgcnZhbHVlICpt YXNrKQorOiBydmFsdWUgKGN0eHQsIGxvYywgZWxlbWVudHMxLT5nZXRfdHlwZSAoKSksCisgIG1f ZWxlbWVudHMxIChlbGVtZW50czEpLAorICBtX2VsZW1lbnRzMiAoZWxlbWVudHMyKSwKKyAgbV9t YXNrIChtYXNrKQoreworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9v ayByZWNvcmRpbmc6Om1lbWVudG86OnJlcGxheV9pbnRvCisgICBmb3IgcmVjb3JkaW5nOjptZW1l bnRvX29mX25ld19ydmFsdWVfdmVjdG9yX3Blcm0uICAqLworCit2b2lkCityZWNvcmRpbmc6Om1l bWVudG9fb2ZfbmV3X3J2YWx1ZV92ZWN0b3JfcGVybTo6cmVwbGF5X2ludG8gKHJlcGxheWVyICpy KQoreworICBwbGF5YmFjazo6cnZhbHVlICpwbGF5YmFja19lbGVtZW50czEgPSBtX2VsZW1lbnRz MS0+cGxheWJhY2tfcnZhbHVlICgpOworICBwbGF5YmFjazo6cnZhbHVlICpwbGF5YmFja19lbGVt ZW50czIgPSBtX2VsZW1lbnRzMi0+cGxheWJhY2tfcnZhbHVlICgpOworICBwbGF5YmFjazo6cnZh bHVlICpwbGF5YmFja19tYXNrID0gbV9tYXNrLT5wbGF5YmFja19ydmFsdWUgKCk7CisKKyAgc2V0 X3BsYXliYWNrX29iaiAoci0+bmV3X3J2YWx1ZV92ZWN0b3JfcGVybSAocGxheWJhY2tfbG9jYXRp b24gKHIsIG1fbG9jKSwKKwkJICAgIHBsYXliYWNrX2VsZW1lbnRzMSwKKwkJICAgIHBsYXliYWNr X2VsZW1lbnRzMiwKKwkJICAgIHBsYXliYWNrX21hc2spKTsKK30KKworLyogSW1wbGVtZW50YXRp b24gb2YgcHVyZSB2aXJ0dWFsIGhvb2sgcmVjb3JkaW5nOjpydmFsdWU6OnZpc2l0X2NoaWxkcmVu CisgICBmb3IgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV92ZWN0b3IuICAq LworCisgICAgdm9pZAorcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfdmVjdG9yX3Bl cm06OnZpc2l0X2NoaWxkcmVuIChydmFsdWVfdmlzaXRvciAqdikKK3sKKyAgdi0+dmlzaXQgKG1f ZWxlbWVudHMxKTsKKyAgdi0+dmlzaXQgKG1fZWxlbWVudHMyKTsKKyAgdi0+dmlzaXQgKG1fbWFz ayk7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHJlY29yZGluZzo6bWVtZW50bzo6bWFrZV9k ZWJ1Z19zdHJpbmcgZm9yCisgICB2ZWN0b3JzLiAgKi8KKworICAgIHJlY29yZGluZzo6c3RyaW5n ICoKK3JlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtOjptYWtlX2Rl YnVnX3N0cmluZyAoKQoreworICAgIC8qIE5vdyBidWlsZCBhIHN0cmluZy4gICovCisgICAgc3Ry aW5nICpyZXN1bHQgPSBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQsCisJCSJzaHVmZmxldmVj dG9yICglcywgJXMsICVzKSIsCisJCW1fZWxlbWVudHMxLT5nZXRfZGVidWdfc3RyaW5nICgpLAor CQltX2VsZW1lbnRzMi0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKwkJbV9tYXNrLT5nZXRfZGVidWdf c3RyaW5nICgpKTsKKworICAgIHJldHVybiByZXN1bHQ7CisKK30KKworLyogSW1wbGVtZW50YXRp b24gb2YgcmVjb3JkaW5nOjptZW1lbnRvOjp3cml0ZV9yZXByb2R1Y2VyIGZvcgorICAgdmVjdG9y cy4gICovCisKKyAgICB2b2lkCityZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV92ZWN0 b3JfcGVybTo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKK3sKKyAgICBjb25zdCBj aGFyICppZCA9IHIubWFrZV9pZGVudGlmaWVyICh0aGlzLCAidmVjdG9yIik7CisgIHIud3JpdGUg KCIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisJICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV92ZWN0b3JfcGVybSAoJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgor CSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBn Y2Nfaml0X2xvY2F0aW9uICpsb2MgKi9cbiIKKwkgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF9ydmFsdWUgKiplbGVtZW50czEqL1xu IgorCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAv KiBnY2Nfaml0X3J2YWx1ZSAqKmVsZW1lbnRzMiovXG4iCisJICAgIiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMpOyAvKiBnY2Nfaml0X3J2YWx1ZSAqKm1hc2sq L1xuIiwKKwkgICBpZCwKKwkgICByLmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSksCisJ ICAgci5nZXRfaWRlbnRpZmllciAobV9sb2MpLAorCSAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfcnZh bHVlIChtX2VsZW1lbnRzMSksCisJICAgci5nZXRfaWRlbnRpZmllcl9hc19ydmFsdWUgKG1fZWxl bWVudHMyKSwKKwkgICByLmdldF9pZGVudGlmaWVyX2FzX3J2YWx1ZSAobV9tYXNrKSk7Cit9CisK Kwogdm9pZAogcmVjb3JkaW5nOjpjdG9yOjp2aXNpdF9jaGlsZHJlbiAocnZhbHVlX3Zpc2l0b3Ig KnYpCiB7CkBAIC02MjYwLDYgKzY0MzksNjIgQEAgcmVjb3JkaW5nOjphcnJheV9hY2Nlc3M6Ondy aXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAJICAgci5nZXRfaWRlbnRpZmllcl9hc19y dmFsdWUgKG1faW5kZXgpKTsKIH0KIAorLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIGNsYXNzIGdj Yzo6aml0OjpyZWNvcmRpbmc6OnZlY3Rvcl9hY2Nlc3MuICAqLworCisvKiBJbXBsZW1lbnRhdGlv biBvZiBwdXJlIHZpcnR1YWwgaG9vayByZWNvcmRpbmc6Om1lbWVudG86OnJlcGxheV9pbnRvCisg ICBmb3IgcmVjb3JkaW5nOjp2ZWN0b3JfYWNjZXNzLiAgKi8KKwordm9pZAorcmVjb3JkaW5nOjp2 ZWN0b3JfYWNjZXNzOjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpCit7CisgIHNldF9wbGF5YmFj a19vYmogKAorICAgIHItPm5ld192ZWN0b3JfYWNjZXNzIChwbGF5YmFja19sb2NhdGlvbiAociwg bV9sb2MpLAorCQkJICBtX3ZlY3Rvci0+cGxheWJhY2tfcnZhbHVlICgpLAorCQkJICBtX2luZGV4 LT5wbGF5YmFja19ydmFsdWUgKCkpKTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2 aXJ0dWFsIGhvb2sgcmVjb3JkaW5nOjpydmFsdWU6OnZpc2l0X2NoaWxkcmVuCisgICBmb3IgcmVj b3JkaW5nOjp2ZWN0b3JfYWNjZXNzLiAgKi8KKwordm9pZAorcmVjb3JkaW5nOjp2ZWN0b3JfYWNj ZXNzOjp2aXNpdF9jaGlsZHJlbiAocnZhbHVlX3Zpc2l0b3IgKnYpCit7CisgIHYtPnZpc2l0ICht X3ZlY3Rvcik7CisgIHYtPnZpc2l0IChtX2luZGV4KTsKK30KKworLyogSW1wbGVtZW50YXRpb24g b2YgcmVjb3JkaW5nOjptZW1lbnRvOjptYWtlX2RlYnVnX3N0cmluZyBmb3IKKyAgIGFycmF5IGFj Y2Vzc2VzLiAgKi8KKworcmVjb3JkaW5nOjpzdHJpbmcgKgorcmVjb3JkaW5nOjp2ZWN0b3JfYWNj ZXNzOjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICBlbnVtIHByZWNlZGVuY2UgcHJlYyA9IGdl dF9wcmVjZWRlbmNlICgpOworICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZiAobV9jdHh0LAor CQkJICAgICAgIiVzWyVzXSIsCisJCQkgICAgICBtX3ZlY3Rvci0+Z2V0X2RlYnVnX3N0cmluZ19w YXJlbnMgKHByZWMpLAorCQkJICAgICAgbV9pbmRleC0+Z2V0X2RlYnVnX3N0cmluZ19wYXJlbnMg KHByZWMpKTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgcmVjb3JkaW5nOjptZW1lbnRvOjp3 cml0ZV9yZXByb2R1Y2VyIGZvcgorICAgdmVjdG9yX2FjY2Vzcy4gICovCisKK3ZvaWQKK3JlY29y ZGluZzo6dmVjdG9yX2FjY2Vzczo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKK3sK KyAgY29uc3QgY2hhciAqaWQgPSByLm1ha2VfaWRlbnRpZmllciAodGhpcywgImx2YWx1ZSIpOwor ICByLndyaXRlICgiICBnY2Nfaml0X2x2YWx1ZSAqJXMgPSBcbiIKKwkgICAiICAgIGdjY19qaXRf Y29udGV4dF9uZXdfdmVjdG9yX2FjY2VzcyAoJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAq L1xuIgorCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcywgLypn Y2Nfaml0X2xvY2F0aW9uICpsb2MgKi9cbiIKKwkgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRfcnZhbHVlICp2ZWN0b3IgKi9cbiIKKwkgICAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMpOyAvKiBnY2Nfaml0X3J2 YWx1ZSAqaW5kZXggKi9cbiIsCisJICAgaWQsCisJICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2Nv bnRleHQgKCkpLAorCSAgIHIuZ2V0X2lkZW50aWZpZXIgKG1fbG9jKSwKKwkgICByLmdldF9pZGVu dGlmaWVyX2FzX3J2YWx1ZSAobV92ZWN0b3IpLAorCSAgIHIuZ2V0X2lkZW50aWZpZXJfYXNfcnZh bHVlIChtX2luZGV4KSk7Cit9CisKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBjbGFzcyBnY2M6 OmppdDo6cmVjb3JkaW5nOjphY2Nlc3NfZmllbGRfb2ZfbHZhbHVlLiAgKi8KIAogLyogSW1wbGVt ZW50YXRpb24gb2YgcHVyZSB2aXJ0dWFsIGhvb2sgcmVjb3JkaW5nOjptZW1lbnRvOjpyZXBsYXlf aW50bwpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggYi9nY2Mvaml0L2ppdC1y ZWNvcmRpbmcuaAppbmRleCAyZGM5NDQ4ZDdjOS4uNGQ3MDRlODAwYzMgMTAwNjQ0Ci0tLSBhL2dj Yy9qaXQvaml0LXJlY29yZGluZy5oCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCkBAIC0y NCwxMiArMjQsMTcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElm IG5vdCBzZWUKICNpbmNsdWRlICJqaXQtY29tbW9uLmgiCiAjaW5jbHVkZSAiaml0LWxvZ2dpbmcu aCIKIAorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorCiBjbGFz cyB0aW1lcjsKIAorZXh0ZXJuIHN0ZDo6dW5vcmRlcmVkX21hcDxzdGQ6OnN0cmluZywgZ2NjOjpq aXQ6OnJlY29yZGluZzo6ZnVuY3Rpb25fdHlwZSo+CisgIHRhcmdldF9mdW5jdGlvbl90eXBlczsK KwogbmFtZXNwYWNlIGdjYyB7CiAKIG5hbWVzcGFjZSBqaXQgewotCiBleHRlcm4gY29uc3QgY2hh ciAqIGNvbnN0IHVuYXJ5X29wX3JlcHJvZHVjZXJfc3RyaW5nc1tdOwogZXh0ZXJuIGNvbnN0IGNo YXIgKiBjb25zdCBiaW5hcnlfb3BfcmVwcm9kdWNlcl9zdHJpbmdzW107CiAKQEAgLTExNiw3ICsx MjEsOCBAQCBwdWJsaWM6CiAgIG5ld19mdW5jdGlvbl90eXBlICh0eXBlICpyZXR1cm5fdHlwZSwK IAkJICAgICBpbnQgbnVtX3BhcmFtcywKIAkJICAgICB0eXBlICoqcGFyYW1fdHlwZXMsCi0JCSAg ICAgaW50IGlzX3ZhcmlhZGljKTsKKwkJICAgICBpbnQgaXNfdmFyaWFkaWMsCisJCSAgICAgaW50 IGlzX3RhcmdldF9idWlsdGluKTsKIAogICB0eXBlICoKICAgbmV3X2Z1bmN0aW9uX3B0cl90eXBl IChsb2NhdGlvbiAqbG9jLApAQCAtMTQzLDYgKzE0OSw5IEBAIHB1YmxpYzoKICAgZnVuY3Rpb24g KgogICBnZXRfYnVpbHRpbl9mdW5jdGlvbiAoY29uc3QgY2hhciAqbmFtZSk7CiAKKyAgZnVuY3Rp b24gKgorICBnZXRfdGFyZ2V0X2J1aWx0aW5fZnVuY3Rpb24gKGNvbnN0IGNoYXIgKm5hbWUpOwor CiAgIGx2YWx1ZSAqCiAgIG5ld19nbG9iYWwgKGxvY2F0aW9uICpsb2MsCiAJICAgICAgZW51bSBn Y2Nfaml0X2dsb2JhbF9raW5kIGtpbmQsCkBAIC0xNzMsNiArMTgyLDEyIEBAIHB1YmxpYzoKIAkJ CSAgdmVjdG9yX3R5cGUgKnR5cGUsCiAJCQkgIHJ2YWx1ZSAqKmVsZW1lbnRzKTsKIAorICBydmFs dWUgKgorICBuZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtIChsb2NhdGlvbiAqbG9jLAorCQkJICBydmFs dWUgKmVsZW1lbnRzMSwKKwkJCSAgcnZhbHVlICplbGVtZW50czIsCisJCQkgIHJ2YWx1ZSAqbWFz ayk7CisKICAgcnZhbHVlICoKICAgbmV3X3VuYXJ5X29wIChsb2NhdGlvbiAqbG9jLAogCQllbnVt IGdjY19qaXRfdW5hcnlfb3Agb3AsCkBAIC0yMTUsNiArMjMwLDExIEBAIHB1YmxpYzoKIAkJICAg IHJ2YWx1ZSAqcHRyLAogCQkgICAgcnZhbHVlICppbmRleCk7CiAKKyAgbHZhbHVlICoKKyAgbmV3 X3ZlY3Rvcl9hY2Nlc3MgKGxvY2F0aW9uICpsb2MsCisJCSAgICAgcnZhbHVlICp2ZWN0b3IsCisJ CSAgICAgcnZhbHVlICppbmRleCk7CisKICAgY2FzZV8gKgogICBuZXdfY2FzZSAocnZhbHVlICpt aW5fdmFsdWUsCiAJICAgIHJ2YWx1ZSAqbWF4X3ZhbHVlLApAQCAtNTM5LDYgKzU1OSw4IEBAIHB1 YmxpYzoKICAgICAgdGhlc2UgdHlwZXMuICAqLwogICB2aXJ0dWFsIHNpemVfdCBnZXRfc2l6ZSAo KSB7IGdjY191bnJlYWNoYWJsZSAoKTsgfQogCisgIHZpcnR1YWwgdHlwZSogY29weSAoY29udGV4 dCogY3R4dCkgPSAwOworCiAgIC8qIER5bmFtaWMgY2FzdHMuICAqLwogICB2aXJ0dWFsIGZ1bmN0 aW9uX3R5cGUgKmR5bl9jYXN0X2Z1bmN0aW9uX3R5cGUgKCkgeyByZXR1cm4gTlVMTDsgfQogICB2 aXJ0dWFsIGZ1bmN0aW9uX3R5cGUgKmFzX2FfZnVuY3Rpb25fdHlwZSgpIHsgZ2NjX3VucmVhY2hh YmxlICgpOyByZXR1cm4gTlVMTDsgfQpAQCAtNjEzLDYgKzYzNSwxMSBAQCBwdWJsaWM6CiAKICAg c2l6ZV90IGdldF9zaXplICgpIGZpbmFsIG92ZXJyaWRlOwogCisgIHR5cGUqIGNvcHkgKGNvbnRl eHQqIGN0eHQpIGZpbmFsIG92ZXJyaWRlCisgIHsKKyAgICByZXR1cm4gY3R4dC0+Z2V0X3R5cGUg KG1fa2luZCk7CisgIH0KKwogICBib29sIGFjY2VwdHNfd3JpdGVzX2Zyb20gKHR5cGUgKnJ0eXBl KSBmaW5hbCBvdmVycmlkZQogICB7CiAgICAgaWYgKG1fa2luZCA9PSBHQ0NfSklUX1RZUEVfVk9J RF9QVFIpCkBAIC02NjQsNiArNjkxLDEzIEBAIHB1YmxpYzoKIAogICB0eXBlICpkZXJlZmVyZW5j ZSAoKSBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBtX290aGVyX3R5cGU7IH0KIAorICB0eXBlKiBj b3B5IChjb250ZXh0KiBjdHh0KSBmaW5hbCBvdmVycmlkZQorICB7CisgICAgdHlwZSogcmVzdWx0 ID0gbmV3IG1lbWVudG9fb2ZfZ2V0X3BvaW50ZXIgKG1fb3RoZXJfdHlwZS0+Y29weSAoY3R4dCkp OworICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisK ICAgc2l6ZV90IGdldF9zaXplICgpIGZpbmFsIG92ZXJyaWRlOwogCiAgIGJvb2wgYWNjZXB0c193 cml0ZXNfZnJvbSAodHlwZSAqcnR5cGUpIGZpbmFsIG92ZXJyaWRlOwpAQCAtNzI0LDYgKzc1OCwx MyBAQCBwdWJsaWM6CiAgICAgcmV0dXJuIGZhbHNlOwogICB9CiAKKyAgdHlwZSogY29weSAoY29u dGV4dCogY3R4dCkgZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyBt ZW1lbnRvX29mX2dldF9jb25zdCAobV9vdGhlcl90eXBlLT5jb3B5IChjdHh0KSk7CisgICAgY3R4 dC0+cmVjb3JkIChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKwogICAvKiBTdHJp cCBvZmYgdGhlICJjb25zdCIsIGdpdmluZyB0aGUgdW5kZXJseWluZyB0eXBlLiAgKi8KICAgdHlw ZSAqdW5xdWFsaWZpZWQgKCkgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gbV9vdGhlcl90eXBlOyB9 CiAKQEAgLTc1Nyw2ICs3OTgsMTMgQEAgcHVibGljOgogICAgIHJldHVybiBtX290aGVyX3R5cGUt PmlzX3NhbWVfdHlwZV9hcyAob3RoZXItPmlzX3ZvbGF0aWxlICgpKTsKICAgfQogCisgIHR5cGUq IGNvcHkgKGNvbnRleHQqIGN0eHQpIGZpbmFsIG92ZXJyaWRlCisgIHsKKyAgICB0eXBlKiByZXN1 bHQgPSBuZXcgbWVtZW50b19vZl9nZXRfdm9sYXRpbGUgKG1fb3RoZXJfdHlwZS0+Y29weSAoY3R4 dCkpOworICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9 CisKICAgLyogU3RyaXAgb2ZmIHRoZSAidm9sYXRpbGUiLCBnaXZpbmcgdGhlIHVuZGVybHlpbmcg dHlwZS4gICovCiAgIHR5cGUgKnVucXVhbGlmaWVkICgpIGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJu IG1fb3RoZXJfdHlwZTsgfQogCkBAIC03NzcsMTEgKzgyNSwyMyBAQCBwdWJsaWM6CiAgIDogZGVj b3JhdGVkX3R5cGUgKG90aGVyX3R5cGUpLAogICAgIG1fYWxpZ25tZW50X2luX2J5dGVzIChhbGln bm1lbnRfaW5fYnl0ZXMpIHt9CiAKKyAgdHlwZSogY29weSAoY29udGV4dCogY3R4dCkgZmluYWwg b3ZlcnJpZGUKKyAgeworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyBtZW1lbnRvX29mX2dldF9hbGln bmVkIChtX290aGVyX3R5cGUtPmNvcHkgKGN0eHQpLAorCQkJCQkgICAgICAgbV9hbGlnbm1lbnRf aW5fYnl0ZXMpOworICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0 OworICB9CisKICAgLyogU3RyaXAgb2ZmIHRoZSBhbGlnbm1lbnQsIGdpdmluZyB0aGUgdW5kZXJs eWluZyB0eXBlLiAgKi8KICAgdHlwZSAqdW5xdWFsaWZpZWQgKCkgZmluYWwgb3ZlcnJpZGUgeyBy ZXR1cm4gbV9vdGhlcl90eXBlOyB9CiAKICAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKikg ZmluYWwgb3ZlcnJpZGU7CiAKKyAgdmVjdG9yX3R5cGUgKmR5bl9jYXN0X3ZlY3Rvcl90eXBlICgp IGZpbmFsIG92ZXJyaWRlIHsKKyAgICByZXR1cm4gbV9vdGhlcl90eXBlLT5keW5fY2FzdF92ZWN0 b3JfdHlwZSAoKTsKKyAgfQorCiBwcml2YXRlOgogICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmlu ZyAoKSBmaW5hbCBvdmVycmlkZTsKICAgdm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2Vy ICZyKSBmaW5hbCBvdmVycmlkZTsKQEAgLTc5OCw2ICs4NTgsMTMgQEAgcHVibGljOgogICA6IGRl Y29yYXRlZF90eXBlIChvdGhlcl90eXBlKSwKICAgICBtX251bV91bml0cyAobnVtX3VuaXRzKSB7 fQogCisgIHR5cGUqIGNvcHkgKGNvbnRleHQqIGN0eHQpIGZpbmFsIG92ZXJyaWRlCisgIHsKKyAg ICB0eXBlKiByZXN1bHQgPSBuZXcgdmVjdG9yX3R5cGUgKG1fb3RoZXJfdHlwZS0+Y29weSAoY3R4 dCksIG1fbnVtX3VuaXRzKTsKKyAgICBjdHh0LT5yZWNvcmQgKHJlc3VsdCk7CisgICAgcmV0dXJu IHJlc3VsdDsKKyAgfQorCiAgIHNpemVfdCBnZXRfbnVtX3VuaXRzICgpIGNvbnN0IHsgcmV0dXJu IG1fbnVtX3VuaXRzOyB9CiAKICAgdmVjdG9yX3R5cGUgKmR5bl9jYXN0X3ZlY3Rvcl90eXBlICgp IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KQEAgLTg0MCw2ICs5MDcsMTQgQEAgY2xh c3MgYXJyYXlfdHlwZSA6IHB1YmxpYyB0eXBlCiAKICAgdHlwZSAqZGVyZWZlcmVuY2UgKCkgZmlu YWwgb3ZlcnJpZGU7CiAKKyAgdHlwZSogY29weSAoY29udGV4dCogY3R4dCkgZmluYWwgb3ZlcnJp ZGUKKyAgeworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyBhcnJheV90eXBlIChjdHh0LCBtX2xvYywg bV9lbGVtZW50X3R5cGUtPmNvcHkgKGN0eHQpLAorCQkJCSAgIG1fbnVtX2VsZW1lbnRzKTsKKyAg ICBjdHh0LT5yZWNvcmQgKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCiAgIGJv b2wgaXNfaW50ICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJv b2wgaXNfZmxvYXQgKCkgY29uc3QgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAg Ym9vbCBpc19ib29sICgpIGNvbnN0IGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CkBA IC04NjcsNyArOTQyLDggQEAgcHVibGljOgogCQkgdHlwZSAqcmV0dXJuX3R5cGUsCiAJCSBpbnQg bnVtX3BhcmFtcywKIAkJIHR5cGUgKipwYXJhbV90eXBlcywKLQkJIGludCBpc192YXJpYWRpYyk7 CisJCSBpbnQgaXNfdmFyaWFkaWMsCisJCSBpbnQgaXNfdGFyZ2V0X2J1aWx0aW4pOwogCiAgIHR5 cGUgKmRlcmVmZXJlbmNlICgpIGZpbmFsIG92ZXJyaWRlOwogICBmdW5jdGlvbl90eXBlICpkeW5f Y2FzdF9mdW5jdGlvbl90eXBlICgpIGZpbmFsIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KQEAg LTg3NSw2ICs5NTEsMjAgQEAgcHVibGljOgogCiAgIGJvb2wgaXNfc2FtZV90eXBlX2FzICh0eXBl ICpvdGhlcikgZmluYWwgb3ZlcnJpZGU7CiAKKyAgdHlwZSogY29weSAoY29udGV4dCogY3R4dCkg ZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIGF1dG9fdmVjPHR5cGUgKj4gbmV3X3BhcmFtc3t9Owor ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYXJhbV90eXBlcy5sZW5ndGggKCk7IGkrKykK KyAgICAgIG5ld19wYXJhbXMuc2FmZV9wdXNoIChtX3BhcmFtX3R5cGVzW2ldLT5jb3B5IChjdHh0 KSk7CisKKyAgICB0eXBlKiByZXN1bHQgPSBuZXcgZnVuY3Rpb25fdHlwZSAoY3R4dCwgbV9yZXR1 cm5fdHlwZS0+Y29weSAoY3R4dCksCisJCQkJICAgICAgbV9wYXJhbV90eXBlcy5sZW5ndGggKCks CisJCQkJICAgICAgbmV3X3BhcmFtcy5hZGRyZXNzICgpLAorCQkJCSAgICAgIG1faXNfdmFyaWFk aWMsIG1faXNfdGFyZ2V0X2J1aWx0aW4pOworICAgIGN0eHQtPnJlY29yZCAocmVzdWx0KTsKKyAg ICByZXR1cm4gcmVzdWx0OworICB9CisKICAgYm9vbCBpc19pbnQgKCkgY29uc3QgZmluYWwgb3Zl cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgYm9vbCBpc19mbG9hdCAoKSBjb25zdCBmaW5hbCBv dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICBib29sIGlzX2Jvb2wgKCkgY29uc3QgZmluYWwg b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTkwMyw2ICs5OTMsNyBAQCBwcml2YXRlOgog ICB0eXBlICptX3JldHVybl90eXBlOwogICBhdXRvX3ZlYzx0eXBlICo+IG1fcGFyYW1fdHlwZXM7 CiAgIGludCBtX2lzX3ZhcmlhZGljOworICBpbnQgbV9pc190YXJnZXRfYnVpbHRpbjsKIH07CiAK IGNsYXNzIGZpZWxkIDogcHVibGljIG1lbWVudG8KQEAgLTEwMDQsOSArMTA5NSwxMSBAQCBwdWJs aWM6CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0IDxwbGF5YmFjazo6Y29tcG91bmRfdHlwZSAqPiAo bV9wbGF5YmFja19vYmopOwogICB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgIGxvY2F0aW9u ICptX2xvYzsKICAgc3RyaW5nICptX25hbWU7CisKK3ByaXZhdGU6CiAgIGZpZWxkcyAqbV9maWVs ZHM7CiB9OwogCkBAIC0xMDE5LDYgKzExMTIsMTMgQEAgcHVibGljOgogCiAgIHN0cnVjdF8gKmR5 bl9jYXN0X3N0cnVjdCAoKSBmaW5hbCBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CiAKKyAgdHlw ZSogY29weSAoY29udGV4dCogY3R4dCkgZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIHR5cGUqIHJl c3VsdCA9IG5ldyBzdHJ1Y3RfIChjdHh0LCBtX2xvYywgbV9uYW1lKTsKKyAgICBjdHh0LT5yZWNv cmQgKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCiAgIHR5cGUgKgogICBhc190 eXBlICgpIHsgcmV0dXJuIHRoaXM7IH0KIApAQCAtMTA2Niw2ICsxMTY2LDEzIEBAIHB1YmxpYzoK IAogICB2b2lkIHJlcGxheV9pbnRvIChyZXBsYXllciAqcikgZmluYWwgb3ZlcnJpZGU7CiAKKyAg dHlwZSogY29weSAoY29udGV4dCogY3R4dCkgZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIHR5cGUq IHJlc3VsdCA9IG5ldyB1bmlvbl8gKGN0eHQsIG1fbG9jLCBtX25hbWUpOworICAgIGN0eHQtPnJl Y29yZCAocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKICAgYm9vbCBpc191bmlv biAoKSBjb25zdCBmaW5hbCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKIHByaXZhdGU6CkBA IC0xMjc0LDcgKzEzODEsOCBAQCBwdWJsaWM6CiAJICAgIGludCBudW1fcGFyYW1zLAogCSAgICBw YXJhbSAqKnBhcmFtcywKIAkgICAgaW50IGlzX3ZhcmlhZGljLAotCSAgICBlbnVtIGJ1aWx0X2lu X2Z1bmN0aW9uIGJ1aWx0aW5faWQpOworCSAgICBlbnVtIGJ1aWx0X2luX2Z1bmN0aW9uIGJ1aWx0 aW5faWQsCisJICAgIGludCBpc190YXJnZXRfYnVpbHRpbik7CiAKICAgdm9pZCByZXBsYXlfaW50 byAocmVwbGF5ZXIgKnIpIGZpbmFsIG92ZXJyaWRlOwogCkBAIC0xMzI5LDYgKzE0MzcsNyBAQCBw cml2YXRlOgogICBhdXRvX3ZlYzxsb2NhbCAqPiBtX2xvY2FsczsKICAgYXV0b192ZWM8YmxvY2sg Kj4gbV9ibG9ja3M7CiAgIHR5cGUgKm1fZm5fcHRyX3R5cGU7CisgIGludCBtX2lzX3RhcmdldF9i dWlsdGluOwogfTsKIAogY2xhc3MgYmxvY2sgOiBwdWJsaWMgbWVtZW50bwpAQCAtMTU5Nyw2ICsx NzA2LDMzIEBAIHByaXZhdGU6CiAgIGF1dG9fdmVjPHJ2YWx1ZSAqPiBtX2VsZW1lbnRzOwogfTsK IAorY2xhc3MgbWVtZW50b19vZl9uZXdfcnZhbHVlX3ZlY3Rvcl9wZXJtIDogcHVibGljIHJ2YWx1 ZQoreworcHVibGljOgorICBtZW1lbnRvX29mX25ld19ydmFsdWVfdmVjdG9yX3Blcm0gKGNvbnRl eHQgKmN0eHQsCisJCQkJICAgICBsb2NhdGlvbiAqbG9jLAorCQkJCSAgICAgcnZhbHVlICplbGVt ZW50czEsCisJCQkJICAgICBydmFsdWUgKmVsZW1lbnRzMiwKKwkJCQkgICAgIHJ2YWx1ZSAqbWFz ayk7CisKKyAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIGZpbmFsIG92ZXJyaWRlOwor CisgIHZvaWQgdmlzaXRfY2hpbGRyZW4gKHJ2YWx1ZV92aXNpdG9yICopIGZpbmFsIG92ZXJyaWRl OworCitwcml2YXRlOgorICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmluZyAoKSBmaW5hbCBvdmVy cmlkZTsKKyAgdm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKSBmaW5hbCBvdmVy cmlkZTsKKyAgZW51bSBwcmVjZWRlbmNlIGdldF9wcmVjZWRlbmNlICgpIGNvbnN0IGZpbmFsIG92 ZXJyaWRlCisgIHsKKyAgICByZXR1cm4gUFJFQ0VERU5DRV9QUklNQVJZOworICB9CisKK3ByaXZh dGU6CisgIHJ2YWx1ZSAqbV9lbGVtZW50czE7CisgIHJ2YWx1ZSAqbV9lbGVtZW50czI7CisgIHJ2 YWx1ZSAqbV9tYXNrOworfTsKKwogY2xhc3MgY3RvciA6IHB1YmxpYyBydmFsdWUKIHsKIHB1Ymxp YzoKQEAgLTE4NzksNiArMjAxNSwzNiBAQCBwcml2YXRlOgogICBydmFsdWUgKm1faW5kZXg7CiB9 OwogCitjbGFzcyB2ZWN0b3JfYWNjZXNzIDogcHVibGljIGx2YWx1ZQoreworcHVibGljOgorICB2 ZWN0b3JfYWNjZXNzIChjb250ZXh0ICpjdHh0LAorCQkgbG9jYXRpb24gKmxvYywKKwkJIHJ2YWx1 ZSAqdmVjdG9yLAorCQkgcnZhbHVlICppbmRleCkKKyAgOiBsdmFsdWUgKGN0eHQsIGxvYywgdmVj dG9yLT5nZXRfdHlwZSAoKS0+ZHluX2Nhc3RfdmVjdG9yX3R5cGUgKCkKKwkJCSAgICAgLT5nZXRf ZWxlbWVudF90eXBlICgpKSwKKyAgICBtX3ZlY3RvciAodmVjdG9yKSwKKyAgICBtX2luZGV4IChp bmRleCkKKyAge30KKworICB2b2lkIHJlcGxheV9pbnRvIChyZXBsYXllciAqcikgZmluYWwgb3Zl cnJpZGU7CisKKyAgdm9pZCB2aXNpdF9jaGlsZHJlbiAocnZhbHVlX3Zpc2l0b3IgKnYpIGZpbmFs IG92ZXJyaWRlOworCitwcml2YXRlOgorICBzdHJpbmcgKiBtYWtlX2RlYnVnX3N0cmluZyAoKSBm aW5hbCBvdmVycmlkZTsKKyAgdm9pZCB3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKSBm aW5hbCBvdmVycmlkZTsKKyAgZW51bSBwcmVjZWRlbmNlIGdldF9wcmVjZWRlbmNlICgpIGNvbnN0 IGZpbmFsIG92ZXJyaWRlCisgIHsKKyAgICByZXR1cm4gUFJFQ0VERU5DRV9QT1NURklYOworICB9 CisKK3ByaXZhdGU6CisgIHJ2YWx1ZSAqbV92ZWN0b3I7CisgIHJ2YWx1ZSAqbV9pbmRleDsKK307 CisKIGNsYXNzIGFjY2Vzc19maWVsZF9vZl9sdmFsdWUgOiBwdWJsaWMgbHZhbHVlCiB7CiBwdWJs aWM6CmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5jYyBiL2djYy9qaXQvbGliZ2Njaml0 LmNjCmluZGV4IDJkZWY1OGY2YWE3Li44MDU2ZDBjNzA1MiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9s aWJnY2NqaXQuY2MKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuY2MKQEAgLTE3NDUsNiArMTc0NSwy NCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2NvbnN0cnVjdG9yIChnY2Nfaml0X2NvbnRl eHQgKmN0eHQsCiAgICAgcmVpbnRlcnByZXRfY2FzdDxnY2M6OmppdDo6cmVjb3JkaW5nOjpydmFs dWUqKj4odmFsdWVzKSk7CiB9CiAKKy8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0 aW9uIGluIGxpYmdjY2ppdC5oLgorCisgICBBZnRlciBlcnJvci1jaGVja2luZywgdGhlIHJlYWwg d29yayBpcyBkb25lIGJ5IHRoZQorICAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6Y29udGV4dDo6Z2V0 X3RhcmdldF9idWlsdGluX2Z1bmN0aW9uIG1ldGhvZCwgaW4KKyAgIGppdC1yZWNvcmRpbmcuYy4g ICovCisKK2djY19qaXRfZnVuY3Rpb24gKgorZ2NjX2ppdF9jb250ZXh0X2dldF90YXJnZXRfYnVp bHRpbl9mdW5jdGlvbiAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCQkgICAgIGNvbnN0IGNo YXIgKm5hbWUpCit7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGN0eHQsIE5VTEwsIE5VTEwsICJO VUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAg UkVUVVJOX05VTExfSUZfRkFJTCAobmFtZSwgY3R4dCwgTlVMTCwgIk5VTEwgbmFtZSIpOworCisg IHJldHVybiBzdGF0aWNfY2FzdCA8Z2NjX2ppdF9mdW5jdGlvbiAqPiAoCisgICAgY3R4dC0+Z2V0 X3RhcmdldF9idWlsdGluX2Z1bmN0aW9uIChuYW1lKSk7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBv aW50LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxpYmdjY2ppdC5oLiAgKi8KIAogZXh0ZXJuIGdjY19q aXRfbHZhbHVlICoKQEAgLTI0MjIsNiArMjQ0MCw5IEBAIGdjY19qaXRfY29udGV4dF9uZXdfY2Fz dCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICAvKiBMT0MgY2FuIGJlIE5VTEwuICAqLwogICBS RVRVUk5fTlVMTF9JRl9GQUlMIChydmFsdWUsIGN0eHQsIGxvYywgIk5VTEwgcnZhbHVlIik7CiAg IFJFVFVSTl9OVUxMX0lGX0ZBSUwgKHR5cGUsIGN0eHQsIGxvYywgIk5VTEwgdHlwZSIpOworICBn Y2M6OmppdDo6cmVjb3JkaW5nOjp2ZWN0b3JfdHlwZSAqdmVjdG9yX3R5cGUgPSB0eXBlLT5keW5f Y2FzdF92ZWN0b3JfdHlwZSAoKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAodmVjdG9yX3R5cGUg PT0gTlVMTCwgY3R4dCwgbG9jLAorCQkgICAgICAgImNhbm5vdCBjYXN0IHZlY3RvciB0eXBlcyIp OwogICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjMgKAogICAgIGlzX3ZhbGlkX2Nhc3QgKHJ2 YWx1ZS0+Z2V0X3R5cGUgKCksIHR5cGUpLAogICAgIGN0eHQsIGxvYywKQEAgLTI0ODgsNiArMjUw OSwzOSBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X2FjY2VzcyAoZ2NjX2ppdF9jb250ZXh0 ICpjdHh0LAogICByZXR1cm4gKGdjY19qaXRfbHZhbHVlICopY3R4dC0+bmV3X2FycmF5X2FjY2Vz cyAobG9jLCBwdHIsIGluZGV4KTsKIH0KIAorLyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVz Y3JpcHRpb24gaW4gbGliZ2Njaml0LmguCisKKyAgIEFmdGVyIGVycm9yLWNoZWNraW5nLCB0aGUg cmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCisgICBnY2M6OmppdDo6cmVjb3JkaW5nOjpjb250ZXh0 OjpuZXdfdmVjdG9yX2FjY2VzcyBtZXRob2QgaW4KKyAgIGppdC1yZWNvcmRpbmcuY2MuICAqLwor CitleHRlcm4gZ2NjX2ppdF9sdmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld192ZWN0b3JfYWNj ZXNzIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9j LAorCQkJCSAgIGdjY19qaXRfcnZhbHVlICp2ZWN0b3IsCisJCQkJICAgZ2NjX2ppdF9ydmFsdWUg KmluZGV4KQoreworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBOVUxMLCBsb2MsICJOVUxM IGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgLyog TE9DIGNhbiBiZSBOVUxMLiAgKi8KKyAgUkVUVVJOX05VTExfSUZfRkFJTCAodmVjdG9yLCBjdHh0 LCBsb2MsICJOVUxMIHZlY3RvciIpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChpbmRleCwgY3R4 dCwgbG9jLCAiTlVMTCBpbmRleCIpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjIgKAor ICAgIHZlY3Rvci0+Z2V0X3R5cGUgKCktPmR5bl9jYXN0X3ZlY3Rvcl90eXBlICgpLAorICAgIGN0 eHQsIGxvYywKKyAgICAidmVjdG9yOiAlcyAodHlwZTogJXMpIGlzIG5vdCBhIHZlY3RvciIsCisg ICAgdmVjdG9yLT5nZXRfZGVidWdfc3RyaW5nICgpLAorICAgIHZlY3Rvci0+Z2V0X3R5cGUgKCkt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjIgKAor ICAgIGluZGV4LT5nZXRfdHlwZSAoKS0+aXNfbnVtZXJpYyAoKSwKKyAgICBjdHh0LCBsb2MsCisg ICAgImluZGV4OiAlcyAodHlwZTogJXMpIGlzIG5vdCBvZiBudW1lcmljIHR5cGUiLAorICAgIGlu ZGV4LT5nZXRfZGVidWdfc3RyaW5nICgpLAorICAgIGluZGV4LT5nZXRfdHlwZSAoKS0+Z2V0X2Rl YnVnX3N0cmluZyAoKSk7CisKKyAgcmV0dXJuIChnY2Nfaml0X2x2YWx1ZSAqKWN0eHQtPm5ld192 ZWN0b3JfYWNjZXNzIChsb2MsIHZlY3RvciwgaW5kZXgpOworfQorCiAvKiBQdWJsaWMgZW50cnlw b2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJyb3It Y2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKQEAgLTQwNTYsNiArNDExMCw3 OSBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX3ZlY3RvciAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LAogICAgICAoZ2NjOjpqaXQ6OnJlY29yZGluZzo6cnZhbHVlICoqKWVsZW1lbnRz KTsKIH0KIAorLyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Nj aml0LmguCisKKyAgIEFmdGVyIGVycm9yLWNoZWNraW5nLCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUg YnkgdGhlCisgICBnY2M6OmppdDo6cmVjb3JkaW5nOjpjb250ZXh0OjpuZXdfcnZhbHVlX3ZlY3Rv cl9wZXJtIG1ldGhvZCwgaW4KKyAgIGppdC1yZWNvcmRpbmcuY2MuICAqLworCitnY2Nfaml0X3J2 YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV92ZWN0b3JfcGVybSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LAorCQkJCQlnY2Nfaml0X2xvY2F0aW9uICpsb2MsCisJCQkJCWdjY19qaXRf cnZhbHVlICplbGVtZW50czEsCisJCQkJCWdjY19qaXRfcnZhbHVlICplbGVtZW50czIsCisJCQkJ CWdjY19qaXRfcnZhbHVlICptYXNrKQoreworICBSRVRVUk5fTlVMTF9JRl9GQUlMIChjdHh0LCBO VUxMLCBsb2MsICJOVUxMIGN0eHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2Vy ICgpKTsKKworICAvKiBMT0MgY2FuIGJlIE5VTEwuICAqLworCisgIGdjYzo6aml0OjpyZWNvcmRp bmc6OnR5cGUgKmVsZW1lbnRzMV90eXBlID0gZWxlbWVudHMxLT5nZXRfdHlwZSAoKTsKKyAgZ2Nj OjpqaXQ6OnJlY29yZGluZzo6dHlwZSAqZWxlbWVudHMyX3R5cGUgPSBlbGVtZW50czItPmdldF90 eXBlICgpOworICBSRVRVUk5fTlVMTF9JRl9GQUlMX1BSSU5URjQgKAorICAgIGNvbXBhdGlibGVf dHlwZXMgKGVsZW1lbnRzMS0+Z2V0X3R5cGUgKCktPnVucXVhbGlmaWVkICgpLAorCQkgICAgICBl bGVtZW50czItPmdldF90eXBlICgpLT51bnF1YWxpZmllZCAoKSksCisgICAgY3R4dCwgbG9jLAor ICAgICJtaXNtYXRjaGluZyB0eXBlcyBmb3IgdmVjdG9yIHBlcm06IgorICAgICIgZWxlbWVudHMx OiAlcyAodHlwZTogJXMpIGVsZW1lbnRzMjogJXMgKHR5cGU6ICVzKSIsCisgICAgZWxlbWVudHMx LT5nZXRfZGVidWdfc3RyaW5nICgpLAorICAgIGVsZW1lbnRzMV90eXBlLT5nZXRfZGVidWdfc3Ry aW5nICgpLAorICAgIGVsZW1lbnRzMi0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKKyAgICBlbGVtZW50 czJfdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAgZ2NjOjpqaXQ6OnJlY29yZGluZzo6 dHlwZSAqbWFza190eXBlID0gbWFzay0+Z2V0X3R5cGUgKCk7CisgIGdjYzo6aml0OjpyZWNvcmRp bmc6OnZlY3Rvcl90eXBlICptYXNrX3ZlY3Rvcl90eXBlID0KKyAgICBtYXNrX3R5cGUtPmR5bl9j YXN0X3ZlY3Rvcl90eXBlICgpOworICBnY2M6OmppdDo6cmVjb3JkaW5nOjp2ZWN0b3JfdHlwZSAq ZWxlbWVudHMxX3ZlY3Rvcl90eXBlID0KKyAgICBlbGVtZW50czFfdHlwZS0+ZHluX2Nhc3RfdmVj dG9yX3R5cGUgKCk7CisKKyAgc2l6ZV90IG1hc2tfbGVuID0gbWFza192ZWN0b3JfdHlwZS0+Z2V0 X251bV91bml0cyAoKTsKKyAgc2l6ZV90IGVsZW1lbnRzMV9sZW4gPSBlbGVtZW50czFfdmVjdG9y X3R5cGUtPmdldF9udW1fdW5pdHMgKCk7CisKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYy ICgKKyAgICBtYXNrX2xlbiA9PSBlbGVtZW50czFfbGVuLAorICAgIGN0eHQsIGxvYywKKyAgICAi bWlzbWF0Y2hpbmcgbGVuZ3RoIGZvciBtYXNrOiIKKyAgICAiIGVsZW1lbnRzMSBsZW5ndGg6ICVs ZCBtYXNrIGxlbmd0aDogJWxkIiwKKyAgICBtYXNrX2xlbiwKKyAgICBlbGVtZW50czFfbGVuKTsK KworICBnY2M6OmppdDo6cmVjb3JkaW5nOjp0eXBlICptYXNrX2VsZW1lbnRfdHlwZSA9CisgICAg bWFza192ZWN0b3JfdHlwZS0+Z2V0X2VsZW1lbnRfdHlwZSAoKTsKKworICBSRVRVUk5fTlVMTF9J Rl9GQUlMICgKKyAgICBtYXNrX2VsZW1lbnRfdHlwZS0+aXNfaW50ICgpLAorICAgIGN0eHQsIGxv YywKKyAgICAiZWxlbWVudHMgb2YgbWFzayBtdXN0IGJlIG9mIGFuIGludGVnZXIgdHlwZSIpOwor CisgIGdjYzo6aml0OjpyZWNvcmRpbmc6OnR5cGUgKmVsZW1lbnRzMV9lbGVtZW50X3R5cGUgPQor ICAgIGVsZW1lbnRzMV92ZWN0b3JfdHlwZS0+Z2V0X2VsZW1lbnRfdHlwZSAoKTsKKyAgc2l6ZV90 IG1hc2tfZWxlbWVudF9zaXplID0gbWFza19lbGVtZW50X3R5cGUtPmdldF9zaXplICgpOworICBz aXplX3QgZWxlbWVudHMxX2VsZW1lbnRfc2l6ZSA9IGVsZW1lbnRzMV9lbGVtZW50X3R5cGUtPmdl dF9zaXplICgpOworCisgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMiAoCisgICAgbWFza19l bGVtZW50X3NpemUgPT0gZWxlbWVudHMxX2VsZW1lbnRfc2l6ZSwKKyAgICBjdHh0LCBsb2MsCisg ICAgIm1pc21hdGNoaW5nIHNpemUgZm9yIG1hc2sgZWxlbWVudCB0eXBlOiIKKyAgICAiIGVsZW1l bnRzMSBlbGVtZW50IHR5cGU6ICVsZCBtYXNrIGVsZW1lbnQgdHlwZTogJWxkIiwKKyAgICBtYXNr X2VsZW1lbnRfc2l6ZSwKKyAgICBlbGVtZW50czFfZWxlbWVudF9zaXplKTsKKworICByZXR1cm4g KGdjY19qaXRfcnZhbHVlICopY3R4dC0+bmV3X3J2YWx1ZV92ZWN0b3JfcGVybSAobG9jLCBlbGVt ZW50czEsCisJCQkJCQkJIGVsZW1lbnRzMiwgbWFzayk7Cit9CisKIC8qIEEgbXV0ZXggYXJvdW5k IHRoZSBjYWNoZWQgc3RhdGUgaW4gcGFyc2VfYmFzZXZlci4KICAgIElkZWFsbHkgdGhpcyB3b3Vs ZCBiZSB3aXRoaW4gcGFyc2VfYmFzZXZlciwgYnV0IHRoZSBtdXRleCBpcyBvbmx5IG5lZWRlZAog ICAgYnkgbGliZ2Njaml0LiAgKi8KZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmggYi9n Y2Mvaml0L2xpYmdjY2ppdC5oCmluZGV4IDA1N2QzZTU4ZTczLi44MjFhZTBmN2E1NiAxMDA2NDQK LS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBAIC02 MDQsNyArNjA0LDkgQEAgZW51bSBnY2Nfaml0X3R5cGVzCiAgIEdDQ19KSVRfVFlQRV9JTlQxNl9U LAogICBHQ0NfSklUX1RZUEVfSU5UMzJfVCwKICAgR0NDX0pJVF9UWVBFX0lOVDY0X1QsCi0gIEdD Q19KSVRfVFlQRV9JTlQxMjhfVAorICBHQ0NfSklUX1RZUEVfSU5UMTI4X1QsCisKKyAgR0NDX0pJ VF9UWVBFX0JGTE9BVDE2LAogfTsKIAogZXh0ZXJuIGdjY19qaXRfdHlwZSAqCkBAIC0xMDIxLDYg KzEwMjMsMTcgQEAgZXh0ZXJuIGdjY19qaXRfbHZhbHVlICoKIGdjY19qaXRfZ2xvYmFsX3NldF9p bml0aWFsaXplcl9ydmFsdWUgKGdjY19qaXRfbHZhbHVlICpnbG9iYWwsCiAJCQkJICAgICAgIGdj Y19qaXRfcnZhbHVlICppbml0X3ZhbHVlKTsKIAorLyogQ3JlYXRlIGEgcmVmZXJlbmNlIHRvIGEg bWFjaGluZS1zcGVjaWZpYyBidWlsdGluIGZ1bmN0aW9uIChzb21ldGltZXMgY2FsbGVkCisgICBp bnRyaW5zaWMgZnVuY3Rpb25zKS4KKworICAgVGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRkZWQg aW4gTElCR0NDSklUX0FCSV8yNTsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNlIHVz aW5nCisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9UQVJHRVRfQlVJTFRJTgorKi8KK2V4dGVy biBnY2Nfaml0X2Z1bmN0aW9uICoKK2djY19qaXRfY29udGV4dF9nZXRfdGFyZ2V0X2J1aWx0aW5f ZnVuY3Rpb24gKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpu YW1lKTsKKwogI2RlZmluZSBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X2dsb2JhbF9zZXRfaW5pdGlh bGl6ZXIKIAogLyogU2V0IGFuIGluaXRpYWwgdmFsdWUgZm9yIGEgZ2xvYmFsLCB3aGljaCBtdXN0 IGJlIGFuIGFycmF5IG9mCkBAIC0xMjkyLDYgKzEzMDUsMjAgQEAgZ2NjX2ppdF9jb250ZXh0X25l d19hcnJheV9hY2Nlc3MgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkJCQkgIGdjY19qaXRfcnZh bHVlICpwdHIsCiAJCQkJICBnY2Nfaml0X3J2YWx1ZSAqaW5kZXgpOwogCisjZGVmaW5lIExJQkdD Q0pJVF9IQVZFX1RBUkdFVF9CVUlMVElOCisKKy8qIEdldCB0aGUgZWxlbWVudCBhdCBJTkRFWCBp biBWRUNUT1IuCisKKyAgIFRoaXMgQVBJIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdDQ0pJ VF9BQklfMjU7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZworICAgICAj aWZkZWYgTElCR0NDSklUX0hBVkVfVEFSR0VUX0JVSUxUSU4KKyovCitleHRlcm4gZ2NjX2ppdF9s dmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld192ZWN0b3JfYWNjZXNzIChnY2Nfaml0X2NvbnRl eHQgKmN0eHQsCisJCQkJICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLAorCQkJCSAgIGdjY19qaXRf cnZhbHVlICp2ZWN0b3IsCisJCQkJICAgZ2NjX2ppdF9ydmFsdWUgKmluZGV4KTsKKwogLyogRmll bGQgYWNjZXNzIGlzIHByb3ZpZGVkIHNlcGFyYXRlbHkgZm9yIGJvdGggbHZhbHVlcyBhbmQgcnZh bHVlcy4gICovCiAKIC8qIEFjY2Vzc2luZyBhIGZpZWxkIG9mIGFuIGx2YWx1ZSBvZiBzdHJ1Y3Qg dHlwZSwgYW5hbG9nb3VzIHRvOgpAQCAtMTgwNiw2ICsxODMzLDIxIEBAIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21fdmVjdG9yIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJCQkJCXNp emVfdCBudW1fZWxlbWVudHMsCiAJCQkJCWdjY19qaXRfcnZhbHVlICoqZWxlbWVudHMpOwogCisv KiBCdWlsZCBhIHBlcm11dGF0aW9uIHZlY3RvciBydmFsdWUgZnJvbSBhbiAzIGFycmF5cyBvZiBl bGVtZW50cy4KKworICAgInZlY190eXBlIiBzaG91bGQgYmUgYSB2ZWN0b3IgdHlwZSwgY3JlYXRl ZCB1c2luZyBnY2Nfaml0X3R5cGVfZ2V0X3ZlY3Rvci4KKworICAgVGhpcyBBUEkgZW50cnlwb2lu dCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8yNTsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAg IHByZXNlbmNlIHVzaW5nCisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9UQVJHRVRfQlVJTFRJ TgorKi8KK2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV92ZWN0b3JfcGVybSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorCQkJCQlnY2Nfaml0X2xvY2F0 aW9uICpsb2MsCisJCQkJCWdjY19qaXRfcnZhbHVlICplbGVtZW50czEsCisJCQkJCWdjY19qaXRf cnZhbHVlICplbGVtZW50czIsCisJCQkJCWdjY19qaXRfcnZhbHVlICptYXNrKTsKKwogI2RlZmlu ZSBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X3ZlcnNpb24KIAogLyogRnVuY3Rpb25zIHRvIHJldHJp ZXZlIGxpYmdjY2ppdCB2ZXJzaW9uLgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQubWFw IGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCmluZGV4IDI1NDYzYjk0ZmU4Li41Nzc1MGUyOThlNCAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQubWFwCisrKyBiL2djYy9qaXQvbGliZ2Njaml0 Lm1hcApAQCAtMjcxLDMgKzI3MSwxMCBAQCBMSUJHQ0NKSVRfQUJJXzI0IHsKICAgICBnY2Nfaml0 X2x2YWx1ZV9zZXRfYWxpZ25tZW50OwogICAgIGdjY19qaXRfbHZhbHVlX2dldF9hbGlnbm1lbnQ7 CiB9IExJQkdDQ0pJVF9BQklfMjM7CisKK0xJQkdDQ0pJVF9BQklfMjUgeworICBnbG9iYWw6Cisg ICAgZ2NjX2ppdF9jb250ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbjsKKyAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV92ZWN0b3JfcGVybTsKKyAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3ZlY3Rvcl9hY2Nlc3M7Cit9IExJQkdDQ0pJVF9BQklfMjQ7CmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0c3VpdGUv aml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4IDgwNjA2MDc2ZTc4Li45ODhlMTRh ZTliYyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRl c3RzLmgKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgK QEAgLTMxOSw2ICszMTksOSBAQAogLyogdGVzdC1zZXR0aW5nLWFsaWdubWVudC5jOiBUaGlzIGNh bid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQKICAgIGlzIHRhcmdldC1zcGVjaWZp Yy4gICovCiAKKy8qIHRlc3QtdGFyZ2V0LWJ1aWx0aW5zLmM6IFRoaXMgY2FuJ3QgYmUgaW4gdGhl IHRlc3RjYXNlcyBhcnJheSBhcyBpdAorICAgaXMgdGFyZ2V0LXNwZWNpZmljLiAgKi8KKwogLyog dGVzdC1zdHJpbmctbGl0ZXJhbC5jICovCiAjZGVmaW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2Rl X3N0cmluZ19saXRlcmFsCiAjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX3N0cmluZ19s aXRlcmFsCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXRhcmdldC1idWls dGlucy5jIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC10YXJnZXQtYnVpbHRpbnMuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGZmYjQ4ZTk3ZjYKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXRhcmdldC1idWlsdGlucy5jCkBA IC0wLDAgKzEsNzcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQtKi0qIH0g fSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1 ZGUgImxpYmdjY2ppdC5oIgorCisjZGVmaW5lIFRFU1RfUFJPVklERVNfTUFJTgorI2luY2x1ZGUg Imhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwg dm9pZCAqdXNlcl9kYXRhKQoreworICBDSEVDS19OT05fTlVMTCAoZ2NjX2ppdF9jb250ZXh0X2dl dF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiAoY3R4dCwgIl9fYnVpbHRpbl9pYTMyX3hnZXRidiIp KTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqYnVpbHRpbl9laF9wb2ludGVyID0gZ2NjX2ppdF9jb250 ZXh0X2dldF90YXJnZXRfYnVpbHRpbl9mdW5jdGlvbiAoY3R4dCwgIl9fYnVpbHRpbl9laF9wb2lu dGVyIik7CisgIENIRUNLX05PTl9OVUxMIChidWlsdGluX2VoX3BvaW50ZXIpOworCisgIGdjY19q aXRfdHlwZSAqaW50X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwg R0NDX0pJVF9UWVBFX0lOVCk7CisgIGdjY19qaXRfdHlwZSAqdm9pZF9wdHIgPQorICAgIGdjY19q aXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX1ZPSURfUFRSKTsKKyAgZ2Nj X2ppdF9mdW5jdGlvbiAqZnVuY19tYWluID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0 aW9uIChjdHh0LCBOVUxMLAorCQkJCSAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkg IGludF90eXBlLAorCQkJCSAgIm1haW4iLAorCQkJCSAgMCwgTlVMTCwKKwkJCQkgIDApOworICBn Y2Nfaml0X3J2YWx1ZSAqemVybyA9IGdjY19qaXRfY29udGV4dF96ZXJvIChjdHh0LCBpbnRfdHlw ZSk7CisgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sg KGZ1bmNfbWFpbiwgTlVMTCk7CisgIGdjY19qaXRfbHZhbHVlICp2YXJpYWJsZSA9IGdjY19qaXRf ZnVuY3Rpb25fbmV3X2xvY2FsKGZ1bmNfbWFpbiwgTlVMTCwgdm9pZF9wdHIsICJ2YXJpYWJsZSIp OworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgTlVMTCwgdmFyaWFibGUs CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsIChjdHh0LCBOVUxMLCBidWlsdGluX2VoX3Bv aW50ZXIsIDEsICZ6ZXJvKSk7CisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9j aywgTlVMTCwgemVybyk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIENIRUNLX05PTl9OVUxMIChyZXN1 bHQpOworfQorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgLyogIFRo aXMgaXMgdGhlIHNhbWUgYXMgdGhlIG1haW4gcHJvdmlkZWQgYnkgaGFybmVzcy5oLCBidXQgaXQg Zmlyc3QgY3JlYXRlIGEgZHVtbXkgY29udGV4dCBhbmQgY29tcGlsZQorICAgICAgaW4gb3JkZXIg dG8gYWRkIHRoZSB0YXJnZXQgYnVpbHRpbnMgdG8gbGliZ2Njaml0J3MgaW50ZXJuYWwgc3RhdGUu ICAqLworICBnY2Nfaml0X2NvbnRleHQgKmN0eHQ7CisgIGN0eHQgPSBnY2Nfaml0X2NvbnRleHRf YWNxdWlyZSAoKTsKKyAgaWYgKCFjdHh0KQorICAgIHsKKyAgICAgIGZhaWwgKCJnY2Nfaml0X2Nv bnRleHRfYWNxdWlyZSBmYWlsZWQiKTsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisgIGdjY19q aXRfcmVzdWx0ICpyZXN1bHQ7CisgIHJlc3VsdCA9IGdjY19qaXRfY29udGV4dF9jb21waWxlIChj dHh0KTsKKyAgZ2NjX2ppdF9yZXN1bHRfcmVsZWFzZSAocmVzdWx0KTsKKyAgZ2NjX2ppdF9jb250 ZXh0X3JlbGVhc2UgKGN0eHQpOworCisgIGludCBpOworCisgIGZvciAoaSA9IDE7IGkgPD0gNTsg aSsrKQorICAgIHsKKyAgICAgIHNucHJpbnRmICh0ZXN0LCBzaXplb2YgKHRlc3QpLAorCQkiJXMg aXRlcmF0aW9uICVkIG9mICVkIiwKKyAgICAgICAgICAgICAgICBleHRyYWN0X3Byb2duYW1lIChh cmd2WzBdKSwKKyAgICAgICAgICAgICAgICBpLCA1KTsKKworICAgICAgLy9wcmludGYgKCJJVEVS QVRJT04gJWRcbiIsIGkpOworICAgICAgdGVzdF9qaXQgKGFyZ3ZbMF0sIE5VTEwpOworICAgICAg Ly9wcmludGYgKCJcbiIpOworICAgIH0KKworICB0b3RhbHMgKCk7CisKKyAgcmV0dXJuIDA7Cit9 Ci0tIAoyLjI2LjIuNy5nMTlkYjljZmI2OC5kaXJ0eQoK --=-V3+hIAvUMa/WcLvWzNM2--