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 1w4Tsl-002EpZ-0T for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 01:15:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4Tsj-00ElzB-1e for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 01:15:01 +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 1w4Tsi-00Elxl-0I for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 01:15:01 +0000 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4Tsd-00000000Xpx-3eL7 for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 01:14:59 +0000 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-43b45bb7548so2617707f8f.1 for ; Sun, 22 Mar 2026 18:14:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774228492; cv=none; d=google.com; s=arc-20240605; b=luAyLGGYWp+/+dMCRwrsVL4pG4S+/5Jyd26Sj8Ha/XxwsNf1C1yl1PswIEg64g0fgO iGrGWSRGWtFJgVdbT1mlXjMWNOu2egTNmoGwv+Se/SmAytIW22jo1r90D+A9SM5HGxTD i0hbxD2E7wy1W3UoWwJUcvAahtGYh1PaRNDLd1rU1OfHzSLZ4apmImckOgQY3m55x5bh CL8FQ3KSyB8E6boWq+Gc/uUS+w5HLWqdQMVcKbin0grug5aM2rS+TuIsy8AScnQqFzNu FIjbOAJsq70Lg6whU0QY9x7O781GviI9CFYHZ8D9epedj01Nc9AjUZESbyGvRPZPu/h+ rVrw== 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=EFRnJvl8+A6d3t6B7KXqwDeobYZEAt/8alEIGUifTrs=; fh=FMNUCwt4kdFZ47vl5/3HAtj5pk0/UiHVhjs5q6amZVg=; b=G0bgHAuuWdrPxmjhpsAZ5msFil3tWZ6FCndXD+r+Sn2dY6Ei4j1vL5f0NNnmMa59A4 h+B4LSJ2ATJESDdP5Rln7PWz9UJkQtofuFY/onfopCq84GAr8jiRMk4Dza9tRGn+ap67 v4tmQNMB5l8IeB7E9cPu3wSLEnb7NdtW2PLe4lvdkMXGqj4mDIH+xIiXBccbLkyx8Qyj 9vYchUgROBWbxMa2cNqQP1SFS8ie4bXbGOVS15uT26cozROcJLZSR02IuWSOaXtDZpak JYGwMwFOvQtIObS3jIvz5UaZpPNO9nmTmZT4t9MFkpWBrUbCoCVq1lkTBT3kY1RlRTEv NfaA==; 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=1774228492; x=1774833292; 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=EFRnJvl8+A6d3t6B7KXqwDeobYZEAt/8alEIGUifTrs=; b=ZgMvhQAt7grPkek1ozoXeY0hdBI3jRwIVqYQlmUBp7b77FlovLjF8Ha4sHodz4LXyN g5muNKyet3PJvQdzbt20mSJtZ4318/X8yuJB42Z34LvhS4Qfco7K0jAQR5WMx8WaP68t WIacRL/b69p9cIKlYnJbOQJbOI9gnR9fQS0x2qzamSf8RjfY2UxTb+9gUidwUQVTkjOW +ovcunFe/YnALZIRJTtAhbMWYcBWgvWS4AnX1ax7s+u/IzOuN7hfn67g6K8zTioaWzg9 gxgXOiBvTMBCLM+miGM9mpdM876WVpLWl5cRVPUUwPkt7YDaR+XsKQwLcMEI08MiV9tY 4qeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774228492; x=1774833292; 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=EFRnJvl8+A6d3t6B7KXqwDeobYZEAt/8alEIGUifTrs=; b=DBoZ+KBWpIUcjnEAmaH7Jzzap2F45ThjEAzPaCbupgzfCNtQ5RVYN68QklC1xQPR8D BlXyVj2GppbH51ySivnanexanshLIKFp8lhEZCDD0goY8ODMtMtFZLYxiTbnSdJuQsoy zG6D0S99DTbEEjBK4m4SWYg8X4+oonQGx+fRNcWAIiF8Z2Xj1UFWXMp6WqW2IExiFRwP RjdFArDuTio8uWaO27iHO6TliCHo+wh4bYTMmbo5/si8/0uEnSXqk3M/d/FhkqsKnqLz VJUfwUCGCGEDxJwTI4CPOo6ttiA3hhnl5693Jmf08pl+NSRirkhB9ICf3dCHhCsqpG1Q 9LXw== X-Forwarded-Encrypted: i=1; AJvYcCVComk/WUS7p1qOm9UOJBFH8jrmACTWx7Cy2htB2CliDOnmXlrfT33De3DJ3fruLxlTKIFgSoMaKQD+JQc3@lists.postgresql.org X-Gm-Message-State: AOJu0YweMC5P4t8dvomXakwHeFzJAGzXZs0ON3gm0ZNNW/h3TRJaN/MQ YBjlPdChdjupdoOKlA5KKCfMKnOtlcudelhVtGx199AWAjuQRoOzztu/mr3ZZyuCxqVZLjtQTag wEvmZPzwInQw2vNH2G26yL2de4YudAUw9R67LnuWS8A== X-Gm-Gg: ATEYQzziqSAZftRHhU2+Jp+Xq1WpxjPnlXHFMlbd66dESKxd15jpRrqa1zzKRhtO5cT VZGcwy0KZn0NB/NvXQtw3zsLWmrxCMb3sd9ClY+SxkTOWjKaamLspR1p15ihEkuisUzcKAhxgFE 0FDf5A/R1hOVWWAaVblL2NbwNSnh23WihZsw835zvXJSctK2mDmI0n2iWypWKsM1S8LusiB3+l+ SQMjAVwCosl5F1rzEQqZiqUw+v2KH2zggPdjOyxXhXI4irbFAQEySc5KtQIRcxQXKG6Bw9iLvQM QJgywZtsm5TLV0SKHHM/FmrdKJMIpfdnRMi1GoGhLyOq26eI4xH0PA== X-Received: by 2002:a05:6000:1884:b0:439:c9e0:83a5 with SMTP id ffacd0b85a97d-43b6428ba82mr17233887f8f.54.1774228491470; Sun, 22 Mar 2026 18:14:51 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Sun, 22 Mar 2026 21:14:23 -0400 X-Gm-Features: AQROBzDecdciCrSy0-Uk8wwe0C0QX6a4HMYm7k6r_8euTBrCz3Laf-ueyLKvZuU 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="000000000000fc3ce4064da6c2f3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fc3ce4064da6c2f3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Mar 21, 2026 at 7:01=E2=80=AFPM Peter Geoghegan wrote: > I can immediately act on most of what you've said here. I'm planning > to commit the first patch (and maybe the hash index fake LSN patch) in > the next couple of days, ahead of posting a new v17 of the patch set. > You can expect any item I reply to with "fixed" or similar to be in > that version. Other items might not be addressed in v17 -- generally > because I require more context or feedback to act. > > I'm going to work through both this email and the later one from today > before posting this v17. What I've said applies equally to both > reviews/emails. I committed the fake LSN hash index patch (as commit e5836f7b), as well as the "Make IndexScanInstrumentation a pointer in executor scan nodes" patch (as commit f026fbf0). V17 is attached. This addresses most of your feedback, but defers dealing with the trickier parts for now. I didn't want to delay producing a new version that cleanly applies on top of master. Performance validation takes at least as long as writing the code, with these sorts of changes. Notable things that I have *not* done just yet: * No new heapam_index.c file in this version (though there is an indexbatch= .h). * No split of table AM revisions that pushes down VM accesses for index-only scans into its own commit (though there are a couple of new patches that were split from the big one to keep the size of the commits slightly more manageable, as promised). * No progress on splitting the batch management code currently in heapam_handler.c into smaller, reusable/modular pieces. Pieces that other table AMs can reuse. * Recently, Andres asked, "Does it really make sense to not just have 2 separate loops from within heapam_batch_resolve_visibility?". That is a question that remains unanswered, for now. Notable changes (things that I *have* done) include: * Cleaned up the mess of carrying around four full-length, specialized versions of the table AM index scan slot callback. We still specialize, but now there's only one generic pg_attribute_always_inline function definition, which is called by all four specializations. The compiler can create specialized versions because the amgetbatch + index_only_scan parameters are constants (four specializations for all four combinations of amgetbatch + index_only_scan boolean parameters). * Lots of renaming and polishing, along the lines requested in your review. Basically, everything I specifically told you I would do soon in my initial responses over the past couple of days has been completed. A large number of small things, that aren't worth noting individually. --=20 Peter Geoghegan --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0001-Track-index-only-scan-heap-fetches-using-IndexSc.patch" Content-Disposition: attachment; filename="v17-0001-Track-index-only-scan-heap-fetches-using-IndexSc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq7j0 RnJvbSBhZDkyNTRhZWUwOTkxN2YzMWY4YjMyYWY3NGUwNmViZWY1MDMyYWFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNyAwMS8xOF0g VHJhY2sgaW5kZXgtb25seSBzY2FuIGhlYXAgZmV0Y2hlcyB1c2luZwogSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uLgoKQW4gdXBjb21pbmcgY29tbWl0IHRoYXQgYWRkcyBpbnRlcmZhY2VzIHRoYXQg ZW5hYmxlIGluZGV4IHByZWZldGNoaW5nCm5lZWRzIHRvIHBlcmZvcm0gYWxsIGhlYXAgZmV0Y2hl cyBhdCB0aGUgdGFibGUgQU0gbGF5ZXIuICBUaGUgY29yZQpleGVjdXRvciB3aWxsIGJlIGxlZnQg d2l0aG91dCBhbnkgd2F5IHRvIGNvdW50IHRoZSBoZWFwIGZldGNoZXMgaXRzZWxmLApzbyBwdXNo IGl0IGRvd24gaW50byBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24ubmhlYXBmZXRjaGVzLgoKQWxz byByZW5hbWUgc2hvd19pbmRleHNlYXJjaGVzX2luZm8gdG8gc2hvd19pbmRleHNjYW5faW5mbywg c2luY2UgdGhlCmZ1bmN0aW9uIG5vdyByZXBvcnRzIG9uIG1vcmUgdGhhbiBqdXN0IGluZGV4IHNl YXJjaGVzLgoKRm9sbG93LXVwIHRvIGNvbW1pdCBmMDI2ZmJmMCwgd2hpY2ggbWFkZSBJbmRleFNj YW5JbnN0cnVtZW50YXRpb24gYQpwb2ludGVyIGluIGV4ZWN1dG9yIHNjYW4gbm9kZXMuCgpBdXRo b3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1 bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9D QUgyLVd6PWc9SlRTeURCNFV0QjVzdTJaY3ZzUzdWYlArWk12dmFHNkFCb0NiK3M4THdAbWFpbC5n bWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUuaCAgIHwg IDUgKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgfCAyMyAr KysrKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25s eXNjYW4uYyB8ICAzICsrLQogMyBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxMSBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50 X25vZGUuaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCmluZGV4IDg4 NDdkN2Y5NC4uMWJkZGQwMzc3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0 cnVtZW50X25vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9pbnN0cnVtZW50X25vZGUu aApAQCAtNDgsNiArNDgsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0 aW9uCiB7CiAJLyogSW5kZXggc2VhcmNoIGNvdW50IChpbmNyZW1lbnRlZCB3aXRoIHBnc3RhdF9j b3VudF9pbmRleF9zY2FuIGNhbGwpICovCiAJdWludDY0CQluc2VhcmNoZXM7CisKKwkvKgorCSAq IGhlYXAgYmxvY2tzIGZldGNoZWQgY291bnRzIChpbmNyZW1lbnRlZCBkdXJpbmcgaW5kZXgtb25s eSBzY2FucykKKwkgKi8KKwl1aW50NjQJCW5oZWFwZmV0Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1 bWVudGF0aW9uOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IGU0YjcwMTY2Yi4uMDhi OWRlZmQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGlj IHZvaWQgc2hvd19yZWN1cnNpdmVfdW5pb25faW5mbyhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3Rh dGUsCiBzdGF0aWMgdm9pZCBzaG93X21lbW9pemVfaW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwg TGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9p ZCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMp Owotc3RhdGljIHZvaWQgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQ bGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93 X3RpZGJpdG1hcF9pbmZvKEJpdG1hcEhlYXBTY2FuU3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJ RXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3Vu dChjb25zdCBjaGFyICpxbGFiZWwsIGludCB3aGljaCwKQEAgLTE5NzQsNyArMTk3NCw3IEBAIEV4 cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAo cGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVk IGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2lu ZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8o cGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlz aG93X3NjYW5fcXVhbCgoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5 ODgsMTUgKzE5ODgsMTIgQEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3Qg KmFuY2VzdG9ycywKIAkJCWlmIChwbGFuLT5xdWFsKQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9u X2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVyIiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3Rh dGUsIGVzKTsKLQkJCWlmIChlcy0+YW5hbHl6ZSkKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgi SGVhcCBGZXRjaGVzIiwgTlVMTCwKLQkJCQkJCQkJCSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50 dXBsZXMyLCAwLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVz KTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJ Y2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhT Y2FuICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAogCQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFu c3RhdGUsIGFuY2VzdG9ycywgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0 YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJl YWs7CiAJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKIAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFw SGVhcFNjYW4gKikgcGxhbiktPmJpdG1hcHF1YWxvcmlnLApAQCAtMzg2MCwxNSArMzg1NywxNiBA QCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAqYWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMp CiB9CiAKIC8qCi0gKiBTaG93IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9y IGEKKyAqIFNob3cgaW5kZXggc2NhbiByZWxhdGVkIGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBm b3IgYQogICogSW5kZXhTY2FuL0luZGV4T25seVNjYW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAq Lwogc3RhdGljIHZvaWQKLXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0 YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBs YW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIHsKIAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRl LT5wbGFuOwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5V TEw7Ci0JdWludDY0CQluc2VhcmNoZXMgPSAwOworCXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJ CQluaGVhcGZldGNoZXMgPSAwOwogCiAJaWYgKCFlcy0+YW5hbHl6ZSkKIAkJcmV0dXJuOwpAQCAt Mzg4OSw2ICszODg3LDcgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFu c3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQkJSW5kZXhPbmx5U2NhblN0YXRlICppbmRleHN0 YXRlID0gKChJbmRleE9ubHlTY2FuU3RhdGUgKikgcGxhbnN0YXRlKTsKIAogCQkJCW5zZWFyY2hl cyA9IGluZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQkJCW5oZWFwZmV0 Y2hlcyA9IGluZGV4c3RhdGUtPmlvc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCQkJCVNo YXJlZEluZm8gPSBpbmRleHN0YXRlLT5pb3NzX1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9 CkBAIC0zOTEyLDkgKzM5MTEsMTMgQEAgc2hvd19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRl ICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRp b24gKndpbnN0cnVtZW50ID0gJlNoYXJlZEluZm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2Vh cmNoZXMgKz0gd2luc3RydW1lbnQtPm5zZWFyY2hlczsKKwkJCW5oZWFwZmV0Y2hlcyArPSB3aW5z dHJ1bWVudC0+bmhlYXBmZXRjaGVzOwogCQl9CiAJfQogCisJaWYgKG5vZGVUYWcocGxhbikgPT0g VF9JbmRleE9ubHlTY2FuKQorCQlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSGVhcCBGZXRjaGVz IiwgTlVMTCwgbmhlYXBmZXRjaGVzLCBlcyk7CisKIAlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigi SW5kZXggU2VhcmNoZXMiLCBOVUxMLCBuc2VhcmNoZXMsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKaW5kZXggOWVhYjgxZmQxLi4xYjg5NTcwYTIgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwpAQCAtMTY2LDcgKzE2Niw4 IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkJLyoKIAkJCSAq IFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KIAkJ CSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7CisJCQlpZiAobm9kZS0+aW9zc19J bnN0cnVtZW50KQorCQkJCW5vZGUtPmlvc3NfSW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzKys7CiAJ CQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkK IAkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5 ICovCiAKLS0gCjIuNTMuMAoK --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0017-WIP-instrumentation-Account-for-resource-usage-u.patch" Content-Disposition: attachment; filename="v17-0017-WIP-instrumentation-Account-for-resource-usage-u.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq812 RnJvbSA1ZjZjMmRhNzVjOGM2NGQ4MjNiMjIyNGFhMmFkMmFjMmM1NWM5M2MyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDg6MjkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNyAx Ny8xOF0gV0lQOiBpbnN0cnVtZW50YXRpb246IEFjY291bnQgZm9yIHJlc291cmNlIHVzYWdlCiB1 cmluZyByZXNjYW5zCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5j IHwgMTkgKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDk3OWE4NTJmZS4u MDM5Mzk1MjFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC03Nyw5ICs3NywxNSBAQCBzdGF0 aWMgYm9vbCBJbmRleFN1cHBvcnRzQmFja3dhcmRTY2FuKE9pZCBpbmRleGlkKTsKIHZvaWQKIEV4 ZWNSZVNjYW4oUGxhblN0YXRlICpub2RlKQogewotCS8qIElmIGNvbGxlY3RpbmcgdGltaW5nIHN0 YXRzLCB1cGRhdGUgdGhlbSAqLwogCWlmIChub2RlLT5pbnN0cnVtZW50KQotCQlJbnN0ckVuZExv b3Aobm9kZS0+aW5zdHJ1bWVudCk7CisJeworCQkvKgorCQkgKiBSZXNjYW4gaW4gc29tZSBub2Rl IHR5cGVzIGNhbiB0YWtlIGxvbmcgZW5vdWdoIHRvIGJlIHdvcnRoCisJCSAqIGFjY291bnRpbmcg Zm9yLgorCQkgKi8KKwkJaWYgKG5vZGUtPmluc3RydW1lbnQtPnJ1bm5pbmcpCisJCQlJbnN0clN0 YXJ0Tm9kZShub2RlLT5pbnN0cnVtZW50KTsKKwl9CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgY2hh bmdlZCBwYXJhbWV0ZXJzLCBwcm9wYWdhdGUgdGhhdCBpbmZvLgpAQCAtMzA5LDYgKzMxNSwxNSBA QCBFeGVjUmVTY2FuKFBsYW5TdGF0ZSAqbm9kZSkKIAkJYm1zX2ZyZWUobm9kZS0+Y2hnUGFyYW0p OwogCQlub2RlLT5jaGdQYXJhbSA9IE5VTEw7CiAJfQorCisJaWYgKG5vZGUtPmluc3RydW1lbnQp CisJeworCQlpZiAobm9kZS0+aW5zdHJ1bWVudC0+cnVubmluZykKKwkJCUluc3RyU3RvcE5vZGUo bm9kZS0+aW5zdHJ1bWVudCwgMCk7CisKKwkJLyogSWYgY29sbGVjdGluZyB0aW1pbmcgc3RhdHMs IHVwZGF0ZSB0aGVtICovCisJCUluc3RyRW5kTG9vcChub2RlLT5pbnN0cnVtZW50KTsKKwl9CiB9 CiAKIC8qCi0tIAoyLjUzLjAKCg== --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0018-Dirty-hack-to-make-read_stream_reset-end-not-wai.patch" Content-Disposition: attachment; filename="v17-0018-Dirty-hack-to-make-read_stream_reset-end-not-wai.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq7y1 RnJvbSBkNTcyYzlmODZhZWU5ZmRlYmQ5MWVjN2YxNzY2MjQ0MWU5ZDFlNGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDY6NTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNyAx OC8xOF0gRGlydHkgaGFjayB0byBtYWtlIHJlYWRfc3RyZWFtX3Jlc2V0KCkvZW5kKCkgbm90CiB3 YWl0IGZvciBJTwoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAgIHwgMjcg KysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKystLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA1 NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYWlvLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpby5oCmluZGV4IGVjNTQzYjc4 NC4uYzE4NGU5N2E5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpby5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgKQEAgLTMyOCw2ICszMjgsNyBAQCBleHRlcm4gaW50 CXBnYWlvX3dyZWZfZ2V0X2lkKFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiB2b2lkIHBnYWlv X3dyZWZfd2FpdChQZ0Fpb1dhaXRSZWYgKmlvdyk7CiBleHRlcm4gYm9vbCBwZ2Fpb193cmVmX2No ZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpOwogCitleHRlcm4gdm9pZCBwZ2Fpb193cmVmX2Rp c2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCA0ZTc0MjAzOGQuLjQ5ZWI2NzdhZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKQEAgLTEwNTUsNiArMTA1NSwzMyBAQCBwZ2Fpb193cmVmX2NoZWNr X2RvbmUoUGdBaW9XYWl0UmVmICppb3cpCiAJcmV0dXJuIGZhbHNlOwogfQogCit2b2lkCitwZ2Fp b193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KQoreworCXVpbnQ2NAkJcmVm X2dlbmVyYXRpb247CisJYm9vbAkJYW1fb3duZXI7CisJUGdBaW9IYW5kbGUgKmlvaDsKKwlQZ0Fp b0hhbmRsZVN0YXRlIHN0YXRlOworCisJaW9oID0gcGdhaW9faW9fZnJvbV93cmVmKGlvdywgJnJl Zl9nZW5lcmF0aW9uKTsKKworCWFtX293bmVyID0gaW9oLT5vd25lcl9wcm9jbm8gPT0gTXlQcm9j TnVtYmVyOworCisJaWYgKCFhbV9vd25lcikKKwkJZWxvZyhFUlJPUiwgIm5vdCB5b3UiKTsKKwor CWlmIChwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCByZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSkK KwkJcmV0dXJuOworCisJcGdhaW9fZGVidWdfaW8oREVCVUcyLCBpb2gsCisJCQkJICAgImRpc2Nh cmRpbmcgcmVzdWx0ICVwIiwKKwkJCQkgICBpb2gtPnJlcG9ydF9yZXR1cm4pOworCisJaWYgKGlv aC0+cmVzb3duZXIpCisJCXBnYWlvX2lvX3JlbGVhc2VfcmVzb3duZXIoJmlvaC0+cmVzb3duZXJf bm9kZSwgZmFsc2UpOworfQorCisKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggZTNjMTZiZDE3Li5kMzBjZGE4Njgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtNTI0LDcgKzUyNCw3IEBA IHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCQkoc3RyZWFtLT5w ZW5kaW5nX3JlYWRfbmJsb2NrcyA9PSBzdHJlYW0tPmlvX2NvbWJpbmVfbGltaXQgfHwKIAkJIChz dHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID49IHN0cmVhbS0+ZGlzdGFuY2UgJiYKIAkJICBz dHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApIHx8Ci0JCSBzdHJlYW0tPmRpc3RhbmNlID09IDAp ICYmCisJCSBzdHJlYW0tPmRpc3RhbmNlIDw9IDApICYmCiAJCXN0cmVhbS0+aW9zX2luX3Byb2dy ZXNzIDwgc3RyZWFtLT5tYXhfaW9zKQogCQlyZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQo c3RyZWFtKTsKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVh ZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3b3JzdCBjYXNlIHdlIGNhbiBh bHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkgKiB0aW1lLgogCSAqLwotCUFz c2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNlID09IDAp OworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNl IDw9IDApOwogCiAJaWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1v ZGUoKTsKQEAgLTkxMCw3ICs5MTAsNyBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3Ry ZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCUFzc2VydChzdHJlYW0tPm9s ZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKIAkJLyog RW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPT0gMCkK KwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkKIAkJCXJldHVybiBJbnZhbGlkQnVmZmVyOwog CiAJCS8qCkBAIC05MjQsNyArOTI0LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQkvKiBFbmQgb2Ygc3RyZWFt IHJlYWNoZWQ/ICovCiAJCWlmIChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApCiAJCXsKLQkJ CUFzc2VydChzdHJlYW0tPmRpc3RhbmNlID09IDApOworCQkJQXNzZXJ0KHN0cmVhbS0+ZGlzdGFu Y2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAkJfQogCX0KQEAgLTk1Miw3ICs5 NTIsMjcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lk ICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmJ1 ZmZlcnMgPT0KIAkJCSAgICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0pOwog Ci0JCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0u b3ApOworCQkvKgorCQkgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVuIHJlc2V0LCBkb24ndCBldmVu IHdhaXQgZm9yIHRoZSBJTywganVzdAorCQkgKiBkaXNjYXJkIGl0LgorCQkgKi8KKwkJaWYgKHN0 cmVhbS0+ZGlzdGFuY2UgPCAwKQorCQl7CisJCQlpZiAocGdhaW9fd3JlZl92YWxpZCgmc3RyZWFt LT5pb3NbaW9faW5kZXhdLm9wLmlvX3dyZWYpICYmCisJCQkJIXN0cmVhbS0+aW9zW2lvX2luZGV4 XS5vcC5mb3JlaWduX2lvKQorCQkJeworCQkJCXBnYWlvX3dyZWZfZGlzY2FyZF9yZXN1bHQoJnN0 cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5pb193cmVmKTsKKwkJCQlwZ2Fpb193cmVmX2NsZWFyKCZz dHJlYW0tPmlvc1tpb19pbmRleF0ub3AuaW9fd3JlZik7CisJCQl9CisJCQllbHNlCisJCQkJV2Fp dFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3ApOworCisJCQluZWVkZWRfd2Fp dCA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCX0KIAogCQlBc3NlcnQoc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPiAwKTsKIAkJc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MtLTsKQEAg LTExMjksNyArMTE0OSw3IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJlYW0gKnN0cmVhbSkK IAlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIFN0b3AgbG9va2luZyBhaGVhZC4gKi8KLQlzdHJlYW0t PmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPmRpc3RhbmNlID0gLTE7CiAKIAkvKiBGb3JnZXQgYnVm ZmVyZWQgYmxvY2sgbnVtYmVyIGFuZCBmYXN0IHBhdGggc3RhdGUuICovCiAJc3RyZWFtLT5idWZm ZXJlZF9ibG9ja251bSA9IEludmFsaWRCbG9ja051bWJlcjsKLS0gCjIuNTMuMAoK --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0016-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Disposition: attachment; filename="v17-0016-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq843 RnJvbSBiOWRiMmZjNDRmM2I3NWY4ZTA1N2Q2ZGVkOWE0NWUzODVlZTU4NjZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDE2 LzE4XSBXSVA6IGFpbzogaW9fdXJpbmc6IFVzZSBJTyBzaXplIG5vdCBJTyBxdWV1ZSB0bwogdHJp 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 --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0015-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Disposition: attachment; filename="v17-0015-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq874 RnJvbSA2MzE5ZmY2Njk0ZWIwYzUzMDgxM2QyMTlmNDcyZWQ0N2YzZTM5ZWRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzoyNToyNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDE1 LzE4XSBXSVA6IHJlYWRfc3RyZWFtOiBQcmV2ZW50IGRpc3RhbmNlIGZyb20gZGVjYXlpbmcKIHRv 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 --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0014-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Disposition: attachment; filename="v17-0014-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8b5 RnJvbSBlZmY5ODcyMzI3NDMxNTI2ZWVjNTlhNDA5NTJiMzgyNGZiZjliOWRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDE0 LzE4XSBXSVA6IHJlYWRfc3RyZWFtOiBPbmx5IGluY3JlYXNlIGRpc3RhbmNlIHdoZW4KIHdhaXRp 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= --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0013-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v17-0013-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8e6 RnJvbSAyMDMzODAxNzg2YmQ3ZWFhYTEzMjBjNzcyZDM4ZjA2YTEyODE0YjM5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDEz LzE4XSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog 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== --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0011-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Disposition: attachment; filename="v17-0011-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8j8 RnJvbSAyMjdkYWI1Zjc1MDE3NzRhNTdlZmQ0NWU2MWY0MTQ2NzljZmNhZDQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDEx LzE4XSBXSVA6IHJlYWRfc3RyZWFtOiBJc3N1ZSBJTyBzeW5jaHJvbm91c2x5IHdoaWxlIGluCiBm 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= --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0012-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Disposition: attachment; filename="v17-0012-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8h7 RnJvbSAzMDBiMjYxYmM3NGMzNTFmZThlMDc5YjllNDk2ZWQwYzhiMGEwYTc5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDEy LzE4XSBXSVA6IGFpbzogaW9fdXJpbmc6IEFsbG93IElPIG1ldGhvZHMgdG8gY2hlY2sgaWYgSU8K 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== --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0010-Don-t-wait-for-already-in-progress-IO.patch" Content-Disposition: attachment; filename="v17-0010-Don-t-wait-for-already-in-progress-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8l9 RnJvbSA4M2M2ZDc2YmE4ZTU0OTE1MjIxMmMyYWVkMzQ5MTNmM2M5NzE2YjJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDE0OjAwOjMxIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTcgMTAvMThdIERvbid0IHdhaXQgZm9yIGFscmVhZHkgaW4tcHJvZ3Jlc3MgSU8KTUlN 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 dHlwZWRlZnMubGlzdAppbmRleCBkNmVlZjA1NGMuLjk4YzUxMGZkMyAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5 cGVkZWZzLmxpc3QKQEAgLTIzNzQsNiArMjM3NCw3IEBAIFByZWRpY2F0ZUxvY2tEYXRhCiBQcmVk aWNhdGVMb2NrVGFyZ2V0VHlwZQogUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIFByZXBQYXJhbGxlbFJl c3RvcmVQdHJUeXBlCitQcmVwYXJlUmVhZEJ1ZmZlcl9TdGF0dXMKIFByZXBhcmVTdG10CiBQcmVw YXJlZFN0YXRlbWVudAogUHJlc29ydGVkS2V5RGF0YQotLSAKMi41My4wCgo= --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0008-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v17-0008-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8s11 RnJvbSAyZmQ2MTFmNDkwZDFiYTU4Zjk2MDlkNjVmZGQ4Y2YxZDliNmFjNzE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNyAwOC8xOF0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBp bmRleGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9m IGFsbCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2Uu ICBUaGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0 aW1pemF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5z LgoKTm90ZSB0aGF0IGhhc2ggaW5kZXggc2NhbnMgd2lsbCBub3cgZHJvcCBpbmRleCBwYWdlIGJ1 ZmZlciBwaW5zIGVhZ2VybHkKKGFjdHVhbGx5LCB0aGUgdGFibGUgQU0gd2lsbCBkbyBzbyBvbiBi ZWhhbGYgb2YgdGhlIGhhc2ggaW5kZXggQU0pLgpUaGlzIGlzIGEgaGFyZCByZXF1aXJlbWVudCBm b3IgYW55IGluZGV4IEFNIHRoYXQgYWRvcHRzIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2Uu ICBHdWFyYW50ZWVpbmcgdGhhdCBvcGVuIGJhdGNoZXMgd29uJ3QgaG9sZCBidWZmZXIKcGlucyBv biBpbmRleCBwYWdlcyBncmVhdGx5IHNpbXBsaWZpZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJp bmcgaW5kZXgKcHJlZmV0Y2hpbmcsIHdoZXJlIHRoZSByZWFkIHN0cmVhbSBpcyBleHBlY3RlZCB0 byBob2xkIG1hbnkgcGlucyBvbiBoZWFwCnBhZ2VzICh0aGF0J3Mgd2h5IGFtZ2V0YmF0Y2ggbWFr ZXMgdGhpcyBhIGhhcmQgcmVxdWlyZW1lbnQpLgoKQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBn QGJvd3QuaWU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KUmV2 aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjog aHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFjQkgxNjFwZUFXYjVlRj1KYTdDRkFRKzBq U0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGFz aC5oICAgICAgICAgICAgfCAgODEgKystLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvUkVB RE1FICAgICAgIHwgIDMxICstLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAg IHwgMjExICsrKysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxv Zy5jICB8ICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYyAgIHwgIDIx ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgfCAzNDUgKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jICAg fCAxMjkgKy0tLS0tLS0tLQogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAgICAgICAgICAgIHwg IDIxICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgfCAgIDMgKy0KIDkg ZmlsZXMgY2hhbmdlZCwgMzQwIGluc2VydGlvbnMoKyksIDUwNiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hh c2guaAppbmRleCBhODcwMmYwZTUuLjczZGQ4Y2FiZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv YWNjZXNzL2hhc2guaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGFzaC5oCkBAIC0xOCw2ICsx OCw3IEBACiAjZGVmaW5lIEhBU0hfSAogCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5j bHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbV9kLmgiCkBAIC0x MDAsNTcgKzEwMSwxOCBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0YSAqSGFzaFBhZ2VPcGFx dWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAKLXR5cGVkZWYgc3RydWN0 IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8K Ky8qIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIGhhc2ggaW5kZXggQU0gKi8KK3R5cGVk ZWYgc3RydWN0IEhhc2hCYXRjaERhdGEKIHsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyog VElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0 OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJ dGVtOworCUJ1ZmZlcgkJYnVmOwkJCS8qIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiAoVElEIHJldXNl IGludGVybG9jaykgKi8KKwlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGluZGV4IHBhZ2Ugd2l0 aCBtYXRjaGluZyBpdGVtcyAqLworCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyogY3VyclBhZ2Un cyBsZWZ0IGxpbmsgKi8KKwlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1cnJQYWdlJ3Mgcmln aHQgbGluayAqLworfSBIYXNoQmF0Y2hEYXRhOwogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBv c0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2YWxpZCwgdGhlIGJ1ZmZlciBpcyBwaW5u ZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIGN1cnJlbnQgaGFzaCBpbmRleCBwYWdl ICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBuZXh0IG92ZXJmbG93IHBhZ2UgKi8KLQlC bG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3ZlcmZsb3cgb3IgYnVja2V0IHBhZ2UgKi8K LQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9y ZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFj a3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZy b250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkg KiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlk LWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2gg ZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRl bTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJ CS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8q IGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0JSGFzaFNjYW5Qb3NJdGVtIGl0ZW1zW01h eEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUgTEFTVCAqLwotfSBIYXNoU2NhblBvc0Rh dGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0oIFwKLQlBc3Nl cnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJ IUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxpZCgoc2NhbnBv cykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSgg XAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8 IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklz VmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJbnZh bGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNjYW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZm ZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShz Y2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykucHJl dlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLmZpcnN0SXRlbSA9IDA7 IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAotCQkoc2NhbnBvcykuaXRlbUluZGV4ID0g MDsgXAotCX0gd2hpbGUgKDApCisvKiBBY2Nlc3MgdGhlIGhhc2gtcHJpdmF0ZSBwZXItYmF0Y2gg ZGF0YSBmcm9tIGFuIEluZGV4U2NhbkJhdGNoIHBvaW50ZXIgKi8KKyNkZWZpbmUgSGFzaEJhdGNo R2V0RGF0YShzY2FuLCBiYXRjaCkgXAorCWluZGV4YW1fdXRpbF9iYXRjaF9nZXRfYW1kYXRhKHNj YW4sIGJhdGNoLCBIYXNoQmF0Y2hEYXRhKQogCiAvKgogICoJSGFzaFNjYW5PcGFxdWVEYXRhIGlz IHByaXZhdGUgc3RhdGUgZm9yIGEgaGFzaCBpbmRleCBzY2FuLgpAQCAtMTc4LDE1ICsxNDAsNiBA QCB0eXBlZGVmIHN0cnVjdCBIYXNoU2Nhbk9wYXF1ZURhdGEKIAkgKiByZWZlcnJlZCBvbmx5IHdo ZW4gaGFzaHNvX2J1Y19wb3B1bGF0ZWQgaXMgdHJ1ZS4KIAkgKi8KIAlib29sCQloYXNoc29fYnVj X3NwbGl0OwotCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMg aXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJy UG9zLml0ZW1zIGluZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJ LyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQotCS8qCi0JICogSWRlbnRp ZnkgYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiBhIHBhZ2UgYW5kIHNhdmUgdGhlbSBpbgotCSAq IEhhc2hTY2FuUG9zRGF0YQotCSAqLwotCUhhc2hTY2FuUG9zRGF0YSBjdXJyUG9zOwkvKiBjdXJy ZW50IHBvc2l0aW9uIGRhdGEgKi8KIH0gSGFzaFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEhh c2hTY2FuT3BhcXVlRGF0YSAqSGFzaFNjYW5PcGFxdWU7CkBAIC0zNjgsMTEgKzMyMSwxNSBAQCBl eHRlcm4gYm9vbCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVlcywgYm9vbCAq aXNudWxsLAogCQkJCQkgICBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAogCQkJCQkgICBi b29sIGluZGV4VW5jaGFuZ2VkLAogCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8p OwotZXh0ZXJuIGJvb2wgaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIGhhc2hnZXRiYXRjaChJbmRleFNjYW5E ZXNjIHNjYW4sCisJCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJ CSAgIFNjYW5EaXJlY3Rpb24gZGlyKTsKIGV4dGVybiBpbnQ2NCBoYXNoZ2V0Yml0bWFwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pOwogZXh0ZXJuIEluZGV4U2NhbkRlc2MgaGFz aGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRl cm4gdm9pZCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBp bnQgbnNjYW5rZXlzLAogCQkJCQkgICBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9yZGVyYnlzKTsK K2V4dGVybiB2b2lkIGhhc2hraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4 U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGhhc2h1bmd1YXJkYmF0Y2goSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gdm9pZCBoYXNoZW5kc2Nh bihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqaGFz aGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCQkgSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGF0cywKQEAgLTQ0NSw4ICs0MDIsOSBAQCBleHRlcm4gdm9pZCBfaGFz aF9maW5pc2hfc3BsaXQoUmVsYXRpb24gcmVsLCBCdWZmZXIgbWV0YWJ1ZiwgQnVmZmVyIG9idWYs CiAJCQkJCQkJICAgdWludDMyIGxvd21hc2spOwogCiAvKiBoYXNoc2VhcmNoLmMgKi8KLWV4dGVy biBib29sIF9oYXNoX25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 Ci1leHRlcm4gYm9vbCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCSBJbmRleFNjYW5CYXRjaCBwcmlvcmJh dGNoKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKIAogLyogaGFzaHNvcnQuYyAqLwogdHlwZWRlZiBzdHJ1 Y3QgSFNwb29sIEhTcG9vbDsJLyogb3BhcXVlIHN0cnVjdCBpbiBoYXNoc29ydC5jICovCkBAIC00 NzYsNyArNDM0LDYgQEAgZXh0ZXJuIEJsb2NrTnVtYmVyIF9oYXNoX2dldF9vbGRibG9ja19mcm9t X25ld2J1Y2tldChSZWxhdGlvbiByZWwsIEJ1Y2tldCBuZXdfYnUKIGV4dGVybiBCbG9ja051bWJl ciBfaGFzaF9nZXRfbmV3YmxvY2tfZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQg b2xkX2J1Y2tldCk7CiBleHRlcm4gQnVja2V0IF9oYXNoX2dldF9uZXdidWNrZXRfZnJvbV9vbGRi dWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKIAkJCQkJCQkJCQkJCSB1aW50 MzIgbG93bWFzaywgdWludDMyIG1heGJ1Y2tldCk7Ci1leHRlcm4gdm9pZCBfaGFzaF9raWxsX2l0 ZW1zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIC8qIGhhc2guYyAqLwogZXh0ZXJuIHZvaWQgaGFz aGJ1Y2tldGNsZWFudXAoUmVsYXRpb24gcmVsLCBCdWNrZXQgY3VyX2J1Y2tldCwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL1JFQURNRQppbmRleCBmYzkwMzExMTcuLjk3MmJiNjY2YiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvUkVBRE1FCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JF QURNRQpAQCAtMjU1LDI4ICsyNTUsMjkgQEAgVGhlIHJlYWRlciBhbGdvcml0aG0gaXM6CiAJCXJl dGFrZSB0aGUgYnVmZmVyIGNvbnRlbnQgbG9jayBvbiBuZXcgYnVja2V0CiAJCWFycmFuZ2UgdG8g c2NhbiB0aGUgb2xkIGJ1Y2tldCBub3JtYWxseSBhbmQgdGhlIG5ldyBidWNrZXQgZm9yCiAgICAg ICAgICB0dXBsZXMgd2hpY2ggYXJlIG5vdCBtb3ZlZC1ieS1zcGxpdAotLS0gdGhlbiwgcGVyIHJl YWQgcmVxdWVzdDoKKy0tIHRoZW4sIHBlciBiYXRjaCAocGFnZSkgcmVxdWVzdDoKIAlyZWFjcXVp cmUgY29udGVudCBsb2NrIG9uIGN1cnJlbnQgcGFnZQogCXN0ZXAgdG8gbmV4dCBwYWdlIGlmIG5l Y2Vzc2FyeSAobm8gY2hhaW5pbmcgb2YgY29udGVudCBsb2NrcywgYnV0IGtlZXAKIAl0aGUgcGlu IG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCB0aHJvdWdob3V0IHRoZSBzY2FuKQotCXNhdmUgYWxsIHRo ZSBtYXRjaGluZyB0dXBsZXMgZnJvbSBjdXJyZW50IGluZGV4IHBhZ2UgaW50byBhbiBpdGVtcyBh cnJheQotCXJlbGVhc2UgcGluIGFuZCBjb250ZW50IGxvY2sgKGJ1dCBpZiBpdCBpcyBwcmltYXJ5 IGJ1Y2tldCBwYWdlIHJldGFpbgotCWl0cyBwaW4gdGlsbCB0aGUgZW5kIG9mIHRoZSBzY2FuKQot CWdldCB0dXBsZSBmcm9tIGFuIGl0ZW0gYXJyYXkKKwlzYXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVw bGVzIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gYSBiYXRjaAorCXJlbGVhc2UgY29udGVu dCBsb2NrIG9uIGN1cnJlbnQgcGFnZSByZXR1cm4gYmF0Y2ggdG8gdGFibGUgQU0gKHRhYmxlIEFN CisJd2lsbCBkcm9wIGJhdGNoJ3MgYnVmZmVyIHBpbiwgdGhvdWdoIHByaW1hcnkgYnVja2V0IHBh Z2UgcGluIGlzIGtlcHQKKwl1bnRpbCB0aGUgZW5kIG9mIHRoZSBzY2FuKQogLS0gYXQgc2NhbiBz aHV0ZG93bjoKLQlyZWxlYXNlIGFsbCBwaW5zIHN0aWxsIGhlbGQKKwlyZWxlYXNlIHNjYW4tb3du ZWQgcGlucyAoZS5nLiwgcHJpbWFyeSBidWNrZXQgcGFnZSBwaW4pIGFzIG5lZWRlZAogCiBIb2xk aW5nIHRoZSBidWZmZXIgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGZvciB0aGUgd2hv bGUgc2NhbiBwcmV2ZW50cwotdGhlIHJlYWRlcidzIGN1cnJlbnQtdHVwbGUgcG9pbnRlciBmcm9t IGJlaW5nIGludmFsaWRhdGVkIGJ5IHNwbGl0cyBvcgotY29tcGFjdGlvbnMuICAoT2YgY291cnNl LCBvdGhlciBidWNrZXRzIGNhbiBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0ZWQuKQordGhlIGJ1 Y2tldCBmcm9tIGJlaW5nIHJlb3JnYW5pemVkIGJ5IHNwbGl0cyBvciBjb21wYWN0aW9ucyB3aGls ZSB0aGUgc2NhbiBpcworaW4gcHJvZ3Jlc3MuICAoT2YgY291cnNlLCBvdGhlciBidWNrZXRzIGNh biBzdGlsbCBiZSBzcGxpdCBvciBjb21wYWN0ZWQuKQogCi1UbyBtaW5pbWl6ZSBsb2NrL3VubG9j ayB0cmFmZmljLCBoYXNoIGluZGV4IHNjYW4gYWx3YXlzIHNlYXJjaGVzIHRoZSBlbnRpcmUKLWhh c2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIGNvcHlp bmcgdGhlaXIgaGVhcCB0dXBsZQotSURzIGludG8gYmFja2VuZC1sb2NhbCBzdG9yYWdlLiBUaGUg aGVhcCB0dXBsZSBJRHMgYXJlIHRoZW4gcHJvY2Vzc2VkIHdoaWxlIG5vdAotaG9sZGluZyBhbnkg cGFnZSBsb2NrIHdpdGhpbiB0aGUgaW5kZXggdGhlcmVieSwgYWxsb3dpbmcgY29uY3VycmVudCBp bnNlcnRpb24KLXRvIGhhcHBlbiBvbiB0aGUgc2FtZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJl cXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlCi1jdXJyZW50IHNjYW4gcG9zaXRpb24gZm9yIHRo ZSByZWFkZXIuIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhlCi1idWNrZXQgcGFn ZSwgdG8gcHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgZGVsZXRpb25zIGFuZCBidWNrZXQgc3Bs aXQuCitUbyBtaW5pbWl6ZSBsb2NrL3VubG9jayB0cmFmZmljLCBoYXNoIGluZGV4IHNjYW5zIGFs d2F5cyBzZWFyY2ggdGhlIGVudGlyZQoraGFzaCBwYWdlIHRvIGlkZW50aWZ5IGFsbCB0aGUgbWF0 Y2hpbmcgaXRlbXMgYXQgb25jZSwgcmV0dXJuaW5nIHRoZW0gaW4KK2JhdGNoZXMgdG8gdGhlIHRh YmxlIEFNLiAgVGhlIHRhYmxlIEFNIHByb2Nlc3NlcyBiYXRjaGVzIHdoaWxlIG5vIHBhZ2UgbG9j aworaXMgaGVsZCB3aXRoaW4gdGhlIGluZGV4LCBhbGxvd2luZyBjb25jdXJyZW50IGluc2VydGlv biB0byBoYXBwZW4gb24gdGhlCitzYW1lIGluZGV4IHBhZ2Ugd2l0aG91dCBhbnkgcmVxdWlyZW1l bnQgb2YgcmUtZmluZGluZyB0aGUgY3VycmVudCBzY2FuCitwb3NpdGlvbiBmb3IgdGhlIHJlYWRl ci4gIFRoZSB0YWJsZSBBTSBjb250cm9scyB3aGVuIGJhdGNoIGJ1ZmZlciBwaW5zIGFyZQorZHJv cHBlZC4gIFdlIGRvIGNvbnRpbnVlIHRvIGhvbGQgYSBwaW4gb24gdGhlIHByaW1hcnkgYnVja2V0 IHBhZ2UsIHRvCitwcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBidWNrZXQgc3BsaXRzLgogCiBU byBhbGxvdyBmb3Igc2NhbnMgZHVyaW5nIGEgYnVja2V0IHNwbGl0LCBpZiBhdCB0aGUgc3RhcnQg b2YgdGhlIHNjYW4sIHRoZQogYnVja2V0IGlzIG1hcmtlZCBhcyBidWNrZXQtYmVpbmctcG9wdWxh dGVkLCBpdCBzY2FuIGFsbCB0aGUgdHVwbGVzIGluIHRoYXQKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpp bmRleCAyZTMyYmUyMzMuLjU2NjUzNGQwMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtMTEz LDEwICsxMTMsMTAgQEAgaGFzaGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0 bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5z Y2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAotCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0 dXBsZSwKLQkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAotCQkuYW1raWxsaXRlbXNiYXRjaCA9IE5VTEws Ci0JCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCisJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFt Z2V0YmF0Y2ggPSBoYXNoZ2V0YmF0Y2gsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gaGFzaGtpbGxp dGVtc2JhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBoYXNodW5ndWFyZGJhdGNoLAogCQkuYW1n ZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4sCiAJ CS5hbXBvc3Jlc2V0ID0gTlVMTCwKQEAgLTI5OSw1MyArMjk5LDI4IEBAIGhhc2hpbnNlcnQoUmVs YXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAogLyoKLSAqCWhhc2hn ZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWhhc2hnZXRi YXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhlIHNj YW4KICAqLwotYm9vbAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAoraGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJSGFz aFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQly ZXM7CiAKIAkvKiBIYXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5jZSB3ZSBzdG9yZSBv bmx5IHRoZSBoYXNoIGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1ZTsKIAotCS8qCi0J ICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0IGFk dmFuY2UgaXQgaW4gdGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4n dCBkb25lIHNvIHlldCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQgdGhlIGZpcnN0IGl0 ZW0gaW4gdGhlIHNjYW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKQotCQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UKKwlpZiAocHJpb3Ji YXRjaCA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBr aWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlpZiAoc2Nhbi0+a2ls bF9wcmlvcl90dXBsZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVtZW1iZXIgaXQgZm9y IGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJICogYXQgb25jZSBy aWdodCBhZnRlciBsZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBvZiBzY2FuLikKLQkJ CSAqIEluIGNhc2UgaWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4gZGlyZWN0aW9uIGl0 IGlzIHF1aXRlCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0IGVu dGVyZWQgbXVsdGlwbGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRldGVjdCB0aGF0OyBp bnN0ZWFkLCB3ZSBqdXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRyaWVzLgotCQkJICov Ci0JCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtpbGxlZEl0ZW1zID0g cGFsbG9jX2FycmF5KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKKwkJUmVsYXRpb24JcmVs ID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhJbmRl eFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1zW3NvLT5udW1LaWxsZWQrK10gPSBz by0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KKwkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7 CiAKLQkJLyoKLQkJICogTm93IGNvbnRpbnVlIHRoZSBzY2FuLgotCQkgKi8KLQkJcmVzID0gX2hh c2hfbmV4dChzY2FuLCBkaXIpOworCQkvKiBJbml0aWFsaXplIHRoZSBzY2FuLCBhbmQgcmV0dXJu IGZpcnN0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zICovCisJCXJldHVybiBfaGFzaF9maXJzdChz Y2FuLCBkaXIpOwogCX0KIAotCXJldHVybiByZXM7CisJLyogUmV0dXJuIGJhdGNoIHBvc2l0aW9u ZWQgYWZ0ZXIgY2FsbGVyJ3MgYmF0Y2ggKGluIGRpcmVjdGlvbiAnZGlyJykgKi8KKwlyZXR1cm4g X2hhc2hfbmV4dChzY2FuLCBkaXIsIHByaW9yYmF0Y2gpOwogfQogCiAKQEAgLTM1NSwyNiArMzMw LDI2IEBAIGhhc2hnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQogaW50NjQKIGhhc2hnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRi bSkKIHsKLQlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRjaCBiYXRjaDsKIAlpbnQ2NAkJbnRpZHMgPSAw OwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CiAKLQlyZXMgPSBfaGFzaF9maXJzdChzY2Fu LCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJzdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChiYXRjaCAhPSBOVUxM KQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUlu ZGV4XTsKKwkJZm9yIChpbnQgaXRlbUluZGV4ID0gYmF0Y2gtPmZpcnN0SXRlbTsKKwkJCSBpdGVt SW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVtOworCQkJIGl0ZW1JbmRleCsrKQorCQl7CisJCQl0Ym1f YWRkX3R1cGxlcyh0Ym0sICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZCwgMSwgdHJ1 ZSk7CisJCQludGlkcysrOworCQl9CiAKIAkJLyoKLQkJICogX2hhc2hfZmlyc3QgYW5kIF9oYXNo X25leHQgaGFuZGxlIGVsaW1pbmF0ZSBkZWFkIGluZGV4IGVudHJpZXMKLQkJICogd2hlbmV2ZXIg c2Nhbi0+aWdub3JlX2tpbGxlZF90dXBsZXMgaXMgdHJ1ZS4gIFRoZXJlZm9yZSwgdGhlcmUncwot CQkgKiBub3RoaW5nIHRvIGRvIGhlcmUgZXhjZXB0IGFkZCB0aGUgcmVzdWx0cyB0byB0aGUgVElE Qml0bWFwLgorCQkgKiBfaGFzaF9uZXh0IHJlbGVhc2VzIHRoZSBwcmlvciBiYXRjaCBmb3IgYml0 bWFwIGNhbGxlcnMgYmVmb3JlCisJCSAqIGFsbG9jYXRpbmcgdGhlIG5leHQgb25lLCBzbyBvbmx5 IG9uZSBiYXRjaCBpcyBldmVyIHVzZWQgYXQgYSB0aW1lCiAJCSAqLwotCQl0Ym1fYWRkX3R1cGxl cyh0Ym0sICYoY3Vyckl0ZW0tPmhlYXBUaWQpLCAxLCB0cnVlKTsKLQkJbnRpZHMrKzsKLQotCQly ZXMgPSBfaGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKTsKKwkJYmF0Y2ggPSBf aGFzaF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CiAJfQogCiAJcmV0 dXJuIG50aWRzOwpAQCAtMzk2LDE3ICszNzEsMTYgQEAgaGFzaGJlZ2luc2NhbihSZWxhdGlvbiBy ZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuID0gUmVsYXRpb25HZXRJbmRleFNj YW4ocmVsLCBua2V5cywgbm9yZGVyYnlzKTsKIAogCXNvID0gKEhhc2hTY2FuT3BhcXVlKSBwYWxs b2Nfb2JqZWN0KEhhc2hTY2FuT3BhcXVlRGF0YSk7Ci0JSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNv LT5jdXJyUG9zKTsKIAlzby0+aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCXNv LT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKIAlzby0+aGFzaHNv X2J1Y19wb3B1bGF0ZWQgPSBmYWxzZTsKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwog Ci0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsKLQlzby0+bnVtS2lsbGVkID0gMDsKLQogCXNjYW4t Pm9wYXF1ZSA9IHNvOworCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBNYXhJbmRleFR1cGxlc1BlclBh Z2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUgPSBNQVhBTElHTihzaXplb2YoSGFz aEJhdGNoRGF0YSkpOworCXNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPSAwOwogCiAJcmV0 dXJuIHNjYW47CiB9CkBAIC00MjEsMTggKzM5NSw4IEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJSGFzaFNjYW5PcGFxdWUg c28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp Ci0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2ls bGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRl bXMoc2Nhbik7Ci0JfQotCiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQkvKiBzZXQg cG9zaXRpb24gaW52YWxpZCAodGhpcyB3aWxsIGNhdXNlIF9oYXNoX2ZpcnN0IGNhbGwpICovCi0J SGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQogCS8qIFVwZGF0ZSBzY2FuIGtl eSwgaWYgYSBuZXcgb25lIGlzIGdpdmVuICovCiAJaWYgKHNjYW5rZXkgJiYgc2Nhbi0+bnVtYmVy T2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEsIHNjYW5rZXksIHNjYW4tPm51bWJl ck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOwpAQCAtNDQxLDYgKzQwNSwxMTIgQEAgaGFz aHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5 cywKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwogfQogCisvKgorICoJaGFzaGtpbGxp dGVtc2JhdGNoKCkgLS0gTWFyayBkZWFkIGl0ZW1zJyBpbmRleCB0dXBsZXMgTFBfREVBRAorICov Cit2b2lkCitoYXNoa2lsbGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5C YXRjaCBiYXRjaCkKK3sKKwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCUhh c2hCYXRjaERhdGEgKmhhc2hiYXRjaCA9IEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOwor CUJ1ZmZlcgkJYnVmOworCVBhZ2UJCXBhZ2U7CisJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOworCU9m ZnNldE51bWJlciBvZmZudW0sCisJCQkJbWF4b2ZmOworCWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9 IGZhbHNlOworCVhMb2dSZWNQdHIJbGF0ZXN0bHNuOworCisJQXNzZXJ0KGJhdGNoLT5udW1EZWFk ID4gMCk7CisKKwlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBoYXNoYmF0Y2gtPmN1cnJQYWdlLCBI QVNIX1JFQUQsCisJCQkJCSAgIExIX0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CisK KwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwlBc3NlcnQoYmF0Y2gtPmxz biA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRjaC0+bHNuICE9IGxhdGVzdGxzbikKKwl7CisJCS8q IE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KKwkJX2hhc2hfcmVsYnVmKHJlbCwgYnVm KTsKKwkJcmV0dXJuOworCX0KKworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CisJb3BhcXVl ID0gSGFzaFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51 bWJlcihwYWdlKTsKKworCS8qIEl0ZXJhdGUgdGhyb3VnaCBiYXRjaC0+ZGVhZEl0ZW1zW10gaW4g aW5kZXggcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURlYWQ7 IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJCUJh dGNoTWF0Y2hpbmdJdGVtICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwor CQlvZmZudW0gPSBjdXJySXRlbS0+aW5kZXhPZmZzZXQ7CisKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+ PSBiYXRjaC0+Zmlyc3RJdGVtICYmCisJCQkgICBpdGVtSW5kZXggPD0gYmF0Y2gtPmxhc3RJdGVt KTsKKworCQl3aGlsZSAob2ZmbnVtIDw9IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQ YWdlR2V0SXRlbUlkKHBhZ2UsIG9mZm51bSk7CisJCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRl eFR1cGxlKSBQYWdlR2V0SXRlbShwYWdlLCBpaWQpOworCisJCQlpZiAoSXRlbVBvaW50ZXJFcXVh bHMoJml0dXBsZS0+dF90aWQsICZjdXJySXRlbS0+dGFibGVUaWQpKQorCQkJeworCQkJCWlmICgh a2lsbGVkc29tZXRoaW5nKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVXNlIHRoZSBoaW50IGJp dCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KKwkJCQkJICogdXBkYXRlIHRoZSBw YWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCisJCQkJCSAqIGFyZSBu b3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgorCQkJCQkgKi8KKwkJCQkJ aWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCisJCQkJCQlnb3RvIHVubG9ja19wYWdl OworCQkJCX0KKworCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCisJCQkJSXRlbUlkTWFya0RlYWQo aWlkKTsKKwkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOworCQkJCWJyZWFrOwkJCS8qIG91dCBv ZiBpbm5lciBzZWFyY2ggbG9vcCAqLworCQkJfQorCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4 dChvZmZudW0pOworCQl9CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRvbmUg bGF0ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5ldmVyCisJICogd2UgbWFy ayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJICogTEhfUEFHRV9I QVNfREVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuCisJICov CisJaWYgKGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+aGFzaG9fZmxhZyB8PSBMSF9Q QUdFX0hBU19ERUFEX1RVUExFUzsKKwkJQnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0cnVl LCB0cnVlKTsKKwl9CisKK3VubG9ja19wYWdlOgorCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7Cit9 CisKKy8qCisgKgloYXNodW5ndWFyZGJhdGNoKCkgLS0gRHJvcCBiYXRjaCdzIFRJRCByZWN5Y2xp bmcgaW50ZXJsb2NrIChidWZmZXIgcGluKQorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0g d2hlbiBpdCdzIHNhZmUgdG8gZHJvcCB0aGUgYnVmZmVyIHBpbiBoZWxkIHRvCisgKiBwcmV2ZW50 IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBieSBWQUNVVU0uCisgKi8KK3ZvaWQKK2hhc2h1bmd1 YXJkYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlI YXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsK KworCS8qIGNoZWNrIGlmIHRoZSBwaW4gaGFzIGFscmVhZHkgYmVlbiByZWxlYXNlZCAobXVzdCBi ZSBpZGVtcG90ZW50KSAqLworCWlmIChCdWZmZXJJc1ZhbGlkKGhhc2hiYXRjaC0+YnVmKSkKKwl7 CisJCVJlbGVhc2VCdWZmZXIoaGFzaGJhdGNoLT5idWYpOworCQloYXNoYmF0Y2gtPmJ1ZiA9IElu dmFsaWRCdWZmZXI7CisJfQorfQorCiAvKgogICoJaGFzaGVuZHNjYW4oKSAtLSBjbG9zZSBkb3du IGEgc2NhbgogICovCkBAIC00NTAsMTcgKzUyMCw4IEBAIGhhc2hlbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAKLQlpZiAoSGFzaFNj YW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJl bnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1LaWxs ZWQgPiAwKQotCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKLQl9Ci0KIAlfaGFzaF9kcm9wc2Nh bmJ1ZihyZWwsIHNvKTsKIAotCWlmIChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCkKLQkJcGZyZWUo c28tPmtpbGxlZEl0ZW1zKTsKIAlwZnJlZShzbyk7CiAJc2Nhbi0+b3BhcXVlID0gTlVMTDsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaF94bG9nLmMKaW5kZXggMjA2MDYyMGM3Li5lMjZlZThiYjkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCkBAIC0xMTQxLDE0ICsxMTQxLDE0IEBA IGhhc2hfbWFzayhjaGFyICpwYWdlZGF0YSwgQmxvY2tOdW1iZXIgYmxrbm8pCiAJCS8qCiAJCSAq IEluIGhhc2ggYnVja2V0IGFuZCBvdmVyZmxvdyBwYWdlcywgaXQgaXMgcG9zc2libGUgdG8gbW9k aWZ5IHRoZQogCQkgKiBMUF9GTEFHUyB3aXRob3V0IGVtaXR0aW5nIGFueSBXQUwgcmVjb3JkLiBI ZW5jZSwgbWFzayB0aGUgbGluZQotCQkgKiBwb2ludGVyIGZsYWdzLiBTZWUgaGFzaGdldHR1cGxl KCksIF9oYXNoX2tpbGxfaXRlbXMoKSBmb3IgZGV0YWlscy4KKwkJICogcG9pbnRlciBmbGFncy4g U2VlIGhhc2hraWxsaXRlbXNiYXRjaCgpIGZvciBkZXRhaWxzLgogCQkgKi8KIAkJbWFza19scF9m bGFncyhwYWdlKTsKIAl9CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGhpbnQg Yml0IExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIG1heSByZW1haW4KLQkgKiB1bmxvZ2dlZC4gU28s IG1hc2sgaXQuIFNlZSBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJICogdW5sb2dn ZWQuIFNvLCBtYXNrIGl0LiBTZWUgaGFzaGtpbGxpdGVtc2JhdGNoKCkgZm9yIGRldGFpbHMuCiAJ ICovCiAJb3BhcXVlLT5oYXNob19mbGFnICY9IH5MSF9QQUdFX0hBU19ERUFEX1RVUExFUzsKIH0K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCmluZGV4IDI2M2JjNzNmMS4uNWFkZDcwMTkwIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMKQEAgLTI4MCwzMSArMjgwLDI0IEBAIF9oYXNo X2Ryb3BidWYoUmVsYXRpb24gcmVsLCBCdWZmZXIgYnVmKQogfQogCiAvKgotICoJX2hhc2hfZHJv cHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgdXNlZCBpbiBzY2FuLgorICoJX2hhc2hfZHJv cHNjYW5idWYoKSAtLSByZWxlYXNlIGJ1ZmZlcnMgb3duZWQgYnkgc2Nhbi4KICAqCi0gKiBUaGlz IHJvdXRpbmUgdW5waW5zIHRoZSBidWZmZXJzIHVzZWQgZHVyaW5nIHNjYW4gb24gd2hpY2ggd2UK LSAqIGhvbGQgbm8gbG9jay4KKyAqIFRoaXMgcm91dGluZSB1bnBpbnMgdGhlIGJ1ZmZlcnMgZm9y IHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBmb3IgdGhlCisgKiBidWNrZXQgcGFnZSBvZiBh IGJ1Y2tldCBiZWluZyBzcGxpdCBhcyBuZWVkZWQuCiAgKi8KIHZvaWQKIF9oYXNoX2Ryb3BzY2Fu YnVmKFJlbGF0aW9uIHJlbCwgSGFzaFNjYW5PcGFxdWUgc28pCiB7Ci0JLyogcmVsZWFzZSBwaW4g d2UgaG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28t Pmhhc2hzb19idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX2J1Y2tldF9idWYgIT0gc28tPmN1 cnJQb3MuYnVmKQorCS8qIHJlbGVhc2UgcGluIGhlbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAq LworCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikpCiAJCV9oYXNoX2Ry b3BidWYocmVsLCBzby0+aGFzaHNvX2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29fYnVja2V0X2J1 ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHByaW1hcnkg YnVja2V0IHBhZ2UgIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwotCWlmIChCdWZmZXJJc1ZhbGlk KHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19zcGxpdF9idWNr ZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1h cnkgYnVja2V0IHBhZ2Ugb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCisJaWYgKEJ1ZmZlcklzVmFs aWQoc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1ZihyZWwsIHNv LT5oYXNoc29fc3BsaXRfYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVm ID0gSW52YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgYW55IHBpbiB3ZSBzdGlsbCBob2xkICov Ci0JaWYgKEJ1ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKLQkJX2hhc2hfZHJvcGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsK LQogCS8qIHJlc2V0IHNwbGl0IHNjYW4gKi8KIAlzby0+aGFzaHNvX2J1Y19wb3B1bGF0ZWQgPSBm YWxzZTsKIAlzby0+aGFzaHNvX2J1Y19zcGxpdCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gv aGFzaHNlYXJjaC5jCmluZGV4IDg5ZDFjNWJjNi4uYTY4MTJjNmEyIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jCkBAIC0yMiwxMDUgKzIyLDk0IEBACiAjaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAotc3RhdGljIGJvb2wgX2hh c2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsCi0JCQkJCQkgICBT Y2FuRGlyZWN0aW9uIGRpcik7CitzdGF0aWMgYm9vbCBfaGFzaF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJ1ZmZlciBidWYsIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gpOwogc3RhdGljIGludAlfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJ bmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCQkJCSAgIE9mZnNldE51bWJlciBv ZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9zYXZl aXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwKKwkJCQkJCQkJCSAgIE9mZnNl dE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkJICAgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gpOworc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3NhdmVpdGVtKEluZGV4U2Nh bkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZu dW0sIEluZGV4VHVwbGUgaXR1cCk7CiBzdGF0aWMgdm9pZCBfaGFzaF9yZWFkbmV4dChJbmRleFNj YW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmcCwKIAkJCQkJCSAgIFBhZ2UgKnBhZ2VwLCBIYXNoUGFn ZU9wYXF1ZSAqb3BhcXVlcCk7CiAKIC8qCi0gKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0 IGl0ZW0gaW4gYSBzY2FuLgorICoJX2hhc2hfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBv ZiBpdGVtcyBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmli ZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5Ci0gKgkJYmUgcGlubmVkIGJ1dCBub3QgbG9j a2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlkZW50aWZpZXMKLSAqCQl3aGljaCBpdGVt IHdhcyBwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2Ny aWJlcyB0aGUgY3VycmVudCBwYWdlIGJhdGNoIHdpdGggaXRlbXMKKyAqCQlhbHJlYWR5IHJldHVy bmVkLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0 IHRvIHRoZSBUSUQgb2YgdGhlIG5leHQKLSAqCQloZWFwIHR1cGxlLiAgc28tPmN1cnJQb3MgaXMg dXBkYXRlZCBhcyBuZWVkZWQuCisgKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCByZXR1cm5zIGEgYmF0 Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcyBmcm9tCisgKgkJbmV4dCBwYWdlLiAgT3RoZXJ3 aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJlIGFyZSBubworICoJCWZ1cnRo ZXIgbWF0Y2hlcy4gIE5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAgKgot ICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Ugd2l0 aCBwaW4KLSAqCQloZWxkIG9uIGJ1Y2tldCBwYWdlIGJ1dCBubyBwaW5zIG9yIGxvY2tzIGhlbGQg b24gb3ZlcmZsb3cKLSAqCQlwYWdlLgorICoJCVJldGFpbnMgcGlucyBhY2NvcmRpbmcgdG8gdGhl IHNhbWUgcnVsZXMgYXMgX2hhc2hfZmlyc3QuCiAgKi8KLWJvb2wKLV9oYXNoX25leHQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0luZGV4U2NhbkJhdGNoCitfaGFzaF9u ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIEluZGV4U2NhbkJhdGNo IHByaW9yYmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlI YXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCUhhc2hT Y2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSGFzaEJhdGNoRGF0YSAqaGFzaHByaW9yYmF0Y2ggPSBI YXNoQmF0Y2hHZXREYXRhKHNjYW4sIHByaW9yYmF0Y2gpOwogCUJsb2NrTnVtYmVyIGJsa25vOwog CUJ1ZmZlcgkJYnVmOwotCWJvb2wJCWVuZF9vZl9zY2FuID0gZmFsc2U7CisJSW5kZXhTY2FuQmF0 Y2ggYmF0Y2g7CiAKIAkvKgotCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgdHVwbGUgb24gdGhlIGN1 cnJlbnQgcGFnZTsgb3IgaWYgZG9uZSwgdHJ5IHRvIHJlYWQKLQkgKiBkYXRhIGZyb20gdGhlIG5l eHQgb3IgcHJldmlvdXMgcGFnZSBiYXNlZCBvbiB0aGUgc2NhbiBkaXJlY3Rpb24uIEJlZm9yZQot CSAqIG1vdmluZyB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlIG1ha2Ugc3VyZSB0aGF0IHdl IGRlYWwgd2l0aCBhbGwgdGhlCi0JICoga2lsbGVkIGl0ZW1zLgorCSAqIFRoZSBjb3JlIGNvZGUg bXVzdCBkZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBmb3IgdXMu CisJICogQSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUgdGhhdCBmbGlwcyBwcmlvcmJhdGNoJ3Mg c2NhbiBkaXJlY3Rpb24gaXMKKwkgKiB1c2VkIGZvciB0aGlzLgorCSAqLworCUFzc2VydChwcmlv cmJhdGNoLT5kaXIgPT0gZGlyKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHdoaWNoIHBhZ2UgdG8g cmVhZCBuZXh0IGJhc2VkIG9uIHNjYW4gZGlyZWN0aW9uIGFuZCBkZXRhaWxzCisJICogdGFrZW4g ZnJvbSB0aGUgcHJpb3IgYmF0Y2gKIAkgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXIpKQotCXsKLQkJaWYgKCsrc28tPmN1cnJQb3MuaXRlbUluZGV4ID4gc28tPmN1cnJQb3MubGFz dEl0ZW0pCi0JCXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0 ZW1zKHNjYW4pOworCQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5uZXh0UGFnZTsKKwllbHNlCisJ CWJsa25vID0gaGFzaHByaW9yYmF0Y2gtPnByZXZQYWdlOwogCi0JCQlibGtubyA9IHNvLT5jdXJy UG9zLm5leHRQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0JCQl7Ci0J CQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1df UEFHRSk7Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQotCQkJCQll bmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4gPSB0cnVl OwotCQl9Ci0JfQorCS8qCisJICogRm9yIGJpdG1hcCBzY2FuIGNhbGxlcnMsIHJlbGVhc2UgdGhl IHByaW9yIGJhdGNoIG5vdyBzbyB0aGF0IHRoZQorCSAqIGFsbG9jYXRpb24gYmVsb3cgY2FuIHJl dXNlIGl0cyBtZW1vcnkuICBUaGF0IHdheSBiaXRtYXAgc2NhbnMgbmV2ZXIKKwkgKiBuZWVkIG1v cmUgdGhhbiBvbmUgYmF0Y2ggYWxsb2NhdGlvbi4KKwkgKi8KKwlpZiAoIXNjYW4tPnVzZWJhdGNo cmluZykKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgcHJpb3JiYXRjaCk7CisK KwlpZiAoIUJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCisJCXJldHVybiBOVUxMOworCisJLyog QWxsb2NhdGUgc3BhY2UgZm9yIG5leHQgYmF0Y2ggKi8KKwliYXRjaCA9IGluZGV4YW1fdXRpbF9i YXRjaF9hbGxvYyhzY2FuKTsKKworCS8qIEdldCB0aGUgYnVmZmVyIGZvciBuZXh0IGJhdGNoICov CisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYnVmID0gX2hhc2hfZ2V0YnVm KHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAJZWxzZQogCXsKLQkJ aWYgKC0tc28tPmN1cnJQb3MuaXRlbUluZGV4IDwgc28tPmN1cnJQb3MuZmlyc3RJdGVtKQotCQl7 Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsK KwkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwKKwkJCQkJCSAgIExI X0JVQ0tFVF9QQUdFIHwgTEhfT1ZFUkZMT1dfUEFHRSk7CiAKLQkJCWJsa25vID0gc28tPmN1cnJQ b3MucHJldlBhZ2U7Ci0JCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSkKLQkJCXsKLQkJ CQlidWYgPSBfaGFzaF9nZXRidWYocmVsLCBibGtubywgSEFTSF9SRUFELAotCQkJCQkJCQkgICBM SF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwotCi0JCQkJLyoKLQkJCQkgKiBXZSBh bHdheXMgbWFpbnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbgotCQkJ CSAqIG9wZXJhdGlvbiwgc28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFj cXVpcmVkCi0JCQkJICogaGVyZS4KLQkJCQkgKi8KLQkJCQlpZiAoYnVmID09IHNvLT5oYXNoc29f YnVja2V0X2J1ZiB8fAotCQkJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQot CQkJCQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVmKTsKLQotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uo c2NhbiwgJmJ1ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxz ZQotCQkJCWVuZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQorCQkvKgorCQkgKiBXZSBhbHdheXMgbWFp bnRhaW4gdGhlIHBpbiBvbiBidWNrZXQgcGFnZSBmb3Igd2hvbGUgc2NhbiBvcGVyYXRpb24sCisJ CSAqIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZCBoZXJl LgorCQkgKi8KKwkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJCWJ1ZiA9 PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJCQlfaGFzaF9kcm9wYnVmKHJlbCwgYnVm KTsKIAl9CiAKLQlpZiAoZW5kX29mX3NjYW4pCisJLyogUmVhZCB0aGUgbmV4dCBwYWdlIGFuZCBs b2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShz Y2FuLCBidWYsIGRpciwgYmF0Y2gpKQogCXsKLQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7 Ci0JCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCXJldHVybiBmYWxzZTsK KwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVM TDsKIAl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJy SXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4t PnhzX2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCXJldHVybiB0cnVlOworCS8qIFJl dHVybiB0aGUgYmF0Y2ggY29udGFpbmluZyBtYXRjaGVkIGl0ZW1zIGZyb20gbmV4dCBwYWdlICov CisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAtMjcwLDIyICsyNTksMjAgQEAgX2hhc2hfcmVh ZHByZXYoSW5kZXhTY2FuRGVzYyBzY2FuLAogfQogCiAvKgotICoJX2hhc2hfZmlyc3QoKSAtLSBG aW5kIHRoZSBmaXJzdCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX2ZpcnN0KCkgLS0gRmluZCB0 aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlXZSBmaW5kIHRoZSBm aXJzdCBpdGVtIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlCi0g KgkJaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRo IHRoZSBzY2FuCi0gKgkJZGVzY3JpcHRvci4KKyAqCQlXZSBmaW5kIHRoZSBmaXJzdCBiYXRjaCBv ZiBpdGVtcyAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0CisgKgkJYmF0Y2gpIGluIHRo ZSBpbmRleCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdpdGgK KyAqCQl0aGUgc2NhbiBkZXNjcmlwdG9yLgogICoKLSAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIGlm IHRoZSBwYWdlIGNvbnRhaW5pbmcgY3VycmVudCBpbmRleCB0dXBsZSBpcyBhbgotICoJCW92ZXJm bG93IHBhZ2UsIGJvdGggcGluIGFuZCBsb2NrIGFyZSByZWxlYXNlZCB3aGVyZWFzIGlmIGl0IGlz IGEgYnVja2V0Ci0gKgkJcGFnZSB0aGVuIGl0IGlzIHBpbm5lZCBidXQgbm90IGxvY2tlZCBhbmQg ZGF0YSBhYm91dCB0aGUgbWF0Y2hpbmcKLSAqCQl0dXBsZShzKSBvbiB0aGUgcGFnZSBoYXMgYmVl biBsb2FkZWQgaW50byBzby0+Y3VyclBvcywKLSAqCQlzY2FuLT54c19oZWFwdGlkIGlzIHNldCB0 byB0aGUgaGVhcCBUSUQgb2YgdGhlIGN1cnJlbnQgdHVwbGUuCisgKgkJT24gc3VjY2Vzc2Z1bCBl eGl0LCByZXR1cm5zIGEgYmF0Y2ggY29udGFpbmluZyBtYXRjaGluZyBpdGVtcy4KKyAqCQlPdGhl cndpc2UgcmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIg bWF0Y2hlcy4KKyAqCQlObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4gd2UgcmV0dXJuLgogICoK LSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgcmV0dXJuIGZhbHNlLCB3 aXRoIHBpbiBoZWxkIG9uCi0gKgkJYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVs ZCBvbiBvdmVyZmxvdyBwYWdlLgorICoJCVdlIGFsd2F5cyByZXRhaW4gb3VyIG93biBwaW4gb24g dGhlIGJ1Y2tldCBwYWdlLiAgV2hlbiB3ZSByZXR1cm4gYQorICoJCWJhdGNoIHdpdGggYSBidWNr ZXQgcGFnZSwgaXQgd2lsbCByZXRhaW4gaXRzIG93biByZWZlcmVuY2UgcGluLgogICovCi1ib29s CitJbmRleFNjYW5CYXRjaAogX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpcikKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwpAQCAt Mjk2LDcgKzI4Myw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIpCiAJQnVmZmVyCQlidWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBv cGFxdWU7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJySXRlbTsKKwlJbmRleFNjYW5CYXRjaCBiYXRj aDsKIAogCXBnc3RhdF9jb3VudF9pbmRleF9zY2FuKHJlbCk7CiAJaWYgKHNjYW4tPmluc3RydW1l bnQpCkBAIC0zMjYsNyArMzEzLDcgQEAgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkgKiBpdGVtcyBpbiB0aGUgaW5kZXguCiAJICovCiAJaWYgKGN1 ci0+c2tfZmxhZ3MgJiBTS19JU05VTEwpCi0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7 CiAKIAkvKgogCSAqIE9rYXkgdG8gY29tcHV0ZSB0aGUgaGFzaCBrZXkuICBXZSB3YW50IHRvIGRv IHRoaXMgYmVmb3JlIGFjcXVpcmluZyBhbnkKQEAgLTQxOSwxOTEgKzQwNiwxNTIgQEAgX2hhc2hf Zmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJCV9oYXNoX3Jl YWRuZXh0KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKIAl9CiAKLQkvKiByZW1lbWJlciB3 aGljaCBidWZmZXIgd2UgaGF2ZSBwaW5uZWQsIGlmIGFueSAqLwotCUFzc2VydChCdWZmZXJJc0lu dmFsaWQoc28tPmN1cnJQb3MuYnVmKSk7Ci0Jc28tPmN1cnJQb3MuYnVmID0gYnVmOworCS8qIEFs bG9jYXRlIHNwYWNlIGZvciBmaXJzdCBiYXRjaCAqLworCWJhdGNoID0gaW5kZXhhbV91dGlsX2Jh dGNoX2FsbG9jKHNjYW4pOwogCi0JLyogTm93IGZpbmQgYWxsIHRoZSB0dXBsZXMgc2F0aXNmeWlu ZyB0aGUgcXVhbGlmaWNhdGlvbiBmcm9tIGEgcGFnZSAqLwotCWlmICghX2hhc2hfcmVhZHBhZ2Uo c2NhbiwgJmJ1ZiwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFJlYWQgdGhlIGZpcnN0IHBh Z2UgYW5kIGxvYWQgaXRlbXMgaW50byBhbGxvY2F0ZWQgYmF0Y2ggKi8KKwlpZiAoIV9oYXNoX3Jl YWRwYWdlKHNjYW4sIGJ1ZiwgZGlyLCBiYXRjaCkpCisJeworCQlpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShzY2FuLCBiYXRjaCk7CisJCXJldHVybiBOVUxMOworCX0KIAotCS8qIE9LLCBpdGVt SW5kZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0 ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNfaGVhcHRpZCA9IGN1cnJJdGVt LT5oZWFwVGlkOwotCi0JLyogaWYgd2UncmUgaGVyZSwgX2hhc2hfcmVhZHBhZ2UgZm91bmQgYSB2 YWxpZCB0dXBsZXMgKi8KLQlyZXR1cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRh aW5pbmcgbWF0Y2hlZCBpdGVtcyAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKLSAqCV9oYXNo X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBwYWdlIGludG8gc28t PmN1cnJQb3MKKyAqCV9oYXNoX3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBp bmRleCBwYWdlIGludG8gYmF0Y2gKICAqCiAgKglXZSBzY2FuIGFsbCB0aGUgaXRlbXMgaW4gdGhl IGN1cnJlbnQgaW5kZXggcGFnZSBhbmQgc2F2ZSB0aGVtIGludG8KLSAqCXNvLT5jdXJyUG9zIGlm IGl0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbi4gSWYgbm8gbWF0Y2hpbmcgaXRlbXMKKyAq CXRoZSBiYXRjaCBpZiB0aGV5IHNhdGlzZnkgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1hdGNo aW5nIGl0ZW1zCiAgKglhcmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgcGFnZSwgd2UgbW92ZSB0byB0 aGUgbmV4dCBvciBwcmV2aW91cyBwYWdlCiAgKglpbiBhIGJ1Y2tldCBjaGFpbiBhcyBpbmRpY2F0 ZWQgYnkgdGhlIGRpcmVjdGlvbi4KICAqCiAgKglSZXR1cm4gdHJ1ZSBpZiBhbnkgbWF0Y2hpbmcg aXRlbXMgYXJlIGZvdW5kIGVsc2UgcmV0dXJuIGZhbHNlLgogICovCiBzdGF0aWMgYm9vbAotX2hh c2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZlAsIFNjYW5EaXJlY3Rp b24gZGlyKQorX2hhc2hfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBT Y2FuRGlyZWN0aW9uIGRpciwKKwkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCVJlbGF0 aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFz aFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlCdWZmZXIJCWJ1ZjsKKwlIYXNoQmF0Y2hEYXRh ICpoYXNoYmF0Y2ggPSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKIAlQYWdlCQlwYWdl OwogCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKIAlPZmZzZXROdW1iZXIgb2ZmbnVtOwogCXVpbnQx NgkJaXRlbUluZGV4OwogCi0JYnVmID0gKmJ1ZlA7CiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYnVm KSk7CiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJG TE9XX1BBR0UpOwogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7CiAJb3BhcXVlID0gSGFzaFBh Z2VHZXRPcGFxdWUocGFnZSk7CiAKLQlzby0+Y3VyclBvcy5idWYgPSBidWY7Ci0Jc28tPmN1cnJQ b3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOworCWhhc2hiYXRjaC0+YnVm ID0gYnVmOworCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYp OworCWJhdGNoLT5kaXIgPSBkaXI7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp KQogCXsKLQkJQmxvY2tOdW1iZXIgcHJldl9ibGtubyA9IEludmFsaWRCbG9ja051bWJlcjsKLQog CQlmb3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9jYXRlIHN0YXJ0aW5nIHBvc2l0aW9u IGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9oYXNoX2JpbnNlYXJjaChwYWdlLCBz by0+aGFzaHNvX3NrX2hhc2gpOwogCi0JCQlpdGVtSW5kZXggPSBfaGFzaF9sb2FkX3F1YWxpZmll ZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpcik7CisJCQlpdGVtSW5kZXggPSBfaGFzaF9s b2FkX3F1YWxpZmllZF9pdGVtcyhzY2FuLCBwYWdlLCBvZmZudW0sIGRpciwKKwkJCQkJCQkJCQkJ CSAgIGJhdGNoKTsKIAogCQkJaWYgKGl0ZW1JbmRleCAhPSAwKQogCQkJCWJyZWFrOwogCiAJCQkv KgotCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVu dCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgbmV4dCBwYWdlLiBCZWZvcmUgbGVhdmluZyB0aGUg Y3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55Ci0JCQkgKiBraWxsZWQgaXRlbXMuCisJCQkgKiBD b3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50IHBhZ2UsIHRy eSB0bworCQkJICogbW92ZSB0byB0aGUgbmV4dCBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVt S2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQkvKgotCQkJICog SWYgdGhpcyBpcyBhIHByaW1hcnkgYnVja2V0IHBhZ2UsIGhhc2hvX3ByZXZibGtubyBpcyBub3Qg YSByZWFsCi0JCQkgKiBibG9jayBudW1iZXIuCi0JCQkgKi8KLQkJCWlmIChzby0+Y3VyclBvcy5i dWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNv LT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQlwcmV2X2Jsa25vID0gSW52YWxpZEJsb2Nr TnVtYmVyOwotCQkJZWxzZQotCQkJCXByZXZfYmxrbm8gPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtu bzsKLQogCQkJX2hhc2hfcmVhZG5leHQoc2NhbiwgJmJ1ZiwgJnBhZ2UsICZvcGFxdWUpOwotCQkJ aWYgKEJ1ZmZlcklzVmFsaWQoYnVmKSkKLQkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7 Ci0JCQkJc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwot CQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQgcHJl dmlvdXMgYmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8ga25v dyB0aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRpbmcg dGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAqIGRv bid0IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBfaGFz aF9raWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMKLQkJ CQkgKiBmdW5jdGlvbiByZXR1cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQYWdl ID0gcHJldl9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051 bWJlcjsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJCQlpZiAoIUJ1ZmZlcklzVmFsaWQo YnVmKSkKIAkJCQlyZXR1cm4gZmFsc2U7Ci0JCQl9CisKKwkJCWhhc2hiYXRjaC0+YnVmID0gYnVm OworCQkJaGFzaGJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJ CX0KIAotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRl bSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNo LT5maXJzdEl0ZW0gPSAwOworCQliYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0K IAllbHNlCiAJewotCQlCbG9ja051bWJlciBuZXh0X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVy OwotCiAJCWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9z aXRpb24gYnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoX2xh c3QocGFnZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9h ZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4 ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJ CQkJCQkJCQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gTWF4SW5kZXhUdXBs ZXNQZXJQYWdlKQogCQkJCWJyZWFrOwogCiAJCQkvKgotCQkJICogQ291bGQgbm90IGZpbmQgYW55 IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUg cHJldmlvdXMgcGFnZS4gQmVmb3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRo Ci0JCQkgKiBhbnkga2lsbGVkIGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNo aW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhl IHByZXZpb3VzIHBhZ2UKIAkJCSAqLwotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9o YXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhh c2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3Bs aXRfYnVja2V0X2J1ZikKLQkJCQluZXh0X2Jsa25vID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87 Ci0KIAkJCV9oYXNoX3JlYWRwcmV2KHNjYW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlm IChCdWZmZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwot CQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJ CX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZp b3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cg dGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRo YXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24n dCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hf a2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJ ICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9 IEludmFsaWRCbG9ja051bWJlcjsKLQkJCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG5leHRfYmxr bm87Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1 ZikpCiAJCQkJcmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsK KwkJCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYpOwogCQl9 CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5s YXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1J bmRleCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSBp dGVtSW5kZXg7CisJCWJhdGNoLT5sYXN0SXRlbSA9IE1heEluZGV4VHVwbGVzUGVyUGFnZSAtIDE7 CiAJfQogCi0JaWYgKHNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwK LQkJc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkvKgor CSAqIFNhdmVkIGF0IGxlYXN0IG9uZSBtYXRjaCBpbiBiYXRjaC5pdGVtc1tdLiAgUHJlcGFyZSBm b3IgaGFzaGdldGJhdGNoIHRvCisJICogcmV0dXJuIGl0IGJ5IGluaXRpYWxpemluZyByZW1haW5p bmcgdW5pbml0aWFsaXplZCBmaWVsZHMuCisJICovCisJaWYgKGhhc2hiYXRjaC0+YnVmID09IHNv LT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQloYXNoYmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX3Nw bGl0X2J1Y2tldF9idWYpCiAJewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IEludmFsaWRCbG9j a051bWJlcjsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmhhc2hvX25leHRibGtu bzsKLQkJTG9ja0J1ZmZlcihzby0+Y3VyclBvcy5idWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJ CS8qCisJCSAqIEJhdGNoJ3MgYnVmZmVyIGlzIGVpdGhlciB0aGUgcHJpbWFyeSBidWNrZXQsIG9y IGEgYnVja2V0IGJlaW5nCisJCSAqIHBvcHVsYXRlZCBkdWUgdG8gYSBzcGxpdC4KKwkJICoKKwkJ ICogSW5jcmVtZW50IGxvY2FsIHJlZmVyZW5jZSBjb3VudCBzbyB0aGF0IGJhdGNoIGdldHMgYW4g aW5kZXBlbmRlbnQKKwkJICogYnVmZmVyIHJlZmVyZW5jZSB0aGF0IGNhbiBiZSByZWxlYXNlZCAo YnkgdGhlIGNvcmUgY29kZS90YWJsZSBBTSkKKwkJICogYmVmb3JlIHRoZSBoYXNoc29fYnVja2V0 X2J1Zi9oYXNoc29fc3BsaXRfYnVja2V0X2J1ZiByZWZlcmVuY2VzIGFyZQorCQkgKiByZWxlYXNl ZC4KKwkJICovCisJCUluY3JCdWZmZXJSZWZDb3VudChoYXNoYmF0Y2gtPmJ1Zik7CisKKwkJLyog Q2FuIG9ubHkgdXNlIG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+cHJl dlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWhhc2hiYXRjaC0+bmV4dFBhZ2UgPSBvcGFx dWUtPmhhc2hvX25leHRibGtubzsKIAl9CiAJZWxzZQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBh Z2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZibGtubzsKLQkJc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBv cGFxdWUtPmhhc2hvX25leHRibGtubzsKLQkJX2hhc2hfcmVsYnVmKHJlbCwgc28tPmN1cnJQb3Mu YnVmKTsKLQkJc28tPmN1cnJQb3MuYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJLyogQ2FuIHVzZSBv cGFxdWUtPmhhc2hvX3ByZXZibGtubyBhbmQgb3BhcXVlLT5oYXNob19uZXh0Ymxrbm8gKi8KKwkJ aGFzaGJhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOworCQloYXNoYmF0 Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCi0JQXNzZXJ0KHNv LT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJLyogd2Ugc2F2 ZWQgb25lIG9yIG1vcmUgbWF0Y2hlcyBpbiBiYXRjaC5pdGVtc1tdICovCisJaW5kZXhhbV91dGls X2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCwgaGFzaGJhdGNoLT5idWYpOworCisJQXNzZXJ0KGJh dGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIAog LyoKICAqIExvYWQgYWxsIHRoZSBxdWFsaWZpZWQgaXRlbXMgZnJvbSBhIGN1cnJlbnQgaW5kZXgg cGFnZQotICogaW50byBzby0+Y3VyclBvcy4gSGVscGVyIGZ1bmN0aW9uIGZvciBfaGFzaF9yZWFk cGFnZS4KKyAqIGludG8gYmF0Y2guIEhlbHBlciBmdW5jdGlvbiBmb3IgX2hhc2hfcmVhZHBhZ2Uu CiAgKi8KIHN0YXRpYyBpbnQKIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbiwgUGFnZSBwYWdlLAotCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRp cmVjdGlvbiBkaXIpCisJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9u IGRpciwKKwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUhhc2hTY2FuT3BhcXVl IHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJSW5kZXhUdXBsZQlpdHVwOwpA QCAtNjQwLDcgKzU4OCw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4U2NhbkRl c2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJCV9oYXNoX2NoZWNrcXVhbChzY2FuLCBpdHVwKSkKIAkJ CXsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVyIGl0ICovCi0JCQkJX2hh c2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQlfaGFzaF9zYXZl aXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJCWl0ZW1JbmRleCsrOwog CQkJfQogCQkJZWxzZQpAQCAtNjg3LDcgKzYzNSw3IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0 ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCQkJewogCQkJCWl0ZW1JbmRleC0t OwogCQkJCS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIgaXQgKi8KLQkJCQlfaGFz aF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCV9oYXNoX3NhdmVp dGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQl9CiAJCQllbHNlCiAJCQl7 CkBAIC03MDYsMTMgKzY1NCwxNCBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNj YW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAl9CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBp bnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRl bSBpbnRvIGJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9o YXNoX3NhdmVpdGVtKEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorX2hhc2hfc2F2 ZWl0ZW0oSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkgICBPZmZzZXRO dW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApCiB7Ci0JSGFzaFNjYW5Qb3NJdGVtICpjdXJy SXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVt ICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVtLT5oZWFw VGlkID0gaXR1cC0+dF90aWQ7CisJY3Vyckl0ZW0tPnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CiAJ Y3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOworCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9 IDA7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwppbmRleCAwODFhZGJjODguLjMzMWQ1 ZjRkYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCkBAIC0xNiw3ICsxNiw2IEBACiAK ICNpbmNsdWRlICJhY2Nlc3MvaGFzaC5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgi Ci0jaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0aWxz LmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CkBAIC0zMyw3ICszMiw3IEBAIF9oYXNoX2NoZWNrcXVhbChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4VHVwbGUgaXR1cCkKIAkvKgogCSAqIEN1cnJlbnRseSwgd2UgY2FuJ3QgY2hlY2sgYW55IG9m IHRoZSBzY2FuIGNvbmRpdGlvbnMgc2luY2Ugd2UgZG8gbm90CiAJICogaGF2ZSB0aGUgb3JpZ2lu YWwgaW5kZXggZW50cnkgdmFsdWUgdG8gc3VwcGx5IHRvIHRoZSBza19mdW5jLiBBbHdheXMKLQkg KiByZXR1cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldHR1cGxlIGFscmVhZHkgc2V0IHRo ZSByZWNoZWNrIGZsYWcKKwkgKiByZXR1cm4gdHJ1ZTsgd2UgZXhwZWN0IHRoYXQgaGFzaGdldGJh dGNoIGFscmVhZHkgc2V0IHRoZSByZWNoZWNrIGZsYWcKIAkgKiB0byBtYWtlIHRoZSBtYWluIGlu ZGV4c2NhbiBjb2RlIGRvIGl0LgogCSAqLwogI2lmZGVmIE5PVF9VU0VECkBAIC01MDUsMTI5ICs1 MDQsMyBAQCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwg QnVja2V0IG9sZF9idWNrZXQsCiAKIAlyZXR1cm4gbmV3X2J1Y2tldDsKIH0KLQotLyoKLSAqIF9o YXNoX2tpbGxfaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRlbXMgYW4gaW5kZXhzY2Fu IGNhbGxlciBoYXMKLSAqIHRvbGQgdXMgd2VyZSBraWxsZWQuCi0gKgotICogc2Nhbi0+b3BhcXVl LCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJv dXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJh bGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDAp LgotICoKLSAqIFRoZSBjYWxsZXIgZG9lcyBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHBhZ2UgYW5k IG1heSBvciBtYXkgbm90IGhhdmUgdGhlCi0gKiBwYWdlIHBpbm5lZCBpbiBhIGJ1ZmZlci4gIE5v dGUgdGhhdCByZWFkLWxvY2sgaXMgc3VmZmljaWVudCBmb3Igc2V0dGluZwotICogTFBfREVBRCBz dGF0dXMgKHdoaWNoIGlzIG9ubHkgYSBoaW50KS4KLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaGF2 ZSBwaW4gb24gYnVja2V0IGJ1ZmZlciwgYnV0IG1heSBvciBtYXkgbm90IGhhdmUgcGluCi0gKiBv biBvdmVyZmxvdyBidWZmZXIsIGFzIGluZGljYXRlZCBieSBIYXNoU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKS4KLSAqCi0gKiBXZSBtYXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNz dW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0IG9uZXMgdG8KLSAqIGRlbGV0ZS4KLSAqCi0gKiBUaGVy ZSBhcmUgbmV2ZXIgYW55IHNjYW5zIGFjdGl2ZSBpbiBhIGJ1Y2tldCBhdCB0aGUgdGltZSBWQUNV VU0gYmVnaW5zLAotICogYmVjYXVzZSBWQUNVVU0gdGFrZXMgYSBjbGVhbnVwIGxvY2sgb24gdGhl IHByaW1hcnkgYnVja2V0IHBhZ2UgYW5kIHNjYW5zCi0gKiBob2xkIGEgcGluLiAgQSBzY2FuIGNh biBiZWdpbiBhZnRlciBWQUNVVU0gbGVhdmVzIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlCi0gKiBi dXQgYmVmb3JlIGl0IGZpbmlzaGVzIHRoZSBlbnRpcmUgYnVja2V0LCBidXQgaXQgY2FuIG5ldmVy IHBhc3MgVkFDVVVNLAotICogYmVjYXVzZSBWQUNVVU0gYWx3YXlzIGxvY2tzIHRoZSBuZXh0IHBh Z2UgYmVmb3JlIHJlbGVhc2luZyB0aGUgbG9jayBvbgotICogdGhlIHByZXZpb3VzIG9uZS4gIFRo ZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkKLSAqIGtp bGxpbmcgYSBUSUQgdGhhdCBoYXMgYmVlbiByZXVzZWQgZm9yIGFuIHVucmVsYXRlZCB0dXBsZS4K LSAqLwotdm9pZAotX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JSGFz aFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJsb2NrTnVtYmVyIGJsa25vOwotCUJ1ZmZl cgkJYnVmOwotCVBhZ2UJCXBhZ2U7Ci0JSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCU9mZnNldE51 bWJlciBvZmZudW0sCi0JCQkJbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxs ZWQ7Ci0JaW50CQkJaTsKLQlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKLQlib29sCQlo YXZlUGluID0gZmFsc2U7Ci0KLQlBc3NlcnQoc28tPm51bUtpbGxlZCA+IDApOwotCUFzc2VydChz by0+a2lsbGVkSXRlbXMgIT0gTlVMTCk7Ci0JQXNzZXJ0KEhhc2hTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCi0JLyoKLQkgKiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdl IGRvbid0IGxvb2sgZm9yIHNhbWUgaXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlz by0+bnVtS2lsbGVkID0gMDsKLQotCWJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7Ci0JaWYg KEhhc2hTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyoKLQkJICogV2UgYWxy ZWFkeSBoYXZlIHBpbiBvbiB0aGlzIGJ1ZmZlciwgc28sIGFsbCB3ZSBuZWVkIHRvIGRvIGlzCi0J CSAqIGFjcXVpcmUgbG9jayBvbiBpdC4KLQkJICovCi0JCWhhdmVQaW4gPSB0cnVlOwotCQlidWYg PSBzby0+Y3VyclBvcy5idWY7Ci0JCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7 Ci0JfQotCWVsc2UKLQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwg TEhfT1ZFUkZMT1dfUEFHRSk7Ci0KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwotCW9wYXF1 ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXRO dW1iZXIocGFnZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlp bnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUhhc2hTY2FuUG9zSXRlbSAq Y3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKLQotCQlvZmZudW0gPSBj dXJySXRlbS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBv cy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7 Ci0KLQkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFn ZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOwotCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhU dXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKLQotCQkJaWYgKEl0ZW1Qb2ludGVyRXF1YWxz KCZpdHVwbGUtPnRfdGlkLCAmY3Vyckl0ZW0tPmhlYXBUaWQpKQotCQkJewotCQkJCWlmICgha2ls bGVkc29tZXRoaW5nKQotCQkJCXsKLQkJCQkJLyoKLQkJCQkJICogVXNlIHRoZSBoaW50IGJpdCBp bmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KLQkJCQkJICogdXBkYXRlIHRoZSBwYWdl IHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCi0JCQkJCSAqIGFyZSBub3Qg YWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgotCQkJCQkgKi8KLQkJCQkJaWYg KCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCi0JCQkJCQlnb3RvIHVubG9ja19wYWdlOwot CQkJCX0KLQotCQkJCS8qIGZvdW5kIHRoZSBpdGVtICovCi0JCQkJSXRlbUlkTWFya0RlYWQoaWlk KTsKLQkJCQlraWxsZWRzb21ldGhpbmcgPSB0cnVlOwotCQkJCWJyZWFrOwkJCS8qIG91dCBvZiBp bm5lciBzZWFyY2ggbG9vcCAqLwotCQkJfQotCQkJb2ZmbnVtID0gT2Zmc2V0TnVtYmVyTmV4dChv ZmZudW0pOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBTaW5jZSB0aGlzIGNhbiBiZSByZWRvbmUgbGF0 ZXIgaWYgbmVlZGVkLCBtYXJrIGFzIGRpcnR5IGhpbnQuIFdoZW5ldmVyCi0JICogd2UgbWFyayBh bnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFnZSdzCi0JICogTEhfUEFHRV9IQVNf REVBRF9UVVBMRVMgZmxhZywgd2hpY2ggaXMgbGlrZXdpc2UganVzdCBhIGhpbnQuCi0JICovCi0J aWYgKGtpbGxlZHNvbWV0aGluZykKLQl7Ci0JCW9wYXF1ZS0+aGFzaG9fZmxhZyB8PSBMSF9QQUdF X0hBU19ERUFEX1RVUExFUzsKLQkJQnVmZmVyRmluaXNoU2V0SGludEJpdHMoYnVmLCB0cnVlLCB0 cnVlKTsKLQl9Ci0KLXVubG9ja19wYWdlOgotCWlmIChzby0+aGFzaHNvX2J1Y2tldF9idWYgPT0g c28tPmN1cnJQb3MuYnVmIHx8Ci0JCWhhdmVQaW4pCi0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3Mu YnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwotCWVsc2UKLQkJX2hhc2hfcmVsYnVmKHJlbCwgYnVm KTsKLX0KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sCmluZGV4IDJhMmIwNDk3Yi4uNmEwNjE5YTM4IDEwMDY0NAotLS0gYS9k b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwK QEAgLTg0NSw3ICs4NDUsOCBAQCBhbWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8 ZnVuY3Rpb24+dGFibGVhbV91dGlsX2ZyZWVfYmF0Y2g8L2Z1bmN0aW9uPikuICBOb3RlIGFsc28g dGhhdAogICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgbXVzdCBu ZXZlciBtb2RpZnkgdGhlCiAgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+ IHBhcmFtZXRlci4gIFRoZSBjb3JlCi0gICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhCisgICA8ZmlsZW5hbWU+ c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBhbmQKKyAgIDxmaWxlbmFtZT5z cmMvYmFja2VuZC9hY2Nlc3MvaGFzaC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbnMgcHJvdmlk ZQogICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGludGVyZmFjZS4KICAgPC9wYXJhPgogCkBAIC05MjEsOCArOTIyLDggQEAgYW1raWxs aXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICA8cGFyYT4KICAgIFdoaWxlIGltcGxl bWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGlzIG9wdGlvbmFs LAogICAgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9yIHBlcmZvcm1hbmNlLCBhcyBpdCBhbGxv d3MgZnV0dXJlIHNjYW5zIHRvIHNraXAKLSAgIGtub3duLWRlYWQgaW5kZXggZW50cmllcy4gIFRo ZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50bHkKLSAgIHN1cHBvcnQgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBpbXBsZW1lbnRzCisgICBrbm93 bi1kZWFkIGluZGV4IGVudHJpZXMuICBCb3RoIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZHMgdGhh dCBjdXJyZW50bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAo Qi10cmVlIGFuZCBoYXNoKSBpbXBsZW1lbnQKICAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+ IG1hcmtpbmcsIHRob3VnaCB0aGlyZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9kcwogICAgYXJl IGZyZWUgdG8gY2hvb3NlIHdoZXRoZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KICAgIFRo ZSB0YWJsZSBBTSBtYXkgY2FsbApAQCAtOTYxLDggKzk2Miw4IEBAIGFta2lsbGl0ZW1zYmF0Y2gg KEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBOb3RlIHRo YXQgdGhpcyBMU04gY29tcGFyaXNvbiB0ZWNobmlxdWUgcmVxdWlyZXMKICAgIHRoZSBpbmRleCBB TSB0byB1c2UgZmFrZSAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05zIG9uIGl0cyBwYWdl cyBmb3IKICAgIHJlbGF0aW9ucyB3aGVyZSBXQUwgaXMgbm90IGdlbmVyYXRlZCwgc2luY2UgcmVh bCBMU05zIGFyZSBub3QgYXZhaWxhYmxlIGluCi0gICB0aGF0IGNhc2UuICBTZWUgdGhlIEItdHJl ZSBpbmRleCBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UKLSAgIGV4YW1wbGUgb2YgdGhp cyB0ZWNobmlxdWUuICBBbiBpbmRleCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExT TnMKKyAgIHRoYXQgY2FzZS4gIFNlZSB0aGUgQi10cmVlIGFuZCBoYXNoIGluZGV4IGltcGxlbWVu dGF0aW9ucyBmb3IgcmVmZXJlbmNlCisgICBleGFtcGxlcyBvZiB0aGlzIHRlY2huaXF1ZS4gIEFu IGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcwogICAgY2FuIHN0aWxs IHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiwgYnV0IHNob3Vs ZCBzaW1wbHkKICAgIGRvIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9lcyBub3QgZ2VuZXJh dGUgV0FMIChpLmUuLCB3aGVuCiAgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVkc1dBTCgpPC9mdW5j dGlvbj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KQEAgLTk4OSw5ICs5OTAs OSBAQCBhbXVuZ3VhcmRiYXRjaCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgbGVhZiBwYWdlLCB3 aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkKICAgIDxjb21tYW5kPlZB Q1VVTTwvY29tbWFuZD4uCiAgICBGb3JtYWxseSwgYW4gaW5kZXggQU0gbWF5IGhvbGQgYSBkaWZm ZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxlCi0gICBpbnRlcmxvY2tzLCBpbiBp dHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgdGhlIGJ1aWx0LWluCi0g ICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g Jm1kYXNoOyBCLXRyZWUKLSAgICZtZGFzaDsgaG9sZHMgYSBzaW5nbGUgYnVmZmVyIHBpbi4gIFNl ZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CisgICBpbnRlcmxvY2tzLCBpbiBpdHMg cGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJhY3RpY2UgYm90aCBidWlsdC1pbgorICAg aW5kZXggQU1zIHRoYXQgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZt ZGFzaDsgQi10cmVlIGFuZAorICAgaGFzaCAmbWRhc2g7IGhvbGQgYSBzaW5nbGUgYnVmZmVyIHBp bi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+CiAgICBmb3IgZGV0YWlscyBv biBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhpcyBmdW5jdGlv bgogICAgbXVzdCBiZSBpZGVtcG90ZW50OiBpdCBtYXkgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNl IGZvciB0aGUgc2FtZSBiYXRjaCwgYW5kCiAgICBtdXN0IGRvIG5vdGhpbmcgaWYgdGhlIGludGVy bG9jayBoYXMgYWxyZWFkeSBiZWVuIGRyb3BwZWQuICBJbXBsZW1lbnRhdGlvbnMKQEAgLTEwNjQs OCArMTA2NSw4IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICA8ZnVuY3Rp b24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzY2FuczsgZHVyaW5nIDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4KICAgIHNjYW5zIHRoZSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFs PiBpcyBzdHJpY3RseSBvd25lZCBieSB0aGUgdGFibGUgQU0KICAgIGFuZCBjb3JlIGNvZGUsIGFu ZCB0aGUgaW5kZXggQU0gbXVzdCBuZXZlciByZWxlYXNlIGl0LiAgU2VlCi0gICA8ZnVuY3Rpb24+ X2J0X25leHQ8L2Z1bmN0aW9uPiBmb3IgYQotICAgcmVmZXJlbmNlIGV4YW1wbGUuICBUaGUgcmVs ZWFzZWQgYmF0Y2ggaXMgY2FjaGVkIGludGVybmFsbHkgYW5kIHJldXNlZCBieQorICAgPGZ1bmN0 aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5faGFzaF9uZXh0PC9mdW5jdGlv bj4gZm9yCisgICByZWZlcmVuY2UgZXhhbXBsZXMuICBUaGUgcmVsZWFzZWQgYmF0Y2ggaXMgY2Fj aGVkIGludGVybmFsbHkgYW5kIHJldXNlZCBieQogICAgdGhlIG5leHQgPGZ1bmN0aW9uPmluZGV4 YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGNhbGwsIGF2b2lkaW5nCiAgICByZXBlYXRl ZCBtZW1vcnkgYWxsb2NhdGlvbiBkdXJpbmcgdGhlIGJpdG1hcCBzY2FuLgogICA8L3BhcmE+CmRp ZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDY5YzQzYjFiYi4uZDZlZWYwNTRjIDEwMDY0NAot LS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTIwNCw2ICsxMjA0LDcgQEAgSGFzaAogSGFzaEFnZ0Jh dGNoCiBIYXNoQWdnU3BpbGwKIEhhc2hBbGxvY0Z1bmMKK0hhc2hCYXRjaERhdGEKIEhhc2hCdWls ZFN0YXRlCiBIYXNoQnVsa0RlbGV0ZVN0cmVhbVByaXZhdGUKIEhhc2hDb21wYXJlRnVuYwpAQCAt MTIyNSw4ICsxMjI2LDYgQEAgSGFzaFBhZ2VTdGF0CiBIYXNoUGF0aAogSGFzaFNjYW5PcGFxdWUK IEhhc2hTY2FuT3BhcXVlRGF0YQotSGFzaFNjYW5Qb3NEYXRhCi1IYXNoU2NhblBvc0l0ZW0KIEhh c2hTa2V3QnVja2V0CiBIYXNoU3RhdGUKIEhhc2hWYWx1ZUZ1bmMKLS0gCjIuNTMuMAoK --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0009-Make-buffer-hit-helper.patch" Content-Disposition: attachment; filename="v17-0009-Make-buffer-hit-helper.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8p10 RnJvbSBlZmMwYmZmZTVkOGJiOTk4NDNhNzI0NzQxZDExNjMxOTgwNzcyOWI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNZWxhbmllIFBsYWdlbWFuIDxtZWxhbmllcGxhZ2VtYW5AZ21h aWwuY29tPgpEYXRlOiBGcmksIDIzIEphbiAyMDI2IDEzOjU0OjAyIC0wNTAwClN1YmplY3Q6IFtQ QVRDSCB2MTcgMDkvMThdIE1ha2UgYnVmZmVyIGhpdCBoZWxwZXIKCkFscmVhZHkgdHdvIHBsYWNl 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= --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0006-Add-UnlockBufferGetLSN-utility-function.patch" Content-Disposition: attachment; filename="v17-0006-Add-UnlockBufferGetLSN-utility-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8w13 RnJvbSA5MTNlOWIxZWZlYjc0NTJhOGQ1NjIwMjViZTk3MGNhMTNhYzM5YWViIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTcgTWFyIDIwMjYgMTM6MjU6MTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNyAwNi8xOF0g QWRkIFVubG9ja0J1ZmZlckdldExTTiB1dGlsaXR5IGZ1bmN0aW9uLgoKVGhpcyBjb21iaW5lcyB0 aGUgZnVuY3Rpb25hbGl0eSBvZiBCdWZmZXJHZXRMU05BdG9taWMoKSB3aXRoClVubG9ja1JlbGVh c2VCdWZmZXIsIHdpdGggdGhlIG9wdGlvbiBvZiBub3QgcmVsZWFzaW5nIGJ1ZmZlciBwaW4uCgpB dXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQUgyLVd6a3lHMDE2ODJ6d3F5VVR3Vj1acStNX3FHZ2kxTmJYd3AxSC1waVJT ZkpzZ1FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyB8IDEy ICstLS0tLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgfCA0NyArKysr KysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgNDkgaW5zZXJ0aW9ucygr KSwgMTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggNDAxNzg5NmY5Li40MDhk NzZjNTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjUzLDYgKzI1Myw3IEBAIGV4dGVybiB2b2lk IFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKTsKIAogZXh0 ZXJuIHZvaWQgUmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiB2b2lkIFVubG9j a1JlbGVhc2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CitleHRlcm4gWExvZ1JlY1B0ciBVbmxvY2tC dWZmZXJHZXRMU04oQnVmZmVyIGJ1ZmZlciwgYm9vbCByZWxlYXNlKTsKIGV4dGVybiBib29sIEJ1 ZmZlcklzTG9ja2VkQnlNZShCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiBib29sIEJ1ZmZlcklzTG9j a2VkQnlNZUluTW9kZShCdWZmZXIgYnVmZmVyLCBCdWZmZXJMb2NrTW9kZSBtb2RlKTsKIGV4dGVy biBib29sIEJ1ZmZlcklzRGlydHkoQnVmZmVyIGJ1ZmZlcik7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L2luZGV4YmF0Y2guYwppbmRleCA2YmJlOGI5MTcuLmMyNTNjMzViYyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC00OTgsMTcgKzQ5OCw3IEBAIGluZGV4YW1fdXRpbF9i YXRjaF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVm ZmVyIGJ1ZikKIAkJICogTm9uLWltbWVkaWF0ZS11bmd1YXJkIHNjYW5zIHJldGFpbiB0aGUgcGlu OyB0aGUgdGFibGUgQU0gd2lsbCBjYWxsCiAJCSAqIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhl IGludGVybG9jayB3aGVuIHJlYWR5LgogCQkgKi8KLQkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdldExT TkF0b21pYyhidWYpOwotCQlpZiAoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQotCQl7Ci0J CQkvKiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KLQkJCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIGp1c3QgZHJvcCB0aGUgbG9jayAo aG9sZCBvbiB0byBpbnRlcmxvY2sgcGluKSAqLwotCQkJVW5sb2NrQnVmZmVyKGJ1Zik7Ci0JCX0K KwkJYmF0Y2gtPmxzbiA9IFVubG9ja0J1ZmZlckdldExTTihidWYsIHNjYW4tPmJhdGNoSW1tZWRp YXRlVW5ndWFyZCk7CiAJfQogCWVsc2UKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CmluZGV4IDAwYmM2MDk1Mi4uMmE5NTUxN2EzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZt Z3IuYwpAQCAtNTUyNSw2ICs1NTI1LDUzIEBAIFVubG9ja1JlbGVhc2VCdWZmZXIoQnVmZmVyIGJ1 ZmZlcikKIAlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKKy8qCisgKiBVbmxvY2tCdWZmZXJH ZXRMU04KKyAqCQlSZWFkIGEgYnVmZmVyJ3MgTFNOLCB0aGVuIHVubG9jayB0aGUgYnVmZmVyLiAg T3B0aW9uYWxseSByZWxlYXNlIHRoZQorICoJCXBpbiB0b28uCisgKgorICogVGhpcyBjb21iaW5l cyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBCdWZmZXJHZXRMU05BdG9taWMoKSB3aXRoCisgKiBVbmxv Y2tSZWxlYXNlQnVmZmVyLCB3aXRoIHRoZSBvcHRpb24gb2Ygbm90IHJlbGVhc2luZyBidWZmZXIg cGluLgorICoKKyAqIFVzZWQgdG8gdW5sb2NrIGEgYnVmZmVyIGxvY2sgKGFuZCBwb3NzaWJseSB0 byByZWxlYXNlIGl0cyBwaW4pIHdoZW4gaGVsZCBvbgorICogYW4gaW5kZXggcGFnZS4gIFRoaXMg aXMgbmVlZGVkIGZyZXF1ZW50bHkgZW5vdWdoIHRvIGp1c3RpZnkgc3BlY2lhbGl6YXRpb24uCisg Ki8KK1hMb2dSZWNQdHIKK1VubG9ja0J1ZmZlckdldExTTihCdWZmZXIgYnVmZmVyLCBib29sIHJl bGVhc2UpCit7CisJQnVmZmVyRGVzYyAqYnVmX2hkcjsKKwlQYWdlCQlwYWdlOworCVhMb2dSZWNQ dHIJbHNuOworCisJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQoYnVmZmVyKSk7CisJQXNzZXJ0KEJ1ZmZl cklzUGlubmVkKGJ1ZmZlcikpOworCisJaWYgKEJ1ZmZlcklzTG9jYWwoYnVmZmVyKSkKKwl7CisJ CWJ1Zl9oZHIgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1ZmZlciAtIDEpOworCQlwYWdl ID0gKFBhZ2UpIExvY2FsQnVmSGRyR2V0QmxvY2soYnVmX2hkcik7CisJCWxzbiA9IFBhZ2VHZXRM U04ocGFnZSk7CisJCWlmIChyZWxlYXNlKQorCQkJVW5waW5Mb2NhbEJ1ZmZlcihidWZmZXIpOwor CQlyZXR1cm4gbHNuOworCX0KKworCWJ1Zl9oZHIgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZl ciAtIDEpOworCXBhZ2UgPSAoUGFnZSkgQnVmSGRyR2V0QmxvY2soYnVmX2hkcik7CisKKyNpZmRl ZiBQR19IQVZFXzhCWVRFX1NJTkdMRV9DT1BZX0FUT01JQ0lUWQorCWxzbiA9IFBhZ2VHZXRMU04o cGFnZSk7CisjZWxzZQorCWxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWZmZXIpOworI2VuZGlm CisKKwlCdWZmZXJMb2NrVW5sb2NrKGJ1ZmZlciwgYnVmX2hkcik7CisJaWYgKHJlbGVhc2UpCisJ CVVucGluQnVmZmVyKGJ1Zl9oZHIpOworCisJcmV0dXJuIGxzbjsKK30KKwogLyoKICAqIEluY3JC dWZmZXJSZWZDb3VudAogICoJCUluY3JlbWVudCB0aGUgcGluIGNvdW50IG9uIGEgYnVmZmVyIHRo YXQgd2UgaGF2ZSAqYWxyZWFkeSogcGlubmVkCi0tIAoyLjUzLjAKCg== --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0005-Optimize-heap-buffer-pin-transfer-for-last-in-bl.patch" Content-Disposition: attachment; filename="v17-0005-Optimize-heap-buffer-pin-transfer-for-last-in-bl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8x14 RnJvbSA3Y2VjMjlmYmJlZTMxNWI0NWU5NTI3NWJmZDFjNzdhMmExM2JmNGMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNyAwNS8xOF0g T3B0aW1pemUgaGVhcCBidWZmZXIgcGluIHRyYW5zZmVyIGZvciBsYXN0LWluLWJsb2NrCiBpbmRl eCBpdGVtcy4KCkFkZCBhbiB4c19sYXN0aW5ibG9jayBmbGFnIHRvIEluZGV4RmV0Y2hIZWFwRGF0 YSB0aGF0IHRyYWNrcyB3aGV0aGVyIHRoZQpjdXJyZW50IFRJRCBpcyB0aGUgbGFzdCBvbmUgb24g aXRzIGhlYXAgYmxvY2sgd2l0aGluIHRoZSBjdXJyZW50IGJhdGNoLgpXaGVuIGl0IGlzLCBoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGUgY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZQpz bG90ICh2aWEgRXhlY1N0b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKSBpbnN0ZWFkIG9mIGluY3Jl bWVudGluZyB0aGUKcGluIGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3Vu dC9SZWxlYXNlQnVmZmVyIGNhbGxzLgoKaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZCBu b3cgY29tcHV0ZXMgeHNfbGFzdGluYmxvY2sgZm9yIHBsYWluCmluZGV4IHNjYW5zIGJ5IHBlZWtp bmcgYXQgdGhlIG5leHQgaXRlbSBpbiB0aGUgc2NhbiBkaXJlY3Rpb24uICBUaGlzCm9wdGltaXph dGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZXgtb25seSBzY2FucyBiZWNhdXNlIGFsbC12aXNpYmxl IGl0ZW1zCmNhbiBiZSBza2lwcGVkLCB3aGljaCB3b3VsZCBicmVhayBibG9jayBkZWR1cGxpY2F0 aW9uIHN5bW1ldHJ5IGJldHdlZW4KdGhlIHNjYW4gYW5kIHRoZSByZWFkIHN0cmVhbS4KCkFuIGV4 cGxpY2l0IEV4ZWNDbGVhclR1cGxlIGlzIGFkZGVkIHRvIHRoZSBibG9jay1zd2l0Y2ggcGF0aCBp bgpoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUgdG8gcmVsZWFzZSB0aGUgcGluIHRoYXQgd2FzIHRy YW5zZmVycmVkIHRvIHRoZQpzbG90IG9uIHRoZSBwcmV2aW91cyBjYWxsLgoKQXV0aG9yOiBQZXRl ciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRy ZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1E NExydTlCa3ZxYVJuRlJQRGFaYmZUT2RXY3h3MTN6eUc2R1ZGVHR6X3Z3QG1haWwuZ21haWwuY29t Ci0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICB8ICAxICsKIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgfCA3MCArKysrKysrKysrKysr KysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA2MjM2Yjg0YjQuLmUyZjg0MmRiOSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaApAQCAtMTMzLDYgKzEzMyw3IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFw RGF0YQogCS8qIEZvciBpbmRleC1vbmx5IHNjYW5zIHRoYXQgbXVzdCBhY2Nlc3MgdGhlIHZpc2li aWxpdHkgbWFwICovCiAJQnVmZmVyCQl4c192bWJ1ZmZlcjsJLyogdmlzaWJpbGl0eSBtYXAgYnVm ZmVyICovCiAJaW50CQkJeHNfdm1faXRlbXM7CS8qICMgaXRlbXMgdG8gcmVzb2x2ZSB2aXNpYmls aXR5IGluZm8gZm9yICovCisJYm9vbAkJeHNfbGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRo aXMgYmxvY2sgaW4gY3VycmVudCBiYXRjaD8gKi8KIAogfSBJbmRleEZldGNoSGVhcERhdGE7CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGE0MGY3ZmUzMi4u ZDliMWNlY2U0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAg LTE4NCw2ICsxODQsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuLAogCQkvKiBSZW1lbWJlciB0aGlzIGJ1ZmZlcidzIGJsb2NrIG51 bWJlciBmb3IgbmV4dCB0aW1lICovCiAJCWhzY2FuLT54c19ibGsgPSBJdGVtUG9pbnRlckdldEJs b2NrTnVtYmVyKHRpZCk7CiAKKwkJLyoKKwkJICogRHJvcCB0aGUgeHNfYmxrIHBpbiBpbmRlcGVu ZGVudGx5IGhlbGQgb24gYnkgc2xvdCAoaWYgYW55KSBub3cuIFNlZQorCQkgKiBjb21tZW50cyBh cm91bmQgRXhlY1N0b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlIGNhbGwgYmVsb3cuCisJCSAqLwor CQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwogCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNf Y2J1ZikpCiAJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIApAQCAtMjIwLDcgKzIy NiwzMyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCiAJCSpoZWFwX2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hv dCk7CiAKIAkJc2xvdC0+dHRzX3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwp OwotCQlFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3Qs IGhzY2FuLT54c19jYnVmKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IFRJRCBv biB0aGUgY3VycmVudCBoZWFwIGJsb2NrIHdpdGhpbiB0aGUgYmF0Y2gsCisJCSAqIHRyYW5zZmVy IG91ciBidWZmZXIgcGluIHRvIHRoZSBzbG90IHJhdGhlciB0aGFuIGhhdmluZyB0aGUgc2xvdAor CQkgKiBpbmNyZW1lbnQgdGhlIHBpbiBjb3VudC4gIFRoaXMgc2F2ZXMgYSBwYWlyIG9mIEluY3JC dWZmZXJSZWZDb3VudAorCQkgKiBhbmQgUmVsZWFzZUJ1ZmZlciBjYWxscywgc2luY2UgdGhlIGNh bGxlciB3b3VsZCBqdXN0IHJlbGVhc2UgaXRzCisJCSAqIHBpbiBvbiB4c19jYnVmIHdoZW4gc3dp dGNoaW5nIHRvIHRoZSBuZXh0IGJsb2NrIGFueXdheS4KKwkJICoKKwkJICogV2UgY2FuIG9ubHkg ZG8gdGhpcyB3aGVuIGhlYXBfY29udGludWUgaXMgZmFsc2UsIHNpbmNlIG90aGVyd2lzZQorCQkg KiB0aGUgY2FsbGVyIHdpbGwgbmVlZCB4c19jYnVmIHRvIHJlbWFpbiB2YWxpZCBmb3IgdGhlIG5l eHQgY2FsbC4KKwkJICovCisJCWlmIChoc2Nhbi0+eHNfbGFzdGluYmxvY2sgJiYgISpoZWFwX2Nv bnRpbnVlKQorCQl7CisJCQlFeGVjU3RvcmVQaW5uZWRCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5i YXNlLnR1cGRhdGEsIHNsb3QsCisJCQkJCQkJCQkJICAgaHNjYW4tPnhzX2NidWYpOworCQkJaHNj YW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCQkJaHNjYW4tPnhzX2JsayA9IEludmFsaWRC bG9ja051bWJlcjsKKworCQkJLyoKKwkJCSAqIE5vdGU6IHRoZSBwaW4gbm93IG93bmVkIGJ5IHRo ZSBzbG90IGlzIGV4cGVjdGVkIHRvIGJlIHJlbGVhc2VkCisJCQkgKiBvbiB0aGUgbmV4dCBjYWxs IGhlcmUsIHZpYSBhbiBleHBsaWNpdCBFeGVjQ2xlYXJUdXBsZS4gIFRoaXMKKwkJCSAqIGF2b2lk cyBjaHVybiBpbiB0aGUgYmFja2VuZCdzIHByaXZhdGUgcmVmY291bnQgY2FjaGUuCisJCQkgKi8K KwkJfQorCQllbHNlCisJCQlFeGVjU3RvcmVCdWZmZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1 cGRhdGEsIHNsb3QsCisJCQkJCQkJCQkgaHNjYW4tPnhzX2NidWYpOwogCX0KIAllbHNlCiAJewpA QCAtMzU5LDcgKzM5MSw0MyBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAlzY2FuLT54c19oZWFw dGlkID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50YWJsZVRpZDsKIAogCWlmIChh bGxfdmlzaWJsZSA9PSBOVUxMKQorCXsKKwkJaW50CQkJbmV4dEl0ZW07CisJCWJvb2wJCWhhc05l eHQ7CisKKwkJLyoKKwkJICogUGxhaW4gaW5kZXggc2Nhbi4KKwkJICoKKwkJICogRGV0ZXJtaW5l IGlmIHRoZSBuZXh0IGl0ZW0gaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24gaXMgb24gYQor CQkgKiBkaWZmZXJlbnQgaGVhcCBibG9jay4gIFdoZW4gaXQgaXMsIGhlYXBhbV9pbmRleF9mZXRj aF90dXBsZSBjYW4KKwkJICogdHJhbnNmZXIgaXRzIGJ1ZmZlciBwaW4gdG8gdGhlIHNsb3QgaW5z dGVhZCBvZiBpbmNyZW1lbnRpbmcgdGhlIHBpbgorCQkgKiBjb3VudCwgc2F2aW5nIGEgcGFpciBv ZiBJbmNyQnVmZmVyUmVmQ291bnQvUmVsZWFzZUJ1ZmZlciBjYWxscy4KKwkJICoKKwkJICogTm90 ZTogV2UgY2Fubm90IGRvIHRoaXMgZm9yIGluZGV4LW9ubHkgc2NhbnMgYmVjYXVzZSBhbGwtdmlz aWJsZQorCQkgKiBpdGVtcyBhcmUgc2tpcHBlZCBieSBib3RoIHRoZSBzY2FuIGFuZCB0aGUgcmVh ZCBzdHJlYW0gY2FsbGJhY2suCisJCSAqIFNraXBwZWQgaXRlbXMgY2FuIGJyZWFrIHRoZSBibG9j ayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5IGJldHdlZW4KKwkJICogdGhlIHN0cmVhbSBhbmQgdGhl IHNjYW46IHRoZSBzdHJlYW0gZGVkdXBsaWNhdGVzIGNvbnNlY3V0aXZlCisJCSAqIG5vbi1hbGwt dmlzaWJsZSBpdGVtcyBieSBibG9jaywgYnV0IGFmdGVyIGludmFsaWRhdGluZyB4c19ibGsgdGhl CisJCSAqIHNjYW4gd291bGQgdHJ5IHRvIHJlLWZldGNoIGEgYmxvY2sgdGhhdCB0aGUgc3RyZWFt IGFscmVhZHkgcmV0dXJuZWQKKwkJICogYW5kIGRlZHVwbGljYXRlZCBhd2F5LgorCQkgKi8KKwkJ aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJbmV4dEl0ZW0g PSBzY2FuUG9zLT5pdGVtICsgMTsKKwkJCWhhc05leHQgPSAobmV4dEl0ZW0gPD0gc2NhbkJhdGNo LT5sYXN0SXRlbSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0 ZW0gLSAxOworCQkJaGFzTmV4dCA9IChuZXh0SXRlbSA+PSBzY2FuQmF0Y2gtPmZpcnN0SXRlbSk7 CisJCX0KKworCQloc2Nhbi0+eHNfbGFzdGluYmxvY2sgPSBoYXNOZXh0ICYmCisJCQlJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKCZzY2FuQmF0Y2gtPml0ZW1zW25leHRJdGVtXS50YWJsZVRpZCkg IT0KKwkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW4tPnhzX2hlYXB0aWQpOworCiAJ CXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwl9CiAKIAkvKgogCSAqIEluZGV4LW9ubHkgc2Nh bi4KLS0gCjIuNTMuMAoK --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0007-Add-heapam-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v17-0007-Add-heapam-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8u12 RnJvbSBjOTY1MzliYWFhZWIxMjQ3MDBmNzg5MzdiODFhOTg3NjI5N2Y1OGUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHYxNyAwNy8xOF0g QWRkIGhlYXBhbSBpbmRleCBzY2FuIEkvTyBwcmVmZXRjaGluZy4KClRoaXMgY29tbWl0IGltcGxl bWVudHMgSS9PIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyAoYW5kIGluZGV4LW9ubHkKc2Nh bnMgdGhhdCByZXF1aXJlIGhlYXAgZmV0Y2hlcykuIFRoaXMgd2FzIG1hZGUgcG9zc2libGUgYnkg dGhlIHJlY2VudAphZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRvIGJvdGggdGhlIHRh YmxlIEFNIGFuZCBpbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJm YWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgbWF0Y2hpbmcgVElEcwoocmF0aGVyIHRoYW4gb25lIHR1 cGxlIGF0IGEgdGltZSksIGVhY2ggb2Ygd2hpY2ggbXVzdCBiZSB0YWtlbiBmcm9tCmluZGV4IHR1 cGxlcyB0aGF0IGFwcGVhciB0b2dldGhlciBvbiBhIHNpbmdsZSBpbmRleCBwYWdlLiAgVGhpcyBh bGxvd3MKbXVsdGlwbGUgYmF0Y2hlcyB0byBiZSBoZWxkIG9wZW4gc2ltdWx0YW5lb3VzbHkuICBH aXZpbmcgdGhlIHRhYmxlIEFNIGFuCmV4cGxpY2l0IHVuZGVyc3RhbmRpbmcgb2YgaW5kZXggQU0g Y29uY2VwdHMvaW5kZXggcGFnZSBib3VuZGFyaWVzIGFsbG93cwppdCB0byBjb25zaWRlciBhbGwg b2YgdGhlIHJlbGV2YW50IGNvc3RzIGFuZCBiZW5lZml0cy4KClByZWZldGNoaW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIGEgcHJlZmV0Y2hpbmcgcG9zaXRpb24gdW5kZXIgdGhlCmNvbnRyb2wgb2Yg dGhlIHRhYmxlIEFNIGFuZCBjb3JlIGNvZGUuICBUaGlzIGlzIGNsb3NlbHkgcmVsYXRlZCB0byB0 aGUKc2NhbiBwb3NpdGlvbiBhZGRlZCBieSBjb21taXQgRklYTUUsIHdoaWNoIGludHJvZHVjZWQg dGhlIGFtZ2V0YmF0Y2gKaW50ZXJmYWNlLiAgQSByZWFkIHN0cmVhbSBjYWxsYmFjayBhZHZhbmNl cyB0aGUgcmVhZCBzdHJlYW0gYXMgbmVlZGVkIHRvCnByb3ZpZGUgc3VmZmljaWVudGx5IG1hbnkg aGVhcCBibG9jayBudW1iZXJzIHRvIG1haW50YWluIHRoZSByZWFkCnN0cmVhbSdzIHRhcmdldCBw cmVmZXRjaCBkaXN0YW5jZS4KClRlc3RpbmcgaGFzIHNob3duIHRoYXQgaW5kZXggcHJlZmV0Y2hp bmcgY2FuIG1ha2UgaW5kZXggc2NhbnMgbXVjaApmYXN0ZXIuICBMYXJnZSByYW5nZSBzY2FucyB0 aGF0IHJldHVybiBtYW55IHR1cGxlcyBjYW4gYmUgYXMgbXVjaCBhcyAzNXgKZmFzdGVyIHdpdGgg bG9jYWwgU1NEcywgYW5kIDUweCBmYXN0ZXIgb3IgbW9yZSB3aXRoIGhpZ2hlci1sYXRlbmN5CnN0 b3JhZ2Ugc3VjaCBhcyBuZXR3b3JrLWF0dGFjaGVkIGJsb2NrIGRldmljZXMsIHdoZXJlIHRoZSBi ZW5lZml0IG9mCmhpZGluZyBJL08gbGF0ZW5jeSB0aHJvdWdoIHByZWZldGNoaW5nIGlzIGV2ZW4g Z3JlYXRlci4KCkEgbmV3IEdVQyAoZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCkgY29udHJvbHMg dGhlIHVzZSBvZiBpbmRleApwcmVmZXRjaGluZy4gIFRoZSBkZWZhdWx0IHNldHRpbmcgaXMgJ29u Jywgc28gYWxsIHBsYWluIGluZGV4IHNjYW5zIHVzZQpwcmVmZXRjaGluZyB3aGVyZSBzdXBwb3J0 IGV4aXN0cy4gIEFsbCBpbmRleC1vbmx5IHNjYW5zIHdpbGwgYWxzbyB1c2UKcHJlZmV0Y2hpbmcg YXV0b21hdGljYWxseSB3aGVyZSBzdXBwb3J0ZWQgKG9uY2UgdGhlIHNjYW4gc3RhcnRzIHRvCnJl cXVpcmUgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgaGVhcCBmZXRjaGVzKS4KCkFuIGltcG9ydGFu dCBnb2FsIG9mIHRoZSBhbWdldGJhdGNoIGRlc2lnbiBpcyB0byBlbmFibGUgdGhlIHRhYmxlIEFN J3MKcmVhZCBzdHJlYW0gY2FsbGJhY2sgdG8gYWR2YW5jZSBpdHMgcHJlZmV0Y2ggcG9zaXRpb24g dXNpbmcgVElEcyB0aGF0CmFwcGVhciBvbiBhIGxlYWYgcGFnZSB0aGF0J3MgYWhlYWQgb2YgdGhl IGN1cnJlbnQgc2NhbiBwb3NpdGlvbidzIGxlYWYKcGFnZS4gIFRoaXMgaXMgY3J1Y2lhbCB3aXRo IHNjYW5zIG9mIGluZGV4ZXMgd2hlcmUgZWFjaCBsZWFmIHBhZ2UKaGFwcGVucyB0byBoYXZlIHJl bGF0aXZlbHkgZmV3IGRpc3RpbmN0IGhlYXAgYmxvY2tzIGFtb25nIGl0cyBtYXRjaGluZwpUSURz IChhcyB3ZWxsIGFzIHdpdGggc2NhbnMgd2l0aCBsZWFmIHBhZ2VzIHRoYXQgaGF2ZSByZWxhdGl2 ZWx5IGZldwp0b3RhbCBtYXRjaGluZyBpdGVtcykuICBJbmRleCBzY2FucyBjYW4gaGF2ZSBhcyBt YW55IGFzIDY0IG9wZW4gYmF0Y2hlcywKd2hpY2ggdGVzdGluZyBoYXMgc2hvd24gdG8gYmUgYWJv dXQgdGhlIG1heGltdW0gbnVtYmVyIHRoYXQgY2FuIGV2ZXIgYmUKdXNlZnVsLiAgQmF0Y2hlcyBh cmUgbWFpbnRhaW5lZCBpbiBzY2FuIG9yZGVyIHVzaW5nIGEgc2ltcGxlIHJpbmcgYnVmZmVyCmRh dGEgc3RydWN0dXJlLgoKSW4gcmFyZSBjYXNlcyB3aGVyZSB0aGUgc2NhbiBleGNlZWRzIHRoaXMg cXVhc2ktYXJiaXRyYXJ5IGxpbWl0IG9mIDY0LAp0aGUgcmVhZCBzdHJlYW0gaXMgdGVtcG9yYXJp bHkgcGF1c2VkIHVzaW5nIHRoZSByZWFkIHN0cmVhbSBwYXVzaW5nCm1lY2hhbmlzbSBhZGRlZCBi eSBjb21taXQgMzgyMjljYjkuICBQcmVmZXRjaGluZyAodmlhIHRoZSByZWFkIHN0cmVhbSkKaXMg cmVzdW1lZCBvbmx5IGFmdGVyIHRoZSBzY2FuIHBvc2l0aW9uIGFkdmFuY2VzIGJleW9uZCBpdHMg Y3VycmVudCBvcGVuCmJhdGNoIGFuZCB0aGVuIGZyZWVzIGFuZCByZW1vdmVzIHRoZSBiYXRjaCBm cm9tIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZwpidWZmZXIuICBUZXN0aW5nIGhhcyBzaG93biB0aGF0 IGl0IGlzbid0IHZlcnkgY29tbW9uIGZvciBzY2FucyB0byBob2xkCm9wZW4gbW9yZSB0aGFuIGFi b3V0IDEwIGJhdGNoZXMgdG8gZ2V0IHRoZSBkZXNpcmVkIEkvTyBwcmVmZXRjaApkaXN0YW5jZS4K ClRoZSBoZXVyaXN0aWMgdXNlZCB0byBkZWNpZGUgd2hlbiB0byBiZWdpbiBwcmVmZXRjaGluZyAt LSBkZWxheWluZyB1bnRpbAp0aGUgc2NhbidzIHNlY29uZCBiYXRjaCAtLSBpcyBpbXBlcmZlY3Qu ICBTZWxlY3RpdmUgaW5kZXggc2NhbnMgdGhhdAphY2Nlc3MgcmFuZG9tbHktb3JkZXJlZCBoZWFw IHBhZ2VzIHdpbGwgYmVuZWZpdCBmcm9tIHByZWZldGNoaW5nLCBidXQKd29uJ3QgYWN0dWFsbHkg cmVhY2ggdGhlIHBvaW50IG9mIHN0YXJ0aW5nIHByZWZldGNoaW5nIHdpdGggdGhpcyBkZXNpZ24u Ckl0IGlzIGRpZmZpY3VsdCB0byBpZGVudGlmeSBzdWNoIHNjYW5zIGFoZWFkIG9mIHRpbWUuICBJ dCBkZXBlbmRzIG9uIHRoZQpwaHlzaWNhbCBvcmRlcmluZyBvZiB0aGUgaGVhcCByZWxhdGl2ZSB0 byB0aGUgaW5kZXgsIHRoZSBzY2FuJ3MKc2VsZWN0aXZpdHksIGFuZCB3aGV0aGVyIGFuIGluZGV4 LW9ubHkgc2NhbiB3aWxsIGFjdHVhbGx5IG5lZWQgaGVhcApmZXRjaGVzIC0tIGFsbCBvZiB3aGlj aCBhcmUgdW5jZXJ0YWluIGVhcmxpZXIgaW4gdGhlIHNjYW4uICBBZGRpbmcgYQpzbWFydGVyIGhl dXJpc3RpYyByZW1haW5zIGFzIHdvcmsgZm9yIGEgZnV0dXJlIHJlbGVhc2UuCgpBdXRob3I6IFRv bWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdA Ym93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4K UmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5 NGViYWJAZW50ZXJwcmlzZWRiLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAg ICAgICAgICAgICAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAg ICAgICAgICAgICAgICAgfCAgMzUgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAg ICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jICAgICAgfCA0MTAgKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCAgNDkgKystCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfcGFyYW1ldGVycy5kYXQgICAgIHwgICA3ICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv cG9zdGdyZXNxbC5jb25mLnNhbXBsZSB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwg ICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKwogZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbCAg ICAgICAgICAgICAgICAgICAgIHwgIDY2ICsrLQogZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCAg ICAgICAgICAgICAgICAgICAgIHwgICA4ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lz dmlld3Mub3V0ICAgICAgICB8ICAgMyArLQogMTIgZmlsZXMgY2hhbmdlZCwgNTk2IGluc2VydGlv bnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9o ZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCBlMmY4NDJkYjkuLjEy NmI2MThmOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTM1LDYgKzEzNSwxOCBAQCB0eXBlZGVmIHN0 cnVjdCBJbmRleEZldGNoSGVhcERhdGEKIAlpbnQJCQl4c192bV9pdGVtczsJLyogIyBpdGVtcyB0 byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KIAlib29sCQl4c19sYXN0aW5ibG9jazsg LyogbGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLwogCisJLyoKKwkg KiBUaGUgcmVhZCBzdHJlYW0gaXMgYWxsb2NhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNj YW4gYW5kIHJlc2V0IG9uCisJICogcmVzY2FuIG9yIHdoZW4gdGhlIHNjYW4gZGlyZWN0aW9uIGNo YW5nZXMuIFRoZSBzY2FuIGRpcmVjdGlvbiBpcyBzYXZlZAorCSAqIGVhY2ggdGltZSBhIG5ldyB0 dXBsZSBpcyByZXF1ZXN0ZWQuIElmIHRoZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzIGZyb20KKwkg KiBvbmUgdHVwbGUgdG8gdGhlIG5leHQsIHRoZSByZWFkIHN0cmVhbSByZWxlYXNlcyBhbGwgcHJl dmlvdXNseSBwaW5uZWQKKwkgKiBidWZmZXJzIGFuZCByZXNldHMgdGhlIHByZWZldGNoIGJsb2Nr LgorCSAqLworCWJvb2wJCXhzX3BhdXNlZDsJCS8qIHBhdXNlZCB1bnRpbCBuZXh0IGJhdGNoIGlz IHJlYWQ/ICovCisJU2NhbkRpcmVjdGlvbiB4c19yZWFkX3N0cmVhbV9kaXI7CS8qIGluZGV4IHNj YW4gZGlyZWN0aW9uICovCisJQmxvY2tOdW1iZXIgeHNfcHJlZmV0Y2hfYmxvY2s7CS8qIGxhc3Qg YmxvY2sgcmV0dXJuZWQgdG8geHNfcmVhZF9zdHJlYW0gKi8KKwlSZWFkU3RyZWFtICp4c19yZWFk X3N0cmVhbTsgLyogaW5kZXggSS9PIHByZWZldGNoaW5nIHJlYWQgc3RyZWFtICovCisKIH0gSW5k ZXhGZXRjaEhlYXBEYXRhOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggMTBmMzUwYjZmLi42 OWJjMDI2YWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaApAQCAtMTk1LDYgKzE5NSwxMCBAQCB0eXBlZGVm IHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEKIAkgKiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8g YXZvaWQgcmVkdW5kYW50IGFtZ2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQogCSAqIHByaW9y YmF0Y2ggLS0gdGhlIGluZGV4IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4 IHBhZ2VzIHRvCiAJICogZGV0ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1z IGJleW9uZCBjYWxsZXIncyBwcmlvcmJhdGNoLgorCSAqIEluIHBhcnRpY3VsYXIsIGR1cmluZyBw cmVmZXRjaGluZyB0aGUgcmVhZCBzdHJlYW0gY2FsbGJhY2sgZGlzY292ZXJzCisJICogdGhlIGVu ZC1vZi1zY2FuIHZpYSBwcmVmZXRjaEJhdGNoLiAgVGhlIHRhYmxlIEFNIGNoZWNrcyB0aGVzZSBm bGFncyBzbworCSAqIHRoYXQgdGhlIHNjYW4gc2lkZSBkb2Vzbid0IHJlcGVhdCB0aGUgc2FtZSBh bWdldGJhdGNoIGNhbGwgd2hlbiBpdAorCSAqIGxhdGVyIHJlYWNoZXMgdGhhdCBiYXRjaCBhcyBz Y2FuQmF0Y2guCiAJICovCiAJYm9vbAkJa25vd25FbmRCYWNrd2FyZDsKIAlib29sCQlrbm93bkVu ZEZvcndhcmQ7CkBAIC0yNDIsMTIgKzI0NiwyMSBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5C YXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogICogbWF0Y2hlcyBpbi4gIEhvd2V2ZXIsIHRhYmxl IEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0dXBsZXMgaW4gd2hhdGV2ZXIKICAqIG9yZGVy IGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQgLS0gcHJvdmlkZWQgdGhhdCBzdWNoIHJlb3Jk ZXJpbmcgY2Fubm90CiAgKiBhZmZlY3QgdGhlIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGluLgorICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1 cmUgYWxzbyBwcm92aWRlcyB0YWJsZSBBTXMgd2l0aCBhIHdheSB0byByZWFkIGFoZWFkIG9mIHRo ZQorICogY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBw YWdlcy4gIFRoZSBmdXJ0aGVyIG91dAorICogdGhlIHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2Ug dGhpcywgdGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBpbnRvIHRoZSBmdXR1cmUuCisgKiBUaGF0IHdh eSB0aGUgdGFibGUgQU0gaXMgYWJsZSB0byByZW9yZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFz IGRlc2lyZWQuCisgKiBGb3IgZXhhbXBsZSwgaW5kZXggc2NhbnMgc29tZXRpbWVzIG5lZWQgdG8g cmVhZGFoZWFkIGJ5IGFzIG1hbnkgYXMgYSBmZXcKKyAqIGRvemVuIGFtZ2V0YmF0Y2ggYmF0Y2hl cyBpbiBvcmRlciB0byBtYWludGFpbiBhbiBvcHRpbWFsIEkvTyBwcmVmZXRjaAorICogZGlzdGFu Y2UgKGRpc3RhbmNlIGZvciByZWFkaW5nIHRhYmxlIGJsb2Nrcy9mZXRjaGluZyB0YWJsZSB0dXBs ZXMpLgogICovCiB0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdCdWZmZXIKIHsKIAkvKiBjdXJyZW50 IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNjRGF0YS5iYXRjaGJ1ZltdIGZvciBzY2FuICovCiAJ QmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLwogCUJh dGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisJQmF0 Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyogcHJlZmV0Y2hpbmcgcG9zaXRpb24gKi8KIAog CS8qIG1hcmtQb3MncyBiYXRjaCAobm90IGluIHJpbmcgYnVmZmVyIHdoZW4gbWFya0JhdGNoICE9 IHNjYW5CYXRjaCkgKi8KIAlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2g7CkBAIC00ODEsNiArNDk0 LDI4IEBAIGluZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCkKIAlyaW5nYnVmLT5uZXh0QmF0Y2grKzsKIH0KIAorLyoKKyAq IENvbXBhcmUgdHdvIGJhdGNoIHJpbmcgcG9zaXRpb25zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVj dGlvbi4KKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZlIGlmIHBvczEgaXMgYmVoaW5kIHBvczIsIDAg aWYgZXF1YWwsIHBvc2l0aXZlIGlmIHBvczEgaXMKKyAqIGFoZWFkIG9mIHBvczIuCisgKi8KK3N0 YXRpYyBpbmxpbmUgaW50CitpbmRleF9zY2FuX3Bvc19jbXAoQmF0Y2hSaW5nSXRlbVBvcyAqcG9z MSwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zMiwKKwkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlv bikKK3sKKwlpbnQ4CQliYXRjaGRpZmYgPSAoaW50OCkgKHBvczEtPmJhdGNoIC0gcG9zMi0+YmF0 Y2gpOworCisJaWYgKGJhdGNoZGlmZiAhPSAwKQorCQlyZXR1cm4gYmF0Y2hkaWZmOworCisJLyog U2FtZSBiYXRjaCwgY29tcGFyZSBpdGVtcyAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcmVjdGlvbikpCisJCXJldHVybiBwb3MxLT5pdGVtIC0gcG9zMi0+aXRlbTsKKwllbHNlCisJ CXJldHVybiBwb3MyLT5pdGVtIC0gcG9zMS0+aXRlbTsKK30KKwogLyoKICAqIEFkdmFuY2UgcG9z aXRpb24gdG8gaXRzIG5leHQgaXRlbSBpbiB0aGUgYmF0Y2guCiAgKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgK aW5kZXggZjJmZDVkMzE1Li40MTkzMDBhNmIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaApAQCAtNTIsNiAr NTIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9n YXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc2Vxc2NhbjsKIGV4dGVybiBQ R0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9p bmRleHNjYW5fcHJlZmV0Y2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFw c2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwogZXh0ZXJuIFBH RExMSU1QT1JUIGJvb2wgZW5hYmxlX3NvcnQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwppbmRleCBkOWIxY2VjZTQuLjI5MDNiMmQ3NiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiY29t bWFuZHMvcHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdl L2J1ZnBhZ2UuaCIKQEAgLTYyLDYgKzYzLDkgQEAgc3RhdGljIEJsb2NrTnVtYmVyIGhlYXBhbV9z Y2FuX2dldF9ibG9ja3NfZG9uZShIZWFwU2NhbkRlc2MgaHNjYW4pOwogc3RhdGljIGJvb2wgQml0 bWFwSGVhcFNjYW5OZXh0QmxvY2soVGFibGVTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJYm9vbCAq cmVjaGVjaywKIAkJCQkJCQkJCXVpbnQ2NCAqbG9zc3lfcGFnZXMsIHVpbnQ2NCAqZXhhY3RfcGFn ZXMpOworc3RhdGljIEJsb2NrTnVtYmVyIGhlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2Nr KFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJCQkJCQl2b2lkICpjYWxsYmFja19wcml2YXRl X2RhdGEsCisJCQkJCQkJCQkJCQkJdm9pZCAqcGVyX2J1ZmZlcl9kYXRhKTsKIAogCiAvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KQEAgLTEwMyw2ICsxMDcsMTcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0 KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJLyogUmVzY2FucyBzaG91bGQgYXZvaWQgYW4g ZXhjZXNzaXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCiAJaHNjYW4tPnhzX3ZtX2l0ZW1zID0g MTsKIAorCS8qIERlZmVuc2l2ZWx5IGRvIGFuIHVuY29uZGl0aW9uYWwgcmVhZCBzdHJlYW0gZGly ZWN0aW9uIHJlc2V0ICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IE5vTW92ZW1lbnRT Y2FuRGlyZWN0aW9uOworCisJLyogUmVzZXQgcmVhZCBzdHJlYW0gaXRzZWxmLCBhbmQgb3RoZXIg YXNzb2NpYXRlZCBzdGF0ZSAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJeworCQlo c2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCWhzY2FuLT54 c19wYXVzZWQgPSBmYWxzZTsKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3JlYWRfc3Ry ZWFtKTsKKwl9CisKIAkvKgogCSAqIERlbGliZXJhdGVseSBhdm9pZCBkcm9wcGluZyBwaW5zIG5v dyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgogCSAqIFRoaXMgc2F2ZXMgY3ljbGVz IGR1cmluZyBjZXJ0YWluIHRpZ2h0IG5lc3RlZCBsb29wIGpvaW5zLCBhbmQgZHVyaW5nCkBAIC0x MjQsNiArMTM5LDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCiAJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAorCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pCisJCXJlYWRfc3RyZWFtX2VuZChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pOworCiAJcGZyZWUo aHNjYW4pOwogfQogCkBAIC0xOTMsNyArMjExLDE0IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJaWYgKEJ1ZmZlcklzVmFsaWQo aHNjYW4tPnhzX2NidWYpKQogCQkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CiAKLQkJ aHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhz X2Jsayk7CisJCS8qCisJCSAqIFdoZW4gdXNpbmcgYSByZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3 aWxsIGFscmVhZHkga25vdyB3aGljaCBibG9jaworCQkgKiBudW1iZXIgY29tZXMgbmV4dCAodGhv dWdoIGFuIGFzc2VydGlvbiB3aWxsIHZlcmlmeSBhIG1hdGNoIGJlbG93KQorCQkgKi8KKwkJaWYg KGhzY2FuLT54c19yZWFkX3N0cmVhbSkKKwkJCWhzY2FuLT54c19jYnVmID0gcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIoaHNjYW4tPnhzX3JlYWRfc3RyZWFtLCBOVUxMKTsKKwkJZWxzZQorCQkJaHNj YW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Js ayk7CiAKIAkJLyoKIAkJICogUHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZp cnN0IHRpbWUKQEAgLTI3Niw2ICszMDEsNDAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0 cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogICogdW5kZXIgY29udHJvbCB3aGVuIG1v c3QgaXRlbXMgd2lsbCBuZXZlciBiZSByZXR1cm5lZCBieSB0aGUgc2NhbiBhbnl3YXkKICAqIChp bXBvcnRhbnQgZm9yIGlubmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWktam9p bnMpLCBhbmQgdGhlCiAgKiBuZWVkIHRvIG5vdCBob2xkIG9udG8gaW5kZXggbGVhZiBwYWdlcyBm b3IgdG9vIGxvbmcuCisgKgorICogRHJvcHBpbmcgbGVhZiBwYWdlIHBpbnMgZWFybHkKKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCB0aGUg c2NhbiBiZSBhbGxvd2VkIHRvIGhvbGQgb250byBtb3JlIHRoYW4gb25lIGJhdGNoJ3MKKyAqIGxl YWYgcGFnZSBwaW4gYXQgYSB0aW1lLiAgVGhlIHByaW1hcnkgcmVhc29uIGZvciB0aGlzIHJlc3Ry aWN0aW9uIGlzIHRvCisgKiBhdm9pZCB1bmludGVuZGVkIGludGVyYWN0aW9ucyB3aXRoIHRoZSBy ZWFkIHN0cmVhbSwgd2hpY2ggaGFzIGl0cyBvd24KKyAqIHN0cmF0ZWd5IGZvciBrZWVwaW5nIHRo ZSBudW1iZXIgb2YgcGlucyBoZWxkIGJ5IHRoZSBiYWNrZW5kIHVuZGVyIGNvbnRyb2wuCisgKgor ICogT25jZSB3ZSd2ZSByZXNvbHZlZCB2aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRj aCwgd2UgY2FuIHNhZmVseSBkcm9wCisgKiBpdHMgbGVhZiBwYWdlIHBpbi4gIFRoaXMgaXMgc2Fm ZSB3aXRoIHJlc3BlY3QgdG8gY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZQorICogaW5kZXggdmFj dXVtaW5nIHdpbGwgYmxvY2sgb24gYWNxdWlyaW5nIGEgY29uZmxpY3RpbmcgY2xlYW51cCBsb2Nr IG9uIHRoZQorICogYmF0Y2gncyBpbmRleCBwYWdlIGR1ZSB0byBvdXIgaG9sZGluZyBhIHBpbiBv biB0aGF0IHNhbWUgcGFnZS4gIENvcHlpbmcgdGhlCisgKiByZWxldmFudCB2aXNpYmlsaXR5IG1h cCBkYXRhIGludG8gb3VyIGxvY2FsIGNhY2hlIHN1ZmZpY2VzIHRvIHByZXZlbnQgdW5zYWZlCisg KiBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmc6IGlmIGFueSBvZiB0aGVzZSBUSURzIHBvaW50IHRv IGRlYWQgaGVhcCB0dXBsZXMsCisgKiBWQUNVVU0gY2Fubm90IHBvc3NpYmx5IHJldHVybiBmcm9t IGFtYnVsa2RlbGV0ZSBhbmQgbWFyayB0aGUgcG9pbnRlZC10bworICogaGVhcCBwYWdlcyBhcyBh bGwtdmlzaWJsZS4gIFZBQ1VVTSBfY2FuXyBkbyBzbyBvbmNlIHdlIHJlbGVhc2UgdGhlIGJhdGNo J3MKKyAqIHBpbiwgYnV0IHRoYXQncyBva2F5OyB3ZSdsbCBiZSB3b3JraW5nIG9mZiBvZiBjYWNo ZWQgdmlzaWJpbGl0eSBpbmZvIHRoYXQKKyAqIGluZGljYXRlcyB0aGF0IHRoZSBkZWFkIFRJRHMg YXJlIE5PVCBhbGwtdmlzaWJsZS4KKyAqCisgKiBXaGF0IGFib3V0IHRoZSBvcHBvc2l0ZSBjYXNl LCB3aGVyZSBhIHBhZ2Ugd2FzIGFsbC12aXNpYmxlIHdoZW4gd2UgY2FjaGVkCisgKiB0aGUgVk0g Yml0cyBidXQgdHVwbGVzIG9uIGl0IGFyZSBkZWxldGVkIGFmdGVyd2FyZHM/ICBUaGF0IGlzIHNh ZmUgdG9vOiBhbnkKKyAqIHR1cGxlIHRoYXQgd2FzIHZpc2libGUgdG8gYWxsIHdoZW4gd2UgcmVh ZCB0aGUgVk0gbXVzdCBhbHNvIGJlIHZpc2libGUgdG8KKyAqIG91ciBNVkNDIHNuYXBzaG90LCBz byBpdCBpcyBjb3JyZWN0IHRvIHNraXAgdGhlIGhlYXAgZmV0Y2ggZm9yIHRob3NlIFRJRHMuCisg KgorICogTm90ZTogV2UgY2Fubm90IGRyb3AgdGhlIHBpbiBlYXJseSB3aGVuIHRoZSBzY2FuIHVz ZXMgYSBub24tTVZDQyBzbmFwc2hvdDsKKyAqIHdlIG11c3QgZGVsYXkgaXQgdW50aWwgYWxsIGhl YXAgZmV0Y2hlcyBmb3IgdGhlIGxvYWRlZCBiYXRjaCBoYXZlIHRha2VuCisgKiBwbGFjZS4gIFRo aXMgaXMgd2h5IHdlIGRvbid0IHN1cHBvcnQgcHJlZmV0Y2hpbmcgZHVyaW5nIHN1Y2ggc2NhbnMu ICBTZWUKKyAqIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwuCisgKgorICogTm90ZTogdmlzaWJp bGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZl ciwgc28KKyAqIHRoZSByZXN1bHQgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBTZWUgdGhlICJN ZW1vcnkgb3JkZXJpbmcgZWZmZWN0cyIKKyAqIGRpc2N1c3Npb24gaW4gdmlzaWJpbGl0eW1hcF9n ZXRfc3RhdHVzJ3MgaGVhZGVyIGNvbW1lbnQgZm9yIHdoeSB0aGlzIGlzCisgKiBzYWZlIGZvciBp bmRleC1vbmx5IHNjYW5zLgogICovCiBzdGF0aWMgdm9pZAogaGVhcGFtX2luZGV4X2JhdGNoX3Bv c192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24s CkBAIC00NTMsMTkgKzUxMiw1OCBAQCBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAlyZXR1cm4gJnNj YW4tPnhzX2hlYXB0aWQ7CiB9CiAKKy8qCisgKiBEZWNpZGUgd2hldGhlciB0byBzdGFydCBhIHJl YWQgc3RyZWFtIGZvciBoZWFwIGJsb2NrIHByZWZldGNoaW5nIGR1cmluZyBhbgorICogaW5kZXgg c2Nhbi4gIENhbGxlZCBlYWNoIHRpbWUgYSBuZXcgYmF0Y2ggaXMgb2J0YWluZWQgZnJvbSB0aGUg aW5kZXggQU0uCisgKgorICogV2UgZGVsYXkgaW5pdGlhbGl6aW5nIHRoZSBzdHJlYW0gdW50aWwg cmVhZGluZyBmcm9tIHRoZSBzY2FuJ3Mgc2Vjb25kCisgKiBiYXRjaC4gIFRoaXMgaGV1cmlzdGlj IGF2b2lkcyB3YXN0aW5nIGN5Y2xlcyBvbiBzdGFydGluZyBhIHJlYWQgc3RyZWFtCisgKiBmb3Ig dmVyeSBzZWxlY3RpdmUgaW5kZXggc2NhbnMuCisgKgorICogV2UgYWxzbyBhdm9pZCBwcmVmZXRj aGluZyBkdXJpbmcgc2NhbnMgd2hlcmUgd2UncmUgdW5hYmxlIHRvIGRyb3AgZWFjaAorICogYmF0 Y2gncyBidWZmZXIgcGluIHJpZ2h0IGF3YXkgKG5vbi1NVkNDIHNuYXBzaG90IHNjYW5zKS4gIFdl IGFyZSBub3QKKyAqIHByZXBhcmVkIHRvIHNlbnNpYmx5IGxpbWl0IHRoZSB0b3RhbCBudW1iZXIg b2YgYnVmZmVyIHBpbnMgaGVsZCAocmVhZAorICogc3RyZWFtIGhhbmRsZXMgYWxsIHBpbiByZXNv dXJjZSBtYW5hZ2VtZW50IGZvciB1cywgYW5kIGtub3dzIG5vdGhpbmcKKyAqIGFib3V0IHBpbnMg aGVsZCBvbiBpbmRleCBwYWdlcy93aXRoaW4gYmF0Y2hlcykuCisgKgorICogV2UgYWxzbyBkZWxh eSBjcmVhdGluZyBhIHJlYWQgc3RyZWFtIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgaGF2 ZW4ndAorICogZG9uZSBhbnkgaGVhcCBmZXRjaGVzIHlldC4gIFdlIGRvbid0IHdhbnQgdG8gd2Fz dGUgYW55IGN5Y2xlcyBvbgorICogYWxsb2NhdGluZyBhIHJlYWQgc3RyZWFtIHVudGlsIHdlIGhh dmUgYSBkZW1vbnN0cmF0ZWQgbmVlZCB0byBwZXJmb3JtCisgKiBoZWFwIGZldGNoZXMuCisgKi8K K3N0YXRpYyBpbmxpbmUgdm9pZAoraGVhcGFtX2luZGV4X2NvbnNpZGVyX3ByZWZldGNoaW5nKElu ZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJICBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAor CQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIHByaW9yQmF0Y2gpCit7CisJaWYgKCFoc2Nhbi0+eHNf cmVhZF9zdHJlYW0gJiYgcHJpb3JCYXRjaCAmJiBzY2FuLT5NVkNDU2NhbiAmJgorCQloc2Nhbi0+ eHNfYmxrICE9IEludmFsaWRCbG9ja051bWJlciAmJgkvKiBmb3IgaW5kZXgtb25seSBzY2FucyAq LworCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5iYXRj aHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQpOworCisJCWhzY2FuLT54c19yZWFkX3N0cmVhbSA9 CisJCQlyZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9ERUZBVUxULCBOVUxM LAorCQkJCQkJCQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJ CQkgICBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jaywKKwkJCQkJCQkJCSAgIHNjYW4s IDApOworCX0KKwkvKiBlbHNlIGRvbid0IHN0YXJ0IGEgcmVhZCBzdHJlYW0ganVzdCB5ZXQgKi8K K30KKwogLyoKICAqIEZldGNoIHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0 aGUgc2NhbiAob3IgdGhlIGZpcnN0KS4KICAqCi0gKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJy ZW50IHNjYW5CYXRjaCAocGFzc2VkIHRvIHVzIGFzIHByaW9yQmF0Y2gpIGhhcyBubwotICogbW9y ZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxsZXIgcGFz c2VzIGEgTlVMTAotICogcHJpb3JCYXRjaCBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUg c2Nhbi4KKyAqIENhbGxlZCB3aGVuIGNhbGxlcidzIGN1cnJlbnQgc2NhbkJhdGNoL3ByZWZldGNo QmF0Y2ggKHBhc3NlZCB0byB1cyBhcworICogcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUgbWF0Y2hp bmcgaXRlbXMgaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyCisgKiBwYXNzZXMg YSBOVUxMIHByaW9yQmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNjYW4uCiAg KgogICogUmV0dXJucyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgY2FsbGVyIGlu IHRoZSBnaXZlbiBzY2FuCiAgKiBkaXJlY3Rpb24sIG9yIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8g bW9yZSBtYXRjaGVzIGluIHRoYXQgZGlyZWN0aW9uLgogICoKICAqIFRoaXMgaXMgd2hlcmUgYmF0 Y2hlcyBhcmUgYXBwZW5kZWQgdG8gdGhlIHNjYW4ncyByaW5nIGJ1ZmZlci4gIFdlIGRvbid0CiAg KiBmcmVlIGFueSBiYXRjaGVzIGhlcmUsIHRob3VnaDsgdGhhdCBpcyBsZWZ0IHVwIHRvIHRoZSBj YWxsZXIuICBUaGUgY2FsbGVyCi0gKiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBhZHZhbmNpbmcg dGhlaXIgc2NhblBvcyBwb3NpdGlvbi4KKyAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFkdmFu Y2luZyB0aGVpciBzY2FuUG9zL3ByZWZldGNoUG9zIHBvc2l0aW9uLgogICovCiBzdGF0aWMgcGdf YXR0cmlidXRlX2hvdCBJbmRleFNjYW5CYXRjaAogaGVhcGFtX2luZGV4X2ZldGNoX25leHRfYmF0 Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLApAQCAtNDc4 LDYgKzU3Niw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAogCS8qIFhYWDogd2Ugc2hvdWxkIGFz c2VydCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KIAlBc3NlcnQo VHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOworCUFzc2VydChkaXJlY3Rpb24gPT0g aHNjYW4tPnhzX3JlYWRfc3RyZWFtX2Rpcik7CiAKIAlpZiAoIXByaW9yQmF0Y2gpCiAJewpAQCAt NTM4LDYgKzYzNyw4IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAogCQkvKiBBcHBlbmQgYmF0Y2gg dG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIgaW5kZXggKi8KIAkJ aW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCisJCWhlYXBhbV9pbmRleF9j b25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2NhbiwgcHJpb3JCYXRjaCk7CiAJfQogCWVsc2UK IAl7CkBAIC01NjIsNiArNjYzLDMyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9uZXh0X2JhdGNoKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKIAlyZXR1cm4gYmF0 Y2g7CiB9CiAKKy8qCisgKiBIYW5kbGUgYSBjaGFuZ2UgaW4gaW5kZXggc2NhbiBkaXJlY3Rpb24g KGF0IHRoZSB0dXBsZSBncmFudWxhcml0eSkuCisgKgorICogUmVzZXRzIHRoZSByZWFkIHN0cmVh bSwgc2luY2Ugd2UgY2FuJ3QgcmVseSBvbiBzY2FuUG9zIGNvbnRpbnVpbmcgdG8gYWdyZWUKKyAq IHdpdGggdGhlIGJsb2NrcyB0aGF0IHJlYWQgc3RyZWFtIGFscmVhZHkgY29uc3VtZWQgdXNpbmcg cHJlZmV0Y2hQb3MuCisgKgorICogTm90ZTogaWZmIHRoZSBzY2FuIF9jb250aW51ZXNfIGluIHRo aXMgbmV3IGRpcmVjdGlvbiwgYW5kIGFjdHVhbGx5IHN0ZXBzCisgKiBvZmYgc2NhbkJhdGNoIHRv IGFuIGVhcmxpZXIgaW5kZXggcGFnZSwgaGVhcGFtX2luZGV4X2ZldGNoX25leHRfYmF0Y2ggd2ls bAorICogZGVhbCB3aXRoIGl0LiAgQnV0IHRoYXQgbWlnaHQgbmV2ZXIgaGFwcGVuOyB0aGUgc2Nh biBtaWdodCB5ZXQgY2hhbmdlCisgKiBkaXJlY3Rpb24gYWdhaW4gKG9yIGp1c3QgZW5kIGJlZm9y ZSByZXR1cm5pbmcgbW9yZSBpdGVtcykuCisgKi8KK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCito ZWFwYW1faW5kZXhfZGlyY2hhbmdlX3Jlc2V0KEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCisJ CQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCSBCYXRjaFJpbmdCdWZmZXIg KmJhdGNocmluZ2J1ZikKK3sKKwkvKiBSZXNldCByZWFkIHN0cmVhbSBzdGF0ZSAqLworCWJhdGNo cmluZ2J1Zi0+cHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcGF1c2VkID0g ZmFsc2U7CisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsKKworCS8qIFJl c2V0IHJlYWQgc3RyZWFtIGl0c2VsZiAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJ CXJlYWRfc3RyZWFtX3Jlc2V0KGhzY2FuLT54c19yZWFkX3N0cmVhbSk7Cit9CisKIC8qCiAgKiBH ZXQgbmV4dCBUSUQgZnJvbSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBnaXZlbiBz Y2FuIGRpcmVjdGlvbi4KICAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0gd2hlbiBj YWxsZXIgcGFzc2VzIGEgbm9uLU5VTEwgYXJnLgpAQCAtNTgwLDYgKzcwNywxMiBAQCBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAlBc3NlcnQo c2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAwKTsKIAlB c3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54c193YW50X2l0dXApOwogCisJLyog SGFuZGxlIHJlc2V0dGluZyB0aGUgcmVhZCBzdHJlYW0gd2hlbiBzY2FuIGRpcmVjdGlvbiBjaGFu Z2VzICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5E aXJlY3Rpb24pCisJCWhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPSBkaXJlY3Rpb247CS8qIGZp cnN0IGNhbGwgKi8KKwllbHNlIGlmICh1bmxpa2VseShoc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGly ICE9IGRpcmVjdGlvbikpCisJCWhlYXBhbV9pbmRleF9kaXJjaGFuZ2VfcmVzZXQoaHNjYW4sIGRp cmVjdGlvbiwgYmF0Y2hyaW5nYnVmKTsKKwogCS8qCiAJICogQ2hlY2sgaWYgdGhlcmUncyBhbiBl eGlzdGluZyBsb2FkZWQgc2NhbkJhdGNoIGZvciB1cyB0byByZXR1cm4gdGhlIG5leHQKIAkgKiBt YXRjaGluZyBpdGVtJ3MgVElEL2luZGV4IHR1cGxlIGZyb20KQEAgLTU4OCw3ICs3MjEsNyBAQCBo ZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAl7 CiAJCS8qCiAJCSAqIHNjYW5Qb3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkg YmUgbG9hZGVkIGluIGJhdGNoIHJpbmcKLQkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhl cmUuCisJCSAqIGJ1ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlIChjYW4ndCBkbyB0aGlzIHdp dGggcHJlZmV0Y2hCYXRjaCkuCiAJCSAqLwogCQlBc3NlcnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0 Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOwogCkBAIC02MzQsMjEgKzc2NywyODYgQEAgaGVhcGFtX2lu ZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sCiAJewogCQlJbmRl eFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sCiAJCQkJCQkJCQkJ CQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCQlCYXRjaFJpbmdJdGVtUG9zICpwcmVmZXRj aFBvcyA9ICZiYXRjaHJpbmdidWYtPnByZWZldGNoUG9zOwogCiAJCS8qIGZyZWUgb2Jzb2xlc2Nl bnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCiAJCXRhYmxl YW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIGhlYWRCYXRjaCk7CiAKKwkJLyoKKwkJICogSWYgd2Un cmUgYWJvdXQgdG8gcmVsZWFzZSB0aGUgYmF0Y2ggdGhhdCBwcmVmZXRjaFBvcyBjdXJyZW50bHkK KwkJICogcG9pbnRzIHRvLCBqdXN0IGludmFsaWRhdGUgcHJlZmV0Y2hQb3MuICBXZSdsbCByZWlu aXRpYWxpemUgaXQKKwkJICogdXNpbmcgc2NhblBvcyBpZiBhbmQgd2hlbiBoZWFwYW1faW5kZXhf cHJlZmV0Y2hfbmV4dF9ibG9jayBpcyBuZXh0CisJCSAqIGNhbGxlZC4gKFdlIG11c3QgYXZvaWQg Y29uZnVzaW5nIGEgcHJlZmV0Y2hQb3MtPmJhdGNoIHRoYXQncworCQkgKiBhY3R1YWxseSBiZWZv cmUgaGVhZEJhdGNoIHdpdGggb25lIHRoYXQncyBhZnRlciBuZXh0QmF0Y2ggZHVlIHRvCisJCSAq IHVpbnQ4IG92ZXJmbG93OyBzaW1wbGVzdCB3YXkgaXMgdG8gaW52YWxpZGF0ZSBwcmVmZXRjaFBv cyBoZXJlLikKKwkJICovCisJCWlmIChwcmVmZXRjaFBvcy0+dmFsaWQgJiYKKwkJCXByZWZldGNo UG9zLT5iYXRjaCA9PSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCkKKwkJCXByZWZldGNoUG9zLT52 YWxpZCA9IGZhbHNlOworCiAJCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZm ZXIgKGV2ZW4gaWYgaXQncyBtYXJrQmF0Y2gpICovCiAJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo Kys7CisKKwkJaWYgKHVubGlrZWx5KGhzY2FuLT54c19wYXVzZWQpKQorCQl7CisJCQkvKgorCQkJ ICogaGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2sgcGF1c2VkIHRoZSBzY2FuJ3MgcmVh ZCBzdHJlYW0KKwkJCSAqIGR1ZSB0byBvdXIgcnVubmluZyBvdXQgb2YgZnJlZSBiYXRjaCBzbG90 cy4gIE5vdyB0aGF0IHdlJ3ZlCisJCQkgKiBmcmVlZCB1cCBvbmUgc3VjaCBzbG90LCB3ZSBjYW4g cmVzdW1lIHRoZSByZWFkIHN0cmVhbSAoc2luY2UKKwkJCSAqIHRoZXJlJ3Mgbm93IHNwYWNlIGZv ciBoZWFwYW1faW5kZXhfcHJlZmV0Y2hfbmV4dF9ibG9jayB0byBzdG9yZQorCQkJICogb25lIG1v cmUgYmF0Y2gpLgorCQkJICovCisJCQlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2Fu KSk7CisJCQlyZWFkX3N0cmVhbV9yZXN1bWUoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKKwkJCWhz Y2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJfQogCX0KIAogCS8qIEluIHByYWN0aWNlIHNjYW5C YXRjaCB3aWxsIGFsd2F5cyBiZSB0aGUgcmluZyBidWZmZXIncyBoZWFkQmF0Y2ggKi8KIAlBc3Nl cnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFzc2VydCgh aHNjYW4tPnhzX3BhdXNlZCk7CiAKIAlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9z X3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAogCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2Nh blBvcywgYWxsX3Zpc2libGUpOwogfQogCisvKgorICogUmV0dXJuIHRoZSBuZXh0IGJsb2NrIHRv IHRoZSByZWFkIHN0cmVhbSB3aGVuIHBlcmZvcm1pbmcgaW5kZXggcHJlZmV0Y2hpbmcuCisgKgor ICogVGhlIGluaXRpYWwgYmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBieSBoZWFwYW1faW5kZXhfZ2V0 bmV4dF9zY2FuYmF0Y2hfcG9zLgorICogV2UgZG9uJ3QgZ2V0IGNhbGxlZCB1bnRpbCB0aGUgZmly c3QgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIgY2FsbCwgd2hlbiBhCisgKiBoZWFwIGJsb2NrIGlz IHJlcXVlc3RlZCBmcm9tIHRoZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmlyc3QgdGltZS4KKyAq CisgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBwcmVmZXRj aFBvcy4gIEl0IGlzIHR5cGljYWwKKyAqIGZvciBwcmVmZXRjaFBvcyB0byBjb25zaXN0ZW50bHkg c3RheSBhaGVhZCBvZiB0aGUgc2NhblBvcyBwb3NpdGlvbiB0aGF0J3MKKyAqIHVzZWQgdG8gdHJh Y2sgdGhlIG5leHQgVElEIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mgd2lsbCBy ZXR1cm4KKyAqIHRvIHRoZSBzY2FuIChhZnRlciB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgY2FsbGVk KS4gIEhvd2V2ZXIsIHRoYXQgaXNuJ3QgYQorICogcHJlY29uZGl0aW9uLiAgVGhlcmUgaXMgYSBz dHJpY3QgcG9zdGNvbmRpdGlvbiwgdGhvdWdoOiB3aGVuIHdlIHJldHVybgorICogd2UnbGwgYWx3 YXlzIGxlYXZlIHNjYW5Qb3MgPD0gcHJlZmV0Y2hQb3MgKHVudGlsIHByZWZldGNoaW5nIGVuZHMp LgorICovCitzdGF0aWMgQmxvY2tOdW1iZXIKK2hlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Js b2NrKFJlYWRTdHJlYW0gKnN0cmVhbSwKKwkJCQkJCQkJIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVf ZGF0YSwKKwkJCQkJCQkJIHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNjYW5EZXNj IHNjYW4gPSAoSW5kZXhTY2FuRGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBm ZXRjaDsKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdi dWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7 CisJQmF0Y2hSaW5nSXRlbVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRj aFBvczsKKwlTY2FuRGlyZWN0aW9uIHhzX3JlYWRfc3RyZWFtX2RpciA9IGhzY2FuLT54c19yZWFk X3N0cmVhbV9kaXI7CisJSW5kZXhTY2FuQmF0Y2ggcHJlZmV0Y2hCYXRjaDsKKwlib29sCQlmcm9t U2NhblBvcyA9IGZhbHNlOworCisJLyoKKwkgKiBzY2FuUG9zIG11c3QgYWx3YXlzIGJlIHZhbGlk IHdoZW4gcHJlZmV0Y2hpbmcgdGFrZXMgcGxhY2UuICBUaGVyZSBoYXMKKwkgKiB0byBiZSBhdCBs ZWFzdCBvbmUgYmF0Y2gsIGxvYWRlZCBhcyBvdXIgc2NhbkJhdGNoLiAgVGhlIHNjYW4gZGlyZWN0 aW9uCisJICogbXVzdCBiZSBlc3RhYmxpc2hlZCwgdG9vLgorCSAqLworCUFzc2VydChpbmRleF9z Y2FuX2JhdGNoX2NvdW50KHNjYW4pID4gMCk7CisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuKTsKKwlB c3NlcnQoc2NhblBvcy0+dmFsaWQpOworCUFzc2VydCghaHNjYW4tPnhzX3BhdXNlZCk7CisJQXNz ZXJ0KHhzX3JlYWRfc3RyZWFtX2RpciAhPSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbik7CisKKwkv KgorCSAqIHByZWZldGNoUG9zIG1pZ2h0IG5vdCB5ZXQgYmUgdmFsaWQuICBJdCBtaWdodCBoYXZl IGFsc28gZmFsbGVuIGJlaGluZAorCSAqIHNjYW5Qb3MuICBEZWFsIHdpdGggYm90aC4KKwkgKgor CSAqIElmIHByZWZldGNoUG9zIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCB5ZXQsIHRoYXQgdHlw aWNhbGx5IGluZGljYXRlcworCSAqIHRoYXQgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCBoZXJlIGZv ciB0aGUgZW50aXJlIHNjYW4uICBXZSBpbml0aWFsaXplCisJICogcHJlZmV0Y2hQb3MgdXNpbmcg dGhlIGN1cnJlbnQgc2NhblBvcywgc2luY2UgdGhlIGN1cnJlbnQgc2NhbkJhdGNoCisJICogaXRl bSdzIFRJRCBzaG91bGQgaGF2ZSBpdHMgYmxvY2sgbnVtYmVyIHJldHVybmVkIGJ5IHRoZSByZWFk IHN0cmVhbQorCSAqIGZpcnN0LiAgSXQncyBsaWtlbHkgdGhhdCBwcmVmZXRjaFBvcyB3aWxsIGdl dCBhaGVhZCBvZiBzY2FuUG9zIGJlZm9yZQorCSAqIGxvbmcsIGJ1dCB0aGF0IGhhc24ndCBoYXBw ZW5lZCB5ZXQuCisJICoKKwkgKiBJdCdzIGFsc28gcG9zc2libGUgZm9yIHByZWZldGNoUG9zIHRv ICJmYWxsIGJlaGluZCIgc2NhblBvcywgYXQgbGVhc3QKKwkgKiBpbiBhIHRyaXZpYWwgc2Vuc2U6 IGlmIG1hbnkgYWRqYWNlbnQgaXRlbXMgYXJlIHJldHVybmVkIHRoYXQgY29udGFpbgorCSAqIFRJ RHMgdGhhdCBwb2ludCB0byB0aGUgc2FtZSBoZWFwIGJsb2NrLCBzY2FuUG9zIGNhbiBhY3R1YWxs eSBvdmVydGFrZQorCSAqIHByZWZldGNoUG9zIChwcmVmZXRjaFBvcyBjYW4ndCBhZHZhbmNlIHVu dGlsIHdlJ3JlIGFjdHVhbGx5IGNhbGxlZCkuCisJICogUmVpbml0aWFsaXppbmcgZnJvbSBzY2Fu UG9zIGlzIGVub3VnaCB0byBlbnN1cmUgdGhhdCBwcmVmZXRjaFBvcyBzdGlsbAorCSAqIGZldGNo ZXMgdGhlIG5leHQgaGVhcCBibG9jayB0aGF0IHNjYW5Qb3Mgd2lsbCByZXF1aXJlIChwcmVmZXRj aFBvcyBjYW4KKwkgKiBuZXZlciBmYWxsIGJlaGluZCAiYnkgbW9yZSB0aGFuIG9uZSBncm91cCBv ZiBpdGVtcyB0aGF0IGFsbCBwb2ludCB0bworCSAqIHRoZSBzYW1lIGhlYXAgYmxvY2siLCBzbyB0 aGlzIGlzIHNhZmUpLgorCSAqCisJICogTm90ZTogd2hlbiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9z Y2FuYmF0Y2hfcG9zIGZyZWVzIGEgYmF0Y2ggdGhhdAorCSAqIHByZWZldGNoUG9zIHBvaW50cyB0 bywgaXQnbGwgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcyBmb3IgdXMuICBUaGlzCisJICogcmVtb3Zl cyBhbnkgZGFuZ2VyIG9mIHByZWZldGNoUG9zLmJhdGNoIGZhbGxpbmcgc28gZmFyIGJlaGluZAor CSAqIHNjYW5Qb3MuYmF0Y2ggdGhhdCBpdCB3cmFwcyBhcm91bmQgKGFuZCBhcHBlYXJzIHRvIGJl IGFoZWFkIG9mIHNjYW5Qb3MKKwkgKiBpbnN0ZWFkIG9mIGJlaGluZCBpdCkuCisJICovCisJaWYg KCFwcmVmZXRjaFBvcy0+dmFsaWQgfHwKKwkJaW5kZXhfc2Nhbl9wb3NfY21wKHByZWZldGNoUG9z LCBzY2FuUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDwgMCkKKwl7CisJCWhzY2FuLT54c19wcmVm ZXRjaF9ibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJKnByZWZldGNoUG9zID0gKnNjYW5Q b3M7CisJCWZyb21TY2FuUG9zID0gdHJ1ZTsKKworCQkvKgorCQkgKiBXZSBtdXN0IGF2b2lkIGhv bGRpbmcgb24gdG8gYW55IGJhdGNoJ3MgYnVmZmVyIHBpbiBmb3IgbW9yZSB0aGFuIGFuCisJCSAq IGluc3RhbnQsIHRvIGF2b2lkIHVuZGVzaXJhYmxlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBzY2Fu J3MgcmVhZAorCQkgKiBzdHJlYW0uICBiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgc2NhbnMgYWx3YXlz IGdldCB0aGlzIGJlaGF2aW9yCisJCSAqIGF1dG9tYXRpY2FsbHkuICBPdGhlciB0eXBlcyBvZiBz Y2FucyAodGhlc2UgYXJlIGFsbCBpbmRleC1vbmx5CisJCSAqIHNjYW5zIGluIHByYWN0aWNlKSBh cmUgbWFkZSB0byBkcm9wIHRoZWlyIGJ1ZmZlciBwaW4gZWFnZXJseQorCQkgKiB0aHJvdWdoIGEg cG9saWN5IG9mIGFsd2F5cyBlYWdlcmx5IHNldHRpbmcgYWxsIHRoZSBiYXRjaCBpdGVtJ3MKKwkJ ICogdmlzaWJpbGl0eSBpbmZvIGluIG9uZSBnby4KKwkJICovCisJCWlmIChzY2FuLT54c193YW50 X2l0dXApCisJCXsKKwkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaDsKKworCQkJLyoKKwkJCSAqIE1h a2UgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5IHJlbGVhc2UgcmVzb3VyY2VzCisJ CQkgKiBlYWdlcmx5CisJCQkgKi8KKwkJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0 ZW1zYmF0Y2g7CisKKwkJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoaXMgbmV3IHByZWZldGNoQmF0Y2gg aGFzIG5vIHJlc291cmNlcyBoZWxkICovCisJCQlwcmVmZXRjaEJhdGNoID0gaW5kZXhfc2Nhbl9i YXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpOworCQkJaGJhdGNoID0gaGVhcF9iYXRjaF9k YXRhKHByZWZldGNoQmF0Y2gsIHNjYW4pOworCisJCQkvKiBTZXQgdmlzaWJpbGl0eSBpbmZvIG5v dCBzZXQgdGhyb3VnaCBzY2FuQmF0Y2ggKi8KKwkJCWhlYXBhbV9pbmRleF9iYXRjaF9wb3Nfdmlz aWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCSAgcHJlZmV0Y2hC YXRjaCwgaGJhdGNoLAorCQkJCQkJCQkJCQkgIHByZWZldGNoUG9zKTsKKwkJfQorCQllbHNlCisJ CQlBc3NlcnQoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwl9CisKKwlwcmVmZXRjaEJh dGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBwcmVmZXRjaFBvcy0+YmF0Y2gpOworCWZvciAo OzspCisJeworCQlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbTsKKwkJQmxvY2tOdW1iZXIgcHJlZmV0 Y2hfYmxvY2s7CisKKwkJLyoKKwkJICogV2UgbmV2ZXIgY2FsbCBhbWdldGJhdGNoIHdpdGhvdXQg aW1tZWRpYXRlbHkgcmVsZWFzaW5nIHRoZSBiYXRjaCdzCisJCSAqIGluZGV4IEFNIHJlc291cmNl cyAod2hpY2ggcmVxdWlyZXMgc3BlY2lhbCBjYXJlIGR1cmluZyBpbmRleC1vbmx5CisJCSAqIHNj YW5zKS4gIFRoZSByZWFkIHN0cmVhbSB0cmllcyB0byBiZSBjYXJlZnVsIGFib3V0IG5vdCBwaW5u aW5nIHRvbworCQkgKiBtYW55IGJ1ZmZlcnMsIGFuZCB0aGF0J3MgaGFyZGVyIHRvIGRvIHJlbGlh Ymx5IGlmIHRoZXJlIGFyZQorCQkgKiB2YXJpYWJsZSBudW1iZXJzIG9mIHBpbnMgdGFrZW4gd2l0 aG91dCBzdWNoIGNhcmUuCisJCSAqLworCQlpZiAoZnJvbVNjYW5Qb3MpCisJCXsKKwkJCS8qCisJ CQkgKiBEb24ndCBpbmNyZW1lbnQgaXRlbSB3aGVuIHByZWZldGNoUG9zIHdhcyBqdXN0IGluaXRp YWxpemVkCisJCQkgKiB1c2luZyBzY2FuUG9zLiAgV2UnbGwgcmV0dXJuIHRoZSBzY2FuUG9zIGl0 ZW0ncyBoZWFwIGJsb2NrCisJCQkgKiBkaXJlY3RseSBvbiB0aGUgZmlyc3QgY2FsbCBoZXJlLiAg SW4gb3RoZXIgd29yZHMsIHdlJ2xsIHJldHVybgorCQkJICogdGhlIGhlYXAgYmxvY2sgZm9yIHRo ZSBUSUQgcGFzc2VkIHRvIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZQorCQkJICogYXQgdGhlIHBv aW50IHdoZXJlIGl0IGNhbGxlZCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlciBmb3IgdGhlCisJCQkg KiBmaXJzdCB0aW1lIGR1cmluZyB0aGUgc2Nhbi4KKwkJCSAqLworCQkJZnJvbVNjYW5Qb3MgPSBm YWxzZTsKKwkJfQorCQllbHNlIGlmICghaW5kZXhfc2Nhbl9wb3NfYWR2YW5jZSh4c19yZWFkX3N0 cmVhbV9kaXIsCisJCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKSkKKwkJewor CQkJLyoKKwkJCSAqIFJhbiBvdXQgb2YgaXRlbXMgZnJvbSBwcmVmZXRjaEJhdGNoLiAgVHJ5IHRv IGFkdmFuY2UgdG8gdGhlCisJCQkgKiBzY2FuJ3MgbmV4dCBiYXRjaC4KKwkJCSAqLworCQkJaWYg KHVubGlrZWx5KGluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2FuKSkpCisJCQl7CisJCQkJLyoKKwkJ CQkgKiBDYW4ndCBhZHZhbmNlIHByZWZldGNoQmF0Y2ggYmVjYXVzZSBhbGwgYXZhaWxhYmxlCisJ CQkJICogYmF0Y2hyaW5nYnVmIGJhdGNoIHNsb3RzIGFyZSBjdXJyZW50bHkgaW4gdXNlLgorCQkJ CSAqCisJCQkJICogRGVhbCB3aXRoIHRoaXMgYnkgbW9tZW50YXJpbHkgcGF1c2luZyB0aGUgcmVh ZCBzdHJlYW0uCisJCQkJICogaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyB3aWxs IHJlc3VtZSB0aGUgcmVhZAorCQkJCSAqIHN0cmVhbSBsYXRlciwgdGhvdWdoIG9ubHkgYWZ0ZXIg c2NhblBvcyBoYXMgY29uc3VtZWQgYWxsCisJCQkJICogcmVtYWluaW5nIGl0ZW1zIGZyb20gc2Nh bkJhdGNoIChhdCB3aGljaCBwb2ludCB0aGUgY3VycmVudAorCQkJCSAqIGhlYWQgYmF0Y2ggd2ls bCBiZSBmcmVlZCwgbWFraW5nIGEgc2xvdCBhdmFpbGFibGUgZm9yIHJldXNlCisJCQkJICogaGVy ZSBieSB1cykuCisJCQkJICoKKwkJCQkgKiBJbiBwcmFjdGljZSB3ZSBoYXJkbHkgZXZlciBuZWVk IHRvIGRvIHRoaXMuICBJdCB3b3VsZCBiZQorCQkJCSAqIHBvc3NpYmxlIHRvIGF2b2lkIHRoZSBu ZWVkIHRvIHBhdXNlIHRoZSByZWFkIHN0cmVhbSBieQorCQkJCSAqIGR5bmFtaWNhbGx5IGFsbG9j YXRpbmcgc2xvdHMsIGJ1dCB0aGF0IHdvdWxkIGFkZCBjb21wbGV4aXR5CisJCQkJICogZm9yIG5v IHJlYWwgYmVuZWZpdC4gIEl0IGFsc28gc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0bworCQkJCSAq IGltcG9zZSBzb21lIGhhcmQgbGltaXQgb24gdGhlIG51bWJlciBvZiBiYXRjaGVzIHRoYXQKKwkJ CQkgKiBwcmVmZXRjaFBvcyBjYW4gZ2V0IGFoZWFkIG9mIHNjYW5Qb3MgYnkgKGVzcGVjaWFsbHkg aW4gdGhlCisJCQkJICogY2FzZSBvZiBpbmRleC1vbmx5IHNjYW5zLCB3aGVyZSB3ZSBvZnRlbiB3 b24ndCBoYXZlIGFueQorCQkJCSAqIGhlYXAgYmxvY2sgdG8gcmV0dXJuIGZyb20gbW9zdCBvZiB0 aGUgc2NhbidzIGJhdGNoZXMpLgorCQkJCSAqLworCQkJCWhzY2FuLT54c19wYXVzZWQgPSB0cnVl OworCQkJCXJldHVybiByZWFkX3N0cmVhbV9wYXVzZShzdHJlYW0pOworCQkJfQorCisJCQlwcmVm ZXRjaEJhdGNoID0gaGVhcGFtX2luZGV4X2ZldGNoX25leHRfYmF0Y2goc2NhbiwgaHNjYW4sCisJ CQkJCQkJCQkJCQkJCSAgeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJCQkJCQkgIHByZWZl dGNoQmF0Y2gsCisJCQkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJaWYgKCFwcmVmZXRj aEJhdGNoKQorCQkJeworCQkJCS8qCisJCQkJICogTm8gbW9yZSBiYXRjaGVzIGluIHRoaXMgZGly ZWN0aW9uLCBzbyBhbGwgdGhlIGJhdGNoZXMgdGhhdAorCQkJCSAqIHRoZSBzY2FuIHdpbGwgZXZl ciByZXF1aXJlIChiYXJyaW5nIGEgY2hhbmdlIGluIHNjYW4KKwkJCQkgKiBkaXJlY3Rpb24pIGFy ZSBub3cgbG9hZGVkCisJCQkJICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJ CX0KKworCQkJLyogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVm ZXRjaEJhdGNoICovCisJCQlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1f ZGlyLAorCQkJCQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKHNj YW4tPnhzX3dhbnRfaXR1cCkKKwkJCXsKKwkJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFw X2JhdGNoX2RhdGEocHJlZmV0Y2hCYXRjaCwgc2Nhbik7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2Ug aGF2ZSB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQo aHNjYW4tPnhzX3ZtX2l0ZW1zID09IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCWhlYXBhbV9p bmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJ CQkJCQkJCQkgIHByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQ b3MpOworCQkJfQorCQkJZWxzZQorCQkJCUFzc2VydChzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3Vh cmQpOworCQl9CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUgbmV4 dCBpdGVtIHdob3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8g YmUgcHJlZmV0Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJl ZmV0Y2hQb3MtPmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHByZWZldGNoUG9z LT5pdGVtID49IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQb3Mt Pml0ZW0gPD0gcHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOworCQkvKiBzY2FuUG9zIGlzIGFsd2F5 cyA8PSBwcmVmZXRjaFBvcyB3aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9w b3NfY21wKHNjYW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOwor CisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCUhlYXBCYXRjaERhdGEgKmhiYXRj aCA9IGhlYXBfYmF0Y2hfZGF0YShwcmVmZXRjaEJhdGNoLCBzY2FuKTsKKworCQkJQXNzZXJ0KGhi YXRjaC0+dmlzSW5mb1twcmVmZXRjaFBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VE KTsKKwkJCWlmIChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYgSEVBUF9CQVRD SF9WSVNfQUxMX1ZJU0lCTEUpCisJCQl7CisJCQkJLyogaXRlbSBpcyBrbm93biB0byBiZSBhbGwt dmlzaWJsZSAtLSBkb24ndCBwcmVmZXRjaCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisK KwkJaXRlbSA9ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCXBy ZWZldGNoX2Jsb2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVUaWQp OworCisJCWlmIChwcmVmZXRjaF9ibG9jayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2spCisJ CXsKKwkJCS8qCisJCQkgKiBwcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNo UG9zIGl0ZW0ncyBUSUQncyBoZWFwCisJCQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJl dHVybiB0aGUgc2FtZSBwcmVmZXRjaF9ibG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1Y2Nl c3Npb24pCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5ldyBo ZWFwIGJsb2NrIG51bWJlciB0byByZXR1cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4tPnhz X3ByZWZldGNoX2Jsb2NrID0gcHJlZmV0Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9ibG9j azsKKwl9CisKKwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQorCiAvKgogICogR2V0IHRo ZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCmluZGV4IGMyNTNjMzViYy4uMDc3Zjc2Y2QxIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGJhdGNoLmMKQEAgLTEwLDcgKzEwLDEwIEBACiAgKiBhcHByb2FjaCBlbmFibGVzIGVm ZmljaWVudCBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBibG9ja3MgZHVyaW5nIG9yZGVyZWQKICAq IGluZGV4IHNjYW5zLgogICoKLSAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGluIGlu ZGV4IGtleSBzcGFjZSBvcmRlci4KKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2FkcyBiYXRjaGVzIGlu IGluZGV4IGtleSBzcGFjZSBvcmRlci4gIFRoaXMgYWxsb3dzIHRoZQorICogdGFibGUgQU0gdG8g bWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0Y2ggZGlzdGFuY2U6IGl0cyByZWFkIHN0cmVhbQor ICogY2FsbGJhY2sgaXMgdGhlcmVieSBhYmxlIHRvIHJlcXVlc3QgdGFibGUgYmxvY2tzIHJlZmVy ZW5jZWQgYnkgaW5kZXggcGFnZXMKKyAqIHRoYXQgYXJlIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJl bnQgc2NhbiBwb3NpdGlvbidzIGluZGV4IHBhZ2UuCiAgKgogICogVGhlcmUncyB0aHJlZSB0eXBl cyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGU6CiAgKgpAQCAtMzAsNiArMzMsMjUgQEAKICAq ICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuICBUaGVzZSBt YW5hZ2UgYmF0Y2gKICAqICAgIGFsbG9jYXRpb24sIGluZGV4IHBhZ2UgYnVmZmVyIGxvY2sgcmVs ZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5Y2xpbmcuCiAgKgorICogVGhlc2UgdGhyZWUgbGF5 ZXJzIGNvb3JkaW5hdGUgd2l0aG91dCBleHBsaWNpdCBjb3VwbGluZzogdGhlIGNvcmUgbGlmZWN5 Y2xlCisgKiBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGFibGUgQU1zIHVzZSBzY2FuUG9zL3NjYW5C YXRjaCBhbmQgcHJlZmV0Y2hQb3MvCisgKiBwcmVmZXRjaEJhdGNoIGluIGEgc3RhbmRhcmRpemVk IHdheSAoc2VlIGhlYXBhbV9oYW5kbGVyLmMgZm9yIHRoZSByZWZlcmVuY2UKKyAqIGltcGxlbWVu dGF0aW9uKSwgd2hpbGUgdGFibGUgQU1zIGFzc3VtZSB0aGF0IGluZGV4IEFNcyBmcmVlIGFuZCB1 bmxvY2sKKyAqIGJhdGNoZXMgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBlc3RhYmxpc2hl ZCBoZXJlLiAgU2VlIGluZGV4YW0uc2dtbAorICogZm9yIHRoZSBmdWxsIHNwZWNpZmljYXRpb24g b2YgdGhpcyBjb250cmFjdC4KKyAqCisgKiBUaGUgdGFibGUgQU0gZnVsbHkgY29udHJvbHMgdGhl IHJlYWQgc3RyZWFtIGFzIGl0cyBvd24gcHJpdmF0ZSBzdGF0ZS4KKyAqIFdoZW4gdGhlIHNjYW4g ZGlyZWN0aW9uIGNoYW5nZXMsIHRoZSB0YWJsZSBBTSBtdXN0IGltbWVkaWF0ZWx5IHJlc2V0IGl0 cworICogcmVhZCBzdHJlYW0gYW5kIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgLS0gYmxvY2tzIGFs cmVhZHkgcmVxdWVzdGVkIHZpYQorICogcHJlZmV0Y2hQb3Mgd2lsbCBubyBsb25nZXIgbWF0Y2gg d2hhdCBzY2FuUG9zIG5lZWRzIHRvIHJldHVybi4KKyAqCisgKiBDcm9zc2luZyBhIGJhdGNoIGJv dW5kYXJ5IGluIGEgbmV3IHNjYW4gZGlyZWN0aW9uIGlzIGEgc2VwYXJhdGUgcHJvY2VzcywKKyAq IGhhbmRsZWQgaGVyZTogdGFibGUgQU1zIGFyZSByZXF1aXJlZCB0byBjYWxsIHRhYmxlYW1fdXRp bF9iYXRjaF9kaXJjaGFuZ2UKKyAqIHRvIGxlYXZlIHRoZSBzY2FuJ3MgYmF0Y2ggcmluZyBidWZm ZXIgaW4gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9u IGhhbmRsZXMgdGhpcyBieSBzaW1wbHkgZGlzY2FyZGluZyBtb3N0IGJhdGNoZXMuICBUaGUga2V5 CisgKiBpbnZhcmlhbnQgaXMgdGhhdCBhbGwgbG9hZGVkIGJhdGNoZXMgbXVzdCBiZSBpbiBhIGNv bnNpc3RlbnQgc2NhbiBkaXJlY3Rpb24KKyAqIG9yZGVyLgorICoKICAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAog ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKICAqCkBAIC02Myw2ICs4NSw3IEBAIGluZGV4X2JhdGNoc2Nhbl9pbml0 KEluZGV4U2NhbkRlc2Mgc2NhbikKIAogCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlk ID0gZmFsc2U7CiAJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKwlz Y2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAogCXNjYW4tPmJh dGNocmluZ2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOwogCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0 Y2ggPSAwOwpAQCAtODMsNiArMTA2LDcgQEAgaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KEluZGV4U2Nh bkRlc2Mgc2NhbikKIAogCWJhdGNocmluZ2J1Zi0+c2NhblBvcy52YWxpZCA9IGZhbHNlOwogCWJh dGNocmluZ2J1Zi0+bWFya1Bvcy52YWxpZCA9IGZhbHNlOworCWJhdGNocmluZ2J1Zi0+cHJlZmV0 Y2hQb3MudmFsaWQgPSBmYWxzZTsKIAogCS8qCiAJICogRW5zdXJlIHRhYmxlYW1fdXRpbF9mcmVl X2JhdGNoIHdvbid0IHNraXAgdGhlIG9sZCBtYXJrQmF0Y2ggaW4gdGhlIGxvb3AKQEAgLTE5OSw3 ICsyMjMsMTMgQEAgaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikK ICAqIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aGVuIG5lZWRlZC4KICAqCiAgKiBXZSBqdXN0IGRp c2NhcmQgYWxsIGJhdGNoZXMgKG90aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5CYXRj aCksCi0gKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1cnJl bnQgc2NhbkJhdGNoLgorICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNj YW4ncyBjdXJyZW50IHNjYW5CYXRjaC4gIFdlIGFsd2F5cworICogaW52YWxpZGF0ZSBwcmVmZXRj aFBvcy4gIFRoZSByZWFkIHN0cmVhbSBhbmQgcmVsYXRlZCBwcmVmZXRjaGluZyBzdGF0ZSBhcmUK KyAqIHJlc2V0IGJ5IHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KCksIGNhbGxlZCBiZWZvcmUgdGhp cyBmdW5jdGlvbi4gIFRoaXMKKyAqIGFwcHJvYWNoIGtlZXBzIHRoaW5ncyBzaW1wbGUgZm9yIHRh YmxlIEFNczogbW9zdCBjb2RlIHRoYXQgZGVhbHMgd2l0aAorICogYmF0Y2hlcyBpcyB0aGVyZWJ5 IGFibGUgdG8gYXNzdW1lIHRoYXQgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNjYW4gZGlyZWN0aW9u CisgKiBuZXZlciBjaGFuZ2VzIGlzIHRoZSBvbmx5IGNhc2UgKHRhYmxlYW1fdXRpbF9iYXRjaF9k aXJjaGFuZ2UgdGFrZXMgYQorICogc2ltaWxhciBhcHByb2FjaCB0byBoYW5kbGluZyBhIGNyb3Nz LWJhdGNoIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbikuCiAgKi8KIHZvaWQKIGluZGV4X2JhdGNo c2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCkBAIC0yMTQsNiArMjQ0LDE0IEBA IGluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJQXNzZXJ0 KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAJQXNzZXJ0KG1hcmtQb3MtPnZhbGlkKTsKIAorCS8qCisJ ICogUmVzdG9yaW5nIGEgbWFyayBhbHdheXMgcmVxdWlyZXMgc3RvcHBpbmcgcHJlZmV0Y2hpbmcu ICBUaGlzIGlzIHNpbWlsYXIKKwkgKiB0byB0aGUgaGFuZGxpbmcgdGFibGUgQU1zIGltcGxlbWVu dCB0byBkZWFsIHdpdGggYSB0dXBsZS1sZXZlbCBjaGFuZ2UKKwkgKiBpbiB0aGUgc2NhbidzIGRp cmVjdGlvbi4gIFRoZSByZWFkIHN0cmVhbSBtdXN0IGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0CisJ ICogYnkgdGhlIGNhbGxlciAodmlhIHRhYmxlX2luZGV4X2ZldGNoX3Jlc2V0KS4KKwkgKi8KKwli YXRjaHJpbmdidWYtPnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CisKIAlpZiAoc2NhbkJhdGNo ID09IG1hcmtCYXRjaCkKIAl7CiAJCS8qIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHNjYW5CYXRjaDsg bmVlZG4ndCBjaGFuZ2UgYmF0Y2hyaW5nYnVmICovCkBAIC0yODMsNiArMzIxLDEzIEBAIGluZGV4 X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAgKiB0byBkZXRlcm1p bmUgd2hpY2ggYmF0Y2ggY29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uLiAgVGhp cwogICogYXBwcm9hY2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtz IHdlbGwgZW5vdWdoIGZvciB3aGF0CiAgKiBvdWdodCB0byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBv Y2N1cnJlbmNlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgcmVzZXQgdGhlIHNjYW4ncyByZWFk IHN0cmVhbSBiZWZvcmUgY2FsbGluZyBoZXJlLiAgVGhhdAorICogbmVlZHMgdG8gaGFwcGVuIGFz IHNvb24gYXMgdGhlIHNjYW4gcmVxdWVzdHMgYSB0dXBsZSBpbiB3aGF0ZXZlciBzY2FuCisgKiBk aXJlY3Rpb24gaXMgb3Bwb3NpdGUtdG8tY3VycmVudC4gIFdlIG9ubHkgZGVhbCB3aXRoIHRoZSBj YXNlIHdoZXJlIHRoZQorICogc2NhbiBiYWNrcyB1cCBieSBlbm91Z2ggaXRlbXMgdG8gY3Jvc3Mg YSBiYXRjaCBib3VuZGFyeSAod2hlbiB0aGUgc2NhbgorICogcmVzdW1lcyBzY2FubmluZyBpbiBp dHMgb3JpZ2luYWwgZGlyZWN0aW9uL2VuZHMgYmVmb3JlIGNyb3NzaW5nIGEgYm91bmRhcnksCisg KiB0aGVyZSBpc24ndCBhbnkgbmVlZCB0byBjYWxsIGhlcmUpLgogICovCiB2b2lkCiB0YWJsZWFt X3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2NhbikKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9jb3N0c2l6ZS5jCmluZGV4IDU2ZDQ1Mjg3Yy4uYzJiOGE0OGNjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKQEAgLTE0Niw2ICsxNDYsNyBAQCBpbnQJCQltYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMjsKIGJvb2wJCWVuYWJsZV9zZXFzY2FuID0g dHJ1ZTsKIGJvb2wJCWVuYWJsZV9pbmRleHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4 b25seXNjYW4gPSB0cnVlOworYm9vbAkJZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCA9IHRydWU7 CiBib29sCQllbmFibGVfYml0bWFwc2NhbiA9IHRydWU7CiBib29sCQllbmFibGVfdGlkc2NhbiA9 IHRydWU7CiBib29sCQllbmFibGVfc29ydCA9IHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4IDBjOTg1NGFkOC4uODhlYTZkYTc0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFj a2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdApAQCAtODkxLDYgKzg5MSwxMyBAQAog ICBib290X3ZhbCA9PiAndHJ1ZScsCiB9LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5f cHJlZmV0Y2gnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91 cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJl ZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5zIGFuZCBpbmRleC1vbmx5IHNjYW5zLicsCisgIGZsYWdz ID0+ICdHVUNfRVhQTEFJTicsCisgIHZhcmlhYmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZl dGNoJywKKyAgYm9vdF92YWwgPT4gJ3RydWUnLAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0 ZXJpYWwnLCB0eXBlID0+ICdib29sJywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9 PiAnUVVFUllfVFVOSU5HX01FVEhPRCcsCiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBs YW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFsaXphdGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExB SU4nLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmlu ZGV4IGU0YWJlNmMwMC4uZjJkNzcxZjM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MjAsNiArNDIwLDcgQEAKICNlbmFibGVfaW5jcmVt ZW50YWxfc29ydCA9IG9uCiAjZW5hYmxlX2luZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25s eXNjYW4gPSBvbgorI2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRl cmlhbCA9IG9uCiAjZW5hYmxlX21lbW9pemUgPSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpk aWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZp Zy5zZ21sCmluZGV4IDhjZGQ4MjZmYi4uZmI0NmFjMDBmIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCkBAIC01NzEyLDYg KzU3MTIsMjIgQEAgQU5ZIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwv cmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxlIGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAg ICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUt aW5kZXhzY2FuLXByZWZldGNoIiB4cmVmbGFiZWw9ImVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gi PgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFt ZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJp bWFyeT48dmFybmFtZT5lbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoPC92YXJuYW1lPiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90 ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFibGVzIG9y IGRpc2FibGVzIHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FuIGFuZCBpbmRleC1vbmx5IHNjYW4K KyAgICAgICAgcGxhbiB0eXBlcy4gIFByZWZldGNoaW5nIGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNl IGJ5IHJlYWRpbmcgdGFibGUgQU0KKyAgICAgICAgcGFnZXMgYWhlYWQgb2Ygd2hlbiB0aGV5IGFy ZSBuZWVkZWQgZHVyaW5nIGluZGV4IHNjYW5zLiAgVGhlIGRlZmF1bHQKKyAgICAgICAgaXMgPGxp dGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUt bWF0ZXJpYWwiIHhyZWZsYWJlbD0iZW5hYmxlX21hdGVyaWFsIj4KICAgICAgIDx0ZXJtPjx2YXJu YW1lPmVuYWJsZV9tYXRlcmlhbDwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAg ICAgPGluZGV4dGVybT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgYi9k b2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCmluZGV4IGIzMWNlZTA4MS4uMmEyYjA0OTdiIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9pbmRl eGFtLnNnbWwKQEAgLTgwNyw5ICs4MDcsMTIgQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2FuRGVzYyBz Y2FuLAogICA8cGFyYT4KICAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlu dGVyZmFjZSBpcyBhbiBhbHRlcm5hdGl2ZSB0bwogICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiB0aGF0IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCi0g ICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBp bmRleCBlbnRyaWVzIGZyb20gYQotICAgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0 YWJsZSBBTSBnYWlucyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUKLSAgIGJsb2NrcyB3aWxs IGJlIG5lZWRlZCBpbiB0aGUgbmVhciBmdXR1cmUuCisgICByYXRoZXIgdGhhbiBvbmUgYXQgYSB0 aW1lLiBUaGlzIGVuYWJsZXMgdGhlIHRhYmxlIGFjY2VzcyBtZXRob2QgdG8KKyAgIG9wdGltaXpl IHRhYmxlIGJsb2NrIGFjY2VzcyBwYXR0ZXJucyBhbmQgcGVyZm9ybSBJL08gcHJlZmV0Y2hpbmcu CisgICBCeSByZXR1cm5pbmcgYWxsIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgZnJvbSBhIHNpbmds ZSBpbmRleCBwYWdlIHRvZ2V0aGVyLAorICAgdGhlIHRhYmxlIEFNIGNhbiByZWFkYWhlYWQgdGhy b3VnaCB0aGUgaW5kZXggYW5kIGlkZW50aWZ5IHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBi ZSBuZWVkZWQsIGFsbG93aW5nIHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIHBhZ2VzIGR1cmluZwor ICAgb3JkZXJlZCBpbmRleCBzY2Fucy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMTAwNCw3 ICsxMDA3LDggQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGZyZWUg dGhlIHBpbnMgYXQgYW4gb3Bwb3J0dW5lIHBvaW50IChmb3IgZXhhbXBsZSB3aGVuIDxmdW5jdGlv bj5hbXJlc2NhbjwvZnVuY3Rpb24+CiAgICBhbmQvb3IgPGZ1bmN0aW9uPmFtZW5kc2NhbjwvZnVu Y3Rpb24+IGFyZSBjYWxsZWQpLiAgSXQgbXVzdCBhbHNvIGtlZXAgdGhlCiAgICBudW1iZXIgb2Yg cmV0YWluZWQgcGlucyBmaXhlZCBhbmQgc21hbGwsIHRvIGF2b2lkIGV4aGF1c3RpbmcgdGhlIGJh Y2tlbmQncwotICAgYnVmZmVyIHBpbiBsaW1pdC4KKyAgIGJ1ZmZlciBwaW4gbGltaXQgKHdoaWNo IGlzIHNoYXJlZCB3aXRoIHRoZSB0YWJsZSBBTSdzIHJlYWQgc3RyZWFtCisgICBmb3IgaW5kZXgg c2NhbiBwcmVmZXRjaGluZykuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEzNzksNiArMTM4 Myw2MCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZh bWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICBvciB2aWNlIHZlcnNhLCBpZiBpdHMgaW50ZXJuYWwg aW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCiAgIDwv cGFyYT4KIAorICA8c2VjdDIgaWQ9ImluZGV4LXNjYW5uaW5nLWJhdGNoZXMiPgorICAgPHRpdGxl PlRhYmxlIEFNIENvbnNpZGVyYXRpb25zIGZvciBCYXRjaCBTY2FubmluZzwvdGl0bGU+CisKKyAg IDxwYXJhPgorICAgIFRoaXMgc2VjdGlvbiBpcyBwcmltYXJpbHkgcmVsZXZhbnQgdG8KKyAgICA8 bGluayBsaW5rZW5kPSJ0YWJsZWFtIj50YWJsZSBhY2Nlc3MgbWV0aG9kPC9saW5rPiBhdXRob3Jz LgorICAgIFdoZW4gYW4gaW5kZXggc2NhbiB1c2VzIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGludGVyZmFjZSwKKyAgICB0aGUgdGFibGUgQU0gaXMgcmVzcG9uc2libGUgZm9y IG1hbmFnaW5nIHBvc2l0aW9uIHN0YXRlIHdpdGhpbiB0aGUKKyAgICA8c3RydWN0bmFtZT5JbmRl eFNjYW5EZXNjPC9zdHJ1Y3RuYW1lPidzCisgICAgPHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwv c3RydWN0ZmllbGQ+IGFuZCBmb3IgY29udHJvbGxpbmcgd2hlbgorICAgIGJ1ZmZlciBwaW5zIG9u IGluZGV4IHBhZ2VzIGFyZSByZWxlYXNlZC4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAg VGhlIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgd2l0aGluCisgICAg PHN0cnVjdGZpZWxkPmJhdGNocmluZ2J1Zjwvc3RydWN0ZmllbGQ+IHRyYWNrcyB3aGljaCBiYXRj aCBhbmQgaXRlbSB3aXRoaW4KKyAgICB0aGF0IGJhdGNoIHdpbGwgYmUgcmV0dXJuZWQgbmV4dCB0 byB0aGUgZXhlY3V0b3IuICBUaGUgdGFibGUgQU0gbXVzdCBhZHZhbmNlCisgICAgPHN0cnVjdGZp ZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBhcyB0dXBsZXMgYXJlIHJldHVybmVkIGJ5CisgICAg PGZ1bmN0aW9uPnRhYmxlX2luZGV4X2dldG5leHRfc2xvdDwvZnVuY3Rpb24+LiAgVGhlIGNvcmUg Y29kZSBtYXkgYWxzbworICAgIG1vZGlmeSB0aGlzIGZpZWxkIGR1cmluZyBvcGVyYXRpb25zIHN1 Y2ggYXMgbWFyay9yZXN0b3JlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgPHN0 cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgdHJhY2tzIHRoZSBwb3Np dGlvbiB1c2VkCisgICAgZm9yIEkvTyBwcmVmZXRjaGluZy4gIEl0IGlzIGdlbmVyYWxseSBhZHZh bmNlZCBieSBpbml0aWFsaXppbmcgaXQgZnJvbQorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9z dHJ1Y3RmaWVsZD4gd2l0aGluIGEgcmVhZCBzdHJlYW0gY2FsbGJhY2ssIGFsbG93aW5nCisgICAg dGhlIHRhYmxlIEFNIHRvIHByZWZldGNoIHRhYmxlIGJsb2NrcyBwb2ludGVkIHRvIGJ5IGl0ZW1z IHRoYXQgYXJlIHdlbGwKKyAgICBhaGVhZCBvZiB0aGUgY3VycmVudCBzY2FuIHBvc2l0aW9uLiAg SW5pdGlhbGx5CisgICAgPHN0cnVjdGZpZWxkPnByZWZldGNoUG9zPC9zdHJ1Y3RmaWVsZD4gc3Rh cnRzIGF0CisgICAgPHN0cnVjdGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiwgYnV0IGFzIHRo ZSByZWFkIHN0cmVhbSByYW1wcyB1cCBpdCBjYW4KKyAgICBnZXQgZmFyIGFoZWFkICZtZGFzaDsg c3Bhbm5pbmcgbXVsdGlwbGUgaW5kZXggcGFnZXMgaWYgbmVjZXNzYXJ5IHRvCisgICAgbWFpbnRh aW4gYW4gb3B0aW1hbCBJL08gcHJlZmV0Y2ggZGlzdGFuY2UgZm9yIHRhYmxlIGJsb2NrIHJlYWRz LiAgQSBtYWpvcgorICAgIGdvYWwgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gaW50ZXJmYWNlIGlzIHRvIGFsbG93IHRoZQorICAgIHRhYmxlIEFNIHRvIHByZWZldGNoIHdp dGhvdXQgYmVpbmcgbGltaXRlZCB0byBpdGVtcyBmcm9tIHRoZSBjdXJyZW50CisgICAgPHN0cnVj dGZpZWxkPnNjYW5Qb3M8L3N0cnVjdGZpZWxkPiBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZS4KKyAg IDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgQm90aCA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3Ry dWN0ZmllbGQ+IGFuZAorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+ IGFyZSBjb250cm9sbGVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQKKyAgICBjb3JlIGNvZGU7IGluZGV4 IGFjY2VzcyBtZXRob2RzIHNob3VsZCBub3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgdGhlc2UKKyAg ICBmaWVsZHMuICBTZWUgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC88L2Zp bGVuYW1lPgorICAgIGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZSBleGFtcGxlLgorICAg PC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBGb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFn ZW1lbnQgZHVyaW5nIGJhdGNoIHNjYW5zLCBpbmNsdWRpbmcgdGhlCisgICAgPHN0cnVjdGZpZWxk PmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IHBvbGljeSBhbmQgdGhlCisgICAg PGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2ssIHNlZQorICAgIDx4 cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4uCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mj4K KwogIDwvc2VjdDE+CiAKICA8c2VjdDEgaWQ9ImluZGV4LWxvY2tpbmciPgpkaWZmIC0tZ2l0IGEv ZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbCBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKaW5k ZXggOWNjZjViNzM5Li44ZTcwYTYxOTYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC90YWJsZWFt LnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3RhYmxlYW0uc2dtbApAQCAtMTI5LDYgKzEyOSwxNCBA QCBteV90YWJsZWFtX2hhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKICAgb3B0aW9uYWwpLCB0aGUg YmxvY2sgbnVtYmVyIG5lZWRzIHRvIHByb3ZpZGUgbG9jYWxpdHkuCiAgPC9wYXJhPgogCisgPHBh cmE+CisgIFRhYmxlIGFjY2VzcyBtZXRob2RzIGNhbiBzdXBwb3J0IG9yZGVyZWQgaW5kZXggc2Nh bnMgdXNpbmcgdGhlCisgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNl LiBTZWUgYWxzbworICA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIi8+IGZv ciBkZXRhaWxzIG9uIGludGVyZmFjaW5nIHdpdGgKKyAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpbmRleCBhY2Nlc3MgbWV0aG9kcywgYW5kIG1hbmFnaW5nIHRoZQorICBzY2FuJ3Mg cG9zaXRpb24uCisgPC9wYXJhPgorCiAgPHBhcmE+CiAgIEZvciBjcmFzaCBzYWZldHksIGFuIEFN IGNhbiB1c2UgcG9zdGdyZXMnIDxsaW5rCiAgIGxpbmtlbmQ9IndhbCI+PGFjcm9ueW0+V0FMPC9h Y3JvbnltPjwvbGluaz4sIG9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAxMzJiNTZhNTguLjMyYmMzZGQzZSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2Niw2ICsxNjYsNyBAQCBzZWxl Y3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxl JSc7CiAgZW5hYmxlX2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhv bmx5c2NhbiAgICAgICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8 IG9uCisgZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJp YWwgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8 IG9uCiAgZW5hYmxlX21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE4MCw3ICsxODEs NyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlr ZSAnZW5hYmxlJSc7CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFi bGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAg ICAgICAgICB8IG9uCi0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlz IHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9p bnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2lu Y2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgotLSAKMi41My4wCgo= --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0004-Implement-VISITED_PAGES_LIMIT-within-heapam.patch" Content-Disposition: attachment; filename="v17-0004-Implement-VISITED_PAGES_LIMIT-within-heapam.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq8z15 RnJvbSAzOGVhZTQ4ZTk0MWUzZTk2Nzc0YjQ1MDdhOTcxODcxMjhhZTdkZjI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMTkgTWFyIDIwMjYgMTI6MzI6MzQgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNyAwNC8xOF0g SW1wbGVtZW50IFZJU0lURURfUEFHRVNfTElNSVQgd2l0aGluIGhlYXBhbS4KClRoZSBuZXcgc2xv dC1iYXNlZCBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0IFhYWCB0byBlbmFibGUgaW5kZXgKcHJl ZmV0Y2hpbmcgbWFkZSBpdCBpbXBvc3NpYmxlIHRvIGVuZm9yY2UgVklTSVRFRF9QQUdFU19MSU1J VC4gIEZpeCB0aGUKcHJvYmxlbSBieSBpbXBsZW1lbnRpbmcgZ2VuZXJhbGl6aW5nIFZJU0lURURf UEFHRVNfTElNSVQgaW50byBhIHRhYmxlIEFNCnV0aWxpdHksIGltcGxlbWVudGVkIGJ5IGhlYXBh bSdzIGluZGV4LW9ubHkgc2NhbiBzbG90IGNhbGxiYWNrcy4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hl Z2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJh emVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3o9SEpjK1FWMkFa OW1VWTQzYUtMK24rYTFKUS03T0dFPU1Pa3FTQXRvS0p1Z0BtYWlsLmdtYWlsLmNvbQotLS0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgfCAgNyArKysrKysrCiBzcmMv YmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIHwgMjQgKysrKysrKysrKysrKysr KysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMgICAgICAgICB8ICA3ICsrKysrLS0K IDQgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaAppbmRleCAzMDFhZmE3YjYuLjEwZjM1MGI2ZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5o CkBAIC0zODEsNiArMzgxLDEzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJ Ym9vbAkgICAqeHNfb3JkZXJieW51bGxzOwogCWJvb2wJCXhzX3JlY2hlY2tvcmRlcmJ5OwogCisJ LyoKKwkgKiBBbiBhcHByb3hpbWF0ZSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIHdvcmssIG1lYXN1 cmVkIGluIHBhZ2VzIHRvdWNoZWQsCisJICogaW1wb3NlZCBvbiB0aGUgaW5kZXggc2Nhbi4gIFRo ZSBkZWZhdWx0LCAwLCBtZWFucyBubyBsaW1pdC4gIFVzZWQgYnkKKwkgKiBzZWxmdW5jcy5jIHRv IGJvdW5kIHRoZSBjb3N0IG9mIGdldF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoKS4KKwkgKi8K Kwl1aW50OAkJeHNfdmlzaXRlZF9wYWdlc19saW1pdDsKKwogCS8qIHBhcmFsbGVsIGluZGV4IHNj YW4gaW5mb3JtYXRpb24sIGluIHNoYXJlZCBtZW1vcnkgKi8KIAlzdHJ1Y3QgUGFyYWxsZWxJbmRl eFNjYW5EZXNjRGF0YSAqcGFyYWxsZWxfc2NhbjsKIH0gSW5kZXhTY2FuRGVzY0RhdGE7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCA3ZDNmODFkNzQuLmE0MGY3 ZmUzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC02NTcs NiArNjU3LDEyIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAlJdGVtUG9pbnRlciB0aWQ7CiAJYm9vbAkJaGVh cF9jb250aW51ZSA9IGZhbHNlOwogCWJvb2wJCWFsbF92aXNpYmxlID0gZmFsc2U7CisJQmxvY2tO dW1iZXIgbGFzdF92aXNpdGVkX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXVpbnQ4CQlu X3Zpc2l0ZWRfcGFnZXMgPSAwLAorCQkJCXhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSAwOworCisJ aWYgKGluZGV4X29ubHkpCisJCXhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSBzY2FuLT54c192aXNp dGVkX3BhZ2VzX2xpbWl0OwogCiAJZm9yICg7OykKIAl7CkBAIC03MDIsNyArNzA4LDI1IEBAIGhl YXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcmVjdGlvbiwKIAogCQkJCWlmICghaGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xv dCwgJmhlYXBfY29udGludWUsCiAJCQkJCQkJCQkJCSBhbWdldGJhdGNoKSkKKwkJCQl7CisJCQkJ CS8qCisJCQkJCSAqIE5vIHZpc2libGUgdHVwbGUuICBJZiBjYWxsZXIgc2V0IGEgdmlzaXRlZC1w YWdlcyBsaW1pdAorCQkJCQkgKiAob25seSBzZWxmdW5jcy5jIGRvZXMgdGhpcyksIGNvdW50IGRp c3RpbmN0IGhlYXAgcGFnZXMKKwkJCQkJICogYW5kIGdpdmUgdXAgb25jZSB3ZSd2ZSB2aXNpdGVk IHRvbyBtYW55LgorCQkJCQkgKi8KKwkJCQkJaWYgKHVubGlrZWx5KHhzX3Zpc2l0ZWRfcGFnZXNf bGltaXQgPiAwKSkKKwkJCQkJeworCQkJCQkJQXNzZXJ0KGhzY2FuLT54c19ibGsgPT0gSXRlbVBv aW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKworCQkJCQkJaWYgKGhzY2FuLT54c19ibGsgIT0g bGFzdF92aXNpdGVkX2Jsb2NrKQorCQkJCQkJeworCQkJCQkJCWxhc3RfdmlzaXRlZF9ibG9jayA9 IGhzY2FuLT54c19ibGs7CisJCQkJCQkJaWYgKCsrbl92aXNpdGVkX3BhZ2VzID4geHNfdmlzaXRl ZF9wYWdlc19saW1pdCkKKwkJCQkJCQkJcmV0dXJuIGZhbHNlOwkvKiBnaXZlIHVwICovCisJCQkJ CQl9CisJCQkJCX0KIAkJCQkJY29udGludWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0 IGluZGV4IGVudHJ5ICovCisJCQkJfQogCiAJCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggMWIyMWQ0MjFlLi4yOTRmMmNhNDcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jCkBAIC0xMjYsNiArMTI2LDcgQEAgUmVsYXRpb25HZXRJbmRleFNj YW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCXNj YW4tPnhzX2l0dXBkZXNjID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+ eHNfaGl0dXBkZXNjID0gTlVMTDsKKwlzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0ID0gMDsK IAogCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0gMDsKIAlzY2FuLT5iYXRjaF90dXBs ZXNfd29ya3NwYWNlID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxm dW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggM2ZmNWQwYzFk Li45ZjYyM2Q5N2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC03MTY4LDkgKzcxNjgs MTEgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCSAq IHBhZ2VzLiAgV2hlbiB3ZSBmYWlsIGZvciB0aGF0IHJlYXNvbiwgdGhlIGNhbGxlciB3aWxsIGVu ZCB1cCB1c2luZwogCSAqIHdoYXRldmVyIGV4dHJlbWFsIHZhbHVlIGlzIHJlY29yZGVkIGluIHBn X3N0YXRpc3RpYy4KIAkgKgotCSAqIFhYWCBUaGlzIGNhbid0IHdvcmsgd2l0aCB0aGUgbmV3IHRh YmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2UsCi0JICogd2hpY2ggc2ltcGx5IHdvbid0 IHJldHVybiBhIHR1cGxlIHRoYXQgaXNuJ3QgdmlzaWJsZSB0byBvdXIgc25hcHNob3QuCisJICog V2Ugc2V0IHhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgdG8gdGVsbCB0aGUgdGFibGUgQU0gdG8gY291 bnQgZGlzdGluY3QKKwkgKiBoZWFwIHBhZ2VzIHZpc2l0ZWQgZm9yIG5vbi12aXNpYmxlIHR1cGxl cyBhbmQgZ2l2ZSB1cCBhZnRlciB0aGUgbGltaXQKKwkgKiBpcyBleGNlZWRlZC4KIAkgKi8KKyNk ZWZpbmUgVklTSVRFRF9QQUdFU19MSU1JVCAxMDAKIAlJbml0Tm9uVmFjdXVtYWJsZVNuYXBzaG90 KFNuYXBzaG90Tm9uVmFjdXVtYWJsZSwKIAkJCQkJCQkgIEdsb2JhbFZpc1Rlc3RGb3IoaGVhcFJl bCkpOwogCkBAIC03MTc4LDYgKzcxODAsNyBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50 KFJlbGF0aW9uIGhlYXBSZWwsCiAJCQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxM LAogCQkJCQkJCQkgMSwgMCk7CiAJQXNzZXJ0KGluZGV4X3NjYW4tPnhzX3dhbnRfaXR1cCk7CisJ aW5kZXhfc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCA9IFZJU0lURURfUEFHRVNfTElNSVQ7 CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCAxLCBOVUxMLCAwKTsKIAogCS8q IEZldGNoIGZpcnN0L25leHQgdHVwbGUgaW4gc3BlY2lmaWVkIGRpcmVjdGlvbiAqLwotLSAKMi41 My4wCgo= --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v17-0003-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq9116 RnJvbSAxODI4ZjkzZmNhYzAxNWE5NDBkZGNmYThlMTVlMDllYmVmY2U0MDZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjE3IDAzLzE4XSBB ZGQgaW50ZXJmYWNlcyB0aGF0IGVuYWJsZSBpbmRleCBwcmVmZXRjaGluZy4KCkFkZCBhIG5ldyBh bWdldGJhdGNoIGluZGV4IEFNIGludGVyZmFjZSB0aGF0IGFsbG93cyBpbmRleCBhY2Nlc3MgbWV0 aG9kcwp0byBpbXBsZW1lbnQgcGxhaW4vb3JkZXJlZCBpbmRleCBzY2FucyB0aGF0IHJldHVybiBp bmRleCBlbnRyaWVzIGluCmJhdGNoZXMgY29tcHJpc2luZyBhbGwgbWF0Y2hpbmcgaXRlbXMgZnJv bSBhbiBpbmRleCBwYWdlLCByYXRoZXIgdGhhbgpvbmUgbWF0Y2ggYXQgYSB0aW1lLgoKVGhpcyBj b21taXQgYWxzbyBhZGRzIGEgbmV3IHRhYmxlIEFNIGludGVyZmFjZSBjYWxsYmFjayB0aGF0IGFs bG93cyB0aGUKdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdlIHRoZSBwcm9ncmVzcyBvZiBpbmRl eCBzY2FucyByYXRoZXIgdGhhbgpoYXZpbmcgaW5kaXZpZHVhbCBUSURzIHBhc3NlZCBpbiBieSB0 aGUgY2FsbGVyIG9uZSBieSBvbmUuICBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2UgaXMgdGlnaHRs eSBjb3VwbGVkIHdpdGggdGhpcyBuZXcgYXBwcm9hY2ggdG8gaW5kZXgKc2NhbnMgYWRkZWQgdG8g dGhlIHRhYmxlIEFNLiAgVGhlIHRhYmxlIEFNIGNhbiBhcHBseSBrbm93bGVkZ2Ugb2Ygd2hpY2gK VElEcyB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuIGluIHRoZSBuZWFyIGZ1dHVyZSB0byBw ZXJmb3JtIEkvTwpwcmVmZXRjaGluZy4gIFByZWZldGNoaW5nIHdpbGwgYmUgYWRkZWQgYnkgYW4g dXBjb21pbmcgY29tbWl0LgoKSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHBsYWlu IGluZGV4IHNjYW5zIG11c3Qgbm93IGltcGxlbWVudAplaXRoZXIgdGhlIGFtZ2V0YmF0Y2ggaW50 ZXJmYWNlIG9yIHRoZSBhbWdldHR1cGxlIGludGVyZmFjZSAobm90IGJvdGgpLgpUaGUgYW1nZXR0 dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFNcyB0aGF0IHJlcXVp cmUKZGlyZWN0IGNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXggc2NhbnMgKGUuZy4s IEdpU1Qgd2l0aCBLTk4Kb3JkZXJlZCBzY2FucykuICBBbG1vc3QgYWxsIGV4aXN0aW5nIGNhbGxl cnMgdGhhdCBwZXJmb3JtIGluZGV4IHNjYW5zCm5vdyB1c2UgdGhlIG5ldyB0YWJsZSBBTSBpbnRl cmZhY2UsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdW5kZXJseWluZwppbmRleCBBTSB1c2Vz IGFtZ2V0YmF0Y2ggb3IgYW1nZXR0dXBsZSAodGhlIGV4Y2VwdGlvbnMgYWxsIGludm9sdmUgY29k ZQp0aGF0IGluaGVyZW50bHkgbmVlZHMgdG8gcGFzcyBpdHMgb3duIFRJRCB0byB0aGUgdGFibGUg QU0gdG8gZmV0Y2ggYQp0YWJsZSB0dXBsZSkuCgpXaXRoIGFtZ2V0YmF0Y2gsIGEgc2Nhbi1sZXZl bCBwb2xpY3kgZGV0ZXJtaW5lcyB3aGV0aGVyIGVhY2ggYmF0Y2gncwppbmRleCBwYWdlIGJ1ZmZl ciBwaW4gaXMgZHJvcHBlZCBlYWdlcmx5IGJ5IHRoZSBpbmRleCBBTSAoZm9yIHBsYWluCnNjYW5z IHdpdGggYW4gTVZDQyBzbmFwc2hvdCwgd2hlcmUgdGhlIHNuYXBzaG90IGl0c2VsZiBwcmV2ZW50 cyBUSUQKcmVjeWNsaW5nIHByb2JsZW1zKSBvciByZXRhaW5lZCBhcyBhbiBpbnRlcmxvY2sgYWdh aW5zdCBjb25jdXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhlIGludGVybG9jayBp cyByZXRhaW5lZCBmb3Igbm9uLU1WQ0Mgc2NhbnMgYW5kCmZvciBpbmRleC1vbmx5IHNjYW5zLCBh bmQgaXMgZHJvcHBlZCBieSB0aGUgdGFibGUgQU0gdmlhIHRoZSBuZXcKYW11bmd1YXJkYmF0Y2gg Y2FsbGJhY2sgd2hlbiBpdCBpcyBzYWZlIHRvIGRvIHNvLiAoQWN0dWFsbHksIGluZGV4IEFNcwph cmUgdXN1YWxseSBhYmxlIHRvIGRyb3AgdGhlIHBpbiBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhl eSByZWxlYXNlIHRoZQpsb2NrLiAgSW4gcHJhY3RpY2UsIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxs YmFjayBpcyBvbmx5IHJlYWxseSBuZWVkZWQKZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMsIHdoZXJl IGRyb3BwaW5nIHRoZSBwaW4gaW50ZXJsb2NrIG1pZ2h0IG5lZWQgdG8KYmUgZGVsYXllZCBldmVy IHNvIHNsaWdodGx5LCBhcyBleHBsYWluZWQgYmVsb3cuKQoKVGhpcyBleHRlbmRzIHRoZSBkcm9w UGluIG1lY2hhbmlzbSBhZGRlZCB0byBuYnRyZWUgYnkgY29tbWl0IDJlZDViODdmLAphbmQgZ2Vu ZXJhbGl6ZXMgaXQgdG8gd29yayB3aXRoIGFsbCBpbmRleCBBTXMgdGhhdCBzdXBwb3J0IHRoZSBu ZXcKYW1nZXRiYXRjaCBpbnRlcmZhY2UgKExQX0RFQUQgbWFya2luZyBvZiBpbmRleCBlbnRyaWVz IG11c3QgYmUgcGVyZm9ybWVkCmJ5IGltcGxlbWVudGluZyB0aGUgbmV3IGFta2lsbGl0ZW1zYmF0 Y2ggY2FsbGJhY2ssIHdoaWNoIGhhcyBhCmRvY3VtZW50ZWQgY29udHJhY3QgZGVzY3JpYmluZyBo b3cgaW5kZXggQU1zIG11c3QgcmVhc29uIGFib3V0CmNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyku ICBTY2FucyBjYW4gYWx3YXlzIHNhZmVseSBkcm9wIGluZGV4IHBhZ2UgcGlucwplYWdlcmx5LCBw cm92aWRlZCB0aGUgc2NhbiB1c2VzIGFuIE1WQ0Mgc25hcHNob3QgKHVubGlrZSB0aGUgbmJ0cmVl CmRyb3BQaW4gb3B0aW1pemF0aW9uLCB3aGljaCBoYXMgbm8gcG9zc2libGUgd2F5IG9mIGRvaW5n IHRoaXMgc2FmZWx5CmR1cmluZyBpbmRleC1vbmx5IHNjYW5zLCBhbmQgb25seSBnYWluZWQgdGhl IGFiaWxpdHkgdG8gZG8gaXQgd2l0aCBwbGFpbgpzY2FucyBvZiB1bmxvZ2dlZCByZWxhdGlvbnMg aW4gcmVjZW50IGNvbW1pdCA4YTg3OTExOSkuCgpUaGUgb2xkIGFtbWFya3BvcyBhbmQgYW1yZXN0 cnBvcyBpbmRleCBBTSBjYWxsYmFja3MgYXJlIHJlbW92ZWQuICBXaXRoCmFtZ2V0YmF0Y2gsIG1h cmsvcmVzdG9yZSBvZiBzY2FuIHBvc2l0aW9ucyBpcyBtYW5hZ2VkIGJ5IGNvcmUgYmF0Y2gKdXRp bGl0aWVzLCB3aXRoIGNvb3BlcmF0aW9uIGZyb20gdGhlIHRhYmxlIEFNLCByYXRoZXIgdGhhbiBi ZWluZwpkZWxlZ2F0ZWQgdG8gdGhlIGluZGV4IEFNLiAgQWxsIGFtZ2V0YmF0Y2gtY2FwYWJsZSBp bmRleCBBTXMgaW5oZXJlbnRseQpzdXBwb3J0IG1hcmsvcmVzdG9yZSB3aXRob3V0IG5lZWRpbmcg dG8gaW1wbGVtZW50IGl0IHRoZW1zZWx2ZXMuCgpBbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxs IGFkZCBpbmRleCBwcmVmZXRjaGluZyB3aWxsIHVzZSBhIHJlYWQKc3RyZWFtIHRvIHJlYWQgaGVh cCBwYWdlcyBkdXJpbmcgaW5kZXggc2NhbnMuICBSZWFkIHN0cmVhbSBpcyBjYXJlZnVsIHRvCmxp bWl0IGhvdyBtYW55IHRoaW5ncyBpdCBwaW5zLCBsZXN0IHdlIHJ1biBpbnRvIHByb2JsZW1zIGR1 ZSB0byBoYXZpbmcKdG9vIG1hbnkgYnVmZmVycyBwaW5uZWQuICBTaW1wbHkgbmV2ZXIgaG9sZGlu ZyBvbiB0byBpbmRleCBwYWdlIGJ1ZmZlcgpwaW5zIGdyZWF0bHkgc2ltcGxpZmllcyByZXNvdXJj ZSBtYW5hZ2VtZW50IGZvciBpbmRleCBwcmVmZXRjaGluZzsKdGhlcmUncyBubyByaXNrIG9mIHVu aW50ZW5kZWQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIHJlYWQgc3RyZWFtIGFuZAppbmRleCBB TS4gIFRoZSBvbmx5IGRvd25zaWRlIGlzIHRoYXQgd2UgY2Fubm90IHN1cHBvcnQgcHJlZmV0Y2hp bmcKZHVyaW5nIHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QsIHdoaWNoIHNlZW1z IHF1aXRlIGFjY2VwdGFibGUuCgpJbiBwcmFjdGljZSwgaGVhcGFtIGRvZXNuJ3QgZHJvcCBlYWNo IGJhdGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgcGluIGF0CnRoZSBlYXJsaWVzdCBvcHBvcnR1bml0 eSBkdXJpbmcgaW5kZXgtb25seSBzY2Fucy4gIFRoaXMgd2FzIGRlZW1lZApuZWNlc3NhcnkgdG8g YXZvaWQgcmVncmVzc2luZyBpbmRleC1vbmx5IHNjYW5zIHdpdGggYSBMSU1JVCwgaW4KcGFydGlj dWxhciB3aXRoIG5lc3Rsb29wIGFudGktam9pbnMgYW5kIG5lc3Rsb29wIHNlbWktam9pbnM7IGVh Z2VybHkKbG9hZGluZyBhbGwgdGhlIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gdXAgZnJvbnQgcmVn cmVzc2VkIHN1Y2ggcXVlcmllcy4KVGhlIG5ldyBhbWdldGJhdGNoIGludGVyZmFjZSBnaXZlcyB0 YWJsZSBBTXMgdGhlIGF1dGhvcml0eSB0byBkZWNpZGUKd2hlbiBhbmQgd2hlcmUgdG8gZHJvcCBp bmRleCBwYWdlIHBpbnMsIHNvIHRoaXMgY2FuIGJlIGNvbnNpZGVyZWQgYQpoZWFwYW0gaW1wbGVt ZW50YXRpb24gZGV0YWlsIChpbmRleCBBTXMgZG9uJ3QgbmVlZCB0byBrbm93IGFib3V0IGl0KS4K VGhpcyBzY2hlbWUgc3RpbGwgYWxsb3dzIGluZGV4IHByZWZldGNoaW5nIHRvIGNvbnNpc3RlbnRs eSBob2xkIG5vIG1vcmUKdGhhbiBvbmUgYmF0Y2ggaW5kZXggcGFnZSBwaW4gYXQgYSB0aW1lLCBl dmVuIHdoZW4gYW4gaW5kZXgtb25seSBzY2FuCih0aGF0IG11c3QgcGVyZm9ybSBzb21lIGhlYXAg ZmV0Y2hlcykgaG9sZHMgb3BlbiBzZXZlcmFsIGluZGV4IGJhdGNoZXMKYXQgb25jZSBpbiBvcmRl ciB0byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZS4KCkF1dGhvcjogVG9t YXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bi b3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpS ZXZpZXdlZC1CeTogVGhvbWFzIE11bnJvIDx0aG9tYXMubXVucm9AZ21haWwuY29tPgpEaXNjdXNz aW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2NmODVmNDZmLWIwMmYtMDViMi01MjQ4LTUwMDBiODk0 ZWJhYkBlbnRlcnByaXNlZGIuY29tCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vZWZh YzMyMzgtNmYzNC00MWVhLWEzOTMtMjZjYzA0NDFiNTA2JTQwdm9uZHJhLm1lCi0tLQogc3JjL2lu Y2x1ZGUvYWNjZXNzL2FtYXBpLmggICAgICAgICAgICAgICAgICAgIHwgIDI3ICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgICAgICB8ICAzMCArLQogc3JjL2luY2x1 ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCAgICAgICAgICAgICAgIHwgIDYwICsrCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvbmJ0cmVlLmggICAgICAgICAgICAgICAgICAgfCAxODQgKystLS0KIHNyYy9pbmNs dWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8IDM0NiArKysrKysrLQogc3Jj L2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAgICAgICAgIHwgIDc1ICstCiBzcmMv aW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgLQogc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFj a2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tl bmQvYWNjZXNzL2dpbi9naW51dGlsLmMgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvZ2lzdC9naXN0LmMgICAgICAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICAgIHwgNjU5ICsrKysrKysrKysrKysrKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyAgICAgICB8ICAyNyArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvYW1hcGkuYyAgICAgICAgICAgICAgfCAgIDUgKwogc3Jj L2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMgICAgICAgICAgICAgIHwgIDE4ICstCiBzcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAgICAgfCAyNTcgKysrLS0tCiBz cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA3NDUgKysrKysr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgICAgICAg ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAgICAgICAgICAg IHwgIDc0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAgICAgICAgICAg fCAgMTMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVhZHBhZ2UuYyAgICAgICB8 IDIwNyArKystLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAgICAgICAgICAg IHwgNDcwICsrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5j ICAgICAgICAgfCA1NTkgKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnR1dGlscy5jICAgICAgICAgIHwgMjQ1IC0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJl ZS9uYnR4bG9nLmMgICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0 L3NwZ3V0aWxzLmMgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0Ft aS5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5k ZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBs aWNhdGlvbi5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1h cEluZGV4c2Nhbi5jICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9u bHlzY2FuLmMgICAgICB8IDExMCArLS0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNj YW4uYyAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9p bi5jICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0 aC5jICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YyAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxh dGlvbi5jICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jICAgICAg ICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jICAgICAg ICAgICAgICB8ICA1OCArLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAg ICAgICAgIHwgICAyICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDYgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICAgICAg ICAgICB8IDUyMyArKysrKysrKysrLS0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNn bWwgICAgICAgICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlf aW5kZXhfYW0uYyAgIHwgICA2ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAg ICAgICAgICAgICAgfCAgMTIgKy0KIDQ5IGZpbGVzIGNoYW5nZWQsIDMyNDkgaW5zZXJ0aW9ucygr KSwgMTYwOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nl c3MvaW5kZXhiYXRjaC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYwoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKaW5kZXggZWNmYmQwMTdkLi45YmQzMTQxZmMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9hbWFwaS5oCkBAIC0xOTgsNiArMTk4LDE5IEBAIHR5cGVkZWYgdm9pZCAoKmFtcmVz Y2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogdHlwZWRlZiBib29sICgqYW1nZXR0 dXBsZV9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSBTY2FuRGlyZWN0 aW9uIGRpcmVjdGlvbik7CiAKKy8qIG5leHQgYmF0Y2ggb2YgdmFsaWQgdHVwbGVzICovCit0eXBl ZGVmIEluZGV4U2NhbkJhdGNoICgqYW1nZXRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCwKKwkJCQkJCQkJ CQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworCisvKiBtYXJrIGRlYWQgaXRlbXMgaW4g aW5kZXggcGFnZSAqLwordHlwZWRlZiB2b2lkICgqYW1raWxsaXRlbXNiYXRjaF9mdW5jdGlvbikg KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7 CisKKy8qIGRyb3AgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaGVsZCB0byBwcmV2ZW50IGNvbmN1 cnJlbnQgVkFDVVVNIHJlY3ljbGluZyAqLwordHlwZWRlZiB2b2lkICgqYW11bmd1YXJkYmF0Y2hf ZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNo IGJhdGNoKTsKKwogLyogZmV0Y2ggYWxsIHZhbGlkIHR1cGxlcyAqLwogdHlwZWRlZiBpbnQ2NCAo KmFtZ2V0Yml0bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJICAg VElEQml0bWFwICp0Ym0pOwpAQCAtMjA1LDExICsyMTgsOSBAQCB0eXBlZGVmIGludDY0ICgqYW1n ZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAvKiBlbmQgaW5kZXggc2Nh biAqLwogdHlwZWRlZiB2b2lkICgqYW1lbmRzY2FuX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKIAotLyogbWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAo KmFtbWFya3Bvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci0KLS8qIHJlc3RvcmUg bWFya2VkIHNjYW4gcG9zaXRpb24gKi8KLXR5cGVkZWYgdm9pZCAoKmFtcmVzdHJwb3NfZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4pOworLyogaW52YWxpZGF0ZSBpbmRleCBBTSBzdGF0ZSB0 aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4ncyBwb3NpdGlvbiAqLwordHlwZWRlZiB2b2lk ICgqYW1wb3NyZXNldF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCSBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CiAKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlvbiBzaWduYXR1 cmVzIC0gZm9yIHBhcmFsbGVsIGluZGV4IHNjYW5zLgpAQCAtMzA5LDEwICszMjAsMTIgQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhBbVJvdXRpbmUKIAlhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2lu c2NhbjsKIAlhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKIAlhbWdldHR1cGxlX2Z1bmN0aW9u IGFtZ2V0dHVwbGU7IC8qIGNhbiBiZSBOVUxMICovCisJYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdl dGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1r aWxsaXRlbXNiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbXVuZ3VhcmRiYXRjaF9mdW5jdGlv biBhbXVuZ3VhcmRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlv biBhbWdldGJpdG1hcDsJLyogY2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1l bmRzY2FuOwotCWFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICov Ci0JYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFt cG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGlu dGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFt ZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyog Y2FuIGJlIE5VTEwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggMWEyN2JmMDYwLi5kZWMwMmNlOTAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9nZW5hbS5oCkBAIC05Niw2ICs5Niw3IEBAIHR5cGVkZWYgYm9vbCAoKkluZGV4QnVsa0Rl bGV0ZUNhbGxiYWNrKSAoSXRlbVBvaW50ZXIgaXRlbXB0ciwgdm9pZCAqc3RhdGUpOwogCiAvKiBz dHJ1Y3QgZGVmaW5pdGlvbnMgYXBwZWFyIGluIHJlbHNjYW4uaCAqLwogdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuRGVzY0RhdGEgKkluZGV4U2NhbkRlc2M7Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNj YW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NE YXRhICpTeXNTY2FuRGVzYzsKIAogdHlwZWRlZiBzdHJ1Y3QgUGFyYWxsZWxJbmRleFNjYW5EZXNj RGF0YSAqUGFyYWxsZWxJbmRleFNjYW5EZXNjOwpAQCAtMTU2LDYgKzE1Nyw3IEBAIGV4dGVybiB2 b2lkIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAKIGV4dGVy biBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJ CQkJCQkJCQkgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBib29sIGluZGV4X29u bHlfc2NhbiwKIAkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSBJbmRleFNj YW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkJCQkgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKTsKQEAgLTE4MiwxNCArMTg0LDEyIEBAIGV4dGVybiB2b2lkIGluZGV4X3BhcmFs bGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIGV4dGVybiB2b2lkIGlu ZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhTY2Fu RGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwKIAkJCQkJCQkJ CQkJICBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCQkJCQkJICBib29sIGluZGV4X29ubHlfc2Nh biwKIAkJCQkJCQkJCQkJICBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJ CQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJCQkJCQkgIFBhcmFs bGVsSW5kZXhTY2FuRGVzYyBwc2Nhbik7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0bmV4 dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uKTsKLWV4dGVybiBib29sIGluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7Ci1leHRlcm4gYm9vbCBpbmRleF9nZXRuZXh0X3Nsb3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkgICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gaW50NjQgaW5kZXhfZ2V0Yml0bWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwogCiBleHRlcm4gSW5kZXhCdWxrRGVsZXRl UmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKaW5kZXggZWNmMWJhMWNmLi42MjM2Yjg0YjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEz MCwxMCArMTMwLDM2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZl cgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4c19ibGs7CiAKLQkvKiBDdXJyZW50IGhlYXAgYmxv Y2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4gdGhlIHZpc2liaWxpdHkgbWFwICovCi0JQnVmZmVy CQl4c192bWJ1ZmZlcjsKKwkvKiBGb3IgaW5kZXgtb25seSBzY2FucyB0aGF0IG11c3QgYWNjZXNz IHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZpc2liaWxp dHkgbWFwIGJ1ZmZlciAqLworCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRvIHJlc29s dmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLworCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIAorLyoK KyAqIFBlci1iYXRjaCBkYXRhIHByaXZhdGUgdG8gdGhlIGhlYXAgdGFibGUgQU0uCisgKgorICog U3RvcmVkIGF0IGEgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlIEluZGV4U2NhbkJhdGNoIHBvaW50 ZXIsIGluIHRoZQorICogdGFibGUgQU0gb3BhcXVlIGFyZWEgb2YgZWFjaCBiYXRjaCBhbGxvY2F0 aW9uLgorICovCit0eXBlZGVmIHN0cnVjdCBIZWFwQmF0Y2hEYXRhCit7CisJdWludDgJICAgKnZp c0luZm87CQkvKiBwZXItaXRlbSB2aXNpYmlsaXR5IGZsYWdzLCBvciBOVUxMICovCit9IEhlYXBC YXRjaERhdGE7CisKKy8qCisgKiBQZXItaXRlbSB2aXNpYmlsaXR5IGZsYWdzIHN0b3JlZCBpbiBI ZWFwQmF0Y2hEYXRhLnZpc0luZm8gYXJyYXkKKyAqLworI2RlZmluZSBIRUFQX0JBVENIX1ZJU19D SEVDS0VECQkweDAxCS8qIGNoZWNrZWQgaXRlbSBpbiBWTT8gKi8KKyNkZWZpbmUgSEVBUF9CQVRD SF9WSVNfQUxMX1ZJU0lCTEUJMHgwMgkvKiBibG9jayBpcyBrbm93biBhbGwtdmlzaWJsZT8gKi8K KworLyogQWNjZXNzIHRoZSBoZWFwLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRl eFNjYW5CYXRjaCBwb2ludGVyICovCitzdGF0aWMgaW5saW5lIEhlYXBCYXRjaERhdGEgKgoraGVh cF9iYXRjaF9kYXRhKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBJbmRleFNjYW5EZXNjIHNjYW4pCit7 CisJcmV0dXJuIChIZWFwQmF0Y2hEYXRhICopICgoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNo X3RhYmxlX29mZnNldCk7Cit9CisKIC8qIFJlc3VsdCBjb2RlcyBmb3IgSGVhcFR1cGxlU2F0aXNm aWVzVmFjdXVtICovCiB0eXBlZGVmIGVudW0KIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9pbmRleGJhdGNoLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNzRhYTMzNDVjCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaApAQCAtMCwwICsxLDYwIEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRleGJhdGNoLmgKKyAqCSAgQmF0Y2gtYmFzZWQg aW5kZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgor ICoKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1 ZGUvYWNjZXNzL2luZGV4YmF0Y2guaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZu ZGVmIElOREVYQkFUQ0hfSAorI2RlZmluZSBJTkRFWEJBVENIX0gKKworI2luY2x1ZGUgInN0b3Jh Z2UvYnVmLmgiCisKKy8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICov Cit0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVk ZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CisKKy8qCisgKiBh bWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgaW5kZXhhbS5jCisgKi8KK2V4dGVybiB2b2lk IGluZGV4X2JhdGNoc2Nhbl9pbml0KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBp bmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGlu ZGV4X2JhdGNoc2Nhbl9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4 X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5k ZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKy8qCisgKiBh bWdldGJhdGNoIHV0aWxpdGllcyBjYWxsZWQgYnkgdGFibGUgQU1zCisgKi8KK2V4dGVybiB2b2lk IHRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVy biB2b2lkIHRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4s IEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIHRhYmxlYW1fdXRpbF91bmd1YXJk X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCisvKgor ICogYW1nZXRiYXRjaCB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcworICovCitleHRlcm4g dm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhT Y2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0ZXJuIEluZGV4U2Nh bkJhdGNoIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0 ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBVdGlsaXR5IG1hY3JvIGZvciBhY2Nlc3Np bmcgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBkYXRhLgorICoKKyAqIEVhY2ggYmF0 Y2ggYWxsb2NhdGlvbiBwbGFjZXMgdGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVhIGF0IGEgZml4ZWQg bmVnYXRpdmUKKyAqIG9mZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRjaCBwb2ludGVyIChzZWUg aW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKS4KKyAqIFRoaXMgbWFjcm8gcmV0dXJucyBhIHR5cGVk IHBvaW50ZXIgdG8gdGhhdCBhcmVhLCBhc3NlcnRpbmcgdGhhdCBldmVyeWJvZHkKKyAqIGhhcyB0 aGUgc2FtZSBpZGVhIGFib3V0IHdoZXJlIHRoZSBpbmRleCBBTSBvcGFxdWUgYXJlYSBpcyBpbiBw YXNzaW5nLgorICovCisjZGVmaW5lIGluZGV4YW1fdXRpbF9iYXRjaF9nZXRfYW1kYXRhKHNjYW4s IGJhdGNoLCB0eXBlKSBcCisJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0Y2hfaW5kZXhfb3BhcXVl X3NpemUgPT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0eXBlICopICgoY2hhciAq KSAoYmF0Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisjZW5kaWYJCQkJCQkJLyog SU5ERVhCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggZGE3NTAzYzU3Li45NWYxYzQ3YWMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysgYi9zcmMvaW5jbHVk ZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgTkJUUkVFX0gKIAog I2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtOTI0LDExMSArOTI1LDIwIEBAIHR5cGVkZWYg c3RydWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1bVBvc3RpbmdEYXRh ICpCVFZhY3V1bVBvc3Rpbmc7CiAKLS8qCi0gKiBCVFNjYW5PcGFxdWVEYXRhIGlzIHRoZSBidHJl ZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICogVGhpcyBjb25zaXN0 cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nlc3Nfa2V5cygpIGZv cgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9ybWF0aW9uIGFib3V0 IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJUU2NhblBvc0RhdGEg dG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJyZW50IGFuZCBtYXJr ZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJlciBzb21lIGtub3du LWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2VkIGJlZm9yZSB3ZSBj YW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBzY2FucyB3b3JrIGEg cGFnZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeQot ICogYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2ZSB0aGVtIGluIEJU U2NhblBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3aGlsZSByZXR1cm5p bmcgdGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5nLiAgVGhpcyBhcHBy b2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3QgYWx3YXlzCi0gKiBk cm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHByb2Nlc3MgdGhlIHJl dHVybmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28gcmVsZWFzZSB0aGUg cGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9wIHRoZSBwaW4gKHdo ZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5IFZBQ1VVTQotICog KHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGggdGhlIGxvY2sgYW5k IHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmluZyBvbiB0byBpdHMg c2libGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4s IHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBtYXRjaGVkIGl0ZW0s IG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhlIEluZGV4VHVwbGVz IGdvCi0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNoIEJUU2NhblBvc0l0 ZW0gc3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQgYXJyYXkuICBQb3N0 aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0gKiBhbGxvd2luZyB0 aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRoZSBwb3N0aW5nIGxp c3QKLSAqIHR1cGxlLgotICovCi0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0l0ZW0JLyogd2hh dCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2 YXRlIHRvIHRoZSBidHJlZSBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1Y3QgQlRCYXRjaERhdGEK IHsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBp dGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRp b24gd2l0aGluIHBhZ2UgKi8KLQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1 cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07CisJ QnVmZmVyCQlidWY7CQkJLyogaW5kZXggcGFnZSBidWZmZXIgcGluIChUSUQgcmV1c2UgaW50ZXJs b2NrKSAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFnZSB3aXRoIG1hdGNo aW5nIGl0ZW1zICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQg c2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBz aWJsaW5nICovCisJYm9vbAkJbW9yZUxlZnQ7CQkvKiBtb3JlIG1hdGNoaW5nIHBhZ2VzIHRvIHRo ZSBsZWZ0PyAqLworCWJvb2wJCW1vcmVSaWdodDsJCS8qIG1vcmUgbWF0Y2hpbmcgcGFnZXMgdG8g dGhlIHJpZ2h0PyAqLworfSBCVEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9z RGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52YWxpZCBtZWFucyB1 bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2ZWQgcG9zaXRpb24n cyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogcGFn ZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkv KiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwotCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3Vy clBhZ2UncyByaWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyogY3VyclBhZ2UncyBM U04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0KLQkvKiBzY2FuIGRpcmVjdGlvbiBmb3IgdGhlIHNh dmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlTY2FuRGlyZWN0aW9uIGRp cjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgbmV4dFR1 cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4gdGhlIGFzc29jaWF0 ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4dFR1cGxlT2Zmc2V0 OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhp bmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0JICogaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBh bmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5LgotCSAqLwotCWJvb2wJ CW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5 IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGlu ZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8g ZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFz dCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJz dC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUlu ZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8g Y2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGlu IGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRl bXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAq LwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdlXTsJLyogTVVTVCBC RSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7Ci0KLXR5cGVkZWYgQlRTY2FuUG9zRGF0YSAqQlRT Y2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3MpIFwKLSggXAotCUFz c2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJ CQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJc1ZhbGlkKChzY2Fu cG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBvcykgXAotCWRvIHsg XAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2FucG9zKS5idWYgPSBJ bnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW5JZlBp bm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9z KSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVm aW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tO dW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlk KChzY2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBh Z2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8geyBc Ci0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJyUGFn ZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCisvKiBBY2Nlc3MgdGhlIGJ0 cmVlLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5CYXRjaCBwb2ludGVy ICovCisjZGVmaW5lIEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKSBcCisJaW5kZXhhbV91dGls X2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIEJUQmF0Y2hEYXRhKQogCiAvKiBXZSBuZWVk IG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNjYW4g a2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwpAQCAtMTA1MCw2ICs5NjAsMjgg QEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2NvbXBhcmU7 CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5mbzsKIAor LyoKKyAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVk IGZvciBhbiBpbmRleHNjYW4uCisgKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2Fu IGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCisgKiBkZXRhaWxzIG9mIHRoZSBw cmVwcm9jZXNzaW5nKSwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFycmF5Cisg KiBrZXlzLiAgVGhlcmUgYXJlIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgY3VycmVudCBhcnJh eSBrZXlzIHRyYWNrIHRoZQorICogcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNjYW4gdGhyb3VnaCB0 aGUgaW5kZXgncyBrZXkgc3BhY2UgKHNlZSBfYnRfcmVhZHBhZ2UKKyAqIGFuZCBfYnRfYWR2YW5j ZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHRyYWNrIGFueXRoaW5nIGFib3V0 IHRoZQorICogY3VycmVudCBzY2FuIHBvc2l0aW9uIGluIHRoaXMgb3BhcXVlIHN0cnVjdC4KKyAq CisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJlcXVpcmVkIGJ5IHRo ZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2Us IGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UKKyAqIGFuZCByZXR1 cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4gcmVsZWFzZSB0aGUg cmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGluZXMuICBUaGlzIGFw cHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gX2J0X25leHQgaXMgcGFz c2VkIHByaW9yYmF0Y2gsIHdoaWNoIGNvbnRhaW5zIGRldGFpbHMgb2Ygd2hpY2gKKyAqIHBhZ2Ug aXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgKHByaW9yYmF0Y2ggaXMgcHJvdmlkZWQgYXMgYW4g YXJndW1lbnQgdG8KKyAqIGJ0Z2V0YmF0Y2ggYnkgY29yZSBjb2RlKS4KKyAqCisgKiBJZiB3ZSBh cmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRpcmUgSW5kZXhUdXBs ZSBmb3IgZWFjaAorICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBpdHMgaGVhcCBUSUQg YW5kIG9mZnNldC4gIFRoaXMgaXMgYWxzbyBwZXIgdGhlCisgKiBhbWdldGJhdGNoIGNvbnRyYWN0 LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBvbmNlLAorICogYWxs b3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJRCBpbiB0aGUgcG9z dGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVEYXRhCiB7CiAJLyog dGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygpOiAqLwpAQCAtMTA2 NiwzMiArOTk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogCUJUQXJyYXlL ZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0eS10eXBlIGFycmF5 IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBwcm9jcyBmb3IgcmVx dWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlDb250ZXh0OyAvKiBz Y2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8qIGluZm8gYWJvdXQg a2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAq LwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGluZGV4ZXMgb2Yga2ls bGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBz dG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFmIHBpbiBiZWZvcmUg YnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5k ZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkgKiB3b3Jrc3BhY2Vz IGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBFYWNoIGlzIG9mIHNp emUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBmdWxsIHBhZ2UncyB3 b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJCS8qIHR1cGxlIHN0 b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJLyogdHVwbGUgc3Rv cmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2VkIHBvc2l0aW9uIGlz IG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkgKiBkb24ndCB1c2Ug bWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBpbiBtYXJrSXRlbUlu ZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZvciB0aGUgbWFyayBw b3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIG1hcmssIGZp cnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQb3MuCi0JICovCi0J aW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBub3QgdmFsaWQgKi8K LQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVuY3kgKi8KLQlCVFNj YW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEgKi8KLQlCVFNjYW5Q b3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAqLwogfSBCVFNjYW5P cGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nhbk9wYXF1ZTsKQEAg LTExNjAsMTQgKzEwNjYsMTcgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVsYXRpb24gcmVsLCBE YXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2FuRGVzYyBidGJlZ2lu c2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBleHRlcm4gU2l6 ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lkICp0YXJnZXQpOwot ZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24g ZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2Nh biwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJCQkJCSBTY2FuRGly ZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNjYW5LZXkgb3JkZXJi eXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnRraWxsaXRlbXNiYXRjaChJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2b2lkIGJ0dW5ndWFy ZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOwogZXh0ZXJu IHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQg YnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBidG1hcmtwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpidGJ1bGtkZWxl dGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4QnVsa0RlbGV0ZVJl c3VsdCAqc3RhdHMsCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJh Y2ssCkBAIC0xMjcxLDggKzExODAsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJlcHJvY2Vzc19rZXlz KEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGlu IG5idHJlYWRwYWdlLmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwg Ym9vbCBmaXJzdHBhZ2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIs IE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2UpOwogZXh0ZXJuIHZv aWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CiBleHRlcm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1nckluZm8gKm9yZGVy cHJvYywKIAkJCQkJCQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGlyZWN0aW9uIGRpciwK QEAgLTEyODcsMTUgKzExOTcsMTUgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3NlYXJjaChSZWxhdGlv biByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkgIEJ1ZmZl ciAqYnVmUCwgaW50IGFjY2VzcywgYm9vbCByZXR1cm5zdGFjayk7CiBleHRlcm4gT2Zmc2V0TnVt YmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0U3RhdGUgaW5zZXJ0 c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5z ZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4dGVybiBib29sIF9i dF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKLWV4dGVybiBi b29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0 ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIHByaW9y YmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0aW9uIHJlbCwgdWlu dDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBmdW5j dGlvbnMgaW4gbmJ0dXRpbHMuYwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9idF9ta3NjYW5r ZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwotZXh0ZXJuIHZvaWQgX2J0X2tpbGxp dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfdmFjdXVtX2N5 Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0YXJ0X3ZhY3V1bShS ZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVsYXRpb24gcmVsKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oCmluZGV4IGNlMzQwYzA3Ni4uMzAxYWZhN2I2IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxz Y2FuLmgKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMu aCIKICNpbmNsdWRlICJhY2Nlc3MvaXR1cC5oIgorI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAj aW5jbHVkZSAibm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgpAQCAtMjQsNiArMjUsNyBAQAogCiAK IHN0cnVjdCBQYXJhbGxlbFRhYmxlU2NhbkRlc2NEYXRhOworc3RydWN0IFR1cGxlVGFibGVTbG90 OwogCiAvKgogICogR2VuZXJpYyBkZXNjcmlwdG9yIGZvciB0YWJsZSBzY2Fucy4gVGhpcyBpcyB0 aGUgYmFzZS1jbGFzcyBmb3IgdGFibGUgc2NhbnMsCkBAIC0xMjIsMTUgKzEyNCwxNzQgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVsQmxv Y2tUYWJsZVNjYW5Xb3JrZXI7CiB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiB7 CiAJUmVsYXRpb24JcmVsOworCisJLyogVGFibGUgQU0gcGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHNp emUgKE1BWEFMSUdOJ2QpLCBzZXQgYnkgQU0gKi8KKwl1aW50MTYJCWJhdGNoX29wYXF1ZV9zaXpl OworCisJLyogUGVyLWl0ZW0gdHJhaWxpbmcgZGF0YSBzaXplIGluIGVhY2ggYmF0Y2ggKi8KKwl1 aW50MTYJCWJhdGNoX3Blcl9pdGVtX3NpemU7CiB9IEluZGV4RmV0Y2hUYWJsZURhdGE7CiAKKy8q CisgKiBMb2NhdGlvbiBvZiBhIEJhdGNoTWF0Y2hpbmdJdGVtIHRoYXQgYXBwZWFycyBpbiBhIElu ZGV4U2NhbkJhdGNoIHJldHVybmVkCisgKiBieSAoYW5kIHN1YnNlcXVlbnRseSBwYXNzZWQgdG8p IGFuIGFtZ2V0YmF0Y2ggcm91dGluZQorICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdJdGVt UG9zCit7CisJLyogUG9zaXRpb24gcmVmZXJlbmNlcyBhIHZhbGlkIEluZGV4U2NhbkRlc2NEYXRh LmJhdGNoYnVmW10gZW50cnk/ICovCisJYm9vbAkJdmFsaWQ7CisKKwkvKiBJbmRleFNjYW5EZXNj RGF0YS5iYXRjaGJ1ZltdLXdpc2UgaW5kZXggdG8gcmVsZXZhbnQgSW5kZXhTY2FuQmF0Y2ggKi8K 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 YSAqSW5kZXhTY2FuQmF0Y2g7CisKKy8qCisgKiBTdGF0ZSB1c2VkIGJ5IHRhYmxlIEFNcyB0byBt YW5hZ2UgYW4gaW5kZXggc2NhbiB0aGF0IHVzZXMgdGhlIGFtZ2V0YmF0Y2gKKyAqIGludGVyZmFj ZS4gIFNjYW5zIHVzZSBhIHJpbmcgYnVmZmVyIG9mIGJhdGNoZXMgcmV0dXJuZWQgYnkgYW1nZXRi YXRjaC4KKyAqCisgKiBCYXRjaGVzIGFyZSBrZXB0IGluIHRoZSBvcmRlciB0aGF0IHRoZXkgd2Vy ZSByZXR1cm5lZCBpbiBieSBhbWdldGJhdGNoLAorICogc2luY2UgdGhhdCBpcyB0aGUgc2FtZSBv cmRlciB0aGF0IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCB3aWxsIHJldHVybgorICogbWF0Y2hl cyBpbi4gIEhvd2V2ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0dXBsZXMg aW4gd2hhdGV2ZXIKKyAqIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQgLS0gcHJv dmlkZWQgdGhhdCBzdWNoIHJlb3JkZXJpbmcgY2Fubm90CisgKiBhZmZlY3QgdGhlIG9yZGVyIHRo YXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGluLgorICov Cit0eXBlZGVmIHN0cnVjdCBCYXRjaFJpbmdCdWZmZXIKK3sKKwkvKiBjdXJyZW50IHBvc2l0aW9u cyBpbiBJbmRleFNjYW5EZXNjRGF0YS5iYXRjaGJ1ZltdIGZvciBzY2FuICovCisJQmF0Y2hSaW5n SXRlbVBvcyBzY2FuUG9zOwkvKiBzY2FuJ3MgcmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUmluZ0l0 ZW1Qb3MgbWFya1BvczsJLyogbWFyay9yZXN0b3JlIHBvc2l0aW9uICovCisKKwkvKiBtYXJrUG9z J3MgYmF0Y2ggKG5vdCBpbiByaW5nIGJ1ZmZlciB3aGVuIG1hcmtCYXRjaCAhPSBzY2FuQmF0Y2gp ICovCisJSW5kZXhTY2FuQmF0Y2ggbWFya0JhdGNoOworCisJLyoKKwkgKiBoZWFkQmF0Y2ggaXMg YW4gaW5kZXggdG8gdGhlIGVhcmxpZXN0IHN0aWxsLXZhbGlkIHJpbmcgYnVmZmVyIGJhdGNoCisJ ICogc2xvdCBpbiBiYXRjaGJ1ZltdLiAgVGhlIGFjdHVhbCBhcnJheSBwb3NpdGlvbiBmb3IgaXRz IEluZGV4U2NhbkJhdGNoCisJICogaXMgaGVhZEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENI RVMgLSAxKSwgc2luY2UgdGhlc2UgaW5kZXhlcyB1c2UKKwkgKiB1bnNpZ25lZCB3cmFwcGluZyBh cml0aG1ldGljLiAgaGVhZEJhdGNoIG11c3QgYmUgdGhlIHNjYW4ncyBjdXJyZW50CisJICogc2Nh bkJhdGNoIChpLmUuIHRoZSBjdXJyZW50IHNjYW5Qb3MgYmF0Y2gpLgorCSAqLworCXVpbnQ4CQlo ZWFkQmF0Y2g7CisKKwkvKgorCSAqIG5leHRCYXRjaCBpcyBhbiBpbmRleCB0byB0aGUgbmV4dCBf ZW1wdHlfIHJpbmcgYnVmZmVyIGJhdGNoIHNsb3QgaW4KKwkgKiBiYXRjaGJ1ZltdLiAgQXMgd2l0 aCBoZWFkQmF0Y2gsIHRoZSBhY3R1YWwgYmF0Y2hidWZbXSBhcnJheSBwb3NpdGlvbiBpcworCSAq IG5leHRCYXRjaCAmIChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIC0gMSkuICBBIG5ldyBiYXRjaCBj YW4gb25seSBiZQorCSAqIGFwcGVuZGVkIHRvIHRoaXMgcG9zaXRpb24vc2xvdCB3aGVuICFpbmRl eF9zY2FuX2JhdGNoX2Z1bGwoKS4KKwkgKgorCSAqIE5vdGU6IHRoZSBzY2FuJ3MgbW9zdCByZWNl bnRseSBhcHBlbmRlZCBiYXRjaCAoaXRzIHRhaWwgYmF0Y2gpIGlzCisJICogYWx3YXlzIGxvY2F0 ZWQgYXQgKG5leHRCYXRjaCAtIDEpICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKS4KKwkg Ki8KKwl1aW50OAkJbmV4dEJhdGNoOworfSBCYXRjaFJpbmdCdWZmZXI7CisKIHN0cnVjdCBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb247CiAKIC8qCiAgKiBXZSB1c2UgdGhlIHNhbWUgSW5kZXhTY2Fu RGVzY0RhdGEgc3RydWN0dXJlIGZvciBib3RoIGFtZ2V0dHVwbGUtYmFzZWQKICAqIGFuZCBhbWdl dGJpdG1hcC1iYXNlZCBpbmRleCBzY2Fucy4gIFNvbWUgZmllbGRzIGFyZSBvbmx5IHJlbGV2YW50 IGluCi0gKiBhbWdldHR1cGxlLWJhc2VkIHNjYW5zLgorICogYW1nZXR0dXBsZS1iYXNlZCBzY2Fu cy4gIE90aGVycyBhcmUgb25seSB1c2VkIGluIGFtZ2V0YmF0Y2gtYmFzZWQgc2NhbnMuCisgKgor ICogVGhlIHJpbmcgYnVmZmVyIHVzZWQgYnkgYW1nZXRiYXRjaCBzY2FucyBpcyBzdG9yZWQgaGVy ZSBhcyBhIGZpeGVkIGFycmF5IG9mCisgKiBwb2ludGVycyB0byBiYXRjaGVzLiAgV2UgbmVlZCBh IG1pbmltdW0gb2YgdHdvLCBzaW5jZSB3ZSdsbCBvbmx5IGNvbnNpZGVyCisgKiByZWxlYXNpbmcg b25lIGJhdGNoIHdoZW4gYW5vdGhlciBpcyByZWFkLgogICovCisjZGVmaW5lIElOREVYX1NDQU5f Q0FDSEVfQkFUQ0hFUwkyCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTY0CisKK1N0 YXRpY0Fzc2VydERlY2woSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyA8PSBQR19VSU5UOF9NQVggKyAx LAorCQkJCSAiSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyBtdXN0IGZpdCBpbiB1aW50OCByaW5nIGJ1 ZmZlciBpbmRleGVzIik7CitTdGF0aWNBc3NlcnREZWNsKChJTkRFWF9TQ0FOX01BWF9CQVRDSEVT ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKSkgPT0gMCwKKwkJCQkgIklOREVYX1NDQU5f TUFYX0JBVENIRVMgbXVzdCBiZSBhIHBvd2VyIG9mIDIiKTsKKwogdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhTY2FuRGVzY0RhdGEKIHsKIAkvKiBzY2FuIHBhcmFtZXRlcnMgKi8KQEAgLTE0MSw2ICszMDIs MjYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlpbnQJCQludW1iZXJPZk9y ZGVyQnlzOwkvKiBudW1iZXIgb2Ygb3JkZXJpbmcgb3BlcmF0b3JzICovCiAJc3RydWN0IFNjYW5L ZXlEYXRhICprZXlEYXRhOwkvKiBhcnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3JpcHRvcnMg Ki8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBvcmRlcmlu ZyBvcCBkZXNjcmlwdG9ycyAqLworCisJLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUg c3RhdGUgKi8KKwl2b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBp bmZvICovCisKKwkvKiBzY2FuJ3MgYW1nZXRiYXRjaCBzdGF0ZSAob25seSB1c2VkIGJ5IGFtZ2V0 YmF0Y2gvdXNlYmF0Y2hyaW5nIHNjYW5zKSAqLworCUJhdGNoUmluZ0J1ZmZlciBiYXRjaHJpbmdi dWY7CisKKwkvKgorCSAqIEFycmF5IG9mIHBvaW50ZXJzIHRvIHJlY3ljbGFibGUgYmF0Y2hlcywg dXNlZCBieSBhbGwgYW1nZXRiYXRjaCBzY2FucworCSAqIGFuZCBieSBhbWdldGJpdG1hcCBzY2Fu cyBvZiBhbiBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIGFtZ2V0YmF0Y2gKKwkgKi8KKwlJbmRleFNj YW5CYXRjaCBiYXRjaGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBBcnJh eSBvZiBwb2ludGVycyB0byBiYXRjaGVzLCByZWZlcmVuY2VkIHdpdGhpbiBiYXRjaHJpbmdidWYg Ki8KKwlJbmRleFNjYW5CYXRjaCBiYXRjaGJ1ZltJTkRFWF9TQ0FOX01BWF9CQVRDSEVTXTsKKwor CWJvb2wJCXVzZWJhdGNocmluZzsJLyogc2NhbiB1c2VzIGFtZ2V0YmF0Y2gvYmF0Y2hyaW5nYnVm PyAqLworCWJvb2wJCWJhdGNoSW1tZWRpYXRlVW5ndWFyZDsJLyogZHJvcCBUSUQgcmVjeWNsaW5n IGludGVybG9jayBpbgorCQkJCQkJCQkJCSAqIGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s/ICov CisKIAlib29sCQl4c193YW50X2l0dXA7CS8qIGNhbGxlciByZXF1ZXN0cyBpbmRleCB0dXBsZXMg Ki8KIAlib29sCQl4c190ZW1wX3NuYXA7CS8qIHVucmVnaXN0ZXIgc25hcHNob3QgYXQgc2NhbiBl bmQ/ICovCiAKQEAgLTE0OSw5ICszMzAsOCBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNj RGF0YQogCWJvb2wJCWlnbm9yZV9raWxsZWRfdHVwbGVzOwkvKiBkbyBub3QgcmV0dXJuIGtpbGxl ZCBlbnRyaWVzICovCiAJYm9vbAkJeGFjdFN0YXJ0ZWRJblJlY292ZXJ5OwkvKiBwcmV2ZW50cyBr aWxsaW5nL3NlZWluZyBraWxsZWQKIAkJCQkJCQkJCQkgKiB0dXBsZXMgKi8KLQotCS8qIGluZGV4 IGFjY2VzcyBtZXRob2QncyBwcml2YXRlIHN0YXRlICovCi0Jdm9pZAkgICAqb3BhcXVlOwkJCS8q IGFjY2Vzcy1tZXRob2Qtc3BlY2lmaWMgaW5mbyAqLworCS8qIHhzX3NuYXBzaG90IHVzZXMgYW4g TVZDQyBzbmFwc2hvdD8gKi8KKwlib29sCQlNVkNDU2NhbjsKIAogCS8qCiAJICogSW5zdHJ1bWVu dGF0aW9uIGNvdW50ZXJzIG1haW50YWluZWQgYnkgYWxsIGluZGV4IEFNcyBkdXJpbmcgYm90aApA QCAtMTYwLDEwICszNDAsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlz dHJ1Y3QgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50OwogCiAJLyoKLQkgKiBJ biBhbiBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCBhbWdldHR1cGxlIGNhbGwgbXVzdCBm aWxsIGVpdGhlcgotCSAqIHhzX2l0dXAgKGFuZCB4c19pdHVwZGVzYykgb3IgeHNfaGl0dXAgKGFu ZCB4c19oaXR1cGRlc2MpIHRvIHByb3ZpZGUgdGhlCi0JICogZGF0YSByZXR1cm5lZCBieSB0aGUg c2Nhbi4gIEl0IGNhbiBmaWxsIGJvdGgsIGluIHdoaWNoIGNhc2UgdGhlIGhlYXAKLQkgKiBmb3Jt YXQgd2lsbCBiZSB1c2VkLgorCSAqIEluIGFuIGluZGV4LW9ubHkgc2NhbiwgYSBzdWNjZXNzZnVs IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBjYWxsIG11c3QKKwkgKiBmaWxsIGVpdGhlciB4c19p dHVwIChhbmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0bwor CSAqIHByb3ZpZGUgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBi b3RoLCBpbiB3aGljaCBjYXNlCisJICogdGhlIGhlYXAgZm9ybWF0IHdpbGwgYmUgdXNlZC4KIAkg Ki8KIAlJbmRleFR1cGxlCXhzX2l0dXA7CQkvKiBpbmRleCB0dXBsZSByZXR1cm5lZCBieSBBTSAq LwogCXN0cnVjdCBUdXBsZURlc2NEYXRhICp4c19pdHVwZGVzYzsJLyogcm93dHlwZSBkZXNjcmlw dG9yIG9mIHhzX2l0dXAgKi8KQEAgLTE3MSwxMiArMzUxLDI1IEBAIHR5cGVkZWYgc3RydWN0IElu ZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IFR1cGxlRGVzY0RhdGEgKnhzX2hpdHVwZGVzYzsgLyog cm93dHlwZSBkZXNjcmlwdG9yIG9mIHhzX2hpdHVwICovCiAKIAlJdGVtUG9pbnRlckRhdGEgeHNf aGVhcHRpZDsgLyogcmVzdWx0ICovCi0JYm9vbAkJeHNfaGVhcF9jb250aW51ZTsJLyogVCBpZiBt dXN0IGtlZXAgd2Fsa2luZywgcG90ZW50aWFsCi0JCQkJCQkJCQkgKiBmdXJ0aGVyIHJlc3VsdHMg Ki8KKworCXVpbnQxNgkJbWF4aXRlbXNiYXRjaDsJLyogc2V0IGJ5IGFtYmVnaW5zY2FuIHdoZW4g YW1nZXRiYXRjaCB1c2VkICovCisKIAlJbmRleEZldGNoVGFibGVEYXRhICp4c19oZWFwZmV0Y2g7 CiAKKwkvKiBSZXNvbHZlZCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sIHNldCBieSBpbmRl eF9iZWdpbnNjYW4gKi8KKwlib29sCQkoKnhzX2dldG5leHRfc2xvdCkgKHN0cnVjdCBJbmRleFNj YW5EZXNjRGF0YSAqc2NhbiwKKwkJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCQkJc3RydWN0IFR1cGxlVGFibGVTbG90ICpzbG90KTsKKwogCWJvb2wJCXhzX3JlY2hlY2s7 CQkvKiBUIG1lYW5zIHNjYW4ga2V5cyBtdXN0IGJlIHJlY2hlY2tlZCAqLwogCisJLyogUGVyLWJh dGNoIG9wYXF1ZSBhcmVhIHNpemVzLCBzZXQgYnkgaW5kZXggQU0gaW4gYW1iZWdpbnNjYW4gKi8K Kwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9zaXplOwkvKiBNQVhBTElHTidkIGluZGV4IEFN IG9wYXF1ZSBzaXplICovCisJdWludDE2CQliYXRjaF90dXBsZXNfd29ya3NwYWNlOyAvKiBjdXJy VHVwbGVzIHdvcmtzcGFjZSBzaXplICovCisKKwkvKiBDb21wdXRlZCBvZmZzZXQgZnJvbSBiYXRj aCBwb2ludGVyIHRvIHRhYmxlIEFNIG9wYXF1ZSAoaW5jbHVkZXMgYm90aCkgKi8KKwl1aW50MTYJ CWJhdGNoX3RhYmxlX29mZnNldDsKKwogCS8qCiAJICogV2hlbiBmZXRjaGluZyB3aXRoIGFuIG9y ZGVyaW5nIG9wZXJhdG9yLCB0aGUgdmFsdWVzIG9mIHRoZSBPUkRFUiBCWQogCSAqIGV4cHJlc3Np b25zIG9mIHRoZSBsYXN0IHJldHVybmVkIHR1cGxlLCBhY2NvcmRpbmcgdG8gdGhlIGluZGV4LiAg SWYKQEAgLTIwMiw4ICszOTUsNiBAQCB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2NhbkRl c2NEYXRhCiAJY2hhcgkJcHNfc25hcHNob3RfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwog fQkJCVBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGE7CiAKLXN0cnVjdCBUdXBsZVRhYmxlU2xvdDsK LQogLyogU3RydWN0IGZvciBzdG9yYWdlLW9yLWluZGV4IHNjYW5zIG9mIHN5c3RlbSB0YWJsZXMg Ki8KIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogewpAQCAtMjE1LDQgKzQwNiwxMzUg QEAgdHlwZWRlZiBzdHJ1Y3QgU3lzU2NhbkRlc2NEYXRhCiAJc3RydWN0IFR1cGxlVGFibGVTbG90 ICpzbG90OwogfSBTeXNTY2FuRGVzY0RhdGE7CiAKKy8qCisgKiBSZXR1cm4gdGhlIHRydWUgYWxs b2NhdGlvbiBiYXNlIG9mIGEgYmF0Y2ggKGFjY291bnRpbmcgZm9yIEFNIG9wYXF1ZSBhcmVhcwor ICogc3RvcmVkIGJlZm9yZSB0aGUgSW5kZXhTY2FuQmF0Y2hEYXRhIHBvaW50ZXIpLgorICovCitz dGF0aWMgaW5saW5lIHZvaWQgKgorYmF0Y2hfYWxsb2NfYmFzZShJbmRleFNjYW5CYXRjaCBiYXRj aCwgSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIChjaGFyICopIGJhdGNoIC0g c2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0OworfQorCisvKgorICogQ291bnQgaG93IG1hbnkgYmF0 Y2hlcyBhcmUgY3VycmVudGx5IGxvYWRlZCBpbiB0aGUgcmluZyBidWZmZXIuCisgKi8KK3N0YXRp YyBpbmxpbmUgdWludDgKK2luZGV4X3NjYW5fYmF0Y2hfY291bnQoSW5kZXhTY2FuRGVzY0RhdGEg KnNjYW4pCit7CisJcmV0dXJuICh1aW50OCkgKHNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2gg LQorCQkJCQlzY2FuLT5iYXRjaHJpbmdidWYuaGVhZEJhdGNoKTsKK30KKworLyoKKyAqIERpZCB3 ZSBhbHJlYWR5IGxvYWQgYmF0Y2ggd2l0aCB0aGUgcmVxdWVzdGVkIGluZGV4PworICoKKyAqIE5P VEU6IGEgc3RhbGUgYmF0Y2ggaWR4IGNhbiBhbGlhcyBhIGN1cnJlbnRseS1sb2FkZWQgcmFuZ2Ug YWZ0ZXIgdWludDgKKyAqIG92ZXJmbG93LCBwcm9kdWNpbmcgYSBmYWxzZSBwb3NpdGl2ZS4gIEZh bHNlIG5lZ2F0aXZlcyBhcmUgbm90IHBvc3NpYmxlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wK K2luZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCB1aW50OCBp ZHgpCit7CisJcmV0dXJuIChpbnQ4KSAoaWR4IC0gc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRj aCkgPj0gMCAmJgorCQkoaW50OCkgKGlkeCAtIHNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2gp IDwgMDsKK30KKworLyoKKyAqIEhhdmUgd2UgbG9hZGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBi YXRjaGVzPworICovCitzdGF0aWMgaW5saW5lIGJvb2wKK2luZGV4X3NjYW5fYmF0Y2hfZnVsbChJ bmRleFNjYW5EZXNjRGF0YSAqc2NhbikKK3sKKwlyZXR1cm4gaW5kZXhfc2Nhbl9iYXRjaF9jb3Vu dChzY2FuKSA9PSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTOworfQorCisvKgorICogUmV0dXJuIGJh dGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguCisgKi8KK3N0YXRpYyBpbmxpbmUgSW5kZXhTY2Fu QmF0Y2gKK2luZGV4X3NjYW5fYmF0Y2goSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4sIHVpbnQ4IGlk eCkKK3sKKwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQoc2NhbiwgaWR4KSk7CisKKwly ZXR1cm4gc2Nhbi0+YmF0Y2hidWZbaWR4ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV07 Cit9CisKKy8qCisgKiBBcHBlbmQgZ2l2ZW4gYmF0Y2ggdG8gc2NhbidzIGJhdGNoIHJpbmcgYnVm ZmVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2luZGV4X3NjYW5fYmF0Y2hfYXBwZW5kKElu ZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwlCYXRjaFJp bmdCdWZmZXIgKnJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCXVpbnQ4CQluZXh0QmF0 Y2ggPSByaW5nYnVmLT5uZXh0QmF0Y2g7CisKKwlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVs bChzY2FuKSk7CisKKwlzY2FuLT5iYXRjaGJ1ZltuZXh0QmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhf QkFUQ0hFUyAtIDEpXSA9IGJhdGNoOworCXJpbmdidWYtPm5leHRCYXRjaCsrOworfQorCisvKgor ICogQWR2YW5jZSBwb3NpdGlvbiB0byBpdHMgbmV4dCBpdGVtIGluIHRoZSBiYXRjaC4KKyAqCisg KiBBZHZhbmNlIHRvIHRoZSBuZXh0IGl0ZW0gd2l0aGluIHRoZSBwcm92aWRlZCBiYXRjaCAob3Ig dG8gdGhlIHByZXZpb3VzIGl0ZW0sCisgKiB3aGVuIHNjYW5uaW5nIGJhY2t3YXJkcykuCisgKgor ICogUmV0dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiBjb3VsZCBiZSBhZHZhbmNlZC4gIFJldHVy bnMgZmFsc2Ugd2hlbiB0aGVyZQorICogYXJlIG5vIG1vcmUgaXRlbXMgZnJvbSB0aGUgYmF0Y2gg cmVtYWluaW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqLworc3RhdGljIGlubGlu ZSBib29sCitpbmRleF9zY2FuX3Bvc19hZHZhbmNlKFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQorewor CUFzc2VydChwb3MtPnZhbGlkKTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVj dGlvbikpCisJeworCQlpZiAoKytwb3MtPml0ZW0gPiBiYXRjaC0+bGFzdEl0ZW0pCisJCQlyZXR1 cm4gZmFsc2U7CisJfQorCWVsc2UJCQkJCQkvKiBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZCAqLwor CXsKKwkJaWYgKC0tcG9zLT5pdGVtIDwgYmF0Y2gtPmZpcnN0SXRlbSkKKwkJCXJldHVybiBmYWxz ZTsKKwl9CisKKwkvKiBBZHZhbmNlZCB3aXRoaW4gYmF0Y2ggKi8KKwlyZXR1cm4gdHJ1ZTsKK30K KworLyoKKyAqIEFkdmFuY2UgYmF0Y2ggcG9zaXRpb24gdG8gdGhlIHN0YXJ0IG9mIGl0cyBuZXcg YmF0Y2guCisgKgorICogV2hlbiB3ZSdyZSBjYWxsZWQsIHRoaXMgcG9zaXRpb24gc2hvdWxkIHBv aW50IHRvIGEgYmF0Y2ggdGhhdCBjYWxsZXIganVzdAorICogZmluaXNoZWQgY29uc3VtaW5nIGZy b20uICBXaGVuIHdlIHJldHVybiwgdGhpcyBwb3NpdGlvbiB3aWxsIHBvaW50IHRvCisgKiBuZXh0 QmF0Y2gsIHRoZSBuZXh0IGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyLiAgV2UnbGwgaGF2ZSBh bHNvIHNldCB0aGUKKyAqIHBvc2l0aW9uJ3MgaXRlbSBvZmZzZXQgdG8gbmV4dEJhdGNoJ3MgZmly c3QgaXRlbSBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uCisgKiAod2hpY2ggaXMgYWN0dWFsbHkgbmV4 dEJhdGNoJ3MgX2xhc3RfIGl0ZW0gd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLgorICoKKyAqIG5l eHRCYXRjaCBkb2Vzbid0IGhhdmUgdG8gYmUgKGFuZCBvZnRlbiBpc24ndCkgdGhlIG1vc3QgcmVj ZW50bHkgYXBwZW5kZWQKKyAqIGJhdGNoIGluIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBJdCBp cyBtZXJlbHkgdGhlIG5leHQgYmF0Y2ggaW4gbGluZSB0byBiZQorICogY29uc3VtZWQgZnJvbSB0 aGUgcG9pbnQgb2YgdmlldyBvZiBvdXIgY2FsbGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQK K2luZGV4X3NjYW5fcG9zX25leHRiYXRjaChTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CSBJbmRleFNjYW5CYXRjaCBuZXh0QmF0Y2gsIEJhdGNoUmluZ0l0ZW1Qb3MgKnBvcykKK3sKKwlB c3NlcnQobmV4dEJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCS8qIEluY3JlbWVudCBiYXRj aCAobWlnaHQgd3JhcCksIG9yIGluaXRpYWxpemUgaXQgdG8gemVybyAqLworCWlmIChwb3MtPnZh bGlkKQorCQlwb3MtPmJhdGNoKys7CisJZWxzZQorCQlwb3MtPmJhdGNoID0gMDsKKworCXBvcy0+ dmFsaWQgPSB0cnVlOworCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkK KwkJcG9zLT5pdGVtID0gbmV4dEJhdGNoLT5maXJzdEl0ZW07CisJZWxzZQorCQlwb3MtPml0ZW0g PSBuZXh0QmF0Y2gtPmxhc3RJdGVtOworfQorCiAjZW5kaWYJCQkJCQkJLyogUkVMU0NBTl9IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIvc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaAppbmRleCAwNjA4NDc1MjIuLjRlYWY3ZGU3OSAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCkBAIC00MTgsNyArNDE4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkgKiBJbmRleEZldGNoVGFibGVEYXRhLCB3aGljaCB0aGUgQU0gd2lsbCB0eXBpY2FsbHkgZW1i ZWQgaW4gYSBsYXJnZXIKIAkgKiBzdHJ1Y3R1cmUgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9u LgogCSAqCi0JICogVHVwbGVzIGZvciBhbiBpbmRleCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQg dmlhIGluZGV4X2ZldGNoX3R1cGxlLgorCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBjYW4g dGhlbiBiZSBmZXRjaGVkIHZpYSBvbmUgb2YgdGhlIGZvdXIKKwkgKiBzbG90LWJhc2VkIGNhbGxi YWNrcyBjYWxsZWQgdGhyb3VnaCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QsIG9yIHZpYQorCSAq IHRoZSBsb3dlci1sZXZlbCBUSUQtYmFzZWQgaW5kZXhfZmV0Y2hfdHVwbGUgaW50ZXJmYWNlLgog CSAqLwogCXN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICooKmluZGV4X2ZldGNoX2JlZ2luKSAo UmVsYXRpb24gcmVsKTsKIApAQCAtNDMzLDExICs0MzUsNTAgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFi bGVBbVJvdXRpbmUKIAkgKi8KIAl2b2lkCQkoKmluZGV4X2ZldGNoX2VuZCkgKHN0cnVjdCBJbmRl eEZldGNoVGFibGVEYXRhICpkYXRhKTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSB0YWJsZSBBTSdz IHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxvY2F0aW9uLgorCSAqCisJ ICogQ2FsbGVkIGJ5IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyBmb3IgZWFjaCBuZXcgb3IgcmVj eWNsZWQgYmF0Y2guCisJICogVGFibGUgQU1zIHNob3VsZCBzZXQgdXAgaXRzIG9wYXF1ZSBhcmVh IChhdCBhIG5lZ2F0aXZlIG9mZnNldCBmcm9tIHRoZQorCSAqIGJhdGNoIHBvaW50ZXIpIGFuZCBh bnkgdHJhaWxpbmcgcGVyLWl0ZW0gZGF0YSAoZS5nLiB2aXNpYmlsaXR5IGZsYWdzKS4KKwkgKgor CSAqICduZXdfYWxsb2MnIGlzIHRydWUgZm9yIGZyZXNobHkgcGFsbG9jJ2QgYmF0Y2hlcywgZmFs c2UgZm9yIGJhdGNoZXMKKwkgKiByZWN5Y2xlZCBmcm9tIHRoZSBjYWNoZS4KKwkgKi8KKwl2b2lk CQkoKmluZGV4X2ZldGNoX2JhdGNoX2luaXQpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJ CQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkJICAgYm9vbCBuZXdfYWxsb2Mp OworCisJLyoKKwkgKiBGZXRjaCB0aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4sIHNj YW5uaW5nIGluIHRoZSBzcGVjaWZpZWQKKwkgKiBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBp ZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqCisJICogRm91ciB2YXJp YW50cyBjb3ZlciB0aGUge3BsYWluLCBpbmRleC1vbmx5fSB4IHthbWdldGJhdGNoLCBhbWdldHR1 cGxlfQorCSAqIG1hdHJpeC4gIGluZGV4X2JlZ2luc2NhbiByZXNvbHZlcyB3aGljaCB2YXJpYW50 IHRvIHVzZS4gIENhbGxlcnMgdXNlCisJICogdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KCksIHdo aWNoIGNhbGxzIHRocm91Z2ggdGhhdCBwb2ludGVyIGRpcmVjdGx5LgorCSAqLworCWJvb2wJCSgq aW5kZXhfcGxhaW5fYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QpIChJbmRleFNjYW5EZXNjIHNjYW4s CisJCQkJCQkJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQlU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CisJYm9vbAkJKCppbmRleF9vbmx5X2FtZ2V0YmF0Y2hfZ2V0 bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsK Kwlib29sCQkoKmluZGV4X3BsYWluX2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCWJvb2wJCSgqaW5kZXhfb25seV9hbWdl dHR1cGxlX2dldG5leHRfc2xvdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkg ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xv dCAqc2xvdCk7CisKIAkvKgogCSAqIEZldGNoIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBh ZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVzdAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3Rg LiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVz dCwgcmV0dXJuIHRydWUsIGZhbHNlIG90aGVyd2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dl ci1sZXZlbCBjYWxsYmFjayB0aGF0IHRha2VzIGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBD YWxsZXJzIHNob3VsZCBmYXZvciB0aGUgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNr cyB3aGVuZXZlcgorCSAqIHBvc3NpYmxlLgorCSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRv IG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5z IGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lv biBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVu IGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBAIC0xMjA3LDYgKzEyNDgsMzUgQEAgdGFibGVfaW5k ZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCXNjYW4tPnJl bC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwogfQogCisvKgorICogSW5pdGlh bGl6ZSB0YWJsZSBBTSdzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSB3aXRoaW4gYSBiYXRjaCBhbGxv Y2F0aW9uLgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVh Y2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxl X2luZGV4X2ZldGNoX2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBiYXRjaCwKKwkJCQkJCQkgYm9vbCBuZXdfYWxsb2MpCit7CisJc2Nhbi0+aGVhcFJlbGF0aW9u LT5yZF90YWJsZWFtLT5pbmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLAorCQkJCQkJ CQkJCQkJCQkgICBuZXdfYWxsb2MpOworfQorCisvKgorICogRmV0Y2ggdGhlIG5leHQgdHVwbGUg ZnJvbSBhbiBpbmRleCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKKyAqIHNwZWNp ZmllZCBkaXJlY3Rpb24uIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2Ug b3RoZXJ3aXNlLgorICoKKyAqIERpc3BhdGNoZXMgdGhyb3VnaCBzY2FuLT54c19nZXRuZXh0X3Ns b3QsIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgYnkKKyAqIGluZGV4X2JlZ2luc2Nhbi4KKyAqCisg KiBDYWxsZXJzIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjayBhbmQgcmVjaGVjayBzY2FuIGtl eXMgaWYgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAordGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KEluZGV4U2NhbkRlc2MgaXNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90KQoreworCXJldHVybiBpc2Nhbi0+eHNfZ2V0bmV4 dF9zbG90KGlzY2FuLCBkaXJlY3Rpb24sIHNsb3QpOworfQorCiAvKgogICogRmV0Y2hlcywgYXMg cGFydCBvZiBhbiBpbmRleCBzY2FuLCB0dXBsZSBhdCBgdGlkYCBpbnRvIGBzbG90YCwgYWZ0ZXIg ZG9pbmcKICAqIGEgdmlzaWJpbGl0eSB0ZXN0IGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBh IHR1cGxlIHdhcyBmb3VuZCBhbmQgcGFzc2VkCkBAIC0xMjMwLDYgKzEzMDAsOSBAQCB0YWJsZV9p bmRleF9mZXRjaF9lbmQoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAgKiBlbnRy eSAobGlrZSBoZWFwJ3MgSE9UKS4gV2hlcmVhcyB0YWJsZV90dXBsZV9mZXRjaF9yb3dfdmVyc2lv bigpIG9ubHkKICAqIGV2YWx1YXRlcyB0aGUgdHVwbGUgZXhhY3RseSBhdCBgdGlkYC4gT3V0c2lk ZSBvZiBpbmRleCBlbnRyeSAtPnRhYmxlIHR1cGxlCiAgKiBsb29rdXBzLCB0YWJsZV90dXBsZV9m ZXRjaF9yb3dfdmVyc2lvbigpIGlzIHdoYXQncyB1c3VhbGx5IG5lZWRlZC4KKyAqCisgKiBUaGlz IGlzIGEgbG93ZXItbGV2ZWwgaW50ZXJmYWNlIHRoYXQgdGFrZXMgYSBUSUQgZnJvbSB0aGUgY2Fs bGVyLiAgQ2FsbGVycworICogc2hvdWxkIGZhdm9yIHRoZSB0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3QgaW50ZXJmYWNlIHdoZW5ldmVyIHBvc3NpYmxlLgogICovCiBzdGF0aWMgaW5saW5lIGJvb2wK IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2Fu LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVk ZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCA2ODRlMzk4ZjguLjRjNmEwNjUyMyAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv ZXhlY25vZGVzLmgKQEAgLTE3NjMsNyArMTc2Myw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2Nh blN0YXRlCiAgKgkJSW5zdHJ1bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRp b24KICAqCQlTaGFyZWRJbmZvCQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChu byBsZWFkZXIgZW50cnkpCiAgKgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxl cyBmZXRjaGVkIGZyb20gdGhlIHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2Ug Zm9yIHZpc2liaWxpdHkgbWFwIHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXpl IG9mIHBhcmFsbGVsIGluZGV4LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdB dHROdW1zIGF0dG51bXMgb2YgbmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxF TgogICoJCU5hbWVDU3RyaW5nQ291bnQgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIE5hbWVD U3RyaW5nQXR0TnVtcyBhcnJheQpAQCAtMTc4Niw3ICsxNzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhPbmx5U2NhblN0YXRlCiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX0luc3Ry dW1lbnQ7CiAJU2hhcmVkSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX1NoYXJlZEluZm87 CiAJVHVwbGVUYWJsZVNsb3QgKmlvc3NfVGFibGVTbG90OwotCUJ1ZmZlcgkJaW9zc19WTUJ1ZmZl cjsKIAlTaXplCQlpb3NzX1BzY2FuTGVuOwogCUF0dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJpbmdB dHROdW1zOwogCWludAkJCWlvc3NfTmFtZUNTdHJpbmdDb3VudDsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK aW5kZXggMjc3NThlYzE2Li4yNWRhODdiNmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBAIC0xNDI1 LDEyICsxNDI1LDEyIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4T3B0SW5mbwogCWJvb2wJCWFtb3B0 aW9uYWxrZXk7CiAJYm9vbAkJYW1zZWFyY2hhcnJheTsKIAlib29sCQlhbXNlYXJjaG51bGxzOwot CS8qIGRvZXMgQU0gaGF2ZSBhbWdldHR1cGxlIGludGVyZmFjZT8gKi8KLQlib29sCQlhbWhhc2dl dHR1cGxlOworCS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJhdGNoIChvciBnZXR0dXBsZSkgaW50ZXJm YWNlPyAqLworCWJvb2wJCWFtY2FucGxhaW5zY2FuOwogCS8qIGRvZXMgQU0gaGF2ZSBhbWdldGJp dG1hcCBpbnRlcmZhY2U/ICovCiAJYm9vbAkJYW1oYXNnZXRiaXRtYXA7CiAJYm9vbAkJYW1jYW5w YXJhbGxlbDsKLQkvKiBkb2VzIEFNIGhhdmUgYW1tYXJrcG9zIGludGVyZmFjZT8gKi8KKwkvKiBp cyBBTSBwcmVwYXJlZCBmb3IgdXMgdG8gcmVzdG9yZSBhIG1hcms/ICovCiAJYm9vbAkJYW1jYW5t YXJrcG9zOwogCS8qIEFNJ3MgY29zdCBlc3RpbWF0b3IgKi8KIAkvKiBSYXRoZXIgdGhhbiBpbmNs dWRlIGFtYXBpLmggaGVyZSwgd2UgZGVjbGFyZSBhbWNvc3Rlc3RpbWF0ZSBsaWtlIHRoaXMgKi8K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9icmluL2JyaW4uYwppbmRleCAyYTBmOGM4ZTMuLjBiNDM5NjUwZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9icmluL2JyaW4uYwpAQCAtMjk4LDEwICsyOTgsMTIgQEAgYnJpbmhhbmRsZXIoUEdfRlVOQ1RJ T05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYnJpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0g YnJpbnJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEws CisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwK IAkJLmFtZ2V0Yml0bWFwID0gYnJpbmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJyaW5lbmRz Y2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1w b3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt aW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvZ2luL2dpbmdldC5jCmluZGV4IDZiMTQ4ZTY5YS4uOGY3MDMzZDYyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9naW4vZ2luZ2V0LmMKQEAgLTE5NTMsOSArMTk1Myw5IEBAIGdpbmdldGJpdG1hcChJbmRleFNj YW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCSAqIGludG8gdGhlIG1haW4gaW5kZXgsIGFu ZCBzbyB3ZSBtaWdodCB2aXNpdCBpdCBhIHNlY29uZCB0aW1lIGR1cmluZyB0aGUKIAkgKiBtYWlu IHNjYW4uICBUaGlzIGlzIG9rYXkgYmVjYXVzZSB3ZSdsbCBqdXN0IHJlLXNldCB0aGUgc2FtZSBi aXQgaW4gdGhlCiAJICogYml0bWFwLiAgKFRoZSBwb3NzaWJpbGl0eSBvZiBkdXBsaWNhdGUgdmlz aXRzIGlzIGEgbWFqb3IgcmVhc29uIHdoeSBHSU4KLQkgKiBjYW4ndCBzdXBwb3J0IHRoZSBhbWdl dHR1cGxlIEFQSSwgaG93ZXZlci4pIE5vdGUgdGhhdCBpdCB3b3VsZCBub3QgZG8KLQkgKiB0byBz Y2FuIHRoZSBtYWluIGluZGV4IGJlZm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZSBjb25jdXJy ZW50Ci0JICogY2xlYW51cCBjb3VsZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5 LgorCSAqIGNhbid0IHN1cHBvcnQgZWl0aGVyIHRoZSBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2gg QVBJLikgTm90ZSB0aGF0IGl0CisJICogd291bGQgbm90IGRvIHRvIHNjYW4gdGhlIG1haW4gaW5k ZXggYmVmb3JlIHRoZSBwZW5kaW5nIGxpc3QsIHNpbmNlCisJICogY29uY3VycmVudCBjbGVhbnVw IGNvdWxkIHRoZW4gbWFrZSB1cyBtaXNzIGVudHJpZXMgZW50aXJlbHkuCiAJICovCiAJc2NhblBl bmRpbmdJbnNlcnQoc2NhbiwgdGJtLCAmbnRpZHMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5j CmluZGV4IGZlN2I5ODRmZi4uNzEwZjNmOWMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvZ2luL2dpbnV0aWwuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpA QCAtODIsMTAgKzgyLDEyIEBAIGdpbmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVn aW5zY2FuID0gZ2luYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaW5yZXNjYW4sCiAJCS5hbWdl dHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNiYXRj aCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9IGdp bmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGdpbmVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBO VUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFt ZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVM TCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2dpc3QvZ2lzdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCmluZGV4 IDg1NjVlMjI1Yi4uYTQ4NGM4YjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC9naXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jCkBAIC0xMDMsMTAg KzEwMywxMiBAQCBnaXN0aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4g PSBnaXN0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBnaXN0cmVzY2FuLAogCQkuYW1nZXR0dXBs ZSA9IGdpc3RnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNi YXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9 IGdpc3RnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaXN0ZW5kc2NhbiwKLQkJLmFtbWFya3Bv cyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAog CQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4g PSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMK aW5kZXggOGQ4Y2QzMGRjLi4yZTMyYmUyMzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTEx NCwxMCArMTE0LDEyIEBAIGhhc2hoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2lu c2NhbiA9IGhhc2hiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGhhc2hyZXNjYW4sCiAJCS5hbWdl dHR1cGxlID0gaGFzaGdldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxp dGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0 bWFwID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAotCQkuYW1t YXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5V TEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IGNmZTQ2ODlhOC4uN2QzZjgxZDc0IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTE5LDkgKzE5LDExIEBA CiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgog I2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaW5kZXhiYXRj aC5oIgogI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmV3 cml0ZWhlYXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc3luY3NjYW4uaCIKQEAgLTg1LDkgKzg3LDEw IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCiAJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IHBhbGxvYzBfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CiAKIAlo c2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7Ci0JaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVy OworCWhzY2FuLT54c19iYXNlLmJhdGNoX29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEhl YXBCYXRjaERhdGEpKTsKKwloc2Nhbi0+eHNfYmFzZS5iYXRjaF9wZXJfaXRlbV9zaXplID0gc2l6 ZW9mKHVpbnQ4KTsgLyogdmlzSW5mbyBlbGVtZW50IHNpemUgKi8KIAloc2Nhbi0+eHNfYmxrID0g SW52YWxpZEJsb2NrTnVtYmVyOwotCWhzY2FuLT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7 CisJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKIAogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9 CkBAIC05NywxOCArMTAwLDE1IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNo VGFibGVEYXRhICpzY2FuKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhG ZXRjaEhlYXBEYXRhICopIHNjYW47CiAKLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1 ZikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKLQkJaHNjYW4tPnhzX2Ni dWYgPSBJbnZhbGlkQnVmZmVyOwotCX0KKwkvKiBSZXNjYW5zIHNob3VsZCBhdm9pZCBhbiBleGNl c3NpdmUgbnVtYmVyIG9mIFZNIGxvb2t1cHMgKi8KKwloc2Nhbi0+eHNfdm1faXRlbXMgPSAxOwog Ci0JaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX3ZtYnVmZmVyKSkKLQl7Ci0JCVJlbGVhc2VC dWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKLQkJaHNjYW4tPnhzX3ZtYnVmZmVyID0gSW52YWxp ZEJ1ZmZlcjsKLQl9Ci0JaHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkvKgor CSAqIERlbGliZXJhdGVseSBhdm9pZCBkcm9wcGluZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYg YW5kIHhzX3ZtYnVmZmVyLgorCSAqIFRoaXMgc2F2ZXMgY3ljbGVzIGR1cmluZyBjZXJ0YWluIHRp Z2h0IG5lc3RlZCBsb29wIGpvaW5zLCBhbmQgZHVyaW5nCisJICogbWVyZ2Ugam9pbnMgdGhhdCBm cmVxdWVudGx5IHJlc3RvcmUgYSBzYXZlZCBtYXJrLiAgSXQgY2FuIGFsc28gYXZvaWQKKwkgKiBy ZXBlYXRlZCBwaW5uaW5nIGFuZCB1bnBpbm5pbmcgb2YgdGhlIHNhbWUgYnVmZmVyIGFjcm9zcyBy ZXNjYW5zLgorCSAqLwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTE2LDE3ICsxMTYsNTkgQEAgaGVh cGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKLQlo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7CisJLyogZHJvcCBwaW4gaWYgdGhlcmUncyBh IHBpbm5lZCBoZWFwIHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp CisJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOworCisJLyogZHJvcCBwaW4gaWYgdGhl cmUncyBhIHBpbm5lZCB2aXNpYmlsaXR5IG1hcCBwYWdlICovCisJaWYgKEJ1ZmZlcklzVmFsaWQo aHNjYW4tPnhzX3ZtYnVmZmVyKSkKKwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIp OwogCiAJcGZyZWUoaHNjYW4pOwogfQogCi1zdGF0aWMgYm9vbAorLyoKKyAqIEluaXRpYWxpemUg dGhlIGhlYXAgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKEhlYXBCYXRjaERhdGEp LgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MgZm9yIGVhY2ggbmV3 IG9yIHJlY3ljbGVkIGJhdGNoLgorICogU2V0cyB1cCB0aGUgdmlzSW5mbyBwb2ludGVyIGZvciBp bmRleC1vbmx5IHNjYW5zLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHZvaWQKK2hl YXBhbV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2Fu QmF0Y2ggYmF0Y2gsCisJCQkJCQkJICBib29sIG5ld19hbGxvYykKK3sKKwlIZWFwQmF0Y2hEYXRh ICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEoYmF0Y2gsIHNjYW4pOworCisJaWYgKHNjYW4tPnhz X3dhbnRfaXR1cCkKKwl7CisJCWlmIChuZXdfYWxsb2MpCisJCXsKKwkJCS8qCisJCQkgKiBQb2lu dCB2aXNJbmZvIGludG8gdGhlIHRyYWlsaW5nIHBlci1pdGVtIGFyZWEgdGhhdCBmb2xsb3dzCisJ CQkgKiBpdGVtc1tdIGluIHRoZSBiYXRjaCBhbGxvY2F0aW9uLgorCQkJICovCisJCQlTaXplCQlp dGVtc0VuZDsKKworCQkJaXRlbXNFbmQgPSBNQVhBTElHTihvZmZzZXRvZihJbmRleFNjYW5CYXRj aERhdGEsIGl0ZW1zKSArCisJCQkJCQkJCXNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBzY2Fu LT5tYXhpdGVtc2JhdGNoKTsKKwkJCWhiYXRjaC0+dmlzSW5mbyA9ICh1aW50OCAqKSAoKGNoYXIg KikgYmF0Y2ggKyBpdGVtc0VuZCk7CisJCX0KKworCQkvKiBDbGVhciB2aXNpYmlsaXR5IGZsYWdz IChuZWVkZWQgZm9yIGJvdGggbmV3IGFuZCByZWN5Y2xlZCBiYXRjaGVzKSAqLworCQltZW1zZXQo aGJhdGNoLT52aXNJbmZvLCAwLCBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwl9CisJZWxzZQorCXsK KwkJaGJhdGNoLT52aXNJbmZvID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBwZ19hdHRyaWJ1dGVf YWx3YXlzX2lubGluZSBib29sCiBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAogCQkJCQkJIFNu YXBzaG90IHNuYXBzaG90LAogCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJv b2wgKmNhbGxfYWdhaW4sIGJvb2wgKmFsbF9kZWFkKQorCQkJCQkJIGJvb2wgKmhlYXBfY29udGlu dWUsIGJvb2wgKmFsbF9kZWFkKQogewogCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5k ZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAJQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpic2xv dCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKQEAgLTEzNyw3ICsxNzksNyBA QCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNj YW4sCiAJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUg b24gdGhlIHNhbWUgcGFnZS4gKi8KIAlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCkpCiAJewotCQlBc3NlcnQoISpjYWxsX2FnYWluKTsKKwkJQXNzZXJ0 KCEqaGVhcF9jb250aW51ZSk7CiAKIAkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBu dW1iZXIgZm9yIG5leHQgdGltZSAqLwogCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcih0aWQpOwpAQCAtMTY1LDcgKzIwNyw3IEBAIGhlYXBhbV9pbmRleF9mZXRjaF90 dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAkJCQkJCQkJCQkJc25hcHNo b3QsCiAJCQkJCQkJCQkJCSZic2xvdC0+YmFzZS50dXBkYXRhLAogCQkJCQkJCQkJCQlhbGxfZGVh ZCwKLQkJCQkJCQkJCQkJISpjYWxsX2FnYWluKTsKKwkJCQkJCQkJCQkJISpoZWFwX2NvbnRpbnVl KTsKIAlic2xvdC0+YmFzZS50dXBkYXRhLnRfc2VsZiA9ICp0aWQ7CiAJTG9ja0J1ZmZlcihoc2Nh bi0+eHNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIApAQCAtMTc1LDcgKzIxNyw3IEBAIGhl YXBhbV9pbmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwK IAkJICogT25seSBpbiBhIG5vbi1NVkNDIHNuYXBzaG90IGNhbiBtb3JlIHRoYW4gb25lIG1lbWJl ciBvZiB0aGUgSE9UCiAJCSAqIGNoYWluIGJlIHZpc2libGUuCiAJCSAqLwotCQkqY2FsbF9hZ2Fp biA9ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOworCQkqaGVhcF9jb250aW51ZSA9ICFJ c01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwogCiAJCXNsb3QtPnR0c190YWJsZU9pZCA9IFJl bGF0aW9uR2V0UmVsaWQoc2Nhbi0+cmVsKTsKIAkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZi c2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CkBAIC0xODMsMTIgKzIy NSw1NzggQEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVE YXRhICpzY2FuLAogCWVsc2UKIAl7CiAJCS8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUg SE9UIGNoYWluLiAqLwotCQkqY2FsbF9hZ2FpbiA9IGZhbHNlOworCQkqaGVhcF9jb250aW51ZSA9 IGZhbHNlOwogCX0KIAogCXJldHVybiBnb3RfaGVhcF90dXBsZTsKIH0KIAorLyoKKyAqIE9idGFp biB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGZvciBhIFRJRCBmcm9tIGNhbGxlcidzIGJhdGNoLgor ICoKKyAqIENhbGxlZCBkdXJpbmcgYW1nZXRiYXRjaCBpbmRleC1vbmx5IHNjYW5zLiAgV2UgYWx3 YXlzIGNoZWNrIHRoZSB2aXNpYmlsaXR5CisgKiBvZiBjYWxsZXIncyBpdGVtIChhbiBvZmZzZXQg aW50byBjYWxsZXIncyBiYXRjaC0+aXRlbXNbXSBhcnJheSkuICBXZSBtaWdodAorICogYWxzbyBz ZXQgdmlzaWJpbGl0eSBpbmZvIGZvciBvdGhlciBpdGVtcyBmcm9tIGNhbGxlcidzIGJhdGNoIG1v cmUKKyAqIHByb2FjdGl2ZWx5IHdoZW4gdGhhdCBtYWtlcyBzZW5zZS4KKyAqCisgKiBXZSBrZWVw IHR3byBjb21wZXRpbmcgY29uc2lkZXJhdGlvbnMgaW4gYmFsYW5jZSB3aGVuIGRldGVybWluaW5n IHdoZXRoZXIgdG8KKyAqIGNoZWNrIGFkZGl0aW9uYWwgaXRlbXM6IHRoZSBuZWVkIHRvIGtlZXAg dGhlIGNvc3Qgb2YgdmlzaWJpbGl0eSBtYXAgYWNjZXNzCisgKiB1bmRlciBjb250cm9sIHdoZW4g bW9zdCBpdGVtcyB3aWxsIG5ldmVyIGJlIHJldHVybmVkIGJ5IHRoZSBzY2FuIGFueXdheQorICog KGltcG9ydGFudCBmb3IgaW5uZXIgaW5kZXggc2NhbnMgb2YgYW50aS1qb2lucyBhbmQgc2VtaS1q b2lucyksIGFuZCB0aGUKKyAqIG5lZWQgdG8gbm90IGhvbGQgb250byBpbmRleCBsZWFmIHBhZ2Vz IGZvciB0b28gbG9uZy4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBhbV9pbmRleF9iYXRjaF9wb3Nf dmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkJCQkgIEluZGV4U2NhbkJhdGNoIGJhdGNoLCBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCisJ CQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlpbnQJ CQlwb3NJdGVtID0gcG9zLT5pdGVtOworCWludAkJCW5vU2V0SXRlbSwKKwkJCQlzdGVwOworCWJv b2wJCWFsbGJhdGNoaXRlbXZpc2libGU7CisJQmxvY2tOdW1iZXIgY3Vydm1oZWFwYmxrbm8gPSBJ bnZhbGlkQmxvY2tOdW1iZXI7CisJdWludDgJCWN1cnZtaGVhcGJsa2ZsYWdzID0gMDsKKworCUFz c2VydChoYmF0Y2ggPT0gaGVhcF9iYXRjaF9kYXRhKGJhdGNoLCBzY2FuKSk7CisKKwkvKgorCSAq IFdlIGJldHRlciBzdGlsbCBoYXZlIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoZ2VuZXJh bGx5IGEgcGluIG9uCisJICogdGhlIGJhdGNoJ3MgaW5kZXggcGFnZSkgLS0gYW11bmd1YXJkYmF0 Y2ggaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQKKwkgKi8KKwlBc3NlcnQoIXNjYW4tPmJhdGNoSW1t ZWRpYXRlVW5ndWFyZCk7CisKKwkvKiBEZXRlcm1pbmUgdGhlIHJhbmdlIG9mIGl0ZW1zIHRvIHNl dCB2aXNpYmlsaXR5IGZvciAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlv bikpCisJeworCQlub1NldEl0ZW0gPSBNaW4oYmF0Y2gtPmxhc3RJdGVtICsgMSwgcG9zSXRlbSAr IGhzY2FuLT54c192bV9pdGVtcyk7CisJCWFsbGJhdGNoaXRlbXZpc2libGUgPSBub1NldEl0ZW0g PiBiYXRjaC0+bGFzdEl0ZW0gJiYKKwkJCShwb3NJdGVtID09IGJhdGNoLT5maXJzdEl0ZW0gfHwK KwkJCSAoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5maXJzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNf Q0hFQ0tFRCkpOworCQlzdGVwID0gMTsKKwl9CisJZWxzZQorCXsKKwkJbm9TZXRJdGVtID0gTWF4 KGJhdGNoLT5maXJzdEl0ZW0gLSAxLCBwb3NJdGVtIC0gaHNjYW4tPnhzX3ZtX2l0ZW1zKTsKKwkJ YWxsYmF0Y2hpdGVtdmlzaWJsZSA9IG5vU2V0SXRlbSA8IGJhdGNoLT5maXJzdEl0ZW0gJiYKKwkJ CShwb3NJdGVtID09IGJhdGNoLT5sYXN0SXRlbSB8fAorCQkJIChoYmF0Y2gtPnZpc0luZm9bYmF0 Y2gtPmxhc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpKTsKKwkJc3RlcCA9IC0xOwor CX0KKworCS8qCisJICogU2V0IHZpc2liaWxpdHkgaW5mbyBmb3IgYSByYW5nZSBvZiBpdGVtcywg aW4gc2NhbiBvcmRlci4KKwkgKgorCSAqIG5vU2V0SXRlbSBpcyB0aGUgZmlyc3QgaXRlbSAoaW4g dGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSB0aGF0IHdvbid0IGJlCisJICogc2V0IGR1cmluZyB0 aGlzIGNhbGwuICBub1NldEl0ZW0gb2Z0ZW4gcG9pbnRzIHRvIGp1c3QgcGFzdCB0aGUgZW5kIG9m CisJICogKG9yIGp1c3QgYmVmb3JlIHRoZSBzdGFydCBvZikgdGhlIGJhdGNoJ3MgJ2l0ZW1zJyBh cnJheS4KKwkgKgorCSAqIFdlIGl0ZXJhdGUgdGhpcyB3YXkgdG8gYXZvaWQgdGhlIG5lZWQgZm9y IDIgZGlyZWN0aW9uLXNwZWNpZmljIGxvb3BzLAorCSAqIHNpbmNlIHRoaXMgaXMgYSBob3QgY29k ZSBwYXRoIHRoYXQncyBzZW5zaXRpdmUgdG8gY29kZSBzaXplIGluY3JlYXNlcy4KKwkgKi8KKwlm b3IgKGludCBzZXRJdGVtID0gcG9zSXRlbTsgc2V0SXRlbSAhPSBub1NldEl0ZW07IHNldEl0ZW0g Kz0gc3RlcCkKKwl7CisJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRlbV0u dGFibGVUaWQ7CisJCUJsb2NrTnVtYmVyIGhlYXBibGtubyA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKTsKKwkJdWludDgJCWZsYWdzOworCisJCWlmIChoZWFwYmxrbm8gPT0gY3Vydm1o ZWFwYmxrbm8pCisJCXsKKwkJCS8qIGNvbnRpZ3VvdXMgaGVhcCBibG9jayAtLSBqdXN0IHJldXNl IGxhc3QgaXRlbSdzIGZsYWdzICovCisJCQloYmF0Y2gtPnZpc0luZm9bc2V0SXRlbV0gPSBjdXJ2 bWhlYXBibGtmbGFnczsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZmxhZ3MgPSBIRUFQX0JBVENI X1ZJU19DSEVDS0VEOworCQlpZiAoVk1fQUxMX1ZJU0lCTEUoc2Nhbi0+aGVhcFJlbGF0aW9uLCBo ZWFwYmxrbm8sICZoc2Nhbi0+eHNfdm1idWZmZXIpKQorCQkJZmxhZ3MgfD0gSEVBUF9CQVRDSF9W SVNfQUxMX1ZJU0lCTEU7CisKKwkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFw YmxrZmxhZ3MgPSBmbGFnczsKKwkJY3Vydm1oZWFwYmxrbm8gPSBoZWFwYmxrbm87CisJfQorCisJ LyoKKwkgKiBJdCdzIHNhZmUgdG8gZHJvcCB0aGUgYmF0Y2gncyBpbmRleCBBTSByZXNvdXJjZXMg YXMgc29vbiBhcyB3ZSd2ZQorCSAqIHJlc29sdmVkIHRoZSB2aXNpYmlsaXR5IHN0YXR1cyBvZiBh bGwgb2YgaXRzIGl0ZW1zCisJICovCisJaWYgKGFsbGJhdGNoaXRlbXZpc2libGUgJiYgc2Nhbi0+ TVZDQ1NjYW4pCisJeworCQlBc3NlcnQoaGJhdGNoLT52aXNJbmZvW2JhdGNoLT5maXJzdEl0ZW1d ICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCk7CisJCUFzc2VydChoYmF0Y2gtPnZpc0luZm9bYmF0 Y2gtPmxhc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpOworCisJCXRhYmxlYW1fdXRp bF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIEVsc2UgY2hlY2sg dmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMgbWFueSBpdGVtcyBuZXh0IHRpbWUsIG9yIGFsbCBpdGVt cy4KKwkgKiBXZSBjaGVjayBhbGwgaXRlbXMgaW4gb25lIGdvIG9uY2Ugd2UncmUgcGFzc2VkIHRo ZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJICovCisJZWxzZSBpZiAoaHNjYW4tPnhzX3ZtX2l0ZW1z IDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJhdGNoLT5maXJzdEl0ZW0pKQorCQloc2Nhbi0+eHNfdm1f aXRlbXMgKj0gMjsKKwllbHNlCisJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0ZW1z YmF0Y2g7Cit9CisKKy8qCisgKiBTYXZlIHRoZSBjdXJyZW50IHNjYW5Qb3Mvc2NhbkJhdGNoIGl0 ZW0ncyBUSUQgaW4gc2NhbidzIHhzX2hlYXB0aWQsIGFuZAorICogcmV0dXJuIGEgcG9pbnRlciB0 byB0aGF0IFRJRC4gIFdoZW4gYWxsX3Zpc2libGUgaXNuJ3QgTlVMTCAoZHVyaW5nIGFuCisgKiBp bmRleC1vbmx5IHNjYW4pLCBhbHNvIHNldHMgaXRlbSdzIHZpc2liaWxpdHkgc3RhdHVzIGluICph bGxfdmlzaWJsZS4KKyAqCisgKiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hfcG9zIGhl bHBlciBmdW5jdGlvbi4KKyAqLworc3RhdGljIGlubGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2lu ZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFw RGF0YSAqaHNjYW4sCisJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQlJ bmRleFNjYW5CYXRjaCBzY2FuQmF0Y2gsCisJCQkJCQkJCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Q b3MsCisJCQkJCQkJCWJvb2wgKmFsbF92aXNpYmxlKQoreworCUhlYXBCYXRjaERhdGEgKmhiYXRj aDsKKworCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgMSk7 CisKKwkvKiBTZXQgeHNfaGVhcHRpZCwgd2hpY2ggaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCB3 aWxsIG5lZWQgKi8KKwlzY2FuLT54c19oZWFwdGlkID0gc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9z LT5pdGVtXS50YWJsZVRpZDsKKworCWlmIChhbGxfdmlzaWJsZSA9PSBOVUxMKQorCQlyZXR1cm4g JnNjYW4tPnhzX2hlYXB0aWQ7CisKKwkvKgorCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkgKgorCSAq IEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgbmVlZHMg dG9vLgorCSAqLworCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+Y3Vy clR1cGxlcyArCisJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50dXBs ZU9mZnNldCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBjdXJyZW50 IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3NzaWJseSBzb21lCisJICogYWRkaXRpb25hbCBpdGVtcyBp biB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVkCisJICovCisJaGJhdGNoID0g aGVhcF9iYXRjaF9kYXRhKHNjYW5CYXRjaCwgc2Nhbik7CisJaWYgKCEoaGJhdGNoLT52aXNJbmZv W3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpCisJCWhlYXBhbV9pbmRl eF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgaGJhdGNo LAorCQkJCQkJCQkJCSAgc2NhblBvcyk7CisKKwkvKiBGaW5hbGx5LCBzZXQgYWxsX3Zpc2libGUg Zm9yIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgKi8KKwkqYWxsX3Zpc2libGUgPQorCQkoaGJh dGNoLT52aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQUxMX1ZJU0lCTEUp ICE9IDA7CisKKwlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CisKKy8qCisgKiBGZXRjaCB0 aGUgbmV4dCBiYXRjaCBvZiBtYXRjaGluZyBpdGVtcyBmb3IgdGhlIHNjYW4gKG9yIHRoZSBmaXJz dCkuCisgKgorICogQ2FsbGVkIHdoZW4gY2FsbGVyJ3MgY3VycmVudCBzY2FuQmF0Y2ggKHBhc3Nl ZCB0byB1cyBhcyBwcmlvckJhdGNoKSBoYXMgbm8KKyAqIG1vcmUgbWF0Y2hpbmcgaXRlbXMgaW4g dGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLiAgQ2FsbGVyIHBhc3NlcyBhIE5VTEwKKyAqIHByaW9y QmF0Y2ggb24gdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIHNjYW4uCisgKgorICogUmV0dXJu cyB0aGUgbmV4dCBiYXRjaCB0byBiZSBwcm9jZXNzZWQgYnkgY2FsbGVyIGluIHRoZSBnaXZlbiBz Y2FuCisgKiBkaXJlY3Rpb24sIG9yIE5VTEwgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVz IGluIHRoYXQgZGlyZWN0aW9uLgorICoKKyAqIFRoaXMgaXMgd2hlcmUgYmF0Y2hlcyBhcmUgYXBw ZW5kZWQgdG8gdGhlIHNjYW4ncyByaW5nIGJ1ZmZlci4gIFdlIGRvbid0CisgKiBmcmVlIGFueSBi YXRjaGVzIGhlcmUsIHRob3VnaDsgdGhhdCBpcyBsZWZ0IHVwIHRvIHRoZSBjYWxsZXIuICBUaGUg Y2FsbGVyCisgKiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBhZHZhbmNpbmcgdGhlaXIgc2NhblBv cyBwb3NpdGlvbi4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgSW5kZXhTY2FuQmF0Y2gK K2hlYXBhbV9pbmRleF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhG ZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggcHJpb3JCYXRjaCwKKwkJCQkJCQkgIEJhdGNoUmluZ0l0 ZW1Qb3MgKnBvcykKK3sKKwlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IE5VTEw7CisJQmF0Y2hSaW5n QnVmZmVyICpiYXRjaHJpbmdidWYgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZID0gJnNjYW4tPmJh dGNocmluZ2J1ZjsKKworCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNob3Qg aXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQo UmVjZW50WG1pbikpOworCisJaWYgKCFwcmlvckJhdGNoKQorCXsKKwkJLyogRmlyc3QgY2FsbCBm b3IgdGhlIHNjYW4gKi8KKwkJQXNzZXJ0KHBvcyA9PSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zKTsK Kwl9CisJZWxzZSBpZiAodW5saWtlbHkocHJpb3JCYXRjaC0+ZGlyICE9IGRpcmVjdGlvbikpCisJ eworCQkvKgorCQkgKiBXZSBkZXRlY3RlZCBhIGNoYW5nZSBpbiBzY2FuIGRpcmVjdGlvbiBhY3Jv c3MgYmF0Y2hlcy4gIFByZXBhcmUKKwkJICogc2NhbidzIGJhdGNocmluZ2J1ZiBzdGF0ZSBmb3Ig dXMgdG8gZ2V0IHRoZSBuZXh0IGJhdGNoIGZvciB0aGUKKwkJICogb3Bwb3NpdGUgc2NhbiBkaXJl Y3Rpb24gdG8gdGhlIG9uZSB1c2VkIHdoZW4gcHJpb3JCYXRjaCB3YXMKKwkJICogcmV0dXJuZWQg YnkgYW1nZXRiYXRjaC4KKwkJICovCisJCXRhYmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2Uoc2Nh bik7CisKKwkJLyogcHJpb3JCYXRjaCBpcyBub3cgYmF0Y2hyaW5nYnVmJ3Mgb25seSBiYXRjaCAq LworCQlBc3NlcnQocG9zLT5iYXRjaCA9PSBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisJCUFz c2VydChpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDEpOworCX0KKwllbHNlIGlmIChp bmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBwb3MtPmJhdGNoICsgMSkpCisJeworCQkvKiBO ZXh0IGJhdGNoIGFscmVhZHkgbG9hZGVkIGZvciB1cyAqLworCQliYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2NhbiwgcG9zLT5iYXRjaCArIDEpOworCisJCUFzc2VydChwcmlvckJhdGNoLT5kaXIg PT0gZGlyZWN0aW9uKTsKKwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKwkJcmV0 dXJuIGJhdGNoOworCX0KKworCS8qCisJICogQXNzZXJ0IHByZWNvbmRpdGlvbnMgZm9yIGNhbGxp bmcgYW1nZXRiYXRjaC4KKwkgKgorCSAqIHByaW9yQmF0Y2ggaGFkIGJldHRlciBiZSBmb3IgdGhl IGxhc3QgdmFsaWQgYmF0Y2ggY3VycmVudGx5IGluIHRoZSByaW5nCisJICogYnVmZmVyIChiYXRj aGVzIG11c3Qgc3RheSBpbiBzY2FuIG9yZGVyKS4gIElmIGl0IGlzbid0IHRoZW4gd2Ugc2hvdWxk CisJICogaGF2ZSBhbHJlYWR5IHJldHVybmVkIHNvbWUgZXhpc3RpbmcgbG9hZGVkIGJhdGNoIGVh cmxpZXIuCisJICovCisJQXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCUFz c2VydCghcHJpb3JCYXRjaCB8fAorCQkgICAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+ IDAgJiYgcHJpb3JCYXRjaC0+ZGlyID09IGRpcmVjdGlvbiAmJgorCQkJaW5kZXhfc2Nhbl9iYXRj aChzY2FuLCBiYXRjaHJpbmdidWYtPm5leHRCYXRjaCAtIDEpID09IHByaW9yQmF0Y2gpKTsKKwor CS8qCisJICogQmVmb3JlIHdlIGNhbGwgYW1nZXRiYXRjaCBhZ2FpbiwgY2hlY2sgaWYgcHJpb3JC YXRjaCBpcyBhbHJlYWR5IGtub3duCisJICogdG8gYmUgdGhlIGxhc3QgYmF0Y2ggd2l0aCBtYXRj aGluZyBpdGVtcyBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uCisJICovCisJaWYgKHByaW9yQmF0Y2gg JiYKKwkJKChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikgJiYgcHJpb3JCYXRjaC0+ a25vd25FbmRGb3J3YXJkKSB8fAorCQkgKFNjYW5EaXJlY3Rpb25Jc0JhY2t3YXJkKGRpcmVjdGlv bikgJiYgcHJpb3JCYXRjaC0+a25vd25FbmRCYWNrd2FyZCkpKQorCQlyZXR1cm4gTlVMTDsKKwor CWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2Nhbiwg cHJpb3JCYXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoKQorCXsK KwkJLyogV2UgZ290IHRoZSBiYXRjaCBmcm9tIHRoZSBBTSAqLworCQlBc3NlcnQoYmF0Y2gtPmRp ciA9PSBkaXJlY3Rpb24pOworCisJCS8qIEFwcGVuZCBiYXRjaCB0byB0aGUgZW5kIG9mIHJpbmcg YnVmZmVyL3dyaXRlIGl0IHRvIGJ1ZmZlciBpbmRleCAqLworCQlpbmRleF9zY2FuX2JhdGNoX2Fw cGVuZChzY2FuLCBiYXRjaCk7CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggcmV0dXJu ZWQgTlVMTCAqLworCQlpZiAocHJpb3JCYXRjaCkKKwkJeworCQkJLyoKKwkJCSAqIFRoZXJlIGFy ZSBubyBmdXJ0aGVyIG1hdGNoZXMgdG8gYmUgZm91bmQgaW4gdGhlIGN1cnJlbnQgc2NhbgorCQkJ ICogZGlyZWN0aW9uLCBmb2xsb3dpbmcgcHJpb3JCYXRjaC4gIFJlbWVtYmVyIHRoYXQgcHJpb3JC YXRjaCBpcworCQkJICogdGhlIGxhc3QgYmF0Y2ggd2l0aCBtYXRjaGluZyBpdGVtcy4KKwkJCSAq LworCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCQlwcmlvckJh dGNoLT5rbm93bkVuZEZvcndhcmQgPSB0cnVlOworCQkJZWxzZQorCQkJCXByaW9yQmF0Y2gtPmtu b3duRW5kQmFja3dhcmQgPSB0cnVlOworCQl9CisJfQorCisJLyogeHNfaGl0dXAgaXNuJ3QgY3Vy cmVudGx5IHN1cHBvcnRlZCBieSBhbWdldGJhdGNoIHNjYW5zICovCisJQXNzZXJ0KCFzY2FuLT54 c19oaXR1cCk7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBHZXQgbmV4dCBUSUQgZnJv bSBiYXRjaCByaW5nIGJ1ZmZlciwgbW92aW5nIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4K KyAqIEFsc28gc2V0cyAqYWxsX3Zpc2libGUgZm9yIGl0ZW0gd2hlbiBjYWxsZXIgcGFzc2VzIGEg bm9uLU5VTEwgYXJnLgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRl bVBvaW50ZXIKK2hlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVz YyBzY2FuLAorCQkJCQkJCQkgICBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkg ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJICAgYm9vbCAqYWxsX3Zpc2libGUp Cit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJpbmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVm OworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3MgPSAmYmF0Y2hyaW5nYnVmLT5zY2FuUG9zOwor CUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IE5VTEw7CisKKwlBc3NlcnQoIXNjYW5Qb3MtPnZh bGlkIHx8IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKwlBc3Nl cnQoc2NhblBvcy0+dmFsaWQgfHwgaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA9PSAwKTsK KwlBc3NlcnQoYWxsX3Zpc2libGUgPT0gTlVMTCB8fCBzY2FuLT54c193YW50X2l0dXApOworCisJ LyoKKwkgKiBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGxvYWRlZCBzY2FuQmF0Y2ggZm9y IHVzIHRvIHJldHVybiB0aGUgbmV4dAorCSAqIG1hdGNoaW5nIGl0ZW0ncyBUSUQvaW5kZXggdHVw bGUgZnJvbQorCSAqLworCWlmIChzY2FuUG9zLT52YWxpZCkKKwl7CisJCS8qCisJCSAqIHNjYW5Q b3MgaXMgdmFsaWQsIHNvIHNjYW5CYXRjaCBtdXN0IGFscmVhZHkgYmUgbG9hZGVkIGluIGJhdGNo IHJpbmcKKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUuCisJCSAqLworCQlBc3Nl cnQoYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCisJCXNjYW5C YXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJCWlmIChp bmRleF9zY2FuX3Bvc19hZHZhbmNlKGRpcmVjdGlvbiwgc2NhbkJhdGNoLCBzY2FuUG9zKSkKKwkJ CXJldHVybiBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5wb3NfdGlkKHNjYW4sIGhzY2FuLCBkaXJl Y3Rpb24sCisJCQkJCQkJCQkJCQkgICBzY2FuQmF0Y2gsIHNjYW5Qb3MsCisJCQkJCQkJCQkJCQkg ICBhbGxfdmlzaWJsZSk7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgcmFuIG91dCBvZiBpdGVtcyBm cm9tIG91ciBleGlzdGluZyBzY2FuQmF0Y2gsIG9yIGl0IGhhc24ndCBiZWVuCisJICogbG9hZGVk IHlldCAoYmVjYXVzZSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBlbnRpcmUg c2NhbikuCisJICogVHJ5IHRvIGFkdmFuY2Ugc2NhbkJhdGNoIHRvIHRoZSBuZXh0IGJhdGNoIChv ciBnZXQgdGhlIGZpcnN0IGJhdGNoKS4KKwkgKi8KKwlzY2FuQmF0Y2ggPSBoZWFwYW1faW5kZXhf ZmV0Y2hfbmV4dF9iYXRjaChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIHNj YW5CYXRjaCwgc2NhblBvcyk7CisKKwlpZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdl J3JlIGRvbmU7IG5vIG1vcmUgYmF0Y2hlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4K KwkJICoKKwkJICogTm90ZTogc2NhblBvcyBpcyBnZW5lcmFsbHkgc3RpbGwgdmFsaWQgYXQgdGhp cyBwb2ludC4gIFRoZSBzY2FuCisJCSAqIG1pZ2h0IHN0aWxsIGJhY2sgdXAgaW4gdGhlIG90aGVy IGRpcmVjdGlvbi4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQWR2YW5j ZWQgc2NhbkJhdGNoLiAgTm93IHBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldwor CSAqIHNjYW5CYXRjaC4KKwkgKi8KKwlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goZGlyZWN0aW9u LCBzY2FuQmF0Y2gsIHNjYW5Qb3MpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNj YW5Qb3MtPmJhdGNoKSA9PSBzY2FuQmF0Y2gpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIGhlYWQg YmF0Y2ggZnJvbSB0aGUgYmF0Y2ggcmluZyBidWZmZXIgKGV4Y2VwdCB3aGVuIHRoaXMgbmV3CisJ ICogc2NhbkJhdGNoIGlzIG91ciBvbmx5IG9uZSkKKwkgKi8KKwlpZiAoYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2ggIT0gc2NhblBvcy0+YmF0Y2gpCisJeworCQlJbmRleFNjYW5CYXRjaCBoZWFkQmF0 Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJCQkJYmF0Y2hyaW5nYnVmLT5o ZWFkQmF0Y2gpOworCisJCS8qIGZyZWUgb2Jzb2xlc2NlbnQgaGVhZCBiYXRjaCAodW5sZXNzIGl0 IGlzIHNjYW4ncyBtYXJrQmF0Y2gpICovCisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4s IGhlYWRCYXRjaCk7CisKKwkJLyogUmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1ZmZl ciAoZXZlbiBpZiBpdCdzIG1hcmtCYXRjaCkgKi8KKwkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gr KzsKKwl9CisKKwkvKiBJbiBwcmFjdGljZSBzY2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhlIHJp bmcgYnVmZmVyJ3MgaGVhZEJhdGNoICovCisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo ID09IHNjYW5Qb3MtPmJhdGNoKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfcmV0dXJuX3NjYW5w b3NfdGlkKHNjYW4sIGhzY2FuLCBkaXJlY3Rpb24sCisJCQkJCQkJCQkJICAgc2NhbkJhdGNoLCBz Y2FuUG9zLCBhbGxfdmlzaWJsZSk7Cit9CisKKy8qCisgKiBHZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUuCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUgaGVhcCB0dXBsZSBhc3Nv Y2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0CisgKiByZWNlbnRseSBmZXRjaGVkIGJ5IG91 ciBjYWxsZXIgaW4gc2Nhbi0+eHNfaGVhcHRpZCwgb3IgTlVMTCBpZiBubyBtb3JlCisgKiBtYXRj aGluZyB0dXBsZXMgZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcg dHVwbGUgYmVjYXVzZQorICogb2YgSE9UIGNoYWlucywgYWx0aG91Z2ggd2hlbiB1c2luZyBhbiBN VkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlCisgKiBmb3IgbW9yZSB0aGFuIG9u ZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKKyAqCisgKiBPbiBzdWNjZXNzLCB0aGUgYnVmZmVyIGNv bnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZC4gIFRoZSBwaW4gbXVzdCBiZQorICogZHJv cHBlZCBlbHNld2hlcmUuCisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBi b29sCitoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFi bGVTbG90ICpzbG90LAorCQkJCQkJYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCBhbWdldGJhdGNo KQoreworCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7CisJYm9vbAkJZm91bmQ7CisKKwlmb3VuZCA9 IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZShzY2FuLT54c19oZWFwZmV0Y2gsICZzY2FuLT54c19o ZWFwdGlkLAorCQkJCQkJCQkJIHNjYW4tPnhzX3NuYXBzaG90LCBzbG90LAorCQkJCQkJCQkJIGhl YXBfY29udGludWUsICZhbGxfZGVhZCk7CisKKwlpZiAoZm91bmQpCisJCXBnc3RhdF9jb3VudF9o ZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24pOworCisJLyoKKwkgKiBJZiB3ZSBzY2FubmVk IGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCByZW1lbWJlciBp dAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4gcmVjb3ZlcnkgYmVj YXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4g UmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKwkgKi8KKwlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5S ZWNvdmVyeSkKKwl7CisJCWlmIChhbWdldGJhdGNoKQorCQl7CisJCQlpZiAoYWxsX2RlYWQpCisJ CQkJdGFibGVhbV91dGlsX2tpbGxfc2NhbnBvc2l0ZW0oc2Nhbik7CisJCX0KKwkJZWxzZQorCQl7 CisJCQkvKgorCQkJICogVGVsbCBhbWdldHR1cGxlLWJhc2VkIGluZGV4IEFNIHRvIGtpbGwgaXRz IGVudHJ5IGZvciB0aGF0IFRJRAorCQkJICogKHRoaXMgd2lsbCB0YWtlIGVmZmVjdCBpbiB0aGUg bmV4dCBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3RpZCkKKwkJCSAqLworCQkJc2Nhbi0+a2lsbF9w cmlvcl90dXBsZSA9IGFsbF9kZWFkOworCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisv KgorICogQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBhbGwgZm91ciBpbmRleC1zY2FuIGhlYXAt ZmV0Y2ggdmFyaWFudHMuCisgKgorICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEgdHVwbGUgc2F0 aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCisgKiBmb3VuZCwgZmFs c2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lmaWVkIHNsb3Qu CisgKgorICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBhcmUgbGlr ZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCisgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwg aGVyZSAob3IgYnkgYSBsYXRlciBjYWxsIHRvIGluZGV4X2VuZHNjYW4pLgorICoKKyAqIE5vdGU6 IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tp bmcgb2YgdGhlCisgKiBzY2FuIGtleXMgaWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBo ZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQorICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0 IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKgorICogVGhlIGluZGV4X29ubHkg YW5kIGFtZ2V0YmF0Y2ggcGFyYW1ldGVycyBhcmUgY29tcGlsZS10aW1lIGNvbnN0YW50cyBhdCBl YWNoCisgKiBjYWxsIHNpdGUsIGFsbG93aW5nIHRoZSBjb21waWxlciB0byBzcGVjaWFsaXplIHRo ZSBjb2RlIGZvciBlYWNoIHZhcmlhbnQ6CisgKi8KK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSBib29sCitoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90 LCBib29sIGluZGV4X29ubHksCisJCQkJCQkgIGJvb2wgYW1nZXRiYXRjaCkKK3sKKwlJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuLT54c19oZWFw ZmV0Y2g7CisJSXRlbVBvaW50ZXIgdGlkOworCWJvb2wJCWhlYXBfY29udGludWUgPSBmYWxzZTsK Kwlib29sCQlhbGxfdmlzaWJsZSA9IGZhbHNlOworCisJZm9yICg7OykKKwl7CisJCWlmICghaGVh cF9jb250aW51ZSkKKwkJeworCQkJLyogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBpbmRleCAq LworCQkJaWYgKGFtZ2V0YmF0Y2gpCisJCQkJdGlkID0gaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3BvcyhzY2FuLCBoc2NhbiwKKwkJCQkJCQkJCQkJCQkJIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJCQkJIGluZGV4X29ubHkgPworCQkJCQkJCQkJCQkJCQkgJmFsbF92aXNpYmxlIDogTlVM TCk7CisJCQllbHNlCisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9u KTsKKworCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8K KwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJLyogRm9yIG5vbi1iYXRjaCBp bmRleC1vbmx5IHNjYW5zLCBjaGVjayB0aGUgdmlzaWJpbGl0eSBtYXAgKi8KKwkJCWlmIChpbmRl eF9vbmx5ICYmICFhbWdldGJhdGNoKQorCQkJCWFsbF92aXNpYmxlID0gVk1fQUxMX1ZJU0lCTEUo c2Nhbi0+aGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpLAorCQkJCQkJCQkJCQkgJmhzY2FuLT54c192bWJ1ZmZlcik7CisJCX0KKworCQlBc3Nl cnQoSXRlbVBvaW50ZXJJc1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7CisKKwkJaWYgKGluZGV4 X29ubHkpCisJCXsKKwkJCS8qCisJCQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0 aGUgVElEIHJlZmVyZW5jZXMgYSBoZWFwIHBhZ2Ugb24KKwkJCSAqIHdoaWNoIGFsbCB0dXBsZXMg YXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCisJCQkgKiB3ZSds bCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YQorCQkJ ICogc291cmNlLgorCQkJICovCisJCQlpZiAoIWFsbF92aXNpYmxlKQorCQkJeworCQkJCS8qCisJ CQkJICogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5 LgorCQkJCSAqLworCQkJCWlmIChzY2FuLT5pbnN0cnVtZW50KQorCQkJCQlzY2FuLT5pbnN0cnVt ZW50LT5uaGVhcGZldGNoZXMrKzsKKworCQkJCWlmICghaGVhcGFtX2luZGV4X2ZldGNoX2hlYXAo c2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUsCisJCQkJCQkJCQkJCSBhbWdldGJhdGNoKSkKKwkJ CQkJY29udGludWU7CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICov CisKKwkJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKworCQkJCS8qCisJCQkJICogT25seSBNVkND IHNuYXBzaG90cyBhcmUgc3VwcG9ydGVkIHdpdGggc3RhbmRhcmQgaW5kZXgtb25seQorCQkJCSAq IHNjYW5zLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBrZWVwIGZvbGxvd2luZyB0aGUg SE9UCisJCQkJICogY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzIGJlZW4gZm91bmQuICBP dGhlciBjYWxsZXJzCisJCQkJICogKGN1cnJlbnRseSBvbmx5IHNlbGZ1bmNzLmMpIHVzZSBTbmFw c2hvdE5vblZhY3V1bWFibGUsIGFuZAorCQkJCSAqIHdhbnQgdXMgdG8gYXNzdW1lIHRoYXQganVz dCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4gdGhlCisJCQkJICogaG90IGNoYWluIGlzIGFs d2F5cyBnb29kIGVub3VnaC4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIShoZWFwX2NvbnRpbnVlICYm IElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQkJfQorCQkJZWxzZQorCQkJ eworCQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgc28gd2UnbGwgbmVl ZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUgbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBo YWQuICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhhdCBhdCBwYWdlIGxldmVsLgorCQkJCSAqLwor CQkJCVByZWRpY2F0ZUxvY2tQYWdlKGhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJICBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCSAgc2Nhbi0+eHNfc25hcHNob3Qp OworCQkJfQorCisJCQkvKgorCQkJICogUmV0dXJuIG1hdGNoaW5nIGluZGV4IHR1cGxlIG5vdyBz ZXQgaW4gc2Nhbi0+eHNfaXR1cCAob3IgcmV0dXJuCisJCQkgKiBtYXRjaGluZyBoZWFwIHR1cGxl IG5vdyBzZXQgaW4gc2Nhbi0+eHNfaGl0dXApCisJCQkgKi8KKwkJCXJldHVybiB0cnVlOworCQl9 CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNp YmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXgKKwkJCSAqIGVudHJ5LiAgSWYgd2UgZG9uJ3Qg ZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlCisJCQkgKiBuZXh0IFRJRCBm cm9tIHRoZSBpbmRleC4KKwkJCSAqLworCQkJaWYgKGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKHNj YW4sIHNsb3QsICZoZWFwX2NvbnRpbnVlLAorCQkJCQkJCQkJCWFtZ2V0YmF0Y2gpKQorCQkJCXJl dHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBhbWdldGJhdGNo LCBwbGFpbiBpbmRleCBzY2FuICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFw YW1faW5kZXhfcGxhaW5fYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIFR1 cGxlVGFibGVTbG90ICpzbG90KQoreworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNj YW4tPnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbiwgZGlyZWN0aW9uLCBzbG90LCBmYWxzZSwgdHJ1ZSk7Cit9CisKKy8qIGFtZ2V0YmF0 Y2gsIGluZGV4LW9ubHkgc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVh cGFtX2luZGV4X29ubHlfYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4t PnVzZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bWdldGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbiwgZGlyZWN0aW9uLCBzbG90LCB0cnVlLCB0cnVlKTsKK30KKworLyogYW1nZXR0dXBsZSwg cGxhaW4gaW5kZXggc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVhcGFt X2luZGV4X3BsYWluX2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwK KwkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJiAhc2Nh bi0+dXNlYmF0Y2hyaW5nKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0t PmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xv dChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlLCBmYWxzZSk7Cit9CisKKy8qIGFtZ2V0dHVw bGUsIGluZGV4LW9ubHkgc2NhbiAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9ob3QgYm9vbAoraGVh cGFtX2luZGV4X29ubHlfYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJICBUdXBs ZVRhYmxlU2xvdCAqc2xvdCkKK3sKKwlBc3NlcnQoc2Nhbi0+eHNfd2FudF9pdHVwICYmICFzY2Fu LT51c2ViYXRjaHJpbmcpOworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+ YW1nZXR0dXBsZSAhPSBOVUxMKTsKKworCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90 KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgdHJ1ZSwgZmFsc2UpOworfQogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICAqIENhbGxiYWNrcyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2 aWR1YWwgdHVwbGVzIGZvciBoZWFwIEFNCkBAIC03NjksNyArMTM3Nyw4IEBAIGhlYXBhbV9yZWxh dGlvbl9jb3B5X2Zvcl9jbHVzdGVyKFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0aW9uIE5ld0hlYXAs CiAKIAkJdGFibGVTY2FuID0gTlVMTDsKIAkJaGVhcFNjYW4gPSBOVUxMOwotCQlpbmRleFNjYW4g PSBpbmRleF9iZWdpbnNjYW4oT2xkSGVhcCwgT2xkSW5kZXgsIFNuYXBzaG90QW55LCBOVUxMLCAw LCAwKTsKKwkJaW5kZXhTY2FuID0gaW5kZXhfYmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBm YWxzZSwgU25hcHNob3RBbnksCisJCQkJCQkJCQlOVUxMLCAwLCAwKTsKIAkJaW5kZXhfcmVzY2Fu KGluZGV4U2NhbiwgTlVMTCwgMCwgTlVMTCwgMCk7CiAJfQogCWVsc2UKQEAgLTgwNiw3ICsxNDE1 LDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwg UmVsYXRpb24gTmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9IE5VTEwpCiAJCXsKLQkJCWlm ICghaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNs b3QpKQorCQkJaWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgIHNsb3QpKQogCQkJCWJyZWFrOwogCiAJCQkvKiBT aW5jZSB3ZSB1c2VkIG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVjaGVjayAq LwpAQCAtMjY2NSw2ICszMjc1LDExIEBAIHN0YXRpYyBjb25zdCBUYWJsZUFtUm91dGluZSBoZWFw YW1fbWV0aG9kcyA9IHsKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBoZWFwYW1faW5kZXhfZmV0Y2hf YmVnaW4sCiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAog CS5pbmRleF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAorCS5pbmRleF9mZXRj aF9iYXRjaF9pbml0ID0gaGVhcGFtX2luZGV4X2ZldGNoX2JhdGNoX2luaXQsCisJLmluZGV4X3Bs YWluX2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0YmF0 Y2hfZ2V0bmV4dF9zbG90LAorCS5pbmRleF9vbmx5X2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90ID0g aGVhcGFtX2luZGV4X29ubHlfYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QsCisJLmluZGV4X3BsYWlu X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0dHVwbGVf Z2V0bmV4dF9zbG90LAorCS5pbmRleF9vbmx5X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90ID0gaGVh cGFtX2luZGV4X29ubHlfYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3QsCiAJLmluZGV4X2ZldGNoX3R1 cGxlID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlLAogCiAJLnR1cGxlX2luc2VydCA9IGhlYXBh bV90dXBsZV9pbnNlcnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNp YmlsaXR5bWFwLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKaW5k ZXggZTIxYjk2MjgxLi4yM2U0NGQ0YWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL3Zpc2liaWxpdHltYXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmls aXR5bWFwLmMKQEAgLTQwNCw3ICs0MDQsMzIgQEAgdmlzaWJpbGl0eW1hcF9zZXRfdm1iaXRzKEJs b2NrTnVtYmVyIGhlYXBCbGssCiAgKiBzaW5jZSB3ZSBkb24ndCBsb2NrIHRoZSB2aXNpYmlsaXR5 IG1hcCBwYWdlIGVpdGhlciwgaXQncyBldmVuIHBvc3NpYmxlIHRoYXQKICAqIHNvbWVvbmUgZWxz ZSBjb3VsZCBoYXZlIGNoYW5nZWQgdGhlIGJpdCBqdXN0IGJlZm9yZSB3ZSBsb29rIGF0IGl0LCBi dXQgeWV0CiAgKiB3ZSBtaWdodCBzZWUgdGhlIG9sZCB2YWx1ZS4gIEl0IGlzIHRoZSBjYWxsZXIn cyByZXNwb25zaWJpbGl0eSB0byBkZWFsIHdpdGgKLSAqIGFsbCBjb25jdXJyZW5jeSBpc3N1ZXMh CisgKiBhbGwgY29uY3VycmVuY3kgaXNzdWVzISAgSW4gcHJhY3RpY2UgaXQgY2FuJ3QgYmUgc3Rh bGUgZW5vdWdoIHRvIG1hdHRlciBmb3IKKyAqIHRoZSBwcmltYXJ5IHVzZSBjYXNlOiBpbmRleC1v bmx5IHNjYW5zIHRoYXQgY2hlY2sgd2hldGhlciBhIGhlYXAgZmV0Y2ggY2FuCisgKiBiZSBza2lw cGVkLgorICoKKyAqIFRoZSBhcmd1bWVudCBmb3Igd2h5IGl0IGNhbid0IGJlIHN0YWxlIGVub3Vn aCB0byBtYXR0ZXIgZm9yIHRoZSBwcmltYXJ5IHVzZQorICogY2FzZSBpcyBhcyBmb2xsb3dzOgor ICoKKyAqIEluc2VydHM6IHdlIG5lZWQgdG8gZGV0ZWN0IHRoYXQgYSBWTSBiaXQgd2FzIGNsZWFy ZWQgYnkgYW4gaW5zZXJ0IHJpZ2h0CisgKiBhd2F5LCBiZWNhdXNlIHRoZSBuZXcgdHVwbGUgaXMg cHJlc2VudCBpbiB0aGUgaW5kZXggYnV0IG5vdCB5ZXQgdmlzaWJsZS4KKyAqIFJlYWRpbmcgdGhl IFRJRCBmcm9tIHRoZSBpbmRleCBwYWdlICh1bmRlciBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRl eAorICogYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhlIGluc2VydGlvbiBvZiB0aGUgVElE IGludG8gdGhlIGluZGV4ICh1bmRlcgorICogYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIHNhbWUg aW5kZXggYnVmZmVyKS4gIEJlY2F1c2UgdGhlIFZNIGJpdCBpcyBjbGVhcmVkCisgKiBiZWZvcmUg dGhlIGluZGV4IGlzIHVwZGF0ZWQsIGFuZCBsb2NraW5nL3VubG9ja2luZyBvZiB0aGUgaW5kZXgg cGFnZSBhY3RzCisgKiBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNl ZSB0aGUgY2xlYXJlZCBiaXQgd2hlbmV2ZXIgd2UKKyAqIHNlZSBhIHJlY2VudGx5LWluc2VydGVk IFRJRC4KKyAqCisgKiBEZWxldGVzOiB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRl bGV0ZSBpcyBOT1Qgc2VyaWFsaXplZCB3aXRoIHRoZQorICogaW5kZXggcGFnZSBhY2Nlc3MsIGJl Y2F1c2UgZGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRleCBwYWdlIChvbmx5CisgKiBWQUNV VU0gcmVtb3ZlcyB0aGUgaW5kZXggVElEKS4gIFNvIHdlIG1heSBzZWUgYSBzaWduaWZpY2FudGx5 IHN0YWxlIHZhbHVlLgorICogSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCB0byBkZXRlY3QgdGhlIGRl bGV0ZSByaWdodCBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZQorICogcmVtYWlucyB2aXNpYmxlIHVu dGlsIHRoZSBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQKKyAq IGVuZHMgKGlmIGl0J3Mgb3VyIG93biB0cmFuc2FjdGlvbikuICBJbiBlaXRoZXIgY2FzZSwgdGhl IGxvY2sgb24gdGhlIFZNCisgKiBidWZmZXIgd2lsbCBoYXZlIGJlZW4gcmVsZWFzZWQgKGFjdGlu ZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nCisgKiB0aGUgYml0LiAgQW5kIGZv ciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKKyAqIHRy YW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSksIHdlIG11c3QgaGF2ZSBhY3F1 aXJlZAorICogUHJvY0FycmF5TG9jayBhZnRlciB0aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQg YmFycmllci4KICAqLwogdWludDgKIHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyhSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIGhlYXBCbGssIEJ1ZmZlciAqdm1idWYpCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv TWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5lNmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv TWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgT0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlhbXZhbGlk YXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4YW0ubworCWluZGV4YW0ubyBcCisJaW5kZXhiYXRj aC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZWZhMDA3MDMwLi5hYmE5ZTJiNDYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9pbmRleC9hbWFwaS5jCkBAIC01NSw2ICs1NSwxMSBAQCBHZXRJbmRleEFtUm91dGluZShPaWQg YW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5lLT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlBc3NlcnQo cm91dGluZS0+YW1lbmRzY2FuICE9IE5VTEwpOwogCisJLyogQXNzZXJ0IHRoYXQgQU0gZG9lc24n dCBoYXZlIGFuIGludmFsaWQgY29tYmluYXRpb24gb2YgY2FsbGJhY2tzICovCisJQXNzZXJ0KHJv dXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0gTlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9 IE5VTEwpOworCUFzc2VydCgocm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSAocm91dGlu ZS0+YW11bmd1YXJkYmF0Y2ggIT0gTlVMTCkpOworCUFzc2VydChyb3V0aW5lLT5hbWdldGJhdGNo ICE9IE5VTEwgfHwgcm91dGluZS0+YW1wb3NyZXNldCA9PSBOVUxMKTsKKwogCXJldHVybiByb3V0 aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCmluZGV4IDVlODliODZhNi4uMWIyMWQ0 MjFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwpAQCAtODksNiArODksOSBAQCBSZWxhdGlv bkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBt dXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNj YW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3JkZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0g ZmFsc2U7IC8qIHNldCBsYXRlciBmb3IgYW1nZXRiYXRjaCBjYWxsZXJzICovCisJbWVtc2V0KCZz Y2FuLT5iYXRjaGNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hjYWNoZSkpOworCXNjYW4tPnhz X3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBjYWxsZXIgbXVzdCBpbml0aWFsaXplIHRoaXMgKi8KIAog CS8qCiAJICogV2UgYWxsb2NhdGUga2V5IHdvcmtzcGFjZSBoZXJlLCBidXQgaXQgd29uJ3QgZ2V0 IGZpbGxlZCB1bnRpbCBhbXJlc2Nhbi4KQEAgLTEwMiw4ICsxMDUsNiBAQCBSZWxhdGlvbkdldElu ZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAJZWxzZQogCQlzY2FuLT5vcmRlckJ5RGF0YSA9IE5VTEw7CiAKLQlzY2FuLT54c193YW50X2l0 dXAgPSBmYWxzZTsgLyogbWF5IGJlIHNldCBsYXRlciAqLwotCiAJLyoKIAkgKiBEdXJpbmcgcmVj b3Zlcnkgd2UgaWdub3JlIGtpbGxlZCB0dXBsZXMgYW5kIGRvbid0IGJvdGhlciB0byBraWxsIHRo ZW0KIAkgKiBlaXRoZXIuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgeG1pbiBvbiB0aGUgcHJpbWFy eSBub2RlIGNvdWxkIGVhc2lseSBiZQpAQCAtMTI2LDYgKzEyNywxMCBAQCBSZWxhdGlvbkdldElu ZGV4U2NhbihSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiAJc2Nhbi0+eHNfaGl0dXAgPSBOVUxMOwogCXNjYW4tPnhzX2hpdHVwZGVzYyA9IE5VTEw7CiAK KwlzY2FuLT5iYXRjaF9pbmRleF9vcGFxdWVfc2l6ZSA9IDA7CisJc2Nhbi0+YmF0Y2hfdHVwbGVz X3dvcmtzcGFjZSA9IDA7CisJc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0ID0gMDsKKwogCXJldHVy biBzY2FuOwogfQogCkBAIC00NTQsNyArNDU5LDcgQEAgc3lzdGFibGVfYmVnaW5zY2FuKFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQllbG9nKEVSUk9SLCAiY29sdW1uIGlzIG5vdCBpbiBpbmRl eCIpOwogCQl9CiAKLQkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0 aW9uLCBpcmVsLAorCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRp b24sIGlyZWwsIGZhbHNlLAogCQkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDApOwog CQlpbmRleF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwog CQlzeXNzY2FuLT5zY2FuID0gTlVMTDsKQEAgLTUxNyw3ICs1MjIsOCBAQCBzeXN0YWJsZV9nZXRu ZXh0KFN5c1NjYW5EZXNjIHN5c3NjYW4pCiAKIAlpZiAoc3lzc2Nhbi0+aXJlbCkKIAl7Ci0JCWlm IChpbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9u LCBzeXNzY2FuLT5zbG90KSkKKwkJaWYgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzeXNzY2Fu LT5pc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sCisJCQkJCQkJCQkgc3lzc2Nhbi0+c2xvdCkp CiAJCXsKIAkJCWJvb2wJCXNob3VsZEZyZWU7CiAKQEAgLTcxNSw3ICs3MjEsNyBAQCBzeXN0YWJs ZV9iZWdpbnNjYW5fb3JkZXJlZChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJaWYgKFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKENoZWNrWGlkQWxpdmUpKQogCQlic3lzc2NhbiA9IHRydWU7CiAKLQlzeXNz Y2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsYXRpb24sIGluZGV4UmVsYXRpb24s CisJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJl bGF0aW9uLCBmYWxzZSwKIAkJCQkJCQkJCSBzbmFwc2hvdCwgTlVMTCwgbmtleXMsIDApOwogCWlu ZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVMTCwgMCk7CiAJc3lz c2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC03MzQsNyArNzQwLDcgQEAgc3lzdGFibGVfZ2V0bmV4dF9v cmRlcmVkKFN5c1NjYW5EZXNjIHN5c3NjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCUhl YXBUdXBsZQlodHVwID0gTlVMTDsKIAogCUFzc2VydChzeXNzY2FuLT5pcmVsKTsKLQlpZiAoaW5k ZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3NjYW4tPnNsb3Qp KQorCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+aXNjYW4sIGRpcmVjdGlv biwgc3lzc2Nhbi0+c2xvdCkpCiAJCWh0dXAgPSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHN5c3Nj YW4tPnNsb3QsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFNlZSBub3RlcyBpbiBzeXN0YWJsZV9nZXRu ZXh0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCA1ZWI3ZTk5YWQuLjhhYjZi OGNkMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC0yNCw5ICsyNCw3IEBACiAg KgkJaW5kZXhfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUgLSBpbml0aWFsaXplIHBhcmFsbGVsIHNj YW4KICAqCQlpbmRleF9wYXJhbGxlbHJlc2NhbiAgLSAocmUpc3RhcnQgYSBwYXJhbGxlbCBzY2Fu IG9mIGFuIGluZGV4CiAgKgkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsIC0gam9pbiBwYXJhbGxl bCBpbmRleCBzY2FuCi0gKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBnZXQgdGhlIG5leHQgVElEIGZy b20gYSBzY2FuCi0gKgkJaW5kZXhfZmV0Y2hfaGVhcAkJLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUKLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QJLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJv bSBhIHNjYW4KKyAqCQlpbmRleF9nZXRuZXh0X3RpZAktIGFtZ2V0dHVwbGUgdGFibGUgQU0gaGVs cGVyIHJvdXRpbmUKICAqCQlpbmRleF9nZXRiaXRtYXAgLSBnZXQgYWxsIHR1cGxlcyBmcm9tIGEg c2NhbgogICoJCWluZGV4X2J1bGtfZGVsZXRlCS0gYnVsayBkZWxldGlvbiBvZiBpbmRleCB0dXBs ZXMKICAqCQlpbmRleF92YWN1dW1fY2xlYW51cAktIHBvc3QtZGVsZXRpb24gY2xlYW51cCBvZiBh biBpbmRleApAQCAtNDQsNiArNDIsNyBAQAogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKICNpbmNs dWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaW5kZXhiYXRjaC5oIgogI2lu Y2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKQEAgLTEwNCw5ICsxMDMsMTUgQEAgZG8geyBc CiAJCQkgQ3BwQXNTdHJpbmcocG5hbWUpLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzY2FuLT5p bmRleFJlbGF0aW9uKSk7IFwKIH0gd2hpbGUoMCkKIAotc3RhdGljIEluZGV4U2NhbkRlc2MgaW5k ZXhfYmVnaW5zY2FuX2ludGVybmFsKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCi0JCQkJCQkJCQkJ CSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJ CQkJICBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKK3N0YXRp YyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nh bl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJIGlu dCBua2V5cywKKwkJCQkJCQkJCQkJCQkJCQkJCSBpbnQgbm9yZGVyYnlzLAorCQkJCQkJCQkJCQkJ CQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJCQkJCQkJCQkJCQkJIFBhcmFsbGVsSW5k ZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJCQkJCQkJCQkJCQkJCSBib29sIHRlbXBfc25hcCwKKwkJ CQkJCQkJCQkJCQkJCQkJCSBSZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCQkJ CQkgYm9vbCBpbmRleF9vbmx5X3NjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSW5z dHJ1bWVudGF0aW9uICppbnN0cnVtZW50KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2YWxpZGF0ZV9y ZWxhdGlvbl9hc19pbmRleChSZWxhdGlvbiByKTsKIAogCkBAIC0yNTUsMTIgKzI2MCwxMSBAQCBp bmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogSW5kZXhTY2FuRGVz YwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQlSZWxhdGlvbiBp bmRleFJlbGF0aW9uLAorCQkJCWJvb2wgaW5kZXhfb25seV9zY2FuLAogCQkJCVNuYXBzaG90IHNu YXBzaG90LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQlp bnQgbmtleXMsIGludCBub3JkZXJieXMpCiB7Ci0JSW5kZXhTY2FuRGVzYyBzY2FuOwotCiAJQXNz ZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7CiAKIAkvKiBDaGVjayB0aGF0IGEgaGlz dG9yaWMgc25hcHNob3QgaXMgbm90IHVzZWQgZm9yIG5vbi1jYXRhbG9nIHRhYmxlcyAqLwpAQCAt MjczLDIwICsyNzcsOSBAQCBpbmRleF9iZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAog CQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcFJlbGF0aW9uKSkpKTsKIAl9CiAKLQlz Y2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCBub3Jk ZXJieXMsIHNuYXBzaG90LCBOVUxMLCBmYWxzZSk7Ci0KLQkvKgotCSAqIFNhdmUgYWRkaXRpb25h bCBwYXJhbWV0ZXJzIGludG8gdGhlIHNjYW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQK LQkgKiB1cCBieSBSZWxhdGlvbkdldEluZGV4U2Nhbi4KLQkgKi8KLQlzY2FuLT5oZWFwUmVsYXRp b24gPSBoZWFwUmVsYXRpb247Ci0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2Fu LT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXgg bWF0Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhf ZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9uKTsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBpbmRl eF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25h cHNob3QsCisJCQkJCQkJCQlOVUxMLCBmYWxzZSwgaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJaW5k ZXhfb25seV9zY2FuLCBpbnN0cnVtZW50KTsKIH0KIAogLyoKQEAgLTMwMSwyOSArMjk0LDI1IEBA IGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJICAg SW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50LAogCQkJCQkgICBpbnQgbmtleXMp CiB7Ci0JSW5kZXhTY2FuRGVzYyBzY2FuOwotCiAJQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRT bmFwc2hvdCk7CisJQXNzZXJ0KElzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCkpOwogCi0Jc2Nh biA9IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleFJlbGF0aW9uLCBua2V5cywgMCwgc25h cHNob3QsIE5VTEwsIGZhbHNlKTsKLQotCS8qCi0JICogU2F2ZSBhZGRpdGlvbmFsIHBhcmFtZXRl cnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVsc2Ugd2FzIHNldAotCSAqIHVwIGJ5 IFJlbGF0aW9uR2V0SW5kZXhTY2FuLgotCSAqLwotCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNo b3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLQlyZXR1cm4gc2NhbjsKKwly ZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCAwLCBz bmFwc2hvdCwgTlVMTCwKKwkJCQkJCQkJCWZhbHNlLCBOVUxMLCBmYWxzZSwgaW5zdHJ1bWVudCk7 CiB9CiAKIC8qCiAgKiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwgLS0tIGNvbW1vbiBjb2RlIGZv ciBpbmRleF9iZWdpbnNjYW4gdmFyaWFudHMKKyAqCisgKiBXaGVuIGhlYXBSZWxhdGlvbiBpcyBu b3QgTlVMTCwgYWxzbyBpbml0aWFsaXplcyBoZWFwLXNpZGUgc2NhbiBzdGF0ZToKKyAqIGJhdGNo IHJpbmcgc2V0dXAsIGdldG5leHRfc2xvdCByZXNvbHV0aW9uLCBhbmQgdGFibGUgZmV0Y2ggaW5p dGlhbGl6YXRpb24uCiAgKi8KLXN0YXRpYyBJbmRleFNjYW5EZXNjCitzdGF0aWMgcGdfYXR0cmli dXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX2ludGVybmFs KFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJCQkJCQkgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlz LCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSBQYXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4s IGJvb2wgdGVtcF9zbmFwKQorCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwgYm9v bCB0ZW1wX3NuYXAsCisJCQkJCQkgUmVsYXRpb24gaGVhcFJlbGF0aW9uLCBib29sIGluZGV4X29u bHlfc2NhbiwKKwkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQpCiB7 CiAJSW5kZXhTY2FuRGVzYyBzY2FuOwogCkBAIC0zNDcsNiArMzM2LDM3IEBAIGluZGV4X2JlZ2lu c2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXNjYW4tPnBhcmFsbGVsX3Nj YW4gPSBwc2NhbjsKIAlzY2FuLT54c190ZW1wX3NuYXAgPSB0ZW1wX3NuYXA7CiAKKwlzY2FuLT54 c19zbmFwc2hvdCA9IHNuYXBzaG90OworCXNjYW4tPk1WQ0NTY2FuID0gSXNNVkNDTGlrZVNuYXBz aG90KHNuYXBzaG90KTsKKwlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKKworCS8qCisJ ICogSW5pdGlhbGl6ZSBoZWFwLXNpZGUgc2NhbiBzdGF0ZSB3aGVuIGEgaGVhcCByZWxhdGlvbiBp cyBwcm92aWRlZC4KKwkgKiBCaXRtYXAgc2NhbnMgZG9uJ3QgcHJvdmlkZSBvbmUsIHNpbmNlIHRo ZXkgYWNjZXNzIHRoZSBoZWFwIHNlcGFyYXRlbHkuCisJICovCisJaWYgKGhlYXBSZWxhdGlvbiAh PSBOVUxMKQorCXsKKwkJc2Nhbi0+aGVhcFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOworCQlzY2Fu LT54c193YW50X2l0dXAgPSBpbmRleF9vbmx5X3NjYW47CisJCXNjYW4tPmJhdGNoSW1tZWRpYXRl VW5ndWFyZCA9IChzY2FuLT5NVkNDU2NhbiAmJiAhaW5kZXhfb25seV9zY2FuKTsKKworCQlpZiAo aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCkKKwkJCWluZGV4X2Jh dGNoc2Nhbl9pbml0KHNjYW4pOworCisJCS8qIFJlc29sdmUgd2hpY2ggZ2V0bmV4dF9zbG90IGlt cGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCisJCWlmIChpbmRleF9vbmx5X3Nj YW4pCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBzY2FuLT51c2ViYXRjaHJpbmcgPworCQkJ CWhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfb25seV9hbWdldGJhdGNoX2dldG5leHRf c2xvdCA6CisJCQkJaGVhcFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9vbmx5X2FtZ2V0dHVw bGVfZ2V0bmV4dF9zbG90OworCQllbHNlCisJCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPSBzY2Fu LT51c2ViYXRjaHJpbmcgPworCQkJCWhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfcGxh aW5fYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QgOgorCQkJCWhlYXBSZWxhdGlvbi0+cmRfdGFibGVh bS0+aW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3Q7CisKKwkJLyogcHJlcGFyZSB0 byBmZXRjaCBpbmRleCBtYXRjaGVzIGZyb20gdGFibGUgKi8KKwkJc2Nhbi0+eHNfaGVhcGZldGNo ID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9uKTsKKwl9CisKIAlyZXR1cm4g c2NhbjsKIH0KIApAQCAtMzczLDEyICszOTMsMTQgQEAgaW5kZXhfcmVzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbiwKIAlBc3NlcnQobmtleXMgPT0gc2Nhbi0+bnVtYmVyT2ZLZXlzKTsKIAlBc3NlcnQo bm9yZGVyYnlzID09IHNjYW4tPm51bWJlck9mT3JkZXJCeXMpOwogCi0JLyogUmVsZWFzZSByZXNv dXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKiByZXNl dCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzY2FuICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAogCXNjYW4t PmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwotCXNjYW4tPnhzX2hl YXBfY29udGludWUgPSBmYWxzZTsKKworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4 X2JhdGNoc2Nhbl9yZXNldChzY2FuKTsKIAogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbXJlc2NhbihzY2FuLCBrZXlzLCBua2V5cywKIAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRl cmJ5cyk7CkBAIC0zOTQsNiArNDE2LDEzIEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAK KwkvKiBGcmVlIGNhY2hlZCBiaXRtYXAgYmF0Y2ggaWYgYW55IChiaXRtYXAgc2NhbnMgdXNlIGJh dGNoY2FjaGVbMF0pICovCisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcgJiYgc2Nhbi0+YmF0Y2hj YWNoZVswXSAhPSBOVUxMKQorCXsKKwkJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShzY2FuLT5iYXRj aGNhY2hlWzBdLCBzY2FuKSk7CisJCXNjYW4tPmJhdGNoY2FjaGVbMF0gPSBOVUxMOworCX0KKwog CS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vz c2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAl7CkBAIC00MDEsNiArNDMwLDEwIEBA IGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCQlzY2FuLT54c19oZWFwZmV0Y2gg PSBOVUxMOwogCX0KIAorCS8qIENsZWFudXAgYmF0Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiBy ZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCWlu ZGV4X2JhdGNoc2Nhbl9lbmQoc2Nhbik7CisKIAkvKiBFbmQgdGhlIEFNJ3Mgc2NhbiAqLwogCXNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWVuZHNjYW4oc2Nhbik7CiAKQEAgLTQyMiwy NCArNDU1LDI1IEBAIHZvaWQKIGluZGV4X21hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewog CVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tf U0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCS8qIE9ubHkgYW1nZXRiYXRjaCBpbmRleCBBTXMgc3Vw cG9ydCBtYXJrIGFuZCByZXN0b3JlICovCisJaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKHNjYW4p OwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3Jl IGEgc2NhbiBwb3NpdGlvbgogICoKLSAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50 ZXJuYWwgc2NhbiBzdGF0ZSBvZiB0aGUgaW5kZXggQU0uICBTZWUKLSAqIGNvbW1lbnRzIGZvciBF eGVjUmVzdHJQb3MoKS4KKyAqIE5PVEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgYmF0Y2ggcG9z aXRpb25hbCBzdGF0ZSBzaGFyZWQgYnkgdGhlIHRhYmxlIGFuZAorICogaW5kZXggQU1zLiAgU2Vl IGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KICAqCiAgKiBOT1RFOiBGb3IgaGVhcCwgaW4g dGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMsIG1hcmsvcmVzdG9yZSBvbmx5IHdvcmtzCiAgKiBj b3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFwc2hvdCBpcyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJl cyB0aGF0IHRoZXJlJ3MgYXQKICAqIG1vc3Qgb25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBI T1QgY2hhaW4sIGFuZCBzbyByZXN0b3JpbmcgdGhlIHByaW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3Jh bnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlzIHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seQot ICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVzdG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJn ZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5z IG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hvdHMuICBUaGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBp ZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0IHNlZW1zIHVuaW1wb3J0YW50LgorICogc3RhdGUg YXQgdGhlIHNjYW4gaXRlbSBncmFudWxhcml0eSBpcyBzdWZmaWNpZW50LiAgU2luY2UgdGhlIG9u bHkgY3VycmVudAorICogdXNlciBvZiBtYXJrL3Jlc3RvcmUgZnVuY3Rpb25hbGl0eSBpcyBub2Rl TWVyZ2Vqb2luLmMsIHRoaXMgZWZmZWN0aXZlbHkKKyAqIG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBw bGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25hcHNob3RzLiAgVGhpcyBjb3VsZCBiZQorICogZml4 ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5vdyBpdCBzZWVtcyB1bmltcG9ydGFudC4KICAqIC0t LS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZApAQCAtNDQ4LDE2ICs0ODIsMTQgQEAgaW5kZXhfcmVz dHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc2Nh bi0+eHNfc25hcHNob3QpKTsKIAogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtcmVzdHJwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOwogCi0JLyog cmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMg Ki8KKwkvKiByZXNldCB0YWJsZSBBTSBzdGF0ZSBmb3IgcmVzY2FuICovCiAJaWYgKHNjYW4tPnhz X2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNo KTsKIAotCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBmYWxzZTsgLyogZm9yIHNhZmV0eSAqLwot CXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKLQotCXNjYW4tPmluZGV4UmVsYXRpb24t PnJkX2luZGFtLT5hbXJlc3RycG9zKHNjYW4pOworCS8qIGFsc28gbm90aWZ5IHRhYmxlIEFNIGFu ZCBpbmRleCBBTSAqLworCWluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKIH0KIAog LyoKQEAgLTU3OSw2ICs2MTEsOSBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNj IHNjYW4pCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVz ZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCWlu ZGV4X2JhdGNoc2Nhbl9yZXNldChzY2FuKTsKKwogCS8qIGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0 aW9uYWw7IGFzc3VtZSBuby1vcCBpZiBub3QgcHJvdmlkZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+ aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxyZXNjYW4gIT0gTlVMTCkKIAkJc2Nh bi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxyZXNjYW4oc2Nhbik7CkBAIC01 OTEsNDAgKzYyNiwzMyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4p CiAgKi8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBo ZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCSBib29sIGluZGV4X29ubHlfc2NhbiwK IAkJCQkJCSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkgaW50 IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2Nh bikKIHsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKLQlJbmRleFNjYW5EZXNjIHNjYW47CiAKIAlBc3Nl cnQoUmVsRmlsZUxvY2F0b3JFcXVhbHMoaGVhcHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2xv Y2F0b3IpKTsKIAlBc3NlcnQoUmVsRmlsZUxvY2F0b3JFcXVhbHMoaW5kZXhyZWwtPnJkX2xvY2F0 b3IsIHBzY2FuLT5wc19pbmRleGxvY2F0b3IpKTsKIAogCXNuYXBzaG90ID0gUmVzdG9yZVNuYXBz aG90KHBzY2FuLT5wc19zbmFwc2hvdF9kYXRhKTsKIAlSZWdpc3RlclNuYXBzaG90KHNuYXBzaG90 KTsKLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4cmVsLCBua2V5cywgbm9y ZGVyYnlzLCBzbmFwc2hvdCwKLQkJCQkJCQkJCXBzY2FuLCB0cnVlKTsKIAotCS8qCi0JICogU2F2 ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgaW50byB0aGUgc2NhbmRlc2MuICBFdmVyeXRoaW5nIGVs c2Ugd2FzIHNldAotCSAqIHVwIGJ5IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbC4KLQkgKi8KLQlz Y2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwcmVsOwotCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNo b3Q7Ci0Jc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7Ci0KLQkvKiBwcmVwYXJlIHRvIGZl dGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwotCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRh YmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwotCi0JcmV0dXJuIHNjYW47CisJcmV0dXJu IGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChpbmRleHJlbCwgbmtleXMsIG5vcmRlcmJ5cywgc25h cHNob3QsCisJCQkJCQkJCQlwc2NhbiwgdHJ1ZSwgaGVhcHJlbCwgaW5kZXhfb25seV9zY2FuLAor CQkJCQkJCQkJaW5zdHJ1bWVudCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqIGluZGV4 X2dldG5leHRfdGlkIC0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2NhbgorICogaW5kZXhfZ2V0 bmV4dF90aWQgLSBhbWdldHR1cGxlIGludGVyZmFjZQogICoKICAqIFRoZSByZXN1bHQgaXMgdGhl IG5leHQgVElEIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5cywKICAqIG9yIE5VTEwgaWYgbm8gbW9y ZSBtYXRjaGluZyB0dXBsZXMgZXhpc3QuCisgKgorICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxs ZWQgYnkgdGFibGUgQU0ncyBpbmRleF9nZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sCisgKiBh bmQgb25seSBnaXZlbiBhbiBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIHRoZSBzaW5nbGUtdHVwbGUg YW1nZXR0dXBsZQorICogaW50ZXJmYWNlLgogICogLS0tLS0tLS0tLS0tLS0tLQogICovCiBJdGVt UG9pbnRlcgpAQCAtNjM0LDYgKzY2Miw3IEBAIGluZGV4X2dldG5leHRfdGlkKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIAlTQ0FOX0NIRUNLUzsKIAlDSEVD S19TQ0FOX1BST0NFRFVSRShhbWdldHR1cGxlKTsKKwlBc3NlcnQoIXNjYW4tPnVzZWJhdGNocmlu Zyk7CiAKIAkvKiBYWFg6IHdlIHNob3VsZCBhc3NlcnQgdGhhdCBhIHNuYXBzaG90IGlzIHB1c2hl ZCBvciByZWdpc3RlcmVkICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFht aW4pKTsKQEAgLTY0OCw3ICs2NzcsNiBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQogCiAJLyogUmVzZXQga2lsbCBmbGFnIGlt bWVkaWF0ZWx5IGZvciBzYWZldHkgKi8KIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7 Ci0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZhbHNlOwogCiAJLyogSWYgd2UncmUgb3V0IG9m IGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KIAlpZiAoIWZvdW5kKQpAQCAtNjY3LDk3ICs2 OTUsNiBAQCBpbmRleF9nZXRuZXh0X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyZWN0aW9uKQogCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKIH0KIAotLyogLS0tLS0t LS0tLS0tLS0tLQotICoJCWluZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhl YXAgdHVwbGUKLSAqCi0gKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29j aWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKLSAqIHJlY2VudGx5IGZldGNoZWQgYnkgaW5k ZXhfZ2V0bmV4dF90aWQsIG9yIE5VTEwgaWYgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMKLSAqIGV4 aXN0LiAgKFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lIG1hdGNoaW5nIHR1cGxlIGJlY2F1c2Ug b2YgSE9UIGNoYWlucywKLSAqIGFsdGhvdWdoIHdoZW4gdXNpbmcgYW4gTVZDQyBzbmFwc2hvdCBp dCBzaG91bGQgYmUgaW1wb3NzaWJsZSBmb3IgbW9yZSB0aGFuCi0gKiBvbmUgc3VjaCB0dXBsZSB0 byBleGlzdC4pCi0gKgotICogT24gc3VjY2VzcywgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBo ZWFwIHR1cCBpcyBwaW5uZWQgKHRoZSBwaW4gd2lsbCBiZQotICogZHJvcHBlZCBpbiBhIGZ1dHVy ZSBpbmRleF9nZXRuZXh0X3RpZCwgaW5kZXhfZmV0Y2hfaGVhcCBvciBpbmRleF9lbmRzY2FuCi0g KiBjYWxsKS4KLSAqCi0gKiBOb3RlOiBjYWxsZXIgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNr LCBhbmQgcGVyZm9ybSByZWNoZWNraW5nIG9mIHRoZQotICogc2NhbiBrZXlzIGlmIHJlcXVpcmVk LiAgV2UgZG8gbm90IGRvIHRoYXQgaGVyZSBiZWNhdXNlIHdlIGRvbid0IGhhdmUKLSAqIGVub3Vn aCBpbmZvcm1hdGlvbiB0byBkbyBpdCBlZmZpY2llbnRseSBpbiB0aGUgZ2VuZXJhbCBjYXNlLgot ICogLS0tLS0tLS0tLS0tLS0tLQotICovCi1ib29sCi1pbmRleF9mZXRjaF9oZWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCi17Ci0JYm9vbAkJYWxsX2RlYWQgPSBm YWxzZTsKLQlib29sCQlmb3VuZDsKLQotCWZvdW5kID0gdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUo c2Nhbi0+eHNfaGVhcGZldGNoLCAmc2Nhbi0+eHNfaGVhcHRpZCwKLQkJCQkJCQkJCXNjYW4tPnhz X3NuYXBzaG90LCBzbG90LAotCQkJCQkJCQkJJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxf ZGVhZCk7Ci0KLQlpZiAoZm91bmQpCi0JCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmlu ZGV4UmVsYXRpb24pOwotCi0JLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWlu IGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0gdG8ga2lsbCBp dHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQK LQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdlIGRvIG5vdCBk byB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlIE1WQ0Mg dG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgot CSAqLwotCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3By aW9yX3R1cGxlID0gYWxsX2RlYWQ7Ci0KLQlyZXR1cm4gZm91bmQ7Ci19Ci0KLS8qIC0tLS0tLS0t LS0tLS0tLS0KLSAqCQlpbmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJv bSBhIHNjYW4KLSAqCi0gKiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5n IHRoZSBzY2FuIGtleXMgYW5kIHRoZSBzbmFwc2hvdCB3YXMKLSAqIGZvdW5kLCBmYWxzZSBvdGhl cndpc2UuICBUaGUgdHVwbGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KLSAqCi0g KiBPbiBzdWNjZXNzLCByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8g YmUgaGVsZCwgYW5kIHdpbGwgYmUKLSAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgaW5kZXhfZ2V0bmV4 dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgot ICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0g cmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBk byB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24g dG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0t LS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWZvciAo OzspCi0JewotCQlpZiAoIXNjYW4tPnhzX2hlYXBfY29udGludWUpCi0JCXsKLQkJCUl0ZW1Qb2lu dGVyIHRpZDsKLQotCQkJLyogVGltZSB0byBmZXRjaCB0aGUgbmV4dCBUSUQgZnJvbSB0aGUgaW5k ZXggKi8KLQkJCXRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW4sIGRpcmVjdGlvbik7Ci0KLQkJ CS8qIElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCi0JCQlpZiAo dGlkID09IE5VTEwpCi0JCQkJYnJlYWs7Ci0KLQkJCUFzc2VydChJdGVtUG9pbnRlckVxdWFscyh0 aWQsICZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCX0KLQotCQkvKgotCQkgKiBGZXRjaCB0aGUgbmV4 dCAob3Igb25seSkgdmlzaWJsZSBoZWFwIHR1cGxlIGZvciB0aGlzIGluZGV4IGVudHJ5LgotCQkg KiBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCBsb29wIGFyb3VuZCBhbmQgZ3JhYiB0aGUgbmV4 dCBUSUQgZnJvbQotCQkgKiB0aGUgaW5kZXguCi0JCSAqLwotCQlBc3NlcnQoSXRlbVBvaW50ZXJJ c1ZhbGlkKCZzY2FuLT54c19oZWFwdGlkKSk7Ci0JCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4s IHNsb3QpKQotCQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCiAvKiAt LS0tLS0tLS0tLS0tLS0tCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgYXQg b25jZSBmcm9tIGFuIGluZGV4IHNjYW4KICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0 Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjZiYmU4YjkxNwotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKQEAg LTAsMCArMSw3NDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGluZGV4YmF0Y2guYwor ICoJICBCYXRjaC1iYXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0dXJlIGZvciB0aGUgYW1nZXRi YXRjaCBpbnRlcmZhY2UuCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGNvcmUgaW5m cmFzdHJ1Y3R1cmUgZm9yIGJhdGNoLWJhc2VkIGluZGV4IHNjYW5zLAorICogd2hpY2ggYWxsb3cg aW5kZXggQU1zIHRvIHJldHVybiBtdWx0aXBsZSBtYXRjaGluZyBUSURzIHBlciBwYWdlIGluIGEg c2luZ2xlCisgKiBjYWxsLiAgVGhlIGJhdGNoIHJpbmcgYnVmZmVyIGlzIG1hbmFnZWQgYnkgdGhl IHRhYmxlIEFNLCB3aXRoIGhlbHAgZnJvbSB1cywKKyAqIGFuZCB3aXRoIGhlbHAgZnJvbSB0aGUg cmluZyBidWZmZXIgaW5saW5lIGZ1bmN0aW9ucyBpbiByZWxzY2FuLmguICBUaGlzCisgKiBhcHBy b2FjaCBlbmFibGVzIGVmZmljaWVudCBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBibG9ja3MgZHVy aW5nIG9yZGVyZWQKKyAqIGluZGV4IHNjYW5zLgorICoKKyAqIFRoZSByaW5nIGJ1ZmZlciBsb2Fk cyBiYXRjaGVzIGluIGluZGV4IGtleSBzcGFjZSBvcmRlci4KKyAqCisgKiBUaGVyZSdzIHRocmVl IHR5cGVzIG9mIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZToKKyAqCisgKiAxLiBDb3JlIGJhdGNo IHNjYW4gbGlmZWN5Y2xlIChpbmRleF9iYXRjaHNjYW5fKik6IEZ1bmN0aW9ucyB0aGF0IG1hbmFn ZQorICogICAgYmF0Y2ggc2NhbiBzdGF0ZSBpbmNsdWRpbmcgaW5pdGlhbGl6YXRpb24sIHJlc2V0 LCBjbGVhbnVwLCBhbmQgdGhlCisgKiAgICBtYXJrL3Jlc3RvcmUgb3BlcmF0aW9ucyBuZWVkZWQg Zm9yIG1lcmdlIGpvaW5zLiAgQ2FsbGVkIGJ5IGluZGV4YW0uYworICogICAgcm91dGluZXMgdGhh dCBtYW5hZ2UgaW5kZXggc2NhbnMgb24gYmVoYWxmIG9mIHRoZSBjb3JlIGV4ZWN1dG9yLgorICoK KyAqIDIuIFRhYmxlIEFNIHV0aWxpdGllcyAodGFibGVhbV91dGlsXyopOiBIZWxwZXIgZnVuY3Rp b25zIGNhbGxlZCBieSB0YWJsZQorICogICAgQU1zIGR1cmluZyBhbWdldGJhdGNoIGluZGV4IHNj YW5zLiAgVGhlc2UgaGFuZGxlIGNyb3NzLWJhdGNoIGRpcmVjdGlvbgorICogICAgY2hhbmdlcywg cmVjb3JkaW5nIGRlYWQgaXRlbXMgZm9yIGEgbGF0ZXIgY2FsbCB0byBhbWtpbGxpdGVtc2JhdGNo LAorICogICAgZnJlZWluZyBiYXRjaGVzIHdoZW4gdGhlIHRhYmxlIEFNIGlzIGRvbmUgd2l0aCB0 aGVtLCBhbmQgY2FsbGluZworICogICAgYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgVElEIHJl Y3ljbGluZyBpbnRlcmxvY2sgKHRoZSBndWFyZCB0aGF0CisgKiAgICBwcmV2ZW50cyBWQUNVVU0g ZnJvbSByZWN5Y2xpbmcgVElEcyB3aGlsZSBhIHNjYW4gaXMgaW4gZmxpZ2h0KS4KKyAqCisgKiAz LiBJbmRleCBBTSB1dGlsaXRpZXMgKGluZGV4YW1fdXRpbF8qKTogSGVscGVyIGZ1bmN0aW9ucyBj YWxsZWQgYnkgaW5kZXgKKyAqICAgIEFNcyB0aGF0IGltcGxlbWVudCB0aGUgYW1nZXRiYXRjaCBp bnRlcmZhY2UuICBUaGVzZSBtYW5hZ2UgYmF0Y2gKKyAqICAgIGFsbG9jYXRpb24sIGluZGV4IHBh Z2UgYnVmZmVyIGxvY2sgcmVsZWFzZSwgYW5kIGJhdGNoIG1lbW9yeSByZWN5Y2xpbmcuCisgKgor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJh Y2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaW5kZXhiYXRjaC5oIgorI2luY2x1ZGUg ImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ludC5oIgorI2luY2x1ZGUgImxp Yi9xdW5pcXVlLmgiCisKK3N0YXRpYyBpbnQJYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAq dmEsIGNvbnN0IHZvaWQgKnZiKTsKKworLyoKKyAqIFNldHMgdXAgdGhlIGJhdGNoIHJpbmcgYnVm ZmVyIHN0cnVjdHVyZSBmb3IgdXNlIGJ5IGFuIGluZGV4IHNjYW4uCisgKgorICogT25seSBjYWxs IGhlcmUgd2hlbiBhbGwgb2YgdGhlIGluZGV4IHJlbGF0ZWQgZmllbGRzIGluICdzY2FuJyB3ZXJl IGFscmVhZHkKKyAqIGluaXRpYWxpemVkLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5faW5p dChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Q b3MudmFsaWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHJpbmdidWYubWFya1Bvcy52YWxpZCA9IGZh bHNlOworCisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0 Y2hyaW5nYnVmLmhlYWRCYXRjaCA9IDA7CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLm5leHRCYXRjaCA9 IDA7CisKKwlzY2FuLT51c2ViYXRjaHJpbmcgPSB0cnVlOworfQorCisvKgorICogUmVzZXQgc3Rh dGUgdXNlZCBmb3IgYSBiYXRjaCBpbmRleCBzY2FuCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoc2Nh bl9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hSaW5nQnVmZmVyICpiYXRjaHJp bmdidWYgPSAmc2Nhbi0+YmF0Y2hyaW5nYnVmOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9 IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJCW1hcmtCYXRjaEZyZWVkID0gZmFsc2U7 CisKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsKKwliYXRjaHJpbmdidWYt Pm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCS8qCisJICogRW5zdXJlIHRhYmxlYW1fdXRpbF9m cmVlX2JhdGNoIHdvbid0IHNraXAgdGhlIG9sZCBtYXJrQmF0Y2ggaW4gdGhlIGxvb3AKKwkgKiBi ZWxvdworCSAqLworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gTlVMTDsKKworCWZvciAodWlu dDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJh dGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2go c2NhbiwgaSk7CisKKwkJaWYgKGJhdGNoID09IG1hcmtCYXRjaCkKKwkJCW1hcmtCYXRjaEZyZWVk ID0gdHJ1ZTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQor CisJaWYgKCFtYXJrQmF0Y2hGcmVlZCAmJiB1bmxpa2VseShtYXJrQmF0Y2gpKQorCQl0YWJsZWFt X3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gpOworCisJYmF0Y2hyaW5nYnVmLT5oZWFk QmF0Y2ggPSAwOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gMDsKK30KKworLyoKKyAqIEZy ZWUgcmVzb3VyY2VzIGF0IGVuZCBvZiBiYXRjaCBpbmRleCBzY2FuCisgKgorICogQ2FsbGVkIHdo ZW4gYW4gaW5kZXggc2NhbiBpcyBiZWluZyBlbmRlZCwgcmlnaHQgYmVmb3JlIHRoZSBvd25pbmcg c2NhbgorICogZGVzY3JpcHRvciBnb2VzIGF3YXkuICBDbGVhbnMgdXAgYWxsIGJhdGNoIHJlbGF0 ZWQgcmVzb3VyY2VzLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fZW5kKEluZGV4U2NhbkRl c2Mgc2NhbikKK3sKKwkvKiBGcmVlIGFsbCByZW1haW5pbmcgbG9hZGVkIGJhdGNoZXMgKGV2ZW4g bWFya0JhdGNoKSAqLworCUFzc2VydCghc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwlpbmRleF9iYXRj aHNjYW5fcmVzZXQoc2Nhbik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FD SEVfQkFUQ0hFUzsgaSsrKQorCXsKKwkJSW5kZXhTY2FuQmF0Y2ggY2FjaGVkID0gc2Nhbi0+YmF0 Y2hjYWNoZVtpXTsKKworCQlpZiAoY2FjaGVkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlp ZiAoY2FjaGVkLT5kZWFkSXRlbXMpCisJCQlwZnJlZShjYWNoZWQtPmRlYWRJdGVtcyk7CisJCXBm cmVlKGJhdGNoX2FsbG9jX2Jhc2UoY2FjaGVkLCBzY2FuKSk7CisJfQorfQorCisvKgorICogU2V0 IGEgbWFyayBmcm9tIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBTYXZlcyB0aGUgY3VycmVudCBz Y2FuIHBvc2l0aW9uIGFuZCBhc3NvY2lhdGVkIGJhdGNoIHNvIHRoYXQgdGhlIHNjYW4gY2FuCisg KiBiZSByZXN0b3JlZCB0byB0aGlzIHBvaW50IGxhdGVyLCB2aWEgYSBjYWxsIHRvIGluZGV4X2Jh dGNoc2Nhbl9yZXN0b3JlX3Bvcy4KKyAqIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmV0YWluZWQgYW5k IG5vdCBmcmVlZCB1bnRpbCBhIG5ldyBtYXJrIGlzIHNldCBvciB0aGUKKyAqIHNjYW4gZW5kcyAo b3IgdW50aWwgdGhlIG1hcmsgaXMgcmVzdG9yZWQpLgorICovCit2b2lkCitpbmRleF9iYXRjaHNj YW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0 Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2Fu UG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1h cmtQb3MgPSAmYmF0Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRj aCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCUluZGV4U2NhbkJh dGNoIG1hcmtCYXRjaCA9IGJhdGNocmluZ2J1Zi0+bWFya0JhdGNoOworCWJvb2wJCWZyZWVNYXJr QmF0Y2g7CisKKwlBc3NlcnQoc2Nhbi0+TVZDQ1NjYW4pOworCisJLyoKKwkgKiBGcmVlIHRoZSBw cmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpIC0tIGJ1dCBvbmx5IGlmIGl0IGlzbid0IG91cgor CSAqIHNjYW5CYXRjaCAoZGVmZW5zaXZlbHkgbWFrZSBzdXJlIHRoYXQgbWFya0JhdGNoIGlzbid0 IHNvbWUgbGF0ZXIKKwkgKiBzdGlsbC1uZWVkZWQgYmF0Y2gsIHRvbykKKwkgKi8KKwlpZiAoIW1h cmtCYXRjaCB8fCBtYXJrQmF0Y2ggPT0gc2NhbkJhdGNoKQorCXsKKwkJLyogRGVmaW5pdGVseSBu byBtYXJrQmF0Y2ggdGhhdCB3ZSBzaG91bGQgZnJlZSBub3cgKi8KKwkJZnJlZU1hcmtCYXRjaCA9 IGZhbHNlOworCX0KKwllbHNlIGlmIChsaWtlbHkoIWluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNj YW4sIG1hcmtQb3MtPmJhdGNoKSkpCisJeworCQkvKiBEZWZpbml0ZWx5IGhhdmUgYSBuby1sb25n ZXItbG9hZGVkIG1hcmtCYXRjaCB0byBmcmVlICovCisJCWZyZWVNYXJrQmF0Y2ggPSB0cnVlOwor CX0KKwllbHNlCisJeworCQkvKgorCQkgKiBpbmRleF9zY2FuX2JhdGNoX2xvYWRlZCBpbmRpY2F0 ZXMgdGhhdCBtYXJrUG9zLT5iYXRjaCBpcyBsb2FkZWQsCisJCSAqIGJ1dCBhZnRlciB1aW50OCBv dmVyZmxvdyBhIHN0YWxlIGJhdGNoIG9mZnNldCBjYW4gYWxpYXMgYQorCQkgKiBjdXJyZW50bHkt bG9hZGVkIHJhbmdlIChmYWxzZSBwb3NpdGl2ZSkuICBDb25maXJtIGJ5IGNoZWNraW5nCisJCSAq IHdoZXRoZXIgdGhlIGJhdGNoIHBvaW50ZXIgaW4gbWFya1Bvcy0+YmF0Y2gncyBzbG90IHN0aWxs IG1hdGNoZXMuCisJCSAqLworCQlmcmVlTWFya0JhdGNoID0gKGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgbWFya1Bvcy0+YmF0Y2gpICE9IG1hcmtCYXRjaCk7CisJfQorCisJaWYgKGZyZWVNYXJrQmF0 Y2gpCisJeworCQkvKiBGcmVlIG1hcmtCYXRjaCwgc2luY2UgaXQgaXNuJ3QgbG9hZGVkL25lZWRl ZCBmb3IgYmF0Y2hyaW5nYnVmICovCisJCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gTlVMTDsg LyogZWxzZSBjYWxsIHdvbid0IGZyZWUgbWFya0JhdGNoICovCisJCXRhYmxlYW1fdXRpbF9mcmVl X2JhdGNoKHNjYW4sIG1hcmtCYXRjaCk7CisJfQorCisJLyogY29weSB0aGUgc2NhbidzIHBvc2l0 aW9uICovCisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zID0gKnNjYW5Qb3M7CisJYmF0Y2hyaW5nYnVm LT5tYXJrQmF0Y2ggPSBzY2FuQmF0Y2g7Cit9CisKKy8qCisgKiBSZXN0b3JlIG1hcmsgdG8gc2Nh blBvcyBwb3NpdGlvbgorICoKKyAqIFJlc3RvcmVzIHRoZSBzY2FuIHRvIGEgcG9zaXRpb24gc2F2 ZWQgYnkgaW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zIGVhcmxpZXIuCisgKiBUaGUgc2NhbidzIG1h cmtQb3MgYmVjb21lcyBpdHMgc2NhblBvcy4gIFRoZSBtYXJrZWQgYmF0Y2ggaXMgcmVzdG9yZWQg YXMKKyAqIHRoZSBjdXJyZW50IHNjYW5CYXRjaCB3aGVuIG5lZWRlZC4KKyAqCisgKiBXZSBqdXN0 IGRpc2NhcmQgYWxsIGJhdGNoZXMgKG90aGVyIHRoYW4gbWFya0JhdGNoL3Jlc3RvcmVkIHNjYW5C YXRjaCksCisgKiBleGNlcHQgd2hlbiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSB0aGUgc2NhbidzIGN1 cnJlbnQgc2NhbkJhdGNoLgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3Mo SW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0g JnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4t PmJhdGNocmluZ2J1Zi5zY2FuUG9zOworCUJhdGNoUmluZ0l0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0 Y2hyaW5nYnVmLT5tYXJrUG9zOworCUluZGV4U2NhbkJhdGNoIG1hcmtCYXRjaCA9IGJhdGNocmlu Z2J1Zi0+bWFya0JhdGNoOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5f YmF0Y2goc2Nhbiwgc2NhblBvcy0+YmF0Y2gpOworCisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuKTsK KwlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwlBc3NlcnQobWFya1Bvcy0+dmFsaWQpOwor CisJaWYgKHNjYW5CYXRjaCA9PSBtYXJrQmF0Y2gpCisJeworCQkvKiBtYXJrQmF0Y2ggaXMgYWxy ZWFkeSBzY2FuQmF0Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLworCQlBc3NlcnQo c2NhblBvcy0+YmF0Y2ggPT0gbWFya1Bvcy0+YmF0Y2gpOworCisJCXNjYW5Qb3MtPml0ZW0gPSBt YXJrUG9zLT5pdGVtOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBtYXJrQmF0Y2ggaXMgYmVo aW5kIHNjYW5CYXRjaCwgYW5kIHNvIG11c3Qgbm90IGJlIHNhdmVkIGluIHJpbmcgYnVmZmVyCisJ ICogYW55bW9yZS4gIFdlIGhhdmUgdG8gZGVhbCB3aXRoIHJlc3RvcmluZyB0aGUgbWFyayB0aGUg aGFyZCB3YXk6IGJ5CisJICogaW52YWxpZGF0aW5nIGFsbCBvdGhlciBsb2FkZWQgYmF0Y2hlcy4g IFRoaXMgaXMgc2ltaWxhciB0byB0aGUgY2FzZQorCSAqIHdoZXJlIHRoZSBzY2FuIGRpcmVjdGlv biBjaGFuZ2VzIGFuZCB0aGUgc2NhbiBhY3R1YWxseSBjcm9zc2VzCisJICogYmF0Y2gvaW5kZXgg cGFnZSBib3VuZGFyaWVzIChzZWUgdGFibGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZSkuCisJICoK KwkgKiBGaXJzdCwgZnJlZSBhbGwgYmF0Y2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB0aGUgcmluZyBi dWZmZXIuCisJICovCisJZm9yICh1aW50OCBpID0gYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2g7IGkg IT0gYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2g7IGkrKykKKwl7CisJCUluZGV4U2NhbkJhdGNoIGJh dGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBpKTsKKworCQlBc3NlcnQoYmF0Y2ggIT0gbWFy a0JhdGNoKTsKKworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBiYXRjaCk7CisJfQor CisJLyoKKwkgKiBOZXh0ICJhcHBlbmQiIHN0YW5kYWxvbmUgbWFya0JhdGNoLCB3aGljaCB3aWxs IGJlY29tZSBzY2FuQmF0Y2gKKwkgKiAoc2NhbkJhdGNoIGlzIGFsd2F5cyB0aGUgcmluZyBidWZm ZXIncyBoZWFkQmF0Y2gpCisJICovCisJbWFya1Bvcy0+YmF0Y2ggPSAwOworCWJhdGNocmluZ2J1 Zi0+c2NhblBvcyA9ICptYXJrUG9zOworCWJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoID0gYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2ggPSBtYXJrUG9zLT5iYXRjaDsKKwlpbmRleF9zY2FuX2JhdGNoX2Fw cGVuZChzY2FuLCBtYXJrQmF0Y2gpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGJh dGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCkgPT0gbWFya0JhdGNoKTsKKworCS8qCisJICogRmlu YWxseSwgY2FsbCBhbXBvc3Jlc2V0IHRvIGxldCBpbmRleCBBTSBrbm93IHRvIGludmFsaWRhdGUg YW55IHByaXZhdGUKKwkgKiBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2Fu J3MgcHJvZ3Jlc3MKKwkgKi8KKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt cG9zcmVzZXQpCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNj YW4sIG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIE5vdGU6IG1hcmtCYXRjaC5kZWFkSXRlbXNbXSBt aWdodCBhbHJlYWR5IGNvbnRhaW4gZGVhZCBpdGVtcywgYW5kIG1pZ2h0CisJICogeWV0IGhhdmUg bW9yZSBkZWFkIGl0ZW1zIHNhdmVkLiAgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2ggaXMgcHJlcGFy ZWQKKwkgKiBmb3IgdGhhdC4KKwkgKi8KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCQl1dGlsaXR5IGZ1 bmN0aW9ucyBjYWxsZWQgYnkgdGFibGUgQU1zCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIEhh bmRsZSBjcm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24KKyAqCisgKiBDYWxsZWQg YnkgdGFibGUgQU0gd2hlbiBpdHMgc2NhbiBjaGFuZ2VzIGRpcmVjdGlvbiBpbiBhIHdheSB0aGF0 CisgKiBuZWNlc3NpdGF0ZXMgYmFja2luZyB0aGUgc2NhbiB1cCB0byBhbiBpbmRleCBwYWdlIG9y aWdpbmFsbHkgYXNzb2NpYXRlZAorICogd2l0aCBhIG5vdy1mcmVlZCBiYXRjaC4KKyAqCisgKiBX aGVuIHdlIHJldHVybiwgYmF0Y2hyaW5nYnVmIHdpbGwgb25seSBjb250YWluIG9uZSBiYXRjaCAo dGhlIGN1cnJlbnQKKyAqIGhlYWRCYXRjaC9zY2FuQmF0Y2gpIGFuZCB3aWxsIGxvb2sgYXMgaWYg dGhlIG5ldyBzY2FuIGRpcmVjdGlvbiBoYWQgYmVlbgorICogdXNlZCBmcm9tIHRoZSBzdGFydC4g IENhbGxlciBjYW4gdGhlbiBzYWZlbHkgcGFzcyB0aGlzIGJhdGNoIHRvIGFtZ2V0YmF0Y2gKKyAq IHRvIGRldGVybWluZSB3aGljaCBiYXRjaCBjb21lcyBuZXh0IGluIHRoZSBuZXcgc2NhbiBkaXJl Y3Rpb24uICBUaGlzCisgKiBhcHByb2FjaCBpc24ndCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LCBi dXQgaXQgd29ya3Mgd2VsbCBlbm91Z2ggZm9yIHdoYXQKKyAqIG91Z2h0IHRvIGJlIGEgcmVsYXRp dmVseSByYXJlIG9jY3VycmVuY2UuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9iYXRjaF9kaXJj aGFuZ2UoSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5n YnVmID0gJnNjYW4tPmJhdGNocmluZ2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2g7CisK KwkvKgorCSAqIFJlbGVhc2UgYmF0Y2hlcyBzdGFydGluZyBmcm9tIHRoZSBjdXJyZW50ICJ0YWls IiBiYXRjaCwgd29ya2luZworCSAqIGJhY2t3YXJkcyB1bnRpbCB0aGUgY3VycmVudCBoZWFkIGJh dGNoICh3aGljaCBpcyBhbHNvIHRoZSBjdXJyZW50CisJICogc2NhbkJhdGNoKSBpcyB0aGUgb25s eSBiYXRjaCBoYXNuJ3QgYmVlbiBmcmVlZAorCSAqLworCXdoaWxlIChpbmRleF9zY2FuX2JhdGNo X2NvdW50KHNjYW4pID4gMSkKKwl7CisJCXVpbnQ4CQl0YWlsaWR4ID0gYmF0Y2hyaW5nYnVmLT5u ZXh0QmF0Y2ggLSAxOworCQlJbmRleFNjYW5CYXRjaCB0YWlsID0gaW5kZXhfc2Nhbl9iYXRjaChz Y2FuLCB0YWlsaWR4KTsKKworCQlBc3NlcnQodGFpbGlkeCAhPSBiYXRjaHJpbmdidWYtPnNjYW5Q b3MuYmF0Y2gpOworCisJCXRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKHNjYW4sIHRhaWwpOworCQli YXRjaHJpbmdidWYtPm5leHRCYXRjaC0tOworCX0KKworCS8qIHNjYW5CYXRjaCBpcyBub3cgdGhl IG9ubHkgYmF0Y2ggc3RpbGwgbG9hZGVkICovCisJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJh dGNoID09IGJhdGNocmluZ2J1Zi0+c2NhblBvcy5iYXRjaCk7CisJc2NhbkJhdGNoID0gaW5kZXhf c2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCk7CisKKwkvKgorCSAqIEZs aXAgc2NhbkJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24gdG8gcmVmbGVjdCB0aGUgcmV2ZXJzYWwuICBB bHNvIHJlc2V0CisJICogYW55IGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFj a3Mgc2NhbiBwcm9ncmVzcy4KKwkgKi8KKwlzY2FuQmF0Y2gtPmRpciA9IC1zY2FuQmF0Y2gtPmRp cjsKKwlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcG9zcmVzZXQpCisJCXNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KHNjYW4sIHNjYW5CYXRjaCk7 Cit9CisKKy8qCisgKiBSZWNvcmQgdGhhdCBzY2FuUG9zIGl0ZW0gaXMgZGVhZAorICoKKyAqIFJl Y29yZHMgYW4gb2Zmc2V0IHRvIHRoZSBjdXJyZW50IHNjYW5CYXRjaC9zY2FuUG9zIGl0ZW0sIHNh dmluZyBpdCBpbgorICogc2NhbkJhdGNoJ3MgZGVhZEl0ZW1zIGFycmF5LiAgVGhlIGl0ZW1zJyBp bmRleCB0dXBsZXMgd2lsbCBsYXRlciBiZQorICogbWFya2VkIExQX0RFQUQgd2hlbiBjdXJyZW50 IHNjYW5CYXRjaCBpcyBmcmVlZC4KKyAqLwordm9pZAordGFibGVhbV91dGlsX2tpbGxfc2NhbnBv c2l0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuKQoreworCUJhdGNoUmluZ0l0ZW1Qb3MgKnNjYW5Qb3Mg PSAmc2Nhbi0+YmF0Y2hyaW5nYnVmLnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNo ID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBzY2FuUG9zLT5iYXRjaCk7CisKKwlpZiAoc2NhbkJh dGNoLT5kZWFkSXRlbXMgPT0gTlVMTCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRlbXMgPSBwYWxsb2Nf YXJyYXkoaW50LCBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwlpZiAoc2NhbkJhdGNoLT5udW1EZWFk IDwgc2Nhbi0+bWF4aXRlbXNiYXRjaCkKKwkJc2NhbkJhdGNoLT5kZWFkSXRlbXNbc2NhbkJhdGNo LT5udW1EZWFkKytdID0gc2NhblBvcy0+aXRlbTsKK30KKworLyoKKyAqIFJlbGVhc2UgcmVzb3Vy Y2VzIGFzc29jaWF0ZWQgd2l0aCBhIGJhdGNoCisgKgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNJ3Mg b3JkZXJlZCBpbmRleCBzY2FuIGltcGxlbWVudGF0aW9uIHdoZW4gaXQgaXMgZmluaXNoZWQKKyAq IHdpdGggYSBiYXRjaCBhbmQgd2lzaGVzIHRvIHJlbGVhc2UgaXRzIHJlc291cmNlcy4KKyAqCisg KiBXZSBjYWxsIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJs b2NrIChlLmcuIGJ1ZmZlcgorICogcGluKSB3aGVuIGl0IGhhc24ndCBiZWVuIGRyb3BwZWQgeWV0 LiAgRm9yIHBsYWluIE1WQ0Mgc2NhbnMgKHdoZXJlCisgKiBiYXRjaEltbWVkaWF0ZVVuZ3VhcmQg aXMgc2V0KSwgdGhlIGludGVybG9jayB3YXMgYWxyZWFkeSBkcm9wcGVkIGVhZ2VybHkKKyAqIGlu IGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2ssIHNvIHdlIHNraXAgdGhlIGFtdW5ndWFyZGJhdGNo IGNhbGwgaGVyZS4KKyAqIEluZGV4LW9ubHkgc2NhbnMgbXVzdCBkZWxheSBkcm9wcGluZyB0aGUg aW50ZXJsb2NrIHVudGlsIHZpc2liaWxpdHkgaXMKKyAqIHJlc29sdmVkIGZvciBhbGwgaXRlbXMg aW4gdGhlIGJhdGNoLCBzbyBhbXVuZ3VhcmRiYXRjaCBtYXkgc3RpbGwgbmVlZCB0bworICogYWN0 IGhlcmUuICBGb3Igbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMsIHRoZSBpbnRlcmxvY2sgaXMgYWx3 YXlzIGhlbGQKKyAqIHVudGlsIGFtdW5ndWFyZGJhdGNoIGRyb3BzIGl0IGhlcmUgLS0gdGhpcyBp cyB0aGUgb25seSBwbGFjZSB3aWxsaW5nIHRvCisgKiB1bmd1YXJkIGEgbm9uLU1WQ0Mgc2Nhbidz IGJhdGNoLgorICoKKyAqIFdoZW4gdGhlIGJhdGNoIGhhcyBkZWFkIGl0ZW1zIChudW1EZWFkID4g MCkgYW5kIHRoZSBpbmRleCBBTSBwcm92aWRlcyBhbgorICogYW1raWxsaXRlbXNiYXRjaCBjYWxs YmFjaywgd2UgY2FsbCBpdCB0byBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRleAorICogcGFn ZS4gIFdlIGFsd2F5cyByZWN5Y2xlIHRoZSBiYXRjaCBtZW1vcnkgdmlhIGluZGV4YW1fdXRpbF9i YXRjaF9yZWxlYXNlLgorICoKKyAqIE5vdGU6IENhbGxpbmcgaGVyZSB3aGVuICdiYXRjaCcgaXMg YWxzbyBiYXRjaHJpbmdidWYubWFya0JhdGNoIGlzIGEgbm8tb3AuCisgKiBDYWxsZXJzIHRoYXQg ZG9uJ3Qgd2FudCB0aGlzIHNob3VsZCBzZXQgYmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCB0byBOVUxM CisgKiBiZWZvcmUgY2FsbGluZyB1cy4gIE5vdGUgdGhhdCBtYXJrQmF0Y2ggaGFzIHRvIGJlIGV4 cGxpY2l0bHkgZnJlZWQuCisgKi8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9mcmVlX2JhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJLyogZG9uJ3QgZnJlZSBj YWxsZXIncyBiYXRjaCBpZiBpdCBpcyBzY2FuJ3MgY3VycmVudCBtYXJrQmF0Y2ggKi8KKwlpZiAo YmF0Y2ggPT0gc2Nhbi0+YmF0Y2hyaW5nYnVmLm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJLyog RHJvcCBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoZS5nLiwgYnVmZmVyIHBpbikgdmlhIGFtdW5n dWFyZGJhdGNoICovCisJaWYgKCFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpCisJCXRhYmxl YW1fdXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKworCS8qCisJICogTGV0IHRoZSBp bmRleCBBTSBzZXQgTFBfREVBRCBiaXRzIGluIHRoZSBpbmRleCBwYWdlLCBpZiBhcHBsaWNhYmxl LgorCSAqCisJICogYmF0Y2guZGVhZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVyIHRo ZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgorCSAqIFdlIG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0 aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAqIFNvcnQgYW5kIHVuaXF1ZS1pZnkgZGVh ZEl0ZW1zW10uICBUaGF0IHdheSB0aGUgaW5kZXggQU0gY2FuIHNhZmVseQorCSAqIGFzc3VtZSB0 aGF0IGl0ZW1zIHdpbGwgYWx3YXlzIGJlIGluIHRoZWlyIG9yaWdpbmFsIGluZGV4IHBhZ2Ugb3Jk ZXIuCisJICovCisJaWYgKGJhdGNoLT5udW1EZWFkID4gMCAmJgorCQlzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaCAhPSBOVUxMKQorCXsKKwkJaWYgKGJhdGNo LT5udW1EZWFkID4gMSkKKwkJeworCQkJcXNvcnQoYmF0Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51 bURlYWQsIHNpemVvZihpbnQpLAorCQkJCSAgYmF0Y2hfY29tcGFyZV9pbnQpOworCQkJYmF0Y2gt Pm51bURlYWQgPSBxdW5pcXVlKGJhdGNoLT5kZWFkSXRlbXMsIGJhdGNoLT5udW1EZWFkLAorCQkJ CQkJCQkJIHNpemVvZihpbnQpLCBiYXRjaF9jb21wYXJlX2ludCk7CisJCX0KKworCQlzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1raWxsaXRlbXNiYXRjaChzY2FuLCBiYXRjaCk7CisJ fQorCisJLyoKKwkgKiBVc2UgY2FjaGUsIGp1c3QgbGlrZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZSBkb2VzIGl0ICh1bmxlc3Mgc2NhbiBpcworCSAqIHNodXR0aW5nIGRvd24pCisJICovCisJ aWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhf U0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRjaGNhY2hlW2ld ID09IE5VTEwpCisJCQl7CisJCQkJLyogZm91bmQgZW1wdHkgc2xvdCwgd2UncmUgZG9uZSAqLwor CQkJCXNjYW4tPmJhdGNoY2FjaGVbaV0gPSBiYXRjaDsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0K Kwl9CisKKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7 CisJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShiYXRjaCwgc2NhbikpOworfQorCisvKgorICogRHJv cCB0aGUgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayB2aWEgYW11bmd1YXJkYmF0Y2gK KyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3Agd2hh dGV2ZXIgaW50ZXJsb2NrIHRoZSBpbmRleAorICogQU0gaG9sZHMgdG8gcHJldmVudCB1bnNhZmUg Y29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodHlwaWNhbGx5IGEKKyAqIGJ1ZmZl ciBwaW4gb24gdGhlIGJhdGNoJ3MgaW5kZXggcGFnZSBpbiBiYXRjaCdzIG9wYXF1ZSBhcmVhKS4K KyAqCisgKiBOb3RlOiBhbXVuZ3VhcmRiYXRjaCBtdXN0IGJlIGlkZW1wb3RlbnQgb24gdGhlIGlu ZGV4IEFNIHNpZGUgLS0gaXQgbWF5IGJlCisgKiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgZm9yIHRo ZSBzYW1lIGJhdGNoLCBhbmQgbXVzdCBkbyBub3RoaW5nIGlmIHRoZQorICogaW50ZXJsb2NrIGhh cyBhbHJlYWR5IGJlZW4gZHJvcHBlZC4KKyAqLwordm9pZAordGFibGVhbV91dGlsX3VuZ3VhcmRf YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBP bmx5IHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBkdXJpbmcgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCBz Y2FucyAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKworCXNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXVuZ3VhcmRiYXRjaChzY2FuLCBiYXRjaCk7Cit9 CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFtZ2V0YmF0 Y2ggaW5kZXggQU1zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBhbGxvY2F0 aW9uLCB1bmxvY2svcGluIG1hbmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2UgcmVjeWNs aW5nLiAgSW5kZXggQU1zIGltcGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCBnZW5lcmFsbHkg dXNlCisgKiB0aGVzZSByYXRoZXIgdGhhbiBtYW5hZ2luZyBidWZmZXJzIGRpcmVjdGx5LgorICog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKy8qCisgKiBVbmxvY2sgYmF0Y2gncyBpbmRleCBwYWdlIGJ1ZmZlciBs b2NrCisgKgorICogVW5sb2NrcyB0aGUgZ2l2ZW4gYnVmZmVyIGluIHByZXBhcmF0aW9uIGZvciBh bWdldGJhdGNoIHJldHVybmluZyBpdGVtcworICogc2F2ZWQgaW4gdGhhdCBiYXRjaC4gIFBlcmZv cm1zIGV4dHJhIHN0ZXBzIHJlcXVpcmVkIGJ5IGFtZ2V0YmF0Y2ggY2FsbGVycworICogaW4gcGFz c2luZy4KKyAqCisgKiBPbmx5IGNhbGwgaGVyZSB3aGVuIGEgYmF0Y2ggaGFzIG9uZSBvciBtb3Jl IG1hdGNoaW5nIGl0ZW1zIHRvIHJldHVybiB1c2luZworICogYW1nZXRiYXRjaCAob3IgZm9yIGFt Z2V0Yml0bWFwIHRvIGxvYWQgaW50byBpdHMgYml0bWFwIG9mIG1hdGNoaW5nIFRJRHMpLgorICog V2hlbiBhbiBpbmRleCBwYWdlIGhhcyBubyBtYXRjaGVzLCBpdCdzIGFsd2F5cyBzYWZlIGZvciBp bmRleCBBTXMgdG8gZHJvcAorICogYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbiBmb3IgdGhlbXNl bHZlcy4KKyAqCisgKiBOb3RlOiBJdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMgdGhhdCBp bXBsZW1lbnQgYm90aCBhbWdldGJhdGNoIGFuZAorICogYW1nZXRiaXRtYXAgdG8gY29uc2lzdGVu dGx5IHVzZSB0aGUgc2FtZSBiYXRjaCBtYW5hZ2VtZW50IGFwcHJvYWNoLCBzaW5jZQorICogdGhh dCBhdm9pZHMgaW50cm9kdWNpbmcgc3BlY2lhbCBjYXNlcyB0byBsb3dlci1sZXZlbCBjb2RlLiAg V2UgZHJvcCBib3RoCisgKiB0aGUgbG9jayBhbmQgdGhlIHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24g YmVoYWxmIG9mIGFtZ2V0Yml0bWFwIGNhbGxlcnMuCisgKgorICogRm9yIGFtZ2V0YmF0Y2ggY2Fs bGVycywgd2hlbiBiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMgc2V0IChwbGFpbiBNVkNDCisgKiBz Y2FucyksIHdlIGFsc28gcmVsZWFzZSB0aGUgcGluIGhlcmUgKHRoZSBUSUQgcmVjeWNsaW5nIGlu dGVybG9jayksIHNvCisgKiB0aGF0IG5vIGxhdGVyIGFtdW5ndWFyZGJhdGNoIGNhbGxiYWNrIHdp bGwgYmUgbmVlZGVkLiAgT3RoZXJ3aXNlIHRoZSB0YWJsZQorICogQU0gd2lsbCBjYWxsIGFtdW5n dWFyZGJhdGNoIGxhdGVyIHdoZW4gaXQncyBzYWZlIHRvIGRyb3AgdGhlIGludGVybG9jay4KKyAq CisgKiBJbmRleCBBTXMgd2hvc2UgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaXMgbm90IGp1c3Qg YSBidWZmZXIgcGluLCBvciB3aG9zZQorICogYW11bmd1YXJkYmF0Y2ggZG9lcyBub3Qgc2ltcGx5 IHJlbGVhc2UgYSBwaW4sIGFyZSBub3Qgb2JsaWdhdGVkIHRvIHVzZSB0aGlzCisgKiBmdW5jdGlv bi4gIFRoZXkgY2FuIGltcGxlbWVudCB0aGVpciBvd24gZXF1aXZhbGVudC4KKyAqLwordm9pZAor aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJh dGNoIGJhdGNoLCBCdWZmZXIgYnVmKQoreworCS8qIGJhdGNoIG11c3QgaGF2ZSBvbmUgb3IgbW9y ZSBtYXRjaGluZyBpdGVtcyByZXR1cm5lZCBieSBpbmRleCBBTSAqLworCUFzc2VydChiYXRjaC0+ Zmlyc3RJdGVtID49IDAgJiYgYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwor CisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7CisJCS8qIGFtZ2V0YmF0Y2ggKG5vdCBhbWdl dGJpdG1hcCkgY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7 CisKKwkJLyoKKwkJICogSGF2ZSB0byBzZXQgYmF0Y2gtPmxzbiBzbyB0aGF0IGFta2lsbGl0ZW1z YmF0Y2ggaGFzIGEgd2F5IHRvIGRldGVjdAorCQkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQg cmVjeWNsaW5nIGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuCisJCSAqIHBsYWNlLiAgSXQnbGwg b25seSBiZSBzYWZlIHRvIHNldCBhbnkgaW5kZXggdHVwbGUgTFBfREVBRCBiaXRzIHdoZW4KKwkJ ICogdGhlIHBhZ2UgTFNOIGhhc24ndCBhZHZhbmNlZC4KKwkJICoKKwkJICogUGxhaW4gTVZDQyBz Y2FucyAoYmF0Y2hJbW1lZGlhdGVVbmd1YXJkKSBhbHNvIHJlbGVhc2UgdGhlIHBpbiBub3csCisJ CSAqIGRyb3BwaW5nIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayBzbyB0aGF0IG5vIGFtdW5n dWFyZGJhdGNoCisJCSAqIGNhbGxiYWNrIHdpbGwgYmUgbmVlZGVkIGxhdGVyLiAgVGhlIGluZGV4 IEFNIGNhbGxlciBtdXN0IGNsZWFyIGl0cworCQkgKiBvd24gb3BhcXVlIGJ1ZiBmaWVsZCBhZnRl ciB3ZSByZXR1cm4uCisJCSAqCisJCSAqIE5vbi1pbW1lZGlhdGUtdW5ndWFyZCBzY2FucyByZXRh aW4gdGhlIHBpbjsgdGhlIHRhYmxlIEFNIHdpbGwgY2FsbAorCQkgKiBhbXVuZ3VhcmRiYXRjaCB0 byBkcm9wIHRoZSBpbnRlcmxvY2sgd2hlbiByZWFkeS4KKwkJICovCisJCWJhdGNoLT5sc24gPSBC dWZmZXJHZXRMU05BdG9taWMoYnVmKTsKKwkJaWYgKHNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFy ZCkKKwkJeworCQkJLyogZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluICovCisJCQlVbmxv Y2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBqdXN0IGRyb3Ag dGhlIGxvY2sgKGhvbGQgb24gdG8gaW50ZXJsb2NrIHBpbikgKi8KKwkJCVVubG9ja0J1ZmZlcihi dWYpOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8qIGFtZ2V0Yml0bWFwIChub3QgYW1nZXRiYXRj aCkgY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gPT0gTlVMTCk7CisKKwkJ LyogZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluICovCisJCVVubG9ja1JlbGVhc2VCdWZm ZXIoYnVmKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVz ZWQgYnkgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCBhbWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBk dXJpbmcgYW1nZXRiYXRjaAorICogYW5kIGFtZ2V0Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1 cm5zIEluZGV4U2NhbkJhdGNoIHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gt bWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUg YSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhl IGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBTZWUKKyAqIGNv bW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIEhvdXNla2Vl cGluZyBmaWVsZHMgKGJ1Ziwga25vd25FbmRCYWNrd2FyZC9Gb3J3YXJkLCBmaXJzdEl0ZW0sIGxh c3RJdGVtLAorICogbnVtRGVhZCwgZGVhZEl0ZW1zLCBjdXJyVHVwbGVzKSBhcmUgaW5pdGlhbGl6 ZWQgaGVyZS4gIFRoZSB0YWJsZSBBTSdzCisgKiBiYXRjaF9pbml0IGNhbGxiYWNrIGlzIGludm9r ZWQgaGVyZSB0byBpbml0aWFsaXplIHRoZSB0YWJsZSBBTSBvcGFxdWUgYXJlYS4KKyAqIFRoZSBp bmRleCBBTSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZpbGxpbmcgaW4gaXRzIHBlci1iYXRj aCBvcGFxdWUKKyAqIGZpZWxkcyBhbmQgdGhlIG1hdGNoaW5nIGl0ZW1zW10gYXJyYXkuCisgKgor ICogT25jZSB0aGUgYmF0Y2ggaGFzIHRoZSByZXF1aXJlZCBtYXRjaGluZyBpdGVtcywgY2FsbGVy IHNob3VsZCBnZW5lcmFsbHkKKyAqIHBhc3MgaXQgdG8gaW5kZXhhbV91dGlsX2JhdGNoX3VubG9j aywgYWhlYWQgb2YgaXQgYmVpbmcgcmV0dXJuZWQgdGhyb3VnaAorICogaW5kZXggQU0ncyBhbWdl dGJhdGNoIHJvdXRpbmUuICBJZiBpdCB0dXJucyBvdXQgdGhhdCB0aGUgYmF0Y2ggd29uJ3QgbmVl ZAorICogdG8gYmUgcmV0dXJuZWQgbGlrZSB0aGlzIChlLmcuLCBkdWUgdG8gdGhlIHNjYW4gaGF2 aW5nIG5vIG1vcmUgbWF0Y2hlcyksCisgKiBjYWxsZXIgc2hvdWxkIHBhc3MgaXRzIGVtcHR5L3Vu dXNlZCBiYXRjaCB0byBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4KKyAqLworSW5kZXhTY2Fu QmF0Y2gKK2luZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJ SW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOworCWJvb2wJCW5ld19hbGxvYyA9IGZhbHNlOwor CisJLyoKKwkgKiBMYXppbHkgY29tcHV0ZSBiYXRjaF90YWJsZV9vZmZzZXQgb24gZmlyc3QgYWxs b2NhdGlvbi4gIFRoaXMgY29tYmluZXMKKwkgKiB0aGUgdGFibGUgQU0gYW5kIGluZGV4IEFNIG9w YXF1ZSBzaXplcyBpbnRvIGEgc2luZ2xlIG9mZnNldCB0aGF0IGNhbiBiZQorCSAqIHVzZWQgdG8g ZmluZCB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEgKGFuZCB0aGUgdHJ1ZSBhbGxvY2F0aW9uIGJh c2UpCisJICogZnJvbSB0aGUgYmF0Y2ggcG9pbnRlci4KKwkgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hf dGFibGVfb2Zmc2V0ID09IDAgJiYKKwkJKHNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID4g MCB8fAorCQkgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJiBzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNo X29wYXF1ZV9zaXplID4gMCkpKQorCXsKKwkJdWludDE2CQl0YWJsZV9vcGFxdWUgPSBzY2FuLT54 c19oZWFwZmV0Y2ggPworCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA6 IDA7CisKKwkJc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0ID0gdGFibGVfb3BhcXVlICsKKwkJCXNj YW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplOworCX0KKworCS8qIEZpcnN0IGxvb2sgZm9yIGFu IGV4aXN0aW5nIGJhdGNoIGZyb20gdGhlIGNhY2hlICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmlu ZykKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBp KyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRjaGNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJ LyogUmV0dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4t PmJhdGNoY2FjaGVbaV07CisJCQkJc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9IE5VTEw7CisKKyNpZmRl ZiBCQVRDSF9DQUNIRV9ERUJVRworCQkJCXNjYW4tPmJhdGNocmluZ2J1Zi5jYWNoZUhpdHMrKzsK KyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYgKHNjYW4tPmJhdGNo Y2FjaGVbMF0gIT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFJldXNlIGNhY2hlZCBiYXRjaCBmcm9t IHByaW9yIGFtZ2V0Yml0bWFwIGl0ZXJhdGlvbi4gIFRoaXMgcGF0aCBpcworCQkgKiBoaXQgb24g ZXZlcnkgYW1nZXRiaXRtYXAgY2FsbCBoZXJlIGFmdGVyIHRoZSBzY2FuJ3MgZmlyc3QuCisJCSAq LworCQliYXRjaCA9IHNjYW4tPmJhdGNoY2FjaGVbMF07CisJCXNjYW4tPmJhdGNoY2FjaGVbMF0g PSBOVUxMOworCX0KKworCWlmICghYmF0Y2gpCisJeworCQlTaXplCQlwcmVmaXhfc3o7CisJCVNp emUJCWJhc2Vfc3o7CisJCVNpemUJCXRyYWlsaW5nX3N6OworCQlTaXplCQlhbGxvY3N6OworCQlj aGFyCSAgICpyYXc7CisKKwkJLyogQU0gb3BhcXVlIGFyZWFzIGJlZm9yZSB0aGUgYmF0Y2ggcG9p bnRlciAqLworCQlwcmVmaXhfc3ogPSBzY2FuLT5iYXRjaF90YWJsZV9vZmZzZXQ7CisKKwkJLyog SW5kZXhTY2FuQmF0Y2hEYXRhIGhlYWRlciArIGl0ZW1zW10gKi8KKwkJYmFzZV9zeiA9IG9mZnNl dG9mKEluZGV4U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCXNpemVvZihCYXRjaE1hdGNoaW5n SXRlbSkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoOworCisJCS8qCisJCSAqIFRyYWlsaW5nIGRhdGEg YWZ0ZXIgaXRlbXNbXTogdGFibGUgQU0gcGVyLWl0ZW0gZGF0YSAoZS5nLiB2aXNJbmZvKQorCQkg KiBhbmQgY3VyclR1cGxlcyBpbmRleCBBTSB0dXBsZSB3b3Jrc3BhY2UuCisJCSAqLworCQl0cmFp bGluZ19zeiA9IDA7CisJCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCWlmIChzY2Fu LT54c19oZWFwZmV0Y2ggJiYKKwkJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVt X3NpemUgPiAwKQorCQkJCXRyYWlsaW5nX3N6ICs9IE1BWEFMSUdOKHNjYW4tPnhzX2hlYXBmZXRj aC0+YmF0Y2hfcGVyX2l0ZW1fc2l6ZSAqCisJCQkJCQkJCQkJc2Nhbi0+bWF4aXRlbXNiYXRjaCk7 CisJCQl0cmFpbGluZ19zeiArPSBzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlOworCQl9CisK KwkJYWxsb2NzeiA9IHByZWZpeF9zeiArIE1BWEFMSUdOKGJhc2Vfc3opICsgdHJhaWxpbmdfc3o7 CisJCXJhdyA9IHBhbGxvYyhhbGxvY3N6KTsKKwkJYmF0Y2ggPSAoSW5kZXhTY2FuQmF0Y2gpIChy YXcgKyBwcmVmaXhfc3opOworCisJCS8qIFNldCB1cCBjdXJyVHVwbGVzIHBvaW50ZXIgZm9yIGlu ZGV4LW9ubHkgc2NhbnMgKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2FuLT5iYXRj aF90dXBsZXNfd29ya3NwYWNlID4gMCkKKwkJeworCQkJU2l6ZQkJaXRlbXNFbmQgPSBNQVhBTElH TihiYXNlX3N6KTsKKwkJCVNpemUJCXRhYmxlVHJhaWxpbmcgPSAwOworCisJCQlpZiAoc2Nhbi0+ eHNfaGVhcGZldGNoICYmCisJCQkJc2Nhbi0+eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9z aXplID4gMCkKKwkJCQl0YWJsZVRyYWlsaW5nID0gTUFYQUxJR04oc2Nhbi0+eHNfaGVhcGZldGNo LT5iYXRjaF9wZXJfaXRlbV9zaXplICoKKwkJCQkJCQkJCQkgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7 CisJCQliYXRjaC0+Y3VyclR1cGxlcyA9IChjaGFyICopIGJhdGNoICsgaXRlbXNFbmQgKyB0YWJs ZVRyYWlsaW5nOworCQl9CisJCWVsc2UKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gTlVMTDsKKwor CQkvKgorCQkgKiBCYXRjaGVzIGFsbG9jYXRlIGRlYWRJdGVtcyBsYXppbHkgKHRob3VnaCBub3Rl IHRoYXQgY2FjaGVkIGJhdGNoZXMKKwkJICoga2VlcCB0aGVpciBkZWFkSXRlbXMgYWxsb2NhdGlv biB3aGVuIHJlY3ljbGVkKQorCQkgKi8KKwkJYmF0Y2gtPmRlYWRJdGVtcyA9IE5VTEw7CisJCW5l d19hbGxvYyA9IHRydWU7CisJfQorCisJLyogeHNfd2FudF9pdHVwIHNjYW5zIG11c3QgZ2V0IGEg Y3VyclR1cGxlcyBzcGFjZSAqLworCUFzc2VydCghKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBzY2Fu LT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID4gMCAmJgorCQkJIGJhdGNoLT5jdXJyVHVwbGVzID09 IE5VTEwpKTsKKworCS8qIExldCB0aGUgdGFibGUgQU0gaW5pdGlhbGl6ZSBpdHMgcGVyLWJhdGNo IG9wYXF1ZSBhcmVhICovCisJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKKwkJdGFibGVfaW5kZXhf ZmV0Y2hfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCwgbmV3X2FsbG9jKTsKKworCS8qIHNoYXJlZCBp bml0aWFsaXphdGlvbiAqLworCWJhdGNoLT5rbm93bkVuZEJhY2t3YXJkID0gZmFsc2U7CisJYmF0 Y2gtPmtub3duRW5kRm9yd2FyZCA9IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwli YXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0 Y2g7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVu Y3Rpb24gaXMgY2FsbGVkIGJ5IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVk IGJ5CisgKiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVy ZSBmb3IgcmV1c2UgdG8gcmVkdWNlCisgKiBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICog SXQncyBzYWZlIHRvIHJlbGVhc2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2Vk IHRvIHJlYWQgYSBwYWdlCisgKiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4u ICBCYXRjaGVzIGFjdHVhbGx5IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2gg cm91dGluZSAoaS5lLiBiYXRjaGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMp CisgKiBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoLCB3aGljaCBj YWxscyBoZXJlIGFmdGVyIHRoZQorICogaW5kZXggQU0ncyBhbWtpbGxpdGVtc2JhdGNoIHJvdXRp bmUgKGlmIGFueSkuICBJbmRleCBBTXMgdGhhdCB1c2UgYmF0Y2hlcworICogc2hvdWxkIGNhbGwg aGVyZSB0byByZWxlYXNlIGEgYmF0Y2ggZnJvbSB0aGVpciBhbWdldGJhdGNoIG9yIGFtZ2V0Yml0 bWFwCisgKiByb3V0aW5lcy4KKyAqCisgKiBUaGUgcnVsZXMgZm9yIGJhdGNoIG93bmVyc2hpcCBk aWZmZXIgc2xpZ2h0bHkgZm9yIGFtZ2V0Yml0bWFwIHNjYW5zOyBzZWUKKyAqIHRoZSBhbWdldGJp dG1hcCBkb2N1bWVudGF0aW9uIGluIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgZm9yIGRldGFp bHMuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcp CisJeworCQkvKgorCQkgKiBhbWdldGJpdG1hcCBzY2FuIGNhbGxlci4KKwkJICoKKwkJICogYW1n ZXRiaXRtYXAgcm91dGluZXMgYXJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5vIG1vcmUgdGhhbiBv bmUKKwkJICogYmF0Y2ggYXQgYSB0aW1lLCBzbyB3ZSdsbCBhbHdheXMgaGF2ZSBhIGZyZWUgc2xv dC4KKwkJICovCisJCUFzc2VydChzY2FuLT5iYXRjaGNhY2hlWzBdID09IE5VTEwpOworCQlBc3Nl cnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmRlYWRJdGVt cyA9PSBOVUxMKTsKKwkJQXNzZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCisJCXNj YW4tPmJhdGNoY2FjaGVbMF0gPSBiYXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8qIGFtZ2V0YmF0 Y2ggc2NhbiBjYWxsZXIgKi8KKwlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwor CisJLyoKKwkgKiBUcnkgdG8gc3RvcmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNo IHNjYW4ncyBjYWNoZSBvZgorCSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdAor CSAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKysp CisJeworCQlpZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9PSBOVUxMKQorCQl7CisJCQkvKiBmb3Vu ZCBlbXB0eSBzbG90LCB3ZSdyZSBkb25lICovCisJCQlzY2FuLT5iYXRjaGNhY2hlW2ldID0gYmF0 Y2g7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIEZhaWxlZCB0byBmaW5kIGEgZnJl ZSBzbG90IGZvciB0aGlzIGJhdGNoLiAgV2UnbGwganVzdCBmcmVlIGl0CisJICogb3Vyc2VsdmVz LgorCSAqLworCWlmIChiYXRjaC0+ZGVhZEl0ZW1zKQorCQlwZnJlZShiYXRjaC0+ZGVhZEl0ZW1z KTsKKwlwZnJlZShiYXRjaF9hbGxvY19iYXNlKGJhdGNoLCBzY2FuKSk7Cit9CisKKy8qCisgKiBx c29ydCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBpbnQgYXJyYXlzCisgKi8KK3N0YXRpYyBpbnQK K2JhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKK3sKKwlp bnQJCQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKKwlpbnQJCQliID0gKigoY29uc3QgaW50ICop IHZiKTsKKworCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4 L21lc29uLmJ1aWxkCmluZGV4IGRhNjRjYjU5NS4uODNkZmEzZjJiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L21lc29uLmJ1aWxkCkBAIC01LDQgKzUsNSBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmls ZXMoCiAgICdhbXZhbGlkYXRlLmMnLAogICAnZ2VuYW0uYycsCiAgICdpbmRleGFtLmMnLAorICAn aW5kZXhiYXRjaC5jJywKICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUKaW5kZXggY2I5MjFjYTJl Li5hMzc4NjliNzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1F CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvUkVBRE1FCkBAIC0xNzksMTggKzE3OSwx NSBAQCBob2xkIG9uIHRvIHRoZSBwaW4gKHVzZWQgd2hlbiByZWFkaW5nIGZyb20gdGhlIGxlYWYg cGFnZSkgdW50aWwgX2FmdGVyXwogdGhleSdyZSBkb25lIHZpc2l0aW5nIHRoZSBoZWFwIChmb3Ig VElEcyBmcm9tIHBpbm5lZCBsZWFmIHBhZ2UpIHByZXZlbnRzCiBjb25jdXJyZW50IFRJRCByZWN5 Y2xpbmcuICBWQUNVVU0gY2Fubm90IGdldCBhIGNvbmZsaWN0aW5nIGNsZWFudXAgbG9jawogdW50 aWwgdGhlIGluZGV4IHNjYW4gaXMgdG90YWxseSBmaW5pc2hlZCBwcm9jZXNzaW5nIGl0cyBsZWFm IHBhZ2UuCitUaGlzIGlzIHJlcXVpcmVkIGJ5IGFueSBpbmRleCBBTSB0aGF0IGltcGxlbWVudHMg dGhlIGFtZ2V0YmF0Y2gKK2ludGVyZmFjZS4gIChTZWUgYWxzbywgZG9jL3NyYy9zZ21sL2luZGV4 YW0uc2dtbCkuCiAKLVRoaXMgYXBwcm9hY2ggaXMgZmFpcmx5IGNvYXJzZSwgc28gd2UgYXZvaWQg aXQgd2hlbmV2ZXIgcG9zc2libGUuICBJbgotcHJhY3RpY2UgbW9zdCBpbmRleCBzY2FucyB3b24n dCBob2xkIG9udG8gdGhlaXIgcGluLCBhbmQgc28gd29uJ3QgYmxvY2sKLVZBQ1VVTS4gIFRoZXNl IGluZGV4IHNjYW5zIG11c3QgZGVhbCB3aXRoIFRJRCByZWN5Y2xpbmcgZGlyZWN0bHksIHdoaWNo IGlzCi1tb3JlIGNvbXBsaWNhdGVkIGFuZCBub3QgYWx3YXlzIHBvc3NpYmxlLiAgU2VlIGxhdGVy IHNlY3Rpb24gb24gbWFraW5nCi1jb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQotT3Bw b3J0dW5pc3RpYyBpbmRleCB0dXBsZSBkZWxldGlvbiBwZXJmb3JtcyBhbG1vc3QgdGhlIHNhbWUg cGFnZS1sZXZlbAotbW9kaWZpY2F0aW9ucyB3aGlsZSBvbmx5IGhvbGRpbmcgYW4gZXhjbHVzaXZl IGxvY2suICBUaGlzIGlzIHNhZmUgYmVjYXVzZQotdGhlcmUgaXMgbm8gcXVlc3Rpb24gb2YgVElE IHJlY3ljbGluZyB0YWtpbmcgcGxhY2UgbGF0ZXIgb24gLS0gb25seSBWQUNVVU0KLWNhbiBtYWtl IFRJRHMgcmVjeWNsYWJsZS4gIFNlZSBhbHNvIHNpbXBsZSBkZWxldGlvbiBhbmQgYm90dG9tLXVw Ci1kZWxldGlvbiwgYmVsb3cuCitPcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBl cmZvcm1zIHRoZSBzYW1lIHBhZ2UtbGV2ZWwKK21vZGlmaWNhdGlvbnMgYXMgVkFDVVVNLCB3aGls ZSBvbmx5IGhvbGRpbmcgYW4gZXhjbHVzaXZlIGxvY2suICBUaGlzIGlzCitzYWZlIGJlY2F1c2Ug dGhlcmUgaXMgbm8gcXVlc3Rpb24gb2YgVElEIHJlY3ljbGluZyB0YWtpbmcgcGxhY2UgLS0gb25s eQorVkFDVVVNIGNhbiBtYWtlIFRJRHMgcmVjeWNsYWJsZS4gIEluIG90aGVyIHdvcmRzLCBWQUNV VU0ncyBjbGVhbnVwIGxvY2sKK3NlcnZlcyB0byBwcm90ZWN0IG5vbi1NVkNDIHNuYXBzaG90IHNj YW5zIGZyb20gY29uY3VycmVudCBUSUQgcmVjeWNsaW5nCitoYXphcmRzOyBpdCBkb2Vzbid0IHBy b3RlY3QgdGhlIEItVHJlZSBzdHJ1Y3R1cmUgaXRzZWxmLgogCiBCZWNhdXNlIGEgcGluIGlzIG5v dCBhbHdheXMgaGVsZCwgYW5kIGEgcGFnZSBjYW4gYmUgc3BsaXQgZXZlbiB3aGlsZQogc29tZW9u ZSBkb2VzIGhvbGQgYSBwaW4gb24gaXQsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYW4gaW5kZXhzY2Fu IHdpbGwKQEAgLTQ0MCw1NCArNDM3LDYgQEAgd2hlbmV2ZXIgaXQgaXMgc3Vic2VxdWVudGx5IHRh a2VuIGZyb20gdGhlIEZTTSBmb3IgcmV1c2UuICBUaGUgZGVsZXRlZAogcGFnZSdzIGNvbnRlbnRz IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIHNwbGl0IG9wZXJhdGlvbiAoaXQgd2lsbCBiZWNv bWUKIHRoZSBuZXcgcmlnaHQgc2libGluZyBwYWdlKS4KIAotTWFraW5nIGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyBzYWZlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot QXMgZXhwbGFpbmVkIGluIHRoZSBlYXJsaWVyIHNlY3Rpb24gYWJvdXQgZGVsZXRpbmcgaW5kZXgg dHVwbGVzIGR1cmluZwotVkFDVVVNLCB3ZSBpbXBsZW1lbnQgYSBsb2NraW5nIHByb3RvY29sIHRo YXQgYWxsb3dzIGluZGl2aWR1YWwgaW5kZXggc2NhbnMKLXRvIGF2b2lkIGNvbmN1cnJlbnQgVElE IHJlY3ljbGluZy4gIEluZGV4IHNjYW5zIG9wdC1vdXQgKGFuZCBzbyBkcm9wIHRoZWlyCi1sZWFm IHBhZ2UgcGluIHdoZW4gdmlzaXRpbmcgdGhlIGhlYXApIHdoZW5ldmVyIGl0J3Mgc2FmZSB0byBk byBzbywgdGhvdWdoLgotRHJvcHBpbmcgdGhlIHBpbiBlYXJseSBpcyB1c2VmdWwgYmVjYXVzZSBp dCBhdm9pZHMgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkKLVZBQ1VVTS4gIFRoaXMgaXMgcGFydGljdWxh cmx5IGltcG9ydGFudCB3aXRoIGluZGV4IHNjYW5zIHVzZWQgYnkgY3Vyc29ycywKLXNpbmNlIGlk bGUgY3Vyc29ycyBzb21ldGltZXMgc3RvcCBmb3IgcmVsYXRpdmVseSBsb25nIHBlcmlvZHMgb2Yg dGltZS4gIEluCi1leHRyZW1lIGNhc2VzLCBhIGNsaWVudCBhcHBsaWNhdGlvbiBtYXkgaG9sZCBv biB0byBhbiBpZGxlIGN1cnNvcnMgZm9yCi1ob3VycyBvciBldmVuIGRheXMuICBCbG9ja2luZyBW QUNVVU0gZm9yIHRoYXQgbG9uZyBjb3VsZCBiZSBkaXNhc3Ryb3VzLgotCi1JbmRleCBzY2FucyB0 aGF0IGRvbid0IGhvbGQgb24gdG8gYSBidWZmZXIgcGluIGFyZSBwcm90ZWN0ZWQgYnkgaG9sZGlu ZyBhbgotTVZDQyBzbmFwc2hvdCBpbnN0ZWFkLiAgVGhpcyBtb3JlIGxpbWl0ZWQgaW50ZXJsb2Nr IHByZXZlbnRzIHdyb25nIGFuc3dlcnMKLXRvIHF1ZXJpZXMsIGJ1dCBpdCBkb2VzIG5vdCBwcmV2 ZW50IGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyBpdHNlbGYgKG9ubHkKLWhvbGRpbmcgb250byB0 aGUgbGVhZiBwYWdlIHBpbiB3aGlsZSBhY2Nlc3NpbmcgdGhlIGhlYXAgZW5zdXJlcyB0aGF0KS4K LQotSW5kZXgtb25seSBzY2FucyBjYW4gbmV2ZXIgZHJvcCB0aGVpciBidWZmZXIgcGluLCBzaW5j ZSB0aGV5IGFyZSB1bmFibGUgdG8KLXRvbGVyYXRlIGhhdmluZyBhIHJlZmVyZW5jZWQgVElEIGJl Y29tZSByZWN5Y2xhYmxlLiAgSW5kZXgtb25seSBzY2FucwotdHlwaWNhbGx5IGp1c3QgdmlzaXQg dGhlIHZpc2liaWxpdHkgbWFwIChub3QgdGhlIGhlYXAgcHJvcGVyKSwgYW5kIHNvIHdpbGwKLW5v dCByZWxpYWJseSBub3RpY2UgdGhhdCBhbnkgc3RhbGUgVElEIHJlZmVyZW5jZSAoZm9yIGEgVElE IHRoYXQgcG9pbnRlZAotdG8gYSBkZWFkLXRvLWFsbCBoZWFwIGl0ZW0gYXQgZmlyc3QpIHdhcyBj b25jdXJyZW50bHkgbWFya2VkIExQX1VOVVNFRCBpbgotdGhlIGhlYXAgYnkgVkFDVVVNLiAgVGhp cyBjb3VsZCBlYXNpbHkgYWxsb3cgVkFDVVVNIHRvIHNldCB0aGUgd2hvbGUgaGVhcAotcGFnZSB0 byBhbGwtdmlzaWJsZSBpbiB0aGUgdmlzaWJpbGl0eSBtYXAgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJk cy4gIEFuIE1WQ0MKLXNuYXBzaG90IGlzIG9ubHkgc3VmZmljaWVudCB0byBhdm9pZCBwcm9ibGVt cyBkdXJpbmcgcGxhaW4gaW5kZXggc2NhbnMKLWJlY2F1c2UgdGhleSBtdXN0IGFjY2VzcyBncmFu dWxhciB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYXAKLXByb3Blci4gIEEgcGxh aW4gaW5kZXggc2NhbiB3aWxsIGV2ZW4gcmVjb2duaXplIExQX1VOVVNFRCBpdGVtcyBpbiB0aGUK LWhlYXAgKGl0ZW1zIHRoYXQgY291bGQgYmUgcmVjeWNsZWQgYnV0IGhhdmVuJ3QgYmVlbiBqdXN0 IHlldCkgYXMgIm5vdAotdmlzaWJsZSIgLS0gZXZlbiB3aGVuIHRoZSBoZWFwIHBhZ2UgaXMgZ2Vu ZXJhbGx5IGNvbnNpZGVyZWQgYWxsLXZpc2libGUuCi0KLUxQX0RFQUQgc2V0dGluZyBvZiBpbmRl eCB0dXBsZXMgYnkgdGhlIGtpbGxfcHJpb3JfdHVwbGUgb3B0aW1pemF0aW9uCi0oZGVzY3JpYmVk IGluIGZ1bGwgaW4gc2ltcGxlIGRlbGV0aW9uLCBiZWxvdykgaXMgYWxzbyBtb3JlIGNvbXBsaWNh dGVkIGZvcgotaW5kZXggc2NhbnMgdGhhdCBkcm9wIHRoZWlyIGxlYWYgcGFnZSBwaW5zLiAgV2Ug bXVzdCBiZSBjYXJlZnVsIHRvIGF2b2lkCi1MUF9ERUFELW1hcmtpbmcgYW55IG5ldyBpbmRleCB0 dXBsZSB0aGF0IGxvb2tzIGxpa2UgYSBrbm93bi1kZWFkIGluZGV4Ci10dXBsZSBiZWNhdXNlIGl0 IGhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgVElELCBmb2xsb3dpbmcgY29uY3VycmVudCBUSUQK LXJlY3ljbGluZy4gIEl0J3MganVzdCBhYm91dCBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgc2Vz c2lvbiBpbnNlcnRlZCBhCi1uZXcsIHVucmVsYXRlZCBpbmRleCB0dXBsZSwgb24gdGhlIHNhbWUg bGVhZiBwYWdlLCB3aGljaCBoYXMgdGhlIHNhbWUKLW9yaWdpbmFsIFRJRC4gIEl0IHdvdWxkIGJl IHRvdGFsbHkgd3JvbmcgdG8gTFBfREVBRC1zZXQgdGhpcyBuZXcsCi11bnJlbGF0ZWQgaW5kZXgg dHVwbGUuCi0KLVdlIGhhbmRsZSB0aGlzIGtpbGxfcHJpb3JfdHVwbGUgcmFjZSBjb25kaXRpb24g YnkgaGF2aW5nIGFmZmVjdGVkIGluZGV4Ci1zY2FucyBjb25zZXJ2YXRpdmVseSBhc3N1bWUgdGhh dCBhbnkgY2hhbmdlIHRvIHRoZSBsZWFmIHBhZ2UgYXQgYWxsCi1pbXBsaWVzIHRoYXQgaXQgd2Fz IHJlYWNoZWQgYnkgYnRidWxrZGVsZXRlIGluIHRoZSBpbnRlcmltIHBlcmlvZCB3aGVuIG5vCi1i dWZmZXIgcGluIHdhcyBoZWxkLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBub3Qgc2V0dGluZyBh bnkgTFBfREVBRCBiaXRzCi1vbiB0aGUgbGVhZiBwYWdlIGF0IGFsbCB3aGVuIHRoZSBwYWdlJ3Mg TFNOIGhhcyBjaGFuZ2VkLiAgKFRoaXMgaXMgd2h5IHdlCi1pbXBsZW1lbnQgImZha2UiIExTTnMg Zm9yIHVubG9nZ2VkIGluZGV4IHJlbGF0aW9ucy4pCi0KIEZhc3RwYXRoIEZvciBJbmRleCBJbnNl cnRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzM0LDcgKzY4Myw3IEBA IG9mIHJlYWRlcnMgY291bGQgc3RpbGwgbW92ZSByaWdodCB0byByZWNvdmVyIGlmIHdlIGRpZG4n dCBjb3VwbGUKIHNhbWUtbGV2ZWwgbG9ja3MpLCBidXQgd2UgcHJlZmVyIHRvIGJlIGNvbnNlcnZh dGl2ZSBoZXJlLgogCiBEdXJpbmcgcmVjb3ZlcnkgYWxsIGluZGV4IHNjYW5zIHN0YXJ0IHdpdGgg aWdub3JlX2tpbGxlZF90dXBsZXMgPSBmYWxzZQotYW5kIHdlIG5ldmVyIHNldCBraWxsX3ByaW9y X3R1cGxlLiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCithbmQgd2UgbmV2ZXIg TFBfREVBRC1tYXJrIHR1cGxlcy4gV2UgZG8gdGhpcyBiZWNhdXNlIHRoZSBvbGRlc3QgeG1pbgog b24gdGhlIHN0YW5kYnkgc2VydmVyIGNhbiBiZSBvbGRlciB0aGFuIHRoZSBvbGRlc3QgeG1pbiBv biB0aGUgcHJpbWFyeQogc2VydmVyLCB3aGljaCBtZWFucyB0dXBsZXMgY2FuIGJlIG1hcmtlZCBM UF9ERUFEIGV2ZW4gd2hlbiB0aGV5IGFyZQogc3RpbGwgdmlzaWJsZSBvbiB0aGUgc3RhbmRieS4g V2UgZG9uJ3QgV0FMIGxvZyB0dXBsZSBMUF9ERUFEIGJpdHMsIGJ1dApAQCAtNzU2LDkgKzcwNSw4 IEBAIG5vbi1NVkNDIHNjYW5zIGlzIG5vdCByZXF1aXJlZCBvbiBzdGFuZGJ5IG5vZGVzLiBXZSBz dGlsbCBnZXQgYSBmdWxsCiBjbGVhbnVwIGxvY2sgd2hlbiByZXBsYXlpbmcgVkFDVVVNIHJlY29y ZHMgZHVyaW5nIHJlY292ZXJ5LCBidXQgcmVjb3ZlcnkKIGRvZXMgbm90IG5lZWQgdG8gbG9jayBl dmVyeSBsZWFmIHBhZ2UgKG9ubHkgdGhvc2UgbGVhZiBwYWdlcyB0aGF0IGhhdmUKIGl0ZW1zIHRv IGRlbGV0ZSkgLS0gdGhhdCdzIHN1ZmZpY2llbnQgdG8gYXZvaWQgYnJlYWtpbmcgaW5kZXgtb25s eSBzY2FucwotZHVyaW5nIHJlY292ZXJ5IChzZWUgc2VjdGlvbiBhYm92ZSBhYm91dCBtYWtpbmcg VElEIHJlY3ljbGluZyBzYWZlKS4gVGhhdAotbGVhdmVzIGNvbmNlcm4gb25seSBmb3IgcGxhaW4g aW5kZXggc2NhbnMuIChYWFg6IE5vdCBhY3R1YWxseSBjbGVhciB3aHkKLXRoaXMgaXMgdG90YWxs eSB1bm5lY2Vzc2FyeSBkdXJpbmcgcmVjb3ZlcnkuKQorZHVyaW5nIHJlY292ZXJ5LiBUaGF0IGxl YXZlcyBjb25jZXJuIG9ubHkgZm9yIHBsYWluIGluZGV4IHNjYW5zLgorKFhYWDogTm90IGFjdHVh bGx5IGNsZWFyIHdoeSB0aGlzIGlzIHRvdGFsbHkgdW5uZWNlc3NhcnkgZHVyaW5nIHJlY292ZXJ5 LikKIAogTVZDQyBzbmFwc2hvdCBwbGFpbiBpbmRleCBzY2FucyBhcmUgYWx3YXlzIHNhZmUsIGZv ciB0aGUgc2FtZSByZWFzb25zIHRoYXQKIHRoZXkncmUgc2FmZSBkdXJpbmcgb3JpZ2luYWwgZXhl Y3V0aW9uLiAgSGVhcFR1cGxlU2F0aXNmaWVzVG9hc3QoKSBkb2Vzbid0CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cGFnZS5jCmluZGV4IGNjOWM0NWRjNC4uYzRmZjZkZTJiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvbmJ0cmVlL25idHBhZ2UuYwpAQCAtMTAzNyw2ICsxMDM3LDkgQEAgX2J0X3JlbGJ1ZihSZWxh dGlvbiByZWwsIEJ1ZmZlciBidWYpCiAgKiBMb2NrIGlzIGFjcXVpcmVkIHdpdGhvdXQgYWNxdWly aW5nIGFub3RoZXIgcGluLiAgVGhpcyBpcyBsaWtlIGEgcmF3CiAgKiBMb2NrQnVmZmVyKCkgY2Fs bCwgYnV0IHBlcmZvcm1zIGV4dHJhIHN0ZXBzIG5lZWRlZCBieSBWYWxncmluZC4KICAqCisgKiBO b3RlOiBfYnRfYmF0Y2hfdW5sb2NrIGluIG5idHNlYXJjaC5jIChpbmRleGFtX3V0aWxfYmF0Y2hf dW5sb2NrIHdyYXBwZXIKKyAqIGZ1bmN0aW9uKSBoYXMgbWF0Y2hpbmcgVmFsZ3JpbmQgYnVmZmVy IGxvY2sgaW5zdHJ1bWVudGF0aW9uLgorICoKICAqIE5vdGU6IENhbGxlciBtYXkgbmVlZCB0byBj YWxsIF9idF9jaGVja3BhZ2UoKSB3aXRoIGJ1ZiB3aGVuIHBpbiBvbiBidWYKICAqIHdhc24ndCBv cmlnaW5hbGx5IGFjcXVpcmVkIGluIF9idF9nZXRidWYoKSBvciBfYnRfcmVsYW5kZ2V0YnVmKCku CiAgKi8KQEAgLTEwNzgsMTMgKzEwODEsMTkgQEAgX2J0X3VubG9ja2J1ZihSZWxhdGlvbiByZWws IEJ1ZmZlciBidWYpCiAJICogQnVmZmVyIGlzIHBpbm5lZCBhbmQgbG9ja2VkLCB3aGljaCBtZWFu cyB0aGF0IGl0IGlzIGV4cGVjdGVkIHRvIGJlCiAJICogZGVmaW5lZCBhbmQgYWRkcmVzc2FibGUu ICBDaGVjayB0aGF0IHByb2FjdGl2ZWx5LgogCSAqLwotCVZBTEdSSU5EX0NIRUNLX01FTV9JU19E RUZJTkVEKEJ1ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKyNpZiBkZWZpbmVkKFVTRV9WQUxH UklORCkKKwlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCisJVkFMR1JJTkRfQ0hF Q0tfTUVNX0lTX0RFRklORUQocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogCiAJLyogTG9ja0J1ZmZl cigpIGFzc2VydHMgdGhhdCBwaW4gaXMgaGVsZCBieSB0aGlzIGJhY2tlbmQgKi8KIAlMb2NrQnVm ZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKIAorI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5E KQogCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCi0JCVZBTEdSSU5EX01BS0Vf TUVNX05PQUNDRVNTKEJ1ZmZlckdldFBhZ2UoYnVmKSwgQkxDS1NaKTsKKwkJVkFMR1JJTkRfTUFL RV9NRU1fTk9BQ0NFU1MocGFnZSwgQkxDS1NaKTsKKyNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCmluZGV4IDJiYTFjYTY2MC4uMzljNjYxNDk4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5jCkBAIC0zMiw2ICszMiw3IEBA IHR5cGVkZWYgc3RydWN0IEJUUmVhZFBhZ2VTdGF0ZQogewogCS8qIElucHV0IHBhcmFtZXRlcnMs IHNldCBieSBfYnRfcmVhZHBhZ2UgZm9yIF9idF9jaGVja2tleXMgKi8KIAlTY2FuRGlyZWN0aW9u IGRpcjsJCQkvKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uICovCisJQmxvY2tOdW1iZXIgY3VycnBh Z2U7CQkvKiBjdXJyZW50IHBhZ2UgYmVpbmcgcmVhZCAqLwogCU9mZnNldE51bWJlciBtaW5vZmY7 CQkvKiBMb3dlc3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJT2Zmc2V0TnVtYmVyIG1h eG9mZjsJCS8qIEhpZ2hlc3Qgbm9uLXBpdm90IHR1cGxlJ3Mgb2Zmc2V0ICovCiAJSW5kZXhUdXBs ZQlmaW5hbHR1cDsJCS8qIE5lZWRlZCBieSBzY2FucyB3aXRoIGFycmF5IGtleXMgKi8KQEAgLTYz LDE0ICs2NCwxMyBAQCBzdGF0aWMgYm9vbCBfYnRfc2NhbmJlaGluZF9jaGVja2tleXMoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwKIAkJCQkJCQkJCSBJbmRleFR1cGxlIGZp bmFsdHVwKTsKIHN0YXRpYyBib29sIF9idF9vcHBvZGlyX2NoZWNra2V5cyhJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCQkJCQkJCQkgIEluZGV4VHVwbGUgZmluYWx0dXAp Owotc3RhdGljIHZvaWQgX2J0X3NhdmVpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRl eCwKLQkJCQkJCSBPZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwotc3RhdGlj IGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4 LAotCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq aGVhcFRpZCwKLQkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlubGluZSB2b2lk IF9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJ CQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhl YXBUaWQsIGludCB0dXBsZU9mZnNldCk7CitzdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oSW5kZXhT Y2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJ CQkJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbnQJX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4 LAorCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq dGFibGVUaWQsCisJCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsK K3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4U2NhbkJhdGNoIG5l d2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQkJCQkJICAg SXRlbVBvaW50ZXIgdGFibGVUaWQsIGludCBiYXNlT2Zmc2V0KTsKIHN0YXRpYyBib29sIF9idF9j aGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBCVFJlYWRQYWdlU3RhdGUgKnBzdGF0ZSwgYm9v bCBhcnJheUtleXMsCiAJCQkJCQkgIEluZGV4VHVwbGUgdHVwbGUsIGludCB0dXBuYXR0cyk7CiBz dGF0aWMgYm9vbCBfYnRfY2hlY2tfY29tcGFyZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyLApAQCAtMTExLDE1ICsxMTEsMTUgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9r ZXlzX3dpdGhfYXJyYXlrZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAKIAogLyoKLSAqCV9idF9y ZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIHNvLT5j dXJyUG9zCisgKglfYnRfcmVhZHBhZ2UoKSAtLSBMb2FkIGRhdGEgZnJvbSBjdXJyZW50IGluZGV4 IHBhZ2UgaW50byBuZXdiYXRjaC4KICAqCi0gKiBDYWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQg cmVhZC1sb2NrZWQgc28tPmN1cnJQb3MuYnVmOyB0aGUgYnVmZmVyJ3Mgc3RhdGUKLSAqIGlzIG5v dCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBjdXJyUG9zLm1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVz dCBiZSB2YWxpZDsKLSAqIHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3Ro ZXIgZmllbGRzIG9mIHNvLT5jdXJyUG9zIGFyZQorICogQ2FsbGVyIG11c3QgaGF2ZSBwaW5uZWQg YW5kIHJlYWQtbG9ja2VkIG5ld2JhdGNoLmJ1ZjsgdGhlIGJ1ZmZlcidzIHN0YXRlIGlzCisgKiBu b3QgY2hhbmdlZCBoZXJlLiAgQWxzbywgbmV3YmF0Y2gncyBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0 IG11c3QgYmUgdmFsaWQ7CisgKiB0aGV5IGFyZSB1cGRhdGVkIGFzIGFwcHJvcHJpYXRlLiAgQWxs IG90aGVyIGZpZWxkcyBvZiBuZXdiYXRjaCBhcmUKICAqIGluaXRpYWxpemVkIGZyb20gc2NyYXRj aCBoZXJlLgogICoKICAqIFdlIHNjYW4gdGhlIGN1cnJlbnQgcGFnZSBzdGFydGluZyBhdCBvZmZu dW0gYW5kIG1vdmluZyBpbiB0aGUgaW5kaWNhdGVkCi0gKiBkaXJlY3Rpb24uICBBbGwgaXRlbXMg bWF0Y2hpbmcgdGhlIHNjYW4ga2V5cyBhcmUgbG9hZGVkIGludG8gY3VyclBvcy5pdGVtcy4KKyAq IGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBzYXZlZCBp biBuZXdiYXRjaC5pdGVtcy4KICAqIG1vcmVMZWZ0IG9yIG1vcmVSaWdodCAoYXMgYXBwcm9wcmlh dGUpIGlzIGNsZWFyZWQgaWYgX2J0X2NoZWNra2V5cyByZXBvcnRzCiAgKiB0aGF0IHRoZXJlIGNh biBiZSBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlv bgogICogKGNvdWxkIGp1c3QgYmUgZm9yIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2Fu IHdoZW4gc2NhbiBoYXMgYXJyYXlzKS4KQEAgLTEzMSwxMSArMTMxLDEyIEBAIHN0YXRpYyBib29s IF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogICog UmV0dXJucyB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBmb3VuZCBvbiB0aGUgcGFnZSwgZmFs c2UgaWYgbm9uZS4KICAqLwogYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkgYm9vbCBmaXJzdHBh Z2UpCitfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBuZXdi YXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9mZm51bSwgYm9vbCBm aXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAlCVFNj YW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CisJQlRCYXRjaERhdGEg KmJ0bmV3YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBuZXdiYXRjaCk7CiAJUGFnZQkJcGFn ZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBtaW5vZmY7CkBAIC0xNDQs MjMgKzE0NSwyMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJCQkJaWdu b3JlX2tpbGxlZF90dXBsZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlpbnQJCQlp dGVtSW5kZXgsCisJCQkJdHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJLyogc2F2 ZSB0aGUgcGFnZS9idWZmZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJsaW5nIGxp bmtzICovCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlwYWdlID0g QnVmZmVyR2V0UGFnZShidG5ld2JhdGNoLT5idWYpOwogCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1 ZShwYWdlKTsKLQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHNv LT5jdXJyUG9zLmJ1Zik7Ci0Jc28tPmN1cnJQb3MucHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJl djsKLQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+YnRwb19uZXh0OwotCS8qIGRlbGF5 IHNldHRpbmcgc28tPmN1cnJQb3MubHNuIHVudGlsIF9idF9kcm9wX2xvY2tfYW5kX21heWJlX3Bp biAqLwotCXBzdGF0ZS5kaXIgPSBzby0+Y3VyclBvcy5kaXIgPSBkaXI7Ci0Jc28tPmN1cnJQb3Mu bmV4dFR1cGxlT2Zmc2V0ID0gMDsKKwlwc3RhdGUuY3VycnBhZ2UgPSBidG5ld2JhdGNoLT5jdXJy UGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ0bmV3YmF0Y2gtPmJ1Zik7CisJYnRuZXdiYXRj aC0+cHJldlBhZ2UgPSBvcGFxdWUtPmJ0cG9fcHJldjsKKwlidG5ld2JhdGNoLT5uZXh0UGFnZSA9 IG9wYXF1ZS0+YnRwb19uZXh0OworCXBzdGF0ZS5kaXIgPSBuZXdiYXRjaC0+ZGlyID0gZGlyOwog CiAJLyogZWl0aGVyIG1vcmVSaWdodCBvciBtb3JlTGVmdCBzaG91bGQgYmUgc2V0IG5vdyAobWF5 IGJlIHVuc2V0IGxhdGVyKSAqLwotCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikg PyBzby0+Y3VyclBvcy5tb3JlUmlnaHQgOgotCQkgICBzby0+Y3VyclBvcy5tb3JlTGVmdCk7CisJ QXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IGJ0bmV3YmF0Y2gtPm1vcmVSaWdo dCA6IGJ0bmV3YmF0Y2gtPm1vcmVMZWZ0KTsKIAlBc3NlcnQoIVBfSUdOT1JFKG9wYXF1ZSkpOwot CUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwogCUFzc2VydCghc28tPm5l ZWRQcmltU2Nhbik7CiAKIAkvKiBpbml0aWFsaXplIGxvY2FsIHZhcmlhYmxlcyAqLwpAQCAtMTg4 LDE0ICsxODYsMTQgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJewogCQkvKiBhbGxvdyBuZXh0L3ByZXYg cGFnZSB0byBiZSByZWFkIGJ5IG90aGVyIHdvcmtlciB3aXRob3V0IGRlbGF5ICovCiAJCWlmIChT Y2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCi0JCQlfYnRfcGFyYWxsZWxfcmVsZWFzZShzY2Fu LCBzby0+Y3VyclBvcy5uZXh0UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsK KwkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gtPm5leHRQYWdlLAorCQkJ CQkJCQkgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQllbHNlCi0JCQlfYnRfcGFyYWxsZWxfcmVs ZWFzZShzY2FuLCBzby0+Y3VyclBvcy5wcmV2UGFnZSwKLQkJCQkJCQkJIHNvLT5jdXJyUG9zLmN1 cnJQYWdlKTsKKwkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIGJ0bmV3YmF0Y2gtPnByZXZQ YWdlLAorCQkJCQkJCQkgYnRuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCX0KIAotCVByZWRpY2F0ZUxv Y2tQYWdlKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIHNjYW4tPnhzX3NuYXBzaG90KTsKKwlQ cmVkaWNhdGVMb2NrUGFnZShyZWwsIHBzdGF0ZS5jdXJycGFnZSwgc2Nhbi0+eHNfc25hcHNob3Qp OwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7CkBAIC0yMTIsMTEgKzIx MCwxMSBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhz Y2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90 aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5t b3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJYnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJ CQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2Nh bikKIAkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJCQkJCQkJ CQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCQkJCQkJCQkgICBidG5ld2JhdGNo LT5jdXJyUGFnZSk7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQl9CkBAIC0yODAsMjYg KzI3OCwyNiBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQlpZiAoIUJUcmVlVHVwbGVJc1Bvc3Rpbmco aXR1cCkpCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwotCQkJCQlfYnRfc2F2ZWl0ZW0o c28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKKwkJCQkJX2J0X3NhdmVpdGVtKG5ld2JhdGNo LCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJaXRlbUluZGV4 Kys7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7Ci0JCQkJCWludAkJCXR1cGxlT2Zmc2V0OworCQkJ CQlpbnQJCQliYXNlT2Zmc2V0OwogCiAJCQkJCS8qIFNldCB1cCBwb3N0aW5nIGxpc3Qgc3RhdGUg KGFuZCByZW1lbWJlciBmaXJzdCBUSUQpICovCi0JCQkJCXR1cGxlT2Zmc2V0ID0KLQkJCQkJCV9i dF9zZXR1cHBvc3RpbmdpdGVtcyhzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCWJhc2VPZmZz ZXQgPQorCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9m Zm51bSwKIAkJCQkJCQkJCQkJICBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cCwgMCksCi0JCQkJ CQkJCQkJCSAgaXR1cCk7CisJCQkJCQkJCQkJCSAgaXR1cCwgJnR1cGxlT2Zmc2V0KTsKIAkJCQkJ aXRlbUluZGV4Kys7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIGxhdGVyIFRJRHMgKG11c3QgYmUg YXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gMTsgaSA8IEJUcmVlVHVwbGVHZXRO UG9zdGluZyhpdHVwKTsgaSsrKQogCQkJCQl7Ci0JCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKHNv LCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0obmV3YmF0Y2gs IGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQlCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1 cCwgaSksCi0JCQkJCQkJCQkJCXR1cGxlT2Zmc2V0KTsKKwkJCQkJCQkJCQkJYmFzZU9mZnNldCk7 CiAJCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQkJfQogCQkJCX0KQEAgLTMzOSwxMiArMzM3LDExIEBA IF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZz ZXROdW1iZXIgb2ZmbnVtLAogCQl9CiAKIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJ c28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCQlidG5ld2JhdGNoLT5tb3JlUmlnaHQg PSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4IDw9IE1heFRJRHNQZXJCVHJlZVBhZ2UpOwot CQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0 ZW1JbmRleCAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCW5ld2JhdGNoLT5m aXJzdEl0ZW0gPSAwOworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0K IAllbHNlCiAJewpAQCAtMzYxLDExICszNTgsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFf YnRfc2NhbmJlaGluZF9jaGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJ CXsKIAkJCQkJLyogU2NoZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBh bGwgKi8KLQkJCQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCQkJYnRuZXdiYXRj aC0+bW9yZUxlZnQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJ CWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3Nj aGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJ CQkJCQkJCQkJCSAgIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwog CQkJCX0KIAkJCX0KQEAgLTQ2NiwyNyArNDYzLDI3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCXsK IAkJCQkJLyogUmVtZW1iZXIgaXQgKi8KIAkJCQkJaXRlbUluZGV4LS07Ci0JCQkJCV9idF9zYXZl aXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3 YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCX0KIAkJ CQllbHNlCiAJCQkJewogCQkJCQl1aW50MTYJCW5pdGVtcyA9IEJUcmVlVHVwbGVHZXROUG9zdGlu ZyhpdHVwKTsKLQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7 CiAKIAkJCQkJLyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGxhc3Qg VElEKSAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNl dCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2Zm bnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBuaXRlbXMgLSAx KSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQp OwogCiAJCQkJCS8qIFJlbWVtYmVyIGFsbCBwcmlvciBUSURzIChtdXN0IGJlIGF0IGxlYXN0IG9u ZSkgKi8KIAkJCQkJZm9yIChpbnQgaSA9IG5pdGVtcyAtIDI7IGkgPj0gMDsgaS0tKQogCQkJCQl7 CiAJCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1J bmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUlu ZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwK LQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJ fQogCQkJCX0KIAkJCX0KQEAgLTUwMiwxMiArNDk5LDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkg KiBiZSBmb3VuZCB0aGVyZQogCQkgKi8KIAkJaWYgKCFwc3RhdGUuY29udGludWVzY2FuKQotCQkJ c28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCWJ0bmV3YmF0Y2gtPm1vcmVMZWZ0ID0g ZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3MuZmlyc3RJ dGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQZXJCVHJl ZVBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRyZWVQYWdl IC0gMTsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0Y2gtPmxh c3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUyNCw3ICs1 MjAsNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3JjZW5vbnJl cXVpcmVkKTsKIAotCXJldHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5jdXJyUG9z Lmxhc3RJdGVtKTsKKwlyZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0Y2gtPmxh c3RJdGVtKTsKIH0KIAogLyoKQEAgLTEwMjcsOTAgKzEwMjMsOTEgQEAgX2J0X29wcG9kaXJfY2hl Y2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0dXJuIHRy dWU7CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0 ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0 ZW1JbmRleF0gKi8KIHN0YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVlIHNvLCBp bnQgaXRlbUluZGV4LAotCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkK K19idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQp CiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUlu ZGV4XTsKLQogCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVlVHVwbGVJ c1Bvc3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKLQlj dXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCW5l d2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnRhYmxlVGlkID0gaXR1cC0+dF90aWQ7CisJbmV3YmF0 Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlpZiAobmV3YmF0 Y2gtPmN1cnJUdXBsZXMpCiAJewogCQlTaXplCQlpdHVwc3ogPSBJbmRleFR1cGxlU2l6ZShpdHVw KTsKIAotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZz ZXQ7Ci0JCW1lbWNweShzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dCwgaXR1cCwgaXR1cHN6KTsKLQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IE1BWEFM SUdOKGl0dXBzeik7CisJCW5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLnR1cGxlT2Zmc2V0ID0g KnR1cGxlT2Zmc2V0OworCQltZW1jcHkobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAqdHVwbGVPZmZz ZXQsIGl0dXAsIGl0dXBzeik7CisJCSp0dXBsZU9mZnNldCArPSBNQVhBTElHTihpdHVwc3opOwog CX0KIH0KIAogLyoKICAqIFNldHVwIHN0YXRlIHRvIHNhdmUgVElEcy9pdGVtcyBmcm9tIGEgc2lu Z2xlIHBvc3RpbmcgbGlzdCB0dXBsZS4KICAqCi0gKiBTYXZlcyBhbiBpbmRleCBpdGVtIGludG8g c28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSBmb3IgVElEIHRoYXQgaXMKLSAqIHJldHVybmVk IHRvIHNjYW4gZmlyc3QuICBTZWNvbmQgb3Igc3Vic2VxdWVudCBUSURzIGZvciBwb3N0aW5nIGxp c3Qgc2hvdWxkCi0gKiBiZSBzYXZlZCBieSBjYWxsaW5nIF9idF9zYXZlcG9zdGluZ2l0ZW0oKS4K KyAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBuZXdiYXRjaC5pdGVtc1tpdGVtSW5kZXhdIGZv ciBUSUQgdGhhdCBpcyByZXR1cm5lZAorICogdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJz ZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQgYmUgc2F2ZWQKKyAqIGJ5IGNhbGxp bmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgogICoKLSAqIFJldHVybnMgYW4gb2Zmc2V0IGludG8g dHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMgc3RvcmVkIGF0IGlmCi0gKiBu ZWVkZWQuCisgKiBSZXR1cm5zIGJhc2VPZmZzZXQsIGFuIG9mZnNldCBpbnRvIHR1cGxlIHN0b3Jh Z2Ugc3BhY2UgdGhhdCBtYWluIHR1cGxlIGlzCisgKiBzdG9yZWQgYXQgaWYgbmVlZGVkLgogICov CiBzdGF0aWMgaW50Ci1fYnRfc2V0dXBwb3N0aW5naXRlbXMoQlRTY2FuT3BhcXVlIHNvLCBpbnQg aXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQkgIGNvbnN0IEl0ZW1Qb2ludGVy RGF0YSAqaGVhcFRpZCwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NldHVwcG9zdGluZ2l0ZW1zKElu ZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LAorCQkJCQkgIE9mZnNldE51bWJl ciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAqdGFibGVUaWQsCisJCQkJCSAgSW5kZXhU dXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0 ZW0gPSAmbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKIAlBc3NlcnQoQlRyZWVUdXBsZUlz UG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwotCWN1cnJJ dGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlpZiAoc28tPmN1cnJUdXBsZXMpCisJaXRlbS0+ dGFibGVUaWQgPSAqdGFibGVUaWQ7CisJaXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07CisKKwlp ZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCiAJewogCQkvKiBTYXZlIGJhc2UgSW5kZXhUdXBsZSAo dHJ1bmNhdGUgcG9zdGluZyBsaXN0KSAqLwogCQlJbmRleFR1cGxlCWJhc2U7CiAJCVNpemUJCWl0 dXBzeiA9IEJUcmVlVHVwbGVHZXRQb3N0aW5nT2Zmc2V0KGl0dXApOwogCiAJCWl0dXBzeiA9IE1B WEFMSUdOKGl0dXBzeik7Ci0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5l eHRUdXBsZU9mZnNldDsKLQkJYmFzZSA9IChJbmRleFR1cGxlKSAoc28tPmN1cnJUdXBsZXMgKyBz by0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOworCQlpdGVtLT50dXBsZU9mZnNldCA9ICp0dXBs ZU9mZnNldDsKKwkJYmFzZSA9IChJbmRleFR1cGxlKSAobmV3YmF0Y2gtPmN1cnJUdXBsZXMgKyAq dHVwbGVPZmZzZXQpOwogCQltZW1jcHkoYmFzZSwgaXR1cCwgaXR1cHN6KTsKIAkJLyogRGVmZW5z aXZlbHkgcmVkdWNlIHdvcmsgYXJlYSBpbmRleCB0dXBsZSBoZWFkZXIgc2l6ZSAqLwogCQliYXNl LT50X2luZm8gJj0gfklOREVYX1NJWkVfTUFTSzsKIAkJYmFzZS0+dF9pbmZvIHw9IGl0dXBzejsK LQkJc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0ICs9IGl0dXBzejsKKwkJKnR1cGxlT2Zmc2V0 ICs9IGl0dXBzejsKIAotCQlyZXR1cm4gY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0OworCQlyZXR1cm4g aXRlbS0+dHVwbGVPZmZzZXQ7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBTYXZlIGFu IGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBjdXJyZW50 IHBvc3RpbmcKKyAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1J bmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZwogICogdHVwbGUuCiAgKgogICogQXNzdW1lcyB0aGF0 IF9idF9zZXR1cHBvc3RpbmdpdGVtcygpIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBjdXJy ZW50Ci0gKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2VzIGl0cyByZXR1cm4gdmFs dWUgYXMgdHVwbGVPZmZzZXQuCisgKiBwb3N0aW5nIGxpc3QgdHVwbGUuICBDYWxsZXIgcGFzc2Vz IGl0cyByZXR1cm4gdmFsdWUgYXMgYmFzZU9mZnNldC4KICAqLwogc3RhdGljIGlubGluZSB2b2lk Ci1fYnRfc2F2ZXBvc3RpbmdpdGVtKEJUU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1JbmRleCwgT2Zm c2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zm c2V0KQorX2J0X3NhdmVwb3N0aW5naXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0 ZW1JbmRleCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJSXRlbVBvaW50ZXIgdGFibGVUaWQs IGludCBiYXNlT2Zmc2V0KQogewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJy UG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0Y2hNYXRjaGluZ0l0ZW0gKml0ZW0gPSAmbmV3YmF0 Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAKLQljdXJySXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOwot CWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJs ZVRpZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKIAogCS8qCiAJICogSGF2ZSBpbmRl eC1vbmx5IHNjYW5zIHJldHVybiB0aGUgc2FtZSBiYXNlIEluZGV4VHVwbGUgZm9yIGV2ZXJ5IFRJ RAogCSAqIHRoYXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBzYW1lIHBvc3RpbmcgbGlzdAogCSAqLwot CWlmIChzby0+Y3VyclR1cGxlcykKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gdHVwbGVPZmZz ZXQ7CisJaWYgKG5ld2JhdGNoLT5jdXJyVHVwbGVzKQorCQlpdGVtLT50dXBsZU9mZnNldCA9IGJh c2VPZmZzZXQ7CiB9CiAKICNkZWZpbmUgTE9PS19BSEVBRF9SRVFVSVJFRF9SRUNIRUNLUyAJMwpA QCAtMjgyMSwxNCArMjgxOCwxNSBAQCBuZXdfcHJpbV9zY2FuOgogCSAqCiAJICogTm90ZTogV2Ug bWFrZSBhIHNvZnQgYXNzdW1wdGlvbiB0aGF0IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uIHdp bGwKIAkgKiBhbHNvIGJlIHVzZWQgd2l0aGluIF9idF9uZXh0LCB3aGVuIGl0IGlzIGFza2VkIHRv IHN0ZXAgb2ZmIHRoaXMgcGFnZS4KLQkgKiBJdCBpcyB1cCB0byBfYnRfbmV4dCB0byBjYW5jZWwg dGhpcyBzY2hlZHVsZWQgcHJpbWl0aXZlIGluZGV4IHNjYW4KLQkgKiB3aGVuZXZlciBpdCBzdGVw cyB0byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBjdXJyUG9zLmRpci4KKwkgKiBU aGUgc2NhbiBkaXJlY3Rpb24gbWlnaHQgYmUgcmV2ZXJzZWQgZHVyaW5nIHRoZSBuZXh0IGFtZ2V0 YmF0Y2ggY2FsbCwKKwkgKiBidXQgbm90IGJlZm9yZSBhIGNhbGwgdG8gYnRwb3NyZXNldCB0aGF0 IHJlc2V0cyB0aGUgYXJyYXkga2V5cyB0byB0aGUKKwkgKiBmaXJzdCBwb3NpdGlvbnMvZWxlbWVu dHMgdXNlZCB3aGVuIHNjYW5uaW5nIGluIHRoaXMgb3RoZXIgZGlyZWN0aW9uLgogCSAqLwogCXBz dGF0ZS0+Y29udGludWVzY2FuID0gZmFsc2U7CS8qIFRlbGwgX2J0X3JlYWRwYWdlIHdlJ3JlIGRv bmUuLi4gKi8KIAlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsJLyogLi4uYnV0IGNhbGwgX2J0X2Zp cnN0IGFnYWluICovCiAKIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbikKLQkJX2J0X3BhcmFsbGVs X3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJX2J0X3Bh cmFsbGVsX3ByaW1zY2FuX3NjaGVkdWxlKHNjYW4sIHBzdGF0ZS0+Y3VycnBhZ2UpOwogCiAJLyog Q2FsbGVyJ3MgdHVwbGUgZG9lc24ndCBtYXRjaCB0aGUgbmV3IHF1YWwgKi8KIAlyZXR1cm4gZmFs c2U7CkBAIC0yODQxLDkgKzI4MzksOCBAQCBlbmRfdG9wbGV2ZWxfc2NhbjoKIAkgKiBUaGlzIGVu ZHMgdGhlIGVudGlyZSB0b3AtbGV2ZWwgc2NhbiBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlv bi4KIAkgKgogCSAqIE5vdGU6IFRoZSBzY2FuJ3MgYXJyYXlzIChpbmNsdWRpbmcgYW55IG5vbi1y ZXF1aXJlZCBhcnJheXMpIGFyZSBub3cgaW4KLQkgKiB0aGVpciBmaW5hbCBwb3NpdGlvbnMgZm9y IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLiAgSWYgdGhlIHNjYW4KLQkgKiBkaXJlY3Rpb24g aGFwcGVucyB0byBjaGFuZ2UsIHRoZW4gdGhlIGFycmF5cyB3aWxsIGFscmVhZHkgYmUgaW4gdGhl aXIKLQkgKiBmaXJzdCBwb3NpdGlvbnMgZm9yIHdoYXQgd2lsbCB0aGVuIGJlIHRoZSBjdXJyZW50 IHNjYW4gZGlyZWN0aW9uLgorCSAqIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IgdGhlIGN1cnJl bnQgc2NhbiBkaXJlY3Rpb24uICBUaGlzIGlzIGp1c3QKKwkgKiBkZWZlbnNpdmUuCiAJICovCiAJ cHN0YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsJLyogVGVsbCBfYnRfcmVhZHBhZ2Ugd2UncmUg ZG9uZS4uLiAqLwogCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsJLyogLi4uYW5kIGRvbid0IGNh bGwgX2J0X2ZpcnN0IGFnYWluICovCkBAIC0yOTEwLDE3ICsyOTA3LDkgQEAgX2J0X2FkdmFuY2Vf YXJyYXlfa2V5c19pbmNyZW1lbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwKIAkvKgogCSAqIFRoZSBhcnJheSBrZXlzIGFyZSBub3cgZXhoYXVzdGVkLgogCSAqCi0JICog UmVzdG9yZSB0aGUgYXJyYXkga2V5cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0 ZWx5IGJlZm9yZSB3ZQotCSAqIHdlcmUgY2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFy cmF5cyBvbmx5IGV2ZXIgcmF0Y2hldCBpbiB0aGUKLQkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9u LgotCSAqCi0JICogV2l0aG91dCB0aGlzLCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0 dXBsZXMgd2hlbiB0aGUgc2NhbgotCSAqIGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVm b3JlIGJ0Z2V0dHVwbGUgcnVucyBvdXQgb2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0 IGFmdGVyIF9idF9yZWFkcGFnZSBwcmVwYXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICog c2NhbidzIGZpbmFsIHBhZ2UgaW4gc28tPmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5h bCBwYWdlIGl0IGlzCi0JICogdHlwaWNhbCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRh dGVkIG9uY2UgYnRnZXR0dXBsZSBmaW5hbGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwg ZWZmZWN0aXZlbHkgaW52YWxpZGF0ZSB0aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBo YXNuJ3QgaGFwcGVuZWQgeWV0LCB0aG91Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVy IGhhcHBlbi4KKwkgKiBEZWZlbnNpdmVseSByZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBw b3NpdGlvbnMgdGhleSB3ZXJlIGluCisJICogaW1tZWRpYXRlbHkgYmVmb3JlIHdlIHdlcmUgY2Fs bGVkIChpLmUuIHRvIHRoZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IKKwkgKiB0aGUgY3VycmVudCBz Y2FuIGRpcmVjdGlvbikuCiAJICovCiAJX2J0X3N0YXJ0X2FycmF5X2tleXMoc2NhbiwgLWRpcik7 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCmluZGV4IGFlZDc0NTkwYy4uZjY3MmFiZTBk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKQEAgLTE2MCwxMSArMTYwLDEzIEBAIGJ0 aGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1hZGp1c3RtZW1iZXJzID0gYnRhZGp1c3Rt ZW1iZXJzLAogCQkuYW1iZWdpbnNjYW4gPSBidGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gYnRy ZXNjYW4sCi0JCS5hbWdldHR1cGxlID0gYnRnZXR0dXBsZSwKKwkJLmFtZ2V0dHVwbGUgPSBOVUxM LAorCQkuYW1nZXRiYXRjaCA9IGJ0Z2V0YmF0Y2gsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gYnRr aWxsaXRlbXNiYXRjaCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gYnR1bmd1YXJkYmF0Y2gsCiAJCS5h bWdldGJpdG1hcCA9IGJ0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYnRlbmRzY2FuLAotCQku YW1tYXJrcG9zID0gYnRtYXJrcG9zLAotCQkuYW1yZXN0cnBvcyA9IGJ0cmVzdHJwb3MsCisJCS5h bXBvc3Jlc2V0ID0gYnRwb3NyZXNldCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBidGVz dGltYXRlcGFyYWxsZWxzY2FuLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gYnRpbml0cGFyYWxs ZWxzY2FuLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IGJ0cGFyYWxsZWxyZXNjYW4sCkBAIC0yMjMs MTMgKzIyNSwxMyBAQCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wg KmlzbnVsbCwKIH0KIAogLyoKLSAqCWJ0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUg aW4gdGhlIHNjYW4uCisgKglidGdldGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJh dGNoIG9mIHR1cGxlcyBpbiB0aGUgc2NhbgogICovCi1ib29sCi1idGdldHR1cGxlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRjaAorYnRnZXRiYXRj aChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsIFNjYW5EaXJl Y3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKLQlib29sCQlyZXM7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBwcmlvcmJhdGNoOwog CiAJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKIApAQCAtMjQyLDQ1ICsyNDQs MjAgQEAgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog CQkvKgogCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IGluaXRpYWxpemVkIHRoaXMgc2Nhbiwgd2UgY2Fu IGp1c3QgYWR2YW5jZSBpdCBpbgogCQkgKiB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYg d2UgaGF2ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbAotCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQg dGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4uCisJCSAqIF9idF9maXJzdCgpIHRvIGdldCB0aGUg Zmlyc3QgYmF0Y2ggaW4gdGhlIHNjYW4uCiAJCSAqLwotCQlpZiAoIUJUU2NhblBvc0lzVmFsaWQo c28tPmN1cnJQb3MpKQotCQkJcmVzID0gX2J0X2ZpcnN0KHNjYW4sIGRpcik7CisJCWlmIChiYXRj aCA9PSBOVUxMKQorCQkJYmF0Y2ggPSBfYnRfZmlyc3Qoc2NhbiwgZGlyKTsKIAkJZWxzZQotCQl7 Ci0JCQkvKgotCQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91 c2x5LWZldGNoZWQgdHVwbGUuCi0JCQkgKi8KLQkJCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxl KQotCQkJewotCQkJCS8qCi0JCQkJICogWWVzLCByZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSds bCBkZWFsIHdpdGggYWxsIHN1Y2gKLQkJCQkgKiB0dXBsZXMgYXQgb25jZSByaWdodCBiZWZvcmUg bGVhdmluZyB0aGUgaW5kZXggcGFnZS4pICBUaGUKLQkJCQkgKiB0ZXN0IGZvciBudW1LaWxsZWQg b3ZlcnJ1biBpcyBub3QganVzdCBwYXJhbm9pYTogaWYgdGhlCi0JCQkJICogY2FsbGVyIHJldmVy c2VzIGRpcmVjdGlvbiBpbiB0aGUgaW5kZXhzY2FuIHRoZW4gdGhlIHNhbWUKLQkJCQkgKiBpdGVt IG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLiBJdCdzIG5vdCB3b3J0aAotCQkJCSAq IHRyeWluZyB0byBvcHRpbWl6ZSB0aGF0LCBzbyB3ZSBkb24ndCBkZXRlY3QgaXQsIGJ1dCBpbnN0 ZWFkCi0JCQkJICoganVzdCBmb3JnZXQgYW55IGV4Y2VzcyBlbnRyaWVzLgotCQkJCSAqLwotCQkJ CWlmIChzby0+a2lsbGVkSXRlbXMgPT0gTlVMTCkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zID0gcGFs bG9jX2FycmF5KGludCwgTWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCQkJaWYgKHNvLT5udW1LaWxs ZWQgPCBNYXhUSURzUGVyQlRyZWVQYWdlKQotCQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtp bGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKLQkJCX0KKwkJCWJhdGNoID0gX2J0X25l eHQoc2NhbiwgZGlyLCBiYXRjaCk7CiAKLQkJCS8qCi0JCQkgKiBOb3cgY29udGludWUgdGhlIHNj YW4uCi0JCQkgKi8KLQkJCXJlcyA9IF9idF9uZXh0KHNjYW4sIGRpcik7Ci0JCX0KLQotCQkvKiBJ ZiB3ZSBoYXZlIGEgdHVwbGUsIHJldHVybiBpdCAuLi4gKi8KLQkJaWYgKHJlcykKKwkJLyogSWYg d2UgaGF2ZSBhIGJhdGNoLCByZXR1cm4gaXQgLi4uICovCisJCWlmIChiYXRjaCkKIAkJCWJyZWFr OwogCQkvKiAuLi4gb3RoZXJ3aXNlIHNlZSBpZiB3ZSBuZWVkIGFub3RoZXIgcHJpbWl0aXZlIGlu ZGV4IHNjYW4gKi8KIAl9IHdoaWxlIChzby0+bnVtQXJyYXlLZXlzICYmIF9idF9zdGFydF9wcmlt X3NjYW4oc2NhbikpOwogCi0JcmV0dXJuIHJlczsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBA IC0yOTAsMzggKzI2Nyw0MyBAQCBpbnQ2NAogYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUSURCaXRtYXAgKnRibSkKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsK LQlJdGVtUG9pbnRlciBoZWFwVGlkOworCUl0ZW1Qb2ludGVyIHRhYmxlVGlkOwogCiAJQXNzZXJ0 KHNjYW4tPmhlYXBSZWxhdGlvbiA9PSBOVUxMKTsKIAogCS8qIEVhY2ggbG9vcCBpdGVyYXRpb24g cGVyZm9ybXMgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCWRvCiAJewotCQkvKiBG ZXRjaCB0aGUgZmlyc3QgcGFnZSAmIHR1cGxlICovCi0JCWlmIChfYnRfZmlyc3Qoc2NhbiwgRm9y d2FyZFNjYW5EaXJlY3Rpb24pKQorCQkvKiBGZXRjaCB0aGUgZmlyc3QgYmF0Y2ggKi8KKwkJaWYg KChiYXRjaCA9IF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpKQogCQl7Ci0J CQkvKiBTYXZlIHR1cGxlIElELCBhbmQgY29udGludWUgc2Nhbm5pbmcgKi8KLQkJCWhlYXBUaWQg PSAmc2Nhbi0+eHNfaGVhcHRpZDsKLQkJCXRibV9hZGRfdHVwbGVzKHRibSwgaGVhcFRpZCwgMSwg ZmFsc2UpOworCQkJaW50CQkJaXRlbUluZGV4ID0gMDsKKworCQkJLyogU2F2ZSBmaXJzdCB0dXBs ZSdzIFRJRCAqLworCQkJdGFibGVUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVU aWQ7CisJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAxLCBmYWxzZSk7CiAJCQludGlk cysrOwogCiAJCQlmb3IgKDs7KQogCQkJewotCQkJCS8qCi0JCQkJICogQWR2YW5jZSB0byBuZXh0 IHR1cGxlIHdpdGhpbiBwYWdlLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUKLQkJCQkgKiBlYXN5 IGNhc2UgaW4gX2J0X25leHQoKS4KLQkJCQkgKi8KLQkJCQlpZiAoKytzby0+Y3VyclBvcy5pdGVt SW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkKKwkJCQkvKiBBZHZhbmNlIHRvIG5leHQgVElE IHdpdGhpbiBwYWdlLXNpemVkIGJhdGNoICovCisJCQkJaWYgKCsraXRlbUluZGV4ID4gYmF0Y2gt Pmxhc3RJdGVtKQogCQkJCXsKLQkJCQkJLyogbGV0IF9idF9uZXh0IGRvIHRoZSBoZWF2eSBsaWZ0 aW5nICovCi0JCQkJCWlmICghX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKQor CQkJCQkvKgorCQkJCQkgKiBfYnRfbmV4dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2ggZm9yIGJp dG1hcCBjYWxsZXJzCisJCQkJCSAqIGJlZm9yZSBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwgc28g b25seSBvbmUgYmF0Y2ggaXMKKwkJCQkJICogZXZlciB1c2VkIGF0IGEgdGltZQorCQkJCQkgKi8K KwkJCQkJaXRlbUluZGV4ID0gMDsKKwkJCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgYmF0Y2gpOworCQkJCQlpZiAoIWJhdGNoKQogCQkJCQkJYnJlYWs7CiAJ CQkJfQogCi0JCQkJLyogU2F2ZSB0dXBsZSBJRCwgYW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0J CQkJaGVhcFRpZCA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdLmhl YXBUaWQ7Ci0JCQkJdGJtX2FkZF90dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CisJCQkJ dGFibGVUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQ7CisJCQkJdGJtX2Fk ZF90dXBsZXModGJtLCB0YWJsZVRpZCwgMSwgZmFsc2UpOwogCQkJCW50aWRzKys7CiAJCQl9CiAJ CX0KQEAgLTM0OCw4ICszMzAsNiBAQCBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5 cywgaW50IG5vcmRlcmJ5cykKIAogCS8qIGFsbG9jYXRlIHByaXZhdGUgd29ya3NwYWNlICovCiAJ c28gPSBwYWxsb2Nfb2JqZWN0KEJUU2Nhbk9wYXF1ZURhdGEpOwotCUJUU2NhblBvc0ludmFsaWRh dGUoc28tPmN1cnJQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwogCWlm IChzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQlzby0+a2V5RGF0YSA9IChTY2FuS2V5KSBwYWxs b2Moc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlEYXRhKSk7CiAJZWxzZQpAQCAt MzYzLDE5ICszNDMsMTEgQEAgYnRiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpCiAJc28tPm9yZGVyUHJvY3MgPSBOVUxMOwogCXNvLT5hcnJheUNvbnRleHQg PSBOVUxMOwogCi0Jc28tPmtpbGxlZEl0ZW1zID0gTlVMTDsJCS8qIHVudGlsIG5lZWRlZCAqLwot CXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBkb24ndCBrbm93IHlldCB3aGV0aGVy IHRoZSBzY2FuIHdpbGwgYmUgaW5kZXgtb25seSwgc28gd2UgZG8gbm90Ci0JICogYWxsb2NhdGUg dGhlIHR1cGxlIHdvcmtzcGFjZSBhcnJheXMgdW50aWwgYnRyZXNjYW4uICBIb3dldmVyLCB3ZSBz ZXQgdXAKLQkgKiBzY2FuLT54c19pdHVwZGVzYyB3aGV0aGVyIHdlJ2xsIG5lZWQgaXQgb3Igbm90 LCBzaW5jZSB0aGF0J3Mgc28gY2hlYXAuCi0JICovCi0Jc28tPmN1cnJUdXBsZXMgPSBzby0+bWFy a1R1cGxlcyA9IE5VTEw7Ci0KLQlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3Io cmVsKTsKLQogCXNjYW4tPm9wYXF1ZSA9IHNvOworCXNjYW4tPnhzX2l0dXBkZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOworCXNjYW4tPm1heGl0ZW1zYmF0Y2ggPSBNYXhUSURzUGVyQlRyZWVQ YWdlOworCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEJU QmF0Y2hEYXRhKSk7CisJc2Nhbi0+YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSA9IEJMQ0tTWjsKIAog CXJldHVybiBzY2FuOwogfQpAQCAtMzg5LDY0ICszNjEsMTg2IEBAIGJ0cmVzY2FuKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogewogCUJUU2Nhbk9w YXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAotCS8qIHdlIGFyZW4ndCBo b2xkaW5nIGFueSByZWFkIGxvY2tzLCBidXQgZ290dGEgZHJvcCB0aGUgcGlucyAqLwotCWlmIChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQl7Ci0JCS8qIEJlZm9yZSBsZWF2aW5nIGN1 cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJaWYgKHNvLT5udW1L aWxsZWQgPiAwKQotCQkJX2J0X2tpbGxpdGVtcyhzY2FuKTsKLQkJQlRTY2FuUG9zVW5waW5JZlBp bm5lZChzby0+Y3VyclBvcyk7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwot CX0KLQotCS8qCi0JICogV2UgcHJlZmVyIHRvIGVhZ2VybHkgZHJvcCBsZWFmIHBhZ2UgcGlucyBi ZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zLgotCSAqIFRoaXMgYXZvaWRzIG1ha2luZyBWQUNVVU0g d2FpdCB0byBhY3F1aXJlIGEgY2xlYW51cCBsb2NrIG9uIHRoZSBwYWdlLgotCSAqCi0JICogV2Ug Y2Fubm90IHNhZmVseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGR1cmluZyBpbmRleC1vbmx5IHNjYW5z IGR1ZSB0byBhCi0JICogcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIFZBQ1VVTSBzZXR0aW5nIHBh Z2VzIGFsbC12aXNpYmxlIGluIHRoZSBWTS4KLQkgKiBJdCdzIGFsc28gdW5zYWZlIGZvciBwbGFp biBpbmRleCBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LgotCSAqCi0JICogQWxz byBvcHQgb3V0IG9mIGRyb3BwaW5nIGxlYWYgcGFnZSBwaW5zIGVhZ2VybHkgZHVyaW5nIGJpdG1h cCBzY2Fucy4KLQkgKiBQaW5zIGNhbm5vdCBiZSBoZWxkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFu dCBkdXJpbmcgYml0bWFwIHNjYW5zIGVpdGhlcgotCSAqIHdheSwgc28gd2UgbWlnaHQgYXMgd2Vs bCBhdm9pZCB3YXN0aW5nIGN5Y2xlcyBvbiBhY3F1aXJpbmcgcGFnZSBMU05zLgotCSAqCi0JICog U2VlIG5idHJlZS9SRUFETUUgc2VjdGlvbiBvbiBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNs aW5nIHNhZmUuCi0JICoKLQkgKiBOb3RlOiBzby0+ZHJvcFBpbiBzaG91bGQgbmV2ZXIgY2hhbmdl IGFjcm9zcyByZXNjYW5zLgotCSAqLwotCXNvLT5kcm9wUGluID0gKCFzY2FuLT54c193YW50X2l0 dXAgJiYKLQkJCQkgICBJc01WQ0NMaWtlU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCi0J CQkJICAgc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOwotCi0Jc28tPm1hcmtJdGVtSW5kZXgg PSAtMTsKLQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7Ci0Jc28tPnNjYW5CZWhpbmQgPSBmYWxz ZTsKLQlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNlOwotCUJUU2NhblBvc1VucGluSWZQaW5u ZWQoc28tPm1hcmtQb3MpOwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCi0J LyoKLQkgKiBBbGxvY2F0ZSB0dXBsZSB3b3Jrc3BhY2UgYXJyYXlzLCBpZiBuZWVkZWQgZm9yIGFu IGluZGV4LW9ubHkgc2NhbiBhbmQKLQkgKiBub3QgYWxyZWFkeSBkb25lIGluIGEgcHJldmlvdXMg cmVzY2FuIGNhbGwuICBUbyBzYXZlIG9uIHBhbGxvYwotCSAqIG92ZXJoZWFkLCBib3RoIHdvcmtz cGFjZXMgYXJlIGFsbG9jYXRlZCBhcyBvbmUgcGFsbG9jIGJsb2NrOyBvbmx5IHRoaXMKLQkgKiBm dW5jdGlvbiBhbmQgYnRlbmRzY2FuIGtub3cgdGhhdC4KLQkgKi8KLQlpZiAoc2Nhbi0+eHNfd2Fu dF9pdHVwICYmIHNvLT5jdXJyVHVwbGVzID09IE5VTEwpCi0JewotCQlzby0+Y3VyclR1cGxlcyA9 IChjaGFyICopIHBhbGxvYyhCTENLU1ogKiAyKTsKLQkJc28tPm1hcmtUdXBsZXMgPSBzby0+Y3Vy clR1cGxlcyArIEJMQ0tTWjsKLQl9Ci0KIAkvKgogCSAqIFJlc2V0IHRoZSBzY2FuIGtleXMKIAkg Ki8KIAlpZiAoc2NhbmtleSAmJiBzY2FuLT5udW1iZXJPZktleXMgPiAwKQogCQltZW1jcHkoc2Nh bi0+a2V5RGF0YSwgc2NhbmtleSwgc2Nhbi0+bnVtYmVyT2ZLZXlzICogc2l6ZW9mKFNjYW5LZXlE YXRhKSk7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5zY2FuQmVoaW5kID0gZmFs c2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIAlzby0+bnVtYmVyT2ZLZXlzID0g MDsJCS8qIHVudGlsIF9idF9wcmVwcm9jZXNzX2tleXMgc2V0cyBpdCAqLwogCXNvLT5udW1BcnJh eUtleXMgPSAwOwkJLyogZGl0dG8gKi8KIH0KIAorLyoKKyAqCWJ0a2lsbGl0ZW1zYmF0Y2goKSAt LSBNYXJrIGRlYWQgaXRlbXMnIGluZGV4IHR1cGxlcyBMUF9ERUFECisgKi8KK3ZvaWQKK2J0a2ls bGl0ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKK3sK KwlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOworCUJUQmF0Y2hEYXRhICpidGJh dGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpOworCVBhZ2UJCXBhZ2U7CisJQlRQYWdl T3BhcXVlIG9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgbWlub2ZmOworCU9mZnNldE51bWJlciBtYXhv ZmY7CisJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CisJQnVmZmVyCQlidWY7CisJWExv Z1JlY1B0cglsYXRlc3Rsc247CisKKwkvKiBUYWJsZSBBTSBzaG91bGQgaGF2ZSBhbHJlYWR5IHJl bGVhc2VkIGJhdGNoIHBhZ2UncyBwaW4gYnkgbm93ICovCisJQXNzZXJ0KGJhdGNoLT5udW1EZWFk ID4gMCk7CisKKwlidWYgPSBfYnRfZ2V0YnVmKHJlbCwgYnRiYXRjaC0+Y3VyclBhZ2UsIEJUX1JF QUQpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJh dGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCisJ eworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCisJCV9idF9yZWxidWYocmVs LCBidWYpOworCQlyZXR1cm47CisJfQorCisJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmKTsKKwlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CisJbWlub2ZmID0gUF9GSVJTVERBVEFLRVko b3BhcXVlKTsKKwltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOworCisJLyog SXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5kZWFkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXIgKi8K Kwlmb3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlp dGVtSW5kZXggPSBiYXRjaC0+ZGVhZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqa2l0 ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CisJCU9mZnNldE51bWJlciBvZmZudW0gPSBr aXRlbS0+aW5kZXhPZmZzZXQ7CisKKwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJ dGVtICYmIGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW0pOworCQlBc3NlcnQoaSA9PSAwIHx8 CisJCQkgICBvZmZudW0gPj0gYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbaSAtIDFdXS5p bmRleE9mZnNldCk7CisKKwkJaWYgKG9mZm51bSA8IG1pbm9mZikKKwkJCWNvbnRpbnVlOwkJCS8q IHB1cmUgcGFyYW5vaWEgKi8KKwkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCisJCXsKKwkJCUl0 ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZudW0pOworCQkJSW5kZXhUdXBsZQlp dHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFnZSwgaWlkKTsKKwkJCWJvb2wJCWtp bGx0dXBsZSA9IGZhbHNlOworCisJCQlpZiAoQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQor CQkJeworCQkJCWludAkJCXBpID0gaSArIDE7CisJCQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1 cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKKwkJCQlpbnQJCQlqOworCisJCQkJZm9yIChqID0gMDsg aiA8IG5wb3N0aW5nOyBqKyspCisJCQkJeworCQkJCQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVU dXBsZUdldFBvc3RpbmdOKGl0dXBsZSwgaik7CisKKwkJCQkJaWYgKCFJdGVtUG9pbnRlckVxdWFs cyhpdGVtLCAma2l0ZW0tPnRhYmxlVGlkKSkKKwkJCQkJCWJyZWFrOwkvKiBvdXQgb2YgcG9zdGlu ZyBsaXN0IGxvb3AgKi8KKworCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51 bSk7CisKKwkJCQkJLyoKKwkJCQkJICogUmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4K KwkJCQkJICoKKwkJCQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZh bmNpbmcga2l0ZW0gaGVyZQorCQkJCQkgKiB3aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmlu ZyB0aGUgcG9zdGluZyBsaXN0IHR1cGxlCisJCQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNo aW5nIGl0cyBuZXh0IGhlYXAgVElEIGluIG5leHQKKwkJCQkJICogbG9vcCBpdGVyYXRpb24uCisJ CQkJCSAqCisJCQkJCSAqIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwg aGVhcCBUSUQgaW4KKwkJCQkJICogdGhlIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBn ZXRzIGtpbGxlZAorCQkJCQkgKiByZWdhcmRsZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3 aGVyZSB0aGUgbGFzdAorCQkJCQkgKiBraXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGlu IHRoZSBsYXN0IGluZGV4IHR1cGxlCisJCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxl IHN0aWxsIGdldHMga2lsbGVkKS4KKwkJCQkJICovCisJCQkJCWlmIChwaSA8IGJhdGNoLT5udW1E ZWFkKQorCQkJCQkJa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2JhdGNoLT5kZWFkSXRlbXNbcGkrK11d OworCQkJCX0KKworCQkJCS8qCisJCQkJICogRG9uJ3QgYm90aGVyIGFkdmFuY2luZyB0aGUgb3V0 ZXJtb3N0IGxvb3AncyBpbnQgaXRlcmF0b3IgdG8KKwkJCQkgKiBhdm9pZCBwcm9jZXNzaW5nIGRl YWQgaXRlbXMgdGhhdCByZWxhdGUgdG8gdGhlIHNhbWUKKwkJCQkgKiBvZmZudW0vcG9zdGluZyBs aXN0IHR1cGxlLiAgVGhpcyBtaWNyby1vcHRpbWl6YXRpb24gaGFyZGx5CisJCQkJICogc2VlbXMg d29ydGggaXQuICAoRnVydGhlciBpdGVyYXRpb25zIG9mIHRoZSBvdXRlcm1vc3QgbG9vcAorCQkJ CSAqIHdpbGwgZmFpbCB0byBtYXRjaCBvbiB0aGlzIHNhbWUgcG9zdGluZyBsaXN0J3MgZmlyc3Qg aGVhcAorCQkJCSAqIFRJRCBpbnN0ZWFkLCBzbyB3ZSdsbCBhZHZhbmNlIHRvIHRoZSBuZXh0IG9m Zm51bS9pbmRleAorCQkJCSAqIHR1cGxlIHByZXR0eSBxdWlja2x5LikKKwkJCQkgKi8KKwkJCQlp ZiAoaiA9PSBucG9zdGluZykKKwkJCQkJa2lsbHR1cGxlID0gdHJ1ZTsKKwkJCX0KKwkJCWVsc2Ug aWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAma2l0ZW0tPnRhYmxlVGlkKSkK KwkJCQlraWxsdHVwbGUgPSB0cnVlOworCisJCQkvKgorCQkJICogTWFyayBpbmRleCBpdGVtIGFz IGRlYWQsIGlmIGl0IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlzCisJCQkgKiBoYXBwZW5zIHdo aWxlIGhvbGRpbmcgYSBzaGFyZWQgYnVmZmVyIGxvY2ssIGl0J3MgcG9zc2libGUgdGhhdAorCQkJ ICogbXVsdGlwbGUgcHJvY2Vzc2VzIGF0dGVtcHQgdG8gZG8gdGhpcyBzaW11bHRhbmVvdXNseSwg bGVhZGluZworCQkJICogdG8gbXVsdGlwbGUgZnVsbC1wYWdlIGltYWdlcyBiZWluZyBzZW50IHRv IFdBTCAoaWYKKwkJCSAqIHdhbF9sb2dfaGludHMgb3IgZGF0YSBjaGVja3N1bXMgYXJlIGVuYWJs ZWQpLCB3aGljaCBpcworCQkJICogdW5kZXNpcmFibGUuCisJCQkgKi8KKwkJCWlmIChraWxsdHVw bGUgJiYgIUl0ZW1JZElzRGVhZChpaWQpKQorCQkJeworCQkJCWlmICgha2lsbGVkc29tZXRoaW5n KQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogVXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVy ZSB0byBjaGVjayBpZiB3ZSBjYW4KKwkJCQkJICogdXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3Qg aG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdlCisJCQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhl cmUncyBubyBwb2ludCBjb250aW51aW5nLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFCdWZmZXJCZWdp blNldEhpbnRCaXRzKGJ1ZikpCisJCQkJCQlnb3RvIHVubG9ja19wYWdlOworCQkJCX0KKworCQkJ CS8qIGZvdW5kIHRoZSBpdGVtL2FsbCBwb3N0aW5nIGxpc3QgaXRlbXMgKi8KKwkJCQlJdGVtSWRN YXJrRGVhZChpaWQpOworCQkJCWtpbGxlZHNvbWV0aGluZyA9IHRydWU7CisJCQkJYnJlYWs7CQkJ Lyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29wICovCisJCQl9CisJCQlvZmZudW0gPSBPZmZzZXRO dW1iZXJOZXh0KG9mZm51bSk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNpbmNlIHRoaXMgY2FuIGJl IHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1hcmsgYXMgZGlydHkgaGludC4KKwkgKgorCSAqIFdo ZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2Uncwor CSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4g IChOb3RlIHRoYXQgd2UKKwkgKiBvbmx5IHJlbHkgb24gdGhlIHBhZ2UtbGV2ZWwgZmxhZyBpbiAh aGVhcGtleXNwYWNlIGluZGV4ZXMuKQorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcpCisJewor CQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQX0hBU19HQVJCQUdFOworCQlCdWZmZXJGaW5pc2hT ZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUpOworCX0KKwordW5sb2NrX3BhZ2U6CisJX2J0X3Jl bGJ1ZihyZWwsIGJ1Zik7Cit9CisKKy8qCisgKglidHVuZ3VhcmRiYXRjaCgpIC0tIERyb3AgYmF0 Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBpbikKKyAqCisgKiBDYWxsZWQg YnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3AgdGhlIGJ1ZmZlciBwaW4gaGVs ZCB0bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgYnkgVkFDVVVNLgorICov Cit2b2lkCitidHVuZ3VhcmRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNo IGJhdGNoKQoreworCUJUQmF0Y2hEYXRhICpidGJhdGNoID0gQlRCYXRjaEdldERhdGEoc2Nhbiwg YmF0Y2gpOworCisJLyogY2hlY2sgaWYgdGhlIHBpbiBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2Vk IChtdXN0IGJlIGlkZW1wb3RlbnQpICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoYnRiYXRjaC0+YnVm KSkKKwl7CisJCVJlbGVhc2VCdWZmZXIoYnRiYXRjaC0+YnVmKTsKKwkJYnRiYXRjaC0+YnVmID0g SW52YWxpZEJ1ZmZlcjsKKwl9Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBjbG9zZSBkb3du IGEgc2NhbgogICovCkBAIC00NTUsMTE2ICs1NDksNjMgQEAgYnRlbmRzY2FuKEluZGV4U2NhbkRl c2Mgc2NhbikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFx dWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0IGdvdHRhIGRy b3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0Jewot CQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0 ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRlbXMoc2Nhbik7 Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCX0KLQotCXNvLT5tYXJr SXRlbUluZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0K LQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25zLCB0aGUgUkFNIGlzIGFib3V0IHRv IGJlIGZyZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdlICovCiAJaWYgKHNvLT5rZXlEYXRh ICE9IE5VTEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkvKiBzby0+YXJyYXlLZXlzIGFuZCBz by0+b3JkZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICovCiAJaWYgKHNvLT5hcnJheUNvbnRl eHQgIT0gTlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+YXJyYXlDb250ZXh0KTsKLQlp ZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7Ci0J aWYgKHNvLT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5jdXJyVHVwbGVzKTsKLQkv KiBzby0+bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVlJ2QsIHNlZSBidHJlc2NhbiAqLwog CXBmcmVlKHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3BvcygpIC0tIHNhdmUgY3VycmVudCBzY2Fu IHBvc2l0aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gcmVzZXQgYXJyYXkga2V5IHN0YXRlIGZvciBz Y2FuIHBvc2l0aW9uIGNoYW5nZQorICoKKyAqIENhbGxlZCBieSB0aGUgY29yZSBzeXN0ZW0gd2hl biB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gaXMgYWJvdXQgdG8KKyAqIGNoYW5nZSBpbiBh IHdheSB0aGF0IGludmFsaWRhdGVzIG91ciBhcnJheSBrZXkgc3RhdGUuICBUaGlzIGhhcHBlbnMg d2hlbgorICogcmVzdG9yaW5nIGEgbWFya2VkIHBvc2l0aW9uLCBvciB3aGVuIHRoZSBzY2FuIGNy b3NzZXMgYSBiYXRjaCBib3VuZGFyeQorICogd2hpbGUgbW92aW5nIGluIHRoZSBvcHBvc2l0ZSBk aXJlY3Rpb24gdG8gdGhlIG9uZSBvcmlnaW5hbGx5IHVzZWQuCisgKgorICogRm9yIGRpcmVjdGlv biBjaGFuZ2VzLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBlZCB0aGUK KyAqIGJhdGNoJ3MgZGlyIGZpZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmU7IHdlIHVzZSB0aGlzIHVw ZGF0ZWQgZGlyZWN0aW9uIHdoZW4KKyAqIHJlc2V0dGluZyBvdXIgYXJyYXkga2V5cy4gIEZvciBt YXJrIHJlc3RvcmF0aW9uLCB0aGUgYmF0Y2gncyBkaXIgd2lsbAorICogcmV0YWluIGl0cyBvcmln aW5hbCB2YWx1ZSAoZnJvbSB3aGVuIGJ0Z2V0YmF0Y2ggcmV0dXJuZWQgaXQpLgogICovCiB2b2lk Ci1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRwb3NyZXNldChJbmRleFNjYW5EZXNj IHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9IEJUQmF0Y2hH ZXREYXRhKHNjYW4sIGJhdGNoKTsKIAotCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQgbWFyayB3aXRo IGEgcGluIChidXQgbm8gbG9jaykuICovCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFy a1Bvcyk7CisJaWYgKCFzby0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm47CiAKIAkvKgotCSAqIEp1 c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4gIElmIHdlIGxhdGVyIHN0ZXAgdG8gbmV4 dCBwYWdlCi0JICogYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFya2VkIHBvc2l0aW9uLCBfYnRfc3Rl cHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKLQkgKiB0aGUgY3VyclBvcyBzdHJ1Y3QgaW4gbWFy a1Bvcy4gIElmIChhcyBvZnRlbiBoYXBwZW5zKSB0aGUgbWFyayBpcyBtb3ZlZAotCSAqIGJlZm9y ZSB3ZSBsZWF2ZSB0aGUgcGFnZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IHdvcmsuCisJICog UmVzZXQgYXJyYXkga2V5cyB0byBpbml0aWFsIHN0YXRlIGZvciB0aGUgYmF0Y2gncyBzY2FuIGRp cmVjdGlvbi4gIEFsc28KKwkgKiBjbGVhciBuZWVkUHJpbVNjYW4gYW5kIHJlbGF0ZWQgZmxhZ3Mu ICBUaGVzZSB3ZXJlIHNldCBiYXNlZCBvbiB0aGUgc29mdAorCSAqIGFzc3VtcHRpb24gdGhhdCB0 aGUgc2NhbiB3b3VsZCBhbHdheXMgcHJvY2VlZCBpbiB0aGUgc2FtZSBkaXJlY3Rpb24uCisJICoK KwkgKiBUaGVzZSBzdGVwcyB3b3JrIGFyb3VuZCB0aGUgc29mdCBhc3N1bXB0aW9uIGJlaW5nIHZp b2xhdGVkOiB0aGV5IGZvcmNlCisJICogdGhlIHNjYW4gdG8gc3RlcCB0byB0aGUgbmV4dC9wcmV2 aW91cyBwYWdlLCBtYWtpbmcgdGhlIGFycmF5cyByZWNvdmVyLgorCSAqIFdoZW4gd2UgZ28gdG8g cmVhZCB0aGF0IHBhZ2UsIF9idF9yZWFkcGFnZSB3aWxsIHJlbGlhYmx5IGRldGVybWluZSBpZiBh CisJICogcHJpbWl0aXZlIHNjYW4gcmVhbGx5IGlzIG5lZWRlZCBiYXNlZCBvbiB0aGUgcGFnZSdz IHR1cGxlcy4gIElmIHRoZXJlJ3MKKwkgKiBhIHByaW1pdGl2ZSBzY2FuLCBpdCB3aWxsIHJlcG9z aXRpb24gdGhlIHNjYW4gdXNpbmcgbmV3IGFycmF5IHZhbHVlcworCSAqIChiYXNlZCBvbiB0aGUg dHVwbGVzIGZyb20gdGhlIG5laWdoYm9yaW5nIHBhZ2Ugd2UnbGwgc3RlcCBvbiB0bykuCisJICoK KwkgKiBXZSBuZWVkIHRvIHJlc2V0IHRoZSBhcnJheSBrZXkgc3RhdGUgaW4gdGhlIGNvcnJlY3Qg ZGlyZWN0aW9uIHNvIHRoYXQKKwkgKiB3ZSB3b24ndCBnZXQgY29uZnVzZWQuICBXaGVuIHRoZSBh cnJheSBrZXlzIGFyZSBiZWhpbmQgdGhlIGtleSBzcGFjZQorCSAqIGZvciB0aGUgcGFnZSB3ZSdy ZSBzdGVwcGluZyBvbiB0byAoYmVoaW5kIGluIHRlcm1zIG9mIHRoZSBzY2FuIGRpciksCisJICog dGhleSB3aWxsIGNhdGNoIHVwIGF1dG9tYXRpY2FsbHkuICBCdXQgd2hlbiB0aGV5J3JlIGFoZWFk IG9mIHRoYXQKKwkgKiBwYWdlJ3Mga2V5IHNwYWNlLCB0aGUgc2NhbiBjb3VsZCBtaXNzIG1hdGNo aW5nIHR1cGxlcy4KIAkgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J CXNvLT5tYXJrSXRlbUluZGV4ID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OworCV9idF9zdGFydF9h cnJheV9rZXlzKHNjYW4sIGJhdGNoLT5kaXIpOworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGJhdGNoLT5kaXIpKQorCQlidGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0J CUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9 IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFz dCBzYXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2Nh bikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0K LQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhh cyBuZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0J CSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3 ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1 cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4 OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdl IGFmdGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3Jp bmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICog bG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50 IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9z SXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQg cGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVk ID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5l ZChzby0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1Bv cykpCi0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRv IGN1cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3Mp KQotCQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZz by0+Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEs IGl0ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2Fu UG9zSXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1 cGxlcywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNl dCk7Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2Ug Zm9yIHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFy dF9hcnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2Nh biA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwotCX0KKwkJYnRiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCXNvLT5uZWVkUHJp bVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5vcHBvc2l0ZURp ckNoZWNrID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04ODAsMTUgKzkyMSw2IEBAIF9idF9wYXJhbGxl bF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpuZXh0X3NjYW5fcGFnZSwK IAkqbmV4dF9zY2FuX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJKmxhc3RfY3Vycl9wYWdl ID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JLyoKLQkgKiBSZXNldCBzby0+Y3VyclBvcywgYW5k IGluaXRpYWxpemUgbW9yZUxlZnQvbW9yZVJpZ2h0IHN1Y2ggdGhhdCB0aGUgbmV4dAotCSAqIGNh bGwgdG8gX2J0X3JlYWRuZXh0cGFnZSB0cmVhdHMgdGhpcyBiYWNrZW5kIHNpbWlsYXJseSB0byBh IHNlcmlhbAotCSAqIGJhY2tlbmQgdGhhdCBzdGVwcyBmcm9tICpsYXN0X2N1cnJfcGFnZSB0byAq bmV4dF9zY2FuX3BhZ2UgKHVubGVzcyB0aGlzCi0JICogYmFja2VuZCdzIHNvLT5jdXJyUG9zIGlz IGluaXRpYWxpemVkIGJ5IF9idF9yZWFkZmlyc3RwYWdlIGJlZm9yZSB0aGVuKS4KLQkgKi8KLQlC VFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9 IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0KIAlpZiAoZmlyc3QpCiAJewogCQkvKgpA QCAtMTAzOCw4ICsxMDcwLDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCUJUUGFyYWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJc3RhdHVzX2NoYW5nZWQgPSBm YWxzZTsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCiAJLyog RG8gbm90aGluZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwogCWlmIChwYXJhbGxlbF9zY2Fu ID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCmlu ZGV4IGFhZTZhY2I3Zi4uOGFlYjkxYmU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv bmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c2Vh cmNoLmMKQEAgLTIzLDUzICsyMyw0OSBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUg InN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0 aWMgaW5saW5lIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwg QlRTY2FuT3BhcXVlIHNvKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfYmF0Y2hfdW5sb2NrKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQlCdWZmZXIg YnVmKTsKIHN0YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0aW9u IGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBmb3J1 cGRhdGUsIEJUU3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zmc2V0 TnVtYmVyIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVy IGJ1Zik7CiBzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwg UGFnZSBwYWdlLAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxpbmUg dm9pZCBfYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7 Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1z dGF0aWMgYm9vbCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1i ZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rp b24gZGlyLAotCQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgSW5kZXhTY2FuQmF0Y2ggX2J0 X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJh dGNoLAorCQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsK K3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3VycmJs a25vLAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsKIHN0 YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciAqYmxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8pOwot c3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBmaXJz dGJhdGNoKTsKIAogCiAvKgotICoJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKCkKKyAqIF9i dF9iYXRjaF91bmxvY2soKSAtLSBuYnRyZWUgd3JhcHBlciBmb3IgaW5kZXhhbV91dGlsX2JhdGNo X3VubG9jay4KICAqCi0gKiBVbmxvY2sgc28tPmN1cnJQb3MuYnVmLiAgSWYgc2NhbiBpcyBzby0+ ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28uCi0gKiBEcm9wcGluZyB0aGUgcGluIHByZXZlbnRz IFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9uIGFjcXVpcmluZyBhIGNsZWFudXAgbG9jay4KKyAqIFBl cmZvcm1zIHRoZSBzYW1lIFZhbGdyaW5kIGluc3RydW1lbnRhdGlvbiBhcyBfYnRfdW5sb2NrYnVm LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihS ZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKK19idF9iYXRjaF91bmxvY2soSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikKIHsKLQlpZiAoIXNv LT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhlIHBpbikgKi8K LQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVybjsKLQl9Cisj aWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVm KTsKIAotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgotCSAqCi0JICog SGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0X2tpbGxpdGVtcyBoYXMgYSB3 YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBW QUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlzby0+Y3VyclBvcy5sc24gPSBC dWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVsYnVmKHJlbCwgc28t PmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOworCVZBTEdS SU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYKKworCWluZGV4 YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gsIGJ1Zik7CisKKyNpZiBkZWZpbmVkKFVT RV9WQUxHUklORCkKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhzY2FuLT5pbmRleFJl bGF0aW9uKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MocGFnZSwgQkxDS1NaKTsKKyNl bmRpZgogfQogCiAvKgpAQCAtODYwLDI2ICs4NTYsMjUgQEAgX2J0X2NvbXBhcmUoUmVsYXRpb24g cmVsLAogfQogCiAvKgotICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRlbSBpbiBh IHNjYW4uCisgKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBpbiBhIHNjYW4u CiAgKgogICoJCVdlIG5lZWQgdG8gYmUgY2xldmVyIGFib3V0IHRoZSBkaXJlY3Rpb24gb2Ygc2Nh biwgdGhlIHNlYXJjaAotICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdl IGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAotICoJCWlmIGJhY2t3YXJkcyBzY2FuLCB0aGUgbGFz dCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKLSAqCQlxdWFsaWZpY2F0aW9u cyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJvdXQgdGhlCi0gKgkJ bWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28tPmN1 cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9udG8gYSBwaW4gb24g cGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGluIHNjYW5zLCB3aGVu IHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRfcmV0dXJuaXRlbSBz ZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2VzcyBleGl0LgorICoJ CWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhlIGZpcnN0IGxl YWYgcGFnZSAob3IKKyAqCQl0aGUgbGFzdCBsZWFmIHBhZ2UsIHdoZW4gc2Nhbm5pbmcgYmFja3dh cmRzKSBpbiB0aGUgdHJlZSB3aXRoIGF0IGxlYXN0CisgKgkJb25lIHR1cGxlIHRoYXQgc2F0aXNm aWVzIHRoZSBxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbgorICoJCXN1Y2Nlc3Mg ZXhpdCwgd2UgcmV0dXJuIGEgbmV3IGJhdGNoIHdpdGggdGhhdCBwYWdlJ3MgbWF0Y2hpbmcgaXRl bXMuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwg d2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBzby0+Y3Vy clBvcyB3aWxsIHJlbWFpbiBpbnZhbGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0 ZW1zIGluIHRoZSBpbmRleCAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSwKKyAqIHdlIGp1 c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwgZG9lc24ndCBuZWNlc3Nh cmlseSBtZWFuIHRoZQorICogZW5kIG9mIHRoZSB0b3AtbGV2ZWwgc2NhbjsgY2FsbGVyIHNob3Vs ZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvCisgKiBkZXRlcm1pbmUgaWYgYW5vdGhlciBwcmlt aXRpdmUgaW5kZXggc2NhbiBpcyByZXF1aXJlZC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nhbi0+a2V5 RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0LAogICog YXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3Jl IGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0ZW1wb3Jh cnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRoZSBzY2Fu IHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRjaAogX2J0X2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Miw4ICs4ODcsMTIgQEAgX2J0X2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIgc3RyYXRf dG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZhbGlkQmxv Y2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKKwlJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNo OworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2NhblBvc0lzVmFs aWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8K KwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOworCWJ0Zmlyc3Ri YXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGZpcnN0YmF0Y2gpOwogCiAJLyoKIAkgKiBFeGFt aW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtleXM7IGFsc28g bWFyayB0aGUKQEAgLTkwOSw2ICs5MDgsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAJ CV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShz Y2FuLCBmaXJzdGJhdGNoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtOTE4LDcgKzkxOCwx MCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkg Ki8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRfcGFyYWxsZWxf c2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJldHVybiBmYWxz ZTsKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwor CQlyZXR1cm4gZmFsc2U7CQkJLyogZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFByaW1TY2FuIGlz IHVuc2V0KSAqLworCX0KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2NhbidzIGFycmF5cyAo aWYgYW55KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTkzOCwxMSArOTQxLDkg QEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCUFz c2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAJCUFzc2VydChibGtubyAhPSBQX05PTkUpOwogCi0J CWlmICghX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0 cnVlKSkKLQkJCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nh biwgZmlyc3RiYXRjaCk7CiAKLQkJX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCQlyZXR1cm4g dHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3RjdXJyYmxr bm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTEyNDIsNyArMTI0Myw3IEBAIF9idF9maXJz dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIE5vdGU6IGNhbGxz IF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBhcmFsbGVsIHNj YW4uCiAJICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5kcG9pbnQoc2Nhbiwg ZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0YmF0Y2gpOwogCiAJ LyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRoaW4gdGhlIGlu ZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTEwLDkgKzE1MTEsOSBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3NpdGlvbiBvdXJzZWx2ZXMgb24g dGhlIHRhcmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0JhY2t3 YXJkKGRpcikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmlu c2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOworCV9idF9zZWFyY2gocmVs LCBOVUxMLCAmaW5za2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZhbHNlKTsKIAot CWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxpa2VseSghQnVm ZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFBy aW1TY2FuKTsKIApAQCAtMTUyOCwyMiArMTUyOSwyMyBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxl KCkpCiAJCXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhzX3NuYXBzaG90 KTsKLQkJCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQb3MuYnVmLCBC VF9SRUFELCBmYWxzZSk7CisJCQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmJ0Zmly c3RiYXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAJCX0KIAotCQlpZiAoIUJ1ZmZlcklzVmFs aWQoc28tPmN1cnJQb3MuYnVmKSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ0Zmlyc3RiYXRjaC0+ YnVmKSkKIAkJewogCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxf YmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQog CX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBhZ2UgKi8KLQlv ZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1Zik7CisJb2Zm bnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBidGZpcnN0YmF0Y2gtPmJ1Zik7CiAKIAkv KgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2NhbiAodXN1 YWxseSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYpLgorCSAqIGN1 cnJlbnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXkubmV4dGtleSA9 IGZhbHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJICogcG9zaXRp b25lZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fua2V5cy4KQEAg LTE1NjEsMTY0ICsxNTYzLDcyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5E aXJlY3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3aGVuIGluc2tl eSBpcyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4gYWxsIG9mIGl0 cyBub24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIuCiAJICovCi0J aWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJldHVybiBmYWxz ZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4g X2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIpOwogfQogCiAv KgotICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4uCisgKglfYnRf bmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJCU9uIGVudHJ5 LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2ggbWF5IGJlIHBp bm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRlbUluZGV4IGlk ZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVkLgorICoJCU9u IGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMgbGFzdCByZXR1 cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJhdGNoJ3MgcG9z aXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBwYWdlIHRvIHJl YWQgbmV4dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVk IGFzIG5lZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4dCBpdGVtIHRv IHJldHVybiB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQuCi0gKgotICoJ CU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRlIHNvLT5jdXJy UG9zLiAgSXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJu IHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xsIG5lZWQgdG8g Y2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAqCQlPbiBzdWNj ZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0 IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAoZWxzZSB3ZSdk IGp1c3QgcmV0dXJuIE5VTEwpLgorICoJCU5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTCBkb2Vzbid0 IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUKKyAqCQl0b3AtbGV2ZWwgc2NhbjsgY2Fs bGVyIHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVybWluZQorICoJCWlmIGFu b3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKi8KLWJvb2wKLV9idF9u ZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNjYW5CYXRj aAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgSW5kZXhT Y2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBp ZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRo IGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlm ICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0J CQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQot CX0KLQllbHNlCi0JewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBv cy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJ cmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJl dHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1 cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4g Ynkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVz Y3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0 IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNj YW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRl eCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5k ZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVy IGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhl YXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVw bGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0g KglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRh dGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJm b3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwg c28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRo b3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUg d29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdl IG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGlj IGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlC VEJhdGNoRGF0YSAqYnRwcmlvcmJhdGNoID0gQlRCYXRjaEdldERhdGEoc2NhbiwgcHJpb3JiYXRj aCk7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFzdGN1cnJibGtubzsKLQotCUFzc2VydChC VFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKiBCZWZvcmUgbGVhdmluZyBjdXJy ZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JaWYgKHNvLT5udW1LaWxs ZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOworCWJvb2wJCW1vcmVJbkRpcjsKIAogCS8q Ci0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0aGUgcGFnZSBk YXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRzIGl0LgorCSAq IFRoZSBjb3JlIGNvZGUgbXVzdCBkZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBkaXJlY3Rpb24g Y2hhbmdlcyBmb3IgdXMuCisJICogQSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUgdGhhdCBmbGlw cyBwcmlvcmJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24gKGFuZAorCSAqIGNhbGxzIGJ0cG9zcmVzZXQg dG8gZGVhbCB3aXRoIHRoZSBzY2FuJ3MgYXJyYXkga2V5cykgaXMgdXNlZCBmb3IgdGhpcy4KIAkg Ki8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAgcGluIG9uIGN1 cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0JCWlmIChCVFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291bnQoc28tPmN1 cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9zLAotCQkJICAg b2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5jdXJyUG9zLmxh c3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJrVHVwbGVzKQot CQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkgICBzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXggPSBzby0+bWFy a0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgotCQkgKiBJZiB3 ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRleCBzY2FuCi0J CSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywgYW5kIG5lZWRz IHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24p LCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZSBj dXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5ldmVyIGJlIHRh a2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhhcyBlbmRlZAot CQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxkIGhhbmRsZSB0 aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwotCQkgKiBtYXJr UG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBzdGF0ZSBsaWtl IHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBqdXN0IHVuc2V0 IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAod2hpY2hldmVy IG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJwb3MgcmVzZXQg dGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9ucy4KLQkJICog SW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5cyB1cCB0byB0 aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxhY2UgYWZ0ZXIg aXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVkUHJpbVNjYW4p Ci0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9zLmRpcikpCi0J CQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlzby0+bWFya1Bv cy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90IHN1cHBvcnRl ZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVsX3NjYW4pOwot CX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCUFzc2VydChwcmlv cmJhdGNoLT5kaXIgPT0gZGlyKTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRh dGEgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtubyA9IHNvLT5j dXJyUG9zLm5leHRQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+bmV4dFBhZ2U7CiAJZWxz ZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxrbm8gPSBzby0+ Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBidHByaW9yYmF0Y2gtPnByZXZQYWdlOworCWxh c3RjdXJyYmxrbm8gPSBidHByaW9yYmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0cHJpb3JiYXRjaC0+bW9yZVJpZ2h0IDogYnRw cmlvcmJhdGNoLT5tb3JlTGVmdDsKIAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBz Y2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBfYnRfcmVhZHBh Z2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8g dGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBs ZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0 X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKKwkgKiBGb3IgYml0bWFwIHNjYW4gY2FsbGVy cywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQKKwkgKiBfYnRfcmVhZG5leHRw YWdlIGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5ldmVyCisJ ICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCiAJICovCi0JaWYgKHNvLT5j dXJyUG9zLmRpciAhPSBkaXIpCi0JCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlpZiAoIXNj YW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgcHJp b3JiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIpCisJeworCQkv KgorCQkgKiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmluYWwgbGVhZiBw YWdlIHdpdGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChpdHMgX2J0X3Jl YWRwYWdlIGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6IGlmIHNvLT5u ZWVkUHJpbVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2UgaXMKKwkJICog YWN0dWFsbHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGlu ZGV4IHNjYW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4gd2lsbCBjb250 aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJ CXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBm YWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLwogCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQpAQCAtMTczMiwxNzggKzE2NDIsMTY5IEBAIF9idF9z dGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogICogdG8gc3Rv cCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlzIGFnYWluc3Qg dGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0YWlscy4KICAq Ci0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAoc28g b2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11c3QgYmUgcGlu bmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJhbGxlbCBzY2Fu IGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgog ICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBhbmQgcmV0YWlu ZWQgbG9ja3MgYW5kIHBpbnMKLSAqIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcyBhcyB0aG9z ZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRuZXh0cGFnZSBleGl0LgotICogTGlrZSBfYnRfcmVhZG5l eHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGVyZSBhcmUgYW55IG1hdGNo aW5nCi0gKiByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKiBPbiBzdWNjZXNzIGV4 aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQg cGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVyZSBh cmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisgKiBnaXZlbiBzY2FuIGRpcmVjdGlvbiwgd2Ug anVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICogZG9lc24ndCBu ZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBidGdldGJhdGNo IGFuZAorICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBkZXRlcm1pbmUg aWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQuCiAgKgogICog V2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBjYWxsZXIsIHJl Z2FyZGxlc3Mgb2YKICAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBfYnRfcGFyYWxs ZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAotX2J0X3Jl YWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2Fu RGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X3JlYWRmaXJzdHBhZ2Uo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAorCQkJCSAgT2Zm c2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0 Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNoKTsKKwlCbG9ja051bWJlciBibGtu bywKKwkJCQlsYXN0Y3VycmJsa25vOworCWJvb2wJCW1vcmVJbkRpcjsKIAotCXNvLT5udW1LaWxs ZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5vaWEgKi8KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwkJ LyogZGl0dG8gKi8KLQotCS8qIEluaXRpYWxpemUgc28tPmN1cnJQb3MgZm9yIHRoZSBmaXJzdCBw YWdlIChwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZikgKi8KKwkvKiBJbml0aWFsaXplIGZpcnN0YmF0 Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5lZWRQcmltU2Nh bikKIAl7CiAJCUFzc2VydChzby0+bnVtQXJyYXlLZXlzKTsKIAotCQlzby0+Y3VyclBvcy5tb3Jl TGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWJ0Zmlyc3Ri YXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7 CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJZWxzZSBpZiAoU2NhbkRpcmVjdGlv bklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKLQkJ c28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5tb3JlTGVmdCA9 IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQogCWVsc2UKIAl7 Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0 Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJICogQXR0ZW1wdCB0byBsb2FkIG1h dGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgogCSAqCi0JICogTm90ZSB0aGF0IF9i dF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHNvLT5jdXJyUG9zIGZpZWxk cy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0 aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRwYWdlIGFsc28gcmVsZWFzZXMgcGFy YWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFsc2UpLgogCSAqLwotCWlmIChfYnRf cmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQorCWlmIChfYnRfcmVhZHBhZ2Uoc2Nh biwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQogCXsKLQkJUmVsYXRpb24JcmVsID0g c2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ugc3VjY2VlZGVk LiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNvLT5jdXJyUG9z LmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCQkg Ki8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCV9idF9kcm9w X2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJCS8qIF9idF9y ZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGZpcnN0YmF0Y2guaXRlbXNbXSAq LworCQlfYnRfYmF0Y2hfdW5sb2NrKHNjYW4sIGZpcnN0YmF0Y2gsIGJ0Zmlyc3RiYXRjaC0+YnVm KTsKKwkJcmV0dXJuIGZpcnN0YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBhY3R1YWxseS1t YXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwotCV9idF91bmxv Y2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkvKiBUaGVyZSdz IG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgcmV0dXJuZWQgYnkgX2J0X3Nl YXJjaCAqLworCV9idF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgYnRmaXJzdGJhdGNoLT5i dWYpOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRfc3RlcHBhZ2Ug d3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCXJl dHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRhICovCisJaWYg KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPm5l eHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPnByZXZQYWdlOworCWxhc3Rj dXJyYmxrbm8gPSBidGZpcnN0YmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9IFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0IDogYnRmaXJz dGJhdGNoLT5tb3JlTGVmdDsKIAotCS8qIF9idF9yZWFkcGFnZSBmb3IgYSBsYXRlciBwYWdlIChu b3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwotCXJldHVybiB0cnVlOworCS8qIFJlbGVh c2UgZmlyc3RiYXRjaCAod2lsbCBiZSByZWN5Y2xlZCBpZiB3ZSByZWFjaCBfYnRfcmVhZG5leHRw YWdlKSAqLworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0YmF0Y2gpOwor CisJaWYgKGJsa25vID09IFBfTk9ORSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoKKwkJICogZmly c3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9uICh0 aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2FuIHdpbGwgY29u dGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJ CXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuICE9IE5VTEwg JiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBm YWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJpbVNjYW4gd2Fz bid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxhc3Rj dXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgogICoJX2J0X3JlYWRuZXh0cGFnZSgpIC0t IFJlYWQgbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3IgX2J0X25leHQKICAqCi0g KiBDYWxsZXIncyBibGtubyBpcyB0aGUgbmV4dCBpbnRlcmVzdGluZyBwYWdlJ3MgbGluaywgdGFr ZW4gZnJvbSBlaXRoZXIgdGhlCi0gKiBwcmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxpbmsgb3IgbGVm dCBsaW5rLiAgbGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0Ci0gKiB3YXMgY3VycmVudCBh dCB0aGUgcG9pbnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNhdmVkLCB3aGljaCB3ZSB1c2Ug dG8KLSAqIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2UgZGVsZXRpb25z IGR1cmluZyBiYWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgc2Vp emVkPWZhbHNlLCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UKLSAqIG9yIHNv LT5jdXJyUG9zLnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBpcyBzby0+Y3VyclBvcy5jdXJy UGFnZS4KKyAqIENhbGxlcidzIGJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIG5leHRQYWdlIG9y IHByZXZQYWdlIChkZXBlbmRpbmcgb24gdGhlCisgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKSwg YW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgY3VyclBhZ2UuCisgKiBXZSB1 c2UgbGFzdGN1cnJibGtubyB0byByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNwbGl0cy9w YWdlIGRlbGV0aW9ucworICogZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KICAqCi0gKiBPbiBlbnRy eSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBzby0+Y3VyclBv cy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVkZWQgYnkgY2Fs bGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBiZSByZWFkIGFn YWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJzCi0gKiB0aGF0 IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNzIHNlaXplZD10 cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25vIGFyZ3VtZW50 cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNhbGxlcnMganVz dCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhlaXIKLSAqIHNv LT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYpIGNhbiBiZSB1 c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBj YW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0IGJlIHJlYWQg bmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZpZ3VyZSB0aGF0 Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4gKHRoZSBjb3Jy ZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhlIHNlaXplZD1m YWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICogdW5sZXNzIGJs a25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlzIGFscmVhZHkg UF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+Y3VyclBvcy5t b3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdlIHNob3VsZCBi ZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28tPmN1cnJQb3Mg aXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50ZXJlc3Rpbmcg cGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUgYnVmZmVyIG9u Ci0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5kZXggc2NhbnMs IHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2NraW5nIFZBQ1VV TSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmlu ZyBkYXRhIGZyb20gdGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNo aW5nIGl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcworICogaW4gdGhl IGdpdmVuIHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90ZSB0aGF0IHJl dHVybmluZyBOVUxMCisgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUg dG9wLWxldmVsIHNjYW47IGJ0Z2V0YmF0Y2ggYW5kCisgKiBidGdldGJpdG1hcCBjaGVjayBzby0+ bmVlZFByaW1TY2FuIHRvIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBpbmRleAorICog c2NhbiBpcyByZXF1aXJlZC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBy ZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAqIHNvLT5jdXJy UG9zICh3aGlsZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMpLCBhbmQgcmV0 dXJuIGZhbHNlLgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFs bGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdl J2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqIFBh cmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhl cmUuICBibGtubyBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2Vp emVkIHNjYW4uICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFzIHBvc3NpYmxl LgogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRfcmVhZG5leHRw YWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJIEJsb2NrTnVt YmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXplZCkKKwkJCQkg QmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3Rw YWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2NhbkJhdGNoIG5l d2JhdGNoOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoOwogCi0JQXNzZXJ0KHNvLT5jdXJyUG9z LmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVkKTsKLQlBc3NlcnQoIShibGtubyA9 PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3Vy clBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXcgYmF0Y2ggKi8KKwluZXdiYXRjaCA9 IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKKwlidG5ld2JhdGNoID0gQlRCYXRjaEdl dERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCiAJLyoKLQkgKiBSZW1lbWJlciB0aGF0IHRoZSBzY2Fu IGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBi bGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBhZ2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dh cmRzIHNjYW5zKQorCSAqIG5ld2JhdGNoIHdpbGwgYmUgdGhlIGJhdGNoIGZvciBibGtubywgYSBw YWdlIHRvIHRoZSByaWdodCBvZgorCSAqIGxhc3RjdXJyYmxrbm8gKG9yIHRvIHRoZSBsZWZ0LCB3 aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBiYWNrd2FyZHMpLgorCSAqCisJICogTm90ZTogY2FsbGVy J3MgYmxrbm8gaXMgdGVudGF0aXZlLiAgbmV3YmF0Y2ggYWN0dWFsbHkgc3RvcmVzIG1hdGNoZXMK KwkgKiBmcm9tIHRoZSBuZXh0IGxlYWYgcGFnZSBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIHRoYXQg aGFzIGF0IGxlYXN0IG9uZQorCSAqIG1hdGNoaW5nIGl0ZW0uICBUaGlzIGlzIHVzdWFsbHkgY2Fs bGVyJ3MgYmxrbm8gcGFnZSwgYnV0IG1pZ2h0IGJlIHNvbWUKKwkgKiBvdGhlciBwYWdlIHRvIGl0 cyByaWdodCAob3IgdG8gaXRzIGxlZnQpIGluc3RlYWQuCiAJICovCi0JaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCWVsc2UK LQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwlidG5ld2JhdGNoLT5tb3JlTGVmdCA9 IHRydWU7CS8qIGZvciBsYXN0Y3VycmJsa25vIChvciB0ZW50YXRpdmUpICovCisJYnRuZXdiYXRj aC0+bW9yZVJpZ2h0ID0gdHJ1ZTsJLyogdGVudGF0aXZlIChvciBmb3IgbGFzdGN1cnJibGtubykg Ki8KIAogCWZvciAoOzspCiAJewogCQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFxdWUgb3BhcXVl OwogCi0JCWlmIChibGtubyA9PSBQX05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikgPwotCQkJICFzby0+Y3VyclBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQb3MubW9yZUxl ZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAoZm9yIGxhc3Rj dXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9 PSBsYXN0Y3VycmJsa25vICYmICFzZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+ Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFzby0+bmVlZFBy aW1TY2FuICovCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNvLT5uZWVkUHJp bVNjYW4pOwotCi0JCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxseSB2aXNpdCBz by0+Y3VyclBvcyBibGtubyAqLwotCQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1 cnJibGtubywgZmFsc2UpKQotCQl7Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBkb25lIChvciBh bm90aGVyIHByaW1pdGl2ZSBzY2FuIHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9zSW52YWxpZGF0 ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0KCEoKEJUU2Nh bk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0KGJsa25vICE9 IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyKSkKIAkJewogCQkJLyogcmVhZCBibGtubywgYnV0IGNoZWNrIGZvciBp bnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwotCQkJc28tPmN1 cnJQb3MuYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJCWJ0bmV3YmF0 Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CiAJCX0KIAkJZWxzZQog CQl7CiAJCQkvKiByZWFkIGJsa25vLCBhdm9pZGluZyByYWNlIChhbHNvIGNoZWNrcyBmb3IgaW50 ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9sb2NrX2FuZF92YWxpZGF0ZV9s ZWZ0KHJlbCwgJmJsa25vLAorCQkJYnRuZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlk YXRlX2xlZnQocmVsLCAmYmxrbm8sCiAJCQkJCQkJCQkJCQkJCSBsYXN0Y3VycmJsa25vKTsKLQkJ CWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZlcikKKwkJCWlmIChidG5ld2JhdGNo LT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUgYmVlbiBhIGNv bmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2NhblBvc0ludmFs aWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOwotCQkJCXJl dHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRj aCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0gQnVmZmVyR2V0UGFn ZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidG5ld2JhdGNoLT5i dWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJCWxhc3RjdXJyYmxrbm8g PSBibGtubzsKIAkJaWYgKGxpa2VseSghUF9JR05PUkUob3BhcXVlKSkpCkBAIC0xOTExLDE3ICsx ODEyLDE3IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJl ciBibGtubywKIAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24gdGhpcyBwYWdl ICovCiAJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJewotCQkJCS8qIG5v dGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJ aWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIHNlaXpl ZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkg UF9GSVJTVERBVEFLRVkob3BhcXVlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxr bm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0Y2gtPm5leHRQ YWdlOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xl YXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4s IGRpciwgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJCQlpZiAoX2J0 X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0TWF4T2Zmc2V0 TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtubyA9IHNvLT5j dXJyUG9zLnByZXZQYWdlOworCQkJCWJsa25vID0gYnRuZXdiYXRjaC0+cHJldlBhZ2U7CiAJCQl9 CiAJCX0KIAkJZWxzZQpAQCAtMTkzNiwxOSArMTgzNywzOCBAQCBfYnRfcmVhZG5leHRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkvKiBubyBtYXRj aGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBv cy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRfcmVhZHBhZ2Ug KG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgYnRuZXdiYXRjaC0+YnVmKTsKKworCQkv KiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbj8gKi8KKwkJaWYgKGJsa25vID09 IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCQkgIWJ0bmV3 YmF0Y2gtPm1vcmVSaWdodCA6ICFidG5ld2JhdGNoLT5tb3JlTGVmdCkpCisJCXsKKwkJCS8qCisJ CQkgKiBibGtubyBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGlyZWN0aW9u ICh0aG91Z2ggaWYKKwkJCSAqIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUgc2NhbiB3aWxs IGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJCSAqLworCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nh bik7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRjaCk7CisJCQly ZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6ZSB0aGUgc2Nh biB0byBnZXQgbmV4dCBibGtubyAqLworCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxM ICYmCisJCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8s IGZhbHNlKSkKKwkJeworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgbmV3YmF0 Y2gpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1TY2FuIHdhc24n dCBzZXQgKi8KKwkJfQorCisJCWZpcnN0cGFnZSA9IGZhbHNlOwkJLyogbmV4dCBwYWdlIGNhbm5v dCBiZSBmaXJzdCAqLwogCX0KIAotCS8qCi0JICogX2J0X3JlYWRwYWdlIHN1Y2NlZWRlZC4gIERy b3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBvbgotCSAqIHNvLT5jdXJyUG9zLmJ1ZiBp biBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgotCSAqLwotCUFz c2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBibGtubyk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lz UGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwg c28pOworCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIG5ld2Jh dGNoLml0ZW1zW10gKi8KKwlBc3NlcnQoYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPT0gYmxrbm8pOwor CV9idF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0Y2gsIGJ0bmV3YmF0Y2gtPmJ1Zik7CiAKLQly ZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9CiAKIC8qCkBAIC0yMTc0LDI1ICsyMDk0 LDI0IEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wg cmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBzZWl6ZWQgdGhl IHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4aXQgY29uZGl0aW9ucyBhcmUgdGhlIHNh bWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1zdGF0aWMgYm9vbAotX2J0X2VuZHBvaW50KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5kZXhTY2FuQmF0 Y2gKK19idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBJ bmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4 UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVl OworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJz dGJhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVt YmVyIHN0YXJ0OwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0J QXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKKwlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2Fu LT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOwogCiAJLyoKIAkgKiBTY2FuIGRvd24gdG8gdGhlIGxl ZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxpZmllZAogCSAq IHZlcnNpb24gb2YgX2J0X3NlYXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9n ZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKKwlidGZp cnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNC YWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQor CWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJewogCQkvKgogCQkgKiBF bXB0eSBpbmRleC4gTG9jayB0aGUgd2hvbGUgcmVsYXRpb24sIGFzIG5vdGhpbmcgZmluZXIgdG8g bG9jawpAQCAtMjIwMyw3ICsyMTIyLDcgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlwYWdlID0gQnVm ZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0Zmly c3RiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJQXNzZXJ0 KFBfSVNMRUFGKG9wYXF1ZSkpOwogCkBAIC0yMjI5LDkgKzIxNDgsNSBAQCBfYnRfZW5kcG9pbnQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAqIE5vdyBsb2Fk IGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlpZiAoIV9idF9y ZWFkZmlyc3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRf cmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9idF9yZWFkZmly c3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25i dHJlZS9uYnR1dGlscy5jCmluZGV4IDliMDkxODU4OS4uNzZiMzgzMDFhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR1dGlscy5jCkBAIC0xOSwxNyArMTksMTMgQEAKIAogI2luY2x1ZGUgImFj Y2Vzcy9uYnRyZWUuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsb3B0aW9ucy5oIgotI2luY2x1ZGUg ImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJvZ3Jlc3MuaCIKLSNpbmNs dWRlICJjb21tb24vaW50LmgiCi0jaW5jbHVkZSAibGliL3F1bmlxdWUuaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2xz eXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCiAKLXN0YXRpYyBpbnQJX2J0X2Nv bXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CiBzdGF0aWMgaW50CV9i dF9rZWVwX25hdHRzKFJlbGF0aW9uIHJlbCwgSW5kZXhUdXBsZSBsYXN0bGVmdCwKIAkJCQkJCSAg IEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0dXBfa2V5KTsKIApAQCAtMTQ0 LDI0NyArMTQwLDYgQEAgX2J0X21rc2NhbmtleShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgaXR1 cCkKIAlyZXR1cm4ga2V5OwogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBm b3IgaW50IGFycmF5cwotICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9p ZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEp OwotCWludAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIo YSwgYik7Ci19Ci0KLS8qCi0gKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9y IGl0ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkCi0g KgotICogc2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFp bnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBs ZXMgdGhlcmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYg c28tPm51bUtpbGxlZCA+IDApLgotICoKLSAqIENhbGxlciBzaG91bGQgbm90IGhhdmUgYSBsb2Nr IG9uIHRoZSBzby0+Y3VyclBvcyBwYWdlLCBidXQgbXVzdCBob2xkIGEKLSAqIGJ1ZmZlciBwaW4g d2hlbiAhc28tPmRyb3BQaW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9j a2VkLgotICogSXQnbGwgY29udGludWUgdG8gaG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBi ZWZvcmUgY2FsbGluZyBoZXJlLgotICoKLSAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJl Zm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKLSAqIExQX0RFQUQu ICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdl dCBwYWdlCi0gKiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMg dW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlvbgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGlu IHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUgZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCi0gKiBw YWdlLCBzbyB0aGUgcGFnZSdzIFRJRHMgY2FuJ3QgaGF2ZSBiZWVuIHJlY3ljbGVkIGJ5IG5vdy4g IFRoZXJlJ3Mgbm8gcmlzawotICogdGhhdCB3ZSdsbCBjb25mdXNlIGEgbmV3IGluZGV4IHR1cGxl IHRoYXQgaGFwcGVucyB0byB1c2UgYSByZWN5Y2xlZCBUSUQKLSAqIHdpdGggYSBub3ctcmVtb3Zl ZCB0dXBsZSB3aXRoIHRoZSBzYW1lIFRJRCAodGhhdCB1c2VkIHRvIGJlIG9uIHRoaXMgc2FtZQot ICogcGFnZSkuICBXZSBjYW4ndCByZWx5IG9uIHRoYXQgZHVyaW5nIHNjYW5zIHRoYXQgZHJvcCBi dWZmZXIgcGlucyBlYWdlcmx5Ci0gKiAoc28tPmRyb3BQaW4gc2NhbnMpLCB0aG91Z2gsIHNvIHdl IG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCi0gKiB0aGUgcGFnZSBMU04g aGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfYnRfcmVhZHBhZ2Ugc2F3IHRoZSBw YWdlLgotICogV2UgdG90YWxseSBnaXZlIHVwIG9uIHNldHRpbmcgTFBfREVBRCBiaXRzIHdoZW4g dGhlIHBhZ2UgTFNOIGNoYW5nZWQuCi0gKgotICogV2UgZ2l2ZSB1cCBtdWNoIGxlc3Mgb2Z0ZW4g ZHVyaW5nICFzby0+ZHJvcFBpbiBzY2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCi0gKiBXZSBj b3BlIHdpdGggY2FzZXMgd2hlcmUgaXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0 aW9ucy4gIElmIGFuCi0gKiBpdGVtIGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUg dG8gYSBzcGxpdCwgd2UnbGwgZmFpbCB0byBmaW5kIGl0Ci0gKiBhbmQganVzdCBnaXZlIHVwIG9u IGl0LgotICovCi12b2lkCi1fYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlS ZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChC VFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlQYWdlCQlwYWdlOwotCUJUUGFnZU9wYXF1ZSBv cGFxdWU7Ci0JT2Zmc2V0TnVtYmVyIG1pbm9mZjsKLQlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWlu dAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0g ZmFsc2U7Ci0JQnVmZmVyCQlidWY7Ci0KLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0 KEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uICE9IE5VTEwpOyAvKiBjYW4ndCBiZSBhIGJpdG1hcCBpbmRleCBzY2FuICovCi0KLQkvKiBB bHdheXMgaW52YWxpZGF0ZSBzby0+a2lsbGVkSXRlbXNbXSBiZWZvcmUgbGVhdmluZyBzby0+Y3Vy clBvcyAqLwotCXNvLT5udW1LaWxsZWQgPSAwOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIGl0ZXJh dGUgdGhyb3VnaCBzby0+a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXI7IHRoZQotCSAq IGxvb3AgYmVsb3cgZXhwZWN0cyB0aGlzICh3aGVuIG1hcmtpbmcgcG9zdGluZyBsaXN0IHR1cGxl cywgYXQgbGVhc3QpLgotCSAqIHNvLT5raWxsZWRJdGVtc1tdIGlzIG5vdyBpbiB3aGF0ZXZlciBv cmRlciB0aGUgc2NhbiByZXR1cm5lZCBpdGVtcyBpbi4KLQkgKiBTY3JvbGxhYmxlIGN1cnNvciBz Y2FucyBtaWdodCBoYXZlIGV2ZW4gc2F2ZWQgdGhlIHNhbWUgaXRlbS9USUQgdHdpY2UuCi0JICoK LQkgKiBTb3J0IGFuZCB1bmlxdWUtaWZ5IHNvLT5raWxsZWRJdGVtc1tdIHRvIGRlYWwgd2l0aCBh bGwgdGhpcy4KLQkgKi8KLQlpZiAobnVtS2lsbGVkID4gMSkKLQl7Ci0JCXFzb3J0KHNvLT5raWxs ZWRJdGVtcywgbnVtS2lsbGVkLCBzaXplb2YoaW50KSwgX2J0X2NvbXBhcmVfaW50KTsKLQkJbnVt S2lsbGVkID0gcXVuaXF1ZShzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCks Ci0JCQkJCQkJX2J0X2NvbXBhcmVfaW50KTsKLQl9Ci0KLQlpZiAoIXNvLT5kcm9wUGluKQotCXsK LQkJLyoKLQkJICogV2UgaGF2ZSBoZWxkIHRoZSBwaW4gb24gdGhpcyBwYWdlIHNpbmNlIHdlIHJl YWQgdGhlIGluZGV4IHR1cGxlcywKLQkJICogc28gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbG9jayBp dC4gIFRoZSBwaW4gd2lsbCBoYXZlIHByZXZlbnRlZAotCQkgKiBjb25jdXJyZW50IFZBQ1VVTXMg ZnJvbSByZWN5Y2xpbmcgYW55IG9mIHRoZSBUSURzIG9uIHRoZSBwYWdlLgotCQkgKi8KLQkJQXNz ZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IHNvLT5jdXJyUG9z LmJ1ZjsKLQkJX2J0X2xvY2tidWYocmVsLCBidWYsIEJUX1JFQUQpOwotCX0KLQllbHNlCi0Jewot CQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKLQotCQlBc3NlcnQoIUJUU2NhblBvc0lzUGlubmVkKHNv LT5jdXJyUG9zKSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFn ZSwgQlRfUkVBRCk7Ci0KLQkJbGF0ZXN0bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7Ci0J CUFzc2VydChzby0+Y3VyclBvcy5sc24gPD0gbGF0ZXN0bHNuKTsKLQkJaWYgKHNvLT5jdXJyUG9z LmxzbiAhPSBsYXRlc3Rsc24pCi0JCXsKLQkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRp bmcgKi8KLQkJCV9idF9yZWxidWYocmVsLCBidWYpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJLyog VW5tb2RpZmllZCwgaGludGluZyBpcyBzYWZlICovCi0JfQotCi0JcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKLQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7Ci0JbWlub2ZmID0gUF9G SVJTVERBVEFLRVkob3BhcXVlKTsKLQltYXhvZmYgPSBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBh Z2UpOwotCi0JLyogSXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVtc1tdIGluIGxlYWYgcGFn ZSBvcmRlciAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBpKyspCi0JewotCQlp bnQJCQlpdGVtSW5kZXggPSBzby0+a2lsbGVkSXRlbXNbaV07Ci0JCUJUU2NhblBvc0l0ZW0gKmtp dGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07Ci0JCU9mZnNldE51bWJlciBvZmZu dW0gPSBraXRlbS0+aW5kZXhPZmZzZXQ7Ci0KLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3Vy clBvcy5maXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRl bSk7Ci0JCUFzc2VydChpID09IDAgfHwKLQkJCSAgIG9mZm51bSA+PSBzby0+Y3VyclBvcy5pdGVt c1tzby0+a2lsbGVkSXRlbXNbaSAtIDFdXS5pbmRleE9mZnNldCk7Ci0KLQkJaWYgKG9mZm51bSA8 IG1pbm9mZikKLQkJCWNvbnRpbnVlOwkJCS8qIHB1cmUgcGFyYW5vaWEgKi8KLQkJd2hpbGUgKG9m Zm51bSA8PSBtYXhvZmYpCi0JCXsKLQkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdl LCBvZmZudW0pOwotCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0 ZW0ocGFnZSwgaWlkKTsKLQkJCWJvb2wJCWtpbGx0dXBsZSA9IGZhbHNlOwotCi0JCQlpZiAoQlRy ZWVUdXBsZUlzUG9zdGluZyhpdHVwbGUpKQotCQkJewotCQkJCWludAkJCXBpID0gaSArIDE7Ci0J CQkJaW50CQkJbnBvc3RpbmcgPSBCVHJlZVR1cGxlR2V0TlBvc3RpbmcoaXR1cGxlKTsKLQkJCQlp bnQJCQlqOwotCi0JCQkJLyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVl biBtb2RpZmllZCBpbiBhbG1vc3QgYW55IHdheQotCQkJCSAqIHNpbmNlIHdlIGZpcnN0IHJlYWQg aXQgKGluIHRoZSAhc28tPmRyb3BQaW4gY2FzZSksIHNvIGl0J3MKLQkJCQkgKiBwb3NzaWJsZSB0 aGF0IHRoaXMgcG9zdGluZyBsaXN0IHR1cGxlIHdhc24ndCBhIHBvc3RpbmcgbGlzdAotCQkJCSAq IHR1cGxlIHdoZW4gd2UgZmlyc3QgZW5jb3VudGVyZWQgaXRzIGhlYXAgVElEcy4KLQkJCQkgKi8K LQkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKLQkJCQl7Ci0JCQkJCUl0ZW1Qb2lu dGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKLQotCQkJCQlpZiAo IUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+aGVhcFRpZCkpCi0JCQkJCQlicmVhazsJ Lyogb3V0IG9mIHBvc3RpbmcgbGlzdCBsb29wICovCi0KLQkJCQkJLyoKLQkJCQkJICoga2l0ZW0g bXVzdCBoYXZlIG1hdGNoaW5nIG9mZm51bSB3aGVuIGhlYXAgVElEcyBtYXRjaCwKLQkJCQkJICog dGhvdWdoIG9ubHkgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHRoZSBwYWdlIGNhbid0Ci0JCQkJ CSAqIGhhdmUgYmVlbiBjb25jdXJyZW50bHkgbW9kaWZpZWQKLQkJCQkJICovCi0JCQkJCUFzc2Vy dChraXRlbS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtIHx8ICFzby0+ZHJvcFBpbik7Ci0KLQkJCQkJ LyoKLQkJCQkJICogUmVhZC1haGVhZCB0byBsYXRlciBraXRlbXMgaGVyZS4KLQkJCQkJICoKLQkJ CQkJICogV2UgcmVseSBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IG5vdCBhZHZhbmNpbmcga2l0ZW0g aGVyZQotCQkJCQkgKiB3aWxsIHByZXZlbnQgdXMgZnJvbSBjb25zaWRlcmluZyB0aGUgcG9zdGlu ZyBsaXN0IHR1cGxlCi0JCQkJCSAqIGZ1bGx5IGRlYWQgYnkgbm90IG1hdGNoaW5nIGl0cyBuZXh0 IGhlYXAgVElEIGluIG5leHQKLQkJCQkJICogbG9vcCBpdGVyYXRpb24uCi0JCQkJCSAqCi0JCQkJ CSAqIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBpcyB0aGUgZmluYWwgaGVhcCBUSUQgaW4K LQkJCQkJICogdGhlIHBvc3RpbmcgbGlzdCB0dXBsZSwgdGhlbiB0dXBsZSBnZXRzIGtpbGxlZAot CQkJCQkgKiByZWdhcmRsZXNzIChpLmUuIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbGFz dAotCQkJCQkgKiBraXRlbSBpcyBhbHNvIHRoZSBsYXN0IGhlYXAgVElEIGluIHRoZSBsYXN0IGlu ZGV4IHR1cGxlCi0JCQkJCSAqIGNvcnJlY3RseSAtLSBwb3N0aW5nIHR1cGxlIHN0aWxsIGdldHMg a2lsbGVkKS4KLQkJCQkJICovCi0JCQkJCWlmIChwaSA8IG51bUtpbGxlZCkKLQkJCQkJCWtpdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5raWxsZWRJdGVtc1twaSsrXV07Ci0JCQkJfQotCi0J CQkJLyoKLQkJCQkgKiBEb24ndCBib3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdz IGludCBpdGVyYXRvciB0bwotCQkJCSAqIGF2b2lkIHByb2Nlc3Npbmcga2lsbGVkIGl0ZW1zIHRo YXQgcmVsYXRlIHRvIHRoZSBzYW1lCi0JCQkJICogb2ZmbnVtL3Bvc3RpbmcgbGlzdCB0dXBsZS4g IFRoaXMgbWljcm8tb3B0aW1pemF0aW9uIGhhcmRseQotCQkJCSAqIHNlZW1zIHdvcnRoIGl0LiAg KEZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgb3V0ZXJtb3N0IGxvb3AKLQkJCQkgKiB3aWxsIGZh aWwgdG8gbWF0Y2ggb24gdGhpcyBzYW1lIHBvc3RpbmcgbGlzdCdzIGZpcnN0IGhlYXAKLQkJCQkg KiBUSUQgaW5zdGVhZCwgc28gd2UnbGwgYWR2YW5jZSB0byB0aGUgbmV4dCBvZmZudW0vaW5kZXgK LQkJCQkgKiB0dXBsZSBwcmV0dHkgcXVpY2tseS4pCi0JCQkJICovCi0JCQkJaWYgKGogPT0gbnBv c3RpbmcpCi0JCQkJCWtpbGx0dXBsZSA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmIChJdGVtUG9p bnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmtpdGVtLT5oZWFwVGlkKSkKLQkJCQlraWxsdHVw bGUgPSB0cnVlOwotCi0JCQkvKgotCQkJICogTWFyayBpbmRleCBpdGVtIGFzIGRlYWQsIGlmIGl0 IGlzbid0IGFscmVhZHkuICBTaW5jZSB0aGlzCi0JCQkgKiBoYXBwZW5zIHdoaWxlIGhvbGRpbmcg YSBidWZmZXIgbG9jayBwb3NzaWJseSBpbiBzaGFyZWQgbW9kZSwKLQkJCSAqIGl0J3MgcG9zc2li bGUgdGhhdCBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBkbyB0aGlzCi0JCQkgKiBzaW11 bHRhbmVvdXNseSwgbGVhZGluZyB0byBtdWx0aXBsZSBmdWxsLXBhZ2UgaW1hZ2VzIGJlaW5nIHNl bnQKLQkJCSAqIHRvIFdBTCAoaWYgd2FsX2xvZ19oaW50cyBvciBkYXRhIGNoZWNrc3VtcyBhcmUg ZW5hYmxlZCksIHdoaWNoCi0JCQkgKiBpcyB1bmRlc2lyYWJsZS4KLQkJCSAqLwotCQkJaWYgKGtp bGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCi0JCQl7Ci0JCQkJaWYgKCFraWxsZWRzb21l dGhpbmcpCi0JCQkJewotCQkJCQkvKgotCQkJCQkgKiBVc2UgdGhlIGhpbnQgYml0IGluZnJhc3Ry dWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgotCQkJCQkgKiB1cGRhdGUgdGhlIHBhZ2Ugd2hpbGUg anVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKLQkJCQkJICogYXJlIG5vdCBhbGxvd2Vk LCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCi0JCQkJCSAqLwotCQkJCQlpZiAoIUJ1ZmZl ckJlZ2luU2V0SGludEJpdHMoYnVmKSkKLQkJCQkJCWdvdG8gdW5sb2NrX3BhZ2U7Ci0JCQkJfQot Ci0JCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlzdCBpdGVtcyAqLwotCQkJCUl0 ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVh azsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9m ZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBj YW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LgotCSAqCi0J ICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3ZSBhbHNvIHNldCB0aGUgcGFn ZSdzCi0JICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBo aW50LiAgKE5vdGUgdGhhdCB3ZQotCSAqIG9ubHkgcmVseSBvbiB0aGUgcGFnZS1sZXZlbCBmbGFn IGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCi0JICovCi0JaWYgKGtpbGxlZHNvbWV0aGluZykK LQl7Ci0JCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dBUkJBR0U7Ci0JCUJ1ZmZlckZp bmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlp ZiAoIXNvLT5kcm9wUGluKQotCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKLQllbHNlCi0JCV9i dF9yZWxidWYocmVsLCBidWYpOwotfQotCi0KIC8qCiAgKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVz IG1hbmFnZSBhIHNoYXJlZC1tZW1vcnkgYXJlYSBpbiB3aGljaCB3ZSB0cmFjawogICogYXNzaWdu bWVudCBvZiAidmFjdXVtIGN5Y2xlIElEcyIgdG8gY3VycmVudGx5LWFjdGl2ZSBidHJlZSB2YWN1 dW1pbmcKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR4bG9nLmMKaW5kZXggZGZmN2QyODZmLi4zYmM1 ZTVjY2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxvZy5jCkBAIC0xMDk1LDE1ICsxMDk1 LDE1IEBAIGJ0cmVlX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJsa25vKQogCQkv KgogCQkgKiBJbiBidHJlZSBsZWFmIHBhZ2VzLCBpdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgdGhl IExQX0ZMQUdTIHdpdGhvdXQKIAkJICogZW1pdHRpbmcgYW55IFdBTCByZWNvcmQuIEhlbmNlLCBt YXNrIHRoZSBsaW5lIHBvaW50ZXIgZmxhZ3MuIFNlZQotCQkgKiBfYnRfa2lsbGl0ZW1zKCksIF9i dF9jaGVja191bmlxdWUoKSBmb3IgZGV0YWlscy4KKwkJICogYnRraWxsaXRlbXNiYXRjaCgpLCBf YnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFpbHMuCiAJCSAqLwogCQltYXNrX2xwX2ZsYWdzKHBh Z2UpOwogCX0KIAogCS8qCiAJICogQlRQX0hBU19HQVJCQUdFIGlzIGp1c3QgYW4gdW4tbG9nZ2Vk IGhpbnQgYml0LiBTbywgbWFzayBpdC4gU2VlCi0JICogX2J0X2RlbGV0ZV9vcl9kZWR1cF9vbmVf cGFnZSgpLCBfYnRfa2lsbGl0ZW1zKCksIGFuZCBfYnRfY2hlY2tfdW5pcXVlKCkKLQkgKiBmb3Ig ZGV0YWlscy4KKwkgKiBfYnRfZGVsZXRlX29yX2RlZHVwX29uZV9wYWdlKCksIGJ0a2lsbGl0ZW1z YmF0Y2goKSwgYW5kCisJICogX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgogCSAqLwog CW1hc2tvcGFxLT5idHBvX2ZsYWdzICY9IH5CVFBfSEFTX0dBUkJBR0U7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9zcGdpc3Qvc3BndXRpbHMuYwppbmRleCBhNDY5NGJkODAuLmU2MzNkYmNhZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYwpAQCAtODgsMTAgKzg4LDEyIEBAIHNwZ2hhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gc3BnYmVnaW5zY2FuLAogCQkuYW1y ZXNjYW4gPSBzcGdyZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gc3BnZ2V0dHVwbGUsCisJCS5hbWdl dGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAorCQkuYW11bmd1YXJk YmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNj YW4gPSBzcGdlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBO VUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2Fu ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKaW5kZXggYjg5YzY4NTUzLi5mYmZlM2I1 NDMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC04ODUsNyArODg1LDcgQEAgRGVmaW5l SW5kZXgoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5v dCBzdXBwb3J0IG11bHRpY29sdW1uIGluZGV4ZXMiLAogCQkJCQkJYWNjZXNzTWV0aG9kTmFtZSkp KTsKLQlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWlm IChleGNsdXNpb24gJiYgYW1Sb3V0aW5lLT5hbWdldHR1cGxlID09IE5VTEwgJiYgYW1Sb3V0aW5l LT5hbWdldGJhdGNoID09IE5VTEwpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImFjY2VzcyBtZXRob2Qg XCIlc1wiIGRvZXMgbm90IHN1cHBvcnQgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIiwKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNBbWkuYwppbmRleCAzN2ZlMDNmZGMuLjk3OWE4NTJmZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNB bWkuYwpAQCAtNDI5LDcgKzQyOSw3IEBAIEV4ZWNTdXBwb3J0c01hcmtSZXN0b3JlKFBhdGggKnBh dGhub2RlKQogCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKIAogCQkJLyoKLQkJCSAqIE5vdCBhbGwg aW5kZXggdHlwZXMgc3VwcG9ydCBtYXJrL3Jlc3RvcmUuCisJCQkgKiBOb3QgYWxsIGluZGV4IHR5 cGVzIHN1cHBvcnQgcmVzdG9yaW5nIGEgbWFyawogCQkJICovCiAJCQlyZXR1cm4gY2FzdE5vZGUo SW5kZXhQYXRoLCBwYXRobm9kZSktPmluZGV4aW5mby0+YW1jYW5tYXJrcG9zOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IDlkMDcxZTQ5NS4uM2YwYzg0NTNkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwpAQCAtODE1LDEwICs4MTUsMTIgQEAgY2hlY2tfZXhj bHVzaW9uX29yX3VuaXF1ZV9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4 LAogcmV0cnk6CiAJY29uZmxpY3QgPSBmYWxzZTsKIAlmb3VuZF9zZWxmID0gZmFsc2U7Ci0JaW5k ZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgJkRpcnR5U25hcHNob3QsIE5V TEwsIGluZG5rZXlhdHRzLCAwKTsKKwlpbmRleF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAs IGluZGV4LCBmYWxzZSwgJkRpcnR5U25hcHNob3QsIE5VTEwsCisJCQkJCQkJCSBpbmRua2V5YXR0 cywgMCk7CiAJaW5kZXhfcmVzY2FuKGluZGV4X3NjYW4sIHNjYW5rZXlzLCBpbmRua2V5YXR0cywg TlVMTCwgMCk7CiAKLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndh cmRTY2FuRGlyZWN0aW9uLCBleGlzdGluZ19zbG90KSkKKwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0 bmV4dF9zbG90KGluZGV4X3NjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJZXhp c3Rpbmdfc2xvdCkpCiAJewogCQlUcmFuc2FjdGlvbklkIHh3YWl0OwogCQlYTFRXX09wZXIJcmVh c29uX3dhaXQ7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCmluZGV4IDI0OTdl ZTdlZC4uMmY2MzZiYTNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVw bGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwpA QCAtMjA1LDcgKzIwNSw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoUmVsYXRpb24g cmVsLCBPaWQgaWR4b2lkLAogCXNrZXlfYXR0b2ZmID0gYnVpbGRfcmVwbGluZGV4X3NjYW5fa2V5 KHNrZXksIHJlbCwgaWR4cmVsLCBzZWFyY2hzbG90KTsKIAogCS8qIFN0YXJ0IGFuIGluZGV4IHNj YW4uICovCi0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgJnNuYXAsIE5VTEws IHNrZXlfYXR0b2ZmLCAwKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBm YWxzZSwgJnNuYXAsIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogcmV0cnk6CiAJZm91bmQgPSBm YWxzZTsKQEAgLTIxMyw3ICsyMTMsNyBAQCByZXRyeToKIAlpbmRleF9yZXNjYW4oc2Nhbiwgc2tl eSwgc2tleV9hdHRvZmYsIE5VTEwsIDApOwogCiAJLyogVHJ5IHRvIGZpbmQgdGhlIHR1cGxlICov Ci0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg b3V0c2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgb3V0c2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUg ZXF1YWxpdHkgY2hlY2sgaWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCkBAIC02NjYsMTIg KzY2NiwxMiBAQCBSZWxhdGlvbkZpbmREZWxldGVkVHVwbGVJbmZvQnlJbmRleChSZWxhdGlvbiBy ZWwsIE9pZCBpZHhvaWQsCiAJICogbm90IHlldCBjb21taXR0ZWQgb3IgdGhvc2UganVzdCBjb21t aXR0ZWQgcHJpb3IgdG8gdGhlIHNjYW4gYXJlCiAJICogZXhjbHVkZWQgaW4gdXBkYXRlX21vc3Rf cmVjZW50X2RlbGV0aW9uX2luZm8oKS4KIAkgKi8KLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJl bCwgaWR4cmVsLCBTbmFwc2hvdEFueSwgTlVMTCwgc2tleV9hdHRvZmYsIDApOworCXNjYW4gPSBp bmRleF9iZWdpbnNjYW4ocmVsLCBpZHhyZWwsIGZhbHNlLCBTbmFwc2hvdEFueSwgTlVMTCwgc2tl eV9hdHRvZmYsIDApOwogCiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBO VUxMLCAwKTsKIAogCS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9n ZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNjYW5zbG90KSkKKwl3aGls ZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBz Y2Fuc2xvdCkpCiAJewogCQkvKgogCQkgKiBBdm9pZCBleHBlbnNpdmUgZXF1YWxpdHkgY2hlY2sg aWYgdGhlIGluZGV4IGlzIHByaW1hcnkga2V5IG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl Qml0bWFwSW5kZXhzY2FuLmMKaW5kZXggNzBjNTVlZTZkLi45NjgyNGIzN2UgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVCaXRtYXBJbmRleHNjYW4uYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMKQEAgLTIwNCw2ICsyMDQsNyBAQCBF eGVjRW5kQml0bWFwSW5kZXhTY2FuKEJpdG1hcEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiB3 aGljaCB3aWxsIGhhdmUgYSBuZXcgQml0bWFwSW5kZXhTY2FuU3RhdGUgYW5kIHplcm9lZCBzdGF0 cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMgKz0gbm9kZS0+Ymlzc19JbnN0cnVt ZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3RydW1lbnQtPm5oZWFwZmV0 Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJbmRleG9ubHlz Y2FuLmMKaW5kZXggMWI4OTU3MGEyLi5hZWI0YmJjM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL25vZGVJbmRleG9ubHlzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgImFjY2Vzcy9y ZWxzY2FuLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dHVwZGVzYy5oIgotI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ190eXBlLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKICNpbmNs dWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCkBAIC00Miw3ICs0MSw2IEBACiAjaW5jbHVkZSAi ZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNhdGUuaCIKICNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCkBAIC02 Niw3ICs2NCw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCVNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCUluZGV4U2NhbkRlc2Mgc2NhbmRlc2M7CiAJVHVwbGVU YWJsZVNsb3QgKnNsb3Q7Ci0JSXRlbVBvaW50ZXIgdGlkOwogCiAJLyoKIAkgKiBleHRyYWN0IG5l Y2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIGluZGV4IHNjYW4gbm9kZQpAQCAtOTEsMTggKzg4LDE0 IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiBwYXJhbGxl bC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJl bnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSAgIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgICBlc3RhdGUtPmVz X3NuYXBzaG90LAogCQkJCQkJCQkgICBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAg IG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVtT3JkZXJC eUtleXMpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKLQotCi0JCS8qIFNl dCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhz X3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlkQnVmZmVy OworCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCQkvKgog CQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSByZWFkeSwg Z28gYWhlYWQgYW5kCkBAIC0xMTksNzkgKzExMiwxMSBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25s eVNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2Ug bmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9n ZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAodGFibGVf aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sCisJCQkJCQkJCQlub2RlLT5p b3NzX1RhYmxlU2xvdCkpCiAJewotCQlib29sCQl0dXBsZV9mcm9tX2hlYXAgPSBmYWxzZTsKLQog CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCS8qCi0JCSAqIFdlIGNhbiBza2lwIHRoZSBo ZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBvbgotCQkgKiB3aGlj aCBhbGwgdHVwbGVzIGFyZSBrbm93biB2aXNpYmxlIHRvIGV2ZXJ5Ym9keS4gIEluIGFueSBjYXNl LAotCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxlIG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0 aGUgZGF0YSBzb3VyY2UuCi0JCSAqCi0JCSAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVj dHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdAotCQkgKiBsb2NrIHRoZSB2aXNp YmlsaXR5IG1hcCBidWZmZXIsIGFuZCB0aGVyZWZvcmUgdGhlIHJlc3VsdCB3ZSByZWFkCi0JCSAq IGhlcmUgY291bGQgYmUgc2xpZ2h0bHkgc3RhbGUuICBIb3dldmVyLCBpdCBjYW4ndCBiZSBzdGFs ZSBlbm91Z2ggdG8KLQkJICogbWF0dGVyLgotCQkgKgotCQkgKiBXZSBuZWVkIHRvIGRldGVjdCBj bGVhcmluZyBhIFZNIGJpdCBkdWUgdG8gYW4gaW5zZXJ0IHJpZ2h0IGF3YXksCi0JCSAqIGJlY2F1 c2UgdGhlIHR1cGxlIGlzIHByZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdCB2aXNpYmxl LiBUaGUKLQkJICogcmVhZGluZyBvZiB0aGUgVElEIGJ5IHRoaXMgc2NhbiAodXNpbmcgYSBzaGFy ZWQgbG9jayBvbiB0aGUgaW5kZXgKLQkJICogYnVmZmVyKSBpcyBzZXJpYWxpemVkIHdpdGggdGhl IGluc2VydCBvZiB0aGUgVElEIGludG8gdGhlIGluZGV4Ci0JCSAqICh1c2luZyBhbiBleGNsdXNp dmUgbG9jayBvbiB0aGUgaW5kZXggYnVmZmVyKS4gQmVjYXVzZSB0aGUgVk0gYml0Ci0JCSAqIGlz IGNsZWFyZWQgYmVmb3JlIHVwZGF0aW5nIHRoZSBpbmRleCwgYW5kIGxvY2tpbmcvdW5sb2NraW5n IG9mIHRoZQotCQkgKiBpbmRleCBwYWdlIGFjdHMgYXMgYSBmdWxsIG1lbW9yeSBiYXJyaWVyLCB3 ZSBhcmUgc3VyZSB0byBzZWUgdGhlCi0JCSAqIGNsZWFyZWQgYml0IGlmIHdlIHNlZSBhIHJlY2Vu dGx5LWluc2VydGVkIFRJRC4KLQkJICoKLQkJICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBp bmRleCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyIG91dAotCQkgKiB0aGUgVElEKSwgc28g dGhlIGNsZWFyaW5nIG9mIHRoZSBWTSBiaXQgYnkgYSBkZWxldGUgaXMgbm90Ci0JCSAqIHNlcmlh bGl6ZWQgd2l0aCB0aGlzIHRlc3QgYmVsb3csIGFuZCB3ZSBtYXkgc2VlIGEgdmFsdWUgdGhhdCBp cwotCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBjYXJlIGFib3V0 IHRoZSBkZWxldGUgcmlnaHQKLQkJICogYXdheSwgYmVjYXVzZSB0aGUgdHVwbGUgaXMgc3RpbGwg dmlzaWJsZSB1bnRpbCB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gY29tbWl0cyBvciB0 aGUgc3RhdGVtZW50IGVuZHMgKGlmIGl0J3Mgb3VyCi0JCSAqIHRyYW5zYWN0aW9uKS4gSW4gZWl0 aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbCBoYXZlCi0JCSAqIGJlZW4g cmVsZWFzZWQgKGFjdGluZyBhcyBhIHdyaXRlIGJhcnJpZXIpIGFmdGVyIGNsZWFyaW5nIHRoZSBi aXQuCi0JCSAqIEFuZCBmb3IgdXMgdG8gaGF2ZSBhIHNuYXBzaG90IHRoYXQgaW5jbHVkZXMgdGhl IGRlbGV0aW5nCi0JCSAqIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlzaWJsZSks IHdlIG11c3QgaGF2ZSBhY3F1aXJlZAotCQkgKiBQcm9jQXJyYXlMb2NrIGFmdGVyIHRoYXQgdGlt ZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgotCQkgKgotCQkgKiBJdCdzIHdvcnRoIGdvaW5n IHRocm91Z2ggdGhpcyBjb21wbGV4aXR5IHRvIGF2b2lkIG5lZWRpbmcgdG8gbG9jawotCQkgKiB0 aGUgVk0gYnVmZmVyLCB3aGljaCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBjb250ZW50aW9uLgot CQkgKi8KLQkJaWYgKCFWTV9BTExfVklTSUJMRShzY2FuZGVzYy0+aGVhcFJlbGF0aW9uLAotCQkJ CQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkmbm9kZS0+aW9zc19W TUJ1ZmZlcikpCi0JCXsKLQkJCS8qCi0JCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRoZSBo ZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCi0JCQkgKi8KLQkJCWlmIChub2RlLT5pb3NzX0luc3Ry dW1lbnQpCi0JCQkJbm9kZS0+aW9zc19JbnN0cnVtZW50LT5uaGVhcGZldGNoZXMrKzsKLQkJCWlm ICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuZGVzYywgbm9kZS0+aW9zc19UYWJsZVNsb3QpKQotCQkJ CWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8K LQotCQkJRXhlY0NsZWFyVHVwbGUobm9kZS0+aW9zc19UYWJsZVNsb3QpOwotCi0JCQkvKgotCQkJ ICogT25seSBNVkNDIHNuYXBzaG90cyBhcmUgc3VwcG9ydGVkIGhlcmUsIHNvIHRoZXJlIHNob3Vs ZCBiZSBubwotCQkJICogbmVlZCB0byBrZWVwIGZvbGxvd2luZyB0aGUgSE9UIGNoYWluIG9uY2Ug YSB2aXNpYmxlIGVudHJ5IGhhcwotCQkJICogYmVlbiBmb3VuZC4gIElmIHdlIGRpZCB3YW50IHRv IGFsbG93IHRoYXQsIHdlJ2QgbmVlZCB0byBrZWVwCi0JCQkgKiBtb3JlIHN0YXRlIHRvIHJlbWVt YmVyIG5vdCB0byBjYWxsIGluZGV4X2dldG5leHRfdGlkIG5leHQgdGltZS4KLQkJCSAqLwotCQkJ aWYgKHNjYW5kZXNjLT54c19oZWFwX2NvbnRpbnVlKQotCQkJCWVsb2coRVJST1IsICJub24tTVZD QyBzbmFwc2hvdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpOwotCi0J CQkvKgotCQkJICogTm90ZTogYXQgdGhpcyBwb2ludCB3ZSBhcmUgaG9sZGluZyBhIHBpbiBvbiB0 aGUgaGVhcCBwYWdlLCBhcwotCQkJICogcmVjb3JkZWQgaW4gc2NhbmRlc2MtPnhzX2NidWYuICBX ZSBjb3VsZCByZWxlYXNlIHRoYXQgcGluIG5vdywKLQkJCSAqIGJ1dCBpdCdzIG5vdCBjbGVhciB3 aGV0aGVyIGl0J3MgYSB3aW4gdG8gZG8gc28uICBUaGUgbmV4dCBpbmRleAotCQkJICogZW50cnkg bWlnaHQgcmVxdWlyZSBhIHZpc2l0IHRvIHRoZSBzYW1lIGhlYXAgcGFnZS4KLQkJCSAqLwotCi0J CQl0dXBsZV9mcm9tX2hlYXAgPSB0cnVlOwotCQl9Ci0KIAkJLyoKIAkJICogRmlsbCB0aGUgc2Nh biB0dXBsZSBzbG90IHdpdGggZGF0YSBmcm9tIHRoZSBpbmRleC4gIFRoaXMgbWlnaHQgYmUKIAkJ ICogcHJvdmlkZWQgaW4gZWl0aGVyIEhlYXBUdXBsZSBvciBJbmRleFR1cGxlIGZvcm1hdC4gIENv bmNlaXZhYmx5IGFuCkBAIC0yNDAsMTYgKzE2NSw2IEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAogCQkJCQkgZXJybXNnKCJsb3NzeSBkaXN0YW5jZSBm dW5jdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gaW5kZXgtb25seSBzY2FucyIpKSk7Ci0KLQkJ LyoKLQkJICogSWYgd2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgdGhlbiB3ZSdsbCBuZWVkIHRv IHRha2UgYSBwcmVkaWNhdGUKLQkJICogbG9jayBleHBsaWNpdGx5LCBhcyBpZiB3ZSBoYWQuICBG b3Igbm93IHdlIGRvIHRoYXQgYXQgcGFnZSBsZXZlbC4KLQkJICovCi0JCWlmICghdHVwbGVfZnJv bV9oZWFwKQotCQkJUHJlZGljYXRlTG9ja1BhZ2Uoc2NhbmRlc2MtPmhlYXBSZWxhdGlvbiwKLQkJ CQkJCQkgIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKLQkJCQkJCQkgIGVzdGF0ZS0+ ZXNfc25hcHNob3QpOwotCiAJCXJldHVybiBzbG90OwogCX0KIApAQCAtNDA5LDEzICszMjQsNiBA QCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJaW5kZXhS ZWxhdGlvbkRlc2MgPSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYzsKIAlpbmRleFNjYW5EZXNjID0g bm9kZS0+aW9zc19TY2FuRGVzYzsKIAotCS8qIFJlbGVhc2UgVk0gYnVmZmVyIHBpbiwgaWYgYW55 LiAqLwotCWlmIChub2RlLT5pb3NzX1ZNQnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JewotCQlS ZWxlYXNlQnVmZmVyKG5vZGUtPmlvc3NfVk1CdWZmZXIpOwotCQlub2RlLT5pb3NzX1ZNQnVmZmVy ID0gSW52YWxpZEJ1ZmZlcjsKLQl9Ci0KIAkvKgogCSAqIFdoZW4gZW5kaW5nIGEgcGFyYWxsZWwg d29ya2VyLCBjb3B5IHRoZSBzdGF0aXN0aWNzIGdhdGhlcmVkIGJ5IHRoZQogCSAqIHdvcmtlciBi YWNrIGludG8gc2hhcmVkIG1lbW9yeSBzbyB0aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgYnkgdGhl IG1haW4KQEAgLTQzNSw2ICszNDMsNyBAQCBFeGVjRW5kSW5kZXhPbmx5U2NhbihJbmRleE9ubHlT Y2FuU3RhdGUgKm5vZGUpCiAJCSAqIHdoaWNoIHdpbGwgaGF2ZSBhIG5ldyBJbmRleE9ubHlTY2Fu U3RhdGUgYW5kIHplcm9lZCBzdGF0cy4KIAkJICovCiAJCXdpbnN0cnVtZW50LT5uc2VhcmNoZXMg Kz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCXdpbnN0cnVtZW50LT5uaGVh cGZldGNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50LT5uaGVhcGZldGNoZXM7CiAJfQogCiAJ LyoKQEAgLTc5MSwxMyArNzAwLDEyIEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJ bmRleE9ubHlTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5k ZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJ CQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlv bkRlc2MsIHRydWUsCiAJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBu b2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5 cywKIAkJCQkJCQkJIHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVw ID0gdHJ1ZTsKLQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwlBc3NlcnQo bm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVu LXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBw YXNzCkBAIC04NTcsMTIgKzc2NSwxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3Jr ZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJ CWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0J CQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlvc3NfUmVs YXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJ CQkgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJC eUtleXMsCiAJCQkJCQkJCSBwaXNjYW4pOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRf aXR1cCA9IHRydWU7CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7 CiAKIAkvKgogCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJl IHJlYWR5LCBnbyBhaGVhZCBhbmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZUluZGV4c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5j CmluZGV4IDA2MTQzZTk0Yy4uMTBkODVjZmQ5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 c2Nhbi5jCkBAIC0xMDksNyArMTA5LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2Rl KQogCQkgKiBzZXJpYWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVk IHRvIGJlIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25E ZXNjLAorCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJ ICAgZXN0YXRlLT5lc19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1lbnQs CiAJCQkJCQkJCSAgIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTEzMCw3ICsxMzAsNyBAQCBJ bmRleE5leHQoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2Ug aGF2ZSB3aGF0IHdlIG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChp bmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHRh YmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJ CUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBJbmRleE5leHRX aXRoUmVvcmRlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5n IGFuIGluZGV4IHNjYW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJ CXNjYW5kZXNjID0gaW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwK LQkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNz X1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJ CQkJCQkJCSAgIG5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVt U2NhbktleXMsCkBAIC0yNjIsNyArMjYyLDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhT Y2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0aGUgaW5kZXguCiAJ CSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChzY2FuZGVz YywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlpZiAoIXRhYmxlX2luZGV4X2dldG5l eHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCQl7CiAJCQkv KgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ugc3RpbGwgbmVl ZCB0byBkcmFpbiBhbnkKQEAgLTgxNCw2ICs4MTQsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4 U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2Nh blN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVz ICs9IG5vZGUtPmlzc19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5pc3Nf SW5zdHJ1bWVudC0+bmhlYXBmZXRjaGVzID09IDApOwogCX0KIAogCS8qCkBAIC0xNzI2LDcgKzE3 MjcsNyBAQCBFeGVjSW5kZXhTY2FuSW5pdGlhbGl6ZURTTShJbmRleFNjYW5TdGF0ZSAqbm9kZSwK IAogCW5vZGUtPmlzc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2Rl LT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNj LAorCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2Rl LT5pc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJ CQkJIG5vZGUtPmlzc19OdW1PcmRlckJ5S2V5cywKQEAgLTE3OTAsNyArMTc5MSw3IEBAIEV4ZWNJ bmRleFNjYW5Jbml0aWFsaXplV29ya2VyKEluZGV4U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+ aXNzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1 cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJ CSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJIG5vZGUtPmlzc19JbnN0 cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+ aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZU1lcmdlam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCmluZGV4 IGY4NDIxYTc0Yy4uY2I0YmVmNzZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9u b2RlTWVyZ2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5j CkBAIC01NCw4ICs1NCw4IEBACiAgKgkJdGhlIGlubmVyICI1J3MiLiBUaGlzIHJlcXVpcmVzIHJl cG9zaXRpb25pbmcgdGhlIGlubmVyICJjdXJzb3IiCiAgKgkJdG8gcG9pbnQgYXQgdGhlIGZpcnN0 IGlubmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5ICJtYXJraW5nIiB0aGUKICAqCQlmaXJzdCBpbm5l ciA1IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBiZWZvcmUgam9pbmluZwot ICoJCXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1ldGhvZCBpbnRlcmZhY2Ug cHJvdmlkZXMKLSAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEgdHVwbGUuCisg KgkJd2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBpbmRleGJhdGNoLmMgaW50ZXJmYWNlIHBy b3ZpZGVzCisgKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1cGxlIGR1cmlu ZyBpbmRleCBzY2Fucy4KICAqCiAgKgogICoJCUVzc2VudGlhbCBvcGVyYXRpb24gb2YgdGhlIG1l cmdlIGpvaW4gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYwppbmRleCA2N2Q5ZGMzNWYuLmVkYzdlNDczNiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC00Myw3ICs0Myw3IEBACiAvKiBXaGV0aGVyIHdlIGFyZSBs b29raW5nIGZvciBwbGFpbiBpbmRleHNjYW4sIGJpdG1hcCBzY2FuLCBvciBlaXRoZXIgKi8KIHR5 cGVkZWYgZW51bQogewotCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVw bGUgKi8KKwlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlIG9yIGFt Z2V0YmF0Y2ggKi8KIAlTVF9CSVRNQVBTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXRiaXRt YXAgKi8KIAlTVF9BTllTQ0FOLAkJCQkJLyogZWl0aGVyIGlzIG9rYXkgKi8KIH0gU2NhblR5cGVD b250cm9sOwpAQCAtNzQ3LDcgKzc0Nyw3IEBAIGdldF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCXsKIAkJSW5kZXhQYXRoICAqaXBhdGggPSAoSW5kZXhQ YXRoICopIGxmaXJzdChsYyk7CiAKLQkJaWYgKGluZGV4LT5hbWhhc2dldHR1cGxlKQorCQlpZiAo aW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7 CiAKIAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1hcCAmJgpAQCAtODM1LDcgKzgzNSw3IEBAIGJ1 aWxkX2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJc3dp dGNoIChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1RfSU5ERVhTQ0FOOgotCQkJaWYgKCFpbmRleC0+ YW1oYXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJCXJldHVy biBOSUw7CiAJCQlicmVhazsKIAkJY2FzZSBTVF9CSVRNQVBTQ0FOOgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcGxhbmNhdC5jCmluZGV4IGIyZmJkNmEwOC4uNDlhNmFjYzNlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTAsMTEgKzMxMCwxMSBAQCBnZXRfcmVsYXRpb25f aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFy ZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFtc2VhcmNoYXJyYXk7 CiAJCQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFyY2hudWxsczsKIAkJ CQlpbmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsOwotCQkJCWlu Zm8tPmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOworCQkJ CWluZm8tPmFtY2FucGxhaW5zY2FuID0gKGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8 CisJCQkJCQkJCQkJYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCQkJCWluZm8tPmFt aGFzZ2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJl bGF0aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJ aW5mby0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJ CQkJCQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2Fu bWFya3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29z dGVzdGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+ YW1jb3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBnZXRfcmVsYXRp b25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5o cGFyZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbXNl YXJjaG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwotCQkJ CWluZm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsKKwkJCQlpbmZvLT5hbWNhbnBsYWluc2NhbiA9 IGZhbHNlOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gZmFsc2U7CiAJCQkJaW5mby0+YW1j YW5tYXJrcG9zID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBOVUxMOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IDBiMWQ4MGI1Yi4u MGQwYmQ0NjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jl bGF0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5j CkBAIC04MzYsNiArODM2LDcgQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwo UmVsYXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogewogCUF0dHJOdW1iZXIJa2V5Y29s OwogCW9pZHZlY3RvciAgKmluZGNsYXNzOworCWNvbnN0IEluZGV4QW1Sb3V0aW5lICphbXJvdXRp bmU7CiAKIAkvKiBUaGUgaW5kZXggbXVzdCBub3QgYmUgYSBwYXJ0aWFsIGluZGV4ICovCiAJaWYg KCFoZWFwX2F0dGlzbnVsbChpZHhyZWwtPnJkX2luZGV4dHVwbGUsIEFudW1fcGdfaW5kZXhfaW5k cHJlZCwgTlVMTCkpCkBAIC04ODcsMTAgKzg4OCwxMiBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGlj YUlkZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAJCXJldHVy biBmYWxzZTsKIAogCS8qCi0JICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBp bXBsZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCi0JICogYmUgdXNlZCBsYXRlciB0byBm ZXRjaCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4KKwkg KiBUaGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBs ZSIgb3IKKwkgKiAiYW1nZXRiYXRjaCIsIHdoaWNoIHdpbGwgYmUgdXNlZCBsYXRlciB0byBmZXRj aCB0aGUgdHVwbGVzLiAgU2VlCisJICogUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgog CSAqLwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0s IGZhbHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0 aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpOworCWlmIChhbXJvdXRpbmUt PmFtZ2V0dHVwbGUgPT0gTlVMTCAmJiBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJ cmV0dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRl eCBjODFmYjYxYTAuLmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2FtdXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMs MTAgKzM2MywxMSBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAog CQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFN UFJPUF9JTkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUg PyB0cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUg IT0gTlVMTCB8fAorCQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJ CWNhc2UgQU1QUk9QX0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFt Z2V0Yml0bWFwID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5h bWdldGJpdG1hcCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJ CQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMs OCBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVU VVJOX0JPT0wocm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VY Q0xVREU6Ci0JCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZh bHNlKTsKKwkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAor CQkJCQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9D QU5fSU5DTFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9zZWxmdW5jcy5jCmluZGV4IDUzZjg1Y2NkZS4uM2ZmNWQwYzFkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvc2VsZnVuY3MuYwpAQCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiYWNjZXNz L2dpbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJs ZWFtLmgiCi0jaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpYy5oIgpAQCAtNzEyMSwxMCArNzEyMCw2IEBAIGdl dF9hY3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAlib29sCQloYXZl X2RhdGEgPSBmYWxzZTsKIAlTbmFwc2hvdERhdGEgU25hcHNob3ROb25WYWN1dW1hYmxlOwogCUlu ZGV4U2NhbkRlc2MgaW5kZXhfc2NhbjsKLQlCdWZmZXIJCXZtYnVmZmVyID0gSW52YWxpZEJ1ZmZl cjsKLQlCbG9ja051bWJlciBsYXN0X2hlYXBfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0J aW50CQkJbl92aXNpdGVkX2hlYXBfcGFnZXMgPSAwOwotCUl0ZW1Qb2ludGVyIHRpZDsKIAlEYXR1 bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKIAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNd OwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKQEAgLTcxNzIsNjEgKzcxNjcsMjIgQEAgZ2V0 X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCSAqIGEgaHVnZSBh bW91bnQgb2YgdGltZSBoZXJlLCBzbyB3ZSBnaXZlIHVwIG9uY2Ugd2UndmUgcmVhZCB0b28gbWFu eSBoZWFwCiAJICogcGFnZXMuICBXaGVuIHdlIGZhaWwgZm9yIHRoYXQgcmVhc29uLCB0aGUgY2Fs bGVyIHdpbGwgZW5kIHVwIHVzaW5nCiAJICogd2hhdGV2ZXIgZXh0cmVtYWwgdmFsdWUgaXMgcmVj b3JkZWQgaW4gcGdfc3RhdGlzdGljLgorCSAqCisJICogWFhYIFRoaXMgY2FuJ3Qgd29yayB3aXRo IHRoZSBuZXcgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGludGVyZmFjZSwKKwkgKiB3aGljaCBz aW1wbHkgd29uJ3QgcmV0dXJuIGEgdHVwbGUgdGhhdCBpc24ndCB2aXNpYmxlIHRvIG91ciBzbmFw c2hvdC4KIAkgKi8KIAlJbml0Tm9uVmFjdXVtYWJsZVNuYXBzaG90KFNuYXBzaG90Tm9uVmFjdXVt YWJsZSwKIAkJCQkJCQkgIEdsb2JhbFZpc1Rlc3RGb3IoaGVhcFJlbCkpOwogCi0JaW5kZXhfc2Nh biA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwKKwlpbmRleF9zY2FuID0gaW5k ZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLCB0cnVlLAogCQkJCQkJCQkgJlNuYXBzaG90 Tm9uVmFjdXVtYWJsZSwgTlVMTCwKIAkJCQkJCQkJIDEsIDApOwotCS8qIFNldCBpdCB1cCBmb3Ig aW5kZXgtb25seSBzY2FuICovCi0JaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKKwlB c3NlcnQoaW5kZXhfc2Nhbi0+eHNfd2FudF9pdHVwKTsKIAlpbmRleF9yZXNjYW4oaW5kZXhfc2Nh biwgc2NhbmtleXMsIDEsIE5VTEwsIDApOwogCiAJLyogRmV0Y2ggZmlyc3QvbmV4dCB0dXBsZSBp biBzcGVjaWZpZWQgZGlyZWN0aW9uICovCi0Jd2hpbGUgKCh0aWQgPSBpbmRleF9nZXRuZXh0X3Rp ZChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIpKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2NhbiwgaW5kZXhzY2FuZGlyLCB0YWJsZXNsb3QpKQogCXsK LQkJQmxvY2tOdW1iZXIgYmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7Ci0K LQkJaWYgKCFWTV9BTExfVklTSUJMRShoZWFwUmVsLAotCQkJCQkJCWJsb2NrLAotCQkJCQkJCSZ2 bWJ1ZmZlcikpCi0JCXsKLQkJCS8qIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8g Y2hlY2sgdmlzaWJpbGl0eSAqLwotCQkJaWYgKCFpbmRleF9mZXRjaF9oZWFwKGluZGV4X3NjYW4s IHRhYmxlc2xvdCkpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBObyB2aXNpYmxlIHR1cGxlIGZvciB0 aGlzIGluZGV4IGVudHJ5LCBzbyB3ZSBuZWVkIHRvCi0JCQkJICogYWR2YW5jZSB0byB0aGUgbmV4 dCBlbnRyeS4gIEJlZm9yZSBkb2luZyBzbywgY291bnQgaGVhcAotCQkJCSAqIHBhZ2UgZmV0Y2hl cyBhbmQgZ2l2ZSB1cCBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgotCQkJCSAqCi0JCQkJICogV2Ug ZG9uJ3QgY2hhcmdlIGEgcGFnZSBmZXRjaCBpZiB0aGlzIGlzIHRoZSBzYW1lIGhlYXAgcGFnZQot CQkJCSAqIGFzIHRoZSBwcmV2aW91cyB0dXBsZS4gIFRoaXMgaXMgb24gdGhlIGNvbnNlcnZhdGl2 ZSBzaWRlLAotCQkJCSAqIHNpbmNlIG90aGVyIHJlY2VudGx5LWFjY2Vzc2VkIHBhZ2VzIGFyZSBw cm9iYWJseSBzdGlsbCBpbgotCQkJCSAqIGJ1ZmZlcnMgdG9vOyBidXQgaXQncyBnb29kIGVub3Vn aCBmb3IgdGhpcyBoZXVyaXN0aWMuCi0JCQkJICovCi0jZGVmaW5lIFZJU0lURURfUEFHRVNfTElN SVQgMTAwCi0KLQkJCQlpZiAoYmxvY2sgIT0gbGFzdF9oZWFwX2Jsb2NrKQotCQkJCXsKLQkJCQkJ bGFzdF9oZWFwX2Jsb2NrID0gYmxvY2s7Ci0JCQkJCW5fdmlzaXRlZF9oZWFwX3BhZ2VzKys7Ci0J CQkJCWlmIChuX3Zpc2l0ZWRfaGVhcF9wYWdlcyA+IFZJU0lURURfUEFHRVNfTElNSVQpCi0JCQkJ CQlicmVhazsKLQkJCQl9Ci0KLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRy eSBuZXh0IGluZGV4IGVudHJ5ICovCi0JCQl9Ci0KLQkJCS8qIFdlIGRvbid0IGFjdHVhbGx5IG5l ZWQgdGhlIGhlYXAgdHVwbGUgZm9yIGFueXRoaW5nICovCi0JCQlFeGVjQ2xlYXJUdXBsZSh0YWJs ZXNsb3QpOwotCi0JCQkvKgotCQkJICogV2UgZG9uJ3QgY2FyZSB3aGV0aGVyIHRoZXJlJ3MgbW9y ZSB0aGFuIG9uZSB2aXNpYmxlIHR1cGxlIGluCi0JCQkgKiB0aGUgSE9UIGNoYWluOyBpZiBhbnkg YXJlIHZpc2libGUsIHRoYXQncyBnb29kIGVub3VnaC4KLQkJCSAqLwotCQl9Ci0KIAkJLyoKIAkJ ICogV2UgZXhwZWN0IHRoYXQgdGhlIGluZGV4IHdpbGwgcmV0dXJuIGRhdGEgaW4gSW5kZXhUdXBs ZSBub3QKIAkJICogSGVhcFR1cGxlIGZvcm1hdC4KQEAgLTcyNTgsOCArNzIxNCw2IEBAIGdldF9h Y3R1YWxfdmFyaWFibGVfZW5kcG9pbnQoUmVsYXRpb24gaGVhcFJlbCwKIAkJYnJlYWs7CiAJfQog Ci0JaWYgKHZtYnVmZmVyICE9IEludmFsaWRCdWZmZXIpCi0JCVJlbGVhc2VCdWZmZXIodm1idWZm ZXIpOwogCWluZGV4X2VuZHNjYW4oaW5kZXhfc2Nhbik7CiAKIAlyZXR1cm4gaGF2ZV9kYXRhOwpk aWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggYjc0YWI1ZjdhLi4wNjU1MzYwOWIgMTAwNjQ0Ci0t LSBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKKysrIGIvY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9uYnRyZWUuYwpAQCAtMzkzLDcgKzM5Myw3IEBAIGJ0X2NoZWNrX2V2ZXJ5X2xldmVs KFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3BhY2UsCiAJCQkg UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CiAKIAkvKgotCSAqIFRoaXMgYXNzZXJ0aW9u IG1hdGNoZXMgdGhlIG9uZSBpbiBpbmRleF9nZXRuZXh0X3RpZCgpLiAgU2VlIHBhZ2UKKwkgKiBU aGlzIGFzc2VydGlvbiBtYXRjaGVzIHRoZSBvbmUgaW4gaGVhcGFtX2JhdGNoX2dldG5leHQoKS4g IFNlZSBwYWdlCiAJICogcmVjeWNsaW5nLyJ2aXNpYmxlIHRvIGV2ZXJ5b25lIiBub3RlcyBpbiBu YnRyZWUgUkVBRE1FLgogCSAqLwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChSZWNlbnRY bWluKSk7CmRpZmYgLS1naXQgYS9jb250cmliL2Jsb29tL2JsdXRpbHMuYyBiL2NvbnRyaWIvYmxv b20vYmx1dGlscy5jCmluZGV4IDUxMTFjZGM2ZC4uNDc2YjY0ZThiIDEwMDY0NAotLS0gYS9jb250 cmliL2Jsb29tL2JsdXRpbHMuYworKysgYi9jb250cmliL2Jsb29tL2JsdXRpbHMuYwpAQCAtMTQ2 LDEwICsxNDYsMTIgQEAgYmxoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2Nh biA9IGJsYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBibHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUg PSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVM TCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYmxnZXRiaXRt YXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBOVUxMLAotCQku YW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFtZXN0aW1hdGVw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFt cGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2luZGV4YW0u c2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggZjQ4ZGEzMTg1Li5iMzFjZWUw ODEgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2luZGV4YW0uc2dtbApAQCAtMTY3LDEwICsxNjcsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5k ZXhBbVJvdXRpbmUKICAgICBhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2NhbjsKICAgICBh bXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKICAgICBhbWdldHR1cGxlX2Z1bmN0aW9uIGFtZ2V0 dHVwbGU7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1n ZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWtpbGxpdGVtc2JhdGNoX2Z1bmN0aW9u IGFta2lsbGl0ZW1zYmF0Y2g7CS8qIGNhbiBiZSBOVUxMICovCisgICAgYW11bmd1YXJkYmF0Y2hf ZnVuY3Rpb24gYW11bmd1YXJkYmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCiAgICAgYW1nZXRiaXRt YXBfZnVuY3Rpb24gYW1nZXRiaXRtYXA7ICAgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWVuZHNj YW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotICAgIGFtbWFya3Bvc19mdW5jdGlvbiBhbW1hcmtwb3M7 ICAgICAgIC8qIGNhbiBiZSBOVUxMICovCi0gICAgYW1yZXN0cnBvc19mdW5jdGlvbiBhbXJlc3Ry cG9zOyAgICAgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXBvc3Jlc2V0X2Z1bmN0aW9uIGFtcG9z cmVzZXQ7IC8qIGNhbiBiZSBOVUxMICovCiAKICAgICAvKiBpbnRlcmZhY2UgZnVuY3Rpb25zIHRv IHN1cHBvcnQgcGFyYWxsZWwgaW5kZXggc2NhbnMgKi8KICAgICBhbWVzdGltYXRlcGFyYWxsZWxz Y2FuX2Z1bmN0aW9uIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW47ICAgIC8qIGNhbiBiZSBOVUxMICov CkBAIC02NzYsOCArNjc4LDM4IEBAIGFtYmVnaW5zY2FuIChSZWxhdGlvbiBpbmRleFJlbGF0aW9u LAogICAgPGVtcGhhc2lzPm11c3Q8L2VtcGhhc2lzPiBjcmVhdGUgdGhpcyBzdHJ1Y3QgYnkgY2Fs bGluZwogICAgPGZ1bmN0aW9uPlJlbGF0aW9uR2V0SW5kZXhTY2FuKCk8L2Z1bmN0aW9uPi4gIElu IG1vc3QgY2FzZXMKICAgIDxmdW5jdGlvbj5hbWJlZ2luc2NhbjwvZnVuY3Rpb24+IGRvZXMgbGl0 dGxlIGJleW9uZCBtYWtpbmcgdGhhdCBjYWxsIGFuZCBwZXJoYXBzCi0gICBhY3F1aXJpbmcgbG9j a3M7CisgICBhY3F1aXJpbmcgbG9ja3MgYW5kIGluaXRpYWxpemluZyBzdGFuZGFyZCA8c3RydWN0 bmFtZT5JbmRleFNjYW5EZXNjPC9zdHJ1Y3RuYW1lPiBmaWVsZHM7CiAgICB0aGUgaW50ZXJlc3Rp bmcgcGFydHMgb2YgaW5kZXgtc2NhbiBzdGFydHVwIGFyZSBpbiA8ZnVuY3Rpb24+YW1yZXNjYW48 L2Z1bmN0aW9uPi4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgdXNlIHRoZSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZQorICAgbXVzdCBhbHNvIHNldCB0aGUg Zm9sbG93aW5nIGZpZWxkcyBpbiB0aGUgc2NhbiBkZXNjcmlwdG9yOgorICAgPGl0ZW1pemVkbGlz dD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7 bWF4aXRlbXNiYXRjaDwvbGl0ZXJhbD46IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcworICAg ICAgdGhhdCBjYW4gYXBwZWFyIGluIGEgc2luZ2xlIGJhdGNoICh0eXBpY2FsbHkgZGVyaXZlZCBm cm9tIHRoZSBpbmRleCBwYWdlCisgICAgICBzaXplLCBlLmcuLCA8bGl0ZXJhbD5NYXhJbmRleFR1 cGxlc1BlclBhZ2U8L2xpdGVyYWw+KS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRlcmFsPnNjYW4tJmd0O2JhdGNo X2luZGV4X29wYXF1ZV9zaXplPC9saXRlcmFsPjogdGhlCisgICAgICA8ZnVuY3Rpb24+TUFYQUxJ R048L2Z1bmN0aW9uPidkIHNpemUgb2YgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZQor ICAgICAgYXJlYS4gIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiByZXNlcnZlcyB0aGlzIG11Y2ggc3Bh Y2UgaW1tZWRpYXRlbHkgYmVmb3JlCisgICAgICB0aGUgPHN0cnVjdG5hbWU+SW5kZXhTY2FuQmF0 Y2hEYXRhPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLCBmb3IgdXNlIGJ5IHRoZQorICAgICAgaW5kZXgg QU0gdG8gc3RvcmUgcGVyLXBhZ2UgbmF2aWdhdGlvbiBzdGF0ZSAoZS5nLiwgYmF0Y2ggaW5kZXgg cGFnZSdzCisgICAgICBidWZmZXIgcGluIGFuZCBzaWJsaW5nIHBhZ2UgbGlua3MpLgorICAgICA8 L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfdHVwbGVzX3dvcmtzcGFjZTwvbGl0ZXJhbD46IHRo ZSBzaXplIGluIGJ5dGVzCisgICAgICBvZiB0aGUgcGVyLWJhdGNoIHR1cGxlIHN0b3JhZ2Ugd29y a3NwYWNlIHVzZWQgZm9yIGluZGV4LW9ubHkgc2NhbnMKKyAgICAgICh0eXBpY2FsbHkgPGxpdGVy YWw+QkxDS1NaPC9saXRlcmFsPiksIG9yIDAgaWYgdGhlIGluZGV4IEFNIGRvZXMgbm90CisgICAg ICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMuICBUaGUgd29ya3NwYWNlIGlzIGFjY2Vzc2libGUg dmlhCisgICAgICA8c3RydWN0ZmllbGQ+YmF0Y2gtJmd0O2N1cnJUdXBsZXM8L3N0cnVjdGZpZWxk Pi4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KICAg PC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtNzQ5LDYgKzc4MSwyMzYgQEAgYW1nZXR0dXBsZSAoSW5k ZXhTY2FuRGVzYyBzY2FuLAogICAgPHN0cnVjdGZpZWxkPmFtZ2V0dHVwbGU8L3N0cnVjdGZpZWxk PiBmaWVsZCBpbiBpdHMgPHN0cnVjdG5hbWU+SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+CiAg ICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgorICA8bm90ZT4KKyAgIDxw YXJhPgorICAgIEFzIG9mIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gdmVy c2lvbiAxOSwgcG9zaXRpb24gbWFya2luZworICAgIGFuZCByZXN0b3JhdGlvbiBvZiBzY2FucyBp cyBubyBsb25nZXIgc3VwcG9ydGVkIGZvciB0aGUKKyAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwv ZnVuY3Rpb24+IGludGVyZmFjZTsgb25seSB0aGUKKyAgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGludGVyZmFjZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCisgICA8L3BhcmE+Cisg IDwvbm90ZT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK0luZGV4U2NhbkJhdGNoCith bWdldGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBJbmRleFNjYW5CYXRj aCBwcmlvcmJhdGNoLAorICAgICAgICAgICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOworPC9w cm9ncmFtbGlzdGluZz4KKyAgIFJldHVybiB0aGUgbmV4dCBiYXRjaCBvZiBpbmRleCB0dXBsZXMg aW4gdGhlIGdpdmVuIHNjYW4sIG1vdmluZyBpbiB0aGUKKyAgIGdpdmVuIGRpcmVjdGlvbiAoZm9y d2FyZCBvciBiYWNrd2FyZCBpbiB0aGUgaW5kZXgpLiAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZgor ICAgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8L3R5cGU+IHdpdGggaW5kZXggdHVwbGVzIGxvYWRlZCwg b3IKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGlmIHRoZXJlIGFyZSBubyBtb3JlIGluZGV4 IHR1cGxlcyBpbiB0aGUgZ2l2ZW4KKyAgIHNjYW4gZGlyZWN0aW9uLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ug aXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4g dGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaW4gYmF0Y2hlcworICAgcmF0aGVy IHRoYW4gb25lIGF0IGEgdGltZS4gIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hpbmcgaW5kZXggZW50 cmllcyBmcm9tIGEKKyAgIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0aGUgdGFibGUgQU0g Z2FpbnMgdmlzaWJpbGl0eSBpbnRvIHdoaWNoIHRhYmxlCisgICBibG9ja3Mgd2lsbCBiZSBuZWVk ZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgdGFi bGUgQU0gcGFzc2VzIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IHRvIGluZGljYXRlIHdo ZXJlIHRoZQorICAgaW5kZXggQU0gc2hvdWxkIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gKG9yIDxs aXRlcmFsPk5VTEw8L2xpdGVyYWw+IG9uIHRoZQorICAgZmlyc3QgY2FsbCBmb3IgdGhlIHNjYW4p LiAgVGhlIGluZGV4IEFNIHVzZXMgaW5mb3JtYXRpb24gZnJvbQorICAgPGxpdGVyYWw+cHJpb3Ji YXRjaDwvbGl0ZXJhbD4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8gcmVhZCBuZXh0 LgorICAgVW5saWtlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIHdoZXJlIHRoZSBp bmRleCBBTSBtYWludGFpbnMgaXRzCisgICBvd24gc2NhbiBwb3NpdGlvbiwgd2l0aCA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGl0IGlzIHRoZSBjYWxsZXIKKyAgIHRoYXQgY29udHJv bHMgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIHRocm91Z2ggdGhlIGluZGV4LiAgVGhlIGNhbGxl cgorICAgd2lsbCB0eXBpY2FsbHkgcGFzcyB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBiYXRj aCwgYnV0IHRoaXMgaXMgbm90CisgICBndWFyYW50ZWVkICZtZGFzaDsgZm9yIGV4YW1wbGUsIGR1 cmluZyBtYXJrL3Jlc3RvcmUgYSBwcmV2aW91c2x5CisgICByZXR1cm5lZCBiYXRjaCBtYXkgYmUg cGFzc2VkIGluc3RlYWQuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJu ZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBhc3NvY2lhdGVkIHdpdGgg YW4KKyAgIGluZGV4IHBhZ2UgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS90 dXBsZS4gIEEgYnVmZmVyCisgICBwaW4gY2FuIGJlIGhlbGQgb250byBieSB0aGUgdGFibGUgQU0g YXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQKKyAgIHJlY3ljbGluZyBieSA8 Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiAgVGhlIHRhYmxlIEFNIGRyb3BzIHRoaXMgaW50ZXJs b2NrCisgICBieSBjYWxsaW5nIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IHdo ZW4gaXQgaXMgc2FmZSB0byBkbyBzby4KKyAgIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2Nr aW5nIi8+IGZvciBkZXRhaWxzIG9uIGJ1ZmZlciBwaW4gbWFuYWdlbWVudAorICAgZHVyaW5nIGlu ZGV4IHNjYW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkluZGV4U2NhbkJh dGNoPC90eXBlPiB0aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGlzIG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAg SXQgaXMgdXAgdG8gdGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQg YmUgZnJlZWQgKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9mdW5j dGlvbj4pLiAgTm90ZSBhbHNvIHRoYXQKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQorICAgPHN0cnVjdGZpZWxkPnByaW9y YmF0Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQorICAgPGZpbGVuYW1lPnNy Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlk ZXMgYQorICAgcmVmZXJlbmNlIGV4YW1wbGVzIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IGludGVyZmFjZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIHNhbWUg Y2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gYXBw bHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJuZWQgYmF0Y2ggbWVhbnMgb25s eSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkgdGhhdCBtYXRjaGVzIHRoZSBz Y2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3NhcmlseSBzdGlsbAorICAgZXhpc3Rz IGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mgc25hcHNob3QgdGVzdC4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7 eHNfcmVjaGVjazwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hldGhlciByZWNoZWNraW5nIG9mCisg ICBzY2FuIGtleXMgaXMgcmVxdWlyZWQsIGluIHRoZSBzYW1lIHdheSBhcyA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+CisgICBkb2VzLiBIb3dldmVyLCA8bGl0ZXJhbD5zY2FuLSZndDt4 c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IGJlIHNldCBjb25zaXN0ZW50bHkKKyAgIGZvciBhbiBl bnRpcmUgc2NhbiByYXRoZXIgdGhhbiB2YXJ5aW5nIG9uIGEgcGVyLXR1cGxlIGJhc2lzLiBUaGlz IGlzIGEga2V5CisgICBkaWZmZXJlbmNlIGZyb20gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPiwgd2hpY2ggY2FuIHNldAorICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0 ZXJhbD4gaW5kZXBlbmRlbnRseSBmb3IgZWFjaCB0dXBsZSBpdCByZXR1cm5zLgorICAgSW5kZXgg YWNjZXNzIG1ldGhvZHMgdGhhdCByZXF1aXJlIGdyYW51bGFyIGNvbnRyb2wgb3ZlcgorICAgPGxp dGVyYWw+c2Nhbi0mZ3Q7eHNfcmVjaGVjazwvbGl0ZXJhbD4gbXVzdCB1c2UgdGhlIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4KKyAgIGludGVyZmFjZSBpbnN0ZWFkIG9mIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWls YXJseSwgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIGRvZXMg bm90IGN1cnJlbnRseQorICAgc3VwcG9ydCBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmV0dXJuIGRh dGEgaW4gdGhlIGZvcm0gb2YgYQorICAgPHN0cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1l PiBwb2ludGVyLiAgSW5kZXgtb25seSBzY2FucyB3b3JrIGJ5CisgICBjb3B5aW5nIDxzdHJ1Y3Ru YW1lPkluZGV4VHVwbGU8L3N0cnVjdG5hbWU+IHJlY29yZHMgZnJvbSBpbmRleCBwYWdlcyBpbnRv IGEKKyAgIGxvY2FsIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggZWFjaCBiYXRjaC4gIDxsaXRlcmFs PnhzX2l0dXBkZXNjPC9saXRlcmFsPgorICAgd29ya3MgaW4gdGhlIHNhbWUgd2F5IGFzIGFscmVh ZHkgZGVzY3JpYmVkIGZvciA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LgorICAgVGhl IGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBub3Qgc2V0IHRoZSA8bGl0ZXJhbD5zY2FuLSZndDt4 c19pdHVwPC9saXRlcmFsPgorICAgZmllbGQgaXRzZWxmLgorICAgV2l0aCA8ZnVuY3Rpb24+YW1n ZXR0dXBsZTwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0gc2V0cworICAgPGxpdGVyYWw+c2Nhbi0m Z3Q7eHNfaGl0dXA8L2xpdGVyYWw+IHRvIHBvaW50IHRvIGEgcmVjb25zdHJ1Y3RlZAorICAgPHN0 cnVjdG5hbWU+SGVhcFR1cGxlPC9zdHJ1Y3RuYW1lPiB3aG9zZSBsaWZldGltZSBleHRlbmRzIHVu dGlsIHRoZSBuZXh0CisgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGwgJm1k YXNoOyBvbmx5IG9uZSB0dXBsZSBpcyB2YWxpZCBhdCBhCisgICB0aW1lLiAgV2l0aCA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBtdWx0aXBsZSBiYXRjaGVzIGFyZSBoZWxkIG9wZW4K KyAgIHNpbXVsdGFuZW91c2x5IGFuZCBpdGVtcyBhcmUgY29uc3VtZWQgYXN5bmNocm9ub3VzbHkg YnkgdGhlIHRhYmxlIEFNLCBzbworICAgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCBzaW5nbGUtdHVw bGUgbGlmZXRpbWUgZm9yIHBlci1pdGVtCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVj dG5hbWU+IHBvaW50ZXJzLiAgVGhlIGJhdGNoIGluZnJhc3RydWN0dXJlCisgICBwcm92aWRlcyBw ZXItYmF0Y2ggc3RvcmFnZSBmb3IgPHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4g Y29waWVzLAorICAgYnV0IGhhcyBubyBhbmFsb2dvdXMgbWVjaGFuaXNtIGZvciA8c3RydWN0bmFt ZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IGRhdGEKKyAgICh1c2VkIGJ5IGluZGV4IEFNcyBzdWNo IGFzIDxhY3JvbnltPkdpU1Q8L2Fjcm9ueW0+IGFuZAorICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNy b255bT4gZm9yIHJlY29uc3RydWN0ZWQgdHVwbGVzIHRoYXQgbWlnaHQgbm90IGZpdCBpbgorICAg PHN0cnVjdG5hbWU+SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gZm9ybWF0KS4gIFRoaXMgbGltaXRh dGlvbiBjb3VsZCBiZQorICAgYWRkcmVzc2VkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgPHByb2R1 Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgVGhlIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBwcm92aWRlIGVpdGhlciA8ZnVuY3Rpb24+ YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICBvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+LCBidXQgbm90IGJvdGguCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBp ZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3VwcG9ydHMgPHF1b3RlPnBsYWluPC9xdW90ZT4gaW5k ZXggc2NhbnMuICBJZiBpdCBkb2Vzbid0LAorICAgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9m dW5jdGlvbj4gZmllbGQgaW4gaXRzCisgICA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3Ry dWN0bmFtZT4gc3RydWN0IG11c3QgYmUgc2V0IHRvIE5VTEwuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKzxwcm9ncmFtbGlzdGluZz4KK3ZvaWQKK2Fta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRl c2Mgc2NhbiwKKyAgICAgICAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKzwvcHJv Z3JhbWxpc3Rpbmc+CisgICBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQgaGFzIGZpbmlz aGVkIHByb2Nlc3NpbmcgYSBiYXRjaCB0aGF0CisgICBjb250YWlucyBkZWFkIGl0ZW1zLCB0byBz ZXQgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gYml0cyBpbiB0aGUgYmF0Y2gncworICAgaW5k ZXggcGFnZS4gIFRoZSBiYXRjaCdzIGluZGV4IHBhZ2Ugd2lsbCBub3QgYmUgbG9ja2VkIGJ5IHRo ZSBjYWxsZXI7IHRoZQorICAgaW5kZXggQU0gbXVzdCBhY3F1aXJlIGFuZCByZWxlYXNlIGl0cyBv d24gbG9jayAoYW5kIHBpbikgb24gdGhlIGluZGV4IHBhZ2UuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFdoaWxlIGltcGxlbWVudGluZyA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVu Y3Rpb24+IGlzIG9wdGlvbmFsLAorICAgZG9pbmcgc28gaXMgcmVjb21tZW5kZWQgZm9yIHBlcmZv cm1hbmNlLCBhcyBpdCBhbGxvd3MgZnV0dXJlIHNjYW5zIHRvIHNraXAKKyAgIGtub3duLWRlYWQg aW5kZXggZW50cmllcy4gIFRoZSBjb3JlIGluZGV4IGFjY2VzcyBtZXRob2QgdGhhdCBjdXJyZW50 bHkKKyAgIHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiAoQi10cmVlKSBp bXBsZW1lbnRzCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2gg dGhpcmQtcGFydHkgaW5kZXggYWNjZXNzIG1ldGhvZHMKKyAgIGFyZSBmcmVlIHRvIGNob29zZSB3 aGV0aGVyIHRvIGltcGxlbWVudCB0aGlzIGZlYXR1cmUuCisgICBUaGUgdGFibGUgQU0gbWF5IGNh bGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rpb24+ IHRvIG1hcmsgZGVhZCBpdGVtcyBhcworICAgdGhlIHNjYW4gcHJvZ3Jlc3Nlcy4gIElmIHRoZSBi YXRjaCBjb250YWlucyBhbnkgc3VjaCBkZWFkIGl0ZW1zLCB0aGUgYmF0Y2gncworICAgPHN0cnVj dGZpZWxkPmRlYWRJdGVtczwvc3RydWN0ZmllbGQ+IGFycmF5IHdpbGwgaGF2ZSBiZWVuIHNvcnRl ZCBhbmQKKyAgIGRlZHVwbGljYXRlZCBiZWZvcmUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8 L2Z1bmN0aW9uPiBpcyBjYWxsZWQsIHdpdGgKKyAgIGl0ZW0gb2Zmc2V0cyBhcHBlYXJpbmcgaW4g YXNjZW5kaW5nIG9yZGVyICh0aGF0IGlzLCBpbiBpbmRleCBwYWdlIG9yZGVyLAorICAgd2hpY2gg aXMgYWxzbyBiYXRjaCBvcmRlcikgYW5kIG5vIG9mZnNldCBhcHBlYXJpbmcgbW9yZSB0aGFuIG9u Y2UuICBJbmRleAorICAgYWNjZXNzIG1ldGhvZHMgY2FuIHJlbHkgb24gdGhpcyBvcmRlcmluZyB3 aGVuIHByb2Nlc3NpbmcgZGVhZCBpdGVtczogdGhlCisgICA8c3RydWN0ZmllbGQ+ZGVhZEl0ZW1z PC9zdHJ1Y3RmaWVsZD4gYXJyYXkgY2FuIGJlIHdhbGtlZCBpbiBsb2Nrc3RlcCB3aXRoCisgICB0 aGUgaW5kZXggcGFnZSdzIGl0ZW0gcG9pbnRlcnMsIHNpbmNlIGJvdGggYXJlIGluIGFzY2VuZGlu ZyBvZmZzZXQgb3JkZXIuCisgICBUaGlzIGFsc28gbWVhbnMgdGhlIHRhYmxlIEFNIG5lZWQgbm90 IGNhbGwKKyAgIDxmdW5jdGlvbj50YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbTwvZnVuY3Rp b24+IGluIGFueSBwYXJ0aWN1bGFyIG9yZGVyLgorICAgKEluZGV4IGFjY2VzcyBtZXRob2RzIHVz aW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gcmVseSBvbiB0aGUKKyAgIDxzdHJ1 Y3RmaWVsZD5raWxsX3ByaW9yX3R1cGxlPC9zdHJ1Y3RmaWVsZD4gbWVjaGFuaXNtIGluc3RlYWQg dG8gbWFyayBkZWFkCisgICB0dXBsZXM7IHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24KKyAgIHByb3ZpZGVzIGEgcmVmZXJlbmNl IGV4YW1wbGUuKQorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBXaGVuIGltcGxlbWVudGluZyA8 ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+LCB0aGUgaW5kZXggQU0KKyAgIHNo b3VsZCB2ZXJpZnkgdGhhdCB0aGUgaW5kZXggcGFnZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2lu Y2UgdGhlIGJhdGNoIHdhcworICAgb3JpZ2luYWxseSByZWFkLiAgVGhlIGJhdGNoJ3MgPHN0cnVj dGZpZWxkPmxzbjwvc3RydWN0ZmllbGQ+IGZpZWxkIHJlY29yZHMKKyAgIHRoZSBwYWdlIExTTiBh dCB0aGUgdGltZSB0aGUgaW5kZXggcGFnZSBsb2NrIHdhcyByZWxlYXNlZCBieQorICAgPGZ1bmN0 aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9uPiAoc2V0IGF1dG9tYXRpY2Fs bHkgYnkgdGhlCisgICBjb3JlIGNvZGUsIHRob3VnaCBpbmRleCBBTXMgYXJlIG5vdCBzdHJpY3Rs eSByZXF1aXJlZCB0byB1c2UKKyAgIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2Nr PC9mdW5jdGlvbj4pLiAgVGhlIGluZGV4IEFNIHNob3VsZAorICAgcmUtcmVhZCB0aGUgcGFnZSwg Y29tcGFyZSB0aGUgY3VycmVudCBwYWdlIExTTiBhZ2FpbnN0CisgICA8c3RydWN0ZmllbGQ+YmF0 Y2gtJmd0O2xzbjwvc3RydWN0ZmllbGQ+LCBhbmQgZ2l2ZSB1cCBvbiBzZXR0aW5nCisgICA8bGl0 ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIGlmIHRoZSBMU04gaGFzIGFkdmFuY2VkLiAgQW4g YWR2YW5jZWQgTFNOCisgICBpbmRpY2F0ZXMgdGhhdCB0aGUgcGFnZSB3YXMgbW9kaWZpZWQgJm1k YXNoOyBwb3NzaWJseSBieQorICAgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiByZWN5Y2xpbmcg aGVhcCBUSURzICZtZGFzaDsgc28gaXQgd291bGQgYmUgdW5zYWZlCisgICB0byBhc3N1bWUgdGhh dCBpbmRleCBlbnRyaWVzIHN0aWxsIHBvaW50IHRvIHRoZSBzYW1lIGhlYXAgdHVwbGVzLiAgU2lu Y2UKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcgaXMgb25seSBhbiBvcHRp bWl6YXRpb24gaGludCwgaXQgaXMKKyAgIGFsd2F5cyBzYWZlIHRvIHNraXAgaXQuICBOb3RlIHRo YXQgdGhpcyBMU04gY29tcGFyaXNvbiB0ZWNobmlxdWUgcmVxdWlyZXMKKyAgIHRoZSBpbmRleCBB TSB0byB1c2UgZmFrZSAobW9ub3RvbmljYWxseSBpbmNyZWFzaW5nKSBMU05zIG9uIGl0cyBwYWdl cyBmb3IKKyAgIHJlbGF0aW9ucyB3aGVyZSBXQUwgaXMgbm90IGdlbmVyYXRlZCwgc2luY2UgcmVh bCBMU05zIGFyZSBub3QgYXZhaWxhYmxlIGluCisgICB0aGF0IGNhc2UuICBTZWUgdGhlIEItdHJl ZSBpbmRleCBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UKKyAgIGV4YW1wbGUgb2YgdGhp cyB0ZWNobmlxdWUuICBBbiBpbmRleCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExT TnMKKyAgIGNhbiBzdGlsbCBwcm92aWRlIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5j dGlvbj4sIGJ1dCBzaG91bGQgc2ltcGx5CisgICBkbyBub3RoaW5nIHdoZW4gdGhlIHJlbGF0aW9u IGRvZXMgbm90IGdlbmVyYXRlIFdBTCAoaS5lLiwgd2hlbgorICAgPGZ1bmN0aW9uPlJlbGF0aW9u TmVlZHNXQUwoKTwvZnVuY3Rpb24+IGlzIGZhbHNlKSwgc2luY2UgdGhlIExTTiBjb21wYXJpc29u CisgICB3b3VsZCBiZSB1bnJlbGlhYmxlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUg PGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBpcyBvcHRpb25h bC4gIEluZGV4CisgICBhY2Nlc3MgbWV0aG9kcyB0aGF0IHdhbnQgdG8gbWFyayBkZWFkIGluZGV4 IHR1cGxlcyB3aXRoCisgICA8bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIHNob3VsZCBw cm92aWRlIGl0OyB0aG9zZSB0aGF0IGRvbid0IGNhbgorICAgbGVhdmUgaXQgc2V0IHRvIDxsaXRl cmFsPk5VTEw8L2xpdGVyYWw+IGV2ZW4gd2hlbiB0aGV5IHByb3ZpZGUKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKzxwcm9ncmFtbGlz dGluZz4KK3ZvaWQKK2FtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAg ICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIENh bGxlZCBieSB0aGUgdGFibGUgQU0gKHZpYQorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF91bmd1 YXJkX2JhdGNoPC9mdW5jdGlvbj4pIHdoZW4gaXQgaXMgc2FmZSB0byBkcm9wCisgICB0aGUgVElE IHJlY3ljbGluZyBpbnRlcmxvY2sgdGhhdCB0aGUgaW5kZXggQU0gaG9sZHMgb24gdGhlIGJhdGNo J3MgaW5kZXgKKyAgIGxlYWYgcGFnZSwgd2hpY2ggcHJldmVudHMgY29uY3VycmVudCBUSUQgcmVj eWNsaW5nIGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgorICAgRm9ybWFsbHksIGFu IGluZGV4IEFNIG1heSBob2xkIGEgZGlmZmVyZW50IGtpbmQgb2YgaW50ZXJsb2NrLCBvciBtdWx0 aXBsZQorICAgaW50ZXJsb2NrcywgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGlu IHByYWN0aWNlIHRoZSBidWlsdC1pbgorICAgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsgQi10cmVlCisgICAmbWRhc2g7IGhvbGRz IGEgc2luZ2xlIGJ1ZmZlciBwaW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIv PgorICAgZm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBz Y2Fucy4gIFRoaXMgZnVuY3Rpb24KKyAgIG11c3QgYmUgaWRlbXBvdGVudDogaXQgbWF5IGJlIGNh bGxlZCBtb3JlIHRoYW4gb25jZSBmb3IgdGhlIHNhbWUgYmF0Y2gsIGFuZAorICAgbXVzdCBkbyBu b3RoaW5nIGlmIHRoZSBpbnRlcmxvY2sgaGFzIGFscmVhZHkgYmVlbiBkcm9wcGVkLiAgSW1wbGVt ZW50YXRpb25zCisgICB0aGF0IHVzZSBhIGJ1ZmZlciBwaW4gc2hvdWxkIGNoZWNrIHdoZXRoZXIg dGhlIGJ1ZmZlciBpcyBzdGlsbCB2YWxpZCBiZWZvcmUKKyAgIHJlbGVhc2luZyBpdCwgYW5kIHNl dCBpdCB0byA8bGl0ZXJhbD5JbnZhbGlkQnVmZmVyPC9saXRlcmFsPiBhZnRlcndhcmQuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBtYXkgY2hvb3NlIHRvIHJldGFpbiBp dHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMgYW4KKyAgIGludGVybmFsIHB1cnBv c2UgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlubmVkIGlu ZGV4CisgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgIGFueSBzY2hlbWUgdGhhdCByZXRhaW5zIGJ1ZmZl ciBwaW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3QgYmUgc3VyZSB0bworICAgZnJlZSB0 aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGZvciBleGFtcGxlIHdoZW4gPGZ1bmN0aW9u PmFtcmVzY2FuPC9mdW5jdGlvbj4KKyAgIGFuZC9vciA8ZnVuY3Rpb24+YW1lbmRzY2FuPC9mdW5j dGlvbj4gYXJlIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2VlcCB0aGUKKyAgIG51bWJlciBvZiBy ZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwgdG8gYXZvaWQgZXhoYXVzdGluZyB0aGUgYmFj a2VuZCdzCisgICBidWZmZXIgcGluIGxpbWl0LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBU aGUgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgcmVxdWly ZWQgZm9yIGFueSBpbmRleAorICAgYWNjZXNzIG1ldGhvZCB0aGF0IHByb3ZpZGVzIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFt bGlzdGluZz4KQEAgLTc2OCw4ICsxMDMwLDggQEAgYW1nZXRiaXRtYXAgKEluZGV4U2NhbkRlc2Mg c2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxsZXJzIHJlY2hlY2sgYm90aCB0aGUg c2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwgaW5kZXggcHJlZGljYXRlIChpZiBh bnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1pZ2h0IG5vdAogICAgYWx3YXlzIGJl IHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQK LSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2Fubm90IGJlIHVzZWQgaW4gdGhl IHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25lIG9mIDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LAorICAgb3Ig PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZCBpbiBhbnkgZ2l2ZW4g aW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0cmljdGlvbnMgdG9vIHdoZW4gdXNp bmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIGFzIGV4cGxhaW5lZAogICAgaW4g PHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAgIDwvcGFyYT4KQEAgLTc4MSw2ICsx MDQzLDI5IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBzdHJ1Y3QgbXVz dCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgSW5kZXggYWNjZXNz IG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50 ZXJmYWNlCisgICB3aWxsIGdlbmVyYWxseSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBiYXRjaCBhbGxv Y2F0aW9uIGluZnJhc3RydWN0dXJlCisgICAoPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9h bGxvYzwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9yZWxl YXNlPC9mdW5jdGlvbj4pIHdpdGhpbiB0aGVpcgorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9m dW5jdGlvbj4gaW1wbGVtZW50YXRpb24uICBUaGUgY29udmVudGlvbiBpcyB0aGF0IG9ubHkKKyAg IG9uZSBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lIGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiwKKyAgIHVubGlrZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IHdoZXJlIHNldmVyYWwgYmF0Y2hlcyBtYXkgYmUKKyAgIG91dHN0YW5kaW5nIGluIHRoZSBi YXRjaCByaW5nIGJ1ZmZlciBjb25jdXJyZW50bHkuICBUbyBtYWludGFpbiB0aGlzCisgICBvbmUt YmF0Y2gtYXQtYS10aW1lIGludmFyaWFudCwgdGhlIGluZGV4IEFNIGl0c2VsZiByZWxlYXNlcyBp dHMgcHJpb3IgYmF0Y2gKKyAgIHZpYSA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2U8L2Z1bmN0aW9uPiBqdXN0IGFzIHRoZSBzY2FuIGxlYXZlcworICAgdGhhdCBiYXRjaCdzIGlu ZGV4IHBhZ2UgYW5kIGlzIGFib3V0IHRvIGdlbmVyYXRlIHRoZSBuZXh0IGJhdGNoICZtZGFzaDsg dGhlCisgICBzYW1lIHBvaW50IHdoZXJlIGl0IGV4dHJhY3RzIG5hdmlnYXRpb24gc3RhdGUgKHN1 Y2ggYXMgc2libGluZy1wYWdlIGxpbmtzKQorICAgZnJvbSA8bGl0ZXJhbD5wcmlvcmJhdGNoPC9s aXRlcmFsPi4gIFRoaXMgZWFybHkgcmVsZWFzZSBpcyBzcGVjaWZpYyB0bworICAgPGZ1bmN0aW9u PmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRiYXRj aDwvZnVuY3Rpb24+CisgICBzY2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4g aXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRhYmxlIEFNCisgICBhbmQgY29yZSBjb2RlLCBhbmQg dGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVsZWFzZSBpdC4gIFNlZQorICAgPGZ1bmN0aW9uPl9i dF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEKKyAgIHJlZmVyZW5jZSBleGFtcGxlLiAgVGhlIHJlbGVh c2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCByZXVzZWQgYnkKKyAgIHRoZSBuZXh0 IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8L2Z1bmN0aW9uPiBjYWxsLCBhdm9p ZGluZworICAgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24gZHVyaW5nIHRoZSBiaXRtYXAgc2Nh bi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dyYW1saXN0aW5nPgogdm9pZApAQCAtNzk1 LDMyICsxMDgwLDQ0IEBAIGFtZW5kc2NhbiAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKICAgPHBhcmE+ CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtwb3MgKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4sCisgICAgICAgICAgICBJbmRleFNjYW5C YXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBjdXJyZW50IHNjYW4gcG9z aXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9ydCBvbmUKLSAgIHJlbWVt YmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSB0aGUgaW5kZXggQU0gdGhh dCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hhbmdlIHRoZSBzY2FuJ3MKKyAgIGxvZ2ljYWwg cG9zaXRpb24gaW4gYSB3YXkgdGhhdCByZXF1aXJlcyB0aGUgaW5kZXggQU0gdG8gcmVzZXQgYW55 IHN0YXRlCisgICB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3Mu ICBGb3IgZXhhbXBsZSwgQi10cmVlIG11c3QKKyAgIHJlc2V0IHRoZSBhcnJheSBrZXlzIHVzZWQg YnkgPGxpdGVyYWw+U2NhbGFyQXJyYXlPcEV4cHI8L2xpdGVyYWw+IHF1YWwKKyAgIGV2YWx1YXRp b24gd2hlbiB0aGUgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzLiAgVGhpcyBjYWxsYmFjayBpcyBpbnZv a2VkIHdoZW4KKyAgIHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0byBwcm9jZXNzIGEgYmF0Y2ggaW4g YSBkaWZmZXJlbnQgZGlyZWN0aW9uIHRoYW4KKyAgIHdhcyB1c2VkIHdoZW4gdGhlIGJhdGNoIHdh cyBvcmlnaW5hbGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+LCBhbmQgYWxzbyB3aGVuIGEgbWFya2VkIHNjYW4gcG9zaXRpb24gaXMKKyAgIGFib3V0IHRv IGJlIHJlc3RvcmVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFt bWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25seSBiZSBwcm92aWRlZCBpZiB0aGUg YWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBzY2Fucy4gIElmIGl0IGRvZXNuJ3Qs Ci0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0 cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkg YmUgc2V0IHRvIE5VTEwuCisgICBXaGVuIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4g aXMgY2FsbGVkIGR1ZSB0byBhIGNyb3NzLWJhdGNoCisgICBkaXJlY3Rpb24gY2hhbmdlLCB0aGUg Y29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBlZCB0aGUgYmF0Y2gncworICAgPHN0 cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHJlZmxlY3QgdGhlIG5ldyBzY2Fu IGRpcmVjdGlvbgorICAgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4gIFRoZSBpbmRleCBBTSBzaG91 bGQgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24KKyAgIHdoZW4gcmVzZXR0aW5nIGFueSBzdGF0 ZSB0aGF0IGRlcGVuZHMgb24ga25vd2luZyB3aGljaCB3YXkgdGhlIHNjYW4gaXMKKyAgIHByb2Nl ZWRpbmcuICBXaGVuIGNhbGxlZCB0byByZXN0b3JlIGEgbWFya2VkIHBvc2l0aW9uLCB0aGUgYmF0 Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGlzIG5vdCBtb2RpZmllZDsg aXQgcmV0YWlucyB0aGUgZGlyZWN0aW9uCisgICBmcm9tIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmln aW5hbGx5IHJldHVybmVkLiAgSW4gYm90aCBjYXNlcywgdGhlIGJhdGNoCisgICBwYXNzZWQgdG8g PGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyB0aGUgYmF0Y2ggdGhhdCB3aWxsIGJl IHVzZWQKKyAgIHRvIGNvbnRpbnVlIHRoZSBzY2FuLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci08 cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJbmRleFNjYW5EZXNjIHNjYW4pOwot PC9wcm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNjYW4gdG8gdGhlIG1vc3QgcmVjZW50 bHkgbWFya2VkIHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAgPHBhcmE+Ci0gICBUaGUgPGZ1bmN0 aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQg aWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMuICBJZiBpdCBk b2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3RycG9zPC9zdHJ1Y3RmaWVsZD4gZmll bGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3Ry dWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIEluZGV4IGFjY2VzcyBtZXRob2RzIHRoYXQgaGF2 ZSBwcml2YXRlIHN0YXRlIHdoaWNoIG11c3QgYmUgcmVzZXQgd2hlbiB0aGUKKyAgIHNjYW4gcG9z aXRpb24gY2hhbmdlcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0 aW9uPgorICAgaW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMgd2l0aCBubyBzdWNoIHN0YXRlIG1h eSBzZXQKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9zdHJ1Y3RmaWVsZD4gdG8gTlVMTC4K KyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGNhbiBvbmx5 IGJlIHByb3ZpZGVkIHdoZW4gdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIG9yZGVyZWQg c2NhbnMgdGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgaW50 ZXJmYWNlLiAgKE5vdGUgdGhhdCB3aGVuIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1 Y3RmaWVsZD4gaXMKKyAgIGZhbHNlLCB0aGUgc2NhbiBkaXJlY3Rpb24gY2Fubm90IGNoYW5nZSwg c28KKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlvbj4gd2lsbCBvbmx5IGJlIGNhbGxl ZCBkdWUgdG8gbWFyay9yZXN0b3JlCisgICBpbiB0aGF0IGNhc2UuKQogICA8L3BhcmE+CiAKICAg PHBhcmE+CkBAIC05NzUsNiArMTI3Miw4IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5 cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgICAgICBBY2Nlc3Mg bWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBpbiB0aGUgbmF0dXJhbCBvcmRlcmlu ZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRyZWUpIHNob3VsZCBzZXQKICAgICAg ICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0ZmllbGQ+IHRvIHRydWUuCisgICAgICAg Qm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9ydCB0aGlzIGNhcGFiaWxpdHkuCiAg ICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2RzIG11c3QgdXNlIGJ0cmVlLWNvbXBh dGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0aGVpciBlcXVhbGl0eSBhbmQgb3Jk ZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAtOTk0LDM0ICsxMjkzLDQyIEBAIGFt dHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQg b3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRl cmFsPiBhcmd1bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAorICAgb3JkZXJpbmcgb3BlcmF0b3Jz LiAgVGhlIGNvcmUgZXhlY3V0b3IgZXhwZWN0cyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+CisgICB0byBzZXQgPHN0cnVjdGZpZWxkPnhzX29yZGVyYnl2YWxzPC9zdHJ1Y3RmaWVsZD4g Zm9yIGVhY2ggcmV0dXJuZWQgdHVwbGUsCisgICBidXQgdGhlcmUgaXMgY3VycmVudGx5IG5vIG1l Y2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJpbmcgdmFsdWVzCisgICB3aXRoIGlu ZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0Y2guICBUaGlzIHdvdWxkIHJlcXVpcmUgYW4gYWRk aXRpb25hbAorICAgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhhdCBkb2VzIG5vdCB5ZXQgZXhpc3Qs IGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiBhCisgICBmdXR1cmUgdmVyc2lvbiBvZiA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBU aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8bGl0ZXJh bD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAgd2hpY2ggY2FuIGJlIGVpdGhlciA8 bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJhbD4gKHRoZSBub3JtYWwgY2FzZSkK ICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LiAgSWYgdGhl IGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVuY3Rpb24+IHNwZWNp ZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCB0aGVuIHRoZQot ICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMgdG8gYmUgc2Nhbm5lZCBiYWNrLXRv LWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFsIGZyb250LXRvLWJhY2sgZGlyZWN0 aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgcmV0dXJuCi0gICB0 aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgsIHJhdGhlciB0aGFuIHRoZSBmaXJz dCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRoaXMgd2lsbCBvbmx5IG9jY3VyIGZv ciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVjdGZpZWxkPmFtY2Fub3JkZXI8L3N0 cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAgZmlyc3QgY2FsbCwgPGZ1bmN0aW9u PmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNj YW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhlIGJhdGNoIGNvbnRhaW5pbmcgdGhl IGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0aGFuIHRoZSBiYXRjaCBjb250YWlu aW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8 L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KICAgIGVp dGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRseSByZXR1cm5lZCBlbnRyeS4gIChC dXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4gaXMgZmFs c2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhhdmUgdGhlIHNhbWUgZGlyZWN0aW9u IGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBY2Nlc3MgbWV0 aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0IHN1cHBvcnQgPHF1b3RlPm1hcmtp bmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4gYW5kIGxhdGVyIHJldHVybmluZyB0 byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAgIHBvc2l0aW9uIG1pZ2h0IGJlIHJl c3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25seSBvbmUgcG9zaXRpb24gbmVlZAot ICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVu Y3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlvdXNseSBtYXJrZWQgcG9zaXRpb24u ICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBvcmRlcmVkCi0gICBzY2Fu cyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtwb3M8L2Z1bmN0aW9uPiBhbmQgPGZ1 bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVuY3Rpb25zIGluIDxzdHJ1Y3RuYW1l PkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRob3NlIHBvaW50ZXJzIHRvIE5VTEwK LSAgIGluc3RlYWQuCisgICBTY2FucyB1c2luZyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1 bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydAorICAgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhIHBv c2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5nIHRvIHRoZQorICAgbWFya2VkIHBv c2l0aW9uLiAgVGhlIGNvcmUgZXhlY3V0b3IgbWFuYWdlcyB0aGUgcHJvY2VzcyBvZiBzYXZpbmcg YW5kCisgICByZXN0b3JpbmcgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSB3aXRob3V0IGV4cGxpY2l0 IGNvb3JkaW5hdGluZyB3aXRoIHRoZQorICAgdGFibGUgQU0uICBIb3dldmVyLCBpdCB3aWxsIGNh bGwgdGhlIGluZGV4IEFNJ3MgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgY2Fs bGJhY2sgYXMgbmVlZGVkIHdoZW4gcmVzdG9yaW5nIGEgbWFyaywgdG8gaW52YWxpZGF0ZSBhbnkg aW5kZXggQU0gc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3MgdGhlIHByb2dyZXNz IG9mIHRoZSBzY2FuIChzdWNoIGFzIGFycmF5IGtleQorICAgc3RhdGUpLiAgU2VlIHRoZSBkZXNj cmlwdGlvbiBvZiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGluCisgICA8eHJlZiBs aW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFpbHMuCiAgIDwvcGFyYT4KIAogICA8 cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5kIHRoZSBtYXJrIHBvc2l0aW9uIChp ZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNjYW4gcG9zaXRpb24gKGlmIGFueSkg bXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBhbmQgaW5kZXggQU0KICAgIGNvbnNp c3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGluc2VydGlvbnMgb3IgZGVsZXRpb25z IGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZyZXNobHktaW5zZXJ0ZWQgZW50cnkg aXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3b3VsZCBoYXZlIGZvdW5kIHRoZSBl bnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2FuIHN0YXJ0ZWQsIG9yIGZvcgpAQCAt MTA0NCwxMiArMTM1MSwxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5 cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgIDwvcGFyYT4KIAogICA8cGFyYT4K LSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgYW4g aW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBjYWxsLiAgVGhpcyBjYW4gYmUKLSAg IG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVu Y3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGluZyBsb2NrL3VubG9jayBjeWNsZXMg d2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNpcGxlCi0gICA8ZnVuY3Rpb24+YW1n ZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3RzIGFzIHJlcGVh dGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGNhbGxzLCBidXQgd2UgaW1w b3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0ZWFkIG9mIHVzaW5nIDxmdW5jdGlv bj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0aAorICAgPGZ1bmN0aW9uPmFtZ2V0 Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxlcyBpbiBvbmUgY2FsbC4gIFRoaXMg Y2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50IHRoYW4gd2l0aCBhbiA8cXVvdGU+ b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQgYWxsb3dzIGVmZmljaWVudCBzZXF1 ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250YWluaW5nCisgICBtYXRjaGVzLiAg SW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHNob3VsZCBoYXZl IHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9m dW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMsIGJ1 dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8KICAgIHNpbXBsaWZ5IG1hdHRlcnMu ICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IHJldHVybnMg YWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBvciByZXN0b3Jpbmcgc2NhbiBwb3Np dGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHksIHRoZSB0dXBsZXMgYXJlIHJldHVy bmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEwNTksMTUgKzEzNjgsMTUgQEAgYW10 cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBv cGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJvdmlzaW9uIGZvciBpbmRleC1vbmx5 IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCBzaW5jZSB0 aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50cyBvZgogICAgaW5kZXggdHVwbGVz LgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4KLSAgIGRvZXMg bm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0dXJuZWQgdHVwbGVzLCB3aXRoIGlt cGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2lu ZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGRvZXMg bm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0ZXIgaXQgcmV0dXJucyAoc2ltaWxh cmx5IHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgd2l0aAorICAgYW4g TVZDQyBzbmFwc2hvdCksIGFzIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2Nr aW5nIi8+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBOb3RlIHRoYXQgaXQgaXMgcGVybWl0 dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVudCBvbmx5Ci0gICA8ZnVuY3Rpb24+ YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24g aXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIuCisgICA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4v PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwKKyAgIG9yIHZpY2UgdmVyc2EsIGlmIGl0 cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRlZCB0byBvbmUgQVBJIG9yIHRoZSBv dGhlci4KICAgPC9wYXJhPgogCiAgPC9zZWN0MT4KQEAgLTExMjMsMTEgKzE0MzIsMTcgQEAgYW10 cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBv cGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFy YT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRhaW4gYSBwaW4KLSAgICAgICBvbiB0 aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3QgcmV0dXJuZWQgYnkKLSAgICAgICA8 ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0 ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBlbnRyaWVzIGZyb20gcGFnZXMgdGhh dCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhlIG5lZWQKLSAgICAgICBmb3IgdGhp cyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBBIHBpbiBtdXN0IGJlIGhlbGQgb24g YW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3RpbGwgbmVlZCB0bworICAgICAgIGJl IGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IG11c3QgYWNx dWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2ggaW5kZXggcGFnZSwgd2hpY2ggd2ls bCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5kIGhvbGRzIGEgcGluIG9uIHRoYXQg cGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBzY2Fucywg dGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5hZ2VzIHRoaXMgcGluIGRpcmVjdGx5 LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zLCB0aGUg aW5kZXggQU0gaG9sZHMgYSBidWZmZXIKKyAgICAgICBwaW4gb24gZWFjaCBiYXRjaCdzIGluZGV4 IGxlYWYgcGFnZSAoaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSksCisgICAgICAgd2hpbGUg dGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gdGhlIGludGVybG9jayBpcyBkcm9wcGVkIHZpYQor ICAgICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+LgorICAgICAgIFRoZSBu ZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93LgogICAgICAgPC9wYXJhPgogICAg ICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtMTEzOCwzOSArMTQ1Myw5MSBA QCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwg T2lkIG9wY2ludHlwZSk7CiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAgVGhpcyBj cmVhdGVzIG5vIHNlcmlvdXMgcHJvYmxlbXMgaWYgdGhhdCBpdGVtCiAgICBudW1iZXIgaXMgc3Rp bGwgdW51c2VkIHdoZW4gdGhlIHJlYWRlciByZWFjaGVzIGl0LCBzaW5jZSBhbiBlbXB0eQotICAg aXRlbSBzbG90IHdpbGwgYmUgaWdub3JlZCBieSA8ZnVuY3Rpb24+aGVhcF9mZXRjaCgpPC9mdW5j dGlvbj4uICBCdXQgd2hhdCBpZiBhCisgICBpdGVtIHNsb3Qgd2lsbCBzaW1wbHkgYmUgdHJlYXRl ZCBhcyBub3QtdmlzaWJsZS4gIEJ1dCB3aGF0IGlmIGEKICAgIHRoaXJkIGJhY2tlbmQgaGFzIGFs cmVhZHkgcmUtdXNlZCB0aGUgaXRlbSBzbG90IGZvciBzb21ldGhpbmcgZWxzZT8KICAgIFdoZW4g dXNpbmcgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIHRoZXJlIGlzIG5vIHByb2JsZW0gYmVj YXVzZQogICAgdGhlIG5ldyBvY2N1cGFudCBvZiB0aGUgc2xvdCBpcyBjZXJ0YWluIHRvIGJlIHRv byBuZXcgdG8gcGFzcyB0aGUKICAgIHNuYXBzaG90IHRlc3QuICBIb3dldmVyLCB3aXRoIGEgbm9u LU1WQ0MtY29tcGxpYW50IHNuYXBzaG90IChzdWNoIGFzCiAgICA8bGl0ZXJhbD5TbmFwc2hvdEFu eTwvbGl0ZXJhbD4pLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBhY2NlcHQgYW5kIHJldHVybgot ICAgYSByb3cgdGhhdCBkb2VzIG5vdCBpbiBmYWN0IG1hdGNoIHRoZSBzY2FuIGtleXMuICBXZSBj b3VsZCBkZWZlbmQKLSAgIGFnYWluc3QgdGhpcyBzY2VuYXJpbyBieSByZXF1aXJpbmcgdGhlIHNj YW4ga2V5cyB0byBiZSByZWNoZWNrZWQKLSAgIGFnYWluc3QgdGhlIGhlYXAgcm93IGluIGFsbCBj YXNlcywgYnV0IHRoYXQgaXMgdG9vIGV4cGVuc2l2ZS4gIEluc3RlYWQsCi0gICB3ZSB1c2UgYSBw aW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGluZGljYXRlIHRoYXQgdGhlIHJlYWRl cgotICAgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdodDwvcXVvdGU+IGZyb20gdGhlIGlu ZGV4IGVudHJ5IHRvIHRoZSBtYXRjaGluZwotICAgaGVhcCBlbnRyeS4gIE1ha2luZyA8ZnVuY3Rp b24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzCi0g ICB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fubm90IGRlbGV0ZSB0aGUgaGVhcCBl bnRyeSBiZWZvcmUgdGhlIHJlYWRlcgotICAgaXMgZG9uZSB3aXRoIGl0LiAgVGhpcyBzb2x1dGlv biBjb3N0cyBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5nCi0gICBvdmVyaGVh ZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJlIHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxp Y3QuCisgICBhIHdob2xseSB1bnJlbGF0ZWQgcm93IChvbmUgdGhhdCBkb2VzIG5vdCBuZWNlc3Nh cmlseSBzYXRpc2Z5IHRoZSBzY2FuCisgICBrZXlzKS4gIFdlIGNhbiBvcHRpb25hbGx5IHVzZSBh IHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkgdG8gaW5kaWNhdGUKKyAgIHRoYXQgdGhl IHJlYWRlciBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxpZ2h0PC9xdW90ZT4gZnJvbSB0aGUg aW5kZXgKKyAgIGVudHJ5IHRvIHRoZSBtYXRjaGluZyBoZWFwIGVudHJ5LiAgTWFraW5nIDxmdW5j dGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPgorICAgYmxvY2sgb24gc3VjaCBhIHBpbiBlbnN1 cmVzIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBjYW5ub3QgZGVsZXRlCisgICB0aGUg aGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlciBpcyBkb25lIHdpdGggaXQuICBUaGlzIHNvbHV0 aW9uIGNvc3RzCisgICBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRzIGJsb2NraW5nIG92ZXJo ZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUKKyAgIHRoZXJlIGFjdHVhbGx5IGlzIGEg Y29uZmxpY3QuICBXaGVuIHRoZSBzY2FuIHVzZXMgYW4gTVZDQy1jb21wbGlhbnQKKyAgIHNuYXBz aG90LCBob2xkaW5nIHRoZSBwaW4gaXMgdW5uZWNlc3NhcnkgYmVjYXVzZSB0aGUgc25hcHNob3Qg aXRzZWxmIHdpbGwKKyAgIHJlamVjdCBhbnkgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50IChz ZWUgYmVsb3cpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBUaGlzIHNvbHV0aW9uIHJlcXVp cmVzIHRoYXQgaW5kZXggc2NhbnMgYmUgPHF1b3RlPnN5bmNocm9ub3VzPC9xdW90ZT46IHdlIGhh dmUKLSAgIHRvIGZldGNoIGVhY2ggaGVhcCB0dXBsZSBpbW1lZGlhdGVseSBhZnRlciBzY2Fubmlu ZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleAotICAgZW50cnkuICBUaGlzIGlzIGV4cGVuc2l2ZSBm b3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVvdGU+YXN5bmNocm9ub3VzPC9xdW90 ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElEcyBmcm9tIHRoZSBpbmRleCwKLSAg IGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21ldGltZSBsYXRlciwgcmVxdWlyZXMg bXVjaCBsZXNzIGluZGV4Ci0gICBsb2NraW5nIG92ZXJoZWFkIGFuZCBjYW4gYWxsb3cgYSBtb3Jl IGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgotICAgUGVyIHRoZSBhYm92ZSBhbmFseXNp cywgd2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzIGFwcHJvYWNoIGZvcgotICAgbm9uLU1WQ0Mt Y29tcGxpYW50IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJvbm91cyBzY2FuIGlzIHdvcmthYmxl Ci0gICBmb3IgYSBxdWVyeSB1c2luZyBhbiBNVkNDIHNuYXBzaG90LgorICAgVGhpcyBzb2x1dGlv biByZXF1aXJlcyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gaW5kZXggc2Nh bnMgYmUKKyAgIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+OiB0aGUgdGFibGUgQU0gbXVzdCBm ZXRjaCBlYWNoIGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5IGFmdGVyIHNjYW5uaW5nIHRoZSBj b3JyZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcworICAgZXhwZW5zaXZlIGZvciBhIG51 bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+ IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25lZCB0bworICAgYWxsb3cgc2NhbnMg dG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBieSBjb2xsZWN0aW5nIGJhdGNoZXMg b2YKKyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdlcywgdGhlIHRhYmxlIEFNIGNhbiBw cmVmZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUgYmxvY2tzIHdlbGwgYWhlYWQgb2Yg dGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5bmNocm9ub3VzCisgICBJL08gd2hl biBhdmFpbGFibGUpLCBhbGxvd2luZyBhIG1vcmUgZWZmaWNpZW50IGhlYXAgYWNjZXNzIHBhdHRl cm4uICBOb3QKKyAgIGFsbCBzY2FucyBlbmQgdXAgYmVpbmcgYXN5bmNocm9ub3VzIGluIHByYWN0 aWNlLCBidXQgdGhlIGludGVyZmFjZSBpcworICAgZGVzaWduZWQgdG8gYWxsb3cgaXQuICBQZXIg dGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUgc3luY2hyb25vdXMKKyAgIGFwcHJv YWNoIGZvciBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLCBidXQgYW4gYXN5bmNocm9ub3Vz IHNjYW4gaXMKKyAgIHdvcmthYmxlIGZvciBhIHF1ZXJ5IHVzaW5nIGFuIE1WQ0Mgc25hcHNob3Qu CiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluIGFuIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3MgbWV0aG9kIGRvZXMgbm90Ci0gICBrZWVw IGFuIGluZGV4IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVybmVkIHR1cGxlcy4gIFRoZXJlZm9yZQot ICAgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBzdWNoIHNjYW5zIHdpdGggTVZDQy1jb21wbGlhbnQg c25hcHNob3RzLgorICAgQmVjYXVzZSB0aGUgdGFibGUgQU0gcmVhZHMgbXVsdGlwbGUgaW5kZXgg bGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g dG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBpdCBjYW5ub3QKKyAgIHByYWN0aWNhbGx5 IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0YW5lb3VzbHkuICBUaGVyZWZvcmUs CisgICBJL08gcHJlZmV0Y2hpbmcgd2l0aAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4gTVZDQy1jb21wbGlhbnQKKyAgIHNuYXBzaG90 IGlzIGluIHVzZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hldGhlciBhIGJhdGNoJ3Mg VElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKHR5cGljYWxseSBhbiBpbmRleCBwYWdlIGJ1ZmZlcgor ICAgcGluKSBpcyBkcm9wcGVkIGltbWVkaWF0ZWx5IG9yIGRlZmVycmVkIGlzIGNvbnRyb2xsZWQg YnkgYSBnZW5lcmljLAorICAgc2Nhbi1sZXZlbCBwb2xpY3kgdGhhdCBpcyBkZXRlcm1pbmVkIHdo ZW4gdGhlIHNjYW4gaXMgb3BlbmVkICZtZGFzaDsgaXQgaXMKKyAgIG5vdCB1bmRlciB0aGUgY29u dHJvbCBvZiBlaXRoZXIgdGhlIGluZGV4IEFNIG9yIHRoZSB0YWJsZSBBTS4gIFRoZSBzY2FuJ3MK KyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBmbGFn IGVuY29kZXMgdGhpcyBwb2xpY3kuCisgICBJdCBpcyBzZXQgYmFzZWQgb24gdHdvIGNyaXRlcmlh IHRoYXQgYXJlIGtub3duIHRvIHRoZSBjb3JlIHNjYW4gbWFjaGluZXJ5OgorICAgd2hldGhlciB0 aGUgc2NhbiB1c2VzIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LCBhbmQgd2hldGhlciBpdCBp cyBhbgorICAgaW5kZXgtb25seSBzY2FuLiAgU3BlY2lmaWNhbGx5LAorICAgPHN0cnVjdGZpZWxk PmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUgd2hlbiB0aGUgc2Nh biB1c2VzCisgICBhbiBNVkNDIHNuYXBzaG90IGFuZCBpcyA8ZW1waGFzaXM+bm90PC9lbXBoYXNp cz4gYW4gaW5kZXgtb25seSBzY2FuLiAgV2hlbgorICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRp YXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHRoZSBpbnRlcmxvY2sgaXMKKyAgIGRy b3BwZWQgaW5zaWRlIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrPC9mdW5jdGlv bj4gKGJlZm9yZSB0aGUKKyAgIGJhdGNoIGlzIGV2ZW4gcmV0dXJuZWQgdG8gdGhlIHRhYmxlIEFN KSwgYmVjYXVzZSBhIHBsYWluIGluZGV4IHNjYW4gd2l0aCBhbgorICAgTVZDQyBzbmFwc2hvdCB3 aWxsIGFsd2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVyZSB0aGUgTVZDQyB2aXNpYmlsaXR5 CisgICBjaGVjayBpcyBhdXRob3JpdGF0aXZlICZtZGFzaDsgZXZlbiBpZiA8Y29tbWFuZD5WQUNV VU08L2NvbW1hbmQ+IHJlY3ljbGVzIGEKKyAgIFRJRCwgdGhlIG5ldyBvY2N1cGFudCBjYW5ub3Qg cGFzcyB0aGUgc25hcHNob3QgdGVzdC4gIFdoZW4gaXQgaXMgZmFsc2UsIHRoZQorICAgaW50ZXJs b2NrIGlzIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBBTSBleHBsaWNpdGx5IGNhbGxzCisgICA8 ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiwgYmVjYXVzZSB0aGUgc2NhbiBjYW5u b3QgcmVseSBvbiB0aGF0CisgICBoZWFwIHBhZ2UgTVZDQyBiYWNrc3RvcC4gIEZvciBub24tTVZD QyBzY2FucywgdGhlcmUgaXMgbm8gTVZDQyBzbmFwc2hvdCB0bworICAgcmVqZWN0IGEgcmVjeWNs ZWQgVElEJ3MgbmV3IG9jY3VwYW50IGF0IGFsbC4gIEZvciBpbmRleC1vbmx5IHNjYW5zLCBldmVu CisgICB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSBzY2FuIHR5cGljYWxseSBhdm9pZHMgdmlz aXRpbmcgdGhlIGhlYXAgcGFnZQorICAgYWx0b2dldGhlciAodXNpbmcgdGhlIHZpc2liaWxpdHkg bWFwIGluc3RlYWQpLCBzbyB0aGUgTVZDQyBjaGVjayB0aGF0IHdvdWxkCisgICBjYXRjaCBhIHJl Y3ljbGVkIFRJRCB1c3VhbGx5IG5ldmVyIHJ1bnMuICBJbiBib3RoIGNhc2VzIHRoZSBpbnRlcmxv Y2sgb24KKyAgIHRoZSBpbmRleCBwYWdlIGlzIHdoYXQgcHJldmVudHMgPGNvbW1hbmQ+VkFDVVVN PC9jb21tYW5kPiBmcm9tIHJlY3ljbGluZworICAgVElEcyB3aGlsZSB0aGUgc2NhbiBpcyBzdGls bCBpbiBmbGlnaHQuICBJbiBhbGwgY2FzZXMsIHRoZSB0YWJsZSBBTSBkZWNpZGVzCisgICA8ZW1w aGFzaXM+d2hlbjwvZW1waGFzaXM+IHRvIGNhbGwgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9m dW5jdGlvbj47IHRoZQorICAgaW5kZXggQU0gZGVjaWRlcyA8ZW1waGFzaXM+d2hhdDwvZW1waGFz aXM+IHRvIHJlbGVhc2UuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFNpbWlsYXJseSwgYW4g PGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5kZXggc2NhbiBpcyBpbmhlcmVudGx5 CisgICBhc3luY2hyb25vdXM6IGFsbCBtYXRjaGluZyBUSURzIGFyZSBjb2xsZWN0ZWQgaW50byBh IGJpdG1hcCBiZWZvcmUgYW55IGhlYXAKKyAgIGFjY2VzcyBiZWdpbnMuICBTdWNoIHNjYW5zIHRo ZXJlZm9yZSByZXF1aXJlIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90LAorICAgYW5kIHRoZXJl IGlzIG5vIG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRvIGhvbGQgaW5kZXggcGFnZSBwaW5z LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHVz ZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11c3QgbWFuYWdlCisgICBwaW4gbGlm ZXRpbWUgdGhlbXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8gdGFibGUgQU0gaW50ZXJtZWRpYXJ5 ICh1bmxpa2UKKyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPikuICBUaGUg aW5kZXggQU0gbXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAgY3VycmVudCBpbmRleCBwYWdlIHVu dGlsIHRoZSBzY2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBhZ2Ugb3IgZW5kcy4KICAgPC9wYXJh PgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUu c2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggOTgyNTMyZmU3 Li5mNThjMjg4MTUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbApAQCAtMTE1MywxMiAr MTE1MywxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQogICAgICA8L3BhcmE+CiAKICAgICAg PHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgPGxpdGVyYWw+YW1n ZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAgbGlua2VuZD0iaW5kZXhhbSIvPik7 IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+Ci0gICAgICBjYW5u b3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50 IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRleGVzIHdpdGggYW4gZXhjbHVzaW9u IGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9lcyBub3RoaW5nIHRoYXQgYW4gb3Jk aW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuCi0gICAgICBTbyBpbiBw cmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9h Y3JvbnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2QgbXVzdCBzdXBwb3J0IGVpdGhlciA8 bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAgb3IgPGxpdGVyYWw+YW1nZXRiYXRj aDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQKKyAgICAgIHBy ZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9ueW0+IGNhbm5vdCBiZSB1c2VkLiAg QWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVz aW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0 cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhhdCBhbgorICAgICAgb3JkaW5hcnkg dW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIuICBTbyBpbiBwcmFjdGljZSB0aGUK KyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUgPGFjcm9ueW0+R2lTVDwvYWNyb255 bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9ueW0+LgogICAgICA8L3BhcmE+CiAK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhf YW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpp bmRleCAzMWY4ZDJiODEuLmUyYjg2NWZiNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9k dW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvZHVt bXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzM0LDEwICszMzQsMTIgQEAgZGloYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2NhbiA9IGRpYmVnaW5zY2FuLAogCQku YW1yZXNjYW4gPSBkaXJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBOVUxMLAorCQkuYW1nZXRiYXRj aCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNo ID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJLmFtZW5kc2NhbiA9IGRpZW5kc2Nh biwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9z cmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWlu aXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDBjMDdjOTQ1Zi4uNjljNDNiMWJiIDEwMDY0NAotLS0g YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdApAQCAtMjA1LDYgKzIwNSw3IEBAIEJPT0wKIEJPT0xFQU4KIEJPWAog QlRBcnJheUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxkU3RhdGUKIEJUQ2FsbGJhY2tTdGF0 ZQogQlRDeWNsZUlkCkBAIC0yMzIsOCArMjMzLDYgQEAgQlRTY2FuSW5zZXJ0RGF0YQogQlRTY2Fu S2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFxdWVEYXRhCi1CVFNjYW5Qb3NEYXRh Ci1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJyYXlDb250ZXh0CiBCVFNwb29sCkBA IC0yNjIsNiArMjYxLDkgQEAgQmFzZUJhY2t1cENtZAogQmFzZUJhY2t1cFRhcmdldEhhbmRsZQog QmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRlCitCYXRjaE1hdGNoaW5nSXRlbQor QmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBCZWdpbkRpcmVjdE1vZGlmeV9mdW5j dGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBCZWdpbkZvcmVpZ25Nb2RpZnlfZnVu Y3Rpb24KQEAgLTEyMzIsNiArMTIzNCw3IEBAIEhiYUxpbmUKIEhlYWRsaW5lSnNvblN0YXRlCiBI ZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5CitIZWFwQmF0Y2hEYXRhCiBIZWFw Q2hlY2tDb250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0YQogSGVhcFBhZ2VGcmVlemUKQEAg LTEzMTEsNiArMTMxNCw4IEBAIEluZGV4T3JkZXJCeURpc3RhbmNlCiBJbmRleFBhdGgKIEluZGV4 UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2FuQmF0Y2gKK0luZGV4U2NhbkJhdGNo RGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0RhdGEKIEluZGV4U2Nhbkluc3RydW1l bnRhdGlvbgpAQCAtMzUxNywxOCArMzUyMiwxNyBAQCBhbWNhbnJldHVybl9mdW5jdGlvbgogYW1j b3N0ZXN0aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5jdGlvbgogYW1lc3RpbWF0ZXBhcmFs bGVsc2Nhbl9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlvbgogYW1nZXRiaXRtYXBfZnVuY3Rp b24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0dXBsZV9mdW5jdGlvbgogYW1pbml0 cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5jdGlvbgogYW1pbnNlcnRjbGVhbnVw X2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0aW9uc19mdW5jdGlvbgogYW1wYXJh bGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5jdGlvbgogYW1yZXNjYW5fZnVuY3Rp b24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX2NtcHR5cGVfZnVuY3Rpb24KIGFt dHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1bWNsZWFudXBfZnVuY3Rpb24KLS0g CjIuNTMuMAoK --000000000000fc3ce4064da6c2f3 Content-Type: application/octet-stream; name="v17-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Disposition: attachment; filename="v17-0002-heapam-Track-heap-block-in-IndexFetchHeapData-us.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn2hpq9517 RnJvbSBlN2NmNjkxYjNkNWIwOGY4MmFjMjI0ZGU0ODJmNTk0ODBiMjExYTEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxNyAwMi8xOF0g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YQogdXNpbmcgeHNf YmxrCgpBZGQgYW4gZXhwbGljaXQgQmxvY2tOdW1iZXIgZmllbGQgKHhzX2JsaykgdG8gSW5kZXhG ZXRjaEhlYXBEYXRhIHRoYXQKdHJhY2tzIHdoaWNoIGhlYXAgYmxvY2sgaXMgY3VycmVudGx5IHBp bm5lZCBpbiB4c19jYnVmLgoKaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlIG5vdyB1c2VzIHhzX2Js ayB0byBkZXRlcm1pbmUgd2hlbiBidWZmZXIKc3dpdGNoaW5nIGlzIG5lZWRlZCwgcmVwbGFjaW5n IHRoZSBwcmV2aW91cyBhcHByb2FjaCB0aGF0IGNvbXBhcmVkCmJ1ZmZlciBpZGVudGl0aWVzIHZp YSBSZWxlYXNlQW5kUmVhZEJ1ZmZlciBvbiBldmVyeSBub24tSE9ULWNoYWluIGNhbGwuClRoZSBu ZXcgYXBwcm9hY2ggc2tpcHMgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgcGF0aCBlbnRpcmVseSB3aGVu IHRoZSBuZXh0ClRJRCBpcyBvbiB0aGUgc2FtZSBoZWFwIHBhZ2UsIHdoaWNoIGFsc28gbWVhbnMg dGhhdCBoZWFwX3BhZ2VfcHJ1bmVfb3B0CmlzIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGJsb2Nr ICh3aGVuIHRoZSBibG9jayBpcyBmaXJzdCBwaW5uZWQpLgoKVGhpcyBpcyBwcmVwYXJhdG9yeSB3 b3JrIGZvciBhbiB1cGNvbWluZyBjb21taXQgdGhhdCB3aWxsIG5lZWQgeHNfYmxrCnRvIG1hbmFn ZSBidWZmZXIgcGluIHRyYW5zZmVycyBiZXR3ZWVuIHRoZSBzY2FuIGFuZCB0aGUgZXhlY3V0b3Ig c2xvdC4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTog QW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL0NBSDItV3o9Zz1KVFN5REI0VXRCNXN1MlpjdnNTN1ZiUCtaTXZ2YUc2QUJvQ2Ir czhMd0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAg ICAgICAgICAgfCAgNSArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jIHwgMjkgKysrKysrKysrKysrKysrLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDIxIGlu c2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCAzMDVlY2Mz MWEuLmVjZjFiYTFjZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTI0LDEwICsxMjQsMTEgQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaEhlYXBEYXRhCiAJSW5kZXhGZXRjaFRhYmxlRGF0YSB4c19i YXNlOwkvKiBBTSBpbmRlcGVuZGVudCBwYXJ0IG9mIHRoZSBkZXNjcmlwdG9yICovCiAKIAkvKgot CSAqIEN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiwgaWYgYW55LiBOQjogaWYgeHNfY2J1ZiBp cyBub3QKLQkgKiBJbnZhbGlkQnVmZmVyLCB3ZSBob2xkIGEgcGluIG9uIHRoYXQgYnVmZmVyLgor CSAqIEN1cnJlbnQgaGVhcCBidWZmZXIgaW4gc2NhbiAoYW5kIGl0cyBibG9jayBudW1iZXIpLCBp ZiBhbnkuICBOQjogaWYKKwkgKiB4c19ibGsgaXMgbm90IEludmFsaWRCbG9ja051bWJlciwgd2Ug aG9sZCBhIHBpbiBpbiB4c19jYnVmLgogCSAqLwogCUJ1ZmZlcgkJeHNfY2J1ZjsKKwlCbG9ja051 bWJlciB4c19ibGs7CiAKIAkvKiBDdXJyZW50IGhlYXAgYmxvY2sncyBjb3JyZXNwb25kaW5nIHBh Z2UgaW4gdGhlIHZpc2liaWxpdHkgbWFwICovCiAJQnVmZmVyCQl4c192bWJ1ZmZlcjsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDI1M2E3MzViNi4uY2ZlNDY4 OWE4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTg2LDYg Kzg2LDcgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKIAogCWhzY2Fu LT54c19iYXNlLnJlbCA9IHJlbDsKIAloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJ aHNjYW4tPnhzX2JsayA9IEludmFsaWRCbG9ja051bWJlcjsKIAloc2Nhbi0+eHNfdm1idWZmZXIg PSBJbnZhbGlkQnVmZmVyOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKQEAgLTEwNyw2ICsx MDgsNyBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nh bikKIAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCQloc2Nhbi0+eHNfdm1i dWZmZXIgPSBJbnZhbGlkQnVmZmVyOwogCX0KKwloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2Nr TnVtYmVyOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTMyLDI0ICsxMzQsMjkgQEAgaGVhcGFtX2lu ZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCiAJQXNz ZXJ0KFRUU19JU19CVUZGRVJUVVBMRShzbG90KSk7CiAKLQkvKiBXZSBjYW4gc2tpcCB0aGUgYnVm ZmVyLXN3aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLwotCWlmICgh KmNhbGxfYWdhaW4pCisJLyogV2UgY2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMg aWYgd2UncmUgb24gdGhlIHNhbWUgcGFnZS4gKi8KKwlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVt UG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBi dWZmZXIgaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9idWYg PSBoc2Nhbi0+eHNfY2J1ZjsKKwkJQXNzZXJ0KCEqY2FsbF9hZ2Fpbik7CiAKLQkJaHNjYW4tPnhz X2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJ ICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcih0aWQpKTsKKwkJLyogUmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9y IG5leHQgdGltZSAqLworCQloc2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpOworCisJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOworCisJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZl cihoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCi0JCSAqIFBydW5l IHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICog UHJ1bmUgcGFnZSB3aGVuIGl0IGlzIHBpbm5lZCBmb3IgdGhlIGZpcnN0IHRpbWUKIAkJICovCi0J CWlmIChwcmV2X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKLQkJCWhlYXBfcGFnZV9wcnVuZV9vcHQo aHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJJmhzY2FuLT54c192 bWJ1ZmZlcik7CisJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nh bi0+eHNfY2J1ZiwKKwkJCQkJCQkmaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAl9CiAKKwlBc3NlcnQo QnVmZmVyR2V0QmxvY2tOdW1iZXIoaHNjYW4tPnhzX2NidWYpID09IGhzY2FuLT54c19ibGspOwor CUFzc2VydChoc2Nhbi0+eHNfYmxrID09IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7 CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNvIHdlIGNhbiBleGFtaW5l IHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19T SEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hfYnVmZmVyKHRpZCwKLS0g CjIuNTMuMAoK --000000000000fc3ce4064da6c2f3--