From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 2C20B3858D3C for ; Mon, 17 Oct 2022 01:23:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 2C20B3858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.95,190,1661846400"; d="scan'208";a="84848028" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 16 Oct 2022 17:23:10 -0800 IronPort-SDR: f96t2EjQ4tmnj2yW59ZtGzc4A13QRPYb6xLOsRA+VurISvEmagpDo63bLrinbuHCunhZqsFo3S Hpnai4MLhXUgWyljaW2/C/OaFmSldbC5R1f/Plw2Uu2wpJtBbFg4vne3TnBPc9m33Ot2rxUCZk 1FxDMcUJQ/ed+ZlE7WHrHlNhlEO/jrEqWqtEE3ycUctUoQYgvA0Ztz8npnfp/FJ8mvhsDZZ30g YhCjEMDKvsEuY9g9Ffu8CZrMf4FJc+DIvruFXG5NishNXgIuNNw6EAoHnLlObqkp7d6ZgBG/Z1 kgY= Content-Type: multipart/mixed; boundary="------------lnF31YAx2Svhm35ZnqiWPbI0" Message-ID: Date: Sun, 16 Oct 2022 19:23:05 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: Re: [PATCH v3] Re: OpenMP: Generate SIMD clones for functions with "declare target" Content-Language: en-US To: Jakub Jelinek , Jan Hubicka CC: Thomas Schwinge , "gcc-patches@gcc.gnu.org" References: <0b64e323-63f9-e4b7-eb7f-83f3b5e3125b@codesourcery.com> <001679b1-814a-c1db-5611-c663f6931d11@codesourcery.com> From: Sandra Loosemore In-Reply-To: X-ClientProxiedBy: svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) To svr-orw-mbx-13.mgc.mentorg.com (147.34.90.213) X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,NICE_REPLY_A,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------lnF31YAx2Svhm35ZnqiWPbI0 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit On 9/30/22 04:37, Jakub Jelinek wrote: > We've discussed this at Cauldron. Especially for this patch, but less > urgently for explicit declare simd on non-exported functions (less urgently > just because people don't mark everything declare simd usually) solving the > above is essential. I don't say it can't be done incrementally, but if the > patch is added to trunk, it needs to be solved before 13 branches. > We need to arrange cgraph to process the declare simd clones after the > callers of the corresponding main function, so that by the time we try to > post-IPA optimize the clones we can see if they were actually used or not > and if not, throw them away. > > On the other side, for the implicit declare simd (in explicit case it is > user's choice), maybe it might be useful to actually see if the function clone > is vectorizable before deciding whether to actually make use of it. > Because I doubt it will be a good optimization if we clone it, push > arguments into vectors, then because vectorization failed take it appart, > do a serial loop, create return vector from the scalar results and return. > Though, thinking more about it, for the amdgcn case maybe it is worth even > in that case if we manage to vectorize the caller. Because if failed > vectorization on admgcn means we perform significantly slower, it can be > helpful to have even partial vectorization, vectorize statements that can > be vectorized and for others use a scalar loop. Our vectorizer is not > prepared to do that right now I believe (which is why e.g. for > #pragma omp ordered simd we just make the whole loop non-vectorizable, > rather than using a scalar loop for stuff in there and vectorize the rest), > but with this optimization we'd effectively achieve that at least at > function call boundaries (though, only in one direction, if the caller can > be vectorized and callee can't; no optimization if caller can't and callee > could be). My sense is that the first approach would be more straightforward than the second one, and I am willing to continue to work on that. However, I think I need some direction to get started, as I presently know nothing about cgraph and I was unable to find any useful overview or interface documentation in the GCC internals manual. Is this as simple as inserting an existing pass into the passlist to clean up after vectorization, or does it involve writing something more or less from scratch? > >> + /* OpenMP directives are not permitted. */ >> + CASE_GIMPLE_OMP: >> + return false; > > This makes no sense. The function is called on low GIMPLE during IPA, > there are no GOMP_* statements at this point in the IL, everything has > been expanded. Most of OpenMP directives though end up calling > libgomp APIs which aren't pure/const and don't have declare simd > attribute... > Exception can be say master construct, or static scheduling nowait > worksharing loop. > >> + /* Conservatively reject all EH-related constructs. */ >> + case GIMPLE_CATCH: >> + case GIMPLE_EH_FILTER: >> + case GIMPLE_EH_MUST_NOT_THROW: >> + case GIMPLE_EH_ELSE: >> + case GIMPLE_EH_DISPATCH: >> + case GIMPLE_RESX: >> + case GIMPLE_TRY: > > Most of these won't appear in low gimple either, I think GIMPLE_RESX > does and GIMPLE_EH_DISPATCH too, the rest probably can't. OK, this was my bad. I cut and pasted this from some code that was originally for the OMP lowering pass. I've moved the entire plausibility filter to a new pass that runs just before OMP lowering. It seems easier to detect the things that are invalid in a cloneable function when they are still in a form closer to the source constructs. >> + return false; >> + >> + /* Asms are not permitted since we don't know what they do. */ >> + case GIMPLE_ASM: >> + return false; > > What about volatile stmts? Even volatile loads should be punted on. That's fixed now too. > >> + attr = lookup_attribute ("omp declare simd", >> + DECL_ATTRIBUTES (node->decl)); >> + >> + /* See if we can add an "omp declare simd" directive implicitly >> + before giving up. */ >> + /* FIXME: OpenACC "#pragma acc routine" translates into >> + "omp declare target", but appears also to have some other effects >> + that conflict with generating SIMD clones, causing ICEs. So don't >> + do this if we've got OpenACC instead of OpenMP. */ >> + if (attr == NULL_TREE >> + && flag_openmp_target_simd_clone >> + && !oacc_get_fn_attrib (node->decl)) > > I admit I don't remember where exactly the simd clone happens wrt. other > IPA passes, but I think it is late pass; so, does it happen for GCN > offloading only in the lto1 offloading compiler? > Shouldn't the auto optimization be then done only in the offloading > lto1 for GCN then (say guard on targetm boolean)? I'm afraid I don't know much about offloading, but I was under the impression it all goes through the same compilation process, just with a different target? > Otherwise, if we do it say for host offloading fallback as well > (I think it is still undesirable for PTX offloading because it is a waste of > time, there is no vectorization there, it is SIMT instead), it might be > a good idea to check cgraph that the function has at least one caller. As I said previously, I don't understand cgraph, but in my new patch I arranged things so that the implicit clones are only created if there is also a call to the function found in an OMP loop (not just one caller anywhere). So this should be fixed now. New patch attached. Is this one OK for mainline? -Sandra --------------lnF31YAx2Svhm35ZnqiWPbI0 Content-Type: text/x-patch; charset="UTF-8"; name="auto-declare-simd-oct16.patch" Content-Disposition: attachment; filename="auto-declare-simd-oct16.patch" Content-Transfer-Encoding: base64 Y29tbWl0IGViMWZlMjViMTI1Y2QxNTNiMmM2NjFmMWM1NGU2MWZjZWNmNDc1NGIKQXV0aG9y OiBTYW5kcmEgTG9vc2Vtb3JlIDxzYW5kcmFAY29kZXNvdXJjZXJ5LmNvbT4KRGF0ZTogICBT YXQgT2N0IDE1IDAyOjAzOjAzIDIwMjIgKzAwMDAKCiAgICBPcGVuTVA6IEdlbmVyYXRlIFNJ TUQgY2xvbmVzIGZvciBmdW5jdGlvbnMgd2l0aCAiZGVjbGFyZSB0YXJnZXQiCiAgICAKICAg IFRoaXMgcGF0Y2ggY2F1c2VzIHRoZSBJUEEgc2ltZGNsb25lIHBhc3MgdG8gZ2VuZXJhdGUg Y2xvbmVzIGZvcgogICAgZnVuY3Rpb25zIHdpdGggdGhlICJvbXAgZGVjbGFyZSB0YXJnZXQi IGF0dHJpYnV0ZSBhcyBpZiB0aGV5IGhhZAogICAgIm9tcCBkZWNsYXJlIHNpbWQiLCBwcm92 aWRlZCB0aGUgZnVuY3Rpb24gYXBwZWFycyB0byBiZSBzdWl0YWJsZSBmb3IKICAgIFNJTUQg ZXhlY3V0aW9uLiAgVGhlIGZpbHRlciBpcyBjb25zZXJ2YXRpdmUsIHJlamVjdGluZyBmdW5j dGlvbnMKICAgIHRoYXQgd3JpdGUgbWVtb3J5IG9yIHRoYXQgY2FsbCBvdGhlciBmdW5jdGlv bnMgbm90IGtub3duIHRvIGJlIHNhZmUuCiAgICBBIG5ldyBvcHRpb24gLWZvcGVubXAtdGFy Z2V0LXNpbWQtY2xvbmUgaXMgYWRkZWQgdG8gY29udHJvbCB0aGlzCiAgICB0cmFuc2Zvcm1h dGlvbjsgaXQncyBlbmFibGVkIGF0IC1PMiBhbmQgaGlnaGVyLgogICAgCiAgICBnY2MvQ2hh bmdlTG9nOgogICAgCiAgICAgICAgICAgICogY29tbW9uLm9wdCAoZm9wZW5tcC10YXJnZXQt c2ltZC1jbG9uZSk6IE5ldyBvcHRpb24uCiAgICAgICAgICAgICogY29uZmlnL2FhcmNoNjQv YWFyY2g2NC5jYwogICAgICAgICAgICAoYWFyY2g2NF9zaW1kX2Nsb25lX2NvbXB1dGVfdmVj c2l6ZV9hbmRfc2ltZGxlbik6IFVwZGF0ZS4KICAgICAgICAgICAgKiBjb25maWcvZ2NuL2dj bi5jYwogICAgICAgICAgICAoZ2NuX3NpbWRfY2xvbmVfY29tcHV0ZV92ZWNzaXplX2FuZF9z aW1kbGVuKTogVXBkYXRlLgogICAgICAgICAgICAqIGNvbmZpZy9pMzg2L2kzODYuY2MKICAg ICAgICAgICAgKGl4ODZfc2ltZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4p OiBVcGRhdGUuCiAgICAgICAgICAgICogZG9jL2ludm9rZS50ZXhpICgtZm9wZW5tcC10YXJn ZXQtc2ltZC1jbG9uZSk6IERvY3VtZW50LgogICAgICAgICAgICAqIGRvYy90bS50ZXhpOiBS ZWdlbmVyYXRlZC4KICAgICAgICAgICAgKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24p OiBBZGQgYXV0b19zaW1kX2Nsb25lX2NhbmRpZGF0ZSBhbmQKICAgICAgICAgICAgYXV0b19z aW1kX2NhbGxfY2FuZGlkYXRlIGJpdGZpZWxkcy4KICAgICAgICAgICAgKiBsdG8tc3RyZWFt ZXItaW4uY2MgKGlucHV0X3N0cnVjdF9mdW5jdGlvbl9iYXNlKTogSGFuZGxlIHRoZSBuZXcK ICAgICAgICAgICAgYml0ZmllbGRzLgogICAgICAgICAgICAqIGx0by1zdHJlYW1lci1vdXQu Y2MgKG91dHB1dF9zdHJ1Y3RfZnVuY3Rpb25fYmFzZSk6IExpa2V3aXNlLgogICAgICAgICAg ICAqIG9tcC1sb3cuY2MgKGF1dG9fZGVjbGFyZV9zaW1kX3NpZ25hdHVyZV9vayk6IE5ldy4K ICAgICAgICAgICAgKGNoZWNrX2F1dG9fZGVjbGFyZV9zaW1kX3N0bXQpOiBOZXcuCiAgICAg ICAgICAgIChjaGVja19hdXRvX2RlY2xhcmVfc2ltZF9vcCk6IE5ldy4KICAgICAgICAgICAg KG1heWJlX21hcmtfYXV0b19kZWNsYXJlX3NpbWQpOiBOZXcuCiAgICAgICAgICAgIChhdXRv X2RlY2xhcmVfc2ltZF9zY2FuX2Zvcl9jYWxscyk6IE5ldy4KICAgICAgICAgICAgKGF1dG9f ZGVjbGFyZV9zaW1kX3NjYW5fZm9yX2xvb3BzKTogTmV3LgogICAgICAgICAgICAoZXhlY3V0 ZV9hdXRvX2RlY2xhcmVfc2ltZCk6IE5ldy4KICAgICAgICAgICAgKHBhc3NfZGF0YV9vbXBf YXV0b19kZWNsYXJlX3NpbWQpOiBOZXcuCiAgICAgICAgICAgIChwYXNzX29tcF9hdXRvX2Rl Y2xhcmVfc2ltZCk6IE5ldy4KICAgICAgICAgICAgKG1ha2VfcGFzc19vbXBfYXV0b19kZWNs YXJlX3NpbWQpOiBOZXcuCiAgICAgICAgICAgICogb21wLXNpbWQtY2xvbmUuY2MgKHNpbWRf Y2xvbmVfY3JlYXRlKTogQWRkIGZvcmNlX2xvY2FsIGFyZ3VtZW50LAogICAgICAgICAgICBt YWtlIHRoZSBzeW1ib2wgaGF2ZSBpbnRlcm5hbCBsaW5rYWdlIGlmIGl0IGlzIHRydWUuCiAg ICAgICAgICAgIChleHBhbmRfc2ltZF9jbG9uZXMpOiBBbHNvIGNoZWNrIGZvciBjbG9uZWFi bGUgZnVuY3Rpb25zIHdpdGgKICAgICAgICAgICAgIm9tcCBkZWNsYXJlIHRhcmdldCIuICBQ YXNzIGV4cGxpY2l0X3AgYXJndW1lbnQgdG8KICAgICAgICAgICAgc2ltZF9jbG9uZS5jb21w dXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4gdGFyZ2V0IGhvb2suCiAgICAgICAgICAgICogb3B0 cy5jYyAoZGVmYXVsdF9vcHRpb25zX3RhYmxlKTogQWRkIC1mb3Blbm1wLXRhcmdldC1zaW1k LWNsb25lLgogICAgICAgICAgICAqIHBhc3Nlcy5kZWY6IEFkZCBwYXNzX29tcF9hdXRvX2Rl Y2xhcmVfc2ltZC4KICAgICAgICAgICAgKiB0YXJnZXQuZGVmIChUQVJHRVRfU0lNRF9DTE9O RV9DT01QVVRFX1ZFQ1NJWkVfQU5EX1NJTURMRU4pOgogICAgICAgICAgICBBZGQgYm9vbCBl eHBsaWNpdF9wIGFyZ3VtZW50LgogICAgICAgICAgICAqIHRyZWUtcGFzcy5oOiAobWFrZV9w YXNzX29tcF9hdXRvX2RlY2xhcmVfc2ltZCk6IERlY2xhcmUuCiAgICAKICAgIGdjYy90ZXN0 c3VpdGUvQ2hhbmdlTG9nOgogICAgCiAgICAgICAgICAgICogZysrLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtMS5DOiBOZXcuCiAgICAgICAgICAgICogZysrLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtMi5DOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtMS5jOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtMi5jOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtMy5jOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtNC5jOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtNS5jOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtNi5jOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtNy5jOiBOZXcuCiAgICAgICAgICAgICogZ2NjLmRnL2dvbXAvdGFyZ2V0 LXNpbWQtY2xvbmUtOC5jOiBOZXcuCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbW1vbi5vcHQgYi9n Y2MvY29tbW9uLm9wdAppbmRleCBiY2UzZTUxNGY2NS4uNWVlN2Q5NmQ2NWQgMTAwNjQ0Ci0t LSBhL2djYy9jb21tb24ub3B0CisrKyBiL2djYy9jb21tb24ub3B0CkBAIC0yMjE0LDYgKzIy MTQsMTAgQEAgZm9taXQtZnJhbWUtcG9pbnRlcgogQ29tbW9uIFZhcihmbGFnX29taXRfZnJh bWVfcG9pbnRlcikgT3B0aW1pemF0aW9uCiBXaGVuIHBvc3NpYmxlIGRvIG5vdCBnZW5lcmF0 ZSBzdGFjayBmcmFtZXMuCiAKK2ZvcGVubXAtdGFyZ2V0LXNpbWQtY2xvbmUKK0NvbW1vbiBW YXIoZmxhZ19vcGVubXBfdGFyZ2V0X3NpbWRfY2xvbmUpIE9wdGltaXphdGlvbgorR2VuZXJh dGUgU0lNRCBjbG9uZXMgZm9yIGZ1bmN0aW9ucyB3aXRoIHRoZSBPcGVuTVAgZGVjbGFyZSB0 YXJnZXQgZGlyZWN0aXZlLgorCiBmb3B0LWluZm8KIENvbW1vbiBWYXIoZmxhZ19vcHRfaW5m bykgT3B0aW1pemF0aW9uCiBFbmFibGUgYWxsIG9wdGltaXphdGlvbiBpbmZvIGR1bXBzIG9u IHN0ZGVyci4KZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmNjIGIv Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MKaW5kZXggMWQwZjk5NGYyODEuLjJhYWZk MGQyZGQ3IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYworKysg Yi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYwpAQCAtMjY2OTgsNyArMjY2OTgsOCBA QCBjdXJyZW50bHlfc3VwcG9ydGVkX3NpbWRfdHlwZSAodHJlZSB0LCB0cmVlIGIpCiBzdGF0 aWMgaW50CiBhYXJjaDY0X3NpbWRfY2xvbmVfY29tcHV0ZV92ZWNzaXplX2FuZF9zaW1kbGVu IChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCiAJCQkJCXN0cnVjdCBjZ3JhcGhfc2ltZF9j bG9uZSAqY2xvbmVpLAotCQkJCQl0cmVlIGJhc2VfdHlwZSwgaW50IG51bSkKKwkJCQkJdHJl ZSBiYXNlX3R5cGUsIGludCBudW0sCisJCQkJCWJvb2wgZXhwbGljaXRfcCkKIHsKICAgdHJl ZSB0LCByZXRfdHlwZTsKICAgdW5zaWduZWQgaW50IGVsdF9iaXRzLCBjb3VudDsKQEAgLTI2 NzE2LDggKzI2NzE3LDkgQEAgYWFyY2g2NF9zaW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9h bmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAogCSAgfHwgY29uc3Rfc2lt ZGxlbiA+IDEwMjQKIAkgIHx8IChjb25zdF9zaW1kbGVuICYgKGNvbnN0X3NpbWRsZW4gLSAx KSkgIT0gMCkpCiAgICAgewotICAgICAgd2FybmluZ19hdCAoREVDTF9TT1VSQ0VfTE9DQVRJ T04gKG5vZGUtPmRlY2wpLCAwLAotCQkgICJ1bnN1cHBvcnRlZCBzaW1kbGVuICV3ZCIsIGNv bnN0X3NpbWRsZW4pOworICAgICAgaWYgKGV4cGxpY2l0X3ApCisJd2FybmluZ19hdCAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKG5vZGUtPmRlY2wpLCAwLAorCQkgICAgInVuc3VwcG9ydGVk IHNpbWRsZW4gJXdkIiwgY29uc3Rfc2ltZGxlbik7CiAgICAgICByZXR1cm4gMDsKICAgICB9 CiAKQEAgLTI2NzI1LDcgKzI2NzI3LDkgQEAgYWFyY2g2NF9zaW1kX2Nsb25lX2NvbXB1dGVf dmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAogICBpZiAo VFJFRV9DT0RFIChyZXRfdHlwZSkgIT0gVk9JRF9UWVBFCiAgICAgICAmJiAhY3VycmVudGx5 X3N1cHBvcnRlZF9zaW1kX3R5cGUgKHJldF90eXBlLCBiYXNlX3R5cGUpKQogICAgIHsKLSAg ICAgIGlmIChUWVBFX1NJWkUgKHJldF90eXBlKSAhPSBUWVBFX1NJWkUgKGJhc2VfdHlwZSkp CisgICAgICBpZiAoIWV4cGxpY2l0X3ApCisJOworICAgICAgZWxzZSBpZiAoVFlQRV9TSVpF IChyZXRfdHlwZSkgIT0gVFlQRV9TSVpFIChiYXNlX3R5cGUpKQogCXdhcm5pbmdfYXQgKERF Q0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKIAkJICAgICJHQ0MgZG9lcyBu b3QgY3VycmVudGx5IHN1cHBvcnQgbWl4ZWQgc2l6ZSB0eXBlcyAiCiAJCSAgICAiZm9yICU8 c2ltZCU+IGZ1bmN0aW9ucyIpOwpAQCAtMjY3NTIsNyArMjY3NTYsOSBAQCBhYXJjaDY0X3Np bWRfY2xvbmVfY29tcHV0ZV92ZWNzaXplX2FuZF9zaW1kbGVuIChzdHJ1Y3QgY2dyYXBoX25v ZGUgKm5vZGUsCiAgICAgICBpZiAoY2xvbmVpLT5hcmdzW2ldLmFyZ190eXBlICE9IFNJTURf Q0xPTkVfQVJHX1RZUEVfVU5JRk9STQogCSAgJiYgIWN1cnJlbnRseV9zdXBwb3J0ZWRfc2lt ZF90eXBlIChhcmdfdHlwZSwgYmFzZV90eXBlKSkKIAl7Ci0JICBpZiAoVFlQRV9TSVpFIChh cmdfdHlwZSkgIT0gVFlQRV9TSVpFIChiYXNlX3R5cGUpKQorCSAgaWYgKCFleHBsaWNpdF9w KQorCSAgICA7CisJICBlbHNlIGlmIChUWVBFX1NJWkUgKGFyZ190eXBlKSAhPSBUWVBFX1NJ WkUgKGJhc2VfdHlwZSkpCiAJICAgIHdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9O IChub2RlLT5kZWNsKSwgMCwKIAkJCSJHQ0MgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQg bWl4ZWQgc2l6ZSB0eXBlcyAiCiAJCQkiZm9yICU8c2ltZCU+IGZ1bmN0aW9ucyIpOwpAQCAt MjY3ODIsOSArMjY3ODgsMTEgQEAgYWFyY2g2NF9zaW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6 ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAogICAgICAgaWYgKGNs b25laS0+c2ltZGxlbi5pc19jb25zdGFudCAoJmNvbnN0X3NpbWRsZW4pCiAJICAmJiBtYXli ZV9uZSAodmVjX2JpdHMsIDY0VSkgJiYgbWF5YmVfbmUgKHZlY19iaXRzLCAxMjhVKSkKIAl7 Ci0JICB3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCksIDAs Ci0JCSAgICAgICJHQ0MgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgc2ltZGxlbiAld2Qg Zm9yIHR5cGUgJXFUIiwKLQkJICAgICAgY29uc3Rfc2ltZGxlbiwgYmFzZV90eXBlKTsKKwkg IGlmIChleHBsaWNpdF9wKQorCSAgICB3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElP TiAobm9kZS0+ZGVjbCksIDAsCisJCQkiR0NDIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0 IHNpbWRsZW4gJXdkIGZvciAiCisJCQkidHlwZSAlcVQiLAorCQkJY29uc3Rfc2ltZGxlbiwg YmFzZV90eXBlKTsKIAkgIHJldHVybiAwOwogCX0KICAgICB9CmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2djbi9nY24uY2MgYi9nY2MvY29uZmlnL2djbi9nY24uY2MKaW5kZXggM2RjMjk0 YzJkMmYuLmQ3MDU5YTIwOTFjIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2djbi9nY24uY2MK KysrIGIvZ2NjL2NvbmZpZy9nY24vZ2NuLmNjCkBAIC01MDI0LDcgKzUwMjQsOCBAQCBzdGF0 aWMgaW50CiBnY25fc2ltZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4gKHN0 cnVjdCBjZ3JhcGhfbm9kZSAqQVJHX1VOVVNFRCAobm9kZSksCiAJCQkJCSAgICBzdHJ1Y3Qg Y2dyYXBoX3NpbWRfY2xvbmUgKmNsb25laSwKIAkJCQkJICAgIHRyZWUgYmFzZV90eXBlLAot CQkJCQkgICAgaW50IEFSR19VTlVTRUQgKG51bSkpCisJCQkJCSAgICBpbnQgQVJHX1VOVVNF RCAobnVtKSwKKwkJCQkJICAgIGJvb2wgZXhwbGljaXRfcCkKIHsKICAgaWYgKGtub3duX2Vx IChjbG9uZWktPnNpbWRsZW4sIDBVKSkKICAgICBjbG9uZWktPnNpbWRsZW4gPSA2NDsKQEAg LTUwMzIsOSArNTAzMywxMCBAQCBnY25fc2ltZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVfYW5k X3NpbWRsZW4gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqQVJHX1VOVVNFRCAobm9kZQogICAgIHsK ICAgICAgIC8qIE5vdGUgdGhhdCB4ODYgaGFzIGEgc2ltaWxhciBtZXNzYWdlIHRoYXQgaXMg bGlrZWx5IHRvIHRyaWdnZXIgb24KIAkgc2l6ZXMgdGhhdCBhcmUgT0sgZm9yIGdjbjsgdGhl IHVzZXIgY2FuJ3Qgd2luLiAgKi8KLSAgICAgIHdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xP Q0FUSU9OIChub2RlLT5kZWNsKSwgMCwKLQkJICAidW5zdXBwb3J0ZWQgc2ltZGxlbiAld2Qg KGFtZGdjbikiLAotCQkgIGNsb25laS0+c2ltZGxlbi50b19jb25zdGFudCAoKSk7CisgICAg ICBpZiAoZXhwbGljaXRfcCkKKwl3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAo bm9kZS0+ZGVjbCksIDAsCisJCSAgICAidW5zdXBwb3J0ZWQgc2ltZGxlbiAld2QgKGFtZGdj bikiLAorCQkgICAgY2xvbmVpLT5zaW1kbGVuLnRvX2NvbnN0YW50ICgpKTsKICAgICAgIHJl dHVybiAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuY2Mg Yi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jYwppbmRleCA0ODBkYjM1ZjZjZC4uNWQ4YmI2OTNj YTkgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmNjCisrKyBiL2djYy9jb25m aWcvaTM4Ni9pMzg2LmNjCkBAIC0yMzYyNiw3ICsyMzYyNiw4IEBAIGl4ODZfbWVtbW9kZWxf Y2hlY2sgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgdmFsKQogc3RhdGljIGludAogaXg4Nl9z aW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9u b2RlICpub2RlLAogCQkJCQkgICAgIHN0cnVjdCBjZ3JhcGhfc2ltZF9jbG9uZSAqY2xvbmVp LAotCQkJCQkgICAgIHRyZWUgYmFzZV90eXBlLCBpbnQgbnVtKQorCQkJCQkgICAgIHRyZWUg YmFzZV90eXBlLCBpbnQgbnVtLAorCQkJCQkgICAgIGJvb2wgZXhwbGljaXRfcCkKIHsKICAg aW50IHJldCA9IDE7CiAKQEAgLTIzNjM1LDggKzIzNjM2LDkgQEAgaXg4Nl9zaW1kX2Nsb25l X2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2Rl LAogCSAgfHwgY2xvbmVpLT5zaW1kbGVuID4gMTAyNAogCSAgfHwgKGNsb25laS0+c2ltZGxl biAmIChjbG9uZWktPnNpbWRsZW4gLSAxKSkgIT0gMCkpCiAgICAgewotICAgICAgd2Fybmlu Z19hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKG5vZGUtPmRlY2wpLCAwLAotCQkgICJ1bnN1 cHBvcnRlZCBzaW1kbGVuICV3ZCIsIGNsb25laS0+c2ltZGxlbi50b19jb25zdGFudCAoKSk7 CisgICAgICBpZiAoZXhwbGljaXRfcCkKKwl3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NB VElPTiAobm9kZS0+ZGVjbCksIDAsCisJCSAgICAidW5zdXBwb3J0ZWQgc2ltZGxlbiAld2Qi LCBjbG9uZWktPnNpbWRsZW4udG9fY29uc3RhbnQgKCkpOwogICAgICAgcmV0dXJuIDA7CiAg ICAgfQogCkBAIC0yMzY1Niw4ICsyMzY1OCw5IEBAIGl4ODZfc2ltZF9jbG9uZV9jb21wdXRl X3ZlY3NpemVfYW5kX3NpbWRsZW4gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwKIAkgIGJy ZWFrOwogCS8qIEZBTExUSFJVICovCiAgICAgICBkZWZhdWx0OgotCXdhcm5pbmdfYXQgKERF Q0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKLQkJICAgICJ1bnN1cHBvcnRl ZCByZXR1cm4gdHlwZSAlcVQgZm9yIHNpbWQiLCByZXRfdHlwZSk7CisJaWYgKGV4cGxpY2l0 X3ApCisJICB3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCks IDAsCisJCSAgICAgICJ1bnN1cHBvcnRlZCByZXR1cm4gdHlwZSAlcVQgZm9yIHNpbWQiLCBy ZXRfdHlwZSk7CiAJcmV0dXJuIDA7CiAgICAgICB9CiAKQEAgLTIzNjg2LDEzICsyMzY4OSwx NCBAQCBpeDg2X3NpbWRfY2xvbmVfY29tcHV0ZV92ZWNzaXplX2FuZF9zaW1kbGVuIChzdHJ1 Y3QgY2dyYXBoX25vZGUgKm5vZGUsCiAJZGVmYXVsdDoKIAkgIGlmIChjbG9uZWktPmFyZ3Nb aV0uYXJnX3R5cGUgPT0gU0lNRF9DTE9ORV9BUkdfVFlQRV9VTklGT1JNKQogCSAgICBicmVh azsKLQkgIHdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwg MCwKLQkJICAgICAgInVuc3VwcG9ydGVkIGFyZ3VtZW50IHR5cGUgJXFUIGZvciBzaW1kIiwg YXJnX3R5cGUpOworCSAgaWYgKGV4cGxpY2l0X3ApCisJICAgIHdhcm5pbmdfYXQgKERFQ0xf U09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKKwkJCSJ1bnN1cHBvcnRlZCBhcmd1 bWVudCB0eXBlICVxVCBmb3Igc2ltZCIsIGFyZ190eXBlKTsKIAkgIHJldHVybiAwOwogCX0K ICAgICB9CiAKLSAgaWYgKCFUUkVFX1BVQkxJQyAobm9kZS0+ZGVjbCkpCisgIGlmICghVFJF RV9QVUJMSUMgKG5vZGUtPmRlY2wpIHx8ICFleHBsaWNpdF9wKQogICAgIHsKICAgICAgIC8q IElmIHRoZSBmdW5jdGlvbiBpc24ndCBleHBvcnRlZCwgd2UgY2FuIHBpY2sgdXAganVzdCBv bmUgSVNBCiAJIGZvciB0aGUgY2xvbmVzLiAgKi8KQEAgLTIzNzYzLDkgKzIzNzY3LDEwIEBA IGl4ODZfc2ltZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4gKHN0cnVjdCBj Z3JhcGhfbm9kZSAqbm9kZSwKIAljbnQgLz0gY2xvbmVpLT52ZWNzaXplX2Zsb2F0OwogICAg ICAgaWYgKGNudCA+IChUQVJHRVRfNjRCSVQgPyAxNiA6IDgpKQogCXsKLQkgIHdhcm5pbmdf YXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKLQkJICAgICAgInVu c3VwcG9ydGVkIHNpbWRsZW4gJXdkIiwKLQkJICAgICAgY2xvbmVpLT5zaW1kbGVuLnRvX2Nv bnN0YW50ICgpKTsKKwkgIGlmIChleHBsaWNpdF9wKQorCSAgICB3YXJuaW5nX2F0IChERUNM X1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCksIDAsCisJCQkidW5zdXBwb3J0ZWQgc2lt ZGxlbiAld2QiLAorCQkJY2xvbmVpLT5zaW1kbGVuLnRvX2NvbnN0YW50ICgpKTsKIAkgIHJl dHVybiAwOwogCX0KICAgICAgIH0KZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkg Yi9nY2MvZG9jL2ludm9rZS50ZXhpCmluZGV4IGMxNzZlMmRjNjQ2Li43NWVkNTRlOGNjZSAx MDA2NDQKLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysgYi9nY2MvZG9jL2ludm9rZS50 ZXhpCkBAIC0yMDQsNyArMjA0LDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KIC1m bGF4LXZlY3Rvci1jb252ZXJzaW9ucyAgLWZtcy1leHRlbnNpb25zIEBnb2wKIC1mb2ZmbG9h ZD1AdmFye2FyZ30gIC1mb2ZmbG9hZC1vcHRpb25zPUB2YXJ7YXJnfSBAZ29sCiAtZm9wZW5h Y2MgIC1mb3BlbmFjYy1kaW09QHZhcntnZW9tfSBAZ29sCi0tZm9wZW5tcCAgLWZvcGVubXAt c2ltZCBAZ29sCistZm9wZW5tcCAgLWZvcGVubXAtc2ltZCAgLWZvcGVubXAtdGFyZ2V0LXNp bWQtY2xvbmUgQGdvbAogLWZwZXJtaXR0ZWQtZmx0LWV2YWwtbWV0aG9kcz1AdmFye3N0YW5k YXJkfSBAZ29sCiAtZnBsYW45LWV4dGVuc2lvbnMgIC1mc2lnbmVkLWJpdGZpZWxkcyAgLWZ1 bnNpZ25lZC1iaXRmaWVsZHMgQGdvbAogLWZzaWduZWQtY2hhciAgLWZ1bnNpZ25lZC1jaGFy IC1mc3RyaWN0LWZsZXgtYXJyYXlzWz1AdmFye259XSBAZ29sCkBAIC0yNzYxLDYgKzI3NjEs MTYgQEAgRW5hYmxlIGhhbmRsaW5nIG9mIE9wZW5NUCdzIEBjb2Rle3NpbWR9LCBAY29kZXtk ZWNsYXJlIHNpbWR9LAogQGNvZGV7W1tvbXA6OmRpcmVjdGl2ZSguLi4pXV19IGFuZCBAY29k ZXtbW29tcDo6c2VxdWVuY2UoLi4uKV1dfSBpbiBDKysKIGFuZCBAY29kZXshJG9tcH0gaW4g Rm9ydHJhbi4gIE90aGVyIE9wZW5NUCBkaXJlY3RpdmVzIGFyZSBpZ25vcmVkLgogCitAaXRl bSAtZm9wZW5tcC10YXJnZXQtc2ltZC1jbG9uZQorQG9waW5kZXggZm9wZW5tcC10YXJnZXQt c2ltZC1jbG9uZQorQGNpbmRleCBPcGVuTVAgdGFyZ2V0IFNJTUQgY2xvbmUKK0luIGFkZGl0 aW9uIHRvIGdlbmVyYXRpbmcgU0lNRCBjbG9uZXMgZm9yIGZ1bmN0aW9ucyBtYXJrZWQgd2l0 aCB0aGUKK0Bjb2Rle2RlY2xhcmUgc2ltZH0gZGlyZWN0aXZlLCBHQ0MgYWxzbyBnZW5lcmF0 ZXMgY2xvbmVzCitmb3IgZnVuY3Rpb25zIG1hcmtlZCB3aXRoIHRoZSBPcGVuTVAgQGNvZGV7 ZGVjbGFyZSB0YXJnZXR9IGRpcmVjdGl2ZQordGhhdCBhcmUgc3VpdGFibGUgZm9yIHZlY3Rv cml6YXRpb24gd2hlbiB0aGlzIG9wdGlvbiBpcyBpbiBlZmZlY3QuCitJdCBpcyBlbmFibGVk IGJ5IGRlZmF1bHQgYXQgQG9wdGlvbnstTzJ9IGFuZCBoaWdoZXIgKGJ1dCBub3QgQG9wdGlv bnstT3N9CitvciBAb3B0aW9uey1PZ30pLgorCiBAaXRlbSAtZnBlcm1pdHRlZC1mbHQtZXZh bC1tZXRob2RzPUB2YXJ7c3R5bGV9CiBAb3BpbmRleCBmcGVybWl0dGVkLWZsdC1ldmFsLW1l dGhvZHMKIEBvcGluZGV4IGZwZXJtaXR0ZWQtZmx0LWV2YWwtbWV0aG9kcz1jMTEKZGlmZiAt LWdpdCBhL2djYy9kb2MvdG0udGV4aSBiL2djYy9kb2MvdG0udGV4aQppbmRleCAxMTBmOGRm YTBhOS4uNzhiODg3MWZiODcgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvdG0udGV4aQorKysgYi9n Y2MvZG9jL3RtLnRleGkKQEAgLTYyNzIsNyArNjI3Miw3IEBAIFRoZSBkZWZhdWx0IGlzIEBj b2Rle05VTExfVFJFRX0gd2hpY2ggbWVhbnMgdG8gbm90IHZlY3Rvcml6ZSBzY2F0dGVyCiBz dG9yZXMuCiBAZW5kIGRlZnR5cGVmbgogCi1AZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gaW50 IFRBUkdFVF9TSU1EX0NMT05FX0NPTVBVVEVfVkVDU0laRV9BTkRfU0lNRExFTiAoc3RydWN0 IGNncmFwaF9ub2RlICpAdmFye30sIHN0cnVjdCBjZ3JhcGhfc2ltZF9jbG9uZSAqQHZhcnt9 LCBAdmFye3RyZWV9LCBAdmFye2ludH0pCitAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gaW50 IFRBUkdFVF9TSU1EX0NMT05FX0NPTVBVVEVfVkVDU0laRV9BTkRfU0lNRExFTiAoc3RydWN0 IGNncmFwaF9ub2RlICpAdmFye30sIHN0cnVjdCBjZ3JhcGhfc2ltZF9jbG9uZSAqQHZhcnt9 LCBAdmFye3RyZWV9LCBAdmFye2ludH0sIEB2YXJ7Ym9vbH0pCiBUaGlzIGhvb2sgc2hvdWxk IHNldCBAdmFye3ZlY3NpemVfbWFuZ2xlfSwgQHZhcnt2ZWNzaXplX2ludH0sIEB2YXJ7dmVj c2l6ZV9mbG9hdH0KIGZpZWxkcyBpbiBAdmFye3NpbWRfY2xvbmV9IHN0cnVjdHVyZSBwb2lu dGVkIGJ5IEB2YXJ7Y2xvbmVfaW5mb30gYXJndW1lbnQgYW5kIGFsc28KIEB2YXJ7c2ltZGxl bn0gZmllbGQgaWYgaXQgd2FzIHByZXZpb3VzbHkgMC4KZGlmZiAtLWdpdCBhL2djYy9mdW5j dGlvbi5oIGIvZ2NjL2Z1bmN0aW9uLmgKaW5kZXggMDk4NjEzNzY2YmUuLmE3MDZmZGQwNDc2 IDEwMDY0NAotLS0gYS9nY2MvZnVuY3Rpb24uaAorKysgYi9nY2MvZnVuY3Rpb24uaApAQCAt NDM4LDYgKzQzOCwxNSBAQCBzdHJ1Y3QgR1RZKCgpKSBmdW5jdGlvbiB7CiAKICAgLyogU2V0 IGlmIHRoZXJlIGFyZSBhbnkgT01QX1RBUkdFVCByZWdpb25zIGluIHRoZSBmdW5jdGlvbi4g ICovCiAgIHVuc2lnbmVkIGludCBoYXNfb21wX3RhcmdldCA6IDE7CisKKyAgLyogU2V0IGlm IHRoaXMgZnVuY3Rpb24gaXMgc3VpdGFibGUgZm9yIGF1dG8tY3JlYXRpb24gb2YgT3Blbk1Q IFNJTUQKKyAgICAgY2xvbmVzLiAgKi8KKyAgdW5zaWduZWQgaW50IGF1dG9fc2ltZF9jbG9u ZV9jYW5kaWRhdGUgOiAxOworCisgIC8qIFNldCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxl ZCBpbiBhIGNvbnRleHQgd2hlcmUgYW4gT3Blbk1QIFNJTUQKKyAgICAgY2xvbmUgbWlnaHQg YmUgdXNlZC4gIE9ubHkgdXNlZnVsIG9uIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbHNvIGlkZW50 aWZpZWQKKyAgICAgYXMgYXV0b19zaW1kX2Nsb25lX2NhbmRpZGF0ZS4gICovCisgIHVuc2ln bmVkIGludCBhdXRvX3NpbWRfY2FsbF9jYW5kaWRhdGUgOiAxOwogfTsKIAogLyogQWRkIHRo ZSBkZWNsIEQgdG8gdGhlIGxvY2FsX2RlY2xzIGxpc3Qgb2YgRlVOLiAgKi8KZGlmZiAtLWdp dCBhL2djYy9sdG8tc3RyZWFtZXItaW4uY2MgYi9nY2MvbHRvLXN0cmVhbWVyLWluLmNjCmlu ZGV4IGZhODk2MzQwZGFmLi5mNGMwNTRjMmM1MyAxMDA2NDQKLS0tIGEvZ2NjL2x0by1zdHJl YW1lci1pbi5jYworKysgYi9nY2MvbHRvLXN0cmVhbWVyLWluLmNjCkBAIC0xMzE4LDYgKzEz MTgsOCBAQCBpbnB1dF9zdHJ1Y3RfZnVuY3Rpb25fYmFzZSAoc3RydWN0IGZ1bmN0aW9uICpm biwgY2xhc3MgZGF0YV9pbiAqZGF0YV9pbiwKICAgZm4tPmNhbGxzX2VoX3JldHVybiA9IGJw X3VucGFja192YWx1ZSAoJmJwLCAxKTsKICAgZm4tPmhhc19mb3JjZV92ZWN0b3JpemVfbG9v cHMgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CiAgIGZuLT5oYXNfc2ltZHVpZF9sb29w cyA9IGJwX3VucGFja192YWx1ZSAoJmJwLCAxKTsKKyAgZm4tPmF1dG9fc2ltZF9jbG9uZV9j YW5kaWRhdGUgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CisgIGZuLT5hdXRvX3NpbWRf Y2FsbF9jYW5kaWRhdGUgPSBicF91bnBhY2tfdmFsdWUgKCZicCwgMSk7CiAgIGZuLT52YV9s aXN0X2Zwcl9zaXplID0gYnBfdW5wYWNrX3ZhbHVlICgmYnAsIDgpOwogICBmbi0+dmFfbGlz dF9ncHJfc2l6ZSA9IGJwX3VucGFja192YWx1ZSAoJmJwLCA4KTsKICAgZm4tPmxhc3RfY2xp cXVlID0gYnBfdW5wYWNrX3ZhbHVlICgmYnAsIHNpemVvZiAoc2hvcnQpICogOCk7CmRpZmYg LS1naXQgYS9nY2MvbHRvLXN0cmVhbWVyLW91dC5jYyBiL2djYy9sdG8tc3RyZWFtZXItb3V0 LmNjCmluZGV4IDJlN2FmMDM4ODhiLi5hNDM0ZTIyMTY2NCAxMDA2NDQKLS0tIGEvZ2NjL2x0 by1zdHJlYW1lci1vdXQuY2MKKysrIGIvZ2NjL2x0by1zdHJlYW1lci1vdXQuY2MKQEAgLTIy NzgsNiArMjI3OCw4IEBAIG91dHB1dF9zdHJ1Y3RfZnVuY3Rpb25fYmFzZSAoc3RydWN0IG91 dHB1dF9ibG9jayAqb2IsIHN0cnVjdCBmdW5jdGlvbiAqZm4pCiAgIGJwX3BhY2tfdmFsdWUg KCZicCwgZm4tPmNhbGxzX2VoX3JldHVybiwgMSk7CiAgIGJwX3BhY2tfdmFsdWUgKCZicCwg Zm4tPmhhc19mb3JjZV92ZWN0b3JpemVfbG9vcHMsIDEpOwogICBicF9wYWNrX3ZhbHVlICgm YnAsIGZuLT5oYXNfc2ltZHVpZF9sb29wcywgMSk7CisgIGJwX3BhY2tfdmFsdWUgKCZicCwg Zm4tPmF1dG9fc2ltZF9jbG9uZV9jYW5kaWRhdGUsIDEpOworICBicF9wYWNrX3ZhbHVlICgm YnAsIGZuLT5hdXRvX3NpbWRfY2FsbF9jYW5kaWRhdGUsIDEpOwogICBicF9wYWNrX3ZhbHVl ICgmYnAsIGZuLT52YV9saXN0X2Zwcl9zaXplLCA4KTsKICAgYnBfcGFja192YWx1ZSAoJmJw LCBmbi0+dmFfbGlzdF9ncHJfc2l6ZSwgOCk7CiAgIGJwX3BhY2tfdmFsdWUgKCZicCwgZm4t Pmxhc3RfY2xpcXVlLCBzaXplb2YgKHNob3J0KSAqIDgpOwpkaWZmIC0tZ2l0IGEvZ2NjL29t cC1sb3cuY2MgYi9nY2Mvb21wLWxvdy5jYwppbmRleCBkYzQyYzc1MjAxNy4uYzdiOGIwYjg5 NGQgMTAwNjQ0Ci0tLSBhL2djYy9vbXAtbG93LmNjCisrKyBiL2djYy9vbXAtbG93LmNjCkBA IC0xNTA1NSw0ICsxNTA1NSwzMzUgQEAgbWFrZV9wYXNzX2RpYWdub3NlX29tcF9ibG9ja3Mg KGdjYzo6Y29udGV4dCAqY3R4dCkKIH0KIAwKIAorLyogU2ltcGxlIHBhc3MgdG8gaWRlbnRp ZnkgZnVuY3Rpb25zIG1hcmtlZCAib21wIGRlY2xhcmUgdGFyZ2V0IiB0aGF0IGFyZQorICAg YWxzbyBjYW5kaWRhdGVzIGZvciAib21wIGRlY2xhcmUgc2ltZCIuICBUaGUgc2ltZF9jbG9u ZSBJUEEgcGFzcworICAgZ2VuZXJhdGVzIHRoZSBjbG9uZXMsIGhlcmUgd2UganVzdCBtYXJr IGNhbmRpZGF0ZXMuICBJdCdzIGVhc2llciB0byBkbworICAgdGhlIHNlbWFudGljIGNoZWNr cyBvbiBib3RoIGZ1bmN0aW9ucyBhbmQgY2FsbCBzaXRlcyBiZWZvcmUgT01QCisgICBsb3dl cmluZy4gICovCisKKworLyogUHJlZGljYXRlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHR5cGUg c2lnbmF0dXJlIGFuZCBhdHRyaWJ1dGVzIG9mCisgICBGTkRFQ0wgYXBwZWFyIHRvIGJlIHN1 aXRhYmxlIGZvciBhdXRvLWRlY2xhcmUtc2ltZC4gIFRoaXMgZG9lcyBub3QKKyAgIGNoZWNr IGl0cyBib2R5LCBvbmx5IHRoYXQgaXQgaGFzIG9uZS4gICovCitzdGF0aWMgYm9vbAorYXV0 b19kZWNsYXJlX3NpbWRfc2lnbmF0dXJlX29rICh0cmVlIGZuZGVjbCkKK3sKKworICAvKiBJ Z25vcmUgZnVuY3Rpb25zIHdpdGhvdXQgYSBkZWZpbml0aW9uLiAgKi8KKyAgaWYgKCFnaW1w bGVfaGFzX2JvZHlfcCAoZm5kZWNsKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogSWdu b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBtYXJrZWQgIm5vY2xvbmUiLCAib21wIGRlY2xhcmUg c2ltZCIsCisgICAgIG9yIHRoYXQgYXJlbid0IG1hcmtlZCAib21wIGRlY2xhcmUgdGFyZ2V0 Ii4gICovCisgIHRyZWUgYXR0cmlicyA9IERFQ0xfQVRUUklCVVRFUyAoZm5kZWNsKTsKKyAg aWYgKGxvb2t1cF9hdHRyaWJ1dGUgKCJub2Nsb25lIiwgYXR0cmlicykKKyAgICAgIHx8IGxv b2t1cF9hdHRyaWJ1dGUgKCJvbXAgZGVjbGFyZSBzaW1kIiwgYXR0cmlicykKKyAgICAgIHx8 ICFsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgdGFyZ2V0IiwgYXR0cmlicykpCisg ICAgcmV0dXJuIGZhbHNlOworCisgIC8qIEZJWE1FOiBPcGVuQUNDICIjcHJhZ21hIGFjYyBy b3V0aW5lIiB0cmFuc2xhdGVzIGludG8KKyAgICAgIm9tcCBkZWNsYXJlIHRhcmdldCIsIGJ1 dCBhcHBlYXJzIGFsc28gdG8gaGF2ZSBzb21lIG90aGVyIGVmZmVjdHMKKyAgICAgdGhhdCBj b25mbGljdCB3aXRoIGdlbmVyYXRpbmcgU0lNRCBjbG9uZXMsIGNhdXNpbmcgSUNFcy4gIFNv IGRvbid0CisgICAgIGRvIHRoaXMgaWYgd2UndmUgZ290IE9wZW5BQ0MgaW5zdGVhZCBvZiBP cGVuTVAuICAqLworICBpZiAob2FjY19nZXRfZm5fYXR0cmliIChmbmRlY2wpKQorICAgIHJl dHVybiBmYWxzZTsKKworICAvKiBGaWx0ZXIgb3V0IGZ1bmN0aW9ucyB3aXRoIGFyZ3VtZW50 IHR5cGVzIHRoYXQgYXJlIG5vdCB2ZWN0b3JpemFibGUuCisgICAgIEJhY2tlbmRzIHdpbGwg Y2hlY2sgZm9yIHZlY3Rvcml6YWJsZSBhcmd1bWVudHMvcmV0dXJuIHR5cGVzIGluIGEKKyAg ICAgdGFyZ2V0LXNwZWNpZmljIHdheSB3aGVuIGNsb25lcyBhcmUgZXhwYW5kZWQgaW4gdGhl IHNpbWRfY2xvbmUgcGFzcywKKyAgICAgYnV0IHdlIGNhbiBpbW1lZGlhdGVseSBmaWx0ZXIg b3V0IGZ1bmN0aW9ucyB0aGF0IGhhdmUgbm9uLXNjYWxhcgorICAgICBhcmd1bWVudHMvcmV0 dXJuIHR5cGVzLiAgQWxzbywgYXRvbWljIHR5cGVzIHRyaWdnZXIgd2FybmluZ3MgaW4KKyAg ICAgc2ltZF9jbG9uZV9jbGF1c2VzX2V4dHJhY3QuICAqLworICBpZiAoVFlQRV9BUkdfVFlQ RVMgKFRSRUVfVFlQRSAoZm5kZWNsKSkgPT0gTlVMTF9UUkVFKQorICAgIHJldHVybiBmYWxz ZTsKKyAgdHJlZSB0ID0gVFJFRV9UWVBFIChUUkVFX1RZUEUgKGZuZGVjbCkpOworICBtYWNo aW5lX21vZGUgbSA9IFRZUEVfTU9ERSAodCk7CisgIGlmICghKFZPSURfVFlQRV9QICh0KSB8 fCBpc19hIDxzY2FsYXJfbW9kZT4gKG0pKSB8fCBUWVBFX0FUT01JQyAodCkpCisgICAgcmV0 dXJuIGZhbHNlOworCisgIGlmIChUWVBFX0FSR19UWVBFUyAoVFJFRV9UWVBFIChmbmRlY2wp KSkKKyAgICB7CisgICAgICBmb3IgKHRyZWUgdGVtcCA9IFRZUEVfQVJHX1RZUEVTIChUUkVF X1RZUEUgKGZuZGVjbCkpOworCSAgIHRlbXA7IHRlbXAgPSBUUkVFX0NIQUlOICh0ZW1wKSkK Kwl7CisJICB0ID0gVFJFRV9WQUxVRSAodGVtcCk7CisJICBtID0gVFlQRV9NT0RFICh0KTsK KwkgIGlmICghKFZPSURfVFlQRV9QICh0KSB8fCBpc19hIDxzY2FsYXJfbW9kZT4gKG0pKSB8 fCBUWVBFX0FUT01JQyAodCkpCisJICAgIHJldHVybiBmYWxzZTsKKwl9CisgICAgfQorICBl bHNlCisgICAgeworICAgICAgZm9yICh0cmVlIHRlbXAgPSBERUNMX0FSR1VNRU5UUyAoZm5k ZWNsKTsgdGVtcDsgdGVtcCA9IERFQ0xfQ0hBSU4gKHRlbXApKQorCXsKKwkgIHQgPSBUUkVF X1RZUEUgKHRlbXApOworCSAgbSA9IFRZUEVfTU9ERSAodCk7CisJICBpZiAoIShWT0lEX1RZ UEVfUCAodCkgfHwgaXNfYSA8c2NhbGFyX21vZGU+IChtKSkgfHwgVFlQRV9BVE9NSUMgKHQp KQorCSAgICByZXR1cm4gZmFsc2U7CisJfQorICAgIH0KKworICAvKiBTdWNjZXNzISAgKi8K KyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFRoaXMgY29kZSB3YWxrZXIgaXMgdXNlZCBvbiB0 aGUgYm9keSBvZiBhIGZ1bmN0aW9uIHRoYXQgaXMgcG90ZW50aWFsbHkKKyAgIGF1dG8tZGVj bGFyZS1zaW1kLCB0byBmaWx0ZXIgb3V0IHRoaW5ncyB0aGF0IGFyZSBub3Qgc3VpdGFibGUg Zm9yCisgICBTSU1EIGNsb25pbmcuICAqLworc3RhdGljIHRyZWUKK2NoZWNrX2F1dG9fZGVj bGFyZV9zaW1kX3N0bXQgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2lfcCwKKwkJCSAgICAg IGJvb2wgKmhhbmRsZWRfb3BzX3AsCisJCQkgICAgICBzdHJ1Y3Qgd2Fsa19zdG10X2luZm8g KndpIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10ICgq Z3NpX3ApOworICB0cmVlIGRlY2wsIGF0dHJpYnM7CisKKyAgLyogQXJiaXRyYXJ5IG5vbi1u dWxsIHZhbHVlIHRvIHJldHVybiB0byBpbmRpY2F0ZSBmYWlsZWQgY2hlY2suICAqLworICB0 cmVlIHJldHZhbCA9IGludGVnZXJfb25lX25vZGU7CisKKyAgc3dpdGNoIChnaW1wbGVfY29k ZSAoc3RtdCkpCisgICAgeworICAgIGNhc2UgR0lNUExFX0NBTEw6CisgICAgICBkZWNsID0g Z2ltcGxlX2NhbGxfZm5kZWNsIChzdG10KTsKKworICAgICAgLyogV2UgY2FuJ3Qga25vdyB3 aGV0aGVyIGluZGlyZWN0IGNhbGxzIGFyZSBzYWZlLiAgKi8KKyAgICAgIGlmIChkZWNsID09 IE5VTExfVFJFRSkKKwl7CisJICAqaGFuZGxlZF9vcHNfcCA9IHRydWU7CisJICByZXR1cm4g cmV0dmFsOworCX0KKworICAgICAgLyogQ2FsbHMgdG8gZnVuY3Rpb25zIHRoYXQgYXJlIENP TlNUIG9yIFBVUkUgYXJlIG9rLiAgKi8KKyAgICAgIGlmIChnaW1wbGVfY2FsbF9mbGFncyAo c3RtdCkgJiAoRUNGX0NPTlNUIHwgRUNGX1BVUkUpKQorCWJyZWFrOworCisgICAgICAvKiBD YWxscyB0byBmdW5jdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBtYXJrZWQgIm9tcCBkZWNsYXJl IHNpbWQiIGFyZQorCSBPSy4gICovCisgICAgICBhdHRyaWJzID0gREVDTF9BVFRSSUJVVEVT IChkZWNsKTsKKyAgICAgIGlmIChsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgc2lt ZCIsIGF0dHJpYnMpCisJICB8fCBsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgYXV0 by1zaW1kIiwgYXR0cmlicykpCisJYnJlYWs7CisKKyAgICAgIC8qIE90aGVyIGZ1bmN0aW9u IGNhbGxzIGFyZSBub3QgcGVybWl0dGVkLiAgKi8KKyAgICAgICpoYW5kbGVkX29wc19wID0g dHJ1ZTsKKyAgICAgIHJldHVybiByZXR2YWw7CisKKyAgICAgIC8qIE9wZW5NUCBkaXJlY3Rp dmVzIGFyZSBub3QgcGVybWl0dGVkLiAgKi8KKyAgICBDQVNFX0dJTVBMRV9PTVA6CisgICAg ICAqaGFuZGxlZF9vcHNfcCA9IHRydWU7CisgICAgICByZXR1cm4gcmV0dmFsOworCisgICAg ICAvKiBDb25zZXJ2YXRpdmVseSByZWplY3QgYWxsIEVILXJlbGF0ZWQgY29uc3RydWN0cy4g ICovCisgICAgY2FzZSBHSU1QTEVfQ0FUQ0g6CisgICAgY2FzZSBHSU1QTEVfRUhfRklMVEVS OgorICAgIGNhc2UgR0lNUExFX0VIX01VU1RfTk9UX1RIUk9XOgorICAgIGNhc2UgR0lNUExF X0VIX0VMU0U6CisgICAgY2FzZSBHSU1QTEVfRUhfRElTUEFUQ0g6CisgICAgY2FzZSBHSU1Q TEVfUkVTWDoKKyAgICBjYXNlIEdJTVBMRV9UUlk6CisgICAgICAqaGFuZGxlZF9vcHNfcCA9 IHRydWU7CisgICAgICByZXR1cm4gcmV0dmFsOworCisgICAgICAvKiBBc21zIGFyZSBub3Qg cGVybWl0dGVkIHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdCB0aGV5IGRvLiAgKi8KKyAgICBj YXNlIEdJTVBMRV9BU006CisgICAgICAqaGFuZGxlZF9vcHNfcCA9IHRydWU7CisgICAgICBy ZXR1cm4gcmV0dmFsOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKwor ICAvKiBNZW1vcnkgd3JpdGVzIGFyZSBub3QgcGVybWl0dGVkLCBub3IgYXJlIHN0YXRlbWVu dHMgd2l0aCB2b2xhdGlsZQorICAgICBvcGVyYW5kcy4KKyAgICAgRklYTUU6IHRoaXMgY291 bGQgYmUgcmVsYXhlZCBhIGxpdHRsZSB0byBwZXJtaXQgd3JpdGVzIHRvCisgICAgIGZ1bmN0 aW9uLWxvY2FsIHZhcmlhYmxlcyB0aGF0IGNvdWxkIG5vdCBhbGlhcyBvdGhlciBpbnN0YW5j ZXMKKyAgICAgb2YgdGhlIGZ1bmN0aW9uIHJ1bm5pbmcgaW4gcGFyYWxsZWwuICAqLworICBp ZiAoZ2ltcGxlX3N0b3JlX3AgKHN0bXQpIHx8IGdpbXBsZV9oYXNfdm9sYXRpbGVfb3BzIChz dG10KSkKKyAgICB7CisgICAgICAqaGFuZGxlZF9vcHNfcCA9IHRydWU7CisgICAgICByZXR1 cm4gcmV0dmFsOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMX1RSRUU7Cit9CisK Ky8qIFdhbGtlciB0byBkZXRlY3Qgb3BlcmFuZHMgdGhhdCB3b3VsZCBiZSBpbnZhbGlkIGlu IGFuCisgICBhdXRvLWRlY2xhcmUtc2ltZCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHZvbGF0 aWxlIG1lbW9yeSBhY2Nlc3Nlcy4KKyAgIEl0IHNlZW1zIHRoYXQgZ2ltcGxlX2hhc192b2xh dGlsZV9vcHMgaGFzIG5vdCBiZWVuCisgICBpbml0aWFsaXplZCB5ZXQgd2hlbiB0aGlzIHBh c3MgcnVucywgc28gd2UgaGF2ZSB0byBkbyBvdXIgb3duIHNjYW4KKyAgIGZvciB0aGlzLiAg Ki8KK3N0YXRpYyB0cmVlCitjaGVja19hdXRvX2RlY2xhcmVfc2ltZF9vcCAodHJlZSAqb3As IGludCAqd2Fsa19zdWJ0cmVlcyBBVFRSSUJVVEVfVU5VU0VELAorCQkJICAgIHZvaWQgKmRh dGEgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAgaWYgKFRSRUVfVEhJU19WT0xBVElMRSAoKm9w KSkKKyAgICByZXR1cm4gKm9wOworICBlbHNlCisgICAgcmV0dXJuIE5VTExfVFJFRTsKK30K KworCisvKiBDaGVjayB3aGV0aGVyIEZOREVDTCBpcyBzdWl0YWJsZSBmb3IgYXV0byBkZWNs YXJlIHNpbWQsIGFuZCBzZXQKKyAgIHRoZSBhdHRyaWJ1dGUgb24gaXQgaWYgc28uICAqLwor dm9pZAorbWF5YmVfbWFya19hdXRvX2RlY2xhcmVfc2ltZCAodHJlZSBmbmRlY2wpCit7Cisg IC8qIElnbm9yZSBmdW5jdGlvbnMgdGhhdCBhbHJlYWR5IGhhdmUgYmVlbiBpZGVudGlmaWVk IGFzIGF1dG8tc2ltZAorICAgICBjYW5kaWRhdGVzLiAgKi8KKyAgc3RydWN0IGZ1bmN0aW9u ICpmbiA9IERFQ0xfU1RSVUNUX0ZVTkNUSU9OIChmbmRlY2wpOworICBnY2NfYXNzZXJ0IChm bik7CisgIGlmIChmbi0+YXV0b19zaW1kX2Nsb25lX2NhbmRpZGF0ZSkKKyAgICByZXR1cm47 CisKKyAgLyogQ2hlY2sgdGhlIHR5cGUgc2lnbmF0dXJlIGFuZCBhdHRyaWJ1dGVzLiAgKi8K KyAgaWYgKCFhdXRvX2RlY2xhcmVfc2ltZF9zaWduYXR1cmVfb2sgKGZuZGVjbCkpCisgICAg cmV0dXJuOworCisgIC8qIFdhbGsgdGhlIGZ1bmN0aW9uIGJvZHkgdG8gY2hlY2sgZm9yIHRo aW5ncyB0aGF0IHdvdWxkIGludGVyZmVyZSB3aXRoCisgICAgIHZlY3Rvcml6YXRpb24sIG9y IGJlIGludmFsaWQgaW4gYW4gIm9tcCBkZWNsYXJlIHNpbWQiIGZ1bmN0aW9uLiAgKi8KKyAg Z2ltcGxlX3NlcSBib2R5ID0gZ2ltcGxlX2JvZHkgKGZuZGVjbCk7CisgIHN0cnVjdCB3YWxr X3N0bXRfaW5mbyB3aTsKKyAgbWVtc2V0ICgmd2ksIDAsIHNpemVvZiAod2kpKTsKKyAgaWYg KHdhbGtfZ2ltcGxlX3NlcSAoYm9keSwgY2hlY2tfYXV0b19kZWNsYXJlX3NpbWRfc3RtdCwK KwkJICAgICAgIGNoZWNrX2F1dG9fZGVjbGFyZV9zaW1kX29wLCAmd2kpKQorICAgIHJldHVy bjsKKworICAvKiBNYXJrIHRoZSBmdW5jdGlvbiBhcyBhIGNhbmRpZGF0ZSwgZm9yIGZ1cnRo ZXIgcHJvY2Vzc2luZyBieSB0aGUKKyAgICAgc2ltZF9jbG9uZSBwYXNzLiAgKi8KKyAgZm4t PmF1dG9fc2ltZF9jbG9uZV9jYW5kaWRhdGUgPSAxOworfQorCisvKiBUaGlzIGNvZGUgd2Fs a2VyIGlzIHVzZWQgdG8gc2NhbiBmb3IgY2FsbHMgdG8gZnVuY3Rpb25zIGluIGNvbnRleHRz CisgICB3aGVyZSB0aGUgdmVjdG9yaXplciBtaWdodCBiZSBhYmxlIHRvIG1ha2UgdXNlIG9m IGEgU0lNRCBjbG9uZS4gICovCisKK3RyZWUKK2F1dG9fZGVjbGFyZV9zaW1kX3NjYW5fZm9y X2NhbGxzIChnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpX3AsCisJCQkJICBib29sICpoYW5k bGVkX29wc19wIEFUVFJJQlVURV9VTlVTRUQsCisJCQkJICBzdHJ1Y3Qgd2Fsa19zdG10X2lu Zm8gKndpIEFUVFJJQlVURV9VTlVTRUQpCit7CisgIGdpbXBsZSAqc3RtdCA9IGdzaV9zdG10 ICgqZ3NpX3ApOworICBzd2l0Y2ggKGdpbXBsZV9jb2RlIChzdG10KSkKKyAgICB7CisgICAg Y2FzZSBHSU1QTEVfQ0FMTDoKKyAgICAgIHsKKwl0cmVlIGZuZGVjbCA9IGdpbXBsZV9jYWxs X2ZuZGVjbCAoc3RtdCk7CisJaWYgKGZuZGVjbCAmJiBhdXRvX2RlY2xhcmVfc2ltZF9zaWdu YXR1cmVfb2sgKGZuZGVjbCkpCisJICB7CisJICAgIHN0cnVjdCBmdW5jdGlvbiAqZm4gPSBE RUNMX1NUUlVDVF9GVU5DVElPTiAoZm5kZWNsKTsKKwkgICAgaWYgKGZuKQorCSAgICAgIGZu LT5hdXRvX3NpbWRfY2FsbF9jYW5kaWRhdGUgPSAxOworCSAgfQorICAgICAgfQorICAgICAg YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIE5V TExfVFJFRTsKK30KKworLyogVGhpcyBjb2RlIHdhbGtlciBpcyB1c2VkIHRvIHNjYW4gZm9y IE9NUCBsb29wcyB3aGVyZSB3ZSBtaWdodCBmaW5kCisgICBjYWxscyB0byBmdW5jdGlvbnMg dGhhdCBhcmUgY2FuZGlkYXRlcyBmb3IgU0lNRCBjbG9uaW5nLiAgKi8KKwordHJlZQorYXV0 b19kZWNsYXJlX3NpbWRfc2Nhbl9mb3JfbG9vcHMgKGdpbXBsZV9zdG10X2l0ZXJhdG9yICpn c2lfcCwKKwkJCQkgIGJvb2wgKmhhbmRsZWRfb3BzX3AgQVRUUklCVVRFX1VOVVNFRCwKKwkJ CQkgIHN0cnVjdCB3YWxrX3N0bXRfaW5mbyAqd2kgQVRUUklCVVRFX1VOVVNFRCkKK3sKKyAg Z2ltcGxlICpzdG10ID0gZ3NpX3N0bXQgKCpnc2lfcCk7CisgIHN3aXRjaCAoZ2ltcGxlX2Nv ZGUgKHN0bXQpKQorICAgIHsKKyAgICBjYXNlIEdJTVBMRV9PTVBfRk9SOgorICAgICAgewor CXN0cnVjdCB3YWxrX3N0bXRfaW5mbyBpbm5lcl93aTsKKwltZW1zZXQgKCZpbm5lcl93aSwg MCwgc2l6ZW9mIChpbm5lcl93aSkpOworCXdhbGtfZ2ltcGxlX3NlcSAoZ2ltcGxlX29tcF9i b2R5IChzdG10KSwKKwkJCSBhdXRvX2RlY2xhcmVfc2ltZF9zY2FuX2Zvcl9jYWxscywgTlVM TCwgJmlubmVyX3dpKTsKKyAgICAgIH0KKyAgICAgICpoYW5kbGVkX29wc19wID0gdHJ1ZTsK KyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAg cmV0dXJuIE5VTExfVFJFRTsKK30KKworCisvKiBNYWluIGZ1bmN0aW9uIGZvciB0aGlzIHBh c3MuICAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CitleGVjdXRlX2F1dG9fZGVjbGFyZV9z aW1kICh2b2lkKQoreworICBnaW1wbGVfc2VxIGJvZHkgPSBnaW1wbGVfYm9keSAoY3VycmVu dF9mdW5jdGlvbl9kZWNsKTsKKyAgc3RydWN0IHdhbGtfc3RtdF9pbmZvIHdpOworICBtZW1z ZXQgKCZ3aSwgMCwgc2l6ZW9mICh3aSkpOworCisgIC8qIEZpcnN0IHNjYW4gdGhlIGN1cnJl bnQgZnVuY3Rpb24gdG8gc2VlIGlmIGl0IGlzIGEgY2FuZGlkYXRlIGZvciBhdXRvCisgICAg IGRlY2xhcmUgc2ltZC4gICovCisgIG1heWJlX21hcmtfYXV0b19kZWNsYXJlX3NpbWQgKGN1 cnJlbnRfZnVuY3Rpb25fZGVjbCk7CisKKyAgLyogTm93IHNjYW4gdGhlIGN1cnJlbnQgZnVu Y3Rpb24gdG8gc2VlIGlmIGl0IGNvbnRhaW5zIGNhbGxzIHRvIHRoaW5ncyB0aGF0CisgICAg IG1pZ2h0IGJlIGNhbmRpZGF0ZXMgZm9yIHVzZSBvZiBhdXRvIGRlY2xhcmUgc2ltZCBjbG9u ZXMsIGluIGEgY29udGV4dAorICAgICB3aGVyZSBzdWNoIGEgY2xvbmUgbWlnaHQgYWN0dWFs bHkgYmUgdXNlZCAtLSBuYW1lbHksIGlmIHRoaXMgZnVuY3Rpb24gaXMKKyAgICAgYWxyZWFk eSBtYXJrZWQgYXMgImRlY2xhcmUgc2ltZCIsIG9yIGhhcyBjYWxscyBpbnNpZGUgYW4gT01Q IGxvb3AuCisKKyAgICAgTm90ZSB0aGF0IHRoZSBjYWxsZXIgYW5kIGNhbGxlZSBtYXkgYmUg Y29tcGlsZWQgaW4gZWl0aGVyIG9yZGVyLCB0aGF0CisgICAgIGlzIHdoeSB3ZSBoYXZlIHRv IHVzZSB0d28gZGlmZmVyZW50IGJpdHMgaW4gdGhlIHN0cnVjdCBmdW5jdGlvbiBhbmQKKyAg ICAgY29tYmluZSB0aGVtIGxhdGVyIGluIHRoZSBzaW1kX2Nsb25lIElQQSBwYXNzLiAgKi8K KworICB0cmVlIGF0dHJpYnMgPSBERUNMX0FUVFJJQlVURVMgKGN1cnJlbnRfZnVuY3Rpb25f ZGVjbCk7CisgIGlmIChsb29rdXBfYXR0cmlidXRlICgib21wIGRlY2xhcmUgc2ltZCIsIGF0 dHJpYnMpKQorICAgIHdhbGtfZ2ltcGxlX3NlcSAoYm9keSwgYXV0b19kZWNsYXJlX3NpbWRf c2Nhbl9mb3JfY2FsbHMsIE5VTEwsICZ3aSk7CisgIGVsc2UKKyAgICB3YWxrX2dpbXBsZV9z ZXEgKGJvZHksIGF1dG9fZGVjbGFyZV9zaW1kX3NjYW5fZm9yX2xvb3BzLCBOVUxMLCAmd2kp OworICByZXR1cm4gMDsKK30KKworCituYW1lc3BhY2UgeworCitjb25zdCBwYXNzX2RhdGEg cGFzc19kYXRhX29tcF9hdXRvX2RlY2xhcmVfc2ltZCA9Cit7CisgIEdJTVBMRV9QQVNTLCAv KiB0eXBlICovCisgICIqb21wX2F1dG9fZGVjbGFyZV9zaW1kIiwgLyogbmFtZSAqLworICBP UFRHUk9VUF9PTVAsIC8qIG9wdGluZm9fZmxhZ3MgKi8KKyAgVFZfTk9ORSwgLyogdHZfaWQg Ki8KKyAgUFJPUF9naW1wbGVfYW55LCAvKiBwcm9wZXJ0aWVzX3JlcXVpcmVkICovCisgIDAs IC8qIHByb3BlcnRpZXNfcHJvdmlkZWQgKi8KKyAgMCwgLyogcHJvcGVydGllc19kZXN0cm95 ZWQgKi8KKyAgMCwgLyogdG9kb19mbGFnc19zdGFydCAqLworICAwLCAvKiB0b2RvX2ZsYWdz X2ZpbmlzaCAqLworfTsKKworY2xhc3MgcGFzc19vbXBfYXV0b19kZWNsYXJlX3NpbWQgOiBw dWJsaWMgZ2ltcGxlX29wdF9wYXNzCit7CitwdWJsaWM6CisgIHBhc3Nfb21wX2F1dG9fZGVj bGFyZV9zaW1kIChnY2M6OmNvbnRleHQgKmN0eHQpCisgICAgOiBnaW1wbGVfb3B0X3Bhc3Mg KHBhc3NfZGF0YV9vbXBfYXV0b19kZWNsYXJlX3NpbWQsIGN0eHQpCisgIHt9CisKKyAgLyog b3B0X3Bhc3MgbWV0aG9kczogKi8KKyAgYm9vbCBnYXRlIChmdW5jdGlvbiAqKSBmaW5hbCBv dmVycmlkZQorICB7CisgICAgcmV0dXJuICgoZmxhZ19vcGVuYWNjIHx8IGZsYWdfb3Blbm1w IHx8IGZsYWdfb3Blbm1wX3NpbWQpCisJICAgICYmIHRhcmdldG0uc2ltZF9jbG9uZS5jb21w dXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4gIT0gTlVMTAorCSAgICAmJiBmbGFnX29wZW5tcF90 YXJnZXRfc2ltZF9jbG9uZQorCSAgICAmJiBmbGFnX3RyZWVfbG9vcF92ZWN0b3JpemUpOwor ICB9CisgIHVuc2lnbmVkIGludCBleGVjdXRlIChmdW5jdGlvbiAqKSBmaW5hbCBvdmVycmlk ZQorICAgIHsKKyAgICAgIHJldHVybiBleGVjdXRlX2F1dG9fZGVjbGFyZV9zaW1kICgpOwor ICAgIH0KKworfTsgLy8gY2xhc3MgcGFzc19vbXBfYXV0b19kZWNsYXJlX3NpbWQKKworfSAv LyBhbm9uIG5hbWVzcGFjZQorCitnaW1wbGVfb3B0X3Bhc3MgKgorbWFrZV9wYXNzX29tcF9h dXRvX2RlY2xhcmVfc2ltZCAoZ2NjOjpjb250ZXh0ICpjdHh0KQoreworICByZXR1cm4gbmV3 IHBhc3Nfb21wX2F1dG9fZGVjbGFyZV9zaW1kIChjdHh0KTsKK30KKwwKKwogI2luY2x1ZGUg Imd0LW9tcC1sb3cuaCIKZGlmZiAtLWdpdCBhL2djYy9vbXAtc2ltZC1jbG9uZS5jYyBiL2dj Yy9vbXAtc2ltZC1jbG9uZS5jYwppbmRleCAzNGNiZWU1YWZjZC4uYTFhYjA1NjAwZGQgMTAw NjQ0Ci0tLSBhL2djYy9vbXAtc2ltZC1jbG9uZS5jYworKysgYi9nY2Mvb21wLXNpbWQtY2xv bmUuY2MKQEAgLTUxLDYgKzUxLDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBD T1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJzdHJpbmdwb29sLmgiCiAjaW5jbHVk ZSAiYXR0cmlicy5oIgogI2luY2x1ZGUgIm9tcC1zaW1kLWNsb25lLmgiCisjaW5jbHVkZSAi b21wLWxvdy5oIgorI2luY2x1ZGUgIm9tcC1nZW5lcmFsLmgiCiAKIC8qIFJldHVybiB0aGUg bnVtYmVyIG9mIGVsZW1lbnRzIGluIHZlY3RvciB0eXBlIFZFQ1RZUEUsIHdoaWNoIGlzIGFz c29jaWF0ZWQKICAgIHdpdGggYSBTSU1EIGNsb25lLiAgQXQgcHJlc2VudCB0aGVzZSBhbHdh eXMgaGF2ZSBhIGNvbnN0YW50IGxlbmd0aC4gICovCkBAIC00MzAsMTAgKzQzMiwxMiBAQCBz aW1kX2Nsb25lX21hbmdsZSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAogICByZXR1cm4g Z2V0X2lkZW50aWZpZXIgKHN0cik7CiB9CiAKLS8qIENyZWF0ZSBhIHNpbWQgY2xvbmUgb2Yg T0xEX05PREUgYW5kIHJldHVybiBpdC4gICovCisvKiBDcmVhdGUgYSBzaW1kIGNsb25lIG9m IE9MRF9OT0RFIGFuZCByZXR1cm4gaXQuICBJZiBGT1JDRV9MT0NBTCBpcyB0cnVlLAorICAg Y3JlYXRlIGl0IGFzIGEgbG9jYWwgc3ltYm9sLCBvdGhlcndpc2UgY29weSB0aGUgc3ltYm9s IGxpbmthZ2UgYW5kCisgICB2aXNpYmlsaXR5IGF0dHJpYnV0ZXMgZnJvbSBPTERfTk9ERS4g ICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2dyYXBoX25vZGUgKgotc2ltZF9jbG9uZV9jcmVhdGUg KHN0cnVjdCBjZ3JhcGhfbm9kZSAqb2xkX25vZGUpCitzaW1kX2Nsb25lX2NyZWF0ZSAoc3Ry dWN0IGNncmFwaF9ub2RlICpvbGRfbm9kZSwgYm9vbCBmb3JjZV9sb2NhbCkKIHsKICAgc3Ry dWN0IGNncmFwaF9ub2RlICpuZXdfbm9kZTsKICAgaWYgKG9sZF9ub2RlLT5kZWZpbml0aW9u KQpAQCAtNDYzLDIzICs0NjcsMzggQEAgc2ltZF9jbG9uZV9jcmVhdGUgKHN0cnVjdCBjZ3Jh cGhfbm9kZSAqb2xkX25vZGUpCiAgICAgcmV0dXJuIG5ld19ub2RlOwogCiAgIHNldF9kZWNs X2J1aWx0X2luX2Z1bmN0aW9uIChuZXdfbm9kZS0+ZGVjbCwgTk9UX0JVSUxUX0lOLCAwKTsK LSAgVFJFRV9QVUJMSUMgKG5ld19ub2RlLT5kZWNsKSA9IFRSRUVfUFVCTElDIChvbGRfbm9k ZS0+ZGVjbCk7Ci0gIERFQ0xfQ09NREFUIChuZXdfbm9kZS0+ZGVjbCkgPSBERUNMX0NPTURB VCAob2xkX25vZGUtPmRlY2wpOwotICBERUNMX1dFQUsgKG5ld19ub2RlLT5kZWNsKSA9IERF Q0xfV0VBSyAob2xkX25vZGUtPmRlY2wpOwotICBERUNMX0VYVEVSTkFMIChuZXdfbm9kZS0+ ZGVjbCkgPSBERUNMX0VYVEVSTkFMIChvbGRfbm9kZS0+ZGVjbCk7Ci0gIERFQ0xfVklTSUJJ TElUWV9TUEVDSUZJRUQgKG5ld19ub2RlLT5kZWNsKQotICAgID0gREVDTF9WSVNJQklMSVRZ X1NQRUNJRklFRCAob2xkX25vZGUtPmRlY2wpOwotICBERUNMX1ZJU0lCSUxJVFkgKG5ld19u b2RlLT5kZWNsKSA9IERFQ0xfVklTSUJJTElUWSAob2xkX25vZGUtPmRlY2wpOwotICBERUNM X0RMTElNUE9SVF9QIChuZXdfbm9kZS0+ZGVjbCkgPSBERUNMX0RMTElNUE9SVF9QIChvbGRf bm9kZS0+ZGVjbCk7Ci0gIGlmIChERUNMX09ORV9PTkxZIChvbGRfbm9kZS0+ZGVjbCkpCi0g ICAgbWFrZV9kZWNsX29uZV9vbmx5IChuZXdfbm9kZS0+ZGVjbCwgREVDTF9BU1NFTUJMRVJf TkFNRSAobmV3X25vZGUtPmRlY2wpKTsKLQotICAvKiBUaGUgbWV0aG9kIGNncmFwaF92ZXJz aW9uX2Nsb25lX3dpdGhfYm9keSAoKSB3aWxsIGZvcmNlIHRoZSBuZXcKLSAgICAgc3ltYm9s IGxvY2FsLiAgVW5kbyB0aGlzLCBhbmQgaW5oZXJpdCBleHRlcm5hbCB2aXNpYmlsaXR5IGZy b20KLSAgICAgdGhlIG9sZCBub2RlLiAgKi8KLSAgbmV3X25vZGUtPmxvY2FsID0gb2xkX25v ZGUtPmxvY2FsOwotICBuZXdfbm9kZS0+ZXh0ZXJuYWxseV92aXNpYmxlID0gb2xkX25vZGUt PmV4dGVybmFsbHlfdmlzaWJsZTsKLSAgbmV3X25vZGUtPmNhbGxzX2RlY2xhcmVfdmFyaWFu dF9hbHQgPSBvbGRfbm9kZS0+Y2FsbHNfZGVjbGFyZV92YXJpYW50X2FsdDsKKyAgaWYgKGZv cmNlX2xvY2FsKQorICAgIHsKKyAgICAgIFRSRUVfUFVCTElDIChuZXdfbm9kZS0+ZGVjbCkg PSAwOworICAgICAgREVDTF9DT01EQVQgKG5ld19ub2RlLT5kZWNsKSA9IDA7CisgICAgICBE RUNMX1dFQUsgKG5ld19ub2RlLT5kZWNsKSA9IDA7CisgICAgICBERUNMX0VYVEVSTkFMIChu ZXdfbm9kZS0+ZGVjbCkgPSAwOworICAgICAgREVDTF9WSVNJQklMSVRZX1NQRUNJRklFRCAo bmV3X25vZGUtPmRlY2wpID0gMDsKKyAgICAgIERFQ0xfVklTSUJJTElUWSAobmV3X25vZGUt PmRlY2wpID0gVklTSUJJTElUWV9ERUZBVUxUOworICAgICAgREVDTF9ETExJTVBPUlRfUCAo bmV3X25vZGUtPmRlY2wpID0gMDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBUUkVF X1BVQkxJQyAobmV3X25vZGUtPmRlY2wpID0gVFJFRV9QVUJMSUMgKG9sZF9ub2RlLT5kZWNs KTsKKyAgICAgIERFQ0xfQ09NREFUIChuZXdfbm9kZS0+ZGVjbCkgPSBERUNMX0NPTURBVCAo b2xkX25vZGUtPmRlY2wpOworICAgICAgREVDTF9XRUFLIChuZXdfbm9kZS0+ZGVjbCkgPSBE RUNMX1dFQUsgKG9sZF9ub2RlLT5kZWNsKTsKKyAgICAgIERFQ0xfRVhURVJOQUwgKG5ld19u b2RlLT5kZWNsKSA9IERFQ0xfRVhURVJOQUwgKG9sZF9ub2RlLT5kZWNsKTsKKyAgICAgIERF Q0xfVklTSUJJTElUWV9TUEVDSUZJRUQgKG5ld19ub2RlLT5kZWNsKQorCT0gREVDTF9WSVNJ QklMSVRZX1NQRUNJRklFRCAob2xkX25vZGUtPmRlY2wpOworICAgICAgREVDTF9WSVNJQklM SVRZIChuZXdfbm9kZS0+ZGVjbCkgPSBERUNMX1ZJU0lCSUxJVFkgKG9sZF9ub2RlLT5kZWNs KTsKKyAgICAgIERFQ0xfRExMSU1QT1JUX1AgKG5ld19ub2RlLT5kZWNsKSA9IERFQ0xfRExM SU1QT1JUX1AgKG9sZF9ub2RlLT5kZWNsKTsKKyAgICAgIGlmIChERUNMX09ORV9PTkxZIChv bGRfbm9kZS0+ZGVjbCkpCisJbWFrZV9kZWNsX29uZV9vbmx5IChuZXdfbm9kZS0+ZGVjbCwK KwkJCSAgICBERUNMX0FTU0VNQkxFUl9OQU1FIChuZXdfbm9kZS0+ZGVjbCkpOworCisgICAg ICAvKiBUaGUgbWV0aG9kIGNncmFwaF92ZXJzaW9uX2Nsb25lX3dpdGhfYm9keSAoKSB3aWxs IGZvcmNlIHRoZSBuZXcKKwkgc3ltYm9sIGxvY2FsLiAgVW5kbyB0aGlzLCBhbmQgaW5oZXJp dCBleHRlcm5hbCB2aXNpYmlsaXR5IGZyb20KKwkgdGhlIG9sZCBub2RlLiAgKi8KKyAgICAg IG5ld19ub2RlLT5sb2NhbCA9IG9sZF9ub2RlLT5sb2NhbDsKKyAgICAgIG5ld19ub2RlLT5l eHRlcm5hbGx5X3Zpc2libGUgPSBvbGRfbm9kZS0+ZXh0ZXJuYWxseV92aXNpYmxlOworICAg ICAgbmV3X25vZGUtPmNhbGxzX2RlY2xhcmVfdmFyaWFudF9hbHQKKwk9IG9sZF9ub2RlLT5j YWxsc19kZWNsYXJlX3ZhcmlhbnRfYWx0OworICAgIH0KIAogICByZXR1cm4gbmV3X25vZGU7 CiB9CkBAIC0xNjgzLDEzICsxNzAyLDM0IEBAIHNpbWRfY2xvbmVfYWRqdXN0IChzdHJ1Y3Qg Y2dyYXBoX25vZGUgKm5vZGUpCiB2b2lkCiBleHBhbmRfc2ltZF9jbG9uZXMgKHN0cnVjdCBj Z3JhcGhfbm9kZSAqbm9kZSkKIHsKLSAgdHJlZSBhdHRyID0gbG9va3VwX2F0dHJpYnV0ZSAo Im9tcCBkZWNsYXJlIHNpbWQiLAotCQkJCURFQ0xfQVRUUklCVVRFUyAobm9kZS0+ZGVjbCkp OwotICBpZiAoYXR0ciA9PSBOVUxMX1RSRUUKLSAgICAgIHx8IG5vZGUtPmlubGluZWRfdG8K KyAgdHJlZSBhdHRyOworICBib29sIGV4cGxpY2l0X3AgPSB0cnVlOworCisgIGlmIChub2Rl LT5pbmxpbmVkX3RvCiAgICAgICB8fCBsb29rdXBfYXR0cmlidXRlICgibm9jbG9uZSIsIERF Q0xfQVRUUklCVVRFUyAobm9kZS0+ZGVjbCkpKQogICAgIHJldHVybjsKIAorICBhdHRyID0g bG9va3VwX2F0dHJpYnV0ZSAoIm9tcCBkZWNsYXJlIHNpbWQiLAorCQkJICAgREVDTF9BVFRS SUJVVEVTIChub2RlLT5kZWNsKSk7CisKKyAgLyogU2VlIGlmIHdlIGNhbiBhZGQgYW4gIm9t cCBkZWNsYXJlIHNpbWQiIGRpcmVjdGl2ZSBpbXBsaWNpdGx5CisgICAgIGJlZm9yZSBnaXZp bmcgdXAuICAqLworICBpZiAoYXR0ciA9PSBOVUxMX1RSRUUKKyAgICAgICYmIGZsYWdfb3Bl bm1wX3RhcmdldF9zaW1kX2Nsb25lKQorICAgIHsKKyAgICAgIHN0cnVjdCBmdW5jdGlvbiAq Zm4gPSBERUNMX1NUUlVDVF9GVU5DVElPTiAobm9kZS0+ZGVjbCk7CisgICAgICBpZiAoZm4g JiYgZm4tPmF1dG9fc2ltZF9jbG9uZV9jYW5kaWRhdGUKKwkgICYmIChmbi0+YXV0b19zaW1k X2NhbGxfY2FuZGlkYXRlIHx8IGluX2x0b19wKSkKKwl7CisJICBhdHRyID0gdHJlZV9jb25z IChnZXRfaWRlbnRpZmllciAoIm9tcCBkZWNsYXJlIHNpbWQiKSwgTlVMTCwKKwkJCSAgICBE RUNMX0FUVFJJQlVURVMgKG5vZGUtPmRlY2wpKTsKKwkgIERFQ0xfQVRUUklCVVRFUyAobm9k ZS0+ZGVjbCkgPSBhdHRyOworCSAgZXhwbGljaXRfcCA9IGZhbHNlOworCX0KKyAgICB9Cisg IGlmIChhdHRyID09IE5VTExfVFJFRSkKKyAgICByZXR1cm47CisKICAgLyogSWdub3JlCiAg ICAgICNwcmFnbWEgb21wIGRlY2xhcmUgc2ltZAogICAgICBleHRlcm4gaW50IGZvbyAoKTsK QEAgLTE3MTQsMTMgKzE3NTQsMTUgQEAgZXhwYW5kX3NpbWRfY2xvbmVzIChzdHJ1Y3QgY2dy YXBoX25vZGUgKm5vZGUpCiAKICAgICAgIHBvbHlfdWludDY0IG9yaWdfc2ltZGxlbiA9IGNs b25lX2luZm8tPnNpbWRsZW47CiAgICAgICB0cmVlIGJhc2VfdHlwZSA9IHNpbWRfY2xvbmVf Y29tcHV0ZV9iYXNlX2RhdGFfdHlwZSAobm9kZSwgY2xvbmVfaW5mbyk7CisKICAgICAgIC8q IFRoZSB0YXJnZXQgY2FuIHJldHVybiAwIChubyBzaW1kIGNsb25lcyBzaG91bGQgYmUgY3Jl YXRlZCksCiAJIDEgKGp1c3Qgb25lIElTQSBvZiBzaW1kIGNsb25lcyBzaG91bGQgYmUgY3Jl YXRlZCkgb3IgaGlnaGVyCiAJIGNvdW50IG9mIElTQSB2YXJpYW50cy4gIEluIHRoYXQgY2Fz ZSwgY2xvbmVfaW5mbyBpcyBpbml0aWFsaXplZAogCSBmb3IgdGhlIGZpcnN0IElTQSB2YXJp YW50LiAgKi8KICAgICAgIGludCBjb3VudAogCT0gdGFyZ2V0bS5zaW1kX2Nsb25lLmNvbXB1 dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAobm9kZSwgY2xvbmVfaW5mbywKLQkJCQkJCQkgIGJh c2VfdHlwZSwgMCk7CisJCQkJCQkJICBiYXNlX3R5cGUsIDAsCisJCQkJCQkJICBleHBsaWNp dF9wKTsKICAgICAgIGlmIChjb3VudCA9PSAwKQogCWNvbnRpbnVlOwogCkBAIC0xNzQ1LDcg KzE3ODcsOCBAQCBleHBhbmRfc2ltZF9jbG9uZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9k ZSkKIAkgICAgICAvKiBBbmQgY2FsbCB0aGUgdGFyZ2V0IGhvb2sgYWdhaW4gdG8gZ2V0IHRo ZSByaWdodCBJU0EuICAqLwogCSAgICAgIHRhcmdldG0uc2ltZF9jbG9uZS5jb21wdXRlX3Zl Y3NpemVfYW5kX3NpbWRsZW4gKG5vZGUsIGNsb25lLAogCQkJCQkJCSAgICAgIGJhc2VfdHlw ZSwKLQkJCQkJCQkgICAgICBpIC8gMik7CisJCQkJCQkJICAgICAgaSAvIDIsCisJCQkJCQkJ ICAgICAgZXhwbGljaXRfcCk7CiAJICAgICAgaWYgKChpICYgMSkgIT0gMCkKIAkJY2xvbmUt PmluYnJhbmNoID0gMTsKIAkgICAgfQpAQCAtMTc2Myw3ICsxODA2LDcgQEAgZXhwYW5kX3Np bWRfY2xvbmVzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiAJICAvKiBPbmx5IHdoZW4g d2UgYXJlIHN1cmUgd2Ugd2FudCB0byBjcmVhdGUgdGhlIGNsb25lIGFjdHVhbGx5CiAJICAg ICBjbG9uZSB0aGUgZnVuY3Rpb24gKG9yIGRlZmluaXRpb25zKSBvciBjcmVhdGUgYW5vdGhl cgogCSAgICAgZXh0ZXJuIEZVTkNUSU9OX0RFQ0wgKGZvciBwcm90b3R5cGVzIHdpdGhvdXQg ZGVmaW5pdGlvbnMpLiAgKi8KLQkgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqbiA9IHNpbWRfY2xv bmVfY3JlYXRlIChub2RlKTsKKwkgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqbiA9IHNpbWRfY2xv bmVfY3JlYXRlIChub2RlLCAhZXhwbGljaXRfcCk7CiAJICBpZiAobiA9PSBOVUxMKQogCSAg ICB7CiAJICAgICAgaWYgKGkgPT0gMCkKZGlmZiAtLWdpdCBhL2djYy9vcHRzLmNjIGIvZ2Nj L29wdHMuY2MKaW5kZXggYWUwNzlmY2QyMGUuLjhkNWViMmJiYmNlIDEwMDY0NAotLS0gYS9n Y2Mvb3B0cy5jYworKysgYi9nY2Mvb3B0cy5jYwpAQCAtNjU4LDYgKzY1OCw3IEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9vcHRpb25zIGRlZmF1bHRfb3B0aW9uc190YWJsZVtd ID0KICAgICAgIFJFT1JERVJfQkxPQ0tTX0FMR09SSVRITV9TVEMgfSwKICAgICB7IE9QVF9M RVZFTFNfMl9QTFVTX1NQRUVEX09OTFksIE9QVF9mdHJlZV9sb29wX3ZlY3Rvcml6ZSwgTlVM TCwgMSB9LAogICAgIHsgT1BUX0xFVkVMU18yX1BMVVNfU1BFRURfT05MWSwgT1BUX2Z0cmVl X3NscF92ZWN0b3JpemUsIE5VTEwsIDEgfSwKKyAgICB7IE9QVF9MRVZFTFNfMl9QTFVTX1NQ RUVEX09OTFksIE9QVF9mb3Blbm1wX3RhcmdldF9zaW1kX2Nsb25lLCBOVUxMLCAxIH0sCiAj aWZkZWYgSU5TTl9TQ0hFRFVMSU5HCiAgIC8qIE9ubHkgcnVuIHRoZSBwcmUtcmVnYWxsb2Mg c2NoZWR1bGluZyBwYXNzIGlmIG9wdGltaXppbmcgZm9yIHNwZWVkLiAgKi8KICAgICB7IE9Q VF9MRVZFTFNfMl9QTFVTX1NQRUVEX09OTFksIE9QVF9mc2NoZWR1bGVfaW5zbnMsIE5VTEws IDEgfSwKZGlmZiAtLWdpdCBhL2djYy9wYXNzZXMuZGVmIGIvZ2NjL3Bhc3Nlcy5kZWYKaW5k ZXggOTM5ZWMzZTI5YzguLjRiMjlhMmM1ODAwIDEwMDY0NAotLS0gYS9nY2MvcGFzc2VzLmRl ZgorKysgYi9nY2MvcGFzc2VzLmRlZgpAQCAtMzUsNiArMzUsNyBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogICBORVhUX1BBU1MgKHBh c3NfZGlhZ25vc2Vfb21wX2Jsb2Nrcyk7CiAgIE5FWFRfUEFTUyAocGFzc19kaWFnbm9zZV90 bV9ibG9ja3MpOwogICBORVhUX1BBU1MgKHBhc3Nfb21wX29hY2Nfa2VybmVsc19kZWNvbXBv c2UpOworICBORVhUX1BBU1MgKHBhc3Nfb21wX2F1dG9fZGVjbGFyZV9zaW1kKTsKICAgTkVY VF9QQVNTIChwYXNzX2xvd2VyX29tcCk7CiAgIE5FWFRfUEFTUyAocGFzc19sb3dlcl9jZik7 CiAgIE5FWFRfUEFTUyAocGFzc19sb3dlcl90bSk7CmRpZmYgLS1naXQgYS9nY2MvdGFyZ2V0 LmRlZiBiL2djYy90YXJnZXQuZGVmCmluZGV4IGEzZDNiMDRhMTY1Li4wZTQxYTM3OTZlYyAx MDA2NDQKLS0tIGEvZ2NjL3RhcmdldC5kZWYKKysrIGIvZ2NjL3RhcmdldC5kZWYKQEAgLTE2 MzQsNyArMTYzNCw3IEBAIGZpZWxkcyBpbiBAdmFye3NpbWRfY2xvbmV9IHN0cnVjdHVyZSBw b2ludGVkIGJ5IEB2YXJ7Y2xvbmVfaW5mb30gYXJndW1lbnQgYW5kIGFsCiBub3QgZGV0ZXJt aW5lZCBieSB0aGUgYml0c2l6ZSAoaW4gd2hpY2ggY2FzZSBAdmFye3NpbWRsZW59IGlzIGFs d2F5cyB1c2VkKS5cblwKIFRoZSBob29rIHNob3VsZCByZXR1cm4gMCBpZiBTSU1EIGNsb25l cyBzaG91bGRuJ3QgYmUgZW1pdHRlZCxcblwKIG9yIG51bWJlciBvZiBAdmFye3ZlY3NpemVf bWFuZ2xlfSB2YXJpYW50cyB0aGF0IHNob3VsZCBiZSBlbWl0dGVkLiIsCi1pbnQsIChzdHJ1 Y3QgY2dyYXBoX25vZGUgKiwgc3RydWN0IGNncmFwaF9zaW1kX2Nsb25lICosIHRyZWUsIGlu dCksIE5VTEwpCitpbnQsIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgc3RydWN0IGNncmFwaF9z aW1kX2Nsb25lICosIHRyZWUsIGludCwgYm9vbCksIE5VTEwpCiAKIERFRkhPT0sKIChhZGp1 c3QsCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9nb21wL3RhcmdldC1zaW1k LWNsb25lLTEuQyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xv bmUtMS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NWVhZmZj NWU4NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2dvbXAvdGFy Z2V0LXNpbWQtY2xvbmUtMS5DCkBAIC0wLDAgKzEsMjYgQEAKKy8qIHsgZGctb3B0aW9ucyAi LWZvcGVubXAgLU8yIiB9ICovCisKKy8qIFRlc3QgdGhhdCBzaW1kIGNsb25lcyBhcmUgZ2Vu ZXJhdGVkIGZvciBmdW5jdGlvbnMgd2l0aCAiZGVjbGFyZSB0YXJnZXQiLiAgKi8KKworI3By YWdtYSBvbXAgZGVjbGFyZSB0YXJnZXQKK19fYXR0cmlidXRlX18gKChfX25vaW5saW5lX18p KSBpbnQgYWRkaXQgKGludCBhLCBpbnQgYikKK3sKKyAgcmV0dXJuIGEgKyBiOworfQorI3By YWdtYSBvbXAgZW5kIGRlY2xhcmUgdGFyZ2V0CisKK3ZvaWQgY2FsbGl0IChpbnQgKmEsIGlu dCAqYiwgaW50ICpjKQoreworICBpbnQgaTsKKyAgI3ByYWdtYSBvbXAgZm9yIHNpbWQKKyAg Zm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgY1tpXSA9IGFkZGl0IChhW2ldLCBiW2ld KTsKK30KKworLyogQWx0aG91Z2ggYWRkaXQgaGFzIGV4dGVybmFsIGxpbmthZ2UsIHdlIGV4 cGVjdCBjbG9uZXMgdG8gYmUgZ2VuZXJhdGVkIGFzCisgICBmb3IgYSBmdW5jdGlvbiB3aXRo IGludGVybmFsIGxpbmthZ2UuICAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgIlxcLnR5cGVcXHRfWkdWYk40dnZfX1o1YWRkaXRpaSwgQGZ1bmN0aW9uIiB7IHRhcmdl dCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgIlxcLnR5cGVcXHRfWkdWYk00dnZfX1o1YWRkaXRpaSwgQGZ1bmN0aW9uIiB7 IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItbm90ICJcXC5nbG9ibFxcdF9aR1ZiTjR2dl9fWjVhZGRpdGlpIiB7 IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItbm90ICJcXC5nbG9ibFxcdF9aR1ZiTTR2dl9fWjVhZGRpdGlpIiB7 IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2crKy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTIuQyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtMi5DCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jZmY1YmZkY2VmMwotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtMi5DCkBA IC0wLDAgKzEsMjMgQEAKKy8qIHsgZGctb3B0aW9ucyAiLWZvcGVubXAgLU8yIiB9ICovCisK Ky8qIFRlc3QgdGhhdCBzaW1kIGNsb25lcyBhcmUgbm90IGdlbmVyYXRlZCBmb3IgImRlY2xh cmUgdGFyZ2V0IgorICAgZnVuY3Rpb25zIHRoYXQgdGhyb3cuICAqLworCisjcHJhZ21hIG9t cCBkZWNsYXJlIHRhcmdldAorX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXykpIGludCBh ZGRpdCAoaW50IGEsIGludCBiKQoreworICBpZiAoYSA8IDApIHRocm93IC0xOworICByZXR1 cm4gYSArIGI7Cit9CisjcHJhZ21hIG9tcCBlbmQgZGVjbGFyZSB0YXJnZXQKKwordm9pZCBj YWxsaXQgKGludCAqYSwgaW50ICpiLCBpbnQgKmMpCit7CisgIGludCBpOworICAjcHJhZ21h IG9tcCBmb3Igc2ltZAorICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICBjW2ldID0g YWRkaXQgKGFbaV0sIGJbaV0pOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItbm90ICJcXC50eXBlXFx0X1pHVmJONHZ2X19aNWFkZGl0aWksIEBmdW5jdGlvbiIgeyB0 YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCAiXFwudHlwZVxcdF9aR1ZiTTR2dl9fWjVhZGRpdGlpLCBAZnVu Y3Rpb24iIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9IH0gKi8KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtMS5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS0xLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZiNWExOTYxNjllCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9u ZS0xLmMKQEAgLTAsMCArMSwyNiBAQAorLyogeyBkZy1vcHRpb25zICItZm9wZW5tcCAtTzIi IH0gKi8KKworLyogVGVzdCB0aGF0IHNpbWQgY2xvbmVzIGFyZSBnZW5lcmF0ZWQgZm9yIGZ1 bmN0aW9ucyB3aXRoICJkZWNsYXJlIHRhcmdldCIuICAqLworCisjcHJhZ21hIG9tcCBkZWNs YXJlIHRhcmdldAorX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXykpIGludCBhZGRpdCAo aW50IGEsIGludCBiKQoreworICByZXR1cm4gYSArIGI7Cit9CisjcHJhZ21hIG9tcCBlbmQg ZGVjbGFyZSB0YXJnZXQKKwordm9pZCBjYWxsaXQgKGludCAqYSwgaW50ICpiLCBpbnQgKmMp Cit7CisgIGludCBpOworICAjcHJhZ21hIG9tcCBmb3Igc2ltZAorICBmb3IgKGkgPSAwOyBp IDwgMTY7IGkrKykKKyAgICBjW2ldID0gYWRkaXQgKGFbaV0sIGJbaV0pOworfQorCisvKiBB bHRob3VnaCBhZGRpdCBoYXMgZXh0ZXJuYWwgbGlua2FnZSwgd2UgZXhwZWN0IGNsb25lcyB0 byBiZSBnZW5lcmF0ZWQgYXMKKyAgIGZvciBhIGZ1bmN0aW9uIHdpdGggaW50ZXJuYWwgbGlu a2FnZS4gICovCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiXFwudHlwZVxc dF9aR1ZiTjR2dl9hZGRpdCwgQGZ1bmN0aW9uIiB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQt Ki0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIlxcLnR5cGVc XHRfWkdWYk00dnZfYWRkaXQsIEBmdW5jdGlvbiIgeyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0 LSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXFwu Z2xvYmxcXHRfWkdWYk40dnZfYWRkaXQiIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSog fSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlxcLmdsb2Js XFx0X1pHVmJNNHZ2X2FkZGl0IiB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1k LWNsb25lLTIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xv bmUtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MDQ5YmIz Mzc4NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFy Z2V0LXNpbWQtY2xvbmUtMi5jCkBAIC0wLDAgKzEsMjYgQEAKKy8qIHsgZGctb3B0aW9ucyAi LWZvcGVubXAgLU8yIiB9ICovCisKKy8qIFRlc3QgdGhhdCBzaW1kIGNsb25lcyBhcmUgbm90 IGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25zIHdpdGggCisgICAiZGVjbGFyZSB0YXJnZXQiIGJ1 dCB1bnN1aXRhYmxlIGFyZ3VtZW50cy4gICovCisKK3N0cnVjdCBzIHsKKyAgaW50IGE7Cisg IGludCBiOworfTsKKyAgCisjcHJhZ21hIG9tcCBkZWNsYXJlIHRhcmdldAorX19hdHRyaWJ1 dGVfXyAoKF9fbm9pbmxpbmVfXykpIGludCBhZGRpdCAoc3RydWN0IHMgeCkKK3sKKyAgcmV0 dXJuIHguYSArIHguYjsKK30KKyNwcmFnbWEgb21wIGVuZCBkZWNsYXJlIHRhcmdldAorCit2 b2lkIGNhbGxpdCAoc3RydWN0IHMgKnNzLCBpbnQgKmMpCit7CisgIGludCBpOworICAjcHJh Z21hIG9tcCBmb3Igc2ltZAorICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICBjW2ld ID0gYWRkaXQgKHNzW2ldKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAiX1ouKl9hZGRpdCIgeyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1j bG9uZS0zLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25l LTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTAzZTQ3NjRm OGYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3Rhcmdl dC1zaW1kLWNsb25lLTMuYwpAQCAtMCwwICsxLDI1IEBACisvKiB7IGRnLW9wdGlvbnMgIi1m b3Blbm1wIC1PMiIgfSAqLworCisvKiBUZXN0IHRoYXQgc2ltZCBjbG9uZXMgYXJlIG5vdCBn ZW5lcmF0ZWQgZm9yIGZ1bmN0aW9ucyB3aXRoIAorICAgImRlY2xhcmUgdGFyZ2V0IiBidXQg dGhhdCBjYWxsIHBvc3NpYmx5IHNpZGUtZWZmZWN0aW5nIGZ1bmN0aW9ucyAKKyAgIGluIHRo ZSBib2R5LiAgKi8KKworZXh0ZXJuIGludCBmIChpbnQpOworCisjcHJhZ21hIG9tcCBkZWNs YXJlIHRhcmdldAorX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXykpIGludCBhZGRpdChp bnQgYSwgaW50IGIpCit7CisgIHJldHVybiBmKGEpICsgYjsKK30KKyNwcmFnbWEgb21wIGVu ZCBkZWNsYXJlIHRhcmdldAorCit2b2lkIGNhbGxpdCAoaW50ICphLCBpbnQgKmIsIGludCAq YykKK3sKKyAgaW50IGk7CisgICNwcmFnbWEgb21wIGZvciBzaW1kCisgIGZvciAoaSA9IDA7 IGkgPCAxNjsgaSsrKQorICAgIGNbaV0gPSBhZGRpdCAoYVtpXSwgYltpXSk7Cit9CisKKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIl9aLipfYWRkaXQiIHsgdGFyZ2V0 IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS00LmMgYi9nY2MvdGVzdHN1aXRl L2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uNzE2MWI5MjdkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9n Y2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTQuYwpAQCAtMCww ICsxLDI0IEBACisvKiB7IGRnLW9wdGlvbnMgIi1mb3Blbm1wIC1PMiIgfSAqLworCisvKiBU ZXN0IHRoYXQgc2ltZCBjbG9uZXMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGZ1bmN0aW9ucyB3 aXRoIAorICAgImRlY2xhcmUgdGFyZ2V0IiBidXQgdGhhdCB3cml0ZSBtZW1vcnkgaW4gdGhl IGJvZHkuICAqLworCitleHRlcm4gaW50IHNhdmU7CisKKyNwcmFnbWEgb21wIGRlY2xhcmUg dGFyZ2V0CitfX2F0dHJpYnV0ZV9fICgoX19ub2lubGluZV9fKSkgaW50IGFkZGl0KGludCBh LCBpbnQgYikKK3sKKyAgc2F2ZSA9IGE7CisgIHJldHVybiBhICsgYjsKK30KKyNwcmFnbWEg b21wIGVuZCBkZWNsYXJlIHRhcmdldAorCit2b2lkIGNhbGxpdCAoaW50ICphLCBpbnQgKmIs IGludCAqYykKK3sKKyAgaW50IGk7CisgICNwcmFnbWEgb21wIGZvciBzaW1kCisgIGZvciAo aSA9IDA7IGkgPCAxNjsgaSsrKQorICAgIGNbaV0gPSBhZGRpdCAoYVtpXSwgYltpXSk7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIl9aLipfYWRkaXQiIHsg dGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtNS5jIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS01LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYzMmZmOWNkNWQwCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS01LmMKQEAg LTAsMCArMSwyMSBAQAorLyogeyBkZy1vcHRpb25zICItZm9wZW5tcCAtT3MiIH0gKi8KKwor LyogVGVzdCB0aGF0IHNpbWQgY2xvbmVzIGFyZSBub3QgZ2VuZXJhdGVkIGZvciBmdW5jdGlv bnMgd2l0aCAKKyAgICJkZWNsYXJlIHRhcmdldCIgYXQgLU9zLiAgKi8KKworI3ByYWdtYSBv bXAgZGVjbGFyZSB0YXJnZXQKK19fYXR0cmlidXRlX18gKChfX25vaW5saW5lX18pKSBpbnQg YWRkaXQgKGludCBhLCBpbnQgYikKK3sKKyAgcmV0dXJuIGEgKyBiOworfQorI3ByYWdtYSBv bXAgZW5kIGRlY2xhcmUgdGFyZ2V0CisKK3ZvaWQgY2FsbGl0IChpbnQgKmEsIGludCAqYiwg aW50ICpjKQoreworICBpbnQgaTsKKyAgI3ByYWdtYSBvbXAgZm9yIHNpbWQKKyAgZm9yIChp ID0gMDsgaSA8IDE2OyBpKyspCisgICAgY1tpXSA9IGFkZGl0IChhW2ldLCBiW2ldKTsKK30K KworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiX1ouKl9hZGRpdCIgeyB0 YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS02LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTYuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmE2OWQyYjE2ZTgKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTYuYwpAQCAt MCwwICsxLDIxIEBACisvKiB7IGRnLW9wdGlvbnMgIi1mb3Blbm1wIC1PZyIgfSAqLworCisv KiBUZXN0IHRoYXQgc2ltZCBjbG9uZXMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGZ1bmN0aW9u cyB3aXRoIAorICAgImRlY2xhcmUgdGFyZ2V0IiBhdCAtT2cuICAqLworCisjcHJhZ21hIG9t cCBkZWNsYXJlIHRhcmdldAorX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXykpIGludCBh ZGRpdCAoaW50IGEsIGludCBiKQoreworICByZXR1cm4gYSArIGI7Cit9CisjcHJhZ21hIG9t cCBlbmQgZGVjbGFyZSB0YXJnZXQKKwordm9pZCBjYWxsaXQgKGludCAqYSwgaW50ICpiLCBp bnQgKmMpCit7CisgIGludCBpOworICAjcHJhZ21hIG9tcCBmb3Igc2ltZAorICBmb3IgKGkg PSAwOyBpIDwgMTY7IGkrKykKKyAgICBjW2ldID0gYWRkaXQgKGFbaV0sIGJbaV0pOworfQor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJfWi4qX2FkZGl0IiB7IHRh cmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTcuYyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtNy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MDYyN2Q2OTg1NwotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtNy5jCkBAIC0w LDAgKzEsMjIgQEAKKy8qIHsgZGctb3B0aW9ucyAiLWZvcGVubXAgLU8yIiB9ICovCisKKy8q IFRlc3QgdGhhdCBzaW1kIGNsb25lcyBhcmUgbm90IGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25z IHdpdGggCisgICAiZGVjbGFyZSB0YXJnZXQiIHdoZW4gdGhlcmUgaXMgbm8gY2FsbCBzaXRl IGxpa2VseSB0byB1c2UgdGhlbS4gICovCisKKyNwcmFnbWEgb21wIGRlY2xhcmUgdGFyZ2V0 CitfX2F0dHJpYnV0ZV9fICgoX19ub2lubGluZV9fKSkgaW50IGFkZGl0IChpbnQgYSwgaW50 IGIpCit7CisgIHJldHVybiBhICsgYjsKK30KKyNwcmFnbWEgb21wIGVuZCBkZWNsYXJlIHRh cmdldAorCit2b2lkIGNhbGxpdCAoaW50ICphLCBpbnQgKmIsIGludCAqYykKK3sKKyAgaW50 IGk7CisgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorICAgIC8qIFRoaXMgY2FsbCBpcyBu b3QgaW4gYW4gT01QIGxvb3AuICAqLworICAgIGNbaV0gPSBhZGRpdCAoYVtpXSwgYltpXSk7 Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlxcLnR5cGVcXHRf WkdWYk40dnZfYWRkaXQsIEBmdW5jdGlvbiIgeyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSot KiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXFwudHlw ZVxcdF9aR1ZiTTR2dl9hZGRpdCwgQGZ1bmN0aW9uIiB7IHRhcmdldCBpPzg2LSotKiB4ODZf NjQtKi0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21w L3RhcmdldC1zaW1kLWNsb25lLTguYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFy Z2V0LXNpbWQtY2xvbmUtOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi40YTA1YWRlMWQwZQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtOC5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qIHsg ZGctb3B0aW9ucyAiLWZvcGVubXAgLU8yIiB9ICovCisKKy8qIFRlc3QgdGhhdCBzaW1kIGNs b25lcyBhcmUgbm90IGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25zIHdpdGggCisgICAiZGVjbGFy ZSB0YXJnZXQiIGJ1dCB0aGF0IHJlYWQgdm9sYXRpbGUgbWVtb3J5IGluIHRoZSBib2R5LiAg Ki8KKworZXh0ZXJuIHZvbGF0aWxlIGludCBzYXZlOworCisjcHJhZ21hIG9tcCBkZWNsYXJl IHRhcmdldAorX19hdHRyaWJ1dGVfXyAoKF9fbm9pbmxpbmVfXykpIGludCBhZGRpdChpbnQg YSwgaW50IGIpCit7CisgIHJldHVybiBzYXZlICsgYSArIGI7Cit9CisjcHJhZ21hIG9tcCBl bmQgZGVjbGFyZSB0YXJnZXQKKwordm9pZCBjYWxsaXQgKGludCAqYSwgaW50ICpiLCBpbnQg KmMpCit7CisgIGludCBpOworICAjcHJhZ21hIG9tcCBmb3Igc2ltZAorICBmb3IgKGkgPSAw OyBpIDwgMTY7IGkrKykKKyAgICBjW2ldID0gYWRkaXQgKGFbaV0sIGJbaV0pOworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJfWi4qX2FkZGl0IiB7IHRhcmdl dCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1w YXNzLmggYi9nY2MvdHJlZS1wYXNzLmgKaW5kZXggNGRmZTA1ZWQ4ZTAuLmM2YWM4NTUyMmZh IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1wYXNzLmgKKysrIGIvZ2NjL3RyZWUtcGFzcy5oCkBA IC00MjQsNiArNDI0LDcgQEAgZXh0ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNzX2xv d2VyX3ZlY3Rvcl9zc2EgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxlX29w dF9wYXNzICptYWtlX3Bhc3Nfb21wX29hY2Nfa2VybmVsc19kZWNvbXBvc2UgKGdjYzo6Y29u dGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxlX29wdF9wYXNzICptYWtlX3Bhc3NfbG93ZXJf b21wIChnY2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFr ZV9wYXNzX2RpYWdub3NlX29tcF9ibG9ja3MgKGdjYzo6Y29udGV4dCAqY3R4dCk7CitleHRl cm4gZ2ltcGxlX29wdF9wYXNzICptYWtlX3Bhc3Nfb21wX2F1dG9fZGVjbGFyZV9zaW1kIChn Y2M6OmNvbnRleHQgKmN0eHQpOwogZXh0ZXJuIGdpbXBsZV9vcHRfcGFzcyAqbWFrZV9wYXNz X2V4cGFuZF9vbXAgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBleHRlcm4gZ2ltcGxlX29wdF9w YXNzICptYWtlX3Bhc3NfZXhwYW5kX29tcF9zc2EgKGdjYzo6Y29udGV4dCAqY3R4dCk7CiBl eHRlcm4gZ2ltcGxlX29wdF9wYXNzICptYWtlX3Bhc3Nfb21wX3RhcmdldF9saW5rIChnY2M6 OmNvbnRleHQgKmN0eHQpOwo= --------------lnF31YAx2Svhm35ZnqiWPbI0--