Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vKvr6-00DnXQ-1V for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 09:49:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vKvr3-00DBML-1M for pgsql-hackers@arkaria.postgresql.org; Mon, 17 Nov 2025 09:49:01 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vKvr2-00DBMC-2M for pgsql-hackers@lists.postgresql.org; Mon, 17 Nov 2025 09:49:01 +0000 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vKvr0-007Xg2-1G for pgsql-hackers@lists.postgresql.org; Mon, 17 Nov 2025 09:48:59 +0000 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-5958232f806so3813127e87.0 for ; Mon, 17 Nov 2025 01:48:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763372936; x=1763977736; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=CXBrAxPnSWGsMEXEau9ZXXFjhsPibcyf7/4sV+/LX2k=; b=Chklrv1INfL94MTiyzm3v/I3FdYCJYGVpG0XrbW8zXOmi/ocp6gs+5vDHwt9ZkXbnq 7g8XebgUUc5JlGs4vGP0Ay2U2QFY9yifcYt5ZrvaJdR/DSHJu9ISOu19oMiXRUfL7hYb ezkrp0qRxqsx++R/DXIFw7p18V55rJWJwq1tAB//WzUT8ypACHcVFf1YDAGLb+ALYGPL LPZpilWiKxbUcSsIT2JGG9w/kUbqTTqZpP6rZmMz/EcHRANNtinxp6ebe3WsMmu5Qgm6 UDpIcrVmRZtaYYlQhoSkPC5p+vVwYUVienqV2XPMeOR8aUqTnGLuL2WML7qnrZyGh8Zo 6fNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763372936; x=1763977736; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=CXBrAxPnSWGsMEXEau9ZXXFjhsPibcyf7/4sV+/LX2k=; b=sYpyWCs+hwRBF7aSLUdBQUBPOibfJ5uDcEkOeXUSy79m7fszonNO+n5xANR3fRP2AP j39sNuX/5cx+WMjr7x9g+xMC0ElTx34YTYcp8Xb/jlUFpz9rS2I5xnGdzShRBygAv82a KL1lz81OP3McLWvecPDa69xP/x45uDR8NL50aPaAdU0im53kHKxEQvTwkCFTeUgrzdfY tnx/hBBzgIe3dqhGdcpnPy0aVyqcThDz4X3V3RQAGB2K8kAbQj7f/0NwgvXNCr7C8ZWy mNQnlJJGP+K87HcAfpjOjanMtg42L694upRg/pxif2JSHXLyrzOG8B3xgk3X2gRV1fiQ QQuQ== X-Gm-Message-State: AOJu0YwdAOB3je4Kgch45tAOxLM/+IflKHdegz+I0azVMFttb5ekkiRG u43DFYWDogX7BH0/4dZsG2q5OJ2hyNh8TuQIIwVCnCsZ8cuFsii9W8i53MBnxjqhfdv7yqcAVBR nzCHwRZTGrS2ifoRjwo9AHRAfrNPszqr3oA== X-Gm-Gg: ASbGnctPKBb5E1iX/U9ckaE1Rm/6bUE0iT7xg/Je1mavq1N9ebEcBQ9pKeMZ3n0N/od wmMtEVSoKJoFJa7Z6tEtNj78DXitV/3i0KbYxD94FKu3zXKC7zXblmRprCcu3M42OvTKvcoUwcT BEuPmwnJtWLO3d05mznZxEluwMXFAzlWVpaqAGzUgYofoWJgIWu0OXJJSeptJ3aO3xAEAnIvVad 1cZJI6lEp3oGgum7n/6VFhN247pUCjvUQ7AW4KzEeHGgUnt1kVPlY+myo5Us9jR0YycL1bBedU2 P4/FF94= X-Google-Smtp-Source: AGHT+IFNwJ7WQ7i48f0qqZ+lR77taRRV4r+pApWBNZs9gO4TVr8bu5JOynYC1bzBc0cGKAobLUio+qFhw5B+pWvcz/U= X-Received: by 2002:a05:6512:33d3:b0:595:79ef:ca45 with SMTP id 2adb3069b0e04-595841aa466mr4135921e87.11.1763372936055; Mon, 17 Nov 2025 01:48:56 -0800 (PST) MIME-Version: 1.0 From: Chao Li Date: Mon, 17 Nov 2025 17:48:43 +0800 X-Gm-Features: AWmQ_bkw7qOVc64hPd94l_8V8Iy9M8WQ5rSgkeWySdPh0kU7X5QMrIwVhgs_i-c Message-ID: Subject: =?UTF-8?Q?quoteOneName=28=29_inconsistency_with_quote=5Fall=5Fidentifi?= =?UTF-8?Q?ers_=E2=80=94_replacement_API_proposed?= To: Postgres hackers Content-Type: multipart/mixed; boundary="00000000000075ed310643c74187" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000075ed310643c74187 Content-Type: multipart/alternative; boundary="00000000000075ed300643c74185" --00000000000075ed300643c74185 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Hackers, =3D=3D Background =3D=3D While reviewing a patch, I noticed that quoteOneName() duplicates the logic of quote_identifier() for adding double quotes to identifiers. The main difference is that quoteOneName() does *not* honor the GUC `quote_all_identifiers`. The typical usage pattern of quoteOneName() looks like this: ``` // Define a local buffer with size MAX_QUOTED_NAME_LEN // MAX_QUOTED_NAME_LEN =3D MAX_NAMELEN * 2 + 3 to ensure no overflow char attname[MAX_QUOTED_NAME_LEN]; // Add quotes and copy into the stack buffer quoteOneName(attname, RIAttName(pk_rel, riinfo->pk_attnums[riinfo->nkeys - 1])); // Copy the quoted identifier into a StringInfo appendStringInfoString(&querybuf, attname); ``` This pattern is expensive because: * it allocates a larger-than-necessary buffer on the stack * it incurs two pallocs and two data copies Looking further, the common pattern around quote_identifier() is similar: ``` appendStringInfoString(&relations, quote_identifier(relname)); ``` This also incurs two pallocs and two copies: quote_identifier() allocates a temporary buffer and copies the quoted identifier into it, and then appendStringInfoString() may allocate and copy again. =3D=3D Idea =3D=3D I'd like to propose introducing `appendStringInfoIdentifier()`, which adds the quoting logic directly to StringInfo. The goals are: * eventually deprecate quoteOneName() =E2=80=94 I'm not aware of a reason w= hy it should ignore the GUC `quote_all_identifiers` * simplify the usage patterns for quoting identifiers * avoid unnecessary intermediate buffers, pallocs, and data copies =3D=3D About the attached patch =3D=3D Attached v1 is not intended to be the final version =E2=80=94 it is mainly = to demonstrate the idea and get feedback on the design direction. * 0001 implements `appendStringInfoIdentifier()` and uses it in a few place= s * 0002 switches ri_triggers.c to use it, resolving a complicated usage pattern and showing a path toward removing quoteOneName() Comments and suggestions on the overall direction would be very welcome. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/ --00000000000075ed300643c74185 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
<= div>
Hi Hackers,

=3D=3D Background =3D=3D

While reviewing a patch, I noticed that quoteOneName()= duplicates the logic of quote_identifier() for adding double quotes to ide= ntifiers.=C2=A0 The main difference is that quoteOneName() does *not* honor= the GUC `quote_all_identifiers`.

The typical usag= e pattern of quoteOneName() looks like this:

```
=C2=A0 =C2=A0 // Define a local buffer with size MAX_QUOTED_NAME_L= EN
=C2=A0 =C2=A0 // MAX_QUOTED_NAME_LEN =3D MAX_NAMELEN * 2 + 3 t= o ensure no overflow
=C2=A0 =C2=A0 char attname[MAX_QUOTED_NAME_L= EN];

=C2=A0 =C2=A0 // Add quotes and copy into the= stack buffer
=C2=A0 =C2=A0 quoteOneName(attname, RIAttName(pk_re= l, riinfo->pk_attnums[riinfo->nkeys - 1]));

= =C2=A0 =C2=A0 // Copy the quoted identifier into a StringInfo
=C2= =A0 =C2=A0 appendStringInfoString(&querybuf, attname);
```

This pattern is expensive because:

* it allocates a larger-than-necessary buffer on the stack
* it incurs two pallocs and two data copies

Look= ing further, the common pattern around quote_identifier() is similar:
=

```
=C2=A0 =C2=A0 appendStringInfoString(&= ;relations, quote_identifier(relname));
```

<= div>This also incurs two pallocs and two copies: quote_identifier() allocat= es a temporary buffer and copies the quoted identifier into it, and then ap= pendStringInfoString() may allocate and copy again.

=3D=3D Idea =3D=3D

I'd like to propose intro= ducing `appendStringInfoIdentifier()`, which adds the quoting logic directl= y to StringInfo.=C2=A0 The goals are:

* eventually= deprecate quoteOneName() =E2=80=94 I'm not aware of a reason why it sh= ould ignore the GUC `quote_all_identifiers`
* simplify the usage = patterns for quoting identifiers
* avoid unnecessary intermediate= buffers, pallocs, and data copies

=3D=3D About th= e attached patch =3D=3D

Attached v1 is not intende= d to be the final version =E2=80=94 it is mainly to demonstrate the idea an= d get feedback on the design direction.

* 0001 imp= lements `appendStringInfoIdentifier()` and uses it in a few places
* 0002 switches ri_triggers.c to use it, resolving a complicated usage pa= ttern and showing a path toward removing quoteOneName()

Comments and suggestions on the overall direction would be very welco= me.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/




--00000000000075ed300643c74185-- --00000000000075ed310643c74187 Content-Type: application/octet-stream; name="v1-0001-Add-appendStringInfoIdentifier-and-use-it-in-a-fe.patch" Content-Disposition: attachment; filename="v1-0001-Add-appendStringInfoIdentifier-and-use-it-in-a-fe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi2yofe00 RnJvbSBjOWU4Njg3MmQ5OGY0YmM5NDhmYjM3MGY1ODI5NDFkOTQ2ODg3MTU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiQ2hhbyBMaSAoRXZhbikiIDxsaWNAaGlnaGdvLmNvbT4KRGF0 ZTogRnJpLCAxNCBOb3YgMjAyNSAyMTo0NDoyOSArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMS8y XSBBZGQgYXBwZW5kU3RyaW5nSW5mb0lkZW50aWZpZXIgYW5kIHVzZSBpdCBpbiBhIGZldwogcGxh Y2VzCgpBdXRob3I6IENoYW8gTGkgPGxpY0BoaWdoZ28uY29tPgotLS0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvb2JqZWN0YWRkcmVzcy5jIHwgIDIwICsrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V4 cGxhaW4uYyAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YyB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgfCAxNDIgKysr KysrKysrKysrKysrKysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAg ICAgICAgfCAgIDYgKysKIDUgZmlsZXMgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMoKyksIDQzIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVz cy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMKaW5kZXggYzc1YjcxMzFl ZDcuLmZiYjBiNGYzMGYzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFk ZHJlc3MuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwpAQCAtMzYx MSw5ICszNjExLDkgQEAgZ2V0T2JqZWN0RGVzY3JpcHRpb24oY29uc3QgT2JqZWN0QWRkcmVzcyAq b2JqZWN0LCBib29sIG1pc3Npbmdfb2spCiAJCQkJZWxzZQogCQkJCQluc3BuYW1lID0gZ2V0X25h bWVzcGFjZV9uYW1lKGNmZ0Zvcm0tPmNmZ25hbWVzcGFjZSk7CiAKLQkJCQlhcHBlbmRTdHJpbmdJ bmZvKCZidWZmZXIsIF8oInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24gJXMiKSwKLQkJCQkJCQkJ IHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKG5zcG5hbWUsCi0JCQkJCQkJCQkJCQkJCQlOYW1l U3RyKGNmZ0Zvcm0tPmNmZ25hbWUpKSk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb1F1YWxpZmllZElk ZW50aWZpZXIoJmJ1ZmZlciwKKwkJCQkJCQkJCQkJCQlfKCJ0ZXh0IHNlYXJjaCBjb25maWd1cmF0 aW9uICIpLAorCQkJCQkJCQkJCQkJCW5zcG5hbWUsIE5hbWVTdHIoY2ZnRm9ybS0+Y2ZnbmFtZSks IE5VTEwpOwogCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOwogCQkJCWJyZWFrOwogCQkJfQpAQCAt NDg4Myw4ICs0ODgzLDcgQEAgZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cyhjb25zdCBPYmplY3RBZGRy ZXNzICpvYmplY3QsCiAKIAkJCQlpZiAoYXR0cikKIAkJCQl7Ci0JCQkJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZmZlciwgIi4lcyIsCi0JCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihhdHRyKSk7CisJ CQkJCWFwcGVuZFN0cmluZ0luZm9JZGVudGlmaWVyKCZidWZmZXIsICIuIiwgYXR0ciwgTlVMTCk7 CiAJCQkJCWlmIChvYmpuYW1lKQogCQkJCQkJKm9iam5hbWUgPSBsYXBwZW5kKCpvYmpuYW1lLCBh dHRyKTsKIAkJCQl9CkBAIC01Mzk1LDggKzUzOTQsNyBAQCBnZXRPYmplY3RJZGVudGl0eVBhcnRz KGNvbnN0IE9iamVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQkJCQkgb2JqZWN0LT5vYmplY3RJZCk7 CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWZmZXIs Ci0JCQkJCQkJCQkgICBxdW90ZV9pZGVudGlmaWVyKG5zcG5hbWUpKTsKKwkJCQlhcHBlbmRTdHJp bmdJbmZvSWRlbnRpZmllcigmYnVmZmVyLCBOVUxMLCBuc3BuYW1lLCBOVUxMKTsKIAkJCQlpZiAo b2JqbmFtZSkKIAkJCQkJKm9iam5hbWUgPSBsaXN0X21ha2UxKG5zcG5hbWUpOwogCQkJCWJyZWFr OwpAQCAtNTczOSwxNiArNTczNywxMiBAQCBnZXRPYmplY3RJZGVudGl0eVBhcnRzKGNvbnN0IE9i amVjdEFkZHJlc3MgKm9iamVjdCwKIAkJCQlkZWZhY2wgPSAoRm9ybV9wZ19kZWZhdWx0X2FjbCkg R0VUU1RSVUNUKHR1cCk7CiAKIAkJCQl1c2VybmFtZSA9IEdldFVzZXJOYW1lRnJvbUlkKGRlZmFj bC0+ZGVmYWNscm9sZSwgZmFsc2UpOwotCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwKLQkJ CQkJCQkJICJmb3Igcm9sZSAlcyIsCi0JCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHVzZXJuYW1l KSk7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0lkZW50aWZpZXIoJmJ1ZmZlciwgImZvciByb2xlICIs IHVzZXJuYW1lLCBOVUxMKTsKIAogCQkJCWlmIChPaWRJc1ZhbGlkKGRlZmFjbC0+ZGVmYWNsbmFt ZXNwYWNlKSkKIAkJCQl7CiAJCQkJCXNjaGVtYSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1w KGRlZmFjbC0+ZGVmYWNsbmFtZXNwYWNlKTsKLQkJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVy LAotCQkJCQkJCQkJICIgaW4gc2NoZW1hICVzIiwKLQkJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVy KHNjaGVtYSkpOworCQkJCQlhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmllcigmYnVmZmVyLCAiIGlu IHNjaGVtYSAiLCBzY2hlbWEsIE5VTEwpOwogCQkJCX0KIAkJCQllbHNlCiAJCQkJCXNjaGVtYSA9 IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKaW5kZXggN2U2OTlmODU5NWUuLmNjOTc5NzM3ODQ1 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC0xNzA1LDggKzE3MDUsNyBAQCBFeHBsYWluTm9k ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQlleHBsYWluX2dl dF9pbmRleF9uYW1lKGJpdG1hcGluZGV4c2Nhbi0+aW5kZXhpZCk7CiAKIAkJCQlpZiAoZXMtPmZv cm1hdCA9PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQotCQkJCQlhcHBlbmRTdHJpbmdJbmZvKGVzLT5z dHIsICIgb24gJXMiLAotCQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoaW5kZXhuYW1lKSk7CisJ CQkJCWFwcGVuZFN0cmluZ0luZm9JZGVudGlmaWVyKGVzLT5zdHIsCSIgb24gIiwgaW5kZXhuYW1l LCBOVUxMKTsKIAkJCQllbHNlCiAJCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIkluZGV4IE5hbWUi LCBpbmRleG5hbWUsIGVzKTsKIAkJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMKaW5k ZXggMDU5ZmM1ZWJmNjAuLjllMTNmNTI2OTk0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcmlfdHJpZ2dlcnMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dl cnMuYwpAQCAtMzk1LDcgKzM5NSw2IEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRyaWdk YXRhKQogCQl7CiAJCQlxdW90ZU9uZU5hbWUoYXR0bmFtZSwKIAkJCQkJCSBSSUF0dE5hbWUocGtf cmVsLCByaWluZm8tPnBrX2F0dG51bXNbcmlpbmZvLT5ua2V5cyAtIDFdKSk7Ci0KIAkJCWFwcGVu ZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLAogCQkJCQkJCSAiU0VMRUNUIDEgRlJPTSAoU0VMRUNUICVz IEFTIHIgRlJPTSAlcyVzIHgiLAogCQkJCQkJCSBhdHRuYW1lLCBwa19vbmx5LCBwa3JlbG5hbWUp OwpAQCAtMjA5NSw3ICsyMDk0LDYgQEAgcmlfR2VuZXJhdGVRdWFsQ29sbGF0aW9uKFN0cmluZ0lu Zm8gYnVmLCBPaWQgY29sbGF0aW9uKQogCUhlYXBUdXBsZQl0cDsKIAlGb3JtX3BnX2NvbGxhdGlv biBjb2xsdHVwOwogCWNoYXIJICAgKmNvbGxuYW1lOwotCWNoYXIJCW9uZW5hbWVbTUFYX1FVT1RF RF9OQU1FX0xFTl07CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIGl0J3MgYSBub25jb2xsYXRhYmxl IGRhdGEgdHlwZSAqLwogCWlmICghT2lkSXNWYWxpZChjb2xsYXRpb24pKQpAQCAtMjExMSwxMCAr MjEwOSw4IEBAIHJpX0dlbmVyYXRlUXVhbENvbGxhdGlvbihTdHJpbmdJbmZvIGJ1ZiwgT2lkIGNv bGxhdGlvbikKIAkgKiBXZSBxdWFsaWZ5IHRoZSBuYW1lIGFsd2F5cywgZm9yIHNpbXBsaWNpdHkg YW5kIHRvIGVuc3VyZSB0aGUgcXVlcnkgaXMKIAkgKiBub3Qgc2VhcmNoLXBhdGgtZGVwZW5kZW50 LgogCSAqLwotCXF1b3RlT25lTmFtZShvbmVuYW1lLCBnZXRfbmFtZXNwYWNlX25hbWUoY29sbHR1 cC0+Y29sbG5hbWVzcGFjZSkpOwotCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTExBVEUgJXMi LCBvbmVuYW1lKTsKLQlxdW90ZU9uZU5hbWUob25lbmFtZSwgY29sbG5hbWUpOwotCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiLiVzIiwgb25lbmFtZSk7CisJYXBwZW5kU3RyaW5nSW5mb0lkZW50aWZp ZXIoYnVmLCAiIENPTExBVEUgIiwgZ2V0X25hbWVzcGFjZV9uYW1lKGNvbGx0dXAtPmNvbGxuYW1l c3BhY2UpLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmllcihidWYsICIuIiwgY29s bG5hbWUsIE5VTEwpOwogCiAJUmVsZWFzZVN5c0NhY2hlKHRwKTsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYwppbmRleCA1NTZhYjA1N2U1YS4uMWQ3NjdkZWI2YzQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKQEAgLTEzMDUyLDI1ICsxMzA1MiwxNyBAQCBwcmludFN1YnNjcmlwdHMo U3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCkKIAl9CiB9 CiAKLS8qCi0gKiBxdW90ZV9pZGVudGlmaWVyCQkJLSBRdW90ZSBhbiBpZGVudGlmaWVyIG9ubHkg aWYgbmVlZGVkCi0gKgotICogV2hlbiBxdW90ZXMgYXJlIG5lZWRlZCwgd2UgcGFsbG9jIHRoZSBy ZXF1aXJlZCBzcGFjZTsgc2xpZ2h0bHkKLSAqIHNwYWNlLXdhc3RlZnVsIGJ1dCB3ZWxsIHdvcnRo IGl0IGZvciBub3RhdGlvbmFsIHNpbXBsaWNpdHkuCi0gKi8KLWNvbnN0IGNoYXIgKgotcXVvdGVf aWRlbnRpZmllcihjb25zdCBjaGFyICppZGVudCkKK3N0YXRpYyBpbmxpbmUgYm9vbAoraXNfaWRl bnRpZmllcl9zYWZlKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgKm5xdW90ZXMpCiB7CiAJLyoKIAkg KiBDYW4gYXZvaWQgcXVvdGluZyBpZiBpZGVudCBzdGFydHMgd2l0aCBhIGxvd2VyY2FzZSBsZXR0 ZXIgb3IgdW5kZXJzY29yZQogCSAqIGFuZCBjb250YWlucyBvbmx5IGxvd2VyY2FzZSBsZXR0ZXJz LCBkaWdpdHMsIGFuZCB1bmRlcnNjb3JlcywgKmFuZCogaXMKIAkgKiBub3QgYW55IFNRTCBrZXl3 b3JkLiAgT3RoZXJ3aXNlLCBzdXBwbHkgcXVvdGVzLgogCSAqLwotCWludAkJCW5xdW90ZXMgPSAw OwogCWJvb2wJCXNhZmU7Ci0JY29uc3QgY2hhciAqcHRyOwotCWNoYXIJICAgKnJlc3VsdDsKLQlj aGFyCSAgICpvcHRyOworCisJKm5xdW90ZXMgPSAwOwogCiAJLyoKIAkgKiB3b3VsZCBsaWtlIHRv IHVzZSA8Y3R5cGUuaD4gbWFjcm9zIGhlcmUsIGJ1dCB0aGV5IG1pZ2h0IHlpZWxkIHVud2FudGVk CkBAIC0xMzA3OCw3ICsxMzA3MCw3IEBAIHF1b3RlX2lkZW50aWZpZXIoY29uc3QgY2hhciAqaWRl bnQpCiAJICovCiAJc2FmZSA9ICgoaWRlbnRbMF0gPj0gJ2EnICYmIGlkZW50WzBdIDw9ICd6Jykg fHwgaWRlbnRbMF0gPT0gJ18nKTsKIAotCWZvciAocHRyID0gaWRlbnQ7ICpwdHI7IHB0cisrKQor CWZvciAoY29uc3QgY2hhciAqcHRyID0gaWRlbnQ7ICpwdHI7IHB0cisrKQogCXsKIAkJY2hhcgkJ Y2ggPSAqcHRyOwogCkBAIC0xMzA5Miw3ICsxMzA4NCw3IEBAIHF1b3RlX2lkZW50aWZpZXIoY29u c3QgY2hhciAqaWRlbnQpCiAJCXsKIAkJCXNhZmUgPSBmYWxzZTsKIAkJCWlmIChjaCA9PSAnIicp Ci0JCQkJbnF1b3RlcysrOworCQkJCSgqbnF1b3RlcykrKzsKIAkJfQogCX0KIApAQCAtMTMxMTUs MTQgKzEzMTA3LDIwIEBAIHF1b3RlX2lkZW50aWZpZXIoY29uc3QgY2hhciAqaWRlbnQpCiAJCQlz YWZlID0gZmFsc2U7CiAJfQogCi0JaWYgKHNhZmUpCi0JCXJldHVybiBpZGVudDsJCQkvKiBubyBj aGFuZ2UgbmVlZGVkICovCisJcmV0dXJuIHNhZmU7Cit9CiAKLQlyZXN1bHQgPSAoY2hhciAqKSBw YWxsb2Moc3RybGVuKGlkZW50KSArIG5xdW90ZXMgKyAyICsgMSk7CitzdGF0aWMgaW5saW5lIGNv bnN0IGNoYXIgKgorcXVvdGVfaWRlbnRpZmllcl9pbnRlcm5hbChjb25zdCBjaGFyICppZGVudCwg aW50IG5xdW90ZXMsIGNoYXIgKipyZXN1bHQpCit7CisJY2hhcgkgICAqb3B0cjsKIAotCW9wdHIg PSByZXN1bHQ7CisJaWYgKCpyZXN1bHQgPT0gTlVMTCkKKwkJKnJlc3VsdCA9IChjaGFyICopIHBh bGxvYyhzdHJsZW4oaWRlbnQpICsgbnF1b3RlcyArIDIgKyAxKTsKKworCW9wdHIgPSAqcmVzdWx0 OwogCSpvcHRyKysgPSAnIic7Ci0JZm9yIChwdHIgPSBpZGVudDsgKnB0cjsgcHRyKyspCisJZm9y IChjb25zdCBjaGFyICpwdHIgPSBpZGVudDsgKnB0cjsgcHRyKyspCiAJewogCQljaGFyCQljaCA9 ICpwdHI7CiAKQEAgLTEzMTMzLDcgKzEzMTMxLDEwNyBAQCBxdW90ZV9pZGVudGlmaWVyKGNvbnN0 IGNoYXIgKmlkZW50KQogCSpvcHRyKysgPSAnIic7CiAJKm9wdHIgPSAnXDAnOwogCi0JcmV0dXJu IHJlc3VsdDsKKwlyZXR1cm4gKnJlc3VsdDsKK30KKworLyoKKyAqIHF1b3RlX2lkZW50aWZpZXIJ CQktIFF1b3RlIGFuIGlkZW50aWZpZXIgb25seSBpZiBuZWVkZWQKKyAqCisgKiBXaGVuIHF1b3Rl cyBhcmUgbmVlZGVkLCB3ZSBwYWxsb2MgdGhlIHJlcXVpcmVkIHNwYWNlOyBzbGlnaHRseQorICog c3BhY2Utd2FzdGVmdWwgYnV0IHdlbGwgd29ydGggaXQgZm9yIG5vdGF0aW9uYWwgc2ltcGxpY2l0 eS4KKyAqLworY29uc3QgY2hhciAqCitxdW90ZV9pZGVudGlmaWVyKGNvbnN0IGNoYXIgKmlkZW50 KQoreworCWludAkJCW5xdW90ZXM7CisJYm9vbAkJc2FmZTsKKwljaGFyCSAgICpyZXN1bHQgPSBO VUxMOworCisJc2FmZSA9IGlzX2lkZW50aWZpZXJfc2FmZShpZGVudCwgJm5xdW90ZXMpOworCWlm IChzYWZlKQorCQlyZXR1cm4gaWRlbnQ7CQkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLworCisJcmV0 dXJuIHF1b3RlX2lkZW50aWZpZXJfaW50ZXJuYWwoaWRlbnQsIG5xdW90ZXMsICZyZXN1bHQpOwor fQorCisvKgorICogYXBwZW5kU3RyaW5nSW5mb0lkZW50aWZpZXIKKyAqICAgICAgQXBwZW5kIGFu IFNRTCBpZGVudGlmaWVyIHRvIGEgU3RyaW5nSW5mbywgcXVvdGluZyBpZiByZXF1aXJlZC4KKyAq CisgKiBUaGlzIGJlaGF2ZXMgbGlrZSB3cml0aW5nIHByZWZpeCArIHF1b3RlX2lkZW50aWZpZXIo aWRlbnQpICsgc3VmZml4IGludG8KKyAqIHRoZSBTdHJpbmdJbmZvLCBidXQgZW1pdHMgdGhlIGlk ZW50aWZpZXIgZGlyZWN0bHkgaW50byB0aGUgYnVmZmVyIHRvIGF2b2lkCisgKiBhbiBpbnRlcm1l ZGlhdGUgcGFsbG9jLiAgcHJlZml4IGFuZCBzdWZmaXggbWF5IGJlIE5VTEwuCisgKgorICogVGhl IGlkZW50aWZpZXIgaXMgY29waWVkIHZlcmJhdGltIGlmIGl0IGlzIHNhZmUgdG8gbGVhdmUgdW5x dW90ZWQ7IG90aGVyd2lzZQorICogaXQgaXMgd3JpdHRlbiB3aXRoIGRvdWJsZSBxdW90ZXMgYW5k IGVtYmVkZGVkIGRvdWJsZSBxdW90ZXMgYXJlIGRvdWJsZWQuCisgKiBRdW90aW5nIHJ1bGVzIGFy ZSBsb2NhbCB0byBydWxldXRpbHMsIHNvIHRoaXMgaGVscGVyIGlzIGRlZmluZWQgaGVyZSByYXRo ZXIKKyAqIHRoYW4gaW4gc3RyaW5naW5mby5jLgorICovCisKK3ZvaWQKK2FwcGVuZFN0cmluZ0lu Zm9JZGVudGlmaWVyKFN0cmluZ0luZm8gc3RyLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkg ICBjb25zdCBjaGFyICppZGVudCwgY29uc3QgY2hhciAqc3VmZml4KQoreworCWludAkJCW5xdW90 ZXM7CisJYm9vbAkJc2FmZTsKKwlpbnQJCQlpZGVudF9sZW47CisJaW50CQkJcHJlZml4X2xlbiA9 IDA7CisJaW50CQkJc3VmZml4X2xlbiA9IDA7CisKKwlzYWZlID0gaXNfaWRlbnRpZmllcl9zYWZl KGlkZW50LCAmbnF1b3Rlcyk7CisJaWYgKHNhZmUpCisJCWlkZW50X2xlbiA9IHN0cmxlbihpZGVu dCk7CisJZWxzZQorCQlpZGVudF9sZW4gPSBzdHJsZW4oaWRlbnQpICsgbnF1b3RlcyArIDI7CS8q IHF1b3RlcyArIHBvc3NpYmxlCisJCQkJCQkJCQkJCQkJICogZXNjYXBlcyAqLworCisJaWYgKHBy ZWZpeCAhPSBOVUxMKQorCQlwcmVmaXhfbGVuID0gc3RybGVuKHByZWZpeCk7CisKKwlpZiAoc3Vm Zml4ICE9IE5VTEwpCisJCXN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTsKKworCWVubGFyZ2VT dHJpbmdJbmZvKHN0ciwgaWRlbnRfbGVuICsgcHJlZml4X2xlbiArIHN1ZmZpeF9sZW4gKyAxKTsJ LyogKzEgZm9yIHRyYWlsaW5nIG51bGwgKi8KKworCWlmIChwcmVmaXggIT0gTlVMTCkKKwkJYXBw ZW5kQmluYXJ5U3RyaW5nSW5mbyhzdHIsIHByZWZpeCwgcHJlZml4X2xlbik7CisKKwlpZiAoc2Fm ZSkKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhzdHIsIGlkZW50LCBpZGVudF9sZW4pOworCWVs c2UKKwl7CisJCWNoYXIJICAgKnJlc3VsdCA9IHN0ci0+ZGF0YSArIHN0ci0+bGVuOworCisJCSh2 b2lkKSBxdW90ZV9pZGVudGlmaWVyX2ludGVybmFsKGlkZW50LCBucXVvdGVzLCAmcmVzdWx0KTsK KwkJc3RyLT5sZW4gKz0gaWRlbnRfbGVuOworCQlzdHItPmRhdGFbc3RyLT5sZW5dID0gJ1wwJzsK Kwl9CisKKwlpZiAoc3VmZml4ICE9IE5VTEwpCisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oc3Ry LCBzdWZmaXgsIHN1ZmZpeF9sZW4pOworfQorCisvKgorICogYXBwZW5kU3RyaW5nSW5mb1F1YWxp ZmllZElkZW50aWZpZXIKKyAqICAgICAgQXBwZW5kIGEgKHBvc3NpYmx5KSBxdWFsaWZpZWQgU1FM IGlkZW50aWZpZXIgdG8gYSBTdHJpbmdJbmZvLgorICoKKyAqIFdyaXRlcyBwcmVmaXggKyBxdWFs aWZpZXIgKyAnLicgKyBpZGVudCArIHN1ZmZpeCwgcXVvdGluZyBlYWNoIGlkZW50aWZpZXIKKyAq IGNvbXBvbmVudCBpZiBuZWVkZWQuICBJZiBubyBxdWFsaWZpZXIgaXMgZ2l2ZW4sIG9ubHkgaWRl bnQgKHBsdXMgb3B0aW9uYWwKKyAqIHByZWZpeC9zdWZmaXgpIGlzIGFwcGVuZGVkLiAgcHJlZml4 IGFuZCBzdWZmaXggbWF5IGJlIE5VTEwuCisgKgorICogVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdy YXBwZXIgYXJvdW5kIGFwcGVuZFN0cmluZ0luZm9JZGVudGlmaWVyKCkuCisgKi8KK3ZvaWQKK2Fw cGVuZFN0cmluZ0luZm9RdWFsaWZpZWRJZGVudGlmaWVyKFN0cmluZ0luZm8gc3RyLCBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQljb25zdCBjaGFyICpxdWFsaWZpZXIsIGNvbnN0IGNoYXIg KmlkZW50LAorCQkJCQkJCQkJY29uc3QgY2hhciAqc3VmZml4KQoreworCWlmIChxdWFsaWZpZXIp CisJeworCQlhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmllcihzdHIsIHByZWZpeCwgcXVhbGlmaWVy LCAiLiIpOworCQlwcmVmaXggPSBOVUxMOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmll cihzdHIsIHByZWZpeCwgaWRlbnQsIHN1ZmZpeCk7CiB9CiAKIC8qCkBAIC0xMzE1MCw4ICsxMzI0 OCw4IEBAIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGNvbnN0IGNoYXIgKnF1YWxpZmllciwK IAogCWluaXRTdHJpbmdJbmZvKCZidWYpOwogCWlmIChxdWFsaWZpZXIpCi0JCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIocXVhbGlmaWVyKSk7Ci0JYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmYnVmLCBxdW90ZV9pZGVudGlmaWVyKGlkZW50KSk7CisJCWFwcGVu ZFN0cmluZ0luZm9JZGVudGlmaWVyKCZidWYsIE5VTEwsIHF1YWxpZmllciwgIi4iKTsKKwlhcHBl bmRTdHJpbmdJbmZvSWRlbnRpZmllcigmYnVmLCBOVUxMLCBpZGVudCwgTlVMTCk7CiAJcmV0dXJu IGJ1Zi5kYXRhOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5o IGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAppbmRleCBjZTYyODVhMmMwMy4uZmY0YmE3 MjY1YzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmgKKysrIGIvc3Jj L2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaApAQCAtODQsNiArODQsMTIgQEAgZXh0ZXJuIHZvaWQg Z2VuZXJhdGVfb3BlcmF0b3JfY2xhdXNlKFN0cmluZ0luZm8gYnVmLAogCQkJCQkJCQkJIGNvbnN0 IGNoYXIgKmxlZnRvcCwgT2lkIGxlZnRvcHR5cGUsCiAJCQkJCQkJCQkgT2lkIG9wb2lkLAogCQkJ CQkJCQkJIGNvbnN0IGNoYXIgKnJpZ2h0b3AsIE9pZCByaWdodG9wdHlwZSk7CitleHRlcm4gdm9p ZCBhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmllcihTdHJpbmdJbmZvIHN0ciwgY29uc3QgY2hhciAq cHJlZml4LCBjb25zdCBjaGFyICppZGVudCwgY29uc3QgY2hhciAqc3VmZml4KTsKK2V4dGVybiB2 b2lkIGFwcGVuZFN0cmluZ0luZm9RdWFsaWZpZWRJZGVudGlmaWVyKFN0cmluZ0luZm8gc3RyLAor CQkJCQkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJY29uc3QgY2hhciAq cXVhbGlmaWVyLAorCQkJCQkJCQkJCQkJY29uc3QgY2hhciAqaWRlbnQsCisJCQkJCQkJCQkJCQlj b25zdCBjaGFyICpzdWZmaXgpOwogCiAvKiB2YXJjaGFyLmMgKi8KIGV4dGVybiBpbnQJYnBjaGFy dHJ1ZWxlbihjaGFyICpzLCBpbnQgbGVuKTsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --00000000000075ed310643c74187 Content-Type: application/octet-stream; name="v1-0002-Apply-appendStringInfoIdentifier-in-ri_triggers.c.patch" Content-Disposition: attachment; filename="v1-0002-Apply-appendStringInfoIdentifier-in-ri_triggers.c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mi2yofe41 RnJvbSAwNWI2N2Y3MmE4ZmMwYjQ1NzhmZWQ2ZmI3ZjgyYjhhNDIzYTdkZDFkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiQ2hhbyBMaSAoRXZhbikiIDxsaWNAaGlnaGdvLmNvbT4KRGF0 ZTogTW9uLCAxNyBOb3YgMjAyNSAxMjowOToxMiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjEgMi8y XSBBcHBseSBhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmllciBpbiByaV90cmlnZ2Vycy5jCgpBdXRo b3I6IENoYW8gTGkgPGxpY0BoaWdoZ28uY29tPgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21h dHZpZXcuYyAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMu YyB8IDE4OCArKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMgICB8ICAyOCArKysrLQogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMu aCAgICAgICAgfCAgIDkgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMTE5IGluc2VydGlvbnMoKyksIDEx MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3 LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5kZXggZWY3YzBkNjI0ZjEuLmYx YWQ1YThlMDU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKKysr IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0dmlldy5jCkBAIC03OTcsOSArNzk3LDkgQEAgcmVm cmVzaF9ieV9tYXRjaF9tZXJnZShPaWQgbWF0dmlld09pZCwgT2lkIHRlbXBPaWQsIE9pZCByZWxv d25lciwKIAkJCQkJCQkJCQkJCQkgTmFtZVN0cihhdHRyLT5hdHRuYW1lKSk7CiAKIAkJCQlnZW5l cmF0ZV9vcGVyYXRvcl9jbGF1c2UoJnF1ZXJ5YnVmLAotCQkJCQkJCQkJCSBsZWZ0b3AsIGF0dHJ0 eXBlLAorCQkJCQkJCQkJCSBOVUxMLCBsZWZ0b3AsIGF0dHJ0eXBlLCBmYWxzZSwKIAkJCQkJCQkJ CQkgb3AsCi0JCQkJCQkJCQkJIHJpZ2h0b3AsIGF0dHJ0eXBlKTsKKwkJCQkJCQkJCQkgTlVMTCwg cmlnaHRvcCwgYXR0cnR5cGUsIGZhbHNlKTsKIAogCQkJCWZvdW5kVW5pcXVlSW5kZXggPSB0cnVl OwogCQkJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCA5ZTEzZjUyNjk5NC4u M2NjNGRjMmI3YzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vy cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yaV90cmlnZ2Vycy5jCkBAIC0xOTYsOSAr MTk2LDkgQEAgc3RhdGljIHZvaWQgcXVvdGVPbmVOYW1lKGNoYXIgKmJ1ZmZlciwgY29uc3QgY2hh ciAqbmFtZSk7CiBzdGF0aWMgdm9pZCBxdW90ZVJlbGF0aW9uTmFtZShjaGFyICpidWZmZXIsIFJl bGF0aW9uIHJlbCk7CiBzdGF0aWMgdm9pZCByaV9HZW5lcmF0ZVF1YWwoU3RyaW5nSW5mbyBidWYs CiAJCQkJCQkJY29uc3QgY2hhciAqc2VwLAotCQkJCQkJCWNvbnN0IGNoYXIgKmxlZnRvcCwgT2lk IGxlZnRvcHR5cGUsCisJCQkJCQkJY29uc3QgY2hhciAqbGVmdG9wcHJlZml4LCBjb25zdCBjaGFy ICpsZWZ0b3AsIE9pZCBsZWZ0b3B0eXBlLCBib29sIHF1b3RlbGVmdG9wLAogCQkJCQkJCU9pZCBv cG9pZCwKLQkJCQkJCQljb25zdCBjaGFyICpyaWdodG9wLCBPaWQgcmlnaHRvcHR5cGUpOworCQkJ CQkJCWNvbnN0IGNoYXIgKnJpZ2h0b3BwcmVmaXgsIGNvbnN0IGNoYXIgKnJpZ2h0b3AsIE9pZCBy aWdodG9wdHlwZSwgYm9vbCBxdW90ZXJpZ2h0b3ApOwogc3RhdGljIHZvaWQgcmlfR2VuZXJhdGVR dWFsQ29sbGF0aW9uKFN0cmluZ0luZm8gYnVmLCBPaWQgY29sbGF0aW9uKTsKIHN0YXRpYyBpbnQJ cmlfTnVsbENoZWNrKFR1cGxlRGVzYyB0dXBEZXNjLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJ CQkJCSBjb25zdCBSSV9Db25zdHJhaW50SW5mbyAqcmlpbmZvLCBib29sIHJlbF9pc19wayk7CkBA IC0zNTgsNyArMzU4LDcgQEAgUklfRktleV9jaGVjayhUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEpCiAJ ewogCQlTdHJpbmdJbmZvRGF0YSBxdWVyeWJ1ZjsKIAkJY2hhcgkJcGtyZWxuYW1lW01BWF9RVU9U RURfUkVMX05BTUVfTEVOXTsKLQkJY2hhcgkJYXR0bmFtZVtNQVhfUVVPVEVEX05BTUVfTEVOXTsK KwkJY29uc3QgY2hhciAqYXR0bmFtZTsKIAkJY2hhcgkJcGFyYW1uYW1lWzE2XTsKIAkJY29uc3Qg Y2hhciAqcXVlcnlzZXA7CiAJCU9pZAkJCXF1ZXJ5b2lkc1tSSV9NQVhfTlVNS0VZU107CkBAIC0z OTMsMTEgKzM5MywxMSBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkJ cXVvdGVSZWxhdGlvbk5hbWUocGtyZWxuYW1lLCBwa19yZWwpOwogCQlpZiAocmlpbmZvLT5oYXNw ZXJpb2QpCiAJCXsKLQkJCXF1b3RlT25lTmFtZShhdHRuYW1lLAotCQkJCQkJIFJJQXR0TmFtZShw a19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tyaWluZm8tPm5rZXlzIC0gMV0pKTsKKwkJCWF0dG5h bWUgPSBSSUF0dE5hbWUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNbcmlpbmZvLT5ua2V5cyAt IDFdKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9JZGVudGlmaWVyKCZxdWVyeWJ1ZiwgIlNFTEVDVCAx IEZST00gKFNFTEVDVCAiLCBhdHRuYW1lLCAiIEFTIHIgRlJPTSAiKTsKIAkJCWFwcGVuZFN0cmlu Z0luZm8oJnF1ZXJ5YnVmLAotCQkJCQkJCSAiU0VMRUNUIDEgRlJPTSAoU0VMRUNUICVzIEFTIHIg RlJPTSAlcyVzIHgiLAotCQkJCQkJCSBhdHRuYW1lLCBwa19vbmx5LCBwa3JlbG5hbWUpOworCQkJ CQkJCSAiJXMlcyB4IiwKKwkJCQkJCQkgcGtfb25seSwgcGtyZWxuYW1lKTsKIAkJfQogCQllbHNl CiAJCXsKQEAgLTQxMCwxMyArNDEwLDEyIEBAIFJJX0ZLZXlfY2hlY2soVHJpZ2dlckRhdGEgKnRy aWdkYXRhKQogCQkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlwZShwa19yZWwsIHJpaW5mby0+cGtf YXR0bnVtc1tpXSk7CiAJCQlPaWQJCQlma190eXBlID0gUklBdHRUeXBlKGZrX3JlbCwgcmlpbmZv LT5ma19hdHRudW1zW2ldKTsKIAotCQkJcXVvdGVPbmVOYW1lKGF0dG5hbWUsCi0JCQkJCQkgUklB dHROYW1lKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKSk7CisJCQlhdHRuYW1lID0gUklB dHROYW1lKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKIAkJCXNwcmludGYocGFyYW1u YW1lLCAiJCVkIiwgaSArIDEpOwogCQkJcmlfR2VuZXJhdGVRdWFsKCZxdWVyeWJ1ZiwgcXVlcnlz ZXAsCi0JCQkJCQkJYXR0bmFtZSwgcGtfdHlwZSwKKwkJCQkJCQlOVUxMLCBhdHRuYW1lLCBwa190 eXBlLCB0cnVlLAogCQkJCQkJCXJpaW5mby0+cGZfZXFfb3Byc1tpXSwKLQkJCQkJCQlwYXJhbW5h bWUsIGZrX3R5cGUpOworCQkJCQkJCU5VTEwsIHBhcmFtbmFtZSwgZmtfdHlwZSwgZmFsc2UpOwog CQkJcXVlcnlzZXAgPSAiQU5EIjsKIAkJCXF1ZXJ5b2lkc1tpXSA9IGZrX3R5cGU7CiAJCX0KQEAg LTQyOCw5ICs0MjcsOSBAQCBSSV9GS2V5X2NoZWNrKFRyaWdnZXJEYXRhICp0cmlnZGF0YSkKIAkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCAiKSB4MSBIQVZJTkcgIik7CiAJCQlz cHJpbnRmKHBhcmFtbmFtZSwgIiQlZCIsIHJpaW5mby0+bmtleXMpOwogCQkJcmlfR2VuZXJhdGVR dWFsKCZxdWVyeWJ1ZiwgIiIsCi0JCQkJCQkJcGFyYW1uYW1lLCBma190eXBlLAorCQkJCQkJCU5V TEwsIHBhcmFtbmFtZSwgZmtfdHlwZSwgZmFsc2UsCiAJCQkJCQkJcmlpbmZvLT5hZ2dlZF9wZXJp b2RfY29udGFpbmVkX2J5X29wZXIsCi0JCQkJCQkJInBnX2NhdGFsb2cucmFuZ2VfYWdnIiwgQU5Z TVVMVElSQU5HRU9JRCk7CisJCQkJCQkJTlVMTCwgInBnX2NhdGFsb2cucmFuZ2VfYWdnIiwgQU5Z TVVMVElSQU5HRU9JRCwgZmFsc2UpOwogCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcXVlcnli dWYsICIoeDEucikiKTsKIAkJfQogCkBAIC01MjgsNyArNTI3LDcgQEAgcmlfQ2hlY2tfUGtfTWF0 Y2goUmVsYXRpb24gcGtfcmVsLCBSZWxhdGlvbiBma19yZWwsCiAJewogCQlTdHJpbmdJbmZvRGF0 YSBxdWVyeWJ1ZjsKIAkJY2hhcgkJcGtyZWxuYW1lW01BWF9RVU9URURfUkVMX05BTUVfTEVOXTsK LQkJY2hhcgkJYXR0bmFtZVtNQVhfUVVPVEVEX05BTUVfTEVOXTsKKwkJY29uc3QgY2hhciAqYXR0 bmFtZTsKIAkJY2hhcgkJcGFyYW1uYW1lWzE2XTsKIAkJY29uc3QgY2hhciAqcXVlcnlzZXA7CiAJ CWNvbnN0IGNoYXIgKnBrX29ubHk7CkBAIC01NjMsMTEgKzU2MiwxMSBAQCByaV9DaGVja19Qa19N YXRjaChSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGZrX3JlbCwKIAkJcXVvdGVSZWxhdGlvbk5h bWUocGtyZWxuYW1lLCBwa19yZWwpOwogCQlpZiAocmlpbmZvLT5oYXNwZXJpb2QpCiAJCXsKLQkJ CXF1b3RlT25lTmFtZShhdHRuYW1lLCBSSUF0dE5hbWUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51 bXNbcmlpbmZvLT5ua2V5cyAtIDFdKSk7Ci0KKwkJCWF0dG5hbWUgPSBSSUF0dE5hbWUocGtfcmVs LCByaWluZm8tPnBrX2F0dG51bXNbcmlpbmZvLT5ua2V5cyAtIDFdKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm9JZGVudGlmaWVyKCZxdWVyeWJ1ZiwgIlNFTEVDVCAxIEZST00gKFNFTEVDVCAiLCBhdHRu YW1lLCAiIEFTIHIgRlJPTSAiKTsKIAkJCWFwcGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLAotCQkJ CQkJCSAiU0VMRUNUIDEgRlJPTSAoU0VMRUNUICVzIEFTIHIgRlJPTSAlcyVzIHgiLAotCQkJCQkJ CSBhdHRuYW1lLCBwa19vbmx5LCBwa3JlbG5hbWUpOworCQkJCQkJCSAiJXMlcyB4IiwKKwkJCQkJ CQkgcGtfb25seSwgcGtyZWxuYW1lKTsKIAkJfQogCQllbHNlCiAJCXsKQEAgLTU3OSwxMyArNTc4 LDEyIEBAIHJpX0NoZWNrX1BrX01hdGNoKFJlbGF0aW9uIHBrX3JlbCwgUmVsYXRpb24gZmtfcmVs LAogCQl7CiAJCQlPaWQJCQlwa190eXBlID0gUklBdHRUeXBlKHBrX3JlbCwgcmlpbmZvLT5wa19h dHRudW1zW2ldKTsKIAotCQkJcXVvdGVPbmVOYW1lKGF0dG5hbWUsCi0JCQkJCQkgUklBdHROYW1l KHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKSk7CisJCQlhdHRuYW1lID0gUklBdHROYW1l KHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKIAkJCXNwcmludGYocGFyYW1uYW1lLCAi JCVkIiwgaSArIDEpOwogCQkJcmlfR2VuZXJhdGVRdWFsKCZxdWVyeWJ1ZiwgcXVlcnlzZXAsCi0J CQkJCQkJYXR0bmFtZSwgcGtfdHlwZSwKKwkJCQkJCQlOVUxMLCBhdHRuYW1lLCBwa190eXBlLCB0 cnVlLAogCQkJCQkJCXJpaW5mby0+cHBfZXFfb3Byc1tpXSwKLQkJCQkJCQlwYXJhbW5hbWUsIHBr X3R5cGUpOworCQkJCQkJCU5VTEwsIHBhcmFtbmFtZSwgcGtfdHlwZSwgZmFsc2UpOwogCQkJcXVl cnlzZXAgPSAiQU5EIjsKIAkJCXF1ZXJ5b2lkc1tpXSA9IHBrX3R5cGU7CiAJCX0KQEAgLTU5Nyw5 ICs1OTUsOSBAQCByaV9DaGVja19Qa19NYXRjaChSZWxhdGlvbiBwa19yZWwsIFJlbGF0aW9uIGZr X3JlbCwKIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCAiKSB4MSBIQVZJTkcg Iik7CiAJCQlzcHJpbnRmKHBhcmFtbmFtZSwgIiQlZCIsIHJpaW5mby0+bmtleXMpOwogCQkJcmlf R2VuZXJhdGVRdWFsKCZxdWVyeWJ1ZiwgIiIsCi0JCQkJCQkJcGFyYW1uYW1lLCBma190eXBlLAor CQkJCQkJCU5VTEwsIHBhcmFtbmFtZSwgZmtfdHlwZSwgZmFsc2UsCiAJCQkJCQkJcmlpbmZvLT5h Z2dlZF9wZXJpb2RfY29udGFpbmVkX2J5X29wZXIsCi0JCQkJCQkJInBnX2NhdGFsb2cucmFuZ2Vf YWdnIiwgQU5ZTVVMVElSQU5HRU9JRCk7CisJCQkJCQkJTlVMTCwgInBnX2NhdGFsb2cucmFuZ2Vf YWdnIiwgQU5ZTVVMVElSQU5HRU9JRCwgZmFsc2UpOwogCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmcXVlcnlidWYsICIoeDEucikiKTsKIAkJfQogCkBAIC03NTcsNyArNzU1LDcgQEAgcmlfcmVz dHJpY3QoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX25vX2FjdGlvbikKIAkJU3RyaW5n SW5mb0RhdGEgcXVlcnlidWY7CiAJCWNoYXIJCXBrcmVsbmFtZVtNQVhfUVVPVEVEX1JFTF9OQU1F X0xFTl07CiAJCWNoYXIJCWZrcmVsbmFtZVtNQVhfUVVPVEVEX1JFTF9OQU1FX0xFTl07Ci0JCWNo YXIJCWF0dG5hbWVbTUFYX1FVT1RFRF9OQU1FX0xFTl07CisJCWNvbnN0IGNoYXIgKmF0dG5hbWU7 CiAJCWNoYXIJCXBlcmlvZGF0dG5hbWVbTUFYX1FVT1RFRF9OQU1FX0xFTl07CiAJCWNoYXIJCXBh cmFtbmFtZVsxNl07CiAJCWNvbnN0IGNoYXIgKnF1ZXJ5c2VwOwpAQCAtNzg0LDEzICs3ODIsMTIg QEAgcmlfcmVzdHJpY3QoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX25vX2FjdGlvbikK IAkJCU9pZAkJCXBrX3R5cGUgPSBSSUF0dFR5cGUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNb aV0pOwogCQkJT2lkCQkJZmtfdHlwZSA9IFJJQXR0VHlwZShma19yZWwsIHJpaW5mby0+ZmtfYXR0 bnVtc1tpXSk7CiAKLQkJCXF1b3RlT25lTmFtZShhdHRuYW1lLAotCQkJCQkJIFJJQXR0TmFtZShm a19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSkpOworCQkJYXR0bmFtZSA9IFJJQXR0TmFtZShm a19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7CiAJCQlzcHJpbnRmKHBhcmFtbmFtZSwgIiQl ZCIsIGkgKyAxKTsKIAkJCXJpX0dlbmVyYXRlUXVhbCgmcXVlcnlidWYsIHF1ZXJ5c2VwLAotCQkJ CQkJCXBhcmFtbmFtZSwgcGtfdHlwZSwKKwkJCQkJCQlOVUxMLCBwYXJhbW5hbWUsIHBrX3R5cGUs IGZhbHNlLAogCQkJCQkJCXJpaW5mby0+cGZfZXFfb3Byc1tpXSwKLQkJCQkJCQlhdHRuYW1lLCBm a190eXBlKTsKKwkJCQkJCQlOVUxMLCBhdHRuYW1lLCBma190eXBlLCB0cnVlKTsKIAkJCXF1ZXJ5 c2VwID0gIkFORCI7CiAJCQlxdWVyeW9pZHNbaV0gPSBwa190eXBlOwogCQl9CkBAIC04MjgsNyAr ODI1LDcgQEAgcmlfcmVzdHJpY3QoVHJpZ2dlckRhdGEgKnRyaWdkYXRhLCBib29sIGlzX25vX2Fj dGlvbikKIAkJCWNoYXIJICAgKnBrX29ubHkgPSBwa19yZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBS RUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFID8KIAkJCQkiIiA6ICJPTkxZICI7CiAKLQkJCXF1b3Rl T25lTmFtZShhdHRuYW1lLCBSSUF0dE5hbWUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbcmlp bmZvLT5ua2V5cyAtIDFdKSk7CisJCQlhdHRuYW1lID0gUklBdHROYW1lKGZrX3JlbCwgcmlpbmZv LT5ma19hdHRudW1zW3JpaW5mby0+bmtleXMgLSAxXSk7CiAJCQlzcHJpbnRmKHBhcmFtbmFtZSwg IiQlZCIsIHJpaW5mby0+bmtleXMpOwogCiAJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZxdWVy eWJ1ZiwgIiBBTkQgTk9UIGNvYWxlc2NlKCIpOwpAQCAtODM3LDkgKzgzNCw5IEBAIHJpX3Jlc3Ry aWN0KFRyaWdnZXJEYXRhICp0cmlnZGF0YSwgYm9vbCBpc19ub19hY3Rpb24pCiAJCQlpbml0U3Ry aW5nSW5mbygmaW50ZXJzZWN0YnVmKTsKIAkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZpbnRlcnNl Y3RidWYsICcoJyk7CiAJCQlyaV9HZW5lcmF0ZVF1YWwoJmludGVyc2VjdGJ1ZiwgIiIsCi0JCQkJ CQkJYXR0bmFtZSwgZmtfcGVyaW9kX3R5cGUsCisJCQkJCQkJTlVMTCwgYXR0bmFtZSwgZmtfcGVy aW9kX3R5cGUsIHRydWUsCiAJCQkJCQkJcmlpbmZvLT5wZXJpb2RfaW50ZXJzZWN0X29wZXIsCi0J CQkJCQkJcGFyYW1uYW1lLCBwa19wZXJpb2RfdHlwZSk7CisJCQkJCQkJTlVMTCwgcGFyYW1uYW1l LCBwa19wZXJpb2RfdHlwZSwgZmFsc2UpOwogCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmludGVy c2VjdGJ1ZiwgJyknKTsKIAogCQkJLyogRmluZCB0aGUgcmVtYWluaW5nIGhpc3RvcnkgKi8KQEAg LTg1NywyMiArODU0LDIxIEBAIHJpX3Jlc3RyaWN0KFRyaWdnZXJEYXRhICp0cmlnZGF0YSwgYm9v bCBpc19ub19hY3Rpb24pCiAJCQl7CiAJCQkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlwZShwa19y ZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7CiAKLQkJCQlxdW90ZU9uZU5hbWUoYXR0bmFtZSwK LQkJCQkJCQkgUklBdHROYW1lKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKSk7CisJCQkJ YXR0bmFtZSA9IFJJQXR0TmFtZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7CiAJCQkJ c3ByaW50ZihwYXJhbW5hbWUsICIkJWQiLCBpICsgMSk7CiAJCQkJcmlfR2VuZXJhdGVRdWFsKCZy ZXBsYWNlbWVudHNidWYsIHF1ZXJ5c2VwLAotCQkJCQkJCQlwYXJhbW5hbWUsIHBrX3R5cGUsCisJ CQkJCQkJCU5VTEwsIHBhcmFtbmFtZSwgcGtfdHlwZSwgZmFsc2UsCiAJCQkJCQkJCXJpaW5mby0+ cHBfZXFfb3Byc1tpXSwKLQkJCQkJCQkJYXR0bmFtZSwgcGtfdHlwZSk7CisJCQkJCQkJCU5VTEws IGF0dG5hbWUsIHBrX3R5cGUsIHRydWUpOwogCQkJCXF1ZXJ5c2VwID0gIkFORCI7CiAJCQkJcXVl cnlvaWRzW2ldID0gcGtfdHlwZTsKIAkJCX0KIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnJl cGxhY2VtZW50c2J1ZiwgIiBGT1IgS0VZIFNIQVJFIE9GIHkpIHkyKSIpOwogCiAJCQlyaV9HZW5l cmF0ZVF1YWwoJnF1ZXJ5YnVmLCAiIiwKLQkJCQkJCQlpbnRlcnNlY3RidWYuZGF0YSwgZmtfcGVy aW9kX3R5cGUsCisJCQkJCQkJTlVMTCwgaW50ZXJzZWN0YnVmLmRhdGEsIGZrX3BlcmlvZF90eXBl LCBmYWxzZSwKIAkJCQkJCQlyaWluZm8tPmFnZ2VkX3BlcmlvZF9jb250YWluZWRfYnlfb3BlciwK LQkJCQkJCQlyZXBsYWNlbWVudHNidWYuZGF0YSwgQU5ZTVVMVElSQU5HRU9JRCk7CisJCQkJCQkJ TlVMTCwgcmVwbGFjZW1lbnRzYnVmLmRhdGEsIEFOWU1VTFRJUkFOR0VPSUQsIGZhbHNlKTsKIAkJ CS8qIGVuZCBvZiBjb2FsZXNjZTogKi8KIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5 YnVmLCAiLCBmYWxzZSkiKTsKIAkJfQpAQCAtOTQ0LDcgKzk0MCw3IEBAIFJJX0ZLZXlfY2FzY2Fk ZV9kZWwoUEdfRlVOQ1RJT05fQVJHUykKIAl7CiAJCVN0cmluZ0luZm9EYXRhIHF1ZXJ5YnVmOwog CQljaGFyCQlma3JlbG5hbWVbTUFYX1FVT1RFRF9SRUxfTkFNRV9MRU5dOwotCQljaGFyCQlhdHRu YW1lW01BWF9RVU9URURfTkFNRV9MRU5dOworCQljb25zdCBjaGFyICphdHRuYW1lOwogCQljaGFy CQlwYXJhbW5hbWVbMTZdOwogCQljb25zdCBjaGFyICpxdWVyeXNlcDsKIAkJT2lkCQkJcXVlcnlv aWRzW1JJX01BWF9OVU1LRVlTXTsKQEAgLTk2OSwxMyArOTY1LDEyIEBAIFJJX0ZLZXlfY2FzY2Fk ZV9kZWwoUEdfRlVOQ1RJT05fQVJHUykKIAkJCU9pZAkJCXBrX3R5cGUgPSBSSUF0dFR5cGUocGtf cmVsLCByaWluZm8tPnBrX2F0dG51bXNbaV0pOwogCQkJT2lkCQkJZmtfdHlwZSA9IFJJQXR0VHlw ZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7CiAKLQkJCXF1b3RlT25lTmFtZShhdHRu YW1lLAotCQkJCQkJIFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSkpOwor CQkJYXR0bmFtZSA9IFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7CiAJ CQlzcHJpbnRmKHBhcmFtbmFtZSwgIiQlZCIsIGkgKyAxKTsKIAkJCXJpX0dlbmVyYXRlUXVhbCgm cXVlcnlidWYsIHF1ZXJ5c2VwLAotCQkJCQkJCXBhcmFtbmFtZSwgcGtfdHlwZSwKKwkJCQkJCQlO VUxMLCBwYXJhbW5hbWUsIHBrX3R5cGUsIGZhbHNlLAogCQkJCQkJCXJpaW5mby0+cGZfZXFfb3By c1tpXSwKLQkJCQkJCQlhdHRuYW1lLCBma190eXBlKTsKKwkJCQkJCQlOVUxMLCBhdHRuYW1lLCBm a190eXBlLCB0cnVlKTsKIAkJCXF1ZXJ5c2VwID0gIkFORCI7CiAJCQlxdWVyeW9pZHNbaV0gPSBw a190eXBlOwogCQl9CkBAIC0xMDUwLDcgKzEwNDUsNyBAQCBSSV9GS2V5X2Nhc2NhZGVfdXBkKFBH X0ZVTkNUSU9OX0FSR1MpCiAJCVN0cmluZ0luZm9EYXRhIHF1ZXJ5YnVmOwogCQlTdHJpbmdJbmZv RGF0YSBxdWFsYnVmOwogCQljaGFyCQlma3JlbG5hbWVbTUFYX1FVT1RFRF9SRUxfTkFNRV9MRU5d OwotCQljaGFyCQlhdHRuYW1lW01BWF9RVU9URURfTkFNRV9MRU5dOworCQljb25zdCBjaGFyICph dHRuYW1lOwogCQljaGFyCQlwYXJhbW5hbWVbMTZdOwogCQljb25zdCBjaGFyICpxdWVyeXNlcDsK IAkJY29uc3QgY2hhciAqcXVhbHNlcDsKQEAgLTEwODEsMTYgKzEwNzYsMTUgQEAgUklfRktleV9j YXNjYWRlX3VwZChQR19GVU5DVElPTl9BUkdTKQogCQkJT2lkCQkJcGtfdHlwZSA9IFJJQXR0VHlw ZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7CiAJCQlPaWQJCQlma190eXBlID0gUklB dHRUeXBlKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKTsKIAotCQkJcXVvdGVPbmVOYW1l KGF0dG5hbWUsCi0JCQkJCQkgUklBdHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ld KSk7Ci0JCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwKLQkJCQkJCQkgIiVzICVzID0gJCVk IiwKLQkJCQkJCQkgcXVlcnlzZXAsIGF0dG5hbWUsIGkgKyAxKTsKKwkJCWF0dG5hbWUgPSBSSUF0 dE5hbWUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOworCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmcXVlcnlidWYsIHF1ZXJ5c2VwKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9JZGVudGlm aWVyKCZxdWVyeWJ1ZiwgIiAiLCBhdHRuYW1lLCAiID0gIik7CisJCQlhcHBlbmRTdHJpbmdJbmZv KCZxdWVyeWJ1ZiwgIiQlZCIsIGkgKyAxKTsKIAkJCXNwcmludGYocGFyYW1uYW1lLCAiJCVkIiwg aiArIDEpOwogCQkJcmlfR2VuZXJhdGVRdWFsKCZxdWFsYnVmLCBxdWFsc2VwLAotCQkJCQkJCXBh cmFtbmFtZSwgcGtfdHlwZSwKKwkJCQkJCQlOVUxMLCBwYXJhbW5hbWUsIHBrX3R5cGUsIGZhbHNl LAogCQkJCQkJCXJpaW5mby0+cGZfZXFfb3Byc1tpXSwKLQkJCQkJCQlhdHRuYW1lLCBma190eXBl KTsKKwkJCQkJCQlOVUxMLCBhdHRuYW1lLCBma190eXBlLCB0cnVlKTsKIAkJCXF1ZXJ5c2VwID0g IiwiOwogCQkJcXVhbHNlcCA9ICJBTkQiOwogCQkJcXVlcnlvaWRzW2ldID0gcGtfdHlwZTsKQEAg LTEyMzksNyArMTIzMyw3IEBAIHJpX3NldChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEsIGJvb2wgaXNf c2V0X251bGwsIGludCB0Z2tpbmQpCiAJewogCQlTdHJpbmdJbmZvRGF0YSBxdWVyeWJ1ZjsKIAkJ Y2hhcgkJZmtyZWxuYW1lW01BWF9RVU9URURfUkVMX05BTUVfTEVOXTsKLQkJY2hhcgkJYXR0bmFt ZVtNQVhfUVVPVEVEX05BTUVfTEVOXTsKKwkJY29uc3QgY2hhciAqYXR0bmFtZTsKIAkJY2hhcgkJ cGFyYW1uYW1lWzE2XTsKIAkJY29uc3QgY2hhciAqcXVlcnlzZXA7CiAJCWNvbnN0IGNoYXIgKnF1 YWxzZXA7CkBAIC0xMjk3LDExICsxMjkxLDEwIEBAIHJpX3NldChUcmlnZ2VyRGF0YSAqdHJpZ2Rh dGEsIGJvb2wgaXNfc2V0X251bGwsIGludCB0Z2tpbmQpCiAJCXF1ZXJ5c2VwID0gIiI7CiAJCWZv ciAoaW50IGkgPSAwOyBpIDwgbnVtX2NvbHNfdG9fc2V0OyBpKyspCiAJCXsKLQkJCXF1b3RlT25l TmFtZShhdHRuYW1lLCBSSUF0dE5hbWUoZmtfcmVsLCBzZXRfY29sc1tpXSkpOwotCQkJYXBwZW5k U3RyaW5nSW5mbygmcXVlcnlidWYsCi0JCQkJCQkJICIlcyAlcyA9ICVzIiwKLQkJCQkJCQkgcXVl cnlzZXAsIGF0dG5hbWUsCi0JCQkJCQkJIGlzX3NldF9udWxsID8gIk5VTEwiIDogIkRFRkFVTFQi KTsKKwkJCWF0dG5hbWUgPSBSSUF0dE5hbWUoZmtfcmVsLCBzZXRfY29sc1tpXSk7CisJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZxdWVyeWJ1ZiwgcXVlcnlzZXApOworCQkJYXBwZW5kU3RyaW5n SW5mb0lkZW50aWZpZXIoJnF1ZXJ5YnVmLCAiICIsIGF0dG5hbWUsICIgPSAiKTsKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCBpc19zZXRfbnVsbCA/ICJOVUxMIiA6ICJERUZB VUxUIik7CiAJCQlxdWVyeXNlcCA9ICIsIjsKIAkJfQogCkBAIC0xMzE0LDE0ICsxMzA3LDEzIEBA IHJpX3NldChUcmlnZ2VyRGF0YSAqdHJpZ2RhdGEsIGJvb2wgaXNfc2V0X251bGwsIGludCB0Z2tp bmQpCiAJCQlPaWQJCQlwa190eXBlID0gUklBdHRUeXBlKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRu dW1zW2ldKTsKIAkJCU9pZAkJCWZrX3R5cGUgPSBSSUF0dFR5cGUoZmtfcmVsLCByaWluZm8tPmZr X2F0dG51bXNbaV0pOwogCi0JCQlxdW90ZU9uZU5hbWUoYXR0bmFtZSwKLQkJCQkJCSBSSUF0dE5h bWUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pKTsKKwkJCWF0dG5hbWUgPSBSSUF0dE5h bWUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOwogCiAJCQlzcHJpbnRmKHBhcmFtbmFt ZSwgIiQlZCIsIGkgKyAxKTsKIAkJCXJpX0dlbmVyYXRlUXVhbCgmcXVlcnlidWYsIHF1YWxzZXAs Ci0JCQkJCQkJcGFyYW1uYW1lLCBwa190eXBlLAorCQkJCQkJCU5VTEwsIHBhcmFtbmFtZSwgcGtf dHlwZSwgZmFsc2UsCiAJCQkJCQkJcmlpbmZvLT5wZl9lcV9vcHJzW2ldLAotCQkJCQkJCWF0dG5h bWUsIGZrX3R5cGUpOworCQkJCQkJCU5VTEwsIGF0dG5hbWUsIGZrX3R5cGUsIHRydWUpOwogCQkJ cXVhbHNlcCA9ICJBTkQiOwogCQkJcXVlcnlvaWRzW2ldID0gcGtfdHlwZTsKIAkJfQpAQCAtMTUx OSw4ICsxNTExLDggQEAgUklfSW5pdGlhbF9DaGVjayhUcmlnZ2VyICp0cmlnZ2VyLCBSZWxhdGlv biBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCkKIAlTdHJpbmdJbmZvRGF0YSBxdWVyeWJ1ZjsKIAlj aGFyCQlwa3JlbG5hbWVbTUFYX1FVT1RFRF9SRUxfTkFNRV9MRU5dOwogCWNoYXIJCWZrcmVsbmFt ZVtNQVhfUVVPVEVEX1JFTF9OQU1FX0xFTl07Ci0JY2hhcgkJcGthdHRuYW1lW01BWF9RVU9URURf TkFNRV9MRU4gKyAzXTsKLQljaGFyCQlma2F0dG5hbWVbTUFYX1FVT1RFRF9OQU1FX0xFTiArIDNd OworCWNvbnN0IGNoYXIgKnBrYXR0bmFtZTsKKwljb25zdCBjaGFyICpma2F0dG5hbWU7CiAJUmFu Z2VUYmxFbnRyeSAqcnRlOwogCVJURVBlcm1pc3Npb25JbmZvICpwa19wZXJtaW5mbzsKIAlSVEVQ ZXJtaXNzaW9uSW5mbyAqZmtfcGVybWluZm87CkBAIC0xNjE1LDkgKzE2MDcsOSBAQCBSSV9Jbml0 aWFsX0NoZWNrKFRyaWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwgUmVsYXRpb24gcGtf cmVsKQogCXNlcCA9ICIiOwogCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsgaSsr KQogCXsKLQkJcXVvdGVPbmVOYW1lKGZrYXR0bmFtZSwKLQkJCQkJIFJJQXR0TmFtZShma19yZWws IHJpaW5mby0+ZmtfYXR0bnVtc1tpXSkpOwotCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1Ziwg IiVzZmsuJXMiLCBzZXAsIGZrYXR0bmFtZSk7CisJCWZrYXR0bmFtZSA9IFJJQXR0TmFtZShma19y ZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1 ZXJ5YnVmLCBzZXApOworCQlhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmllcigmcXVlcnlidWYsICJm ay4iLCBma2F0dG5hbWUsIE5VTEwpOwogCQlzZXAgPSAiLCAiOwogCX0KIApAQCAtMTYzMSw4ICsx NjIzLDYgQEAgUklfSW5pdGlhbF9DaGVjayhUcmlnZ2VyICp0cmlnZ2VyLCBSZWxhdGlvbiBma19y ZWwsIFJlbGF0aW9uIHBrX3JlbCkKIAkJCQkJICIgRlJPTSAlcyVzIGZrIExFRlQgT1VURVIgSk9J TiAlcyVzIHBrIE9OIiwKIAkJCQkJIGZrX29ubHksIGZrcmVsbmFtZSwgcGtfb25seSwgcGtyZWxu YW1lKTsKIAotCXN0cmNweShwa2F0dG5hbWUsICJway4iKTsKLQlzdHJjcHkoZmthdHRuYW1lLCAi ZmsuIik7CiAJc2VwID0gIigiOwogCWZvciAoaW50IGkgPSAwOyBpIDwgcmlpbmZvLT5ua2V5czsg aSsrKQogCXsKQEAgLTE2NDEsMTQgKzE2MzEsMTIgQEAgUklfSW5pdGlhbF9DaGVjayhUcmlnZ2Vy ICp0cmlnZ2VyLCBSZWxhdGlvbiBma19yZWwsIFJlbGF0aW9uIHBrX3JlbCkKIAkJT2lkCQkJcGtf Y29sbCA9IFJJQXR0Q29sbGF0aW9uKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKIAkJ T2lkCQkJZmtfY29sbCA9IFJJQXR0Q29sbGF0aW9uKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1z W2ldKTsKIAotCQlxdW90ZU9uZU5hbWUocGthdHRuYW1lICsgMywKLQkJCQkJIFJJQXR0TmFtZShw a19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSkpOwotCQlxdW90ZU9uZU5hbWUoZmthdHRuYW1l ICsgMywKLQkJCQkJIFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSkpOwor CQlwa2F0dG5hbWUgPSBSSUF0dE5hbWUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNbaV0pOwor CQlma2F0dG5hbWUgPSBSSUF0dE5hbWUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOwog CQlyaV9HZW5lcmF0ZVF1YWwoJnF1ZXJ5YnVmLCBzZXAsCi0JCQkJCQlwa2F0dG5hbWUsIHBrX3R5 cGUsCisJCQkJCQkicGsuIiwgcGthdHRuYW1lLCBwa190eXBlLCB0cnVlLAogCQkJCQkJcmlpbmZv LT5wZl9lcV9vcHJzW2ldLAotCQkJCQkJZmthdHRuYW1lLCBma190eXBlKTsKKwkJCQkJCSJmay4i LCBma2F0dG5hbWUsIGZrX3R5cGUsIHRydWUpOwogCQlpZiAocGtfY29sbCAhPSBma19jb2xsKQog CQkJcmlfR2VuZXJhdGVRdWFsQ29sbGF0aW9uKCZxdWVyeWJ1ZiwgcGtfY29sbCk7CiAJCXNlcCA9 ICJBTkQiOwpAQCAtMTY1OCwxNiArMTY0NiwxNSBAQCBSSV9Jbml0aWFsX0NoZWNrKFRyaWdnZXIg KnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwgUmVsYXRpb24gcGtfcmVsKQogCSAqIEl0J3Mgc3Vm ZmljaWVudCB0byB0ZXN0IGFueSBvbmUgcGsgYXR0cmlidXRlIGZvciBudWxsIHRvIGRldGVjdCBh IGpvaW4KIAkgKiBmYWlsdXJlLgogCSAqLwotCXF1b3RlT25lTmFtZShwa2F0dG5hbWUsIFJJQXR0 TmFtZShwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1swXSkpOwotCWFwcGVuZFN0cmluZ0luZm8o JnF1ZXJ5YnVmLCAiKSBXSEVSRSBway4lcyBJUyBOVUxMIEFORCAoIiwgcGthdHRuYW1lKTsKKwlw a2F0dG5hbWUgPSBSSUF0dE5hbWUocGtfcmVsLCByaWluZm8tPnBrX2F0dG51bXNbMF0pOworCWFw cGVuZFN0cmluZ0luZm9JZGVudGlmaWVyKCZxdWVyeWJ1ZiwgIikgV0hFUkUgcGsuIiwgcGthdHRu YW1lLCAiIElTIE5VTEwgQU5EICgiKTsKIAogCXNlcCA9ICIiOwogCWZvciAoaW50IGkgPSAwOyBp IDwgcmlpbmZvLT5ua2V5czsgaSsrKQogCXsKLQkJcXVvdGVPbmVOYW1lKGZrYXR0bmFtZSwgUklB dHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKSk7Ci0JCWFwcGVuZFN0cmluZ0lu Zm8oJnF1ZXJ5YnVmLAotCQkJCQkJICIlc2ZrLiVzIElTIE5PVCBOVUxMIiwKLQkJCQkJCSBzZXAs IGZrYXR0bmFtZSk7CisJCWZrYXR0bmFtZSA9IFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+Zmtf YXR0bnVtc1tpXSk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJnF1ZXJ5YnVmLCBzZXApOwor CQlhcHBlbmRTdHJpbmdJbmZvSWRlbnRpZmllcigmcXVlcnlidWYsICJmay4iLCBma2F0dG5hbWUs ICIgSVMgTk9UIE5VTEwiKTsKIAkJc3dpdGNoIChyaWluZm8tPmNvbmZtYXRjaHR5cGUpCiAJCXsK IAkJCWNhc2UgRktDT05TVFJfTUFUQ0hfU0lNUExFOgpAQCAtMTgxNCw4ICsxODAxLDggQEAgUklf UGFydGl0aW9uUmVtb3ZlX0NoZWNrKFRyaWdnZXIgKnRyaWdnZXIsIFJlbGF0aW9uIGZrX3JlbCwg UmVsYXRpb24gcGtfcmVsKQogCWNoYXIJICAgKmNvbnN0cmFpbnREZWY7CiAJY2hhcgkJcGtyZWxu YW1lW01BWF9RVU9URURfUkVMX05BTUVfTEVOXTsKIAljaGFyCQlma3JlbG5hbWVbTUFYX1FVT1RF RF9SRUxfTkFNRV9MRU5dOwotCWNoYXIJCXBrYXR0bmFtZVtNQVhfUVVPVEVEX05BTUVfTEVOICsg M107Ci0JY2hhcgkJZmthdHRuYW1lW01BWF9RVU9URURfTkFNRV9MRU4gKyAzXTsKKwljb25zdCBj aGFyICpwa2F0dG5hbWU7CisJY29uc3QgY2hhciAqZmthdHRuYW1lOwogCWNvbnN0IGNoYXIgKnNl cDsKIAljb25zdCBjaGFyICpma19vbmx5OwogCWludAkJCXNhdmVfbmVzdGxldmVsOwpAQCAtMTg1 Miw5ICsxODM5LDkgQEAgUklfUGFydGl0aW9uUmVtb3ZlX0NoZWNrKFRyaWdnZXIgKnRyaWdnZXIs IFJlbGF0aW9uIGZrX3JlbCwgUmVsYXRpb24gcGtfcmVsKQogCXNlcCA9ICIiOwogCWZvciAoaSA9 IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCiAJewotCQlxdW90ZU9uZU5hbWUoZmthdHRuYW1l LAotCQkJCQkgUklBdHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKSk7Ci0JCWFw cGVuZFN0cmluZ0luZm8oJnF1ZXJ5YnVmLCAiJXNmay4lcyIsIHNlcCwgZmthdHRuYW1lKTsKKwkJ ZmthdHRuYW1lID0gUklBdHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKTsKKwkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcXVlcnlidWYsIHNlcCk7CisJCWFwcGVuZFN0cmluZ0lu Zm9JZGVudGlmaWVyKCZxdWVyeWJ1ZiwgImZrLiIsIGZrYXR0bmFtZSwgTlVMTCk7CiAJCXNlcCA9 ICIsICI7CiAJfQogCkBAIC0xODY1LDggKzE4NTIsOCBAQCBSSV9QYXJ0aXRpb25SZW1vdmVfQ2hl Y2soVHJpZ2dlciAqdHJpZ2dlciwgUmVsYXRpb24gZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwpCiAJ YXBwZW5kU3RyaW5nSW5mbygmcXVlcnlidWYsCiAJCQkJCSAiIEZST00gJXMlcyBmayBKT0lOICVz IHBrIE9OIiwKIAkJCQkJIGZrX29ubHksIGZrcmVsbmFtZSwgcGtyZWxuYW1lKTsKLQlzdHJjcHko cGthdHRuYW1lLCAicGsuIik7Ci0Jc3RyY3B5KGZrYXR0bmFtZSwgImZrLiIpOworCS8qIHN0cmNw eShwa2F0dG5hbWUsICJway4iKTsgKi8KKwkvKiBzdHJjcHkoZmthdHRuYW1lLCAiZmsuIik7ICov CiAJc2VwID0gIigiOwogCWZvciAoaSA9IDA7IGkgPCByaWluZm8tPm5rZXlzOyBpKyspCiAJewpA QCAtMTg3NSwxNCArMTg2MiwxMiBAQCBSSV9QYXJ0aXRpb25SZW1vdmVfQ2hlY2soVHJpZ2dlciAq dHJpZ2dlciwgUmVsYXRpb24gZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwpCiAJCU9pZAkJCXBrX2Nv bGwgPSBSSUF0dENvbGxhdGlvbihwa19yZWwsIHJpaW5mby0+cGtfYXR0bnVtc1tpXSk7CiAJCU9p ZAkJCWZrX2NvbGwgPSBSSUF0dENvbGxhdGlvbihma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tp XSk7CiAKLQkJcXVvdGVPbmVOYW1lKHBrYXR0bmFtZSArIDMsCi0JCQkJCSBSSUF0dE5hbWUocGtf cmVsLCByaWluZm8tPnBrX2F0dG51bXNbaV0pKTsKLQkJcXVvdGVPbmVOYW1lKGZrYXR0bmFtZSAr IDMsCi0JCQkJCSBSSUF0dE5hbWUoZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pKTsKKwkJ cGthdHRuYW1lID0gUklBdHROYW1lKHBrX3JlbCwgcmlpbmZvLT5wa19hdHRudW1zW2ldKTsKKwkJ ZmthdHRuYW1lID0gUklBdHROYW1lKGZrX3JlbCwgcmlpbmZvLT5ma19hdHRudW1zW2ldKTsKIAkJ cmlfR2VuZXJhdGVRdWFsKCZxdWVyeWJ1Ziwgc2VwLAotCQkJCQkJcGthdHRuYW1lLCBwa190eXBl LAorCQkJCQkJInBrLiIsIHBrYXR0bmFtZSwgcGtfdHlwZSwgdHJ1ZSwKIAkJCQkJCXJpaW5mby0+ cGZfZXFfb3Byc1tpXSwKLQkJCQkJCWZrYXR0bmFtZSwgZmtfdHlwZSk7CisJCQkJCQkiZmsuIiwg ZmthdHRuYW1lLCBma190eXBlLCB0cnVlKTsKIAkJaWYgKHBrX2NvbGwgIT0gZmtfY29sbCkKIAkJ CXJpX0dlbmVyYXRlUXVhbENvbGxhdGlvbigmcXVlcnlidWYsIHBrX2NvbGwpOwogCQlzZXAgPSAi QU5EIjsKQEAgLTE5MDMsMTAgKzE4ODgsOSBAQCBSSV9QYXJ0aXRpb25SZW1vdmVfQ2hlY2soVHJp Z2dlciAqdHJpZ2dlciwgUmVsYXRpb24gZmtfcmVsLCBSZWxhdGlvbiBwa19yZWwpCiAJc2VwID0g IiI7CiAJZm9yIChpID0gMDsgaSA8IHJpaW5mby0+bmtleXM7IGkrKykKIAl7Ci0JCXF1b3RlT25l TmFtZShma2F0dG5hbWUsIFJJQXR0TmFtZShma19yZWwsIHJpaW5mby0+ZmtfYXR0bnVtc1tpXSkp OwotCQlhcHBlbmRTdHJpbmdJbmZvKCZxdWVyeWJ1ZiwKLQkJCQkJCSAiJXNmay4lcyBJUyBOT1Qg TlVMTCIsCi0JCQkJCQkgc2VwLCBma2F0dG5hbWUpOworCQlma2F0dG5hbWUgPSBSSUF0dE5hbWUo ZmtfcmVsLCByaWluZm8tPmZrX2F0dG51bXNbaV0pOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZxdWVyeWJ1Ziwgc2VwKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0lkZW50aWZpZXIoJnF1ZXJ5YnVm LCAiZmsuIiwgZmthdHRuYW1lLCAiIElTIE5PVCBOVUxMIik7CiAJCXN3aXRjaCAocmlpbmZvLT5j b25mbWF0Y2h0eXBlKQogCQl7CiAJCQljYXNlIEZLQ09OU1RSX01BVENIX1NJTVBMRToKQEAgLTIw NjQsMTMgKzIwNDgsMTUgQEAgcXVvdGVSZWxhdGlvbk5hbWUoY2hhciAqYnVmZmVyLCBSZWxhdGlv biByZWwpCiBzdGF0aWMgdm9pZAogcmlfR2VuZXJhdGVRdWFsKFN0cmluZ0luZm8gYnVmLAogCQkJ CWNvbnN0IGNoYXIgKnNlcCwKLQkJCQljb25zdCBjaGFyICpsZWZ0b3AsIE9pZCBsZWZ0b3B0eXBl LAorCQkJCWNvbnN0IGNoYXIgKmxlZnRvcHByZWZpeCwgY29uc3QgY2hhciAqbGVmdG9wLCBPaWQg bGVmdG9wdHlwZSwgYm9vbCBxdW90ZWxlZnRvcCwKIAkJCQlPaWQgb3BvaWQsCi0JCQkJY29uc3Qg Y2hhciAqcmlnaHRvcCwgT2lkIHJpZ2h0b3B0eXBlKQorCQkJCWNvbnN0IGNoYXIgKnJpZ2h0b3Bw cmVmaXgsIGNvbnN0IGNoYXIgKnJpZ2h0b3AsIE9pZCByaWdodG9wdHlwZSwgYm9vbCBxdW90ZXJp Z2h0b3ApCiB7CiAJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgJXMgIiwgc2VwKTsKLQlnZW5lcmF0 ZV9vcGVyYXRvcl9jbGF1c2UoYnVmLCBsZWZ0b3AsIGxlZnRvcHR5cGUsIG9wb2lkLAotCQkJCQkJ CSByaWdodG9wLCByaWdodG9wdHlwZSk7CisJZ2VuZXJhdGVfb3BlcmF0b3JfY2xhdXNlKGJ1ZiwK KwkJCQkJCQkgbGVmdG9wcHJlZml4LCBsZWZ0b3AsIGxlZnRvcHR5cGUsIHF1b3RlbGVmdG9wLAor CQkJCQkJCSBvcG9pZCwKKwkJCQkJCQkgcmlnaHRvcHByZWZpeCwgcmlnaHRvcCwgcmlnaHRvcHR5 cGUsIHF1b3RlcmlnaHRvcCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5k ZXggMWQ3NjdkZWI2YzQuLjAzNWU4NDQxZTYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5j CkBAIC0xMzU3MCw5ICsxMzU3MCw5IEBAIGdlbmVyYXRlX29wZXJhdG9yX25hbWUoT2lkIG9wZXJp ZCwgT2lkIGFyZzEsIE9pZCBhcmcyKQogICovCiB2b2lkCiBnZW5lcmF0ZV9vcGVyYXRvcl9jbGF1 c2UoU3RyaW5nSW5mbyBidWYsCi0JCQkJCQkgY29uc3QgY2hhciAqbGVmdG9wLCBPaWQgbGVmdG9w dHlwZSwKKwkJCQkJCSBjb25zdCBjaGFyICpsZWZ0b3BwcmVmaXgsIGNvbnN0IGNoYXIgKmxlZnRv cCwgT2lkIGxlZnRvcHR5cGUsIGJvb2wgcXVvdGVsZWZ0b3AsCiAJCQkJCQkgT2lkIG9wb2lkLAot CQkJCQkJIGNvbnN0IGNoYXIgKnJpZ2h0b3AsIE9pZCByaWdodG9wdHlwZSkKKwkJCQkJCSBjb25z dCBjaGFyICpyaWdodG9wcHJlZml4LCBjb25zdCBjaGFyICpyaWdodG9wLCBPaWQgcmlnaHRvcHR5 cGUsIGJvb2wgcXVvdGVyaWdodG9wKQogewogCUhlYXBUdXBsZQlvcGVydHVwOwogCUZvcm1fcGdf b3BlcmF0b3Igb3BlcmZvcm07CkBAIC0xMzU4OCwxMiArMTM1ODgsMzAgQEAgZ2VuZXJhdGVfb3Bl cmF0b3JfY2xhdXNlKFN0cmluZ0luZm8gYnVmLAogCiAJbnNwbmFtZSA9IGdldF9uYW1lc3BhY2Vf bmFtZShvcGVyZm9ybS0+b3BybmFtZXNwYWNlKTsKIAotCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco YnVmLCBsZWZ0b3ApOworCWlmIChxdW90ZWxlZnRvcCkKKwkJYXBwZW5kU3RyaW5nSW5mb0lkZW50 aWZpZXIoYnVmLCBsZWZ0b3BwcmVmaXgsIGxlZnRvcCwgTlVMTCk7CisJZWxzZQorCXsKKwkJaWYg KGxlZnRvcHByZWZpeCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBsZWZ0b3BwcmVm aXgpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgbGVmdG9wKTsKKwl9CisJLyogYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGxlZnRvcCk7ICovCiAJaWYgKGxlZnRvcHR5cGUgIT0g b3BlcmZvcm0tPm9wcmxlZnQpCiAJCWFkZF9jYXN0X3RvKGJ1Ziwgb3BlcmZvcm0tPm9wcmxlZnQp OwotCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIE9QRVJBVE9SKCVzLiIsIHF1b3RlX2lkZW50aWZp ZXIobnNwbmFtZSkpOworCS8qIGFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIE9QRVJBVE9SKCVzLiIs IHF1b3RlX2lkZW50aWZpZXIobnNwbmFtZSkpOyAqLworCWFwcGVuZFN0cmluZ0luZm9JZGVudGlm aWVyKGJ1ZiwgIiBPUEVSQVRPUigiLCBuc3BuYW1lLCAiLiIpOwogCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCBvcHJuYW1lKTsKLQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIikgJXMiLCByaWdo dG9wKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIikgIik7CisJaWYgKHF1b3Rlcmln aHRvcCkKKwkJYXBwZW5kU3RyaW5nSW5mb0lkZW50aWZpZXIoYnVmLCByaWdodG9wcHJlZml4LCBy aWdodG9wLCBOVUxMKTsKKwllbHNlCisJeworCQlpZiAocmlnaHRvcHByZWZpeCkKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCByaWdodG9wcHJlZml4KTsKKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsIHJpZ2h0b3ApOworCX0KKwkvKiBhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIikg JXMiLCByaWdodG9wKTsgKi8KIAlpZiAocmlnaHRvcHR5cGUgIT0gb3BlcmZvcm0tPm9wcnJpZ2h0 KQogCQlhZGRfY2FzdF90byhidWYsIG9wZXJmb3JtLT5vcHJyaWdodCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlu cy5oCmluZGV4IGZmNGJhNzI2NWMyLi5mYzRkZTQ0NDZhYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvYnVpbHRpbnMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCkBA IC04MCwxMCArODAsMTUgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgcXVvdGVfYWxsX2lkZW50 aWZpZXJzOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnF1b3RlX2lkZW50aWZpZXIoY29uc3QgY2hhciAq aWRlbnQpOwogZXh0ZXJuIGNoYXIgKnF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGNvbnN0IGNo YXIgKnF1YWxpZmllciwKIAkJCQkJCQkJCQljb25zdCBjaGFyICppZGVudCk7CisKKy8qIGV4dGVy biB2b2lkIGdlbmVyYXRlX29wZXJhdG9yX2NsYXVzZShTdHJpbmdJbmZvIGJ1ZiwgKi8KKy8qIAkJ CQkJCQkJCSBjb25zdCBjaGFyICpsZWZ0b3AsIE9pZCBsZWZ0b3B0eXBlLCAqLworLyogCQkJCQkJ CQkJIE9pZCBvcG9pZCwgKi8KKy8qIAkJCQkJCQkJCSBjb25zdCBjaGFyICpyaWdodG9wLCBPaWQg cmlnaHRvcHR5cGUpOyAqLwogZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfb3BlcmF0b3JfY2xhdXNlKFN0 cmluZ0luZm8gYnVmLAotCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmxlZnRvcCwgT2lkIGxlZnRvcHR5 cGUsCisJCQkJCQkJCQkgY29uc3QgY2hhciAqbGVmdG9wcHJlZml4LCBjb25zdCBjaGFyICpsZWZ0 b3AsIE9pZCBsZWZ0b3B0eXBlLCBib29sIHF1b3RlbGVmdG9wLAogCQkJCQkJCQkJIE9pZCBvcG9p ZCwKLQkJCQkJCQkJCSBjb25zdCBjaGFyICpyaWdodG9wLCBPaWQgcmlnaHRvcHR5cGUpOworCQkJ CQkJCQkJIGNvbnN0IGNoYXIgKnJpZ2h0b3BwcmVmaXgsIGNvbnN0IGNoYXIgKnJpZ2h0b3AsIE9p ZCByaWdodG9wdHlwZSwgYm9vbCBxdW90ZXJpZ2h0b3ApOwogZXh0ZXJuIHZvaWQgYXBwZW5kU3Ry aW5nSW5mb0lkZW50aWZpZXIoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCwgY29u c3QgY2hhciAqaWRlbnQsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CiBleHRlcm4gdm9pZCBhcHBlbmRT dHJpbmdJbmZvUXVhbGlmaWVkSWRlbnRpZmllcihTdHJpbmdJbmZvIHN0ciwKIAkJCQkJCQkJCQkJ CWNvbnN0IGNoYXIgKnByZWZpeCwKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --00000000000075ed310643c74187--