Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1snJhT-002dY6-C6 for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Sep 2024 15:19:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1snJhR-00FbNq-7u for pgsql-hackers@arkaria.postgresql.org; Sun, 08 Sep 2024 15:19:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1snJhQ-00FbNh-Hl for pgsql-hackers@lists.postgresql.org; Sun, 08 Sep 2024 15:19:36 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1snJhG-0009wB-Ta for pgsql-hackers@postgresql.org; Sun, 08 Sep 2024 15:19:35 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-a8d0d82e76aso140427466b.3 for ; Sun, 08 Sep 2024 08:19:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1725808766; x=1726413566; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Jh3y87kDuN+yfusqQolN0ekdGW6IVOgrjgDL9/3K4TM=; b=BvTFu4ku8me7dySSok5aZxwYwGbvNtBBOjQiwFR/6Dr6byW9wIDygVMVYdTyIeaaov kEhaVhMGa461uZrQab3rM6zUdaavm/DSrI+lZV25WgHcOyZFejrYbIlKQZ+LV5gcOeg/ k1Np3hQp8V48U4ToaqXmID/x90AQn1a1n3G/belc9/7zfqze2wlMBubAdcmxiGFk0vyU I/sD2g9y86YbSImG0Wvj36Dd+uPLqCQGOJo3AO4U9Xexdm51eXqkok4/ZvMkyIr2814J 8e6RxT7b8A3GEzAM/k14fm82utTUOTkQwNiAYzBYLqqHawXHf+2wfrQbqwEx+nGcpFJH +aZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725808766; x=1726413566; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Jh3y87kDuN+yfusqQolN0ekdGW6IVOgrjgDL9/3K4TM=; b=hE2PzDhvp+wLLf46HwuQqoow25PnIJqg5A6JyVoC40nI3dKvpTXCX9/TQEAofExQGG O1DLPvklIw2R/bJPE5ZZJhFGsJUnF9fg6JjQxsj6UgRE8J+dUOuh3RdqrTnk8ytXRGDh WKJljfjha4hhULGcOlbuP8T+1J9S+ERGsEbhx9R+tIjr1KHmcA/WXZoTuzpBtnw61Uo0 LlBqs4VsOSuf+LMOd86UOee8gLK8/zpqSoRSUKU+aAjfQ9Zif8dex+8oRwGtDvwQ7798 Eo/RmlZybdfa+DOpSWAyD6/GJe//Iijml8/l8+fpfFg9f3JmTYGHQ+x5iJvhIjMtkwbf Ktrw== X-Gm-Message-State: AOJu0Yw4x18hBeAEgNt/tNe3uareKWvgZCF6cWyM6rDvKpIwMFWAUJ3I FK4SQP6pKzzgYXQ/nr5qDfl+nknPcPBSQbSeUoPjsRmnJCQ5dlrhB8JiHLcHml6khZz6/uP02CJ x7LM8hC/ncwkXhl1SdChcm5lGlPA= X-Google-Smtp-Source: AGHT+IEYk2NjlmrwhWiTwHOjKLOUUZitBQYe7l4Art937svHQAufyd6pr/NMyJAPtLwVu9Ufrzo30kDIF8bdMilpFGs= X-Received: by 2002:a17:907:2cc3:b0:a86:68a1:6a08 with SMTP id a640c23a62f3a-a8d1c4d4dfemr678468366b.29.1725808765289; Sun, 08 Sep 2024 08:19:25 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Michail Nikolaev Date: Sun, 8 Sep 2024 17:18:00 +0200 Message-ID: Subject: Re: Revisiting {CREATE INDEX, REINDEX} CONCURRENTLY improvements To: Matthias van de Meent Cc: PostgreSQL Hackers , Andrey Borodin , Melanie Plageman Content-Type: multipart/mixed; boundary="00000000000067ee6706219d2a49" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000067ee6706219d2a49 Content-Type: multipart/alternative; boundary="00000000000067ee6606219d2a47" --00000000000067ee6606219d2a47 Content-Type: text/plain; charset="UTF-8" Hello, Matthias! >> - I notice you've added a new argument to >> heapam_index_build_range_scan. I think this could just as well be >> implemented by reading the indexInfo->ii_Concurrent field, as the >> values should be equivalent, right? > Not always; currently, it is set by ResetSnapshotsAllowed[5]. > We fall back to regular index build if there is a predicate or expression in the index (which should be considered "safe" according to [6]). > However, we may remove this check later. > Additionally, there is no sense in resetting the snapshot if we already have an xmin assigned to the backend for some reason. I realized you were right. It's always possible to reset snapshots for concurrent index building without any limitations related to predicates or expressions. Additionally, the PROC_IN_SAFE_IC flag is no longer necessary since snapshots are rotating quickly, and it's possible to wait for them without requiring any special exceptions for CREATE/REINDEX INDEX CONCURRENTLY. Currently, it looks like this [1]. I've also attached a single large patch just for the case. I plan to restructure the patch into the following set: * Introduce catalogXmin as a separate value to calculate the horizon for the catalog. * Add the STIR access method. * Modify concurrent build/reindex to use an aux-index approach without snapshot rotation. * Add support for snapshot rotation for non-parallel and non-unique cases. * Extend support for snapshot rotation in parallel index builds. * Implement snapshot rotation support for unique indexes. Best regards, Mikhail [1]: https://github.com/postgres/postgres/compare/master...michail-nikolaev:postgres:new_index_concurrently_approach_rebased?expand=1 > --00000000000067ee6606219d2a47 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello, Matthias!

>> - I notice you've a= dded a new argument to
>> heapam_index_build_range_scan. I think t= his could just as well be
>> implemented by reading the indexInfo-= >ii_Concurrent field, as the
>> values should be equivalent, ri= ght?

> Not always; currently, it is set by ResetSnapshotsA= llowed[5].
>=C2=A0We fall back to regular index build if there is a p= redicate or expression in the index (which should be considered "safe&= quot; according to [6]).
>=C2=A0However, we may remove this check lat= er.
>=C2=A0Additionally, there is no sense in resetting the snapshot = if we already have an xmin assigned to the backend for some reason.

I realized you were right. It's always possible t= o reset snapshots for concurrent index building without any limitations rel= ated to predicates or expressions.
Additionally, the PROC_IN_SAFE= _IC flag is no longer necessary since snapshots are rotating quickly, and i= t's possible to wait for them without requiring any special exceptions = for CREATE/REINDEX INDEX CONCURRENTLY.

Currently, it looks like this= [1]. I've also attached a single large patch just=C2=A0for the=C2=A0ca= se.

I plan to restructure the patch into the following set:

*= Introduce catalogXmin as a separate value to calculate the horizon for the= catalog.
* Add the STIR access method.
* Modify concurrent build/rei= ndex to use an aux-index approach without snapshot rotation.
* Add suppo= rt for snapshot rotation for non-parallel and non-unique cases.
* Extend= support for snapshot rotation in parallel index builds.
* Implement sna= pshot rotation support for unique indexes.

Best regards,
M= ikhail

--00000000000067ee6606219d2a47-- --00000000000067ee6706219d2a49 Content-Type: text/x-patch; charset="US-ASCII"; name="create_index_concurrently_with_aux_index_or_rotated_snapshots.patch" Content-Disposition: attachment; filename="create_index_concurrently_with_aux_index_or_rotated_snapshots.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m0tlklan0 U3ViamVjdDogW1BBVENIXSBhIGxvdCBvZiByZWZhY3RvcmluZwpFbnN1cmUgdGhlIGNvcnJlY3Qg ZGV0ZXJtaW5hdGlvbiBvZiBpbmRleCBzYWZldHkgdG8gYmUgdXNlZCB3aXRoIHNldF9pbmRleHNh ZmVfcHJvY2ZsYWdzIGR1cmluZyBSRUlOREVYIENPTkNVUlJFTlRMWQpSZXZlcnQgIlJldmVydCAi YmFja2VuZF9jYXRhbG9nX3htaW4gaW4gcGdfc3RhdF9hY3Rpdml0eSIiCnJldmVydCB0aGUgcmV2 ZXJ0IG9mIGNhdGFsb2dYbWluCmZpeCByZXNldHRpbmcgc25hcHNob3QgZHVyaW5nIGhlYXBhbV9p bmRleF9idWlsZF9yYW5nZV9zY2FuIChzbmFwc2hvdCBpcyByZXNldCBiZXR3ZWVuIHBhZ2VzKQph cHBseSB2My0wMDAyLU1vZGlmeS10aGUtaW5mZXJfYXJiaXRlcl9pbmRleGVzLWZ1bmN0aW9uLXRv LWNvbnMucGF0Y2ggZm9yIHRlc3Qgc3RhYmlsaXR5CmZpeCB1bmlxdWUgY2hlY2sgZm9yIGJ1aWxk aW5nIHVuaXF1ZSBpbmRleGVzCnN1cHBvcnQgZm9yIHVuaXF1ZSBpbmRleGVzCnJldmVydCBUaGVy ZUFyZU5vUHJpb3JSZWdpc3RlcmVkU25hcHNob3RzIGNoYW5nZXMKcmV2ZXJ0IFRoZXJlQXJlTm9Q cmlvclJlZ2lzdGVyZWRTbmFwc2hvdHMgY2hhbmdlcwpkbyBub3QgaG9sZCB4bWluIHdoaWxlIGlu c2VydGluZyB0byB0aGUgaW5kZXgKcmVuYW1lIGphbSB0byBzdGlyCmRlbGV0ZSBpaV9BdXhpbGlh cnkKUmV2ZXJ0ICJpbnRyb2R1Y2UgUFJPQy0+Y2F0YWxvZ1htaW4iClJldmVydCAiYmFja2VuZF9j YXRhbG9nX3htaW4gaW4gcGdfc3RhdF9hY3Rpdml0eSIKc29tZSBmaXhlcyBmb3IgamFtCmZldyB0 dW5lcwpiYWNrZW5kX2NhdGFsb2dfeG1pbiBpbiBwZ19zdGF0X2FjdGl2aXR5CmRpc2FibGUgc25h cHNob3QgcmVzZXQgZm9yIHVuaXF1ZSBpbmRleGVzCmp1c3QgYWNjZXNzIG1ldGhvZCB0byB1c2Ug YXMgaW5kZXggZm9yIHZhbGlkYXRpb24Kc3VwcG9ydCBmb3IgcGFyYWxsZWwgYnVpbGRpbmcgd2l0 aCBzbmFwc2hvdCByZXNldApyZXNldHRpbmcgc25hcHNob3QgZHVyaW5nIGhlYXAgc2NhbiBpbiB0 aGUgY2FzZSBvZiBzZXJpYWwgaW5kZXggYnVpbGQKcmVzZXR0aW5nIHNuYXBzaG90IGR1cmluZyB2 YWxpZGF0ZV9pbmRleAppbnRyb2R1Y2UgUFJPQy0+Y2F0YWxvZ1htaW4KY3JlYXRlIGluZGV4IGNv bmN1cnJlbnRseSB1c2luZyBhdXhpbGlhcnkgaW5kZXgKLS0tCkluZGV4OiBzcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0 ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRG LTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwkocmV2aXNpb24gMmI1 ZjU3OTc3ZjZkMTY3OTYxMjFkNzk2ODM1YzQ4ZTQyNDFiNGRhMSkKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwkocmV2aXNpb24gM2RlYTcyYjYyYWRjODgwNjkx N2RjNDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTQxLDEwICs0MSwxMiBAQAogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmcGFnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcHJlZGljYXRlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9wcm9jYXJyYXkuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorI2luY2x1ZGUgInV0 aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiBzdGF0aWMgdm9pZCByZWZvcm1fYW5kX3Jld3JpdGVf dHVwbGUoSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJCQkJIFJlbGF0aW9uIE9sZEhlYXAsIFJlbGF0 aW9uIE5ld0hlYXAsCkBAIC0xMTkxLDExICsxMTkzLDExIEBACiAJRXhwckNvbnRleHQgKmVjb250 ZXh0OwogCVNuYXBzaG90CXNuYXBzaG90OwogCWJvb2wJCW5lZWRfdW5yZWdpc3Rlcl9zbmFwc2hv dCA9IGZhbHNlOworCWJvb2wJCXBvcF9hY3RpdmVfc25hcHNob3QgPSBmYWxzZTsKIAlUcmFuc2Fj dGlvbklkIE9sZGVzdFhtaW47CiAJQmxvY2tOdW1iZXIgcHJldmlvdXNfYmxrbm8gPSBJbnZhbGlk QmxvY2tOdW1iZXI7CiAJQmxvY2tOdW1iZXIgcm9vdF9ibGtubyA9IEludmFsaWRCbG9ja051bWJl cjsKIAlPZmZzZXROdW1iZXIgcm9vdF9vZmZzZXRzW01heEhlYXBUdXBsZXNQZXJQYWdlXTsKLQog CS8qCiAJICogc2FuaXR5IGNoZWNrcwogCSAqLwpAQCAtMTIxMyw2ICsxMjE1LDggQEAKIAkgKiBv bmx5IG9uZSBvZiB0aG9zZSBpcyByZXF1ZXN0ZWQuCiAJICovCiAJQXNzZXJ0KCEoYW55dmlzaWJs ZSAmJiBjaGVja2luZ191bmlxdWVuZXNzKSk7CisJQXNzZXJ0KCEoYW55dmlzaWJsZSAmJiBpbmRl eEluZm8tPmlpX0NvbmN1cnJlbnQpKTsKKwlBc3NlcnQoIWluZGV4SW5mby0+aWlfQ29uY3VycmVu dCB8fCAhSGF2ZVJlZ2lzdGVyZWRPckFjdGl2ZVNuYXBzaG90KCkgfHwgc2Nhbik7CiAKIAkvKgog CSAqIE5lZWQgYW4gRVN0YXRlIGZvciBldmFsdWF0aW9uIG9mIGluZGV4IGV4cHJlc3Npb25zIGFu ZCBwYXJ0aWFsLWluZGV4CkBAIC0xMjUyLDE3ICsxMjU2LDIyIEBACiAJCWlmICghVHJhbnNhY3Rp b25JZElzVmFsaWQoT2xkZXN0WG1pbikpCiAJCXsKIAkJCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFw c2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCQkJbmVlZF91bnJlZ2lzdGVyX3NuYXBz aG90ID0gdHJ1ZTsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChzbmFwc2hvdCk7CisJCQluZWVkX3Vu cmVnaXN0ZXJfc25hcHNob3QgPSBwb3BfYWN0aXZlX3NuYXBzaG90ID0gIWluZGV4SW5mby0+aWlf Q29uY3VycmVudDsKIAkJfQogCQllbHNlCisJCXsKKwkJCUFzc2VydCghaW5kZXhJbmZvLT5paV9D b25jdXJyZW50KTsKIAkJCXNuYXBzaG90ID0gU25hcHNob3RBbnk7CisJCX0KIAogCQlzY2FuID0g dGFibGVfYmVnaW5zY2FuX3N0cmF0KGhlYXBSZWxhdGlvbiwJLyogcmVsYXRpb24gKi8KIAkJCQkJ CQkJCSBzbmFwc2hvdCwJLyogc25hcHNob3QgKi8KIAkJCQkJCQkJCSAwLCAvKiBudW1iZXIgb2Yg a2V5cyAqLwogCQkJCQkJCQkJIE5VTEwsCS8qIHNjYW4ga2V5ICovCiAJCQkJCQkJCQkgdHJ1ZSwJ LyogYnVmZmVyIGFjY2VzcyBzdHJhdGVneSBPSyAqLwotCQkJCQkJCQkJIGFsbG93X3N5bmMpOwkv KiBzeW5jc2NhbiBPSz8gKi8KKwkJCQkJCQkJCSBhbGxvd19zeW5jLAkvKiBzeW5jc2NhbiBPSz8g Ki8KKwkJCQkJCQkJCSBpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQpOwogCX0KIAllbHNlCiAJewpA QCAtMTcyNiw4ICsxNzM1LDEyIEBACiAJdGFibGVfZW5kc2NhbihzY2FuKTsKIAogCS8qIHdlIGNh biBub3cgZm9yZ2V0IG91ciBzbmFwc2hvdCwgaWYgc2V0IGFuZCByZWdpc3RlcmVkIGJ5IHVzICov CisJaWYgKHBvcF9hY3RpdmVfc25hcHNob3QpCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJaWYg KG5lZWRfdW5yZWdpc3Rlcl9zbmFwc2hvdCkKIAkJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90 KTsKKwlpZiAoaW5kZXhJbmZvLT5paV9Db25jdXJyZW50ICYmICFoc2NhbikKKwkJQXNzZXJ0KCFU cmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKIAogCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3Qoc2xvdCk7CiAKQEAgLTE3NDAsMjQ1ICsxNzUzLDIwNiBAQAogCXJldHVybiBy ZWx0dXBsZXM7CiB9CiAKLXN0YXRpYyB2b2lkCi1oZWFwYW1faW5kZXhfdmFsaWRhdGVfc2NhbihS ZWxhdGlvbiBoZWFwUmVsYXRpb24sCi0JCQkJCQkgICBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAot CQkJCQkJICAgSW5kZXhJbmZvICppbmRleEluZm8sCitzdGF0aWMgVHJhbnNhY3Rpb25JZAoraGVh cGFtX2luZGV4X3ZhbGlkYXRlX3NjYW4oUmVsYXRpb24gdGFibGVfcmVsLAorCQkJCQkJICAgUmVs YXRpb24gaW5kZXhfcmVsLAorCQkJCQkJICAgUmVsYXRpb24gIGF1eF9pbmRleF9yZWwsCisJCQkJ CQkgICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleF9pbmZvLAorCQkJCQkJICAgc3RydWN0IEluZGV4 SW5mbyAqYXV4X2luZGV4X2luZm8sCiAJCQkJCQkgICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJ CSAgIFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUpCisJCQkJCQkgICBzdHJ1Y3QgVmFsaWRhdGVJ bmRleFN0YXRlICpzdGF0ZSwKKwkJCQkJCSAgIHN0cnVjdCBWYWxpZGF0ZUluZGV4U3RhdGUgKmF1 eF9zdGF0ZSkKIHsKLQlUYWJsZVNjYW5EZXNjIHNjYW47Ci0JSGVhcFNjYW5EZXNjIGhzY2FuOwot CUhlYXBUdXBsZQloZWFwVHVwbGU7CisJSW5kZXhGZXRjaFRhYmxlRGF0YSAqZmV0Y2g7CisJVHJh bnNhY3Rpb25JZCBsaW1pdFhtaW47CisKIAlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsK IAlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwotCUV4cHJTdGF0ZSAgKnByZWRpY2F0ZTsK LQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlFU3RhdGUJICAgKmVzdGF0ZTsKLQlFeHByQ29udGV4 dCAqZWNvbnRleHQ7Ci0JQmxvY2tOdW1iZXIgcm9vdF9ibGtubyA9IEludmFsaWRCbG9ja051bWJl cjsKLQlPZmZzZXROdW1iZXIgcm9vdF9vZmZzZXRzW01heEhlYXBUdXBsZXNQZXJQYWdlXTsKLQli b29sCQlpbl9pbmRleFtNYXhIZWFwVHVwbGVzUGVyUGFnZV07Ci0JQmxvY2tOdW1iZXIgcHJldmlv dXNfYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwlUdXBsZVRhYmxlU2xvdCAgKnNsb3Q7 CisJRVN0YXRlCQkJKmVzdGF0ZTsKKwlFeHByQ29udGV4dAkJKmVjb250ZXh0OwogCiAJLyogc3Rh dGUgdmFyaWFibGVzIGZvciB0aGUgbWVyZ2UgKi8KLQlJdGVtUG9pbnRlciBpbmRleGN1cnNvciA9 IE5VTEw7Ci0JSXRlbVBvaW50ZXJEYXRhIGRlY29kZWQ7Ci0JYm9vbAkJdHVwbGVzb3J0X2VtcHR5 ID0gZmFsc2U7CisJSXRlbVBvaW50ZXIgCWluZGV4Y3Vyc29yID0gTlVMTCwKKwkJCQkJYXV4aW5k ZXhjdXJzb3IgPSBOVUxMLAorCQkJCQlwcmV2X2luZGV4Y3Vyc29yID0gTlVMTDsKKwlJdGVtUG9p bnRlckRhdGEgZGVjb2RlZCwKKwkJCQkJYXV4ZGVjb2RlZCwKKwkJCQkJcHJldl9kZWNvZGVkLAor CQkJCQlmZXRjaGVkOworCWJvb2wJCQl0dXBsZXNvcnRfZW1wdHkgPSBmYWxzZSwKKwkJCQkJYXV4 dHVwbGVzb3J0X2VtcHR5ID0gZmFsc2U7CisJaW5zdHJfdGltZQkJc25hcHNob3RUaW1lLAorCQkJ CQljdXJyZW50VGltZSwKKwkJCQkJZWxhcHNlZDsKKworCUFzc2VydCghSGF2ZVJlZ2lzdGVyZWRP ckFjdGl2ZVNuYXBzaG90KCkpOworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9j LT54bWluKSk7CisKKwlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0U25hcHNo b3QoKSk7CisJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwlJTlNUUl9USU1FX1NFVF9D VVJSRU5UKHNuYXBzaG90VGltZSk7CisJbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47CiAKIAkv KgogCSAqIHNhbml0eSBjaGVja3MKIAkgKi8KLQlBc3NlcnQoT2lkSXNWYWxpZChpbmRleFJlbGF0 aW9uLT5yZF9yZWwtPnJlbGFtKSk7CisJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXhfcmVsLT5yZF9y ZWwtPnJlbGFtKSk7CisJQXNzZXJ0KE9pZElzVmFsaWQoYXV4X2luZGV4X3JlbC0+cmRfcmVsLT5y ZWxhbSkpOwogCi0JLyoKLQkgKiBOZWVkIGFuIEVTdGF0ZSBmb3IgZXZhbHVhdGlvbiBvZiBpbmRl eCBleHByZXNzaW9ucyBhbmQgcGFydGlhbC1pbmRleAotCSAqIHByZWRpY2F0ZXMuICBBbHNvIGEg c2xvdCB0byBob2xkIHRoZSBjdXJyZW50IHR1cGxlLgotCSAqLwogCWVzdGF0ZSA9IENyZWF0ZUV4 ZWN1dG9yU3RhdGUoKTsKIAllY29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRl KTsKLQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KFJlbGF0aW9uR2V0RGVzY3IoaGVh cFJlbGF0aW9uKSwKLQkJCQkJCQkJCSZUVFNPcHNIZWFwVHVwbGUpOworCisJc2xvdCA9IE1ha2VT aW5nbGVUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKHRhYmxlX3JlbCksCisJCQkJCQkJ CQkmVFRTT3BzQnVmZmVySGVhcFR1cGxlKTsKIAogCS8qIEFycmFuZ2UgZm9yIGVjb250ZXh0J3Mg c2NhbiB0dXBsZSB0byBiZSB0aGUgdHVwbGUgdW5kZXIgdGVzdCAqLwogCWVjb250ZXh0LT5lY3h0 X3NjYW50dXBsZSA9IHNsb3Q7CiAKLQkvKiBTZXQgdXAgZXhlY3V0aW9uIHN0YXRlIGZvciBwcmVk aWNhdGUsIGlmIGFueS4gKi8KLQlwcmVkaWNhdGUgPSBFeGVjUHJlcGFyZVF1YWwoaW5kZXhJbmZv LT5paV9QcmVkaWNhdGUsIGVzdGF0ZSk7CisJZmV0Y2ggPSBoZWFwYW1faW5kZXhfZmV0Y2hfYmVn aW4odGFibGVfcmVsKTsKIAotCS8qCi0JICogUHJlcGFyZSBmb3Igc2NhbiBvZiB0aGUgYmFzZSBy ZWxhdGlvbi4gIFdlIG5lZWQganVzdCB0aG9zZSB0dXBsZXMKLQkgKiBzYXRpc2Z5aW5nIHRoZSBw YXNzZWQtaW4gcmVmZXJlbmNlIHNuYXBzaG90LiAgV2UgbXVzdCBkaXNhYmxlIHN5bmNzY2FuCi0J ICogaGVyZSwgYmVjYXVzZSBpdCdzIGNyaXRpY2FsIHRoYXQgd2UgcmVhZCBmcm9tIGJsb2NrIHpl cm8gZm9yd2FyZCB0bwotCSAqIG1hdGNoIHRoZSBzb3J0ZWQgVElEcy4KLQkgKi8KLQlzY2FuID0g dGFibGVfYmVnaW5zY2FuX3N0cmF0KGhlYXBSZWxhdGlvbiwJLyogcmVsYXRpb24gKi8KLQkJCQkJ CQkJIHNuYXBzaG90LAkvKiBzbmFwc2hvdCAqLwotCQkJCQkJCQkgMCwgLyogbnVtYmVyIG9mIGtl eXMgKi8KLQkJCQkJCQkJIE5VTEwsCS8qIHNjYW4ga2V5ICovCi0JCQkJCQkJCSB0cnVlLAkvKiBi dWZmZXIgYWNjZXNzIHN0cmF0ZWd5IE9LICovCi0JCQkJCQkJCSBmYWxzZSk7CS8qIHN5bmNzY2Fu IG5vdCBPSyAqLwotCWhzY2FuID0gKEhlYXBTY2FuRGVzYykgc2NhbjsKKwlJdGVtUG9pbnRlclNl dEludmFsaWQoJmRlY29kZWQpOworCUl0ZW1Qb2ludGVyU2V0SW52YWxpZCgmcHJldl9kZWNvZGVk KTsKKwlJdGVtUG9pbnRlclNldEludmFsaWQoJmF1eGRlY29kZWQpOworCUl0ZW1Qb2ludGVyU2V0 SW52YWxpZCgmZmV0Y2hlZCk7CiAKLQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX3BhcmFtKFBST0dS RVNTX1NDQU5fQkxPQ0tTX1RPVEFMLAotCQkJCQkJCQkgaHNjYW4tPnJzX25ibG9ja3MpOworCXBy ZXZfaW5kZXhjdXJzb3IgPSAmcHJldl9kZWNvZGVkOwogCi0JLyoKLQkgKiBTY2FuIGFsbCB0dXBs ZXMgbWF0Y2hpbmcgdGhlIHNuYXBzaG90LgotCSAqLwotCXdoaWxlICgoaGVhcFR1cGxlID0gaGVh cF9nZXRuZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAo IWF1eHR1cGxlc29ydF9lbXB0eSkKIAl7Ci0JCUl0ZW1Qb2ludGVyIGhlYXBjdXJzb3IgPSAmaGVh cFR1cGxlLT50X3NlbGY7Ci0JCUl0ZW1Qb2ludGVyRGF0YSByb290VHVwbGU7Ci0JCU9mZnNldE51 bWJlciByb290X29mZm51bTsKLQogCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwogCi0JCXN0YXRl LT5odHVwcyArPSAxOwotCi0JCWlmICgocHJldmlvdXNfYmxrbm8gPT0gSW52YWxpZEJsb2NrTnVt YmVyKSB8fAotCQkJKGhzY2FuLT5yc19jYmxvY2sgIT0gcHJldmlvdXNfYmxrbm8pKQorCQlJTlNU Ul9USU1FX1NFVF9DVVJSRU5UKGN1cnJlbnRUaW1lKTsKKwkJZWxhcHNlZCA9IGN1cnJlbnRUaW1l OworCQlJTlNUUl9USU1FX1NVQlRSQUNUKGVsYXBzZWQsIHNuYXBzaG90VGltZSk7CisJCWlmIChJ TlNUUl9USU1FX0dFVF9NSUxMSVNFQyhlbGFwc2VkKSA+PSBWQUxJREFURV9JTkRFWF9TTkFQU0hP VF9SRVNFVF9JTlRFUlZBTCkKIAkJewotCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQ Uk9HUkVTU19TQ0FOX0JMT0NLU19ET05FLAotCQkJCQkJCQkJCSBoc2Nhbi0+cnNfY2Jsb2NrKTsK LQkJCXByZXZpb3VzX2Jsa25vID0gaHNjYW4tPnJzX2NibG9jazsKLQkJfQorCQkJUG9wQWN0aXZl U25hcHNob3QoKTsKKwkJCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CiAKLQkJLyoKLQkJ ICogQXMgY29tbWVudGVkIGluIHRhYmxlX2luZGV4X2J1aWxkX3NjYW4sIHdlIHNob3VsZCBpbmRl eCBoZWFwLW9ubHkKLQkJICogdHVwbGVzIHVuZGVyIHRoZSBUSURzIG9mIHRoZWlyIHJvb3QgdHVw bGVzOyBzbyB3aGVuIHdlIGFkdmFuY2Ugb250bwotCQkgKiBhIG5ldyBoZWFwIHBhZ2UsIGJ1aWxk IGEgbWFwIG9mIHJvb3QgaXRlbSBvZmZzZXRzIG9uIHRoZSBwYWdlLgotCQkgKgotCQkgKiBUaGlz IGNvbXBsaWNhdGVzIG1lcmdpbmcgYWdhaW5zdCB0aGUgdHVwbGVzb3J0IG91dHB1dDogd2Ugd2ls bAotCQkgKiB2aXNpdCB0aGUgbGl2ZSB0dXBsZXMgaW4gb3JkZXIgYnkgdGhlaXIgb2Zmc2V0cywg YnV0IHRoZSByb290Ci0JCSAqIG9mZnNldHMgdGhhdCB3ZSBuZWVkIHRvIGNvbXBhcmUgYWdhaW5z dCB0aGUgaW5kZXggY29udGVudHMgbWlnaHQgYmUKLQkJICogb3JkZXJlZCBkaWZmZXJlbnRseS4g IFNvIHdlIG1pZ2h0IGhhdmUgdG8gImxvb2sgYmFjayIgd2l0aGluIHRoZQotCQkgKiB0dXBsZXNv cnQgb3V0cHV0LCBidXQgb25seSB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS4gIFdlIGhhbmRsZSB0 aGF0Ci0JCSAqIGJ5IGtlZXBpbmcgYSBib29sIGFycmF5IGluX2luZGV4W10gc2hvd2luZyBhbGwg dGhlCi0JCSAqIGFscmVhZHktcGFzc2VkLW92ZXIgdHVwbGVzb3J0IG91dHB1dCBUSURzIG9mIHRo ZSBjdXJyZW50IHBhZ2UuIFdlCi0JCSAqIGNsZWFyIHRoYXQgYXJyYXkgaGVyZSwgd2hlbiBhZHZh bmNpbmcgb250byBhIG5ldyBoZWFwIHBhZ2UuCi0JCSAqLwotCQlpZiAoaHNjYW4tPnJzX2NibG9j ayAhPSByb290X2Jsa25vKQotCQl7Ci0JCQlQYWdlCQlwYWdlID0gQnVmZmVyR2V0UGFnZShoc2Nh bi0+cnNfY2J1Zik7CisJCQlBc3NlcnQoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1p bikpOwogCi0JCQlMb2NrQnVmZmVyKGhzY2FuLT5yc19jYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7 Ci0JCQloZWFwX2dldF9yb290X3R1cGxlcyhwYWdlLCByb290X29mZnNldHMpOwotCQkJTG9ja0J1 ZmZlcihoc2Nhbi0+cnNfY2J1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQotCQkJbWVtc2V0KGlu X2luZGV4LCAwLCBzaXplb2YoaW5faW5kZXgpKTsKLQotCQkJcm9vdF9ibGtubyA9IGhzY2FuLT5y c19jYmxvY2s7CisJCQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0U25hcHNo b3QoKSk7CisJCQlQdXNoQWN0aXZlU25hcHNob3Qoc25hcHNob3QpOworCQkJbGltaXRYbWluID0g VHJhbnNhY3Rpb25JZE5ld2VyKGxpbWl0WG1pbiwgc25hcHNob3QtPnhtaW4pOworCQkJSU5TVFJf VElNRV9TRVRfQ1VSUkVOVChzbmFwc2hvdFRpbWUpOwogCQl9CiAKLQkJLyogQ29udmVydCBhY3R1 YWwgdHVwbGUgVElEIHRvIHJvb3QgVElEICovCi0JCXJvb3RUdXBsZSA9ICpoZWFwY3Vyc29yOwot CQlyb290X29mZm51bSA9IEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKGhlYXBjdXJzb3IpOwot Ci0JCWlmIChIZWFwVHVwbGVJc0hlYXBPbmx5KGhlYXBUdXBsZSkpCi0JCXsKLQkJCXJvb3Rfb2Zm bnVtID0gcm9vdF9vZmZzZXRzW3Jvb3Rfb2ZmbnVtIC0gMV07Ci0JCQlpZiAoIU9mZnNldE51bWJl cklzVmFsaWQocm9vdF9vZmZudW0pKQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29k ZShFUlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKLQkJCQkJCSBlcnJtc2dfaW50ZXJuYWwoImZhaWxl ZCB0byBmaW5kIHBhcmVudCB0dXBsZSBmb3IgaGVhcC1vbmx5IHR1cGxlIGF0ICgldSwldSkgaW4g dGFibGUgXCIlc1wiIiwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcihoZWFw Y3Vyc29yKSwKLQkJCQkJCQkJCQkgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoaGVhcGN1cnNv ciksCi0JCQkJCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXBSZWxhdGlvbikpKSk7 Ci0JCQlJdGVtUG9pbnRlclNldE9mZnNldE51bWJlcigmcm9vdFR1cGxlLCByb290X29mZm51bSk7 Ci0JCX0KLQotCQkvKgotCQkgKiAibWVyZ2UiIGJ5IHNraXBwaW5nIHRocm91Z2ggdGhlIGluZGV4 IHR1cGxlcyB1bnRpbCB3ZSBmaW5kIG9yIHBhc3MKLQkJICogdGhlIGN1cnJlbnQgcm9vdCB0dXBs ZS4KLQkJICovCi0JCXdoaWxlICghdHVwbGVzb3J0X2VtcHR5ICYmCi0JCQkgICAoIWluZGV4Y3Vy c29yIHx8Ci0JCQkJSXRlbVBvaW50ZXJDb21wYXJlKGluZGV4Y3Vyc29yLCAmcm9vdFR1cGxlKSA8 IDApKQogCQl7Ci0JCQlEYXR1bQkJdHNfdmFsOwotCQkJYm9vbAkJdHNfaXNudWxsOwotCi0JCQlp ZiAoaW5kZXhjdXJzb3IpCisJCQlEYXR1bSB0c192YWw7CisJCQlib29sIHRzX2lzbnVsbDsKKwkJ CWF1eHR1cGxlc29ydF9lbXB0eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0dW0oYXV4X3N0YXRlLT50dXBs ZXNvcnQsIHRydWUsCisJCQkJCQkJCQkJCQkJIGZhbHNlLCAmdHNfdmFsLCAmdHNfaXNudWxsLAor CQkJCQkJCQkJCQkJCSBOVUxMKTsKKwkJCUFzc2VydChhdXh0dXBsZXNvcnRfZW1wdHkgfHwgIXRz X2lzbnVsbCk7CisJCQlpZiAoIWF1eHR1cGxlc29ydF9lbXB0eSkKKwkJCXsKKwkJCQlpdGVtcHRy X2RlY29kZSgmYXV4ZGVjb2RlZCwgRGF0dW1HZXRJbnQ2NCh0c192YWwpKTsKKwkJCQlhdXhpbmRl eGN1cnNvciA9ICZhdXhkZWNvZGVkOworCQkJfQorCQkJZWxzZQogCQkJewotCQkJCS8qCi0JCQkJ ICogUmVtZW1iZXIgaW5kZXggaXRlbXMgc2VlbiBlYXJsaWVyIG9uIHRoZSBjdXJyZW50IGhlYXAg cGFnZQotCQkJCSAqLwotCQkJCWlmIChJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKGluZGV4Y3Vy c29yKSA9PSByb290X2Jsa25vKQotCQkJCQlpbl9pbmRleFtJdGVtUG9pbnRlckdldE9mZnNldE51 bWJlcihpbmRleGN1cnNvcikgLSAxXSA9IHRydWU7CisJCQkJYXV4aW5kZXhjdXJzb3IgPSBOVUxM OwogCQkJfQorCQl9CiAKLQkJCXR1cGxlc29ydF9lbXB0eSA9ICF0dXBsZXNvcnRfZ2V0ZGF0dW0o c3RhdGUtPnR1cGxlc29ydCwgdHJ1ZSwKLQkJCQkJCQkJCQkJCSAgZmFsc2UsICZ0c192YWwsICZ0 c19pc251bGwsCi0JCQkJCQkJCQkJCQkgIE5VTEwpOwotCQkJQXNzZXJ0KHR1cGxlc29ydF9lbXB0 eSB8fCAhdHNfaXNudWxsKTsKLQkJCWlmICghdHVwbGVzb3J0X2VtcHR5KQotCQkJewotCQkJCWl0 ZW1wdHJfZGVjb2RlKCZkZWNvZGVkLCBEYXR1bUdldEludDY0KHRzX3ZhbCkpOwotCQkJCWluZGV4 Y3Vyc29yID0gJmRlY29kZWQ7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyogQmUgdGlkeSAq LwotCQkJCWluZGV4Y3Vyc29yID0gTlVMTDsKLQkJCX0KLQkJfQorCQlpZiAoIWF1eHR1cGxlc29y dF9lbXB0eSkKKwkJeworCQkJd2hpbGUgKCF0dXBsZXNvcnRfZW1wdHkgJiYgKGluZGV4Y3Vyc29y ID09IE5VTEwgfHwgLyogbnVsbCBvbiBmaXJzdCB0aW1lIGhlcmUgKi8KKwkJCQkJCUl0ZW1Qb2lu dGVyQ29tcGFyZShpbmRleGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpIDwgMCkpCisJCQl7CisJCQkJ RGF0dW0gdHNfdmFsOworCQkJCWJvb2wgdHNfaXNudWxsOworCQkJCXByZXZfZGVjb2RlZCA9IGRl Y29kZWQ7CisJCQkJdHVwbGVzb3J0X2VtcHR5ID0gIXR1cGxlc29ydF9nZXRkYXR1bShzdGF0ZS0+ dHVwbGVzb3J0LCB0cnVlLAorCQkJCQkJCQkJCQkJCSAgZmFsc2UsICZ0c192YWwsICZ0c19pc251 bGwsCisJCQkJCQkJCQkJCQkJICBOVUxMKTsKKwkJCQlBc3NlcnQodHVwbGVzb3J0X2VtcHR5IHx8 ICF0c19pc251bGwpOworCQkJCWlmICghdHVwbGVzb3J0X2VtcHR5KQorCQkJCXsKKwkJCQkJaXRl bXB0cl9kZWNvZGUoJmRlY29kZWQsIERhdHVtR2V0SW50NjQodHNfdmFsKSk7CisJCQkJCWluZGV4 Y3Vyc29yID0gJmRlY29kZWQ7CisKKwkJCQkJaWYgKEl0ZW1Qb2ludGVyQ29tcGFyZShwcmV2X2lu ZGV4Y3Vyc29yLCBpbmRleGN1cnNvcikgPT0gMCkKKwkJCQkJeworCQkJCQkJZWxvZyhERUJVRzUs ICJza2lwcGluZyBkdXBsaWNhdGUgdGlkIGluIHRhcmdldCBpbmRleCBzbmFwc2hvdDogKCV1LCV1 KSIsCisJCQkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoaW5kZXhjdXJzb3IpLAorCQkJ CQkJCSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihpbmRleGN1cnNvcikpOworCQkJCQl9CisJ CQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWluZGV4Y3Vyc29yID0gTlVMTDsKKwkJCQl9CisK KwkJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCQkJfQogCi0JCS8qCi0JCSAqIElmIHRoZSB0 dXBsZXNvcnQgaGFzIG92ZXJzaG90ICphbmQqIHdlIGRpZG4ndCBzZWUgYSBtYXRjaCBlYXJsaWVy LAotCQkgKiB0aGVuIHRoaXMgdHVwbGUgaXMgbWlzc2luZyBmcm9tIHRoZSBpbmRleCwgc28gaW5z ZXJ0IGl0LgotCQkgKi8KLQkJaWYgKCh0dXBsZXNvcnRfZW1wdHkgfHwKLQkJCSBJdGVtUG9pbnRl ckNvbXBhcmUoaW5kZXhjdXJzb3IsICZyb290VHVwbGUpID4gMCkgJiYKLQkJCSFpbl9pbmRleFty b290X29mZm51bSAtIDFdKQotCQl7Ci0JCQlNZW1vcnlDb250ZXh0UmVzZXQoZWNvbnRleHQtPmVj eHRfcGVyX3R1cGxlX21lbW9yeSk7CisJCQlpZiAodHVwbGVzb3J0X2VtcHR5IHx8IEl0ZW1Qb2lu dGVyQ29tcGFyZShpbmRleGN1cnNvciwgYXV4aW5kZXhjdXJzb3IpID4gMCkKKwkJCXsKKwkJCQli b29sIGNhbGxfYWdhaW4gPSBmYWxzZTsKKwkJCQlib29sIGFsbF9kZWFkID0gZmFsc2U7CisJCQkJ SXRlbVBvaW50ZXIgdGlkOworCisJCQkJZmV0Y2hlZCA9ICphdXhpbmRleGN1cnNvcjsKKwkJCQl0 aWQgPSAmZmV0Y2hlZDsKKworCQkJCU1lbW9yeUNvbnRleHRSZXNldChlY29udGV4dC0+ZWN4dF9w ZXJfdHVwbGVfbWVtb3J5KTsKIAotCQkJLyogU2V0IHVwIGZvciBwcmVkaWNhdGUgb3IgZXhwcmVz c2lvbiBldmFsdWF0aW9uICovCi0JCQlFeGVjU3RvcmVIZWFwVHVwbGUoaGVhcFR1cGxlLCBzbG90 LCBmYWxzZSk7Ci0KLQkJCS8qCi0JCQkgKiBJbiBhIHBhcnRpYWwgaW5kZXgsIGRpc2NhcmQgdHVw bGVzIHRoYXQgZG9uJ3Qgc2F0aXNmeSB0aGUKLQkJCSAqIHByZWRpY2F0ZS4KLQkJCSAqLwotCQkJ aWYgKHByZWRpY2F0ZSAhPSBOVUxMKQotCQkJewotCQkJCWlmICghRXhlY1F1YWwocHJlZGljYXRl LCBlY29udGV4dCkpCi0JCQkJCWNvbnRpbnVlOwotCQkJfQorCQkJCWlmIChoZWFwYW1faW5kZXhf ZmV0Y2hfdHVwbGUoZmV0Y2gsIHRpZCwgc25hcHNob3QsIHNsb3QsICZjYWxsX2FnYWluLCAmYWxs X2RlYWQpKQorCQkJCXsKIAotCQkJLyoKLQkJCSAqIEZvciB0aGUgY3VycmVudCBoZWFwIHR1cGxl LCBleHRyYWN0IGFsbCB0aGUgYXR0cmlidXRlcyB3ZSB1c2UKLQkJCSAqIGluIHRoaXMgaW5kZXgs IGFuZCBub3RlIHdoaWNoIGFyZSBudWxsLiAgVGhpcyBhbHNvIHBlcmZvcm1zCi0JCQkgKiBldmFs dWF0aW9uIG9mIGFueSBleHByZXNzaW9ucyBuZWVkZWQuCi0JCQkgKi8KLQkJCUZvcm1JbmRleERh dHVtKGluZGV4SW5mbywKLQkJCQkJCSAgIHNsb3QsCi0JCQkJCQkgICBlc3RhdGUsCi0JCQkJCQkg ICB2YWx1ZXMsCi0JCQkJCQkgICBpc251bGwpOworCQkJCQlGb3JtSW5kZXhEYXR1bShpbmRleF9p bmZvLAorCQkJCQkJCQkgICBzbG90LAorCQkJCQkJCQkgICBlc3RhdGUsCisJCQkJCQkJCSAgIHZh bHVlcywKKwkJCQkJCQkJICAgaXNudWxsKTsKIAotCQkJLyoKLQkJCSAqIFlvdSdkIHRoaW5rIHdl IHNob3VsZCBnbyBhaGVhZCBhbmQgYnVpbGQgdGhlIGluZGV4IHR1cGxlIGhlcmUsCi0JCQkgKiBi dXQgc29tZSBpbmRleCBBTXMgd2FudCB0byBkbyBmdXJ0aGVyIHByb2Nlc3Npbmcgb24gdGhlIGRh dGEKLQkJCSAqIGZpcnN0LiBTbyBwYXNzIHRoZSB2YWx1ZXNbXSBhbmQgaXNudWxsW10gYXJyYXlz LCBpbnN0ZWFkLgotCQkJICovCi0KLQkJCS8qCi0JCQkgKiBJZiB0aGUgdHVwbGUgaXMgYWxyZWFk eSBjb21taXR0ZWQgZGVhZCwgeW91IG1pZ2h0IHRoaW5rIHdlCi0JCQkgKiBjb3VsZCBzdXBwcmVz cyB1bmlxdWVuZXNzIGNoZWNraW5nLCBidXQgdGhpcyBpcyBubyBsb25nZXIgdHJ1ZQotCQkJICog aW4gdGhlIHByZXNlbmNlIG9mIEhPVCwgYmVjYXVzZSB0aGUgaW5zZXJ0IGlzIGFjdHVhbGx5IGEg cHJveHkKLQkJCSAqIGZvciBhIHVuaXF1ZW5lc3MgY2hlY2sgb24gdGhlIHdob2xlIEhPVC1jaGFp bi4gIFRoYXQgaXMsIHRoZQotCQkJICogdHVwbGUgd2UgaGF2ZSBoZXJlIGNvdWxkIGJlIGRlYWQg YmVjYXVzZSBpdCB3YXMgYWxyZWFkeQotCQkJICogSE9ULXVwZGF0ZWQsIGFuZCBpZiBzbyB0aGUg dXBkYXRpbmcgdHJhbnNhY3Rpb24gd2lsbCBub3QgaGF2ZQotCQkJICogdGhvdWdodCBpdCBzaG91 bGQgaW5zZXJ0IGluZGV4IGVudHJpZXMuICBUaGUgaW5kZXggQU0gd2lsbAotCQkJICogY2hlY2sg dGhlIHdob2xlIEhPVC1jaGFpbiBhbmQgY29ycmVjdGx5IGRldGVjdCBhIGNvbmZsaWN0IGlmCi0J CQkgKiB0aGVyZSBpcyBvbmUuCi0JCQkgKi8KLQotCQkJaW5kZXhfaW5zZXJ0KGluZGV4UmVsYXRp b24sCi0JCQkJCQkgdmFsdWVzLAotCQkJCQkJIGlzbnVsbCwKLQkJCQkJCSAmcm9vdFR1cGxlLAot CQkJCQkJIGhlYXBSZWxhdGlvbiwKLQkJCQkJCSBpbmRleEluZm8tPmlpX1VuaXF1ZSA/Ci0JCQkJ CQkgVU5JUVVFX0NIRUNLX1lFUyA6IFVOSVFVRV9DSEVDS19OTywKLQkJCQkJCSBmYWxzZSwKLQkJ CQkJCSBpbmRleEluZm8pOworCQkJCQlpbmRleF9pbnNlcnQoaW5kZXhfcmVsLAorCQkJCQkJCQkg dmFsdWVzLAorCQkJCQkJCQkgaXNudWxsLAorCQkJCQkJCQkgYXV4aW5kZXhjdXJzb3IsIC8qIGlu c2VydCByb290IHR1cGxlICovCisJCQkJCQkJCSB0YWJsZV9yZWwsCisJCQkJCQkJCSBpbmRleF9p bmZvLT5paV9VbmlxdWUgPworCQkJCQkJCQkgVU5JUVVFX0NIRUNLX1lFUyA6IFVOSVFVRV9DSEVD S19OTywKKwkJCQkJCQkJIGZhbHNlLAorCQkJCQkJCQkgaW5kZXhfaW5mbyk7CiAKLQkJCXN0YXRl LT50dXBzX2luc2VydGVkICs9IDE7CisJCQkJCXN0YXRlLT50dXBzX2luc2VydGVkICs9IDE7CisK KwkJCQkJZWxvZyhERUJVRzUsICJpbnNlcnRlZCB0aWQ6ICgldSwldSksIHJvb3Q6ICgldSwgJXUp IiwKKwkJCQkJCSAJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoYXV4aW5kZXhjdXJzb3Ip LAorCQkJCQkJCQkJCQlJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcihhdXhpbmRleGN1cnNvciks CisJCQkJCQkJCQkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSwKKwkJCQkJCQkJCQkJ SXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7 CisJCQkJCWVsb2coREVCVUc1LCAic2tpcHBpbmcgaW5zZXJ0IHRvIHRhcmdldCBpbmRleCBiZWNh dXNlIHRpZCBub3QgdmlzaWJsZTogKCV1LCV1KSIsCisJCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcihhdXhpbmRleGN1cnNvciksCisJCQkJCQkgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1i ZXIoYXV4aW5kZXhjdXJzb3IpKTsKKwkJCQl9CisJCQl9CiAJCX0KIAl9Ci0KLQl0YWJsZV9lbmRz Y2FuKHNjYW4pOwogCiAJRXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChzbG90KTsKIAogCUZy ZWVFeGVjdXRvclN0YXRlKGVzdGF0ZSk7CiAKLQkvKiBUaGVzZSBtYXkgaGF2ZSBiZWVuIHBvaW50 aW5nIHRvIHRoZSBub3ctZ29uZSBlc3RhdGUgKi8KLQlpbmRleEluZm8tPmlpX0V4cHJlc3Npb25z U3RhdGUgPSBOSUw7Ci0JaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVTdGF0ZSA9IE5VTEw7CisJaGVh cGFtX2luZGV4X2ZldGNoX2VuZChmZXRjaCk7CisKKwlQb3BBY3RpdmVTbmFwc2hvdCgpOworCVVu cmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgp OworCUFzc2VydChNeVByb2MtPnhtaW4gPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworI2lmIFVT RV9JTkpFQ1RJT05fUE9JTlRTCisJaWYgKE15UHJvYy0+eGlkID09IEludmFsaWRUcmFuc2FjdGlv bklkKQorCQlJTkpFQ1RJT05fUE9JTlQoImhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuX25vX3hp ZCIpOworI2VuZGlmCisKKwlyZXR1cm4gbGltaXRYbWluOwogfQogCiAvKgpJbmRleDogc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNv bS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCi0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwko cmV2aXNpb24gMmI1ZjU3OTc3ZjZkMTY3OTYxMjFkNzk2ODM1YzQ4ZTQyNDFiNGRhMSkKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jCShyZXZpc2lvbiAzZGVhNzJiNjJhZGM4ODA2OTE3 ZGM0NTliODJmZjQ0ZDk2MmJjYjEyKQpAQCAtNjcsNiArNjcsNyBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9wcmVkaWNhdGUuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9y YWdlL3NtZ3IuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxz L2ZtZ3JvaWRzLmgiCkBAIC03NDEsNyArNzQyLDggQEAKIAkJCSBiaXRzMTYgY29uc3RyX2ZsYWdz LAogCQkJIGJvb2wgYWxsb3dfc3lzdGVtX3RhYmxlX21vZHMsCiAJCQkgYm9vbCBpc19pbnRlcm5h bCwKLQkJCSBPaWQgKmNvbnN0cmFpbnRJZCkKKwkJCSBPaWQgKmNvbnN0cmFpbnRJZCwKKwkJCSBj aGFyIHJlbHBlcnNpc3RlbmNlKQogewogCU9pZAkJCWhlYXBSZWxhdGlvbklkID0gUmVsYXRpb25H ZXRSZWxpZChoZWFwUmVsYXRpb24pOwogCVJlbGF0aW9uCXBnX2NsYXNzOwpAQCAtNzUyLDcgKzc1 NCw2IEBACiAJYm9vbAkJaXNfZXhjbHVzaW9uOwogCU9pZAkJCW5hbWVzcGFjZUlkOwogCWludAkJ CWk7Ci0JY2hhcgkJcmVscGVyc2lzdGVuY2U7CiAJYm9vbAkJaXNwcmltYXJ5ID0gKGZsYWdzICYg SU5ERVhfQ1JFQVRFX0lTX1BSSU1BUlkpICE9IDA7CiAJYm9vbAkJaW52YWxpZCA9IChmbGFncyAm IElOREVYX0NSRUFURV9JTlZBTElEKSAhPSAwOwogCWJvb2wJCWNvbmN1cnJlbnQgPSAoZmxhZ3Mg JiBJTkRFWF9DUkVBVEVfQ09OQ1VSUkVOVCkgIT0gMDsKQEAgLTc4Miw3ICs3ODMsNiBAQAogCW5h bWVzcGFjZUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UoaGVhcFJlbGF0aW9uKTsKIAlzaGFyZWRf cmVsYXRpb24gPSBoZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVsaXNzaGFyZWQ7CiAJbWFwcGVkX3Jl bGF0aW9uID0gUmVsYXRpb25Jc01hcHBlZChoZWFwUmVsYXRpb24pOwotCXJlbHBlcnNpc3RlbmNl ID0gaGVhcFJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlOwogCiAJLyoKIAkgKiBjaGVj ayBwYXJhbWV0ZXJzCkBAIC0xNDU5LDEzICsxNDU5LDE1MSBAQAogCQkJCQkJCSAgMCwKIAkJCQkJ CQkgIHRydWUsIC8qIGFsbG93IHRhYmxlIHRvIGJlIGEgc3lzdGVtIGNhdGFsb2c/ICovCiAJCQkJ CQkJICBmYWxzZSwJLyogaXNfaW50ZXJuYWw/ICovCi0JCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkg IE5VTEwsCisJCQkJCQkJICBoZWFwUmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpOwog CiAJLyogQ2xvc2UgdGhlIHJlbGF0aW9ucyB1c2VkIGFuZCBjbGVhbiB1cCAqLwogCWluZGV4X2Ns b3NlKGluZGV4UmVsYXRpb24sIE5vTG9jayk7CiAJUmVsZWFzZVN5c0NhY2hlKGluZGV4VHVwbGUp OwogCVJlbGVhc2VTeXNDYWNoZShjbGFzc1R1cGxlKTsKIAorCXJldHVybiBuZXdJbmRleElkOwor fQorCitPaWQKK2luZGV4X2NvbmN1cnJlbnRseV9jcmVhdGVfYXV4KFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwgT2lkIG1haW5JbmRleElkLAorCQkJCQkJCSAgIE9pZCB0YWJsZXNwYWNlT2lkLCBjb25z dCBjaGFyICpuZXdOYW1lKQoreworCVJlbGF0aW9uCWluZGV4UmVsYXRpb247CisJSW5kZXhJbmZv ICAqb2xkSW5mbywKKwkJCSpuZXdJbmZvOworCU9pZAkJCW5ld0luZGV4SWQgPSBJbnZhbGlkT2lk OworCUhlYXBUdXBsZQlpbmRleFR1cGxlOworCisJTGlzdAkgICAqaW5kZXhDb2xOYW1lcyA9IE5J TDsKKwlMaXN0CSAgICppbmRleEV4cHJzID0gTklMOworCUxpc3QJICAgKmluZGV4UHJlZHMgPSBO SUw7CisKKwlPaWQgKmF1eE9wY2xhc3NJZHM7CisJaW50MTYgKmF1eENvbG9wdGlvbnM7CisKKwlp bmRleFJlbGF0aW9uID0gaW5kZXhfb3BlbihtYWluSW5kZXhJZCwgUm93RXhjbHVzaXZlTG9jayk7 CisKKwkvKiBUaGUgbmV3IGluZGV4IG5lZWRzIHNvbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb2xk IGluZGV4ICovCisJb2xkSW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOworCisJ LyoKKwkgKiBCdWlsZCBvZiBhbiBhdXhpbGlhcnkgaW5kZXggd2l0aCBleGNsdXNpb24gY29uc3Ry YWludHMgaXMgbm90CisJICogc3VwcG9ydGVkLgorCSAqLworCWlmIChvbGRJbmZvLT5paV9FeGNs dXNpb25PcHMgIT0gTlVMTCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJCQllcnJtc2coImF1eGlsaWFyeSBpbmRleCBj cmVhdGlvbiBmb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnRzIGlzIG5vdCBzdXBwb3J0ZWQiKSkpOwor CisJLyogR2V0IHRoZSBhcnJheSBvZiBjbGFzcyBhbmQgY29sdW1uIG9wdGlvbnMgSURzIGZyb20g aW5kZXggaW5mbyAqLworCWluZGV4VHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoSU5ERVhSRUxJRCwg T2JqZWN0SWRHZXREYXR1bShtYWluSW5kZXhJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChp bmRleFR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4 ICV1IiwgbWFpbkluZGV4SWQpOworCisKKwkvKgorCSAqIEZldGNoIHRoZSBsaXN0IG9mIGV4cHJl c3Npb25zIGFuZCBwcmVkaWNhdGVzIGRpcmVjdGx5IGZyb20gdGhlCisJICogY2F0YWxvZ3MuICBU aGlzIGNhbm5vdCByZWx5IG9uIHRoZSBpbmZvcm1hdGlvbiBmcm9tIEluZGV4SW5mbyBvZiB0aGUK KwkgKiBvbGQgaW5kZXggYXMgdGhlc2UgaGF2ZSBiZWVuIGZsYXR0ZW5lZCBmb3IgdGhlIHBsYW5u ZXIuCisJICovCisJaWYgKG9sZEluZm8tPmlpX0V4cHJlc3Npb25zICE9IE5JTCkKKwl7CisJCURh dHVtCQlleHByRGF0dW07CisJCWNoYXIJICAgKmV4cHJTdHJpbmc7CisKKwkJZXhwckRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyTm90TnVsbChJTkRFWFJFTElELCBpbmRleFR1cGxlLAorCQkJCQkJCQkJ CSAgIEFudW1fcGdfaW5kZXhfaW5kZXhwcnMpOworCQlleHByU3RyaW5nID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhleHByRGF0dW0pOworCQlpbmRleEV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2Rl KGV4cHJTdHJpbmcpOworCQlwZnJlZShleHByU3RyaW5nKTsKKwl9CisJaWYgKG9sZEluZm8tPmlp X1ByZWRpY2F0ZSAhPSBOSUwpCisJeworCQlEYXR1bQkJcHJlZERhdHVtOworCQljaGFyCSAgICpw cmVkU3RyaW5nOworCisJCXByZWREYXR1bSA9IFN5c0NhY2hlR2V0QXR0ck5vdE51bGwoSU5ERVhS RUxJRCwgaW5kZXhUdXBsZSwKKwkJCQkJCQkJCQkgICBBbnVtX3BnX2luZGV4X2luZHByZWQpOwor CQlwcmVkU3RyaW5nID0gVGV4dERhdHVtR2V0Q1N0cmluZyhwcmVkRGF0dW0pOworCQlpbmRleFBy ZWRzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKHByZWRTdHJpbmcpOworCisJCS8qIEFsc28gY29u dmVydCB0byBpbXBsaWNpdC1BTkQgZm9ybWF0ICovCisJCWluZGV4UHJlZHMgPSBtYWtlX2FuZHNf aW1wbGljaXQoKEV4cHIgKikgaW5kZXhQcmVkcyk7CisJCXBmcmVlKHByZWRTdHJpbmcpOworCX0K KworCS8qCisJICogQnVpbGQgdGhlIGluZGV4IGluZm9ybWF0aW9uIGZvciB0aGUgbmV3IGluZGV4 LiAgTm90ZSB0aGF0IHJlYnVpbGQgb2YKKwkgKiBpbmRleGVzIHdpdGggZXhjbHVzaW9uIGNvbnN0 cmFpbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIGhlbmNlIHRoZXJlIGlzIG5vCisJICogbmVlZCB0byBm aWxsIGFsbCB0aGUgaWlfRXhjbHVzaW9uKiBmaWVsZHMuCisJICovCisJbmV3SW5mbyA9IG1ha2VJ bmRleEluZm8ob2xkSW5mby0+aWlfTnVtSW5kZXhBdHRycywKKwkJCQkJCQlvbGRJbmZvLT5paV9O dW1JbmRleEtleUF0dHJzLAorCQkJCQkJCVNUSVJfQU1fT0lELAorCQkJCQkJCWluZGV4RXhwcnMs CisJCQkJCQkJaW5kZXhQcmVkcywKKwkJCQkJCQlmYWxzZSwgLyogYXV4IGluZGV4IGFyZSBub3Qg dW5pcXVlICovCisJCQkJCQkJb2xkSW5mby0+aWlfTnVsbHNOb3REaXN0aW5jdCwKKwkJCQkJCQlm YWxzZSwJLyogbm90IHJlYWR5IGZvciBpbnNlcnRzICovCisJCQkJCQkJdHJ1ZSwKKwkJCQkJCQlm YWxzZSk7IC8qIGF1eCBhcmUgbm90IHN1bW1hcml6aW5nICovCisKKwkvKgorCSAqIEV4dHJhY3Qg dGhlIGxpc3Qgb2YgY29sdW1uIG5hbWVzIGFuZCB0aGUgY29sdW1uIG51bWJlcnMgZm9yIHRoZSBu ZXcKKwkgKiBpbmRleCBpbmZvcm1hdGlvbi4gIEFsbCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUg dXNlZCBmb3IgdGhlIGluZGV4CisJICogY3JlYXRpb24uCisJICovCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBvbGRJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCisJeworCQlUdXBsZURlc2MJaW5k ZXhUdXBEZXNjID0gUmVsYXRpb25HZXREZXNjcihpbmRleFJlbGF0aW9uKTsKKwkJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0ID0gVHVwbGVEZXNjQXR0cihpbmRleFR1cERlc2MsIGkpOworCisJCWluZGV4 Q29sTmFtZXMgPSBsYXBwZW5kKGluZGV4Q29sTmFtZXMsIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7 CisJCW5ld0luZm8tPmlpX0luZGV4QXR0ck51bWJlcnNbaV0gPSBvbGRJbmZvLT5paV9JbmRleEF0 dHJOdW1iZXJzW2ldOworCX0KKworCWF1eE9wY2xhc3NJZHMgPSBwYWxsb2MwKHNpemVvZihPaWQp ICogbmV3SW5mby0+aWlfTnVtSW5kZXhBdHRycyk7CisJYXV4Q29sb3B0aW9ucyA9IHBhbGxvYzAo c2l6ZW9mKGludDE2KSAqIG5ld0luZm8tPmlpX051bUluZGV4QXR0cnMpOworCisJZm9yIChpbnQg aSA9IDA7IGkgPCBuZXdJbmZvLT5paV9OdW1JbmRleEF0dHJzOyBpKyspCisJeworCQlhdXhPcGNs YXNzSWRzW2ldID0gUkVDT1JEX1NUSVJfT1BTX09JRDsKKwkJYXV4Q29sb3B0aW9uc1tpXSA9IDA7 CisJfQorCisJbmV3SW5kZXhJZCA9IGluZGV4X2NyZWF0ZShoZWFwUmVsYXRpb24sCisJCQkJCQkJ ICBuZXdOYW1lLAorCQkJCQkJCSAgSW52YWxpZE9pZCwgICAgLyogaW5kZXhSZWxhdGlvbklkICov CisJCQkJCQkJICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRJbmRleFJlbGlkICovCisJCQkJCQkJ ICBJbnZhbGlkT2lkLCAgICAvKiBwYXJlbnRDb25zdHJhaW50SWQgKi8KKwkJCQkJCQkgIEludmFs aWRSZWxGaWxlTnVtYmVyLCAvKiByZWxGaWxlTnVtYmVyICovCisJCQkJCQkJICBuZXdJbmZvLAor CQkJCQkJCSAgaW5kZXhDb2xOYW1lcywKKwkJCQkJCQkgIFNUSVJfQU1fT0lELAorCQkJCQkJCSAg dGFibGVzcGFjZU9pZCwKKwkJCQkJCQkgIGluZGV4UmVsYXRpb24tPnJkX2luZGNvbGxhdGlvbiwK KwkJCQkJCQkgIGF1eE9wY2xhc3NJZHMsCisJCQkJCQkJICBOVUxMLAorCQkJCQkJCSAgYXV4Q29s b3B0aW9ucywKKwkJCQkJCQkgIE5VTEwsCisJCQkJCQkJICAoRGF0dW0pIDAsCisJCQkJCQkJICBJ TkRFWF9DUkVBVEVfU0tJUF9CVUlMRCB8IElOREVYX0NSRUFURV9DT05DVVJSRU5ULAorCQkJCQkJ CSAgMCwKKwkJCQkJCQkgIHRydWUsIC8qIGFsbG93IHRhYmxlIHRvIGJlIGEgc3lzdGVtIGNhdGFs b2c/ICovCisJCQkJCQkJICBmYWxzZSwgICAgLyogaXNfaW50ZXJuYWw/ICovCisJCQkJCQkJICBO VUxMLAorCQkJCQkJCSAgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpOworCisJLyogQ2xvc2UgdGhl IHJlbGF0aW9ucyB1c2VkIGFuZCBjbGVhbiB1cCAqLworCWluZGV4X2Nsb3NlKGluZGV4UmVsYXRp b24sIE5vTG9jayk7CisJUmVsZWFzZVN5c0NhY2hlKGluZGV4VHVwbGUpOworCiAJcmV0dXJuIG5l d0luZGV4SWQ7CiB9CiAKQEAgLTE0ODgsOSArMTYyNiw3IEBACiAJaW50CQkJc2F2ZV9uZXN0bGV2 ZWw7CiAJUmVsYXRpb24JaW5kZXhSZWxhdGlvbjsKIAlJbmRleEluZm8gICppbmRleEluZm87Ci0K LQkvKiBUaGlzIGhhZCBiZXR0ZXIgbWFrZSBzdXJlIHRoYXQgYSBzbmFwc2hvdCBpcyBhY3RpdmUg Ki8KLQlBc3NlcnQoQWN0aXZlU25hcHNob3RTZXQoKSk7CisJU25hcHNob3QgCXNuYXBzaG90ID0g SW52YWxpZFNuYXBzaG90OwogCiAJLyogT3BlbiBhbmQgbG9jayB0aGUgcGFyZW50IGhlYXAgcmVs YXRpb24gKi8KIAloZWFwUmVsID0gdGFibGVfb3BlbihoZWFwUmVsYXRpb25JZCwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKQEAgLTE1MDgsNiArMTY0NCwxMiBAQAogCiAJaW5kZXhSZWxhdGlv biA9IGluZGV4X29wZW4oaW5kZXhSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAorCUFz c2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisJQXNzZXJ0KCFUcmFu c2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhpZCkpOworCisJLyogQnVpbGRJbmRleEluZm8gcmVx dWlyZXMgYXMgc25hcHNob3QgZm9yIGV4cHJlc3Npb25zIGFuZCBwcmVkaWNhdGVzICovCisJc25h cHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJUHVz aEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKIAkvKgogCSAqIFdlIGhhdmUgdG8gcmUtYnVpbGQg dGhlIEluZGV4SW5mbyBzdHJ1Y3QsIHNpbmNlIGl0IHdhcyBsb3N0IGluIHRoZQogCSAqIGNvbW1p dCBvZiB0aGUgdHJhbnNhY3Rpb24gd2hlcmUgdGhpcyBjb25jdXJyZW50IGluZGV4IHdhcyBjcmVh dGVkIGF0CkBAIC0xNTE4LDExICsxNjYwLDE3IEBACiAJaW5kZXhJbmZvLT5paV9Db25jdXJyZW50 ID0gdHJ1ZTsKIAlpbmRleEluZm8tPmlpX0Jyb2tlbkhvdENoYWluID0gZmFsc2U7CiAKKwlQb3BB Y3RpdmVTbmFwc2hvdCgpOworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJc25hcHNo b3QgPSBJbnZhbGlkU25hcHNob3Q7CisKIAkvKiBOb3cgYnVpbGQgdGhlIGluZGV4ICovCi0JaW5k ZXhfYnVpbGQoaGVhcFJlbCwgaW5kZXhSZWxhdGlvbiwgaW5kZXhJbmZvLCBmYWxzZSwgdHJ1ZSk7 CisgCWluZGV4X2J1aWxkKGhlYXBSZWwsIGluZGV4UmVsYXRpb24sIGluZGV4SW5mbywgZmFsc2Us IHRydWUpOwogCisJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsK KwogCS8qIFJvbGwgYmFjayBhbnkgR1VDIGNoYW5nZXMgZXhlY3V0ZWQgYnkgaW5kZXggZnVuY3Rp b25zICovCi0JQXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZlX25lc3RsZXZlbCk7CisgCUF0RU9YYWN0 X0dVQyhmYWxzZSwgc2F2ZV9uZXN0bGV2ZWwpOwogCiAJLyogUmVzdG9yZSB1c2VyaWQgYW5kIHNl Y3VyaXR5IGNvbnRleHQgKi8KIAlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNhdmVfdXNlcmlkLCBz YXZlX3NlY19jb250ZXh0KTsKQEAgLTMxNzcsNyArMzMyNSw4IEBACiAJCQkJCQkJCSAwLCAvKiBu dW1iZXIgb2Yga2V5cyAqLwogCQkJCQkJCQkgTlVMTCwJLyogc2NhbiBrZXkgKi8KIAkJCQkJCQkJ IHRydWUsCS8qIGJ1ZmZlciBhY2Nlc3Mgc3RyYXRlZ3kgT0sgKi8KLQkJCQkJCQkJIHRydWUpOyAv KiBzeW5jc2NhbiBPSyAqLworCQkJCQkJCQkgdHJ1ZSwgIC8qIHN5bmNzY2FuIE9LICovCisJCQkJ CQkJCSBmYWxzZSk7CiAKIAl3aGlsZSAodGFibGVfc2Nhbl9nZXRuZXh0c2xvdChzY2FuLCBGb3J3 YXJkU2NhbkRpcmVjdGlvbiwgc2xvdCkpCiAJewpAQCAtMzI4OCwzNCArMzQzNyw1OSBAQAogICog bWFraW5nIHRoZSB0YWJsZSBhcHBlbmQtb25seSBieSBzZXR0aW5nIHVzZV9mc20pLiAgSG93ZXZl ciB0aGF0IHdvdWxkCiAgKiBhZGQgeWV0IG1vcmUgbG9ja2luZyBpc3N1ZXMuCiAgKi8KLXZvaWQK LXZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElkLCBTbmFwc2hvdCBzbmFwc2hv dCkKK1RyYW5zYWN0aW9uSWQKK3ZhbGlkYXRlX2luZGV4KE9pZCBoZWFwSWQsIE9pZCBpbmRleElk LCBPaWQgYXV4SW5kZXhJZCkKIHsKIAlSZWxhdGlvbgloZWFwUmVsYXRpb24sCi0JCQkJaW5kZXhS ZWxhdGlvbjsKLQlJbmRleEluZm8gICppbmRleEluZm87Ci0JSW5kZXhWYWN1dW1JbmZvIGl2aW5m bzsKLQlWYWxpZGF0ZUluZGV4U3RhdGUgc3RhdGU7CisJCQlpbmRleFJlbGF0aW9uLAorCQkJYXV4 SW5kZXhSZWxhdGlvbjsKKwlJbmRleEluZm8gICppbmRleEluZm8sCisJCQkJKmF1eEluZGV4SW5m bzsKKwlTbmFwc2hvdCBzbmFwc2hvdDsKKwlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKKwlJbmRl eFZhY3V1bUluZm8gaXZpbmZvLCBhdXhpdmluZm87CisJVmFsaWRhdGVJbmRleFN0YXRlIHN0YXRl LCBhdXhTdGF0ZTsKIAlPaWQJCQlzYXZlX3VzZXJpZDsKIAlpbnQJCQlzYXZlX3NlY19jb250ZXh0 OwogCWludAkJCXNhdmVfbmVzdGxldmVsOworCWludAkJCW1haW5fd29ya19tZW1fcGFydCA9ICht YWludGVuYW5jZV93b3JrX21lbSAqIDgpIC8gMTA7CiAKIAl7CiAJCWNvbnN0IGludAlwcm9ncmVz c19pbmRleFtdID0gewotCQkJUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFLAotCQkJUFJPR1JFU1Nf Q1JFQVRFSURYX1RVUExFU19ET05FLAotCQkJUFJPR1JFU1NfQ1JFQVRFSURYX1RVUExFU19UT1RB TCwKLQkJCVBST0dSRVNTX1NDQU5fQkxPQ0tTX0RPTkUsCi0JCQlQUk9HUkVTU19TQ0FOX0JMT0NL U19UT1RBTAorCQkJCVBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwKKwkJCQlQUk9HUkVTU19DUkVB VEVJRFhfVFVQTEVTX0RPTkUsCisJCQkJUFJPR1JFU1NfQ1JFQVRFSURYX1RVUExFU19UT1RBTCwK KwkJCQlQUk9HUkVTU19TQ0FOX0JMT0NLU19ET05FLAorCQkJCVBST0dSRVNTX1NDQU5fQkxPQ0tT X1RPVEFMCiAJCX07CiAJCWNvbnN0IGludDY0IHByb2dyZXNzX3ZhbHNbXSA9IHsKLQkJCVBST0dS RVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhTQ0FOLAotCQkJMCwgMCwgMCwgMAorCQkJ CVBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9JRFhTQ0FOLAorCQkJCTAsIDAsIDAs IDAKIAkJfTsKIAogCQlwZ3N0YXRfcHJvZ3Jlc3NfdXBkYXRlX211bHRpX3BhcmFtKDUsIHByb2dy ZXNzX2luZGV4LCBwcm9ncmVzc192YWxzKTsKIAl9CiAKKwkvKgorCSAqIE5vdyB0YWtlIHRoZSAi cmVmZXJlbmNlIHNuYXBzaG90IiB0aGF0IHdpbGwgYmUgdXNlZCBieSB2YWxpZGF0ZV9pbmRleCgp CisJICogdG8gZmlsdGVyIGNhbmRpZGF0ZSB0dXBsZXMuICBCZXdhcmUhICBUaGVyZSBtaWdodCBz dGlsbCBiZSBzbmFwc2hvdHMgaW4KKwkgKiB1c2UgdGhhdCB0cmVhdCBzb21lIHRyYW5zYWN0aW9u IGFzIGluLXByb2dyZXNzIHRoYXQgb3VyIHJlZmVyZW5jZQorCSAqIHNuYXBzaG90IHRyZWF0cyBh cyBjb21taXR0ZWQuICBJZiBzdWNoIGEgcmVjZW50bHktY29tbWl0dGVkIHRyYW5zYWN0aW9uCisJ ICogZGVsZXRlZCB0dXBsZXMgaW4gdGhlIHRhYmxlLCB3ZSB3aWxsIG5vdCBpbmNsdWRlIHRoZW0g aW4gdGhlIGluZGV4OyB5ZXQKKwkgKiB0aG9zZSB0cmFuc2FjdGlvbnMgd2hpY2ggc2VlIHRoZSBk ZWxldGluZyBvbmUgYXMgc3RpbGwtaW4tcHJvZ3Jlc3Mgd2lsbAorCSAqIGV4cGVjdCBzdWNoIHR1 cGxlcyB0byBiZSB0aGVyZSBvbmNlIHdlIG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgorCSAqCisJ ICogV2Ugc29sdmUgdGhpcyBieSB3YWl0aW5nIGZvciBhbGwgZW5kYW5nZXJlZCB0cmFuc2FjdGlv bnMgdG8gZXhpdCBiZWZvcmUKKwkgKiB3ZSBtYXJrIHRoZSBpbmRleCBhcyB2YWxpZC4KKwkgKgor CSAqIFdlIGFsc28gc2V0IEFjdGl2ZVNuYXBzaG90IHRvIHRoaXMgc25hcCwgc2luY2UgZnVuY3Rp b25zIGluIGluZGV4ZXMgbWF5CisJICogbmVlZCBhIHNuYXBzaG90LgorCSAqLworCXNuYXBzaG90 ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCVB1c2hBY3Rp dmVTbmFwc2hvdChzbmFwc2hvdCk7CisKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQ cm9jLT54bWluKSk7CisKIAkvKiBPcGVuIGFuZCBsb2NrIHRoZSBwYXJlbnQgaGVhcCByZWxhdGlv biAqLwogCWhlYXBSZWxhdGlvbiA9IHRhYmxlX29wZW4oaGVhcElkLCBTaGFyZVVwZGF0ZUV4Y2x1 c2l2ZUxvY2spOwogCkBAIC0zMzMxLDYgKzM1MDUsNyBAQAogCVJlc3RyaWN0U2VhcmNoUGF0aCgp OwogCiAJaW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oaW5kZXhJZCwgUm93RXhjbHVzaXZlTG9j ayk7CisJYXV4SW5kZXhSZWxhdGlvbiA9IGluZGV4X29wZW4oYXV4SW5kZXhJZCwgUm93RXhjbHVz aXZlTG9jayk7CiAKIAkvKgogCSAqIEZldGNoIGluZm8gbmVlZGVkIGZvciBpbmRleF9pbnNlcnQu ICAoWW91IG1pZ2h0IHRoaW5rIHRoaXMgc2hvdWxkIGJlCkBAIC0zMzM4LDkgKzM1MTMsMTEgQEAK IAkgKiBiZWVuIGJ1aWx0IGluIGEgcHJldmlvdXMgdHJhbnNhY3Rpb24uKQogCSAqLwogCWluZGV4 SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGluZGV4UmVsYXRpb24pOworCWF1eEluZGV4SW5mbyA9IEJ1 aWxkSW5kZXhJbmZvKGF1eEluZGV4UmVsYXRpb24pOwogCiAJLyogbWFyayBidWlsZCBpcyBjb25j dXJyZW50IGp1c3QgZm9yIGNvbnNpc3RlbmN5ICovCiAJaW5kZXhJbmZvLT5paV9Db25jdXJyZW50 ID0gdHJ1ZTsKKwlhdXhJbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSB0cnVlOwogCiAJLyoKIAkg KiBTY2FuIHRoZSBpbmRleCBhbmQgZ2F0aGVyIHVwIGFsbCB0aGUgVElEcyBpbnRvIGEgdHVwbGVz b3J0IG9iamVjdC4KQEAgLTMzNTMsNiArMzUzMCwxMCBAQAogCWl2aW5mby5tZXNzYWdlX2xldmVs ID0gREVCVUcyOwogCWl2aW5mby5udW1faGVhcF90dXBsZXMgPSBoZWFwUmVsYXRpb24tPnJkX3Jl bC0+cmVsdHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IE5VTEw7CisJaXZpbmZvLnZhbGlkYXRl X2luZGV4ID0gdHJ1ZTsKKworCWF1eGl2aW5mbyA9IGl2aW5mbzsKKwlhdXhpdmluZm8uaW5kZXgg PSBhdXhJbmRleFJlbGF0aW9uOwogCiAJLyoKIAkgKiBFbmNvZGUgVElEcyBhcyBpbnQ4IHZhbHVl cyBmb3IgdGhlIHNvcnQsIHJhdGhlciB0aGFuIGRpcmVjdGx5IHNvcnRpbmcKQEAgLTMzNjAsOSAr MzU0MSwyNyBAQAogCSAqIGlzIGEgcGFzcy1ieS1yZWZlcmVuY2UgdHlwZSBvbiBhbGwgcGxhdGZv cm1zLCB3aGVyZWFzIGludDggaXMKIAkgKiBwYXNzLWJ5LXZhbHVlIG9uIG1vc3QgcGxhdGZvcm1z LgogCSAqLworCWF1eFN0YXRlLnR1cGxlc29ydCA9IHR1cGxlc29ydF9iZWdpbl9kYXR1bShJTlQ4 T0lELCBJbnQ4TGVzc09wZXJhdG9yLAorCQkJCQkJCQkJCQkgICBJbnZhbGlkT2lkLCBmYWxzZSwK KwkJCQkJCQkJCQkJICAgbWFpbnRlbmFuY2Vfd29ya19tZW0gLSBtYWluX3dvcmtfbWVtX3BhcnQs CisJCQkJCQkJCQkJCSAgIE5VTEwsIFRVUExFU09SVF9OT05FKTsKKwlhdXhTdGF0ZS5odHVwcyA9 IGF1eFN0YXRlLml0dXBzID0gYXV4U3RhdGUudHVwc19pbnNlcnRlZCA9IDA7CisKKwkodm9pZCkg aW5kZXhfYnVsa19kZWxldGUoJmF1eGl2aW5mbywgTlVMTCwKKwkJCQkJCQkgdmFsaWRhdGVfaW5k ZXhfY2FsbGJhY2ssICh2b2lkICopICZhdXhTdGF0ZSk7CisKKwlQb3BBY3RpdmVTbmFwc2hvdCgp OworCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisKKwlBc3NlcnQoIVRyYW5zYWN0aW9u SWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpOworCisJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90 KEdldExhdGVzdFNuYXBzaG90KCkpOworCVB1c2hBY3RpdmVTbmFwc2hvdChzbmFwc2hvdCk7CisK KwogCXN0YXRlLnR1cGxlc29ydCA9IHR1cGxlc29ydF9iZWdpbl9kYXR1bShJTlQ4T0lELCBJbnQ4 TGVzc09wZXJhdG9yLAogCQkJCQkJCQkJCQlJbnZhbGlkT2lkLCBmYWxzZSwKLQkJCQkJCQkJCQkJ bWFpbnRlbmFuY2Vfd29ya19tZW0sCisJCQkJCQkJCQkJCW1haW5fd29ya19tZW1fcGFydCwKIAkJ CQkJCQkJCQkJTlVMTCwgVFVQTEVTT1JUX05PTkUpOwogCXN0YXRlLmh0dXBzID0gc3RhdGUuaXR1 cHMgPSBzdGF0ZS50dXBzX2luc2VydGVkID0gMDsKIApAQCAtMzM3MCwzOCArMzU2OSw2MyBAQAog CSh2b2lkKSBpbmRleF9idWxrX2RlbGV0ZSgmaXZpbmZvLCBOVUxMLAogCQkJCQkJCSB2YWxpZGF0 ZV9pbmRleF9jYWxsYmFjaywgKHZvaWQgKikgJnN0YXRlKTsKIAorCisKIAkvKiBFeGVjdXRlIHRo ZSBzb3J0ICovCiAJewogCQljb25zdCBpbnQJcHJvZ3Jlc3NfaW5kZXhbXSA9IHsKLQkJCVBST0dS RVNTX0NSRUFURUlEWF9QSEFTRSwKLQkJCVBST0dSRVNTX1NDQU5fQkxPQ0tTX0RPTkUsCi0JCQlQ Uk9HUkVTU19TQ0FOX0JMT0NLU19UT1RBTAorCQkJCVBST0dSRVNTX0NSRUFURUlEWF9QSEFTRSwK KwkJCQlQUk9HUkVTU19TQ0FOX0JMT0NLU19ET05FLAorCQkJCVBST0dSRVNTX1NDQU5fQkxPQ0tT X1RPVEFMCiAJCX07CiAJCWNvbnN0IGludDY0IHByb2dyZXNzX3ZhbHNbXSA9IHsKLQkJCVBST0dS RVNTX0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9TT1JULAotCQkJMCwgMAorCQkJCVBST0dSRVNT X0NSRUFURUlEWF9QSEFTRV9WQUxJREFURV9TT1JULAorCQkJCTAsIDAKIAkJfTsKIAogCQlwZ3N0 YXRfcHJvZ3Jlc3NfdXBkYXRlX211bHRpX3BhcmFtKDMsIHByb2dyZXNzX2luZGV4LCBwcm9ncmVz c192YWxzKTsKIAl9CiAJdHVwbGVzb3J0X3BlcmZvcm1zb3J0KHN0YXRlLnR1cGxlc29ydCk7CisJ dHVwbGVzb3J0X3BlcmZvcm1zb3J0KGF1eFN0YXRlLnR1cGxlc29ydCk7CisKKwkvKgorCSAqIERy b3AgdGhlIHJlZmVyZW5jZSBzbmFwc2hvdC4gIFdlIG11c3QgZG8gdGhpcyBiZWZvcmUgd2FpdGlu ZyBvdXQgb3RoZXIKKwkgKiBzbmFwc2hvdCBob2xkZXJzLCBlbHNlIHdlIHdpbGwgZGVhZGxvY2sg YWdhaW5zdCBvdGhlciBwcm9jZXNzZXMgYWxzbworCSAqIGRvaW5nIENSRUFURSBJTkRFWCBDT05D VVJSRU5UTFksIHdoaWNoIHdvdWxkIHNlZSBvdXIgc25hcHNob3QgYXMgb25lCisJICogdGhleSBt dXN0IHdhaXQgZm9yLiAgQnV0IGZpcnN0LCBzYXZlIHRoZSBzbmFwc2hvdCdzIHhtaW4gdG8gdXNl IGFzCisJICogbGltaXRYbWluIGZvciBHZXRDdXJyZW50VmlydHVhbFhJRHMoKS4KKyAJKi8KKwls aW1pdFhtaW4gPSBzbmFwc2hvdC0+eG1pbjsKKworCisJUG9wQWN0aXZlU25hcHNob3QoKTsKKwlV bnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOworCXNuYXBzaG90ID0gSW52YWxpZFNuYXBzaG90 OworCisJQXNzZXJ0KCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKKwogCiAJ LyoKIAkgKiBOb3cgc2NhbiB0aGUgaGVhcCBhbmQgIm1lcmdlIiBpdCB3aXRoIHRoZSBpbmRleAog CSAqLwogCXBnc3RhdF9wcm9ncmVzc191cGRhdGVfcGFyYW0oUFJPR1JFU1NfQ1JFQVRFSURYX1BI QVNFLAogCQkJCQkJCQkgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1ZBTElEQVRFX1RBQkxFU0NB Tik7Ci0JdGFibGVfaW5kZXhfdmFsaWRhdGVfc2NhbihoZWFwUmVsYXRpb24sCisJbGltaXRYbWlu ID0gVHJhbnNhY3Rpb25JZE5ld2VyKGxpbWl0WG1pbiwgdGFibGVfaW5kZXhfdmFsaWRhdGVfc2Nh bihoZWFwUmVsYXRpb24sCiAJCQkJCQkJICBpbmRleFJlbGF0aW9uLAorCQkJCQkJCSAgYXV4SW5k ZXhSZWxhdGlvbiwKIAkJCQkJCQkgIGluZGV4SW5mbywKLQkJCQkJCQkgIHNuYXBzaG90LAotCQkJ CQkJCSAgJnN0YXRlKTsKKwkJCQkJCQkgIGF1eEluZGV4SW5mbywKKwkJCQkJCQkgIHNuYXBzaG90 LCAvKiBtYXkgYmUgaW52YWxpZCAqLworCQkJCQkJCSAgJnN0YXRlLAorCQkJCQkJCSAgJmF1eFN0 YXRlKSk7CiAKIAkvKiBEb25lIHdpdGggdHVwbGVzb3J0IG9iamVjdCAqLwogCXR1cGxlc29ydF9l bmQoc3RhdGUudHVwbGVzb3J0KTsKKwl0dXBsZXNvcnRfZW5kKGF1eFN0YXRlLnR1cGxlc29ydCk7 CiAKIAkvKiBNYWtlIHN1cmUgdG8gcmVsZWFzZSByZXNvdXJjZXMgY2FjaGVkIGluIGluZGV4SW5m byAoaWYgbmVlZGVkKS4gKi8KIAlpbmRleF9pbnNlcnRfY2xlYW51cChpbmRleFJlbGF0aW9uLCBp bmRleEluZm8pOworCWluZGV4X2luc2VydF9jbGVhbnVwKGF1eEluZGV4UmVsYXRpb24sIGF1eElu ZGV4SW5mbyk7CiAKIAllbG9nKERFQlVHMiwKIAkJICJ2YWxpZGF0ZV9pbmRleCBmb3VuZCAlLjBm IGhlYXAgdHVwbGVzLCAlLjBmIGluZGV4IHR1cGxlczsgaW5zZXJ0ZWQgJS4wZiBtaXNzaW5nIHR1 cGxlcyIsCkBAIC0zNDE0LDggKzM2MzgsMTMgQEAKIAlTZXRVc2VySWRBbmRTZWNDb250ZXh0KHNh dmVfdXNlcmlkLCBzYXZlX3NlY19jb250ZXh0KTsKIAogCS8qIENsb3NlIHJlbHMsIGJ1dCBrZWVw IGxvY2tzICovCisJaW5kZXhfY2xvc2UoYXV4SW5kZXhSZWxhdGlvbiwgTm9Mb2NrKTsKIAlpbmRl eF9jbG9zZShpbmRleFJlbGF0aW9uLCBOb0xvY2spOwogCXRhYmxlX2Nsb3NlKGhlYXBSZWxhdGlv biwgTm9Mb2NrKTsKKworCUFzc2VydCghSGF2ZVJlZ2lzdGVyZWRPckFjdGl2ZVNuYXBzaG90KCkp OworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CisJcmV0dXJu IGxpbWl0WG1pbjsKIH0KIAogLyoKQEAgLTM0NjYsNiArMzY5NSwxMiBAQAogCQkJQXNzZXJ0KCFp bmRleEZvcm0tPmluZGlzcmVhZHkpOwogCQkJQXNzZXJ0KCFpbmRleEZvcm0tPmluZGlzdmFsaWQp OwogCQkJaW5kZXhGb3JtLT5pbmRpc3JlYWR5ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIElO REVYX0RST1BfQ0xFQVJfUkVBRFk6CisJCQlBc3NlcnQoaW5kZXhGb3JtLT5pbmRpc2xpdmUpOwor CQkJQXNzZXJ0KGluZGV4Rm9ybS0+aW5kaXNyZWFkeSk7CisJCQlBc3NlcnQoIWluZGV4Rm9ybS0+ aW5kaXN2YWxpZCk7CisJCQlpbmRleEZvcm0tPmluZGlzcmVhZHkgPSBmYWxzZTsKIAkJCWJyZWFr OwogCQljYXNlIElOREVYX0NSRUFURV9TRVRfVkFMSUQ6CiAJCQkvKiBTZXQgaW5kaXN2YWxpZCBk dXJpbmcgYSBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIHNlcXVlbmNlICovCkluZGV4OiBzcmMv YmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3Rl bTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYt OAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy90b2FzdGluZy5jCShyZXZpc2lvbiAyYjVmNTc5NzdmNmQxNjc5NjEyMWQ3OTY4MzVjNDhlNDI0 MWI0ZGExKQorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3RvYXN0aW5nLmMJKHJldmlzaW9uIDY5 NzMzNjBhYWY0ZWI5MDEyYTYwYTVmMmQ1ZDQ2ZjAyMmFjMmQzOGMpCkBAIC0zMjQsNyArMzI0LDgg QEAKIAkJCQkgQlRSRUVfQU1fT0lELAogCQkJCSByZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSwK IAkJCQkgY29sbGF0aW9uSWRzLCBvcGNsYXNzSWRzLCBOVUxMLCBjb2xvcHRpb25zLCBOVUxMLCAo RGF0dW0pIDAsCi0JCQkJIElOREVYX0NSRUFURV9JU19QUklNQVJZLCAwLCB0cnVlLCB0cnVlLCBO VUxMKTsKKwkJCQkgSU5ERVhfQ1JFQVRFX0lTX1BSSU1BUlksIDAsIHRydWUsIHRydWUsIE5VTEws CisJCQkJIHRvYXN0X3JlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAKIAl0YWJsZV9jbG9z ZSh0b2FzdF9yZWwsIE5vTG9jayk7CiAKSW5kZXg6IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4 Y21kcy5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVu YXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYwotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwko cmV2aXNpb24gMmI1ZjU3OTc3ZjZkMTY3OTYxMjFkNzk2ODM1YzQ4ZTQyNDFiNGRhMSkKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMJKHJldmlzaW9uIDNkZWE3MmI2MmFkYzg4 MDY5MTdkYzQ1OWI4MmZmNDRkOTYyYmNiMTIpCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAi dXRpbHMvcmVncHJvYy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1 dGlscy9zeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogCiAK IC8qIG5vbi1leHBvcnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwpAQCAtMTEyLDcgKzExMyw2IEBA CiAJCQkJCQkJCQkJT2lkIHJlbGF0aW9uT2lkLAogCQkJCQkJCQkJCWNvbnN0IFJlaW5kZXhQYXJh bXMgKnBhcmFtcyk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfcmVsaXNwYXJ0aXRpb24oT2lkIHJlbGF0 aW9uSWQsIGJvb2wgbmV3dmFsKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW5kZXhzYWZlX3By b2NmbGFncyh2b2lkKTsKIAogLyoKICAqIGNhbGxiYWNrIGFyZ3VtZW50IHR5cGUgZm9yIFJhbmdl VmFyQ2FsbGJhY2tGb3JSZWluZGV4SW5kZXgoKQpAQCAtNDI4LDggKzQyOCw3IEBACiAJVmlydHVh bFRyYW5zYWN0aW9uSWQgKm9sZF9zbmFwc2hvdHM7CiAKIAlvbGRfc25hcHNob3RzID0gR2V0Q3Vy cmVudFZpcnR1YWxYSURzKGxpbWl0WG1pbiwgdHJ1ZSwgZmFsc2UsCi0JCQkJCQkJCQkJICBQUk9D X0lTX0FVVE9WQUNVVU0gfCBQUk9DX0lOX1ZBQ1VVTQotCQkJCQkJCQkJCSAgfCBQUk9DX0lOX1NB RkVfSUMsCisJCQkJCQkJCQkJICBQUk9DX0lTX0FVVE9WQUNVVU0gfCBQUk9DX0lOX1ZBQ1VVTSwK IAkJCQkJCQkJCQkgICZuX29sZF9zbmFwc2hvdHMpOwogCWlmIChwcm9ncmVzcykKIAkJcGdzdGF0 X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19XQUlURk9SX1RPVEFMLCBuX29sZF9zbmFw c2hvdHMpOwpAQCAtNDQ5LDggKzQ0OCw3IEBACiAKIAkJCW5ld2VyX3NuYXBzaG90cyA9IEdldEN1 cnJlbnRWaXJ0dWFsWElEcyhsaW1pdFhtaW4sCiAJCQkJCQkJCQkJCQkJdHJ1ZSwgZmFsc2UsCi0J CQkJCQkJCQkJCQkJUFJPQ19JU19BVVRPVkFDVVVNIHwgUFJPQ19JTl9WQUNVVU0KLQkJCQkJCQkJ CQkJCQl8IFBST0NfSU5fU0FGRV9JQywKKwkJCQkJCQkJCQkJCQlQUk9DX0lTX0FVVE9WQUNVVU0g fCBQUk9DX0lOX1ZBQ1VVTSwKIAkJCQkJCQkJCQkJCQkmbl9uZXdlcl9zbmFwc2hvdHMpOwogCQkJ Zm9yIChqID0gaTsgaiA8IG5fb2xkX3NuYXBzaG90czsgaisrKQogCQkJewpAQCAtNTQyLDcgKzU0 MCw5IEBACiB7CiAJYm9vbAkJY29uY3VycmVudDsKIAljaGFyCSAgICppbmRleFJlbGF0aW9uTmFt ZTsKKwljaGFyCSAgICphdXhJbmRleFJlbGF0aW9uTmFtZTsKIAljaGFyCSAgICphY2Nlc3NNZXRo b2ROYW1lOworCU9pZAkJCWF1eEluZGV4UmVsYXRpb25JZDsKIAlPaWQJCSAgICp0eXBlSWRzOwog CU9pZAkJICAgKmNvbGxhdGlvbklkczsKIAlPaWQJCSAgICpvcGNsYXNzSWRzOwpAQCAtNTYxLDcg KzU2MSw2IEBACiAJYm9vbAkJYW1pc3N1bW1hcml6aW5nOwogCWFtb3B0aW9uc19mdW5jdGlvbiBh bW9wdGlvbnM7CiAJYm9vbAkJcGFydGl0aW9uZWQ7Ci0JYm9vbAkJc2FmZV9pbmRleDsKIAlEYXR1 bQkJcmVsb3B0aW9uczsKIAlpbnQxNgkgICAqY29sb3B0aW9uczsKIAlJbmRleEluZm8gICppbmRl eEluZm87CkBAIC01NzEsMTAgKzU3MCwxMCBAQAogCWludAkJCW51bWJlck9mS2V5QXR0cmlidXRl czsKIAlUcmFuc2FjdGlvbklkIGxpbWl0WG1pbjsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJ T2JqZWN0QWRkcmVzcyBhdXhBZGRyZXNzOwogCUxvY2tSZWxJZAloZWFwcmVsaWQ7CiAJTE9DS1RB RwkJaGVhcGxvY2t0YWc7CiAJTE9DS01PREUJbG9ja21vZGU7Ci0JU25hcHNob3QJc25hcHNob3Q7 CiAJT2lkCQkJcm9vdF9zYXZlX3VzZXJpZDsKIAlpbnQJCQlyb290X3NhdmVfc2VjX2NvbnRleHQ7 CiAJaW50CQkJcm9vdF9zYXZlX25lc3RsZXZlbDsKQEAgLTgwOCw2ICs4MDcsNyBAQAogCSAqIFNl bGVjdCBuYW1lIGZvciBpbmRleCBpZiBjYWxsZXIgZGlkbid0IHNwZWNpZnkKIAkgKi8KIAlpbmRl eFJlbGF0aW9uTmFtZSA9IHN0bXQtPmlkeG5hbWU7CisJYXV4SW5kZXhSZWxhdGlvbk5hbWUgPSBO VUxMOwogCWlmIChpbmRleFJlbGF0aW9uTmFtZSA9PSBOVUxMKQogCQlpbmRleFJlbGF0aW9uTmFt ZSA9IENob29zZUluZGV4TmFtZShSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAogCQkJCQkJ CQkJCQluYW1lc3BhY2VJZCwKQEAgLTgxNSw2ICs4MTUsMTIgQEAKIAkJCQkJCQkJCQkJc3RtdC0+ ZXhjbHVkZU9wTmFtZXMsCiAJCQkJCQkJCQkJCXN0bXQtPnByaW1hcnksCiAJCQkJCQkJCQkJCXN0 bXQtPmlzY29uc3RyYWludCk7CisJaWYgKGNvbmN1cnJlbnQpCisJCWF1eEluZGV4UmVsYXRpb25O YW1lID0gQ2hvb3NlUmVsYXRpb25OYW1lKGluZGV4UmVsYXRpb25OYW1lLAorCQkJCQkJCQkJCQkJ ICBOVUxMLAorCQkJCQkJCQkJCQkJICAiY2NhdXgiLAorCQkJCQkJCQkJCQkJICBuYW1lc3BhY2VJ ZCwKKwkJCQkJCQkJCQkJCSAgZmFsc2UpOwogCiAJLyoKIAkgKiBsb29rIHVwIHRoZSBhY2Nlc3Mg bWV0aG9kLCB2ZXJpZnkgaXQgY2FuIGhhbmRsZSB0aGUgcmVxdWVzdGVkIGZlYXR1cmVzCkBAIC0x MTE2LDEwICsxMTIyLDYgQEAKIAkJfQogCX0KIAotCS8qIElzIGluZGV4IHNhZmUgZm9yIG90aGVy cyB0byBpZ25vcmU/ICBTZWUgc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKSAqLwotCXNhZmVfaW5k ZXggPSBpbmRleEluZm8tPmlpX0V4cHJlc3Npb25zID09IE5JTCAmJgotCQlpbmRleEluZm8tPmlp X1ByZWRpY2F0ZSA9PSBOSUw7Ci0KIAkvKgogCSAqIFJlcG9ydCBpbmRleCBjcmVhdGlvbiBpZiBh cHByb3ByaWF0ZSAoZGVsYXkgdGhpcyB0aWxsIGFmdGVyIG1vc3Qgb2YgdGhlCiAJICogZXJyb3Ig Y2hlY2tzKQpAQCAtMTE5OSw3ICsxMjAxLDggQEAKIAkJCQkJIGNvbG9wdGlvbnMsIE5VTEwsIHJl bG9wdGlvbnMsCiAJCQkJCSBmbGFncywgY29uc3RyX2ZsYWdzLAogCQkJCQkgYWxsb3dTeXN0ZW1U YWJsZU1vZHMsICFjaGVja19yaWdodHMsCi0JCQkJCSAmY3JlYXRlZENvbnN0cmFpbnRJZCk7CisJ CQkJCSAmY3JlYXRlZENvbnN0cmFpbnRJZCwKKwkJCQkJIHJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0 ZW5jZSk7CiAKIAlPYmplY3RBZGRyZXNzU2V0KGFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwg aW5kZXhSZWxhdGlvbklkKTsKIApAQCAtMTU5NSw2ICsxNTk4LDI4IEBACiAKIAkJcmV0dXJuIGFk ZHJlc3M7CiAJfQorCWVsc2UKKwl7CisJCU9pZAkJCXNhdmVfdXNlcmlkOworCQlpbnQJCQlzYXZl X3NlY19jb250ZXh0OworCQlpbnQJCQlzYXZlX25lc3RsZXZlbDsKKworCQlHZXRVc2VySWRBbmRT ZWNDb250ZXh0KCZzYXZlX3VzZXJpZCwgJnNhdmVfc2VjX2NvbnRleHQpOworCQlTZXRVc2VySWRB bmRTZWNDb250ZXh0KHJlbC0+cmRfcmVsLT5yZWxvd25lciwKKwkJCQkJCQkgICBzYXZlX3NlY19j b250ZXh0IHwgU0VDVVJJVFlfUkVTVFJJQ1RFRF9PUEVSQVRJT04pOworCQlzYXZlX25lc3RsZXZl bCA9IE5ld0dVQ05lc3RMZXZlbCgpOworCQlSZXN0cmljdFNlYXJjaFBhdGgoKTsKKworCQlhdXhJ bmRleFJlbGF0aW9uSWQgPSBpbmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChyZWwsIGluZGV4 UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQl0YWJsZXNwYWNlSWQsIGF1eEluZGV4UmVsYXRpb25O YW1lKTsKKwkJT2JqZWN0QWRkcmVzc1NldChhdXhBZGRyZXNzLCBSZWxhdGlvblJlbGF0aW9uSWQs IGF1eEluZGV4UmVsYXRpb25JZCk7CisKKwkJLyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBl eGVjdXRlZCBieSBpbmRleCBmdW5jdGlvbnMgKi8KKwkJQXRFT1hhY3RfR1VDKGZhbHNlLCBzYXZl X25lc3RsZXZlbCk7CisKKwkJLyogUmVzdG9yZSB1c2VyaWQgYW5kIHNlY3VyaXR5IGNvbnRleHQg Ki8KKwkJU2V0VXNlcklkQW5kU2VjQ29udGV4dChzYXZlX3VzZXJpZCwgc2F2ZV9zZWNfY29udGV4 dCk7CisJfQogCiAJLyogc2F2ZSBsb2NrcmVsaWQgYW5kIGxvY2t0YWcgZm9yIGJlbG93LCB0aGVu IGNsb3NlIHJlbCAqLwogCWhlYXByZWxpZCA9IHJlbC0+cmRfbG9ja0luZm8ubG9ja1JlbElkOwpA QCAtMTYyNiwxMSArMTY1MSwxOCBAQAogCiAJUG9wQWN0aXZlU25hcHNob3QoKTsKIAlDb21taXRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKLQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJewor CQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCi0JLyogVGVsbCBjb25jdXJyZW50IGluZGV4 IGJ1aWxkcyB0byBpZ25vcmUgdXMsIGlmIGluZGV4IHF1YWxpZmllcyAqLwotCWlmIChzYWZlX2lu ZGV4KQotCQlzZXRfaW5kZXhzYWZlX3Byb2NmbGFncygpOworCQlXYWl0Rm9yTG9ja2VycyhoZWFw bG9ja3RhZywgU2hhcmVMb2NrLCB0cnVlKTsKKwkJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKHRh YmxlSWQsIGF1eEluZGV4UmVsYXRpb25JZCk7CisKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CisJfQorCisJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwogCiAJLyoKIAkgKiBUaGUg aW5kZXggaXMgbm93IHZpc2libGUsIHNvIHdlIGNhbiByZXBvcnQgdGhlIE9JRC4gIFdoaWxlIG9u IGl0LApAQCAtMTY4NSwyNSArMTcxNywxNSBAQAogCSAqIEhPVC1jaGFpbiBvciB0aGUgZXh0ZW5z aW9uIG9mIHRoZSBjaGFpbiBpcyBIT1Qtc2FmZSBmb3IgdGhpcyBpbmRleC4KIAkgKi8KIAotCS8q IFNldCBBY3RpdmVTbmFwc2hvdCBzaW5jZSBmdW5jdGlvbnMgaW4gdGhlIGluZGV4ZXMgbWF5IG5l ZWQgaXQgKi8KLQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsK LQogCS8qIFBlcmZvcm0gY29uY3VycmVudCBidWlsZCBvZiBpbmRleCAqLwogCWluZGV4X2NvbmN1 cnJlbnRseV9idWlsZCh0YWJsZUlkLCBpbmRleFJlbGF0aW9uSWQpOwogCi0JLyogd2UgY2FuIGRv IGF3YXkgd2l0aCBvdXIgc25hcHNob3QgKi8KLQlQb3BBY3RpdmVTbmFwc2hvdCgpOwotCiAJLyoK IAkgKiBDb21taXQgdGhpcyB0cmFuc2FjdGlvbiB0byBtYWtlIHRoZSBpbmRpc3JlYWR5IHVwZGF0 ZSB2aXNpYmxlLgogCSAqLwogCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCVN0YXJ0VHJh bnNhY3Rpb25Db21tYW5kKCk7CiAKLQkvKiBUZWxsIGNvbmN1cnJlbnQgaW5kZXggYnVpbGRzIHRv IGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCi0JaWYgKHNhZmVfaW5kZXgpCi0JCXNl dF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7Ci0KIAkvKgogCSAqIFBoYXNlIDMgb2YgY29uY3VycmVu dCBpbmRleCBidWlsZAogCSAqCkBAIC0xNzEzLDQxICsxNzM1LDE3IEBACiAJcGdzdGF0X3Byb2dy ZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVBVEVJRFhfUEhBU0UsCiAJCQkJCQkJCSBQUk9H UkVTU19DUkVBVEVJRFhfUEhBU0VfV0FJVF8yKTsKIAlXYWl0Rm9yTG9ja2VycyhoZWFwbG9ja3Rh ZywgU2hhcmVMb2NrLCB0cnVlKTsKKwlpbmRleF9zZXRfc3RhdGVfZmxhZ3MoYXV4SW5kZXhSZWxh dGlvbklkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKIAotCS8qCi0JICogTm93IHRha2UgdGhlICJyZWZlcmVuY2Ugc25hcHNob3QiIHRoYXQg d2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4KCkKLQkgKiB0byBmaWx0ZXIgY2FuZGlkYXRl IHR1cGxlcy4gIEJld2FyZSEgIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNuYXBzaG90cyBpbgotCSAq IHVzZSB0aGF0IHRyZWF0IHNvbWUgdHJhbnNhY3Rpb24gYXMgaW4tcHJvZ3Jlc3MgdGhhdCBvdXIg cmVmZXJlbmNlCi0JICogc25hcHNob3QgdHJlYXRzIGFzIGNvbW1pdHRlZC4gIElmIHN1Y2ggYSBy ZWNlbnRseS1jb21taXR0ZWQgdHJhbnNhY3Rpb24KLQkgKiBkZWxldGVkIHR1cGxlcyBpbiB0aGUg dGFibGUsIHdlIHdpbGwgbm90IGluY2x1ZGUgdGhlbSBpbiB0aGUgaW5kZXg7IHlldAotCSAqIHRo b3NlIHRyYW5zYWN0aW9ucyB3aGljaCBzZWUgdGhlIGRlbGV0aW5nIG9uZSBhcyBzdGlsbC1pbi1w cm9ncmVzcyB3aWxsCi0JICogZXhwZWN0IHN1Y2ggdHVwbGVzIHRvIGJlIHRoZXJlIG9uY2Ugd2Ug bWFyayB0aGUgaW5kZXggYXMgdmFsaWQuCi0JICoKLQkgKiBXZSBzb2x2ZSB0aGlzIGJ5IHdhaXRp bmcgZm9yIGFsbCBlbmRhbmdlcmVkIHRyYW5zYWN0aW9ucyB0byBleGl0IGJlZm9yZQotCSAqIHdl IG1hcmsgdGhlIGluZGV4IGFzIHZhbGlkLgotCSAqCi0JICogV2UgYWxzbyBzZXQgQWN0aXZlU25h cHNob3QgdG8gdGhpcyBzbmFwLCBzaW5jZSBmdW5jdGlvbnMgaW4gaW5kZXhlcyBtYXkKLQkgKiBu ZWVkIGEgc25hcHNob3QuCi0JICovCi0Jc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRy YW5zYWN0aW9uU25hcHNob3QoKSk7Ci0JUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwlT dGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCiAJLyoKIAkgKiBTY2FuIHRoZSBpbmRleCBhbmQg dGhlIGhlYXAsIGluc2VydCBhbnkgbWlzc2luZyBpbmRleCBlbnRyaWVzLgogCSAqLwotCXZhbGlk YXRlX2luZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgc25hcHNob3QpOworCWxpbWl0WG1p biA9IHZhbGlkYXRlX2luZGV4KHRhYmxlSWQsIGluZGV4UmVsYXRpb25JZCwgYXV4SW5kZXhSZWxh dGlvbklkKTsKKwlBc3NlcnQoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpOwog Ci0JLyoKLQkgKiBEcm9wIHRoZSByZWZlcmVuY2Ugc25hcHNob3QuICBXZSBtdXN0IGRvIHRoaXMg YmVmb3JlIHdhaXRpbmcgb3V0IG90aGVyCi0JICogc25hcHNob3QgaG9sZGVycywgZWxzZSB3ZSB3 aWxsIGRlYWRsb2NrIGFnYWluc3Qgb3RoZXIgcHJvY2Vzc2VzIGFsc28KLQkgKiBkb2luZyBDUkVB VEUgSU5ERVggQ09OQ1VSUkVOVExZLCB3aGljaCB3b3VsZCBzZWUgb3VyIHNuYXBzaG90IGFzIG9u ZQotCSAqIHRoZXkgbXVzdCB3YWl0IGZvci4gIEJ1dCBmaXJzdCwgc2F2ZSB0aGUgc25hcHNob3Qn cyB4bWluIHRvIHVzZSBhcwotCSAqIGxpbWl0WG1pbiBmb3IgR2V0Q3VycmVudFZpcnR1YWxYSURz KCkuCi0JICovCi0JbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47Ci0KLQlQb3BBY3RpdmVTbmFw c2hvdCgpOwotCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CiAKIAkvKgogCSAqIFRoZSBz bmFwc2hvdCBzdWJzeXN0ZW0gY291bGQgc3RpbGwgY29udGFpbiByZWdpc3RlcmVkIHNuYXBzaG90 cyB0aGF0CkBAIC0xNzU4LDE0ICsxNzU2LDMyIEBACiAJICogdHJhbnNhY3Rpb24sIGFuZCBkbyBv dXIgd2FpdCBiZWZvcmUgYW55IHNuYXBzaG90IGhhcyBiZWVuIHRha2VuIGluIGl0LgogCSAqLwog CUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJeworCQlTdGFydFRyYW5zYWN0aW9uQ29t bWFuZCgpOworCQlpbmRleF9jb25jdXJyZW50bHlfc2V0X2RlYWQodGFibGVJZCwgYXV4SW5kZXhS ZWxhdGlvbklkKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJfQorCisJV2FpdEZv ckxvY2tlcnMoaGVhcGxvY2t0YWcsIFNoYXJlTG9jaywgdHJ1ZSk7CisKKworCXsKKwkJU3RhcnRU cmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQkvKgorCQkgKiBVc2UgUEVSRk9STV9ERUxFVElPTl9D T05DVVJSRU5UX0xPQ0sgc28gdGhhdCBpbmRleF9kcm9wKCkgdXNlcyB0aGUKKwkJICogcmlnaHQg bG9jayBsZXZlbC4KKwkJICovCisJCXBlcmZvcm1EZWxldGlvbigmYXV4QWRkcmVzcywgRFJPUF9S RVNUUklDVCwKKwkJCQkJCQkJIFBFUkZPUk1fREVMRVRJT05fQ09OQ1VSUkVOVF9MT0NLIHwgUEVS Rk9STV9ERUxFVElPTl9JTlRFUk5BTCk7CisJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwor CX0KKwogCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQkvKiBUZWxsIGNvbmN1cnJlbnQg aW5kZXggYnVpbGRzIHRvIGlnbm9yZSB1cywgaWYgaW5kZXggcXVhbGlmaWVzICovCi0JaWYgKHNh ZmVfaW5kZXgpCi0JCXNldF9pbmRleHNhZmVfcHJvY2ZsYWdzKCk7Ci0KIAkvKiBXZSBzaG91bGQg bm93IGRlZmluaXRlbHkgbm90IGJlIGFkdmVydGlzaW5nIGFueSB4bWluLiAqLwotCUFzc2VydChN eVByb2MtPnhtaW4gPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCUFzc2VydChNeVByb2MtPnht aW4gPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQgJiYgTXlQcm9jLT5jYXRhbG9nWG1pbiA9PSBJbnZh bGlkVHJhbnNhY3Rpb25JZCk7CiAKIAkvKgogCSAqIFRoZSBpbmRleCBpcyBub3cgdmFsaWQgaW4g dGhlIHNlbnNlIHRoYXQgaXQgY29udGFpbnMgYWxsIGN1cnJlbnRseQpAQCAtMzQzMSw5ICszNDQ3 LDkgQEAKIAl0eXBlZGVmIHN0cnVjdCBSZWluZGV4SW5kZXhJbmZvCiAJewogCQlPaWQJCQlpbmRl eElkOworCQlPaWQJCQlhdXhJbmRleElkOwogCQlPaWQJCQl0YWJsZUlkOwogCQlPaWQJCQlhbUlk OwotCQlib29sCQlzYWZlOwkJLyogZm9yIHNldF9pbmRleHNhZmVfcHJvY2ZsYWdzICovCiAJfSBS ZWluZGV4SW5kZXhJbmZvOwogCUxpc3QJICAgKmhlYXBSZWxhdGlvbklkcyA9IE5JTDsKIAlMaXN0 CSAgICppbmRleElkcyA9IE5JTDsKQEAgLTM1NTgsNiArMzU3NCw3IEBACiAJCQkJCQlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7CiAKIAkJCQkJCWlk eCA9IHBhbGxvY19vYmplY3QoUmVpbmRleEluZGV4SW5mbyk7CisJCQkJCQlpZHgtPmF1eEluZGV4 SWQgPSBJbnZhbGlkT2lkOwogCQkJCQkJaWR4LT5pbmRleElkID0gY2VsbE9pZDsKIAkJCQkJCS8q IG90aGVyIGZpZWxkcyBzZXQgbGF0ZXIgKi8KIApAQCAtMzYwOCw2ICszNjI1LDcgQEAKIAkJCQkJ CQlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHByaXZhdGVfY29udGV4dCk7CiAK IAkJCQkJCQlpZHggPSBwYWxsb2Nfb2JqZWN0KFJlaW5kZXhJbmRleEluZm8pOworCQkJCQkJCWlk eC0+YXV4SW5kZXhJZCA9IEludmFsaWRPaWQ7CiAJCQkJCQkJaWR4LT5pbmRleElkID0gY2VsbE9p ZDsKIAkJCQkJCQlpbmRleElkcyA9IGxhcHBlbmQoaW5kZXhJZHMsIGlkeCk7CiAJCQkJCQkJLyog b3RoZXIgZmllbGRzIHNldCBsYXRlciAqLwpAQCAtMzY4OSw2ICszNzA3LDcgQEAKIAkJCQkgKiB0 aGF0IGludmFsaWQgaW5kZXhlcyBhcmUgYWxsb3dlZCBoZXJlLgogCQkJCSAqLwogCQkJCWlkeCA9 IHBhbGxvY19vYmplY3QoUmVpbmRleEluZGV4SW5mbyk7CisJCQkJaWR4LT5hdXhJbmRleElkID0g SW52YWxpZE9pZDsKIAkJCQlpZHgtPmluZGV4SWQgPSByZWxhdGlvbk9pZDsKIAkJCQlpbmRleElk cyA9IGxhcHBlbmQoaW5kZXhJZHMsIGlkeCk7CiAJCQkJLyogb3RoZXIgZmllbGRzIHNldCBsYXRl ciAqLwpAQCAtMzc1NCwxNSArMzc3MywxOCBAQAogCWZvcmVhY2gobGMsIGluZGV4SWRzKQogCXsK IAkJY2hhcgkgICAqY29uY3VycmVudE5hbWU7CisJCWNoYXIJICAgKmF1eENvbmN1cnJlbnROYW1l OwogCQlSZWluZGV4SW5kZXhJbmZvICppZHggPSBsZmlyc3QobGMpOwogCQlSZWluZGV4SW5kZXhJ bmZvICpuZXdpZHg7CiAJCU9pZAkJCW5ld0luZGV4SWQ7CisJCU9pZAkJCWF1eEluZGV4SWQ7CiAJ CVJlbGF0aW9uCWluZGV4UmVsOwogCQlSZWxhdGlvbgloZWFwUmVsOwogCQlPaWQJCQlzYXZlX3Vz ZXJpZDsKIAkJaW50CQkJc2F2ZV9zZWNfY29udGV4dDsKIAkJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7 CiAJCVJlbGF0aW9uCW5ld0luZGV4UmVsOworCQlSZWxhdGlvbglhdXhJbmRleFJlbDsKIAkJTG9j a1JlbElkICAqbG9ja3JlbGlkOwogCQlPaWQJCQl0YWJsZXNwYWNlaWQ7CiAKQEAgLTM3ODEsOSAr MzgwMyw2IEBACiAJCXNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVsKCk7CiAJCVJlc3Ry aWN0U2VhcmNoUGF0aCgpOwogCi0JCS8qIGRldGVybWluZSBzYWZldHkgb2YgdGhpcyBpbmRleCBm b3Igc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MgKi8KLQkJaWR4LT5zYWZlID0gKGluZGV4UmVsLT5y ZF9pbmRleHBycyA9PSBOSUwgJiYKLQkJCQkJIGluZGV4UmVsLT5yZF9pbmRwcmVkID09IE5JTCk7 CiAJCWlkeC0+dGFibGVJZCA9IFJlbGF0aW9uR2V0UmVsaWQoaGVhcFJlbCk7CiAJCWlkeC0+YW1J ZCA9IGluZGV4UmVsLT5yZF9yZWwtPnJlbGFtOwogCkBAIC0zODA1LDYgKzM4MjQsMTEgQEAKIAkJ CQkJCQkJCQkJImNjbmV3IiwKIAkJCQkJCQkJCQkJZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXhSZWwt PnJkX2luZGV4LT5pbmRyZWxpZCksCiAJCQkJCQkJCQkJCWZhbHNlKTsKKwkJYXV4Q29uY3VycmVu dE5hbWUgPSBDaG9vc2VSZWxhdGlvbk5hbWUoZ2V0X3JlbF9uYW1lKGlkeC0+aW5kZXhJZCksCisJ CQkJCQkJCQkJCU5VTEwsCisJCQkJCQkJCQkJCSJjY2F1eCIsCisJCQkJCQkJCQkJCWdldF9yZWxf bmFtZXNwYWNlKGluZGV4UmVsLT5yZF9pbmRleC0+aW5kcmVsaWQpLAorCQkJCQkJCQkJCQlmYWxz ZSk7CiAKIAkJLyogQ2hvb3NlIHRoZSBuZXcgdGFibGVzcGFjZSwgaW5kZXhlcyBvZiB0b2FzdCB0 YWJsZXMgYXJlIG5vdCBtb3ZlZCAqLwogCQlpZiAoT2lkSXNWYWxpZChwYXJhbXMtPnRhYmxlc3Bh Y2VPaWQpICYmCkBAIC0zODE5LDExICszODQzLDE3IEBACiAJCQkJCQkJCQkJCQkJdGFibGVzcGFj ZWlkLAogCQkJCQkJCQkJCQkJCWNvbmN1cnJlbnROYW1lKTsKIAorCQlhdXhJbmRleElkID0gaW5k ZXhfY29uY3VycmVudGx5X2NyZWF0ZV9hdXgoaGVhcFJlbCwKKwkJCQkJCQkJCQkJCQlpZHgtPmlu ZGV4SWQsCisJCQkJCQkJCQkJCQkJdGFibGVzcGFjZWlkLAorCQkJCQkJCQkJCQkJCWF1eENvbmN1 cnJlbnROYW1lKTsKKwogCQkvKgogCQkgKiBOb3cgb3BlbiB0aGUgcmVsYXRpb24gb2YgdGhlIG5l dyBpbmRleCwgYSBzZXNzaW9uLWxldmVsIGxvY2sgaXMKIAkJICogYWxzbyBuZWVkZWQgb24gaXQu CiAJCSAqLwogCQluZXdJbmRleFJlbCA9IGluZGV4X29wZW4obmV3SW5kZXhJZCwgU2hhcmVVcGRh dGVFeGNsdXNpdmVMb2NrKTsKKwkJYXV4SW5kZXhSZWwgPSBpbmRleF9vcGVuKGF1eEluZGV4SWQs IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CiAKIAkJLyoKIAkJICogU2F2ZSB0aGUgbGlzdCBv ZiBPSURzIGFuZCBsb2NrcyBpbiBwcml2YXRlIGNvbnRleHQKQEAgLTM4MzEsOCArMzg2MSw4IEBA CiAJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocHJpdmF0ZV9jb250ZXh0KTsK IAogCQluZXdpZHggPSBwYWxsb2Nfb2JqZWN0KFJlaW5kZXhJbmRleEluZm8pOworCQluZXdpZHgt PmF1eEluZGV4SWQgPSBhdXhJbmRleElkOwogCQluZXdpZHgtPmluZGV4SWQgPSBuZXdJbmRleElk OwotCQluZXdpZHgtPnNhZmUgPSBpZHgtPnNhZmU7CiAJCW5ld2lkeC0+dGFibGVJZCA9IGlkeC0+ dGFibGVJZDsKIAkJbmV3aWR4LT5hbUlkID0gaWR4LT5hbUlkOwogCkBAIC0zODUwLDEwICszODgw LDE0IEBACiAJCWxvY2tyZWxpZCA9IHBhbGxvY19vYmplY3QoTG9ja1JlbElkKTsKIAkJKmxvY2ty ZWxpZCA9IG5ld0luZGV4UmVsLT5yZF9sb2NrSW5mby5sb2NrUmVsSWQ7CiAJCXJlbGF0aW9uTG9j a3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9ja3MsIGxvY2tyZWxpZCk7CisJCWxvY2tyZWxpZCA9IHBh bGxvY19vYmplY3QoTG9ja1JlbElkKTsKKwkJKmxvY2tyZWxpZCA9IGF1eEluZGV4UmVsLT5yZF9s b2NrSW5mby5sb2NrUmVsSWQ7CisJCXJlbGF0aW9uTG9ja3MgPSBsYXBwZW5kKHJlbGF0aW9uTG9j a3MsIGxvY2tyZWxpZCk7CiAKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwog CiAJCWluZGV4X2Nsb3NlKGluZGV4UmVsLCBOb0xvY2spOworCQlpbmRleF9jbG9zZShhdXhJbmRl eFJlbCwgTm9Mb2NrKTsKIAkJaW5kZXhfY2xvc2UobmV3SW5kZXhSZWwsIE5vTG9jayk7CiAKIAkJ LyogUm9sbCBiYWNrIGFueSBHVUMgY2hhbmdlcyBleGVjdXRlZCBieSBpbmRleCBmdW5jdGlvbnMg Ki8KQEAgLTM5MTksNiArMzk1MywyNyBAQAogCiAJUG9wQWN0aXZlU25hcHNob3QoKTsKIAlDb21t aXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCXsKKwkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKKwkJV2FpdEZvckxvY2tlcnNNdWx0aXBsZShsb2NrVGFncywgU2hhcmVMb2NrLCB0cnVlKTsK KwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJfQorCisJZm9yZWFjaChsYywgbmV3SW5k ZXhJZHMpCisJeworCQlSZWluZGV4SW5kZXhJbmZvICpuZXdpZHggPSBsZmlyc3QobGMpOworCisJ CVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsK KworCQkvKiBCdWlsZCBhdXhpbGlhcnkgaW5kZXgsIGl0IGlzIGZhc3QgLSB3aXRob3V0IGFueSBh Y3R1YWwgaGVhcCBzY2FuLCBqdXN0IGFuIGVtcHR5IGluZGV4LiAqLworCQlpbmRleF9jb25jdXJy ZW50bHlfYnVpbGQobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmF1eEluZGV4SWQpOworCisJCUNv bW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCX0KKwogCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5k KCk7CiAKIAkvKgpAQCAtMzk1NSwxMyArNDAxMCw2IEBACiAJCSAqLwogCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwogCi0JCS8qIFRlbGwgY29uY3VycmVudCBpbmRleGluZyB0byBpZ25vcmUgdXMs IGlmIGluZGV4IHF1YWxpZmllcyAqLwotCQlpZiAobmV3aWR4LT5zYWZlKQotCQkJc2V0X2luZGV4 c2FmZV9wcm9jZmxhZ3MoKTsKLQotCQkvKiBTZXQgQWN0aXZlU25hcHNob3Qgc2luY2UgZnVuY3Rp b25zIGluIHRoZSBpbmRleGVzIG1heSBuZWVkIGl0ICovCi0JCVB1c2hBY3RpdmVTbmFwc2hvdChH ZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwotCiAJCS8qCiAJCSAqIFVwZGF0ZSBwcm9ncmVzcyBm b3IgdGhlIGluZGV4IHRvIGJ1aWxkLCB3aXRoIHRoZSBjb3JyZWN0IHBhcmVudAogCQkgKiB0YWJs ZSBpbnZvbHZlZC4KQEAgLTM5NzYsNyArNDAyNCw2IEBACiAJCS8qIFBlcmZvcm0gY29uY3VycmVu dCBidWlsZCBvZiBuZXcgaW5kZXggKi8KIAkJaW5kZXhfY29uY3VycmVudGx5X2J1aWxkKG5ld2lk eC0+dGFibGVJZCwgbmV3aWR4LT5pbmRleElkKTsKIAotCQlQb3BBY3RpdmVTbmFwc2hvdCgpOwog CQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAl9CiAKQEAgLTM5OTksMTIgKzQwNDYsMjEg QEAKIAkJCQkJCQkJIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlUXzIpOwogCVdhaXRGb3JM b2NrZXJzTXVsdGlwbGUobG9ja1RhZ3MsIFNoYXJlTG9jaywgdHJ1ZSk7CiAJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCWZvcmVhY2go bGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0 KGxjKTsKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQlpbmRleF9zZXRfc3RhdGVfZmxh Z3MobmV3aWR4LT5hdXhJbmRleElkLCBJTkRFWF9EUk9QX0NMRUFSX1JFQURZKTsKKwl9CisJQ29t bWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKIAlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKIAl7 CiAJCVJlaW5kZXhJbmRleEluZm8gKm5ld2lkeCA9IGxmaXJzdChsYyk7CiAJCVRyYW5zYWN0aW9u SWQgbGltaXRYbWluOwotCQlTbmFwc2hvdAlzbmFwc2hvdDsKIAogCQlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOwogCkBAIC00MDE1LDE3ICs0MDcxLDYgQEAKIAkJICovCiAJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CiAKLQkJLyogVGVsbCBjb25jdXJyZW50IGluZGV4aW5nIHRvIGlnbm9yZSB1 cywgaWYgaW5kZXggcXVhbGlmaWVzICovCi0JCWlmIChuZXdpZHgtPnNhZmUpCi0JCQlzZXRfaW5k ZXhzYWZlX3Byb2NmbGFncygpOwotCi0JCS8qCi0JCSAqIFRha2UgdGhlICJyZWZlcmVuY2Ugc25h cHNob3QiIHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHZhbGlkYXRlX2luZGV4KCkKLQkJICogdG8gZmls dGVyIGNhbmRpZGF0ZSB0dXBsZXMuCi0JCSAqLwotCQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNo b3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKLQkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBz aG90KTsKLQogCQkvKgogCQkgKiBVcGRhdGUgcHJvZ3Jlc3MgZm9yIHRoZSBpbmRleCB0byBidWls ZCwgd2l0aCB0aGUgY29ycmVjdCBwYXJlbnQKIAkJICogdGFibGUgaW52b2x2ZWQuCkBAIC00MDM3 LDE2ICs0MDgyLDkgQEAKIAkJcHJvZ3Jlc3NfdmFsc1szXSA9IG5ld2lkeC0+YW1JZDsKIAkJcGdz dGF0X3Byb2dyZXNzX3VwZGF0ZV9tdWx0aV9wYXJhbSg0LCBwcm9ncmVzc19pbmRleCwgcHJvZ3Jl c3NfdmFscyk7CiAKLQkJdmFsaWRhdGVfaW5kZXgobmV3aWR4LT50YWJsZUlkLCBuZXdpZHgtPmlu ZGV4SWQsIHNuYXBzaG90KTsKKwkJbGltaXRYbWluID0gdmFsaWRhdGVfaW5kZXgobmV3aWR4LT50 YWJsZUlkLCBuZXdpZHgtPmluZGV4SWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CiAKLQkJLyoKLQkJ ICogV2UgY2FuIG5vdyBkbyBhd2F5IHdpdGggb3VyIGFjdGl2ZSBzbmFwc2hvdCwgd2Ugc3RpbGwg bmVlZCB0byBzYXZlCi0JCSAqIHRoZSB4bWluIGxpbWl0IHRvIHdhaXQgZm9yIG9sZGVyIHNuYXBz aG90cy4KLQkJICovCi0JCWxpbWl0WG1pbiA9IHNuYXBzaG90LT54bWluOwotCi0JCVBvcEFjdGl2 ZVNuYXBzaG90KCk7Ci0JCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJCUFzc2VydCgh VHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CiAKIAkJLyoKIAkJICogVG8gZW5z dXJlIG5vIGRlYWRsb2Nrcywgd2UgbXVzdCBjb21taXQgYW5kIHN0YXJ0IHlldCBhbm90aGVyCkBA IC00MDg1LDEzICs0MTIzLDYgQEAKIAogCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQkv KgotCSAqIEJlY2F1c2UgdGhpcyB0cmFuc2FjdGlvbiBvbmx5IGRvZXMgY2F0YWxvZyBtYW5pcHVs YXRpb25zIGFuZCBkb2Vzbid0IGRvCi0JICogYW55IGluZGV4IG9wZXJhdGlvbnMsIHdlIGNhbiBz ZXQgdGhlIFBST0NfSU5fU0FGRV9JQyBmbGFnIGhlcmUKLQkgKiB1bmNvbmRpdGlvbmFsbHkuCi0J ICovCi0Jc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3MoKTsKLQogCWZvcmJvdGgobGMsIGluZGV4SWRz LCBsYzIsIG5ld0luZGV4SWRzKQogCXsKIAkJUmVpbmRleEluZGV4SW5mbyAqb2xkaWR4ID0gbGZp cnN0KGxjKTsKQEAgLTQxNzEsNiArNDIwMiwxNiBAQAogCQlpbmRleF9jb25jdXJyZW50bHlfc2V0 X2RlYWQob2xkaWR4LT50YWJsZUlkLCBvbGRpZHgtPmluZGV4SWQpOwogCX0KIAorCWZvcmVhY2go bGMsIG5ld0luZGV4SWRzKQorCXsKKwkJUmVpbmRleEluZGV4SW5mbyAqbmV3aWR4ID0gbGZpcnN0 KGxjKTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCWluZGV4X2NvbmN1cnJlbnRs eV9zZXRfZGVhZChuZXdpZHgtPnRhYmxlSWQsIG5ld2lkeC0+YXV4SW5kZXhJZCk7CisJfQorCisK IAkvKiBDb21taXQgdGhpcyB0cmFuc2FjdGlvbiB0byBtYWtlIHRoZSB1cGRhdGVzIHZpc2libGUu ICovCiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAJU3RhcnRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKQEAgLTQyMDQsNiArNDI0NSwxOCBAQAogCQkJb2JqZWN0LmNsYXNzSWQgPSBSZWxhdGlv blJlbGF0aW9uSWQ7CiAJCQlvYmplY3Qub2JqZWN0SWQgPSBpZHgtPmluZGV4SWQ7CiAJCQlvYmpl Y3Qub2JqZWN0U3ViSWQgPSAwOworCisJCQlhZGRfZXhhY3Rfb2JqZWN0X2FkZHJlc3MoJm9iamVj dCwgb2JqZWN0cyk7CisJCX0KKworCQlmb3JlYWNoKGxjLCBuZXdJbmRleElkcykKKwkJeworCQkJ UmVpbmRleEluZGV4SW5mbyAqaWR4ID0gbGZpcnN0KGxjKTsKKwkJCU9iamVjdEFkZHJlc3Mgb2Jq ZWN0OworCisJCQlvYmplY3QuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKKwkJCW9iamVj dC5vYmplY3RJZCA9IGlkeC0+YXV4SW5kZXhJZDsKKwkJCW9iamVjdC5vYmplY3RTdWJJZCA9IDA7 CiAKIAkJCWFkZF9leGFjdF9vYmplY3RfYWRkcmVzcygmb2JqZWN0LCBvYmplY3RzKTsKIAkJfQpA QCAtNDQyNCwzNyArNDQ3NywzIEBACiAJaGVhcF9mcmVldHVwbGUodHVwKTsKIAl0YWJsZV9jbG9z ZShjbGFzc1JlbCwgUm93RXhjbHVzaXZlTG9jayk7CiB9Ci0KLS8qCi0gKiBTZXQgdGhlIFBST0Nf SU5fU0FGRV9JQyBmbGFnIGluIE15UHJvYy0+c3RhdHVzRmxhZ3MuCi0gKgotICogV2hlbiBkb2lu ZyBjb25jdXJyZW50IGluZGV4IGJ1aWxkcywgd2UgY2FuIHNldCB0aGlzIGZsYWcKLSAqIHRvIHRl bGwgb3RoZXIgcHJvY2Vzc2VzIGNvbmN1cnJlbnRseSBydW5uaW5nIENSRUFURQotICogSU5ERVgg Q09OQ1VSUkVOVExZIG9yIFJFSU5ERVggQ09OQ1VSUkVOVExZIHRvIGlnbm9yZSB1cyB3aGVuCi0g KiBkb2luZyB0aGVpciB3YWl0cyBmb3IgY29uY3VycmVudCBzbmFwc2hvdHMuICBPbiBvbmUgaGFu ZCBpdAotICogYXZvaWRzIHBvaW50bGVzc2x5IHdhaXRpbmcgZm9yIGEgcHJvY2VzcyB0aGF0J3Mg bm90IGludGVyZXN0aW5nCi0gKiBhbnl3YXk7IGJ1dCBtb3JlIGltcG9ydGFudGx5IGl0IGF2b2lk cyBkZWFkbG9ja3MgaW4gc29tZSBjYXNlcy4KLSAqCi0gKiBUaGlzIGNhbiBiZSBkb25lIHNhZmVs eSBvbmx5IGZvciBpbmRleGVzIHRoYXQgZG9uJ3QgZXhlY3V0ZSBhbnkKLSAqIGV4cHJlc3Npb25z IHRoYXQgY291bGQgYWNjZXNzIG90aGVyIHRhYmxlcywgc28gaW5kZXggbXVzdCBub3QgYmUKLSAq IGV4cHJlc3Npb25hbCBub3IgcGFydGlhbC4gIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igb25s eSBjYWxsaW5nCi0gKiB0aGlzIHJvdXRpbmUgd2hlbiB0aGF0IGFzc3VtcHRpb24gaG9sZHMgdHJ1 ZS4KLSAqCi0gKiAoVGhlIGZsYWcgaXMgcmVzZXQgYXV0b21hdGljYWxseSBhdCB0cmFuc2FjdGlv biBlbmQsIHNvIGl0IG11c3QgYmUKLSAqIHNldCBmb3IgZWFjaCB0cmFuc2FjdGlvbi4pCi0gKi8K LXN0YXRpYyBpbmxpbmUgdm9pZAotc2V0X2luZGV4c2FmZV9wcm9jZmxhZ3Modm9pZCkKLXsKLQkv KgotCSAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJlZm9yZSBpbnN0YWxsaW5nIHhpZCBv ciB4bWluIGluIE15UHJvYzsKLQkgKiBvdGhlcndpc2UsIGNvbmN1cnJlbnQgcHJvY2Vzc2VzIGNv dWxkIHNlZSBhbiBYbWluIHRoYXQgbW92ZXMgYmFja3dhcmRzLgotCSAqLwotCUFzc2VydChNeVBy b2MtPnhpZCA9PSBJbnZhbGlkVHJhbnNhY3Rpb25JZCAmJgotCQkgICBNeVByb2MtPnhtaW4gPT0g SW52YWxpZFRyYW5zYWN0aW9uSWQpOwotCi0JTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBM V19FWENMVVNJVkUpOwotCU15UHJvYy0+c3RhdHVzRmxhZ3MgfD0gUFJPQ19JTl9TQUZFX0lDOwot CVByb2NHbG9iYWwtPnN0YXR1c0ZsYWdzW015UHJvYy0+cGd4YWN0b2ZmXSA9IE15UHJvYy0+c3Rh dHVzRmxhZ3M7Ci0JTFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKLX0KSW5kZXg6IHNyYy9i aW4vcGdfYW1jaGVjay90LzAwNl9jb25jdXJyZW50bHkucGwKSURFQSBhZGRpdGlvbmFsIGluZm86 ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRF UAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2FtY2hlY2svdC8w MDZfY29uY3VycmVudGx5LnBsIGIvc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA2X2NvbmN1cnJlbnRs eS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCShyZXZpc2lvbiAzZGVhNzJi NjJhZGM4ODA2OTE3ZGM0NTliODJmZjQ0ZDk2MmJjYjEyKQorKysgYi9zcmMvYmluL3BnX2FtY2hl Y2svdC8wMDZfY29uY3VycmVudGx5LnBsCShyZXZpc2lvbiAzZGVhNzJiNjJhZGM4ODA2OTE3ZGM0 NTliODJmZjQ0ZDk2MmJjYjEyKQpAQCAtMCwwICsxLDMwNyBAQAorCisjIENvcHlyaWdodCAoYykg MjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IFJFSU5E RVggQ09OQ1VSUkVOVExZIHdpdGggY29uY3VycmVudCBtb2RpZmljYXRpb25zIGFuZCBIT1QgdXBk YXRlcwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIENvbmZpZzsKK3VzZSBFcnJu bzsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsKK3VzZSBJUEM6OlN5c1Y7Cit1 c2UgdGhyZWFkczsKK3VzZSBUZXN0OjpNb3JlOwordXNlIFRlc3Q6OkJ1aWxkZXI7CisKK2lmICgk QCB8fCAkd2luZG93c19vcykKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdGb3JrIGFuZCBzaGFyZWQg bWVtb3J5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcGxhdGZvcm0nOworfQorCisjIFRPRE86 IHJlZmFjdG9yIHRvIGh0dHBzOi8vbWV0YWNwYW4ub3JnL3BvZC9JUEMlM0ElM0FTaGFyZWFibGUK K215ICgkcGlkLCAkc2htZW1faWQsICRzaG1lbV9rZXksICAkc2htZW1fc2l6ZSk7CitldmFsICdz dWIgSVBDX0NSRUFUIHswMDAxMDAwfScgdW5sZXNzIGRlZmluZWQgJklQQ19DUkVBVDsKKyRzaG1l bV9zaXplID0gNDsKKyRzaG1lbV9rZXkgPSByYW5kKDEwMDAwMDApOworJHNobWVtX2lkID0gc2ht Z2V0KCRzaG1lbV9rZXksICRzaG1lbV9zaXplLCAmSVBDX0NSRUFUIHwgMDc3Nykgb3IgZGllICJD YW4ndCBzaG1nZXQ6ICQhIjsKK3NobXdyaXRlKCRzaG1lbV9pZCwgIndhaXQiLCAwLCAkc2htZW1f c2l6ZSkgb3IgZGllICJDYW4ndCBzaG13cml0ZTogJCEiOworCitteSAkcHNxbF90aW1lb3V0ID0g SVBDOjpSdW46OnRpbWVyKCRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0 KTsKKyMKKyMgVGVzdCBzZXQtdXAKKyMKK215ICgkbm9kZSwgJHJlc3VsdCk7Ciskbm9kZSA9IFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnUkNfdGVzdCcpOworJG5vZGUtPmluaXQ7Cisk bm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJJ2xvY2tfdGltZW91dCA9ICcg LiAoMTAwMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KSk7Cisk bm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdmc3luYyA9IG9mZicpOworJG5v ZGUtPnN0YXJ0OworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBFWFRFTlNJ T04gYW1jaGVjaykpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBUQUJM RSB0YmwoaSBpbnQgcHJpbWFyeSBrZXksCisJCQkJCQkJCWMxIG1vbmV5IGRlZmF1bHQgMCwgYzIg bW9uZXkgZGVmYXVsdCAwLAorCQkJCQkJCQljMyBtb25leSBkZWZhdWx0IDAsIHVwZGF0ZWRfYXQg dGltZXN0YW1wKSkpOworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBJTkRF WCBpZHggT04gdGJsKGkpKSk7CisKK215ICRidWlsZGVyID0gVGVzdDo6TW9yZS0+YnVpbGRlcjsK KyRidWlsZGVyLT51c2VfbnVtYmVycygwKTsKKyRidWlsZGVyLT5ub19wbGFuKCk7CisKK215ICRj aGlsZCAgPSAkYnVpbGRlci0+Y2hpbGQoInBnX2JlbmNoIik7CisKK2lmKCFkZWZpbmVkKCRwaWQg PSBmb3JrKCkpKSB7CisJIyBmb3JrIHJldHVybmVkIHVuZGVmLCBzbyB1bnN1Y2Nlc3NmdWwKKwlk aWUgIkNhbm5vdCBmb3JrIGEgY2hpbGQ6ICQhIjsKK30gZWxzaWYgKCRwaWQgPT0gMCkgeworCisJ JG5vZGUtPnBnYmVuY2goCisJCSctLW5vLXZhY3V1bSAtLWNsaWVudD0xMCAtLXRyYW5zYWN0aW9u cz0xMDAwMCcsCisJCTAsCisJCVtxcnthY3R1YWxseSBwcm9jZXNzZWR9XSwKKwkJW3Fye14kfV0s CisJCSdjb25jdXJyZW50IElOU0VSVHMsIFVQREFURVMgYW5kIFJDJywKKwkJeworCQkJJzAwMV9w Z2JlbmNoX2NvbmN1cnJlbnRfdHJhbnNhY3Rpb25faW5zZXJ0cycgPT4gcSgKKwkJCQlCRUdJTjsK KwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAwLDAsMCwwLG5vdygpKQor CQkJCQlvbiBjb25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJ CQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAwLDAsMCwwLG5vdygpKQorCQkJ CQlvbiBjb25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlJ TlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAwLDAsMCwwLG5vdygpKQorCQkJCQlv biBjb25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlJTlNF UlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAwLDAsMCwwLG5vdygpKQorCQkJCQlvbiBj b25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlJTlNFUlQg SU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAwLDAsMCwwLG5vdygpKQorCQkJCQlvbiBjb25m bGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3coKTsKKwkJCQlDT01NSVQ7CisJ CQkgICksCisJCQknMDAyX3BnYmVuY2hfY29uY3VycmVudF90cmFuc2FjdGlvbl9pbnNlcnRzJyA9 PiBxKAorCQkJCUJFR0lOOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMocmFuZG9tKCkqMTAw MDAwLDAsMCwwLG5vdygpKQorCQkJCQlvbiBjb25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0 ZWRfYXQgPSBub3coKTsKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAw MCwwLDAsMCxub3coKSkKKwkJCQkJb24gY29uZmxpY3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVk X2F0ID0gbm93KCk7CisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhyYW5kb20oKSoxMDAwMDAs MCwwLDAsbm93KCkpCisJCQkJCW9uIGNvbmZsaWN0KGkpIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZF9h dCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMocmFuZG9tKCkqMTAwMDAwLDAs MCwwLG5vdygpKQorCQkJCQlvbiBjb25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQg PSBub3coKTsKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAwMCwwLDAs MCxub3coKSkKKwkJCQkJb24gY29uZmxpY3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0g bm93KCk7CisJCQkJQ09NTUlUOworCQkJICApLAorCQkJIyBFbnN1cmUgc29tZSBIT1QgdXBkYXRl cyBoYXBwZW4KKwkJCScwMDNfcGdiZW5jaF9jb25jdXJyZW50X3RyYW5zYWN0aW9uX3VwZGF0ZXMn ID0+IHEoCisJCQkJQkVHSU47CisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhyYW5kb20oKSox MDAwLDAsMCwwLG5vdygpKQorCQkJCQlvbiBjb25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0 ZWRfYXQgPSBub3coKTsKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAs MCwwLDAsbm93KCkpCisJCQkJCW9uIGNvbmZsaWN0KGkpIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZF9h dCA9IG5vdygpOworCQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMocmFuZG9tKCkqMTAwMCwwLDAs MCxub3coKSkKKwkJCQkJb24gY29uZmxpY3QoaSkgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0g bm93KCk7CisJCQkJSU5TRVJUIElOVE8gdGJsIFZBTFVFUyhyYW5kb20oKSoxMDAwLDAsMCwwLG5v dygpKQorCQkJCQlvbiBjb25mbGljdChpKSBkbyB1cGRhdGUgc2V0IHVwZGF0ZWRfYXQgPSBub3co KTsKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAsMCwwLDAsbm93KCkp CisJCQkJCW9uIGNvbmZsaWN0KGkpIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZF9hdCA9IG5vdygpOwor CQkJCUNPTU1JVDsKKwkJCSAgKQorCQl9KTsKKworCWlmICgkY2hpbGQtPmlzX3Bhc3NpbmcoKSkg eworCQlzaG13cml0ZSgkc2htZW1faWQsICJkb25lIiwgMCwgJHNobWVtX3NpemUpIG9yIGRpZSAi Q2FuJ3Qgc2htd3JpdGU6ICQhIjsKKwl9IGVsc2UgeworCQlzaG13cml0ZSgkc2htZW1faWQsICJm YWlsIiwgMCwgJHNobWVtX3NpemUpIG9yIGRpZSAiQ2FuJ3Qgc2htd3JpdGU6ICQhIjsKKwl9CisK KwlteSAkcGdfYmVuY2hfZm9ya19mbGFnOworCXdoaWxlICgxKSB7CisJCXNobXJlYWQoJHNobWVt X2lkLCAkcGdfYmVuY2hfZm9ya19mbGFnLCAwLCAkc2htZW1fc2l6ZSkgb3IgZGllICJDYW4ndCBz aG1yZWFkOiAkISI7CisJCXNsZWVwKDAuMSk7CisJCWxhc3QgaWYgJHBnX2JlbmNoX2ZvcmtfZmxh ZyBlcSAic3RvcCI7CisJfQorfSBlbHNlIHsKKwlteSAkcGdfYmVuY2hfZm9ya19mbGFnOworCXNo bXJlYWQoJHNobWVtX2lkLCAkcGdfYmVuY2hfZm9ya19mbGFnLCAwLCAkc2htZW1fc2l6ZSkgb3Ig ZGllICJDYW4ndCBzaG1yZWFkOiAkISI7CisKKwlzdWJ0ZXN0ICdyZWluZGV4IHJ1biBzdWJ0ZXN0 JyA9PiBzdWIgeworCQlpcygkcGdfYmVuY2hfZm9ya19mbGFnLCAid2FpdCIsICJwZ19iZW5jaF9m b3JrX2ZsYWcgaXMgY29ycmVjdCIpOworCisJCW15ICVwc3FsID0gKHN0ZGluID0+ICcnLCBzdGRv dXQgPT4gJycsIHN0ZGVyciA9PiAnJyk7CisJCSRwc3Fse3J1bn0gPSBJUEM6OlJ1bjo6c3RhcnQo CisJCQlbICdwc3FsJywgJy1YQScsICctZicsICctJywgJy1kJywgJG5vZGUtPmNvbm5zdHIoJ3Bv c3RncmVzJykgXSwKKwkJCSc8JywKKwkJCVwkcHNxbHtzdGRpbn0sCisJCQknPicsCisJCQlcJHBz cWx7c3Rkb3V0fSwKKwkJCScyPicsCisJCQlcJHBzcWx7c3RkZXJyfSwKKwkJCSRwc3FsX3RpbWVv dXQpOworCisJCW15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyLCAkbiwgJHN0ZGVycl9zYXZl ZCk7CisJCSRuID0gMDsKKworCQkkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBxKENSRUFURSBGVU5D VElPTiBwcmVkaWNhdGVfc3RhYmxlKCkgUkVUVVJOUyBib29sIElNTVVUQUJMRQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCRUdJTgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRVhFQ1VURSAnU0VMRUNUIHR4aWRfY3VycmVudCgpJzsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTiB0cnVlOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVORDsgJCQ7KSk7CisKKwkJJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywg cShDUkVBVEUgRlVOQ1RJT04gcHJlZGljYXRlX2NvbnN0KGludGVnZXIpIFJFVFVSTlMgYm9vbCBJ TU1VVEFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQU5HVUFHRSBwbHBn c3FsIEFTICQkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkVHSU4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTiBNT0QoJDEsIDIpID0gMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkQ7ICQkOykpOworCQl3aGlsZSAoMSkK KwkJeworCisJCQlpZiAoaW50KHJhbmQoMikpID09IDApIHsKKwkJCQkoJHJlc3VsdCwgJHN0ZG91 dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBxKEFMVEVSIFRBQkxFIHRibCBT RVQgKHBhcmFsbGVsX3dvcmtlcnM9MSk7KSk7CisJCQl9IGVsc2UgeworCQkJCSgkcmVzdWx0LCAk c3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsIHEoQUxURVIgVEFCTEUg dGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz00KTspKTsKKwkJCX0KKwkJCWlzKCRyZXN1bHQsICcw JywgJ0FMVEVSIFRBQkxFIGlzIGNvcnJlY3QnKTsKKworCQkJaWYgKDEpCisJCQl7CisJCQkJKCRy ZXN1bHQsICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcShSRUlO REVYIElOREVYIENPTkNVUlJFTlRMWSBpZHg7KSk7CisJCQkJaXMoJHJlc3VsdCwgJzAnLCAnUkVJ TkRFWCBpcyBjb3JyZWN0Jyk7CisKKwkJCQlpZiAoJHJlc3VsdCkgeworCQkJCQlkaWFnKCRzdGRl cnIpOworCQkJCQlCQUlMX09VVCgkc3RkZXJyKTsKKwkJCQl9CisKKwkJCQkoJHJlc3VsdCwgJHN0 ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBxKFNFTEVDVCBidF9pbmRl eF9wYXJlbnRfY2hlY2soJ2lkeCcsIGhlYXBhbGxpbmRleGVkID0+IHRydWUsIHJvb3RkZXNjZW5k ID0+IHRydWUsIGNoZWNrdW5pcXVlID0+IHRydWUpOykpOworCQkJCWlzKCRyZXN1bHQsICcwJywg J2J0X2luZGV4X2NoZWNrIGlzIGNvcnJlY3QnKTsKKwkJCQlpZiAoJHJlc3VsdCkKKwkJCQl7CisJ CQkJCWRpYWcoJHN0ZGVycik7CisJCQkJCUJBSUxfT1VUKCRzdGRlcnIpOworCQkJCX0gZWxzZSB7 CisJCQkJCWRpYWcoJ3JlaW5kZXg6KScgLiAkbisrKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICgx KQorCQkJeworCQkJCW15ICR2YXJpYW50ID0gaW50KHJhbmQoNykpOworCQkJCW15ICRzcWw7CisJ CQkJaWYgKCR2YXJpYW50ID09IDApIHsKKwkJCQkJJHNxbCA9IHEoQ1JFQVRFIElOREVYIENPTkNV UlJFTlRMWSBpZHhfMiBPTiB0YmwoaSwgdXBkYXRlZF9hdCk7KTsKKwkJCQl9IGVsc2lmICgkdmFy aWFudCA9PSAxKSB7CisJCQkJCSRzcWwgPSBxKENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4 XzIgT04gdGJsKGksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRpY2F0ZV9zdGFibGUoKTspOworCQkJ CX0gZWxzaWYgKCR2YXJpYW50ID09IDIpIHsKKwkJCQkJJHNxbCA9IHEoQ1JFQVRFIElOREVYIENP TkNVUlJFTlRMWSBpZHhfMiBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUgTU9EKGksIDIpID0g MDspOworCQkJCX0gZWxzaWYgKCR2YXJpYW50ID09IDMpIHsKKwkJCQkJJHNxbCA9IHEoQ1JFQVRF IElOREVYIENPTkNVUlJFTlRMWSBpZHhfMiBPTiB0YmwoaSwgdXBkYXRlZF9hdCkgV0hFUkUgcHJl ZGljYXRlX2NvbnN0KGkpOyk7CisJCQkJfSBlbHNpZiAoJHZhcmlhbnQgPT0gNCkgeworCQkJCQkk c3FsID0gcShDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeF8yIE9OIHRibChwcmVkaWNhdGVf Y29uc3QoaSkpOyk7CisJCQkJfSBlbHNpZiAoJHZhcmlhbnQgPT0gNSkgeworCQkJCQkkc3FsID0g cShDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeF8yIE9OIHRibChpLCBwcmVkaWNhdGVfY29u c3QoaSksIHVwZGF0ZWRfYXQpIFdIRVJFIHByZWRpY2F0ZV9jb25zdChpKTspOworCQkJCX0gZWxz aWYgKCR2YXJpYW50ID09IDYpIHsKKwkJCQkJJHNxbCA9IHEoQ1JFQVRFIFVOSVFVRSBJTkRFWCBD T05DVVJSRU5UTFkgaWR4XzIgT04gdGJsKGkpOyk7CisJCQkJfSBlbHNlIHsgZGlhZygid3Jvbmcg dmFyaWFudCIpOyB9CisKKwkJCQlkaWFnKCRzcWwpOworCQkJCSgkcmVzdWx0LCAkc3Rkb3V0LCAk c3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsICRzcWwpOworCQkJCWlzKCRyZXN1bHQs ICcwJywgJ0NSRUFURSBJTkRFWCBpcyBjb3JyZWN0Jyk7CisJCQkJJHN0ZGVycl9zYXZlZCA9ICRz dGRlcnI7CisKKwkJCQkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgn cG9zdGdyZXMnLCBxKFNFTEVDVCBidF9pbmRleF9wYXJlbnRfY2hlY2soJ2lkeF8yJywgaGVhcGFs bGluZGV4ZWQgPT4gdHJ1ZSwgcm9vdGRlc2NlbmQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1 ZSk7KSk7CisJCQkJaXMoJHJlc3VsdCwgJzAnLCAnYnRfaW5kZXhfY2hlY2sgZm9yIG5ldyBpbmRl eCBpcyBjb3JyZWN0Jyk7CisJCQkJaWYgKCRyZXN1bHQpCisJCQkJeworCQkJCQlkaWFnKCRzdGRl cnIpOworCQkJCQlkaWFnKCRzdGRlcnJfc2F2ZWQpOworCQkJCQlCQUlMX09VVCgkc3RkZXJyKTsK KwkJCQl9IGVsc2UgeworCQkJCQlkaWFnKCdjcmVhdGU6KScgLiAkbisrKTsKKwkJCQl9CisKKwkJ CQlpZiAoMSkKKwkJCQl7CisJCQkJCSgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2Rl LT5wc3FsKCdwb3N0Z3JlcycsIHEoUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgaWR4XzI7KSk7 CisJCQkJCWlzKCRyZXN1bHQsICcwJywgJ1JFSU5ERVggMiBpcyBjb3JyZWN0Jyk7CisJCQkJCWlm ICgkcmVzdWx0KSB7CisJCQkJCQlkaWFnKCRzdGRlcnIpOworCQkJCQkJQkFJTF9PVVQoJHN0ZGVy cik7CisJCQkJCX0KKworCQkJCQkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+ cHNxbCgncG9zdGdyZXMnLCBxKFNFTEVDVCBidF9pbmRleF9wYXJlbnRfY2hlY2soJ2lkeF8yJywg aGVhcGFsbGluZGV4ZWQgPT4gdHJ1ZSwgcm9vdGRlc2NlbmQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUg PT4gdHJ1ZSk7KSk7CisJCQkJCWlzKCRyZXN1bHQsICcwJywgJ2J0X2luZGV4X2NoZWNrIDIgaXMg Y29ycmVjdCcpOworCQkJCQlpZiAoJHJlc3VsdCkKKwkJCQkJeworCQkJCQkJZGlhZygkc3RkZXJy KTsKKwkJCQkJCUJBSUxfT1VUKCRzdGRlcnIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZGlhZygn cmVpbmRleDI6KScgLiAkbisrKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCSgkcmVzdWx0LCAkc3Rk b3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsIHEoRFJPUCBJTkRFWCBDT05D VVJSRU5UTFkgaWR4XzI7KSk7CisJCQkJaXMoJHJlc3VsdCwgJzAnLCAnRFJPUCBJTkRFWCBpcyBj b3JyZWN0Jyk7CisJCQl9CisJCQlzaG1yZWFkKCRzaG1lbV9pZCwgJHBnX2JlbmNoX2ZvcmtfZmxh ZywgMCwgJHNobWVtX3NpemUpIG9yIGRpZSAiQ2FuJ3Qgc2htcmVhZDogJCEiOworCQkJbGFzdCBp ZiAkcGdfYmVuY2hfZm9ya19mbGFnIG5lICJ3YWl0IjsKKwkJfQorCisJCSMgZXhwbGljaXRseSBz aHV0IGRvd24gcHNxbCBpbnN0YW5jZXMgZ3JhY2VmdWxseQorICAgICAgICAkcHNxbHtzdGRpbn0g Lj0gIlxccVxuIjsKKyAgICAgICAgJHBzcWx7cnVufS0+ZmluaXNoOworCisJCWlzKCRwZ19iZW5j aF9mb3JrX2ZsYWcsICJkb25lIiwgInBnX2JlbmNoX2ZvcmtfZmxhZyBpcyBjb3JyZWN0Iik7CisJ fTsKKworCSRjaGlsZC0+ZmluYWxpemUoKTsKKwkkY2hpbGQtPnN1bW1hcnkoKTsKKwkkbm9kZS0+ c3RvcDsKKwlkb25lX3Rlc3RpbmcoKTsKKworCXNobXdyaXRlKCRzaG1lbV9pZCwgInN0b3AiLCAw LCAkc2htZW1fc2l6ZSkgb3IgZGllICJDYW4ndCBzaG13cml0ZTogJCEiOworfQorCisjIFNlbmQg cXVlcnksIHdhaXQgdW50aWwgc3RyaW5nIG1hdGNoZXMKK3N1YiBzZW5kX3F1ZXJ5X2FuZF93YWl0 Cit7CisJbXkgKCRwc3FsLCAkcXVlcnksICR1bnRsKSA9IEBfOworCW15ICRyZXQ7CisKKwkjIEZv ciBlYWNoIHF1ZXJ5IHdlIHJ1biwgd2UnbGwgcmVzdGFydCB0aGUgdGltZW91dC4gIE90aGVyd2lz ZSB0aGUgdGltZW91dAorCSMgd291bGQgYXBwbHkgdG8gdGhlIHdob2xlIHRlc3Qgc2NyaXB0LCBh bmQgd291bGQgbmVlZCB0byBiZSBzZXQgdmVyeSBoaWdoCisJIyB0byBzdXJ2aXZlIHdoZW4gcnVu bmluZyB1bmRlciBWYWxncmluZC4KKwkkcHNxbF90aW1lb3V0LT5yZXNldCgpOworCSRwc3FsX3Rp bWVvdXQtPnN0YXJ0KCk7CisKKwkjIHNlbmQgcXVlcnkKKwkkJHBzcWx7c3RkaW59IC49ICRxdWVy eTsKKwkkJHBzcWx7c3RkaW59IC49ICJcbiI7CisKKwkjIHdhaXQgZm9yIHF1ZXJ5IHJlc3VsdHMK KwkkJHBzcWx7cnVufS0+cHVtcF9uYigpOworCXdoaWxlICgxKQorCXsKKwkJbGFzdCBpZiAkJHBz cWx7c3Rkb3V0fSA9fiAvJHVudGwvOworCQlpZiAoJHBzcWxfdGltZW91dC0+aXNfZXhwaXJlZCkK KwkJeworCQkJZGlhZygiYWJvcnRpbmcgd2FpdDogcHJvZ3JhbSB0aW1lZCBvdXRcbiIKKwkJCQkg IC4gInN0cmVhbSBjb250ZW50czogPj4kJHBzcWx7c3Rkb3V0fTw8XG4iCisJCQkJICAuICJwYXR0 ZXJuIHNlYXJjaGVkIGZvcjogJHVudGxcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG5v dCAkJHBzcWx7cnVufS0+cHVtcGFibGUoKSkKKwkJeworCQkJZGlhZygiYWJvcnRpbmcgd2FpdDog cHJvZ3JhbSBkaWVkXG4iCisJCQkJICAuICJzdHJlYW0gY29udGVudHM6ID4+JCRwc3Fse3N0ZG91 dH08PFxuIgorCQkJCSAgLiAicGF0dGVybiBzZWFyY2hlZCBmb3I6ICR1bnRsXG4iKTsKKwkJCXJl dHVybiAwOworCQl9CisJCSQkcHNxbHtydW59LT5wdW1wKCk7CisJfQorCisJJCRwc3Fse3N0ZG91 dH0gPSAnJzsKKworCXJldHVybiAxOworfQpJbmRleDogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFw aS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oCi0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgJKHJldmlzaW9uIDJiNWY1 Nzk3N2Y2ZDE2Nzk2MTIxZDc5NjgzNWM0OGU0MjQxYjRkYTEpCisrKyBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy90YWJsZWFtLmgJKHJldmlzaW9uIDNkZWE3MmI2MmFkYzg4MDY5MTdkYzQ1OWI4MmZmNDRk OTYyYmNiMTIpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9yZWFkX3N0cmVh bS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBzaG90Lmgi CisjaW5jbHVkZSAidXRpbHMvaW5qZWN0aW9uX3BvaW50LmgiCiAKIAogI2RlZmluZSBERUZBVUxU X1RBQkxFX0FDQ0VTU19NRVRIT0QJImhlYXAiCkBAIC03MCw2ICs3MSw3IEBACiAJICogbmVlZGVk LiBJZiB0YWJsZSBkYXRhIG1heSBiZSBuZWVkZWQsIHNldCBTT19ORUVEX1RVUExFUy4KIAkgKi8K IAlTT19ORUVEX1RVUExFUyA9IDEgPDwgMTAsCisJU09fUkVTRVRfU05BUFNIT1QgPSAxIDw8IDEx LAogfQkJCVNjYW5PcHRpb25zOwogCiAvKgpAQCAtNzAzLDExICs3MDUsMTQgQEAKIAkJCQkJCQkJ CQkgICBUYWJsZVNjYW5EZXNjIHNjYW4pOwogCiAJLyogc2VlIHRhYmxlX2luZGV4X3ZhbGlkYXRl X3NjYW4gZm9yIHJlZmVyZW5jZSBhYm91dCBwYXJhbWV0ZXJzICovCi0Jdm9pZAkJKCppbmRleF92 YWxpZGF0ZV9zY2FuKSAoUmVsYXRpb24gdGFibGVfcmVsLAorCVRyYW5zYWN0aW9uSWQgCQkoKmlu ZGV4X3ZhbGlkYXRlX3NjYW4pIChSZWxhdGlvbiB0YWJsZV9yZWwsCiAJCQkJCQkJCQkJUmVsYXRp b24gaW5kZXhfcmVsLAorCQkJCQkJCQkJCVJlbGF0aW9uIGF1eF9pbmRleF9yZWwsCiAJCQkJCQkJ CQkJc3RydWN0IEluZGV4SW5mbyAqaW5kZXhfaW5mbywKKwkJCQkJCQkJCQlzdHJ1Y3QgSW5kZXhJ bmZvICphdXhfaW5kZXhfaW5mbywKIAkJCQkJCQkJCQlTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJ CQkJCQlzdHJ1Y3QgVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSk7CisJCQkJCQkJCQkJc3RydWN0 IFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkJc3RydWN0IFZhbGlkYXRlSW5k ZXhTdGF0ZSAqYXV4X3N0YXRlKTsKIAogCiAJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MzEsNyAr OTM2LDggQEAKIHN0YXRpYyBpbmxpbmUgVGFibGVTY2FuRGVzYwogdGFibGVfYmVnaW5zY2FuX3N0 cmF0KFJlbGF0aW9uIHJlbCwgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCSAgaW50IG5rZXlzLCBz dHJ1Y3QgU2NhbktleURhdGEgKmtleSwKLQkJCQkJICBib29sIGFsbG93X3N0cmF0LCBib29sIGFs bG93X3N5bmMpCisJCQkJCSAgYm9vbCBhbGxvd19zdHJhdCwgYm9vbCBhbGxvd19zeW5jLAorCQkJ CQkgIGJvb2wgcmVzZXRfc25hcHNob3QpCiB7CiAJdWludDMyCQlmbGFncyA9IFNPX1RZUEVfU0VR U0NBTiB8IFNPX0FMTE9XX1BBR0VNT0RFOwogCkBAIC05MzksNiArOTQ1LDExIEBACiAJCWZsYWdz IHw9IFNPX0FMTE9XX1NUUkFUOwogCWlmIChhbGxvd19zeW5jKQogCQlmbGFncyB8PSBTT19BTExP V19TWU5DOworCWlmIChyZXNldF9zbmFwc2hvdCkKKwl7CisJCUlOSkVDVElPTl9QT0lOVCgidGFi bGVfYmVnaW5zY2FuX3N0cmF0X3Jlc2V0X3NuYXBzaG90cyIpOworCQlmbGFncyB8PSAoU09fUkVT RVRfU05BUFNIT1QgfCBTT19URU1QX1NOQVBTSE9UKTsKKwl9CiAKIAlyZXR1cm4gcmVsLT5yZF90 YWJsZWFtLT5zY2FuX2JlZ2luKHJlbCwgc25hcHNob3QsIG5rZXlzLCBrZXksIE5VTEwsIGZsYWdz KTsKIH0KQEAgLTE4MzUsMTkgKzE4NDYsMjYgQEAKICAqCiAgKiBTZWUgdmFsaWRhdGVfaW5kZXgo KSBmb3IgYW4gZXhwbGFuYXRpb24uCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGlu bGluZSBUcmFuc2FjdGlvbklkCiB0YWJsZV9pbmRleF92YWxpZGF0ZV9zY2FuKFJlbGF0aW9uIHRh YmxlX3JlbCwKLQkJCQkJCSAgUmVsYXRpb24gaW5kZXhfcmVsLAotCQkJCQkJICBzdHJ1Y3QgSW5k ZXhJbmZvICppbmRleF9pbmZvLAotCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCSAg c3RydWN0IFZhbGlkYXRlSW5kZXhTdGF0ZSAqc3RhdGUpCisJCQkJCQkJCSAgIFJlbGF0aW9uIGlu ZGV4X3JlbCwKKwkJCQkJCQkJICAgUmVsYXRpb24gYXV4X2luZGV4X3JlbCwKKwkJCQkJCQkJICAg c3RydWN0IEluZGV4SW5mbyAqaW5kZXhfaW5mbywKKwkJCQkJCQkJICAgc3RydWN0IEluZGV4SW5m byAqYXV4X2luZGV4X2luZm8sCisJCQkJCQkJCSAgIFNuYXBzaG90IHNuYXBzaG90LAorCQkJCQkJ CQkgICBzdHJ1Y3QgVmFsaWRhdGVJbmRleFN0YXRlICpzdGF0ZSwKKwkJCQkJCQkJICAgc3RydWN0 IFZhbGlkYXRlSW5kZXhTdGF0ZSAqYXV4c3RhdGUpCiB7Ci0JdGFibGVfcmVsLT5yZF90YWJsZWFt LT5pbmRleF92YWxpZGF0ZV9zY2FuKHRhYmxlX3JlbCwKLQkJCQkJCQkJCQkJICAgaW5kZXhfcmVs LAotCQkJCQkJCQkJCQkgICBpbmRleF9pbmZvLAotCQkJCQkJCQkJCQkgICBzbmFwc2hvdCwKLQkJ CQkJCQkJCQkJICAgc3RhdGUpOworCXJldHVybiB0YWJsZV9yZWwtPnJkX3RhYmxlYW0tPmluZGV4 X3ZhbGlkYXRlX3NjYW4odGFibGVfcmVsLAorCQkJCQkJCQkJCQkJCQlpbmRleF9yZWwsCisJCQkJ CQkJCQkJCQkJCWF1eF9pbmRleF9yZWwsCisJCQkJCQkJCQkJCQkJCWluZGV4X2luZm8sCisJCQkJ CQkJCQkJCQkJCWF1eF9pbmRleF9pbmZvLAorCQkJCQkJCQkJCQkJCQlzbmFwc2hvdCwKKwkJCQkJ CQkJCQkJCQkJc3RhdGUsCisJCQkJCQkJCQkJCQkJCWF1eHN0YXRlKTsKIH0KKwogCiAKIC8qIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IHNyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaApJREVB IGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmlt cGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvaW5kZXguaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXguaAotLS0g YS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4LmgJKHJldmlzaW9uIDJiNWY1Nzk3N2Y2ZDE2Nzk2 MTIxZDc5NjgzNWM0OGU0MjQxYjRkYTEpCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvaW5kZXgu aAkocmV2aXNpb24gM2RlYTcyYjYyYWRjODgwNjkxN2RjNDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAg LTI2LDYgKzI2LDcgQEAKIAlJTkRFWF9DUkVBVEVfU0VUX1JFQURZLAogCUlOREVYX0NSRUFURV9T RVRfVkFMSUQsCiAJSU5ERVhfRFJPUF9DTEVBUl9WQUxJRCwKKwlJTkRFWF9EUk9QX0NMRUFSX1JF QURZLAogCUlOREVYX0RST1BfU0VUX0RFQUQsCiB9IEluZGV4U3RhdGVGbGFnc0FjdGlvbjsKIApA QCAtNDMsNiArNDQsOCBAQAogI2RlZmluZSBSRUlOREVYT1BUX01JU1NJTkdfT0sgCTB4MDQJLyog c2tpcCBtaXNzaW5nIHJlbGF0aW9ucyAqLwogI2RlZmluZSBSRUlOREVYT1BUX0NPTkNVUlJFTlRM WQkweDA4CS8qIGNvbmN1cnJlbnQgbW9kZSAqLwogCisjZGVmaW5lIFZBTElEQVRFX0lOREVYX1NO QVBTSE9UX1JFU0VUX0lOVEVSVkFMCTUwCS8qIDUwIG1zICovCisKIC8qIHN0YXRlIGluZm8gZm9y IHZhbGlkYXRlX2luZGV4IGJ1bGtkZWxldGUgY2FsbGJhY2sgKi8KIHR5cGVkZWYgc3RydWN0IFZh bGlkYXRlSW5kZXhTdGF0ZQogewpAQCAtODYsNyArODksOCBAQAogCQkJCQkJIGJpdHMxNiBjb25z dHJfZmxhZ3MsCiAJCQkJCQkgYm9vbCBhbGxvd19zeXN0ZW1fdGFibGVfbW9kcywKIAkJCQkJCSBi b29sIGlzX2ludGVybmFsLAotCQkJCQkJIE9pZCAqY29uc3RyYWludElkKTsKKwkJCQkJCSBPaWQg KmNvbnN0cmFpbnRJZCwKKwkJCQkJCSBjaGFyIHJlbHBlcnNpc3RlbmNlKTsKIAogI2RlZmluZQlJ TkRFWF9DT05TVFJfQ1JFQVRFX01BUktfQVNfUFJJTUFSWQkoMSA8PCAwKQogI2RlZmluZQlJTkRF WF9DT05TVFJfQ1JFQVRFX0RFRkVSUkFCTEUJCSgxIDw8IDEpCkBAIC05OCw2ICsxMDIsMTEgQEAK IAkJCQkJCQkJCQkgICBPaWQgb2xkSW5kZXhJZCwKIAkJCQkJCQkJCQkgICBPaWQgdGFibGVzcGFj ZU9pZCwKIAkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpuZXdOYW1lKTsKKworZXh0ZXJuIE9pZAlp bmRleF9jb25jdXJyZW50bHlfY3JlYXRlX2F1eChSZWxhdGlvbiBoZWFwUmVsYXRpb24sCisJCQkJ CQkJCQkJCSBPaWQgbWFpbkluZGV4SWQsCisJCQkJCQkJCQkJCSBPaWQgdGFibGVzcGFjZU9pZCwK KwkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm5ld05hbWUpOwogCiBleHRlcm4gdm9pZCBpbmRleF9j b25jdXJyZW50bHlfYnVpbGQoT2lkIGhlYXBSZWxhdGlvbklkLAogCQkJCQkJCQkJIE9pZCBpbmRl eFJlbGF0aW9uSWQpOwpAQCAtMTQ0LDcgKzE1Myw3IEBACiAJCQkJCQlib29sIGlzcmVpbmRleCwK IAkJCQkJCWJvb2wgcGFyYWxsZWwpOwogCi1leHRlcm4gdm9pZCB2YWxpZGF0ZV9pbmRleChPaWQg aGVhcElkLCBPaWQgaW5kZXhJZCwgU25hcHNob3Qgc25hcHNob3QpOworZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgdmFsaWRhdGVfaW5kZXgoT2lkIGhlYXBJZCwgT2lkIGluZGV4SWQsIE9pZCBhdXhJbmRl eElkKTsKIAogZXh0ZXJuIHZvaWQgaW5kZXhfc2V0X3N0YXRlX2ZsYWdzKE9pZCBpbmRleElkLCBJ bmRleFN0YXRlRmxhZ3NBY3Rpb24gYWN0aW9uKTsKIApJbmRleDogc3JjL2luY2x1ZGUvY29tbWFu ZHMvcHJvZ3Jlc3MuaApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxs aWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmggYi9zcmMvaW5jbHVk ZS9jb21tYW5kcy9wcm9ncmVzcy5oCi0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNz LmgJKHJldmlzaW9uIDJiNWY1Nzk3N2Y2ZDE2Nzk2MTIxZDc5NjgzNWM0OGU0MjQxYjRkYTEpCisr KyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3Byb2dyZXNzLmgJKHJldmlzaW9uIGJiYzA5YTMyM2Nj M2Q2YzU0ZjJkMjZjN2M2MzQyZDM2ZDdlZGViMzEpCkBAIC03OSw2ICs3OSw3IEBACiAKIC8qIFBy b2dyZXNzIHBhcmFtZXRlcnMgZm9yIENSRUFURSBJTkRFWCAqLwogLyogMywgNCBhbmQgNSByZXNl cnZlZCBmb3IgIndhaXRmb3IiIG1ldHJpY3MgKi8KKy8vIFRPRE86IG5ldyBwaGFzZSBuYW1lcwog I2RlZmluZSBQUk9HUkVTU19DUkVBVEVJRFhfQ09NTUFORAkJCQkwCiAjZGVmaW5lIFBST0dSRVNT X0NSRUFURUlEWF9JTkRFWF9PSUQJCQk2CiAjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9BQ0NF U1NfTUVUSE9EX09JRAk4CkBAIC05MSw2ICs5Miw3IEBACiAvKiAxNSBhbmQgMTYgcmVzZXJ2ZWQg Zm9yICJibG9jayBudW1iZXIiIG1ldHJpY3MgKi8KIAogLyogUGhhc2VzIG9mIENSRUFURSBJTkRF WCAoYXMgYWR2ZXJ0aXNlZCB2aWEgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFKSAqLworLy8gVE9E TzogbmV3IHBoYXNlIG5hbWVzCiAjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9XQUlU XzEJCQkxCiAjZGVmaW5lIFBST0dSRVNTX0NSRUFURUlEWF9QSEFTRV9CVUlMRAkJCTIKICNkZWZp bmUgUFJPR1JFU1NfQ1JFQVRFSURYX1BIQVNFX1dBSVRfMgkJCTMKSW5kZXg6IHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vi c3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwr PlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv Y3JlYXRlX2luZGV4Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4 Lm91dAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9pbmRleC5vdXQJKHJl dmlzaW9uIDJiNWY1Nzk3N2Y2ZDE2Nzk2MTIxZDc5NjgzNWM0OGU0MjQxYjRkYTEpCisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2luZGV4Lm91dAkocmV2aXNpb24gZDhkZjlk YWVhNzYzNzQ0NjhjMjhmOGU5ZDYwZDgzNTM5YWFkMDVjOCkKQEAgLTE0MDUsNiArMTQwNSw3IEBA CiBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfaW5kZXgzIE9OIGNvbmN1 cl9oZWFwKGYyKTsKIEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1 cl9pbmRleDMiCiBERVRBSUw6ICBLZXkgKGYyKT0oYikgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5E RVggY29uY3VyX2luZGV4M19jY2F1eDsKIC0tIHRlc3QgdGhhdCBleHByZXNzaW9uIGluZGV4ZXMg YW5kIHBhcnRpYWwgaW5kZXhlcyB3b3JrIGNvbmN1cnJlbnRseQogQ1JFQVRFIElOREVYIENPTkNV UlJFTlRMWSBjb25jdXJfaW5kZXg0IG9uIGNvbmN1cl9oZWFwKGYyKSBXSEVSRSBmMT0nYSc7CiBD UkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDUgb24gY29uY3VyX2hlYXAoZjIp IFdIRVJFIGYxPSd4JzsKQEAgLTI3MDUsNiArMjcwNiw3IEBACiBDUkVBVEUgVU5JUVVFIElOREVY IENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1IE9OIGNvbmN1cl9yZWluZGV4X3RhYjQg KGMxKTsKIEVSUk9SOiAgY291bGQgbm90IGNyZWF0ZSB1bmlxdWUgaW5kZXggImNvbmN1cl9yZWlu ZGV4X2luZDUiCiBERVRBSUw6ICBLZXkgKGMxKT0oMSkgaXMgZHVwbGljYXRlZC4KK0RST1AgSU5E RVggY29uY3VyX3JlaW5kZXhfaW5kNV9jY2F1eDsKIC0tIFJlaW5kZXhpbmcgY29uY3VycmVudGx5 IHRoaXMgaW5kZXggZmFpbHMgd2l0aCB0aGUgc2FtZSBmYWlsdXJlLgogLS0gVGhlIGV4dHJhIGlu ZGV4IGNyZWF0ZWQgaXMgaXRzZWxmIGludmFsaWQsIGFuZCBjYW4gYmUgZHJvcHBlZC4KIFJFSU5E RVggSU5ERVggQ09OQ1VSUkVOVExZIGNvbmN1cl9yZWluZGV4X2luZDU7CkBAIC0yNzE3LDggKzI3 MTksMTAgQEAKICBjMSAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAKIElu ZGV4ZXM6CiAgICAgImNvbmN1cl9yZWluZGV4X2luZDUiIFVOSVFVRSwgYnRyZWUgKGMxKSBJTlZB TElECisgICAgImNvbmN1cl9yZWluZGV4X2luZDVfY2NhdXgiIHN0aXIgKGMxIHJlY29yZF9vcHMp IElOVkFMSUQKICAgICAiY29uY3VyX3JlaW5kZXhfaW5kNV9jY25ldyIgVU5JUVVFLCBidHJlZSAo YzEpIElOVkFMSUQKIAorRFJPUCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjYXV4OwogRFJP UCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3OwogLS0gVGhpcyBtYWtlcyB0aGUgcHJl dmlvdXMgZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KIERF TEVURSBGUk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEgPSAxOwpJbmRleDogc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9pbmRleGluZy5vdXQKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1 YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8 Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2luZGV4aW5nLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5kZXhpbmcub3V0CShyZXZpc2lvbiAyYjVm NTc5NzdmNmQxNjc5NjEyMWQ3OTY4MzVjNDhlNDI0MWI0ZGExKQorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2luZGV4aW5nLm91dAkocmV2aXNpb24gYmJjMDlhMzIzY2MzZDZjNTRmMmQy NmM3YzYzNDJkMzZkN2VkZWIzMSkKQEAgLTE1NzEsMTAgKzE1NzEsMTEgQEAKIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgcGFydGVkX2lzdmFsaWRfaWR4ICAg ICAgICAgICAgIHwgZiAgICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYiAgICB8IAogIHBhcnRl ZF9pc3ZhbGlkX2lkeF8xMSAgICAgICAgICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90 YWJfMTEgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMV9leHByX2lkeAorIHBhcnRlZF9pc3ZhbGlkX2lk eF8xMV9jY2F1eCAgICB8IGYgICAgICAgICAgfCBwYXJ0ZWRfaXN2YWxpZF90YWJfMTEgfCAKICBw YXJ0ZWRfaXN2YWxpZF90YWJfMTJfZXhwcl9pZHggfCB0ICAgICAgICAgIHwgcGFydGVkX2lzdmFs aWRfdGFiXzEyIHwgcGFydGVkX2lzdmFsaWRfdGFiXzFfZXhwcl9pZHgKICBwYXJ0ZWRfaXN2YWxp ZF90YWJfMV9leHByX2lkeCAgfCBmICAgICAgICAgIHwgcGFydGVkX2lzdmFsaWRfdGFiXzEgIHwg cGFydGVkX2lzdmFsaWRfaWR4CiAgcGFydGVkX2lzdmFsaWRfdGFiXzJfZXhwcl9pZHggIHwgdCAg ICAgICAgICB8IHBhcnRlZF9pc3ZhbGlkX3RhYl8yICB8IHBhcnRlZF9pc3ZhbGlkX2lkeAotKDUg cm93cykKKyg2IHJvd3MpCiAKIGRyb3AgdGFibGUgcGFydGVkX2lzdmFsaWRfdGFiOwogLS0gQ2hl Y2sgc3RhdGUgb2YgcmVwbGljYSBpbmRleGVzIHdoZW4gYXR0YWNoaW5nIGEgcGFydGl0aW9uLgpJ bmRleDogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY3JlYXRlX2luZGV4LnNxbApJREVBIGFkZGl0aW9u YWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2gu Q2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9jcmVhdGVfaW5k ZXguc3FsCi0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwJKHJldmlz aW9uIDJiNWY1Nzk3N2Y2ZDE2Nzk2MTIxZDc5NjgzNWM0OGU0MjQxYjRkYTEpCisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9pbmRleC5zcWwJKHJldmlzaW9uIGJiYzA5YTMyM2NjM2Q2 YzU0ZjJkMjZjN2M2MzQyZDM2ZDdlZGViMzEpCkBAIC00OTMsNiArNDkzLDcgQEAKIElOU0VSVCBJ TlRPIGNvbmN1cl9oZWFwIFZBTFVFUyAoJ2InLCd4Jyk7CiAtLSBjaGVjayBpZiBjb25zdHJhaW50 IGlzIGVuZm9yY2VkIHByb3Blcmx5IGF0IGJ1aWxkIHRpbWUKIENSRUFURSBVTklRVUUgSU5ERVgg Q09OQ1VSUkVOVExZIGNvbmN1cl9pbmRleDMgT04gY29uY3VyX2hlYXAoZjIpOworRFJPUCBJTkRF WCBjb25jdXJfaW5kZXgzX2NjYXV4OwogLS0gdGVzdCB0aGF0IGV4cHJlc3Npb24gaW5kZXhlcyBh bmQgcGFydGlhbCBpbmRleGVzIHdvcmsgY29uY3VycmVudGx5CiBDUkVBVEUgSU5ERVggQ09OQ1VS UkVOVExZIGNvbmN1cl9pbmRleDQgb24gY29uY3VyX2hlYXAoZjIpIFdIRVJFIGYxPSdhJzsKIENS RUFURSBJTkRFWCBDT05DVVJSRU5UTFkgY29uY3VyX2luZGV4NSBvbiBjb25jdXJfaGVhcChmMikg V0hFUkUgZjE9J3gnOwpAQCAtMTE0NywxMCArMTE0OCwxMiBAQAogSU5TRVJUIElOVE8gY29uY3Vy X3JlaW5kZXhfdGFiNCBWQUxVRVMgKDEpLCAoMSksICgyKTsKIC0tIFRoaXMgdHJpY2sgY3JlYXRl cyBhbiBpbnZhbGlkIGluZGV4LgogQ1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgY29u Y3VyX3JlaW5kZXhfaW5kNSBPTiBjb25jdXJfcmVpbmRleF90YWI0IChjMSk7CitEUk9QIElOREVY IGNvbmN1cl9yZWluZGV4X2luZDVfY2NhdXg7CiAtLSBSZWluZGV4aW5nIGNvbmN1cnJlbnRseSB0 aGlzIGluZGV4IGZhaWxzIHdpdGggdGhlIHNhbWUgZmFpbHVyZS4KIC0tIFRoZSBleHRyYSBpbmRl eCBjcmVhdGVkIGlzIGl0c2VsZiBpbnZhbGlkLCBhbmQgY2FuIGJlIGRyb3BwZWQuCiBSRUlOREVY IElOREVYIENPTkNVUlJFTlRMWSBjb25jdXJfcmVpbmRleF9pbmQ1OwogXGQgY29uY3VyX3JlaW5k ZXhfdGFiNAorRFJPUCBJTkRFWCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjYXV4OwogRFJPUCBJTkRF WCBjb25jdXJfcmVpbmRleF9pbmQ1X2NjbmV3OwogLS0gVGhpcyBtYWtlcyB0aGUgcHJldmlvdXMg ZmFpbHVyZSBnbyBhd2F5LCBzbyB0aGUgaW5kZXggY2FuIGJlY29tZSB2YWxpZC4KIERFTEVURSBG Uk9NIGNvbmN1cl9yZWluZGV4X3RhYjQgV0hFUkUgYzEgPSAxOwpJbmRleDogc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVt OiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3Bo YXNlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCi0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMJKHJldmlzaW9uIGJiYzA5YTMyM2NjM2Q2 YzU0ZjJkMjZjN2M2MzQyZDM2ZDdlZGViMzEpCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3R3b3BoYXNlLmMJKHJldmlzaW9uIDAzYzRmZjY5Y2JiZmEzMTgyZTY5NzY3MmQ3ZWE3MDRk YjI5MzIxM2YpCkBAIC00NTksNyArNDU5LDcgQEAKIAkJcHJvYy0+dnhpZC5wcm9jTnVtYmVyID0g SU5WQUxJRF9QUk9DX05VTUJFUjsKIAl9CiAJcHJvYy0+eGlkID0geGlkOwotCUFzc2VydChwcm9j LT54bWluID09IEludmFsaWRUcmFuc2FjdGlvbklkKTsKKwlBc3NlcnQocHJvYy0+eG1pbiA9PSBJ bnZhbGlkVHJhbnNhY3Rpb25JZCAmJiBwcm9jLT5jYXRhbG9nWG1pbiA9PSBJbnZhbGlkVHJhbnNh Y3Rpb25JZCk7CiAJcHJvYy0+ZGVsYXlDaGtwdEZsYWdzID0gMDsKIAlwcm9jLT5zdGF0dXNGbGFn cyA9IDA7CiAJcHJvYy0+cGlkID0gMDsKSW5kZXg6IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNv bS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYwotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIu YwkocmV2aXNpb24gYmJjMDlhMzIzY2MzZDZjNTRmMmQyNmM3YzYzNDJkMzZkN2VkZWIzMSkKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMJKHJldmlz aW9uIDAzYzRmZjY5Y2JiZmEzMTgyZTY5NzY3MmQ3ZWE3MDRkYjI5MzIxM2YpCkBAIC0xODQ0LDYg KzE4NDQsNyBAQAogCXNuYXAtPmFjdGl2ZV9jb3VudCA9IDE7CQkvKiBtYXJrIGFzIGFjdGl2ZSBz byBub2JvZHkgZnJlZXMgaXQgKi8KIAlzbmFwLT5yZWdkX2NvdW50ID0gMDsKIAlzbmFwLT54aXAg PSAoVHJhbnNhY3Rpb25JZCAqKSAoc25hcCArIDEpOworCXNuYXAtPmNhdGFsb2cgPSBvcmlnX3Nu YXAtPmNhdGFsb2c7CiAKIAltZW1jcHkoc25hcC0+eGlwLCBvcmlnX3NuYXAtPnhpcCwgc2l6ZW9m KFRyYW5zYWN0aW9uSWQpICogc25hcC0+eGNudCk7CiAKSW5kZXg6IHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3Rl bTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYt OAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3NuYXBidWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQu YwotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCShyZXZp c2lvbiBiYmMwOWEzMjNjYzNkNmM1NGYyZDI2YzdjNjM0MmQzNmQ3ZWRlYjMxKQorKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCShyZXZpc2lvbiAwM2M0ZmY2 OWNiYmZhMzE4MmU2OTc2NzJkN2VhNzA0ZGIyOTMyMTNmKQpAQCAtNTY0LDYgKzU2NCw3IEBACiAJ c25hcHNob3QtPmFjdGl2ZV9jb3VudCA9IDA7CiAJc25hcHNob3QtPnJlZ2RfY291bnQgPSAwOwog CXNuYXBzaG90LT5zbmFwWGFjdENvbXBsZXRpb25Db3VudCA9IDA7CisJc25hcHNob3QtPmNhdGFs b2cgPSBmYWxzZTsgLy8gVE9ETzogb3IgdHJ1ZT8KIAogCXJldHVybiBzbmFwc2hvdDsKIH0KQEAg LTYwMCw4ICs2MDEsOCBAQAogCQllbG9nKEVSUk9SLCAiY2Fubm90IGJ1aWxkIGFuIGluaXRpYWwg c2xvdCBzbmFwc2hvdCwgbm90IGFsbCB0cmFuc2FjdGlvbnMgYXJlIG1vbml0b3JlZCBhbnltb3Jl Iik7CiAKIAkvKiBzbyB3ZSBkb24ndCBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIHZhbHVlICovCi0J aWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpCi0JCWVsb2coRVJST1IsICJj YW5ub3QgYnVpbGQgYW4gaW5pdGlhbCBzbG90IHNuYXBzaG90IHdoZW4gTXlQcm9jLT54bWluIGFs cmVhZHkgaXMgdmFsaWQiKTsKKwlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWlu KSB8fCBUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPmNhdGFsb2dYbWluKSkKKwkJZWxvZyhF UlJPUiwgImNhbm5vdCBidWlsZCBhbiBpbml0aWFsIHNsb3Qgc25hcHNob3Qgd2hlbiBNeVByb2Mt PnhtaW4gb3IgTXlQcm9jLT5jYXRhbG9nWG1pbiBhbHJlYWR5IGlzIHZhbGlkIik7CiAKIAlzbmFw ID0gU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChidWlsZGVyKTsKIApAQCAtNjIyLDcgKzYyMyw3IEBA CiAJCWVsb2coRVJST1IsICJjYW5ub3QgYnVpbGQgYW4gaW5pdGlhbCBzbG90IHNuYXBzaG90IGFz IG9sZGVzdCBzYWZlIHhpZCAldSBmb2xsb3dzIHNuYXBzaG90J3MgeG1pbiAldSIsCiAJCQkgc2Fm ZVhpZCwgc25hcC0+eG1pbik7CiAKLQlNeVByb2MtPnhtaW4gPSBzbmFwLT54bWluOworCU15UHJv Yy0+eG1pbiA9IE15UHJvYy0+Y2F0YWxvZ1htaW4gPSBzbmFwLT54bWluOwogCiAJLyogYWxsb2Nh dGUgaW4gdHJhbnNhY3Rpb24gY29udGV4dCAqLwogCW5ld3hpcCA9IChUcmFuc2FjdGlvbklkICop CkluZGV4OiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpJREVBIGFkZGl0aW9u YWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2gu Q2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3dhbHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMJKHJldmlzaW9uIGJi YzA5YTMyM2NjM2Q2YzU0ZjJkMjZjN2M2MzQyZDM2ZDdlZGViMzEpCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCShyZXZpc2lvbiAwM2M0ZmY2OWNiYmZhMzE4MmU2OTc2 NzJkN2VhNzA0ZGIyOTMyMTNmKQpAQCAtMzA1LDcgKzMwNSw3IEBACiAJICovCiAJaWYgKE15RGF0 YWJhc2VJZCA9PSBJbnZhbGlkT2lkKQogCXsKLQkJQXNzZXJ0KE15UHJvYy0+eG1pbiA9PSBJbnZh bGlkVHJhbnNhY3Rpb25JZCk7CisJCUFzc2VydChNeVByb2MtPnhtaW4gPT0gSW52YWxpZFRyYW5z YWN0aW9uSWQgJiYgTXlQcm9jLT5jYXRhbG9nWG1pbiA9PSBJbnZhbGlkVHJhbnNhY3Rpb25JZCk7 CiAJCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKIAkJTXlQcm9j LT5zdGF0dXNGbGFncyB8PSBQUk9DX0FGRkVDVFNfQUxMX0hPUklaT05TOwogCQlQcm9jR2xvYmFs LT5zdGF0dXNGbGFnc1tNeVByb2MtPnBneGFjdG9mZl0gPSBNeVByb2MtPnN0YXR1c0ZsYWdzOwpA QCAtMjQ5OCw3ICsyNDk4LDcgQEAKIAlSZXBsaWNhdGlvblNsb3QgKnNsb3QgPSBNeVJlcGxpY2F0 aW9uU2xvdDsKIAogCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOwotCU15UHJvYy0+eG1p biA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCU15UHJvYy0+eG1pbiA9IE15UHJvYy0+Y2F0YWxv Z1htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogCS8qCiAJICogRm9yIHBoeXNpY2FsIHJl cGxpY2F0aW9uIHdlIGRvbid0IG5lZWQgdGhlIGludGVybG9jayBwcm92aWRlZCBieSB4bWluCkBA IC0yNjI3LDcgKzI2MjcsNyBAQAogCWlmICghVHJhbnNhY3Rpb25JZElzTm9ybWFsKGZlZWRiYWNr WG1pbikKIAkJJiYgIVRyYW5zYWN0aW9uSWRJc05vcm1hbChmZWVkYmFja0NhdGFsb2dYbWluKSkK IAl7Ci0JCU15UHJvYy0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQlNeVByb2MtPnht aW4gPSBNeVByb2MtPmNhdGFsb2dYbWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJCWlmIChN eVJlcGxpY2F0aW9uU2xvdCAhPSBOVUxMKQogCQkJUGh5c2ljYWxSZXBsaWNhdGlvblNsb3ROZXdY bWluKGZlZWRiYWNrWG1pbiwgZmVlZGJhY2tDYXRhbG9nWG1pbik7CiAJCXJldHVybjsKQEAgLTI2 ODAsMTEgKzI2ODAsOCBAQAogCQlQaHlzaWNhbFJlcGxpY2F0aW9uU2xvdE5ld1htaW4oZmVlZGJh Y2tYbWluLCBmZWVkYmFja0NhdGFsb2dYbWluKTsKIAllbHNlCiAJewotCQlpZiAoVHJhbnNhY3Rp b25JZElzTm9ybWFsKGZlZWRiYWNrQ2F0YWxvZ1htaW4pCi0JCQkmJiBUcmFuc2FjdGlvbklkUHJl Y2VkZXMoZmVlZGJhY2tDYXRhbG9nWG1pbiwgZmVlZGJhY2tYbWluKSkKLQkJCU15UHJvYy0+eG1p biA9IGZlZWRiYWNrQ2F0YWxvZ1htaW47Ci0JCWVsc2UKLQkJCU15UHJvYy0+eG1pbiA9IGZlZWRi YWNrWG1pbjsKKwkJTXlQcm9jLT5jYXRhbG9nWG1pbiA9IGZlZWRiYWNrQ2F0YWxvZ1htaW47CisJ CU15UHJvYy0+eG1pbiA9IGZlZWRiYWNrWG1pbjsKIAl9CiB9CiAKSW5kZXg6IHNyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06 IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwotLS0gYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwkocmV2aXNpb24gYmJjMDlhMzIzY2MzZDZjNTRmMmQy NmM3YzYzNDJkMzZkN2VkZWIzMSkKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2Fy cmF5LmMJKHJldmlzaW9uIDZjNTVkOTc0OWUyOTk5NTQyZDRlNjI4MWRiNzMzZmRkNDc5MzA3OTYp CkBAIC03MDEsNyArNzAxLDcgQEAKIAkJQXNzZXJ0KCFwcm9jLT5zdWJ4aWRTdGF0dXMub3ZlcmZs b3dlZCk7CiAKIAkJcHJvYy0+dnhpZC5seGlkID0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZDsK LQkJcHJvYy0+eG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCQlwcm9jLT54bWluID0gcHJv Yy0+Y2F0YWxvZ1htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogCQkvKiBiZSBzdXJlIHRo aXMgaXMgY2xlYXJlZCBpbiBhYm9ydCAqLwogCQlwcm9jLT5kZWxheUNoa3B0RmxhZ3MgPSAwOwpA QCAtNzQzLDcgKzc0Myw3IEBACiAJUHJvY0dsb2JhbC0+eGlkc1twZ3hhY3RvZmZdID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CiAJcHJvYy0+eGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJcHJv Yy0+dnhpZC5seGlkID0gSW52YWxpZExvY2FsVHJhbnNhY3Rpb25JZDsKLQlwcm9jLT54bWluID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJcHJvYy0+eG1pbiA9IHByb2MtPmNhdGFsb2dYbWluID0g SW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAKIAkvKiBiZSBzdXJlIHRoaXMgaXMgY2xlYXJlZCBpbiBh Ym9ydCAqLwogCXByb2MtPmRlbGF5Q2hrcHRGbGFncyA9IDA7CkBAIC05MzAsNyArOTMwLDcgQEAK IAlwcm9jLT54aWQgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogCXByb2MtPnZ4aWQubHhpZCA9 IEludmFsaWRMb2NhbFRyYW5zYWN0aW9uSWQ7Ci0JcHJvYy0+eG1pbiA9IEludmFsaWRUcmFuc2Fj dGlvbklkOworCXByb2MtPnhtaW4gPSBwcm9jLT5jYXRhbG9nWG1pbiA9IEludmFsaWRUcmFuc2Fj dGlvbklkOwogCXByb2MtPnJlY292ZXJ5Q29uZmxpY3RQZW5kaW5nID0gZmFsc2U7CiAKIAlBc3Nl cnQoIShwcm9jLT5zdGF0dXNGbGFncyAmIFBST0NfVkFDVVVNX1NUQVRFX01BU0spKTsKQEAgLTE3 MzksOCArMTczOSw2IEBACiAJYm9vbAkJaW5fcmVjb3ZlcnkgPSBSZWNvdmVyeUluUHJvZ3Jlc3Mo KTsKIAlUcmFuc2FjdGlvbklkICpvdGhlcl94aWRzID0gUHJvY0dsb2JhbC0+eGlkczsKIAotCS8q IGluZmVycmVkIGFmdGVyIFByb2NBcnJheUxvY2sgaXMgcmVsZWFzZWQgKi8KLQloLT5jYXRhbG9n X29sZGVzdF9ub25yZW1vdmFibGUgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogCUxXTG9ja0Fj cXVpcmUoUHJvY0FycmF5TG9jaywgTFdfU0hBUkVEKTsKIApAQCAtMTc2MSw2ICsxNzU5LDcgQEAK IAogCQloLT5vbGRlc3RfY29uc2lkZXJlZF9ydW5uaW5nID0gaW5pdGlhbDsKIAkJaC0+c2hhcmVk X29sZGVzdF9ub25yZW1vdmFibGUgPSBpbml0aWFsOworCQloLT5jYXRhbG9nX29sZGVzdF9ub25y ZW1vdmFibGUgPSBpbml0aWFsOwogCQloLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUgPSBpbml0 aWFsOwogCiAJCS8qCkBAIC0xNzk2LDEwICsxNzk1LDEzIEBACiAJCWludDgJCXN0YXR1c0ZsYWdz ID0gUHJvY0dsb2JhbC0+c3RhdHVzRmxhZ3NbaW5kZXhdOwogCQlUcmFuc2FjdGlvbklkIHhpZDsK IAkJVHJhbnNhY3Rpb25JZCB4bWluOworCQlUcmFuc2FjdGlvbklkIGNhdGFsb2dYbWluOworCQlU cmFuc2FjdGlvbklkIG9sZGVyWG1pbjsKIAogCQkvKiBGZXRjaCB4aWQganVzdCBvbmNlIC0gc2Vl IEdldE5ld1RyYW5zYWN0aW9uSWQgKi8KIAkJeGlkID0gVUlOVDMyX0FDQ0VTU19PTkNFKG90aGVy X3hpZHNbaW5kZXhdKTsKIAkJeG1pbiA9IFVJTlQzMl9BQ0NFU1NfT05DRShwcm9jLT54bWluKTsK KwkJY2F0YWxvZ1htaW4gPSBVSU5UMzJfQUNDRVNTX09OQ0UocHJvYy0+Y2F0YWxvZ1htaW4pOwog CiAJCS8qCiAJCSAqIENvbnNpZGVyIGJvdGggdGhlIHRyYW5zYWN0aW9uJ3MgWG1pbiwgYW5kIGl0 cyBYaWQuCkBAIC0xODA5LDExICsxODExLDE0IEBACiAJCSAqIHNvbWUgbm90LXlldC1zZXQgWG1p bi4KIAkJICovCiAJCXhtaW4gPSBUcmFuc2FjdGlvbklkT2xkZXIoeG1pbiwgeGlkKTsKKwkJY2F0 YWxvZ1htaW4gPSBUcmFuc2FjdGlvbklkT2xkZXIoY2F0YWxvZ1htaW4sIHhpZCk7CiAKIAkJLyog aWYgbmVpdGhlciBpcyBzZXQsIHRoaXMgcHJvYyBkb2Vzbid0IGluZmx1ZW5jZSB0aGUgaG9yaXpv biAqLwotCQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtaW4pKQorCQlpZiAoIVRyYW5zYWN0 aW9uSWRJc1ZhbGlkKHhtaW4pICYmICFUcmFuc2FjdGlvbklkSXNWYWxpZChjYXRhbG9nWG1pbikp CiAJCQljb250aW51ZTsKIAorCQlvbGRlclhtaW4gPSBUcmFuc2FjdGlvbklkT2xkZXIoeG1pbiwg Y2F0YWxvZ1htaW4pOworCiAJCS8qCiAJCSAqIERvbid0IGlnbm9yZSBhbnkgcHJvY3Mgd2hlbiBk ZXRlcm1pbmluZyB3aGljaCB0cmFuc2FjdGlvbnMgbWlnaHQgYmUKIAkJICogY29uc2lkZXJlZCBy dW5uaW5nLiAgV2hpbGUgc2xvdHMgc2hvdWxkIGVuc3VyZSBsb2dpY2FsIGRlY29kaW5nCkBAIC0x ODIxLDcgKzE4MjYsNyBAQAogCQkgKiBpbmNsdWRlIHRoZW0gaGVyZSBhcyB3ZWxsLi4KIAkJICov CiAJCWgtPm9sZGVzdF9jb25zaWRlcmVkX3J1bm5pbmcgPQotCQkJVHJhbnNhY3Rpb25JZE9sZGVy KGgtPm9sZGVzdF9jb25zaWRlcmVkX3J1bm5pbmcsIHhtaW4pOworCQkJVHJhbnNhY3Rpb25JZE9s ZGVyKGgtPm9sZGVzdF9jb25zaWRlcmVkX3J1bm5pbmcsIG9sZGVyWG1pbik7CiAKIAkJLyoKIAkJ ICogU2tpcCBvdmVyIGJhY2tlbmRzIGVpdGhlciB2YWN1dW1pbmcgKHdoaWNoIGlzIG9rIHdpdGgg cm93cyBiZWluZwpAQCAtMTgzMyw3ICsxODM4LDcgQEAKIAogCQkvKiBzaGFyZWQgdGFibGVzIG5l ZWQgdG8gdGFrZSBiYWNrZW5kcyBpbiBhbGwgZGF0YWJhc2VzIGludG8gYWNjb3VudCAqLwogCQlo LT5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZSA9Ci0JCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+ c2hhcmVkX29sZGVzdF9ub25yZW1vdmFibGUsIHhtaW4pOworCQkJVHJhbnNhY3Rpb25JZE9sZGVy KGgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlLCBvbGRlclhtaW4pOwogCiAJCS8qCiAJCSAq IE5vcm1hbGx5IHNlc3Npb25zIGluIG90aGVyIGRhdGFiYXNlcyBhcmUgaWdub3JlZCBmb3IgYW55 dGhpbmcgYnV0CkBAIC0xODU5LDggKzE4NjQsMTIgQEAKIAkJCShzdGF0dXNGbGFncyAmIFBST0Nf QUZGRUNUU19BTExfSE9SSVpPTlMpIHx8CiAJCQlpbl9yZWNvdmVyeSkKIAkJewotCQkJaC0+ZGF0 YV9vbGRlc3Rfbm9ucmVtb3ZhYmxlID0KLQkJCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+ZGF0YV9v bGRlc3Rfbm9ucmVtb3ZhYmxlLCB4bWluKTsKKwkJCWlmIChUcmFuc2FjdGlvbklkSXNWYWxpZCh4 bWluKSkKKwkJCQloLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUgPQorCQkJCQlUcmFuc2FjdGlv bklkT2xkZXIoaC0+ZGF0YV9vbGRlc3Rfbm9ucmVtb3ZhYmxlLCB4bWluKTsKKwkJCWlmIChUcmFu c2FjdGlvbklkSXNWYWxpZChvbGRlclhtaW4pKQorCQkJCWgtPmNhdGFsb2dfb2xkZXN0X25vbnJl bW92YWJsZSA9CisJCQkJCQlUcmFuc2FjdGlvbklkT2xkZXIoaC0+Y2F0YWxvZ19vbGRlc3Rfbm9u cmVtb3ZhYmxlLCBvbGRlclhtaW4pOwogCQl9CiAJfQogCkBAIC0xODg1LDYgKzE4OTQsOCBAQAog CQkJVHJhbnNhY3Rpb25JZE9sZGVyKGgtPnNoYXJlZF9vbGRlc3Rfbm9ucmVtb3ZhYmxlLCBrYXht aW4pOwogCQloLT5kYXRhX29sZGVzdF9ub25yZW1vdmFibGUgPQogCQkJVHJhbnNhY3Rpb25JZE9s ZGVyKGgtPmRhdGFfb2xkZXN0X25vbnJlbW92YWJsZSwga2F4bWluKTsKKwkJaC0+Y2F0YWxvZ19v bGRlc3Rfbm9ucmVtb3ZhYmxlID0KKwkJCVRyYW5zYWN0aW9uSWRPbGRlcihoLT5jYXRhbG9nX29s ZGVzdF9ub25yZW1vdmFibGUsIGtheG1pbik7CiAJCS8qIHRlbXAgcmVsYXRpb25zIGNhbm5vdCBi ZSBhY2Nlc3NlZCBpbiByZWNvdmVyeSAqLwogCX0KIApAQCAtMTkxMiw3ICsxOTIzLDYgQEAKIAlo LT5zaGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZSA9CiAJCVRyYW5zYWN0aW9uSWRPbGRlcihoLT5z aGFyZWRfb2xkZXN0X25vbnJlbW92YWJsZSwKIAkJCQkJCSAgIGgtPnNsb3RfY2F0YWxvZ194bWlu KTsKLQloLT5jYXRhbG9nX29sZGVzdF9ub25yZW1vdmFibGUgPSBoLT5kYXRhX29sZGVzdF9ub25y ZW1vdmFibGU7CiAJaC0+Y2F0YWxvZ19vbGRlc3Rfbm9ucmVtb3ZhYmxlID0KIAkJVHJhbnNhY3Rp b25JZE9sZGVyKGgtPmNhdGFsb2dfb2xkZXN0X25vbnJlbW92YWJsZSwKIAkJCQkJCSAgIGgtPnNs b3RfY2F0YWxvZ194bWluKTsKQEAgLTIwOTIsNyArMjEwMiw3IEBACiAgKiBsZWFzdCBpbiB0aGUg Y2FzZSB3ZSBhbHJlYWR5IGhvbGQgYSBzbmFwc2hvdCksIGJ1dCB0aGF0J3MgZm9yIGFub3RoZXIg ZGF5LgogICovCiBzdGF0aWMgYm9vbAotR2V0U25hcHNob3REYXRhUmV1c2UoU25hcHNob3Qgc25h cHNob3QpCitHZXRTbmFwc2hvdERhdGFSZXVzZShTbmFwc2hvdCBzbmFwc2hvdCwgYm9vbCBjYXRh bG9nKQogewogCXVpbnQ2NAkJY3VyWGFjdENvbXBsZXRpb25Db3VudDsKIApAQCAtMjEwMSw2ICsy MTExLDkgQEAKIAlpZiAodW5saWtlbHkoc25hcHNob3QtPnNuYXBYYWN0Q29tcGxldGlvbkNvdW50 ID09IDApKQogCQlyZXR1cm4gZmFsc2U7CiAKKwlpZiAodW5saWtlbHkoc25hcHNob3QtPmNhdGFs b2cgIT0gY2F0YWxvZykpCisJCXJldHVybiBmYWxzZTsKKwogCWN1clhhY3RDb21wbGV0aW9uQ291 bnQgPSBUcmFuc2FtVmFyaWFibGVzLT54YWN0Q29tcGxldGlvbkNvdW50OwogCWlmIChjdXJYYWN0 Q29tcGxldGlvbkNvdW50ICE9IHNuYXBzaG90LT5zbmFwWGFjdENvbXBsZXRpb25Db3VudCkKIAkJ cmV0dXJuIGZhbHNlOwpAQCAtMjEyNSw4ICsyMTM4LDE5IEBACiAJICogcmVxdWlyZW1lbnQgdGhh dCBjb25jdXJyZW50IEdldFNuYXBzaG90RGF0YSgpIGNhbGxzIHlpZWxkIHRoZSBzYW1lCiAJICog eG1pbi4KIAkgKi8KLQlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpCi0J CU15UHJvYy0+eG1pbiA9IFRyYW5zYWN0aW9uWG1pbiA9IHNuYXBzaG90LT54bWluOworCWlmICgh Y2F0YWxvZykKKwl7CisJCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSkK KwkJCU15UHJvYy0+eG1pbiA9IHNuYXBzaG90LT54bWluOworCX0KKwllbHNlCisJeworCQlpZiAo IVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+Y2F0YWxvZ1htaW4pKQorCQkJTXlQcm9jLT5j YXRhbG9nWG1pbiA9IHNuYXBzaG90LT54bWluOworCX0KKworCWlmICghVHJhbnNhY3Rpb25JZElz VmFsaWQoVHJhbnNhY3Rpb25YbWluKSkKKwkJVHJhbnNhY3Rpb25YbWluID0gc25hcHNob3QtPnht aW47CiAKIAlSZWNlbnRYbWluID0gc25hcHNob3QtPnhtaW47CiAJQXNzZXJ0KFRyYW5zYWN0aW9u SWRQcmVjZWRlc09yRXF1YWxzKFRyYW5zYWN0aW9uWG1pbiwgUmVjZW50WG1pbikpOwpAQCAtMjE3 Myw4ICsyMTk3LDggQEAKICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb2JhYmx5IG5v dCBiZSBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCB0aGF0J3MKICAqIG5vdCBzdGF0aWNhbGx5IGFs bG9jYXRlZCAoc2VlIHhpcCBhbGxvY2F0aW9uIGJlbG93KS4KICAqLwotU25hcHNob3QKLUdldFNu YXBzaG90RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKK3N0YXRpYyBTbmFwc2hvdAorR2V0U25hcHNo b3REYXRhSW1wbChTbmFwc2hvdCBzbmFwc2hvdCwgYm9vbCBjYXRhbG9nKQogewogCVByb2NBcnJh eVN0cnVjdCAqYXJyYXlQID0gcHJvY0FycmF5OwogCVRyYW5zYWN0aW9uSWQgKm90aGVyX3hpZHMg PSBQcm9jR2xvYmFsLT54aWRzOwpAQCAtMjIzMiw3ICsyMjU2LDcgQEAKIAkgKi8KIAlMV0xvY2tB Y3F1aXJlKFByb2NBcnJheUxvY2ssIExXX1NIQVJFRCk7CiAKLQlpZiAoR2V0U25hcHNob3REYXRh UmV1c2Uoc25hcHNob3QpKQorCWlmIChHZXRTbmFwc2hvdERhdGFSZXVzZShzbmFwc2hvdCwgY2F0 YWxvZykpCiAJewogCQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwogCQlyZXR1cm4gc25h cHNob3Q7CkBAIC0yNDEyLDggKzI0MzYsMTggQEAKIAlyZXBsaWNhdGlvbl9zbG90X3htaW4gPSBw cm9jQXJyYXktPnJlcGxpY2F0aW9uX3Nsb3RfeG1pbjsKIAlyZXBsaWNhdGlvbl9zbG90X2NhdGFs b2dfeG1pbiA9IHByb2NBcnJheS0+cmVwbGljYXRpb25fc2xvdF9jYXRhbG9nX3htaW47CiAKLQlp ZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpCi0JCU15UHJvYy0+eG1pbiA9 IFRyYW5zYWN0aW9uWG1pbiA9IHhtaW47CisJaWYgKCFjYXRhbG9nKQorCXsKKwkJaWYgKCFUcmFu c2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKQorCQkJTXlQcm9jLT54bWluID0geG1pbjsK Kwl9CisJZWxzZQorCXsKKwkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPmNhdGFs b2dYbWluKSkKKwkJCU15UHJvYy0+Y2F0YWxvZ1htaW4gPSB4bWluOworCX0KKwlpZiAoIVRyYW5z YWN0aW9uSWRJc1ZhbGlkKFRyYW5zYWN0aW9uWG1pbikpCisJCVRyYW5zYWN0aW9uWG1pbiA9IHht aW47CiAKIAlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwogCkBAIC0yNTA2LDYgKzI1NDAs NyBAQAogCXNuYXBzaG90LT5zdWJ4Y250ID0gc3ViY291bnQ7CiAJc25hcHNob3QtPnN1Ym92ZXJm bG93ZWQgPSBzdWJvdmVyZmxvd2VkOwogCXNuYXBzaG90LT5zbmFwWGFjdENvbXBsZXRpb25Db3Vu dCA9IGN1clhhY3RDb21wbGV0aW9uQ291bnQ7CisJc25hcHNob3QtPmNhdGFsb2cgPSBjYXRhbG9n OwogCiAJc25hcHNob3QtPmN1cmNpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQoZmFsc2UpOwogCkBA IC0yNTIyLDYgKzI1NTcsMTkgQEAKIAlyZXR1cm4gc25hcHNob3Q7CiB9CiAKK1NuYXBzaG90CitH ZXRTbmFwc2hvdERhdGEoU25hcHNob3Qgc25hcHNob3QpCit7CisJcmV0dXJuIEdldFNuYXBzaG90 RGF0YUltcGwoc25hcHNob3QsIGZhbHNlKTsKK30KKworCitTbmFwc2hvdAorR2V0Q2F0YWxvZ1Nu YXBzaG90RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKK3sKKwlyZXR1cm4gR2V0U25hcHNob3REYXRh SW1wbChzbmFwc2hvdCwgdHJ1ZSk7Cit9CisKIC8qCiAgKiBQcm9jQXJyYXlJbnN0YWxsSW1wb3J0 ZWRYbWluIC0tIGluc3RhbGwgaW1wb3J0ZWQgeG1pbiBpbnRvIE15UHJvYy0+eG1pbgogICoKQEAg LTI1OTIsNyArMjY0MCw3IEBACiAJCSAqIEdldFNuYXBzaG90RGF0YSBmaXJzdCwgd2UnbGwgYmUg b3ZlcndyaXRpbmcgYSB2YWxpZCB4bWluIGhlcmUsIHNvCiAJCSAqIHdlIGRvbid0IGNoZWNrIHRo YXQuKQogCQkgKi8KLQkJTXlQcm9jLT54bWluID0gVHJhbnNhY3Rpb25YbWluID0geG1pbjsKKwkJ TXlQcm9jLT54bWluID0gTXlQcm9jLT5jYXRhbG9nWG1pbiA9IFRyYW5zYWN0aW9uWG1pbiA9IHht aW47CiAKIAkJcmVzdWx0ID0gdHJ1ZTsKIAkJYnJlYWs7CkBAIC0yNjQ1LDcgKzI2OTMsNyBAQAog CQkgKiBJbnN0YWxsIHhtaW4gYW5kIHByb3BhZ2F0ZSB0aGUgc3RhdHVzRmxhZ3MgdGhhdCBhZmZl Y3QgaG93IHRoZQogCQkgKiB2YWx1ZSBpcyBpbnRlcnByZXRlZCBieSB2YWN1dW0uCiAJCSAqLwot CQlNeVByb2MtPnhtaW4gPSBUcmFuc2FjdGlvblhtaW4gPSB4bWluOworCQlNeVByb2MtPnhtaW4g PSBNeVByb2MtPmNhdGFsb2dYbWluID0gVHJhbnNhY3Rpb25YbWluID0geG1pbjsKIAkJTXlQcm9j LT5zdGF0dXNGbGFncyA9IChNeVByb2MtPnN0YXR1c0ZsYWdzICYgflBST0NfWE1JTl9GTEFHUykg fAogCQkJKHByb2MtPnN0YXR1c0ZsYWdzICYgUFJPQ19YTUlOX0ZMQUdTKTsKIAkJUHJvY0dsb2Jh bC0+c3RhdHVzRmxhZ3NbTXlQcm9jLT5wZ3hhY3RvZmZdID0gTXlQcm9jLT5zdGF0dXNGbGFnczsK QEAgLTMxNjIsNyArMzIxMCw4IEBACiAgKi8KIHZvaWQKIFByb2NOdW1iZXJHZXRUcmFuc2FjdGlv bklkcyhQcm9jTnVtYmVyIHByb2NOdW1iZXIsIFRyYW5zYWN0aW9uSWQgKnhpZCwKLQkJCQkJCQlU cmFuc2FjdGlvbklkICp4bWluLCBpbnQgKm5zdWJ4aWQsIGJvb2wgKm92ZXJmbG93ZWQpCisJCQkJ CQkJVHJhbnNhY3Rpb25JZCAqeG1pbiwgVHJhbnNhY3Rpb25JZCAqY2F0YWxvZ1htaW4sCisJCQkJ CQkJaW50ICpuc3VieGlkLCBib29sICpvdmVyZmxvd2VkKQogewogCVBHUFJPQwkgICAqcHJvYzsK IApAQCAtMzE4Miw2ICszMjMxLDcgQEAKIAl7CiAJCSp4aWQgPSBwcm9jLT54aWQ7CiAJCSp4bWlu ID0gcHJvYy0+eG1pbjsKKwkJKmNhdGFsb2dYbWluID0gcHJvYy0+Y2F0YWxvZ1htaW47CiAJCSpu c3VieGlkID0gcHJvYy0+c3VieGlkU3RhdHVzLmNvdW50OwogCQkqb3ZlcmZsb3dlZCA9IHByb2Mt PnN1YnhpZFN0YXR1cy5vdmVyZmxvd2VkOwogCX0KQEAgLTMzNTYsOCArMzQwNiwxMCBAQAogCQl7 CiAJCQkvKiBGZXRjaCB4bWluIGp1c3Qgb25jZSAtIG1pZ2h0IGNoYW5nZSBvbiB1cyAqLwogCQkJ VHJhbnNhY3Rpb25JZCBweG1pbiA9IFVJTlQzMl9BQ0NFU1NfT05DRShwcm9jLT54bWluKTsKKwkJ CVRyYW5zYWN0aW9uSWQgcGNhdGFsb2dYbWluID0gVUlOVDMyX0FDQ0VTU19PTkNFKHByb2MtPmNh dGFsb2dYbWluKTsKKwkJCVRyYW5zYWN0aW9uSWQgb2xkZXJwWG1pbiA9IFRyYW5zYWN0aW9uSWRP bGRlcihweG1pbiwgcGNhdGFsb2dYbWluKTsKIAotCQkJaWYgKGV4Y2x1ZGVYbWluMCAmJiAhVHJh bnNhY3Rpb25JZElzVmFsaWQocHhtaW4pKQorCQkJaWYgKGV4Y2x1ZGVYbWluMCAmJiAhVHJhbnNh Y3Rpb25JZElzVmFsaWQob2xkZXJwWG1pbikpCiAJCQkJY29udGludWU7CiAKIAkJCS8qCkBAIC0z MzY1LDcgKzM0MTcsNyBAQAogCQkJICogaGFzbid0IHNldCB4bWluIHlldCB3aWxsIG5vdCBiZSBy ZWplY3RlZCBieSB0aGlzIHRlc3QuCiAJCQkgKi8KIAkJCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQobGltaXRYbWluKSB8fAotCQkJCVRyYW5zYWN0aW9uSWRQcmVjZWRlc09yRXF1YWxzKHB4bWlu LCBsaW1pdFhtaW4pKQorCQkJCVRyYW5zYWN0aW9uSWRQcmVjZWRlc09yRXF1YWxzKG9sZGVycFht aW4sIGxpbWl0WG1pbikpCiAJCQl7CiAJCQkJVmlydHVhbFRyYW5zYWN0aW9uSWQgdnhpZDsKIApA QCAtMzQ1Niw2ICszNTA4LDggQEAKIAkJewogCQkJLyogRmV0Y2ggeG1pbiBqdXN0IG9uY2UgLSBj YW4ndCBjaGFuZ2Ugb24gdXMsIGJ1dCBnb29kIGNvZGluZyAqLwogCQkJVHJhbnNhY3Rpb25JZCBw eG1pbiA9IFVJTlQzMl9BQ0NFU1NfT05DRShwcm9jLT54bWluKTsKKwkJCVRyYW5zYWN0aW9uSWQg Y2F0YWxvZ3BYbWluID0gVUlOVDMyX0FDQ0VTU19PTkNFKHByb2MtPmNhdGFsb2dYbWluKTsKKwkJ CVRyYW5zYWN0aW9uSWQgb2xkZXN0cFhtaW4gPSBUcmFuc2FjdGlvbklkT2xkZXIocHhtaW4sIGNh dGFsb2dwWG1pbik7CiAKIAkJCS8qCiAJCQkgKiBXZSBpZ25vcmUgYW4gaW52YWxpZCBweG1pbiBi ZWNhdXNlIHRoaXMgbWVhbnMgdGhhdCBiYWNrZW5kIGhhcwpAQCAtMzQ2Niw3ICszNTIwLDcgQEAK IAkJCSAqIHRlc3QgaGVyZS4KIAkJCSAqLwogCQkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChs aW1pdFhtaW4pIHx8Ci0JCQkJKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHB4bWluKSAmJiAhVHJhbnNh Y3Rpb25JZEZvbGxvd3MocHhtaW4sIGxpbWl0WG1pbikpKQorCQkJCShUcmFuc2FjdGlvbklkSXNW YWxpZChvbGRlc3RwWG1pbikgJiYgIVRyYW5zYWN0aW9uSWRGb2xsb3dzKG9sZGVzdHBYbWluLCBs aW1pdFhtaW4pKSkKIAkJCXsKIAkJCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCB2eGlkOwogCkluZGV4 OiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpT dWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAK PCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdy L3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3Byb2MuYwkocmV2aXNpb24gYmJjMDlhMzIzY2MzZDZjNTRmMmQyNmM3 YzYzNDJkMzZkN2VkZWIzMSkKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwko cmV2aXNpb24gMDNjNGZmNjljYmJmYTMxODJlNjk3NjcyZDdlYTcwNGRiMjkzMjEzZikKQEAgLTM4 Miw3ICszODIsNyBAQAogCU15UHJvYy0+ZnBWWElETG9jayA9IGZhbHNlOwogCU15UHJvYy0+ZnBM b2NhbFRyYW5zYWN0aW9uSWQgPSBJbnZhbGlkTG9jYWxUcmFuc2FjdGlvbklkOwogCU15UHJvYy0+ eGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JTXlQcm9jLT54bWluID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CisJTXlQcm9jLT54bWluID0gTXlQcm9jLT5jYXRhbG9nWG1pbiA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCU15UHJvYy0+cGlkID0gTXlQcm9jUGlkOwogCU15UHJvYy0+dnhpZC5w cm9jTnVtYmVyID0gTXlQcm9jTnVtYmVyOwogCU15UHJvYy0+dnhpZC5seGlkID0gSW52YWxpZExv Y2FsVHJhbnNhY3Rpb25JZDsKQEAgLTU4MCw3ICs1ODAsNyBAQAogCU15UHJvYy0+ZnBWWElETG9j ayA9IGZhbHNlOwogCU15UHJvYy0+ZnBMb2NhbFRyYW5zYWN0aW9uSWQgPSBJbnZhbGlkTG9jYWxU cmFuc2FjdGlvbklkOwogCU15UHJvYy0+eGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JTXlQ cm9jLT54bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJTXlQcm9jLT54bWluID0gTXlQcm9j LT5jYXRhbG9nWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCU15UHJvYy0+dnhpZC5wcm9j TnVtYmVyID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAlNeVByb2MtPnZ4aWQubHhpZCA9IEludmFs aWRMb2NhbFRyYW5zYWN0aW9uSWQ7CiAJTXlQcm9jLT5kYXRhYmFzZUlkID0gSW52YWxpZE9pZDsK SW5kZXg6IHNyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCklERUEgYWRkaXRpb25hbCBp bmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFy c2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv dGltZS9zbmFwbWdyLmMgYi9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwotLS0gYS9z cmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwkocmV2aXNpb24gYmJjMDlhMzIzY2MzZDZj NTRmMmQyNmM3YzYzNDJkMzZkN2VkZWIzMSkKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9z bmFwbWdyLmMJKHJldmlzaW9uIDAzYzRmZjY5Y2JiZmEzMTgyZTY5NzY3MmQ3ZWE3MDRkYjI5MzIx M2YpCkBAIC0yOTAsMTQgKzI5MCw2IEBACiBTbmFwc2hvdAogR2V0TGF0ZXN0U25hcHNob3Qodm9p ZCkKIHsKLQkvKgotCSAqIFdlIG1pZ2h0IGJlIGFibGUgdG8gcmVsYXggdGhpcywgYnV0IG5vdGhp bmcgdGhhdCBjb3VsZCBvdGhlcndpc2Ugd29yawotCSAqIG5lZWRzIGl0LgotCSAqLwotCWlmIChJ c0luUGFyYWxsZWxNb2RlKCkpCi0JCWVsb2coRVJST1IsCi0JCQkgImNhbm5vdCB1cGRhdGUgU2Vj b25kYXJ5U25hcHNob3QgZHVyaW5nIGEgcGFyYWxsZWwgb3BlcmF0aW9uIik7Ci0KIAkvKgogCSAq IFNvIGZhciB0aGVyZSBhcmUgbm8gY2FzZXMgcmVxdWlyaW5nIHN1cHBvcnQgZm9yIEdldExhdGVz dFNuYXBzaG90KCkKIAkgKiBkdXJpbmcgbG9naWNhbCBkZWNvZGluZywgYnV0IGl0IHdvdWxkbid0 IGJlIGhhcmQgdG8gYWRkIGlmIHJlcXVpcmVkLgpAQCAtMzMyLDYgKzMyNCwxNiBAQAogCQlSZWdp c3RlcmVkTFNOID0gT2xkZXN0UmVnaXN0ZXJlZFNuYXBzaG90LT5sc247CiAJfQogCisJaWYgKENh dGFsb2dTbmFwc2hvdCAhPSBOVUxMKQorCXsKKwkJaWYgKE9sZGVzdFJlZ2lzdGVyZWRTbmFwc2hv dCA9PSBOVUxMIHx8CisJCQkJCVRyYW5zYWN0aW9uSWRQcmVjZWRlcyhDYXRhbG9nU25hcHNob3Qt PnhtaW4sIE9sZGVzdFJlZ2lzdGVyZWRTbmFwc2hvdC0+eG1pbikpCisJCXsKKwkJCU9sZGVzdFJl Z2lzdGVyZWRTbmFwc2hvdCA9IENhdGFsb2dTbmFwc2hvdDsKKwkJCVJlZ2lzdGVyZWRMU04gPSBD YXRhbG9nU25hcHNob3QtPmxzbjsKKwkJfQorCX0KKwogCWlmIChPbGRlc3RBY3RpdmVTbmFwc2hv dCAhPSBOVUxMKQogCXsKIAkJWExvZ1JlY1B0cglBY3RpdmVMU04gPSBPbGRlc3RBY3RpdmVTbmFw c2hvdC0+YXNfc25hcC0+bHNuOwpAQCAtMzg4LDcgKzM5MCw3IEBACiAJaWYgKENhdGFsb2dTbmFw c2hvdCA9PSBOVUxMKQogCXsKIAkJLyogR2V0IG5ldyBzbmFwc2hvdC4gKi8KLQkJQ2F0YWxvZ1Nu YXBzaG90ID0gR2V0U25hcHNob3REYXRhKCZDYXRhbG9nU25hcHNob3REYXRhKTsKKwkJQ2F0YWxv Z1NuYXBzaG90ID0gR2V0Q2F0YWxvZ1NuYXBzaG90RGF0YSgmQ2F0YWxvZ1NuYXBzaG90RGF0YSk7 CiAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoZSBjYXRhbG9nIHNuYXBzaG90IHdpbGwgYmUgYWNj b3VudGVkIGZvciBpbiBkZWNpc2lvbnMKQEAgLTQwMiw3ICs0MDQsNyBAQAogCQkgKiBOQjogaXQg aGFkIGJldHRlciBiZSBpbXBvc3NpYmxlIGZvciB0aGlzIHRvIHRocm93IGVycm9yLCBzaW5jZSB0 aGUKIAkJICogQ2F0YWxvZ1NuYXBzaG90IHBvaW50ZXIgaXMgYWxyZWFkeSB2YWxpZC4KIAkJICov Ci0JCXBhaXJpbmdoZWFwX2FkZCgmUmVnaXN0ZXJlZFNuYXBzaG90cywgJkNhdGFsb2dTbmFwc2hv dC0+cGhfbm9kZSk7CisJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPmNhdGFs b2dYbWluKSk7CiAJfQogCiAJcmV0dXJuIENhdGFsb2dTbmFwc2hvdDsKQEAgLTQyMyw5ICs0MjUs OCBAQAogewogCWlmIChDYXRhbG9nU25hcHNob3QpCiAJewotCQlwYWlyaW5naGVhcF9yZW1vdmUo JlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZDYXRhbG9nU25hcHNob3QtPnBoX25vZGUpOwogCQlDYXRh bG9nU25hcHNob3QgPSBOVUxMOwotCQlTbmFwc2hvdFJlc2V0WG1pbigpOworCQlNeVByb2MtPmNh dGFsb2dYbWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJfQogfQogCkBAIC00NDQsNyArNDQ1 LDcgQEAKIHsKIAlpZiAoQ2F0YWxvZ1NuYXBzaG90ICYmCiAJCUFjdGl2ZVNuYXBzaG90ID09IE5V TEwgJiYKLQkJcGFpcmluZ2hlYXBfaXNfc2luZ3VsYXIoJlJlZ2lzdGVyZWRTbmFwc2hvdHMpKQor CQlwYWlyaW5naGVhcF9pc19lbXB0eSgmUmVnaXN0ZXJlZFNuYXBzaG90cykpCiAJCUludmFsaWRh dGVDYXRhbG9nU25hcHNob3QoKTsKIH0KIApAQCAtMTA4MSw3ICsxMDgyLDcgQEAKIAlpZiAocmVz ZXRYbWluKQogCQlTbmFwc2hvdFJlc2V0WG1pbigpOwogCi0JQXNzZXJ0KHJlc2V0WG1pbiB8fCBN eVByb2MtPnhtaW4gPT0gMCk7CisJQXNzZXJ0KHJlc2V0WG1pbiB8fCAoTXlQcm9jLT54bWluID09 IEludmFsaWRUcmFuc2FjdGlvbklkICYmIE15UHJvYy0+Y2F0YWxvZ1htaW4gPT0gSW52YWxpZFRy YW5zYWN0aW9uSWQpKTsKIH0KIAogCkBAIC0xNjI2LDE5ICsxNjI3LDE1IEBACiAJaWYgKEFjdGl2 ZVNuYXBzaG90ICE9IE5VTEwpCiAJCXJldHVybiB0cnVlOwogCi0JLyoKLQkgKiBUaGUgY2F0YWxv ZyBzbmFwc2hvdCBpcyBpbiBSZWdpc3RlcmVkU25hcHNob3RzIHdoZW4gdmFsaWQsIGJ1dCBjYW4g YmUKLQkgKiByZW1vdmVkIGF0IGFueSB0aW1lIGR1ZSB0byBpbnZhbGlkYXRpb24gcHJvY2Vzc2lu Zy4gSWYgZXhwbGljaXRseQotCSAqIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uZSBzbmFwc2hvdCBo YXMgdG8gYmUgaW4gUmVnaXN0ZXJlZFNuYXBzaG90cy4KLQkgKi8KLQlpZiAoQ2F0YWxvZ1NuYXBz aG90ICE9IE5VTEwgJiYKLQkJcGFpcmluZ2hlYXBfaXNfc2luZ3VsYXIoJlJlZ2lzdGVyZWRTbmFw c2hvdHMpKQotCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIEhhdmVSZWdpc3RlcmVkU25hcHNob3Qo KTsKK30KIAorYm9vbAorSGF2ZVJlZ2lzdGVyZWRTbmFwc2hvdCh2b2lkKQorewogCXJldHVybiAh cGFpcmluZ2hlYXBfaXNfZW1wdHkoJlJlZ2lzdGVyZWRTbmFwc2hvdHMpOwogfQogCi0KIC8qCiAg KiBTZXR1cCBhIHNuYXBzaG90IHRoYXQgcmVwbGFjZXMgbm9ybWFsIGNhdGFsb2cgc25hcHNob3Rz IHRoYXQgYWxsb3dzIGNhdGFsb2cKICAqIGFjY2VzcyB0byBiZWhhdmUganVzdCBsaWtlIGl0IGRp ZCBhdCBhIGNlcnRhaW4gcG9pbnQgaW4gdGhlIHBhc3QuCkBAIC0xODA0LDYgKzE4MDEsNyBAQAog CXNuYXBzaG90LT53aGVuVGFrZW4gPSBzZXJpYWxpemVkX3NuYXBzaG90LndoZW5UYWtlbjsKIAlz bmFwc2hvdC0+bHNuID0gc2VyaWFsaXplZF9zbmFwc2hvdC5sc247CiAJc25hcHNob3QtPnNuYXBY YWN0Q29tcGxldGlvbkNvdW50ID0gMDsKKwlzbmFwc2hvdC0+Y2F0YWxvZyA9IGZhbHNlOwogCiAJ LyogQ29weSBYSURzLCBpZiBwcmVzZW50LiAqLwogCWlmIChzZXJpYWxpemVkX3NuYXBzaG90Lnhj bnQgPiAwKQpJbmRleDogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKSURFQSBhZGRpdGlvbmFs IGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNo YXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9y YWdlL3Byb2MuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCi0tLSBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvYy5oCShyZXZpc2lvbiBiYmMwOWEzMjNjYzNkNmM1NGYyZDI2YzdjNjM0MmQz NmQ3ZWRlYjMxKQorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAkocmV2aXNpb24gM2Rl YTcyYjYyYWRjODgwNjkxN2RjNDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTU2LDEwICs1Niw2IEBA CiAgKi8KICNkZWZpbmUJCVBST0NfSVNfQVVUT1ZBQ1VVTQkweDAxCS8qIGlzIGl0IGFuIGF1dG92 YWMgd29ya2VyPyAqLwogI2RlZmluZQkJUFJPQ19JTl9WQUNVVU0JCTB4MDIJLyogY3VycmVudGx5 IHJ1bm5pbmcgbGF6eSB2YWN1dW0gKi8KLSNkZWZpbmUJCVBST0NfSU5fU0FGRV9JQwkJMHgwNAkv KiBjdXJyZW50bHkgcnVubmluZyBDUkVBVEUgSU5ERVgKLQkJCQkJCQkJCQkgKiBDT05DVVJSRU5U TFkgb3IgUkVJTkRFWAotCQkJCQkJCQkJCSAqIENPTkNVUlJFTlRMWSBvbiBub24tZXhwcmVzc2lv bmFsLAotCQkJCQkJCQkJCSAqIG5vbi1wYXJ0aWFsIGluZGV4ICovCiAjZGVmaW5lCQlQUk9DX1ZB Q1VVTV9GT1JfV1JBUEFST1VORAkweDA4CS8qIHNldCBieSBhdXRvdmFjIG9ubHkgKi8KICNkZWZp bmUJCVBST0NfSU5fTE9HSUNBTF9ERUNPRElORwkweDEwCS8qIGN1cnJlbnRseSBkb2luZyBsb2dp Y2FsCiAJCQkJCQkJCQkJCQkgKiBkZWNvZGluZyBvdXRzaWRlIHhhY3QgKi8KQEAgLTY5LDEzICs2 NSwxMyBAQAogCiAvKiBmbGFncyByZXNldCBhdCBFT1hhY3QgKi8KICNkZWZpbmUJCVBST0NfVkFD VVVNX1NUQVRFX01BU0sgXAotCShQUk9DX0lOX1ZBQ1VVTSB8IFBST0NfSU5fU0FGRV9JQyB8IFBS T0NfVkFDVVVNX0ZPUl9XUkFQQVJPVU5EKQorCShQUk9DX0lOX1ZBQ1VVTSB8IFBST0NfVkFDVVVN X0ZPUl9XUkFQQVJPVU5EKQogCiAvKgogICogWG1pbi1yZWxhdGVkIGZsYWdzLiBNYWtlIHN1cmUg YW55IGZsYWdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgcHJvY2VzcycgWG1pbgogICogdmFsdWUgaXMg aW50ZXJwcmV0ZWQgYnkgVkFDVVVNIGFyZSBpbmNsdWRlZCBoZXJlLgogICovCi0jZGVmaW5lCQlQ Uk9DX1hNSU5fRkxBR1MgKFBST0NfSU5fVkFDVVVNIHwgUFJPQ19JTl9TQUZFX0lDKQorI2RlZmlu ZQkJUFJPQ19YTUlOX0ZMQUdTIChQUk9DX0lOX1ZBQ1VVTSkKIAogLyoKICAqIFdlIGFsbG93IGEg c21hbGwgbnVtYmVyIG9mICJ3ZWFrIiByZWxhdGlvbiBsb2NrcyAoQWNjZXNzU2hhcmVMb2NrLApA QCAtMTc5LDYgKzE3NSw3IEBACiAJCQkJCQkJCSAqIHN0YXJ0aW5nIG91ciB4YWN0LCBleGNsdWRp bmcgTEFaWSBWQUNVVU06CiAJCQkJCQkJCSAqIHZhY3V1bSBtdXN0IG5vdCByZW1vdmUgdHVwbGVz IGRlbGV0ZWQgYnkKIAkJCQkJCQkJICogeGlkID49IHhtaW4gISAqLworCVRyYW5zYWN0aW9uSWQg Y2F0YWxvZ1htaW47CiAKIAlpbnQJCQlwaWQ7CQkJLyogQmFja2VuZCdzIHByb2Nlc3MgSUQ7IDAg aWYgcHJlcGFyZWQgeGFjdCAqLwogCkluZGV4OiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJh eS5oCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBp LmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJvY2FycmF5LmgKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAkocmV2aXNp b24gYmJjMDlhMzIzY2MzZDZjNTRmMmQyNmM3YzYzNDJkMzZkN2VkZWIzMSkKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAkocmV2aXNpb24gNmM1NWQ5NzQ5ZTI5OTk1NDJkNGU2 MjgxZGI3MzNmZGQ0NzkzMDc5NikKQEAgLTQ1LDYgKzQ1LDcgQEAKIGV4dGVybiBpbnQJR2V0TWF4 U25hcHNob3RTdWJ4aWRDb3VudCh2b2lkKTsKIAogZXh0ZXJuIFNuYXBzaG90IEdldFNuYXBzaG90 RGF0YShTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gU25hcHNob3QgR2V0Q2F0YWxvZ1NuYXBz aG90RGF0YShTbmFwc2hvdCBzbmFwc2hvdCk7CiAKIGV4dGVybiBib29sIFByb2NBcnJheUluc3Rh bGxJbXBvcnRlZFhtaW4oVHJhbnNhY3Rpb25JZCB4bWluLAogCQkJCQkJCQkJCSBWaXJ0dWFsVHJh bnNhY3Rpb25JZCAqc291cmNldnhpZCk7CkBAIC02Niw4ICs2Nyw4IEBACiAKIGV4dGVybiBQR1BS T0MgKlByb2NOdW1iZXJHZXRQcm9jKGludCBwcm9jTnVtYmVyKTsKIGV4dGVybiB2b2lkIFByb2NO dW1iZXJHZXRUcmFuc2FjdGlvbklkcyhpbnQgcHJvY051bWJlciwgVHJhbnNhY3Rpb25JZCAqeGlk LAotCQkJCQkJCQkJCVRyYW5zYWN0aW9uSWQgKnhtaW4sIGludCAqbnN1YnhpZCwKLQkJCQkJCQkJ CQlib29sICpvdmVyZmxvd2VkKTsKKwkJCQkJCQkJCQlUcmFuc2FjdGlvbklkICp4bWluLCBUcmFu c2FjdGlvbklkICpjYXRhbG9nWG1pbiwKKwkJCQkJCQkJCQlpbnQgKm5zdWJ4aWQsIGJvb2wgKm92 ZXJmbG93ZWQpOwogZXh0ZXJuIFBHUFJPQyAqQmFja2VuZFBpZEdldFByb2MoaW50IHBpZCk7CiBl eHRlcm4gUEdQUk9DICpCYWNrZW5kUGlkR2V0UHJvY1dpdGhMb2NrKGludCBwaWQpOwogZXh0ZXJu IGludAlCYWNrZW5kWGlkR2V0UGlkKFRyYW5zYWN0aW9uSWQgeGlkKTsKSW5kZXg6IHNyYy9pbmNs dWRlL3V0aWxzL3NuYXBzaG90LmgKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29t LmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvc25hcHNob3QuaAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5o CShyZXZpc2lvbiBiYmMwOWEzMjNjYzNkNmM1NGYyZDI2YzdjNjM0MmQzNmQ3ZWRlYjMxKQorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCShyZXZpc2lvbiAwM2M0ZmY2OWNiYmZhMzE4 MmU2OTc2NzJkN2VhNzA0ZGIyOTMyMTNmKQpAQCAtMTgzLDYgKzE4Myw3IEBACiAKIAlib29sCQl0 YWtlbkR1cmluZ1JlY292ZXJ5OwkvKiByZWNvdmVyeS1zaGFwZWQgc25hcHNob3Q/ICovCiAJYm9v bAkJY29waWVkOwkJCS8qIGZhbHNlIGlmIGl0J3MgYSBzdGF0aWMgc25hcHNob3QgKi8KKwlib29s CQljYXRhbG9nOwkJLyogc25hcHNob3QgdXNlZCB0byBhY2Nlc3MgY2F0YWxvZyAqLwogCiAJQ29t bWFuZElkCWN1cmNpZDsJCQkvKiBpbiBteSB4YWN0LCBDSUQgPCBjdXJjaWQgYXJlIHZpc2libGUg Ki8KIApJbmRleDogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYwpJREVBIGFkZGl0aW9u YWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2gu Q2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVj ay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCi0tLSBh L2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMJKHJldmlzaW9uIDkxZGQ3MGZjNWRkYzYw Y2JhZDViMTdjOTVmMTdjNmE1MTdmMzY3NzApCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlf bmJ0cmVlLmMJKHJldmlzaW9uIDNkZWE3MmI2MmFkYzg4MDY5MTdkYzQ1OWI4MmZmNDRkOTYyYmNi MTIpCkBAIC02OTEsNyArNjkxLDggQEAKIAkJCQkJCQkJCSAwLCAvKiBudW1iZXIgb2Yga2V5cyAq LwogCQkJCQkJCQkJIE5VTEwsCS8qIHNjYW4ga2V5ICovCiAJCQkJCQkJCQkgdHJ1ZSwJLyogYnVm ZmVyIGFjY2VzcyBzdHJhdGVneSBPSyAqLwotCQkJCQkJCQkJIHRydWUpOyAvKiBzeW5jc2NhbiBP Sz8gKi8KKwkJCQkJCQkJCSB0cnVlLCAvKiBzeW5jc2NhbiBPSz8gKi8KKwkJCQkJCQkJCSBmYWxz ZSk7CiAKIAkJLyoKIAkJICogU2NhbiB3aWxsIGJlaGF2ZSBhcyB0aGUgZmlyc3Qgc2NhbiBvZiBh IENSRUFURSBJTkRFWCBDT05DVVJSRU5UTFkKSW5kZXg6IHNyYy9iYWNrZW5kL2FjY2Vzcy9icmlu L2JyaW4uYwpJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3Bl bmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9icmluL2JyaW4uYwotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMJKHJldmlz aW9uIDkxZGQ3MGZjNWRkYzYwY2JhZDViMTdjOTVmMTdjNmE1MTdmMzY3NzApCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYwkocmV2aXNpb24gM2RlYTcyYjYyYWRjODgwNjkxN2Rj NDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTIzNjksMTYgKzIzNjksNyBAQAogCWxlYWRlcnBhcnRp Y2lwYXRlcyA9IGZhbHNlOwogI2VuZGlmCiAKLQkvKgotCSAqIEVudGVyIHBhcmFsbGVsIG1vZGUs IGFuZCBjcmVhdGUgY29udGV4dCBmb3IgcGFyYWxsZWwgYnVpbGQgb2YgYnJpbgotCSAqIGluZGV4 Ci0JICovCi0JRW50ZXJQYXJhbGxlbE1vZGUoKTsKLQlBc3NlcnQocmVxdWVzdCA+IDApOwotCXBj eHQgPSBDcmVhdGVQYXJhbGxlbENvbnRleHQoInBvc3RncmVzIiwgIl9icmluX3BhcmFsbGVsX2J1 aWxkX21haW4iLAotCQkJCQkJCQkgcmVxdWVzdCk7Ci0KLQlzY2FudHVwbGVzb3J0c3RhdGVzID0g bGVhZGVycGFydGljaXBhdGVzID8gcmVxdWVzdCArIDEgOiByZXF1ZXN0OworCUFzc2VydCghaXNj b25jdXJyZW50IHx8ICFUcmFuc2FjdGlvbklkSXNWYWxpZChNeVByb2MtPnhtaW4pKTsKIAogCS8q CiAJICogUHJlcGFyZSBmb3Igc2NhbiBvZiB0aGUgYmFzZSByZWxhdGlvbi4gIEluIGEgbm9ybWFs IGluZGV4IGJ1aWxkLCB3ZSB1c2UKQEAgLTIzOTAsNyArMjM4MSwyMSBAQAogCWlmICghaXNjb25j dXJyZW50KQogCQlzbmFwc2hvdCA9IFNuYXBzaG90QW55OwogCWVsc2UKKwl7CiAJCXNuYXBzaG90 ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQlQdXNoQWN0 aXZlU25hcHNob3Qoc25hcHNob3QpOworCX0KKworCS8qCisJICogRW50ZXIgcGFyYWxsZWwgbW9k ZSwgYW5kIGNyZWF0ZSBjb250ZXh0IGZvciBwYXJhbGxlbCBidWlsZCBvZiBicmluCisJICogaW5k ZXgKKwkgKi8KKwlFbnRlclBhcmFsbGVsTW9kZSgpOworCUFzc2VydChyZXF1ZXN0ID4gMCk7CisJ cGN4dCA9IENyZWF0ZVBhcmFsbGVsQ29udGV4dCgicG9zdGdyZXMiLCAiX2JyaW5fcGFyYWxsZWxf YnVpbGRfbWFpbiIsCisJCQkJCQkJCSByZXF1ZXN0KTsKKworCXNjYW50dXBsZXNvcnRzdGF0ZXMg PSBsZWFkZXJwYXJ0aWNpcGF0ZXMgPyByZXF1ZXN0ICsgMSA6IHJlcXVlc3Q7CiAKIAkvKgogCSAq IEVzdGltYXRlIHNpemUgZm9yIG91ciBvd24gUEFSQUxMRUxfS0VZX0JSSU5fU0hBUkVEIHdvcmtz cGFjZS4KQEAgLTI0MjksNiArMjQzNCw4IEBACiAKIAkvKiBFdmVyeW9uZSdzIGhhZCBhIGNoYW5j ZSB0byBhc2sgZm9yIHNwYWNlLCBzbyBub3cgY3JlYXRlIHRoZSBEU00gKi8KIAlJbml0aWFsaXpl UGFyYWxsZWxEU00ocGN4dCk7CisJaWYgKElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KSkKKwkJUG9w QWN0aXZlU25hcHNob3QoKTsKIAogCS8qIElmIG5vIERTTSBzZWdtZW50IHdhcyBhdmFpbGFibGUs IGJhY2sgb3V0IChkbyBzZXJpYWwgYnVpbGQpICovCiAJaWYgKHBjeHQtPnNlZyA9PSBOVUxMKQpA QCAtMjQ1OCw3ICsyNDY1LDcgQEAKIAogCXRhYmxlX3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplKGhl YXAsCiAJCQkJCQkJCSAgUGFyYWxsZWxUYWJsZVNjYW5Gcm9tQnJpblNoYXJlZChicmluc2hhcmVk KSwKLQkJCQkJCQkJICBzbmFwc2hvdCk7CisJCQkJCQkJCSAgaXNjb25jdXJyZW50ID8gSW52YWxp ZFNuYXBzaG90IDogc25hcHNob3QpOwogCiAJLyoKIAkgKiBTdG9yZSBzaGFyZWQgdHVwbGVzb3J0 LXByaXZhdGUgc3RhdGUsIGZvciB3aGljaCB3ZSByZXNlcnZlZCBzcGFjZS4KQEAgLTI1MDQsNyAr MjUxMSw3IEBACiAJCWJyaW5sZWFkZXItPm5wYXJ0aWNpcGFudHR1cGxlc29ydHMrKzsKIAlicmlu bGVhZGVyLT5icmluc2hhcmVkID0gYnJpbnNoYXJlZDsKIAlicmlubGVhZGVyLT5zaGFyZWRzb3J0 ID0gc2hhcmVkc29ydDsKLQlicmlubGVhZGVyLT5zbmFwc2hvdCA9IHNuYXBzaG90OworCWJyaW5s ZWFkZXItPnNuYXBzaG90ID0gaXNjb25jdXJyZW50ID8gSW52YWxpZFNuYXBzaG90IDogc25hcHNo b3Q7CiAJYnJpbmxlYWRlci0+d2FsdXNhZ2UgPSB3YWx1c2FnZTsKIAlicmlubGVhZGVyLT5idWZm ZXJ1c2FnZSA9IGJ1ZmZlcnVzYWdlOwogCkBAIC0yNTE4LDYgKzI1MjUsMTIgQEAKIAkvKiBTYXZl IGxlYWRlciBzdGF0ZSBub3cgdGhhdCBpdCdzIGNsZWFyIGJ1aWxkIHdpbGwgYmUgcGFyYWxsZWwg Ki8KIAlidWlsZHN0YXRlLT5ic19sZWFkZXIgPSBicmlubGVhZGVyOwogCisJaWYgKGlzY29uY3Vy cmVudCkKKwl7CisJCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0F0dGFjaChwY3h0LCB0cnVlKTsK KwkJVW5yZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKKwl9CisKIAkvKiBKb2luIGhlYXAgc2Nh biBvdXJzZWx2ZXMgKi8KIAlpZiAobGVhZGVycGFydGljaXBhdGVzKQogCQlfYnJpbl9sZWFkZXJf cGFydGljaXBhdGVfYXNfd29ya2VyKGJ1aWxkc3RhdGUsIGhlYXAsIGluZGV4KTsKQEAgLTI1MjYs NyArMjUzOSw4IEBACiAJICogQ2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yIGFsbCBsYXVuY2hlZCB3 b3JrZXJzIHdoZW4gd2UgcmV0dXJuLiAgTWFrZQogCSAqIHN1cmUgdGhhdCB0aGUgZmFpbHVyZS10 by1zdGFydCBjYXNlIHdpbGwgbm90IGhhbmcgZm9yZXZlci4KIAkgKi8KLQlXYWl0Rm9yUGFyYWxs ZWxXb3JrZXJzVG9BdHRhY2gocGN4dCk7CisJaWYgKCFpc2NvbmN1cnJlbnQpCisJCVdhaXRGb3JQ YXJhbGxlbFdvcmtlcnNUb0F0dGFjaChwY3h0LCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0yNTM2LDYg KzI1NTAsNyBAQAogX2JyaW5fZW5kX3BhcmFsbGVsKEJyaW5MZWFkZXIgKmJyaW5sZWFkZXIsIEJy aW5CdWlsZFN0YXRlICpzdGF0ZSkKIHsKIAlpbnQJCQlpOworCVNuYXBzaG90IAlzbmFwc2hvdCA9 IGJyaW5sZWFkZXItPnNuYXBzaG90OwogCiAJLyogU2h1dGRvd24gd29ya2VyIHByb2Nlc3NlcyAq LwogCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0ZpbmlzaChicmlubGVhZGVyLT5wY3h0KTsKQEAg LTI1NDgsOCArMjU2MywxMCBAQAogCQlJbnN0ckFjY3VtUGFyYWxsZWxRdWVyeSgmYnJpbmxlYWRl ci0+YnVmZmVydXNhZ2VbaV0sICZicmlubGVhZGVyLT53YWx1c2FnZVtpXSk7CiAKIAkvKiBGcmVl IGxhc3QgcmVmZXJlbmNlIHRvIE1WQ0Mgc25hcHNob3QsIGlmIG9uZSB3YXMgdXNlZCAqLwotCWlm IChJc01WQ0NTbmFwc2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCkpCi0JCVVucmVnaXN0ZXJTbmFw c2hvdChicmlubGVhZGVyLT5zbmFwc2hvdCk7CisJQXNzZXJ0KCFicmlubGVhZGVyLT5icmluc2hh cmVkLT5pc2NvbmN1cnJlbnQgfHwgc25hcHNob3QgPT0gSW52YWxpZFNuYXBzaG90KTsKKwlBc3Nl cnQoYnJpbmxlYWRlci0+YnJpbnNoYXJlZC0+aXNjb25jdXJyZW50IHx8IHNuYXBzaG90ICE9IElu dmFsaWRTbmFwc2hvdCk7CisJaWYgKHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCAmJiBJc01W Q0NTbmFwc2hvdChzbmFwc2hvdCkpCisJCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CiAJ RGVzdHJveVBhcmFsbGVsQ29udGV4dChicmlubGVhZGVyLT5wY3h0KTsKIAlFeGl0UGFyYWxsZWxN b2RlKCk7CiB9CkBAIC0yODAwLDYgKzI4MTcsNyBAQAogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlk b3VibGUJCXJlbHR1cGxlczsKIAlJbmRleEluZm8gICppbmRleEluZm87CisJU25hcHNob3QJc25h cHNob3Q7CiAKIAkvKiBJbml0aWFsaXplIGxvY2FsIHR1cGxlc29ydCBjb29yZGluYXRpb24gc3Rh dGUgKi8KIAljb29yZGluYXRlID0gcGFsbG9jMChzaXplb2YoU29ydENvb3JkaW5hdGVEYXRhKSk7 CkBAIC0yODExLDggKzI4MjksMjEgQEAKIAlzdGF0ZS0+YnNfc29ydHN0YXRlID0gdHVwbGVzb3J0 X2JlZ2luX2luZGV4X2JyaW4oc29ydG1lbSwgY29vcmRpbmF0ZSwKIAkJCQkJCQkJCQkJCQkgVFVQ TEVTT1JUX05PTkUpOwogCisJQXNzZXJ0KCFicmluc2hhcmVkLT5pc2NvbmN1cnJlbnQgfHwgIVRy YW5zYWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpOworCS8qIEpvaW4gcGFyYWxsZWwgc2Nh biAqLworCWlmIChicmluc2hhcmVkLT5pc2NvbmN1cnJlbnQpCisJeworCQlzbmFwc2hvdCA9IFJl Z2lzdGVyU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJUHVzaEFjdGl2ZVNu YXBzaG90KHNuYXBzaG90KTsKKwl9CiAJLyogSm9pbiBwYXJhbGxlbCBzY2FuICovCiAJaW5kZXhJ bmZvID0gQnVpbGRJbmRleEluZm8oaW5kZXgpOworCWlmIChicmluc2hhcmVkLT5pc2NvbmN1cnJl bnQpCisJeworCQlQb3BBY3RpdmVTbmFwc2hvdCgpOworCQlVbnJlZ2lzdGVyU25hcHNob3Qoc25h cHNob3QpOworCX0KKwlBc3NlcnQoIWJyaW5zaGFyZWQtPmlzY29uY3VycmVudCB8fCAhVHJhbnNh Y3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CiAJaW5kZXhJbmZvLT5paV9Db25jdXJyZW50 ID0gYnJpbnNoYXJlZC0+aXNjb25jdXJyZW50OwogCiAJc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9w YXJhbGxlbChoZWFwLApAQCAtMjg2Niw4ICsyODk3LDcgQEAKIAkgKiBUaGUgb25seSBwb3NzaWJs ZSBzdGF0dXMgZmxhZyB0aGF0IGNhbiBiZSBzZXQgdG8gdGhlIHBhcmFsbGVsIHdvcmtlciBpcwog CSAqIFBST0NfSU5fU0FGRV9JQy4KIAkgKi8KLQlBc3NlcnQoKE15UHJvYy0+c3RhdHVzRmxhZ3Mg PT0gMCkgfHwKLQkJICAgKE15UHJvYy0+c3RhdHVzRmxhZ3MgPT0gUFJPQ19JTl9TQUZFX0lDKSk7 CisJQXNzZXJ0KE15UHJvYy0+c3RhdHVzRmxhZ3MgPT0gMCk7CiAKIAkvKiBTZXQgZGVidWdfcXVl cnlfc3RyaW5nIGZvciBpbmRpdmlkdWFsIHdvcmtlcnMgZmlyc3QgKi8KIAlzaGFyZWRxdWVyeSA9 IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1FVRVJZX1RFWFQsIHRydWUpOwpAQCAt MjkxMyw4ICsyOTQzLDEyIEBACiAJICovCiAJc29ydG1lbSA9IG1haW50ZW5hbmNlX3dvcmtfbWVt IC8gYnJpbnNoYXJlZC0+c2NhbnR1cGxlc29ydHN0YXRlczsKIAorCWlmIChicmluc2hhcmVkLT5p c2NvbmN1cnJlbnQpCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJX2JyaW5fcGFyYWxsZWxfc2Nh bl9hbmRfYnVpbGQoYnVpbGRzdGF0ZSwgYnJpbnNoYXJlZCwgc2hhcmVkc29ydCwKIAkJCQkJCQkJ ICBoZWFwUmVsLCBpbmRleFJlbCwgc29ydG1lbSwgZmFsc2UpOworCWlmIChicmluc2hhcmVkLT5p c2NvbmN1cnJlbnQpCisJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRMYXRlc3RTbmFwc2hvdCgpKTsK IAogCS8qIFJlcG9ydCBXQUwvYnVmZmVyIHVzYWdlIGR1cmluZyBwYXJhbGxlbCBleGVjdXRpb24g Ki8KIAlidWZmZXJ1c2FnZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX0JVRkZF Ul9VU0FHRSwgZmFsc2UpOwpJbmRleDogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5pbnNlcnQu YwpJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5k aWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbmluc2VydC5jCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMJ KHJldmlzaW9uIDkxZGQ3MGZjNWRkYzYwY2JhZDViMTdjOTVmMTdjNmE1MTdmMzY3NzApCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luaW5zZXJ0LmMJKHJldmlzaW9uIDNkZWE3MmI2MmFk Yzg4MDY5MTdkYzQ1OWI4MmZmNDRkOTYyYmNiMTIpCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVk ZSAiYWNjZXNzL2dpbl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKICNp bmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgpJbmRleDogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3Qv Z2lzdGJ1aWxkLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlq Lm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0 L2dpc3RidWlsZC5jCShyZXZpc2lvbiA5MWRkNzBmYzVkZGM2MGNiYWQ1YjE3Yzk1ZjE3YzZhNTE3 ZjM2NzcwKQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYwkocmV2aXNp b24gM2RlYTcyYjYyYWRjODgwNjkxN2RjNDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTM4LDYgKzM4 LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvZ2lzdF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiYWNjZXNz L3RhYmxlYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNh dGFsb2cvaW5kZXguaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9l eGVjbm9kZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCkluZGV4OiBzcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3Rl bTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYt OAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaC5jCShyZXZpc2lvbiA5MWRkNzBmYzVkZGM2MGNiYWQ1YjE3Yzk1ZjE3YzZhNTE3 ZjM2NzcwKQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMJKHJldmlzaW9uIDNk ZWE3MmI2MmFkYzg4MDY5MTdkYzQ1OWI4MmZmNDRkOTYyYmNiMTIpCkBAIC0yMyw2ICsyMyw3IEBA CiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5o IgogI2luY2x1ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9pbmRl eC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv dmFjdXVtLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCkluZGV4OiBzcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW0uYwpJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50 ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMJKHJldmlzaW9uIDkxZGQ3MGZjNWRkYzYwY2JhZDViMTdjOTVmMTdjNmE1MTdmMzY3 NzApCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCShyZXZpc2lvbiAzZGVh NzJiNjJhZGM4ODA2OTE3ZGM0NTliODJmZjQ0ZDk2MmJjYjEyKQpAQCAtNTc1LDYgKzU3NSwyNCBA QAogCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0spOwogfQogCitzdGF0aWMg aW5saW5lIHZvaWQKK2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdChUYWJsZVNjYW5EZXNjIHNzY2Fu KQoreworCUFzc2VydChBY3RpdmVTbmFwc2hvdFNldCgpKTsKKwlQb3BBY3RpdmVTbmFwc2hvdCgp OworCVVucmVnaXN0ZXJTbmFwc2hvdChzc2Nhbi0+cnNfc25hcHNob3QpOworCXNzY2FuLT5yc19z bmFwc2hvdCA9IEludmFsaWRTbmFwc2hvdDsKKworCUFzc2VydCghVHJhbnNhY3Rpb25JZElzVmFs aWQoTXlQcm9jLT54bWluKSk7CisjaWYgVVNFX0lOSkVDVElPTl9QT0lOVFMKKwlpZiAoIVRyYW5z YWN0aW9uSWRJc1ZhbGlkKE15UHJvYy0+eGlkKSkKKwkJSU5KRUNUSU9OX1BPSU5UKCJoZWFwX3Jl c2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlIik7CisjZW5kaWYKKworCXNzY2FuLT5yc19zbmFw c2hvdCA9IFJlZ2lzdGVyU25hcHNob3QoR2V0TGF0ZXN0U25hcHNob3QoKSk7CisJUHVzaEFjdGl2 ZVNuYXBzaG90KHNzY2FuLT5yc19zbmFwc2hvdCk7Cit9CisKIC8qCiAgKiBoZWFwX2ZldGNoX25l eHRfYnVmZmVyIC0gcmVhZCBhbmQgcGluIHRoZSBuZXh0IGJsb2NrIGZyb20gTUFJTl9GT1JLTlVN LgogICoKQEAgLTU5Myw2ICs2MTEsMTEgQEAKIAkJc2Nhbi0+cnNfY2J1ZiA9IEludmFsaWRCdWZm ZXI7CiAJfQogCisJaWYgKHVubGlrZWx5KHNjYW4tPnJzX2Jhc2UucnNfZmxhZ3MgJiBTT19SRVNF VF9TTkFQU0hPVCkgJiBsaWtlbHkoc2Nhbi0+cnNfaW5pdGVkKSkKKwl7CisJCWhlYXBfcmVzZXRf c2Nhbl9zbmFwc2hvdCgoVGFibGVTY2FuRGVzYykgc2Nhbik7CisJfQorCiAJLyoKIAkgKiBCZSBz dXJlIHRvIGNoZWNrIGZvciBpbnRlcnJ1cHRzIGF0IGxlYXN0IG9uY2UgcGVyIHBhZ2UuICBDaGVj a3MgYXQKIAkgKiBoaWdoZXIgY29kZSBsZXZlbHMgd29uJ3QgYmUgYWJsZSB0byBzdG9wIGEgc2Vx c2NhbiB0aGF0IGVuY291bnRlcnMgbWFueQpAQCAtMTI0Miw2ICsxMjY1LDEzIEBACiAJaWYgKHNj YW4tPnJzX3BhcmFsbGVsd29ya2VyZGF0YSAhPSBOVUxMKQogCQlwZnJlZShzY2FuLT5yc19wYXJh bGxlbHdvcmtlcmRhdGEpOwogCisJaWYgKHNjYW4tPnJzX2Jhc2UucnNfZmxhZ3MgJiBTT19SRVNF VF9TTkFQU0hPVCkKKwl7CisJCUFzc2VydChzY2FuLT5yc19iYXNlLnJzX2ZsYWdzICYgU09fVEVN UF9TTkFQU0hPVCk7CisJCUFzc2VydChBY3RpdmVTbmFwc2hvdFNldCgpKTsKKwkJUG9wQWN0aXZl U25hcHNob3QoKTsKKwl9CisKIAlpZiAoc2Nhbi0+cnNfYmFzZS5yc19mbGFncyAmIFNPX1RFTVBf U05BUFNIT1QpCiAJCVVucmVnaXN0ZXJTbmFwc2hvdChzY2FuLT5yc19iYXNlLnJzX3NuYXBzaG90 KTsKIApJbmRleDogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKSURFQSBhZGRp dGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBh dGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 c29ydC5jCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29ydC5jCShyZXZpc2lv biA5MWRkNzBmYzVkZGM2MGNiYWQ1YjE3Yzk1ZjE3YzZhNTE3ZjM2NzcwKQorKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYwkocmV2aXNpb24gM2RlYTcyYjYyYWRjODgwNjkx N2RjNDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTg0LDYgKzg0LDcgQEAKIAlSZWxhdGlvbglpbmRl eDsKIAlib29sCQlpc3VuaXF1ZTsKIAlib29sCQludWxsc19ub3RfZGlzdGluY3Q7CisJYm9vbCAJ CXVuaXF1ZV9kZWFkX2lnbm9yZWQ7CiB9IEJUU3Bvb2w7CiAKIC8qCkBAIC0zNzcsNiArMzc4LDcg QEAKIAlidHNwb29sLT5pbmRleCA9IGluZGV4OwogCWJ0c3Bvb2wtPmlzdW5pcXVlID0gaW5kZXhJ bmZvLT5paV9VbmlxdWU7CiAJYnRzcG9vbC0+bnVsbHNfbm90X2Rpc3RpbmN0ID0gaW5kZXhJbmZv LT5paV9OdWxsc05vdERpc3RpbmN0OworCWJ0c3Bvb2wtPnVuaXF1ZV9kZWFkX2lnbm9yZWQgPSBp bmRleEluZm8tPmlpX0NvbmN1cnJlbnQ7CiAKIAkvKiBTYXZlIGFzIHByaW1hcnkgc3Bvb2wgKi8K IAlidWlsZHN0YXRlLT5zcG9vbCA9IGJ0c3Bvb2w7CkBAIC00MjUsOCArNDI3LDkgQEAKIAkgKiB0 aGUgdXNlIG9mIHBhcmFsbGVsaXNtIG9yIGFueSBvdGhlciBmYWN0b3IuCiAJICovCiAJYnVpbGRz dGF0ZS0+c3Bvb2wtPnNvcnRzdGF0ZSA9Ci0JCXR1cGxlc29ydF9iZWdpbl9pbmRleF9idHJlZSho ZWFwLCBpbmRleCwgYnVpbGRzdGF0ZS0+aXN1bmlxdWUsCi0JCQkJCQkJCQlidWlsZHN0YXRlLT5u dWxsc19ub3RfZGlzdGluY3QsCisJCXR1cGxlc29ydF9iZWdpbl9pbmRleF9idHJlZShoZWFwLCBp bmRleCwgYnRzcG9vbC0+aXN1bmlxdWUsCisJCQkJCQkJCQlidHNwb29sLT5udWxsc19ub3RfZGlz dGluY3QsCisJCQkJCQkJCQlidHNwb29sLT51bmlxdWVfZGVhZF9pZ25vcmVkLAogCQkJCQkJCQkJ bWFpbnRlbmFuY2Vfd29ya19tZW0sIGNvb3JkaW5hdGUsCiAJCQkJCQkJCQlUVVBMRVNPUlRfTk9O RSk7CiAKQEAgLTQzNSw3ICs0MzgsNyBAQAogCSAqIHRoZW0gb3V0IG9mIHRoZSB1bmlxdWVuZXNz IGNoZWNrLiAgV2UgZXhwZWN0IHRoYXQgdGhlIHNlY29uZCBzcG9vbCAoZm9yCiAJICogZGVhZCB0 dXBsZXMpIHdvbid0IGdldCB2ZXJ5IGZ1bGwsIHNvIHdlIGdpdmUgaXQgb25seSB3b3JrX21lbS4K IAkgKi8KLQlpZiAoaW5kZXhJbmZvLT5paV9VbmlxdWUpCisJaWYgKGluZGV4SW5mby0+aWlfVW5p cXVlICYmICFpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQpCiAJewogCQlCVFNwb29sICAgICpidHNw b29sMiA9IChCVFNwb29sICopIHBhbGxvYzAoc2l6ZW9mKEJUU3Bvb2wpKTsKIAkJU29ydENvb3Jk aW5hdGUgY29vcmRpbmF0ZTIgPSBOVUxMOwpAQCAtNDQzLDcgKzQ0Niw3IEBACiAJCS8qIEluaXRp YWxpemUgc2Vjb25kYXJ5IHNwb29sICovCiAJCWJ0c3Bvb2wyLT5oZWFwID0gaGVhcDsKIAkJYnRz cG9vbDItPmluZGV4ID0gaW5kZXg7Ci0JCWJ0c3Bvb2wyLT5pc3VuaXF1ZSA9IGZhbHNlOworCQli dHNwb29sMi0+aXN1bmlxdWUgPSBidHNwb29sMi0+dW5pcXVlX2RlYWRfaWdub3JlZCA9IGZhbHNl OwogCQkvKiBTYXZlIGFzIHNlY29uZGFyeSBzcG9vbCAqLwogCQlidWlsZHN0YXRlLT5zcG9vbDIg PSBidHNwb29sMjsKIApAQCAtNDY2LDcgKzQ2OSw3IEBACiAJCSAqIGZ1bGwsIHNvIHdlIGdpdmUg aXQgb25seSB3b3JrX21lbQogCQkgKi8KIAkJYnVpbGRzdGF0ZS0+c3Bvb2wyLT5zb3J0c3RhdGUg PQotCQkJdHVwbGVzb3J0X2JlZ2luX2luZGV4X2J0cmVlKGhlYXAsIGluZGV4LCBmYWxzZSwgZmFs c2UsIHdvcmtfbWVtLAorCQkJdHVwbGVzb3J0X2JlZ2luX2luZGV4X2J0cmVlKGhlYXAsIGluZGV4 LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB3b3JrX21lbSwKIAkJCQkJCQkJCQljb29yZGluYXRlMiwg VFVQTEVTT1JUX05PTkUpOwogCX0KIApAQCAtMTE0NSwxMSArMTE0OCwxMyBAQAogCVNvcnRTdXBw b3J0IHNvcnRLZXlzOwogCWludDY0CQl0dXBsZXNfZG9uZSA9IDA7CiAJYm9vbAkJZGVkdXBsaWNh dGU7CisJYm9vbAkJZmFpbF9vbl9kdXBsaWNhdGU7CiAKIAl3c3RhdGUtPmJ1bGtzdGF0ZSA9IHNt Z3JfYnVsa19zdGFydF9yZWwod3N0YXRlLT5pbmRleCwgTUFJTl9GT1JLTlVNKTsKIAogCWRlZHVw bGljYXRlID0gd3N0YXRlLT5pbnNrZXktPmFsbGVxdWFsaW1hZ2UgJiYgIWJ0c3Bvb2wtPmlzdW5p cXVlICYmCiAJCUJUR2V0RGVkdXBsaWNhdGVJdGVtcyh3c3RhdGUtPmluZGV4KTsKKwlmYWlsX29u X2R1cGxpY2F0ZSA9IChidHNwb29sLT51bmlxdWVfZGVhZF9pZ25vcmVkICYmIGJ0c3Bvb2wtPmlz dW5pcXVlICYmIGJ0c3Bvb2wyID09IE5VTEwpOwogCiAJaWYgKG1lcmdlKQogCXsKQEAgLTEzNTMs NiArMTM1OCw4MCBAQAogCiAJCXBmcmVlKGRzdGF0ZSk7CiAJfQorCWVsc2UgaWYgKGZhaWxfb25f ZHVwbGljYXRlKQorCXsKKwkJYm9vbCB3YXNfdmFsaWQgPSBmYWxzZSwKKwkJIAkgcHJldl9jaGVj a2VkID0gZmFsc2UsCisJCQkgd2FzX251bGw7CisJCUluZGV4VHVwbGUgcHJldiA9IE5VTEw7CisJ CVR1cGxlVGFibGVTbG90IAkJKnNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVsYXRp b25HZXREZXNjcih3c3RhdGUtPmhlYXApLAorCQkJCQkJCQkJCQkJCQkJICAgJlRUU09wc0J1ZmZl ckhlYXBUdXBsZSk7CisJCUluZGV4RmV0Y2hUYWJsZURhdGEgKmZldGNoID0gdGFibGVfaW5kZXhf ZmV0Y2hfYmVnaW4od3N0YXRlLT5oZWFwKTsKKworCQl3aGlsZSAoKGl0dXAgPSB0dXBsZXNvcnRf Z2V0aW5kZXh0dXBsZShidHNwb29sLT5zb3J0c3RhdGUsIHRydWUpKSAhPSBOVUxMKQorCQl7CisJ CQkvKiBXaGVuIHdlIHNlZSBmaXJzdCB0dXBsZSwgY3JlYXRlIGZpcnN0IGluZGV4IHBhZ2UgKi8K KwkJCWlmIChzdGF0ZSA9PSBOVUxMKQorCQkJCXN0YXRlID0gX2J0X3BhZ2VzdGF0ZSh3c3RhdGUs IDApOworCisJCQlpZiAocHJldiAhPSBOVUxMICYmCisJCQkJCSgod3N0YXRlLT5pbnNrZXktPmFs bGVxdWFsaW1hZ2UgJiYKKwkJCQkJCQlfYnRfa2VlcF9uYXR0c19mYXN0X3dhc251bGwod3N0YXRl LT5pbmRleCwgcHJldiwgaXR1cCwgJndhc19udWxsKSA+IGtleXN6KSB8fAorCQkJCQkJKF9idF9r ZWVwX25hdHRzX3dhc251bGwod3N0YXRlLT5pbmRleCwgcHJldiwgaXR1cCx3c3RhdGUtPmluc2tl eSwgJndhc19udWxsKSA+IGtleXN6KQorCQkJCQkpICYmCisJCQkJCShidHNwb29sLT5udWxsc19u b3RfZGlzdGluY3QgJiYgd2FzX251bGwpKQorCQkJeworCQkJCWJvb2wgY2FsbF9hZ2FpbiwgaWdu b3JlZCwgbm93X3ZhbGlkOworCQkJCUl0ZW1Qb2ludGVyRGF0YSB0aWQ7CisJCQkJaWYgKCFwcmV2 X2NoZWNrZWQpCisJCQkJeworCQkJCQljYWxsX2FnYWluID0gZmFsc2U7CisJCQkJCXRpZCA9IHBy ZXYtPnRfdGlkOworCQkJCQl3YXNfdmFsaWQgPSB0YWJsZV9pbmRleF9mZXRjaF90dXBsZShmZXRj aCwgJnRpZCwgU25hcHNob3RTZWxmLCBzbG90LCAmY2FsbF9hZ2FpbiwgJmlnbm9yZWQpOworCQkJ CQlwcmV2X2NoZWNrZWQgPSB0cnVlOworCQkJCX0KKworCQkJCWNhbGxfYWdhaW4gPSBmYWxzZTsK KwkJCQl0aWQgPSBpdHVwLT50X3RpZDsKKwkJCQlub3dfdmFsaWQgPSB0YWJsZV9pbmRleF9mZXRj aF90dXBsZShmZXRjaCwgJnRpZCwgU25hcHNob3RTZWxmLCBzbG90LCAmY2FsbF9hZ2FpbiwgJmln bm9yZWQpOworCQkJCWlmICh3YXNfdmFsaWQgJiYgbm93X3ZhbGlkKQorCQkJCXsKKwkJCQkJY2hh cgkgICAqa2V5X2Rlc2M7CisJCQkJCVR1cGxlRGVzYwl0dXBEZXMgPSBSZWxhdGlvbkdldERlc2Ny KHdzdGF0ZS0+aW5kZXgpOworCQkJCQlib29sCQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOworCQkJ CQlEYXR1bQkJdmFsdWVzW0lOREVYX01BWF9LRVlTXTsKKworCQkJCQlpbmRleF9kZWZvcm1fdHVw bGUoaXR1cCwgdHVwRGVzLCB2YWx1ZXMsIGlzbnVsbCk7CisKKwkJCQkJa2V5X2Rlc2MgPSBCdWls ZEluZGV4VmFsdWVEZXNjcmlwdGlvbih3c3RhdGUtPmluZGV4LCB2YWx1ZXMsIGlzbnVsbCk7CisK KwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOSVFVRV9WSU9M QVRJT04pLAorCQkJCQkJCQkJZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIHVuaXF1ZSBpbmRleCBc IiVzXCIiLAorCQkJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHdzdGF0ZS0+aW5k ZXgpKSwKKwkJCQkJCQkJCWtleV9kZXNjID8gZXJyZGV0YWlsKCJLZXkgJXMgaXMgZHVwbGljYXRl ZC4iLCBrZXlfZGVzYykgOgorCQkJCQkJCQkJZXJyZGV0YWlsKCJEdXBsaWNhdGUga2V5cyBleGlz dC4iKSwKKwkJCQkJCQkJCWVycnRhYmxlY29uc3RyYWludCh3c3RhdGUtPmhlYXAsCisJCQkJCQkJ CQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUod3N0YXRlLT5pbmRleCkpKSk7CisJCQkJ fQorCQkJCXdhc192YWxpZCB8PSBub3dfdmFsaWQ7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ d2FzX3ZhbGlkID0gZmFsc2U7CisJCQkJcHJldl9jaGVja2VkID0gZmFsc2U7CisJCQl9CisJCQlf YnRfYnVpbGRhZGQod3N0YXRlLCBzdGF0ZSwgaXR1cCwgMCk7CisJCQlpZiAocHJldikgcGZyZWUo cHJldik7CisJCQlwcmV2ID0gQ29weUluZGV4VHVwbGUoaXR1cCk7CisKKwkJCS8qIFJlcG9ydCBw cm9ncmVzcyAqLworCQkJcGdzdGF0X3Byb2dyZXNzX3VwZGF0ZV9wYXJhbShQUk9HUkVTU19DUkVB VEVJRFhfVFVQTEVTX0RPTkUsCisJCQkJCQkJCQkJICsrdHVwbGVzX2RvbmUpOworCQl9CisJCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xvdCk7CisJCXRhYmxlX2luZGV4X2ZldGNoX2Vu ZChmZXRjaCk7CisJfQogCWVsc2UKIAl7CiAJCS8qIG1lcmdpbmcgYW5kIGRlZHVwbGljYXRpb24g YXJlIGJvdGggdW5uZWNlc3NhcnkgKi8KQEAgLTE0MTQsMTcgKzE0OTMsNyBAQAogCWxlYWRlcnBh cnRpY2lwYXRlcyA9IGZhbHNlOwogI2VuZGlmCiAKLQkvKgotCSAqIEVudGVyIHBhcmFsbGVsIG1v ZGUsIGFuZCBjcmVhdGUgY29udGV4dCBmb3IgcGFyYWxsZWwgYnVpbGQgb2YgYnRyZWUKLQkgKiBp bmRleAotCSAqLwotCUVudGVyUGFyYWxsZWxNb2RlKCk7Ci0JQXNzZXJ0KHJlcXVlc3QgPiAwKTsK LQlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxDb250ZXh0KCJwb3N0Z3JlcyIsICJfYnRfcGFyYWxsZWxf YnVpbGRfbWFpbiIsCi0JCQkJCQkJCSByZXF1ZXN0KTsKLQotCXNjYW50dXBsZXNvcnRzdGF0ZXMg PSBsZWFkZXJwYXJ0aWNpcGF0ZXMgPyByZXF1ZXN0ICsgMSA6IHJlcXVlc3Q7Ci0KKwlBc3NlcnQo IWlzY29uY3VycmVudCB8fCAhVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7CiAJ LyoKIAkgKiBQcmVwYXJlIGZvciBzY2FuIG9mIHRoZSBiYXNlIHJlbGF0aW9uLiAgSW4gYSBub3Jt YWwgaW5kZXggYnVpbGQsIHdlIHVzZQogCSAqIFNuYXBzaG90QW55IGJlY2F1c2Ugd2UgbXVzdCBy ZXRyaWV2ZSBhbGwgdHVwbGVzIGFuZCBkbyBvdXIgb3duIHRpbWUKQEAgLTE0MzUsNyArMTUwNCwy MCBAQAogCWlmICghaXNjb25jdXJyZW50KQogCQlzbmFwc2hvdCA9IFNuYXBzaG90QW55OwogCWVs c2UKKwl7CiAJCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChHZXRUcmFuc2FjdGlvblNuYXBz aG90KCkpOworCQlQdXNoQWN0aXZlU25hcHNob3Qoc25hcHNob3QpOworCX0KKwkvKgorCSAqIEVu dGVyIHBhcmFsbGVsIG1vZGUsIGFuZCBjcmVhdGUgY29udGV4dCBmb3IgcGFyYWxsZWwgYnVpbGQg b2YgYnRyZWUKKwkgKiBpbmRleAorCSAqLworCUVudGVyUGFyYWxsZWxNb2RlKCk7CisJQXNzZXJ0 KHJlcXVlc3QgPiAwKTsKKwlwY3h0ID0gQ3JlYXRlUGFyYWxsZWxDb250ZXh0KCJwb3N0Z3JlcyIs ICJfYnRfcGFyYWxsZWxfYnVpbGRfbWFpbiIsCisJCQkJCQkJCSByZXF1ZXN0KTsKKworCXNjYW50 dXBsZXNvcnRzdGF0ZXMgPSBsZWFkZXJwYXJ0aWNpcGF0ZXMgPyByZXF1ZXN0ICsgMSA6IHJlcXVl c3Q7CiAKIAkvKgogCSAqIEVzdGltYXRlIHNpemUgZm9yIG91ciBvd24gUEFSQUxMRUxfS0VZX0JU UkVFX1NIQVJFRCB3b3Jrc3BhY2UsIGFuZApAQCAtMTQ1MCw3ICsxNTMyLDcgQEAKIAkgKiBVbmlx dWUgY2FzZSByZXF1aXJlcyBhIHNlY29uZCBzcG9vbCwgYW5kIHNvIHdlIG1heSBoYXZlIHRvIGFj Y291bnQgZm9yCiAJICogYW5vdGhlciBzaGFyZWQgd29ya3NwYWNlIGZvciB0aGF0IC0tIFBBUkFM TEVMX0tFWV9UVVBMRVNPUlRfU1BPT0wyCiAJICovCi0JaWYgKCFidHNwb29sLT5pc3VuaXF1ZSkK KwlpZiAoIWJ0c3Bvb2wtPmlzdW5pcXVlIHx8IGlzY29uY3VycmVudCkKIAkJc2htX3RvY19lc3Rp bWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDIpOwogCWVsc2UKIAl7CkBAIC0xNDg1LDYgKzE1 NjcsOCBAQAogCiAJLyogRXZlcnlvbmUncyBoYWQgYSBjaGFuY2UgdG8gYXNrIGZvciBzcGFjZSwg c28gbm93IGNyZWF0ZSB0aGUgRFNNICovCiAJSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKHBjeHQpOwor CWlmIChJc01WQ0NTbmFwc2hvdChzbmFwc2hvdCkpCisJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAK IAkvKiBJZiBubyBEU00gc2VnbWVudCB3YXMgYXZhaWxhYmxlLCBiYWNrIG91dCAoZG8gc2VyaWFs IGJ1aWxkKSAqLwogCWlmIChwY3h0LT5zZWcgPT0gTlVMTCkKQEAgLTE1MTUsNyArMTU5OSw3IEBA CiAJYnRzaGFyZWQtPmJyb2tlbmhvdGNoYWluID0gZmFsc2U7CiAJdGFibGVfcGFyYWxsZWxzY2Fu X2luaXRpYWxpemUoYnRzcG9vbC0+aGVhcCwKIAkJCQkJCQkJICBQYXJhbGxlbFRhYmxlU2NhbkZy b21CVFNoYXJlZChidHNoYXJlZCksCi0JCQkJCQkJCSAgc25hcHNob3QpOworCQkJCQkJCQkgIGlz Y29uY3VycmVudCA/IEludmFsaWRTbmFwc2hvdCA6IHNuYXBzaG90KTsKIAogCS8qCiAJICogU3Rv cmUgc2hhcmVkIHR1cGxlc29ydC1wcml2YXRlIHN0YXRlLCBmb3Igd2hpY2ggd2UgcmVzZXJ2ZWQg c3BhY2UuCkBAIC0xNTI5LDcgKzE2MTMsNyBAQAogCXNobV90b2NfaW5zZXJ0KHBjeHQtPnRvYywg UEFSQUxMRUxfS0VZX1RVUExFU09SVCwgc2hhcmVkc29ydCk7CiAKIAkvKiBVbmlxdWUgY2FzZSBy ZXF1aXJlcyBhIHNlY29uZCBzcG9vbCwgYW5kIGFzc29jaWF0ZWQgc2hhcmVkIHN0YXRlICovCi0J aWYgKCFidHNwb29sLT5pc3VuaXF1ZSkKKwlpZiAoIWJ0c3Bvb2wtPmlzdW5pcXVlIHx8IGlzY29u Y3VycmVudCkKIAkJc2hhcmVkc29ydDIgPSBOVUxMOwogCWVsc2UKIAl7CkBAIC0xNTc1LDcgKzE2 NTksNyBAQAogCWJ0bGVhZGVyLT5idHNoYXJlZCA9IGJ0c2hhcmVkOwogCWJ0bGVhZGVyLT5zaGFy ZWRzb3J0ID0gc2hhcmVkc29ydDsKIAlidGxlYWRlci0+c2hhcmVkc29ydDIgPSBzaGFyZWRzb3J0 MjsKLQlidGxlYWRlci0+c25hcHNob3QgPSBzbmFwc2hvdDsKKwlidGxlYWRlci0+c25hcHNob3Qg PSBpc2NvbmN1cnJlbnQgPyBJbnZhbGlkU25hcHNob3QgOiBzbmFwc2hvdDsKIAlidGxlYWRlci0+ d2FsdXNhZ2UgPSB3YWx1c2FnZTsKIAlidGxlYWRlci0+YnVmZmVydXNhZ2UgPSBidWZmZXJ1c2Fn ZTsKIApAQCAtMTU4OSwxNSArMTY3MywyNSBAQAogCS8qIFNhdmUgbGVhZGVyIHN0YXRlIG5vdyB0 aGF0IGl0J3MgY2xlYXIgYnVpbGQgd2lsbCBiZSBwYXJhbGxlbCAqLwogCWJ1aWxkc3RhdGUtPmJ0 bGVhZGVyID0gYnRsZWFkZXI7CiAKKwlpZiAoaXNjb25jdXJyZW50KQorCXsKKwkJV2FpdEZvclBh cmFsbGVsV29ya2Vyc1RvQXR0YWNoKHBjeHQsIHRydWUpOworCQlVbnJlZ2lzdGVyU25hcHNob3Qo c25hcHNob3QpOworCX0KKwogCS8qIEpvaW4gaGVhcCBzY2FuIG91cnNlbHZlcyAqLwogCWlmIChs ZWFkZXJwYXJ0aWNpcGF0ZXMpCisJeworCQlJTkpFQ1RJT05fUE9JTlQoIl9idF9sZWFkZXJfcGFy dGljaXBhdGVfYXNfd29ya2VyIik7CiAJCV9idF9sZWFkZXJfcGFydGljaXBhdGVfYXNfd29ya2Vy KGJ1aWxkc3RhdGUpOworCX0KIAogCS8qCiAJICogQ2FsbGVyIG5lZWRzIHRvIHdhaXQgZm9yIGFs bCBsYXVuY2hlZCB3b3JrZXJzIHdoZW4gd2UgcmV0dXJuLiAgTWFrZQogCSAqIHN1cmUgdGhhdCB0 aGUgZmFpbHVyZS10by1zdGFydCBjYXNlIHdpbGwgbm90IGhhbmcgZm9yZXZlci4KIAkgKi8KLQlX YWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9BdHRhY2gocGN4dCk7CisJaWYgKCFpc2NvbmN1cnJlbnQp CisJCVdhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0F0dGFjaChwY3h0LCBmYWxzZSk7CiB9CiAKIC8q CkBAIC0xNjA3LDYgKzE3MDEsNyBAQAogX2J0X2VuZF9wYXJhbGxlbChCVExlYWRlciAqYnRsZWFk ZXIpCiB7CiAJaW50CQkJaTsKKwlTbmFwc2hvdCBzbmFwc2hvdCA9IGJ0bGVhZGVyLT5zbmFwc2hv dDsKIAogCS8qIFNodXRkb3duIHdvcmtlciBwcm9jZXNzZXMgKi8KIAlXYWl0Rm9yUGFyYWxsZWxX b3JrZXJzVG9GaW5pc2goYnRsZWFkZXItPnBjeHQpOwpAQCAtMTYxOSw4ICsxNzE0LDEwIEBACiAJ CUluc3RyQWNjdW1QYXJhbGxlbFF1ZXJ5KCZidGxlYWRlci0+YnVmZmVydXNhZ2VbaV0sICZidGxl YWRlci0+d2FsdXNhZ2VbaV0pOwogCiAJLyogRnJlZSBsYXN0IHJlZmVyZW5jZSB0byBNVkNDIHNu YXBzaG90LCBpZiBvbmUgd2FzIHVzZWQgKi8KLQlpZiAoSXNNVkNDU25hcHNob3QoYnRsZWFkZXIt PnNuYXBzaG90KSkKLQkJVW5yZWdpc3RlclNuYXBzaG90KGJ0bGVhZGVyLT5zbmFwc2hvdCk7CisJ QXNzZXJ0KCFidGxlYWRlci0+YnRzaGFyZWQtPmlzY29uY3VycmVudCB8fCBzbmFwc2hvdCA9PSBJ bnZhbGlkU25hcHNob3QpOworCUFzc2VydChidGxlYWRlci0+YnRzaGFyZWQtPmlzY29uY3VycmVu dCB8fCBzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3QpOworCWlmIChzbmFwc2hvdCAhPSBJbnZh bGlkU25hcHNob3QgJiYgSXNNVkNDU25hcHNob3Qoc25hcHNob3QpKQorCQlVbnJlZ2lzdGVyU25h cHNob3Qoc25hcHNob3QpOwogCURlc3Ryb3lQYXJhbGxlbENvbnRleHQoYnRsZWFkZXItPnBjeHQp OwogCUV4aXRQYXJhbGxlbE1vZGUoKTsKIH0KQEAgLTE2OTcsOSArMTc5NCwxMCBAQAogCWxlYWRl cndvcmtlci0+aW5kZXggPSBidWlsZHN0YXRlLT5zcG9vbC0+aW5kZXg7CiAJbGVhZGVyd29ya2Vy LT5pc3VuaXF1ZSA9IGJ1aWxkc3RhdGUtPnNwb29sLT5pc3VuaXF1ZTsKIAlsZWFkZXJ3b3JrZXIt Pm51bGxzX25vdF9kaXN0aW5jdCA9IGJ1aWxkc3RhdGUtPnNwb29sLT5udWxsc19ub3RfZGlzdGlu Y3Q7CisJbGVhZGVyd29ya2VyLT51bmlxdWVfZGVhZF9pZ25vcmVkID0gYnRsZWFkZXItPmJ0c2hh cmVkLT5pc2NvbmN1cnJlbnQ7CiAKIAkvKiBJbml0aWFsaXplIHNlY29uZCBzcG9vbCwgaWYgcmVx dWlyZWQgKi8KLQlpZiAoIWJ0bGVhZGVyLT5idHNoYXJlZC0+aXN1bmlxdWUpCisJaWYgKCFidGxl YWRlci0+YnRzaGFyZWQtPmlzdW5pcXVlIHx8IGJ0bGVhZGVyLT5idHNoYXJlZC0+aXNjb25jdXJy ZW50KQogCQlsZWFkZXJ3b3JrZXIyID0gTlVMTDsKIAllbHNlCiAJewpAQCAtMTcwOSw3ICsxODA3 LDcgQEAKIAkJLyogSW5pdGlhbGl6ZSB3b3JrZXIncyBvd24gc2Vjb25kYXJ5IHNwb29sICovCiAJ CWxlYWRlcndvcmtlcjItPmhlYXAgPSBsZWFkZXJ3b3JrZXItPmhlYXA7CiAJCWxlYWRlcndvcmtl cjItPmluZGV4ID0gbGVhZGVyd29ya2VyLT5pbmRleDsKLQkJbGVhZGVyd29ya2VyMi0+aXN1bmlx dWUgPSBmYWxzZTsKKwkJbGVhZGVyd29ya2VyMi0+aXN1bmlxdWUgPSBsZWFkZXJ3b3JrZXIyLT51 bmlxdWVfZGVhZF9pZ25vcmVkID0gZmFsc2U7CiAJfQogCiAJLyoKQEAgLTE3NTgsMTIgKzE4NTYs NyBAQAogCQlSZXNldFVzYWdlKCk7CiAjZW5kaWYJCQkJCQkJLyogQlRSRUVfQlVJTERfU1RBVFMg Ki8KIAotCS8qCi0JICogVGhlIG9ubHkgcG9zc2libGUgc3RhdHVzIGZsYWcgdGhhdCBjYW4gYmUg c2V0IHRvIHRoZSBwYXJhbGxlbCB3b3JrZXIgaXMKLQkgKiBQUk9DX0lOX1NBRkVfSUMuCi0JICov Ci0JQXNzZXJ0KChNeVByb2MtPnN0YXR1c0ZsYWdzID09IDApIHx8Ci0JCSAgIChNeVByb2MtPnN0 YXR1c0ZsYWdzID09IFBST0NfSU5fU0FGRV9JQykpOworCUFzc2VydChNeVByb2MtPnN0YXR1c0Zs YWdzID09IDApOwogCiAJLyogU2V0IGRlYnVnX3F1ZXJ5X3N0cmluZyBmb3IgaW5kaXZpZHVhbCB3 b3JrZXJzIGZpcnN0ICovCiAJc2hhcmVkcXVlcnkgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFM TEVMX0tFWV9RVUVSWV9URVhULCB0cnVlKTsKQEAgLTE3OTYsMTIgKzE4ODksMTMgQEAKIAlidHNw b29sLT5oZWFwID0gaGVhcFJlbDsKIAlidHNwb29sLT5pbmRleCA9IGluZGV4UmVsOwogCWJ0c3Bv b2wtPmlzdW5pcXVlID0gYnRzaGFyZWQtPmlzdW5pcXVlOworCWJ0c3Bvb2wtPnVuaXF1ZV9kZWFk X2lnbm9yZWQgPSBidHNoYXJlZC0+aXNjb25jdXJyZW50OwogCWJ0c3Bvb2wtPm51bGxzX25vdF9k aXN0aW5jdCA9IGJ0c2hhcmVkLT5udWxsc19ub3RfZGlzdGluY3Q7CiAKIAkvKiBMb29rIHVwIHNo YXJlZCBzdGF0ZSBwcml2YXRlIHRvIHR1cGxlc29ydC5jICovCiAJc2hhcmVkc29ydCA9IHNobV90 b2NfbG9va3VwKHRvYywgUEFSQUxMRUxfS0VZX1RVUExFU09SVCwgZmFsc2UpOwogCXR1cGxlc29y dF9hdHRhY2hfc2hhcmVkKHNoYXJlZHNvcnQsIHNlZyk7Ci0JaWYgKCFidHNoYXJlZC0+aXN1bmlx dWUpCisJaWYgKCFidHNoYXJlZC0+aXN1bmlxdWUgfHwgYnRzaGFyZWQtPmlzY29uY3VycmVudCkK IAl7CiAJCWJ0c3Bvb2wyID0gTlVMTDsKIAkJc2hhcmVkc29ydDIgPSBOVUxMOwpAQCAtMTgxNCw3 ICsxOTA4LDcgQEAKIAkJLyogSW5pdGlhbGl6ZSB3b3JrZXIncyBvd24gc2Vjb25kYXJ5IHNwb29s ICovCiAJCWJ0c3Bvb2wyLT5oZWFwID0gYnRzcG9vbC0+aGVhcDsKIAkJYnRzcG9vbDItPmluZGV4 ID0gYnRzcG9vbC0+aW5kZXg7Ci0JCWJ0c3Bvb2wyLT5pc3VuaXF1ZSA9IGZhbHNlOworCQlidHNw b29sMi0+aXN1bmlxdWUgPSBidHNwb29sMi0+dW5pcXVlX2RlYWRfaWdub3JlZCA9IGZhbHNlOwog CQkvKiBMb29rIHVwIHNoYXJlZCBzdGF0ZSBwcml2YXRlIHRvIHR1cGxlc29ydC5jICovCiAJCXNo YXJlZHNvcnQyID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfVFVQTEVTT1JUX1NQ T09MMiwgZmFsc2UpOwogCQl0dXBsZXNvcnRfYXR0YWNoX3NoYXJlZChzaGFyZWRzb3J0Miwgc2Vn KTsKQEAgLTE4MjUsOCArMTkxOSwxMiBAQAogCiAJLyogUGVyZm9ybSBzb3J0aW5nIG9mIHNwb29s LCBhbmQgcG9zc2libHkgYSBzcG9vbDIgKi8KIAlzb3J0bWVtID0gbWFpbnRlbmFuY2Vfd29ya19t ZW0gLyBidHNoYXJlZC0+c2NhbnR1cGxlc29ydHN0YXRlczsKKwlpZiAoYnRzaGFyZWQtPmlzY29u Y3VycmVudCkKKwkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAlfYnRfcGFyYWxsZWxfc2Nhbl9hbmRf c29ydChidHNwb29sLCBidHNwb29sMiwgYnRzaGFyZWQsIHNoYXJlZHNvcnQsCiAJCQkJCQkJICAg c2hhcmVkc29ydDIsIHNvcnRtZW0sIGZhbHNlKTsKKwlpZiAoYnRzaGFyZWQtPmlzY29uY3VycmVu dCkKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldExhdGVzdFNuYXBzaG90KCkpOwogCiAJLyogUmVw b3J0IFdBTC9idWZmZXIgdXNhZ2UgZHVyaW5nIHBhcmFsbGVsIGV4ZWN1dGlvbiAqLwogCWJ1ZmZl cnVzYWdlID0gc2htX3RvY19sb29rdXAodG9jLCBQQVJBTExFTF9LRVlfQlVGRkVSX1VTQUdFLCBm YWxzZSk7CkBAIC0xODY4LDYgKzE5NjYsNyBAQAogCVRhYmxlU2NhbkRlc2Mgc2NhbjsKIAlkb3Vi bGUJCXJlbHR1cGxlczsKIAlJbmRleEluZm8gICppbmRleEluZm87CisJU25hcHNob3Qgc25hcHNo b3Q7CiAKIAkvKiBJbml0aWFsaXplIGxvY2FsIHR1cGxlc29ydCBjb29yZGluYXRpb24gc3RhdGUg Ki8KIAljb29yZGluYXRlID0gcGFsbG9jMChzaXplb2YoU29ydENvb3JkaW5hdGVEYXRhKSk7CkBA IC0xODgwLDYgKzE5NzksNyBAQAogCQkJCQkJCQkJCQkJCSBidHNwb29sLT5pbmRleCwKIAkJCQkJ CQkJCQkJCQkgYnRzcG9vbC0+aXN1bmlxdWUsCiAJCQkJCQkJCQkJCQkJIGJ0c3Bvb2wtPm51bGxz X25vdF9kaXN0aW5jdCwKKwkJCQkJCQkJCQkJCQkgYnRzcG9vbC0+dW5pcXVlX2RlYWRfaWdub3Jl ZCwKIAkJCQkJCQkJCQkJCQkgc29ydG1lbSwgY29vcmRpbmF0ZSwKIAkJCQkJCQkJCQkJCQkgVFVQ TEVTT1JUX05PTkUpOwogCkBAIC0xOTAyLDcgKzIwMDIsOCBAQAogCQljb29yZGluYXRlMi0+blBh cnRpY2lwYW50cyA9IC0xOwogCQljb29yZGluYXRlMi0+c2hhcmVkc29ydCA9IHNoYXJlZHNvcnQy OwogCQlidHNwb29sMi0+c29ydHN0YXRlID0KLQkJCXR1cGxlc29ydF9iZWdpbl9pbmRleF9idHJl ZShidHNwb29sLT5oZWFwLCBidHNwb29sLT5pbmRleCwgZmFsc2UsIGZhbHNlLAorCQkJdHVwbGVz b3J0X2JlZ2luX2luZGV4X2J0cmVlKGJ0c3Bvb2wtPmhlYXAsIGJ0c3Bvb2wtPmluZGV4LAorCQkJ CQkJCQkJCWZhbHNlLCBmYWxzZSwgZmFsc2UsCiAJCQkJCQkJCQkJTWluKHNvcnRtZW0sIHdvcmtf bWVtKSwgY29vcmRpbmF0ZTIsCiAJCQkJCQkJCQkJZmFsc2UpOwogCX0KQEAgLTE5MTcsMTMgKzIw MTgsMjcgQEAKIAlidWlsZHN0YXRlLmluZHR1cGxlcyA9IDA7CiAJYnVpbGRzdGF0ZS5idGxlYWRl ciA9IE5VTEw7CiAKKwlBc3NlcnQoIWJ0c2hhcmVkLT5pc2NvbmN1cnJlbnQgfHwgIVRyYW5zYWN0 aW9uSWRJc1ZhbGlkKE15UHJvYy0+eG1pbikpOwogCS8qIEpvaW4gcGFyYWxsZWwgc2NhbiAqLwor CWlmIChidHNoYXJlZC0+aXNjb25jdXJyZW50KQorCXsKKwkJc25hcHNob3QgPSBSZWdpc3RlclNu YXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCVB1c2hBY3RpdmVTbmFwc2hvdChz bmFwc2hvdCk7CisJfQogCWluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGJ0c3Bvb2wtPmluZGV4 KTsKKwlpZiAoYnRzaGFyZWQtPmlzY29uY3VycmVudCkKKwl7CisJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CisJCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJfQorCUFzc2VydCghYnRzaGFy ZWQtPmlzY29uY3VycmVudCB8fCAhVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54bWluKSk7 CisKIAlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSBidHNoYXJlZC0+aXNjb25jdXJyZW50Owog CXNjYW4gPSB0YWJsZV9iZWdpbnNjYW5fcGFyYWxsZWwoYnRzcG9vbC0+aGVhcCwKIAkJCQkJCQkJ CVBhcmFsbGVsVGFibGVTY2FuRnJvbUJUU2hhcmVkKGJ0c2hhcmVkKSk7CiAJcmVsdHVwbGVzID0g dGFibGVfaW5kZXhfYnVpbGRfc2NhbihidHNwb29sLT5oZWFwLCBidHNwb29sLT5pbmRleCwgaW5k ZXhJbmZvLAotCQkJCQkJCQkJICAgdHJ1ZSwgcHJvZ3Jlc3MsIF9idF9idWlsZF9jYWxsYmFjaywK KwkJCQkJCQkJCSAgIHRydWUsIHByb2dyZXNzLAorCQkJCQkJCQkJICAgX2J0X2J1aWxkX2NhbGxi YWNrLAogCQkJCQkJCQkJICAgKHZvaWQgKikgJmJ1aWxkc3RhdGUsIHNjYW4pOwogCiAJLyogRXhl Y3V0ZSB0aGlzIHdvcmtlcidzIHBhcnQgb2YgdGhlIHNvcnQgKi8KSW5kZXg6IHNyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3Rl bTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYt OAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2lu c2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGdpbnNlcnQuYwotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ2luc2VydC5jCShyZXZpc2lvbiA5MWRkNzBmYzVkZGM2 MGNiYWQ1YjE3Yzk1ZjE3YzZhNTE3ZjM2NzcwKQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Bn aXN0L3NwZ2luc2VydC5jCShyZXZpc2lvbiAzZGVhNzJiNjJhZGM4ODA2OTE3ZGM0NTliODJmZjQ0 ZDk2MmJjYjEyKQpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zcGdpc3RfcHJp dmF0ZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3hs b2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAjaW5jbHVkZSAibWlzY2Fk bWluLmgiCiAjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9i dWZtZ3IuaCIKSW5kZXg6IHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpJREVB IGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmlt cGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYwotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMJ KHJldmlzaW9uIDkxZGQ3MGZjNWRkYzYwY2JhZDViMTdjOTVmMTdjNmE1MTdmMzY3NzApCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwkocmV2aXNpb24gM2RlYTcyYjYy YWRjODgwNjkxN2RjNDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNs dWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRl ICJ1dGlscy9zZWxmdW5jcy5oIgorI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKIAogLyogR1VD IHBhcmFtZXRlcnMgKi8KIGRvdWJsZQkJY3Vyc29yX3R1cGxlX2ZyYWN0aW9uID0gREVGQVVMVF9D VVJTT1JfVFVQTEVfRlJBQ1RJT047CkBAIC02NzkxLDYgKzY3OTIsNyBAQAogCUJsb2NrTnVtYmVy IGhlYXBfYmxvY2tzOwogCWRvdWJsZQkJcmVsdHVwbGVzOwogCWRvdWJsZQkJYWxsdmlzZnJhYzsK KwlTbmFwc2hvdAlzbmFwc2hvdCA9IEludmFsaWRTbmFwc2hvdDsKIAogCS8qCiAJICogV2UgZG9u J3QgYWxsb3cgcGVyZm9ybWluZyBwYXJhbGxlbCBvcGVyYXRpb24gaW4gc3RhbmRhbG9uZSBiYWNr ZW5kIG9yCkBAIC02ODQyLDYgKzY4NDQsMTAgQEAKIAloZWFwID0gdGFibGVfb3Blbih0YWJsZU9p ZCwgTm9Mb2NrKTsKIAlpbmRleCA9IGluZGV4X29wZW4oaW5kZXhPaWQsIE5vTG9jayk7CiAKKwlp ZiAoIUFjdGl2ZVNuYXBzaG90U2V0KCkpIHsKKwkJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90 KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CisJCVB1c2hBY3RpdmVTbmFwc2hvdChzbmFwc2hv dCk7CisJfQogCS8qCiAJICogRGV0ZXJtaW5lIGlmIGl0J3Mgc2FmZSB0byBwcm9jZWVkLgogCSAq CkBAIC02ODk5LDYgKzY5MDUsMTIgQEAKIAkJcGFyYWxsZWxfd29ya2Vycy0tOwogCiBkb25lOgor CWlmIChzbmFwc2hvdCAhPSBJbnZhbGlkU25hcHNob3QpCisJeworCQlQb3BBY3RpdmVTbmFwc2hv dCgpOworCQlVbnJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOworCX0KKwogCWluZGV4X2Nsb3Nl KGluZGV4LCBOb0xvY2spOwogCXRhYmxlX2Nsb3NlKGhlYXAsIE5vTG9jayk7CiAKSW5kZXg6IHNy Yy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1 YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8 Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUv dGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYwotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCShyZXZpc2lvbiAxMDNiYmI3MDNmOTc0YzY1 YmU2ZTIzOGNhMmMxODFmMTQ3MGNlYjI1KQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUv dGFibGVhbS5jCShyZXZpc2lvbiAzZGVhNzJiNjJhZGM4ODA2OTE3ZGM0NTliODJmZjQ0ZDk2MmJj YjEyKQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9zaG1lbS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvcHJvYy5oIgogCiAvKgogICogQ29uc3RhbnRzIHRvIGNvbnRyb2wgdGhlIGJl aGF2aW9yIG9mIGJsb2NrIGFsbG9jYXRpb24gdG8gcGFyYWxsZWwgd29ya2VycwpAQCAtMTQ5LDE1 ICsxNTAsMjMgQEAKIAogCXBzY2FuLT5waHNfc25hcHNob3Rfb2ZmID0gc25hcHNob3Rfb2ZmOwog Ci0JaWYgKElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KSkKKworCWlmIChzbmFwc2hvdCA9PSBJbnZh bGlkU25hcHNob3QpCisJeworCQlwc2Nhbi0+cGhzX3NuYXBzaG90X2FueSA9IGZhbHNlOworCQlw c2Nhbi0+cGhzX3NuYXBzaG90X3Jlc2V0ID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNNVkNDU25h cHNob3Qoc25hcHNob3QpKQogCXsKIAkJU2VyaWFsaXplU25hcHNob3Qoc25hcHNob3QsIChjaGFy ICopIHBzY2FuICsgcHNjYW4tPnBoc19zbmFwc2hvdF9vZmYpOwogCQlwc2Nhbi0+cGhzX3NuYXBz aG90X2FueSA9IGZhbHNlOworCQlwc2Nhbi0+cGhzX3NuYXBzaG90X3Jlc2V0ID0gZmFsc2U7CiAJ fQogCWVsc2UKIAl7CiAJCUFzc2VydChzbmFwc2hvdCA9PSBTbmFwc2hvdEFueSk7CiAJCXBzY2Fu LT5waHNfc25hcHNob3RfYW55ID0gdHJ1ZTsKKwkJcHNjYW4tPnBoc19zbmFwc2hvdF9yZXNldCA9 IGZhbHNlOwogCX0KIH0KIApAQCAtMTcwLDcgKzE3OSwxNiBAQAogCiAJQXNzZXJ0KFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pID09IHBzY2FuLT5waHNfcmVsaWQpOwogCi0JaWYgKCFwc2Nhbi0+ cGhzX3NuYXBzaG90X2FueSkKKwlpZiAocHNjYW4tPnBoc19zbmFwc2hvdF9yZXNldCkKKwl7CisJ CUFzc2VydCghQWN0aXZlU25hcHNob3RTZXQoKSk7CisJCUFzc2VydChNeVByb2MtPnhtaW4gPT0g SW52YWxpZFRyYW5zYWN0aW9uSWQpOworCisJCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChH ZXRMYXRlc3RTbmFwc2hvdCgpKTsKKwkJUHVzaEFjdGl2ZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJ ZmxhZ3MgfD0gKFNPX1JFU0VUX1NOQVBTSE9UIHwgU09fVEVNUF9TTkFQU0hPVCk7CisJfQorCWVs c2UgaWYgKCFwc2Nhbi0+cGhzX3NuYXBzaG90X2FueSkKIAl7CiAJCS8qIFNuYXBzaG90IHdhcyBz ZXJpYWxpemVkIC0tIHJlc3RvcmUgaXQgKi8KIAkJc25hcHNob3QgPSBSZXN0b3JlU25hcHNob3Qo KGNoYXIgKikgcHNjYW4gKyBwc2Nhbi0+cGhzX3NuYXBzaG90X29mZik7CkluZGV4OiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJz eXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+ VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v cGFyYWxsZWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwkocmV2aXNpb24gMTAzYmJiNzAz Zjk3NGM2NWJlNmUyMzhjYTJjMTgxZjE0NzBjZWIyNSkKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vcGFyYWxsZWwuYwkocmV2aXNpb24gOTgxN2E4ZmYyNTRiYWUwMjkxYTMyMGJkMzA2 ZDJlYzEyODBmNzU5MikKQEAgLTc2LDYgKzc2LDcgQEAKICNkZWZpbmUgUEFSQUxMRUxfS0VZX1JF TE1BUFBFUl9TVEFURQkJVUlOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkYwMDBEKQogI2RlZmluZSBQ QVJBTExFTF9LRVlfVU5DT01NSVRURURFTlVNUwkJVUlOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkYw MDBFKQogI2RlZmluZSBQQVJBTExFTF9LRVlfQ0xJRU5UQ09OTklORk8JCQlVSU5UNjRDT05TVCgw eEZGRkZGRkZGRkZGRjAwMEYpCisjZGVmaW5lIFBBUkFMTEVMX0tFWV9TTkFQU0hPVF9TRVRfRkxB RwkJVUlOVDY0Q09OU1QoMHhGRkZGRkZGRkZGRkYwMDEwKQogCiAvKiBGaXhlZC1zaXplIHBhcmFs bGVsIHN0YXRlLiAqLwogdHlwZWRlZiBzdHJ1Y3QgRml4ZWRQYXJhbGxlbFN0YXRlCkBAIC0yODks NiArMjkwLDkgQEAKIAkJCQkJCQkgICBtdWxfc2l6ZShQQVJBTExFTF9FUlJPUl9RVUVVRV9TSVpF LAogCQkJCQkJCQkJCXBjeHQtPm53b3JrZXJzKSk7CiAJCXNobV90b2NfZXN0aW1hdGVfa2V5cygm cGN4dC0+ZXN0aW1hdG9yLCAxKTsKKworCQlzaG1fdG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5l c3RpbWF0b3IsIG11bF9zaXplKHNpemVvZihib29sKSwgcGN4dC0+bndvcmtlcnMpKTsKKwkJc2ht X3RvY19lc3RpbWF0ZV9rZXlzKCZwY3h0LT5lc3RpbWF0b3IsIDEpOwogCiAJCS8qIEVzdGltYXRl IGhvdyBtdWNoIHdlJ2xsIG5lZWQgZm9yIHRoZSBlbnRyeXBvaW50IGluZm8uICovCiAJCXNobV90 b2NfZXN0aW1hdGVfY2h1bmsoJnBjeHQtPmVzdGltYXRvciwgc3RybGVuKHBjeHQtPmxpYnJhcnlf bmFtZSkgKwpAQCAtMzU5LDYgKzM2Myw3IEBACiAJCWNoYXIJICAgKmVudHJ5cG9pbnRzdGF0ZTsK IAkJY2hhcgkgICAqdW5jb21taXR0ZWRlbnVtc3NwYWNlOwogCQljaGFyCSAgICpjbGllbnRjb25u aW5mb3NwYWNlOworCQlib29sCSAgICpzbmFwc2hvdF9zZXRfZmxhZ19zcGFjZTsKIAkJU2l6ZQkJ bG5hbWVsZW47CiAKIAkJLyogU2VyaWFsaXplIHNoYXJlZCBsaWJyYXJpZXMgd2UgaGF2ZSBsb2Fk ZWQuICovCkBAIC00NzQsNiArNDc5LDE1IEBACiAJCXN0cmNweShlbnRyeXBvaW50c3RhdGUsIHBj eHQtPmxpYnJhcnlfbmFtZSk7CiAJCXN0cmNweShlbnRyeXBvaW50c3RhdGUgKyBsbmFtZWxlbiAr IDEsIHBjeHQtPmZ1bmN0aW9uX25hbWUpOwogCQlzaG1fdG9jX2luc2VydChwY3h0LT50b2MsIFBB UkFMTEVMX0tFWV9FTlRSWVBPSU5ULCBlbnRyeXBvaW50c3RhdGUpOworCisJCXNuYXBzaG90X3Nl dF9mbGFnX3NwYWNlID0KKwkJCQlzaG1fdG9jX2FsbG9jYXRlKHBjeHQtPnRvYywgbXVsX3NpemUo c2l6ZW9mKGJvb2wpLCBwY3h0LT5ud29ya2VycykpOworCQlmb3IgKGkgPSAwOyBpIDwgcGN4dC0+ bndvcmtlcnM7ICsraSkKKwkJeworCQkJcGN4dC0+d29ya2VyW2ldLnNuYXBzaG90X3NldF9mbGFn ID0gc25hcHNob3Rfc2V0X2ZsYWdfc3BhY2UgKyBpICogc2l6ZW9mKGJvb2wpOworCQkJKnBjeHQt PndvcmtlcltpXS5zbmFwc2hvdF9zZXRfZmxhZyA9IGZhbHNlOworCQl9CisJCXNobV90b2NfaW5z ZXJ0KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX1NOQVBTSE9UX1NFVF9GTEFHLCBzbmFwc2hvdF9z ZXRfZmxhZ19zcGFjZSk7CiAJfQogCiAJLyogUmVzdG9yZSBwcmV2aW91cyBtZW1vcnkgY29udGV4 dC4gKi8KQEAgLTUxMSw2ICs1MjUsNyBAQAogCWlmIChwY3h0LT5ud29ya2VycyA+IDApCiAJewog CQljaGFyCSAgICplcnJvcl9xdWV1ZV9zcGFjZTsKKwkJYm9vbAkgICAqc25hcHNob3Rfc2V0X2Zs YWdfc3BhY2U7CiAJCWludAkJCWk7CiAKIAkJZXJyb3JfcXVldWVfc3BhY2UgPQpAQCAtNTI1LDYg KzU0MCwxMSBAQAogCQkJc2htX21xX3NldF9yZWNlaXZlcihtcSwgTXlQcm9jKTsKIAkJCXBjeHQt PndvcmtlcltpXS5lcnJvcl9tcWggPSBzaG1fbXFfYXR0YWNoKG1xLCBwY3h0LT5zZWcsIE5VTEwp OwogCQl9CisKKwkJc25hcHNob3Rfc2V0X2ZsYWdfc3BhY2UgPQorCQkJCXNobV90b2NfbG9va3Vw KHBjeHQtPnRvYywgUEFSQUxMRUxfS0VZX1NOQVBTSE9UX1NFVF9GTEFHLCBmYWxzZSk7CisJCWZv ciAoaSA9IDA7IGkgPCBwY3h0LT5ud29ya2VyczsgKytpKQorCQkJc25hcHNob3Rfc2V0X2ZsYWdf c3BhY2VbaV0gPSBmYWxzZTsKIAl9CiB9CiAKQEAgLTY2OSw3ICs2ODksNyBAQAogICogY2FsbCB0 aGlzIGZ1bmN0aW9uIGF0IGFsbC4KICAqLwogdm9pZAotV2FpdEZvclBhcmFsbGVsV29ya2Vyc1Rv QXR0YWNoKFBhcmFsbGVsQ29udGV4dCAqcGN4dCkKK1dhaXRGb3JQYXJhbGxlbFdvcmtlcnNUb0F0 dGFjaChQYXJhbGxlbENvbnRleHQgKnBjeHQsIGJvb2wgd2FpdF9mb3Jfc25hcHNob3QpCiB7CiAJ aW50CQkJaTsKIApAQCAtNzEzLDkgKzczMywxMiBAQAogCQkJCW1xID0gc2htX21xX2dldF9xdWV1 ZShwY3h0LT53b3JrZXJbaV0uZXJyb3JfbXFoKTsKIAkJCQlpZiAoc2htX21xX2dldF9zZW5kZXIo bXEpICE9IE5VTEwpCiAJCQkJewotCQkJCQkvKiBZZXMsIHNvIGl0IGlzIGtub3duIHRvIGJlIGF0 dGFjaGVkLiAqLwotCQkJCQlwY3h0LT5rbm93bl9hdHRhY2hlZF93b3JrZXJzW2ldID0gdHJ1ZTsK LQkJCQkJKytwY3h0LT5ua25vd25fYXR0YWNoZWRfd29ya2VyczsKKwkJCQkJaWYgKCF3YWl0X2Zv cl9zbmFwc2hvdCB8fCAqKHBjeHQtPndvcmtlcltpXS5zbmFwc2hvdF9zZXRfZmxhZykpCisJCQkJ CXsKKwkJCQkJCS8qIFllcywgc28gaXQgaXMga25vd24gdG8gYmUgYXR0YWNoZWQuICovCisJCQkJ CQlwY3h0LT5rbm93bl9hdHRhY2hlZF93b3JrZXJzW2ldID0gdHJ1ZTsKKwkJCQkJCSsrcGN4dC0+ bmtub3duX2F0dGFjaGVkX3dvcmtlcnM7CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCQllbHNlIGlm IChzdGF0dXMgPT0gQkdXSF9TVE9QUEVEKQpAQCAtMTI3NCw2ICsxMjk3LDcgQEAKIAlzaG1fdG9j ICAgICp0b2M7CiAJRml4ZWRQYXJhbGxlbFN0YXRlICpmcHM7CiAJY2hhcgkgICAqZXJyb3JfcXVl dWVfc3BhY2U7CisJYm9vbAkgICAqc25hcHNob3RfZmxhZ19zZXRfc3BhY2U7CiAJc2htX21xCSAg ICptcTsKIAlzaG1fbXFfaGFuZGxlICptcWg7CiAJY2hhcgkgICAqbGlicmFyeXNwYWNlOwpAQCAt MTQ0OSw2ICsxNDczLDkgQEAKIAkJCQkJCQkgICBmcHMtPnBhcmFsbGVsX2xlYWRlcl9wZ3Byb2Mp OwogCVB1c2hBY3RpdmVTbmFwc2hvdChhc25hcHNob3QpOwogCisJc25hcHNob3RfZmxhZ19zZXRf c3BhY2UgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9TTkFQU0hPVF9TRVRfRkxB RywgZmFsc2UpOworCXNuYXBzaG90X2ZsYWdfc2V0X3NwYWNlW1BhcmFsbGVsV29ya2VyTnVtYmVy XSA9IHRydWU7CisKIAkvKgogCSAqIFdlJ3ZlIGNoYW5nZWQgd2hpY2ggdHVwbGVzIHdlIGNhbiBz ZWUsIGFuZCBtdXN0IHRoZXJlZm9yZSBpbnZhbGlkYXRlCiAJICogc3lzdGVtIGNhY2hlcy4KSW5k ZXg6IHNyYy9pbmNsdWRlL2FjY2Vzcy9wYXJhbGxlbC5oCklERUEgYWRkaXRpb25hbCBpbmZvOgpT dWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAK PCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3BhcmFs bGVsLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcGFyYWxsZWwuaAotLS0gYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcGFyYWxsZWwuaAkocmV2aXNpb24gMTAzYmJiNzAzZjk3NGM2NWJlNmUyMzhjYTJjMTgx ZjE0NzBjZWIyNSkKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3BhcmFsbGVsLmgJKHJldmlzaW9u IDk4MTdhOGZmMjU0YmFlMDI5MWEzMjBiZDMwNmQyZWMxMjgwZjc1OTIpCkBAIC0yNiw2ICsyNiw3 IEBACiB7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3aGFuZGxlOwogCXNobV9tcV9oYW5k bGUgKmVycm9yX21xaDsKKwlib29sCQkgICpzbmFwc2hvdF9zZXRfZmxhZzsKIH0gUGFyYWxsZWxX b3JrZXJJbmZvOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbENvbnRleHQKQEAgLTY1LDcgKzY2 LDcgQEAKIGV4dGVybiB2b2lkIFJlaW5pdGlhbGl6ZVBhcmFsbGVsRFNNKFBhcmFsbGVsQ29udGV4 dCAqcGN4dCk7CiBleHRlcm4gdm9pZCBSZWluaXRpYWxpemVQYXJhbGxlbFdvcmtlcnMoUGFyYWxs ZWxDb250ZXh0ICpwY3h0LCBpbnQgbndvcmtlcnNfdG9fbGF1bmNoKTsKIGV4dGVybiB2b2lkIExh dW5jaFBhcmFsbGVsV29ya2VycyhQYXJhbGxlbENvbnRleHQgKnBjeHQpOwotZXh0ZXJuIHZvaWQg V2FpdEZvclBhcmFsbGVsV29ya2Vyc1RvQXR0YWNoKFBhcmFsbGVsQ29udGV4dCAqcGN4dCk7Citl eHRlcm4gdm9pZCBXYWl0Rm9yUGFyYWxsZWxXb3JrZXJzVG9BdHRhY2goUGFyYWxsZWxDb250ZXh0 ICpwY3h0LCBib29sIHdhaXRfZm9yX3NuYXBzaG90KTsKIGV4dGVybiB2b2lkIFdhaXRGb3JQYXJh bGxlbFdvcmtlcnNUb0ZpbmlzaChQYXJhbGxlbENvbnRleHQgKnBjeHQpOwogZXh0ZXJuIHZvaWQg RGVzdHJveVBhcmFsbGVsQ29udGV4dChQYXJhbGxlbENvbnRleHQgKnBjeHQpOwogZXh0ZXJuIGJv b2wgUGFyYWxsZWxDb250ZXh0QWN0aXZlKHZvaWQpOwpJbmRleDogc3JjL2luY2x1ZGUvYWNjZXNz L3JlbHNjYW4uaApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWou b3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9zcmMvaW5jbHVkZS9hY2Nl c3MvcmVsc2Nhbi5oCi0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgJKHJldmlzaW9u IDEwM2JiYjcwM2Y5NzRjNjViZTZlMjM4Y2EyYzE4MWYxNDcwY2ViMjUpCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy9yZWxzY2FuLmgJKHJldmlzaW9uIGVhMWZjYWNjN2NlYWQzZTJmY2NmNTgxZDIw ZTUxMjQ0YTcxMDc0MzUpCkBAIC02NCw2ICs2NCw3IEBACiB7CiAJT2lkCQkJcGhzX3JlbGlkOwkJ LyogT0lEIG9mIHJlbGF0aW9uIHRvIHNjYW4gKi8KIAlib29sCQlwaHNfc3luY3NjYW47CS8qIHJl cG9ydCBsb2NhdGlvbiB0byBzeW5jc2NhbiBsb2dpYz8gKi8KKwlib29sCQlwaHNfc25hcHNob3Rf cmVzZXQ7CiAJYm9vbAkJcGhzX3NuYXBzaG90X2FueTsJLyogU25hcHNob3RBbnksIG5vdCBwaHNf c25hcHNob3RfZGF0YT8gKi8KIAlTaXplCQlwaHNfc25hcHNob3Rfb2ZmOwkvKiBkYXRhIGZvciBz bmFwc2hvdCAqLwogfSBQYXJhbGxlbFRhYmxlU2NhbkRlc2NEYXRhOwpJbmRleDogc3JjL2luY2x1 ZGUvdXRpbHMvc25hcG1nci5oCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5p bnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcG1nci5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvc25hcG1nci5oCi0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBtZ3IuaAkocmV2 aXNpb24gMTAzYmJiNzAzZjk3NGM2NWJlNmUyMzhjYTJjMTgxZjE0NzBjZWIyNSkKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvc25hcG1nci5oCShyZXZpc2lvbiA5ODE3YThmZjI1NGJhZTAyOTFhMzIw YmQzMDZkMmVjMTI4MGY3NTkyKQpAQCAtOTYsNiArOTYsNyBAQAogZXh0ZXJuIHZvaWQgV2FpdEZv ck9sZGVyU25hcHNob3RzKFRyYW5zYWN0aW9uSWQgbGltaXRYbWluLCBib29sIHByb2dyZXNzKTsK IGV4dGVybiBib29sIFRoZXJlQXJlTm9QcmlvclJlZ2lzdGVyZWRTbmFwc2hvdHModm9pZCk7CiBl eHRlcm4gYm9vbCBIYXZlUmVnaXN0ZXJlZE9yQWN0aXZlU25hcHNob3Qodm9pZCk7CitleHRlcm4g Ym9vbCBIYXZlUmVnaXN0ZXJlZFNuYXBzaG90KHZvaWQpOwogCiBleHRlcm4gY2hhciAqRXhwb3J0 U25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpOwogCkluZGV4OiBjb250cmliL3Bnc3RhdHR1cGxl L3Bnc3RhdHR1cGxlLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVs bGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CmRpZmYgLS1naXQgYS9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMgYi9jb250cmli L3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMKLS0tIGEvY29udHJpYi9wZ3N0YXR0dXBsZS9wZ3N0 YXR0dXBsZS5jCShyZXZpc2lvbiA5ODE3YThmZjI1NGJhZTAyOTFhMzIwYmQzMDZkMmVjMTI4MGY3 NTkyKQorKysgYi9jb250cmliL3Bnc3RhdHR1cGxlL3Bnc3RhdHR1cGxlLmMJKHJldmlzaW9uIGVh MWZjYWNjN2NlYWQzZTJmY2NmNTgxZDIwZTUxMjQ0YTcxMDc0MzUpCkBAIC0yODYsNiArMjg2LDkg QEAKIAkJCWNhc2UgQlJJTl9BTV9PSUQ6CiAJCQkJZXJyID0gImJyaW4gaW5kZXgiOwogCQkJCWJy ZWFrOworCQkJY2FzZSBTVElSX0FNX09JRDoKKwkJCQllcnIgPSAic3RpciBpbmRleCI7CisJCQkJ YnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWVyciA9ICJ1bmtub3duIGluZGV4IjsKIAkJCQlicmVh azsKQEAgLTMyOSw3ICszMzIsNyBAQAogCQkJCSBlcnJtc2coIm9ubHkgaGVhcCBBTSBpcyBzdXBw b3J0ZWQiKSkpOwogCiAJLyogRGlzYWJsZSBzeW5jc2NhbiBiZWNhdXNlIHdlIGFzc3VtZSB3ZSBz Y2FuIGZyb20gYmxvY2sgemVybyB1cHdhcmRzICovCi0Jc2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9z dHJhdChyZWwsIFNuYXBzaG90QW55LCAwLCBOVUxMLCB0cnVlLCBmYWxzZSk7CisJc2NhbiA9IHRh YmxlX2JlZ2luc2Nhbl9zdHJhdChyZWwsIFNuYXBzaG90QW55LCAwLCBOVUxMLCB0cnVlLCBmYWxz ZSwgZmFsc2UpOwogCWhzY2FuID0gKEhlYXBTY2FuRGVzYykgc2NhbjsKIAogCUluaXREaXJ0eVNu YXBzaG90KFNuYXBzaG90RGlydHkpOwpJbmRleDogc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxl CklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRp ZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01ha2VmaWxl Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9NYWtlZmlsZQkocmV2aXNpb24gOTgxN2E4ZmYyNTRi YWUwMjkxYTMyMGJkMzA2ZDJlYzEyODBmNzU5MikKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL01h a2VmaWxlCShyZXZpc2lvbiBkOGRmOWRhZWE3NjM3NDQ2OGMyOGY4ZTlkNjBkODM1MzlhYWQwNWM4 KQpAQCAtOSw2ICs5LDYgQEAKIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5n bG9iYWwKIAogU1VCRElSUwkgICAgPSBicmluIGNvbW1vbiBnaW4gZ2lzdCBoYXNoIGhlYXAgaW5k ZXggbmJ0cmVlIHJtZ3JkZXNjIHNwZ2lzdCBcCi0JCQkgIHNlcXVlbmNlIHRhYmxlIHRhYmxlc2Ft cGxlIHRyYW5zYW0KKwkJCSAgc2VxdWVuY2UgdGFibGUgdGFibGVzYW1wbGUgdHJhbnNhbSBzdGly CiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvYmFja2VuZC9jb21tb24ubWsKSW5kZXg6IHNy Yy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lz dGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVU Ri04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWls ZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvbWVzb24uYnVpbGQJKHJldmlzaW9uIDk4MTdhOGZmMjU0YmFlMDI5MWEzMjBiZDMwNmQyZWMx MjgwZjc1OTIpCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9tZXNvbi5idWlsZAkocmV2aXNpb24g ZDhkZjlkYWVhNzYzNzQ0NjhjMjhmOGU5ZDYwZDgzNTM5YWFkMDVjOCkKQEAgLTE0LDMgKzE0LDQg QEAKIHN1YmRpcigndGFibGUnKQogc3ViZGlyKCd0YWJsZXNhbXBsZScpCiBzdWJkaXIoJ3RyYW5z YW0nKQorc3ViZGlyKCdzdGlyJykKSW5kZXg6IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUu YwpJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5k aWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fu YWx5emUuYwotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXplLmMJKHJldmlzaW9uIDk4 MTdhOGZmMjU0YmFlMDI5MWEzMjBiZDMwNmQyZWMxMjgwZjc1OTIpCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2FuYWx5emUuYwkocmV2aXNpb24gNzVjZDk0ZGFmNGIwYjYxNDdlN2YzYTM4NmFk MWE5M2ZiMDg2NjUzYikKQEAgLTcxOSw2ICs3MTksNyBAQAogCQkJaXZpbmZvLm1lc3NhZ2VfbGV2 ZWwgPSBlbGV2ZWw7CiAJCQlpdmluZm8ubnVtX2hlYXBfdHVwbGVzID0gb25lcmVsLT5yZF9yZWwt PnJlbHR1cGxlczsKIAkJCWl2aW5mby5zdHJhdGVneSA9IHZhY19zdHJhdGVneTsKKwkJCWl2aW5m by52YWxpZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJCQlzdGF0cyA9IGluZGV4X3ZhY3V1bV9jbGVh bnVwKCZpdmluZm8sIE5VTEwpOwogCkluZGV4OiBzcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW1w YXJhbGxlbC5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5v cGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3ZhY3V1bXBhcmFsbGVsLmMKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtcGFyYWxsZWwuYwkocmV2aXNpb24gOTgxN2E4ZmYyNTRiYWUwMjkxYTMyMGJkMzA2ZDJl YzEyODBmNzU5MikKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtcGFyYWxsZWwuYwko cmV2aXNpb24gNzVjZDk0ZGFmNGIwYjYxNDdlN2YzYTM4NmFkMWE5M2ZiMDg2NjUzYikKQEAgLTg4 Myw2ICs4ODMsNyBAQAogCWl2aW5mby5lc3RpbWF0ZWRfY291bnQgPSBwdnMtPnNoYXJlZC0+ZXN0 aW1hdGVkX2NvdW50OwogCWl2aW5mby5udW1faGVhcF90dXBsZXMgPSBwdnMtPnNoYXJlZC0+cmVs dHVwbGVzOwogCWl2aW5mby5zdHJhdGVneSA9IHB2cy0+YnN0cmF0ZWd5OworCWl2aW5mby52YWxp ZGF0ZV9pbmRleCA9IGZhbHNlOwogCiAJLyogVXBkYXRlIGVycm9yIHRyYWNlYmFjayBpbmZvcm1h dGlvbiAqLwogCXB2cy0+aW5kbmFtZSA9IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo aW5kcmVsKSk7CkluZGV4OiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApJREVBIGFkZGl0aW9u YWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2gu Q2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKLS0tIGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmgJKHJldmlzaW9uIDk4MTdhOGZmMjU0YmFlMDI5MWEzMjBiZDMwNmQy ZWMxMjgwZjc1OTIpCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCShyZXZpc2lvbiA3 NWNkOTRkYWY0YjBiNjE0N2U3ZjNhMzg2YWQxYTkzZmIwODY2NTNiKQpAQCAtNDgsNiArNDgsNyBA QAogCWJvb2wJCWFuYWx5emVfb25seTsJLyogQU5BTFlaRSAod2l0aG91dCBhbnkgYWN0dWFsIHZh Y3V1bSkgKi8KIAlib29sCQlyZXBvcnRfcHJvZ3Jlc3M7CS8qIGVtaXQgcHJvZ3Jlc3MuaCBzdGF0 dXMgcmVwb3J0cyAqLwogCWJvb2wJCWVzdGltYXRlZF9jb3VudDsJLyogbnVtX2hlYXBfdHVwbGVz IGlzIGFuIGVzdGltYXRlICovCisJYm9vbAkJdmFsaWRhdGVfaW5kZXg7CQkvKiBub3QgYSB2YWN1 dW0gYnV0IGFuIGluZGV4IHZhbGlkYXRpb24gKi8KIAlpbnQJCQltZXNzYWdlX2xldmVsOwkvKiBl cmVwb3J0IGxldmVsIGZvciBwcm9ncmVzcyBtZXNzYWdlcyAqLwogCWRvdWJsZQkJbnVtX2hlYXBf dHVwbGVzOwkvKiB0dXBsZXMgcmVtYWluaW5nIGluIGhlYXAgKi8KIAlCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneTsJLyogYWNjZXNzIHN0cmF0ZWd5IGZvciByZWFkcyAqLwpJbmRleDogc3Jj L2luY2x1ZGUvYWNjZXNzL3JlbG9wdGlvbnMuaApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lz dGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVU Ri04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25z LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsb3B0aW9ucy5oCi0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9yZWxvcHRpb25zLmgJKHJldmlzaW9uIDk4MTdhOGZmMjU0YmFlMDI5MWEzMjBiZDMwNmQy ZWMxMjgwZjc1OTIpCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxvcHRpb25zLmgJKHJldmlz aW9uIGQ4ZGY5ZGFlYTc2Mzc0NDY4YzI4ZjhlOWQ2MGQ4MzUzOWFhZDA1YzgpCkBAIC01MSw4ICs1 MSw5IEBACiAJUkVMT1BUX0tJTkRfVklFVyA9ICgxIDw8IDkpLAogCVJFTE9QVF9LSU5EX0JSSU4g PSAoMSA8PCAxMCksCiAJUkVMT1BUX0tJTkRfUEFSVElUSU9ORUQgPSAoMSA8PCAxMSksCisJUkVM T1BUX0tJTkRfU1RJUiA9ICgxIDw8IDEyKSwKIAkvKiBpZiB5b3UgYWRkIGEgbmV3IGtpbmQsIG1h a2Ugc3VyZSB5b3UgdXBkYXRlICJsYXN0X2RlZmF1bHQiIHRvbyAqLwotCVJFTE9QVF9LSU5EX0xB U1RfREVGQVVMVCA9IFJFTE9QVF9LSU5EX1BBUlRJVElPTkVELAorCVJFTE9QVF9LSU5EX0xBU1Rf REVGQVVMVCA9IFJFTE9QVF9LSU5EX1NUSVIsCiAJLyogc29tZSBjb21waWxlcnMgdHJlYXQgZW51 bXMgYXMgc2lnbmVkIGludHMsIHNvIHdlIGNhbid0IHVzZSAxIDw8IDMxICovCiAJUkVMT1BUX0tJ TkRfTUFYID0gKDEgPDwgMzApCiB9IHJlbG9wdF9raW5kOwpJbmRleDogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19hbS5kYXQKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVs bGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtLmRhdCBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfYW0uZGF0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW0uZGF0CShy ZXZpc2lvbiA5ODE3YThmZjI1NGJhZTAyOTFhMzIwYmQzMDZkMmVjMTI4MGY3NTkyKQorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX2FtLmRhdAkocmV2aXNpb24gZDhkZjlkYWVhNzYzNzQ0Njhj MjhmOGU5ZDYwZDgzNTM5YWFkMDVjOCkKQEAgLTMzLDUgKzMzLDcgQEAKIHsgb2lkID0+ICczNTgw Jywgb2lkX3N5bWJvbCA9PiAnQlJJTl9BTV9PSUQnLAogICBkZXNjciA9PiAnYmxvY2sgcmFuZ2Ug aW5kZXggKEJSSU4pIGFjY2VzcyBtZXRob2QnLAogICBhbW5hbWUgPT4gJ2JyaW4nLCBhbWhhbmRs ZXIgPT4gJ2JyaW5oYW5kbGVyJywgYW10eXBlID0+ICdpJyB9LAotCit7IG9pZCA9PiAnNTU1NScs IG9pZF9zeW1ib2wgPT4gJ1NUSVJfQU1fT0lEJywKKyAgZGVzY3IgPT4gJ3Nob3J0IHRlcm0gaW5k ZXggcmVwbGFjZW1lbnQnLAorICBhbW5hbWUgPT4gJ3N0aXInLCBhbWhhbmRsZXIgPT4gJ3N0aXJo YW5kbGVyJywgYW10eXBlID0+ICdpJyB9LAogXQpJbmRleDogc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19hbW9wLmRhdApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWou b3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1vcC5kYXQgYi9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX2Ftb3AuZGF0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1vcC5kYXQJ KHJldmlzaW9uIDk4MTdhOGZmMjU0YmFlMDI5MWEzMjBiZDMwNmQyZWMxMjgwZjc1OTIpCisrKyBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfYW1vcC5kYXQJKHJldmlzaW9uIGQ4ZGY5ZGFlYTc2Mzc0 NDY4YzI4ZjhlOWQ2MGQ4MzUzOWFhZDA1YzgpCkBAIC0zMjI3LDQgKzMyMjcsOCBAQAogICBhbW9w cmlnaHR0eXBlID0+ICdwb2ludCcsIGFtb3BzdHJhdGVneSA9PiAnNycsIGFtb3BvcHIgPT4gJ0A+ KGJveCxwb2ludCknLAogICBhbW9wbWV0aG9kID0+ICdicmluJyB9LAogCit7IGFtb3BmYW1pbHkg PT4gJ3N0aXIvcmVjb3JkX29wcycsIGFtb3BsZWZ0dHlwZSA9PiAncmVjb3JkJywKKyAgYW1vcHJp Z2h0dHlwZSA9PiAncmVjb3JkJywgYW1vcHN0cmF0ZWd5ID0+ICcxJywgYW1vcG9wciA9PiAnPShy ZWNvcmQscmVjb3JkKScsCisgIGFtb3BtZXRob2QgPT4gJ3N0aXInIH0sCisKIF0KSW5kZXg6IHNy Yy9pbmNsdWRlL2NhdGFsb2cvcGdfb3BjbGFzcy5kYXQKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1 YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8 Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29w Y2xhc3MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGNsYXNzLmRhdAotLS0gYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX29wY2xhc3MuZGF0CShyZXZpc2lvbiA5ODE3YThmZjI1NGJhZTAy OTFhMzIwYmQzMDZkMmVjMTI4MGY3NTkyKQorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29w Y2xhc3MuZGF0CShyZXZpc2lvbiBkOGRmOWRhZWE3NjM3NDQ2OGMyOGY4ZTlkNjBkODM1MzlhYWQw NWM4KQpAQCAtNDg4LDQgKzQ4OCw4IEBACiAKICMgbm8gYnJpbiBvcGNsYXNzIGZvciB0aGUgZ2Vv bWV0cmljIHR5cGVzIGV4Y2VwdCBib3gKIAoreyBvaWQgPT4gJzU1NTcnLCBvaWRfc3ltYm9sID0+ ICdSRUNPUkRfU1RJUl9PUFNfT0lEJywKKyAgb3BjbWV0aG9kID0+ICdzdGlyJywgb3BjbmFtZSA9 PiAncmVjb3JkX29wcycsIG9wY2ZhbWlseSA9PiAnc3Rpci9yZWNvcmRfb3BzJywKKyAgb3BjaW50 eXBlID0+ICdyZWNvcmQnIH0sCisKIF0KSW5kZXg6IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfb3Bm YW1pbHkuZGF0CklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5v cGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX29wZmFtaWx5LmRhdAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX29w ZmFtaWx5LmRhdAkocmV2aXNpb24gOTgxN2E4ZmYyNTRiYWUwMjkxYTMyMGJkMzA2ZDJlYzEyODBm NzU5MikKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19vcGZhbWlseS5kYXQJKHJldmlzaW9u IGQ4ZGY5ZGFlYTc2Mzc0NDY4YzI4ZjhlOWQ2MGQ4MzUzOWFhZDA1YzgpCkBAIC0zMDIsNiArMzAy LDggQEAKICAgb3BmbWV0aG9kID0+ICdidHJlZScsIG9wZm5hbWUgPT4gJ211bHRpcmFuZ2Vfb3Bz JyB9LAogeyBvaWQgPT4gJzQyMjUnLAogICBvcGZtZXRob2QgPT4gJ2hhc2gnLCBvcGZuYW1lID0+ ICdtdWx0aXJhbmdlX29wcycgfSwKK3sgb2lkID0+ICc1NTU4JywKKyAgb3BmbWV0aG9kID0+ICdz dGlyJywgb3BmbmFtZSA9PiAncmVjb3JkX29wcycgfSwKIHsgb2lkID0+ICc2MTU4JywKICAgb3Bm bWV0aG9kID0+ICdnaXN0Jywgb3BmbmFtZSA9PiAnbXVsdGlyYW5nZV9vcHMnIH0sCiAKSW5kZXg6 IHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1 YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8 Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CShyZXZpc2lvbiA5ODE3YThmZjI1NGJhZTAyOTFhMzIwYmQz MDZkMmVjMTI4MGY3NTkyKQorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CShy ZXZpc2lvbiA2YzU1ZDk3NDllMjk5OTU0MmQ0ZTYyODFkYjczM2ZkZDQ3OTMwNzk2KQpAQCAtOTM1 LDYgKzkzNSwxMCBAQAogICBwcm9uYW1lID0+ICdicmluaGFuZGxlcicsIHByb3ZvbGF0aWxlID0+ ICd2JywKICAgcHJvcmV0dHlwZSA9PiAnaW5kZXhfYW1faGFuZGxlcicsIHByb2FyZ3R5cGVzID0+ ICdpbnRlcm5hbCcsCiAgIHByb3NyYyA9PiAnYnJpbmhhbmRsZXInIH0sCit7IG9pZCA9PiAnNTU1 NicsIGRlc2NyID0+ICdqdXN0IGFjY2VzcyBtZXRob2QgaGFuZGxlcicsCisgIHByb25hbWUgPT4g J3N0aXJoYW5kbGVyJywgcHJvdm9sYXRpbGUgPT4gJ3YnLAorICBwcm9yZXR0eXBlID0+ICdpbmRl eF9hbV9oYW5kbGVyJywgcHJvYXJndHlwZXMgPT4gJ2ludGVybmFsJywKKyAgcHJvc3JjID0+ICdz dGlyaGFuZGxlcicgfSwKIHsgb2lkID0+ICczOTUyJywgZGVzY3IgPT4gJ2JyaW46IHN0YW5kYWxv bmUgc2NhbiBuZXcgdGFibGUgcGFnZXMnLAogICBwcm9uYW1lID0+ICdicmluX3N1bW1hcml6ZV9u ZXdfdmFsdWVzJywgcHJvdm9sYXRpbGUgPT4gJ3YnLAogICBwcm9wYXJhbGxlbCA9PiAndScsIHBy b3JldHR5cGUgPT4gJ2ludDQnLCBwcm9hcmd0eXBlcyA9PiAncmVnY2xhc3MnLApAQCAtNTQ4Nyw5 ICs1NDkxLDkgQEAKICAgcHJvbmFtZSA9PiAncGdfc3RhdF9nZXRfYWN0aXZpdHknLCBwcm9yb3dz ID0+ICcxMDAnLCBwcm9pc3N0cmljdCA9PiAnZicsCiAgIHByb3JldHNldCA9PiAndCcsIHByb3Zv bGF0aWxlID0+ICdzJywgcHJvcGFyYWxsZWwgPT4gJ3InLAogICBwcm9yZXR0eXBlID0+ICdyZWNv cmQnLCBwcm9hcmd0eXBlcyA9PiAnaW50NCcsCi0gIHByb2FsbGFyZ3R5cGVzID0+ICd7aW50NCxv aWQsaW50NCxvaWQsdGV4dCx0ZXh0LHRleHQsdGV4dCx0ZXh0LHRpbWVzdGFtcHR6LHRpbWVzdGFt cHR6LHRpbWVzdGFtcHR6LHRpbWVzdGFtcHR6LGluZXQsdGV4dCxpbnQ0LHhpZCx4aWQsdGV4dCxi b29sLHRleHQsdGV4dCxpbnQ0LHRleHQsbnVtZXJpYyx0ZXh0LGJvb2wsdGV4dCxib29sLGJvb2ws aW50NCxpbnQ4fScsCi0gIHByb2FyZ21vZGVzID0+ICd7aSxvLG8sbyxvLG8sbyxvLG8sbyxvLG8s byxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvfScsCi0gIHByb2FyZ25hbWVz ID0+ICd7cGlkLGRhdGlkLHBpZCx1c2VzeXNpZCxhcHBsaWNhdGlvbl9uYW1lLHN0YXRlLHF1ZXJ5 LHdhaXRfZXZlbnRfdHlwZSx3YWl0X2V2ZW50LHhhY3Rfc3RhcnQscXVlcnlfc3RhcnQsYmFja2Vu ZF9zdGFydCxzdGF0ZV9jaGFuZ2UsY2xpZW50X2FkZHIsY2xpZW50X2hvc3RuYW1lLGNsaWVudF9w b3J0LGJhY2tlbmRfeGlkLGJhY2tlbmRfeG1pbixiYWNrZW5kX3R5cGUsc3NsLHNzbHZlcnNpb24s c3NsY2lwaGVyLHNzbGJpdHMsc3NsX2NsaWVudF9kbixzc2xfY2xpZW50X3NlcmlhbCxzc2xfaXNz dWVyX2RuLGdzc19hdXRoLGdzc19wcmluYyxnc3NfZW5jLGdzc19kZWxlZ2F0aW9uLGxlYWRlcl9w aWQscXVlcnlfaWR9JywKKyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tpbnQ0LG9pZCxpbnQ0LG9pZCx0 ZXh0LHRleHQsdGV4dCx0ZXh0LHRleHQsdGltZXN0YW1wdHosdGltZXN0YW1wdHosdGltZXN0YW1w dHosdGltZXN0YW1wdHosaW5ldCx0ZXh0LGludDQseGlkLHhpZCx0ZXh0LGJvb2wsdGV4dCx0ZXh0 LGludDQsdGV4dCxudW1lcmljLHRleHQsYm9vbCx0ZXh0LGJvb2wsYm9vbCxpbnQ0LGludDgseGlk fScsCisgIHByb2FyZ21vZGVzID0+ICd7aSxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxv LG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG8sbyxvLG99JywKKyAgcHJvYXJnbmFtZXMgPT4gJ3tw aWQsZGF0aWQscGlkLHVzZXN5c2lkLGFwcGxpY2F0aW9uX25hbWUsc3RhdGUscXVlcnksd2FpdF9l dmVudF90eXBlLHdhaXRfZXZlbnQseGFjdF9zdGFydCxxdWVyeV9zdGFydCxiYWNrZW5kX3N0YXJ0 LHN0YXRlX2NoYW5nZSxjbGllbnRfYWRkcixjbGllbnRfaG9zdG5hbWUsY2xpZW50X3BvcnQsYmFj a2VuZF94aWQsYmFja2VuZF94bWluLGJhY2tlbmRfdHlwZSxzc2wsc3NsdmVyc2lvbixzc2xjaXBo ZXIsc3NsYml0cyxzc2xfY2xpZW50X2RuLHNzbF9jbGllbnRfc2VyaWFsLHNzbF9pc3N1ZXJfZG4s Z3NzX2F1dGgsZ3NzX3ByaW5jLGdzc19lbmMsZ3NzX2RlbGVnYXRpb24sbGVhZGVyX3BpZCxxdWVy eV9pZCxiYWNrZW5kX2NhdGFsb2dfeG1pbn0nLAogICBwcm9zcmMgPT4gJ3BnX3N0YXRfZ2V0X2Fj dGl2aXR5JyB9LAogeyBvaWQgPT4gJzYzMTgnLCBkZXNjciA9PiAnZGVzY3JpYmUgd2FpdCBldmVu dHMnLAogICBwcm9uYW1lID0+ICdwZ19nZXRfd2FpdF9ldmVudHMnLCBwcm9jb3N0ID0+ICcxMCcs IHByb3Jvd3MgPT4gJzI1MCcsCkluZGV4OiBzcmMvaW5jbHVkZS91dGlscy9pbmRleF9zZWxmdW5j cy5oCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBp LmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhfc2VsZnVuY3MuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L2luZGV4X3NlbGZ1bmNzLmgKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhfc2VsZnVuY3Mu aAkocmV2aXNpb24gOTgxN2E4ZmYyNTRiYWUwMjkxYTMyMGJkMzA2ZDJlYzEyODBmNzU5MikKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMvaW5kZXhfc2VsZnVuY3MuaAkocmV2aXNpb24gZDhkZjlkYWVh NzYzNzQ0NjhjMjhmOGU5ZDYwZDgzNTM5YWFkMDVjOCkKQEAgLTcwLDUgKzcwLDEzIEBACiAJCQkJ CQkJU2VsZWN0aXZpdHkgKmluZGV4U2VsZWN0aXZpdHksCiAJCQkJCQkJZG91YmxlICppbmRleENv cnJlbGF0aW9uLAogCQkJCQkJCWRvdWJsZSAqaW5kZXhQYWdlcyk7CitleHRlcm4gdm9pZCBzdGly Y29zdGVzdGltYXRlKHN0cnVjdCBQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQlzdHJ1Y3QgSW5k ZXhQYXRoICpwYXRoLAorCQkJCQkJCWRvdWJsZSBsb29wX2NvdW50LAorCQkJCQkJCUNvc3QgKmlu ZGV4U3RhcnR1cENvc3QsCisJCQkJCQkJQ29zdCAqaW5kZXhUb3RhbENvc3QsCisJCQkJCQkJU2Vs ZWN0aXZpdHkgKmluZGV4U2VsZWN0aXZpdHksCisJCQkJCQkJZG91YmxlICppbmRleENvcnJlbGF0 aW9uLAorCQkJCQkJCWRvdWJsZSAqaW5kZXhQYWdlcyk7CiAKICNlbmRpZgkJCQkJCQkvKiBJTkRF WF9TRUxGVU5DU19IICovCkluZGV4OiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FtdXRpbHMu b3V0CklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBp LmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91dCBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvYW11dGlscy5vdXQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9h bXV0aWxzLm91dAkocmV2aXNpb24gOTgxN2E4ZmYyNTRiYWUwMjkxYTMyMGJkMzA2ZDJlYzEyODBm NzU5MikKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9hbXV0aWxzLm91dAkocmV2aXNp b24gZDhkZjlkYWVhNzYzNzQ0NjhjMjhmOGU5ZDYwZDgzNTM5YWFkMDVjOCkKQEAgLTE3Myw3ICsx NzMsMTMgQEAKICBzcGdpc3QgfCBjYW5fZXhjbHVkZSAgIHwgdAogIHNwZ2lzdCB8IGNhbl9pbmNs dWRlICAgfCB0CiAgc3BnaXN0IHwgYm9ndXMgICAgICAgICB8IAotKDM2IHJvd3MpCisgc3RpciAg IHwgY2FuX29yZGVyICAgICB8IGYKKyBzdGlyICAgfCBjYW5fdW5pcXVlICAgIHwgZgorIHN0aXIg ICB8IGNhbl9tdWx0aV9jb2wgfCB0Cisgc3RpciAgIHwgY2FuX2V4Y2x1ZGUgICB8IGYKKyBzdGly ICAgfCBjYW5faW5jbHVkZSAgIHwgdAorIHN0aXIgICB8IGJvZ3VzICAgICAgICAgfCAKKyg0MiBy b3dzKQogCiAtLQogLS0gYWRkaXRpb25hbCBjaGVja3MgZm9yIHBnX2luZGV4X2NvbHVtbl9oYXNf cHJvcGVydHkKSW5kZXg6IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQK SURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlm Zi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L29wcl9zYW5pdHkub3V0CShyZXZpc2lvbiA5ODE3YThmZjI1NGJhZTAyOTFhMzIwYmQzMDZkMmVj MTI4MGY3NTkyKQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29wcl9zYW5pdHkub3V0 CShyZXZpc2lvbiA3NWNkOTRkYWY0YjBiNjE0N2U3ZjNhMzg2YWQxYTkzZmIwODY2NTNiKQpAQCAt MjA5Miw3ICsyMDkyLDggQEAKICAgICAgICA0MDAwIHwgICAgICAgICAgIDI4IHwgXkAKICAgICAg ICA0MDAwIHwgICAgICAgICAgIDI5IHwgPF4KICAgICAgICA0MDAwIHwgICAgICAgICAgIDMwIHwg Pl4KLSgxMjQgcm93cykKKyAgICAgICA1NTU1IHwgICAgICAgICAgICAxIHwgPQorKDEyNSByb3dz KQogCiAtLSBDaGVjayB0aGF0IGFsbCBvcGNsYXNzIHNlYXJjaCBvcGVyYXRvcnMgaGF2ZSBzZWxl Y3Rpdml0eSBlc3RpbWF0b3JzLgogLS0gVGhpcyBpcyBub3QgYWJzb2x1dGVseSByZXF1aXJlZCwg YnV0IGl0IHNlZW1zIGEgcmVhc29uYWJsZSB0aGluZwpJbmRleDogc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wc3FsLm91dApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50 ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHNxbC5vdXQJKHJldmlzaW9uIDk4MTdhOGZmMjU0YmFlMDI5MWEzMjBiZDMwNmQyZWMx MjgwZjc1OTIpCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQJKHJldmlz aW9uIGQ4ZGY5ZGFlYTc2Mzc0NDY4YzI4ZjhlOWQ2MGQ4MzUzOWFhZDA1YzgpCkBAIC01MDI3LDcg KzUwMjcsOCBAQAogIGhlYXAgICB8IFRhYmxlCiAgaGVhcDIgIHwgVGFibGUKICBzcGdpc3QgfCBJ bmRleAotKDggcm93cykKKyBzdGlyICAgfCBJbmRleAorKDkgcm93cykKIAogXGRBICoKIExpc3Qg b2YgYWNjZXNzIG1ldGhvZHMKQEAgLTUwNDEsNyArNTA0Miw4IEBACiAgaGVhcCAgIHwgVGFibGUK ICBoZWFwMiAgfCBUYWJsZQogIHNwZ2lzdCB8IEluZGV4Ci0oOCByb3dzKQorIHN0aXIgICB8IElu ZGV4CisoOSByb3dzKQogCiBcZEEgaCoKIExpc3Qgb2YgYWNjZXNzIG1ldGhvZHMKQEAgLTUwNzcs NyArNTA3OSw4IEBACiAgaGVhcCAgIHwgVGFibGUgfCBoZWFwX3RhYmxlYW1faGFuZGxlciB8IGhl YXAgdGFibGUgYWNjZXNzIG1ldGhvZAogIGhlYXAyICB8IFRhYmxlIHwgaGVhcF90YWJsZWFtX2hh bmRsZXIgfCAKICBzcGdpc3QgfCBJbmRleCB8IHNwZ2hhbmRsZXIgICAgICAgICAgIHwgU1AtR2lT VCBpbmRleCBhY2Nlc3MgbWV0aG9kCi0oOCByb3dzKQorIHN0aXIgICB8IEluZGV4IHwgc3Rpcmhh bmRsZXIgICAgICAgICAgfCBzaG9ydCB0ZXJtIGluZGV4IHJlcGxhY2VtZW50CisoOSByb3dzKQog CiBcZEErICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBhY2Nlc3MgbWV0 aG9kcwpAQCAtNTA5MSw3ICs1MDk0LDggQEAKICBoZWFwICAgfCBUYWJsZSB8IGhlYXBfdGFibGVh bV9oYW5kbGVyIHwgaGVhcCB0YWJsZSBhY2Nlc3MgbWV0aG9kCiAgaGVhcDIgIHwgVGFibGUgfCBo ZWFwX3RhYmxlYW1faGFuZGxlciB8IAogIHNwZ2lzdCB8IEluZGV4IHwgc3BnaGFuZGxlciAgICAg ICAgICAgfCBTUC1HaVNUIGluZGV4IGFjY2VzcyBtZXRob2QKLSg4IHJvd3MpCisgc3RpciAgIHwg SW5kZXggfCBzdGlyaGFuZGxlciAgICAgICAgICB8IHNob3J0IHRlcm0gaW5kZXggcmVwbGFjZW1l bnQKKyg5IHJvd3MpCiAKIFxkQSsgaCoKICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgYWNj ZXNzIG1ldGhvZHMKSW5kZXg6IHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApJ REVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZm LmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv c3lzdGVtX3ZpZXdzLnNxbAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5z cWwJKHJldmlzaW9uIGIyNDEzMmY5OGY5M2QxNGM2NGRmZTQxOTczMzM3ZTEzZDVlNzYzNmIpCisr KyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbAkocmV2aXNpb24gNmM1NWQ5 NzQ5ZTI5OTk1NDJkNGU2MjgxZGI3MzNmZGQ0NzkzMDc5NikKQEAgLTg3OSw2ICs4NzksNyBAQAog ICAgICAgICAgICAgUy5zdGF0ZSwKICAgICAgICAgICAgIFMuYmFja2VuZF94aWQsCiAgICAgICAg ICAgICBzLmJhY2tlbmRfeG1pbiwKKyAgICAgICAgICAgIHMuYmFja2VuZF9jYXRhbG9nX3htaW4s CiAgICAgICAgICAgICBTLnF1ZXJ5X2lkLAogICAgICAgICAgICAgUy5xdWVyeSwKICAgICAgICAg ICAgIFMuYmFja2VuZF90eXBlCkluZGV4OiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9iYWNr ZW5kX3N0YXR1cy5jCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxp ai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L2JhY2tlbmRfc3RhdHVzLmMKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYwkocmV2aXNpb24gYjI0MTMyZjk4 ZjkzZDE0YzY0ZGZlNDE5NzMzMzdlMTNkNWU3NjM2YikKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvYmFja2VuZF9zdGF0dXMuYwkocmV2aXNpb24gNmM1NWQ5NzQ5ZTI5OTk1NDJkNGU2 MjgxZGI3MzNmZGQ0NzkzMDc5NikKQEAgLTgzOCw2ICs4MzgsNyBAQAogCQkJUHJvY051bWJlckdl dFRyYW5zYWN0aW9uSWRzKHByb2NOdW1iZXIsCiAJCQkJCQkJCQkJJmxvY2FsZW50cnktPmJhY2tl bmRfeGlkLAogCQkJCQkJCQkJCSZsb2NhbGVudHJ5LT5iYWNrZW5kX3htaW4sCisJCQkJCQkJCQkJ JmxvY2FsZW50cnktPmJhY2tlbmRfY2F0YWxvZ194bWluLAogCQkJCQkJCQkJCSZsb2NhbGVudHJ5 LT5iYWNrZW5kX3N1YnhhY3RfY291bnQsCiAJCQkJCQkJCQkJJmxvY2FsZW50cnktPmJhY2tlbmRf c3VieGFjdF9vdmVyZmxvd2VkKTsKIApJbmRleDogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bnc3Rh dGZ1bmNzLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9w ZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ3N0YXRmdW5jcy5jCi0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ3N0 YXRmdW5jcy5jCShyZXZpc2lvbiBiMjQxMzJmOThmOTNkMTRjNjRkZmU0MTk3MzMzN2UxM2Q1ZTc2 MzZiKQorKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdzdGF0ZnVuY3MuYwkocmV2aXNpb24g NmM1NWQ5NzQ5ZTI5OTk1NDJkNGU2MjgxZGI3MzNmZGQ0NzkzMDc5NikKQEAgLTMwMiw3ICszMDIs NyBAQAogRGF0dW0KIHBnX3N0YXRfZ2V0X2FjdGl2aXR5KFBHX0ZVTkNUSU9OX0FSR1MpCiB7Ci0j ZGVmaW5lIFBHX1NUQVRfR0VUX0FDVElWSVRZX0NPTFMJMzEKKyNkZWZpbmUgUEdfU1RBVF9HRVRf QUNUSVZJVFlfQ09MUwkzMgogCWludAkJCW51bV9iYWNrZW5kcyA9IHBnc3RhdF9mZXRjaF9zdGF0 X251bWJhY2tlbmRzKCk7CiAJaW50CQkJY3Vycl9iYWNrZW5kOwogCWludAkJCXBpZCA9IFBHX0FS R0lTTlVMTCgwKSA/IC0xIDogUEdfR0VUQVJHX0lOVDMyKDApOwpAQCAtMzUzLDYgKzM1MywxMSBA QAogCQllbHNlCiAJCQludWxsc1sxNV0gPSB0cnVlOwogCisJCWlmIChUcmFuc2FjdGlvbklkSXNW YWxpZChsb2NhbF9iZWVudHJ5LT5iYWNrZW5kX2NhdGFsb2dfeG1pbikpCisJCQl2YWx1ZXNbMzFd ID0gVHJhbnNhY3Rpb25JZEdldERhdHVtKGxvY2FsX2JlZW50cnktPmJhY2tlbmRfY2F0YWxvZ194 bWluKTsKKwkJZWxzZQorCQkJbnVsbHNbMzFdID0gdHJ1ZTsKKwogCQlpZiAoVHJhbnNhY3Rpb25J ZElzVmFsaWQobG9jYWxfYmVlbnRyeS0+YmFja2VuZF94bWluKSkKIAkJCXZhbHVlc1sxNl0gPSBU cmFuc2FjdGlvbklkR2V0RGF0dW0obG9jYWxfYmVlbnRyeS0+YmFja2VuZF94bWluKTsKIAkJZWxz ZQpJbmRleDogc3JjL2luY2x1ZGUvdXRpbHMvYmFja2VuZF9zdGF0dXMuaApJREVBIGFkZGl0aW9u YWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2gu Q2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL2JhY2tlbmRfc3RhdHVzLmggYi9zcmMvaW5jbHVkZS91dGlscy9iYWNrZW5kX3N0YXR1cy5o Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2JhY2tlbmRfc3RhdHVzLmgJKHJldmlzaW9uIGIyNDEz MmY5OGY5M2QxNGM2NGRmZTQxOTczMzM3ZTEzZDVlNzYzNmIpCisrKyBiL3NyYy9pbmNsdWRlL3V0 aWxzL2JhY2tlbmRfc3RhdHVzLmgJKHJldmlzaW9uIDZjNTVkOTc0OWUyOTk5NTQyZDRlNjI4MWRi NzMzZmRkNDc5MzA3OTYpCkBAIC0yNjYsNiArMjY2LDggQEAKIAkgKi8KIAlUcmFuc2FjdGlvbklk IGJhY2tlbmRfeG1pbjsKIAorCVRyYW5zYWN0aW9uSWQgYmFja2VuZF9jYXRhbG9nX3htaW47CisK IAkvKgogCSAqIE51bWJlciBvZiBjYWNoZWQgc3VidHJhbnNhY3Rpb25zIGluIHRoZSBjdXJyZW50 IHNlc3Npb24uCiAJICovCkluZGV4OiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91 dApJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5k aWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9ydWxlcy5vdXQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5v dXQJKHJldmlzaW9uIGIyNDEzMmY5OGY5M2QxNGM2NGRmZTQxOTczMzM3ZTEzZDVlNzYzNmIpCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0CShyZXZpc2lvbiA2YzU1ZDk3 NDllMjk5OTU0MmQ0ZTYyODFkYjczM2ZkZDQ3OTMwNzk2KQpAQCAtMTc1OSwxMCArMTc1OSwxMSBA QAogICAgIHMuc3RhdGUsCiAgICAgcy5iYWNrZW5kX3hpZCwKICAgICBzLmJhY2tlbmRfeG1pbiwK KyAgICBzLmJhY2tlbmRfY2F0YWxvZ194bWluLAogICAgIHMucXVlcnlfaWQsCiAgICAgcy5xdWVy eSwKICAgICBzLmJhY2tlbmRfdHlwZQotICAgRlJPTSAoKHBnX3N0YXRfZ2V0X2FjdGl2aXR5KE5V TEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25hbWUsIHN0 YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0LCBxdWVy eV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwgY2xpZW50 X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwgYmFja2Vu ZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2NsaWVudF9k biwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3NfcHJpbmMs IGdzc19lbmMsIGdzc19kZWxlZ2F0aW9uLCBsZWFkZXJfcGlkLCBxdWVyeV9pZCkKKyAgIEZST00g KChwZ19zdGF0X2dldF9hY3Rpdml0eShOVUxMOjppbnRlZ2VyKSBzKGRhdGlkLCBwaWQsIHVzZXN5 c2lkLCBhcHBsaWNhdGlvbl9uYW1lLCBzdGF0ZSwgcXVlcnksIHdhaXRfZXZlbnRfdHlwZSwgd2Fp dF9ldmVudCwgeGFjdF9zdGFydCwgcXVlcnlfc3RhcnQsIGJhY2tlbmRfc3RhcnQsIHN0YXRlX2No YW5nZSwgY2xpZW50X2FkZHIsIGNsaWVudF9ob3N0bmFtZSwgY2xpZW50X3BvcnQsIGJhY2tlbmRf eGlkLCBiYWNrZW5kX3htaW4sIGJhY2tlbmRfdHlwZSwgc3NsLCBzc2x2ZXJzaW9uLCBzc2xjaXBo ZXIsIHNzbGJpdHMsIHNzbF9jbGllbnRfZG4sIHNzbF9jbGllbnRfc2VyaWFsLCBzc2xfaXNzdWVy X2RuLCBnc3NfYXV0aCwgZ3NzX3ByaW5jLCBnc3NfZW5jLCBnc3NfZGVsZWdhdGlvbiwgbGVhZGVy X3BpZCwgcXVlcnlfaWQsIGJhY2tlbmRfY2F0YWxvZ194bWluKQogICAgICBMRUZUIEpPSU4gcGdf ZGF0YWJhc2UgZCBPTiAoKHMuZGF0aWQgPSBkLm9pZCkpKQogICAgICBMRUZUIEpPSU4gcGdfYXV0 aGlkIHUgT04gKChzLnVzZXN5c2lkID0gdS5vaWQpKSk7CiBwZ19zdGF0X2FsbF9pbmRleGVzfCBT RUxFQ1QgYy5vaWQgQVMgcmVsaWQsCkBAIC0xODgyLDcgKzE4ODMsNyBAQAogICAgIGdzc19wcmlu YyBBUyBwcmluY2lwYWwsCiAgICAgZ3NzX2VuYyBBUyBlbmNyeXB0ZWQsCiAgICAgZ3NzX2RlbGVn YXRpb24gQVMgY3JlZGVudGlhbHNfZGVsZWdhdGVkCi0gICBGUk9NIHBnX3N0YXRfZ2V0X2FjdGl2 aXR5KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25h bWUsIHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0 LCBxdWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwg Y2xpZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwg YmFja2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2Ns aWVudF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3Nf cHJpbmMsIGdzc19lbmMsIGdzc19kZWxlZ2F0aW9uLCBsZWFkZXJfcGlkLCBxdWVyeV9pZCkKKyAg IEZST00gcGdfc3RhdF9nZXRfYWN0aXZpdHkoTlVMTDo6aW50ZWdlcikgcyhkYXRpZCwgcGlkLCB1 c2VzeXNpZCwgYXBwbGljYXRpb25fbmFtZSwgc3RhdGUsIHF1ZXJ5LCB3YWl0X2V2ZW50X3R5cGUs IHdhaXRfZXZlbnQsIHhhY3Rfc3RhcnQsIHF1ZXJ5X3N0YXJ0LCBiYWNrZW5kX3N0YXJ0LCBzdGF0 ZV9jaGFuZ2UsIGNsaWVudF9hZGRyLCBjbGllbnRfaG9zdG5hbWUsIGNsaWVudF9wb3J0LCBiYWNr ZW5kX3hpZCwgYmFja2VuZF94bWluLCBiYWNrZW5kX3R5cGUsIHNzbCwgc3NsdmVyc2lvbiwgc3Ns Y2lwaGVyLCBzc2xiaXRzLCBzc2xfY2xpZW50X2RuLCBzc2xfY2xpZW50X3NlcmlhbCwgc3NsX2lz c3Vlcl9kbiwgZ3NzX2F1dGgsIGdzc19wcmluYywgZ3NzX2VuYywgZ3NzX2RlbGVnYXRpb24sIGxl YWRlcl9waWQsIHF1ZXJ5X2lkLCBiYWNrZW5kX2NhdGFsb2dfeG1pbikKICAgV0hFUkUgKGNsaWVu dF9wb3J0IElTIE5PVCBOVUxMKTsKIHBnX3N0YXRfaW98IFNFTEVDVCBiYWNrZW5kX3R5cGUsCiAg ICAgb2JqZWN0LApAQCAtMjA4Niw3ICsyMDg3LDcgQEAKICAgICB3LnN5bmNfcHJpb3JpdHksCiAg ICAgdy5zeW5jX3N0YXRlLAogICAgIHcucmVwbHlfdGltZQotICAgRlJPTSAoKHBnX3N0YXRfZ2V0 X2FjdGl2aXR5KE5VTEw6OmludGVnZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0 aW9uX25hbWUsIHN0YXRlLCBxdWVyeSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0 X3N0YXJ0LCBxdWVyeV9zdGFydCwgYmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRf YWRkciwgY2xpZW50X2hvc3RuYW1lLCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRf eG1pbiwgYmFja2VuZF90eXBlLCBzc2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywg c3NsX2NsaWVudF9kbiwgc3NsX2NsaWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRo LCBnc3NfcHJpbmMsIGdzc19lbmMsIGdzc19kZWxlZ2F0aW9uLCBsZWFkZXJfcGlkLCBxdWVyeV9p ZCkKKyAgIEZST00gKChwZ19zdGF0X2dldF9hY3Rpdml0eShOVUxMOjppbnRlZ2VyKSBzKGRhdGlk LCBwaWQsIHVzZXN5c2lkLCBhcHBsaWNhdGlvbl9uYW1lLCBzdGF0ZSwgcXVlcnksIHdhaXRfZXZl bnRfdHlwZSwgd2FpdF9ldmVudCwgeGFjdF9zdGFydCwgcXVlcnlfc3RhcnQsIGJhY2tlbmRfc3Rh cnQsIHN0YXRlX2NoYW5nZSwgY2xpZW50X2FkZHIsIGNsaWVudF9ob3N0bmFtZSwgY2xpZW50X3Bv cnQsIGJhY2tlbmRfeGlkLCBiYWNrZW5kX3htaW4sIGJhY2tlbmRfdHlwZSwgc3NsLCBzc2x2ZXJz aW9uLCBzc2xjaXBoZXIsIHNzbGJpdHMsIHNzbF9jbGllbnRfZG4sIHNzbF9jbGllbnRfc2VyaWFs LCBzc2xfaXNzdWVyX2RuLCBnc3NfYXV0aCwgZ3NzX3ByaW5jLCBnc3NfZW5jLCBnc3NfZGVsZWdh dGlvbiwgbGVhZGVyX3BpZCwgcXVlcnlfaWQsIGJhY2tlbmRfY2F0YWxvZ194bWluKQogICAgICBK T0lOIHBnX3N0YXRfZ2V0X3dhbF9zZW5kZXJzKCkgdyhwaWQsIHN0YXRlLCBzZW50X2xzbiwgd3Jp dGVfbHNuLCBmbHVzaF9sc24sIHJlcGxheV9sc24sIHdyaXRlX2xhZywgZmx1c2hfbGFnLCByZXBs YXlfbGFnLCBzeW5jX3ByaW9yaXR5LCBzeW5jX3N0YXRlLCByZXBseV90aW1lKSBPTiAoKHMucGlk ID0gdy5waWQpKSkKICAgICAgTEVGVCBKT0lOIHBnX2F1dGhpZCB1IE9OICgocy51c2VzeXNpZCA9 IHUub2lkKSkpOwogcGdfc3RhdF9yZXBsaWNhdGlvbl9zbG90c3wgU0VMRUNUIHMuc2xvdF9uYW1l LApAQCAtMjEyMCw3ICsyMTIxLDcgQEAKICAgICBzc2xfY2xpZW50X2RuIEFTIGNsaWVudF9kbiwK ICAgICBzc2xfY2xpZW50X3NlcmlhbCBBUyBjbGllbnRfc2VyaWFsLAogICAgIHNzbF9pc3N1ZXJf ZG4gQVMgaXNzdWVyX2RuCi0gICBGUk9NIHBnX3N0YXRfZ2V0X2FjdGl2aXR5KE5VTEw6OmludGVn ZXIpIHMoZGF0aWQsIHBpZCwgdXNlc3lzaWQsIGFwcGxpY2F0aW9uX25hbWUsIHN0YXRlLCBxdWVy eSwgd2FpdF9ldmVudF90eXBlLCB3YWl0X2V2ZW50LCB4YWN0X3N0YXJ0LCBxdWVyeV9zdGFydCwg YmFja2VuZF9zdGFydCwgc3RhdGVfY2hhbmdlLCBjbGllbnRfYWRkciwgY2xpZW50X2hvc3RuYW1l LCBjbGllbnRfcG9ydCwgYmFja2VuZF94aWQsIGJhY2tlbmRfeG1pbiwgYmFja2VuZF90eXBlLCBz c2wsIHNzbHZlcnNpb24sIHNzbGNpcGhlciwgc3NsYml0cywgc3NsX2NsaWVudF9kbiwgc3NsX2Ns aWVudF9zZXJpYWwsIHNzbF9pc3N1ZXJfZG4sIGdzc19hdXRoLCBnc3NfcHJpbmMsIGdzc19lbmMs IGdzc19kZWxlZ2F0aW9uLCBsZWFkZXJfcGlkLCBxdWVyeV9pZCkKKyAgIEZST00gcGdfc3RhdF9n ZXRfYWN0aXZpdHkoTlVMTDo6aW50ZWdlcikgcyhkYXRpZCwgcGlkLCB1c2VzeXNpZCwgYXBwbGlj YXRpb25fbmFtZSwgc3RhdGUsIHF1ZXJ5LCB3YWl0X2V2ZW50X3R5cGUsIHdhaXRfZXZlbnQsIHhh Y3Rfc3RhcnQsIHF1ZXJ5X3N0YXJ0LCBiYWNrZW5kX3N0YXJ0LCBzdGF0ZV9jaGFuZ2UsIGNsaWVu dF9hZGRyLCBjbGllbnRfaG9zdG5hbWUsIGNsaWVudF9wb3J0LCBiYWNrZW5kX3hpZCwgYmFja2Vu ZF94bWluLCBiYWNrZW5kX3R5cGUsIHNzbCwgc3NsdmVyc2lvbiwgc3NsY2lwaGVyLCBzc2xiaXRz LCBzc2xfY2xpZW50X2RuLCBzc2xfY2xpZW50X3NlcmlhbCwgc3NsX2lzc3Vlcl9kbiwgZ3NzX2F1 dGgsIGdzc19wcmluYywgZ3NzX2VuYywgZ3NzX2RlbGVnYXRpb24sIGxlYWRlcl9waWQsIHF1ZXJ5 X2lkLCBiYWNrZW5kX2NhdGFsb2dfeG1pbikKICAgV0hFUkUgKGNsaWVudF9wb3J0IElTIE5PVCBO VUxMKTsKIHBnX3N0YXRfc3Vic2NyaXB0aW9ufCBTRUxFQ1Qgc3Uub2lkIEFTIHN1YmlkLAogICAg IHN1LnN1Ym5hbWUsCkluZGV4OiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9NYWtlZmlsZQpJREVB IGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmlt cGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9zdGlyL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvTWFr ZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVsbAkocmV2aXNpb24gZDhkZjlk YWVhNzYzNzQ0NjhjMjhmOGU5ZDYwZDgzNTM5YWFkMDVjOCkKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3N0aXIvTWFrZWZpbGUJKHJldmlzaW9uIGQ4ZGY5ZGFlYTc2Mzc0NDY4YzI4ZjhlOWQ2MGQ4 MzUzOWFhZDA1YzgpCkBAIC0wLDAgKzEsMTggQEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1h a2VmaWxlLS0KKyMgICAgTWFrZWZpbGUgZm9yIGFjY2Vzcy9zdGlyCisjCisjIElERU5USUZJQ0FU SU9OCisjICAgIHNyYy9iYWNrZW5kL2FjY2Vzcy9zdGlyL01ha2VmaWxlCisjCisjLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCitzdWJkaXIgPSBzcmMvYmFja2VuZC9hY2Nlc3Mvc3RpcgordG9wX2J1aWxkZGly ID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9i YWwKKworT0JKUyA9IFwKKwlzdGlyLm8KKworaW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNr ZW5kL2NvbW1vbi5tawpJbmRleDogc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvbWVzb24uYnVpbGQK SURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlm Zi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9z dGlyL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwJKHJldmlz aW9uIGQ4ZGY5ZGFlYTc2Mzc0NDY4YzI4ZjhlOWQ2MGQ4MzUzOWFhZDA1YzgpCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9zdGlyL21lc29uLmJ1aWxkCShyZXZpc2lvbiBkOGRmOWRhZWE3NjM3NDQ2 OGMyOGY4ZTlkNjBkODM1MzlhYWQwNWM4KQpAQCAtMCwwICsxLDUgQEAKKyMgQ29weXJpZ2h0IChj KSAyMDI0LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2JhY2tl bmRfc291cmNlcyArPSBmaWxlcygKKyAgJ3N0aXIuYycsCispCkluZGV4OiBzcmMvYmFja2VuZC9h Y2Nlc3Mvc3Rpci9zdGlyLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmlu dGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3Rpci9zdGlyLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3Mvc3Rpci9zdGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKLS0tIC9kZXYvbnVs bAkocmV2aXNpb24gZDhkZjlkYWVhNzYzNzQ0NjhjMjhmOGU5ZDYwZDgzNTM5YWFkMDVjOCkKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jCShyZXZpc2lvbiBkOGRmOWRhZWE3NjM3 NDQ2OGMyOGY4ZTlkNjBkODM1MzlhYWQwNWM4KQpAQCAtMCwwICsxLDUxNyBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogc3Rpci5jCisgKgkgIEltcGxlbWVudGF0aW9uIG9mIFNob3J0LVRl cm0gSW5kZXggUmVwbGFjZW1lbnQuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDI0 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURFTlRJ RklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3N0aXIvc3Rpci5jCisgKgorICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNj ZXNzL3N0aXIuaCIKKyNpbmNsdWRlICJjb21tYW5kcy92YWN1dW0uaCIKKyNpbmNsdWRlICJ1dGls cy9pbmRleF9zZWxmdW5jcy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJ1dGlscy9jYXRjYWNoZS5o IgorI2luY2x1ZGUgImFjY2Vzcy9hbXZhbGlkYXRlLmgiCisjaW5jbHVkZSAidXRpbHMvc3lzY2Fj aGUuaCIKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19hbXByb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19hbW9wLmgiCisjaW5jbHVkZSAidXRpbHMvcmVncHJvYy5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RhYmxlYW0uaCIKKyNpbmNsdWRlICJh Y2Nlc3MvcmVsb3B0aW9ucy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVk ZSAidXRpbHMvZm1ncnByb3Rvcy5oIgorCisvKgorICogU3RpciBoYW5kbGVyIGZ1bmN0aW9uOiBy ZXR1cm4gSW5kZXhBbVJvdXRpbmUgd2l0aCBhY2Nlc3MgbWV0aG9kIHBhcmFtZXRlcnMKKyAqIGFu ZCBjYWxsYmFja3MuCisgKi8KK0RhdHVtCitzdGlyaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQor eworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmUgPSBtYWtlTm9kZShJbmRleEFtUm91dGluZSk7 CisKKwlhbXJvdXRpbmUtPmFtc3RyYXRlZ2llcyA9IFNUSVJfTlNUUkFURUdJRVM7CisJYW1yb3V0 aW5lLT5hbXN1cHBvcnQgPSBTVElSX05QUk9DOworCWFtcm91dGluZS0+YW1vcHRzcHJvY251bSA9 IFNUSVJfT1BUSU9OU19QUk9DOworCWFtcm91dGluZS0+YW1jYW5vcmRlciA9IGZhbHNlOworCWFt cm91dGluZS0+YW1jYW5vcmRlcmJ5b3AgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FuYmFja3dh cmQgPSBmYWxzZTsKKwlhbXJvdXRpbmUtPmFtY2FudW5pcXVlID0gZmFsc2U7CisJYW1yb3V0aW5l LT5hbWNhbm11bHRpY29sID0gdHJ1ZTsKKwlhbXJvdXRpbmUtPmFtb3B0aW9uYWxrZXkgPSB0cnVl OworCWFtcm91dGluZS0+YW1zZWFyY2hhcnJheSA9IGZhbHNlOworCWFtcm91dGluZS0+YW1zZWFy Y2hudWxscyA9IGZhbHNlOworCWFtcm91dGluZS0+YW1zdG9yYWdlID0gZmFsc2U7CisJYW1yb3V0 aW5lLT5hbWNsdXN0ZXJhYmxlID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbXByZWRsb2NrcyA9IGZh bHNlOworCWFtcm91dGluZS0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOworCWFtcm91dGluZS0+YW1j YW5idWlsZHBhcmFsbGVsID0gZmFsc2U7CisJYW1yb3V0aW5lLT5hbWNhbmluY2x1ZGUgPSB0cnVl OworCWFtcm91dGluZS0+YW11c2VtYWludGVuYW5jZXdvcmttZW0gPSBmYWxzZTsKKwlhbXJvdXRp bmUtPmFtcGFyYWxsZWx2YWN1dW1vcHRpb25zID0KKwkJCVZBQ1VVTV9PUFRJT05fUEFSQUxMRUxf QlVMS0RFTCB8IFZBQ1VVTV9PUFRJT05fUEFSQUxMRUxfQ0xFQU5VUDsKKwlhbXJvdXRpbmUtPmFt a2V5dHlwZSA9IEludmFsaWRPaWQ7CisKKwlhbXJvdXRpbmUtPmFtYnVpbGQgPSBzdGlyYnVpbGQ7 CisJYW1yb3V0aW5lLT5hbWJ1aWxkZW1wdHkgPSBzdGlyYnVpbGRlbXB0eTsKKwlhbXJvdXRpbmUt PmFtaW5zZXJ0ID0gc3Rpcmluc2VydDsKKwlhbXJvdXRpbmUtPmFtaW5zZXJ0Y2xlYW51cCA9IE5V TEw7CisJYW1yb3V0aW5lLT5hbWJ1bGtkZWxldGUgPSBzdGlyYnVsa2RlbGV0ZTsKKwlhbXJvdXRp bmUtPmFtdmFjdXVtY2xlYW51cCA9IHN0aXJ2YWN1dW1jbGVhbnVwOworCWFtcm91dGluZS0+YW1j YW5yZXR1cm4gPSBOVUxMOworCWFtcm91dGluZS0+YW1jb3N0ZXN0aW1hdGUgPSBzdGlyY29zdGVz dGltYXRlOworCWFtcm91dGluZS0+YW1vcHRpb25zID0gc3Rpcm9wdGlvbnM7CisJYW1yb3V0aW5l LT5hbXByb3BlcnR5ID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtYnVpbGRwaGFzZW5hbWUgPSBOVUxM OworCWFtcm91dGluZS0+YW12YWxpZGF0ZSA9IHN0aXJ2YWxpZGF0ZTsKKwlhbXJvdXRpbmUtPmFt YWRqdXN0bWVtYmVycyA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWJlZ2luc2NhbiA9IHN0aXJiZWdp bnNjYW47CisJYW1yb3V0aW5lLT5hbXJlc2NhbiA9IHN0aXJyZXNjYW47CisJYW1yb3V0aW5lLT5h bWdldHR1cGxlID0gTlVMTDsKKwlhbXJvdXRpbmUtPmFtZ2V0Yml0bWFwID0gTlVMTDsKKwlhbXJv dXRpbmUtPmFtZW5kc2NhbiA9IHN0aXJlbmRzY2FuOworCWFtcm91dGluZS0+YW1tYXJrcG9zID0g TlVMTDsKKwlhbXJvdXRpbmUtPmFtcmVzdHJwb3MgPSBOVUxMOworCWFtcm91dGluZS0+YW1lc3Rp bWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEw7CisJYW1yb3V0aW5lLT5hbWluaXRwYXJhbGxlbHNjYW4g PSBOVUxMOworCWFtcm91dGluZS0+YW1wYXJhbGxlbHJlc2NhbiA9IE5VTEw7CisKKwlQR19SRVRV Uk5fUE9JTlRFUihhbXJvdXRpbmUpOworfQorCitib29sCitzdGlydmFsaWRhdGUoT2lkIG9wY2xh c3NvaWQpCit7CisJYm9vbCByZXN1bHQgPSB0cnVlOworCUhlYXBUdXBsZSBjbGFzc3R1cDsKKwlG b3JtX3BnX29wY2xhc3MgY2xhc3Nmb3JtOworCU9pZCBvcGZhbWlseW9pZDsKKwlIZWFwVHVwbGUg ZmFtaWx5dHVwOworCUZvcm1fcGdfb3BmYW1pbHkgZmFtaWx5Zm9ybTsKKwljaGFyICpvcGZhbWls eW5hbWU7CisJQ2F0Q0xpc3QgKnByb2NsaXN0LAorCQkJKm9wcmxpc3Q7CisJaW50IGk7CisKKwkv KiBGZXRjaCBvcGNsYXNzIGluZm9ybWF0aW9uICovCisJY2xhc3N0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKG9wY2xhc3NvaWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoY2xhc3N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3Igb3BlcmF0b3IgY2xhc3MgJXUiLCBvcGNsYXNzb2lkKTsKKwljbGFzc2Zvcm0gPSAoRm9ybV9w Z19vcGNsYXNzKSBHRVRTVFJVQ1QoY2xhc3N0dXApOworCisJb3BmYW1pbHlvaWQgPSBjbGFzc2Zv cm0tPm9wY2ZhbWlseTsKKworCisJLyogRmV0Y2ggb3BmYW1pbHkgaW5mb3JtYXRpb24gKi8KKwlm YW1pbHl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0o b3BmYW1pbHlvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmFtaWx5dHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSAldSIsIG9w ZmFtaWx5b2lkKTsKKwlmYW1pbHlmb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChm YW1pbHl0dXApOworCisJb3BmYW1pbHluYW1lID0gTmFtZVN0cihmYW1pbHlmb3JtLT5vcGZuYW1l KTsKKworCS8qIEZldGNoIGFsbCBvcGVyYXRvcnMgYW5kIHN1cHBvcnQgZnVuY3Rpb25zIG9mIHRo ZSBvcGZhbWlseSAqLworCW9wcmxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKEFNT1BTVFJBVEVH WSwgT2JqZWN0SWRHZXREYXR1bShvcGZhbWlseW9pZCkpOworCXByb2NsaXN0ID0gU2VhcmNoU3lz Q2FjaGVMaXN0MShBTVBST0NOVU0sIE9iamVjdElkR2V0RGF0dW0ob3BmYW1pbHlvaWQpKTsKKwor CS8qIENoZWNrIGluZGl2aWR1YWwgb3BlcmF0b3JzICovCisJZm9yIChpID0gMDsgaSA8IG9wcmxp c3QtPm5fbWVtYmVyczsgaSsrKQorCXsKKwkJSGVhcFR1cGxlIG9wcnR1cCA9ICZvcHJsaXN0LT5t ZW1iZXJzW2ldLT50dXBsZTsKKwkJRm9ybV9wZ19hbW9wIG9wcmZvcm0gPSAoRm9ybV9wZ19hbW9w KSBHRVRTVFJVQ1Qob3BydHVwKTsKKworCQkvKiBDaGVjayBpdCdzIGFsbG93ZWQgc3RyYXRlZ3kg Zm9yIHN0aXIgKi8KKwkJaWYgKG9wcmZvcm0tPmFtb3BzdHJhdGVneSA8IDEgfHwKKwkJCW9wcmZv cm0tPmFtb3BzdHJhdGVneSA+IFNUSVJfTlNUUkFURUdJRVMpCisJCXsKKwkJCWVyZXBvcnQoSU5G TywKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKKwkJ CQkJCQllcnJtc2coInN0aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0b3IgJXMgd2l0aCBp bnZhbGlkIHN0cmF0ZWd5IG51bWJlciAlZCIsCisJCQkJCQkJCSAgIG9wZmFtaWx5bmFtZSwKKwkJ CQkJCQkJICAgZm9ybWF0X29wZXJhdG9yKG9wcmZvcm0tPmFtb3BvcHIpLAorCQkJCQkJCQkgICBv cHJmb3JtLT5hbW9wc3RyYXRlZ3kpKSk7CisJCQlyZXN1bHQgPSBmYWxzZTsKKwkJfQorCisJCS8q IHN0aXIgZG9lc24ndCBzdXBwb3J0IE9SREVSIEJZIG9wZXJhdG9ycyAqLworCQlpZiAob3ByZm9y bS0+YW1vcHB1cnBvc2UgIT0gQU1PUF9TRUFSQ0ggfHwKKwkJCU9pZElzVmFsaWQob3ByZm9ybS0+ YW1vcHNvcnRmYW1pbHkpKQorCQl7CisJCQllcmVwb3J0KElORk8sCisJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9PQkpFQ1RfREVGSU5JVElPTiksCisJCQkJCQkJZXJybXNnKCJzdGlyIG9w ZmFtaWx5ICVzIGNvbnRhaW5zIGludmFsaWQgT1JERVIgQlkgc3BlY2lmaWNhdGlvbiBmb3Igb3Bl cmF0b3IgJXMiLAorCQkJCQkJCQkgICBvcGZhbWlseW5hbWUsCisJCQkJCQkJCSAgIGZvcm1hdF9v cGVyYXRvcihvcHJmb3JtLT5hbW9wb3ByKSkpKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisK KwkJLyogQ2hlY2sgb3BlcmF0b3Igc2lnbmF0dXJlIC0tLSBzYW1lIGZvciBhbGwgc3RpciBzdHJh dGVnaWVzICovCisJCWlmICghY2hlY2tfYW1vcF9zaWduYXR1cmUob3ByZm9ybS0+YW1vcG9wciwg Qk9PTE9JRCwKKwkJCQkJCQkJICBvcHJmb3JtLT5hbW9wbGVmdHR5cGUsCisJCQkJCQkJCSAgb3By Zm9ybS0+YW1vcHJpZ2h0dHlwZSkpCisJCXsKKwkJCWVyZXBvcnQoSU5GTywKKwkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklUSU9OKSwKKwkJCQkJCQllcnJtc2coInN0 aXIgb3BmYW1pbHkgJXMgY29udGFpbnMgb3BlcmF0b3IgJXMgd2l0aCB3cm9uZyBzaWduYXR1cmUi LAorCQkJCQkJCQkgICBvcGZhbWlseW5hbWUsCisJCQkJCQkJCSAgIGZvcm1hdF9vcGVyYXRvcihv cHJmb3JtLT5hbW9wb3ByKSkpKTsKKwkJCXJlc3VsdCA9IGZhbHNlOworCQl9CisJfQorCisKKwlS ZWxlYXNlQ2F0Q2FjaGVMaXN0KHByb2NsaXN0KTsKKwlSZWxlYXNlQ2F0Q2FjaGVMaXN0KG9wcmxp c3QpOworCVJlbGVhc2VTeXNDYWNoZShmYW1pbHl0dXApOworCVJlbGVhc2VTeXNDYWNoZShjbGFz c3R1cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQKK1N0aXJGaWxsTWV0YXBhZ2Uo UmVsYXRpb24gaW5kZXgsIFBhZ2UgbWV0YVBhZ2UsIGJvb2wgc2tpcEluc2VydHMpCit7CisJU3Rp ck1ldGFQYWdlRGF0YSAqbWV0YWRhdGE7CisKKwlTdGlySW5pdFBhZ2UobWV0YVBhZ2UsIFNUSVJf TUVUQSk7CisJbWV0YWRhdGEgPSBTdGlyUGFnZUdldE1ldGEobWV0YVBhZ2UpOworCW1lbXNldCht ZXRhZGF0YSwgMCwgc2l6ZW9mKFN0aXJNZXRhUGFnZURhdGEpKTsKKwltZXRhZGF0YS0+bWFnaWNr TnVtYmVyID0gU1RJUl9NQUdJQ0tfTlVNQkVSOworCW1ldGFkYXRhLT5za2lwSW5zZXJ0cyA9IHNr aXBJbnNlcnRzOworCSgoUGFnZUhlYWRlcikgbWV0YVBhZ2UpLT5wZF9sb3dlciArPSBzaXplb2Yo U3Rpck1ldGFQYWdlRGF0YSk7Cit9CisKK3ZvaWQKK1N0aXJJbml0TWV0YXBhZ2UoUmVsYXRpb24g aW5kZXgsIEZvcmtOdW1iZXIgZm9ya251bSkKK3sKKwlCdWZmZXIgbWV0YUJ1ZmZlcjsKKwlQYWdl IG1ldGFQYWdlOworCUdlbmVyaWNYTG9nU3RhdGUgKnN0YXRlOworCisJLyoKKwkgKiBNYWtlIGEg bmV3IHBhZ2U7IHNpbmNlIGl0IGlzIGZpcnN0IHBhZ2UgaXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQg d2l0aAorCSAqIGJsb2NrIG51bWJlciAwIChTVElSX01FVEFQQUdFX0JMS05PKS4gIE5vIG5lZWQg dG8gaG9sZCB0aGUgZXh0ZW5zaW9uCisJICogbG9jayBiZWNhdXNlIHRoZXJlIGNhbm5vdCBiZSBj b25jdXJyZW50IGluc2VydGVycyB5ZXQuCisJICovCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXJF eHRlbmRlZChpbmRleCwgZm9ya251bSwgUF9ORVcsIFJCTV9OT1JNQUwsIE5VTEwpOworCUxvY2tC dWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlBc3NlcnQoQnVmZmVy R2V0QmxvY2tOdW1iZXIobWV0YUJ1ZmZlcikgPT0gU1RJUl9NRVRBUEFHRV9CTEtOTyk7CisKKwkv KiBJbml0aWFsaXplIGNvbnRlbnRzIG9mIG1ldGEgcGFnZSAqLworCXN0YXRlID0gR2VuZXJpY1hM b2dTdGFydChpbmRleCk7CisJbWV0YVBhZ2UgPSBHZW5lcmljWExvZ1JlZ2lzdGVyQnVmZmVyKHN0 YXRlLCBtZXRhQnVmZmVyLAorCQkJCQkJCQkJCSBHRU5FUklDX1hMT0dfRlVMTF9JTUFHRSk7CisJ U3RpckZpbGxNZXRhcGFnZShpbmRleCwgbWV0YVBhZ2UsIGZvcmtudW0gPT0gSU5JVF9GT1JLTlVN KTsKKwlHZW5lcmljWExvZ0ZpbmlzaChzdGF0ZSk7CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKG1l dGFCdWZmZXIpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBhbnkgcGFnZSBvZiBhIHN0aXIgaW5k ZXguCisgKi8KK3ZvaWQKK1N0aXJJbml0UGFnZShQYWdlIHBhZ2UsIHVpbnQxNiBmbGFncykKK3sK KwlTdGlyUGFnZU9wYXF1ZSBvcGFxdWU7CisKKwlQYWdlSW5pdChwYWdlLCBCTENLU1osIHNpemVv ZihTdGlyUGFnZU9wYXF1ZURhdGEpKTsKKworCW9wYXF1ZSA9IFN0aXJQYWdlR2V0T3BhcXVlKHBh Z2UpOworCW9wYXF1ZS0+ZmxhZ3MgPSBmbGFnczsKKwlvcGFxdWUtPnN0aXJfcGFnZV9pZCA9IFNU SVJfUEFHRV9JRDsKK30KKworc3RhdGljIGJvb2wKK1N0aXJQYWdlQWRkSXRlbShQYWdlIHBhZ2Us IFN0aXJUdXBsZSAqdHVwbGUpCit7CisJU3RpclR1cGxlICppdHVwOworCVN0aXJQYWdlT3BhcXVl IG9wYXF1ZTsKKwlQb2ludGVyIHB0cjsKKworCS8qIFdlIHNob3VsZG4ndCBiZSBwb2ludGVkIHRv IGFuIGludmFsaWQgcGFnZSAqLworCUFzc2VydCghUGFnZUlzTmV3KHBhZ2UpKTsKKworCS8qIERv ZXMgbmV3IHR1cGxlIGZpdCBvbiB0aGUgcGFnZT8gKi8KKwlpZiAoU3RpclBhZ2VHZXRGcmVlU3Bh Y2Uoc3RhdGUsIHBhZ2UpIDwgc2l6ZW9mKFN0aXJUdXBsZSkpCisJCXJldHVybiBmYWxzZTsKKwor CS8qIENvcHkgbmV3IHR1cGxlIHRvIHRoZSBlbmQgb2YgcGFnZSAqLworCW9wYXF1ZSA9IFN0aXJQ YWdlR2V0T3BhcXVlKHBhZ2UpOworCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxlKHBhZ2UsIG9wYXF1 ZS0+bWF4b2ZmICsgMSk7CisJbWVtY3B5KChQb2ludGVyKSBpdHVwLCAoUG9pbnRlcikgdHVwbGUs IHNpemVvZihTdGlyVHVwbGUpKTsKKworCS8qIEFkanVzdCBtYXhvZmYgYW5kIHBkX2xvd2VyICov CisJb3BhcXVlLT5tYXhvZmYrKzsKKwlwdHIgPSAoUG9pbnRlcikgU3RpclBhZ2VHZXRUdXBsZShw YWdlLCBvcGFxdWUtPm1heG9mZiArIDEpOworCSgoUGFnZUhlYWRlcikgcGFnZSktPnBkX2xvd2Vy ID0gcHRyIC0gcGFnZTsKKworCS8qIEFzc2VydCB3ZSBkaWRuJ3Qgb3ZlcnJ1biBhdmFpbGFibGUg c3BhY2UgKi8KKwlBc3NlcnQoKChQYWdlSGVhZGVyKSBwYWdlKS0+cGRfbG93ZXIgPD0gKChQYWdl SGVhZGVyKSBwYWdlKS0+cGRfdXBwZXIpOworCXJldHVybiB0cnVlOworfQorCitib29sCitzdGly aW5zZXJ0KFJlbGF0aW9uIGluZGV4LCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCisJCSAg SXRlbVBvaW50ZXIgaHRfY3RpZCwgUmVsYXRpb24gaGVhcFJlbCwKKwkJICBJbmRleFVuaXF1ZUNo ZWNrIGNoZWNrVW5pcXVlLAorCQkgIGJvb2wgaW5kZXhVbmNoYW5nZWQsCisJCSAgc3RydWN0IElu ZGV4SW5mbyAqaW5kZXhJbmZvKQoreworCVN0aXJUdXBsZSAqaXR1cDsKKwlNZW1vcnlDb250ZXh0 IG9sZEN0eDsKKwlNZW1vcnlDb250ZXh0IGluc2VydEN0eDsKKwlTdGlyTWV0YVBhZ2VEYXRhICpt ZXRhRGF0YTsKKwlCdWZmZXIgYnVmZmVyLAorCQkJbWV0YUJ1ZmZlcjsKKwlQYWdlIHBhZ2U7CisJ R2VuZXJpY1hMb2dTdGF0ZSAqc3RhdGU7CisJdWludDE2IGJsa05vOworCisJaW5zZXJ0Q3R4ID0g QWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJICAi U3RpciBpbnNlcnQgdGVtcG9yYXJ5IGNvbnRleHQiLAorCQkJCQkJCQkJICBBTExPQ1NFVF9ERUZB VUxUX1NJWkVTKTsKKworCW9sZEN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhpbnNlcnRDdHgp OworCisJaXR1cCA9IChTdGlyVHVwbGUgKikgcGFsbG9jMChzaXplb2YoU3RpclR1cGxlKSk7CisJ aXR1cC0+aGVhcFB0ciA9ICpodF9jdGlkOworCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5k ZXgsIFNUSVJfTUVUQVBBR0VfQkxLTk8pOworCisJZm9yICg7OykKKwl7CisJCUxvY2tCdWZmZXIo bWV0YUJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCQltZXRhRGF0YSA9IFN0aXJQYWdlR2V0 TWV0YShCdWZmZXJHZXRQYWdlKG1ldGFCdWZmZXIpKTsKKwkJaWYgKG1ldGFEYXRhLT5za2lwSW5z ZXJ0cykKKwkJeworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKKwkJCXJldHVy biBmYWxzZTsKKwkJfQorCQlibGtObyA9IG1ldGFEYXRhLT5sYXN0QmxrTm87CisJCS8qIERvbid0 IGhvbGQgbWV0YWJ1ZmZlciBsb2NrIHdoaWxlIGRvaW5nIGluc2VydCAqLworCQlMb2NrQnVmZmVy KG1ldGFCdWZmZXIsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJaWYgKGJsa05vID4gMCkKKwkJ eworCQkJYnVmZmVyID0gUmVhZEJ1ZmZlcihpbmRleCwgYmxrTm8pOworCQkJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lWRSk7CisKKwkJCXN0YXRlID0gR2VuZXJpY1hMb2dT dGFydChpbmRleCk7CisJCQlwYWdlID0gR2VuZXJpY1hMb2dSZWdpc3RlckJ1ZmZlcihzdGF0ZSwg YnVmZmVyLCAwKTsKKworCQkJQXNzZXJ0KCFQYWdlSXNOZXcocGFnZSkpOworCisJCQlpZiAoU3Rp clBhZ2VBZGRJdGVtKHBhZ2UsIGl0dXApKQorCQkJeworCQkJCS8qIFN1Y2Nlc3MhICBBcHBseSB0 aGUgY2hhbmdlLCBjbGVhbiB1cCwgYW5kIGV4aXQgKi8KKwkJCQlHZW5lcmljWExvZ0ZpbmlzaChz dGF0ZSk7CisJCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCQkJCVJlbGVhc2VCdWZm ZXIobWV0YUJ1ZmZlcik7CisJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN0eCk7CisJCQkJ TWVtb3J5Q29udGV4dERlbGV0ZShpbnNlcnRDdHgpOworCQkJCXJldHVybiBmYWxzZTsKKwkJCX0K KworCQkJLyogRGlkbid0IGZpdCwgbXVzdCB0cnkgb3RoZXIgcGFnZXMgKi8KKwkJCUdlbmVyaWNY TG9nQWJvcnQoc3RhdGUpOworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCQl9CisK KwkJTG9ja0J1ZmZlcihtZXRhQnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCisJCXN0 YXRlID0gR2VuZXJpY1hMb2dTdGFydChpbmRleCk7CisJCW1ldGFEYXRhID0gU3RpclBhZ2VHZXRN ZXRhKEdlbmVyaWNYTG9nUmVnaXN0ZXJCdWZmZXIoc3RhdGUsIG1ldGFCdWZmZXIsIEdFTkVSSUNf WExPR19GVUxMX0lNQUdFKSk7CisJCWlmIChibGtObyAhPSBtZXRhRGF0YS0+bGFzdEJsa05vKQor CQl7CisJCQlBc3NlcnQoYmxrTm8gPCBtZXRhRGF0YS0+bGFzdEJsa05vKTsKKwkJCS8vIHNvbWVv bmUgZWxzZSBpbnNlcnRlZCB0aGUgbmV3IHBhZ2UgaW50byB0aGUgaW5kZXgsIGxldHMgdHJ5IGFn YWluCisJCQlHZW5lcmljWExvZ0Fib3J0KHN0YXRlKTsKKwkJCUxvY2tCdWZmZXIobWV0YUJ1ZmZl ciwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UKKwkJewor CQkJLyogTXVzdCBleHRlbmQgdGhlIGZpbGUgKi8KKwkJCWJ1ZmZlciA9IEV4dGVuZEJ1ZmZlcmVk UmVsKEJNUl9SRUwoaW5kZXgpLCBNQUlOX0ZPUktOVU0sIE5VTEwsCisJCQkJCQkJCQkgICBFQl9M T0NLX0ZJUlNUKTsKKworCQkJcGFnZSA9IEdlbmVyaWNYTG9nUmVnaXN0ZXJCdWZmZXIoc3RhdGUs IGJ1ZmZlciwgR0VORVJJQ19YTE9HX0ZVTExfSU1BR0UpOworCQkJU3RpckluaXRQYWdlKHBhZ2Us IDApOworCisJCQlpZiAoIVN0aXJQYWdlQWRkSXRlbShwYWdlLCBpdHVwKSkKKwkJCXsKKwkJCQkv KiBXZSBzaG91bGRuJ3QgYmUgaGVyZSBzaW5jZSB3ZSdyZSBpbnNlcnRpbmcgdG8gYW4gZW1wdHkg cGFnZSAqLworCQkJCWVsb2coRVJST1IsICJjb3VsZCBub3QgYWRkIG5ldyBzdGlyIHR1cGxlIHRv IGVtcHR5IHBhZ2UiKTsKKwkJCX0KKwkJCW1ldGFEYXRhLT5sYXN0QmxrTm8gPSBCdWZmZXJHZXRC bG9ja051bWJlcihidWZmZXIpOworCQkJR2VuZXJpY1hMb2dGaW5pc2goc3RhdGUpOworCisJCQlV bmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKG1ldGFC dWZmZXIpOworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkQ3R4KTsKKwkJCU1lbW9yeUNv bnRleHREZWxldGUoaW5zZXJ0Q3R4KTsKKworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorfQor CitJbmRleFNjYW5EZXNjIHN0aXJiZWdpbnNjYW4oUmVsYXRpb24gciwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxlbWVudGVkIiwg X19mdW5jX18pKSk7Cit9CisKK3ZvaWQKK3N0aXJyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCisJCSAgU2NhbktleSBvcmRlcmJ5cywgaW50 IG5vcmRlcmJ5cykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhIG5vdCBpbXBsZW1lbnRlZCIs IF9fZnVuY19fKSkpOworfQorCit2b2lkIHN0aXJlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikK K3sKKwllcmVwb3J0KEVSUk9SLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhIG5vdCBpbXBsZW1lbnRlZCIsIF9fZnVuY19fKSkp OworfQorCitJbmRleEJ1aWxkUmVzdWx0ICpzdGlyYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVsYXRp b24gaW5kZXgsCisJCQkJCQkgICBzdHJ1Y3QgSW5kZXhJbmZvICppbmRleEluZm8pCit7CisJSW5k ZXhCdWlsZFJlc3VsdCAqcmVzdWx0OworCisJU3RpckluaXRNZXRhcGFnZShpbmRleCwgTUFJTl9G T1JLTlVNKTsKKworCXJlc3VsdCA9IChJbmRleEJ1aWxkUmVzdWx0ICopIHBhbGxvYyhzaXplb2Yo SW5kZXhCdWlsZFJlc3VsdCkpOworCXJlc3VsdC0+aGVhcF90dXBsZXMgPSAwOworCXJlc3VsdC0+ aW5kZXhfdHVwbGVzID0gMDsKKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHN0aXJidWlsZGVt cHR5KFJlbGF0aW9uIGluZGV4KQoreworCVN0aXJJbml0TWV0YXBhZ2UoaW5kZXgsIElOSVRfRk9S S05VTSk7Cit9CisKK0luZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RpcmJ1bGtkZWxldGUoSW5kZXhW YWN1dW1JbmZvICppbmZvLAorCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMs CisJCQkJCQkJCQkgSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCQkg dm9pZCAqY2FsbGJhY2tfc3RhdGUpCit7CisJUmVsYXRpb24gaW5kZXggPSBpbmZvLT5pbmRleDsK KwlCbG9ja051bWJlciBibGtubywgbnBhZ2VzOworCUJ1ZmZlciBidWZmZXI7CisJUGFnZSBwYWdl OworCisJaWYgKCFpbmZvLT52YWxpZGF0ZV9pbmRleCkKKwl7CisJCVN0aXJNYXJrQXNTa2lwSW5z ZXJ0cyhpbmRleCk7CisKKwkJZXJlcG9ydChXQVJOSU5HLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCisJCQkJZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxl bWVudGVkLCBzZWVtcyBsaWtlIHRoaXMgaW5kZXggbmVlZCB0byBiZSBkcm9wcGVkIiwgX19mdW5j X18pKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzdGF0cyA9PSBOVUxMKQorCQlzdGF0 cyA9IChJbmRleEJ1bGtEZWxldGVSZXN1bHQgKikgcGFsbG9jMChzaXplb2YoSW5kZXhCdWxrRGVs ZXRlUmVzdWx0KSk7CisKKwkvKgorCSAqIEl0ZXJhdGUgb3ZlciB0aGUgcGFnZXMuIFdlIGRvbid0 IGNhcmUgYWJvdXQgY29uY3VycmVudGx5IGFkZGVkIHBhZ2VzLAorCSAqIGJlY2F1c2UgVE9ETwor CSAqLworCW5wYWdlcyA9IFJlbGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3MoaW5kZXgpOworCWZvciAo Ymxrbm8gPSBTVElSX0hFQURfQkxLTk87IGJsa25vIDwgbnBhZ2VzOyBibGtubysrKQorCXsKKwkJ U3RpclR1cGxlICppdHVwLCAqaXR1cEVuZDsKKworCQl2YWN1dW1fZGVsYXlfcG9pbnQoKTsKKwor CQlidWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoaW5kZXgsIE1BSU5fRk9SS05VTSwgYmxrbm8s CisJCQkJCQkJCQlSQk1fTk9STUFMLCBpbmZvLT5zdHJhdGVneSk7CisKKwkJTG9ja0J1ZmZlcihi dWZmZXIsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2UoYnVmZmVy KTsKKworCQlpZiAoUGFnZUlzTmV3KHBhZ2UpKQorCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVy KGJ1ZmZlcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWl0dXAgPSBTdGlyUGFnZUdldFR1cGxl KHBhZ2UsIEZpcnN0T2Zmc2V0TnVtYmVyKTsKKwkJaXR1cEVuZCA9IFN0aXJQYWdlR2V0VHVwbGUo cGFnZSwgT2Zmc2V0TnVtYmVyTmV4dChTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSkpOworCQl3 aGlsZSAoaXR1cCA8IGl0dXBFbmQpCisJCXsKKwkJCS8qIERvIHdlIGhhdmUgdG8gZGVsZXRlIHRo aXMgdHVwbGU/ICovCisJCQlpZiAoY2FsbGJhY2soJml0dXAtPmhlYXBQdHIsIGNhbGxiYWNrX3N0 YXRlKSkKKwkJCXsKKwkJCQllcmVwb3J0KEVSUk9SLCAoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVf Tk9UX1NVUFBPUlRFRCksIGVycm1zZygid2UgbmV2ZXIgZGVsZXRlIGluIHN0aXIiKSkpOworCQkJ fQorCisJCQlpdHVwID0gU3RpclBhZ2VHZXROZXh0VHVwbGUoaXR1cCk7CisJCX0KKworCQlVbmxv Y2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJfQorCisJcmV0dXJuIHN0YXRzOworfQorCit2b2lk IFN0aXJNYXJrQXNTa2lwSW5zZXJ0cyhSZWxhdGlvbiBpbmRleCkKK3sKKwlTdGlyTWV0YVBhZ2VE YXRhICptZXRhRGF0YTsKKwlCdWZmZXIgbWV0YUJ1ZmZlcjsKKwlQYWdlIG1ldGFQYWdlOworCUdl bmVyaWNYTG9nU3RhdGUgKnN0YXRlOworCisJbWV0YUJ1ZmZlciA9IFJlYWRCdWZmZXIoaW5kZXgs IFNUSVJfTUVUQVBBR0VfQkxLTk8pOworCUxvY2tCdWZmZXIobWV0YUJ1ZmZlciwgQlVGRkVSX0xP Q0tfRVhDTFVTSVZFKTsKKworCXN0YXRlID0gR2VuZXJpY1hMb2dTdGFydChpbmRleCk7CisJbWV0 YVBhZ2UgPSBHZW5lcmljWExvZ1JlZ2lzdGVyQnVmZmVyKHN0YXRlLCBtZXRhQnVmZmVyLAorCQkJ CQkJCQkJCSBHRU5FUklDX1hMT0dfRlVMTF9JTUFHRSk7CisJbWV0YURhdGEgPSBTdGlyUGFnZUdl dE1ldGEobWV0YVBhZ2UpOworCWlmICghbWV0YURhdGEtPnNraXBJbnNlcnRzKQorCXsKKwkJbWV0 YURhdGEtPnNraXBJbnNlcnRzID0gdHJ1ZTsKKwkJR2VuZXJpY1hMb2dGaW5pc2goc3RhdGUpOwor CX0KKwllbHNlCisJeworCQlHZW5lcmljWExvZ0Fib3J0KHN0YXRlKTsKKwl9CisJVW5sb2NrUmVs ZWFzZUJ1ZmZlcihtZXRhQnVmZmVyKTsKK30KKworSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGly dmFjdXVtY2xlYW51cChJbmRleFZhY3V1bUluZm8gKmluZm8sCisJCQkJCQkJCQkJSW5kZXhCdWxr RGVsZXRlUmVzdWx0ICpzdGF0cykKK3sKKwlTdGlyTWFya0FzU2tpcEluc2VydHMoaW5mby0+aW5k ZXgpOworCWVyZXBvcnQoV0FSTklORywgKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgbm90IGltcGxlbWVudGVkLCBzZWVt cyBsaWtlIHRoaXMgaW5kZXggbmVlZCB0byBiZSBkcm9wcGVkIiwgX19mdW5jX18pKSk7CisJcmV0 dXJuIE5VTEw7Cit9CisKK2J5dGVhICpzdGlyb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29s IHZhbGlkYXRlKQoreworCXJldHVybiBOVUxMOworfQorCit2b2lkIHN0aXJjb3N0ZXN0aW1hdGUo UGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwKKwkJCQkJIGRvdWJsZSBsb29wX2Nv dW50LCBDb3N0ICppbmRleFN0YXJ0dXBDb3N0LAorCQkJCQkgQ29zdCAqaW5kZXhUb3RhbENvc3Qs IFNlbGVjdGl2aXR5ICppbmRleFNlbGVjdGl2aXR5LAorCQkJCQkgZG91YmxlICppbmRleENvcnJl bGF0aW9uLCBkb3VibGUgKmluZGV4UGFnZXMpCit7CisJZXJlcG9ydChFUlJPUiwgKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLCBlcnJtc2coIlwiJXNcIiBpcyBub3QgYSBu b3QgaW1wbGVtZW50ZWQiLCBfX2Z1bmNfXykpKTsKK30KSW5kZXg6IHNyYy9pbmNsdWRlL2FjY2Vz cy9zdGlyLmgKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9w ZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3Rpci5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3N0 aXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCShyZXZpc2lvbiBkOGRmOWRh ZWE3NjM3NDQ2OGMyOGY4ZTlkNjBkODM1MzlhYWQwNWM4KQorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3Mvc3Rpci5oCShyZXZpc2lvbiBkOGRmOWRhZWE3NjM3NDQ2OGMyOGY4ZTlkNjBkODM1MzlhYWQw NWM4KQpAQCAtMCwwICsxLDExNyBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogc3Rpci5o CisgKgkgIGhlYWRlciBmaWxlIGZvciBwb3N0Z3JlcyBzdGlyIGFjY2VzcyBtZXRob2QgaW1wbGVt ZW50YXRpb24uCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAyNC0yMDI0LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9zdGlyLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBfU1RJUl9I XworI2RlZmluZSBfU1RJUl9IXworCisjaW5jbHVkZSAiYW1hcGkuaCIKKyNpbmNsdWRlICJ4bG9n LmgiCisjaW5jbHVkZSAiZ2VuZXJpY194bG9nLmgiCisjaW5jbHVkZSAiaXR1cC5oIgorI2luY2x1 ZGUgImZtZ3IuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKworLyogU3VwcG9ydCBw cm9jZWR1cmVzIG51bWJlcnMgKi8KKyNkZWZpbmUgU1RJUl9OUFJPQwkJCQkwCisKKy8qIFNjYW4g c3RyYXRlZ2llcyAqLworI2RlZmluZSBTVElSX05TVFJBVEVHSUVTCQkxCisKKyNkZWZpbmUgU1RJ Ul9PUFRJT05TX1BST0MJCQkJMAorCisvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBibG9vbSBwYWdl IHN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgU3RpclBhZ2VHZXRPcGFxdWUocGFnZSkgKChTdGlyUGFn ZU9wYXF1ZSkgUGFnZUdldFNwZWNpYWxQb2ludGVyKHBhZ2UpKQorI2RlZmluZSBTdGlyUGFnZUdl dE1heE9mZnNldChwYWdlKSAoU3RpclBhZ2VHZXRPcGFxdWUocGFnZSktPm1heG9mZikKKyNkZWZp bmUgU3RpclBhZ2VJc01ldGEocGFnZSkgXAorCSgoU3RpclBhZ2VHZXRPcGFxdWUocGFnZSktPmZs YWdzICYgQkxPT01fTUVUQSkgIT0gMCkKKyNkZWZpbmUgU3RpclBhZ2VHZXREYXRhKHBhZ2UpCQko KFN0aXJUdXBsZSAqKVBhZ2VHZXRDb250ZW50cyhwYWdlKSkKKyNkZWZpbmUgU3RpclBhZ2VHZXRU dXBsZShwYWdlLCBvZmZzZXQpIFwKKwkoKFN0aXJUdXBsZSAqKShQYWdlR2V0Q29udGVudHMocGFn ZSkgXAorCQkrIHNpemVvZihTdGlyVHVwbGUpICogKChvZmZzZXQpIC0gMSkpKQorI2RlZmluZSBT dGlyUGFnZUdldE5leHRUdXBsZSh0dXBsZSkgXAorCSgoU3RpclR1cGxlICopKChQb2ludGVyKSh0 dXBsZSkgKyBzaXplb2YoU3RpclR1cGxlKSkpCisKKworCisvKiBQcmVzZXJ2ZWQgcGFnZSBudW1i ZXJzICovCisjZGVmaW5lIFNUSVJfTUVUQVBBR0VfQkxLTk8JKDApCisjZGVmaW5lIFNUSVJfSEVB RF9CTEtOTwkJKDEpIC8qIGZpcnN0IGRhdGEgcGFnZSAqLworCisKKy8qIE9wYXF1ZSBmb3Igc3Rp ciBwYWdlcyAqLwordHlwZWRlZiBzdHJ1Y3QgU3RpclBhZ2VPcGFxdWVEYXRhCit7CisJT2Zmc2V0 TnVtYmVyIG1heG9mZjsJCS8qIG51bWJlciBvZiBpbmRleCB0dXBsZXMgb24gcGFnZSAqLworCXVp bnQxNgkJZmxhZ3M7CQkJLyogc2VlIGJpdCBkZWZpbml0aW9ucyBiZWxvdyAqLworCXVpbnQxNgkJ dW51c2VkOwkJCS8qIHBsYWNlaG9sZGVyIHRvIGZvcmNlIG1heGFsaWduaW5nIG9mIHNpemUgb2YK KwkJCQkJCQkJICogU3RpclBhZ2VPcGFxdWVEYXRhIGFuZCB0byBwbGFjZQorCQkJCQkJCQkgKiBz dGlyX3BhZ2VfaWQgZXhhY3RseSBhdCB0aGUgZW5kIG9mIHBhZ2UgKi8KKwl1aW50MTYJCXN0aXJf cGFnZV9pZDsJLyogZm9yIGlkZW50aWZpY2F0aW9uIG9mIFNUSVIgaW5kZXhlcyAqLworfSBTdGly UGFnZU9wYXF1ZURhdGE7CisKKy8qIFN0aXIgcGFnZSBmbGFncyAqLworI2RlZmluZSBTVElSX01F VEEJCSgxPDwwKQorCit0eXBlZGVmIFN0aXJQYWdlT3BhcXVlRGF0YSAqU3RpclBhZ2VPcGFxdWU7 CisKKyNkZWZpbmUgU1RJUl9QQUdFX0lECQkweEZGODQKKworLyogTWV0YWRhdGEgb2Ygc3RpciBp bmRleCAqLwordHlwZWRlZiBzdHJ1Y3QgU3Rpck1ldGFQYWdlRGF0YQoreworCXVpbnQzMgkJbWFn aWNrTnVtYmVyOworCXVpbnQxNgkJbGFzdEJsa05vOworCWJvb2wJCXNraXBJbnNlcnRzOworfSBT dGlyTWV0YVBhZ2VEYXRhOworCisvKiBNYWdpYyBudW1iZXIgdG8gZGlzdGluZ3Vpc2ggc3RpciBw YWdlcyBmcm9tIG90aGVycyAqLworI2RlZmluZSBTVElSX01BR0lDS19OVU1CRVIgKDB4REJBQzBE RUYpCisKKyNkZWZpbmUgU3RpclBhZ2VHZXRNZXRhKHBhZ2UpCSgoU3Rpck1ldGFQYWdlRGF0YSAq KSBQYWdlR2V0Q29udGVudHMocGFnZSkpCisKK3R5cGVkZWYgc3RydWN0IFN0aXJUdXBsZQorewor CUl0ZW1Qb2ludGVyRGF0YSBoZWFwUHRyOworfSBTdGlyVHVwbGU7CisKKyNkZWZpbmUgU3RpclBh Z2VHZXRGcmVlU3BhY2Uoc3RhdGUsIHBhZ2UpIFwKKwkoQkxDS1NaIC0gTUFYQUxJR04oU2l6ZU9m UGFnZUhlYWRlckRhdGEpIFwKKwkJLSBTdGlyUGFnZUdldE1heE9mZnNldChwYWdlKSAqIChzaXpl b2YoU3RpclR1cGxlKSkgXAorCQktIE1BWEFMSUdOKHNpemVvZihTdGlyUGFnZU9wYXF1ZURhdGEp KSkKKworZXh0ZXJuIHZvaWQgU3RpckZpbGxNZXRhcGFnZShSZWxhdGlvbiBpbmRleCwgUGFnZSBt ZXRhUGFnZSwgYm9vbCBza2lwSW5zZXJ0cyk7CitleHRlcm4gdm9pZCBTdGlySW5pdE1ldGFwYWdl KFJlbGF0aW9uIGluZGV4LCBGb3JrTnVtYmVyIGZvcmtudW0pOworZXh0ZXJuIHZvaWQgU3Rpcklu aXRQYWdlKFBhZ2UgcGFnZSwgdWludDE2IGZsYWdzKTsKK2V4dGVybiB2b2lkIFN0aXJNYXJrQXNT a2lwSW5zZXJ0cyhSZWxhdGlvbiBpbmRleCk7CisKKy8qIGluZGV4IGFjY2VzcyBtZXRob2QgaW50 ZXJmYWNlIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGJvb2wgc3RpcnZhbGlkYXRlKE9pZCBvcGNsYXNz b2lkKTsKK2V4dGVybiBib29sIHN0aXJpbnNlcnQoUmVsYXRpb24gaW5kZXgsIERhdHVtICp2YWx1 ZXMsIGJvb2wgKmlzbnVsbCwKKwkJCQkJIEl0ZW1Qb2ludGVyIGh0X2N0aWQsIFJlbGF0aW9uIGhl YXBSZWwsCisJCQkJCSBJbmRleFVuaXF1ZUNoZWNrIGNoZWNrVW5pcXVlLAorCQkJCQkgYm9vbCBp bmRleFVuY2hhbmdlZCwKKwkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7CitleHRl cm4gSW5kZXhTY2FuRGVzYyBzdGlyYmVnaW5zY2FuKFJlbGF0aW9uIHIsIGludCBua2V5cywgaW50 IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlycmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAorCQkJCQkgU2NhbktleSBvcmRlcmJ5cywg aW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBzdGlyZW5kc2NhbihJbmRleFNjYW5EZXNjIHNj YW4pOworZXh0ZXJuIEluZGV4QnVpbGRSZXN1bHQgKnN0aXJidWlsZChSZWxhdGlvbiBoZWFwLCBS ZWxhdGlvbiBpbmRleCwKKwkJCQkJCQkJIHN0cnVjdCBJbmRleEluZm8gKmluZGV4SW5mbyk7Citl eHRlcm4gdm9pZCBzdGlyYnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCk7CitleHRlcm4gSW5kZXhC dWxrRGVsZXRlUmVzdWx0ICpzdGlyYnVsa2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCisJ CQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlUmVzdWx0ICpzdGF0cywgSW5kZXhCdWxrRGVsZXRl Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJCQkJICAgdm9pZCAqY2FsbGJhY2tfc3RhdGUpOwor ZXh0ZXJuIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RpcnZhY3V1bWNsZWFudXAoSW5kZXhWYWN1 dW1JbmZvICppbmZvLAorCQkJCQkJCQkJCQkgIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMp OworZXh0ZXJuIGJ5dGVhICpzdGlyb3B0aW9ucyhEYXR1bSByZWxvcHRpb25zLCBib29sIHZhbGlk YXRlKTsKKworI2VuZGlmCkluZGV4OiBzcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZh cmlhbnRzLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9w ZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMgYi9zcmMv YmFja2VuZC91dGlscy9zb3J0L3R1cGxlc29ydHZhcmlhbnRzLmMKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvc29ydC90dXBsZXNvcnR2YXJpYW50cy5jCShyZXZpc2lvbiAzNWYyMzMzMDBjZDE5MGIw YTE3ZTY2ZjJiNGJmZmEyNDgxZTYyYWY5KQorKysgYi9zcmMvYmFja2VuZC91dGlscy9zb3J0L3R1 cGxlc29ydHZhcmlhbnRzLmMJKHJldmlzaW9uIGJjMWZlMDVmMzhmYmRkYTA0OTA3NWI5YjFkYzIz OGJmMGQ5YzI0MGUpCkBAIC0xMjMsNiArMTIzLDcgQEAKIAogCWJvb2wJCWVuZm9yY2VVbmlxdWU7 CS8qIGNvbXBsYWluIGlmIHdlIGZpbmQgZHVwbGljYXRlIHR1cGxlcyAqLwogCWJvb2wJCXVuaXF1 ZU51bGxzTm90RGlzdGluY3Q7IC8qIHVuaXF1ZSBjb25zdHJhaW50IG51bGwgdHJlYXRtZW50ICov CisJYm9vbCAJCXVuaXF1ZURlYWRJZ25vcmVkOwogfSBUdXBsZXNvcnRJbmRleEJUcmVlQXJnOwog CiAvKgpAQCAtMzQ5LDYgKzM1MCw3IEBACiAJCQkJCQkJUmVsYXRpb24gaW5kZXhSZWwsCiAJCQkJ CQkJYm9vbCBlbmZvcmNlVW5pcXVlLAogCQkJCQkJCWJvb2wgdW5pcXVlTnVsbHNOb3REaXN0aW5j dCwKKwkJCQkJCQlib29sIHVuaXF1ZURlYWRJZ25vcmVkLAogCQkJCQkJCWludCB3b3JrTWVtLAog CQkJCQkJCVNvcnRDb29yZGluYXRlIGNvb3JkaW5hdGUsCiAJCQkJCQkJaW50IHNvcnRvcHQpCkBA IC0zOTEsNiArMzkzLDcgQEAKIAlhcmctPmluZGV4LmluZGV4UmVsID0gaW5kZXhSZWw7CiAJYXJn LT5lbmZvcmNlVW5pcXVlID0gZW5mb3JjZVVuaXF1ZTsKIAlhcmctPnVuaXF1ZU51bGxzTm90RGlz dGluY3QgPSB1bmlxdWVOdWxsc05vdERpc3RpbmN0OworCWFyZy0+dW5pcXVlRGVhZElnbm9yZWQg PSB1bmlxdWVEZWFkSWdub3JlZDsKIAogCWluZGV4U2NhbktleSA9IF9idF9ta3NjYW5rZXkoaW5k ZXhSZWwsIE5VTEwpOwogCkBAIC01MTQsNiArNTE3LDcgQEAKIAlhcmctPmluZGV4LmluZGV4UmVs ID0gaW5kZXhSZWw7CiAJYXJnLT5lbmZvcmNlVW5pcXVlID0gZmFsc2U7CiAJYXJnLT51bmlxdWVO dWxsc05vdERpc3RpbmN0ID0gZmFsc2U7CisJYXJnLT51bmlxdWVEZWFkSWdub3JlZCA9IGZhbHNl OwogCiAJLyogUHJlcGFyZSBTb3J0U3VwcG9ydCBkYXRhIGZvciBlYWNoIGNvbHVtbiAqLwogCWJh c2UtPnNvcnRLZXlzID0gKFNvcnRTdXBwb3J0KSBwYWxsb2MwKGJhc2UtPm5LZXlzICoKQEAgLTE1 MjAsNiArMTUyNCw3IEBACiAJCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCQlib29s CQlpc251bGxbSU5ERVhfTUFYX0tFWVNdOwogCQljaGFyCSAgICprZXlfZGVzYzsKKwkJYm9vbAkJ dW5pcXVlQ2hlY2tGYWlsID0gdHJ1ZTsKIAogCQkvKgogCQkgKiBTb21lIHJhdGhlciBicmFpbi1k ZWFkIGltcGxlbWVudGF0aW9ucyBvZiBxc29ydCAoc3VjaCBhcyB0aGUgb25lIGluCkBAIC0xNTI5 LDE4ICsxNTM0LDU2IEBACiAJCSAqLwogCQlBc3NlcnQodHVwbGUxICE9IHR1cGxlMik7CiAKLQkJ aW5kZXhfZGVmb3JtX3R1cGxlKHR1cGxlMSwgdHVwRGVzLCB2YWx1ZXMsIGlzbnVsbCk7CisJCS8q IFRoaXMgaXMgZmFpbC1mYXN0IGNoZWNrLCBzZWUgX2J0X2xvYWQgZm9yIGRldGFpbHMuICovCisJ CWlmIChhcmctPnVuaXF1ZURlYWRJZ25vcmVkKQorCQl7CisJCQlib29sICAgIAkJCWFueV90dXBs ZV9kZWFkLAorCQkJCQkJCQljYWxsX2FnYWluID0gZmFsc2UsCisJCQkJCQkJCWlnbm9yZWQ7CisK KwkJCVR1cGxlVGFibGVTbG90IAkJKnNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QoUmVs YXRpb25HZXREZXNjcihhcmctPmluZGV4LmhlYXBSZWwpLAorCQkJCQkJCQkJCQkJCQkJCSAgICZU VFNPcHNCdWZmZXJIZWFwVHVwbGUpOworCQkJSXRlbVBvaW50ZXJEYXRhIHRpZCA9IHR1cGxlMS0+ dF90aWQ7CisKKwkJCUluZGV4RmV0Y2hUYWJsZURhdGEgKmZldGNoID0gdGFibGVfaW5kZXhfZmV0 Y2hfYmVnaW4oYXJnLT5pbmRleC5oZWFwUmVsKTsKKwkJCWFueV90dXBsZV9kZWFkID0gIXRhYmxl X2luZGV4X2ZldGNoX3R1cGxlKGZldGNoLCAmdGlkLCBTbmFwc2hvdFNlbGYsIHNsb3QsICZjYWxs X2FnYWluLCAmaWdub3JlZCk7CisKKwkJCWlmICghYW55X3R1cGxlX2RlYWQpCisJCQl7CisJCQkJ Y2FsbF9hZ2FpbiA9IGZhbHNlOworCQkJCXRpZCA9IHR1cGxlMi0+dF90aWQ7CisJCQkJYW55X3R1 cGxlX2RlYWQgPSAhdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoZmV0Y2gsICZ0dXBsZTItPnRfdGlk LCBTbmFwc2hvdFNlbGYsIHNsb3QsICZjYWxsX2FnYWluLAorCQkJCQkJCQkJCQkJCQkgICZpZ25v cmVkKTsKKwkJCX0KKworCQkJaWYgKGFueV90dXBsZV9kZWFkKQorCQkJeworCQkJCWVsb2coREVC VUc1LCAic2tpcHBpbmcgZHVwbGljYXRlIHZhbHVlcyBiZWNhdXNlIHNvbWUgb2YgdGhlbSBhcmUg ZGVhZDogKCV1LCV1KSB2cyAoJXUsJXUpIiwKKwkJCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIoJnR1cGxlMS0+dF90aWQpLAorCQkJCQkgSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJnR1 cGxlMS0+dF90aWQpLAorCQkJCQkgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmdHVwbGUyLT50 X3RpZCksCisJCQkJCSBJdGVtUG9pbnRlckdldE9mZnNldE51bWJlcigmdHVwbGUyLT50X3RpZCkp OworCisJCQkJdW5pcXVlQ2hlY2tGYWlsID0gZmFsc2U7CisJCQl9CisJCQlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KHNsb3QpOworCQkJdGFibGVfaW5kZXhfZmV0Y2hfZW5kKGZldGNoKTsK KwkJfQorCQlpZiAodW5pcXVlQ2hlY2tGYWlsKQorCQl7CisJCQlpbmRleF9kZWZvcm1fdHVwbGUo dHVwbGUxLCB0dXBEZXMsIHZhbHVlcywgaXNudWxsKTsKIAotCQlrZXlfZGVzYyA9IEJ1aWxkSW5k ZXhWYWx1ZURlc2NyaXB0aW9uKGFyZy0+aW5kZXguaW5kZXhSZWwsIHZhbHVlcywgaXNudWxsKTsK KwkJCWtleV9kZXNjID0gQnVpbGRJbmRleFZhbHVlRGVzY3JpcHRpb24oYXJnLT5pbmRleC5pbmRl eFJlbCwgdmFsdWVzLCBpc251bGwpOwogCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycmNvZGUo RVJSQ09ERV9VTklRVUVfVklPTEFUSU9OKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgY3JlYXRl IHVuaXF1ZSBpbmRleCBcIiVzXCIiLAotCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoYXJn LT5pbmRleC5pbmRleFJlbCkpLAotCQkJCSBrZXlfZGVzYyA/IGVycmRldGFpbCgiS2V5ICVzIGlz IGR1cGxpY2F0ZWQuIiwga2V5X2Rlc2MpIDoKLQkJCQkgZXJyZGV0YWlsKCJEdXBsaWNhdGUga2V5 cyBleGlzdC4iKSwKLQkJCQkgZXJydGFibGVjb25zdHJhaW50KGFyZy0+aW5kZXguaGVhcFJlbCwK LQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGFyZy0+aW5kZXguaW5kZXhSZWwpKSkp OworCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9VTklRVUVfVklPTEFU SU9OKSwKKwkJCQkJCQllcnJtc2coImNvdWxkIG5vdCBjcmVhdGUgdW5pcXVlIGluZGV4IFwiJXNc IiIsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGFyZy0+aW5kZXguaW5kZXhS ZWwpKSwKKwkJCQkJCQlrZXlfZGVzYyA/IGVycmRldGFpbCgiS2V5ICVzIGlzIGR1cGxpY2F0ZWQu Iiwga2V5X2Rlc2MpIDoKKwkJCQkJCQllcnJkZXRhaWwoIkR1cGxpY2F0ZSBrZXlzIGV4aXN0LiIp LAorCQkJCQkJCWVycnRhYmxlY29uc3RyYWludChhcmctPmluZGV4LmhlYXBSZWwsCisJCQkJCQkJ CQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGFyZy0+aW5kZXguaW5kZXhSZWwpKSkpOwor CQl9CiAJfQogCiAJLyoKSW5kZXg6IHNyYy9iaW4vcGdfYW1jaGVjay90LzAwN19jb25jdXJyZW50 bHlfdW5pcXVlLnBsCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxp ai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpk aWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19hbWNoZWNrL3QvMDA3X2NvbmN1cnJlbnRseV91bmlxdWUu cGwgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDdfY29uY3VycmVudGx5X3VuaXF1ZS5wbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCShyZXZpc2lvbiBlYTFmY2FjYzdjZWFkM2Uy ZmNjZjU4MWQyMGU1MTI0NGE3MTA3NDM1KQorKysgYi9zcmMvYmluL3BnX2FtY2hlY2svdC8wMDdf Y29uY3VycmVudGx5X3VuaXF1ZS5wbAkocmV2aXNpb24gZWExZmNhY2M3Y2VhZDNlMmZjY2Y1ODFk MjBlNTEyNDRhNzEwNzQzNSkKQEAgLTAsMCArMSwyMzUgQEAKKworIyBDb3B5cmlnaHQgKGMpIDIw MjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBSRUlOREVY IENPTkNVUlJFTlRMWSB3aXRoIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBhbmQgSE9UIHVwZGF0 ZXMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBDb25maWc7Cit1c2UgRXJybm87 CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwordXNlIFRpbWU6OkhpUmVzIHF3KHVzbGVlcCk7Cit1c2UgSVBDOjpTeXNWOwordXNl IHRocmVhZHM7Cit1c2UgVGVzdDo6TW9yZTsKK3VzZSBUZXN0OjpCdWlsZGVyOworCitpZiAoJEAg fHwgJHdpbmRvd3Nfb3MpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnRm9yayBhbmQgc2hhcmVkIG1l bW9yeSBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBsYXRmb3JtJzsKK30KKworIyBUT0RPOiBy ZWZhY3RvciB0byBodHRwczovL21ldGFjcGFuLm9yZy9wb2QvSVBDJTNBJTNBU2hhcmVhYmxlCitt eSAoJHBpZCwgJHNobWVtX2lkLCAkc2htZW1fa2V5LCAgJHNobWVtX3NpemUpOworZXZhbCAnc3Vi IElQQ19DUkVBVCB7MDAwMTAwMH0nIHVubGVzcyBkZWZpbmVkICZJUENfQ1JFQVQ7Ciskc2htZW1f c2l6ZSA9IDQ7Ciskc2htZW1fa2V5ID0gcmFuZCgxMDAwMDAwKTsKKyRzaG1lbV9pZCA9IHNobWdl dCgkc2htZW1fa2V5LCAkc2htZW1fc2l6ZSwgJklQQ19DUkVBVCB8IDA3NzcpIG9yIGRpZSAiQ2Fu J3Qgc2htZ2V0OiAkISI7CitzaG13cml0ZSgkc2htZW1faWQsICJ3YWl0IiwgMCwgJHNobWVtX3Np emUpIG9yIGRpZSAiQ2FuJ3Qgc2htd3JpdGU6ICQhIjsKKworbXkgJHBzcWxfdGltZW91dCA9IElQ Qzo6UnVuOjp0aW1lcigkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCk7 CisjCisjIFRlc3Qgc2V0LXVwCisjCitteSAoJG5vZGUsICRyZXN1bHQpOworJG5vZGUgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ1JDX3Rlc3QnKTsKKyRub2RlLT5pbml0OworJG5v ZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCSdsb2NrX3RpbWVvdXQgPSAnIC4g KDEwMDAgKiAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRpbWVvdXRfZGVmYXVsdCkpOworJG5v ZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnZnN5bmMgPSBvZmYnKTsKKyRub2Rl LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ2F1dG92YWN1dW0gPSBvZmYnKTsKKyRu b2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21haW50ZW5hbmNlX3dvcmtfbWVt ID0gMTI4TUInKTsKKyRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ3NoYXJl ZF9idWZmZXJzID0gMjU2TUInKTsKKyRub2RlLT5zdGFydDsKKyRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcShDUkVBVEUgRVhURU5TSU9OIGFtY2hlY2spKTsKKyRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcShDUkVBVEUgVU5MT0dHRUQgVEFCTEUgdGJsKGkgaW50IHByaW1hcnkga2V5 LAorCQkJCQkJCQljMSBtb25leSBkZWZhdWx0IDAsIGMyIG1vbmV5IGRlZmF1bHQgMCwKKwkJCQkJ CQkJYzMgbW9uZXkgZGVmYXVsdCAwLCB1cGRhdGVkX2F0IHRpbWVzdGFtcCkpKTsKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcShDUkVBVEUgSU5ERVggaWR4IE9OIHRibChpLCB1cGRhdGVk X2F0KSkpOworCitteSAkYnVpbGRlciA9IFRlc3Q6Ok1vcmUtPmJ1aWxkZXI7CiskYnVpbGRlci0+ dXNlX251bWJlcnMoMCk7CiskYnVpbGRlci0+bm9fcGxhbigpOworCitteSAkY2hpbGQgID0gJGJ1 aWxkZXItPmNoaWxkKCJwZ19iZW5jaCIpOworCitpZighZGVmaW5lZCgkcGlkID0gZm9yaygpKSkg eworCSMgZm9yayByZXR1cm5lZCB1bmRlZiwgc28gdW5zdWNjZXNzZnVsCisJZGllICJDYW5ub3Qg Zm9yayBhIGNoaWxkOiAkISI7Cit9IGVsc2lmICgkcGlkID09IDApIHsKKworCSMgJG5vZGUtPnBz cWwoJ3Bvc3RncmVzJywgcShJTlNFUlQgSU5UTyB0YmwgU0VMRUNUIGksMCwwLDAsbm93KCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgcyhpKTspKTsKKwkjIHdoaWxlIFsgJD8gLWVxIDAg XTsgZG8gbWFrZSAtQyBzcmMvYmluL3BnX2FtY2hlY2svIGNoZWNrIFBST1ZFX1RFU1RTPSd0LzAw N18qJyA7IGRvbmUKKworCSRub2RlLT5wZ2JlbmNoKAorCQknLS1uby12YWN1dW0gLS1jbGllbnQ9 NDAgLS1leGl0LW9uLWFib3J0IC0tdHJhbnNhY3Rpb25zPTEwMDAwJywKKwkJMCwKKwkJW3Fye2Fj dHVhbGx5IHByb2Nlc3NlZH1dLAorCQlbcXJ7XiR9XSwKKwkJJ2NvbmN1cnJlbnQgSU5TRVJUcywg VVBEQVRFUyBhbmQgUkMnLAorCQl7CisJCQkjIEVuc3VyZSBzb21lIEhPVCB1cGRhdGVzIGhhcHBl bgorCQkJJzAwMV9wZ2JlbmNoX2NvbmN1cnJlbnRfdHJhbnNhY3Rpb25fdXBkYXRlcycgPT4gcSgK KwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEwMDAsMCwwLDAsbm93KCkpIG9u IGNvbmZsaWN0KGkpIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZF9hdCA9IGRhdGVfdHJ1bmMoJ3NlY29u ZHMnLCBub3coKSk7CisJCQkpLAorCQkJJzAwMl9wZ2JlbmNoX2NvbmN1cnJlbnRfdHJhbnNhY3Rp b25fdXBkYXRlcycgPT4gcSgKKwkJCQlJTlNFUlQgSU5UTyB0YmwgVkFMVUVTKHJhbmRvbSgpKjEw MCwwLDAsMCxub3coKSkgb24gY29uZmxpY3QoaSkgIGRvIHVwZGF0ZSBzZXQgdXBkYXRlZF9hdCA9 IGRhdGVfdHJ1bmMoJ3NlY29uZHMnLCBub3coKSk7CisJCQkpLAorCQkJJzAwM19wZ2JlbmNoX2Nv bmN1cnJlbnRfdHJhbnNhY3Rpb25fdXBkYXRlcycgPT4gcSgKKwkJCQlJTlNFUlQgSU5UTyB0Ymwg VkFMVUVTKHJhbmRvbSgpKjEwMDAwLDAsMCwwLG5vdygpKSBvbiBjb25mbGljdChpKSAgZG8gdXBk YXRlIHNldCB1cGRhdGVkX2F0ID0gZGF0ZV90cnVuYygnc2Vjb25kcycsIG5vdygpKTsKKwkJCSks CisJCQknMDA0X3BnYmVuY2hfY29uY3VycmVudF90cmFuc2FjdGlvbl91cGRhdGVzJyA9PiBxKAor CQkJCUlOU0VSVCBJTlRPIHRibCBWQUxVRVMocmFuZG9tKCkqMTAwMDAwLDAsMCwwLG5vdygpKSBv biBjb25mbGljdChpKSAgZG8gdXBkYXRlIHNldCB1cGRhdGVkX2F0ID0gZGF0ZV90cnVuYygnc2Vj b25kcycsIG5vdygpKTsKKwkJCSksCisJCX0pOworCisJaWYgKCRjaGlsZC0+aXNfcGFzc2luZygp KSB7CisJCXNobXdyaXRlKCRzaG1lbV9pZCwgImRvbmUiLCAwLCAkc2htZW1fc2l6ZSkgb3IgZGll ICJDYW4ndCBzaG13cml0ZTogJCEiOworCX0gZWxzZSB7CisJCXNobXdyaXRlKCRzaG1lbV9pZCwg ImZhaWwiLCAwLCAkc2htZW1fc2l6ZSkgb3IgZGllICJDYW4ndCBzaG13cml0ZTogJCEiOworCX0K KworCW15ICRwZ19iZW5jaF9mb3JrX2ZsYWc7CisJd2hpbGUgKDEpIHsKKwkJc2htcmVhZCgkc2ht ZW1faWQsICRwZ19iZW5jaF9mb3JrX2ZsYWcsIDAsICRzaG1lbV9zaXplKSBvciBkaWUgIkNhbid0 IHNobXJlYWQ6ICQhIjsKKwkJc2xlZXAoMC4xKTsKKwkJbGFzdCBpZiAkcGdfYmVuY2hfZm9ya19m bGFnIGVxICJzdG9wIjsKKwl9Cit9IGVsc2UgeworCW15ICRwZ19iZW5jaF9mb3JrX2ZsYWc7CisJ c2htcmVhZCgkc2htZW1faWQsICRwZ19iZW5jaF9mb3JrX2ZsYWcsIDAsICRzaG1lbV9zaXplKSBv ciBkaWUgIkNhbid0IHNobXJlYWQ6ICQhIjsKKworCXN1YnRlc3QgJ3JlaW5kZXggcnVuIHN1YnRl c3QnID0+IHN1YiB7CisJCWlzKCRwZ19iZW5jaF9mb3JrX2ZsYWcsICJ3YWl0IiwgInBnX2JlbmNo X2ZvcmtfZmxhZyBpcyBjb3JyZWN0Iik7CisKKwkJbXkgJXBzcWwgPSAoc3RkaW4gPT4gJycsIHN0 ZG91dCA9PiAnJywgc3RkZXJyID0+ICcnKTsKKwkJJHBzcWx7cnVufSA9IElQQzo6UnVuOjpzdGFy dCgKKwkJCVsgJ3BzcWwnLCAnLVhBJywgJy1mJywgJy0nLCAnLWQnLCAkbm9kZS0+Y29ubnN0cign cG9zdGdyZXMnKSBdLAorCQkJJzwnLAorCQkJXCRwc3Fse3N0ZGlufSwKKwkJCSc+JywKKwkJCVwk cHNxbHtzdGRvdXR9LAorCQkJJzI+JywKKwkJCVwkcHNxbHtzdGRlcnJ9LAorCQkJJHBzcWxfdGlt ZW91dCk7CisKKwkJbXkgKCRyZXN1bHQsICRzdGRvdXQsICRzdGRlcnIsICRuLCAkc3RkZXJyX3Nh dmVkKTsKKworIwkJb2soc2VuZF9xdWVyeV9hbmRfd2FpdChcJXBzcWwsIHFbU0VMRUNUIHBnX3Ns ZWVwKDEwKTtdLCBxci9eLiokL20pLCAnU0VMRUNUJyk7CisKKwkJd2hpbGUgKDEpCisJCXsKKwor CQkJaWYgKGludChyYW5kKDIpKSA9PSAwKSB7CisJCQkJKCRyZXN1bHQsICRzdGRvdXQsICRzdGRl cnIpID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcShBTFRFUiBUQUJMRSB0YmwgU0VUIChwYXJh bGxlbF93b3JrZXJzPTQpOykpOworCQkJfSBlbHNlIHsKKwkJCQkoJHJlc3VsdCwgJHN0ZG91dCwg JHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBxKEFMVEVSIFRBQkxFIHRibCBTRVQg KHBhcmFsbGVsX3dvcmtlcnM9MCk7KSk7CisJCQl9CisJCQlpcygkcmVzdWx0LCAnMCcsICdBTFRF UiBUQUJMRSBpcyBjb3JyZWN0Jyk7CisKKworCQkJaWYgKDEpCisJCQl7CisJCQkJbXkgJHNxbCA9 IHEoc2VsZWN0IHBnX3NsZWVwKDApOyBDUkVBVEUgVU5JUVVFIElOREVYIENPTkNVUlJFTlRMWSBp ZHhfMiBPTiB0YmwoaSk7KTsKKworCQkJCSgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRu b2RlLT5wc3FsKCdwb3N0Z3JlcycsICRzcWwpOworCQkJCWlzKCRyZXN1bHQsICcwJywgJ0NSRUFU RSBJTkRFWCBpcyBjb3JyZWN0Jyk7CisJCQkJJHN0ZGVycl9zYXZlZCA9ICRzdGRlcnI7CisKKwkJ CQkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdyZXMnLCBx KFNFTEVDVCBidF9pbmRleF9wYXJlbnRfY2hlY2soJ2lkeF8yJywgaGVhcGFsbGluZGV4ZWQgPT4g dHJ1ZSwgcm9vdGRlc2NlbmQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1ZSk7KSk7CisJCQkJ aXMoJHJlc3VsdCwgJzAnLCAnYnRfaW5kZXhfY2hlY2sgZm9yIG5ldyBpbmRleCBpcyBjb3JyZWN0 Jyk7CisJCQkJaWYgKCRyZXN1bHQpCisJCQkJeworCQkJCQlkaWFnKCRzdGRlcnIpOworCQkJCQlk aWFnKCRzdGRlcnJfc2F2ZWQpOworCQkJCQlCQUlMX09VVCgkc3RkZXJyKTsKKwkJCQl9IGVsc2Ug eworCQkJCQlkaWFnKCdjcmVhdGU6KScgLiAkbisrKTsKKwkJCQl9CisKKwkJCQlpZiAoMSkKKwkJ CQl7CisJCQkJCSgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0 Z3JlcycsIHEoUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgaWR4XzI7KSk7CisJCQkJCWlzKCRy ZXN1bHQsICcwJywgJ1JFSU5ERVggMiBpcyBjb3JyZWN0Jyk7CisJCQkJCWlmICgkcmVzdWx0KSB7 CisJCQkJCQlkaWFnKCRzdGRlcnIpOworCQkJCQkJQkFJTF9PVVQoJHN0ZGVycik7CisJCQkJCX0K KworCQkJCQkoJHJlc3VsdCwgJHN0ZG91dCwgJHN0ZGVycikgPSAkbm9kZS0+cHNxbCgncG9zdGdy ZXMnLCBxKFNFTEVDVCBidF9pbmRleF9wYXJlbnRfY2hlY2soJ2lkeF8yJywgaGVhcGFsbGluZGV4 ZWQgPT4gdHJ1ZSwgcm9vdGRlc2NlbmQgPT4gdHJ1ZSwgY2hlY2t1bmlxdWUgPT4gdHJ1ZSk7KSk7 CisJCQkJCWlzKCRyZXN1bHQsICcwJywgJ2J0X2luZGV4X2NoZWNrIDIgaXMgY29ycmVjdCcpOwor CQkJCQlpZiAoJHJlc3VsdCkKKwkJCQkJeworCQkJCQkJZGlhZygkc3RkZXJyKTsKKwkJCQkJCUJB SUxfT1VUKCRzdGRlcnIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZGlhZygncmVpbmRleDI6KScg LiAkbisrKTsKKwkJCQkJfQorCQkJCX0KKworCQkJCSgkcmVzdWx0LCAkc3Rkb3V0LCAkc3RkZXJy KSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsIHEoRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgaWR4 XzI7KSk7CisJCQkJaXMoJHJlc3VsdCwgJzAnLCAnRFJPUCBJTkRFWCBpcyBjb3JyZWN0Jyk7CisJ CQl9CisJCQlzaG1yZWFkKCRzaG1lbV9pZCwgJHBnX2JlbmNoX2ZvcmtfZmxhZywgMCwgJHNobWVt X3NpemUpIG9yIGRpZSAiQ2FuJ3Qgc2htcmVhZDogJCEiOworCQkJbGFzdCBpZiAkcGdfYmVuY2hf Zm9ya19mbGFnIG5lICJ3YWl0IjsKKwkJfQorCisJCSMgZXhwbGljaXRseSBzaHV0IGRvd24gcHNx bCBpbnN0YW5jZXMgZ3JhY2VmdWxseQorICAgICAgICAkcHNxbHtzdGRpbn0gLj0gIlxccVxuIjsK KyAgICAgICAgJHBzcWx7cnVufS0+ZmluaXNoOworCisJCWlzKCRwZ19iZW5jaF9mb3JrX2ZsYWcs ICJkb25lIiwgInBnX2JlbmNoX2ZvcmtfZmxhZyBpcyBjb3JyZWN0Iik7CisJfTsKKworCSRjaGls ZC0+ZmluYWxpemUoKTsKKwkkY2hpbGQtPnN1bW1hcnkoKTsKKwkkbm9kZS0+c3RvcDsKKwlkb25l X3Rlc3RpbmcoKTsKKworCXNobXdyaXRlKCRzaG1lbV9pZCwgInN0b3AiLCAwLCAkc2htZW1fc2l6 ZSkgb3IgZGllICJDYW4ndCBzaG13cml0ZTogJCEiOworfQorCisjIFNlbmQgcXVlcnksIHdhaXQg dW50aWwgc3RyaW5nIG1hdGNoZXMKK3N1YiBzZW5kX3F1ZXJ5X2FuZF93YWl0Cit7CisJbXkgKCRw c3FsLCAkcXVlcnksICR1bnRsKSA9IEBfOworCW15ICRyZXQ7CisKKwkjIEZvciBlYWNoIHF1ZXJ5 IHdlIHJ1biwgd2UnbGwgcmVzdGFydCB0aGUgdGltZW91dC4gIE90aGVyd2lzZSB0aGUgdGltZW91 dAorCSMgd291bGQgYXBwbHkgdG8gdGhlIHdob2xlIHRlc3Qgc2NyaXB0LCBhbmQgd291bGQgbmVl ZCB0byBiZSBzZXQgdmVyeSBoaWdoCisJIyB0byBzdXJ2aXZlIHdoZW4gcnVubmluZyB1bmRlciBW YWxncmluZC4KKwkkcHNxbF90aW1lb3V0LT5yZXNldCgpOworCSRwc3FsX3RpbWVvdXQtPnN0YXJ0 KCk7CisKKwkjIHNlbmQgcXVlcnkKKwkkJHBzcWx7c3RkaW59IC49ICRxdWVyeTsKKwkkJHBzcWx7 c3RkaW59IC49ICJcbiI7CisKKwkjIHdhaXQgZm9yIHF1ZXJ5IHJlc3VsdHMKKwkkJHBzcWx7cnVu fS0+cHVtcF9uYigpOworCXdoaWxlICgxKQorCXsKKwkJbGFzdCBpZiAkJHBzcWx7c3Rkb3V0fSA9 fiAvJHVudGwvOworCQlpZiAoJHBzcWxfdGltZW91dC0+aXNfZXhwaXJlZCkKKwkJeworCQkJZGlh ZygiYWJvcnRpbmcgd2FpdDogcHJvZ3JhbSB0aW1lZCBvdXRcbiIKKwkJCQkgIC4gInN0cmVhbSBj b250ZW50czogPj4kJHBzcWx7c3Rkb3V0fTw8XG4iCisJCQkJICAuICJwYXR0ZXJuIHNlYXJjaGVk IGZvcjogJHVudGxcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG5vdCAkJHBzcWx7cnVu fS0+cHVtcGFibGUoKSkKKwkJeworCQkJZGlhZygiYWJvcnRpbmcgd2FpdDogcHJvZ3JhbSBkaWVk XG4iCisJCQkJICAuICJzdHJlYW0gY29udGVudHM6ID4+JCRwc3Fse3N0ZG91dH08PFxuIgorCQkJ CSAgLiAicGF0dGVybiBzZWFyY2hlZCBmb3I6ICR1bnRsXG4iKTsKKwkJCXJldHVybiAwOworCQl9 CisJCSQkcHNxbHtydW59LT5wdW1wKCk7CisJfQorCisJJCRwc3Fse3N0ZG91dH0gPSAnJzsKKwor CXJldHVybiAxOworfQpJbmRleDogc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaApJREVBIGFk ZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwu cGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy90cmFuc2FtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNhbS5oCi0tLSBh L3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmgJKHJldmlzaW9uIDM1ZjIzMzMwMGNkMTkwYjBh MTdlNjZmMmI0YmZmYTI0ODFlNjJhZjkpCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2Ft LmgJKHJldmlzaW9uIDNhMGZhNjVlMzI4ZDUxYjZjOTdiNDRhNzI3NzhiNmVlMjFmZTQ0NzgpCkBA IC0zNDQsNiArMzQ0LDIxIEBACiAJcmV0dXJuIGI7CiB9CiAKKy8qIHJldHVybiB0aGUgbmV3ZXIg b2YgdGhlIHR3byBJRHMgKi8KK3N0YXRpYyBpbmxpbmUgVHJhbnNhY3Rpb25JZAorVHJhbnNhY3Rp b25JZE5ld2VyKFRyYW5zYWN0aW9uSWQgYSwgVHJhbnNhY3Rpb25JZCBiKQoreworCWlmICghVHJh bnNhY3Rpb25JZElzVmFsaWQoYSkpCisJCXJldHVybiBiOworCisJaWYgKCFUcmFuc2FjdGlvbklk SXNWYWxpZChiKSkKKwkJcmV0dXJuIGE7CisKKwlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3MoYSwg YikpCisJCXJldHVybiBhOworCXJldHVybiBiOworfQorCiAvKiByZXR1cm4gdGhlIG9sZGVyIG9m IHRoZSB0d28gSURzLCBhc3N1bWluZyB0aGV5J3JlIGJvdGggbm9ybWFsICovCiBzdGF0aWMgaW5s aW5lIFRyYW5zYWN0aW9uSWQKIE5vcm1hbFRyYW5zYWN0aW9uSWRPbGRlcihUcmFuc2FjdGlvbklk IGEsIFRyYW5zYWN0aW9uSWQgYikKSW5kZXg6IHNyYy9pbmNsdWRlL3V0aWxzL3R1cGxlc29ydC5o CklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRp ZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvdXRpbHMvdHVwbGVzb3J0LmggYi9zcmMvaW5jbHVkZS91dGlscy90dXBsZXNv cnQuaAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy90dXBsZXNvcnQuaAkocmV2aXNpb24gMzVmMjMz MzAwY2QxOTBiMGExN2U2NmYyYjRiZmZhMjQ4MWU2MmFmOSkKKysrIGIvc3JjL2luY2x1ZGUvdXRp bHMvdHVwbGVzb3J0LmgJKHJldmlzaW9uIDNhMGZhNjVlMzI4ZDUxYjZjOTdiNDRhNzI3NzhiNmVl MjFmZTQ0NzgpCkBAIC00MjgsNiArNDI4LDcgQEAKIAkJCQkJCQkJCQkJCSAgIFJlbGF0aW9uIGlu ZGV4UmVsLAogCQkJCQkJCQkJCQkJICAgYm9vbCBlbmZvcmNlVW5pcXVlLAogCQkJCQkJCQkJCQkJ ICAgYm9vbCB1bmlxdWVOdWxsc05vdERpc3RpbmN0LAorCQkJCQkJCQkJCQkJICAgYm9vbCB1bmlx dWVEZWFkSWdub3JlZCwKIAkJCQkJCQkJCQkJCSAgIGludCB3b3JrTWVtLCBTb3J0Q29vcmRpbmF0 ZSBjb29yZGluYXRlLAogCQkJCQkJCQkJCQkJICAgaW50IHNvcnRvcHQpOwogZXh0ZXJuIFR1cGxl c29ydHN0YXRlICp0dXBsZXNvcnRfYmVnaW5faW5kZXhfaGFzaChSZWxhdGlvbiBoZWFwUmVsLApJ bmRleDogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCklERUEgYWRkaXRpb25h bCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5D aGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGls cy5jCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYwkocmV2aXNpb24g M2EwZmE2NWUzMjhkNTFiNmM5N2I0NGE3Mjc3OGI2ZWUyMWZlNDQ3OCkKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCShyZXZpc2lvbiBiYzFmZTA1ZjM4ZmJkZGEwNDkw NzViOWIxZGMyMzhiZjBkOWMyNDBlKQpAQCAtMTAwLDggKzEwMCw2IEBACiAJCQkJCQkJCSBTY2Fu RGlyZWN0aW9uIGRpciwgYm9vbCAqY29udGludWVzY2FuKTsKIHN0YXRpYyB2b2lkIF9idF9jaGVj a2tleXNfbG9va19haGVhZChJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0ZSAqcHN0 YXRlLAogCQkJCQkJCQkJIGludCB0dXBuYXR0cywgVHVwbGVEZXNjIHR1cGRlc2MpOwotc3RhdGlj IGludAlfYnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsCi0J CQkJCQkgICBJbmRleFR1cGxlIGZpcnN0cmlnaHQsIEJUU2Nhbkluc2VydCBpdHVwX2tleSk7CiAK IAogLyoKQEAgLTQ3NzUsNiArNDc3MywxNCBAQAogCXJldHVybiB0aWRwaXZvdDsKIH0KIAoraW50 CitfYnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsIEluZGV4 VHVwbGUgZmlyc3RyaWdodCwKKwkJCQlCVFNjYW5JbnNlcnQgaXR1cF9rZXkpIHsKKwlib29sIGln bm9yZWQ7CisJcmV0dXJuIF9idF9rZWVwX25hdHRzX3dhc251bGwocmVsLCBsYXN0bGVmdCwgZmly c3RyaWdodCwgaXR1cF9rZXksICZpZ25vcmVkKTsKK30KKworCiAvKgogICogX2J0X2tlZXBfbmF0 dHMgLSBob3cgbWFueSBrZXkgYXR0cmlidXRlcyB0byBrZWVwIHdoZW4gdHJ1bmNhdGluZy4KICAq CkBAIC00Nzg2LDkgKzQ3OTIsMTAgQEAKICAqIG51bWJlciBvZiBrZXkgYXR0cmlidXRlcyBmb3Ig dGhlIGluZGV4IHJlbGF0aW9uLiAgVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUKICAqIGNhbGxlciBt dXN0IHVzZSBhIGhlYXAgVElEIGFzIGEgdW5pcXVlLWlmaWVyIGluIG5ldyBwaXZvdCB0dXBsZS4K ICAqLwotc3RhdGljIGludAotX2J0X2tlZXBfbmF0dHMoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxl IGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCi0JCQkgICBCVFNjYW5JbnNlcnQgaXR1 cF9rZXkpCitpbnQKK19idF9rZWVwX25hdHRzX3dhc251bGwoUmVsYXRpb24gcmVsLCBJbmRleFR1 cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQsCisJCQkgICBCVFNjYW5JbnNlcnQg aXR1cF9rZXksCisJCQkgICBib29sICp3YXNudWxsKQogewogCWludAkJCW5rZXlhdHRzID0gSW5k ZXhSZWxhdGlvbkdldE51bWJlck9mS2V5QXR0cmlidXRlcyhyZWwpOwogCVR1cGxlRGVzYwlpdHVw ZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKQEAgLTQ4MTQsNiArNDgyMSw3IEBACiAKIAkJ ZGF0dW0xID0gaW5kZXhfZ2V0YXR0cihsYXN0bGVmdCwgYXR0bnVtLCBpdHVwZGVzYywgJmlzTnVs bDEpOwogCQlkYXR1bTIgPSBpbmRleF9nZXRhdHRyKGZpcnN0cmlnaHQsIGF0dG51bSwgaXR1cGRl c2MsICZpc051bGwyKTsKKwkJKCp3YXNudWxsKSB8PSAoaXNOdWxsMSB8fCBpc051bGwyKTsKIAog CQlpZiAoaXNOdWxsMSAhPSBpc051bGwyKQogCQkJYnJlYWs7CkBAIC00ODM4LDYgKzQ4NDYsMTMg QEAKIAlyZXR1cm4ga2VlcG5hdHRzOwogfQogCitpbnQKK19idF9rZWVwX25hdHRzX2Zhc3QoUmVs YXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQpCit7 CisJYm9vbCBpZ25vcmVkOworCXJldHVybiBfYnRfa2VlcF9uYXR0c19mYXN0X3dhc251bGwocmVs LCBsYXN0bGVmdCwgZmlyc3RyaWdodCwgJmlnbm9yZWQpOworfQorCiAvKgogICogX2J0X2tlZXBf bmF0dHNfZmFzdCAtIGZhc3QgYml0d2lzZSB2YXJpYW50IG9mIF9idF9rZWVwX25hdHRzLgogICoK QEAgLTQ4NjEsNyArNDg3Niw4IEBACiAgKiBtb3JlIGJhbGFuY2VkIHNwbGl0IHBvaW50LgogICov CiBpbnQKLV9idF9rZWVwX25hdHRzX2Zhc3QoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3Rs ZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQpCitfYnRfa2VlcF9uYXR0c19mYXN0X3dhc251bGwo UmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGxhc3RsZWZ0LCBJbmRleFR1cGxlIGZpcnN0cmlnaHQs CisJCQkJCQkJYm9vbCAqd2FzbnVsbCkKIHsKIAlUdXBsZURlc2MJaXR1cGRlc2MgPSBSZWxhdGlv bkdldERlc2NyKHJlbCk7CiAJaW50CQkJa2V5c3ogPSBJbmRleFJlbGF0aW9uR2V0TnVtYmVyT2ZL ZXlBdHRyaWJ1dGVzKHJlbCk7CkBAIC00ODc4LDYgKzQ4OTQsNyBAQAogCiAJCWRhdHVtMSA9IGlu ZGV4X2dldGF0dHIobGFzdGxlZnQsIGF0dG51bSwgaXR1cGRlc2MsICZpc051bGwxKTsKIAkJZGF0 dW0yID0gaW5kZXhfZ2V0YXR0cihmaXJzdHJpZ2h0LCBhdHRudW0sIGl0dXBkZXNjLCAmaXNOdWxs Mik7CisJCSp3YXNudWxsIHw9IChpc051bGwxIHwgaXNOdWxsMik7CiAJCWF0dCA9IFR1cGxlRGVz Y0F0dHIoaXR1cGRlc2MsIGF0dG51bSAtIDEpOwogCiAJCWlmIChpc051bGwxICE9IGlzTnVsbDIp CkluZGV4OiBzcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKSURFQSBhZGRpdGlvbmFsIGluZm86 ClN1YnN5c3RlbTogY29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRF UAo8Kz5VVEYtOAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0 cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL25idHJlZS5oCShyZXZpc2lvbiAzYTBmYTY1ZTMyOGQ1MWI2Yzk3YjQ0YTcyNzc4YjZlZTIx ZmU0NDc4KQorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgJKHJldmlzaW9uIGJjMWZl MDVmMzhmYmRkYTA0OTA3NWI5YjFkYzIzOGJmMGQ5YzI0MGUpCkBAIC0xMzAyLDggKzEzMDIsMTUg QEAKIGV4dGVybiBjaGFyICpidGJ1aWxkcGhhc2VuYW1lKGludDY0IHBoYXNlbnVtKTsKIGV4dGVy biBJbmRleFR1cGxlIF9idF90cnVuY2F0ZShSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxl ZnQsCiAJCQkJCQkJICAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBCVFNjYW5JbnNlcnQgaXR1cF9r ZXkpOworZXh0ZXJuIGludAlfYnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUg bGFzdGxlZnQsCisJCQkJCQkJIEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRTY2FuSW5zZXJ0IGl0 dXBfa2V5KTsKK2V4dGVybiBpbnQJX2J0X2tlZXBfbmF0dHNfd2FzbnVsbChSZWxhdGlvbiByZWws IEluZGV4VHVwbGUgbGFzdGxlZnQsCisJCQkJCQkJIEluZGV4VHVwbGUgZmlyc3RyaWdodCwgQlRT Y2FuSW5zZXJ0IGl0dXBfa2V5LAorCQkJCQkJCSBib29sICp3YXNudWxsKTsKIGV4dGVybiBpbnQJ X2J0X2tlZXBfbmF0dHNfZmFzdChSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsCiAJ CQkJCQkJCUluZGV4VHVwbGUgZmlyc3RyaWdodCk7CitleHRlcm4gaW50CV9idF9rZWVwX25hdHRz X2Zhc3Rfd2FzbnVsbChSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUgbGFzdGxlZnQsCisJCQkJCQkJ CSAgSW5kZXhUdXBsZSBmaXJzdHJpZ2h0LCBib29sICp3YXNudWxsKTsKIGV4dGVybiBib29sIF9i dF9jaGVja19uYXR0cyhSZWxhdGlvbiByZWwsIGJvb2wgaGVhcGtleXNwYWNlLCBQYWdlIHBhZ2Us CiAJCQkJCQkJT2Zmc2V0TnVtYmVyIG9mZm51bSk7CiBleHRlcm4gdm9pZCBfYnRfY2hlY2tfdGhp cmRfcGFnZShSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXAsCkluZGV4OiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTog Y29tLmludGVsbGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCShyZXZpc2lvbiBiYzFmZTA1ZjM4ZmJkZGEwNDkw NzViOWIxZGMyMzhiZjBkOWMyNDBlKQorKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w bGFuY2F0LmMJKHJldmlzaW9uIDk0YWE1ZDdkYWI3ZThlYmQ3NzAwNGI1MGJhOTZiMWY4MmEwNGMy NDkpCkBAIC03MjAsNiArNzIwLDcgQEAKIAogCS8qIFJlc3VsdHMgKi8KIAlMaXN0CSAgICpyZXN1 bHRzID0gTklMOworCWJvb2wJICAgZm91bmRWYWxpZCA9IGZhbHNlOwogCiAJLyoKIAkgKiBRdWlj a2x5IHJldHVybiBOSUwgZm9yIE9OIENPTkZMSUNUIERPIE5PVEhJTkcgd2l0aG91dCBhbiBpbmZl cmVuY2UKQEAgLTgxMyw3ICs4MTQsMTMgQEAKIAkJaWR4UmVsID0gaW5kZXhfb3BlbihpbmRleG9p ZCwgcnRlLT5yZWxsb2NrbW9kZSk7CiAJCWlkeEZvcm0gPSBpZHhSZWwtPnJkX2luZGV4OwogCi0J CWlmICghaWR4Rm9ybS0+aW5kaXN2YWxpZCkKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjb25zaWRl ciBib3RoIGluZGlzdmFsaWQgYW5kIGluZGlzcmVhZHkgaW5kZXhlcyBiZWNhdXNlCisJCSAqIHRo ZW0gbWF5IGJlY29tZSBpbmRpc3ZhbGlkIGJlZm9yZSBleGVjdXRpb24gcGhhc2UuIEl0IGlzIHJl cXVpcmVkCisJCSAqIHRvIGtlZXAgc2V0IG9mIGluZGV4ZXMgdXNlZCBhcyBhcmJpdGVyIHRvIGJl IHRoZSBzYW1lIGZvciBhbGwKKwkJICogY29uY3VycmVudCB0cmFuc2FjdGlvbnMuCisJCSAqLwor CQlpZiAoIWlkeEZvcm0tPmluZGlzcmVhZHkpCiAJCQlnb3RvIG5leHQ7CiAKIAkJLyoKQEAgLTgz NSwxMCArODQyLDkgQEAKIAkJCQkJCSBlcnJtc2coIk9OIENPTkZMSUNUIERPIFVQREFURSBub3Qg c3VwcG9ydGVkIHdpdGggZXhjbHVzaW9uIGNvbnN0cmFpbnRzIikpKTsKIAogCQkJcmVzdWx0cyA9 IGxhcHBlbmRfb2lkKHJlc3VsdHMsIGlkeEZvcm0tPmluZGV4cmVsaWQpOwotCQkJbGlzdF9mcmVl KGluZGV4TGlzdCk7CisJCQlmb3VuZFZhbGlkIHw9IGlkeEZvcm0tPmluZGlzdmFsaWQ7CiAJCQlp bmRleF9jbG9zZShpZHhSZWwsIE5vTG9jayk7Ci0JCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9M b2NrKTsKLQkJCXJldHVybiByZXN1bHRzOworCQkJYnJlYWs7CiAJCX0KIAkJZWxzZSBpZiAoaW5k ZXhPaWRGcm9tQ29uc3RyYWludCAhPSBJbnZhbGlkT2lkKQogCQl7CkBAIC05MzIsNiArOTM4LDcg QEAKIAkJCWdvdG8gbmV4dDsKIAogCQlyZXN1bHRzID0gbGFwcGVuZF9vaWQocmVzdWx0cywgaWR4 Rm9ybS0+aW5kZXhyZWxpZCk7CisJCWZvdW5kVmFsaWQgfD0gaWR4Rm9ybS0+aW5kaXN2YWxpZDsK IG5leHQ6CiAJCWluZGV4X2Nsb3NlKGlkeFJlbCwgTm9Mb2NrKTsKIAl9CkBAIC05MzksNyArOTQ2 LDggQEAKIAlsaXN0X2ZyZWUoaW5kZXhMaXN0KTsKIAl0YWJsZV9jbG9zZShyZWxhdGlvbiwgTm9M b2NrKTsKIAotCWlmIChyZXN1bHRzID09IE5JTCkKKwkvKiBJdCBpcyByZXF1aXJlZCB0byBoYXZl IGF0IGxlYXN0IG9uZSBpbmRpc3ZhbGlkIGluZGV4IGR1cmluZyB0aGUgcGxhbm5pbmcuICovCisJ aWYgKHJlc3VsdHMgPT0gTklMIHx8ICFmb3VuZFZhbGlkKQogCQllcmVwb3J0KEVSUk9SLAogCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKIAkJCQkgZXJybXNn KCJ0aGVyZSBpcyBubyB1bmlxdWUgb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnQgbWF0Y2hpbmcgdGhl IE9OIENPTkZMSUNUIHNwZWNpZmljYXRpb24iKSkpOwpJbmRleDogc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2dlbmFtLmMKSURFQSBhZGRpdGlvbmFsIGluZm86ClN1YnN5c3RlbTogY29tLmludGVs bGlqLm9wZW5hcGkuZGlmZi5pbXBsLnBhdGNoLkNoYXJzZXRFUAo8Kz5VVEYtOAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCi0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9n ZW5hbS5jCShyZXZpc2lvbiA5NGFhNWQ3ZGFiN2U4ZWJkNzcwMDRiNTBiYTk2YjFmODJhMDRjMjQ5 KQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYwkocmV2aXNpb24gZWExZmNh Y2M3Y2VhZDNlMmZjY2Y1ODFkMjBlNTEyNDRhNzEwNzQzNSkKQEAgLTQ1NCw3ICs0NTQsNyBAQAog CQkgKi8KIAkJc3lzc2Nhbi0+c2NhbiA9IHRhYmxlX2JlZ2luc2Nhbl9zdHJhdChoZWFwUmVsYXRp b24sIHNuYXBzaG90LAogCQkJCQkJCQkJCQkgIG5rZXlzLCBrZXksCi0JCQkJCQkJCQkJCSAgdHJ1 ZSwgZmFsc2UpOworCQkJCQkJCQkJCQkgIHRydWUsIGZhbHNlLCBmYWxzZSk7CiAJCXN5c3NjYW4t PmlzY2FuID0gTlVMTDsKIAl9CiAKSW5kZXg6IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3Bv aW50cy9NYWtlZmlsZQpJREVBIGFkZGl0aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxs aWoub3BlbmFwaS5kaWZmLmltcGwucGF0Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmlsZSBi L3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9NYWtlZmlsZQotLS0gYS9zcmMvdGVz dC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvTWFrZWZpbGUJKHJldmlzaW9uIDU2YzlkM2Y0ODQy YmFhNTNkN2FiMTNkMDc2NGVhZTdmMzA1YWJhMGYpCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9NYWtlZmlsZQkocmV2aXNpb24gM2RlYTcyYjYyYWRjODgwNjkxN2RjNDU5 YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTEzLDcgKzEzLDggQEAKIFJFR1JFU1MgPSBpbmplY3Rpb25f cG9pbnRzCiBSRUdSRVNTX09QVFMgPSAtLWRscGF0aD0kKHRvcF9idWlsZGRpcikvc3JjL3Rlc3Qv cmVncmVzcwogCi1JU09MQVRJT04gPSBpbnBsYWNlCitJU09MQVRJT04gPSBpbnBsYWNlIFwKKwkJ CXJlc2V0X3NuYXBzaG90cwogCiBUQVBfVEVTVFMgPSAxCiAKSW5kZXg6IHNyYy90ZXN0L21vZHVs ZXMvaW5qZWN0aW9uX3BvaW50cy9leHBlY3RlZC9yZXNldF9zbmFwc2hvdHMub3V0CklERUEgYWRk aXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5w YXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL2V4cGVjdGVkL3Jlc2V0X3NuYXBzaG90cy5vdXQgYi9z cmMvdGVzdC9tb2R1bGVzL2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQvcmVzZXRfc25hcHNob3Rz Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAotLS0gL2Rldi9udWxsCShyZXZpc2lvbiAzZGVhNzJi NjJhZGM4ODA2OTE3ZGM0NTliODJmZjQ0ZDk2MmJjYjEyKQorKysgYi9zcmMvdGVzdC9tb2R1bGVz L2luamVjdGlvbl9wb2ludHMvZXhwZWN0ZWQvcmVzZXRfc25hcHNob3RzLm91dAkocmV2aXNpb24g M2RlYTcyYjYyYWRjODgwNjkxN2RjNDU5YjgyZmY0NGQ5NjJiY2IxMikKQEAgLTAsMCArMSwzMTgg QEAKK3VudXNlZCBzdGVwIG5hbWU6IHNsZWVwCitQYXJzZWQgdGVzdCBzcGVjIHdpdGggMiBzZXNz aW9ucworCitzdGFydGluZyBwZXJtdXRhdGlvbjogc2V0X3BhcmFsbGVsX3dvcmtlcnNfMSBjcmVh dGVfaW5kZXhfY29uY3VycmVudGx5X3NpbXBsZSByZWluZGV4X2luZGV4X2NvbmN1cnJlbnRseSBk cm9wX2luZGV4IGRldGFjaAoraW5qZWN0aW9uX3BvaW50c19hdHRhY2gKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHNldF9w YXJhbGxlbF93b3JrZXJzXzE6IEFMVEVSIFRBQkxFIHRlc3QudGJsIFNFVCAocGFyYWxsZWxfd29y a2Vycz0wKTsKK3Rlc3Q6IE5PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBw b2ludCBoZWFwX3Jlc2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlCit0ZXN0OiBOT1RJQ0U6ICBu b3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGVhcGFtX2luZGV4X3ZhbGlkYXRl X3NjYW5fbm9feGlkCitzdGVwIGNyZWF0ZV9pbmRleF9jb25jdXJyZW50bHlfc2ltcGxlOiBDUkVB VEUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeCBPTiB0ZXN0LnRibChpLCBqKTsKK3Rlc3Q6IE5PVElD RTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoZWFwX3Jlc2V0X3NjYW5f c25hcHNob3RfZWZmZWN0aXZlCit0ZXN0OiBOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBp bmplY3Rpb24gcG9pbnQgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fbm9feGlkCitzdGVwIHJl aW5kZXhfaW5kZXhfY29uY3VycmVudGx5OiBSRUlOREVYIElOREVYIENPTkNVUlJFTlRMWSB0ZXN0 LmlkeDsKK3N0ZXAgZHJvcF9pbmRleDogRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgdGVzdC5pZHg7 CitzdGVwIGRldGFjaDogCisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdoZWFwYW1f aW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQnKTsKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19k ZXRhY2goJ2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUnKTsKKwlTRUxFQ1QgaW5q ZWN0aW9uX3BvaW50c19kZXRhY2goJ19idF9sZWFkZXJfcGFydGljaXBhdGVfYXNfd29ya2VyJyk7 CisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworaW5qZWN0aW9uX3BvaW50c19kZXRhY2gK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93 KQorCitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg ICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKKworc3RhcnRpbmcgcGVybXV0YXRpb246 IHNldF9wYXJhbGxlbF93b3JrZXJzXzEgY3JlYXRlX3VuaXF1ZV9pbmRleF9jb25jdXJyZW50bHlf c2ltcGxlIHJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5IGRyb3BfaW5kZXggZGV0YWNoCitpbmpl Y3Rpb25fcG9pbnRzX2F0dGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgc2V0X3BhcmFsbGVsX3dvcmtlcnNfMTogQUxU RVIgVEFCTEUgdGVzdC50YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTApOwordGVzdDogTk9USUNF OiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhlYXBfcmVzZXRfc2Nhbl9z bmFwc2hvdF9lZmZlY3RpdmUKK3Rlc3Q6IE5PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGlu amVjdGlvbiBwb2ludCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQKK3N0ZXAgY3Jl YXRlX3VuaXF1ZV9pbmRleF9jb25jdXJyZW50bHlfc2ltcGxlOiBDUkVBVEUgVU5JUVVFIElOREVY IENPTkNVUlJFTlRMWSBpZHggT04gdGVzdC50YmwoaSk7Cit0ZXN0OiBOT1RJQ0U6ICBub3RpY2Ug dHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGVhcF9yZXNldF9zY2FuX3NuYXBzaG90X2Vm ZmVjdGl2ZQordGVzdDogTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBv aW50IGhlYXBhbV9pbmRleF92YWxpZGF0ZV9zY2FuX25vX3hpZAorc3RlcCByZWluZGV4X2luZGV4 X2NvbmN1cnJlbnRseTogUkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgdGVzdC5pZHg7CitzdGVw IGRyb3BfaW5kZXg6IERST1AgSU5ERVggQ09OQ1VSUkVOVExZIHRlc3QuaWR4Oworc3RlcCBkZXRh Y2g6IAorCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2RldGFjaCgnaGVhcGFtX2luZGV4X3ZhbGlk YXRlX3NjYW5fbm9feGlkJyk7CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdoZWFw X3Jlc2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlJyk7CisJU0VMRUNUIGluamVjdGlvbl9wb2lu dHNfZGV0YWNoKCdfYnRfbGVhZGVyX3BhcnRpY2lwYXRlX2FzX3dvcmtlcicpOworCitpbmplY3Rp b25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg ICAgICAgICAgCisoMSByb3cpCisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworaW5qZWN0 aW9uX3BvaW50c19kZXRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgIAorKDEgcm93KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzZXRfcGFyYWxs ZWxfd29ya2Vyc18xIGNyZWF0ZV9pbmRleF9jb25jdXJyZW50bHlfcHJlZGljYXRlX2V4cHJlc3Np b25fbW9kIHJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5IGRyb3BfaW5kZXggZGV0YWNoCitpbmpl Y3Rpb25fcG9pbnRzX2F0dGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgCisoMSByb3cpCisKK3N0ZXAgc2V0X3BhcmFsbGVsX3dvcmtlcnNfMTogQUxU RVIgVEFCTEUgdGVzdC50YmwgU0VUIChwYXJhbGxlbF93b3JrZXJzPTApOwordGVzdDogTk9USUNF OiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhlYXBfcmVzZXRfc2Nhbl9z bmFwc2hvdF9lZmZlY3RpdmUKK3Rlc3Q6IE5PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGlu amVjdGlvbiBwb2ludCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQKK3N0ZXAgY3Jl YXRlX2luZGV4X2NvbmN1cnJlbnRseV9wcmVkaWNhdGVfZXhwcmVzc2lvbl9tb2Q6IENSRUFURSBJ TkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIHRlc3QudGJsKE1PRChpLCAyKSwgaikgV0hFUkUgTU9E KGksIDIpID0gMDsKK3Rlc3Q6IE5PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlv biBwb2ludCBoZWFwX3Jlc2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlCit0ZXN0OiBOT1RJQ0U6 ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGVhcGFtX2luZGV4X3ZhbGlk YXRlX3NjYW5fbm9feGlkCitzdGVwIHJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5OiBSRUlOREVY IElOREVYIENPTkNVUlJFTlRMWSB0ZXN0LmlkeDsKK3N0ZXAgZHJvcF9pbmRleDogRFJPUCBJTkRF WCBDT05DVVJSRU5UTFkgdGVzdC5pZHg7CitzdGVwIGRldGFjaDogCisJU0VMRUNUIGluamVjdGlv bl9wb2ludHNfZGV0YWNoKCdoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQnKTsKKwlT RUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9l ZmZlY3RpdmUnKTsKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ19idF9sZWFkZXJf cGFydGljaXBhdGVfYXNfd29ya2VyJyk7CisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKwor aW5qZWN0aW9uX3BvaW50c19kZXRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisK Kworc3RhcnRpbmcgcGVybXV0YXRpb246IHNldF9wYXJhbGxlbF93b3JrZXJzXzEgY3JlYXRlX2lu ZGV4X2NvbmN1cnJlbnRseV9wcmVkaWNhdGVfc2V0X3hpZF9ub19wYXJhbSByZWluZGV4X2luZGV4 X2NvbmN1cnJlbnRseSBkcm9wX2luZGV4IGRldGFjaAoraW5qZWN0aW9uX3BvaW50c19hdHRhY2gK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93 KQorCitzdGVwIHNldF9wYXJhbGxlbF93b3JrZXJzXzE6IEFMVEVSIFRBQkxFIHRlc3QudGJsIFNF VCAocGFyYWxsZWxfd29ya2Vycz0wKTsKK3N0ZXAgY3JlYXRlX2luZGV4X2NvbmN1cnJlbnRseV9w cmVkaWNhdGVfc2V0X3hpZF9ub19wYXJhbTogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHgg T04gdGVzdC50YmwoaSwgaikgV0hFUkUgdGVzdC5wcmVkaWNhdGVfc3RhYmxlX25vX3BhcmFtKCk7 CitzdGVwIHJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5OiBSRUlOREVYIElOREVYIENPTkNVUlJF TlRMWSB0ZXN0LmlkeDsKK3N0ZXAgZHJvcF9pbmRleDogRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkg dGVzdC5pZHg7CitzdGVwIGRldGFjaDogCisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNo KCdoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQnKTsKKwlTRUxFQ1QgaW5qZWN0aW9u X3BvaW50c19kZXRhY2goJ2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUnKTsKKwlT RUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ19idF9sZWFkZXJfcGFydGljaXBhdGVfYXNf d29ya2VyJyk7CisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworaW5qZWN0aW9uX3BvaW50 c19kZXRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAg IAorKDEgcm93KQorCitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKKworc3RhcnRpbmcgcGVy bXV0YXRpb246IHNldF9wYXJhbGxlbF93b3JrZXJzXzEgY3JlYXRlX2luZGV4X2NvbmN1cnJlbnRs eV9wcmVkaWNhdGVfc2V0X3hpZCByZWluZGV4X2luZGV4X2NvbmN1cnJlbnRseSBkcm9wX2luZGV4 IGRldGFjaAoraW5qZWN0aW9uX3BvaW50c19hdHRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHNldF9wYXJhbGxlbF93 b3JrZXJzXzE6IEFMVEVSIFRBQkxFIHRlc3QudGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz0wKTsK K3Rlc3Q6IE5PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoZWFw YW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQKK3N0ZXAgY3JlYXRlX2luZGV4X2NvbmN1cnJl bnRseV9wcmVkaWNhdGVfc2V0X3hpZDogQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04g dGVzdC50YmwoaSwgaikgV0hFUkUgdGVzdC5wcmVkaWNhdGVfc3RhYmxlKGkpOwordGVzdDogTk9U SUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhlYXBhbV9pbmRleF92 YWxpZGF0ZV9zY2FuX25vX3hpZAorc3RlcCByZWluZGV4X2luZGV4X2NvbmN1cnJlbnRseTogUkVJ TkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgdGVzdC5pZHg7CitzdGVwIGRyb3BfaW5kZXg6IERST1Ag SU5ERVggQ09OQ1VSUkVOVExZIHRlc3QuaWR4Oworc3RlcCBkZXRhY2g6IAorCVNFTEVDVCBpbmpl Y3Rpb25fcG9pbnRzX2RldGFjaCgnaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fbm9feGlkJyk7 CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdoZWFwX3Jlc2V0X3NjYW5fc25hcHNo b3RfZWZmZWN0aXZlJyk7CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdfYnRfbGVh ZGVyX3BhcnRpY2lwYXRlX2FzX3dvcmtlcicpOworCitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cp CisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworaW5qZWN0aW9uX3BvaW50c19kZXRhY2gK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93 KQorCisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBzZXRfcGFyYWxsZWxfd29ya2Vyc18yIGNyZWF0 ZV9pbmRleF9jb25jdXJyZW50bHlfc2ltcGxlIHdha2V1cCByZWluZGV4X2luZGV4X2NvbmN1cnJl bnRseSB3YWtldXAgZHJvcF9pbmRleCBkZXRhY2gKK2luamVjdGlvbl9wb2ludHNfYXR0YWNoCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykK Kworc3RlcCBzZXRfcGFyYWxsZWxfd29ya2Vyc18yOiBBTFRFUiBUQUJMRSB0ZXN0LnRibCBTRVQg KHBhcmFsbGVsX3dvcmtlcnM9Mik7Cit0ZXN0OiBOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZv ciBpbmplY3Rpb24gcG9pbnQgaGVhcF9yZXNldF9zY2FuX3NuYXBzaG90X2VmZmVjdGl2ZQorc3Rl cCBjcmVhdGVfaW5kZXhfY29uY3VycmVudGx5X3NpbXBsZTogQ1JFQVRFIElOREVYIENPTkNVUlJF TlRMWSBpZHggT04gdGVzdC50YmwoaSwgaik7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgd2FrZXVwOiBT RUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtldXAoJ19idF9sZWFkZXJfcGFydGljaXBhdGVfYXNf d29ya2VyJyk7CitpbmplY3Rpb25fcG9pbnRzX3dha2V1cAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKK3Rlc3Q6IE5PVElDRTogIG5v dGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2ludCBoZWFwYW1faW5kZXhfdmFsaWRhdGVf c2Nhbl9ub194aWQKK3N0ZXAgY3JlYXRlX2luZGV4X2NvbmN1cnJlbnRseV9zaW1wbGU6IDwuLi4g Y29tcGxldGVkPgordGVzdDogTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9u IHBvaW50IGhlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUKK3N0ZXAgcmVpbmRleF9p bmRleF9jb25jdXJyZW50bHk6IFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIHRlc3QuaWR4OyA8 d2FpdGluZyAuLi4+CitzdGVwIHdha2V1cDogU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVw KCdfYnRfbGVhZGVyX3BhcnRpY2lwYXRlX2FzX3dvcmtlcicpOworaW5qZWN0aW9uX3BvaW50c193 YWtldXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAor KDEgcm93KQorCit0ZXN0OiBOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24g cG9pbnQgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fbm9feGlkCitzdGVwIHJlaW5kZXhfaW5k ZXhfY29uY3VycmVudGx5OiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgZHJvcF9pbmRleDogRFJPUCBJ TkRFWCBDT05DVVJSRU5UTFkgdGVzdC5pZHg7CitzdGVwIGRldGFjaDogCisJU0VMRUNUIGluamVj dGlvbl9wb2ludHNfZGV0YWNoKCdoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQnKTsK KwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hv dF9lZmZlY3RpdmUnKTsKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ19idF9sZWFk ZXJfcGFydGljaXBhdGVfYXNfd29ya2VyJyk7CisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykK KworaW5qZWN0aW9uX3BvaW50c19kZXRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg ICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cp CisKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHNldF9wYXJhbGxlbF93b3JrZXJzXzIgY3JlYXRl X3VuaXF1ZV9pbmRleF9jb25jdXJyZW50bHlfc2ltcGxlIHdha2V1cCByZWluZGV4X2luZGV4X2Nv bmN1cnJlbnRseSB3YWtldXAgZHJvcF9pbmRleCBkZXRhY2gKK2luamVjdGlvbl9wb2ludHNfYXR0 YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygx IHJvdykKKworc3RlcCBzZXRfcGFyYWxsZWxfd29ya2Vyc18yOiBBTFRFUiBUQUJMRSB0ZXN0LnRi bCBTRVQgKHBhcmFsbGVsX3dvcmtlcnM9Mik7Cit0ZXN0OiBOT1RJQ0U6ICBub3RpY2UgdHJpZ2dl cmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGVhcF9yZXNldF9zY2FuX3NuYXBzaG90X2VmZmVjdGl2 ZQorc3RlcCBjcmVhdGVfdW5pcXVlX2luZGV4X2NvbmN1cnJlbnRseV9zaW1wbGU6IENSRUFURSBV TklRVUUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeCBPTiB0ZXN0LnRibChpKTsgPHdhaXRpbmcgLi4u Pgorc3RlcCB3YWtldXA6IFNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX3dha2V1cCgnX2J0X2xlYWRl cl9wYXJ0aWNpcGF0ZV9hc193b3JrZXInKTsKK2luamVjdGlvbl9wb2ludHNfd2FrZXVwCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKwor dGVzdDogTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhlYXBh bV9pbmRleF92YWxpZGF0ZV9zY2FuX25vX3hpZAorc3RlcCBjcmVhdGVfdW5pcXVlX2luZGV4X2Nv bmN1cnJlbnRseV9zaW1wbGU6IDwuLi4gY29tcGxldGVkPgordGVzdDogTk9USUNFOiAgbm90aWNl IHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9l ZmZlY3RpdmUKK3N0ZXAgcmVpbmRleF9pbmRleF9jb25jdXJyZW50bHk6IFJFSU5ERVggSU5ERVgg Q09OQ1VSUkVOVExZIHRlc3QuaWR4OyA8d2FpdGluZyAuLi4+CitzdGVwIHdha2V1cDogU0VMRUNU IGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdfYnRfbGVhZGVyX3BhcnRpY2lwYXRlX2FzX3dvcmtl cicpOworaW5qZWN0aW9uX3BvaW50c193YWtldXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg ICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCit0ZXN0OiBOT1RJQ0U6ICBub3RpY2Ug dHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGVhcGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5f bm9feGlkCitzdGVwIHJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5OiA8Li4uIGNvbXBsZXRlZD4K K3N0ZXAgZHJvcF9pbmRleDogRFJPUCBJTkRFWCBDT05DVVJSRU5UTFkgdGVzdC5pZHg7CitzdGVw IGRldGFjaDogCisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfZGV0YWNoKCdoZWFwYW1faW5kZXhf dmFsaWRhdGVfc2Nhbl9ub194aWQnKTsKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2go J2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUnKTsKKwlTRUxFQ1QgaW5qZWN0aW9u X3BvaW50c19kZXRhY2goJ19idF9sZWFkZXJfcGFydGljaXBhdGVfYXNfd29ya2VyJyk7CisKK2lu amVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAg ICAgICAgICAgICAgICAKKygxIHJvdykKKworaW5qZWN0aW9uX3BvaW50c19kZXRhY2gKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitp bmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgICAgICAgICAgCisoMSByb3cpCisKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHNldF9w YXJhbGxlbF93b3JrZXJzXzIgY3JlYXRlX2luZGV4X2NvbmN1cnJlbnRseV9wcmVkaWNhdGVfZXhw cmVzc2lvbl9tb2Qgd2FrZXVwIHJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5IHdha2V1cCBkcm9w X2luZGV4IGRldGFjaAoraW5qZWN0aW9uX3BvaW50c19hdHRhY2gKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQorCitzdGVwIHNldF9wYXJh bGxlbF93b3JrZXJzXzI6IEFMVEVSIFRBQkxFIHRlc3QudGJsIFNFVCAocGFyYWxsZWxfd29ya2Vy cz0yKTsKK3Rlc3Q6IE5PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlvbiBwb2lu dCBoZWFwX3Jlc2V0X3NjYW5fc25hcHNob3RfZWZmZWN0aXZlCitzdGVwIGNyZWF0ZV9pbmRleF9j b25jdXJyZW50bHlfcHJlZGljYXRlX2V4cHJlc3Npb25fbW9kOiBDUkVBVEUgSU5ERVggQ09OQ1VS UkVOVExZIGlkeCBPTiB0ZXN0LnRibChNT0QoaSwgMiksIGopIFdIRVJFIE1PRChpLCAyKSA9IDA7 IDx3YWl0aW5nIC4uLj4KK3N0ZXAgd2FrZXVwOiBTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c193YWtl dXAoJ19idF9sZWFkZXJfcGFydGljaXBhdGVfYXNfd29ya2VyJyk7CitpbmplY3Rpb25fcG9pbnRz X3dha2V1cAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAg CisoMSByb3cpCisKK3Rlc3Q6IE5PVElDRTogIG5vdGljZSB0cmlnZ2VyZWQgZm9yIGluamVjdGlv biBwb2ludCBoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQKK3N0ZXAgY3JlYXRlX2lu ZGV4X2NvbmN1cnJlbnRseV9wcmVkaWNhdGVfZXhwcmVzc2lvbl9tb2Q6IDwuLi4gY29tcGxldGVk PgordGVzdDogTk9USUNFOiAgbm90aWNlIHRyaWdnZXJlZCBmb3IgaW5qZWN0aW9uIHBvaW50IGhl YXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3RpdmUKK3N0ZXAgcmVpbmRleF9pbmRleF9jb25j dXJyZW50bHk6IFJFSU5ERVggSU5ERVggQ09OQ1VSUkVOVExZIHRlc3QuaWR4OyA8d2FpdGluZyAu Li4+CitzdGVwIHdha2V1cDogU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdfYnRfbGVh ZGVyX3BhcnRpY2lwYXRlX2FzX3dvcmtlcicpOworaW5qZWN0aW9uX3BvaW50c193YWtldXAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIAorKDEgcm93KQor Cit0ZXN0OiBOT1RJQ0U6ICBub3RpY2UgdHJpZ2dlcmVkIGZvciBpbmplY3Rpb24gcG9pbnQgaGVh cGFtX2luZGV4X3ZhbGlkYXRlX3NjYW5fbm9feGlkCitzdGVwIHJlaW5kZXhfaW5kZXhfY29uY3Vy cmVudGx5OiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgZHJvcF9pbmRleDogRFJPUCBJTkRFWCBDT05D VVJSRU5UTFkgdGVzdC5pZHg7CitzdGVwIGRldGFjaDogCisJU0VMRUNUIGluamVjdGlvbl9wb2lu dHNfZGV0YWNoKCdoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQnKTsKKwlTRUxFQ1Qg aW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hvdF9lZmZlY3Rp dmUnKTsKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ19idF9sZWFkZXJfcGFydGlj aXBhdGVfYXNfd29ya2VyJyk7CisKK2luamVjdGlvbl9wb2ludHNfZGV0YWNoCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAKKygxIHJvdykKKworaW5qZWN0 aW9uX3BvaW50c19kZXRhY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgIAorKDEgcm93KQorCitpbmplY3Rpb25fcG9pbnRzX2RldGFjaAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisoMSByb3cpCisKSW5kZXg6 IHNyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZApJREVBIGFkZGl0 aW9uYWwgaW5mbzoKU3Vic3lzdGVtOiBjb20uaW50ZWxsaWoub3BlbmFwaS5kaWZmLmltcGwucGF0 Y2guQ2hhcnNldEVQCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvaW5q ZWN0aW9uX3BvaW50cy9tZXNvbi5idWlsZAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2luamVjdGlv bl9wb2ludHMvbWVzb24uYnVpbGQJKHJldmlzaW9uIDU2YzlkM2Y0ODQyYmFhNTNkN2FiMTNkMDc2 NGVhZTdmMzA1YWJhMGYpCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9t ZXNvbi5idWlsZAkocmV2aXNpb24gM2RlYTcyYjYyYWRjODgwNjkxN2RjNDU5YjgyZmY0NGQ5NjJi Y2IxMikKQEAgLTQyLDYgKzQyLDcgQEAKICAgJ2lzb2xhdGlvbic6IHsKICAgICAnc3BlY3MnOiBb CiAgICAgICAnaW5wbGFjZScsCisgICAgICAncmVzZXRfc25hcHNob3RzJywKICAgICBdLAogICB9 LAogICAndGFwJzogewpJbmRleDogc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRzL3Nw ZWNzL3Jlc2V0X3NuYXBzaG90cy5zcGVjCklERUEgYWRkaXRpb25hbCBpbmZvOgpTdWJzeXN0ZW06 IGNvbS5pbnRlbGxpai5vcGVuYXBpLmRpZmYuaW1wbC5wYXRjaC5DaGFyc2V0RVAKPCs+VVRGLTgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25fcG9pbnRz L3NwZWNzL3Jlc2V0X3NuYXBzaG90cy5zcGVjIGIvc3JjL3Rlc3QvbW9kdWxlcy9pbmplY3Rpb25f cG9pbnRzL3NwZWNzL3Jlc2V0X3NuYXBzaG90cy5zcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0t LSAvZGV2L251bGwJKHJldmlzaW9uIDNkZWE3MmI2MmFkYzg4MDY5MTdkYzQ1OWI4MmZmNDRkOTYy YmNiMTIpCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvaW5qZWN0aW9uX3BvaW50cy9zcGVjcy9yZXNl dF9zbmFwc2hvdHMuc3BlYwkocmV2aXNpb24gM2RlYTcyYjYyYWRjODgwNjkxN2RjNDU5YjgyZmY0 NGQ5NjJiY2IxMikKQEAgLTAsMCArMSwxMTQgQEAKK3NldHVwCit7CisJQ1JFQVRFIEVYVEVOU0lP TiBpbmplY3Rpb25fcG9pbnRzOworCUNSRUFURSBTQ0hFTUEgdGVzdDsKKwlDUkVBVEUgVEFCTEUg dGVzdC50YmwoaSBpbnQgcHJpbWFyeSBrZXksIGogaW50KTsKKwlJTlNFUlQgSU5UTyB0ZXN0LnRi bCBTRUxFQ1QgaSwgaSAqIEkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjAwKSBzKGkpOworCisJ Q1JFQVRFIEZVTkNUSU9OIHRlc3QucHJlZGljYXRlX3N0YWJsZShpbnRlZ2VyKSBSRVRVUk5TIGJv b2wgSU1NVVRBQkxFCisJCQkJCQkJCQkgIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKKwkJCQkJCQkJ CSAgQkVHSU4KKwkJCQkJCQkJCQlFWEVDVVRFICdTRUxFQ1QgdHhpZF9jdXJyZW50KCknOworCQkJ CQkJCQkJCVJFVFVSTiBNT0QoJDEsIDIpID0gMDsKKwkJCQkJCQkJCSAgRU5EOyAkJDsKKworCUNS RUFURSBGVU5DVElPTiB0ZXN0LnByZWRpY2F0ZV9zdGFibGVfbm9fcGFyYW0oKSBSRVRVUk5TIGJv b2wgSU1NVVRBQkxFCisJCQkJCQkJCQkgIExBTkdVQUdFIHBscGdzcWwgQVMgJCQKKwkJCQkJCQkJ CSAgQkVHSU4KKwkJCQkJCQkJCQlFWEVDVVRFICdTRUxFQ1QgdHhpZF9jdXJyZW50KCknOworCQkJ CQkJCQkJCVJFVFVSTiBmYWxzZTsKKwkJCQkJCQkJCSAgRU5EOyAkJDsKK30KKwordGVhcmRvd24K K3sKKwlEUk9QIFNDSEVNQSB0ZXN0IENBU0NBREU7CisJRFJPUCBFWFRFTlNJT04gaW5qZWN0aW9u X3BvaW50czsKK30KKworc2Vzc2lvbiB0ZXN0CitzZXR1cAl7CisJU0VMRUNUIGluamVjdGlvbl9w b2ludHNfYXR0YWNoKCdoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQnLCAnbm90aWNl Jyk7CisJU0VMRUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdoZWFwX3Jlc2V0X3NjYW5fc25h cHNob3RfZWZmZWN0aXZlJywgJ25vdGljZScpOworCVNFTEVDVCBpbmplY3Rpb25fcG9pbnRzX2F0 dGFjaCgnX2J0X2xlYWRlcl9wYXJ0aWNpcGF0ZV9hc193b3JrZXInLCAnd2FpdCcpOworfQorc3Rl cCBzbGVlcCB7IFNFTEVDVCBwZ19zbGVlcCgxMCk7IH0KK3N0ZXAgZHJvcF9pbmRleCB7IERST1Ag SU5ERVggQ09OQ1VSUkVOVExZIHRlc3QuaWR4OyB9CitzdGVwIGNyZWF0ZV9pbmRleF9jb25jdXJy ZW50bHlfc2ltcGxlCXsgQ1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gdGVzdC50Ymwo aSwgaik7IH0KK3N0ZXAgY3JlYXRlX3VuaXF1ZV9pbmRleF9jb25jdXJyZW50bHlfc2ltcGxlCXsg Q1JFQVRFIFVOSVFVRSBJTkRFWCBDT05DVVJSRU5UTFkgaWR4IE9OIHRlc3QudGJsKGkpOyB9Citz dGVwIGNyZWF0ZV9pbmRleF9jb25jdXJyZW50bHlfcHJlZGljYXRlX2V4cHJlc3Npb25fbW9kCXsg Q1JFQVRFIElOREVYIENPTkNVUlJFTlRMWSBpZHggT04gdGVzdC50YmwoTU9EKGksIDIpLCBqKSBX SEVSRSBNT0QoaSwgMikgPSAwOyB9CitzdGVwIGNyZWF0ZV9pbmRleF9jb25jdXJyZW50bHlfcHJl ZGljYXRlX3NldF94aWQJeyBDUkVBVEUgSU5ERVggQ09OQ1VSUkVOVExZIGlkeCBPTiB0ZXN0LnRi bChpLCBqKSBXSEVSRSB0ZXN0LnByZWRpY2F0ZV9zdGFibGUoaSk7IH0KK3N0ZXAgY3JlYXRlX2lu ZGV4X2NvbmN1cnJlbnRseV9wcmVkaWNhdGVfc2V0X3hpZF9ub19wYXJhbQl7IENSRUFURSBJTkRF WCBDT05DVVJSRU5UTFkgaWR4IE9OIHRlc3QudGJsKGksIGopIFdIRVJFIHRlc3QucHJlZGljYXRl X3N0YWJsZV9ub19wYXJhbSgpOyB9CitzdGVwIHJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5IHsg UkVJTkRFWCBJTkRFWCBDT05DVVJSRU5UTFkgdGVzdC5pZHg7IH0KK3N0ZXAgc2V0X3BhcmFsbGVs X3dvcmtlcnNfMSB7IEFMVEVSIFRBQkxFIHRlc3QudGJsIFNFVCAocGFyYWxsZWxfd29ya2Vycz0w KTsgfQorc3RlcCBzZXRfcGFyYWxsZWxfd29ya2Vyc18yIHsgQUxURVIgVEFCTEUgdGVzdC50Ymwg U0VUIChwYXJhbGxlbF93b3JrZXJzPTIpOyB9CitzdGVwIGRldGFjaCB7CisJU0VMRUNUIGluamVj dGlvbl9wb2ludHNfZGV0YWNoKCdoZWFwYW1faW5kZXhfdmFsaWRhdGVfc2Nhbl9ub194aWQnKTsK KwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ2hlYXBfcmVzZXRfc2Nhbl9zbmFwc2hv dF9lZmZlY3RpdmUnKTsKKwlTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ19idF9sZWFk ZXJfcGFydGljaXBhdGVfYXNfd29ya2VyJyk7Cit9CisKK3Nlc3Npb24gd2FrZXVwX3Nlc3Npb24K K3N0ZXAgd2FrZXVwIHsgU0VMRUNUIGluamVjdGlvbl9wb2ludHNfd2FrZXVwKCdfYnRfbGVhZGVy X3BhcnRpY2lwYXRlX2FzX3dvcmtlcicpOyB9CisKK3Blcm11dGF0aW9uCisJc2V0X3BhcmFsbGVs X3dvcmtlcnNfMQorCWNyZWF0ZV9pbmRleF9jb25jdXJyZW50bHlfc2ltcGxlCisJcmVpbmRleF9p bmRleF9jb25jdXJyZW50bHkKKwlkcm9wX2luZGV4CisJZGV0YWNoCisKK3Blcm11dGF0aW9uCisJ c2V0X3BhcmFsbGVsX3dvcmtlcnNfMQorCWNyZWF0ZV91bmlxdWVfaW5kZXhfY29uY3VycmVudGx5 X3NpbXBsZQorCXJlaW5kZXhfaW5kZXhfY29uY3VycmVudGx5CisJZHJvcF9pbmRleAorCWRldGFj aAorCitwZXJtdXRhdGlvbgorCXNldF9wYXJhbGxlbF93b3JrZXJzXzEKKwljcmVhdGVfaW5kZXhf Y29uY3VycmVudGx5X3ByZWRpY2F0ZV9leHByZXNzaW9uX21vZAorCXJlaW5kZXhfaW5kZXhfY29u Y3VycmVudGx5CisJZHJvcF9pbmRleAorCWRldGFjaAorCitwZXJtdXRhdGlvbgorCXNldF9wYXJh bGxlbF93b3JrZXJzXzEKKwljcmVhdGVfaW5kZXhfY29uY3VycmVudGx5X3ByZWRpY2F0ZV9zZXRf eGlkX25vX3BhcmFtCisJcmVpbmRleF9pbmRleF9jb25jdXJyZW50bHkKKwlkcm9wX2luZGV4CisJ ZGV0YWNoCisKK3Blcm11dGF0aW9uCisJc2V0X3BhcmFsbGVsX3dvcmtlcnNfMQorCWNyZWF0ZV9p bmRleF9jb25jdXJyZW50bHlfcHJlZGljYXRlX3NldF94aWQKKwlyZWluZGV4X2luZGV4X2NvbmN1 cnJlbnRseQorCWRyb3BfaW5kZXgKKwlkZXRhY2gKKworcGVybXV0YXRpb24KKwlzZXRfcGFyYWxs ZWxfd29ya2Vyc18yCisJY3JlYXRlX2luZGV4X2NvbmN1cnJlbnRseV9zaW1wbGUKKwl3YWtldXAK KwlyZWluZGV4X2luZGV4X2NvbmN1cnJlbnRseQorCXdha2V1cAorCWRyb3BfaW5kZXgKKwlkZXRh Y2gKKworcGVybXV0YXRpb24KKwlzZXRfcGFyYWxsZWxfd29ya2Vyc18yCisJY3JlYXRlX3VuaXF1 ZV9pbmRleF9jb25jdXJyZW50bHlfc2ltcGxlCisJd2FrZXVwCisJcmVpbmRleF9pbmRleF9jb25j dXJyZW50bHkKKwl3YWtldXAKKwlkcm9wX2luZGV4CisJZGV0YWNoCisKK3Blcm11dGF0aW9uCisJ c2V0X3BhcmFsbGVsX3dvcmtlcnNfMgorCWNyZWF0ZV9pbmRleF9jb25jdXJyZW50bHlfcHJlZGlj YXRlX2V4cHJlc3Npb25fbW9kCisJd2FrZXVwCisJcmVpbmRleF9pbmRleF9jb25jdXJyZW50bHkK Kwl3YWtldXAKKwlkcm9wX2luZGV4CisJZGV0YWNoClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQo= --00000000000067ee6706219d2a49--