From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31720 invoked by alias); 7 Mar 2013 23:53:53 -0000 Received: (qmail 31704 invoked by uid 22791); 7 Mar 2013 23:53:51 -0000 X-SWARE-Spam-Status: No, hits=-5.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,KHOP_RCVD_TRUST,KHOP_THREADED,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_YE,RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail-we0-f172.google.com (HELO mail-we0-f172.google.com) (74.125.82.172) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 07 Mar 2013 23:53:43 +0000 Received: by mail-we0-f172.google.com with SMTP id d46so328211wer.31 for ; Thu, 07 Mar 2013 15:53:40 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:cc:content-type:x-gm-message-state; bh=WeQ1omWta0DNHSV7arlOjE09yv9pOHS0fj5EWqswoNE=; b=YjI4ACNaWkTP1+NM/R0BUKO3SzP5WnapvKsWzLfhVVg7A10NdLREHOyYXl/+z5T/di L4QF3hQfYdRO8Zrs4m69yJszbuvIalr1L28RQk0SmmkBz6iNC4brf+ifXfzMa9PrKJSJ 6ubvY6STv7tf+jaKmZ4Y042lDI8C6wwMS0jy4V6lGss3jDrfPdZuLPs4PVGjIL8+/tfS l4g9uPwn3oLT9by+L4htttqhfbzHpHqoTvSDm8j2k5++qoDLYLCjuU5Yruhw7ougMcep 4uUge6ZCz6UP94xKyVNmMvhXYudoYs8ZvgY6pbbUDRPU7SYksaQg2nE5VIc84KN7NNZb ha9Q== X-Received: by 10.194.60.195 with SMTP id j3mr220219wjr.33.1362700420712; Thu, 07 Mar 2013 15:53:40 -0800 (PST) MIME-Version: 1.0 Received: by 10.194.10.193 with HTTP; Thu, 7 Mar 2013 15:53:20 -0800 (PST) In-Reply-To: References: From: Caroline Tice Date: Thu, 07 Mar 2013 23:53:00 -0000 Message-ID: Subject: Re: [PATCH, updated] Vtable pointer verification, runtime library changes (patch 3 of 3) To: Jonathan Wakely Cc: GCC Patches , libstdc++@gcc.gnu.org, Diego Novillo , Luis Lozano , Bhaskar Janakiraman Content-Type: multipart/mixed; boundary=047d7b86e2f8831f4104d75e6a83 X-Gm-Message-State: ALoCoQlD1LeUzg1UJnXxd964imCYsQKp2SWtDrdCJwuq89CqdLgn68ZdfldGmYCEPIXFTKbD6vHIGLNoyv/PU3lp4dpnlfkG0P/Thv9aRGwTl3MyK3E6YldnMj238MgCkqL4cI2EV3kJLpiT7F8B/461IdpfXXDbAF6YQE/D2CQ5zKzotEm0fZFRmcXid75K+CpwxQbEvBi9 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2013-03/txt/msg00323.txt.bz2 --047d7b86e2f8831f4104d75e6a83 Content-Type: text/plain; charset=ISO-8859-1 Content-length: 2614 Hello, I believe this patch addresses all of your comments; I modified the configure.ac files to generate the configures, and I fixed the spelling mistakes in the comments. I still get the warnings when generating the Makefile.in files from the Makefile.am files, but the resulting files seem to be correct, and I don't know how to make the warnings go away. Please review this patch and let me know if it will be ok to commit when GCC opens up again. -- Caroline Tice cmtice@google.com ChangeLog (toplevel): 2013-03-07 Caroline Tice * configure.ac (CXX_FOR_TARGET,RAW_CXX_FOR_TARGET): Add libstdc++-v3/libsupc++/.libs to the library search path. * configure: Regenerate. ChangeLog (libstdc++-v3): 2013-03-07 Caroline Tice * configure: Regenerate. * src/Makefile.in: Regenerate. * src/c++98/Makefile.am (EXTRA_VTV_LDFLAGS, LIBVTV_FLAGS, VTV_CXXFLAGS): New definitions, conditioned on ENABLE_VTABLE_VERIFY. (AM_CXXFLAGS): Add VTV_CXXFLAGS to list. (CXXLINK): Add LIBVTV_FLAGS. * src/c++11/Makefile.am: Ditto. * src/c++98/Makefile.in: Regenerate. * src/Makefile.am (libvtv__la_LIBADD): Add definition, conditioned on ENABLE_VTABLE_VERIFY. (LIBVTV_FLAGS): Add definition, conditioned on ENABLE_VTABLE_VERIFY. (libstdc___la_LDFLAGS): Add 'Wl,-u_vtable_map_var_start, -u_vtable_map_var_end' if ENABLE_VTABLE_VERIFY is true. (AM_CXXFLAGS): Add VTV_CXXFLAGS. (CXXLINK): Add LIBVTV_FLAGS. * src/c++11/Makefile.in: Regenerate. * configure.ac (predep_objects_CXX): Add libgcc/vtv_start.o, if enable_vtable_verify is yes. (postdep_objects_CXX): Add libgcc/vtv_end.o if enable_vtable_verify is yes. (GLIBCXX_ENABLE_VTABLE_VERIFY): New definition. * libsupc++/vtv_set.h: New file. * libsupc++/vtv_stubs.cc: New file. * libsupc++/vtv_utils.cc: New file. * libsupc++/vtv_utils.h: New file. * libsupc++/vtv_init.cc: New file. * libsupc++/vtv_malloc.cc: New file. * libsupc++/Makefile.am (sources): Add vtv_rts.cc, vtv_malloc.cc and vtv_utils.cc to the list. (vtv_init_sources, vtv_stubs_soruces, libvtv_init_la_sources, libvtv_stubs_la_sources): New definitions. (toolexeclib_LTLIBRARIES): Add libvtv_init.la and libvtv_stubs.la * libsupc++/Makefile.in: Regenerate. * libsupc++/vtv_rts.cc: New file. * libsupc++/vtv_malloc.h: New file. * libsupc++/vtv_rts.h: New file. * libsupc++/vtv_fail.h: New file. * libsupc++/vtv_map.h: New file. * config/abi/pre/gnu.ver: Add vtable verification runtime functions to the list of globally visible symbols. * acinclude.m4: Add GLIBCXX_ENABLE_VTABLE_VERIFY option and comments. --047d7b86e2f8831f4104d75e6a83 Content-Type: application/octet-stream; name="fsf-vtable-verification.v6.runtime.patch" Content-Disposition: attachment; filename="fsf-vtable-verification.v6.runtime.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_he0kjnhm0 Content-length: 181028 SW5kZXg6IGNvbmZpZ3VyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBj b25maWd1cmUJKHJldmlzaW9uIDE5NjUxNikKKysrIGNvbmZpZ3VyZQkod29y a2luZyBjb3B5KQpAQCAtMTM3NDEsNyArMTM3NDEsNyBAQCBlbHNlCiAgIGVz YWMKICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KICAgICAjIEFuIGluLXRy ZWUgdG9vbCBpcyBhdmFpbGFibGUgYW5kIHdlIGNhbiB1c2UgaXQKLSAgICBD WFhfRk9SX1RBUkdFVD0nJCRyLyQoSE9TVF9TVUJESVIpL2djYy94ZysrIC1C JCRyLyQoSE9TVF9TVUJESVIpL2djYy8gLW5vc3RkaW5jKysgYGlmIHRlc3Qg LWYgJCRyLyQoVEFSR0VUX1NVQkRJUikvbGlic3RkYysrLXYzL3NjcmlwdHMv dGVzdHN1aXRlX2ZsYWdzOyB0aGVuICQoU0hFTEwpICQkci8kKFRBUkdFVF9T VUJESVIpL2xpYnN0ZGMrKy12My9zY3JpcHRzL3Rlc3RzdWl0ZV9mbGFncyAt LWJ1aWxkLWluY2x1ZGVzOyBlbHNlIGVjaG8gLWZ1bmNvbmZpZ3VyZWQtbGli c3RkYysrLXYzIDsgZmlgIC1MJCRyLyQoVEFSR0VUX1NVQkRJUikvbGlic3Rk YysrLXYzL3NyYyAtTCQkci8kKFRBUkdFVF9TVUJESVIpL2xpYnN0ZGMrKy12 My9zcmMvLmxpYnMnCisgICAgQ1hYX0ZPUl9UQVJHRVQ9JyQkci8kKEhPU1Rf U1VCRElSKS9nY2MveGcrKyAtQiQkci8kKEhPU1RfU1VCRElSKS9nY2MvIC1u b3N0ZGluYysrIGBpZiB0ZXN0IC1mICQkci8kKFRBUkdFVF9TVUJESVIpL2xp YnN0ZGMrKy12My9zY3JpcHRzL3Rlc3RzdWl0ZV9mbGFnczsgdGhlbiAkKFNI RUxMKSAkJHIvJChUQVJHRVRfU1VCRElSKS9saWJzdGRjKystdjMvc2NyaXB0 cy90ZXN0c3VpdGVfZmxhZ3MgLS1idWlsZC1pbmNsdWRlczsgZWxzZSBlY2hv IC1mdW5jb25maWd1cmVkLWxpYnN0ZGMrKy12MyA7IGZpYCAtTCQkci8kKFRB UkdFVF9TVUJESVIpL2xpYnN0ZGMrKy12My9zcmMgLUwkJHIvJChUQVJHRVRf U1VCRElSKS9saWJzdGRjKystdjMvc3JjLy5saWJzIC1MJCRyLyQoVEFSR0VU X1NVQkRJUikvbGlic3RkYysrLXYzL2xpYnN1cGMrKy8ubGlicycKICAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDoganVzdCBjb21waWxlZCIgPiY1CiAkYXNfZWNobyAianVzdCBjb21waWxl ZCIgPiY2OyB9CiAgIGVsaWYgZXhwciAieCRDWFhfRk9SX1RBUkdFVCIgOiAi eC8iID4gL2Rldi9udWxsOyB0aGVuCkBAIC0xMzc4Niw3ICsxMzc4Niw3IEBA IGVsc2UKICAgZXNhYwogICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgogICAg ICMgQW4gaW4tdHJlZSB0b29sIGlzIGF2YWlsYWJsZSBhbmQgd2UgY2FuIHVz ZSBpdAotICAgIFJBV19DWFhfRk9SX1RBUkdFVD0nJCRyLyQoSE9TVF9TVUJE SVIpL2djYy94Z2NjIC1zaGFyZWQtbGliZ2NjIC1CJCRyLyQoSE9TVF9TVUJE SVIpL2djYyAtbm9zdGRpbmMrKyAtTCQkci8kKFRBUkdFVF9TVUJESVIpL2xp YnN0ZGMrKy12My9zcmMgLUwkJHIvJChUQVJHRVRfU1VCRElSKS9saWJzdGRj KystdjMvc3JjLy5saWJzJworICAgIFJBV19DWFhfRk9SX1RBUkdFVD0nJCRy LyQoSE9TVF9TVUJESVIpL2djYy94Z2NjIC1zaGFyZWQtbGliZ2NjIC1CJCRy LyQoSE9TVF9TVUJESVIpL2djYyAtbm9zdGRpbmMrKyAtTCQkci8kKFRBUkdF VF9TVUJESVIpL2xpYnN0ZGMrKy12My9zcmMgLUwkJHIvJChUQVJHRVRfU1VC RElSKS9saWJzdGRjKystdjMvc3JjLy5saWJzIC1MJCRyLyQoVEFSR0VUX1NV QkRJUikvbGlic3RkYysrLXYzL2xpYnN1cGMrKy8ubGlicycKICAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog anVzdCBjb21waWxlZCIgPiY1CiAkYXNfZWNobyAianVzdCBjb21waWxlZCIg PiY2OyB9CiAgIGVsaWYgZXhwciAieCRSQVdfQ1hYX0ZPUl9UQVJHRVQiIDog IngvIiA+IC9kZXYvbnVsbDsgdGhlbgpJbmRleDogbGlic3RkYysrLXYzL2Nv bmZpZ3VyZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJzdGRjKyst djMvY29uZmlndXJlCShyZXZpc2lvbiAxOTY1MTYpCisrKyBsaWJzdGRjKyst djMvY29uZmlndXJlCSh3b3JraW5nIGNvcHkpCkBAIC02NjQsNiArNjY0LDgg QEAgTElCSUNPTlYKIE9QVF9MREZMQUdTCiBTRUNUSU9OX0xERkxBR1MKIEdM SUJDWFhfTElCUworRU5BQkxFX1ZUQUJMRV9WRVJJRllfRkFMU0UKK0VOQUJM RV9WVEFCTEVfVkVSSUZZX1RSVUUKIEVOQUJMRV9XRVJST1JfRkFMU0UKIEVO QUJMRV9XRVJST1JfVFJVRQogRU5BQkxFX1BZVEhPTkRJUl9GQUxTRQpAQCAt ODY2LDYgKzg2OCw3IEBAIGVuYWJsZV9mdWxseV9keW5hbWljX3N0cmluZwog ZW5hYmxlX2V4dGVybl90ZW1wbGF0ZQogd2l0aF9weXRob25fZGlyCiBlbmFi bGVfd2Vycm9yCitlbmFibGVfdnRhYmxlX3ZlcmlmeQogZW5hYmxlX2xpYnN0 ZGN4eF90aW1lCiBlbmFibGVfdGxzCiBlbmFibGVfcnBhdGgKQEAgLTE1NTgs NiArMTU2MSw3IEBAIE9wdGlvbmFsIEZlYXR1cmVzOgogICAtLWVuYWJsZS1l eHRlcm4tdGVtcGxhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5h YmxlIGV4dGVybiB0ZW1wbGF0ZSBbZGVmYXVsdD15ZXNdCiAgIC0tZW5hYmxl LXdlcnJvciAgICAgICAgIHR1cm5zIG9uIC1XZXJyb3IgW2RlZmF1bHQ9eWVz XQorICAtLWVuYWJsZS12dGFibGUtdmVyaWZ5ICBlbmFibGUgdnRhYmxlIHZl cmlmeSBbZGVmYXVsdD1ub10KICAgLS1lbmFibGUtbGlic3RkY3h4LXRpbWVb PUtJTkRdCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBLSU5EIGZv ciBjaGVjayB0eXBlIFtkZWZhdWx0PW5vXQogICAtLWVuYWJsZS10bHMgICAg ICAgICAgICBVc2UgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgW2RlZmF1bHQ9eWVz XQpAQCAtMzUzMCwxMSArMzUzNCwxMSBAQCBNQUtFSU5GTz0ke01BS0VJTkZP LSIke2FtX21pc3NpbmdfcnVufW1hCiAKICMgV2UgbmVlZCBhd2sgZm9yIHRo ZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9u CiAjIHNvbWUgcGxhdGZvcm1zLgotIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZv ciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVz ZWQKLSMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3Bl ciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgotQU1UQVI9JyQke1RBUi10YXJ9 JworIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRp YmlsaXR5LgogCi1hbV9fdGFyPSckJHtUQVItdGFyfSBjaG9mIC0gIiQkdGFy ZGlyIicgYW1fX3VudGFyPSckJHtUQVItdGFyfSB4ZiAtJworQU1UQVI9JHtB TVRBUi0iJHthbV9taXNzaW5nX3J1bn10YXIifQorCithbV9fdGFyPScke0FN VEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0g eGYgLScKIAogCiAKQEAgLTExNTEzLDcgKzExNTE3LDcgQEAgZWxzZQogICBs dF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3Vz Y29yZT0yCiAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCiAgIGNhdCA+IGNv bmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0jbGluZSAxMTUxNiAiY29uZmln dXJlIgorI2xpbmUgMTE1MjAgImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25m ZGVmcy5oIgogCiAjaWYgSEFWRV9ETEZDTl9ICkBAIC0xMTYxOSw3ICsxMTYy Myw3IEBAIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3Jl PTE7IGx0X2RsbmVlZF91c2NvcmU9MgogICBsdF9zdGF0dXM9JGx0X2RsdW5r bm93bgogICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotI2xp bmUgMTE2MjIgImNvbmZpZ3VyZSIKKyNsaW5lIDExNjI2ICJjb25maWd1cmUi CiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApA QCAtMTQ5MDYsNiArMTQ5MTAsMTIgQEAgZXNhYwogCiAKIAoraWYgdGVzdCAi JGVuYWJsZV92dGFibGVfdmVyaWZ5IiA9IHllczsgdGhlbgorICBwcmVkZXBf b2JqZWN0c19DWFg9IiR7cHJlZGVwX29iamVjdHNfQ1hYfSAke2dsaWJjeHhf YnVpbGRkaXJ9Ly4uL2xpYmdjYy92dHZfc3RhcnQubyIKKyAgcG9zdGRlcF9v YmplY3RzX0NYWD0iJHtwb3N0ZGVwX29iamVjdHNfQ1hYfSAke2dsaWJjeHhf YnVpbGRkaXJ9Ly4uL2xpYmdjYy92dHZfZW5kLm8iCitmaQorCisKICMgbGli dG9vbCB2YXJpYWJsZXMgZm9yIEMrKyBzaGFyZWQgYW5kIHBvc2l0aW9uLWlu ZGVwZW5kZW50IGNvbXBpbGVzLgogIwogIyBVc2UgZ2xpYmN4eF9sdF9waWNf ZmxhZyB0byBkZXNpZ25hdGUgdGhlIGF1dG9tYWtlIHZhcmlhYmxlCkBAIC0x NTAzMyw3ICsxNTA0Myw3IEBAIGZpCiAgICAgIwogICAgICMgRmFrZSB3aGF0 IEFDX1RSWV9DT01QSUxFIGRvZXMuICBYWFggTG9vayBhdCByZWRvaW5nIHRo aXMgbmV3LXN0eWxlLgogICAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDwg RU9GCi0jbGluZSAxNTAzNiAiY29uZmlndXJlIgorI2xpbmUgMTUwNDYgImNv bmZpZ3VyZSIKIHN0cnVjdCBTIHsgflMoKTsgfTsKIHZvaWQgYmFyKCk7CiB2 b2lkIGZvbygpCkBAIC0xNTM4Myw3ICsxNTM5Myw3IEBAICRhc19lY2hvICIk Z2xpYmN4eF9jdl9hdG9taWNfbG9uZ19sb25nIgogICAjIEZha2Ugd2hhdCBB Q19UUllfQ09NUElMRSBkb2VzLgogCiAgICAgY2F0ID4gY29uZnRlc3QuJGFj X2V4dCA8PCBFT0YKLSNsaW5lIDE1Mzg2ICJjb25maWd1cmUiCisjbGluZSAx NTM5NiAiY29uZmlndXJlIgogaW50IG1haW4oKQogewogICB0eXBlZGVmIGJv b2wgYXRvbWljX3R5cGU7CkBAIC0xNTQxOCw3ICsxNTQyOCw3IEBAICRhc19l Y2hvICIkZ2xpYmN4eF9jdl9hdG9taWNfYm9vbCIgPiY2OwogICAgIHJtIC1m IGNvbmZ0ZXN0KgogCiAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBF T0YKLSNsaW5lIDE1NDIxICJjb25maWd1cmUiCisjbGluZSAxNTQzMSAiY29u ZmlndXJlIgogaW50IG1haW4oKQogewogICB0eXBlZGVmIHNob3J0IGF0b21p Y190eXBlOwpAQCAtMTU0NTMsNyArMTU0NjMsNyBAQCAkYXNfZWNobyAiJGds aWJjeHhfY3ZfYXRvbWljX3Nob3J0IiA+JjY7CiAgICAgcm0gLWYgY29uZnRl c3QqCiAKICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8IEVPRgotI2xp bmUgMTU0NTYgImNvbmZpZ3VyZSIKKyNsaW5lIDE1NDY2ICJjb25maWd1cmUi CiBpbnQgbWFpbigpCiB7CiAgIC8vIE5COiBfQXRvbWljX3dvcmQgbm90IG5l Y2Vzc2FyaWx5IGludC4KQEAgLTE1NDg5LDcgKzE1NDk5LDcgQEAgJGFzX2Vj aG8gIiRnbGliY3h4X2N2X2F0b21pY19pbnQiID4mNjsgfQogICAgIHJtIC1m IGNvbmZ0ZXN0KgogCiAgICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PCBF T0YKLSNsaW5lIDE1NDkyICJjb25maWd1cmUiCisjbGluZSAxNTUwMiAiY29u ZmlndXJlIgogaW50IG1haW4oKQogewogICB0eXBlZGVmIGxvbmcgbG9uZyBh dG9taWNfdHlwZTsKQEAgLTE1NTY4LDcgKzE1NTc4LDcgQEAgJGFzX2VjaG8g IiRhc19tZTogV0FSTklORzogUGVyZm9ybWFuY2UgbwogICAjIHVubmVjZXNz YXJ5IGZvciB0aGlzIHRlc3QuCiAKICAgICBjYXQgPiBjb25mdGVzdC4kYWNf ZXh0IDw8IEVPRgotI2xpbmUgMTU1NzEgImNvbmZpZ3VyZSIKKyNsaW5lIDE1 NTgxICJjb25maWd1cmUiCiBpbnQgbWFpbigpCiB7CiAgIF9EZWNpbWFsMzIg ZDE7CkBAIC0xNTYxMCw3ICsxNTYyMCw3IEBAIGFjX2NvbXBpbGVyX2dudT0k YWNfY3ZfY3h4X2NvbXBpbGVyX2dudQogICAjIHVubmVjZXNzYXJ5IGZvciB0 aGlzIHRlc3QuCiAKICAgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8IEVP RgotI2xpbmUgMTU2MTMgImNvbmZpZ3VyZSIKKyNsaW5lIDE1NjIzICJjb25m aWd1cmUiCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CiAg IHN0cnVjdCBzYW1lCiAgIHsgdHlwZWRlZiBUMiB0eXBlOyB9OwpAQCAtMTU2 NDQsNyArMTU2NTQsNyBAQCAkYXNfZWNobyAiJGVuYWJsZV9pbnQxMjgiID4m NjsgfQogICAgIHJtIC1mIGNvbmZ0ZXN0KgogCiAgICAgY2F0ID4gY29uZnRl c3QuJGFjX2V4dCA8PCBFT0YKLSNsaW5lIDE1NjQ3ICJjb25maWd1cmUiCisj bGluZSAxNTY1NyAiY29uZmlndXJlIgogdGVtcGxhdGU8dHlwZW5hbWUgVDEs IHR5cGVuYW1lIFQyPgogICBzdHJ1Y3Qgc2FtZQogICB7IHR5cGVkZWYgVDIg dHlwZTsgfTsKQEAgLTE3Mzc5LDYgKzE3Mzg5LDI5IEBAICRhc19lY2hvICIk ZW5hYmxlX3dlcnJvciIgPiY2OyB9CiAKIAogCisKKyAgICMgQ2hlY2sgd2hl dGhlciAtLWVuYWJsZS12dGFibGUtdmVyaWZ5IHdhcyBnaXZlbi4KK2lmIHRl c3QgIiR7ZW5hYmxlX3Z0YWJsZV92ZXJpZnkrc2V0fSIgPSBzZXQ7IHRoZW4g OgorICBlbmFibGV2YWw9JGVuYWJsZV92dGFibGVfdmVyaWZ5OworICAgICAg Y2FzZSAiJGVuYWJsZXZhbCIgaW4KKyAgICAgICB5ZXN8bm8pIDs7CisgICAg ICAgKikgYXNfZm5fZXJyb3IgIkFyZ3VtZW50IHRvIGVuYWJsZS9kaXNhYmxl IHZ0YWJsZS12ZXJpZnkgbXVzdCBiZSB5ZXMgb3Igbm8iICIkTElORU5PIiA1 IDs7CisgICAgICBlc2FjCisKK2Vsc2UKKyAgZW5hYmxlX3Z0YWJsZV92ZXJp Znk9bm8KK2ZpCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHZ0YWJsZSB2ZXJpZnkgc3Vw cG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdnRhYmxlIHZl cmlmeSBzdXBwb3J0Li4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3Z0YWJs ZV92ZXJpZnkiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfdnRhYmxlX3Zlcmlm eSIgPiY2OyB9CisKKworCisKICMgQ2hlY2tzIGZvciBvcGVyYXRpbmcgc3lz dGVtcyBzdXBwb3J0IHRoYXQgZG9lc24ndCByZXF1aXJlIGxpbmtpbmcuCiAK IApAQCAtNzI4MDMsNiArNzI4MzYsMTUgQEAgZWxzZQogZmkKIAogCisgICAg aWYgdGVzdCAkZW5hYmxlX3Z0YWJsZV92ZXJpZnkgPSB5ZXM7IHRoZW4KKyAg RU5BQkxFX1ZUQUJMRV9WRVJJRllfVFJVRT0KKyAgRU5BQkxFX1ZUQUJMRV9W RVJJRllfRkFMU0U9JyMnCitlbHNlCisgIEVOQUJMRV9WVEFCTEVfVkVSSUZZ X1RSVUU9JyMnCisgIEVOQUJMRV9WVEFCTEVfVkVSSUZZX0ZBTFNFPQorZmkK KworCiAgICAgaWYgdGVzdCAkZW5hYmxlX3N5bXZlcnMgIT0gbm87IHRoZW4K ICAgRU5BQkxFX1NZTVZFUlNfVFJVRT0KICAgRU5BQkxFX1NZTVZFUlNfRkFM U0U9JyMnCkBAIC03MzI0Niw2ICs3MzI4OCwxMCBAQCBpZiB0ZXN0IC16ICIk e0VOQUJMRV9XRVJST1JfVFJVRX0iICYmIHRlCiAgIGFzX2ZuX2Vycm9yICJj b25kaXRpb25hbCBcIkVOQUJMRV9XRVJST1JcIiB3YXMgbmV2ZXIgZGVmaW5l ZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52 b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKIGZpCitpZiB0ZXN0 IC16ICIke0VOQUJMRV9WVEFCTEVfVkVSSUZZX1RSVUV9IiAmJiB0ZXN0IC16 ICIke0VOQUJMRV9WVEFCTEVfVkVSSUZZX0ZBTFNFfSI7IHRoZW4KKyAgYXNf Zm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiRU5BQkxFX1ZUQUJMRV9WRVJJRllc IiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUg bWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5F Tk8iIDUKK2ZpCiBpZiB0ZXN0IC16ICIke0VOQUJMRV9TWU1WRVJTX1RSVUV9 IiAmJiB0ZXN0IC16ICIke0VOQUJMRV9TWU1WRVJTX0ZBTFNFfSI7IHRoZW4K ICAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiRU5BQkxFX1NZTVZFUlNc IiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUg bWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5F Tk8iIDUKSW5kZXg6IGxpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4KPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gbGlic3RkYysrLXYzL3NyYy9NYWtl ZmlsZS5pbgkocmV2aXNpb24gMTk2NTE2KQorKysgbGlic3RkYysrLXYzL3Ny Yy9NYWtlZmlsZS5pbgkod29ya2luZyBjb3B5KQpAQCAtMzY2LDkgKzM2Niwy MiBAQCBsaWJzdGRjX19fbGFfREVQRU5ERU5DSUVTID0gXAogCSQodG9wX2J1 aWxkZGlyKS9zcmMvYysrOTgvbGliYysrOThjb252ZW5pZW5jZS5sYSBcCiAJ JCh0b3BfYnVpbGRkaXIpL3NyYy9jKysxMS9saWJjKysxMWNvbnZlbmllbmNl LmxhCiAKLWxpYnN0ZGNfX19sYV9MREZMQUdTID0gXAotCS12ZXJzaW9uLWlu Zm8gJChsaWJ0b29sX1ZFUlNJT04pICR7dmVyc2lvbl9hcmd9IC1sbQorQEVO QUJMRV9WVEFCTEVfVkVSSUZZX0ZBTFNFQGxpYnN0ZGNfX19sYV9MREZMQUdT ID0gXAorQEVOQUJMRV9WVEFCTEVfVkVSSUZZX0ZBTFNFQAktdmVyc2lvbi1p bmZvICQobGlidG9vbF9WRVJTSU9OKSAke3ZlcnNpb25fYXJnfSAtbG0KIAor QEVOQUJMRV9WVEFCTEVfVkVSSUZZX1RSVUVAbGlic3RkY19fX2xhX0xERkxB R1MgPSBcCitARU5BQkxFX1ZUQUJMRV9WRVJJRllfVFJVRUAJLXZlcnNpb24t aW5mbyAkKGxpYnRvb2xfVkVSU0lPTikgJHt2ZXJzaW9uX2FyZ30gLWxtIC1X bCwtdV92dGFibGVfbWFwX3ZhcnNfc3RhcnQsLXVfdnRhYmxlX21hcF92YXJz X2VuZAorCitARU5BQkxFX1ZUQUJMRV9WRVJJRllfRkFMU0VAbGlidnR2X19f bGFfTElCQUREID0gCitARU5BQkxFX1ZUQUJMRV9WRVJJRllfVFJVRUBsaWJ2 dHZfX19sYV9MSUJBREQgPSBcCitARU5BQkxFX1ZUQUJMRV9WRVJJRllfVFJV RUAJJCh0b3BfYnVpbGRkaXIpL2xpYnN1cGMrKy8ubGlicworCitARU5BQkxF X1ZUQUJMRV9WRVJJRllfRkFMU0VATElCVlRWX0ZMQUdTID0gCitARU5BQkxF X1ZUQUJMRV9WRVJJRllfVFJVRUBMSUJWVFZfRkxBR1MgPSBcCitARU5BQkxF X1ZUQUJMRV9WRVJJRllfVFJVRUAJLUwkKGxpYnZ0dl9fX2xhX0xJQkFERCkg LS13aG9sZS1hcmNoaXZlIC1sdnR2X2luaXQgLS1uby13aG9sZS1hcmNoaXZl CisKK0BFTkFCTEVfVlRBQkxFX1ZFUklGWV9GQUxTRUBWVFZfQ1hYRkxBR1Mg PSAKK0BFTkFCTEVfVlRBQkxFX1ZFUklGWV9UUlVFQFZUVl9DWFhGTEFHUyA9 IC1mdnRhYmxlLXZlcmlmeT1zdGQKIGxpYnN0ZGNfX19sYV9MSU5LID0gJChD WFhMSU5LKSAkKGxpYnN0ZGNfX19sYV9MREZMQUdTKQogCiAjIEEgbm90ZSBv biBjb21wYXRpYmlsaXR5IGFuZCBzdGF0aWMgbGlicmFyaWVzLgpAQCAtNDAw LDcgKzQxMyw3IEBAIGxpYnN0ZGNfX19sYV9MSU5LID0gJChDWFhMSU5LKSAk KGxpYnN0ZGMKICMgYXMgdGhlIG9jY2FzaW9uIGNhbGxzIGZvciBpdC4KIEFN X0NYWEZMQUdTID0gXAogCSQoZ2xpYmN4eF9jb21waWxlcl9waWNfZmxhZykg XAotCSQoWFRFTVBMQVRFX0ZMQUdTKSBcCisJJChYVEVNUExBVEVfRkxBR1Mp ICQoVlRWX0NYWEZMQUdTKSBcCiAJJChXQVJOX0NYWEZMQUdTKSAkKE9QVElN SVpFX0NYWEZMQUdTKSAkKENPTkZJR19DWFhGTEFHUykKIAogCkBAIC00NDgs NiArNDYxLDcgQEAgQ1hYTElOSyA9IFwKIAkkKExJQlRPT0wpIC0tdGFnIENY WCBcCiAJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCiAJ LS1tb2RlPWxpbmsgJChDWFgpIFwKKwkkKExJQlZUVl9GTEFHUykgXAogCSQo T1BUX0xERkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdT KSAkKExUTERGTEFHUykgLW8gJEAKIAogQEVOQUJMRV9TWU1WRVJTX1RSVUVA Q0xFQU5GSUxFUyA9IGxpYnN0ZGMrKy1zeW1ib2xzLnZlciAkKHZlcnNpb25f ZGVwKQpJbmRleDogbGlic3RkYysrLXYzL3NyYy9jKys5OC9NYWtlZmlsZS5h bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJzdGRjKystdjMvc3Jj L2MrKzk4L01ha2VmaWxlLmFtCShyZXZpc2lvbiAxOTY1MTYpCisrKyBsaWJz dGRjKystdjMvc3JjL2MrKzk4L01ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkp CkBAIC0xNDIsNiArMTQyLDE4IEBAIHZwYXRoICUgJCh0b3Bfc3JjZGlyKS9z cmMvYysrOTgKIAogbGliY19fOThjb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0g JChzb3VyY2VzKQogCitpZiBFTkFCTEVfVlRBQkxFX1ZFUklGWQorRVhUUkFf VlRWX0xERkxBR1MgPSBcCisgICAgICAgIC1XbCwtdV92dGFibGVfbWFwX3Zh cnNfc3RhcnQsLXVfdnRhYmxlX21hcF92YXJzX2VuZAorTElCVlRWX0ZMQUdT ID0gXAorICAgICAgICAtTCQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvLmxp YnMgLS13aG9sZS1hcmNoaXZlIC1sdnR2X2luaXQgLS1uby13aG9sZS1hcmNo aXZlCitWVFZfQ1hYRkxBR1MgPSAtZnZ0YWJsZS12ZXJpZnk9c3RkICQoRVhU UkFfVlRWX0xERkxBR1MpCitlbHNlCitFWFRSQV9WVFZfTERGTEFHUyA9CitM SUJWVFZfRkxBR1MgPQorVlRWX0NYWEZMQUdTID0KK2VuZGlmCisKICMgVXNl IHNwZWNpYWwgcnVsZXMgZm9yIHRoZSBkZXByZWNhdGVkIHNvdXJjZSBmaWxl cyBzbyB0aGF0IHRoZXkgZmluZAogIyBkZXByZWNhdGVkIGluY2x1ZGUgZmls ZXMuCiBHTElCQ1hYX0lOQ0xVREVfRElSPSQoZ2xpYmN4eF9idWlsZGRpcikv aW5jbHVkZQpAQCAtMTcyLDcgKzE4NCw3IEBAIHBhcmFsbGVsX3NldHRpbmdz Lm86IHBhcmFsbGVsX3NldHRpbmdzLmMKICMgYXMgdGhlIG9jY2FzaW9uIGNh bGxzIGZvciBpdC4KIEFNX0NYWEZMQUdTID0gXAogCSQoZ2xpYmN4eF9sdF9w aWNfZmxhZykgJChnbGliY3h4X2NvbXBpbGVyX3NoYXJlZF9mbGFnKSBcCi0J JChYVEVNUExBVEVfRkxBR1MpIFwKKwkkKFhURU1QTEFURV9GTEFHUykgJChW VFZfQ1hYRkxBR1MpIFwKIAkkKFdBUk5fQ1hYRkxBR1MpICQoT1BUSU1JWkVf Q1hYRkxBR1MpICQoQ09ORklHX0NYWEZMQUdTKQogCiBBTV9NQUtFRkxBR1Mg PSBcCkBAIC0yMjIsNCArMjM0LDUgQEAgQ1hYTElOSyA9IFwKIAkkKExJQlRP T0wpIC0tdGFnIENYWCAtLXRhZyBkaXNhYmxlLXNoYXJlZCBcCiAJJChBTV9M SUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCiAJLS1tb2RlPWxpbmsg JChDWFgpIFwKKwkkKExJQlZUVl9GTEFHUykgXAogCSQoT1BUX0xERkxBR1Mp ICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExUTERGTEFH UykgLW8gJEAKSW5kZXg6IGxpYnN0ZGMrKy12My9zcmMvYysrOTgvTWFrZWZp bGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGlic3RkYysrLXYz L3NyYy9jKys5OC9NYWtlZmlsZS5pbgkocmV2aXNpb24gMTk2NTE2KQorKysg bGlic3RkYysrLXYzL3NyYy9jKys5OC9NYWtlZmlsZS5pbgkod29ya2luZyBj b3B5KQpAQCAtMzk3LDYgKzM5NywxNiBAQCBzb3VyY2VzID0gXAogCSR7aG9z dF9zb3VyY2VzX2V4dHJhfQogCiBsaWJjX185OGNvbnZlbmllbmNlX2xhX1NP VVJDRVMgPSAkKHNvdXJjZXMpCitARU5BQkxFX1ZUQUJMRV9WRVJJRllfRkFM U0VARVhUUkFfVlRWX0xERkxBR1MgPSAKK0BFTkFCTEVfVlRBQkxFX1ZFUklG WV9UUlVFQEVYVFJBX1ZUVl9MREZMQUdTID0gXAorQEVOQUJMRV9WVEFCTEVf VkVSSUZZX1RSVUVAICAgICAgICAtV2wsLXVfdnRhYmxlX21hcF92YXJzX3N0 YXJ0LC11X3Z0YWJsZV9tYXBfdmFyc19lbmQKKworQEVOQUJMRV9WVEFCTEVf VkVSSUZZX0ZBTFNFQExJQlZUVl9GTEFHUyA9IAorQEVOQUJMRV9WVEFCTEVf VkVSSUZZX1RSVUVATElCVlRWX0ZMQUdTID0gXAorQEVOQUJMRV9WVEFCTEVf VkVSSUZZX1RSVUVAICAgICAgICAtTCQodG9wX2J1aWxkZGlyKS9saWJzdXBj KysvLmxpYnMgLS13aG9sZS1hcmNoaXZlIC1sdnR2X2luaXQgLS1uby13aG9s ZS1hcmNoaXZlCisKK0BFTkFCTEVfVlRBQkxFX1ZFUklGWV9GQUxTRUBWVFZf Q1hYRkxBR1MgPSAKK0BFTkFCTEVfVlRBQkxFX1ZFUklGWV9UUlVFQFZUVl9D WFhGTEFHUyA9IC1mdnRhYmxlLXZlcmlmeT1zdGQgJChFWFRSQV9WVFZfTERG TEFHUykKIAogIyBVc2Ugc3BlY2lhbCBydWxlcyBmb3IgdGhlIGRlcHJlY2F0 ZWQgc291cmNlIGZpbGVzIHNvIHRoYXQgdGhleSBmaW5kCiAjIGRlcHJlY2F0 ZWQgaW5jbHVkZSBmaWxlcy4KQEAgLTQxMiw3ICs0MjIsNyBAQCBQQVJBTExF TF9GTEFHUyA9IC1EX0dMSUJDWFhfUEFSQUxMRUwKICMgYXMgdGhlIG9jY2Fz aW9uIGNhbGxzIGZvciBpdC4KIEFNX0NYWEZMQUdTID0gXAogCSQoZ2xpYmN4 eF9sdF9waWNfZmxhZykgJChnbGliY3h4X2NvbXBpbGVyX3NoYXJlZF9mbGFn KSBcCi0JJChYVEVNUExBVEVfRkxBR1MpIFwKKwkkKFhURU1QTEFURV9GTEFH UykgJChWVFZfQ1hYRkxBR1MpIFwKIAkkKFdBUk5fQ1hYRkxBR1MpICQoT1BU SU1JWkVfQ1hYRkxBR1MpICQoQ09ORklHX0NYWEZMQUdTKQogCiBBTV9NQUtF RkxBR1MgPSBcCkBAIC00NjMsNiArNDczLDcgQEAgQ1hYTElOSyA9IFwKIAkk KExJQlRPT0wpIC0tdGFnIENYWCAtLXRhZyBkaXNhYmxlLXNoYXJlZCBcCiAJ JChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCiAJLS1tb2Rl PWxpbmsgJChDWFgpIFwKKwkkKExJQlZUVl9GTEFHUykgXAogCSQoT1BUX0xE RkxBR1MpICQoU0VDVElPTl9MREZMQUdTKSAkKEFNX0NYWEZMQUdTKSAkKExU TERGTEFHUykgLW8gJEAKIAogYWxsOiBhbGwtYW0KSW5kZXg6IGxpYnN0ZGMr Ky12My9zcmMvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTk2 NTE2KQorKysgbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbQkod29ya2lu ZyBjb3B5KQpAQCAtNjYsMTIgKzY2LDI1IEBAIGxpYnN0ZGNfX19sYV9ERVBF TkRFTkNJRVMgPSBcCiAJJCh0b3BfYnVpbGRkaXIpL3NyYy9jKys5OC9saWJj Kys5OGNvbnZlbmllbmNlLmxhIFwKIAkkKHRvcF9idWlsZGRpcikvc3JjL2Mr KzExL2xpYmMrKzExY29udmVuaWVuY2UubGEKIAoraWYgRU5BQkxFX1ZUQUJM RV9WRVJJRlkKK2xpYnN0ZGNfX19sYV9MREZMQUdTID0gXAorCS12ZXJzaW9u LWluZm8gJChsaWJ0b29sX1ZFUlNJT04pICR7dmVyc2lvbl9hcmd9IC1sbSAt V2wsLXVfdnRhYmxlX21hcF92YXJzX3N0YXJ0LC11X3Z0YWJsZV9tYXBfdmFy c19lbmQKKworbGlidnR2X19fbGFfTElCQUREID0gXAorCSQodG9wX2J1aWxk ZGlyKS9saWJzdXBjKysvLmxpYnMKK0xJQlZUVl9GTEFHUyA9IFwKKwktTCQo bGlidnR2X19fbGFfTElCQUREKSAtLXdob2xlLWFyY2hpdmUgLWx2dHZfaW5p dCAtLW5vLXdob2xlLWFyY2hpdmUKK1ZUVl9DWFhGTEFHUyA9IC1mdnRhYmxl LXZlcmlmeT1zdGQKK2Vsc2UKIGxpYnN0ZGNfX19sYV9MREZMQUdTID0gXAog CS12ZXJzaW9uLWluZm8gJChsaWJ0b29sX1ZFUlNJT04pICR7dmVyc2lvbl9h cmd9IC1sbQorbGlidnR2X19fbGFfTElCQUREID0gCitMSUJWVFZfRkxBR1Mg PQorVlRWX0NYWEZMQUdTID0KK2VuZGlmCiAKIGxpYnN0ZGNfX19sYV9MSU5L ID0gJChDWFhMSU5LKSAkKGxpYnN0ZGNfX19sYV9MREZMQUdTKQogCi0KICMg VXNlIHNwZWNpYWwgcnVsZXMgZm9yIGNvbXBhdGliaWxpdHktbGRibC5jYyBj b21waWxhdGlvbiwgYXMgd2UgbmVlZCB0bwogIyBwYXNzIC1tbG9uZy1kb3Vi bGUtNjQuCiBpZiBHTElCQ1hYX0xEQkxfQ09NUEFUCkBAIC0xMjYsNyArMTM5 LDcgQEAgY29tcGF0aWJpbGl0eS10aHJlYWQtYysrMHgubzogY29tcGF0aWJp bAogIyBhcyB0aGUgb2NjYXNpb24gY2FsbHMgZm9yIGl0LgogQU1fQ1hYRkxB R1MgPSBcCiAJJChnbGliY3h4X2NvbXBpbGVyX3BpY19mbGFnKSBcCi0JJChY VEVNUExBVEVfRkxBR1MpIFwKKwkkKFhURU1QTEFURV9GTEFHUykgJChWVFZf Q1hYRkxBR1MpIFwKIAkkKFdBUk5fQ1hYRkxBR1MpICQoT1BUSU1JWkVfQ1hY RkxBR1MpICQoQ09ORklHX0NYWEZMQUdTKQogCiAjIExpYnRvb2wgbm90ZXMK QEAgLTE3Myw2ICsxODYsNyBAQCBDWFhMSU5LID0gXAogCSQoTElCVE9PTCkg LS10YWcgQ1hYIFwKIAkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxB R1MpIFwKIAktLW1vZGU9bGluayAkKENYWCkgXAorCSQoTElCVlRWX0ZMQUdT KSBcCiAJJChPUFRfTERGTEFHUykgJChTRUNUSU9OX0xERkxBR1MpICQoQU1f Q1hYRkxBR1MpICQoTFRMREZMQUdTKSAtbyAkQAogCiAKSW5kZXg6IGxpYnN0 ZGMrKy12My9zcmMvYysrMTEvTWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gbGlic3RkYysrLXYzL3NyYy9jKysxMS9NYWtlZmlsZS5h bQkocmV2aXNpb24gMTk2NTE2KQorKysgbGlic3RkYysrLXYzL3NyYy9jKysx MS9NYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsMTgg QEAgdnBhdGggJSAkKHRvcF9zcmNkaXIpL3NyYy9jKysxMQogCiBsaWJjX18x MWNvbnZlbmllbmNlX2xhX1NPVVJDRVMgPSAkKHNvdXJjZXMpICAkKGluc3Rf c291cmNlcykKIAoraWYgRU5BQkxFX1ZUQUJMRV9WRVJJRlkKK0VYVFJBX1ZU Vl9MREZMQUdTID0gXAorICAgICAgICAtV2wsLXVfdnRhYmxlX21hcF92YXJz X3N0YXJ0LC11X3Z0YWJsZV9tYXBfdmFyc19lbmQKK0xJQlZUVl9GTEFHUyA9 IFwKKyAgICAgICAgLUwkKHRvcF9idWlsZGRpcikvbGlic3VwYysrLy5saWJz IC0td2hvbGUtYXJjaGl2ZSAtbHZ0dl9pbml0IC0tbm8td2hvbGUtYXJjaGl2 ZQorVlRWX0NYWEZMQUdTID0gLWZ2dGFibGUtdmVyaWZ5PXN0ZCAkKEVYVFJB X1ZUVl9MREZMQUdTKQorZWxzZQorRVhUUkFfVlRWX0xERkxBR1MgPQorTElC VlRWX0ZMQUdTID0KK1ZUVl9DWFhGTEFHUyA9CitlbmRpZgorCiAjIFVzZSBz cGVjaWFsIHJ1bGVzIGZvciB0aGUgaGFzaHRhYmxlLmNjIGZpbGUgc28gdGhh dCBhbGwKICMgdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZSBmdW5jdGlvbnMgYXJl IGFsc28gaW5zdGFudGlhdGVkLiAKIGhhc2h0YWJsZV9jKysweC5sbzogaGFz aHRhYmxlX2MrKzB4LmNjCkBAIC03NSw3ICs4Nyw3IEBAIGhhc2h0YWJsZV9j KysweC5vOiBoYXNodGFibGVfYysrMHguY2MKIEFNX0NYWEZMQUdTID0gXAog CS1zdGQ9Z251KysxMSBcCiAJJChnbGliY3h4X2x0X3BpY19mbGFnKSAkKGds aWJjeHhfY29tcGlsZXJfc2hhcmVkX2ZsYWcpIFwKLQkkKFhURU1QTEFURV9G TEFHUykgXAorCSQoWFRFTVBMQVRFX0ZMQUdTKSAkKFZUVl9DWFhGTEFHUykg XAogCSQoV0FSTl9DWFhGTEFHUykgJChPUFRJTUlaRV9DWFhGTEFHUykgJChD T05GSUdfQ1hYRkxBR1MpCiAKIEFNX01BS0VGTEFHUyA9IFwKQEAgLTEyNSw0 ICsxMzcsNSBAQCBDWFhMSU5LID0gXAogCSQoTElCVE9PTCkgLS10YWcgQ1hY IC0tdGFnIGRpc2FibGUtc2hhcmVkIFwKIAkkKEFNX0xJQlRPT0xGTEFHUykg JChMSUJUT09MRkxBR1MpIFwKIAktLW1vZGU9bGluayAkKENYWCkgXAorCSQo TElCVlRWX0ZMQUdTKSBcCiAJJChPUFRfTERGTEFHUykgJChTRUNUSU9OX0xE RkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoTFRMREZMQUdTKSAtbyAkQApJbmRl eDogbGlic3RkYysrLXYzL3NyYy9jKysxMS9NYWtlZmlsZS5pbgo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBsaWJzdGRjKystdjMvc3JjL2MrKzExL01h a2VmaWxlLmluCShyZXZpc2lvbiAxOTY1MTYpCisrKyBsaWJzdGRjKystdjMv c3JjL2MrKzExL01ha2VmaWxlLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEs NiArMzMxLDE2IEBAIHNvdXJjZXMgPSBcCiBARU5BQkxFX0VYVEVSTl9URU1Q TEFURV9UUlVFQAl3c3RyaW5nLWluc3QuY2MKIAogbGliY19fMTFjb252ZW5p ZW5jZV9sYV9TT1VSQ0VTID0gJChzb3VyY2VzKSAgJChpbnN0X3NvdXJjZXMp CitARU5BQkxFX1ZUQUJMRV9WRVJJRllfRkFMU0VARVhUUkFfVlRWX0xERkxB R1MgPSAKK0BFTkFCTEVfVlRBQkxFX1ZFUklGWV9UUlVFQEVYVFJBX1ZUVl9M REZMQUdTID0gXAorQEVOQUJMRV9WVEFCTEVfVkVSSUZZX1RSVUVAICAgICAg ICAtV2wsLXVfdnRhYmxlX21hcF92YXJzX3N0YXJ0LC11X3Z0YWJsZV9tYXBf dmFyc19lbmQKKworQEVOQUJMRV9WVEFCTEVfVkVSSUZZX0ZBTFNFQExJQlZU Vl9GTEFHUyA9IAorQEVOQUJMRV9WVEFCTEVfVkVSSUZZX1RSVUVATElCVlRW X0ZMQUdTID0gXAorQEVOQUJMRV9WVEFCTEVfVkVSSUZZX1RSVUVAICAgICAg ICAtTCQodG9wX2J1aWxkZGlyKS9saWJzdXBjKysvLmxpYnMgLS13aG9sZS1h cmNoaXZlIC1sdnR2X2luaXQgLS1uby13aG9sZS1hcmNoaXZlCisKK0BFTkFC TEVfVlRBQkxFX1ZFUklGWV9GQUxTRUBWVFZfQ1hYRkxBR1MgPSAKK0BFTkFC TEVfVlRBQkxFX1ZFUklGWV9UUlVFQFZUVl9DWFhGTEFHUyA9IC1mdnRhYmxl LXZlcmlmeT1zdGQgJChFWFRSQV9WVFZfTERGTEFHUykKIAogIyBBTV9DWFhG TEFHUyBuZWVkcyB0byBiZSBpbiBlYWNoIHN1YmRpcmVjdG9yeSBzbyB0aGF0 IGl0IGNhbiBiZQogIyBtb2RpZmllZCBpbiBhIHBlci1saWJyYXJ5IG9yIHBl ci1zdWItbGlicmFyeSB3YXkuICBOZWVkIHRvIG1hbnVhbGx5CkBAIC0zNDAs NyArMzUwLDcgQEAgbGliY19fMTFjb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0g JChzb3VyYwogQU1fQ1hYRkxBR1MgPSBcCiAJLXN0ZD1nbnUrKzExIFwKIAkk KGdsaWJjeHhfbHRfcGljX2ZsYWcpICQoZ2xpYmN4eF9jb21waWxlcl9zaGFy ZWRfZmxhZykgXAotCSQoWFRFTVBMQVRFX0ZMQUdTKSBcCisJJChYVEVNUExB VEVfRkxBR1MpICQoVlRWX0NYWEZMQUdTKSBcCiAJJChXQVJOX0NYWEZMQUdT KSAkKE9QVElNSVpFX0NYWEZMQUdTKSAkKENPTkZJR19DWFhGTEFHUykKIAog QU1fTUFLRUZMQUdTID0gXApAQCAtMzkxLDYgKzQwMSw3IEBAIENYWExJTksg PSBcCiAJJChMSUJUT09MKSAtLXRhZyBDWFggLS10YWcgZGlzYWJsZS1zaGFy ZWQgXAogCSQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAog CS0tbW9kZT1saW5rICQoQ1hYKSBcCisJJChMSUJWVFZfRkxBR1MpIFwKIAkk KE9QVF9MREZMQUdTKSAkKFNFQ1RJT05fTERGTEFHUykgJChBTV9DWFhGTEFH UykgJChMVExERkxBR1MpIC1vICRACiAKIGFsbDogYWxsLWFtCkluZGV4OiBs aWJzdGRjKystdjMvY29uZmlndXJlLmFjCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMJKHJldmlzaW9uIDE5 NjUxNikKKysrIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMJKHdvcmtpbmcg Y29weSkKQEAgLTk3LDYgKzk3LDEyIEBAIEFDWF9MVF9IT1NUX0ZMQUdTCiBB Q19TVUJTVChlbmFibGVfc2hhcmVkKQogQUNfU1VCU1QoZW5hYmxlX3N0YXRp YykKIAoraWYgdGVzdCAiJGVuYWJsZV92dGFibGVfdmVyaWZ5IiA9IHllczsg dGhlbgorICBwcmVkZXBfb2JqZWN0c19DWFg9IiR7cHJlZGVwX29iamVjdHNf Q1hYfSAke2dsaWJjeHhfYnVpbGRkaXJ9Ly4uL2xpYmdjYy92dHZfc3RhcnQu byIKKyAgcG9zdGRlcF9vYmplY3RzX0NYWD0iJHtwb3N0ZGVwX29iamVjdHNf Q1hYfSAke2dsaWJjeHhfYnVpbGRkaXJ9Ly4uL2xpYmdjYy92dHZfZW5kLm8i CitmaQorCisKICMgbGlidG9vbCB2YXJpYWJsZXMgZm9yIEMrKyBzaGFyZWQg YW5kIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvbXBpbGVzLgogIwogIyBVc2Ug Z2xpYmN4eF9sdF9waWNfZmxhZyB0byBkZXNpZ25hdGUgdGhlIGF1dG9tYWtl IHZhcmlhYmxlCkBAIC0xNjgsNiArMTc0LDcgQEAgR0xJQkNYWF9FTkFCTEVf RlVMTFlfRFlOQU1JQ19TVFJJTkcoW25vXQogR0xJQkNYWF9FTkFCTEVfRVhU RVJOX1RFTVBMQVRFKFt5ZXNdKQogR0xJQkNYWF9FTkFCTEVfUFlUSE9OCiBH TElCQ1hYX0VOQUJMRV9XRVJST1IoW3llc10pCitHTElCQ1hYX0VOQUJMRV9W VEFCTEVfVkVSSUZZKFtub10pCiAKICMgQ2hlY2tzIGZvciBvcGVyYXRpbmcg c3lzdGVtcyBzdXBwb3J0IHRoYXQgZG9lc24ndCByZXF1aXJlIGxpbmtpbmcu CiBHTElCQ1hYX0NIRUNLX1NURElPX1BST1RPCkluZGV4OiBsaWJzdGRjKyst djMvbGlic3VwYysrL3Z0dl9zZXQuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBsaWJzdGRjKystdjMvbGlic3VwYysrL3Z0dl9zZXQuaAkocmV2aXNp b24gMCkKKysrIGxpYnN0ZGMrKy12My9saWJzdXBjKysvdnR2X3NldC5oCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1MyBAQAorLyogQ29weXJpZ2h0IChD KSAyMDEyLTIwMTMKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorCisg ICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0 IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIEdD QyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLCBidXQgV0lUSE9VVAorICAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZ CisgICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lv biAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVybWlzc2lv bnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2Vw dGlvbiwgdmVyc2lvbgorICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFuZCBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJh cnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcworICAgcHJvZ3JhbTsgc2Vl IHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3Bl Y3RpdmVseS4KKyAgIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1ZUVl9TRVRfSAorI2RlZmlu ZSBfVlRWX1NFVF9IIDEKKworLyogQ29kZSBpbiB0aGlzIGZpbGUgbWFuYWdl cyBhIGNvbGxlY3Rpb24gb2YgaW5zZXJ0LW9ubHkgc2V0cy4gIFdlCisgICBo YXZlIG9ubHkgdGVzdGVkIHRoZSBjYXNlIHdoZXJlIEtleSBpcyB1aW50cHRy X3QsIHRob3VnaCBpdAorICAgdGhlb3JldGljYWxseSBzaG91bGQgd29yayBm b3Igc29tZSBvdGhlciBjYXNlcy4gIEFsbCBvZGQga2V5cyBhcmUKKyAgIHJl c2VydmVkLCBhbmQgbXVzdCBub3QgYmUgaW5zZXJ0ZWQgaW50byBhbnkgb2Yg dGhlIHNldHMuICBUaGlzIGNvZGUKKyAgIGlzIGludGVuZGVkIHByaW1hcmls eSBmb3Igc2V0cyBvZiBwb2ludGVycywgYW5kIHRoZSBjb2RlIGlzCisgICBv cHRpbWl6ZWQgZm9yIHNtYWxsIHNldHMgKGluY2x1ZGluZyBzaXplIDAgYW5k IDEpLCBidXQgcmVnYXJkbGVzcworICAgb2YgdGhlIHNldCBzaXplLCBpbnNl cnQoKSBhbmQgY29udGFpbnMoKSBoYXZlIGNsb3NlIHRvIE8oMSkgc3BlZWQK KyAgIGluIHByYWN0aWNlLgorCisgICBUT0RPKGdwaWtlKTogZml4IHRoaXMg Y29tbWVudC4KKworICAgUmVjb21tZW5kZWQgbXVsdGl0aHJlYWRlZCB1c2Ug b2YgYSBzZXQ6CisKKyAgIEZvciBzcGVlZCwgd2Ugd2FudCB0byB1c2UgYSBs b2NrLWZyZWUgdGVzdCBmb3Igc2V0IG1lbWJlcnNoaXAuICBUaGUKKyAgIGNv ZGUgaGFuZGxlcyBzaW11bHRhbmVvdXMgcmVhZHMgYW5kIGluc2VydHMsIGFz IGxvbmcgYXMgYXQgbW9zdCBvbmUKKyAgIGluc2VydGlvbiBpcyBpbiBwcm9n cmVzcyBhdCBhIHRpbWUuICBBZnRlciBhbiBpbnNlcnQsIG90aGVyIHRocmVh ZHMKKyAgIG1heSBub3QgaW1tZWRpYXRlbHkgInNlZSIgdGhlIGluc2VydGVk IGtleSBpZiB0aGV5IHBlcmZvcm0gYQorICAgbG9jay1mcmVlIHJlYWQsIHNv IHdlIHJlY29tbWVuZCByZXRyeWluZywgYXMgZXhwbGFpbmVkIGJlbG93Lgor CisgICBBbHNvLCB0byBtYWtlIGRhdGEgY29ycnVwdGlvbiBsZXNzIGxpa2Vs eSwgd2UgcmVjb21tZW5kIHVzaW5nIGEKKyAgICJub3JtYWwiIFJXIHBhZ2Ug YXMgd2VsbCBhcyBvbmUgb3IgcGFnZXMgdGhhdCBhcmUgdHlwaWNhbGx5IFJP CisgICBidXQgdGhhdCBjYW4gYmUgc3dpdGNoZWQgdG8gUlcgYW5kIGJhY2sg YXMgbmVlZGVkLiAgVGhlIGxhdHRlcgorICAgcGFnZXMgc2hvdWxkIGNvbnRh aW4gc2V0cy4gIFRoZSBmb3JtZXIgc2hvdWxkIGNvbnRhaW4gYSBsb2NrLCBM LAorICAgYW5kIGFuIGludCBvciBzaW1pbGFyLCBudW1fd3JpdGVycy4gIFRo ZW4sIHRvIGluc2VydCwgc29tZXRoaW5nCisgICBsaWtlIHRoaXMgd291bGQg YmUgc2FmZToKKyAgICBvIEFjcXVpcmUgTC4KKyAgICBvIEluY3JlbWVudCBu dW1fd3JpdGVyczsgaWYgdGhhdCBtYWRlIGl0IDEsIGNoYW5nZSBwYWdlcyB0 byBSVy4KKyAgICBvIFJlbGVhc2UgTC4KKyAgICBvIHdoaWxlICh0aGVyZSBh cmUgaW5zZXJ0aW9ucyB0byBkbyBpbiBzb21lIHNldCwgUykgeworICAgICAg ICBhY3F1aXJlIEw7CisgICAgICAgIGRvIHNvbWUgaW5zZXJ0aW9ucyBpbiBT OworICAgICAgICByZWxlYXNlIEw7CisgICAgICB9CisgICAgbyBBY3F1aXJl IEwuCisgICAgbyBEZWNyZW1lbnQgbnVtX3dyaXRlcnM7IGlmIHRoYXQgbWFk ZSBpdCAwLCBjaGFuZ2UgcGFnZXMgdG8gUk8uCisgICAgbyBSZWxlYXNlIEwu CisKKyAgIEFuZCB0byBjaGVjayBpZiB0aGUgc2V0IGNvbnRhaW5zIHNvbWUg a2V5LCBvbmUgY291bGQgdXNlCisgICAgIHNldC5jb250YWlucyhrZXkpIHx8 CisgICAgICAgKHsgQWNxdWlyZSBMOyBib29sIGIgPSBzZXQuY29udGFpbnMo a2V5KTsgUmVsZWFzZSBMOyBiOyB9KQorCisgICBJbiB0aGlzIHNjaGVtZSwg dGhlIG51bWJlciBvZiB0aHJlYWRzIHdpdGggcmVhZHMgaW4gcHJvZ3Jlc3Mg aXNuJ3QKKyAgIHRyYWNrZWQsIHNvIG9sZCBzZXRzIGNhbiBuZXZlciBiZSBk ZWxldGVkLiAgSW4gYWRkaXRpb24sIG9uIHNvbWUKKyAgIGFyY2hpdGVjdHVy ZXMgdGhlIGludGVudGlvbmFsbHkgcmFjeSByZWFkcyBtaWdodCBjYXVzZSBj b250YWlucygpCisgICB0byByZXR1cm4gdHJ1ZSB3aGVuIGl0IHNob3VsZCBo YXZlIHJldHVybmVkIGZhbHNlLiAgVGhpcyBzaG91bGQgYmUKKyAgIG5vIHBy b2JsZW0gb24geDg2LCBhbmQgbW9zdCBvdGhlciBtYWNoaW5lcywgd2hlcmUg cmVhZGluZyBvcgorICAgd3JpdGluZyBhbiBhbGlnbmVkIHVpbnRwdHJfdCBp cyBhdG9taWMuICBFLmcuLCBvbiB0aG9zZSBtYWNoaW5lcywKKyAgIGlmICpw IGlzIDAgYW5kIG9uZSB0aHJlYWQgZG9lcyAqcCA9IHggd2hpbGUgYW5vdGhl ciByZWFkcyAqcCwgdGhlCisgICByZWFkIHdpbGwgc2VlIGVpdGhlciAwIG9y IHguCisKKyAgIFRvIG1ha2UgdGhlIGFib3ZlIGVhc2llciwgdGhlIGluc2Vy dF9vbmx5X2hhc2hfc2V0cyBjbGFzcyBwcm92aWRlcworICAgYW4gaW50ZXJm YWNlIHRvIG1hbmlwdWxhdGUgYW55IG51bWJlciBvZiBoYXNoIHNldHMuICBP bmUgc2hvdWxkbid0CisgICBjcmVhdGUgb2JqZWN0cyBvZiB0aGF0IGNsYXNz LCBhcyBpdCBoYXMgbm8gbWVtYmVyIGRhdGEgYW5kIGl0cworICAgbWV0aG9k cyBhcmUgc3RhdGljLgorCisgICBTbyB0aGUgcmVjb21tZW5kZWQgbW9kZWwg aXMgdG8gaGF2ZSBhIHNpbmdsZSBsb2NrLCBhIHNpbmdsZQorICAgbnVtX3dy aXRlcnMgdmFyaWFibGUsIGFuZCBzb21lIG51bWJlciBvZiBzZXRzLiAgSWYg bG9jayBjb250ZW50aW9uCisgICBiZWNvbWVzIGEgcHJvYmxlbSB0aGVuIHRo ZSBzZXRzIGNhbiBiZSBkaXZpZGVkIGludG8gayBncm91cHMsIGVhY2gKKyAg IG9mIHdoaWNoIGhhcyBhIGxvY2sgYW5kIGEgbnVtX3dyaXRlcnMgdmFyaWFi bGU7IG9yIGVhY2ggc2V0IGNhbiBiZQorICAgcmVwcmVzZW50ZWQgYXMgYSBz ZXQgb2YgdmFsdWVzIHRoYXQgZXF1YWwgMCBtb2QgbSwgYSBzZXQgb2YgdmFs dWVzCisgICB0aGF0IGVxdWFsIDEgbW9kIG0sIC4uLiwgcGx1cyBhIHNldCBv ZiB2YWx1ZXMgdGhhdCBlcXVhbCBtLTEgbW9kIG0uCisKKyAgIEhvd2V2ZXIs IHdlIGV4cGVjdCBtb3N0IG9yIGFsbCB1c2VzIG9mIHRoaXMgY29kZSB0byBj YWxsIGNvbnRhaW5zKCkKKyAgIG11Y2ggbW9yZSBmcmVxdWVudGx5IHRoYW4g YW55dGhpbmcgZWxzZSwgc28gbG9jayBjb250ZW50aW9uIGlzCisgICBsaWtl bHkgdG8gYmUgbG93LiAgKi8KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKwor I2lmbmRlZiBIQVNIVEFCTEVfU1RBVFMKKyNkZWZpbmUgSEFTSFRBQkxFX1NU QVRTIDAKKyNlbmRpZgorCisjaWZuZGVmIEhBU0hUQUJMRV9TVEFUU19BVE9N SUMKKyNkZWZpbmUgSEFTSFRBQkxFX1NUQVRTX0FUT01JQyAwCisjZW5kaWYK KworI2lmIEhBU0hUQUJMRV9TVEFUUworI2lmIEhBU0hUQUJMRV9TVEFUU19B VE9NSUMKKy8qIFN0YXQgY291bnRlcnMsIHdpdGggYXRvbWljcy4gKi8KKyNp bmNsdWRlIDxiaXRzL2F0b21pY193b3JkLmg+CisKK3R5cGVkZWYgX0F0b21p Y193b3JkIF9BdG9taWNTdGF0Q291bnRlcjsKKwordm9pZAoraW5jX2J5IChf QXRvbWljU3RhdENvdW50ZXIgJnN0YXQsIGludCBhbW91bnQpCit7IAorICBf X2F0b21pY19hZGRfZmV0Y2ggKCZzdGF0LCBhbW91bnQsICBfX0FUT01JQ19B Q1FfUkVMKTsKK30KKworI2Vsc2UKKworLyogU3RhdCBjb3VudGVycywgYnV0 IHdpdGhvdXQgYXRvbWljcy4gKi8KK3R5cGVkZWYgaW50IF9BdG9taWNTdGF0 Q291bnRlcjsKKwordm9pZAoraW5jX2J5IChfQXRvbWljU3RhdENvdW50ZXIm IHN0YXQsIGludCBhbW91bnQpCit7IAorICBzdGF0ICs9IGFtb3VudDsKK30K KworI2VuZGlmCisKKworLyogTnVtYmVyIG9mIGNhbGxzIHRvIGNvbnRhaW5z KCksIGluc2VydCgpLCBldGMuICovCitleHRlcm4gX0F0b21pY1N0YXRDb3Vu dGVyIHN0YXRfaW5zZXJ0OworZXh0ZXJuIF9BdG9taWNTdGF0Q291bnRlciBz dGF0X2NvbnRhaW5zOworZXh0ZXJuIF9BdG9taWNTdGF0Q291bnRlciBzdGF0 X3Jlc2l6ZTsKK2V4dGVybiBfQXRvbWljU3RhdENvdW50ZXIgc3RhdF9jcmVh dGU7CisKKy8qIFN1bSBvZiBzZXQgc2l6ZSBvdmVyIGFsbCBjYWxscyB0byBj b250YWlucygpLiAgKi8KK2V4dGVybiBfQXRvbWljU3RhdENvdW50ZXIgc3Rh dF9jb250YWluc19zaXplczsKKworLyogY29udGFpbnMoKSBjYWxscyBpbiBh IHNldCB3aG9zZSBjYXBhY2l0eSBpcyBtb3JlIHRoYW4gMS4gKi8KK2V4dGVy biBfQXRvbWljU3RhdENvdW50ZXIgc3RhdF9jb250YWluc19pbl9ub25fdHJp dmlhbF9zZXQ7CisKKy8qIFByb2JlcyBpbiBhIHNldCB3aG9zZSBjYXBhY2l0 eSBpcyBtb3JlIHRoYW4gMS4gIElkZWFsbHksIHRoaXMgd2lsbAorICAgYmUg cHJldHR5IGNsb3NlIHRvIHN0YXRfY29udGFpbnNfaW5fbm9uX3RyaXZpYWxf c2V0LiAgVGhhdCB3aWxsCisgICBoYXBwZW4gaWYgb3VyIGhhc2ggZnVuY3Rp b24gaXMgZ29vZCBhbmQvb3IgaW1wb3J0YW50IGtleXMgd2VyZQorICAgaW5z ZXJ0ZWQgYmVmb3JlIHVuaW1wb3J0YW50IGtleXMuICAqLworZXh0ZXJuIF9B dG9taWNTdGF0Q291bnRlciBzdGF0X3Byb2Jlc19pbl9ub25fdHJpdmlhbF9z ZXQ7CisKKy8qIG51bWJlciBvZiBjYWxscyB0byBjb250YWlucygpIHdpdGgg c2l6ZT0wLCAxLCBldGMuICovCitleHRlcm4gX0F0b21pY1N0YXRDb3VudGVy IHN0YXRfY29udGFpbnNfc2l6ZTA7CitleHRlcm4gX0F0b21pY1N0YXRDb3Vu dGVyIHN0YXRfY29udGFpbnNfc2l6ZTE7CitleHRlcm4gX0F0b21pY1N0YXRD b3VudGVyIHN0YXRfY29udGFpbnNfc2l6ZTI7CitleHRlcm4gX0F0b21pY1N0 YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6ZTM7CitleHRlcm4gX0F0b21p Y1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6ZTQ7CitleHRlcm4gX0F0 b21pY1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6ZTU7CitleHRlcm4g X0F0b21pY1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6ZTY7CitleHRl cm4gX0F0b21pY1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6ZTc7Citl eHRlcm4gX0F0b21pY1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6ZTg7 CitleHRlcm4gX0F0b21pY1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6 ZTk7CitleHRlcm4gX0F0b21pY1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNf c2l6ZTEwOworZXh0ZXJuIF9BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRh aW5zX3NpemUxMTsKK2V4dGVybiBfQXRvbWljU3RhdENvdW50ZXIgc3RhdF9j b250YWluc19zaXplMTI7CitleHRlcm4gX0F0b21pY1N0YXRDb3VudGVyIHN0 YXRfY29udGFpbnNfc2l6ZTEzX29yX21vcmU7CitleHRlcm4gX0F0b21pY1N0 YXRDb3VudGVyIHN0YXRfZ3Jvd19mcm9tX3NpemUwX3RvXzE7CitleHRlcm4g X0F0b21pY1N0YXRDb3VudGVyIHN0YXRfZ3Jvd19mcm9tX3NpemUxX3RvXzI7 CitleHRlcm4gX0F0b21pY1N0YXRDb3VudGVyIHN0YXRfZG91YmxlX3RoZV9u dW1iZXJfb2ZfYnVja2V0czsKK2V4dGVybiBfQXRvbWljU3RhdENvdW50ZXIg c3RhdF9pbnNlcnRfa2V5X3RoYXRfd2FzX2FscmVhZHlfcHJlc2VudDsKKwor LyogSGFzaCBjb2xsaXNpb25zIGRldGVjdGVkIGR1cmluZyBpbnNlcnRfbm9f cmVzaXplKCkuICBPbmx5IGNvdW50cworICAgaGFzaGVyKGspID09IGhhc2hl cihrJyk7IGhhc2hlcihrKSAlIHRhYmxlc2l6ZSA9PSBoYXNoZXIoaycpICUK KyAgIHRhYmxlc2l6ZSBpcyBub3Qgc3VmZmljaWVudC4gIFdpbGwgY291bnQg Y29sbGlzaW9ucyB0aGF0IGFyZQorICAgZGV0ZWN0ZWQgZHVyaW5nIHRhYmxl IHJlc2l6ZXMgZXRjLiwgc28gdGhlIHNhbWUgdHdvIGtleXMgbWF5IGFkZCB0 bworICAgdGhpcyBzdGF0IG11bHRpcGxlIHRpbWVzLiAgKi8KK2V4dGVybiBf QXRvbWljU3RhdENvdW50ZXIgc3RhdF9pbnNlcnRfZm91bmRfaGFzaF9jb2xs aXNpb247CisKKyNpbmNsdWRlIDxzdHJpbmc+CisKK3N0cnVjdCBpbnNlcnRf b25seV9oYXNoX3NldHNfbG9nZ2VyCit7CisgIHN0YXRpYyBjaGFyICoKKyAg bG9nIChjaGFyIGMsIGNoYXIgKmJ1ZikKKyAgeworICAgICpidWYrKyA9IGM7 CisgICAgcmV0dXJuIGJ1ZjsKKyAgfQorCisgIHN0YXRpYyBjaGFyICoKKyAg bG9nIChjb25zdCBjaGFyICpzLCBjaGFyICpidWYpCisgIHsgcmV0dXJuIHN0 cmNweSAoYnVmLCBzKSArIHN0cmxlbiAocyk7IH0KKworICBzdGF0aWMgY2hh ciAqCisgIGxvZyAoX0F0b21pY1N0YXRDb3VudGVyIGksIGNoYXIgKmJ1ZikK KyAgeworICAgIGlmIChpIDwgMTApCisgICAgICByZXR1cm4gbG9nICgoY2hh cikgKCcwJyArIGkpLCBidWYpOworICAgIGVsc2UKKyAgICAgIHJldHVybiBs b2cgKChjaGFyKSAoJzAnICsgaSAlIDEwKSwgbG9nIChpIC8gMTAsIGJ1Zikp OworICB9CisKKyAgc3RhdGljIGNoYXIgKgorICBsb2cgKGNvbnN0IGNoYXIg KmxhYmVsLCBfQXRvbWljU3RhdENvdW50ZXIgaSwgY2hhciAqYnVmKQorICB7 CisgICAgYnVmID0gbG9nIChsYWJlbCwgYnVmKTsKKyAgICBidWYgPSBsb2cg KCI6ICIsIGJ1Zik7CisgICAgYnVmID0gbG9nIChpLCBidWYpOworICAgIHJl dHVybiBsb2cgKCdcbicsIGJ1Zik7CisgIH0KK307CisKKy8vIFdyaXRlIHN0 YXRzIHRvIHRoZSBnaXZlbiBidWZmZXIsIHdoaWNoIHNob3VsZCBiZSBhdCBs ZWFzdCA0MDAwIGJ5dGVzLgorc3RhdGljIGlubGluZSB2b2lkCitpbnNlcnRf b25seV9oYXNoX3RhYmxlc19zdGF0cyAoY2hhciAqYnVmKQoreworICBidWYg PSBpbnNlcnRfb25seV9oYXNoX3NldHNfbG9nZ2VyOjpsb2cgKCJpbnNlcnQi LCBzdGF0X2luc2VydCwgYnVmKTsKKyAgYnVmID0gaW5zZXJ0X29ubHlfaGFz aF9zZXRzX2xvZ2dlcjo6bG9nICgiY29udGFpbnMiLCBzdGF0X2NvbnRhaW5z LCBidWYpOworICBidWYgPSBpbnNlcnRfb25seV9oYXNoX3NldHNfbG9nZ2Vy Ojpsb2cgKCJyZXNpemUiLCBzdGF0X3Jlc2l6ZSwgYnVmKTsKKyAgYnVmID0g aW5zZXJ0X29ubHlfaGFzaF9zZXRzX2xvZ2dlcjo6bG9nICgiY3JlYXRlIiwg c3RhdF9jcmVhdGUsIGJ1Zik7CisgIGJ1ZiA9IGluc2VydF9vbmx5X2hhc2hf c2V0c19sb2dnZXI6OmxvZyAoImluc2VydF9rZXlfdGhhdF93YXNfYWxyZWFk eV8iCisJCQkJICAgICAgInByZXNlbnQiLAorCQkJCSAgICAgIHN0YXRfaW5z ZXJ0X2tleV90aGF0X3dhc19hbHJlYWR5X3ByZXNlbnQsCisJCQkJICAgICAg YnVmKTsKKyAgYnVmID0gaW5zZXJ0X29ubHlfaGFzaF9zZXRzX2xvZ2dlcjo6 bG9nICgiY29udGFpbnNfc2l6ZXMiLAorCQkJCQkgICBzdGF0X2NvbnRhaW5z X3NpemVzLCBidWYpOworICBidWYgPSBpbnNlcnRfb25seV9oYXNoX3NldHNf bG9nZ2VyOjpsb2cgKCJjb250YWluc19pbl9ub25fdHJpdmlhbF9zZXQiLAor CQkJCQkgICBzdGF0X2NvbnRhaW5zX2luX25vbl90cml2aWFsX3NldCwKKwkJ CQkJICAgYnVmKTsKKyAgYnVmID0gaW5zZXJ0X29ubHlfaGFzaF9zZXRzX2xv Z2dlcjo6bG9nICgicHJvYmVzX2luX25vbl90cml2aWFsX3NldCIsCisJCQkJ CSAgIHN0YXRfcHJvYmVzX2luX25vbl90cml2aWFsX3NldCwKKwkJCQkJICAg YnVmKTsKKyAgYnVmID0gaW5zZXJ0X29ubHlfaGFzaF9zZXRzX2xvZ2dlcjo6 bG9nICgiY29udGFpbnNfc2l6ZTAiLAorCQkJCQkgICBzdGF0X2NvbnRhaW5z X3NpemUwLCBidWYpOworICBidWYgPSBpbnNlcnRfb25seV9oYXNoX3NldHNf bG9nZ2VyOjpsb2cgKCJjb250YWluc19zaXplMSIsCisJCQkJCSAgIHN0YXRf Y29udGFpbnNfc2l6ZTEsIGJ1Zik7CisgIGJ1ZiA9IGluc2VydF9vbmx5X2hh c2hfc2V0c19sb2dnZXI6OmxvZyAoImNvbnRhaW5zX3NpemUyIiwKKwkJCQkJ ICAgc3RhdF9jb250YWluc19zaXplMiwgYnVmKTsKKyAgYnVmID0gaW5zZXJ0 X29ubHlfaGFzaF9zZXRzX2xvZ2dlcjo6bG9nICgiY29udGFpbnNfc2l6ZTMi LAorCQkJCQkgICBzdGF0X2NvbnRhaW5zX3NpemUzLCBidWYpOworICBidWYg PSBpbnNlcnRfb25seV9oYXNoX3NldHNfbG9nZ2VyOjpsb2cgKCJjb250YWlu c19zaXplNCIsCisJCQkJCSAgIHN0YXRfY29udGFpbnNfc2l6ZTQsIGJ1Zik7 CisgIGJ1ZiA9IGluc2VydF9vbmx5X2hhc2hfc2V0c19sb2dnZXI6OmxvZyAo ImNvbnRhaW5zX3NpemU1IiwKKwkJCQkJICAgc3RhdF9jb250YWluc19zaXpl NSwgYnVmKTsKKyAgYnVmID0gaW5zZXJ0X29ubHlfaGFzaF9zZXRzX2xvZ2dl cjo6bG9nICgiY29udGFpbnNfc2l6ZTYiLAorCQkJCQkgICBzdGF0X2NvbnRh aW5zX3NpemU2LCBidWYpOworICBidWYgPSBpbnNlcnRfb25seV9oYXNoX3Nl dHNfbG9nZ2VyOjpsb2cgKCJjb250YWluc19zaXplNyIsCisJCQkJCSAgIHN0 YXRfY29udGFpbnNfc2l6ZTcsIGJ1Zik7CisgIGJ1ZiA9IGluc2VydF9vbmx5 X2hhc2hfc2V0c19sb2dnZXI6OmxvZyAoImNvbnRhaW5zX3NpemU4IiwKKwkJ CQkJICAgc3RhdF9jb250YWluc19zaXplOCwgYnVmKTsKKyAgYnVmID0gaW5z ZXJ0X29ubHlfaGFzaF9zZXRzX2xvZ2dlcjo6bG9nICgiY29udGFpbnNfc2l6 ZTkiLAorCQkJCQkgICBzdGF0X2NvbnRhaW5zX3NpemU5LCBidWYpOworICBi dWYgPSBpbnNlcnRfb25seV9oYXNoX3NldHNfbG9nZ2VyOjpsb2cgKCJjb250 YWluc19zaXplMTAiLAorCQkJCQkgICBzdGF0X2NvbnRhaW5zX3NpemUxMCwg YnVmKTsKKyAgYnVmID0gaW5zZXJ0X29ubHlfaGFzaF9zZXRzX2xvZ2dlcjo6 bG9nICgiY29udGFpbnNfc2l6ZTExIiwKKwkJCQkJICAgc3RhdF9jb250YWlu c19zaXplMTEsIGJ1Zik7CisgIGJ1ZiA9IGluc2VydF9vbmx5X2hhc2hfc2V0 c19sb2dnZXI6OmxvZyAoImNvbnRhaW5zX3NpemUxMiIsCisJCQkJCSAgIHN0 YXRfY29udGFpbnNfc2l6ZTEyLCBidWYpOworICBidWYgPSBpbnNlcnRfb25s eV9oYXNoX3NldHNfbG9nZ2VyOjpsb2cgKCJjb250YWluc19zaXplMTNfb3Jf bW9yZSIsCisJCQkJCSAgIHN0YXRfY29udGFpbnNfc2l6ZTEzX29yX21vcmUs IGJ1Zik7CisgIGJ1ZiA9IGluc2VydF9vbmx5X2hhc2hfc2V0c19sb2dnZXI6 OmxvZyAoImdyb3dfZnJvbV9zaXplMF90b18xIiwKKwkJCQkJICAgc3RhdF9n cm93X2Zyb21fc2l6ZTBfdG9fMSwgYnVmKTsKKyAgYnVmID0gaW5zZXJ0X29u bHlfaGFzaF9zZXRzX2xvZ2dlcjo6bG9nICgiZ3Jvd19mcm9tX3NpemUxX3Rv XzIiLAorCQkJCQkgICBzdGF0X2dyb3dfZnJvbV9zaXplMV90b18yLCBidWYp OworICBidWYgPSBpbnNlcnRfb25seV9oYXNoX3NldHNfbG9nZ2VyOjpsb2cg KCJpbnNlcnRfZm91bmRfaGFzaF9jb2xsaXNpb24iLAorCQkJCQkgICBzdGF0 X2luc2VydF9mb3VuZF9oYXNoX2NvbGxpc2lvbiwKKwkJCQkJICAgYnVmKTsK KyAgYnVmID0gaW5zZXJ0X29ubHlfaGFzaF9zZXRzX2xvZ2dlcjo6bG9nICgi ZG91YmxlX3RoZV9udW1iZXJfb2ZfYnVja2V0cyIsCisJCQkJCSAgIHN0YXRf ZG91YmxlX3RoZV9udW1iZXJfb2ZfYnVja2V0cywKKwkJCQkJICAgYnVmKTsK KyAgKmJ1ZiA9ICdcMCc7Cit9CisKKyNlbHNlCisKKy8qIE5vIHN0YXRzLiAq LworI2RlZmluZSBpbmNfYnkoc3RhdG5hbWUsIGFtb3VudCkgZG8geyB9IHdo aWxlIChmYWxzZSAmJiAoYW1vdW50KSkKKworI2VuZGlmCisKKyNkZWZpbmUg aW5jKHN0YXRuYW1lKSBpbmNfYnkgKHN0YXRuYW1lLCAxKQorCit0ZW1wbGF0 ZSA8dHlwZW5hbWUgS2V5LCBjbGFzcyBIYXNoRmNuLCBjbGFzcyBBbGxvYz4K K2NsYXNzIGluc2VydF9vbmx5X2hhc2hfc2V0cworeworIHB1YmxpYzoKKyAg dHlwZWRlZiBLZXkga2V5X3R5cGU7CisgIHR5cGVkZWYgc2l6ZV90IHNpemVf dHlwZTsKKyAgdHlwZWRlZiBBbGxvYyBhbGxvY190eXBlOworICBlbnVtIHsg aWxsZWdhbF9rZXkgPSAxIH07CisgIGVudW0geyBtaW5fY2FwYWNpdHkgPSA0 IH07CisjaWYgSEFTSFRBQkxFX1NUQVRTCisgIGVudW0geyBzdGF0cyA9IHRy dWUgfTsKKyNlbHNlCisgIGVudW0geyBzdGF0cyA9IGZhbHNlIH07CisjZW5k aWYKKworICAvKiBEbyBub3QgZGlyZWN0bHkgdXNlIGluc2VydF9vbmx5X2hh c2hfc2V0LiAgSW5zdGVhZCwgdXNlIHRoZQorICAgICBzdGF0aWMgbWV0aG9k cyBiZWxvdyB0byBjcmVhdGUgYW5kIG1hbmlwdWxhdGUgb2JqZWN0cyBvZiB0 aGUKKyAgICAgZm9sbG93aW5nIGNsYXNzLgorICAKKyAgICAgSW1wbGVtZW50 YXRpb24gZGV0YWlsczogZWFjaCBzZXQgaXMgcmVwcmVzZW50ZWQgYnkgYSBw b2ludGVyCisgICAgIHBsdXMsIHBlcmhhcHMsIG91dC1vZi1saW5lIGRhdGEs IHdoaWNoIHdvdWxkIGJlIGFuIG9iamVjdCBvZiB0eXBlCisgICAgIGluc2Vy dF9vbmx5X2hhc2hfc2V0LiAgRm9yIGEgcG9pbnRlciwgcywgdGhlIGludGVy cHJldGF0aW9uIGlzOiBzCisgICAgID09IE5VTEwgbWVhbnMgZW1wdHkgc2V0 LCBsc2IocykgPT0gMSBtZWFucyBhIHNldCB3aXRoIG9uZQorICAgICBlbGVt ZW50LCB3aGljaCBpcyAodWludHB0cl90KXMgLSAxLCBhbmQgb3RoZXJ3aXNl IHMgaXMgYSBwb2ludGVyCisgICAgIG9mIHR5cGUgaW5zZXJ0X29ubHlfaGFz aF9zZXQqLiAgU28sIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIGEgc2V0Cisg ICAgIHdlIGhhdmUgdG8gY2hhbmdlIHMgYW5kL29yICpzLiAgVG8gY2hlY2sg aWYgYSBzZXQgY29udGFpbnMgc29tZQorICAgICBrZXkgd2UgaGF2ZSB0byBl eGFtaW5lIHMgYW5kIHBvc3NpYmx5ICpzLiAgKi8KKyAgY2xhc3MgaW5zZXJ0 X29ubHlfaGFzaF9zZXQKKyAgeworICAgcHVibGljOgorICAgIC8qIEluc2Vy dCBhIGtleS4gIFRoZSBrZXkgbXVzdCBub3QgYmUgYSByZXNlcnZlZCBrZXku ICAqLworICAgIHN0YXRpYyBpbmxpbmUgaW5zZXJ0X29ubHlfaGFzaF9zZXQg Kmluc2VydCAoa2V5X3R5cGUga2V5LAorCQkJCQkJaW5zZXJ0X29ubHlfaGFz aF9zZXQgKnMpOworICAgIAorCisgICAgLyogQ3JlYXRlIGFuIGVtcHR5IHNl dC4gICovCisgICAgc3RhdGljIGlubGluZSBpbnNlcnRfb25seV9oYXNoX3Nl dCAqY3JlYXRlIChzaXplX3R5cGUgY2FwYWNpdHkpOworCisgICAgLyogUmV0 dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGtleSBpcyBwcmVzZW50LiAgSWYga2V5 IGlzIGlsbGVnYWxfa2V5CisgICAgICAgdGhlbiBlaXRoZXIgdHJ1ZSBvciBm YWxzZSBtYXkgYmUgcmV0dXJuZWQsIGJ1dCBmb3IgYWxsIG90aGVyCisgICAg ICAgcmVzZXJ2ZWQga2V5cyBmYWxzZSB3aWxsIGJlIHJldHVybmVkLiAgKi8K KyAgICBzdGF0aWMgYm9vbAorICAgIGNvbnRhaW5zIChrZXlfdHlwZSBrZXks IGNvbnN0IGluc2VydF9vbmx5X2hhc2hfc2V0ICpzKQorICAgIHsKKyAgICAg IGlmIChzdGF0cykKKwl7CisJICBpbmMgKHN0YXRfY29udGFpbnMpOworCSAg c3dpdGNoIChzaXplIChzKSkKKwkgICAgeworCSAgICAgIGNhc2UgMDogaW5j IChzdGF0X2NvbnRhaW5zX3NpemUwKTsgYnJlYWs7CisJICAgICAgY2FzZSAx OiBpbmMgKHN0YXRfY29udGFpbnNfc2l6ZTEpOyBicmVhazsKKwkgICAgICBj YXNlIDI6IGluYyAoc3RhdF9jb250YWluc19zaXplMik7IGJyZWFrOworCSAg ICAgIGNhc2UgMzogaW5jIChzdGF0X2NvbnRhaW5zX3NpemUzKTsgYnJlYWs7 CisJICAgICAgY2FzZSA0OiBpbmMgKHN0YXRfY29udGFpbnNfc2l6ZTQpOyBi cmVhazsKKwkgICAgICBjYXNlIDU6IGluYyAoc3RhdF9jb250YWluc19zaXpl NSk7IGJyZWFrOworCSAgICAgIGNhc2UgNjogaW5jIChzdGF0X2NvbnRhaW5z X3NpemU2KTsgYnJlYWs7CisJICAgICAgY2FzZSA3OiBpbmMgKHN0YXRfY29u dGFpbnNfc2l6ZTcpOyBicmVhazsKKwkgICAgICBjYXNlIDg6IGluYyAoc3Rh dF9jb250YWluc19zaXplOCk7IGJyZWFrOworCSAgICAgIGNhc2UgOTogaW5j IChzdGF0X2NvbnRhaW5zX3NpemU5KTsgYnJlYWs7CisJICAgICAgY2FzZSAx MDogaW5jIChzdGF0X2NvbnRhaW5zX3NpemUxMCk7IGJyZWFrOworCSAgICAg IGNhc2UgMTE6IGluYyAoc3RhdF9jb250YWluc19zaXplMTEpOyBicmVhazsK KwkgICAgICBjYXNlIDEyOiBpbmMgKHN0YXRfY29udGFpbnNfc2l6ZTEyKTsg YnJlYWs7CisJICAgICAgZGVmYXVsdDogaW5jIChzdGF0X2NvbnRhaW5zX3Np emUxM19vcl9tb3JlKTsgYnJlYWs7CisJICAgIH0KKyAgICAgICAgICBpbmNf YnkgKHN0YXRfY29udGFpbnNfc2l6ZXMsIHNpemUgKHMpKTsKKwl9CisKKyAg ICAgIHJldHVybiAoc2luZ2xldG9uIChzKSA/CisgICAgICAgICAgICAgIHNp bmdsZXRvbl9rZXkgKGtleSkgPT0gcyA6CisgICAgICAgICAgICAgICgocyAh PSBOVUxMKSAmJiBzLT5jb250YWlucyAoa2V5KSkpOworICAgIH0KKworICAg IC8qIFJldHVybiBhIHNldCdzIHNpemUuICAqLworICAgIHN0YXRpYyBzaXpl X3R5cGUKKyAgICBzaXplIChjb25zdCBpbnNlcnRfb25seV9oYXNoX3NldCAq cykKKyAgICB7IHJldHVybiAocyA9PSBOVUxMKSA/IDAgOiAoc2luZ2xldG9u IChzKSA/IDEgOiBzLT5udW1fZW50cmllcyk7IH0KKworICAgIHN0YXRpYyBp bmxpbmUgaW5zZXJ0X29ubHlfaGFzaF9zZXQgKnJlc2l6ZSAoc2l6ZV90eXBl IHRhcmdldF9udW1fYnVja2V0cywKKwkJCQkJCWluc2VydF9vbmx5X2hhc2hf c2V0ICpzKTsKKyAgICAKKworICAgcHJpdmF0ZToKKyAgICAvKiBSZXR1cm4g d2hldGhlciBhIHNldCBoYXMgc2l6ZSAxLiAqLworICAgIHN0YXRpYyBib29s CisgICAgc2luZ2xldG9uIChjb25zdCBpbnNlcnRfb25seV9oYXNoX3NldCAq cykKKyAgICB7IHJldHVybiAodWludHB0cl90KSBzICYgMTsgfQorCisgICAg LyogUmV0dXJuIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZXRvbiBz ZXQgY29udGFpbmluZyB0aGUKKyAgICAgICBnaXZlbiBrZXkuICAqLworICAg IHN0YXRpYyBpbnNlcnRfb25seV9oYXNoX3NldCAqCisgICAgc2luZ2xldG9u X2tleSAoa2V5X3R5cGUga2V5KQorICAgIHsgcmV0dXJuIChpbnNlcnRfb25s eV9oYXNoX3NldCAqKSAoKHVpbnRwdHJfdCkga2V5ICsgMSk7IH0KKworICAg IC8qIEdpdmVuIGEgc2luZ2xldG9uIHNldCwgd2hhdCBrZXkgZG9lcyBpdCBj b250YWluPyAgKi8KKyAgICBzdGF0aWMga2V5X3R5cGUKKyAgICBleHRyYWN0 X3NpbmdsZXRvbl9rZXkgKGNvbnN0IGluc2VydF9vbmx5X2hhc2hfc2V0ICpz KQorICAgIHsKKyAgICAgIFZUVl9ERUJVR19BU1NFUlQgKHNpbmdsZXRvbiAo cykpOworICAgICAgcmV0dXJuIChrZXlfdHlwZSkgKCh1aW50cHRyX3QpIHMg LSAxKTsKKyAgICB9CisKKyAgICB2b2xhdGlsZSBrZXlfdHlwZSAmCisgICAg a2V5X2F0X2luZGV4IChzaXplX3R5cGUgaW5kZXgpCisgICAgeyByZXR1cm4g YnVja2V0c1tpbmRleF07IH0KKworICAgIGtleV90eXBlCisgICAga2V5X2F0 X2luZGV4IChzaXplX3R5cGUgaW5kZXgpIGNvbnN0CisgICAgeyByZXR1cm4g YnVja2V0c1tpbmRleF07IH0KKworICAgIHNpemVfdHlwZQorICAgIG5leHRf aW5kZXggKHNpemVfdHlwZSBpbmRleCwgc2l6ZV90eXBlIGluZGljZXNfZXhh bWluZWQpIGNvbnN0CisgICAgeyByZXR1cm4gKGluZGV4ICsgaW5kaWNlc19l eGFtaW5lZCkgJiAobnVtX2J1Y2tldHMgLSAxKTsgfQorCisgICAgaW5saW5l IHZvaWQgaW5zZXJ0X25vX3Jlc2l6ZSAoa2V5X3R5cGUga2V5KTsKKyAgICAK KyAgICBpbmxpbmUgYm9vbCBjb250YWlucyAoa2V5X3R5cGUga2V5KSBjb25z dDsKKyAgICAKKyAgICBpbmxpbmUgaW5zZXJ0X29ubHlfaGFzaF9zZXQgKnJl c2l6ZV9pZl9uZWNlc3NhcnkgKHZvaWQpOworICAgIAorICAgIHNpemVfdHlw ZSBudW1fYnVja2V0czsgIC8qIE11c3QgYmUgYSBwb3dlciBvZiAyIG5vdCBs ZXNzIHRoYW4KKwkJCSAgICAgICBtaW5fY2FwYWNpdHkuICAqLworICAgIHZv bGF0aWxlIHNpemVfdHlwZSBudW1fZW50cmllczsKKyAgICB2b2xhdGlsZSBr ZXlfdHlwZSBidWNrZXRzWzBdOyAgLyogQWN0dWFsIGFycmF5IHNpemUgaXMg bnVtX2J1Y2tldHMuICAqLworICB9OworCisgIC8qIENyZWF0ZSBhbiBlbXB0 eSBzZXQgd2l0aCB0aGUgZ2l2ZW4gY2FwYWNpdHkuICBSZXF1aXJlcyB0aGF0 IG4gYmUKKyAgICAgMCBvciBhIHBvd2VyIG9mIDIuICBJZiAxIDwgbiA8IG1p bl9jYXBhY2l0eSB0aGVuIHRyZWF0IG4gYXMKKyAgICAgbWluX2NhcGFjaXR5 LiAgU2V0cyAqaGFuZGxlLiAgUmV0dXJucyB0cnVlIHVubGVzcyB0aGUgYWxs b2NhdG9yCisgICAgIGZhaWxzLiAgU3Vic2VxdWVudCBvcGVyYXRpb25zIG9u IHRoaXMgc2V0IHNob3VsZCB1c2UgdGhlIHNhbWUKKyAgICAgaGFuZGxlLiAq LworCisgIHN0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGUgKHNpemVfdHlwZSBu LCBpbnNlcnRfb25seV9oYXNoX3NldCAqKmhhbmRsZSk7CisKKyAgLyogRm9y Y2UgdGhlIGNhcGFjaXR5IG9mIGEgc2V0IHRvIGJlIG4sIHVubGVzcyBpdCB3 YXMgbW9yZSB0aGFuIG4KKyAgICAgYWxyZWFkeS4gIFJlcXVpcmVzIHRoYXQg biBiZSAwIG9yIGEgcG93ZXIgb2YgMi4gIFNldHMgKmhhbmRsZQorICAgICB1 bmxlc3MgdGhlIGN1cnJlbnQgY2FwYWNpdHkgaXMgbiBvciBtb3JlLiAgUmV0 dXJucyB0cnVlIHVubGVzcworICAgICB0aGUgYWxsb2NhdG9yIGZhaWxzLiAg Ki8KKworICBzdGF0aWMgaW5saW5lIGJvb2wgcmVzaXplIChzaXplX3R5cGUg biwgaW5zZXJ0X29ubHlfaGFzaF9zZXQgKipoYW5kbGUpOworCisgIC8qIElu c2VydCBhIGtleS4gICpoYW5kbGUgaXMgdW5tb2RpZmllZCB1bmxlc3MgKDEp IGEgcmVzaXplIG9jY3VycywKKyAgICAgb3IgKDIpIHRoZSBzZXQgd2FzIGlu aXRpYWxseSBlbXB0eS4gUmV0dXJucyB0cnVlIHVubGVzcyB0aGUKKyAgICAg YWxsb2NhdG9yIGZhaWxzIGR1cmluZyBhIHJlc2l6ZS4gIElmIHRoZSBhbGxv Y2F0b3IgZmFpbHMgZHVyaW5nIGEKKyAgICAgcmVzaXplIHRoZW4gdGhlIHNl dCBpcyByZXNldCB0byBiZSB0aGUgZW1wdHkgc2V0LiAgVGhlIGtleSBtdXN0 CisgICAgIG5vdCBiZSBhIHJlc2VydmVkIGtleS4gICovCisKKyAgc3RhdGlj IGlubGluZSBib29sIGluc2VydCAoa2V5X3R5cGUga2V5LCBpbnNlcnRfb25s eV9oYXNoX3NldCAqKmhhbmRsZSk7CisKKyAgLyogQ2hlY2sgZm9yIHRoZSBw cmVzZW5jZSBvZiBhIGtleS4gIElmIGtleSBpcyBpbGxlZ2FsX2tleSB0aGVu CisgICAgIGVpdGhlciB0cnVlIG9yIGZhbHNlIG1heSBiZSByZXR1cm5lZCwg YnV0IGZvciBhbGwgb3RoZXIgcmVzZXJ2ZWQKKyAgICAga2V5cyBmYWxzZSB3 aWxsIGJlIHJldHVybmVkLiAgKi8KKworICBzdGF0aWMgaW5saW5lIGJvb2wK KyAgY29udGFpbnMgKGtleV90eXBlIGtleSwgLyogY29uc3QgKi8gaW5zZXJ0 X29ubHlfaGFzaF9zZXQgKipoYW5kbGUpCisgIHsgcmV0dXJuIGluc2VydF9v bmx5X2hhc2hfc2V0Ojpjb250YWlucyAoa2V5LCAqaGFuZGxlKTsgfQorCisg IC8qIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gc2V0LiAgKi8KKyAg c3RhdGljIHNpemVfdHlwZQorICBzaXplIChjb25zdCBpbnNlcnRfb25seV9o YXNoX3NldCAqKmhhbmRsZSkKKyAgeyByZXR1cm4gaW5zZXJ0X29ubHlfaGFz aF9zZXQ6OnNpemUgKCpoYW5kbGUpOyB9CisKKyAgc3RhdGljIGJvb2wKKyAg aXNfcmVzZXJ2ZWRfa2V5IChrZXlfdHlwZSBrZXkpCisgIHsgcmV0dXJuICgo dWludHB0cl90KSBrZXkgJSAyKSA9PSAxOyB9Cit9OworCit0ZW1wbGF0ZSA8 dHlwZW5hbWUgS2V5LCBjbGFzcyBIYXNoRmNuLCBjbGFzcyBBbGxvYz4KK3R5 cGVuYW1lIGluc2VydF9vbmx5X2hhc2hfc2V0cyA8S2V5LCBIYXNoRmNuLCBB bGxvYz46Omluc2VydF9vbmx5X2hhc2hfc2V0ICoKK2luc2VydF9vbmx5X2hh c2hfc2V0cyA8S2V5LCBIYXNoRmNuLCBBbGxvYz46Omluc2VydF9vbmx5X2hh c2hfc2V0OjpyZXNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHNpemVfdHlwZSBuLCBpbnNlcnRfb25seV9oYXNoX3Nl dCAqcykKK3sKKyAgaWYgKHMgPT0gTlVMTCkKKyAgICByZXR1cm4gY3JlYXRl IChuKTsKKworICBzaXplX3R5cGUgY2FwYWNpdHkgPSBzaW5nbGV0b24gKHMp ID8gMSA6IHMtPm51bV9idWNrZXRzOworCisgIGlmIChuIDw9IGNhcGFjaXR5 KQorICAgIHJldHVybiBzOworCisgIGluc2VydF9vbmx5X2hhc2hfc2V0ICpy ZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh dGUgKHN0ZDo6bWF4PHNpemVfdHlwZT4gKG4sIG1pbl9jYXBhY2l0eSkpOwor ICBpZiAocmVzdWx0ICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKHNpbmds ZXRvbiAocykpCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQtPmluc2Vy dF9ub19yZXNpemUgKGV4dHJhY3Rfc2luZ2xldG9uX2tleSAocykpOworICAg ICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBmb3Ig KHNpemVfdHlwZSBpID0gMDsgaSA8IHMtPm51bV9idWNrZXRzOyBpKyspCisg ICAgICAgICAgICBpZiAocy0+YnVja2V0c1tpXSAhPSAoa2V5X3R5cGUpIGls bGVnYWxfa2V5KQorICAgICAgICAgICAgICByZXN1bHQtPmluc2VydF9ub19y ZXNpemUgKHMtPmJ1Y2tldHNbaV0pOworICAgICAgICB9CisgICAgICBWVFZf REVCVUdfQVNTRVJUIChzaXplIChyZXN1bHQpID09IHNpemUgKHMpKTsKKyAg ICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt ZSBLZXksIGNsYXNzIEhhc2hGY24sIGNsYXNzIEFsbG9jPgordHlwZW5hbWUg aW5zZXJ0X29ubHlfaGFzaF9zZXRzIDxLZXksIEhhc2hGY24sIEFsbG9jPjo6 aW5zZXJ0X29ubHlfaGFzaF9zZXQgKgoraW5zZXJ0X29ubHlfaGFzaF9zZXRz IDxLZXksIEhhc2hGY24sIEFsbG9jPjo6aW5zZXJ0X29ubHlfaGFzaF9zZXQ6 Omluc2VydCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoa2V5X3R5cGUga2V5LCBpbnNlcnRfb25seV9oYXNoX3NldCAqcykK K3sKKyAgVlRWX0RFQlVHX0FTU0VSVCAoIWlzX3Jlc2VydmVkX2tleSAoa2V5 KSk7CisKKyAgaW5jX2J5IChzdGF0X2dyb3dfZnJvbV9zaXplMF90b18xLCBz ID09IE5VTEwpOworCisgIGlmIChzID09IE5VTEwpCisgICAgcmV0dXJuIHNp bmdsZXRvbl9rZXkgKGtleSk7CisKKyAgaWYgKHNpbmdsZXRvbiAocykpCisg ICAgeworICAgICAgY29uc3Qga2V5X3R5cGUgb2xkX2tleSA9IGV4dHJhY3Rf c2luZ2xldG9uX2tleSAocyk7CisgICAgICBpZiAob2xkX2tleSA9PSBrZXkp CisJcmV0dXJuIHM7CisKKyAgICAgIC8qIEdyb3cgZnJvbSBzaXplIDEgdG8g c2l6ZSAyLiAgKi8KKyAgICAgIGluYyAoc3RhdF9ncm93X2Zyb21fc2l6ZTFf dG9fMik7CisgICAgICBzID0gY3JlYXRlICgyKTsKKyAgICAgIGlmIChzID09 IE5VTEwpCisJcmV0dXJuIE5VTEw7CisKKyAgICAgIHMtPmluc2VydF9ub19y ZXNpemUgKG9sZF9rZXkpOworICAgICAgcy0+aW5zZXJ0X25vX3Jlc2l6ZSAo a2V5KTsKKyAgICAgIFZUVl9ERUJVR19BU1NFUlQgKHNpemUgKHMpID09IDIp OworICAgICAgcmV0dXJuIHM7CisgICAgfQorICBzID0gcy0+cmVzaXplX2lm X25lY2Vzc2FyeSgpOworICBpZiAocyAhPSBOVUxMKQorICAgIHMtPmluc2Vy dF9ub19yZXNpemUgKGtleSk7CisgIHJldHVybiBzOworfQorCit0ZW1wbGF0 ZSA8dHlwZW5hbWUgS2V5LCBjbGFzcyBIYXNoRmNuLCBjbGFzcyBBbGxvYz4K K3R5cGVuYW1lIGluc2VydF9vbmx5X2hhc2hfc2V0cyA8S2V5LCBIYXNoRmNu LCBBbGxvYz46Omluc2VydF9vbmx5X2hhc2hfc2V0ICoKK2luc2VydF9vbmx5 X2hhc2hfc2V0cyA8S2V5LCBIYXNoRmNuLCBBbGxvYz46Omluc2VydF9vbmx5 X2hhc2hfc2V0OjpjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdHlwZSBj YXBhY2l0eSkKK3sKKyAgaWYgKGNhcGFjaXR5IDw9IDEpCisgICAgcmV0dXJu IE5VTEw7CisKKyAgVlRWX0RFQlVHX0FTU0VSVCAoY2FwYWNpdHkgPiAxICYm IChjYXBhY2l0eSAmIChjYXBhY2l0eSAtIDEpKSA9PSAwKTsKKyAgVlRWX0RF QlVHX0FTU0VSVCAoc2l6ZW9mIChpbnNlcnRfb25seV9oYXNoX3NldCkgPT0g MiAqIHNpemVvZiAoc2l6ZV90eXBlKSk7CisgIGNhcGFjaXR5ID0gc3RkOjpt YXggPHNpemVfdHlwZT4gKGNhcGFjaXR5LCBtaW5fY2FwYWNpdHkpOworICBj b25zdCBzaXplX3QgbnVtX2J5dGVzID0gc2l6ZW9mIChpbnNlcnRfb25seV9o YXNoX3NldCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YgKGtleV90eXBlKSAqIGNhcGFjaXR5 OworICBhbGxvY190eXBlIGFsbG9jOworICBpbnNlcnRfb25seV9oYXNoX3Nl dCAqcmVzdWx0ID0gKGluc2VydF9vbmx5X2hhc2hfc2V0ICopIGFsbG9jIChu dW1fYnl0ZXMpOworICByZXN1bHQtPm51bV9idWNrZXRzID0gY2FwYWNpdHk7 CisgIHJlc3VsdC0+bnVtX2VudHJpZXMgPSAwOworICBmb3IgKHNpemVfdHlw ZSBpID0gMDsgaSA8IGNhcGFjaXR5OyBpKyspCisgICAgcmVzdWx0LT5idWNr ZXRzW2ldID0gKGtleV90eXBlKSBpbGxlZ2FsX2tleTsKKyAgcmV0dXJuIHJl c3VsdDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEtleSwgY2xhc3MgSGFz aEZjbiwgY2xhc3MgQWxsb2M+Cit2b2lkCitpbnNlcnRfb25seV9oYXNoX3Nl dHM8S2V5LCBIYXNoRmNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQWxsb2M+OjppbnNlcnRfb25seV9oYXNoX3NldDo6aW5zZXJ0X25v X3Jlc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5X3R5cGUga2V5KQor eworICBIYXNoRmNuIGhhc2hlcjsKKyAgY29uc3Qgc2l6ZV90eXBlIGNhcGFj aXR5ID0gbnVtX2J1Y2tldHM7CisgIFZUVl9ERUJVR19BU1NFUlQgKGNhcGFj aXR5ID49IG1pbl9jYXBhY2l0eSk7CisgIFZUVl9ERUJVR19BU1NFUlQgKCFp c19yZXNlcnZlZF9rZXkgKGtleSkpOworICBzaXplX3R5cGUgaW5kZXggPSBo YXNoZXIgKGtleSkgJiAoY2FwYWNpdHkgLSAxKTsKKyAga2V5X3R5cGUgayA9 IGtleV9hdF9pbmRleCAoaW5kZXgpOworICBzaXplX3R5cGUgaW5kaWNlc19l eGFtaW5lZCA9IDA7CisgIHdoaWxlIChrICE9IGtleSkKKyAgICB7CisgICAg ICArK2luZGljZXNfZXhhbWluZWQ7CisgICAgICBpZiAoayA9PSAoa2V5X3R5 cGUpIGlsbGVnYWxfa2V5KQorICAgICAgICB7CisgICAgICAgICAga2V5X2F0 X2luZGV4IChpbmRleCkgPSBrZXk7CisgICAgICAgICAgKytudW1fZW50cmll czsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIGVsc2UK Kwl7CisJICBpbmNfYnkgKHN0YXRfaW5zZXJ0X2ZvdW5kX2hhc2hfY29sbGlz aW9uLAorCQkgIGhhc2hlciAoaykgPT0gaGFzaGVyIChrZXkpKTsKKwl9Cisg ICAgICBWVFZfREVCVUdfQVNTRVJUIChpbmRpY2VzX2V4YW1pbmVkIDwgY2Fw YWNpdHkpOworICAgICAgaW5kZXggPSBuZXh0X2luZGV4IChpbmRleCwgaW5k aWNlc19leGFtaW5lZCk7CisgICAgICBrID0ga2V5X2F0X2luZGV4IChpbmRl eCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNsYXNz IEhhc2hGY24sIGNsYXNzIEFsbG9jPgorYm9vbAoraW5zZXJ0X29ubHlfaGFz aF9zZXRzPEtleSwgSGFzaEZjbiwgQWxsb2M+OjppbnNlcnRfb25seV9oYXNo X3NldDo6Y29udGFpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleV90eXBlIGtleSkg Y29uc3QKK3sKKyAgaW5jIChzdGF0X2NvbnRhaW5zX2luX25vbl90cml2aWFs X3NldCk7CisgIEhhc2hGY24gaGFzaGVyOworICBjb25zdCBzaXplX3R5cGUg Y2FwYWNpdHkgPSBudW1fYnVja2V0czsKKyAgc2l6ZV90eXBlIGluZGV4ID0g aGFzaGVyIChrZXkpICYgKGNhcGFjaXR5IC0gMSk7CisgIGtleV90eXBlIGsg PSBrZXlfYXRfaW5kZXggKGluZGV4KTsKKyAgc2l6ZV90eXBlIGluZGljZXNf ZXhhbWluZWQgPSAwOworICBpbmMgKHN0YXRfcHJvYmVzX2luX25vbl90cml2 aWFsX3NldCk7CisgIHdoaWxlIChrICE9IGtleSkKKyAgICB7CisgICAgICAr K2luZGljZXNfZXhhbWluZWQ7CisgICAgICBpZiAoLypVTkxJS0VMWSovKGsg PT0gKGtleV90eXBlKSBpbGxlZ2FsX2tleQorCQkgICAgICAgfHwgaW5kaWNl c19leGFtaW5lZCA9PSBjYXBhY2l0eSkpCisJcmV0dXJuIGZhbHNlOworCisg ICAgICBpbmRleCA9IG5leHRfaW5kZXggKGluZGV4LCBpbmRpY2VzX2V4YW1p bmVkKTsKKyAgICAgIGsgPSBrZXlfYXRfaW5kZXggKGluZGV4KTsKKyAgICAg IGluYyAoc3RhdF9wcm9iZXNfaW5fbm9uX3RyaXZpYWxfc2V0KTsKKyAgICB9 CisgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5 LCBjbGFzcyBIYXNoRmNuLCBjbGFzcyBBbGxvYz4KK3R5cGVuYW1lIGluc2Vy dF9vbmx5X2hhc2hfc2V0cyA8S2V5LCBIYXNoRmNuLCBBbGxvYz46Omluc2Vy dF9vbmx5X2hhc2hfc2V0ICoKKyAgIGluc2VydF9vbmx5X2hhc2hfc2V0czxL ZXksIEhhc2hGY24sCisgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jPjo6 aW5zZXJ0X29ubHlfaGFzaF9zZXQ6OnJlc2l6ZV9pZl9uZWNlc3NhcnkgKHZv aWQpCit7CisgIFZUVl9ERUJVR19BU1NFUlQgKG51bV9idWNrZXRzID49IG1p bl9jYXBhY2l0eSk7CisgIHNpemVfdHlwZSB1bnVzZWQgPSBudW1fYnVja2V0 cyAtIG51bV9lbnRyaWVzOworICBpZiAodW51c2VkIDwgKG51bV9idWNrZXRz ID4+IDIpKQorICAgIHsKKyAgICAgIGluYyAoc3RhdF9kb3VibGVfdGhlX251 bWJlcl9vZl9idWNrZXRzKTsKKyAgICAgIHNpemVfdHlwZSBuZXdfbnVtX2J1 Y2tldHMgPSBudW1fYnVja2V0cyAqIDI7CisgICAgICBpbnNlcnRfb25seV9o YXNoX3NldCAqcyA9IGNyZWF0ZSAobmV3X251bV9idWNrZXRzKTsKKyAgICAg IGZvciAoc2l6ZV90eXBlIGkgPSAwOyBpIDwgbnVtX2J1Y2tldHM7IGkrKykK KyAgICAgICAgaWYgKGJ1Y2tldHNbaV0gIT0gKGtleV90eXBlKSBpbGxlZ2Fs X2tleSkKKyAgICAgICAgICBzLT5pbnNlcnRfbm9fcmVzaXplIChidWNrZXRz W2ldKTsKKyAgICAgIFZUVl9ERUJVR19BU1NFUlQgKHNpemUgKHRoaXMpID09 IHNpemUgKHMpKTsKKyAgICAgIHJldHVybiBzOworICAgIH0KKyAgZWxzZQor ICAgIHJldHVybiB0aGlzOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks IGNsYXNzIEhhc2hGY24sIGNsYXNzIEFsbG9jPgorYm9vbAoraW5zZXJ0X29u bHlfaGFzaF9zZXRzPEtleSwgSGFzaEZjbiwgQWxsb2M+OjpjcmVhdGUgKHNp emVfdHlwZSBuLAorCQkJCQkJIGluc2VydF9vbmx5X2hhc2hfc2V0ICoqaGFu ZGxlKQorICAKK3sKKyAgaW5jIChzdGF0X2NyZWF0ZSk7CisgICpoYW5kbGUg PSBpbnNlcnRfb25seV9oYXNoX3NldDo6Y3JlYXRlIChuKTsKKyAgcmV0dXJu IChuIDw9IDEpIHx8ICgqaGFuZGxlICE9IE5VTEwpOworfQorCit0ZW1wbGF0 ZTx0eXBlbmFtZSBLZXksIGNsYXNzIEhhc2hGY24sIGNsYXNzIEFsbG9jPgor Ym9vbAoraW5zZXJ0X29ubHlfaGFzaF9zZXRzPEtleSwgSGFzaEZjbiwgQWxs b2M+OjpyZXNpemUgKHNpemVfdHlwZSBuLAorCQkJCQkgICAgICAgICBpbnNl cnRfb25seV9oYXNoX3NldCAqKmhhbmRsZSkKK3sKKyAgaW5jIChzdGF0X3Jl c2l6ZSk7CisgICpoYW5kbGUgPSBpbnNlcnRfb25seV9oYXNoX3NldDo6cmVz aXplIChuLCAqaGFuZGxlKTsKKyAgcmV0dXJuIChuIDw9IDEpIHx8ICgqaGFu ZGxlICE9IE5VTEwpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIGNs YXNzIEhhc2hGY24sIGNsYXNzIEFsbG9jPgorYm9vbAoraW5zZXJ0X29ubHlf aGFzaF9zZXRzPEtleSwgSGFzaEZjbiwgQWxsb2M+OjppbnNlcnQgKGtleV90 eXBlIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnNlcnRfb25seV9oYXNoX3NldCAqKmhhbmRsZSkK K3sKKyAgaW5jIChzdGF0X2luc2VydCk7CisgIGNvbnN0IHNpemVfdHlwZSBv bGRfc2l6ZSA9IGluc2VydF9vbmx5X2hhc2hfc2V0OjpzaXplICgqaGFuZGxl KTsKKyAgKmhhbmRsZSA9IGluc2VydF9vbmx5X2hhc2hfc2V0OjppbnNlcnQg KGtleSwgKmhhbmRsZSk7CisgIGlmICgqaGFuZGxlICE9IE5VTEwpCisgICAg eworICAgICAgY29uc3Qgc2l6ZV90eXBlIGRlbHRhID0gaW5zZXJ0X29ubHlf aGFzaF9zZXQ6OnNpemUgKCpoYW5kbGUpIC0gb2xkX3NpemU7CisgICAgICBp bmNfYnkgKHN0YXRfaW5zZXJ0X2tleV90aGF0X3dhc19hbHJlYWR5X3ByZXNl bnQsIGRlbHRhID09IDApOworICAgIH0KKyAgcmV0dXJuICpoYW5kbGUgIT0g TlVMTDsKK30KKworI2VuZGlmIC8qIFZUVl9TRVRfSCAgKi8KSW5kZXg6IGxp YnN0ZGMrKy12My9saWJzdXBjKysvdnR2X3N0dWJzLmNjCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLS0tIGxpYnN0ZGMrKy12My9saWJzdXBjKysvdnR2X3N0 dWJzLmNjCShyZXZpc2lvbiAwKQorKysgbGlic3RkYysrLXYzL2xpYnN1cGMr Ky92dHZfc3R1YnMuY2MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEgQEAK Ky8qIENvcHlyaWdodCAoQykgMjAxMi0yMDEzCisgICBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgor CisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9u IDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9u YWwgIAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVu dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4xLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkgb2YgdGhl IEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOworICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09Q WUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgICA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisjaW5jbHVk ZSAidnR2X3J0cy5oIgorCisvKiBUaGUgaXMgcGFydCBvZiB0aGUgdnRhYmxl IHZlcmlmaWNhdGlvbiBydW50aW1lIGxpYnJhcnkuICBGb3IgbW9yZQorICAg aW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmZWF0dXJlLCBzZWUgdGhlIGNvbW1l bnRzIGluIHZ0dl9ydHMuY2MuICAqLworCisvKiBUaGUgZnVuY3Rpb25zIGlu IHRoaXMgZmlsZSBhcmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpYnZ0dl9zdHVi cworICAgbGlicmFyeSwgYXMgcGFydCBvZiB0aGUgdnRhYmxlIHZlcmlmaWNh dGlvbiBmZWF0dXJlLiAgV2hlbiBidWlsZGluZworICAgYSBiaW5hcnkgd2l0 aG91dCB2dGFibGUgdmVyaWZpY2F0aW9uLCBhbmQgbGlua2luZyBpdCB3aXRo IGEKKyAgIChwb3NzaWJseSBwcmUtYnVpbHQgdGhpcmQtcGFydHkpIGxpYnJh cnkgdGhhdCB3YXMgYnVpbHQgd2l0aAorICAgdmVyaWZpY2F0aW9uLCBpdCBp cyBwb3NzaWJsZSB0aGF0IHZ0YWJsZSB2ZXJpZmljYXRpb24gd2lsbCBmYWls IGR1ZQorICAgdG8gaW5jb21wbGV0ZSBkYXRhIChyYXRoZXIgdGhhbiBkdWUg dG8gY29ycnVwdCB2dGFibGUgcG9pbnRlcnMpLiAgSW4KKyAgIHRoaXMgY2Fz ZSB3ZSBuZWVkIHRvIGdpdmUgcHJvZ3JhbW1lcnMgYSB3YXkgb2YgdHVybmlu ZyBvZmYgdGhlCisgICB2dGFibGUgdmVyaWZpY2F0aW9uIGluIHRoZWlyIGxp YnJhcmllcy4gIFRoZXkgY2FuIGRvIHNvIGJ5IGxpbmtpbmcKKyAgIHdpdGgg dGhlIGxpYnZ0dl9zdHVicyBsaWJyYXJ5LCB3aGljaCAoYXMgeW91IGNhbiBz ZWUpIHdpbGwgcmVwbGFjZQorICAgdGhlIHJlYWwgdmVyaWZpY2F0aW9uIGZ1 bmN0aW9ucyB3aXRoIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGRvCisgICBu b3RoaW5nIChzbyBubyBtb3JlIHZlcmlmaWNhdGlvbiBmYWlsdXJlcy9hYm9y dHMpLiAgKi8KKwordm9pZAorX19WTFRDaGFuZ2VQZXJtaXNzaW9uIChpbnQg cGVybSBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkpCit7Cit9CisKK3Zv aWQgX19WTFRJbml0U2V0U3ltYm9sRGVidWcKKyAgICAgICAgICAgICAgICAg ICAgICAodm9pZCAqKnNldF9oYW5kbGVfcHRyIF9fYXR0cmlidXRlX18oKF9f dW51c2VkX18pKSwKKwkJICAgICAgIGNvbnN0IHZvaWQgKnNldF9zeW1ib2xf a2V5IF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSwKKwkJICAgICAgIHN0 ZDo6c2l6ZV90IHNpemVfaGludCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9f KSkpCit7Cit9CisKK3ZvaWQKK19fVkxUUmVnaXN0ZXJQYWlyRGVidWcgKHZv aWQgKipzZXRfaGFuZGxlX3B0cnIgX19hdHRyaWJ1dGVfXygoX191bnVzZWRf XykpLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnZ0YWJs ZV9wdHIgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLAorICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNldF9zeW1ib2xfbmFtZSBfX2F0 dHJpYnV0ZV9fKChfX3VudXNlZF9fKSksCisJCSAgICAgIGNvbnN0IGNoYXIg KnZ0YWJsZV9uYW1lIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKSkKK3sK K30KKworY29uc3Qgdm9pZCAqCitfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXJE ZWJ1ZworICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKipzZXRfaGFuZGxl X3B0ciAgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpLAorCSAgICAgICAJ ICAgICAgY29uc3Qgdm9pZCAqdnRhYmxlX3B0ciwKKwkJICAgICAgY29uc3Qg Y2hhciAqc2V0X3N5bWJvbF9uYW1lIF9fYXR0cmlidXRlX18oKF9fdW51c2Vk X18pKSwKKwkJICAgICAgY29uc3QgY2hhciAqdnRhYmxlX25hbWUgX19hdHRy aWJ1dGVfXygoX191bnVzZWRfXykpKQorCit7CisgIHJldHVybiB2dGFibGVf cHRyOworfQorCit2b2lkIF9fVkxUSW5pdFNldFN5bWJvbAorICAgICAgICAg ICAgICAgICAgICAgICh2b2lkICoqc2V0X2hhbmRsZV9wdHIgX19hdHRyaWJ1 dGVfXygoX191bnVzZWRfXykpLAorICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB2b2lkICpzZXRfc3ltYm9sX2tleSBfX2F0dHJpYnV0ZV9fKChfX3Vu dXNlZF9fKSksCisJCSAgICAgICBzdGQ6OnNpemVfdCBzaXplX2hpbnQgX19h dHRyaWJ1dGVfXygoX191bnVzZWRfXykpKQoreworfQorCit2b2lkCitfX1ZM VFJlZ2lzdGVyUGFpciAodm9pZCAqKnNldF9oYW5kbGVfcHRyIF9fYXR0cmli dXRlX18oKF9fdW51c2VkX18pKSwKKyAgICAgICAgICAgICAgICAgICBjb25z dCB2b2lkICp2dGFibGVfcHRyIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18p KSkKK3sKK30KKworY29uc3Qgdm9pZCAqCitfX1ZMVFZlcmlmeVZ0YWJsZVBv aW50ZXIgKHZvaWQgKipzZXRfaGFuZGxlX3B0ciBfX2F0dHJpYnV0ZV9fKChf X3VudXNlZF9fKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHZvaWQgKnZ0YWJsZV9wdHIpCit7CisgIHJldHVybiB2dGFibGVfcHRyOwor fQpJbmRleDogbGlic3RkYysrLXYzL2xpYnN1cGMrKy92dHZfdXRpbHMuY2MK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGlic3RkYysrLXYzL2xpYnN1 cGMrKy92dHZfdXRpbHMuY2MJKHJldmlzaW9uIDApCisrKyBsaWJzdGRjKyst djMvbGlic3VwYysrL3Z0dl91dGlscy5jYwkocmV2aXNpb24gMCkKQEAgLTAs MCArMSwxMDcgQEAKKy8qIENvcHlyaWdodCAoQykgMjAxMi0yMDEzCisgICBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKworICAgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAg IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0MgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBV bmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFu dGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKyAg IDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgYSBj b3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0aGUgZmlsZXMgQ09QWUlO RzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3Qs IHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8K KworLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHZ0YWJsZSB2ZXJpY2F0 aW9uIHJ1bnRpbWUgbGlicmFyeSAoc2VlCisgICBjb21tZW50cyBpbiB2dHZf cnRzLmNjIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHZ0YWJsZQorICAg dmVyaWZpY2F0aW9uKS4gIFRoaXMgZmlsZSBjb250YWlucyBsb2cgZmlsZSB1 dGlsaXRpZXMuICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j bHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1 ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8 c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJy bm8uaD4KKworI2luY2x1ZGUgInZ0dl91dGlscy5oIgorCisvKiBUaGlzIGlz IHRoZSBkaXJlY3RvcnkgaW50byB3aGljaCBhbGwgdnRhYmxlIHZlcmljYXRp b24gbG9nIGZpbGVzCisgICBnZXQgd3JpdHRlbi4gICovCitzdGF0aWMgY29u c3QgY2hhciAqIGNvbnN0IGxvZ3NfZGlyID0gIi90bXAvdnR2X2xvZ3MiOwor CisKKy8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlIE5BTUUgb2YgYSBsb2cg ZmlsZSB0byBvcGVuLCBhdHRlbXB0cyB0bworICAgb3BlbiBpdCBpbiB0aGUg bG9nc19kaXIgZGlyZWN0b3J5LCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5n IGZpbGUKKyAgIGRlY3JpcHRvci4gICovCisKK2ludAordnR2X29wZW5fbG9n IChjb25zdCBjaGFyICpuYW1lKQoreworICBjaGFyIGxvZ19uYW1lWzI1Nl07 CisgIHNucHJpbnRmIChsb2dfbmFtZSwgc2l6ZW9mIChsb2dfbmFtZSksICIl cy8lcyIsIGxvZ3NfZGlyLCBuYW1lKTsKKyAgbWtkaXIgKGxvZ3NfZGlyLCBT X0lSV1hVKTsKKyAgaW50IGZkID0gb3BlbiAobG9nX25hbWUsIE9fV1JPTkxZ IHwgT19BUFBFTkQgfCBPX0NSRUFULCBTX0lSV1hVKTsKKyAgaWYgKGZkID09 IC0xKQorICAgIHZ0dl9hZGRfdG9fbG9nICgyLCAiQ2Fubm90IG9wZW4gbG9n IGZpbGUgJXMgJXNcbiIsIG5hbWUsCisJCSAgICBzdHJlcnJvciAoZXJybm8p KTsKKyAgcmV0dXJuIGZkOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHRha2Vz IGEgZmlsZSBkZXNjcmlwdG9yIChGRCkgYW5kIGEgc3RyaW5nIChTVFIpIGFu ZAorICAgdHJpZXMgdG8gd3JpdGUgdGhlIHN0cmluZyB0byB0aGUgZmlsZS4g ICovCisKK3N0YXRpYyBpbnQKK3Z0dl9sb2dfd3JpdGUgKGludCBmZCwgY29u c3QgY2hhciAqc3RyKQoreworICBpZiAod3JpdGUgKGZkLCBzdHIsIHN0cmxl biAoc3RyKSkgIT0gLTEpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKGZkICE9 IDIpIC8qIE1ha2Ugc3VyZSB3ZSBkb250IGdldCBpbiBhIGxvb3AuICAqLwor ICAgIHZ0dl9hZGRfdG9fbG9nICgyLCAiRXJyb3Igd3JpdGluZyB0byBsb2c6 ICVzXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgcmV0dXJuIC0xOworfQor CisKKy8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBmaWxlIGRlY3JpcHRvciAo TE9HX0ZJTEUpIGFuZCBhbiBvdXRwdXQKKyBmb3JtYXQgc3RyaW5nIChGT1JN QVQpLCBmb2xsb3dlZCBieSB6ZXJvIG9yIG1vcmUgcHJpbnQgZm9ybWF0Cisg YXJndW1lbnRzICh0aGUgc2FtZSBhcyBmcHJpbnRmLCBmb3IgZXhhbXBsZSku ICBJdCBnZXRzIHRoZSBjdXJyZW50CisgcHJvY2VzcyBJRCBhbmQgUFBJRCwg cHJlLXBlbmRzIHRoZW0gdG8gdGhlIGZvcm1hdHRlZCBtZXNzYWdlLCBhbmQK KyB3cml0ZXMgd3JpdGUgaXQgb3V0IHRvIHRoZSBsb2cgZmlsZSByZWZlcmVu Y2VkIGJ5IExPR19GSUxFIHZpYSBjYWxsZXMKKyB0byB2dHZfbG9nX3dyaXRl LiAgKi8KKworaW50Cit2dHZfYWRkX3RvX2xvZyAoaW50IGxvZ19maWxlLCBj b25zdCBjaGFyICogZm9ybWF0LCAuLi4pCit7CisgIC8qIFdlIGRvbnQgd2Fu dCB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSB0aGlzIGJ1ZmZlci4gVGhpcyBz aG91bGQgYmUKKyAgICAgbW9yZSB0aGFuIGVub3VnaCBpbiBtb3N0IGNhc2Vz LiBJdCBpZiBpc24ndCB3ZSBhcmUgY2FyZWZ1bCBub3QgdG8KKyAgICAgZG8g YSBidWZmZXIgb3ZlcmZsb3cuICAqLworICBjaGFyIG91dHB1dFsxMDI0XTsK KworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIGZvcm1hdCk7CisK KyAgc25wcmludGYgKG91dHB1dCwgc2l6ZW9mIChvdXRwdXQpLCAiVlRWOiBQ SUQ9JWQgUFBJRD0lZCAiLCBnZXRwaWQgKCksCisJICAgIGdldHBwaWQgKCkp OworICB2dHZfbG9nX3dyaXRlIChsb2dfZmlsZSwgb3V0cHV0KTsKKyAgdnNu cHJpbnRmIChvdXRwdXQsIHNpemVvZiAob3V0cHV0KSwgZm9ybWF0LCBhcCk7 CisgIHZ0dl9sb2dfd3JpdGUgKGxvZ19maWxlLCBvdXRwdXQpOworICB2YV9l bmQgKGFwKTsKKworICAvKiBmZGF0YXN5bmMgaXMgcXVpdGUgZXhwZW5zaXZl LiBPbmx5IGVuYWJsZSBpZiB5b3Ugc3VzcGVjdCB5b3UgYXJlCisgICAgIGxv b3NpbmcgbG9nIGRhdGEgaW4gaW4gYSBwcm9ncmFtIGNyYXNoPyAgKi8KKyAg LyogIGZkYXRhc3luYyhsb2dfZmlsZSk7ICAqLworCisgIHJldHVybiAwOwor fQpJbmRleDogbGlic3RkYysrLXYzL2xpYnN1cGMrKy92dHZfdXRpbHMuaAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJzdGRjKystdjMvbGlic3Vw YysrL3Z0dl91dGlscy5oCShyZXZpc2lvbiAwKQorKysgbGlic3RkYysrLXYz L2xpYnN1cGMrKy92dHZfdXRpbHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr MSw1MiBAQAorLyogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMKKyAgIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiBHQ0MuCisKKyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVy IFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQg YWRkaXRpb25hbAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBH Q0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4x LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkg b2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdp dGggdGhpcyBwcm9ncmFtOworICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBh bmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2Vl CisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisj aWZuZGVmIF9WVFZfVVRJTFNfSAorI2RlZmluZSBfVlRWX1VUSUxTX0ggMQor CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK2V4dGVybiBib29sIHZ0dl9kZWJ1 ZzsKKworLyogSGFuZGxlciBmb3IgdmVyaWZpY2F0aW9uIHJ1bnRpbWUgZXJy b3JzLiAgKi8KKyNkZWZpbmUgVlRWX2Vycm9yIGFib3J0CisKKy8qIEFzc2Vy dGlvbiBtYWNyb3MgdXNlZCBpbiB2dGFibGUgdmVyaWZpY2F0aW9uIHJ1bnRp bWUuICAqLworI2RlZmluZSBWVFZfQVNTRVJUKEVYUFIpICgoYm9vbCkgKCEo RVhQUikgPyBWVFZfZXJyb3IoKSA6ICh2b2lkKSAwKSkKKyNkZWZpbmUgVlRW X0RFQlVHX0FTU0VSVChFWFBSKSBcCisgICAgICAgICAgICAgICAgICAgICAg KChib29sKSAodnR2X2RlYnVnICYmICEoRVhQUikpID8gVlRWX2Vycm9yKCkg OiAodm9pZCkgMCkKKworLyogTmFtZSBvZiB0aGUgc2VjdGlvbiB3aGVyZSB3 ZSBwdXQgZ2VuZXJhbCBWVFYgdmFyaWFibGVzIGZvciBwcm90ZWN0aW9uICov CisjZGVmaW5lIFZUVl9QUk9URUNURURfVkFSU19TRUNUSU9OICIudnRhYmxl X21hcF92YXJzIgorI2RlZmluZSBWVFZfUFJPVEVDVEVEX1ZBUiBcCisgICAg ICAgICAgICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChzZWN0aW9uIChW VFZfUFJPVEVDVEVEX1ZBUlNfU0VDVElPTikpKQorCisvKiBUaGUgZm9sbG93 aW5nIGxvZ2dpbmcgcm91dGluZXMgdHJ5IHRvIHVzZSBsb3cgbGV2ZWwgZmls ZSBhY2Nlc3MKKyAgIHJvdXRpbmVzIGFuZCBhdm9pZCBjYWxsaW5nIG1hbGxv Yy4gV2UgbmVlZCB0aGlzIHNvIHRoYXQgd2UgZG9udAorICAgZGlzdHVyYiB0 aGUgb3JkZXIgb2YgY2FsbHMgdG8gZGxvcGVuLiAgQ2hhbmdpbmcgdGhlIG9y ZGVyIG9mIGRsb3BlbgorICAgY2FsbHMgbWF5IGxlYWQgdG8gZGVhZGxvY2tz ICovCitpbnQgdnR2X29wZW5fbG9nIChjb25zdCBjaGFyICogbmFtZSk7Citp bnQgdnR2X2FkZF90b19sb2cgKGludCBsb2csIGNvbnN0IGNoYXIgKiBmb3Jt YXQsIC4uLik7CisKKyNlbmRpZiAvKiBWVFZfVVRJTFNfSCAqLwpJbmRleDog bGlic3RkYysrLXYzL2xpYnN1cGMrKy92dHZfaW5pdC5jYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBsaWJzdGRjKystdjMvbGlic3VwYysrL3Z0dl9p bml0LmNjCShyZXZpc2lvbiAwKQorKysgbGlic3RkYysrLXYzL2xpYnN1cGMr Ky92dHZfaW5pdC5jYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAor LyogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMKKyAgIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisK KyAgIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24g NyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25h bAorICAgcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGlt ZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorICAgMy4xLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkgb2YgdGhlIEdD QyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOworICAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlO Ry5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgICA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisKKy8qIFRoaXMg ZmlsZSBjb250YWlucyBhbGwgdGhlIGRlZmluaXRpb25zIHRoYXQgZ28gaW50 byB0aGUgbGlidnR2X2luaXQKKyAgIGxpYnJhcnksIHdoaWNoIGlzIHBhcnQg b2YgdGhlIHZ0YWJsZSB2ZXJpZmljYXRpb24gZmVhdHVyZS4gIFRoaXMKKyAg IGxpYnJhcnkgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSB0d28gZnVuY3Rpb25z IChfX1ZMVHVucHJvdGVjdCBhbmQKKyAgIF9fVkxUcHJvdGVjdCkgYW5kIG9u ZSBnbG9iYWwgdmFyaWFibGUgZGVmaW5pdGlvbgorICAgKF9fdnR2X2RlZmlu ZWRfaW5fdnR2X2luaXRfbGliKS4gIEFueSBwcm9ncmFtIHRoYXQgd2FzIGNv bXBpbGVkCisgICB3aXRoIHRoZSBvcHRpb24gIi1mdnRhYmxlLXZlcmlmeT1z dGQiIE1VU1QgYWxzbyBiZSBsaW5rZWQgd2l0aAorICAgbGlidnR2X2luaXQs IGJlY2F1c2UgdGhlIHR3byBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSB1 c2VkIGJ5IHRoZQorICAgdnRhYmxlIHZlcmlmaWNhdGlvbiBjb2RlLiAgVGhl IHJlYXNvbiB0aGV5IGFyZSBpbiBhIHNlcGFyYXRlCisgICBsaWJyYXJ5IHJh dGhlciB0aGFuIGluIGxpYnN0ZGMrKyB3aXRoIGFsbCB0aGUgcmVzdCBvZiB0 aGUgdnRhYmxlCisgICB2ZXJpZmljYXRpb24gcnVudGltZSBjb2RlIGlzIGFz IGZvbGxvd3MuICBFYWNoIC5vIGZpbGUgdGhhdCB3YXMKKyAgIGNvbXBpbGVk IHdpdGggdnRhYmxlIHZlcmlmaWNhdGlvbiB3aWxsIGNvbnRhaW4gY2FsbHMg aW50byB0aGUKKyAgIHJ1bnRpbWUgKG1hZGUgZnJvbSBjb25zdHJ1Y3RvciBp bml0aWFsaXphdGlvbiBmdW5jdGlvbnMpIHRvIGJ1aWxkCisgICB0aGUgZGF0 YSBzdHJ1Y3R1cmVzIG5lZWRlZCBmb3IgdmVyaWZpY2F0aW9uLiAgQXQgYWxs IHRpbWVzIGV4Y2VwdAorICAgd2hlbiB0aGV5IGFyZSBiZWluZyBjb25zdHJ1 Y3RlZCwgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUKKyAgIGlu IHByb3RlY3RlZCBtZW1vcnksIHNvIHRoYXQgYXR0YWNrZXJzIGNhbm5vdCBj b3JydXB0IHRoZW0uCisgICBfX1ZMVHVucHJvdGVjdCBzZXRzIHRoZSBtZW1v cnkgY29udGFpbmluZyB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgdG8KKyAgIGJl IHdyaXRhYmxlLCBmb3IgdXBkYXRlcy4gIF9fVkxUcHJvdGVjdCBtYWtlcyB0 aGUgbWVtb3J5IHJlYWQtb25seSwKKyAgIGZvciBhbGwgb3RoZXIgdGltZXMu ICBUaGlzIG1lbW9yeSBwcm90ZWN0aW9uIGFuZCB1bnByb3RlY3Rpb24gaXMK KyAgIGRvbmUgdmlhIGNhbGxzIHRvIG1wcm90ZWN0LCB3aGljaCBhcmUgY29z dGx5LiAgU28gaW5zdGVhZCBvZgorICAgY2FsbGluZyBfX1ZMVHVucHJvdGVj dCBhbmQgX19WTFRwcm90ZWN0IG9uY2UgcGVyIG9iamVjdCBmaWxlIHdlCisg ICB3YW50IHRvIGNhbGwgdGhlbSBvbmNlIHBlciBleGVjdXRhYmxlLiAgVGhl cmVmb3JlIGluc3RlYWQgb2YKKyAgIHB1dHRpbmcgY2FsbHMgdG8gdGhlbSBk aXJlY3RseSBpbnRvIGVhY2ggb2JqZWN0IGZpbGUsIHdlIHB1dCB0aGUKKyAg IGNhbGxzIHRvIHRoZW0gb25seSBpbiBfX1ZMVFJlZ2lzdGVyUGFpciwgaW4g dGhlIGxpYnN0ZGMrKyBsaWJyYXJ5LgorICAgV2UgZ2l2ZSBfX1ZMVHVucHJv dGVjdCBhbiBpbml0aWFsaXphdGlvbiBwcmlvcml0eSB0byBtYWtlIGl0IHJ1 bgorICAgYmVmb3JlIGFsbCBvZiBvdXIgZGF0YSBzdHJ1Y3R1cmUgY29uc3Ry dWN0aW9uIGZ1bmN0aW9ucywgYW5kIHdlCisgICBnaXZlIF9fVkxUcHJvdGVj dCBhbiBpbml0aWFsaXphdGlvbiBwcmlvcml0eSB0byBtYWtlIGl0IHJ1biBh ZnRlcgorICAgYWxsIG9mIG91ciBkYXRhIHN0cnVjdHVyZSBjb25zdHJ1Y3Rp aW9uIGZ1bmN0aW9ucy4gIFdlIHB1dCB0aGVtCisgICBpbnRvIGEgc2VwYXJh dGUgbGlicmFyeSBhbmQgbGluayB0aGF0IGxpYnJhcnkgd2l0aCB0aGUKKyAg ICItLXdob2xlLWFyY2hpdmUiIGxpbmtlciBvcHRpb24sIHRvIG1ha2Ugc3Vy ZSB0aGF0IGJvdGggZnVuY3Rpb25zIGdldAorICAgbGlua2VkIGluIChzaW5j ZSB0aGUgYWN0dWFsIGNhbGxzIHRvIHRoZW0gYXJlIGluIHRoZSBsaWJzdGRj KysKKyAgIHJ1bnRpbWUpLiAgV2UgY2FuJ3QgcHV0IHRoZW0gaW50byBsaWJz dGRjKysgYmVjYXVzZSBsaW5raW5nCisgICBsaWJzdGRjKysgd2l0aCAiLS13 aG9sZS1hcmNoaXZlIiBpcyBwcm9iYWJseSBub3QgYSBnb29kIGlkZWEuCisK KyAgIFRoZSBfX3Z0dl9kZWZpbmVkX2luX3Z0dl9saWIgdmFyaWFibGUgaXMg cmVmZXJlbmNlZCwgYnV0IG5vdAorICAgZGVmaW5lZCwgaW4gdGhlIGNvbnN0 cnVjdG9yIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aGVyZSB3ZSBoYXZl CisgICB0aGUgY2FsbHMgdG8gYnVpbGQgb3VyIGRhdGEgc3RydWN0dXJlcy4g IFRoZSBwdXJwb3NlIG9mIHRoaXMKKyAgIHZhcmlhYmxlIGlzIHRvIGNhdXNl IGEgbGlua2VyIGVycm9yIHRvIG9jY3VyIGlmIHRoZSBwcm9ncmFtbWVyCisg ICBjb21waWxlZCB3aXRoIC1mdnRhYmxlLXZlcmlmeT1zdGQgYW5kIGRpZCBu b3QgbGluayB3aXRoIHRoZSB2dHZfaW50CisgICBsaWJyYXJ5IChiZXR0ZXIg YSBsaW5rLXRpbWUgZXJyb3IgdGhhbiBhIHJ1bi10aW1lIGVycm9yKS4gICov CisKKworLyogTmVlZHMgdG8gYnVpbGQgd2l0aCBDKysgYmVjYXVzZSB0aGUg ZGVmaW5pdGlvbiBvZgorICAgX19WTFRDaGFuZ2VQZXJtaXNzaW9uIGlzIGlu IEMrKy4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZXJyb3IgIlRoaXMg ZmlsZSBtdXN0IGJlIGNvbXBpbGVkIHdpdGggYSBDKysgY29tcGlsZXIiCisj ZW5kaWYKKworI2luY2x1ZGUgInZ0dl9ydHMuaCIKKworLyogI2luY2x1ZGUg PHN0ZGlvLmg+ICovCisKKy8qIERlZmluZSB0aGlzIGR1bW15IHN5bWJvbCB0 byBkZXRlY3QgYXQgbGluayB0aW1lIHRoZSBjYXNlcyB3aGVyZQorICAgdXNl ciBpcyBjb21waWxpbmcgd2l0aCAtZnZ0YWJsZS12ZXJpZnk9c3RkIGFuZCBu b3QgbGlua2luZyB3aXRoIHRoZQorICAgdnR2X2luaXQgbGlicmFyeS4gTm90 ZSB0aGF0IHRoZSB2aXNpYmlsaXR5IG5lZWRzIHRvIGJlIGhpZGRlbi4gRWFj aAorICAgb2JqZWN0IG1vZHVsZSBpcyBzdXBwb3NlZCB0byBsaW5rIHdpdGgg dGhlIHZ0dl9pbml0IGxpYnJhcnkgYW5kIHdlCisgICBkb24ndCB3YW50IHRo aXMgZGVmaW5pdGlvbiB0byBjb21lIGZyb20gYSBkaWZmZXJlbnQgbGlicmFy eSAqLwordW5zaWduZWQgaW50CitfX3Z0dl9kZWZpbmVkX2luX3Z0dl9pbml0 X2xpYiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkg PSAwOworCisKK19fYXR0cmlidXRlX18gKChjb25zdHJ1Y3Rvcig5OCkpKSB2 b2lkCitfX1ZMVHVucHJvdGVjdCAodm9pZCkKK3sKKyAgX19WTFRDaGFuZ2VQ ZXJtaXNzaW9uIChfX1ZMVFBfUkVBRF9XUklURSk7Cit9CisKK19fYXR0cmli dXRlX18gKChjb25zdHJ1Y3RvcigxMDApKSkgdm9pZAorX19WTFRwcm90ZWN0 ICh2b2lkKQoreworICBfX1ZMVENoYW5nZVBlcm1pc3Npb24gKF9fVkxUUF9S RUFEX09OTFkpOworfQpJbmRleDogbGlic3RkYysrLXYzL2xpYnN1cGMrKy92 dHZfbWFsbG9jLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYnN0 ZGMrKy12My9saWJzdXBjKysvdnR2X21hbGxvYy5jYwkocmV2aXNpb24gMCkK KysrIGxpYnN0ZGMrKy12My9saWJzdXBjKysvdnR2X21hbGxvYy5jYwkocmV2 aXNpb24gMCkKQEAgLTAsMCArMSwyMDkgQEAKKy8qIENvcHlyaWdodCAoQykg MjAxMi0yMDEzCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKworICAg VGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorCisgICBHQ0MgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5 b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBHQ0Mg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorCisgICBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24g MywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyAgIHBlcm1pc3Npb25z IGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRp b24sIHZlcnNpb24KKyAgIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFuZAorICAgYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5 IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKyAgIHNlZSB0 aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0 aXZlbHkuICBJZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgKi8KKworLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IHZ0YWJsZSB2ZXJpZmljYXRpb24gcnVudGltZSBsaWJyYXJ5LiAgSXQKKyAg IGNvbnRhaW5zIG91ciBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0 aW9uIHJvdXRpbmVzLCB3aGljaCB3ZQorICAgdXNlIGluIG9yZGVyIHRvIGtl ZXAgdHJhY2sgb2YgdGhlIHBhZ2VzIGluIG1lbW9yeSBpbiB3aGljaCBvdXIg c2V0cworICAgb2YgdmFsaWQgdnRhYmxlIHBvaW50ZXMgYXJlIHN0b3JlZC4g IChXZSBuZWVkIHRvIGtub3cgdGhlIHBhZ2VzIHNvCisgICB3ZSBjYW4gc2V0 IHRoZSBwcm90ZWN0aW9ucyBvbiB0aGVtIGFwcHJvcHJpYXRlbHkpLiAgRm9y IG1vcmUKKyAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2dGFibGUgdmVyaWZp Y2F0aW9uIGZlYXR1cmUsIHNlZSB0aGUgY29tbWVudHMKKyAgIGluIHZ0dl9y dHMuY2MuICBXZSB1c2UgdGhlIGV4aXN0aW5nIG9ic3RhY2sgaW1wbGVtZW50 YXRpb24gaW4gb3VyCisgICBtZW1vcnkgYWxsb2NhdGlvbiBzY2hlbWUuICAq LworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+ CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+ CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgInZ0dl91dGlscy5o IgorI2luY2x1ZGUgInZ0dl9tYWxsb2MuaCIKKyNpbmNsdWRlICJvYnN0YWNr LmgiCisKKy8qIFB1dCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiBvdXIg Ii52dGFibGVfbWFwX3ZhcnMiIHNlY3Rpb24gc28KKyAgIHRoYXQgdGhleSBh cmUgcHJvdGVjdGVkLiAgVGhleSBhcmUgZXhwbGljaXRseSB1bnByb3RlY3Rl ZCBhbmQKKyAgIHByb3RlY3RlZCBhZ2FpbiBieSBjYWxscyB0byBWVFZfdW5w cm90ZWN0IGFuZCBWVFZfcHJvdGVjdCAqLworCitzdGF0aWMgc3RydWN0IG9i c3RhY2sgVlRWX29ic3RhY2sgVlRWX1BST1RFQ1RFRF9WQVI7CitzdGF0aWMg dW5zaWduZWQgbG9uZyBwYWdlX3NpemUgVlRWX1BST1RFQ1RFRF9WQVIgPSAw Oworc3RhdGljIHZvaWQgKmN1cnJlbnRfY2h1bmsgVlRWX1BST1RFQ1RFRF9W QVIgPSAwOworc3RhdGljIHNpemVfdCBjdXJyZW50X2NodW5rX3NpemUgVlRW X1BST1RFQ1RFRF9WQVIgPSAwOworc3RhdGljIGludCBtYWxsb2NfaW5pdGlh bGl6ZWQgVlRWX1BST1RFQ1RFRF9WQVIgPSAwOworCitzdGF0aWMgYm9vbCBk ZWJ1Z19tYWxsb2MgPSBmYWxzZTsKKworLyogVGhpcyBmdW5jdGlvbiBnb2Vz IHRocm91Z2ggYWxsIG9mIHRoZSBwYWdlcyB3ZSBoYXZlIGFsbG9jYXRlZCBz bworICAgZmFyIGFuZCBjYWxscyBtcHJvdGVjdCB0byBtYWtlIGVhY2ggcGFn ZSByZWFkLW9ubHkuICAqLworCit2b2lkCitWVFZfbWFsbG9jX3Byb3RlY3Qg KHZvaWQpCit7CisgIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2k7CisgIGNp ID0gKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKSBjdXJyZW50X2NodW5rOwor ICB3aGlsZSAoY2kpCisgICAgeworICAgICAgVlRWX0RFQlVHX0FTU0VSVCAo KCh1bnNpZ25lZCBsb25nKSBjaSAmIChwYWdlX3NpemUgLSAxKSkgPT0gMCk7 CisgICAgICBpZiAobXByb3RlY3QgKGNpLCAoY2ktPmxpbWl0IC0gKGNoYXIg KikgY2kpLCBQUk9UX1JFQUQpID09IC0xKQorCVZUVl9lcnJvciAoKTsKKyAg ICAgIGNpID0gY2ktPnByZXY7CisgICAgfQorCisgIGlmIChkZWJ1Z19tYWxs b2MpCisgICAgVlRWX21hbGxvY19kdW1wX3N0YXRzICgpOworfQorCisvKiBU aGlzIGZ1bmN0aW9uIGdvZXMgdGhyb3VnaCBhbGwgb2YgdGhlIHBhZ2VzIHdl IGhhdmUgYWxsb2NhdGVkIHNvCisgICBmYXIgYW5kIGNhbGxzIG1ycG90ZWN0 IHRvIG1ha2UgZWFjaCBwYWdlIHJlYWQtd3JpdGUuICAqLworCit2b2lkCitW VFZfbWFsbG9jX3VucHJvdGVjdCAodm9pZCkKK3sKKyAgc3RydWN0IF9vYnN0 YWNrX2NodW5rICogY2k7CisgIGNpID0gKHN0cnVjdCBfb2JzdGFja19jaHVu ayAqKSBjdXJyZW50X2NodW5rOworICB3aGlsZSAoY2kpCisgICAgeworICAg ICAgVlRWX0RFQlVHX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSBjaSAmIChw YWdlX3NpemUgLSAxKSkgPT0gMCk7CisgICAgICBpZiAobXByb3RlY3QgKGNp LCAoY2ktPmxpbWl0IC0gKGNoYXIgKikgY2kpLCBQUk9UX1JFQUQgfCBQUk9U X1dSSVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IC0xKQor CVZUVl9lcnJvciAoKTsKKyAgICAgIGNpID0gY2ktPnByZXY7CisgICAgfQor fQorCisvKiBBbGxvY2F0ZXMgYSBTSVpFLXNpemVkIGNodW5rIG9mIG1lbW9y eSB0aGF0IGlzIGFsaWduZWQgdG8gYSBwYWdlCisgICBib3VuZGFyeS4gIFRo ZSBhbW91bnQgb2YgbWVtb3J5IHJlcXVlc3RlZCAoU0laRSkgbXVzdCBiZSBh IG11bHRpcGxlCisgICBvZiB0aGUgcGFnZSBzaXplLiAgTm90ZTogV2UgbXVz dCB1c2UgbW1hcCB0byBhbGxvY2F0ZSB0aGUgbWVtb3J5OworICAgdXNpbmcg bWFsbG9jIGhlcmUgd2lsbCBjYXVzZSBwcm9ibGVtcy4gICovCisKK3N0YXRp YyB2b2lkICoKK29ic3RhY2tfY2h1bmtfYWxsb2MgKHNpemVfdCBzaXplKQor eworICAvKiBJbmNyZWFzZSBzaXplIHRvIHRoZSBuZXh0IG11bHRpcGxlIG9m IHBhZ2Vfc2l6ZS4gICAqLworICBzaXplID0gKHNpemUgKyAocGFnZV9zaXpl IC0gMSkpICYgKH4ocGFnZV9zaXplIC0gMSkpOworICBWVFZfREVCVUdfQVNT RVJUICgoc2l6ZSAmIChwYWdlX3NpemUgLSAxKSkgPT0gMCk7CisgIHZvaWQg KmFsbG9jYXRlZDsKKworICBpZiAoKGFsbG9jYXRlZCA9IG1tYXAgKE5VTEws IHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAgLTEs IDApKSA9PSAwKQorICAgIFZUVl9lcnJvciAoKTsKKworICBWVFZfREVCVUdf QVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIGFsbG9jYXRlZCAmIChwYWdlX3Np emUgLSAxKSkgPT0gMCk7CisKKyAgY3VycmVudF9jaHVuayA9IGFsbG9jYXRl ZDsKKyAgY3VycmVudF9jaHVua19zaXplID0gc2l6ZTsKKyAgcmV0dXJuIGFs bG9jYXRlZDsKK30KKworc3RhdGljIHZvaWQKK29ic3RhY2tfY2h1bmtfZnJl ZSAoc2l6ZV90IHNpemUpCit7CisgIC8qIERvIG5vdGhpbmcuIEZvciBvdXIg cHVycG9zZXMgdGhlcmUgc2hvdWxkIGJlIHZlcnkgbGl0dGxlCisgICAgIGRl LWFsbG9jYXRpb24uICovCit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc2V0cyB1 cCBhbmQgaW5pdGlhbGl6ZXMgdGhlIG9ic3RhY2sgcGllY2VzIGZvciBvdXIK KyAgIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZS4gICovCisKK3ZvaWQKK1ZU Vl9tYWxsb2NfaW5pdCAodm9pZCkKK3sKKyAgLyogTWFrZSBzdXJlIHdlIG9u bHkgZXhlY3V0ZSB0aGUgbWFpbiBib2R5IG9mIHRoaXMgZnVuY3Rpb24gT05D RS4gICovCisgIGlmIChtYWxsb2NfaW5pdGlhbGl6ZWQpCisgICAgcmV0dXJu OworCisgIHBhZ2Vfc2l6ZSA9IHN5c2NvbmYgKF9TQ19QQUdFX1NJWkUpOwor CisgIG9ic3RhY2tfY2h1bmtfc2l6ZSAoJlZUVl9vYnN0YWNrKSA9IHBhZ2Vf c2l6ZTsKKyAgb2JzdGFja19hbGlnbm1lbnRfbWFzayAoJlZUVl9vYnN0YWNr KSA9IHNpemVvZiAobG9uZykgLSAxOworICAvKiBXZSBndWFyYW50ZWUgdGhh dCB0aGUgb2JzdGFjayBhbGxvYyBmYWlsZWQgaGFuZGxlciB3aWxsIG5ldmVy IGJlCisgICAgIGNhbGxlZCBiZWNhdXNlIGluIGNhc2UgdGhlIGFsbG9jYXRp b24gb2YgdGhlIGNodW5rIGZhaWxzLCBpdCB3aWxsCisgICAgIG5ldmVyIHJl dHVybiAqLworICBvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyID0gTlVM TDsKKworICBvYnN0YWNrX2luaXQgKCZWVFZfb2JzdGFjayk7CisgIG1hbGxv Y19pbml0aWFsaXplZCA9IDE7Cit9CisKKy8qIFRoaXMgaXMgb3VyIGV4dGVy bmFsIGludGVyZmFjZSBmb3IgdGhlIG1lbW9yeSBhbGxvY2F0aW9uLiAgU0la RSBpcworICAgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMgdG8gYmUg YWxsb2NhdGVkLyAgKi8KKwordm9pZCAqCitWVFZfbWFsbG9jIChzaXplX3Qg c2l6ZSkKK3sKKyAgcmV0dXJuIG9ic3RhY2tfYWxsb2MgKCZWVFZfb2JzdGFj aywgc2l6ZSk7Cit9CisKKworLyogVGhpcyBpcyBvdXIgZXh0ZXJuYWwgaW50 ZXJmYWNlIGZvciBtZW1vcnkgZGVhbGxvY2F0aW9uLiAgKi8KKwordm9pZAor VlRWX2ZyZWUgKHZvaWQgKikKK3sKKyAgLyogRG8gbm90aGluZy4gV2UgZG9u dCBjYXJlIGFib3V0IHJlY292ZXJpbmcgdW5uZWRlZCBtZW1vcnkgYXQgdGhp cworICAgICB0aW1lLiAgKi8KK30KKworCisvKiBUaGlzIGlzIGEgZGVidWdn aW5nIGZ1bmN0aW9uIHRhdCBjb2xsZWN0cyBzdGF0aXN0aWNzIGFib3V0IG91 cgorICAgbWVtb3J5IGFsbG9jYXRpb24uICAqLwordm9pZAorVlRWX21hbGxv Y19zdGF0cyAodm9pZCkKK3sKKyAgaW50IGNvdW50ID0gMDsKKyAgc3RydWN0 IF9vYnN0YWNrX2NodW5rICogY2kgPSAoc3RydWN0IF9vYnN0YWNrX2NodW5r ICopIGN1cnJlbnRfY2h1bms7CisgIHdoaWxlIChjaSkKKyAgICB7CisgICAg ICBjb3VudCsrOworICAgICAgY2kgPSBjaS0+cHJldjsKKyAgICB9CisgIGZw cmludGYgKHN0ZGVyciwKKwkgICAiVlRWX21hbGxvY19zdGF0czpcbiAgUGFn ZSBTaXplID0gJWx1IGJ5dGVzXG4gICIKKwkgICAiTnVtYmVyIG9mIHBhZ2Vz ID0gJWRcbiIsIHBhZ2Vfc2l6ZSwgY291bnQpOworfQorCisvKiBUaGlzIGlz IGEgZGVidWdnaW5nIGZ1bmN0aW9uLiAgSXQgd3JpdGVzIG91dCBvdXIgbWVt b3J5IGFsbG9jYXRpb24KKyAgIHN0YXRpc3RpY3MgdG8gYSBsb2cgZmlsZS4g ICovCisKK3ZvaWQKK1ZUVl9tYWxsb2NfZHVtcF9zdGF0cyAodm9pZCkKK3sK KyAgc3RhdGljIGludCBmZCA9IC0xOworCisgIGlmIChmZCA9PSAtMSkKKyAg ICBmZCA9IHZ0dl9vcGVuX2xvZyAoIi90bXAvdnR2X21lbV9wcm90ZWN0aW9u LmxvZyIpOworICBpZiAoZmQgPT0gLTEpCisgICAgcmV0dXJuOworCisgIGlu dCBjb3VudCA9IDA7CisgIHN0cnVjdCBfb2JzdGFja19jaHVuayAqIGNpID0g KHN0cnVjdCBfb2JzdGFja19jaHVuayAqKSBjdXJyZW50X2NodW5rOworICB3 aGlsZSAoY2kpCisgICAgeworICAgICAgY291bnQrKzsKKyAgICAgIGNpID0g Y2ktPnByZXY7CisgICAgfQorCisgIHZ0dl9hZGRfdG9fbG9nIChmZCwgIlZU Vl9tYWxsb2NfcHJvdGVjdCBwcm90ZWN0ZWQ9JWQgcGFnZXNcbiIsIGNvdW50 KTsKK30KSW5kZXg6IGxpYnN0ZGMrKy12My9saWJzdXBjKysvTWFrZWZpbGUu YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGlic3RkYysrLXYzL2xp YnN1cGMrKy9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTk2NTE2KQorKysgbGli c3RkYysrLXYzL2xpYnN1cGMrKy9NYWtlZmlsZS5hbQkod29ya2luZyBjb3B5 KQpAQCAtMjUsNyArMjUsNyBAQCBpbmNsdWRlICQodG9wX3NyY2RpcikvZnJh Z21lbnQuYW0KICMgTmVlZCB0aGlzIGxpYnJhcnkgdG8gYm90aCBiZSBwYXJ0 IG9mIGxpYnN0ZGMrKy5hLCBhbmQgaW5zdGFsbGVkCiAjIHNlcGFyYXRlbHkg dG9vLgogIyAxKSBzZXBhcmF0ZSBsaWJzdXBjKysubGEKLXRvb2xleGVjbGli X0xUTElCUkFSSUVTID0gbGlic3VwYysrLmxhCit0b29sZXhlY2xpYl9MVExJ QlJBUklFUyA9IGxpYnN1cGMrKy5sYSBsaWJ2dHZfaW5pdC5sYSBsaWJ2dHZf c3R1YnMubGEKICMgMikgaW50ZWdyYXRlZCBsaWJzdXBjKytjb252ZW5pZW5j ZS5sYSB0aGF0IGlzIHRvIGJlIGEgcGFydCBvZiBsaWJzdGRjKysuYQogbm9p bnN0X0xUTElCUkFSSUVTID0gbGlic3VwYysrY29udmVuaWVuY2UubGEKIApA QCAtOTIsMTAgKzkyLDIxIEBAIHNvdXJjZXMgPSBcCiAJdGluZm8yLmNjIFwK IAl2ZWMuY2MgXAogCXZtaV9jbGFzc190eXBlX2luZm8uY2MgXAotCXZ0ZXJt aW5hdGUuY2MKKwl2dGVybWluYXRlLmNjIFwKKwl2dHZfcnRzLmNjIFwKKwl2 dHZfbWFsbG9jLmNjIFwKKwl2dHZfdXRpbHMuY2MKKwordnR2X2luaXRfc291 cmNlcyA9IFwKKwl2dHZfaW5pdC5jYworCit2dHZfc3R1YnNfc291cmNlcyA9 IFwKKwl2dHZfc3R1YnMuY2MgCiAKIGxpYnN1cGNfX19sYV9TT1VSQ0VTID0g JChzb3VyY2VzKSAkKGNfc291cmNlcykKIGxpYnN1cGNfX2NvbnZlbmllbmNl X2xhX1NPVVJDRVMgPSAkKHNvdXJjZXMpICQoY19zb3VyY2VzKQorbGlidnR2 X2luaXRfbGFfU09VUkNFUyA9ICQodnR2X2luaXRfc291cmNlcykKK2xpYnZ0 dl9zdHVic19sYV9TT1VSQ0VTID0gJCh2dHZfc3R1YnNfc291cmNlcykKIAog Y3AtZGVtYW5nbGUuYzoKIAlybSAtZiAkQApJbmRleDogbGlic3RkYysrLXYz L2xpYnN1cGMrKy9NYWtlZmlsZS5pbgo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBsaWJzdGRjKystdjMvbGlic3VwYysrL01ha2VmaWxlLmluCShyZXZp c2lvbiAxOTY1MTYpCisrKyBsaWJzdGRjKystdjMvbGlic3VwYysrL01ha2Vm aWxlLmluCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAzLDggQEAgYW1f X29iamVjdHNfMSA9IGFycmF5X3R5cGVfaW5mby5sbyBhdGV4aQogCW5ld19o YW5kbGVyLmxvIG5ld19vcC5sbyBuZXdfb3BudC5sbyBuZXdfb3B2LmxvIG5l d19vcHZudC5sbyBcCiAJcGJhc2VfdHlwZV9pbmZvLmxvIHBtZW1fdHlwZV9p bmZvLmxvIHBvaW50ZXJfdHlwZV9pbmZvLmxvIFwKIAlwdXJlLmxvIHNpX2Ns YXNzX3R5cGVfaW5mby5sbyB0aW5mby5sbyB0aW5mbzIubG8gdmVjLmxvIFwK LQl2bWlfY2xhc3NfdHlwZV9pbmZvLmxvIHZ0ZXJtaW5hdGUubG8KKwl2bWlf Y2xhc3NfdHlwZV9pbmZvLmxvIHZ0ZXJtaW5hdGUubG8gdnR2X3J0cy5sbyB2 dHZfbWFsbG9jLmxvIFwKKwl2dHZfdXRpbHMubG8KIEBHTElCQ1hYX0hPU1RF RF9UUlVFQGFtX19vYmplY3RzXzIgPSBjcC1kZW1hbmdsZS5sbwogYW1fbGli c3VwY19fX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29i amVjdHNfMikKIGxpYnN1cGNfX19sYV9PQkpFQ1RTID0gJChhbV9saWJzdXBj X19fbGFfT0JKRUNUUykKQEAgLTExMSw2ICsxMTIsMTQgQEAgbGlic3VwY19f Y29udmVuaWVuY2VfbGFfTElCQUREID0KIGFtX2xpYnN1cGNfX2NvbnZlbmll bmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVj dHNfMikKIGxpYnN1cGNfX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAgXAog CSQoYW1fbGlic3VwY19fY29udmVuaWVuY2VfbGFfT0JKRUNUUykKK2xpYnZ0 dl9pbml0X2xhX0xJQkFERCA9CithbV9fb2JqZWN0c18zID0gdnR2X2luaXQu bG8KK2FtX2xpYnZ0dl9pbml0X2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3Rz XzMpCitsaWJ2dHZfaW5pdF9sYV9PQkpFQ1RTID0gJChhbV9saWJ2dHZfaW5p dF9sYV9PQkpFQ1RTKQorbGlidnR2X3N0dWJzX2xhX0xJQkFERCA9CithbV9f b2JqZWN0c180ID0gdnR2X3N0dWJzLmxvCithbV9saWJ2dHZfc3R1YnNfbGFf T0JKRUNUUyA9ICQoYW1fX29iamVjdHNfNCkKK2xpYnZ0dl9zdHVic19sYV9P QkpFQ1RTID0gJChhbV9saWJ2dHZfc3R1YnNfbGFfT0JKRUNUUykKIERFRkFV TFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNAIC1JJCh0b3BfYnVpbGRkaXIp CiBkZXBjb21wID0KIGFtX19kZXBmaWxlc19tYXliZSA9CkBAIC0xMjMsNyAr MTMyLDggQEAgTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJU T09MRgogQ1hYQ09NUElMRSA9ICQoQ1hYKSAkKERFRlMpICQoREVGQVVMVF9J TkNMVURFUykgJChJTkNMVURFUykgXAogCSQoQU1fQ1BQRkxBR1MpICQoQ1BQ RkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpCiBDWFhMRCA9ICQo Q1hYKQotU09VUkNFUyA9ICQobGlic3VwY19fX2xhX1NPVVJDRVMpICQobGli c3VwY19fY29udmVuaWVuY2VfbGFfU09VUkNFUykKK1NPVVJDRVMgPSAkKGxp YnN1cGNfX19sYV9TT1VSQ0VTKSAkKGxpYnN1cGNfX2NvbnZlbmllbmNlX2xh X1NPVVJDRVMpIFwKKwkkKGxpYnZ0dl9pbml0X2xhX1NPVVJDRVMpICQobGli dnR2X3N0dWJzX2xhX1NPVVJDRVMpCiBIRUFERVJTID0gJChiaXRzX0hFQURF UlMpICQoc3RkX0hFQURFUlMpCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0 YWdzCkBAIC0zNDcsNyArMzU3LDcgQEAgQU1fQ1BQRkxBR1MgPSAkKEdMSUJD WFhfSU5DTFVERVMpCiAjIE5lZWQgdGhpcyBsaWJyYXJ5IHRvIGJvdGggYmUg cGFydCBvZiBsaWJzdGRjKysuYSwgYW5kIGluc3RhbGxlZAogIyBzZXBhcmF0 ZWx5IHRvby4KICMgMSkgc2VwYXJhdGUgbGlic3VwYysrLmxhCi10b29sZXhl Y2xpYl9MVExJQlJBUklFUyA9IGxpYnN1cGMrKy5sYQordG9vbGV4ZWNsaWJf TFRMSUJSQVJJRVMgPSBsaWJzdXBjKysubGEgbGlidnR2X2luaXQubGEgbGli dnR2X3N0dWJzLmxhCiAjIDIpIGludGVncmF0ZWQgbGlic3VwYysrY29udmVu aWVuY2UubGEgdGhhdCBpcyB0byBiZSBhIHBhcnQgb2YgbGlic3RkYysrLmEK IG5vaW5zdF9MVExJQlJBUklFUyA9IGxpYnN1cGMrK2NvbnZlbmllbmNlLmxh CiBzdGRfSEVBREVSUyA9IFwKQEAgLTQxMCwxMCArNDIwLDIxIEBAIHNvdXJj ZXMgPSBcCiAJdGluZm8yLmNjIFwKIAl2ZWMuY2MgXAogCXZtaV9jbGFzc190 eXBlX2luZm8uY2MgXAotCXZ0ZXJtaW5hdGUuY2MKKwl2dGVybWluYXRlLmNj IFwKKwl2dHZfcnRzLmNjIFwKKwl2dHZfbWFsbG9jLmNjIFwKKwl2dHZfdXRp bHMuY2MKKwordnR2X2luaXRfc291cmNlcyA9IFwKKwl2dHZfaW5pdC5jYwor Cit2dHZfc3R1YnNfc291cmNlcyA9IFwKKwl2dHZfc3R1YnMuY2MgCiAKIGxp YnN1cGNfX19sYV9TT1VSQ0VTID0gJChzb3VyY2VzKSAkKGNfc291cmNlcykK IGxpYnN1cGNfX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMgPSAkKHNvdXJjZXMp ICQoY19zb3VyY2VzKQorbGlidnR2X2luaXRfbGFfU09VUkNFUyA9ICQodnR2 X2luaXRfc291cmNlcykKK2xpYnZ0dl9zdHVic19sYV9TT1VSQ0VTID0gJCh2 dHZfc3R1YnNfc291cmNlcykKIAogIyBBTV9DWFhGTEFHUyBuZWVkcyB0byBi ZSBpbiBlYWNoIHN1YmRpcmVjdG9yeSBzbyB0aGF0IGl0IGNhbiBiZQogIyBt b2RpZmllZCBpbiBhIHBlci1saWJyYXJ5IG9yIHBlci1zdWItbGlicmFyeSB3 YXkuICBOZWVkIHRvIG1hbnVhbGx5CkBAIC01NzUsNiArNTk2LDEwIEBAIGxp YnN1cGMrKy5sYTogJChsaWJzdXBjX19fbGFfT0JKRUNUUykgJCgKIAkkKENY WExJTkspIC1ycGF0aCAkKHRvb2xleGVjbGliZGlyKSAkKGxpYnN1cGNfX19s YV9PQkpFQ1RTKSAkKGxpYnN1cGNfX19sYV9MSUJBREQpICQoTElCUykKIGxp YnN1cGMrK2NvbnZlbmllbmNlLmxhOiAkKGxpYnN1cGNfX2NvbnZlbmllbmNl X2xhX09CSkVDVFMpICQobGlic3VwY19fY29udmVuaWVuY2VfbGFfREVQRU5E RU5DSUVTKSAKIAkkKENYWExJTkspICAkKGxpYnN1cGNfX2NvbnZlbmllbmNl X2xhX09CSkVDVFMpICQobGlic3VwY19fY29udmVuaWVuY2VfbGFfTElCQURE KSAkKExJQlMpCitsaWJ2dHZfaW5pdC5sYTogJChsaWJ2dHZfaW5pdF9sYV9P QkpFQ1RTKSAkKGxpYnZ0dl9pbml0X2xhX0RFUEVOREVOQ0lFUykgCisJJChD WFhMSU5LKSAtcnBhdGggJCh0b29sZXhlY2xpYmRpcikgJChsaWJ2dHZfaW5p dF9sYV9PQkpFQ1RTKSAkKGxpYnZ0dl9pbml0X2xhX0xJQkFERCkgJChMSUJT KQorbGlidnR2X3N0dWJzLmxhOiAkKGxpYnZ0dl9zdHVic19sYV9PQkpFQ1RT KSAkKGxpYnZ0dl9zdHVic19sYV9ERVBFTkRFTkNJRVMpIAorCSQoQ1hYTElO SykgLXJwYXRoICQodG9vbGV4ZWNsaWJkaXIpICQobGlidnR2X3N0dWJzX2xh X09CSkVDVFMpICQobGlidnR2X3N0dWJzX2xhX0xJQkFERCkgJChMSUJTKQog CiBtb3N0bHljbGVhbi1jb21waWxlOgogCS1ybSAtZiAqLiQoT0JKRVhUKQpJ bmRleDogbGlic3RkYysrLXYzL2xpYnN1cGMrKy92dHZfcnRzLmNjCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGxpYnN0ZGMrKy12My9saWJzdXBjKysv dnR2X3J0cy5jYwkocmV2aXNpb24gMCkKKysrIGxpYnN0ZGMrKy12My9saWJz dXBjKysvdnR2X3J0cy5jYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTg5 IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMworIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbgorCisgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgor CisgR0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyBhbnkgbGF0ZXIgdmVyc2lvbi4K KworIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisKKyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24g MywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKyBwZXJtaXNzaW9ucyBk ZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9u LCB2ZXJzaW9uCisgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFu ZAorIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRp b24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07Cisgc2VlIHRoZSBmaWxlcyBD T1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElm IG5vdCwgc2VlCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworLyogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHZ0YWJsZSBzZWN1 cml0eSBmZWF0dXJlIGltcGxlbWVudGF0aW9uLgorICAgVGhlIHZ0YWJsZSBz ZWN1cml0eSBmZWF0dXJlIGlzIGRlc2lnbmVkIHRvIGRldGVjdCB3aGVuIGEg dmlydHVhbAorICAgY2FsbCBpcyBhYm91dCB0byBiZSBtYWRlIHRocm91Z2gg YW4gaW52YWxpZCB2dGFibGUgcG9pbnRlcgorICAgKHBvc3NpYmx5IGR1ZSB0 byBkYXRhIGNvcnJ1cHRpb24gb3IgbWFsaWNpb3VzIGF0dGFja3MpLiBUaGUK KyAgIGNvbXBpbGVyIGZpbmRzIGV2ZXJ5IHZpcnR1YWwgY2FsbCwgYW5kIGlu c2VydHMgYSB2ZXJpZmljYXRpb24gY2FsbAorICAgYmVmb3JlIHRoZSB2aXJ0 dWFsIGNhbGwuICBUaGUgdmVyaWZpY2F0aW9uIGNhbGwgdGFrZXMgdGhlIGFj dHVhbAorICAgdnRhYmxlIHBvaW50ZXIgdmFsdWUgaW4gdGhlIG9iamVjdCB0 aHJvdWdoIHdoaWNoIHRoZSB2aXJ0dWFsIGNhbGwKKyAgIGlzIGJlaW5nIG1h ZGUsIGFuZCBjb21wYXJlcyB0aGUgdnRhYmxlIHBvaW50ZXIgYWdhaW5zdCBh IHNldCBvZiBhbGwKKyAgIHZhbGlkIHZ0YWJsZSBwb2ludGVycyB0aGF0IHRo ZSBvYmplY3QgY291bGQgY29udGFpbiAodGhpcyBzZXQgaXMKKyAgIGJhc2Vk IG9uIHRoZSBkZWNsYXJlZCB0eXBlIG9mIHRoZSBvYmplY3QpLiAgSWYgdGhl IHBvaW50ZXIgaXMgaW4KKyAgIHRoZSB2YWxpZCBzZXQsIGV4ZWN1dGlvbiBp cyBhbGxvd2VkIHRvIGNvbnRpbnVlOyBvdGhlcndpc2UgdGhlCisgICBwcm9n cmFtIGlzIGhhbHRlZC4KKworICBUaGVyZSBhcmUgc2V2ZXJhbCBwaWVjZXMg bmVlZGVkIGluIG9yZGVyIHRvIG1ha2UgdGhpcyB3b3JrOiAxLiBGb3IKKyAg ZXZlcnkgdmlydHVhbCBjbGFzcyBpbiB0aGUgcHJvZ3JhbSAoaS5lLiBhIGNs YXNzIHRoYXQgY29udGFpbnMKKyAgdmlydHVhbCBtZXRob2RzKSwgd2UgbmVl ZCB0byBidWlsZCB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSB2YWxpZAorICB2 dGFibGVzIHRoYXQgYW4gb2JqZWN0IG9mIHRoYXQgY2xhc3MgY291bGQgcG9p bnQgdG8uICBUaGlzIGluY2x1ZGVzCisgIHZ0YWJsZXMgZm9yIGFueSBjbGFz cyhlcykgdGhhdCBpbmhlcml0IGZyb20gdGhlIGNsYXNzIHVuZGVyCisgIGNv bnNpZGVyYXRpb24uICAyLiBGb3IgZXZlcnkgc3VjaCBkYXRhIHNldCB3ZSBi dWlsZCB1cCwgd2UgbmVlZCBhCisgIHdheSB0byBmaW5kIGFuZCByZWZlcmVu Y2UgdGhlIGRhdGEgc2V0LiAgVGhpcyBpcyBjb21wbGljYXRlZCBieSB0aGUK KyAgZmFjdCB0aGF0IHRoZSByZWFsIHZ0YWJsZSBhZGRyZXNzZXMgYXJlIG5v dCBrbm93biB1bnRpbCBydW50aW1lLAorICB3aGVuIHRoZSBwcm9ncmFtIGlz IGxvYWRlZCBpbnRvIG1lbW9yeSwgYnV0IHdlIG5lZWQgdG8gcmVmZXJlbmNl IHRoZQorICBzZXRzIGF0IGNvbXBpbGUgdGltZSB3aGVuIHdlIGFyZSBpbnNl cnRpbmcgdmVyaWZpY2F0aW9uIGNhbGxzIGludG8KKyAgdGhlIHByb2dyYW0u ICAzLiAgV2UgbmVlZCB0byBmaW5kIGV2ZXJ5IHZpcnR1YWwgY2FsbCBpbiB0 aGUgcHJvZ3JhbSwKKyAgYW5kIGluc2VydCB0aGUgdmVyaWZpY2F0aW9uIGNh bGwgKHdpdGggdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50cykKKyAgYmVmb3Jl IHRoZSB2aXJ0dWFsIGNhbGwuICA0LiBXZSBuZWVkIHNvbWUgcnVudGltZSBs aWJyYXJ5IHBpZWNlczoKKyAgdGhlIGNvZGUgdG8gYnVpbGQgdXAgdGhlIGRh dGEgc2V0cyBhdCBydW50aW1lOyB0aGUgY29kZSB0byBhY3R1YWxseQorICBw ZXJmb3JtIHRoZSB2ZXJpZmljYXRpb24gdXNpbmcgdGhlIGRhdGEgc2V0czsg YW5kIHNvbWUgY29kZSB0byBzZXQKKyAgcHJvdGVjdGlvbnMgb24gdGhlIGRh dGEgc2V0cywgc28gdGhleSB0aGVtc2VsdmVzIGRvIG5vdCBiZWNvbWUKKyAg aGFja2VyIHRhcmdldHMuCisKKyAgVG8gZmluZCBhbmQgcmVmZXJlbmNlIHRo ZSBzZXQgb2YgdmFsaWQgdnRhYmxlIHBvaW50ZXJzIGZvciBhbnkgZ2l2ZW4K KyAgdmlydHVhbCBjbGFzcywgd2UgY3JlYXRlIGEgc3BlY2lhbCBnbG9iYWwg dmFyaWJsZSBmb3IgZWFjaCB2aXJ0dWFsCisgIGNsYXNzLiAgV2UgcmVmZXIg dG8gdGhpcyBhcyB0aGUgInZ0YWJsZSBtYXAgdmFyaWFibGUiIGZvciB0aGF0 CisgIGNsYXNzLiAgVGhlIHZ0YWJsZSBtYXAgdmFyaWFibGUgaGFzIHRoZSB0 eXBlICJ2b2lkICoiLCBhbmQgaXMKKyAgaW5pdGlhbGl6ZWQgYnkgdGhlIGNv bXBpbGVyIHRvIE5VTEwuICBBdCBydW50aW1lIHdoZW4gdGhlIHNldCBvZgor ICB2YWxpZCB2dGFibGUgcG9pbnRlcnMgZm9yIGEgdmlydHVhbCBjbGFzcywg ZS5nLiBjbGFzcyBGb28sIGlzIGJ1aWx0LAorICB0aGUgdnRhYmxlIG1hcCB2 YXJpYWJsZSBmb3IgY2xhc3MgRm9vIGlzIG1hZGUgdG8gcG9pbnQgdG8gdGhl IHNldC4KKyAgRHVyaW5nIGNvbXBpbGUgdGltZSwgd2hlbiB0aGUgY29tcGls ZXIgaXMgaW5zZXJ0aW5nIHZlcmlmaWNhdGlvbgorICBjYWxscyBpbnRvIHRo ZSBwcm9ncmFtLCBpdCBwYXNzZXMgdGhlIHZ0YWJsZSBtYXAgdmFyaWFibGUg Zm9yIHRoZQorICBhcHByb3ByaWF0ZSBjbGFzcyB0byB0aGUgdmVyaWZpY2F0 aW9uIGNhbGwsIHNvIHRoYXQgYXQgcnVudGltZSB0aGUKKyAgdmVyaWZpY2F0 aW9uIGNhbGwgY2FuIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGRhdGEgc2V0Lgor CisgIFRoZSBhY3R1YWwgc2V0IG9mIHZhbGlkIHZ0YWJsZSBwb2ludGVycyBm b3IgYSBwb2x5bW9ycGhpYyBjbGFzcywKKyAgZS5nLiBjbGFzcyBGb28sIGNh bm5vdCBiZSBidWlsdCB1bnRpbCBydW50aW1lLCB3aGVuIHRoZSB2dGFibGVz IGdldAorICBsb2FkZWQgaW50byBtZW1vcnkgYW5kIHRoZWlyIGFkZHJlc3Nl cyBhcmUga25vd24uICBCdXQgdGhlIGtub3dsZWRnZQorICBhYm91dCB3aGlj aCB2dGFibGVzIGJlbG9uZyBpbiB3aGljaCBjbGFzcycgaGllcmFyY2h5IGlz IG9ubHkga25vd24KKyAgYXQgY29tcGlsZSB0aW1lLiAgVGhlcmVmb3JlIGF0 IGNvbXBpbGUgdGltZSB3ZSBjb2xsZWN0IGNsYXNzCisgIGhpZXJhcmNoeSBh bmQgdnRhYmxlIGluZm9ybWF0aW9uIGFib3V0IGV2ZXJ5IHZpcnR1YWwgY2xh c3MsIGFuZCB3ZQorICBnZW5lcmF0ZSBjYWxscyB0byBidWlsZCB1cCB0aGUg ZGF0YSBzZXRzIGF0IHJ1bnRpbWUuICBUbyBidWlsZCB0aGUKKyAgZGF0YSBz ZXRzLCB3ZSBjYWxsIG9uZSBvZiB0aGUgZnVuY3Rpb25zIHdlIGFkZCB0byB0 aGUgcnVudGltZQorICBsaWJyYXJ5LCBfX1ZMVFJlZ2lzdGVyUGFpci4gIF9f VkxUUmVnaXN0ZXJQYWlyIHRha2VzIHR3byBhcmd1bWVudHMsCisgIGEgdnRh YmxlIG1hcCB2YXJpYWJsZSBhbmQgdGhlIGFkZHJlc3Mgb2YgYSB2dGFibGUu ICBJZiB0aGUgdnRhYmxlCisgIG1hcCB2YXJpYWJsZSBpcyBjdXJyZW50bHkg TlVMTCwgaXQgY3JlYXRlcyBhIG5ldyBkYXRhIHNldCAoaGFzaAorICB0YWJs ZSksIG1ha2VzIHRoZSB2dGFibGUgbWFwIHZhcmlhYmxlIHBvaW50IHRvIHRo ZSBuZXcgZGF0YSBzZXQsIGFuZAorICBpbnNlcnRzIHRoZSB2dGFibGUgYWRk cmVzcyBpbnRvIHRoZSBkYXRhIHNldC4gIElmIHRoZSB2dGFibGUgbWFwCisg IHZhcmlhYmxlIGlzIG5vdCBOVUxMLCBpdCBqdXN0IGluc2VydHMgdGhlIHZ0 YWJsZSBhZGRyZXNzIGludG8gdGhlCisgIGRhdGEgc2V0LiAgSW4gb3JkZXIg dG8gbWFrZSBzdXJlIHRoYXQgb3VyIGRhdGEgc2V0cyBhcmUgYnVpbHQgYmVm b3JlCisgIGFueSB2ZXJpZmljYXRpb24gY2FsbHMgaGFwcGVuLCB3ZSBjcmVh dGUgYSBzcGVjaWFsIGNvbnN0cnVjdG9yCisgIGluaXRpYWxpemF0aW9uIGZ1 bmN0aW9uIGZvciBlYWNoIGNvbXBpbGF0aW9uIHVuaXQsIGdpdmUgaXQgYSB2 ZXJ5CisgIGhpZ2ggaW5pdGlhbGl6YXRpb24gcHJpb3JpdHksIGFuZCBpbnNl cnQgYWxsIG9mIG91ciBjYWxscyB0bworICBfX1ZMVFJlZ2lzdGVyUGFpciBp bnRvIG91ciBzcGVjaWFsIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uCisg IGZ1bmN0aW9uLiAgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBt YWluIGV4dGVybmFsbHkgdmlzaWJsZSBydW50aW1lIGxpYnJhcnkKKyAgIGZ1 bmN0aW9ucyBmb3IgdnRhYmxlIHZlcmlmaWNhdGlvbjogX19WTFRDaGFuZ2VQ ZXJtaXNzaW9uLAorICAgX19WTFRSZWdpc3RlclBhaXIsIGFuZCBfX1ZMVFZl cmlmeVZ0YWJsZVBvaW50ZXIuICBJdCBhbHNvIGNvbnRhaW5zCisgICBkZWJ1 ZyB2ZXJzaW9ucyBfX1ZMVFJlZ2lzdGVyUGFpckRlYnVnIGFuZAorICAgX19W TFRWZXJpZnlWdGFibGVQb2ludGVyRGVidWcsIHdoaWNoIGhhdmUgZXh0cmEg cGFyYW1ldGVycyBpbiBvcmRlcgorICAgdG8gbWFrZSBpdCBlYXNpZXIgdG8g ZGVidWcgdmVyaWZpY2F0aW9uIGZhaWx1cmVzLgorCisgICBUaGlzIGZpbGUg YWxzbyBjb250YWlucyB0aGUgZmFpbHVyZSBmdW5jdGlvbnMgdGhhdCBnZXQg Y2FsbGVkIHdoZW4KKyAgIGEgdnRhYmxlIHBvaW50ZXIgaXMgbm90IGZvdW5k IGluIHRoZSBkYXRhIHNldC4gIFR3byBwYXJ0aWN1bGFybHkKKyAgIGltcG9y dGFudCBmdW5jdGlvbnMgYXJlIF9fdnR2X3ZlcmlmeV9mYWlsIGFuZCBfX3Z0 dl9yZWFsbHlfZmFpbC4KKyAgIFRoZXkgYXJlIGJvdGggZXh0ZXJuYWxseSB2 aXNpYmxlLiAgX192dHZfdmVyaWZ5X2ZhaWwgaXMgZGVmaW5lZCBpbgorICAg c3VjaCBhIHdheSB0aGF0IGl0IGNhbiBiZSByZXBsYWNlZCBieSBhIHByb2dy YW1tZXIsIGlmIGRlc2lyZWQuICBJdAorICAgaXMgdGhlIGZ1bmN0aW9uIHRo YXQgX19WTFRWZXJpZnlWdGFibGVQb2ludGVyIGNhbGxzIGlmIGl0IGNhbid0 CisgICBmaW5kIHRoZSBwb2ludGVyIGluIHRoZSBkYXRhIHNldC4gIEFsbG93 aW5nIHRoZSBwcm9ncmFtbWVyIHRvCisgICBvdmVyd3JpdGUgdGhpcyBmdW5j dGlvbiBtZWFucyB0aGF0IGhlL3NoZSBjYW4gZG8gc29tZSBhbHRlcm5hdGUK KyAgIHZlcmlmaWNhdGlvbiwgaW5jbHVkaW5nIE5PVCBmYWlsaW5nIGluIGNl cnRhaW4gc3BlY2lmaWMgY2FzZXMsIGlmCisgICBkZXNpcmVkLiAgVGhpcyBt YXkgYmUgdGhlIGNhc2UgaWYgdGhlIHByb2dyYW1tZXIgaGFzIHRvIGRlYWwg d3RpaAorICAgdW52ZXJpZmllZCB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSwgZm9y IGV4YW1wbGUuICBfX3Z0dl9yZWFsbHlfZmFpbCBpcworICAgYXZhaWxhYmxl IGZvciB0aGUgcHJvZ3JhbW1lciB0byBjYWxsIGZyb20gaGlzIHZlcnNpb24g b2YKKyAgIF9fdnR2X3ZlcmlmeV9mYWlsLCBpZiBoZSBkZWNpZGVzIHRoZSBm YWlsdXJlIGlzIHJlYWwuCisKKyAgIFRoZSBmaW5hbCBwaWVjZSBvZiBmdW5j dGlvbmFsaXR5IGltcGxlbWVudGVkIGluIHRoaXMgZmlsZSBpcyBzeW1ib2wK KyAgIHJlc29sdXRpb24gZm9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUg c2FtZSB2dGFibGUgbWFwIHZhcmlhYmxlLgorICAgSWYgdGhlIHNhbWUgdmly dHVhbCBjbGFzcyBpcyB1c2VkIGluIHR3byBkaWZmZXJlbnQgY29tcGlsYXRp b24KKyAgIHVuaXRzLCB0aGVuIGVhY2ggY29tcGlsYXRpb24gdW5pdCB3aWxs IGNyZWF0ZSBhIHZ0YWJsZSBtYXAgdmFyaWFibGUKKyAgIGZvciB0aGUgY2xh c3MuICBXZSBuZWVkIGFsbCBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgdnRhYmxl IG1hcAorICAgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIHNhbWUgKHNpbmds ZSkgc2V0IG9mIHZhbGlkIHZ0YWJsZQorICAgcG9pbnRlcnMgZm9yIHRoZSBj bGFzcywgc28gd2Ugd3JvdGUgb3VyIG93biBoYXNodGFibGUtYmFzZWQgc3lt Ym9sCisgICByZXNvbHV0aW9uIGZvciB2dGFibGUgbWFwIHZhcmlhYmxlcyAo d2l0aCBhIHRpbnkgb3B0aW1pemF0aW9uIGluCisgICB0aGUgY2FzZSB3aGVy ZSB0aGVyZSBpcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgdmFyaWFibGUp LgorCisgICBUaGVyZSBhcmUgdHdvIG90aGVyIGltcG9ydGFudCBwaWVjZXMg dG8gdGhlIHJ1bnRpbWUgZm9yIHZ0YWJsZQorICAgdmVyaWZpY2F0aW9uIGJl c2lkZXMgdGhlIG1haW4gcGllY2VzIHRoYXQgZ28gaW50byBsaWJzdGRjKysu c286IHR3bworICAgc3BlY2lhbCB0aW55IHNoYXJlZCBsaWJyYXJpZXMsIGxp YnZ0dl9pbml0LnNvIGFuZCBsaWJ2dHZfc3R1YnMuc28uCisgICBsaWJ2dHZf aW5pdC5zbyBpcyBidWlsdCBmcm9tIHZ0dl9pbml0LmNjLiAgSXQgaXMgZGVz aWduZWQgdG8gaGVscAorICAgbWluaW1pemUgdGhlIGNhbGxzIG1hZGUgdG8g bXByb3RlY3QgKHNlZSB0aGUgY29tbWVudHMgaW4KKyAgIHZ0dl9pbml0LmNj IGZvciBtb3JlIGRldGFpbHMpLiAgQW55dGhpbmcgY29tcGlsZWQgd2l0aAor ICAgIi1mdnRhYmxlLXZlcmlmeT1zdGQiIG11c3QgYmUgbGlua2VkIHdpdGgg bGlidnR2X2luaXQuc28gKHRoZSBnY2MKKyAgIGRyaXZlciBoYXMgYmVlbiBt b2RpZmllZCB0byBkbyB0aGlzKS4gIHZ0dl9zdHVicy5zbyBpcyBidWlsdCBm cm9tCisgICB2dHZfc3R1YnMuY2MuICBJdCByZXBsYWNlcyB0aGUgbWFpbiBy dW50aW1lIGZ1bmN0aW9ucworICAgKF9fVkxUQ2hhbmdlUGVybWlzc2lubywg X19WTFRSZWdpc3RlclBhaXIgYW5kCisgICBfX1ZMVFZlcmlmeVZ0YWJsZVBv aW50ZXIpIHdpdGggc3R1YiBmdW5jdGlvbnMgdGhhdCBkbyBub3RoaW5nLiAg SWYKKyAgIGEgcHJvZ3JhbW1lciBoYXMgYSBsaWJyYXJ5IHRoYXQgd2FzIGJ1 aWx0IHdpdGggdmVyaWZpY2F0aW9uLCBidXQKKyAgIHdpc2hlcyB0byBub3Qg aGF2ZSB2ZXJpZmljYXRpb24gdHVybmVkIG9uLCB0aGUgcHJvZ3JhbW1lciBj YW4gbGluaworICAgaW4gdGhlIHZ0dl9zdHVicy5zbyBsaWJyYXJ5LiAgKi8K KworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj aW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXhlY2luZm8uaD4KKwor I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cisj aW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW5rLmg+CisjaW5jbHVk ZSA8ZmNudGwuaD4KKworLyogRm9yIGd0aHJlYWRzIHN1cHBwb3J0ICovCisj aW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNsdWRlIDxleHQvY29u Y3VycmVuY2UuaD4KKworI2luY2x1ZGUgInZ0dl91dGlscy5oIgorI2luY2x1 ZGUgInZ0dl9tYWxsb2MuaCIKKyNpbmNsdWRlICJ2dHZfc2V0LmgiCisjaW5j bHVkZSAidnR2X21hcC5oIgorI2luY2x1ZGUgInZ0dl9ydHMuaCIKKyNpbmNs dWRlICJ2dHZfZmFpbC5oIgorCitib29sIHZ0dl9kZWJ1ZyA9IGZhbHNlOwor CisvKiBUaGlzIGlzIHVzZWQgdG8gZGlzYWJsZSBhYm9ydHMgZm9yIGRlYnVn Z2luZyBwdXJwb3Nlcy4gICovCitib29sIHZ0dl9ub19hYm9ydCA9IGZhbHNl OworCitleHRlcm4gIkMiIHsKKworICAvKiBfX2ZvcnRpZnlfZmFpbCBpcyBh IGZ1bmN0aW9uIGluIGdsaWJjIHRoYXQgY2FsbHMgX19saWJjX21lc3NhZ2Us CisgICAgIGNhdXNpbmcgaXQgdG8gcHJpbnQgb3V0IGEgcHJvZ3JhbSB0ZXJt aW5hdGlvbiBlcnJvciBtZXNzYWdlCisgICAgIChpbmNsdWRpbmcgdGhlIG5h bWUgb2YgdGhlIGJpbmFyeSBiZWluZyB0ZXJtaW5hdGVkKSwgYSBzdGFjawor ICAgICB0cmFjZSB3aGVyZSB0aGUgZXJyb3Igb2NjdXJyZWQsIGFuZCBhIG1l bW9yeSBtYXAgZHVtcC4gIElkZWFsbHkKKyAgICAgd2Ugd291bGQgaGF2ZSBj YWxsZWQgX19saWJjX21lc3NhZ2UgZGlyZWN0bHksIGJ1dCB0aGF0IGZ1bmN0 aW9uCisgICAgIGRvZXMgbm90IGFwcGVhciB0byBiZSBhY2Nlc3NpYmxlIHRv IGZ1bmN0aW9ucyBvdXRzaWRlIGdsaWJjLAorICAgICB3aGVyZWFzIF9fZm9y dGlmeV9mYWlsIGlzLiAgV2UgY2FsbCBfX2ZvcnRpZnlfZmFpbCBmcm9tCisg ICAgIF9fdnR2X3JlYWxseV9mYWlsLiAgV2UgbG9va2VkIGF0IGNhbGxpbmcg X19saWJjX2ZhdGFsLCB3aGljaCBpcworICAgICBleHRlcm5hbGx5IGFjY2Vz c2libGUsIGJ1dCBpdCBkb2VzIG5vdCBkbyB0aGUgYmFjayB0cmFjZSBhbmQK KyAgICAgbWVtb3J5IGR1bXAuICAqLworCisgIGV4dGVybiB2b2lkIF9fZm9y dGlmeV9mYWlsIChjb25zdCBjaGFyICopIF9fYXR0cmlidXRlX18oKG5vcmV0 dXJuKSk7CisKK30gLyogZXh0ZXJuICJDIiAqLworCisKKy8qIEJlIGNhcmVm dWwgYWJvdXQgaW5pdGlhbGl6YXRpb24gb2Ygc3RhdGljcyBpbiB0aGlzIGZp bGUuICBTb21lIG9mCisgICB0aGUgcm91dGluZXMgYmVsb3cgYXJlIGNhbGxl ZCBiZWZvcmUgYW55IHJ1bnRpbWUgaW5pdGlhbGl6YXRpb24gZm9yCisgICBz dGF0aWNzIGluIHRoaXMgZmlsZSB3aWxsIGJlIGRvbmUuIEZvciBleGFtcGxl LCBkb250IHRyeSB0bworICAgaW5pdGlhbGl6ZSBhbnkgb2YgdGhlc2Ugc3Rh dGljcyB3aXRoIGEgcnVudGltZSBjYWxsIChmb3IgZXg6CisgICBzeXNjb25m KS4gVGhlIGluaXRpYWxpemF0aW9uIHdpbGwgaGFwcGVuIGFmdGVyIGNhbGxz IHRvIHRoZSByb3V0aW5lcworICAgdG8gcHJvdGVjdC91bnByb3RlYyB0aGUg dnRhYmxhX21hcCB2YXJpYWJsZXMgKi8KKworLyogTm8gbmVlZCB0byBtYXJr IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHdpdGggVlRWX1BST1RFQ1RFRF9W QVIuCisgICBUaGVzZSBhcmUgZWl0aGVyIGNvbnN0IG9yIGFyZSBvbmx5IHVz ZWQgZm9yIGRlYnVnZ2luZy90cmFjaW5nLgorICAgZGVidWdnaW5nL3RyYWNp bmcgd2lsbCBub3QgYmUgT04gb24gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMg Ki8KKworc3RhdGljIGNvbnN0IGJvb2wgZGVidWdfaGFzaCA9IEhBU0hUQUJM RV9TVEFUUzsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdfZnVuY3Rpb25zID0g MDsKK3N0YXRpYyBjb25zdCBpbnQgZGVidWdfaW5pdCA9IDA7CitzdGF0aWMg Y29uc3QgaW50IGRlYnVnX3ZlcmlmeV92dGFibGUgPSAwOworCisKKy8qIEds b2JhbCBmaWxlIGRlc2NyaXB0b3IgdmFyaWFibGVzIGZvciBsb2dnaW5nLCB0 cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuICAqLworCitzdGF0aWMgaW50IGluaXRf bG9nX2ZkID0gLTE7CitzdGF0aWMgaW50IHZlcmlmeV92dGFibGVfbG9nX2Zk ID0gLTE7CitzdGF0aWMgaW50IHZ0dl9mYWlsdXJlc19sb2dfZmQgPSAtMTsK K3N0YXRpYyBpbnQgc2V0X2xvZ19mZCA9IC0xOworCisvKiBUaGlzIGhvbGRz IGEgZm9ybWF0dGVkIGVycm9yIGxvZ2dpbmcgbWVzc2FnZSwgdG8gYmUgd3Jp dHRlbiB0byB0aGUKKyAgIHZ0YWJsZSB2ZXJpZnkgZmFpbHVyZXMgbG9nLiAg Ki8KK3N0YXRpYyBjaGFyIGRlYnVnX2xvZ19tZXNzYWdlWzEwMjRdOworCisK KyNpZmRlZiBfX0dUSFJFQURfTVVURVhfSU5JVAorc3RhdGljIF9fZ3RocmVh ZF9tdXRleF90IGNoYW5nZV9wZXJtaXNzaW9uc19sb2NrID0gX19HVEhSRUFE X01VVEVYX0lOSVQ7CisjZWxzZQorc3RhdGljIF9fZ3RocmVhZF9tdXRleF90 IGNoYW5nZV9wZXJtaXNzaW9uc19sb2NrOworI2VuZGlmCisKKworLyogVHlw ZXMgbmVlZGVkIGJ5IGluc2VydF9vbmx5X2hhc2hfc2V0cy4gICovCit0eXBl ZGVmIHVpbnRwdHJfdCBpbnRfdnB0cjsKKworLyogVGhlIHNldCBvZiB2YWxp ZCB2dGFibGUgcG9pbnRlcnMgZm9yIGVhY2ggdmlydHVhbCBjbGFzcyBpcyBz dG9yZWQKKyAgIGluIGEgaGFzaCB0YWJsZS4gIFRoaXMgaXMgdGhlIGhhc2hp bmcgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGhhc2gKKyAgIHRhYmxlLiAgRm9y IG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo ZSBoYXNoCisgICB0YWJsZSwgc2VlIHRoZSBjbGFzcyBpbnNlcnRfb25seV9o YXNoX3NldHMgaW4gdnR2X3NldC5oLiAgKi8KKworc3RydWN0IHZwdHJfaGFz aAorICB7CisgICAgLyogSGFzaCBmdW5jdGlvbiwgdXNlZCB0byBjb252ZXJ0 IHZ0YWJsZSBwb2ludGVyLCBWLCAoYSBtZW1vcnkKKyAgICAgICBhZGRyZXNz KSBpbnRvIGFuIGluZGV4IGludG8gdGhlIGhhc2ggdGFibGUuICAqLworICAg IHNpemVfdAorICAgIG9wZXJhdG9yKCkgKGludF92cHRyIHYpIGNvbnN0Cisg ICAgICB7CisJY29uc3QgdWludDMyX3QgeCA9IDB4N2EzNWU0ZDk7CisJY29u c3QgaW50IHNoaWZ0ID0gKHNpemVvZiAodikgPT0gOCkgPyAyMyA6IDIxOwor CXYgPSB4ICogdjsKKwlyZXR1cm4gdiBeICh2ID4+IHNoaWZ0KTsKKyAgICAg IH0KKyAgfTsKKworLyogVGhpcyBpcyB0aGUgbWVtb3J5IGFsbG9jYXRvciB1 c2VkIHRvIGNyZWF0ZSB0aGUgaGFzaCB0YWJsZSBkYXRhCisgICBzZXRzIG9m IHZhbGlkIHZ0YWJsZSBwb2ludGVycy4gIFdlIHVzZSBWVFZfbWFsbG9jIGlu IG9yZGVyIHRvIGtlZXAKKyAgIHRyYWNrIG9mIHdoaWNoIHBhZ2VzIGhhdmUg YmVlbiBhbGxvY2F0ZWQsIHNvIHdlIGNhbiB1cGRhdGUgdGhlCisgICBwcm90 ZWN0aW9ucyBvbiB0aG9zZSBwYWdlcyBhcHByb3ByaWF0ZWx5LiAgU2VlIHRo ZSBjbGFzcworICAgaW5zZXJ0X29ubHlfaGFzaF9zZXRzIGluIHZ0dl9zZXQu aCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICovCisKK3N0cnVjdCB2cHRyX3Nl dF9hbGxvYworICB7CisgICAgLyogTWVtb3J5IGFsbG9jYXRvciBvcGVyYXRv ci4gIE4gaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBiZQorICAgICAgIGFs bG9jYXRlZC4gICovCisgICAgdm9pZCAqCisgICAgb3BlcmF0b3IoKSAoc2l6 ZV90IG4pIGNvbnN0CisgICAgICB7CisJcmV0dXJuIFZUVl9tYWxsb2MgKG4p OworICAgICAgfQorICB9OworCisvKiBJbnN0YW50aWF0ZSB0aGUgdGVtcGxh dGUgY2xhc3NlcyAoaW4gdnR2X3NldC5oKSBmb3Igb3VyIHBhcnRpY3VsYXIK KyAgIGhhc2ggdGFibGUgbmVlZHMuICAqLwordHlwZWRlZiBpbnNlcnRfb25s eV9oYXNoX3NldHM8aW50X3ZwdHIsIHZwdHJfaGFzaCwgdnB0cl9zZXRfYWxs b2M+IHZ0dl9zZXRzOwordHlwZWRlZiB2dHZfc2V0czo6aW5zZXJ0X29ubHlf aGFzaF9zZXQgdnR2X3NldDsKK3R5cGVkZWYgdnR2X3NldCAqIHZ0dl9zZXRf aGFuZGxlOwordHlwZWRlZiB2dHZfc2V0X2hhbmRsZSAqIHZ0dl9zZXRfaGFu ZGxlX2hhbmRsZTsgCisKKy8qIERhdGEgc3RydWN0dXJlIHBhc3NlZCB0byBv dXIgZGxfaXRlcmF0ZV9waGRyIGNhbGxiYWNrIGZ1bmN0aW9uLAorICAgaW5k aWNhdGluZyB3aGV0aGVyIG1wcm90ZWN0IHNob3VsZCBtYWtlIHRoZSBwYWdl cyByZWFkb25seSBvcgorICAgcmVhZC93cml0ZSwgYW5kIHdoYXQgcGFnZSBz aXplIHRvIHVzZS4gICovCisKK3N0cnVjdCBtcHJvdGVjdF9kYXRhCisgIHsK KyAgICBpbnQgcHJvdF9tb2RlOworICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9z aXplOworICB9OworCisvKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQg Q09VTlQgYnl0ZXMgb3V0IG9mIHRoZSBmaWxlIHJlZmVycmVkIHRvCisgICBi eSBGRCBpbnRvIHRoZSBidWZmZXIgQlVGLiAgSXQgcmV0dXJucyB0aGUgYWN0 dWFsIG51bWJlciBvZiBieXRlcworICAgaXQgc3VjY2VlZGVkIGluIHJlYWRp bmcuICAqLworCitzdGF0aWMgc2l6ZV90CitSZWFkUGVyc2lzdGVudCAoaW50 IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKyAgY2hhciAqYnVm MCA9IChjaGFyICopIGJ1ZjsKKyAgc2l6ZV90IG51bV9ieXRlcyA9IDA7Cisg IHdoaWxlIChudW1fYnl0ZXMgPCBjb3VudCkKKyAgICB7CisgICAgICBpbnQg bGVuOworICAgICAgbGVuID0gcmVhZCAoZmQsIGJ1ZjAgKyBudW1fYnl0ZXMs IGNvdW50IC0gbnVtX2J5dGVzKTsKKyAgICAgIGlmIChsZW4gPCAwKQorCXJl dHVybiAtMTsKKyAgICAgIGlmIChsZW4gPT0gMCkKKwlicmVhazsKKyAgICAg IG51bV9ieXRlcyArPSBsZW47CisgICAgfQorCisgIHJldHVybiBudW1fYnl0 ZXM7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gcmVhZCBDT1VO VCBieXRlcywgc3RhcnRpbmcgYXQgT0ZGU0VUIGZyb20KKyAgIHRoZSBmaWxl IHJlZmVycmVkIHRvIGJ5IEZELCBhbmQgcHV0IHRoZW0gaW50byBCVUYuICBJ dCBjYWxscworICAgUmVhZFBlcnNpc3RlbnQgdG8gaGVscCBpdCBkbyBzby4g IEl0IHJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2YKKyAgIGJ5dGVzIHJl YWQsIG9yIC0xIGlmIGl0IGZhaWxzIGFsdG9nZXRoZXIuICAqLworCitzdGF0 aWMgc2l6ZV90CitSZWFkRnJvbU9mZnNldCAoaW50IGZkLCB2b2lkICpidWYs IGNvbnN0IHNpemVfdCBjb3VudCwgY29uc3Qgb2ZmX3Qgb2Zmc2V0KQorewor ICBvZmZfdCBvZmYgPSBsc2VlayAoZmQsIG9mZnNldCwgU0VFS19TRVQpOwor ICBpZiAob2ZmICE9IChvZmZfdCkgLTEpCisgICAgcmV0dXJuIFJlYWRQZXJz aXN0ZW50IChmZCwgYnVmLCBjb3VudCk7CisgIHJldHVybiAtMTsKK30KKwor LyogVGhlIGZ1bmN0aW9uIHRha2VzIGEgTUVTU0FHRSBhbmQgYXR0ZW1wdHMg dG8gd3JpdGUgaXQgdG8gdGhlIHZ0YWJsZQorICAgbWVtb3J5IHByb3RlY3Rp b24gbG9nIChmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS4gIElmIHRoZSBmaWxl IGlzIG5vdAorICAgb3BlbiwgaXQgYXR0ZW1wdHMgdG8gb3BlbiB0aGUgZmls ZSBmaXJzdC4gIFNvbWV0aW1lcyBtdWx0aXBsZQorICAgcHJvY2Vzc2VzIG1h eSBiZSBhdHRlbXB0aW5nIHRvIHdyaXRlIHRvIHRoZSBsb2cgZmlsZSBhdCB0 aGUgc2FtZQorICAgdGltZSwgc28gd2UgbWF5IGF0dGVtcHQgdG8gb3BlbiBt dWx0aXBsZSBsb2cgZmlsZXMgKHdpdGggdmVyc2lvbmVkCisgICBuYW1lcykg aWYgdGhlIGZpcnN0IG9wZW4gZmFpbHMuICAqLworCitzdGF0aWMgdm9pZAor bG9nX21lbW9yeV9wcm90ZWN0aW9uX2RhdGEgKGNoYXIgKm1lc3NhZ2UpCit7 CisgIHN0YXRpYyBpbnQgbG9nX2ZkID0gLTE7CisKKyAgY2hhciBidWZmZXJb NTBdOworICBpbnQgaSA9IDA7CisKKyAgLyogQXR0ZW1wdCB0byBvcGVuIHVw IHRvIDI1IGxvZyBmaWxlcy4qLworICB3aGlsZSAobG9nX2ZkID09IC0xICYm IGkgPCAyNSkKKyAgICB7CisgICAgICBzbnByaW50ZiAoYnVmZmVyLCBzaXpl b2YgKGJ1ZmZlciksICJ2dHZfbWVtb3J5X3Byb3RlY3Rpb25fZGF0YV8lZC5s b2ciLAorCQlpKTsKKyAgCisgICAgICBpZiAobG9nX2ZkID09IC0xKQorCWxv Z19mZCA9IHZ0dl9vcGVuX2xvZyAoYnVmZmVyKTsKKyAgICAgICsraTsKKyAg ICB9CisKKyAgdnR2X2FkZF90b19sb2cgKGxvZ19mZCwgIiVzIiwgbWVzc2Fn ZSk7CisgIGZzeW5jIChsb2dfZmQpOworfQorCisvKiBUaGlzIGlzIHRoZSBj YWxsYmFjayBmdW5jdGlvbiB1c2VkIGJ5IGRsX2l0ZXJhdGVfcGhkciAod2hp Y2ggaXMKKyAgIGNhbGxlZCBmcm9tIFZUVl91bnByb3RlY3RfdnRhYmxlX3Zh cnMgYW5kIFZUVl9wcm90ZWN0X3Z0YWJsZV92YXJzKS4KKyAgIEl0IGF0dGVt cHRzIHRvIGZpbmQgdGhlIGJpbmFyeSBmaWxlIG9uIGRpc2sgZm9yIHRoZSBJ TkZPIHJlY29yZAorICAgdGhhdCBkbF9pdGVyYXRlX3BoZHIgcGFzc2VzIGlu OyBvcGVuIHRoZSBiaW5hcnkgZmlsZSwgYW5kIHJlYWQgaXRzCisgICBzZWN0 aW9uIGhlYWRlciBpbmZvcm1hdGlvbi4gIElmIHRoZSBmaWxlIGNvbnRhaW5z IGEKKyAgICIudnRhYmxlX21hcF92YXJzIiBzZWN0aW9uLCByZWFkIHRoZSBz ZWN0aW9uIG9mZnNldCBhbmQgc2l6ZS4gIFVzZQorICAgdGhlIHNlY3Rpb24g b2Zmc2V0IGFuZCBzaXplLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBkYXRh IGluIElORk8KKyAgIHRvIGxvY2F0ZSB0aGUgcGFnZXMgaW4gbWVtb3J5IHdo ZXJlIHRoZSBzZWN0aW9uIGlzLiAgQ2FsbAorICAgJ21wcm90ZWN0JyBvbiB0 aG9zZSBwYWdlcywgc2V0dGluZyB0aGUgcHJvdGVjdGlvbiBlaXRoZXIgdG8K KyAgIHJlYWQtb25seSBvciByZWFkLXdyaXRlLCBkZXBlbmRpbmcgb24gd2hh dCdzIGluIERBVEEuICAqLworCitzdGF0aWMgaW50CitkbF9pdGVyYXRlX3Bo ZHJfY2FsbGJhY2sgKHN0cnVjdCBkbF9waGRyX2luZm8gKmluZm8sIHNpemVf dCB1bnVzZWQsIHZvaWQgKmRhdGEpCit7CisgIG1wcm90ZWN0X2RhdGEgKiBt ZGF0YSA9IChtcHJvdGVjdF9kYXRhICopIGRhdGE7CisgIG9mZl90IG1hcF9z ZWN0X29mZnNldCA9IDA7CisgIEVsZlcgKFdvcmQpIG1hcF9zZWN0X2xlbiA9 IDA7CisgIEVsZlcgKEFkZHIpIHN0YXJ0X2FkZHIgPSAwOworICBpbnQgajsK KyAgYm9vbCBmb3VuZCA9IGZhbHNlOworICBjaGFyIGJ1ZmZlclsxMDI0XTsK KyAgY2hhciBwcm9ncmFtX25hbWVbMTAyNF07CisgIGNoYXIgKmNwdHI7Cisg IGNvbnN0IEVsZlcgKFBoZHIpICpwaGRyX2luZm8gPSBpbmZvLT5kbHBpX3Bo ZHI7CisgIGNvbnN0IEVsZlcgKEVoZHIpICplaGRyX2luZm8gPQorICAgIChj b25zdCBFbGZXIChFaGRyKSAqKSAoaW5mby0+ZGxwaV9hZGRyICsgaW5mby0+ ZGxwaV9waGRyWzBdLnBfdmFkZHIKKwkJCSAgIC0gaW5mby0+ZGxwaV9waGRy WzBdLnBfb2Zmc2V0KTsKKworICAvKiBHZXQgdGhlIG5hbWUgb2YgdGhlIG1h aW4gZXhlY3V0YWJsZS4gIFRoaXMgbWF5IG9yIG1heSBub3QgaW5jbHVkZQor ICAgICBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBwcm9ncmFtLiAgRmluZCB0 aGUgZmlyc3Qgc3BhY2UsIGFzc3VtZSBpdAorICAgICBpcyB0aGUgc3RhcnQg b2YgdGhlIGFyZ3VtZW50IGxpc3QsIGFuZCBjaGFuZ2UgaXQgdG8gYSAnXDAn LiAqLworCisgIHNucHJpbnRmIChwcm9ncmFtX25hbWUsIHNpemVvZiAocHJv Z3JhbV9uYW1lKSwgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUpOworCisgIC8q IEZpbmQgdGhlIGZpcnN0IG5vbi1lc2NhcGVkIHNwYWNlIGluIHRoZSBwcm9n cmFtIG5hbWUgYW5kIG1ha2UgaXQKKyAgICAgdGhlIGVuZCBvZiB0aGUgc3Ry aW5nLiAgKi8KKyAgY3B0ciA9IHN0cmNociAocHJvZ3JhbV9uYW1lLCAnICcp OworICBpZiAoY3B0ciAhPSBOVUxMICYmIGNwdHJbLTFdICE9ICdcXCcpCisg ICAgY3B0clswXSA9ICdcMCc7CisKKyAgaWYgKChwaGRyX2luZm8tPnBfdHlw ZSA9PSBQVF9QSERSIHx8IHBoZHJfaW5mby0+cF90eXBlID09IFBUX0xPQUQp CisgICAgICAmJiAoZWhkcl9pbmZvLT5lX3Nob2ZmICYmIGVoZHJfaW5mby0+ ZV9zaG51bSkpCisgICAgeworICAgICAgY29uc3QgY2hhciAqbWFwX3NlY3Rf bmFtZSA9ICIudnRhYmxlX21hcF92YXJzIjsKKyAgICAgIGludCBuYW1lX2xl biA9IHN0cmxlbiAobWFwX3NlY3RfbmFtZSk7CisgICAgICBpbnQgZmQgPSAt MTsKKworICAgICAgLyogQXR0ZW1wdCB0byBvcGVuIHRoZSBiaW5hcnkgZmls ZSBvbiBkaXNrLiAgKi8KKworICAgICAgaWYgKHN0cmxlbiAoaW5mby0+ZGxw aV9uYW1lKSA9PSAwKQorCXsKKwkgIGlmIChwaGRyX2luZm8tPnBfdHlwZSA9 PSBQVF9QSERSKQorCSAgICBmZCA9IG9wZW4gKHByb2dyYW1fbmFtZSwgT19S RE9OTFkpOworCX0KKyAgICAgIGVsc2UKKwlmZCA9IG9wZW4gKGluZm8tPmRs cGlfbmFtZSwgT19SRE9OTFkpOworICAgICAgCisgICAgICBpZiAoZmQgIT0g LTEpCisJeworCSAgLyogRmluZCB0aGUgc2VjdGlvbiBoZWFkZXIgaW5mb3Jt YXRpb24gaW4gdGhlIGZpbGUuICAqLworCSAgCisJICBFbGZXIChIYWxmKSBz dHJ0YWJfaWR4ID0gZWhkcl9pbmZvLT5lX3Noc3RybmR4OworCSAgRWxmVyAo U2hkcikgc2hzdHJ0YWI7CisJICBvZmZfdCBzaHN0cnRhYl9vZmZzZXQgPSBl aGRyX2luZm8tPmVfc2hvZmYgKworCSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChlaGRyX2luZm8tPmVfc2hlbnRzaXplICogc3RydGFiX2lk eCk7CisJICBzaXplX3QgYnl0ZXNfcmVhZCA9IFJlYWRGcm9tT2Zmc2V0IChm ZCwgJnNoc3RydGFiLCBzaXplb2YgKHNoc3RydGFiKSwKKwkJCQkJICAgICAg c2hzdHJ0YWJfb2Zmc2V0KTsKKwkgIGlmIChieXRlc19yZWFkID09IHNpemVv ZiAoc2hzdHJ0YWIpKQorCSAgICB7CisJICAgICAgRWxmVyAoU2hkcikgc2Vj dF9oZHI7CisJICAgICAgLyogTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VjdGlv biBoZWFkZXJzLCBsb29raW5nIGZvciBvbmUKKwkJIHdob3NlIG5hbWUgaXMg Ii52dGFibGVfbWFwX3ZhcnMiLiAgKi8KKworCSAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgZWhkcl9pbmZvLT5lX3NobnVtICYmICFmb3VuZDsgKytpKQor CQl7CisJCSAgb2ZmX3Qgb2Zmc2V0ID0gZWhkcl9pbmZvLT5lX3Nob2ZmCisJ CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZWhkcl9pbmZv LT5lX3NoZW50c2l6ZSAqIGkpOworCQkgIGJ5dGVzX3JlYWQgPSBSZWFkRnJv bU9mZnNldCAoZmQsICZzZWN0X2hkciwKKwkJCQkJICAgICAgIHNpemVvZiAo c2VjdF9oZHIpLCBvZmZzZXQpOworCQkgIGlmIChieXRlc19yZWFkID09IHNp emVvZiAoc2VjdF9oZHIpKQorCQkgICAgeworCQkgICAgICBjaGFyIGhlYWRl cl9uYW1lWzY0XTsKKwkJICAgICAgb2ZmX3QgbmFtZV9vZmZzZXQgPSBzaHN0 cnRhYi5zaF9vZmZzZXQgKworCQkJICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWN0X2hkci5zaF9uYW1lOworCQkgICAgICBieXRl c19yZWFkID0gUmVhZEZyb21PZmZzZXQgKGZkLCAmaGVhZGVyX25hbWUsIDY0 LAorCQkJCQkJICAgbmFtZV9vZmZzZXQpOworCQkgICAgICBpZiAoYnl0ZXNf cmVhZCA+IDApCisJCQlpZiAobWVtY21wIChoZWFkZXJfbmFtZSwgbWFwX3Nl Y3RfbmFtZSwgbmFtZV9sZW4pID09IDApCisJCQkgIHsKKwkJCSAgICAvKiBX ZSBmb3VuZCB0aGUgc2VjdGlvbjsgZ2V0IGl0cyBsb2FkCisJCQkgICAgICAg b2Zmc2V0IGFuZCBzaXplLiAgKi8KKwkJCSAgICBtYXBfc2VjdF9vZmZzZXQg PSBzZWN0X2hkci5zaF9hZGRyOworCQkJICAgIG1hcF9zZWN0X2xlbiA9IHNl Y3RfaGRyLnNoX3NpemUgLSBtZGF0YS0+cGFnZV9zaXplOworCQkJICAgIGZv dW5kID0gdHJ1ZTsKKwkJCSAgfQorCQkgICAgfQorCQl9CisJICAgIH0KKwkg IGNsb3NlIChmZCk7CisJfQorICAgICAgLyogQ2FsY3VsYXRlIHRoZSBzdGFy dCBhZGRyZXNzIG9mIHRoZSBzZWN0aW9uIGluIG1lbW9yeS4gICovCisgICAg ICBzdGFydF9hZGRyID0gKGNvbnN0IEVsZlcgKEFkZHIpKSBpbmZvLT5kbHBp X2FkZHIgKyBtYXBfc2VjdF9vZmZzZXQ7CisgICAgfQorICAgICAgCisKKyAg aWYgKGRlYnVnX2Z1bmN0aW9ucykKKyAgICB7CisgICAgICBzbnByaW50ZiAo YnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKwkJIiAgTG9va2luZyBhdCBsb2Fk IG1vZHVsZSAlcyB0byBjaGFuZ2UgcGVybWlzc2lvbnMgdG8gJXNcbiIsCisJ CSgoc3RybGVuIChpbmZvLT5kbHBpX25hbWUpID09IDApID8gcHJvZ3JhbV9u YW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOiBpbmZvLT5kbHBpX25hbWUpLAorCQkobWRhdGEtPnByb3Rf bW9kZSAmIFBST1RfV1JJVEUpID8gIlJFQUQvV1JJVEUiIDogIlJFQUQtT05M WSIpOworICAgICAgbG9nX21lbW9yeV9wcm90ZWN0aW9uX2RhdGEgKGJ1ZmZl cik7CisgICAgfQorCisgIC8qIFNlZSBpZiB3ZSBhY3R1YWxseSBmb3VuZCB0 aGUgc2VjdGlvbi4gICovCisgIGlmIChzdGFydF9hZGRyICYmIG1hcF9zZWN0 X2xlbikKKyAgICB7CisgICAgICBFbGZXIChBZGRyKSByZWxvY2F0ZWRfc3Rh cnRfYWRkciA9IHN0YXJ0X2FkZHI7CisgICAgICBFbGZXIChXb3JkKSBzaXpl X2luX21lbW9yeSA9IG1hcF9zZWN0X2xlbjsKKworICAgICAgaWYgKChyZWxv Y2F0ZWRfc3RhcnRfYWRkciAhPSAwKQorCSAgJiYgKHNpemVfaW5fbWVtb3J5 ICE9IDApKQorICAgICAgICB7CisJICAvKiBDYWxjdWxhdGUgdGhlIGFkZHJl c3MgJiBzaXplIHRvIHBhc3MgdG8gbXByb3RlY3QuICovCisgICAgICAgICAg RWxmVyAoQWRkcikgbXBfbG93ID0gcmVsb2NhdGVkX3N0YXJ0X2FkZHIgJiB+ KG1kYXRhLT5wYWdlX3NpemUgLSAxKTsKKyAgICAgICAgICBzaXplX3QgbXBf c2l6ZSA9IHNpemVfaW5fbWVtb3J5IC0gMTsKKworCSAgaWYgKGRlYnVnX2Z1 bmN0aW9ucykKKwkgICAgeworCSAgICAgIHNucHJpbnRmIChidWZmZXIsIHNp emVvZiAoYnVmZmVyKSwKKwkJCSIgICglcyk6IFByb3RlY3RpbmcgJXAgdG8g JXBcbiIsIAorCQkgICAgICAgKChzdHJsZW4gKGluZm8tPmRscGlfbmFtZSkg PT0gMCkgPyBwcm9ncmFtX25hbWUKKwkJCSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiBpbmZvLT5kbHBpX25hbWUpLAorCQkgICAgICAgKHZv aWQgKikgbXBfbG93LAorCQkgICAgICAgKCh2b2lkICopIG1wX2xvdyArIG1w X3NpemUpKTsKKwkgICAgICBsb2dfbWVtb3J5X3Byb3RlY3Rpb25fZGF0YSAo YnVmZmVyKTsKKwkgICAgfQorCSAgCisJICAvKiBDaGFuZ2UgdGhlIHByb3Rl Y3Rpb25zIG9uIHRoZSBwYWdlcyBmb3IgdGhlIHNlY3Rpb24uICAqLworICAg ICAgICAgIGlmIChtcHJvdGVjdCAoKHZvaWQgKikgbXBfbG93LCBtcF9zaXpl LCBtZGF0YS0+cHJvdF9tb2RlKSA9PSAtMSkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgaWYgKGRlYnVnX2Z1bmN0aW9ucykKKyAgICAgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgICBzbnByaW50ZiAoYnVmZmVyLCBz aXplb2YgKGJ1ZmZlciksCisJCQkgICAgIkZhaWxlZCBjYWxsZWQgdG8gbXBy b3RlY3QgZm9yICVzIGVycm9yOiAiLAorCQkJICAgIChtZGF0YS0+cHJvdF9t b2RlICYgUFJPVF9XUklURSkgPworCQkJICAgICJSRUFEL1dSSVRFIiA6ICJS RUFELU9OTFkiKTsKKwkJICBsb2dfbWVtb3J5X3Byb3RlY3Rpb25fZGF0YSAo YnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgIHBlcnJvcihOVUxMKTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIFZUVl9lcnJvcigpOwor ICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGRlYnVnX2Z1bmN0 aW9ucykKKwkgICAgeworCSAgICAgIHNucHJpbnRmIChidWZmZXIsIHNpemVv ZiAoYnVmZmVyKSwKKwkJCSJtcHJvdGVjdCdlZCByYW5nZSBbJXAsICVwXVxu IiwKKwkJCSh2b2lkICopIG1wX2xvdywgKGNoYXIgKikgbXBfbG93ICsgbXBf c2l6ZSk7CisJICAgICAgbG9nX21lbW9yeV9wcm90ZWN0aW9uX2RhdGEgKGJ1 ZmZlcik7CisJICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICByZXR1cm4g MDsKK30KKworLyogVW5wcm90ZWN0IGFsbCB0aGUgdnRhYmxlIG1hcCB2YXJz IGFuZCBvdGhlciBzaWRlIGRhdGEgdGhhdCBpcyB1c2VkCisgICB0byBrZWVw IHRoZSBjb3JlIGhhc2hfbWFwIGRhdGEuIEFsbCBvZiB0aGVzZSBkYXRhIGhh dmUgYmVlbiBwdXQKKyAgIGludG8gcmVscm8gc2VjdGlvbnMgKi8KKworc3Rh dGljIHZvaWQKK1ZUVl91bnByb3RlY3RfdnRhYmxlX3ZhcnMgKHZvaWQpCit7 CisgIG1wcm90ZWN0X2RhdGEgbWRhdGE7CisKKyAgbWRhdGEucHJvdF9tb2Rl ID0gUFJPVF9SRUFEIHwgUFJPVF9XUklURTsKKyAgbWRhdGEucGFnZV9zaXpl ID0gc3lzY29uZiAoX1NDX1BBR0VfU0laRSk7CisgIGRsX2l0ZXJhdGVfcGhk ciAoZGxfaXRlcmF0ZV9waGRyX2NhbGxiYWNrLCAodm9pZCAqKSAmbWRhdGEp OworfQorCisvKiBQcm90ZWN0IGFsbCB0aGUgdnRhYmxlIG1hcCB2YXJzIGFu ZCBvdGhlciBzaWRlIGRhdGEgdGhhdCBpcyB1c2VkCisgICB0byBrZWVwIHRo ZSBjb3JlIGhhc2hfbWFwIGRhdGEuIEFsbCBvZiB0aGVzZSBkYXRhIGhhdmUg YmVlbiBwdXQKKyAgIGludG8gcmVscm8gc2VjdGlvbnMgKi8KKworc3RhdGlj IHZvaWQKK1ZUVl9wcm90ZWN0X3Z0YWJsZV92YXJzICh2b2lkKQoreworICBt cHJvdGVjdF9kYXRhIG1kYXRhOworCisgIG1kYXRhLnByb3RfbW9kZSA9IFBS T1RfUkVBRDsKKyAgbWRhdGEucGFnZV9zaXplID0gc3lzY29uZiAoX1NDX1BB R0VfU0laRSk7CisgIGRsX2l0ZXJhdGVfcGhkciAoZGxfaXRlcmF0ZV9waGRy X2NhbGxiYWNrLCAodm9pZCAqKSAmbWRhdGEpOworfQorCisjaWZuZGVmIF9f R1RIUkVBRF9NVVRFWF9JTklUCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV9j aGFuZ2VfcGVybWlzc2lvbnNfbXV0ZXhlcyAoKQoreworICBfX0dUSFJFQURf TVVURVhfSU5JVF9GVU5DVElPTiAoJmNoYW5nZV9wZXJtaXNzaW9uc19sb2Nr KTsKK30KKyNlbmRpZgorCisvKiAgVmFyaWFibGVzIG5lZWRlZCBmb3IgZ2V0 dGluZyB0aGUgc3RhdGlzdGljcyBhYm91dCB0aGUgaGFzaHRhYmxlIHNldC4g ICovCisjaWYgSEFTSFRBQkxFX1NUQVRTCitfQXRvbWljU3RhdENvdW50ZXIg c3RhdF9jb250YWlucyA9IDA7CitfQXRvbWljU3RhdENvdW50ZXIgc3RhdF9p bnNlcnQgPSAwOworX0F0b21pY1N0YXRDb3VudGVyIHN0YXRfcmVzaXplID0g MDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NyZWF0ZSA9IDA7CitfQXRv bWljU3RhdENvdW50ZXIgc3RhdF9wcm9iZXNfaW5fbm9uX3RyaXZpYWxfc2V0 ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemUw ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemUx ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemUy ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemUz ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemU0 ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemU1 ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemU2 ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemU3 ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemU4 ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemU5 ID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3NpemUx MCA9IDA7CitfQXRvbWljU3RhdENvdW50ZXIgc3RhdF9jb250YWluc19zaXpl MTEgPSAwOworX0F0b21pY1N0YXRDb3VudGVyIHN0YXRfY29udGFpbnNfc2l6 ZTEyID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5zX3Np emUxM19vcl9tb3JlID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2Nv bnRhaW5zX3NpemVzID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2dy b3dfZnJvbV9zaXplMF90b18xID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBz dGF0X2dyb3dfZnJvbV9zaXplMV90b18yID0gMDsKK19BdG9taWNTdGF0Q291 bnRlciBzdGF0X2RvdWJsZV90aGVfbnVtYmVyX29mX2J1Y2tldHMgPSAwOwor X0F0b21pY1N0YXRDb3VudGVyIHN0YXRfaW5zZXJ0X2ZvdW5kX2hhc2hfY29s bGlzaW9uID0gMDsKK19BdG9taWNTdGF0Q291bnRlciBzdGF0X2NvbnRhaW5z X2luX25vbl90cml2aWFsX3NldCA9IDA7CitfQXRvbWljU3RhdENvdW50ZXIg c3RhdF9pbnNlcnRfa2V5X3RoYXRfd2FzX2FscmVhZHlfcHJlc2VudCA9IDA7 CisjZW5kaWYKKy8qIFJlY29yZCBzdGF0aXN0aWNzIGFib3V0IHRoZSBoYXNo IHRhYmxlIHNldHMsIGZvciBkZWJ1Z2dpbmcuICAqLworCitzdGF0aWMgdm9p ZAorbG9nX3NldF9zdGF0cyAodm9pZCkKK3sKKyNpZiBIQVNIVEFCTEVfU1RB VFMKKyAgICAgIGlmIChzZXRfbG9nX2ZkID09IC0xKQorCXNldF9sb2dfZmQg PSB2dHZfb3Blbl9sb2cgKCJ2dHZfc2V0X3N0YXRzLmxvZyIpOworCisgICAg ICB2dHZfYWRkX3RvX2xvZyAoc2V0X2xvZ19mZCwgIi0tLVxuJXNcbiIsCisJ CSAgICAgIGluc2VydF9vbmx5X2hhc2hfdGFibGVzX3N0YXRzKCkuY19zdHIo KSk7CisjZW5kaWYKK30KKworLyogQ2hhbmdlIHRoZSBwZXJtaXNzaW9ucyBv biBhbGwgdGhlIHBhZ2VzIHdlIGhhdmUgYWxsb2NhdGVkIGZvciB0aGUKKyAg IGRhdGEgc2V0cyBhbmQgYWxsIHRoZSAiLnZ0YWJsZV9tYXBfdmFyIiBzZWN0 aW9ucyBpbiBtZW1vcnkgKHdoaWNoCisgICBjb250YWluIG91ciB2dGFibGUg bWFwIHZhcmlhYmxlcykuICBQRVJNIGluZGljYXRlcyB3aGV0aGVyIHRvIG1h a2UKKyAgIHRoZSBwZXJtaXNzaW9ucyByZWFkLW9ubHkgb3IgcmVhZC13cml0 ZS4gICovCisKK3ZvaWQKK19fVkxUQ2hhbmdlUGVybWlzc2lvbiAoaW50IHBl cm0pCit7CisgIGlmIChkZWJ1Z19mdW5jdGlvbnMpCisgICAgeworICAgICAg aWYgKHBlcm0gPT0gX19WTFRQX1JFQURfV1JJVEUpCisJZnByaW50ZiAoc3Rk b3V0LCAiQ2hhbmdpbmcgVkxUIHBlcm1pc2lzb25zIHRvIFJlYWQtV3JpdGUu XG4iKTsKKyAgICAgIGVsc2UgaWYgKHBlcm0gPT0gX19WTFRQX1JFQURfT05M WSkKKwlmcHJpbnRmIChzdGRvdXQsICJDaGFuZ2luZyBWTFQgcGVybWlzc2lv bnMgdG8gUmVhZC1vbmx5LlxuIik7CisgICAgICBlbHNlCisJZnByaW50ZiAo c3Rkb3V0LCAiVW5yZWNvZ25pemVkIHBlcm1pc3Npb25zIHZhbHVlOiAlZFxu IiwgcGVybSk7CisgICAgfQorCisjaWZuZGVmIF9fR1RIUkVBRF9NVVRFWF9J TklUCisgIHN0YXRpYyBfX2d0aHJlYWRfb25jZV90IG11dGV4X29uY2UgVlRW X1BST1RFQ1RFRF9WQVIgPSBfX0dUSFJFQURfT05DRV9JTklUOworCisgIF9f Z3RocmVhZF9vbmNlICgmbXV0ZXhfb25jZSwgaW5pdGlhbGl6ZV9jaGFuZ2Vf cGVybWlzc2lvbnNfbXV0ZXhlcyk7CisjZW5kaWYKKworICAvKiBPcmRlcmlu ZyBvZiB0aGVzZSB1bnByb3RlY3QvcHJvdGVjdCBjYWxscyBpcyB2ZXJ5IGlt cG9ydGFudC4KKyAgICAgWW91IGZpcnN0IG5lZWQgdG8gdW5wcm90ZWN0IGFs bCB0aGUgbWFwIHZhcnMgYW5kIHNpZGUKKyAgICAgc3RydWN0dXJlcyBiZWZv cmUgeW91IGRvIGFueXRoaW5nIHdpdGggdGhlIGNvcmUgZGF0YQorICAgICBz dHJ1Y3R1cmVzIChoYXNoX21hcHMpICovCisKKyAgaWYgKHBlcm0gPT0gX19W TFRQX1JFQURfV1JJVEUpCisgICAgeworICAgICAgLyogVE9ETzogTmVlZCB0 byByZXZpc2l0IHRoaXMgY29kZSBmb3IgZGxvcGVuLiBJdCBtb3N0IHByb2Jh Ymx5CisgICAgICAgICBpcyBub3QgdW5sb2NraW5nIHRoZSBwcm90ZWN0ZWQg dnRhYmxlIHZhcnMgYWZ0ZXIgZm9yIGxvYWQKKyAgICAgICAgIG1vZHVsZSB0 aGF0IGlzIG5vdCB0aGUgZmlyc3QgbG9hZCBtb2R1bGUuICAqLworICAgICAg X19ndGhyZWFkX211dGV4X2xvY2sgKCZjaGFuZ2VfcGVybWlzc2lvbnNfbG9j ayk7CisKKyAgICAgIFZUVl91bnByb3RlY3RfdnRhYmxlX3ZhcnMgKCk7Cisg ICAgICBWVFZfbWFsbG9jX2luaXQgKCk7CisgICAgICBWVFZfbWFsbG9jX3Vu cHJvdGVjdCAoKTsKKworICAgIH0KKyAgZWxzZSBpZiAocGVybSA9PSBfX1ZM VFBfUkVBRF9PTkxZKQorICAgIHsKKyAgICAgIGlmIChkZWJ1Z19oYXNoKQor ICAgICAgICBsb2dfc2V0X3N0YXRzKCk7CisKKyAgICAgIFZUVl9tYWxsb2Nf cHJvdGVjdCAoKTsKKyAgICAgIFZUVl9wcm90ZWN0X3Z0YWJsZV92YXJzICgp OworCisgICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrICgmY2hhbmdlX3Bl cm1pc3Npb25zX2xvY2spOworICAgIH0KK30KKworLyogVGhpcyBpcyB0aGUg bWVtb3J5IGFsbG9jYXRvciB1c2VkIHRvIGNyZWF0ZSB0aGUgaGFzaCB0YWJs ZSB0aGF0CisgICBtYXBzIGZyb20gdnRhYmxlIG1hcCB2YXJpYWJsZSBuYW1l IHRvIHRoZSBkYXRhIHNldCB0aGF0IHZ0YWJsZSBtYXAKKyAgIHZhcmlhYmxl IHNob3VsZCBwb2ludCB0by4gIFRoaXMgaXMgcGFydCBvZiBvdXIgdnRhYmxl IG1hcCB2YXJpYWJsZQorICAgc3ltYm9sIHJlc29sdXRpb24sIHdoaWNoIGlz IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBzYW1lIHZ0YWJsZSBtYXAKKyAgIHZh cmlhYmxlIG1heSBiZSBjcmVhdGVkIGJ5IG11bHRpcGxlIGNvbXBpbGF0aW9u IHVuaXRzIGFuZCB3ZSBuZWVkIGEKKyAgIG1ldGhvZCB0byBtYWtlIHN1cmUg dGhhdCBhbGwgdnRhYmxlIG1hcCB2YXJpYWJsZXMgZm9yIGEgcGFydGljdWxh cgorICAgY2xhc3MgcG9pbnQgdG8gdGhlIHNhbWUgZGF0YSBzZXQgYXQgcnVu dGltZS4gICovCisKK3N0cnVjdCBpbnNlcnRfb25seV9oYXNoX21hcF9hbGxv Y2F0b3IKKyAgeworICAgIC8qIE4gaXMgdGhlIG51bWJlciBvZiBieXRlcyB0 byBhbGxvY2F0ZS4gICovCisgICAgdm9pZCAqCisgICAgYWxsb2MgKHNpemVf dCBuKSBjb25zdAorICAgIHsgIAorICAgICAgcmV0dXJuIFZUVl9tYWxsb2Mg KG4pOworICAgIH0KKworICAgIC8qIFAgcG9pbnRzIHRvIHRoZSBtZW1vcnkg dG8gYmUgZGVhbGxvY2F0ZWQ7IE4gaXMgdGhlIG51bWJlciBvZgorICAgICAg IGJ5dGVzIHRvIGRlYWxsb2NhdGUuICAqLworICAgIHZvaWQKKyAgICBkZWFs bG9jICh2b2lkICpwLCBzaXplX3QgbikgY29uc3QKKyAgICB7CisgICAgICBW VFZfZnJlZSAocCk7CisgICAgfQorICB9OworCisvKiBFeHBsaWNpdGx5IGlu c3RhbnRpYXRlIHRoaXMgY2xhc3Mgc2luY2UgdGhpcyBmaWxlIGlzIGNvbXBp bGVkIHdpdGgKKyAgIC1mbm8taW1wbGljaXQtdGVtcGxhdGVzLiAgVGhlc2Ug YXJlIGZvciB0aGUgaGFzaCB0YWJsZSB0aGF0IGlzIHVzZWQKKyAgIHRvIGRv IHZ0YWJsZSBtYXAgdmFyaWFibGUgc3ltYm9sIHJlc29sdXRpb24uICAqLwor dGVtcGxhdGUgY2xhc3MgaW5zZXJ0X29ubHlfaGFzaF9tYXAgPHZ0dl9zZXRf aGFuZGxlICosIAorCQkJCSAgICAgaW5zZXJ0X29ubHlfaGFzaF9tYXBfYWxs b2NhdG9yID47Cit0eXBlZGVmIGluc2VydF9vbmx5X2hhc2hfbWFwIDx2dHZf c2V0X2hhbmRsZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5zZXJ0X29ubHlfaGFzaF9tYXBfYWxsb2NhdG9yID4gczJzOwordHlwZWRl ZiBjb25zdCBzMnM6OmtleV90eXBlICB2dHZfc3ltYm9sX2tleTsKKworc3Rh dGljIHMycyAqIHZ0dl9zeW1ib2xfdW5pZmljYXRpb25fbWFwIFZUVl9QUk9U RUNURURfVkFSID0gTlVMTDsKKworY29uc3QgdW5zaWduZWQgbG9uZyBTRVRf SEFORExFX0hBTkRMRV9CSVQgPSAweDI7CisKKy8qIEluIHRoZSBjYXNlIHdo ZXJlIGEgdnRhYmxlIG1hcCB2YXJpYWJsZSBpcyB0aGUgb25seSBpbnN0YW5j ZSBvZiB0aGUKKyAgIHZhcmlhYmxlIHdlIGhhdmUgc2VlbiwgaXQgcG9pbnRz IGRpcmVjdGx5IHRvIHRoZSBzZXQgb2YgdmFsaWQKKyAgIHZ0YWJsZSBwb2lu dGVycy4gIEFsbCBzdWJzZXF1ZW50IGluc3RhbmNlcyBvZiB0aGUgJ3NhbWUn IHZ0YWJsZSBtYXAKKyAgIHZhcmlhYmxlIHBvaW50IHRvIHRoZSBmaXJzdCB2 dGFibGUgbWFwIHZhcmlhYmxlLiAgVGhpcyBmdW5jdGlvbiwKKyAgIGdpdmVu IGEgdnRhYmxlIG1hcCB2YXJpYWJsZSBQVFIsIGNoZWNrcyBhIGJpdCB0byBz ZWUgd2hldGhlciBpdCdzCisgICBwb2ludGluZyBkaXJlY3RseSB0byB0aGUg ZGF0YSBzZXQgb3IgdG8gdGhlIGZpcnN0IHZ0YWJsZSBtYXAKKyAgIHZhcmlh YmxlLiAgKi8KKworc3RhdGljIGlubGluZSBib29sCitpc19zZXRfaGFuZGxl X2hhbmRsZSAodm9pZCAqIHB0cikKK3sKKyAgcmV0dXJuICgodW5zaWduZWQg bG9uZykgcHRyICYgU0VUX0hBTkRMRV9IQU5ETEVfQklUKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PT0gU0VUX0hBTkRMRV9IQU5ETEVfQklUOworfQorCisvKiBSZXR1cm5zIHRo ZSBhY3R1YWwgcG9pbnRlciB2YWx1ZSBvZiBhIHZ0YWJsZSBtYXAgdmFyaWFi bGUsIFBUUiAoc2VlCisgICBjb21tZW50cyBmb3IgaXNfc2V0X2hhbmRsZV9o YW5kbGUgZm9yIG1vcmUgZGV0YWlscykuICAqLworCitzdGF0aWMgaW5saW5l IHZ0dl9zZXRfaGFuZGxlICogCitwdHJfZnJvbV9zZXRfaGFuZGxlX2hhbmRs ZSAodm9pZCAqIHB0cikKK3sKKyAgcmV0dXJuICh2dHZfc2V0X2hhbmRsZSAq KSAoKHVuc2lnbmVkIGxvbmcpIHB0ciAmIH5TRVRfSEFORExFX0hBTkRMRV9C SVQpOworfQorCisvKiBHaXZlbiBhIHZ0YWJsZSBtYXAgdmFyaWFibGUsIFBU UiwgdGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBiaXQgdGhhdAorICAgc2F5cyB0 aGlzIGlzIHRoZSBzZWNvbmQgKG9yIGxhdGVyKSBpbnN0YW5jZSBvZiBhIHZ0 YWJsZSBtYXAKKyAgIHZhcmlhYmxlLiAgKi8KKworc3RhdGljIGlubGluZSB2 dHZfc2V0X2hhbmRsZV9oYW5kbGUKK3NldF9oYW5kbGVfaGFuZGxlICh2dHZf c2V0X2hhbmRsZSAqIHB0cikKK3sKKyAgcmV0dXJuICh2dHZfc2V0X2hhbmRs ZV9oYW5kbGUpICgodW5zaWduZWQgbG9uZykgcHRyIHwgU0VUX0hBTkRMRV9I QU5ETEVfQklUKTsKK30KKworLyogT3BlbiBlcnJvciBsb2dnaW5nIGZpbGUs IGlmIG5vdCBhbHJlYWR5IG9wZW4sIGFuZCB3cml0ZSB2dGFibGUKKyAgIHZl cmlmaWNhdGlvbiBmYWlsdXJlIG1lc3NhZ2VzIChMT0dfTVNHKSB0byB0aGUg bG9nIGZpbGUuICBBbHNvCisgICBnZW5lcmF0ZSBhIGJhY2t0cmFjZSBpbiB0 aGUgbG9nIGZpbGUsIGlmIEdFTkVSQVRFX0JBQ0tUUkFDRSBpcworICAgc2V0 LiAgKi8KKworc3RhdGljIHZvaWQKK2xvZ19lcnJvcl9tZXNzYWdlIChjb25z dCBjaGFyICpsb2dfbXNnLCBib29sIGdlbmVyYXRlX2JhY2t0cmFjZSkKK3sK KyAgaWYgKHZ0dl9mYWlsdXJlc19sb2dfZmQgPT0gLTEpCisgICAgdnR2X2Zh aWx1cmVzX2xvZ19mZCA9IHZ0dl9vcGVuX2xvZyAoInZ0YWJsZV92ZXJpZmlj YXRpb25fZmFpbHVyZXMubG9nIik7CisKKyAgaWYgKHZ0dl9mYWlsdXJlc19s b2dfZmQgPT0gLTEpCisgICAgcmV0dXJuOworCisgIHZ0dl9hZGRfdG9fbG9n ICh2dHZfZmFpbHVyZXNfbG9nX2ZkLCAiJXMiLCBsb2dfbXNnKTsKKworICBp ZiAoZ2VuZXJhdGVfYmFja3RyYWNlKQorICAgIHsKKyNkZWZpbmUgU1RBQ0tf REVQVEggMjAKKyAgICAgIHZvaWQgKmNhbGxlcnNbU1RBQ0tfREVQVEhdOwor ICAgICAgaW50IGFjdHVhbF9kZXB0aCA9IGJhY2t0cmFjZSAoY2FsbGVycywg U1RBQ0tfREVQVEgpOworICAgICAgYmFja3RyYWNlX3N5bWJvbHNfZmQgKGNh bGxlcnMsIGFjdHVhbF9kZXB0aCwgdnR2X2ZhaWx1cmVzX2xvZ19mZCk7Cisg ICAgfQorfQorCisvKiBUaGlzIHJvdXRpbmUgaW5pdGlhbGl6ZXMgYSBzZXQg aGFuZGxlIHRvIGEgdnRhYmxlIHNldC4gSXQgbWFrZXMKKyAgIHN1cmUgdGhh dCB0aGVyZSBpcyBvbmx5IG9uZSBzZXQgaGFuZGxlIGZvciBhIHBhcnRpY3Vs YXIgc2V0IGJ5CisgICB1c2luZyBhIG1hcCBmcm9tIHNldCBuYW1lIHRvIHBv aW50ZXIgdG8gc2V0IGhhbmRsZS4gU2luY2UgdGhlcmUKKyAgIHdpbGwgYmUg bXVsdGlwbGUgY29waWVzIG9mIHRoZSBwb2ludGVyIHRvIHRoZSBzZXQgaGFu ZGxlIChvbmUgcGVyCisgICBjb21waWxhdGlvbiB1bml0IHRoYXQgdXNlcyBp dCksIGl0IG1ha2VzIHN1cmUgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlCisgICBw b2ludGVycyB0byB0aGUgc2V0IGhhbmRsZSBzbyB0aGF0IHRoZSBzZXQgaGFu ZGxlIGlzIHVuaXF1ZS4gVG8KKyAgIG1ha2UgdGhpcyBhIGxpdHRsZSBtb3Jl IGVmZmljaWVudCBhbmQgYXZvaWQgYSBsZXZlbCBvZiBpbmRpcmVjdGlvbgor ICAgaW4gc29tZSBjYXNlcywgdGhlIGZpcnN0IHBvaW50ZXIgdG8gaGFuZGxl IGZvciBhIHBhcnRpY3VsYXIgaGFuZGxlCisgICBiZWNvbWVzIHRoZSBoYW5k bGUgaXRzZWxmIGFuZCB0aGUgb3RoZXIgcG9pbnRlcnMgd2lsbCBwb2ludCB0 byB0aGUKKyAgIHNldCBoYW5kbGUuICBUaGlzIGlzIHRoZSBkZWJ1ZyB2ZXJz aW9uIG9mIHRoaXMgZnVuY3Rpb24sIHNvIGl0CisgICBvdXRwdXRzIGV4dHJh IGRlYnVnZ2luZyBtZXNzYWdlcyBhbmQgbG9nZ2luZy4gIFNFVF9IQU5ETEVf UFRSIGlzCisgICB0aGUgYWRkcmVzcyBvZiB0aGUgdnRhYmxlIG1hcCB2YXJp YWJsZSwgU0VUX1NZTUJPTF9LRVkgaXMgdGhlIGhhc2gKKyAgIHRhYmxlIGtl eSAoY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgbWFwIHZhcmlhYmxlIGFu ZCB0aGUgaGFzaAorICAgdmFsdWUpIGFuZCBTSVpFX0hJTlQgaXMgYSBndWVz cyBmb3IgdGhlIGJlc3QgaW5pdGlhbCBzaXplIGZvciB0aGUKKyAgIHNldCBv ZiB2dGFibGUgcG9pbnRlcnMgdGhhdCBTRVRfSEFORExFX1BPSU5URVIgd2ls bCBwb2ludCB0by4gICovCisKK3ZvaWQgX19WTFRJbml0U2V0U3ltYm9sRGVi dWcgKHZvaWQgKipzZXRfaGFuZGxlX3B0ciwKKwkJCSAgICAgIGNvbnN0IHZv aWQgKnNldF9zeW1ib2xfa2V5LCAKKwkJCSAgICAgIHNpemVfdCBzaXplX2hp bnQpCit7CisgIFZUVl9ERUJVR19BU1NFUlQgKHNldF9oYW5kbGVfcHRyKTsK KworICBpZiAodnR2X3N5bWJvbF91bmlmaWNhdGlvbl9tYXAgPT0gTlVMTCkK KyAgICB7CisgICAgICAvKiBUT0RPOiAgRm9yIG5vdyB3ZSBoYXZlIGNob3Nl biAxMDI0LCBidXQgd2UgbmVlZCB0byBjb21lIHVwIHdpdGggYQorCSBiZXR0 ZXIgaW5pdGlhbCBzaXplIGZvciB0aGlzLiAgKi8KKyAgICAgIHZ0dl9zeW1i b2xfdW5pZmljYXRpb25fbWFwID0gczJzOjpjcmVhdGUgKDEwMjQpOworICAg ICAgVlRWX0RFQlVHX0FTU0VSVCh2dHZfc3ltYm9sX3VuaWZpY2F0aW9uX21h cCk7CisgICAgfQorCisgIHZ0dl9zZXRfaGFuZGxlICpoYW5kbGVfcHRyID0g KHZ0dl9zZXRfaGFuZGxlICopIHNldF9oYW5kbGVfcHRyOworICB2dHZfc3lt Ym9sX2tleSAqc3ltYm9sX2tleV9wdHIgPSAodnR2X3N5bWJvbF9rZXkgKikg c2V0X3N5bWJvbF9rZXk7CisKKyAgY29uc3QgczJzOjp2YWx1ZV90eXBlICog bWFwX3ZhbHVlX3B0ciA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdnR2X3N5bWJvbF91bmlmaWNhdGlvbl9tYXAtPmdldCAoc3ltYm9sX2tl eV9wdHIpOworICBjaGFyIGJ1ZmZlclsyMDBdOworICBpZiAobWFwX3ZhbHVl X3B0ciA9PSBOVUxMKQorICAgIHsKKyAgICAgIGlmICgqaGFuZGxlX3B0ciAh PSBOVUxMKQorCXsKKwkgIHNucHJpbnRmIChidWZmZXIsIHNpemVvZihidWZm ZXIpLCAKKwkJICAgICIqKiogRm91bmQgbm9uLU5VTEwgbG9jYWwgc2V0IHB0 ciAlcCBtaXNzaW5nIGZvciBzeW1ib2wiCisJCSAgICAiICUuKnMiLAorCQkg ICAgKmhhbmRsZV9wdHIsIHN5bWJvbF9rZXlfcHRyLT5uLCBzeW1ib2xfa2V5 X3B0ci0+Ynl0ZXMpOworCSAgbG9nX2Vycm9yX21lc3NhZ2UgKGJ1ZmZlciwg dHJ1ZSk7CisJICBWVFZfREVCVUdfQVNTRVJUICgwKTsKKwl9CisgICAgfQor ICBlbHNlIGlmICgqaGFuZGxlX3B0ciAhPSBOVUxMICYmIAorICAgICAgICAg ICAoaGFuZGxlX3B0ciAhPSAqbWFwX3ZhbHVlX3B0ciAmJiAKKyAgICAgICAg ICAgIHB0cl9mcm9tX3NldF9oYW5kbGVfaGFuZGxlICgqaGFuZGxlX3B0cikg IT0gKm1hcF92YWx1ZV9wdHIpKQorICAgIHsKKyAgICAgIFZUVl9ERUJVR19B U1NFUlQgKCptYXBfdmFsdWVfcHRyICE9IE5VTEwpOworICAgICAgc25wcmlu dGYgKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIAorCQkiKioqIEZvdW5kIGRp ZmZlbmNlIGJldHdlZW4gbG9jYWwgc2V0IHB0ciAlcCBhbmQgc2V0IHB0ciAl cCIKKwkJImZvciBzeW1ib2wgJS4qcyIsIAorCQkqaGFuZGxlX3B0ciwgKm1h cF92YWx1ZV9wdHIsIAorCQlzeW1ib2xfa2V5X3B0ci0+biwgc3ltYm9sX2tl eV9wdHItPmJ5dGVzKTsKKyAgICAgIGxvZ19lcnJvcl9tZXNzYWdlIChidWZm ZXIsIHRydWUpOworICAgICAgVlRWX0RFQlVHX0FTU0VSVCAoMCk7CisgICAg fQorICBlbHNlIGlmICgqaGFuZGxlX3B0ciA9PSBOVUxMKQorICAgIHsKKyAg ICAgIC8qIEV4ZWN1dGlvbiBzaG91bGQgbm90IHJlYWNoIHRoaXMgcG9pbnQu ICAqLworICAgIH0KKworICBpZiAoKmhhbmRsZV9wdHIgIT0gTlVMTCkKKyAg ICB7CisgICAgICBpZiAoIWlzX3NldF9oYW5kbGVfaGFuZGxlICgqc2V0X2hh bmRsZV9wdHIpKQorICAgICAgICBoYW5kbGVfcHRyID0gKHZ0dl9zZXRfaGFu ZGxlICopIHNldF9oYW5kbGVfcHRyOworICAgICAgZWxzZQorICAgICAgICBo YW5kbGVfcHRyID0gcHRyX2Zyb21fc2V0X2hhbmRsZV9oYW5kbGUgKCpzZXRf aGFuZGxlX3B0cik7CisgICAgICBzbnByaW50ZiAoYnVmZmVyLCBzaXplb2Yg KGJ1ZmZlciksICIgIENhbGxpbmcgcmVzaXplIHdpdGggJXBcbiIsCisJCWhh bmRsZV9wdHIpOworICAgICAgbG9nX21lbW9yeV9wcm90ZWN0aW9uX2RhdGEg KGJ1ZmZlcik7CisgICAgICB2dHZfc2V0czo6cmVzaXplIChzaXplX2hpbnQs IGhhbmRsZV9wdHIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBWVFZf REVCVUdfQVNTRVJUICgqaGFuZGxlX3B0ciA9PSBOVUxMKTsKKyAgaWYgKG1h cF92YWx1ZV9wdHIgIT0gTlVMTCkKKyAgICB7CisgICAgICBpZiAoKm1hcF92 YWx1ZV9wdHIgPT0gaGFuZGxlX3B0cikKKwl7CisJICBzbnByaW50ZiAoYnVm ZmVyLCBzaXplb2YgKGJ1ZmZlciksICIgIENhbGxpbmcgcmVzaXplIHdpdGgg JXBcbiIsCisJCSAgICAqbWFwX3ZhbHVlX3B0cik7CisJICBsb2dfbWVtb3J5 X3Byb3RlY3Rpb25fZGF0YSAoYnVmZmVyKTsKKwkgIHZ0dl9zZXRzOjpyZXNp emUgKHNpemVfaGludCwgKm1hcF92YWx1ZV9wdHIpOworCX0KKyAgICAgIGVs c2UKKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBvbmUgbGV2ZWwgaGFu ZGxlIHRvIHRoZSBzZXQgYWxyZWFkeSBleGlzdHMuIFNvLCB3ZQorICAgICAg ICAgICAgIGFyZSBhZGRpbmcgb25lIGxldmVsIG9mIGluZGlyZWN0aW9uIGhl cmUgYW5kIHdlIHdpbGwKKyAgICAgICAgICAgICBzdG9yZSBhIHBvaW50ZXIg dG8gdGhlIG9uZSBsZXZlbCBoYW5kbGUgaGVyZS4gICovCisKKyAgICAgICAg ICB2dHZfc2V0X2hhbmRsZV9oYW5kbGUgKiBoYW5kbGVfaGFuZGxlX3B0ciA9 IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh2dHZfc2V0X2hhbmRsZV9oYW5kbGUgKiloYW5kbGVfcHRyOworICAgICAg ICAgICpoYW5kbGVfaGFuZGxlX3B0ciA9IHNldF9oYW5kbGVfaGFuZGxlKCpt YXBfdmFsdWVfcHRyKTsKKyAgICAgICAgICBWVFZfREVCVUdfQVNTRVJUKCpo YW5kbGVfaGFuZGxlX3B0ciAhPSBOVUxMKTsKKworICAgICAgICAgIC8qIFRo ZSBoYW5kbGUgY2FuIGl0c2VsZiBiZSBOVUxMIGlmIHRoZSBzZXQgaGFzIG9u bHkKKwkgICAgIGJlZW4gaW5pdGlhemxpZWQgd2l0aCBzaXplIGhpbnQgPT0g MS4gKi8KKwkgIHNucHJpbnRmIChidWZmZXIsIHNpemVvZiAoYnVmZmVyKSwg IiAgQ2FsbGluZyByZXNpemUgd2l0aCAlcFxuIiwKKwkJICAgICptYXBfdmFs dWVfcHRyKTsKKwkgIGxvZ19tZW1vcnlfcHJvdGVjdGlvbl9kYXRhIChidWZm ZXIpOworICAgICAgICAgIHZ0dl9zZXRzOjpyZXNpemUgKHNpemVfaGludCwg Km1hcF92YWx1ZV9wdHIpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgLyogV2Ugd2lsbCBjcmVhdGUgYSBuZXcgc2V0LiBTbywg aW4gdGhpcyBjYXNlIGhhbmRsZV9wdHIgaXMgdGhlCisgICAgICAgICBvbmUg bGV2ZWwgcG9pbnRlciB0byB0aGUgc2V0IGhhbmRsZS4gIENyZWF0ZSBjb3B5 IG9mIG1hcCBuYW1lCisgICAgICAgICBpbiBjYXNlIHRoZSBtZW1vcnkgd2hl cmUgdGhpcyBjb21lcyBmcm9tIGdldHMgdW5tYXBwZWQgYnkKKyAgICAgICAg IGRsY2xvc2UuICAqLworICAgICAgc2l6ZV90IG1hcF9rZXlfbGVuID0gc3lt Ym9sX2tleV9wdHItPm4gKyBzaXplb2YgKHZ0dl9zeW1ib2xfa2V5KTsKKyAg ICAgIHZvaWQgKm1hcF9rZXkgPSBWVFZfbWFsbG9jIChtYXBfa2V5X2xlbik7 CisKKyAgICAgIG1lbWNweSAobWFwX2tleSwgc3ltYm9sX2tleV9wdHIsIG1h cF9rZXlfbGVuKTsKKworICAgICAgczJzOjp2YWx1ZV90eXBlICp2YWx1ZV9w dHI7CisgICAgICB2dHZfc3ltYm9sX3VuaWZpY2F0aW9uX21hcCA9IAorICAg ICAgICB2dHZfc3ltYm9sX3VuaWZpY2F0aW9uX21hcC0+ZmluZF9vcl9hZGRf a2V5ICgodnR2X3N5bWJvbF9rZXkgKiltYXBfa2V5LAorCQkJCQkJICAgICAm dmFsdWVfcHRyKTsgICAgICAgICAgICAgIAorICAgICAgKnZhbHVlX3B0ciA9 IGhhbmRsZV9wdHI7CisKKyAgICAgIC8qICBUT0RPOiBXZSBzaG91bGQgdmVy aWZ5IHRoZSByZXR1cm4gdmFsdWUuICovCisgICAgICB2dHZfc2V0czo6Y3Jl YXRlIChzaXplX2hpbnQsIGhhbmRsZV9wdHIpOworICAgICAgVlRWX0RFQlVH X0FTU0VSVCAoc2l6ZV9oaW50IDw9IDEgfHwgKmhhbmRsZV9wdHIgIT0gTlVM TCk7CisgICAgfQorCisgIGlmIChkZWJ1Z19pbml0KQorICAgIHsKKyAgICAg IGlmIChpbml0X2xvZ19mZCA9PSAtMSkKKwlpbml0X2xvZ19mZCA9IHZ0dl9v cGVuX2xvZyAoInZ0dl9pbml0LmxvZyIpOworCisgICAgICB2dHZfYWRkX3Rv X2xvZyAoaW5pdF9sb2dfZmQsIAorCQkgICAgICAiSW5pdCBoYW5kbGU6JXAg Zm9yIHN5bWJvbDolLipzIGhhc2g6JXUgc2l6ZV9oaW50OiVsdSIKKwkJICAg ICAgIm51bWJlciBvZiBzeW1ib2xzOiVsdSBcbiIsCisJCSAgICAgIHNldF9o YW5kbGVfcHRyLCBzeW1ib2xfa2V5X3B0ci0+biwKKwkJICAgICAgc3ltYm9s X2tleV9wdHItPmJ5dGVzLCBzeW1ib2xfa2V5X3B0ci0+aGFzaCwgc2l6ZV9o aW50LCAKKwkJICAgICAgdnR2X3N5bWJvbF91bmlmaWNhdGlvbl9tYXAtPnNp emUgKCkpOworICAgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiB0YWtlcyBh IHRoZSBhZGRyZXNzIG9mIGEgdnRhYmxlIG1hcCB2YXJpYWJsZQorICAgKFNF VF9IQU5ETEVfUFRSKSwgYSBWVEFCTEVfUFRSIHRvIGFkZCB0byB0aGUgZGF0 YSBzZXQsIHRoZSBuYW1lIG9mCisgICB0aGUgdnRhYmxlIG1hcCB2YXJpYWJs ZSAoU0VUX1NZTUJPTF9OQU1FKSBhbmQgdGhlIG5hbWUgb2YgdGhlCisgICB2 dGFibGUgKFZUQUJMRV9OQU1FKSBiZWluZyBwb2ludGVkIHRvLiAgSWYgdGhl IHZ0YWJsZSBtYXAgdmFyaWFibGUKKyAgIGlzIE5VTEwgaXQgY3JlYXRlcyBh IG5ldyBkYXRhIHNldCBhbmQgaW5pdGlhbGl6ZXMgdGhlIHZhcmlhYmxlLAor ICAgb3RoZXJ3aXNlIGl0IHVzZXMgb3VyIHN5bWJvbCB1bmlmaWNhdGlvbiB0 byBmaW5kIHRoZSByaWdodCBkYXRhCisgICBzZXQ7IGluIGVpdGhlciBjYXNl IGl0IHRoZW4gYWRkcyB0aGUgdnRhYmxlIHBvaW50ZXIgdG8gdGhlIHNldC4K KyAgIFRoZSBvdGhlciB0d28gcGFyYW1ldGVycyBhcmUgdXNlZCBmb3IgZGVi dWdnaW5nIGluZm9ybWF0aW9uLiAgKi8KKwordm9pZAorX19WTFRSZWdpc3Rl clBhaXJEZWJ1ZyAodm9pZCAqKnNldF9oYW5kbGVfcHRyLCBjb25zdCB2b2lk ICp2dGFibGVfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhciAqc2V0X3N5bWJvbF9uYW1lLCBjb25zdCBjaGFyICp2dGFibGVfbmFt ZSkKKwkJCQoreworICBWVFZfREVCVUdfQVNTRVJUKHNldF9oYW5kbGVfcHRy ICE9IE5VTEwpOworICAvKiBzZXRfaGFuZGxlX3B0ciBjYW4gYmUgTlVMTCBp ZiB0aGUgY2FsbCB0byBJbml0U2V0U3ltYm9sIGhhZCBhCisgICAgIHNpemUg aGludCBvZiAxLiAgKi8KKworICBpbnRfdnB0ciB2dGJsX3B0ciA9IChpbnRf dnB0cikgdnRhYmxlX3B0cjsKKyAgVlRWX0RFQlVHX0FTU0VSVCAodnR2X3N5 bWJvbF91bmlmaWNhdGlvbl9tYXAgIT0gTlVMTCk7CisKKyAgdnR2X3NldF9o YW5kbGUgKmhhbmRsZV9wdHI7CisgIGlmICghaXNfc2V0X2hhbmRsZV9oYW5k bGUgKCpzZXRfaGFuZGxlX3B0cikpCisgICAgaGFuZGxlX3B0ciA9ICh2dHZf c2V0X2hhbmRsZSAqKSBzZXRfaGFuZGxlX3B0cjsKKyAgZWxzZQorICAgIGhh bmRsZV9wdHIgPSBwdHJfZnJvbV9zZXRfaGFuZGxlX2hhbmRsZSAoKnNldF9o YW5kbGVfcHRyKTsKKworICAvKiBUT0RPOiBXZSBzaG91bGQgdmVyaWZ5IHRo ZSByZXR1cm4gdmFsdWUuICAqLworICB2dHZfc2V0czo6aW5zZXJ0ICh2dGJs X3B0ciwgaGFuZGxlX3B0cik7CisKKyAgaWYgKGRlYnVnX2luaXQpCisgICAg eworICAgICAgaWYgKGluaXRfbG9nX2ZkID09IC0xKQorCWluaXRfbG9nX2Zk ID0gdnR2X29wZW5fbG9nKCJ2dHZfaW5pdC5sb2ciKTsKKworICAgICAgdnR2 X2FkZF90b19sb2coaW5pdF9sb2dfZmQsIAorICAgICAgICAgICAgICAgICAg ICAgIlJlZ2lzdGVyZWQgJXMgOiAlcyAoJXApIDIgbGV2ZWwgZGVyZWYgPSAl c1xuIiwKKwkJICAgICBzZXRfc3ltYm9sX25hbWUsIHZ0YWJsZV9uYW1lLCB2 dGJsX3B0ciwgCisgICAgICAgICAgICAgICAgICAgICBpc19zZXRfaGFuZGxl X2hhbmRsZSgqc2V0X2hhbmRsZV9wdHIpID8gInllcyIgOiAibm8iICk7Cisg ICAgfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIF9f VkxUVmVyaWZ5VnRhYmxlUG9pbnRlckRlYnVnOyBpdAorICAgc2VuZHMgYXMg bXVjaCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYXMgaXQgY2FuIHRvIHRoZSBl cnJvciBsb2cKKyAgIGZpbGUsIHRoZW4gY2FsbHMgX192dHZfdmVyaWZ5X2Zh aWwuICBTRVRfSEFORExFX1BUUiBpcyB0aGUgcG9pbnRlcgorICAgdG8gdGhl IHNldCBvZiB2YWxpZCB2dGFibGUgcG9pbnRlcnMsIFZUQkxfUFRSIGlzIHRo ZSBwb2ludGVyIHRoYXQKKyAgIHdhcyBub3QgZm91bmQgaW4gdGhlIHNldCwg YW5kIERFQlVHX01TRyBpcyB0aGUgbWVzc2FnZSB0byBiZQorICAgd3JpdHRl biB0byB0aGUgbG9nIGZpbGUgYmVmb3JlIGZhaWxpbmcuIG4gKi8KKworc3Rh dGljIHZvaWQKK19fdnR2X3ZlcmlmeV9mYWlsX2RlYnVnICh2b2lkICoqc2V0 X2hhbmRsZV9wdHIsIGNvbnN0IHZvaWQgKnZ0YmxfcHRyLCAKKyAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZWJ1Z19tc2cpCit7Cisg IGxvZ19lcnJvcl9tZXNzYWdlIChkZWJ1Z19tc2csIGZhbHNlKTsKKworICAv KiBDYWxsIHRoZSBwdWJsaWMgaW50ZXJmYWNlIGluIGNhc2UgaXQgaGFzIGJl ZW4gb3ZlcndyaXR0ZW4gYnkKKyAgICAgdXNlci4gICovCisgIF9fdnR2X3Zl cmlmeV9mYWlsIChzZXRfaGFuZGxlX3B0ciwgdnRibF9wdHIpOworCisgIGxv Z19lcnJvcl9tZXNzYWdlICgiUmV0dXJuZWQgZnJvbSBfX3Z0dl92ZXJpZnlf ZmFpbC4iCisgICAgICAgICAgICAgICAgICAgICAiIFNlY29uZGFyeSB2ZXJp ZmljYXRpb24gc3VjY2VlZGVkLlxuIiwgZmFsc2UpOworfQorCisvKiBUaGlz IGlzIHRoZSBkZWJ1ZyB2ZXJzaW9uIG9mIHRoZSB2ZXJpZmljYXRpb24gZnVu Y3Rpb24uICBJdCB0YWtlcworICAgdGhlIGFkZHJlc3Mgb2YgYSB2dGFibGUg bWFwIHZhcmlhYmxlIChTRVRfSEFORExFX1BUUikgYW5kIGEKKyAgIFZUQUJM RV9QVFIgdG8gdmFsaWRhdGUsIGFzIHdlbGwgYXMgdGhlIG5hbWUgb2YgdGhl IHZ0YWJsZSBtYXAKKyAgIHZhcmlhYmxlIChTRVRfU1lNQk9MX05BTUUpIGFu ZCBWVEFCTEVfTkFNRSwgd2hpY2ggYXJlIHVzZWQgZm9yCisgICBkZWJ1Z2dp bmcgbWVzc2FnZXMuICBJdCBjaGVja3MgdG8gc2VlIGlmIFZUQUJMRV9QVFIg aXMgaW4gdGhlIHNldAorICAgcG9pbnRlZCB0byBieSBTRVRfSEFORExFX1BU Ui4gIElmIHNvLCBpdCByZXR1cm5zIFZUQUJMRV9QVFIsCisgICBvdGhlcndp c2UgaXQgY2FsbHMgX192dHZfdmVyaWZ5X2ZhaWwsIHdoaWNoIHVzdWFsbHkg bG9ncyBlcnJvcgorICAgbWVzc2FnZXMgYW5kIGNhbGxzIGFib3J0LiAgKi8K KworY29uc3Qgdm9pZCAqCitfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXJEZWJ1 ZyAodm9pZCAqKnNldF9oYW5kbGVfcHRyLCBjb25zdCB2b2lkICp2dGFibGVf cHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKnNldF9zeW1ib2xfbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICp2 dGFibGVfbmFtZSkKK3sKKyAgVlRWX0RFQlVHX0FTU0VSVCAoc2V0X2hhbmRs ZV9wdHIgIT0gTlVMTCAmJiAqc2V0X2hhbmRsZV9wdHIgIT0gTlVMTCk7Cisg IGludF92cHRyIHZ0YmxfcHRyID0gKGludF92cHRyKSB2dGFibGVfcHRyOwor CisgIHZ0dl9zZXRfaGFuZGxlICpoYW5kbGVfcHRyOworICBpZiAoIWlzX3Nl dF9oYW5kbGVfaGFuZGxlICgqc2V0X2hhbmRsZV9wdHIpKQorICAgIGhhbmRs ZV9wdHIgPSAodnR2X3NldF9oYW5kbGUgKikgc2V0X2hhbmRsZV9wdHI7Cisg IGVsc2UKKyAgICBoYW5kbGVfcHRyID0gcHRyX2Zyb21fc2V0X2hhbmRsZV9o YW5kbGUgKCpzZXRfaGFuZGxlX3B0cik7CisKKyAgaWYgKHZ0dl9zZXRzOjpj b250YWlucyAodnRibF9wdHIsIGhhbmRsZV9wdHIpKQorICAgIHsKKyAgICAg IGlmIChkZWJ1Z192ZXJpZnlfdnRhYmxlKQorICAgICAgICB7CisgICAgICAg ICAgaWYgKHZlcmlmeV92dGFibGVfbG9nX2ZkID09IC0xKQorICAgICAgICAg ICAgdnR2X29wZW5fbG9nICgidnR2X3ZlcmlmeV92dGFibGUubG9nIik7Cisg ICAgICAgICAgdnR2X2FkZF90b19sb2cgKHZlcmlmeV92dGFibGVfbG9nX2Zk LAorCQkJICAiVmVyaWZpZWQgJXMgJXMgdmFsdWUgPSAlcFxuIiwKKwkJCSAg c2V0X3N5bWJvbF9uYW1lLCB2dGFibGVfbmFtZSwgdnRhYmxlX3B0cik7Cisg ICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBXZSBm YWlsZWQgdG8gZmluZCB0aGUgdnRhYmxlIHBvaW50ZXIgaW4gdGhlIHNldCBv ZiB2YWxpZAorCSBwb2ludGVycy4gIExvZyB0aGUgZXJyb3IgZGF0YSBhbmQg Y2FsbCB0aGUgZmFpbHVyZQorCSBmdW5jdGlvbi4gICovCisgICAgICBzbnBy aW50ZiAoZGVidWdfbG9nX21lc3NhZ2UsIHNpemVvZiAoZGVidWdfbG9nX21l c3NhZ2UpLAorCQkiTG9va2luZyBmb3IgJXMgaW4gJXNcbiIsIHZ0YWJsZV9u YW1lLCBzZXRfc3ltYm9sX25hbWUpOworICAgICAgX192dHZfdmVyaWZ5X2Zh aWxfZGVidWcgKHNldF9oYW5kbGVfcHRyLCB2dGFibGVfcHRyLCBkZWJ1Z19s b2dfbWVzc2FnZSk7CisKKyAgICAgIC8qIE5vcm1hbGx5IF9fdnR2X3Zlcmlm eV9mYWlsX2RlYnVnIHdpbGwgY2FsbCBhYm9ydCwgc28gd2Ugd29uJ3QKKyAg ICAgICAgIGV4ZWN1dGUgdGhlIHJldHVybiBiZWxvdy4gIElmIHdlIGdldCB0 aGlzIGZhciwgdGhlIGFzc3VtcHRpb24KKyAgICAgICAgIGlzIHRoYXQgdGhl IHByb2dyYW1tZXIgaGFzIHJlcGxhY2VkIF9fdnR2X3ZlcmlmeV9mYWlsX2Rl YnVnCisgICAgICAgICB3aXRoIHNvbWUga2luZCBvZiBzZWNvbmRhcnkgdmVy aWZpY2F0aW9uIEFORCB0aGlzIHNlY29uZGFyeQorICAgICAgICAgdmVyaWZp Y2F0aW9uIHN1Y2NlZWRlZCwgc28gdGhlIHZ0YWJsZSBwb2ludGVyIGlzIHZh bGlkLiAgKi8KKyAgICB9CisKKyAgcmV0dXJuIHZ0YWJsZV9wdHI7Cit9CisK Ky8qIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyBhIHNldCBoYW5kbGUgdG8g YSB2dGFibGUgc2V0LiBJdCBtYWtlcworICAgc3VyZSB0aGF0IHRoZXJlIGlz IG9ubHkgb25lIHNldCBoYW5kbGUgZm9yIGEgcGFydGljdWxhciBzZXQgYnkK KyAgIHVzaW5nIGEgbWFwIGZyb20gc2V0IG5hbWUgdG8gcG9pbnRlciB0byBz ZXQgaGFuZGxlLiBTaW5jZSB0aGVyZQorICAgd2lsbCBiZSBtdWx0aXBsZSBj b3BpZXMgb2YgdGhlIHBvaW50ZXIgdG8gdGhlIHNldCBoYW5kbGUgKG9uZSBw ZXIKKyAgIGNvbXBpbGF0aW9uIHVuaXQgdGhhdCB1c2VzIGl0KSwgaXQgbWFr ZXMgc3VyZSB0byBpbml0aWFsaXplIGFsbCB0aGUKKyAgIHBvaW50ZXJzIHRv IHRoZSBzZXQgaGFuZGxlIHNvIHRoYXQgdGhlIHNldCBoYW5kbGUgaXMgdW5p cXVlLiBUbworICAgbWFrZSB0aGlzIGEgbGl0dGxlIG1vcmUgZWZmaWNpZW50 IGFuZCBhdm9pZCBhIGxldmVsIG9mIGluZGlyZWN0aW9uCisgICBpbiBzb21l IGNhc2VzLCB0aGUgZmlyc3QgcG9pbnRlciB0byBoYW5kbGUgZm9yIGEgcGFy dGljdWxhciBoYW5kbGUKKyAgIGJlY29tZXMgdGhlIGhhbmRsZSBpdHNlbGYg YW5kIHRoZSBvdGhlciBwb2ludGVycyB3aWxsIHBvaW50IHRvIHRoZQorICAg c2V0IGhhbmRsZS4gIFNFVF9IQU5ETEVfUFRSIGlzIHRoZSBhZGRyZXNzIG9m IHRoZSB2dGFibGUgbWFwCisgICB2YXJpYWJsZSwgU0VUX1NZTUJPTF9LRVkg aXMgdGhlIGhhc2ggdGFibGUga2V5IChjb250YWluaW5nIHRoZSBuYW1lCisg ICBvZiB0aGUgbWFwIHZhcmlhYmxlIGFuZCB0aGUgaGFzaCB2YWx1ZSkgYW5k IFNJWkVfSElOVCBpcyBhIGd1ZXNzCisgICBmb3IgdGhlIGJlc3QgaW5pdGlh bCBzaXplIGZvciB0aGUgc2V0IG9mIHZ0YWJsZSBwb2ludGVycyB0aGF0Cisg ICBTRVRfSEFORExFX1BPSU5URVIgd2lsbCBwb2ludCB0by4qLworCit2b2lk IF9fVkxUSW5pdFNldFN5bWJvbCAodm9pZCAqKnNldF9oYW5kbGVfcHRyLCBj b25zdCB2b2lkICpzZXRfc3ltYm9sX2tleSwKKwkJCSBzaXplX3Qgc2l6ZV9o aW50KQoreworICB2dHZfc2V0X2hhbmRsZSAqaGFuZGxlX3B0ciA9ICh2dHZf c2V0X2hhbmRsZSAqKSBzZXRfaGFuZGxlX3B0cjsKKyAgaWYgKCpoYW5kbGVf cHRyICE9IE5VTEwpCisgICAgeworICAgICAgaWYgKCFpc19zZXRfaGFuZGxl X2hhbmRsZSAoKnNldF9oYW5kbGVfcHRyKSkKKyAgICAgICAgaGFuZGxlX3B0 ciA9ICh2dHZfc2V0X2hhbmRsZSAqKSBzZXRfaGFuZGxlX3B0cjsKKyAgICAg IGVsc2UKKyAgICAgICAgaGFuZGxlX3B0ciA9IHB0cl9mcm9tX3NldF9oYW5k bGVfaGFuZGxlICgqc2V0X2hhbmRsZV9wdHIpOworICAgICAgdnR2X3NldHM6 OnJlc2l6ZSAoc2l6ZV9oaW50LCBoYW5kbGVfcHRyKTsKKyAgICAgIHJldHVy bjsKKyAgICB9CisKKyAgaWYgKHZ0dl9zeW1ib2xfdW5pZmljYXRpb25fbWFw ID09IE5VTEwpCisgICAgdnR2X3N5bWJvbF91bmlmaWNhdGlvbl9tYXAgPSBz MnM6OmNyZWF0ZSAoMTAyNCk7CisKKyAgdnR2X3N5bWJvbF9rZXkgKnN5bWJv bF9rZXlfcHRyID0gKHZ0dl9zeW1ib2xfa2V5ICopIHNldF9zeW1ib2xfa2V5 OworICBjb25zdCBzMnM6OnZhbHVlX3R5cGUgKm1hcF92YWx1ZV9wdHIgPSAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0dl9zeW1ib2xfdW5p ZmljYXRpb25fbWFwLT5nZXQgKHN5bWJvbF9rZXlfcHRyKTsKKworICBpZiAo bWFwX3ZhbHVlX3B0ciAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmICgqbWFw X3ZhbHVlX3B0ciA9PSBoYW5kbGVfcHRyKQorCXZ0dl9zZXRzOjpyZXNpemUg KHNpemVfaGludCwgKm1hcF92YWx1ZV9wdHIpOworICAgICAgZWxzZQorCXsK KwkgIC8qIFRoZSBvbmUgbGV2ZWwgaGFuZGxlIHRvIHRoZSBzZXQgYWxyZWFk eSBleGlzdHMuIFNvLCB3ZQorCSAgICAgYXJlIGFkZGluZyBvbmUgbGV2ZWwg b2YgaW5kaXJlY3Rpb24gaGVyZSBhbmQgd2Ugd2lsbAorCSAgICAgc3RvcmUg YSBwb2ludGVyIHRvIHRoZSBvbmUgbGV2ZWwgcG9pbnRlciBoZXJlLiAgKi8K KwkgIHZ0dl9zZXRfaGFuZGxlX2hhbmRsZSAqaGFuZGxlX2hhbmRsZV9wdHIg PSAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZ0dl9z ZXRfaGFuZGxlX2hhbmRsZSAqKSBoYW5kbGVfcHRyOworCSAgKmhhbmRsZV9o YW5kbGVfcHRyID0gc2V0X2hhbmRsZV9oYW5kbGUgKCptYXBfdmFsdWVfcHRy KTsKKwkgIHZ0dl9zZXRzOjpyZXNpemUgKHNpemVfaGludCwgKm1hcF92YWx1 ZV9wdHIpOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBX ZSB3aWxsIGNyZWF0ZSBhIG5ldyBzZXQuIFNvLCBpbiB0aGlzIGNhc2UgaGFu ZGxlX3B0ciBpcyB0aGUKKyAgICAgICAgIG9uZSBsZXZlbCBwb2ludGVyIHRv IHRoZSBzZXQgaGFuZGxlLiAgQ3JlYXRlIGNvcHkgb2YgbWFwIG5hbWUKKyAg ICAgICAgIGluIGNhc2UgdGhlIG1lbW9yeSB3aGVyZSB0aGlzIGNvbWVzIGZy b20gZ2V0cyB1bm1hcHBlZCBieQorICAgICAgICAgZGxjbG9zZS4gICovCisg ICAgICBzaXplX3QgbWFwX2tleV9sZW4gPSBzeW1ib2xfa2V5X3B0ci0+biAr IHNpemVvZiAodnR2X3N5bWJvbF9rZXkpOworICAgICAgdm9pZCAqIG1hcF9r ZXkgPSBWVFZfbWFsbG9jIChtYXBfa2V5X2xlbik7CisgICAgICBtZW1jcHkg KG1hcF9rZXksIHN5bWJvbF9rZXlfcHRyLCBtYXBfa2V5X2xlbik7CisKKyAg ICAgIHMyczo6dmFsdWVfdHlwZSAqIHZhbHVlX3B0cjsKKyAgICAgIHZ0dl9z eW1ib2xfdW5pZmljYXRpb25fbWFwID0gCisJdnR2X3N5bWJvbF91bmlmaWNh dGlvbl9tYXAtPmZpbmRfb3JfYWRkX2tleSAoKHZ0dl9zeW1ib2xfa2V5ICop bWFwX2tleSwKKwkJCQkJCSAgICAgJnZhbHVlX3B0cik7CisgICAgICAgICAg ICAKKyAgICAgICp2YWx1ZV9wdHIgPSBoYW5kbGVfcHRyOworCisgICAgICAv KiBUT0RPOiBXZSBzaG91bGQgdmVyaWZ5IHRoZSByZXR1cm4gdmFsdWUuICAq LworICAgICAgdnR2X3NldHM6OmNyZWF0ZSAoc2l6ZV9oaW50LCBoYW5kbGVf cHRyKTsKKyAgICB9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSB0 aGUgYWRkcmVzcyBvZiBhIHZ0YWJsZSBtYXAgdmFyaWFibGUKKyAgIChTRVRf SEFORExFX1BUUikgYW5kIGEgVlRBQkxFX1BUUi4gIElmIHRoZSB2dGFibGUg bWFwIHZhcmlhYmxlIGlzCisgICBOVUxMIGl0IGNyZWF0ZXMgYSBuZXcgZGF0 YSBzZXQgYW5kIGluaXRpYWxpemVzIHRoZSB2YXJpYWJsZSwKKyAgIG90aGVy d2lzZSBpdCB1c2VzIG91ciBzeW1ib2wgdW5pZmljYXRpb24gdG8gZmluZCB0 aGUgcmlnaHQgZGF0YQorICAgc2V0OyBpbiBlaXRoZXIgY2FzZSBpdCB0aGVu IGFkZHMgdGhlIHZ0YWJsZSBwb2ludGVyIHRvIHRoZSBzZXQuICAqLworCit2 b2lkIAorX19WTFRSZWdpc3RlclBhaXIgKHZvaWQgKipzZXRfaGFuZGxlX3B0 ciwgY29uc3Qgdm9pZCAqdnRhYmxlX3B0cikKK3sKKyAgaW50X3ZwdHIgdnRi bF9wdHIgPSAoaW50X3ZwdHIpIHZ0YWJsZV9wdHI7CisKKyAgdnR2X3NldF9o YW5kbGUgKmhhbmRsZV9wdHI7CisgIGlmICghaXNfc2V0X2hhbmRsZV9oYW5k bGUgKCpzZXRfaGFuZGxlX3B0cikpCisgICAgaGFuZGxlX3B0ciA9ICh2dHZf c2V0X2hhbmRsZSAqKSBzZXRfaGFuZGxlX3B0cjsKKyAgZWxzZQorICAgIGhh bmRsZV9wdHIgPSBwdHJfZnJvbV9zZXRfaGFuZGxlX2hhbmRsZSAoKnNldF9o YW5kbGVfcHRyKTsKKworICAvKiBUT0RPOiBXZSBzaG91bGQgdmVyaWZ5IHRo ZSByZXR1cm4gdmFsdWUuICAqLworICB2dHZfc2V0czo6aW5zZXJ0ICh2dGJs X3B0ciwgaGFuZGxlX3B0cik7Cit9CisKKworLyogVGhpcyBpcyB0aGUgbWFp biB2ZXJpZmljYXRpb24gZnVuY3Rpb24uICBJdCB0YWtlcyB0aGUgYWRkcmVz cyBvZiBhCisgICB2dGFibGUgbWFwIHZhcmlhYmxlIChTRVRfSEFORExFX1BU UikgYW5kIGEgVlRBQkxFX1BUUiB0byB2YWxpZGF0ZS4KKyAgIEl0IGNoZWNr cyB0byBzZWUgaWYgVlRBQkxFX1BUUiBpcyBpbiB0aGUgc2V0IHBvaW50ZWQg dG8gYnkKKyAgIFNFVF9IQU5ETEVfUFRSLiAgSWYgc28sIGl0IHJldHVybnMg VlRBQkxFX1BUUiwgb3RoZXJ3aXNlIGl0IGNhbGxzCisgICBfX3Z0dl92ZXJp ZnlfZmFpbCwgd2hpY2ggdXN1YWxseSBsb2dzIGVycm9yIG1lc3NhZ2VzIGFu ZCBjYWxscworICAgYWJvcnQuICBTaW5jZSB0aGlzIGZ1bmN0aW9uIGdldHMg Y2FsbGVkIFZFUlkgZnJlcXVlbnRseSwgaXQgaXMKKyAgIGltcG9ydGFudCBm b3IgaXQgdG8gYmUgYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLiAgKi8KKwor Y29uc3Qgdm9pZCAqCitfX1ZMVFZlcmlmeVZ0YWJsZVBvaW50ZXIgKHZvaWQg Kiogc2V0X2hhbmRsZV9wdHIsIGNvbnN0IHZvaWQgKiB2dGFibGVfcHRyKQor eworICBpbnRfdnB0ciB2dGJsX3B0ciA9IChpbnRfdnB0cikgdnRhYmxlX3B0 cjsKKworICB2dHZfc2V0X2hhbmRsZSAqaGFuZGxlX3B0cjsKKyAgaWYgKCFp c19zZXRfaGFuZGxlX2hhbmRsZSAoKnNldF9oYW5kbGVfcHRyKSkKKyAgICBo YW5kbGVfcHRyID0gKHZ0dl9zZXRfaGFuZGxlICopIHNldF9oYW5kbGVfcHRy OworICBlbHNlCisgICAgaGFuZGxlX3B0ciA9IHB0cl9mcm9tX3NldF9oYW5k bGVfaGFuZGxlICgqc2V0X2hhbmRsZV9wdHIpOworCisgIGlmICghdnR2X3Nl dHM6OmNvbnRhaW5zICh2dGJsX3B0ciwgaGFuZGxlX3B0cikpCisgICAgewor ICAgICAgX192dHZfdmVyaWZ5X2ZhaWwgKCh2b2lkICoqKSBoYW5kbGVfcHRy LCB2dGFibGVfcHRyKTsKKyAgICAgIC8qIE5vcm1hbGx5IF9fdnR2X3Zlcmlm eV9mYWlsIHdpbGwgY2FsbCBhYm9ydCwgc28gd2Ugd29uJ3QKKyAgICAgICAg IGV4ZWN1dGUgdGhlIHJldHVybiBiZWxvdy4gIElmIHdlIGdldCB0aGlzIGZh ciwgdGhlIGFzc3VtcHRpb24KKyAgICAgICAgIGlzIHRoYXQgdGhlIHByb2dy YW1tZXIgaGFzIHJlcGxhY2VkIF9fdnR2X3ZlcmlmeV9mYWlsIHdpdGgKKyAg ICAgICAgIHNvbWUga2luZCBvZiBzZWNvbmRhcnkgdmVyaWZpY2F0aW9uIEFO RCB0aGlzIHNlY29uZGFyeQorICAgICAgICAgdmVyaWZpY2F0aW9uIHN1Y2Nl ZWRlZCwgc28gdGhlIHZ0YWJsZSBwb2ludGVyIGlzIHZhbGlkLiAgKi8KKyAg ICB9CisKKyAgcmV0dXJuIHZ0YWJsZV9wdHI7Cit9CisKKy8qIFRoaXMgZnVu Y3Rpb24gY2FsbHMgX19mb3J0aWZ5X2ZhaWwgd2l0aCBhIEZBSUxVUkVfTVNH IGFuZCB0aGVuCisgICBjYWxscyBhYm9ydC4gICovCisKK3ZvaWQKK19fdnR2 X3JlYWxseV9mYWlsIChjb25zdCBjaGFyICpmYWlsdXJlX21zZykKK3sKKyAg X19mb3J0aWZ5X2ZhaWwgKGZhaWx1cmVfbXNnKTsKKworICAvKiBXZSBzaG91 bGQgbmV2ZXIgZ2V0IHRoaXMgZmFyOyBfX2ZvcnRpZnlfZmFpbCBjYWxscyBf X2xpYmNfbWVzc2FnZQorICAgICB3aGljaCBwcmludHMgb3V0IGEgYmFjayB0 cmFjZSBhbmQgYSBtZW1vcnkgZHVtcCBhbmQgdGhlbiBpcworICAgICBzdXBw b3NlZCB0byBjYWxsIGFib3J0LCBidXQgbGV0J3MgcGxheSBpdCBzYWZlIGFu eXdheSBhbmQgY2FsbCBhYm9ydAorICAgICBvdXJzZWx2ZXMuICAqLworICBh Ym9ydCAoKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB0YWtlcyBhbiBlcnJv ciBNU0csIGEgdnRhYmxlIG1hcCB2YXJpYWJsZQorICAgKERBVEFfU0VUX1BU UikgYW5kIGEgdnRhYmxlIHBvaW50ZXIgKFZUQkxfUFRSKS4gIEl0IGlzIGNh bGxlZCB3aGVuCisgICBhbiBhdHRlbXB0IHRvIHZlcmlmeSBWVEJMX1BUUiB3 aXRoIHRoZSBzZXQgcG9pbnRlZCB0byBieQorICAgREFUQV9TRVRfUFRSIGZh aWxlZC4gIEl0IG91dHB1dHMgYSBmYWlsdXJlIG1lc3NhZ2Ugd2l0aCB0aGUK KyAgIGFkZHJlc3NlcyBpbnZvbHZlZCwgYW5kIGNhbGxzIF9fdnR2X3JlYWxs eV9mYWlsLiAgKi8KKworc3RhdGljIHZvaWQKK3Z0dl9mYWlsIChjb25zdCBj aGFyICptc2csIHZvaWQgKipkYXRhX3NldF9wdHIsIGNvbnN0IHZvaWQgKnZ0 YmxfcHRyKQoreworICBjaGFyIGJ1ZmZlclsxMjhdOworICBpbnQgYnVmX2xl bjsKKyAgY29uc3QgY2hhciAqZm9ybWF0X3N0ciA9CisgICAgICAgICAgICAg ICAgICIqKiogVW5hYmxlIHRvIHZlcmlmeSB2dGFibGUgcG9pbnRlciAoJXAp IGluIHNldCAoJXApICoqKiBcbiI7CisKKyAgc25wcmludGYgKGJ1ZmZlciwg c2l6ZW9mIChidWZmZXIpLCBmb3JtYXRfc3RyLCB2dGJsX3B0ciwKKyAgICAg ICAgICAgIGlzX3NldF9oYW5kbGVfaGFuZGxlKCpkYXRhX3NldF9wdHIpID8K KyAgICAgICAgICAgICAgcHRyX2Zyb21fc2V0X2hhbmRsZV9oYW5kbGUgKCpk YXRhX3NldF9wdHIpIDoKKwkgICAgICAqZGF0YV9zZXRfcHRyKTsKKyAgYnVm X2xlbiA9IHN0cmxlbiAoYnVmZmVyKTsKKyAgLyogIFNlbmQgdGhpcyB0byB0 byBzdGRlcnIuICAqLworICB3cml0ZSAoMiwgYnVmZmVyLCBidWZfbGVuKTsK KworICBpZiAoIXZ0dl9ub19hYm9ydCkKKyAgICBfX3Z0dl9yZWFsbHlfZmFp bCAobXNnKTsKK30KKworLyogU2VuZCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0 IHdlIHdlcmUgdHJ5aW5nIHRvIGRvIHdoZW4gdmVyaWZpY2F0aW9uCisgICBm YWlsZWQgdG8gdGhlIGVycm9yIGxvZywgdGhlbiBjYWxsIHZ0dl9mYWlsLiAg VGhpcyBmdW5jdGlvbiBjYW4gYmUKKyAgIG92ZXJ3cml0dGVuL3JlcGxhY2Vk IGJ5IHRoZSB1c2VyLCB0byBpbXBsZW1lbnQgYSBzZWNvbmRhcnkKKyAgIHZl cmlmaWNhdGlvbiBmdW5jdGlvbiBpbnN0ZWFkLiAgREFUQV9TRVRfUFRSIGlz IHRoZSB2dGFibGUgbWFwCisgICB2YXJpYWJsZSB1c2VkIGZvciB0aGUgZmFp bGVkIHZlcmlmaWNhdGlvbiwgYW5kIFZUQkxfUFRSIGlzIHRoZQorICAgdnRh YmxlIHBvaW50ZXIgdGhhdCB3YXMgbm90IGZvdW5kIGluIHRoZSBzZXQuICAq LworCit2b2lkCitfX3Z0dl92ZXJpZnlfZmFpbCAodm9pZCAqKmRhdGFfc2V0 X3B0ciwgY29uc3Qgdm9pZCAqdnRibF9wdHIpCit7CisgIGNoYXIgbG9nX21z Z1syNTZdOworICBzbnByaW50ZiAobG9nX21zZywgc2l6ZW9mIChsb2dfbXNn KSwgIkxvb2tpbmcgZm9yIHZ0YWJsZSAlcCBpbiBzZXQgJXAuXG4iLAorICAg ICAgICAgICAgdnRibF9wdHIsCisgICAgICAgICAgICBpc19zZXRfaGFuZGxl X2hhbmRsZSAoKmRhdGFfc2V0X3B0cikgPworICAgICAgICAgICAgICBwdHJf ZnJvbV9zZXRfaGFuZGxlX2hhbmRsZSAoKmRhdGFfc2V0X3B0cikgOgorICAg ICAgICAgICAgICAqZGF0YV9zZXRfcHRyKTsKKyAgbG9nX2Vycm9yX21lc3Nh Z2UgKGxvZ19tc2csIGZhbHNlKTsKKworICBjb25zdCBjaGFyICpmb3JtYXRf c3RyID0KKyAgICAgICAgICAgICIqKiogVW5hYmxlIHRvIHZlcmlmeSB2dGFi bGUgcG9pbnRlciAoJXApIGluIHNldCAoJXApICoqKiBcbiI7CisgIHNucHJp bnRmIChsb2dfbXNnLCBzaXplb2YgKGxvZ19tc2cpLCBmb3JtYXRfc3RyLCB2 dGJsX3B0ciwgKmRhdGFfc2V0X3B0cik7CisgIGxvZ19lcnJvcl9tZXNzYWdl IChsb2dfbXNnLCBmYWxzZSk7CisgIGxvZ19lcnJvcl9tZXNzYWdlICgiICBC YWNrdHJhY2U6IFxuIiwgdHJ1ZSk7CisKKyAgY29uc3QgY2hhciAqZmFpbF9t c2cgPSAiUG90ZW50aWFsIHZ0YWJsZSBwb2ludGVyIGNvcnJ1cHRpb24gZGV0 ZWN0ZWQhIVxuIjsKKyAgdnR2X2ZhaWwgKGZhaWxfbXNnLCBkYXRhX3NldF9w dHIsIHZ0YmxfcHRyKTsKK30KSW5kZXg6IGxpYnN0ZGMrKy12My9saWJzdXBj KysvdnR2X21hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxp YnN0ZGMrKy12My9saWJzdXBjKysvdnR2X21hbGxvYy5oCShyZXZpc2lvbiAw KQorKysgbGlic3RkYysrLXYzL2xpYnN1cGMrKy92dHZfbWFsbG9jLmgJKHJl dmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8vIENvcHlyaWdodCAoQykg MjAxMi0yMDEzCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy8vCisv LyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisvLworLy8gR0NDIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAo YXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8g R0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJz aW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNz aW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhj ZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGli cmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBz ZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVz cGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworI2lmbmRlZiBfVlRWX01BTExPQ19ICisjZGVm aW5lIF9WVFZfTUFMTE9DX0ggMQorCisjaW5jbHVkZSA8c3RkbGliLmg+CisK Ky8qIEFsaWdubWVudCBtYXNrIGZvciBhbnkgb2JqZWN0IHJldHVybmVkIGJ5 IHRoZSBWVFYgbWVtb3J5IHBvb2wgKi8KKyNpZmRlZiBfX0xQNjRfXworI2Rl ZmluZSBWVFZfQUxJR05NRU5UX01BU0sgKDB4NykKKyNlbHNlCisjZGVmaW5l IFZUVl9BTElHTk1FTlRfTUFTSyAoMHgzKQorI2VuZGlmCisKK2V4dGVybiB2 b2lkIFZUVl9tYWxsb2NfaW5pdCAodm9pZCk7CisKK2V4dGVybiB2b2lkICpW VFZfbWFsbG9jIChzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCBWVFZfZnJl ZSAodm9pZCAqIHB0cik7CisKKworZXh0ZXJuIHZvaWQgVlRWX21hbGxvY19w cm90ZWN0ICh2b2lkKTsKK2V4dGVybiB2b2lkIFZUVl9tYWxsb2NfdW5wcm90 ZWN0ICh2b2lkKTsKKworZXh0ZXJuIHZvaWQgVlRWX21hbGxvY19zdGF0cyAo dm9pZCk7CitleHRlcm4gdm9pZCBWVFZfbWFsbG9jX2R1bXBfc3RhdHMgKHZv aWQpOworCisjZW5kaWYgLyogdnR2X21hbGxvYy5oICovCkluZGV4OiBsaWJz dGRjKystdjMvbGlic3VwYysrL3Z0dl9ydHMuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBsaWJzdGRjKystdjMvbGlic3VwYysrL3Z0dl9ydHMuaAko cmV2aXNpb24gMCkKKysrIGxpYnN0ZGMrKy12My9saWJzdXBjKysvdnR2X3J0 cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvLyBDb3B5cmln aHQgKEMpIDIwMTItMjAxMworLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u CisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdD QyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8g dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g Mywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24u CisKKy8vIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBH UEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8g cGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJy YXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50 aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5U SU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyNpZm5kZWYgX1ZUVl9SVFNfSAor I2RlZmluZSBfVlRWX1JUU19IIDEKKworI2luY2x1ZGUgPGNzdGRsaWI+CisK Ky8qIFRoaXMgcHJvdG90eXBlIG5lZWRzIHRvIGJlIGtlcHQgaW4gc3luYyB3 aXRoIHRoZSBjb21waWxlci0KKyAgIGdlbmVyYXRlZCBkZWNsYXJhdGlvbiBp biB2dGFibGUtY2xhc3MtaGllcmFyY2h5LmMuICAqLworCisvKiBXZSBjb3Vs ZCBoYXZlIHVzZWQgYW4gZW51bWVyYXRpb24gaGVyZSBidXQgaXQganVzdCBt YWtlcyBpdCBtb3JlCisgICBkaWZmaWN1bHQgZm9yIHRoZSBjb21waWxlciB0 byBnZW5lcmF0ZSBhIGNhbGwgdG8gdGhpcy4gICovCisjZGVmaW5lIF9fVkxU UF9SRUFEX09OTFkgIDAKKyNkZWZpbmUgX19WTFRQX1JFQURfV1JJVEUgMQor CitleHRlcm4gdm9pZCBfX1ZMVENoYW5nZVBlcm1pc3Npb24gKGludCk7Citl eHRlcm4gdm9pZCBfX1ZMVFJlZ2lzdGVyUGFpciAgICAgICh2b2lkICoqLCBj b25zdCB2b2lkICopOworZXh0ZXJuIHZvaWQgX19WTFRSZWdpc3RlclBhaXJE ZWJ1ZyAodm9pZCAqKiwgY29uc3Qgdm9pZCAqLCBjb25zdCBjaGFyICosCisJ CQkJICAgIGNvbnN0IGNoYXIgKik7CitleHRlcm4gY29uc3Qgdm9pZCAqX19W TFRWZXJpZnlWdGFibGVQb2ludGVyICAgICAgKHZvaWQgKiosIGNvbnN0IHZv aWQgKik7CitleHRlcm4gY29uc3Qgdm9pZCAqX19WTFRWZXJpZnlWdGFibGVQ b2ludGVyRGVidWcgKHZvaWQgKiosIGNvbnN0IHZvaWQgKiwKKwkJCQkJCSAg Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgX19W TFRJbml0U2V0U3ltYm9sRGVidWcgKHZvaWQgKiosIGNvbnN0IHZvaWQgKiwg c3RkOjpzaXplX3QpOworZXh0ZXJuIHZvaWQgX19WTFRJbml0U2V0U3ltYm9s ICAgICAgKHZvaWQgKiosIGNvbnN0IHZvaWQgKiwgc3RkOjpzaXplX3QgKTsK KworI2VuZGlmIC8qIF9WVFZfUlRTX0ggKi8KSW5kZXg6IGxpYnN0ZGMrKy12 My9saWJzdXBjKysvdnR2X2ZhaWwuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBsaWJzdGRjKystdjMvbGlic3VwYysrL3Z0dl9mYWlsLmgJKHJldmlz aW9uIDApCisrKyBsaWJzdGRjKystdjMvbGlic3VwYysrL3Z0dl9mYWlsLmgJ KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKy8vIENvcHlyaWdodCAo QykgMjAxMi0yMDEzCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKy8v CisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisvLworLy8gR0NDIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisvLyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBv ciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor Ly8gR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2 ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJt aXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkg RXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUg TGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07Cisv LyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUg cmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKworI2lmbmRlZiBfVlRWX0ZBSUxfSAorI2Rl ZmluZSBfVlRWX0ZBSUxfSCAxCisKKy8qIF9fdnR2X3JlYWxseV9mYWlsIHBy aW50cyBhIGJhY2t0cmFjZSBhbmQgYSBtZW1vcnkgZHVtcCwgdGhlbiBjYWxs cworICBhYm9ydC4gIEl0IGlzIGhlcmUgZm9yIHByb2dyYW1tZXJzIHRvIGNh bGwsIHByZXN1bWFibHkgZnJvbQorICBfX3Z0dl92ZXJpZnlfZmFpbCwgaWYg dGhleSBjaG9vc2UgdG8gb3ZlcndyaXRlIHRoZSBzdGFuZGFyZAorICBfX3Z0 dl92ZXJpZnlfZmFpbCB3aXRoIG9uZSBvZiB0aGVpciBvd24uICBQcm9ncmFt bWVycyBzaG91bGQgTk9UCisgIGF0dGVtcHQgdG8gcmV3cml0ZSBfX3Z0dl9y ZWFsbHlfZmFpbC4gKi8KKworZXh0ZXJuIHZvaWQKK19fdnR2X3JlYWxseV9m YWlsIChjb25zdCBjaGFyICpmYWlsX21zZykgX19hdHRyaWJ1dGVfXyAoKG5v cmV0dXJuKSk7CisKKy8qIF9fdnR2X3ZlcmlmeV9mYWlsIGlzIHRoZSBmdW5j dGlvbiB0aGF0IGdldHMgY2FsbGVkIGlmIHRoZSB2dGFibGUKKyAgdmVyaWZp Y2F0aW9uIGNvZGUgZGlzY292ZXJzIGEgdnRhYmxlIHBvaW50ZXIgdGhhdCBp dCBjYW5ub3QgdmVyaWZ5CisgIGFzIHZhbGlkLiAgTm9ybWFsbHkgX192dHZf dmVyaWZ5X2ZhaWwgY2FsbHMgX192dHZfcmVhbGx5X2ZhaWwuCisgIEhvd2V2 ZXIgcHJvZ3JhbW1lcnMgY2FuIHdyaXRlIGFuZCBsaW5rIGluIHRoZWlyIG93 biB2ZXJzaW9uIG9mCisgIF9fdnR2X3ZlcmlmeV9mYWlsLCBpZiB0aGV5IHdp c2ggdG8gZG8gc29tZSBraW5kIG9mIHNlY29uZGFyeQorICB2ZXJpZmljYXRp b24sIGZvciBleGFtcGxlLiAgVGhlIG1haW4gdmVyaWZpY2F0aW9uIGNvZGUg YXNzdW1lcyB0aGF0CisgIElGIF9fdnR2X3ZlcmlmeV9mYWlsIHJldHVybnMs IHRoZW4gc29tZSBraW5kIG9mIHNlY29uZGFyeQorICB2ZXJpZmljYXRpb24g d2FzIGRvbmUgQU5EIHRoYXQgdGhlIHNlY29uZGFyeSB2ZXJpZmljYXRpb24g c3VjY2VlZGVkLAorICBpLmUuIHRoYXQgdGhlIHZ0YWJsZSBwb2ludGVyIGlz IGFjdHVhbGx5IHZhbGlkIGFuZCBvayB0byB1c2UuICBJZgorICB0aGUgc2Vj b25kYXJ5IHZlcmlmaWNhdGlvbiBmYWlscywgdGhlbiBfX3Z0dl92ZXJpZnlf ZmFpbCBzaG91bGQgbm90CisgIHJldHVybi4gICovCisKK2V4dGVybiB2b2lk CitfX3Z0dl92ZXJpZnlfZmFpbCAodm9pZCAqKmRhdGFfc2V0X3B0ciwgY29u c3Qgdm9pZCAqdnRibF9wb2ludGVyKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1 bHQiKSkpOworCisjZW5kaWYgLyogX1ZUVl9GQUlMX0ggKi8KSW5kZXg6IGxp YnN0ZGMrKy12My9saWJzdXBjKysvdnR2X21hcC5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGxpYnN0ZGMrKy12My9saWJzdXBjKysvdnR2X21hcC5o CShyZXZpc2lvbiAwKQorKysgbGlic3RkYysrLXYzL2xpYnN1cGMrKy92dHZf bWFwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzExIEBACisvKiBDb3B5 cmlnaHQgKEMpIDIwMTItMjAxMworICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdDQy4KKworICAgR0ND IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz LCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKworICAgVW5kZXIgU2VjdGlvbiA3IG9mIEdQ TCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisgICBw ZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJh cnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisgICAzLjEsIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbmQKKyAgIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRp bWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07 CisgICBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJ TUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3 LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpZm5kZWYgX1ZUVl9NQVBf SAorI2RlZmluZSBfVlRWX01BUF9IIDEKKworI2luY2x1ZGUgPHN0cmluZy5o PgorI2luY2x1ZGUgPHZ0dl91dGlscy5oPgorCitpbmxpbmUgdWludDY0X3QK K2xvYWQ4Ynl0ZXMgKGNvbnN0IHZvaWQgKnApCit7CisgIHVpbnQ2NF90IHJl c3VsdDsKKyAgbWVtY3B5ICgmcmVzdWx0LCBwLCA4KTsKKyAgcmV0dXJuIHJl c3VsdDsKK30KKworLyogSW5zZXJ0X29ubHlfaGFzaF9tYXAgbWFwcyBrZXlz IHRvIHZhbHVlcy4gIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBhCisgICBiYXNp YyBoYXNoIHRhYmxlIHdpdGggb3BlbiBhZGRyZXNzaW5nLiAgVGhlIGtleXMg YXJlIG5vdCAib3duZWQiIGJ5CisgICB0aGUgdGFibGU7IGl0IG9ubHkgc3Rv cmVzIHBvaW50ZXJzIHRvIGtleXMuICBUaGUga2V5IHR5cGUgaXMKKyAgIHNw ZWNpZmllZCBiZWxvdyAoc2VlIGluc2VydF9vbmx5X2hhc2hfbWFwOjprZXlf dHlwZSkgYW5kIGlzLAorICAgcm91Z2hseSBzcGVha2luZywgYSBzdHJpbmcg b2YgYW55IGxlbmd0aCB3aXRoIHRoZSBzdHJpbmcgbGVuZ3RoIGFuZAorICAg YSBoYXNoIGNvZGUgc3RvcmVkIGF0IHRoZSBmcm9udC4gIFRoZSBjb2RlIGhl cmUgZG9lcyBub3QgY29tcHV0ZQorICAgYW55IGhhc2ggY29kZXMsIGJ1dCBy YXRoZXIgdXNlcyB3aGF0J3MgZ2l2ZW4uICAqLworCit0ZW1wbGF0ZTx0eXBl bmFtZSBULCB0eXBlbmFtZSBBbGxvYz4KK2NsYXNzIGluc2VydF9vbmx5X2hh c2hfbWFwCisgIHsKKyAgICBwdWJsaWM6CisgICAgICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CisgICAgICB0eXBlZGVmIFQgdmFsdWVfdHlwZTsKKyAg ICAgIHR5cGVkZWYgQWxsb2MgYWxsb2NfdHlwZTsKKyAgICAgIGVudW0geyBt aW5fY2FwYWNpdHkgPSA0IH07CisjaWYgSEFTSE1BUF9TVEFUUworICBlbnVt IHsgc3RhdHMgPSB0cnVlIH07CisjZWxzZQorICBlbnVtIHsgc3RhdHMgPSBm YWxzZSB9OworI2VuZGlmCisKKyAgLyogS2V5cyBhcmUgYSBieXRlIHN0cmlu ZyAodXAgdG8gMl4zMiAtIDEgbG9uZykgcGx1cyBhIHVpbnQzMl90CisgICAg IHRoYXQncyB1c2VkIGFzIGEgaGFzaCBjb2RlLiAgVGhlIGxhdHRlciBjYW4g ZW5jb2RlIGFyYml0cmFyeQorICAgICBpbmZvcm1hdGlvbiBhdCB0aGUgY2xp ZW50J3MgZGlzY3JldGlvbiwgc28sIGUuZy4sIG11bHRpcGxlIGtleXMKKyAg ICAgdGhhdCBhcmUgdGhlIHNhbWUgc3RyaW5nIHN0aWxsICJkaWZmZXIiIGlm IHRoZSBoYXNoIGNvZGVzIGRpZmZlci4KKyAgICAgS2V5cyBhcmUgZXF1YWwg aWYgdGhlIGZpcnN0IDggYnl0ZXMgYXJlIGVxdWFsIGFuZCB0aGUgbmV4dCBu CisgICAgIGJ5dGVzIGFyZSBlcXVhbC4gICovCisgIHN0cnVjdCBrZXlfdHlw ZQorICB7CisgICAgdWludDMyX3QgbjsKKyAgICB1aW50MzJfdCBoYXNoOwor ICAgIGNoYXIgYnl0ZXNbMF07CisKKyAgICBib29sCisgICAgZXF1YWxzIChj b25zdCBrZXlfdHlwZSAqaykgY29uc3Q7CisgIH07CisKKyAgLyogQ3JlYXRl IGFuIGVtcHR5IG1hcCB3aXRoIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgYnVj a2V0cyBmb3IgdGhlCisgICAgIGV4cGVjdGVkIHNpemUuICBSZXR1cm5zIE5V TEwgaWYgdGhlIGFsbG9jYXRvciBmYWlscy4gICovCisKKyAgc3RhdGljIGlu c2VydF9vbmx5X2hhc2hfbWFwICoKKyAgY3JlYXRlIChzaXplX3R5cGUgZXhw ZWN0ZWRfc2l6ZSk7CisKKyAgLyogVGhlIG9wcG9zaXRlIG9mIGNyZWF0ZSgp LiAgRnJlZSB0aGUgbWVtb3J5IGZvciB0aGUgZ2l2ZW4gbWFwLiAgKi8KKwor ICBzdGF0aWMgdm9pZAorICBkZXN0cm95IChpbnNlcnRfb25seV9oYXNoX21h cCAqbSkKKyAgeyBBbGxvYygpLmRlYWxsb2MgKG0sIG0tPnNpemVfaW5fYnl0 ZXNfKTsgfQorCisgIC8qIFJldHVybiBhIG1hcCBpZGVudGljYWwgdG8gdGhp cyBleGNlcHQgdGhhdCAqayBpcyBtYXBwZWQgdG8gdi4KKyAgICAgVHlwY2lh bGx5IGl0J3MgZG9uZSBieSBtb2RpZnlpbmcgdGhpcyBpbiBwbGFjZSwgYnV0 IGlmIGEgcmVzaXplCisgICAgIGlzIG5lY2Vzc2FyeSB0aGVuIHRoaXMgaXMg ZGVhbGxvY2F0ZWQgYW5kIGEgbmV3IG1hcCBpcyByZXR1cm5lZC4KKyAgICAg UmVxdWlyZXMgayB0byBiZSBub24tTlVMTC4gIERvZXMgbm90aGluZyBhbmQg cmV0dXJucyBOVUxMIGlmIHRoZQorICAgICBhbGxvY2F0b3IgZmFpbHMuICAq LworCisgIGluc2VydF9vbmx5X2hhc2hfbWFwKgorICBwdXQgKGNvbnN0IGtl eV90eXBlICprLCBjb25zdCB2YWx1ZV90eXBlICZ2KQorICB7IHJldHVybiB0 aGlzLT5wdXRfaW50ZXJuYWwgKGssIHYsIGZhbHNlKTsgfQorCisgIC8qIElm ICprIGlzIGEga2V5IGluIHRoaXMgdGhlbiBzZXQgKnYgdG8gcG9pbnQgdG8g dGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgdmFsdWUuICBPdGhlcndpc2UsIGRv IHRoZSBlcXVpdmFsZW50IG9mIGluc2VydChrLCB2YWx1ZV90eXBlKCkpCisg ICAgIGFuZCwgaWYgdGhhdCBzdWNjZWVkcywgc2V0ICp2IHRvIHBvaW50IHRv IHRoZSBpbnNlcnRlZCB2YWx1ZS4KKyAgICAgUmVxdWlyZXMgayB0byBiZSBu b24tTlVMTC4gIERvZXMgbm90aGluZyBhbmQgcmV0dXJucyBOVUxMIGlmIHRo ZQorICAgICBhbGxvY2F0b3IgZmFpbHMuICBUeXBpY2FsbHkgcmV0dXJucyB0 aGlzLCBidXQgd2lsbCByZXR1cm4gYSBuZXcKKyAgICAgaW5zZXJ0X29ubHlf aGFzaF9tYXAgaWYgYSByZXNpemUgb2NjdXJzLiAgSWYgdGhlIHJldHVybiB2 YWx1ZSBpcworICAgICBub24tTlVMTCwgKnYgaXMgc2V0IGFuZCBpdCdzIHZh bGlkIHVudGlsIGEgcmVzaXplIG9mIHRoZSBtYXAgdGhhdAorICAgICBpcyB0 aGUgcmV0dXJuIHZhbHVlLiAgKi8KKworICBpbnNlcnRfb25seV9oYXNoX21h cCAqCisgIGZpbmRfb3JfYWRkX2tleSAoY29uc3Qga2V5X3R5cGUgKmssIHZh bHVlX3R5cGUgKip2KTsKKworICAvKiBHZXQgdGhlIHZhbHVlIGNvcnJlc3Bv bmRpbmcgdG8gKmsuICBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgaXMKKyAgICAg bm9uZS4gIFJlcXVpcmVzIGsgdG8gYmUgbm9uLU5VTEwuICBUaGUgcmV0dXJu IHZhbHVlIGlzIHZhbGlkCisgICAgIHVudGlsIGFueSByZXNpemUuICAqLwor ICBjb25zdCB2YWx1ZV90eXBlICpnZXQgKGNvbnN0IGtleV90eXBlICprKSBj b25zdDsKKworICBzaXplX3R5cGUKKyAgc2l6ZSAoKSBjb25zdAorICB7IHJl dHVybiBudW1fZW50cmllc187IH0KKworICBib29sCisgIGVtcHR5ICgpIGNv bnN0CisgIHsgcmV0dXJuIHRoaXMtPnNpemUgKCkgPT0gMDsgfQorCisgIHNp emVfdHlwZQorICBidWNrZXRfY291bnQgKCkgY29uc3QKKyAgeyByZXR1cm4g bnVtX2J1Y2tldHNfOyB9CisKKyBwcml2YXRlOgorICB0eXBlZGVmIHN0ZDo6 cGFpciA8Y29uc3Qga2V5X3R5cGUgKiwgdmFsdWVfdHlwZT4gYnVja2V0X3R5 cGU7CisKKyAgaW5zZXJ0X29ubHlfaGFzaF9tYXAgKnB1dF9pbnRlcm5hbCAo Y29uc3Qga2V5X3R5cGUgKiwgY29uc3QgdmFsdWVfdHlwZSAmLAorCQkJCSAg ICAgIGJvb2wpOworCisgIC8qIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyB3 aGVuIHRvIHJlc2l6ZSB0aGUgdGFibGUuICAqLworICBib29sCisgIGlzX3Rv b19mdWxsIChzaXplX3R5cGUgZW50cmllcykgY29uc3QKKyAgeyByZXR1cm4g ZW50cmllcyA+ICh0aGlzLT5idWNrZXRfY291bnQgKCkgKiAwLjcpOyB9CisK KyAgLyogUmV0dXJuIGEgY29weSB3aXRoIGRvdWJsZSB0aGUgbnVtYmVyIG9m IGJ1Y2tldHMuICBSZXR1cm5zIE5VTEwgaWYKKyAgICAgdGhlIGFsbG9jYXRv ciBmYWlscy4gIE90aGVyd2lzZSwgY2FsbHMgZGVzdHJveSAodGhpcykuICAq LworICBpbnNlcnRfb25seV9oYXNoX21hcCAqZGVzdHJ1Y3RpdmVfY29weSAo KTsKKworIC8qIE11c3QgYmUgYSBwb3dlciBvZiAyIG5vdCBsZXNzIHRoYW4g bWluX2NhcGFjaXR5LiAqLworICBzaXplX3R5cGUgbnVtX2J1Y2tldHNfOyAK KyAgc2l6ZV90eXBlIG51bV9lbnRyaWVzXzsKKyAgc2l6ZV90eXBlIHNpemVf aW5fYnl0ZXNfOworICBidWNrZXRfdHlwZSBidWNrZXRzWzBdOyAgLyogQWN0 dWFsIGFycmF5IHNpemUgaXMgbnVtX2J1Y2tldHMuICAqLworfTsKKwordGVt cGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFsbG9jPgoraW5zZXJ0X29u bHlfaGFzaF9tYXAgPFQsIEFsbG9jPiAqCitpbnNlcnRfb25seV9oYXNoX21h cCA8VCwgQWxsb2M+OjpjcmVhdGUgKHNpemVfdHlwZSBleHBlY3RlZF9zaXpl KQoreworICBzaXplX3QgY2FwID0gbWluX2NhcGFjaXR5OworICB3aGlsZSAo ZXhwZWN0ZWRfc2l6ZSA+PSBjYXApCisgICAgeworICAgICAgY2FwICo9IDI7 CisgICAgfQorICBzaXplX3Qgc2l6ZV9pbl9ieXRlcyA9IHNpemVvZiAoaW5z ZXJ0X29ubHlfaGFzaF9tYXAgPFQsIEFsbG9jPikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBjYXAgKiBz aXplb2YgKGJ1Y2tldF90eXBlKTsKKyAgaW5zZXJ0X29ubHlfaGFzaF9tYXAg PFQsIEFsbG9jPiogcmVzdWx0ID0KKyAgICAgIHN0YXRpY19jYXN0IDxpbnNl cnRfb25seV9oYXNoX21hcCA8VCwgQWxsb2M+Kj4gKEFsbG9jICgpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLmFsbG9jIChzaXplX2luX2J5dGVzKSk7CisgIGlmIChyZXN1bHQg IT0gTlVMTCkKKyAgICB7CisgICAgICByZXN1bHQtPnNpemVfaW5fYnl0ZXNf ID0gc2l6ZV9pbl9ieXRlczsKKyAgICAgIHJlc3VsdC0+bnVtX2J1Y2tldHNf ID0gY2FwOworICAgICAgcmVzdWx0LT5udW1fZW50cmllc18gPSAwOworICAg ICAgbWVtc2V0IChyZXN1bHQtPmJ1Y2tldHMsIDAsIGNhcCAqIHNpemVvZiAo YnVja2V0X3R5cGUpKTsKKyAgICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisK K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvYz4KK2luc2Vy dF9vbmx5X2hhc2hfbWFwIDxULCBBbGxvYz4qCitpbnNlcnRfb25seV9oYXNo X21hcCA8VCwgQWxsb2M+OjpkZXN0cnVjdGl2ZV9jb3B5ICgpCit7CisgIGlu c2VydF9vbmx5X2hhc2hfbWFwKiBjb3B5ID0gY3JlYXRlICh0aGlzLT5idWNr ZXRfY291bnQgKCkpOworICBpZiAoY29weSA9PSBOVUxMKQorICAgIHJldHVy biBOVUxMOworICBWVFZfREVCVUdfQVNTRVJUIChjb3B5LT5idWNrZXRfY291 bnQgKCkgPT0gMiAqIHRoaXMtPmJ1Y2tldF9jb3VudCAoKSk7CisgIGZvciAo c2l6ZV90eXBlIGkgPSAwOyBpIDwgdGhpcy0+YnVja2V0X2NvdW50ICgpOyBp KyspCisgICAgaWYgKHRoaXMtPmJ1Y2tldHNbaV0uZmlyc3QgIT0gTlVMTCkK KyAgICAgIGNvcHktPnB1dF9pbnRlcm5hbCAodGhpcy0+YnVja2V0c1tpXS5m aXJzdCwgdGhpcy0+YnVja2V0c1tpXS5zZWNvbmQsCisJCQkgIHRydWUpOwor ICBWVFZfREVCVUdfQVNTRVJUIChjb3B5LT5zaXplICgpID09IHRoaXMtPnNp emUgKCkpOworICBkZXN0cm95ICh0aGlzKTsKKyAgcmV0dXJuIGNvcHk7Cit9 CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvYz4KK2lu c2VydF9vbmx5X2hhc2hfbWFwIDxULCBBbGxvYz4qCitpbnNlcnRfb25seV9o YXNoX21hcCA8VCwgQWxsb2M+OjpmaW5kX29yX2FkZF9rZXkgKGNvbnN0IGtl eV90eXBlICprLAorCQkJCQkJICB2YWx1ZV90eXBlICoqdikKK3sKKyAgLyog VGFibGUgc2l6ZSBpcyBhbHdheXMgYSBwb3dlciBvZiAyLiAgKi8KKyAgY29u c3Qgc2l6ZV90eXBlIG1hc2sgPSB0aGlzLT5idWNrZXRfY291bnQgKCkgLSAx OworICBzaXplX3R5cGUgYnVja2V0X2luZGV4ID0gay0+aGFzaCAmIG1hc2s7 CisgIHNpemVfdHlwZSBzdGVwID0gMTsKKyAgZm9yICg7OykKKyAgICB7Cisg ICAgICBidWNrZXRfdHlwZSAmYnVja2V0ID0gdGhpcy0+YnVja2V0c1tidWNr ZXRfaW5kZXhdOworICAgICAgaWYgKGJ1Y2tldC5maXJzdCA9PSBOVUxMKQor ICAgICAgICB7CisgICAgICAgICAgLyogS2V5IHdhcyBub3QgcHJlc2VudC4g Ki8KKyAgICAgICAgICBpZiAodGhpcy0+aXNfdG9vX2Z1bGwgKHRoaXMtPnNp emUgKCkgKyAxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW5z ZXJ0X29ubHlfaGFzaF9tYXAgPFQsIEFsbG9jPiogcmVzdWx0ID0KKwkJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmRlc3Ry dWN0aXZlX2NvcHkgKCk7CisgICAgICAgICAgICAgIHJldHVybiByZXN1bHQg PT0gTlVMTAorICAgICAgICAgICAgICAgICAgPyBOVUxMCisgICAgICAgICAg ICAgICAgICA6IHJlc3VsdC0+ZmluZF9vcl9hZGRfa2V5IChrLCB2KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIGJ1Y2tldC5maXJzdCA9IGs7CisgICAgICAgICAgICAg IGJ1Y2tldC5zZWNvbmQgPSBUICgpOworICAgICAgICAgICAgICB0aGlzLT5u dW1fZW50cmllc18rKzsKKyAgICAgICAgICAgICAgKnYgPSAmYnVja2V0LnNl Y29uZDsKKyAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGJ1Y2tldC5maXJzdC0+ ZXF1YWxzIChrKSkKKyAgICAgICAgeworICAgICAgICAgIC8qIEtleSB3YXMg cHJlc2VudC4gKi8KKyAgICAgICAgICAqdiA9ICZidWNrZXQuc2Vjb25kOwor ICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICBlbHNl CisgICAgICAgIGJ1Y2tldF9pbmRleCA9IChidWNrZXRfaW5kZXggKyBzdGVw KyspICYgbWFzazsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU LCB0eXBlbmFtZSBBbGxvYz4KK2luc2VydF9vbmx5X2hhc2hfbWFwIDxULCBB bGxvYz4qCitpbnNlcnRfb25seV9oYXNoX21hcCA8VCwgQWxsb2M+OjpwdXRf aW50ZXJuYWwgKAorCQkJCSAgICAgY29uc3QgaW5zZXJ0X29ubHlfaGFzaF9t YXA6OmtleV90eXBlICprLAorCQkJCSAgICAgY29uc3QgaW5zZXJ0X29ubHlf aGFzaF9tYXA6OnZhbHVlX3R5cGUgJnYsCisJCQkJICAgICBib29sIHVuaXF1 ZV9rZXlfYW5kX3Jlc2l6ZV9ub3RfbmVlZGVkKQoreworICAvKiBUYWJsZSBz aXplIGlzIGFsd2F5cyBhIHBvd2VyIG9mIDIuICAqLworICBjb25zdCBzaXpl X3R5cGUgbWFzayA9IHRoaXMtPmJ1Y2tldF9jb3VudCAoKSAtIDE7CisgIHNp emVfdHlwZSBidWNrZXRfaW5kZXggPSBrLT5oYXNoICYgbWFzazsKKyAgc2l6 ZV90eXBlIHN0ZXAgPSAxOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGJ1 Y2tldF90eXBlICZidWNrZXQgPSB0aGlzLT5idWNrZXRzW2J1Y2tldF9pbmRl eF07CisgICAgICBpZiAoYnVja2V0LmZpcnN0ID09IE5VTEwpCisgICAgICAg IHsKKyAgICAgICAgICAvKiBLZXkgd2FzIG5vdCBwcmVzZW50LiAgKi8KKyAg ICAgICAgICBpZiAoIXVuaXF1ZV9rZXlfYW5kX3Jlc2l6ZV9ub3RfbmVlZGVk CisgICAgICAgICAgICAgICYmIHRoaXMtPmlzX3Rvb19mdWxsICh0aGlzLT5z aXplICgpICsgMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlu c2VydF9vbmx5X2hhc2hfbWFwIDxULCBBbGxvYz4qIHJlc3VsdCA9CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRoaXMtPmRlc3RydWN0aXZlX2NvcHkgKCk7CisgICAgICAgICAgICAg IHJldHVybiByZXN1bHQgPT0gTlVMTAorICAgICAgICAgICAgICAgICAgPyBO VUxMCisgICAgICAgICAgICAgICAgICA6IHJlc3VsdC0+cHV0X2ludGVybmFs IChrLCB2LCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGJ1Y2tldC5maXJzdCA9 IGs7CisgICAgICAgICAgICAgIGJ1Y2tldC5zZWNvbmQgPSB2OworICAgICAg ICAgICAgICB0aGlzLT5udW1fZW50cmllc18rKzsKKyAgICAgICAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg IGVsc2UgaWYgKCF1bmlxdWVfa2V5X2FuZF9yZXNpemVfbm90X25lZWRlZCAm JiBidWNrZXQuZmlyc3QtPmVxdWFscyAoaykpCisgICAgICAgIHsKKyAgICAg ICAgICAvKiBLZXkgd2FzIHByZXNlbnQuICBKdXN0IGNoYW5nZSB0aGUgdmFs dWUuICAqLworICAgICAgICAgIGJ1Y2tldC5zZWNvbmQgPSB2OworICAgICAg ICAgIHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICBlbHNlCisgICAg ICAgIGJ1Y2tldF9pbmRleCA9IChidWNrZXRfaW5kZXggKyBzdGVwKyspICYg bWFzazsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl bmFtZSBBbGxvYz4KK2NvbnN0IHR5cGVuYW1lIGluc2VydF9vbmx5X2hhc2hf bWFwIDxULCBBbGxvYz46OnZhbHVlX3R5cGUqCitpbnNlcnRfb25seV9oYXNo X21hcCA8VCwgQWxsb2M+OjpnZXQgKGNvbnN0IGluc2VydF9vbmx5X2hhc2hf bWFwOjprZXlfdHlwZSAqaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QKK3sKKyAgLyogVGFibGUgc2l6ZSBpcyBhbHdheXMgYSBwb3dl ciBvZiAyLiAgKi8KKyAgY29uc3Qgc2l6ZV90eXBlIG1hc2sgPSB0aGlzLT5i dWNrZXRfY291bnQgKCkgLSAxOworICBzaXplX3R5cGUgYnVja2V0X2luZGV4 ID0gay0+aGFzaCAmIG1hc2s7CisgIHNpemVfdHlwZSBzdGVwID0gMTsKKyAg Zm9yICg7OykKKyAgICB7CisgICAgICBjb25zdCBidWNrZXRfdHlwZSAmYnVj a2V0ID0gdGhpcy0+YnVja2V0c1tidWNrZXRfaW5kZXhdOworICAgICAgaWYg KGJ1Y2tldC5maXJzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsK KyAgICAgIGVsc2UgaWYgKGJ1Y2tldC5maXJzdC0+ZXF1YWxzIChrKSkKKyAg ICAgICAgcmV0dXJuICZidWNrZXQuc2Vjb25kOworICAgICAgZWxzZQorICAg ICAgICBidWNrZXRfaW5kZXggPSAoYnVja2V0X2luZGV4ICsgc3RlcCsrKSAm IG1hc2s7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw ZW5hbWUgQWxsb2M+Citib29sCitpbnNlcnRfb25seV9oYXNoX21hcCA8VCwg QWxsb2M+OjprZXlfdHlwZTo6ZXF1YWxzICgKKyAgICAgICAgICAgICBjb25z dCB0eXBlbmFtZSBpbnNlcnRfb25seV9oYXNoX21hcCA8VCwgQWxsb2M+Ojpr ZXlfdHlwZSAqaykgY29uc3QKK3sKKyAgY29uc3QgY2hhciogeCA9IHJlaW50 ZXJwcmV0X2Nhc3QgPGNvbnN0IGNoYXIgKj4gKGspOworICBjb25zdCBjaGFy KiB5ID0gcmVpbnRlcnByZXRfY2FzdCA8Y29uc3QgY2hhciAqPiAodGhpcyk7 CisgIHJldHVybiAobG9hZDhieXRlcyAoeCkgPT0gbG9hZDhieXRlcyAoeSkK KyAgICAgICAgICAmJiBtZW1jbXAgKHggKyA4LCB5ICsgOCwgdGhpcy0+bikg PT0gMCk7Cit9CisKKyNlbmRpZiAgLyogX1ZUVl9NQVBfSCAgKi8KSW5kZXg6 IGxpYnN0ZGMrKy12My9jb25maWcvYWJpL3ByZS9nbnUudmVyCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGxpYnN0ZGMrKy12My9jb25maWcvYWJpL3By ZS9nbnUudmVyCShyZXZpc2lvbiAxOTY1MTYpCisrKyBsaWJzdGRjKystdjMv Y29uZmlnL2FiaS9wcmUvZ251LnZlcgkod29ya2luZyBjb3B5KQpAQCAtMTMz Niw2ICsxMzM2LDE5IEBAIEdMSUJDWFhfMy40LjE4IHsKICAgICAgIHN0ZDo6 X19kZXRhaWw6Ol9QcmltZV9yZWhhc2hfcG9saWN5OjoqOwogICAgIH07CiAK KyAgICAjIFZpcnR1YWwgdGFibGUgdmVyaWZpY2F0aW9uIHN5bWJvbHMKKyAg ICBfWjEyX19WTFRwcm90ZWN0djsKKyAgICBfWjE0X19WTFR1bnByb3RlY3R2 OworICAgIF9aMThfX1ZMVEluaXRTZXRTeW1ib2wqOworICAgIF9aMjNfX1ZM VEluaXRTZXRTeW1ib2xEZWJ1Zyo7CisgICAgX1oxN19fVkxUUmVnaXN0ZXJQ YWlyKjsKKyAgICBfWjIyX19WTFRSZWdpc3RlclBhaXJEZWJ1Zyo7CisgICAg X1oyMV9fVkxUQ2hhbmdlUGVybWlzc2lvbio7CisgICAgX1oyNF9fVkxUVmVy aWZ5VnRhYmxlUG9pbnRlcio7CisgICAgX1oyOV9fVkxUVmVyaWZ5VnRhYmxl UG9pbnRlckRlYnVnKjsKKyAgICBfWjE3X192dHZfdmVyaWZ5X2ZhaWwqOwor ICAgIF9aMTdfX3Z0dl9yZWFsbHlfZmFpbCo7CisKICAgICAjIHN0ZDo6dGhp c190aHJlYWQ6Ol9fc2xlZXBfZm9yCiAgICAgX1pOU3QxMXRoaXNfdGhyZWFk MTFfX3NsZWVwX2Zvcio7CiAKSW5kZXg6IGxpYnN0ZGMrKy12My9hY2luY2x1 ZGUubTQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbGlic3RkYysrLXYz L2FjaW5jbHVkZS5tNAkocmV2aXNpb24gMTk2NTE2KQorKysgbGlic3RkYysr LXYzL2FjaW5jbHVkZS5tNAkod29ya2luZyBjb3B5KQpAQCAtMjIwNyw2ICsy MjA3LDI1IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9FWFRFUk5fVEVN UExBVEUKIF0pCiAKIGRubAorZG5sIFVzZSB2dGFibGUgdmVyaWZpY2F0aW9u LgorZG5sCitkbmwgLS1lbmFibGUtdnRhYmxlLXZlcmlmeSBkZWZpbmVzIF9H TElCQ1hYX1ZUQUJMRV9WRVJJRlkgdG8gMQorZG5sIC0tZGlzYWJsZS12dGFi bGUtdmVyaWZ5IGRlZmluZXMgX0dMSUJDWFhfVlRBQkxFX1ZFUklGWSB0byAw CisKK2RubCAgKyAgVXNhZ2U6ICBHTElCQ1hYX0VOQUJMRV9WVEFCTEVfVkVS SUZZWyhERUZBVUxUKV0KK2RubCAgICAgICBXaGVyZSBERUZBVUxUIGlzIGB5 ZXMnIG9yIGBubycuCitkbmwKK0FDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9W VEFCTEVfVkVSSUZZXSwgWworCisgIEdMSUJDWFhfRU5BQkxFKHZ0YWJsZS12 ZXJpZnksJDEsLFtlbmFibGUgdnRhYmxlIHZlcmlmeV0pCisKKyAgQUNfTVNH X0NIRUNLSU5HKFtmb3IgdnRhYmxlIHZlcmlmeSBzdXBwb3J0XSkKKyAgQUNf TVNHX1JFU1VMVChbJGVuYWJsZV92dGFibGVfdmVyaWZ5XSkKKworICBHTElC Q1hYX0NPTkRJVElPTkFMKEVOQUJMRV9WVEFCTEVfVkVSSUZZLCB0ZXN0ICRl bmFibGVfdnRhYmxlX3ZlcmlmeSA9IHllcykKK10pCisKK2RubAogZG5sIENo ZWNrIGZvciBwYXJhbGxlbCBtb2RlIHByZS1yZXF1aXNpdGVzLCBpbmNsdWRp bmcgT3Blbk1QIHN1cHBvcnQuCiBkbmwKIGRubCAgKyAgVXNhZ2U6ICBHTElC Q1hYX0VOQUJMRV9QQVJBTExFTApJbmRleDogY29uZmlndXJlLmFjCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZ3VyZS5hYwkocmV2aXNpb24g MTk2NTE2KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0z MTU3LDEwICszMTU3LDEwIEBAIEdDQ19UQVJHRVRfVE9PTChhcywgQVNfRk9S X1RBUkdFVCwgQVMsIFsKIEdDQ19UQVJHRVRfVE9PTChjYywgQ0NfRk9SX1RB UkdFVCwgQ0MsIFtnY2MveGdjYyAtQiQkci8kKEhPU1RfU1VCRElSKS9nY2Mv XSkKIGRubCBzZWUgY29tbWVudHMgZm9yIENYWF9GT1JfVEFSR0VUX0ZMQUdf VE9fUEFTUwogR0NDX1RBUkdFVF9UT09MKGMrKywgQ1hYX0ZPUl9UQVJHRVQs IENYWCwKLQkJW2djYy94ZysrIC1CJCRyLyQoSE9TVF9TVUJESVIpL2djYy8g LW5vc3RkaW5jKysgYGlmIHRlc3QgLWYgJCRyLyQoVEFSR0VUX1NVQkRJUikv bGlic3RkYysrLXYzL3NjcmlwdHMvdGVzdHN1aXRlX2ZsYWdzOyB0aGVuICQo U0hFTEwpICQkci8kKFRBUkdFVF9TVUJESVIpL2xpYnN0ZGMrKy12My9zY3Jp cHRzL3Rlc3RzdWl0ZV9mbGFncyAtLWJ1aWxkLWluY2x1ZGVzOyBlbHNlIGVj aG8gLWZ1bmNvbmZpZ3VyZWQtbGlic3RkYysrLXYzIDsgZmlgIC1MJCRyLyQo VEFSR0VUX1NVQkRJUikvbGlic3RkYysrLXYzL3NyYyAtTCQkci8kKFRBUkdF VF9TVUJESVIpL2xpYnN0ZGMrKy12My9zcmMvLmxpYnNdLAorCQlbZ2NjL3hn KysgLUIkJHIvJChIT1NUX1NVQkRJUikvZ2NjLyAtbm9zdGRpbmMrKyBgaWYg dGVzdCAtZiAkJHIvJChUQVJHRVRfU1VCRElSKS9saWJzdGRjKystdjMvc2Ny aXB0cy90ZXN0c3VpdGVfZmxhZ3M7IHRoZW4gJChTSEVMTCkgJCRyLyQoVEFS R0VUX1NVQkRJUikvbGlic3RkYysrLXYzL3NjcmlwdHMvdGVzdHN1aXRlX2Zs YWdzIC0tYnVpbGQtaW5jbHVkZXM7IGVsc2UgZWNobyAtZnVuY29uZmlndXJl ZC1saWJzdGRjKystdjMgOyBmaWAgLUwkJHIvJChUQVJHRVRfU1VCRElSKS9s aWJzdGRjKystdjMvc3JjIC1MJCRyLyQoVEFSR0VUX1NVQkRJUikvbGlic3Rk YysrLXYzL3NyYy8ubGlicyAtTCQkci8kKFRBUkdFVF9TVUJESVIpL2xpYnN0 ZGMrKy12My9saWJzdXBjKysvLmxpYnNdLAogCQljKyspCiBHQ0NfVEFSR0VU X1RPT0woYysrIGZvciBsaWJzdGRjKyssIFJBV19DWFhfRk9SX1RBUkdFVCwg Q1hYLAotCQlbZ2NjL3hnY2MgLXNoYXJlZC1saWJnY2MgLUIkJHIvJChIT1NU X1NVQkRJUikvZ2NjIC1ub3N0ZGluYysrIC1MJCRyLyQoVEFSR0VUX1NVQkRJ UikvbGlic3RkYysrLXYzL3NyYyAtTCQkci8kKFRBUkdFVF9TVUJESVIpL2xp YnN0ZGMrKy12My9zcmMvLmxpYnNdLAorCQlbZ2NjL3hnY2MgLXNoYXJlZC1s aWJnY2MgLUIkJHIvJChIT1NUX1NVQkRJUikvZ2NjIC1ub3N0ZGluYysrIC1M JCRyLyQoVEFSR0VUX1NVQkRJUikvbGlic3RkYysrLXYzL3NyYyAtTCQkci8k KFRBUkdFVF9TVUJESVIpL2xpYnN0ZGMrKy12My9zcmMvLmxpYnMgLUwkJHIv JChUQVJHRVRfU1VCRElSKS9saWJzdGRjKystdjMvbGlic3VwYysrLy5saWJz XSwKIAkJYysrKQogR0NDX1RBUkdFVF9UT09MKGRsbHRvb2wsIERMTFRPT0xf Rk9SX1RBUkdFVCwgRExMVE9PTCwgW2JpbnV0aWxzL2RsbHRvb2xdKQogR0ND X1RBUkdFVF9UT09MKGdjYywgR0NDX0ZPUl9UQVJHRVQsICwgW2djYy94Z2Nj IC1CJCRyLyQoSE9TVF9TVUJESVIpL2djYy9dKQo= --047d7b86e2f8831f4104d75e6a83--