From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ste-pvt-msa1.bahnhof.se (ste-pvt-msa1.bahnhof.se [213.80.101.70]) by sourceware.org (Postfix) with ESMTPS id F342B3858D37 for ; Mon, 20 Nov 2023 22:15:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F342B3858D37 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=bahnhof.se Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=bahnhof.se ARC-Filter: OpenARC Filter v1.0.0 sourceware.org F342B3858D37 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=213.80.101.70 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700518534; cv=none; b=m/1DlQ+ucdJLCyHF6UMTMto6h+wfNnwEEY0MvdH2ljK4l+Cu+heGU8pqMsdGTfaZAUgLxC7vK2Za5fOseASpitTOZ37lr8AT8966WyFpNwgZbHMlAKs9PRvdI5vdpfCVDaZyYHkEzIEYpZk3mXiuqRQJN9E2nAySmTFzcxw2NvM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700518534; c=relaxed/simple; bh=gcvAOGFd5134KhDNCBCUtoT39loAykSt1cSGdHYjLIY=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=pewhXCZc92kHHPv4voLf6Oib621zeEGtnfRy5ATD7ZWhK+qsnJXUqUI+XCgLtC5YCkRZnWRUkqMmsf+kIOl4niFWgv1UVk9YRxrGzm8xKycizD8pDrDyXUJgCqx28GTXxYSIW5XrDlxUWpt+qmVe6t+WWFDuc5XeuQOdT+DsHLw= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from localhost (localhost [127.0.0.1]) by ste-pvt-msa1.bahnhof.se (Postfix) with ESMTP id 1A45F3F469 for ; Mon, 20 Nov 2023 23:15:29 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at bahnhof.se X-Spam-Score: -2.11 X-Spam-Level: X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,HTML_MESSAGE,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 Authentication-Results: ste-pvt-msa1.bahnhof.se (amavisd-new); dkim=pass (2048-bit key) header.d=bahnhof.se Received: from ste-pvt-msa1.bahnhof.se ([127.0.0.1]) by localhost (ste-pvt-msa1.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Fhp55EHPxwFu for ; Mon, 20 Nov 2023 23:15:27 +0100 (CET) Received: by ste-pvt-msa1.bahnhof.se (Postfix) with ESMTPA id 2F7EE3F386 for ; Mon, 20 Nov 2023 23:15:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=bahnhof.se; s=default; t=1700518527; bh=gcvAOGFd5134KhDNCBCUtoT39loAykSt1cSGdHYjLIY=; h=Date:Subject:To:References:From:In-Reply-To:From; b=iQEKi/w0u5DbGalGcysVxRsFqUCH5NDIJMQHahu4Q32FpP8LKemJo0rAx3zQKxWp5 X9o4DmmfSedkYlpPFWTT3PLBJ/QnZf23xvF0K4xbBaMRrTVdcLwuIZIEp0uJu5mBng yug0P/yzX14MwQoGpIgEz340IbE42j2b3c+Aua55vY/JORLeg1nVd4Zd4hVRLh3P/t E6OgMnMaDeryZhshx0jNf0f6PtPyZ4cpNHV9Mg6YY5PbEaCIoIcbXhyE5x6mvmxY88 JsiPm21UuC8lYFXZlBOCqGzuYpAT4c0zNuGeM0rsbHwskMuQqqlxmZI26kKy5G53nj FjDpiRK+1xD4Q== Content-Type: multipart/mixed; boundary="------------8azMFtuMl8jGnpIImOb8BeLZ" Message-ID: Date: Mon, 20 Nov 2023 23:15:27 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 2/2] jit: Complex types and loong constants Content-Language: en-US To: jit@gcc.gnu.org References: <697d6d25-c8fb-452b-8997-7ea28b6eb659@bahnhof.se> From: Petter Tomner In-Reply-To: <697d6d25-c8fb-452b-8997-7ea28b6eb659@bahnhof.se> X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------8azMFtuMl8jGnpIImOb8BeLZ Content-Type: multipart/alternative; boundary="------------3mhukCX0kuxoX2ph2sJ0ffJy" --------------3mhukCX0kuxoX2ph2sJ0ffJy Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit This patch adds the possibility to make the following constants: * long long * long double * complex long double The long long one is needed for 32bit systems to make 64bit literals without union workarounds. The new entrypoints are: gcc_jit_context_new_rvalue_from_long_long gcc_jit_context_new_rvalue_from_long_double gcc_jit_context_new_rvalue_from_complex_long_double The patch also fixes a issue with the reproducer's debug c-file writer, which does not handle floating point numbers very well. I.e. infs, NaN and losing precision on doubles. make check-jit runs fine with the patch series on 64bit Debian as well as on 32bit Debian in a VM, with a GNU/Linux setup. See attachment. --------------3mhukCX0kuxoX2ph2sJ0ffJy-- --------------8azMFtuMl8jGnpIImOb8BeLZ Content-Type: text/x-patch; charset=UTF-8; name="0002-long-long.patch" Content-Disposition: attachment; filename="0002-long-long.patch" Content-Transfer-Encoding: base64 RnJvbSBkYWM5ZDYxMTgwNDllMWJlMzY1MTdkMjM2MWJiZmFkYWQ1YzczNjgw IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVy IDx0b21uZXJAYmFobmhvZi5zZT4KRGF0ZTogU2F0LCAxNiBPY3QgMjAyMSAy MTo1NToyMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMi8yXSBsb25nIGxvbmcK CkFkZCBsb25nIGxvbmcsIGxvbmcgZG91YmxlIGFuZCBjb21wbGV4IGxvbmcg ZG91YmxlIGNvbnN0YW50cwoKVGhpcyBwYXRjaCBhZGRzIGVudHJ5cG9pbnRz IHRvIG1ha2UgY29uc3RhbnRzIChsaXRlcmFscykgZm9yIGxvbmcgbG9uZywK bG9uZyBkb3VibGUgYW5kIGNvbXBsZXggbG9uZyBkb3VibGUgdHlwZXMuCgpB bHNvLCBpdCBmaXhlcyBwcm9ibGVtcyB3aXRoIGFsbCBmbG9hdGluZyBwb2lu dCBudW1iZXJzIGluIHdyaXRlX3JlcHJvZHVjZXIuCkkuZS4gc3VwcG9ydCBO QU4gYW5kIElORiB2YWx1ZXMsIGFzd2VsbCBhcyBwcm9wZXIgcHJlY2lzaW9u IGZvciBkb3VibGUKYW5kIGxvbmcgZG91YmxlLiBXaGljaCBpcyBuZWVkZWQg Zm9yIHRlc3RpbmcgdGhpcyBwYXRjaC4KClNpZ25lZC1vZmYtYnk6CjIwMjEt MTAtMjEgIFBldHRlciBUb21uZXIgIDx0b21uZXJAYmFobmhvZi5zZT4KCmdj Yy9qaXQvCgkqIGppdC1wbGF5YmFjay5jIDoKCShuZXdfcnZhbHVlX2Zyb21f Y29uc3QgPGxvbmcgbG9uZz4pOiBOZXcKCShuZXdfcnZhbHVlX2Zyb21fY29u c3QgPGxvbmc+KTogVXNlcyBsb25nIGxvbmcgaW5zdGVhZAoJKG5ld19ydmFs dWVfZnJvbV9jb25zdCA8bG9uZyBkb3VibGU+KTogTmV3CgkobmV3X3J2YWx1 ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBsb25nIGRvdWJsZT4pIDogTmV3Cgkq IGppdC1yZWNvcmRpbmcuYyA6CgkoZHVtcF9yZXByb2R1Y2VyX3RvX2ZpbGUp IDogVHlwZSBwdW5uaW5nIE5BTnMKCShyZXByb2R1Y2VyX3dyaXRlX2Fycikg OiBhcnIgLT4gImNoYXIgYXJyYXkgbGl0ZXJhbCItc3RyaW5nCgkobWVtZW50 b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgbG9uZz4pIDogTmV3 CgkobWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgZG91 YmxlPikgOiBOZXcKCShtZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25z dCA8X0NvbXBsZXggbG9uZyBkb3VibGU+KSA6IE5ldwoJKG1lbWVudG9fb2Zf bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+OjptYWtlX2RlYnVnX3N0 cmluZyk6CgklZyBpbnN0ZWFkIG9mICVmCgkobWVtZW50b19vZl9uZXdfcnZh bHVlX2Zyb21fY29uc3QgPGRvdWJsZT46OndyaXRlX3JlcHJvZHVjZXIpOgoJ JWEgaW5zdGVhZCBvZiAlZiwgaGFuZGxlIE5BTiBhbmQgSU5GCgkobWVtZW50 b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPF9Db21wbGV4IGRvdWJsZT46 OndyaXRlX3JlcHJvZHVjZXIpOgoJJWEgaW5zdGVhZCBvZiAlZiwgaGFuZGxl IE5BTiBhbmQgSU5GLiBVc2UgQ01QTFggbWFjcm8uCgkqIGxpYmdjY2ppdC5j IDoKCSogbGliZ2Njaml0LmggOgoJKExJQkdDQ0pJVF9IQVZFX0xPTkdMT05H X0NPTlNUQU5UUykgOiBOZXcKCShnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2xvbmdfbG9uZykgOiBOZXcKCShnY2Nfaml0X2NvbnRleHRfbmV3 X3J2YWx1ZV9mcm9tX2xvbmdfZG91YmxlKSA6IE5ldwoJKGdjY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZSkgOiBO ZXcKCSogbGliZ2Njaml0KysuaCA6IE5ldyBlbnRyeXBvaW50cwoJKiBsaWJn Y2NqaXQubWFwOiBOZXcgZW50cnlwb2ludHMgYWRkZWQgdG8gQUJJIDI2Cgpn Y2MvdGVzdHN1aXRlLwoJKiBqaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3Rz Lmg6IEFkZGVkIHRlc3QtbG9uZy1saXRlcmFscy5jCgkqIGppdC5kZy90ZXN0 LWxvbmctbGl0ZXJhbHMuYzogTmV3CgpnY2Mvaml0L2RvY3MvdG9waWNzLwoJ KiBjb21wYXRpYmlsaXR5LnJzdCA6IFVwZGF0ZWQgZG9jcwoJKiBleHByZXNz aW9ucy5yc3QKLS0tCiBnY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxp dHkucnN0ICAgICAgICB8ICAgNiArLQogZ2NjL2ppdC9kb2NzL3RvcGljcy9l eHByZXNzaW9ucy5yc3QgICAgICAgICAgfCAgNDggKy0KIGdjYy9qaXQvaml0 LXBsYXliYWNrLmNjICAgICAgICAgICAgICAgICAgICAgIHwgMTQ0ICsrKysr LQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjICAgICAgICAgICAgICAgICAg ICAgfCA0NDIgKysrKysrKysrKysrKysrKysrLQogZ2NjL2ppdC9saWJnY2Nq aXQrKy5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzkgKysKIGdjYy9q aXQvbGliZ2Njaml0LmNjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ2 ICsrCiBnY2Mvaml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAzMyArLQogZ2NjL2ppdC9saWJnY2NqaXQubWFwICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDQgKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv YWxsLW5vbi1mYWlsaW5nLXRlc3RzLmggfCAgIDcgKwogZ2NjL3Rlc3RzdWl0 ZS9qaXQuZGcvdGVzdC1sb25nLWxpdGVyYWxzLmMgICAgfCAyODMgKysrKysr KysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAxMDI4IGluc2VydGlvbnMoKyks IDI0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0 c3VpdGUvaml0LmRnL3Rlc3QtbG9uZy1saXRlcmFscy5jCgpkaWZmIC0tZ2l0 IGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdCBiL2dj Yy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QKaW5kZXggNjky MmEyZjY3ZTkuLmU4YjE2OTI2MzMwIDEwMDY0NAotLS0gYS9nY2Mvaml0L2Rv Y3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CisrKyBiL2djYy9qaXQvZG9j cy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QKQEAgLTM4NCwxMyArMzg0LDE1 IEBAIGFsaWdubWVudCBvZiBhIHZhcmlhYmxlOgogYGBMSUJHQ0NKSVRfQUJJ XzI2YGAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBgYExJQkdDQ0pJVF9BQklf MjZgYCBjb3ZlcnMgdGhlIGFkZGl0aW9uIG9mIHN1cHBvcnQgZm9yIGNvbXBs ZXggdHlwZXMsCi1saXRlcmFscyBmb3IgY29tcGxleCB0eXBlcyBhcyB3ZWxs IGFzIHRoZQorbGl0ZXJhbHMgZm9yIGxvbmcgbG9uZywgbG9uZyBkb3VibGUg YW5kIGNvbXBsZXggdHlwZXMgYXMgd2VsbCBhcyB0aGUKIGNvbXBsZXggYmlu YXJ5IG9wZXJhdG9yLgogCiBOb3RlIHRoYXQgOmM6bWFjcm86YEdDQ19KSVRf VFlQRV9DT01QTEVYX0ZMT0FUYCBldGMuIGV4aXN0ZWQgaW4gZWFybGllcgog QUJJOnMsIGJ1dCB3ZXJlIG5vdCBmdW5jdGlvbmFsLgogCiAgICogIDpmdW5j OmBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91 YmxlYAorICAqICA6ZnVuYzpgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9jb21wbGV4X2xvbmdfZG91YmxlYAorICAqICA6ZnVuYzpgZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZWAKKyAgKiAg OmZ1bmM6YGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19s b25nYAogICAqICA6ZnVuYzpgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2Vu YWJsZV9jb21wbGV4X3R5cGVzYAogICAqICA6YzptYWNybzpgR0NDX0pJVF9C SU5BUllfT1BfQ09NUExFWGAKLQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2Nz L3RvcGljcy9leHByZXNzaW9ucy5yc3QgYi9nY2Mvaml0L2RvY3MvdG9waWNz L2V4cHJlc3Npb25zLnJzdAppbmRleCAyYWYxOWRjYmUyOC4uYzU4OWU2ODQ4 NTYgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lv bnMucnN0CisrKyBiL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMu cnN0CkBAIC03MCw2ICs3MCwyMSBAQCBTaW1wbGUgZXhwcmVzc2lvbnMKICAg IEdpdmVuIGEgbnVtZXJpYyB0eXBlIChpbnRlZ2VyIG9yIGZsb2F0aW5nIHBv aW50KSwgYnVpbGQgYW4gcnZhbHVlIGZvcgogICAgdGhlIGdpdmVuIGNvbnN0 YW50IDpleHByOmBsb25nYCB2YWx1ZS4KIAorLi4gZnVuY3Rpb246OiBnY2Nf aml0X3J2YWx1ZSAqXAorICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoZ2NjX2ppdF9jb250ZXh0ICpj dHh0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlw ZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIHZhbHVlKQorCisgICBHaXZl biBhIG51bWVyaWMgdHlwZSAoaW50ZWdlciBvciBmbG9hdGluZyBwb2ludCks IGJ1aWxkIGFuIHJ2YWx1ZSBmb3IKKyAgIHRoZSBnaXZlbiBjb25zdGFudCA6 ZXhwcjpgbG9uZyBsb25nYCB2YWx1ZS4KKworICAgVGhpcyBmdW5jdGlvbiB3 YXMgYWRkZWQgYXNkIGluIDpyZWY6YExJQkdDQ0pJVF9BQklfMjZgOworICAg eW91IGNhbiB0ZXN0IGZvciBpdHMgcHJlc2VuY2UgdXNpbmcKKworICAgLi4g Y29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZF X0xPTkdMT05HX0NPTlNUQU5UUworCiAuLiBmdW5jdGlvbjo6ICBnY2Nfaml0 X3J2YWx1ZSAqZ2NjX2ppdF9jb250ZXh0X3plcm8gKGdjY19qaXRfY29udGV4 dCAqY3R4dCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlw ZSkKIApAQCAtOTgsNiArMTEzLDIxIEBAIFNpbXBsZSBleHByZXNzaW9ucwog ICAgR2l2ZW4gYSBudW1lcmljIHR5cGUgKGludGVnZXIgb3IgZmxvYXRpbmcg cG9pbnQpLCBidWlsZCBhbiBydmFsdWUgZm9yCiAgICB0aGUgZ2l2ZW4gY29u c3RhbnQgOmV4cHI6YGRvdWJsZWAgdmFsdWUuCiAKKy4uIGZ1bmN0aW9uOjog Z2NjX2ppdF9ydmFsdWUgKlwKKyAgICAgICAgICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZSAoZ2NjX2ppdF9jb250 ZXh0ICpjdHh0LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjY19qaXRfdHlwZSAqbnVt ZXJpY190eXBlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZG91YmxlIHZhbHVl KQorCisgICBHaXZlbiBhIGZsb2F0aW5nIHBvaW50IHR5cGUsIGJ1aWxkIGFu IHJ2YWx1ZSBmb3IKKyAgIHRoZSBnaXZlbiBjb25zdGFudCA6ZXhwcjpgbG9u ZyBkb3VibGVgLgorCisgICBUaGlzIGZ1bmN0aW9uIHdhcyBhZGRlZCBpbiA6 cmVmOmBMSUJHQ0NKSVRfQUJJXzI2YDsKKyAgIHlvdSBjYW4gdGVzdCBmb3Ig aXRzIHByZXNlbmNlIHVzaW5nCisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisK KyAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9MT05HTE9OR19DT05TVEFO VFMKKwogLi4gZnVuY3Rpb246OiBnY2Nfaml0X3J2YWx1ZSAqXAogICAgICAg ICAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBs ZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIFwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsIFwKQEAgLTEx NCw2ICsxNDQsMjIgQEAgU2ltcGxlIGV4cHJlc3Npb25zCiAKICAgICAgICNp ZmRlZiBMSUJHQ0NKSVRfSEFWRV9DT01QTEVYCiAKKy4uIGZ1bmN0aW9uOjog Z2NjX2ppdF9ydmFsdWUgKlwKKyAgICAgICAgICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2xvbmdfZG91YmxlIChnY2Nf aml0X2NvbnRleHQgKmN0eHQsXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdj Y19qaXRfdHlwZSAqbnVtZXJpY190eXBlLFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQ29tcGxleCBsb25nIGRvdWJsZSB2YWx1ZSk7CisKKyAgIEdpdmVu IGEgZmxvYXRpbmcgcG9pbnQgdHlwZSwgYnVpbGQgYW4gcnZhbHVlIGZvcgor ICAgdGhlIGdpdmVuIGNvbnN0YW50IDpleHByOmBfQ29tcGxleCBsb25nIGRv dWJsZWAuIFdoZW4gdGhlIHJlc3VsdCB0eXBlIGlzCisgICBub24tY29tcGxl eCwgdGhlIGltYWdpbmFyeSBwYXJ0IGlzIGRpc2NhcmRlZC4KKworICAgVGhp cyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8y NmA7CisgICB5b3UgY2FuIHRlc3QgZm9yIGl0cyBwcmVzZW5jZSB1c2luZwor CisgICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0ND SklUX0hBVkVfTE9OR0xPTkdfQ09OU1RBTlRTCisKIC4uIGZ1bmN0aW9uOjog Z2NjX2ppdF9ydmFsdWUgKlwKICAgICAgICAgICAgICAgZ2NjX2ppdF9jb250 ZXh0X25ld19ydmFsdWVfZnJvbV9wdHIgKGdjY19qaXRfY29udGV4dCAqY3R4 dCwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2NjX2ppdF90eXBlICpwb2ludGVyX3R5cGUsIFwKQEAg LTU1OCw3ICs2MDQsNyBAQCBCaW5hcnkgT3BlcmF0aW9uICAgICAgICAgICAg ICAgICAgICAgICAgICBDIGVxdWl2YWxlbnQgICAgU3VwcG9ydGVkIG9wZXJh bmQgdHlwZQogICAgdGhlIGltYWdpbmFyeS4gTmVnYXRpdmUgemVyb2VzIGFy ZSBwcmVzZXJ2ZWQKICAgIGFuZCBJbmY6cyBkbyBub3QgbGVhZCB0byBOYU5z LgogCi0gICBUaGlzIG9wZXJhdG9yICB3YXMgYWRkZWQgaW4gTElCR0NDSklU X0FCSV8yNjsKKyAgIFRoaXMgb3BlcmF0b3IgIHdhcyBhZGRlZCBpbiA6cmVm OmBMSUJHQ0NKSVRfQUJJXzI2YDsKICAgIHlvdSBjYW4gdGVzdCBmb3IgaXRz IHByZXNlbmNlIHVzaW5nCiAKICAgIC4uIGNvZGUtYmxvY2s6OiBjCmRpZmYg LS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYyBiL2djYy9qaXQvaml0 LXBsYXliYWNrLmNjCmluZGV4IDQ5ZWExMGZkMWNiLi5mOTc0MDQ3MzBiZCAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKKysrIGIvZ2Nj L2ppdC9qaXQtcGxheWJhY2suY2MKQEAgLTE5LDYgKzE5LDcgQEAgYWxvbmcg d2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUK IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCiAKICNpbmNs dWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxjc3RkaW50PgogI2RlZmluZSBJ TkNMVURFX01VVEVYCiAjaW5jbHVkZSAic3lzdGVtLmgiCiAjaW5jbHVkZSAi Y29yZXR5cGVzLmgiCkBAIC02MCw2ICs2MSwxMyBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2RlZmlu ZSBTRVRfREVDTF9KSVRfQklUX0ZJRUxEKE5PREUpIFwKICAgKERFQ0xfTEFO R19GTEFHXzQgKEZJRUxEX0RFQ0xfQ0hFQ0sgKE5PREUpKSA9IDEpCiAKKy8q ICJUaGVyZSBhcmUgYWx3YXlzIFthdGxlYXN0XSAzMiBiaXRzIGluIGVhY2gg bG9uZywgbm8gbWF0dGVyIHRoZQorICAgIHNpemUgb2YgdGhlIGhvc3RzIGxv bmcuICBXZSBoYW5kbGUgZmxvYXRpbmcgcG9pbnQgcmVwcmVzZW50YXRpb25z CisgICAgd2l0aCB1cCB0byAxOTIgYml0cyIsIHNheXMgbmF0aXZlX2ludGVy cHJldF9yZWFsKCkgaW4gZm9sZC1jb25zdC5jLgorCisgICAgQSBkZWZpbmUg Zm9yIHRoZSBhbW91bnQgb2YgdGhlc2UgbG9uZ3MgbmVlZGVkIHBlciBsb25n IGRvdWJsZS4gKi8KKyNkZWZpbmUgTl9MT05HU19MRE9VQkxFIChzaXplb2Yg KGxvbmcgZG91YmxlKSAvIHNpemVvZiAodWludDMyX3QpICsgKChzaXplb2Yg KGxvbmcgZG91YmxlKSAlIHNpemVvZiAodWludDMyX3QpKSA/IDEgOiAwKSkK KwogLyogZ2NjOjpqaXQ6OnBsYXliYWNrOjpjb250ZXh0OjpidWlsZF9jYXN0 IHVzZXMgdGhlIGNvbnZlcnQuaCBBUEksCiAgICB3aGljaCBpbiB0dXJuIHJl cXVpcmVzIHRoZSBmcm9udGVuZCB0byBwcm92aWRlIGEgImNvbnZlcnQiCiAg ICBmdW5jdGlvbiwgYXBwYXJlbnRseSBhcyBhIGZhbGxiYWNrIGZvciBjYXN0 cyB0aGF0IGNhbiBiZSBzaW1wbGlmaWVkCkBAIC05MzcsMTUgKzk0NSwxNCBA QCBuZXdfcnZhbHVlX2Zyb21fY29uc3QgPGludD4gKHR5cGUgKnR5cGUsCiAg ICAgfQogfQogCi0vKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZh bHVlIGZyb20gYSBjb25zdCwgZm9yIGhvc3QgPGxvbmc+LiAgKi8KKy8qIFNw ZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0 LCBmb3IgaG9zdCA8bG9uZyBsb25nPi4gKi8KIAogdGVtcGxhdGUgPD4KIHJ2 YWx1ZSAqCiBjb250ZXh0OjoKLW5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9u Zz4gKHR5cGUgKnR5cGUsCi0JCQkgICAgICBsb25nIHZhbHVlKQorbmV3X3J2 YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGxvbmc+ICh0eXBlICp0eXBlLAorCQkJ CSAgIGxvbmcgbG9uZyB2YWx1ZSkKIHsKLSAgLy8gRklYTUU6IHR5cGUtY2hl Y2tpbmcsIG9yIGNvZXJjaW9uPwogICB0cmVlIGlubmVyX3R5cGUgPSB0eXBl LT5hc190cmVlICgpOwogICBpZiAoSU5URUdSQUxfVFlQRV9QIChpbm5lcl90 eXBlKSkKICAgICB7CkBAIC05ODAsNiArOTg3LDE3IEBAIG5ld19ydmFsdWVf ZnJvbV9jb25zdCA8bG9uZz4gKHR5cGUgKnR5cGUsCiAgICAgfQogfQogCisv KiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBj b25zdCwgZm9yIGhvc3QgPGxvbmc+LiAgKi8KKwordGVtcGxhdGUgPD4KK3J2 YWx1ZSAqCitjb250ZXh0OjoKK25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9u Zz4gKHR5cGUgKnR5cGUsCisJCQkgICAgICBsb25nIHZhbHVlKQoreworICBy ZXR1cm4gbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGxvbmc+ICh0eXBl LCB2YWx1ZSk7Cit9CisKIC8qIFNwZWNpYWxpemF0aW9uIG9mIG1ha2luZyBh biBydmFsdWUgZnJvbSBhIGNvbnN0LCBmb3IgaG9zdCA8ZG91YmxlPi4gICov CiAKIHRlbXBsYXRlIDw+CkBAIC0xMDQxLDYgKzEwNTksNjUgQEAgbmV3X3J2 YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+ICh0eXBlICp0eXBlLAogICAgIH0K IH0KIAorLyogU3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBm cm9tIGEgY29uc3QsIGZvciBob3N0IDxsb25nIGRvdWJsZT4uICAqLworCit0 ZW1wbGF0ZSA8PgorcnZhbHVlICoKK2NvbnRleHQ6OgorbmV3X3J2YWx1ZV9m cm9tX2NvbnN0IDxsb25nIGRvdWJsZT4gKHR5cGUgKnR5cGUsCisJCQkJICAg ICBsb25nIGRvdWJsZSB2YWx1ZSkKK3sKKyAgdHJlZSBpbm5lcl90eXBlID0g dHlwZS0+YXNfdHJlZSAoKTsKKworICBzY2FsYXJfZmxvYXRfbW9kZSBtb2Rl ID0gU0NBTEFSX0ZMT0FUX1RZUEVfTU9ERSAobG9uZ19kb3VibGVfdHlwZV9u b2RlKTsKKworICB1bmlvbgorICB7CisgICAgbG9uZyBkb3VibGUgYXNfbG9u Z19kb3VibGU7CisgICAgdWludDMyX3QgYXNfdWludDMyc1tOX0xPTkdTX0xE T1VCTEVdOworICB9IHVfcmVhbCwgdV9pbWFnOworCisgIHVfcmVhbC5hc19s b25nX2RvdWJsZSA9IHZhbHVlOworCisgIGxvbmcgaW50IGFzX2xvbmdfaW50 c1tOX0xPTkdTX0xET1VCTEVdOworCisgIGZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCBOX0xPTkdTX0xET1VCTEU7IGkrKykKKyAgICBhc19sb25nX2ludHNb aV0gPSB1X3JlYWwuYXNfdWludDMyc1tpXTsKKworICBSRUFMX1ZBTFVFX1RZ UEUgcmVhbF92YWx1ZTsKKyAgcmVhbF9mcm9tX3RhcmdldCAoJnJlYWxfdmFs dWUsIGFzX2xvbmdfaW50cywgbW9kZSk7CisKKyAgaWYgKENPTVBMRVhfRkxP QVRfVFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRy ZWVfcmVhbDsKKyAgICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSBy ZWFsX3R5cGU7CisKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSBpbWFnX3ZhbHVl OworCisgICAgICBsb25nIGludCB6ZXJvX2FzX2xvbmdfaW50c1tOX0xPTkdT X0xET1VCTEVdOworICAgICAgdV9pbWFnLmFzX2xvbmdfZG91YmxlID0gMC47 CisKKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOX0xPTkdTX0xE T1VCTEU7IGkrKykKKwl6ZXJvX2FzX2xvbmdfaW50c1tpXSA9IHVfaW1hZy5h c191aW50MzJzW2ldOworCisgICAgICByZWFsX2Zyb21fdGFyZ2V0ICgmaW1h Z192YWx1ZSwgemVyb19hc19sb25nX2ludHMsIG1vZGUpOworCisgICAgICBy ZWFsX3R5cGUgPSBjb21wbGV4X3JlYWxfdG9fcmVhbCAoaW5uZXJfdHlwZSk7 CisKKyAgICAgIHRyZWVfcmVhbCA9IGJ1aWxkX3JlYWwgKHJlYWxfdHlwZSwg cmVhbF92YWx1ZSk7CisgICAgICB0cmVlX2ltYWcgPSBidWlsZF9yZWFsIChy ZWFsX3R5cGUsIGltYWdfdmFsdWUpOworCisgICAgICB0cmVlIGlubmVyID0g YnVpbGRfY29tcGxleCAoaW5uZXJfdHlwZSwgdHJlZV9yZWFsLCB0cmVlX2lt YWcpOworICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsK KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0cmVlIGlubmVyID0gYnVp bGRfcmVhbCAoaW5uZXJfdHlwZSwgcmVhbF92YWx1ZSk7CisgICAgICByZXR1 cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOworICAgIH0KK30KKwogLyog U3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEgY29u c3QsCiAgICBmb3IgaG9zdCA8ZG91YmxlIF9Db21wbGV4Pi4gKi8KIApAQCAt MTA5Niw2ICsxMTczLDY1IEBAIG5ld19ydmFsdWVfZnJvbV9jb25zdCA8X0Nv bXBsZXggZG91YmxlPiAodHlwZSAqdHlwZSwKICAgICB9CiB9CiAKKy8qIFNw ZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0 LAorICAgZm9yIGhvc3QgPF9Db21wbGV4IGxvbmcgZG91YmxlPi4gKi8KKwor dGVtcGxhdGUgPD4KK3J2YWx1ZSAqCitjb250ZXh0OjoKK25ld19ydmFsdWVf ZnJvbV9jb25zdCA8X0NvbXBsZXggbG9uZyBkb3VibGU+ICh0eXBlICp0eXBl LAorCQkJCQkgICAgICBfQ29tcGxleCBsb25nIGRvdWJsZSB2YWx1ZSkKK3sK KyAgdHJlZSBpbm5lcl90eXBlID0gdHlwZS0+YXNfdHJlZSAoKTsKKworICBz Y2FsYXJfZmxvYXRfbW9kZSBtb2RlID0gU0NBTEFSX0ZMT0FUX1RZUEVfTU9E RSAobG9uZ19kb3VibGVfdHlwZV9ub2RlKTsKKworICB1bmlvbgorICB7Cisg ICAgbG9uZyBkb3VibGUgYXNfbG9uZ19kb3VibGU7CisgICAgdWludDMyX3Qg YXNfdWludDMyc1tOX0xPTkdTX0xET1VCTEVdOworICB9IHVfcmVhbCwgdV9p bWFnOworCisgIHVfcmVhbC5hc19sb25nX2RvdWJsZSA9IGNyZWFsbCh2YWx1 ZSk7CisgIGxvbmcgaW50IGFzX2xvbmdfaW50c1tOX0xPTkdTX0xET1VCTEVd OworCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOX0xPTkdTX0xET1VC TEU7IGkrKykKKyAgICBhc19sb25nX2ludHNbaV0gPSB1X3JlYWwuYXNfdWlu dDMyc1tpXTsKKworICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKKyAg cmVhbF9mcm9tX3RhcmdldCAoJnJlYWxfdmFsdWUsIGFzX2xvbmdfaW50cywg bW9kZSk7CisKKyAgaWYgKENPTVBMRVhfRkxPQVRfVFlQRV9QIChpbm5lcl90 eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVfcmVhbDsKKyAgICAgIHRy ZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisKKyAgICAg IFJFQUxfVkFMVUVfVFlQRSBpbWFnX3ZhbHVlOworCisgICAgICBsb25nIGlu dCB2YWx1ZV9hc19sb25nX2ludHNbTl9MT05HU19MRE9VQkxFXTsKKyAgICAg IHVfaW1hZy5hc19sb25nX2RvdWJsZSA9IGNpbWFnbCh2YWx1ZSk7CisKKyAg ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOX0xPTkdTX0xET1VCTEU7 IGkrKykKKwl2YWx1ZV9hc19sb25nX2ludHNbaV0gPSB1X2ltYWcuYXNfdWlu dDMyc1tpXTsKKworICAgICAgcmVhbF9mcm9tX3RhcmdldCAoJmltYWdfdmFs dWUsIHZhbHVlX2FzX2xvbmdfaW50cywgbW9kZSk7CisKKyAgICAgIHJlYWxf dHlwZSA9IGNvbXBsZXhfcmVhbF90b19yZWFsIChpbm5lcl90eXBlKTsKKwor ICAgICAgdHJlZV9yZWFsID0gYnVpbGRfcmVhbCAocmVhbF90eXBlLCByZWFs X3ZhbHVlKTsKKyAgICAgIHRyZWVfaW1hZyA9IGJ1aWxkX3JlYWwgKHJlYWxf dHlwZSwgaW1hZ192YWx1ZSk7CisKKyAgICAgIHRyZWUgaW5uZXIgPSBidWls ZF9jb21wbGV4IChpbm5lcl90eXBlLCB0cmVlX3JlYWwsIHRyZWVfaW1hZyk7 CisgICAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOworICAg IH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRyZWUgaW5uZXIgPSBidWlsZF9y ZWFsIChpbm5lcl90eXBlLCByZWFsX3ZhbHVlKTsKKyAgICAgIHJldHVybiBu ZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQorfQorCiAvKiBTcGVj aWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVlIGZyb20gYSBjb25zdCwg Zm9yIGhvc3QgPHZvaWQgKj4uICAqLwogCiB0ZW1wbGF0ZSA8PgpkaWZmIC0t Z2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2ppdC9qaXQt cmVjb3JkaW5nLmNjCmluZGV4IGVkNzg4NTAyYzE1Li5iYWE3NTMxMWIzMSAx MDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCisrKyBiL2dj Yy9qaXQvaml0LXJlY29yZGluZy5jYwpAQCAtMjYsNiArMjYsNyBAQCBhbG9u ZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNl ZQogI2luY2x1ZGUgInRvcGxldi5oIgogCiAjaW5jbHVkZSA8Y29tcGxleC5o PgorI2luY2x1ZGUgPGZsb2F0Lmg+CiAKICNpbmNsdWRlICJqaXQtYnVpbHRp bnMuaCIKICNpbmNsdWRlICJqaXQtcmVjb3JkaW5nLmgiCkBAIC0xODM2LDgg KzE4MzcsNDggQEAgcmVjb3JkaW5nOjpjb250ZXh0OjpkdW1wX3JlcHJvZHVj ZXJfdG9fZmlsZSAoY29uc3QgY2hhciAqcGF0aCkKIAkgICAiIGdjY19qaXRf Y29udGV4dF9kdW1wX3JlcHJvZHVjZXJfdG9fZmlsZS5cblxuIik7CiAgIHBy aW50X3ZlcnNpb24gKHIuZ2V0X2ZpbGUgKCksICIgICIsIGZhbHNlKTsKICAg ci53cml0ZSAoIiovXG4iKTsKLSAgci53cml0ZSAoIiNpbmNsdWRlIDxsaWJn Y2NqaXQuaD5cblxuIik7Ci0gIHIud3JpdGUgKCIjcHJhZ21hIEdDQyBkaWFn bm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC12YXJpYWJsZVwiXG5cbiIpOwor ICByLndyaXRlICgKKyAgICAiI2luY2x1ZGUgPGxpYmdjY2ppdC5oPlxuIgor ICAgICIjaW5jbHVkZSA8bWF0aC5oPlxuIgorICAgICIjaW5jbHVkZSA8Y29t cGxleC5oPlxuIgorICAgICIjaW5jbHVkZSA8c3RyaW5nLmg+XG5cbiIpOwor ICByLndyaXRlICgiI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwi LVd1bnVzZWQtdmFyaWFibGVcIlxuIik7CisgIHIud3JpdGUgKCIjcHJhZ21h IEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC1mdW5jdGlvblwi XG5cbiIpOworICAvKiBUeXBlIHB1bm5pbmcgdW5pb25zICovCisgIHIud3Jp dGUgKCJ1bmlvbiBkdWxsIHsgZG91YmxlIGQ7IHVuc2lnbmVkIGxvbmcgbG9u ZyB1bGw7IH07XG5cbiIpOworICByLndyaXRlICgKKyAgICAidW5pb24gbGRh cnIgeyBsb25nIGRvdWJsZSBsZDsgdW5zaWduZWQgYXJyW3NpemVvZiAobG9u ZyBkb3VibGUpXTt9O1xuXG4iKTsKKworICAvKiBGdW5jdGlvbnMgZm9yIHR5 cGUgcHVubmluZyBuYW46cywga2VlcGluZyBiaXQgcmVwcmVzZW50YXRpb24g Ki8KKyAgci53cml0ZSAoCisgICAgIi8qIENvbnZlcnQgdHlwZSBwdW5uZWQg dWludCA2NCB0byBkb3VibGUgTmFOLlxuIgorICAgICIgICBNaWdodCBsb3Nl L2NvcnJ1cHQgcGF5bG9hZCBiZXR3ZWVuIGFyY2hpdGVjdHVyZXMuICovXG4i CisgICAgInN0YXRpYyBkb3VibGVcbiIKKyAgICAidWxsX3RvX2QgKHVuc2ln bmVkIGxvbmcgbG9uZyB1bGwpXG4iCisgICAgIntcbiIKKyAgICAiICB1bmlv biBkdWxsIHU7IHUudWxsID0gdWxsO1xuIgorICAgICIgIC8qIFBhcmFub2lh IGNoZWNrIGZvciBmb3JlaWduIE5hTiByZXByZXNlbnRhdGlvbi4gKi9cbiIK KyAgICAiICBpZiAoIWlzbmFuICh1LmQpKSByZXR1cm4gTkFOO1xuIgorICAg ICIgIHJldHVybiB1LmQ7XG4iCisgICAgIn1cblxuIik7CisgIHIud3JpdGUg KAorICAgICIvKiBDb252ZXJ0IGFycmF5IHRvIGxvbmcgZG91YmxlIE5hTi5c biIKKyAgICAiICAgTWlnaHQgbG9zZS9jb3JydXB0IHBheWxvYWQgYmV0d2Vl biBhcmNoaXRlY3R1cmVzLiAqL1xuIgorICAgICJzdGF0aWMgbG9uZyBkb3Vi bGVcbiIKKyAgICAiYXJyX3RvX2xkICh1bnNpZ25lZCBjaGFyICphcnIsIGlu dCBsZW4pXG4iCisgICAgIntcbiIKKyAgICAiICB1bmlvbiBsZGFyciB1O1xu IgorICAgIC8qIFNpbmNlIGxvbmcgZG91YmxlIHNpemVzIGNhbiB2YXJ5IGJl dHdlZW4gYXJjaGl0ZWN0dXJlcywKKyAgICAgICB3ZSBuZWVkIHRvIGhhbmRs ZSB0aGF0LiAqLworICAgICIgIC8qIEZvciBmb3JlaWduIGxvbmcgZG91Ymxl IHNpemVzICovXG4iCisgICAgIiAgaWYgKHNpemVvZiB1LmFyciAhPSBsZW4p IHJldHVybiBOQU47XG4iCisgICAgIiAgbWVtY3B5ICh1LmFyciwgYXJyLCBs ZW4pO1xuIgorICAgIC8qIFRoZSBzaXplIG1pZ2h0IGZvb2wgdXMgYmVjb3Vz ZSBvZiBwYWRkaW5nLCBzbyBjaGVjayBpdCBpcyBhIG5hbi4gKi8KKyAgICAi ICAvKiBIYW5kbGUgZm9yZWlnbiByZXByZXNlbnRhdGlvbnMgdGhhdCBpcyBu b3QgTmFOIG9uIHRoaXMgbWFjaGluZS4gKi9cbiIKKyAgICAiICBpZiAoIWlz bmFuICh1LmxkKSkgcmV0dXJuIE5BTjtcbiIKKyAgICAiICByZXR1cm4gdS5s ZDtcbiIKKyAgICAifVxuXG4iKTsKKwogICByLndyaXRlICgic3RhdGljIHZv aWRcbnNldF9vcHRpb25zICgiKTsKICAgci53cml0ZV9wYXJhbXMgKGNvbnRl eHRzKTsKICAgci53cml0ZSAoIik7XG5cbiIpOwpAQCAtNTEyNSw4ICs1MTY2 LDExIEBAIHJlY29yZGluZzo6Z2xvYmFsOjp3cml0ZV9yZXByb2R1Y2VyIChy ZXByb2R1Y2VyICZyKQogLyogRXhwbGljaXQgc3BlY2lhbGl6YXRpb24gb2Yg dGhlIHZhcmlvdXMgbWVtZW50b3Mgd2UncmUgaW50ZXJlc3RlZCBpbi4gICov CiB0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2 YWx1ZV9mcm9tX2NvbnN0IDxpbnQ+OwogdGVtcGxhdGUgY2xhc3MgcmVjb3Jk aW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZz47 Cit0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2 YWx1ZV9mcm9tX2NvbnN0IDxsb25nIGxvbmc+OwogdGVtcGxhdGUgY2xhc3Mg cmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8 ZG91YmxlPjsKK3RlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19v Zl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmcgZG91YmxlPjsKIHRlbXBs YXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zy b21fY29uc3QgPF9Db21wbGV4IGRvdWJsZT47Cit0ZW1wbGF0ZSBjbGFzcyBy ZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxf Q29tcGxleCBsb25nIGRvdWJsZT47CiB0ZW1wbGF0ZSBjbGFzcyByZWNvcmRp bmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDx2b2lkICo+ OwogCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHVyZSB2aXJ0dWFsIGhv b2sgcmVjb3JkaW5nOjptZW1lbnRvOjpyZXBsYXlfaW50bwpAQCAtNTI2Myw2 ICs1MzA3LDcwIEBAIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVl X2Zyb21fY29uc3QgPGxvbmc+Ojp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1 Y2VyCiAJICAgbV92YWx1ZSk7CiAJICAgfQogCisvKiBUaGUgbWFrZV9kZWJ1 Z19zdHJpbmcgc3BlY2lhbGl6YXRpb24gZm9yIDxsb25nIGxvbmc+LCByZW5k ZXJpbmcgaXQgYXMKKyAgICAgKFRBUkdFVF9UWVBFKUxJVEVSQUwKKyAgIGUu Zy4KKyAgICAgIihsb25nIGxvbmcpNDIiLiAqLworCit0ZW1wbGF0ZSA8Pgor c3RyaW5nICoKK21lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxs b25nIGxvbmc+OjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICByZXR1cm4g c3RyaW5nOjpmcm9tX3ByaW50ZiAobV9jdHh0LAorCQkJICAgICAgIiglcykl bGxpIiwKKwkJCSAgICAgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSwK KwkJCSAgICAgIG1fdmFsdWUpOworfQorCisvKiBUaGUgZ2V0X3dpZGVfaW50 IHNwZWNpYWxpemF0aW9uIGZvciA8bG9uZyBsb25nPi4gKi8KKwordGVtcGxh dGUgPD4KK2Jvb2wKK21lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0 IDxsb25nIGxvbmc+OjpnZXRfd2lkZV9pbnQgKHdpZGVfaW50ICpvdXQpIGNv bnN0Cit7CisgICpvdXQgPSB3aTo6c2h3aSAobV92YWx1ZSwgc2l6ZW9mICht X3ZhbHVlKSAqIDgpOworICByZXR1cm4gdHJ1ZTsKK30KKworLyogVGhlIHdy aXRlX3JlcHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9yIDxsb25nIGxvbmc+ LiAqLworCit0ZW1wbGF0ZSA8Pgordm9pZAorcmVjb3JkaW5nOjptZW1lbnRv X29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBsb25nPjo6Cit3cml0 ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZyKQoreworICBjb25zdCBjaGFy ICppZCA9IHIubWFrZV9pZGVudGlmaWVyICh0aGlzLCAicnZhbHVlIik7CisK KyAgLyogU2FtZSBzcGVjaWFsIGNhc2UgYXMgaW4gbG9uZyAqLworICBpZiAo bV92YWx1ZSA9PSBMT05HX0xPTkdfTUlOKQorICAgIHsKKyAgICAgIHIud3Jp dGUgKAorCSIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisJIiAgICBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoXG4iCisJ IiAgICAgICVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKwki ICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4i CisJIiAgICAgICVsbGRMTCAtIDEpOyAvKiBsb25nIGxvbmcgdmFsdWUgKi9c biIsCisJaWQsCisJci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkp LAorCXIuZ2V0X2lkZW50aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKwltX3Zh bHVlICsgMSk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIHIud3JpdGUg KAorICAgICIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisgICAgIiAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoXG4i CisgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9c biIKKyAgICAiICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190 eXBlICovXG4iCisgICAgIiAgICAgICVsbGRMTCk7IC8qIGxvbmcgbG9uZyB2 YWx1ZSAqL1xuIiwKKyAgICBpZCwKKyAgICByLmdldF9pZGVudGlmaWVyIChn ZXRfY29udGV4dCAoKSksCisgICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBl IChtX3R5cGUpLAorICAgIG1fdmFsdWUpOworfQorCisKKwogLyogVGhlIG1h a2VfZGVidWdfc3RyaW5nIHNwZWNpYWxpemF0aW9uIGZvciA8ZG91YmxlPiwg cmVuZGVyaW5nIGl0IGFzCiAgICAgIChUQVJHRVRfVFlQRSlMSVRFUkFMCiAg ICBlLmcuCkBAIC01MjczLDcgKzUzODEsNyBAQCBzdHJpbmcgKgogbWVtZW50 b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT46Om1ha2VfZGVi dWdfc3RyaW5nICgpCiB7CiAgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRm IChtX2N0eHQsCi0JCQkgICAgICAiKCVzKSVmIiwKKwkJCSAgICAgICIoJXMp JWciLAogCQkJICAgICAgbV90eXBlLT5nZXRfZGVidWdfc3RyaW5nICgpLAog CQkJICAgICAgbV92YWx1ZSk7CiB9CkBAIC01Mjg3LDYgKzUzOTUsMTggQEAg bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT46Omdl dF93aWRlX2ludCAod2lkZV9pbnQgKikgY29uc3QKICAgcmV0dXJuIGZhbHNl OwogfQogCisvKiBGb3IgdHlwZXBydW5pbmcgTmFOcy4gKi8KK3VuaW9uIGR1 bGwgeworICBkb3VibGUgZDsKKyAgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsK K307CisKK3VuaW9uIGxkYXJyIHsKKyAgbG9uZyBkb3VibGUgbGQ7CisgIHVu c2lnbmVkIGNoYXIgYXJyW3NpemVvZihsb25nIGRvdWJsZSldOworfTsKKwor CiAvKiBUaGUgd3JpdGVfcmVwcm9kdWNlciBzcGVjaWFsaXphdGlvbiBmb3Ig PGRvdWJsZT4uICAqLwogCiB0ZW1wbGF0ZSA8PgpAQCAtNTI5NCwxNCArNTQx NCwxNTQgQEAgdm9pZAogcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFs dWVfZnJvbV9jb25zdCA8ZG91YmxlPjo6d3JpdGVfcmVwcm9kdWNlciAocmVw cm9kdWNlciAmcikKIHsKICAgY29uc3QgY2hhciAqaWQgPSByLm1ha2VfaWRl bnRpZmllciAodGhpcywgInJ2YWx1ZSIpOwotICByLndyaXRlICgiICBnY2Nf aml0X3J2YWx1ZSAqJXMgPVxuIgotICAgICIgICAgZ2NjX2ppdF9jb250ZXh0 X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKCVzLCAvKiBnY2Nfaml0X2NvbnRl eHQgKmN0eHQgKi9cbiIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1l cmljX3R5cGUgKi9cbiIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAlZik7IC8qIGRvdWJsZSB2YWx1ZSAqL1xu IiwKLSAgICBpZCwKLSAgICByLmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4 dCAoKSksCi0gICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUp LAotICAgIG1fdmFsdWUpOworCisgIGlmIChzdGQ6OmlzZmluaXRlIChtX3Zh bHVlKSkKKyAgICByLndyaXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXMgPVxu IgorICAgICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2RvdWJsZSAoJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAqL1xuIgor ICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4i CisgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiAlLjlnICovXG4iCisgICAgICAiICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlYSk7XG4iLAorICAgICAg aWQsCisgICAgICByLmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSks CisgICAgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fdHlwZSksCisg ICAgICBtX3ZhbHVlLCBtX3ZhbHVlKTsKKyAgIGVsc2UgaWYgKHN0ZDo6aXNp bmYgKG1fdmFsdWUpKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqc2ln biA9ICIiOworICAgICAgIGlmIChtX3ZhbHVlIDwgMCkKKwkgc2lnbiA9ICIt IjsKKworICAgICAgIHIud3JpdGUgKCIgIGdjY19qaXRfcnZhbHVlIColcyA9 XG4iCisJICIgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9k b3VibGUgKCVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKwkg IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JXMsIC8qIGdjY19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4iCisJICIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGluZiAqL1xuIgorCSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAlc0lORklOSVRZKTtcbiIsCisJIGlkLAorCSByLmdl dF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAoKSksCisJIHIuZ2V0X2lkZW50 aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKwkgc2lnbik7CisgICAgICB9Cisg ICAgZWxzZSBpZiAoc3RkOjppc25hbiAobV92YWx1ZSkpIHsKKyAgICAgIHVu aW9uIGR1bGwgdTsKKyAgICAgIHUuZCA9IG1fdmFsdWU7CisgICAgICByLndy aXRlICgiICBnY2Nfaml0X3J2YWx1ZSAqJXMgPVxuIgorCSIgICAgZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKCVzLCAvKiBnY2Nf aml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKwkiICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBl ICpudW1lcmljX3R5cGUgKi9cbiIKKwkiICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBOYU4gKi9cbiIKKwkiICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bGxfdG9f ZCglI2xseCkpO1xuIiwKKwlpZCwKKwlyLmdldF9pZGVudGlmaWVyIChnZXRf Y29udGV4dCAoKSksCisJci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5 cGUpLAorCXUudWxsKTsKKworICAgIH0KK30KKworLyogVGhlIG1ha2VfZGVi dWdfc3RyaW5nIHNwZWNpYWxpemF0aW9uIGZvciA8bG9uZyBkb3VibGU+LCBy ZW5kZXJpbmcgaXQgYXMKKyAgICAgKFRBUkdFVF9UWVBFKUxJVEVSQUwKKyAg IGUuZy4KKyAgICAgIihmbG9hdCk0Mi4wIi4gICovCisKK3RlbXBsYXRlIDw+ CitzdHJpbmcgKgorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3Qg PGxvbmcgZG91YmxlPjo6bWFrZV9kZWJ1Z19zdHJpbmcgKCkKK3sKKyAgcmV0 dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKwkJCSAgICAgICIo JXMpJUxnIiwKKwkJCSAgICAgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAo KSwKKwkJCSAgICAgIG1fdmFsdWUpOworfQorCisvKiBUaGUgZ2V0X3dpZGVf aW50IHNwZWNpYWxpemF0aW9uIGZvciA8ZG91YmxlPi4gICovCisKK3RlbXBs YXRlIDw+Citib29sCittZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25z dCA8bG9uZyBkb3VibGU+OjpnZXRfd2lkZV9pbnQgKHdpZGVfaW50ICopIGNv bnN0Cit7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogSGVscGVyIGZ1bmN0 aW9uIGZvciB3cml0ZV9yZXByb2R1Y2VyKCkKKworICAgV3JpdGUgYW4gYXJy YXkgb2YgdW5zaWduZWQgY2hhcnMgdG8gdGhlIHJlcHJvZHVjZXIsIGxpa2U6 CisgICB7MHgxMiwgMHgzNCwgLi4uIH0gKi8KK3N0YXRpYyB2b2lkCityZXBy b2R1Y2VyX3dyaXRlX2FyciAocmVwcm9kdWNlciAmciwgdW5zaWduZWQgY2hh ciAqYXJyLCBpbnQgbGVuKQoreworICBpZiAobGVuID09IDApCisgICAgcmV0 dXJuOworCisgIHIud3JpdGUgKCJ7Iik7CisgIGZvciAoaW50IGkgPSAwOyBp IDwgbGVuIC0gMTsgaSsrKQorICAgIHIud3JpdGUgKCIlI3ggLCAiLCBhcnJb aV0pOworICByLndyaXRlICgiJSN4IH0iLCBhcnJbbGVuIC0gMV0pOworfQor CisvKiBUaGUgd3JpdGVfcmVwcm9kdWNlciBzcGVjaWFsaXphdGlvbiBmb3Ig PGRvdWJsZT4uICAqLworCit0ZW1wbGF0ZSA8Pgordm9pZAorcmVjb3JkaW5n OjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZyBkb3Vi bGU+OjoKK3dyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7Cisg IGNvbnN0IGNoYXIgKmlkID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJy dmFsdWUiKTsKKworICBpZiAoc3RkOjppc2Zpbml0ZSAobV92YWx1ZSkpCisg ICAgci53cml0ZSAoCisgICAgICAiICBnY2Nfaml0X3J2YWx1ZSAqJXMgPVxu IgorICAgICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2xvbmdfZG91YmxlIChcbiIKKyAgICAgICIgICAgICAlcywgLyogZ2NjX2pp dF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAgICAiICAgICAgJXMsIC8qIGdj Y19qaXRfdHlwZSAqbnVtZXJpY190eXBlICovXG4iCisgICAgICAiICAgICAg LyogJS45TGcgKi9cbiIKKyAgICAgICIgICAgICAlTGFMKTsgLyogbG9uZyBk b3VibGUgdmFsdWUgKi9cbiIsCisgICAgICBpZCwKKyAgICAgIHIuZ2V0X2lk ZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKyAgICAgIHIuZ2V0X2lkZW50 aWZpZXJfYXNfdHlwZSAobV90eXBlKSwKKyAgICAgIG1fdmFsdWUsIG1fdmFs dWUpOworICBlbHNlIGlmIChzdGQ6OmlzaW5mIChtX3ZhbHVlKSkKKyAgICB7 CisgICAgICBjb25zdCBjaGFyICpzaWduID0gIiI7CisgICAgICBpZiAobV92 YWx1ZSA8IDApCisJc2lnbiA9ICItIjsKKyAgICAgIHIud3JpdGUgKAorICAg ICAgIiAgZ2NjX2ppdF9ydmFsdWUgKiVzID1cbiIKKyAgICAgICIgICAgZ2Nj X2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9sb25nX2RvdWJsZSAoXG4i CisgICAgICAiICAgICAgJXMsIC8qIGdjY19qaXRfY29udGV4dCAqY3R4dCAq L1xuIgorICAgICAgIiAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVy aWNfdHlwZSAqL1xuIgorICAgICAgIiAgICAgIC8qIGluZiAqL1xuIgorICAg ICAgIiAgICAgICVzSU5GSU5JVFkpO1xuIiwKKyAgICAgIGlkLAorICAgICAg ci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkpLAorICAgICAgci5n ZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAorICAgICAgc2lnbik7 CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5pb24gbGRhcnIgdTsg LyogRm9yIHR5cGUgcHVubmluZyB0byBhcnJheSAqLworICAgICAgdS5sZCA9 IG1fdmFsdWU7CisKKyAgICAgIHIud3JpdGUgKCIgIGdjY19qaXRfcnZhbHVl IColcztcbiIsIGlkKTsKKyAgICAgIC8qIFNjb3BlIGZvciBsb2NhbCAqLwor ICAgICAgci53cml0ZSAoIiAgeyAvKiBsb25nIGRvdWJsZSBOYU4gc3RvcmVk IGluIGNoYXIgYXJyICovXG4iKTsKKyAgICAgIC8qIFdyaXRlIGFuIGNoYXIg YXJyIG9mIHRoZSBieXRlcyBvZiB0aGUgTmFOICovCisgICAgICByLndyaXRl ICgiICAgIHVuc2lnbmVkIGNoYXIgYXJyW10gPSAiKTsKKyAgICAgIHJlcHJv ZHVjZXJfd3JpdGVfYXJyIChyLCB1LmFyciwgc2l6ZW9mIHUuYXJyKTsKKyAg ICAgIHIud3JpdGUgKCI7XG4iKTsKKworICAgICAgci53cml0ZSAoCisgICAg ICAiICAgICVzID1cbiIKKyAgICAgICIgICAgICBnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2xvbmdfZG91YmxlIChcbiIKKyAgICAgICIgICAg ICAgICVzLCAvKiBnY2Nfaml0X2NvbnRleHQgKmN0eHQgKi9cbiIKKyAgICAg ICIgICAgICAgICVzLCAvKiBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAq L1xuIgorICAgICAgIiAgICAgICAgLyogJUxnICovXG4iCisgICAgICAiICAg ICAgICBhcnJfdG9fbGQgKGFyciwgc2l6ZW9mIGFycikpO1xuIiwKKyAgICAg IGlkLAorICAgICAgci5nZXRfaWRlbnRpZmllciAoZ2V0X2NvbnRleHQgKCkp LAorICAgICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAor ICAgICAgbV92YWx1ZSk7CisKKyAgICAgIHIud3JpdGUgKCIgIH1cbiIpOyAv KiBDbG9zZSBzY29wZSAqLworICAgIH0KIH0KIAogLyogVGhlIG1ha2VfZGVi dWdfc3RyaW5nIHNwZWNpYWxpemF0aW9uIGZvciA8ZG91YmxlIGNvbXBsZXg+ LCByZW5kZXJpbmcgaXQgYXMKQEAgLTUzMzEsNyArNTU5MSw3IEBAIGdldF93 aWRlX2ludCAod2lkZV9pbnQgKikgY29uc3QKICAgcmV0dXJuIGZhbHNlOwog fQogCi0vKiBUaGUgd3JpdGVfcmVwcm9kdWNlciBzcGVjaWFsaXphdGlvbiBm b3IgPGRvdWJsZT4uICAqLworLyogVGhlIHdyaXRlX3JlcHJvZHVjZXIgc3Bl Y2lhbGl6YXRpb24gZm9yIDxfQ29tcGxleCBkb3VibGU+LiAgKi8KIAogdGVt cGxhdGUgPD4KIHZvaWQKQEAgLTUzNDEsMTQgKzU2MDEsMTY0IEBAIHdyaXRl X3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAgIGNvbnN0IGNoYXIgKmlk ID0gci5tYWtlX2lkZW50aWZpZXIgKHRoaXMsICJydmFsdWUiKTsKICAgZG91 YmxlIHJlYWwgPSBjcmVhbChtX3ZhbHVlKTsKICAgZG91YmxlIGltYWcgPSBj aW1hZyhtX3ZhbHVlKTsKLSAgci53cml0ZSAoIiAgZ2NjX2ppdF9ydmFsdWUg KiVzID1cbiIKLSAgICAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21fY29tcGxleF9kb3VibGUgKCVzLCAvKiBnY2Nfaml0X2NvbnRleHQg KmN0eHQgKi9cbiIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF90eXBlICpudW1lcmlj X3R5cGUgKi9cbiIKLSAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAlZislZmopOyAvKiBkb3VibGUgdmFsdWUgKi9c biIsCisKKyAgci53cml0ZSAoCisgICAgIiAgZ2NjX2ppdF9ydmFsdWUgKiVz ID1cbiIKKyAgICAiICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zy b21fY29tcGxleF9kb3VibGUgKFxuIgorICAgICIgICAgICAlcywgLyogZ2Nj X2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAgIiAgICAgICVzLCAvKiBn Y2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSAqL1xuIgorICAgICIgICAgICAv KiAlLjlnICsgJS45Z2ogKi9cbiIKKyAgICAiICAgICAgQ01QTFggKCIsLyog Li4uIHJlYWwsIGltYWcpKTsgKi8KKyAgICBpZCwKKyAgICByLmdldF9pZGVu dGlmaWVyIChnZXRfY29udGV4dCAoKSksCisgICAgci5nZXRfaWRlbnRpZmll cl9hc190eXBlIChtX3R5cGUpLAorICAgIHJlYWwsIGltYWcpOworCisgIGlm IChzdGQ6OmlzZmluaXRlIChyZWFsKSkKKyAgICByLndyaXRlKCIlYSwiLCBy ZWFsKTsKKyAgZWxzZSBpZiAoc3RkOjppc2luZiAocmVhbCkpCisgICAgewor ICAgICAgaWYgKHJlYWwgPCAwKQorCXIud3JpdGUgKCItSU5GSU5JVFksIik7 CisgICAgICBlbHNlCisJci53cml0ZSAoIklORklOSVRZLCIpOworICAgIH0K KyAgZWxzZSAvKiBOYU4gKi8KKyAgICB7CisgICAgICAvKiBTdG9yZSB0aGUg TmFOIGFzIGEgdW5zaWduZWQgbG9uZyBsb25nIGxpdGVyYWwuCisJIHVsbF90 b19kKCkgd2lsbCBjb252ZXJ0IGl0IGJhY2sgdG8gZG91YmxlICovCisgICAg ICB1bmlvbiBkdWxsIHU7CisgICAgICB1LmQgPSByZWFsOworICAgICAgci53 cml0ZSAoInVsbF90b19kICglI2xseCksIiwgdS51bGwpOworICAgIH0KKwor ICBpZiAoc3RkOjppc2Zpbml0ZSAoaW1hZykpCisgICAgci53cml0ZSgiJWEp IiwgaW1hZyk7CisgIGVsc2UgaWYgKHN0ZDo6aXNpbmYgKGltYWcpKQorICAg IHsKKyAgICAgIGlmIChyZWFsIDwgMCkKKwlyLndyaXRlICgiLUlORklOSVRZ KSIpOworICAgICAgZWxzZQorCXIud3JpdGUgKCJJTkZJTklUWSkiKTsKKyAg ICB9CisgIGVsc2UgLyogTmFOICovCisgICAgeworICAgICAgdW5pb24gZHVs bCB1OworICAgICAgdS5kID0gaW1hZzsKKyAgICAgIHIud3JpdGUgKCJ1bGxf dG9fZCAoJSNsbHgpKSIsIHUudWxsKTsKKyAgICB9CisKKyAgci53cml0ZSAo Iik7XG5cbiIpOyAvKiBDbG9zZSB0aGUgZnVuY3Rpb24gY2FsbCAqLworfQor Cit0ZW1wbGF0ZSA8Pgorc3RyaW5nICoKK21lbWVudG9fb2ZfbmV3X3J2YWx1 ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBsb25nIGRvdWJsZT46Om1ha2VfZGVi dWdfc3RyaW5nICgpCit7CisgIGxvbmcgZG91YmxlIHJlYWwgPSBjcmVhbGwo bV92YWx1ZSk7CisgIGxvbmcgZG91YmxlIGltYWcgPSBjaW1hZ2wobV92YWx1 ZSk7CisgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQsCisJ CQkgICAgICAiKCVzKSglTGclK0xnaikiLAorCQkJICAgICAgbV90eXBlLT5n ZXRfZGVidWdfc3RyaW5nICgpLAorCQkJICAgICAgcmVhbCwgaW1hZyk7Cit9 CisKKy8qIFRoZSBnZXRfd2lkZV9pbnQgc3BlY2lhbGl6YXRpb24gZm9yIDxf Q29tcGxleCBsb25nIGRvdWJsZT4uICAqLworCit0ZW1wbGF0ZSA8PgorYm9v bAorbWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPF9Db21wbGV4 IGxvbmcgZG91YmxlPjo6CitnZXRfd2lkZV9pbnQgKHdpZGVfaW50ICopIGNv bnN0Cit7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogVGhlIHdyaXRlX3Jl cHJvZHVjZXIgc3BlY2lhbGl6YXRpb24gZm9yIDxfQ29tcGxleCBsb25nIGRv dWJsZT4uICAqLworCit0ZW1wbGF0ZSA8Pgordm9pZAorcmVjb3JkaW5nOjpt ZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8X0NvbXBsZXggbG9u ZyBkb3VibGU+OjoKK3dyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIp Cit7CisgIHVuaW9uIGxkYXJyIHVyZWFsLCB1aW1hZzsKKyAgY29uc3QgY2hh ciAqaWQgPSByLm1ha2VfaWRlbnRpZmllciAodGhpcywgInJ2YWx1ZSIpOwor ICBsb25nIGRvdWJsZSByZWFsID0gY3JlYWxsKG1fdmFsdWUpOworICBsb25n IGRvdWJsZSBpbWFnID0gY2ltYWdsKG1fdmFsdWUpOworCisgIGludCBoYXNf bmFuID0gc3RkOjppc25hbiAocmVhbCkgfHwgc3RkOjppc25hbiAoaW1hZyk7 CisKKyAgaWYgKGhhc19uYW4pCisgICAgeworICAgICAgci53cml0ZSAoIiAg Z2NjX2ppdF9ydmFsdWUgKiVzO1xuIiwgaWQpOworICAgICAgLyogU2NvcGUg Zm9yIG11bHRpcGxlICJOYU4tYXJyYXlzIiBpbiB0aGUgc291cmNlIGZpbGUg IHRvIG5vdCBjbGFzaCAqLworICAgICAgci53cml0ZSAoIiAge1xuIik7Cisg ICAgfQorICBpZiAoc3RkOjppc25hbiAocmVhbCkpCisgICAgeworICAgICAg LyogV3JpdGUgdGhlIHJhdyBieXRlcyBvZiB0aGUgbG9uZyBkb3VibGUgYXMg YW4gY2hhciBhcnJheQorCSB0byBzdG9yZSBpdCBpbiB0aGUgc291cmNlIGNv ZGUuCisJIEkuZS4gdW5zaWduZWQgY2hhciBhcnJbXSA9IHsweDEsIDB4Miwg MHgzIC4uLiB9OyAqLworICAgICAgdXJlYWwubGQgPSByZWFsOworICAgICAg ci53cml0ZSAoIiAgICB1bnNpZ25lZCBjaGFyIGFycl9yZWFsW10gPSAiKTsK KyAgICAgIHJlcHJvZHVjZXJfd3JpdGVfYXJyIChyLCB1cmVhbC5hcnIsIHNp emVvZiB1cmVhbC5hcnIpOworICAgICAgci53cml0ZSAoIjtcbiIpOworICAg IH0KKyAgaWYgKHN0ZDo6aXNuYW4gKGltYWcpKQorICAgIHsKKyAgICAgIHVp bWFnLmxkID0gaW1hZzsKKyAgICAgIHIud3JpdGUgKCIgICAgdW5zaWduZWQg Y2hhciBhcnJfaW1hZ1tdID0gIik7CisgICAgICByZXByb2R1Y2VyX3dyaXRl X2FyciAociwgdWltYWcuYXJyLCBzaXplb2YgdWltYWcuYXJyKTsKKyAgICAg IHIud3JpdGUgKCI7XG4iKTsKKyAgICB9CisKKyAgaWYgKGhhc19uYW4pCisg ICAgci53cml0ZSAoIiAgIik7IC8qIERlZmluaXRpb24gaXMgb3V0c2lkZSB0 aGUgc2NvcGUgZm9yIE5hTnMgKi8KKyAgZWxzZQorICAgIHIud3JpdGUgKCIg IGdjY19qaXRfcnZhbHVlICoiKTsKKworICByLndyaXRlICgiJXMgPVxuIgor ICAgICIgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21w bGV4X2xvbmdfZG91YmxlIChcbiIKKyAgICAiICAgICAgJXMsIC8qIGdjY19q aXRfY29udGV4dCAqY3R4dCAqL1xuIgorICAgICIgICAgICAlcywgLyogZ2Nj X2ppdF90eXBlICpudW1lcmljX3R5cGUgKi9cbiIKKyAgICAiICAgICAgLyog JS45TGcgKyBpKiUuOUxnICovXG4iCisgICAgIiAgICAgIENNUExYTCAoIiwK ICAgICBpZCwKICAgICByLmdldF9pZGVudGlmaWVyIChnZXRfY29udGV4dCAo KSksCiAgICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX3R5cGUpLAog ICAgIHJlYWwsIGltYWcpOworCisgIGlmIChzdGQ6OmlzZmluaXRlIChyZWFs KSkKKyAgICByLndyaXRlICgiJUxhTCwgIiwgcmVhbCk7CisgIGVsc2UgaWYg KHN0ZDo6aXNpbmYgKHJlYWwpKQorICAgIHsKKyAgICAgIGlmIChyZWFsIDwg MCkKKwlyLndyaXRlICgiLUlORklOSVRZLCAiKTsKKyAgICAgIGVsc2UKKwly LndyaXRlICgiSU5GSU5JVFksICIpOworICAgIH0KKyAgZWxzZSBpZiAoc3Rk Ojppc25hbiAocmVhbCkpCisgICAgeworICAgICAgLyogQ29udmVydCB0aGUg Y2hhciBhcnJheSB3cml0dGVuIGFib3ZlLCB0byBhIGxvbmcgZG91YmxlICov CisgICAgICByLndyaXRlICgiYXJyX3RvX2xkIChhcnJfcmVhbCwgc2l6ZW9m IGFycl9yZWFsKSwgIik7CisgICAgfQorCisgIGlmIChzdGQ6OmlzZmluaXRl IChpbWFnKSkKKyAgICByLndyaXRlICgiJUxhTCkiLCBpbWFnKTsKKyAgZWxz ZSBpZiAoc3RkOjppc2luZiAoaW1hZykpCisgICAgeworICAgICAgaWYgKGlt YWcgPCAwKQorCXIud3JpdGUgKCItSU5GSU5JVFkpIik7CisgICAgICBlbHNl CisJci53cml0ZSAoIklORklOSVRZKSIpOworICAgIH0KKyAgZWxzZSBpZiAo c3RkOjppc25hbiAoaW1hZykpCisgICAgeworICAgICAgci53cml0ZSAoImFy cl90b19sZCAoYXJyX2ltYWcsIHNpemVvZiBhcnJfaW1hZykpIik7CisgICAg fQorICByLndyaXRlKCIpO1xuXG4iKTsgLyogQ2xvc2UgZnVuY3Rpb24gY2Fs bCAqLworCisgIGlmIChoYXNfbmFuKQorICAgIHIud3JpdGUgKCIgIH1cbiIp OyAvKiBDbG9zZSBOYU4tYXJyYXkgc2NvcGUgKi8KIH0KIAogLyogVGhlIG1h a2VfZGVidWdfc3RyaW5nIHNwZWNpYWxpemF0aW9uIGZvciA8dm9pZCAqPiwg cmVuZGVyaW5nIGl0IGFzCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2pp dCsrLmggYi9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKaW5kZXggZjk1YjlhZDY3 ZDcuLjUzMzFlYTJhZDUwIDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2pp dCsrLmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCkBAIC0xODgsMTIg KzE4OCwxOCBAQCBuYW1lc3BhY2UgZ2Njaml0CiAJCSAgICAgICBpbnQgdmFs dWUpIGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdfcnZhbHVlICh0eXBlIG51bWVy aWNfdHlwZSwKIAkJICAgICAgIGxvbmcgdmFsdWUpIGNvbnN0OworICAgIHJ2 YWx1ZSBuZXdfcnZhbHVlICh0eXBlIG51bWVyaWNfdHlwZSwKKwkJICAgICAg IGxvbmcgbG9uZyB2YWx1ZSkgY29uc3Q7CiAgICAgcnZhbHVlIHplcm8gKHR5 cGUgbnVtZXJpY190eXBlKSBjb25zdDsKICAgICBydmFsdWUgb25lICh0eXBl IG51bWVyaWNfdHlwZSkgY29uc3Q7CiAgICAgcnZhbHVlIG5ld19ydmFsdWUg KHR5cGUgbnVtZXJpY190eXBlLAogCQkgICAgICAgZG91YmxlIHZhbHVlKSBj b25zdDsKKyAgICBydmFsdWUgbmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5 cGUsCisJCSAgICAgICBsb25nIGRvdWJsZSB2YWx1ZSkgY29uc3Q7CiAgICAg cnZhbHVlIG5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogCQkgICAg ICAgX0NvbXBsZXggZG91YmxlIHZhbHVlKSBjb25zdDsKKyAgICBydmFsdWUg bmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUsCisJCSAgICAgICBfQ29t cGxleCBsb25nIGRvdWJsZSB2YWx1ZSkgY29uc3Q7CiAgICAgcnZhbHVlIG5l d19ydmFsdWUgKHR5cGUgcG9pbnRlcl90eXBlLAogCQkgICAgICAgdm9pZCAq dmFsdWUpIGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdfcnZhbHVlIChjb25zdCBz dGQ6OnN0cmluZyAmdmFsdWUpIGNvbnN0OwpAQCAtOTUyLDYgKzk1OCwxNyBA QCBjb250ZXh0OjpuZXdfcnZhbHVlICh0eXBlIG51bWVyaWNfdHlwZSwKIAkJ CQkJICB2YWx1ZSkpOwogfQogCitpbmxpbmUgcnZhbHVlCitjb250ZXh0Ojpu ZXdfcnZhbHVlICh0eXBlIG51bWVyaWNfdHlwZSwKKwkJICAgICBsb25nIGxv bmcgdmFsdWUpIGNvbnN0Cit7CisgIHJldHVybiBydmFsdWUgKAorICAgIGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nICgKKyAg ICAgIG1faW5uZXJfY3R4dCwKKyAgICAgIG51bWVyaWNfdHlwZS5nZXRfaW5u ZXJfdHlwZSAoKSwKKyAgICAgIHZhbHVlKSk7Cit9CisKIGlubGluZSBydmFs dWUKIGNvbnRleHQ6Onplcm8gKHR5cGUgbnVtZXJpY190eXBlKSBjb25zdAog ewpAQCAtOTc2LDYgKzk5MywxNyBAQCBjb250ZXh0OjpuZXdfcnZhbHVlICh0 eXBlIG51bWVyaWNfdHlwZSwKIAkJCQkJICAgIHZhbHVlKSk7CiB9CiAKK2lu bGluZSBydmFsdWUKK2NvbnRleHQ6Om5ld19ydmFsdWUgKHR5cGUgbnVtZXJp Y190eXBlLAorCQkgICAgIGxvbmcgZG91YmxlIHZhbHVlKSBjb25zdAorewor ICByZXR1cm4gcnZhbHVlICgKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2xvbmdfZG91YmxlICgKKyAgICAgIG1faW5uZXJfY3R4dCwK KyAgICAgIG51bWVyaWNfdHlwZS5nZXRfaW5uZXJfdHlwZSAoKSwKKyAgICAg IHZhbHVlKSk7Cit9CisKIGlubGluZSBydmFsdWUKIGNvbnRleHQ6Om5ld19y dmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogCQkgICAgIF9Db21wbGV4IGRv dWJsZSB2YWx1ZSkgY29uc3QKQEAgLTk4Nyw2ICsxMDE1LDE3IEBAIGNvbnRl eHQ6Om5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogICAgICAgdmFs dWUpKTsKIH0KIAoraW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3J2YWx1 ZSAodHlwZSBudW1lcmljX3R5cGUsCisJCSAgICAgX0NvbXBsZXggbG9uZyBk b3VibGUgdmFsdWUpIGNvbnN0Cit7CisgIHJldHVybiBydmFsdWUgKAorICAg IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25n X2RvdWJsZSAoCisgICAgICBtX2lubmVyX2N0eHQsCisgICAgICBudW1lcmlj X3R5cGUuZ2V0X2lubmVyX3R5cGUgKCksCisgICAgICB2YWx1ZSkpOworfQor CiBpbmxpbmUgcnZhbHVlCiBjb250ZXh0OjpuZXdfcnZhbHVlICh0eXBlIHBv aW50ZXJfdHlwZSwKIAkJICAgICB2b2lkICp2YWx1ZSkgY29uc3QKZGlmZiAt LWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmNjIGIvZ2NjL2ppdC9saWJnY2Nq aXQuY2MKaW5kZXggMmM2MDVkMGRkZjAuLjc2ZjgxYWVlYmQ1IDEwMDY0NAot LS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5jYworKysgYi9nY2Mvaml0L2xpYmdj Y2ppdC5jYwpAQCAtMTk4Miw2ICsxOTgyLDE5IEBAIGdjY19qaXRfY29udGV4 dF9uZXdfcnZhbHVlX2Zyb21fbG9uZyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0 LAogCSAgLT5uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxvbmc+IChudW1lcmlj X3R5cGUsIHZhbHVlKSk7CiB9CiAKK2djY19qaXRfcnZhbHVlICoKK2djY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19sb25nIChnY2Nfaml0 X2NvbnRleHQgKmN0eHQsCisJCQkJCSAgIGdjY19qaXRfdHlwZSAqbnVtZXJp Y190eXBlLAorCQkJCQkgICBsb25nIGxvbmcgdmFsdWUpCit7CisgIFJFVFVS Tl9OVUxMX0lGX0ZBSUwgKGN0eHQsIE5VTEwsIE5VTEwsICJOVUxMIGNvbnRl eHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsK KyAgUkVUVVJOX05VTExfSUZfRkFJTF9OT05OVUxMX05VTUVSSUNfVFlQRSAo Y3R4dCwgbnVtZXJpY190eXBlKTsKKworICByZXR1cm4gKChnY2Nfaml0X3J2 YWx1ZSAqKWN0eHQKKwkgIC0+bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxsb25n IGxvbmc+IChudW1lcmljX3R5cGUsIHZhbHVlKSk7Cit9CisKIC8qIFB1Ymxp YyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxpYmdjY2ppdC5o LgogCiAgICBUaGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG86CkBA IC0yMDM1LDYgKzIwNDgsMTkgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkgIC0+ bmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+IChudW1lcmljX3R5cGUs IHZhbHVlKSk7CiB9CiAKK2djY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29u dGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9uZ19kb3VibGUgKGdjY19qaXRfY29u dGV4dCAqY3R4dCwKKwkJCQkJICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNf dHlwZSwKKwkJCQkJICAgICBsb25nIGRvdWJsZSB2YWx1ZSkKK3sKKyAgUkVU VVJOX05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgTlVMTCwgIk5VTEwgY29u dGV4dCIpOworICBKSVRfTE9HX0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkp OworICBSRVRVUk5fTlVMTF9JRl9GQUlMX05PTk5VTExfTlVNRVJJQ19UWVBF IChjdHh0LCBudW1lcmljX3R5cGUpOworCisgIHJldHVybiAoKGdjY19qaXRf cnZhbHVlICopY3R4dAorCSAgLT5uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGxv bmcgZG91YmxlPiAobnVtZXJpY190eXBlLCB2YWx1ZSkpOworfQorCiBnY2Nf aml0X3J2YWx1ZSAqCiBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2NvbXBsZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJCQkJ CQlnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKQEAgLTIwNTQsNiArMjA4 MCwyNiBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBs ZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAJICAgLT5uZXdf cnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZSBfQ29tcGxleD4gKG51bWVyaWNf dHlwZSwgdmFsdWUpKTsKIH0KIAorZ2NjX2ppdF9ydmFsdWUgKgorZ2NjX2pp dF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4X2xvbmdfZG91Ymxl ICgKKyAgZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAorICBnY2Nfaml0X3R5cGUg Km51bWVyaWNfdHlwZSwKKyAgX0NvbXBsZXggbG9uZyBkb3VibGUgdmFsdWUp Cit7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKGN0eHQsIE5VTEwsIE5VTEws ICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5nZXRf bG9nZ2VyICgpKTsKKyAgUkVUVVJOX05VTExfSUZfRkFJTF9OT05OVUxMX05V TUVSSUNfVFlQRSAoY3R4dCwgbnVtZXJpY190eXBlKTsKKworICBSRVRVUk5f TlVMTF9JRl9GQUlMX1BSSU5URjEgKAorICAgIG51bWVyaWNfdHlwZS0+aXNf ZmxvYXQgKCksCisgICAgY3R4dCwgTlVMTCwKKyAgICAibm90IGEgZmxvYXRp bmcgcG9pbnQgdHlwZSAodHlwZTogJXMpIiwKKyAgICBudW1lcmljX3R5cGUt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworCisgIHJldHVybiAoKGdjY19qaXRf cnZhbHVlICopY3R4dAorICAgICAgLT5uZXdfcnZhbHVlX2Zyb21fY29uc3Qg PF9Db21wbGV4IGxvbmcgZG91YmxlPiAobnVtZXJpY190eXBlLCB2YWx1ZSkp OworfQorCiAKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0 aW9uIGluIGxpYmdjY2ppdC5oLgogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xp YmdjY2ppdC5oIGIvZ2NjL2ppdC9saWJnY2NqaXQuaAppbmRleCBjZGFlYzQ1 MDk4MS4uMjEzNGM5MjQ2NWUgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Nj aml0LmgKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQuaApAQCAtMTA2OSw2ICsx MDY5LDE2IEBAIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fbG9u ZyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCQkJCSAgICAgIGdjY19qaXRf dHlwZSAqbnVtZXJpY190eXBlLAogCQkJCSAgICAgIGxvbmcgdmFsdWUpOwog CisjZGVmaW5lIExJQkdDQ0pJVF9IQVZFX0xPTkdMT05HX0NPTlNUQU5UUwor LyogR2V0IGEgY29uc3RhbnQgZnJvbSBhIGxvbmcgbG9uZy4KKworICAgVGhp cyBmdW5jdGlvbiB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8yNi4gWW91 IGNhbiB0ZXN0IGZvcgorICAgaXRzIHByZXNlbmNlIHdpdGg6CisgICAgICNp ZmRlZiBMSUJHQ0NKSVRfSEFWRV9MT05HTE9OR19DT05TVEFOVFMgKi8KK2V4 dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2xvbmdfbG9uZyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAor CQkJCQkgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKwkJCQkJICAg bG9uZyBsb25nIHZhbHVlKTsKIGV4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCiBn Y2Nfaml0X2NvbnRleHRfemVybyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAog CQkgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSk7CkBAIC0xMDgz LDcgKzEwOTMsMTcgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJv bV9kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkJCQkJZ2NjX2pp dF90eXBlICpudW1lcmljX3R5cGUsCiAJCQkJCWRvdWJsZSB2YWx1ZSk7CiAK LS8qIENvbXBsZXggZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorLyogR2V0 IGEgY29uc3RhbnQgZnJvbSBhIGxvbmcgZG91YmxlLgorCisgICBUaGlzIGZ1 bmN0aW9uIHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzI2LiBZb3UgY2Fu IHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2Ugd2l0aDoKKyAgICAgI2lmZGVm IExJQkdDQ0pJVF9IQVZFX0xPTkdMT05HX0NPTlNUQU5UUyAqLworZXh0ZXJu IGdjY19qaXRfcnZhbHVlICoKK2djY19qaXRfY29udGV4dF9uZXdfcnZhbHVl X2Zyb21fbG9uZ19kb3VibGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJ CQkJICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKwkJCQkJICAg ICBsb25nIGRvdWJsZSB2YWx1ZSk7CisKKy8qIEdldCBhIGNvbnN0YW50IGZy b20gYSBjb21wbGV4IGRvdWJsZS4KIAogICAgVGhpcyBBUEkgZW50cnlwb2lu dCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8yNjsgeW91IGNhbiB0ZXN0 IGZvciBpdHMKICAgIHByZXNlbmNlIHVzaW5nCkBAIC0xMDkzLDYgKzExMTMs MTcgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9jb21wbGV4 X2RvdWJsZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogCQkJCQkJZ2NjX2pp dF90eXBlICpudW1lcmljX3R5cGUsCiAJCQkJCQlfQ29tcGxleCBkb3VibGUg dmFsdWUpOwogCisvKiBHZXQgYSBjb25zdGFudCBmcm9tIGEgY29tcGxleCBs b25nIGRvdWJsZS4KKworICAgVGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRk ZWQgaW4gTElCR0NDSklUX0FCSV8yNjsgeW91IGNhbiB0ZXN0IGZvciBpdHMK KyAgIHByZXNlbmNlIHVzaW5nCisgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFW RV9MT05HTE9OR19DT05TVEFOVFMgKi8KK2V4dGVybiBnY2Nfaml0X3J2YWx1 ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhf bG9uZ19kb3VibGUgKAorICBnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisgIGdj Y19qaXRfdHlwZSAqbnVtZXJpY190eXBlLAorICBfQ29tcGxleCBsb25nIGRv dWJsZSB2YWx1ZSk7CisKIC8qIFBvaW50ZXJzLiAgKi8KIGV4dGVybiBnY2Nf aml0X3J2YWx1ZSAqCiBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X3B0ciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LApkaWZmIC0tZ2l0IGEvZ2Nj L2ppdC9saWJnY2NqaXQubWFwIGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCmlu ZGV4IGVmYTgwZDljZjJmLi5hYmEyZDY5MDc5ZiAxMDA2NDQKLS0tIGEvZ2Nj L2ppdC9saWJnY2NqaXQubWFwCisrKyBiL2djYy9qaXQvbGliZ2Njaml0Lm1h cApAQCAtMjgwLDUgKzI4MCw5IEBAIExJQkdDQ0pJVF9BQklfMjUgewogTElC R0NDSklUX0FCSV8yNiB7CiAgIGdsb2JhbDoKICAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlOworICAgIGdjY19q aXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9sb25nX2RvdWJs ZTsKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdf ZG91YmxlOworICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21f bG9uZ19sb25nOwogICAgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFi bGVfY29tcGxleF90eXBlczsKIH0gTElCR0NDSklUX0FCSV8yNTsKKwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5n LXRlc3RzLmggYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxp bmctdGVzdHMuaAppbmRleCBiODY5M2JkNWI5Yy4uMzg4MGI0MjhjMjYgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGlu Zy10ZXN0cy5oCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24t ZmFpbGluZy10ZXN0cy5oCkBAIC0yNzcsNiArMjc3LDEzIEBACiAjdW5kZWYg Y3JlYXRlX2NvZGUKICN1bmRlZiB2ZXJpZnlfY29kZQogCisvKiB0ZXN0LWxv bmctbGl0ZXJhbHMuYyAqLworI2RlZmluZSBjcmVhdGVfY29kZSBjcmVhdGVf Y29kZV9sb25nX2xpdGVyYWxzCisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlm eV9jb2RlX2xvbmdfbGl0ZXJhbHMKKyNpbmNsdWRlICJ0ZXN0LWxvbmctbGl0 ZXJhbHMuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVmIHZlcmlmeV9j b2RlCisKIC8qIHRlc3QtbG9uZy1zdHJpbmctbGl0ZXJhbC5jICovCiAjZGVm aW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2xvbmdfc3RyaW5nX2xpdGVy YWwKICNkZWZpbmUgdmVyaWZ5X2NvZGUgdmVyaWZ5X2NvZGVfbG9uZ19zdHJp bmdfbGl0ZXJhbApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1sb25nLWxpdGVyYWxzLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90 ZXN0LWxvbmctbGl0ZXJhbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uYTgzYWY4YjBlYjEKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWxvbmctbGl0ZXJhbHMuYwpA QCAtMCwwICsxLDI4MyBAQAorLyogVGVzdCBsb25nIGxpdGVyYWxzLgorCisg ICBJLmUuIGxvbmcgbG9uZywgbG9uZyBkb3VibGUgYW5kIGxvbmcgY29tcGxl eCBkb3VibGVzLgorCisgICBBbHNvIHRlc3QgTmFOOnMgYW5kIGluZjpzIHdp dGggZG91YmxlLiAqLworCisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5j bHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisjaW5jbHVk ZSAiaGFybmVzcy5oIgorCitpbnQgY29tcGFyZV9uYW5zKGRvdWJsZSBkMSwg ZG91YmxlIGQyKQoreworICB1bmlvbiB7ZG91YmxlIGQ7IHVuc2lnbmVkIGxv bmcgbG9uZyB1bGw7fSB1MSwgdTI7CisKKyAgdTEuZCA9IGQxOworICB1Mi5k ID0gZDI7CisKKyAgcmV0dXJuIHUxLnVsbCA9PSB1Mi51bGw7Cit9CisKK2lu dCBjb21wYXJlX25hbnNsKGxvbmcgZG91YmxlIGQxLCBsb25nIGRvdWJsZSBk MikKK3sKKyAgdW5pb24geyBsb25nIGRvdWJsZSBsZDsgdW5zaWduZWQgY2hh ciBhcnJbc2l6ZW9mIChsb25nIGRvdWJsZSldO30KKyAgICB1MSA9IHsuYXJy ID0gezB9fSwKKyAgICB1MiA9IHsuYXJyID0gezB9fTsKKyAgLyogWmVybyB0 aGUgYXJycy4gSSBkb24ndCBrbm93IGlmIGxvbmcgZG91YmxlIHplcm9lcyBh bGwgaXRzIHNpemUKKyAgICAgc2luY2Ugc29tZSBvZiBpdCBpcyBwYWRkaW5n LiAqLworCisgIHUxLmxkID0gZDE7CisgIHUyLmxkID0gZDI7CisKKyAgcmV0 dXJuIG1lbWNtcCAodTEuYXJyLCB1Mi5hcnIsIHNpemVvZiB1MS5hcnIpID09 IDA7Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX2NvZGVfbGl0X2NsZChnY2Nf aml0X2NvbnRleHQgKmN0eHQsCisgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpmbl9uYW1lLAorICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCisg ICAgICAgICAgICAgICAgICBfQ29tcGxleCBsb25nIGRvdWJsZSBsb2NhbF92 YWwsCisgICAgICAgICAgICAgICAgICBpbnQgbGl0X3R5cGUpCit7CisgIGdj Y19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0 eHQsIHR5cGUpOworCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19q aXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJ VF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICB0dCwgZm5fbmFtZSwgMCwgMCwg MCk7CisKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0 aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsKKworICAvKiBsb2NhbF90 eXBlIGYxID0gbG9jYWxfdmFsOyAqLworICBnY2Nfaml0X2x2YWx1ZSAqZjEg PSBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vLCAwLCB0dCwgImYx Iik7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKnIxOworCisgIGlmIChsaXRfdHlw ZSA9PSAnTCcpCisgICAgcjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1 ZV9mcm9tX2xvbmdfZG91YmxlICgKKyAgICAgIGN0eHQsIHR0LCBjcmVhbGwo bG9jYWxfdmFsKSk7CisgIGVsc2UgaWYgKGxpdF90eXBlID09ICdDJykKKyAg ICByMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxl eF9sb25nX2RvdWJsZSAoCisgICAgICBjdHh0LCB0dCwgbG9jYWxfdmFsKTsK KworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwg ZjEsIHIxKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAo YmxvY2ssIDAsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShmMSkpOworfQor CitzdGF0aWMgdm9pZAorbWFrZV9jb2RlX2xpdF9kIChnY2Nfaml0X2NvbnRl eHQgKmN0eHQsCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZuX25h bWUsCisgICAgICAgICAgICAgICAgIGludCB0eXBlLAorICAgICAgICAgICAg ICAgICBfQ29tcGxleCAgZG91YmxlIGxvY2FsX3ZhbCwKKyAgICAgICAgICAg ICAgICBpbnQgbGl0X3R5cGUpCit7CisgIGdjY19qaXRfdHlwZSAqdHQgPSBn Y2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIHR5cGUpOworCisgIGdj Y19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVu Y3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRF RCwKKyAgICB0dCwgZm5fbmFtZSwgMCwgMCwgMCk7CisKKyAgZ2NjX2ppdF9i bG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9v LCAic3RhcnQiKTsKKworICAvKiBsb2NhbF90eXBlIGYxID0gbG9jYWxfdmFs OyAqLworICBnY2Nfaml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19sb2NhbCAoZm9vLCAwLCB0dCwgImYxIik7CisKKyAgZ2NjX2ppdF9y dmFsdWUgKnIxOworCisgIGlmIChsaXRfdHlwZSA9PSAnZCcpCisgICAgcjEg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2RvdWJsZSAoCisg ICAgICBjdHh0LCB0dCwgbG9jYWxfdmFsKTsKKyAgZWxzZSBpZiAobGl0X3R5 cGUgPT0gJ2MnKQorICAgIHIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFs dWVfZnJvbV9jb21wbGV4X2RvdWJsZSAoCisgICAgICBjdHh0LCB0dCwgbG9j YWxfdmFsKTsKKworICBnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50IChi bG9jaywgMCwgZjEsIHIxKTsKKworICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRo X3JldHVybiAoYmxvY2ssIDAsIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZShm MSkpOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9jb2RlX2xpdF9sbCAoZ2Nj X2ppdF9jb250ZXh0ICpjdHh0LAorICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqZm5fbmFtZSwKKyAgICAgICAgICAgICAgICAgIGludCB0eXBlLAor ICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGxvY2FsX3ZhbCkKK3sKKyAg Z2NjX2ppdF90eXBlICp0dCA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAo Y3R4dCwgdHlwZSk7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vID0gZ2Nj X2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBHQ0Nf SklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIHR0LCBmbl9uYW1lLCAwLCAw LCAwKTsKKworICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVu Y3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworCisgIC8qIGxvY2Fs X3R5cGUgZjEgPSBsb2NhbF92YWw7ICovCisgIGdjY19qaXRfbHZhbHVlICpm MSA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2xvY2FsIChmb28sIDAsIHR0LCAi ZjEiKTsKKworICBnY2Nfaml0X3J2YWx1ZSAqcjE7CisKKyAgcjEgPSBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2xvbmdfbG9uZyAoCisgICAg Y3R4dCwgdHQsIGNyZWFsbChsb2NhbF92YWwpKTsKKworICBnY2Nfaml0X2Js b2NrX2FkZF9hc3NpZ25tZW50IChibG9jaywgMCwgZjEsIHIxKTsKKworICBn Y2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsIGdjY19q aXRfbHZhbHVlX2FzX3J2YWx1ZShmMSkpOworfQorCisKK3VuaW9uIHV1IHsg ZG91YmxlIGQ7IGxvbmcgbG9uZyBsOyB9IHU7CisKK3ZvaWQKK2NyZWF0ZV9j b2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZvaWQgKnVzZXJfZGF0YSkK K3sKKyAgKHZvaWQpIHVzZXJfZGF0YTsKKworICBnY2Nfaml0X2NvbnRleHRf c2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXMgKGN0eHQsIDEpOworCisg IG1ha2VfY29kZV9saXRfY2xkIChjdHh0LCAibG9uZ19kb3VibGVfbGRsaXRf MWMxIiwKKyAgICBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEUsCisgICAgLTEu MUwsICdMJyk7CisgIG1ha2VfY29kZV9saXRfY2xkIChjdHh0LCAibG9uZ19k b3VibGVfbGRsaXRfMUxkaXYzTCIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdf RE9VQkxFLAorICAgIDEvMy5MLCAnTCcpOworICBtYWtlX2NvZGVfbGl0X2Ns ZCAoY3R4dCwgImxvbmdfZG91YmxlX2xkbGl0X2luZiIsCisgICAgR0NDX0pJ VF9UWVBFX0xPTkdfRE9VQkxFLAorICAgIElORklOSVRZLCAnTCcpOworICBt YWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImxvbmdfZG91YmxlX2xkbGl0X21p bmYiLAorICAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKyAgICAtSU5G SU5JVFksICdMJyk7CisgIG1ha2VfY29kZV9saXRfY2xkIChjdHh0LCAibG9u Z19kb3VibGVfbGRsaXRfbmFuMSIsCisgICAgR0NDX0pJVF9UWVBFX0xPTkdf RE9VQkxFLAorICAgIG5hbmwoIjEiKSwgJ0wnKTsKKworICBtYWtlX2NvZGVf bGl0X2NsZCAoY3R4dCwgImNvbXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0XzFk aXYzXzJkaXYzaiIsCisgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19E T1VCTEUsCisgICAgMS8zLkwgKyAyLkxqLzMsICdDJyk7CisKKyAgbWFrZV9j b2RlX2xpdF9jbGQgKGN0eHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxp dF9pbmZfaW5maiIsCisgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19E T1VCTEUsCisgICAgQ01QTFhMIChJTkZJTklUWSwgSU5GSU5JVFkpLCAnQycp OworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwgImNvbXBsZXhfbG9uZ19k b3VibGVfY2xkbGl0X21pbmZfbWluZmoiLAorICAgIEdDQ19KSVRfVFlQRV9D T01QTEVYX0xPTkdfRE9VQkxFLAorICAgIENNUExYTCAoLUlORklOSVRZLCAt SU5GSU5JVFkpLCAnQycpOworICBtYWtlX2NvZGVfbGl0X2NsZCAoY3R4dCwg ImNvbXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0X25hbjFfbmFuMmoiLAorICAg IEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFLAorICAgIENNUExY TCAobmFubCAoIjEiKSwgbmFubCAoIjIiKSksICdDJyk7CisKKyAgbWFrZV9j b2RlX2xpdF9sbCAoY3R4dCwgImxvbmdfbG9uZ19sbGxpdF8yIiwKKyAgICBH Q0NfSklUX1RZUEVfTE9OR19MT05HLAorICAgIDIpOworCisgIG1ha2VfY29k ZV9saXRfbGwgKGN0eHQsICJsb25nX2xvbmdfbGxsaXRfbWluIiwKKyAgICBH Q0NfSklUX1RZUEVfTE9OR19MT05HLAorICAgIExMT05HX01JTik7CisKKyAg bWFrZV9jb2RlX2xpdF9sbCAoY3R4dCwgImxvbmdfbG9uZ19sbGxpdF9tYXgi LAorICAgIEdDQ19KSVRfVFlQRV9MT05HX0xPTkcsCisgICAgTExPTkdfTUFY KTsKKworICBtYWtlX2NvZGVfbGl0X2xsIChjdHh0LCAidWxvbmdfbG9uZ19s bGxpdF9tYXgiLAorICAgIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9MT05HX0xP TkcsCisgICAgVUxMT05HX01BWCk7CisKKyAgbWFrZV9jb2RlX2xpdF9kIChj dHh0LCAiZG91YmxlX25hbjEiLAorICAgIEdDQ19KSVRfVFlQRV9ET1VCTEUs CisgICAgbmFuKCIxIiksICdkJyk7CisgIG1ha2VfY29kZV9saXRfZCAoY3R4 dCwgImRvdWJsZV9pbmYiLAorICAgIEdDQ19KSVRfVFlQRV9ET1VCTEUsCisg ICAgSU5GSU5JVFksICdkJyk7CisgIG1ha2VfY29kZV9saXRfZCAoY3R4dCwg ImRvdWJsZV9taW5mIiwKKyAgICBHQ0NfSklUX1RZUEVfRE9VQkxFLAorICAg IC1JTkZJTklUWSwgJ2QnKTsKK30KKwordm9pZAordmVyaWZ5X2NvZGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkK K3sKKyAgQ0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7CisgIHsKKyAgICBkb3Vi bGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAg cmVzdWx0LCAiZG91YmxlX25hbjEiKTsKKworICAgIENIRUNLKGNvbXBhcmVf bmFucyAoZigpLCBuYW4oIjEiKSkpOworICB9CisgIHsKKyAgICBkb3VibGUg KCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVz dWx0LCAiZG91YmxlX2luZiIpOworCisgICAgQ0hFQ0tfVkFMVUUgKGYoKSwg SU5GSU5JVFkpOworICB9CisgIHsKKyAgICBkb3VibGUgKCpmKSgpID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0LCAiZG91Ymxl X21pbmYiKTsKKworICAgIENIRUNLX1ZBTFVFIChmKCksIC1JTkZJTklUWSk7 CisgIH0KKyAgeworICAgIGxvbmcgZG91YmxlICgqZikoKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImxvbmdfZG91Ymxl X2xkbGl0XzFjMSIpOworCisgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgLTEuMUwp OworICB9CisgIHsKKyAgICBsb25nIGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0 X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1bHQsICJsb25nX2RvdWJs ZV9sZGxpdF8xTGRpdjNMIik7CisKKyAgICBDSEVDS19WQUxVRShmICgpLCAx LkwvMy5MKTsKKyAgfQorICB7CisgICAgX0NvbXBsZXggbG9uZyBkb3VibGUg KCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVz dWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV9jbGRsaXRfMWRpdjNfMmRpdjNq Iik7CisKKyAgICBDSEVDS19WQUxVRSAoZigpLCAxLzMuTCArIDIuTGovMyk7 CisgIH0KKyAgeworICAgIF9Db21wbGV4IGxvbmcgZG91YmxlICgqZikoKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImNv bXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0X2luZl9pbmZqIik7CisKKyAgICBD SEVDS19WQUxVRSAoZigpLENNUExYTCAoSU5GSU5JVFksIElORklOSVRZKSk7 CisgIH0KKyAgeworICAgIF9Db21wbGV4IGxvbmcgZG91YmxlICgqZikoKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3VsdCwgImNv bXBsZXhfbG9uZ19kb3VibGVfY2xkbGl0X21pbmZfbWluZmoiKTsKKworICAg IENIRUNLX1ZBTFVFIChmKCksQ01QTFhMICgtSU5GSU5JVFksIC1JTkZJTklU WSkpOworICB9CisgIHsKKyAgICBfQ29tcGxleCBsb25nIGRvdWJsZSAoKmYp KCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisgICAgICByZXN1bHQs ICJjb21wbGV4X2xvbmdfZG91YmxlX2NsZGxpdF9uYW4xX25hbjJqIik7Cisg ICAgX0NvbXBsZXggZG91YmxlIGtleSA9IENNUExYTCAobmFubCAoIjEiKSwg bmFubCAoIjIiKSk7CisgICAgX0NvbXBsZXggZG91YmxlIGFucyA9IGYoKTsK KworICAgIENIRUNLIChjb21wYXJlX25hbnNsIChjcmVhbGwgKGtleSksIGNy ZWFsbCAoYW5zKSkpOworICAgIENIRUNLIChjb21wYXJlX25hbnNsIChjaW1h Z2wgKGtleSksIGNpbWFnbCAoYW5zKSkpOworICB9CisgIHsKKyAgICBsb25n IGxvbmcgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAg ICAgcmVzdWx0LCAibG9uZ19sb25nX2xsbGl0XzIiKTsKKworICAgIENIRUNL X1ZBTFVFIChmKCksIDIpOworICB9CisgIHsKKyAgICBsb25nIGxvbmcgKCpm KSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKAorICAgICAgcmVzdWx0 LCAibG9uZ19sb25nX2xsbGl0X21pbiIpOworCisgICAgQ0hFQ0tfVkFMVUUg KGYoKSwgTExPTkdfTUlOKTsKKyAgfQorICB7CisgICAgbG9uZyBsb25nICgq ZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlICgKKyAgICAgIHJlc3Vs dCwgImxvbmdfbG9uZ19sbGxpdF9tYXgiKTsKKworICAgIENIRUNLX1ZBTFVF IChmKCksIExMT05HX01BWCk7CisgIH0KKyAgeworICAgIHVuc2lnbmVkIGxv bmcgbG9uZyAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAoCisg ICAgICByZXN1bHQsICJ1bG9uZ19sb25nX2xsbGl0X21heCIpOworCisgICAg Q0hFQ0tfVkFMVUUgKGYoKSwgVUxMT05HX01BWCk7CisgIH0KK30KLS0gCjIu NDIuMAoK --------------8azMFtuMl8jGnpIImOb8BeLZ--