From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id F39A83858D33 for ; Wed, 8 Mar 2023 16:25:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org F39A83858D33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 24F691063; Wed, 8 Mar 2023 08:26:19 -0800 (PST) Received: from [10.57.79.24] (unknown [10.57.79.24]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C9F163F71A; Wed, 8 Mar 2023 08:25:34 -0800 (PST) Content-Type: multipart/mixed; boundary="------------LgYxy6kaJPEhrOvu00vMbiMz" Message-ID: Date: Wed, 8 Mar 2023 16:25:27 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: [RFC 4/X] omp, aarch64: Add SVE support for 'omp declare simd' [PR 96342] Content-Language: en-US To: "gcc-patches@gcc.gnu.org" Cc: "jakub@redhat.com" , Richard Sandiford , Richard Biener References: From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-15.8 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,SPF_HELO_NONE,SPF_NONE,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: This is a multi-part message in MIME format. --------------LgYxy6kaJPEhrOvu00vMbiMz Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, This patch adds SVE support for simd clone generation when using 'omp declare simd'. The design is based on what was discussed in PR 96342, but I did not look at YangYang's patch as I wasn't sure of whether that code's copyright had been assigned to FSF. This patch also is not in accordance with the examples in the BETA VFABIA64 document that can be found in the vfabia64 subdir of https://github.com/ARM-software/abi-aa/ If we agree to this approach I will propose changes to the ABI. It differs in that we take the ommission of 'simdlen' to be the only way to create a SVE simd clone using 'omp declare simd', and that the current target defined on the command-line has no bearing in what simd clones are generated. This SVE simd clone is always VLA. The document describes a way to specify SVE simdclones of VLS by using the simdlen clause, but that would require another way to toggle between SVE and Advanced SIMD and since there is no clause to do that for 'omp declare simd' I would have to assume this would be controllable by the command-line target options (march/mcpu). By generating all possible Advanced SIMD simdlens and a VLA simdlen for SVE when ommitting simdlen we would be adhering to the same practice x86_64 does. Targethook changes This patch proposes two targethook changes: 1) Add mode parameter to TARGET_SIMD_CLONE_USABLE We require the mode parameter to distinguish between calls to a simd clone from a Advanced SIMD mode and a SVE mode. 2) Add new TARGET_SIMD_CLONE_ADJUST_RET_OR_PARAM We require this to be able to modify the types used in SVE simd clones, as we need to add the SVE type attribute so that the correct PCS can be applied. Other notable changes: - We discourage the use of an 'inbranch' simdclone for when the caller is not in a branch, such that it picks a 'notinbranch' variant if available over an inbranch one. (we could probably rely on ordering but that's quite error prone and the ordering I'm looking at is by definition target specific). - I currently put the VLA mangling in the target agnostic mangling function, if other targets with VLA want to use a different mangling in the future we may want to change this into a targethook. I'll create a ChangeLog when I turn this into a PATCH if we agree on this direction. --------------LgYxy6kaJPEhrOvu00vMbiMz Content-Type: text/plain; charset=UTF-8; name="libmvec_4.patch" Content-Disposition: attachment; filename="libmvec_4.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXByb3Rvcy5oIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKaW5kZXggZjc1ZWI4OTJmM2RhYTdj MjU3NmVmY2VkYzhkOTQ0YWIxZTg5NWNkYi4uMTIyYTQ3Mzc3MGViNDUyNmVjY2UzMjZmMDJk ODQzNjA4ZDA4OGI1YiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQt cHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKQEAg LTk5NSw2ICs5OTUsOCBAQCBuYW1lc3BhY2UgYWFyY2g2NF9zdmUgewogI2lmZGVmIEdDQ19U QVJHRVRfSAogICBib29sIHZlcmlmeV90eXBlX2NvbnRleHQgKGxvY2F0aW9uX3QsIHR5cGVf Y29udGV4dF9raW5kLCBjb25zdF90cmVlLCBib29sKTsKICNlbmRpZgorIHZvaWQgYWRkX3N2 ZV90eXBlX2F0dHJpYnV0ZSAodHJlZSwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCisJ CQkgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiB9CiAKIGV4dGVybiB2b2lk IGFhcmNoNjRfc3BsaXRfY29tYmluZXYxNnFpIChydHggb3BlcmFuZHNbM10pOwpkaWZmIC0t Z2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc3ZlLWJ1aWx0aW5zLmNjIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc3ZlLWJ1aWx0aW5zLmNjCmluZGV4IDE2MWExNGVk ZGU3YzlmYjFiMTNiMTQ2Y2Y1MDQ2M2UyZDc4ZGIyNjQuLjZmOTljNDM4ZDEwZGFhOTFiN2Uz YjYyM2M5OTU0ODlmMWE4YTBmNGMgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9h YXJjaDY0LXN2ZS1idWlsdGlucy5jYworKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2 NC1zdmUtYnVpbHRpbnMuY2MKQEAgLTU2OSwxNCArNTY5LDE2IEBAIHN0YXRpYyBib29sIHJl cG9ydGVkX21pc3NpbmdfcmVnaXN0ZXJzX3A7CiAvKiBSZWNvcmQgdGhhdCBUWVBFIGlzIGFu IEFCSS1kZWZpbmVkIFNWRSB0eXBlIHRoYXQgY29udGFpbnMgTlVNX1pSIFNWRSB2ZWN0b3Jz CiAgICBhbmQgTlVNX1BSIFNWRSBwcmVkaWNhdGVzLiAgTUFOR0xFRF9OQU1FLCBpZiBub25u dWxsLCBpcyB0aGUgQUJJLWRlZmluZWQKICAgIG1hbmdsaW5nIG9mIHRoZSB0eXBlLiAgQUNM RV9OQU1FIGlzIHRoZSA8YXJtX3N2ZS5oPiBuYW1lIG9mIHRoZSB0eXBlLiAgKi8KLXN0YXRp YyB2b2lkCit2b2lkCiBhZGRfc3ZlX3R5cGVfYXR0cmlidXRlICh0cmVlIHR5cGUsIHVuc2ln bmVkIGludCBudW1fenIsIHVuc2lnbmVkIGludCBudW1fcHIsCiAJCQljb25zdCBjaGFyICpt YW5nbGVkX25hbWUsIGNvbnN0IGNoYXIgKmFjbGVfbmFtZSkKIHsKICAgdHJlZSBtYW5nbGVk X25hbWVfdHJlZQogICAgID0gKG1hbmdsZWRfbmFtZSA/IGdldF9pZGVudGlmaWVyIChtYW5n bGVkX25hbWUpIDogTlVMTF9UUkVFKTsKKyAgdHJlZSBhY2xlX25hbWVfdHJlZQorICAgID0g KGFjbGVfbmFtZSA/IGdldF9pZGVudGlmaWVyIChhY2xlX25hbWUpIDogTlVMTF9UUkVFKTsK IAotICB0cmVlIHZhbHVlID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGdldF9pZGVudGlmaWVy IChhY2xlX25hbWUpLCBOVUxMX1RSRUUpOworICB0cmVlIHZhbHVlID0gdHJlZV9jb25zIChO VUxMX1RSRUUsIGFjbGVfbmFtZV90cmVlLCBOVUxMX1RSRUUpOwogICB2YWx1ZSA9IHRyZWVf Y29ucyAoTlVMTF9UUkVFLCBtYW5nbGVkX25hbWVfdHJlZSwgdmFsdWUpOwogICB2YWx1ZSA9 IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBzaXplX2ludCAobnVtX3ByKSwgdmFsdWUpOwogICB2 YWx1ZSA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBzaXplX2ludCAobnVtX3pyKSwgdmFsdWUp OwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MgYi9nY2MvY29u ZmlnL2FhcmNoNjQvYWFyY2g2NC5jYwppbmRleCA1YzQwYjZlZDIyYTUwODcyM2JkNTM1YTc0 NjA3NjJjM2EyNDNkNDQxLi5lZjkzYTRlOWQ0Mzc5OWRmNDQxMGYxNTJjZGQ3OThkYjI4NWU4 ODk3IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYworKysgYi9n Y2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYwpAQCAtNDAxNSwxMyArNDAxNSwxMyBAQCBh YXJjaDY0X3Rha2VzX2FyZ3VtZW50c19pbl9zdmVfcmVnc19wIChjb25zdF90cmVlIGZudHlw ZSkKIHN0YXRpYyBjb25zdCBwcmVkZWZpbmVkX2Z1bmN0aW9uX2FiaSAmCiBhYXJjaDY0X2Zu dHlwZV9hYmkgKGNvbnN0X3RyZWUgZm50eXBlKQogewotICBpZiAobG9va3VwX2F0dHJpYnV0 ZSAoImFhcmNoNjRfdmVjdG9yX3BjcyIsIFRZUEVfQVRUUklCVVRFUyAoZm50eXBlKSkpCi0g ICAgcmV0dXJuIGFhcmNoNjRfc2ltZF9hYmkgKCk7Ci0KICAgaWYgKGFhcmNoNjRfcmV0dXJu c192YWx1ZV9pbl9zdmVfcmVnc19wIChmbnR5cGUpCiAgICAgICB8fCBhYXJjaDY0X3Rha2Vz X2FyZ3VtZW50c19pbl9zdmVfcmVnc19wIChmbnR5cGUpKQogICAgIHJldHVybiBhYXJjaDY0 X3N2ZV9hYmkgKCk7CiAKKyAgaWYgKGxvb2t1cF9hdHRyaWJ1dGUgKCJhYXJjaDY0X3ZlY3Rv cl9wY3MiLCBUWVBFX0FUVFJJQlVURVMgKGZudHlwZSkpKQorICAgIHJldHVybiBhYXJjaDY0 X3NpbWRfYWJpICgpOworCiAgIHJldHVybiBkZWZhdWx0X2Z1bmN0aW9uX2FiaTsKIH0KIApA QCAtMjY5NjgsMTQgKzI2OTY4LDIxIEBAIGFhcmNoNjRfc2ltZF9jbG9uZV9jb21wdXRlX3Zl Y3NpemVfYW5kX3NpbWRsZW4gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwKIAl9CiAgICAg fQogCi0gIGNsb25laS0+dmVjc2l6ZV9tYW5nbGUgPSAnbic7CiAgIGNsb25laS0+bWFza19t b2RlID0gVk9JRG1vZGU7CiAgIGVsdF9iaXRzID0gR0VUX01PREVfQklUU0laRSAoU0NBTEFS X1RZUEVfTU9ERSAoYmFzZV90eXBlKSk7CiAgIGlmIChrbm93bl9lcSAoY2xvbmVpLT5zaW1k bGVuLCAwVSkpCiAgICAgewotICAgICAgY291bnQgPSAyOwotICAgICAgdmVjX2JpdHMgPSAo bnVtID09IDAgPyA2NCA6IDEyOCk7Ci0gICAgICBjbG9uZWktPnNpbWRsZW4gPSBleGFjdF9k aXYgKHZlY19iaXRzLCBlbHRfYml0cyk7CisgICAgICBpZiAobnVtID49IDIpCisJeworCSAg dmVjX2JpdHMgPSBwb2x5X3VpbnQ2NCAoMTI4LCAxMjgpOworCSAgY2xvbmVpLT5zaW1kbGVu ID0gZXhhY3RfZGl2ICh2ZWNfYml0cywgZWx0X2JpdHMpOworCX0KKyAgICAgIGVsc2UKKwl7 CisJICBjb3VudCA9IDM7CisJICB2ZWNfYml0cyA9IChudW0gPT0gMCA/IDY0IDogMTI4KTsK KwkgIGNsb25laS0+c2ltZGxlbiA9IGV4YWN0X2RpdiAodmVjX2JpdHMsIGVsdF9iaXRzKTsK Kwl9CiAgICAgfQogICBlbHNlCiAgICAgewpAQCAtMjY5OTQsNiArMjcwMDEsMTUgQEAgYWFy Y2g2NF9zaW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNn cmFwaF9ub2RlICpub2RlLAogCSAgcmV0dXJuIDA7CiAJfQogICAgIH0KKworICBpZiAobnVt ID49IDIpCisgICAgeworICAgICAgY2xvbmVpLT52ZWNzaXplX21hbmdsZSA9ICdzJzsKKyAg ICAgIGNsb25laS0+aW5icmFuY2ggPSAxOworICAgIH0KKyAgZWxzZQorICAgIGNsb25laS0+ dmVjc2l6ZV9tYW5nbGUgPSAnbic7CisKICAgY2xvbmVpLT52ZWNzaXplX2ludCA9IHZlY19i aXRzOwogICBjbG9uZWktPnZlY3NpemVfZmxvYXQgPSB2ZWNfYml0czsKICAgcmV0dXJuIGNv dW50OwpAQCAtMjcwMTAsMTcgKzI3MDI2LDI4IEBAIGFhcmNoNjRfc2ltZF9jbG9uZV9hZGp1 c3QgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKICAgdHJlZSB0ID0gVFJFRV9UWVBFIChu b2RlLT5kZWNsKTsKICAgVFlQRV9BVFRSSUJVVEVTICh0KSA9IG1ha2VfYXR0cmlidXRlICgi YWFyY2g2NF92ZWN0b3JfcGNzIiwgImRlZmF1bHQiLAogCQkJCQlUWVBFX0FUVFJJQlVURVMg KHQpKTsKKyAgaWYgKG5vZGUtPnNpbWRjbG9uZS0+dmVjc2l6ZV9tYW5nbGUgPT0gJ3MnKQor ICAgIHsKKyAgICAgIHRyZWUgdGFyZ2V0ID0gYnVpbGRfc3RyaW5nIChzdHJsZW4gKCIrc3Zl IiksICIrc3ZlIik7CisgICAgICBhYXJjaDY0X29wdGlvbl92YWxpZF9hdHRyaWJ1dGVfcCAo bm9kZS0+ZGVjbCwgTlVMTF9UUkVFLCB0YXJnZXQsIDApOworICAgIH0KIH0KIAogLyogSW1w bGVtZW50IFRBUkdFVF9TSU1EX0NMT05FX1VTQUJMRS4gICovCiAKIHN0YXRpYyBpbnQKLWFh cmNoNjRfc2ltZF9jbG9uZV91c2FibGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKK2Fh cmNoNjRfc2ltZF9jbG9uZV91c2FibGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwgbWFj aGluZV9tb2RlIHZlY3Rvcl9tb2RlKQogewogICBzd2l0Y2ggKG5vZGUtPnNpbWRjbG9uZS0+ dmVjc2l6ZV9tYW5nbGUpCiAgICAgewogICAgIGNhc2UgJ24nOgotICAgICAgaWYgKCFUQVJH RVRfU0lNRCkKKyAgICAgIGlmICghVEFSR0VUX1NJTUQKKwkgIHx8IGFhcmNoNjRfc3ZlX21v ZGVfcCAodmVjdG9yX21vZGUpKQorCXJldHVybiAtMTsKKyAgICAgIHJldHVybiAwOworICAg IGNhc2UgJ3MnOgorICAgICAgaWYgKCFUQVJHRVRfU1ZFCisJICB8fCAhYWFyY2g2NF9zdmVf bW9kZV9wICh2ZWN0b3JfbW9kZSkpCiAJcmV0dXJuIC0xOwogICAgICAgcmV0dXJuIDA7CiAg ICAgZGVmYXVsdDoKQEAgLTI3MDI4LDYgKzI3MDU1LDYxIEBAIGFhcmNoNjRfc2ltZF9jbG9u ZV91c2FibGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKICAgICB9CiB9CiAKKy8qIElt cGxlbWVudCBUQVJHRVRfU0lNRF9DTE9ORV9BREpVU1RfUkVUX09SX1BBUkFNLiAgKi8KKwor c3RhdGljIHRyZWUKK2FhcmNoNjRfc2ltZF9jbG9uZV9hZGp1c3RfcmV0X29yX3BhcmFtIChz dHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsIHRyZWUgdHlwZSwKKwkJCQkJYm9vbCBpc19tYXNr KQoreworICBpZiAodHlwZQorICAgICAgJiYgVkVDVE9SX1RZUEVfUCAodHlwZSkKKyAgICAg ICYmIG5vZGUtPnNpbWRjbG9uZS0+dmVjc2l6ZV9tYW5nbGUgPT0gJ3MnKQorICAgIHsKKyAg ICAgIGNsX3RhcmdldF9vcHRpb24gY3VyX3RhcmdldDsKKyAgICAgIGNsX3RhcmdldF9vcHRp b25fc2F2ZSAoJmN1cl90YXJnZXQsICZnbG9iYWxfb3B0aW9ucywgJmdsb2JhbF9vcHRpb25z X3NldCk7CisgICAgICB0cmVlIG5ld190YXJnZXQgPSBERUNMX0ZVTkNUSU9OX1NQRUNJRklD X1RBUkdFVCAobm9kZS0+ZGVjbCk7CisgICAgICBjbF90YXJnZXRfb3B0aW9uX3Jlc3RvcmUg KCZnbG9iYWxfb3B0aW9ucywgJmdsb2JhbF9vcHRpb25zX3NldCwKKwkJCQlUUkVFX1RBUkdF VF9PUFRJT04gKG5ld190YXJnZXQpKTsKKyAgICAgIGFhcmNoNjRfb3ZlcnJpZGVfb3B0aW9u c19pbnRlcm5hbCAoJmdsb2JhbF9vcHRpb25zKTsKKyAgICAgIGJvb2wgbV9vbGRfaGF2ZV9y ZWdzX29mX21vZGVbTUFYX01BQ0hJTkVfTU9ERV07CisgICAgICBtZW1jcHkgKG1fb2xkX2hh dmVfcmVnc19vZl9tb2RlLCBoYXZlX3JlZ3Nfb2ZfbW9kZSwKKwkgICAgICBzaXplb2YgKGhh dmVfcmVnc19vZl9tb2RlKSk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9NQUNI SU5FX01PREVTOyArK2kpCisJaWYgKGFhcmNoNjRfc3ZlX21vZGVfcCAoKG1hY2hpbmVfbW9k ZSkgaSkpCisJICBoYXZlX3JlZ3Nfb2ZfbW9kZVtpXSA9IHRydWU7CisgICAgICBwb2x5X3Vp bnQxNiBvbGRfc3ZlX3ZnID0gYWFyY2g2NF9zdmVfdmc7CisgICAgICBpZiAoIW5vZGUtPnNp bWRjbG9uZS0+c2ltZGxlbi5pc19jb25zdGFudCAoKSkKKwlhYXJjaDY0X3N2ZV92ZyA9IHBv bHlfdWludDE2ICgyLCAyKTsKKyAgICAgIHVuc2lnbmVkIGludCBudW1fenIgPSAwOworICAg ICAgdW5zaWduZWQgaW50IG51bV9wciA9IDA7CisgICAgICBpZiAoaXNfbWFzaykKKwl7CisJ ICB0eXBlID0gdHJ1dGhfdHlwZV9mb3IgKHR5cGUpOworCSAgbnVtX3ByID0gMTsKKwl9Cisg ICAgICBlbHNlCisJeworCSAgbnVtX3pyID0gMTsKKwkgIHRyZWUgYmFzZV90eXBlID0gVFJF RV9UWVBFICh0eXBlKTsKKwkgIGlmIChQT0lOVEVSX1RZUEVfUCAoYmFzZV90eXBlKSkKKwkg ICAgYmFzZV90eXBlID0gcG9pbnRlcl9zaXplZF9pbnRfbm9kZTsKKwkgIHBvbHlfaW50NjQg dmVjX3NpemUgPSB0cmVlX3RvX3BvbHlfaW50NjQgKFRZUEVfU0laRSAodHlwZSkpOworCSAg c2NhbGFyX21vZGUgYmFzZV9tb2RlID0gYXNfYSA8c2NhbGFyX21vZGU+IChUWVBFX01PREUg KGJhc2VfdHlwZSkpOworCSAgbWFjaGluZV9tb2RlIHZlY19tb2RlCisJICAgID0gYWFyY2g2 NF9zaW1kX2NvbnRhaW5lcl9tb2RlIChiYXNlX21vZGUsIHZlY19zaXplKTsKKwkgIHR5cGUg PSBidWlsZF92ZWN0b3JfdHlwZV9mb3JfbW9kZSAoYmFzZV90eXBlLCB2ZWNfbW9kZSk7CisJ fQorCisgICAgICBhYXJjaDY0X3N2ZTo6YWRkX3N2ZV90eXBlX2F0dHJpYnV0ZSAodHlwZSwg bnVtX3pyLCBudW1fcHIsIE5VTEwsIE5VTEwpOworICAgICAgY2xfdGFyZ2V0X29wdGlvbl9y ZXN0b3JlICgmZ2xvYmFsX29wdGlvbnMsICZnbG9iYWxfb3B0aW9uc19zZXQsICZjdXJfdGFy Z2V0KTsKKyAgICAgIGFhcmNoNjRfb3ZlcnJpZGVfb3B0aW9uc19pbnRlcm5hbCAoJmdsb2Jh bF9vcHRpb25zKTsKKyAgICAgIG1lbWNweSAoaGF2ZV9yZWdzX29mX21vZGUsIG1fb2xkX2hh dmVfcmVnc19vZl9tb2RlLAorCSAgICAgIHNpemVvZiAoaGF2ZV9yZWdzX29mX21vZGUpKTsK KyAgICAgIGFhcmNoNjRfc3ZlX3ZnID0gb2xkX3N2ZV92ZzsKKyAgICB9CisgIHJldHVybiB0 eXBlOworfQorCiAvKiBJbXBsZW1lbnQgVEFSR0VUX0NPTVBfVFlQRV9BVFRSSUJVVEVTICov CiAKIHN0YXRpYyBpbnQKQEAgLTI4MDQ4LDYgKzI4MTMwLDEwIEBAIGFhcmNoNjRfbGliZ2Nj X2Zsb2F0aW5nX21vZGVfc3VwcG9ydGVkX3AKICN1bmRlZiBUQVJHRVRfU0lNRF9DTE9ORV9V U0FCTEUKICNkZWZpbmUgVEFSR0VUX1NJTURfQ0xPTkVfVVNBQkxFIGFhcmNoNjRfc2ltZF9j bG9uZV91c2FibGUKIAorI3VuZGVmIFRBUkdFVF9TSU1EX0NMT05FX0FESlVTVF9SRVRfT1Jf UEFSQU0KKyNkZWZpbmUgVEFSR0VUX1NJTURfQ0xPTkVfQURKVVNUX1JFVF9PUl9QQVJBTSBc CisgIGFhcmNoNjRfc2ltZF9jbG9uZV9hZGp1c3RfcmV0X29yX3BhcmFtCisKICN1bmRlZiBU QVJHRVRfQ09NUF9UWVBFX0FUVFJJQlVURVMKICNkZWZpbmUgVEFSR0VUX0NPTVBfVFlQRV9B VFRSSUJVVEVTIGFhcmNoNjRfY29tcF90eXBlX2F0dHJpYnV0ZXMKIApkaWZmIC0tZ2l0IGEv Z2NjL2RvYy90bS50ZXhpIGIvZ2NjL2RvYy90bS50ZXhpCmluZGV4IGM2Yzg5MTk3MmQxZTU4 Y2QxNjNiMjU5YmE5NmE1OTlkNjIzMjY4NjUuLmVkMTIyNzEwMjczMDVhMDAxN2NiOWIyZmY4 MjFiYWQ0MDNjNTI4MzYgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvdG0udGV4aQorKysgYi9nY2Mv ZG9jL3RtLnRleGkKQEAgLTYzMDYsMTEgKzYzMDYsMTYgQEAgVGhpcyBob29rIHNob3VsZCBh ZGQgaW1wbGljaXQgQGNvZGV7YXR0cmlidXRlKHRhcmdldCgiLi4uIikpfSBhdHRyaWJ1dGUK IHRvIFNJTUQgY2xvbmUgQHZhcntub2RlfSBpZiBuZWVkZWQuCiBAZW5kIGRlZnR5cGVmbgog Ci1AZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gaW50IFRBUkdFVF9TSU1EX0NMT05FX1VTQUJM RSAoc3RydWN0IGNncmFwaF9ub2RlICpAdmFye30pCitAZGVmdHlwZWZuIHtUYXJnZXQgSG9v a30gaW50IFRBUkdFVF9TSU1EX0NMT05FX1VTQUJMRSAoc3RydWN0IGNncmFwaF9ub2RlICpA dmFye30sIEB2YXJ7bWFjaGluZV9tb2RlfSkKIFRoaXMgaG9vayBzaG91bGQgcmV0dXJuIC0x IGlmIFNJTUQgY2xvbmUgQHZhcntub2RlfSBzaG91bGRuJ3QgYmUgdXNlZAotaW4gdmVjdG9y aXplZCBsb29wcyBpbiBjdXJyZW50IGZ1bmN0aW9uLCBvciBub24tbmVnYXRpdmUgbnVtYmVy IGlmIGl0IGlzCi11c2FibGUuICBJbiB0aGF0IGNhc2UsIHRoZSBzbWFsbGVyIHRoZSBudW1i ZXIgaXMsIHRoZSBtb3JlIGRlc2lyYWJsZSBpdCBpcwotdG8gdXNlIGl0LgoraW4gdmVjdG9y aXplZCBsb29wcyBiZWluZyB2ZWN0b3JpemVkIHdpdGggbW9kZSBAdmFye219IGluIGN1cnJl bnQgZnVuY3Rpb24sIG9yCitub24tbmVnYXRpdmUgbnVtYmVyIGlmIGl0IGlzIHVzYWJsZS4g IEluIHRoYXQgY2FzZSwgdGhlIHNtYWxsZXIgdGhlIG51bWJlciBpcywKK3RoZSBtb3JlIGRl c2lyYWJsZSBpdCBpcyB0byB1c2UgaXQuCitAZW5kIGRlZnR5cGVmbgorCitAZGVmdHlwZWZu IHtUYXJnZXQgSG9va30gdHJlZSBUQVJHRVRfU0lNRF9DTE9ORV9BREpVU1RfUkVUX09SX1BB UkFNIChzdHJ1Y3QgY2dyYXBoX25vZGUgKkB2YXJ7fSwgQHZhcnt0cmVlfSwgQHZhcntib29s fSkKK0lmIGRlZmluZWQsIHRoaXMgaG9vayBzaG91bGQgYWRqdXN0IHRoZSB0eXBlIG9mIHRo ZSByZXR1cm4gb3IgcGFyYW1ldGVyCitAdmFye3R5cGV9IHRvIGJlIHVzZWQgYnkgdGhlIHNp bWQgY2xvbmUgQHZhcntub2RlfS4KIEBlbmQgZGVmdHlwZWZuCiAKIEBkZWZ0eXBlZm4ge1Rh cmdldCBIb29rfSBpbnQgVEFSR0VUX1NJTVRfVkYgKHZvaWQpCmRpZmYgLS1naXQgYS9nY2Mv ZG9jL3RtLnRleGkuaW4gYi9nY2MvZG9jL3RtLnRleGkuaW4KaW5kZXggNjEzYjI1MzQxNDk0 MTVmNDQyMTYzZDU5OTUwM2VmYWY0MjNiNjczYi4uZmQwZDJjOGQwZGNjMmZkMjQ5YjM0NzQ1 ZDc3NzQ5ZDk5YzQ5ZDEzZCAxMDA2NDQKLS0tIGEvZ2NjL2RvYy90bS50ZXhpLmluCisrKyBi L2djYy9kb2MvdG0udGV4aS5pbgpAQCAtNDIwNSw2ICs0MjA1LDggQEAgYWRkcmVzczsgIGJ1 dCBvZnRlbiBhIG1hY2hpbmUtZGVwZW5kZW50IHN0cmF0ZWd5IGNhbiBnZW5lcmF0ZSBiZXR0 ZXIgY29kZS4KIAogQGhvb2sgVEFSR0VUX1NJTURfQ0xPTkVfVVNBQkxFCiAKK0Bob29rIFRB UkdFVF9TSU1EX0NMT05FX0FESlVTVF9SRVRfT1JfUEFSQU0KKwogQGhvb2sgVEFSR0VUX1NJ TVRfVkYKIAogQGhvb2sgVEFSR0VUX09NUF9ERVZJQ0VfS0lORF9BUkNIX0lTQQpkaWZmIC0t Z2l0IGEvZ2NjL29tcC1zaW1kLWNsb25lLmNjIGIvZ2NjL29tcC1zaW1kLWNsb25lLmNjCmlu ZGV4IDQ4YjQ4MGU3NTU2ZDlhZDhlNTUwMmUxMGU1MTNlYzM2YjE3YjljYmIuLjQ4MDg2MDhi N2ExYzA2ODAyZWUyMzE0ODBjMjAwM2NmNDFjMTE3OTkgMTAwNjQ0Ci0tLSBhL2djYy9vbXAt c2ltZC1jbG9uZS5jYworKysgYi9nY2Mvb21wLXNpbWQtY2xvbmUuY2MKQEAgLTM3OCw4ICsz NzgsOSBAQCBzaW1kX2Nsb25lX2NsYXVzZXNfZXh0cmFjdCAoc3RydWN0IGNncmFwaF9ub2Rl ICpub2RlLCB0cmVlIGNsYXVzZXMsCiAJCSAgYXJnX3R5cGUgPSBTSU1EX0NMT05FX0FSR19U WVBFX0xJTkVBUl9WQVJJQUJMRV9TVEVQOwogCQljbG9uZV9pbmZvLT5hcmdzW2FyZ25vXS5h cmdfdHlwZSA9IGFyZ190eXBlOwogCQljbG9uZV9pbmZvLT5hcmdzW2FyZ25vXS5saW5lYXJf c3RlcCA9IHRyZWVfdG9fc2h3aSAoc3RlcCk7CisJCWludCBuYXJncyA9IGNsb25lX2luZm8t Pm5hcmdzOwogCQlnY2NfYXNzZXJ0IChjbG9uZV9pbmZvLT5hcmdzW2FyZ25vXS5saW5lYXJf c3RlcCA+PSAwCi0JCQkgICAgJiYgY2xvbmVfaW5mby0+YXJnc1thcmdub10ubGluZWFyX3N0 ZXAgPCBuKTsKKwkJCSAgICAmJiBjbG9uZV9pbmZvLT5hcmdzW2FyZ25vXS5saW5lYXJfc3Rl cCA8IG5hcmdzKTsKIAkgICAgICB9CiAJICAgIGVsc2UKIAkgICAgICB7CkBAIC01NDEsOSAr NTQyLDEyIEBAIHNpbWRfY2xvbmVfbWFuZ2xlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUs CiAgIHBwX3N0cmluZyAoJnBwLCAiX1pHViIpOwogICBwcF9jaGFyYWN0ZXIgKCZwcCwgdmVj c2l6ZV9tYW5nbGUpOwogICBwcF9jaGFyYWN0ZXIgKCZwcCwgbWFzayk7Ci0gIC8qIEZvciBu b3csIHNpbWRsZW4gaXMgYWx3YXlzIGNvbnN0YW50LCB3aGlsZSB2YXJpYWJsZSBzaW1kbGVu IHBwICduJy4gICovCi0gIHVuc2lnbmVkIGludCBsZW4gPSBzaW1kbGVuLnRvX2NvbnN0YW50 ICgpOwotICBwcF9kZWNpbWFsX2ludCAoJnBwLCAobGVuKSk7CisKKyAgdW5zaWduZWQgbG9u ZyBsb25nIGxlbiA9IDA7CisgIGlmIChzaW1kbGVuLmlzX2NvbnN0YW50ICgmbGVuKSkKKyAg ICBwcF9kZWNpbWFsX2ludCAoJnBwLCAoaW50KSAobGVuKSk7CisgIGVsc2UKKyAgICBwcF9j aGFyYWN0ZXIgKCZwcCwgJ3gnKTsKIAogICBmb3IgKG4gPSAwOyBuIDwgY2xvbmVfaW5mby0+ bmFyZ3M7ICsrbikKICAgICB7CkBAIC03MzYsNiArNzQwLDcgQEAgc2ltZF9jbG9uZV9hZGp1 c3RfcmV0dXJuX3R5cGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKICAgICAgIHQgPSBi dWlsZF9hcnJheV90eXBlX25lbHRzICh0LCBleGFjdF9kaXYgKG5vZGUtPnNpbWRjbG9uZS0+ c2ltZGxlbiwKIAkJCQkJCXZlY2xlbikpOwogICAgIH0KKyAgdCA9IHRhcmdldG0uc2ltZF9j bG9uZS5hZGp1c3RfcmV0X29yX3BhcmFtIChub2RlLCB0LCBmYWxzZSk7CiAgIFRSRUVfVFlQ RSAoVFJFRV9UWVBFIChmbmRlY2wpKSA9IHQ7CiAgIGlmICghbm9kZS0+ZGVmaW5pdGlvbikK ICAgICByZXR1cm4gTlVMTF9UUkVFOwpAQCAtNzQ4LDYgKzc1Myw3IEBAIHNpbWRfY2xvbmVf YWRqdXN0X3JldHVybl90eXBlIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiAKICAgdHJl ZSBhdHlwZSA9IGJ1aWxkX2FycmF5X3R5cGVfbmVsdHMgKG9yaWdfcmV0dHlwZSwKIAkJCQkg ICAgICAgbm9kZS0+c2ltZGNsb25lLT5zaW1kbGVuKTsKKyAgYXR5cGUgPSB0YXJnZXRtLnNp bWRfY2xvbmUuYWRqdXN0X3JldF9vcl9wYXJhbSAobm9kZSwgYXR5cGUsIGZhbHNlKTsKICAg aWYgKG1heWJlX25lICh2ZWNsZW4sIG5vZGUtPnNpbWRjbG9uZS0+c2ltZGxlbikpCiAgICAg cmV0dXJuIGJ1aWxkMSAoVklFV19DT05WRVJUX0VYUFIsIGF0eXBlLCB0KTsKIApAQCAtODA3 LDggKzgxMywxNCBAQCBzaW1kX2Nsb25lX2FkanVzdF9hcmd1bWVudF90eXBlcyAoc3RydWN0 IGNncmFwaF9ub2RlICpub2RlKQogICAgIHsKICAgICAgIGlwYV9hZGp1c3RlZF9wYXJhbSBh ZGo7CiAgICAgICBtZW1zZXQgKCZhZGosIDAsIHNpemVvZiAoYWRqKSk7Ci0gICAgICB0cmVl IHBhcm0gPSBhcmdzW2ldOwotICAgICAgdHJlZSBwYXJtX3R5cGUgPSBub2RlLT5kZWZpbml0 aW9uID8gVFJFRV9UWVBFIChwYXJtKSA6IHBhcm07CisgICAgICB0cmVlIHBhcm0gPSBOVUxM X1RSRUU7CisgICAgICB0cmVlIHBhcm1fdHlwZSA9IE5VTExfVFJFRTsKKyAgICAgIGlmKGkg PCBhcmdzLmxlbmd0aCgpKQorCXsKKwkgIHBhcm0gPSBhcmdzW2ldOworCSAgcGFybV90eXBl ID0gbm9kZS0+ZGVmaW5pdGlvbiA/IFRSRUVfVFlQRSAocGFybSkgOiBwYXJtOworCX0KKwog ICAgICAgYWRqLmJhc2VfaW5kZXggPSBpOwogICAgICAgYWRqLnByZXZfY2xvbmVfaW5kZXgg PSBpOwogCkBAIC04NzQsNiArODg2LDggQEAgc2ltZF9jbG9uZV9hZGp1c3RfYXJndW1lbnRf dHlwZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKIAkJCQkgICAgICAgPyBJREVOVElG SUVSX1BPSU5URVIgKERFQ0xfTkFNRSAocGFybSkpCiAJCQkJICAgICAgIDogTlVMTCwgcGFy bV90eXBlLCBzYy0+c2ltZGxlbik7CiAJfQorICAgICAgYWRqLnR5cGUgPSB0YXJnZXRtLnNp bWRfY2xvbmUuYWRqdXN0X3JldF9vcl9wYXJhbSAobm9kZSwgYWRqLnR5cGUsCisJCQkJCQkJ IGZhbHNlKTsKICAgICAgIHZlY19zYWZlX3B1c2ggKG5ld19wYXJhbXMsIGFkaik7CiAgICAg fQogCkBAIC05MDYsNiArOTIwLDggQEAgc2ltZF9jbG9uZV9hZGp1c3RfYXJndW1lbnRfdHlw ZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKIAlhZGoudHlwZSA9IGJ1aWxkX3ZlY3Rv cl90eXBlIChwb2ludGVyX3NpemVkX2ludF9ub2RlLCB2ZWNsZW4pOwogICAgICAgZWxzZQog CWFkai50eXBlID0gYnVpbGRfdmVjdG9yX3R5cGUgKGJhc2VfdHlwZSwgdmVjbGVuKTsKKyAg ICAgIGFkai50eXBlID0gdGFyZ2V0bS5zaW1kX2Nsb25lLmFkanVzdF9yZXRfb3JfcGFyYW0g KG5vZGUsIGFkai50eXBlLAorCQkJCQkJCSB0cnVlKTsKICAgICAgIHZlY19zYWZlX3B1c2gg KG5ld19wYXJhbXMsIGFkaik7CiAKICAgICAgIGsgPSB2ZWN0b3JfdW5yb2xsX2ZhY3RvciAo c2MtPnNpbWRsZW4sIHZlY2xlbik7CkBAIC05MzEsNiArOTQ3LDcgQEAgc2ltZF9jbG9uZV9h ZGp1c3RfYXJndW1lbnRfdHlwZXMgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSkKIAkgICAg c2MtPmFyZ3NbaV0uc2ltZF9hcnJheSA9IE5VTExfVFJFRTsKIAl9CiAgICAgICBzYy0+YXJn c1tpXS5vcmlnX3R5cGUgPSBiYXNlX3R5cGU7CisgICAgICBzYy0+YXJnc1tpXS52ZWN0b3Jf dHlwZSA9IGFkai50eXBlOwogICAgICAgc2MtPmFyZ3NbaV0uYXJnX3R5cGUgPSBTSU1EX0NM T05FX0FSR19UWVBFX01BU0s7CiAgICAgfQogCkBAIC0xNDg1LDggKzE1MDIsOCBAQCBzaW1k X2Nsb25lX2FkanVzdCAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQogCSBiZWxvdykuICAq LwogICAgICAgbG9vcCA9IGFsbG9jX2xvb3AgKCk7CiAgICAgICBjZnVuLT5oYXNfZm9yY2Vf dmVjdG9yaXplX2xvb3BzID0gdHJ1ZTsKLSAgICAgIC8qIEZvciBub3csIHNpbWxlbiBpcyBh bHdheXMgY29uc3RhbnQuICAqLwotICAgICAgbG9vcC0+c2FmZWxlbiA9IG5vZGUtPnNpbWRj bG9uZS0+c2ltZGxlbi50b19jb25zdGFudCAoKTsKKyAgICAgIC8qIFdlIGNhbiBhc3NlcnQg dGhhdCBzYWZlbGVuIGlzIHRoZSAnbWluaW11bScgc2ltZGxlbi4gICovCisgICAgICBsb29w LT5zYWZlbGVuID0gY29uc3RhbnRfbG93ZXJfYm91bmQgKG5vZGUtPnNpbWRjbG9uZS0+c2lt ZGxlbik7CiAgICAgICBsb29wLT5mb3JjZV92ZWN0b3JpemUgPSB0cnVlOwogICAgICAgbG9v cC0+aGVhZGVyID0gYm9keV9iYjsKICAgICB9CkBAIC0xNTQ2LDcgKzE1NjMsNyBAQCBzaW1k X2Nsb25lX2FkanVzdCAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQogCSAgbWFzayA9IGdp bXBsZV9hc3NpZ25fbGhzIChnKTsKIAkgIGcgPSBnaW1wbGVfYnVpbGRfYXNzaWduIChtYWtl X3NzYV9uYW1lIChUUkVFX1RZUEUgKG1hc2spKSwKIAkJCQkgICBCSVRfQU5EX0VYUFIsIG1h c2ssCi0JCQkJICAgYnVpbGRfaW50X2NzdCAoVFJFRV9UWVBFIChtYXNrKSwgMSkpOworCQkJ CSAgIGJ1aWxkX29uZV9jc3QgKFRSRUVfVFlQRSAobWFzaykpKTsKIAkgIGdzaV9pbnNlcnRf YWZ0ZXIgKCZnc2ksIGcsIEdTSV9DT05USU5VRV9MSU5LSU5HKTsKIAkgIG1hc2sgPSBnaW1w bGVfYXNzaWduX2xocyAoZyk7CiAJfQpkaWZmIC0tZ2l0IGEvZ2NjL3RhcmdldC5kZWYgYi9n Y2MvdGFyZ2V0LmRlZgppbmRleCBkYjhhZjBjYmU4MTYyNDUxM2YxMTRmYzliYmQ4YmU2MWQ4 NTVmNDA5Li5mZmExMmFhOTAyM2JiOGYyNmE2NDdhOTg0ODgwMGM3N2YzNGFmYzY3IDEwMDY0 NAotLS0gYS9nY2MvdGFyZ2V0LmRlZgorKysgYi9nY2MvdGFyZ2V0LmRlZgpAQCAtMTY0NSwx MCArMTY0NSwxOCBAQCB2b2lkLCAoc3RydWN0IGNncmFwaF9ub2RlICopLCBOVUxMKQogREVG SE9PSwogKHVzYWJsZSwKICJUaGlzIGhvb2sgc2hvdWxkIHJldHVybiAtMSBpZiBTSU1EIGNs b25lIEB2YXJ7bm9kZX0gc2hvdWxkbid0IGJlIHVzZWRcblwKLWluIHZlY3Rvcml6ZWQgbG9v cHMgaW4gY3VycmVudCBmdW5jdGlvbiwgb3Igbm9uLW5lZ2F0aXZlIG51bWJlciBpZiBpdCBp c1xuXAotdXNhYmxlLiAgSW4gdGhhdCBjYXNlLCB0aGUgc21hbGxlciB0aGUgbnVtYmVyIGlz LCB0aGUgbW9yZSBkZXNpcmFibGUgaXQgaXNcblwKLXRvIHVzZSBpdC4iLAotaW50LCAoc3Ry dWN0IGNncmFwaF9ub2RlICopLCBOVUxMKQoraW4gdmVjdG9yaXplZCBsb29wcyBiZWluZyB2 ZWN0b3JpemVkIHdpdGggbW9kZSBAdmFye219IGluIGN1cnJlbnQgZnVuY3Rpb24sIG9yXG5c Citub24tbmVnYXRpdmUgbnVtYmVyIGlmIGl0IGlzIHVzYWJsZS4gIEluIHRoYXQgY2FzZSwg dGhlIHNtYWxsZXIgdGhlIG51bWJlciBpcyxcblwKK3RoZSBtb3JlIGRlc2lyYWJsZSBpdCBp cyB0byB1c2UgaXQuIiwKK2ludCwgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqLCBtYWNoaW5lX21v ZGUpLCBOVUxMKQorCitERUZIT09LCisoYWRqdXN0X3JldF9vcl9wYXJhbSwKKyJJZiBkZWZp bmVkLCB0aGlzIGhvb2sgc2hvdWxkIGFkanVzdCB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIG9y IHBhcmFtZXRlclxuXAorQHZhcnt0eXBlfSB0byBiZSB1c2VkIGJ5IHRoZSBzaW1kIGNsb25l IEB2YXJ7bm9kZX0uIiwKK3RyZWUsIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgdHJlZSwgYm9v bCksCitkZWZhdWx0X3NpbWRfY2xvbmVfYWRqdXN0X3JldF9vcl9wYXJhbSkKKwogCiBIT09L X1ZFQ1RPUl9FTkQgKHNpbWRfY2xvbmUpCiAKZGlmZiAtLWdpdCBhL2djYy90YXJnaG9va3Mu aCBiL2djYy90YXJnaG9va3MuaAppbmRleCBhMWRmMjYwZjU0ODNkYzg0ZjE4ZDhmMTJjNTIw MjQ4NGEzMmQ1YmI3Li44NjBmYjhjY2JmMWFiMDBjNDNkYzRiNGQzMjgwOGMxZjQ4ODQwNmU0 IDEwMDY0NAotLS0gYS9nY2MvdGFyZ2hvb2tzLmgKKysrIGIvZ2NjL3Rhcmdob29rcy5oCkBA IC03Myw2ICs3Myw5IEBAIGV4dGVybiB2b2lkIGRlZmF1bHRfcHJpbnRfb3BlcmFuZCAoRklM RSAqLCBydHgsIGludCk7CiBleHRlcm4gdm9pZCBkZWZhdWx0X3ByaW50X29wZXJhbmRfYWRk cmVzcyAoRklMRSAqLCBtYWNoaW5lX21vZGUsIHJ0eCk7CiBleHRlcm4gYm9vbCBkZWZhdWx0 X3ByaW50X29wZXJhbmRfcHVuY3RfdmFsaWRfcCAodW5zaWduZWQgY2hhcik7CiBleHRlcm4g dHJlZSBkZWZhdWx0X21hbmdsZV9hc3NlbWJsZXJfbmFtZSAoY29uc3QgY2hhciAqKTsKK2V4 dGVybiB0cmVlIGRlZmF1bHRfc2ltZF9jbG9uZV9hZGp1c3RfcmV0X29yX3BhcmFtCisgIChz dHJ1Y3QgY2dyYXBoX25vZGUgKix0cmVlICwgYm9vbCk7CisKIAogZXh0ZXJuIG1hY2hpbmVf bW9kZSBkZWZhdWx0X3RyYW5zbGF0ZV9tb2RlX2F0dHJpYnV0ZSAobWFjaGluZV9tb2RlKTsK IGV4dGVybiBib29sIGRlZmF1bHRfc2NhbGFyX21vZGVfc3VwcG9ydGVkX3AgKHNjYWxhcl9t b2RlKTsKZGlmZiAtLWdpdCBhL2djYy90YXJnaG9va3MuY2MgYi9nY2MvdGFyZ2hvb2tzLmNj CmluZGV4IGZlMDExNjUyMWZlYWYzMjE4N2U3YmMxMTNiZjkzYjE4MDU4NTJjNzkuLjRlNTRj ZWIwMjk3ODI4Y2YxM2U0MThkZmExMTM2NTE2NzBhNmYxMTIgMTAwNjQ0Ci0tLSBhL2djYy90 YXJnaG9va3MuY2MKKysrIGIvZ2NjL3Rhcmdob29rcy5jYwpAQCAtMzk4LDYgKzM5OCwxNiBA QCBkZWZhdWx0X21hbmdsZV9hc3NlbWJsZXJfbmFtZSAoY29uc3QgY2hhciAqbmFtZSBBVFRS SUJVVEVfVU5VU0VEKQogICByZXR1cm4gZ2V0X2lkZW50aWZpZXIgKHN0cmlwcGVkKTsKIH0K IAorLyogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgVEFSR0VUX1NJTURfQ0xPTkVf QURKVVNUX1JFVF9PUl9QQVJBTS4gICovCisKK3RyZWUKK2RlZmF1bHRfc2ltZF9jbG9uZV9h ZGp1c3RfcmV0X29yX3BhcmFtIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUgQVRUUklCVVRF X1VOVVNFRCwKKwkJCQkJdHJlZSB0eXBlLAorCQkJCQlib29sIGlzX3JldHVybiBBVFRSSUJV VEVfVU5VU0VEKQoreworICByZXR1cm4gdHlwZTsKK30KKwogLyogVGhlIGRlZmF1bHQgaW1w bGVtZW50YXRpb24gb2YgVEFSR0VUX1RSQU5TTEFURV9NT0RFX0FUVFJJQlVURS4gICovCiAK IG1hY2hpbmVfbW9kZQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYyBiL2dj Yy90cmVlLXZlY3Qtc3RtdHMuY2MKaW5kZXggYzg1YjZiYWJjNGJjNWJjMzExMWVmMzI2ZGNj OGYzMmJiMjUzMzNmNi4uZGE2YWEzZjE5M2JkNTJhMWU0MGJiNmRiZTNkNDgzZjkyZWNkNzg5 NiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYworKysgYi9nY2MvdHJlZS12 ZWN0LXN0bXRzLmNjCkBAIC0yNzU5LDcgKzI3NTksOCBAQCB2ZWN0X2J1aWxkX2FsbF9vbmVz X21hc2sgKHZlY19pbmZvICp2aW5mbywKIHsKICAgaWYgKFRSRUVfQ09ERSAobWFza3R5cGUp ID09IElOVEVHRVJfVFlQRSkKICAgICByZXR1cm4gYnVpbGRfaW50X2NzdCAobWFza3R5cGUs IC0xKTsKLSAgZWxzZSBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKG1hc2t0eXBlKSkgPT0g SU5URUdFUl9UWVBFKQorICBlbHNlIGlmIChWRUNUT1JfQk9PTEVBTl9UWVBFX1AgKG1hc2t0 eXBlKQorCSAgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFIChtYXNrdHlwZSkpID09IElOVEVH RVJfVFlQRSkKICAgICB7CiAgICAgICB0cmVlIG1hc2sgPSBidWlsZF9pbnRfY3N0IChUUkVF X1RZUEUgKG1hc2t0eXBlKSwgLTEpOwogICAgICAgbWFzayA9IGJ1aWxkX3ZlY3Rvcl9mcm9t X3ZhbCAobWFza3R5cGUsIG1hc2spOwpAQCAtNDEzNiwxNCArNDEzNyw2IEBAIHZlY3Rvcml6 YWJsZV9zaW1kX2Nsb25lX2NhbGwgKHZlY19pbmZvICp2aW5mbywgc3RtdF92ZWNfaW5mbyBz dG10X2luZm8sCiAgICAgfQogCiAgIHBvbHlfdWludDY0IHZmID0gTE9PUF9WSU5GT19WRUNU X0ZBQ1RPUiAobG9vcF92aW5mbyk7Ci0gIGlmICghdmYuaXNfY29uc3RhbnQgKCkpCi0gICAg ewotICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQotCWR1bXBfcHJpbnRmX2xvYyAoTVNH X01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24sCi0JCQkgIm5vdCBjb25zaWRl cmluZyBTSU1EIGNsb25lczsgbm90IHlldCBzdXBwb3J0ZWQiCi0JCQkgIiBmb3IgdmFyaWFi bGUtd2lkdGggdmVjdG9ycy5cbiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAog ICB1bnNpZ25lZCBpbnQgYmFkbmVzcyA9IDA7CiAgIHN0cnVjdCBjZ3JhcGhfbm9kZSAqYmVz dG4gPSBOVUxMOwpAQCAtNDE1NiwyMCArNDE0OSwxNyBAQCB2ZWN0b3JpemFibGVfc2ltZF9j bG9uZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAog CXVuc2lnbmVkIGludCB0aGlzX2JhZG5lc3MgPSAwOwogCXVuc2lnbmVkIGludCBudW1fY2Fs bHM7CiAJaWYgKCFjb25zdGFudF9tdWx0aXBsZV9wICh2Ziwgbi0+c2ltZGNsb25lLT5zaW1k bGVuLCAmbnVtX2NhbGxzKQotCSAgICB8fCBuLT5zaW1kY2xvbmUtPm5hcmdzICE9IG5hcmdz KQorCSAgICB8fCBuLT5zaW1kY2xvbmUtPm5hcmdzICE9IChuYXJncyArIG4tPnNpbWRjbG9u ZS0+aW5icmFuY2gpKQogCSAgY29udGludWU7CiAJaWYgKG51bV9jYWxscyAhPSAxKQogCSAg dGhpc19iYWRuZXNzICs9IGV4YWN0X2xvZzIgKG51bV9jYWxscykgKiA0MDk2OwogCWlmIChu LT5zaW1kY2xvbmUtPmluYnJhbmNoKQogCSAgdGhpc19iYWRuZXNzICs9IDgxOTI7Ci0JaW50 IHRhcmdldF9iYWRuZXNzID0gdGFyZ2V0bS5zaW1kX2Nsb25lLnVzYWJsZSAobik7CisJaW50 IHRhcmdldF9iYWRuZXNzID0gdGFyZ2V0bS5zaW1kX2Nsb25lLnVzYWJsZSAobiwgdmluZm8t PnZlY3Rvcl9tb2RlKTsKIAlpZiAodGFyZ2V0X2JhZG5lc3MgPCAwKQogCSAgY29udGludWU7 CiAJdGhpc19iYWRuZXNzICs9IHRhcmdldF9iYWRuZXNzICogNTEyOwotCS8qIEZPUk5PVzog SGF2ZSB0byBhZGQgY29kZSB0byBhZGQgdGhlIG1hc2sgYXJndW1lbnQuICAqLwotCWlmIChu LT5zaW1kY2xvbmUtPmluYnJhbmNoKQotCSAgY29udGludWU7Ci0JZm9yIChpID0gMDsgaSA8 IG5hcmdzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IG4tPnNpbWRjbG9uZS0+bmFyZ3M7IGkr KykKIAkgIHsKIAkgICAgc3dpdGNoIChuLT5zaW1kY2xvbmUtPmFyZ3NbaV0uYXJnX3R5cGUp CiAJICAgICAgewpAQCAtNDIwNiwxNiArNDE5NiwyMiBAQCB2ZWN0b3JpemFibGVfc2ltZF9j bG9uZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAog CQlpID0gLTE7CiAJCWJyZWFrOwogCSAgICAgIGNhc2UgU0lNRF9DTE9ORV9BUkdfVFlQRV9N QVNLOgotCQlnY2NfdW5yZWFjaGFibGUgKCk7CisJCS8qIFBlbmFsaXplIHVzaW5nIGEgcHJl ZGljYXRlZCBTSU1EIGNsb25lIGluIGEgbm9uLW1hc2tlZCBsb29wLAorCQkgICBhcyB3ZSdk IGhhdmUgdG8gbmVlZGxlc3NseSBjb25zdHJ1Y3QgYW4gYWxsLXRydWUgbWFzay4gICovCisJ CWlmICghbG9vcF92aW5mbyB8fCAhTE9PUF9WSU5GT19GVUxMWV9NQVNLRURfUCAobG9vcF92 aW5mbykpCisJCSAgdGhpc19iYWRuZXNzICs9IDY0OworCQlicmVhazsKIAkgICAgICB9CiAJ ICAgIGlmIChpID09IChzaXplX3QpIC0xKQogCSAgICAgIGJyZWFrOwotCSAgICBpZiAobi0+ c2ltZGNsb25lLT5hcmdzW2ldLmFsaWdubWVudCA+IGFyZ2luZm9baV0uYWxpZ24pCisJICAg IGlmIChpIDwgbmFyZ3MKKwkJJiYgbi0+c2ltZGNsb25lLT5hcmdzW2ldLmFsaWdubWVudCA+ IGFyZ2luZm9baV0uYWxpZ24pCiAJICAgICAgewogCQlpID0gLTE7CiAJCWJyZWFrOwogCSAg ICAgIH0KLQkgICAgaWYgKGFyZ2luZm9baV0uYWxpZ24pCisJICAgIGlmIChpIDwgbmFyZ3MK KwkJJiYgYXJnaW5mb1tpXS5hbGlnbikKIAkgICAgICB0aGlzX2JhZG5lc3MgKz0gKGV4YWN0 X2xvZzIgKGFyZ2luZm9baV0uYWxpZ24pCiAJCQkgICAgICAgLSBleGFjdF9sb2cyIChuLT5z aW1kY2xvbmUtPmFyZ3NbaV0uYWxpZ25tZW50KSk7CiAJICB9CkBAIC00MjQ4LDYgKzQyNDQs NyBAQCB2ZWN0b3JpemFibGVfc2ltZF9jbG9uZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sIHN0 bXRfdmVjX2luZm8gc3RtdF9pbmZvLAogICBmbmRlY2wgPSBiZXN0bi0+ZGVjbDsKICAgbnVu aXRzID0gYmVzdG4tPnNpbWRjbG9uZS0+c2ltZGxlbjsKICAgbmNvcGllcyA9IHZlY3Rvcl91 bnJvbGxfZmFjdG9yICh2ZiwgbnVuaXRzKTsKKyAgbmFyZ3MgPSBiZXN0bi0+c2ltZGNsb25l LT5uYXJnczsKIAogICAvKiBJZiB0aGUgZnVuY3Rpb24gaXNuJ3QgY29uc3QsIG9ubHkgYWxs b3cgaXQgaW4gc2ltZCBsb29wcyB3aGVyZSB1c2VyCiAgICAgIGhhcyBhc3NlcnRlZCB0aGF0 IGF0IGxlYXN0IG51bml0cyBjb25zZWN1dGl2ZSBpdGVyYXRpb25zIGNhbiBiZQpAQCAtNDMz MSwxMSArNDMyOCw0NSBAQCB2ZWN0b3JpemFibGVfc2ltZF9jbG9uZV9jYWxsICh2ZWNfaW5m byAqdmluZm8sIHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLAogCiAgICAgICBmb3IgKGkgPSAw OyBpIDwgbmFyZ3M7IGkrKykKIAl7Ci0JICB1bnNpZ25lZCBpbnQgaywgbCwgbSwgbzsKKwkg IHVuc2lnbmVkIGxvbmcgbG9uZyBrLCBsLCBtLCBvOwogCSAgdHJlZSBhdHlwZTsKLQkgIG9w ID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10LCBpKTsKKwkgIGlmIChpIDwgZ2ltcGxlX2NhbGxf bnVtX2FyZ3MgKHN0bXQpKQorCSAgICBvcCA9IGdpbXBsZV9jYWxsX2FyZyAoc3RtdCwgaSk7 CisJICBlbHNlCisJICAgIG9wID0gTlVMTF9UUkVFOworCiAJICBzd2l0Y2ggKGJlc3RuLT5z aW1kY2xvbmUtPmFyZ3NbaV0uYXJnX3R5cGUpCiAJICAgIHsKKwkgICAgY2FzZSBTSU1EX0NM T05FX0FSR19UWVBFX01BU0s6CisJCXsKKwkJICAgIHRyZWUgbWFzazsKKwkJICAgIGF0eXBl ID0gYmVzdG4tPnNpbWRjbG9uZS0+YXJnc1tpXS52ZWN0b3JfdHlwZTsKKwkJICAgIGlmIChs b29wX3ZpbmZvICYmIExPT1BfVklORk9fRlVMTFlfTUFTS0VEX1AgKGxvb3BfdmluZm8pKQor CQkgICAgICB7CisJCQl2ZWNfbG9vcF9tYXNrcyAqbG9vcF9tYXNrcworCQkJICA9ICZMT09Q X1ZJTkZPX01BU0tTIChsb29wX3ZpbmZvKTsKKwkJCW1hc2sgPSB2ZWN0X2dldF9sb29wX21h c2sgKGdzaSwgbG9vcF9tYXNrcywgbmNvcGllcywKKwkJCQkJCSAgIHZlY3R5cGUsIGopOwor CQkgICAgICB9CisJCSAgICBlbHNlCisJCSAgICAgIHsKKwkJCXRyZWUgbWFza190eXBlID0g YmVzdG4tPnNpbWRjbG9uZS0+YXJnc1tpXS52ZWN0b3JfdHlwZTsKKwkJCW1hc2sKKwkJCSAg PSB2ZWN0X2J1aWxkX2FsbF9vbmVzX21hc2sgKHZpbmZvLCBzdG10X2luZm8sCisJCQkJCQkg ICAgICBtYXNrX3R5cGUpOworCQkgICAgICB9CisJCSAgICBpZiAoIXVzZWxlc3NfdHlwZV9j b252ZXJzaW9uX3AgKFRSRUVfVFlQRSAobWFzayksIGF0eXBlKSkKKwkJICAgICAgeworCQkJ bWFzayA9IGJ1aWxkMSAoVklFV19DT05WRVJUX0VYUFIsIGF0eXBlLCBtYXNrKTsKKwkJCWdh c3NpZ24gKm5ld19zdG10CisJCQkgID0gZ2ltcGxlX2J1aWxkX2Fzc2lnbiAobWFrZV9zc2Ff bmFtZSAoYXR5cGUpLCBtYXNrKTsKKwkJCXZlY3RfZmluaXNoX3N0bXRfZ2VuZXJhdGlvbiAo dmluZm8sIHN0bXRfaW5mbywKKwkJCQkJCSAgICAgbmV3X3N0bXQsIGdzaSk7CisJCQltYXNr ID0gZ2ltcGxlX2Fzc2lnbl9saHMgKG5ld19zdG10KTsKKwkJICAgICAgfQorCQkgICAgdmFy Z3Muc2FmZV9wdXNoIChtYXNrKTsKKwkJfQorCSAgICAgIGJyZWFrOwogCSAgICBjYXNlIFNJ TURfQ0xPTkVfQVJHX1RZUEVfVkVDVE9SOgogCSAgICAgIGF0eXBlID0gYmVzdG4tPnNpbWRj bG9uZS0+YXJnc1tpXS52ZWN0b3JfdHlwZTsKIAkgICAgICBvID0gdmVjdG9yX3Vucm9sbF9m YWN0b3IgKG51bml0cywK --------------LgYxy6kaJPEhrOvu00vMbiMz--