Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3HQW-0014fm-26 for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 17:44:57 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3HQU-001ayI-0p for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 17:44:54 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w3HQS-001ay5-2n for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 17:44:54 +0000 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3HQO-000000002N2-1SCa for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 17:44:51 +0000 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-43b4915161fso1104923f8f.2 for ; Thu, 19 Mar 2026 10:44:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773942285; cv=none; d=google.com; s=arc-20240605; b=dm0y9Wo1zWJjiXr9amoURp3ANnlRGhRSLT7ioU4mYjE6XkBECw+YPS9H8bObF7VMTq 5lInsS7RLiQK++gktDz4oPBo36trglzF3aoipqmdFWEL8N5QFC/BkEhqRxZdXySF1nJM 58E1Enr5D4X7u3DbVKLSjMfAAWNSHdJRTxodQYi87vJWVO00QsJYafW5hiYqz0YEM+r1 HDgjy1S/5XT5ixL0wojwlU3EhHWuOWfFkLZ4ubTKmUaJabTKKiZ5bYi/05W6dtY6i58j azM6HHoCdsk4ksnoCGspMW4ACArc0UEYdI7fFYg6r3E4gixrljWDNs7e2FGk329Uld2P elXg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=dgmbUUItP3TP7Z6l3nGPMfms+3DICaj8mhUDW1MvBXU=; fh=rFlcorbZ2tGlSIhkybBe1i5UCQDLeFQH6dA9hLF71QI=; b=DrA+CdpoR7cwKkf//229H4UaJtd3g98K0zQkAJrI5sXNMIXpOEJHU1CQR5qnI/OybV qkCm88cCkzpZzNu7iIo077eZbUqWT+cv8aPZE6xe9oO6p4OeeYRcSgKfZogJ5XcP8rYn fzUlhkEgnjpuoUynOnbN1wSfb7uqbi/Z1f8fX2Dpz6oSHkE+WVJsH1caiaDjM058cLl/ MDbD9U9wmXKAB7KDL+Eg6FmRHEb/33DQt8C2BEfMzjpZHR0tAtYGGuAg4orPDB+MmR/z +tXanY2nTRpF8g+nolkGxT0FjDOSfYiRs29H+xGR3W/VHWvPKx2dS2+HbXeh5+l5NcD4 qLDw==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1773942285; x=1774547085; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dgmbUUItP3TP7Z6l3nGPMfms+3DICaj8mhUDW1MvBXU=; b=dTDUJ2+AkpxBUl4junX8LqTg9hpktj1C9I1xXLECa2iQ064DqfaJU+DHwWoav9STbb 9EuPCIwiF0mroejVuFu/V3XRX1Wm9eEFHu6frmgr0uxLFGYvWBzkFZeC9AKNt6vv3R7o CHJlh4Q33Ny8y8UsEb2MukhYv9VlPZVwkNLh25tRxOYdhCLdlHqe8L4FcukrX1jjSMG3 83qKWgjEYUS7JnBFKCyDBj6XebFlxYVOmi5qbTCmwWCroMxcj962ITwAQ4eZ4AX1+uWl qxlDaGOz04/lGsj1riOxbs0QdbGcbRcIPN4CR4vRhMLY14j7wZ3FOx516gwLU1lbcgH2 +EuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773942285; x=1774547085; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=dgmbUUItP3TP7Z6l3nGPMfms+3DICaj8mhUDW1MvBXU=; b=F0o2ixmoLwhrukfL+to0GauZ3PeXLZvn+G3dCRDlcK06DGae/6kXsbJ99Cu0yJ5+G8 AlGjXZ8FI41vYuzzdBirshhvXnS3drYg9gDOYDs4qNT30yxIQSQayZ74OhdsJZ5eRrZA MXkmA5j0Qj3mbmeoscCrIsfRXe/eO7sLEaANocl2C/yWSvH0EBigp0LpygKCFTKPhsb0 /0iV/Rd85xBg+gC1Y9yN+DWGxGMjQNeojlGUuMnC/LbHa9mt+RtokXZ1Oi/jp1QaQ0ya ErTwz0rVACIxTxtk1JQ5AUJixgItD5kieidt4uEHcO6bPuP3rIGNpTqX+2P050ggJMNl r+Ag== X-Forwarded-Encrypted: i=1; AJvYcCWf2hw3VRtcYhn7wjT8gDYYWmM2tIv7JEmAab3g4UB3idBOIEg6f7AODhz0U670OasMrafK1myfEdkfiEls@lists.postgresql.org X-Gm-Message-State: AOJu0Yxnp/QgtkBSDt2eNvSnOLHEnJuPZ8irEUcUKaFnIukLuQi+r9U9 jUq01TUcSeBZzj0O8KB9gFGnq6zeJji9bs1l3hIz2GFKiFxKakyWBpq1QnzE5T+f6zg/9P8f7um 7tzNg9D1Z/L9xY8oIj6nCI6HaezFcRsq9B72qwDh4SQ== X-Gm-Gg: ATEYQzxA8+tk3pW4TETB5hel16Ne3sCpMTjJQMdrRy8KeC+jn+6/8N/CJ91oRe3qt0o E8YRggvteGRQ3jpM6GHv6CBPYA2Yyo6ukzKn8lseLtjRfcPtu61Sv8vfwjhLtS/aZqNLjInUCZ8 EDcLY+9p7lt7GnQTzbD12960bKhCuEA4gpR9dilVwnExNS55/scL2W1bppHPn+uwUJXf0l6C388 DETfyT8WoE9FnPGxbMrmk/rdMeIa2Q6poZdg6alu1urFP3u2x9EDcEfrsmU1eRT3wAG+BbMpkOC xVytBr8= X-Received: by 2002:a05:6000:2dc2:b0:43b:5094:a9bf with SMTP id ffacd0b85a97d-43b64263f98mr376450f8f.29.1773942284422; Thu, 19 Mar 2026 10:44:44 -0700 (PDT) MIME-Version: 1.0 References: <52512325-b1f2-4fff-819e-f68122b2e427@vondra.me> <64mfcfv7iihc4pmqlxarii4esnmqry52ckz5m7lmwylnfnuxuz@oxh4ioxkjtep> In-Reply-To: From: Peter Geoghegan Date: Thu, 19 Mar 2026 13:44:16 -0400 X-Gm-Features: AaiRm52estp2j0P_K3tQHsTYhYW9qPM2Dx8Lkb6bb31WIzNM--mMf0axrCWuG5s Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000b7842d064d641fbb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b7842d064d641fbb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 17, 2026 at 1:37=E2=80=AFPM Peter Geoghegan wrote: > v14 has already bitrot, so I'm posting this new v15 to keep the > patchset applying cleanly. And now v15 has bitrot. So here's a new v16. There are 2 notable updates he= re. Most notably, I decided to take a more conservative approach to fixing the issues with the selfuncs.c mechanism that gives up when get_actual_variable_range does too much work during planning. Rather than inventing a new approach that bases the decision to give up on the number of leaf pages accessed, which has certain advantages [1], I have decided to cut scope and more or less reimplement the existing VISITED_PAGES_LIMIT mechanism on the heapam side. This was a pragmatic choice; there is no clear consensus on whether the design I proposed for this will be acceptable, and we lack the time to resolve those issues now. To recap, selfuncs.c can no longer be the place where VISITED_PAGES_LIMIT is implemented, because the new slot-based interface won't return until it finds a visible tuple. The new higher-level interface simply cannot support callers that want to count the number of heap pages examined themselves. The other notable change aims to improve performance for cached workloads through more aggressive specialization of callback routines like heapam_index_getnext_slot. There are now a total of 4 versions: 1. One for index-only scans + amgetbatch. 2. One for one for index-only scans + amgettuple. 3. One for plain index scans + amgetbatch. 4. One for plain index scans + amgettuple. I've also aggressively used pg_attribute_always_inline (without this specialization, performance ends up worse rather than better). There might be some concerns about the distributed costs of increased code size. But this revision is the fastest so far across all available metrics (though of course the specialization work is focussed on cached query performance specifically). [1] (see https://www.postgresql.org/message-id/flat/CAH2-Wzkt1WkKp4VRJu3qHf= mKXc8W%2BXYv1RXg5d2d3fSvAeO%3Drg%40mail.gmail.com) --=20 Peter Geoghegan --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0015-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Disposition: attachment; filename="v16-0015-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehip3 RnJvbSA2MGFmMTg1NTMwMDY1ZjhiODVmMjk0ZjdiZDFiMzM2ZTgwMzNiMjMyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDE1 LzE3XSBXSVA6IGFpbzogaW9fdXJpbmc6IFVzZSBJTyBzaXplIG5vdCBJTyBxdWV1ZSB0bwogdHJp Z2dlciBhc3luYyBwcm9jZXNzaW5nCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA1NyArKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggNTJhMThhMzU3Li41ZGM0MjdhZjIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCkBAIC00MDksNyAr NDA5LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2Vk X2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0cnVjdCBpb191cmluZyAqdXJp bmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+aW9fdXJpbmdfcmluZzsKLQlp bnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5p bl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lvcyA8PSBQR0FJT19TVUJNSVRf QkFUQ0hfU0laRSk7CiAKQEAgLTQyNSwyNyArNDI0LDYgQEAgcGdhaW9fdXJpbmdfc3VibWl0KHVp bnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCiAJCXBnYWlv X2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5nX3NxX2Zyb21faW8oaW9oLCBz cWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElPIGluIHByb2Nlc3MgY29udGV4 dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBnb29kLCBhcyBpdCByZWR1Y2Vz IGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQotCQkgKiBsb3Qgb2YgYnVmZmVy ZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZAotCQkg KiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVncm91bmQsIGFzIGl0IGNhbid0 IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMgaXMgcG9zc2libGUgd2hlbiB1 c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEgbG90IG9mIGJ1ZmZlcmVkIElP IHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkgKiB0aGFuIHdvcmtlciBtb2Rl LCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlpbmcuIGlvX3VyaW5nCi0JCSAq IGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIgdGhyZWFkcyBpbnN0ZWFkLgot CQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQgd2UgYWxyZWFkeSBoYXZlIElP cyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBiZWluZyBzdWJtaXR0ZWQsIHdl IHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRoZSBJTyBpbiB0aGUgYmFja2dy b3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcgSU9zCi0JCSAqIGJlaW5nIHN1 Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBjb250ZXh0IGhhcyBsb3dlcgot CQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9iZWZvcmUgPiA0ICYmIChpb2gt PmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJpbmdfc3FlX3NldF9mbGFncyhz cWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3JlKys7CiAJfQogCiAJd2hpbGUg KHRydWUpCkBAIC03MDksNiArNjg3LDcgQEAgc3RhdGljIHZvaWQKIHBnYWlvX3VyaW5nX3NxX2Zy b21faW8oUGdBaW9IYW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewogCXN0 cnVjdCBpb3ZlYyAqaW92OworCXNpemVfdAkJaW9fc2l6ZSA9IDA7CiAKIAlzd2l0Y2ggKChQZ0Fp b09wKSBpb2gtPm9wKQogCXsKQEAgLTcyMSw2ICs3MDAsOCBAQCBwZ2Fpb191cmluZ19zcV9mcm9t X2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJ ICAgaW92LT5pb3ZfYmFzZSwKIAkJCQkJCQkJICAgaW92LT5pb3ZfbGVuLAogCQkJCQkJCQkgICBp b2gtPm9wX2RhdGEucmVhZC5vZmZzZXQpOworCisJCQkJaW9fc2l6ZSA9IGlvdi0+aW92X2xlbjsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTczMCw3ICs3MTEsMzkgQEAgcGdhaW9fdXJpbmdfc3Ff ZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJ CQkJCQlpb2gtPm9wX2RhdGEucmVhZC5pb3ZfbGVuZ3RoLAogCQkJCQkJCQkJaW9oLT5vcF9kYXRh LnJlYWQub2Zmc2V0KTsKIAorCQkJCWZvciAoaW50IGkgPSAwOyBpIDw9IGlvaC0+b3BfZGF0YS5y ZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92KyspCisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVu OwogCQkJfQorCisKKwkJCS8qCisJCQkgKiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNz IGNvbnRleHQgaWYgcG9zc2libGUuIFRoYXQncworCQkJICogZ2VuZXJhbGx5IGdvb2QsIGFzIGl0 IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcuIFdoZW4KKwkJCSAqIHBlcmZvcm1pbmcgYSBsb3Qg b2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbgorCQkJICogcGFn ZSBjYWNoZSBhbmQgdXNlcnNwYWNlIG1lbW9yeSBoYXBwZW5zIGluIHRoZSBmb3JlZ3JvdW5kLCBh cworCQkJICogaXQgY2FuJ3QgYmUgb2ZmbG9hZGVkIHRvIERNQSBoYXJkd2FyZSBhcyBpcyBwb3Nz aWJsZSB3aGVuIHVzaW5nCisJCQkgKiBkaXJlY3QgSU8uIFdoZW4gZXhlY3V0aW5nIGEgbG90IG9m IGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzCisJCQkgKiBpb191cmluZyB0byBiZSBzbG93ZXIgdGhh biB3b3JrZXIgbW9kZSwgYXMgd29ya2VyIG1vZGUKKwkJCSAqIHBhcmFsbGVsaXplcyB0aGUgY29w eWluZy4gaW9fdXJpbmcgY2FuIGJlIHRvbGQgdG8gb2ZmbG9hZCB3b3JrCisJCQkgKiB0byB3b3Jr ZXIgdGhyZWFkcyBpbnN0ZWFkLgorCQkJICoKKwkJCSAqIElmIHRoZSBJT3MgYXJlIHNtYWxsLCB0 aGVyZSBpcyBubyBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MKKwkJCSAqIGludG8gdGhlIGJh Y2tncm91bmQsIHRoZSBvdmVyaGVhZCBmcm9tIGNvbnRleHQgc3dpdGNoaW5nIGlzCisJCQkgKiBo aWdoZXIgdGhhbiB0aGUgZ2Fpbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIHNpemUgb2YgdGhlIHJl YWQgYXMKKwkJCSAqIGEgaGV1cmlzdGljLgorCQkJICoKKwkJCSAqIFhYWDogV2UgdXNlZCB0byBu b3QgZG8gdGhpcyBmb3IgdGhlIGZpcnN0IGZldyBJT3MgaW4gZmxpZ2h0LAorCQkJICogYnV0IG5v dyB3ZSBoYXZlIGEgaGV1cmlzdGljIHByZXZlbnRpbmcgZGVlcGVyIElPIHF1ZXVlcyBpZiBJT3MK KwkJCSAqIGZpbmlzaCBpbiB0aW1lLCB3aGljaCB3aWxsIG9mdGVuIHByZXZlbnQgdXMgZnJvbSBl dmVyIHJlYWNoaW5nCisJCQkgKiB0aGF0IGRlZXAgcXVldWVzLiAgTWF5YmUgdGhlcmUncyBhIGJl dHRlciB3YXk/CisJCQkgKgorCQkJICogWFhYOiBOZWVkIHRvIGV2YWx1YXRlIHRoZSBudW1iZXIg b2YgYmxvY2tzIHdoZW4gSU9TUUVfQVNZTkMKKwkJCSAqIHN0YXJ0cyB0byBtYWtlIHNlbnNlLgor CQkJICovCisJCQlpZiAoaW9fc2l6ZSA+PSAoQkxDS1NaICogNCkgJiYKKwkJCQkoaW9oLT5mbGFn cyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJCQlpb191cmluZ19zcWVfc2V0X2ZsYWdzKHNxZSwg SU9TUUVfQVNZTkMpOworCiAJCQlicmVhazsKIAogCQljYXNlIFBHQUlPX09QX1dSSVRFVjoKLS0g CjIuNTMuMAoK --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0014-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Disposition: attachment; filename="v16-0014-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehir4 RnJvbSA1MGMyYTY4ZmRhNTI4MjZjMTQ5MDA4NDBiNThmOGExMjUxNTk1ZWM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzoyNToyNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDE0 LzE3XSBXSVA6IHJlYWRfc3RyZWFtOiBQcmV2ZW50IGRpc3RhbmNlIGZyb20gZGVjYXlpbmcKIHRv byBxdWlja2x5CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRf c3RyZWFtLmMKaW5kZXggZTI4YWI1ZGUwLi5lM2MxNmJkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCWlu dDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJ CWRpc3RhbmNlOworCXVpbnQxNgkJZGlzdGFuY2VfZGVjYXlfaG9sZG9mZjsKIAlpbnQxNgkJaW5p dGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQxNgkJcmVzdW1lX2Rpc3RhbmNlOwogCWludAkJCXJlYWRf YnVmZmVyc19mbGFnczsKQEAgLTM2NCw5ICszNjUsMjIgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVu ZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkvKiBSZW1lbWJlciB3aGV0aGVyIHdlIG5l ZWQgdG8gd2FpdCBiZWZvcmUgcmV0dXJuaW5nIHRoaXMgYnVmZmVyLiAqLwogCWlmICghbmVlZF93 YWl0KQogCXsKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSBkZWNheXMsIG5vIEkvTyBuZWNlc3Nh cnkuICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2Ut LTsKKwkJLyoKKwkJICogSWYgdGhlcmUgY3VycmVudGx5IGlzIG5vIElPIGluIHByb2dyZXNzLCBh bmQgd2UgaGF2ZSBub3QgbmVlZGVkIHRvCisJCSAqIGlzc3VlIElPIHJlY2VudGx5LCBkZWNheSB0 aGUgbG9vay1haGVhZCBkaXN0YW5jZS4gIFdlIGRldGVjdCBpZiB3ZQorCQkgKiBoYWQgdG8gaXNz dWUgSU8gcmVjZW50bHkgYnkgaGF2aW5nIGEgZGVjYXkgaG9sZG9mZiB0aGF0J3Mgc2V0IHRvCisJ CSAqIHRoZSBtYXggbG9va2FoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8u ICBUaGlzIGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBh IGhpZ2ggZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkg d2hlbiBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2thaGVhZAorCQkgKiBkaXN0YW5jZS4K KwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAmJiBzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA9PSAwKQorCQl7CisJCQlpZiAoc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID09 IDApCisJCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkJZWxzZQorCQkJCXN0cmVhbS0+ZGlzdGFu Y2VfZGVjYXlfaG9sZG9mZi0tOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC03MDIsNiArNzE2LDcg QEAgcmVhZF9zdHJlYW1fYmVnaW5faW1wbChpbnQgZmxhZ3MsCiAJc3RyZWFtLT5zZXFfYmxvY2tu dW0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJc3RyZWFtLT5zZXFfdW50aWxfcHJvY2Vzc2VkID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+dGVtcG9yYXJ5ID0gU21ncklzVGVtcChzbWdy KTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogCiAJLyoKIAkgKiBTa2lw IHRoZSBpbml0aWFsIHJhbXAtdXAgcGhhc2UgaWYgdGhlIGNhbGxlciBzYXlzIHdlJ3JlIGdvaW5n IHRvIGJlCkBAIC05NDQsNiArOTU5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJaWYgKCsrc3RyZWFtLT5v bGRlc3RfaW9faW5kZXggPT0gc3RyZWFtLT5tYXhfaW9zKQogCQkJc3RyZWFtLT5vbGRlc3RfaW9f aW5kZXggPSAwOwogCisJCS8qCisJCSAqIEFzIHdlIG5lZWRlZCBJTywgcHJldmVudCBkaXN0YW5j ZSBmcm9tIGJlaW5nIHJlZHVjZWQgd2l0aGluIG91cgorCQkgKiBtYXhpbXVtIGxvb2thaGVhZCB3 aW5kb3cuIFRoaXMgYXZvaWRzIGhhdmluZyBkaXN0YW5jZSBjb2xsYXBzZSB0b28KKwkJICogcXVp Y2tseSBpbiB3b3JrbG9hZHMgd2hlcmUgbW9zdCBvZiB0aGUgcmVxdWlyZWQgYmxvY2tzIGFyZSBj YWNoZWQsCisJCSAqIGJ1dCB3aGVyZSB0aGUgcmVtYWluaW5nIElPcyBhcmUgYSBzdWZmaWNpZW50 IGVub3VnaCBmYWN0b3IgdG8gY2F1c2UKKwkJICogYSBzdWJzdGFudGlhbCBzbG93ZG93biBpZiBl eGVjdXRlZCBzeW5jaHJvbm91c2x5LgorCQkgKgorCQkgKiBYWFg6IE5vdCBvYnZpb3VzIHdoZXRo ZXIgd2Ugc2hvdWxkIHVzZSBtYXhfaW9zIG9yCisJCSAqIG1heF9waW5uZWRfYnVmZmVycy4gT3Ig c29tZXRoaW5nIGVsc2UgZW50aXJlbHkuCisJCSAqLworCQlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSBzdHJlYW0tPm1heF9pb3M7CisKIAkJLyoKIAkJICogTG9vay1haGVhZCBkaXN0 YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIG5lZWRlZCB0byB3YWl0IGZvcgogCQkgKiBJ Ty4gV2Ugb25seSBpbmNyZWFzZSB0aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwg dG8gYXZvaWQKLS0gCjIuNTMuMAoK --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0017-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v16-0017-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehik1 RnJvbSBjYzdjOTA4YmM4NGNkOThjZDIyNDhiNDk4OTM2YzYxMzczZGI1ZDg3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNiAxNy8xN10g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBn QGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgxNjFwZUFXYjVlRj1K YTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvaGFzaC5oICAgICAgICAgICAgfCAgODUgKystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvUkVBRE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aC5jICAgICAgIHwgMjExICsrKysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdl LmMgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIHwgMzM4 ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFz aHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAg ICAgICAgICB8ICAyMSArLQogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgIHwg ICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDMzOCBpbnNlcnRpb25zKCspLCA1MDUgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li41ODc2OWVkYmQgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaApA QCAtMTAwLDU3ICsxMDAsMjUgQEAgdHlwZWRlZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdl T3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hPX1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0 cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNo ICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0 eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRhCiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7 CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAgaXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9m ZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2Fu UG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkvKiBpbmRleCBwYWdlIGJ1ZmZlciBwaW4gKFRJRCBy ZXVzZSBpbnRlcmxvY2spICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBpbmRleCBwYWdl IHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQ YWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdz IHJpZ2h0IGxpbmsgKi8KK30gSGFzaEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNj YW5Qb3NEYXRhCisvKgorICogQWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEg ZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVyLgorICogVGhpcyBmb2xsb3dzIHRoZSBzdGFu ZGFyZCBjb252ZW50aW9uIGZvciBpbmRleCBBTSBvcGFxdWUgc3RhdGU6IGl0IGNhbiBiZQorICog Zm91bmQgYXQgYSBmaXhlZCBuZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5kZXhTY2FuQmF0Y2gg cG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSBIYXNoQmF0Y2hEYXRhICoKK0hhc2hCYXRjaEdl dERhdGEoSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7Ci0JQnVmZmVyCQlidWY7CQkJLyogaWYgdmFs aWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBj dXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogbmV4 dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBwcmV2IG92ZXJm bG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdh eXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNl dCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhl Ci0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBh bmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQt ZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBh IGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4K LQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1td ICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8K LQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUhh c2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkvKiBNVVNUIEJFIExB U1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSXNQaW5uZWQo c2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9z KS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAot CUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9z SXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQo KHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1 ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgXAotKQotCi0j ZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBcCi0JCShzY2Fu cG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFnZSA9IEludmFs aWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShz Y2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRlbSA9IDA7IFwKLQkJ KHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorCXJldHVybiAoSGFzaEJh dGNoRGF0YSAqKSAoKGNoYXIgKikgYmF0Y2ggLSBNQVhBTElHTihzaXplb2YoSGFzaEJhdGNoRGF0 YSkpKTsKK30KIAogLyoKICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRlIGZv ciBhIGhhc2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSArMTQ2LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SGFzaFNjYW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9w dWxhdGVkIGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVz IG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJy ZW50bHkgc3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hp bmcgaXRlbXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEK LQkgKi8KLQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRh ICovCiB9IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEg Kkhhc2hTY2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjcsMTUgQEAgZXh0ZXJuIGJvb2wgaGFzaGlu c2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAg SW5kZXhVbmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdl ZCwKIAkJCQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhh c2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVy biBJbmRleFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9u IGRpcik7CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJ REJpdG1hcCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJ CQkJICAgU2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNo a2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 CitleHRlcm4gdm9pZCBoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4 VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3Rh dHMsCkBAIC00NDUsOCArNDA4LDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNoX3NwbGl0KFJl bGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJCSAgIHVpbnQz MiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBfaGFzaF9uZXh0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2hh c2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4g SW5kZXhTY2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CitleHRlcm4gSW5k ZXhTY2FuQmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7 CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQ0MCw2IEBAIGV4 dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNrZXQoUmVsYXRp b24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Js b2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQpOwogZXh0 ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJl bCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21hc2ssIHVpbnQz MiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNj IHNjYW4pOwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJl bGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKaW5kZXgg ZmM5MDMxMTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKQEAgLTI1NSwyOCAr MjU1LDI5IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlzOgogCQlyZXRha2UgdGhlIGJ1ZmZlciBj b250ZW50IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJhbmdlIHRvIHNjYW4gdGhlIG9sZCBidWNr ZXQgbm9ybWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZvcgogICAgICAgICAgdHVwbGVzIHdoaWNo IGFyZSBub3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4sIHBlciByZWFkIHJlcXVlc3Q6CistLSB0 aGVuLCBwZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJcmVhY3F1aXJlIGNvbnRlbnQgbG9jayBv biBjdXJyZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFnZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWlu aW5nIG9mIGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJdGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBi dWNrZXQgdGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVz IGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYW4gaXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBp biBhbmQgY29udGVudCBsb2NrIChidXQgaWYgaXQgaXMgcHJpbWFyeSBidWNrZXQgcGFnZSByZXRh aW4KLQlpdHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NhbikKLQlnZXQgdHVwbGUgZnJvbSBh biBpdGVtIGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQg aW5kZXggcGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50 IHBhZ2UgcmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRj aCdzIGJ1ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJ dW50aWwgdGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFz ZSBhbGwgcGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBzY2FuLW93bmVkIHBpbnMgKGUuZy4sIHBy aW1hcnkgYnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQKIAogSG9sZGluZyB0aGUgYnVmZmVyIHBp biBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3IgdGhlIHdob2xlIHNjYW4gcHJldmVudHMK LXRoZSByZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRl ZCBieSBzcGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBj YW4gc3RpbGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKK3RoZSBidWNrZXQgZnJvbSBiZWluZyBy ZW9yZ2FuaXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlvbnMgd2hpbGUgdGhlIHNjYW4gaXMKK2lu IHByb2dyZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQg b3IgY29tcGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBp bmRleCBzY2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRp ZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVw bGUKLUlEcyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFnZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFy ZSB0aGVuIHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRpbmcgYW55IHBhZ2UgbG9jayB3aXRoaW4g dGhlIGluZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBw ZW4gb24gdGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiByZS1m aW5kaW5nIHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9uIGZvciB0aGUgcmVhZGVyLiBXZSBkbyBj b250aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVja2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdh aW5zdCBjb25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVja2V0IHNwbGl0LgorVG8gbWluaW1pemUg bG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FucyBhbHdheXMgc2VhcmNoIHRoZSBl bnRpcmUKK2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9u Y2UsIHJldHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJs ZSBBTSBwcm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBwYWdlIGxvY2sKK2lzIGhlbGQgd2l0aGlu IHRoZSBpbmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBpbnNlcnRpb24gdG8gaGFwcGVuIG9uIHRo ZQorc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcg dGhlIGN1cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRoZSByZWFkZXIuICBUaGUgdGFibGUgQU0g Y29udHJvbHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBhcmUKK2Ryb3BwZWQuICBXZSBkbyBjb250 aW51ZSB0byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVj dCBhZ2FpbnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5z IGR1cmluZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUK IGJ1Y2tldCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5nLXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwg dGhlIHR1cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9o YXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggMmUzMmJlMjMzLi4y NGVjZjU1MTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTExMywxMCArMTEzLDEwIEBAIGhh c2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBoYXNoYWRq dXN0bWVtYmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2Fu ID0gaGFzaHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJh dGNoID0gTlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAotCQkuYW11bmd1YXJkYmF0 Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gaGFzaGdl dGJhdGNoLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwKKwkJLmFt dW5ndWFyZGJhdGNoID0gaGFzaHVuZ3VhcmRiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdl dGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5V TEwsCkBAIC0yOTksNTMgKzI5OSwyOCBAQCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0g KnZhbHVlcywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0dHVwbGUoKSAtLSBHZXQg dGhlIG5leHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBHZXQgdGhl IGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wKLWhh c2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhT Y2FuQmF0Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0g KEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOwogCiAJLyogSGFzaCBp bmRleGVzIGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBjb2Rl ICovCiAJc2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAqIElmIHdlJ3ZlIGFscmVh ZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluIHRoZQot CSAqIGFwcHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdl IGNhbGwgYSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgot CSAqLwotCWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJcmVzID0gX2hh c2hfZmlyc3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7 Ci0JCS8qCi0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNs eS1mZXRjaGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0J CXsKLQkJCS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRl YWwgd2l0aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmlu ZyB0aGUgaW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNh bGxlciByZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBpcyBxdWl0ZQotCQkJICog cG9zc2libGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRp bWVzLgotCQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5zdGVhZCwgd2UganVzdCBm b3JnZXQgYW55IGV4Y2VzcwotCQkJICogZW50cmllcy4KLQkJCSAqLwotCQkJaWYgKHNvLT5raWxs ZWRJdGVtcyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQs IE1heEluZGV4VHVwbGVzUGVyUGFnZSk7CisJCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVs YXRpb247CiAKLQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQot CQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUlu ZGV4OwotCQl9CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JCS8qCi0JCSAqIE5v dyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgZGly KTsKKwkJLyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5kIHJldHVybiBmaXJzdCBiYXRjaCBvZiBt YXRjaGluZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKIAl9CiAK LQlyZXR1cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBwb3NpdGlvbmVkIGFmdGVyIGNhbGxlcidz IGJhdGNoIChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJcmV0dXJuIF9oYXNoX25leHQoc2Nhbiwg ZGlyLCBwcmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNTUsMjYgKzMzMCwyNiBAQCBoYXNoZ2V0dHVw bGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIGludDY0CiBoYXNoZ2V0 Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7Ci0JSGFzaFNjYW5P cGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7CisJ SW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsKLQlIYXNoU2NhblBvc0l0 ZW0gKmN1cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJl Y3Rpb24pOworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24p OwogCi0Jd2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2ggIT0gTlVMTCkKIAl7Ci0JCWN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07CisJCWZvciAoaW50 IGl0ZW1JbmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJCQkgaXRlbUluZGV4IDw9IGJhdGNoLT5s YXN0SXRlbTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJeworCQkJdGJtX2FkZF90dXBsZXModGJtLCAm YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQsIDEsIHRydWUpOworCQkJbnRpZHMrKzsK KwkJfQogCiAJCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGlt aW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxs ZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJlJ3MKLQkJICogbm90aGluZyB0byBk byBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIFRJREJpdG1hcC4KKwkJICogX2hh c2hfbmV4dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2ggZm9yIGJpdG1hcCBjYWxsZXJzIGJlZm9y ZQorCQkgKiBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwgc28gb25seSBvbmUgYmF0Y2ggaXMgZXZl ciB1c2VkIGF0IGEgdGltZQogCQkgKi8KLQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1cnJJdGVt LT5oZWFwVGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsKQEAgLTM5 NiwxNyArMzcxLDE2IEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5v cmRlcmJ5cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nh bk9wYXF1ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJc28t Pmhhc2hzb19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1 Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0g ZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIAotCXNvLT5raWxsZWRJdGVt cyA9IE5VTEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlz Y2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlOworCXNjYW4tPmJhdGNo X2luZGV4X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEhhc2hCYXRjaERhdGEpKTsKKwlz Y2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKIAogCXJldHVybiBzY2FuOwogfQpAQCAt NDIxLDE4ICszOTUsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBz Y2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsK IAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3Jl IGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlp ZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCX0KLQog CV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9uIGludmFsaWQg KHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEgbmV3IG9uZSBp cyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1l bWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2Yo U2NhbktleURhdGEpKTsKQEAgLTQ0MSw2ICs0MDUsMTEyIEBAIGhhc2hyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19i dWNfc3BsaXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hraWxsaXRlbXNiYXRjaCgpIC0tIE1h cmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAoraGFzaGtpbGxp dGVtc2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJ UmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlIYXNoQmF0Y2hEYXRhICpoYXNo YmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKGJhdGNoKTsKKwlCdWZmZXIJCWJ1ZjsKKwlQYWdlCQlw YWdlOworCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJ CW1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWxh dGVzdGxzbjsKKworCUFzc2VydChiYXRjaC0+bnVtRGVhZCA+IDApOworCisJYnVmID0gX2hhc2hf Z2V0YnVmKHJlbCwgaGFzaGJhdGNoLT5jdXJyUGFnZSwgSEFTSF9SRUFELAorCQkJCQkgICBMSF9C VUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0 TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAo YmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBo aW50aW5nICovCisJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBh Z2UpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVy YXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlm b3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlpdGVt SW5kZXggPSBiYXRjaC0+ZGVhZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0 ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CisKKwkJb2ZmbnVtID0gY3Vyckl0ZW0tPmlu ZGV4T2Zmc2V0OworCisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgor CQkJICAgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwkJd2hpbGUgKG9mZm51bSA8 PSBtYXhvZmYpCisJCXsKKwkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZu dW0pOworCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFn ZSwgaWlkKTsKKworCQkJaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAmY3Vy ckl0ZW0tPnRhYmxlVGlkKSkKKwkJCXsKKwkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hl Y2sgaWYgd2UgY2FuCisJCQkJCSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcg YSBzaGFyZSBsb2NrLiBJZiB3ZQorCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8g cG9pbnQgY29udGludWluZy4KKwkJCQkJICovCisJCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50 Qml0cyhidWYpKQorCQkJCQkJZ290byB1bmxvY2tfcGFnZTsKKwkJCQl9CisKKwkJCQkvKiBmb3Vu ZCB0aGUgaXRlbSAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRo aW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8K KwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKwor CS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBh cyBkaXJ0eSBoaW50LiBXaGVuZXZlcgorCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2Ug YWxzbyBzZXQgdGhlIHBhZ2UncworCSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdo aWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LgorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcp CisJeworCQlvcGFxdWUtPmhhc2hvX2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CisJ CUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1bmxvY2tf cGFnZToKKwlfaGFzaF9yZWxidWYocmVsLCBidWYpOworfQorCisvKgorICoJaGFzaHVuZ3VhcmRi YXRjaCgpIC0tIERyb3AgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBp bikKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3Ag dGhlIGJ1ZmZlciBwaW4gaGVsZCB0bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmcgYnkgVkFDVVVNLgorICovCit2b2lkCitoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNo ID0gSGFzaEJhdGNoR2V0RGF0YShiYXRjaCk7CisKKwkvKiBjaGVjayBpZiB0aGUgcGluIGhhcyBh bHJlYWR5IGJlZW4gcmVsZWFzZWQgKG11c3QgYmUgaWRlbXBvdGVudCkgKi8KKwlpZiAoQnVmZmVy SXNWYWxpZChoYXNoYmF0Y2gtPmJ1ZikpCisJeworCQlSZWxlYXNlQnVmZmVyKGhhc2hiYXRjaC0+ YnVmKTsKKwkJaGFzaGJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwogLyoKICAq CWhhc2hlbmRzY2FuKCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDUwLDE3ICs1MjAs OCBAQCBoYXNoZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFzaFNjYW5PcGFxdWUgc28g PSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J ewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVk IGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMo c2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQlpZiAoc28tPmtp bGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7CiAJcGZyZWUoc28p OwogCXNjYW4tPm9wYXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5j CmluZGV4IDIwNjA2MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNoX3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hs b2cuYwpAQCAtMTE0MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2soY2hhciAqcGFnZWRhdGEsIEJs b2NrTnVtYmVyIGJsa25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1Y2tldCBhbmQgb3ZlcmZsb3cg cGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJICogTFBfRkxBR1Mgd2l0aG91 dCBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUKLQkJICogcG9p bnRlciBmbGFncy4gU2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRl dGFpbHMuCisJCSAqIHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2goKSBmb3Ig ZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBJ dCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBt YXkgcmVtYWluCi0JICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBTZWUgX2hhc2hfa2lsbF9pdGVt cygpIGZvciBkZXRhaWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFzayBpdC4gU2VlIGhhc2hraWxs aXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1ZS0+aGFzaG9fZmxhZyAmPSB+ TEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGFzaC9oYXNocGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwpp bmRleCAyNjNiYzczZjEuLjVhZGQ3MDE5MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5j CkBAIC0yODAsMzEgKzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVy IGJ1ZikKIH0KIAogLyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJz IHVzZWQgaW4gc2Nhbi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJz IG93bmVkIGJ5IHNjYW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyB1 c2VkIGR1cmluZyBzY2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5vIGxvY2suCisgKiBUaGlzIHJv dXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQg Zm9yIHRoZQorICogYnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVpbmcgc3BsaXQgYXMgbmVlZGVk LgogICovCiB2b2lkCiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3Bh cXVlIHNvKQogewotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBidWNrZXQgcGFn ZSAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikgJiYKLQkJc28t Pmhhc2hzb19idWNrZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBo ZWxkIG9uIHByaW1hcnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFz aHNvX2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwgc28tPmhhc2hzb19idWNrZXRf YnVmKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVs ZWFzZSBwaW4gd2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQgYmVpbmcg c3BsaXQgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYp ICYmCi0JCXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJ LyogcmVsZWFzZSBwaW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tldCBiZWlu ZyBzcGxpdCAqLworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1 ZikpCiAJCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpOwog CXNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxl YXNlIGFueSBwaW4gd2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJy UG9zLmJ1ZikpCi0JCV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5j dXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNldCBzcGxpdCBzY2FuICovCiAJ c28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQg PSBmYWxzZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2gu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwppbmRleCA4OWQxYzViYzYu LjczYmFiZThjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJj aC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtMjIsMTA1 ICsyMiw4NyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRp bHMvcmVsLmgiCiAKLXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQnVmZmVyICpidWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIGJv b2wgX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGly ZWN0aW9uIGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRpYyBpbnQJ X2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2Us Ci0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1z dGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBp dGVtSW5kZXgsCisJCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUg dm9pZCBfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwK IAkJCQkJCQkJICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGlj IHZvaWQgX2hhc2hfcmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJ CQkJCQkgICBQYWdlICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJ X2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25l eHQoKSAtLSBHZXQgdGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlP biBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1h eQotICoJCWJlIHBpbm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRl eCBpZGVudGlmaWVzCi0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAq CQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3 aXRoIGl0ZW1zCisgKgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBl eGl0LCBzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJ aGVhcCB0dXBsZS4gIHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1 Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMg ZnJvbQorICoJCW5leHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcg dGhhdCB0aGVyZSBhcmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZl ciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUg dHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFn ZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlS ZXRhaW5zIHBpbnMgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0Lgog ICovCi1ib29sCi1faGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCitJbmRleFNjYW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyLCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJl bCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUhhc2hC YXRjaERhdGEgKmhhc2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShwcmlvcmJhdGNoKTsK IAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9 IGZhbHNlOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRo ZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7IG9yIGlmIGRvbmUsIHRyeSB0byByZWFk Ci0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNj YW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMg cGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGggYWxsIHRoZQotCSAqIGtpbGxlZCBpdGVt cy4KKwkgKiBEZXRlcm1pbmUgd2hpY2ggcGFnZSB0byByZWFkIG5leHQgYmFzZWQgb24gc2NhbiBk aXJlY3Rpb24gYW5kIGRldGFpbHMKKwkgKiB0YWtlbiBmcm9tIHRoZSBwcmlvciBiYXRjaAogCSAq LwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JewotCQlpZiAoKytzby0+Y3Vy clBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5u dW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7CisJCWJsa25vID0gaGFz aHByaW9yYmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+ cHJldlBhZ2U7CiAKLQkJCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7Ci0JCQlpZiAoQmxv Y2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJCQlidWYgPSBfaGFzaF9nZXRidWYocmVs LCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQkJCQlpZiAoIV9oYXNoX3Jl YWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJCX0K LQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KLQl9CisJLyoKKwkgKiBGb3Ig Yml0bWFwIHNjYW4gY2FsbGVycywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQg dGhlCisJICogYWxsb2NhdGlvbiBiZWxvdyBjYW4gcmV1c2UgaXRzIG1lbW9yeS4gIFRoaXMgd2F5 IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBiYXRjaCBhbGxvY2F0 aW9uLgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRleGFtX3V0aWxfYmF0 Y2hfcmVsZWFzZShzY2FuLCBwcmlvcmJhdGNoKTsKKworCWlmICghQmxvY2tOdW1iZXJJc1ZhbGlk KGJsa25vKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgbmV4dCBi YXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOworCisJLyog R2V0IHRoZSBidWZmZXIgZm9yIG5leHQgYmF0Y2ggKi8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9y d2FyZChkaXIpKQorCQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELCBM SF9PVkVSRkxPV19QQUdFKTsKIAllbHNlCiAJewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5k ZXggPCBzby0+Y3VyclBvcy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4g MCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOworCQlidWYgPSBfaGFzaF9nZXRidWYocmVs LCBibGtubywgSEFTSF9SRUFELAorCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxP V19QQUdFKTsKIAotCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2UGFnZTsKLQkJCWlmIChCbG9j a051bWJlcklzVmFsaWQoYmxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWws IGJsa25vLCBIQVNIX1JFQUQsCi0JCQkJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZM T1dfUEFHRSk7Ci0KLQkJCQkvKgotCQkJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9u IGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuCi0JCQkJICogb3BlcmF0aW9uLCBzbyByZWxlYXNp bmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhhdmUgYWNxdWlyZWQKLQkJCQkgKiBoZXJlLgotCQkJ CSAqLwotCQkJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJCWJ1ZiA9 PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJCV9oYXNoX2Ryb3BidWYocmVsLCBi dWYpOwotCi0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQll bmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVl OwotCQl9CisJCS8qCisJCSAqIFdlIGFsd2F5cyBtYWludGFpbiB0aGUgcGluIG9uIGJ1Y2tldCBw YWdlIGZvciB3aG9sZSBzY2FuIG9wZXJhdGlvbiwKKwkJICogc28gcmVsZWFzaW5nIHRoZSBhZGRp dGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkIGhlcmUuCisJCSAqLworCQlpZiAoYnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQkJYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0 X2J1ZikKKwkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwogCX0KIAotCWlmIChlbmRfb2Zfc2Nh bikKKwkvKiBSZWFkIHRoZSBuZXh0IHBhZ2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQg YmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCiAJ ewotCQlfaGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKLQkJSGFzaFNjYW5Qb3NJbnZhbGlkYXRl KHNvLT5jdXJyUG9zKTsKLQkJcmV0dXJuIGZhbHNlOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOwogCX0KIAotCS8qIE9LLCBpdGVtSW5k ZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1z W3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVtLT5o ZWFwVGlkOwotCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5n IG1hdGNoZWQgaXRlbXMgZnJvbSBuZXh0IHBhZ2UgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8q CkBAIC0yNzAsMjIgKzI1MiwyMCBAQCBfaGFzaF9yZWFkcHJldihJbmRleFNjYW5EZXNjIHNjYW4s CiB9CiAKIC8qCi0gKglfaGFzaF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBz Y2FuLgorICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyBp biBhIHNjYW4uCiAgKgotICoJCVdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLCBpZiBiYWNrd2Fy ZCBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUKLSAqCQlpbmRleCB0aGF0IHNhdGlzZmllcyB0 aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNjYW4KLSAqCQlkZXNjcmlwdG9y LgorICoJCVdlIGZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIChvciwgaWYgYmFja3dhcmQg c2NhbiwgdGhlIGxhc3QKKyAqCQliYXRjaCkgaW4gdGhlIGluZGV4IHRoYXQgc2F0aXNmaWVzIHRo ZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0aAorICoJCXRoZSBzY2FuIGRlc2NyaXB0b3Iu CiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgaWYgdGhlIHBhZ2UgY29udGFpbmluZyBjdXJy ZW50IGluZGV4IHR1cGxlIGlzIGFuCi0gKgkJb3ZlcmZsb3cgcGFnZSwgYm90aCBwaW4gYW5kIGxv Y2sgYXJlIHJlbGVhc2VkIHdoZXJlYXMgaWYgaXQgaXMgYSBidWNrZXQKLSAqCQlwYWdlIHRoZW4g aXQgaXMgcGlubmVkIGJ1dCBub3QgbG9ja2VkIGFuZCBkYXRhIGFib3V0IHRoZSBtYXRjaGluZwot ICoJCXR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9z LAotICoJCXNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0IHRvIHRoZSBoZWFwIFRJRCBvZiB0aGUgY3Vy cmVudCB0dXBsZS4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVybnMgYSBiYXRjaCBjb250 YWluaW5nIG1hdGNoaW5nIGl0ZW1zLgorICoJCU90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGlj YXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzLgorICoJCU5vIGxvY2tzIGFy ZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8g bW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggcGluIGhlbGQgb24KLSAqCQlidWNr ZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93IHBhZ2UuCisgKgkJ V2UgYWx3YXlzIHJldGFpbiBvdXIgb3duIHBpbiBvbiB0aGUgYnVja2V0IHBhZ2UuICBXaGVuIHdl IHJldHVybiBhCisgKgkJYmF0Y2ggd2l0aCBhIGJ1Y2tldCBwYWdlLCBpdCB3aWxsIHJldGFpbiBp dHMgb3duIHJlZmVyZW5jZSBwaW4uCiAgKi8KLWJvb2wKK0luZGV4U2NhbkJhdGNoCiBfaGFzaF9m aXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCVJlbGF0aW9u CXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CkBAIC0yOTYsNyArMjc2LDcgQEAgX2hhc2hfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAlCdWZmZXIJCWJ1ZjsK IAlQYWdlCQlwYWdlOwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0g KmN1cnJJdGVtOworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJcGdzdGF0X2NvdW50X2luZGV4 X3NjYW4ocmVsKTsKIAlpZiAoc2Nhbi0+aW5zdHJ1bWVudCkKQEAgLTMyNiw3ICszMDYsNyBAQCBf aGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGl0 ZW1zIGluIHRoZSBpbmRleC4KIAkgKi8KIAlpZiAoY3VyLT5za19mbGFncyAmIFNLX0lTTlVMTCkK LQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCS8qCiAJICogT2theSB0byBjb21w dXRlIHRoZSBoYXNoIGtleS4gIFdlIHdhbnQgdG8gZG8gdGhpcyBiZWZvcmUgYWNxdWlyaW5nIGFu eQpAQCAtNDE5LDE5MSArMzk5LDE1MiBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyKQogCQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2Us ICZvcGFxdWUpOwogCX0KIAotCS8qIHJlbWVtYmVyIHdoaWNoIGJ1ZmZlciB3ZSBoYXZlIHBpbm5l ZCwgaWYgYW55ICovCi0JQXNzZXJ0KEJ1ZmZlcklzSW52YWxpZChzby0+Y3VyclBvcy5idWYpKTsK LQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIGZpcnN0IGJh dGNoICovCisJYmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CiAKLQkvKiBO b3cgZmluZCBhbGwgdGhlIHR1cGxlcyBzYXRpc2Z5aW5nIHRoZSBxdWFsaWZpY2F0aW9uIGZyb20g YSBwYWdlICovCi0JaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQlyZXR1 cm4gZmFsc2U7CisJLyogUmVhZCB0aGUgZmlyc3QgcGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFs bG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJh dGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNoKTsKKwkJ cmV0dXJuIE5VTEw7CisJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8gcmV0dXJu ICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4 XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQkvKiBpZiB3ZSdy ZSBoZXJlLCBfaGFzaF9yZWFkcGFnZSBmb3VuZCBhIHZhbGlkIHR1cGxlcyAqLwotCXJldHVybiB0 cnVlOworCS8qIFJldHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zICovCisJ cmV0dXJuIGJhdGNoOwogfQogCiAvKgotICoJX2hhc2hfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEg ZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBzby0+Y3VyclBvcworICoJX2hhc2hfcmVhZHBh Z2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBiYXRjaAogICoK ICAqCVdlIHNjYW4gYWxsIHRoZSBpdGVtcyBpbiB0aGUgY3VycmVudCBpbmRleCBwYWdlIGFuZCBz YXZlIHRoZW0gaW50bwotICoJc28tPmN1cnJQb3MgaWYgaXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZp Y2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcworICoJdGhlIGJhdGNoIGlmIHRoZXkgc2F0aXNm eSB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKICAqCWFyZSBmb3VuZCBp biB0aGUgY3VycmVudCBwYWdlLCB3ZSBtb3ZlIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UK ICAqCWluIGEgYnVja2V0IGNoYWluIGFzIGluZGljYXRlZCBieSB0aGUgZGlyZWN0aW9uLgogICoK ICAqCVJldHVybiB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBhcmUgZm91bmQgZWxzZSByZXR1 cm4gZmFsc2UuCiAgKi8KIHN0YXRpYyBib29sCi1faGFzaF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIEJ1ZmZlciAqYnVmUCwgU2NhbkRpcmVjdGlvbiBkaXIpCitfaGFzaF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJICAg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwotCUJ1ZmZlcgkJYnVmOworCUhhc2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdl dERhdGEoYmF0Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9m ZnNldE51bWJlciBvZmZudW07CiAJdWludDE2CQlpdGVtSW5kZXg7CiAKLQlidWYgPSAqYnVmUDsK IAlBc3NlcnQoQnVmZmVySXNWYWxpZChidWYpKTsKIAlfaGFzaF9jaGVja3BhZ2UocmVsLCBidWYs IExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKIAlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKIAotCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKGJ1Zik7CisJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJaGFzaGJhdGNoLT5jdXJyUGFnZSA9 IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CisJYmF0Y2gtPmRpciA9IGRpcjsKIAogCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJewotCQlCbG9ja051bWJlciBwcmV2X2Jsa25v ID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdl LCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVt ID0gX2hhc2hfYmluc2VhcmNoKHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1J bmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGly KTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2Us IG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4 ICE9IDApCiAJCQkJYnJlYWs7CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0 Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBuZXh0 IHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkKLQkJ CSAqIGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBs ZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBuZXh0IHBh Z2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRl bXMoc2Nhbik7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFn ZSwgaGFzaG9fcHJldmJsa25vIGlzIG5vdCBhIHJlYWwKLQkJCSAqIGJsb2NrIG51bWJlci4KLQkJ CSAqLwotCQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwK LQkJCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJ CXByZXZfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQllbHNlCi0JCQkJcHJldl9ibGtu byA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAm YnVmLCAmcGFnZSwgJm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQotCQkJewot CQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1 ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJ CQkgKiBSZW1lbWJlciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxh YmxlCi0JCQkJICogY3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJu IGZhbHNlCi0JCQkJICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdl cmUgZm91bmQuIEFsc28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNh dXNlIHdlIGV4cGVjdAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0 aGUgb2xkIHBhZ2UgYWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICov Ci0JCQkJc28tPmN1cnJQb3MucHJldlBhZ2UgPSBwcmV2X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9z Lm5leHRQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1 ZjsKKwkJCWlmICghQnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0K KworCQkJaGFzaGJhdGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVm ZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9 IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQ b3MuaXRlbUluZGV4ID0gMDsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCWJhdGNoLT5sYXN0 SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7Ci0JCUJsb2NrTnVtYmVyIG5leHRf Ymxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3 IHBhZ2UsIGxvY2F0ZSBzdGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlv ZmZudW0gPSBfaGFzaF9iaW5zZWFyY2hfbGFzdChwYWdlLCBzby0+aGFzaHNvX3NrX2hhc2gpOwog Ci0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBv ZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhz Y2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJCSAgIGJhdGNoKTsKIAogCQkJaWYg KGl0ZW1JbmRleCAhPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCiAJCQkJYnJlYWs7CiAKIAkJCS8q Ci0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50 IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBwcmV2aW91cyBwYWdlLiBCZWZvcmUgbGVhdmluZyB0 aGUgY3VycmVudCBwYWdlLCBkZWFsIHdpdGgKLQkJCSAqIGFueSBraWxsZWQgaXRlbXMuCisJCQkg KiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2Us IHRyeSB0bworCQkJICogbW92ZSB0byB0aGUgcHJldmlvdXMgcGFnZQogCQkJICovCi0JCQlpZiAo c28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQotCQkJaWYg KHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3Vy clBvcy5idWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCW5leHRfYmxrbm8g PSBvcGFxdWUtPmhhc2hvX25leHRibGtubzsKLQogCQkJX2hhc2hfcmVhZHByZXYoc2NhbiwgJmJ1 ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkKLQkJCXsKLQkJ CQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0JCQkJc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZm ZXJHZXRCbG9ja051bWJlcihidWYpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJ ICogUmVtZW1iZXIgbmV4dCBhbmQgcHJldmlvdXMgYmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJs ZQotCQkJCSAqIGN1cnNvcnMgdG8ga25vdyB0aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBm YWxzZQotCQkJCSAqIGluZGljYXRpbmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJl IGZvdW5kLiBBbHNvLAotCQkJCSAqIGRvbid0IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVz ZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhl IG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJCQkgKiBmdW5jdGlvbiByZXR1cm5zLgotCQkJCSAqLwot CQkJCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5j dXJyUG9zLm5leHRQYWdlID0gbmV4dF9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7 CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9CisK KwkJCWhhc2hiYXRjaC0+YnVmID0gYnVmOworCQkJaGFzaGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZl ckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBp dGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdl IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0g MTsKKwkJYmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0g TWF4SW5kZXhUdXBsZXNQZXJQYWdlIC0gMTsKIAl9CiAKLQlpZiAoc28tPmN1cnJQb3MuYnVmID09 IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQlzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hz b19zcGxpdF9idWNrZXRfYnVmKQorCS8qCisJICogU2F2ZWQgYXQgbGVhc3Qgb25lIG1hdGNoIGlu IGJhdGNoLml0ZW1zW10uICBQcmVwYXJlIGZvciBoYXNoZ2V0YmF0Y2ggdG8KKwkgKiByZXR1cm4g aXQgYnkgaW5pdGlhbGl6aW5nIHJlbWFpbmluZyB1bmluaXRpYWxpemVkIGZpZWxkcy4KKwkgKi8K KwlpZiAoaGFzaGJhdGNoLT5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8CisJCWhhc2hi YXRjaC0+YnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJy UG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQlzby0+Y3VyclBvcy5uZXh0UGFn ZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlMb2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1 ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJLyoKKwkJICogQmF0Y2gncyBidWZmZXIgaXMgZWl0 aGVyIHRoZSBwcmltYXJ5IGJ1Y2tldCwgb3IgYSBidWNrZXQgYmVpbmcKKwkJICogcG9wdWxhdGVk IGR1ZSB0byBhIHNwbGl0LgorCQkgKgorCQkgKiBJbmNyZW1lbnQgbG9jYWwgcmVmZXJlbmNlIGNv dW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVuZGVudAorCQkgKiBidWZmZXIgcmVmZXJl bmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSB0aGUgY29yZSBjb2RlL3RhYmxlIEFNKQorCQkg KiBiZWZvcmUgdGhlIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxpdF9idWNrZXRfYnVmIHJl ZmVyZW5jZXMgYXJlCisJCSAqIHJlbGVhc2VkLgorCQkgKi8KKwkJSW5jckJ1ZmZlclJlZkNvdW50 KGhhc2hiYXRjaC0+YnVmKTsKKworCQkvKiBDYW4gb25seSB1c2Ugb3BhcXVlLT5oYXNob19uZXh0 Ymxrbm8gKi8KKwkJaGFzaGJhdGNoLT5wcmV2UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJ aGFzaGJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAllbHNl CiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwot CQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlfaGFz aF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzby0+Y3VyclBvcy5idWYgPSBJbnZh bGlkQnVmZmVyOworCQkvKiBDYW4gdXNlIG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vIGFuZCBvcGFx dWUtPmhhc2hvX25leHRibGtubyAqLworCQloYXNoYmF0Y2gtPnByZXZQYWdlID0gb3BhcXVlLT5o YXNob19wcmV2Ymxrbm87CisJCWhhc2hiYXRjaC0+bmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25l eHRibGtubzsKIAl9CiAKLQlBc3NlcnQoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJy UG9zLmxhc3RJdGVtKTsKKwkvKiB3ZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGJhdGNo Lml0ZW1zW10gKi8KKwlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIGJhdGNoLCBoYXNo YmF0Y2gtPmJ1Zik7CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0 ZW0pOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogTG9hZCBhbGwgdGhlIHF1YWxpZmllZCBp dGVtcyBmcm9tIGEgY3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRvIHNvLT5jdXJyUG9zLiBIZWxw ZXIgZnVuY3Rpb24gZm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50byBiYXRjaC4gSGVscGVyIGZ1 bmN0aW9uIGZvciBfaGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGljIGludAogX2hhc2hfbG9hZF9x dWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkgICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKKwkJCQkJCSAgIE9mZnNldE51 bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCiB7CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKIAlJbmRleFR1cGxlCWl0dXA7CkBAIC02NDAsNyArNTgxLDcgQEAgX2hhc2hfbG9hZF9x dWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQkJX2hhc2hf Y2hlY2txdWFsKHNjYW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1cGxlIGlzIHF1YWxpZmllZCwg c28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwg aXR1cCk7CiAJCQkJaXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNlCkBAIC02ODcsNyArNjI4LDcg QEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBh Z2UsCiAJCQl7CiAJCQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBz byByZW1lbWJlciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51 bSwgaXR1cCk7CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBp dHVwKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTcwNiwxMyArNjQ3LDE0IEBAIF9oYXNoX2xv YWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCX0KIH0K IAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4 XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0g Ki8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28s IGludCBpdGVtSW5kZXgsCitfaGFzaF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50 IGl0ZW1JbmRleCwKIAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkK IHsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1J bmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVt SW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKKwljdXJySXRlbS0+ dGFibGVUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07 CisJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRp bC5jCmluZGV4IDA4MWFkYmM4OC4uMzMxZDVmNGRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNodXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1 dGlsLmMKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9oYXNoLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKLSNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgog I2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKQEAgLTMzLDcgKzMyLDcgQEAgX2hhc2hfY2hlY2tx dWFsKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhUdXBsZSBpdHVwKQogCS8qCiAJICogQ3VycmVu dGx5LCB3ZSBjYW4ndCBjaGVjayBhbnkgb2YgdGhlIHNjYW4gY29uZGl0aW9ucyBzaW5jZSB3ZSBk byBub3QKIAkgKiBoYXZlIHRoZSBvcmlnaW5hbCBpbmRleCBlbnRyeSB2YWx1ZSB0byBzdXBwbHkg dG8gdGhlIHNrX2Z1bmMuIEFsd2F5cwotCSAqIHJldHVybiB0cnVlOyB3ZSBleHBlY3QgdGhhdCBo YXNoZ2V0dHVwbGUgYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxhZworCSAqIHJldHVybiB0cnVl OyB3ZSBleHBlY3QgdGhhdCBoYXNoZ2V0YmF0Y2ggYWxyZWFkeSBzZXQgdGhlIHJlY2hlY2sgZmxh ZwogCSAqIHRvIG1ha2UgdGhlIG1haW4gaW5kZXhzY2FuIGNvZGUgZG8gaXQuCiAJICovCiAjaWZk ZWYgTk9UX1VTRUQKQEAgLTUwNSwxMjkgKzUwNCwzIEBAIF9oYXNoX2dldF9uZXdidWNrZXRfZnJv bV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAogCXJldHVybiBu ZXdfYnVja2V0OwogfQotCi0vKgotICogX2hhc2hfa2lsbF9pdGVtcyAtIHNldCBMUF9ERUFEIHN0 YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwotICogdG9sZCB1cyB3ZXJlIGtp bGxlZC4KLSAqCi0gKiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNv LCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2ls bGVkIHR1cGxlcyB0aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNh bGxlZCBpZiBzby0+bnVtS2lsbGVkID4gMCkuCi0gKgotICogVGhlIGNhbGxlciBkb2VzIG5vdCBo YXZlIGEgbG9jayBvbiB0aGUgcGFnZSBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUKLSAqIHBh Z2UgcGlubmVkIGluIGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJlYWQtbG9jayBpcyBzdWZmaWNpZW50 IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFEIHN0YXR1cyAod2hpY2ggaXMgb25seSBhIGhpbnQpLgot ICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHBpbiBvbiBidWNrZXQgYnVmZmVyLCBidXQgbWF5 IG9yIG1heSBub3QgaGF2ZSBwaW4KLSAqIG9uIG92ZXJmbG93IGJ1ZmZlciwgYXMgaW5kaWNhdGVk IGJ5IEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpLgotICoKLSAqIFdlIG1hdGNoIGl0 ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0 bwotICogZGVsZXRlLgotICoKLSAqIFRoZXJlIGFyZSBuZXZlciBhbnkgc2NhbnMgYWN0aXZlIGlu IGEgYnVja2V0IGF0IHRoZSB0aW1lIFZBQ1VVTSBiZWdpbnMsCi0gKiBiZWNhdXNlIFZBQ1VVTSB0 YWtlcyBhIGNsZWFudXAgbG9jayBvbiB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgc2NhbnMK LSAqIGhvbGQgYSBwaW4uICBBIHNjYW4gY2FuIGJlZ2luIGFmdGVyIFZBQ1VVTSBsZWF2ZXMgdGhl IHByaW1hcnkgYnVja2V0IHBhZ2UKLSAqIGJ1dCBiZWZvcmUgaXQgZmluaXNoZXMgdGhlIGVudGly ZSBidWNrZXQsIGJ1dCBpdCBjYW4gbmV2ZXIgcGFzcyBWQUNVVU0sCi0gKiBiZWNhdXNlIFZBQ1VV TSBhbHdheXMgbG9ja3MgdGhlIG5leHQgcGFnZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBsb2NrIG9u Ci0gKiB0aGUgcHJldmlvdXMgb25lLiAgVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5 IGFib3V0IGFjY2lkZW50YWxseQotICoga2lsbGluZyBhIFRJRCB0aGF0IGhhcyBiZWVuIHJldXNl ZCBmb3IgYW4gdW5yZWxhdGVkIHR1cGxlLgotICovCi12b2lkCi1faGFzaF9raWxsX2l0ZW1zKElu ZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1 ZSkgc2Nhbi0+b3BhcXVlOwotCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0J QmxvY2tOdW1iZXIgYmxrbm87Ci0JQnVmZmVyCQlidWY7Ci0JUGFnZQkJcGFnZTsKLQlIYXNoUGFn ZU9wYXF1ZSBvcGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQltYXhvZmY7Ci0JaW50 CQkJbnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKLQlpbnQJCQlpOwotCWJvb2wJCWtpbGxlZHNv bWV0aGluZyA9IGZhbHNlOwotCWJvb2wJCWhhdmVQaW4gPSBmYWxzZTsKLQotCUFzc2VydChzby0+ bnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsKLQlBc3Nl cnQoSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKgotCSAqIEFsd2F5cyBy ZXNldCB0aGUgc2NhbiBzdGF0ZSwgc28gd2UgZG9uJ3QgbG9vayBmb3Igc2FtZSBpdGVtcyBvbiBv dGhlcgotCSAqIHBhZ2VzLgotCSAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JYmxrbm8gPSBz by0+Y3VyclBvcy5jdXJyUGFnZTsKLQlpZiAoSGFzaFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBv cykpCi0JewotCQkvKgotCQkgKiBXZSBhbHJlYWR5IGhhdmUgcGluIG9uIHRoaXMgYnVmZmVyLCBz bywgYWxsIHdlIG5lZWQgdG8gZG8gaXMKLQkJICogYWNxdWlyZSBsb2NrIG9uIGl0LgotCQkgKi8K LQkJaGF2ZVBpbiA9IHRydWU7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9zLmJ1ZjsKLQkJTG9ja0J1ZmZl cihidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQl9Ci0JZWxzZQotCQlidWYgPSBfaGFzaF9nZXRi dWYocmVsLCBibGtubywgSEFTSF9SRUFELCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCXBhZ2UgPSBC dWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0J bWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCWZvciAoaSA9IDA7IGkg PCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVt c1tpXTsKLQkJSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tp dGVtSW5kZXhdOwotCi0JCW9mZm51bSA9IGN1cnJJdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3Nl cnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4 IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsKLQotCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikK LQkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7Ci0JCQlJ bmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOwot Ci0JCQlpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+aGVh cFRpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCi0JCQkJewotCQkJCQkvKgot CQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNh bgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9j ay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRp bnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkK LQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQotCi0JCQkJLyogZm91bmQgdGhlIGl0ZW0g Ki8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7 Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCi0JCQl9Ci0JCQlv ZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNp bmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGlu dC4gV2hlbmV2ZXIKLQkgKiB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRo ZSBwYWdlJ3MKLQkgKiBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBmbGFnLCB3aGljaCBpcyBsaWtl d2lzZSBqdXN0IGEgaGludC4KLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsKLQkJb3Bh cXVlLT5oYXNob19mbGFnIHw9IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTOwotCQlCdWZmZXJGaW5p c2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYg KHNvLT5oYXNoc29fYnVja2V0X2J1ZiA9PSBzby0+Y3VyclBvcy5idWYgfHwKLQkJaGF2ZVBpbikK LQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7Ci0JZWxz ZQotCQlfaGFzaF9yZWxidWYocmVsLCBidWYpOwotfQpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggOWQ5YWUxMGRk Li5mZjE3YjVmMDIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtODQ1LDcgKzg0NSw4IEBAIGFtZ2V0YmF0Y2gg KEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfZnJlZV9iYXRj aDwvZnVuY3Rpb24+KS4gIE5vdGUgYWxzbyB0aGF0CiAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGZ1bmN0aW9ucyBtdXN0IG5ldmVyIG1vZGlmeSB0aGUKICAgIDxzdHJ1Y3RmaWVs ZD5wcmlvcmJhdGNoPC9zdHJ1Y3RmaWVsZD4gcGFyYW1ldGVyLiAgVGhlIGNvcmUKLSAgIDxmaWxl bmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmlsZW5hbWU+IGltcGxlbWVudGF0aW9u IHByb3ZpZGVzIGEKKyAgIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlLzwvZmls ZW5hbWU+IGFuZAorICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoLzwvZmlsZW5h bWU+IGltcGxlbWVudGF0aW9ucyBwcm92aWRlCiAgICByZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhl IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLgogICA8L3BhcmE+CiAK QEAgLTkyMSw4ICs5MjIsOCBAQCBhbWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4s CiAgIDxwYXJhPgogICAgV2hpbGUgaW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2Jh dGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9uYWwsCiAgICBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBm b3IgcGVyZm9ybWFuY2UsIGFzIGl0IGFsbG93cyBmdXR1cmUgc2NhbnMgdG8gc2tpcAotICAga25v d24tZGVhZCBpbmRleCBlbnRyaWVzLiAgVGhlIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0 IGN1cnJlbnRseQotICAgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChC LXRyZWUpIGltcGxlbWVudHMKKyAgIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4gIEJvdGggY29y ZSBpbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IGN1cnJlbnRseQorICAgc3VwcG9ydCA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUgYW5kIGhhc2gpIGltcGxlbWVudAogICAg PGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZywgdGhvdWdoIHRoaXJkLXBhcnR5IGlu ZGV4IGFjY2VzcyBtZXRob2RzCiAgICBhcmUgZnJlZSB0byBjaG9vc2Ugd2hldGhlciB0byBpbXBs ZW1lbnQgdGhpcyBmZWF0dXJlLgogICAgVGhlIHRhYmxlIEFNIG1heSBjYWxsCkBAIC05NjUsOCAr OTY2LDggQEAgYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPGZ1bmN0 aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IHNob3VsZCBzaW1wbHkgZG8gbm90 aGluZyB3aGVuCiAgICB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJhdGUgV0FMIChpLmUuLCB3 aGVuCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVkc1dBTCgpPC9mdW5jdGlvbj4gaXMgZmFsc2Up LCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KLSAgIHdvdWxkIGJlIHVucmVsaWFibGUuICBTZWUg dGhlIEItdHJlZSBpbmRleCBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UKLSAgIGV4YW1w bGUgb2YgdGhpcyB0ZWNobmlxdWUuCisgICB3b3VsZCBiZSB1bnJlbGlhYmxlLiAgU2VlIHRoZSBC LXRyZWUgYW5kIGhhc2ggaW5kZXggaW1wbGVtZW50YXRpb25zIGZvcgorICAgcmVmZXJlbmNlIGV4 YW1wbGVzIG9mIHRoaXMgdGVjaG5pcXVlLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05ODks OSArOTkwLDkgQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGxlYWYg cGFnZSwgd2hpY2ggcHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CiAgICA8Y29t bWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAgRm9ybWFsbHksIGFuIGluZGV4IEFNIG1heSBob2xk IGEgZGlmZmVyZW50IGtpbmQgb2YgaW50ZXJsb2NrLCBvciBtdWx0aXBsZQotICAgaW50ZXJsb2Nr cywgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIHRoZSBidWls dC1pbgotICAgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+ICZtZGFzaDsgQi10cmVlCi0gICAmbWRhc2g7IGhvbGRzIGEgc2luZ2xlIGJ1ZmZlciBw aW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgorICAgaW50ZXJsb2Nrcywg aW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIGJvdGggYnVpbHQt aW4KKyAgIGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiAmbWRhc2g7IEItdHJlZSBhbmQKKyAgIGhhc2ggJm1kYXNoOyBob2xkIGEgc2luZ2xlIGJ1 ZmZlciBwaW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgogICAgZm9yIGRl dGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fucy4gIFRoaXMg ZnVuY3Rpb24KICAgIG11c3QgYmUgaWRlbXBvdGVudDogaXQgbWF5IGJlIGNhbGxlZCBtb3JlIHRo YW4gb25jZSBmb3IgdGhlIHNhbWUgYmF0Y2gsIGFuZAogICAgbXVzdCBkbyBub3RoaW5nIGlmIHRo ZSBpbnRlcmxvY2sgaGFzIGFscmVhZHkgYmVlbiBkcm9wcGVkLiAgSW1wbGVtZW50YXRpb25zCkBA IC0xMDY0LDggKzEwNjUsOCBAQCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAg PGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmluZyA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+CiAgICBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwv bGl0ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRhYmxlIEFNCiAgICBhbmQgY29yZSBj b2RlLCBhbmQgdGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZQotICAgPGZ1 bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEKLSAgIHJlZmVyZW5jZSBleGFtcGxlLiAg VGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCByZXVzZWQgYnkKKyAg IDxmdW5jdGlvbj5fYnRfbmV4dDwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+X2hhc2hfbmV4dDwv ZnVuY3Rpb24+IGZvcgorICAgcmVmZXJlbmNlIGV4YW1wbGVzLiAgVGhlIHJlbGVhc2VkIGJhdGNo IGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCByZXVzZWQgYnkKICAgIHRoZSBuZXh0IDxmdW5jdGlv bj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8L2Z1bmN0aW9uPiBjYWxsLCBhdm9pZGluZwogICAg cmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24gZHVyaW5nIHRoZSBiaXRtYXAgc2Nhbi4KICAgPC9w YXJhPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBhYjBjZGZhZDIuLjBlM2NmZTY2NiAx MDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTEyMDAsNiArMTIwMCw3IEBAIEhhc2gKIEhh c2hBZ2dCYXRjaAogSGFzaEFnZ1NwaWxsCiBIYXNoQWxsb2NGdW5jCitIYXNoQmF0Y2hEYXRhCiBI YXNoQnVpbGRTdGF0ZQogSGFzaEJ1bGtEZWxldGVTdHJlYW1Qcml2YXRlCiBIYXNoQ29tcGFyZUZ1 bmMKQEAgLTEyMjEsOCArMTIyMiw2IEBAIEhhc2hQYWdlU3RhdAogSGFzaFBhdGgKIEhhc2hTY2Fu T3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJ dGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUzLjAK Cg== --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0016-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Disposition: attachment; filename="v16-0016-Add-fake-LSN-support-to-hash-index-AM.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehin2 RnJvbSAwMTE2NGQxYzY0NmQ0NDFiNTA4ZmI3YjY3ZmM4YmVhNzU4M2NiMjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMTggSmFuIDIwMjYgMTE6MzI6NTIgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNiAxNi8xN10g QWRkIGZha2UgTFNOIHN1cHBvcnQgdG8gaGFzaCBpbmRleCBBTS4KClRoaXMgaXMgcHJlcGFyYXRp b24gZm9yIGFuIHVwY29taW5nIHBhdGNoIHRoYXQgd2lsbCBhZGQgdGhlIGFtZ2V0YmF0Y2gKaW50 ZXJmYWNlIGFuZCBzd2l0Y2ggaGFzaCBvdmVyIHRvIGl0IChmcm9tIGFtZ2V0dHVwbGUpLiAgV2Ug bmVlZCBmYWtlCkxTTnMgdG8gbWFrZSBpdCBzYWZlIHRvIGFwcGx5IGJlaGF2aW9yIHRoYXQgaXMg ZXF1aXZhbGVudCB0byBuYnRyZWUncwpwcmV2aW91cyBkcm9wUGluIGJlaGF2aW9yIHRoYXQgd29y a3Mgd2l0aCB1bmxvZ2dlZCBoYXNoIGluZGV4IHNjYW5zLgoKVGhlIGNvbW1pdCB0aGF0IHdpbGwg YWRkIGhhc2hnZXRiYXRjaCB3aWxsIHJlcGxhY2UgX2hhc2hfa2lsbF9pdGVtcyB3aXRoCmEgbmV3 IGhhc2hraWxsaXRlbXNiYXRjaCByb3V0aW5lLiAgVGhpcyB3aWxsIGJlIHZlcnkgc2ltaWxhciB0 byB0aGUKYnRraWxsaXRlbXNiYXRjaCByb3V0aW5lIGFkZGVkIGJ5IGNvbW1pdCBYWFhYWC4gIElu IHBhcnRpY3VsYXIsIGl0IHdpbGwKdXNlIHRoZSBzYW1lICJkaWQgdGhlIGluZGV4IHBhZ2UncyBM U04gY2hhbmdlIHNpbmNlIHRoZSBwYWdlIHdhcyBmaXJzdApyZWFkPyIgdHJpY2suCgpBdXRob3I6 IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS9DQUgyLVd6a2VodWh4eXVBOHF1YzdyUk4zRXROWHBpS3NqUGZPOG1oYiswRHIySzBEdGdA bWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAg fCAgMjEgKysrLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYyB8ICAyMCAr KystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYyAgIHwgMTExICsrKysrKysr KysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAg IHwgIDIyICsrKy0tLQogNCBmaWxlcyBjaGFuZ2VkLCAxMDUgaW5zZXJ0aW9ucygrKSwgNjkgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDMyZGFkZWJlYi4uMmUzMmJlMjMz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC01MTIsNiArNTEyLDcgQEAgaGFzaGJ1bGtkZWxl dGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLCBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAog CUhhc2hNZXRhUGFnZSBjYWNoZWRtZXRhcDsKIAlIYXNoQnVsa0RlbGV0ZVN0cmVhbVByaXZhdGUg c3RyZWFtX3ByaXZhdGU7CiAJUmVhZFN0cmVhbSAqc3RyZWFtID0gTlVMTDsKKwlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCXR1cGxlc19yZW1vdmVkID0gMDsKIAludW1faW5kZXhfdHVwbGVzID0gMDsK QEAgLTY5MCw3ICs2OTEsNiBAQCBidWNrZXRfbG9vcDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChy ZWwpKQogCXsKIAkJeGxfaGFzaF91cGRhdGVfbWV0YV9wYWdlIHhscmVjOwotCQlYTG9nUmVjUHRy CXJlY3B0cjsKIAogCQl4bHJlYy5udHVwbGVzID0gbWV0YXAtPmhhc2htX250dXBsZXM7CiAKQEAg LTcwMCw4ICs3MDAsMTEgQEAgYnVja2V0X2xvb3A6CiAJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBt ZXRhYnVmLCBSRUdCVUZfU1RBTkRBUkQpOwogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFT SF9JRCwgWExPR19IQVNIX1VQREFURV9NRVRBX1BBR0UpOwotCQlQYWdlU2V0TFNOKEJ1ZmZlckdl dFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UKKwkJcmVjcHRyID0gWExvZ0dldEZh a2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVmKSwgcmVjcHRy KTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNzc0LDYgKzc3Nyw3IEBAIGhhc2hidWNr ZXRjbGVhbnVwKFJlbGF0aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRf YnVmLAogCUJ1ZmZlcgkJYnVmOwogCUJ1Y2tldAkJbmV3X2J1Y2tldCBQR19VU0VEX0ZPUl9BU1NF UlRTX09OTFkgPSBJbnZhbGlkQnVja2V0OwogCWJvb2wJCWJ1Y2tldF9kaXJ0eSA9IGZhbHNlOwor CVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJYmxrbm8gPSBidWNrZXRfYmxrbm87CiAJYnVmID0gYnVj a2V0X2J1ZjsKQEAgLTg5Niw3ICs5MDAsNiBAQCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiBy ZWwsIEJ1Y2tldCBjdXJfYnVja2V0LCBCdWZmZXIgYnVja2V0X2J1ZiwKIAkJCWlmIChSZWxhdGlv bk5lZWRzV0FMKHJlbCkpCiAJCQl7CiAJCQkJeGxfaGFzaF9kZWxldGUgeGxyZWM7Ci0JCQkJWExv Z1JlY1B0cglyZWNwdHI7CiAKIAkJCQl4bHJlYy5jbGVhcl9kZWFkX21hcmtpbmcgPSBjbGVhcl9k ZWFkX21hcmtpbmc7CiAJCQkJeGxyZWMuaXNfcHJpbWFyeV9idWNrZXRfcGFnZSA9IChidWYgPT0g YnVja2V0X2J1Zik7CkBAIC05MjEsOCArOTI0LDExIEBAIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0 aW9uIHJlbCwgQnVja2V0IGN1cl9idWNrZXQsIEJ1ZmZlciBidWNrZXRfYnVmLAogCQkJCQkJCQkJ bmRlbGV0YWJsZSAqIHNpemVvZihPZmZzZXROdW1iZXIpKTsKIAogCQkJCXJlY3B0ciA9IFhMb2dJ bnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX0RFTEVURSk7Ci0JCQkJUGFnZVNldExTTihCdWZm ZXJHZXRQYWdlKGJ1ZiksIHJlY3B0cik7CiAJCQl9CisJCQllbHNlCisJCQkJcmVjcHRyID0gWExv Z0dldEZha2VMU04ocmVsKTsKKworCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1ZiksIHJl Y3B0cik7CiAKIAkJCUVORF9DUklUX1NFQ1RJT04oKTsKIAkJfQpAQCAtOTgxLDE0ICs5ODcsMTUg QEAgaGFzaGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwgQnVm ZmVyIGJ1Y2tldF9idWYsCiAJCS8qIFhMT0cgc3R1ZmYgKi8KIAkJaWYgKFJlbGF0aW9uTmVlZHNX QUwocmVsKSkKIAkJewotCQkJWExvZ1JlY1B0cglyZWNwdHI7Ci0KIAkJCVhMb2dCZWdpbkluc2Vy dCgpOwogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDAsIGJ1Y2tldF9idWYsIFJFR0JVRl9TVEFOREFS RCk7CiAKIAkJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19IQVNIX1NQTElU X0NMRUFOVVApOwotCQkJUGFnZVNldExTTihwYWdlLCByZWNwdHIpOwogCQl9CisJCWVsc2UKKwkJ CXJlY3B0ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwkJUGFnZVNldExTTihwYWdlLCByZWNw dHIpOwogCiAJCUVORF9DUklUX1NFQ1RJT04oKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo aW5zZXJ0LmMKaW5kZXggMGNlZmJhY2M5Li4zMzk1YmJjMTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hpbnNlcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoaW5zZXJ0LmMKQEAgLTUwLDYgKzUwLDcgQEAgX2hhc2hfZG9pbnNlcnQoUmVsYXRpb24g cmVsLCBJbmRleFR1cGxlIGl0dXAsIFJlbGF0aW9uIGhlYXBSZWwsIGJvb2wgc29ydGVkKQogCXVp bnQzMgkJaGFzaGtleTsKIAlCdWNrZXQJCWJ1Y2tldDsKIAlPZmZzZXROdW1iZXIgaXR1cF9vZmY7 CisJWExvZ1JlY1B0cglyZWNwdHI7CiAKIAkvKgogCSAqIEdldCB0aGUgaGFzaCBrZXkgZm9yIHRo ZSBpdGVtIChpdCdzIHN0b3JlZCBpbiB0aGUgaW5kZXggdHVwbGUgaXRzZWxmKS4KQEAgLTIxNiw3 ICsyMTcsNiBAQCByZXN0YXJ0X2luc2VydDoKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQog CXsKIAkJeGxfaGFzaF9pbnNlcnQgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhs cmVjLm9mZm51bSA9IGl0dXBfb2ZmOwogCkBAIC0yMjksMTAgKzIyOSwxMiBAQCByZXN0YXJ0X2lu c2VydDoKIAkJWExvZ1JlZ2lzdGVyQnVmRGF0YSgwLCBpdHVwLCBJbmRleFR1cGxlU2l6ZShpdHVw KSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfSU5TRVJU KTsKLQotCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKG1ldGFidWYpLCByZWNwdHIpOwogCX0KKwllbHNlCisJCXJlY3B0 ciA9IFhMb2dHZXRGYWtlTFNOKHJlbCk7CisKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVm KSwgcmVjcHRyKTsKKwlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7 CiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKQEAgLTM3Miw2ICszNzQsNyBAQCBfaGFzaF92YWN1 dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1Ziwg QnVmZmVyIGJ1ZikKIAlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwogCUhhc2hQYWdl T3BhcXVlIHBhZ2VvcGFxdWU7CiAJSGFzaE1ldGFQYWdlIG1ldGFwOworCVhMb2dSZWNQdHIJcmVj cHRyOwogCiAJLyogU2NhbiBlYWNoIHR1cGxlIGluIHBhZ2UgdG8gc2VlIGlmIGl0IGlzIG1hcmtl ZCBhcyBMUF9ERUFEICovCiAJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsK QEAgLTQyNCw3ICs0MjcsNiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBS ZWxhdGlvbiBocmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJaWYgKFJlbGF0aW9u TmVlZHNXQUwocmVsKSkKIAkJewogCQkJeGxfaGFzaF92YWN1dW1fb25lX3BhZ2UgeGxyZWM7Ci0J CQlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCQkJeGxyZWMuaXNDYXRhbG9nUmVsID0gUmVsYXRpb25J c0FjY2Vzc2libGVJbkxvZ2ljYWxEZWNvZGluZyhocmVsKTsKIAkJCXhscmVjLnNuYXBzaG90Q29u ZmxpY3RIb3Jpem9uID0gc25hcHNob3RDb25mbGljdEhvcml6b247CkBAIC00NDUsMTAgKzQ0Nywx MiBAQCBfaGFzaF92YWN1dW1fb25lX3BhZ2UoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBocmVsLCBC dWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1ZikKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigxLCBtZXRh YnVmLCBSRUdCVUZfU1RBTkRBUkQpOwogCiAJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hf SUQsIFhMT0dfSEFTSF9WQUNVVU1fT05FX1BBR0UpOwotCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdl dFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVm KSwgcmVjcHRyKTsKIAkJfQorCQllbHNlCisJCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwp OworCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCQlQYWdlU2V0 TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAkJRU5EX0NSSVRfU0VDVElP TigpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYwppbmRleCA4Y2ZiNmNlNzUuLmFiZDFm OTFmYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaG92ZmwuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNob3ZmbC5jCkBAIC0xMzIsNiArMTMyLDcgQEAg X2hhc2hfYWRkb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIGJ1 ZiwgYm9vbCByZXRhaW5fcGluKQogCXVpbnQzMgkJaSwKIAkJCQlqOwogCWJvb2wJCXBhZ2VfZm91 bmQgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCS8qCiAJICogV3JpdGUtbG9jayB0 aGUgdGFpbCBwYWdlLiAgSGVyZSwgd2UgbmVlZCB0byBtYWludGFpbiBsb2NraW5nIG9yZGVyIHN1 Y2gKQEAgLTM4MSw3ICszODIsNiBAQCBmb3VuZDoKIAkvKiBYTE9HIHN0dWZmICovCiAJaWYgKFJl bGF0aW9uTmVlZHNXQUwocmVsKSkKIAl7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCQl4bF9oYXNo X2FkZF9vdmZsX3BhZ2UgeGxyZWM7CiAKIAkJeGxyZWMuYm1wYWdlX2ZvdW5kID0gcGFnZV9mb3Vu ZDsKQEAgLTQwOCwxOCArNDA4LDIwIEBAIGZvdW5kOgogCQlYTG9nUmVnaXN0ZXJCdWZEYXRhKDQs ICZtZXRhcC0+aGFzaG1fZmlyc3RmcmVlLCBzaXplb2YodWludDMyKSk7CiAKIAkJcmVjcHRyID0g WExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfQUREX09WRkxfUEFHRSk7Ci0KLQkJUGFn ZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2UoYnVmKSwgcmVjcHRyKTsKLQotCQlpZiAoQnVmZmVySXNWYWxpZChtYXBidWYp KQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7Ci0KLQkJaWYg KEJ1ZmZlcklzVmFsaWQobmV3bWFwYnVmKSkKLQkJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShu ZXdtYXBidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVm KSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOwor CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIpOworCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShidWYpLCByZWNwdHIpOworCisJaWYgKEJ1ZmZlcklzVmFsaWQobWFw YnVmKSkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1hcGJ1ZiksIHJlY3B0cik7CisKKwlp ZiAoQnVmZmVySXNWYWxpZChuZXdtYXBidWYpKQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uo bmV3bWFwYnVmKSwgcmVjcHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtZXRhYnVm KSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtNTEwLDcgKzUxMiwxMSBA QCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZm ZXIgb3ZmbGJ1ZiwKIAlCdWNrZXQJCWJ1Y2tldCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAJ QnVmZmVyCQlwcmV2YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlCdWZmZXIJCW5leHRidWYgPSBJbnZh bGlkQnVmZmVyOwotCWJvb2wJCXVwZGF0ZV9tZXRhcCA9IGZhbHNlOworCWJvb2wJCXVwZGF0ZV9t ZXRhcCA9IGZhbHNlLAorCQkJCW1vZF93YnVmLAorCQkJCWlzX3ByaW1fYnVja2V0X3NhbWVfd3J0 LAorCQkJCWlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJ LyogR2V0IGluZm9ybWF0aW9uIGZyb20gdGhlIGRvb21lZCBwYWdlICovCiAJX2hhc2hfY2hlY2tw YWdlKHJlbCwgb3ZmbGJ1ZiwgTEhfT1ZFUkZMT1dfUEFHRSk7CkBAIC02NDEsMTkgKzY0NywyMSBA QCBfaGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZm ZXIgb3ZmbGJ1ZiwKIAkJTWFya0J1ZmZlckRpcnR5KG1ldGFidWYpOwogCX0KIAorCS8qIERldGVy bWluZSB3aGljaCBwYWdlcyBXQUwgcmVjb3JkIG1vZGlmaWVzICovCisJbW9kX3didWYgPSBmYWxz ZTsKKwlpc19wcmltX2J1Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IGJ1Y2tldGJ1Zik7CisJaXNf cHJldl9idWNrZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBwcmV2YnVmKTsKKwogCS8qIFhMT0cgc3R1 ZmYgKi8KIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwpKQogCXsKIAkJeGxfaGFzaF9zcXVlZXpl X3BhZ2UgeGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwotCQlpbnQJCQlpOwotCQlib29sCQlt b2Rfd2J1ZiA9IGZhbHNlOwogCiAJCXhscmVjLnByZXZibGtubyA9IHByZXZibGtubzsKIAkJeGxy ZWMubmV4dGJsa25vID0gbmV4dGJsa25vOwogCQl4bHJlYy5udHVwcyA9IG5pdHVwczsKLQkJeGxy ZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgPSAod2J1ZiA9PSBidWNrZXRidWYpOwotCQl4bHJl Yy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCA9ICh3YnVmID09IHByZXZidWYpOworCQl4bHJlYy5p c19wcmltX2J1Y2tldF9zYW1lX3dydCA9IGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0OworCQl4bHJl Yy5pc19wcmV2X2J1Y2tldF9zYW1lX3dydCA9IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0OwogCiAJ CVhMb2dCZWdpbkluc2VydCgpOwogCQlYTG9nUmVnaXN0ZXJEYXRhKCZ4bHJlYywgU2l6ZU9mSGFz aFNxdWVlemVQYWdlKTsKQEAgLTY2MiwxNCArNjcwLDE0IEBAIF9oYXNoX2ZyZWVvdmZscGFnZShS ZWxhdGlvbiByZWwsIEJ1ZmZlciBidWNrZXRidWYsIEJ1ZmZlciBvdmZsYnVmLAogCQkgKiBidWNr ZXQgYnVmZmVyIHdhcyBub3QgY2hhbmdlZCwgYnV0IHN0aWxsIG5lZWRzIHRvIGJlIHJlZ2lzdGVy ZWQgdG8KIAkJICogZW5zdXJlIHRoYXQgd2UgY2FuIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24g aXQgZHVyaW5nIHJlcGxheS4KIAkJICovCi0JCWlmICgheGxyZWMuaXNfcHJpbV9idWNrZXRfc2Ft ZV93cnQpCisJCWlmICghaXNfcHJpbV9idWNrZXRfc2FtZV93cnQpCiAJCXsKIAkJCXVpbnQ4CQlm bGFncyA9IFJFR0JVRl9TVEFOREFSRCB8IFJFR0JVRl9OT19JTUFHRSB8IFJFR0JVRl9OT19DSEFO R0U7CiAKIAkJCVhMb2dSZWdpc3RlckJ1ZmZlcigwLCBidWNrZXRidWYsIGZsYWdzKTsKIAkJfQog Ci0JCWlmICh4bHJlYy5udHVwcyA+IDApCisJCWlmIChuaXR1cHMgPiAwKQogCQl7CiAJCQlYTG9n UmVnaXN0ZXJCdWZmZXIoMSwgd2J1ZiwgUkVHQlVGX1NUQU5EQVJEKTsKIApAQCAtNjc4LDEwICs2 ODYsMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1 ZiwgQnVmZmVyIG92ZmxidWYsCiAKIAkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cF9vZmZz ZXRzLAogCQkJCQkJCQluaXR1cHMgKiBzaXplb2YoT2Zmc2V0TnVtYmVyKSk7Ci0JCQlmb3IgKGkg PSAwOyBpIDwgbml0dXBzOyBpKyspCisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5pdHVwczsgaSsr KQogCQkJCVhMb2dSZWdpc3RlckJ1ZkRhdGEoMSwgaXR1cHNbaV0sIHR1cHNfc2l6ZVtpXSk7CiAJ CX0KLQkJZWxzZSBpZiAoeGxyZWMuaXNfcHJpbV9idWNrZXRfc2FtZV93cnQgfHwgeGxyZWMuaXNf cHJldl9idWNrZXRfc2FtZV93cnQpCisJCWVsc2UgaWYgKGlzX3ByaW1fYnVja2V0X3NhbWVfd3J0 IHx8IGlzX3ByZXZfYnVja2V0X3NhbWVfd3J0KQogCQl7CiAJCQl1aW50OAkJd2J1Zl9mbGFnczsK IApAQCAtNjkxLDEwICs2OTksMTAgQEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwg QnVmZmVyIGJ1Y2tldGJ1ZiwgQnVmZmVyIG92ZmxidWYsCiAJCQkgKiBpZiBpdCBpcyB0aGUgc2Ft ZSBhcyBwcmltYXJ5IGJ1Y2tldCBidWZmZXIgb3IgdXBkYXRlIHRoZQogCQkJICogbmV4dGJsa25v IGlmIGl0IGlzIHNhbWUgYXMgdGhlIHByZXZpb3VzIGJ1Y2tldCBidWZmZXIuCiAJCQkgKi8KLQkJ CUFzc2VydCh4bHJlYy5udHVwcyA9PSAwKTsKKwkJCUFzc2VydChuaXR1cHMgPT0gMCk7CiAKIAkJ CXdidWZfZmxhZ3MgPSBSRUdCVUZfU1RBTkRBUkQ7Ci0JCQlpZiAoIXhscmVjLmlzX3ByZXZfYnVj a2V0X3NhbWVfd3J0KQorCQkJaWYgKCFpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkKIAkJCXsKIAkJ CQl3YnVmX2ZsYWdzIHw9IFJFR0JVRl9OT19DSEFOR0U7CiAJCQl9CkBAIC03MTQsNyArNzIyLDcg QEAgX2hhc2hfZnJlZW92ZmxwYWdlKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1Y2tldGJ1ZiwgQnVm ZmVyIG92ZmxidWYsCiAJCSAqIHByZXZwYWdlLiAgRHVyaW5nIHJlcGxheSwgd2UgY2FuIGRpcmVj dGx5IHVwZGF0ZSB0aGUgbmV4dGJsb2NrIGluCiAJCSAqIHdyaXRlcGFnZS4KIAkJICovCi0JCWlm IChCdWZmZXJJc1ZhbGlkKHByZXZidWYpICYmICF4bHJlYy5pc19wcmV2X2J1Y2tldF9zYW1lX3dy dCkKKwkJaWYgKEJ1ZmZlcklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVf d3J0KQogCQkJWExvZ1JlZ2lzdGVyQnVmZmVyKDMsIHByZXZidWYsIFJFR0JVRl9TVEFOREFSRCk7 CiAKIAkJaWYgKEJ1ZmZlcklzVmFsaWQobmV4dGJ1ZikpCkBAIC03MzAsMjMgKzczOCwzMyBAQCBf aGFzaF9mcmVlb3ZmbHBhZ2UoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVja2V0YnVmLCBCdWZmZXIg b3ZmbGJ1ZiwKIAkJfQogCiAJCXJlY3B0ciA9IFhMb2dJbnNlcnQoUk1fSEFTSF9JRCwgWExPR19I QVNIX1NRVUVFWkVfUEFHRSk7Ci0KLQkJLyogU2V0IExTTiBpZmYgd2J1ZiBpcyBtb2RpZmllZC4g Ki8KLQkJaWYgKG1vZF93YnVmKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYpLCBy ZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShvdmZsYnVmKSwgcmVjcHRyKTsK LQotCQlpZiAoQnVmZmVySXNWYWxpZChwcmV2YnVmKSAmJiAheGxyZWMuaXNfcHJldl9idWNrZXRf c2FtZV93cnQpCi0JCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7 Ci0JCWlmIChCdWZmZXJJc1ZhbGlkKG5leHRidWYpKQotCQkJUGFnZVNldExTTihCdWZmZXJHZXRQ YWdlKG5leHRidWYpLCByZWNwdHIpOwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBi dWYpLCByZWNwdHIpOwotCi0JCWlmICh1cGRhdGVfbWV0YXApCi0JCQlQYWdlU2V0TFNOKEJ1ZmZl ckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAJfQorCWVsc2UJCQkJCQkvKiAhUmVsYXRpb25O ZWVkc1dBTChyZWwpICovCisJeworCQlyZWNwdHIgPSBYTG9nR2V0RmFrZUxTTihyZWwpOworCisJ CS8qIERldGVybWluZSBpZiB3YnVmIGlzIG1vZGlmaWVkICovCisJCWlmIChuaXR1cHMgPiAwKQor CQkJbW9kX3didWYgPSB0cnVlOworCQllbHNlIGlmIChpc19wcmV2X2J1Y2tldF9zYW1lX3dydCkK KwkJCW1vZF93YnVmID0gdHJ1ZTsKKwl9CisKKwkvKiBTZXQgTFNOIGlmZiB3YnVmIGlzIG1vZGlm aWVkLiAqLworCWlmIChtb2Rfd2J1ZikKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKHdidWYp LCByZWNwdHIpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG92ZmxidWYpLCByZWNwdHIp OworCisJaWYgKEJ1ZmZlcklzVmFsaWQocHJldmJ1ZikgJiYgIWlzX3ByZXZfYnVja2V0X3NhbWVf d3J0KQorCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocHJldmJ1ZiksIHJlY3B0cik7CisJaWYg KEJ1ZmZlcklzVmFsaWQobmV4dGJ1ZikpCisJCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShuZXh0 YnVmKSwgcmVjcHRyKTsKKworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShtYXBidWYpLCByZWNw dHIpOworCisJaWYgKHVwZGF0ZV9tZXRhcCkKKwkJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKG1l dGFidWYpLCByZWNwdHIpOwogCiAJRU5EX0NSSVRfU0VDVElPTigpOwogCkBAIC05NTksNiArOTc3 LDggQEAgcmVhZHBhZ2U6CiAKIAkJCQlpZiAobml0dXBzID4gMCkKIAkJCQl7CisJCQkJCVhMb2dS ZWNQdHIJcmVjcHRyOworCiAJCQkJCUFzc2VydChuaXR1cHMgPT0gbmRlbGV0YWJsZSk7CiAKIAkJ CQkJLyoKQEAgLTk4Niw3ICsxMDA2LDYgQEAgcmVhZHBhZ2U6CiAJCQkJCS8qIFhMT0cgc3R1ZmYg Ki8KIAkJCQkJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKIAkJCQkJewotCQkJCQkJWExvZ1Jl Y1B0cglyZWNwdHI7CiAJCQkJCQl4bF9oYXNoX21vdmVfcGFnZV9jb250ZW50cyB4bHJlYzsKIAog CQkJCQkJeGxyZWMubnR1cHMgPSBuaXR1cHM7CkBAIC0xMDE4LDEwICsxMDM3LDEyIEBAIHJlYWRw YWdlOgogCQkJCQkJCQkJCQluZGVsZXRhYmxlICogc2l6ZW9mKE9mZnNldE51bWJlcikpOwogCiAJ CQkJCQlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX0hBU0hfSUQsIFhMT0dfSEFTSF9NT1ZFX1BBR0Vf Q09OVEVOVFMpOwotCi0JCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0 cik7Ci0JCQkJCQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UocmJ1ZiksIHJlY3B0cik7CiAJCQkJ CX0KKwkJCQkJZWxzZQorCQkJCQkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCQkJ CQlQYWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2Uod2J1ZiksIHJlY3B0cik7CisJCQkJCVBhZ2VTZXRM U04oQnVmZmVyR2V0UGFnZShyYnVmKSwgcmVjcHRyKTsKIAogCQkJCQlFTkRfQ1JJVF9TRUNUSU9O KCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDhlMjIwYTNhZS4uMjYzYmM3 M2YxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTYzMCw2ICs2MzAsNyBAQCBf aGFzaF9leHBhbmR0YWJsZShSZWxhdGlvbiByZWwsIEJ1ZmZlciBtZXRhYnVmKQogCXVpbnQzMgkJ bG93bWFzazsKIAlib29sCQltZXRhcF91cGRhdGVfbWFza3MgPSBmYWxzZTsKIAlib29sCQltZXRh cF91cGRhdGVfc3BsaXRwb2ludCA9IGZhbHNlOworCVhMb2dSZWNQdHIJcmVjcHRyOwogCiByZXN0 YXJ0X2V4cGFuZDoKIApAQCAtOTAwLDcgKzkwMSw2IEBAIHJlc3RhcnRfZXhwYW5kOgogCWlmIChS ZWxhdGlvbk5lZWRzV0FMKHJlbCkpCiAJewogCQl4bF9oYXNoX3NwbGl0X2FsbG9jYXRlX3BhZ2Ug eGxyZWM7Ci0JCVhMb2dSZWNQdHIJcmVjcHRyOwogCiAJCXhscmVjLm5ld19idWNrZXQgPSBtYXhi dWNrZXQ7CiAJCXhscmVjLm9sZF9idWNrZXRfZmxhZyA9IG9vcGFxdWUtPmhhc2hvX2ZsYWc7CkBA IC05MzMsMTEgKzkzMywxMyBAQCByZXN0YXJ0X2V4cGFuZDoKIAkJWExvZ1JlZ2lzdGVyRGF0YSgm eGxyZWMsIFNpemVPZkhhc2hTcGxpdEFsbG9jUGFnZSk7CiAKIAkJcmVjcHRyID0gWExvZ0luc2Vy dChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQUxMT0NBVEVfUEFHRSk7Ci0KLQkJUGFnZVNl dExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNwdHIpOwotCQlQYWdlU2V0TFNOKEJ1 ZmZlckdldFBhZ2UoYnVmX25ibGtubyksIHJlY3B0cik7Ci0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0 UGFnZShtZXRhYnVmKSwgcmVjcHRyKTsKIAl9CisJZWxzZQorCQlyZWNwdHIgPSBYTG9nR2V0RmFr ZUxTTihyZWwpOworCisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdlKGJ1Zl9vYmxrbm8pLCByZWNw dHIpOworCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWZfbmJsa25vKSwgcmVjcHRyKTsKKwlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UobWV0YWJ1ZiksIHJlY3B0cik7CiAKIAlFTkRfQ1JJVF9T RUNUSU9OKCk7CiAKQEAgLTEwOTIsNiArMTA5NCw3IEBAIF9oYXNoX3NwbGl0YnVja2V0KFJlbGF0 aW9uIHJlbCwKIAlTaXplCQlhbGxfdHVwc19zaXplID0gMDsKIAlpbnQJCQlpOwogCXVpbnQxNgkJ bml0dXBzID0gMDsKKwlYTG9nUmVjUHRyCXJlY3B0cjsKIAogCWJ1Y2tldF9vYnVmID0gb2J1ZjsK IAlvcGFnZSA9IEJ1ZmZlckdldFBhZ2Uob2J1Zik7CkBAIC0xMjk2LDcgKzEyOTksNiBAQCBfaGFz aF9zcGxpdGJ1Y2tldChSZWxhdGlvbiByZWwsCiAKIAlpZiAoUmVsYXRpb25OZWVkc1dBTChyZWwp KQogCXsKLQkJWExvZ1JlY1B0cglyZWNwdHI7CiAJCXhsX2hhc2hfc3BsaXRfY29tcGxldGUgeGxy ZWM7CiAKIAkJeGxyZWMub2xkX2J1Y2tldF9mbGFnID0gb29wYXF1ZS0+aGFzaG9fZmxhZzsKQEAg LTEzMTAsMTAgKzEzMTIsMTIgQEAgX2hhc2hfc3BsaXRidWNrZXQoUmVsYXRpb24gcmVsLAogCQlY TG9nUmVnaXN0ZXJCdWZmZXIoMSwgYnVja2V0X25idWYsIFJFR0JVRl9TVEFOREFSRCk7CiAKIAkJ cmVjcHRyID0gWExvZ0luc2VydChSTV9IQVNIX0lELCBYTE9HX0hBU0hfU1BMSVRfQ09NUExFVEUp OwotCi0JCVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7Ci0J CVBhZ2VTZXRMU04oQnVmZmVyR2V0UGFnZShidWNrZXRfbmJ1ZiksIHJlY3B0cik7CiAJfQorCWVs c2UKKwkJcmVjcHRyID0gWExvZ0dldEZha2VMU04ocmVsKTsKKworCVBhZ2VTZXRMU04oQnVmZmVy R2V0UGFnZShidWNrZXRfb2J1ZiksIHJlY3B0cik7CisJUGFnZVNldExTTihCdWZmZXJHZXRQYWdl KGJ1Y2tldF9uYnVmKSwgcmVjcHRyKTsKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotLSAKMi41 My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0001-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Disposition: attachment; filename="v16-0001-Make-IndexScanInstrumentation-a-pointer-in-execu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehif0 RnJvbSA4YmNkNGViMjJhNjQ3OTMwMmZlY2FmNTA4OGMxZjAzZjQzZjFmNDA3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6MjI6MjUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNiAwMS8xN10g TWFrZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gYSBwb2ludGVyIGluIGV4ZWN1dG9yCiBzY2Fu IG5vZGVzLgoKQ2hhbmdlIHRoZSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gZmllbGRzIGluIElu ZGV4U2NhblN0YXRlLApJbmRleE9ubHlTY2FuU3RhdGUsIGFuZCBCaXRtYXBJbmRleFNjYW5TdGF0 ZSBmcm9tIGlubGluZSBzdHJ1Y3RzIHRvCnBvaW50ZXJzLiAgVGhpcyBhdm9pZHMgYWRkaW5nIGFk ZGl0aW9uYWwgb3ZlcmhlYWQgYXMgbmV3IGZpZWxkcyBhcmUKYWRkZWQgdG8gSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uLCBhdCBsZWFzdCBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlCmluc3Ry dW1lbnRhdGlvbiBpc24ndCB1c2VkIChpLmUuIHdoZW4gdGhlIGV4ZWN1dG9yIG5vZGUgaXNuJ3Qg YmVpbmcgcnVuCnRocm91Z2ggYW4gRVhQTEFJTiBBTkFMWVpFKS4KLS0tCiBzcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgfCAgNiArKystLS0KIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQogc3JjL2JhY2tlbmQvZXhl Y3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIHwgIDggKysrKysrLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICB8IDEyICsrKysrKysrLS0tLQogc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jICAgICAgIHwgMTQgKysrKysrKysrLS0tLS0KIDUg ZmlsZXMgY2hhbmdlZCwgMjkgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAppbmRleCAwNzE2YzVhOWEuLjU4NmJkYzIxOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVz LmgKQEAgLTE3MzIsNyArMTczMiw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAJ RXhwckNvbnRleHQgKmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbglpc3NfUmVsYXRpb25E ZXNjOwogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaXNzX1NjYW5EZXNjOwotCUluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiBpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKmlzc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaXNz X1NoYXJlZEluZm87CiAKIAkvKiBUaGVzZSBhcmUgbmVlZGVkIGZvciByZS1jaGVja2luZyBPUkRF UiBCWSBleHByIG9yZGVyaW5nICovCkBAIC0xNzgzLDcgKzE3ODMsNyBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlFeHByQ29udGV4dCAqaW9zc19SdW50aW1lQ29udGV4dDsK IAlSZWxhdGlvbglpb3NzX1JlbGF0aW9uRGVzYzsKIAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEg Kmlvc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGlvc3NfSW5zdHJ1bWVu dDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmlvc3NfU2hhcmVkSW5mbzsKIAlUdXBsZVRhYmxlU2xv dCAqaW9zc19UYWJsZVNsb3Q7CiAJQnVmZmVyCQlpb3NzX1ZNQnVmZmVyOwpAQCAtMTgyNCw3ICsx ODI0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQml0bWFwSW5kZXhTY2FuU3RhdGUKIAlFeHByQ29udGV4 dCAqYmlzc19SdW50aW1lQ29udGV4dDsKIAlSZWxhdGlvbgliaXNzX1JlbGF0aW9uRGVzYzsKIAlz dHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmJpc3NfU2NhbkRlc2M7Ci0JSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uIGJpc3NfSW5zdHJ1bWVudDsKKwlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJp c3NfSW5zdHJ1bWVudDsKIAlTaGFyZWRJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmJpc3NfU2hh cmVkSW5mbzsKIH0gQml0bWFwSW5kZXhTY2FuU3RhdGU7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpp bmRleCAyOTZlYThhMWUuLmU0YjcwMTY2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwpAQCAtMzg4 MCw3ICszODgwLDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJSW5kZXhTY2FuU3RhdGUgKmluZGV4c3Rh dGUgPSAoKEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCQkJbnNlYXJjaGVzID0gaW5k ZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0gaW5k ZXhzdGF0ZS0+aXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zODg4LDcgKzM4 ODgsNyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKIAkJCXsKIAkJCQlJbmRleE9ubHlTY2FuU3RhdGUgKmluZGV4c3RhdGUg PSAoKEluZGV4T25seVNjYW5TdGF0ZSAqKSBwbGFuc3RhdGUpOwogCi0JCQkJbnNlYXJjaGVzID0g aW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJCQluc2VhcmNoZXMgPSBp bmRleHN0YXRlLT5pb3NzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAkJCQlTaGFyZWRJbmZvID0g aW5kZXhzdGF0ZS0+aW9zc19TaGFyZWRJbmZvOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzg5Niw3 ICszODk2LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQl7CiAJCQkJQml0bWFwSW5kZXhTY2FuU3RhdGUgKmluZGV4 c3RhdGUgPSAoKEJpdG1hcEluZGV4U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKLQkJCQluc2Vh cmNoZXMgPSBpbmRleHN0YXRlLT5iaXNzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5zZWFy Y2hlcyA9IGluZGV4c3RhdGUtPmJpc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCQkJCVNoYXJl ZEluZm8gPSBpbmRleHN0YXRlLT5iaXNzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKaW5kZXggZTZmMzc4YzA1 Li43MGM1NWVlNmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJ bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2Fu LmMKQEAgLTIwMyw3ICsyMDMsNyBAQCBFeGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2Nh biBpdCB3aWxsIHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3 IEJpdG1hcEluZGV4U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwotCQl3aW5zdHJ1 bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmJpc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdp bnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7 CiAJfQogCiAJLyoKQEAgLTI3NCw2ICsyNzQsMTAgQEAgRXhlY0luaXRCaXRtYXBJbmRleFNjYW4o Qml0bWFwSW5kZXhTY2FuICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAo ZWZsYWdzICYgRVhFQ19GTEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAK KwkvKiBTZXQgdXAgaW5zdHJ1bWVudGF0aW9uIG9mIGJpdG1hcCBpbmRleCBzY2FucyBpZiByZXF1 ZXN0ZWQgKi8KKwlpZiAoZXN0YXRlLT5lc19pbnN0cnVtZW50KQorCQlpbmRleHN0YXRlLT5iaXNz X0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRleFNjYW5JbnN0cnVtZW50YXRpb24pOwor CiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICovCiAJbG9ja21vZGUgPSBleGVjX3J0X2Zl dGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUpLT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0 YXRlLT5iaXNzX1JlbGF0aW9uRGVzYyA9IGluZGV4X29wZW4obm9kZS0+aW5kZXhpZCwgbG9ja21v ZGUpOwpAQCAtMzI1LDcgKzMyOSw3IEBAIEV4ZWNJbml0Qml0bWFwSW5kZXhTY2FuKEJpdG1hcElu ZGV4U2NhbiAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+ Ymlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoaW5kZXhzdGF0ZS0+Ymlz c19SZWxhdGlvbkRlc2MsCiAJCQkJCQkJICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKLQkJCQkJCQkg ICAmaW5kZXhzdGF0ZS0+Ymlzc19JbnN0cnVtZW50LAorCQkJCQkJCSAgIGluZGV4c3RhdGUtPmJp c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkgICBpbmRleHN0YXRlLT5iaXNzX051bVNjYW5LZXlzKTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBjOGRi MzU3ZTYuLjllYWI4MWZkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUlu ZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nh bi5jCkBAIC05Myw3ICs5Myw3IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlKQogCQlzY2FuZGVzYyA9IGluZGV4X2JlZ2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAogCQkJCQkJCQkgICBl c3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aW9zc19JbnN0cnVtZW50LAor CQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3Nf TnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMpOwogCkBA IC00MzMsNyArNDMzLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pb3NzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOwogCX0KIAogCS8q CkBAIC02MDYsNiArNjA2LDEwIEBAIEV4ZWNJbml0SW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2Fu ICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlpZiAoZWZsYWdzICYgRVhFQ19G TEFHX0VYUExBSU5fT05MWSkKIAkJcmV0dXJuIGluZGV4c3RhdGU7CiAKKwkvKiBTZXQgdXAgaW5z dHJ1bWVudGF0aW9uIG9mIGluZGV4LW9ubHkgc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVz dGF0ZS0+ZXNfaW5zdHJ1bWVudCkKKwkJaW5kZXhzdGF0ZS0+aW9zc19JbnN0cnVtZW50ID0gcGFs bG9jMF9vYmplY3QoSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uKTsKKwogCS8qIE9wZW4gdGhlIGlu ZGV4IHJlbGF0aW9uLiAqLwogCWxvY2ttb2RlID0gZXhlY19ydF9mZXRjaChub2RlLT5zY2FuLnNj YW5yZWxpZCwgZXN0YXRlKS0+cmVsbG9ja21vZGU7CiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29w ZW4obm9kZS0+aW5kZXhpZCwgbG9ja21vZGUpOwpAQCAtNzg3LDcgKzc5MSw3IEBAIEV4ZWNJbmRl eE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAJbm9kZS0+ aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19j dXJyZW50UmVsYXRpb24sCiAJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKLQkJCQkJ CQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCisJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1l bnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9z c19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7CkBAIC04NTMsNyArODU3LDcgQEAg RXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSwKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5v ZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25E ZXNjLAotCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlv c3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJ CSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCBiZDgzZTQ3MTIuLjA2MTQzZTk0YyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTExLDcgKzExMSw3IEBAIEluZGV4TmV4 dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+ aXNzX0luc3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cyk7CiAKQEAgLTIwNyw3ICsyMDcsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRl eFNjYW5TdGF0ZSAqbm9kZSkKIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Mu c3NfY3VycmVudFJlbGF0aW9uLAogCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAog CQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAotCQkJCQkJCQkgICAmbm9kZS0+aXNzX0lu c3RydW1lbnQsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5 cyk7CiAKQEAgLTgxMyw3ICs4MTMsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRl ICpub2RlKQogCQkgKiBzaHV0ZG93biBvbiB0aGUgd29ya2Vycy4gIE9uIHJlc2NhbiBpdCB3aWxs IHNwaW4gdXAgbmV3IHdvcmtlcnMKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25s eVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KLQkJd2luc3RydW1lbnQtPm5zZWFy Y2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5u c2VhcmNoZXMgKz0gbm9kZS0+aXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKIAl9CiAKIAkvKgpA QCAtOTc0LDYgKzk3NCwxMCBAQCBFeGVjSW5pdEluZGV4U2NhbihJbmRleFNjYW4gKm5vZGUsIEVT dGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWlmIChlZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJ Tl9PTkxZKQogCQlyZXR1cm4gaW5kZXhzdGF0ZTsKIAorCS8qIFNldCB1cCBpbnN0cnVtZW50YXRp b24gb2YgaW5kZXggc2NhbnMgaWYgcmVxdWVzdGVkICovCisJaWYgKGVzdGF0ZS0+ZXNfaW5zdHJ1 bWVudCkKKwkJaW5kZXhzdGF0ZS0+aXNzX0luc3RydW1lbnQgPSBwYWxsb2MwX29iamVjdChJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24pOworCiAJLyogT3BlbiB0aGUgaW5kZXggcmVsYXRpb24uICov CiAJbG9ja21vZGUgPSBleGVjX3J0X2ZldGNoKG5vZGUtPnNjYW4uc2NhbnJlbGlkLCBlc3RhdGUp LT5yZWxsb2NrbW9kZTsKIAlpbmRleHN0YXRlLT5pc3NfUmVsYXRpb25EZXNjID0gaW5kZXhfb3Bl bihub2RlLT5pbmRleGlkLCBsb2NrbW9kZSk7CkBAIC0xNzIzLDcgKzE3MjcsNyBAQCBFeGVjSW5k ZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAlub2RlLT5pc3NfU2Nh bkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJl bGF0aW9uLAogCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKLQkJCQkJCQkJICZub2Rl LT5pc3NfSW5zdHJ1bWVudCwKKwkJCQkJCQkJIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlL ZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKQEAgLTE3ODcsNyArMTc5MSw3IEBAIEV4ZWNJbmRleFNj YW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCW5vZGUtPmlzc19TY2Fu RGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCiAJCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAotCQkJCQkJCQkgJm5vZGUt Pmlzc19JbnN0cnVtZW50LAorCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJ CSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3JkZXJCeUtl eXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotLSAKMi41My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0013-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Disposition: attachment; filename="v16-0013-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehiu5 RnJvbSAyMmI4ZjQ0MmNlMGRhN2MzNzFmM2U5NDEzMDc0MWIyNmNkN2RjMGIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDEz LzE3XSBXSVA6IHJlYWRfc3RyZWFtOiBPbmx5IGluY3JlYXNlIGRpc3RhbmNlIHdoZW4KIHdhaXRp bmcgZm9yIElPCgpUaGlzIGF2b2lkcyBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgbWF4 aW11bSBpbiBjYXNlcyB3aGVyZSB0aGUgSU8Kc3Vic3lzdGVtIGlzIGFscmVhZHkga2VlcGluZyB1 cC4KClRPRE86IFRoaXMgbWlnaHQgYmUgdG9vIGFnZ3Jlc3NpdmUgd2l0aG91dCBhIHN1YnNlcXVl bnQgcGF0Y2ggdGhhdCByZWR1Y2VzIGhvdwpvZnRlbiB3ZSBkZWNyZWFzZSB0aGUgZGlzdGFuY2Uu CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpC YWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0 ICsrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggMzY2N2Q2N2FiLi5lMjhhYjVkZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtOTMxLDIyICs5MzEsMzYgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCXsKIAkJaW50MTYJCWlvX2lu ZGV4ID0gc3RyZWFtLT5vbGRlc3RfaW9faW5kZXg7CiAJCWludDMyCQlkaXN0YW5jZTsJLyogd2lk ZXIgdGVtcG9yYXJ5IHZhbHVlLCBjbGFtcGVkIGJlbG93ICovCisJCWJvb2wJCW5lZWRlZF93YWl0 OwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHdlIHN0aWxsIGFncmVlIG9uIHRoZSBidWZmZXJz LiAqLwogCQlBc3NlcnQoc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAg ICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0pOwogCi0JCVdhaXRSZWFkQnVm ZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJbmVlZGVkX3dhaXQgPSBXYWl0UmVh ZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CiAJCWlm ICgrK3N0cmVhbS0+b2xkZXN0X2lvX2luZGV4ID09IHN0cmVhbS0+bWF4X2lvcykKIAkJCXN0cmVh bS0+b2xkZXN0X2lvX2luZGV4ID0gMDsKIAotCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIHJhbXBz IHVwIHJhcGlkbHkgYWZ0ZXIgd2UgZG8gSS9PLiAqLwotCQlkaXN0YW5jZSA9IHN0cmVhbS0+ZGlz dGFuY2UgKiAyOwotCQlkaXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVk X2J1ZmZlcnMpOwotCQlzdHJlYW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCS8qCisJCSAqIExv b2stYWhlYWQgZGlzdGFuY2UgcmFtcHMgdXAgcmFwaWRseSBhZnRlciB3ZSBuZWVkZWQgdG8gd2Fp dCBmb3IKKwkJICogSU8uIFdlIG9ubHkgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIHdoZW4gd2UgbmVl ZGVkIHRvIHdhaXQsIHRvIGF2b2lkCisJCSAqIGluY3JlYXNpbmcgdGhlIGRpc3RhbmNlIGZ1cnRo ZXIgdGhhbiBuZWNlc3NhcnksIGFzIHVubmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1 ZmZlcnMgY2FuIGJlIGNvc3RseS4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhl IGRpc3RhbmNlIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUKKwkJICogc3RyZWFtLgorCQkg Ki8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPiAwICYmIG5lZWRlZF93YWl0KQorCQl7CisJCQlk aXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2UgKiAyOworCQkJaWYgKGRpc3RhbmNlICYmIGRpc3Rh bmNlIDwgUEdfSU5UMTZfTUFYKQorCQkJCWRpc3RhbmNlKys7CisJCQlkaXN0YW5jZSA9IE1pbihk aXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3RyZWFtLT5kaXN0YW5j ZSA9IGRpc3RhbmNlOworCQl9CiAKIAkJLyoKIAkJICogSWYgd2UndmUgcmVhY2hlZCB0aGUgZmly c3QgYmxvY2sgb2YgYSBzZXF1ZW50aWFsIHJlZ2lvbiB3ZSdyZQotLSAKMi41My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0011-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Disposition: attachment; filename="v16-0011-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehix7 RnJvbSBlNzhiMjM1OGVhMjYyNzJhNjhmNTIwYzk3NzIyZjc1ZTc3ZmE4OWVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDEx LzE3XSBXSVA6IGFpbzogaW9fdXJpbmc6IEFsbG93IElPIG1ldGhvZHMgdG8gY2hlY2sgaWYgSU8K IGNvbXBsZXRlZCBpbiB0aGUgYmFja2dyb3VuZAoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvX2ludGVybmFsLmggICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRl cm5hbC5oCmluZGV4IDVmZWVhMTViZS4uMzNlMWUyZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2lu dGVybmFsLmgKQEAgLTMyOCw2ICszMjgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMK IAkgKi8KIAl2b2lkCQkoKndhaXRfb25lKSAoUGdBaW9IYW5kbGUgKmlvaCwKIAkJCQkJCQkgdWlu dDY0IHJlZl9nZW5lcmF0aW9uKTsKKworCS8qIC0tLQorCSAqIENoZWNrIGlmIElPIGhhcyBhbHJl YWR5IGNvbXBsZXRlZC4gT3B0aW9uYWwuCisJICoKKwkgKiBTb21lIElPIG1ldGhvZHMgbmVlZCB0 byBwb2xsIGEga2VybmVsIG9iamVjdCB0byBzZWUgaWYgSU8gaGFzIGFscmVhZHkKKwkgKiBjb21w bGV0ZWQgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRvIGRvIHNvLgor CSAqCisJICogVGhpcyBjYWxsYmFjayBtYXkgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLCBo b3dldmVyIGl0IGlzIGFsbG93ZWQsCisJICogYWx0aG91Z2ggbm90IGRlc2lyYWJsZSwgdG8gd2Fp dCBmb3Igc2hvcnQtbGl2ZWQgbG9ja3MuIEl0IGlzIG9rIGZyb20gYQorCSAqIGNvcnJlY3RuZXNz IHBlcnNwZWN0aXZlIHRvIG5vdCBwcm9jZXNzIGFueS9hbGwgYXZhaWxhYmxlIGNvbXBsZXRpb25z LAorCSAqIGl0IGp1c3QgY2FuIGxlYWQgdG8gaW5mZXJpb3IgcGVyZm9ybWFuY2UuCisJICogLS0t CisJICovCisJdm9pZAkJKCpjaGVja19vbmUpIChQZ0Fpb0hhbmRsZSAqaW9oLAorCQkJCQkJCSAg dWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIH0gSW9NZXRob2RPcHM7CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYwppbmRleCBlNGFlMzAzMWYuLjRlNzQyMDM4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAg LTEwMTksNiArMTAxOSwyMSBAQCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICpp b3cpCiAKIAlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKIAor CS8qCisJICogSWYgdGhlIElPIGlzIG5vdCBleGVjdXRpbmcgc3luY2hyb25vdXNseSwgYWxsb3cg dGhlIElPIG1ldGhvZCB0byBjaGVjaworCSAqIGlmIHRoZSBJTyBhbHJlYWR5IGhhcyBjb21wbGV0 ZWQuCisJICovCisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPmNoZWNrX29uZSAmJiAhKGlvaC0+Zmxh Z3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUykpCisJeworCQlwZ2Fpb19tZXRob2Rfb3BzLT5jaGVj a19vbmUoaW9oLCByZWZfZ2VuZXJhdGlvbik7CisKKwkJaWYgKHBnYWlvX2lvX3dhc19yZWN5Y2xl ZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYg KHN0YXRlID09IFBHQUlPX0hTX0lETEUpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoc3Rh dGUgPT0gUEdBSU9fSFNfQ09NUExFVEVEX1NIQVJFRCB8fAogCQlzdGF0ZSA9PSBQR0FJT19IU19D T01QTEVURURfTE9DQUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX2lvX3VyaW5nLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYwppbmRleCA0ODY3ZGVkMzUuLjUyYTE4YTM1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJp bmdfaW5pdF9iYWNrZW5kKHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWlu dDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZv aWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5l cmF0aW9uKTsKK3N0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX2NoZWNrX29uZShQZ0Fpb0hhbmRsZSAq aW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pOwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBz dGF0aWMgdm9pZCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVj dCBpb191cmluZ19zcWUgKnNxZSk7CkBAIC03NSw2ICs3Niw3IEBAIGNvbnN0IElvTWV0aG9kT3Bz IHBnYWlvX3VyaW5nX29wcyA9IHsKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCiAJ LndhaXRfb25lID0gcGdhaW9fdXJpbmdfd2FpdF9vbmUsCisJLmNoZWNrX29uZSA9IHBnYWlvX3Vy aW5nX2NoZWNrX29uZSwKIH07CiAKIC8qCkBAIC02NTgsNiArNjYwLDUxIEBAIHBnYWlvX3VyaW5n X3dhaXRfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQl3 YWl0ZWQpOwogfQogCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfY2hlY2tfb25lKFBnQWlvSGFu ZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKK3sKKwlQcm9jTnVtYmVyCW93bmVyX3By b2NubyA9IGlvaC0+b3duZXJfcHJvY25vOworCVBnQWlvVXJpbmdDb250ZXh0ICpvd25lcl9jb250 ZXh0ID0gJnBnYWlvX3VyaW5nX2NvbnRleHRzW293bmVyX3Byb2Nub107CisJaW50CQkJd2FpdGVk ID0gMDsKKworCS8qCisJICogVGhpcyBjaGVjayBpcyBub3QgcmVsaWFibGUgd2hlbiBub3QgaG9s ZGluZyB0aGUgY29tcGxldGlvbiBsb2NrLCBidXQKKwkgKiBpdCdzIGEgdXNlZnVsIGNoZWFwIHBy ZS1jaGVjayB0byBzZWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gZ2V0IHRoZQorCSAqIGNvbXBs ZXRpb24gbG9jay4KKwkgKi8KKwlpZiAoIWlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0 LT5pb191cmluZ19yaW5nKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgY29tcGxldGlv biBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCB0aGUgaG9sZGVyIHdpbGwgbGlrZWx5CisJICogcHJv Y2VzcyBhbnkgcGVuZGluZyBjb21wbGV0aW9ucywgZ2l2ZSB1cC4KKwkgKi8KKwlpZiAoIUxXTG9j a0NvbmRpdGlvbmFsQWNxdWlyZSgmb3duZXJfY29udGV4dC0+Y29tcGxldGlvbl9sb2NrLCBMV19F WENMVVNJVkUpKQorCQlyZXR1cm47CisKKwlwZ2Fpb19kZWJ1Z19pbyhERUJVRzMsIGlvaCwKKwkJ CQkgICAiY2hlY2tfb25lIGlvX2dlbjogJSIgUFJJdTY0ICIsIHJlZl9nZW46ICUiIFBSSXU2NCAi LCBjeWNsZSAlZCIsCisJCQkJICAgaW9oLT5nZW5lcmF0aW9uLAorCQkJCSAgIHJlZl9nZW5lcmF0 aW9uLAorCQkJCSAgIHdhaXRlZCk7CisKKwkvKgorCSAqIFJlY2hlY2sgaWYgdGhlcmUgYXJlIGFu eSBjb21wbGV0aW9ucywgYW5vdGhlciBiYWNrZW5kIGNvdWxkIGhhdmUKKwkgKiBwcm9jZXNzZWQg dGhlbSBzaW5jZSB3ZSBjaGVja2VkIGFib3ZlLCBvciBvdXIgdW5sb2NrZWQgcHJlLWNoZWNrIGNv dWxkCisJICogaGF2ZSBiZWVuIHJlYWRpbmcgb3V0ZGF0ZWQgdmFsdWVzLgorCSAqCisJICogSXQg aXMgcG9zc2libGUgdGhhdCB0aGUgSU8gaGFuZGxlIGhhcyBiZWVuIHJldXNlZCBzaW5jZSB0aGUg c3RhcnQgb2YKKwkgKiB0aGUgY2FsbCwgYnV0IG5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ssIHdl IGNhbiBqdXN0IGFzIHdlbGwgZHJhaW4gYWxsCisJICogY29tcGxldGlvbnMuCisJICovCisJaWYg KGlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0LT5pb191cmluZ19yaW5nKSkKKwl7CisJ CXBnYWlvX3VyaW5nX2RyYWluX2xvY2tlZChvd25lcl9jb250ZXh0KTsKKwl9CisKKwlMV0xvY2tS ZWxlYXNlKCZvd25lcl9jb250ZXh0LT5jb21wbGV0aW9uX2xvY2spOworfQorCiBzdGF0aWMgdm9p ZAogcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJp bmdfc3FlICpzcWUpCiB7Ci0tIAoyLjUzLjAKCg== --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0012-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v16-0012-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehiw6 RnJvbSBhZGI1OGE3NmY1YmQ1YWVmYjRiOWNlY2Y2MmVmMTIwNjhkOTk1ZTI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDEy LzE3XSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog d2FpdAoKSW4gYSBzdWJzZXF1ZW50IGNvbW1pdCByZWFkX3N0cmVhbS5jIHdpbGwgdXNlIHRoaXMg YXMgYW4gaW5wdXQgdG8gdGhlIHJlYWQKYWhlYWQgZGlzdGFuY2UuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxOCArKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh bmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApp bmRleCA4NDkzMzc3MmUuLmJhYjU3YzJiNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0yNTAsNyAr MjUwLDcgQEAgZXh0ZXJuIGJvb2wgU3RhcnRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlv biAqb3BlcmF0aW9uLAogCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgaW50 ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgV2FpdFJlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIGJvb2wgV2FpdFJl YWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRlcm4gdm9p ZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsZWFz ZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5k ZXggYjdjYmM0MTZmLi5hZTFlNTM4ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CkBAIC0xNzMxLDEyICsxNzMxLDIwIEBAIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOwogfQogCi12b2lkCisvKgorICogV2FpdCBmb3IgdGhl IElPIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgU3RhcnRSZWFkQnVmZmVycygpIGV0IGFsIHRvCisg KiBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIElPIG9wZXJhdGlvbiBhbHJl YWR5IGhhZCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgb2YgdGhpcworICogY2FsbC4KKyAqLworYm9v bAogV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiB7CiAJ UGdBaW9SZXR1cm4gKmFpb19yZXQgPSAmb3BlcmF0aW9uLT5pb19yZXR1cm47CiAJSU9Db250ZXh0 CWlvX2NvbnRleHQ7CiAJSU9PYmplY3QJaW9fb2JqZWN0OworCWJvb2wJCW5lZWRlZF93YWl0ID0g ZmFsc2U7CiAKIAlpZiAob3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQogCXsKQEAgLTE3OTgsNiArMTgwNiw3IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRf cHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWluZyk7CiAKIAkJCQlwZ2Fpb193cmVmX3dhaXQo Jm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwogCiAJCQkJLyoK IAkJCQkgKiBUaGUgSU8gb3BlcmF0aW9uIGl0c2VsZiB3YXMgYWxyZWFkeSBjb3VudGVkIGVhcmxp ZXIsIGluCkBAIC0xODUwLDYgKzE4NTksMTIgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJz T3BlcmF0aW9uICpvcGVyYXRpb24pCiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAorCQkv KgorCQkgKiBJZiB0aGUgSU8gY29tcGxldGVkIG9ubHkgcGFydGlhbGx5LCB3ZSBuZWVkIHRvIHBl cmZvcm0gYWRkaXRpb25hbAorCQkgKiB3b3JrLCBjb25zaWRlciB0aGF0IGEgZm9ybSBvZiBoYXZp bmcgaGFkIHRvIHdhaXQuCisJCSAqLworCQluZWVkZWRfd2FpdCA9IHRydWU7CisKIAkJLyoKIAkJ ICogVGhpcyBtYXkgb25seSBjb21wbGV0ZSB0aGUgSU8gcGFydGlhbGx5LCBlaXRoZXIgYmVjYXVz ZSBzb21lCiAJCSAqIGJ1ZmZlcnMgd2VyZSBhbHJlYWR5IHZhbGlkLCBvciBiZWNhdXNlIG9mIGEg cGFydGlhbCByZWFkLgpAQCAtMTg2Niw2ICsxODgxLDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihv cGVyYXRpb24sIHRydWUpOwogCiAJLyogTkI6IFJFQURfRE9ORSB0cmFjZXBvaW50IHdhcyBhbHJl YWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwlyZXR1cm4gbmVlZGVkX3dh aXQ7CiB9CiAKIC8qCi0tIAoyLjUzLjAKCg== --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0009-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v16-0009-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehj29 RnJvbSAyZTU3NzhmNDA5NmZmMTE5MzI4NTRiNTYxMzhiMWRjMzM5ZGMyOGI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTYgMDkvMTddIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN RS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNv bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKCldoZW4gYSBiYWNrZW5kIGF0dGVtcHRzIHRv IHN0YXJ0IGEgcmVhZCBvbiBhIGJ1ZmZlciBhbmQgZmluZHMgdGhhdCBJL08KaXMgYWxyZWFkeSBp biBwcm9ncmVzcywgaXQgcHJldmlvdXNseSB3YWl0ZWQgZm9yIHRoYXQgSS9PIHRvIGNvbXBsZXRl CmJlZm9yZSBpbml0aWF0aW5nIHJlYWRzIGZvciBhbnkgb3RoZXIgYnVmZmVycy4gQWx0aG91Z2gg dGhlIGJhY2tlbmQgbXVzdApzdGlsbCB3YWl0IGZvciB0aGUgSS9PIHRvIGZpbmlzaCB3aGVuIGxh dGVyIGFjcXVpcmluZyB0aGUgYnVmZmVyLCBpdApzaG91bGQgbm90IG5lZWQgdG8gd2FpdCBhdCBy ZWFkIHN0YXJ0IHRpbWUuIE90aGVyIGJ1ZmZlcnMgbWF5IGJlCmF2YWlsYWJsZSBmb3IgSS9PLCBh bmQgaW4gc29tZSB3b3JrbG9hZHMgdGhpcyB3YWl0aW5nIHNpZ25pZmljYW50bHkKcmVkdWNlcyBj b25jdXJyZW5jeS4KCkZvciBleGFtcGxlLCBpbmRleCBzY2FucyBtYXkgcmVwZWF0ZWRseSByZXF1 ZXN0IHRoZSBzYW1lIGhlYXAgYmxvY2suIElmCnRoZSBiYWNrZW5kIHdhaXRzIGVhY2ggdGltZSBp dCBlbmNvdW50ZXJzIGFuIGluLXByb2dyZXNzIHJlYWQsIHRoZQphY2Nlc3MgcGF0dGVybiBlZmZl Y3RpdmVseSBkZWdlbmVyYXRlcyBpbnRvIHN5bmNocm9ub3VzIEkvTy4gQnkKaW50cm9kdWNpbmcg dGhlIGNvbmNlcHQgb2YgZm9yZWlnbiBJL08gb3BlcmF0aW9ucywgYSBiYWNrZW5kIGNhbiByZWNv cmQKdGhlIGJ1ZmZlcuKAmXMgd2FpdCByZWZlcmVuY2UgYW5kIGRlZmVyIHdhaXRpbmcgdW50aWwg V2FpdFJlYWRCdWZmZXJzKCkKd2hlbiBpdCBhY3R1YWxseSBhY3F1aXJlcyB0aGUgYnVmZmVyLgoK SW4gcmFyZSBjYXNlcywgYSBiYWNrZW5kIG1heSBzdGlsbCBuZWVkIHRvIHdhaXQgd2hlbiBzdGFy dGluZyBhIHJlYWQgaWYKaXQgZW5jb3VudGVycyBhIGJ1ZmZlciBhZnRlciBhbm90aGVyIGJhY2tl bmQgaGFzIHNldCBCTV9JT19JTl9QUk9HUkVTUwpidXQgYmVmb3JlIHRoZSBidWZmZXIgZGVzY3Jp cHRvcuKAmXMgd2FpdCByZWZlcmVuY2UgaGFzIGJlZW4gc2V0LiBTdWNoCndpbmRvd3Mgc2hvdWxk IGJlIGJyaWVmIGFuZCB1bmNvbW1vbi4KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5o ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyB8IDQ5 MSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyNSBpbnNlcnRpb25zKCspLCAx NjggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNDA4ZDc2YzU2Li44NDkzMzc3 MmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMTQ3LDYgKzE0Nyw3IEBAIHN0cnVjdCBSZWFkQnVm ZmVyc09wZXJhdGlvbgogCWludAkJCWZsYWdzOwogCWludDE2CQluYmxvY2tzOwogCWludDE2CQlu YmxvY2tzX2RvbmU7CisJYm9vbAkJZm9yZWlnbl9pbzsKIAlQZ0Fpb1dhaXRSZWYgaW9fd3JlZjsK IAlQZ0Fpb1JldHVybiBpb19yZXR1cm47CiB9OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3Iu YwppbmRleCA2Y2FkMjcxMzcuLmI3Y2JjNDE2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVm bWdyLmMKQEAgLTE4NSw2ICsxODUsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgU01nclNvcnRBcnJheQog CVNNZ3JSZWxhdGlvbiBzcmVsOwogfSBTTWdyU29ydEFycmF5OwogCisKKy8qCisgKiBJbiBBc3lu Y1JlYWRCdWZmZXJzKCksIHdoZW4gcHJlcGFyaW5nIGEgYnVmZmVyIGZvciByZWFkaW5nIGFuZCBz ZXR0aW5nCisgKiBCTV9JT19JTl9QUk9HUkVTUywgdGhlIGJ1ZmZlciBtYXkgYWxyZWFkeSBoYXZl IEkvTyBpbiBwcm9ncmVzcyBvciBtYXkKKyAqIGFscmVhZHkgY29udGFpbiB0aGUgZGVzaXJlZCBi bG9jay4gQXN5bmNSZWFkQnVmZmVycygpIG11c3QgZGlzdGluZ3Vpc2gKKyAqIGJldHdlZW4gdGhl c2UgY2FzZXMgKGFuZCB0aGUgY2FzZSB3aGVyZSBpdCBzaG91bGQgaW5pdGlhdGUgSS9PKSBzbyBp dCBjYW4KKyAqIG1hcmsgYW4gaW4tcHJvZ3Jlc3MgYnVmZmVyIGFzIGZvcmVpZ24gSS9PIHJhdGhl ciB0aGFuIHdhaXRpbmcgb24gaXQuCisgKi8KK3R5cGVkZWYgZW51bSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXMKK3sKKwlSRUFEX0JVRkZFUl9BTFJFQURZX0RPTkUsCisJUkVBRF9CVUZGRVJfSU5f UFJPR1JFU1MsCisJUkVBRF9CVUZGRVJfUkVBRFlfRk9SX0lPLAorfSBQcmVwYXJlUmVhZEJ1ZmZl cl9TdGF0dXM7CisKIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9fZGFtYWdlZF9wYWdl cyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAwOwpAQCAtMTYyOCw0 NSArMTY0Myw2IEBAIENoZWNrUmVhZEJ1ZmZlcnNPcGVyYXRpb24oUmVhZEJ1ZmZlcnNPcGVyYXRp b24gKm9wZXJhdGlvbiwgYm9vbCBpc19jb21wbGV0ZSkKICNlbmRpZgogfQogCi0vKiBoZWxwZXIg Zm9yIFJlYWRCdWZmZXJzQ2FuU3RhcnRJTygpLCB0byBhdm9pZCByZXBldGl0aW9uICovCi1zdGF0 aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2FuU3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwg Ym9vbCBub3dhaXQpCi17Ci0JaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKLQkJcmV0dXJuIFN0 YXJ0TG9jYWxCdWZmZXJJTyhHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpLAot CQkJCQkJCQkgIHRydWUsIG5vd2FpdCk7Ci0JZWxzZQotCQlyZXR1cm4gU3RhcnRCdWZmZXJJTyhH ZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpLCB0cnVlLCBub3dhaXQpOwotfQotCi0vKgot ICogSGVscGVyIGZvciBBc3luY1JlYWRCdWZmZXJzIHRoYXQgdHJpZXMgdG8gZ2V0IHRoZSBidWZm ZXIgcmVhZHkgZm9yIElPLgotICovCi1zdGF0aWMgaW5saW5lIGJvb2wKLVJlYWRCdWZmZXJzQ2Fu U3RhcnRJTyhCdWZmZXIgYnVmZmVyLCBib29sIG5vd2FpdCkKLXsKLQkvKgotCSAqIElmIHRoaXMg YmFja2VuZCBjdXJyZW50bHkgaGFzIHN0YWdlZCBJTywgd2UgbmVlZCB0byBzdWJtaXQgdGhlIHBl bmRpbmcKLQkgKiBJTyBiZWZvcmUgd2FpdGluZyBmb3IgdGhlIHJpZ2h0IHRvIGlzc3VlIElPLCB0 byBhdm9pZCB0aGUgcG90ZW50aWFsIGZvcgotCSAqIGRlYWRsb2NrcyAoYW5kLCBtb3JlIGNvbW1v bmx5LCB1bm5lY2Vzc2FyeSBkZWxheXMgZm9yIG90aGVyIGJhY2tlbmRzKS4KLQkgKi8KLQlpZiAo IW5vd2FpdCAmJiBwZ2Fpb19oYXZlX3N0YWdlZCgpKQotCXsKLQkJaWYgKFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoYnVmZmVyLCB0cnVlKSkKLQkJCXJldHVybiB0cnVlOwotCi0JCS8qCi0JCSAq IFVuZm9ydHVuYXRlbHkgU3RhcnRCdWZmZXJJTygpIHJldHVybmluZyBmYWxzZSBkb2Vzbid0IGFs bG93IHRvCi0JCSAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGJ1ZmZlciBhbHJlYWR5IGJlaW5n IHZhbGlkIGFuZCBJTyBhbHJlYWR5Ci0JCSAqIGJlaW5nIGluIHByb2dyZXNzLiBTaW5jZSBJTyBh bHJlYWR5IGJlaW5nIGluIHByb2dyZXNzIGlzIHF1aXRlCi0JCSAqIHJhcmUsIHRoaXMgYXBwcm9h Y2ggc2VlbXMgZmluZS4KLQkJICovCi0JCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKLQl9Ci0KLQly ZXR1cm4gUmVhZEJ1ZmZlcnNDYW5TdGFydElPT25jZShidWZmZXIsIG5vd2FpdCk7Ci19Ci0KIC8q CiAgKiBXZSB0cmFjayB2YXJpb3VzIHN0YXRzIHJlbGF0ZWQgdG8gYnVmZmVyIGhpdHMuIEJlY2F1 c2UgdGhpcyBpcyBkb25lIGluIGEKICAqIGZldyBzZXBhcmF0ZSBwbGFjZXMsIHRoaXMgaGVscGVy IGV4aXN0cyBmb3IgY29udmVuaWVuY2UuCkBAIC0xODE2LDcgKzE3OTIsNyBAQCBXYWl0UmVhZEJ1 ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCSAqCiAJCQkgKiB3ZSBm aXJzdCBjaGVjayBpZiB3ZSBhbHJlYWR5IGtub3cgdGhlIElPIGlzIGNvbXBsZXRlLgogCQkJICov Ci0JCQlpZiAoYWlvX3JldC0+cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOICYmCisJ CQlpZiAoKG9wZXJhdGlvbi0+Zm9yZWlnbl9pbyB8fCBhaW9fcmV0LT5yZXN1bHQuc3RhdHVzID09 IFBHQUlPX1JTX1VOS05PV04pICYmCiAJCQkJIXBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0 aW9uLT5pb193cmVmKSkKIAkJCXsKIAkJCQlpbnN0cl90aW1lCWlvX3N0YXJ0ID0gcGdzdGF0X3By ZXBhcmVfaW9fdGltZSh0cmFja19pb190aW1pbmcpOwpAQCAtMTgzNSwxMSArMTgxMSwzMyBAQCBX YWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbikKIAkJCQlBc3Nl cnQocGdhaW9fd3JlZl9jaGVja19kb25lKCZvcGVyYXRpb24tPmlvX3dyZWYpKTsKIAkJCX0KIAot CQkJLyoKLQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBDaGVjayB0aGUg cmVzdWx0cy4gVGhpcwotCQkJICogaW5jbHVkZXMgcmVwb3J0aW5nIG9uIGVycm9ycyBpZiB0aGVy ZSB3ZXJlIGFueS4KLQkJCSAqLwotCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KG9wZXJhdGlv bik7CisJCQlpZiAodW5saWtlbHkob3BlcmF0aW9uLT5mb3JlaWduX2lvKSkKKwkJCXsKKwkJCQlC dWZmZXIJCWJ1ZmZlciA9IG9wZXJhdGlvbi0+YnVmZmVyc1tvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZV07CisJCQkJQnVmZmVyRGVzYyAqZGVzYyA9IEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSA/CisJCQkJ CUdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSkgOgorCQkJCQlHZXRCdWZmZXJE ZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCQkJCXVpbnQzMgkJYnVmX3N0YXRlID0gcGdfYXRvbWlj X3JlYWRfdTY0KCZkZXNjLT5zdGF0ZSk7CisKKwkJCQlpZiAoYnVmX3N0YXRlICYgQk1fVkFMSUQp CisJCQkJeworCQkJCQlvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSArPSAxOworCQkJCQlBc3NlcnQo b3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgPD0gb3BlcmF0aW9uLT5uYmxvY2tzKTsKKworCQkJCQlQ cm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+c3RyYXRlZ3ksCisJCQkJCQkJCQkgb3BlcmF0aW9u LT5yZWwsIG9wZXJhdGlvbi0+cGVyc2lzdGVuY2UsCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5zbWdy LCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJCQkJCQkgb3BlcmF0aW9uLT5ibG9ja251bSArIG9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBsZXRlZC4gQ2hlY2sgdGhlIHJl c3VsdHMuIFRoaXMKKwkJCQkgKiBpbmNsdWRlcyByZXBvcnRpbmcgb24gZXJyb3JzIGlmIHRoZXJl IHdlcmUgYW55LgorCQkJCSAqLworCQkJCVByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChvcGVyYXRp b24pOworCQkJfQogCQl9CiAKIAkJLyoKQEAgLTE4NzAsNiArMTg2OCwxNTkgQEAgV2FpdFJlYWRC dWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJLyogTkI6IFJFQURfRE9O RSB0cmFjZXBvaW50IHdhcyBhbHJlYWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sg Ki8KIH0KIAorLyoKKyAqIExvY2FsIHZlcnNpb24gb2YgUHJlcGFyZU5ld1JlYWRCdWZmZXJJTygp LiBIZXJlIGluc3RlYWQgb2YgbG9jYWxidWYuYyB0bworICogYXZvaWQgYW4gZXh0ZXJuYWwgZnVu Y3Rpb24gY2FsbC4KKyAqLworc3RhdGljIFByZXBhcmVSZWFkQnVmZmVyX1N0YXR1cworUHJlcGFy ZU5ld0xvY2FsUmVhZEJ1ZmZlcklPKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sCisJ CQkJCQkJQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpkZXNjID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwl1aW50NjQJCWJ1Zl9zdGF0ZSA9IHBnX2F0b21p Y19yZWFkX3U2NCgmZGVzYy0+c3RhdGUpOworCisJLyogQWxyZWFkeSB2YWxpZCwgbm8gd29yayB0 byBkbyAqLworCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwl7CisJCXBnYWlvX3dyZWZfY2xl YXIoJm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJFQURZX0RP TkU7CisJfQorCisJcGdhaW9fc3VibWl0X3N0YWdlZCgpOworCisJaWYgKHBnYWlvX3dyZWZfdmFs aWQoJmRlc2MtPmlvX3dyZWYpKQorCXsKKwkJb3BlcmF0aW9uLT5pb193cmVmID0gZGVzYy0+aW9f d3JlZjsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJcmV0dXJuIFJFQURfQlVG RkVSX0lOX1BST0dSRVNTOworCX0KKworCXJldHVybiBSRUFEX0JVRkZFUl9SRUFEWV9GT1JfSU87 Cit9CisKKy8qCisgKiBUcnkgdG8gc3RhcnQgSU8gb24gdGhlIGZpcnN0IGJ1ZmZlciBpbiBhIG5l dyBydW4gb2YgYmxvY2tzLiBJZiBBSU8gaXMgaW4KKyAqIHByb2dyZXNzLCBiZSBpdCBpbiB0aGlz IGJhY2tlbmQgb3IgYW5vdGhlciBiYWNrZW5kLCB3ZSBqdXN0IGFzc29jaWF0ZSB0aGUKKyAqIHdh aXQgcmVmZXJlbmNlIHdpdGggdGhlIG9wZXJhdGlvbiBhbmQgd2FpdCBpbiBXYWl0UmVhZEJ1ZmZl cnMoKS4gVGhpcyB0dXJucworICogb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2Ug aW4gdHdvIHdvcmtsb2FkczoKKyAqCisgKiAxKSBBIHJlYWQgc3RyZWFtIHRoYXQgaGFzIHRvIHJl YWQgdGhlIHNhbWUgYmxvY2sgbXVsdGlwbGUgdGltZXMgd2l0aGluIHRoZQorICogICAgcmVhZGFo ZWFkIGRpc3RhbmNlLiBUaGlzIGNhbiBoYXBwZW4gZS5nLiBmb3IgdGhlIHRhYmxlIGFjY2Vzc2Vz IG9mIGFuCisgKiAgICBpbmRleCBzY2FuLgorICoKKyAqIDIpIENvbmN1cnJlbnQgc2NhbnMgYnkg bXVsdGlwbGUgYmFja2VuZHMgb24gdGhlIHNhbWUgcmVsYXRpb24uCisgKgorICogSWYgd2Ugd2Vy ZSB0byBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBpbi1wcm9ncmVzcyBJTywgd2UnZCBub3Qg YmUgYWJsZQorICogdG8ga2VlcCBlbm91Z2ggSS9PIGluIGZsaWdodC4KKyAqCisgKiBJZiB3ZSBk byBmaW5kIHRoZXJlIGlzIG9uZ29pbmcgSS9PIGZvciB0aGUgYnVmZmVyLCB3ZSBzZXQgdXAgYSAx LWJsb2NrCisgKiBSZWFkQnVmZmVyc09wZXJhdGlvbiB0aGF0IFdhaXRSZWFkQnVmZmVycyB0aGVu IGNhbiB3YWl0IG9uLgorICoKKyAqIEl0J3MgcG9zc2libGUgdGhhdCBhbm90aGVyIGJhY2tlbmQg aGFzIHN0YXJ0ZWQgSU8gb24gdGhlIGJ1ZmZlciBidXQgbm90IHlldAorICogc2V0IGl0cyB3YWl0 IHJlZmVyZW5jZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIG5vIGNob2ljZSBidXQgdG8gd2FpdCBm b3IKKyAqIGVpdGhlciB0aGUgd2FpdCByZWZlcmVuY2UgdG8gYmUgdmFsaWQgb3IgdGhlIElPIHRv IGJlIGRvbmUuCisgKi8KK3N0YXRpYyBQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKK1ByZXBhcmVO ZXdSZWFkQnVmZmVySU8oUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwKKwkJCQkJICAg QnVmZmVyIGJ1ZmZlcikKK3sKKwl1aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNj OworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwkJcmV0dXJuIFByZXBhcmVOZXdMb2Nh bFJlYWRCdWZmZXJJTyhvcGVyYXRpb24sIGJ1ZmZlcik7CisKKwlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJZGVzYyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVm ZmVyIC0gMSk7CisKKwlmb3IgKDs7KQorCXsKKwkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNj KTsKKworCQkvKiBBbHJlYWR5IHZhbGlkLCBubyB3b3JrIHRvIGRvICovCisJCWlmIChidWZfc3Rh dGUgJiBCTV9WQUxJRCkKKwkJeworCQkJVW5sb2NrQnVmSGRyKGRlc2MpOworCQkJcGdhaW9fd3Jl Zl9jbGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKKwkJCXJldHVybiBSRUFEX0JVRkZFUl9BTFJF QURZX0RPTkU7CisJCX0KKworCQlpZiAoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpCisJ CXsKKwkJCS8qIEpvaW4gZXhpc3RpbmcgcmVhZCAqLworCQkJaWYgKHBnYWlvX3dyZWZfdmFsaWQo JmRlc2MtPmlvX3dyZWYpKQorCQkJeworCQkJCW9wZXJhdGlvbi0+aW9fd3JlZiA9IGRlc2MtPmlv X3dyZWY7CisJCQkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKwkJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQkJcmV0dXJuIFJFQURfQlVGRkVSX0lOX1BST0dSRVNTOworCQkJfQorCisJ CQkvKgorCQkJICogSWYgdGhlIHdhaXQgcmVmIGlzIG5vdCB2YWxpZCBidXQgdGhlIElPIGlzIGlu IHByb2dyZXNzLCBzb21lb25lCisJCQkgKiBlbHNlIHN0YXJ0ZWQgSU8gYnV0IGhhc24ndCBzZXQg dGhlIHdhaXQgcmVmIHlldC4gV2UgaGF2ZSBubworCQkJICogY2hvaWNlIGJ1dCB0byB3YWl0IHVu dGlsIHRoZSB3YWl0IHJlZiBpcyBzZXQgb3IgdGhlIElPCisJCQkgKiBjb21wbGV0ZXMuCisJCQkg Ki8KKwkJCVVubG9ja0J1ZkhkcihkZXNjKTsKKwkJCXBnYWlvX3N1Ym1pdF9zdGFnZWQoKTsKKwkJ CVdhaXRJTyhkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogTm8gSU8gaW4g cHJvZ3Jlc3MgYW5kIG5vdCBhbHJlYWR5IHZhbGlkOyBXZSB3aWxsIHN0YXJ0IElPLiBJdCdzCisJ CSAqIHBvc3NpYmxlIHRoYXQgdGhlIElPIHdhcyBpbiBwcm9ncmVzcyBhbmQgbmV2ZXIgYmVjYW1l IHZhbGlkIGJlY2F1c2UKKwkJICogdGhlIElPIGVycm9yZWQgb3V0LiBXZSdsbCBkbyB0aGUgSU8g b3Vyc2VsdmVzLgorCQkgKi8KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2MsIGJ1Zl9zdGF0ZSwgQk1f SU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVtZW1iZXJCdWZmZXJJTyhD dXJyZW50UmVzb3VyY2VPd25lciwKKwkJCQkJCQkJCSAgQnVmZmVyRGVzY3JpcHRvckdldEJ1ZmZl cihkZXNjKSk7CisKKwkJcmV0dXJuIFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTzsKKwl9Cit9CisK KworLyoKKyAqIFdoZW4gYnVpbGRpbmcgYSBuZXcgSU8gZnJvbSBtdWx0aXBsZSBidWZmZXJzLCB3 ZSB3b24ndCBpbmNsdWRlIGJ1ZmZlcnMKKyAqIHRoYXQgYXJlIGFscmVhZHkgdmFsaWQgb3IgYWxy ZWFkeSBpbiBwcm9ncmVzcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZQorICogdXNlZCBm b3IgYWRkaXRpb25hbCBhZGphY2VudCBidWZmZXJzIGZvbGxvd2luZyB0aGUgaGVhZCBidWZmZXIg aW4gYSBuZXcgSU8uCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgd2FzIHN1Y2Nl c3NmdWxseSBwcmVwYXJlZCBmb3IgSU8gYW5kIGZhbHNlIGlmIGl0CisgKiBpcyByZWplY3RlZCBh bmQgdGhlIHJlYWQgSU8gc2hvdWxkIG5vdCBpbmNsdWRlIHRoaXMgYnVmZmVyLgorKi8KK3N0YXRp YyBib29sCitQcmVwYXJlQWRkaXRpb25hbFJlYWRCdWZmZXIoQnVmZmVyIGJ1ZmZlcikKK3sKKwl1 aW50NjQJCWJ1Zl9zdGF0ZTsKKwlCdWZmZXJEZXNjICpkZXNjOworCisJaWYgKEJ1ZmZlcklzTG9j YWwoYnVmZmVyKSkKKwl7CisJCWRlc2MgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZl ciAtIDEpOworCQlidWZfc3RhdGUgPSBwZ19hdG9taWNfcmVhZF91NjQoJmRlc2MtPnN0YXRlKTsK KwkJLyogTG9jYWwgYnVmZmVycyBkb24ndCB1c2UgQk1fSU9fSU5fUFJPR1JFU1MgKi8KKwkJaWYg KGJ1Zl9zdGF0ZSAmIEJNX1ZBTElEIHx8IHBnYWlvX3dyZWZfdmFsaWQoJmRlc2MtPmlvX3dyZWYp KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlSZXNvdXJjZU93bmVyRW5sYXJn ZShDdXJyZW50UmVzb3VyY2VPd25lcik7CisJCWRlc2MgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1 ZmZlciAtIDEpOworCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGRlc2MpOworCQlpZiAoYnVmX3N0 YXRlICYgKEJNX1ZBTElEIHwgQk1fSU9fSU5fUFJPR1JFU1MpKQorCQl7CisJCQlVbmxvY2tCdWZI ZHIoZGVzYyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJVW5sb2NrQnVmSGRyRXh0KGRlc2Ms IGJ1Zl9zdGF0ZSwgQk1fSU9fSU5fUFJPR1JFU1MsIDAsIDApOworCQlSZXNvdXJjZU93bmVyUmVt ZW1iZXJCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKwogLyoKICAqIEluaXRpYXRlIElPIGZvciB0aGUgUmVhZEJ1ZmZlcnNPcGVy YXRpb24KICAqCkBAIC0xOTAzLDcgKzIwNTQsNzUgQEAgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJdm9pZAkg ICAqaW9fcGFnZXNbTUFYX0lPX0NPTUJJTkVfTElNSVRdOwogCUlPQ29udGV4dAlpb19jb250ZXh0 OwogCUlPT2JqZWN0CWlvX29iamVjdDsKLQlib29sCQlkaWRfc3RhcnRfaW87CisJaW5zdHJfdGlt ZQlpb19zdGFydDsKKwlQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMgc3RhdHVzOworCisJLyoKKwkg KiBXZSBtdXN0IGdldCBhbiBJTyBoYW5kbGUgYmVmb3JlIFN0YXJ0TmV3QnVmZmVyUmVhZElPKCks IGFzCisJICogcGdhaW9faW9fYWNxdWlyZSgpIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3 YW50IGFmdGVyIHNldHRpbmcKKwkgKiBJT19JTl9QUk9HUkVTUy4gSWYgd2UgZG9uJ3QgbmVlZCB0 byBkbyB0aGUgSU8sIHdlJ2xsIHJlbGVhc2UgdGhlCisJICogaGFuZGxlLgorCSAqCisJICogSWYg d2UgbmVlZCB0byB3YWl0IGZvciBJTyBiZWZvcmUgd2UgY2FuIGdldCBhIGhhbmRsZSwgc3VibWl0 CisJICogYWxyZWFkeS1zdGFnZWQgSU8gZmlyc3QsIHNvIHRoYXQgb3RoZXIgYmFja2VuZHMgZG9u J3QgbmVlZCB0byB3YWl0LgorCSAqIFRoZXJlIHdvdWxkbid0IGJlIGEgZGVhZGxvY2sgcmlzaywg YXMgcGdhaW9faW9fYWNxdWlyZSgpIGp1c3QgbmVlZHMgdG8KKwkgKiB3YWl0IGZvciBhbHJlYWR5 IHN1Ym1pdHRlZCBJTywgd2hpY2ggZG9lc24ndCByZXF1aXJlIGFkZGl0aW9uYWwgbG9ja3MsCisJ ICogYnV0IGl0IGNvdWxkIHN0aWxsIGNhdXNlIHVuZGVzaXJhYmxlIHdhaXRzLgorCSAqCisJICog QSBzZWNvbmRhcnkgYmVuZWZpdCBpcyB0aGF0IHRoaXMgd291bGQgYWxsb3cgdXMgdG8gbWVhc3Vy ZSB0aGUgdGltZSBpbgorCSAqIHBnYWlvX2lvX2FjcXVpcmUoKSB3aXRob3V0IGNhdXNpbmcgdW5k dWUgdGltZXIgb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiwKKwkgKiBub24tYmxvY2tpbmcsIGNhc2Uu ICBIb3dldmVyLCBjdXJyZW50bHkgdGhlIHBnc3RhdHMgaW5mcmFzdHJ1Y3R1cmUKKwkgKiBkb2Vz bid0IHJlYWxseSBhbGxvdyB0aGF0LCBhcyBpdCBhKSBhc3NlcnRzIHRoYXQgYW4gb3BlcmF0aW9u IGNhbid0CisJICogaGF2ZSB0aW1lIHdpdGhvdXQgb3BlcmF0aW9ucyBiKSBkb2Vzbid0IGhhdmUg YW4gQVBJIHRvIHJlcG9ydAorCSAqICJhY2N1bXVsYXRlZCIgdGltZS4KKwkgKi8KKwlpb2ggPSBw Z2Fpb19pb19hY3F1aXJlX25iKEN1cnJlbnRSZXNvdXJjZU93bmVyLCAmb3BlcmF0aW9uLT5pb19y ZXR1cm4pOworCWlmICh1bmxpa2VseSghaW9oKSkKKwl7CisJCXBnYWlvX3N1Ym1pdF9zdGFnZWQo KTsKKwkJaW9oID0gcGdhaW9faW9fYWNxdWlyZShDdXJyZW50UmVzb3VyY2VPd25lciwgJm9wZXJh dGlvbi0+aW9fcmV0dXJuKTsKKwl9CisKKwlvcGVyYXRpb24tPmZvcmVpZ25faW8gPSBmYWxzZTsK KworCS8qIENoZWNrIGlmIHdlIGNhbiBzdGFydCBJTyBvbiB0aGUgZmlyc3QgdG8tYmUtcmVhZCBi dWZmZXIgKi8KKwlpZiAoKHN0YXR1cyA9IFByZXBhcmVOZXdSZWFkQnVmZmVySU8ob3BlcmF0aW9u LCBidWZmZXJzW25ibG9ja3NfZG9uZV0pKSA8CisJCVJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTykK Kwl7CisJCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKKwkJKm5ibG9ja3NfcHJvZ3Jlc3MgPSAxOwor CQlpZiAoc3RhdHVzID09IFJFQURfQlVGRkVSX0FMUkVBRFlfRE9ORSkKKwkJeworCQkJLyoKKwkJ CSAqIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhpcyBibG9jaywgd2UncmUg ZG9uZS4KKwkJCSAqCisJCQkgKiBXaGVuIElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUg aXMgdXBkYXRlZCBpbgorCQkJICogUHJvY2Vzc1JlYWRCdWZmZXJzUmVzdWx0KCksIGJ1dCB0aGF0 IGlzIG5vdCBjYWxsZWQgaWYgbm8gSU8gaXMKKwkJCSAqIG5lY2Vzc2FyeS4gVGh1cyB1cGRhdGUg aGVyZS4KKwkJCSAqLworCQkJb3BlcmF0aW9uLT5uYmxvY2tzX2RvbmUgKz0gMTsKKwkJCUFzc2Vy dChvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkv KgorCQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2gKKwkJCSAqIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3Mg aW4gUGluQnVmZmVyRm9yQmxvY2soKS4gVGhlCisJCQkgKiBvdGhlciBiYWNrZW5kIHdpbGwgdHJh Y2sgdGhpcyBhcyBhICdyZWFkJy4KKwkJCSAqLworCQkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRp b24tPnN0cmF0ZWd5LAorCQkJCQkJCSBvcGVyYXRpb24tPnJlbCwgb3BlcmF0aW9uLT5wZXJzaXN0 ZW5jZSwKKwkJCQkJCQkgb3BlcmF0aW9uLT5zbWdyLCBvcGVyYXRpb24tPmZvcmtudW0sCisJCQkJ CQkJIG9wZXJhdGlvbi0+YmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9uZSk7CisJCQly ZXR1cm4gZmFsc2U7CisJCX0KKworCQkvKiBUaGUgSU8gaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyAq LworCQlBc3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX0lOX1BST0dSRVNTKTsKKwkJQ2hlY2tS ZWFkQnVmZmVyc09wZXJhdGlvbihvcGVyYXRpb24sIGZhbHNlKTsKKwkJcmV0dXJuIHRydWU7CisJ fQorCisJLyogV2UgY2FuIHJlYWQgaW4gYXQgbGVhc3QgdGhlIGhlYWQgYnVmZmVyIC4gKi8KKwlB c3NlcnQoc3RhdHVzID09IFJFQURfQlVGRkVSX1JFQURZX0ZPUl9JTyk7CiAKIAkvKgogCSAqIFdo ZW4gdGhpcyBJTyBpcyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LCBlaXRoZXIgYmVjYXVzZSB0aGUg Y2FsbGVyIHdpbGwKQEAgLTE5NTQsMTM4ICsyMTczLDc0IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVh ZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCSAq LwogCXBnc3RhdF9wcmVwYXJlX3JlcG9ydF9jaGVja3N1bV9mYWlsdXJlKG9wZXJhdGlvbi0+c21n ci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkKTsKIAotCS8qCi0JICogR2V0IElPIGhhbmRs ZSBiZWZvcmUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKCksIGFzIHBnYWlvX2lvX2FjcXVpcmUoKQot CSAqIG1pZ2h0IGJsb2NrLCB3aGljaCB3ZSBkb24ndCB3YW50IGFmdGVyIHNldHRpbmcgSU9fSU5f UFJPR1JFU1MuCi0JICoKLQkgKiBJZiB3ZSBuZWVkIHRvIHdhaXQgZm9yIElPIGJlZm9yZSB3ZSBj YW4gZ2V0IGEgaGFuZGxlLCBzdWJtaXQKLQkgKiBhbHJlYWR5LXN0YWdlZCBJTyBmaXJzdCwgc28g dGhhdCBvdGhlciBiYWNrZW5kcyBkb24ndCBuZWVkIHRvIHdhaXQuCi0JICogVGhlcmUgd291bGRu J3QgYmUgYSBkZWFkbG9jayByaXNrLCBhcyBwZ2Fpb19pb19hY3F1aXJlKCkganVzdCBuZWVkcyB0 bwotCSAqIHdhaXQgZm9yIGFscmVhZHkgc3VibWl0dGVkIElPLCB3aGljaCBkb2Vzbid0IHJlcXVp cmUgYWRkaXRpb25hbCBsb2NrcywKLQkgKiBidXQgaXQgY291bGQgc3RpbGwgY2F1c2UgdW5kZXNp cmFibGUgd2FpdHMuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBiZW5lZml0IGlzIHRoYXQgdGhpcyB3 b3VsZCBhbGxvdyB1cyB0byBtZWFzdXJlIHRoZSB0aW1lIGluCi0JICogcGdhaW9faW9fYWNxdWly ZSgpIHdpdGhvdXQgY2F1c2luZyB1bmR1ZSB0aW1lciBvdmVyaGVhZCBpbiB0aGUgY29tbW9uLAot CSAqIG5vbi1ibG9ja2luZywgY2FzZS4gIEhvd2V2ZXIsIGN1cnJlbnRseSB0aGUgcGdzdGF0cyBp bmZyYXN0cnVjdHVyZQotCSAqIGRvZXNuJ3QgcmVhbGx5IGFsbG93IHRoYXQsIGFzIGl0IGEpIGFz c2VydHMgdGhhdCBhbiBvcGVyYXRpb24gY2FuJ3QKLQkgKiBoYXZlIHRpbWUgd2l0aG91dCBvcGVy YXRpb25zIGIpIGRvZXNuJ3QgaGF2ZSBhbiBBUEkgdG8gcmVwb3J0Ci0JICogImFjY3VtdWxhdGVk IiB0aW1lLgotCSAqLwotCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmVfbmIoQ3VycmVudFJlc291cmNl T3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JaWYgKHVubGlrZWx5KCFpb2gpKQotCXsK LQkJcGdhaW9fc3VibWl0X3N0YWdlZCgpOwotCi0JCWlvaCA9IHBnYWlvX2lvX2FjcXVpcmUoQ3Vy cmVudFJlc291cmNlT3duZXIsICZvcGVyYXRpb24tPmlvX3JldHVybik7Ci0JfQorCUFzc2VydChp b19idWZmZXJzWzBdID09IGJ1ZmZlcnNbbmJsb2Nrc19kb25lXSk7CisJaW9fcGFnZXNbMF0gPSBC dWZmZXJHZXRCbG9jayhidWZmZXJzW25ibG9ja3NfZG9uZV0pOworCWlvX2J1ZmZlcnNfbGVuID0g MTsKIAogCS8qCi0JICogQ2hlY2sgaWYgd2UgY2FuIHN0YXJ0IElPIG9uIHRoZSBmaXJzdCB0by1i ZS1yZWFkIGJ1ZmZlci4KLQkgKgotCSAqIElmIGFuIEkvTyBpcyBhbHJlYWR5IGluIHByb2dyZXNz IGluIGFub3RoZXIgYmFja2VuZCwgd2Ugd2FudCB0byB3YWl0Ci0JICogZm9yIHRoZSBvdXRjb21l OiBlaXRoZXIgZG9uZSwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdpbGwKLQkgKiBy ZXRyeS4KKwkgKiBIb3cgbWFueSBuZWlnaGJvcmluZy1vbi1kaXNrIGJsb2NrcyBjYW4gd2Ugc2Nh dHRlci1yZWFkIGludG8gb3RoZXIKKwkgKiBidWZmZXJzIGF0IHRoZSBzYW1lIHRpbWU/ICBJbiB0 aGlzIGNhc2Ugd2UgZG9uJ3Qgd2FpdCBpZiB3ZSBzZWUgYW4gSS9PCisJICogYWxyZWFkeSBpbiBw cm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJNX0lPX0lOX1BST0dSRVNTIGZvciB0aGUgaGVhZAor CSAqIGJsb2NrLCBzbyB3ZSBzaG91bGQgZ2V0IG9uIHdpdGggdGhhdCBJL08gYXMgc29vbiBhcyBw b3NzaWJsZS4KIAkgKi8KLQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW25ibG9j a3NfZG9uZV0sIGZhbHNlKSkKKwlmb3IgKGludCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9w ZXJhdGlvbi0+bmJsb2NrczsgaSsrKQogCXsKLQkJLyoKLQkJICogU29tZW9uZSBlbHNlIGhhcyBh bHJlYWR5IGNvbXBsZXRlZCB0aGlzIGJsb2NrLCB3ZSdyZSBkb25lLgotCQkgKgotCQkgKiBXaGVu IElPIGlzIG5lY2Vzc2FyeSwgLT5uYmxvY2tzX2RvbmUgaXMgdXBkYXRlZCBpbgotCQkgKiBQcm9j ZXNzUmVhZEJ1ZmZlcnNSZXN1bHQoKSwgYnV0IHRoYXQgaXMgbm90IGNhbGxlZCBpZiBubyBJTyBp cwotCQkgKiBuZWNlc3NhcnkuIFRodXMgdXBkYXRlIGhlcmUuCi0JCSAqLwotCQlvcGVyYXRpb24t Pm5ibG9ja3NfZG9uZSArPSAxOwotCQkqbmJsb2Nrc19wcm9ncmVzcyA9IDE7CisJCWlmICghUHJl cGFyZUFkZGl0aW9uYWxSZWFkQnVmZmVyKGJ1ZmZlcnNbaV0pKQorCQkJYnJlYWs7CisJCS8qIE11 c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KKwkJQXNzZXJ0KEJ1ZmZlckdldEJs b2NrTnVtYmVyKGJ1ZmZlcnNbaSAtIDFdKSA9PQorCQkJICAgQnVmZmVyR2V0QmxvY2tOdW1iZXIo YnVmZmVyc1tpXSkgLSAxKTsKKwkJQXNzZXJ0KGlvX2J1ZmZlcnNbaW9fYnVmZmVyc19sZW5dID09 IGJ1ZmZlcnNbaV0pOwogCi0JCXBnYWlvX2lvX3JlbGVhc2UoaW9oKTsKLQkJcGdhaW9fd3JlZl9j bGVhcigmb3BlcmF0aW9uLT5pb193cmVmKTsKLQkJZGlkX3N0YXJ0X2lvID0gZmFsc2U7Ci0KLQkJ LyoKLQkJICogUmVwb3J0IGFuZCB0cmFjayB0aGlzIGFzIGEgJ2hpdCcgZm9yIHRoaXMgYmFja2Vu ZCwgZXZlbiB0aG91Z2ggaXQKLQkJICogbXVzdCBoYXZlIHN0YXJ0ZWQgb3V0IGFzIGEgbWlzcyBp biBQaW5CdWZmZXJGb3JCbG9jaygpLiBUaGUgb3RoZXIKLQkJICogYmFja2VuZCB3aWxsIHRyYWNr IHRoaXMgYXMgYSAncmVhZCcuCi0JCSAqLwotCQlQcm9jZXNzQnVmZmVySGl0KG9wZXJhdGlvbi0+ c3RyYXRlZ3ksIG9wZXJhdGlvbi0+cmVsLCBwZXJzaXN0ZW5jZSwKLQkJCQkJCSBvcGVyYXRpb24t PnNtZ3IsIGZvcmtudW0sCi0JCQkJCQkgYmxvY2tudW0gKyBvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSk7CisJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0QmxvY2soYnVmZmVy c1tpXSk7CiAJfQorCisJLyogZ2V0IGEgcmVmZXJlbmNlIHRvIHdhaXQgZm9yIGluIFdhaXRSZWFk QnVmZmVycygpICovCisJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3BlcmF0aW9uLT5pb193cmVm KTsKKworCS8qIHByb3ZpZGUgdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB0aGUgY29tcGxldGlvbiBj YWxsYmFja3MgKi8KKwlwZ2Fpb19pb19zZXRfaGFuZGxlX2RhdGFfMzIoaW9oLCAodWludDMyICop IGlvX2J1ZmZlcnMsIGlvX2J1ZmZlcnNfbGVuKTsKKworCXBnYWlvX2lvX3JlZ2lzdGVyX2NhbGxi YWNrcyhpb2gsCisJCQkJCQkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAgPwor CQkJCQkJCQlQR0FJT19IQ0JfTE9DQUxfQlVGRkVSX1JFQURWIDoKKwkJCQkJCQkJUEdBSU9fSENC X1NIQVJFRF9CVUZGRVJfUkVBRFYsCisJCQkJCQkJCWZsYWdzKTsKKworCXBnYWlvX2lvX3NldF9m bGFnKGlvaCwgaW9oX2ZsYWdzKTsKKworCS8qIC0tLQorCSogRXZlbiB0aG91Z2ggd2UncmUgdHJ5 aW5nIHRvIGlzc3VlIElPIGFzeW5jaHJvbm91c2x5LCB0cmFjayB0aGUgdGltZQorCSogaW4gc21n cnN0YXJ0cmVhZHYoKToKKwkqIC0gaWYgaW9fbWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdp bGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCisJKiAgIGltbWVkaWF0ZWx5CisJKiAtIHRoZSBpbyBt ZXRob2QgbWlnaHQgbm90IHN1cHBvcnQgdGhlIElPIChlLmcuIHdvcmtlciBJTyBmb3IgYSB0ZW1w CisJKiAgIHRhYmxlKQorCSogLS0tCisJKi8KKwlpb19zdGFydCA9IHBnc3RhdF9wcmVwYXJlX2lv X3RpbWUodHJhY2tfaW9fdGltaW5nKTsKKwlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+ c21nciwgZm9ya251bSwKKwkJCQkgICBibG9ja251bSArIG5ibG9ja3NfZG9uZSwKKwkJCQkgICBp b19wYWdlcywgaW9fYnVmZmVyc19sZW4pOworCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29i amVjdCwgaW9fY29udGV4dCwgSU9PUF9SRUFELAorCQkJCQkJCWlvX3N0YXJ0LCAxLCBpb19idWZm ZXJzX2xlbiAqIEJMQ0tTWik7CisKKwlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0Vf VEVNUCkKKwkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47 CiAJZWxzZQotCXsKLQkJaW5zdHJfdGltZQlpb19zdGFydDsKKwkJcGdCdWZmZXJVc2FnZS5zaGFy ZWRfYmxrc19yZWFkICs9IGlvX2J1ZmZlcnNfbGVuOwogCi0JCS8qIFdlIGZvdW5kIGEgYnVmZmVy IHRoYXQgd2UgbmVlZCB0byByZWFkIGluLiAqLwotCQlBc3NlcnQoaW9fYnVmZmVyc1swXSA9PSBi dWZmZXJzW25ibG9ja3NfZG9uZV0pOwotCQlpb19wYWdlc1swXSA9IEJ1ZmZlckdldEJsb2NrKGJ1 ZmZlcnNbbmJsb2Nrc19kb25lXSk7Ci0JCWlvX2J1ZmZlcnNfbGVuID0gMTsKKwkvKgorCSAqIFRy YWNrIHZhY3V1bSBjb3N0IHdoZW4gaXNzdWluZyBJTywgbm90IGFmdGVyIHdhaXRpbmcgZm9yIGl0 LiBPdGhlcndpc2UKKwkgKiB3ZSBjb3VsZCBlbmQgdXAgaXNzdWluZyBhIGxvdCBvZiBJTyBpbiBh IHNob3J0IHRpbWVzcGFuLCBkZXNwaXRlIGEgbG93CisJICogY29zdCBsaW1pdC4KKwkgKi8KKwlp ZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJVmFjdXVtQ29zdEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBh Z2VNaXNzICogaW9fYnVmZmVyc19sZW47CiAKLQkJLyoKLQkJICogSG93IG1hbnkgbmVpZ2hib3Jp bmctb24tZGlzayBibG9ja3MgY2FuIHdlIHNjYXR0ZXItcmVhZCBpbnRvIG90aGVyCi0JCSAqIGJ1 ZmZlcnMgYXQgdGhlIHNhbWUgdGltZT8gIEluIHRoaXMgY2FzZSB3ZSBkb24ndCB3YWl0IGlmIHdl IHNlZSBhbgotCQkgKiBJL08gYWxyZWFkeSBpbiBwcm9ncmVzcy4gIFdlIGFscmVhZHkgc2V0IEJN X0lPX0lOX1BST0dSRVNTIGZvciB0aGUKLQkJICogaGVhZCBibG9jaywgc28gd2Ugc2hvdWxkIGdl dCBvbiB3aXRoIHRoYXQgSS9PIGFzIHNvb24gYXMgcG9zc2libGUuCi0JCSAqLwotCQlmb3IgKGlu dCBpID0gbmJsb2Nrc19kb25lICsgMTsgaSA8IG9wZXJhdGlvbi0+bmJsb2NrczsgaSsrKQotCQl7 Ci0JCQlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJzW2ldLCB0cnVlKSkKLQkJCQli cmVhazsKLQkJCS8qIE11c3QgYmUgY29uc2VjdXRpdmUgYmxvY2sgbnVtYmVycy4gKi8KLQkJCUFz c2VydChCdWZmZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2kgLSAxXSkgPT0KLQkJCQkgICBCdWZm ZXJHZXRCbG9ja051bWJlcihidWZmZXJzW2ldKSAtIDEpOwotCQkJQXNzZXJ0KGlvX2J1ZmZlcnNb aW9fYnVmZmVyc19sZW5dID09IGJ1ZmZlcnNbaV0pOworCSpuYmxvY2tzX3Byb2dyZXNzID0gaW9f YnVmZmVyc19sZW47CiAKLQkJCWlvX3BhZ2VzW2lvX2J1ZmZlcnNfbGVuKytdID0gQnVmZmVyR2V0 QmxvY2soYnVmZmVyc1tpXSk7Ci0JCX0KLQotCQkvKiBnZXQgYSByZWZlcmVuY2UgdG8gd2FpdCBm b3IgaW4gV2FpdFJlYWRCdWZmZXJzKCkgKi8KLQkJcGdhaW9faW9fZ2V0X3dyZWYoaW9oLCAmb3Bl cmF0aW9uLT5pb193cmVmKTsKLQotCQkvKiBwcm92aWRlIHRoZSBsaXN0IG9mIGJ1ZmZlcnMgdG8g dGhlIGNvbXBsZXRpb24gY2FsbGJhY2tzICovCi0JCXBnYWlvX2lvX3NldF9oYW5kbGVfZGF0YV8z Mihpb2gsICh1aW50MzIgKikgaW9fYnVmZmVycywgaW9fYnVmZmVyc19sZW4pOwotCi0JCXBnYWlv X2lvX3JlZ2lzdGVyX2NhbGxiYWNrcyhpb2gsCi0JCQkJCQkJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QID8KLQkJCQkJCQkJCVBHQUlPX0hDQl9MT0NBTF9CVUZGRVJfUkVBRFYg OgotCQkJCQkJCQkJUEdBSU9fSENCX1NIQVJFRF9CVUZGRVJfUkVBRFYsCi0JCQkJCQkJCQlmbGFn cyk7Ci0KLQkJcGdhaW9faW9fc2V0X2ZsYWcoaW9oLCBpb2hfZmxhZ3MpOwotCi0JCS8qIC0tLQot CQkgKiBFdmVuIHRob3VnaCB3ZSdyZSB0cnlpbmcgdG8gaXNzdWUgSU8gYXN5bmNocm9ub3VzbHks IHRyYWNrIHRoZSB0aW1lCi0JCSAqIGluIHNtZ3JzdGFydHJlYWR2KCk6Ci0JCSAqIC0gaWYgaW9f bWV0aG9kID09IElPTUVUSE9EX1NZTkMsIHdlIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIElPCi0J CSAqICAgaW1tZWRpYXRlbHkKLQkJICogLSB0aGUgaW8gbWV0aG9kIG1pZ2h0IG5vdCBzdXBwb3J0 IHRoZSBJTyAoZS5nLiB3b3JrZXIgSU8gZm9yIGEgdGVtcAotCQkgKiAgIHRhYmxlKQotCQkgKiAt LS0KLQkJICovCi0JCWlvX3N0YXJ0ID0gcGdzdGF0X3ByZXBhcmVfaW9fdGltZSh0cmFja19pb190 aW1pbmcpOwotCQlzbWdyc3RhcnRyZWFkdihpb2gsIG9wZXJhdGlvbi0+c21nciwgZm9ya251bSwK LQkJCQkJICAgYmxvY2tudW0gKyBuYmxvY2tzX2RvbmUsCi0JCQkJCSAgIGlvX3BhZ2VzLCBpb19i dWZmZXJzX2xlbik7Ci0JCXBnc3RhdF9jb3VudF9pb19vcF90aW1lKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9SRUFELAotCQkJCQkJCQlpb19zdGFydCwgMSwgaW9fYnVmZmVyc19sZW4gKiBC TENLU1opOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQotCQkJ cGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX3JlYWQgKz0gaW9fYnVmZmVyc19sZW47Ci0JCWVsc2UK LQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfcmVhZCArPSBpb19idWZmZXJzX2xlbjsKLQot CQkvKgotCQkgKiBUcmFjayB2YWN1dW0gY29zdCB3aGVuIGlzc3VpbmcgSU8sIG5vdCBhZnRlciB3 YWl0aW5nIGZvciBpdC4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGVuZCB1cCBpc3N1aW5nIGEg bG90IG9mIElPIGluIGEgc2hvcnQgdGltZXNwYW4sCi0JCSAqIGRlc3BpdGUgYSBsb3cgY29zdCBs aW1pdC4KLQkJICovCi0JCWlmIChWYWN1dW1Db3N0QWN0aXZlKQotCQkJVmFjdXVtQ29zdEJhbGFu Y2UgKz0gVmFjdXVtQ29zdFBhZ2VNaXNzICogaW9fYnVmZmVyc19sZW47Ci0KLQkJKm5ibG9ja3Nf cHJvZ3Jlc3MgPSBpb19idWZmZXJzX2xlbjsKLQkJZGlkX3N0YXJ0X2lvID0gdHJ1ZTsKLQl9Ci0K LQlyZXR1cm4gZGlkX3N0YXJ0X2lvOworCXJldHVybiB0cnVlOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCAxNDNkYzIwNjMuLmFiMGNkZmFkMiAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNjksNiArMjM2OSw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0010-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Disposition: attachment; filename="v16-0010-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehj08 RnJvbSA0M2VkYTVhNGFlYjc2ZTk0MjBkYzYxZTViNDg2YjY5YzNmZWQ0MTU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDEw LzE3XSBXSVA6IHJlYWRfc3RyZWFtOiBJc3N1ZSBJTyBzeW5jaHJvbm91c2x5IHdoaWxlIGluCiBm YXN0IHBhdGgKCldoaWxlIGluIGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdo dCBlbmNvdW50ZXIKc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0IG5vdywgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueQpvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMg d291bGQgaGF2ZSB0aGUgb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2VycywKd2l0aG91 dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBvZiB0aGUgSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVl ZCBpdC4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vCkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5j IHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGNkNTRjMWE3NC4uMzY2N2Q2 N2FiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTgzMyw2ICs4MzMs MTkgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoq cGVyX2J1ZmZlcl9kYXRhKQogCQkJaWYgKHN0cmVhbS0+YWR2aWNlX2VuYWJsZWQpCiAJCQkJZmxh Z3MgfD0gUkVBRF9CVUZGRVJTX0lTU1VFX0FEVklDRTsKIAorCQkJLyoKKwkJCSAqIFdoaWxlIGlu IGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdodCBlbmNvdW50ZXIKKwkJCSAq IHN5bmNocm9ub3VzbHkuIEJlY2F1c2Ugd2UgYXJlLCByaWdodCBub3csIG5vdCByZWFkaW5nIGFo ZWFkLAorCQkJICogZGlzcGF0Y2hpbmcgYW55IG9jY2FzaW9uYWwgSU8gdG8gd29ya2VycyB3b3Vs ZCBoYXZlIHRoZQorCQkJICogb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2Vycywgd2l0 aG91dCBhbnkgcmVhbGlzdGljCisJCQkgKiBjaGFuY2Ugb2YgdGhlIElPIGNvbXBsZXRpbmcgYmVm b3JlIHdlIG5lZWQgaXQuIFdlIHdpbGwgc3dpdGNoCisJCQkgKiB0byBub24tc3luY2hyb25vdXMg SU8gYWZ0ZXIgdGhpcy4KKwkJCSAqCisJCQkgKiBYWFg6IFNob3VsZCB3ZSBkbyBzbyBvbmx5IGZv ciB3b3JrZXIsIG9yIGFsc28gaW9fdXJpbmc/IFRoZXJlJ3MKKwkJCSAqIG5vdCBtdWNoIGRpc3Bh dGNoIG92ZXJoZWFkIHdpdGggaW9fdXJpbmcsIGNvbXBhcmVkIHRvIHdvcmtlci4uLgorCQkJICov CisJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAq IFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQK IAkJCSAqIGFyYml0cmFyeSBJL08gZW50cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3Qg aGF2ZSB0bwpAQCAtODYwLDYgKzg3Myw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJCXN0cmVhbS0+aW9zX2lu X3Byb2dyZXNzID0gMTsKIAkJCXN0cmVhbS0+aW9zWzBdLmJ1ZmZlcl9pbmRleCA9IG9sZGVzdF9i dWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnNlcV9ibG9ja251bSA9IG5leHRfYmxvY2tudW0gKyAx OworCisJCQkvKiBGSVhNRTogaXQgd291bGQgcHJvYmFibHkgd29ydGggaXNzdWluZyByZWFkYWhl YWQgaGVyZSAqLwogCQl9CiAJCWVsc2UKIAkJewotLSAKMi41My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0008-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v16-0008-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehj410 RnJvbSAwZjZjYzQ5NjdhMjQwYjZmYWJkMmIzOWU0NTA2ODA1MWIzYWQ4NDI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTYgMDgvMTddIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl cyBjb3VudCBidWZmZXIgaGl0cywgcmVxdWlyaW5nIHF1aXRlIGEgZmV3IGxpbmVzIG9mCmNvZGUg c2luY2Ugd2UgZG8gYWNjb3VudGluZyBpbiBzbyBtYW55IHBsYWNlcy4gRnV0dXJlIGNvbW1pdHMg d2lsbCBhZGQKbW9yZSBsb2NhdGlvbnMsIHNvIHJlZmFjdG9yIGludG8gYSBoZWxwZXIuCgpOb3Rl OiBJIChwZ2VvZ2hlYW4pIGhhdmUgY2hhbmdlZCB0aGlzIGZyb20gTWVsYW5pZSdzIG9yaWdpbmFs IGJ5CmlubGluaW5nIHRoZSBoZWxwZXIgZnVuY3Rpb246CgpodHRwczovL3Bvc3Rnci5lcy9tL0NB SDItV3prMDJ2UGpzSlB4N0VHTm1ndnNLS2d5SG49WHRHakpjUEUrZVFUUDN4UXQ3d0BtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIHwgMTExICsr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1NiBpbnNlcnRpb25z KCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDJhOTU1MTdhMy4uNmNhZDI3MTM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtNjQ4LDYgKzY0OCwxMCBAQCBzdGF0aWMgaW5saW5lIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9j KFNNZ3JSZWxhdGlvbiBzbWdyLAogCQkJCQkJCQkJICBib29sICpmb3VuZFB0ciwgSU9Db250ZXh0 IGlvX2NvbnRleHQpOwogc3RhdGljIGJvb2wgQXN5bmNSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09w ZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpOwogc3RhdGljIHZvaWQg Q2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9u LCBib29sIGlzX2NvbXBsZXRlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBQcm9jZXNzQnVmZmVySGl0 KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkJUmVsYXRpb24gcmVsLCBj aGFyIHBlcnNpc3RlbmNlLAorCQkJCQkJCQkJU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIg Zm9ya251bSwKKwkJCQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKIHN0YXRpYyBCdWZmZXIg R2V0VmljdGltQnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCBJT0NvbnRleHQg aW9fY29udGV4dCk7CiBzdGF0aWMgdm9pZCBGbHVzaFVubG9ja2VkQnVmZmVyKEJ1ZmZlckRlc2Mg KmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4sCiAJCQkJCQkJCUlPT2JqZWN0IGlvX29iamVjdCwgSU9D b250ZXh0IGlvX2NvbnRleHQpOwpAQCAtMTIyNiw4ICsxMjMwLDYgQEAgUGluQnVmZmVyRm9yQmxv Y2soUmVsYXRpb24gcmVsLAogCQkJCSAgYm9vbCAqZm91bmRQdHIpCiB7CiAJQnVmZmVyRGVzYyAq YnVmSGRyOwotCUlPQ29udGV4dAlpb19jb250ZXh0OwotCUlPT2JqZWN0CWlvX29iamVjdDsKIAog CUFzc2VydChibG9ja051bSAhPSBQX05FVyk7CiAKQEAgLTEyMzYsMTcgKzEyMzgsNiBAQCBQaW5C dWZmZXJGb3JCbG9jayhSZWxhdGlvbiByZWwsCiAJCQlwZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNU RU5DRV9QRVJNQU5FTlQgfHwKIAkJCXBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1VOTE9H R0VEKSk7CiAKLQlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKLQl7Ci0J CWlvX2NvbnRleHQgPSBJT0NPTlRFWFRfTk9STUFMOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9U RU1QX1JFTEFUSU9OOwotCX0KLQllbHNlCi0JewotCQlpb19jb250ZXh0ID0gSU9Db250ZXh0Rm9y U3RyYXRlZ3koc3RyYXRlZ3kpOwotCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKLQl9 Ci0KIAlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJUKGZvcmtOdW0sIGJsb2NrTnVt LAogCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKIAkJCQkJ CQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKQEAgLTEyNTQsMTggKzEy NDUsMTEgQEAgUGluQnVmZmVyRm9yQmxvY2soUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJICAgc21n ci0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAogCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQRVJT SVNURU5DRV9URU1QKQotCXsKIAkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3Jr TnVtLCBibG9ja051bSwgZm91bmRQdHIpOwotCQlpZiAoKmZvdW5kUHRyKQotCQkJcGdCdWZmZXJV c2FnZS5sb2NhbF9ibGtzX2hpdCsrOwotCX0KIAllbHNlCi0JewogCQlidWZIZHIgPSBCdWZmZXJB bGxvYyhzbWdyLCBwZXJzaXN0ZW5jZSwgZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJIHN0cmF0 ZWd5LCBmb3VuZFB0ciwgaW9fY29udGV4dCk7Ci0JCWlmICgqZm91bmRQdHIpCi0JCQlwZ0J1ZmZl clVzYWdlLnNoYXJlZF9ibGtzX2hpdCsrOwotCX0KKwkJCQkJCQkgc3RyYXRlZ3ksIGZvdW5kUHRy LCBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSkpOworCiAJaWYgKHJlbCkKIAl7CiAJCS8q CkBAIC0xMjc0LDIyICsxMjU4LDEwIEBAIFBpbkJ1ZmZlckZvckJsb2NrKFJlbGF0aW9uIHJlbCwK IAkJICogemVyb2VkIGluc3RlYWQpLCB0aGUgcGVyLXJlbGF0aW9uIHN0YXRzIGFsd2F5cyBjb3Vu dCB0aGVtLgogCQkgKi8KIAkJcGdzdGF0X2NvdW50X2J1ZmZlcl9yZWFkKHJlbCk7Ci0JCWlmICgq Zm91bmRQdHIpCi0JCQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWwpOwogCX0KLQlpZiAoKmZv dW5kUHRyKQotCXsKLQkJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29udGV4dCwg SU9PUF9ISVQsIDEsIDApOwotCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKLQkJCVZhY3V1bUNvc3RC YWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OwogCi0JCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVS X1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyLAotCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJ CQkJCSAgdHJ1ZSk7Ci0JfQorCWlmICgqZm91bmRQdHIpCisJCVByb2Nlc3NCdWZmZXJIaXQoc3Ry YXRlZ3ksIHJlbCwgcGVyc2lzdGVuY2UsIHNtZ3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKIAogCXJl dHVybiBCdWZmZXJEZXNjcmlwdG9yR2V0QnVmZmVyKGJ1Zkhkcik7CiB9CkBAIC0xNjk1LDYgKzE2 NjcsNTEgQEAgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKEJ1ZmZlciBidWZmZXIsIGJvb2wgbm93YWl0 KQogCXJldHVybiBSZWFkQnVmZmVyc0NhblN0YXJ0SU9PbmNlKGJ1ZmZlciwgbm93YWl0KTsKIH0K IAorLyoKKyAqIFdlIHRyYWNrIHZhcmlvdXMgc3RhdHMgcmVsYXRlZCB0byBidWZmZXIgaGl0cy4g QmVjYXVzZSB0aGlzIGlzIGRvbmUgaW4gYQorICogZmV3IHNlcGFyYXRlIHBsYWNlcywgdGhpcyBo ZWxwZXIgZXhpc3RzIGZvciBjb252ZW5pZW5jZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitQ cm9jZXNzQnVmZmVySGl0KEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCSBSZWxh dGlvbiByZWwsIGNoYXIgcGVyc2lzdGVuY2UsIFNNZ3JSZWxhdGlvbiBzbWdyLAorCQkJCSBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtKQoreworCUlPQ29udGV4dAlpb19j b250ZXh0OworCUlPT2JqZWN0CWlvX29iamVjdDsKKworCWlmIChwZXJzaXN0ZW5jZSA9PSBSRUxQ RVJTSVNURU5DRV9URU1QKQorCXsKKwkJaW9fY29udGV4dCA9IElPQ09OVEVYVF9OT1JNQUw7CisJ CWlvX29iamVjdCA9IElPT0JKRUNUX1RFTVBfUkVMQVRJT047CisJfQorCWVsc2UKKwl7CisJCWlv X2NvbnRleHQgPSBJT0NvbnRleHRGb3JTdHJhdGVneShzdHJhdGVneSk7CisJCWlvX29iamVjdCA9 IElPT0JKRUNUX1JFTEFUSU9OOworCX0KKworCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURf RE9ORShmb3JrbnVtLAorCQkJCQkJCQkJICBibG9ja251bSwKKwkJCQkJCQkJCSAgc21nci0+c21n cl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLmRiT2lkLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu cmVsTnVtYmVyLAorCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJCQkJ CQkJCQkgIHRydWUpOworCisJaWYgKHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVAp CisJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQgKz0gMTsKKwllbHNlCisJCXBnQnVmZmVy VXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwlpZiAocmVsKQorCQlwZ3N0YXRfY291bnRf YnVmZmVyX2hpdChyZWwpOworCisJcGdzdGF0X2NvdW50X2lvX29wKGlvX29iamVjdCwgaW9fY29u dGV4dCwgSU9PUF9ISVQsIDEsIDApOworCisJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCisJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworfQorCiAvKgogICogSGVscGVyIGZv ciBXYWl0UmVhZEJ1ZmZlcnMoKSB0aGF0IHByb2Nlc3NlcyB0aGUgcmVzdWx0cyBvZiBhIHJlYWR2 CiAgKiBvcGVyYXRpb24sIHJhaXNpbmcgYW4gZXJyb3IgaWYgbmVjZXNzYXJ5LgpAQCAtMTk5MCwy NSArMjAwNyw5IEBAIEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJh dGlvbiwgaW50ICpuYmxvY2tzX3Byb2dyZXNzKQogCQkgKiBtdXN0IGhhdmUgc3RhcnRlZCBvdXQg YXMgYSBtaXNzIGluIFBpbkJ1ZmZlckZvckJsb2NrKCkuIFRoZSBvdGhlcgogCQkgKiBiYWNrZW5k IHdpbGwgdHJhY2sgdGhpcyBhcyBhICdyZWFkJy4KIAkJICovCi0JCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1JFQURfRE9ORShmb3JrbnVtLCBibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19k b25lLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkLAotCQkJCQkJCQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IuZGJPaWQsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0 b3IuYmFja2VuZCwKLQkJCQkJCQkJCQkgIHRydWUpOwotCi0JCWlmIChwZXJzaXN0ZW5jZSA9PSBS RUxQRVJTSVNURU5DRV9URU1QKQotCQkJcGdCdWZmZXJVc2FnZS5sb2NhbF9ibGtzX2hpdCArPSAx OwotCQllbHNlCi0JCQlwZ0J1ZmZlclVzYWdlLnNoYXJlZF9ibGtzX2hpdCArPSAxOwotCi0JCWlm IChvcGVyYXRpb24tPnJlbCkKLQkJCXBnc3RhdF9jb3VudF9idWZmZXJfaGl0KG9wZXJhdGlvbi0+ cmVsKTsKLQotCQlwZ3N0YXRfY291bnRfaW9fb3AoaW9fb2JqZWN0LCBpb19jb250ZXh0LCBJT09Q X0hJVCwgMSwgMCk7Ci0KLQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCi0JCQlWYWN1dW1Db3N0QmFs YW5jZSArPSBWYWN1dW1Db3N0UGFnZUhpdDsKKwkJUHJvY2Vzc0J1ZmZlckhpdChvcGVyYXRpb24t PnN0cmF0ZWd5LCBvcGVyYXRpb24tPnJlbCwgcGVyc2lzdGVuY2UsCisJCQkJCQkgb3BlcmF0aW9u LT5zbWdyLCBmb3JrbnVtLAorCQkJCQkJIGJsb2NrbnVtICsgb3BlcmF0aW9uLT5uYmxvY2tzX2Rv bmUpOwogCX0KIAllbHNlCiAJewotLSAKMi41My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Disposition: attachment; filename="v16-0006-Use-ExecSetTupleBound-hint-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehj912 RnJvbSA5MWJkZGJiMmMyNDZiY2U3ZGU5MTkxY2I5ZWI4ZDliMzUyMTdhYzliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjIgSmFuIDIwMjYgMTM6MDc6MTMgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNiAwNi8xN10g VXNlIEV4ZWNTZXRUdXBsZUJvdW5kIGhpbnQgZHVyaW5nIGluZGV4IHNjYW5zLgoKVGhpcyBnaXZl cyBpbmRleCBzY2FucyBhIHdheSB0byBhdm9pZCB1c2luZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBj ZXJ0YWluCmtpbmRzIG9mIHF1ZXJpZXMgdGhhdCBhcmUgdmVyeSB1bmxpa2VseSB0byBiZW5lZml0 IGZyb20gcHJlZmV0Y2hpbmc6CnF1ZXJpZXMgd2hvc2UgcGxhbiBpbnZvbHZlcyBhIExJTUlUIG5v ZGUgdGhhdCBpcyBjb25zdW1lcyB0dXBsZXMgZnJvbSBhbgppbmRleCBzY2FuIChvciBpbmRleC1v bmx5IHNjYW4pIG5vZGUuCgpUZXN0aW5nIGhhcyBzaG93biB0aGlzIHRvIGJlIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2l0aCBuZXN0ZWQgbG9vcApqb2lucyB3aXRoIGEgTElNSVQgb24gYW4gaW5u ZXIgaW5kZXggc2Nhbi4gIFRoaXMgaXMgdHlwaWNhbCBvZiBuZXN0ZWQKbG9vcCBhbnRpLWpvaW5z LCBhbmQgbmVzdGVkIGxvb3Agc2VtaS1qb2lucy4KClhYWCBUaGlzIGlzIHN0aWxsIHZlcnkgbXVj aCBhIFdJUC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1C eTogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaCAgICAgICAgICAgICB8ICAyICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oICAgICAgICAgICAgfCAgNCArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hh bmRsZXIuYyB8ICA1ICsrKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAg ICB8ICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQcm9jbm9kZS5jICAgICAgfCA1MCAr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgfCAxMCArKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j ICAgICB8IDEzICsrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA4NSBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmgKaW5kZXggM2ViNDFlNzA3Li40YWMyMTg5MjEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aApAQCAtMzg2LDYgKzM4Niw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJ LyogcGFyYWxsZWwgaW5kZXggc2NhbiBpbmZvcm1hdGlvbiwgaW4gc2hhcmVkIG1lbW9yeSAqLwog CXN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpwYXJhbGxlbF9zY2FuOwogCisJaW50 NjQJCXR1cGxlc19uZWVkZWQ7CisKIAkvKgogCSAqIExpbWl0IG9uIGRpc3RpbmN0IGhlYXAgcGFn ZXMgdmlzaXRlZCBiZWZvcmUgZ2l2aW5nIHVwICgwID0gbm8gbGltaXQpLgogCSAqIFVzZWQgYnkg c2VsZnVuY3MuYyB0byBib3VuZCB0aGUgY29zdCBvZiBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBv aW50KCkuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDU5M2E3NzEwOC4uMjVmZGEyMTBmIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9leGVjbm9kZXMuaApAQCAtMTcwNiw2ICsxNzA2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKICAq CQlTY2FuRGVzYwkJICAgaW5kZXggc2NhbiBkZXNjcmlwdG9yCiAgKgkJSW5zdHJ1bWVudAkJICAg bG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJh bGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCisgKgkJVHVwbGVz TmVlZGVkCSAgIHR1cGxlIGJvdW5kLCBzZWUgRXhlY1NldFR1cGxlQm91bmQKICAqCiAgKgkJUmVv cmRlclF1ZXVlCSAgIHR1cGxlcyB0aGF0IG5lZWQgcmVvcmRlcmluZyBkdWUgdG8gcmUtY2hlY2sK ICAqCQlSZWFjaGVkRW5kCQkgICBoYXZlIHdlIGZldGNoZWQgYWxsIHR1cGxlcyBmcm9tIGluZGV4 IGFscmVhZHk/CkBAIC0xNzM0LDYgKzE3MzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5T dGF0ZQogCXN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqaXNzX1NjYW5EZXNjOwogCUluZGV4U2Nh bkluc3RydW1lbnRhdGlvbiAqaXNzX0luc3RydW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICppc3NfU2hhcmVkSW5mbzsKKwlpbnQ2NAkJaXNzX1R1cGxlc05lZWRlZDsKIAog CS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHJlLWNoZWNraW5nIE9SREVSIEJZIGV4cHIgb3JkZXJp bmcgKi8KIAlwYWlyaW5naGVhcCAqaXNzX1Jlb3JkZXJRdWV1ZTsKQEAgLTE3NjIsNiArMTc2NCw3 IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJU2NhbkRlc2MJCSAgIGluZGV4 IHNjYW4gZGVzY3JpcHRvcgogICoJCUluc3RydW1lbnQJCSAgIGxvY2FsIGluZGV4IHNjYW4gaW5z dHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxsZWwgd29ya2VyIGluc3RydW1l bnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQorICoJCVR1cGxlc05lZWRlZAkgICB0dXBsZSBib3Vu ZCwgc2VlIEV4ZWNTZXRUdXBsZUJvdW5kCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xk aW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCiAgKgkJUHNjYW5MZW4JCSAgIHNpemUg b2YgcGFyYWxsZWwgaW5kZXgtb25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmluZ0F0 dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRBTEVO CkBAIC0xNzg0LDYgKzE3ODcsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9ubHlTY2FuU3RhdGUK IAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlvc3NfU2NhbkRlc2M7CiAJSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uICppb3NzX0luc3RydW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVu dGF0aW9uICppb3NzX1NoYXJlZEluZm87CisJaW50NjQJCWlvc3NfVHVwbGVzTmVlZGVkOwogCVR1 cGxlVGFibGVTbG90ICppb3NzX1RhYmxlU2xvdDsKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwogCUF0 dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggMjhhMTQ0ZDFjLi5iYmMwMmIyOTYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNjI2LDkgKzYyNiwxNCBAQCBoZWFw YW1fYmF0Y2hfZ2V0bmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uLAogCQkgKiBoYXZlbid0IGRvbmUgYW55IGhlYXAgZmV0Y2hlcyB5ZXQuICBXZSBkb24ndCB3 YW50IHRvIHdhc3RlIGFueQogCQkgKiBjeWNsZXMgb24gYWxsb2NhdGluZyBhIHJlYWQgc3RyZWFt IHVudGlsIHdlIGhhdmUgYSBkZW1vbnN0cmF0ZWQKIAkJICogbmVlZCBmb3IgcGVyZm9ybSBoZWFw IGZldGNoZXMuCisJCSAqCisJCSAqIEFsc28gYXZvaWRpbmcgcHJlZmV0Y2hpbmcgd2hlbiB0aGUg Y29yZSBleGVjdXRvciBwYXNzZXMgdGhlIHNjYW4gYQorCQkgKiB0dXBsZXNfbmVlZGVkIGhpbnQg dGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2NhbiBpcyBsaWtlbHkgdG8gZW5kCisJCSAqIGJlZm9y ZSBsb25nLgogCQkgKi8KIAkJaWYgKCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0gJiYgcHJpb3JCYXRj aCAmJiBzY2FuLT5NVkNDU2NhbiAmJgogCQkJaHNjYW4tPnhzX2JsayAhPSBJbnZhbGlkQmxvY2tO dW1iZXIgJiYJLyogZm9yIGluZGV4LW9ubHkgc2NhbnMgKi8KKwkJCShzY2FuLT50dXBsZXNfbmVl ZGVkID09IC0xIHx8IHNjYW4tPnR1cGxlc19uZWVkZWQgPiAyMCkgJiYKIAkJCWVuYWJsZV9pbmRl eHNjYW5fcHJlZmV0Y2gpCiAJCXsKIAkJCUFzc2VydCghYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBv cy52YWxpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IGQwYjY4ZjM4ZS4uZGVkZTE2 Y2YzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtMTI2LDYgKzEyNiw3IEBAIFJlbGF0 aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGludCBua2V5cywgaW50IG5v cmRlcmJ5cykKIAlzY2FuLT54c19pdHVwZGVzYyA9IE5VTEw7CiAJc2Nhbi0+eHNfaGl0dXAgPSBO VUxMOwogCXNjYW4tPnhzX2hpdHVwZGVzYyA9IE5VTEw7CisJc2Nhbi0+dHVwbGVzX25lZWRlZCA9 IC0xOwkvKiBubyBsaW1pdCAqLwogCXNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSAwOwog CiAJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj UHJvY25vZGUuYwppbmRleCBkMzU5NzY5MjUuLmI1NDhlMzJmNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1Byb2Nub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY1Byb2Nub2RlLmMKQEAgLTcyLDYgKzcyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVz LmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgogI2luY2x1ZGUgImV4 ZWN1dG9yL25vZGVBZ2cuaCIKQEAgLTg0MSw2ICs4NDIsMTIgQEAgRXhlY1NodXRkb3duTm9kZV93 YWxrZXIoUGxhblN0YXRlICpub2RlLCB2b2lkICpjb250ZXh0KQogICogQW55IG5lZ2F0aXZlIHR1 cGxlc19uZWVkZWQgdmFsdWUgbWVhbnMgIm5vIGxpbWl0Iiwgd2hpY2ggc2hvdWxkIGJlIHRoZQog ICogZGVmYXVsdCBhc3N1bXB0aW9uIHdoZW4gdGhpcyBpcyBub3QgY2FsbGVkIGF0IGFsbCBmb3Ig YSBwYXJ0aWN1bGFyIG5vZGUuCiAgKgorICogTm90ZTogZm9yIG5vZGVzIGxpa2UgU29ydCwgdHVw bGVzX25lZWRlZCBpcyBhIGhhcmQgbGltaXQgLS0gdGhlIG5vZGUgY2FuCisgKiBzdG9wIGFmdGVy IHByb2R1Y2luZyBleGFjdGx5IHRoYXQgbWFueSB0dXBsZXMuICBGb3IgaW5kZXggc2NhbnMsIGhv d2V2ZXIsCisgKiB0dXBsZXNfbmVlZGVkIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiwgYmVjYXVz ZSBub24taW5kZXggcXVhbHMgbWF5IGZpbHRlcgorICogb3V0IHNvbWUgdHVwbGVzLiAgVGhlIGFj dHVhbCBudW1iZXIgb2YgdHVwbGVzIGZldGNoZWQgZnJvbSB0aGUgaW5kZXggbWF5CisgKiBuZWVk IHRvIGV4Y2VlZCB0dXBsZXNfbmVlZGVkIHRvIHNhdGlzZnkgdGhlIGNhbGxlcidzIHJlcXVpcmVt ZW50cy4KKyAqCiAgKiBOb3RlOiBpZiB0aGlzIGlzIGNhbGxlZCByZXBlYXRlZGx5IG9uIGEgcGxh biB0cmVlLCB0aGUgZXhhY3Qgc2FtZSBzZXQKICAqIG9mIG5vZGVzIG11c3QgYmUgdXBkYXRlZCB3 aXRoIHRoZSBuZXcgbGltaXQgZWFjaCB0aW1lOyBiZSBjYXJlZnVsIHRoYXQKICAqIG9ubHkgdW5j aGFuZ2luZyBjb25kaXRpb25zIGFyZSB0ZXN0ZWQgaGVyZS4KQEAgLTk3OCw2ICs5ODUsNDkgQEAg RXhlY1NldFR1cGxlQm91bmQoaW50NjQgdHVwbGVzX25lZWRlZCwgUGxhblN0YXRlICpjaGlsZF9u b2RlKQogCiAJCUV4ZWNTZXRUdXBsZUJvdW5kKHR1cGxlc19uZWVkZWQsIG91dGVyUGxhblN0YXRl KGNoaWxkX25vZGUpKTsKIAl9CisJZWxzZSBpZiAoSXNBKGNoaWxkX25vZGUsIEluZGV4U2NhblN0 YXRlKSkKKwl7CisJCS8qCisJCSAqIElmIGl0IGlzIGFuIEluZGV4U2Nhbiwgc2F2ZSB0aGUgdHVw bGVzX25lZWRlZCBpbiB0aGUgc3RhdGUgc28gaXQKKwkJICogY2FuIGJlIHByb3BhZ2F0ZWQgdG8g dGhlIEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgc2NhbiBpcyBzdGFydGVkLgorCQkgKgorCQkgKiBO b3RlOiBBcyB3aXRoIFNvcnQsIHRoZSBpbmRleCBzY2FuIG5vZGUgaXMgcmVzcG9uc2libGUgZm9y IHJlYWN0aW5nCisJCSAqIHByb3Blcmx5IHRvIGNoYW5nZXMgdG8gdGhpcyBwYXJhbWV0ZXIuCisJ CSAqLworCQlJbmRleFNjYW5TdGF0ZSAqaXNzdGF0ZSA9IChJbmRleFNjYW5TdGF0ZSAqKSBjaGls ZF9ub2RlOworCisJCWlzc3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSB0dXBsZXNfbmVlZGVkOwor CisJCS8qIElmIHNjYW4gYWxyZWFkeSBzdGFydGVkLCB1cGRhdGUgdGhlIEluZGV4U2NhbkRlc2Mg dG9vICovCisJCWlmIChpc3N0YXRlLT5pc3NfU2NhbkRlc2MpCisJCQlpc3N0YXRlLT5pc3NfU2Nh bkRlc2MtPnR1cGxlc19uZWVkZWQgPSB0dXBsZXNfbmVlZGVkOworCX0KKwllbHNlIGlmIChJc0Eo Y2hpbGRfbm9kZSwgSW5kZXhPbmx5U2NhblN0YXRlKSkKKwl7CisJCS8qIFNhbWUgY29tbWVudHMg YXMgZm9yIEluZGV4U2NhbiAqLworCQlJbmRleE9ubHlTY2FuU3RhdGUgKmlvc3N0YXRlID0gKElu ZGV4T25seVNjYW5TdGF0ZSAqKSBjaGlsZF9ub2RlOworCisJCWlvc3N0YXRlLT5pb3NzX1R1cGxl c05lZWRlZCA9IHR1cGxlc19uZWVkZWQ7CisKKwkJLyogSWYgc2NhbiBhbHJlYWR5IHN0YXJ0ZWQs IHVwZGF0ZSB0aGUgSW5kZXhTY2FuRGVzYyB0b28gKi8KKwkJaWYgKGlvc3N0YXRlLT5pb3NzX1Nj YW5EZXNjKQorCQkJaW9zc3RhdGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSB0dXBs ZXNfbmVlZGVkOworCX0KKwllbHNlIGlmIChJc0EoY2hpbGRfbm9kZSwgTmVzdExvb3BTdGF0ZSkp CisJeworCQkvKgorCQkgKiBGb3IgTmVzdExvb3Agam9pbnMgd2hlcmUgZWFjaCBvdXRlciB0dXBs ZSBwcm9kdWNlcyBhdCBtb3N0IG9uZQorCQkgKiBvdXRwdXQgdHVwbGUsIHdlIGNhbiBwcm9wYWdh dGUgdGhlIGJvdW5kIHRvIHRoZSBvdXRlciBjaGlsZAorCQkgKi8KKwkJTmVzdExvb3BTdGF0ZSAq bmxzdGF0ZSA9IChOZXN0TG9vcFN0YXRlICopIGNoaWxkX25vZGU7CisJCUpvaW5UeXBlCWpvaW50 eXBlID0gbmxzdGF0ZS0+anMuam9pbnR5cGU7CisKKwkJaWYgKGpvaW50eXBlID09IEpPSU5fU0VN SSB8fCBqb2ludHlwZSA9PSBKT0lOX0FOVEkgfHwKKwkJCW5sc3RhdGUtPmpzLnNpbmdsZV9tYXRj aCkKKwkJeworCQkJRXhlY1NldFR1cGxlQm91bmQodHVwbGVzX25lZWRlZCwgb3V0ZXJQbGFuU3Rh dGUoY2hpbGRfbm9kZSkpOworCQl9CisJfQogCiAJLyoKIAkgKiBJbiBwcmluY2lwbGUgd2UgY291 bGQgZGVzY2VuZCB0aHJvdWdoIGFueSBwbGFuIG5vZGUgdHlwZSB0aGF0IGlzCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCBhZWI0YmJjM2UuLjk0ZWE5MmRiMyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC05Nyw2ICs5Nyw5 IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQlub2RlLT5pb3Nz X1NjYW5EZXNjID0gc2NhbmRlc2M7CiAJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193 YW50X2l0dXApOwogCisJCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwkJc2NhbmRl c2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkg KiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28g YWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTUz MSw2ICs1MzQsNyBAQCBFeGVjSW5pdEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhbiAqbm9kZSwg RVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5 c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aW9zc19SdW50aW1lS2V5cyA9IE5VTEw7CiAJ aW5kZXhzdGF0ZS0+aW9zc19OdW1SdW50aW1lS2V5cyA9IDA7CisJaW5kZXhzdGF0ZS0+aW9zc19U dXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhlIGluZGV4IHNjYW4ga2V5cyBm cm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC03MDcsNiArNzExLDkgQEAgRXhlY0luZGV4 T25seVNjYW5Jbml0aWFsaXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAkJCQkJCQkJ IHBpc2Nhbik7CiAJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAK KwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aW9zc19TY2FuRGVzYy0+ dHVwbGVzX25lZWRlZCA9IG5vZGUtPmlvc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJZiBu byBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQg YW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgpAQCAtNzcyLDYgKzc3 OSw5IEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZVdvcmtlcihJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUsCiAJCQkJCQkJCSBwaXNjYW4pOwogCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNj LT54c193YW50X2l0dXApOwogCisJLyogUGFzcyBkb3duIGFueSB0dXBsZSBib3VuZCAqLworCW5v ZGUtPmlvc3NfU2NhbkRlc2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pb3NzX1R1cGxlc05lZWRl ZDsKKwogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBh cmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRl eCBBTS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCAxMGQ4NWNmZDkuLjQ2 OGY5YTBjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTE3LDYgKzEx Nyw5IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAogCQlub2RlLT5pc3NfU2Nh bkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJ CXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCQkv KgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFk eSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4K QEAgLTIxMyw2ICsyMTYsOSBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAq bm9kZSkKIAogCQlub2RlLT5pc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKIAorCQkvKiBQYXNzIGRv d24gYW55IHR1cGxlIGJvdW5kICovCisJCXNjYW5kZXNjLT50dXBsZXNfbmVlZGVkID0gbm9kZS0+ aXNzX1R1cGxlc05lZWRlZDsKKwogCQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNh bGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kCiAJCSAqIHBhc3MgdGhlIHNj YW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTk4OSw2ICs5OTUsNyBAQCBFeGVjSW5pdEluZGV4 U2NhbihJbmRleFNjYW4gKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCWluZGV4 c3RhdGUtPmlzc19SdW50aW1lS2V5c1JlYWR5ID0gZmFsc2U7CiAJaW5kZXhzdGF0ZS0+aXNzX1J1 bnRpbWVLZXlzID0gTlVMTDsKIAlpbmRleHN0YXRlLT5pc3NfTnVtUnVudGltZUtleXMgPSAwOwor CWluZGV4c3RhdGUtPmlzc19UdXBsZXNOZWVkZWQgPSAtMTsKIAogCS8qCiAJICogYnVpbGQgdGhl IGluZGV4IHNjYW4ga2V5cyBmcm9tIHRoZSBpbmRleCBxdWFsaWZpY2F0aW9uCkBAIC0xNzMzLDYg KzE3NDAsOSBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9k ZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7 CiAKKwkvKiBQYXNzIGRvd24gYW55IHR1cGxlIGJvdW5kICovCisJbm9kZS0+aXNzX1NjYW5EZXNj LT50dXBsZXNfbmVlZGVkID0gbm9kZS0+aXNzX1R1cGxlc05lZWRlZDsKKwogCS8qCiAJICogSWYg bm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFk IGFuZCBwYXNzCiAJICogdGhlIHNjYW5rZXlzIHRvIHRoZSBpbmRleCBBTS4KQEAgLTE3OTcsNiAr MTgwNyw5IEBAIEV4ZWNJbmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpu b2RlLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2Fu KTsKIAorCS8qIFBhc3MgZG93biBhbnkgdHVwbGUgYm91bmQgKi8KKwlub2RlLT5pc3NfU2NhbkRl c2MtPnR1cGxlc19uZWVkZWQgPSBub2RlLT5pc3NfVHVwbGVzTmVlZGVkOworCiAJLyoKIAkgKiBJ ZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhl YWQgYW5kIHBhc3MKIAkgKiB0aGUgc2NhbmtleXMgdG8gdGhlIGluZGV4IEFNLgotLSAKMi41My4w Cgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0005-Add-heapam-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v16-0005-Add-heapam-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehjb13 RnJvbSBjMTYwMmQxZGMzYzRlMmRjZDRhZmFkMTI0MDBlZDNjMjhkYjcxMzk2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNiAwNS8xN10g QWRkIGhlYXBhbSBpbmRleCBzY2FuIEkvTyBwcmVmZXRjaGluZy4KClRoaXMgY29tbWl0IGltcGxl bWVudHMgSS9PIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkKc2Nh bnMgdGhhdCByZXF1aXJlIGhlYXAgZmV0Y2hlcykuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkg dGhlIHJlY2VudAphZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRvIGJvdGggdGhlIHRh YmxlIEFNIGFuZCBpbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJm YWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVyIHRoYW4gb25lIHR1 cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBmcm9tCmluZGV4IHR1 cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBwYWdlLiAgVGhpcyBh bGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0YW5lb3VzbHkuICBH aXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcgb2YgaW5kZXggQU0g Y29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBjb25zaWRlciBhbGwg b2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNoaW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhlCmNvbnRyb2wgb2Yg dGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0 aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQg dGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNl cyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmljaWVudGx5IG1hbnkg aGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVhbSdzIHRhcmdldCBw cmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hp bmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0 aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzNXgKZmFzdGVyLgoKQW4g aW1wb3J0YW50IGdvYWwgb2YgdGhlIGFtZ2V0YmF0Y2ggZGVzaWduIGlzIHRvIGVuYWJsZSB0aGUg dGFibGUgQU0ncwpyZWFkIHN0cmVhbSBjYWxsYmFjayB0byBhZHZhbmNlIGl0cyBwcmVmZXRjaCBw b3NpdGlvbiB1c2luZyBUSURzIHRoYXQKYXBwZWFyIG9uIGEgbGVhZiBwYWdlIHRoYXQncyBhaGVh ZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgbGVhZgpwYWdlLiAgVGhpcyBpcyBjcnVj aWFsIHdpdGggc2NhbnMgb2YgaW5kZXhlcyB3aGVyZSBlYWNoIGxlYWYgcGFnZQpoYXBwZW5zIHRv IGhhdmUgcmVsYXRpdmVseSBmZXcgZGlzdGluY3QgaGVhcCBibG9ja3MgYW1vbmcgaXRzIG1hdGNo aW5nClRJRHMgKGFzIHdlbGwgYXMgd2l0aCBzY2FucyB3aXRoIGxlYWYgcGFnZXMgdGhhdCBoYXZl IHJlbGF0aXZlbHkgZmV3CnRvdGFsIG1hdGNoaW5nIGl0ZW1zKS4gIEluZGV4IHNjYW5zIGNhbiBo YXZlIGFzIG1hbnkgYXMgNjQgb3BlbiBiYXRjaGVzLAp3aGljaCB0ZXN0aW5nIGhhcyBzaG93biB0 byBiZSBhYm91dCB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gZXZlciBiZQp1c2VmdWwuICBC YXRjaGVzIGFyZSBtYWludGFpbmVkIGluIHNjYW4gb3JkZXIgdXNpbmcgYSBzaW1wbGUgcmluZyBi dWZmZXIKZGF0YSBzdHJ1Y3R1cmUuCgpJbiByYXJlIGNhc2VzIHdoZXJlIHRoZSBzY2FuIGV4Y2Vl ZHMgdGhpcyBxdWFzaS1hcmJpdHJhcnkgbGltaXQgb2YgNjQsCnRoZSByZWFkIHN0cmVhbSBpcyB0 ZW1wb3JhcmlseSBwYXVzZWQgdXNpbmcgdGhlIHJlYWQgc3RyZWFtIHBhdXNpbmcKbWVjaGFuaXNt IGFkZGVkIGJ5IGNvbW1pdCAzODIyOWNiOS4gIFByZWZldGNoaW5nICh2aWEgdGhlIHJlYWQgc3Ry ZWFtKQppcyByZXN1bWVkIG9ubHkgYWZ0ZXIgdGhlIHNjYW4gcG9zaXRpb24gYWR2YW5jZXMgYmV5 b25kIGl0cyBjdXJyZW50IG9wZW4KYmF0Y2ggYW5kIHRoZW4gZnJlZXMgYW5kIHJlbW92ZXMgdGhl IGJhdGNoIGZyb20gdGhlIHNjYW4ncyBiYXRjaCByaW5nCmJ1ZmZlci4gIFRlc3RpbmcgaGFzIHNo b3duIHRoYXQgaXQgaXNuJ3QgdmVyeSBjb21tb24gZm9yIHNjYW5zIHRvIGhvbGQKb3BlbiBtb3Jl IHRoYW4gYWJvdXQgMTAgYmF0Y2hlcyB0byBnZXQgdGhlIGRlc2lyZWQgSS9PIHByZWZldGNoCmRp c3RhbmNlLgoKVGhlIGhldXJpc3RpYyB1c2VkIHRvIGRlY2lkZSB3aGVuIHRvIGJlZ2luIHByZWZl dGNoaW5nIC0tIGRlbGF5aW5nIHVudGlsCnRoZSBzY2FuJ3Mgc2Vjb25kIGJhdGNoIC0tIGlzIGlt cGVyZmVjdC4gIFNlbGVjdGl2ZSBpbmRleCBzY2FucyB0aGF0CmFjY2VzcyByYW5kb21seS1vcmRl cmVkIGhlYXAgcGFnZXMgd2lsbCBiZW5lZml0IGZyb20gcHJlZmV0Y2hpbmcsIGJ1dAp3b24ndCBh Y3R1YWxseSByZWFjaCB0aGUgcG9pbnQgb2Ygc3RhcnRpbmcgcHJlZmV0Y2hpbmcgd2l0aCB0aGlz IGRlc2lnbi4KSXQgaXMgZGlmZmljdWx0IHRvIGlkZW50aWZ5IHN1Y2ggc2NhbnMgYWhlYWQgb2Yg dGltZS4gIEl0IGRlcGVuZHMgb24gdGhlCnBoeXNpY2FsIG9yZGVyaW5nIG9mIHRoZSBoZWFwIHJl bGF0aXZlIHRvIHRoZSBpbmRleCwgdGhlIHNjYW4ncwpzZWxlY3Rpdml0eSwgYW5kIHdoZXRoZXIg YW4gaW5kZXgtb25seSBzY2FuIHdpbGwgYWN0dWFsbHkgbmVlZCBoZWFwCmZldGNoZXMgLS0gYWxs IG9mIHdoaWNoIGFyZSB1bmNlcnRhaW4gZWFybGllciBpbiB0aGUgc2Nhbi4gIEFkZGluZyBhCnNt YXJ0ZXIgaGV1cmlzdGljIHJlbWFpbnMgYXMgd29yayBmb3IgYSBmdXR1cmUgcmVsZWFzZS4KCkF1 dGhvcjogVG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hl Z2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJh emVsLmRlPgpSZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29t PgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4 LTUwMDBiODk0ZWJhYkBlbnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oICAgICAgICAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmggICAgICAgICAgICAgICAgICB8ICAzNSArKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMgICAgICB8IDM3MCArKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAgICB8ICA0OSArKy0KIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAxICsKIGRvYy9zcmMvc2dtbC9jb25m aWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAxNiArCiBkb2Mvc3JjL3NnbWwvaW5kZXhh bS5zZ21sICAgICAgICAgICAgICAgICAgICAgfCAgNjYgKysrLQogZG9jL3NyYy9zZ21sL3RhYmxl YW0uc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogMTIgZmlsZXMgY2hhbmdlZCwgNTYw IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDU1Yzkw NjlkNi4uOWZmMzJmNDdhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMzQsNiArMTM0LDE4IEBAIHR5 cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAj IGl0ZW1zIHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCWJvb2wJCXhzX2xhc3Rp bmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCiAK KwkvKgorCSAqIFRoZSByZWFkIHN0cmVhbSBpcyBhbGxvY2F0ZWQgYXQgdGhlIGJlZ2lubmluZyBv ZiB0aGUgc2NhbiBhbmQgcmVzZXQgb24KKwkgKiByZXNjYW4gb3Igd2hlbiB0aGUgc2NhbiBkaXJl Y3Rpb24gY2hhbmdlcy4gVGhlIHNjYW4gZGlyZWN0aW9uIGlzIHNhdmVkCisJICogZWFjaCB0aW1l IGEgbmV3IHR1cGxlIGlzIHJlcXVlc3RlZC4gSWYgdGhlIHNjYW4gZGlyZWN0aW9uIGNoYW5nZXMg ZnJvbQorCSAqIG9uZSB0dXBsZSB0byB0aGUgbmV4dCwgdGhlIHJlYWQgc3RyZWFtIHJlbGVhc2Vz IGFsbCBwcmV2aW91c2x5IHBpbm5lZAorCSAqIGJ1ZmZlcnMgYW5kIHJlc2V0cyB0aGUgcHJlZmV0 Y2ggYmxvY2suCisJICovCisJYm9vbAkJeHNfcGF1c2VkOwkJLyogcGF1c2VkIHVudGlsIG5leHQg YmF0Y2ggaXMgcmVhZD8gKi8KKwlTY2FuRGlyZWN0aW9uIHhzX3JlYWRfc3RyZWFtX2RpcjsJLyog aW5kZXggc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciB4c19wcmVmZXRjaF9ibG9jazsJ LyogbGFzdCBibG9jayByZXR1cm5lZCB0byB4c19yZWFkX3N0cmVhbSAqLworCVJlYWRTdHJlYW0g KnhzX3JlYWRfc3RyZWFtOyAvKiBpbmRleCBJL08gcHJlZmV0Y2hpbmcgcmVhZCBzdHJlYW0gKi8K KwogfSBJbmRleEZldGNoSGVhcERhdGE7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCAxMzM3 MGIxYzkuLjNlYjQxZTcwNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xOTUsNiArMTk1LDEwIEBA IHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dzIHRhYmxl IEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1lCiAJ ICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0aW9u YWwgaW5kZXggcGFnZXMgdG8KIAkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hp bmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICogSW4gcGFydGljdWxhciwg ZHVyaW5nIHByZWZldGNoaW5nIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3ZlcnMKKwkg KiB0aGUgZW5kLW9mLXNjYW4gdmlhIHByZWZldGNoQmF0Y2guICBUaGUgdGFibGUgQU0gY2hlY2tz IHRoZXNlIGZsYWdzIHNvCisJICogdGhhdCB0aGUgc2NhbiBzaWRlIGRvZXNuJ3QgcmVwZWF0IHRo ZSBzYW1lIGFtZ2V0YmF0Y2ggY2FsbCB3aGVuIGl0CisJICogbGF0ZXIgcmVhY2hlcyB0aGF0IGJh dGNoIGFzIHNjYW5CYXRjaC4KIAkgKi8KIAlib29sCQlrbm93bkVuZEJhY2t3YXJkOwogCWJvb2wJ CWtub3duRW5kRm9yd2FyZDsKQEAgLTI1MywxMiArMjU3LDIxIEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiAgKiBtYXRjaGVzIGluLiAgSG93ZXZl ciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBpbiB3aGF0ZXZlcgog ICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92aWRlZCB0aGF0IHN1 Y2ggcmVvcmRlcmluZyBjYW5ub3QKICAqIGFmZmVjdCB0aGUgb3JkZXIgdGhhdCB0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKgorICogVGhpcyBkYXRh IHN0cnVjdHVyZSBhbHNvIHByb3ZpZGVzIHRhYmxlIEFNcyB3aXRoIGEgd2F5IHRvIHJlYWQgYWhl YWQgb2YgdGhlCisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24gYnkgX211bHRpcGxlXyBiYXRjaGVz L2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0aGUgdGFibGUgQU0gcmVhZHMgYWhl YWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2VlIGludG8gdGhlIGZ1dHVyZS4KKyAq IFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJlb3JkZXIgd29yayBhcyBhZ2dyZXNz aXZlbHkgYXMgZGVzaXJlZC4KKyAqIEZvciBleGFtcGxlLCBpbmRleCBzY2FucyBzb21ldGltZXMg bmVlZCB0byByZWFkYWhlYWQgYnkgYXMgbWFueSBhcyBhIGZldworICogZG96ZW4gYW1nZXRiYXRj aCBiYXRjaGVzIGluIG9yZGVyIHRvIG1haW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoCisg KiBkaXN0YW5jZSAoZGlzdGFuY2UgZm9yIHJlYWRpbmcgdGFibGUgYmxvY2tzL2ZldGNoaW5nIHRh YmxlIHR1cGxlcykuCiAgKi8KIHR5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgogewogCS8q IGN1cnJlbnQgcG9zaXRpb25zIGluIGJhdGNoZXNbXSBmb3Igc2NhbiAqLwogCUJhdGNoUmluZ0l0 ZW1Qb3Mgc2NhblBvczsJLyogc2NhbidzIHJlYWQgcG9zaXRpb24gKi8KIAlCYXRjaFJpbmdJdGVt UG9zIG1hcmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0ZW1Q b3MgcHJlZmV0Y2hQb3M7CS8qIHByZWZldGNoaW5nIHBvc2l0aW9uICovCiAKIAlJbmRleFNjYW5C YXRjaCBtYXJrQmF0Y2g7CiAKQEAgLTQ2NSw2ICs0NzgsMjggQEAgaW5kZXhfc2Nhbl9iYXRjaF9h cHBlbmQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogCXJp bmdidWYtPm5leHRCYXRjaCsrOwogfQogCisvKgorICogQ29tcGFyZSB0d28gYmF0Y2ggcmluZyBw b3NpdGlvbnMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICoKKyAqIFJldHVybnMgbmVn YXRpdmUgaWYgcG9zMSBpcyBiZWhpbmQgcG9zMiwgMCBpZiBlcXVhbCwgcG9zaXRpdmUgaWYgcG9z MSBpcworICogYWhlYWQgb2YgcG9zMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2luZGV4X3Nj YW5fcG9zX2NtcChCYXRjaFJpbmdJdGVtUG9zICpwb3MxLCBCYXRjaFJpbmdJdGVtUG9zICpwb3My LAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCWludDgJCWJhdGNoZGlmZiA9 IChpbnQ4KSAocG9zMS0+YmF0Y2ggLSBwb3MyLT5iYXRjaCk7CisKKwlpZiAoYmF0Y2hkaWZmICE9 IDApCisJCXJldHVybiBiYXRjaGRpZmY7CisKKwkvKiBTYW1lIGJhdGNoLCBjb21wYXJlIGl0ZW1z ICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJcmV0dXJuIHBv czEtPml0ZW0gLSBwb3MyLT5pdGVtOworCWVsc2UKKwkJcmV0dXJuIHBvczItPml0ZW0gLSBwb3Mx LT5pdGVtOworfQorCiAvKgogICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGlu IHRoZSBiYXRjaC4KICAqCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5o IGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAppbmRleCBmMmZkNWQzMTUuLjQxOTMwMGE2 YiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaAorKysgYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvY29zdC5oCkBAIC01Miw2ICs1Miw3IEBAIGV4dGVybiBQR0RMTElNUE9S VCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcjsKIGV4dGVybiBQR0RMTElNUE9S VCBib29sIGVuYWJsZV9zZXFzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2lu ZGV4c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleG9ubHlzY2FuOwor ZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDsKIGV4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9iaXRtYXBzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JU IGJvb2wgZW5hYmxlX3RpZHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc29y dDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDFiNThkYjE5 OS4uMjhhMTQ0ZDFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK QEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgogI2luY2x1 ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJzdG9y YWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAtNjEsNiArNjIs OSBAQCBzdGF0aWMgQmxvY2tOdW1iZXIgaGVhcGFtX3NjYW5fZ2V0X2Jsb2Nrc19kb25lKEhlYXBT Y2FuRGVzYyBoc2Nhbik7CiBzdGF0aWMgYm9vbCBCaXRtYXBIZWFwU2Nhbk5leHRCbG9jayhUYWJs ZVNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQlib29sICpyZWNoZWNrLAogCQkJCQkJCQkJdWludDY0 ICpsb3NzeV9wYWdlcywgdWludDY0ICpleGFjdF9wYWdlcyk7CitzdGF0aWMgQmxvY2tOdW1iZXIg aGVhcGFtX2dldG5leHRfc3RyZWFtKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkgdm9p ZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJCSB2b2lkICpwZXJfYnVmZmVyX2Rh dGEpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTAyLDYgKzEwNiwxNyBAQCBoZWFwYW1f aW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAkvKiBSZXNjYW5z IHNob3VsZCBhdm9pZCBhbiBleGNlc3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KIAloc2Nh bi0+eHNfdm1faXRlbXMgPSAxOwogCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gZGlyZWN0aW9uIHVu Y29uZGl0aW9uYWxseSAqLworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBOb01vdmVtZW50 U2NhbkRpcmVjdGlvbjsKKworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIGl0c2VsZiwgYW5kIG90aGVy IGFzc29jaWF0ZWQgc3RhdGUgKi8KKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKQorCXsKKwkJ aHNjYW4tPnhzX3ByZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQloc2Nhbi0+ eHNfcGF1c2VkID0gZmFsc2U7CisJCXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0 cmVhbSk7CisJfQorCiAJLyoKIAkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgcGlucyBu b3cgaGVsZCBpbiB4c19jYnVmIGFuZCB4c192bWJ1ZmZlci4KIAkgKiBUaGlzIHNhdmVzIGN5Y2xl cyBkdXJpbmcgY2VydGFpbiB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucywgYW5kIGR1cmluZwpAQCAt MTIzLDYgKzEzOCw5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2NhbikKIAlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQogCQlSZWxl YXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7CiAKKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtKQorCQlyZWFkX3N0cmVhbV9lbmQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwogCXBmcmVl KGhzY2FuKTsKIH0KIApAQCAtMTkyLDcgKzIxMCwxNCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCWlmIChCdWZmZXJJc1ZhbGlk KGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCi0J CWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54 c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVhZCBzdHJlYW0sIHRoZSBzdHJlYW0g d2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICogbnVtYmVyIGNvbWVzIG5leHQgKHRo b3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRjaCBiZWxvdykKKwkJICovCisJCWlm IChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+eHNfY2J1ZiA9IHJlYWRfc3RyZWFt X25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwgTlVMTCk7CisJCWVsc2UKKwkJCWhz Y2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19i bGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBm aXJzdCB0aW1lCkBAIC0yNzcsNiArMzAyLDMwIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShz dHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKICAqIChpbXBvcnRhbnQgZm9yIGlubmVy IGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWktam9pbnMpLCBhbmQgdGhlCiAgKiBu ZWVkIHRvIG5vdCBob2xkIG9udG8gaW5kZXggbGVhZiBwYWdlcyBmb3IgdG9vIGxvbmcuCiAgKgor ICogRHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFybHkKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCB0aGUgc2NhbiBiZSBhbGxvd2VkIHRv IGhvbGQgb250byBtb3JlIHRoYW4gb25lIGJhdGNoJ3MKKyAqIGxlYWYgcGFnZSBwaW4gYXQgYSB0 aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHJlc3RyaWN0aW9uIGlzIHRvCisgKiBh dm9pZCB1bmludGVuZGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZWFkIHN0cmVhbSwgd2hpY2gg aGFzIGl0cyBvd24KKyAqIHN0cmF0ZWd5IGZvciBrZWVwaW5nIHRoZSBudW1iZXIgb2YgcGlucyBo ZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNvbnRyb2wuCisgKgorICogT25jZSB3ZSd2ZSByZXNv bHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseSBk cm9wCisgKiBpdHMgbGVhZiBwYWdlIHBpbi4gIFRoaXMgaXMgc2FmZSB3aXRoIHJlc3BlY3QgdG8g Y29uY3VycmVudCBWQUNVVU0gYmVjYXVzZQorICogaW5kZXggdmFjdXVtaW5nIHdpbGwgYmxvY2sg b24gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2NrIG9uIHRoZQorICogYmF0Y2gn cyBpbmRleCBwYWdlIGR1ZSB0byBvdXIgaG9sZGluZyBhIHBpbiBvbiB0aGF0IHNhbWUgcGFnZS4g IENvcHlpbmcgdGhlCisgKiByZWxldmFudCB2aXNpYmlsaXR5IG1hcCBkYXRhIGludG8gb3VyIGxv Y2FsIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5zYWZlCisgKiBjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmc6IGlmIGFueSBvZiB0aGVzZSBUSURzIHBvaW50IHRvIGRlYWQgaGVhcCB0dXBsZXMs CisgKiBWQUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9tIGFtYnVsa2RlbGV0ZSBhbmQg bWFyayB0aGUgcG9pbnRlZC10bworICogaGVhcCBwYWdlcyBhcyBhbGwtdmlzaWJsZS4gIFZBQ1VV TSBfY2FuXyBkbyBzbyBvbmNlIHdlIHJlbGVhc2UgdGhlIGJhdGNoJ3MKKyAqIHBpbiwgYnV0IHRo YXQncyBva2F5OyB3ZSdsbCBiZSB3b3JraW5nIG9mZiBvZiBjYWNoZWQgdmlzaWJpbGl0eSBpbmZv IHRoYXQKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBkZWFkIFRJRHMgYXJlIE5PVCBhbGwtdmlzaWJs ZS4KKyAqCisgKiBOb3RlOiBXZSBjYW5ub3QgZHJvcCB0aGUgcGluIGVhcmx5IHdoZW4gdGhlIHNj YW4gdXNlcyBhIG5vbi1NVkNDIHNuYXBzaG90OworICogd2UgbXVzdCBkZWxheSBpdCB1bnRpbCBh bGwgaGVhcCBmZXRjaGVzIGZvciB0aGUgbG9hZGVkIGJhdGNoIGhhdmUgdGFrZW4KKyAqIHBsYWNl LiAgVGhpcyBpcyB3aHkgd2UgZG9uJ3Qgc3VwcG9ydCBwcmVmZXRjaGluZyBkdXJpbmcgc3VjaCBz Y2Fucy4gIFNlZQorICogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbC4KKyAqCiAgKiBOb3RlIG9u IE1lbW9yeSBPcmRlcmluZyBFZmZlY3RzCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKgpAQCAtNDkzLDExICs1NDIsMTMgQEAgc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgSW5k ZXhTY2FuQmF0Y2gKIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBC YXRjaFJpbmdJdGVtUG9zICpwb3MpCiB7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJ bmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCUluZGV4U2NhbkJhdGNo IGJhdGNoID0gTlVMTDsKIAlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiBQR19VU0VEX0ZP Ul9BU1NFUlRTX09OTFkgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOwogCiAJLyogWFhYOiB3ZSBzaG91 bGQgYXNzZXJ0IHRoYXQgYSBzbmFwc2hvdCBpcyBwdXNoZWQgb3IgcmVnaXN0ZXJlZCAqLwogCUFz c2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRYbWluKSk7CisJQXNzZXJ0KGRpcmVjdGlv biA9PSBoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyKTsKIAogCWlmICghcHJpb3JCYXRjaCkKIAl7 CkBAIC01NTgsNiArNjA5LDM1IEBAIGhlYXBhbV9iYXRjaF9nZXRuZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAKIAkJLyogQXBwZW5kIGJhdGNoIHRvIHRo ZSBlbmQgb2YgcmluZyBidWZmZXIvd3JpdGUgaXQgdG8gYnVmZmVyIGluZGV4ICovCiAJCWluZGV4 X3NjYW5fYmF0Y2hfYXBwZW5kKHNjYW4sIGJhdGNoKTsKKworCQkvKgorCQkgKiBEZWxheSBpbml0 aWFsaXppbmcgc3RyZWFtIHVudGlsIHJlYWRpbmcgZnJvbSBzY2FuJ3Mgc2Vjb25kIGJhdGNoLgor CQkgKiBUaGlzIGhldXJpc3RpYyBhdm9pZHMgd2FzdGluZyBjeWNsZXMgb24gc3RhcnRpbmcgYSBy ZWFkIHN0cmVhbSBmb3IKKwkJICogdmVyeSBzZWxlY3RpdmUgaW5kZXggc2NhbnMuICBXZSBjYW4g bGlrZWx5IGltcHJvdmUgdXBvbiB0aGlzLCBidXQKKwkJICogaXQgd29ya3Mgd2VsbCBlbm91Z2gg Zm9yIG5vdy4KKwkJICoKKwkJICogQWxzbyBhdm9pZCBwcmVmZXRjaGluZyBkdXJpbmcgc2NhbnMg d2hlcmUgd2UncmUgdW5hYmxlIHRvIGRyb3AgZWFjaAorCQkgKiBiYXRjaCdzIGJ1ZmZlciBwaW4g cmlnaHQgYXdheSAobm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMpLiAgV2UgYXJlCisJCSAqIG5vdCBw cmVwYXJlZCB0byBzZW5zaWJseSBsaW1pdCB0aGUgdG90YWwgbnVtYmVyIG9mIGJ1ZmZlciBwaW5z IGhlbGQKKwkJICogKHJlYWQgc3RyZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNvdXJjZSBtYW5hZ2Vt ZW50IGZvciB1cywgYW5kIGtub3dzCisJCSAqIG5vdGhpbmcgYWJvdXQgcGlucyBoZWxkIG9uIGlu ZGV4IHBhZ2VzL3dpdGhpbiBiYXRjaGVzKS4KKwkJICoKKwkJICogQWxzbyBkZWxheSBjcmVhdGlu ZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQKKwkJICogaGF2ZW4n dCBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9uJ3Qgd2FudCB0byB3YXN0ZSBhbnkK KwkJICogY3ljbGVzIG9uIGFsbG9jYXRpbmcgYSByZWFkIHN0cmVhbSB1bnRpbCB3ZSBoYXZlIGEg ZGVtb25zdHJhdGVkCisJCSAqIG5lZWQgZm9yIHBlcmZvcm0gaGVhcCBmZXRjaGVzLgorCQkgKi8K KwkJaWYgKCFoc2Nhbi0+eHNfcmVhZF9zdHJlYW0gJiYgcHJpb3JCYXRjaCAmJiBzY2FuLT5NVkND U2NhbiAmJgorCQkJaHNjYW4tPnhzX2JsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIgJiYJLyogZm9y IGluZGV4LW9ubHkgc2NhbnMgKi8KKwkJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gpCisJCXsK KwkJCUFzc2VydCghYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCk7CisKKwkJCWhzY2Fu LT54c19yZWFkX3N0cmVhbSA9CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9T VFJFQU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24sIE1B SU5fRk9SS05VTSwKKwkJCQkJCQkJCQkgICBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0sIHNjYW4sIDAp OworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC01ODIsNiArNjYyLDMyIEBAIGhlYXBhbV9iYXRjaF9n ZXRuZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJcmV0 dXJuIGJhdGNoOwogfQogCisvKgorICogSGFuZGxlIGEgY2hhbmdlIGluIGluZGV4IHNjYW4gZGly ZWN0aW9uIChhdCB0aGUgdHVwbGUgZ3JhbnVsYXJpdHkpLgorICoKKyAqIFJlc2V0cyB0aGUgcmVh ZCBzdHJlYW0sIHNpbmNlIHdlIGNhbid0IHJlbHkgb24gc2NhblBvcyBjb250aW51aW5nIHRvIGFn cmVlCisgKiB3aXRoIHRoZSBibG9ja3MgdGhhdCByZWFkIHN0cmVhbSBhbHJlYWR5IGNvbnN1bWVk IHVzaW5nIHByZWZldGNoUG9zLgorICoKKyAqIE5vdGU6IGlmZiB0aGUgc2NhbiBfY29udGludWVz XyBpbiB0aGlzIG5ldyBkaXJlY3Rpb24sIGFuZCBhY3R1YWxseSBzdGVwcworICogb2ZmIHNjYW5C YXRjaCB0byBhbiBlYXJsaWVyIGluZGV4IHBhZ2UsIGhlYXBhbV9iYXRjaF9nZXRuZXh0IHdpbGwg ZGVhbCB3aXRoCisgKiBpdC4gIEJ1dCB0aGF0IG1pZ2h0IG5ldmVyIGhhcHBlbjsgdGhlIHNjYW4g bWlnaHQgeWV0IGNoYW5nZSBkaXJlY3Rpb24gYWdhaW4KKyAqIChvciBqdXN0IGVuZCBiZWZvcmUg cmV0dXJuaW5nIG1vcmUgaXRlbXMpLgorICovCitzdGF0aWMgcGdfbm9pbmxpbmUgdm9pZAoraGVh cGFtX2RpcmNoYW5nZV9yZWFkc3RyZWFtX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4s CisJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCSAgQmF0Y2hSaW5n QnVmZmVyICpiYXRjaHJpbmdidWYpCit7CisJLyogUmVzZXQgcmVhZCBzdHJlYW0gc3RhdGUgKi8K KwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisJaHNjYW4tPnhzX3Bh dXNlZCA9IGZhbHNlOworCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBkaXJlY3Rpb247CisK KwkvKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYgKi8KKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtKQorCQlyZWFkX3N0cmVhbV9yZXNldChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworfQorCiAv KiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIC0gZ2V0IG5l eHQgVElEIGZyb20gYmF0Y2ggcmluZyBidWZmZXIKICAqCkBAIC02MDEsNiArNzA3LDEyIEBAIGhl YXBhbV9iYXRjaF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4sCiAJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkIHx8IGluZGV4X3NjYW5fYmF0Y2hf Y291bnQoc2NhbikgPT0gMCk7CiAJQXNzZXJ0KGFsbF92aXNpYmxlID09IE5VTEwgfHwgc2Nhbi0+ eHNfd2FudF9pdHVwKTsKIAorCS8qIEhhbmRsZSByZXNldHRpbmcgdGhlIHJlYWQgc3RyZWFtIHdo ZW4gc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW1f ZGlyID09IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKQorCQloc2Nhbi0+eHNfcmVhZF9zdHJlYW1f ZGlyID0gZGlyZWN0aW9uOwkvKiBmaXJzdCBjYWxsICovCisJZWxzZSBpZiAodW5saWtlbHkoaHNj YW4tPnhzX3JlYWRfc3RyZWFtX2RpciAhPSBkaXJlY3Rpb24pKQorCQloZWFwYW1fZGlyY2hhbmdl X3JlYWRzdHJlYW1fcmVzZXQoaHNjYW4sIGRpcmVjdGlvbiwgYmF0Y2hyaW5nYnVmKTsKKwogCS8q CiAJICogQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBsb2FkZWQgc2NhbkJhdGNoIGZvciB1 cyB0byByZXR1cm4gdGhlIG5leHQKIAkgKiBtYXRjaGluZyBpdGVtJ3MgVElEL2luZGV4IHR1cGxl IGZyb20KQEAgLTYwOSw3ICs3MjEsNyBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCXsKIAkJLyoKIAkJICog c2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFkeSBiZSBsb2FkZWQgaW4g YmF0Y2ggcmluZwotCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQgaGVyZS4KKwkJICogYnVm ZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUgKGNhbid0IGRvIHRoaXMgd2l0aCBwcmVmZXRjaEJh dGNoKS4KIAkJICovCiAJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBzY2FuUG9z LT5iYXRjaCk7CiAKQEAgLTY1NCwyMSArNzY2LDI3NSBAQCBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90 aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCXsKIAkJ SW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAogCQkJCQkJ CQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQmF0Y2hSaW5nSXRlbVBvcyAqcHJl ZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsKIAogCQkvKiBmcmVlIG9ic29s ZXNjZW50IGhlYWQgYmF0Y2ggKHVubGVzcyBpdCBpcyBzY2FuJ3MgbWFya0JhdGNoKSAqLwogCQl0 YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBoZWFkQmF0Y2gpOwogCisJCS8qCisJCSAqIElm IHdlJ3JlIGFib3V0IHRvIHJlbGVhc2UgdGhlIGJhdGNoIHRoYXQgcHJlZmV0Y2hQb3MgY3VycmVu dGx5CisJCSAqIHBvaW50cyB0bywganVzdCBpbnZhbGlkYXRlIHByZWZldGNoUG9zLiAgV2UnbGwg cmVpbml0aWFsaXplIGl0CisJCSAqIHVzaW5nIHNjYW5Qb3MgaWYgYW5kIHdoZW4gaGVhcGFtX2dl dG5leHRfc3RyZWFtIGlzIG5leHQgY2FsbGVkLiAoV2UKKwkJICogbXVzdCBhdm9pZCBjb25mdXNp bmcgYSBwcmVmZXRjaFBvcy0+YmF0Y2ggdGhhdCdzIGFjdHVhbGx5IGJlZm9yZQorCQkgKiBoZWFk QmF0Y2ggd2l0aCBvbmUgdGhhdCdzIGFmdGVyIG5leHRCYXRjaCBkdWUgdG8gdWludDggb3ZlcmZs b3c7CisJCSAqIHNpbXBsZXN0IHdheSBpcyB0byBpbnZhbGlkYXRlIHByZWZldGNoUG9zIGxpa2Ug dGhpcy4pCisJCSAqLworCQlpZiAocHJlZmV0Y2hQb3MtPnZhbGlkICYmCisJCQlwcmVmZXRjaFBv cy0+YmF0Y2ggPT0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpCisJCQlwcmVmZXRjaFBvcy0+dmFs aWQgPSBmYWxzZTsKKwogCQkvKiBSZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVy ICovCiAJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKys7CisKKwkJaWYgKGhzY2FuLT54c19wYXVz ZWQpCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgc2NhbidzIHJlYWQgc3RyZWFtIHdhcyBwYXVzZWQg YnkgaGVhcGFtX2dldG5leHRfc3RyZWFtIGR1ZQorCQkJICogdG8gZXhoYXVzdGluZyBhbGwgYXZh aWxhYmxlIGZyZWUgYmF0Y2ggc2xvdHMuICBXZSBqdXN0IGZyZWVkIHVwCisJCQkgKiBvbmUgc3Vj aCBzbG90IG5vdywgdGhvdWdoLiAgUmVzdW1lIHRoZSByZWFkIHN0cmVhbSB0byByZS1lbmFibGUK KwkJCSAqIHByZWZldGNoaW5nLgorCQkJICovCisJCQlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hf ZnVsbChzY2FuKSk7CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFt KTsKKwkJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0 aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2gg Ki8KIAlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwor CUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CiAKIAlyZXR1cm4gaGVhcGFtX2JhdGNoX3JldHVy bl90aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zLAogCQkJCQkJ CQkgICBhbGxfdmlzaWJsZSk7CiB9CiAKKy8qCisgKiBoZWFwYW1fZ2V0bmV4dF9zdHJlYW0KKyAq CQlyZXR1cm4gdGhlIG5leHQgYmxvY2sgdG8gcGFzcyB0byB0aGUgcmVhZCBzdHJlYW0KKyAqCisg KiBUaGUgaW5pdGlhbCBiYXRjaCBpcyBhbHdheXMgbG9hZGVkIGJ5IGhlYXBhbV9iYXRjaF9nZXRu ZXh0X3RpZC4gIFdlIGRvbid0CisgKiBnZXQgY2FsbGVkIHVudGlsIHRoZSBmaXJzdCByZWFkX3N0 cmVhbV9uZXh0X2J1ZmZlcigpIGNhbGwsIHdoZW4gYSBoZWFwCisgKiBibG9jayBpcyByZXF1ZXN0 ZWQgZnJvbSB0aGUgc2NhbidzIHN0cmVhbSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgKgorICogVGhl IHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4gcHJlZmV0Y2hQb3MuICBJ dCBpcyB0eXBpY2FsIGZvcgorICogcHJlZmV0Y2hQb3MgdG8gY29uc2lzdGVudGx5IHN0YXkgYWhl YWQgb2YgdGhlIHNjYW5Qb3MgcG9zaXRpb24gdGhhdCdzIHVzZWQgdG8KKyAqIHRyYWNrIHRoZSBu ZXh0IFRJRCB0byBiZSByZXR1cm5lZCB0byB0aGUgc2NhbiBieSBoZWFwYW1fYmF0Y2hfZ2V0bmV4 dF90aWQKKyAqIGFmdGVyIHRoZSBmaXJzdCB0aW1lIHdlIGdldCBjYWxsZWQuICBIb3dldmVyLCB0 aGF0IGlzbid0IGEgcHJlY29uZGl0aW9uLgorICogVGhlcmUgaXMgYSBzdHJpY3QgcG9zdGNvbmRp dGlvbiwgdGhvdWdoOiB3aGVuIHdlIHJldHVybiB3ZSdsbCBhbHdheXMgbGVhdmUKKyAqIHNjYW5Q b3MgPD0gcHJlZmV0Y2hQb3MgKGV4Y2VwdCBpbiBjYXNlcyB3aGVyZSB3ZSByZXR1cm4gSW52YWxp ZEJsb2NrTnVtYmVyKS4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9z dHJlYW0oUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJ CQkJCSAgdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJ bmRleFNjYW5EZXNjKSBjYWxsYmFja19wcml2YXRlX2RhdGE7CisJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCUJh dGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRj aFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJmJhdGNocmluZ2J1Zi0+c2NhblBvczsKKwlCYXRjaFJp bmdJdGVtUG9zICpwcmVmZXRjaFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOworCVNj YW5EaXJlY3Rpb24geHNfcmVhZF9zdHJlYW1fZGlyID0gaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2Rp cjsKKwlJbmRleFNjYW5CYXRjaCBwcmVmZXRjaEJhdGNoOworCWJvb2wJCWZyb21TY2FuUG9zID0g ZmFsc2U7CisKKwkvKgorCSAqIHNjYW5Qb3MgbXVzdCBhbHdheXMgYmUgdmFsaWQgd2hlbiBwcmVm ZXRjaGluZyB0YWtlcyBwbGFjZS4gIFRoZXJlIGhhcworCSAqIHRvIGJlIGF0IGxlYXN0IG9uZSBi YXRjaCwgbG9hZGVkIGFzIG91ciBzY2FuQmF0Y2guICBUaGUgc2NhbiBkaXJlY3Rpb24KKwkgKiBt dXN0IGJlIGVzdGFibGlzaGVkLCB0b28uCisJICovCisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hf Y291bnQoc2NhbikgPiAwKTsKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCUFzc2VydChzY2Fu UG9zLT52YWxpZCk7CisJQXNzZXJ0KCFoc2Nhbi0+eHNfcGF1c2VkKTsKKwlBc3NlcnQoeHNfcmVh ZF9zdHJlYW1fZGlyICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKworCS8qCisJICogcHJl ZmV0Y2hQb3MgbWlnaHQgbm90IHlldCBiZSB2YWxpZC4gIEl0IG1pZ2h0IGhhdmUgYWxzbyBmYWxs ZW4gYmVoaW5kCisJICogc2NhblBvcy4gIERlYWwgd2l0aCBib3RoLgorCSAqCisJICogSWYgcHJl ZmV0Y2hQb3MgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIHlldCwgdGhhdCB0eXBpY2FsbHkgaW5k aWNhdGVzCisJICogdGhhdCB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRp cmUgc2Nhbi4gIFdlIGluaXRpYWxpemUKKwkgKiBwcmVmZXRjaFBvcyB1c2luZyB0aGUgY3VycmVu dCBzY2FuUG9zLCBzaW5jZSB0aGUgY3VycmVudCBzY2FuQmF0Y2gKKwkgKiBpdGVtJ3MgVElEIHNo b3VsZCBoYXZlIGl0cyBibG9jayBudW1iZXIgcmV0dXJuZWQgYnkgdGhlIHJlYWQgc3RyZWFtCisJ ICogZmlyc3QuICBJdCdzIGxpa2VseSB0aGF0IHByZWZldGNoUG9zIHdpbGwgZ2V0IGFoZWFkIG9m IHNjYW5Qb3MgYmVmb3JlCisJICogbG9uZywgYnV0IHRoYXQgaGFzbid0IGhhcHBlbmVkIHlldC4K KwkgKgorCSAqIEl0J3MgYWxzbyBwb3NzaWJsZSBmb3IgcHJlZmV0Y2hQb3MgdG8gImZhbGwgYmVo aW5kIiBzY2FuUG9zLCBhdCBsZWFzdAorCSAqIGluIGEgdHJpdmlhbCBzZW5zZTogaWYgbWFueSBh ZGphY2VudCBpdGVtcyBhcmUgcmV0dXJuZWQgdGhhdCBjb250YWluCisJICogVElEcyB0aGF0IHBv aW50IHRvIHRoZSBzYW1lIGhlYXAgYmxvY2ssIHNjYW5Qb3MgY2FuIGFjdHVhbGx5IG92ZXJ0YWtl CisJICogcHJlZmV0Y2hQb3MgKHByZWZldGNoUG9zIGNhbid0IGFkdmFuY2UgdW50aWwgdGhlIHNj YW4gYWN0dWFsbHkgY2FsbHMKKwkgKiByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcikuICBSZWluaXRp YWxpemluZyBmcm9tIHNjYW5Qb3MgaXMgZW5vdWdoIHRvCisJICogZW5zdXJlIHRoYXQgcHJlZmV0 Y2hQb3Mgc3RpbGwgZmV0Y2hlcyB0aGUgbmV4dCBoZWFwIGJsb2NrIHRoYXQgc2NhblBvcworCSAq IHdpbGwgcmVxdWlyZSAocHJlZmV0Y2hQb3MgY2FuIG5ldmVyIGZhbGwgYmVoaW5kICJieSBtb3Jl IHRoYW4gb25lIGdyb3VwCisJICogb2YgaXRlbXMgdGhhdCBhbGwgcG9pbnQgdG8gdGhlIHNhbWUg aGVhcCBibG9jayIsIHNvIHRoaXMgaXMgc2FmZSkuCisJICoKKwkgKiBOb3RlOiB3aGVuIGhlYXBh bV9iYXRjaF9nZXRuZXh0X3RpZCBmcmVlcyBhIGJhdGNoIHRoYXQgcHJlZmV0Y2hQb3MKKwkgKiBw b2ludHMgdG8sIGl0J2xsIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgZm9yIHVzLiAgVGhpcyByZW1v dmVzIGFueQorCSAqIGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5nIHNvIGZhciBi ZWhpbmQgc2NhblBvcy5iYXRjaCB0aGF0IGl0CisJICogd3JhcHMgYXJvdW5kIChhbmQgYXBwZWFy cyB0byBiZSBhaGVhZCBvZiBzY2FuUG9zIGluc3RlYWQgb2YgYmVoaW5kIGl0KS4KKwkgKi8KKwlp ZiAoIXByZWZldGNoUG9zLT52YWxpZCB8fAorCQlpbmRleF9zY2FuX3Bvc19jbXAocHJlZmV0Y2hQ b3MsIHNjYW5Qb3MsIHhzX3JlYWRfc3RyZWFtX2RpcikgPCAwKQorCXsKKwkJaHNjYW4tPnhzX3By ZWZldGNoX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQkqcHJlZmV0Y2hQb3MgPSAqc2Nh blBvczsKKwkJZnJvbVNjYW5Qb3MgPSB0cnVlOworCisJCS8qCisJCSAqIFdlIG11c3QgYXZvaWQg aG9sZGluZyBvbiB0byBhbnkgYmF0Y2gncyBidWZmZXIgcGluIGZvciBtb3JlIHRoYW4gYW4KKwkJ ICogaW5zdGFudCwgdG8gYXZvaWQgdW5kZXNpcmFibGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNj YW4ncyByZWFkCisJCSAqIHN0cmVhbS4gIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBzY2FucyBhbHdh eXMgZ2V0IHRoaXMgYmVoYXZpb3IKKwkJICogYXV0b21hdGljYWxseS4gIE90aGVyIHR5cGVzIG9m IHNjYW5zICh0aGVzZSBhcmUgYWxsIGluZGV4LW9ubHkKKwkJICogc2NhbnMgaW4gcHJhY3RpY2Up IGFyZSBtYWRlIHRvIGRyb3AgdGhlaXIgYnVmZmVyIHBpbiBlYWdlcmx5CisJCSAqIHRocm91Z2gg YSBwb2xpY3kgb2YgYWx3YXlzIGVhZ2VybHkgc2V0dGluZyBhbGwgdGhlIGJhdGNoIGl0ZW0ncwor CQkgKiB2aXNpYmlsaXR5IGluZm8gaW4gb25lIGdvLgorCQkgKi8KKwkJaWYgKHNjYW4tPnhzX3dh bnRfaXR1cCkKKwkJeworCQkJSGVhcEJhdGNoRGF0YSAqaGJhdGNoOworCisJCQkvKiBNYWtlIGhl YXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkgcmVsZWFzZSByZXNvdXJjZXMgZWFnZXJseSAq LworCQkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNiYXRjaDsKKworCQkJLyog TWFrZSBzdXJlIHRoYXQgdGhpcyBuZXcgcHJlZmV0Y2hCYXRjaCBoYXMgbm8gcmVzb3VyY2VzIGhl bGQgKi8KKwkJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNo UG9zLT5iYXRjaCk7CisJCQloYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0Y2hCYXRjaCwg c2Nhbik7CisKKwkJCS8qIFNldCB2aXNpYmlsaXR5IGluZm8gbm90IHNldCB0aHJvdWdoIHNjYW5C YXRjaCAqLworCQkJaGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFk X3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCXByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJ CQkJcHJlZmV0Y2hQb3MpOworCQl9CisJCWVsc2UKKwkJCUFzc2VydChzY2FuLT5iYXRjaEltbWVk aWF0ZVVuZ3VhcmQpOworCX0KKworCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNj YW4sIHByZWZldGNoUG9zLT5iYXRjaCk7CisJZm9yICg7OykKKwl7CisJCUJhdGNoTWF0Y2hpbmdJ dGVtICppdGVtOworCQlCbG9ja051bWJlciBwcmVmZXRjaF9ibG9jazsKKworCQkvKgorCQkgKiBX ZSBuZXZlciBjYWxsIGFtZ2V0YmF0Y2ggd2l0aG91dCBpbW1lZGlhdGVseSByZWxlYXNpbmcgdGhl IGJhdGNoJ3MKKwkJICogaW5kZXggQU0gcmVzb3VyY2VzICh3aGljaCByZXF1aXJlcyBzcGVjaWFs IGNhcmUgZHVyaW5nIGluZGV4LW9ubHkKKwkJICogc2NhbnMpLiAgVGhlIHJlYWQgc3RyZWFtIGlz IHNlbnNpdGl2ZSB0byBidWZmZXIgc2hvcnRhZ2VzLCBzbyB3ZQorCQkgKiBkZWZlbnNpdmVseSBh dm9pZCBhbnl0aGluZyB0aGF0IHZpc2libHkgYWZmZWN0cyB0aGUgcGVyLWJhY2tlbmQKKwkJICog YnVmZmVyIGxpbWl0LgorCQkgKi8KKworCQlpZiAoZnJvbVNjYW5Qb3MpCisJCXsKKwkJCS8qCisJ CQkgKiBEb24ndCBpbmNyZW1lbnQgaXRlbSB3aGVuIHByZWZldGNoUG9zIHdhcyBqdXN0IGluaXRp YWxpemVkCisJCQkgKiB1c2luZyBzY2FuUG9zLiAgV2UnbGwgcmV0dXJuIHRoZSBzY2FuUG9zIGl0 ZW0ncyBoZWFwIGJsb2NrCisJCQkgKiBkaXJlY3RseSBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLiAg SW4gb3RoZXIgd29yZHMsIHdlJ2xsIHJldHVybgorCQkJICogdGhlIGhlYXAgYmxvY2sgZm9yIHRo ZSBUSUQgcGFzc2VkIHRvIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZQorCQkJICogYXQgdGhlIHBv aW50IHdoZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb3IgdGhlCisJCQkg KiBmaXJzdCB0aW1lIGR1cmluZyB0aGUgc2Nhbi4KKwkJCSAqLworCQkJZnJvbVNjYW5Qb3MgPSBm YWxzZTsKKwkJfQorCQllbHNlIGlmICghaW5kZXhfc2Nhbl9wb3NfYWR2YW5jZSh4c19yZWFkX3N0 cmVhbV9kaXIsCisJCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKSkKKwkJewor CQkJLyoKKwkJCSAqIFJhbiBvdXQgb2YgaXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRv IGFkdmFuY2UgdG8gdGhlCisJCQkgKiBzY2FuJ3MgbmV4dCBiYXRjaC4KKwkJCSAqLworCQkJaWYg KHVubGlrZWx5KGluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSkpCisJCQl7CisJCQkJLyoKKwkJ CQkgKiBDYW4ndCBhZHZhbmNlIHByZWZldGNoQmF0Y2ggYmVjYXVzZSBhbGwgYXZhaWxhYmxlCisJ CQkJICogYmF0Y2hyaW5nYnVmIGJhdGNoIHNsb3RzIGFyZSBjdXJyZW50bHkgaW4gdXNlLgorCQkJ CSAqCisJCQkJICogRGVhbCB3aXRoIHRoaXMgYnkgbW9tZW50YXJpbHkgcGF1c2luZyB0aGUgcmVh ZCBzdHJlYW0uCisJCQkJICogaGVhcGFtX2JhdGNoX2dldG5leHRfdGlkIHdpbGwgcmVzdW1lIHRo ZSByZWFkIHN0cmVhbSBsYXRlciwKKwkJCQkgKiB0aG91Z2ggb25seSBhZnRlciBzY2FuUG9zIGhh cyBjb25zdW1lZCBhbGwgcmVtYWluaW5nIGl0ZW1zCisJCQkJICogZnJvbSBzY2FuQmF0Y2ggKGF0 IHdoaWNoIHBvaW50IHNjYW5CYXRjaCB3aWxsIGJlIGZyZWVkLAorCQkJCSAqIG1ha2luZyBpdHMg c2xvdCBhdmFpbGFibGUgZm9yIHJldXNlIGJ5IGEgbGF0ZXIgYmF0Y2gpLgorCQkJCSAqCisJCQkJ ICogSW4gcHJhY3RpY2Ugd2UgaGFyZGx5IGV2ZXIgbmVlZCB0byBkbyB0aGlzLiAgSXQgd291bGQg YmUKKwkJCQkgKiBwb3NzaWJsZSB0byBhdm9pZCB0aGUgbmVlZCB0byBwYXVzZSB0aGUgcmVhZCBz dHJlYW0gYnkKKwkJCQkgKiBkeW5hbWljYWxseSBhbGxvY2F0aW5nIHNsb3RzLCBidXQgdGhhdCB3 b3VsZCBhZGQgY29tcGxleGl0eQorCQkJCSAqIGZvciBubyByZWFsIGJlbmVmaXQuCisJCQkJICov CisJCQkJaHNjYW4tPnhzX3BhdXNlZCA9IHRydWU7CisJCQkJcmV0dXJuIHJlYWRfc3RyZWFtX3Bh dXNlKHN0cmVhbSk7CisJCQl9CisKKwkJCXByZWZldGNoQmF0Y2ggPSBoZWFwYW1fYmF0Y2hfZ2V0 bmV4dChzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkgcHJlZmV0Y2hCYXRj aCwgcHJlZmV0Y2hQb3MpOworCQkJaWYgKCFwcmVmZXRjaEJhdGNoKQorCQkJeworCQkJCS8qCisJ CQkJICogRmFpbGVkIHRvIGxvYWQgbmV4dCBiYXRjaCwgc28gYWxsIHRoZSBiYXRjaGVzIHRoYXQg dGhlIHNjYW4KKwkJCQkgKiB3aWxsIGV2ZXIgcmVxdWlyZSAoYmFycmluZyBhIGNoYW5nZSBpbiBz Y2FuIGRpcmVjdGlvbikgYXJlCisJCQkJICogbm93IGxvYWRlZAorCQkJCSAqLworCQkJCXJldHVy biBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCQl9CisKKwkJCS8qIFBvc2l0aW9uIHByZWZldGNoUG9z IHRvIHRoZSBzdGFydCBvZiBuZXcgcHJlZmV0Y2hCYXRjaCAqLworCQkJaW5kZXhfc2Nhbl9wb3Nf bmV4dGJhdGNoKHhzX3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBw cmVmZXRjaFBvcyk7CisKKwkJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCQl7CisJCQkJSGVh cEJhdGNoRGF0YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKHByZWZldGNoQmF0Y2gsIHNjYW4p OworCisJCQkJLyogbWFrZSBzdXJlIHdlIGhhdmUgdmlzaWJpbGl0eSBpbmZvIGZvciB0aGUgZW50 aXJlIGJhdGNoICovCisJCQkJQXNzZXJ0KGhzY2FuLT54c192bV9pdGVtcyA9PSBzY2FuLT5tYXhp dGVtc2JhdGNoKTsKKwkJCQloZWFwYW1fYmF0Y2hfcmVzb2x2ZV92aXNpYmlsaXR5KHNjYW4sIHhz X3JlYWRfc3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJCXByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJ CQkJCQkJCQkJCXByZWZldGNoUG9zKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlBc3NlcnQoc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwkJfQorCisJCS8qCisJCSAqIHByZWZldGNoUG9zIG5v dyBwb2ludHMgdG8gdGhlIG5leHQgaXRlbSB3aG9zZSBUSUQncyBoZWFwIGJsb2NrCisJCSAqIG51 bWJlciBtaWdodCBuZWVkIHRvIGJlIHByZWZldGNoZWQKKwkJICovCisJCUFzc2VydChpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCkgPT0gcHJlZmV0Y2hCYXRjaCk7CisJ CUFzc2VydChwcmVmZXRjaFBvcy0+aXRlbSA+PSBwcmVmZXRjaEJhdGNoLT5maXJzdEl0ZW0gJiYK KwkJCSAgIHByZWZldGNoUG9zLT5pdGVtIDw9IHByZWZldGNoQmF0Y2gtPmxhc3RJdGVtKTsKKwkJ Lyogc2NhblBvcyBpcyBhbHdheXMgPD0gcHJlZmV0Y2hQb3Mgd2hlbiB3ZSByZXR1cm4gKi8KKwkJ QXNzZXJ0KGluZGV4X3NjYW5fcG9zX2NtcChzY2FuUG9zLCBwcmVmZXRjaFBvcywgeHNfcmVhZF9z dHJlYW1fZGlyKSA8PSAwKTsKKworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQl7CisJCQlI ZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0Y2hCYXRjaCwgc2Nh bik7CisKKwkJCUFzc2VydChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYgSEVB UF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCQlpZiAoaGJhdGNoLT52aXNJbmZvW3ByZWZldGNoUG9z LT5pdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFKQorCQkJeworCQkJCS8qIGl0ZW0g aXMga25vd24gdG8gYmUgYWxsLXZpc2libGUgLS0gZG9uJ3QgcHJlZmV0Y2ggKi8KKwkJCQljb250 aW51ZTsKKwkJCX0KKwkJfQorCisJCWl0ZW0gPSAmcHJlZmV0Y2hCYXRjaC0+aXRlbXNbcHJlZmV0 Y2hQb3MtPml0ZW1dOworCQlwcmVmZXRjaF9ibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIoJml0ZW0tPnRhYmxlVGlkKTsKKworCQlpZiAocHJlZmV0Y2hfYmxvY2sgPT0gaHNjYW4tPnhz X3ByZWZldGNoX2Jsb2NrKQorCQl7CisJCQkvKgorCQkJICogcHJlZmV0Y2hfYmxvY2sgbWF0Y2hl cyB0aGUgbGFzdCBwcmVmZXRjaFBvcyBpdGVtJ3MgVElEJ3MgaGVhcAorCQkJICogYmxvY2sgbnVt YmVyOyB3ZSBtdXN0IG5vdCByZXR1cm4gdGhlIHNhbWUgcHJlZmV0Y2hfYmxvY2sgdHdpY2UKKwkJ CSAqICh0d2ljZSBpbiBzdWNjZXNzaW9uKQorCQkJICovCisJCQljb250aW51ZTsKKwkJfQorCisJ CS8qIFdlIGhhdmUgYSBuZXcgaGVhcCBibG9jayBudW1iZXIgdG8gcmV0dXJuIHRvIHJlYWQgc3Ry ZWFtICovCisJCWhzY2FuLT54c19wcmVmZXRjaF9ibG9jayA9IHByZWZldGNoX2Jsb2NrOworCQly ZXR1cm4gcHJlZmV0Y2hfYmxvY2s7CisJfQorCisJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsK K30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWhlYXBhbV9pbmRleF9mZXRjaF9oZWFwIC0g Z2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGJhdGNoLmMKaW5kZXggNTk4MGI3YjljLi4wMDdmZDAzZGQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMTAsNyArMTAsMTAgQEAKICAqIGFwcHJvYWNoIGVuYWJs ZXMgZWZmaWNpZW50IHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJl ZAogICogaW5kZXggc2NhbnMuCiAgKgotICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMg aW4gaW5kZXgga2V5IHNwYWNlIG9yZGVyLgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNo ZXMgaW4gaW5kZXgga2V5IHNwYWNlIG9yZGVyLiAgVGhpcyBhbGxvd3MgdGhlCisgKiB0YWJsZSBB TSB0byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZTogaXRzIHJlYWQgc3Ry ZWFtCisgKiBjYWxsYmFjayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVxdWVzdCB0YWJsZSBibG9ja3Mg cmVmZXJlbmNlZCBieSBpbmRleCBwYWdlcworICogdGhhdCBhcmUgd2VsbCBhaGVhZCBvZiB0aGUg Y3VycmVudCBzY2FuIHBvc2l0aW9uJ3MgaW5kZXggcGFnZS4KICAqCiAgKiBUaGVyZSdzIHRocmVl IHR5cGVzIG9mIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZToKICAqCkBAIC0zMCw2ICszMywyNSBA QAogICogICAgQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIFRo ZXNlIG1hbmFnZSBiYXRjaAogICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBidWZmZXIgbG9j ayByZWxlYXNlLCBhbmQgYmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KICAqCisgKiBUaGVzZSB0aHJl ZSBsYXllcnMgY29vcmRpbmF0ZSB3aXRob3V0IGV4cGxpY2l0IGNvdXBsaW5nOiB0aGUgY29yZSBs aWZlY3ljbGUKKyAqIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0YWJsZSBBTXMgdXNlIHNjYW5Qb3Mv c2NhbkJhdGNoIGFuZCBwcmVmZXRjaFBvcy8KKyAqIHByZWZldGNoQmF0Y2ggaW4gYSBzdGFuZGFy ZGl6ZWQgd2F5IChzZWUgaGVhcGFtX2hhbmRsZXIuYyBmb3IgdGhlIHJlZmVyZW5jZQorICogaW1w bGVtZW50YXRpb24pLCB3aGlsZSB0YWJsZSBBTXMgYXNzdW1lIHRoYXQgaW5kZXggQU1zIGZyZWUg YW5kIHVubG9jaworICogYmF0Y2hlcyBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlbnRpb25zIGVzdGFi bGlzaGVkIGhlcmUuICBTZWUgaW5kZXhhbS5zZ21sCisgKiBmb3IgdGhlIGZ1bGwgc3BlY2lmaWNh dGlvbiBvZiB0aGlzIGNvbnRyYWN0LgorICoKKyAqIFRoZSB0YWJsZSBBTSBmdWxseSBjb250cm9s cyB0aGUgcmVhZCBzdHJlYW0gYXMgaXRzIG93biBwcml2YXRlIHN0YXRlLgorICogV2hlbiB0aGUg c2NhbiBkaXJlY3Rpb24gY2hhbmdlcywgdGhlIHRhYmxlIEFNIG11c3QgaW1tZWRpYXRlbHkgcmVz ZXQgaXRzCisgKiByZWFkIHN0cmVhbSBhbmQgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcyAtLSBibG9j a3MgYWxyZWFkeSByZXF1ZXN0ZWQgdmlhCisgKiBwcmVmZXRjaFBvcyB3aWxsIG5vIGxvbmdlciBt YXRjaCB3aGF0IHNjYW5Qb3MgbmVlZHMgdG8gcmV0dXJuLgorICoKKyAqIENyb3NzaW5nIGEgYmF0 Y2ggYm91bmRhcnkgaW4gYSBuZXcgc2NhbiBkaXJlY3Rpb24gaXMgYSBzZXBhcmF0ZSBwcm9jZXNz LAorICogaGFuZGxlZCBoZXJlOiB0YWJsZSBBTXMgYXJlIHJlcXVpcmVkIHRvIGNhbGwgdGFibGVh bV91dGlsX2JhdGNoX2RpcmNoYW5nZQorICogdG8gbGVhdmUgdGhlIHNjYW4ncyBiYXRjaCByaW5n IGJ1ZmZlciBpbiBhIGNvbnNpc3RlbnQgc3RhdGUuICBUaGUgY3VycmVudAorICogaW1wbGVtZW50 YXRpb24gaGFuZGxlcyB0aGlzIGJ5IHNpbXBseSBkaXNjYXJkaW5nIG1vc3QgYmF0Y2hlcy4gIFRo ZSBrZXkKKyAqIGludmFyaWFudCBpcyB0aGF0IGFsbCBsb2FkZWQgYmF0Y2hlcyBtdXN0IGJlIGlu IGEgY29uc2lzdGVudCBzY2FuIGRpcmVjdGlvbgorICogb3JkZXIuCisgKgogICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZl cnNpdHkgb2YgQ2FsaWZvcm5pYQogICoKQEAgLTYyLDYgKzg0LDcgQEAgaW5kZXhfYmF0Y2hzY2Fu X2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3Mu dmFsaWQgPSBmYWxzZTsKIAlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZhbHNl OworCXNjYW4tPmJhdGNocmluZ2J1Zi5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOwogCiAJc2Nh bi0+YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7CiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhl YWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgaGVhZCBiYXRjaCAqLwpAQCAtODMsNiArMTA2LDcgQEAg aW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCWJhdGNocmluZ2J1 Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOwogCWJhdGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9 IGZhbHNlOworCWJhdGNocmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAogCS8q CiAJICogRW5zdXJlIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIHdvbid0IHNraXAgdGhlIG9sZCBt YXJrQmF0Y2ggaW4gdGhlIGxvb3AKQEAgLTIxOSw3ICsyNDMsMTMgQEAgaW5kZXhfYmF0Y2hzY2Fu X21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKICAqIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3 aGVuIG5lZWRlZC4KICAqCiAgKiBXZSBqdXN0IGRpc2NhcmQgYWxsIGJhdGNoZXMgKG90aGVyIHRo YW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRjaCksCi0gKiBleGNlcHQgd2hlbiBtYXJrQmF0 Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJlbnQgc2NhbkJhdGNoLgorICogZXhjZXB0IHdo ZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4gIFdl IGFsd2F5cworICogaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4gIFRoZSByZWFkIHN0cmVhbSBhbmQg cmVsYXRlZCBwcmVmZXRjaGluZyBzdGF0ZSBhcmUKKyAqIHJlc2V0IGJ5IHRhYmxlX2luZGV4X2Zl dGNoX3Jlc2V0KCksIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbi4gIFRoaXMKKyAqIGFwcHJv YWNoIGtlZXBzIHRoaW5ncyBzaW1wbGUgZm9yIHRhYmxlIEFNczogbW9zdCBjb2RlIHRoYXQgZGVh bHMgd2l0aAorICogYmF0Y2hlcyBpcyB0aGVyZWJ5IGFibGUgdG8gYXNzdW1lIHRoYXQgdGhlIGNv bW1vbiBjYXNlIHdoZXJlIHNjYW4gZGlyZWN0aW9uCisgKiBuZXZlciBjaGFuZ2VzIGlzIHRoZSBv bmx5IGNhc2UgKHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UgdGFrZXMgYQorICogc2ltaWxh ciBhcHByb2FjaCB0byBoYW5kbGluZyBhIGNyb3NzLWJhdGNoIGNoYW5nZSBpbiBzY2FuIGRpcmVj dGlvbikuCiAgKi8KIHZvaWQKIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5E ZXNjIHNjYW4pCkBAIC0yMzQsNiArMjY0LDE0IEBAIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3Bv cyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAJQXNz ZXJ0KG1hcmtQb3MtPnZhbGlkKTsKIAorCS8qCisJICogUmVzdG9yaW5nIGEgbWFyayBhbHdheXMg cmVxdWlyZXMgc3RvcHBpbmcgcHJlZmV0Y2hpbmcuICBUaGlzIGlzIHNpbWlsYXIKKwkgKiB0byB0 aGUgaGFuZGxpbmcgdGFibGUgQU1zIGltcGxlbWVudCB0byBkZWFsIHdpdGggYSB0dXBsZS1sZXZl bCBjaGFuZ2UKKwkgKiBpbiB0aGUgc2NhbidzIGRpcmVjdGlvbi4gIFRoZSByZWFkIHN0cmVhbSBt dXN0IGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0CisJICogYnkgdGhlIGNhbGxlciAodmlhIHRhYmxl X2luZGV4X2ZldGNoX3Jlc2V0KS4KKwkgKi8KKwliYXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZh bGlkID0gZmFsc2U7CisKIAlpZiAoc2NhbkJhdGNoID09IG1hcmtCYXRjaCkKIAl7CiAJCS8qIG1h cmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsgbmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVm ICovCkBAIC0zMDMsNiArMzQxLDEzIEBAIGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCiAgKiBwb2ludCBvbiBiYXRjaHJpbmdidWYgd2lsbCBsb29rIGFzIGlm IG91ciBuZXcgc2NhbiBkaXJlY3Rpb24gaGFkIGJlZW4gdXNlZAogICogZnJvbSB0aGUgc3RhcnQu ICBUaGlzIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1dCBpdCB3b3Jr cwogICogd2VsbCBlbm91Z2ggZm9yIHdoYXQgb3VnaHQgdG8gYmUgYSByZWxhdGl2ZWx5IHJhcmUg b2NjdXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHJlc2V0IHRoZSBzY2FuJ3MgcmVh ZCBzdHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFRoYXQKKyAqIG5lZWRzIHRvIGhhcHBlbiBh cyBzb29uIGFzIHRoZSBzY2FuIHJlcXVlc3RzIGEgdHVwbGUgaW4gd2hhdGV2ZXIgc2NhbgorICog ZGlyZWN0aW9uIGlzIG9wcG9zaXRlLXRvLWN1cnJlbnQuICBXZSBvbmx5IGRlYWwgd2l0aCB0aGUg Y2FzZSB3aGVyZSB0aGUKKyAqIHNjYW4gYmFja3MgdXAgYnkgZW5vdWdoIGl0ZW1zIHRvIGNyb3Nz IGEgYmF0Y2ggYm91bmRhcnkgKHdoZW4gdGhlIHNjYW4KKyAqIHJlc3VtZXMgc2Nhbm5pbmcgaW4g aXRzIG9yaWdpbmFsIGRpcmVjdGlvbi9lbmRzIGJlZm9yZSBjcm9zc2luZyBhIGJvdW5kYXJ5LAor ICogdGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gY2FsbCBoZXJlKS4KICAqLwogdm9pZAogdGFibGVh bV91dGlsX2JhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYwppbmRleCA1NmQ0NTI4N2MuLmMyYjhhNDhjYyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNDYsNiArMTQ2LDcgQEAgaW50CQkJbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vxc2NhbiA9 IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRl eG9ubHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSB0cnVl OwogYm9vbAkJZW5hYmxlX2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4g PSB0cnVlOwogYm9vbAkJZW5hYmxlX3NvcnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAwYzk4NTRhZDguLjg4ZWE2ZGE3NCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTg5MSw2ICs4OTEsMTMgQEAK ICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5kZXhzY2Fu X3ByZWZldGNoJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3Jv dXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHBy ZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fucy4nLAorICBmbGFn cyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9wcmVm ZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxlX21h dGVyaWFsJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3JvdXAg PT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRoZSBw bGFubmVyXCdzIHVzZSBvZiBtYXRlcmlhbGl6YXRpb24uJywKICAgZmxhZ3MgPT4gJ0dVQ19FWFBM QUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25m LnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpp bmRleCBlNGFiZTZjMDAuLmYyZDc3MWYzNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDIwLDYgKzQyMCw3IEBACiAjZW5hYmxlX2luY3Jl bWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRleG9u bHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFibGVfbWF0 ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1vaXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0gb24K ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAppbmRleCA4Y2RkODI2ZmIuLmZiNDZhYzAwZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTcxMiw2 ICs1NzEyLDIyIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8 L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgog ICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxl LWluZGV4c2Nhbi1wcmVmZXRjaCIgeHJlZmxhYmVsPSJlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNo Ij4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zhcm5h bWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gY29uZmln dXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwv dGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBv ciBkaXNhYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbiBhbmQgaW5kZXgtb25seSBzY2Fu CisgICAgICAgIHBsYW4gdHlwZXMuICBQcmVmZXRjaGluZyBjYW4gaW1wcm92ZSBwZXJmb3JtYW5j ZSBieSByZWFkaW5nIHRhYmxlIEFNCisgICAgICAgIHBhZ2VzIGFoZWFkIG9mIHdoZW4gdGhleSBh cmUgbmVlZGVkIGR1cmluZyBpbmRleCBzY2Fucy4gIFRoZSBkZWZhdWx0CisgICAgICAgIGlzIDxs aXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgor ICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxl LW1hdGVyaWFsIiB4cmVmbGFiZWw9ImVuYWJsZV9tYXRlcmlhbCI+CiAgICAgICA8dGVybT48dmFy bmFtZT5lbmFibGVfbWF0ZXJpYWw8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKICAg ICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBlYWQwYmI3NmIuLjlkOWFlMTBkZCAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5k ZXhhbS5zZ21sCkBAIC04MDcsOSArODA3LDEyIEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mg c2NhbiwKICAgPHBhcmE+CiAgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBp bnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaW4gYmF0Y2hlcwot ICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcg aW5kZXggZW50cmllcyBmcm9tIGEKLSAgIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0aGUg dGFibGUgQU0gZ2FpbnMgdmlzaWJpbGl0eSBpbnRvIHdoaWNoIHRhYmxlCi0gICBibG9ja3Mgd2ls bCBiZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICAgcmF0aGVyIHRoYW4gb25lIGF0IGEg dGltZS4gVGhpcyBlbmFibGVzIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHRvCisgICBvcHRpbWl6 ZSB0YWJsZSBibG9jayBhY2Nlc3MgcGF0dGVybnMgYW5kIHBlcmZvcm0gSS9PIHByZWZldGNoaW5n LgorICAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYSBzaW5n bGUgaW5kZXggcGFnZSB0b2dldGhlciwKKyAgIHRoZSB0YWJsZSBBTSBjYW4gcmVhZGFoZWFkIHRo cm91Z2ggdGhlIGluZGV4IGFuZCBpZGVudGlmeSB3aGljaCB0YWJsZQorICAgYmxvY2tzIHdpbGwg YmUgbmVlZGVkLCBhbGxvd2luZyBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBwYWdlcyBkdXJpbmcK KyAgIG9yZGVyZWQgaW5kZXggc2NhbnMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEwMDQs NyArMTAwNyw4IEBAIGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBmcmVl IHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoZm9yIGV4YW1wbGUgd2hlbiA8ZnVuY3Rp b24+YW1yZXNjYW48L2Z1bmN0aW9uPgogICAgYW5kL29yIDxmdW5jdGlvbj5hbWVuZHNjYW48L2Z1 bmN0aW9uPiBhcmUgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZQogICAgbnVtYmVyIG9m IHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLCB0byBhdm9pZCBleGhhdXN0aW5nIHRoZSBi YWNrZW5kJ3MKLSAgIGJ1ZmZlciBwaW4gbGltaXQuCisgICBidWZmZXIgcGluIGxpbWl0ICh3aGlj aCBpcyBzaGFyZWQgd2l0aCB0aGUgdGFibGUgQU0ncyByZWFkIHN0cmVhbQorICAgZm9yIGluZGV4 IHNjYW4gcHJlZmV0Y2hpbmcpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xMzc5LDYgKzEz ODMsNjAgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3Bm YW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFs IGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8 L3BhcmE+CiAKKyAgPHNlY3QyIGlkPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIj4KKyAgIDx0aXRs ZT5UYWJsZSBBTSBDb25zaWRlcmF0aW9ucyBmb3IgQmF0Y2ggU2Nhbm5pbmc8L3RpdGxlPgorCisg ICA8cGFyYT4KKyAgICBUaGlzIHNlY3Rpb24gaXMgcHJpbWFyaWx5IHJlbGV2YW50IHRvCisgICAg PGxpbmsgbGlua2VuZD0idGFibGVhbSI+dGFibGUgYWNjZXNzIG1ldGhvZDwvbGluaz4gYXV0aG9y cy4KKyAgICBXaGVuIGFuIGluZGV4IHNjYW4gdXNlcyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UsCisgICAgdGhlIHRhYmxlIEFNIGlzIHJlc3BvbnNpYmxlIGZv ciBtYW5hZ2luZyBwb3NpdGlvbiBzdGF0ZSB3aXRoaW4gdGhlCisgICAgPHN0cnVjdG5hbWU+SW5k ZXhTY2FuRGVzYzwvc3RydWN0bmFtZT4ncworICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8 L3N0cnVjdGZpZWxkPiBhbmQgZm9yIGNvbnRyb2xsaW5nIHdoZW4KKyAgICBidWZmZXIgcGlucyBv biBpbmRleCBwYWdlcyBhcmUgcmVsZWFzZWQuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAg IFRoZSA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpdGhpbgorICAg IDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiB0cmFja3Mgd2hpY2ggYmF0 Y2ggYW5kIGl0ZW0gd2l0aGluCisgICAgdGhhdCBiYXRjaCB3aWxsIGJlIHJldHVybmVkIG5leHQg dG8gdGhlIGV4ZWN1dG9yLiAgVGhlIHRhYmxlIEFNIG11c3QgYWR2YW5jZQorICAgIDxzdHJ1Y3Rm aWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1cm5lZCBieQorICAg IDxmdW5jdGlvbj50YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9uPi4gIFRoZSBjb3Jl IGNvZGUgbWF5IGFsc28KKyAgICBtb2RpZnkgdGhpcyBmaWVsZCBkdXJpbmcgb3BlcmF0aW9ucyBz dWNoIGFzIG1hcmsvcmVzdG9yZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhlIDxz dHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRyYWNrcyB0aGUgcG9z aXRpb24gdXNlZAorICAgIGZvciBJL08gcHJlZmV0Y2hpbmcuICBJdCBpcyBnZW5lcmFsbHkgYWR2 YW5jZWQgYnkgaW5pdGlhbGl6aW5nIGl0IGZyb20KKyAgICA8c3RydWN0ZmllbGQ+c2NhblBvczwv c3RydWN0ZmllbGQ+IHdpdGhpbiBhIHJlYWQgc3RyZWFtIGNhbGxiYWNrLCBhbGxvd2luZworICAg IHRoZSB0YWJsZSBBTSB0byBwcmVmZXRjaCB0YWJsZSBibG9ja3MgcG9pbnRlZCB0byBieSBpdGVt cyB0aGF0IGFyZSB3ZWxsCisgICAgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4g IEluaXRpYWxseQorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IHN0 YXJ0cyBhdAorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4sIGJ1dCBhcyB0 aGUgcmVhZCBzdHJlYW0gcmFtcHMgdXAgaXQgY2FuCisgICAgZ2V0IGZhciBhaGVhZCAmbWRhc2g7 IHNwYW5uaW5nIG11bHRpcGxlIGluZGV4IHBhZ2VzIGlmIG5lY2Vzc2FyeSB0bworICAgIG1haW50 YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoIGRpc3RhbmNlIGZvciB0YWJsZSBibG9jayByZWFk cy4gIEEgbWFqb3IKKyAgICBnb2FsIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGludGVyZmFjZSBpcyB0byBhbGxvdyB0aGUKKyAgICB0YWJsZSBBTSB0byBwcmVmZXRjaCB3 aXRob3V0IGJlaW5nIGxpbWl0ZWQgdG8gaXRlbXMgZnJvbSB0aGUgY3VycmVudAorICAgIDxzdHJ1 Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYmF0Y2gncyBpbmRleCBsZWFmIHBhZ2UuCisg ICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEJvdGggPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0 cnVjdGZpZWxkPiBhbmQKKyAgICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZpZWxk PiBhcmUgY29udHJvbGxlZCBieSB0aGUgdGFibGUgQU0gYW5kCisgICAgY29yZSBjb2RlOyBpbmRl eCBhY2Nlc3MgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5pcHVsYXRlIHRoZXNlCisg ICAgZmllbGRzLiAgU2VlIHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvPC9m aWxlbmFtZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZS4KKyAg IDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgRm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5h Z2VtZW50IGR1cmluZyBiYXRjaCBzY2FucywgaW5jbHVkaW5nIHRoZQorICAgIDxzdHJ1Y3RmaWVs ZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBwb2xpY3kgYW5kIHRoZQorICAg IDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLCBzZWUKKyAgICA8 eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgorICAgPC9wYXJhPgorCisgIDwvc2VjdDI+ CisKICA8L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJpbmRleC1sb2NraW5nIj4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sCmlu ZGV4IDljY2Y1YjczOS4uOGU3MGE2MTk2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFibGVh bS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsxMjksMTQg QEAgbXlfdGFibGVhbV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFsKSwgdGhl IGJsb2NrIG51bWJlciBuZWVkcyB0byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4KIAorIDxw YXJhPgorICBUYWJsZSBhY2Nlc3MgbWV0aG9kcyBjYW4gc3VwcG9ydCBvcmRlcmVkIGluZGV4IHNj YW5zIHVzaW5nIHRoZQorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFj ZS4gU2VlIGFsc28KKyAgPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyIvPiBm b3IgZGV0YWlscyBvbiBpbnRlcmZhY2luZyB3aXRoCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gaW5kZXggYWNjZXNzIG1ldGhvZHMsIGFuZCBtYW5hZ2luZyB0aGUKKyAgc2Nhbidz IHBvc2l0aW9uLgorIDwvcGFyYT4KKwogIDxwYXJhPgogICBGb3IgY3Jhc2ggc2FmZXR5LCBhbiBB TSBjYW4gdXNlIHBvc3RncmVzJyA8bGluawogICBsaW5rZW5kPSJ3YWwiPjxhY3JvbnltPldBTDwv YWNyb255bT48L2xpbms+LCBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggMTMyYjU2YTU4Li4zMmJjM2RkM2UgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNjYsNiArMTY2LDcgQEAgc2Vs ZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJs ZSUnOwogIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2luZGV4 b25seXNjYW4gICAgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAgICAg fCBvbgorIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21hdGVy aWFsICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAgICAg fCBvbgogIGVuYWJsZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xODAsNyArMTgx LDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxp a2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAg ICAgICAgICAgfCBvbgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5 cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBv aW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNp bmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KLS0gCjIuNTMuMAoK --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0004-Add-VISITED_PAGES_LIMIT-to-heapam.patch" Content-Disposition: attachment; filename="v16-0004-Add-VISITED_PAGES_LIMIT-to-heapam.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehje14 RnJvbSBjMWQ2YTQxMmE5NDMxODkzNzJjYzczM2IxMDQxYmZmOTZlOGM4ZTc2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMTkgTWFyIDIwMjYgMTI6MzI6MzQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNiAwNC8xN10g QWRkIFZJU0lURURfUEFHRVNfTElNSVQgdG8gaGVhcGFtCgotLS0KIHNyYy9pbmNsdWRlL2FjY2Vz cy9yZWxzY2FuLmggICAgICAgICAgICAgfCAgNyArKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMjIgKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL3V0 aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgfCAgOSArKysrKy0tLS0KIDQgZmlsZXMgY2hhbmdl ZCwgMzUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRl eCA5YzE1NjNjODguLjEzMzcwYjFjOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0zNzIsNiArMzcy LDEzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAKIAkvKiBwYXJhbGxlbCBp bmRleCBzY2FuIGluZm9ybWF0aW9uLCBpbiBzaGFyZWQgbWVtb3J5ICovCiAJc3RydWN0IFBhcmFs bGVsSW5kZXhTY2FuRGVzY0RhdGEgKnBhcmFsbGVsX3NjYW47CisKKwkvKgorCSAqIExpbWl0IG9u IGRpc3RpbmN0IGhlYXAgcGFnZXMgdmlzaXRlZCBiZWZvcmUgZ2l2aW5nIHVwICgwID0gbm8gbGlt aXQpLgorCSAqIFVzZWQgYnkgc2VsZnVuY3MuYyB0byBib3VuZCB0aGUgY29zdCBvZiBnZXRfYWN0 dWFsX3ZhcmlhYmxlX2VuZHBvaW50KCkuCisJICovCisJdWludDgJCXhzX3Zpc2l0ZWRfcGFnZXNf bGltaXQ7CisKIH0gSW5kZXhTY2FuRGVzY0RhdGE7CiAKIC8qIEdlbmVyaWMgc3RydWN0dXJlIGZv ciBwYXJhbGxlbCBzY2FucyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKaW5kZXggYjhjYzNkMzljLi4xYjU4ZGIxOTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2hhbmRsZXIuYwpAQCAtODI0LDYgKzgyNCw3IEBAIGhlYXBhbV9pbmRleF9vbmx5X2dl dG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAog CQkJCWhlYXBfY29udGludWUgPSBmYWxzZTsKIAogCUFzc2VydChzY2FuLT54c193YW50X2l0dXAp OworCUFzc2VydChzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID09IDApOwogCiAJZm9yICg7 OykKIAl7CkBAIC05MDYsNiArOTA3LDkgQEAgaGVhcGFtX2luZGV4X29ubHlfYmF0Y2hfZ2V0bmV4 dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24KIAlJdGVt UG9pbnRlciB0aWQ7CiAJYm9vbAkJYWxsX3Zpc2libGUsCiAJCQkJaGVhcF9jb250aW51ZSA9IGZh bHNlOworCUJsb2NrTnVtYmVyIGxhc3RfdmlzaXRlZF9ibG9jayA9IEludmFsaWRCbG9ja051bWJl cjsKKwl1aW50OAkJbl92aXNpdGVkX3BhZ2VzID0gMCwKKwkJCQl4c192aXNpdGVkX3BhZ2VzX2xp bWl0ID0gc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdDsKIAogCUFzc2VydChzY2FuLT54c193 YW50X2l0dXApOwogCkBAIC05MzYsNyArOTQwLDI1IEBAIGhlYXBhbV9pbmRleF9vbmx5X2JhdGNo X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9u CiAJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzKys7CiAKIAkJCWlmICghaGVhcGFt X2luZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUsIHRydWUpKQorCQkJ eworCQkJCS8qCisJCQkJICogTm8gdmlzaWJsZSB0dXBsZS4gIElmIGNhbGxlciBzZXQgYSB2aXNp dGVkLXBhZ2VzIGxpbWl0CisJCQkJICogKG9ubHkgc2VsZnVuY3MuYyBkb2VzIHRoaXMpLCBjb3Vu dCBkaXN0aW5jdCBoZWFwIHBhZ2VzIGFuZAorCQkJCSAqIGdpdmUgdXAgb25jZSB3ZSd2ZSB2aXNp dGVkIHRvbyBtYW55LgorCQkJCSAqLworCQkJCWlmICh1bmxpa2VseSh4c192aXNpdGVkX3BhZ2Vz X2xpbWl0ID4gMCkpCisJCQkJeworCQkJCQlBc3NlcnQoaHNjYW4tPnhzX2JsayA9PSBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCisJCQkJCWlmIChoc2Nhbi0+eHNfYmxrICE9IGxh c3RfdmlzaXRlZF9ibG9jaykKKwkJCQkJeworCQkJCQkJbGFzdF92aXNpdGVkX2Jsb2NrID0gaHNj YW4tPnhzX2JsazsKKwkJCQkJCWlmICgrK25fdmlzaXRlZF9wYWdlcyA+IHhzX3Zpc2l0ZWRfcGFn ZXNfbGltaXQpCisJCQkJCQkJcmV0dXJuIGZhbHNlOwkvKiBnaXZlIHVwICovCisJCQkJCX0KKwkJ CQl9CiAJCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBpbmRleCBl bnRyeSAqLworCQkJfQogCiAJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvZ2VuYW0uYwppbmRleCA2ZTg3MTY5YzIuLmQwYjY4ZjM4ZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2dlbmFtLmMKQEAgLTEyNiw2ICsxMjYsNyBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlv biBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfaXR1 cGRlc2MgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRl c2MgPSBOVUxMOworCXNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSAwOwogCiAJc2Nhbi0+ YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOwogCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3Bh Y2UgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgYi9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwppbmRleCAxZjhiMGU2ODQuLjc2ODU4MWNm NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKQEAgLTcxNjgsMTEgKzcxNjgsMTEgQEAgZ2V0 X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCSAqIHBhZ2VzLiAg V2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxlciB3aWxsIGVuZCB1cCB1c2lu ZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVkIGluIHBnX3N0YXRpc3Rp Yy4KIAkgKgotCSAqIFhYWCBUaGlzIGNhbid0IHdvcmsgd2l0aCB0aGUgbmV3IHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdCBpbnRlcmZhY2UsCi0JICogd2hpY2ggc2ltcGx5IHdvbid0IHJldHVybiBh IHR1cGxlIHRoYXQgaXNuJ3QgdmlzaWJsZSB0byBvdXIgc25hcHNob3QuCi0JICogdGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90IHdpbGwgbmVlZCBzb21lIGtpbmQgb2YgY2FsbGJhY2sgdGhhdCBwcm92 aWRlcwotCSAqIGEgd2F5IGZvciB0aGUgc2NhbiB0byBnaXZlIHVwIHdoZW4gdGhlIGNvc3RzIHN0 YXJ0IHRvIGdldCBvdXQgb2YgaGFuZC4KKwkgKiBXZSBzZXQgeHNfdmlzaXRlZF9wYWdlc19saW1p dCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0byBjb3VudCBkaXN0aW5jdAorCSAqIGhlYXAgcGFnZXMg dmlzaXRlZCBmb3Igbm9uLXZpc2libGUgdHVwbGVzIGFuZCBnaXZlIHVwIGFmdGVyIHRoZSBsaW1p dAorCSAqIGlzIGV4Y2VlZGVkLgogCSAqLworI2RlZmluZSBWSVNJVEVEX1BBR0VTX0xJTUlUIDEw MAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJ CQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKQEAgLTcxODAsNiArNzE4MCw3IEBA IGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJCQkJCQkJ ICZTbmFwc2hvdE5vblZhY3V1bWFibGUsIE5VTEwsCiAJCQkJCQkJCSAxLCAwKTsKIAlBc3NlcnQo aW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlpbmRleF9zY2FuLT54c192aXNpdGVkX3BhZ2Vz X2xpbWl0ID0gVklTSVRFRF9QQUdFU19MSU1JVDsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwg c2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBpbiBz cGVjaWZpZWQgZGlyZWN0aW9uICovCi0tIAoyLjUzLjAKCg== --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0007-Add-UnlockBufferGetLSN-utility-function.patch" Content-Disposition: attachment; filename="v16-0007-Add-UnlockBufferGetLSN-utility-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehj611 RnJvbSA3ZTc4YTk4NjcyMTRkZDJhNjEzNDk3MjQ3NmRlMjY1Njg4MzU1NjU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTcgTWFyIDIwMjYgMTM6MjU6MTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNiAwNy8xN10g QWRkIFVubG9ja0J1ZmZlckdldExTTiB1dGlsaXR5IGZ1bmN0aW9uLgoKVGhpcyBjb21iaW5lcyB0 aGUgZnVuY3Rpb25hbGl0eSBvZiBCdWZmZXJHZXRMU05BdG9taWMoKSB3aXRoClVubG9ja1JlbGVh c2VCdWZmZXIsIHdpdGggdGhlIG9wdGlvbiBvZiBub3QgcmVsZWFzaW5nIGJ1ZmZlciBwaW4uCi0t LQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICB8ICAxICsKIHNyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgfCAxMiArLS0tLS0tCiBzcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysrKysr CiAzIGZpbGVzIGNoYW5nZWQsIDQ5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9y YWdlL2J1Zm1nci5oCmluZGV4IDQwMTc4OTZmOS4uNDA4ZDc2YzU2IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdy LmgKQEAgLTI1Myw2ICsyNTMsNyBAQCBleHRlcm4gdm9pZCBXYWl0UmVhZEJ1ZmZlcnMoUmVhZEJ1 ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbik7CiAKIGV4dGVybiB2b2lkIFJlbGVhc2VCdWZmZXIo QnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBVbmxvY2tSZWxlYXNlQnVmZmVyKEJ1ZmZlciBi dWZmZXIpOworZXh0ZXJuIFhMb2dSZWNQdHIgVW5sb2NrQnVmZmVyR2V0TFNOKEJ1ZmZlciBidWZm ZXIsIGJvb2wgcmVsZWFzZSk7CiBleHRlcm4gYm9vbCBCdWZmZXJJc0xvY2tlZEJ5TWUoQnVmZmVy IGJ1ZmZlcik7CiBleHRlcm4gYm9vbCBCdWZmZXJJc0xvY2tlZEJ5TWVJbk1vZGUoQnVmZmVyIGJ1 ZmZlciwgQnVmZmVyTG9ja01vZGUgbW9kZSk7CiBleHRlcm4gYm9vbCBCdWZmZXJJc0RpcnR5KEJ1 ZmZlciBidWZmZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4 YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggMDA3 ZmQwM2RkLi40MGM4OWE0MGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpA QCAtNTYyLDE3ICs1NjIsNyBAQCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCiAJCSAqIE5vbi1pbW1l ZGlhdGUtdW5ndWFyZCBzY2FucyByZXRhaW4gdGhlIHBpbjsgdGhlIHRhYmxlIEFNIHdpbGwgY2Fs bAogCQkgKiBhbXVuZ3VhcmRiYXRjaCB0byBkcm9wIHRoZSBpbnRlcmxvY2sgd2hlbiByZWFkeS4K IAkJICovCi0JCWJhdGNoLT5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLQkJaWYgKHNj YW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCkKLQkJewotCQkJLyogZHJvcCBib3RoIHRoZSBsb2Nr IGFuZCB0aGUgcGluICovCi0JCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7Ci0JCX0KLQkJZWxz ZQotCQl7Ci0JCQkvKiBqdXN0IGRyb3AgdGhlIGxvY2sgKGhvbGQgb24gdG8gaW50ZXJsb2NrIHBp bikgKi8KLQkJCVVubG9ja0J1ZmZlcihidWYpOwotCQl9CisJCWJhdGNoLT5sc24gPSBVbmxvY2tC dWZmZXJHZXRMU04oYnVmLCBzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOwogCX0KIAllbHNl CiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwppbmRleCAwMGJjNjA5NTIuLjJhOTU1 MTdhMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTU1MjUsNiArNTUyNSw1 MyBAQCBVbmxvY2tSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpCiAJUmVsZWFzZUJ1ZmZlcihi dWZmZXIpOwogfQogCisvKgorICogVW5sb2NrQnVmZmVyR2V0TFNOCisgKgkJUmVhZCBhIGJ1ZmZl cidzIExTTiwgdGhlbiB1bmxvY2sgdGhlIGJ1ZmZlci4gIE9wdGlvbmFsbHkgcmVsZWFzZSB0aGUK KyAqCQlwaW4gdG9vLgorICoKKyAqIFRoaXMgY29tYmluZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yg QnVmZmVyR2V0TFNOQXRvbWljKCkgd2l0aAorICogVW5sb2NrUmVsZWFzZUJ1ZmZlciwgd2l0aCB0 aGUgb3B0aW9uIG9mIG5vdCByZWxlYXNpbmcgYnVmZmVyIHBpbi4KKyAqCisgKiBVc2VkIHRvIHVu bG9jayBhIGJ1ZmZlciBsb2NrIChhbmQgcG9zc2libHkgdG8gcmVsZWFzZSBpdHMgcGluKSB3aGVu IGhlbGQgb24KKyAqIGFuIGluZGV4IHBhZ2UuICBUaGlzIGlzIG5lZWRlZCBmcmVxdWVudGx5IGVu b3VnaCB0byBqdXN0aWZ5IHNwZWNpYWxpemF0aW9uLgorICovCitYTG9nUmVjUHRyCitVbmxvY2tC dWZmZXJHZXRMU04oQnVmZmVyIGJ1ZmZlciwgYm9vbCByZWxlYXNlKQoreworCUJ1ZmZlckRlc2Mg KmJ1Zl9oZHI7CisJUGFnZQkJcGFnZTsKKwlYTG9nUmVjUHRyCWxzbjsKKworCUFzc2VydChCdWZm ZXJJc1ZhbGlkKGJ1ZmZlcikpOworCUFzc2VydChCdWZmZXJJc1Bpbm5lZChidWZmZXIpKTsKKwor CWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZlcikpCisJeworCQlidWZfaGRyID0gR2V0TG9jYWxCdWZm ZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwkJcGFnZSA9IChQYWdlKSBMb2NhbEJ1Zkhkckdl dEJsb2NrKGJ1Zl9oZHIpOworCQlsc24gPSBQYWdlR2V0TFNOKHBhZ2UpOworCQlpZiAocmVsZWFz ZSkKKwkJCVVucGluTG9jYWxCdWZmZXIoYnVmZmVyKTsKKwkJcmV0dXJuIGxzbjsKKwl9CisKKwli dWZfaGRyID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwlwYWdlID0gKFBhZ2Up IEJ1ZkhkckdldEJsb2NrKGJ1Zl9oZHIpOworCisjaWZkZWYgUEdfSEFWRV84QllURV9TSU5HTEVf Q09QWV9BVE9NSUNJVFkKKwlsc24gPSBQYWdlR2V0TFNOKHBhZ2UpOworI2Vsc2UKKwlsc24gPSBC dWZmZXJHZXRMU05BdG9taWMoYnVmZmVyKTsKKyNlbmRpZgorCisJQnVmZmVyTG9ja1VubG9jayhi dWZmZXIsIGJ1Zl9oZHIpOworCWlmIChyZWxlYXNlKQorCQlVbnBpbkJ1ZmZlcihidWZfaGRyKTsK KworCXJldHVybiBsc247Cit9CisKIC8qCiAgKiBJbmNyQnVmZmVyUmVmQ291bnQKICAqCQlJbmNy ZW1lbnQgdGhlIHBpbiBjb3VudCBvbiBhIGJ1ZmZlciB0aGF0IHdlIGhhdmUgKmFscmVhZHkqIHBp bm5lZAotLSAKMi41My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v16-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehje15 RnJvbSBjODNhZWYzMTdiYTQ1MmI3NjMxZmVlZTEwMDYyZDkyZjMzYTY0OTMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjE2IDAzLzE3XSBB ZGQgaW50ZXJmYWNlcyB0aGF0IGVuYWJsZSBpbmRleCBwcmVmZXRjaGluZy4KCkFkZCBhIG5ldyBh bWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSB0aGF0IGFsbG93cyBpbmRleCBhY2Nlc3MgbWV0 aG9kcwp0byBpbXBsZW1lbnQgcGxhaW4vb3JkZXJlZCBpbmRleCBzY2FucyB0aGF0IHJldHVybiBp bmRleCBlbnRyaWVzIGluCmJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0Y2hpbmcgaXRlbXMgZnJv bSBhbiBpbmRleCBwYWdlLCByYXRoZXIgdGhhbgpvbmUgbWF0Y2ggYXQgYSB0aW1lLgoKVGhpcyBj b21taXQgYWxzbyBhZGRzIGEgbmV3IHRhYmxlIEFNIGludGVyZmFjZSBjYWxsYmFjaywgY2FsbGVk IGJ5IHRoZQpjb3JlIGV4ZWN1dG9yIHRocm91Z2ggdGhlIG5ldyB0YWJsZV9pbmRleF9nZXRuZXh0 X3Nsb3Qgc2hpbSBmdW5jdGlvbi4KVGhpcyBhbGxvd3MgdGhlIHRhYmxlIEFNIHRvIGRpcmVjdGx5 IG1hbmFnZSB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXggc2NhbnMKcmF0aGVyIHRoYW4gaGF2aW5nIGlu ZGl2aWR1YWwgVElEcyBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvbmUgYnkgb25lLgpUaGUgYW1n ZXRiYXRjaCBpbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2Fj aCB0bwppbmRleCBzY2FucyBhZGRlZCB0byB0aGUgdGFibGUgQU0uICBUaGUgdGFibGUgQU0gY2Fu IGFwcGx5IGtub3dsZWRnZSBvZgp3aGljaCBUSURzIHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIHNj YW4gaW4gdGhlIG5lYXIgZnV0dXJlIHRvIHBlcmZvcm0KSS9PIHByZWZldGNoaW5nLiAgUHJlZmV0 Y2hpbmcgd2lsbCBiZSBhZGRlZCBieSBhbiB1cGNvbWluZyBjb21taXQuCgpJbmRleCBhY2Nlc3Mg bWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBub3cgaW1wbGVtZW50 CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UgT1IgdGhlIGFtZ2V0dHVwbGUgaW50ZXJm YWNlLiAgVGhlCmFtZ2V0dHVwbGUgaW50ZXJmYWNlIHdpbGwgc3RpbGwgYmUgdXNlZCBieSBpbmRl eCBBTXMgdGhhdCByZXF1aXJlIGRpcmVjdApjb250cm9sIG92ZXIgdGhlIHByb2dyZXNzIG9mIGlu ZGV4IHNjYW5zIChlLmcuLCBHaVNUIHdpdGggS05OIG9yZGVyZWQKc2NhbnMpLiAgQWxtb3N0IGFs bCBleGlzdGluZyBjYWxsZXJzIHRoYXQgcGVyZm9ybSBpbmRleCBzY2FucyBub3cgdXNlCnRoZSBu ZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwgcmVnYXJkbGVzcyBvZiB3aGV0 aGVyIHRoZQp1bmRlcmx5aW5nIGluZGV4IEFNIHVzZXMgYW1nZXRiYXRjaCBvciBhbWdldHR1cGxl LgoKVGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIHJldHVybnMgYmF0Y2hlcyB0aGF0IGhvbGQgYSBi dWZmZXIgcGluIG9uIGFuCmluZGV4IHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgdGFibGUg QU0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QKY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZB Q1VVTS4gIE5vdyBoZWFwYW0gb25seSBuZWVkcyB0byBob2xkIG9uIHRvCnN1Y2ggYSBwaW4gZm9y IGFuIGluc3RhbnQgLS0gZXhjZXB0IGR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDCnNu YXBzaG90LiAgTm9uLU1WQ0Mgc2NhbnMgY29udGludWUgdG8gbmVlZCB0byBob2xkIHRoZSBwaW4g dW50aWwgYWxsIG9mCnRoZSBiYXRjaCdzIFRJRHMgaGF2ZSBiZWVuIGZldGNoZWQgZnJvbSB0aGUg aGVhcC4KClRoaXMgZXh0ZW5kcyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRkZWQgdG8gbmJ0cmVl IGJ5IGNvbW1pdCAyZWQ1Yjg3ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdvcmsgd2l0aCBhbGwg aW5kZXggQU1zIHRoYXQgc3VwcG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgV2Ug Y2FuIGFsd2F5cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMKZWFnZXJseSwgcHJvdmlkZWQg dGhlIHNjYW4gdXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2UgdGhlIG5idHJlZQpkcm9wUGlu IG9wdGltaXphdGlvbiwgd2hpY2ggaGFkIGEgY291cGxlIG9mIGFkZGl0aW9uYWwgcmVzdHJpY3Rp b25zKS4KCkFuIHVwY29taW5nIGNvbW1pdCB0aGF0IHdpbGwgYWRkIGluZGV4IHByZWZldGNoaW5n IHdpbGwgdXNlIGEgcmVhZApzdHJlYW0gdG8gcmVhZCBoZWFwIHBhZ2VzIGR1cmluZyBpbmRleCBz Y2Fucy4gIFJlYWQgc3RyZWFtIGlzIGNhcmVmdWwgdG8KbGltaXQgaG93IG1hbnkgdGhpbmdzIGl0 IHBpbnMsIGxlc3Qgd2UgcnVuIGludG8gcHJvYmxlbXMgZHVlIHRvIGhhdmluZwp0b28gbWFueSBi dWZmZXJzIHBpbm5lZC4gIFNpbXBseSBuZXZlciBob2xkaW5nIG9uIHRvIGluZGV4IHBhZ2UgYnVm ZmVyCnBpbnMgZ3JlYXRseSBzaW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIGluZGV4 IHByZWZldGNoaW5nOwp0aGVyZSdzIG5vIHJpc2sgb2YgdW5pbnRlbmRlZCBpbnRlcmFjdGlvbnMg YmV0d2VlbiB0aGUgcmVhZCBzdHJlYW0gYW5kCmluZGV4IEFNLiAgVGhlIG9ubHkgZG93bnNpZGUg aXMgdGhhdCB3ZSBjYW5ub3Qgc3VwcG9ydCBwcmVmZXRjaGluZwpkdXJpbmcgc2NhbnMgdGhhdCB1 c2UgYSBub24tTVZDQyBzbmFwc2hvdCwgd2hpY2ggc2VlbXMgcXVpdGUgYWNjZXB0YWJsZS4KCklu IHByYWN0aWNlLCBoZWFwYW0gZG9lc24ndCBkcm9wIGVhY2ggYmF0Y2gncyBpbmRleCBwYWdlIGJ1 ZmZlciBwaW4gYXQKdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5IGR1cmluZyBpbmRleC1vbmx5IHNj YW5zLiAgVGhpcyB3YXMgZGVlbWVkCm5lY2Vzc2FyeSB0byBhdm9pZCByZWdyZXNzaW5nIGluZGV4 LW9ubHkgc2NhbnMgd2l0aCBhIExJTUlULCBpbgpwYXJ0aWN1bGFyIHdpdGggbmVzdGxvb3AgYW50 aS1qb2lucyBhbmQgbmVzdGxvb3Agc2VtaS1qb2luczsgZWFnZXJseQpsb2FkaW5nIGFsbCB0aGUg dmlzaWJpbGl0eSBpbmZvcm1hdGlvbiB1cCBmcm9udCByZWdyZXNzZWQgc3VjaCBxdWVyaWVzLgpU aGUgbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGdpdmVzIHRhYmxlIEFNcyB0aGUgYXV0aG9yaXR5 IHRvIGRlY2lkZQp3aGVuIGFuZCB3aGVyZSB0byBkcm9wIGluZGV4IHBhZ2UgcGlucywgc28gdGhp cyBjYW4gYmUgY29uc2lkZXJlZCBhCmhlYXBhbSBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgKGluZGV4 IEFNcyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgaXQpLgpUaGlzIHNjaGVtZSBzdGlsbCBhbGxv d3MgaW5kZXggcHJlZmV0Y2hpbmcgdG8gY29uc2lzdGVudGx5IGhvbGQgbm8gbW9yZQp0aGFuIG9u ZSBiYXRjaCBpbmRleCBwYWdlIHBpbiBhdCBhIHRpbWUsIGV2ZW4gd2hlbiBhbiBpbmRleC1vbmx5 IHNjYW4KKHRoYXQgbXVzdCBwZXJmb3JtIHNvbWUgaGVhcCBmZXRjaGVzKSBob2xkcyBvcGVuIHNl dmVyYWwgaW5kZXggYmF0Y2hlcwphdCBvbmNlIGluIG9yZGVyIHRvIG1haW50YWluIGFuIGFkZXF1 YXRlIHByZWZldGNoIGRpc3RhbmNlLgoKQXV0aG9yOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRy YS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBB bmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUaG9tYXMgTXVu cm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRlYmFiQGVudGVycHJpc2VkYi5jb20K RGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9lZmFjMzIzOC02ZjM0LTQxZWEtYTM5My0y NmNjMDQ0MWI1MDYlNDB2b25kcmEubWUKLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAg ICAgICAgICAgICAgICAgICAgfCAgMjcgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAg ICAgICAgICAgICAgICAgICB8ICAzMSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgICAgIHwgIDMxICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmggICAg ICAgICAgICAgICAgICAgfCAxODggKystLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAg ICAgICAgICAgICAgICAgIHwgMzIyICsrKysrKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmggICAgICAgICAgICAgICAgICB8ICA2NyArKwogc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1 bWVudF9ub2RlLmggICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o ICAgICAgICAgICAgICAgICB8ICAgMiAtCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAg ICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAg ICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyAg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAg ICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAg ICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAg ICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jICAgICAgfCA4MjIgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9hbWFwaS5jICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYyAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9p bmRleGFtLmMgICAgICAgICAgICB8IDE4NCArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhiYXRjaC5jICAgICAgICAgfCA3NTggKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L21lc29uLmJ1aWxkICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvUkVBRE1FICAgICAgICAgICAgICB8ICA3NCArLQogc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRwYWdlLmMgICAgICAgICAgIHwgIDEzICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgICAgICAgfCAxOTMgKystLQogc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgICAgIHwgNDcwICsrKysrLS0tLS0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8IDU0MyArKysrKy0tLS0tLS0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyAgICAgICAgICB8IDI0NSAtLS0t LS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jICAgICAgICAgICB8ICAgNiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgICA2ICst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCAgMjMgKy0K IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQog c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jICAgICAgICAgICAgICAgIHwgICAyICstCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0KIHNy Yy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgOCArLQogc3Jj L2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jICAgIHwgICAxICsKIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMgICAgICB8IDEwOSArLS0KIHNyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICAgICB8ICAxMyArLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNr ZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jICAgIHwgICA4ICstCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvYW11dGlscy5jICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAgICAgICAgICB8ICA2MCArLQogY29udHJpYi9hbWNo ZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICAgIHwgICAyICstCiBjb250cmliL2Jsb29t L2JsdXRpbHMuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIGRvYy9zcmMvc2dtbC9p bmRleGFtLnNnbWwgICAgICAgICAgICAgICAgICAgICB8IDUyMyArKysrKysrKystLQogZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9k dWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDYgKy0KIHNyYy90b29s cy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAxMiArLQogNDkgZmlsZXMg Y2hhbmdlZCwgMzMxNCBpbnNlcnRpb25zKCspLCAxNTU3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFw aS5oCmluZGV4IGVjZmJkMDE3ZC4uOWJkMzE0MWZjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvYW1hcGkuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMTk4LDYg KzE5OCwxOSBAQCB0eXBlZGVmIHZvaWQgKCphbXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRl c2Mgc2NhbiwKIHR5cGVkZWYgYm9vbCAoKmFtZ2V0dHVwbGVfZnVuY3Rpb24pIChJbmRleFNjYW5E ZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogCisvKiBuZXh0 IGJhdGNoIG9mIHZhbGlkIHR1cGxlcyAqLwordHlwZWRlZiBJbmRleFNjYW5CYXRjaCAoKmFtZ2V0 YmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgIEluZGV4 U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKKworLyogbWFyayBkZWFkIGl0ZW1zIGluIGluZGV4IHBhZ2UgKi8KK3R5cGVkZWYgdm9p ZCAoKmFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJ CQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKiBkcm9wIFRJRCByZWN5Y2xpbmcg aW50ZXJsb2NrIGhlbGQgdG8gcHJldmVudCBjb25jdXJyZW50IFZBQ1VVTSByZWN5Y2xpbmcgKi8K K3R5cGVkZWYgdm9pZCAoKmFtdW5ndWFyZGJhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuLAorCQkJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKIC8qIGZldGNoIGFsbCB2 YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikgKElu ZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJpdG1hcCAqdGJtKTsKQEAgLTIwNSwx MSArMjE4LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhT Y2FuRGVzYyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8KIHR5cGVkZWYgdm9pZCAoKmFtZW5k c2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKLS8qIG1hcmsgY3VycmVudCBz Y2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1hcmtwb3NfZnVuY3Rpb24pIChJbmRl eFNjYW5EZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtlZCBzY2FuIHBvc2l0aW9uICovCi10 eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuKTsK Ky8qIGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyBz Y2FuJ3MgcG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFtcG9zcmVzZXRfZnVuY3Rpb24pIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogCiAv KgogICogQ2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAtIGZvciBwYXJhbGxlbCBpbmRleCBz Y2Fucy4KQEAgLTMwOSwxMCArMzIwLDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4QW1Sb3V0aW5l CiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47CiAJYW1yZXNjYW5fZnVuY3Rpb24g YW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdldHR1cGxlOyAvKiBjYW4gYmUgTlVM TCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8K KwlhbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9uIGFta2lsbGl0ZW1zYmF0Y2g7IC8qIGNhbiBiZSBO VUxMICovCisJYW11bmd1YXJkYmF0Y2hfZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBi ZSBOVUxMICovCiAJYW1nZXRiaXRtYXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7CS8qIGNhbiBiZSBO VUxMICovCiAJYW1lbmRzY2FuX2Z1bmN0aW9uIGFtZW5kc2NhbjsKLQlhbW1hcmtwb3NfZnVuY3Rp b24gYW1tYXJrcG9zOwkvKiBjYW4gYmUgTlVMTCAqLwotCWFtcmVzdHJwb3NfZnVuY3Rpb24gYW1y ZXN0cnBvczsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9zcmVz ZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKIAkvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRvIHN1cHBv cnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KIAlhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0 aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47IC8qIGNhbiBiZSBOVUxMICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5o CmluZGV4IDFhMjdiZjA2MC4uNmI1YzQ4ZTVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvZ2VuYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtOTYsNiArOTYs NyBAQCB0eXBlZGVmIGJvb2wgKCpJbmRleEJ1bGtEZWxldGVDYWxsYmFjaykgKEl0ZW1Qb2ludGVy IGl0ZW1wdHIsIHZvaWQgKnN0YXRlKTsKIAogLyogc3RydWN0IGRlZmluaXRpb25zIGFwcGVhciBp biByZWxzY2FuLmggKi8KIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpJbmRleFNj YW5EZXNjOwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhICpJbmRleFNjYW5CYXRj aDsKIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YSAqU3lzU2NhbkRlc2M7CiAKIHR5cGVk ZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKlBhcmFsbGVsSW5kZXhTY2FuRGVz YzsKQEAgLTE1Niw2ICsxNTcsNyBAQCBleHRlcm4gdm9pZCBpbmRleF9pbnNlcnRfY2xlYW51cChS ZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBpbmRleF9iZWdp bnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJCQkJIFJlbGF0aW9uIGluZGV4UmVs YXRpb24sCisJCQkJCQkJCQkgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkgU25hcHNob3Qg c25hcHNob3QsCiAJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 LAogCQkJCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CkBAIC0xODIsMTQgKzE4NCwx MiBAQCBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlvbiBo ZWFwUmVsYXRpb24sCiBleHRlcm4gdm9pZCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5E ZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVs KFJlbGF0aW9uIGhlYXByZWwsCiAJCQkJCQkJCQkJCSAgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJ CQkJCQkJCSAgYm9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkJCQkJCSAgSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkJCQkJCQkgIGludCBua2V5cywgaW50IG5vcmRl cmJ5cywKIAkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4pOwogZXh0ZXJu IEl0ZW1Qb2ludGVyIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJ CQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Ci1leHRlcm4gYm9vbCBpbmRleF9mZXRjaF9o ZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwotZXh0ZXJuIGJv b2wgaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXJlY3Rpb24sCi0JCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGludDY0 IGluZGV4X2dldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqYml0bWFwKTsK IAogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaW5kZXhfYnVsa19kZWxldGUoSW5kZXhW YWN1dW1JbmZvICppbmZvLApAQCAtMjUzLDQgKzI1MywyOSBAQCBleHRlcm4gdm9pZCBzeXN0YWJs ZV9pbnBsYWNlX3VwZGF0ZV9iZWdpbihSZWxhdGlvbiByZWxhdGlvbiwKIGV4dGVybiB2b2lkIHN5 c3RhYmxlX2lucGxhY2VfdXBkYXRlX2ZpbmlzaCh2b2lkICpzdGF0ZSwgSGVhcFR1cGxlIHR1cGxl KTsKIGV4dGVybiB2b2lkIHN5c3RhYmxlX2lucGxhY2VfdXBkYXRlX2NhbmNlbCh2b2lkICpzdGF0 ZSk7CiAKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhhbS5jIChp biBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9pbml0KElu ZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9lbmQoSW5kZXhT Y2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9z KEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKy8qCisgKiBhbWdldGJhdGNoIHV0aWxpdGllcyBjYWxs ZWQgYnkgdGFibGUgQU1zIChpbiBpbmRleGJhdGNoLmMpCisgKi8KK2V4dGVybiB2b2lkIHRhYmxl YW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lk IHRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRl cm4gdm9pZCB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF91bmd1YXJkX2JhdGNo KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKgorICogYW1n ZXRiYXRjaCB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcyAoaW4gaW5kZXhiYXRjaC5jKQor ICovCitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0 ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNj IHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKICNlbmRpZgkJCQkJCQkvKiBHRU5B TV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5j bHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggOWJjZjc0ODYyLi41NWM5MDY5ZDYgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKQEAgLTEyOSwxMCArMTI5LDM3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hI ZWFwRGF0YQogCUJ1ZmZlcgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4c19ibGs7CiAKLQkvKiBD dXJyZW50IGhlYXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4gdGhlIHZpc2liaWxpdHkg bWFwICovCi0JQnVmZmVyCQl4c192bWJ1ZmZlcjsKKwkvKiBGb3IgaW5kZXgtb25seSBzY2FucyB0 aGF0IG11c3QgYWNjZXNzIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCUJ1ZmZlcgkJeHNfdm1idWZm ZXI7CS8qIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciAqLworCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAj IGl0ZW1zIHRvIHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLworCWJvb2wJCXhzX2xhc3Rp bmJsb2NrOyAvKiBsYXN0IFRJRCBvbiB0aGlzIGJsb2NrIGluIGN1cnJlbnQgYmF0Y2g/ICovCisK IH0gSW5kZXhGZXRjaEhlYXBEYXRhOwogCisvKgorICogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0 byB0aGUgaGVhcCB0YWJsZSBBTS4KKyAqCisgKiBTdG9yZWQgYXQgYSBuZWdhdGl2ZSBvZmZzZXQg ZnJvbSB0aGUgSW5kZXhTY2FuQmF0Y2ggcG9pbnRlciwgaW4gdGhlCisgKiB0YWJsZSBBTSBvcGFx dWUgYXJlYSBvZiBlYWNoIGJhdGNoIGFsbG9jYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IEhl YXBCYXRjaERhdGEKK3sKKwl1aW50OAkgICAqdmlzSW5mbzsJCS8qIHBlci1pdGVtIHZpc2liaWxp dHkgZmxhZ3MsIG9yIE5VTEwgKi8KK30gSGVhcEJhdGNoRGF0YTsKKworLyoKKyAqIFBlci1pdGVt IHZpc2liaWxpdHkgZmxhZ3Mgc3RvcmVkIGluIEhlYXBCYXRjaERhdGEudmlzSW5mbyBhcnJheQor ICovCisjZGVmaW5lIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQJCTB4MDEJLyogY2hlY2tlZCBpdGVt IGluIFZNPyAqLworI2RlZmluZSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJMRQkweDAyCS8qIGJs b2NrIGlzIGtub3duIGFsbC12aXNpYmxlPyAqLworCisvKiBBY2Nlc3MgdGhlIGhlYXAtcHJpdmF0 ZSBwZXItYmF0Y2ggZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KK3N0YXRp YyBpbmxpbmUgSGVhcEJhdGNoRGF0YSAqCitoZWFwX2JhdGNoX2RhdGEoSW5kZXhTY2FuQmF0Y2gg YmF0Y2gsIEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlyZXR1cm4gKEhlYXBCYXRjaERhdGEgKikg KChjaGFyICopIGJhdGNoIC0gc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0KTsKK30KKwogLyogUmVz dWx0IGNvZGVzIGZvciBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gKi8KIHR5cGVkZWYgZW51bQog ewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL25idHJlZS5oCmluZGV4IGRhNzUwM2M1Ny4uNzRhZjllZmMzIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJl ZS5oCkBAIC05MjQsMTExICs5MjQsMjcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRWYWN1dW1Qb3N0aW5n RGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGluZ0RhdGEgKkJUVmFjdXVtUG9zdGluZzsKIAor LyogUGVyLWJhdGNoIGRhdGEgcHJpdmF0ZSB0byB0aGUgYnRyZWUgaW5kZXggQU0gKi8KK3R5cGVk ZWYgc3RydWN0IEJUQmF0Y2hEYXRhCit7CisJQnVmZmVyCQlidWY7CQkJLyogaW5kZXggcGFnZSBi dWZmZXIgcGluIChUSUQgcmV1c2UgaW50ZXJsb2NrKSAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdl OwkJLyogaW5kZXggcGFnZSB3aXRoIG1hdGNoaW5nIGl0ZW1zICovCisJQmxvY2tOdW1iZXIgcHJl dlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgc2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQ YWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBzaWJsaW5nICovCisJYm9vbAkJbW9yZUxlZnQ7CQkv KiBtb3JlIG1hdGNoaW5nIHBhZ2VzIHRvIHRoZSBsZWZ0PyAqLworCWJvb2wJCW1vcmVSaWdodDsJ CS8qIG1vcmUgbWF0Y2hpbmcgcGFnZXMgdG8gdGhlIHJpZ2h0PyAqLworfSBCVEJhdGNoRGF0YTsK KwogLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVl ZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3NlZCBz Y2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCi0gKiBkZXRhaWxzIG9mIHRo ZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgbG9jYXRpb24K LSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hcmtlZCBsb2NhdGlv biwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9zRGF0YSB0byByZXByZXNlbnQgdGhlIGRh dGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5kIG1hcmtlZAotICogbG9jYXRpb25zLikJ SW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUga25vd24ta2lsbGVkIGluZGV4IGVudHJp ZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3JlIHdlIGNhbiBtb3ZlIG9mZiB0aGUgY3Vy cmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdlIGF0IGEgdGltZTogd2Ug cGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50aWZ5Ci0gKiBhbGwgdGhlIG1hdGNoaW5n IGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4gQlRTY2FuUG9zRGF0YSwgdGhlbgot ICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJldHVybmluZyB0aGUgaXRlbXMgdG8gdGhl IGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlzIGFwcHJvYWNoIG1pbmltaXplcyBsb2Nr L3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMKLSAqIGRyb3AgdGhlIGxvY2sgdG8gbWFr ZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0aGUgcmV0dXJuZWQgaXRlbXMuCi0gKiBX aGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNlIHRoZSBwaW4gZHVyaW5nIHRoaXMgd2lu ZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBpbiAod2hlbiBzby0+ZHJvcFBpbikgdG8g YXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVNCi0gKiAoc2VlIG5idHJlZS9SRUFETUUg c2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUpLgotICog V2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiB0aGUgY3Vy cmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRvIGl0cyBzaWJsaW5nIHBhZ2UuCi0gKgot ICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJl IEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRz IGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMgZ28KLSAqIGludG8gYSBzZXBh cmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2FuUG9zSXRlbSBzdG9yZXMgaXRzIHR1cGxl J3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4gIFBvc3RpbmcgbGlzdCB0dXBsZXMgc3Rv cmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93aW5nIHRoZSBzYW1lIGtleSB0byBiZSBy ZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdAotICogdHVwbGUuCisgKiBB Y2Nlc3MgdGhlIGJ0cmVlLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5C YXRjaCBwb2ludGVyLgorICogVGhpcyBmb2xsb3dzIHRoZSBzdGFuZGFyZCBjb252ZW50aW9uIGZv ciBpbmRleCBBTSBvcGFxdWUgc3RhdGU6IGl0IGNhbiBiZQorICogZm91bmQgYXQgYSBmaXhlZCBu ZWdhdGl2ZSBvZmZzZXQgZnJvbSB0aGUgSW5kZXhTY2FuQmF0Y2ggcG9pbnRlci4KICAqLwotCi10 eXBlZGVmIHN0cnVjdCBCVFNjYW5Qb3NJdGVtCS8qIHdoYXQgd2UgcmVtZW1iZXIgYWJvdXQgZWFj aCBtYXRjaCAqLworc3RhdGljIGlubGluZSBCVEJhdGNoRGF0YSAqCitCVEJhdGNoR2V0RGF0YShJ bmRleFNjYW5CYXRjaCBiYXRjaCkKIHsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElE IG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0Owkv KiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLQlMb2NhdGlvbkluZGV4IHR1 cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICov Ci19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0RhdGEKLXsKLQlC dWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5waW5uZWQpICov Ci0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBf YnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIHBhZ2UgcmVmZXJlbmNl ZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogY3VyclBhZ2Un cyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1cnJQYWdlJ3Mgcmln aHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQYWdlJ3MgTFNOICh3aGVuIHNv LT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9yIHRoZSBzYXZlZCBwb3NpdGlv bidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVjdGlvbiBkaXI7Ci0KLQkvKgot CSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIG5leHRUdXBsZU9mZnNldCBp cyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBhc3NvY2lhdGVkIHR1cGxlIHN0 b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBsZU9mZnNldDsKLQotCS8qCi0J ICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVyIHdlIHRoaW5rIHRoZXJlIG1h eSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQgYW5kIHJpZ2h0IG9m IHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8KLQlib29sCQltb3JlTGVmdDsK LQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMg b3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRleG9mZnNldCku ICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZpbGwgdGhlCi0J ICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qgc2xvdCBhbmQg ZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3QtdmFsaWQtZW50 cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRleCBpcyBhIGN1 cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNhbGxlci4KLQkg Ki8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICov Ci0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlp bnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8KLQotCUJUU2Nh blBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwot fSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0RhdGEgKkJUU2NhblBvczsKLQot I2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhC bG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklz VmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSBc Ci0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJUmVsZWFz ZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZl cjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1VucGluSWZQaW5uZWQoc2NhbnBv cykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykpIFwKLQkJCUJU U2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBCVFNjYW5Q b3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxp ZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcyku YnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0j ZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsgXAotCQkoc2NhbnBv cykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBhZ2UgPSBJbnZhbGlk QmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQorCXJldHVybiAoQlRCYXRjaERhdGEgKikgKChj aGFyICopIGJhdGNoIC0gTUFYQUxJR04oc2l6ZW9mKEJUQmF0Y2hEYXRhKSkpOworfQogCiAvKiBX ZSBuZWVkIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZ IHNjYW4ga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwpAQCAtMTA1MCw2ICs5 NjYsMjggQEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2Nv bXBhcmU7CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5m bzsKIAorLyoKKyAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUg bmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCisgKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3Nl ZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCisgKiBkZXRhaWxzIG9m IHRoZSBwcmVwcm9jZXNzaW5nKSwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFy cmF5CisgKiBrZXlzLiAgVGhlcmUgYXJlIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgY3VycmVu dCBhcnJheSBrZXlzIHRyYWNrIHRoZQorICogcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNjYW4gdGhy b3VnaCB0aGUgaW5kZXgncyBrZXkgc3BhY2UgKHNlZSBfYnRfcmVhZHBhZ2UKKyAqIGFuZCBfYnRf YWR2YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHRyYWNrIGFueXRoaW5n IGFib3V0IHRoZQorICogY3VycmVudCBzY2FuIHBvc2l0aW9uIGluIHRoaXMgb3BhcXVlIHN0cnVj dC4KKyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVk IGJ5IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhl IHBhZ2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFu ZCByZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFz ZSB0aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBU aGlzIGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gX2J0X25leHQg aXMgcGFzc2VkIHByaW9yYmF0Y2gsIHdoaWNoIGNvbnRhaW5zIGRldGFpbHMgb2Ygd2hpY2gKKyAq IHBhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgKHByaW9yYmF0Y2ggaXMgcHJvdmlkZWQg YXMgYW4gYXJndW1lbnQgdG8KKyAqIGJ0Z2V0YmF0Y2ggYnkgY29yZSBjb2RlKS4KKyAqCisgKiBJ ZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5k ZXhUdXBsZSBmb3IgZWFjaAorICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVh cCBUSUQgYW5kIG9mZnNldC4gIFRoaXMgaXMgYWxzbyBwZXIgdGhlCisgKiBhbWdldGJhdGNoIGNv bnRyYWN0LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAor ICogYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0 aGUgcG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7 CiAJLyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpA QCAtMTA2NiwzMiArMTAwNCw2IEBAIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAlC VEFycmF5S2V5SW5mbyAqYXJyYXlLZXlzOwkvKiBpbmZvIGFib3V0IGVhY2ggZXF1YWxpdHktdHlw ZSBhcnJheSBrZXkgKi8KIAlGbWdySW5mbyAgICpvcmRlclByb2NzOwkJLyogT1JERVIgcHJvY3Mg Zm9yIHJlcXVpcmVkIGVxdWFsaXR5IGtleXMgKi8KIAlNZW1vcnlDb250ZXh0IGFycmF5Q29udGV4 dDsgLyogc2Nhbi1saWZlc3BhbiBjb250ZXh0IGZvciBhcnJheSBkYXRhICovCi0KLQkvKiBpbmZv IGFib3V0IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIg dXNlZCkgKi8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVz IG9mIGtpbGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJy ZW50bHkgc3RvcmVkIGl0ZW1zICovCi0JYm9vbAkJZHJvcFBpbjsJCS8qIGRyb3AgbGVhZiBwaW4g YmVmb3JlIGJ0Z2V0dHVwbGUgcmV0dXJucz8gKi8KLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5n IGFuIGluZGV4LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCi0JICogd29y a3NwYWNlcyBmb3IgdGhlIGN1cnJQb3MgYW5kIG1hcmtQb3MgcmVzcGVjdGl2ZWx5LiAgRWFjaCBp cyBvZiBzaXplCi0JICogQkxDS1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBtdWNoIGFzIGEgZnVsbCBw YWdlJ3Mgd29ydGggb2YgdHVwbGVzLgotCSAqLwotCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0 dXBsZSBzdG9yYWdlIGZvciBjdXJyUG9zICovCi0JY2hhcgkgICAqbWFya1R1cGxlczsJCS8qIHR1 cGxlIHN0b3JhZ2UgZm9yIG1hcmtQb3MgKi8KLQotCS8qCi0JICogSWYgdGhlIG1hcmtlZCBwb3Np dGlvbiBpcyBvbiB0aGUgc2FtZSBwYWdlIGFzIGN1cnJlbnQgcG9zaXRpb24sIHdlCi0JICogZG9u J3QgdXNlIG1hcmtQb3MsIGJ1dCBqdXN0IGtlZXAgdGhlIG1hcmtlZCBpdGVtSW5kZXggaW4gbWFy a0l0ZW1JbmRleAotCSAqIChhbGwgdGhlIHJlc3Qgb2YgY3VyclBvcyBpcyB2YWxpZCBmb3IgdGhl IG1hcmsgcG9zaXRpb24pLiBIZW5jZSwgdG8KLQkgKiBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBt YXJrLCBmaXJzdCBsb29rIGF0IG1hcmtJdGVtSW5kZXgsIHRoZW4gYXQKLQkgKiBtYXJrUG9zLgot CSAqLwotCWludAkJCW1hcmtJdGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYgbm90IHZh bGlkICovCi0KLQkvKiBrZWVwIHRoZXNlIGxhc3QgaW4gc3RydWN0IGZvciBlZmZpY2llbmN5ICov Ci0JQlRTY2FuUG9zRGF0YSBjdXJyUG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCi0J QlRTY2FuUG9zRGF0YSBtYXJrUG9zOwkJLyogbWFya2VkIHBvc2l0aW9uLCBpZiBhbnkgKi8KIH0g QlRTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFx dWU7CkBAIC0xMTYwLDE0ICsxMDcyLDE3IEBAIGV4dGVybiBib29sIGJ0aW5zZXJ0KFJlbGF0aW9u IHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogZXh0ZXJuIEluZGV4U2NhbkRlc2Mg YnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0 ZXJuIFNpemUgYnRlc3RpbWF0ZXBhcmFsbGVsc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywg aW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gdm9pZCBidGluaXRwYXJhbGxlbHNjYW4odm9pZCAqdGFy Z2V0KTsKLWV4dGVybiBib29sIGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggYnRnZXRiYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkg U2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludDY0IGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRl c2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIHZvaWQgYnRyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSBTY2FuS2V5 IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsKK2V4dGVybiB2b2lkIGJ0a2lsbGl0ZW1zYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCBi dHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsK IGV4dGVybiB2b2lkIGJ0cGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVy biB2b2lkIGJ0ZW5kc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwotZXh0ZXJuIHZvaWQgYnRtYXJr cG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidHJlc3RycG9zKEluZGV4U2Nh bkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBidHBvc3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbiwg SW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqYnRi dWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkgICBJbmRleEJ1bGtE ZWxldGVSZXN1bHQgKnN0YXRzLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNr IGNhbGxiYWNrLApAQCAtMTI3MSw4ICsxMTg2LDkgQEAgZXh0ZXJuIHZvaWQgX2J0X3ByZXByb2Nl c3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogLyoKICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0 aW9ucyBpbiBuYnRyZWFkcGFnZS5jCiAgKi8KLWV4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJIE9mZnNldE51bWJlciBv ZmZudW0sIGJvb2wgZmlyc3RwYWdlKTsKK2V4dGVybiBib29sIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLAorCQkJCQkJIFNjYW5EaXJlY3Rp b24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJIGJvb2wgZmlyc3RwYWdlKTsKIGV4 dGVybiB2b2lkIF9idF9zdGFydF9hcnJheV9rZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludAlfYnRfYmluc3JjaF9hcnJheV9za2V5KEZtZ3JJbmZv ICpvcmRlcnByb2MsCiAJCQkJCQkJCSAgIGJvb2wgY3VyX2VsZW1fdHJpZywgU2NhbkRpcmVjdGlv biBkaXIsCkBAIC0xMjg3LDE1ICsxMjAzLDE1IEBAIGV4dGVybiBCVFN0YWNrIF9idF9zZWFyY2go UmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBCVFNjYW5JbnNlcnQga2V5LAogCQkJCQkJ ICBCdWZmZXIgKmJ1ZlAsIGludCBhY2Nlc3MsIGJvb2wgcmV0dXJuc3RhY2spOwogZXh0ZXJuIE9m ZnNldE51bWJlciBfYnRfYmluc3JjaF9pbnNlcnQoUmVsYXRpb24gcmVsLCBCVEluc2VydFN0YXRl IGluc2VydHN0YXRlKTsKIGV4dGVybiBpbnQzMiBfYnRfY29tcGFyZShSZWxhdGlvbiByZWwsIEJU U2Nhbkluc2VydCBrZXksIFBhZ2UgcGFnZSwgT2Zmc2V0TnVtYmVyIG9mZm51bSk7Ci1leHRlcm4g Ym9vbCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1l eHRlcm4gYm9vbCBfYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhTY2FuQmF0Y2ggX2J0X25leHQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJCQkgICBJbmRleFNjYW5CYXRj aCBwcmlvcmJhdGNoKTsKIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiBy ZWwsIHVpbnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogCiAvKgogICogcHJvdG90eXBlcyBm b3IgZnVuY3Rpb25zIGluIG5idHV0aWxzLmMKICAqLwogZXh0ZXJuIEJUU2Nhbkluc2VydCBfYnRf bWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwKTsKLWV4dGVybiB2b2lkIF9i dF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3Zh Y3V1bV9jeWNsZWlkKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gQlRDeWNsZUlkIF9idF9zdGFydF92 YWN1dW0oUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIF9idF9lbmRfdmFjdXVtKFJlbGF0aW9u IHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBjZTM0MGMwNzYuLjljMTU2M2M4OCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9k ZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNsdWRlICJhY2Nlc3Mvc2Rp ci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWlj cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIKQEAgLTI0LDYgKzI1LDcg QEAKIAogCiBzdHJ1Y3QgUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YTsKK3N0cnVjdCBUdXBsZVRh YmxlU2xvdDsKIAogLyoKICAqIEdlbmVyaWMgZGVzY3JpcHRvciBmb3IgdGFibGUgc2NhbnMuIFRo aXMgaXMgdGhlIGJhc2UtY2xhc3MgZm9yIHRhYmxlIHNjYW5zLApAQCAtMTIyLDggKzEyNCwxNjQg QEAgdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFs bGVsQmxvY2tUYWJsZVNjYW5Xb3JrZXI7CiB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVE YXRhCiB7CiAJUmVsYXRpb24JcmVsOworCisJLyogVGFibGUgQU0gcGVyLWJhdGNoIG9wYXF1ZSBh cmVhIHNpemUgKE1BWEFMSUdOJ2QpLCBzZXQgYnkgQU0gKi8KKwl1aW50MTYJCWJhdGNoX29wYXF1 ZV9zaXplOworCisJLyogUGVyLWl0ZW0gdHJhaWxpbmcgZGF0YSBzaXplIGluIGVhY2ggYmF0Y2gg Ki8KKwl1aW50MTYJCWJhdGNoX3Blcl9pdGVtX3NpemU7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7 CiAKKy8qCisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJdGVtIHRoYXQgYXBwZWFycyBp biBhIEluZGV4U2NhbkJhdGNoIHJldHVybmVkCisgKiBieSAoYW5kIHN1YnNlcXVlbnRseSBwYXNz ZWQgdG8pIGFuIGFtZ2V0YmF0Y2ggcm91dGluZQorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJp bmdJdGVtUG9zCit7CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBhIHZhbGlkIEJhdGNoUmluZ0J1 ZmZlci5iYXRjaGVzW10gZW50cnk/ICovCisJYm9vbAkJdmFsaWQ7CisKKwkvKiBCYXRjaFJpbmdC dWZmZXIuYmF0Y2hlc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8K Kwl1aW50OAkJYmF0Y2g7CisKKwkvKiBJbmRleFNjYW5CYXRjaC5pdGVtc1tdLXdpc2UgaW5kZXgg dG8gcmVsZXZhbnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJCQlpdGVtOworCit9IEJhdGNo UmluZ0l0ZW1Qb3M7CisKKy8qCisgKiBNYXRjaGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0 Y2ggKGluIHJldHVybmVkIEluZGV4U2NhbkJhdGNoKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4u ICBVc2VkIGJ5IHRhYmxlIEFNIHRvIGxvY2F0ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBs ZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRl ckRhdGEgdGFibGVUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIHRhYmxlIGl0ZW0gKi8KKwlPZmZz ZXROdW1iZXIgaW5kZXhPZmZzZXQ7CS8qIGluZGV4IGl0ZW0ncyBsb2NhdGlvbiB3aXRoaW4gcGFn ZSAqLworCUxvY2F0aW9uSW5kZXggdHVwbGVPZmZzZXQ7CS8qIEluZGV4VHVwbGUncyBvZmZzZXQg aW4gd29ya3NwYWNlLCBpZiBhbnkgKi8KK30gQmF0Y2hNYXRjaGluZ0l0ZW07CisKKy8qCisgKiBE YXRhIGFib3V0IG9uZSBiYXRjaCBvZiBpdGVtcyByZXR1cm5lZCBieSAoYW5kIHBhc3NlZCB0bykg YW1nZXRiYXRjaCBkdXJpbmcKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIEVhY2ggYmF0Y2ggYWxs b2NhdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBtZW1vcnkgbGF5b3V0OgorICoKKyAqICAgW3RhYmxl IEFNIG9wYXF1ZSBhcmVhXSAgICA8LSBhdCAtKGJhdGNoX3RhYmxlX29mZnNldCkgZnJvbSBiYXRj aCBwdHIKKyAqICAgW2luZGV4IEFNIG9wYXF1ZSBhcmVhXSAgICA8LSBhdCAtKGJhdGNoX2luZGV4 X29wYXF1ZV9zaXplKSBmcm9tIGJhdGNoIHB0cgorICogICBbSW5kZXhTY2FuQmF0Y2hEYXRhXSAg ICAgIDwtIHRoZSByZXR1cm5lZCBwb2ludGVyCisgKiAgIFtpdGVtc1ttYXhpdGVtc2JhdGNoXV0K KyAqICAgW3RhYmxlIEFNIHRyYWlsaW5nIGRhdGFdICA8LSBlLmcuIHBlci1pdGVtIHZpc2liaWxp dHkgZmxhZ3MKKyAqICAgW2N1cnJUdXBsZXMgd29ya3NwYWNlXSAgICA8LSBzaXplZCBieSBpbmRl eCBBTSAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkKKyAqCisgKiBUaGUgQU0tc3BlY2lmaWMgb3Bh cXVlIGFyZWFzIGFyZSBhY2Nlc3NlZCB2aWEgYWNjZXNzb3IgZnVuY3Rpb25zIGRlZmluZWQgYnkK KyAqIGVhY2ggdGFibGUgQU0gYW5kIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgdGhlIGJhdGNoIGlu dGVyZmFjZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQoreworCVhM b2dSZWNQdHIJbHNuOwkJCS8qIGluZGV4IHBhZ2UncyBMU04gKi8KKworCS8qIHNjYW4gZGlyZWN0 aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ugd2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcjsK KworCS8qCisJICoga25vd25FbmRCYWNrd2FyZCBhbmQga25vd25FbmRGb3J3YXJkIGFyZSBzZXQg YnkgdGhlIHRhYmxlIEFNIHRvCisJICogaW5kaWNhdGUgdGhhdCB0aGlzIGJhdGNoIGlzIHRoZSBs YXN0IG9uZSB3aXRoIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorCSAqIHJlbGV2YW50IHNjYW4gZGly ZWN0aW9uLiAgV2hlbiBhbWdldGJhdGNoIHJldHVybnMgTlVMTCBmb3IgYSBnaXZlbgorCSAqIGRp cmVjdGlvbiwgdGhlIHRhYmxlIEFNIHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBvbiB0aGUg cHJpb3JiYXRjaAorCSAqIHRoYXQgd2FzIHBhc3NlZCB0byB0aGF0IGNhbGwuICBXZSBjYW5ub3Qg a25vdyB0aGlzIHdoZW4gYSBiYXRjaCBpcworCSAqIGZpcnN0IHJldHVybmVkIGJ5IGFtZ2V0YmF0 Y2g7IGl0IG9ubHkgYmVjb21lcyBhcHBhcmVudCB3aGVuIHdlIHRyeSBhbmQKKwkgKiBmYWlsIHRv IGNvbnRpbnVlIHRoZSBzY2FuIHBhc3QgaXQuCisJICoKKwkgKiBUaGlzIGFsbG93cyB0YWJsZSBB TXMgdG8gYXZvaWQgcmVkdW5kYW50IGFtZ2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQorCSAq IHByaW9yYmF0Y2ggLS0gdGhlIGluZGV4IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFs IGluZGV4IHBhZ2VzIHRvCisJICogZGV0ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5n IGl0ZW1zIGJleW9uZCBjYWxsZXIncyBwcmlvcmJhdGNoLgorCSAqLworCWJvb2wJCWtub3duRW5k QmFja3dhcmQ7CisJYm9vbAkJa25vd25FbmRGb3J3YXJkOworCisJLyoKKwkgKiBNYXRjaGluZyBp dGVtcyBzdGF0ZSBmb3IgdGhpcyBiYXRjaC4gIE91dHB1dCBieSBpbmRleCBBTSBmb3IgdGFibGUg QU0uCisJICoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4gaW5kZXgg b3JkZXIgKGllLCBieSBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2Fubmlu ZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCBmb3IgaW5kZXggQU1zCisJICogdG8gZmlsbCB0 aGUgYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3QgaXRlbSBzbG90 IGFuZAorCSAqIGZpbGwgZG93bndhcmRzLiAgVGhpcyBpcyB3aHkgd2UgbmVlZCBib3RoIGEgZmly c3QtdmFsaWQtZW50cnkgYW5kIGEKKwkgKiBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCisJICoK KwkgKiBOb3RlOiB0aGVzZSBhcmUgc2lnbmVkIGJlY2F1c2UgaXQncyBzb21ldGltZXMgY29udmVu aWVudCB0byB1c2UgLTEgdG8KKwkgKiByZXByZXNlbnQgYW4gb3V0LW9mLWJvdW5kcyBzcGFjZSBq dXN0IGJlZm9yZSBmaXJzdEl0ZW0gKHdoZW4gaXQncyAwKS4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0 ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07 CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJvdXQgZGVh ZCBpdGVtcyBpZiBhbnkgKGRlYWRJdGVtcyBpcyBOVUxMIGlmIG5ldmVyIHVzZWQpICovCisJaW50 CQkJbnVtRGVhZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisJaW50 CQkgICAqZGVhZEl0ZW1zOwkJLyogaW5kZXhlcyBvZiBkZWFkIGl0ZW1zICovCisKKwkvKgorCSAq IElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIHRoaXMgaXMgdGhlIHR1cGxlIHN0 b3JhZ2Ugd29ya3NwYWNlCisJICogZm9yIHRoZSBtYXRjaGluZyB0dXBsZXMgKHR1cGxlcyByZWZl cmVuY2VkIGJ5IGl0ZW1zW10pLiAgVGhlIHdvcmtzcGFjZQorCSAqIHNpemUgaXMgZGV0ZXJtaW5l ZCBieSB0aGUgaW5kZXggQU0gKGJhdGNoX3R1cGxlc193b3Jrc3BhY2UpLgorCSAqCisJICogY3Vy clR1cGxlcyBwb2ludHMgaW50byB0aGUgdHJhaWxpbmcgcG9ydGlvbiBvZiB0aGlzIGFsbG9jYXRp b24sIHBhc3QKKwkgKiBpdGVtc1tdIGFuZCBhbnkgdGFibGUgQU0gdHJhaWxpbmcgZGF0YS4gIEl0 IGlzIE5VTEwgZm9yIHBsYWluIGluZGV4CisJICogc2NhbnMuCisJICovCisJY2hhcgkgICAqY3Vy clR1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2UgZm9yIGl0ZW1zW10gKi8KKwlCYXRjaE1hdGNoaW5n SXRlbSBpdGVtc1tGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOyAvKiBtYXRjaGluZyBpdGVtcyAqLwor fSBJbmRleFNjYW5CYXRjaERhdGE7CisKK3R5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0 YSAqSW5kZXhTY2FuQmF0Y2g7CisKKy8qCisgKiBNYXhpbXVtIG51bWJlciBvZiBiYXRjaGVzIChs ZWFmIHBhZ2VzKSB3ZSBjYW4ga2VlcCBpbiBtZW1vcnkuICBXZSBuZWVkIGEKKyAqIG1pbmltdW0g b2YgdHdvLCBzaW5jZSB3ZSdsbCBvbmx5IGNvbnNpZGVyIHJlbGVhc2luZyBvbmUgYmF0Y2ggd2hl biBhbm90aGVyCisgKiBpcyByZWFkLgorICoKKyAqIFRoZSBjdXJyZW50IG1heGltdW0gb2YgNjQg YmF0Y2hlcyBpcyBzb21ld2hhdCBvZiBhbiBhcmJpdHJhcnkgbGltaXQuICBWZXJ5CisgKiBmZXcg c2NhbnMgZXZlciBnZXQgbmVhciB0byB0aGlzIGxpbWl0IGluIHByYWN0aWNlLgorICovCisjZGVm aW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTY0CisjZGVmaW5lIElOREVYX1NDQU5fQ0FDSEVf QkFUQ0hFUwkyCisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5IHRhYmxlIEFNcyB0byBtYW5hZ2UgYW4g aW5kZXggc2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2gKKyAqIGludGVyZmFjZS4gIFNjYW5z IHVzZSBhIHJpbmcgYnVmZmVyIG9mIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKyAq CisgKiBCYXRjaGVzIGFyZSBrZXB0IGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZXR1cm5l ZCBpbiBieSBhbWdldGJhdGNoLAorICogc2luY2UgdGhhdCBpcyB0aGUgc2FtZSBvcmRlciB0aGF0 IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIHJldHVybgorICogbWF0Y2hlcyBpbi4gIEhv d2V2ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0dXBsZXMgaW4gd2hhdGV2 ZXIKKyAqIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQgLS0gcHJvdmlkZWQgdGhh dCBzdWNoIHJlb3JkZXJpbmcgY2Fubm90CisgKiBhZmZlY3QgdGhlIG9yZGVyIHRoYXQgdGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGluLgorICovCit0eXBlZGVm IHN0cnVjdCBCYXRjaFJpbmdCdWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBiYXRj aGVzW10gZm9yIHNjYW4gKi8KKwlCYXRjaFJpbmdJdGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyBy ZWFkIHBvc2l0aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3Rv cmUgcG9zaXRpb24gKi8KKworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaDsKKworCS8qCisJICog aGVhZEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBlYXJsaWVzdCBzdGlsbC12YWxpZCBiYXRjaCBp biAnYmF0Y2hlcycuCisJICogSW4gcHJhY3RpY2UgdGhpcyBtdXN0IGJlIHRoZSBzY2FuJ3MgY3Vy cmVudCBzY2FuUG9zIGJhdGNoIChzY2FuQmF0Y2gpLgorCSAqLworCXVpbnQ4CQloZWFkQmF0Y2g7 CisKKwkvKgorCSAqIG5leHRCYXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBlbXB0eSBiYXRj aCBzbG90IGluICdiYXRjaGVzJy4gIFRoaXMKKwkgKiBpcyBvbmx5IGFjdHVhbGx5IHVzYWJsZSB3 aGVuIHRoZSBzY2FuIGlzICFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoKS4KKwkgKi8KKwl1aW50OAkJ bmV4dEJhdGNoOworCisJLyogQXJyYXkgb2YgcG9pbnRlcnMgdG8gY2FjaGVkIHJlY3ljbGFibGUg YmF0Y2hlcyAqLworCUluZGV4U2NhbkJhdGNoIGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hF U107CisKKwkvKiBBcnJheSBvZiBwb2ludGVycyB0byByaW5nIGJ1ZmZlciBiYXRjaGVzICovCisJ SW5kZXhTY2FuQmF0Y2ggYmF0Y2hlc1tJTkRFWF9TQ0FOX01BWF9CQVRDSEVTXTsKKworfSBCYXRj aFJpbmdCdWZmZXI7CisKIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCkBA IC0xNDEsNiArMjk5LDIwIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJaW50 CQkJbnVtYmVyT2ZPcmRlckJ5czsJLyogbnVtYmVyIG9mIG9yZGVyaW5nIG9wZXJhdG9ycyAqLwog CXN0cnVjdCBTY2FuS2V5RGF0YSAqa2V5RGF0YTsJLyogYXJyYXkgb2YgaW5kZXggcXVhbGlmaWVy IGRlc2NyaXB0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICpvcmRlckJ5RGF0YTsJLyogYXJy YXkgb2Ygb3JkZXJpbmcgb3AgZGVzY3JpcHRvcnMgKi8KKworCS8qIGluZGV4IGFjY2VzcyBtZXRo b2QncyBwcml2YXRlIHN0YXRlICovCisJdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1tZXRo b2Qtc3BlY2lmaWMgaW5mbyAqLworCisJLyogdGFibGUgYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUg YW1nZXRiYXRjaCBzdGF0ZSAqLworCUJhdGNoUmluZ0J1ZmZlciBiYXRjaHJpbmdidWY7CS8qIGFt Z2V0YmF0Y2ggcmVsYXRlZCBzdGF0ZSAqLworCisJYm9vbAkJdXNlYmF0Y2hyaW5nOwkvKiBzY2Fu IHVzZXMgYW1nZXRiYXRjaC9iYXRjaHJpbmdidWY/ICovCisJYm9vbAkJYmF0Y2hJbW1lZGlhdGVV bmd1YXJkOwkvKiBkcm9wIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIGluCisJCQkJCQkJCQkJICog aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jaz8gKi8KKworCS8qIENhY2hlZCBiYXRjaCBmb3IgYW1n ZXRiaXRtYXAgY2FsbGVycyAoYXZvaWRzIHJlcGVhdGVkIGFsbG9jL2ZyZWUpICovCisJSW5kZXhT Y2FuQmF0Y2ggeHNfYml0bWFwX2JhdGNoOworCiAJYm9vbAkJeHNfd2FudF9pdHVwOwkvKiBjYWxs ZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNfdGVtcF9zbmFwOwkvKiB1bnJl Z2lzdGVyIHNuYXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0xNDksOSArMzIxLDggQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlib29sCQlpZ25vcmVfa2lsbGVkX3R1cGxl czsJLyogZG8gbm90IHJldHVybiBraWxsZWQgZW50cmllcyAqLwogCWJvb2wJCXhhY3RTdGFydGVk SW5SZWNvdmVyeTsJLyogcHJldmVudHMga2lsbGluZy9zZWVpbmcga2lsbGVkCiAJCQkJCQkJCQkJ ICogdHVwbGVzICovCi0KLQkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAq LwotCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8K KwkvKiB4c19zbmFwc2hvdCB1c2VzIGFuIE1WQ0Mgc25hcHNob3Q/ICovCisJYm9vbAkJTVZDQ1Nj YW47CiAKIAkvKgogCSAqIEluc3RydW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFs bCBpbmRleCBBTXMgZHVyaW5nIGJvdGgKQEAgLTE2MCwxMCArMzMxLDEwIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW5zdHJ1bWVudDsKIAogCS8qCi0JICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhIHN1Y2Nlc3Nm dWwgYW1nZXR0dXBsZSBjYWxsIG11c3QgZmlsbCBlaXRoZXIKLQkgKiB4c19pdHVwIChhbmQgeHNf aXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0byBwcm92aWRlIHRoZQot CSAqIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBpbiB3aGlj aCBjYXNlIHRoZSBoZWFwCi0JICogZm9ybWF0IHdpbGwgYmUgdXNlZC4KKwkgKiBJbiBhbiBpbmRl eC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgY2FsbCBt dXN0CisJICogZmlsbCBlaXRoZXIgeHNfaXR1cCAoYW5kIHhzX2l0dXBkZXNjKSBvciB4c19oaXR1 cCAoYW5kIHhzX2hpdHVwZGVzYykgdG8KKwkgKiBwcm92aWRlIHRoZSBkYXRhIHJldHVybmVkIGJ5 IHRoZSBzY2FuLiAgSXQgY2FuIGZpbGwgYm90aCwgaW4gd2hpY2ggY2FzZQorCSAqIHRoZSBoZWFw IGZvcm1hdCB3aWxsIGJlIHVzZWQuCiAJICovCiAJSW5kZXhUdXBsZQl4c19pdHVwOwkJLyogaW5k ZXggdHVwbGUgcmV0dXJuZWQgYnkgQU0gKi8KIAlzdHJ1Y3QgVHVwbGVEZXNjRGF0YSAqeHNfaXR1 cGRlc2M7CS8qIHJvd3R5cGUgZGVzY3JpcHRvciBvZiB4c19pdHVwICovCkBAIC0xNzEsMTEgKzM0 MiwyMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCXN0cnVjdCBUdXBsZURl c2NEYXRhICp4c19oaXR1cGRlc2M7IC8qIHJvd3R5cGUgZGVzY3JpcHRvciBvZiB4c19oaXR1cCAq LwogCiAJSXRlbVBvaW50ZXJEYXRhIHhzX2hlYXB0aWQ7IC8qIHJlc3VsdCAqLwotCWJvb2wJCXhz X2hlYXBfY29udGludWU7CS8qIFQgaWYgbXVzdCBrZWVwIHdhbGtpbmcsIHBvdGVudGlhbAotCQkJ CQkJCQkJICogZnVydGhlciByZXN1bHRzICovCiAJSW5kZXhGZXRjaFRhYmxlRGF0YSAqeHNfaGVh cGZldGNoOwogCisJLyogUmVzb2x2ZWQgZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uLCBzZXQg YnkgaW5kZXhfYmVnaW5zY2FuICovCisJYm9vbAkJKCp4c19nZXRuZXh0X3Nsb3QpIChzdHJ1Y3Qg SW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sCisJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlv biwKKwkJCQkJCQkJCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAlib29sCQl4c19y ZWNoZWNrOwkJLyogVCBtZWFucyBzY2FuIGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwl1aW50 MTYJCW1heGl0ZW1zYmF0Y2g7CS8qIHNldCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2gg dXNlZCAqLworCisJLyogUGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHNpemVzLCBzZXQgYnkgaW5kZXgg QU0gaW4gYW1iZWdpbnNjYW4gKi8KKwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9zaXplOwkv KiBNQVhBTElHTidkIGluZGV4IEFNIG9wYXF1ZSBzaXplICovCisJdWludDE2CQliYXRjaF90dXBs ZXNfd29ya3NwYWNlOyAvKiBjdXJyVHVwbGVzIHdvcmtzcGFjZSBzaXplICovCisKKwkvKiBDb21w dXRlZCBvZmZzZXQgZnJvbSBiYXRjaCBwb2ludGVyIHRvIHRhYmxlIEFNIG9wYXF1ZSAoaW5jbHVk ZXMgYm90aCkgKi8KKwl1aW50MTYJCWJhdGNoX3RhYmxlX29mZnNldDsKIAogCS8qCiAJICogV2hl biBmZXRjaGluZyB3aXRoIGFuIG9yZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBP UkRFUiBCWQpAQCAtMjAyLDggKzM4NCw2IEBAIHR5cGVkZWYgc3RydWN0IFBhcmFsbGVsSW5kZXhT Y2FuRGVzY0RhdGEKIAljaGFyCQlwc19zbmFwc2hvdF9kYXRhW0ZMRVhJQkxFX0FSUkFZX01FTUJF Ul07CiB9CQkJUGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YTsKIAotc3RydWN0IFR1cGxlVGFibGVT bG90OwotCiAvKiBTdHJ1Y3QgZm9yIHN0b3JhZ2Utb3ItaW5kZXggc2NhbnMgb2Ygc3lzdGVtIHRh YmxlcyAqLwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhCiB7CkBAIC0yMTUsNCArMzk1 LDEyNCBAQCB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVUYWJs ZVNsb3QgKnNsb3Q7CiB9IFN5c1NjYW5EZXNjRGF0YTsKIAorLyoKKyAqIFJldHVybiB0aGUgdHJ1 ZSBhbGxvY2F0aW9uIGJhc2Ugb2YgYSBiYXRjaCAoYWNjb3VudGluZyBmb3IgQU0gb3BhcXVlIGFy ZWFzCisgKiBzdG9yZWQgYmVmb3JlIHRoZSBJbmRleFNjYW5CYXRjaERhdGEgcG9pbnRlcikuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqCitiYXRjaF9hbGxvY19iYXNlKEluZGV4U2NhbkJhdGNo IGJhdGNoLCBJbmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gKGNoYXIgKikgYmF0 Y2ggLSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7Cit9CisKKy8qCisgKiBDb3VudCBob3cgbWFu eSBiYXRjaGVzIGFyZSBjdXJyZW50bHkgbG9hZGVkIGluIHRoZSByaW5nIGJ1ZmZlci4KKyAqLwor c3RhdGljIGlubGluZSB1aW50OAoraW5kZXhfc2Nhbl9iYXRjaF9jb3VudChJbmRleFNjYW5EZXNj RGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gKHVpbnQ4KSAoc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRC YXRjaCAtCisJCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2gpOworfQorCisvKgorICog RGlkIHdlIGFscmVhZHkgbG9hZCBiYXRjaCB3aXRoIHRoZSByZXF1ZXN0ZWQgaW5kZXg/CisgKi8K K3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoSW5kZXhTY2FuRGVz Y0RhdGEgKnNjYW4sIHVpbnQ4IGlkeCkKK3sKKwlyZXR1cm4gKGludDgpIChpZHggLSBzY2FuLT5i YXRjaHJpbmdidWYuaGVhZEJhdGNoKSA+PSAwICYmCisJCShpbnQ4KSAoaWR4IC0gc2Nhbi0+YmF0 Y2hyaW5nYnVmLm5leHRCYXRjaCkgPCAwOworfQorCisvKgorICogSGF2ZSB3ZSBsb2FkZWQgdGhl IG1heGltdW0gbnVtYmVyIG9mIGJhdGNoZXM/CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5k ZXhfc2Nhbl9iYXRjaF9mdWxsKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiBp bmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IElOREVYX1NDQU5fTUFYX0JBVENIRVM7Cit9 CisKKy8qCisgKiBSZXR1cm4gYmF0Y2ggZm9yIHRoZSBwcm92aWRlZCBpbmRleC4KKyAqLworc3Rh dGljIGlubGluZSBJbmRleFNjYW5CYXRjaAoraW5kZXhfc2Nhbl9iYXRjaChJbmRleFNjYW5EZXNj RGF0YSAqc2NhbiwgdWludDggaWR4KQoreworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoX2xvYWRl ZChzY2FuLCBpZHgpKTsKKworCXJldHVybiBzY2FuLT5iYXRjaHJpbmdidWYuYmF0Y2hlc1tpZHgg JiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpXTsKK30KKworLyoKKyAqIEFwcGVuZCBnaXZl biBiYXRjaCB0byBzY2FuJ3MgYmF0Y2ggcmluZyBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZAoraW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCUJhdGNoUmluZ0J1ZmZlciAqcmluZ2J1ZiA9ICZzY2Fu LT5iYXRjaHJpbmdidWY7CisJdWludDgJCW5leHRCYXRjaCA9IHJpbmdidWYtPm5leHRCYXRjaDsK KworCXJpbmdidWYtPmJhdGNoZXNbbmV4dEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMg LSAxKV0gPSBiYXRjaDsKKwlyaW5nYnVmLT5uZXh0QmF0Y2grKzsKK30KKworLyoKKyAqIEFkdmFu Y2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2guCisgKgorICogQWR2YW5j ZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUgcHJvdmlkZWQgYmF0Y2ggKG9yIHRvIHRoZSBw cmV2aW91cyBpdGVtLAorICogd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIFJldHVy bnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY291bGQgYmUgYWR2YW5jZWQuICBSZXR1cm5zIGZhbHNl IHdoZW4gdGhlcmUKKyAqIGFyZSBubyBtb3JlIGl0ZW1zIGluIHRoZSBiYXRjaCBpbiB0aGUgZ2l2 ZW4gZGlyZWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fcG9zX2Fk dmFuY2UoU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJh dGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJQXNzZXJ0KHBvcy0+dmFsaWQpOworCisJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCWlmICgrK3Bvcy0+ aXRlbSA+IGJhdGNoLT5sYXN0SXRlbSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZQkJCQkJ CS8qIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkICovCisJeworCQlpZiAoLS1wb3MtPml0ZW0gPCBi YXRjaC0+Zmlyc3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIEFkdmFuY2VkIHdp dGhpbiBiYXRjaCAqLworCXJldHVybiB0cnVlOworfQorCisvKgorICogQWR2YW5jZSBiYXRjaCBw b3NpdGlvbiB0byB0aGUgc3RhcnQgb2YgaXRzIG5ldyBiYXRjaC4KKyAqCisgKiBTZXRzIHRoZSBn aXZlbiBwb3NpdGlvbiB0byB0aGUgZmlzdCBpdGVtIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlv biAob3IgdG8KKyAqIHRoZSBsYXN0IGl0ZW0sIHdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzKS4gICBB bHNvIGFkdmFuY2VzL2luY3JlbWVudHMgYmF0Y2gKKyAqIG9mZnNldCBmcm9tIHBvc2l0aW9uIHN1 Y2ggdGhhdCBpdCBwb2ludHMgdG8gbmV3QmF0Y2hGb3JQb3MuCisgKi8KK3N0YXRpYyBpbmxpbmUg dm9pZAoraW5kZXhfc2Nhbl9wb3NfbmV4dGJhdGNoKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkJIEluZGV4U2NhbkJhdGNoIG5ld0JhdGNoLCBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7 CisJQXNzZXJ0KG5ld0JhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCS8qIEluY3JlbWVudCBi YXRjaCAob2Z0ZW4gd3JhcHMgdWludDggYmF0Y2ggZmllbGQpICovCisJaWYgKHBvcy0+dmFsaWQp CisJCXBvcy0+YmF0Y2grKzsKKwllbHNlCisJCXBvcy0+YmF0Y2ggPSAwOworCisJcG9zLT52YWxp ZCA9IHRydWU7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCQlw b3MtPml0ZW0gPSBuZXdCYXRjaC0+Zmlyc3RJdGVtOworCWVsc2UKKwkJcG9zLT5pdGVtID0gbmV3 QmF0Y2gtPmxhc3RJdGVtOworfQorCiAjZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9IICovCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3RhYmxlYW0uaAppbmRleCAwNjA4NDc1MjIuLjc5NWE5YmU1NCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5o CkBAIC00MzMsMTEgKzQzMyw0OCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAq LwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEg KmRhdGEpOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1 ZSBhcmVhIHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRpb24uCisJICoKKwkgKiBDYWxsZWQgYnkgaW5k ZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKwkg KiBUYWJsZSBBTXMgc2hvdWxkIHNldCB1cCBpdHMgb3BhcXVlIGFyZWEgKGF0IGEgbmVnYXRpdmUg b2Zmc2V0IGZyb20gdGhlCisJICogYmF0Y2ggcG9pbnRlcikgYW5kIGFueSB0cmFpbGluZyBwZXIt aXRlbSBkYXRhIChlLmcuIHZpc2liaWxpdHkgZmxhZ3MpLgorCSAqCisJICogJ25ld19hbGxvYycg aXMgdHJ1ZSBmb3IgZnJlc2hseSBwYWxsb2MnZCBiYXRjaGVzLCBmYWxzZSBmb3IgYmF0Y2hlcwor CSAqIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlLgorCSAqLworCXZvaWQJCSgqaW5kZXhfYmF0Y2hf aW5pdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJ CQkgYm9vbCBuZXdfYWxsb2MpOworCisJLyoKKwkgKiBGZXRjaCB0aGUgbmV4dCB0dXBsZSBmcm9t IGFuIGluZGV4IHNjYW4sIHNjYW5uaW5nIGluIHRoZSBzcGVjaWZpZWQKKwkgKiBkaXJlY3Rpb24s IGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgor CSAqCisJICogRm91ciB2YXJpYW50cyBjb3ZlciB0aGUge3BsYWluLCBpbmRleC1vbmx5fSB4IHth bWdldHR1cGxlLCBhbWdldGJhdGNofQorCSAqIG1hdHJpeC4gIGluZGV4X2JlZ2luc2NhbiByZXNv bHZlcyB3aGljaCB2YXJpYW50IHRvIHVzZS4gIENhbGxlcnMgdXNlCisJICogdGFibGVfaW5kZXhf Z2V0bmV4dF9zbG90KCksIHdoaWNoIGNhbGxzIHRocm91Z2ggdGhhdCBwb2ludGVyIGRpcmVjdGx5 LgorCSAqLworCWJvb2wJCSgqaW5kZXhfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCk7CisJYm9vbAkJKCppbmRleF9iYXRjaF9nZXRuZXh0X3Nsb3QpIChJ bmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK KwkJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwlib29sCQkoKmluZGV4X29ubHlf Z2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQlTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCWJvb2wJ CSgqaW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3QpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJ CQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCk7CisKIAkvKgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8g YHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBg c25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5 CiAJICogdGVzdCwgcmV0dXJuIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMg aXMgYSBsb3dlci1sZXZlbCBjYWxsYmFjayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxl ci4KKwkgKiBDYWxsZXJzIHNob3VsZCBmYXZvciB0aGUgaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxi YWNrIHdoZW5ldmVyIHBvc3NpYmxlLgorCSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5v dCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRv IG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBv ZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlm IHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBAIC0xMjA3LDYgKzEyNDQsMzMgQEAgdGFibGVfaW5kZXhf ZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCXNjYW4tPnJlbC0+ cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCisvKgorICogSW5pdGlhbGl6 ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0 aW9uLgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2gg bmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX2lu ZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwg Ym9vbCBuZXdfYWxsb2MpCit7CisJc2Nhbi0+aGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRl eF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLCBuZXdfYWxsb2MpOworfQorCisvKgorICogRmV0Y2gg dGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBp biB0aGUKKyAqIHNwZWNpZmllZCBkaXJlY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHdh cyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIERpc3BhdGNoZXMgdGhyb3VnaCBzY2Fu LT54c19nZXRuZXh0X3Nsb3QsIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgYnkKKyAqIGluZGV4X2Jl Z2luc2Nhbi4KKyAqCisgKiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQg cmVjaGVjayBzY2FuIGtleXMgaWYgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAor dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2MgaXNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXJldHVybiBp c2Nhbi0+eHNfZ2V0bmV4dF9zbG90KGlzY2FuLCBkaXJlY3Rpb24sIHNsb3QpOworfQorCiAvKgog ICogRmV0Y2hlcywgYXMgcGFydCBvZiBhbiBpbmRleCBzY2FuLCB0dXBsZSBhdCBgdGlkYCBpbnRv IGBzbG90YCwgYWZ0ZXIgZG9pbmcKICAqIGEgdmlzaWJpbGl0eSB0ZXN0IGFjY29yZGluZyB0byBg c25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkCkBAIC0xMjMwLDYgKzEy OTQsOSBAQCB0YWJsZV9pbmRleF9mZXRjaF9lbmQoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEg KnNjYW4pCiAgKiBlbnRyeSAobGlrZSBoZWFwJ3MgSE9UKS4gV2hlcmVhcyB0YWJsZV90dXBsZV9m ZXRjaF9yb3dfdmVyc2lvbigpIG9ubHkKICAqIGV2YWx1YXRlcyB0aGUgdHVwbGUgZXhhY3RseSBh dCBgdGlkYC4gT3V0c2lkZSBvZiBpbmRleCBlbnRyeSAtPnRhYmxlIHR1cGxlCiAgKiBsb29rdXBz LCB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lvbigpIGlzIHdoYXQncyB1c3VhbGx5IG5lZWRl ZC4KKyAqCisgKiBUaGlzIGlzIGEgbG93ZXItbGV2ZWwgaW50ZXJmYWNlIHRoYXQgdGFrZXMgYSBU SUQgZnJvbSB0aGUgY2FsbGVyLiAgQ2FsbGVycworICogc2hvdWxkIGZhdm9yIHRoZSB0YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3QgaW50ZXJmYWNlIHdoZW5ldmVyIHBvc3NpYmxlLgogICovCiBzdGF0 aWMgaW5saW5lIGJvb2wKIHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNo VGFibGVEYXRhICpzY2FuLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1 bWVudF9ub2RlLmggYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaAppbmRl eCA4ODQ3ZDdmOTQuLmI1YjhmNTA5YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3Iv aW5zdHJ1bWVudF9ub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5zdHJ1bWVudF9u b2RlLmgKQEAgLTQ4LDYgKzQ4LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nhbkluc3RydW1l bnRhdGlvbgogewogCS8qIEluZGV4IHNlYXJjaCBjb3VudCAoaW5jcmVtZW50ZWQgd2l0aCBwZ3N0 YXRfY291bnRfaW5kZXhfc2NhbiBjYWxsKSAqLwogCXVpbnQ2NAkJbnNlYXJjaGVzOworCisJLyoK KwkgKiBoZWFwIGJsb2NrcyBmZXRjaGVkIGNvdW50cyAoaW5jcmVtZW50ZWQgYnkgaW5kZXhfZ2V0 bmV4dF9zbG90IGNhbGxzCisJICogd2l0aGluIHRhYmxlIEFNcywgdGhvdWdoIG9ubHkgZHVyaW5n IGluZGV4LW9ubHkgc2NhbnMpCisJICovCisJdWludDY0CQluaGVhcGZldGNoZXM7CiB9IEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXggNTg2YmRj MjE5Li41OTNhNzcxMDggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xNzYzLDcgKzE3NjMsNiBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5TdGF0ZQogICoJCUluc3RydW1lbnQJCSAgIGxvY2Fs IGluZGV4IHNjYW4gaW5zdHJ1bWVudGF0aW9uCiAgKgkJU2hhcmVkSW5mbwkJICAgcGFyYWxsZWwg d29ya2VyIGluc3RydW1lbnRhdGlvbiAobm8gbGVhZGVyIGVudHJ5KQogICoJCVRhYmxlU2xvdAkJ ICAgc2xvdCBmb3IgaG9sZGluZyB0dXBsZXMgZmV0Y2hlZCBmcm9tIHRoZSB0YWJsZQotICoJCVZN QnVmZmVyCQkgICBidWZmZXIgaW4gdXNlIGZvciB2aXNpYmlsaXR5IG1hcCB0ZXN0aW5nLCBpZiBh bnkKICAqCQlQc2NhbkxlbgkJICAgc2l6ZSBvZiBwYXJhbGxlbCBpbmRleC1vbmx5IHNjYW4gZGVz Y3JpcHRvcgogICoJCU5hbWVDU3RyaW5nQXR0TnVtcyBhdHRudW1zIG9mIG5hbWUgdHlwZWQgY29s dW1ucyB0byBwYWQgdG8gTkFNRURBVEFMRU4KICAqCQlOYW1lQ1N0cmluZ0NvdW50ICAgbnVtYmVy IG9mIGVsZW1lbnRzIGluIHRoZSBOYW1lQ1N0cmluZ0F0dE51bXMgYXJyYXkKQEAgLTE3ODYsNyAr MTc4NSw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T25seVNjYW5TdGF0ZQogCUluZGV4U2Nhbklu c3RydW1lbnRhdGlvbiAqaW9zc19JbnN0cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1l bnRhdGlvbiAqaW9zc19TaGFyZWRJbmZvOwogCVR1cGxlVGFibGVTbG90ICppb3NzX1RhYmxlU2xv dDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZmZXI7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRy TnVtYmVyICppb3NzX05hbWVDU3RyaW5nQXR0TnVtczsKIAlpbnQJCQlpb3NzX05hbWVDU3RyaW5n Q291bnQ7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDI3NzU4ZWMxNi4uMDY2MWZjMDNkIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaApAQCAtMTQyNSwxMiArMTQyNSwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJ bmRleE9wdEluZm8KIAlib29sCQlhbW9wdGlvbmFsa2V5OwogCWJvb2wJCWFtc2VhcmNoYXJyYXk7 CiAJYm9vbAkJYW1zZWFyY2hudWxsczsKLQkvKiBkb2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRl cmZhY2U/ICovCi0JYm9vbAkJYW1oYXNnZXR0dXBsZTsKKwkvKiBkb2VzIEFNIGhhdmUgYW1nZXRi YXRjaCAob3IgZ2V0dHVwbGUpIGludGVyZmFjZT8gKi8KKwlib29sCQlhbWhhc2dldGJhdGNoOwog CS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJpdG1hcCBpbnRlcmZhY2U/ICovCiAJYm9vbAkJYW1oYXNn ZXRiaXRtYXA7CiAJYm9vbAkJYW1jYW5wYXJhbGxlbDsKLQkvKiBkb2VzIEFNIGhhdmUgYW1tYXJr cG9zIGludGVyZmFjZT8gKi8KKwkvKiBpcyBBTSBwcmVwYXJlZCBmb3IgdXMgdG8gcmVzdG9yZSBh IG1hcms/ICovCiAJYm9vbAkJYW1jYW5tYXJrcG9zOwogCS8qIEFNJ3MgY29zdCBlc3RpbWF0b3Ig Ki8KIAkvKiBSYXRoZXIgdGhhbiBpbmNsdWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNv c3Rlc3RpbWF0ZSBsaWtlIHRoaXMgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9i cmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCAyYTBmOGM4 ZTMuLjBiNDM5NjUwZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwpAQCAtMjk4LDEwICsyOTgsMTIg QEAgYnJpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJl Z2luc2NhbiwKIAkJLmFtcmVzY2FuID0gYnJpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxM LAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJ LmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcCwK IAkJLmFtZW5kc2NhbiA9IGJyaW5lbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFt cmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFy YWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBh cmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2luZ2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCmluZGV4IDZiMTQ4ZTY5 YS4uOGY3MDMzZDYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5 IEBAIGdpbmdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAq IGludG8gdGhlIG1haW4gaW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0 aW1lIGR1cmluZyB0aGUKIAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSds bCBqdXN0IHJlLXNldCB0aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3Nz aWJpbGl0eSBvZiBkdXBsaWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkg KiBjYW4ndCBzdXBwb3J0IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBp dCB3b3VsZCBub3QgZG8KLQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVu ZGluZyBsaXN0LCBzaW5jZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2Ug dXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBh bWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90 IGRvIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNl CisJICogY29uY3VycmVudCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMg ZW50aXJlbHkuCiAJICovCiAJc2NhblBlbmRpbmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmluZGV4IGZlN2I5ODRmZi4uNzEwZjNmOWMyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtODIsMTAgKzgyLDEyIEBAIGdpbmhhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2FuLAogCQkuYW1yZXNj YW4gPSBnaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBO VUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5V TEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpbmVu ZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5h bXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQku YW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4IDg1NjVlMjI1Yi4uYTQ4NGM4YjJhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdC5jCkBAIC0xMDMsMTAgKzEwMywxMiBAQCBnaXN0aGFuZGxlcihQR19GVU5DVElP Tl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBnaXN0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBn aXN0cmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IGdpc3RnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2gg PSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9 IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdpc3RnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBn aXN0ZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwK KwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEws CiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5V TEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggNmRmNWU3Y2NiLi4zMmRhZGViZWIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTExNCwxMCArMTE0LDEyIEBAIGhhc2hoYW5kbGVyKFBHX0ZV TkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2Nh biA9IGhhc2hyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gaGFzaGdldHR1cGxlLAorCQkuYW1nZXRi YXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJh dGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2Nh biA9IGhhc2hlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBO VUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2Fu ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGNm ZTQ2ODlhOC4uYjhjYzNkMzljIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5k bGVyLmMKQEAgLTE5LDYgKzE5LDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNp bmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKICNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNs dWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXB0b2FzdC5oIgpAQCAt ODUsOSArODYsMTAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKIAlJ bmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhlYXBE YXRhKTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfY2J1ZiA9IElu dmFsaWRCdWZmZXI7CisJaHNjYW4tPnhzX2Jhc2UuYmF0Y2hfb3BhcXVlX3NpemUgPSBNQVhBTElH TihzaXplb2YoSGVhcEJhdGNoRGF0YSkpOworCWhzY2FuLT54c19iYXNlLmJhdGNoX3Blcl9pdGVt X3NpemUgPSBzaXplb2YodWludDgpOyAvKiB2aXNJbmZvIGVsZW1lbnQgc2l6ZSAqLwogCWhzY2Fu LT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52 YWxpZEJ1ZmZlcjsKKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwogCiAJcmV0dXJuICZoc2Nhbi0+ eHNfYmFzZTsKIH0KQEAgLTk3LDE4ICs5OSwxNSBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQo SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2Fu ID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCi0JaWYgKEJ1ZmZlcklzVmFsaWQoaHNj YW4tPnhzX2NidWYpKQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7Ci0JCWhz Y2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQl9CisJLyogUmVzY2FucyBzaG91bGQgYXZv aWQgYW4gZXhjZXNzaXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCisJaHNjYW4tPnhzX3ZtX2l0 ZW1zID0gMTsKIAotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCi0Jewot CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7Ci0JCWhzY2FuLT54c192bWJ1ZmZl ciA9IEludmFsaWRCdWZmZXI7Ci0JfQotCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CisJLyoKKwkgKiBEZWxpYmVyYXRlbHkgYXZvaWQgZHJvcHBpbmcgcGlucyBub3cgaGVsZCBp biB4c19jYnVmIGFuZCB4c192bWJ1ZmZlci4KKwkgKiBUaGlzIHNhdmVzIGN5Y2xlcyBkdXJpbmcg Y2VydGFpbiB0aWdodCBuZXN0ZWQgbG9vcCBqb2lucywgYW5kIGR1cmluZworCSAqIG1lcmdlIGpv aW5zIHRoYXQgZnJlcXVlbnRseSByZXN0b3JlIGEgc2F2ZWQgbWFyay4gIEl0IGNhbiBhbHNvIGF2 b2lkCisJICogcmVwZWF0ZWQgcGlubmluZyBhbmQgdW5waW5uaW5nIG9mIHRoZSBzYW1lIGJ1ZmZl ciBhY3Jvc3MgcmVzY2Fucy4KKwkgKi8KIH0KIAogc3RhdGljIHZvaWQKQEAgLTExNiwxNyArMTE1 LDU5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK IHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBz Y2FuOwogCi0JaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOworCS8qIGRyb3AgcGluIGlm IHRoZXJlJ3MgYSBwaW5uZWQgaGVhcCBwYWdlICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4t PnhzX2NidWYpKQorCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKKworCS8qIGRyb3Ag cGluIGlmIHRoZXJlJ3MgYSBwaW5uZWQgdmlzaWJpbGl0eSBtYXAgcGFnZSAqLworCWlmIChCdWZm ZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhz X3ZtYnVmZmVyKTsKIAogCXBmcmVlKGhzY2FuKTsKIH0KIAotc3RhdGljIGJvb2wKKy8qCisgKiBJ bml0aWFsaXplIHRoZSBoZWFwIHRhYmxlIEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIChIZWFw QmF0Y2hEYXRhKS4KKyAqCisgKiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZv ciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRjaC4KKyAqIFNldHMgdXAgdGhlIHZpc0luZm8gcG9p bnRlciBmb3IgaW5kZXgtb25seSBzY2Fucywgb3IgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0YXRp YyB2b2lkCitoZWFwYW1faW5kZXhfYmF0Y2hfaW5pdChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoLAorCQkJCQkJYm9vbCBuZXdfYWxsb2MpCit7CisJSGVhcEJhdGNoRGF0 YSAqaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKGJhdGNoLCBzY2FuKTsKKworCWlmIChzY2FuLT54 c193YW50X2l0dXApCisJeworCQlpZiAobmV3X2FsbG9jKQorCQl7CisJCQkvKgorCQkJICogUG9p bnQgdmlzSW5mbyBpbnRvIHRoZSB0cmFpbGluZyBwZXItaXRlbSBhcmVhIHRoYXQgZm9sbG93cwor CQkJICogaXRlbXNbXSBpbiB0aGUgYmF0Y2ggYWxsb2NhdGlvbi4KKwkJCSAqLworCQkJU2l6ZQkJ aXRlbXNFbmQ7CisKKwkJCWl0ZW1zRW5kID0gTUFYQUxJR04ob2Zmc2V0b2YoSW5kZXhTY2FuQmF0 Y2hEYXRhLCBpdGVtcykgKworCQkJCQkJCQlzaXplb2YoQmF0Y2hNYXRjaGluZ0l0ZW0pICogc2Nh bi0+bWF4aXRlbXNiYXRjaCk7CisJCQloYmF0Y2gtPnZpc0luZm8gPSAodWludDggKikgKChjaGFy ICopIGJhdGNoICsgaXRlbXNFbmQpOworCQl9CisKKwkJLyogQ2xlYXIgdmlzaWJpbGl0eSBmbGFn cyAobmVlZGVkIGZvciBib3RoIG5ldyBhbmQgcmVjeWNsZWQgYmF0Y2hlcykgKi8KKwkJbWVtc2V0 KGhiYXRjaC0+dmlzSW5mbywgMCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJfQorCWVsc2UKKwl7 CisJCWhiYXRjaC0+dmlzSW5mbyA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgcGdfYXR0cmlidXRl X2Fsd2F5c19pbmxpbmUgYm9vbAogaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRl eEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKIAkJCQkJCSBT bmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCSBi b29sICpjYWxsX2FnYWluLCBib29sICphbGxfZGVhZCkKKwkJCQkJCSBib29sICpoZWFwX2NvbnRp bnVlLCBib29sICphbGxfZGVhZCkKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKElu ZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCUJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAqYnNs b3QgPSAoQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICopIHNsb3Q7CkBAIC0xMzcsMTEgKzE3OCwx NyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEg KnNjYW4sCiAJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2Un cmUgb24gdGhlIHNhbWUgcGFnZS4gKi8KIAlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCkpCiAJewotCQlBc3NlcnQoISpjYWxsX2FnYWluKTsKKwkJQXNz ZXJ0KCEqaGVhcF9jb250aW51ZSk7CiAKIAkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9j ayBudW1iZXIgZm9yIG5leHQgdGltZSAqLwogCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJH ZXRCbG9ja051bWJlcih0aWQpOwogCisJCS8qCisJCSAqIERyb3AgdGhlIHhzX2JsayBwaW4gaW5k ZXBlbmRlbnRseSBoZWxkIG9uIGJ5IHNsb3QgKGlmIGFueSkgbm93LiBTZWUKKwkJICogY29tbWVu dHMgYXJvdW5kIEV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSBjYWxsIGJlbG93LgorCQkg Ki8KKwkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKIAkJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4t PnhzX2NidWYpKQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKQEAgLTE2NSw3 ICsyMTIsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCiAJCQkJCQkJCQkJCXNuYXBzaG90LAogCQkJCQkJCQkJCQkmYnNsb3QtPmJh c2UudHVwZGF0YSwKIAkJCQkJCQkJCQkJYWxsX2RlYWQsCi0JCQkJCQkJCQkJCSEqY2FsbF9hZ2Fp bik7CisJCQkJCQkJCQkJCSEqaGVhcF9jb250aW51ZSk7CiAJYnNsb3QtPmJhc2UudHVwZGF0YS50 X3NlbGYgPSAqdGlkOwogCUxvY2tCdWZmZXIoaHNjYW4tPnhzX2NidWYsIEJVRkZFUl9MT0NLX1VO TE9DSyk7CiAKQEAgLTE3NSwyMCArMjIyLDc0MiBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUo c3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCSAqIE9ubHkgaW4gYSBub24tTVZD QyBzbmFwc2hvdCBjYW4gbW9yZSB0aGFuIG9uZSBtZW1iZXIgb2YgdGhlIEhPVAogCQkgKiBjaGFp biBiZSB2aXNpYmxlLgogCQkgKi8KLQkJKmNhbGxfYWdhaW4gPSAhSXNNVkNDTGlrZVNuYXBzaG90 KHNuYXBzaG90KTsKKwkJKmhlYXBfY29udGludWUgPSAhSXNNVkNDTGlrZVNuYXBzaG90KHNuYXBz aG90KTsKIAogCQlzbG90LT50dHNfdGFibGVPaWQgPSBSZWxhdGlvbkdldFJlbGlkKHNjYW4tPnJl bCk7Ci0JCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2UudHVwZGF0YSwgc2xv dCwgaHNjYW4tPnhzX2NidWYpOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgVElE IG9uIHRoZSBjdXJyZW50IGhlYXAgYmxvY2sgd2l0aGluIHRoZSBiYXRjaCwKKwkJICogdHJhbnNm ZXIgb3VyIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgcmF0aGVyIHRoYW4gaGF2aW5nIHRoZSBzbG90 CisJCSAqIGluY3JlbWVudCB0aGUgcGluIGNvdW50LiAgVGhpcyBzYXZlcyBhIHBhaXIgb2YgSW5j ckJ1ZmZlclJlZkNvdW50CisJCSAqIGFuZCBSZWxlYXNlQnVmZmVyIGNhbGxzLCBzaW5jZSB0aGUg Y2FsbGVyIHdvdWxkIGp1c3QgcmVsZWFzZSBpdHMKKwkJICogcGluIG9uIHhzX2NidWYgd2hlbiBz d2l0Y2hpbmcgdG8gdGhlIG5leHQgYmxvY2sgYW55d2F5LgorCQkgKgorCQkgKiBXZSBjYW4gb25s eSBkbyB0aGlzIHdoZW4gaGVhcF9jb250aW51ZSBpcyBmYWxzZSwgc2luY2Ugb3RoZXJ3aXNlCisJ CSAqIHRoZSBjYWxsZXIgd2lsbCBuZWVkIHhzX2NidWYgdG8gcmVtYWluIHZhbGlkIGZvciB0aGUg bmV4dCBjYWxsLgorCQkgKi8KKwkJaWYgKGhzY2FuLT54c19sYXN0aW5ibG9jayAmJiAhKmhlYXBf Y29udGludWUpCisJCXsKKwkJCUV4ZWNTdG9yZVBpbm5lZEJ1ZmZlckhlYXBUdXBsZSgmYnNsb3Qt PmJhc2UudHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCQkgICBoc2Nhbi0+eHNfY2J1Zik7CisJCQlo c2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCQloc2Nhbi0+eHNfYmxrID0gSW52YWxp ZEJsb2NrTnVtYmVyOworCisJCQkvKgorCQkJICogTm90ZTogdGhlIHBpbiBub3cgb3duZWQgYnkg dGhlIHNsb3QgaXMgZXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQKKwkJCSAqIG9uIHRoZSBuZXh0IGNh bGwgaGVyZSwgdmlhIGFuIGV4cGxpY2l0IEV4ZWNDbGVhclR1cGxlLiAgVGhpcworCQkJICogYXZv aWRzIGNodXJuIGluIHRoZSBiYWNrZW5kJ3MgcHJpdmF0ZSByZWZjb3VudCBjYWNoZS4KKwkJCSAq LworCQl9CisJCWVsc2UKKwkJCUV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZSgmYnNsb3QtPmJhc2Uu dHVwZGF0YSwgc2xvdCwKKwkJCQkJCQkJCSBoc2Nhbi0+eHNfY2J1Zik7CiAJfQogCWVsc2UKIAl7 CiAJCS8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgSE9UIGNoYWluLiAqLwotCQkqY2Fs bF9hZ2FpbiA9IGZhbHNlOworCQkqaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCX0KIAogCXJldHVy biBnb3RfaGVhcF90dXBsZTsKIH0KIAorLyoKKyAqIGhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2li aWxpdHkKKyAqCQlPYnRhaW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgYSBUSUQgZnJvbSBj YWxsZXIncyBiYXRjaC4KKyAqCisgKiBDYWxsZWQgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMuICBX ZSBhbHdheXMgY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgY2FsbGVyJ3MKKyAqIGl0ZW0gKGFuIG9m ZnNldCBpbnRvIGNhbGxlcidzIGJhdGNoLT5pdGVtc1tdIGFycmF5KS4gIFdlIG1pZ2h0IGFsc28g c2V0CisgKiB2aXNpYmlsaXR5IGluZm8gZm9yIG90aGVyIGl0ZW1zIGZyb20gY2FsbGVyJ3MgYmF0 Y2ggbW9yZSBwcm9hY3RpdmVseSB3aGVuCisgKiB0aGF0IG1ha2VzIHNlbnNlLgorICoKKyAqIFdl IGtlZXAgdHdvIGNvbXBldGluZyBjb25zaWRlcmF0aW9ucyBpbiBiYWxhbmNlIHdoZW4gZGV0ZXJt aW5pbmcgd2hldGhlciB0bworICogY2hlY2sgYWRkaXRpb25hbCBpdGVtczogdGhlIG5lZWQgdG8g a2VlcCB0aGUgY29zdCBvZiB2aXNpYmlsaXR5IG1hcCBhY2Nlc3MKKyAqIHVuZGVyIGNvbnRyb2wg d2hlbiBtb3N0IGl0ZW1zIHdpbGwgbmV2ZXIgYmUgcmV0dXJuZWQgYnkgdGhlIHNjYW4gYW55d2F5 CisgKiAoaW1wb3J0YW50IGZvciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBz ZW1pLWpvaW5zKSwgYW5kIHRoZQorICogbmVlZCB0byBub3QgaG9sZCBvbnRvIGluZGV4IGxlYWYg cGFnZXMgZm9yIHRvbyBsb25nLgorICoKKyAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVj dHMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiB2aXNpYmlsaXR5 bWFwX2dldF9zdGF0dXMgZG9lcyBub3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBh bmQKKyAqIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQgaGVyZSBjb3VsZCBiZSBzbGlnaHRs eSBzdGFsZS4gIEhvd2V2ZXIsIGl0CisgKiBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVy LgorICoKKyAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBp bnNlcnQgcmlnaHQgYXdheSwgYmVjYXVzZQorICogdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhl IGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxlLiAgVGhlIHJlYWRpbmcgb2YgdGhlCisgKiBUSUQg YnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleCBidWZmZXIpIGlz IHNlcmlhbGl6ZWQKKyAqIHdpdGggdGhlIGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4 ICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUKKyAqIGluZGV4IGJ1ZmZlcikuICBCZWNh dXNlIHRoZSBWTSBiaXQgaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4LAorICog YW5kIGxvY2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1l bW9yeSBiYXJyaWVyLCB3ZQorICogYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCBpZiB3 ZSBzZWUgYSByZWNlbnRseS1pbnNlcnRlZCBUSUQuCisgKgorICogRGVsZXRlcyBkbyBub3QgdXBk YXRlIHRoZSBpbmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dCB0aGUgVElEKSwK KyAqIHNvIHRoZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIG5vdCBzZXJp YWxpemVkIHdpdGggdGhpcyB0ZXN0CisgKiBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0 aGF0IGlzIHNpZ25pZmljYW50bHkgc3RhbGUuICBIb3dldmVyLCB3ZQorICogZG9uJ3QgY2FyZSBh Ym91dCB0aGUgZGVsZXRlIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHN0aWxsIHZp c2libGUKKyAqIHVudGlsIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBz dGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKKyAqIHRyYW5zYWN0aW9uKS4gIEluIGVpdGhlciBj YXNlLCB0aGUgbG9jayBvbiB0aGUgVk0gYnVmZmVyIHdpbGwgaGF2ZSBiZWVuCisgKiByZWxlYXNl ZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4gIEFu ZCBmb3IgdXMgdG8KKyAqIGhhdmUgYSBzbmFwc2hvdCB0aGF0IGluY2x1ZGVzIHRoZSBkZWxldGlu ZyB0cmFuc2FjdGlvbiAobWFraW5nIHRoZSB0dXBsZQorICogaW52aXNpYmxlKSwgd2UgbXVzdCBo YXZlIGFjcXVpcmVkIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMKKyAq IGEgcmVhZCBiYXJyaWVyLgorICoKKyAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNv bXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrIHRoZSBWTQorICogYnVmZmVyLCB3aGlj aCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgorICovCitzdGF0aWMgdm9pZAor aGVhcGFtX2JhdGNoX3Jlc29sdmVfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQlJbmRleFNjYW5CYXRjaCBiYXRjaCwgSGVhcEJh dGNoRGF0YSAqaGJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNf aGVhcGZldGNoOworCWludAkJCXBvc0l0ZW0gPSBwb3MtPml0ZW07CisJaW50CQkJbm9TZXRJdGVt LAorCQkJCXN0ZXA7CisJYm9vbAkJYWxsYmF0Y2hpdGVtdmlzaWJsZTsKKwlCbG9ja051bWJlciBj dXJ2bWhlYXBibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKKwl1aW50OAkJY3Vydm1oZWFwYmxr ZmxhZ3MgPSAwOworCisJQXNzZXJ0KGhiYXRjaCA9PSBoZWFwX2JhdGNoX2RhdGEoYmF0Y2gsIHNj YW4pKTsKKworCS8qCisJICogV2UgYmV0dGVyIHN0aWxsIGhhdmUgdGhlIFRJRCByZWN5Y2xpbmcg aW50ZXJsb2NrIChnZW5lcmFsbHkgYSBwaW4gb24KKwkgKiB0aGUgYmF0Y2gncyBpbmRleCBwYWdl KSAtLSBhbXVuZ3VhcmRiYXRjaCBoYXMgbm90IGJlZW4gY2FsbGVkIHlldAorCSAqLworCUFzc2Vy dCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKworCS8qIERldGVybWluZSB0aGUgcmFu Z2Ugb2YgaXRlbXMgdG8gc2V0IHZpc2liaWxpdHkgZm9yICovCisJaWYgKFNjYW5EaXJlY3Rpb25J c0ZvcndhcmQoZGlyZWN0aW9uKSkKKwl7CisJCW5vU2V0SXRlbSA9IE1pbihiYXRjaC0+bGFzdEl0 ZW0gKyAxLCBwb3NJdGVtICsgaHNjYW4tPnhzX3ZtX2l0ZW1zKTsKKwkJYWxsYmF0Y2hpdGVtdmlz aWJsZSA9IG5vU2V0SXRlbSA+IGJhdGNoLT5sYXN0SXRlbSAmJgorCQkJKHBvc0l0ZW0gPT0gYmF0 Y2gtPmZpcnN0SXRlbSB8fAorCQkJIChoYmF0Y2gtPnZpc0luZm9bYmF0Y2gtPmZpcnN0SXRlbV0g JiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKSk7CisJCXN0ZXAgPSAxOworCX0KKwllbHNlCisJewor CQlub1NldEl0ZW0gPSBNYXgoYmF0Y2gtPmZpcnN0SXRlbSAtIDEsIHBvc0l0ZW0gLSBoc2Nhbi0+ eHNfdm1faXRlbXMpOworCQlhbGxiYXRjaGl0ZW12aXNpYmxlID0gbm9TZXRJdGVtIDwgYmF0Y2gt PmZpcnN0SXRlbSAmJgorCQkJKHBvc0l0ZW0gPT0gYmF0Y2gtPmxhc3RJdGVtIHx8CisJCQkgKGhi YXRjaC0+dmlzSW5mb1tiYXRjaC0+bGFzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkp OworCQlzdGVwID0gLTE7CisJfQorCisJLyoKKwkgKiBTZXQgdmlzaWJpbGl0eSBpbmZvIGZvciBh IHJhbmdlIG9mIGl0ZW1zLCBpbiBzY2FuIG9yZGVyLgorCSAqCisJICogbm9TZXRJdGVtIGlzIHRo ZSBmaXJzdCBpdGVtIChpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24pIHRoYXQgd29uJ3QgYmUK KwkgKiBzZXQgZHVyaW5nIHRoaXMgY2FsbC4gIG5vU2V0SXRlbSBvZnRlbiBwb2ludHMgdG8ganVz dCBwYXN0IHRoZSBlbmQgb2YKKwkgKiAob3IganVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mKSB0aGUg YmF0Y2gncyAnaXRlbXMnIGFycmF5LgorCSAqCisJICogV2UgaXRlcmF0ZSB0aGlzIHdheSB0byBh dm9pZCB0aGUgbmVlZCBmb3IgMiBkaXJlY3Rpb24tc3BlY2lmaWMgbG9vcHMsCisJICogc2luY2Ug dGhpcyBpcyBhIGhvdCBjb2RlIHBhdGggdGhhdCdzIHNlbnNpdGl2ZSB0byBjb2RlIHNpemUgaW5j cmVhc2VzLgorCSAqLworCWZvciAoaW50IHNldEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVtICE9IG5v U2V0SXRlbTsgc2V0SXRlbSArPSBzdGVwKQorCXsKKwkJSXRlbVBvaW50ZXIgdGlkID0gJmJhdGNo LT5pdGVtc1tzZXRJdGVtXS50YWJsZVRpZDsKKwkJQmxvY2tOdW1iZXIgaGVhcGJsa25vID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCQl1aW50OAkJZmxhZ3M7CisKKwkJaWYgKGhl YXBibGtubyA9PSBjdXJ2bWhlYXBibGtubykKKwkJeworCQkJLyogY29udGlndW91cyBoZWFwIGJs b2NrIC0tIGp1c3QgcmV1c2UgbGFzdCBpdGVtJ3MgZmxhZ3MgKi8KKwkJCWhiYXRjaC0+dmlzSW5m b1tzZXRJdGVtXSA9IGN1cnZtaGVhcGJsa2ZsYWdzOworCQkJY29udGludWU7CisJCX0KKworCQlm bGFncyA9IEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQ7CisJCWlmIChWTV9BTExfVklTSUJMRShzY2Fu LT5oZWFwUmVsYXRpb24sIGhlYXBibGtubywgJmhzY2FuLT54c192bWJ1ZmZlcikpCisJCQlmbGFn cyB8PSBIRUFQX0JBVENIX1ZJU19BTExfVklTSUJMRTsKKworCQloYmF0Y2gtPnZpc0luZm9bc2V0 SXRlbV0gPSBjdXJ2bWhlYXBibGtmbGFncyA9IGZsYWdzOworCQljdXJ2bWhlYXBibGtubyA9IGhl YXBibGtubzsKKwl9CisKKwkvKgorCSAqIEl0J3Mgc2FmZSB0byBkcm9wIHRoZSBiYXRjaCdzIGlu ZGV4IEFNIHJlc291cmNlcyBhcyBzb29uIGFzIHdlJ3ZlCisJICogcmVzb2x2ZWQgdGhlIHZpc2li aWxpdHkgc3RhdHVzIG9mIGFsbCBvZiBpdHMgaXRlbXMKKwkgKi8KKwlpZiAoYWxsYmF0Y2hpdGVt dmlzaWJsZSAmJiBzY2FuLT5NVkNDU2NhbikKKwl7CisJCUFzc2VydChoYmF0Y2gtPnZpc0luZm9b YmF0Y2gtPmZpcnN0SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsKKwkJQXNzZXJ0KGhi YXRjaC0+dmlzSW5mb1tiYXRjaC0+bGFzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7 CisKKwkJdGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8q CisJICogRWxzZSBjaGVjayB2aXNpYmlsaXR5IGZvciB0d2ljZSBhcyBtYW55IGl0ZW1zIG5leHQg dGltZSwgb3IgYWxsIGl0ZW1zLgorCSAqIFdlIGNoZWNrIGFsbCBpdGVtcyBpbiBvbmUgZ28gb25j ZSB3ZSdyZSBwYXNzZWQgdGhlIHNjYW4ncyBmaXJzdCBiYXRjaC4KKwkgKi8KKwllbHNlIGlmICho c2Nhbi0+eHNfdm1faXRlbXMgPCAoYmF0Y2gtPmxhc3RJdGVtIC0gYmF0Y2gtPmZpcnN0SXRlbSkp CisJCWhzY2FuLT54c192bV9pdGVtcyAqPSAyOworCWVsc2UKKwkJaHNjYW4tPnhzX3ZtX2l0ZW1z ID0gc2Nhbi0+bWF4aXRlbXNiYXRjaDsKK30KKworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgor aGVhcGFtX2JhdGNoX3JldHVybl90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVh cERhdGEgKmhzY2FuLAorCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEluZGV4U2NhbkJh dGNoIHNjYW5CYXRjaCwKKwkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsIGJvb2wgKmFs bF92aXNpYmxlKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRjaDsKKworCXBnc3RhdF9jb3VudF9p bmRleF90dXBsZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgMSk7CisKKwkvKiBTZXQgeHNfaGVhcHRp ZCwgd2hpY2ggaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIG5lZWQgKi8KKwlzY2FuLT54 c19oZWFwdGlkID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50YWJsZVRpZDsKKwor CWlmIChhbGxfdmlzaWJsZSA9PSBOVUxMKQorCXsKKwkJaW50CQkJbmV4dEl0ZW07CisJCWJvb2wJ CWhhc05leHQ7CisKKwkJLyoKKwkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICoKKwkJICogRGV0 ZXJtaW5lIGlmIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gaXMg b24gYQorCQkgKiBkaWZmZXJlbnQgaGVhcCBibG9jay4gIFdoZW4gaXQgaXMsIGhlYXBhbV9pbmRl eF9mZXRjaF90dXBsZSBjYW4KKwkJICogdHJhbnNmZXIgaXRzIGJ1ZmZlciBwaW4gdG8gdGhlIHNs b3QgaW5zdGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHBpbgorCQkgKiBjb3VudCwgc2F2aW5nIGEg cGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBjYWxscy4KKwkJICoKKwkJ ICogTm90ZTogV2UgY2Fubm90IGRvIHRoaXMgZm9yIGluZGV4LW9ubHkgc2NhbnMgYmVjYXVzZSBh bGwtdmlzaWJsZQorCQkgKiBpdGVtcyBhcmUgc2tpcHBlZCBieSBib3RoIHRoZSBzY2FuIGFuZCB0 aGUgcmVhZCBzdHJlYW0gY2FsbGJhY2suCisJCSAqIFNraXBwZWQgaXRlbXMgY2FuIGJyZWFrIHRo ZSBibG9jayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5IGJldHdlZW4KKwkJICogdGhlIHN0cmVhbSBh bmQgdGhlIHNjYW46IHRoZSBzdHJlYW0gZGVkdXBsaWNhdGVzIGNvbnNlY3V0aXZlCisJCSAqIG5v bi1hbGwtdmlzaWJsZSBpdGVtcyBieSBibG9jaywgYnV0IGFmdGVyIGludmFsaWRhdGluZyB4c19i bGsgdGhlCisJCSAqIHNjYW4gd291bGQgdHJ5IHRvIHJlLWZldGNoIGEgYmxvY2sgdGhhdCB0aGUg c3RyZWFtIGFscmVhZHkgcmV0dXJuZWQKKwkJICogYW5kIGRlZHVwbGljYXRlZCBhd2F5LgorCQkg Ki8KKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJbmV4 dEl0ZW0gPSBzY2FuUG9zLT5pdGVtICsgMTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0gc2Nh bkJhdGNoLT5sYXN0SXRlbSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Q b3MtPml0ZW0gLSAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0 SXRlbSk7CisJCX0KKworCQloc2Nhbi0+eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJCQlJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50YWJs ZVRpZCkgIT0KKwkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQp OworCisJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwl9CisKKwkvKgorCSAqIEluZGV4LW9u bHkgc2Nhbi4KKwkgKgorCSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGhlYXBhbV9pbmRleF9n ZXRuZXh0X3Nsb3QgbmVlZHMgdG9vLgorCSAqLworCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBs ZSkgKHNjYW5CYXRjaC0+Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tz Y2FuUG9zLT5pdGVtXS50dXBsZU9mZnNldCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGlu Zm8gZm9yIHRoZSBjdXJyZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3NzaWJseSBzb21lCisJICog YWRkaXRpb25hbCBpdGVtcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVk CisJICovCisJaGJhdGNoID0gaGVhcF9iYXRjaF9kYXRhKHNjYW5CYXRjaCwgc2Nhbik7CisJaWYg KCEoaGJhdGNoLT52aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tF RCkpCisJCWhlYXBhbV9iYXRjaF9yZXNvbHZlX3Zpc2liaWxpdHkoc2NhbiwgZGlyZWN0aW9uLCBz Y2FuQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQlzY2FuUG9zKTsKKworCS8qIEZpbmFsbHksIHNl dCBhbGxfdmlzaWJsZSBmb3IgaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCAqLworCSphbGxfdmlz aWJsZSA9CisJCShoYmF0Y2gtPnZpc0luZm9bc2NhblBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJ U19BTExfVklTSUJMRSkgIT0gMDsKKworCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKK30KKwor LyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBhbV9iYXRjaF9nZXRuZXh0IC0gZ2V0IHRoZSBu ZXh0IGJhdGNoIG9mIFRJRHMgZnJvbSBhIHNjYW4KKyAqCisgKiBDYWxsZWQgd2hlbiB3ZSBuZWVk IHRvIGxvYWQgdGhlIG5leHQgYmF0Y2ggb2YgaW5kZXggZW50cmllcyB0byBwcm9jZXNzIGluCisg KiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyB1cyBhIGJhdGNoIGFuZCBhIGJh dGNoIHBvc2l0aW9uLCB3aGljaAorICogaGFzIGp1c3QgYmVlbiB1c2VkIHRvIHJlYWQgYWxsIGl0 ZW1zIGZyb20gdGhlIGJhdGNoIGluIHRoZSBkaXJlY3Rpb24gcGFzc2VkCisgKiBieSBjYWxsZXIu CisgKgorICogUmV0dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIGlu ZGV4IHNjYW4sIG9yIE5VTEwgd2hlbgorICogdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcyBpbiB0 aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBEb2VzIG5vdCBhZHZhbmNlCisgKiBjYWxsZXIncyBi YXRjaCBwb3NpdGlvbjsgdGhhdCBpcyBsZWZ0IHVwIHRvIGNhbGxlci4KKyAqCisgKiBUaGlzIGlz IGFsc28gd2hlcmUgYmF0Y2hlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHNjYW4ncyByaW5nIGJ1ZmZl ci4gIFdlCisgKiBkb24ndCBmcmVlIGFueSBiYXRjaGVzIGhlcmUsIHRob3VnaDsgdGhhdCBpcyBh bHNvIGxlZnQgdXAgdG8gY2FsbGVyLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMg cGdfYXR0cmlidXRlX2hvdCBJbmRleFNjYW5CYXRjaAoraGVhcGFtX2JhdGNoX2dldG5leHQoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJIEluZGV4U2Nh bkJhdGNoIHByaW9yQmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNjYW5C YXRjaCBiYXRjaCA9IE5VTEw7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNF RF9GT1JfQVNTRVJUU19PTkxZID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKworCS8qIFhYWDogd2Ug c2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8K KwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCisJaWYgKCFwcmlv ckJhdGNoKQorCXsKKwkJLyogRmlyc3QgY2FsbCBmb3IgdGhlIHNjYW4gKi8KKwkJQXNzZXJ0KHBv cyA9PSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsKKwl9CisJZWxzZSBpZiAodW5saWtlbHkocHJp b3JCYXRjaC0+ZGlyICE9IGRpcmVjdGlvbikpCisJeworCQkvKgorCQkgKiBXZSBkZXRlY3RlZCBh IGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbiBhY3Jvc3MgYmF0Y2hlcy4gIFByZXBhcmUKKwkJICog c2NhbidzIGJhdGNocmluZ2J1ZiBzdGF0ZSBmb3IgdXMgdG8gZ2V0IHRoZSBuZXh0IGJhdGNoIGZv ciB0aGUKKwkJICogb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8gdGhlIG9uZSB1c2VkIHdoZW4g cHJpb3JCYXRjaCB3YXMKKwkJICogcmV0dXJuZWQgYnkgYW1nZXRiYXRjaC4KKwkJICovCisJCXRh YmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2Uoc2Nhbik7CisKKwkJLyogcHJpb3JCYXRjaCBpcyBu b3cgYmF0Y2hyaW5nYnVmJ3Mgb25seSBiYXRjaCAqLworCQlBc3NlcnQocG9zLT5iYXRjaCA9PSBi YXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisJCUFzc2VydChpbmRleF9zY2FuX2JhdGNoX2NvdW50 KHNjYW4pID09IDEpOworCX0KKwllbHNlIGlmIChpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2Fu LCBwb3MtPmJhdGNoICsgMSkpCisJeworCQkvKiBOZXh0IGJhdGNoIGFscmVhZHkgbG9hZGVkIGZv ciB1cyAqLworCQliYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcG9zLT5iYXRjaCArIDEp OworCisJCUFzc2VydChwcmlvckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJh dGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJcmV0dXJuIGJhdGNoOworCX0KKworCS8qCisJICog QXNzZXJ0IHByZWNvbmRpdGlvbnMgZm9yIGNhbGxpbmcgYW1nZXRiYXRjaC4KKwkgKgorCSAqIHBy aW9yQmF0Y2ggaGFkIGJldHRlciBiZSBmb3IgdGhlIGxhc3QgdmFsaWQgYmF0Y2ggY3VycmVudGx5 IGluIHRoZSByaW5nCisJICogYnVmZmVyIChiYXRjaGVzIG11c3Qgc3RheSBpbiBzY2FuIG9yZGVy KS4gIElmIGl0IGlzbid0IHRoZW4gd2Ugc2hvdWxkCisJICogaGF2ZSBhbHJlYWR5IHJldHVybmVk IHNvbWUgZXhpc3RpbmcgbG9hZGVkIGJhdGNoIGVhcmxpZXIuCisJICovCisJQXNzZXJ0KCFpbmRl eF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCUFzc2VydCghcHJpb3JCYXRjaCB8fAorCQkgICAo aW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+IDAgJiYgcHJpb3JCYXRjaC0+ZGlyID09IGRp cmVjdGlvbiAmJgorCQkJaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPm5leHRC YXRjaCAtIDEpID09IHByaW9yQmF0Y2gpKTsKKworCS8qCisJICogQmVmb3JlIHdlIGNhbGwgYW1n ZXRiYXRjaCBhZ2FpbiwgY2hlY2sgaWYgcHJpb3JCYXRjaCBpcyBhbHJlYWR5IGtub3duCisJICog dG8gYmUgdGhlIGxhc3QgYmF0Y2ggd2l0aCBtYXRjaGluZyBpdGVtcyBpbiB0aGlzIHNjYW4gZGly ZWN0aW9uCisJICovCisJaWYgKHByaW9yQmF0Y2ggJiYKKwkJKChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcmVjdGlvbikgJiYgcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkKSB8fAorCQkgKFNj YW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcmVjdGlvbikgJiYgcHJpb3JCYXRjaC0+a25vd25FbmRC YWNrd2FyZCkpKQorCQlyZXR1cm4gTlVMTDsKKworCWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlv bi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2NhbiwgcHJpb3JCYXRjaCwKKwkJCQkJCQkJCQkJCQkg IGRpcmVjdGlvbik7CisJaWYgKGJhdGNoKQorCXsKKwkJLyogV2UgZ290IHRoZSBiYXRjaCBmcm9t IHRoZSBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCisJCS8qIEFw cGVuZCBiYXRjaCB0byB0aGUgZW5kIG9mIHJpbmcgYnVmZmVyL3dyaXRlIGl0IHRvIGJ1ZmZlciBp bmRleCAqLworCQlpbmRleF9zY2FuX2JhdGNoX2FwcGVuZChzY2FuLCBiYXRjaCk7CisJfQorCWVs c2UKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggcmV0dXJuZWQgTlVMTCAqLworCQlpZiAocHJpb3JCYXRj aCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZXJlIGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMgdG8gYmUg Zm91bmQgaW4gdGhlIGN1cnJlbnQgc2NhbgorCQkJICogZGlyZWN0aW9uLCBmb2xsb3dpbmcgcHJp b3JCYXRjaC4gIFJlbWVtYmVyIHRoYXQgcHJpb3JCYXRjaCBpcworCQkJICogdGhlIGxhc3QgYmF0 Y2ggd2l0aCBtYXRjaGluZyBpdGVtcy4KKwkJCSAqLworCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0Zv cndhcmQoZGlyZWN0aW9uKSkKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZEZvcndhcmQgPSB0cnVl OworCQkJZWxzZQorCQkJCXByaW9yQmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSB0cnVlOworCQl9 CisJfQorCisJLyogeHNfaGl0dXAgaXNuJ3QgY3VycmVudGx5IHN1cHBvcnRlZCBieSBhbWdldGJh dGNoIHNjYW5zICovCisJQXNzZXJ0KCFzY2FuLT54c19oaXR1cCk7CisKKwlyZXR1cm4gYmF0Y2g7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQg LSBnZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlcgorICoKKyAqIEdldCB0aGUgbmV4 dCBUSUQgZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJpbmcgYnVmZmVyLCB3aGVuIG1vdmluZyBpbiB0 aGUKKyAqIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCitz dGF0aWMgcGdfYXR0cmlidXRlX2hvdCBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJdGVtUG9p bnRlcgoraGVhcGFtX2JhdGNoX2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhG ZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCSBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9v bCAqYWxsX3Zpc2libGUpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nh bi0+YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5n YnVmLT5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IE5VTEw7CisKKwlBc3Nl cnQoIXNjYW5Qb3MtPnZhbGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3Mt PmJhdGNoKTsKKwlBc3NlcnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3Vu dChzY2FuKSA9PSAwKTsKKwlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54c193 YW50X2l0dXApOworCisJLyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRl ZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0ZW0n cyBUSUQvaW5kZXggdHVwbGUgZnJvbQorCSAqLworCWlmIChzY2FuUG9zLT52YWxpZCkKKwl7CisJ CS8qCisJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUg bG9hZGVkIGluIGJhdGNoIHJpbmcKKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUu CisJCSAqLworCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0 Y2gpOworCisJCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0 Y2gpOworCisJCWlmIChpbmRleF9zY2FuX3Bvc19hZHZhbmNlKGRpcmVjdGlvbiwgc2NhbkJhdGNo LCBzY2FuUG9zKSkKKwkJCXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChzY2FuLCBoc2Nh biwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBvcywKKwkJCQkJCQkJ CQkgICBhbGxfdmlzaWJsZSk7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgcmFuIG91dCBvZiBpdGVt cyBmcm9tIG91ciBleGlzdGluZyBzY2FuQmF0Y2gsIG9yIGl0IGhhc24ndCBiZWVuCisJICogbG9h ZGVkIHlldCAoYmVjYXVzZSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRp cmUgc2NhbikuCisJICogVHJ5IHRvIGFkdmFuY2Ugc2NhbkJhdGNoIHRvIHRoZSBuZXh0IGJhdGNo IChvciBnZXQgdGhlIGZpcnN0IGJhdGNoKS4KKwkgKi8KKwlzY2FuQmF0Y2ggPSBoZWFwYW1fYmF0 Y2hfZ2V0bmV4dChzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcyk7CisKKwlpZiAo IXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGRvbmU7IG5vIG1vcmUgYmF0Y2hlcyBp biB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkJICoKKwkJICogTm90ZTogc2NhblBvcyBp cyBnZW5lcmFsbHkgc3RpbGwgdmFsaWQgYXQgdGhpcyBwb2ludC4gIFRoZSBzY2FuCisJCSAqIG1p Z2h0IHN0aWxsIGJhY2sgdXAgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkJICovCisJCXJldHVy biBOVUxMOworCX0KKworCS8qCisJICogQWR2YW5jZWQgc2NhbkJhdGNoLiAgTm93IHBvc2l0aW9u IHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldworCSAqIHNjYW5CYXRjaC4KKwkgKi8KKwlpbmRl eF9zY2FuX3Bvc19uZXh0YmF0Y2goZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Qb3MpOworCUFz c2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKSA9PSBzY2FuQmF0Y2gp OworCisJLyoKKwkgKiBSZW1vdmUgdGhlIGhlYWQgYmF0Y2ggZnJvbSB0aGUgYmF0Y2ggcmluZyBi dWZmZXIgKGV4Y2VwdCB3aGVuIHRoaXMgbmV3CisJICogc2NhbkJhdGNoIGlzIG91ciBvbmx5IG9u ZSkKKwkgKi8KKwlpZiAoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gp CisJeworCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4s CisJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJCS8qIGZyZWUgb2Jz b2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCisJ CXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CisKKwkJLyogUmVtb3Zl IHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZlciAqLworCQliYXRjaHJpbmdidWYtPmhlYWRC YXRjaCsrOworCX0KKworCS8qIEluIHByYWN0aWNlIHNjYW5CYXRjaCB3aWxsIGFsd2F5cyBiZSB0 aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KKwlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFk QmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJcmV0dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5f dGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcywKKwkJCQkJCQkJ ICAgYWxsX3Zpc2libGUpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcGFtX2lu ZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKKyAqCisgKiBU aGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5k ZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQgYnkgb3VyIGNhbGxlciBpbiBzY2FuLT54 c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAqIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4g IChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlCisgKiBv ZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hv dWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRoYW4gb25lIHN1Y2ggdHVwbGUgdG8gZXhp c3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0 dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisgKiBkcm9wcGVkIGVsc2V3aGVyZS4KKyAq IC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgcGdfYXR0cmli dXRlX2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCWJvb2wgKmhlYXBfY29udGlu dWUsIGJvb2wgdXNlYmF0Y2hyaW5nKQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9v bAkJZm91bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19o ZWFwZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhzX3NuYXBzaG90 LCBzbG90LAorCQkJCQkJCQkJIGhlYXBfY29udGludWUsICZhbGxfZGVhZCk7CisKKwlpZiAoZm91 bmQpCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOworCisJ LyoKKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRl YWQgdHVwbGVzLCByZW1lbWJlciBpdAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5vdCBkbyB0aGlz IHdoZW4gaW4gcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1WQ0MgdG8gZG8g c28uICBTZWUgY29tbWVudHMgaW4gUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKwkgKi8KKwlpZiAo IXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKKwl7CisJCWlmICh1c2ViYXRjaHJpbmcpCisJ CXsKKwkJCWlmIChhbGxfZGVhZCkKKwkJCQl0YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShz Y2FuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBUZWxsIGFtZ2V0dHVwbGUtYmFz ZWQgaW5kZXggQU0gdG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElECisJCQkgKiAodGhpcyB3 aWxsIHRha2UgZWZmZWN0IGluIHRoZSBuZXh0IGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKQor CQkJICovCisJCQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisJCX0KKwl9CisK KwlyZXR1cm4gZm91bmQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1faW5k ZXhfZ2V0bmV4dF9zbG90IC0gcGxhaW4gaW5kZXggc2NhbiwgYW1nZXR0dXBsZSBwYXRoCisgKgor ICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlz IGFuZCB0aGUgc25hcHNob3Qgd2FzCisgKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1 cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3QuCisgKgorICogT24gc3VjY2Vzcywg cmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3 aWxsIGJlCisgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRlciBj YWxsIHRvIGluZGV4X2VuZHNjYW4pLgorICoKKyAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNj YW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCisgKiBzY2FuIGtl eXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qg aGF2ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBn ZW5lcmFsIGNhc2UuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1 dGVfaG90IGJvb2wKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3Qp Cit7CisJSXRlbVBvaW50ZXIgdGlkOworCWJvb2wJCWhlYXBfY29udGludWUgPSBmYWxzZTsKKwor CWZvciAoOzspCisJeworCQlpZiAoIWhlYXBfY29udGludWUpCisJCXsKKwkJCXRpZCA9IGluZGV4 X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7CisKKwkJCS8qIElmIHdlJ3JlIG91dCBvZiBp bmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJYnJl YWs7CisJCX0KKworCQkvKgorCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJsZSBo ZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24ndCBmaW5kIGFu eXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQorCQkgKiB0aGUg aW5kZXguCisJCSAqLworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFw dGlkKSk7CisJCWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90LCAmaGVhcF9j b250aW51ZSwgZmFsc2UpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcGFtX2luZGV4X2JhdGNoX2dldG5leHRf c2xvdCAtIHBsYWluIGluZGV4IHNjYW4sIGFtZ2V0YmF0Y2ggcGF0aAorICoKKyAqIExpa2UgaGVh cGFtX2luZGV4X2dldG5leHRfc2xvdCwgYnV0IHVzZXMgdGhlIGJhdGNoIHJpbmcgYnVmZmVyIHRv IGdldCBUSURzCisgKiBmcm9tIHRoZSBpbmRleCBBTSBpbnN0ZWFkIG9mIGFtZ2V0dHVwbGUuCisg KiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfaG90IGJvb2wKK2hl YXBhbV9pbmRleF9iYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNf aGVhcGZldGNoOworCUl0ZW1Qb2ludGVyIHRpZDsKKwlib29sCQloZWFwX2NvbnRpbnVlID0gZmFs c2U7CisKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCk7CisKKwlmb3IgKDs7KQorCXsKKwkJ aWYgKCFoZWFwX2NvbnRpbnVlKQorCQl7CisJCQl0aWQgPSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90 aWQoc2NhbiwgaHNjYW4sIGRpcmVjdGlvbiwgTlVMTCk7CisKKwkJCS8qIElmIHdlJ3JlIG91dCBv ZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCisJCQlpZiAodGlkID09IE5VTEwpCisJCQkJ YnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBGZXRjaCB0aGUgbmV4dCAob3Igb25seSkgdmlzaWJs ZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgorCQkgKiBJZiB3ZSBkb24ndCBmaW5k IGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4dCBUSUQgZnJvbQorCQkgKiB0 aGUgaW5kZXguCisJCSAqLworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19o ZWFwdGlkKSk7CisJCWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90LCAmaGVh cF9jb250aW51ZSwgdHJ1ZSkpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQloZWFwYW1faW5kZXhfb25seV9nZXRuZXh0 X3Nsb3QgLSBpbmRleC1vbmx5IHNjYW4sIGFtZ2V0dHVwbGUgcGF0aAorICoKKyAqIE1heSBza2lw IGhlYXAgZmV0Y2hlcyB3aGVuIHRoZSB2aXNpYmlsaXR5IG1hcCBpbmRpY2F0ZXMgYWxsIHR1cGxl cyBvbiBhCisgKiBwYWdlIGFyZSB2aXNpYmxlLiAgUmVzdWx0cyBhcmUgcmV0dXJuZWQgdmlhIHNj YW4tPnhzX2l0dXAgLyBzY2FuLT54c19oaXR1cC4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLwor c3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2luZGV4X29ubHlfZ2V0bmV4dF9z bG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJ ICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9 IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOworCUl0ZW1Qb2ludGVy IHRpZDsKKwlib29sCQlhbGxfdmlzaWJsZSwKKwkJCQloZWFwX2NvbnRpbnVlID0gZmFsc2U7CisK KwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKworCWZvciAoOzspCisJeworCQlpZiAoIWhl YXBfY29udGludWUpCisJCXsKKwkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVj dGlvbik7CisKKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJYWxsX3Zpc2li bGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJIEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1ZmZl cik7CisJCX0KKworCQlBc3NlcnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlk KSk7CisKKwkJLyoKKwkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCBy ZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCisJCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3du IHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCisJCSAqIHdlJ2xsIHVzZSB0aGUg aW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4KKwkJICov CisJCWlmICghYWxsX3Zpc2libGUpCisJCXsKKwkJCS8qCisJCQkgKiBSYXRzLCB3ZSBoYXZlIHRv IHZpc2l0IHRoZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCisJCQkgKi8KKwkJCWlmIChzY2Fu LT5pbnN0cnVtZW50KQorCQkJCXNjYW4tPmluc3RydW1lbnQtPm5oZWFwZmV0Y2hlcysrOworCisJ CQlpZiAoIWhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QsICZoZWFwX2NvbnRpbnVl LCBmYWxzZSkpCisJCQkJY29udGludWU7CQkvKiBubyB2aXNpYmxlIHR1cGxlLCB0cnkgbmV4dCBp bmRleCBlbnRyeSAqLworCisJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKworCQkJLyoKKwkJCSAq IE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHN0YW5kYXJkIGluZGV4LW9u bHkKKwkJCSAqIHNjYW5zLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBrZWVwIGZvbGxv d2luZyB0aGUgSE9UCisJCQkgKiBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMgYmVlbiBm b3VuZC4gIE90aGVyIGNhbGxlcnMKKwkJCSAqIChjdXJyZW50bHkgb25seSBzZWxmdW5jcy5jKSB1 c2UgU25hcHNob3ROb25WYWN1dW1hYmxlLCBhbmQgd2FudAorCQkJICogdXMgdG8gYXNzdW1lIHRo YXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4gdGhlIGhvdAorCQkJICogY2hhaW4g aXMgYWx3YXlzIGdvb2QgZW5vdWdoLgorCQkJICovCisJCQlBc3NlcnQoIShoZWFwX2NvbnRpbnVl ICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQl9CisJCWVsc2UKKwkJ eworCQkJLyoKKwkJCSAqIFdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHNvIHdlJ2xsIG5lZWQg dG8gdGFrZSBhIHByZWRpY2F0ZQorCQkJICogbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQu ICBGb3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZQorCQkJICogbGV2ZWwuCisJCQkgKi8KKwkJCVBy ZWRpY2F0ZUxvY2tQYWdlKGhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkgIEl0ZW1Qb2ludGVy R2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90KTsKKwkJfQor CisJCS8qCisJCSAqIFJldHVybiBtYXRjaGluZyBpbmRleCB0dXBsZSBub3cgc2V0IGluIHNjYW4t PnhzX2l0dXAgKG9yIHJldHVybgorCQkgKiBtYXRjaGluZyBoZWFwIHR1cGxlIG5vdyBzZXQgaW4g c2Nhbi0+eHNfaGl0dXApLgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZh bHNlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcGFtX2luZGV4X29ubHlfYmF0 Y2hfZ2V0bmV4dF9zbG90IC0gaW5kZXgtb25seSBzY2FuLCBhbWdldGJhdGNoIHBhdGgKKyAqCisg KiBMaWtlIGhlYXBhbV9pbmRleF9vbmx5X2dldG5leHRfc2xvdCwgYnV0IHVzZXMgdGhlIGJhdGNo IHJpbmcgYnVmZmVyIHRvIGdldAorICogVElEcyBmcm9tIHRoZSBpbmRleCBBTS4KKyAqIC0tLS0t LS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFtX2lu ZGV4X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5k ZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNf aGVhcGZldGNoOworCUl0ZW1Qb2ludGVyIHRpZDsKKwlib29sCQlhbGxfdmlzaWJsZSwKKwkJCQlo ZWFwX2NvbnRpbnVlID0gZmFsc2U7CisKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwor CWZvciAoOzspCisJeworCQlpZiAoIWhlYXBfY29udGludWUpCisJCXsKKwkJCXRpZCA9IGhlYXBh bV9iYXRjaF9nZXRuZXh0X3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAg ICZhbGxfdmlzaWJsZSk7CisKKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJfQor CisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKKworCQkv KgorCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMg YSBoZWFwIHBhZ2Ugb24KKwkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0 byBldmVyeWJvZHkuICBJbiBhbnkgY2FzZSwKKwkJICogd2UnbGwgdXNlIHRoZSBpbmRleCB0dXBs ZSBub3QgdGhlIGhlYXAgdHVwbGUgYXMgdGhlIGRhdGEgc291cmNlLgorCQkgKi8KKwkJaWYgKCFh bGxfdmlzaWJsZSkKKwkJeworCQkJLyoKKwkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhl IGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KKwkJCSAqLworCQkJaWYgKHNjYW4tPmluc3RydW1l bnQpCisJCQkJc2Nhbi0+aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzKys7CisKKwkJCWlmICghaGVh cGFtX2luZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUsIHRydWUpKQor CQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkg Ki8KKworCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisKKwkJCUFzc2VydCghKGhlYXBfY29udGlu dWUgJiYgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisJCX0KKwkJZWxzZQor CQl7CisJCQlQcmVkaWNhdGVMb2NrUGFnZShoc2Nhbi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJICBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJICBzY2FuLT54c19zbmFwc2hv dCk7CisJCX0KKworCQkvKgorCQkgKiBSZXR1cm4gbWF0Y2hpbmcgaW5kZXggdHVwbGUgbm93IHNl dCBpbiBzY2FuLT54c19pdHVwIChvciByZXR1cm4KKwkJICogbWF0Y2hpbmcgaGVhcCB0dXBsZSBu b3cgc2V0IGluIHNjYW4tPnhzX2hpdHVwKS4KKwkJICovCisJCXJldHVybiB0cnVlOworCX0KKwor CXJldHVybiBmYWxzZTsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBDYWxsYmFja3MgZm9y IG5vbi1tb2RpZnlpbmcgb3BlcmF0aW9ucyBvbiBpbmRpdmlkdWFsIHR1cGxlcyBmb3IgaGVhcCBB TQpAQCAtNzY5LDcgKzE1MzgsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihS ZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCXRhYmxlU2NhbiA9IE5VTEw7 CiAJCWhlYXBTY2FuID0gTlVMTDsKLQkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhl YXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgTlVMTCwgMCwgMCk7CisJCWluZGV4U2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgZmFsc2UsIFNuYXBzaG90QW55LAorCQkJ CQkJCQkJTlVMTCwgMCwgMCk7CiAJCWluZGV4X3Jlc2NhbihpbmRleFNjYW4sIE5VTEwsIDAsIE5V TEwsIDApOwogCX0KIAllbHNlCkBAIC04MDYsNyArMTU3Niw4IEBAIGhlYXBhbV9yZWxhdGlvbl9j b3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAsCiAKIAkJ aWYgKGluZGV4U2NhbiAhPSBOVUxMKQogCQl7Ci0JCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChp bmRleFNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKKwkJCWlmICghdGFibGVfaW5k ZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJ CQkJICBzbG90KSkKIAkJCQlicmVhazsKIAogCQkJLyogU2luY2Ugd2UgdXNlZCBubyBzY2FuIGtl eXMsIHNob3VsZCBuZXZlciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAgLTI2NjUsNiArMzQzNiwxMSBA QCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4 X2ZldGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9y ZXNldCA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVh cGFtX2luZGV4X2ZldGNoX2VuZCwKKwkuaW5kZXhfYmF0Y2hfaW5pdCA9IGhlYXBhbV9pbmRleF9i YXRjaF9pbml0LAorCS5pbmRleF9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z bG90LAorCS5pbmRleF9iYXRjaF9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfYmF0Y2hfZ2V0 bmV4dF9zbG90LAorCS5pbmRleF9vbmx5X2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5 X2dldG5leHRfc2xvdCwKKwkuaW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1f aW5kZXhfb25seV9iYXRjaF9nZXRuZXh0X3Nsb3QsCiAJLmluZGV4X2ZldGNoX3R1cGxlID0gaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlLAogCiAJLnR1cGxlX2luc2VydCA9IGhlYXBhbV90dXBsZV9p bnNlcnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFi NDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9 IFwKIAlhbWFwaS5vIFwKIAlhbXZhbGlkYXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubwor CWluZGV4YW0ubyBcCisJaW5kZXhiYXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMv YmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9h bWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZWZhMDA3MDMw Li5hYmE5ZTJiNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01NSw2ICs1NSwxMSBA QCBHZXRJbmRleEFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5hbXJl c2NhbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+YW1lbmRzY2FuICE9IE5VTEwpOwogCisJ LyogQXNzZXJ0IHRoYXQgQU0gZG9lc24ndCBoYXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2Yg Y2FsbGJhY2tzICovCisJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVMTCB8 fCByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydCgocm91dGluZS0+YW1nZXRi YXRjaCAhPSBOVUxMKSA9PSAocm91dGluZS0+YW11bmd1YXJkYmF0Y2ggIT0gTlVMTCkpOworCUFz c2VydChyb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9 PSBOVUxMKTsKKwogCXJldHVybiByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5j CmluZGV4IDVlODliODZhNi4uNmU4NzE2OWMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpA QCAtODksNiArODksOSBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0 aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZh bGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51 bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7 CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gZmFsc2U7IC8qIHNldCBsYXRlciBmb3IgYW1nZXRiYXRj aCBjYWxsZXJzICovCisJc2Nhbi0+eHNfYml0bWFwX2JhdGNoID0gTlVMTDsKKwlzY2FuLT54c193 YW50X2l0dXAgPSBmYWxzZTsgLyogY2FsbGVyIG11c3QgaW5pdGlhbGl6ZSB0aGlzICovCiAKIAkv KgogCSAqIFdlIGFsbG9jYXRlIGtleSB3b3Jrc3BhY2UgaGVyZSwgYnV0IGl0IHdvbid0IGdldCBm aWxsZWQgdW50aWwgYW1yZXNjYW4uCkBAIC0xMDIsOCArMTA1LDYgQEAgUmVsYXRpb25HZXRJbmRl eFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQog CWVsc2UKIAkJc2Nhbi0+b3JkZXJCeURhdGEgPSBOVUxMOwogCi0Jc2Nhbi0+eHNfd2FudF9pdHVw ID0gZmFsc2U7IC8qIG1heSBiZSBzZXQgbGF0ZXIgKi8KLQogCS8qCiAJICogRHVyaW5nIHJlY292 ZXJ5IHdlIGlnbm9yZSBraWxsZWQgdHVwbGVzIGFuZCBkb24ndCBib3RoZXIgdG8ga2lsbCB0aGVt CiAJICogZWl0aGVyLiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIHhtaW4gb24gdGhlIHByaW1hcnkg bm9kZSBjb3VsZCBlYXNpbHkgYmUKQEAgLTEyNiw2ICsxMjcsMTAgQEAgUmVsYXRpb25HZXRJbmRl eFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQog CXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2MgPSBOVUxMOwogCisJ c2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSAwOworCXNjYW4tPmJhdGNoX3R1cGxlc193 b3Jrc3BhY2UgPSAwOworCXNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9IDA7CisKIAlyZXR1cm4g c2NhbjsKIH0KIApAQCAtNDU0LDcgKzQ1OSw3IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgi KTsKIAkJfQogCi0JCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlv biwgaXJlbCwKKwkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9u LCBpcmVsLCBmYWxzZSwKIAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJ aW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJ c3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC01MTcsNyArNTIyLDggQEAgc3lzdGFibGVfZ2V0bmV4 dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAo aW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg c3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+ aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQog CQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03MTUsNyArNzIxLDcgQEAgc3lzdGFibGVf YmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCWlmIChUcmFuc2FjdGlv bklkSXNWYWxpZChDaGVja1hpZEFsaXZlKSkKIAkJYnN5c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nh bi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAor CXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxh dGlvbiwgZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAlpbmRl eF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3Nj YW4tPnNjYW4gPSBOVUxMOwpAQCAtNzM0LDcgKzc0MCw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3Jk ZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFw VHVwbGUJaHR1cCA9IE5VTEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4 X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkK KwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24s IHN5c3NjYW4tPnNsb3QpKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2Fu LT5zbG90LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4 dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNWViN2U5OWFkLi5mNTMwMTEw ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJ CWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2Fu CiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBv ZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwg aW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9t IGEgc2NhbgotICoJCWluZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFw IHR1cGxlCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20g YSBzY2FuCisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBl ciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNj YW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVz CiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4g aW5kZXgKQEAgLTI1NSw2ICsyNTMsNyBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhl YXBSZWxhdGlvbiwKIAkJCQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCWJvb2wgeHNfd2Fu dF9pdHVwLAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW5zdHJ1bWVudCwKIAkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMpCkBAIC0yODEs NyArMjgwLDIzIEBAIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJICov CiAJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOwogCXNjYW4tPnhzX3NuYXBzaG90 ID0gc25hcHNob3Q7CisJc2Nhbi0+TVZDQ1NjYW4gPSBJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNo b3QpOwogCXNjYW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OworCXNjYW4tPnhzX3dhbnRfaXR1 cCA9IHhzX3dhbnRfaXR1cDsKKwlzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQgPSAoc2Nhbi0+ TVZDQ1NjYW4gJiYgIXhzX3dhbnRfaXR1cCk7CisKKwlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfaW5k YW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJaW5kZXhfYmF0Y2hzY2FuX2luaXQoc2Nhbik7CisK KwkvKiBSZXNvbHZlIHdoaWNoIGdldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiB0byB1c2UgZm9y IHRoaXMgc2NhbiAqLworCWlmICh4c193YW50X2l0dXApCisJCXNjYW4tPnhzX2dldG5leHRfc2xv dCA9IHNjYW4tPnVzZWJhdGNocmluZyA/CisJCQloZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmlu ZGV4X29ubHlfYmF0Y2hfZ2V0bmV4dF9zbG90IDoKKwkJCWhlYXBSZWxhdGlvbi0+cmRfdGFibGVh bS0+aW5kZXhfb25seV9nZXRuZXh0X3Nsb3Q7CisJZWxzZQorCQlzY2FuLT54c19nZXRuZXh0X3Ns b3QgPSBzY2FuLT51c2ViYXRjaHJpbmcgPworCQkJaGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5p bmRleF9iYXRjaF9nZXRuZXh0X3Nsb3QgOgorCQkJaGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5p bmRleF9nZXRuZXh0X3Nsb3Q7CiAKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMg ZnJvbSB0YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2Jl Z2luKGhlYXBSZWxhdGlvbik7CkBAIC0zMTIsNiArMzI3LDcgQEAgaW5kZXhfYmVnaW5zY2FuX2Jp dG1hcChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCSAqIHVwIGJ5IFJlbGF0aW9uR2V0SW5kZXhT Y2FuLgogCSAqLwogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7CisJc2Nhbi0+TVZDQ1Nj YW4gPSBJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4tPmluc3RydW1lbnQgPSBp bnN0cnVtZW50OwogCiAJcmV0dXJuIHNjYW47CkBAIC0zNzMsMTIgKzM4OSwxNCBAQCBpbmRleF9y ZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCUFzc2VydChua2V5cyA9PSBzY2FuLT5udW1iZXJP ZktleXMpOwogCUFzc2VydChub3JkZXJieXMgPT0gc2Nhbi0+bnVtYmVyT2ZPcmRlckJ5cyk7CiAK LQkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgZnJvbSB0YWJsZSBhY2Nl c3NlcyAqLworCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZvciByZXNjYW4gKi8KIAlpZiAoc2Nh bi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRleF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFw ZmV0Y2gpOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5 ICovCi0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOworCisJaWYgKHNjYW4tPnVzZWJh dGNocmluZykKKwkJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOwogCiAJc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzY2FuKHNjYW4sIGtleXMsIG5rZXlzLAogCQkJCQkJCQkJ CQlvcmRlcmJ5cywgbm9yZGVyYnlzKTsKQEAgLTM5NCw2ICs0MTIsMTMgQEAgaW5kZXhfZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pCiAJU0NBTl9DSEVDS1M7CiAJQ0hFQ0tfU0NBTl9QUk9DRURV UkUoYW1lbmRzY2FuKTsKIAorCS8qIEZyZWUgY2FjaGVkIGJpdG1hcCBiYXRjaCBpZiBhbnkgKi8K KwlpZiAoc2Nhbi0+eHNfYml0bWFwX2JhdGNoICE9IE5VTEwpCisJeworCQlwZnJlZShiYXRjaF9h bGxvY19iYXNlKHNjYW4tPnhzX2JpdG1hcF9iYXRjaCwgc2NhbikpOworCQlzY2FuLT54c19iaXRt YXBfYmF0Y2ggPSBOVUxMOworCX0KKwogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZl ciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAl7CkBAIC00MDEsNiArNDI2LDEwIEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2Fu KQogCQlzY2FuLT54c19oZWFwZmV0Y2ggPSBOVUxMOwogCX0KIAorCS8qIENsZWFudXAgYmF0Y2hp bmcsIHNvIHRoYXQgdGhlIEFNIGNhbiByZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLworCWlmIChz Y2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4X2JhdGNoc2Nhbl9lbmQoc2Nhbik7CisKIAkvKiBF bmQgdGhlIEFNJ3Mgc2NhbiAqLwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWVu ZHNjYW4oc2Nhbik7CiAKQEAgLTQyMiwyNCArNDUxLDI1IEBAIHZvaWQKIGluZGV4X21hcmtwb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VE VVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQlz Y2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCS8qIE9ubHkg YW1nZXRiYXRjaCBpbmRleCBBTXMgc3VwcG9ydCBtYXJrIGFuZCByZXN0b3JlICovCisJaW5kZXhf YmF0Y2hzY2FuX21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJ aW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3NpdGlvbgogICoKLSAqIE5PVEU6IHRo aXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJuYWwgc2NhbiBzdGF0ZSBvZiB0aGUgaW5kZXggQU0u ICBTZWUKLSAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KKyAqIE5PVEU6IHRoaXMgb25s eSByZXN0b3JlcyB0aGUgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSBzaGFyZWQgYnkgdGhlIHRhYmxl IGFuZAorICogaW5kZXggQU1zLiAgU2VlIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KICAq CiAgKiBOT1RFOiBGb3IgaGVhcCwgaW4gdGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMsIG1hcmsv cmVzdG9yZSBvbmx5IHdvcmtzCiAgKiBjb3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hvdCBp cyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZXJlJ3MgYXQKICAqIG1vc3Qgb25lIHJl dHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFuZCBzbyByZXN0b3JpbmcgdGhlIHBy aW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlzIHN1ZmZp Y2llbnQuICBTaW5jZSB0aGUgb25seQotICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVzdG9yZSBm dW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZlbHkgbWVh bnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBU aGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1z IHVuaW1wb3J0YW50LgorICogc3RhdGUgYXQgdGhlIHNjYW4gaXRlbSBncmFudWxhcml0eSBpcyBz dWZmaWNpZW50LiAgU2luY2UgdGhlIG9ubHkgY3VycmVudAorICogdXNlciBvZiBtYXJrL3Jlc3Rv cmUgZnVuY3Rpb25hbGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMgZWZmZWN0aXZlbHkKKyAq IG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3Rz LiAgVGhpcyBjb3VsZCBiZQorICogZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBz ZWVtcyB1bmltcG9ydGFudC4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZApAQCAtNDQ4 LDE2ICs0NzgsMTQgQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2Vy dChJc01WQ0NMaWtlU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKTsKIAogCVNDQU5fQ0hFQ0tT OwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcmVzdHJwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VE VVJFKGFtZ2V0YmF0Y2gpOwogCi0JLyogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBp bnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3Ig cmVzY2FuICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hf cmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAotCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBm YWxzZTsgLyogZm9yIHNhZmV0eSAqLwotCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsK LQotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCS8q IGFsc28gbm90aWZ5IHRhYmxlIEFNIGFuZCBpbmRleCBBTSAqLworCWluZGV4X2JhdGNoc2Nhbl9y ZXN0b3JlX3BvcyhzY2FuKTsKIH0KIAogLyoKQEAgLTU3OSw2ICs2MDcsOSBAQCBpbmRleF9wYXJh bGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAorCWlmIChz Y2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4X2JhdGNoc2Nhbl9yZXNldChzY2FuKTsKKwogCS8q IGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3QgcHJvdmlk ZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxs ZWxyZXNjYW4gIT0gTlVMTCkKIAkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFy YWxsZWxyZXNjYW4oc2Nhbik7CkBAIC01OTEsNiArNjIyLDcgQEAgaW5kZXhfcGFyYWxsZWxyZXNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogICovCiBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNj YW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5kZXhyZWwsCisJCQkJCQkg Ym9vbCB4c193YW50X2l0dXAsCiAJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0 cnVtZW50LAogCQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywKIAkJCQkJCSBQYXJhbGxl bEluZGV4U2NhbkRlc2MgcHNjYW4pCkBAIC02MTIsNyArNjQ0LDIzIEBAIGluZGV4X2JlZ2luc2Nh bl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKIAkgKi8KIAlz Y2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwcmVsOwogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNo b3Q7CisJc2Nhbi0+TVZDQ1NjYW4gPSBJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCXNj YW4tPmluc3RydW1lbnQgPSBpbnN0cnVtZW50OworCXNjYW4tPnhzX3dhbnRfaXR1cCA9IHhzX3dh bnRfaXR1cDsKKwlzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQgPSAoc2Nhbi0+TVZDQ1NjYW4g JiYgIXhzX3dhbnRfaXR1cCk7CisKKwlpZiAoaW5kZXhyZWwtPnJkX2luZGFtLT5hbWdldGJhdGNo ICE9IE5VTEwpCisJCWluZGV4X2JhdGNoc2Nhbl9pbml0KHNjYW4pOworCisJLyogUmVzb2x2ZSB3 aGljaCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24gdG8gdXNlIGZvciB0aGlzIHNjYW4gKi8K KwlpZiAoeHNfd2FudF9pdHVwKQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBzY2FuLT51c2Vi YXRjaHJpbmcgPworCQkJaGVhcHJlbC0+cmRfdGFibGVhbS0+aW5kZXhfb25seV9iYXRjaF9nZXRu ZXh0X3Nsb3QgOgorCQkJaGVhcHJlbC0+cmRfdGFibGVhbS0+aW5kZXhfb25seV9nZXRuZXh0X3Ns b3Q7CisJZWxzZQorCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBzY2FuLT51c2ViYXRjaHJpbmcg PworCQkJaGVhcHJlbC0+cmRfdGFibGVhbS0+aW5kZXhfYmF0Y2hfZ2V0bmV4dF9zbG90IDoKKwkJ CWhlYXByZWwtPnJkX3RhYmxlYW0tPmluZGV4X2dldG5leHRfc2xvdDsKIAogCS8qIHByZXBhcmUg dG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCiAJc2Nhbi0+eHNfaGVhcGZldGNo ID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCk7CkBAIC02MjEsMTAgKzY2OSwxNCBA QCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24gaW5k ZXhyZWwsCiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4X2dldG5leHRfdGlkIC0g Z2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICogaW5kZXhfZ2V0bmV4dF90aWQgLSBhbWdl dHR1cGxlIGludGVyZmFjZQogICoKICAqIFRoZSByZXN1bHQgaXMgdGhlIG5leHQgVElEIHNhdGlz ZnlpbmcgdGhlIHNjYW4ga2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBs ZXMgZXhpc3QuCisgKgorICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGFibGUgQU0n cyBpbmRleF9nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sCisgKiBhbmQgb25seSBnaXZlbiBh biBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIHRoZSBzaW5nbGUtdHVwbGUgYW1nZXR0dXBsZQorICog aW50ZXJmYWNlLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVtUG9pbnRlcgpAQCAtNjQ4 LDcgKzcwMCw2IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24pCiAKIAkvKiBSZXNldCBraWxsIGZsYWcgaW1tZWRpYXRlbHkgZm9y IHNhZmV0eSAqLwogCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsKLQlzY2FuLT54c19o ZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAKIAkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmll cywgd2UncmUgZG9uZSAqLwogCWlmICghZm91bmQpCkBAIC02NjcsOTcgKzcxOCw2IEBAIGluZGV4 X2dldG5leHRfdGlkKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24p CiAJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0g KgkJaW5kZXhfZmV0Y2hfaGVhcCAtIGdldCB0aGUgc2NhbidzIG5leHQgaGVhcCB0dXBsZQotICoK LSAqIFRoZSByZXN1bHQgaXMgYSB2aXNpYmxlIGhlYXAgdHVwbGUgYXNzb2NpYXRlZCB3aXRoIHRo ZSBpbmRleCBUSUQgbW9zdAotICogcmVjZW50bHkgZmV0Y2hlZCBieSBpbmRleF9nZXRuZXh0X3Rp ZCwgb3IgTlVMTCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcwotICogZXhpc3QuICAoVGhlcmUg Y2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZSBvZiBIT1QgY2hhaW5z LAotICogYWx0aG91Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBp bXBvc3NpYmxlIGZvciBtb3JlIHRoYW4KLSAqIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKLSAq Ci0gKiBPbiBzdWNjZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBp bm5lZCAodGhlIHBpbiB3aWxsIGJlCi0gKiBkcm9wcGVkIGluIGEgZnV0dXJlIGluZGV4X2dldG5l eHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4KLSAqIGNhbGwpLgotICoK LSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3Jt IHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3Qg ZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5vdWdoIGluZm9ybWF0aW9u IHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0t LS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCkKLXsKLQlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwotCWJvb2wJ CWZvdW5kOwotCi0JZm91bmQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFw ZmV0Y2gsICZzY2FuLT54c19oZWFwdGlkLAotCQkJCQkJCQkJc2Nhbi0+eHNfc25hcHNob3QsIHNs b3QsCi0JCQkJCQkJCQkmc2Nhbi0+eHNfaGVhcF9jb250aW51ZSwgJmFsbF9kZWFkKTsKLQotCWlm IChmb3VuZCkKLQkJcGdzdGF0X2NvdW50X2hlYXBfZmV0Y2goc2Nhbi0+aW5kZXhSZWxhdGlvbik7 Ci0KLQkvKgotCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9u bHkgZGVhZCB0dXBsZXMsIHRlbGwgaW5kZXgKLQkgKiBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3Ig dGhhdCBUSUQgKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUgbmV4dAotCSAqIGFtZ2V0dHVw bGUgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpLiAgV2UgZG8gbm90IGRvIHRoaXMgd2hlbiBp bgotCSAqIHJlY292ZXJ5IGJlY2F1c2UgaXQgbWF5IHZpb2xhdGUgTVZDQyB0byBkbyBzby4gIFNl ZSBjb21tZW50cyBpbgotCSAqIFJlbGF0aW9uR2V0SW5kZXhTY2FuKCkuCi0JICovCi0JaWYgKCFz Y2FuLT54YWN0U3RhcnRlZEluUmVjb3ZlcnkpCi0JCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBh bGxfZGVhZDsKLQotCXJldHVybiBmb3VuZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLQotICoJ CWluZGV4X2dldG5leHRfc2xvdCAtIGdldCB0aGUgbmV4dCB0dXBsZSBmcm9tIGEgc2NhbgotICoK LSAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5 cyBhbmQgdGhlIHNuYXBzaG90IHdhcwotICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0 dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgotICoKLSAqIE9uIHN1Y2Nlc3Ms IHJlc291cmNlcyAobGlrZSBidWZmZXIgcGlucykgYXJlIGxpa2VseSB0byBiZSBoZWxkLCBhbmQg d2lsbCBiZQotICogZHJvcHBlZCBieSBhIGZ1dHVyZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhf ZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0gKiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxs ZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrLCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9m IHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVkLiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBi ZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3VnaCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZp Y2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgotICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1i b29sCi1pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JZm9yICg7OykKLQl7Ci0JCWlm ICghc2Nhbi0+eHNfaGVhcF9jb250aW51ZSkKLQkJewotCQkJSXRlbVBvaW50ZXIgdGlkOwotCi0J CQkvKiBUaW1lIHRvIGZldGNoIHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAqLwotCQkJdGlk ID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKLQotCQkJLyogSWYgd2UncmUg b3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KLQkJCWlmICh0aWQgPT0gTlVMTCkK LQkJCQlicmVhazsKLQotCQkJQXNzZXJ0KEl0ZW1Qb2ludGVyRXF1YWxzKHRpZCwgJnNjYW4tPnhz X2hlYXB0aWQpKTsKLQkJfQotCi0JCS8qCi0JCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2 aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnkuCi0JCSAqIElmIHdlIGRvbid0 IGZpbmQgYW55dGhpbmcsIGxvb3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCi0J CSAqIHRoZSBpbmRleC4KLQkJICovCi0JCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4t PnhzX2hlYXB0aWQpKTsKLQkJaWYgKGluZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCkpCi0JCQly ZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0t LS0KICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBhdCBvbmNlIGZyb20gYW4g aW5kZXggc2NhbgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNTk4MGI3YjljCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtMCwwICsxLDc1OCBA QAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogaW5kZXhiYXRjaC5jCisgKgkgIEJhdGNoLWJh c2VkIGluZGV4IHNjYW4gaW5mcmFzdHJ1Y3R1cmUgZm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFj ZS4KKyAqCisgKiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgY29yZSBpbmZyYXN0cnVjdHVyZSBm b3IgYmF0Y2gtYmFzZWQgaW5kZXggc2NhbnMsCisgKiB3aGljaCBhbGxvdyBpbmRleCBBTXMgdG8g cmV0dXJuIG11bHRpcGxlIG1hdGNoaW5nIFRJRHMgcGVyIHBhZ2UgaW4gYSBzaW5nbGUKKyAqIGNh bGwuICBUaGUgYmF0Y2ggcmluZyBidWZmZXIgaXMgbWFuYWdlZCBieSB0aGUgdGFibGUgQU0sIHdp dGggaGVscCBmcm9tIHVzLAorICogYW5kIHdpdGggaGVscCBmcm9tIHRoZSByaW5nIGJ1ZmZlciBp bmxpbmUgZnVuY3Rpb25zIGluIHJlbHNjYW4uaC4gIFRoaXMKKyAqIGFwcHJvYWNoIGVuYWJsZXMg ZWZmaWNpZW50IHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJlZAor ICogaW5kZXggc2NhbnMuCisgKgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4g aW5kZXgga2V5IHNwYWNlIG9yZGVyLgorICoKKyAqIFRoZXJlJ3MgdGhyZWUgdHlwZXMgb2YgZnVu Y3Rpb25zIGluIHRoaXMgbW9kdWxlOgorICoKKyAqIDEuIENvcmUgYmF0Y2ggc2NhbiBsaWZlY3lj bGUgKGluZGV4X2JhdGNoc2Nhbl8qKTogRnVuY3Rpb25zIHRoYXQgbWFuYWdlCisgKiAgICBiYXRj aCBzY2FuIHN0YXRlIGluY2x1ZGluZyBpbml0aWFsaXphdGlvbiwgcmVzZXQsIGNsZWFudXAsIGFu ZCB0aGUKKyAqICAgIG1hcmsvcmVzdG9yZSBvcGVyYXRpb25zIG5lZWRlZCBmb3IgbWVyZ2Ugam9p bnMuICBDYWxsZWQgYnkgaW5kZXhhbS5jCisgKiAgICByb3V0aW5lcyB0aGF0IG1hbmFnZSBpbmRl eCBzY2FucyBvbiBiZWhhbGYgb2YgdGhlIGNvcmUgZXhlY3V0b3IuCisgKgorICogMi4gVGFibGUg QU0gdXRpbGl0aWVzICh0YWJsZWFtX3V0aWxfKik6IEhlbHBlciBmdW5jdGlvbnMgY2FsbGVkIGJ5 IHRhYmxlCisgKiAgICBBTXMgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXggc2NhbnMuICBUaGVzZSBo YW5kbGUgY3Jvc3MtYmF0Y2ggZGlyZWN0aW9uCisgKiAgICBjaGFuZ2VzLCByZWNvcmRpbmcgZGVh ZCBpdGVtcyBmb3IgYSBsYXRlciBjYWxsIHRvIGFta2lsbGl0ZW1zYmF0Y2gsCisgKiAgICBmcmVl aW5nIGJhdGNoZXMgd2hlbiB0aGUgdGFibGUgQU0gaXMgZG9uZSB3aXRoIHRoZW0sIGFuZCBjYWxs aW5nCisgKiAgICBhbXVuZ3VhcmRiYXRjaCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGludGVy bG9jayAodGhlIGd1YXJkIHRoYXQKKyAqICAgIHByZXZlbnRzIFZBQ1VVTSBmcm9tIHJlY3ljbGlu ZyBUSURzIHdoaWxlIGEgc2NhbiBpcyBpbiBmbGlnaHQpLgorICoKKyAqIDMuIEluZGV4IEFNIHV0 aWxpdGllcyAoaW5kZXhhbV91dGlsXyopOiBIZWxwZXIgZnVuY3Rpb25zIGNhbGxlZCBieSBpbmRl eAorICogICAgQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIFRo ZXNlIG1hbmFnZSBiYXRjaAorICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBidWZmZXIgbG9j ayByZWxlYXNlLCBhbmQgYmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KKyAqCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5o IgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ludC5oIgor I2luY2x1ZGUgImxpYi9xdW5pcXVlLmgiCisKK3N0YXRpYyBpbnQJYmF0Y2hfY29tcGFyZV9pbnQo Y29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKKworLyoKKyAqIFNldHMgdXAgdGhlIGJh dGNoIHJpbmcgYnVmZmVyIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGFuIGluZGV4IHNjYW4uCisgKgor ICogT25seSBjYWxsIGhlcmUgd2hlbiBhbGwgb2YgdGhlIGluZGV4IHJlbGF0ZWQgZmllbGRzIGlu ICdzY2FuJyB3ZXJlIGFscmVhZHkKKyAqIGluaXRpYWxpemVkLgorICovCit2b2lkCitpbmRleF9i YXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJc2Nhbi0+YmF0Y2hy aW5nYnVmLnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bv cy52YWxpZCA9IGZhbHNlOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7 CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgaGVhZCBiYXRj aCAqLworCXNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNo IHN0YXJ0cyBlbXB0eSAqLworCW1lbXNldCgmc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlLCAwLCBz aXplb2Yoc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlKSk7CisKKwlzY2FuLT51c2ViYXRjaHJpbmcg PSB0cnVlOworfQorCisvKgorICogUmVzZXQgc3RhdGUgdXNlZCBmb3IgYSBiYXRjaCBpbmRleCBz Y2FuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4p Cit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVm OworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOwor CWJvb2wJCW1hcmtCYXRjaEZyZWVkID0gZmFsc2U7CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3Mu dmFsaWQgPSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKwor CS8qCisJICogRW5zdXJlIHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIHdvbid0IHNraXAgdGhlIG9s ZCBtYXJrQmF0Y2ggaW4gdGhlIGxvb3AKKwkgKiBiZWxvdworCSAqLworCWJhdGNocmluZ2J1Zi0+ bWFya0JhdGNoID0gTlVMTDsKKworCWZvciAodWludDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJh dGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBpKyspCisJeworCQlJbmRleFNjYW5C YXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09 IG1hcmtCYXRjaCkKKwkJCW1hcmtCYXRjaEZyZWVkID0gdHJ1ZTsKKworCQl0YWJsZWFtX3V0aWxf ZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQorCisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1 bmxpa2VseShtYXJrQmF0Y2gpKQorCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJr QmF0Y2gpOworCisJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+ bmV4dEJhdGNoID0gMDsKK30KKworLyoKKyAqIEZyZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRj aCBpbmRleCBzY2FuCisgKgorICogQ2FsbGVkIHdoZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBl bmRlZCwgcmlnaHQgYmVmb3JlIHRoZSBvd25pbmcgc2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3 YXkuICBDbGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitp bmRleF9iYXRjaHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCBy ZW1haW5pbmcgbG9hZGVkIGJhdGNoZXMgKGV2ZW4gbWFya0JhdGNoKSAqLworCUFzc2VydCghc2Nh bi0+eHNfaGVhcGZldGNoKTsKKwlpbmRleF9iYXRjaHNjYW5fcmVzZXQoc2Nhbik7CisKKwlmb3Ig KGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5k ZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldOworCisJCWlm IChjYWNoZWQgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjYWNoZWQtPmRlYWRJdGVt cykKKwkJCXBmcmVlKGNhY2hlZC0+ZGVhZEl0ZW1zKTsKKwkJcGZyZWUoYmF0Y2hfYWxsb2NfYmFz ZShjYWNoZWQsIHNjYW4pKTsKKwl9Cit9CisKKy8qCisgKiBTZXQgYSBtYXJrIGZyb20gc2NhblBv cyBwb3NpdGlvbgorICoKKyAqIFNhdmVzIHRoZSBjdXJyZW50IHNjYW4gcG9zaXRpb24gYW5kIGFz c29jaWF0ZWQgYmF0Y2ggc28gdGhhdCB0aGUgc2NhbiBjYW4KKyAqIGJlIHJlc3RvcmVkIHRvIHRo aXMgcG9pbnQgbGF0ZXIsIHZpYSBhIGNhbGwgdG8gaW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9z LgorICogVGhlIG1hcmtlZCBiYXRjaCBpcyByZXRhaW5lZCBhbmQgbm90IGZyZWVkIHVudGlsIGEg bmV3IG1hcmsgaXMgc2V0IG9yIHRoZQorICogc2NhbiBlbmRzIChvciB1bnRpbCB0aGUgbWFyayBp cyByZXN0b3JlZCkuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNj YW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+ YmF0Y2hyaW5nYnVmOworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmc2Nhbi0+YmF0Y2hy aW5nYnVmLnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHJpbmdi dWYtPm1hcmtQb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0gaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoID0gYmF0 Y2hyaW5nYnVmLT5tYXJrQmF0Y2g7CisJYm9vbAkJZnJlZU1hcmtCYXRjaDsKKworCUFzc2VydChz Y2FuLT5NVkNDU2Nhbik7CisKKwkvKgorCSAqIEZyZWUgdGhlIHByZXZpb3VzIG1hcmsgYmF0Y2gg KGlmIGFueSkgLS0gYnV0IG9ubHkgaWYgaXQgaXNuJ3Qgb3VyCisJICogc2NhbkJhdGNoIChkZWZl bnNpdmVseSBtYWtlIHN1cmUgdGhhdCBtYXJrQmF0Y2ggaXNuJ3Qgc29tZSBsYXRlcgorCSAqIHN0 aWxsLW5lZWRlZCBiYXRjaCwgdG9vKQorCSAqLworCWlmICghbWFya0JhdGNoIHx8IG1hcmtCYXRj aCA9PSBzY2FuQmF0Y2gpCisJeworCQkvKiBEZWZpbml0ZWx5IG5vIG1hcmtCYXRjaCB0aGF0IHdl IHNob3VsZCBmcmVlIG5vdyAqLworCQlmcmVlTWFya0JhdGNoID0gZmFsc2U7CisJfQorCWVsc2Ug aWYgKGxpa2VseSghaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgbWFya1Bvcy0+YmF0Y2gp KSkKKwl7CisJCS8qIERlZmluaXRlbHkgaGF2ZSBhIG5vLWxvbmdlci1sb2FkZWQgbWFya0JhdGNo IHRvIGZyZWUgKi8KKwkJZnJlZU1hcmtCYXRjaCA9IHRydWU7CisJfQorCWVsc2UKKwl7CisJCS8q CisJCSAqIEl0IGxvb2tzIGxpa2UgbWFya0JhdGNoIGlzIGxvYWRlZC9zdGlsbCBuZWVkZWQgd2l0 aGluIGJhdGNocmluZ2J1Zi4KKwkJICoKKwkJICogaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgaW5k aWNhdGVzIHRoYXQgbWFya3Bvcy0+YmF0Y2ggaXMgbG9hZGVkCisJCSAqIGFscmVhZHksIGJ1dCB3 ZSBjYW5ub3QgZnVsbHkgdHJ1c3QgaXQgaGVyZS4gIEl0J3MganVzdCBhYm91dAorCQkgKiBwb3Nz aWJsZSB0aGF0IG1hcmtwb3MtPmJhdGNoIGZhbGxzIHdpdGhpbiBhIHNpbmNlLXJlY3ljbGVkIHJh bmdlIG9mCisJCSAqIGJhdGNoIG9mZnNldCBudW1iZXJzIChmb2xsb3dpbmcgdWludDggb3ZlcmZs b3cpLgorCQkgKgorCQkgKiBNYWtlIHN1cmUgdGhhdCBtYXJrQmF0Y2ggcmVhbGx5IGlzIGxvYWRl ZCBieSBkaXJlY3RseSBjb21wYXJpbmcgaXQKKwkJICogYWdhaW5zdCBhbGwgbG9hZGVkIGJhdGNo ZXMuICBXZSBtdXN0IG5vdCBmYWlsIHRvIHJlbGVhc2UgbWFya0JhdGNoCisJCSAqIHdoZW4gbm9i b2R5IGVsc2Ugd2lsbCBsYXRlciBvbi4KKwkJICoKKwkJICogTm90ZTogaW4gcHJhY3RpY2Ugd2Un cmUgdmVyeSB1bmxpa2VseSB0byBlbmQgdXAgaGVyZS4gIEl0IGlzIHZlcnkKKwkJICogYXR5cGlj YWwgZm9yIGFuIGluZGV4IHNjYW4gb24gdGhlIGlubmVyIHNpZGUgb2YgYSBtZXJnZSBqb2luIHRv CisJCSAqIGhvbGQgb24gdG8gYSBtYXJrIHRoYXQgdHJhaWxzIHRoZSBjdXJyZW50IHNjYW5CYXRj aCB0aGlzIG11Y2guCisJCSAqLworCQlmcmVlTWFya0JhdGNoID0gdHJ1ZTsJLyogaS5lLiBpbmRl eF9zY2FuX2JhdGNoX2xvYWRlZCBsaWVkIHRvIHVzICovCisKKwkJZm9yICh1aW50OCBpID0gYmF0 Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkgIT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykK KwkJeworCQkJaWYgKGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgaSkgPT0gbWFya0JhdGNoKQorCQkJ eworCQkJCS8qIGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkIHdhcyByaWdodC9ubyBvdmVyZmxvdyBo YXBwZW5lZCAqLworCQkJCWZyZWVNYXJrQmF0Y2ggPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0K KwkJfQorCX0KKworCWlmIChmcmVlTWFya0JhdGNoKQorCXsKKwkJLyogRnJlZSBtYXJrQmF0Y2gs IHNpbmNlIGl0IGlzbid0IGxvYWRlZC9uZWVkZWQgZm9yIGJhdGNocmluZ2J1ZiAqLworCQliYXRj aHJpbmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7IC8qIGVsc2UgY2FsbCB3b24ndCBmcmVlIG1hcmtC YXRjaCAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCX0K KworCS8qIGNvcHkgdGhlIHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+bWFya1Bv cyA9ICpzY2FuUG9zOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNoOworfQor CisvKgorICogUmVzdG9yZSBtYXJrIHRvIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBSZXN0b3Jl cyB0aGUgc2NhbiB0byBhIHBvc2l0aW9uIHNhdmVkIGJ5IGluZGV4X2JhdGNoc2Nhbl9tYXJrX3Bv cyBlYXJsaWVyLgorICogVGhlIHNjYW4ncyBtYXJrUG9zIGJlY29tZXMgaXRzIHNjYW5Qb3MuICBU aGUgbWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzCisgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2gg d2hlbiBuZWVkZWQuCisgKgorICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0 aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAorICogZXhjZXB0IHdoZW4gbWFya0Jh dGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqLwordm9pZAor aW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sKKwlCYXRj aFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hS aW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsKKwlCYXRj aFJpbmdJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJbmRleFNj YW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRleFNjYW5C YXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsK KworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBmZXRjaCk7 CisJQXNzZXJ0KG1hcmtQb3MtPnZhbGlkKTsKKworCWlmIChzY2FuQmF0Y2ggPT0gbWFya0JhdGNo KQorCXsKKwkJLyogbWFya0JhdGNoIGlzIGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0IGNoYW5n ZSBiYXRjaHJpbmdidWYgKi8KKwkJQXNzZXJ0KHNjYW5Qb3MtPmJhdGNoID09IG1hcmtQb3MtPmJh dGNoKTsKKworCQlzY2FuUG9zLT5pdGVtID0gbWFya1Bvcy0+aXRlbTsKKwkJcmV0dXJuOworCX0K KworCS8qCisJICogbWFya0JhdGNoIGlzIGJlaGluZCBzY2FuQmF0Y2gsIGFuZCBzbyBtdXN0IG5v dCBiZSBzYXZlZCBpbiByaW5nIGJ1ZmZlcgorCSAqIGFueW1vcmUuICBXZSBoYXZlIHRvIGRlYWwg d2l0aCByZXN0b3JpbmcgdGhlIG1hcmsgdGhlIGhhcmQgd2F5OiBieQorCSAqIGludmFsaWRhdGlu ZyBhbGwgb3RoZXIgbG9hZGVkIGJhdGNoZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGNhc2UK KwkgKiB3aGVyZSB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBhbmQgdGhlIHNjYW4gYWN0dWFs bHkgY3Jvc3NlcworCSAqIGJhdGNoL2luZGV4IHBhZ2UgYm91bmRhcmllcyAoc2VlIHRhYmxlYW1f dXRpbF9iYXRjaF9kaXJjaGFuZ2UpLgorCSAqCisJICogRmlyc3QsIGZyZWUgYWxsIGJhdGNoZXMg dGhhdCBhcmUgc3RpbGwgaW4gdGhlIHJpbmcgYnVmZmVyLgorCSAqLworCWZvciAodWludDggaSA9 IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoOyBp KyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwg aSk7CisKKwkJQXNzZXJ0KGJhdGNoICE9IG1hcmtCYXRjaCk7CisKKwkJdGFibGVhbV91dGlsX2Zy ZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICogTmV4dCAiYXBwZW5kIiBzdGFu ZGFsb25lIG1hcmtCYXRjaCwgbWFraW5nIHRoZSByaW5nIGJ1ZmZlciBhcHBlYXIgYXMgaWYKKwkg KiBpdCB3YXMgdGhlIGZpcnN0IGJhdGNoIGV2ZXIgcmV0dXJuZWQgYnkgYW1nZXRiYXRjaCBmb3Ig dGhlIHNjYW4KKwkgKi8KKwltYXJrUG9zLT5iYXRjaCA9IDA7CisJYmF0Y2hyaW5nYnVmLT5zY2Fu UG9zID0gKm1hcmtQb3M7CisJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2ggPSBiYXRjaHJpbmdidWYt PmhlYWRCYXRjaCA9IG1hcmtQb3MtPmJhdGNoOworCWluZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKHNj YW4sIG1hcmtCYXRjaCk7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hyaW5n YnVmLT5zY2FuUG9zLmJhdGNoKSA9PSBtYXJrQmF0Y2gpOworCisJLyoKKwkgKiBGaW5hbGx5LCBj YWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtub3cgdG8gaW52YWxpZGF0ZSBhbnkgcHJp dmF0ZQorCSAqIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHNjYW4ncyBwcm9n cmVzcworCSAqLworCWlmIChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNl dCkKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQoc2NhbiwgbWFy a0JhdGNoKTsKKworCS8qCisJICogTm90ZTogbWFya0JhdGNoLmRlYWRJdGVtc1tdIG1pZ2h0IGFs cmVhZHkgY29udGFpbiBkZWFkIGl0ZW1zLCBhbmQgbWlnaHQKKwkgKiB5ZXQgaGF2ZSBtb3JlIGRl YWQgaXRlbXMgc2F2ZWQuICB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCBpcyBwcmVwYXJlZAorCSAq IGZvciB0aGF0LgorCSAqLworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25z IGNhbGxlZCBieSB0YWJsZSBBTXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogSGFuZGxlIGNy b3NzLWJhdGNoIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbgorICoKKyAqIENhbGxlZCBieSB0YWJs ZSBBTSB3aGVuIGl0cyBzY2FuIGNoYW5nZXMgZGlyZWN0aW9uIGluIGEgd2F5IHRoYXQKKyAqIG5l Y2Vzc2l0YXRlcyBiYWNraW5nIHRoZSBzY2FuIHVwIHRvIGFuIGluZGV4IHBhZ2Ugb3JpZ2luYWxs eSBhc3NvY2lhdGVkCisgKiB3aXRoIGEgbm93LWZyZWVkIGJhdGNoLgorICoKKyAqIFdoZW4gd2Ug cmV0dXJuLCBiYXRjaHJpbmdidWYgd2lsbCBvbmx5IGNvbnRhaW4gb25lIGJhdGNoICh0aGUgY3Vy cmVudAorICogaGVhZEJhdGNoL3NjYW5CYXRjaCkuICBDYWxsZXIgY2FuIHRoZW4gc2FmZWx5IHBh c3MgdGhpcyBiYXRjaCB0byBhbWdldGJhdGNoCisgKiB0byBkZXRlcm1pbmUgd2hpY2ggYmF0Y2gg Y29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uLiAgRnJvbSB0aGF0CisgKiBwb2lu dCBvbiBiYXRjaHJpbmdidWYgd2lsbCBsb29rIGFzIGlmIG91ciBuZXcgc2NhbiBkaXJlY3Rpb24g aGFkIGJlZW4gdXNlZAorICogZnJvbSB0aGUgc3RhcnQuICBUaGlzIGFwcHJvYWNoIGlzbid0IHBh cnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1dCBpdCB3b3JrcworICogd2VsbCBlbm91Z2ggZm9yIHdo YXQgb3VnaHQgdG8gYmUgYSByZWxhdGl2ZWx5IHJhcmUgb2NjdXJyZW5jZS4KKyAqLwordm9pZAor dGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0 Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUluZGV4 U2NhbkJhdGNoIGhlYWQ7CisKKwkvKgorCSAqIFJlbGVhc2UgYmF0Y2hlcyBzdGFydGluZyBmcm9t IHRoZSBjdXJyZW50ICJ0YWlsIiBiYXRjaCwgd29ya2luZworCSAqIGJhY2t3YXJkcyB1bnRpbCB0 aGUgY3VycmVudCBoZWFkIGJhdGNoICh3aGljaCBtdXN0IGFsc28gYmUgdGhlIGN1cnJlbnQKKwkg KiBzY2FuQmF0Y2gpIGlzIHRoZSBvbmx5IGJhdGNoIGhhc24ndCBiZWVuIGZyZWVkCisJICovCisJ d2hpbGUgKGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPiAxKQorCXsKKwkJSW5kZXhTY2Fu QmF0Y2ggdGFpbCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwKKwkJCQkJCQkJCQkJICAgYmF0Y2hy aW5nYnVmLT5uZXh0QmF0Y2ggLSAxKTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2Fu LCB0YWlsKTsKKwkJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gtLTsKKwl9CisKKwkvKiBzY2FuQmF0 Y2ggaXMgbm93IHRoZSBvbmx5IGJhdGNoIHN0aWxsIGxvYWRlZCAqLworCUFzc2VydChiYXRjaHJp bmdidWYtPmhlYWRCYXRjaCA9PSBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0Y2gpOworCisJLyoK KwkgKiBEZWFsIHdpdGggaW5kZXggQU0gc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0 aGUgcHJvZ3Jlc3Mgb2YgdGhlCisJICogc2Nhbi4gIERvIHRoaXMgYnkgZmxpcHBpbmcgdGhlIGJh dGNoLWxldmVsIHNjYW4gZGlyZWN0aW9uLCBhbmQgdGhlbgorCSAqIGNhbGxpbmcgdGhlIGluZGV4 IEFNJ3MgYW1wb3NyZXNldC4KKwkgKi8KKwloZWFkID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBi YXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisJaGVhZC0+ZGlyID0gLWhlYWQtPmRpcjsKKwlpZiAo c2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQpCisJCXNjYW4tPmluZGV4 UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIGhlYWQpOworfQorCisvKgorICog UmVjb3JkIHRoYXQgc2NhblBvcyBpdGVtIGlzIGRlYWQKKyAqCisgKiBSZWNvcmRzIGFuIG9mZnNl dCB0byB0aGUgY3VycmVudCBzY2FuQmF0Y2gvc2NhblBvcyBpdGVtLCBzYXZpbmcgaXQgaW4KKyAq IHNjYW5CYXRjaCdzIGRlYWRJdGVtcyBhcnJheS4gIFRoZSBpdGVtcycgaW5kZXggdHVwbGVzIHdp bGwgbGF0ZXIgYmUKKyAqIG1hcmtlZCBMUF9ERUFEIHdoZW4gY3VycmVudCBzY2FuQmF0Y2ggaXMg ZnJlZWQuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2Nh bkRlc2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNo cmluZ2J1Zi5zY2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJaWYgKHNjYW5CYXRjaC0+ZGVhZEl0ZW1z ID09IE5VTEwpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgc2Nh bi0+bWF4aXRlbXNiYXRjaCk7CisJaWYgKHNjYW5CYXRjaC0+bnVtRGVhZCA8IHNjYW4tPm1heGl0 ZW1zYmF0Y2gpCisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zW3NjYW5CYXRjaC0+bnVtRGVhZCsrXSA9 IHNjYW5Qb3MtPml0ZW07Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVk IHdpdGggYSBiYXRjaAorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSdzIG9yZGVyZWQgaW5kZXgg c2NhbiBpbXBsZW1lbnRhdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkCisgKiB3aXRoIGEgYmF0Y2gg YW5kIHdpc2hlcyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMuCisgKgorICogV2UgY2FsbCBhbXVu Z3VhcmRiYXRjaCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoZS5nLiBidWZm ZXIKKyAqIHBpbikgd2hlbiBpdCBoYXNuJ3QgYmVlbiBkcm9wcGVkIHlldC4gIEZvciBwbGFpbiBN VkNDIHNjYW5zICh3aGVyZQorICogYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIHNldCksIHRoZSBp bnRlcmxvY2sgd2FzIGFscmVhZHkgZHJvcHBlZCBlYWdlcmx5CisgKiBpbiBpbmRleGFtX3V0aWxf YmF0Y2hfdW5sb2NrLCBzbyB3ZSBza2lwIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsIGhlcmUuCisg KiBJbmRleC1vbmx5IHNjYW5zIG11c3QgZGVsYXkgZHJvcHBpbmcgdGhlIGludGVybG9jayB1bnRp bCB2aXNpYmlsaXR5IGlzCisgKiByZXNvbHZlZCBmb3IgYWxsIGl0ZW1zIGluIHRoZSBiYXRjaCwg c28gYW11bmd1YXJkYmF0Y2ggbWF5IHN0aWxsIG5lZWQgdG8KKyAqIGFjdCBoZXJlLiAgRm9yIG5v bi1NVkNDIHNuYXBzaG90IHNjYW5zLCB0aGUgaW50ZXJsb2NrIGlzIGFsd2F5cyBoZWxkCisgKiB1 bnRpbCBhbXVuZ3VhcmRiYXRjaCBkcm9wcyBpdCBoZXJlIC0tIHRoaXMgaXMgdGhlIG9ubHkgcGxh Y2Ugd2lsbGluZyB0bworICogdW5ndWFyZCBhIG5vbi1NVkNDIHNjYW4ncyBiYXRjaC4KKyAqCisg KiBXaGVuIHRoZSBiYXRjaCBoYXMgZGVhZCBpdGVtcyAobnVtRGVhZCA+IDApIGFuZCB0aGUgaW5k ZXggQU0gcHJvdmlkZXMgYW4KKyAqIGFta2lsbGl0ZW1zYmF0Y2ggY2FsbGJhY2ssIHdlIGNhbGwg aXQgdG8gc2V0IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgKKyAqIHBhZ2UuICBXZSBhbHdheXMg cmVjeWNsZSB0aGUgYmF0Y2ggbWVtb3J5IHZpYSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4K KyAqCisgKiBOb3RlOiBDYWxsaW5nIGhlcmUgd2hlbiAnYmF0Y2gnIGlzIGFsc28gYmF0Y2hyaW5n YnVmLm1hcmtCYXRjaCBpcyBhIG5vLW9wLgorICogQ2FsbGVycyB0aGF0IGRvbid0IHdhbnQgdGhp cyBzaG91bGQgc2V0IGJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggdG8gTlVMTAorICogYmVmb3JlIGNh bGxpbmcgdXMuICBOb3RlIHRoYXQgbWFya0JhdGNoIGhhcyB0byBiZSBleHBsaWNpdGx5IGZyZWVk LgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8qIGRvbid0IGZyZWUgY2FsbGVyJ3MgYmF0Y2gg aWYgaXQgaXMgc2NhbidzIGN1cnJlbnQgbWFya0JhdGNoICovCisJaWYgKGJhdGNoID09IHNjYW4t PmJhdGNocmluZ2J1Zi5tYXJrQmF0Y2gpCisJCXJldHVybjsKKworCS8qIERyb3AgVElEIHJlY3lj bGluZyBpbnRlcmxvY2sgKGUuZy4sIGJ1ZmZlciBwaW4pIHZpYSBhbXVuZ3VhcmRiYXRjaCAqLwor CWlmICghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQorCQl0YWJsZWFtX3V0aWxfdW5ndWFy ZF9iYXRjaChzY2FuLCBiYXRjaCk7CisKKwkvKgorCSAqIExldCB0aGUgaW5kZXggQU0gc2V0IExQ X0RFQUQgYml0cyBpbiB0aGUgaW5kZXggcGFnZSwgaWYgYXBwbGljYWJsZS4KKwkgKgorCSAqIGJh dGNoLmRlYWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBvcmRlciB0aGUgc2NhbiByZXR1cm5l ZCBpdGVtcyBpbi4KKwkgKiBXZSBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9U SUQgdHdpY2UuCisJICoKKwkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IGRlYWRJdGVtc1tdLiAgVGhh dCB3YXkgdGhlIGluZGV4IEFNIGNhbiBzYWZlbHkKKwkgKiBhc3N1bWUgdGhhdCBpdGVtcyB3aWxs IGFsd2F5cyBiZSBpbiB0aGVpciBvcmlnaW5hbCBpbmRleCBwYWdlIG9yZGVyLgorCSAqLworCWlm IChiYXRjaC0+bnVtRGVhZCA+IDAgJiYKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFta2lsbGl0ZW1zYmF0Y2ggIT0gTlVMTCkKKwl7CisJCWlmIChiYXRjaC0+bnVtRGVhZCA+IDEp CisJCXsKKwkJCXFzb3J0KGJhdGNoLT5kZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLCBzaXplb2Yo aW50KSwKKwkJCQkgIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJCWJhdGNoLT5udW1EZWFkID0gcXVu aXF1ZShiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRjaC0+bnVtRGVhZCwKKwkJCQkJCQkJCSBzaXplb2Yo aW50KSwgYmF0Y2hfY29tcGFyZV9pbnQpOworCQl9CisKKwkJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFta2lsbGl0ZW1zYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICog VXNlIGNhY2hlLCBqdXN0IGxpa2UgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UgZG9lcyBpdCAo dW5sZXNzIHNjYW4gaXMKKwkgKiBzaHV0dGluZyBkb3duKQorCSAqLworCWlmIChzY2FuLT54c19o ZWFwZmV0Y2gpCisJeworCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFU Q0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+YmF0Y2hyaW5nYnVmLmNhY2hlW2ldID09IE5V TEwpCisJCQl7CisJCQkJLyogZm91bmQgZW1wdHkgc2xvdCwgd2UncmUgZG9uZSAqLworCQkJCXNj YW4tPmJhdGNocmluZ2J1Zi5jYWNoZVtpXSA9IGJhdGNoOworCQkJCXJldHVybjsKKwkJCX0KKwkJ fQorCX0KKworCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1z KTsKKwlwZnJlZShiYXRjaF9hbGxvY19iYXNlKGJhdGNoLCBzY2FuKSk7Cit9CisKKy8qCisgKiBE cm9wIHRoZSBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHZpYSBhbXVuZ3VhcmRiYXRj aAorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB3 aGF0ZXZlciBpbnRlcmxvY2sgdGhlIGluZGV4CisgKiBBTSBob2xkcyB0byBwcmV2ZW50IHVuc2Fm ZSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNICh0eXBpY2FsbHkgYQorICogYnVm ZmVyIHBpbiBvbiB0aGUgYmF0Y2gncyBpbmRleCBwYWdlIGluIGJhdGNoJ3Mgb3BhcXVlIGFyZWEp LgorICoKKyAqIE5vdGU6IGFtdW5ndWFyZGJhdGNoIG11c3QgYmUgaWRlbXBvdGVudCBvbiB0aGUg aW5kZXggQU0gc2lkZSAtLSBpdCBtYXkgYmUKKyAqIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBmb3Ig dGhlIHNhbWUgYmF0Y2gsIGFuZCBtdXN0IGRvIG5vdGhpbmcgaWYgdGhlCisgKiBpbnRlcmxvY2sg aGFzIGFscmVhZHkgYmVlbiBkcm9wcGVkLgorICovCit2b2lkCit0YWJsZWFtX3V0aWxfdW5ndWFy ZF9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCS8q IE9ubHkgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGR1cmluZyAhYmF0Y2hJbW1lZGlhdGVVbmd1YXJk IHNjYW5zICovCisJQXNzZXJ0KCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCisJc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtdW5ndWFyZGJhdGNoKHNjYW4sIGJhdGNoKTsK K30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICoJCQl1dGlsaXR5IGZ1bmN0aW9ucyBjYWxsZWQgYnkgYW1nZXRi YXRjaCBpbmRleCBBTXMKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgbWFuYWdlIGJhdGNoIGFsbG9j YXRpb24sIHVubG9jay9waW4gbWFuYWdlbWVudCwgYW5kIGJhdGNoCisgKiByZXNvdXJjZSByZWN5 Y2xpbmcuICBJbmRleCBBTXMgaW1wbGVtZW50aW5nIGFtZ2V0YmF0Y2ggc2hvdWxkIGdlbmVyYWxs eSB1c2UKKyAqIHRoZXNlIHJhdGhlciB0aGFuIG1hbmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisg KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFVubG9jayBiYXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVy IGxvY2sKKyAqCisgKiBVbmxvY2tzIHRoZSBnaXZlbiBidWZmZXIgaW4gcHJlcGFyYXRpb24gZm9y IGFtZ2V0YmF0Y2ggcmV0dXJuaW5nIGl0ZW1zCisgKiBzYXZlZCBpbiB0aGF0IGJhdGNoLiAgUGVy Zm9ybXMgZXh0cmEgc3RlcHMgcmVxdWlyZWQgYnkgYW1nZXRiYXRjaCBjYWxsZXJzCisgKiBpbiBw YXNzaW5nLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYSBiYXRjaCBoYXMgb25lIG9yIG1v cmUgbWF0Y2hpbmcgaXRlbXMgdG8gcmV0dXJuIHVzaW5nCisgKiBhbWdldGJhdGNoIChvciBmb3Ig YW1nZXRiaXRtYXAgdG8gbG9hZCBpbnRvIGl0cyBiaXRtYXAgb2YgbWF0Y2hpbmcgVElEcykuCisg KiBXaGVuIGFuIGluZGV4IHBhZ2UgaGFzIG5vIG1hdGNoZXMsIGl0J3MgYWx3YXlzIHNhZmUgZm9y IGluZGV4IEFNcyB0byBkcm9wCisgKiBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluIGZvciB0aGVt c2VsdmVzLgorICoKKyAqIE5vdGU6IEl0IGlzIGNvbnZlbmllbnQgZm9yIGluZGV4IEFNcyB0aGF0 IGltcGxlbWVudCBib3RoIGFtZ2V0YmF0Y2ggYW5kCisgKiBhbWdldGJpdG1hcCB0byBjb25zaXN0 ZW50bHkgdXNlIHRoZSBzYW1lIGJhdGNoIG1hbmFnZW1lbnQgYXBwcm9hY2gsIHNpbmNlCisgKiB0 aGF0IGF2b2lkcyBpbnRyb2R1Y2luZyBzcGVjaWFsIGNhc2VzIHRvIGxvd2VyLWxldmVsIGNvZGUu ICBXZSBkcm9wIGJvdGgKKyAqIHRoZSBsb2NrIGFuZCB0aGUgcGluIG9uIGJhdGNoJ3MgcGFnZSBv biBiZWhhbGYgb2YgYW1nZXRiaXRtYXAgY2FsbGVycy4KKyAqCisgKiBGb3IgYW1nZXRiYXRjaCBj YWxsZXJzLCB3aGVuIGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBzZXQgKHBsYWluIE1WQ0MKKyAq IHNjYW5zKSwgd2UgYWxzbyByZWxlYXNlIHRoZSBwaW4gaGVyZSAodGhlIFRJRCByZWN5Y2xpbmcg aW50ZXJsb2NrKSwgc28KKyAqIHRoYXQgbm8gbGF0ZXIgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sg d2lsbCBiZSBuZWVkZWQuICBPdGhlcndpc2UgdGhlIHRhYmxlCisgKiBBTSB3aWxsIGNhbGwgYW11 bmd1YXJkYmF0Y2ggbGF0ZXIgd2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgaW50ZXJsb2NrLgor ICoKKyAqIEluZGV4IEFNcyB3aG9zZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayBpcyBub3QganVz dCBhIGJ1ZmZlciBwaW4sIG9yIHdob3NlCisgKiBhbXVuZ3VhcmRiYXRjaCBkb2VzIG5vdCBzaW1w bHkgcmVsZWFzZSBhIHBpbiwgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gdXNlIHRoaXMKKyAqIGZ1bmN0 aW9uLiAgVGhleSBjYW4gaW1wbGVtZW50IHRoZWlyIG93biBlcXVpdmFsZW50LgorICovCit2b2lk CitpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gsIEJ1ZmZlciBidWYpCit7CisJLyogYmF0Y2ggbXVzdCBoYXZlIG9uZSBvciBt b3JlIG1hdGNoaW5nIGl0ZW1zIHJldHVybmVkIGJ5IGluZGV4IEFNICovCisJQXNzZXJ0KGJhdGNo LT5maXJzdEl0ZW0gPj0gMCAmJiBiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7 CisKKwlpZiAoc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCXsKKwkJLyogYW1nZXRiYXRjaCAobm90IGFt Z2V0Yml0bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxM KTsKKworCQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1raWxsaXRl bXNiYXRjaCBoYXMgYSB3YXkgdG8gZGV0ZWN0CisJCSAqIHdoZW4gY29uY3VycmVudCBoZWFwIFRJ RCByZWN5Y2xpbmcgYnkgVkFDVVVNIG1pZ2h0IGhhdmUgdGFrZW4KKwkJICogcGxhY2UuICBJdCds bCBvbmx5IGJlIHNhZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbgor CQkgKiB0aGUgcGFnZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKgorCQkgKiBQbGFpbiBNVkND IHNjYW5zIChiYXRjaEltbWVkaWF0ZVVuZ3VhcmQpIGFsc28gcmVsZWFzZSB0aGUgcGluIG5vdywK KwkJICogZHJvcHBpbmcgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIHNvIHRoYXQgbm8gYW11 bmd1YXJkYmF0Y2gKKwkJICogY2FsbGJhY2sgd2lsbCBiZSBuZWVkZWQgbGF0ZXIuICBUaGUgaW5k ZXggQU0gY2FsbGVyIG11c3QgY2xlYXIgaXRzCisJCSAqIG93biBvcGFxdWUgYnVmIGZpZWxkIGFm dGVyIHdlIHJldHVybi4KKwkJICoKKwkJICogTm9uLWltbWVkaWF0ZS11bmd1YXJkIHNjYW5zIHJl dGFpbiB0aGUgcGluOyB0aGUgdGFibGUgQU0gd2lsbCBjYWxsCisJCSAqIGFtdW5ndWFyZGJhdGNo IHRvIGRyb3AgdGhlIGludGVybG9jayB3aGVuIHJlYWR5LgorCQkgKi8KKwkJYmF0Y2gtPmxzbiA9 IEJ1ZmZlckdldExTTkF0b21pYyhidWYpOworCQlpZiAoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1 YXJkKQorCQl7CisJCQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJCVVu bG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGp1c3QgZHJv cCB0aGUgbG9jayAoaG9sZCBvbiB0byBpbnRlcmxvY2sgcGluKSAqLworCQkJVW5sb2NrQnVmZmVy KGJ1Zik7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLyogYW1nZXRiaXRtYXAgKG5vdCBhbWdldGJh dGNoKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKKwor CQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KKwkJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWYpOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGJhdGNoCisgKgorICog VXNlZCBieSBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIChib3Ro IGR1cmluZyBhbWdldGJhdGNoCisgKiBhbmQgYW1nZXRiaXRtYXAgc2NhbnMpLgorICoKKyAqIFJl dHVybnMgSW5kZXhTY2FuQmF0Y2ggd2l0aCBzcGFjZSB0byBmaXQgc2Nhbi0+bWF4aXRlbXNiYXRj aC1tYW55CisgKiBCYXRjaE1hdGNoaW5nSXRlbSBlbnRyaWVzLiAgVGhpcyB3aWxsIGVpdGhlciBi ZSBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaCwgb3IKKyAqIGEgYmF0Y2ggcmVjeWNsZWQgZnJvbSB0 aGUgY2FjaGUgbWFuYWdlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4gIFNlZQorICog Y29tbWVudHMgYWJvdmUgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuCisgKgorICogSG91c2Vr ZWVwaW5nIGZpZWxkcyAoYnVmLCBrbm93bkVuZEJhY2t3YXJkL0ZvcndhcmQsIGZpcnN0SXRlbSwg bGFzdEl0ZW0sCisgKiBudW1EZWFkLCBkZWFkSXRlbXMsIGN1cnJUdXBsZXMpIGFyZSBpbml0aWFs aXplZCBoZXJlLiAgVGhlIHRhYmxlIEFNJ3MKKyAqIGJhdGNoX2luaXQgY2FsbGJhY2sgaXMgaW52 b2tlZCBoZXJlIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlIEFNIG9wYXF1ZSBhcmVhLgorICogVGhl IGluZGV4IEFNIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZmlsbGluZyBpbiBpdHMgcGVyLWJh dGNoIG9wYXF1ZQorICogZmllbGRzIGFuZCB0aGUgbWF0Y2hpbmcgaXRlbXNbXSBhcnJheS4KKyAq CisgKiBPbmNlIHBvcHVsYXRlZCwgY2FsbGVyIGVpdGhlciBwYXNzZXMgdGhlIGJhdGNoIHRvIGlu ZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sKKyAqIChhaGVhZCBvZiBhbWdldGJhdGNoIHJldHVybmlu ZyBpdCksIG9yIHRvIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlICh3aGVuCisgKiB0aGUgcGFn ZSBoYWQgbm8gbWF0Y2hlcykuCisgKi8KK0luZGV4U2NhbkJhdGNoCitpbmRleGFtX3V0aWxfYmF0 Y2hfYWxsb2MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUluZGV4U2NhbkJhdGNoIGJhdGNoID0g TlVMTDsKKwlib29sCQluZXdfYWxsb2MgPSBmYWxzZTsKKworCS8qCisJICogTGF6aWx5IGNvbXB1 dGUgYmF0Y2hfdGFibGVfb2Zmc2V0IG9uIGZpcnN0IGFsbG9jYXRpb24uICBUaGlzIGNvbWJpbmVz CisJICogdGhlIHRhYmxlIEFNIGFuZCBpbmRleCBBTSBvcGFxdWUgc2l6ZXMgaW50byBhIHNpbmds ZSBvZmZzZXQgdGhhdCBjYW4gYmUKKwkgKiB1c2VkIHRvIGZpbmQgdGhlIHRhYmxlIEFNIG9wYXF1 ZSBhcmVhIChhbmQgdGhlIHRydWUgYWxsb2NhdGlvbiBiYXNlKQorCSAqIGZyb20gdGhlIGJhdGNo IHBvaW50ZXIuCisJICovCisJaWYgKHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldCA9PSAwICYmCisJ CShzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA+IDAgfHwKKwkJIChzY2FuLT54c19oZWFw ZmV0Y2ggJiYgc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA+IDApKSkKKwl7 CisJCXVpbnQxNgkJdGFibGVfb3BhcXVlID0gc2Nhbi0+eHNfaGVhcGZldGNoID8KKwkJCXNjYW4t PnhzX2hlYXBmZXRjaC0+YmF0Y2hfb3BhcXVlX3NpemUgOiAwOworCisJCXNjYW4tPmJhdGNoX3Rh YmxlX29mZnNldCA9IHRhYmxlX29wYXF1ZSArCisJCQlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVf c2l6ZTsKKwl9CisKKwkvKiBGaXJzdCBsb29rIGZvciBhbiBleGlzdGluZyBiYXRjaCBmcm9tIHRo ZSBjYWNoZSAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQlmb3IgKGludCBpID0g MDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCQl7CisJCQlpZiAoc2Nhbi0+ YmF0Y2hyaW5nYnVmLmNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJLyogUmV0dXJuIGNhY2hl ZCB1bnJlZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNocmluZ2J1Zi5j YWNoZVtpXTsKKwkJCQlzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPSBOVUxMOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYgKHNjYW4tPnhzX2JpdG1hcF9iYXRjaCAhPSBO VUxMKQorCXsKKwkJLyoKKwkJICogUmV1c2UgY2FjaGVkIGJhdGNoIGZyb20gcHJpb3IgYW1nZXRi aXRtYXAgaXRlcmF0aW9uLiAgVGhpcyBwYXRoIGlzCisJCSAqIGhpdCBvbiBldmVyeSBhbWdldGJp dG1hcCBjYWxsIGhlcmUgYWZ0ZXIgdGhlIHNjYW4ncyBmaXJzdC4KKwkJICovCisJCWJhdGNoID0g c2Nhbi0+eHNfYml0bWFwX2JhdGNoOworCQlzY2FuLT54c19iaXRtYXBfYmF0Y2ggPSBOVUxMOwor CX0KKworCWlmICghYmF0Y2gpCisJeworCQlTaXplCQlwcmVmaXhfc3o7CisJCVNpemUJCWJhc2Vf c3o7CisJCVNpemUJCXRyYWlsaW5nX3N6OworCQlTaXplCQlhbGxvY3N6OworCQljaGFyCSAgICpy YXc7CisKKwkJLyogQU0gb3BhcXVlIGFyZWFzIGJlZm9yZSB0aGUgYmF0Y2ggcG9pbnRlciAqLwor CQlwcmVmaXhfc3ogPSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7CisKKwkJLyogSW5kZXhTY2Fu QmF0Y2hEYXRhIGhlYWRlciArIGl0ZW1zW10gKi8KKwkJYmFzZV9zeiA9IG9mZnNldG9mKEluZGV4 U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCXNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBz Y2FuLT5tYXhpdGVtc2JhdGNoOworCisJCS8qCisJCSAqIFRyYWlsaW5nIGRhdGEgYWZ0ZXIgaXRl bXNbXTogdGFibGUgQU0gcGVyLWl0ZW0gZGF0YSAoZS5nLiB2aXNJbmZvKQorCQkgKiBhbmQgY3Vy clR1cGxlcyBpbmRleCBBTSB0dXBsZSB3b3Jrc3BhY2UuCisJCSAqLworCQl0cmFpbGluZ19zeiA9 IDA7CisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCWlmIChzY2FuLT54c19oZWFw ZmV0Y2ggJiYKKwkJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgPiAw KQorCQkJCXRyYWlsaW5nX3N6ICs9IE1BWEFMSUdOKHNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0Y2hf cGVyX2l0ZW1fc2l6ZSAqCisJCQkJCQkJCQkJc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQl0cmFp bGluZ19zeiArPSBzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlOworCQl9CisKKwkJYWxsb2Nz eiA9IHByZWZpeF9zeiArIE1BWEFMSUdOKGJhc2Vfc3opICsgdHJhaWxpbmdfc3o7CisJCXJhdyA9 IHBhbGxvYyhhbGxvY3N6KTsKKwkJYmF0Y2ggPSAoSW5kZXhTY2FuQmF0Y2gpIChyYXcgKyBwcmVm aXhfc3opOworCisJCS8qIFNldCB1cCBjdXJyVHVwbGVzIHBvaW50ZXIgZm9yIGluZGV4LW9ubHkg c2NhbnMgKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT5iYXRjaF90dXBsZXNf d29ya3NwYWNlID4gMCkKKwkJeworCQkJU2l6ZQkJaXRlbXNFbmQgPSBNQVhBTElHTihiYXNlX3N6 KTsKKwkJCVNpemUJCXRhYmxlVHJhaWxpbmcgPSAwOworCisJCQlpZiAoc2Nhbi0+eHNfaGVhcGZl dGNoICYmCisJCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplID4gMCkK KwkJCQl0YWJsZVRyYWlsaW5nID0gTUFYQUxJR04oc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9w ZXJfaXRlbV9zaXplICoKKwkJCQkJCQkJCQkgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJCQliYXRj aC0+Y3VyclR1cGxlcyA9IChjaGFyICopIGJhdGNoICsgaXRlbXNFbmQgKyB0YWJsZVRyYWlsaW5n OworCQl9CisJCWVsc2UKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gTlVMTDsKKworCQkvKgorCQkg KiBCYXRjaGVzIGFsbG9jYXRlIGRlYWRJdGVtcyBsYXppbHkgKHRob3VnaCBub3RlIHRoYXQgY2Fj aGVkIGJhdGNoZXMKKwkJICoga2VlcCB0aGVpciBkZWFkSXRlbXMgYWxsb2NhdGlvbiB3aGVuIHJl Y3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gtPmRlYWRJdGVtcyA9IE5VTEw7CisJCW5ld19hbGxvYyA9 IHRydWU7CisJfQorCisJLyogeHNfd2FudF9pdHVwIHNjYW5zIG11c3QgZ2V0IGEgY3VyclR1cGxl cyBzcGFjZSAqLworCUFzc2VydCghKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT5iYXRjaF90 dXBsZXNfd29ya3NwYWNlID4gMCAmJgorCQkJIGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpKTsK KworCS8qIExldCB0aGUgdGFibGUgQU0gaW5pdGlhbGl6ZSBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBh cmVhICovCisJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwkJdGFibGVfaW5kZXhfYmF0Y2hfaW5p dChzY2FuLCBiYXRjaCwgbmV3X2FsbG9jKTsKKworCS8qIHNoYXJlZCBpbml0aWFsaXphdGlvbiAq LworCWJhdGNoLT5rbm93bkVuZEJhY2t3YXJkID0gZmFsc2U7CisJYmF0Y2gtPmtub3duRW5kRm9y d2FyZCA9IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0g PSAtMTsKKwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisg KiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk IGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFt X3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgKHdo ZW4gc2NhbgorICogaGFzbid0IGFscmVhZHkgZmluaXNoZWQpIHRvIHJlZHVjZSBwYWxsb2MvcGZy ZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlh dGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5v IG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4 CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRo IG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRp bF9mcmVlX2JhdGNoLCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBh bWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0 Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBh bWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMg Zm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5z OyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9p bmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9y ZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYg KCFzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNh bGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFs bG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBh bHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2VydChzY2FuLT54c19iaXRtYXBf YmF0Y2ggPT0gTlVMTCk7CisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisJ CUFzc2VydChiYXRjaC0+ZGVhZEl0ZW1zID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmN1cnJU dXBsZXMgPT0gTlVMTCk7CisKKwkJc2Nhbi0+eHNfYml0bWFwX2JhdGNoID0gYmF0Y2g7CisJCXJl dHVybjsKKwl9CisKKwkvKiBhbWdldGJhdGNoIHNjYW4gY2FsbGVyICovCisJQXNzZXJ0KHNjYW4t PmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKworCS8qCisJICogVHJ5IHRvIHN0b3JlIGNhbGxlcidz IGJhdGNoIGluIHRoaXMgYW1nZXRiYXRjaCBzY2FuJ3MgY2FjaGUgb2YKKwkgKiBwcmV2aW91c2x5 IHJlbGVhc2VkIGJhdGNoZXMgZmlyc3QKKwkgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVY X1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJaWYgKHNjYW4tPmJhdGNocmluZ2J1Zi5j YWNoZVtpXSA9PSBOVUxMKQorCQl7CisJCQkvKiBmb3VuZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25l ICovCisJCQlzY2FuLT5iYXRjaHJpbmdidWYuY2FjaGVbaV0gPSBiYXRjaDsKKwkJCXJldHVybjsK KwkJfQorCX0KKworCS8qCisJICogRmFpbGVkIHRvIGZpbmQgYSBmcmVlIHNsb3QgZm9yIHRoaXMg YmF0Y2guICBXZSdsbCBqdXN0IGZyZWUgaXQKKwkgKiBvdXJzZWx2ZXMuCisJICovCisJaWYgKGJh dGNoLT5kZWFkSXRlbXMpCisJCXBmcmVlKGJhdGNoLT5kZWFkSXRlbXMpOworCXBmcmVlKGJhdGNo X2FsbG9jX2Jhc2UoYmF0Y2gsIHNjYW4pKTsKK30KKworLyoKKyAqIHFzb3J0IGNvbXBhcmlzb24g ZnVuY3Rpb24gZm9yIGludCBhcnJheXMKKyAqLworc3RhdGljIGludAorYmF0Y2hfY29tcGFyZV9p bnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWludAkJCWEgPSAqKChjb25z dCBpbnQgKikgdmEpOworCWludAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOworCisJcmV0dXJu IHBnX2NtcF9zMzIoYSwgYik7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKaW5k ZXggZGE2NGNiNTk1Li44M2RmYTNmMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVp bGQKQEAgLTUsNCArNSw1IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FtdmFsaWRh dGUuYycsCiAgICdnZW5hbS5jJywKICAgJ2luZGV4YW0uYycsCisgICdpbmRleGJhdGNoLmMnLAog KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQppbmRleCBjYjkyMWNhMmUuLmEzNzg2OWI3MSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9SRUFETUUKQEAgLTE3OSwxOCArMTc5LDE1IEBAIGhvbGQgb24gdG8g dGhlIHBpbiAodXNlZCB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgbGVhZiBwYWdlKSB1bnRpbCBfYWZ0 ZXJfCiB0aGV5J3JlIGRvbmUgdmlzaXRpbmcgdGhlIGhlYXAgKGZvciBUSURzIGZyb20gcGlubmVk IGxlYWYgcGFnZSkgcHJldmVudHMKIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIFZBQ1VVTSBj YW5ub3QgZ2V0IGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2NrCiB1bnRpbCB0aGUgaW5kZXggc2Nh biBpcyB0b3RhbGx5IGZpbmlzaGVkIHByb2Nlc3NpbmcgaXRzIGxlYWYgcGFnZS4KK1RoaXMgaXMg cmVxdWlyZWQgYnkgYW55IGluZGV4IEFNIHRoYXQgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRjaAor aW50ZXJmYWNlLiAgKFNlZSBhbHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIAotVGhp cyBhcHByb2FjaCBpcyBmYWlybHkgY29hcnNlLCBzbyB3ZSBhdm9pZCBpdCB3aGVuZXZlciBwb3Nz aWJsZS4gIEluCi1wcmFjdGljZSBtb3N0IGluZGV4IHNjYW5zIHdvbid0IGhvbGQgb250byB0aGVp ciBwaW4sIGFuZCBzbyB3b24ndCBibG9jawotVkFDVVVNLiAgVGhlc2UgaW5kZXggc2NhbnMgbXVz dCBkZWFsIHdpdGggVElEIHJlY3ljbGluZyBkaXJlY3RseSwgd2hpY2ggaXMKLW1vcmUgY29tcGxp Y2F0ZWQgYW5kIG5vdCBhbHdheXMgcG9zc2libGUuICBTZWUgbGF0ZXIgc2VjdGlvbiBvbiBtYWtp bmcKLWNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlLgotCi1PcHBvcnR1bmlzdGljIGluZGV4 IHR1cGxlIGRlbGV0aW9uIHBlcmZvcm1zIGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1tb2Rp ZmljYXRpb25zIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMg c2FmZSBiZWNhdXNlCi10aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2lu ZyBwbGFjZSBsYXRlciBvbiAtLSBvbmx5IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxl LiAgU2VlIGFsc28gc2ltcGxlIGRlbGV0aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBiZWxv dy4KK09wcG9ydHVuaXN0aWMgaW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNhbWUg cGFnZS1sZXZlbAorbW9kaWZpY2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGluZyBh biBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBxdWVz dGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2FuIG1h a2UgVElEcyByZWN5Y2xhYmxlLiAgSW4gb3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAgbG9j aworc2VydmVzIHRvIHByb3RlY3Qgbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25jdXJy ZW50IFRJRCByZWN5Y2xpbmcKK2hhemFyZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1UcmVl IHN0cnVjdHVyZSBpdHNlbGYuCiAKIEJlY2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxkLCBh bmQgYSBwYWdlIGNhbiBiZSBzcGxpdCBldmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBhIHBp biBvbiBpdCwgaXQgaXMgcG9zc2libGUgdGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQwLDU0 ICs0MzcsNiBAQCB3aGVuZXZlciBpdCBpcyBzdWJzZXF1ZW50bHkgdGFrZW4gZnJvbSB0aGUgRlNN IGZvciByZXVzZS4gIFRoZSBkZWxldGVkCiBwYWdlJ3MgY29udGVudHMgd2lsbCBiZSBvdmVyd3Jp dHRlbiBieSB0aGUgc3BsaXQgb3BlcmF0aW9uIChpdCB3aWxsIGJlY29tZQogdGhlIG5ldyByaWdo dCBzaWJsaW5nIHBhZ2UpLgogCi1NYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BcyBleHBsYWluZWQgaW4g dGhlIGVhcmxpZXIgc2VjdGlvbiBhYm91dCBkZWxldGluZyBpbmRleCB0dXBsZXMgZHVyaW5nCi1W QUNVVU0sIHdlIGltcGxlbWVudCBhIGxvY2tpbmcgcHJvdG9jb2wgdGhhdCBhbGxvd3MgaW5kaXZp ZHVhbCBpbmRleCBzY2FucwotdG8gYXZvaWQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgSW5k ZXggc2NhbnMgb3B0LW91dCAoYW5kIHNvIGRyb3AgdGhlaXIKLWxlYWYgcGFnZSBwaW4gd2hlbiB2 aXNpdGluZyB0aGUgaGVhcCkgd2hlbmV2ZXIgaXQncyBzYWZlIHRvIGRvIHNvLCB0aG91Z2guCi1E cm9wcGluZyB0aGUgcGluIGVhcmx5IGlzIHVzZWZ1bCBiZWNhdXNlIGl0IGF2b2lkcyBibG9ja2lu ZyBwcm9ncmVzcyBieQotVkFDVVVNLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdp dGggaW5kZXggc2NhbnMgdXNlZCBieSBjdXJzb3JzLAotc2luY2UgaWRsZSBjdXJzb3JzIHNvbWV0 aW1lcyBzdG9wIGZvciByZWxhdGl2ZWx5IGxvbmcgcGVyaW9kcyBvZiB0aW1lLiAgSW4KLWV4dHJl bWUgY2FzZXMsIGEgY2xpZW50IGFwcGxpY2F0aW9uIG1heSBob2xkIG9uIHRvIGFuIGlkbGUgY3Vy c29ycyBmb3IKLWhvdXJzIG9yIGV2ZW4gZGF5cy4gIEJsb2NraW5nIFZBQ1VVTSBmb3IgdGhhdCBs b25nIGNvdWxkIGJlIGRpc2FzdHJvdXMuCi0KLUluZGV4IHNjYW5zIHRoYXQgZG9uJ3QgaG9sZCBv biB0byBhIGJ1ZmZlciBwaW4gYXJlIHByb3RlY3RlZCBieSBob2xkaW5nIGFuCi1NVkNDIHNuYXBz aG90IGluc3RlYWQuICBUaGlzIG1vcmUgbGltaXRlZCBpbnRlcmxvY2sgcHJldmVudHMgd3Jvbmcg YW5zd2VycwotdG8gcXVlcmllcywgYnV0IGl0IGRvZXMgbm90IHByZXZlbnQgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIGl0c2VsZiAob25seQotaG9sZGluZyBvbnRvIHRoZSBsZWFmIHBhZ2UgcGlu IHdoaWxlIGFjY2Vzc2luZyB0aGUgaGVhcCBlbnN1cmVzIHRoYXQpLgotCi1JbmRleC1vbmx5IHNj YW5zIGNhbiBuZXZlciBkcm9wIHRoZWlyIGJ1ZmZlciBwaW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJs ZSB0bwotdG9sZXJhdGUgaGF2aW5nIGEgcmVmZXJlbmNlZCBUSUQgYmVjb21lIHJlY3ljbGFibGUu ICBJbmRleC1vbmx5IHNjYW5zCi10eXBpY2FsbHkganVzdCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBt YXAgKG5vdCB0aGUgaGVhcCBwcm9wZXIpLCBhbmQgc28gd2lsbAotbm90IHJlbGlhYmx5IG5vdGlj ZSB0aGF0IGFueSBzdGFsZSBUSUQgcmVmZXJlbmNlIChmb3IgYSBUSUQgdGhhdCBwb2ludGVkCi10 byBhIGRlYWQtdG8tYWxsIGhlYXAgaXRlbSBhdCBmaXJzdCkgd2FzIGNvbmN1cnJlbnRseSBtYXJr ZWQgTFBfVU5VU0VEIGluCi10aGUgaGVhcCBieSBWQUNVVU0uICBUaGlzIGNvdWxkIGVhc2lseSBh bGxvdyBWQUNVVU0gdG8gc2V0IHRoZSB3aG9sZSBoZWFwCi1wYWdlIHRvIGFsbC12aXNpYmxlIGlu IHRoZSB2aXNpYmlsaXR5IG1hcCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiAgQW4gTVZDQwotc25h cHNob3QgaXMgb25seSBzdWZmaWNpZW50IHRvIGF2b2lkIHByb2JsZW1zIGR1cmluZyBwbGFpbiBp bmRleCBzY2FucwotYmVjYXVzZSB0aGV5IG11c3QgYWNjZXNzIGdyYW51bGFyIHZpc2liaWxpdHkg aW5mb3JtYXRpb24gZnJvbSB0aGUgaGVhcAotcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdp bGwgZXZlbiByZWNvZ25pemUgTFBfVU5VU0VEIGl0ZW1zIGluIHRoZQotaGVhcCAoaXRlbXMgdGhh dCBjb3VsZCBiZSByZWN5Y2xlZCBidXQgaGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12 aXNpYmxlIiAtLSBldmVuIHdoZW4gdGhlIGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJl ZCBhbGwtdmlzaWJsZS4KLQotTFBfREVBRCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUg a2lsbF9wcmlvcl90dXBsZSBvcHRpbWl6YXRpb24KLShkZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1w bGUgZGVsZXRpb24sIGJlbG93KSBpcyBhbHNvIG1vcmUgY29tcGxpY2F0ZWQgZm9yCi1pbmRleCBz Y2FucyB0aGF0IGRyb3AgdGhlaXIgbGVhZiBwYWdlIHBpbnMuICBXZSBtdXN0IGJlIGNhcmVmdWwg dG8gYXZvaWQKLUxQX0RFQUQtbWFya2luZyBhbnkgbmV3IGluZGV4IHR1cGxlIHRoYXQgbG9va3Mg bGlrZSBhIGtub3duLWRlYWQgaW5kZXgKLXR1cGxlIGJlY2F1c2UgaXQgaGFwcGVucyB0byBzaGFy ZSB0aGUgc2FtZSBUSUQsIGZvbGxvd2luZyBjb25jdXJyZW50IFRJRAotcmVjeWNsaW5nLiAgSXQn cyBqdXN0IGFib3V0IHBvc3NpYmxlIHRoYXQgc29tZSBvdGhlciBzZXNzaW9uIGluc2VydGVkIGEK LW5ldywgdW5yZWxhdGVkIGluZGV4IHR1cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNo IGhhcyB0aGUgc2FtZQotb3JpZ2luYWwgVElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0 byBMUF9ERUFELXNldCB0aGlzIG5ldywKLXVucmVsYXRlZCBpbmRleCB0dXBsZS4KLQotV2UgaGFu ZGxlIHRoaXMga2lsbF9wcmlvcl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZpbmcgYWZmZWN0 ZWQgaW5kZXgKLXNjYW5zIGNvbnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8g dGhlIGxlYWYgcGFnZSBhdCBhbGwKLWltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1 bGtkZWxldGUgaW4gdGhlIGludGVyaW0gcGVyaW9kIHdoZW4gbm8KLWJ1ZmZlciBwaW4gd2FzIGhl bGQuICBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMK LW9uIHRoZSBsZWFmIHBhZ2UgYXQgYWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFzIGNoYW5nZWQu ICAoVGhpcyBpcyB3aHkgd2UKLWltcGxlbWVudCAiZmFrZSIgTFNOcyBmb3IgdW5sb2dnZWQgaW5k ZXggcmVsYXRpb25zLikKLQogRmFzdHBhdGggRm9yIEluZGV4IEluc2VydGlvbgogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC03MzQsNyArNjgzLDcgQEAgb2YgcmVhZGVycyBjb3Vs ZCBzdGlsbCBtb3ZlIHJpZ2h0IHRvIHJlY292ZXIgaWYgd2UgZGlkbid0IGNvdXBsZQogc2FtZS1s ZXZlbCBsb2NrcyksIGJ1dCB3ZSBwcmVmZXIgdG8gYmUgY29uc2VydmF0aXZlIGhlcmUuCiAKIER1 cmluZyByZWNvdmVyeSBhbGwgaW5kZXggc2NhbnMgc3RhcnQgd2l0aCBpZ25vcmVfa2lsbGVkX3R1 cGxlcyA9IGZhbHNlCi1hbmQgd2UgbmV2ZXIgc2V0IGtpbGxfcHJpb3JfdHVwbGUuIFdlIGRvIHRo aXMgYmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KK2FuZCB3ZSBuZXZlciBMUF9ERUFELW1hcmsgdHVw bGVzLiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCiBvbiB0aGUgc3RhbmRieSBz ZXJ2ZXIgY2FuIGJlIG9sZGVyIHRoYW4gdGhlIG9sZGVzdCB4bWluIG9uIHRoZSBwcmltYXJ5CiBz ZXJ2ZXIsIHdoaWNoIG1lYW5zIHR1cGxlcyBjYW4gYmUgbWFya2VkIExQX0RFQUQgZXZlbiB3aGVu IHRoZXkgYXJlCiBzdGlsbCB2aXNpYmxlIG9uIHRoZSBzdGFuZGJ5LiBXZSBkb24ndCBXQUwgbG9n IHR1cGxlIExQX0RFQUQgYml0cywgYnV0CkBAIC03NTYsOSArNzA1LDggQEAgbm9uLU1WQ0Mgc2Nh bnMgaXMgbm90IHJlcXVpcmVkIG9uIHN0YW5kYnkgbm9kZXMuIFdlIHN0aWxsIGdldCBhIGZ1bGwK IGNsZWFudXAgbG9jayB3aGVuIHJlcGxheWluZyBWQUNVVU0gcmVjb3JkcyBkdXJpbmcgcmVjb3Zl cnksIGJ1dCByZWNvdmVyeQogZG9lcyBub3QgbmVlZCB0byBsb2NrIGV2ZXJ5IGxlYWYgcGFnZSAo b25seSB0aG9zZSBsZWFmIHBhZ2VzIHRoYXQgaGF2ZQogaXRlbXMgdG8gZGVsZXRlKSAtLSB0aGF0 J3Mgc3VmZmljaWVudCB0byBhdm9pZCBicmVha2luZyBpbmRleC1vbmx5IHNjYW5zCi1kdXJpbmcg cmVjb3ZlcnkgKHNlZSBzZWN0aW9uIGFib3ZlIGFib3V0IG1ha2luZyBUSUQgcmVjeWNsaW5nIHNh ZmUpLiBUaGF0Ci1sZWF2ZXMgY29uY2VybiBvbmx5IGZvciBwbGFpbiBpbmRleCBzY2Fucy4gKFhY WDogTm90IGFjdHVhbGx5IGNsZWFyIHdoeQotdGhpcyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1 cmluZyByZWNvdmVyeS4pCitkdXJpbmcgcmVjb3ZlcnkuIFRoYXQgbGVhdmVzIGNvbmNlcm4gb25s eSBmb3IgcGxhaW4gaW5kZXggc2NhbnMuCisoWFhYOiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5IHRo aXMgaXMgdG90YWxseSB1bm5lY2Vzc2FyeSBkdXJpbmcgcmVjb3ZlcnkuKQogCiBNVkNDIHNuYXBz aG90IHBsYWluIGluZGV4IHNjYW5zIGFyZSBhbHdheXMgc2FmZSwgZm9yIHRoZSBzYW1lIHJlYXNv bnMgdGhhdAogdGhleSdyZSBzYWZlIGR1cmluZyBvcmlnaW5hbCBleGVjdXRpb24uICBIZWFwVHVw bGVTYXRpc2ZpZXNUb2FzdCgpIGRvZXNuJ3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMK aW5kZXggY2M5YzQ1ZGM0Li5jNGZmNmRlMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0cGFnZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFn ZS5jCkBAIC0xMDM3LDYgKzEwMzcsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVy IGJ1ZikKICAqIExvY2sgaXMgYWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4u ICBUaGlzIGlzIGxpa2UgYSByYXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMg ZXh0cmEgc3RlcHMgbmVlZGVkIGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IF9idF9iYXRjaF91 bmxvY2sgaW4gbmJ0c2VhcmNoLmMgKGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgd3JhcHBlcgor ICogZnVuY3Rpb24pIGhhcyBtYXRjaGluZyBWYWxncmluZCBidWZmZXIgbG9jayBpbnN0cnVtZW50 YXRpb24uCisgKgogICogTm90ZTogQ2FsbGVyIG1heSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFn ZSgpIHdpdGggYnVmIHdoZW4gcGluIG9uIGJ1ZgogICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWly ZWQgaW4gX2J0X2dldGJ1ZigpIG9yIF9idF9yZWxhbmRnZXRidWYoKS4KICAqLwpAQCAtMTA3OCwx MyArMTA4MSwxOSBAQCBfYnRfdW5sb2NrYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIAkg KiBCdWZmZXIgaXMgcGlubmVkIGFuZCBsb2NrZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgZXhw ZWN0ZWQgdG8gYmUKIAkgKiBkZWZpbmVkIGFuZCBhZGRyZXNzYWJsZS4gIENoZWNrIHRoYXQgcHJv YWN0aXZlbHkuCiAJICovCi0JVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQoQnVmZmVyR2V0 UGFnZShidWYpLCBCTENLU1opOworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisKKwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5F RChwYWdlLCBCTENLU1opOworI2VuZGlmCiAKIAkvKiBMb2NrQnVmZmVyKCkgYXNzZXJ0cyB0aGF0 IHBpbiBpcyBoZWxkIGJ5IHRoaXMgYmFja2VuZCAqLwogCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJf TE9DS19VTkxPQ0spOwogCisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCiAJaWYgKCFSZWxhdGlv blVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKLQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVm ZmVyR2V0UGFnZShidWYpLCBCTENLU1opOworCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhw YWdlLCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHJlYWRwYWdlLmMKaW5kZXggMmJhMWNhNjYwLi40M2ZjNjc2MjkgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg QlRSZWFkUGFnZVN0YXRlCiB7CiAJLyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5IF9idF9yZWFk cGFnZSBmb3IgX2J0X2NoZWNra2V5cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJCS8qIGN1cnJl bnQgc2NhbiBkaXJlY3Rpb24gKi8KKwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8qIGN1cnJlbnQg cGFnZSBiZWluZyByZWFkICovCiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExvd2VzdCBub24t cGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogSGlnaGVz dCBub24tcGl2b3QgdHVwbGUncyBvZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFsdHVwOwkJLyog TmVlZGVkIGJ5IHNjYW5zIHdpdGggYXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0LDEzIEBAIHN0 YXRpYyBib29sIF9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwogc3RhdGlj IGJvb2wgX2J0X29wcG9kaXJfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsCiAJCQkJCQkJCSAgSW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0aWMgdm9pZCBf YnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNl dE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBv c3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCSAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJ CQkgIEluZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5n aXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXRO dW1iZXIgb2ZmbnVtLAotCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxl T2Zmc2V0KTsKK3N0YXRpYyB2b2lkIF9idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRj aCwgaW50IGl0ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxl IGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRl bXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCSAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJ CQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2 b2lkIF9idF9zYXZlcG9zdGluZ2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVt SW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciB0YWJs ZVRpZCwgaW50IGJhc2VPZmZzZXQpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNj YW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIAkJ CQkJCSAgSW5kZXhUdXBsZSB0dXBsZSwgaW50IHR1cG5hdHRzKTsKIHN0YXRpYyBib29sIF9idF9j aGVja19jb21wYXJlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0x MTEsMTUgKzExMSwxNSBAQCBzdGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtl eXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAogCiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9h ZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9idF9y ZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5ld2Jh dGNoLgogICoKLSAqIENhbGxlciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBzby0+ Y3VyclBvcy5idWY7IHRoZSBidWZmZXIncyBzdGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVyZS4g IEFsc28sIGN1cnJQb3MubW9yZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwotICog dGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Ygc28t PmN1cnJQb3MgYXJlCisgKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQg bmV3YmF0Y2guYnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUgaXMKKyAqIG5vdCBjaGFuZ2VkIGhlcmUu ICBBbHNvLCBuZXdiYXRjaCdzIG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsK KyAqIHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9m IG5ld2JhdGNoIGFyZQogICogaW5pdGlhbGl6ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCiAgKgogICog V2Ugc2NhbiB0aGUgY3VycmVudCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGlu IHRoZSBpbmRpY2F0ZWQKLSAqIGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2Nh biBrZXlzIGFyZSBsb2FkZWQgaW50byBjdXJyUG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxs IGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1z LgogICogbW9yZUxlZnQgb3IgbW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBp ZiBfYnRfY2hlY2trZXlzIHJlcG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0 Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVz dCBiZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBh cnJheXMpLgpAQCAtMTMxLDExICsxMzEsMTIgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlz X3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYg YW55IG1hdGNoaW5nIGl0ZW1zIGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICov CiBib29sCi1fYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0 aW9uIGRpciwKKwkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRjaCA9IEJU QmF0Y2hHZXREYXRhKG5ld2JhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFx dWU7CiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsKQEAgLTE0NCwyMyArMTQ1LDIwIEBAIF9idF9yZWFk cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIg b2ZmbnVtLAogCWJvb2wJCWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNj YW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9m ZnNldCA9IDAsCiAJCQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9j ayBudW1iZXIsIGFsb25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVy R2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0 Y2gtPmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9z LmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+ Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQ YWdlID0gb3BhcXVlLT5idHBvX25leHQ7Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5s c24gdW50aWwgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNv LT5jdXJyUG9zLmRpciA9IGRpcjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOwor CXBzdGF0ZS5jdXJycGFnZSA9IGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tO dW1iZXIoYnRuZXdiYXRjaC0+YnVmKTsKKwlidG5ld2JhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+ YnRwb19wcmV2OworCWJ0bmV3YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJ cHN0YXRlLmRpciA9IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0 IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0J QXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdo dCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8gYnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogYnRuZXdiYXRjaC0+bW9yZUxl ZnQpOwogCUFzc2VydCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlu bmVkKHNvLT5jdXJyUG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8qIGlu aXRpYWxpemUgbG9jYWwgdmFyaWFibGVzICovCkBAIC0xODgsMTQgKzE4NiwxNCBAQCBfYnRfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVy IG9mZm51bSwKIAl7CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkgb3Ro ZXIgd29ya2VyIHdpdGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQo ZGlyKSkKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdl LAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVh c2Uoc2NhbiwgYnRuZXdiYXRjaC0+bmV4dFBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJy UGFnZSk7CiAJCWVsc2UKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9z LnByZXZQYWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFs bGVsX3JlbGVhc2Uoc2NhbiwgYnRuZXdiYXRjaC0+cHJldlBhZ2UsCisJCQkJCQkJCSBidG5ld2Jh dGNoLT5jdXJyUGFnZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBv cy5jdXJyUGFnZSwgc2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwg cHN0YXRlLmN1cnJwYWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQogCXsKQEAgLTIxMiwxMSArMjEwLDExIEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt LAogCQkJCQkhX2J0X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFs dHVwKSkKIAkJCQl7CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNj YW4gYWZ0ZXIgYWxsICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJ CQlidG5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9 IHRydWU7CiAJCQkJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVs X3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3Vy clBhZ2UpOworCQkJCQkJCQkJCQkJCSAgIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0 dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTI4MCwyNiArMjc4LDI2IEBAIF9idF9yZWFkcGFn ZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2Zm bnVtLAogCQkJCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8q IFJlbWVtYmVyIGl0ICovCi0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0s IGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBp dHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQog CQkJCXsKLQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAK IAkJCQkJLyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJ RCkgKi8KLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBw b3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJU cmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJ CQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkv KiBSZW1lbWJlciBhbGwgbGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJ CWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJ CQkJCXsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAor CQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJ CQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVw bGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwog CQkJCQl9CiAJCQkJfQpAQCAtMzM5LDEyICszMzcsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0K IAogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQg PSBmYWxzZTsKKwkJCWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChp dGVtSW5kZXggPD0gTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRl bSA9IDA7Ci0JCXNvLT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1 cnJQb3MuaXRlbUluZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2Jh dGNoLT5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEsMTEg KzM1OCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5 cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBh bm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBv cy5tb3JlTGVmdCA9IGZhbHNlOworCQkJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwog CQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3Nj YW4pCiAJCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJ CQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRj aC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtNDY2LDI3 ICs0NjMsMjcgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAq LwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9m Zm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZu dW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXVp bnQxNgkJbml0ZW1zID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOwotCQkJCQlpbnQJCQl0 dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9z dGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1iZXIgbGFzdCBUSUQpICovCiAJCQkJCWl0ZW1JbmRl eC0tOwotCQkJCQl0dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28s IGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBv c3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRy ZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIG5pdGVtcyAtIDEpLAotCQkJCQkJCQkJCQkgIGl0dXAp OworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAKIAkJCQkJLyogUmVtZW1iZXIg YWxsIHByaW9yIFRJRHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBp ID0gbml0ZW1zIC0gMjsgaSA+PSAwOyBpLS0pCiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0tOwot CQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlf YnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJ CQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNl dCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQpOwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtNTAy LDEyICs0OTksMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAq LwogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9 IGZhbHNlOworCQkJYnRuZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRl bUluZGV4ID49IDApOwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNv LT5jdXJyUG9zLmxhc3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJy UG9zLml0ZW1JbmRleCA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmly c3RJdGVtID0gaXRlbUluZGV4OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRy ZWVQYWdlIC0gMTsKIAl9CiAKIAkvKgpAQCAtNTI0LDcgKzUyMCw3IEBAIF9idF9yZWFkcGFnZShJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVt LAogCSAqLwogCUFzc2VydCghcHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChz by0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAo bmV3YmF0Y2gtPmZpcnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAt MTAyNyw5MCArMTAyMyw5MSBAQCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBp bmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBh biBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZv aWQKLV9idF9zYXZlaXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zm c2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2Nh bkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJ IEluZGV4VHVwbGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpj dXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJl ZVR1cGxlSXNQaXZvdChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQlj dXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9 IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRl eF0udGFibGVUaWQgPSBpdHVwLT50X3RpZDsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5p bmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJ CVNpemUJCWl0dXBzeiA9IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJdGVtLT50dXBs ZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5KHNvLT5jdXJy VHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOwotCQlz by0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJbmV3YmF0 Y2gtPml0ZW1zW2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCW1lbWNw eShuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKKwkJ KnR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgogICogU2V0dXAg c3RhdGUgdG8gc2F2ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBsaXN0IHR1cGxl LgogICoKLSAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVt SW5kZXhdIGZvciBUSUQgdGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4gIFNlY29u ZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAqIGJlIHNhdmVk IGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4gaW5kZXggaXRl bSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzIHJldHVybmVk CisgKiB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGlu ZyBsaXN0IHNob3VsZCBiZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVt KCkuCiAgKgotICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRo YXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJldHVybnMgYmFz ZU9mZnNldCwgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVw bGUgaXMKKyAqIHN0b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9idF9zZXR1 cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJl ciBvZmZudW0sCi0JCQkJCSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJbmRleFR1 cGxlIGl0dXApCitfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gs IGludCBpdGVtSW5kZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBv aW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVP ZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNb aXRlbUluZGV4XTsKKwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNb aXRlbUluZGV4XTsKIAogCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1 cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2Zm bnVtOwotCWlmIChzby0+Y3VyclR1cGxlcykKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsK KwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxl cykKIAl7CiAJCS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3Qp ICovCiAJCUluZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBv c3RpbmdPZmZzZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vy ckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNl ID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9m ZnNldCk7CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKElu ZGV4VHVwbGUpIChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNw eShiYXNlLCBpdHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVh IGluZGV4IHR1cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0la RV9NQVNLOwogCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVw bGVPZmZzZXQgKz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVy biBjdXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9 CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5j dXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBp bmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0 aW5nCiAgKiB0dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1z KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0 dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAq IHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBi YXNlT2Zmc2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0o QlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJ CQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3Rpbmdp dGVtKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIg b2ZmbnVtLAorCQkJCQlJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0J QlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsK KwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsK IAotCWN1cnJJdGVtLT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0 ID0gb2ZmbnVtOworCWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zm c2V0ID0gb2ZmbnVtOwogCiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRo ZSBzYW1lIGJhc2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVz IGZyb20gdGhlIHNhbWUgcG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQot CQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1 cnJUdXBsZXMpCisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmlu ZSBMT09LX0FIRUFEX1JFUVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIyLDEzICsyODE5LDEzIEBA IG5ld19wcmltX3NjYW46CiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0 IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGlu IF9idF9uZXh0LCB3aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMgcGFnZS4KIAkgKiBJ dCBpcyB1cCB0byBfYnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGlu ZGV4IHNjYW4KLQkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlv biBvcHBvc2l0ZSBjdXJyUG9zLmRpci4KKwkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2Ug aW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBwc3RhdGUtPmRpci4KIAkgKi8KIAlwc3RhdGUtPmNv bnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICov CiAJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9maXJzdCBhZ2Fp biAqLwogCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxlbF9wcmltc2Nh bl9zY2hlZHVsZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9wYXJhbGxlbF9w cmltc2Nhbl9zY2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8qIENhbGxlcidz IHR1cGxlIGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZhbHNlOwpAQCAt MjkxMywxNCArMjkxMCw2IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVtZW50KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJICogUmVzdG9yZSB0aGUgYXJyYXkg a2V5cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB3ZQogCSAq IHdlcmUgY2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5IGV2ZXIgcmF0 Y2hldCBpbiB0aGUKIAkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0JICogV2l0aG91 dCB0aGlzLCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hlbiB0aGUgc2Nh bgotCSAqIGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0dHVwbGUgcnVu cyBvdXQgb2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9idF9yZWFkcGFn ZSBwcmVwYXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZpbmFsIHBhZ2Ug aW4gc28tPmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0IGlzCi0JICog dHlwaWNhbCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2UgYnRnZXR0dXBs ZSBmaW5hbGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZlbHkgaW52YWxp ZGF0ZSB0aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0 LCB0aG91Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4KIAkgKi8KIAlf YnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 cmVlLmMKaW5kZXggYWVkNzQ1OTBjLi5lYjFjYjllNWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRyZWUuYwpAQCAtMTYwLDExICsxNjAsMTMgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJCS5hbWFkanVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9 IGJ0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBidHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBi dGdldHR1cGxlLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gYnRnZXRi YXRjaCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAorCQkuYW11bmd1 YXJkYmF0Y2ggPSBidHVuZ3VhcmRiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAs CiAJCS5hbWVuZHNjYW4gPSBidGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0J CS5hbXJlc3RycG9zID0gYnRyZXN0cnBvcywKKwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAog CQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5h bWluaXRwYXJhbGxlbHNjYW4gPSBidGluaXRwYXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVz Y2FuID0gYnRwYXJhbGxlbHJlc2NhbiwKQEAgLTIyMywxMyArMjI1LDEzIEBAIGJ0aW5zZXJ0KFJl bGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRn ZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0 Y2goKSAtLSBHZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2Fu CiAgKi8KLWJvb2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKK0luZGV4U2NhbkJhdGNoCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5k ZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRl eFNjYW5CYXRjaCBiYXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uICE9IE5VTEwpOwogCkBAIC0yNDIsNDUgKzI0NCwyMCBAQCBidGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVh ZHkgaW5pdGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAq IHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3 ZSBjYWxsCi0JCSAqIF9idF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nh bi4KKwkJICogX2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4K IAkJICovCi0JCWlmICghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBf YnRfZmlyc3Qoc2NhbiwgZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9i dF9maXJzdChzY2FuLCBkaXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBz ZWUgaWYgd2Ugc2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAq LwotCQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZ ZXMsIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJ CSAqIHR1cGxlcyBhdCBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikg IFRoZQotCQkJCSAqIHRlc3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFu b2lhOiBpZiB0aGUKLQkJCQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRl eHNjYW4gdGhlbiB0aGUgc2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlw bGUgdGltZXMuIEl0J3Mgbm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQs IHNvIHdlIGRvbid0IGRldGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBh bnkgZXhjZXNzIGVudHJpZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBO VUxMKQotCQkJCQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVy QlRyZWVQYWdlKTsKLQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2Up Ci0JCQkJCXNvLT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRl bUluZGV4OwotCQkJfQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAot CQkJLyoKLQkJCSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0 X25leHQoc2NhbiwgZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJu IGl0IC4uLiAqLwotCQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBp dCAuLi4gKi8KKwkJaWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2Vl IGlmIHdlIG5lZWQgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNv LT5udW1BcnJheUtleXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4g cmVzOworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI5MCwzOCArMjY3LDQzIEBAIGludDY0 CiBidGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5C YXRjaCBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CisJ SXRlbVBvaW50ZXIgdGFibGVUaWQ7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5V TEwpOwogCiAJLyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2 ZSBpbmRleCBzY2FuICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVw bGUgKi8KLQkJaWYgKF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8q IEZldGNoIHRoZSBmaXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4s IEZvcndhcmRTY2FuRGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBj b250aW51ZSBzY2FubmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwotCQkJ dGJtX2FkZF90dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CisJCQlpbnQJCQlpdGVtSW5k ZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElEICovCisJCQl0YWJsZVRpZCA9 ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCXRibV9hZGRfdHVwbGVzKHRi bSwgdGFibGVUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7 Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlz IGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJ CSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJ dGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2gg Ki8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0pCiAJCQkJewotCQkJCQkv KiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRfbmV4 dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCS8qCisJCQkJCSAqIF9idF9uZXh0 IHJlbGVhc2VzIHRoZSBwcmlvciBiYXRjaCBmb3IgYml0bWFwIGNhbGxlcnMKKwkJCQkJICogYmVm b3JlIGFsbG9jYXRpbmcgdGhlIG5leHQgb25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcworCQkJCQkg KiBldmVyIHVzZWQgYXQgYSB0aW1lCisJCQkJCSAqLworCQkJCQlpdGVtSW5kZXggPSAwOworCQkJ CQliYXRjaCA9IF9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJ CQkJCWlmICghYmF0Y2gpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxl IElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9z Lml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF0uaGVhcFRpZDsKLQkJCQl0Ym1fYWRkX3R1cGxl cyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKKwkJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNb aXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAx LCBmYWxzZSk7CiAJCQkJbnRpZHMrKzsKIAkJCX0KIAkJfQpAQCAtMzQ4LDggKzMzMCw2IEBAIGJ0 YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCiAJLyog YWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IHBhbGxvY19vYmplY3QoQlRTY2Fu T3BhcXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2Fu UG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDAp CiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBz aXplb2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBAIC0zNjMsMTkgKzM0MywxMSBAQCBidGJlZ2lu c2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQ cm9jcyA9IE5VTEw7CiAJc28tPmFycmF5Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRl bXMgPSBOVUxMOwkJLyogdW50aWwgbmVlZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkv KgotCSAqIFdlIGRvbid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1v bmx5LCBzbyB3ZSBkbyBub3QKLQkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5 cyB1bnRpbCBidHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBk ZXNjIHdoZXRoZXIgd2UnbGwgbmVlZCBpdCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4K LQkgKi8KLQlzby0+Y3VyclR1cGxlcyA9IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4t PnhzX2l0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0g c287CisJc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+ bWF4aXRlbXNiYXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhf b3BhcXVlX3NpemUgPSBNQVhBTElHTihzaXplb2YoQlRCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRj aF90dXBsZXNfd29ya3NwYWNlID0gQkxDS1NaOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zODks NjQgKzM2MSwxODYgQEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5r ZXksIGludCBuc2NhbmtleXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1 dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55 IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0 ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRT Y2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIg dG8gZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMu Ci0JICogVGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVw IGxvY2sgb24gdGhlIHBhZ2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBw YWdlIHBpbnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRp dGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZN LgotCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEg bm9uLU1WQ0Mgc25hcHNob3QuCi0JICoKLQkgKiBBbHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVh ZiBwYWdlIHBpbnMgZWFnZXJseSBkdXJpbmcgYml0bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90 IGJlIGhlbGQgZm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0 aGVyCi0JICogd2F5LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9u IGFjcXVpcmluZyBwYWdlIExTTnMuCi0JICoKLQkgKiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9u IG9uIG1ha2luZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6 IHNvLT5kcm9wUGluIHNob3VsZCBuZXZlciBjaGFuZ2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0J c28tPmRyb3BQaW4gPSAoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJgotCQkJCSAgIElzTVZDQ0xpa2VT bmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24g IT0gTlVMTCk7Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCXNvLT5uZWVkUHJpbVNjYW4g PSBmYWxzZTsKLQlzby0+c2NhbkJlaGluZCA9IGZhbHNlOwotCXNvLT5vcHBvc2l0ZURpckNoZWNr ID0gZmFsc2U7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0JQlRTY2Fu UG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHR1cGxlIHdv cmtzcGFjZSBhcnJheXMsIGlmIG5lZWRlZCBmb3IgYW4gaW5kZXgtb25seSBzY2FuIGFuZAotCSAq IG5vdCBhbHJlYWR5IGRvbmUgaW4gYSBwcmV2aW91cyByZXNjYW4gY2FsbC4gIFRvIHNhdmUgb24g cGFsbG9jCi0JICogb3ZlcmhlYWQsIGJvdGggd29ya3NwYWNlcyBhcmUgYWxsb2NhdGVkIGFzIG9u ZSBwYWxsb2MgYmxvY2s7IG9ubHkgdGhpcwotCSAqIGZ1bmN0aW9uIGFuZCBidGVuZHNjYW4ga25v dyB0aGF0LgotCSAqLwotCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1cnJUdXBsZXMg PT0gTlVMTCkKLQl7Ci0JCXNvLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9jKEJMQ0tTWiAq IDIpOwotCQlzby0+bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1NaOwotCX0KLQog CS8qCiAJICogUmVzZXQgdGhlIHNjYW4ga2V5cwogCSAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4t Pm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2Fu LT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKKwlzby0+bmVlZFByaW1TY2Fu ID0gZmFsc2U7CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVj ayA9IGZhbHNlOwogCXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0X3ByZXByb2Nl c3Nfa2V5cyBzZXRzIGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBkaXR0byAqLwog fQogCisvKgorICoJYnRraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXgg dHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmlu ZGV4UmVsYXRpb247CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShiYXRj aCk7CisJUGFnZQkJcGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCU9mZnNldE51bWJlciBt aW5vZmY7CisJT2Zmc2V0TnVtYmVyIG1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBm YWxzZTsKKwlCdWZmZXIJCWJ1ZjsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKKworCS8qIFRhYmxl IEFNIHNob3VsZCBoYXZlIGFscmVhZHkgcmVsZWFzZWQgYmF0Y2ggcGFnZSdzIHBpbiBieSBub3cg Ki8KKwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9idF9nZXRidWYocmVs LCBidGJhdGNoLT5jdXJyUGFnZSwgQlRfUkVBRCk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRM U05BdG9taWMoYnVmKTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChi YXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhp bnRpbmcgKi8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlwYWdl ID0gQnVmZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsK KwltaW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVt c1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51 bURlYWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07 CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsK KwkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQo aXRlbUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0 SXRlbSk7CisJCUFzc2VydChpID09IDAgfHwKKwkJCSAgIG9mZm51bSA+PSBiYXRjaC0+aXRlbXNb YmF0Y2gtPmRlYWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKKworCQlpZiAob2ZmbnVtIDwg bWlub2ZmKQorCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLworCQl3aGlsZSAob2Zm bnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2Us IG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRl bShwYWdlLCBpaWQpOworCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFsc2U7CisKKwkJCWlmIChCVHJl ZVR1cGxlSXNQb3N0aW5nKGl0dXBsZSkpCisJCQl7CisJCQkJaW50CQkJcGkgPSBpICsgMTsKKwkJ CQlpbnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwbGUpOworCQkJCWlu dAkJCWo7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCQl7CisJCQkJ CUl0ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKKwor CQkJCQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJ CQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJCUFzc2VydChr aXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKworCQkJCQkvKgorCQkJCQkgKiBSZWFkLWFo ZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCQkgKgorCQkJCQkgKiBXZSByZWx5IG9uIHRo ZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBoZXJlCisJCQkJCSAqIHdpbGwg cHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkJ ICogZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4dAor CQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4KKwkJCQkJICoKKwkJCQkJICogSWYsIG9uIHRoZSBvdGhl ciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgorCQkJCQkgKiB0aGUgcG9zdGlu ZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCisJCQkJCSAqIHJlZ2FyZGxlc3Mg KGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0CisJCQkJCSAqIGtpdGVtIGlz IGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKKwkJCQkJICog Y29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxsZWQpLgorCQkJCQkgKi8K KwkJCQkJaWYgKHBpIDwgYmF0Y2gtPm51bURlYWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRl bXNbYmF0Y2gtPmRlYWRJdGVtc1twaSsrXV07CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBEb24n dCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bwor CQkJCSAqIGF2b2lkIHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2Ft ZQorCQkJCSAqIG9mZm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXph dGlvbiBoYXJkbHkKKwkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMg b2YgdGhlIG91dGVybW9zdCBsb29wCisJCQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMg c2FtZSBwb3N0aW5nIGxpc3QncyBmaXJzdCBoZWFwCisJCQkJICogVElEIGluc3RlYWQsIHNvIHdl J2xsIGFkdmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4CisJCQkJICogdHVwbGUgcHJldHR5 IHF1aWNrbHkuKQorCQkJCSAqLworCQkJCWlmIChqID09IG5wb3N0aW5nKQorCQkJCQlraWxsdHVw bGUgPSB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+ dF90aWQsICZraXRlbS0+dGFibGVUaWQpKQorCQkJCWtpbGx0dXBsZSA9IHRydWU7CisKKwkJCS8q CisJCQkgKiBNYXJrIGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4gIFNp bmNlIHRoaXMKKwkJCSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBhIHNoYXJlZCBidWZmZXIgbG9j aywgaXQncyBwb3NzaWJsZSB0aGF0CisJCQkgKiBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0 byBkbyB0aGlzIHNpbXVsdGFuZW91c2x5LCBsZWFkaW5nCisJCQkgKiB0byBtdWx0aXBsZSBmdWxs LXBhZ2UgaW1hZ2VzIGJlaW5nIHNlbnQgdG8gV0FMIChpZgorCQkJICogd2FsX2xvZ19oaW50cyBv ciBkYXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoIGlzCisJCQkgKiB1bmRlc2lyYWJs ZS4KKwkJCSAqLworCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCisJCQl7 CisJCQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2Ug dGhlIGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1 cGRhdGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJ CQkJICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJ CSAqLworCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8g dW5sb2NrX3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3Rpbmcg bGlzdCBpdGVtcyAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRo aW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8K KwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKwor CS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBh cyBkaXJ0eSBoaW50LgorCSAqCisJICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFE LCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNo IGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQorCSAqIG9ubHkgcmVseSBv biB0aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCisJICovCisJ aWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFT X0dBUkJBR0U7CisJCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJ fQorCit1bmxvY2tfcGFnZToKKwlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKK30KKworLyoKKyAqCWJ0 dW5ndWFyZGJhdGNoKCkgLS0gRHJvcCBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChi dWZmZXIgcGluKQorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUg dG8gZHJvcCB0aGUgYnVmZmVyIHBpbiBoZWxkIHRvCisgKiBwcmV2ZW50IGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyBieSBWQUNVVU0uCisgKi8KK3ZvaWQKK2J0dW5ndWFyZGJhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQlRCYXRjaERhdGEgKmJ0YmF0 Y2ggPSBCVEJhdGNoR2V0RGF0YShiYXRjaCk7CisKKwkvKiBjaGVjayBpZiB0aGUgcGluIGhhcyBh bHJlYWR5IGJlZW4gcmVsZWFzZWQgKG11c3QgYmUgaWRlbXBvdGVudCkgKi8KKwlpZiAoQnVmZmVy SXNWYWxpZChidGJhdGNoLT5idWYpKQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihidGJhdGNoLT5idWYp OworCQlidGJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwogLyoKICAqCWJ0ZW5k c2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQ1NSwxMTYgKzU0OSw2MyBAQCBi dGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBob2xkaW5nIGFueSByZWFk IGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlk KHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVh bCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJ X2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBv cyk7Ci0JfQotCi0Jc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlu bmVkKHNvLT5tYXJrUG9zKTsKLQotCS8qIE5vIG5lZWQgdG8gaW52YWxpZGF0ZSBwb3NpdGlvbnMs IHRoZSBSQU0gaXMgYWJvdXQgdG8gYmUgZnJlZWQuICovCi0KIAkvKiBSZWxlYXNlIHN0b3JhZ2Ug Ki8KIAlpZiAoc28tPmtleURhdGEgIT0gTlVMTCkKIAkJcGZyZWUoc28tPmtleURhdGEpOwogCS8q IHNvLT5hcnJheUtleXMgYW5kIHNvLT5vcmRlclByb2NzIGFyZSBpbiBhcnJheUNvbnRleHQgKi8K IAlpZiAoc28tPmFycmF5Q29udGV4dCAhPSBOVUxMKQogCQlNZW1vcnlDb250ZXh0RGVsZXRlKHNv LT5hcnJheUNvbnRleHQpOwotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUo c28tPmtpbGxlZEl0ZW1zKTsKLQlpZiAoc28tPmN1cnJUdXBsZXMgIT0gTlVMTCkKLQkJcGZyZWUo c28tPmN1cnJUdXBsZXMpOwotCS8qIHNvLT5tYXJrVHVwbGVzIHNob3VsZCBub3QgYmUgcGZyZWUn ZCwgc2VlIGJ0cmVzY2FuICovCiAJcGZyZWUoc28pOwogfQogCiAvKgotICoJYnRtYXJrcG9zKCkg LS0gc2F2ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24KKyAqCWJ0cG9zcmVzZXQoKSAtLSByZXNldCBh cnJheSBrZXkgc3RhdGUgZm9yIHNjYW4gcG9zaXRpb24gY2hhbmdlCisgKgorICogQ2FsbGVkIGJ5 IHRoZSBjb3JlIHN5c3RlbSB3aGVuIHRoZSBzY2FuJ3MgbG9naWNhbCBwb3NpdGlvbiBpcyBhYm91 dCB0bworICogY2hhbmdlIGluIGEgd2F5IHRoYXQgaW52YWxpZGF0ZXMgb3VyIGFycmF5IGtleSBz dGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCisgKiByZXN0b3JpbmcgYSBtYXJrZWQgcG9zaXRpb24s IG9yIHdoZW4gdGhlIHNjYW4gY3Jvc3NlcyBhIGJhdGNoIGJvdW5kYXJ5CisgKiB3aGlsZSBtb3Zp bmcgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUgb25lIG9yaWdpbmFsbHkgdXNlZC4K KyAqCisgKiBGb3IgZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUg YWxyZWFkeSBmbGlwcGVkIHRoZQorICogYmF0Y2gncyBkaXIgZmllbGQgYmVmb3JlIGNhbGxpbmcg aGVyZTsgd2UgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24gd2hlbgorICogcmVzZXR0aW5nIG91 ciBhcnJheSBrZXlzLiAgRm9yIG1hcmsgcmVzdG9yYXRpb24sIHRoZSBiYXRjaCdzIGRpciB3aWxs CisgKiByZXRhaW4gaXRzIG9yaWdpbmFsIHZhbHVlIChmcm9tIHdoZW4gYnRnZXRiYXRjaCByZXR1 cm5lZCBpdCkuCiAgKi8KIHZvaWQKLWJ0bWFya3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCitidHBv c3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRh ICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoYmF0Y2gpOwogCi0JLyogVGhlcmUgbWF5IGJlIGFu IG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlCVFNjYW5Qb3NVbnBpbklm UGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtleXMpCisJCXJldHVybjsK IAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUluZGV4LiAgSWYgd2UgbGF0 ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBtYXJrZWQgcG9z aXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgotCSAqIHRoZSBjdXJyUG9z IHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMpIHRoZSBtYXJrIGlzIG1v dmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24ndCBoYXZlIHRvIGRvIHRo YXQgd29yay4KKwkgKiBSZXNldCBhcnJheSBrZXlzIHRvIGluaXRpYWwgc3RhdGUgZm9yIHRoZSBi YXRjaCdzIHNjYW4gZGlyZWN0aW9uLiAgQWxzbworCSAqIGNsZWFyIG5lZWRQcmltU2NhbiBhbmQg cmVsYXRlZCBmbGFncy4gIFRoZXNlIHdlcmUgc2V0IGJhc2VkIG9uIHRoZSBzb2Z0CisJICogYXNz dW1wdGlvbiB0aGF0IHRoZSBzY2FuIHdvdWxkIGFsd2F5cyBwcm9jZWVkIGluIHRoZSBzYW1lIGRp cmVjdGlvbi4KKwkgKgorCSAqIFRoZXNlIHN0ZXBzIHdvcmsgYXJvdW5kIHRoZSBzb2Z0IGFzc3Vt cHRpb24gYmVpbmcgdmlvbGF0ZWQ6IHRoZXkgZm9yY2UKKwkgKiB0aGUgc2NhbiB0byBzdGVwIHRv IHRoZSBuZXh0L3ByZXZpb3VzIHBhZ2UsIG1ha2luZyB0aGUgYXJyYXlzIHJlY292ZXIuCisJICog V2hlbiB3ZSBnbyB0byByZWFkIHRoYXQgcGFnZSwgX2J0X3JlYWRwYWdlIHdpbGwgcmVsaWFibHkg ZGV0ZXJtaW5lIGlmIGEKKwkgKiBwcmltaXRpdmUgc2NhbiByZWFsbHkgaXMgbmVlZGVkIGJhc2Vk IG9uIHRoZSBwYWdlJ3MgdHVwbGVzLiAgSWYgdGhlcmUncworCSAqIGEgcHJpbWl0aXZlIHNjYW4s IGl0IHdpbGwgcmVwb3NpdGlvbiB0aGUgc2NhbiB1c2luZyBuZXcgYXJyYXkgdmFsdWVzCisJICog KGJhc2VkIG9uIHRoZSB0dXBsZXMgZnJvbSB0aGUgbmVpZ2hib3JpbmcgcGFnZSB3ZSdsbCBzdGVw IG9uIHRvKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gcmVzZXQgdGhlIGFycmF5IGtleSBzdGF0ZSBp biB0aGUgY29ycmVjdCBkaXJlY3Rpb24gc28gdGhhdAorCSAqIHdlIHdvbid0IGdldCBjb25mdXNl ZC4gIFdoZW4gdGhlIGFycmF5IGtleXMgYXJlIGJlaGluZCB0aGUga2V5IHNwYWNlCisJICogZm9y IHRoZSBwYWdlIHdlJ3JlIHN0ZXBwaW5nIG9uIHRvIChiZWhpbmQgaW4gdGVybXMgb2YgdGhlIHNj YW4gZGlyKSwKKwkgKiB0aGV5IHdpbGwgY2F0Y2ggdXAgYXV0b21hdGljYWxseS4gIEJ1dCB3aGVu IHRoZXkncmUgYWhlYWQgb2YgdGhhdAorCSAqIHBhZ2UncyBrZXkgc3BhY2UsIHRoZSBzY2FuIGNv dWxkIG1pc3MgbWF0Y2hpbmcgdHVwbGVzLgogCSAqLwotCWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNv LT5jdXJyUG9zKSkKLQkJc28tPm1hcmtJdGVtSW5kZXggPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7 CisJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgYmF0Y2gtPmRpcik7CisJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoYmF0Y2gtPmRpcikpCisJCWJ0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7 CiAJZWxzZQotCXsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7Ci0JCXNvLT5t YXJrSXRlbUluZGV4ID0gLTE7Ci0JfQotfQotCi0vKgotICoJYnRyZXN0cnBvcygpIC0tIHJlc3Rv cmUgc2NhbiB0byBsYXN0IHNhdmVkIHBvc2l0aW9uCi0gKi8KLXZvaWQKLWJ0cmVzdHJwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKLQotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyoKLQkJ ICogVGhlIHNjYW4gaGFzIG5ldmVyIG1vdmVkIHRvIGEgbmV3IHBhZ2Ugc2luY2UgdGhlIGxhc3Qg bWFyay4gIEp1c3QKLQkJICogcmVzdG9yZSB0aGUgaXRlbUluZGV4LgotCQkgKgotCQkgKiBOQjog SW4gdGhpcyBjYXNlIHdlIGNhbid0IGNvdW50IG9uIGFueXRoaW5nIGluIHNvLT5tYXJrUG9zIHRv IGJlCi0JCSAqIGFjY3VyYXRlLgotCQkgKi8KLQkJc28tPmN1cnJQb3MuaXRlbUluZGV4ID0gc28t Pm1hcmtJdGVtSW5kZXg7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIG1vdmVk IHRvIGEgbmV3IHBhZ2UgYWZ0ZXIgbGFzdCBtYXJrIG9yIHJlc3RvcmUsIGFuZCB3ZSBhcmUKLQkJ ICogbm93IHJlc3RvcmluZyB0byB0aGUgbWFya2VkIHBhZ2UuICBXZSBhcmVuJ3QgaG9sZGluZyBh bnkgcmVhZAotCQkgKiBsb2NrcywgYnV0IGlmIHdlJ3JlIHN0aWxsIGhvbGRpbmcgdGhlIHBpbiBm b3IgdGhlIGN1cnJlbnQgcG9zaXRpb24sCi0JCSAqIHdlIG11c3QgZHJvcCBpdC4KLQkJICovCi0J CWlmIChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJewotCQkJLyogQmVmb3JlIGxl YXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQkJaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9idF9raWxsaXRlbXMoc2Nhbik7Ci0JCQlCVFNjYW5Q b3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJfQotCi0JCWlmIChCVFNjYW5Qb3NJc1Zh bGlkKHNvLT5tYXJrUG9zKSkKLQkJewotCQkJLyogYnVtcCBwaW4gb24gbWFyayBidWZmZXIgZm9y IGFzc2lnbm1lbnQgdG8gY3VycmVudCBidWZmZXIgKi8KLQkJCWlmIChCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+bWFya1BvcykpCi0JCQkJSW5jckJ1ZmZlclJlZkNvdW50KHNvLT5tYXJrUG9zLmJ1Zik7 Ci0JCQltZW1jcHkoJnNvLT5jdXJyUG9zLCAmc28tPm1hcmtQb3MsCi0JCQkJICAgb2Zmc2V0b2Yo QlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCQkgICBzby0+bWFya1Bvcy5sYXN0SXRlbSAq IHNpemVvZihCVFNjYW5Qb3NJdGVtKSk7Ci0JCQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCQkJbWVt Y3B5KHNvLT5jdXJyVHVwbGVzLCBzby0+bWFya1R1cGxlcywKLQkJCQkJICAgc28tPm1hcmtQb3Mu bmV4dFR1cGxlT2Zmc2V0KTsKLQkJCS8qIFJlc2V0IHRoZSBzY2FuJ3MgYXJyYXkga2V5cyAoc2Vl IF9idF9zdGVwcGFnZSBmb3Igd2h5KSAqLwotCQkJaWYgKHNvLT5udW1BcnJheUtleXMpCi0JCQl7 Ci0JCQkJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2Nhbiwgc28tPmN1cnJQb3MuZGlyKTsKLQkJCQlz by0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0JCQl9Ci0JCX0KLQkJZWxzZQotCQkJQlRTY2FuUG9z SW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQorCQlidGJhdGNoLT5tb3JlTGVmdCA9IHRydWU7 CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7CisJ c28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAogLyoKQEAgLTg4MCwxNSArOTIxLDYg QEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgKm5l eHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsKIAkq bGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAKLQkvKgotCSAqIFJlc2V0IHNv LT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9tb3JlUmlnaHQgc3VjaCB0aGF0IHRo ZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdlIHRyZWF0cyB0aGlzIGJhY2tlbmQg c2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0aGF0IHN0ZXBzIGZyb20gKmxhc3Rf Y3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNzIHRoaXMKLQkgKiBiYWNrZW5kJ3Mg c28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3JlYWRmaXJzdHBhZ2UgYmVmb3JlIHRo ZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCXNvLT5jdXJy UG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQogCWlmIChmaXJz dCkKIAl7CiAJCS8qCkBAIC0xMDM4LDggKzEwNzAsNiBAQCBfYnRfcGFyYWxsZWxfZG9uZShJbmRl eFNjYW5EZXNjIHNjYW4pCiAJQlRQYXJhbGxlbFNjYW5EZXNjIGJ0c2NhbjsKIAlib29sCQlzdGF0 dXNfY2hhbmdlZCA9IGZhbHNlOwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJy UG9zKSk7Ci0KIAkvKiBEbyBub3RoaW5nLCBmb3Igbm9uLXBhcmFsbGVsIHNjYW5zICovCiAJaWYg KHBhcmFsbGVsX3NjYW4gPT0gTlVMTCkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0c2VhcmNoLmMKaW5kZXggYWFlNmFjYjdmLi40ZDFiMTExZGEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRzZWFyY2guYwpAQCAtMjMsNTMgKzIzLDQ5IEBACiAjaW5jbHVkZSAicGdzdGF0 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lz Y2FjaGUuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL3Jl bC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4o UmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pOworc3RhdGljIGlubGluZSB2b2lkIF9idF9i YXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJ CQkJCQkJCUJ1ZmZlciBidWYpOwogc3RhdGljIEJ1ZmZlciBfYnRfbW92ZXJpZ2h0KFJlbGF0aW9u IHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwKIAkJCQkJCQlCdWZmZXIg YnVmLCBib29sIGZvcnVwZGF0ZSwgQlRTdGFjayBzdGFjaywKIAkJCQkJCQlpbnQgYWNjZXNzKTsK IHN0YXRpYyBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2goUmVsYXRpb24gcmVsLCBCVFNjYW5JbnNl cnQga2V5LCBCdWZmZXIgYnVmKTsKIHN0YXRpYyBpbnQJX2J0X2JpbnNyY2hfcG9zdGluZyhCVFNj YW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsCiAJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0pOwot c3RhdGljIGlubGluZSB2b2lkIF9idF9yZXR1cm5pdGVtKEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRT Y2FuT3BhcXVlIHNvKTsKLXN0YXRpYyBib29sIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkZmlyc3RwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkgIFNjYW5EaXJl Y3Rpb24gZGlyKTsKLXN0YXRpYyBib29sIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBCbG9ja051bWJlciBibGtubywKLQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtu bywgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkJIGJvb2wgc2VpemVkKTsKK3N0YXRpYyBJbmRl eFNjYW5CYXRjaCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGZpcnN0YmF0Y2gsCisJCQkJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRp cmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9yZWFkbmV4dHBhZ2UoSW5k ZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKKwkJCQkJCQkJCSAgIEJsb2NrTnVt YmVyIGxhc3RjdXJyYmxrbm8sCisJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBm aXJzdHBhZ2UpOwogc3RhdGljIEJ1ZmZlciBfYnRfbG9ja19hbmRfdmFsaWRhdGVfbGVmdChSZWxh dGlvbiByZWwsIEJsb2NrTnVtYmVyICpibGtubywKIAkJCQkJCQkJCQkgQmxvY2tOdW1iZXIgbGFz dGN1cnJibGtubyk7Ci1zdGF0aWMgYm9vbCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0X2VuZHBvaW50 KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSAgIEluZGV4 U2NhbkJhdGNoIGZpcnN0YmF0Y2gpOwogCiAKIC8qCi0gKglfYnRfZHJvcF9sb2NrX2FuZF9tYXli ZV9waW4oKQorICogX2J0X2JhdGNoX3VubG9jaygpIC0tIG5idHJlZSB3cmFwcGVyIGZvciBpbmRl eGFtX3V0aWxfYmF0Y2hfdW5sb2NrLgogICoKLSAqIFVubG9jayBzby0+Y3VyclBvcy5idWYuICBJ ZiBzY2FuIGlzIHNvLT5kcm9wUGluLCBkcm9wIHRoZSBwaW4sIHRvby4KLSAqIERyb3BwaW5nIHRo ZSBwaW4gcHJldmVudHMgVkFDVVVNIGZyb20gYmxvY2tpbmcgb24gYWNxdWlyaW5nIGEgY2xlYW51 cCBsb2NrLgorICogUGVyZm9ybXMgdGhlIHNhbWUgVmFsZ3JpbmQgaW5zdHJ1bWVudGF0aW9uIGFz IF9idF91bmxvY2tidWYuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X2Ryb3BfbG9ja19h bmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKQorX2J0X2JhdGNoX3Vu bG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBCdWZmZXIgYnVm KQogewotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkvKiBKdXN0IGRyb3AgdGhlIGxvY2sgKG5v dCB0aGUgcGluKSAqLwotCQlfYnRfdW5sb2NrYnVmKHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQkJ cmV0dXJuOwotCX0KKyNpZiBkZWZpbmVkKFVTRV9WQUxHUklORCkKKwlQYWdlCQlwYWdlID0gQnVm ZmVyR2V0UGFnZShidWYpOwogCi0JLyoKLQkgKiBEcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBw aW4uCi0JICoKLQkgKiBIYXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2ls bGl0ZW1zIGhhcyBhIHdheSB0byBkZXRlY3QKLQkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQg cmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgotCSAqLwotCXNvLT5j dXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhzby0+Y3VyclBvcy5idWYpOwotCV9idF9y ZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRC dWZmZXI7CisJVkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQocGFnZSwgQkxDS1NaKTsKKyNl bmRpZgorCisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCwgYnVmKTsKKwor I2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJz KHNjYW4tPmluZGV4UmVsYXRpb24pKQorCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdl LCBCTENLU1opOworI2VuZGlmCiB9CiAKIC8qCkBAIC04NjAsMjYgKzg1NiwyMyBAQCBfYnRfY29t cGFyZShSZWxhdGlvbiByZWwsCiB9CiAKIC8qCi0gKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBm aXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9idF9maXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJh dGNoIGluIGEgc2Nhbi4KICAqCiAgKgkJV2UgbmVlZCB0byBiZSBjbGV2ZXIgYWJvdXQgdGhlIGRp cmVjdGlvbiBvZiBzY2FuLCB0aGUgc2VhcmNoCi0gKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVl IG9yZGVyaW5nLiAgV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsCi0gKgkJaWYgYmFja3dhcmRz IHNjYW4sIHRoZSBsYXN0IGl0ZW0pIGluIHRoZSB0cmVlIHRoYXQgc2F0aXNmaWVzIHRoZQotICoJ CXF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9uIHN1Y2Nlc3MgZXhpdCwgZGF0YSBh Ym91dCB0aGUKLSAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVlbiBsb2Fk ZWQgaW50byBzby0+Y3VyclBvcy4gIFdlJ2xsCi0gKgkJZHJvcCBhbGwgbG9ja3MgYW5kIGhvbGQg b250byBhIHBpbiBvbiBwYWdlJ3MgYnVmZmVyLCBleGNlcHQgZHVyaW5nCi0gKgkJc28tPmRyb3BQ aW4gc2NhbnMsIHdoZW4gd2UgZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotICoJCV9i dF9yZXR1cm5pdGVtIHNldHMgdGhlIG5leHQgaXRlbSB0byByZXR1cm4gdG8gc2NhbiBvbiBzdWNj ZXNzIGV4aXQuCisgKgkJY29uZGl0aW9ucywgYW5kIHRoZSB0cmVlIG9yZGVyaW5nLiAgV2UgZmlu ZCB0aGUgZmlyc3QgbGVhZiBwYWdlIChvcgorICoJCXRoZSBsYXN0IGxlYWYgcGFnZSwgd2hlbiBz Y2FubmluZyBiYWNrd2FyZHMpIGluIHRoZSB0cmVlIHdpdGggYXQgbGVhc3QKKyAqCQlvbmUgdHVw bGUgdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb25zIGluIHRoZSBzY2FuIGtleS4gIE9u CisgKgkJc3VjY2VzcyBleGl0LCB3ZSByZXR1cm4gYSBuZXcgYmF0Y2ggd2l0aCB0aGF0IHBhZ2Un cyBtYXRjaGluZyBpdGVtcy4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMg aW4gdGhlIGluZGV4LCB3ZSByZXR1cm4gZmFsc2UsIHdpdGggbm8KLSAqIHBpbnMgb3IgbG9ja3Mg aGVsZC4gIHNvLT5jdXJyUG9zIHdpbGwgcmVtYWluIGludmFsaWQuCisgKiBJZiB0aGVyZSBhcmUg bm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlIGluZGV4IChpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rp b24pLAorICogd2UganVzdCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nhbi0+a2V5 RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0LAogICog YXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3Jl IGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0ZW1wb3Jh cnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRoZSBzY2Fu IHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRjaAogX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Miw4ICs4ODUsMTIgQEAgX2J0X2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIgc3RyYXRf dG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZhbGlkQmxv Y2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKKwlJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNo OworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8K KwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOworCWJ0Zmlyc3Ri YXRjaCA9IEJUQmF0Y2hHZXREYXRhKGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBFeGFtaW5lIHRo ZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtleXM7IGFsc28gbWFyayB0 aGUKQEAgLTkwOSw2ICs5MDYsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAJCV9idF9w YXJhbGxlbF9kb25lKHNjYW4pOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBm aXJzdGJhdGNoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtOTE4LDcgKzkxNiwxMCBAQCBf YnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKi8KIAlp ZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxfc2VpemUo c2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxzZTsKKwl7 CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOworCQlyZXR1 cm4gZmFsc2U7CQkJLyogZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFByaW1TY2FuIGlzIHVuc2V0 KSAqLworCX0KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2NhbidzIGFycmF5cyAoaWYgYW55 KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTkzOCwxMSArOTM5LDkgQEAgX2J0 X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCUFzc2VydCgh c28tPm5lZWRQcmltU2Nhbik7CiAJCUFzc2VydChibGtubyAhPSBQX05PTkUpOwogCi0JCWlmICgh X2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKSkK LQkJCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmly c3RiYXRjaCk7CiAKLQkJX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4gdHJ1ZTsK KwkJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxrbm8sIGRp ciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTEyNDIsNyArMTI0MSw3IEBAIF9idF9maXJzdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIE5vdGU6IGNhbGxzIF9idF9y ZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBhcmFsbGVsIHNjYW4uCiAJ ICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5kcG9pbnQoc2NhbiwgZGlyKTsK KwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkg KiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGluZGV4LiAg U2V0IHVwIGFuCkBAIC0xNTEwLDkgKzE1MDksOSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3NpdGlvbiBvdXJzZWx2ZXMgb24gdGhlIHRh cmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRp cikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwg JnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOworCV9idF9zZWFyY2gocmVsLCBOVUxM LCAmaW5za2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAotCWlmICgh QnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxpa2VseSghQnVmZmVySXNW YWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2Fu KTsKIApAQCAtMTUyOCwyMiArMTUyNywyMyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCiAJ CXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhzX3NuYXBzaG90KTsKLQkJ CV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBCVF9SRUFE LCBmYWxzZSk7CisJCQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmJ0Zmlyc3RiYXRj aC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAJCX0KIAotCQlpZiAoIUJ1ZmZlcklzVmFsaWQoc28t PmN1cnJQb3MuYnVmKSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkK IAkJewogCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIAog CS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlvZmZudW0g PSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJb2ZmbnVtID0g X2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBidGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkvKgogCSAq IE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1YWxseSB0 aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYpLgorCSAqIGN1cnJlbnRs eSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXkubmV4dGtleSA9IGZhbHNl IGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRpb25lZCBh dCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fua2V5cy4KQEAgLTE1NjEs MTY1ICsxNTYxLDczIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGluc2tleSBpcyBi b3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9mIGl0cyBub24t cGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICovCi0JaWYgKCFf YnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQot CV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3Jl YWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQogCiAvKgotICoJ X2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfYnRfbmV4dCgp IC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+ Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5IGJlIHBpbm5lZAot ICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZp ZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5 LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFzdCByZXR1cm5lZCBi eQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNoJ3MgcG9zaXRpb25p bmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBwYWdlIHRvIHJlYWQgbmV4 dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVkIGFzIG5l ZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVy biB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQuCi0gKgotICoJCU9uIGZh aWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJyUG9zLiAg SXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJuIHR1cGxl cyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8gY2FsbCBf YnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBzdWNjZXNzIGV4 aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQor ICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxzZSB3ZSdkIGp1c3Qg cmV0dXJuIE5VTEwpLgogICovCi1ib29sCi1fYnRfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNj YW4tPm9wYXF1ZTsKLQotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0K LQkvKgotCSAqIEFkdmFuY2UgdG8gbmV4dCB0dXBsZSBvbiBjdXJyZW50IHBhZ2U7IG9yIGlmIHRo ZXJlJ3Mgbm8gbW9yZSwgdHJ5IHRvCi0JICogc3RlcCB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0 YS4KLQkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCXsKLQkJaWYgKCsr c28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFzdEl0ZW0pCi0JCXsKLQkJCWlm ICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQot CWVsc2UKLQl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9zLmZp cnN0SXRlbSkKLQkJewotCQkJaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGlyKSkKLQkJCQlyZXR1 cm4gZmFsc2U7Ci0JCX0KLQl9Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJu IHRydWU7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGluZGV4IGl0ZW0gZnJvbSBzby0+Y3VyclBv cy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdIHRvIHRoZQotICogaW5kZXggc2NhbiBieSBz ZXR0aW5nIHRoZSByZWxldmFudCBmaWVsZHMgaW4gY2FsbGVyJ3MgaW5kZXggc2NhbiBkZXNjcmlw dG9yCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotX2J0X3JldHVybml0ZW0oSW5kZXhTY2FuRGVz YyBzY2FuLCBCVFNjYW5PcGFxdWUgc28pCi17Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XTsKLQotCS8qIE1vc3QgcmVj ZW50IF9idF9yZWFkcGFnZSBtdXN0IGhhdmUgc3VjY2VlZGVkICovCi0JQXNzZXJ0KEJUU2NhblBv c0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc28tPmN1cnJQb3MuaXRlbUluZGV4ID49 IHNvLT5jdXJyUG9zLmZpcnN0SXRlbSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRleCA8 PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7Ci0KLQkvKiBSZXR1cm4gbmV4dCBpdGVtLCBwZXIgYW1n ZXR0dXBsZSBjb250cmFjdCAqLwotCXNjYW4tPnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRp ZDsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCi0JCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkg KHNvLT5jdXJyVHVwbGVzICsgY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0KTsKLX0KLQotLyoKLSAqCV9i dF9zdGVwcGFnZSgpIC0tIFN0ZXAgdG8gbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBm b3Igc2NhbgotICoKLSAqIFdyYXBwZXIgb24gX2J0X3JlYWRuZXh0cGFnZSB0aGF0IHBlcmZvcm1z IGZpbmFsIHN0ZXBzIGZvciB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIE9uIGVudHJ5LCBzby0+ Y3VyclBvcyBtdXN0IGJlIHZhbGlkLiAgSXRzIGJ1ZmZlciB3aWxsIGJlIHBpbm5lZCwgdGhvdWdo Ci0gKiBuZXZlciBsb2NrZWQuIChBY3R1YWxseSwgd2hlbiBzby0+ZHJvcFBpbiB0aGVyZSB3b24n dCBldmVuIGJlIGEgcGluIGhlbGQsCi0gKiB0aG91Z2ggc28tPmN1cnJQb3MuY3VyclBhZ2UgbXVz dCBzdGlsbCBiZSBzZXQgdG8gYSB2YWxpZCBibG9jayBudW1iZXIuKQotICovCi1zdGF0aWMgYm9v bAotX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJ bmRleFNjYW5CYXRjaAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAo QlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEgKmJ0cHJpb3JiYXRjaCA9 IEJUQmF0Y2hHZXREYXRhKHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJCWxh c3RjdXJyYmxrbm87Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwot Ci0JLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBp dGVtcyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsK LQotCS8qCi0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUg cGFnZSBkYXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0 LgotCSAqLwotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBwaW4g b24gY3VycmVudCBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJaWYg KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3VudChz by0+Y3VyclBvcy5idWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3MsCi0J CQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1cnJQ b3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtUdXBs ZXMpCi0JCQltZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAgIHNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9IHNv LT5tYXJrSXRlbUluZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0JCSAq IElmIHdlJ3JlIGp1c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4IHNj YW4KLQkJICogKHBvc3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBhbmQg bmVlZHMgdG8gc2tpcCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbiksIG1vcmVMZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQgb2Yg dGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2ZXIg YmUgdGFrZW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFzIGVu ZGVkCi0JCSAqICh0aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQgaGFu ZGxlIHRoaXMgY2FzZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0JCSAq IG1hcmtQb3Mgc3RhdGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0YXRl IGxpa2UgdGhpcwotCQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1c3Qg dW5zZXQgbWFya1BvcydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3aGlj aGV2ZXIgbWlnaHQgYmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBvcyBy ZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25zLgot CQkgKiBJbiBlZmZlY3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlzIHVw IHRvIHRoZSBmaXJzdAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFjZSBh ZnRlciBpdCBoYXMgcmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQcmlt U2NhbikKLQkJewotCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3MuZGly KSkKLQkJCQlzby0+bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNvLT5t YXJrUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qgc3Vw cG9ydGVkIGJ5IHBhcmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxfc2Nh bik7Ci0JfQotCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJYm9vbAkJ bW9yZUluRGlyOwogCiAJLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLwogCWlm IChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCWJsa25vID0gc28tPmN1cnJQb3MubmV4 dFBhZ2U7CisJCWJsa25vID0gYnRwcmlvcmJhdGNoLT5uZXh0UGFnZTsKIAllbHNlCi0JCWJsa25v ID0gc28tPmN1cnJQb3MucHJldlBhZ2U7Ci0JbGFzdGN1cnJibGtubyA9IHNvLT5jdXJyUG9zLmN1 cnJQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+cHJldlBhZ2U7CisJbGFzdGN1cnJibGtu byA9IGJ0cHJpb3JiYXRjaC0+Y3VyclBhZ2U7CisJbW9yZUluRGlyID0gU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXIpID8KKwkJYnRwcmlvcmJhdGNoLT5tb3JlUmlnaHQgOiBidHByaW9yYmF0Y2gt Pm1vcmVMZWZ0OwogCiAJLyoKLQkgKiBDYW5jZWwgcHJpbWl0aXZlIGluZGV4IHNjYW5zIHRoYXQg d2VyZSBzY2hlZHVsZWQgd2hlbiB0aGUgY2FsbCB0bwotCSAqIF9idF9yZWFkcGFnZSBmb3IgY3Vy clBvcyBoYXBwZW5lZCB0byB1c2UgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byB0aGUKLQkgKiBv bmUgdGhhdCB3ZSdyZSBzdGVwcGluZyBpbiBub3cuICAoSXQncyBva2F5IHRvIGxlYXZlIHRoZSBz Y2FuJ3MgYXJyYXkKLQkgKiBrZXlzIGFzLWlzLCBzaW5jZSB0aGUgbmV4dCBfYnRfcmVhZHBhZ2Ug d2lsbCBhZHZhbmNlIHRoZW0uKQorCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhh dCB3ZXJlIHNjaGVkdWxlZCB3aGVuIHByaW9yYmF0Y2gncyBjYWxsCisJICogdG8gX2J0X3JlYWRw YWdlIGhhcHBlbmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZSBvbmUgdGhh dAorCSAqIHdlJ3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNj YW4ncyBhcnJheSBrZXlzCisJICogYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3 aWxsIGFkdmFuY2UgdGhlbS4pCiAJICovCi0JaWYgKHNvLT5jdXJyUG9zLmRpciAhPSBkaXIpCisJ aWYgKHByaW9yYmF0Y2gtPmRpciAhPSBkaXIpCiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsK IAorCS8qCisJICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhlIHByaW9yIGJh dGNoIG5vdyBzbyB0aGF0CisJICogX2J0X3JlYWRuZXh0cGFnZSBjYW4gcmV1c2UgaXRzIG1lbW9y eS4gIFRoaXMgd2F5IGJpdG1hcCBzY2FucyBuZXZlcgorCSAqIG5lZWQgbW9yZSB0aGFuIG9uZSBi YXRjaCBhbGxvY2F0aW9uLgorCSAqLworCWlmICghc2Nhbi0+dXNlYmF0Y2hyaW5nKQorCQlpbmRl eGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBwcmlvcmJhdGNoKTsKKworCWlmIChibGtubyA9 PSBQX05PTkUgfHwgIW1vcmVJbkRpcikKKwl7CisJCS8qCisJCSAqIHByaW9yYmF0Y2gncyBwYWdl IGlzIGtub3duIHRvIGJlIHRoZSBmaW5hbCBsZWFmIHBhZ2Ugd2l0aCBtYXRjaGVzCisJCSAqIGlu IHRoaXMgc2NhbiBkaXJlY3Rpb24gKGl0cyBfYnRfcmVhZHBhZ2UgY2FsbCBmaWd1cmVkIHRoYXQg b3V0KS4KKwkJICoKKwkJICogTm90ZTogaWYgc28tPm5lZWRQcmltU2NhbiBpcyBzZXQsIHRoZW4g cHJpb3JiYXRjaCdzIGxlYWYgcGFnZSBpcworCQkgKiBhY3R1YWxseSBqdXN0IHRoZSBmaW5hbCBw YWdlIGZvciB0aGUgY3VycmVudCBwcmltaXRpdmUgaW5kZXggc2NhbgorCQkgKiBpbiB0aGlzIHNj YW4gZGlyZWN0aW9uICh0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkuCisJCSAq LworCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyog cGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJ aWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXpl KHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJ LyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICovCisKIAlyZXR1cm4gX2J0 X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9 CiAKQEAgLTE3MzIsNzMgKzE2NDAsOTEgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRoaXMgcGFnZSBi eSBjYWxsaW5nIF9idF9jaGVja2tleXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5LiAgU2VlIF9i dF9yZWFkcGFnZSBmb3IgZnVsbCBkZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3VyclBv cyBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFsaWQpLgorICog T24gZW50cnksIGZpcnN0YmF0Y2ggbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28gb2ZmbnVt IHN0YXlzIHZhbGlkKS4KICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhhdmUgc2VpemVk IHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwgd2UnbGwgaGF2 ZSB1cGRhdGVkIHNvLT5jdXJyUG9zIGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlucwotICogYWNj b3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGxhaWQgb3V0IGZvciBfYnRfcmVhZG5l eHRwYWdlIGV4aXQuCi0gKiBMaWtlIF9idF9yZWFkbmV4dHBhZ2UsIG91ciByZXR1cm4gdmFsdWUg aW5kaWNhdGVzIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hpbmcKLSAqIHJlY29yZHMgaW4gdGhlIGdp dmVuIGRpcmVjdGlvbi4KKyAqIE9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB1bmxvY2tlZCBiYXRj aCBjb250YWluaW5nIGRhdGEgZnJvbSB0aGUgbmV4dCBwYWdlCisgKiB0aGF0IGhhcyBhdCBsZWFz dCBvbmUgbWF0Y2hpbmcgaXRlbS4gIElmIHRoZXJlIGFyZSBubyBtYXRjaGluZyBpdGVtcyBpbiB0 aGUKKyAqIGdpdmVuIHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLgogICoKICAq IFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCBy ZWdhcmRsZXNzIG9mCiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFs bGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9y ZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2Nh bkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0Y2gKK19idF9yZWFkZmlyc3RwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggZmlyc3RiYXRjaCwKKwkJCQkgIE9m ZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBz byA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRmaXJzdGJh dGNoID0gQlRCYXRjaEdldERhdGEoZmlyc3RiYXRjaCk7CisJQmxvY2tOdW1iZXIgYmxrbm8sCisJ CQkJbGFzdGN1cnJibGtubzsKIAotCXNvLT5udW1LaWxsZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5v aWEgKi8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJLyogZGl0dG8gKi8KLQotCS8qIEluaXRp YWxpemUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBwYWdlIChwYWdlIGluIHNvLT5jdXJyUG9z LmJ1ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZp cnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2NhbikKIAl7CiAJCUFzc2VydChzby0+bnVt QXJyYXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJy UG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOwor CQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBm YWxzZTsKIAl9CiAJZWxzZSBpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJ c28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0g dHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gt Pm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0 ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRj aC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwog CX0KIAogCS8qCiAJICogQXR0ZW1wdCB0byBsb2FkIG1hdGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBm aXJzdCBwYWdlLgogCSAqCi0JICogTm90ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBp bml0aWFsaXppbmcgdGhlIHNvLT5jdXJyUG9zIGZpZWxkcy4KKwkgKiBOb3RlIHRoYXQgX2J0X3Jl YWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJ ICogX2J0X3JlYWRwYWdlIGFsc28gcmVsZWFzZXMgcGFyYWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0 IHJldHVybnMgZmFsc2UpLgogCSAqLwotCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZu dW0sIHRydWUpKQorCWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgZGlyLCBvZmZu dW0sIHRydWUpKQogCXsKLQkJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQot CQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1h eWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNvLT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3Ig YnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWws IHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9y ZSBtYXRjaGVzIGluIGZpcnN0YmF0Y2guaXRlbXNbXSAqLworCQlfYnRfYmF0Y2hfdW5sb2NrKHNj YW4sIGZpcnN0YmF0Y2gsIGJ0Zmlyc3RiYXRjaC0+YnVmKTsKKwkJcmV0dXJuIGZpcnN0YmF0Y2g7 CiAJfQogCi0JLyogVGhlcmUncyBubyBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBwYWdl IGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwotCV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlv biwgc28tPmN1cnJQb3MuYnVmKTsKKwkvKiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRh dGEgb24gdGhlIHBhZ2UgKi8KKwlfYnRfcmVsYnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIGJ0Zmly c3RiYXRjaC0+YnVmKTsKIAotCS8qIENhbGwgX2J0X3JlYWRuZXh0cGFnZSB1c2luZyBpdHMgX2J0 X3N0ZXBwYWdlIHdyYXBwZXIgZnVuY3Rpb24gKi8KLQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBk aXIpKQotCQlyZXR1cm4gZmFsc2U7CisJLyogV2FsayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0 YSAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJsa25vID0gYnRmaXJz dGJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJCWJsa25vID0gYnRmaXJzdGJhdGNoLT5wcmV2UGFn ZTsKKwlsYXN0Y3VycmJsa25vID0gYnRmaXJzdGJhdGNoLT5jdXJyUGFnZTsKIAotCS8qIF9idF9y ZWFkcGFnZSBmb3IgYSBsYXRlciBwYWdlIChub3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAq LwotCXJldHVybiB0cnVlOworCUFzc2VydChmaXJzdGJhdGNoLT5kaXIgPT0gZGlyKTsKKworCWlm IChibGtubyA9PSBQX05PTkUgfHwKKwkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJ CSAhYnRmaXJzdGJhdGNoLT5tb3JlUmlnaHQgOiAhYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCkpCisJ eworCQkvKgorCQkgKiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4g dGhpcyBkaXJlY3Rpb24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQg dGhlIHNjYW4gd2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqLworCQlpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNl KHNjYW4sIGZpcnN0YmF0Y2gpOworCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBz Y2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVM TCAmJgorCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8s IGZhbHNlKSkKKwkJcmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3 YXNuJ3Qgc2V0ICovCisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFz dGN1cnJibGtubywgZGlyLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0xODA4LDEwMiArMTczNCw2NyBA QCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZu dW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogcHJldmlvdXNseS1zYXZlZCByaWdodCBsaW5rIG9y IGxlZnQgbGluay4gIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2UgdGhhdAogICogd2FzIGN1cnJl bnQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdhcyBzYXZlZCwgd2hpY2ggd2Ug dXNlIHRvCiAgKiByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNwbGl0cy9wYWdlIGRlbGV0 aW9ucyBkdXJpbmcgYmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJl IHNlaXplZD1mYWxzZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJyUG9zLm5leHRQYWdlCi0gKiBv ciBzby0+Y3VyclBvcy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgc28tPmN1cnJQb3Mu Y3VyclBhZ2UuCisgKiBibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBuZXh0UGFnZSBvciBwcmV2 UGFnZSAoZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50CisgKiBzY2FuIGRpcmVjdGlvbiksIGFuZCBs YXN0Y3VycmJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIGN1cnJQYWdlLgogICoKLSAqIE9uIGVu dHJ5LCBzby0+Y3VyclBvcyBzaG91bGRuJ3QgYmUgbG9ja2VkIGJ5IGNhbGxlci4gIHNvLT5jdXJy UG9zLmJ1ZiBtdXN0Ci0gKiBiZSBJbnZhbGlkQnVmZmVyL3VucGlubmVkIGFzIG5lZWRlZCBieSBj YWxsZXIgKG5vdGUgdGhhdCBsYXN0Y3VycmJsa25vCi0gKiB3b24ndCBuZWVkIHRvIGJlIHJlYWQg YWdhaW4gaW4gYWxtb3N0IGFsbCBjYXNlcykuICBQYXJhbGxlbCBzY2FuIGNhbGxlcnMKLSAqIHRo YXQgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUgc2hvdWxkIHBhc3Mgc2VpemVk PXRydWU7IHN1Y2ggYQotICogY2FsbGVyJ3MgYmxrbm8gYW5kIGxhc3RjdXJyYmxrbm8gYXJndW1l bnRzIGNvbWUgZnJvbSB0aGUgc2VpemVkIHNjYW4uCi0gKiBzZWl6ZWQ9ZmFsc2UgY2FsbGVycyBq dXN0IHBhc3MgdXMgdGhlIGJsa25vL2xhc3RjdXJyYmxrbm8gdGFrZW4gZnJvbSB0aGVpcgotICog c28tPmN1cnJQb3MsIHdoaWNoIChhbG9uZyB3aXRoIHNvLT5jdXJyUG9zIGl0c2VsZikgY2FuIGJl IHVzZWQgdG8gZW5kIHRoZQotICogc2Nhbi4gIEEgc2VpemVkPWZhbHNlIGNhbGxlcidzIGJsa25v IGNhbiBuZXZlciBiZSBhc3N1bWVkIHRvIGJlIHRoZSBwYWdlCi0gKiB0aGF0IG11c3QgYmUgcmVh ZCBuZXh0IGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sIHRob3VnaC4gIFdlIG11c3QgZmlndXJlIHRo YXQKLSAqIHBhcnQgb3V0IGZvciBvdXJzZWx2ZXMgYnkgc2VpemluZyB0aGUgc2NhbiAodGhlIGNv cnJlY3QgcGFnZSB0byByZWFkIG1pZ2h0Ci0gKiBhbHJlYWR5IGJlIGJleW9uZCB0aGUgc2VpemVk PWZhbHNlIGNhbGxlcidzIGJsa25vIGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sCi0gKiB1bmxlc3Mg Ymxrbm8vc28tPmN1cnJQb3MubmV4dFBhZ2Uvc28tPmN1cnJQb3MucHJldlBhZ2UgaXMgYWxyZWFk eSBQX05PTkUsCi0gKiBvciB1bmxlc3Mgc28tPmN1cnJQb3MubW9yZVJpZ2h0L3NvLT5jdXJyUG9z Lm1vcmVMZWZ0IGlzIGFscmVhZHkgdW5zZXQpLgorICogT24gZW50cnksIG5vIHBhZ2Ugc2hvdWxk IGJlIGxvY2tlZCBieSBjYWxsZXIuCiAgKgotICogT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBv cyBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gZGF0YSBmcm9tIHRoZSBuZXh0Ci0gKiBpbnRlcmVzdGlu ZyBwYWdlLCBhbmQgd2UgcmV0dXJuIHRydWUuICBXZSBob2xkIGEgcGluIG9uIHRoZSBidWZmZXIg b24KLSAqIHN1Y2Nlc3MgZXhpdCAoZXhjZXB0IGR1cmluZyBzby0+ZHJvcFBpbiBpbmRleCBzY2Fu cywgd2hlbiB3ZSBkcm9wIHRoZSBwaW4KLSAqIGVhZ2VybHkgdG8gYXZvaWQgYmxvY2tpbmcgVkFD VVVNKS4KKyAqIE9uIHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyB1bmxvY2tlZCBiYXRjaCBjb250YWlu aW5nIGRhdGEgZnJvbSB0aGUgbmV4dCBwYWdlCisgKiB0aGF0IGhhcyBhdCBsZWFzdCBvbmUgbWF0 Y2hpbmcgaXRlbS4gIElmIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zCisgKiBpbiB0 aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuCiAgKgotICogSWYg dGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9u LCB3ZSBpbnZhbGlkYXRlCi0gKiBzby0+Y3VyclBvcyAod2hpbGUgZW5zdXJpbmcgaXQgcmV0YWlu cyBubyBsb2NrcyBvciBwaW5zKSwgYW5kIHJldHVybiBmYWxzZS4KLSAqCi0gKiBXZSBhbHdheXMg cmVsZWFzZSB0aGUgc2NhbiBmb3IgYSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBv ZgotICogc3VjY2VzcyBvciBmYWlsdXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNl IGFzIHNvb24gYXMgcG9zc2libGUuCisgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBzZWl6 ZSB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLiAgYmxrbm8gYW5kCisgKiBsYXN0Y3VycmJs a25vIHNob3VsZCBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLiAgV2UnbGwgcmVsZWFzZSB0aGUg c2NhbiBhcworICogc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKK3N0YXRpYyBJ bmRleFNjYW5CYXRjaAogX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2Nr TnVtYmVyIGJsa25vLAotCQkJCSBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0 aW9uIGRpciwgYm9vbCBzZWl6ZWQpCisJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNj YW5EaXJlY3Rpb24gZGlyLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBuZXdiYXRjaDsKKwlCVEJhdGNoRGF0YSAqYnRuZXdi YXRjaDsKIAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vIHx8 IHNlaXplZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXplZCkpOwotCUFzc2Vy dCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBm b3IgbmV4dCBiYXRjaCAqLworCW5ld2JhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNj YW4pOworCWJ0bmV3YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShuZXdiYXRjaCk7CiAKIAkvKgotCSAq IFJlbWVtYmVyIHRoYXQgdGhlIHNjYW4gYWxyZWFkeSByZWFkIGxhc3RjdXJyYmxrbm8sIGEgcGFn ZSB0byB0aGUgbGVmdAotCSAqIG9mIGJsa25vIChvciByZW1lbWJlciByZWFkaW5nIGEgcGFnZSB0 byB0aGUgcmlnaHQsIGZvciBiYWNrd2FyZHMgc2NhbnMpCisJICogbmV3YmF0Y2ggd2lsbCBiZSB0 aGUgYmF0Y2ggZm9yIGxhc3RjdXJyYmxrbm8sIGEgcGFnZSB0byB0aGUgbGVmdCBvZgorCSAqIGJs a25vIChvciB0byB0aGUgcmlnaHQsIHdoZW4gdGhlIHNjYW4gaXMgbW92aW5nIGJhY2t3YXJkcykK IAkgKi8KLQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlzby0+Y3VyclBvcy5t b3JlTGVmdCA9IHRydWU7Ci0JZWxzZQotCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSB0cnVlOwor CWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwlidG5ld2JhdGNoLT5tb3JlUmlnaHQgPSB0 cnVlOwogCiAJZm9yICg7OykKIAl7CiAJCVBhZ2UJCXBhZ2U7CiAJCUJUUGFnZU9wYXF1ZSBvcGFx dWU7CiAKLQkJaWYgKGJsa25vID09IFBfTk9ORSB8fAotCQkJKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSA/Ci0JCQkgIXNvLT5jdXJyUG9zLm1vcmVSaWdodCA6ICFzby0+Y3VyclBvcy5tb3Jl TGVmdCkpCi0JCXsKLQkJCS8qIG1vc3QgcmVjZW50IF9idF9yZWFkcGFnZSBjYWxsIChmb3IgbGFz dGN1cnJibGtubykgZW5kZWQgc2NhbiAqLwotCQkJQXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdl ID09IGxhc3RjdXJyYmxrbm8gJiYgIXNlaXplZCk7Ci0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNv LT5jdXJyUG9zKTsKLQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwkvKiBpZmYgIXNvLT5uZWVk UHJpbVNjYW4gKi8KLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCi0JCUFzc2VydCghc28tPm5lZWRQ cmltU2Nhbik7Ci0KLQkJLyogcGFyYWxsZWwgc2NhbiBtdXN0IG5ldmVyIGFjdHVhbGx5IHZpc2l0 IHNvLT5jdXJyUG9zIGJsa25vICovCi0JCWlmICghc2VpemVkICYmIHNjYW4tPnBhcmFsbGVsX3Nj YW4gIT0gTlVMTCAmJgotCQkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0 Y3VycmJsa25vLCBmYWxzZSkpCi0JCXsKLQkJCS8qIHdob2xlIHNjYW4gaXMgbm93IGRvbmUgKG9y IGFub3RoZXIgcHJpbWl0aXZlIHNjYW4gcmVxdWlyZWQpICovCi0JCQlCVFNjYW5Qb3NJbnZhbGlk YXRlKHNvLT5jdXJyUG9zKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQorCQlBc3NlcnQoISgoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOworCQlBc3NlcnQoYmxrbm8g IT0gUF9OT05FICYmIGxhc3RjdXJyYmxrbm8gIT0gUF9OT05FKTsKIAogCQlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBidXQgY2hlY2sgZm9y IGludGVycnVwdHMgZmlyc3QgKi8KIAkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCQlzby0+ Y3VyclBvcy5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8sIEJUX1JFQUQpOworCQkJYnRuZXdi YXRjaC0+YnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKIAkJfQogCQllbHNl CiAJCXsKIAkJCS8qIHJlYWQgYmxrbm8sIGF2b2lkaW5nIHJhY2UgKGFsc28gY2hlY2tzIGZvciBp bnRlcnJ1cHRzKSAqLwotCQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRl X2xlZnQocmVsLCAmYmxrbm8sCisJCQlidG5ld2JhdGNoLT5idWYgPSBfYnRfbG9ja19hbmRfdmFs aWRhdGVfbGVmdChyZWwsICZibGtubywKIAkJCQkJCQkJCQkJCQkJIGxhc3RjdXJyYmxrbm8pOwot CQkJaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQorCQkJaWYgKGJ0bmV3YmF0 Y2gtPmJ1ZiA9PSBJbnZhbGlkQnVmZmVyKQogCQkJewogCQkJCS8qIG11c3QgaGF2ZSBiZWVuIGEg Y29uY3VycmVudCBkZWxldGlvbiBvZiBsZWZ0bW9zdCBwYWdlICovCi0JCQkJQlRTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCQkJ cmV0dXJuIGZhbHNlOworCQkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2Jh dGNoKTsKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQogCi0JCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0Y2gt PmJ1Zik7CiAJCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAkJbGFzdGN1cnJibGtu byA9IGJsa25vOwogCQlpZiAobGlrZWx5KCFQX0lHTk9SRShvcGFxdWUpKSkKQEAgLTE5MTEsMTcg KzE4MDIsMTcgQEAgX2J0X3JlYWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVt YmVyIGJsa25vLAogCQkJLyogc2VlIGlmIHRoZXJlIGFyZSBhbnkgbWF0Y2hlcyBvbiB0aGlzIHBh Z2UgKi8KIAkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJCQl7Ci0JCQkJLyog bm90ZSB0aGF0IHRoaXMgd2lsbCBjbGVhciBtb3JlUmlnaHQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJ CQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIGRpciwgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgc2Vp emVkKSkKKwkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJ CSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQli bGtubyA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQkJCWJsa25vID0gYnRuZXdiYXRjaC0+bmV4 dFBhZ2U7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJLyogbm90ZSB0aGF0IHRoaXMgd2lsbCBj bGVhciBtb3JlTGVmdCBpZiB3ZSBjYW4gc3RvcCAqLwotCQkJCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgZGlyLCBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBzZWl6ZWQpKQorCQkJCWlmIChf YnRfcmVhZHBhZ2Uoc2NhbiwgbmV3YmF0Y2gsIGRpciwKKwkJCQkJCQkJIFBhZ2VHZXRNYXhPZmZz ZXROdW1iZXIocGFnZSksIGZpcnN0cGFnZSkpCiAJCQkJCWJyZWFrOwotCQkJCWJsa25vID0gc28t PmN1cnJQb3MucHJldlBhZ2U7CisJCQkJYmxrbm8gPSBidG5ld2JhdGNoLT5wcmV2UGFnZTsKIAkJ CX0KIAkJfQogCQllbHNlCkBAIC0xOTM2LDE5ICsxODI3LDM4IEBAIF9idF9yZWFkbmV4dHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywKIAkJfQogCiAJCS8qIG5vIG1h dGNoaW5nIHR1cGxlcyBvbiB0aGlzIHBhZ2UgKi8KLQkJX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJy UG9zLmJ1Zik7Ci0JCXNlaXplZCA9IGZhbHNlOwkJCS8qIHJlbGVhc2VkIGJ5IF9idF9yZWFkcGFn ZSAob3IgYnkgdXMpICovCisJCV9idF9yZWxidWYocmVsLCBidG5ld2JhdGNoLT5idWYpOworCisJ CS8qIENvbnRpbnVlIHRoZSBzY2FuIGluIHRoaXMgZGlyZWN0aW9uPyAqLworCQlpZiAoYmxrbm8g PT0gUF9OT05FIHx8CisJCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJCSAhYnRu ZXdiYXRjaC0+bW9yZVJpZ2h0IDogIWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0KSkKKwkJeworCQkJLyoK KwkJCSAqIGJsa25vIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rp b24gKHRob3VnaCBpZgorCQkJICogc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdp bGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkJICovCisJCQlfYnRfcGFyYWxsZWxfZG9uZShz Y2FuKTsKKwkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJ CXJldHVybiBOVUxMOworCQl9CisKKwkJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBz Y2FuIHRvIGdldCBuZXh0IGJsa25vICovCisJCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5V TEwgJiYKKwkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtu bywgZmFsc2UpKQorCQl7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdi YXRjaCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLworCQl9CisKKwkJZmlyc3RwYWdlID0gZmFsc2U7CQkvKiBuZXh0IHBhZ2UgY2Fu bm90IGJlIGZpcnN0ICovCiAJfQogCi0JLyoKLQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVkLiAg RHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JICogc28tPmN1cnJQb3MuYnVm IGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBsZXMuCi0JICovCi0J QXNzZXJ0KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGJsa25vKTsKLQlBc3NlcnQoQlRTY2FuUG9z SXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQlfYnRfZHJvcF9sb2NrX2FuZF9tYXliZV9waW4ocmVs LCBzbyk7CisJLyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gbmV3 YmF0Y2guaXRlbXNbXSAqLworCUFzc2VydChidG5ld2JhdGNoLT5jdXJyUGFnZSA9PSBibGtubyk7 CisJX2J0X2JhdGNoX3VubG9jayhzY2FuLCBuZXdiYXRjaCwgYnRuZXdiYXRjaC0+YnVmKTsKIAot CXJldHVybiB0cnVlOworCXJldHVybiBuZXdiYXRjaDsKIH0KIAogLyoKQEAgLTIxNzQsMjUgKzIw ODQsMjQgQEAgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwgYm9v bCByaWdodG1vc3QpCiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0 aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICogRXhpdCBjb25kaXRpb25zIGFyZSB0aGUg c2FtZSBhcyBmb3IgX2J0X2ZpcnN0KCkuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRfZW5kcG9pbnQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5C YXRjaAorX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIs IEluZGV4U2NhbkJhdGNoIGZpcnN0YmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5k ZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CisJQlRCYXRjaERhdGEgKmJ0Zmlyc3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKGZpcnN0YmF0 Y2gpOwogCVBhZ2UJCXBhZ2U7CiAJQlRQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIg c3RhcnQ7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3Nl cnQoIXNvLT5uZWVkUHJpbVNjYW4pOworCUFzc2VydCghKChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZSktPm5lZWRQcmltU2Nhbik7CiAKIAkvKgogCSAqIFNjYW4gZG93biB0byB0aGUgbGVmdG1v c3Qgb3IgcmlnaHRtb3N0IGxlYWYgcGFnZS4gIFRoaXMgaXMgYSBzaW1wbGlmaWVkCiAJICogdmVy c2lvbiBvZiBfYnRfc2VhcmNoKCkuCiAJICovCi0Jc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldF9l bmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcikpOworCWJ0Zmlyc3Ri YXRjaC0+YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3 YXJkKGRpcikpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYg KCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+YnVmKSkKIAl7CiAJCS8qCiAJCSAqIEVtcHR5 IGluZGV4LiBMb2NrIHRoZSB3aG9sZSByZWxhdGlvbiwgYXMgbm90aGluZyBmaW5lciB0byBsb2Nr CkBAIC0yMjAzLDcgKzIxMTIsNyBAQCBfYnRfZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXBhZ2UgPSBCdWZmZXJH ZXRQYWdlKHNvLT5jdXJyUG9zLmJ1Zik7CisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnRmaXJzdGJh dGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKIAlBc3NlcnQoUF9J U0xFQUYob3BhcXVlKSk7CiAKQEAgLTIyMjksOSArMjEzOCw1IEBAIF9idF9lbmRwb2ludChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCS8qCiAJICogTm93IGxvYWQgZGF0 YSBmcm9tIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBzY2FuLgogCSAqLwotCWlmICghX2J0X3JlYWRm aXJzdHBhZ2Uoc2Nhbiwgc3RhcnQsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKLQotCV9idF9yZXR1 cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBh Z2Uoc2NhbiwgZmlyc3RiYXRjaCwgc3RhcnQsIGRpcik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L25idHV0aWxzLmMKaW5kZXggOWIwOTE4NTg5Li43NmIzODMwMWEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHV0aWxzLmMKQEAgLTE5LDE3ICsxOSwxMyBAQAogCiAjaW5jbHVkZSAiYWNjZXNz L25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0jaW5jbHVkZSAiYWNj ZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5oIgotI2luY2x1ZGUg ImNvbW1vbi9pbnQuaCIKLSNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIAotc3RhdGljIGludAlfYnRfY29tcGFy ZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKTsKIHN0YXRpYyBpbnQJX2J0X2tl ZXBfbmF0dHMoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LAogCQkJCQkJICAgSW5k ZXhUdXBsZSBmaXJzdHJpZ2h0LCBCVFNjYW5JbnNlcnQgaXR1cF9rZXkpOwogCkBAIC0xNDQsMjQ3 ICsxNDAsNiBAQCBfYnRfbWtzY2Fua2V5KFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBpdHVwKQog CXJldHVybiBrZXk7CiB9CiAKLS8qCi0gKiBxc29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBp bnQgYXJyYXlzCi0gKi8KLXN0YXRpYyBpbnQKLV9idF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2 YSwgY29uc3Qgdm9pZCAqdmIpCi17Ci0JaW50CQkJYSA9ICooKGNvbnN0IGludCAqKSB2YSk7Ci0J aW50CQkJYiA9ICooKGNvbnN0IGludCAqKSB2Yik7Ci0KLQlyZXR1cm4gcGdfY21wX3MzMihhLCBi KTsKLX0KLQotLyoKLSAqIF9idF9raWxsaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRl bXMgYW4gaW5kZXhzY2FuIGNhbGxlciBoYXMKLSAqIHRvbGQgdXMgd2VyZSBraWxsZWQKLSAqCi0g KiBzY2FuLT5vcGFxdWUsIHJlZmVyZW5jZWQgbG9jYWxseSB0aHJvdWdoIHNvLCBjb250YWlucyBp bmZvcm1hdGlvbiBhYm91dCB0aGUKLSAqIGN1cnJlbnQgcGFnZSBhbmQga2lsbGVkIHR1cGxlcyB0 aGVyZW9uIChnZW5lcmFsbHksIHRoaXMgc2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBpZiBzby0+ bnVtS2lsbGVkID4gMCkuCi0gKgotICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24g dGhlIHNvLT5jdXJyUG9zIHBhZ2UsIGJ1dCBtdXN0IGhvbGQgYQotICogYnVmZmVyIHBpbiB3aGVu ICFzby0+ZHJvcFBpbi4gIFdoZW4gd2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2NrZWQu Ci0gKiBJdCdsbCBjb250aW51ZSB0byBob2xkIHdoYXRldmVyIHBpbnMgd2VyZSBoZWxkIGJlZm9y ZSBjYWxsaW5nIGhlcmUuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVhcCBUSUQgYmVmb3Jl IGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvIHNldAotICogTFBfREVBRC4gIElm IHRoZSBzY2FuIGlzIG9uZSB0aGF0IGhvbGRzIGEgYnVmZmVyIHBpbiBvbiB0aGUgdGFyZ2V0IHBh Z2UKLSAqIGNvbnRpbnVvdXNseSBmcm9tIGluaXRpYWxseSByZWFkaW5nIHRoZSBpdGVtcyB1bnRp bCBhcHBseWluZyB0aGlzIGZ1bmN0aW9uCi0gKiAoaWYgaXQgaXMgYSAhc28tPmRyb3BQaW4gc2Nh biksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBpdGVtcyBvbiB0aGUKLSAqIHBhZ2Us IHNvIHRoZSBwYWdlJ3MgVElEcyBjYW4ndCBoYXZlIGJlZW4gcmVjeWNsZWQgYnkgbm93LiAgVGhl cmUncyBubyByaXNrCi0gKiB0aGF0IHdlJ2xsIGNvbmZ1c2UgYSBuZXcgaW5kZXggdHVwbGUgdGhh dCBoYXBwZW5zIHRvIHVzZSBhIHJlY3ljbGVkIFRJRAotICogd2l0aCBhIG5vdy1yZW1vdmVkIHR1 cGxlIHdpdGggdGhlIHNhbWUgVElEICh0aGF0IHVzZWQgdG8gYmUgb24gdGhpcyBzYW1lCi0gKiBw YWdlKS4gIFdlIGNhbid0IHJlbHkgb24gdGhhdCBkdXJpbmcgc2NhbnMgdGhhdCBkcm9wIGJ1ZmZl ciBwaW5zIGVhZ2VybHkKLSAqIChzby0+ZHJvcFBpbiBzY2FucyksIHRob3VnaCwgc28gd2UgbXVz dCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24KLSAqIHRoZSBwYWdlIExTTiBoYXZp bmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVuIF9idF9yZWFkcGFnZSBzYXcgdGhlIHBhZ2Uu Ci0gKiBXZSB0b3RhbGx5IGdpdmUgdXAgb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgd2hlbiB0aGUg cGFnZSBMU04gY2hhbmdlZC4KLSAqCi0gKiBXZSBnaXZlIHVwIG11Y2ggbGVzcyBvZnRlbiBkdXJp bmcgIXNvLT5kcm9wUGluIHNjYW5zLCBidXQgaXQgc3RpbGwgaGFwcGVucy4KLSAqIFdlIGNvcGUg d2l0aCBjYXNlcyB3aGVyZSBpdGVtcyBoYXZlIG1vdmVkIHJpZ2h0IGR1ZSB0byBpbnNlcnRpb25z LiAgSWYgYW4KLSAqIGl0ZW0gaGFzIG1vdmVkIG9mZiB0aGUgY3VycmVudCBwYWdlIGR1ZSB0byBh IHNwbGl0LCB3ZSdsbCBmYWlsIHRvIGZpbmQgaXQKLSAqIGFuZCBqdXN0IGdpdmUgdXAgb24gaXQu Ci0gKi8KLXZvaWQKLV9idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuKQotewotCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCVBhZ2UJCXBhZ2U7Ci0JQlRQYWdlT3BhcXVlIG9wYXF1 ZTsKLQlPZmZzZXROdW1iZXIgbWlub2ZmOwotCU9mZnNldE51bWJlciBtYXhvZmY7Ci0JaW50CQkJ bnVtS2lsbGVkID0gc28tPm51bUtpbGxlZDsKLQlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxz ZTsKLQlCdWZmZXIJCWJ1ZjsKLQotCUFzc2VydChudW1LaWxsZWQgPiAwKTsKLQlBc3NlcnQoQlRT Y2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24g IT0gTlVMTCk7IC8qIGNhbid0IGJlIGEgYml0bWFwIGluZGV4IHNjYW4gKi8KLQotCS8qIEFsd2F5 cyBpbnZhbGlkYXRlIHNvLT5raWxsZWRJdGVtc1tdIGJlZm9yZSBsZWF2aW5nIHNvLT5jdXJyUG9z ICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gaXRlcmF0ZSB0 aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFnZSBvcmRlcjsgdGhlCi0JICogbG9v cCBiZWxvdyBleHBlY3RzIHRoaXMgKHdoZW4gbWFya2luZyBwb3N0aW5nIGxpc3QgdHVwbGVzLCBh dCBsZWFzdCkuCi0JICogc28tPmtpbGxlZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVy IHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgotCSAqIFNjcm9sbGFibGUgY3Vyc29yIHNjYW5z IG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KLQkgKgotCSAq IFNvcnQgYW5kIHVuaXF1ZS1pZnkgc28tPmtpbGxlZEl0ZW1zW10gdG8gZGVhbCB3aXRoIGFsbCB0 aGlzLgotCSAqLwotCWlmIChudW1LaWxsZWQgPiAxKQotCXsKLQkJcXNvcnQoc28tPmtpbGxlZEl0 ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQpLCBfYnRfY29tcGFyZV9pbnQpOwotCQludW1LaWxs ZWQgPSBxdW5pcXVlKHNvLT5raWxsZWRJdGVtcywgbnVtS2lsbGVkLCBzaXplb2YoaW50KSwKLQkJ CQkJCQlfYnRfY29tcGFyZV9pbnQpOwotCX0KLQotCWlmICghc28tPmRyb3BQaW4pCi0JewotCQkv KgotCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBvbiB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0 aGUgaW5kZXggdHVwbGVzLAotCQkgKiBzbyBhbGwgd2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0LiAg VGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCi0JCSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9t IHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24gdGhlIHBhZ2UuCi0JCSAqLwotCQlBc3NlcnQo QlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVm OwotCQlfYnRfbG9ja2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7Ci0JfQotCWVsc2UKLQl7Ci0JCVhM b2dSZWNQdHIJbGF0ZXN0bHNuOwotCi0JCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1 cnJQb3MpKTsKLQkJYnVmID0gX2J0X2dldGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmN1cnJQYWdlLCBC VF9SRUFEKTsKLQotCQlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKLQkJQXNz ZXJ0KHNvLT5jdXJyUG9zLmxzbiA8PSBsYXRlc3Rsc24pOwotCQlpZiAoc28tPmN1cnJQb3MubHNu ICE9IGxhdGVzdGxzbikKLQkJewotCQkJLyogTW9kaWZpZWQsIGdpdmUgdXAgb24gaGludGluZyAq LwotCQkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvKiBVbm1v ZGlmaWVkLCBoaW50aW5nIGlzIHNhZmUgKi8KLQl9Ci0KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShi dWYpOwotCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKLQltaW5vZmYgPSBQX0ZJUlNU REFUQUtFWShvcGFxdWUpOwotCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7 Ci0KLQkvKiBJdGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9y ZGVyICovCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBudW1LaWxsZWQ7IGkrKykKLQl7Ci0JCWludAkJ CWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJQlRTY2FuUG9zSXRlbSAqa2l0ZW0g PSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9 IGtpdGVtLT5pbmRleE9mZnNldDsKLQotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9z LmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsK LQkJQXNzZXJ0KGkgPT0gMCB8fAotCQkJICAgb2ZmbnVtID49IHNvLT5jdXJyUG9zLml0ZW1zW3Nv LT5raWxsZWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKLQotCQlpZiAob2ZmbnVtIDwgbWlu b2ZmKQotCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLwotCQl3aGlsZSAob2ZmbnVt IDw9IG1heG9mZikKLQkJewotCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9m Zm51bSk7Ci0JCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShw YWdlLCBpaWQpOwotCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFsc2U7Ci0KLQkJCWlmIChCVHJlZVR1 cGxlSXNQb3N0aW5nKGl0dXBsZSkpCi0JCQl7Ci0JCQkJaW50CQkJcGkgPSBpICsgMTsKLQkJCQlp bnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwbGUpOwotCQkJCWludAkJ CWo7Ci0KLQkJCQkvKgotCQkJCSAqIE5vdGUgdGhhdCB0aGUgcGFnZSBtYXkgaGF2ZSBiZWVuIG1v ZGlmaWVkIGluIGFsbW9zdCBhbnkgd2F5Ci0JCQkJICogc2luY2Ugd2UgZmlyc3QgcmVhZCBpdCAo aW4gdGhlICFzby0+ZHJvcFBpbiBjYXNlKSwgc28gaXQncwotCQkJCSAqIHBvc3NpYmxlIHRoYXQg dGhpcyBwb3N0aW5nIGxpc3QgdHVwbGUgd2Fzbid0IGEgcG9zdGluZyBsaXN0Ci0JCQkJICogdHVw bGUgd2hlbiB3ZSBmaXJzdCBlbmNvdW50ZXJlZCBpdHMgaGVhcCBUSURzLgotCQkJCSAqLwotCQkJ CWZvciAoaiA9IDA7IGogPCBucG9zdGluZzsgaisrKQotCQkJCXsKLQkJCQkJSXRlbVBvaW50ZXIg aXRlbSA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwbGUsIGopOwotCi0JCQkJCWlmICghSXRl bVBvaW50ZXJFcXVhbHMoaXRlbSwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQkJCWJyZWFrOwkvKiBv dXQgb2YgcG9zdGluZyBsaXN0IGxvb3AgKi8KLQotCQkJCQkvKgotCQkJCQkgKiBraXRlbSBtdXN0 IGhhdmUgbWF0Y2hpbmcgb2ZmbnVtIHdoZW4gaGVhcCBUSURzIG1hdGNoLAotCQkJCQkgKiB0aG91 Z2ggb25seSBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHBhZ2UgY2FuJ3QKLQkJCQkJICog aGF2ZSBiZWVuIGNvbmN1cnJlbnRseSBtb2RpZmllZAotCQkJCQkgKi8KLQkJCQkJQXNzZXJ0KGtp dGVtLT5pbmRleE9mZnNldCA9PSBvZmZudW0gfHwgIXNvLT5kcm9wUGluKTsKLQotCQkJCQkvKgot CQkJCQkgKiBSZWFkLWFoZWFkIHRvIGxhdGVyIGtpdGVtcyBoZXJlLgotCQkJCQkgKgotCQkJCQkg KiBXZSByZWx5IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBoZXJl Ci0JCQkJCSAqIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxp c3QgdHVwbGUKLQkJCQkJICogZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQgaGVh cCBUSUQgaW4gbmV4dAotCQkJCQkgKiBsb29wIGl0ZXJhdGlvbi4KLQkJCQkJICoKLQkJCQkJICog SWYsIG9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgotCQkJ CQkgKiB0aGUgcG9zdGluZyBsaXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCi0JCQkJ CSAqIHJlZ2FyZGxlc3MgKGkuZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0Ci0J CQkJCSAqIGtpdGVtIGlzIGFsc28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXgg dHVwbGUKLQkJCQkJICogY29ycmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxs ZWQpLgotCQkJCQkgKi8KLQkJCQkJaWYgKHBpIDwgbnVtS2lsbGVkKQotCQkJCQkJa2l0ZW0gPSAm c28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW3BpKytdXTsKLQkJCQl9Ci0KLQkJCQkv KgotCQkJCSAqIERvbid0IGJvdGhlciBhZHZhbmNpbmcgdGhlIG91dGVybW9zdCBsb29wJ3MgaW50 IGl0ZXJhdG9yIHRvCi0JCQkJICogYXZvaWQgcHJvY2Vzc2luZyBraWxsZWQgaXRlbXMgdGhhdCBy ZWxhdGUgdG8gdGhlIHNhbWUKLQkJCQkgKiBvZmZudW0vcG9zdGluZyBsaXN0IHR1cGxlLiAgVGhp cyBtaWNyby1vcHRpbWl6YXRpb24gaGFyZGx5Ci0JCQkJICogc2VlbXMgd29ydGggaXQuICAoRnVy dGhlciBpdGVyYXRpb25zIG9mIHRoZSBvdXRlcm1vc3QgbG9vcAotCQkJCSAqIHdpbGwgZmFpbCB0 byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmlyc3QgaGVhcAotCQkJCSAqIFRJ RCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZhbmNlIHRvIHRoZSBuZXh0IG9mZm51bS9pbmRleAotCQkJ CSAqIHR1cGxlIHByZXR0eSBxdWlja2x5LikKLQkJCQkgKi8KLQkJCQlpZiAoaiA9PSBucG9zdGlu ZykKLQkJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UgaWYgKEl0ZW1Qb2ludGVy RXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAma2l0ZW0tPmhlYXBUaWQpKQotCQkJCWtpbGx0dXBsZSA9 IHRydWU7Ci0KLQkJCS8qCi0JCQkgKiBNYXJrIGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNu J3QgYWxyZWFkeS4gIFNpbmNlIHRoaXMKLQkJCSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBhIGJ1 ZmZlciBsb2NrIHBvc3NpYmx5IGluIHNoYXJlZCBtb2RlLAotCQkJICogaXQncyBwb3NzaWJsZSB0 aGF0IG11bHRpcGxlIHByb2Nlc3NlcyBhdHRlbXB0IHRvIGRvIHRoaXMKLQkJCSAqIHNpbXVsdGFu ZW91c2x5LCBsZWFkaW5nIHRvIG11bHRpcGxlIGZ1bGwtcGFnZSBpbWFnZXMgYmVpbmcgc2VudAot CQkJICogdG8gV0FMIChpZiB3YWxfbG9nX2hpbnRzIG9yIGRhdGEgY2hlY2tzdW1zIGFyZSBlbmFi bGVkKSwgd2hpY2gKLQkJCSAqIGlzIHVuZGVzaXJhYmxlLgotCQkJICovCi0JCQlpZiAoa2lsbHR1 cGxlICYmICFJdGVtSWRJc0RlYWQoaWlkKSkKLQkJCXsKLQkJCQlpZiAoIWtpbGxlZHNvbWV0aGlu ZykKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1 cmUgdG8gY2hlY2sgaWYgd2UgY2FuCi0JCQkJCSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0 IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZQotCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRo ZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4KLQkJCQkJICovCi0JCQkJCWlmICghQnVmZmVyQmVn aW5TZXRIaW50Qml0cyhidWYpKQotCQkJCQkJZ290byB1bmxvY2tfcGFnZTsKLQkJCQl9Ci0KLQkJ CQkvKiBmb3VuZCB0aGUgaXRlbS9hbGwgcG9zdGluZyBsaXN0IGl0ZW1zICovCi0JCQkJSXRlbUlk TWFya0RlYWQoaWlkKTsKLQkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwotCQkJCWJyZWFrOwkJ CS8qIG91dCBvZiBpbm5lciBzZWFyY2ggbG9vcCAqLwotCQkJfQotCQkJb2ZmbnVtID0gT2Zmc2V0 TnVtYmVyTmV4dChvZmZudW0pOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNhbiBi ZSByZWRvbmUgbGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuCi0JICoKLQkgKiBX aGVuZXZlciB3ZSBtYXJrIGFueXRoaW5nIExQX0RFQUQsIHdlIGFsc28gc2V0IHRoZSBwYWdlJ3MK LQkgKiBCVFBfSEFTX0dBUkJBR0UgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQu ICAoTm90ZSB0aGF0IHdlCi0JICogb25seSByZWx5IG9uIHRoZSBwYWdlLWxldmVsIGZsYWcgaW4g IWhlYXBrZXlzcGFjZSBpbmRleGVzLikKLQkgKi8KLQlpZiAoa2lsbGVkc29tZXRoaW5nKQotCXsK LQkJb3BhcXVlLT5idHBvX2ZsYWdzIHw9IEJUUF9IQVNfR0FSQkFHRTsKLQkJQnVmZmVyRmluaXNo U2V0SGludEJpdHMoYnVmLCB0cnVlLCB0cnVlKTsKLQl9Ci0KLXVubG9ja19wYWdlOgotCWlmICgh c28tPmRyb3BQaW4pCi0JCV9idF91bmxvY2tidWYocmVsLCBidWYpOwotCWVsc2UKLQkJX2J0X3Jl bGJ1ZihyZWwsIGJ1Zik7Ci19Ci0KLQogLyoKICAqIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgbWFu YWdlIGEgc2hhcmVkLW1lbW9yeSBhcmVhIGluIHdoaWNoIHdlIHRyYWNrCiAgKiBhc3NpZ25tZW50 IG9mICJ2YWN1dW0gY3ljbGUgSURzIiB0byBjdXJyZW50bHktYWN0aXZlIGJ0cmVlIHZhY3V1bWlu ZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYwppbmRleCBkZmY3ZDI4NmYuLjNiYzVlNWNj ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKQEAgLTEwOTUsMTUgKzEwOTUsMTUg QEAgYnRyZWVfbWFzayhjaGFyICpwYWdlZGF0YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJ CSAqIEluIGJ0cmVlIGxlYWYgcGFnZXMsIGl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgTFBf RkxBR1Mgd2l0aG91dAogCQkgKiBlbWl0dGluZyBhbnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sg dGhlIGxpbmUgcG9pbnRlciBmbGFncy4gU2VlCi0JCSAqIF9idF9raWxsaXRlbXMoKSwgX2J0X2No ZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgorCQkgKiBidGtpbGxpdGVtc2JhdGNoKCksIF9idF9j aGVja191bmlxdWUoKSBmb3IgZGV0YWlscy4KIAkJICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7 CiAJfQogCiAJLyoKIAkgKiBCVFBfSEFTX0dBUkJBR0UgaXMganVzdCBhbiB1bi1sb2dnZWQgaGlu dCBiaXQuIFNvLCBtYXNrIGl0LiBTZWUKLQkgKiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdl KCksIF9idF9raWxsaXRlbXMoKSwgYW5kIF9idF9jaGVja191bmlxdWUoKQotCSAqIGZvciBkZXRh aWxzLgorCSAqIF9idF9kZWxldGVfb3JfZGVkdXBfb25lX3BhZ2UoKSwgYnRraWxsaXRlbXNiYXRj aCgpLCBhbmQKKwkgKiBfYnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFpbHMuCiAJICovCiAJbWFz a29wYXEtPmJ0cG9fZmxhZ3MgJj0gfkJUUF9IQVNfR0FSQkFHRTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Nw Z2lzdC9zcGd1dGlscy5jCmluZGV4IGE0Njk0YmQ4MC4uZTYzM2RiY2FmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC04OCwxMCArODgsMTIgQEAgc3BnaGFuZGxlcihQR19G VU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBzcGdiZWdpbnNjYW4sCiAJCS5hbXJlc2Nh biA9IHNwZ3Jlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBzcGdnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0 Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRj aCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IHNwZ2dldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9 IHNwZ2VuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEws CisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxM LAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBO VUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGU0YjcwMTY2Yi4uMDhiOWRlZmQ5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIHZvaWQgc2hvd19y ZWN1cnNpdmVfdW5pb25faW5mbyhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3RhdGUsCiBzdGF0aWMg dm9pZCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5jZXN0 b3JzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2hhc2hh Z2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwotc3RhdGljIHZv aWQgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5T dGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBs YW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJpdG1hcF9p bmZvKEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFpblN0YXRl ICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudChjb25zdCBjaGFy ICpxbGFiZWwsIGludCB3aGljaCwKQEAgLTE5NzQsNyArMTk3NCw3IEBAIEV4cGxhaW5Ob2RlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkK IAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIs IDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNf aW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBl cyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3NjYW5fcXVh bCgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5ODgsMTUgKzE5ODgs MTIgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywK IAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dz IFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJ CWlmIChlcy0+YW5hbHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBGZXRjaGVz IiwgTlVMTCwKLQkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBl cyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3df aW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1h cEluZGV4U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICopIHBsYW4p LT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2Vz dG9ycywgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJ CQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2Ug VF9CaXRtYXBIZWFwU2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNjYW4gKikg cGxhbiktPmJpdG1hcHF1YWxvcmlnLApAQCAtMzg2MCwxNSArMzg1NywxNiBAQCBzaG93X2hhc2hh Z2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAKIC8qCi0g KiBTaG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAqIFNob3cg aW5kZXggc2NhbiByZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQogICogSW5k ZXhTY2FuL0luZGV4T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3RhdGljIHZv aWQKLXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWlu U3RhdGUgKmVzKQorc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhw bGFpblN0YXRlICplcykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFuOwogCVNo YXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0JdWludDY0 CQluc2VhcmNoZXMgPSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQluaGVhcGZldGNo ZXMgPSAwOwogCiAJaWYgKCFlcy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAtMzg4OSw2ICszODg3 LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxh aW5TdGF0ZSAqZXMpCiAJCQkJSW5kZXhPbmx5U2NhblN0YXRlICppbmRleHN0YXRlID0gKChJbmRl eE9ubHlTY2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKIAogCQkJCW5zZWFyY2hlcyA9IGluZGV4c3Rh dGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQkJCW5oZWFwZmV0Y2hlcyA9IGluZGV4 c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCQkJCVNoYXJlZEluZm8gPSBp bmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zOTEyLDkg KzM5MTEsMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUs IEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKndpbnN0cnVt ZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2VhcmNoZXMgKz0gd2lu c3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW5oZWFwZmV0Y2hlcyArPSB3aW5zdHJ1bWVudC0+bmhl YXBmZXRjaGVzOwogCQl9CiAJfQogCisJaWYgKG5vZGVUYWcocGxhbikgPT0gVF9JbmRleE9ubHlT Y2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSGVhcCBGZXRjaGVzIiwgTlVMTCwgbmhl YXBmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSW5kZXggU2VhcmNo ZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpp bmRleCBiODljNjg1NTMuLmZiZmUzYjU0MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvaW5kZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAg LTg4NSw3ICs4ODUsNyBAQCBEZWZpbmVJbmRleChQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2Vz cyBtZXRob2QgXCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgbXVsdGljb2x1bW4gaW5kZXhlcyIsCiAJ CQkJCQlhY2Nlc3NNZXRob2ROYW1lKSkpOwotCWlmIChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5h bWdldHR1cGxlID09IE5VTEwpCisJaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVw bGUgPT0gTlVMTCAmJiBhbVJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJZXJlcG9ydChF UlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJ IGVycm1zZygiYWNjZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBleGNsdXNpb24g Y29uc3RyYWludHMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDM3ZmUwM2ZkYy4uOTc5YTg1 MmZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC00MjksNyArNDI5LDcgQEAgRXhlY1N1cHBv cnRzTWFya1Jlc3RvcmUoUGF0aCAqcGF0aG5vZGUpCiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgog CiAJCQkvKgotCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IG1hcmsvcmVzdG9yZS4K KwkJCSAqIE5vdCBhbGwgaW5kZXggdHlwZXMgc3VwcG9ydCByZXN0b3JpbmcgYSBtYXJrCiAJCQkg Ki8KIAkJCXJldHVybiBjYXN0Tm9kZShJbmRleFBhdGgsIHBhdGhub2RlKS0+aW5kZXhpbmZvLT5h bWNhbm1hcmtwb3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggOWQwNzFl NDk1Li4zZjBjODQ1M2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRl eGluZy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jCkBAIC04MTUs MTAgKzgxNSwxMiBAQCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRp b24gaGVhcCwgUmVsYXRpb24gaW5kZXgsCiByZXRyeToKIAljb25mbGljdCA9IGZhbHNlOwogCWZv dW5kX3NlbGYgPSBmYWxzZTsKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGlu ZGV4LCAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOworCWluZGV4X3NjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsIGZhbHNlLCAmRGlydHlTbmFwc2hvdCwgTlVM TCwKKwkJCQkJCQkJIGluZG5rZXlhdHRzLCAwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nhbiwg c2NhbmtleXMsIGluZG5rZXlhdHRzLCBOVUxMLCAwKTsKIAotCXdoaWxlIChpbmRleF9nZXRuZXh0 X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Nsb3QpKQor CXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sCisJCQkJCQkJCQlleGlzdGluZ19zbG90KSkKIAl7CiAJCVRyYW5zYWN0aW9uSWQg eHdhaXQ7CiAJCVhMVFdfT3BlcglyZWFzb25fd2FpdDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1Jl cGxpY2F0aW9uLmMKaW5kZXggMjQ5N2VlN2VkLi4yZjYzNmJhM2UgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCkBAIC0yMDUsNyArMjA1LDcgQEAgUmVsYXRpb25GaW5kUmVw bFR1cGxlQnlJbmRleChSZWxhdGlvbiByZWwsIE9pZCBpZHhvaWQsCiAJc2tleV9hdHRvZmYgPSBi dWlsZF9yZXBsaW5kZXhfc2Nhbl9rZXkoc2tleSwgcmVsLCBpZHhyZWwsIHNlYXJjaHNsb3QpOwog CiAJLyogU3RhcnQgYW4gaW5kZXggc2Nhbi4gKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJl bCwgaWR4cmVsLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4gPSBpbmRleF9i ZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCAmc25hcCwgTlVMTCwgc2tleV9hdHRvZmYsIDAp OwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMjEzLDcgKzIxMyw3IEBAIHJldHJ5Ogog CWluZGV4X3Jlc2NhbihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBU cnkgdG8gZmluZCB0aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4s IEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBvdXRzbG90KSkKIAl7CiAJCS8q CiAJCSAqIEF2b2lkIGV4cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJp bWFyeSBrZXkgb3IKQEAgLTY2NiwxMiArNjY2LDEyIEBAIFJlbGF0aW9uRmluZERlbGV0ZWRUdXBs ZUluZm9CeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAkgKiBub3QgeWV0IGNvbW1p dHRlZCBvciB0aG9zZSBqdXN0IGNvbW1pdHRlZCBwcmlvciB0byB0aGUgc2NhbiBhcmUKIAkgKiBl eGNsdWRlZCBpbiB1cGRhdGVfbW9zdF9yZWNlbnRfZGVsZXRpb25faW5mbygpLgogCSAqLwotCXNj YW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIFNuYXBzaG90QW55LCBOVUxMLCBza2V5 X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgZmFsc2Us IFNuYXBzaG90QW55LCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIAlpbmRleF9yZXNjYW4oc2Nh biwgc2tleSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1 cGxlICovCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwgc2NhbnNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKIAl7CiAJCS8qCiAJCSAqIEF2b2lkIGV4 cGVuc2l2ZSBlcXVhbGl0eSBjaGVjayBpZiB0aGUgaW5kZXggaXMgcHJpbWFyeSBrZXkgb3IKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYyBiL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYwppbmRleCA3MGM1NWVlNmQu Ljk2ODI0YjM3ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcElu ZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4u YwpAQCAtMjA0LDYgKzIwNCw3IEBAIEV4ZWNFbmRCaXRtYXBJbmRleFNjYW4oQml0bWFwSW5kZXhT Y2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBCaXRtYXBJbmRleFNj YW5TdGF0ZSBhbmQgemVyb2VkIHN0YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hl cyArPSBub2RlLT5iaXNzX0luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJQXNzZXJ0KG5vZGUtPmJp c3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzID09IDApOwogCX0KIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCA5ZWFiODFmZDEuLmFlYjRiYmMzZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0zNCw3ICszNCw2 IEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVh bS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2li aWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJleGVj dXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKQEAgLTQy LDcgKzQxLDYgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhzY2FuLmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRlICJz dG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvcmVsLmgiCiAKQEAgLTY2LDcgKzY0LDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9u bHlTY2FuU3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2Fu RGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlJdGVtUG9pbnRlciB0aWQ7 CiAKIAkvKgogCSAqIGV4dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2Nh biBub2RlCkBAIC05MSwxOCArODgsMTQgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3Rh dGUgKm5vZGUpCiAJCSAqIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdp bnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pb3Nz X1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUs CiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3Nf SW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJ ICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CiAKIAkJbm9kZS0+aW9zc19TY2FuRGVzYyA9 IHNjYW5kZXNjOwotCi0KLQkJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQkJ bm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQkJbm9kZS0+aW9zc19W TUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54 c193YW50X2l0dXApOwogCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3Vs YXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKQEAgLTExOSw3OCArMTEyLDExIEBA IEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJICogT0ssIG5v dyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8K LQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rpb24pKSAh PSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVj dGlvbiwKKwkJCQkJCQkJCW5vZGUtPmlvc3NfVGFibGVTbG90KSkKIAl7Ci0JCWJvb2wJCXR1cGxl X2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJLyoK LQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEg aGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8g ZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUg bm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4KLQkJICoKLQkJICogTm90ZSBv biBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMg bm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0 aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhv d2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0bwotCQkgKiBtYXR0ZXIuCi0JCSAqCi0J CSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQg cmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUgdHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5k ZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQotCQkgKiByZWFkaW5nIG9mIHRoZSBUSUQgYnkg dGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleAotCQkgKiBidWZmZXIp IGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXgK LQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBpbmRleCBidWZmZXIpLiBCZWNh dXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4 LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGluZGV4IHBhZ2UgYWN0cyBhcyBh IGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNlZSB0aGUKLQkJICogY2xlYXJl ZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgotCQkgKgotCQkgKiBEZWxl dGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIg b3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRl bGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMgdGVzdCBiZWxvdywgYW5kIHdl IG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmljYW50bHkgc3RhbGUuIEhvd2V2 ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdodAotCQkgKiBhd2F5LCBiZWNh dXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZSBkZWxldGluZwotCQkgKiB0 cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKLQkJ ICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZl ciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmll cikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJICogQW5kIGZvciB1cyB0byBoYXZlIGEgc25h cHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gKG1ha2lu ZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkCi0JCSAqIFByb2NB cnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCi0JCSAq Ci0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQg bmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBidWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNp Z25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5k ZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQp LAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewotCQkJLyoKLQkJCSAqIFJhdHMs IHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KLQkJCSAqLwot CQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAo c2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQljb250aW51ZTsJCS8qIG5vIHZp c2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0KLQkJCUV4ZWNDbGVhclR1cGxl KG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hv dHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8KLQkJCSAqIG5lZWQg dG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMK LQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkIG5l ZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJlciBub3QgdG8gY2FsbCBpbmRl eF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlmIChzY2FuZGVzYy0+eHNfaGVh cF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mgc25hcHNob3RzIGFyZSBub3Qg c3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJLyoKLQkJCSAqIE5vdGU6IGF0 IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwgYXMKLQkJ CSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19jYnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0 IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2hldGhlciBpdCdzIGEgd2luIHRv IGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1pZ2h0IHJlcXVpcmUgYSB2aXNp dCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJdHVwbGVfZnJvbV9oZWFwID0g dHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZpbGwgdGhlIHNjYW4gdHVwbGUgc2xvdCB3aXRoIGRh dGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJlCiAJCSAqIHByb3ZpZGVkIGluIGVpdGhl ciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3JtYXQuICBDb25jZWl2YWJseSBhbgpAQCAtMjM5 LDE2ICsxNjUsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJ CWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3Vw cG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8qCi0JCSAqIElmIHdlIGRpZG4n dCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0YWtlIGEgcHJlZGljYXRlCi0J CSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0 IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1cGxlX2Zyb21faGVhcCkKLQkJCVByZWRpY2F0 ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJICBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90KTsKLQogCQly ZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQwOCwxMyArMzI0LDYgQEAgRXhlY0VuZEluZGV4T25seVNj YW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCWluZGV4UmVsYXRpb25EZXNjID0gbm9kZS0+ aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5vZGUtPmlvc3NfU2NhbkRlc2M7 CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4sIGlmIGFueS4gKi8KLQlpZiAobm9kZS0+aW9z c19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihub2RlLT5p b3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0J fQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdvcmtlciwgY29weSB0aGUgc3Rh dGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3b3JrZXIgYmFjayBpbnRvIHNoYXJlZCBtZW1v cnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBtYWluCkBAIC00MzQsNiArMzQz LDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkg KiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3Rh dHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1 bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzICs9IG5vZGUtPmlv c3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCX0KIAogCS8qCkBAIC03OTAsMTMgKzcwMCwx MiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVEU00oSW5kZXhPbmx5U2NhblN0YXRlICpu b2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxl bChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0 aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJ CQkgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5 cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJCQkJCSBwaXNjYW4p OwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0Jbm9kZS0+aW9z c19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2Mt PnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3Vs YXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpAQCAtODU2LDEyICs3NjUs MTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4T25seVNjYW5TdGF0 ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFy YWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aW9zc19S ZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJ CQkJCQkJIG5vZGUtPmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2Nh bktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlz Y2FuKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2Vy dChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193YW50X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBy dW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5k IHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwppbmRleCAwNjE0M2U5NGMuLjEw ZDg1Y2ZkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j CisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYwpAQCAtMTA5LDcgKzEw OSw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhl Y3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJ ICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxh dGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9k ZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNo b3QsCiAJCQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5p c3NfTnVtU2NhbktleXMsCkBAIC0xMzAsNyArMTMwLDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0 YXRlICpub2RlKQogCS8qCiAJICogb2ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBm ZXRjaCB0aGUgbmV4dCB0dXBsZS4KIAkgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNj YW5kZXNjLCBkaXJlY3Rpb24sIHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCiAJewogCQlDSEVDS19GT1JfSU5URVJSVVBU UygpOwogCkBAIC0yMDUsNyArMjA1LDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2Fu U3RhdGUgKm5vZGUpCiAJCSAqIHNlcmlhbGx5IGV4ZWN1dGluZyBhbiBpbmRleCBzY2FuIHRoYXQg d2FzIHBsYW5uZWQgdG8gYmUgcGFyYWxsZWwuCiAJCSAqLwogCQlzY2FuZGVzYyA9IGluZGV4X2Jl Z2luc2Nhbihub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSAgIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSAgIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNl LAogCQkJCQkJCQkgICBlc3RhdGUtPmVzX3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pc3Nf SW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMjYyLDcg KzI2Miw3IEBAIEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkg KiBGZXRjaCBuZXh0IHR1cGxlIGZyb20gdGhlIGluZGV4LgogCQkgKi8KIG5leHRfaW5kZXh0dXBs ZToKLQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZvcndhcmRTY2FuRGlyZWN0 aW9uLCBzbG90KSkKKwkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIEZv cndhcmRTY2FuRGlyZWN0aW9uLCBzbG90KSkKIAkJewogCQkJLyoKIAkJCSAqIE5vIG1vcmUgdHVw bGVzIGZyb20gdGhlIGluZGV4LiAgQnV0IHdlIHN0aWxsIG5lZWQgdG8gZHJhaW4gYW55CkBAIC04 MTQsNiArODE0LDcgQEAgRXhlY0VuZEluZGV4U2NhbihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJ ICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEluZGV4T25seVNjYW5TdGF0ZSBhbmQgemVyb2VkIHN0 YXRzLgogCQkgKi8KIAkJd2luc3RydW1lbnQtPm5zZWFyY2hlcyArPSBub2RlLT5pc3NfSW5zdHJ1 bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9kZS0+aXNzX0luc3RydW1lbnQtPm5oZWFwZmV0 Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTcyNiw3ICsxNzI3LDcgQEAgRXhlY0luZGV4U2Nh bkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRl c2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0 aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlz c19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJ CQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtT3Jk ZXJCeUtleXMsCkBAIC0xNzkwLDcgKzE3OTEsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZVdv cmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWlu ZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJ CQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9u RGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5v ZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwppbmRleCBmODQyMWE3NGMuLmNiNGJlZjc2 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCisrKyBi L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZWpvaW4uYwpAQCAtNTQsOCArNTQsOCBAQAog ICoJCXRoZSBpbm5lciAiNSdzIi4gVGhpcyByZXF1aXJlcyByZXBvc2l0aW9uaW5nIHRoZSBpbm5l ciAiY3Vyc29yIgogICoJCXRvIHBvaW50IGF0IHRoZSBmaXJzdCBpbm5lciAiNSIuIFRoaXMgaXMg ZG9uZSBieSAibWFya2luZyIgdGhlCiAgKgkJZmlyc3QgaW5uZXIgNSBzbyB3ZSBjYW4gcmVzdG9y ZSB0aGUgImN1cnNvciIgdG8gaXQgYmVmb3JlIGpvaW5pbmcKLSAqCQl3aXRoIHRoZSBzZWNvbmQg b3V0ZXIgNS4gVGhlIGFjY2VzcyBtZXRob2QgaW50ZXJmYWNlIHByb3ZpZGVzCi0gKgkJcm91dGlu ZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1cGxlLgorICoJCXdpdGggdGhlIHNlY29uZCBv dXRlciA1LiBUaGUgaW5kZXhiYXRjaC5jIGludGVyZmFjZSBwcm92aWRlcworICoJCXJvdXRpbmVz IHRvIG1hcmsgYW5kIHJlc3RvcmUgdG8gYSB0dXBsZSBkdXJpbmcgaW5kZXggc2NhbnMuCiAgKgog ICoKICAqCQlFc3NlbnRpYWwgb3BlcmF0aW9uIG9mIHRoZSBtZXJnZSBqb2luIGFsZ29yaXRobSBp cyBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggNjdk OWRjMzVmLi5kNjFjMGI2ZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYwpA QCAtNDMsNyArNDMsNyBAQAogLyogV2hldGhlciB3ZSBhcmUgbG9va2luZyBmb3IgcGxhaW4gaW5k ZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVyICovCiB0eXBlZGVmIGVudW0KIHsKLQlTVF9J TkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlICovCisJU1RfSU5ERVhTQ0FO LAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSBvciBhbWdldGJhdGNoICovCiAJU1RfQklU TUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0Yml0bWFwICovCiAJU1RfQU5ZU0NBTiwJ CQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNjYW5UeXBlQ29udHJvbDsKQEAgLTc0Nyw3ICs3 NDcsNyBAQCBnZXRfaW5kZXhfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAl7CiAJCUluZGV4UGF0aCAgKmlwYXRoID0gKEluZGV4UGF0aCAqKSBsZmlyc3QobGMpOwog Ci0JCWlmIChpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJaWYgKGluZGV4LT5hbWhhc2dldGJhdGNo KQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CiAKIAkJaWYgKGluZGV4LT5hbWhh c2dldGJpdG1hcCAmJgpAQCAtODM1LDcgKzgzNSw3IEBAIGJ1aWxkX2luZGV4X3BhdGhzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJc3dpdGNoIChzY2FudHlwZSkKIAl7CiAJ CWNhc2UgU1RfSU5ERVhTQ0FOOgotCQkJaWYgKCFpbmRleC0+YW1oYXNnZXR0dXBsZSkKKwkJCWlm ICghaW5kZXgtPmFtaGFzZ2V0YmF0Y2gpCiAJCQkJcmV0dXJuIE5JTDsKIAkJCWJyZWFrOwogCQlj YXNlIFNUX0JJVE1BUFNDQU46CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXgg YjJmYmQ2YTA4Li42NjVkZGNhNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3BsYW5jYXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMK QEAgLTMxMCwxMSArMzEwLDExIEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290 LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJCQkJaW5mby0+YW1zZWFy Y2hhcnJheSA9IGFtcm91dGluZS0+YW1zZWFyY2hhcnJheTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51 bGxzID0gYW1yb3V0aW5lLT5hbXNlYXJjaG51bGxzOwogCQkJCWluZm8tPmFtY2FucGFyYWxsZWwg PSBhbXJvdXRpbmUtPmFtY2FucGFyYWxsZWw7Ci0JCQkJaW5mby0+YW1oYXNnZXR0dXBsZSA9IChh bXJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisJCQkJaW5mby0+YW1oYXNnZXRiYXRjaCA9 IChhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCB8fAorCQkJCQkJCQkJICAgYW1yb3V0aW5l LT5hbWdldHR1cGxlICE9IE5VTEwpOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gYW1yb3V0 aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJlbGF0aW9uLT5yZF90YWJsZWFtLT5z Y2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJaW5mby0+YW1jYW5tYXJrcG9zID0g KGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJCQkJCQkJCSAgYW1yb3V0aW5lLT5h bXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FubWFya3BvcyA9IGFtcm91dGluZS0+ YW1nZXRiYXRjaCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29zdGVzdGltYXRlID0gYW1yb3V0aW5l LT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+YW1jb3N0ZXN0aW1hdGUgIT0gTlVM TCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAq cm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCQkJCWluZm8tPmFt c2VhcmNoYXJyYXkgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbXNlYXJjaG51bGxzID0gZmFsc2U7CiAJ CQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwotCQkJCWluZm8tPmFtaGFzZ2V0dHVwbGUg PSBmYWxzZTsKKwkJCQlpbmZvLT5hbWhhc2dldGJhdGNoID0gZmFsc2U7CiAJCQkJaW5mby0+YW1o YXNnZXRiaXRtYXAgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSBmYWxzZTsKIAkJ CQlpbmZvLT5hbWNvc3Rlc3RpbWF0ZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3JlbGF0aW9uLmMKaW5kZXggMGIxZDgwYjViLi4wOTRlMWQ2OTYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0aW9uLmMKQEAgLTg4NywxMCArODg3LDEyIEBA IElzSW5kZXhVc2FibGVGb3JSZXBsaWNhSWRlbnRpdHlGdWxsKFJlbGF0aW9uIGlkeHJlbCwgQXR0 ck1hcCAqYXR0cm1hcCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJLyoKLQkgKiBUaGUgZ2l2ZW4gaW5k ZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIsIHdoaWNoIHdpbGwK LQkgKiBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUgUmVsYXRpb25GaW5k UmVwbFR1cGxlQnlJbmRleCgpLgorCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nlc3MgbWV0aG9kIG11 c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiBvcgorCSAqICJhbWdldGJhdGNoIiwgd2hpY2ggd2ls bCBiZSB1c2VkIGxhdGVyIHRvIGZldGNoIHRoZSB0dXBsZXMuICBTZWUKKwkgKiBSZWxhdGlvbkZp bmRSZXBsVHVwbGVCeUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlk KGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYg KEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5h bWdldHR1cGxlID09IE5VTEwgJiYKKwkJR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5y ZF9yZWwtPnJlbGFtLCBmYWxzZSktPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNl OwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11 dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCBjODFmYjYxYTAu LmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwor KysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsMTAgKzM2MywxMSBA QCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCVBHX1JFVFVS Tl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFNUFJPUF9JTkRFWF9T Q0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFs c2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAor CQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9Q X0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwID8g dHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCAh PSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJCQlQR19SRVRVUk5f Qk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMsOCBAQCBpbmRleGFt X3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JPT0wocm91 dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6Ci0JCQlQ R19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCVBH X1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJICAgcm91 dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fSU5DTFVERToK IAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9z ZWxmdW5jcy5jCmluZGV4IDg2YjU1YzliYi4uMWY4YjBlNjg0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYwpAQCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5oIgogI2lu Y2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCi0jaW5j bHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxh dGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX3N0YXRpc3RpYy5oIgpAQCAtNzEyMSwxMCArNzEyMCw2IEBAIGdldF9hY3R1YWxfdmFy aWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAlib29sCQloYXZlX2RhdGEgPSBmYWxz ZTsKIAlTbmFwc2hvdERhdGEgU25hcHNob3ROb25WYWN1dW1hYmxlOwogCUluZGV4U2NhbkRlc2Mg aW5kZXhfc2NhbjsKLQlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKLQlCbG9ja051 bWJlciBsYXN0X2hlYXBfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaW50CQkJbl92aXNp dGVkX2hlYXBfcGFnZXMgPSAwOwotCUl0ZW1Qb2ludGVyIHRpZDsKIAlEYXR1bQkJdmFsdWVzW0lO REVYX01BWF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwogCU1lbW9yeUNv bnRleHQgb2xkY29udGV4dDsKQEAgLTcxNzIsNjEgKzcxNjcsMjQgQEAgZ2V0X2FjdHVhbF92YXJp YWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCSAqIGEgaHVnZSBhbW91bnQgb2YgdGlt ZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIG9uY2Ugd2UndmUgcmVhZCB0b28gbWFueSBoZWFwCiAJICog cGFnZXMuICBXaGVuIHdlIGZhaWwgZm9yIHRoYXQgcmVhc29uLCB0aGUgY2FsbGVyIHdpbGwgZW5k IHVwIHVzaW5nCiAJICogd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUgaXMgcmVjb3JkZWQgaW4gcGdf c3RhdGlzdGljLgorCSAqCisJICogWFhYIFRoaXMgY2FuJ3Qgd29yayB3aXRoIHRoZSBuZXcgdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwKKwkgKiB3aGljaCBzaW1wbHkgd29uJ3Qg cmV0dXJuIGEgdHVwbGUgdGhhdCBpc24ndCB2aXNpYmxlIHRvIG91ciBzbmFwc2hvdC4KKwkgKiB0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qgd2lsbCBuZWVkIHNvbWUga2luZCBvZiBjYWxsYmFjayB0 aGF0IHByb3ZpZGVzCisJICogYSB3YXkgZm9yIHRoZSBzY2FuIHRvIGdpdmUgdXAgd2hlbiB0aGUg Y29zdHMgc3RhcnQgdG8gZ2V0IG91dCBvZiBoYW5kLgogCSAqLwogCUluaXROb25WYWN1dW1hYmxl U25hcHNob3QoU25hcHNob3ROb25WYWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZv cihoZWFwUmVsKSk7CiAKLQlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGlu ZGV4UmVsLAorCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWws IHRydWUsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkg MSwgMCk7Ci0JLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRleF9zY2Fu LT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXAp OwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkv KiBGZXRjaCBmaXJzdC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGls ZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9 IE5VTEwpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRl eHNjYW5kaXIsIHRhYmxlc2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2lu dGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKLQotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhlYXBSZWws Ci0JCQkJCQkJYmxvY2ssCi0JCQkJCQkJJnZtYnVmZmVyKSkKLQkJewotCQkJLyogUmF0cywgd2Ug aGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5ICovCi0JCQlpZiAoIWlu ZGV4X2ZldGNoX2hlYXAoaW5kZXhfc2NhbiwgdGFibGVzbG90KSkKLQkJCXsKLQkJCQkvKgotCQkJ CSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5lZWQgdG8K LQkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3Vu dCBoZWFwCi0JCQkJICogcGFnZSBmZXRjaGVzIGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRvbmUgdG9v IG1hbnkuCi0JCQkJICoKLQkJCQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNoIGlmIHRo aXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0JCQkJICogYXMgdGhlIHByZXZpb3VzIHR1cGxlLiAg VGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUsCi0JCQkJICogc2luY2Ugb3RoZXIgcmVj ZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0aWxsIGluCi0JCQkJICogYnVmZmVy cyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciB0aGlzIGhldXJpc3RpYy4KLQkJCQkgKi8K LSNkZWZpbmUgVklTSVRFRF9QQUdFU19MSU1JVCAxMDAKLQotCQkJCWlmIChibG9jayAhPSBsYXN0 X2hlYXBfYmxvY2spCi0JCQkJewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsKLQkJCQkJ bl92aXNpdGVkX2hlYXBfcGFnZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3BhZ2VzID4g VklTSVRFRF9QQUdFU19MSU1JVCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNvbnRpbnVl OwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJCX0KLQot CQkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55dGhpbmcg Ki8KLQkJCUV4ZWNDbGVhclR1cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSBkb24n dCBjYXJlIHdoZXRoZXIgdGhlcmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUgaW4KLQkJ CSAqIHRoZSBIT1QgY2hhaW47IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2QgZW5vdWdo LgotCQkJICovCi0JCX0KLQogCQkvKgogCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5kZXggd2ls bCByZXR1cm4gZGF0YSBpbiBJbmRleFR1cGxlIG5vdAogCQkgKiBIZWFwVHVwbGUgZm9ybWF0LgpA QCAtNzI1OCw4ICs3MjE2LDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlv biBoZWFwUmVsLAogCQlicmVhazsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZl cikKLQkJUmVsZWFzZUJ1ZmZlcih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9zY2Fu KTsKIAogCXJldHVybiBoYXZlX2RhdGE7CmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdmVy aWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwppbmRleCBiNzRh YjVmN2EuLjA2NTUzNjA5YiAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRy ZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCkBAIC0zOTMsNyArMzkz LDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVsYXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVs LCBib29sIGhlYXBrZXlzcGFjZSwKIAkJCSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsK IAogCS8qCi0JICogVGhpcyBhc3NlcnRpb24gbWF0Y2hlcyB0aGUgb25lIGluIGluZGV4X2dldG5l eHRfdGlkKCkuICBTZWUgcGFnZQorCSAqIFRoaXMgYXNzZXJ0aW9uIG1hdGNoZXMgdGhlIG9uZSBp biBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCgpLiAgU2VlIHBhZ2UKIAkgKiByZWN5Y2xpbmcvInZpc2li bGUgdG8gZXZlcnlvbmUiIG5vdGVzIGluIG5idHJlZSBSRUFETUUuCiAJICovCiAJQXNzZXJ0KFRy YW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4pKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxv b20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5kZXggNTExMWNkYzZkLi40 NzZiNjRlOGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRy aWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDYsMTAgKzE0NiwxMiBAQCBibGhhbmRsZXIoUEdfRlVO Q1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9 IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwK KwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAog CQkuYW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJsZW5kc2NhbiwK LQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVz ZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dt bAppbmRleCBmNDhkYTMxODUuLmVhZDBiYjc2YiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2lu ZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCkBAIC0xNjcsMTAgKzE2 NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1 bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAg IGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisg ICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAg IGFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1raWxsaXRlbXNiYXRjaDsJLyogY2FuIGJlIE5V TEwgKi8KKyAgICBhbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbiBhbXVuZ3VhcmRiYXRjaDsgLyogY2Fu IGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBj YW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1t YXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBh bXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAg IGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAg IC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAq LwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTY3Niw4ICs2NzgsMzggQEAgYW1iZWdpbnNj YW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAgICA8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+ IGNyZWF0ZSB0aGlzIHN0cnVjdCBieSBjYWxsaW5nCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25HZXRJ bmRleFNjYW4oKTwvZnVuY3Rpb24+LiAgSW4gbW9zdCBjYXNlcwogICAgPGZ1bmN0aW9uPmFtYmVn aW5zY2FuPC9mdW5jdGlvbj4gZG9lcyBsaXR0bGUgYmV5b25kIG1ha2luZyB0aGF0IGNhbGwgYW5k IHBlcmhhcHMKLSAgIGFjcXVpcmluZyBsb2NrczsKKyAgIGFjcXVpcmluZyBsb2NrcyBhbmQgaW5p dGlhbGl6aW5nIHN0YW5kYXJkIDxzdHJ1Y3RuYW1lPkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+ IGZpZWxkczsKICAgIHRoZSBpbnRlcmVzdGluZyBwYXJ0cyBvZiBpbmRleC1zY2FuIHN0YXJ0dXAg YXJlIGluIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+LgorICAgSW5kZXggYWNjZXNzIG1l dGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJm YWNlCisgICBtdXN0IGFsc28gc2V0IHRoZSBmb2xsb3dpbmcgZmllbGRzIGluIHRoZSBzY2FuIGRl c2NyaXB0b3I6CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+ CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDttYXhpdGVtc2JhdGNoPC9saXRlcmFsPjogdGhlIG1h eGltdW0gbnVtYmVyIG9mIGl0ZW1zCisgICAgICB0aGF0IGNhbiBhcHBlYXIgaW4gYSBzaW5nbGUg YmF0Y2ggKHR5cGljYWxseSBkZXJpdmVkIGZyb20gdGhlIGluZGV4IHBhZ2UKKyAgICAgIHNpemUs IGUuZy4sIDxsaXRlcmFsPk1heEluZGV4VHVwbGVzUGVyUGFnZTwvbGl0ZXJhbD4pLgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemU8L2xpdGVyYWw+OiB0 aGUKKyAgICAgIDxmdW5jdGlvbj5NQVhBTElHTjwvZnVuY3Rpb24+J2Qgc2l6ZSBvZiB0aGUgaW5k ZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVlCisgICAgICBhcmVhLiAgRWFjaCBiYXRjaCBhbGxvY2F0 aW9uIHJlc2VydmVzIHRoaXMgbXVjaCBzcGFjZSBpbW1lZGlhdGVseSBiZWZvcmUKKyAgICAgIHRo ZSA8c3RydWN0bmFtZT5JbmRleFNjYW5CYXRjaERhdGE8L3N0cnVjdG5hbWU+IHBvaW50ZXIsIGZv ciB1c2UgYnkgdGhlCisgICAgICBpbmRleCBBTSB0byBzdG9yZSBwZXItcGFnZSBuYXZpZ2F0aW9u IHN0YXRlIChlLmcuLCBiYXRjaCBpbmRleCBwYWdlJ3MKKyAgICAgIGJ1ZmZlciBwaW4gYW5kIHNp YmxpbmcgcGFnZSBsaW5rcykuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxs aXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBs ZXNfd29ya3NwYWNlPC9saXRlcmFsPjogdGhlIHNpemUgaW4gYnl0ZXMKKyAgICAgIG9mIHRoZSBw ZXItYmF0Y2ggdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UgdXNlZCBmb3IgaW5kZXgtb25seSBzY2Fu cworICAgICAgKHR5cGljYWxseSA8bGl0ZXJhbD5CTENLU1o8L2xpdGVyYWw+KSwgb3IgMCBpZiB0 aGUgaW5kZXggQU0gZG9lcyBub3QKKyAgICAgIHN1cHBvcnQgaW5kZXgtb25seSBzY2Fucy4gIFRo ZSB3b3Jrc3BhY2UgaXMgYWNjZXNzaWJsZSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0m Z3Q7Y3VyclR1cGxlczwvc3RydWN0ZmllbGQ+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRl bT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC03NDksNiAr NzgxLDIzNiBAQCBhbWdldHR1cGxlIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8c3RydWN0Zmll bGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRl eEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgog ICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+CisgICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBv c3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9uIDE5LCBwb3NpdGlvbiBtYXJraW5nCisgICAg YW5kIHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgZm9yIHRoZQor ICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW50ZXJmYWNlOyBvbmx5IHRoZQor ICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIHN1cHBvcnRzIHRo aXMgZmVhdHVyZS4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorPHByb2dyYW1s aXN0aW5nPgorSW5kZXhTY2FuQmF0Y2gKK2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwK KyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisgICAgICAgICAgICBTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmV0dXJuIHRoZSBu ZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5nIGluIHRo ZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGluIHRoZSBpbmRleCku ICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8dHlwZT5JbmRleFNjYW5CYXRjaDwvdHlwZT4g d2l0aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4g aWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVwbGVzIGluIHRoZSBnaXZlbgorICAgc2NhbiBk aXJlY3Rpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bworICAgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50 cmllcyBpbiBiYXRjaGVzCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJu aW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYQorICAgc2luZ2xlIGluZGV4IHBh Z2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFi bGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgIDwvcGFy YT4KKworICA8cGFyYT4KKyAgIFRoZSB0YWJsZSBBTSBwYXNzZXMgPGxpdGVyYWw+cHJpb3JiYXRj aDwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hlcmUgdGhlCisgICBpbmRleCBBTSBzaG91bGQgY29u dGludWUgc2Nhbm5pbmcgZnJvbSAob3IgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gb24gdGhlCisg ICBmaXJzdCBjYWxsIGZvciB0aGUgc2NhbikuICBUaGUgaW5kZXggQU0gdXNlcyBpbmZvcm1hdGlv biBmcm9tCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiB0byBkZXRlcm1pbmUgd2hp Y2ggaW5kZXggcGFnZSB0byByZWFkIG5leHQuCisgICBVbmxpa2UgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiwgd2hlcmUgdGhlIGluZGV4IEFNIG1haW50YWlucyBpdHMKKyAgIG93biBz Y2FuIHBvc2l0aW9uLCB3aXRoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXQgaXMg dGhlIGNhbGxlcgorICAgdGhhdCBjb250cm9scyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHNjYW4gdGhy b3VnaCB0aGUgaW5kZXguICBUaGUgY2FsbGVyCisgICB3aWxsIHR5cGljYWxseSBwYXNzIHRoZSBt b3N0IHJlY2VudGx5IHJldHVybmVkIGJhdGNoLCBidXQgdGhpcyBpcyBub3QKKyAgIGd1YXJhbnRl ZWQgJm1kYXNoOyBmb3IgZXhhbXBsZSwgZHVyaW5nIG1hcmsvcmVzdG9yZSBhIHByZXZpb3VzbHkK KyAgIHJldHVybmVkIGJhdGNoIG1heSBiZSBwYXNzZWQgaW5zdGVhZC4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBieSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhbgorICAgaW5kZXggcGFnZSBjb250YWluaW5nIGF0 IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtL3R1cGxlLiAgQSBidWZmZXIKKyAgIHBpbiBjYW4gYmUg aGVsZCBvbnRvIGJ5IHRoZSB0YWJsZSBBTSBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25jdXJy ZW50IFRJRAorICAgcmVjeWNsaW5nIGJ5IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uICBUaGUg dGFibGUgQU0gZHJvcHMgdGhpcyBpbnRlcmxvY2sKKyAgIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPmFt dW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLgorICAgU2Vl IDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFpbHMgb24gYnVmZmVyIHBp biBtYW5hZ2VtZW50CisgICBkdXJpbmcgaW5kZXggc2NhbnMuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIEEgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHRoYXQgaXMgcmV0dXJuZWQgYnkK KyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaXMgbm8gbG9uZ2VyIG1hbmFnZWQg YnkgdGhlIGFjY2VzcyBtZXRob2QuCisgICBJdCBpcyB1cCB0byB0aGUgdGFibGUgQU0gY2FsbGVy IHRvIGRlY2lkZSB3aGVuIGl0IHNob3VsZCBiZSBmcmVlZCAodmlhCisgICA8ZnVuY3Rpb24+dGFi bGVhbV91dGlsX2ZyZWVfYmF0Y2g8L2Z1bmN0aW9uPikuICBOb3RlIGFsc28gdGhhdAorICAgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBuZXZlciBtb2RpZnkg dGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IHBhcmFtZXRlci4g IFRoZSBjb3JlCisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVu YW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICByZWZlcmVuY2UgZXhhbXBsZXMgb2Yg dGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLgorICA8L3BhcmE+ CisKKyAgPHBhcmE+CisgICBUaGUgc2FtZSBjYXZlYXRzIGRlc2NyaWJlZCBmb3IgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhcHBseSBoZXJlCisgICB0b286IGFuIGVudHJ5IGluIHRo ZSByZXR1cm5lZCBiYXRjaCBtZWFucyBvbmx5IHRoYXQgdGhlIGluZGV4IGNvbnRhaW5zCisgICBh biBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHNjYW4ga2V5cywgbm90IHRoYXQgdGhlIHR1cGxlIG5l Y2Vzc2FyaWx5IHN0aWxsCisgICBleGlzdHMgaW4gdGhlIGhlYXAgb3Igd2lsbCBwYXNzIHRoZSBj YWxsZXIncyBzbmFwc2hvdCB0ZXN0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBh Y2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3Qg c2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiB0byBpbmRpY2F0 ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKKyAgIHNjYW4ga2V5cyBpcyByZXF1aXJlZCwgaW4gdGhl IHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGRvZXMuIEhv d2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3JlY2hlY2s8L2xpdGVyYWw+IG11c3QgYmUgc2V0 IGNvbnNpc3RlbnRseQorICAgZm9yIGFuIGVudGlyZSBzY2FuIHJhdGhlciB0aGFuIHZhcnlpbmcg b24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMgYSBrZXkKKyAgIGRpZmZlcmVuY2UgZnJvbSA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCB3aGljaCBjYW4gc2V0CisgICA8bGl0ZXJh bD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBpbmRlcGVuZGVudGx5IGZvciBlYWNoIHR1 cGxlIGl0IHJldHVybnMuCisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHJlcXVpcmUgZ3Jh bnVsYXIgY29udHJvbCBvdmVyCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRl cmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgaW50 ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9w YXJhPgorCisgIDxwYXJhPgorICAgU2ltaWxhcmx5LCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9lcyBub3QgY3VycmVudGx5CisgICBzdXBwb3J0IGluZGV4 LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSBpbiB0aGUgZm9ybSBvZiBhCisgICA8c3RydWN0 bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBvaW50ZXIuICBJbmRleC1vbmx5IHNjYW5zIHdv cmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gcmVj b3JkcyBmcm9tIGluZGV4IHBhZ2VzIGludG8gYQorICAgbG9jYWwgYnVmZmVyIGFzc29jaWF0ZWQg d2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVyYWw+eHNfaXR1cGRlc2M8L2xpdGVyYWw+CisgICB3b3Jr cyBpbiB0aGUgc2FtZSB3YXkgYXMgYWxyZWFkeSBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4uCisgICBUaGUgaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IG5vdCBz ZXQgdGhlIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0dXA8L2xpdGVyYWw+CisgICBmaWVsZCBpdHNl bGYuCisgICBXaXRoIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBB TSBzZXRzCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19oaXR1cDwvbGl0ZXJhbD4gdG8gcG9pbnQg dG8gYSByZWNvbnN0cnVjdGVkCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+ IHdob3NlIGxpZmV0aW1lIGV4dGVuZHMgdW50aWwgdGhlIG5leHQKKyAgIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4gY2FsbCAmbWRhc2g7IG9ubHkgb25lIHR1cGxlIGlzIHZhbGlkIGF0 IGEKKyAgIHRpbWUuICBXaXRoIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIG11bHRp cGxlIGJhdGNoZXMgYXJlIGhlbGQgb3BlbgorICAgc2ltdWx0YW5lb3VzbHkgYW5kIGl0ZW1zIGFy ZSBjb25zdW1lZCBhc3luY2hyb25vdXNseSBieSB0aGUgdGFibGUgQU0sIHNvCisgICB0aGVyZSBp cyBubyBlcXVpdmFsZW50IHNpbmdsZS10dXBsZSBsaWZldGltZSBmb3IgcGVyLWl0ZW0KKyAgIDxz dHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gcG9pbnRlcnMuICBUaGUgYmF0Y2ggaW5m cmFzdHJ1Y3R1cmUKKyAgIHByb3ZpZGVzIHBlci1iYXRjaCBzdG9yYWdlIGZvciA8c3RydWN0bmFt ZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiBjb3BpZXMsCisgICBidXQgaGFzIG5vIGFuYWxvZ291 cyBtZWNoYW5pc20gZm9yIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFtZT4gZGF0YQor ICAgKHVzZWQgYnkgaW5kZXggQU1zIHN1Y2ggYXMgPGFjcm9ueW0+R2lTVDwvYWNyb255bT4gYW5k CisgICA8YWNyb255bT5TUC1HaVNUPC9hY3JvbnltPiBmb3IgcmVjb25zdHJ1Y3RlZCB0dXBsZXMg dGhhdCBtaWdodCBub3QgZml0IGluCisgICA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3Ru YW1lPiBmb3JtYXQpLiAgVGhpcyBsaW1pdGF0aW9uIGNvdWxkIGJlCisgICBhZGRyZXNzZWQgaW4g YSBmdXR1cmUgdmVyc2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0 IHByb3ZpZGUgZWl0aGVyIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIG9yIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGJ1dCBub3QgYm90aC4KKyAgPC9wYXJhPgor CisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rp b24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0 cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCisgICB0 aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmaWVsZCBpbiBpdHMKKyAgIDxzdHJ1 Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8g TlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAorYW1r aWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAorICAgICAgICAgICAgICAgICAgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENhbGxlZCBieSB0aGUg dGFibGUgQU0gd2hlbiBpdCBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZyBhIGJhdGNoIHRoYXQKKyAg IGNvbnRhaW5zIGRlYWQgaXRlbXMsIHRvIHNldCA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBi aXRzIGluIHRoZSBiYXRjaCdzCisgICBpbmRleCBwYWdlLiAgVGhlIGJhdGNoJ3MgaW5kZXggcGFn ZSB3aWxsIG5vdCBiZSBsb2NrZWQgYnkgdGhlIGNhbGxlcjsgdGhlCisgICBpbmRleCBBTSBtdXN0 IGFjcXVpcmUgYW5kIHJlbGVhc2UgaXRzIG93biBsb2NrIChhbmQgcGluKSBvbiB0aGUgaW5kZXgg cGFnZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hpbGUgaW1wbGVtZW50aW5nIDxmdW5j dGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4gaXMgb3B0aW9uYWwsCisgICBkb2luZyBz byBpcyByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2UsIGFzIGl0IGFsbG93cyBmdXR1cmUgc2Nh bnMgdG8gc2tpcAorICAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLiAgVGhlIGNvcmUgaW5kZXgg YWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseQorICAgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IChCLXRyZWUpIGltcGxlbWVudHMKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8 L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9k cworICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVy ZS4KKyAgIFRoZSB0YWJsZSBBTSBtYXkgY2FsbAorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9r aWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gdG8gbWFyayBkZWFkIGl0ZW1zIGFzCisgICB0aGUg c2NhbiBwcm9ncmVzc2VzLiAgSWYgdGhlIGJhdGNoIGNvbnRhaW5zIGFueSBzdWNoIGRlYWQgaXRl bXMsIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4g YXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFuZAorICAgZGVkdXBsaWNhdGVkIGJlZm9yZSA8 ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgd2l0aAorICAg aXRlbSBvZmZzZXRzIGFwcGVhcmluZyBpbiBhc2NlbmRpbmcgb3JkZXIgKHRoYXQgaXMsIGluIGlu ZGV4IHBhZ2Ugb3JkZXIsCisgICB3aGljaCBpcyBhbHNvIGJhdGNoIG9yZGVyKSBhbmQgbm8gb2Zm c2V0IGFwcGVhcmluZyBtb3JlIHRoYW4gb25jZS4gIEluZGV4CisgICBhY2Nlc3MgbWV0aG9kcyBj YW4gcmVseSBvbiB0aGlzIG9yZGVyaW5nIHdoZW4gcHJvY2Vzc2luZyBkZWFkIGl0ZW1zOiB0aGUK KyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0cnVjdGZpZWxkPiBhcnJheSBjYW4gYmUgd2Fs a2VkIGluIGxvY2tzdGVwIHdpdGgKKyAgIHRoZSBpbmRleCBwYWdlJ3MgaXRlbSBwb2ludGVycywg c2luY2UgYm90aCBhcmUgaW4gYXNjZW5kaW5nIG9mZnNldCBvcmRlci4KKyAgIFRoaXMgYWxzbyBt ZWFucyB0aGUgdGFibGUgQU0gbmVlZCBub3QgY2FsbAorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRp bF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gaW4gYW55IHBhcnRpY3VsYXIgb3JkZXIuCisg ICAoSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiByZWx5IG9uIHRoZQorICAgPHN0cnVjdGZpZWxkPmtpbGxfcHJpb3JfdHVwbGU8L3N0cnVj dGZpZWxkPiBtZWNoYW5pc20gaW5zdGVhZCB0byBtYXJrIGRlYWQKKyAgIHR1cGxlczsgdGhlIDxm aWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlv bgorICAgcHJvdmlkZXMgYSByZWZlcmVuY2UgZXhhbXBsZS4pCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFdoZW4gaW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5j dGlvbj4sIHRoZSBpbmRleCBBTQorICAgc2hvdWxkIHZlcmlmeSB0aGF0IHRoZSBpbmRleCBwYWdl IGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgYmF0Y2ggd2FzCisgICBvcmlnaW5hbGx5 IHJlYWQuICBUaGUgYmF0Y2gncyA8c3RydWN0ZmllbGQ+bHNuPC9zdHJ1Y3RmaWVsZD4gZmllbGQg cmVjb3JkcworICAgdGhlIHBhZ2UgTFNOIGF0IHRoZSB0aW1lIHRoZSBpbmRleCBwYWdlIGxvY2sg d2FzIHJlbGVhc2VkIGJ5CisgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jazwv ZnVuY3Rpb24+IChzZXQgYXV0b21hdGljYWxseSBieSB0aGUKKyAgIGNvcmUgY29kZSwgdGhvdWdo IGluZGV4IEFNcyBhcmUgbm90IHN0cmljdGx5IHJlcXVpcmVkIHRvIHVzZQorICAgPGZ1bmN0aW9u PmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPikuICBUaGUgaW5kZXggQU0gc2hv dWxkCisgICByZS1yZWFkIHRoZSBwYWdlLCBjb21wYXJlIHRoZSBjdXJyZW50IHBhZ2UgTFNOIGFn YWluc3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7bHNuPC9zdHJ1Y3RmaWVsZD4sIGFuZCBn aXZlIHVwIG9uIHNldHRpbmcKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaWYg dGhlIExTTiBoYXMgYWR2YW5jZWQuICBBbiBhZHZhbmNlZCBMU04KKyAgIGluZGljYXRlcyB0aGF0 IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7IHBvc3NpYmx5IGJ5CisgICA8Y29tbWFuZD5W QUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyBoZWFwIFRJRHMgJm1kYXNoOyBzbyBpdCB3b3VsZCBi ZSB1bnNhZmUKKyAgIHRvIGFzc3VtZSB0aGF0IGluZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8g dGhlIHNhbWUgaGVhcCB0dXBsZXMuICBTaW5jZQorICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJh bD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXphdGlvbiBoaW50LCBpdCBpcworICAgYWx3YXlz IHNhZmUgdG8gc2tpcCBpdC4gIE5vdGUgdGhhdCB0aGlzIExTTiBjb21wYXJpc29uIHRlY2huaXF1 ZSByZXF1aXJlcworICAgdGhlIGluZGV4IEFNIHRvIHVzZSBmYWtlIChtb25vdG9uaWNhbGx5IGlu Y3JlYXNpbmcpIExTTnMgb24gaXRzIHBhZ2VzIGZvcgorICAgcmVsYXRpb25zIHdoZXJlIFdBTCBp cyBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExTTnMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAg IHRoYXQgY2FzZS4gIEFuIGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNO cyBjYW4gc3RpbGwgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0 aW9uPiwgYnV0IHNob3VsZCBzaW1wbHkgZG8gbm90aGluZyB3aGVuCisgICB0aGUgcmVsYXRpb24g ZG9lcyBub3QgZ2VuZXJhdGUgV0FMIChpLmUuLCB3aGVuCisgICA8ZnVuY3Rpb24+UmVsYXRpb25O ZWVkc1dBTCgpPC9mdW5jdGlvbj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24K KyAgIHdvdWxkIGJlIHVucmVsaWFibGUuICBTZWUgdGhlIEItdHJlZSBpbmRleCBpbXBsZW1lbnRh dGlvbiBmb3IgYSByZWZlcmVuY2UKKyAgIGV4YW1wbGUgb2YgdGhpcyB0ZWNobmlxdWUuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVu Y3Rpb24+IGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAgSW5kZXgKKyAgIGFjY2VzcyBtZXRob2RzIHRo YXQgd2FudCB0byBtYXJrIGRlYWQgaW5kZXggdHVwbGVzIHdpdGgKKyAgIDxsaXRlcmFsPkxQX0RF QUQ8L2xpdGVyYWw+IGJpdHMgc2hvdWxkIHByb3ZpZGUgaXQ7IHRob3NlIHRoYXQgZG9uJ3QgY2Fu CisgICBsZWF2ZSBpdCBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gZXZlbiB3aGVuIHRo ZXkgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgordm9pZAorYW11bmd1YXJkYmF0Y2ggKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVkIGJ5IHRoZSB0YWJsZSBBTSAodmlhCisgICA8 ZnVuY3Rpb24+dGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2g8L2Z1bmN0aW9uPikgd2hlbiBpdCBp cyBzYWZlIHRvIGRyb3AKKyAgIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayB0aGF0IHRoZSBp bmRleCBBTSBob2xkcyBvbiB0aGUgYmF0Y2gncyBpbmRleAorICAgbGVhZiBwYWdlLCB3aGljaCBw cmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwv Y29tbWFuZD4uCisgICBGb3JtYWxseSwgYW4gaW5kZXggQU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQg a2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxlCisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVy LWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgdGhlIGJ1aWx0LWluCisgICBpbmRl eCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNo OyBCLXRyZWUKKyAgICZtZGFzaDsgaG9sZHMgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJl ZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CisgICBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGlu IG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlvbgorICAgbXVzdCBi ZSBpZGVtcG90ZW50OiBpdCBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGZvciB0aGUgc2Ft ZSBiYXRjaCwgYW5kCisgICBtdXN0IGRvIG5vdGhpbmcgaWYgdGhlIGludGVybG9jayBoYXMgYWxy ZWFkeSBiZWVuIGRyb3BwZWQuICBJbXBsZW1lbnRhdGlvbnMKKyAgIHRoYXQgdXNlIGEgYnVmZmVy IHBpbiBzaG91bGQgY2hlY2sgd2hldGhlciB0aGUgYnVmZmVyIGlzIHN0aWxsIHZhbGlkIGJlZm9y ZQorICAgcmVsZWFzaW5nIGl0LCBhbmQgc2V0IGl0IHRvIDxsaXRlcmFsPkludmFsaWRCdWZmZXI8 L2xpdGVyYWw+IGFmdGVyd2FyZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGluZGV4 IEFNIG1heSBjaG9vc2UgdG8gcmV0YWluIGl0cyBvd24gYnVmZmVyIHBpbnMgd2hlbiB0aGlzIHNl cnZlcyBhbgorICAgaW50ZXJuYWwgcHVycG9zZSAoZm9yIGV4YW1wbGUsIG1haW50YWluaW5nIGEg ZGVzY2VudCBzdGFjayBvZiBwaW5uZWQgaW5kZXgKKyAgIHBhZ2VzIGZvciByZXVzZSBhY3Jvc3Mg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscykuICBIb3dldmVyLAorICAgYW55 IHNjaGVtZSB0aGF0IHJldGFpbnMgYnVmZmVyIHBpbnMgbWFuYWdlZCBieSB0aGUgaW5kZXggQU0g bXVzdCBiZSBzdXJlIHRvCisgICBmcmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAo Zm9yIGV4YW1wbGUgd2hlbiA8ZnVuY3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPgorICAgYW5kL29y IDxmdW5jdGlvbj5hbWVuZHNjYW48L2Z1bmN0aW9uPiBhcmUgY2FsbGVkKS4gIEl0IG11c3QgYWxz byBrZWVwIHRoZQorICAgbnVtYmVyIG9mIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLCB0 byBhdm9pZCBleGhhdXN0aW5nIHRoZSBiYWNrZW5kJ3MKKyAgIGJ1ZmZlciBwaW4gbGltaXQuCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1 bmN0aW9uPiBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYW55IGluZGV4CisgICBhY2Nlc3MgbWV0 aG9kIHRoYXQgcHJvdmlkZXMgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9w YXJhPgogCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgpAQCAtNzY4LDggKzEwMzAsOCBAQCBh bWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgaXRzZWxmLCBhbmQgdGhlcmVmb3Jl IGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBzY2FuIGNvbmRpdGlvbnMgYW5kIHRoZQogICAgcGFy dGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFueSkgZm9yIHJlY2hlY2thYmxlIHR1cGxlcy4gIFRo YXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUgdHJ1ZSwgaG93ZXZlci4KLSAgIDxmdW5jdGlvbj5h bWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAotICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBpbmRleCBzY2FuOyB0aGVyZQorICAgT25s eSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBpbmRleCBzY2FuOyB0aGVyZQogICAgYXJlIG90aGVy IHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0 aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZyIv Pi4KICAgPC9wYXJhPgpAQCAtNzgxLDYgKzEwNDMsMjkgQEAgYW1nZXRiaXRtYXAgKEluZGV4U2Nh bkRlc2Mgc2NhbiwKICAgIHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CiAK KyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSB0aGUgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UKKyAgIHdpbGwgZ2VuZXJhbGx5IGFsc28g d2FudCB0byB1c2UgdGhlIGJhdGNoIGFsbG9jYXRpb24gaW5mcmFzdHJ1Y3R1cmUKKyAgICg8ZnVu Y3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jPC9mdW5jdGlvbj4gYW5kCisgICA8ZnVuY3Rp b24+aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9uPikgd2l0aGluIHRoZWlyCisg ICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBpbXBsZW1lbnRhdGlvbi4gIFRoZSBj b252ZW50aW9uIGlzIHRoYXQgb25seQorICAgb25lIGJhdGNoIGlzIGFsbG9jYXRlZCBhdCBhIHRp bWUgZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LAorICAgdW5saWtlIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gd2hlcmUgc2V2ZXJhbCBiYXRjaGVzIG1heSBi ZQorICAgb3V0c3RhbmRpbmcgaW4gdGhlIGJhdGNoIHJpbmcgYnVmZmVyIGNvbmN1cnJlbnRseS4g IFRvIG1haW50YWluIHRoaXMKKyAgIG9uZS1iYXRjaC1hdC1hLXRpbWUgaW52YXJpYW50LCB0aGUg aW5kZXggQU0gaXRzZWxmIHJlbGVhc2VzIGl0cyBwcmlvciBiYXRjaAorICAgdmlhIDxmdW5jdGlv bj5pbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZTwvZnVuY3Rpb24+IGp1c3QgYXMgdGhlIHNjYW4g bGVhdmVzCisgICB0aGF0IGJhdGNoJ3MgaW5kZXggcGFnZSBhbmQgaXMgYWJvdXQgdG8gZ2VuZXJh dGUgdGhlIG5leHQgYmF0Y2ggJm1kYXNoOyB0aGUKKyAgIHNhbWUgcG9pbnQgd2hlcmUgaXQgZXh0 cmFjdHMgbmF2aWdhdGlvbiBzdGF0ZSAoc3VjaCBhcyBzaWJsaW5nLXBhZ2UgbGlua3MpCisgICBm cm9tIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LiAgVGhpcyBlYXJseSByZWxlYXNlIGlz IHNwZWNpZmljIHRvCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2Fuczsg ZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgIHNjYW5zIHRoZSA8bGl0 ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPiBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgdGFibGUg QU0KKyAgIGFuZCBjb3JlIGNvZGUsIGFuZCB0aGUgaW5kZXggQU0gbXVzdCBuZXZlciByZWxlYXNl IGl0LiAgU2VlCisgICA8ZnVuY3Rpb24+X2J0X25leHQ8L2Z1bmN0aW9uPiBmb3IgYQorICAgcmVm ZXJlbmNlIGV4YW1wbGUuICBUaGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkg YW5kIHJldXNlZCBieQorICAgdGhlIG5leHQgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9h bGxvYzwvZnVuY3Rpb24+IGNhbGwsIGF2b2lkaW5nCisgICByZXBlYXRlZCBtZW1vcnkgYWxsb2Nh dGlvbiBkdXJpbmcgdGhlIGJpdG1hcCBzY2FuLgorICA8L3BhcmE+CisKICAgPHBhcmE+CiA8cHJv Z3JhbWxpc3Rpbmc+CiB2b2lkCkBAIC03OTUsMzIgKzEwODAsNDQgQEAgYW1lbmRzY2FuIChJbmRl eFNjYW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKLWFtbWFy a3BvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVzZXQgKEluZGV4U2NhbkRlc2Mgc2Nh biwKKyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+ Ci0gICBNYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlvbi4gIFRoZSBhY2Nlc3MgbWV0aG9kIG5lZWQg b25seSBzdXBwb3J0IG9uZQotICAgcmVtZW1iZXJlZCBzY2FuIHBvc2l0aW9uIHBlciBzY2FuLgor ICAgTm90aWZ5IHRoZSBpbmRleCBBTSB0aGF0IHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0byBjaGFu Z2UgdGhlIHNjYW4ncworICAgbG9naWNhbCBwb3NpdGlvbiBpbiBhIHdheSB0aGF0IHJlcXVpcmVz IHRoZSBpbmRleCBBTSB0byByZXNldCBhbnkgc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRseSB0 cmFja3MgdGhlIHNjYW4ncyBwcm9ncmVzcy4gIEZvciBleGFtcGxlLCBCLXRyZWUgbXVzdAorICAg cmVzZXQgdGhlIGFycmF5IGtleXMgdXNlZCBieSA8bGl0ZXJhbD5TY2FsYXJBcnJheU9wRXhwcjwv bGl0ZXJhbD4gcXVhbAorICAgZXZhbHVhdGlvbiB3aGVuIHRoZSBzY2FuIHBvc2l0aW9uIGNoYW5n ZXMuICBUaGlzIGNhbGxiYWNrIGlzIGludm9rZWQgd2hlbgorICAgdGhlIHRhYmxlIEFNIGlzIGFi b3V0IHRvIHByb2Nlc3MgYSBiYXRjaCBpbiBhIGRpZmZlcmVudCBkaXJlY3Rpb24gdGhhbgorICAg d2FzIHVzZWQgd2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQgYnkKKyAgIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuZCBhbHNvIHdoZW4gYSBtYXJrZWQgc2Nh biBwb3NpdGlvbiBpcworICAgYWJvdXQgdG8gYmUgcmVzdG9yZWQuCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVl ZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRl cmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9z PC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9z dHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIFdoZW4gPGZ1bmN0 aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgZHVlIHRvIGEgY3Jvc3MtYmF0Y2gK KyAgIGRpcmVjdGlvbiBjaGFuZ2UsIHRoZSBjb3JlIHN5c3RlbSB3aWxsIGhhdmUgYWxyZWFkeSBm bGlwcGVkIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1Y3RmaWVsZD4gZmll bGQgdG8gcmVmbGVjdCB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uCisgICBiZWZvcmUgbWFraW5nIHRo ZSBjYWxsLiAgVGhlIGluZGV4IEFNIHNob3VsZCB1c2UgdGhpcyB1cGRhdGVkIGRpcmVjdGlvbgor ICAgd2hlbiByZXNldHRpbmcgYW55IHN0YXRlIHRoYXQgZGVwZW5kcyBvbiBrbm93aW5nIHdoaWNo IHdheSB0aGUgc2NhbiBpcworICAgcHJvY2VlZGluZy4gIFdoZW4gY2FsbGVkIHRvIHJlc3RvcmUg YSBtYXJrZWQgcG9zaXRpb24sIHRoZSBiYXRjaCdzCisgICA8c3RydWN0ZmllbGQ+ZGlyPC9zdHJ1 Y3RmaWVsZD4gaXMgbm90IG1vZGlmaWVkOyBpdCByZXRhaW5zIHRoZSBkaXJlY3Rpb24KKyAgIGZy b20gd2hlbiB0aGUgYmF0Y2ggd2FzIG9yaWdpbmFsbHkgcmV0dXJuZWQuICBJbiBib3RoIGNhc2Vz LCB0aGUgYmF0Y2gKKyAgIHBhc3NlZCB0byA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+ IGlzIHRoZSBiYXRjaCB0aGF0IHdpbGwgYmUgdXNlZAorICAgdG8gY29udGludWUgdGhlIHNjYW4u CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLTxwcm9ncmFtbGlzdGluZz4KLXZvaWQKLWFtcmVzdHJw b3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci08L3Byb2dyYW1saXN0aW5nPgotICAgUmVzdG9yZSB0 aGUgc2NhbiB0byB0aGUgbW9zdCByZWNlbnRseSBtYXJrZWQgcG9zaXRpb24uCi0gIDwvcGFyYT4K LQotICA8cGFyYT4KLSAgIFRoZSA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+IGZ1bmN0 aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9y dHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFt cmVzdHJwb3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJv dXRpbmU8L3N0cnVjdG5hbWU+Ci0gICBzdHJ1Y3QgbWF5IGJlIHNldCB0byBOVUxMLgorICAgSW5k ZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBoYXZlIHByaXZhdGUgc3RhdGUgd2hpY2ggbXVzdCBiZSBy ZXNldCB3aGVuIHRoZQorICAgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzIG11c3QgcHJvdmlkZSBhbiA8 ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpbXBsZW1lbnRhdGlvbi4gIEluZGV4 IEFNcyB3aXRoIG5vIHN1Y2ggc3RhdGUgbWF5IHNldAorICAgPHN0cnVjdGZpZWxkPmFtcG9zcmVz ZXQ8L3N0cnVjdGZpZWxkPiB0byBOVUxMLgorICAgVGhlIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9m dW5jdGlvbj4gZnVuY3Rpb24gY2FuIG9ubHkgYmUgcHJvdmlkZWQgd2hlbiB0aGUKKyAgIGFjY2Vz cyBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+CisgICBpbnRlcmZhY2UuICAoTm90ZSB0aGF0IHdoZW4gPHN0cnVj dGZpZWxkPmFtY2FuYmFja3dhcmQ8L3N0cnVjdGZpZWxkPiBpcworICAgZmFsc2UsIHRoZSBzY2Fu IGRpcmVjdGlvbiBjYW5ub3QgY2hhbmdlLCBzbworICAgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1 bmN0aW9uPiB3aWxsIG9ubHkgYmUgY2FsbGVkIGR1ZSB0byBtYXJrL3Jlc3RvcmUKKyAgIGluIHRo YXQgY2FzZS4pCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTk3NSw2ICsxMjcyLDggQEAgYW10 cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBv cGNpbnR5cGUpOwogICAgICAgIEFjY2VzcyBtZXRob2RzIHRoYXQgYWx3YXlzIHJldHVybiBlbnRy aWVzIGluIHRoZSBuYXR1cmFsIG9yZGVyaW5nCiAgICAgICAgb2YgdGhlaXIgZGF0YSAoc3VjaCBh cyBidHJlZSkgc2hvdWxkIHNldAogICAgICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1 Y3RmaWVsZD4gdG8gdHJ1ZS4KKyAgICAgICBCb3RoIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAgICAgICBzY2FucyBz dXBwb3J0IHRoaXMgY2FwYWJpbGl0eS4KICAgICAgICBDdXJyZW50bHksIHN1Y2ggYWNjZXNzIG1l dGhvZHMgbXVzdCB1c2UgYnRyZWUtY29tcGF0aWJsZSBzdHJhdGVneQogICAgICAgIG51bWJlcnMg Zm9yIHRoZWlyIGVxdWFsaXR5IGFuZCBvcmRlcmluZyBvcGVyYXRvcnMuCiAgICAgICA8L3BhcmE+ CkBAIC05OTQsMzQgKzEyOTMsNDIgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBj bXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICA8L3BhcmE+CiAKICAgPHBh cmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMg YSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAorICAgTm90ZSB0aGF0IDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgZG8gbm90IGN1cnJlbnRseSBzdXBw b3J0CisgICBvcmRlcmluZyBvcGVyYXRvcnMuICBUaGUgY29yZSBleGVjdXRvciBleHBlY3RzIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIHRvIHNldCA8c3RydWN0ZmllbGQ+eHNf b3JkZXJieXZhbHM8L3N0cnVjdGZpZWxkPiBmb3IgZWFjaCByZXR1cm5lZCB0dXBsZSwKKyAgIGJ1 dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gbWVjaGFuaXNtIHRvIGFzc29jaWF0ZSBwZXItaXRlbSBv cmRlcmluZyB2YWx1ZXMKKyAgIHdpdGggaW5kaXZpZHVhbCBpdGVtcyB3aXRoaW4gYSBiYXRjaC4g IFRoaXMgd291bGQgcmVxdWlyZSBhbiBhZGRpdGlvbmFsCisgICBsYXllciBvZiBpbmRpcmVjdGlv biB0aGF0IGRvZXMgbm90IHlldCBleGlzdCwgYnV0IGNvdWxkIGJlIGFkZGVkIGluIGEKKyAgIGZ1 dHVyZSB2ZXJzaW9uIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uCisg IDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGZ1bmN0aW9uIGhhcyBhIDxsaXRlcmFsPmRpcmVjdGlvbjwvbGl0ZXJhbD4gYXJndW1lbnQs CiAgICB3aGljaCBjYW4gYmUgZWl0aGVyIDxsaXRlcmFsPkZvcndhcmRTY2FuRGlyZWN0aW9uPC9s aXRlcmFsPiAodGhlIG5vcm1hbCBjYXNlKQogICAgb3IgIDxsaXRlcmFsPkJhY2t3YXJkU2NhbkRp cmVjdGlvbjwvbGl0ZXJhbD4uICBJZiB0aGUgZmlyc3QgY2FsbCBhZnRlcgogICAgPGZ1bmN0aW9u PmFtcmVzY2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzIDxsaXRlcmFsPkJhY2t3YXJkU2NhbkRpcmVj dGlvbjwvbGl0ZXJhbD4sIHRoZW4gdGhlCi0gICBzZXQgb2YgbWF0Y2hpbmcgaW5kZXggZW50cmll cyBpcyB0byBiZSBzY2FubmVkIGJhY2stdG8tZnJvbnQgcmF0aGVyIHRoYW4gaW4KLSAgIHRoZSBu b3JtYWwgZnJvbnQtdG8tYmFjayBkaXJlY3Rpb24sIHNvIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gbXVzdCByZXR1cm4KLSAgIHRoZSBsYXN0IG1hdGNoaW5nIHR1cGxlIGluIHRoZSBp bmRleCwgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSBhcyBpdAotICAgbm9ybWFsbHkgd291bGQu ICAoVGhpcyB3aWxsIG9ubHkgb2NjdXIgZm9yIGFjY2VzcwotICAgbWV0aG9kcyB0aGF0IHNldCA8 c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuKSAgQWZ0ZXIgdGhl Ci0gICBmaXJzdCBjYWxsLCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgYmUg cHJlcGFyZWQgdG8gYWR2YW5jZSB0aGUgc2NhbiBpbgorICAgcmV0dXJuZWQgYmF0Y2ggbXVzdCBi ZSB0aGUgYmF0Y2ggY29udGFpbmluZyB0aGUgbGFzdCBtYXRjaGluZyBpdGVtKHMpLAorICAgcmF0 aGVyIHRoYW4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW0ocyku CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3QgYmUgcHJlcGFyZWQgdG8g YWR2YW5jZSB0aGUgc2NhbiBpbgogICAgZWl0aGVyIGRpcmVjdGlvbiBmcm9tIHRoZSBtb3N0IHJl Y2VudGx5IHJldHVybmVkIGVudHJ5LiAgKEJ1dCBpZgogICAgPHN0cnVjdGZpZWxkPmFtY2FuYmFj a3dhcmQ8L3N0cnVjdGZpZWxkPiBpcyBmYWxzZSwgYWxsIHN1YnNlcXVlbnQKICAgIGNhbGxzIHdp bGwgaGF2ZSB0aGUgc2FtZSBkaXJlY3Rpb24gYXMgdGhlIGZpcnN0IG9uZS4pCiAgIDwvcGFyYT4K IAogICA8cGFyYT4KLSAgIEFjY2VzcyBtZXRob2RzIHRoYXQgc3VwcG9ydCBvcmRlcmVkIHNjYW5z IG11c3Qgc3VwcG9ydCA8cXVvdGU+bWFya2luZzwvcXVvdGU+IGEKLSAgIHBvc2l0aW9uIGluIGEg c2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5nIHRvIHRoZSBtYXJrZWQgcG9zaXRpb24uICBUaGUgc2Ft ZQotICAgcG9zaXRpb24gbWlnaHQgYmUgcmVzdG9yZWQgbXVsdGlwbGUgdGltZXMuICBIb3dldmVy LCBvbmx5IG9uZSBwb3NpdGlvbiBuZWVkCi0gICBiZSByZW1lbWJlcmVkIHBlciBzY2FuOyBhIG5l dyA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gY2FsbCBvdmVycmlkZXMgdGhlCi0gICBw cmV2aW91c2x5IG1hcmtlZCBwb3NpdGlvbi4gIEFuIGFjY2VzcyBtZXRob2QgdGhhdCBkb2VzIG5v dCBzdXBwb3J0IG9yZGVyZWQKLSAgIHNjYW5zIG5lZWQgbm90IHByb3ZpZGUgPGZ1bmN0aW9uPmFt bWFya3BvczwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1yZXN0cnBvczwvZnVuY3Rpb24+Ci0g ICBmdW5jdGlvbnMgaW4gPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+OyBz ZXQgdGhvc2UgcG9pbnRlcnMgdG8gTlVMTAotICAgaW5zdGVhZC4KKyAgIFNjYW5zIHVzaW5nIHRo ZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBzdXBwb3J0CisgICA8 cXVvdGU+bWFya2luZzwvcXVvdGU+IGEgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1 cm5pbmcgdG8gdGhlCisgICBtYXJrZWQgcG9zaXRpb24uICBUaGUgY29yZSBleGVjdXRvciBtYW5h Z2VzIHRoZSBwcm9jZXNzIG9mIHNhdmluZyBhbmQKKyAgIHJlc3RvcmluZyBiYXRjaCBwb3NpdGlv bmFsIHN0YXRlIHdpdGhvdXQgZXhwbGljaXQgY29vcmRpbmF0aW5nIHdpdGggdGhlCisgICB0YWJs ZSBBTS4gIEhvd2V2ZXIsIGl0IHdpbGwgY2FsbCB0aGUgaW5kZXggQU0ncyA8ZnVuY3Rpb24+YW1w b3NyZXNldDwvZnVuY3Rpb24+CisgICBjYWxsYmFjayBhcyBuZWVkZWQgd2hlbiByZXN0b3Jpbmcg YSBtYXJrLCB0byBpbnZhbGlkYXRlIGFueSBpbmRleCBBTSBzdGF0ZQorICAgdGhhdCBpbmRlcGVu ZGVudGx5IHRyYWNrcyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHNjYW4gKHN1Y2ggYXMgYXJyYXkga2V5 CisgICBzdGF0ZSkuICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIDxmdW5jdGlvbj5hbXBvc3Jlc2V0 PC9mdW5jdGlvbj4gaW4KKyAgIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWZ1bmN0aW9ucyIvPiBmb3Ig ZGV0YWlscy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgQm90aCB0aGUgc2NhbiBwb3NpdGlv biBhbmQgdGhlIG1hcmsgcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkCisgICBU aGUgc2NhbiBwb3NpdGlvbiAoaWYgYW55KSBtdXN0IGJlIG1haW50YWluZWQgYnkgdGhlIHRhYmxl IEFNIGFuZCBpbmRleCBBTQogICAgY29uc2lzdGVudGx5IGluIHRoZSBmYWNlIG9mIGNvbmN1cnJl bnQgaW5zZXJ0aW9ucyBvciBkZWxldGlvbnMgaW4gdGhlCiAgICBpbmRleC4gIEl0IGlzIE9LIGlm IGEgZnJlc2hseS1pbnNlcnRlZCBlbnRyeSBpcyBub3QgcmV0dXJuZWQgYnkgYSBzY2FuIHRoYXQK ICAgIHdvdWxkIGhhdmUgZm91bmQgdGhlIGVudHJ5IGlmIGl0IGhhZCBleGlzdGVkIHdoZW4gdGhl IHNjYW4gc3RhcnRlZCwgb3IgZm9yCkBAIC0xMDQ0LDEyICsxMzUxLDE0IEBAIGFtdHJhbnNsYXRl Y21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBl KTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW5zdGVhZCBvZiB1c2luZyA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbiBpbmRleCBzY2FuIGNhbiBiZSBkb25lIHdpdGgKLSAg IDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHRvIGZldGNoIGFsbCB0dXBsZXMgaW4g b25lIGNhbGwuICBUaGlzIGNhbiBiZQotICAgbm90aWNlYWJseSBtb3JlIGVmZmljaWVudCB0aGFu IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYmVjYXVzZSBpdCBhbGxvd3MKLSAgIGF2 b2lkaW5nIGxvY2svdW5sb2NrIGN5Y2xlcyB3aXRoaW4gdGhlIGFjY2VzcyBtZXRob2QuICBJbiBw cmluY2lwbGUKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZl IHRoZSBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0ZWQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KKyAg IEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9u ZSB3aXRoCisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwg dHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4KKyAgIGJlIG5vdGljZWFibHkgbW9yZSBlZmZp Y2llbnQgdGhhbiB3aXRoIGFuIDxxdW90ZT5vcmRlcmVkPC9xdW90ZT4gc2NhbgorICAgYmVjYXVz ZSBpdCBhbGxvd3MgZWZmaWNpZW50IHNlcXVlbnRpYWwgYWNjZXNzIHRvIHRhYmxlIEFNIHBhZ2Vz IGNvbnRhaW5pbmcKKyAgIG1hdGNoZXMuICBJbiBwcmluY2lwbGUgPGZ1bmN0aW9uPmFtZ2V0Yml0 bWFwPC9mdW5jdGlvbj4gc2hvdWxkIGhhdmUgdGhlCisgICBzYW1lIGVmZmVjdHMgYXMgcmVwZWF0 ZWQgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBvcgorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscywgYnV0IHdlIGltcG9zZSBzZXZlcmFsIHJlc3RyaWN0aW9u cyB0bwogICAgc2ltcGxpZnkgbWF0dGVycy4gIEZpcnN0IG9mIGFsbCwgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gcmV0dXJucyBhbGwKICAgIHR1cGxlcyBhdCBvbmNlIGFuZCBtYXJr aW5nIG9yIHJlc3RvcmluZyBzY2FuIHBvc2l0aW9ucyBpc24ndAogICAgc3VwcG9ydGVkLiBTZWNv bmRseSwgdGhlIHR1cGxlcyBhcmUgcmV0dXJuZWQgaW4gYSBiaXRtYXAgd2hpY2ggZG9lc24ndApA QCAtMTA1OSwxNSArMTM2OCwxNSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNt cHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBBbHNvLCB0aGVyZSBpcyBu byBwcm92aXNpb24gZm9yIGluZGV4LW9ubHkgc2NhbnMgd2l0aAogICAgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4sIHNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byByZXR1cm4gdGhlIGNv bnRlbnRzIG9mCiAgICBpbmRleCB0dXBsZXMuCi0gICBGaW5hbGx5LCA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPgotICAgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBsb2NraW5nIG9mIHRo ZSByZXR1cm5lZCB0dXBsZXMsIHdpdGggaW1wbGljYXRpb25zCi0gICBzcGVsbGVkIG91dCBpbiA8 eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgorICAgRmluYWxseSwgPGZ1bmN0aW9uPmFt Z2V0Yml0bWFwPC9mdW5jdGlvbj4gZG9lcyBub3QgaG9sZCBhbnkgaW5kZXggcGFnZSBwaW5zCisg ICBhZnRlciBpdCByZXR1cm5zIChzaW1pbGFybHkgdG8gPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBzY2FucyB3aXRoCisgICBhbiBNVkNDIHNuYXBzaG90KSwgYXMgZGVzY3JpYmVkIGlu IDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCiAgIDwvcGFyYT4KIAogICA8cGFyYT4K ICAgIE5vdGUgdGhhdCBpdCBpcyBwZXJtaXR0ZWQgZm9yIGFuIGFjY2VzcyBtZXRob2QgdG8gaW1w bGVtZW50IG9ubHkKLSAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3Qg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgb3IgdmljZSB2ZXJzYSwKLSAgIGlmIGl0 cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBv dGhlci4KKyAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZCBub3QgPGZ1bmN0 aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPi88ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ LAorICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGlzIHVu c3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgogICA8L3BhcmE+CiAKICA8L3NlY3QxPgpA QCAtMTEyMywxMSArMTQzMiwxNyBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNt cHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgotICAgICAgIEFuIGluZGV4IHNjYW4gbXVzdCBt YWludGFpbiBhIHBpbgotICAgICAgIG9uIHRoZSBpbmRleCBwYWdlIGhvbGRpbmcgdGhlIGl0ZW0g bGFzdCByZXR1cm5lZCBieQotICAgICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4s IGFuZCA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gY2Fubm90IGRlbGV0ZQotICAg ICAgIGVudHJpZXMgZnJvbSBwYWdlcyB0aGF0IGFyZSBwaW5uZWQgYnkgb3RoZXIgYmFja2VuZHMu ICBUaGUgbmVlZAotICAgICAgIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgorICAg ICAgIEEgcGluIG11c3QgYmUgaGVsZCBvbiBhbnkgaW5kZXggcGFnZSB3aG9zZSBpdGVtcyBtaWdo dCBzdGlsbCBuZWVkIHRvCisgICAgICAgYmUgZm9sbG93ZWQsIGFuZCA8ZnVuY3Rpb24+YW1idWxr ZGVsZXRlPC9mdW5jdGlvbj4gbXVzdCBhY3F1aXJlIGEKKyAgICAgICBjbGVhbnVwIGxvY2sgb24g ZWFjaCBpbmRleCBwYWdlLCB3aGljaCB3aWxsIGJsb2NrIGlmIGFueSBvdGhlcgorICAgICAgIGJh Y2tlbmQgaG9sZHMgYSBwaW4gb24gdGhhdCBwYWdlLgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggYWNjZXNzIG1ldGhvZAorICAgICAg IG1hbmFnZXMgdGhpcyBwaW4gZGlyZWN0bHkuCisgICAgICAgRm9yIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gc2NhbnMsIHRoZSBpbmRleCBBTSBob2xkcyBhIGJ1ZmZlcgorICAgICAg IHBpbiBvbiBlYWNoIGJhdGNoJ3MgaW5kZXggbGVhZiBwYWdlIChpbiBpdHMgcGVyLWJhdGNoIG9w YXF1ZSBhcmVhKSwKKyAgICAgICB3aGlsZSB0aGUgdGFibGUgQU0gY29udHJvbHMgd2hlbiB0aGUg aW50ZXJsb2NrIGlzIGRyb3BwZWQgdmlhCisgICAgICAgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNo PC9mdW5jdGlvbj4uCisgICAgICAgVGhlIG5lZWQgZm9yIHRoaXMgcnVsZSBpcyBleHBsYWluZWQg YmVsb3cuCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC9pdGVtaXplZGxp c3Q+CkBAIC0xMTM4LDM5ICsxNDUzLDkxIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5 cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIDxjb21tYW5kPlZB Q1VVTTwvY29tbWFuZD4uCiAgICBUaGlzIGNyZWF0ZXMgbm8gc2VyaW91cyBwcm9ibGVtcyBpZiB0 aGF0IGl0ZW0KICAgIG51bWJlciBpcyBzdGlsbCB1bnVzZWQgd2hlbiB0aGUgcmVhZGVyIHJlYWNo ZXMgaXQsIHNpbmNlIGFuIGVtcHR5Ci0gICBpdGVtIHNsb3Qgd2lsbCBiZSBpZ25vcmVkIGJ5IDxm dW5jdGlvbj5oZWFwX2ZldGNoKCk8L2Z1bmN0aW9uPi4gIEJ1dCB3aGF0IGlmIGEKKyAgIGl0ZW0g c2xvdCB3aWxsIHNpbXBseSBiZSB0cmVhdGVkIGFzIG5vdC12aXNpYmxlLiAgQnV0IHdoYXQgaWYg YQogICAgdGhpcmQgYmFja2VuZCBoYXMgYWxyZWFkeSByZS11c2VkIHRoZSBpdGVtIHNsb3QgZm9y IHNvbWV0aGluZyBlbHNlPwogICAgV2hlbiB1c2luZyBhbiBNVkNDLWNvbXBsaWFudCBzbmFwc2hv dCwgdGhlcmUgaXMgbm8gcHJvYmxlbSBiZWNhdXNlCiAgICB0aGUgbmV3IG9jY3VwYW50IG9mIHRo ZSBzbG90IGlzIGNlcnRhaW4gdG8gYmUgdG9vIG5ldyB0byBwYXNzIHRoZQogICAgc25hcHNob3Qg dGVzdC4gIEhvd2V2ZXIsIHdpdGggYSBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3QgKHN1Y2gg YXMKICAgIDxsaXRlcmFsPlNuYXBzaG90QW55PC9saXRlcmFsPiksIGl0IHdvdWxkIGJlIHBvc3Np YmxlIHRvIGFjY2VwdCBhbmQgcmV0dXJuCi0gICBhIHJvdyB0aGF0IGRvZXMgbm90IGluIGZhY3Qg bWF0Y2ggdGhlIHNjYW4ga2V5cy4gIFdlIGNvdWxkIGRlZmVuZAotICAgYWdhaW5zdCB0aGlzIHNj ZW5hcmlvIGJ5IHJlcXVpcmluZyB0aGUgc2NhbiBrZXlzIHRvIGJlIHJlY2hlY2tlZAotICAgYWdh aW5zdCB0aGUgaGVhcCByb3cgaW4gYWxsIGNhc2VzLCBidXQgdGhhdCBpcyB0b28gZXhwZW5zaXZl LiAgSW5zdGVhZCwKLSAgIHdlIHVzZSBhIHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkg dG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVhZGVyCi0gICBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4g ZmxpZ2h0PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXggZW50cnkgdG8gdGhlIG1hdGNoaW5nCi0gICBo ZWFwIGVudHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPiBibG9j ayBvbiBzdWNoIGEgcGluIGVuc3VyZXMKLSAgIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5k PiBjYW5ub3QgZGVsZXRlIHRoZSBoZWFwIGVudHJ5IGJlZm9yZSB0aGUgcmVhZGVyCi0gICBpcyBk b25lIHdpdGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzIGxpdHRsZSBpbiBydW4gdGltZSwgYW5k IGFkZHMgYmxvY2tpbmcKLSAgIG92ZXJoZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUg dGhlcmUgYWN0dWFsbHkgaXMgYSBjb25mbGljdC4KKyAgIGEgd2hvbGx5IHVucmVsYXRlZCByb3cg KG9uZSB0aGF0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IHNhdGlzZnkgdGhlIHNjYW4KKyAgIGtleXMp LiAgV2UgY2FuIG9wdGlvbmFsbHkgdXNlIGEgcGluIG9uIGFuIGluZGV4IHBhZ2UgYXMgYSBwcm94 eSB0byBpbmRpY2F0ZQorICAgdGhhdCB0aGUgcmVhZGVyIG1pZ2h0IHN0aWxsIGJlIDxxdW90ZT5p biBmbGlnaHQ8L3F1b3RlPiBmcm9tIHRoZSBpbmRleAorICAgZW50cnkgdG8gdGhlIG1hdGNoaW5n IGhlYXAgZW50cnkuICBNYWtpbmcgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+Cisg ICBibG9jayBvbiBzdWNoIGEgcGluIGVuc3VyZXMgdGhhdCA8Y29tbWFuZD5WQUNVVU08L2NvbW1h bmQ+IGNhbm5vdCBkZWxldGUKKyAgIHRoZSBoZWFwIGVudHJ5IGJlZm9yZSB0aGUgcmVhZGVyIGlz IGRvbmUgd2l0aCBpdC4gIFRoaXMgc29sdXRpb24gY29zdHMKKyAgIGxpdHRsZSBpbiBydW4gdGlt ZSwgYW5kIGFkZHMgYmxvY2tpbmcgb3ZlcmhlYWQgb25seSBpbiB0aGUgcmFyZSBjYXNlcyB3aGVy ZQorICAgdGhlcmUgYWN0dWFsbHkgaXMgYSBjb25mbGljdC4gIFdoZW4gdGhlIHNjYW4gdXNlcyBh biBNVkNDLWNvbXBsaWFudAorICAgc25hcHNob3QsIGhvbGRpbmcgdGhlIHBpbiBpcyB1bm5lY2Vz c2FyeSBiZWNhdXNlIHRoZSBzbmFwc2hvdCBpdHNlbGYgd2lsbAorICAgcmVqZWN0IGFueSByZWN5 Y2xlZCBUSUQncyBuZXcgb2NjdXBhbnQgKHNlZSBiZWxvdykuCiAgIDwvcGFyYT4KIAogICA8cGFy YT4KLSAgIFRoaXMgc29sdXRpb24gcmVxdWlyZXMgdGhhdCBpbmRleCBzY2FucyBiZSA8cXVvdGU+ c3luY2hyb25vdXM8L3F1b3RlPjogd2UgaGF2ZQotICAgdG8gZmV0Y2ggZWFjaCBoZWFwIHR1cGxl IGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4Ci0gICBl bnRyeS4gIFRoaXMgaXMgZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgQW4KLSAg IDxxdW90ZT5hc3luY2hyb25vdXM8L3F1b3RlPiBzY2FuIGluIHdoaWNoIHdlIGNvbGxlY3QgbWFu eSBUSURzIGZyb20gdGhlIGluZGV4LAotICAgYW5kIG9ubHkgdmlzaXQgdGhlIGhlYXAgdHVwbGVz IHNvbWV0aW1lIGxhdGVyLCByZXF1aXJlcyBtdWNoIGxlc3MgaW5kZXgKLSAgIGxvY2tpbmcgb3Zl cmhlYWQgYW5kIGNhbiBhbGxvdyBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4u Ci0gICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUgc3luY2hyb25vdXMg YXBwcm9hY2ggZm9yCi0gICBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLCBidXQgYW4gYXN5 bmNocm9ub3VzIHNjYW4gaXMgd29ya2FibGUKLSAgIGZvciBhIHF1ZXJ5IHVzaW5nIGFuIE1WQ0Mg c25hcHNob3QuCisgICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiBpbmRleCBzY2FucyBiZQorICAgPHF1b3RlPnN5bmNocm9ub3VzPC9x dW90ZT46IHRoZSB0YWJsZSBBTSBtdXN0IGZldGNoIGVhY2ggaGVhcCB0dXBsZQorICAgaW1tZWRp YXRlbHkgYWZ0ZXIgc2Nhbm5pbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXggZW50cnkuICBUaGlz IGlzCisgICBleHBlbnNpdmUgZm9yIGEgbnVtYmVyIG9mIHJlYXNvbnMuICBUaGUKKyAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlLCBieSBjb250cmFzdCwgd2FzIGRl c2lnbmVkIHRvCisgICBhbGxvdyBzY2FucyB0byBiZSA8cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90 ZT46IGJ5IGNvbGxlY3RpbmcgYmF0Y2hlcyBvZgorICAgVElEcyBmcm9tIG11bHRpcGxlIGluZGV4 IHBhZ2VzLCB0aGUgdGFibGUgQU0gY2FuIHByZWZldGNoIHRoZSBjb3JyZXNwb25kaW5nCisgICB0 YWJsZSBibG9ja3Mgd2VsbCBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uICh1c2lu ZyBhc3luY2hyb25vdXMKKyAgIEkvTyB3aGVuIGF2YWlsYWJsZSksIGFsbG93aW5nIGEgbW9yZSBl ZmZpY2llbnQgaGVhcCBhY2Nlc3MgcGF0dGVybi4gIE5vdAorICAgYWxsIHNjYW5zIGVuZCB1cCBi ZWluZyBhc3luY2hyb25vdXMgaW4gcHJhY3RpY2UsIGJ1dCB0aGUgaW50ZXJmYWNlIGlzCisgICBk ZXNpZ25lZCB0byBhbGxvdyBpdC4gIFBlciB0aGUgYWJvdmUgYW5hbHlzaXMsIHdlIG11c3QgdXNl IHRoZSBzeW5jaHJvbm91cworICAgYXBwcm9hY2ggZm9yIG5vbi1NVkNDLWNvbXBsaWFudCBzbmFw c2hvdHMsIGJ1dCBhbiBhc3luY2hyb25vdXMgc2NhbiBpcworICAgd29ya2FibGUgZm9yIGEgcXVl cnkgdXNpbmcgYW4gTVZDQyBzbmFwc2hvdC4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgSW4g YW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiwgdGhlIGFjY2Vz cyBtZXRob2QgZG9lcyBub3QKLSAgIGtlZXAgYW4gaW5kZXggcGluIG9uIGFueSBvZiB0aGUgcmV0 dXJuZWQgdHVwbGVzLiAgVGhlcmVmb3JlCi0gICBpdCBpcyBvbmx5IHNhZmUgdG8gdXNlIHN1Y2gg c2NhbnMgd2l0aCBNVkNDLWNvbXBsaWFudCBzbmFwc2hvdHMuCisgICBCZWNhdXNlIHRoZSB0YWJs ZSBBTSByZWFkcyBtdWx0aXBsZSBpbmRleCBsZWFmIHBhZ2VzIGFoZWFkIHZpYQorICAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiB0byBmYWNpbGl0YXRlIHRoaXMgcHJlZmV0Y2hpbmcs IGl0IGNhbm5vdAorICAgcHJhY3RpY2FsbHkgaG9sZCBwaW5zIG9uIGFsbCB0aG9zZSBwYWdlcyBz aW11bHRhbmVvdXNseS4gIFRoZXJlZm9yZSwKKyAgIEkvTyBwcmVmZXRjaGluZyB3aXRoCisgICA8 ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIG9ubHkgcG9zc2libGUgd2hlbiBhbiBN VkNDLWNvbXBsaWFudAorICAgc25hcHNob3QgaXMgaW4gdXNlLgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBXaGV0aGVyIGEgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAodHlwaWNh bGx5IGFuIGluZGV4IHBhZ2UgYnVmZmVyCisgICBwaW4pIGlzIGRyb3BwZWQgaW1tZWRpYXRlbHkg b3IgZGVmZXJyZWQgaXMgY29udHJvbGxlZCBieSBhIGdlbmVyaWMsCisgICBzY2FuLWxldmVsIHBv bGljeSB0aGF0IGlzIGRldGVybWluZWQgd2hlbiB0aGUgc2NhbiBpcyBvcGVuZWQgJm1kYXNoOyBp dCBpcworICAgbm90IHVuZGVyIHRoZSBjb250cm9sIG9mIGVpdGhlciB0aGUgaW5kZXggQU0gb3Ig dGhlIHRhYmxlIEFNLiAgVGhlIHNjYW4ncworICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRl VW5ndWFyZDwvc3RydWN0ZmllbGQ+IGZsYWcgZW5jb2RlcyB0aGlzIHBvbGljeS4KKyAgIEl0IGlz IHNldCBiYXNlZCBvbiB0d28gY3JpdGVyaWEgdGhhdCBhcmUga25vd24gdG8gdGhlIGNvcmUgc2Nh biBtYWNoaW5lcnk6CisgICB3aGV0aGVyIHRoZSBzY2FuIHVzZXMgYW4gTVZDQy1jb21wbGlhbnQg c25hcHNob3QsIGFuZCB3aGV0aGVyIGl0IGlzIGFuCisgICBpbmRleC1vbmx5IHNjYW4uICBTcGVj aWZpY2FsbHksCisgICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3Rm aWVsZD4gaXMgdHJ1ZSB3aGVuIHRoZSBzY2FuIHVzZXMKKyAgIGFuIE1WQ0Mgc25hcHNob3QgYW5k IGlzIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBhbiBpbmRleC1vbmx5IHNjYW4uICBXaGVuCisg ICA8c3RydWN0ZmllbGQ+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgdHJ1 ZSwgdGhlIGludGVybG9jayBpcworICAgZHJvcHBlZCBpbnNpZGUgPGZ1bmN0aW9uPmluZGV4YW1f dXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiAoYmVmb3JlIHRoZQorICAgYmF0Y2ggaXMgZXZl biByZXR1cm5lZCB0byB0aGUgdGFibGUgQU0pLCBiZWNhdXNlIGEgcGxhaW4gaW5kZXggc2NhbiB3 aXRoIGFuCisgICBNVkNDIHNuYXBzaG90IHdpbGwgYWx3YXlzIHZpc2l0IHRoZSBoZWFwIHBhZ2Us IHdoZXJlIHRoZSBNVkNDIHZpc2liaWxpdHkKKyAgIGNoZWNrIGlzIGF1dGhvcml0YXRpdmUgJm1k YXNoOyBldmVuIGlmIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gcmVjeWNsZXMgYQorICAgVElE LCB0aGUgbmV3IG9jY3VwYW50IGNhbm5vdCBwYXNzIHRoZSBzbmFwc2hvdCB0ZXN0LiAgV2hlbiBp dCBpcyBmYWxzZSwgdGhlCisgICBpbnRlcmxvY2sgaXMgcmV0YWluZWQgdW50aWwgdGhlIHRhYmxl IEFNIGV4cGxpY2l0bHkgY2FsbHMKKyAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rp b24+LCBiZWNhdXNlIHRoZSBzY2FuIGNhbm5vdCByZWx5IG9uIHRoYXQKKyAgIGhlYXAgcGFnZSBN VkNDIGJhY2tzdG9wLiAgRm9yIG5vbi1NVkNDIHNjYW5zLCB0aGVyZSBpcyBubyBNVkNDIHNuYXBz aG90IHRvCisgICByZWplY3QgYSByZWN5Y2xlZCBUSUQncyBuZXcgb2NjdXBhbnQgYXQgYWxsLiAg Rm9yIGluZGV4LW9ubHkgc2NhbnMsIGV2ZW4KKyAgIHdpdGggYW4gTVZDQyBzbmFwc2hvdCwgdGhl IHNjYW4gdHlwaWNhbGx5IGF2b2lkcyB2aXNpdGluZyB0aGUgaGVhcCBwYWdlCisgICBhbHRvZ2V0 aGVyICh1c2luZyB0aGUgdmlzaWJpbGl0eSBtYXAgaW5zdGVhZCksIHNvIHRoZSBNVkNDIGNoZWNr IHRoYXQgd291bGQKKyAgIGNhdGNoIGEgcmVjeWNsZWQgVElEIHVzdWFsbHkgbmV2ZXIgcnVucy4g IEluIGJvdGggY2FzZXMgdGhlIGludGVybG9jayBvbgorICAgdGhlIGluZGV4IHBhZ2UgaXMgd2hh dCBwcmV2ZW50cyA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGZyb20gcmVjeWNsaW5nCisgICBU SURzIHdoaWxlIHRoZSBzY2FuIGlzIHN0aWxsIGluIGZsaWdodC4gIEluIGFsbCBjYXNlcywgdGhl IHRhYmxlIEFNIGRlY2lkZXMKKyAgIDxlbXBoYXNpcz53aGVuPC9lbXBoYXNpcz4gdG8gY2FsbCA8 ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPjsgdGhlCisgICBpbmRleCBBTSBkZWNp ZGVzIDxlbXBoYXNpcz53aGF0PC9lbXBoYXNpcz4gdG8gcmVsZWFzZS4KKyAgPC9wYXJhPgorCisg IDxwYXJhPgorICAgU2ltaWxhcmx5LCBhbiA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9u PiBpbmRleCBzY2FuIGlzIGluaGVyZW50bHkKKyAgIGFzeW5jaHJvbm91czogYWxsIG1hdGNoaW5n IFRJRHMgYXJlIGNvbGxlY3RlZCBpbnRvIGEgYml0bWFwIGJlZm9yZSBhbnkgaGVhcAorICAgYWNj ZXNzIGJlZ2lucy4gIFN1Y2ggc2NhbnMgdGhlcmVmb3JlIHJlcXVpcmUgYW4gTVZDQy1jb21wbGlh bnQgc25hcHNob3QsCisgICBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIGFjY2VzcyBtZXRo b2QgdG8gaG9sZCBpbmRleCBwYWdlIHBpbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIElu ZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgdXNlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlv bj4gbXVzdCBtYW5hZ2UKKyAgIHBpbiBsaWZldGltZSB0aGVtc2VsdmVzLCBzaW5jZSB0aGVyZSBp cyBubyB0YWJsZSBBTSBpbnRlcm1lZGlhcnkgKHVubGlrZQorICAgd2l0aCA8ZnVuY3Rpb24+YW1n ZXRiYXRjaDwvZnVuY3Rpb24+KS4gIFRoZSBpbmRleCBBTSBtdXN0IGhvbGQgYSBwaW4gb24gdGhl CisgICBjdXJyZW50IGluZGV4IHBhZ2UgdW50aWwgdGhlIHNjYW4gbW92ZXMgdG8gYSBkaWZmZXJl bnQgcGFnZSBvciBlbmRzLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf dGFibGUuc2dtbAppbmRleCA5ODI1MzJmZTcuLmY1OGMyODgxNSAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV90YWJsZS5zZ21sCkBAIC0xMTUzLDEyICsxMTUzLDEzIEBAIFdJVEggKCBNT0RVTFVTIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwg UkVNCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFyYT4KLSAgICAgIFRoZSBhY2Nlc3MgbWV0aG9k IG11c3Qgc3VwcG9ydCA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmCi0g ICAgICBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3Jvbnlt PkdJTjwvYWNyb255bT4KLSAgICAgIGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2ggaXQncyBhbGxv d2VkLCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcKLSAgICAgIEItdHJlZSBvciBoYXNo IGluZGV4ZXMgd2l0aCBhbiBleGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzCi0gICAg ICBkb2VzIG5vdGhpbmcgdGhhdCBhbiBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0 IGRvIGJldHRlci4KLSAgICAgIFNvIGluIHByYWN0aWNlIHRoZSBhY2Nlc3MgbWV0aG9kIHdpbGwg YWx3YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IG9yCisgICAgICBUaGUgYWNjZXNzIG1l dGhvZCBtdXN0IHN1cHBvcnQgZWl0aGVyIDxsaXRlcmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+Cisg ICAgICBvciA8bGl0ZXJhbD5hbWdldGJhdGNoPC9saXRlcmFsPiAoc2VlIDx4cmVmIGxpbmtlbmQ9 ImluZGV4YW0iLz4pOyBhdAorICAgICAgcHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwv YWNyb255bT4gY2Fubm90IGJlIHVzZWQuICBBbHRob3VnaAorICAgICAgaXQncyBhbGxvd2VkLCB0 aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcgQi10cmVlIG9yIGhhc2ggaW5kZXhlcworICAg ICAgd2l0aCBhbiBleGNsdXNpb24gY29uc3RyYWludCwgYmVjYXVzZSB0aGlzIGRvZXMgbm90aGlu ZyB0aGF0IGFuCisgICAgICBvcmRpbmFyeSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJl dHRlci4gIFNvIGluIHByYWN0aWNlIHRoZQorICAgICAgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5 cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgogICAgICAgPGFjcm9ueW0+U1AtR2lTVDwv YWNyb255bT4uCiAgICAgIDwvcGFyYT4KIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9k dW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9p bmRleF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4IDMxZjhkMmI4MS4uZTJiODY1ZmI0IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBA IC0zMzQsMTAgKzMzNCwxMiBAQCBkaWhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVn aW5zY2FuID0gZGliZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGRpcmVzY2FuLAogCQkuYW1nZXR0 dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2gg PSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBOVUxM LAogCQkuYW1lbmRzY2FuID0gZGllbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFt cmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFy YWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBh cmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNDY3M2Vj YTljLi4xNDNkYzIwNjMgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yMDIsNiArMjAy LDcgQEAgQk9PTAogQk9PTEVBTgogQk9YCiBCVEFycmF5S2V5SW5mbworQlRCYXRjaERhdGEKIEJU QnVpbGRTdGF0ZQogQlRDYWxsYmFja1N0YXRlCiBCVEN5Y2xlSWQKQEAgLTIyOSw4ICsyMzAsNiBA QCBCVFNjYW5JbnNlcnREYXRhCiBCVFNjYW5LZXlQcmVwcm9jCiBCVFNjYW5PcGFxdWUKIEJUU2Nh bk9wYXF1ZURhdGEKLUJUU2NhblBvc0RhdGEKLUJUU2NhblBvc0l0ZW0KIEJUU2hhcmVkCiBCVFNv cnRBcnJheUNvbnRleHQKIEJUU3Bvb2wKQEAgLTI1OSw2ICsyNTgsOSBAQCBCYXNlQmFja3VwQ21k CiBCYXNlQmFja3VwVGFyZ2V0SGFuZGxlCiBCYXNlQmFja3VwVGFyZ2V0VHlwZQogQmF0Y2hNVkND U3RhdGUKK0JhdGNoTWF0Y2hpbmdJdGVtCitCYXRjaFJpbmdCdWZmZXIKK0JhdGNoUmluZ0l0ZW1Q b3MKIEJlZ2luRGlyZWN0TW9kaWZ5X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25JbnNlcnRfZnVuY3Rp b24KIEJlZ2luRm9yZWlnbk1vZGlmeV9mdW5jdGlvbgpAQCAtMTIyOCw2ICsxMjMwLDcgQEAgSGJh TGluZQogSGVhZGxpbmVKc29uU3RhdGUKIEhlYWRsaW5lUGFyc2VkVGV4dAogSGVhZGxpbmVXb3Jk RW50cnkKK0hlYXBCYXRjaERhdGEKIEhlYXBDaGVja0NvbnRleHQKIEhlYXBDaGVja1JlYWRTdHJl YW1EYXRhCiBIZWFwUGFnZUZyZWV6ZQpAQCAtMTMwNyw2ICsxMzEwLDggQEAgSW5kZXhPcmRlckJ5 RGlzdGFuY2UKIEluZGV4UGF0aAogSW5kZXhSdW50aW1lS2V5SW5mbwogSW5kZXhTY2FuCitJbmRl eFNjYW5CYXRjaAorSW5kZXhTY2FuQmF0Y2hEYXRhCiBJbmRleFNjYW5EZXNjCiBJbmRleFNjYW5E ZXNjRGF0YQogSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uCkBAIC0zNTEwLDE4ICszNTE1LDE3IEBA IGFtY2FucmV0dXJuX2Z1bmN0aW9uCiBhbWNvc3Rlc3RpbWF0ZV9mdW5jdGlvbgogYW1lbmRzY2Fu X2Z1bmN0aW9uCiBhbWVzdGltYXRlcGFyYWxsZWxzY2FuX2Z1bmN0aW9uCithbWdldGJhdGNoX2Z1 bmN0aW9uCiBhbWdldGJpdG1hcF9mdW5jdGlvbgogYW1nZXR0cmVlaGVpZ2h0X2Z1bmN0aW9uCiBh bWdldHR1cGxlX2Z1bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5fZnVuY3Rpb24KIGFtaW5zZXJ0 X2Z1bmN0aW9uCiBhbWluc2VydGNsZWFudXBfZnVuY3Rpb24KLWFtbWFya3Bvc19mdW5jdGlvbgog YW1vcHRpb25zX2Z1bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1bmN0aW9uCiBhbXByb3BlcnR5 X2Z1bmN0aW9uCiBhbXJlc2Nhbl9mdW5jdGlvbgotYW1yZXN0cnBvc19mdW5jdGlvbgogYW10cmFu c2xhdGVfY21wdHlwZV9mdW5jdGlvbgogYW10cmFuc2xhdGVfc3RyYXRlZ3lfZnVuY3Rpb24KIGFt dmFjdXVtY2xlYW51cF9mdW5jdGlvbgotLSAKMi41My4wCgo= --000000000000b7842d064d641fbb Content-Type: application/octet-stream; name="v16-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Disposition: attachment; filename="v16-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxrehji16 RnJvbSA5OTc4MjI4OTFmMzkzYTEzYmUyMmMxYmUyZDJkMDA5NGE0ODVmZGRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNiAwMi8xN10g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YQogdXNpbmcgeHNf YmxrCgpBZGQgYW4gZXhwbGljaXQgQmxvY2tOdW1iZXIgZmllbGQgKHhzX2JsaykgdG8gSW5kZXhG ZXRjaEhlYXBEYXRhIHRoYXQKdHJhY2tzIHdoaWNoIGhlYXAgYmxvY2sgaXMgY3VycmVudGx5IHBp bm5lZCBpbiB4c19jYnVmLgoKaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIG5vdyB1c2VzIHhzX2Js ayB0byBkZXRlcm1pbmUgd2hlbiBidWZmZXIKc3dpdGNoaW5nIGlzIG5lZWRlZCwgcmVwbGFjaW5n IHRoZSBwcmV2aW91cyBhcHByb2FjaCB0aGF0IGNvbXBhcmVkCmJ1ZmZlciBpZGVudGl0aWVzIHZp YSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciBvbiBldmVyeSBub24tSE9ULWNoYWluIGNhbGwuClRoZSBu ZXcgYXBwcm9hY2ggc2tpcHMgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgcGF0aCBlbnRpcmVseSB3aGVu IHRoZSBuZXh0ClRJRCBpcyBvbiB0aGUgc2FtZSBoZWFwIHBhZ2UsIHdoaWNoIGFsc28gbWVhbnMg dGhhdCBoZWFwX3BhZ2VfcHJ1bmVfb3B0CmlzIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGJsb2Nr ICh3aGVuIHRoZSBibG9jayBpcyBmaXJzdCBwaW5uZWQpLgoKVGhpcyBpcyBwcmVwYXJhdG9yeSB3 b3JrIGZvciBhbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIG5lZWQgeHNfYmxrCnRvIG1hbmFn ZSBidWZmZXIgcGluIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUgZXhlY3V0b3Ig c2xvdC4KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAgICAgIHwgIDUg KystLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyB8IDI5ICsrKysr KysrKysrKysrKy0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAx MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggMmZkYzUwYjg2Li45YmNmNzQ4NjIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEyMywxMCArMTIzLDExIEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4RmV0Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyogQU0gaW5k ZXBlbmRlbnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJLyoKLQkgKiBDdXJyZW50IGhl YXAgYnVmZmVyIGluIHNjYW4sIGlmIGFueS4gTkI6IGlmIHhzX2NidWYgaXMgbm90Ci0JICogSW52 YWxpZEJ1ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlci4KKwkgKiBDdXJyZW50IGhl YXAgYnVmZmVyIGluIHNjYW4gKGFuZCBpdHMgYmxvY2sgbnVtYmVyKSwgaWYgYW55LiAgTkI6IGlm CisJICogeHNfYmxrIGlzIG5vdCBJbnZhbGlkQmxvY2tOdW1iZXIsIHdlIGhvbGQgYSBwaW4gaW4g eHNfY2J1Zi4KIAkgKi8KIAlCdWZmZXIJCXhzX2NidWY7CisJQmxvY2tOdW1iZXIgeHNfYmxrOwog CiAJLyogQ3VycmVudCBoZWFwIGJsb2NrJ3MgY29ycmVzcG9uZGluZyBwYWdlIGluIHRoZSB2aXNp YmlsaXR5IG1hcCAqLwogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAyNTNhNzM1YjYuLmNmZTQ2ODlhOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC04Niw2ICs4Niw3IEBAIGhlYXBh bV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwg PSByZWw7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsg PSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZl cjsKIAogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CkBAIC0xMDcsNiArMTA4LDcgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJCVJlbGVhc2VC dWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAkJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxp ZEJ1ZmZlcjsKIAl9CisJaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAog c3RhdGljIHZvaWQKQEAgLTEzMiwyNCArMTM0LDI5IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAogCUFzc2VydChUVFNfSVNfQlVG RkVSVFVQTEUoc2xvdCkpOwogCi0JLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcg bG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFpbi4gKi8KLQlpZiAoISpjYWxsX2FnYWluKQor CS8qIFdlIGNhbiBza2lwIHRoZSBidWZmZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIG9uIHRo ZSBzYW1lIHBhZ2UuICovCisJaWYgKGhzY2FuLT54c19ibGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcih0aWQpKQogCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRv bid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2Ni dWY7CisJCUFzc2VydCghKmNhbGxfYWdhaW4pOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVsZWFz ZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jh c2UucmVsLAotCQkJCQkJCQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisJ CS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0IHRpbWUgKi8K KwkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQlp ZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1ZikpCisJCQlSZWxlYXNlQnVmZmVyKGhzY2Fu LT54c19jYnVmKTsKKworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jh c2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKIAogCQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25s eSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdlCisJCSAqIFBydW5lIHBhZ2Ugd2hl biBpdCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCiAJCSAqLwotCQlpZiAocHJldl9idWYg IT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNl LnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCSZoc2Nhbi0+eHNfdm1idWZmZXIpOworCQlo ZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCisJ CQkJCQkJJmhzY2FuLT54c192bWJ1ZmZlcik7CiAJfQogCisJQXNzZXJ0KEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGhzY2FuLT54c19jYnVmKSA9PSBoc2Nhbi0+eHNfYmxrKTsKKwlBc3NlcnQoaHNjYW4t PnhzX2JsayA9PSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCiAJLyogT2J0YWlu IHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gZXhhbWluZSB2aXNpYmlsaXR5ICov CiAJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCWdvdF9o ZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQsCi0tIAoyLjUzLjAKCg== --000000000000b7842d064d641fbb--