Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pZ4Qo-0001n4-TZ for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Mar 2023 06:34:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pZ4Qm-0002ex-Dk for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Mar 2023 06:34:44 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pZ4Qk-0002eb-P8 for pgsql-hackers@lists.postgresql.org; Mon, 06 Mar 2023 06:34:43 +0000 Received: from mail-yb1-xb36.google.com ([2607:f8b0:4864:20::b36]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pZ4Qh-0004m9-2j for pgsql-hackers@lists.postgresql.org; Mon, 06 Mar 2023 06:34:41 +0000 Received: by mail-yb1-xb36.google.com with SMTP id k23so7023048ybk.13 for ; Sun, 05 Mar 2023 22:34:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ANa1Qp2GxIvb+MBAMjYdlDD8+Vg13acrp4c+fM/28i0=; b=qbEO3LOmTKMsM53fDVAwzU3Epdivziu3sp94tEy61LrDKjjZmhx60VUVRbqgVZ8CuP V43XPvRZJrInHaPWw/2LDq66H8FqC+38GVLbfJL3ztbKi5RXP5yafwKx7otLPFWxRrua 6kE0FuSg/faxtfarKJ3jUFBmpn1YuLkg4trHedsedypMQ/XFo4rwmenQGndKsIxyasGL z4qC5KWP/d2KrG4dp5Kek9tnfAM9jH8If0aOCzfO4yFC6Medp5/kx0Og5f7zpfTe3q6B xOc8u49fxiv1r/DLYAzkySihRJ6NNi1UppVweBsAxaSjLTV/swJ4Do6heXyqrf4ZqAMG 6lXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=ANa1Qp2GxIvb+MBAMjYdlDD8+Vg13acrp4c+fM/28i0=; b=kcNrLlTp9YaZx8oM0+ctL95lZf1rZCbWz54lZnKIsR7cH6yITD8NfTa0CRY4Czh+Mx OSc+vvCUvjD/l3BEH2O9JWYkkk/JUeudsR392oRAbE6iKjrtotkSM4Nr4or+FiygBcjD E5fcw/IYwVrg4RNp3V3RH0pGVL+PpWL8nscPdGt8P/PeIyZYFW+nnW3MRryfDF6LmtjL fqNwok3illjKTx5gMWtpqw+DzcS/V7MKfbhzI4vBKIkxIM+DO6Y3ymZi02hr6j/slDGv tw9COziciuC9SMrKSJ7BEpdyU5UyUf83h8kafWWXBmIZ5bfgFXm/p6gxKIiLFJNS6O3k makw== X-Gm-Message-State: AO0yUKXoIbhOE92cf6uoTFGdltHv979RaoA/Mbx85eu15VXI5uNHhrwQ AFUpMz6/aUS2fYB9BpksELjJu1Z5/Zw+6BdWCtA= X-Google-Smtp-Source: AK7set98oKfFrkFN76sVjGjJLzQkBZkiHq06c382x6y5SfUvIxIYQV4K6Ju144wfPgq8l6DXifNFVQDJ18/ctq5zbUA= X-Received: by 2002:a25:9082:0:b0:855:fa17:4f66 with SMTP id t2-20020a259082000000b00855fa174f66mr5782786ybl.8.1678084478059; Sun, 05 Mar 2023 22:34:38 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: Ajin Cherian Date: Mon, 6 Mar 2023 17:34:25 +1100 Message-ID: Subject: Re: Support logical replication of DDLs To: Peter Smith Cc: vignesh C , Zheng Li , li jie , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000387aaa05f6357d57" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000387aaa05f6357d57 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Feb 15, 2023 at 3:33=E2=80=AFPM Peter Smith = wrote: > > > > > > > 9. > > > + > > > +/* > > > + * Append the parenthesized arguments of the given pg_proc row into = the output > > > + * buffer. force_qualify indicates whether to schema-qualify type na= mes > > > + * regardless of visibility. > > > + */ > > > +static void > > > +format_procedure_args_internal(Form_pg_proc procform, StringInfo buf= , > > > + bool force_qualify) > > > +{ > > > + int i; > > > + char* (*func[2])(Oid) =3D {format_type_be, format_type_be_qualified= }; > > > + > > > + appendStringInfoChar(buf, '('); > > > + for (i =3D 0; i < procform->pronargs; i++) > > > + { > > > + Oid thisargtype =3D procform->proargtypes.values[i]; > > > + char *argtype =3D NULL; > > > + > > > + if (i > 0) > > > + appendStringInfoChar(buf, ','); > > > + > > > + argtype =3D func[force_qualify](thisargtype); > > > + appendStringInfoString(buf, argtype); > > > + pfree(argtype); > > > + } > > > + appendStringInfoChar(buf, ')'); > > > +} > > > > > > 9b. > > > I understand why this function was put here beside the other static > > > functions in "Support Routines" but IMO it really belongs nearby (i.e= . > > > directly above) the only caller (format_procedure_args). Keeping both > > > those functional together will improve the readability of both, and > > > will also remove the need to have the static forward declaration. > > > > > There was no reply for 9b. Was it accidentally overlooked, or just > chose not to do it? Fixed this. Moved the function up and removed the forward declaration. On Wed, Feb 15, 2023 at 3:00=E2=80=AFPM Peter Smith = wrote: > > On Sat, Feb 11, 2023 at 3:21 AM vignesh C wrote: > > > > On Thu, 9 Feb 2023 at 03:47, Peter Smith wrote: > > > > > > Hi Vignesh, thanks for addressing my v63-0002 review comments. > > > > > > I confirmed most of the changes. Below is a quick follow-up for the > > > remaining ones. > > > > > > On Mon, Feb 6, 2023 at 10:32 PM vignesh C wrote= : > > > > > > > > On Mon, 6 Feb 2023 at 06:47, Peter Smith wr= ote: > > > > > > > > ... > > > > > > > > > > 8. > > > > > + value =3D findJsonbValueFromContainer(container, JB_FOBJECT, &k= ey); > > > > > > > > > > Should the code be checking or asserting value is not NULL? > > > > > > > > > > (IIRC I asked this a long time ago - sorry if it was already answ= ered) > > > > > > > > > > > > > Yes, this was already answered by Zheng, quoting as "The null check= ing > > > > for value is done in the upcoming call of expand_one_jsonb_element(= )." > > > > in [1] > > > > > > Thanks for the info. I saw that Zheng-san only wrote it is handled in > > > the =E2=80=9Cupcoming call of expand_one_jsonb_element=E2=80=9D, but = I don=E2=80=99t know if > > > that is sufficient. For example, if the execution heads down the othe= r > > > path (expand_jsonb_array) with a NULL jsonarr then it going to crash, > > > isn't it? So I still think some change may be needed here. > > > > Added an Assert for this. > > > > Was this a correct change to make here? > > IIUC this Assert is now going to intercept both cases including the > expand_one_jsonb_element() which previously would have thrown a proper > ERROR. > Fixed this. Added an error check in expand_jsonb_array() as well. Changes are in patch 1 and patch 2 regards, Ajin Cherian Fujitsu Australia --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v75-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kby0 RnJvbSBmM2YxN2E5MGY2ZTc5NDg4NWY0ZWRiYzkyNjhlYWUyY2FhNmM4YTQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMjoyMjowNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDEvOF0gSW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoKSW5mcmFz dHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoxKSBTb21lIG9mIHRoZSBldmVudCB0 cmlnZ2VyIHN0cnVjdHVyZXMgd2VyZSBtb3ZlZCBmcm9tIGV2ZW50X3RyaWdnZXIuYwogICB0byBl dmVudF90cmlnZ2VyLmggYXMgdGhlc2Ugd2lsbCBiZSByZXF1aXJlZCBmb3IgcHVibGljYXRpb24g ZXZlbnQKICAgdHJpZ2dlciBjcmVhdGlvbi4KMikgU29tZSBvZiB0aGUgcHJvdG90eXBlcyBhbmQg c3RydWN0dXJlcyB3ZXJlIG1vdmVkIGZyb20gcGdfcHVibGljYXRpb24uaAogICB0byBwdWJsaWNh dGlvbmNtZHMuaC4gVGhpcyB3YXMgYmVjYXVzZSBvbmUgb2YgdGhlIGxhdGVyIHBhdGNoIHJlcXVp cmVkIHRoZSBpbmNsdXNpb24gb2YKICAgcGdfcHVibGljYXRpb24uaCBhbmQgdGhlc2UgcHJvdG90 eXBlIGhhZCByZWZlcmVuY2VzIHRvIHNlcnZlciBoZWFkZXIKICAgZmlsZXMuCjMpIENoYW5nZSB0 aGUgb2JqZWN0IGlkZW50aXR5IHRvIG1hdGNoIHdpdGggdGhlIHN5bnRheCBpbiBvYmplY3RhZGRy ZXNzLmMKICAgVGhpcyBpcyBzbyB0aGF0IHRoZSBkZXBhcnNlIGxvZ2ljIGNhbiB1c2UgdGhpcyBp ZGVudGl0eSBkaXJlY3RseSBpbiB0aGUgZGVwYXJzZSBsb2dpYy4KLS0tCiBzcmMvYmFja2VuZC9j YXRhbG9nL2FjbGNoay5jICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jb2xsYXRpb25jbWRzLmMgICAgICAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMgICAgICAgIHwgIDczICsrKy0tLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3NlY2xhYmVsLmMgICAgICAgICAgICAgfCAgIDYgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VxdWVuY2UuYyAgICAgICAgICAgICB8ICA0MyArKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jIHwgICAxICsKIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5j ICAgICAgICAgICAgICAgICAgfCAxMTAgKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L2Zvcm1hdF90eXBlLmMgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jl Z3Byb2MuYyAgICAgICAgICAgICB8ICA1MiArKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jICAgICAgICAgICB8IDMyNCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiBz cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgIHwgIDE3ICstCiBzcmMv aW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmggICAgICAgIHwgICAzICstCiBzcmMvaW5j bHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggICAgICAgIHwgIDQxICsrKysKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oICAgICAgfCAgMTQgKysKIHNyYy9pbmNsdWRl L2NvbW1hbmRzL3NlcXVlbmNlLmggICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvdGNv cC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgICAgICB8ICAxMCArLQogc3JjL2luY2x1ZGUvdGNvcC91 dGlsaXR5LmggICAgICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9hY2wu aCAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19p bnRlcm5hbC5oICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCAg ICAgICAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9yZWwuaCAgICAgICAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oICAgICAgICAg ICAgICAgfCAgMTkgKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAg ICAgfCAgIDEgKwogMjMgZmlsZXMgY2hhbmdlZCwgNTk2IGluc2VydGlvbnMoKyksIDE3MCBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYwppbmRleCBjNDIzMjM0Li4zNmE2Njc3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvYWNsY2hrLmMKQEAgLTEyOSw3ICsxMjksNiBAQCBzdGF0aWMgdm9pZCBleHBhbmRfYWxsX2Nv bF9wcml2aWxlZ2VzKE9pZCB0YWJsZV9vaWQsIEZvcm1fcGdfY2xhc3MgY2xhc3NGb3JtLAogCQkJ CQkJCQkJICBBY2xNb2RlICpjb2xfcHJpdmlsZWdlcywKIAkJCQkJCQkJCSAgaW50IG51bV9jb2xf cHJpdmlsZWdlcyk7CiBzdGF0aWMgQWNsTW9kZSBzdHJpbmdfdG9fcHJpdmlsZWdlKGNvbnN0IGNo YXIgKnByaXZuYW1lKTsKLXN0YXRpYyBjb25zdCBjaGFyICpwcml2aWxlZ2VfdG9fc3RyaW5nKEFj bE1vZGUgcHJpdmlsZWdlKTsKIHN0YXRpYyBBY2xNb2RlIHJlc3RyaWN0X2FuZF9jaGVja19ncmFu dChib29sIGlzX2dyYW50LCBBY2xNb2RlIGF2YWlsX2dvcHRpb25zLAogCQkJCQkJCQkJCWJvb2wg YWxsX3ByaXZzLCBBY2xNb2RlIHByaXZpbGVnZXMsCiAJCQkJCQkJCQkJT2lkIG9iamVjdElkLCBP aWQgZ3JhbnRvcklkLApAQCAtMzg1LDExICszODQsMTAgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFu dFN0bXQgKnN0bXQpCiAJTGlzdENlbGwgICAqY2VsbDsKIAljb25zdCBjaGFyICplcnJvcm1zZzsK IAlBY2xNb2RlCQlhbGxfcHJpdmlsZWdlczsKKwlPaWQJCQlncmFudG9yID0gSW52YWxpZE9pZDsK IAogCWlmIChzdG10LT5ncmFudG9yKQogCXsKLQkJT2lkCQkJZ3JhbnRvcjsKLQogCQlncmFudG9y ID0gZ2V0X3JvbGVzcGVjX29pZChzdG10LT5ncmFudG9yLCBmYWxzZSk7CiAKIAkJLyoKQEAgLTQw OCw2ICs0MDYsOSBAQCBFeGVjdXRlR3JhbnRTdG10KEdyYW50U3RtdCAqc3RtdCkKIAlpc3RtdC5p c19ncmFudCA9IHN0bXQtPmlzX2dyYW50OwogCWlzdG10Lm9ianR5cGUgPSBzdG10LT5vYmp0eXBl OwogCisJLyogQ29weSB0aGUgZ3JhbnRvciBpZCBuZWVkZWQgZm9yIERETCBkZXBhcnNpbmcgb2Yg R3JhbnQgKi8KKwlpc3RtdC5ncmFudG9yX3VpZCA9IGdyYW50b3I7CisKIAkvKiBDb2xsZWN0IHRo ZSBPSURzIG9mIHRoZSB0YXJnZXQgb2JqZWN0cyAqLwogCXN3aXRjaCAoc3RtdC0+dGFyZ3R5cGUp CiAJewpAQCAtMjYyOCw3ICsyNjI5LDcgQEAgc3RyaW5nX3RvX3ByaXZpbGVnZShjb25zdCBjaGFy ICpwcml2bmFtZSkKIAlyZXR1cm4gMDsJCQkJCS8qIGFwcGVhc2UgY29tcGlsZXIgKi8KIH0KIAot c3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBwcml2aWxlZ2VfdG9fc3RyaW5nKEFj bE1vZGUgcHJpdmlsZWdlKQogewogCXN3aXRjaCAocHJpdmlsZWdlKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv Y29sbGF0aW9uY21kcy5jCmluZGV4IGViNjJkMjguLjU2Yjk3ZDQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9jb2xsYXRpb25jbWRzLmMKQEAgLTUwLDkgKzUwLDIxIEBAIHR5cGVkZWYgc3RydWN0CiAKIC8q CiAgKiBDUkVBVEUgQ09MTEFUSU9OCisgKgorICogcHN0YXRlOiBwYXJzZSBzdGF0ZS4KKyAqIG5h bWVzOiBxdWFsaWZpZWQgY29sbGF0aW9uIG5hbWVzIChhIGxpc3Qgb2YgU3RyaW5nKS4KKyAqIHBh cmFtZXRlcnM6IGNvbGxhdGlvbiBhdHRyaWJ1dGVzIChhIGxpc3Qgb2YgRGVmRWxlbSkuCisgKiBp Zl9ub3RfZXhpc3RzOiBpZiB0cnVlLCBkb24ndCBmYWlsIG9uIGR1cGxpY2F0ZSBuYW1lLCBqdXN0 IHByaW50IGEgbm90aWNlCisgKiBhbmQgcmV0dXJuIEludmFsaWRPaWQuCisgKiBmcm9tX2V4aXN0 aW5nX2NvbGxpZDogb3V0cHV0IGFyZ3VtZW50IHdoaWNoLCBpZiBub3QgTlVMTCwgaXMgc2V0IHRv IHRoZQorICogYWRkcmVzcyBvZiBleGlzdGluZyBjb2xsYXRpb24gdGhhdCB3YXMgdXNlZCB0byBj cmVhdGUgaW4gY2FzZSBvZgorICogQ1JFQVRFIENPTExBVElPTiBhbnlfbmFtZSBGUk9NIGV4aXN0 aW5nX2NvbGxhdGlvbi4KKyAqCisgKiBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIHRoZSBhZGRyZXNz IG9mIHRoZSBuZXcgY29sbGF0aW9uLgogICovCiBPYmplY3RBZGRyZXNzCi1EZWZpbmVDb2xsYXRp b24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9v bCBpZl9ub3RfZXhpc3RzKQorRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlz dCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsCisJCQkJYm9vbCBpZl9ub3RfZXhpc3RzLCBPYmpl Y3RBZGRyZXNzICpmcm9tX2V4aXN0aW5nX2NvbGxpZCkKIHsKIAljaGFyCSAgICpjb2xsTmFtZTsK IAlPaWQJCQljb2xsTmFtZXNwYWNlOwpAQCAtMTM5LDYgKzE1MSwxMyBAQCBEZWZpbmVDb2xsYXRp b24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9v bCBpZl9ub3RfZQogCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQogCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiAldSIsIGNvbGxpZCk7CiAKKwkJLyoK KwkJICogTWFrZSBmcm9tIGV4aXN0aW5nIGNvbGxhdGlvbmlkIGF2YWlsYWJsZSB0byBjYWxsZXJz IGZvciBzdGF0ZW1lbnRzIHN1Y2ggYXMKKwkJICogQ1JFQVRFIENPTExBVElPTiBhbnlfbmFtZSBG Uk9NIGFueV9uYW1lCisJCSAqLworCQlpZiAoZnJvbV9leGlzdGluZ19jb2xsaWQgJiYgT2lkSXNW YWxpZChjb2xsaWQpKQorCQkJT2JqZWN0QWRkcmVzc1NldCgqZnJvbV9leGlzdGluZ19jb2xsaWQs IENvbGxhdGlvblJlbGF0aW9uSWQsIGNvbGxpZCk7CisKIAkJY29sbHByb3ZpZGVyID0gKChGb3Jt X3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxwcm92aWRlcjsKIAkJY29sbGlzZGV0 ZXJtaW5pc3RpYyA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkpLT5jb2xsaXNk ZXRlcm1pbmlzdGljOwogCQljb2xsZW5jb2RpbmcgPSAoKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRT VFJVQ1QodHApKS0+Y29sbGVuY29kaW5nOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5j CmluZGV4IGQ0YjAwZDEuLmIzODBlMzkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmMKQEAgLTQ4LDQ1ICs0OCw3IEBACiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKIAotdHlwZWRlZiBzdHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0 ZQotewotCS8qIG1lbW9yeSBjb250ZXh0IGZvciB0aGlzIHN0YXRlJ3Mgb2JqZWN0cyAqLwotCU1l bW9yeUNvbnRleHQgY3h0OwotCi0JLyogc3FsX2Ryb3AgKi8KLQlzbGlzdF9oZWFkCVNRTERyb3BM aXN0OwotCWJvb2wJCWluX3NxbF9kcm9wOwotCi0JLyogdGFibGVfcmV3cml0ZSAqLwotCU9pZAkJ CXRhYmxlX3Jld3JpdGVfb2lkOwkvKiBJbnZhbGlkT2lkLCBvciBzZXQgZm9yIHRhYmxlX3Jld3Jp dGUKLQkJCQkJCQkJCSAqIGV2ZW50ICovCi0JaW50CQkJdGFibGVfcmV3cml0ZV9yZWFzb247CS8q IEFUX1JFV1JJVEUgcmVhc29uICovCi0KLQkvKiBTdXBwb3J0IGZvciBjb21tYW5kIGNvbGxlY3Rp b24gKi8KLQlib29sCQljb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZDsKLQlDb2xsZWN0ZWRDb21t YW5kICpjdXJyZW50Q29tbWFuZDsKLQlMaXN0CSAgICpjb21tYW5kTGlzdDsJLyogbGlzdCBvZiBD b2xsZWN0ZWRDb21tYW5kOyBzZWUKLQkJCQkJCQkJICogZGVwYXJzZV91dGlsaXR5LmggKi8KLQlz dHJ1Y3QgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAqcHJldmlvdXM7Ci19IEV2ZW50VHJpZ2dlclF1 ZXJ5U3RhdGU7Ci0KLXN0YXRpYyBFdmVudFRyaWdnZXJRdWVyeVN0YXRlICpjdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUgPSBOVUxMOwotCi0vKiBTdXBwb3J0IGZvciBkcm9wcGVkIG9iamVjdHMgKi8K LXR5cGVkZWYgc3RydWN0IFNRTERyb3BPYmplY3QKLXsKLQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7 Ci0JY29uc3QgY2hhciAqc2NoZW1hbmFtZTsKLQljb25zdCBjaGFyICpvYmpuYW1lOwotCWNvbnN0 IGNoYXIgKm9iamlkZW50aXR5OwotCWNvbnN0IGNoYXIgKm9iamVjdHR5cGU7Ci0JTGlzdAkgICAq YWRkcm5hbWVzOwotCUxpc3QJICAgKmFkZHJhcmdzOwotCWJvb2wJCW9yaWdpbmFsOwotCWJvb2wJ CW5vcm1hbDsKLQlib29sCQlpc3RlbXA7Ci0Jc2xpc3Rfbm9kZQluZXh0OwotfSBTUUxEcm9wT2Jq ZWN0OworRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlID0g TlVMTDsKIAogc3RhdGljIHZvaWQgQWx0ZXJFdmVudFRyaWdnZXJPd25lcl9pbnRlcm5hbChSZWxh dGlvbiByZWwsCiAJCQkJCQkJCQkJCUhlYXBUdXBsZSB0dXAsCkBAIC0xODEzLDYgKzE3NzUsMzYg QEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyRGVmUHJpdnMoQWx0ZXJEZWZhdWx0UHJpdmlsZWdl c1N0bXQgKnN0bXQpCiB9CiAKIC8qCisgKiBFdmVudFRyaWdnZXJDb2xsZWN0U2VjTGFiZWwKKyAq CQlTYXZlIGRhdGEgYWJvdXQgYW4gU0VDVVJJVFkgTEFCRUwgY29tbWFuZCBiZWluZyBleGVjdXRl ZAorICovCit2b2lkCitFdmVudFRyaWdnZXJDb2xsZWN0U2VjTGFiZWwoT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLCBjaGFyICpwcm92aWRlciwKKwkJCQkJCQlTZWNMYWJlbFN0bXQgKnN0bXQpCit7CisJ TWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsKKworCS8q IGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBk aXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsK KworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN4dCk7CisKKwljb21tYW5kID0gcGFsbG9jMChzaXplb2YoQ29sbGVjdGVkQ29tbWFuZCkp OworCWNvbW1hbmQtPnR5cGUgPSBTQ1RfU2VjdXJpdHlMYWJlbDsKKwljb21tYW5kLT5pbl9leHRl bnNpb24gPSBjcmVhdGluZ19leHRlbnNpb247CisJY29tbWFuZC0+ZC5zZWNsYWJlbC5hZGRyZXNz ID0gYWRkcmVzczsKKwljb21tYW5kLT5kLnNlY2xhYmVsLnByb3ZpZGVyID0gcHJvdmlkZXI7CisJ Y29tbWFuZC0+cGFyc2V0cmVlID0gKE5vZGUgKikgY29weU9iamVjdChzdG10KTsKKworCWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QgPQorCQlsYXBwZW5kKGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QsIGNvbW1hbmQpOworCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhvbGRjeHQpOworfQorCisvKgogICogSW4gYSBkZGxfY29tbWFuZF9lbmQgZXZlbnQgdHJp Z2dlciwgdGhpcyBmdW5jdGlvbiByZXBvcnRzIHRoZSBEREwgY29tbWFuZHMKICAqIGJlaW5nIHJ1 bi4KICAqLwpAQCAtMTg2Myw2ICsxODU1LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFu ZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CiAJCQljYXNl IFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCWNhc2Ug U0NUX1NlY3VyaXR5TGFiZWw6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0eTsKIAkJCQkJ Y2hhcgkgICAqdHlwZTsKQEAgLTE4ODAsNiArMTg3Myw4IEBAIHBnX2V2ZW50X3RyaWdnZXJfZGRs X2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5kLmNyZWF0ZW9w Yy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcp CiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQt PnR5cGUgPT0gU0NUX1NlY3VyaXR5TGFiZWwpCisJCQkJCQlhZGRyID0gY21kLT5kLnNlY2xhYmVs LmFkZHJlc3M7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgYW4gb2JqZWN0IHdhcyBkcm9wcGVkIGlu IHRoZSBzYW1lIGNvbW1hbmQgd2UgbWF5IGVuZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvc2VjbGFiZWwuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMKaW5kZXgg N2ZmMTZlMy4uN2VlNTRjZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFi ZWwuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCkBAIC0xOCw2ICsxOCw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleGluZy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf c2VjbGFiZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Noc2VjbGFiZWwuaCIKKyNpbmNsdWRl ICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvc2VjbGFiZWwu aCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgpA QCAtMjEzLDYgKzIxNCwxMSBAQCBFeGVjU2VjTGFiZWxTdG10KFNlY0xhYmVsU3RtdCAqc3RtdCkK IAlpZiAocmVsYXRpb24gIT0gTlVMTCkKIAkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIE5vTG9j ayk7CiAKKwkvKiBQYXNzIHRoZSBpbmZvIHRvIGV2ZW50IHRyaWdnZXJzIGFib3V0IHRoZSBTRUNV UklUWSBMQUJFTC4gKi8KKwlpZiAoRXZlbnRUcmlnZ2VyU3VwcG9ydHNPYmplY3RUeXBlKHN0bXQt Pm9ianR5cGUpKQorCQlFdmVudFRyaWdnZXJDb2xsZWN0U2VjTGFiZWwoYWRkcmVzcywgcHN0cmR1 cChwcm92aWRlci0+cHJvdmlkZXJfbmFtZSksCisJCQkJCQkJCQlzdG10KTsKKwogCXJldHVybiBh ZGRyZXNzOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwppbmRleCBiZmUyNzljLi4yOTY5ZDNk IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKQEAgLTE3MDgsNiArMTcwOCw0OSBAQCBwcm9jZXNz X293bmVkX2J5KFJlbGF0aW9uIHNlcXJlbCwgTGlzdCAqb3duZWRfYnksIGJvb2wgZm9yX2lkZW50 aXR5KQogCQlyZWxhdGlvbl9jbG9zZSh0YWJsZXJlbCwgTm9Mb2NrKTsKIH0KIAorLyoKKyAqIFJl dHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzLCBkZXRhaWxlZAorICovCitTZXF1ZW5jZV92YWx1ZXMg KgorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIgICAgICBi dWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFwVHVwbGUJ c2VxdHVwbGU7CisJSGVhcFR1cGxlRGF0YSBzZXF0dXBsZWRhdGE7CisJRm9ybV9wZ19zZXF1ZW5j ZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJU2VxdWVuY2VfdmFsdWVz ICpzZXF2YWx1ZXM7CisKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShTRVFSRUxJRCwgc2Vx dWVuY2VJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlICV1Iiwgc2VxdWVuY2VJZCk7CisJ c2VxZm9ybSA9IChGb3JtX3BnX3NlcXVlbmNlKSBHRVRTVFJVQ1Qoc2VxdHVwbGUpOworCisJUmVs ZWFzZVN5c0NhY2hlKHNlcXR1cGxlKTsKKworCS8qIE9wZW4gYW5kIGxvY2sgc2VxdWVuY2UgKi8K Kwlpbml0X3NlcXVlbmNlKHNlcXVlbmNlSWQsICZlbG0sICZzZXFyZWwpOworCisJaWYgKHBnX2Ns YXNzX2FjbGNoZWNrKHNlcXVlbmNlSWQsIEdldFVzZXJJZCgpLAorCQlBQ0xfU0VMRUNUIHwgQUNM X1VTQUdFKSAhPSBBQ0xDSEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVS UkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJZXJybXNnKCJwZXJtaXNzaW9uIGRl bmllZCBmb3Igc2VxdWVuY2UgJXMiLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShz ZXFyZWwpKSk7CisKKwlzZXEgPSByZWFkX3NlcV90dXBsZShzZXFyZWwsICZidWYsICZzZXF0dXBs ZWRhdGEpOworCisJc2VxdmFsdWVzID0gKFNlcXVlbmNlX3ZhbHVlcyAqKSBwYWxsb2Moc2l6ZW9m KFNlcXVlbmNlX3ZhbHVlcykpOworCXNlcXZhbHVlcy0+bGFzdF92YWx1ZSA9IHNlcS0+bGFzdF92 YWx1ZTsKKwlzZXF2YWx1ZXMtPnNlcWZvcm0gPSBzZXFmb3JtOworCisJVW5sb2NrUmVsZWFzZUJ1 ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2NrKTsKKworCXJldHVybiBz ZXF2YWx1ZXM7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1ldGVycyBpbiBhIGxp c3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggMGRmMWFjYi4uOGVkNjlmMCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xOCw2ICsxOCw3 IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgor I2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3N1YnNjcmlwdGlvbmNtZHMuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogI2lu Y2x1ZGUgImZtZ3IuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIv c3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggYzdkOWQ5Ni4uNmZkM2Q0NyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMKQEAgLTE0NDYsNyArMTQ0Niw4IEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQYXJzZVN0 YXRlICpwc3RhdGUsCiAJCQkJCQkJYWRkcmVzcyA9IERlZmluZUNvbGxhdGlvbihwc3RhdGUsCiAJ CQkJCQkJCQkJCQkJICBzdG10LT5kZWZuYW1lcywKIAkJCQkJCQkJCQkJCQkgIHN0bXQtPmRlZmlu aXRpb24sCi0JCQkJCQkJCQkJCQkJICBzdG10LT5pZl9ub3RfZXhpc3RzKTsKKwkJCQkJCQkJCQkJ CQkgIHN0bXQtPmlmX25vdF9leGlzdHMsCisJCQkJCQkJCQkJCQkJICAmc2Vjb25kYXJ5T2JqZWN0 KTsKIAkJCQkJCQlicmVhazsKIAkJCQkJCWRlZmF1bHQ6CiAJCQkJCQkJZWxvZyhFUlJPUiwgInVu cmVjb2duaXplZCBkZWZpbmUgc3RtdCB0eXBlOiAlZCIsCkBAIC0xODI2LDYgKzE4MjcsNyBAQCBQ cm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCiAJCQljYXNlIFRfU2VjTGFi ZWxTdG10OgogCQkJCWFkZHJlc3MgPSBFeGVjU2VjTGFiZWxTdG10KChTZWNMYWJlbFN0bXQgKikg cGFyc2V0cmVlKTsKKwkJCQljb21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCQlicmVhazsKIAog CQkJY2FzZSBUX0NyZWF0ZUFtU3RtdDoKQEAgLTIxOTYsNiArMjE5OCwxMTIgQEAgVXRpbGl0eUNv bnRhaW5zUXVlcnkoTm9kZSAqcGFyc2V0cmVlKQogCX0KIH0KIAorLyoKKyAqIFJldHVybiB0aGUg Z2l2ZW4gb2JqZWN0IHR5cGUgYXMgYSBzdHJpbmcuCisgKgorICogSWYgaXNncmFudCBpcyB0cnVl LCB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWxlIGRlcGFyc2luZyBHUkFOVAorICog c3RhdGVtZW50IGFuZCBzb21lIG9iamVjdCBuYW1lcyBhcmUgcmVwbGFjZWQuCisgKi8KK2NvbnN0 IGNoYXIgKgorc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29sIGlzZ3Jh bnQpCit7CisJc3dpdGNoIChvYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgor CQkJcmV0dXJuICJBR0dSRUdBVEUiOworCQljYXNlIE9CSkVDVF9DQVNUOgorCQkJcmV0dXJuICJD QVNUIjsKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQkJcmV0dXJuICJDT0xMQVRJT04iOwor CQljYXNlIE9CSkVDVF9DT0xVTU46CisJCQlyZXR1cm4gaXNncmFudCA/ICJUQUJMRSIgOiAiQ09M VU1OIjsKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJCXJldHVybiAiQ09OVkVSU0lPTiI7 CisJCWNhc2UgT0JKRUNUX0RBVEFCQVNFOgorCQkJcmV0dXJuICJEQVRBQkFTRSI7CisJCWNhc2Ug T0JKRUNUX0RPTUFJTjoKKwkJCXJldHVybiAiRE9NQUlOIjsKKwkJY2FzZSBPQkpFQ1RfRVZFTlRf VFJJR0dFUjoKKwkJCXJldHVybiAiRVZFTlQgVFJJR0dFUiI7CisJCWNhc2UgT0JKRUNUX0VYVEVO U0lPTjoKKwkJCXJldHVybiAiRVhURU5TSU9OIjsKKwkJY2FzZSBPQkpFQ1RfRkRXOgorCQkJcmV0 dXJuICJGT1JFSUdOIERBVEEgV1JBUFBFUiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fU0VSVkVS OgorCQkJcmV0dXJuIGlzZ3JhbnQgPyAiRk9SRUlHTiBTRVJWRVIiIDogIlNFUlZFUiI7CisJCWNh c2UgT0JKRUNUX0ZPUkVJR05fVEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFCTEUiOworCQlj YXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQljYXNlIE9CSkVD VF9JTkRFWDoKKwkJCXJldHVybiAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJ CXJldHVybiAiTEFOR1VBR0UiOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCXJldHVy biAiTEFSR0UgT0JKRUNUIjsKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJldHVybiAiTUFU RVJJQUxJWkVEIFZJRVciOworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0dXJuICJPUEVS QVRPUiBDTEFTUyI7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuICJPUEVSQVRP UiI7CisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRPUiBGQU1JTFki OworCQljYXNlIE9CSkVDVF9QT0xJQ1k6CisJCQlyZXR1cm4gIlBPTElDWSI7CisJCWNhc2UgT0JK RUNUX1BST0NFRFVSRToKKwkJCXJldHVybiAiUFJPQ0VEVVJFIjsKKwkJY2FzZSBPQkpFQ1RfUk9M RToKKwkJCXJldHVybiAiUk9MRSI7CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQlyZXR1cm4g IlJPVVRJTkUiOworCQljYXNlIE9CSkVDVF9SVUxFOgorCQkJcmV0dXJuICJSVUxFIjsKKwkJY2Fz ZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmV0dXJuICJTQ0hFTUEiOworCQljYXNlIE9CSkVDVF9TRVFV RU5DRToKKwkJCXJldHVybiAiU0VRVUVOQ0UiOworCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhU OgorCQkJcmV0dXJuICJTVEFUSVNUSUNTIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlyZXR1 cm4gIlRBQkxFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVybiAiVEFCTEVT UEFDRSI7CisJCWNhc2UgT0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdHRVIiOworCQlj YXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENPTkZJ R1VSQVRJT04iOworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gIlRFWFQg U0VBUkNIIERJQ1RJT05BUlkiOworCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiAi VEVYVCBTRUFSQ0ggUEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVy biAiVEVYVCBTRUFSQ0ggVEVNUExBVEUiOworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJu ICJUWVBFIjsKKwkJY2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5HOgorCQkJcmV0dXJuICJVU0VSIE1B UFBJTkciOworCQljYXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0dXJuICJWSUVXIjsKKwkJY2FzZSBP QkpFQ1RfQUNDRVNTX01FVEhPRDoKKwkJY2FzZSBPQkpFQ1RfQU1PUDoKKwkJY2FzZSBPQkpFQ1Rf QU1QUk9DOgorCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JKRUNUX0RFRkFVTFQ6 CisJCWNhc2UgT0JKRUNUX0RFRkFDTDoKKwkJY2FzZSBPQkpFQ1RfRE9NQ09OU1RSQUlOVDoKKwkJ Y2FzZSBPQkpFQ1RfUEFSQU1FVEVSX0FDTDoKKwkJY2FzZSBPQkpFQ1RfUFVCTElDQVRJT046CisJ CWNhc2UgT0JKRUNUX1BVQkxJQ0FUSU9OX05BTUVTUEFDRToKKwkJY2FzZSBPQkpFQ1RfUFVCTElD QVRJT05fUkVMOgorCQljYXNlIE9CSkVDVF9TVUJTQ1JJUFRJT046CisJCWNhc2UgT0JKRUNUX1RB QkNPTlNUUkFJTlQ6CisJCWNhc2UgT0JKRUNUX1RSQU5TRk9STToKKwkJCWVsb2coRVJST1IsICJ1 bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG9ianR5cGUpOworCX0KKworCXJldHVybiAiPz8/ IjsJCQkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQogCiAvKgogICogQWx0ZXJPYmplY3RU eXBlQ29tbWFuZFRhZwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90 eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwppbmRleCAxMjQwMmEw Li43YjQ3NmFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsOCArMjcs NiBAQAogI2luY2x1ZGUgInV0aWxzL251bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNo ZS5oIgogCi1zdGF0aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50 MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKLQogCiAvKgogICogU1FMIGZ1bmN0aW9uOiBmb3Jt YXRfdHlwZSh0eXBlX29pZCwgdHlwZW1vZCkKQEAgLTM2Myw3ICszNjEsNyBAQCBmb3JtYXRfdHlw ZV93aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKQogLyoKICAqIEFkZCB0 eXBtb2QgZGVjb3JhdGlvbiB0byB0aGUgYmFzaWMgdHlwZSBuYW1lCiAgKi8KLXN0YXRpYyBjaGFy ICoKK2NoYXIgKgogcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9k LCBPaWQgdHlwbW9kb3V0KQogewogCWNoYXIJICAgKnJlczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5j CmluZGV4IDI5NjkzMGUuLmZlNWI4MmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yZWdwcm9jLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYwpAQCAtNDks NyArNDksNiBAQCBzdGF0aWMgYm9vbCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpz dHJpbmcsIGJvb2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQgKm5hcmdz LCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkJCQkgTm9kZSAqZXNjb250ZXh0KTsKIAotCiAvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKICAqCSBVU0VSIEkvTyBST1VUSU5FUwkJCQkJCQkJCQkJCQkJICoKICAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KQEAgLTMwOCw2ICszMDcsNTcgQEAgZm9ybWF0X3Byb2NlZHVy ZV9xdWFsaWZpZWQoT2lkIHByb2NlZHVyZV9vaWQpCiB9CiAKIC8qCisgKiBBcHBlbmQgdGhlIHBh cmVudGhlc2l6ZWQgYXJndW1lbnRzIG9mIHRoZSBnaXZlbiBwZ19wcm9jIHJvdyBpbnRvIHRoZSBv dXRwdXQKKyAqIGJ1ZmZlci4gZm9yY2VfcXVhbGlmeSBpbmRpY2F0ZXMgd2hldGhlciB0byBzY2hl bWEtcXVhbGlmeSB0eXBlIG5hbWVzCisgKiByZWdhcmRsZXNzIG9mIHZpc2liaWxpdHkuCisgKi8K K3N0YXRpYyB2b2lkCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwoRm9ybV9wZ19wcm9j IHByb2Nmb3JtLCBTdHJpbmdJbmZvIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIGZvcmNlX3F1YWxpZnkpCit7CisgICAgaW50ICAgICAgICAgaTsKKyAgICBjaGFyKiAg ICAgICAoKmZ1bmNbMl0pKE9pZCkgPSB7Zm9ybWF0X3R5cGVfYmUsIGZvcm1hdF90eXBlX2JlX3F1 YWxpZmllZH07CisKKyAgICBhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisgICAgZm9y IChpID0gMDsgaSA8IHByb2Nmb3JtLT5wcm9uYXJnczsgaSsrKQorICAgIHsKKyAgICAgICAgT2lk ICAgICAgICAgdGhpc2FyZ3R5cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOwor ICAgICAgICBjaGFyICAgICAgICphcmd0eXBlOworCisgICAgICAgIGlmIChpID4gMCkKKyAgICAg ICAgICAgIGFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKworICAgICAgICBhcmd0eXBl ID0gZnVuY1tmb3JjZV9xdWFsaWZ5XSh0aGlzYXJndHlwZSk7CisgICAgICAgIGFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCBhcmd0eXBlKTsKKyAgICAgICAgcGZyZWUoYXJndHlwZSk7CisgICAg fQorICAgIGFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyknKTsKK30KKworLyoKKyAqIGZvcm1h dF9wcm9jZWR1cmVfYXJncyAgIC0gY29udmVydHMgcHJvYyBPSUQgdG8gIihhcmdzKSIKKyAqLwor Y2hhciAqCitmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoT2lkIHByb2NlZHVyZV9vaWQsIGJvb2wgZm9y Y2VfcXVhbGlmeSkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJSGVhcFR1cGxlICAgcHJvY3R1 cDsKKwlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisKKwlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUx KFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvY2VkdXJlX29pZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHByb2NlZHVyZSAldSIsIHByb2NlZHVyZV9vaWQpOworCXByb2Nmb3JtID0gKEZvcm1fcGdf cHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJZm9y bWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKHByb2Nmb3JtLCAmYnVmLCBmb3JjZV9xdWFsaWZ5 KTsKKworCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKworCXJldHVybiBidWYuZGF0YTsKK30K KworLyoKICAqIGZvcm1hdF9wcm9jZWR1cmVfZXh0ZW5kZWQgLSBjb252ZXJ0cyBwcm9jZWR1cmUg T0lEIHRvICJwcm9fbmFtZShhcmdzKSIKICAqCiAgKiBUaGlzIGV4cG9ydHMgdGhlIHVzZWZ1bCBm dW5jdGlvbmFsaXR5IG9mIHJlZ3Byb2NlZHVyZW91dCBmb3IgdXNlCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKaW5kZXggNmRjMTE3ZC4uMzNhYWRhNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3J1bGV1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3BhcnRpdGlvbmVkX3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmln Z2VyLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCkBAIC0zNDEsNiArMzQyLDggQEAg c3RhdGljIGNoYXIgKnBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHBy ZXR0eSk7CiBzdGF0aWMgaW50CWRlY29tcGlsZV9jb2x1bW5faW5kZXhfYXJyYXkoRGF0dW0gY29s dW1uX2luZGV4X2FycmF5LCBPaWQgcmVsSWQsCiAJCQkJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsK IHN0YXRpYyBjaGFyICpwZ19nZXRfcnVsZWRlZl93b3JrZXIoT2lkIHJ1bGVvaWQsIGludCBwcmV0 dHlGbGFncyk7CitzdGF0aWMgdm9pZCBwZ19nZXRfcnVsZV93aGVyZWNsYXVzZShjaGFyICpxdWFs c3RyLCBRdWVyeSAqcXVlcnksCisJCQkJCQkJCQkgU3RyaW5nSW5mbyBidWYsIGludCBwcmV0dHlG bGFncyk7CiBzdGF0aWMgY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3dvcmtlcihPaWQgaW5kZXhyZWxp ZCwgaW50IGNvbG5vLAogCQkJCQkJCQkJY29uc3QgT2lkICpleGNsdWRlT3BzLAogCQkJCQkJCQkJ Ym9vbCBhdHRyc09ubHksIGJvb2wga2V5c09ubHksCkBAIC0zNTgsNyArMzYxLDYgQEAgc3RhdGlj IGludAlwcmludF9mdW5jdGlvbl9hcmd1bWVudHMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBw cm9jdHVwLAogCQkJCQkJCQkJIGJvb2wgcHJpbnRfdGFibGVfYXJncywgYm9vbCBwcmludF9kZWZh dWx0cyk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9yZXR0eXBlKFN0cmluZ0luZm8gYnVm LCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl90cmZ0eXBl cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwotc3RhdGljIHZvaWQgcHJpbnRf ZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3Rh dGljIHZvaWQgc2V0X3J0YWJsZV9uYW1lcyhkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgTGlzdCAq cGFyZW50X25hbWVzcGFjZXMsCiAJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191c2VkKTsKIHN0YXRp YyB2b2lkIHNldF9kZXBhcnNlX2Zvcl9xdWVyeShkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgUXVl cnkgKnF1ZXJ5LApAQCAtNDg0LDIyICs0ODYsMTUgQEAgc3RhdGljIHZvaWQgZ2V0X2Zyb21fY2xh dXNlX2NvbGRlZmxpc3QoUmFuZ2VUYmxGdW5jdGlvbiAqcnRmdW5jLAogCQkJCQkJCQkJICAgZGVw YXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF90YWJsZXNhbXBsZV9kZWYo VGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxlLAogCQkJCQkJCQlkZXBhcnNlX2NvbnRleHQg KmNvbnRleHQpOwotc3RhdGljIHZvaWQgZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lk IGFjdHVhbF9kYXRhdHlwZSwKLQkJCQkJCQkgU3RyaW5nSW5mbyBidWYpOwogc3RhdGljIE5vZGUg KnByb2Nlc3NJbmRpcmVjdGlvbihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQp Owogc3RhdGljIHZvaWQgcHJpbnRTdWJzY3JpcHRzKFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmLCBk ZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGNoYXIgKmdldF9yZWxhdGlvbl9uYW1l KE9pZCByZWxpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcmVsYXRpb25fbmFtZShPaWQgcmVs aWQsIExpc3QgKm5hbWVzcGFjZXMpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF9y ZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7Ci1zdGF0aWMgY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25f bmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsCi0JCQkJCQkJCQlMaXN0ICphcmduYW1lcywgT2lk ICphcmd0eXBlcywKLQkJCQkJCQkJCWJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFk aWNfcCwKLQkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBzdGF0aWMg Y2hhciAqZ2VuZXJhdGVfb3BlcmF0b3JfbmFtZShPaWQgb3BlcmlkLCBPaWQgYXJnMSwgT2lkIGFy ZzIpOwogc3RhdGljIHZvaWQgYWRkX2Nhc3RfdG8oU3RyaW5nSW5mbyBidWYsIE9pZCB0eXBpZCk7 CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFtZShPaWQgdHlwaWQpOwog c3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0KGNoYXIgKnN0cik7Ci1zdGF0aWMgY2hhciAqZmxh dHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9ucyhT dHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9ucyk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIo cnRlKSAgKChydGUpLT5pbmggPyAiIiA6ICJPTkxZICIpCkBAIC01NDcsNiArNTQyLDgwIEBAIHBn X2dldF9ydWxlZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVSTl9URVhUX1Aoc3Ry aW5nX3RvX3RleHQocmVzKSk7CiB9CiAKKy8qCisgKiBHaXZlbiBhIHBhaXIgb2YgRGF0dW0gY29y cmVzcG9uZGluZyB0byBhIHJ1bGUncyBwZ19yZXdyaXRlLmV2X3F1YWwgYW5kCisgKiBldl9hY3Rp b24gY29sdW1ucywgcmV0dXJuIHRoZWlyIHRleHQgcmVwcmVzZW50YXRpb247IGV2X3F1YWwgYXMg YSBzaW5nbGUKKyAqIHN0cmluZyBpbiB3aGVyZUNsYXVzZSBhbmQgZXZfYWN0aW9uIGFzIGEgTGlz dCBvZiBzdHJpbmdzICh3aGljaCBtaWdodCBiZQorICogTklMLCBzaWduYWxsaW5nIE5PVEhJTkcp IGluIGFjdGlvbnMuCisgKi8KK3ZvaWQKK3BnX2dldF9ydWxlZGVmX2RldGFpbGVkKERhdHVtIGV2 X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAq KmFjdGlvbnMpCit7CisJaW50CQkJcHJldHR5RmxhZ3MgPSAwOworCWNoYXIJICAgKnF1YWxzdHIg PSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV2X3F1YWwpOworCWNoYXIJICAgKmFjdGlvbnN0ciA9IFRl eHREYXR1bUdldENTdHJpbmcoZXZfYWN0aW9uKTsKKwlMaXN0CSAgICphY3Rpb25Ob2RlTGlzdCA9 IChMaXN0ICopIHN0cmluZ1RvTm9kZShhY3Rpb25zdHIpOworCVN0cmluZ0luZm9EYXRhIGJ1ZjsK KworCSp3aGVyZUNsYXVzZSA9IE5VTEw7CisJKmFjdGlvbnMgPSBOSUw7CisJaW5pdFN0cmluZ0lu Zm8oJmJ1Zik7CisKKwlpZiAoc3RyY21wKHF1YWxzdHIsICI8PiIpICE9IDApCisJeworCQlRdWVy eQkgICAqcXVlcnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9uTm9kZUxpc3QpOworCisJCXBn X2dldF9ydWxlX3doZXJlY2xhdXNlKHF1YWxzdHIsIHF1ZXJ5LCAmYnVmLCAwKTsKKwkJKndoZXJl Q2xhdXNlID0gcHN0cmR1cChidWYuZGF0YSk7CisJfQorCisJaWYgKGxpc3RfbGVuZ3RoKGFjdGlv bk5vZGVMaXN0KSA+IDApCisJeworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2Vs bCwgYWN0aW9uTm9kZUxpc3QpCisJCXsKKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IChRdWVyeSAqKSBs Zmlyc3QoY2VsbCk7CisKKwkJCXJlc2V0U3RyaW5nSW5mbygmYnVmKTsKKwkJCWdldF9xdWVyeV9k ZWYocXVlcnksICZidWYsIE5JTCwgTlVMTCwgdHJ1ZSwKKwkJCQkJCSAgcHJldHR5RmxhZ3MsIFdS QVBfQ09MVU1OX0RFRkFVTFQsIDApOworCQkJKmFjdGlvbnMgPSBsYXBwZW5kKCphY3Rpb25zLCBw c3RyZHVwKGJ1Zi5kYXRhKSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUbyBnZXQgdGhlIHJld3Jp dGUgcnVsZSBvZiBhIHZpZXcgd2hlbiB0aGUgQ1JFQVRFIFZJRVcgY29tbWFuZCBleGVjdXRpb24g aXMKKyAqIHN0aWxsIGluIHByb2dyZXNzOiB3ZSBzZWFyY2ggdGhlIHN5c3RlbSBjYWNoZSBSVUxF UkVMTkFNRSB0byBnZXQgdGhlIHJld3JpdGUKKyAqIHJ1bGUgb2YgdGhlIHZpZXcgYXMgb3Bwb3Nl ZCB0byBxdWVyeWluZyBwZ19yZXdyaXRlIGFzIGluIHBnX2dldF92aWV3ZGVmX3dvcmtlcigpLAor ICogd2hpY2ggd2lsbCByZXR1cm4gZW1wdHkgcmVzdWx0LgorICovCitjaGFyICoKK3BnX2dldF92 aWV3ZGVmX3N0cmluZyhPaWQgdmlld29pZCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJUmVs YXRpb24JcGdfcmV3cml0ZTsKKwlIZWFwVHVwbGUJcnVsZXR1cDsKKwlUdXBsZURlc2MJcnVsZXR0 YzsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXBnX3Jld3JpdGUgPSB0YWJsZV9vcGVuKFJl d3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcnVsZXR1cCA9IFNlYXJjaFN5 c0NhY2hlMihSVUxFUkVMTkFNRSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0odmlld29pZCks CisJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0oVmlld1NlbGVjdFJ1bGVOYW1lKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHJ1bGV0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcmV3cml0ZSBydWxlIGZvciB2aWV3IHdpdGggT0lEICV1Iiwgdmlld29pZCk7CisK KwlydWxldHRjID0gcGdfcmV3cml0ZS0+cmRfYXR0OworCW1ha2Vfdmlld2RlZigmYnVmLCBydWxl dHVwLCBydWxldHRjLCAwLCBXUkFQX0NPTFVNTl9ERUZBVUxUKTsKKwlSZWxlYXNlU3lzQ2FjaGUo cnVsZXR1cCk7CisJdGFibGVfY2xvc2UocGdfcmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKwor CXJldHVybiBidWYuZGF0YTsKK30KIAogc3RhdGljIGNoYXIgKgogcGdfZ2V0X3J1bGVkZWZfd29y a2VyKE9pZCBydWxlb2lkLCBpbnQgcHJldHR5RmxhZ3MpCkBAIC0xMDE3LDY1ICsxMDg2LDEyIEBA IHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJpZ2lkLCBib29sIHByZXR0eSkKIAlpZiAo IWlzbnVsbCkKIAl7CiAJCU5vZGUJICAgKnF1YWw7Ci0JCWNoYXIJCXJlbGtpbmQ7Ci0JCWRlcGFy c2VfY29udGV4dCBjb250ZXh0OwotCQlkZXBhcnNlX25hbWVzcGFjZSBkcG5zOwotCQlSYW5nZVRi bEVudHJ5ICpvbGRydGU7Ci0JCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKLQotCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZidWYsICJXSEVOICgiKTsKKwkJY2hhcgkgICAqcXVhbHN0cjsKIAogCQlx dWFsID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJcXVhbHN0 ciA9IHBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ3JlYywgcXVhbCwgcHJldHR5KTsKIAot CQlyZWxraW5kID0gZ2V0X3JlbF9yZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOwotCi0JCS8qIEJ1 aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLwotCQlvbGRydGUgPSBt YWtlTm9kZShSYW5nZVRibEVudHJ5KTsKLQkJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9O OwotCQlvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKLQkJb2xkcnRlLT5yZWxraW5k ID0gcmVsa2luZDsKLQkJb2xkcnRlLT5yZWxsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKLQkJ b2xkcnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKLQkJb2xkcnRlLT5lcmVmID0g b2xkcnRlLT5hbGlhczsKLQkJb2xkcnRlLT5sYXRlcmFsID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5o ID0gZmFsc2U7Ci0JCW9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOwotCi0JCW5ld3J0ZSA9IG1ha2VO b2RlKFJhbmdlVGJsRW50cnkpOwotCQluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0J CW5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQluZXdydGUtPnJlbGtpbmQgPSBy ZWxraW5kOwotCQluZXdydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQluZXdy dGUtPmFsaWFzID0gbWFrZUFsaWFzKCJuZXciLCBOSUwpOwotCQluZXdydGUtPmVyZWYgPSBuZXdy dGUtPmFsaWFzOwotCQluZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJbmV3cnRlLT5pbmggPSBm YWxzZTsKLQkJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJLyogQnVpbGQgdHdvLWVsZW1l bnQgcnRhYmxlICovCi0JCW1lbXNldCgmZHBucywgMCwgc2l6ZW9mKGRwbnMpKTsKLQkJZHBucy5y dGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKLQkJZHBucy5zdWJwbGFucyA9IE5J TDsKLQkJZHBucy5jdGVzID0gTklMOwotCQlkcG5zLmFwcGVuZHJlbHMgPSBOVUxMOwotCQlzZXRf cnRhYmxlX25hbWVzKCZkcG5zLCBOSUwsIE5VTEwpOwotCQlzZXRfc2ltcGxlX2NvbHVtbl9uYW1l cygmZHBucyk7Ci0KLQkJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1lc3BhY2Ug c3RhY2sgKi8KLQkJY29udGV4dC5idWYgPSAmYnVmOwotCQljb250ZXh0Lm5hbWVzcGFjZXMgPSBs aXN0X21ha2UxKCZkcG5zKTsKLQkJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7Ci0JCWNvbnRl eHQud2luZG93VExpc3QgPSBOSUw7Ci0JCWNvbnRleHQudmFycHJlZml4ID0gdHJ1ZTsKLQkJY29u dGV4dC5wcmV0dHlGbGFncyA9IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KTsKLQkJY29udGV4dC53 cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKLQkJY29udGV4dC5pbmRlbnRMZXZlbCA9 IFBSRVRUWUlOREVOVF9TVEQ7Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lO RF9OT05FOwotCQljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxMOwotCi0JCWdldF9ydWxlX2V4 cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKLQotCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZi dWYsICIpICIpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJXSEVOICglcykgIiwgcXVhbHN0 cik7CiAJfQogCiAJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiRVhFQ1VURSBGVU5DVElPTiAlcygi LApAQCAtMTExNiw2ICsxMTMyLDc0IEBAIHBnX2dldF90cmlnZ2VyZGVmX3dvcmtlcihPaWQgdHJp Z2lkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gYnVmLmRhdGE7CiB9CiAKKy8qCisgKiBQYXNzIGJh Y2sgdGhlIFRyaWdnZXJXaGVuIGNsYXVzZSBvZiBhIHRyaWdnZXIgZ2l2ZW4gdGhlIHBnX3RyaWdn ZXIgcmVjb3JkIGFuZAorICogdGhlIGV4cHJlc3Npb24gdHJlZSAoaW4gbm9kZVRvU3RyaW5nKCkg cmVwcmVzZW50YXRpb24pIGZyb20gcGdfdHJpZ2dlci50Z3F1YWwKKyAqIGZvciB0aGUgdHJpZ2dl cidzIFdIRU4gY29uZGl0aW9uLgorICovCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3doZW5jbGF1 c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJldHR5 KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyCQlyZWxraW5kOworCWRlcGFyc2VfY29u dGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFuZ2VUYmxFbnRyeSAq b2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworCWluaXRTdHJpbmdJbmZvKCZidWYp OworCisJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKKworCS8q IEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLworCW9sZHJ0ZSA9 IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxBVElP TjsKKwlvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKwlvbGRydGUtPnJlbGtpbmQg PSByZWxraW5kOworCW9sZHJ0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7CisJb2xk cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygib2xkIiwgTklMKTsKKwlvbGRydGUtPmVyZWYgPSBvbGRy dGUtPmFsaWFzOworCW9sZHJ0ZS0+bGF0ZXJhbCA9IGZhbHNlOworCW9sZHJ0ZS0+aW5oID0gZmFs c2U7CisJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwluZXdydGUgPSBtYWtlTm9kZShSYW5n ZVRibEVudHJ5KTsKKwluZXdydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047CisJbmV3cnRlLT5y ZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7CisJbmV3cnRlLT5yZWxraW5kID0gcmVsa2luZDsKKwlu ZXdydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOworCW5ld3J0ZS0+YWxpYXMgPSBt YWtlQWxpYXMoIm5ldyIsIE5JTCk7CisJbmV3cnRlLT5lcmVmID0gbmV3cnRlLT5hbGlhczsKKwlu ZXdydGUtPmxhdGVyYWwgPSBmYWxzZTsKKwluZXdydGUtPmluaCA9IGZhbHNlOworCW5ld3J0ZS0+ aW5Gcm9tQ2wgPSB0cnVlOworCisJLyogQnVpbGQgdHdvLWVsZW1lbnQgcnRhYmxlICovCisJbWVt c2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOworCWRwbnMucnRhYmxlID0gbGlzdF9tYWtlMihv bGRydGUsIG5ld3J0ZSk7CisJZHBucy5zdWJwbGFucyA9IE5JTDsKKwlkcG5zLmN0ZXMgPSBOSUw7 CisJZHBucy5hcHBlbmRyZWxzID0gTlVMTDsKKwlzZXRfcnRhYmxlX25hbWVzKCZkcG5zLCBOSUws IE5VTEwpOworCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKKworCS8qIFNldCB1cCBj b250ZXh0IHdpdGggb25lLWRlZXAgbmFtZXNwYWNlIHN0YWNrICovCisJY29udGV4dC5idWYgPSAm YnVmOworCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworCWNvbnRleHQu d2luZG93Q2xhdXNlID0gTklMOworCWNvbnRleHQud2luZG93VExpc3QgPSBOSUw7CisJY29udGV4 dC52YXJwcmVmaXggPSB0cnVlOworCWNvbnRleHQucHJldHR5RmxhZ3MgPSBHRVRfUFJFVFRZX0ZM QUdTKHByZXR0eSk7CisJY29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsK Kwljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKKwljb250ZXh0LnNwZWNp YWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsKKwljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBO VUxMOworCisJZ2V0X3J1bGVfZXhwcih3aGVuQ2xhdXNlLCAmY29udGV4dCwgZmFsc2UpOworCisJ cmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKiAtLS0tLS0tLS0tCiAgKiBwZ19nZXRfaW5kZXhkZWYJ CQktIEdldCB0aGUgZGVmaW5pdGlvbiBvZiBhbiBpbmRleAogICoKQEAgLTE4ODIsNiArMTk2Niwx NCBAQCBwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpCiAJ cmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxpZCwgcHJldHR5RmxhZ3MsIHRydWUs IGZhbHNlKTsKIH0KIAorLyogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJlcG9ydHMgdGhlIGZ1bGwg cGFydGl0aW9uIGtleSBkZWZpbml0aW9uICovCitjaGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3N0 cmluZyhPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxp ZCwgR0VUX1BSRVRUWV9GTEFHUyhmYWxzZSksIGZhbHNlLAorCQkJCQkJCQkJZmFsc2UpOworfQor CiAvKgogICogSW50ZXJuYWwgd29ya2hvcnNlIHRvIGRlY29tcGlsZSBhIHBhcnRpdGlvbiBrZXkg ZGVmaW5pdGlvbi4KICAqLwpAQCAtMjEzNCw2ICsyMjI2LDE2IEBAIHBnX2dldF9jb25zdHJhaW50 ZGVmX2V4dChQR19GVU5DVElPTl9BUkdTKQogfQogCiAvKgorICogSW50ZXJuYWwgdmVyc2lvbiB0 aGF0IHJldHVybnMgdGhlIGRlZmluaXRpb24gb2YgYSBDT05TVFJBSU5UIGNvbW1hbmQKKyAqLwor Y2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9zdHJpbmcoT2lkIGNvbnN0cmFpbnRJZCkKK3sK KwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFpbnRJZCwgZmFsc2Us CisJCQkJCQkJCQkgICBHRVRfUFJFVFRZX0ZMQUdTKGZhbHNlKSwgZmFsc2UpOworfQorCisvKgog ICogSW50ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBB REQgQ09OU1RSQUlOVCBjb21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMzUwMyw3ICszNjA1LDEyIEBA IHBnX2dldF9mdW5jdGlvbl9hcmdfZGVmYXVsdChQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9URVhUX1Aoc3RyaW5nX3RvX3RleHQoc3RyKSk7CiB9CiAKLXN0YXRpYyB2b2lkCisvKgorICog UHJvZHVjZSB0aGUgZm9ybWF0dGVkIFNRTCBib2R5IChub3QgdGhlIHdob2xlIGZ1bmN0aW9uIGRl ZmluaXRpb24pCisgKiBvZiBhIGZ1bmN0aW9uIGdpdmVuIHRoZSBwZ19wcm9jIHR1cGxlLiBTYXZl IHRoZSBmb3JtYXR0ZWQgU1FMIGluIHRoZQorICogZ2l2ZW4gU3RyaW5nSW5mby4KKyAqLwordm9p ZAogcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0 dXApCiB7CiAJaW50CQkJbnVtYXJnczsKQEAgLTUyNTAsNDggKzUzNTcsMTggQEAgbWFrZV9ydWxl ZGVmKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcnVsZXR1cCwgVHVwbGVEZXNjIHJ1bGV0dGMs CiAJLyogSWYgdGhlIHJ1bGUgaGFzIGFuIGV2ZW50IHF1YWxpZmljYXRpb24sIGFkZCBpdCAqLwog CWlmIChzdHJjbXAoZXZfcXVhbCwgIjw+IikgIT0gMCkKIAl7Ci0JCU5vZGUJICAgKnF1YWw7Ci0J CVF1ZXJ5CSAgICpxdWVyeTsKLQkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0JCWRlcGFyc2Vf bmFtZXNwYWNlIGRwbnM7Ci0KLQkJaWYgKHByZXR0eUZsYWdzICYgUFJFVFRZRkxBR19JTkRFTlQp Ci0JCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxuICAiKTsKLQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICIgV0hFUkUgIik7Ci0KLQkJcXVhbCA9IHN0cmluZ1RvTm9kZShldl9x dWFsKTsKLQogCQkvKgogCQkgKiBXZSBuZWVkIHRvIG1ha2UgYSBjb250ZXh0IGZvciByZWNvZ25p emluZyBhbnkgVmFycyBpbiB0aGUgcXVhbAogCQkgKiAod2hpY2ggY2FuIG9ubHkgYmUgcmVmZXJl bmNlcyB0byBPTEQgYW5kIE5FVykuICBVc2UgdGhlIHJ0YWJsZSBvZgogCQkgKiB0aGUgZmlyc3Qg cXVlcnkgaW4gdGhlIGFjdGlvbiBsaXN0IGZvciB0aGlzIHB1cnBvc2UuCiAJCSAqLwotCQlxdWVy eSA9IChRdWVyeSAqKSBsaW5pdGlhbChhY3Rpb25zKTsKKwkJUXVlcnkJICAgKnF1ZXJ5ID0gKFF1 ZXJ5ICopIGxpbml0aWFsKGFjdGlvbnMpOwogCi0JCS8qCi0JCSAqIElmIHRoZSBhY3Rpb24gaXMg SU5TRVJULi4uU0VMRUNULCBPTEQvTkVXIGhhdmUgYmVlbiBwdXNoZWQgZG93bgotCQkgKiBpbnRv IHRoZSBTRUxFQ1QsIGFuZCB0aGF0J3Mgd2hhdCB3ZSBuZWVkIHRvIGxvb2sgYXQuIChVZ2x5IGts dWdlCi0JCSAqIC4uLiB0cnkgdG8gZml4IHRoaXMgd2hlbiB3ZSByZWRlc2lnbiBxdWVyeXRyZWVz LikKLQkJICovCi0JCXF1ZXJ5ID0gZ2V0SW5zZXJ0U2VsZWN0UXVlcnkocXVlcnksIE5VTEwpOwot Ci0JCS8qIE11c3QgYWNxdWlyZSBsb2NrcyByaWdodCBhd2F5OyBzZWUgbm90ZXMgaW4gZ2V0X3F1 ZXJ5X2RlZigpICovCi0JCUFjcXVpcmVSZXdyaXRlTG9ja3MocXVlcnksIGZhbHNlLCBmYWxzZSk7 Ci0KLQkJY29udGV4dC5idWYgPSBidWY7Ci0JCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFr ZTEoJmRwbnMpOwotCQljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKLQkJY29udGV4dC53aW5k b3dUTGlzdCA9IE5JTDsKLQkJY29udGV4dC52YXJwcmVmaXggPSAobGlzdF9sZW5ndGgocXVlcnkt PnJ0YWJsZSkgIT0gMSk7Ci0JCWNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHlGbGFnczsKLQkJ Y29udGV4dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKLQkJY29udGV4dC5pbmRl bnRMZXZlbCA9IFBSRVRUWUlOREVOVF9TVEQ7Ci0JCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9 IEVYUFJfS0lORF9OT05FOwotCQljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxMOwotCi0JCXNl dF9kZXBhcnNlX2Zvcl9xdWVyeSgmZHBucywgcXVlcnksIE5JTCk7CisJCWlmIChwcmV0dHlGbGFn cyAmIFBSRVRUWUZMQUdfSU5ERU5UKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJc biAgIik7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIFdIRVJFICIpOwogCi0JCWdl dF9ydWxlX2V4cHIocXVhbCwgJmNvbnRleHQsIGZhbHNlKTsKKwkJcGdfZ2V0X3J1bGVfd2hlcmVj bGF1c2UoZXZfcXVhbCwgcXVlcnksIGJ1ZiwgcHJldHR5RmxhZ3MpOwogCX0KIAogCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoYnVmLCAiIERPICIpOwpAQCAtNTMzMiw2ICs1NDA5LDQ3IEBAIG1ha2Vf cnVsZWRlZihTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHJ1bGV0dXAsIFR1cGxlRGVzYyBydWxl dHRjLAogCXRhYmxlX2Nsb3NlKGV2X3JlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOwogfQogCisv KgorICogR2l2ZW4gYSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byBhIHJ1bGUncyBwZ19yZXdyaXRl LmV2X3F1YWwgYW5kIGEgcXVlcnkKKyAqIHBhcnNldHJlZSwgYXBwZW5kIGV2X3F1YWwncyB0ZXh0 IHJlcHJlc2VudGF0aW9uIGludG8gdGhlIG91dHB1dCBidWYuCisgKgorICogVHJpZXMgdG8gcHJl dHR5IHVwIHRoZSBvdXRwdXQgYWNjb3JkaW5nIHRvIHByZXR0eUZsYWdzLgorICovCitzdGF0aWMg dm9pZAorcGdfZ2V0X3J1bGVfd2hlcmVjbGF1c2UoY2hhciAqcXVhbHN0ciwgUXVlcnkgKnF1ZXJ5 LCBTdHJpbmdJbmZvIGJ1ZiwKKwkJCQkJCWludCBwcmV0dHlGbGFncykKK3sKKwlOb2RlCSAgICpx dWFsOworCWRlcGFyc2VfY29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7 CisKKwlxdWFsID0gc3RyaW5nVG9Ob2RlKHF1YWxzdHIpOworCisJLyoKKwkgKiBJZiB0aGUgYWN0 aW9uIGlzIElOU0VSVC4uLlNFTEVDVCwgT0xEL05FVyBoYXZlIGJlZW4gcHVzaGVkIGRvd24KKwkg KiBpbnRvIHRoZSBTRUxFQ1QsIGFuZCB0aGF0J3Mgd2hhdCB3ZSBuZWVkIHRvIGxvb2sgYXQuIChV Z2x5IGtsdWdlCisJICogLi4uIHRyeSB0byBmaXggdGhpcyB3aGVuIHdlIHJlZGVzaWduIHF1ZXJ5 dHJlZXMuKQorCSAqLworCXF1ZXJ5ID0gZ2V0SW5zZXJ0U2VsZWN0UXVlcnkocXVlcnksIE5VTEwp OworCisJLyogTXVzdCBhY3F1aXJlIGxvY2tzIHJpZ2h0IGF3YXk7IHNlZSBub3RlcyBpbiBnZXRf cXVlcnlfZGVmKCkgKi8KKwlBY3F1aXJlUmV3cml0ZUxvY2tzKHF1ZXJ5LCBmYWxzZSwgZmFsc2Up OworCisJY29udGV4dC5idWYgPSBidWY7CisJY29udGV4dC5uYW1lc3BhY2VzID0gbGlzdF9tYWtl MSgmZHBucyk7CisJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisJY29udGV4dC53aW5kb3dU TGlzdCA9IE5JTDsKKwljb250ZXh0LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0aChxdWVyeS0+cnRh YmxlKSAhPSAxKTsKKwljb250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5RmxhZ3M7CisJY29udGV4 dC53cmFwQ29sdW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKwljb250ZXh0LmluZGVudExldmVs ID0gUFJFVFRZSU5ERU5UX1NURDsKKwljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJ TkRfTk9ORTsKKwljb250ZXh0LmFwcGVuZHBhcmVudHMgPSBOVUxMOworCisJc2V0X2RlcGFyc2Vf Zm9yX3F1ZXJ5KCZkcG5zLCBxdWVyeSwgTklMKTsKKworCWdldF9ydWxlX2V4cHIocXVhbCwgJmNv bnRleHQsIGZhbHNlKTsKK30KIAogLyogLS0tLS0tLS0tLQogICogbWFrZV92aWV3ZGVmCQkJLSBy ZWNvbnN0cnVjdCB0aGUgU0VMRUNUIHBhcnQgb2YgYQpAQCAtMTEzNzksNyArMTE0OTcsNyBAQCBn ZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJz ZV9jb250ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3 YW50IHRoaXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2Rh dGF0eXBlLikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9w Y2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAt MTE3NzMsNyArMTE4OTEsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRfcmVsYXRpb25fbmFtZShPaWQg cmVsaWQpCiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwgbmVjZXNzYXJ5IHF1b3Rpbmcg YW5kIHNjaGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFyICoKK2NoYXIgKgogZ2VuZXJh dGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLCBP aWQgKmFyZ3R5cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRpYywgYm9vbCAqdXNlX3Zhcmlh ZGljX3AsCiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCkKQEAgLTEyMTU5 LDcgKzEyMjc3LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5mbyBidWYsIERhdHVtIHJlbG9w dGlvbnMpCiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXByZXNlbnRpbmcgYSByZWxhdGlv bidzIHJlbG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwotc3RhdGljIGNoYXIgKgorY2hh ciAqCiBmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewogCWNoYXIJICAgKnJlc3VsdCA9 IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggNmVjYWEyYS4uNzE1 ZjJhMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtMTgsOCArMTgsOCBA QAogI2RlZmluZSBQR19QVUJMSUNBVElPTl9ICiAKICNpbmNsdWRlICJjYXRhbG9nL2dlbmJraS5o IgotI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cv cGdfcHVibGljYXRpb25fZC5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKIAogLyogLS0t LS0tLS0tLS0tLS0tLQogICoJCXBnX3B1YmxpY2F0aW9uIGRlZmluaXRpb24uICBjcHAgdHVybnMg dGhpcyBpbnRvCkBAIC0xMDMsMTIgKzEwMyw2IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9u CiAJUHVibGljYXRpb25BY3Rpb25zIHB1YmFjdGlvbnM7CiB9IFB1YmxpY2F0aW9uOwogCi10eXBl ZGVmIHN0cnVjdCBQdWJsaWNhdGlvblJlbEluZm8KLXsKLQlSZWxhdGlvbglyZWxhdGlvbjsKLQlO b2RlCSAgICp3aGVyZUNsYXVzZTsKLQlMaXN0CSAgICpjb2x1bW5zOwotfSBQdWJsaWNhdGlvblJl bEluZm87CiAKIGV4dGVybiBQdWJsaWNhdGlvbiAqR2V0UHVibGljYXRpb24oT2lkIHB1YmlkKTsK IGV4dGVybiBQdWJsaWNhdGlvbiAqR2V0UHVibGljYXRpb25CeU5hbWUoY29uc3QgY2hhciAqcHVi bmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKQEAgLTE0NCwxNSArMTM4LDYgQEAgZXh0ZXJuIExpc3Qg KkdldFB1YlBhcnRpdGlvbk9wdGlvblJlbGF0aW9ucyhMaXN0ICpyZXN1bHQsCiAJCQkJCQkJCQkJ CU9pZCByZWxpZCk7CiBleHRlcm4gT2lkCUdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24o T2lkIHB1Ym9pZCwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCQkJCQlpbnQgKmFuY2VzdG9yX2xl dmVsKTsKLQotZXh0ZXJuIGJvb2wgaXNfcHVibGlzaGFibGVfcmVsYXRpb24oUmVsYXRpb24gcmVs KTsKIGV4dGVybiBib29sIGlzX3NjaGVtYV9wdWJsaWNhdGlvbihPaWQgcHViaWQpOwotZXh0ZXJu IE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGlj YXRpb25SZWxJbmZvICpwcmksCi0JCQkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3RzKTsKLWV4 dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQg c2NoZW1haWQsCi0JCQkJCQkJCQkJCWJvb2wgaWZfbm90X2V4aXN0cyk7Ci0KLWV4dGVybiBCaXRt YXBzZXQgKnB1Yl9jb2xsaXN0X3RvX2JpdG1hcHNldChCaXRtYXBzZXQgKmNvbHVtbnMsIERhdHVt IHB1YmNvbHMsCi0JCQkJCQkJCQkJICAgTWVtb3J5Q29udGV4dCBtY3h0KTsKIAogI2VuZGlmCQkJ CQkJCS8qIFBHX1BVQkxJQ0FUSU9OX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvbGxhdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMu aAppbmRleCBiNzZjN2IzLi41M2M0YTFhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5k cy9jb2xsYXRpb25jbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21k cy5oCkBAIC0xOCw3ICsxOCw4IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgi CiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIKIAotZXh0ZXJuIE9iamVjdEFkZHJlc3Mg RGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBh cmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cyk7CitleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZp bmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1l dGVycywKKwkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9t X2NvbGxpZCk7CiBleHRlcm4gdm9pZCBJc1RoZXJlQ29sbGF0aW9uSW5OYW1lc3BhY2UoY29uc3Qg Y2hhciAqY29sbG5hbWUsIE9pZCBuc3BPaWQpOwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJD b2xsYXRpb24oQWx0ZXJDb2xsYXRpb25TdG10ICpzdG10KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oCmluZGV4IDVlZDZlY2UuLmE5N2U4YjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL2RlcGVu ZGVuY3kuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJj YXRhbG9nL3BnX2V2ZW50X3RyaWdnZXIuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNpbmNs dWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVkZSAidGNvcC9jbWR0YWcuaCIKICNpbmNs dWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgpAQCAtMjksNiArMzAsNDQgQEAgdHlwZWRlZiBz dHJ1Y3QgRXZlbnRUcmlnZ2VyRGF0YQogCUNvbW1hbmRUYWcJdGFnOwogfSBFdmVudFRyaWdnZXJE YXRhOwogCit0eXBlZGVmIHN0cnVjdCBFdmVudFRyaWdnZXJRdWVyeVN0YXRlCit7CisJLyogbWVt b3J5IGNvbnRleHQgZm9yIHRoaXMgc3RhdGUncyBvYmplY3RzICovCisJTWVtb3J5Q29udGV4dCBj eHQ7CisKKwkvKiBzcWxfZHJvcCAqLworCXNsaXN0X2hlYWQJU1FMRHJvcExpc3Q7CisJYm9vbAkJ aW5fc3FsX2Ryb3A7CisKKwkvKiB0YWJsZV9yZXdyaXRlICovCisJT2lkCQkJdGFibGVfcmV3cml0 ZV9vaWQ7CS8qIEludmFsaWRPaWQsIG9yIHNldCBmb3IgdGFibGVfcmV3cml0ZQorCQkJCQkJCQkJ ICogZXZlbnQgKi8KKwlpbnQJCQl0YWJsZV9yZXdyaXRlX3JlYXNvbjsJLyogQVRfUkVXUklURSBy ZWFzb24gKi8KKworCS8qIFN1cHBvcnQgZm9yIGNvbW1hbmQgY29sbGVjdGlvbiAqLworCWJvb2wJ CWNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkOworCUNvbGxlY3RlZENvbW1hbmQgKmN1cnJlbnRD b21tYW5kOworCUxpc3QJICAgKmNvbW1hbmRMaXN0OwkvKiBsaXN0IG9mIENvbGxlY3RlZENvbW1h bmQ7IHNlZQorCQkJCQkJCQkgKiBkZXBhcnNlX3V0aWxpdHkuaCAqLworCXN0cnVjdCBFdmVudFRy aWdnZXJRdWVyeVN0YXRlICpwcmV2aW91czsKK30gRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZTsKKwor LyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICovCit0eXBlZGVmIHN0cnVjdCBTUUxEcm9w T2JqZWN0Cit7CisJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCWNvbnN0IGNoYXIgKnNjaGVtYW5h bWU7CisJY29uc3QgY2hhciAqb2JqbmFtZTsKKwljb25zdCBjaGFyICpvYmppZGVudGl0eTsKKwlj b25zdCBjaGFyICpvYmplY3R0eXBlOworCUxpc3QJICAgKmFkZHJuYW1lczsKKwlMaXN0CSAgICph ZGRyYXJnczsKKwlib29sCQlvcmlnaW5hbDsKKwlib29sCQlub3JtYWw7CisJYm9vbAkJaXN0ZW1w OworCXNsaXN0X25vZGUJbmV4dDsKK30gU1FMRHJvcE9iamVjdDsKKwogI2RlZmluZSBBVF9SRVdS SVRFX0FMVEVSX1BFUlNJU1RFTkNFCTB4MDEKICNkZWZpbmUgQVRfUkVXUklURV9ERUZBVUxUX1ZB TAkJCTB4MDIKICNkZWZpbmUgQVRfUkVXUklURV9DT0xVTU5fUkVXUklURQkJMHgwNApAQCAtODQs NSArMTIzLDcgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZU9wQ2xhc3Mo Q3JlYXRlT3BDbGFzc1N0bXQgKnN0bXQsCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0 QWx0ZXJUU0NvbmZpZyhBbHRlclRTQ29uZmlndXJhdGlvblN0bXQgKnN0bXQsCiAJCQkJCQkJCQkJ CSBPaWQgY2ZnSWQsIE9pZCAqZGljdElkcywgaW50IG5kaWN0cyk7CiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJDb2xsZWN0QWx0ZXJEZWZQcml2cyhBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdCAq c3RtdCk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0U2VjTGFiZWwoT2JqZWN0QWRk cmVzcyBhZGRyZXNzLCBjaGFyICpwcm92aWRlciwKKwkJCQkJCQkJCQlTZWNMYWJlbFN0bXQgKnN0 bXQpOwogCiAjZW5kaWYJCQkJCQkJLyogRVZFTlRfVFJJR0dFUl9IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5oCmluZGV4IDcwZDVlMzYuLmEzZmNhOWUgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oCisrKyBiL3NyYy9pbmNsdWRl L2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oCkBAIC0yMiw2ICsyMiwxMyBAQAogLyogU2FtZSBh cyBNQVhOVU1NRVNTQUdFUyBpbiBzaW52YWxhZHQuYyAqLwogI2RlZmluZSBNQVhfUkVMQ0FDSEVf SU5WQUxfTVNHUyA0MDk2CiAKK3R5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uUmVsSW5mbworewor CVJlbGF0aW9uCXJlbGF0aW9uOworCU5vZGUJICAgKndoZXJlQ2xhdXNlOworCUxpc3QJICAgKmNv bHVtbnM7Cit9IFB1YmxpY2F0aW9uUmVsSW5mbzsKKwogZXh0ZXJuIE9iamVjdEFkZHJlc3MgQ3Jl YXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQg KnN0bXQpOwogZXh0ZXJuIHZvaWQgQWx0ZXJQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUs IEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10KTsKIGV4dGVybiB2b2lkIFJlbW92ZVB1YmxpY2F0 aW9uQnlJZChPaWQgcHViaWQpOwpAQCAtMzUsNSArNDIsMTIgQEAgZXh0ZXJuIGJvb2wgcHViX3Jm X2NvbnRhaW5zX2ludmFsaWRfY29sdW1uKE9pZCBwdWJpZCwgUmVsYXRpb24gcmVsYXRpb24sCiAJ CQkJCQkJCQkJICAgTGlzdCAqYW5jZXN0b3JzLCBib29sIHB1YnZpYXJvb3QpOwogZXh0ZXJuIGJv b2wgcHViX2NvbGxpc3RfY29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlv biByZWxhdGlvbiwKIAkJCQkJCQkJCQkJCUxpc3QgKmFuY2VzdG9ycywgYm9vbCBwdWJ2aWFyb290 KTsKK2V4dGVybiBCaXRtYXBzZXQgKnB1Yl9jb2xsaXN0X3RvX2JpdG1hcHNldChCaXRtYXBzZXQg KmNvbHVtbnMsIERhdHVtIHB1YmNvbHMsCisJCQkJCQkJCQkJICAgTWVtb3J5Q29udGV4dCBtY3h0 KTsKK2V4dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHVi aWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAorCQkJCQkJCQkJCQkgIGJvb2wgaWZfbm90X2V4 aXN0cyk7CitleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfc2NoZW1hKE9pZCBw dWJpZCwgT2lkIHNjaGVtYWlkLAorCQkJCQkJCQkJCQlib29sIGlmX25vdF9leGlzdHMpOworZXh0 ZXJuIGJvb2wgaXNfcHVibGlzaGFibGVfcmVsYXRpb24oUmVsYXRpb24gcmVsKTsKIAogI2VuZGlm CQkJCQkJCS8qIFBVQkxJQ0FUSU9OQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9zZXF1ZW5jZS5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAppbmRl eCA3ZGI3YjNkLi5jMGEzOTU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1 ZW5jZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKQEAgLTE1LDYgKzE1 LDcgQEAKIAogI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9vYmplY3RhZGRyZXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgogI2lu Y2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgogI2luY2x1ZGUgIm5v ZGVzL3BhcnNlbm9kZXMuaCIKQEAgLTUxLDkgKzUyLDE3IEBAIHR5cGVkZWYgc3RydWN0IHhsX3Nl cV9yZWMKIAkvKiBTRVFVRU5DRSBUVVBMRSBEQVRBIEZPTExPV1MgQVQgVEhFIEVORCAqLwogfSB4 bF9zZXFfcmVjOwogCisvKiBJbmZvcm1hdGlvbiBuZWVkZWQgdG8gZGVmaW5lIGEgc2VxdWVuY2Uu ICovCit0eXBlZGVmIHN0cnVjdCBTZXF1ZW5jZV92YWx1ZXMKK3sKKwlGb3JtX3BnX3NlcXVlbmNl IHNlcWZvcm07CisJaW50NjQJCWxhc3RfdmFsdWU7Cit9IFNlcXVlbmNlX3ZhbHVlczsKKwogZXh0 ZXJuIGludDY0IG5leHR2YWxfaW50ZXJuYWwoT2lkIHJlbGlkLCBib29sIGNoZWNrX3Blcm1pc3Np b25zKTsKIGV4dGVybiBEYXR1bSBuZXh0dmFsKFBHX0ZVTkNUSU9OX0FSR1MpOwogZXh0ZXJuIExp c3QgKnNlcXVlbmNlX29wdGlvbnMoT2lkIHJlbGlkKTsKK2V4dGVybiBTZXF1ZW5jZV92YWx1ZXMg KmdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQpOwogCiBleHRlcm4gT2JqZWN0QWRk cmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVNlcVN0bXQgKnNl cSk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVlbmNlKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgQWx0ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVw YXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4 IGI1ODU4MTAuLmExZTA2ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91 dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMjks NyArMjksOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJP cEZhbWlseSwKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BDbGFz cywKLQlTQ1RfQWx0ZXJUU0NvbmZpZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9TZWN1cml0 eUxhYmVsCiB9IENvbGxlY3RlZENvbW1hbmRUeXBlOwogCiAvKgpAQCAtMTAwLDYgKzEwMSwxMyBA QCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9iamVjdFR5cGUJb2Jq dHlwZTsKIAkJfQkJCWRlZnByaXZzOworCisJCS8qIFNFQ1VSSVRZIExBQkVMICovCisJCXN0cnVj dAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQljaGFyCQkgKnByb3ZpZGVyOwor CQl9CQkJc2VjbGFiZWw7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZCAqcGFy ZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC91dGls aXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaAppbmRleCA1OWU2NGFlLi5hNjhjZTNk IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVk ZS90Y29wL3V0aWxpdHkuaApAQCAtOTksNiArOTksOCBAQCBleHRlcm4gUXVlcnkgKlV0aWxpdHlD b250YWluc1F1ZXJ5KE5vZGUgKnBhcnNldHJlZSk7CiAKIGV4dGVybiBDb21tYW5kVGFnIENyZWF0 ZUNvbW1hbmRUYWcoTm9kZSAqcGFyc2V0cmVlKTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmlu Z2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSwgYm9vbCBpc2dyYW50KTsKKwogc3RhdGlj IGlubGluZSBjb25zdCBjaGFyICoKIENyZWF0ZUNvbW1hbmROYW1lKE5vZGUgKnBhcnNldHJlZSkK IHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbC5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvYWNsLmgKaW5kZXggZjhlMTIzOC4uZjA1NTc4ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvYWNsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKQEAgLTIwOSw2ICsyMDks OCBAQCBleHRlcm4gQWNsTW9kZSBhY2xtYXNrKGNvbnN0IEFjbCAqYWNsLCBPaWQgcm9sZWlkLCBP aWQgb3duZXJJZCwKIAkJCQkJICAgQWNsTW9kZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7CiBleHRl cm4gaW50CWFjbG1lbWJlcnMoY29uc3QgQWNsICphY2wsIE9pZCAqKnJvbGVpZHMpOwogCitleHRl cm4gY29uc3QgY2hhciAqcHJpdmlsZWdlX3RvX3N0cmluZyhBY2xNb2RlIHByaXZpbGVnZSk7CisK IGV4dGVybiBib29sIGhhc19wcml2c19vZl9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKIGV4 dGVybiBib29sIG1lbWJlcl9jYW5fc2V0X3JvbGUoT2lkIG1lbWJlciwgT2lkIHJvbGUpOwogZXh0 ZXJuIHZvaWQgY2hlY2tfY2FuX3NldF9yb2xlKE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2FjbGNoa19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUv dXRpbHMvYWNsY2hrX2ludGVybmFsLmgKaW5kZXggNTVhZjYyNC4uOTQ2NTQ1ZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvYWNsY2hrX2ludGVybmFsLmgKQEAgLTM5LDYgKzM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QK IAlMaXN0CSAgICpncmFudGVlczsKIAlib29sCQlncmFudF9vcHRpb247CiAJRHJvcEJlaGF2aW9y IGJlaGF2aW9yOworCU9pZAkJCWdyYW50b3JfdWlkOwogfSBJbnRlcm5hbEdyYW50OwogCiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggYi9zcmMvaW5jbHVkZS91dGls cy9idWlsdGlucy5oCmluZGV4IDJmOGI0NmQuLjQ4YjhiZmQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3V0aWxzL2J1aWx0aW5zLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaApA QCAtMTIzLDEwICsxMjMsMTIgQEAgZXh0ZXJuIERhdHVtIG51bWVyaWNfZmxvYXQ4X25vX292ZXJm bG93KFBHX0ZVTkNUSU9OX0FSR1MpOwogI2RlZmluZSBGT1JNQVRfVFlQRV9GT1JDRV9RVUFMSUZZ CTB4MDQJLyogZm9yY2UgcXVhbGlmaWNhdGlvbiBvZiB0eXBlICovCiAjZGVmaW5lIEZPUk1BVF9U WVBFX0lOVkFMSURfQVNfTlVMTAkweDA4CS8qIE5VTEwgaWYgdW5kZWZpbmVkICovCiBleHRlcm4g Y2hhciAqZm9ybWF0X3R5cGVfZXh0ZW5kZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLCBi aXRzMTYgZmxhZ3MpOworZXh0ZXJuIGNoYXIgKmZvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJv Y2VkdXJlX29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KTsKIAogZXh0ZXJuIGNoYXIgKmZvcm1hdF90 eXBlX2JlKE9pZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmVfcXVhbGlm aWVkKE9pZCB0eXBlX29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9k KE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7CitleHRlcm4gY2hhciAqcHJpbnRUeXBtb2Qo Y29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKIAogZXh0 ZXJuIGludDMyIHR5cGVfbWF4aW11bV9zaXplKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7 CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2luY2x1ZGUvdXRp bHMvcmVsLmgKaW5kZXggNjdmOTk0Yy4uMjJjYTdhOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmgKQEAgLTE2LDEwICsxNiwx MiBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxv Zy5oIgorI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfY2xhc3MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2luZGV4LmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIgogI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgor I2luY2x1ZGUgIm5vZGVzL2xvY2tvcHRpb25zLmgiCiAjaW5jbHVkZSAicGFydGl0aW9uaW5nL3Bh cnRkZWZzLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9wcnMybG9jay5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvYmxvY2suaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKaW5kZXggMWE0MmQ5Zi4uYjZlMjBlNyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUv dXRpbHMvcnVsZXV0aWxzLmgKQEAgLTEzLDkgKzEzLDEyIEBACiAjaWZuZGVmIFJVTEVVVElMU19I CiAjZGVmaW5lIFJVTEVVVElMU19ICiAKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5j bHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNp bmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgogCiBzdHJ1Y3QgUGxhbjsJCQkJCS8qIGF2b2lk IGluY2x1ZGluZyBwbGFubm9kZXMuaCBoZXJlICovCiBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CkBAIC0y MywxMiArMjYsMjAgQEAgc3RydWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0 X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2lu ZGV4ZGVmX2NvbHVtbnMoT2lkIGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFy ICpwZ19nZXRfdHJpZ2dlcl93aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAorCQkJ CQkJCQkJICAgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBn X2dldF9xdWVyeWRlZihRdWVyeSAqcXVlcnksIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpw Z19nZXRfdmlld2RlZl9zdHJpbmcoT2lkIHZpZXdvaWQpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0 X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFy ICpwZ19nZXRfcGFydGtleWRlZl9zdHJpbmcoT2lkIHJlbGlkKTsKIGV4dGVybiBjaGFyICpwZ19n ZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBhcnRpdGlvbklkLCBjaGFyICphbGlhc25hbWUp OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3Ry YWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl9zdHJpbmcoT2lkIGNv bnN0cmFpbnRJZCk7CitleHRlcm4gdm9pZCBwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBl dl9xdWFsLCBEYXR1bSBldl9hY3Rpb24sCisJCQkJCQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExp c3QgKiphY3Rpb25zKTsKKwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZXhwcmVzc2lvbihOb2RlICpl eHByLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCWJvb2wgZm9yY2VwcmVmaXgsIGJvb2wgc2hv d2ltcGxpY2l0KTsKIGV4dGVybiBMaXN0ICpkZXBhcnNlX2NvbnRleHRfZm9yKGNvbnN0IGNoYXIg KmFsaWFzbmFtZSwgT2lkIHJlbGlkKTsKQEAgLTQwLDggKzUxLDE2IEBAIGV4dGVybiBMaXN0ICpz ZWxlY3RfcnRhYmxlX25hbWVzX2Zvcl9leHBsYWluKExpc3QgKnJ0YWJsZSwKIAkJCQkJCQkJCQkJ IEJpdG1hcHNldCAqcmVsc191c2VkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25f bmFtZShPaWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lk IG9wY2xhc3MpOworZXh0ZXJuIGNoYXIgKmdlbmVyYXRlX2Z1bmN0aW9uX25hbWUoT2lkIGZ1bmNp ZCwgaW50IG5hcmdzLCBMaXN0ICphcmduYW1lcywKKwkJCQkJCQkJCU9pZCAqYXJndHlwZXMsIGJv b2wgaGFzX3ZhcmlhZGljLAorCQkJCQkJCQkJYm9vbCAqdXNlX3ZhcmlhZGljX3AsCisJCQkJCQkJ CQlQYXJzZUV4cHJLaW5kIHNwZWNpYWxfZXhwcmtpbmQpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5n ZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5kX2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRf b3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSBT dHJpbmdJbmZvIGJ1Zik7CitleHRlcm4gY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxp ZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcoT2lkIHN0 YXRleHRpZCk7CitleHRlcm4gdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8g YnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiAKICNlbmRpZgkJCQkJCQkvKiBSVUxFVVRJTFNfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA4NmE5MzAzLi40Mjg2ODlhIDEwMDY0NAot LS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjQ1OCw2ICsyNDU4LDcgQEAgU2VxU2NhbgogU2VxU2Nh blN0YXRlCiBTZXFUYWJsZQogU2VxVGFibGVEYXRhCitTZXF1ZW5jZV92YWx1ZXMKIFNlckNvbW1p dFNlcU5vCiBTZXJpYWxDb250cm9sCiBTZXJpYWxpemFibGVYYWN0SGFuZGxlCi0tIAoxLjguMy4x Cgo= --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v75-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kcp4 RnJvbSA0MjgwOTdlYTFmZmEzNDEzYjFlNmIwYTJjMGU1NGVjYzA1YzhlMmI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzo1MzozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDUvOF0gRERMIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9u LgoKRERMIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgotLS0K IGNvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0ICAgICAgICAgIHwgIDI2ICsr KysrCiBjb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwgICAgICAgICAgICAgICB8ICAg NSArCiBjb250cmliL3Rlc3RfZGVjb2RpbmcvdGVzdF9kZWNvZGluZy5jICAgICAgICAgICB8ICA0 OCArKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAgICAgICAg ICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVz Yy5jIHwgIDUyICsrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5i dWlsZCAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAg ICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFr ZWZpbGUgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jICAgIHwgIDg0ICsrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICAgIHwgIDQxICsrKysrKysrCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgICB8ICA0NCArKysrKysrKwogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYyAgfCAgMjQgKysrKysKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIHwgMTI3ICsrKysr KysrKysrKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmggICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAgICAg ICAgICAgICAgICAgfCAgIDggKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCAgICAgICAgICAgIHwgIDYwICsrKysrKysrKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9k ZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9v dXRwdXRfcGx1Z2luLmggICAgICAgICB8ICAxNCArKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDI3ICsrKysrCiAyMSBmaWxlcyBjaGFuZ2VkLCA1 NjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKCmRpZmYgLS1naXQgYS9jb250cmli L3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvZGRsLm91dCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9l eHBlY3RlZC9kZGwub3V0CmluZGV4IDlhMjhiNWQuLjBmNTFmMmIgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0CisrKyBiL2NvbnRyaWIvdGVzdF9kZWNv ZGluZy9leHBlY3RlZC9kZGwub3V0CkBAIC04MzEsNiArODMxLDMyIEBAIFNFTEVDVCBkYXRhIEZS T00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBO VUxMLCAnaW5jCiAtLS0tLS0KICgwIHJvd3MpCiAKK1NFTEVDVCAnZGRsIG1zZzEnIEZST00gcGdf bG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMScsIDE2Mzk0LCAxLCAnbXNnMScpOwor ID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIGRkbCBtc2cxCisoMSByb3cpCisKK1NFTEVDVCAnZGRs IG1zZzInIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMicsIDE2Mzk0 LCAxLCAneyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAl e2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImZvbyIsICJhdXRob3JpemF0aW9uIjogeyJmbXQi OiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxz ZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifScpOwor ID9jb2x1bW4/IAorLS0tLS0tLS0tLQorIGRkbCBtc2cyCisoMSByb3cpCisKK1NFTEVDVCAnZGRs IG1zZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMycsIDE2Mzk0 LCAxLCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlz dHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7 dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRo b2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwgInNj aGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRT ICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAi b25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJl c2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJm bXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJs ZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6 ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJU SVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6 IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlz dHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1U IFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtu b3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQi LCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6 IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwg ImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVs bCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9 LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNT SU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Np b25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVE IEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworID9jb2x1bW4/IAorLS0tLS0t LS0tLQorIGRkbCBtc2czCisoMSByb3cpCisKK1NFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9z bG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14 aWRzJywgJzAnLCAnc2tpcC1lbXB0eS14YWN0cycsICcxJyk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbWVzc2FnZTogcHJlZml4OiBkZGwgbXNn MSwgcmVsaWQ6IDE2Mzk0LCBjbWR0eXBlOiBEcm9wIHN0YXJ0LCBzejogNCBjb250ZW50Om1zZzEK KyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2cyLCByZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Ag c3RhcnQsIHN6OiAyMTcgY29udGVudDp7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4 aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhv cml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUki LCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3Rf ZXhpc3RzIjogIiJ9CisgbWVzc2FnZTogcHJlZml4OiBkZGwgbXNnMywgcmVsaWQ6IDE2Mzk0LCBj bWR0eXBlOiBEcm9wIHN0YXJ0LCBzejogMTM5NiBjb250ZW50OnsiZm10IjogIkNSRUFURSAle3Bl cnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxl X2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1z ICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlk ZW50aXR5IjogeyJvYmpuYW1lIjogImZvbyIsICJzY2hlbWFuYW1lIjogImVsZW1lbnRfdGVzdCJ9 LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVu dHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENP TU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92 YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNw YWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVu Y2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9 LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwg InByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7 ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nl c3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6 IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7 Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dl bmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5 cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQi LCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVM VCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10 IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAi Y29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJh dGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZh bHNlfX1dfX0KKygzIHJvd3MpCisKIFNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3Jl Z3Jlc3Npb25fc2xvdCcpOwogIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCAKIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2Rk bC5zcWwgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwKaW5kZXggNGY3NmJlZC4u MWVhNWE0YiAxMDA2NDQKLS0tIGEvY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCisr KyBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbApAQCAtNDMxLDYgKzQzMSwxMSBA QCBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygncmVncmVzc2lv bl9zbG90JywgTlVMTCwgTlVMTCwgJ2luYwogLS0gZG9uZSwgZnJlZSBsb2dpY2FsIHJlcGxpY2F0 aW9uIHNsb3QKIFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdy ZWdyZXNzaW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14aWRzJywgJzAnLCAnc2tpcC1l bXB0eS14YWN0cycsICcxJyk7CiAKK1NFTEVDVCAnZGRsIG1zZzEnIEZST00gcGdfbG9naWNhbF9l bWl0X2RkbF9tZXNzYWdlKCdkZGwgbXNnMScsIDE2Mzk0LCAxLCAnbXNnMScpOworU0VMRUNUICdk ZGwgbXNnMicgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywgMTYz OTQsIDEsICd7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1J ICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZt dCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9Jyk7 CitTRUxFQ1QgJ2RkbCBtc2czJyBGUk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRs IG1zZzMnLCAxNjM5NCwgMSwgJ3siZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUg JXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7 aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMg JXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1l IjogImZvbyIsICJzY2hlbWFuYW1lIjogImVsZW1lbnRfdGVzdCJ9LCAiaW5oZXJpdHMiOiB7ImZt dCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2Vu dCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92 YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFi bGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xh dXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5Ijog eyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwg ImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2Fj Y2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0s ICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9 SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2Nv bGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIs ICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIi LCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJw Z19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFs c2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJl c2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZt dCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxz ZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10 IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX1dfX0nKTsKK1NFTEVD VCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNzaW9uX3Nsb3Qn LCBOVUxMLCBOVUxMLCAnaW5jbHVkZS14aWRzJywgJzAnLCAnc2tpcC1lbXB0eS14YWN0cycsICcx Jyk7CisKIFNFTEVDVCBwZ19kcm9wX3JlcGxpY2F0aW9uX3Nsb3QoJ3JlZ3Jlc3Npb25fc2xvdCcp OwogCiAvKiBjaGVjayB0aGF0IHRoZSBzbG90IGlzIGdvbmUgKi8KZGlmZiAtLWdpdCBhL2NvbnRy aWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29kaW5nLmMgYi9jb250cmliL3Rlc3RfZGVjb2Rpbmcv dGVzdF9kZWNvZGluZy5jCmluZGV4IGI3ZTYwNDguLmU5NjdlM2IgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvdGVzdF9kZWNvZGluZy90ZXN0X2RlY29kaW5nLmMKKysrIGIvY29udHJpYi90ZXN0X2RlY29k aW5nL3Rlc3RfZGVjb2RpbmcuYwpAQCAtMTQsOSArMTQsMTEgQEAKIAogI2luY2x1ZGUgImNhdGFs b2cvcGdfdHlwZS5oIgogCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2lu Y2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmln aW4uaCIKIAorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9i dWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L21lbXV0aWxzLmgiCkBAIC03Miw2ICs3NCwxMiBAQCBzdGF0aWMgdm9pZCBwZ19kZWNvZGVfbWVz c2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJICBSZW9yZGVyQnVmZmVy VFhOICp0eG4sIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBj b25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJICBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdl KTsKK3N0YXRpYyB2b2lkIHBnX2RlY29kZV9kZGxfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsCisJCQkJCQkJCSAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBPaWQg cmVsaWQsCisJCQkJCQkJCSAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkg IFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdfZGVjb2RlX2Zp bHRlcl9wcmVwYXJlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCSBUcmFu c2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCSBjb25zdCBjaGFyICpnaWQpOwpAQCAtMTM1LDYgKzE0 Myw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikK IAljYi0+ZmlsdGVyX2J5X29yaWdpbl9jYiA9IHBnX2RlY29kZV9maWx0ZXI7CiAJY2ItPnNodXRk b3duX2NiID0gcGdfZGVjb2RlX3NodXRkb3duOwogCWNiLT5tZXNzYWdlX2NiID0gcGdfZGVjb2Rl X21lc3NhZ2U7CisJY2ItPmRkbF9jYiA9IHBnX2RlY29kZV9kZGxfbWVzc2FnZTsKIAljYi0+Zmls dGVyX3ByZXBhcmVfY2IgPSBwZ19kZWNvZGVfZmlsdGVyX3ByZXBhcmU7CiAJY2ItPmJlZ2luX3By ZXBhcmVfY2IgPSBwZ19kZWNvZGVfYmVnaW5fcHJlcGFyZV90eG47CiAJY2ItPnByZXBhcmVfY2Ig PSBwZ19kZWNvZGVfcHJlcGFyZV90eG47CkBAIC03NTEsNiArNzYwLDQ1IEBAIHBnX2RlY29kZV9t ZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIH0KIAogc3RhdGljIHZvaWQKK3Bn X2RlY29kZV9kZGxfbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBjb25zdCBjaGFy ICpwcmVmaXgsIE9pZCByZWxpZCwKKwkJCQkJICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs IFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJT3V0cHV0UGx1Z2luUHJlcGFyZVdy aXRlKGN0eCwgdHJ1ZSk7CisJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgIm1lc3NhZ2U6IHBy ZWZpeDogJXMsIHJlbGlkOiAldSwgIiwKKwkJCQkJIHByZWZpeCwgcmVsaWQpOworCisJc3dpdGNo KGNtZHR5cGUpCisJeworCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhj dHgtPm91dCwgImNtZHR5cGU6IFNpbXBsZSwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX1RhYmxl RHJvcFN0YXJ0OgorCQlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAiY21kdHlwZTogRHJvcCBz dGFydCwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX1RhYmxlRHJvcEVuZDoKKwkJYXBwZW5kU3Ry aW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IERyb3AgZW5kLCAiKTsKKwkJYnJlYWs7CisJY2Fz ZSBEQ1RfVGFibGVBbHRlcjoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6 IEFsdGVyIHRhYmxlLCAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQ1RfT2JqZWN0Q3JlYXRlOgorCQlh cHBlbmRTdHJpbmdJbmZvKGN0eC0+b3V0LCAiY21kdHlwZTogQ3JlYXRlLCAiKTsKKwkJYnJlYWs7 CisJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNt ZHR5cGU6IERyb3AsICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlhcHBlbmRTdHJpbmdJbmZv KGN0eC0+b3V0LCAiY21kdHlwZTogSW52YWxpZCwgIik7CisJCWJyZWFrOworCX0KKworCWFwcGVu ZFN0cmluZ0luZm8oY3R4LT5vdXQsICJzejogJXp1IGNvbnRlbnQ6Iiwgc3opOworCWFwcGVuZEJp bmFyeVN0cmluZ0luZm8oY3R4LT5vdXQsIG1lc3NhZ2UsIHN6KTsKKwlPdXRwdXRQbHVnaW5Xcml0 ZShjdHgsIHRydWUpOworfQorCitzdGF0aWMgdm9pZAogcGdfZGVjb2RlX3N0cmVhbV9zdGFydChM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4 bikKIHsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmLi4yZmYw MWU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBA IE9CSlMgPSBcCiAJZ2lzdGRlc2MubyBcCiAJaGFzaGRlc2MubyBcCiAJaGVhcGRlc2MubyBcCisJ bG9naWNhbGRkbG1zZ2Rlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBcCiAJbXhhY3RkZXNjLm8g XAogCW5idGRlc2MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2Mv bG9naWNhbGRkbG1zZ2Rlc2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2Fs ZGRsbXNnZGVzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTkzMGMK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRk bG1zZ2Rlc2MuYwpAQCAtMCwwICsxLDUyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBs b2dpY2FsZGRsbXNnZGVzYy5jCisgKgkgIHJtZ3IgZGVzY3JpcHRvciByb3V0aW5lcyBmb3IgcmVw bGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDIwMTUtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisg KgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xv Z2ljYWxkZGxtc2dkZXNjLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisKK3Zv aWQKK2xvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpy ZWNvcmQpCit7CisJY2hhcgkgICAqcmVjID0gWExvZ1JlY0dldERhdGEocmVjb3JkKTsKKwl1aW50 OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlm IChpbmZvID09IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwl7CisJCXhsX2xvZ2ljYWxfZGRs X21lc3NhZ2UgKnhscmVjID0gKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgcmVjOworCQljaGFy CSAgICpwcmVmaXggPSB4bHJlYy0+bWVzc2FnZTsKKwkJY2hhcgkgICAqbWVzc2FnZSA9IHhscmVj LT5tZXNzYWdlICsgeGxyZWMtPnByZWZpeF9zaXplOworCQljaGFyCSAgICpzZXAgPSAiIjsKKwor CQlBc3NlcnQocHJlZml4W3hscmVjLT5wcmVmaXhfc2l6ZV0gIT0gJ1wwJyk7CisKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICJwcmVmaXggXCIlc1wiOyBwYXlsb2FkICglenUgYnl0ZXMpOiAiLAor CQkJCQkJIHByZWZpeCwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZSk7CisJCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAicmVsaWQgJXUgY21kdHlwZSAldSIsIHhscmVjLT5yZWxpZCwgeGxyZWMtPmNtZHR5cGUp OworCQkvKiBXcml0ZSBtZXNzYWdlIHBheWxvYWQgYXMgYSBzZXJpZXMgb2YgaGV4IGJ5dGVzICov CisJCWZvciAoaW50IGNudCA9IDA7IGNudCA8IHhscmVjLT5tZXNzYWdlX3NpemU7IGNudCsrKQor CQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJTAyWCIsIHNlcCwgKHVuc2lnbmVkIGNo YXIpIG1lc3NhZ2VbY250XSk7CisJCQlzZXAgPSAiICI7CisJCX0KKwl9Cit9CisKK2NvbnN0IGNo YXIgKgorbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKQoreworCWlmICgoaW5mbyAm IH5YTFJfSU5GT19NQVNLKSA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJCXJldHVybiAi RERMIjsKKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29u LmJ1aWxkCmluZGV4IDE2NmNlZTYuLjc4MWUyZDcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbWVzb24uYnVpbGQKQEAgLTExLDYgKzExLDcgQEAgcm1ncl9kZXNjX3NvdXJjZXMgPSBmaWxl cygKICAgJ2dpc3RkZXNjLmMnLAogICAnaGFzaGRlc2MuYycsCiAgICdoZWFwZGVzYy5jJywKKyAg J2xvZ2ljYWxkZGxtc2dkZXNjLmMnLAogICAnbG9naWNhbG1zZ2Rlc2MuYycsCiAgICdteGFjdGRl c2MuYycsCiAgICduYnRkZXNjLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vcm1nci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCmluZGV4IDdk NjdlZGEuLjY3OGU4MWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3Jt Z3IuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKQEAgLTI3LDYgKzI3 LDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdl LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9NYWtlZmlsZQppbmRleCAyZGMyNWUzLi5kMzY4MGU5IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAgb3ZlcnJpZGUg Q1BQRkxBR1MgOj0gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JKUyA9IFwKIAlhcHBseXBh cmFsbGVsd29ya2VyLm8gXAorCWRkbG1lc3NhZ2UubyBcCiAJZGVjb2RlLm8gXAogCWxhdW5jaGVy Lm8gXAogCWxvZ2ljYWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RkbG1lc3NhZ2UuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRs bWVzc2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMWU1NmUKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3Nh Z2UuYwpAQCAtMCwwICsxLDg0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxtZXNz YWdlLmMKKyAqCSAgTG9naWNhbCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAy MDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJ Q0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5j CisgKgorICogTk9URVMKKyAqCisgKiBMb2dpY2FsIERETCBtZXNzYWdlcyBhbGxvdyBYTE9HIGxv Z2dpbmcgb2YgRERMIGNvbW1hbmQgc3RyaW5ncyB0aGF0CisgKiBnZXQgcGFzc2VkIHRvIHRoZSBs b2dpY2FsIGRlY29kaW5nIHBsdWdpbi4gSW4gbm9ybWFsIFhMT0cgcHJvY2Vzc2luZyB0aGV5Cisg KiBhcmUgc2FtZSBhcyBOT09QLgorICoKKyAqIFVubGlrZSBnZW5lcmljIGxvZ2ljYWwgbWVzc2Fn ZXMsIHRoZXNlIERETCBtZXNzYWdlcyBoYXZlIG9ubHkgdHJhbnNhY3Rpb25hbAorICogbW9kZS4g Tm90ZSBieSBkZWZhdWx0IERETHMgaW4gUG9zdGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4KKyAq CisgKiBUaGVzZSBtZXNzYWdlcyBhcmUgcGFydCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3 aWxsIGJlIHNlbnQgdG8KKyAqIGRlY29kaW5nIHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5IGFz IERNTCBvcGVyYXRpb25zLgorICoKKyAqIEV2ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXggdG8g YXZvaWQgY29uZmxpY3RzIGJldHdlZW4gZGlmZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5zLiBU aGUgcGx1Z2luIGF1dGhvcnMgbXVzdCB0YWtlIGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBwcmVm aXgsCisgKiBnb29kIG9wdGlvbnMgc2VlbXMgdG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRoZSBu YW1lIG9mIHRoZSBleHRlbnNpb24uCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1 ZGUgImFjY2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIK KyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRs bWVzc2FnZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0ZSBs b2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0cgor TG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNpemVf dCBzaXplKQoreworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgeGxyZWM7CisKKwkgLyogRW5zdXJl IHdlIGhhdmUgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4gKi8KKwlBc3NlcnQoSXNUcmFuc2FjdGlv blN0YXRlKCkpOworCUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisKKwl4bHJlYy5kYklkID0g TXlEYXRhYmFzZUlkOworCS8qIFRyYWlsaW5nIHplcm8gaXMgY3JpdGljYWw7IHNlZSBsb2dpY2Fs ZGRsbXNnX2Rlc2MgKi8KKwl4bHJlYy5wcmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpICsgMTsK Kwl4bHJlYy5tZXNzYWdlX3NpemUgPSBzaXplOworCXhscmVjLnJlbGlkID0gcmVsaWQ7CisJeGxy ZWMuY21kdHlwZSA9IGNtZHR5cGU7CisKKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0 ZXJEYXRhKChjaGFyICopICZ4bHJlYywgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UpOworCVhMb2dS ZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIHByZWZpeCksIHhscmVjLnByZWZpeF9zaXpl KTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBtZXNzYWdlKSwgc2l6ZSk7 CisKKwkvKiBBbGxvdyBvcmlnaW4gZmlsdGVyaW5nICovCisJWExvZ1NldFJlY29yZEZsYWdzKFhM T0dfSU5DTFVERV9PUklHSU4pOworCisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fTE9HSUNBTERETE1T R19JRCwgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKTsKK30KKworLyoKKyAqIFJlZG8gaXMgYmFz aWNhbGx5IGp1c3Qgbm9vcCBmb3IgbG9naWNhbCBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisgKi8K K3ZvaWQKK2xvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwl1 aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKwor CWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhQQU5JQywgImxv Z2ljYWxkZGxtc2dfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CisKKwkvKiBUaGlz IGlzIG9ubHkgaW50ZXJlc3RpbmcgZm9yIGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4g Ki8KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2Rl LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDhmZTdi YjYuLmM2MTVhMjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpA QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTYxNCw2ICs2MTUsNDYgQEAgbG9naWNhbG1zZ19k ZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiB9CiAKIC8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERMTVNHX0lEIHJlY29yZHMgZm9yIERl Y29kZVJlY29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxkZGxfZGVj b2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAqYnVmKQor eworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7CisJWExvZ1Jl YWRlclN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBYTG9nUmVj R2V0WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocikgJiB+WExSX0lORk9f TUFTSzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVjR2V0T3JpZ2luKHIpOworCXhs X2xvZ2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lD QUxfRERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX0xPR0lDQUxERExN U0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisKKwlSZW9yZGVyQnVmZmVyUHJvY2Vzc1hp ZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+b3JpZ3B0cik7CisKKwkvKgor CSAqIElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Igd2UgYXJlIGp1c3QgZmFzdC1mb3J3YXJk aW5nLCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRlY29kaW5nIGRkbCBtZXNzYWdlcy4KKwkg Ki8KKwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1aWxkZXIpIDwgU05BUEJVSUxEX0ZVTExf U05BUFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQpCisJCXJldHVybjsKKworCW1lc3NhZ2Ug PSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9nUmVjR2V0RGF0YShyKTsKKworCWlmICht ZXNzYWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSB8fAorCQlGaWx0ZXJCeU9y aWdpbihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsKKworCWlmIChTbmFwQnVpbGRQcm9jZXNz Q2hhbmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRyKSkKKwkJUmVvcmRlckJ1ZmZlclF1ZXVl RERMTWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5lbmRwdHIsCisJCQkJCQkJCQkgbWVz c2FnZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBtZXNzYWdlIGlzIHByZWZpeCAqLworCQkJ CQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdl ICsgbWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+cmVsaWQsIG1lc3Nh Z2UtPmNtZHR5cGUpOworfQorCisvKgogICogQ29uc29saWRhdGVkIGNvbW1pdCByZWNvcmQgaGFu ZGxpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0gb2YgY29tbWl0CiAgKiByZWNvcmRzLgog ICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXggYzNlYzk3 YS4uMzllNjg2MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9s b2dpY2FsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMK QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTczLDYg Kzc0LDEwIEBAIHN0YXRpYyB2b2lkIHRydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJ CSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkg ICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNz YWdlKTsKK3N0YXRpYyB2b2lkIGRkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwg Y29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICpt ZXNzYWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAqLwogc3RhdGljIHZvaWQgc3RyZWFt X3N0YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKQEAgLTIyMyw2ICsyMjgsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91 dHB1dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPmFwcGx5X3RydW5jYXRlID0gdHJ1 bmNhdGVfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPmNvbW1pdCA9IGNvbW1pdF9jYl93cmFw cGVyOwogCWN0eC0+cmVvcmRlci0+bWVzc2FnZSA9IG1lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgt PnJlb3JkZXItPmRkbCA9IGRkbF9jYl93cmFwcGVyOwogCiAJLyoKIAkgKiBUbyBzdXBwb3J0IHN0 cmVhbWluZywgd2UgcmVxdWlyZSBzdGFydC9zdG9wL2Fib3J0L2NvbW1pdC9jaGFuZ2UKQEAgLTEy MzQsNiArMTI0MCw0NCBAQCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIH0KIAogc3RhdGljIHZvaWQKK2RkbF9jYl93cmFwcGVy KFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExv Z1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxp ZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXpl LAorCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRl IHN0YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFj dHgtPmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsX2NiID09IE5VTEwp CisJCXJldHVybjsKKworCS8qIFB1c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250 ZXh0IHN0YWNrICovCisJc3RhdGUuY3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAi ZGRsIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFj ay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2su YXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29u dGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyog c2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53 cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7 CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVh bCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3MuZGRsX2NiKGN0eCwgdHhu LCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwKKwkJCQkJCQkJIG1lc3NhZ2Vf c2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwll cnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKK3N0YXRpYyB2 b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRl ckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJzdF9sc24pCiB7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsZnVuY3MuYwppbmRleCBmYTFiNjQx Li45MmY1ZjkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xv Z2ljYWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNh bGZ1bmNzLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9s b2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJzdG9yYWdlL2ZkLmgiCiAjaW5jbHVk ZSAidXRpbHMvYXJyYXkuaCIKQEAgLTM4OCwzICszODksMjYgQEAgcGdfbG9naWNhbF9lbWl0X21l c3NhZ2VfdGV4dChQR19GVU5DVElPTl9BUkdTKQogCS8qIGJ5dGVhIGFuZCB0ZXh0IGFyZSBjb21w YXRpYmxlICovCiAJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9tZXNzYWdlX2J5dGVhKGZjaW5mbyk7 CiB9CisKKy8qCisgKiBTUUwgZnVuY3Rpb24gZm9yIHdyaXRpbmcgbG9naWNhbCBkZWNvZGluZyBE REwgbWVzc2FnZSBpbnRvIFdBTC4KKyAqLworRGF0dW0KK3BnX2xvZ2ljYWxfZW1pdF9kZGxfbWVz c2FnZV9ieXRlYShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJICAgKnByZWZpeCA9IHRleHRf dG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisJT2lkCQkJcmVsaWQgPSBQR19HRVRB UkdfT0lEKDEpOworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSA9IFBHX0dFVEFSR19JTlQx NigyKTsKKwljaGFyCSAgICpkYXRhID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQ KDMpKTsKKwlYTG9nUmVjUHRyCWxzbjsKKworCWxzbiA9IExvZ0xvZ2ljYWxERExNZXNzYWdlKHBy ZWZpeCwgcmVsaWQsIGNtZHR5cGUsIGRhdGEsIHN0cmxlbihkYXRhKSk7CisJUEdfUkVUVVJOX0xT Tihsc24pOworfQorCitEYXR1bQorcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX3RleHQoUEdf RlVOQ1RJT05fQVJHUykKK3sKKwkvKiBieXRlYSBhbmQgdGV4dCBhcmUgY29tcGF0aWJsZSAqLwor CXJldHVybiBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2VfYnl0ZWEoZmNpbmZvKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCmluZGV4IGQ0OGNkNGMu Ljk5YzYwOGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVz b24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWls ZApAQCAtMiw2ICsyLDcgQEAKIAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYXBwbHlw YXJhbGxlbHdvcmtlci5jJywKKyAgJ2RkbG1lc3NhZ2UuYycsCiAgICdkZWNvZGUuYycsCiAgICds YXVuY2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDJkMTdjNTUuLjgxMTczOWIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NCw2 ICs5NCw3IEBACiAjaW5jbHVkZSAibGliL2JpbmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRt aW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCkBA IC01MTYsNiArNTE3LDE0IEBAIFJlb3JkZXJCdWZmZXJSZXR1cm5DaGFuZ2UoUmVvcmRlckJ1ZmZl ciAqcmIsIFJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQlwZnJlZShjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2UpOwogCQkJY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlID0gTlVMTDsKIAkJ CWJyZWFrOworCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQlpZiAoY2hhbmdl LT5kYXRhLmRkbC5wcmVmaXggIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRsLnBy ZWZpeCk7CisJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE5VTEw7CisJCQlpZiAoY2hhbmdl LT5kYXRhLmRkbC5tZXNzYWdlICE9IE5VTEwpCisJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLmRkbC5t ZXNzYWdlKTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSA9IE5VTEw7CisJCQlicmVhazsK IAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJaWYgKGNoYW5n ZS0+ZGF0YS5pbnZhbC5pbnZhbGlkYXRpb25zKQogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5pbnZh bC5pbnZhbGlkYXRpb25zKTsKQEAgLTkwNSw2ICs5MTQsMzYgQEAgUmVvcmRlckJ1ZmZlclF1ZXVl TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiB9CiAKIC8qCisg KiBBIHRyYW5zYWN0aW9uYWwgRERMIG1lc3NhZ2UgaXMgcXVldWVkIHRvIGJlIHByb2Nlc3NlZCB1 cG9uIGNvbW1pdC4KKyAqLwordm9pZAorUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9y ZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCisJCQkJCQkJIFhMb2dSZWNQdHIgbHNu LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBj aGFyICptZXNzYWdlLAorCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJUmVvcmRlckJ1ZmZlckNoYW5n ZSAqY2hhbmdlOworCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOworCisJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2Ug PSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJf QlVGRkVSX0NIQU5HRV9EREw7CisJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXggPSBwc3RyZHVwKHBy ZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCA9IHJlbGlkOworCWNoYW5nZS0+ZGF0YS5k ZGwuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUgPSBt ZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlID0gcGFsbG9jKG1lc3NhZ2Vf c2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSwgbWVzc2FnZSwgbWVzc2Fn ZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShyYiwgeGlkLCBsc24sIGNoYW5n ZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworfQorCisv KgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJpZnkgTFNOIG9yZGVyaW5nIG9mIHRyYW5z YWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVyCiAgKgpAQCAtMjAwNyw2ICsyMDQ2LDIx IEBAIFJlb3JkZXJCdWZmZXJBcHBseU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJC dWZmZXJUWE4gKnR4biwKIH0KIAogLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRlckJ1 ZmZlclByb2Nlc3NUWE4gZm9yIGFwcGx5aW5nIHRoZSBEREwgbWVzc2FnZS4KKyAqLworc3RhdGlj IGlubGluZSB2b2lkCitSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJCdWZmZXIg KnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFJlb3JkZXJCdWZmZXJDaGFuZ2Ug KmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCit7CisJcmItPmRkbChyYiwgdHhuLCBjaGFuZ2UtPmxz biwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJY2hhbmdlLT5kYXRhLmRkbC5yZWxp ZCwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKKwkJCWNoYW5nZS0+ZGF0YS5kZGwubWVz c2FnZV9zaXplLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKK30KKworLyoKICAqIEZ1 bmN0aW9uIHRvIHN0b3JlIHRoZSBjb21tYW5kIGlkIGFuZCBzbmFwc2hvdCBhdCB0aGUgZW5kIG9m IHRoZSBjdXJyZW50CiAgKiBzdHJlYW0gc28gdGhhdCB3ZSBjYW4gcmV1c2UgdGhlIHNhbWUgd2hp bGUgc2VuZGluZyB0aGUgbmV4dCBzdHJlYW0uCiAgKi8KQEAgLTIzODgsNiArMjQ0MiwxMCBAQCBS ZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwg c3RyZWFtaW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5H RV9EREw6CisJCQkJCVJlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdl LCBzdHJlYW1pbmcpOworCQkJCQlicmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0lOVkFMSURBVElPTjoKIAkJCQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3Nh Z2VzIGxvY2FsbHkgKi8KIAkJCQkJUmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNo YW5nZS0+ZGF0YS5pbnZhbC5uaW52YWxpZGF0aW9ucywKQEAgLTM4NDcsNiArMzkwNSwzOSBAQCBS ZW9yZGVyQnVmZmVyU2VyaWFsaXplQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9D SEFOR0VfRERMOgorCQkJeworCQkJCWNoYXIJICAgKmRhdGE7CisJCQkJU2l6ZQkJcHJlZml4X3Np emUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHBy ZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2Yo U2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihpbnQpICsgc2l6ZW9mKFNpemUpOworCQkJCVJl b3JkZXJCdWZmZXJTZXJpYWxpemVSZXNlcnZlKHJiLCBzeik7CisKKwkJCQlkYXRhID0gKChjaGFy ICopIHJiLT5vdXRidWYpICsgc2l6ZW9mKFJlb3JkZXJCdWZmZXJEaXNrQ2hhbmdlKTsKKworCQkJ CS8qIG1pZ2h0IGhhdmUgYmVlbiByZWFsbG9jYXRlZCBhYm92ZSAqLworCQkJCW9uZGlzayA9IChS ZW9yZGVyQnVmZmVyRGlza0NoYW5nZSAqKSByYi0+b3V0YnVmOworCisJCQkJLyogd3JpdGUgdGhl IHByZWZpeCwgcmVsaWQgYW5kIGNtZHR5cGUgaW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVt Y3B5KGRhdGEsICZwcmVmaXhfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVv ZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwucmVsaWQsIHNpemVv ZihPaWQpKTsKKwkJCQlkYXRhICs9IHNpemVvZihPaWQpOworCQkJCW1lbWNweShkYXRhLCAmY2hh bmdlLT5kYXRhLmRkbC5jbWR0eXBlLCBzaXplb2YoRGVwYXJzZWRDb21tYW5kVHlwZSkpOworCQkJ CWRhdGEgKz0gc2l6ZW9mKGludCk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ZGF0YS5kZGwu cHJlZml4LCBwcmVmaXhfc2l6ZSk7CisJCQkJZGF0YSArPSBwcmVmaXhfc2l6ZTsKKworCQkJCS8q IHdyaXRlIHRoZSBtZXNzYWdlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLworCQkJCW1lbWNweShkYXRh LCAmY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0 YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsIGNoYW5nZS0+ZGF0YS5kZGwubWVz c2FnZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUpOworCQkJCWRhdGEg Kz0gY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemU7CisKKwkJCQlicmVhazsKKwkJCX0KIAkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJewogCQkJCWNoYXIJ ICAgKmRhdGE7CkBAIC00MTYxLDYgKzQyNTIsMTUgQEAgUmVvcmRlckJ1ZmZlckNoYW5nZVNpemUo UmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKQogCiAJCQkJYnJlYWs7CiAJCQl9CisJCWNhc2Ug UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9 IHN0cmxlbihjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4 X3NpemUgKyBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXpl KSArIHNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKERlcGFyc2VkQ29tbWFuZFR5 cGUpOworCisJCQkJYnJlYWs7CisJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lO VkFMSURBVElPTjoKIAkJCXsKIAkJCQlzeiArPSBzaXplb2YoU2hhcmVkSW52YWxpZGF0aW9uTWVz c2FnZSkgKgpAQCAtNDQzOCw2ICs0NTM4LDMzIEBAIFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdl KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIAkJCQlicmVhazsK IAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJCVNpemUJ CXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1jcHkoJnByZWZp eF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOwor CQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsLmNt ZHR5cGUsIGRhdGEsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJCQkJZGF0YSArPSBz aXplb2YoaW50KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE1lbW9yeUNvbnRleHRB bGxvYyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEu ZGRsLnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEu ZGRsLnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4 X3NpemU7CisKKwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2Ut PmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9 IHNpemVvZihTaXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250 ZXh0QWxsb2MocmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cu bWVzc2FnZV9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRh LAorCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBj aGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNl IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQl7CiAJCQkJU2l6ZQkJaW52 YWxfc2l6ZSA9IHNpemVvZihTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlKSAqCmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdy ZGVzYy5jCmluZGV4IDZiOGMxN2IuLmRhZjE3MzAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2Fs ZHVtcC9ybWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0y Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kc194bG9nLmgiCiAjaW5j bHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNl LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxp Y2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNs dWRlICJybWdyZGVzYy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0 LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCA0NjNiY2I2Li5hYmNiZTk3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdSKFJNX0NPTU1J VF9UU19JRCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19kZXNjLCBjb21t aXRfdHNfaQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25PcmlnaW4iLCBy ZXBsb3JpZ2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVudGlmeSwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdlbmVyaWMiLCBn ZW5lcmljX3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVMTCwgTlVMTCwg Z2VuZXJpY19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAiTG9naWNhbE1l c3NhZ2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNhbG1zZ19pZGVu dGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19STUdSKFJNX0xP R0lDQUxERExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxtc2dfcmVkbywg bG9naWNhbGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBO VUxMLCBsb2dpY2FsZGRsX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IGUwNGRl NTIuLjVjZDI2M2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTEwNDQsNiArMTEwNDQs MTQgQEAKICAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X21lc3NhZ2UnLCBwcm92b2xhdGls ZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICd1JywKICAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywg cHJvYXJndHlwZXMgPT4gJ2Jvb2wgdGV4dCBieXRlYScsCiAgIHByb3NyYyA9PiAncGdfbG9naWNh bF9lbWl0X21lc3NhZ2VfYnl0ZWEnIH0sCit7IG9pZCA9PiAnMzgxMycsIGRlc2NyID0+ICdlbWl0 IGEgdGV4dHVhbCBsb2dpY2FsIGRlY29kaW5nIG1lc3NhZ2UnLAorICBwcm9uYW1lID0+ICdwZ19s b2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVs ID0+ICd1JywKKyAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJ2Jvb2wg dGV4dCB0ZXh0JywKKyAgcHJvc3JjID0+ICdwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2VfdGV4 dCcgfSwKK3sgb2lkID0+ICczODE0JywgZGVzY3IgPT4gJ2VtaXQgYSBiaW5hcnkgbG9naWNhbCBk ZWNvZGluZyBtZXNzYWdlJywKKyAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNz YWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAndScsCisgIHByb3JldHR5 cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHJlZ2NsYXNzIGludDQgdGV4dCcs CisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlX2J5dGVhJyB9LAogCiAj IGV2ZW50IHRyaWdnZXJzCiB7IG9pZCA9PiAnMzU2NicsIGRlc2NyID0+ICdsaXN0IG9iamVjdHMg ZHJvcHBlZCBieSB0aGUgY3VycmVudCBjb21tYW5kJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1l c3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2RmNmVhCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCkBAIC0w LDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogZGRsbWVzc2FnZS5oCisgKgkgICBF eHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5oCisgKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNTQUdFX0gKKyNkZWZpbmUgUEdfTE9H SUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgorI2luY2x1ZGUg ImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9ncmVhZGVyLmgiCisjaW5j bHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3VwcG9ydCBmb3Iga2VlcGluZyB0cmFj ayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRlZiBlbnVtIERlcGFyc2VkQ29tbWFu ZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJsZURyb3BTdGFydCwKKwlEQ1RfVGFi bGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9PYmplY3RDcmVhdGUsCisJRENUX09i amVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKworLyoKKyAqIEdlbmVyaWMgbG9naWNh bCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgorICovCit0eXBlZGVmIHN0cnVjdCB4 bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJZGJJZDsJCQkvKiBkYXRhYmFzZSBPaWQg ZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJcHJlZml4X3NpemU7CS8qIGxlbmd0aCBvZiBwcmVmaXgg aW5jbHVkaW5nIG51bGwgdGVybWluYXRvciAqLworCU9pZAkJCXJlbGlkOwkJCS8qIGlkIG9mIHRo ZSB0YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsJLyogdHlwZSBvZiBzcWwg Y29tbWFuZCAqLworCVNpemUJCW1lc3NhZ2Vfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgbWVzc2FnZSAq LworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVsbC10ZXJtaW5hdGVkIHByZWZpeCBv ZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQltZXNzYWdlW0ZMRVhJQkxFX0FSUkFZ X01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7CisKKyNkZWZpbmUgU2l6ZU9mTG9n aWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UsIG1lc3NhZ2Up KQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFyICpw cmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJ ICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBzaXplKTsKKworLyogUk1HUiBBUEkq LworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJMHgwMAordm9pZAkJbG9naWNhbGRk bG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK3ZvaWQJCWxvZ2ljYWxkZGxtc2df ZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOworY29uc3QgY2hh ciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZvKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCBiL3NyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL2RlY29kZS5oCmluZGV4IDE0ZmE5MjEuLmM5YWM3MDggMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4dGVybiB2b2lkIGhlYXAyX2RlY29kZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4g dm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRC dWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFuZGJ5X2RlY29kZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBsb2dpY2Fs bXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIg KmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRsX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiAKIGV4dGVybiB2b2lkIExvZ2ljYWxE ZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJ CQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRw dXRfcGx1Z2luLmgKaW5kZXggMmQ4OWQyNi4uNWVkNWU2YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOSw2ICs5LDcgQEAKICNpZm5kZWYgT1VUUFVUX1BMVUdJ Tl9ICiAjZGVmaW5lIE9VVFBVVF9QTFVHSU5fSAogCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRs bWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKIAogc3Ry dWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQ7CkBAIC05MSw2ICs5MiwxOCBAQCB0eXBlZGVmIHZv aWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoKKyAqIENhbGxl ZCBmb3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBlZGVmIHZv aWQgKCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJ CQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpw cmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJ CQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAqIEZpbHRlciBjaGFuZ2VzIGJ5 IG9yaWdpbi4KICAqLwogdHlwZWRlZiBib29sICgqTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2lu Q0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApAQCAtMjIxLDYgKzIzNCw3 IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVU cnVuY2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNvZGVDb21taXRDQiBjb21taXRfY2I7 CiAJTG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVERExN ZXNzYWdlQ0IgZGRsX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9i eV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3duQ0Igc2h1dGRvd25fY2I7CiAKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRleCAyMTVkMTQ5Li5lOTJiODE2 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4 IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2ls aXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9k ZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGls cy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAgLTY1LDYgKzY3LDcg QEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJf Q0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJf QlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETCwKIAlSRU9S REVSX0JVRkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJ REFUSU9OLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEz OSw2ICsxNDIsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hh cgkgICAqbWVzc2FnZTsKIAkJfQkJCW1zZzsKIAorCQkvKiBEREwgKi8KKwkJc3RydWN0CisJCXsK KwkJCWNoYXIJICAgKnByZWZpeDsKKwkJCVNpemUJCW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAg Km1lc3NhZ2U7CisJCQlPaWQJCQlyZWxpZDsKKwkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZTsKKwkJfQkJCWRkbDsKKwogCQkvKiBOZXcgc25hcHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAq X0lOVEVSTkFMX1NOQVBTSE9UICovCiAJCVNuYXBzaG90CXNuYXBzaG90OwogCkBAIC00NTIsNiAr NDY1LDE2IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVy QnVmZmVyICpyYiwKIAkJCQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJ CQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNp Z25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJl b3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNo YXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJ ICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2ln bmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChS ZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBA IC01NzQsNiArNTk3LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBw bHlUcnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21t aXQ7CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExN ZXNzYWdlQ0IgZGRsOwogCiAJLyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3Ry ZWFtaW5nIGEgdHJhbnNhY3Rpb24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNjc4LDYgKzcwMiw5IEBA IGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRy IGxzbiwKIAkJCQkJCQkJCSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgs CiAJCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4 dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBU cmFuc2FjdGlvbklkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJl Zml4LCBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVv cmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJ CQkJCQkJCVhMb2dSZWNQdHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJ CQlUaW1lc3RhbXBUeiBjb21taXRfdGltZSwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVj UHRyIG9yaWdpbl9sc24pOwotLSAKMS44LjMuMQoK --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Disposition: attachment; filename="v75-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kcn1 RnJvbSBlNjU3ODUzODA5MjBlODBjNDM3NmE1MTMwZWZkMmY3MTBhYjFkY2Q4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMjozODoyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDIvOF0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgVGFibGUgRERMIGNvbW1hbmRzLgoKVGhpcyBw YXRjaCBjb25zdHJ1Y3RzIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hp Y2ggY2FuCmxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1k ZWZpbmVkIHNwcmludGYtbGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50 ZW5kZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJl cGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGlu Zm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpj YXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3Nz aWJsZSB0byByZWxpYWJseQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5l LiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0 aGUgcGFyc2Ugbm9kZS4KClRoaXMgcHJvdmlkZXMgYSBiYXNlIGZvciBsb2dpY2FsIHJlcGxpY2F0 aW9uIG9mIERETCBzdGF0ZW1lbnRzLiBDdXJyZW50bHksCnRoZSBwYXRjaCBoYXMgc3VwcG9ydCBm b3I6CgpDUkVBVEUvQUxURVIvRFJPUCBUQUJMRSAtLSBOb3RlICMxLCBOb3RlICMyCgooTm90ZSAj MSkgU29tZSByZWNlbnRseSBpbnRyb2R1Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFS VElUSU9ORUQgVEFCTEUpIGFyZSB1bnN1cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBu ZWVkIG1vcmUKZnVuY3Rpb25hbGl0eSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIEZv ciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBv bgp0aGUgc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHRo ZSBwdWJsaXNoZXIgaXMgYSBQQVJUSVRJT05FRApUQUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxl IG9uIHRoZSBzdWJjcmliZXIgc2lkZSBpcyBhIE5PUk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJj aCB0aGlzIG1vcmUgYW5kIGltcHJvdmUgaXQgbGF0ZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRp b25jbWRzLmMgfCAgICA0ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICAg fCAzNjAzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9qc29uLmMgICAgICB8ICA3ODEgKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuYyB8ICAgIDMgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24u YnVpbGQgICAgIHwgICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg fCAgICA3ICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICB8ICAgIDEgKwog c3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICAgIHwgICAyMiArCiBzcmMvaW5jbHVk ZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgfCAgIDExICstCiBzcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCAgICAgfCAgICA0ICsKIDExIGZpbGVzIGNoYW5nZWQsIDQ0MzcgaW5zZXJ0 aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfZGVwYXJzZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2pzb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRlL3Rjb3AvZGRs X2RlcGFyc2UuaAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5kZXggNDhmNzM0OC4uMTcxZGZiMiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBc CiAJY3JlYXRlYXMubyBcCiAJZGJjb21tYW5kcy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxf anNvbi5vIFwKIAlkZWZpbmUubyBcCiAJZGlzY2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwppbmRleCA1NmI5N2Q0Li5iNGVjNjA1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCkBAIC0xNTIsOCArMTUyLDggQEAgRGVmaW5lQ29s bGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMs CiAJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uICV1Iiwg Y29sbGlkKTsKIAogCQkvKgotCQkgKiBNYWtlIGZyb20gZXhpc3RpbmcgY29sbGF0aW9uaWQgYXZh aWxhYmxlIHRvIGNhbGxlcnMgZm9yIHN0YXRlbWVudHMgc3VjaCBhcwotCQkgKiBDUkVBVEUgQ09M TEFUSU9OIGFueV9uYW1lIEZST00gYW55X25hbWUKKwkJICogTWFrZSBmcm9tIGV4aXN0aW5nIGNv bGxhdGlvbmlkIGF2YWlsYWJsZSB0byBjYWxsZXJzIGZvciBzdGF0ZW1lbnRzCisJCSAqIHN1Y2gg YXMgQ1JFQVRFIENPTExBVElPTiBhbnlfbmFtZSBGUk9NIGV4aXN0aW5nX2NvbGxhdGlvbi4KIAkJ ICovCiAJCWlmIChmcm9tX2V4aXN0aW5nX2NvbGxpZCAmJiBPaWRJc1ZhbGlkKGNvbGxpZCkpCiAJ CQlPYmplY3RBZGRyZXNzU2V0KCpmcm9tX2V4aXN0aW5nX2NvbGxpZCwgQ29sbGF0aW9uUmVsYXRp b25JZCwgY29sbGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBh cnNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjYyMzMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0wLDAgKzEsMzYwMyBAQAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgorICogZGRsX2RlcGFyc2UuYworICoJICBGdW5jdGlvbnMgdG8gY29udmVy dCB1dGlsaXR5IGNvbW1hbmRzIHRvIG1hY2hpbmUtcGFyc2VhYmxlCisgKgkgIHJlcHJlc2VudGF0 aW9uCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQs IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIE5PVEVTCisg KgorICogVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIEpTT04gYmxvYnMgcmVwcmVzZW50aW5n IERETCBjb21tYW5kcywgd2hpY2ggY2FuCisgKiBsYXRlciBiZSByZS1wcm9jZXNzZWQgaW50byBw bGFpbiBzdHJpbmdzIGJ5IHdlbGwtZGVmaW5lZCBzcHJpbnRmLWxpa2UKKyAqIGV4cGFuc2lvbi4g IFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRp dGluZyBvZgorICogdGhlIGNvbW1hbmRzLCBieSByZXBsYWNpbmcgY2VydGFpbiBub2RlcyB3aXRo aW4gdGhlIG9iamVjdHMuCisgKgorICogTXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIG91 dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCisgKiBjYXRhbG9ncywgbm90IGZy b20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJs eQorICogY29uc3RydWN0IGEgZnVsbHktc3BlY2lmaWVkIGNvbW1hbmQgKGkuZS4gb25lIG5vdCBk ZXBlbmRlbnQgb24gc2VhcmNoX3BhdGgKKyAqIGV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgorICoKKyAqIERlcGFyc2Ugb2JqZWN0IHRyZWUgaXMgY3JlYXRlZCBieSB1c2luZzoK KyAqIAlhKSBuZXdfb2JqdHJlZSgia25vdyBjb250ZW50cyIpIHdoZXJlIHRoZSBjb21wbGV0ZSB0 cmVlIGNvbnRlbnQgaXMga25vd24gb3IKKyAqICAgICB0aGUgaW5pdGlhbCB0cmVlIGNvbnRlbnQg aXMga25vd24uCisgKiAJYikgbmV3X29ianRyZWUoIiIpIGZvciB0aGUgc3ludGF4IHdoZXJlIHRo ZSBvYmplY3QgdHJlZSB3aWxsIGJlIGRlcml2ZWQKKyAqICAgICBiYXNlZCBvbiBzb21lIGNvbmRp dGlvbmFsIGNoZWNrcy4KKyAqIAljKSBuZXdfb2JqdHJlZV9WQSB3aGVyZSB0aGUgY29tcGxldGUg dHJlZSBjYW4gYmUgZGVyaXZlZCB1c2luZyBzb21lIGZpeGVkCisgKiAgICAgY29udGVudCBhbmQv b3Igc29tZSB2YXJpYWJsZSBhcmd1bWVudHMuCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAg c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5o IgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5o IgorI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19h bS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYWdncmVnYXRlLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19hdXRoaWQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3QuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2NvbGxhdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29uc3RyYWludC5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29udmVyc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfZGVwZW5kLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19leHRlbnNpb24uaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z19mb3JlaWduX3NlcnZlci5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2xhbmd1YWdlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJn ZW9iamVjdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19vcGNsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BmYW1pbHkuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Bv bGljeS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfcmFuZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNfZXh0 LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3RzX2NvbmZpZy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfZGljdC5oIgorI2luY2x1 ZGUgImNhdGFsb2cvcGdfdHNfcGFyc2VyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c190ZW1w bGF0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgImNhdGFsb2cv cGdfdXNlcl9tYXBwaW5nLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVk ZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgi CisjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2lu Y2x1ZGUgIm1iL3BnX3djaGFyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5j bHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIu aCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VfdHlwZS5oIgorI2luY2x1ZGUgInJld3JpdGUvcmV3 cml0ZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAi dGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1 dGlscy9mbWdyb2lkcy5oIgorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2luY2x1ZGUgInV0aWxz L2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMv cmVsLmgiCisjaW5jbHVkZSAidXRpbHMvcnVsZXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMvc3lz Y2FjaGUuaCIKKworLyogRXN0aW1hdGVkIGxlbmd0aCBvZiB0aGUgZ2VuZXJhdGVkIGpzb25iIHN0 cmluZyAqLworI2RlZmluZSBKU09OQl9FU1RJTUFURURfTEVOIDEyOAorCisvKgorICogQmVmb3Jl IHRoZXkgYXJlIHR1cm5lZCBpbnRvIEpTT05CIHJlcHJlc2VudGF0aW9uLCBlYWNoIGNvbW1hbmQg aXMKKyAqIHJlcHJlc2VudGVkIGFzIGFuIG9iamVjdCB0cmVlLCB1c2luZyB0aGUgc3RydWN0cyBi ZWxvdy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJT2JqVHlwZU51bGwsCisJT2JqVHlwZUJvb2ws CisJT2JqVHlwZVN0cmluZywKKwlPYmpUeXBlQXJyYXksCisJT2JqVHlwZUludGVnZXIsCisJT2Jq VHlwZUZsb2F0LAorCU9ialR5cGVPYmplY3QKK30gT2JqVHlwZTsKKworLyoKKyAqIFJlcHJlc2Vu dCB0aGUgY29tbWFuZCBhcyBhbiBvYmplY3QgdHJlZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgT2Jq VHJlZQoreworCXNsaXN0X2hlYWQJcGFyYW1zOwkJCS8qIE9iamVjdCB0cmVlIHBhcmFtZXRlcnMg Ki8KKwlpbnQJCQludW1QYXJhbXM7CQkvKiBOdW1iZXIgb2YgcGFyYW1ldGVycyBpbiB0aGUgb2Jq ZWN0IHRyZWUgKi8KKwlTdHJpbmdJbmZvCWZtdGluZm87CQkvKiBGb3JtYXQgc3RyaW5nIG9mIHRo ZSBPYmpUcmVlICovCisJYm9vbAkJcHJlc2VudDsJCS8qIEluZGljYXRlcyBpZiBib29sZWFuIHZh bHVlIHNob3VsZCBiZSBzdG9yZWQgKi8KK30gT2JqVHJlZTsKKworLyoKKyAqIEFuIGVsZW1lbnQg b2YgYW4gb2JqZWN0IHRyZWUgKE9ialRyZWUpLgorICovCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVt Cit7CisJY2hhcgkgICAqbmFtZTsJCQkvKiBOYW1lIG9mIG9iamVjdCBlbGVtZW50ICovCisJT2Jq VHlwZQkJb2JqdHlwZTsJCS8qIE9iamVjdCB0eXBlICovCisKKwl1bmlvbgorCXsKKwkJYm9vbAkJ Ym9vbGVhbjsKKwkJY2hhcgkgICAqc3RyaW5nOworCQlpbnQ2NAkJaW50ZWdlcjsKKwkJZmxvYXQ4 CQlmbHQ7CisJCU9ialRyZWUgICAgKm9iamVjdDsKKwkJTGlzdAkgICAqYXJyYXk7CisJfQkJCXZh bHVlOwkJCS8qIFN0b3JlIHRoZSBvYmplY3QgdmFsdWUgYmFzZWQgb24gdGhlIG9iamVjdAorCQkJ CQkJCQkgKiB0eXBlICovCisJc2xpc3Rfbm9kZQlub2RlOwkJCS8qIFVzZWQgaW4gY29udmVydGlu ZyBiYWNrIHRvIE9iakVsZW0KKwkJCQkJCQkJICogc3RydWN0dXJlICovCit9IE9iakVsZW07CisK Ky8qCisgKiBSZWR1Y2Ugc29tZSB1bm5lY2Vzc2FyeSBzdHJpbmdzIGZyb20gdGhlIG91dHB1dCBq c29uIHdoZW4gdmVyYm9zZQorICogYW5kICJwcmVzZW50IiBtZW1iZXIgaXMgZmFsc2UuIFRoaXMg bWVhbnMgdGhlc2Ugc3RyaW5ncyB3b24ndCBiZSBtZXJnZWQgaW50bworICogdGhlIGxhc3QgRERM IGNvbW1hbmQuCisgKi8KK2Jvb2wJCXZlcmJvc2UgPSB0cnVlOworCitzdGF0aWMgdm9pZCBhcHBl bmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5 KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpU cmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRp YyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hh ciAqc3ViX2ZtdCk7CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAq dHJlZSwgT2JqRWxlbSAqZWxlbSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICpuYW1lLAorCQkJCQkJCQkgY2hhciAq dmFsdWUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBp bnQzMiB0eXBlbW9kLAorCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIg Kip0eXBlbW9kc3RyLAorCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIE9iakVsZW0g Km5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyBPYmpUcmVlICpu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7Citz dGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3RhdGlj IE9ialRyZWUgKm5ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9ianMsLi4uKTsKK3N0 YXRpYyBKc29uYlZhbHVlICpvYmp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29u YlBhcnNlU3RhdGUgKnN0YXRlKTsKK3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxl ZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkg Y2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJ CQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0 YXRpYyBjaGFyICpSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVt YmVyIGF0dG5vLAorCQkJCQkJCQkJICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CisK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlz dCAqZHBjb250ZXh0LCBib29sIGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRl ZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNl X0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFi bGVDbWQgKnN1YmNtZCk7CisKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxl bSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9PbkNvbW1p dENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2Vf UmVsU2V0T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOworCitzdGF0aWMgaW5saW5lIE9i akVsZW0gKmRlcGFyc2VfU2VxX0NhY2hlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBh bHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xlKEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5l IE9iakVsZW0gKmRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2Vx X01pbnZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7Citz dGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01heHZhbHVlKEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfU2VxX1Jlc3RhcnQoaW50NjQgbGFzdF92YWx1ZSk7CitzdGF0aWMgaW5saW5lIE9iakVs ZW0gKmRlcGFyc2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9BcyhEZWZF bGVtICplbGVtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1N0b3JhZ2Uo Rm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfUmVjZWl2ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0g KmRlcGFyc2VfVHlwZV9TZW5kKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihGb3JtX3BnX3R5cGUgdHlwRm9ybSk7Citz dGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX0FuYWx5emUo Rm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5 cGVfU3Vic2NyaXB0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKKworc3RhdGljIExpc3QgKmRlcGFy c2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCk7CitzdGF0aWMgTGlzdCAqZGVwYXJzZV9UYWJs ZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1lbnRzLCBMaXN0ICpk cGNvbnRleHQsCisJCQkJCQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKTsKKworLyoK KyAqIEFwcGVuZCBwcmVzZW50IGFzIGZhbHNlIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9ub3RfcHJlc2VudChPYmpUcmVlICp0cmVlKQoreworCWFwcGVuZF9ib29sX29iamVj dCh0cmVlLCAicHJlc2VudCIsIGZhbHNlKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBhcnJheSBw YXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2FycmF5X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBMaXN0ICphcnJheSkKK3sKKwlPYmpFbGVt ICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsK KworCWlmIChsaXN0X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKCF2ZXJi b3NlKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogUmVtb3ZlIGVsZW1lbnRzIHdoZXJl IHByZXNlbnQgZmxhZyBpcyBmYWxzZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJeworCQkJ T2JqRWxlbSAgICAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2VydChl bGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0eXBlID09 IE9ialR5cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJlc2VudCAm JgorCQkJCWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9IGZvcmVh Y2hfZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJLyogQ2hlY2sgZm9y IGVtcHR5IGxpc3QgYWZ0ZXIgcmVtb3ZpbmcgZWxlbWVudHMgKi8KKwlpZiAobGlzdF9sZW5ndGgo YXJyYXkpID09IDApCisJCXJldHVybjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90 b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9i alR5cGVBcnJheSwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52YWx1ZS5hcnJheSA9IGFycmF5Owor CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBBcHBlbmQg YSBib29sZWFuIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRf Ym9vbF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgYm9vbCB2YWx1ZSkKK3sK KwlPYmpFbGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZSA9IHN1Yl9mbXQ7CisJ Ym9vbAkJaXNfcHJlc2VudF9mbGFnID0gZmFsc2U7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwkv KgorCSAqIENoZWNrIGlmIHRoZSBmb3JtYXQgc3RyaW5nIGlzICdwcmVzZW50JyBhbmQgaWYgeWVz LCBzdG9yZSB0aGUgYm9vbGVhbgorCSAqIHZhbHVlCisJICovCisJaWYgKHN0cmNtcChzdWJfZm10 LCAicHJlc2VudCIpID09IDApCisJeworCQlpc19wcmVzZW50X2ZsYWcgPSB0cnVlOworCQl0cmVl LT5wcmVzZW50ID0gdmFsdWU7CisJfQorCisJaWYgKCF2ZXJib3NlICYmICF0cmVlLT5wcmVzZW50 KQorCQlyZXR1cm47CisKKwlpZiAoIWlzX3ByZXNlbnRfZmxhZykKKwkJb2JqZWN0X25hbWUgPSBh cHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9 IG5ld19vYmplY3QoT2JqVHlwZUJvb2wsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuYm9v bGVhbiA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisK Ky8qCisgKiBBcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisg Ki8KK3N0YXRpYyB2b2lkCithcHBlbmRfZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFy ICpzdWJfZm10KQoreworCWludAkJCWxlbjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAodHJlZS0+ Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmbXQgPSB0cmVlLT5mbXRpbmZvLT5kYXRh OworCWxlbiA9IHRyZWUtPmZtdGluZm8tPmxlbjsKKworCS8qIEFkZCBhIHNlcGFyYXRvciBpZiBu ZWNlc3NhcnkgKi8KKwlpZiAobGVuID4gMCAmJiBmbXRbbGVuIC0gMV0gIT0gJyAnKQorCQlhcHBl bmRTdHJpbmdJbmZvU3BhY2VzKHRyZWUtPmZtdGluZm8sIDEpOworCisJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyh0cmVlLT5mbXRpbmZvLCBzdWJfZm10KTsKK30KKworLyoKKyAqIEFwcGVuZCBhIE5V TEwgb2JqZWN0IHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9udWxsX29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KQoreworCWNoYXIJICAgKm9iamVjdF9uYW1l OworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlv YmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10 KTsKKworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBuZXdfb2JqZWN0KE9ialR5cGVOdWxs LCBvYmplY3RfbmFtZSkpOworfQorCisvKgorICogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIg dG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJl ZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpCit7CisJT2JqRWxlbSAgICAq cGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlp ZiAoIXZlcmJvc2UgJiYgIXZhbHVlLT5wcmVzZW50KQorCQlyZXR1cm47CisKKwlvYmplY3RfbmFt ZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBh cmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZh bHVlLm9iamVjdCA9IHZhbHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7 Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG9iamVjdCBuYW1lIHdoaWNoIGlzIGV4dHJhY3RlZCBm cm9tIHRoZSBpbnB1dCAiKiV7bmFtZVs6Ll19KiIKKyAqIHN0eWxlIHN0cmluZy4gQW5kIGFwcGVu ZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2JqVHJlZS4KKyAqLworc3RhdGljIGNo YXIgKgorYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRyZWUsIGNoYXIg KnN1Yl9mbXQpCit7CisJU3RyaW5nSW5mb0RhdGEgb2JqZWN0X25hbWU7CisJY29uc3QgY2hhciAq ZW5kX3B0ciwgKnN0YXJ0X3B0cjsKKwlpbnQgICAgICAgICBsZW5ndGg7CisJY2hhciAgICAgICAg KnRtcF9zdHI7CisKKwlpZiAoc3ViX2ZtdCA9PSBOVUxMIHx8IHRyZWUtPmZtdGluZm8gPT0gTlVM TCkKKwkJcmV0dXJuIHN1Yl9mbXQ7CisKKwlpbml0U3RyaW5nSW5mbygmb2JqZWN0X25hbWUpOwor CisJc3RhcnRfcHRyID0gc3RyY2hyKHN1Yl9mbXQsICd7Jyk7CisJZW5kX3B0ciA9IHN0cmNocihz dWJfZm10LCAnOicpOworCWlmIChlbmRfcHRyID09IE5VTEwpCisJCWVuZF9wdHIgPSBzdHJjaHIo c3ViX2ZtdCwgJ30nKTsKKworCWlmIChzdGFydF9wdHIgIT0gTlVMTCAmJiBlbmRfcHRyICE9IE5V TEwpCisJeworCQlsZW5ndGggPSBlbmRfcHRyIC0gc3RhcnRfcHRyIC0gMTsKKwkJdG1wX3N0ciA9 IChjaGFyICopIHBhbGxvYyhsZW5ndGggKyAxKTsKKwkJc3RybmNweSh0bXBfc3RyLCBzdGFydF9w dHIgKyAxLCBsZW5ndGgpOworCQl0bXBfc3RyW2xlbmd0aF0gPSAnXDAnOworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZvYmplY3RfbmFtZSwgdG1wX3N0cik7CisJCXBmcmVlKHRtcF9zdHIpOwor CX0KKworCWlmIChvYmplY3RfbmFtZS5sZW4gPT0gMCkKKwkJZWxvZyhFUlJPUiwgIm9iamVjdCBu YW1lIG5vdCBmb3VuZCIpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7 CisKKwlyZXR1cm4gb2JqZWN0X25hbWUuZGF0YTsKKworfQorCisvKgorICogQXBwZW5kIGEgcHJl YWxsb2NhdGVkIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAor YXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJ c2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJhbXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1Q YXJhbXMrKzsKK30KKworLyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVl LgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqc3ViX2ZtdCwgY2hhciAqIG9iamVjdF9uYW1lLAorCQkJCQkgY2hhciAqdmFsdWUpCit7 CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJv c2UgJiYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWVbMF0gPT0gJ1wwJykpCisJCXJldHVybjsKKwor CWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCXBhcmFtID0gbmV3X29iamVj dChPYmpUeXBlU3RyaW5nLCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZh bHVlOworCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qCisgKiBT aW1pbGFyIHRvIGZvcm1hdF90eXBlX2V4dGVuZGVkLCBleGNlcHQgd2UgcmV0dXJuIGVhY2ggYml0 IG9mIGluZm9ybWF0aW9uCisgKiBzZXBhcmF0ZWx5OgorICoKKyAqIC0gbnNwaWQgaXMgdGhlIHNj aGVtYSBPSUQuICBGb3IgY2VydGFpbiBTUUwtc3RhbmRhcmQgdHlwZXMgd2hpY2ggaGF2ZSB3ZWly ZAorICogICB0eXBtb2QgcnVsZXMsIHdlIHJldHVybiBJbnZhbGlkT2lkOyB0aGUgY2FsbGVyIGlz IGV4cGVjdGVkIHRvIG5vdCBzY2hlbWEtCisgKiAgIHF1YWxpZnkgdGhlIG5hbWUgbm9yIGFkZCBx dW90ZXMgdG8gdGhlIHR5cGUgbmFtZSBpbiB0aGlzIGNhc2UuCisgKgorICogLSB0eXBuYW1lIGlz IHNldCB0byB0aGUgdHlwZSBuYW1lLCB3aXRob3V0IHF1b3RlcworICoKKyAqIC0gdHlwZW1vZHN0 ciBpcyBzZXQgdG8gdGhlIHR5cGVtb2QsIGlmIGFueSwgYXMgYSBzdHJpbmcgd2l0aCBwYXJlbnRo ZXNlcworICoKKyAqIC0gdHlwYXJyYXkgaW5kaWNhdGVzIHdoZXRoZXIgW11zIG11c3QgYmUgYWRk ZWQKKyAqCisgKiBXZSBkb24ndCB0cnkgdG8gZGVjb2RlIHR5cGUgbmFtZXMgdG8gdGhlaXIgc3Rh bmRhcmQtbWFuZGF0ZWQgbmFtZXMsIGV4Y2VwdAorICogaW4gdGhlIGNhc2VzIG9mIHR5cGVzIHdp dGggdW51c3VhbCB0eXBtb2QgcnVsZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmb3JtYXRfdHlwZV9k ZXRhaWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCSBPaWQgKm5zcGlkLCBj aGFyICoqdHlwZW5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwZWFycmF5 KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlwZWZvcm07CisJT2lkCQkJ YXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2Jq ZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1 IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVw bGUpOworCisJLyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3Ro KSBhcnJheSB0eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1 Y2ggYXMgIm5hbWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9i YXNlX3R5cGUgPSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBlYXJyYXkgPSAoSXNUcnVlQXJy YXlUeXBlKHR5cGVmb3JtKSAmJiB0eXBlZm9ybS0+dHlwc3RvcmFnZSAhPSBUWVBTVE9SQUdFX1BM QUlOKTsKKworCWlmICgqdHlwZWFycmF5KQorCXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24g dG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAqLworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwor CQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5 X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCB0eXBlX29p ZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCQl0 eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwl9CisKKwkvKgorCSAqIFNwZWNpYWwtY2FzZSBj cm9jayBmb3IgdHlwZXMgd2l0aCBzdHJhbmdlIHR5cG1vZCBydWxlcyB3aGVyZSB3ZSBwdXQKKwkg KiB0eXBlbW9kIGF0IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6 b25lKS4gV2UgY2Fubm90CisJICogc2NoZW1hLXF1YWxpZnkgbm9yIGFkZCBxdW90ZXMgdG8gdGhl IHR5cGUgbmFtZSBpbiB0aGVzZSBjYXNlcy4KKwkgKi8KKwkqbnNwaWQgPSBJbnZhbGlkT2lkOwor CisJc3dpdGNoICh0eXBlX29pZCkKKwl7CisJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkqdHlwZW5h bWUgPSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QVFpP SUQ6CisJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRVNU QU1QIFdJVEggVElNRSBaT05FIik7CisJCQllbHNlCisJCQkJLyogb3RoZXJ3aXNlLCBXSVRIIFRa IGlzIGFkZGVkIGJ5IHR5cG1vZC4gKi8KKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FU1RB TVAiKTsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVTVEFNUE9JRDoKKwkJCSp0eXBlbmFtZSA9IHBz dHJkdXAoIlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVRaT0lEOgorCQkJaWYg KHR5cGVtb2QgPCAwKQorCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUgV0lUSCBUSU1FIFpP TkUiKTsKKwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkgdHlw bW9kLiAqLworCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJCWJyZWFrOworCQlj YXNlIFRJTUVPSUQ6CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKworCQkJLyoKKwkJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyBy ZXF1aXJlZCBmb3Igb3RoZXIgdHlwZXMsIHNvIGdldAorCQkJICogdGhlIHR5cGUgbmFtZSBhbmQg c2NoZW1hIGRpcmVjdGx5IGZyb20gdGhlIGNhdGFsb2cuCisJCQkgKi8KKwkJCSpuc3BpZCA9IHR5 cGVmb3JtLT50eXBuYW1lc3BhY2U7CisJCQkqdHlwZW5hbWUgPSBwc3RyZHVwKE5hbWVTdHIodHlw ZWZvcm0tPnR5cG5hbWUpKTsKKwl9CisKKwlpZiAodHlwZW1vZCA+PSAwKQorCQkqdHlwZW1vZHN0 ciA9IHByaW50VHlwbW9kKCIiLCB0eXBlbW9kLCB0eXBlZm9ybS0+dHlwbW9kb3V0KTsKKwllbHNl CisJCSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUp OworfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdp dmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVlLgorICovCitzdGF0aWMgY2hhciAqCitnZXRfcGVyc2lz dGVuY2Vfc3RyKGNoYXIgcGVyc2lzdGVuY2UpCit7CisJc3dpdGNoIChwZXJzaXN0ZW5jZSkKKwl7 CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKKwkJCXJldHVybiAiVEVNUE9SQVJZIjsKKwkJ Y2FzZSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRDoKKwkJCXJldHVybiAiVU5MT0dHRUQiOworCQlj YXNlIFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVDoKKwkJCXJldHVybiAiIjsKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHBlcnNpc3RlbmNlIG1hcmtpbmcgJWMiLCBwZXJz aXN0ZW5jZSk7CisJCQlyZXR1cm4gIiI7CQkJLyogbWFrZSBjb21waWxlciBoYXBweSAqLworCX0K K30KKworLyoKKyAqIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZl biBzdG9yYWdldHlwZSB2YWx1ZS4KKyAqLworc3RhdGljIGlubGluZSBjaGFyICoKK2dldF90eXBl X3N0b3JhZ2UoY2hhciBzdG9yYWdldHlwZSkKK3sKKwlzd2l0Y2ggKHN0b3JhZ2V0eXBlKQorCXsK KwkJY2FzZSAncCc6CisJCQlyZXR1cm4gInBsYWluIjsKKwkJY2FzZSAnZSc6CisJCQlyZXR1cm4g ImV4dGVybmFsIjsKKwkJY2FzZSAneCc6CisJCQlyZXR1cm4gImV4dGVuZGVkIjsKKwkJY2FzZSAn bSc6CisJCQlyZXR1cm4gIm1haW4iOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFs aWQgc3RvcmFnZSBzcGVjaWZpZXIgJWMiLCBzdG9yYWdldHlwZSk7CisJfQorfQorCisvKgorICog QWxsb2NhdGUgYSBuZXcgcGFyYW1ldGVyLgorICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfb2Jq ZWN0KE9ialR5cGUgdHlwZSwgY2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKwor CXBhcmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gbmFtZTsK KwlwYXJhbS0+b2JqdHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBB bGxvY2F0ZSBhIG5ldyBvYmplY3QgcGFyYW1ldGVyLgorICovCitzdGF0aWMgT2JqRWxlbSAqCitu ZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsK KworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlT2JqZWN0LCBOVUxMKTsKKwlwYXJhbS0+dmFs dWUub2JqZWN0ID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKKy8qCisgKiBBbGxvY2F0 ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZShjaGFyICpmbXQpCit7CisJT2JqVHJlZSAgICAqcGFy YW1zOworCisJcGFyYW1zID0gcGFsbG9jMChzaXplb2YoT2JqVHJlZSkpOworCXBhcmFtcy0+cHJl c2VudCA9IHRydWU7CisJc2xpc3RfaW5pdCgmcGFyYW1zLT5wYXJhbXMpOworCisJaWYgKGZtdCkK Kwl7CisJCXBhcmFtcy0+Zm10aW5mbyA9IG1ha2VTdHJpbmdJbmZvKCk7CisJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcocGFyYW1zLT5mbXRpbmZvLCBmbXQpOworCX0KKworCXJldHVybiBwYXJhbXM7 Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0aW5lIHRvIHNldCB1cCAle31EIGFuZCAle31PIGVs ZW1lbnRzLgorICoKKyAqIEVsZW1lbnRzICJzY2hlbWFfbmFtZSIgYW5kICJvYmpfbmFtZSIgYXJl IHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBjb3JyZXNwb25kcyB0byBhIHRlbXAgc2No ZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAqCisgKiBUaGUgZGlmZmVyZW5jZSBiZXR3 ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdoZXRoZXIgdGhlIG9ial9uYW1lIHdpbGwK KyAqIGJlIHF1b3RlZCBhcyBhbiBpZGVudGlmaWVyIG9yIG5vdCwgd2hpY2ggaXMgbm90IHNvbWV0 aGluZyB0aGF0IHRoaXMgcm91dGluZQorICogY29uY2VybnMgaXRzZWxmIHdpdGg7IHRoYXQgd2ls bCBiZSB1cCB0byB0aGUgZXhwYW5kIGZ1bmN0aW9uLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoT2lkIG5zcGlkLCBjaGFyICpuYW1lKQoreworCU9ialRy ZWUgICAgKnF1YWxpZmllZDsKKwljaGFyCSAgICpuYW1lc3BhY2U7CisKKwlpZiAoaXNBbnlUZW1w TmFtZXNwYWNlKG5zcGlkKSkKKwkJbmFtZXNwYWNlID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVs c2UKKwkJbmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lKG5zcGlkKTsKKworCXF1YWxpZmll ZCA9IG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIsCisJCQkJCQkJICAgInNjaGVtYW5hbWUiLCBPYmpU eXBlU3RyaW5nLCBuYW1lc3BhY2UsCisJCQkJCQkJICAgIm9iam5hbWUiLCBPYmpUeXBlU3RyaW5n LCBwc3RyZHVwKG5hbWUpKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBBIGhl bHBlciByb3V0aW5lIHRvIHNldCB1cCAle31EIGFuZCAle31PIGVsZW1lbnRzLCB3aXRoIHRoZSBv YmplY3Qgc3BlY2lmaWVkCisgKiBieSBjbGFzc0lkL29iaklkLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJ ZCkKK3sKKwlPYmpUcmVlICAgICpxdWFsaWZpZWQ7CisJUmVsYXRpb24JY2F0YWxvZzsKKwlIZWFw VHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpfbnNwOworCURhdHVtCQlvYmpfbmFtZTsKKwlBdHRy TnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOworCUF0dHJOdW1i ZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9vaWQoY2xhc3NJZCk7CisJYm9vbAkJaXNu dWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xhc3NJZCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0YWxvZywgQW51bV9vaWQs IG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIG9iamVjdCB3aXRoIE9JRCAldSBvZiBjYXRhbG9nIFwiJXNcIiIsCisJCQkgb2Jq ZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFsb2cpKTsKKwlBbnVtX25hbWUgPSBn ZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFudW1fbmFtZXNwYWNlID0gZ2V0X29i amVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJb2JqX25zcCA9IGhlYXBfZ2V0YXR0 cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJ CQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBuYW1lc3Bh Y2UgZm9yIG9iamVjdCAldSIsIG9iamVjdElkKTsKKworCW9ial9uYW1lID0gaGVhcF9nZXRhdHRy KGNhdG9iaiwgQW51bV9uYW1lLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAorCQkJCQkJICAg JmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgYXR0cmlidXRlIG5h bWUgZm9yIG9iamVjdCAldSIsIG9iamVjdElkKTsKKworCXF1YWxpZmllZCA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9ial9uc3ApLAorCQkJCQkJCQkJCSBOYW1l U3RyKCpEYXR1bUdldE5hbWUob2JqX25hbWUpKSk7CisJdGFibGVfY2xvc2UoY2F0YWxvZywgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBxdWFsaWZpZWQ7Cit9CisKKy8qCisgKiBBIGhlbHBl ciByb3V0aW5lIHRvIHNldHVwICV7fVQgZWxlbWVudHMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K25ld19vYmp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKK3sKKwlPaWQJ CQl0eXBuc3BpZDsKKwljaGFyCSAgICp0eXBlX25zcDsKKwljaGFyCSAgICp0eXBlX25hbWUgPSBO VUxMOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwlib29sCQl0eXBlX2FycmF5OworCisJZm9ybWF0 X3R5cGVfZGV0YWlsZWQodHlwZUlkLCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAmdHlwZV9u YW1lLCAmdHlwbW9kc3RyLCAmdHlwZV9hcnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBuc3Bp ZCkpCisJCXR5cGVfbnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAodHlwbnNwaWQpOwor CWVsc2UKKwkJdHlwZV9uc3AgPSBwc3RyZHVwKCIiKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9W QShOVUxMLCA0LAorCQkJCQkJICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVfbnNw LAorCQkJCQkJICAidHlwZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlX25hbWUsCisJCQkJCQkg ICJ0eXBtb2QiLCBPYmpUeXBlU3RyaW5nLCB0eXBtb2RzdHIsCisJCQkJCQkgICJ0eXBhcnJheSIs IE9ialR5cGVCb29sLCB0eXBlX2FycmF5KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9i amVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgor ICoKKyAqIFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVs ZW1lbnQgaW4gdGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJl ciBvZiBleHRyYSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAo c3RyaW5nKSwgdHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBz dXBwbGllZC4gIFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGlu c3RhbmNlLCBPYmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJp bmcgcmVxdWlyZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisg KiBPYmpFbGVtKSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24u ICBFYWNoIGVsZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNp ZmllciBnaXZlbiBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0 aGUgbHV4dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZv cm1lZCBhcmd1bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVf VkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZSAgICAqdHJlZTsKKwl2 YV9saXN0CQlhcmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVj dCBhbmQgaXRzICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQg cHJvY2VzcyB0aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOwor CWZvciAoaSA9IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlP YmpUeXBlCQl0eXBlOworCQlPYmpFbGVtICAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJn cywgY2hhciAqKTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5l d19vYmplY3QodHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBwYXJhbSB0eXBlcyBv dGhlciB0aGFuIE9ialR5cGVOdWxsLCB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4KKwkJICogdGhl IHZhcmFyZ3MuIEZldGNoIGl0IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50 byB0aGUKKwkJICogbWFpbiBvYmplY3QuCisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJ CWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyogTnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVl IChvYnZpb3VzbHkpICovCisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVs ZW0tPnZhbHVlLmJvb2xlYW4gPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNh c2UgT2JqVHlwZVN0cmluZzoKKwkJCQllbGVtLT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywg Y2hhciAqKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZh bHVlLmFycmF5ID0gdmFfYXJnKGFyZ3MsIExpc3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9i alR5cGVJbnRlZ2VyOgorCQkJCWVsZW0tPnZhbHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50 KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJCWVsZW0tPnZhbHVlLmZs dCA9IHZhX2FyZyhhcmdzLCBkb3VibGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlT2Jq ZWN0OgorCQkJCWVsZW0tPnZhbHVlLm9iamVjdCA9IHZhX2FyZyhhcmdzLCBPYmpUcmVlICopOwor CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPYmpUcmVl IGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisKKwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJ CWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVtKTsKKwl9CisKKwl2YV9lbmQoYXJncyk7 CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0 IHN0cmluZyBmcm9tIHRoZSBPYmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQorICogc3RhdGUu CisgKi8KK3N0YXRpYyB2b2lkCitvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KEpzb25iUGFy c2VTdGF0ZSAqc3RhdGUsIE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNv bmJWYWx1ZQl2YWw7CisKKwlpZiAodHJlZS0+Zm10aW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisK KwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXku dmFsLnN0cmluZy52YWwgPSAiZm10IjsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5 LnZhbC5zdHJpbmcudmFsKTsKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkp OworCisJLyogVGhlbiBwcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyAqLworCXZh bC50eXBlID0gamJ2U3RyaW5nOworCXZhbC52YWwuc3RyaW5nLmxlbiA9IHRyZWUtPmZtdGluZm8t PmxlbjsKKwl2YWwudmFsLnN0cmluZy52YWwgPSB0cmVlLT5mbXRpbmZvLT5kYXRhOworCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENyZWF0ZSBh IEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25i ICoKK29ianRyZWVfdG9fanNvbmIoT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1 ZTsKKworCXZhbHVlID0gb2JqdHJlZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJu IEpzb25iVmFsdWVUb0pzb25iKHZhbHVlKTsKK30KKworLyoKKyAqIEhlbHBlciBmb3Igb2JqdHJl ZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJvbSBhbiBvYmplY3Qg b3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3RhdGlj IHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBP YmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVsZW1fdG9rZW4pCit7 CisJSnNvbmJWYWx1ZQl2YWw7CisKKwlzd2l0Y2ggKG9iamVjdC0+b2JqdHlwZSkKKwl7CisJCWNh c2UgT2JqVHlwZU51bGw6CisJCQl2YWwudHlwZSA9IGpidk51bGw7CisJCQlwdXNoSnNvbmJWYWx1 ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBl U3RyaW5nOgorCQkJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJCQl2YWwudmFsLnN0cmluZy5sZW4g PSBzdHJsZW4ob2JqZWN0LT52YWx1ZS5zdHJpbmcpOworCQkJdmFsLnZhbC5zdHJpbmcudmFsID0g b2JqZWN0LT52YWx1ZS5zdHJpbmc7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9r ZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlSW50ZWdlcjoKKwkJCXZhbC50 eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQorCQkJCURh dHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGludDhfbnVtZXJpYywKKwkJCQkJCQkJ CQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg ZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVGbG9hdDoKKwkJ CXZhbC50eXBlID0gamJ2TnVtZXJpYzsKKwkJCXZhbC52YWwubnVtZXJpYyA9IChOdW1lcmljKQor CQkJCURhdHVtR2V0TnVtZXJpYyhEaXJlY3RGdW5jdGlvbkNhbGwxKGZsb2F0OF9udW1lcmljLAor CQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUJv b2w6CisJCQl2YWwudHlwZSA9IGpidkJvb2w7CisJCQl2YWwudmFsLmJvb2xlYW4gPSBvYmplY3Qt PnZhbHVlLmJvb2xlYW47CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlT2JqZWN0OgorCQkJLyogUmVjdXJzaXZl bHkgYWRkIHRoZSBvYmplY3QgaW50byB0aGUgZXhpc3RpbmcgcGFyc2Ugc3RhdGUgKi8KKwkJCW9i anRyZWVfdG9fanNvbmJfcmVjKG9iamVjdC0+dmFsdWUub2JqZWN0LCBzdGF0ZSk7CisJCQlicmVh azsKKworCQljYXNlIE9ialR5cGVBcnJheToKKwkJCXsKKwkJCQlMaXN0Q2VsbCAgICpjZWxsOwor CisJCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJ CWZvcmVhY2goY2VsbCwgb2JqZWN0LT52YWx1ZS5hcnJheSkKKwkJCQl7CisJCQkJCU9iakVsZW0g ICAgKmVsZW0gPSBsZmlyc3QoY2VsbCk7CisKKwkJCQkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50 KHN0YXRlLCBlbGVtLCBXSkJfRUxFTSk7CisJCQkJfQorCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0 ZSwgV0pCX0VORF9BUlJBWSwgTlVMTCk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmplY3QgdHlwZSAlZCIsIG9iamVjdC0+b2Jq dHlwZSk7CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBSZWN1cnNpdmUgaGVscGVyIGZvciBv Ymp0cmVlX3RvX2pzb25iLgorICovCitzdGF0aWMgSnNvbmJWYWx1ZSAqCitvYmp0cmVlX3RvX2pz b25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRlKQoreworCXNsaXN0 X2l0ZXIJaXRlcjsKKworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwg TlVMTCk7CisKKwlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKKwor CXNsaXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKKwl7CisJCU9iakVsZW0gICAgKm9i amVjdCA9IHNsaXN0X2NvbnRhaW5lcihPYmpFbGVtLCBub2RlLCBpdGVyLmN1cik7CisJCUpzb25i VmFsdWUJa2V5OworCisJCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCQlrZXkudHlwZSA9IGpi dlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKG9iamVjdC0+bmFtZSk7CisJ CWtleS52YWwuc3RyaW5nLnZhbCA9IG9iamVjdC0+bmFtZTsKKwkJcHVzaEpzb25iVmFsdWUoJnN0 YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCQkvKiBUaGVuIHByb2Nlc3MgdGhlIHZhbHVlIGFjY29y ZGluZyB0byBpdHMgdHlwZSAqLworCQlvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG9i amVjdCwgV0pCX1ZBTFVFKTsKKwl9CisKKwlyZXR1cm4gcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBX SkJfRU5EX09CSkVDVCwgTlVMTCk7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUg VEFCTEUvQ1JFQVRFIERPTUFJTiBkZXBhcnNpbmcuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQg b3IgZG9tYWluIE9JRCwgb2J0YWluIGl0cyBjb25zdHJhaW50cyBhbmQgYXBwZW5kIHRoZW0gdG8K KyAqIHRoZSBnaXZlbiBlbGVtZW50cyBsaXN0LiAgVGhlIHVwZGF0ZWQgbGlzdCBpcyByZXR1cm5l ZC4KKyAqCisgKiBUaGlzIHdvcmtzIGZvciB0eXBlZCB0YWJsZXMsIHJlZ3VsYXIgdGFibGVzLCBh bmQgZG9tYWlucy4KKyAqCisgKiBOb3RlIHRoYXQgQ09OU1RSQUlOVF9GT1JFSUdOIGNvbnN0cmFp bnRzIGFyZSBhbHdheXMgaWdub3JlZC4KKyAqLworc3RhdGljIExpc3QgKgorb2J0YWluQ29uc3Ry YWludHMoTGlzdCAqZWxlbWVudHMsIE9pZCByZWxhdGlvbklkLCBPaWQgZG9tYWluSWQpCit7CisJ UmVsYXRpb24JY29uUmVsOworCVNjYW5LZXlEYXRhIGtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOwor CUhlYXBUdXBsZQl0dXBsZTsKKwlPYmpUcmVlICAgICpjb25zdHI7CisKKwkvKiBPbmx5IG9uZSBt YXkgYmUgdmFsaWQgKi8KKwlBc3NlcnQoT2lkSXNWYWxpZChyZWxhdGlvbklkKSBeIE9pZElzVmFs aWQoZG9tYWluSWQpKTsKKworCS8qCisJICogU2NhbiBwZ19jb25zdHJhaW50IHRvIGZldGNoIGFs bCBjb25zdHJhaW50cyBsaW5rZWQgdG8gdGhlIGdpdmVuCisJICogcmVsYXRpb24uCisJICovCisJ Y29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlpZiAoT2lkSXNWYWxpZChyZWxhdGlvbklkKSkKKwl7CisJCVNjYW5LZXlJbml0KCZrZXks CisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERhdHVtKHJlbGF0aW9uSWQpKTsKKwkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25SZWwsIENvbnN0cmFpbnRSZWxpZFR5cGlkTmFt ZUluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtleSk7CisJfQorCWVsc2UKKwl7 CisJCVNjYW5LZXlJbml0KCZrZXksCisJCQkJCUFudW1fcGdfY29uc3RyYWludF9jb250eXBpZCwK KwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmplY3RJZEdldERh dHVtKGRvbWFpbklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25z dHJhaW50VHlwaWRJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0K KworCS8qCisJICogRm9yIGVhY2ggY29uc3RyYWludCwgYWRkIGEgbm9kZSB0byB0aGUgbGlzdCBv ZiB0YWJsZSBlbGVtZW50cy4gIEluCisJICogdGhlc2Ugbm9kZXMgd2UgaW5jbHVkZSBub3Qgb25s eSB0aGUgcHJpbnRhYmxlIGluZm9ybWF0aW9uICgiZm10IiksIGJ1dAorCSAqIGFsc28gc2VwYXJh dGUgYXR0cmlidXRlcyB0byBpbmRpY2F0ZSB0aGUgdHlwZSBvZiBjb25zdHJhaW50LCBmb3IKKwkg KiBhdXRvbWF0aWMgcHJvY2Vzc2luZy4KKwkgKi8KKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0 dXBsZSA9IHN5c3RhYmxlX2dldG5leHQoc2NhbikpKQorCXsKKwkJRm9ybV9wZ19jb25zdHJhaW50 IGNvbnN0ckZvcm07CisJCWNoYXIJICAgKmNvbnR5cGU7CisKKwkJY29uc3RyRm9ybSA9IChGb3Jt X3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJc3dpdGNoIChjb25zdHJGb3Jt LT5jb250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfQ0hFQ0s6CisJCQkJY29udHlwZSA9 ICJjaGVjayI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlHTjoKKwkJCQlj b250aW51ZTsJCS8qIG5vdCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJ CQljb250eXBlID0gInByaW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlO VF9VTklRVUU6CisJCQkJY29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBD T05TVFJBSU5UX1RSSUdHRVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsK KwkJCWNhc2UgQ09OU1RSQUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24i OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVk IGNvbnN0cmFpbnQgdHlwZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlw ZSIgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVz ZWZ1bCB0byBwcm9ncmFtbWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBh bmQgYW1vbmcKKwkJICogZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhY WCBpdCBtaWdodCBiZSB1c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQ SywgZXRjLgorCQkgKi8KKwkJY29uc3RyID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtu YW1lfUkgJXtkZWZpbml0aW9ufXMiLCA0LAorCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJjb25zdHJhaW50IiwKKwkJCQkJCQkJImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBl LAorCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoY29uc3RyRm9ybS0+Y29u bmFtZSksCisJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJcGdf Z2V0X2NvbnN0cmFpbnRkZWZfc3RyaW5nKGNvbnN0ckZvcm0tPm9pZCkpOworCQllbGVtZW50cyA9 IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOworCX0KKworCXN5 c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFuIGluZGV4IGRl ZmluaXRpb24sIHNwbGl0IGludG8gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBsYXJnZSBhbW91 bnQgb2YgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93b3JrZXIsIGJ1 dAorICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBkb2Vzbid0IHNl ZW0gd29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGljIHZvaWQKK3Bn X2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBjaGFyICoqaW5k ZXhfYW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAqKnJlbG9wdGlv bnMsCisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNl KQoreworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsKKwlIZWFwVHVw bGUJaHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFzcyBpZHhyZWxy ZWM7CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0aW5lOworCUxp c3QJICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlMaXN0CSAgICpj b250ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVtCQlpbmRjb2xs RGF0dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlvbkRhdHVtOwor CWJvb2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lkdmVjdG9yICAq aW5kY2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9EYXRhIGRlZmlu aXRpb25CdWY7CisKKwkqdGFibGVzcGFjZSA9IE5VTEw7CisJKndoZXJlQ2xhdXNlID0gTlVMTDsK KworCS8qIEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleCAq LworCWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVt KGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4IHdpdGggT0lEICV1IiwgaW5kZXhy ZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOworCisJ aW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09IGlkeHJl Yy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNsYXNzLCBh bmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0 QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kY29s bGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9uID0gKG9p ZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNsYXNzRGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9w Z19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNsYXNz ID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisKKwlpbmRv cHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJ CQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsK KwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0 dW0pOworCisJLyogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRleCByZWxhdGlv biAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVjdElkR2V0RGF0 dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHhyZWwpKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQgJXUi LCBpbmRleHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKGh0 X2lkeHJlbCk7CisKKwkvKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nl c3MgbWV0aG9kICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0 RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kIHdp dGggT0lEICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2Ft KSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25z LCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9u cyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRp c3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhl YXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJewor CQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisKKwkJZXhwcnNE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51 bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJZXhw cnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlpbmRleHBycyA9 IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4cHJzU3RyaW5n KTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRlbSA9IGxpc3Rf aGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihnZXRfcmVs X25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygmZGVmaW5pdGlv bkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBwc3RyZHVwKHF1 b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyogRmV0Y2ggdGhl IGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5l KGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVmaW5pdGlvbi4g IE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICogY2FsbGVyLgor CSAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIoIik7CisJZm9y IChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5pbmRuYXR0czsga2V5bm8rKykKKwl7CisJCUF0 dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRrZXkudmFsdWVzW2tleW5vXTsKKwkJaW50MTYJ CW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJ T2lkCQkJa2V5Y29sY29sbGF0aW9uOworCisJCS8qIFByaW50IElOQ0xVREUgdG8gZGl2aWRlIGtl eSBhbmQgbm9uLWtleSBhdHRycy4gKi8KKwkJaWYgKGtleW5vID09IGlkeHJlYy0+aW5kbmtleWF0 dHMpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIpIElO Q0xVREUgKCIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmlu aXRpb25CdWYsIGtleW5vID09IDAgPyAiIiA6ICIsICIpOworCisJCWlmIChhdHRudW0gIT0gMCkK KwkJeworCQkJLyogU2ltcGxlIGluZGV4IGNvbHVtbiAqLworCQkJY2hhcgkgICAqYXR0bmFtZTsK KwkJCWludDMyCQlrZXljb2x0eXBtb2Q7CisKKwkJCWF0dG5hbWUgPSBnZXRfYXR0bmFtZShpbmRy ZWxpZCwgYXR0bnVtLCBmYWxzZSk7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0 aW9uQnVmLCBxdW90ZV9pZGVudGlmaWVyKGF0dG5hbWUpKTsKKwkJCWdldF9hdHR0eXBldHlwbW9k Y29sbChpbmRyZWxpZCwgYXR0bnVtLAorCQkJCQkJCQkgICZrZXljb2x0eXBlLCAma2V5Y29sdHlw bW9kLAorCQkJCQkJCQkgICZrZXljb2xjb2xsYXRpb24pOworCQl9CisJCWVsc2UKKwkJeworCQkJ LyogRXhwcmVzc2lvbmFsIGluZGV4ICovCisJCQlOb2RlCSAgICppbmRleGtleTsKKwkJCWNoYXIJ ICAgKnN0cjsKKworCQkJaWYgKGluZGV4cHJfaXRlbSA9PSBOVUxMKQorCQkJCWVsb2coRVJST1Is ICJ0b28gZmV3IGVudHJpZXMgaW4gaW5kZXhwcnMgbGlzdCIpOworCQkJaW5kZXhrZXkgPSAoTm9k ZSAqKSBsZmlyc3QoaW5kZXhwcl9pdGVtKTsKKwkJCWluZGV4cHJfaXRlbSA9IGxuZXh0KGluZGV4 cHJzLCBpbmRleHByX2l0ZW0pOworCisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNl X2V4cHJlc3Npb24oaW5kZXhrZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5l ZWQgcGFyZW5zIGlmIGl0J3Mgbm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5k ZXhrZXkgJiYgSXNBKGluZGV4a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGlu ZGV4a2V5KS0+ZnVuY2Zvcm1hdCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVu ZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlw ZSA9IGV4cHJUeXBlKGluZGV4a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRp b24oaW5kZXhrZXkpOworCQl9CisKKwkJLyogUHJpbnQgYWRkaXRpb25hbCBkZWNvcmF0aW9uIGZv ciAoc2VsZWN0ZWQpIGtleSBjb2x1bW5zLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJaWYgKGtleW5v IDwgaWR4cmVjLT5pbmRua2V5YXR0cykKKwkJeworCQkJT2lkIGluZGNvbGwgPSBpbmRjb2xsYXRp b24tPnZhbHVlc1trZXlub107CisJCQlpZiAoT2lkSXNWYWxpZChpbmRjb2xsKSkKKwkJCQlhcHBl bmRTdHJpbmdJbmZvKCZkZWZpbml0aW9uQnVmLCAiIENPTExBVEUgJXMiLAorCQkJCQkJCQlnZW5l cmF0ZV9jb2xsYXRpb25fbmFtZSgoaW5kY29sbCkpKTsKKworCQkJLyogQWRkIHRoZSBvcGVyYXRv ciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJCWdldF9vcGNsYXNzX25hbWUoaW5k Y2xhc3MtPnZhbHVlc1trZXlub10sIEludmFsaWRPaWQsICZkZWZpbml0aW9uQnVmKTsKKworCQkJ LyogQWRkIG9wdGlvbnMgaWYgcmVsZXZhbnQgKi8KKwkJCWlmIChhbXJvdXRpbmUtPmFtY2Fub3Jk ZXIpCisJCQl7CisJCQkJLyogSWYgaXQgc3VwcG9ydHMgc29ydCBvcmRlcmluZywgcmVwb3J0IERF U0MgYW5kIE5VTExTIG9wdHMgKi8KKwkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQkJ eworCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIERFU0MiKTsK KwkJCQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJ CWlmICghKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkpCisJCQkJCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCAiIE5VTExTIExBU1QiKTsKKwkJCQl9CisJCQkJZWxz ZQorCQkJCXsKKwkJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgRklSU1QiKTsKKwkJ CQl9CisJCQl9CisKKwkJCS8qIFhYWCBleGNsdWRlT3BzIHRoaW5neSB3YXMgaGVyZTsgZG8gd2Ug bmVlZCBhbnl0aGluZz8gKi8KKwkJfQorCX0KKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZp bml0aW9uQnVmLCAiKSIpOworCSpkZWZpbml0aW9uID0gZGVmaW5pdGlvbkJ1Zi5kYXRhOworCisJ LyogT3V0cHV0IHJlbG9wdGlvbnMgKi8KKwkqcmVsb3B0aW9ucyA9IGZsYXR0ZW5fcmVsb3B0aW9u cyhpbmRleHJlbGlkKTsKKworCS8qIE91dHB1dCB0YWJsZXNwYWNlICovCisJeworCQlPaWQJCQl0 YmxzcGM7CisKKwkJdGJsc3BjID0gZ2V0X3JlbF90YWJsZXNwYWNlKGluZGV4cmVsaWQpOworCQlp ZiAoT2lkSXNWYWxpZCh0YmxzcGMpKQorCQkJKnRhYmxlc3BhY2UgPSBwc3RyZHVwKHF1b3RlX2lk ZW50aWZpZXIoZ2V0X3RhYmxlc3BhY2VfbmFtZSh0YmxzcGMpKSk7CisJfQorCisJLyogUmVwb3J0 IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJaWYgKCFoZWFwX2F0dGlzbnVsbChodF9pZHgs IEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJeworCQlOb2RlCSAgICpub2RlOworCQlE YXR1bQkJcHJlZERhdHVtOworCQljaGFyCSAgICpwcmVkU3RyaW5nOworCisJCS8qIENvbnZlcnQg dGV4dCBzdHJpbmcgdG8gbm9kZSB0cmVlICovCisJCXByZWREYXR1bSA9IFN5c0NhY2hlR2V0QXR0 cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQlBbnVtX3BnX2luZGV4X2luZHByZWQsICZp c251bGwpOworCQlBc3NlcnQoIWlzbnVsbCk7CisJCXByZWRTdHJpbmcgPSBUZXh0RGF0dW1HZXRD U3RyaW5nKHByZWREYXR1bSk7CisJCW5vZGUgPSAoTm9kZSAqKSBzdHJpbmdUb05vZGUocHJlZFN0 cmluZyk7CisJCXBmcmVlKHByZWRTdHJpbmcpOworCisJCS8qIERlcGFyc2UgKi8KKwkJKndoZXJl Q2xhdXNlID0gZGVwYXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7 CisJfQorCisJLyogQ2xlYW4gdXAgKi8KKwlSZWxlYXNlU3lzQ2FjaGUoaHRfaWR4KTsKKwlSZWxl YXNlU3lzQ2FjaGUoaHRfaWR4cmVsKTsKKwlSZWxlYXNlU3lzQ2FjaGUoaHRfYW0pOworfQorCisv KgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZhdWx0IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29s dW1uIG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHNldCBhIGNv cnJlY3QgZGVwYXJzZSBjb250ZXh0LgorICovCitzdGF0aWMgY2hhciAqCitSZWxhdGlvbkdldENv bHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRl eHQsCisJCQkJCQkgTGlzdCAqKmV4cHJzKQoreworCU5vZGUJICAgKmRlZnZhbDsKKwljaGFyCSAg ICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5fZGVmYXVsdChyZWwsIGF0dG5vKTsK KwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBkcGNvbnRleHQsIGZhbHNlLCBm YWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9uIGZvciBsYXRlciByZXBsaWNhdGlv biBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkqZXhwcnMgPSBsYXBwZW5kKCpleHBy cywgZGVmdmFsKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRl cGFyc2VkIHBhcnRpdGlvbiBib3VuZCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gdGFibGUuCisg Ki8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoT2lkIHJlbGlkKQor eworCURhdHVtCQlkZXBhcnNlZDsKKwlEYXR1bQkJYm91bmREYXR1bTsKKwlib29sCQlpc251bGw7 CisJSGVhcFR1cGxlCXR1cGxlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBy ZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbGF0aW9uIHdpdGggT0lEICV1IiwgcmVsaWQpOworCisJ Ym91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxPSUQsIHR1cGxlLAorCQkJCQkJCQkgQW51 bV9wZ19jbGFzc19yZWxwYXJ0Ym91bmQsCisJCQkJCQkJCSAmaXNudWxsKTsKKworCWRlcGFyc2Vk ID0gRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJICAgQ1N0cmluZ0dl dFRleHREYXR1bShUZXh0RGF0dW1HZXRDU3RyaW5nKGJvdW5kRGF0dW0pKSwKKwkJCQkJCQkJICAg cmVsaWQpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKworCXJldHVybiBUZXh0RGF0dW1H ZXRDU3RyaW5nKGRlcGFyc2VkKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9k ZSB3aXRoaW4gYSByZWd1bGFyIChub24tdHlwZWQpIHRhYmxlIGNyZWF0aW9uLgorICoKKyAqIE5P VCBOVUxMIGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVmaW5pdGlvbiBhcmUgZW1pdHRlZCBk aXJlY3RseSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9uIGJ5IHRoaXMgcm91dGluZTsgb3Ro ZXIgY29uc3RyYWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBlbHNld2hlcmUgKHRoZSBpbmZvIGlu IHRoZSBwYXJzZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5KS4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogJXtuYW1lfUkgJXtjb2x0eXBlfVQgJXtjb21wcmVzc2lvbn1zICV7ZGVmYXVsdH1z ICV7bm90X251bGx9cyAle2NvbGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29t cG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJvb2wgaXNfYWx0ZXIsIExpc3QgKipl eHBycykKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlPaWQJ CQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVw OworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0 eXBtb2Q7CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RD ZWxsICAgKmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwg ZGVmaW5pdGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4KKwkgKgorCSAqIFhYWCBtYXliZSBpdCBp cyB1c2VmdWwgdG8gaGF2ZSB0aGVtIHdpdGggInByZXNlbnQgPSBmYWxzZSIgb3Igc29tZQorCSAq IHN1Y2g/CisJICovCisJaWYgKCFjb2xkZWYtPmlzX2xvY2FsKQorCQlyZXR1cm4gTlVMTDsKKwor CWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJUdXApKQorCQllbG9nKEVSUk9SLCAiY291bGQg bm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAor CQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOworCWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmli dXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwlnZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQs IGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlv bik7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0eXBlfVQiLCAzLAor CQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkgIm5hbWUiLCBP YmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkgImNvbHR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2QpKTsKKwor CWlmICghY29tcG9zaXRlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJTVE9SQUdFICV7 Y29sc3RvcmFnZX1zIiwgImNvbHN0b3JhZ2UiLAorCQkJCQkJCSBnZXRfdHlwZV9zdG9yYWdlKGF0 dHJGb3JtLT5hdHRzdG9yYWdlKSk7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBfb2JqID0g bmV3X29ianRyZWUoIkNPTVBSRVNTSU9OIik7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2NvbXByZXNzaW9uX21ldGhvZH1JIiwK KwkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhvZCIsIGNvbGRlZi0+Y29tcHJlc3Npb24pOworCWVs c2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiJXtjb21wcmVzc2lvbl9tZXRo b2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJfQorCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7Y29tcHJlc3Npb259cyIsIHRtcF9vYmopOworCisJdG1wX29iaiA9 IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwY29sbGF0aW9uKSkK KwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7bmFtZX1EIiwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSB0eXBjb2xsYXRpb24pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2Jq KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbGxhdGlvbn1zIiwgdG1wX29iaik7 CisKKwlpZiAoIWNvbXBvc2l0ZSkKKwl7CisJCU9pZAkJCXNlcXJlbGlkID0gSW52YWxpZE9pZDsK KworCQkvKgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVjZXNzYXJ5LiAg Tm90ZSB0aGF0IHdlIGNhbm5vdAorCQkgKiB0cnVzdCBwZ19hdHRyaWJ1dGUuYXR0bm90bnVsbCBo ZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0CisJCSAqIHdoZW4gcHJpbWFyeSBrZXlz IGFyZSBzcGVjaWZpZWQ7IHdlIG11c3Qgbm90IGVtaXQgYSBOT1QgTlVMTAorCQkgKiBjb25zdHJh aW50IGluIHRoYXQgY2FzZSwgdW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLiAgVGhlcmVmb3Jl LAorCQkgKiB3ZSBzY2FuIHRoZSBsaXN0IG9mIGNvbnN0cmFpbnRzIGF0dGFjaGVkIHRvIHRoaXMg Y29sdW1uIHRvCisJCSAqIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gZW1pdCBhbnl0aGlu Zy4gKEZvcnR1bmF0ZWx5LCBOT1QgTlVMTAorCQkgKiBjb25zdHJhaW50cyBjYW5ub3QgYmUgdGFi bGUgY29uc3RyYWludHMuKQorCQkgKgorCQkgKiBJbiB0aGUgQUxURVIgVEFCTEUgY2FzZXMsIHdl IGFsc28gYWRkIGEgTk9UIE5VTEwgaWYgdGhlIGNvbERlZiBpcworCQkgKiBtYXJrZWQgaXNfbm90 X251bGwuCisJCSAqLworCQlzYXdfbm90bnVsbCA9IGZhbHNlOworCQlmb3JlYWNoKGNlbGwsIGNv bGRlZi0+Y29uc3RyYWludHMpCisJCXsKKwkJCUNvbnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJh aW50ICopIGxmaXJzdChjZWxsKTsKKworCQkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJf Tk9UTlVMTCkKKwkJCXsKKwkJCQlzYXdfbm90bnVsbCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9 CisJCX0KKworCQlpZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkKKwkJCXNhd19u b3RudWxsID0gdHJ1ZTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25vdF9udWxs fXMiLCAibm90X251bGwiLAorCQkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVMTCIgOiAiIik7 CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJERUZBVUxUIik7CisJCWlmIChhdHRyRm9ybS0+ YXR0aGFzZGVmICYmCisJCQljb2xkZWYtPmdlbmVyYXRlZCAhPSBBVFRSSUJVVEVfR0VORVJBVEVE X1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlv bkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJ CSAgZHBjb250ZXh0LCBleHBycyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmos ICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 ZGVmYXVsdH1zIiwgdG1wX29iaik7CisKKwkJLyogSURFTlRJVFkgQ09MVU1OICovCisJCWlmIChj b2xkZWYtPmlkZW50aXR5KQorCQl7CisJCQlPaWQJCQlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQs IGNvbGRlZi0+Y29sbmFtZSk7CisKKwkJCXNlcXJlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShy ZWxpZCwgYXR0bm8sIHRydWUpOworCQkJaWYgKE9pZElzVmFsaWQoc2VxcmVsaWQpKQorCQkJCXNl cXJlbGlkID0gUmFuZ2VWYXJHZXRSZWxpZChjb2xkZWYtPmlkZW50aXR5U2VxdWVuY2UsIE5vTG9j aywgZmFsc2UpOworCQl9CisKKwkJaWYgKE9pZElzVmFsaWQoc2VxcmVsaWQpKQorCQl7CisJCQl0 bXBfb2JqID0gZGVwYXJzZV9Db2x1bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0 eSwgaXNfYWx0ZXIpOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eV9j b2x1bW59cyIsIHRtcF9vYmopOworCQl9CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNT SU9OICovCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiR0VORVJBVEVEIEFMV0FZUyBBUyIpOwor CQlpZiAoY29sZGVmLT5nZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJ CXsKKwkJCWNoYXIJICAgKmRlZnN0cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5E ZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4 dCwgZXhwcnMpOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7Z2VuZXJhdGlv bl9leHByfXMgU1RPUkVEIiwKKwkJCQkJCQkJICJnZW5lcmF0aW9uX2V4cHIiLCBkZWZzdHIpOwor CQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyYXRlZF9jb2x1bW59cyIsIHRtcF9vYmopOworCX0K KworCVJlbGVhc2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24u CVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRv bid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3Ig ZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1bW4gaXMg YmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAqIEFzIGluIGRlcGFyc2VfQ29sdW1u RGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNzZWQgZWxzZXdoZXJlLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiAle25hbWV9SSBXSVRIIE9QVElPTlMgJXtkZWZhdWx0fXMgJXtu b3RfbnVsbH1zLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbkRlZl90eXBl ZChSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBDb2x1bW5EZWYgKmNvbGRlZikK K3sKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJT2lk CQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1 cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyRm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJ dHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlvbjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0 Q2VsbCAgICpjZWxsOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwg Y29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVs b2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBv ZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0g PSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBl dHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlw bW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qCisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRl Y2xhcmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5k aW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29sdW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90 X251bGwuCisJICogKFRoaXMgcm91dGluZSBpcyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4p CisJICovCisJc2F3X25vdG51bGwgPSBmYWxzZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29u c3RyYWludHMpCisJeworCQlDb25zdHJhaW50ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmly c3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJ eworCQkJc2F3X25vdG51bGwgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNh d19ub3RudWxsICYmICFhdHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hl KGF0dHJUdXApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCWNoYXIJICAgKmRl ZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0 dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5VTEwpOworCisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3Ry KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7bm90X251bGx9cyAle2RlZmF1 bHR9cyIsIDQsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJ CSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCSAibm90X251 bGwiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxMIiA6ICIi LAorCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZU9iamVjdCwgdG1wX29iaik7CisKKwkvKiBHZW5l cmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0eXBlZCB0YWJsZXMsIHNvIHdlIGFy ZSBkb25lICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSB0aGUgZGVmaW5pdGlvbiBvZiBjb2x1bW4gaWRlbnRpdHkuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBHRU5FUkFURUQgJXtvcHRpb259cyAle2lkZW50 aXR5X3R5cGV9cyAle3NlcV9kZWZpbml0aW9uOiB9cworICogCU9SCisgKiBHRU5FUkFURUQgJXtv cHRpb259cyBBUyBJREVOVElUWSAle2lkZW50aXR5X3R5cGV9cyAoICV7c2VxX2RlZmluaXRpb246 IH1zICkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0eShPaWQg c2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKmlkZW50X29iajsKKwlMaXN0CSAgICplbGVtcyA9IE5JTDsK KwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJU2VxdWVuY2VfdmFsdWVzICpzZXF2YWx1ZXM7 CisJY2hhcgkgICAqaWRlbnRmbXQ7CisJY2hhcgkgICAqb2JqZm10OworCisJaWYgKGFsdGVyX3Rh YmxlKQorCXsKKwkJaWRlbnRmbXQgPSAiU0VUIEdFTkVSQVRFRCAiOworCQlvYmpmbXQgPSAiJXtv cHRpb259cyI7CisJfQorCWVsc2UKKwl7CisJCWlkZW50Zm10ID0gIkdFTkVSQVRFRCAiOworCQlv YmpmbXQgPSAiJXtvcHRpb259cyBBUyBJREVOVElUWSI7CisJfQorCisJaWRlbnRfb2JqID0gbmV3 X29ianRyZWUoaWRlbnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElU WV9BTFdBWVMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50X29iaiwgb2JqZm10LCAib3B0 aW9uIiwgIkFMV0FZUyIpOworCWVsc2UgaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElU WV9CWV9ERUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudF9vYmosIG9iamZtdCwg Im9wdGlvbiIsICJCWSBERUZBVUxUIik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQoaWRl bnRfb2JqKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5X3R5cGV9cyIsIDEs CisJCQkJCQkgImlkZW50aXR5X3R5cGUiLCBPYmpUeXBlT2JqZWN0LCBpZGVudF9vYmopOworCisJ c2VxdmFsdWVzID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhzZXFyZWxpZCk7CisJc2VxZm9ybSA9IHNl cXZhbHVlcy0+c2VxZm9ybTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7 CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBhbHRl cl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50 Qnkoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5k KGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVs ZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0sIGFsdGVy X3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KHNl cXZhbHVlcy0+bGFzdF92YWx1ZSkpOworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBP V05FRCBCWSBoZXJlICovCisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiJXtzZXFfZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisJZWxzZQorCQlhcHBlbmRf YXJyYXlfb2JqZWN0KHJldCwgIiggJXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQg KC4uLikKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgQ09MVU1OICV7Y29sdW1ufUkg UkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpz ZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZSAgICAqcmV0OworCWJvb2wJ CWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBlID09IEFUX1Jlc2V0T3B0aW9uczsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSAle29wdGlvbn1zIiwgMiwK KwkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJICJv cHRpb24iLCBPYmpUeXBlU3RyaW5nLCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VUIik7CisKKwlm b3JlYWNoKGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxl bTsKKwkJT2JqVHJlZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2Vs bCk7CisJCXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBs YXBwZW5kKHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRz KTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle29wdGlvbnM6LCB9cykiLCBzZXRzKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVT RVQgKC4uLikKKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVTRVR8U0VUICgle29wdGlvbnM6 LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVy VGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRSZWxP cHRpb25zOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURl ZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQp OworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisK KwlBc3NlcnQoc2V0cyk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIiV7c2V0X3Jlc2V0fXMg KCV7b3B0aW9uczosIH1zKSIsIDIsCisJCQkJCQkgICJzZXRfcmVzZXQiLCBPYmpUeXBlU3RyaW5n LCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VUIiwKKwkJCQkJCSAgIm9wdGlvbnMiLCBPYmpUeXBl QXJyYXksIHNldHMpOworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBlLmcu IGJ5IEFMVEVSIENPTFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4pICBv ciBSRVNFVCAoLi4uKSBjb250ZW50cy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtsYWJl bH1zID0gJXt2YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxlbShE ZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICpvcHRuYW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5hbWVz cGFjZSAhPSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hlbWF9 SS4iLCAic2NoZW1hIiwKKwkJCQkJCQkgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVuZF9z dHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUkiLCAibGFiZWwiLCBlbGVtLT5kZWZuYW1l KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfXMiLCAxLAorCQkJCQkJICJsYWJl bCIsIE9ialR5cGVPYmplY3QsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiPSAle3ZhbHVlfUwiLCAidmFsdWUiLAorCQkJCQkJCSBlbGVt LT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0p ID8gIlRSVUUiIDogIkZBTFNFIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSB0aGUgSU5IRVJJVFMgcmVsYXRpb25zLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lELCByZXR1 cm4gYSBzY2hlbWEtcXVhbGlmaWVkIHRhYmxlIGxpc3QgcmVwcmVzZW50aW5nCisgKiB0aGUgcGFy ZW50IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lk IG9iamVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMgPSBOSUw7CisJUmVsYXRpb24JaW5oUmVs OworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5OworCUhlYXBUdXBsZQl0dXBs ZTsKKworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJpdHNSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJCQkJQW51bV9wZ19pbmhlcml0c19pbmhy ZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmhSZWws IEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5 KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChz Y2FuKSkpCisJeworCQlPYmpUcmVlICAgICpwYXJlbnQ7CisJCUZvcm1fcGdfaW5oZXJpdHMgZm9y bUluaCA9IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXBhcmVudCA9 IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCSBmb3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRzID0gbGFwcGVuZChwYXJlbnRzLCBu ZXdfb2JqZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4p OworCXRhYmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcGFy ZW50czsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIE9OIENPTU1JVCAuLi4gY2xhdXNlIGZvciBD UkVBVEUgLi4uIFRFTVBPUkFSWSAuLi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogT04gQ09N TUlUICV7b25fY29tbWl0X3ZhbHVlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9P bkNvbW1pdENsYXVzZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pCit7CisJT2JqVHJlZSAgICAqcmV0 ICA9IG5ld19vYmp0cmVlKCJPTiBDT01NSVQiKTsKKwlzd2l0Y2ggKG9wdGlvbikKKwl7CisJCWNh c2UgT05DT01NSVRfRFJPUDoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29t bWl0X3ZhbHVlfXMiLAorCQkJCQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJEUk9QIik7CisJCQli cmVhazsKKworCQljYXNlIE9OQ09NTUlUX0RFTEVURV9ST1dTOgorCQkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3Zh bHVlIiwgIkRFTEVURSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX1BSRVNF UlZFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle29uX2NvbW1pdF92YWx1 ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUiLCAiUFJFU0VSVkUgUk9XUyIpOworCQkJ YnJlYWs7CisKKwkJY2FzZSBPTkNPTU1JVF9OT09QOgorCQkJYXBwZW5kX251bGxfb2JqZWN0KHJl dCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiKTsKKwkJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOwor CQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNl cXVlbmNlIENBQ0hFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIENBQ0hF ICV7dmFsdWV9cworICogT1IKKyAqIENBQ0hFICV7dmFsdWV9CisgKi8KK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJv b2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsK KwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgQ0FDSEUgJXt2YWx1 ZX1zIiA6ICJDQUNIRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9S TUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0 KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIENZQ0xFIG9wdGlvbi4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogU0VUICV7bm99cyBDWUNMRQorICogT1IKKyAqICV7bm99cyBD WUNMRQorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfQ3ljbGUoRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAg KnJldDsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgJXtub31z IENZQ0xFIiA6ICIle25vfXMgQ1lDTEUiOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAy LAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY3ljbGUiLAorCQkJCQkJICJubyIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgc2VxZGF0YS0+c2VxY3ljbGUgPyAiIiA6ICJOTyIpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBzZXF1ZW5jZSBJTkNSRU1FTlQgQlkgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBTRVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICogT1IKKyAqIElOQ1JFTUVOVCBCWSAle3Zh bHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0luY3JlbWVu dEJ5KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpU cmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9 IGFsdGVyX3RhYmxlID8gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIiA6ICJJTkNSRU1FTlQg QlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0 YS0+c2VxaW5jcmVtZW50KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZXFpbmNyZW1lbnQiLAorCQkJCQkJICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0 KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIE1BWFZBTFVFIG9wdGlvbi4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIE1BWFZBTFVFICV7dmFsdWV9cworICogT1IKKyAq IE1BWFZBTFVFICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10 OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIE1BWFZBTFVFICV7dmFsdWV9cyIgOiAiTUFY VkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2Vx ZGF0YS0+c2VxbWF4KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJtYXh2YWx1ZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlw ZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgTUlOVkFMVUUgb3B0aW9uLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgorICogTUlOVkFM VUUgJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9N aW52YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJ T2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlm bXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgTUlOVkFMVUUgJXt2YWx1ZX1zIiA6ICJNSU5WQUxVRSAl e3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5z ZXFtaW4pOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5n LCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisg KiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogUkVTVEFSVCAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoK K2RlcGFyc2VfU2VxX1Jlc3RhcnQoaW50NjQgbGFzdF92YWx1ZSkKK3sKKwlPYmpUcmVlICAgICpy ZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFU LCBsYXN0X3ZhbHVlKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTVEFSVCAle3ZhbHVlfXMi LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFydCIsCisJCQkJCQkg InZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29i amVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQVMgb3B0aW9uLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBUyAle2lkZW50aXR5fUQKKyAqLworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVsZW0pCit7CisJT2JqVHJl ZSAgICAqcmV0OworCVR5cGUJCWxpa2VUeXBlOworCUZvcm1fcGdfdHlwZSBsaWtlRm9ybTsKKwor CWxpa2VUeXBlID0gdHlwZW5hbWVUeXBlKE5VTEwsIGRlZkdldFR5cGVOYW1lKGVsZW0pLCBOVUxM KTsKKwlsaWtlRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChsaWtlVHlwZSk7CisKKwly ZXQgPSBuZXdfb2JqdHJlZV9WQSgiQVMgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShsaWtl Rm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGxpa2VGb3JtLT50eXBu YW1lKSkpOworCVJlbGVhc2VTeXNDYWNoZShsaWtlVHlwZSk7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIFNUQVJUIFdJ VEggb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgU1RBUlQgV0lUSCAle3Zh bHVlfXMKKyAqIE9SCisgKiBTVEFSVCBXSVRIICV7dmFsdWV9cworICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1w c3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBTVEFSVCBX SVRIICV7dmFsdWV9cyIgOiAiU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNw cmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFzdGFydCk7CisJcmV0ID0gbmV3X29ianRy ZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAor CQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU1RPUkFHRSBv cHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNUT1JBR0U9JXt2YWx1ZX1zCisgKi8K K3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3BnX3R5 cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJcmV0ID0gbmV3X29ianRyZWVfVkEo IlNUT1JBR0UgPSAle3ZhbHVlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3RvcmFnZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgZ2V0X3R5cGVfc3Rv cmFnZSh0eXBGb3JtLT50eXBzdG9yYWdlKSk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3Qo cmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgUkVDRUlWRSBvcHRpb24uCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIFJFQ0VJVkU9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMg aW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1JlY2VpdmUoRm9ybV9wZ190eXBlIHR5cEZv cm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJ VkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXByZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVj ZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgU0VORCBv cHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFTkQ9JXtwcm9jZWR1cmV9RAorICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBl IHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IlNFTkQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgdHlwbW9kX2luIG9w dGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogVFlQTU9EX0lOPSV7cHJvY2VkdXJlfUQK KyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9UeXBtb2RfSW4oRm9y bV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7 CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHR5cGUgdHlwbW9kX291dCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFRZ UE1PRF9PVVQ9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVw YXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAg ICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3By b2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVy ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0 KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTkFMWVpFPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKEZvcm1fcGdfdHlwZSB0eXBG b3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFM WVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJ aWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFu YWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1YnNj cmlwdCBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNVQlNDUklQVD0le3Byb2Nl ZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3Vic2Ny aXB0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1YnNj cmlwdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKwor LyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcuCisgKgorICogRGVh bCB3aXRoIGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzKS4K KyAqCisgKiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFyc2Ugbm9kZSBoZXJl OyB0aGV5IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dzIGluc3RlYWQuCisg Ki8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxhdGlvbiByZWxhdGlv biwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJCQkgIGJvb2wgdHlw ZWQsIGJvb2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RD ZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAg KmVsdCA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJ CXsKKwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlICAgICp0cmVlOwor CisJCQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxh dGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJ CWRlcGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBjb21w b3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJ CQlpZiAodHJlZSAhPSBOVUxMKQorCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5kKGVsZW1lbnRzLCBu ZXdfb2JqZWN0X29iamVjdCh0cmVlKSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBUX0Nv bnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZh bGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZWxl bWVudHM7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2VxU3RtdC4KKyAqCisgKiBHaXZl biBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFNFUVVFTkNFICV7 aWRlbnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVNlcVN0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCVJl bGF0aW9uCXJlbGF0aW9uOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVu Y2Ugc2VxZm9ybTsKKwlTZXF1ZW5jZV92YWx1ZXMgKnNlcXZhbHVlczsKKwlDcmVhdGVTZXFTdG10 ICpjcmVhdGVTZXFTdG10ID0gKENyZWF0ZVNlcVN0bXQgKikgcGFyc2V0cmVlOworCisJLyoKKwkg KiBTZXF1ZW5jZSBmb3IgSURFTlRJVFkgQ09MVU1OIG91dHB1dCBzZXBhcmF0ZWx5ICh2aWEgQ1JF QVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8K KwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKworCXNl cXZhbHVlcyA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCXNlcWZvcm0gPSBzZXF2 YWx1ZXMtPnNlcWZvcm07CisKKwkvKiBEZWZpbml0aW9uIGVsZW1lbnRzICovCisJZWxlbXMgPSBs YXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ3ljbGUoc2VxZm9ybSwgZmFsc2UpKTsKKwll bGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KHNlcWZvcm0sIGZh bHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShzZXFm b3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWF4dmFs dWUoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2Vx X1N0YXJ0d2l0aChzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfUmVzdGFydChzZXF2YWx1ZXMtPmxhc3RfdmFsdWUpKTsKKworCS8qIFdlIHB1cnBv c2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJlICovCisKKwlyZWxhdGlvbiA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lmX25vdF9leGlzdHN9cyAl e2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIsIDQsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgY3JlYXRlU2VxU3RtdC0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RT IiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJ CQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAiZGVm aW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRp b24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJz ZSBhbiBJbmRleFN0bXQuCisgKgorICogR2l2ZW4gYW4gaW5kZXggT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogSWYgdGhlIGluZGV4IGNvcnJlc3BvbmRzIHRv IGEgY29uc3RyYWludCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVggJXtjb25jdXJyZW50bHl9cyAle2lmX25vdF9leGlz dHN9cyAle25hbWV9SSBPTgorICogJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAle2RlZmlu aXRpb259cyAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworICogJXt3aGVyZV9jbGF1c2V9cworICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAqKSBwYXJzZXRy ZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJUmVsYXRpb24J aWR4cmVsOworCVJlbGF0aW9uCWhlYXByZWw7CisJY2hhcgkgICAqaW5kZXhfYW07CisJY2hhcgkg ICAqZGVmaW5pdGlvbjsKKwljaGFyCSAgICpyZWxvcHRpb25zOworCWNoYXIJICAgKnRhYmxlc3Bh Y2U7CisJY2hhcgkgICAqd2hlcmVDbGF1c2U7CisKKwlpZiAobm9kZS0+cHJpbWFyeSB8fCBub2Rl LT5pc2NvbnN0cmFpbnQpCisJeworCQkvKgorCQkgKiBJbmRleGVzIGZvciBQUklNQVJZIEtFWSBh bmQgb3RoZXIgY29uc3RyYWludHMgYXJlIG91dHB1dAorCQkgKiBzZXBhcmF0ZWx5OyByZXR1cm4g ZW1wdHkgaGVyZS4KKwkJICovCisJCXJldHVybiBOVUxMOworCX0KKworCWlkeHJlbCA9IHJlbGF0 aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaGVhcHJlbCA9IHJlbGF0aW9u X29wZW4oaWR4cmVsLT5yZF9pbmRleC0+aW5kcmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlw Z19nZXRfaW5kZXhkZWZfZGV0YWlsZWQob2JqZWN0SWQsCisJCQkJCQkJICZpbmRleF9hbSwgJmRl ZmluaXRpb24sICZyZWxvcHRpb25zLAorCQkJCQkJCSAmdGFibGVzcGFjZSwgJndoZXJlQ2xhdXNl KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2Nv bmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OICV7dGFibGV9RCBVU0lO RyAle2luZGV4X2FtfXMgJXtkZWZpbml0aW9ufXMiLCA3LAorCQkJCQkJICJ1bmlxdWUiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnVuaXF1ZSA/ICJVTklRVUUiIDogIiIsCisJCQkJCQkg ImNvbmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+Y29uY3VycmVudCA/ ICJDT05DVVJSRU5UTFkiIDogIiIsCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwK KwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUoaWR4cmVsKSwKKwkJCQkJCSAidGFibGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkpLAorCQkJCQkJICJp bmRleF9hbSIsIE9ialR5cGVTdHJpbmcsIGluZGV4X2FtLAorCQkJCQkJICJkZWZpbml0aW9uIiwg T2JqVHlwZVN0cmluZywgZGVmaW5pdGlvbik7CisKKwkvKiByZWxvcHRpb25zICovCisJdG1wX29i aiA9IG5ld19vYmp0cmVlKCJXSVRIIik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcF9vYmosICIoJXtvcHRzfXMpIiwgIm9wdHMiLCByZWxvcHRpb25zKTsKKwll bHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle3dpdGh9cyIsIHRtcF9vYmopOworCisJLyogdGFibGVzcGFjZSAqLworCXRtcF9v YmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFDRSIpOworCWlmICh0YWJsZXNwYWNlKQorCQlhcHBl bmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfXMiLCAidGFibGVzcGFjZSIs IHRhYmxlc3BhY2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wX29iaik7CisKKwkv KiBXSEVSRSBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIldIRVJFIik7CisJaWYg KHdoZXJlQ2xhdXNlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt3aGVyZX1z IiwgIndoZXJlIiwgd2hlcmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2hlcmVfY2xhdXNlfXMiLCB0 bXBfb2JqKTsKKworCXRhYmxlX2Nsb3NlKGlkeHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwl0YWJs ZV9jbG9zZShoZWFwcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTdG10IChDUkVBVEUgVEFCTEUpLgorICoKKyAqIEdpdmVu IGEgdGFibGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtpZGVudGl0eX1EIFtPRgorICogJXtvZl90eXBlfVQgfCBQQVJUSVRJT04gT0Yg JXtwYXJlbnRfaWRlbnRpdHl9RF0gJXt0YWJsZV9lbGVtZW50c31zCisgKiAle2luaGVyaXRzfXMg JXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMKKyAqICV7 b25fY29tbWl0fXMgJXt0YWJsZXNwYWNlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVN0 bXQgKm5vZGUgPSAoQ3JlYXRlU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcmVsYXRpb24g PSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCUxpc3QJICAgKmRw Y29udGV4dDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlMaXN0 CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lk ZW50aXR5fUQiLCAzLAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgZ2V0X3BlcnNpc3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSks CisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlm X25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+ cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHJlbGF0aW9uKSkpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlvYmplY3RJZCk7CisKKwkv KgorCSAqIFR5cGVkIHRhYmxlcyBhbmQgcGFydGl0aW9ucyB1c2UgYSBzbGlnaHRseSBkaWZmZXJl bnQgZm9ybWF0IHN0cmluZzogd2UKKwkgKiBtdXN0IG5vdCBwdXQgdGFibGVfZWxlbWVudHMgd2l0 aCBwYXJlbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nLAorCSAqIGJlY2F1c2UgaWYgdGhl cmUgYXJlIG5vIG9wdGlvbnMgdGhlIHBhcmVudGhlc2VzIG11c3Qgbm90IGJlIGVtaXR0ZWQ7CisJ ICogYW5kIGFsc28sIHR5cGVkIHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGluaGVyaXRhbmNlLgor CSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1lIHx8IG5vZGUtPnBhcnRib3VuZCkKKwl7CisJCUxp c3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBXZSBjYW4ndCBwdXQgdGFibGUg ZWxlbWVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcgYXMgYW4gYXJyYXkKKwkJICogc3Vy cm91bmRlZCBieSBwYXJlbnRoZXNlcyBoZXJlLCBiZWNhdXNlIGFuIGVtcHR5IGNsYXVzZSB3b3Vs ZCBjYXVzZQorCQkgKiBhIHN5bnRheCBlcnJvci4gIFRoZXJlZm9yZSwgd2UgdXNlIGFuIGluZGly ZWN0aW9uIGVsZW1lbnQgYW5kIHNldAorCQkgKiBwcmVzZW50PWZhbHNlIHdoZW4gdGhlcmUgYXJl IG5vIGVsZW1lbnRzLgorCQkgKi8KKwkJaWYgKG5vZGUtPm9mVHlwZW5hbWUpCisJCXsKKwkJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxvZnR5cGUs IC0xKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9GICV7b2ZfdHlwZX1UIiwgdG1w X29iaik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAgICpwYXJlbnRzOworCQkJT2JqRWxl bSAgICAqZWxlbTsKKworCQkJcGFyZW50cyA9IGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElk KTsKKwkJCWVsZW0gPSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQkJQXNzZXJ0 KGxpc3RfbGVuZ3RoKHBhcmVudHMpID09IDEpOworCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhy ZXQsICJQQVJUSVRJT04gT0YiKTsKKworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtw YXJlbnRfaWRlbnRpdHl9RCIsCisJCQkJCQkJCSBlbGVtLT52YWx1ZS5vYmplY3QpOworCQl9CisK KwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBub2RlLT50YWJs ZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIHRydWUsIC8qIHR5cGVkIHRhYmxlICovCisJ CQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0 YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxpZE9pZCk7CisKKwkJdG1w X29iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wX29iaiwgIigle2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxz ZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiV7dGFibGVfZWxlbWVudHN9cyIsIHRtcF9vYmopOworCX0KKwllbHNlCisJewor CQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gbmVl ZCB0byBwcm9jZXNzIExJS0UgY2xhdXNlcyBzZXBhcmF0ZWx5OyB0aGV5IGhhdmUKKwkJICogYWxy ZWFkeSBiZWVuIHRyYW5zZm9ybWVkIGludG8gY29sdW1ucyBhbmQgY29uc3RyYWludHMuCisJCSAq LworCisJCS8qCisJCSAqIFByb2Nlc3MgdGFibGUgZWxlbWVudHM6IGNvbHVtbiBkZWZpbml0aW9u cyBhbmQgY29uc3RyYWludHMuICBPbmx5CisJCSAqIHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgYXJl IG9idGFpbmVkIGZyb20gdGhlIHBhcnNlIG5vZGUgaXRzZWxmLiAgVG8KKwkJICogZ2V0IGNvbnN0 cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9kZQor CQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2YgdGhl IGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRz KHJlbGF0aW9uLCBub2RlLT50YWJsZUVsdHMsIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGZhbHNl LAkvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBv c2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVj dElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICIoJXt0YWJsZV9lbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVsc2UK KwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIigpIik7CisKKwkJLyoKKwkJICogQWRkIGlu aGVyaXRhbmNlIHNwZWNpZmljYXRpb24uICBXZSBjYW5ub3Qgc2ltcGx5IHNjYW4gdGhlIGxpc3Qg b2YKKwkJICogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBs YWNrIHRoZSBhY3R1YWwKKwkJICogcXVhbGlmaWVkIG5hbWVzIG9mIHRoZSBwYXJlbnQgcmVsYXRp b25zLiAgUmF0aGVyIHRoYW4gdHJ5aW5nIHRvCisJCSAqIHJlLXJlc29sdmUgdGhlbSBmcm9tIHRo ZSBpbmZvcm1hdGlvbiBpbiB0aGUgcGFyc2Ugbm9kZSwgaXQgc2VlbXMKKwkJICogbW9yZSBhY2N1 cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSAqLwor CQl0bXBfb2JqID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChub2RlLT5pbmhSZWxh dGlvbnMgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7cGFyZW50 czosIH1EKSIsIGRlcGFyc2VfSW5oUmVsYXRpb25zKG9iamVjdElkKSk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIoJXtwYXJlbnRzOiwgfUQpIik7CisJCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtpbmhlcml0c31zIiwgdG1wX29iaik7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0 cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXt0YWJsZXNwYWNlfUkiLCAidGFibGVzcGFjZSIsCisJ CQkJCQkJIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9v YmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXBfb2JqKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0YWJsZXNwYWNlfXMi LCB0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29uX2NvbW1pdH1zIiwK KwkJCQkJCSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBG T1IgVkFMVUVTIGNsYXVzZSAqLworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkg KiBHZXQgcGdfY2xhc3MucmVscGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0 aGUgcGFyc2V0cmVlCisJCSAqIGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3Vu ZCBleHByZXNzaW9uIHdoaWNoIGhhdmVuJ3QKKwkJICogYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICov CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFy dGl0aW9uX2JvdW5kIiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJ ZCkpOworCX0KKworCS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29i anRyZWUoIlBBUlRJVElPTiBCWSIpOworCWlmIChyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9v YmosICIle2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJCQkgcGdfZ2V0X3BhcnRr ZXlkZWZfc3RyaW5nKG9iamVjdElkKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0 KHRtcF9vYmosICIle2RlZmluaXRpb259cyIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2J5fXMiLCB0 bXBfb2JqKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgi VVNJTkciKTsKKwlpZiAobm9kZS0+YWNjZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBfb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCAiYWNjZXNzX21ldGhvZCIsCisJCQkJCQkJ IG5vZGUtPmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRt cF9vYmosICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29i aik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwg dG1wX29iaik7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgi V0lUSCIpOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZSAg ICAqdG1wX29iajI7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxs KTsKKworCQl0bXBfb2JqMiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iajIpKTsKKwl9CisKKwlpZiAo bGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7d2l0aDosIH1zKSIsIGxp c3QpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt3aXRoX2NsYXVzZX1zIiwgdG1wX29iaik7CisKKwlyZWxhdGlv bl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICoKKyAqIGRlcGFyc2Vf Q3JlYXRlU3RtdCBkbyB0aGUgYWN0dWFsIHdvcmsgYXMgd2UgZGVwYXJzZSB0aGUgZmluYWwgQ3Jl YXRlU3RtdCBmb3IKKyAqIENSRUFURSBUQUJMRSBBUyBjb21tYW5kLgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkK K3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21k LT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKworCXBhcnNldHJlZSA9IGNtZC0+ZC5jdGFz LnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5kLmN0YXMuYWRkcmVzcy5vYmplY3RJZDsK KworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGFsbCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4g YW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiByZWx0eXBlICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9 cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyUmVsYXRpb24oQ29sbGVjdGVk Q29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2Jq OworCU9ialRyZWUgICAgKnRtcF9vYmoyOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlSZWxhdGlv bglyZWw7CisJTGlzdAkgICAqc3ViY21kcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWNv bnN0IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJYm9vbAkJaXN0YWJs ZSA9IGZhbHNlOworCUxpc3QJICAgKmV4cHJzID0gTklMOworCU9pZAkJCXJlbElkID0gY21kLT5k LmFsdGVyVGFibGUub2JqZWN0SWQ7CisJQWx0ZXJUYWJsZVN0bXQgKnN0bXQgPSBOVUxMOworCisJ QXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSk7CisJc3RtdCA9IChBbHRlclRhYmxl U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlBc3NlcnQoSXNBKHN0bXQsIEFsdGVyVGFibGVTdG10 KSk7CisKKwkvKgorCSAqIEFMVEVSIFRBQkxFIHN1YmNvbW1hbmRzIGdlbmVyYXRlZCBmb3IgVGFi bGVMaWtlQ2xhdXNlIGlzIHByb2Nlc3NlZCBpbgorCSAqIHRoZSB0b3AgbGV2ZWwgQ1JFQVRFIFRB QkxFIGNvbW1hbmQ7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChzdG10LT50YWJsZV9s aWtlKQorCQlyZXR1cm4gTlVMTDsKKworCXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJcmVsSWQpOworCisJc3dpdGNoIChyZWwtPnJk X3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJCQlpc3RhYmxl ID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfSU5ERVg6CisJCWNhc2UgUkVMS0lO RF9QQVJUSVRJT05FRF9JTkRFWDoKKwkJCXJlbHR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJ CWNhc2UgUkVMS0lORF9WSUVXOgorCQkJcmVsdHlwZSA9ICJWSUVXIjsKKwkJCWJyZWFrOworCQlj YXNlIFJFTEtJTkRfQ09NUE9TSVRFX1RZUEU6CisJCQlyZWx0eXBlID0gIlRZUEUiOworCQkJaXN0 eXBlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfRk9SRUlHTl9UQUJMRToKKwkJ CXJlbHR5cGUgPSAiRk9SRUlHTiBUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX01B VFZJRVc6CisJCQlyZWx0eXBlID0gIk1BVEVSSUFMSVpFRCBWSUVXIjsKKwkJCWJyZWFrOworCisJ CQkvKiBUT0RPIHN1cHBvcnQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlICovCisKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHJlbGtpbmQgJWQiLCByZWwtPnJkX3JlbC0+cmVs a2luZCk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7 aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLCByZWx0eXBl LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFs dGVyVGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVj dGVkQVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpzdWJjbWQgPSAo QWx0ZXJUYWJsZUNtZCAqKSBzdWItPnBhcnNldHJlZTsKKwkJT2JqVHJlZSAgICAqdHJlZTsKKwor CQlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJUYWJsZUNtZCkpOworCisJICAgLyoKKwkJKiBTa2lw IGRlcGFyc2Ugb2YgdGhlIHN1YmNvbW1hbmQgaWYgdGhlIG9iamVjdElkIGRvZXNuJ3QgbWF0Y2gg dGhlCisJCSogdGFyZ2V0IHJlbGF0aW9uIElELiBJdCBjYW4gaGFwcGVuIGZvciBpbmhlcml0ZWQg dGFibGVzIHdoZW4KKwkJKiBzdWJjb21tYW5kcyBmb3IgaW5oZXJpdGVkIHRhYmxlcyBhbmQgdGhl IHBhcmVudCB0YWJsZSBhcmUgYm90aAorCQkqIGNvbGxlY3RlZCBpbiB0aGUgQUxURVIgVEFCTEUg Y29tbWFuZCBmb3IgdGhlIHBhcmVudCB0YWJsZS4gV2l0aCB0aGUKKwkJKiBleGNlcHRpb24gb2Yg dGhlIGludGVybmFsbHkgZ2VuZXJhdGVkIEFkZENvbnN0cmFpbnQgKGZvcgorCQkqIEFMVEVSIFRB QkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMpIHdoZXJlIHRoZQorCQkq IG9iamVjdElkcyBjb3VsZCBtaXNtYXRjaCAoZm9yZWluIHRhYmxlIGlkIGFuZCB0aGUgcmVmZXJl bmNlZCB0YWJsZQorCQkqIGlkKS4KKwkJKi8KKwkJaWYgKChzdWItPmFkZHJlc3Mub2JqZWN0SWQg IT0gcmVsSWQgJiYKKwkJCSBzdWItPmFkZHJlc3Mub2JqZWN0SWQgIT0gSW52YWxpZE9pZCkgJiYK KwkJCSEoc3ViY21kLT5zdWJ0eXBlID09IEFUX0FkZENvbnN0cmFpbnQgJiYKKwkJCSAgc3ViY21k LT5yZWN1cnNlKSAmJgorCQkJaXN0YWJsZSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoc3Vi Y21kLT5zdWJ0eXBlKQorCQl7CisJCQljYXNlIEFUX0FkZENvbHVtbjoKKwkJCQkvKiBYWFggbmVl ZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2VydChJc0Eo c3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVtbkRlZihy ZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3ViY21kLT5k ZWYsIHRydWUsICZleHBycyk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgJXtv Ymp0eXBlfXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtkZWZpbml0aW9ufXMiLCA0LAorCQkJCQkJCQkJ CSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlpc3R5cGUgPyAiQVRUUklCVVRF IiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb2x1 bW4iLAorCQkJCQkJCQkJCSJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJCQki ZGVmaW5pdGlvbiIsIE9ialR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9BZGRJbmRleENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQlJbmRleFN0bXQgICppc3Rt dDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQlPaWQJCQljb25zdHJPaWQgPSBzdWItPmFkZHJl c3Mub2JqZWN0SWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5kZXhTdG10KSk7 CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQlBc3NlcnQo aXN0bXQtPmlzY29uc3RyYWludCAmJiBpc3RtdC0+dW5pcXVlKTsKKworCQkJCQlpZHggPSByZWxh dGlvbl9vcGVuKGlzdG10LT5pbmRleE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQkJCQkvKgor CQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkgKgorCQkJCQkgKiBBREQgQ09OU1RSQUlOVCAl e25hbWV9SSAle2NvbnN0cmFpbnRfdHlwZX1zIFVTSU5HIElOREVYCisJCQkJCSAqICVpbmRleF9u YW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMKKwkJCQkJICovCisJCQkJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJh aW50X3R5cGV9cyBVU0lORyBJTkRFWCAle2luZGV4X25hbWV9SSAle2RlZmVycmFibGV9cyAle2lu aXRfZGVmZXJyZWR9cyIsIDYsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFk ZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3Ry aW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJCSJjb25zdHJh aW50X3R5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+cHJpbWFyeSA/ICJQ UklNQVJZIEtFWSIgOiAiVU5JUVVFIiwKKwkJCQkJCQkJCQkJImluZGV4X25hbWUiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpLAorCQkJCQkJ CQkJCQkiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5kZWZl cnJhYmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkJImlu aXRfZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+aW5pdGRlZmVy cmVkID8gIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOworCisJ CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlQWRkSW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29u c3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGREb21haW5Db25zdHJhaW50OgorCQkJY2FzZSBBVF9S ZUFkZENvbW1lbnQ6CisJCQljYXNlIEFUX1JlcGxhY2VSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9D aGVja05vdE51bGw6CisJCQljYXNlIEFUX1JlQWRkU3RhdGlzdGljczoKKwkJCQkvKiBTdWJ0eXBl cyB1c2VkIGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJ CQlicmVhazsKKworCQkJY2FzZSBBVF9Db29rZWRDb2x1bW5EZWZhdWx0OgorCQkJCXsKKwkJCQkJ UmVsYXRpb24JYXR0cnJlbDsKKwkJCQkJSGVhcFR1cGxlCWF0dHR1cDsKKwkJCQkJRm9ybV9wZ19h dHRyaWJ1dGUgYXR0U3RydWN0OworCisJCQkJCWF0dHJyZWwgPSB0YWJsZV9vcGVuKEF0dHJpYnV0 ZVJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCQkJCQlhdHR0dXAgPSBTZWFyY2hTeXND YWNoZUNvcHkyKEFUVE5VTSwKKwkJCQkJCQkJCQkJCSBPYmplY3RJZEdldERhdHVtKFJlbGF0aW9u R2V0UmVsaWQocmVsKSksCisJCQkJCQkJCQkJCQkgSW50MTZHZXREYXR1bShzdWJjbWQtPm51bSkp OworCQkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0dHVwKSkKKwkJCQkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhdHRyaWJ1dGUgJWQgb2YgcmVsYXRpb24gd2l0aCBP SUQgJXUiLAorCQkJCQkJCSBzdWJjbWQtPm51bSwgUmVsYXRpb25HZXRSZWxpZChyZWwpKTsKKwkJ CQkJYXR0U3RydWN0ID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0dHVwKTsKKwor CQkJCQkvKgorCQkJCQkgKiBCb3RoIGRlZmF1bHQgYW5kIGdlbmVyYXRpb24gZXhwcmVzc2lvbiBu b3Qgc3VwcG9ydGVkCisJCQkJCSAqIHRvZ2V0aGVyLgorCQkJCQkgKi8KKwkJCQkJaWYgKCFhdHRT dHJ1Y3QtPmF0dGdlbmVyYXRlZCkKKwkJCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVkIGFs dGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCisJCQkJ CWhlYXBfZnJlZXR1cGxlKGF0dHR1cCk7CisJCQkJCXRhYmxlX2Nsb3NlKGF0dHJyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgQVRfQWRkQ29sdW1u VG9WaWV3OgorCQkJCS8qIENSRUFURSBPUiBSRVBMQUNFIFZJRVcgLS0gbm90aGluZyB0byBkbyBo ZXJlICovCisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQ29sdW1uRGVmYXVsdDoKKwkJCQlpZiAo c3ViY21kLT5kZWYgPT0gTlVMTCkKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAg ICpkcGNvbnRleHRfcmVsOworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJl cglhdHRubzsKKworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAl e2NvbHVtbn1JIFNFVCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IGRlZmF1bHQiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKworCQkJCQlkcGNvbnRleHRfcmVsID0gZGVwYXJzZV9jb250ZXh0X2Zv cihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCQlSZWxhdGlvbkdl dFJlbGlkKHJlbCkpOworCQkJCQlhdHRydHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJYXR0bm8gPSAoKEZvcm1fcGdf YXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0cnR1cCkpLT5hdHRudW07CisJCQkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcF9vYmosICIle2RlZmluaXRpb259cyIsICJkZWZpbml0aW9uIiwKKwkJCQkJ CQkJCQkgUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbCwgYXR0bm8sCisJCQkJCQkJCQkJCQkJ CQkJICBkcGNvbnRleHRfcmVsLAorCQkJCQkJCQkJCQkJCQkJCSAgTlVMTCkpOworCQkJCQlSZWxl YXNlU3lzQ2FjaGUoYXR0cnR1cCk7CisJCQkJfQorCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0Ryb3BOb3ROdWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09M VU1OICV7Y29sdW1ufUkgRFJPUCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZHJvcCBub3QgbnVsbCIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0ZvcmNl Um93U2VjdXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJGT1JDRSBST1cgTEVWRUwg U0VDVVJJVFkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfTm9Gb3JjZVJvd1NlY3Vy aXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiTk8gRk9SQ0UgUk9XIExFVkVMIFNFQ1VS SVRZIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgTk9UIE5V TEwiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVsbCIs CisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BFeHByZXNzaW9uOgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OICV7 aWZfZXhpc3RzfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Ag ZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+ bmFtZSwKKwkJCQkJCQkJCQkiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlz dWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21k LT5kZWYsIEludGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcF9vYmog PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1Mg JXtzdGF0aXN0aWNzfW4iLCAzLAorCQkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi c2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJCSJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJ CQkJCQkJCQkJCQlpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJZWxzZQor CQkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBT RVQgU1RBVElTVElDUyAle3N0YXRpc3RpY3N9biIsIDMsCisJCQkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJzZXQgc3RhdGlzdGljcyIsCisJCQkJCQkJCQkJCQkiY29sdW1uIiwgT2Jq VHlwZUludGVnZXIsIHN1YmNtZC0+bnVtLAorCQkJCQkJCQkJCQkJInN0YXRpc3RpY3MiLCBPYmpU eXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJCWludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikp OworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQlj YXNlIEFUX1Jlc2V0T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCgKKwkJCQkJCQkJCQkJCQkJCSBkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMo c3ViY21kKSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldFN0b3JhZ2U6CisJCQkJQXNz ZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsIDMs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJ CQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJInN0 b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN0clZhbCgoU3RyaW5nICopIHN1YmNt ZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgor CQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0cmluZykpOworCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIENPTVBSRVNTSU9OICV7Y29t cHJlc3Npb25fbWV0aG9kfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InNldCBjb21wcmVzc2lvbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkiY29tcHJlc3Npb25fbWV0aG9kIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCQlzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiRFJPUCAle29ianR5cGV9cyAle2lmX25vdF9leGlzdHN9cyAle2NvbHVtbn1JIiwgNCwK KwkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJaXN0eXBlID8g IkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkJImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAor CQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXRt cF9vYmoyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCSAicHJlc2Vu dCIsIE9ialR5cGVCb29sLCBzdWJjbWQtPmJlaGF2aW9yKTsKKwkJCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXBfb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBfb2JqMik7CisKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJeworCQkJCQlPaWQJCQlpZHhPaWQgPSBzdWIt PmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlv bglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsK KworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJaXN0bXQg PSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCWlmICghaXN0bXQtPmlzY29uc3Ry YWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29wZW4oaWR4T2lkLCBB Y2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo aWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVsYXRpb25fY29uc3RyYWludF9vaWQoCisJ CQkJCQkJCQkJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwgaWR4bmFtZSwgZmFsc2Up OworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1l fUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgaWR4 bmFtZSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ CQlwZ19nZXRfY29uc3RyYWludGRlZl9zdHJpbmcoY29uc3RyT2lkKSk7CisJCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCQkJCQly ZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQkJeworCQkJCQkvKiBYWFggbmVlZCB0byBz ZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCQlPaWQJCQljb25zdHJPaWQg PSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQkJSGVhcFR1 cGxlCXR1cDsKKwkJCQkJRGF0dW0JCXZhbDsKKwkJCQkJQ29uc3RyYWludCAqY29uc3RyOworCisJ CQkJCS8qIFNraXAgYWRkaW5nIGNvbnN0cmFpbnQgZm9yIGluaGVyaXRzIHRhYmxlIHN1YiBjb21t YW5kICovCisJCQkJCWlmICghY29uc3RyT2lkKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJQXNz ZXJ0KElzQShzdWJjbWQtPmRlZiwgQ29uc3RyYWludCkpOworCQkJCQljb25zdHIgPSBjYXN0Tm9k ZShDb25zdHJhaW50LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFs aWRhdGlvbikKKwkJCQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwg T2JqZWN0SWRHZXREYXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFs aWQodHVwKSkKKwkJCQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBG ZXRjaCBjb25zdHJhaW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2 YWwgPSBTeXNDYWNoZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1f cGdfY29uc3RyYWludF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwpCisJ CQkJCQkJeworCQkJCQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJ CQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJ CX0KKworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBj b25zdHJhaW50IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3Ry YWludF9uYW1lKGNvbnN0ck9pZCksCisJCQkJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCQkJcGdfZ2V0X2NvbnN0cmFpbnRkZWZfc3RyaW5nKGNvbnN0ck9pZCkp OworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoK KwkJCQl7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKwkJ CQkJQ29uc3RyYWludCAqYyA9IChDb25zdHJhaW50ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCS8q IElmIG5vIGNvbnN0cmFpbnQgd2FzIGFsdGVyZWQsIHNpbGVudGx5IHNraXAgaXQgKi8KKwkJCQkJ aWYgKCFPaWRJc1ZhbGlkKGNvbnN0ck9pZCkpCisJCQkJCQlicmVhazsKKworCQkJCQlBc3NlcnQo SXNBKGMsIENvbnN0cmFpbnQpKTsKKwkJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1zIiwg NCwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29uc3RyYWludCIs CisJCQkJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShj b25zdHJPaWQpLAorCQkJCQkJCQkJCQkiZGVmZXJyYWJsZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJCWMtPmRlZmVycmFibGUgPyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAor CQkJCQkJCQkJCQkiaW5pdF9kZWZlcnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWMt PmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDogIklOSVRJQUxMWSBJTU1FRElB VEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29u c3RyYWludDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJ TlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywg InZhbGlkYXRlIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENv bnN0cmFpbnQ6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQg JXtjb25zdHJhaW50fUkgJXtpZl9ub3RfZXhpc3RzfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImlmX25vdF9leGlz dHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNtZC0+bWlzc2luZ19vayA/ICJJRiBO T1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5U eXBlOgorCQkJCXsKKwkJCQkJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJl bCk7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJCQkJQ29sdW1uRGVmICAqZGVmOwor CisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1YklkIC0g MV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3NlcnQo SXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgK KwkJCQkJICoKKwkJCQkJICogQ29tcG9zaXRlIHR5cGVzOiBBTFRFUiByZWx0eXBlICV7Y29sdW1u fUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtjb2xsYXRpb259cyBBVFRS SUJVVEUgJXtjYXNjYWRlfXMKKwkJCQkJICoKKwkJCQkJICogTm9ybWFsIHR5cGVzOiBBTFRFUiBy ZWx0eXBlICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRQorCQkJCQkgKiAle2RhdGF0eXBlfVQgJXtj b2xsYXRpb259cyBDT0xVTU4gJXt1c2luZ31zCisJCQkJCSAqLworCQkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSAl e2RhdGF0eXBlfVQiLCA0LAorCQkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkJImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJImRhdGF0eXBl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5h dHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCQkgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBB ZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICovCisJCQkJCXRtcF9vYmoyID0gbmV3X29i anRyZWUoIkNPTExBVEUiKTsKKwkJCQkJaWYgKE9pZElzVmFsaWQoYXR0LT5hdHRjb2xsYXRpb24p KQorCQkJCQl7CisJCQkJCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKworCQkJCQkJY29sbG5hbWUg PSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCSAgIGF0dC0+YXR0Y29sbGF0aW9uKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcF9vYmoyLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJCQkJCX0KKwkJCQkJZWxzZQor CQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmoyKTsKKwkJCQkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wX29iaiwgIiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqMik7CisKKwkJCQkJLyogSWYg bm90IGEgY29tcG9zaXRlIHR5cGUsIGFkZCB0aGUgVVNJTkcgY2xhdXNlICovCisJCQkJCWlmICgh aXN0eXBlKQorCQkJCQl7CisJCQkJCQkvKgorCQkJCQkJICogSWYgdGhlcmUncyBhIFVTSU5HIGNs YXVzZSwgdHJhbnNmb3JtQWx0ZXJUYWJsZVN0bXQKKwkJCQkJCSAqIHJhbiBpdCB0aHJvdWdoIHRy YW5zZm9ybUV4cHIgYW5kIHN0b3JlZCB0aGUKKwkJCQkJCSAqIHJlc3VsdGluZyBub2RlIGluIGNv b2tlZF9kZWZhdWx0LCB3aGljaCB3ZSBjYW4gdXNlCisJCQkJCQkgKiBoZXJlLgorCQkJCQkJICov CisJCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+ cmF3X2RlZmF1bHQpCisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iajIsICIle2V4 cHJlc3Npb259cyIsCisJCQkJCQkJCQkJCQkgImV4cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIHN1 Yi0+dXNpbmdleHByKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iajIpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dXNpbmd9cyIs IHRtcF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBjb21wb3NpdGUgdHlwZSwg YWRkIHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBlKQorCQkJCQl7CisJCQkJ CQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJDQVNDQURFIik7CisJCQkJCQlpZiAoc3ViY21kLT5i ZWhhdmlvciAhPSBEUk9QX0NBU0NBREUpCisJCQkJCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmoyKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2Nhc2NhZGV9cyIs IHRtcF9vYmoyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKyNpZmRlZiBU T0RPTElTVAorCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9v YmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJCQkJCQkJCQkJ CXN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5n ZU93bmVyOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiT1dORVIgVE8gJXtvd25lcn1J IiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjaGFuZ2Ugb3duZXIiLAor CQkJCQkJCQkJCSJvd25lciIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJZ2V0X3JvbGVzcGVj X25hbWUoc3ViY21kLT5uZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9D bHVzdGVyT246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJDTFVTVEVSIE9OICV7aW5k ZXh9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2x1c3RlciBvbiIs CisJCQkJCQkJCQkJImluZGV4IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENsdXN0ZXI6CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX1NldExvZ2dlZDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBM T0dHRUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBsb2dnZWQi KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgVU5MT0dHRUQiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgInNldCB1bmxvZ2dlZCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Ecm9wT2lkczoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VU IE9JRFMiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0 IG9pZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldEFjY2Vzc01ldGhvZDoKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBBQ0NFU1MgTUVUSE9EICV7YWNjZXNzX21l dGhvZH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgYWNjZXNz IG1ldGhvZCIsCisJCQkJCQkJCQkJImFjY2Vzc19tZXRob2QiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1J IiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdGFibGVzcGFjZSIs CisJCQkJCQkJCQkJInRhYmxlc3BhY2UiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRSZWxPcHRpb25zOgorCQkJY2FzZSBBVF9S ZXNldFJlbE9wdGlvbnM6CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QoCisJCQkJCQkJCQkJCQkJCQkgZGVwYXJzZV9SZWxTZXRPcHRpb25zKHN1YmNtZCkp KTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnOgorCQkJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJp Z2dlciIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJ CQljYXNlIEFUX0VuYWJsZUFsd2F5c1RyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgQUxXQVlTIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRy aWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkVOQUJMRSBSRVBMSUNBIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJ CSJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0g bGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJESVNBQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9F bmFibGVUcmlnQWxsOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdH RVIgQUxMIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJp Z2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6 CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxMIiwgMSwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgYWxsIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdVc2VyOgorCQkJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZGlzYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRW5hYmxlUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVO QUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJlbmFibGUgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVBbHdheXNSdWxlOgor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFMV0FZUyBSVUxFICV7cnVsZX1J IiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHJ1 bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wX29i aiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgUkVQTElDQSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcmVwbGljYSBydWxlIiwKKwkJ CQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5oZXJp dDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIklOSEVSSVQgJXtwYXJlbnR9RCIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiaW5oZXJpdCIsCisJCQkJCQkJCQkJ InBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNz Lm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BJbmhlcml0Ogor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTk8gSU5IRVJJVCAle3BhcmVudH1EIiwgMiwK KwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGluaGVyaXQiLAorCQkJCQkJ CQkJCSJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRk cmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRPZjoKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwgMiwKKwkJCQkJCQkJ CQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJCSJ0eXBlX29mIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJl c3Mub2JqZWN0SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BPZjoK KwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5PVCBPRiIsIDEsCisJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX1JlcGxpY2FJZGVudGl0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlJFUExJ Q0EgSURFTlRJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxp Y2EgaWRlbnRpdHkiKTsKKwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJj bWQtPmRlZiktPmlkZW50aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJ VFlfREVGQVVMVDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50 fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkRFRkFVTFQiKTsKKwkJCQkJCWJyZWFrOworCQkJ CQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkZVTEwiKTsKKwkJ CQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJ CQkJCQkgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJ VFlfSU5ERVg6CisJCQkJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyBJTkRFWCAl e2luZGV4fUkiLCAxLAorCQkJCQkJCQkJCQkJICJpbmRleCIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJCQkgKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVmKS0+bmFtZSk7CisJ CQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtpZGVudH1zIiwgdG1wX29iajIp OworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9FbmFi bGVSb3dTZWN1cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cg TEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSByb3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJs ZVJvd1NlY3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBST1cg TEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRp c2FibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJ CQljYXNlIEFUX0dlbmVyaWNPcHRpb25zOgorCQkJCXRtcF9vYmogPSBkZXBhcnNlX0Zkd09wdGlv bnMoKExpc3QgKikgc3ViY21kLT5kZWYsIE5VTEwpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKyNlbmRpZgor CQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCJBVFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImF0dGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJw YXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1 Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCisJCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cF9vYmosICIle3BhcnRpdGlvbl9ib3VuZH1zIiwKKwkJCQkJCQkJCQkgInBhcnRpdGlvbl9ib3Vu ZCIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQoc3ViLT5hZGRyZXNzLm9i amVjdElkKSk7CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoK KwkJCXsKKwkJCQlQYXJ0aXRpb25DbWQgKmNtZDsKKworCQkJCUFzc2VydChJc0Eoc3ViY21kLT5k ZWYsIFBhcnRpdGlvbkNtZCkpOworCQkJCWNtZCA9IChQYXJ0aXRpb25DbWQgKikgc3ViY21kLT5k ZWY7CisKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtw YXJ0aXRpb25faWRlbnRpdHl9RCAle2NvbmN1cnJlbnR9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSJkZXRhY2ggcGFydGl0aW9uIiwKKwkJCQkJCQkJ CQkicGFydGl0aW9uX2lkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpLAorCQkJCQkJCQkJCWNtZC0+Y29uY3VycmVudCA/ICJD T05DVVJSRU5UTFkiIDogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgQVRfRGV0 YWNoUGFydGl0aW9uRmluYWxpemU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJERVRB Q0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLCAyLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAor CQkJCQkJCQkJCSJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ CW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgQVRfQWRkSWRlbnRpdHk6CisJCQkJeworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJ T2lkCQkJc2VxX3JlbGlkOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7CisJCQkJCUNvbHVtbkRl ZiAgKmNvbGRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBpZGVudGl0eSIsCisJCQkJCQkJCQkJCSJjb2x1 bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWF0dG51bSA9IGdldF9h dHRudW0oUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVs aWQgPSBnZXRJZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0 cnVlKTsKKworCQkJCQlpZiAoT2lkSXNWYWxpZChzZXFfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlz ZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgY29sZGVmLT5pZGVudGl0 eSwgZmFsc2UpOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIkFERCAle2lk ZW50aXR5X2NvbHVtbn1zIiwgc2VxZGVmKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBw ZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQl9CisJCQkJYnJl YWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbSAgICAqZGVm ZWw7CisJCQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOwor CQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSIsIDIsCisJ CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBpZGVudGl0eSIsCisJCQkJCQkJ CQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJCWlmIChz dWJjbWQtPmRlZikKKwkJCQkJeworCQkJCQkJTGlzdAkgICAqZGVmID0gKExpc3QgKikgc3ViY21k LT5kZWY7CisKKwkJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIExpc3QpKTsKKworCQkJCQkJ ZGVmZWwgPSBsaW5pdGlhbF9ub2RlKERlZkVsZW0sIGRlZik7CisJCQkJCQlpZGVudGl0eSA9IGRl ZkdldEludDMyKGRlZmVsKTsKKwkJCQkJfQorCisJCQkJCWF0dG51bSA9IGdldF9hdHRudW0oUmVs YXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlzZXFfcmVsaWQgPSBnZXRJ ZGVudGl0eVNlcXVlbmNlKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCB0cnVlKTsKKwor CQkJCQlpZiAoT2lkSXNWYWxpZChzZXFfcmVsaWQpKQorCQkJCQl7CisJCQkJCQlzZXFkZWYgPSBk ZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRpdHksIHRydWUpOworCQkJCQkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgc2VxZGVmKTsK KwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRp dHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSBEUk9QIElERU5USVRZIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcF9vYmosICIle2lmX2V4aXN0 c31zIiwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwKKwkJCQkJCQkJCSBzdWJjbWQtPm1pc3Npbmdf b2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ CQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJ CQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2Ug ZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBUQUJMRSB3aGljaCBjb250YWlucyB2b2xh dGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdzIHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMg Y29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNhc2UgdGhlc2Ugb3BlcmF0aW9ucyB3aWxs IGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRk aXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vz c2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxs b3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBs aWtlIHRoZSB0YWJsZXMKKwkJICogYWNjZXNzZWQgaW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3Qg ZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci4KKwkJICovCisJCWlmIChjb250YWluX3ZvbGF0 aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSBleHBycykpCisJCQllbG9nKEVSUk9SLCAiQUxURVIgVEFC TEUgY29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIp OworCisJCS8qCisJCSAqIENsZWFuIHRoZSBsaXN0IGFzIHdlIGFscmVhZHkgY29uZmlybWVkIHRo ZXJlIGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9uLgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4 cHJzKTsKKwkJZXhwcnMgPSBOSUw7CisJfQorCisJdGFibGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJaWYgKGxpc3RfbGVuZ3RoKHN1YmNtZHMpID09IDApCisJCXJldHVybiBOVUxM OworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2YgRFJPUCBj b21tYW5kcy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogRFJPUCAlcyBJRiBFWElTVFMgJSV7 b2JqaWRlbnRpdHl9cyAle2Nhc2NhZGV9cworICovCitjaGFyICoKK2RlcGFyc2VfZHJvcF9jb21t YW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAorCQkJ CQkgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQoreworCVN0cmluZ0luZm9EYXRhIHN0cjsKKwljaGFy CSAgICpjb21tYW5kOworCWNoYXIJICAgKmlkZW50aXR5ID0gKGNoYXIgKikgb2JqaWRlbnRpdHk7 CisJT2JqVHJlZSAgICAqc3RtdDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUpzb25iCSAgICpq c29uYjsKKworCWluaXRTdHJpbmdJbmZvKCZzdHIpOworCisJc3RtdCA9IG5ld19vYmp0cmVlX1ZB KCJEUk9QICV7b2JqdHlwZX1zIElGIEVYSVNUUyAle29iamlkZW50aXR5fXMiLCAyLAorCQkJCQkJ ICAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsIG9iamVjdHR5cGUsCisJCQkJCQkgICJvYmppZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50aXR5KTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgYmVoYXZp b3IgPT0gRFJPUF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtjYXNj YWRlfXMiLCB0bXBfb2JqKTsKKworCWpzb25iID0gb2JqdHJlZV90b19qc29uYihzdG10KTsKKwlj b21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFU RURfTEVOKTsKKworCXJldHVybiBjb21tYW5kOworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2lu ZyBvZiBzaW1wbGUgY29tbWFuZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgY292ZXIg YWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sK KwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpwYXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50 eXBlID09IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRyZWU7CisJb2Jq ZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwlpZiAoY21kLT5pbl9l eHRlbnNpb24gJiYgKG5vZGVUYWcocGFyc2V0cmVlKSAhPSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQp KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFRoaXMgc3dpdGNoIG5lZWRzIHRvIGhhbmRsZSBldmVy eXRoaW5nIHRoYXQgUHJvY2Vzc1V0aWxpdHlTbG93IGRvZXMgKi8KKwlzd2l0Y2ggKG5vZGVUYWco cGFyc2V0cmVlKSkKKwl7CisJCWNhc2UgVF9DcmVhdGVTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQ3JlYXRlU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhMT0csICJ1bnJlY29nbml6 ZWQgbm9kZSB0eXBlIGluIGRlcGFyc2UgY29tbWFuZDogJWQiLAorCQkJCSAoaW50KSBub2RlVGFn KHBhcnNldHJlZSkpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogV29ya2hvcnNl IHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgorICovCitjaGFyICoKK2RlcGFyc2VfdXRp bGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCit7 CisJT3ZlcnJpZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dCBvbGRj eHQ7CisJTWVtb3J5Q29udGV4dCB0bXBjeHQ7CisJT2JqVHJlZSAgICAqdHJlZTsKKwljaGFyCSAg ICpjb21tYW5kID0gTlVMTDsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisKKwkvKgorCSAqIEFsbG9j YXRlIGV2ZXJ5dGhpbmcgZG9uZSBieSB0aGUgZGVwYXJzaW5nIHJvdXRpbmVzIGludG8gYSB0ZW1w IGNvbnRleHQsCisJICogdG8gYXZvaWQgaGF2aW5nIHRvIHNwcmlua2xlIHRoZW0gd2l0aCBtZW1v cnkgaGFuZGxpbmcgY29kZSwgYnV0CisJICogYWxsb2NhdGUgdGhlIG91dHB1dCBTdHJpbmdJbmZv IGJlZm9yZSBzd2l0Y2hpbmcuCisJICovCisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJdG1wY3h0 ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkg ICAiZGVwYXJzZSBjdHgiLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCisJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfTUFYU0laRSk7CisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRtcGN4 dCk7CisKKwkvKgorCSAqIE1hbnkgcm91dGluZXMgdW5kZXJseWluZyB0aGlzIG9uZSB3aWxsIGlu dm9rZSBydWxldXRpbHMuYyBmdW5jdGlvbmFsaXR5CisJICogdG8gb2J0YWluIGRlcGFyc2VkIHZl cnNpb25zIG9mIGV4cHJlc3Npb25zLiAgSW4gc3VjaCByZXN1bHRzLCB3ZSB3YW50CisJICogYWxs IG9iamVjdCBuYW1lcyB0byBiZSBxdWFsaWZpZWQsIHNvIHRoYXQgcmVzdWx0cyBhcmUgInBvcnRh YmxlIiB0bworCSAqIGVudmlyb25tZW50cyB3aXRoIGRpZmZlcmVudCBzZWFyY2hfcGF0aCBzZXR0 aW5ncy4gIFJhdGhlciB0aGFuIGluamVjdAorCSAqIHdoYXQgd291bGQgYmUgcmVwZXRpdGl2ZSBj YWxscyB0byBvdmVycmlkZSBzZWFyY2ggcGF0aCBhbGwgb3ZlciB0aGUKKwkgKiBwbGFjZSwgd2Ug ZG8gaXQgY2VudHJhbGx5IGhlcmUuCisJICovCisJb3ZlcnJpZGVQYXRoID0gR2V0T3ZlcnJpZGVT ZWFyY2hQYXRoKEN1cnJlbnRNZW1vcnlDb250ZXh0KTsKKwlvdmVycmlkZVBhdGgtPnNjaGVtYXMg PSBOSUw7CisJb3ZlcnJpZGVQYXRoLT5hZGRDYXRhbG9nID0gZmFsc2U7CisJb3ZlcnJpZGVQYXRo LT5hZGRUZW1wID0gdHJ1ZTsKKwlQdXNoT3ZlcnJpZGVTZWFyY2hQYXRoKG92ZXJyaWRlUGF0aCk7 CisKKwl2ZXJib3NlID0gdmVyYm9zZV9tb2RlOworCisJc3dpdGNoIChjbWQtPnR5cGUpCisJewor CQljYXNlIFNDVF9TaW1wbGU6CisJCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFuZChjbWQp OworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyVGFibGU6CisJCQl0cmVlID0gZGVwYXJzZV9B bHRlclJlbGF0aW9uKGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoK KwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRlcGFyc2Ugbm9kZSB0eXBlICVk IiwgY21kLT50eXBlKTsKKwl9CisKKwlQb3BPdmVycmlkZVNlYXJjaFBhdGgoKTsKKworCWlmICh0 cmVlKQorCXsKKwkJSnNvbmIJICAgKmpzb25iOworCisJCWpzb25iID0gb2JqdHJlZV90b19qc29u Yih0cmVlKTsKKwkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwg SlNPTkJfRVNUSU1BVEVEX0xFTik7CisJfQorCisJLyoKKwkgKiBDbGVhbiB1cC4gIE5vdGUgdGhh dCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIncworCSAqIGNv bnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJICovCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBjeHQp OworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENvbW1h bmQsIHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNvbW1h bmQgaXMgZXhwYW5kZWQgZnVsbHkgc28gdGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZl biBpbiB0aGUKKyAqIGZhY2Ugb2Ygc2VhcmNoX3BhdGggY2hhbmdlcy4KKyAqLworRGF0dW0KK2Rk bF9kZXBhcnNlX3RvX2pzb24oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlDb2xsZWN0ZWRDb21tYW5k ICpjbWQgPSAoQ29sbGVjdGVkQ29tbWFuZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKKwljaGFy CSAgICpjb21tYW5kOworCisJY29tbWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwg dHJ1ZSk7CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3Rl eHQoY29tbWFuZCkpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNv bi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmM2ZDgKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBAIC0wLDAgKzEsNzgx IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisgKgkgIEpTT04gY29k ZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5 IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRl ICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNpbmNsdWRlICJ0 Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRl ICJ1dGlscy9qc29uYi5oIgorCisKKy8qCisgKiBDb252ZXJzaW9uIHNwZWNpZmllciB3aGljaCBk ZXRlcm1pbmVzIGhvdyB0byBleHBhbmQgdGhlIEpTT04gZWxlbWVudAorICogaW50byBhIHN0cmlu Zy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJU3BlY0RvdHRlZE5hbWUsCisJU3BlY0lkZW50aWZp ZXIsCisJU3BlY051bWJlciwKKwlTcGVjT3BlcmF0b3JOYW1lLAorCVNwZWNSb2xlLAorCVNwZWNT dHJpbmcsCisJU3BlY1N0cmluZ0xpdGVyYWwsCisJU3BlY1R5cGVOYW1lCit9IGNvbnZTcGVjaWZp ZXI7CisKKy8qCisgKiBBIHRlcm5hcnkgdmFsdWUgdGhhdCByZXByZXNlbnRzIGEgYm9vbGVhbiB0 eXBlIEpzb25iVmFsdWUuCisgKi8KK3R5cGVkZWYgZW51bQoreworCXR2X2Fic2VudCwKKwl0dl90 cnVlLAorCXR2X2ZhbHNlCit9CQkJanNvbl90cml2YWx1ZTsKKworc3RhdGljIGJvb2wgZXhwYW5k X29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCQkJ CSBKc29uYlZhbHVlICpqc29udmFsLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkJCQkJ CSBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZXhwYW5kX2pzb25iX2FycmF5KFN0cmlu Z0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkJCQkgICBKc29uYlZhbHVlICpqc29uYXJyLCBj aGFyICphcnJheXNlcCwKKwkJCQkJCQkgICBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3Qg Y2hhciAqZm10KTsKK3N0YXRpYyB2b2lkIGZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcp OworCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3 aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90aGVy IHRoYW4gamJ2Qm9vbCwgYW4gZXJyb3IgaXMgcmFpc2VkLiBJZiBpdCBkb2Vzbid0CisgKiBleGlz dCwgdHZfYWJzZW50IGlzIHJldHVybmVkOyBvdGhlcndpc2UgcmV0dXJuIHRoZSBhY3R1YWwganNv bl90cml2YWx1ZS4KKyAqLworc3RhdGljIGpzb25fdHJpdmFsdWUKK2ZpbmRfYm9vbF9pbl9qc29u YmNvbnRhaW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lKQorewor CUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWpzb25fdHJpdmFsdWUgcmVz dWx0OworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5 bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBm aW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpF Q1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlm ICh2YWx1ZS0+dHlwZSAhPSBqYnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQg XCIlc1wiIGlzIG5vdCBvZiB0eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1 bHQgPSB2YWx1ZS0+dmFsLmJvb2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFs dWUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWlu ZXIsIGZpbmQgdGhlIEpzb25iVmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisg KiBJZiBpdCdzIG9mIGEgdHlwZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFp c2VkLiAgSWYgaXQgZG9lc24ndAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJhaXNlZCB1bmxlc3Mg bWlzc2luZ19vazsgb3RoZXJ3aXNlIHJldHVybiBOVUxMLgorICoKKyAqIElmIGl0IGV4aXN0cyBh bmQgaXMgYSBzdHJpbmcsIGEgZnJlc2hseSBwYWxsb2MnZWQgY29weSBpcyByZXR1cm5lZC4KKyAq CisgKiBJZiAqbGVuZ3RoIGlzIG5vdCBOVUxMLCBpdCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0 aGUgc3RyaW5nLgorICovCitzdGF0aWMgY2hhciAqCitmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihKc29uYkNvbnRhaW5lciAqY29udGFpbmVyLCBjaGFyICprZXluYW1lLAorCQkJCQkJCSAg Ym9vbCBtaXNzaW5nX29rLCBpbnQgKmxlbmd0aCkKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29u YlZhbHVlICp2YWx1ZTsKKwljaGFyCSAgICpzdHI7CisKKwkvKiBYWFggdmVyaWZ5IHRoYXQgdGhp cyBpcyBhbiBvYmplY3QsIG5vdCBhbiBhcnJheSAqLworCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7 CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0cmluZy5sZW4gPSBz dHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29u dGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2YWx1ZSA9PSBOVUxM KQorCXsKKwkJaWYgKG1pc3Npbmdfb2spCisJCQlyZXR1cm4gTlVMTDsKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkg ZXJybXNnKCJtaXNzaW5nIGVsZW1lbnQgXCIlc1wiIGluIEpTT04gb2JqZWN0Iiwga2V5bmFtZSkp KTsKKwl9CisKKwlpZiAodmFsdWUtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBl cnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0eXBlIHN0cmluZyIsIGtleW5hbWUpKSk7 CisKKwlzdHIgPSBwbnN0cmR1cCh2YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZhbHVlLT52YWwuc3Ry aW5nLmxlbik7CisJaWYgKGxlbmd0aCkKKwkJKmxlbmd0aCA9IHZhbHVlLT52YWwuc3RyaW5nLmxl bjsKKwlwZnJlZSh2YWx1ZSk7CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBBRFZBTkNFX1BB UlNFX1BPSU5URVIocHRyLGVuZF9wdHIpIFwKKwlkbyB7IFwKKwkJaWYgKCsrKHB0cikgPj0gKGVu ZF9wdHIpKSBcCisJCQllcmVwb3J0KEVSUk9SLCBcCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLCBcCisJCQkJCSBlcnJtc2coInVudGVybWluYXRlZCBmb3Jt YXQgc3BlY2lmaWVyIikpKTsgXAorCX0gd2hpbGUgKDApCisKKy8qCisgKiBSZWN1cnNpdmUgaGVs cGVyIGZvciBkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZy4KKyAqCisgKiBGaW5kIHRoZSAiZm10 IiBlbGVtZW50IGluIHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUK KyAqIHByb3ZpZGVkIFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3Jl Y3Vyc2l2ZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJDb250YWluZXIgKmNvbnRhaW5lcikKK3sKKwlK c29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwlj b25zdCBjaGFyICpzdGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47 CisKKwlzdGFydF9wdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIs ICJmbXQiLCBmYWxzZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZv ciAoY3AgPSBzdGFydF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZp ZXIgc3BlY2lmaWVyOworCQlib29sCQlpc19hcnJheSA9IGZhbHNlOworCQljaGFyCSAgICpwYXJh bSA9IE5VTEw7CisJCWNoYXIJICAgKmFycmF5c2VwID0gTlVMTDsKKworCQlpZiAoKmNwICE9ICcl JykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250 aW51ZTsKKwkJfQorCisJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisKKwkJ LyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJaWYgKCpjcCA9PSAnJScp CisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oYnVmLCAqY3ApOworCQkJY29udGlu dWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1lLiAg QWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2ggbWF5IGJlIHRoZSBlbXB0 eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBhIGNvbG9uLgorCQkgKi8KKwkJaWYgKCpj cCA9PSAneycpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIHBhcmJ1ZjsKKwkJCVN0cmluZ0luZm9E YXRhIGFycmF5c2VwYnVmOworCQkJU3RyaW5nSW5mbwlhcHBlbmRUbzsKKworCQkJaW5pdFN0cmlu Z0luZm8oJnBhcmJ1Zik7CisJCQlhcHBlbmRUbyA9ICZwYXJidWY7CisKKwkJCUFEVkFOQ0VfUEFS U0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl3aGlsZSAoY3AgPCBlbmRfcHRyKQorCQkJewor CQkJCWlmICgqY3AgPT0gJzonKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm91bmQgYXJyYXkg c2VwYXJhdG9yIGRlbGltaXRlcjsgZWxlbWVudCBuYW1lIGlzIG5vdworCQkJCQkgKiBjb21wbGV0 ZSwgc3RhcnQgZmlsbGluZyB0aGUgc2VwYXJhdG9yLgorCQkJCQkgKi8KKwkJCQkJaW5pdFN0cmlu Z0luZm8oJmFycmF5c2VwYnVmKTsKKwkJCQkJYXBwZW5kVG8gPSAmYXJyYXlzZXBidWY7CisJCQkJ CWlzX2FycmF5ID0gdHJ1ZTsKKwkJCQkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRy KTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJaWYgKCpjcCA9PSAnfScpCisJCQkJewor CQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQlicmVhazsKKwkJ CQl9CisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhhcHBlbmRUbywgKmNwKTsKKwkJCQlB RFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJfQorCQkJcGFyYW0gPSBwYXJi dWYuZGF0YTsKKwkJCWlmIChpc19hcnJheSkKKwkJCQlhcnJheXNlcCA9IGFycmF5c2VwYnVmLmRh dGE7CisJCX0KKwkJaWYgKHBhcmFtID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygi bWlzc2luZyBjb252ZXJzaW9uIG5hbWUgaW4gY29udmVyc2lvbiBzcGVjaWZpZXIiKSkpOworCisJ CXN3aXRjaCAoKmNwKQorCQl7CisJCQljYXNlICdJJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjSWRl bnRpZmllcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCXNwZWNpZmllciA9IFNwZWNE b3R0ZWROYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJc3BlY2lmaWVyID0gU3Bl Y1N0cmluZzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCXNwZWNpZmllciA9IFNwZWNT dHJpbmdMaXRlcmFsOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJCQkJc3BlY2lmaWVyID0g U3BlY1R5cGVOYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnTyc6CisJCQkJc3BlY2lmaWVyID0g U3BlY09wZXJhdG9yTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCXNwZWNpZmll ciA9IFNwZWNOdW1iZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdSJzoKKwkJCQlzcGVjaWZpZXIg PSBTcGVjUm9sZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiaW52YWxpZCBjb252ZXJzaW9uIHNwZWNpZmllciBcIiVjXCIiLCAqY3ApKSk7CisJ CX0KKworCQkvKgorCQkgKiBPYnRhaW4gdGhlIGVsZW1lbnQgdG8gYmUgZXhwYW5kZWQuCisJCSAq LworCQlrZXkudHlwZSA9IGpidlN0cmluZzsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gcGFyYW07 CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihwYXJhbSk7CisKKwkJdmFsdWUgPSBmaW5k SnNvbmJWYWx1ZUZyb21Db250YWluZXIoY29udGFpbmVyLCBKQl9GT0JKRUNULCAma2V5KTsKKwkJ QXNzZXJ0KHZhbHVlICE9IE5VTEwpOworCisJCS8qCisJCSAqIEV4cGFuZCB0aGUgZGF0YSAocG9z c2libHkgYW4gYXJyYXkpIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgorCQkgKi8KKwkJaWYg KGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0sIHZhbHVlLCBhcnJh eXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRfb25lX2pzb25i X2VsZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRyKTsKKwl9Cit9 CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlkZW50aWZpZXIuICBU aGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFu ZF9qc29udmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwp Cit7CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3RyaW5n KTsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52 YWwuc3RyaW5nLmxlbik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50 aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFs dWUgYXMgYSBkb3Qtc2VwYXJhdGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlCisg KiBiaW5hcnkgYW5kIG1heSBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1lIiAob3B0aW9uYWwp LCAib2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRpb25hbCkuICBEb3Vi bGUgcXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5lY2Vzc2FyeSwgYW5k IGRvdCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5IHdlIG1pZ2h0IG5l ZWQgYSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVudCB1c2UgY2FzZQor ICogbmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX2RvdHRlZG5h bWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3Ry OworCUpzb25iQ29udGFpbmVyICpkYXRhID0ganNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhOworCisJ QXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KTsKKworCXN0ciA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGRhdGEsICJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVMTCk7CisJaWYg KHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVfaWRlbnRpZmll cihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihkYXRhLCAib2JqbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworCisJ c3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgImF0dHJuYW1lIiwgdHJ1 ZSwgTlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwg cXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBF eHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwp Cit7CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFy CSAgICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZSBpc19hcnJheTsKKwljaGFyCSAgICphcnJh eV9kZWNvcjsKKwlKc29uYkNvbnRhaW5lciAqZGF0YSA9IGpzb252YWwtPnZhbC5iaW5hcnkuZGF0 YTsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5hbWUg aWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcgb3Ig TlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0aGF0 IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3ZSBk b24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBuZWVk cywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlwZV9k ZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhlIHNj aGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBxdW90 ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkgKi8K KworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJzY2hlbWFu YW1lIiwgdHJ1ZSwgTlVMTCk7CisJdHlwZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRh aW5lcihkYXRhLCAidHlwZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJdHlwbW9kc3RyID0gZmluZF9z dHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgInR5cG1vZCIsIHRydWUsIE5VTEwpOworCWlz X2FycmF5ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJ0eXBhcnJheSIpOwor CXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2X3RydWU6CisJCQlhcnJheV9kZWNvciA9 ICJbXSI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2ZhbHNlOgorCQkJYXJyYXlfZGVjb3IgPSAi IjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50OgorCQlkZWZhdWx0OgorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks CisJCQkJCSBlcnJtc2coIm1pc3NpbmcgdHlwYXJyYXkgZWxlbWVudCIpKSk7CisJfQorCisJaWYg KHNjaGVtYSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRl bnRpZmllcih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNjaGVtYVswXSA9PSAnXDAnKQorCQlhcHBl bmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUpOwkvKiBTcGVjaWFsIHR5cG1vZCBuZWVk cyAqLworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4lcyIsIHF1b3RlX2lkZW50 aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKHR5cGVuYW1lKSk7CisKKwlh cHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBtb2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwg YXJyYXlfZGVjb3IpOworCXBmcmVlKHNjaGVtYSk7CisJcGZyZWUodHlwZW5hbWUpOworCXBmcmVl KHR5cG1vZHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGFuIG9wZXJh dG9yIG5hbWUuIFRoZSB2YWx1ZSBtYXkgY29udGFpbiBlbGVtZW50CisgKiAic2NoZW1hbmFtZSIg KG9wdGlvbmFsKS4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX29wZXJhdG9yKFN0 cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNoYXIJICAgKnN0cjsKKwlK c29uYkNvbnRhaW5lciAqZGF0YSA9IGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YTsKKworCXN0ciA9 IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGRhdGEsICJzY2hlbWFuYW1lIiwgdHJ1ZSwg TlVMTCk7CisJLyogU2NoZW1hIG1pZ2h0IGJlIE5VTEwgb3IgZW1wdHkgKi8KKwlpZiAoc3RyICE9 IE5VTEwgJiYgc3RyWzBdICE9ICdcMCcpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVz LiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgIm9iam5hbWUiLCBmYWxzZSwgTlVM TCk7CisJaWYgKCFzdHIpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQllcnJtc2coIm1pc3Npbmcgb3BlcmF0b3IgbmFt ZSIpKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIpOworCXBmcmVlKHN0cik7 Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgc3RyaW5nLiAgVGhlIHZhbHVl IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3Igb2YKKyAqIHR5cGUgQmluYXJ5LiAgSW4gdGhlIGxh dHRlciBjYXNlLCBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAq IGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFu IGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5z aW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1 YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5n IHNldCB0byAiZmFsc2UiLgorICoKKyAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gY2hl Y2sganNvbnZhbCBpcyBvZiB0eXBlIGpidlN0cmluZyBvciBqYnZCaW5hcnkuCisgKi8KK3N0YXRp YyBib29sCitleHBhbmRfanNvbnZhbF9zdHJpbmcoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUg Kmpzb252YWwpCit7CisJYm9vbCBleHBhbmRlZCA9IGZhbHNlOworCisJaWYgKGpzb252YWwtPnR5 cGUgPT0gamJ2U3RyaW5nKQorCXsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGpzb252 YWwtPnZhbC5zdHJpbmcudmFsLAorCQkJCQkJCSAgIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsK KwkJZXhwYW5kZWQgPSB0cnVlOworCX0KKwllbHNlIGlmIChqc29udmFsLT50eXBlID09IGpidkJp bmFyeSkKKwl7CisJCWpzb25fdHJpdmFsdWUgcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9i b29sX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJ CQkJICAicHJlc2VudCIpOworCisJCS8qCisJCSAqIElmICJwcmVzZW50IiBpcyBzZXQgdG8gZmFs c2UsIHRoaXMgZWxlbWVudCBleHBhbmRzIHRvIGVtcHR5OworCQkgKiBvdGhlcndpc2UgKGVpdGhl ciB0cnVlIG9yIGFic2VudCksIGV4cGFuZCAiZm10Ii4KKwkJICovCisJCWlmIChwcmVzZW50ICE9 IHR2X2ZhbHNlKQorCQl7CisJCQlleHBhbmRfZm10X3JlY3Vyc2l2ZShidWYsIGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSk7CisJCQlleHBhbmRlZCA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4g ZXhwYW5kZWQ7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgc3RyaW5nIGxp dGVyYWwuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9zdHJsaXQoU3RyaW5nSW5m byBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCVN0cmluZ0lu Zm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9YWVpa WVhfIjsKKwlpbnQJCQlkcW5leHRjaGFyID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwt PnZhbC5zdHJpbmcudmFsLCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBFYXN5IGNh c2U6IGlmIHRoZXJlIGFyZSBubyAnIGFuZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAq LworCWlmIChzdHJwYnJrKHN0ciwgIlwnXFwiKSA9PSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICInJXMnIiwgc3RyKTsKKwkJcGZyZWUoc3RyKTsKKwkJcmV0dXJuOworCX0KKwor CS8qIE90aGVyd2lzZSBuZWVkIHRvIGZpbmQgYSB1c2VmdWwgZG9sbGFyLXF1b3RlIGRlbGltaXRl ciAqLworCWluaXRTdHJpbmdJbmZvKCZkcWRlbGltKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZkcWRlbGltLCAiJCIpOworCXdoaWxlIChzdHJzdHIoc3RyLCBkcWRlbGltLmRhdGEpICE9IE5V TEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgZHFzdWZmaXhlc1tkcW5l eHRjaGFyKytdKTsKKwkJZHFuZXh0Y2hhciA9IGRxbmV4dGNoYXIgJSAoc2l6ZW9mKGRxc3VmZml4 ZXMpIC0gMSk7CisJfQorCS8qIEFkZCB0cmFpbGluZyAkICovCisJYXBwZW5kU3RyaW5nSW5mb0No YXIoJmRxZGVsaW0sICckJyk7CisKKwkvKiBBbmQgZmluYWxseSBwcm9kdWNlIHRoZSBxdW90ZWQg bGl0ZXJhbCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyAqLworCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiJXMlcyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIsIGRxZGVsaW0uZGF0YSk7CisJcGZyZWUo ZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2 YWx1ZSBhcyBhbiBpbnRlZ2VyIHF1YW50aXR5LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pz b252YWxfbnVtYmVyKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWNo YXIJICAgKnN0cmRhdHVtOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2TnVtZXJpYyk7 CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVy aWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1l cmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7CisJcGZyZWUo c3RyZGF0dW0pOworfQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHJvbGUgbmFt ZS4gIElmIHRoZSAnaXNfcHVibGljJyBlbGVtZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElD IGlzIGV4cGFuZGVkIChubyBxdW90ZXMpOyBvdGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9s ZSBuYW1lLAorICogcXVvdGluZyBhcyBhbiBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAor ZXhwYW5kX2pzb252YWxfcm9sZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwlqc29uX3RyaXZhbHVlIGlzX3B1YmxpYzsKKworCWlzX3B1YmxpYyA9IGZpbmRfYm9vbF9p bl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCSJp c19wdWJsaWMiKTsKKwlpZiAoaXNfcHVibGljID09IHR2X3RydWUpCisJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiUFVCTElDIik7CisJZWxzZQorCXsKKwkJY2hhcgkgICAqcm9sZW5hbWU7 CisKKwkJcm9sZW5hbWUgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52 YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJCQkgInJvbGVuYW1lIiwgZmFsc2UsIE5VTEwpOwor CQlpZiAocm9sZW5hbWUpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90 ZV9pZGVudGlmaWVyKHJvbGVuYW1lKSk7CisJCQlwZnJlZShyb2xlbmFtZSk7CisJCX0KKwl9Cit9 CisKKy8qCisgKiBFeHBhbmQgb25lIEpTT04gZWxlbWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5n SW5mbyBhY2NvcmRpbmcgdG8gdGhlCisgKiBjb252ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVt ZW50IHR5cGUgaXMgdmFsaWRhdGVkLCBhbmQgYW4gZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBk b2Vzbid0IG1hdGNoIHdoYXQgd2UgZXhwZWN0IGZvciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIu CisgKgorICogUmV0dXJucyB0cnVlLCBleGNlcHQgZm9yIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIGNh c2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbgorICogd2FzIG1hZGUgKGR1ZSB0byB0aGUgInByZXNl bnQiIGZsYWcgYmVpbmcgc2V0IHRvICJmYWxzZSIpLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5k X29uZV9qc29uYl9lbGVtZW50KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwgSnNvbmJWYWx1 ZSAqanNvbnZhbCwKKwkJCQkJCSBjb252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAq Zm10KQoreworCWJvb2wJCXN0cmluZ19leHBhbmRlZCA9IHRydWU7CisJRXJyb3JDb250ZXh0Q2Fs bGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElmIHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3Ry aW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJ eworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0gZm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlz cWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZtdDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91 cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJy Y29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxl bWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0pKSk7CisKKwlzd2l0Y2ggKHNwZWNpZmllcikK Kwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZT dHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJ RF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcg Zm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwt PnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9pZGVudGlmaWVyKGJ1ZiwganNvbnZhbCk7CisJ CQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWROYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUg IT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04g c3RydWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBq c29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfZG90dGVkbmFtZShidWYsIGpzb252 YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nOgorCQkJaWYgKGpzb252YWwtPnR5 cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgb3Igc3RydWN0IGZv ciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50 eXBlKSkpOworCQkJc3RyaW5nX2V4cGFuZGVkID0gZXhwYW5kX2pzb252YWxfc3RyaW5nKGJ1Ziwg anNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmdMaXRlcmFsOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfc3RybGl0 KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNUeXBlTmFtZToKKwkJCWlm IChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNn KCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVUIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAor CQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX3R5cGVu YW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNPcGVyYXRvck5hbWU6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlTyBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZh bF9vcGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjTnVtYmVy OgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUlbiBlbGVtZW50IFwiJXNcIiwg Z290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNv bnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1JvbGU6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJ IGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlUiBlbGVtZW50IFwiJXNcIiwgZ290 ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZh bF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisKKwlpZiAoZm10KQorCQllcnJv cl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKKworCXJldHVybiBzdHJp bmdfZXhwYW5kZWQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50cyBvZiBhIEpT T04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAqIFN0cmluZ0lu Zm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVkIGJ5IHRoZSBn aXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb25iX2FycmF5 KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVlICpqc29uYXJy LCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJICAgY29uc3Qg Y2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisJSnNv bmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlKc29uYlZhbHVl CXY7CisJaW50CQkJdHlwZTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5nSW5mb0RhdGEg YXJyYXllbGVtOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVw IGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVy cmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRl eHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0Owor CX0KKworCWlmICghanNvbmFycikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNc IiBub3QgZm91bmQiLCBwYXJhbSkpKTsKKworCWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFy eSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFy cmF5IiwgcGFyYW0pKSk7CisKKwljb250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7 CisJaWYgKCFKc29uQ29udGFpbmVySXNBcnJheShjb250YWluZXIpKQorCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBl cnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKwor CWluaXRTdHJpbmdJbmZvKCZhcnJheWVsZW0pOworCisJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdChj b250YWluZXIpOworCXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwgJnYsIHRy dWUpKSAhPSBXSkJfRE9ORSkKKwl7CisJCWlmICh0eXBlID09IFdKQl9FTEVNKQorCQl7CisJCQly ZXNldFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwkJCWlmIChleHBhbmRfb25lX2pzb25iX2Vs ZW1lbnQoJmFycmF5ZWxlbSwgcGFyYW0sICZ2LCBzcGVjaWZpZXIsIE5VTEwpKQorCQkJeworCQkJ CWlmICghZmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcnJheXNlcCk7 CisKKwkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgYXJyYXllbGVtLmRhdGEsIGFycmF5 ZWxlbS5sZW4pOworCQkJCWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm10 KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKK30KKwor LyoKKyAqIFdvcmtob3JzZSBmb3IgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQuCisgKi8KK2No YXIgKgorZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJRGF0 dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8JYnVmID0gKFN0cmluZ0luZm8p IHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhidWYp OworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIFBvaW50ZXJHZXREYXR1bShq c29uX3N0cikpOworCWpzb25iID0gKEpzb25iICopIERhdHVtR2V0UG9pbnRlcihkKTsKKworCWV4 cGFuZF9mbXRfcmVjdXJzaXZlKGJ1ZiwgJmpzb25iLT5yb290KTsKKworCXJldHVybiBidWYtPmRh dGE7Cit9CisKKy8qLS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9tIGEg SlNPTiBvYmplY3QuCisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVtZW50IG5h bWVkICJmbXQiICh3aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0IHN0cmlu ZyBtYXkgY29udGFpbiB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3aGljaCBjb25zaXN0IG9mIGFu CisgKiBlbGVtZW50IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3NzaWJseSBmb2xsb3dlZCBieSBh IGNvbnZlcnNpb24gbW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gc3BlY2lm aWVyLiAgUG9zc2libGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFyZToKKyAqCisgKiAlCQlleHBh bmQgdG8gYSBsaXRlcmFsICUKKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmll ZCBpZGVudGlmaWVyCisgKiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRp ZmllcgorICogVAkJZXhwYW5kIGFzIGEgdHlwZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3Bl cmF0b3IgbmFtZQorICogTAkJZXhwYW5kIGFzIGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5n IHNpbmdsZSBxdW90ZXMpCisgKiBzCQlleHBhbmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90 aW5nKQorICogbgkJZXhwYW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJ CWV4cGFuZCBhcyBhIHJvbGUgbmFtZSAocG9zc2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykK KyAqCisgKiBUaGUgZWxlbWVudCBuYW1lIG1heSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBz cGVjaWZpY2F0aW9uIHByZWNlZGVkCisgKiBieSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGlj YXRlcyB0aGF0IHRoZSBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhl IHNwZWNpZmllZCBzZXBhcmF0b3IgaXMgdXNlZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4K KyAqLS0tLS0tCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5D VElPTl9BUkdTKQoreworCXRleHQJICAgKmpzb24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNo YXIJICAgKmpzb25fc3RyOworCisJanNvbl9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcoanNvbik7CisK KwlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChkZXBhcnNlX2RkbF9qc29uX3RvX3N0 cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9y IEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGlj aCBlbGVtZW50IHdlJ3JlIGV4cGFuZGluZywgaWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZv aWQKK2ZtdHN0cl9lcnJvcl9jYWxsYmFjayh2b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hp bGUgZXhwYW5kaW5nIGZvcm1hdCBzdHJpbmcgXCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBiMzgwZTM5Li4xOTI4ZTU5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0xODU2LDYgKzE4NTYsNyBAQCBwZ19l dmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2FzZSBTQ1Rf Q3JlYXRlT3BDbGFzczoKIAkJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CiAJCQljYXNlIFNDVF9T ZWN1cml0eUxhYmVsOgorCQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKIAkJCQl7CiAJCQkJCWNo YXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAtMTg3NSw2ICsxODc2LDgg QEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCQkJ CWFkZHIgPSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9 PSBTQ1RfU2VjdXJpdHlMYWJlbCkKIAkJCQkJCWFkZHIgPSBjbWQtPmQuc2VjbGFiZWwuYWRkcmVz czsKKwkJCQkJZWxzZSBpZiAoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKQorCQkJCQkJ YWRkciA9IGNtZC0+ZC5jdGFzLmFkZHJlc3M7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgYW4gb2Jq ZWN0IHdhcyBkcm9wcGVkIGluIHRoZSBzYW1lIGNvbW1hbmQgd2UgbWF5IGVuZApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9tZXNvbi5idWlsZAppbmRleCA0MmNjZWQ5Li4yODQ0ZDM2IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNv bi5idWlsZApAQCAtMTcsNiArMTcsOCBAQCBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdj b3B5dG8uYycsCiAgICdjcmVhdGVhcy5jJywKICAgJ2RiY29tbWFuZHMuYycsCisgICdkZGxfZGVw YXJzZS5jJywKKyAgJ2RkbF9qc29uLmMnLAogICAnZGVmaW5lLmMnLAogICAnZGlzY2FyZC5jJywK ICAgJ2Ryb3BjbWRzLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNTA1NTk1Ni4uZTA0 ZGU1MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTkzOSw0ICsxMTkzOSwxMSBAQAog ICBwcm9uYW1lID0+ICdhbnlfdmFsdWVfdHJhbnNmbicsIHByb3JldHR5cGUgPT4gJ2FueWVsZW1l bnQnLAogICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCBhbnllbGVtZW50JywgcHJvc3JjID0+ ICdhbnlfdmFsdWVfdHJhbnNmbicgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGVw YXJzZSB0aGUgRERMIGNvbW1hbmQgaW50byBhIEpTT04gZm9ybWF0IHN0cmluZycsCisgIHByb25h bWUgPT4gJ2RkbF9kZXBhcnNlX3RvX2pzb24nLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywKKyAgcHJv YXJndHlwZXMgPT4gJ3BnX2RkbF9jb21tYW5kJywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV90b19q c29uJyB9LAoreyBvaWQgPT4gJzQ2NDMnLCBkZXNjciA9PiAnZXhwYW5kIEpTT04gZm9ybWF0IERE TCB0byBhIHBsYWluIHRleHQgRERMIGNvbW1hbmQnLAorICBwcm9uYW1lID0+ICdkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9 PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCisKIF0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCBmN2Q3ZjEwLi4xMDk4NzFlIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFy c2Vub2Rlcy5oCkBAIC0yMDYwLDYgKzIwNjAsNyBAQCB0eXBlZGVmIHN0cnVjdCBBbHRlclRhYmxl U3RtdAogCUxpc3QJICAgKmNtZHM7CQkJLyogbGlzdCBvZiBzdWJjb21tYW5kcyAqLwogCU9iamVj dFR5cGUJb2JqdHlwZTsJCS8qIHR5cGUgb2Ygb2JqZWN0ICovCiAJYm9vbAkJbWlzc2luZ19vazsJ CS8qIHNraXAgZXJyb3IgaWYgdGFibGUgbWlzc2luZyAqLworCWJvb2wgICAgICAgIHRhYmxlX2xp a2U7CQkvKiBpbnRlcm5hbGx5IGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlICovCiB9IEFs dGVyVGFibGVTdG10OwogCiB0eXBlZGVmIGVudW0gQWx0ZXJUYWJsZVR5cGUKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2Rl cGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI3MDJjCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0wLDAgKzEs MjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmgKKyAqCisgKiBQ b3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0 aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNvcC9kZGxf ZGVwYXJzZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFUEFS U0VfSAorI2RlZmluZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRp bGl0eS5oIgorCitleHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVk Q29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4gY2hhciAqZGVwYXJzZV9k ZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZHJv cF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBl LAorCQkJCQkJCQkgIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisKKyNlbmRpZgkJCQkJCQkvKiBE RExfREVQQVJTRV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRp bGl0eS5oIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBhMWUwNmRh Li45ZTI2MmQ3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5o CisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTMwLDcgKzMwLDgg QEAgdHlwZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyRGVmYXVsdFBy aXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCiAJU0NUX0FsdGVyVFNDb25maWcsCi0JU0NU X1NlY3VyaXR5TGFiZWwKKwlTQ1RfU2VjdXJpdHlMYWJlbCwKKwlTQ1RfQ3JlYXRlVGFibGVBcwog fSBDb2xsZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTQwLDYgKzQxLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgQ29sbGVjdGVkQVRTdWJjbWQKIHsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CQkvKiBh ZmZlY3RlZCBjb2x1bW4sIGNvbnN0cmFpbnQsIGluZGV4LCAuLi4gKi8KIAlOb2RlCSAgICpwYXJz ZXRyZWU7CisJY2hhcgkgICAqdXNpbmdleHByOwogfSBDb2xsZWN0ZWRBVFN1YmNtZDsKIAogdHlw ZWRlZiBzdHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZApAQCAtMTA4LDYgKzExMCwxMyBAQCB0eXBlZGVm IHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CiAJCQlj aGFyCQkgKnByb3ZpZGVyOwogCQl9CQkJc2VjbGFiZWw7CisKKwkJLyogQ1JFQVRFIFRBQkxFIEFT ICovCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkg KnJlYWxfY3JlYXRlOworCQl9CQkJY3RhczsKIAl9CQkJZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRD b21tYW5kICpwYXJlbnQ7CS8qIHdoZW4gbmVzdGVkICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDQyODY4OWEuLjRhMzE4MTggMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0x NjIyLDYgKzE2MjIsOSBAQCBPU0luZm8KIE9TU0xDaXBoZXIKIE9TU0xEaWdlc3QKIE9WRVJMQVBQ RUQKK09iakVsZW0KK09ialRyZWUKK09ialR5cGUKIE9iamVjdEFjY2Vzc0Ryb3AKIE9iamVjdEFj Y2Vzc05hbWVzcGFjZVNlYXJjaAogT2JqZWN0QWNjZXNzUG9zdEFsdGVyCkBAIC0zMTk4LDYgKzMy MDEsNyBAQCBjb21wYXJlX2NvbnRleHQKIGNvbmZpZ192YXJfdmFsdWUKIGNvbnRhaW5fYWdnc19v Zl9sZXZlbF9jb250ZXh0CiBjb252ZXJ0X3Rlc3RleHByX2NvbnRleHQKK2NvbnZTcGVjaWZpZXIK IGNvcHlfZGF0YV9kZXN0X2NiCiBjb3B5X2RhdGFfc291cmNlX2NiCiBjb3JlX1lZU1RZUEUKLS0g CjEuOC4zLjEKCg== --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Disposition: attachment; filename="v75-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kco2 RnJvbSBkNGQzM2YyNGJiNTgwMzg4MDkxYTU5ZTgwYjBiYzI2ZDQ1YmIyMDkyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzowNDo1MiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDMvOF0gU3VwcG9ydCBEREwgZGVwYXJzZSBvZiB0aGUgcmVzdCBjb21tYW5kcy4KCiAgICBD UkVBVEUvRFJPUCBBQ0NFU1MgTUVUSE9ECiAgICBDUkVBVEUvQUxURVIvRFJPUCBBR0dSRUdBVEUK ICAgIENSRUFURS9BTFRFUi9EUk9QIENBU1QKICAgIENSRUFURS9BTFRFUi9EUk9QIENPTExBVElP TgogICAgQ09NTUVOVAogICAgQ1JFQVRFL0FMVEVSL0RST1AgQ09OVkVSU0lPTgogICAgQUxURVIg REVGQVVMVCBQUklWSUxFR0VTCiAgICBDUkVBVEUvQUxURVIvRFJPUCBET01BSU4KICAgIENSRUFU RS9BTFRFUi9EUk9QIEVYVEVOU0lPTgogICAgQ1JFQVRFL0FMVEVSL0RST1AgRk9SRUlHTiBEQVRB IFdSQVBQRVIKICAgIENSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gVEFCTEUKICAgIENSRUFURS9B TFRFUiBGVU5DVElPTi9QUk9DRURVUkUKICAgIEdSQU5UCiAgICBDUkVBVEUvRFJPUCBJTkRFWAog ICAgQ1JFQVRFL0FMVEVSL0RST1AgTEFOR1VBR0UKICAgIENSRUFURS9BTFRFUi9EUk9QIE1BVEVS SUFMSVpFRCBWSUVXCiAgICBDUkVBVEUvRFJPUCBPUEVSQVRPUiBbQ0xBU1MvRkFNSUxZXQogICAg Q1JFQVRFL0FMVEVSL0RST1AgUFVCTElDQVRJT04KICAgIENSRUFURS9BTFRFUi9EUk9QIFBPTElD WQogICAgUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVwogICAgUkVWT0tFCiAgICBBTFRFUi9EUk9Q IFJPVVRJTkUKICAgIENSRUFURS9BTFRFUi9EUk9QIFJVTEUKICAgIENSRUFURS9BTFRFUi9EUk9Q IFNDSEVNQQogICAgU0VDVVJJVFkgTEFCRUwKICAgIENSRUFURS9BTFRFUi9EUk9QIFNFUVVFTkNF CiAgICBDUkVBVEUvQUxURVIvRFJPUCBTRVJWRVIKICAgIENSRUFURS9BTFRFUi9EUk9QIFNUQVRJ U1RJQ1MKICAgIENSRUFURS9BTFRFUi9EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFS U0VSL0RJQ1RJT05BUlkvVEVNUExBVEUKICAgIENSRUFURS9EUk9QIFRSQU5TRk9STQogICAgQ1JF QVRFL0FMVEVSIFRSSUdHRVIKICAgIENSRUFURS9BTFRFUi9EUk9QIFRZUEUKICAgIENSRUFURS9B TFRFUi9EUk9QIFVTRVIgTUFQUElORwogICAgQ1JFQVRFL0FMVEVSL0RST1AgVklFVyAtLSBOb3Rl ICM0CgooTm90ZSAjMykgUmVtb3ZlZCBhbiB1bmRlc2lyYWJsZSAnb24nIGZyb20gdGhlIGlkZW50 aXR5IHN0cmluZyBmb3IgVFJBTlNGT1JNCmluIGdldE9iamVjdElkZW50aXR5UGFydHMuIFRoaXMg aXMgbmVlZGVkIHRvIG1ha2UgZGVwYXJzZSBvZiBEUk9QClRSQU5TRk9STSBjb21tYW5kIHdvcmsg c2luY2UgJ29uJyBpcyBub3QgcHJlc2VudCBpbiB0aGUgY3VycmVudApEUk9QIFRSQU5TRk9STSBz eW50YXguIEZvciBleGFtcGxlLCB0aGUgY29ycmVjdCBzeW50YXggaXMKRFJPUCBUUkFOU0ZPUk0g dHJmIEZPUiBJTlQgTEFOR1VBR0UgU1FMOwppbnN0ZWFkIG9mIERST1AgVFJBTlNGT1JNIHRyZiBG T1IgSU5UIE9OIExBTkdVQUdFIFNRTDsKCihOb3RlICM0KSBGb3IgVklFV1NUTVQsIHdlIGNyZWF0 ZWQgcGdfZ2V0X3ZpZXdkZWZfaW50ZXJuYWwgdG8gZ2V0IHRoZQpTRUxFQ1QgcXVlcnkgb2YgdGhl IHBlbmRpbmcgVklFV1NUTVQuIEluIHRoZSBjYXNlIHRoYXQgdGhlIENSRUFURSBWSUVXIGNvbW1h bmQKaXMgc3RpbGwgaW4gcHJvZ3Jlc3MsIHdlIHdvdWxkIG5lZWQgdG8gc2VhcmNoIHRoZSBzeXN0 ZW0gY2FjaGUgUlVMRVJFTE5BTUUgdG8gZ2V0IHRoZQpyZXdyaXRlIHJ1bGUgb2YgdGhlIHZpZXcg YXMgb3Bwb3NlIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUgYXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29y a2VyKCksCnRoZSBsYXR0ZXIgd2lsbCByZXR1cm4gZW1wdHkgcmVzdWx0LgotLS0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgfCA2NjU0ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oICAgICB8ICAgMTIg KwogMiBmaWxlcyBjaGFuZ2VkLCA2NjA2IGluc2VydGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCmluZGV4IGEzZjYyMzMuLjJiOWViNGUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtNTgsNiArNTgsOCBAQAogI2luY2x1ZGUgImNh dGFsb2cvcGdfb3BmYW1pbHkuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3BvbGljeS5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRp b25fcmVsLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3JhbmdlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19yZXdy aXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgpAQCAtNzAsNiArNzIsNyBA QAogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdXNl cl9tYXBwaW5nLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29t bWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIK ICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAiZm9yZWlnbi9mb3Jl aWduLmgiCkBAIC0xNTEsNiArMTU0LDcgQEAgYm9vbAkJdmVyYm9zZSA9IHRydWU7CiAKIHN0YXRp YyB2b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwg TGlzdCAqYXJyYXkpOwogc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRy ZWUsIGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX2Zsb2F0 X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpOwogc3Rh dGljIHZvaWQgYXBwZW5kX251bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQp Owogc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAq c3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUpOwogc3RhdGljIGNoYXIgKmFwcGVuZF9vYmplY3RfdG9f Zm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsKQEAgLTE2MCwxMCAr MTY0LDE0IEBAIHN0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdfb2JqZWN0KE9ialRyZWUgKnRyZWUs IGNoYXIgKnN1Yl9mbXQsIGNoYXIgKm5hbWUsCiBzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRh aWxlZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QsCiAJCQkJCQkJCSBPaWQgKm5zcGlkLCBj aGFyICoqdHlwbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCiAJCQkJCQkJCSBib29sICp0eXBhcnJh eSk7CitzdGF0aWMgTGlzdCAqRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0 cyk7CiBzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUp Owogc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJ ZCwgT2lkIG9iamVjdElkKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3Jfcm9sZXNw ZWMoUm9sZVNwZWMgKnNwZWMpOwogc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9i alRyZWUgKnZhbHVlKTsKIHN0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQs IGludCBudW1vYmpzLC4uLik7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWUoY2hhciAqZm10 KTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7CiBzdGF0 aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQ YXJzZVN0YXRlICpzdGF0ZSk7CiBzdGF0aWMgdm9pZCBwZ19nZXRfaW5kZXhkZWZfZGV0YWlsZWQo T2lkIGluZGV4cmVsaWQsCiAJCQkJCQkJCQkgY2hhciAqKmluZGV4X2FtLApAQCAtMTc4LDggKzE4 NiwxOCBAQCBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRp b24sIExpc3QgKmRwY29udGV4dCwgYm9vbCBjb21wbwogCQkJCQkJCQkgIENvbHVtbkRlZiAqY29s ZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMpOwogc3RhdGljIE9ialRyZWUgKmRlcGFy c2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVy X3RhYmxlKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJU YWJsZUNtZCAqc3ViY21kKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfQWdn cmVnYXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZmluZVN0bXRfQ29sbGF0aW9uKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAq ZGVmaW5lLAorCQkJCQkJCQkJCQkgT2JqZWN0QWRkcmVzcyBmcm9tQ29sbGlkKTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVT dG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKE9p ZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNl X0RlZmluZVN0bXRfVFNDb25maWcoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsIE9i amVjdEFkZHJlc3MgY29waWVkKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRf VFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpOworc3RhdGljIE9ialRy ZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkoT2lkIG9iamVjdElkLCBEZWZpbmVT dG10ICpkZWZpbmUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBs YXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKIAogc3RhdGljIE9ialRyZWUg KmRlcGFyc2VfRGVmRWxlbShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KTsKK3N0YXRpYyBP YmpUcmVlICpkZXBhcnNlX0Z1bmN0aW9uU2V0KFZhcmlhYmxlU2V0S2luZCBraW5kLCBjaGFyICpu YW1lLCBjaGFyICp2YWx1ZSk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9PbkNvbW1pdENsYXVz ZShPbkNvbW1pdEFjdGlvbiBvcHRpb24pOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfUmVsU2V0 T3B0aW9ucyhBbHRlclRhYmxlQ21kICpzdWJjbWQpOwogCkBAIC0xODgsNiArMjA2LDcgQEAgc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGEKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFf SW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsK IHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWludmFsdWUoRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAq ZGVwYXJzZV9TZXFfTWF4dmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVy X3RhYmxlKTsKK3N0YXRpYyBPYmpFbGVtICpkZXBhcnNlX1NlcV9Pd25lZEJ5KE9pZCBzZXF1ZW5j ZUlkLCBib29sIGFsdGVyX3RhYmxlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9T ZXFfUmVzdGFydChpbnQ2NCBsYXN0X3ZhbHVlKTsKIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVw YXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVs ZW0pOwpAQCAtMjAzLDYgKzIyMiw4IEBAIHN0YXRpYyBMaXN0ICpkZXBhcnNlX0luaFJlbGF0aW9u cyhPaWQgb2JqZWN0SWQpOwogc3RhdGljIExpc3QgKmRlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxh dGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAogCQkJ CQkJCQkgICBib29sIHR5cGVkLCBib29sIGNvbXBvc2l0ZSk7CiAKK3N0YXRpYyBjaGFyICpEb21h aW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXAsIGJvb2wgbWlzc2luZ19vayk7CisKIC8qCiAg KiBBcHBlbmQgcHJlc2VudCBhcyBmYWxzZSB0byBhIHRyZWUuCiAgKi8KQEAgLTIxMyw2ICsyMzQs NDIgQEAgYXBwZW5kX25vdF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCiB9CiAKIC8qCisgKiBBcHBl bmQgYW4gaW50MzIgcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVu ZF9pbnRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGludDMyIHZhbHVlKQor eworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0 KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJp bmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUludGVnZXIs IG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1h ZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFwcGVuZCBhIGZsb2F0OCBwYXJh bWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zsb2F0X29iamVjdChP YmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFsdWUpCit7CisJT2JqRWxlbSAg ICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisK KwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJf Zm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxvYXQsIG9iamVjdF9uYW1lKTsK KwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUs IHBhcmFtKTsKK30KKworLyoKICAqIEFwcGVuZCBhbiBhcnJheSBwYXJhbWV0ZXIgdG8gYSB0cmVl LgogICovCiBzdGF0aWMgdm9pZApAQCAtNDIyLDYgKzQ3OSwzNCBAQCBhcHBlbmRfc3RyaW5nX29i amVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICogb2JqZWN0X25hbWUsCiB9 CiAKIC8qCisgKiBBcHBlbmQgYSBOVUxMLW9yLXF1b3RlZC1saXRlcmFsIGNsYXVzZS4gIFVzZWZ1 bCBmb3IgQ09NTUVOVCBhbmQgU0VDVVJJVFkKKyAqIExBQkVMLgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiAle251bGx9cyAle2xpdGVyYWx9cworICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2xp dGVyYWxfb3JfbnVsbChPYmpUcmVlICpwYXJlbnQsIGNoYXIgKmVsZW1uYW1lLCBjaGFyICp2YWx1 ZSkKK3sKKwlPYmpUcmVlICAgICp0b3A7CisJT2JqVHJlZSAgICAqcGFydDsKKworCXRvcCA9IG5l d19vYmp0cmVlKCIiKTsKKwlwYXJ0ID0gbmV3X29ianRyZWVfVkEoIk5VTEwiLCAxLAorCQkJCQkJ ICAicHJlc2VudCIsIE9ialR5cGVCb29sLCAhdmFsdWUpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRvcCwgIiV7bnVsbH1zIiwgcGFydCk7CisKKwlwYXJ0ID0gbmV3X29ianRyZWVfVkEoIiIsIDEs CisJCQkJCQkgICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIHZhbHVlICE9IE5VTEwpOworCisJaWYg KHZhbHVlKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChwYXJ0LCAiJXt2YWx1ZX1MIiwgInZhbHVl IiwgdmFsdWUpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRvcCwgIiV7bGl0ZXJhbH1zIiwgcGFy dCk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChwYXJlbnQsIGVsZW1uYW1lLCB0b3ApOworfQor CisvKgogICogU2ltaWxhciB0byBmb3JtYXRfdHlwZV9leHRlbmRlZCwgZXhjZXB0IHdlIHJldHVy biBlYWNoIGJpdCBvZiBpbmZvcm1hdGlvbgogICogc2VwYXJhdGVseToKICAqCkBAIC01MjQsNiAr NjA5LDMxIEBAIGZvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1v ZCwKIH0KIAogLyoKKyAqIFJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgYXJndW1lbnRzIHRv IGEgZnVuY3Rpb24sIGFzIGEgbGlzdCBvZgorICogZGVwYXJzZWQgZXhwcmVzc2lvbnMuCisgKi8K K3N0YXRpYyBMaXN0ICoKK0Z1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMp Cit7CisJTGlzdAkgICAqbm9kZWRlZnM7CisJTGlzdAkgICAqc3RyZGVmcyA9IE5JTDsKKwlMaXN0 Q2VsbCAgICpjZWxsOworCisJbm9kZWRlZnMgPSAoTGlzdCAqKSBzdHJpbmdUb05vZGUodGV4dF90 b19jc3RyaW5nKHByb2FyZ2RlZmF1bHRzKSk7CisJaWYgKCFJc0Eobm9kZWRlZnMsIExpc3QpKQor CQllbG9nKEVSUk9SLCAicHJvYXJnZGVmYXVsdHMgaXMgbm90IGEgbGlzdCIpOworCisJZm9yZWFj aChjZWxsLCBub2RlZGVmcykKKwl7CisJCU5vZGUJICAgKm9uZWRlZiA9IGxmaXJzdChjZWxsKTsK KworCQlzdHJkZWZzID0gbGFwcGVuZChzdHJkZWZzLCBkZXBhcnNlX2V4cHJlc3Npb24ob25lZGVm LCBOSUwsIGZhbHNlLCBmYWxzZSkpOworCX0KKworCXJldHVybiBzdHJkZWZzOworfQorCisvKgog ICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJ U1RFTkNFIHZhbHVlLgogICovCiBzdGF0aWMgY2hhciAqCkBAIC03MTMsNiArODIzLDU3IEBAIG5l d19vYmp0cmVlX2Zvcl90eXBlKE9pZCB0eXBlSWQsIGludDMyIHR5cG1vZCkKIH0KIAogLyoKKyAq IEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVjaWZpZWQgYnkg Um9sZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMgUk9MRVNQRUNfQ1VSUkVO VF9VU0VSIGFyZSBleHBhbmRlZCB0byB0aGVpciBmaW5hbAorICogbmFtZXMuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAqc3BlYykKK3sK KwljaGFyCSAgICpyb2xldHlwZTsKKworCWlmIChzcGVjLT5yb2xldHlwZSAhPSBST0xFU1BFQ19Q VUJMSUMpCisJCXJvbGV0eXBlID0gZ2V0X3JvbGVzcGVjX25hbWUoc3BlYyk7CisJZWxzZQorCQly b2xldHlwZSA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKE5VTEwsIDIs CisJCQkJCQkgICJpc19wdWJsaWMiLCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5cGUgPT0gUk9M RVNQRUNfUFVCTElDLAorCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCByb2xldHlw ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3RzLCB3aXRoIHJv bGUgc3BlY2lmaWVkIGJ5IE9JRC4gKEFDTF9JRF9QVUJMSUMKKyAqIG1lYW5zIHRvIHVzZSAicHVi bGljIikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKE9p ZCByb2xlb2lkKQoreworCU9ialRyZWUgICAgKnJvbGU7CisKKwlpZiAocm9sZW9pZCAhPSBBQ0xf SURfUFVCTElDKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZV9uYW1l OworCisJCXJvbHR1cCA9IFNlYXJjaFN5c0NhY2hlMShBVVRIT0lELCBPYmplY3RJZEdldERhdHVt KHJvbGVvaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJvbHR1cCkpCisJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igcm9sZSB3aXRoIE9JRCAldSIsIHJvbGVvaWQp OworCisJCXJvbGVfbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNUKHJv bHR1cCkpLT5yb2xuYW1lKTsKKwkJcm9sZSA9IG5ld19vYmp0cmVlX1ZBKCIle3JvbGVuYW1lfUki LCAxLAorCQkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChyb2xlX25h bWUpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVwKTsKKwl9CisJZWxzZQorCQlyb2xlID0g bmV3X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9SSIsIDEsCisJCQkJCQkJICAicm9sZW5hbWUiLCBP YmpUeXBlU3RyaW5nLCAicHVibGljIik7CisKKwlyZXR1cm4gcm9sZTsKK30KKworLyoKICAqIEFs bG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFy YXJncyB2ZXJzaW9uLgogICoKICAqIFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVu ZCBhcyBhICJmbXQiIGVsZW1lbnQgaW4gdGhlIG91dHB1dCBibG9iLgpAQCAtNzkwLDYgKzk1MSwy MiBAQCBuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKIH0KIAogLyoK KyAqIEFsbG9jYXRlIGEgbmV3IHN0cmluZyBvYmplY3QuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoK K25ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOwor CisJQXNzZXJ0KHZhbHVlKTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlU3RyaW5nLCBO VUxMKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9 CisKKy8qCiAgKiBQcm9jZXNzIHRoZSBwcmUtYnVpbHQgZm9ybWF0IHN0cmluZyBmcm9tIHRoZSBP YmpUcmVlIGludG8gdGhlIG91dHB1dCBwYXJzZQogICogc3RhdGUuCiAgKi8KQEAgLTE5MjUsNiAr MjEwMiw4MyBAQCBkZXBhcnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpCiB9CiAKIC8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBPV05F RCBCWSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPV05FRCBCWSAle293bmVy fUQKKyAqLworc3RhdGljIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfT3duZWRCeShPaWQgc2VxdWVu Y2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCVJl bGF0aW9uCWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNbM107 CisJSGVhcFR1cGxlCXR1cGxlOworCisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxhdGlv bklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFudW1f cGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAor CQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUluaXQo JmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOworCVNj YW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJCUJU RXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7CisK KwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRleElk LCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFs aWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJCW93bmVySWQ7 CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisJCWNo YXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNU KHR1cGxlKTsKKworCQkvKiBPbmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2Ns YXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNv bnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQp CisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250 aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRf YXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29s bmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBlbmRfc3Ry aW5nX29iamVjdCh0bXBfb2JqLCAiYXR0cm5hbWUiLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsKKwkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDIsCisJCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCSAib3duZXIiLCBPYmpUeXBl T2JqZWN0LCB0bXBfb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJlbGF0 aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhlcmUn cyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0IHVw IHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIXJldCkK KwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDMsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAib3duZWQiLAorCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJCQkg InByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KHJldCk7Cit9CisKKy8qCiAgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9wdGlv bi4KICAqCiAgKiBWZXJib3NlIHN5bnRheApAQCAtMjU4Niw3ICsyODQwLDcgQEAgZGVwYXJzZV9B bHRlclJlbGF0aW9uKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAogCUFzc2VydChjbWQtPnR5cGUg PT0gU0NUX0FsdGVyVGFibGUpOwogCXN0bXQgPSAoQWx0ZXJUYWJsZVN0bXQgKikgY21kLT5wYXJz ZXRyZWU7Ci0JQXNzZXJ0KElzQShzdG10LCBBbHRlclRhYmxlU3RtdCkpOworCUFzc2VydChJc0Eo c3RtdCwgQWx0ZXJUYWJsZVN0bXQpIHx8IElzQShzdG10LCBWaWV3U3RtdCkpOwogCiAJLyoKIAkg KiBBTFRFUiBUQUJMRSBzdWJjb21tYW5kcyBnZW5lcmF0ZWQgZm9yIFRhYmxlTGlrZUNsYXVzZSBp cyBwcm9jZXNzZWQgaW4KQEAgLTM0NjcsOTcgKzM3MjEsNjM3NyBAQCBkZXBhcnNlX2Ryb3BfY29t bWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwKIH0K IAogLyoKLSAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICogRGVwYXJz ZSBhbiBBbHRlckNvbGxhdGlvblN0bXQgKEFMVEVSIENPTExBVElPTikKICAqCi0gKiBUaGlzIGZ1 bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNs b3cuCisgKiBHaXZlbiBhIGNvbGxhdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheDoKKyAqIEFMVEVSIENPTExBVElPTiAle2lkZW50 aXR5fU8gUkVGUkVTSCBWRVJTSU9OCiAgKi8KIHN0YXRpYyBPYmpUcmVlICoKLWRlcGFyc2Vfc2lt cGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorZGVwYXJzZV9BbHRlckNvbGxhdGlv bihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKIHsKLQlPaWQJCQlvYmplY3RJZDsKLQlO b2RlCSAgICpwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQljb2xUdXA7 CisJRm9ybV9wZ19jb2xsYXRpb24gY29sRm9ybTsKIAotCUFzc2VydChjbWQtPnR5cGUgPT0gU0NU X1NpbXBsZSk7CisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29sVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QoY29s VHVwKTsKIAotCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOwotCW9iamVjdElkID0gY21kLT5k LnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBD T0xMQVRJT04gJXtpZGVudGl0eX1PIFJFRlJFU0ggVkVSU0lPTiIsIDEsCisJCQkJCQkgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoY29s Rm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5jb2xs bmFtZSkpKTsKIAotCWlmIChjbWQtPmluX2V4dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUp ICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCi0JCXJldHVybiBOVUxMOworCVJlbGVhc2VTeXND YWNoZShjb2xUdXApOwogCi0JLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhp bmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLwotCXN3aXRjaCAobm9kZVRhZyhwYXJz ZXRyZWUpKQotCXsKLQkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCXJldHVybiByZXQ7Cit9CiAKLQkJ Y2FzZSBUX0NyZWF0ZVN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGluZyBvZiBGdW5jdGlv bgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNFVCBBTEwKKyAqIE9SCisgKiBTRVQgJXtz ZXRfbmFtZX1JIFRPICV7c2V0X3ZhbHVlfXMKKyAqIE9SCisgKiBSRVNFVCAle3NldF9uYW1lfUkK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtp bmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAgICAqcmV0Owog Ci0JCWNhc2UgVF9JbmRleFN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9JbmRleFN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwkJcmV0ID0gbmV3 X29ianRyZWUoIlJFU0VUIEFMTCIpOworCWVsc2UgaWYgKGtpbmQgPT0gVkFSX1NFVF9WQUxVRSkK Kwl7CisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJCQkJ CQkgInNldF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZSk7CiAKLQkJZGVmYXVsdDoKLQkJCWVs b2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwK LQkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwkJLyoKKwkJICogU29tZSBHVUMgdmFy aWFibGUgbmFtZXMgYXJlICdMSVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkgKiBx dW90ZWQuCisJCSAqLworCQlpZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkgJiBH VUNfTElTVF9RVU9URSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7c2V0X3Zh bHVlfXMiLCAic2V0X3ZhbHVlIiwgdmFsdWUpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZXQsICJUTyAle3NldF92YWx1ZX1MIiwgInNldF92YWx1ZSIsIHZhbHVlKTsKIAl9CisJ ZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJ CQkJCQkgInNldF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZSk7CiAKLQlyZXR1cm4gTlVMTDsK KwlyZXR1cm4gcmV0OwogfQogCiAvKgotICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0 ZWRDb21tYW5kLgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVOQ1RJ T04vUk9VVElORS9QUk9DRURVUkUpCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRo ZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheDoKKyAqIEFM VEVSIEZVTkNUSU9OL1JPVVRJTkUvUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0aW9u OiB9cwogICovCi1jaGFyICoKLWRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1h bmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Fs dGVyRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCiB7Ci0JT3ZlcnJpZGVT ZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7Ci0JTWVtb3J5Q29udGV4dCBvbGRjeHQ7Ci0JTWVtb3J5 Q29udGV4dCB0bXBjeHQ7Ci0JT2JqVHJlZSAgICAqdHJlZTsKLQljaGFyCSAgICpjb21tYW5kID0g TlVMTDsKLQlTdHJpbmdJbmZvRGF0YSBzdHI7CisJQWx0ZXJGdW5jdGlvblN0bXQgKm5vZGUgPSAo QWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpU cmVlICAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9jRm9y bTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlz dENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICov CisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJcHJvY0Zvcm0gPSAo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwlpZiAocHJvY0Zvcm0tPnByb2tp bmQgPT0gUFJPS0lORF9QUk9DRURVUkUpCisJCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBQUk9D RURVUkUiKTsKKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVlKG5vZGUtPm9ianR5cGUgPT0gT0JK RUNUX1JPVVRJTkUgPworCQkJCQkJICAiQUxURVIgUk9VVElORSIgOiAiQUxURVIgRlVOQ1RJT04i KTsKIAogCS8qCi0JICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcg cm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKLQkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3By aW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlLCBidXQKLQkgKiBhbGxvY2F0ZSB0 aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4KKwkgKiBBTFRFUiBGVU5DVElP TiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZyB0byBnZXQK KwkgKiBpbnB1dCB0eXBlIE9pZHMuCiAJICovCi0JaW5pdFN0cmluZ0luZm8oJnN0cik7Ci0JdG1w Y3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAotCQkJCQkJ CQkgICAiZGVwYXJzZSBjdHgiLAotCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJWkUs Ci0JCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCi0JCQkJCQkJCSAgIEFMTE9D U0VUX0RFRkFVTFRfTUFYU0laRSk7Ci0Jb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHRt cGN4dCk7CisJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJ T2JqVHJlZSAgICAqdG1wX29iajsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlw ZX1UIiwgMSwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2Jq dHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQlw YXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0K KworCXNpZ24gPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1z KSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJ CQkJCQkgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICIle3NpZ25hdHVyZX1zIiwgc2lnbik7CisKKwlmb3JlYWNoKGNlbGws IG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxm aXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wX29iaiA9IE5VTEw7CisKKwkJaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgInZvbGF0aWxpdHkiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlKHN0clZhbChkZWZlbC0+YXJnKSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVm bmFtZSwgInN0cmljdCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9vbFZhbChk ZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJ CQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBVVCIpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwt PmRlZm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9v bFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJ VFkgSU5WT0tFUiIpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJsZWFrcHJv b2YiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykg PworCQkJCQkJCQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIpOworCQllbHNlIGlmIChz dHJjbXAoZGVmZWwtPmRlZm5hbWUsICJjb3N0IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVGbG9h dCwKKwkJCQkJCQkJCWRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRl ZmVsLT5kZWZuYW1lLCAicm93cyIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZSgiUk9XUyIpOworCQkJaWYgKGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBwZW5k X25vdF9wcmVzZW50KHRtcF9vYmopOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmplY3Qo dG1wX29iaiwgIiV7cm93c31uIiwKKwkJCQkJCQkJCWRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJ fQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7CisJ CQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+YXJn OworCQkJY2hhcgkgICAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsKKwor CQkJdG1wX29iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1l LCB2YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3VwcG9y dCIpID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBfb2JqID0gbmV3 X29ianRyZWUoIlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsK KworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3Mg bmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBj dXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lE OworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7bmFtZX1zIiwgIm5hbWUiLAor CQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwgMSwK KwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5VTEws CisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21w KGRlZmVsLT5kZWZuYW1lLCAicGFyYWxsZWwiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJQQVJBTExFTCAle3ZhbHVlfXMiLCAxLAorCQkJCQkJCQkJInZhbHVlIiwgT2JqVHlw ZVN0cmluZywgc3RyVmFsKGRlZmVsLT5hcmcpKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxlbXMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9iamVj dFNjaGVtYVN0bXQgKEFMVEVSIC4uLiBTRVQgU0NIRU1BIGNvbW1hbmQpCisgKgorICogR2l2ZW4g dGhlIG9iamVjdCBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJl dHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVzICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1BICV7 bmV3c2NoZW1hfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNj aGVtYVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJ ICBPYmplY3RBZGRyZXNzIG9sZF9zY2hlbWEpCit7CisJQWx0ZXJPYmplY3RTY2hlbWFTdG10ICpu b2RlID0gKEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJY2hhcgkgICAqaWRl bnRpdHk7CisJY2hhcgkgICAqbmV3X3NjaGVtYSA9IG5vZGUtPm5ld3NjaGVtYTsKKwljaGFyCSAg ICpvbGRfc2NobmFtZTsKKwljaGFyCSAgICppZGVudDsKIAogCS8qCi0JICogTWFueSByb3V0aW5l cyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9uYWxp dHkKLQkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJbiBz dWNoIHJlc3VsdHMsIHdlIHdhbnQKLQkgKiBhbGwgb2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxpZmll ZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiIHRvCi0JICogZW52aXJvbm1lbnRzIHdp dGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0Ci0J ICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBwYXRo IGFsbCBvdmVyIHRoZQotCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVyZS4KKwkgKiBT aW5jZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2ludCBv ZiB2aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhlIG9i amVjdCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBvdXRw dXQgb2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hlbWEg bmFtZSwgaG93ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVudGl0 eQorCSAqIHN0cmluZyBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUuCisJ ICoKKwkgKiBYWFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPwogCSAq LwotCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29u dGV4dCk7Ci0Jb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOwotCW92ZXJyaWRlUGF0aC0+YWRk Q2F0YWxvZyA9IGZhbHNlOwotCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7Ci0JUHVzaE92 ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRl bnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRfc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFt ZShvbGRfc2NoZW1hLm9iamVjdElkKTsKKwlpZiAoIW9sZF9zY2huYW1lKQorCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lEICV1IiwKKwkJCSBvbGRf c2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVu dGlmaWVyKG9sZF9zY2huYW1lKSwKKwkJCQkJIGlkZW50aXR5ICsgc3RybGVuKHF1b3RlX2lkZW50 aWZpZXIobmV3X3NjaGVtYSkpKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtv Ymp0eXBlfXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIDMsCisJCQkJ CQkgICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUo bm9kZS0+b2JqZWN0VHlwZSwgZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLCBpZGVudCwKKwkJCQkJCSAgIm5ld3NjaGVtYSIsIE9ialR5cGVTdHJpbmcsIG5ld19zY2hl bWEpOworfQogCi0JdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKy8qCisgKiBEZXBhcnNlIGEgR1JB TlQvUkVWT0tFIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEdSQU5UICV7cHJp dmlsZWdlczosIH1zIE9OIiAle29ianR5cGV9cyAle3ByaXZ0YXJnZXQ6LCB9cyBUTyAle2dyYW50 ZWVzOiwgfXMKKyAqICV7Z3JhbnRfb3B0aW9ufXMgR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMKKyAq IAkJT1IKKyAqIFJFVk9LRSAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtwcml2 dGFyZ2V0OiwgfXMKKyAqIEZST00gJXtncmFudGVlczosIH1zICV7Z3JhbnRfb3B0aW9ufXMgJXtj YXNjYWRlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9HcmFudFN0bXQoQ29sbGVj dGVkQ29tbWFuZCAqY21kKQoreworCUludGVybmFsR3JhbnQgKmlzdG10OworCU9ialRyZWUgICAg KnJldDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lkCQkJ Y2xhc3NJZDsKKwlPYmpUcmVlICAgICp0bXA7CiAKLQlzd2l0Y2ggKGNtZC0+dHlwZSkKLQl7Ci0J CWNhc2UgU0NUX1NpbXBsZToKLQkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7 Ci0JCQlicmVhazsKKwkvKiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hp bGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1 cm4gTlVMTDsKKworCWlzdG10ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoKKwkgKiBJZiB0 aGVyZSBhcmUgbm8gb2JqZWN0cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8gYmUgZ3JhbnRl ZCwgdGhlbgorCSAqIG5vdGhpbmcgdG8gZG8uCisJICovCisJaWYgKGlzdG10LT5vYmplY3RzID09 IE5JTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsKKwkJ Y2FzZSBPQkpFQ1RfQ09MVU1OOgorCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1Rf U0VRVUVOQ0U6CisJCQljbGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7CisJ CWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCWNsYXNzSWQgPSBU eXBlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQljbGFzc0lk ID0gRm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVD VF9GT1JFSUdOX1NFUlZFUjoKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRpb25JZDsK KwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VE VVJFOgorCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0 aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQljbGFzc0lkID0g TGFuZ3VhZ2VSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNU OgorCQkJY2xhc3NJZCA9IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9TQ0hFTUE6CisJCQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJy ZWFrOworCQljYXNlIE9CSkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToK KwkJCWNsYXNzSWQgPSBJbnZhbGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmplY3Rz IG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwg ImludmFsaWQgT0JKRUNUIHZhbHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8qIEdS QU5UIFRPIG9yIFJFVk9LRSBGUk9NICovCisJcmV0ID0gbmV3X29ianRyZWUoaXN0bXQtPmlzX2dy YW50ID8gIkdSQU5UIiA6ICJSRVZPS0UiKTsKKworCS8qIEJ1aWxkIGEgbGlzdCBvZiBwcml2aWxl Z2VzIHRvIGdyYW50L3Jldm9rZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1w ID0gbmV3X29ianRyZWUoIkFMTCBQUklWSUxFR0VTIik7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKwllbHNlCisJeworCQljaGFyICpwcml2OworCQlp ZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJCQlwcml2ID0gKGNoYXIg Kilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9JTlNFUlQpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9TRUxFQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJp bmcoQUNMX1NFTEVDVCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJ eworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVBEQVRFKTsKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlp ZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIg Kilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9ERUxFVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdl cyAmIEFDTF9UUlVOQ0FURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0 cmluZyhBQ0xfVFJVTkNBVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVO Q0VTKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9SRUZF UkVOQ0VTKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYp KTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJeworCQkJ cHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJJR0dFUik7CisJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlz dG10LT5wcml2aWxlZ2VzICYgQUNMX0VYRUNVVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXBy aXZpbGVnZV90b19zdHJpbmcoQUNMX0VYRUNVVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAm IEFDTF9VU0FHRSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhB Q0xfVVNBR0UpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJp dikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEUpCisJCXsKKwkJ CXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURSk7CisJCQlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlz dG10LT5wcml2aWxlZ2VzICYgQUNMX0NSRUFURV9URU1QKQorCQl7CisJCQlwcml2ID0gKGNoYXIg Kilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9DUkVBVEVfVEVNUCk7CisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2 aWxlZ2VzICYgQUNMX0NPTk5FQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90 b19zdHJpbmcoQUNMX0NPTk5FQ1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmlu Z19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9NQUlO VEFJTikKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfTUFJ TlRBSU4pOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikp OworCQl9CisKKwkJaWYgKCFpc3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlvbikK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRf b3B0aW9uIiwKKwkJCQkJCQkJIGlzdG10LT5ncmFudF9vcHRpb24gPyAiR1JBTlQgT1BUSU9OIEZP UiIgOiAiIik7CisKKwkJaWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0 Q2VsbCAgICpvY2VsbDsKKworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJ CXsKKwkJCQlBY2Nlc3NQcml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0CSAgICpj b2xzID0gTklMOworCisJCQkJZm9yZWFjaChjZWxsLCBwcml2LT5jb2xzKQorCQkJCXsKKwkJCQkJ U3RyaW5nCSAgICpjb2xuYW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKworCQkJCQlj b2xzID0gbGFwcGVuZChjb2xzLAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwo Y29sbmFtZSkpKTsKKwkJCQl9CisKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7Y29sczos IH1zKSAle3ByaXZ9cyIsIDIsCisJCQkJCQkJCQkgImNvbHMiLCBPYmpUeXBlQXJyYXksIGNvbHMs CisJCQkJCQkJCQkgInByaXYiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJICBwcml2LT5wcml2 X25hbWUgPyBwcml2LT5wcml2X25hbWUgOiAiQUxMIFBSSVZJTEVHRVMiKTsKKworCQkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQor CWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b2JqdHlwZX1zIiwgIm9ianR5cGUiLAor CQkJCQkJIChjaGFyICopc3RyaW5naWZ5X29ianR5cGUoaXN0bXQtPm9ianR5cGUsIHRydWUpKTsK KworCS8qIFRhcmdldCBvYmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8K KwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJ CQlvYmppZCA9IGxmaXJzdF9vaWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCQlh ZGRyLmNsYXNzSWQgPSBjbGFzc0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFkZHIu b2JqZWN0U3ViSWQgPSAwOworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fXMi LCAxLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBnZXRPYmpl Y3RJZGVudGl0eSgmYWRkciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3By aXZ0YXJnZXQ6LCB9cyIsIGxpc3QpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCBpc3Rt dC0+aXNfZ3JhbnQgPyAiVE8iIDogIkZST00iKTsKKworCS8qIExpc3Qgb2YgZ3JhbnRlZXMgKi8K KwlsaXN0ID0gTklMOworCWZvcmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJT2lk CQkJZ3JhbnRlZSA9IGxmaXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9y X3JvbGVfaWQoZ3JhbnRlZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtncmFudGVlczos IH1zIiwgbGlzdCk7CisKKwkvKiBUaGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlzIHZh cmlhYmxlIC4uLiAqLworCWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJCQkgaXN0 bXQtPmdyYW50X29wdGlvbiA/ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0 bXQtPmdyYW50b3JfdWlkKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9s ZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0 RGF0dW0oaXN0bXQtPmdyYW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0 dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJvbGUgd2l0aCBP SUQgJXUiLAorCQkJCSBpc3RtdC0+Z3JhbnRvcl91aWQpOworCisJCXJvbGVuYW1lID0gTmFtZVN0 cigoKEZvcm1fcGdfYXV0aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBl bmRfc3RyaW5nX29iamVjdChyZXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsCisJCQkJCQkJ ICJyb2xlbmFtZSIsIHJvbGVuYW1lKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQor CisJaWYgKCFpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7 Y2FzY2FkZX1zIiwgImNhc2NhZGUiLAorCQkJCQkJCSBpc3RtdC0+YmVoYXZpb3IgPT0gRFJPUF9D QVNDQURFID8gIkNBU0NBREUiIDogIiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYW4gQWx0ZXJPcGVyYXRvclN0bXQgKEFMVEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4K KyAqCisgKiBHaXZlbiBhbiBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29t bWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0 eX1PICgle2xlZnRfdHlwZX1ULCAle3JpZ2h0X3R5cGV9VCkKKyAqIFNFVCAoJXtlbGVtczosIH1z KQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJQWx0ZXJP cGVyYXRvclN0bXQgKm5vZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9i alRyZWUgICAgKnJldDsKKwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwgICAq Y2VsbDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUx KE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQob3ByVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9w ZXJhdG9yIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVy YXRvcikgR0VUU1RSVUNUKG9wclR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg T1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3Bh Y2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExF RlRBUkcgKi8KKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiKCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiKCV7bGVmdF90eXBlfXMiLCAibGVmdF90eXBlIiwgIk5PTkUiKTsKKworCS8q IFJJR0hUQVJHICovCisJQXNzZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZvcmVhY2goY2Vs bCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJj bXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJyZXN0cmljdCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkp CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJ CQkJCQkJCSAiTk9ORSIpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAi am9pbiIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAx LAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBf b2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpv aW4pKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwcm9j ZWR1cmV9cyIsICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJICJOT05FIik7CisJCX0KKworCQlBc3Nl cnQodG1wX29iaik7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlNFVCAoJXtlbGVtczos IH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RST1Ag Y29tbWFuZC4KKyAqCisgKiBHaXZlbiB0aGUgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGFuIE9i alRyZWUgcmVwcmVzZW50aW5nIHRoZSBBbHRlcgorICogT3BlcmF0b3IgY29tbWFuZC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBV U0lORyAle2FtbmFtZX1JIEFERC9EUk9QICV7aXRlbXM6LH1zCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2Jq VHJlZSAgICAqcmV0OworCUFsdGVyT3BGYW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1pbHlT dG10ICopIGNtZC0+cGFyc2V0cmVlOworCUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZhbWls eSBvcGZGb3JtOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CS8qIERvbid0IGRlcGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBl eHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJ ZnRwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERh dHVtKGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGZ0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRv ciBmYW1pbHkgd2l0aCBPSUQgJXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElk KTsKKwlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJ TkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwg T2JqVHlwZVN0cmluZywgc3RtdC0+YW1uYW1lKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9w ZmFtLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwp OworCQlPYmpUcmVlICAgICp0bXBfb2JqOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4CisJ CSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlw ZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVS QVRPUiAle251bX1uIiwgMSwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5u dW1iZXIpOworCisJCS8qIEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBkb2Vz bid0IGhhdmUgdGhpcyAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcF9vYmosICIle29wZXJhdG9yfU8iLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5v YmplY3QpKTsKKworCQkvKiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9w ZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXty dHlwZX1UKSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwg LTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBu b3QgaW4gdGhlIERST1AgY2FzZSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYg KG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCQkgIkZPUiBTRUFS Q0giKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlPYmpUcmVlICAgICpvcmRlcmJ5X29iajsKKworCQkJ CW9yZGVyYnlfb2JqID0gbmV3X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQi LCAxLAorCQkJCQkJCQkJCQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCQkJb3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcF9vYmosICIle3B1cnBvc2V9cyIsIG9yZGVyYnlfb2JqKTsKKwkJCX0KKwkJfQorCisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlN ZW1iZXIgKnByb2MgPSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJ dG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7 cnR5cGV9VCkiLCAzLAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJl ciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkp OworCisJCS8qCisJCSAqIEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUg RFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZQorCQkgKiB0aGlzCisJCSAqLworCQlpZiAoIXN0bXQtPmlz RHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zv cm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7 CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9i amVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo cHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2Nl ZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJCSBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0gPSAo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0gcHJv Y0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+ cHJvbmFyZ3M7IGkrKykKKwkJCXsKKwkJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCQlhcmcgPSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBs YXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CQkgIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKHRtcF9vYmosICIoIik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2Fy Z3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmos ICIpIik7CisKKwkJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlpZiAoc3Rt dC0+aXNEcm9wKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJEUk9QIik7CisJZWxzZQor CQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3duZXJTdG10IChB TFRFUiAuLi4gT1dORVIgVE8gLi4uKS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3Mg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVl IHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogQUxURVIgJXMgJXtpZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVz cywgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3du ZXJTdG10ICopIHBhcnNldHJlZTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtv Ymp0eXBlfXMgJXtpZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SSIsIDMsCisJCQkJCQkg ICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9k ZS0+b2JqZWN0VHlwZSwgZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJICBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJICAi bmV3b3duZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRfcm9sZXNwZWNfbmFtZShub2Rl LT5uZXdvd25lcikpOworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisgKgor ICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtk ZWZpbml0aW9uOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2VxU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJ UmVsYXRpb24JcmVsYXRpb247CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAq Y2VsbDsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJU2VxdWVuY2VfdmFsdWVzICpzZXF2 YWx1ZXM7CisJQWx0ZXJTZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBh cnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQg c2VwYXJhdGVseSAodmlhIENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJu IGVtcHR5IGhlcmUuCisJICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQly ZXR1cm4gTlVMTDsKKworCXNlcXZhbHVlcyA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQp OworCXNlcWZvcm0gPSBzZXF2YWx1ZXMtPnNlcWZvcm07CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0 ZXJTZXFTdG10ICopIHBhcnNldHJlZSktPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVt ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpFbGVtICAgICpuZXdlbG07CisKKwkJ aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY2FjaGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVw YXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ ZGVmbmFtZSwgImN5Y2xlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKHNl cWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJpbmNyZW1l bnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwg ZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZhbHNlKTsKKwkJ ZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdl bG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0 cmNtcChlbGVtLT5kZWZuYW1lLCAic3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9T ZXFfU3RhcnR3aXRoKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRl Zm5hbWUsICJyZXN0YXJ0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQo c2VxdmFsdWVzLT5sYXN0X3ZhbHVlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUs ICJvd25lZF9ieSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9Pd25lZEJ5KG9iamVj dElkLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiYXMiKSA9PSAw KQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQXMoZWxlbSk7CisJCWVsc2UKKwkJCWVsb2coRVJS T1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOworCisJCWVs ZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9u X29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMiLCAyLAorCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9i alR5cGVBcnJheSwgZWxlbXMpOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclR5 cGVTdG10LgorICoKKyAqIEdpdmVuIGEgdHlwZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1v ZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0 eXBlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCAo JXtkZWZpbml0aW9uOiB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclR5 cGVTZXRTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0bXQgKmFs dGVyVHlwZVNldFN0bXQgPSAoQWx0ZXJUeXBlU3RtdCAqKSBjbWQ7CisJTGlzdENlbGwgICAqcGw7 CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5 cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJ ZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwg b2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsK KworCWZvcmVhY2gocGwsIGFsdGVyVHlwZVNldFN0bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVt ICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChwbCk7CisJCU9iakVsZW0gICAgKm5ld2Vs bTsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3RvcmFnZSIpID09IDApCisJCQlu ZXdlbG0gPSBkZXBhcnNlX1R5cGVfU3RvcmFnZSh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZl bC0+ZGVmbmFtZSwgInJlY2VpdmUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1Jl Y2VpdmUodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZW5kIikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9TZW5kKHR5cEZvcm0pOworCQlpZiAoc3RyY21w KGRlZmVsLT5kZWZuYW1lLCAidHlwbW9kX2luIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf VHlwZV9UeXBtb2RfSW4odHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJ0 eXBtb2Rfb3V0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9UeXBtb2RfT3V0KHR5 cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAiYW5hbHl6ZSIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfQW5hbHl6ZSh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInN1YnNjcmlwdCIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5 cGVfU3Vic2NyaXB0KHR5cEZvcm0pOworCQllbHNlCisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0 eXBlIG9wdGlvbiAlcyIsIGRlZmVsLT5kZWZuYW1lKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxl bXMsIG5ld2VsbSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4g bmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFNFVCAoJXtkZWZpbml0aW9u OiB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ ICBvYmplY3RJZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBlbGVtcyk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tcG9zaXRlVHlwZVN0bXQgKENSRUFURSBUWVBFIEFT KQorICoKKyAqIEdpdmVuIGEgQ29tcG9zaXRlIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGNy ZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7 aWRlbnRpdHl9RCBBUyAoJXtjb2x1bW5zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7 CisJQ29tcG9zaXRlVHlwZVN0bXQgKm5vZGUgPSAoQ29tcG9zaXRlVHlwZVN0bXQgKikgcGFyc2V0 cmVlOworCUhlYXBUdXBsZQl0eXB0dXA7CisJRm9ybV9wZ190eXBlIHR5cGZvcm07CisJUmVsYXRp b24JdHlwZXJlbDsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJTGlzdAkgICAqdGFibGVlbHRzID0g TklMOworCisJLyogRmluZCB0aGUgcGdfdHlwZSBlbnRyeSBhbmQgb3BlbiB0aGUgY29ycmVzcG9u ZGluZyByZWxhdGlvbiAqLworCXR5cHR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cHR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCXR5cGZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwdHVw KTsKKwl0eXBlcmVsID0gcmVsYXRpb25fb3Blbih0eXBmb3JtLT50eXByZWxpZCwgQWNjZXNzU2hh cmVMb2NrKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRpb25HZXRS ZWxhdGlvbk5hbWUodHlwZXJlbCksCisJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlkKHR5cGVyZWwp KTsKKworCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyh0eXBlcmVsLCBub2RlLT5j b2xkZWZsaXN0LCBkcGNvbnRleHQsCisJCQkJCQkJCQkgIGZhbHNlLAkvKiBub3QgdHlwZWQgKi8K KwkJCQkJCQkJCSAgdHJ1ZSk7CS8qIGNvbXBvc2l0ZSB0eXBlICovCisKKwl0YWJsZV9jbG9zZSh0 eXBlcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCVJlbGVhc2VTeXNDYWNoZSh0eXB0dXApOworCisJ cmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgKCV7Y29s dW1uczosIH1zKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQp LAorCQkJCQkJICAiY29sdW1ucyIsIE9ialR5cGVBcnJheSwgdGFibGVlbHRzKTsKK30KKworLyoK KyAqIERlcGFyc2UgYSBDcmVhdGVDb252ZXJzaW9uU3RtdAorICoKKyAqIEdpdmVuIGEgY29udmVy c2lvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFICV7ZGVmYXVsdH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1E IEZPUiAle3NvdXJjZX1MIFRPICV7ZGVzdH1MCisgKiBGUk9NICV7ZnVuY3Rpb259RAorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24oT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJSGVhcFR1cGxlCWNvblR1cDsKKwlSZWxhdGlvbgljb252cmVs OworCUZvcm1fcGdfY29udmVyc2lvbiBjb25Gb3JtOworCU9ialRyZWUgICAgKnJldDsKKworCWNv bnZyZWwgPSB0YWJsZV9vcGVuKENvbnZlcnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2sp OworCWNvblR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY29udnJlbCwgQW51bV9wZ19j b252ZXJzaW9uX29pZCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25UdXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29udmVyc2lvbiB3aXRo IE9JRCAldSIsIG9iamVjdElkKTsKKwljb25Gb3JtID0gKEZvcm1fcGdfY29udmVyc2lvbikgR0VU U1RSVUNUKGNvblR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7ZGVmYXVs dH1zIENPTlZFUlNJT04gJXtpZGVudGl0eX1EIEZPUiAle3NvdXJjZX1MIFRPICV7ZGVzdH1MIEZS T00gJXtmdW5jdGlvbn1EIiwgNSwKKwkJCQkJCSAgImRlZmF1bHQiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJICBjb25Gb3JtLT5jb25kZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIsCisJCQkJCQkgICJp ZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShjb25Gb3JtLT5jb25uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGNvbkZvcm0t PmNvbm5hbWUpKSwKKwkJCQkJCSAgInNvdXJjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIChj aGFyICopcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb25mb3JlbmNvZGluZyksCisJCQkJ CQkgICJkZXN0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgKGNoYXIgKilwZ19lbmNvZGluZ190 b19jaGFyKGNvbkZvcm0tPmNvbnRvZW5jb2RpbmcpLAorCQkJCQkJICAiZnVuY3Rpb24iLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgIGNvbkZvcm0tPmNvbnByb2MpKTsKKworCXRhYmxl X2Nsb3NlKGNvbnZyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZUVudW1TdG10IChDUkVBVEUgVFlQRSBBUyBFTlVNKQorICoK KyAqIEdpdmVuIGEgRW51bSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQg QVMgRU5VTSAoJXt2YWx1ZXM6LCB9TCkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVF bnVtU3RtdCAqbm9kZSA9IChDcmVhdGVFbnVtU3RtdCAqKSBwYXJzZXRyZWU7CisJTGlzdAkgICAq dmFsdWVzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUt PnZhbHMpCisJCXZhbHVlcyA9IGxhcHBlbmQodmFsdWVzLCBuZXdfc3RyaW5nX29iamVjdChzdHJW YWwobGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKSkpKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIEVOVU0gKCV7dmFsdWVzOiwgfUwpIiwgMiwK KwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJ2YWx1 ZXMiLCBPYmpUeXBlQXJyYXksIHZhbHVlcyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRl RXh0ZW5zaW9uU3RtdAorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRF IEVYVEVOU0lPTiAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle29wdGlvbnM6IH1zCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVFeHRlbnNpb25TdG10ICpub2RlID0gKENy ZWF0ZUV4dGVuc2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsK KwlIZWFwVHVwbGUJZXh0VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJl ZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwor CXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0ZW5zaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX2V4dGVuc2lv biwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBleHRl bnNpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVu c2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwkvKiBMaXN0IG9mIG9wdGlvbnMgKi8KKwlmb3Jl YWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWEi KSA9PSAwKQorCQl7CisJCQkvKiBTa2lwIHRoaXMgb25lOyB3ZSBhZGQgb25lIHVuY29uZGl0aW9u YWxseSBiZWxvdyAqLworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ ZGVmbmFtZSwgIm5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIlZFUlNJT04gJXt2ZXJzaW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAidmVyc2lvbiIsCisJCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdl dFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJvbGRfdmVyc2lv biIpID09IDApCisJCXsKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJGUk9NICV7dmVyc2lvbn1M IiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImZyb20iLAorCQkJCQkJCQkg InZlcnNpb24iLCBPYmpUeXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQll bG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisK KwkvKiBBZGQgdGhlIFNDSEVNQSBvcHRpb24gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0NI RU1BICV7c2NoZW1hfUkiLCAyLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNjaGVt YSIsCisJCQkJCQkgInNjaGVtYSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X25hbWVzcGFj ZV9uYW1lKGV4dEZvcm0tPmV4dG5hbWVzcGFjZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNz U2hhcmVMb2NrKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEVYVEVOU0lPTiAl e2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle29wdGlvbnM6IH1zIiwgMywKKwkJCQkJCSAgImlm X25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5pZl9ub3RfZXhpc3Rz ID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgICJuYW1lIiwgT2JqVHlwZVN0cmluZywg bm9kZS0+ZXh0bmFtZSwKKwkJCQkJCSAgIm9wdGlvbnMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOwor fQorCisvKgorICogSWYgYSBjb2x1bW4gbmFtZSBpcyBzcGVjaWZpZWQsIGFkZCBhbiBlbGVtZW50 IGZvciBpdDsgb3RoZXJ3aXNlIGl0J3MgYQorICogdGFibGUtbGV2ZWwgb3B0aW9uLgorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0Zkd09wdGlvbnMoTGlzdCAqb3B0aW9ucywgY2hhciAq Y29sbmFtZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlpZiAoY29sbmFtZSkKKwkJcmV0ID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMSwKKwkJCQkJCQkgImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIGNvbG5hbWUpOworCWVsc2UKKwkJcmV0ID0gbmV3X29ianRy ZWUoIk9QVElPTlMiKTsKKworCWlmIChvcHRpb25zICE9IE5JTCkKKwl7CisJCUxpc3QJICAgKm9w dG91dCA9IE5JTDsKKwkJTGlzdENlbGwgICAqY2VsbDsKKworCQlmb3JlYWNoKGNlbGwsIG9wdGlv bnMpCisJCXsKKwkJCURlZkVsZW0gICAgKmVsZW07CisJCQlPYmpUcmVlICAgICpvcHQ7CisKKwkJ CWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCXN3aXRjaCAoZWxlbS0+ZGVm YWN0aW9uKQorCQkJeworCQkJCWNhc2UgREVGRUxFTV9VTlNQRUM6CisJCQkJCW9wdCA9IG5ld19v Ymp0cmVlX1ZBKCIle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwg T2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJ CQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQli cmVhazsKKwkJCQljYXNlIERFRkVMRU1fU0VUOgorCQkJCQlvcHQgPSBuZXdfb2JqdHJlZV9WQSgi U0VUICV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpUeXBl U3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCQkJ CSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgREVGRUxFTV9BREQ6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgJXts YWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcs IGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRlZkdl dEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJY2Fz ZSBERUZFTEVNX0RST1A6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QICV7bGFiZWx9 SSIsIDEsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUp OworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBk ZWYgYWN0aW9uICVkIiwgZWxlbS0+ZGVmYWN0aW9uKTsKKwkJCQkJb3B0ID0gTlVMTDsKKwkJCX0K KworCQkJb3B0b3V0ID0gbGFwcGVuZChvcHRvdXQsIG5ld19vYmplY3Rfb2JqZWN0KG9wdCkpOwor CQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtvcHRpb246ICx9cykiLCBvcHRv dXQpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGZHdTdG10IChDUkVBVEUgRk9SRUlHTiBE QVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYW4gRkRXIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgRk9SRUlH TiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JICV7aGFuZGxlcn1zICV7dmFsaWRhdG9yfXMgJXtn ZW5lcmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUZk d1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRmR3U3RtdCAq bm9kZSA9IChDcmVhdGVGZHdTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZmR3VHVwOwor CUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlSZWxhdGlvbglyZWw7CisJ T2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKworCXJlbCA9IHRhYmxlX29wZW4o Rm9yZWlnbkRhdGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlmZHdU dXAgPSBTZWFyY2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJCSBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRhdGEgd3Jh cHBlciB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3Bn X2ZvcmVpZ25fZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1QoZmR3VHVwKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwK KwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25h bWUpKTsKKworCS8qIEFkZCBIQU5ETEVSIGNsYXVzZSAqLworCWlmICghT2lkSXNWYWxpZChmZHdG b3JtLT5mZHdoYW5kbGVyKSkKKwkJdG1wID0gbmV3X29ianRyZWUoIk5PIEhBTkRMRVIiKTsKKwll bHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2NlZHVyZX1EIiwg MSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg ZmR3Rm9ybS0+ZmR3aGFuZGxlcikpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2hhbmRsZXJ9cyIsIHRtcCk7CisKKwkvKiBBZGQgVkFMSURBVE9SIGNsYXVzZSAqLworCWlmICgh T2lkSXNWYWxpZChmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgi Tk8gVkFMSURBVE9SIik7CisJZWxzZQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZBTElE QVRPUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3dmFsaWRhdG9yKSk7CisJfQorCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dmFsaWRhdG9yfXMiLCB0bXApOworCisJLyogQWRkIGFu IE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0 aW9ucywgTlVMTCkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZkd1R1cCk7CisJdGFibGVfY2xvc2Uo cmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIEFsdGVyRmR3U3RtdCAoQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIpCisgKgorICog R2l2ZW4gYW4gRkRXIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5 fUkgJXtmZHdfb3B0aW9uczogfXMgJXtnZW5lcmljX29wdGlvbnN9RAorICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSkKK3sKKwlBbHRlckZkd1N0bXQgKm5vZGUgPSAoQWx0ZXJGZHdTdG10ICopIHBhcnNldHJlZTsK KwlIZWFwVHVwbGUJZmR3VHVwOworCUZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIgZmR3Rm9y bTsKKwlSZWxhdGlvbglyZWw7CisJT2JqVHJlZSAgICAqcmV0OworCUxpc3QJICAgKmZkd19vcHRp b25zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlyZWwgPSB0YWJsZV9vcGVuKEZvcmVp Z25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJZmR3VHVwID0g U2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9JRCwKKwkJCQkJCQkgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChmZHdUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZm9yZWlnbi1kYXRhIHdyYXBwZXIg d2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZkd0Zvcm0gPSAoRm9ybV9wZ19mb3Jl aWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGZkd0Zvcm0tPmZkd25hbWUpKTsK KworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMsIHRvIHNlZSB3aGF0IGNoYW5nZWQs IGJ1dCB1c2UgY2F0YWxvZyBhcyBhCisJICogYmFzaXMgZm9yIG5ldyB2YWx1ZXMuCisJICovCisJ Zm9yZWFjaChjZWxsLCBub2RlLT5mdW5jX29wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVt OworCQlPYmpUcmVlICAgICp0bXA7CisKKwkJZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQlpZiAo cGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAiaGFuZGxlciIpID09IDApCisJCXsKKwkJCS8q IGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCQkJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd2hh bmRsZXIpKQorCQkJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBIQU5ETEVSIik7CisJCQllbHNlCisJ CQl7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRMRVIgJXtwcm9jZWR1cmV9RCIsIDEs CisJCQkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIpKTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVu ZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0KKwkJZWxzZSBpZiAo cGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAidmFsaWRhdG9yIikgPT0gMCkKKwkJeworCQkJ LyogYWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwkJCWlmICghT2lkSXNWYWxpZChmZHdGb3JtLT5m ZHd2YWxpZGF0b3IpKQorCQkJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBWQUxJREFUT1IiKTsKKwkJ CWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2Vk dXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwkJCX0KKwkJCWZkd19vcHRp b25zID0gbGFwcGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0K Kwl9CisKKwkvKiBBZGQgSEFORExFUi9WQUxJREFUT1IgaWYgc3BlY2lmaWVkICovCisJYXBwZW5k X2FycmF5X29iamVjdChyZXQsICIle2Zkd19vcHRpb25zOiB9cyIsIGZkd19vcHRpb25zKTsKKwor CS8qIEFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXtnZW5lcmljX29wdGlvbnN9RCIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25z KG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZShmZHdUdXApOworCXRh YmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIEFTIFJBTkdFIHN0YXRlbWVudAorICoKKyAqIEdp dmVuIGEgUmFuZ2UgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwg cmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIFJB TkdFICgle2RlZmluaXRpb246LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVSYW5nZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJl ZSAgICAqdG1wOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJUmVsYXRpb24JcGdfcmFu Z2U7CisJSGVhcFR1cGxlCXJhbmdlVHVwOworCUZvcm1fcGdfcmFuZ2UgcmFuZ2VGb3JtOworCVNj YW5LZXlEYXRhIGtleVsxXTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCisJcGdfcmFuZ2UgPSB0YWJs ZV9vcGVuKFJhbmdlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlTY2FuS2V5SW5p dCgma2V5WzBdLAorCQkJCUFudW1fcGdfcmFuZ2Vfcm5ndHlwaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwor CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmFuZ2UsIFJhbmdlVHlwaWRJbmRleElkLCB0 cnVlLAorCQkJCQkJCSAgTlVMTCwgMSwga2V5KTsKKworCXJhbmdlVHVwID0gc3lzdGFibGVfZ2V0 bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmFuZ2VUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmFuZ2Ugd2l0aCB0eXBlIE9JRCAldSIsCisJ CQkgb2JqZWN0SWQpOworCisJcmFuZ2VGb3JtID0gKEZvcm1fcGdfcmFuZ2UpIEdFVFNUUlVDVChy YW5nZVR1cCk7CisKKwkvKiBTVUJUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZ UEUgPSAle3R5cGV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdWJ0 eXBlIiwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCByYW5nZUZvcm0tPnJuZ3N1YnR5cGUpKTsK KwlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIFNVQlRZUEVfT1BDTEFTUyAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+ cm5nc3Vib3BjKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFX09QQ0xBU1Mg PSAle29wY2xhc3N9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3Bj bGFzcyIsCisJCQkJCQkJICJvcGNsYXNzIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yQ2xhc3NSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgcmFuZ2VGb3JtLT5ybmdzdWJvcGMpKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVm aW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogQ09MTEFUSU9OICov CisJaWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pKQorCXsKKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIkNPTExBVElPTiA9ICV7Y29sbGF0aW9ufUQiLCAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGlvbiIsCisJCQkJCQkJICJjb2xsYXRpb24i LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29s bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nY29sbGF0aW9u KSk7CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCX0KKworCS8qIENBTk9OSUNBTCAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9y bS0+cm5nY2Fub25pY2FsKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQU5PTklDQUwg PSAle2Nhbm9uaWNhbH1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJj YW5vbmljYWwiLAorCQkJCQkJCSAiY2Fub25pY2FsIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCSByYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpOworCQlkZWZpbml0aW9uID0gbGFwcGVu ZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBTVUJUWVBF X0RJRkYgKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKQorCXsKKwkJ dG1wID0gbmV3X29ianRyZWVfVkEoIlNVQlRZUEVfRElGRiA9ICV7c3VidHlwZV9kaWZmfUQiLCAy LAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGVfZGlmZiIsCisJCQkJ CQkJICJzdWJ0eXBlX2RpZmYiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdl Rm9ybS0+cm5nc3ViZGlmZikpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOwor CXRhYmxlX2Nsb3NlKHBnX3JhbmdlLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EIEFTIFJBTkdFICgle2RlZmluaXRp b246LCB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ ICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwK KwkJCQkJCSAgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGRlZmluaXRpb24pOworfQorCisv KgorICogRGVwYXJzZSBhbiBBbHRlckVudW1TdG10LgorICoKKyAqIEdpdmVuIGFuIGVudW0gT0lE IGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog QUxURVIgVFlQRSAle2lkZW50aXR5fUQgQUREIFZBTFVFICV7aWZfbm90X2V4aXN0c31zICV7dmFs dWV9TAorICogJXthZnRlcl9vcl9iZWZvcmV9cyAle25laWdoYm9yfUwKKyAqIAlPUgorICogQUxU RVIgVFlQRSAle2lkZW50aXR5fUQgUkVOQU1FIFZBTFVFICV7dmFsdWV9TCBUTyAle25ld3ZhbHVl fUwKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckVudW1TdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRW51bVN0bXQgKm5vZGUgPSAoQWx0ZXJF bnVtU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCWlmICghbm9kZS0+b2xk VmFsKQorCXsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiQUREIFZBTFVFIik7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7aWZfbm90X2V4aXN0c31zIiwgImlmX25vdF9leGlz dHMiLAorCQkJCQkJCSBub2RlLT5za2lwSWZOZXdWYWxFeGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIg OiAiIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt2YWx1ZX1MIiwgInZhbHVl Iiwgbm9kZS0+bmV3VmFsKTsKKworCQlpZiAobm9kZS0+bmV3VmFsTmVpZ2hib3IpCisJCXsKKwkJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7YWZ0ZXJfb3JfYmVmb3JlfXMiLAorCQkJCQkJ CQkgImFmdGVyX29yX2JlZm9yZSIsCisJCQkJCQkJCSBub2RlLT5uZXdWYWxJc0FmdGVyID8gIkFG VEVSIiA6ICJCRUZPUkUiKTsKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bmVpZ2hi b3J9TCIsICJuZWlnaGJvciIsCisJCQkJCQkJCSBub2RlLT5uZXdWYWxOZWlnaGJvcik7CisJCX0K Kwl9CisJZWxzZQorCXsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiUkVOQU1FIFZBTFVF ICV7dmFsdWV9TCBUTyIsICJ2YWx1ZSIsCisJCQkJCQkJIG5vZGUtPm9sZFZhbCk7CisJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bmV3dmFsdWV9TCIsICJuZXd2YWx1ZSIsIG5vZGUtPm5l d1ZhbCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJF eHRlbnNpb25TdG10IChBTFRFUiBFWFRFTlNJT04gLi4gVVBEQVRFIFRPIFZFUlNJT04pCisgKgor ICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZpZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIEVYVEVOU0lPTiAle2lkZW50aXR5fUkgVVBE QVRFICV7b3B0aW9uczogfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckV4 dGVuc2lvblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJFeHRl bnNpb25TdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVs YXRpb24JcGdfZXh0ZW5zaW9uOworCUhlYXBUdXBsZQlleHRUdXA7CisJRm9ybV9wZ19leHRlbnNp b24gZXh0Rm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlM aXN0Q2VsbCAgICpjZWxsOworCURlZkVsZW0gICAgKmRfbmV3X3ZlcnNpb24gPSBOVUxMOworCisJ cGdfZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFy ZUxvY2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9u LCBBbnVtX3BnX2V4dGVuc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQoZXh0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVu c2lvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCWV4dEZvcm0gPSAoRm9ybV9wZ19l eHRlbnNpb24pIEdFVFNUUlVDVChleHRUdXApOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRp b25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CisJCWlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJ CQlPYmpUcmVlICAgICp0bXA7CisKKwkJCWlmIChkX25ld192ZXJzaW9uKQorCQkJCWVsb2coRVJS T1IsICJjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucyBmb3IgZXh0ZW5zaW9uIHdpdGgg T0lEICV1IiwKKwkJCQkJIG9iamVjdElkKTsKKworCQkJZF9uZXdfdmVyc2lvbiA9IG9wdDsKKwor CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlRPICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpU eXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5z dXBwb3J0ZWQgb3B0aW9uICVzIiwgb3B0LT5kZWZuYW1lKTsKKwl9CisKKwlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgRVhURU5TSU9OICV7aWRlbnRpdHl9SSBVUERBVEUgJXtvcHRpb25zOiB9 cyIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihleHRGb3Jt LT5leHRuYW1lKSwKKwkJCQkJCSAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwl0 YWJsZV9jbG9zZShwZ19leHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0 OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAoQUxU RVIgRVhURU5TSU9OIGV4dCBBREQvRFJPUCBvYmplY3QpCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSIEVYVEVOU0lPTiAle2V4dGlkZW50aXR5fUkgQUREL0RST1AgJXtvYmppZGVudGl0 eX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50 c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJCSAgIE9iamVjdEFk ZHJlc3Mgb2JqZWN0QWRkcmVzcykKK3sKKwlBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqbm9k ZSA9IChBbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdCAqKSBwYXJzZXRyZWU7CisKKwlBc3NlcnQo bm9kZS0+YWN0aW9uID09ICsxIHx8IG5vZGUtPmFjdGlvbiA9PSAtMSk7CisKKwlyZXR1cm4gbmV3 X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2V4dGlkZW50aXR5fUkgJXtleHRvcHRpb259 cyAle2V4dG9ianR5cGV9cyAle29iamlkZW50aXR5fXMiLCA0LAorCQkJCQkJICAiZXh0aWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5leHRuYW1lLAorCQkJCQkJICAiZXh0b3B0aW9uIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9kZS0+YWN0aW9uID09ICsxID8gIkFERCIgOiAiRFJP UCIsCisJCQkJCQkgICJleHRvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5n aWZ5X29ianR5cGUobm9kZS0+b2JqdHlwZSwgZmFsc2UpLAorCQkJCQkJICAib2JqaWRlbnRpdHki LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRPYmplY3RJZGVudGl0eSgmb2JqZWN0QWRkcmVz cywgZmFsc2UpKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlQ2FzdFN0bXQuCisgKgor ICogR2l2ZW4gYSBzZXF1ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5k LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBlfVQg QVMgJXt0YXJnZXR0eXBlfVQpICV7bWVjaGFuaXNtfXMgJXtjb250ZXh0fXMKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlDcmVhdGVDYXN0U3RtdCAqbm9kZSA9IChDcmVhdGVDYXN0U3RtdCAqKSBw YXJzZXRyZWU7CisJUmVsYXRpb24JY2FzdHJlbDsKKwlIZWFwVHVwbGUJY2FzdFR1cDsKKwlGb3Jt X3BnX2Nhc3QgY2FzdEZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKmNvbnRleHQ7 CisKKwljYXN0cmVsID0gdGFibGVfb3BlbihDYXN0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwljYXN0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXN0cmVsLCBBbnVtX3Bn X2Nhc3Rfb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNhc3RUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY2FzdCB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwljYXN0Rm9ybSA9IChGb3JtX3BnX2Nhc3QpIEdFVFNUUlVDVChjYXN0VHVw KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgQ0FTVCAoJXtzb3VyY2V0eXBlfVQg QVMgJXt0YXJnZXR0eXBlfVQpIiwgMiwKKwkJCQkJCSAic291cmNldHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3Rzb3VyY2UsIC0x KSwKKwkJCQkJCSAidGFyZ2V0dHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3R5cGUoY2FzdEZvcm0tPmNhc3R0YXJnZXQsIC0xKSk7CisKKwlpZiAobm9kZS0+aW5v dXQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bWVjaGFuaXNtfXMiLCAibWVjaGFu aXNtIiwKKwkJCQkJCQkgIldJVEggSU5PVVQiKTsKKwllbHNlIGlmIChub2RlLT5mdW5jID09IE5V TEwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bWVjaGFuaXNtfXMiLCAibWVjaGFu aXNtIiwKKwkJCQkJCQkgIldJVEhPVVQgRlVOQ1RJT04iKTsKKwllbHNlCisJeworCQlPYmpUcmVl ICAgICp0bXBfb2JqOworCQlTdHJpbmdJbmZvRGF0YSBmdW5jOworCQlIZWFwVHVwbGUJZnVuY1R1 cDsKKwkJRm9ybV9wZ19wcm9jIGZ1bmNGb3JtOworCQlpbnQJCQlpOworCisJCWZ1bmNUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgY2FzdEZvcm0tPmNhc3RmdW5jKTsKKwkJZnVuY0Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QoZnVuY1R1cCk7CisKKwkJaW5pdFN0cmluZ0luZm8o JmZ1bmMpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZmdW5jLCAiJXMoIiwKKwkJCQkJCSBxdW90ZV9x dWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUoZnVuY0Zvcm0tPnByb25hbWVz cGFjZSksCisJCQkJCQkJCQkJCQkJTmFtZVN0cihmdW5jRm9ybS0+cHJvbmFtZSkpKTsKKwkJZm9y IChpID0gMDsgaSA8IGZ1bmNGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlpZiAoaSAhPSAw KQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZmdW5jLCAnLCcpOworCisJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZmdW5jLAorCQkJCQkJCQkgICBmb3JtYXRfdHlwZV9iZV9xdWFsaWZpZWQo ZnVuY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXSkpOworCQl9CisJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKCZmdW5jLCAnKScpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBG VU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJCQkJImNhc3RmdW5jdGlvbiIsIE9i alR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 bWVjaGFuaXNtfXMiLCB0bXBfb2JqKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUoZnVuY1R1cCk7CisJ fQorCisJc3dpdGNoIChub2RlLT5jb250ZXh0KQorCXsKKwkJY2FzZSBDT0VSQ0lPTl9JTVBMSUNJ VDoKKwkJCWNvbnRleHQgPSAiQVMgSU1QTElDSVQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJ T05fQVNTSUdOTUVOVDoKKwkJCWNvbnRleHQgPSAiQVMgQVNTSUdOTUVOVCI7CisJCQlicmVhazsK KwkJY2FzZSBDT0VSQ0lPTl9FWFBMSUNJVDoKKwkJCWNvbnRleHQgPSAiIjsKKwkJCWJyZWFrOwor CQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgY29lcmNpb24gY29kZSAlYyIsIG5v ZGUtPmNvbnRleHQpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICov CisJfQorCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y29udGV4dH1zIiwgImNvbnRleHQi LCBjb250ZXh0KTsKKworCXRhYmxlX2Nsb3NlKGNhc3RyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBERUZBVUxUIFBSSVZJ TEVHRVMgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBERUZBVUxU IFBSSVZJTEVHRVMgJXtpbl9zY2hlbWF9cyAle2Zvcl9yb2xlc31zICV7Z3JhbnR9cworICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10KENvbGxl Y3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJQWx0ZXJEZWZhdWx0UHJp dmlsZWdlc1N0bXQgKnN0bXQgPSAoQWx0ZXJEZWZhdWx0UHJpdmlsZWdlc1N0bXQgKikgY21kLT5w YXJzZXRyZWU7CisJTGlzdAkgICAqcm9sZXMgPSBOSUw7CisJTGlzdAkgICAqc2NoZW1hcyA9IE5J TDsKKwlMaXN0CSAgICpncmFudGVlczsKKwlMaXN0CSAgICpwcml2czsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCU9ialRyZWUgICAgKnRtcDsKKwlPYmpUcmVlICAgICpncmFudDsKKwljaGFyCSAgICpv Ymp0eXBlOworCisJcmV0ID0gbmV3X29ianRyZWUoIkFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyIp OworCisJLyogU2NhbiB0aGUgcGFyc2Ugbm9kZSB0byBkaWcgb3V0IHRoZSBGT1IgUk9MRSBhbmQg SU4gU0NIRU1BIGNsYXVzZXMgKi8KKwlmb3JlYWNoKGNlbGwsIHN0bXQtPm9wdGlvbnMpCisJewor CQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJCUxpc3RDZWxs ICAgKmNlbGwyOworCisJCUFzc2VydChJc0Eob3B0LCBEZWZFbGVtKSk7CisJCUFzc2VydChJc0Eo b3B0LT5hcmcsIExpc3QpKTsKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJyb2xlcyIpID09 IDApCisJCXsKKwkJCWZvcmVhY2goY2VsbDIsIChMaXN0ICopIG9wdC0+YXJnKQorCQkJeworCQkJ CVJvbGVTcGVjICAgKnJvbGVzcGVjID0gbGZpcnN0KGNlbGwyKTsKKwkJCQlPYmpUcmVlICAgICpv YmogPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMocm9sZXNwZWMpOworCisJCQkJcm9sZXMgPSBs YXBwZW5kKHJvbGVzLCBuZXdfb2JqZWN0X29iamVjdChvYmopKTsKKwkJCX0KKwkJfQorCQllbHNl IGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAic2NoZW1hcyIpID09IDApCisJCXsKKwkJCWZvcmVh Y2goY2VsbDIsIChMaXN0ICopIG9wdC0+YXJnKQorCQkJeworCQkJCVN0cmluZwkgICAqdmFsID0g bGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsMik7CisKKwkJCQlzY2hlbWFzID0gbGFwcGVuZChzY2hl bWFzLCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwodmFsKSkpOworCQkJfQorCQl9CisJfQorCisJ LyogQWRkIHRoZSBJTiBTQ0hFTUEgY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZSgiSU4gU0NIRU1BIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle3NjaGVtYXM6LCB9 SSIsIHNjaGVtYXMpOworCWlmIChzY2hlbWFzID09IE5JTCkKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpbl9zY2hlbWF9cyIsIHRtcCk7 CisKKwkvKiBBZGQgdGhlIEZPUiBST0xFIGNsYXVzZSwgaWYgYW55ICovCisJdG1wID0gbmV3X29i anRyZWUoIkZPUiBST0xFIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle3JvbGVzOiwg fVIiLCByb2xlcyk7CisJaWYgKHJvbGVzID09IE5JTCkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtmb3Jfcm9sZXN9cyIsIHRtcCk7CisK KwkvKgorCSAqIEFkZCB0aGUgR1JBTlQgc3ViY29tbWFuZAorCSAqIFZlcmJvc2Ugc3ludGF4CisJ ICogR1JBTlQgJXtwcml2aWxlZ2VzOiwgfXMgT04gJXt0YXJnZXR9cyBUTyAle2dyYW50ZWVzOiwg fVIgJXtncmFudF9vcHRpb259cworCSAqIG9yCisJICogUkVWT0tFICV7Z3JhbnRfb3B0aW9ufXMg JXtwcml2aWxlZ2VzOiwgfXMgT04gJXt0YXJnZXR9cyBGUk9NICV7Z3JhbnRlZXM6LCB9UgorCSAq LworCWlmIChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCQlncmFudCA9IG5ld19vYmp0cmVlKCJH UkFOVCIpOworCWVsc2UKKwl7CisJCWdyYW50ID0gbmV3X29ianRyZWUoIlJFVk9LRSIpOworCisJ CS8qIEFkZCB0aGUgR1JBTlQgT1BUSU9OIGNsYXVzZSBmb3IgUkVWT0tFIHN1YmNvbW1hbmQgKi8K KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkdSQU5UIE9QVElPTiBGT1IiLCAxLAorCQkJCQkJCSAi cHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCSBzdG10LT5hY3Rpb24tPmdyYW50X29wdGlv bik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGdyYW50LCAiJXtncmFudF9vcHRpb259cyIsIHRt cCk7CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIHByaXZpbGVnZXMgbGlzdC4gIFRoaXMgdXNlcyB0 aGUgcGFyc2VyIHN0cnVjdCwgYXMgb3Bwb3NlZCB0bworCSAqIHRoZSBJbnRlcm5hbEdyYW50IGZv cm1hdCB1c2VkIGJ5IEdSQU5ULiAgVGhlcmUgYXJlIGVub3VnaCBvdGhlcgorCSAqIGRpZmZlcmVu Y2VzIHRoYXQgdGhpcyBkb2Vzbid0IHNlZW0gd29ydGggaW1wcm92aW5nLgorCSAqLworCWlmIChz dG10LT5hY3Rpb24tPnByaXZpbGVnZXMgPT0gTklMKQorCQlwcml2cyA9IGxpc3RfbWFrZTEobmV3 X3N0cmluZ19vYmplY3QoIkFMTCBQUklWSUxFR0VTIikpOworCWVsc2UKKwl7CisJCXByaXZzID0g TklMOworCisJCWZvcmVhY2goY2VsbCwgc3RtdC0+YWN0aW9uLT5wcml2aWxlZ2VzKQorCQl7CisJ CQlBY2Nlc3NQcml2ICpwcml2ID0gbGZpcnN0KGNlbGwpOworCisJCQlBc3NlcnQocHJpdi0+Y29s cyA9PSBOSUwpOworCQkJcHJpdnMgPSBsYXBwZW5kKHByaXZzLCBuZXdfc3RyaW5nX29iamVjdChw cml2LT5wcml2X25hbWUpKTsKKwkJfQorCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnQs ICIle3ByaXZpbGVnZXM6LCB9cyIsIHByaXZzKTsKKworCXN3aXRjaCAoY21kLT5kLmRlZnByaXZz Lm9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCW9ianR5cGUgPSAiVEFCTEVT IjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCW9ianR5cGUgPSAiRlVO Q1RJT05TIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ST1VUSU5FOgorCQkJb2JqdHlwZSA9 ICJST1VUSU5FUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlvYmp0 eXBlID0gIlNFUVVFTkNFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCW9i anR5cGUgPSAiVFlQRVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToKKwkJCW9i anR5cGUgPSAiU0NIRU1BUyI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCBmb3IgZGVmYXVsdCBwcml2aWxlZ2VzIiwgY21kLT5k LmRlZnByaXZzLm9ianR5cGUpOworCX0KKworCS8qIEFkZCB0aGUgdGFyZ2V0IG9iamVjdCB0eXBl ICovCisJYXBwZW5kX3N0cmluZ19vYmplY3QoZ3JhbnQsICJPTiAle3RhcmdldH1zIiwgInRhcmdl dCIsIG9ianR5cGUpOworCisJLyogQWRkIHRoZSBncmFudGVlIGxpc3QgKi8KKwlncmFudGVlcyA9 IE5JTDsKKwlmb3JlYWNoKGNlbGwsIHN0bXQtPmFjdGlvbi0+Z3JhbnRlZXMpCisJeworCQlSb2xl U3BlYyAgICpzcGVjID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAq b2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpOworCisJCWdyYW50ZWVzID0gbGFw cGVuZChncmFudGVlcywgbmV3X29iamVjdF9vYmplY3Qob2JqKSk7CisJfQorCisJaWYgKHN0bXQt PmFjdGlvbi0+aXNfZ3JhbnQpCisJeworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiVE8g JXtncmFudGVlczosIH1SIiwgZ3JhbnRlZXMpOworCisJCS8qIEFkZCB0aGUgV0lUSCBHUkFOVCBP UFRJT04gY2xhdXNlIGZvciBHUkFOVCBzdWJjb21tYW5kICovCisJCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJXSVRIIEdSQU5UIE9QVElPTiIsIDEsCisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJv b2wsCisJCQkJCQkJIHN0bXQtPmFjdGlvbi0+Z3JhbnRfb3B0aW9uKTsKKwkJYXBwZW5kX29iamVj dF9vYmplY3QoZ3JhbnQsICIle2dyYW50X29wdGlvbn1zIiwgdG1wKTsKKwl9CisJZWxzZQorCQlh cHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiRlJPTSAle2dyYW50ZWVzOiwgfVIiLCBncmFudGVl cyk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dyYW50fXMiLCBncmFudCk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgQ1JFQVRFIERPTUFJTgorICoK KyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1E IEFTICV7dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFpbnRzfXMKKyAqICV7Y29sbGF0aW9u fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVEb21haW4oT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAg KnRtcF9vYmo7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKwlM aXN0CSAgICpjb25zdHJhaW50czsKKwljaGFyCSAgICpkZWZ2YWw7CisKKwl0eXBUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0 eXBUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdp dGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJV Q1QodHlwVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRE9NQUlOICV7aWRl bnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMiLCAzLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVS ZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cEZvcm0tPnR5cGJhc2V0eXBlLAorCQkJCQkJCQkJ CQkgIHR5cEZvcm0tPnR5cHR5cG1vZCksCisJCQkJCQkgIm5vdF9udWxsIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSB0eXBGb3JtLT50eXBub3RudWxsID8gIk5PVCBOVUxMIiA6ICIiKTsKKworCWNv bnN0cmFpbnRzID0gb2J0YWluQ29uc3RyYWludHMoTklMLCBJbnZhbGlkT2lkLCBvYmplY3RJZCk7 CisJaWYgKGNvbnN0cmFpbnRzID09IE5JTCkKKwl7CisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgi Iik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJZWxzZQorCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIiV7ZWxlbWVudHM6LCB9cyIsIDEsCisJCQkJCQkJCSJlbGVtZW50 cyIsIE9ialR5cGVBcnJheSwgY29uc3RyYWludHMpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7Y29uc3RyYWludHN9cyIsIHRtcF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVl KCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7 CisJCU9ialRyZWUgICAgKmNvbGxuYW1lOworCisJCWNvbGxuYW1lID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSAgIHR5cEZvcm0t PnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle25hbWV9 RCIsIGNvbGxuYW1lKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb2xsYXRpb259cyIsIHRtcF9vYmopOwor CisJZGVmdmFsID0gRG9tYWluR2V0RGVmYXVsdCh0eXBUdXAsIHRydWUpOworCWlmIChkZWZ2YWwp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkRFRkFVTFQgJXtkZWZhdWx0fXMiLCAiZGVm YXVsdCIsIGRlZnZhbCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVuY3Rpb25TdG10IChDUkVBVEUgRlVO Q1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRo YXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3Jl YXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICoKKyAqIENSRUFURSAle29y X3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJFVFVSTlMgJXtyZXR1cm5fdHlwZX1z CisgKiBMQU5HVUFHRSAle3RyYW5zZm9ybV90eXBlfXMgJXtsYW5ndWFnZX1JICV7d2luZG93fXMg JXt2b2xhdGlsaXR5fXMKKyAqICV7cGFyYWxsZWxfc2FmZXR5fXMgJXtsZWFrcHJvb2Z9cyAle3N0 cmljdH1zICV7c2VjdXJpdHlfZGVmaW5lcn1zCisgKiAle2Nvc3R9cyAle3Jvd3N9cyAle3N1cHBv cnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9TCwKKyAqICV7c3ltYm9sfUwKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRl RnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAg ICAqdG1wX29iajsKKwlEYXR1bQkJdG1wZGF0dW07CisJY2hhcgkgICAqc291cmNlOworCWNoYXIJ ICAgKnByb2JpbiA9IE5VTEw7CisJTGlzdAkgICAqcGFyYW1zOworCUxpc3QJICAgKmRlZmF1bHRz OworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdAkgICAqdHlwZXMgPSBOSUw7CisJTGlzdENl bGwgICAqY2VsbDsKKwlMaXN0Q2VsbCAgICpjdXJkZWY7CisJTGlzdENlbGwgICAqdGFibGVfcGFy YW1zID0gTlVMTDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07 CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJT2lkCQkgICAqdHlwYXJyYXk7CisJT2lkCQkgICAqdHJm dHlwZXM7CisJRm9ybV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKwlpbnQJCQlpOworCWludAkJCXR5 cG51bTsKKwlpbnQJCQludHlwZXM7CisJaW50CQkJcGFyYW1jb3VudCA9IGxpc3RfbGVuZ3RoKG5v ZGUtPnBhcmFtZXRlcnMpOworCWJvb2wJCWlzbnVsbDsKKwlib29sCQlpc2Z1bmN0aW9uOworCisJ LyogR2V0IHRoZSBwZ19wcm9jIHR1cGxlICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQ Uk9DT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUi LAorCQkJIG9iamVjdElkKTsKKwlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChw cm9jVHVwKTsKKworCS8qIEdldCB0aGUgY29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAq LworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFOR09JRCwgcHJvY0Zvcm0tPnByb2xhbmcp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1IiwKKwkJCSBwcm9jRm9ybS0+ cHJvbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxhbmdU dXApOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdXNlZnVsIHZhbHVlcyBmb3IgcHJvc3JjIGFuZCBw cm9iaW4uICBXZSBjb3BlIHdpdGggcHJvYmluCisJICogYmVpbmcgZWl0aGVyIE5VTEwgb3IgIi0i LCBidXQgcHJvc3JjIG11c3QgaGF2ZSBhIHZhbGlkIHZhbHVlLgorCSAqLworCXRtcGRhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9j X3Byb3NyYywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwgIm51bGwgcHJv c3JjIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXNvdXJjZSA9IFRleHRE YXR1bUdldENTdHJpbmcodG1wZGF0dW0pOworCisJLyogRGV0ZXJtaW5lIGEgdXNlZnVsIHZhbHVl IGZvciBwcm9iaW4gKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9j VHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9iaW4sICZpc251bGwpOworCWlmICghaXNu dWxsKQorCXsKKwkJcHJvYmluID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisJCWlm IChwcm9iaW5bMF0gPT0gJ1wwJyB8fCBzdHJjbXAocHJvYmluLCAiLSIpID09IDApCisJCQlwcm9i aW4gPSBOVUxMOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBs YWNlfXMiLCAxLAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBu b2RlLT5yZXBsYWNlID8gIk9SIFJFUExBQ0UiIDogIiIpOworCisJLyoKKwkgKiBUbyBjb25zdHJ1 Y3QgdGhlIGFyZ3VtZW50cyBhcnJheSwgZXh0cmFjdCB0aGUgdHlwZSBPSURzIGZyb20gdGhlCisJ ICogZnVuY3Rpb24ncyBwZ19wcm9jIGVudHJ5LiAgSWYgcHJvbmFyZ3MgZXF1YWxzIHRoZSBwYXJh bWV0ZXIgbGlzdAorCSAqIGxlbmd0aCwgdGhlcmUgYXJlIG5vIE9VVCBwYXJhbWV0ZXJzIGFuZCB0 aHVzIHdlIGNhbiBleHRyYWN0IHRoZSB0eXBlCisJICogT0lEIGZyb20gcHJvYXJndHlwZXM7IG90 aGVyd2lzZSB3ZSBuZWVkIHRvIGRlY29kZSBwcm9hbGxhcmd0eXBlcywgd2hpY2gKKwkgKiBpcyBh IGJpdCBtb3JlIGludm9sdmVkLgorCSAqLworCXR5cGFycmF5ID0gcGFsbG9jKHBhcmFtY291bnQg KiBzaXplb2YoT2lkKSk7CisJaWYgKHBhcmFtY291bnQgPiBwcm9jRm9ybS0+cHJvbmFyZ3MpCisJ eworCQlEYXR1bQkJYWxsdHlwZXM7CisJCURhdHVtCSAgICp2YWx1ZXM7CisJCWJvb2wJICAgKm51 bGxzOworCQlpbnQJCQluZWxlbXM7CisKKwkJYWxsdHlwZXMgPSBTeXNDYWNoZUdldEF0dHIoUFJP Q09JRCwgcHJvY1R1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FsbGFyZ3R5cGVzLCAm aXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHByb2FsbGFyZ3R5 cGVzLCBtb3JlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRoYW4gYXJncyBpbiBmdW5jdGlvbiB3aXRo IE9JRCAldSIsCisJCQkJIG9iamVjdElkKTsKKwkJZGVjb25zdHJ1Y3RfYXJyYXkoRGF0dW1HZXRB cnJheVR5cGVQKGFsbHR5cGVzKSwKKwkJCQkJCSAgT0lET0lELCA0LCAndCcsICdpJywKKwkJCQkJ CSAgJnZhbHVlcywgJm51bGxzLCAmbmVsZW1zKTsKKwkJaWYgKG5lbGVtcyAhPSBwYXJhbWNvdW50 KQorCQkJZWxvZyhFUlJPUiwgIm1pc21hdGNoZWQgcHJvYWxsYXJnYXR5cGVzIik7CisJCWZvciAo aSA9IDA7IGkgPCBwYXJhbWNvdW50OyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHZhbHVlc1tpXTsK Kwl9CisJZWxzZQorCXsKKwkJZm9yIChpID0gMDsgaSA8IHBhcmFtY291bnQ7IGkrKykKKwkJCXR5 cGFycmF5W2ldID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlc1tpXTsKKwl9CisKKwkvKgor CSAqIElmIHRoZXJlIGFyZSBhbnkgZGVmYXVsdCBleHByZXNzaW9ucywgd2UgcmVhZCB0aGUgZGVw YXJzZWQgZXhwcmVzc2lvbgorCSAqIGFzIGEgbGlzdCBzbyB0aGF0IHdlIGNhbiBhdHRhY2ggdGhl bSB0byBlYWNoIGFyZ3VtZW50LgorCSAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBS T0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2FyZ2RlZmF1bHRzLCAm aXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWRlZmF1bHRzID0gRnVuY3Rpb25HZXREZWZh dWx0cyhEYXR1bUdldFRleHRQKHRtcGRhdHVtKSk7CisJCWN1cmRlZiA9IGxpc3RfaGVhZChkZWZh dWx0cyk7CisJfQorCWVsc2UKKwl7CisJCWRlZmF1bHRzID0gTklMOworCQljdXJkZWYgPSBOVUxM OworCX0KKworCS8qCisJICogTm93IGl0ZXJhdGUgb3ZlciBlYWNoIHBhcmFtZXRlciBpbiB0aGUg cGFyc2UgdHJlZSB0byBjcmVhdGUgdGhlCisJICogcGFyYW1ldGVycyBhcnJheS4KKwkgKi8KKwlw YXJhbXMgPSBOSUw7CisJdHlwbnVtID0gMDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPnBhcmFtZXRl cnMpCisJeworCQlGdW5jdGlvblBhcmFtZXRlciAqcGFyYW0gPSAoRnVuY3Rpb25QYXJhbWV0ZXIg KikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICpwYXJhbV9vYmo7CisJCU9ialRyZWUgICAg KmRlZmF1bHR2YWw7CisJCU9ialRyZWUgICAgKm5hbWU7CisKKwkJLyoKKwkJICogQSBQQVJBTV9U QUJMRSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBlbmQgb2YgaW5wdXQgYXJndW1lbnRzOyB0aGUK KwkJICogZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIHBhcnQgb2YgdGhlIHJldHVybiB0eXBlLiAg V2UgaWdub3JlIHRoZW0KKwkJICogaGVyZSwgYnV0IGtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQg cG9zaXRpb24gaW4gdGhlIGxpc3Qgc28gdGhhdCB3ZQorCQkgKiBjYW4gZWFzaWx5IHByb2R1Y2Ug dGhlIHJldHVybiB0eXBlIGJlbG93LgorCQkgKi8KKwkJaWYgKHBhcmFtLT5tb2RlID09IEZVTkNf UEFSQU1fVEFCTEUpCisJCXsKKwkJCXRhYmxlX3BhcmFtcyA9IGNlbGw7CisJCQlicmVhazsKKwkJ fQorCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4IGZvciBwYXJhbWF0ZXI6ICV7bW9kZX1zICV7 bmFtZX1zICV7dHlwZX1UCisJCSAqICV7ZGVmYXVsdH1zCisJCSAqLworCQlwYXJhbV9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiJXttb2RlfXMiLCAxLAorCQkJCQkJCQkgICJtb2RlIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX09VVCA/ICJPVVQiIDoK KwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lOT1VUID8gIklOT1VUIiA6CisJ CQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJQURJQyA/ICJWQVJJQURJQyIg OgorCQkJCQkJCQkgICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdob2xlc2FsZSBzdXBwcmVzc2lv biBvZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKwkJbmFtZSA9IG5ld19vYmp0cmVlKCIiKTsKKwkJ aWYgKHBhcmFtLT5uYW1lKQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QobmFtZSwgIiV7bmFtZX1J IiwgIm5hbWUiLCBwYXJhbS0+bmFtZSk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kX251bGxfb2Jq ZWN0KG5hbWUsICIle25hbWV9SSIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KG5hbWUpOworCQl9 CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1fb2JqLCAiJXtuYW1lfXMiLCBuYW1lKTsK KworCQlkZWZhdWx0dmFsID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKFBvaW50ZXJJ c1ZhbGlkKHBhcmFtLT5kZWZleHByKSkKKwkJeworCQkJY2hhcgkgICAqZXhwcjsKKworCQkJaWYg KGN1cmRlZiA9PSBOVUxMKQorCQkJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBsaXN0IHRv byBzaG9ydCIpOworCQkJZXhwciA9IGxmaXJzdChjdXJkZWYpOworCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChkZWZhdWx0dmFsLCAiJXt2YWx1ZX1zIiwgInZhbHVlIiwgZXhwcik7CisJCQljdXJk ZWYgPSBsbmV4dChkZWZhdWx0cywgY3VyZGVmKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90 X3ByZXNlbnQoZGVmYXVsdHZhbCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1fb2Jq LCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBu dW0rK10sIC0xKSk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1fb2JqLCAiJXtkZWZh dWx0fXMiLCBkZWZhdWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29i amVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJfQorCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZB KCIle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJCSJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCW9iamVjdElkKSk7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBfb2Jq LCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7YXJndW1lbnRzOiwgfXMi LCBwYXJhbXMpOworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwlpc2Z1 bmN0aW9uID0gKHByb2NGb3JtLT5wcm9raW5kICE9IFBST0tJTkRfUFJPQ0VEVVJFKTsKKworCWlm IChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJGVU5DVElPTiAle3Np Z25hdHVyZX1zIiwgdG1wX29iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOworCisJLyoKKwkgKiBBIHJldHVy biB0eXBlIGNhbiBhZG9wdCBvbmUgb2YgdHdvIGZvcm1zOiBlaXRoZXIgYSBbU0VUT0ZdIHNvbWVf dHlwZSwKKwkgKiBvciBhIFRBQkxFKGxpc3Qtb2YtdHlwZXMpLiAgV2UgY2FuIHRlbGwgdGhlIHNl Y29uZCBmb3JtIGJlY2F1c2Ugd2Ugc2F3CisJICogYSB0YWJsZSBwYXJhbSBhYm92ZSB3aGlsZSBz Y2FubmluZyB0aGUgYXJndW1lbnQgbGlzdC4KKwkgKi8KKwlpZiAodGFibGVfcGFyYW1zID09IE5V TEwpCisJeworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJCSJyZXR1 cm5fZm9ybSIsIE9ialR5cGVTdHJpbmcsICJwbGFpbiIpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBfb2JqLCAiJXtzZXRvZn1zIiwgInNldG9mIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3Jl dHNldCA/ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIl e3JldHR5cGV9VCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9y ZXR0eXBlLCAtMSkpOworCX0KKwllbHNlCisJeworCQlMaXN0CSAgICpyZXR0eXBlcyA9IE5JTDsK KwkJT2JqVHJlZSAgICAqcGFyYW1fb2JqOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgi VEFCTEUiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFibGUi KTsKKwkJZm9yICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4dChu b2RlLT5wYXJhbWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFtZXRl ciAqcGFyYW0gPSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1fb2JqID0gbmV3X29i anRyZWVfVkEoIiV7bmFtZX1JICV7dHlwZX1UIiwgMiwKKwkJCQkJCQkJCSAgIm5hbWUiLCBPYmpU eXBlU3RyaW5nLCBwYXJhbS0+bmFtZSwKKwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBhcnJheVt0eXBudW0rK10sIC0x KSk7CisJCQlyZXR0eXBlcyA9IGxhcHBlbmQocmV0dHlwZXMsIG5ld19vYmplY3Rfb2JqZWN0KHBh cmFtX29iaikpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiKCV7cmV0 dHlwZXM6LCB9cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwgdG1wX29iaik7 CisKKwkvKiBUUkFOU0ZPUk0gRk9SIFRZUEUgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUoIlRS QU5TRk9STSIpOworCisJbnR5cGVzID0gZ2V0X2Z1bmNfdHJmdHlwZXMocHJvY1R1cCwgJnRyZnR5 cGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnR5cGVzOyBpKyspCisJeworCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJInR5cGUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tpXSwgLTEp KTsKKwkJdHlwZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBfb2JqKTsKKwl9CisKKwlpZiAodHlwZXMp CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIiV7Zm9yX3R5cGU6LCB9cyIsIHR5cGVz KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcF9vYmopOworCisJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiTEFOR1VBR0UgJXtsYW5ndWFnZX1JIiwgImxhbmd1YWdlIiwK KwkJCQkJCSBOYW1lU3RyKGxhbmdGb3JtLT5sYW5uYW1lKSk7CisKKwlpZiAoaXNmdW5jdGlvbikK Kwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7d2luZG93fXMiLCAid2luZG93IiwK KwkJCQkJCQkgcHJvY0Zvcm0tPnByb2tpbmQgPT0gUFJPS0lORF9XSU5ET1cgPyAiV0lORE9XIiA6 ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt2b2xhdGlsaXR5fXMiLCAidm9s YXRpbGl0eSIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9PSBQUk9WT0xBVElMRV9W T0xBVElMRSA/CisJCQkJCQkJICJWT0xBVElMRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvdm9s YXRpbGUgPT0gUFJPVk9MQVRJTEVfU1RBQkxFID8KKwkJCQkJCQkgIlNUQUJMRSIgOiAiSU1NVVRB QkxFIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtwYXJhbGxlbF9zYWZldHl9 cyIsCisJCQkJCQkJICJwYXJhbGxlbF9zYWZldHkiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFy YWxsZWwgPT0gUFJPUEFSQUxMRUxfU0FGRSA/CisJCQkJCQkJICJQQVJBTExFTCBTQUZFIiA6CisJ CQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9PSBQUk9QQVJBTExFTF9SRVNUUklDVEVEID8K KwkJCQkJCQkgIlBBUkFMTEVMIFJFU1RSSUNURUQiIDogIlBBUkFMTEVMIFVOU0FGRSIpOworCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7bGVha3Byb29mfXMiLCAibGVha3Byb29mIiwK KwkJCQkJCQkgcHJvY0Zvcm0tPnByb2xlYWtwcm9vZiA/ICJMRUFLUFJPT0YiIDogIiIpOworCQlh cHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3N0cmljdH1zIiwgInN0cmljdCIsCisJCQkJCQkJ IHByb2NGb3JtLT5wcm9pc3N0cmljdCA/CisJCQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJ TlBVVCIgOgorCQkJCQkJCSAiQ0FMTEVEIE9OIE5VTEwgSU5QVVQiKTsKKworCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICIle3NlY3VyaXR5X2RlZmluZXJ9cyIsCisJCQkJCQkJICJzZWN1cml0 eV9kZWZpbmVyIiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3NlY2RlZiA/CisJCQkJCQkJICJTRUNV UklUWSBERUZJTkVSIiA6ICJTRUNVUklUWSBJTlZPS0VSIik7CisKKwkJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXtjb3N0fXMiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9WQSgiQ09TVCAle2Nv c3R9biIsIDEsCisJCQkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJCQlw cm9jRm9ybS0+cHJvY29zdCkpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiUk9XUyIpOwor CQlpZiAocHJvY0Zvcm0tPnByb3Jvd3MgPT0gMCkKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBf b2JqKTsKKwkJZWxzZQorCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBfb2JqLCAiJXtyb3dzfW4i LCBwcm9jRm9ybS0+cHJvcm93cyk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cm93 c31zIiwgdG1wX29iaik7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7bmFt ZX1zIik7CisJCWlmIChwcm9jRm9ybS0+cHJvc3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJndHlw ZXNbXSA9IHsgSU5URVJOQUxPSUQgfTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5 IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVz b2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfXMiLCAibmFtZSIsCisJCQkJCQkJ CSBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJ CQkJCQkJCQlOSUwsIGFyZ3R5cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJ CQkJCQkJCQkJRVhQUl9LSU5EX05PTkUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wX29iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtzdXBwb3J0 fXMiLCB0bXBfb2JqKTsKKwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJewor CQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAo c3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRT dG10ICpzc3RtdCA9IChWYXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIJICAg KnZhbHVlID0gRXh0cmFjdFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcF9vYmogPSBk ZXBhcnNlX0Z1bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQkJ c2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQl9CisJ fQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtzZXRfb3B0aW9uczogfXMiLCBzZXRzKTsK KworCS8qIEFkZCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiAqLworCSh2b2lkKSBTeXNDYWNoZUdl dEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwgQW51bV9wZ19wcm9jX3Byb3NxbGJvZHksICZpc251bGwp OworCWlmIChwcm9jRm9ybS0+cHJvbGFuZyA9PSBTUUxsYW5ndWFnZUlkICYmICFpc251bGwpCisJ eworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBy aW50X2Z1bmN0aW9uX3NxbGJvZHkoJmJ1ZiwgcHJvY1R1cCk7CisKKwkJYXBwZW5kX3N0cmluZ19v YmplY3QocmV0LCAiJXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJIGJ1Zi5k YXRhKTsKKwl9CisJZWxzZSBpZiAocHJvYmluID09IE5VTEwpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIkFTICV7ZGVmaW5pdGlvbn1MIiwgImRlZmluaXRpb24iLCBzb3VyY2UpOworCWVs c2UKKwl7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFTICV7b2JqZmlsZX1MIiwgIm9i amZpbGUiLCBwcm9iaW4pOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIsICV7c3ltYm9s fUwiLCAic3ltYm9sIiwgc291cmNlKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUobGFuZ1R1cCk7 CisJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDUkVBVEUgT1BFUkFUT1IgQ0xBU1MgY29tbWFuZC4KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9RCAle2RlZmF1bHR9 cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORworICogJXthbW5hbWV9SSAle29wZmFtaWx5fXMgQVMg JXtpdGVtczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BDbGFz c1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9wY29pZCA9IGNtZC0+ZC5j cmVhdGVvcGMuYWRkcmVzcy5vYmplY3RJZDsKKwlIZWFwVHVwbGUJb3BjVHVwOworCUhlYXBUdXBs ZQlvcGZUdXA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfb3BjbGFzcyBv cGNGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUxpc3QJ ICAgKmxpc3Q7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFyc2UgU1FMIGNv bW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5p bl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUx KENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQob3BjVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xh c3Mgd2l0aCBPSUQgJXUiLCBvcGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBH RVRTVFJVQ1Qob3BjVHVwKTsKKworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9J RCwgb3BjRm9ybS0+b3BjZmFtaWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3 aXRoIE9JRCAldSIsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29w ZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgT1BFUkFUT1IgQ0xBU1MgJXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7dHlw ZX1UIFVTSU5HICV7YW1uYW1lfUkiLCA0LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSksCisJCQkJCQkgImRl ZmF1bHQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG9wY0Zvcm0tPm9wY2RlZmF1bHQgPyAiREVG QVVMVCIgOiAiIiwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUob3BjRm9ybS0+b3BjaW50eXBlLCAtMSksCisJCQkJCQkgImFtbmFtZSIs IE9ialR5cGVTdHJpbmcsIGdldF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCkpOworCisJLyoK KwkgKiBBZGQgdGhlIEZBTUlMWSBjbGF1c2UsIGJ1dCBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBh bmQgbmFtZXNwYWNlIGFzIHRoZQorCSAqIG9wY2xhc3MsIHRoZW4gaGF2ZSBpdCBleHBhbmQgdG8g ZW1wdHkgYmVjYXVzZSBpdCB3b3VsZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUgb3BmYW1p bHkgd2FzIGNyZWF0ZWQgaW50ZXJuYWxseS4KKwkgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkZBTUlMWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCSJvcGZhbWlseSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVz cGFjZSwKKwkJCQkJCQkJCQkJCQkgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSkpOworCisJaWYg KHN0cmNtcChOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpLCBOYW1lU3RyKG9wY0Zvcm0tPm9wY25h bWUpKSA9PSAwICYmCisJCW9wZkZvcm0tPm9wZm5hbWVzcGFjZSA9PSBvcGNGb3JtLT5vcGNuYW1l c3BhY2UpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7b3BmYW1pbHl9cyIsIHRtcF9vYmopOworCisJLyoKKwkgKiBBZGQgdGhl IGluaXRpYWwgaXRlbSBsaXN0LiAgTm90ZSB3ZSBhbHdheXMgYWRkIHRoZSBTVE9SQUdFIGNsYXVz ZSwgZXZlbgorCSAqIHdoZW4gaXQgaXMgaW1wbGljaXQgaW4gdGhlIG9yaWdpbmFsIGNvbW1hbmQu CisJICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJTVE9SQUdFIik7CisJYXBwZW5kX29iamVj dF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShPaWRJc1ZhbGlkKG9wY0Zvcm0tPm9wY2tleXR5cGUpID8KKwkJCQkJCQkJCQkJICBvcGNGb3Jt LT5vcGNrZXl0eXBlIDogb3BjRm9ybS0+b3BjaW50eXBlLAorCQkJCQkJCQkJCQkgIC0xKSk7CisJ bGlzdCA9IGxpc3RfbWFrZTEobmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogQWRk IHRoZSBkZWNsYXJlZCBvcGVyYXRvcnMgKi8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVv cGMub3BlcmF0b3JzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7 CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uICV7b3BlcmF0 b3J9Tygle2x0eXBlfVQsICV7cnR5cGV9VCkiLCA0LAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUlu dGVnZXIsIG9wZXItPm51bWJlciwKKwkJCQkJCQkJIm9wZXJhdG9yIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJCW9wZXItPm9iamVjdCksCisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSks CisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBBZGQgdGhlIEZPUiBTRUFSQ0gg LyBGT1IgT1JERVIgQlkgY2xhdXNlICovCisJCWlmIChvcGVyLT5zb3J0ZmFtaWx5ID09IEludmFs aWRPaWQpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwdXJwb3NlfXMiLCAi cHVycG9zZSIsCisJCQkJCQkJCSAiRk9SIFNFQVJDSCIpOworCQllbHNlCisJCXsKKwkJCU9ialRy ZWUgICAgKnRtcF9vYmoyOworCisJCQl0bXBfb2JqMiA9IG5ld19vYmp0cmVlKCJGT1IgT1JERVIg QlkgJXtvcGZhbWlseX1EIik7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqMiwgIm9w ZmFtaWx5IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZh bWlseVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgb3Blci0+c29ydGZhbWlseSkpOworCQkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cHVycG9zZX1zIiwgdG1wX29iajIpOwor CQl9CisKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikp OworCX0KKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKwlmb3Jl YWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMucHJvY2VkdXJlcykKKwl7CisJCU9wRmFtaWx5TWVt YmVyICpwcm9jID0gbGZpcnN0KGNlbGwpOworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9ybV9w Z19wcm9jIHByb2NGb3JtOworCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJTGlzdAkgICAqYXJn bGlzdCA9IE5JTDsKKwkJaW50CQkJaTsKKworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBS T0NPSUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCWlmICghSGVhcFR1cGxl SXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJCSBwcm9jLT5vYmplY3QpOworCQlwcm9jRm9y bSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9jVHVwKTsKKworCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1 bmN0aW9ufUQiLCA0LAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJl ciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVf Zm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSks CisJCQkJCQkJCSJmdW5jdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgTmFt ZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlwcm9hcmd0eXBlcyA9IHByb2NGb3JtLT5w cm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7 IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqYXJnOworCisJCQlhcmcgPSBuZXdfb2JqdHJlZV9m b3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJYXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlz dCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0KKworCQlhcHBlbmRfZm9ybWF0X3N0cmlu Zyh0bXBfb2JqLCAiKCIpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3R5 cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIiki KTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiQVMgJXtpdGVtczosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3Bm VHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlT3BGYW1pbHlTdG10IChDUkVBVEUgT1BFUkFUT1IgRkFNSUxZ KQorICoKKyAqIEdpdmVuIGEgb3BlcmF0b3IgZmFtaWx5IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBj cmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgT1BFUkFU T1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlT3BGYW1pbHkoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJSGVhcFR1cGxlCW9wZlR1cDsKKwlIZWFwVHVwbGUJYW1UdXA7CisJRm9ybV9wZ19v cGZhbWlseSBvcGZGb3JtOworCUZvcm1fcGdfYW0JYW1Gb3JtOworCU9ialRyZWUgICAgKnJldDsK KworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1 Iiwgb2JqZWN0SWQpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9w ZlR1cCk7CisKKwlhbVR1cCA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1 bShvcGZGb3JtLT5vcGZtZXRob2QpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3aXRo IE9JRCAldSIsCisJCQkgb3BmRm9ybS0+b3BmbWV0aG9kKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19h bSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BF UkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1JIiwgMiwKKwkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3BmRm9ybS0+ b3BmbmFtZSkpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGFtRm9y bS0+YW1uYW1lKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCVJlbGVhc2VTeXNDYWNo ZShvcGZUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFkZCBjb21tb24gY2xhdXNl cyB0byBDcmVhdGVQb2xpY3kgb3IgQWx0ZXJQb2xpY3kgZGVwYXJzZSBvYmplY3RzLgorICovCitz dGF0aWMgdm9pZAorYWRkX3BvbGljeV9jbGF1c2VzKE9ialRyZWUgKnJldCwgT2lkIHBvbGljeU9p ZCwgTGlzdCAqcm9sZXMsIGJvb2wgZG9fcXVhbCwKKwkJCQkgICBib29sIGRvX3dpdGhfY2hlY2sp Cit7CisJUmVsYXRpb24JcG9sUmVsID0gdGFibGVfb3BlbihQb2xpY3lSZWxhdGlvbklkLCBBY2Nl c3NTaGFyZUxvY2spOworCUhlYXBUdXBsZQlwb2xUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlf b2lkKHBvbFJlbCwgQW51bV9wZ19wb2xpY3lfb2lkLCBwb2xpY3lPaWQpOworCUZvcm1fcGdfcG9s aWN5IHBvbEZvcm07CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSB3aXRoIE9JRCAldSIsIHBvbGlj eU9pZCk7CisKKwlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5KSBHRVRTVFJVQ1QocG9sVHVwKTsK KworCS8qIEFkZCB0aGUgIk9OIHRhYmxlIiBjbGF1c2UgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICJPTiAle3RhYmxlfUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHBvbEZvcm0tPnBvbHJlbGlkKSk7 CisKKwkvKgorCSAqIEFkZCB0aGUgIlRPIHJvbGUiIGNsYXVzZSwgaWYgYW55LiAgSW4gdGhlIENS RUFURSBjYXNlLCBpdCBhbHdheXMKKwkgKiBjb250YWlucyBhdCBsZWFzdCBQVUJMSUMsIGJ1dCBp biB0aGUgQUxURVIgY2FzZSBpdCBtaWdodCBiZSBlbXB0eS4KKwkgKi8KKwlpZiAocm9sZXMpCisJ eworCQlMaXN0CSAgICpsaXN0ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVh Y2goY2VsbCwgcm9sZXMpCisJCXsKKwkJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikg bGZpcnN0KGNlbGwpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29i amVjdF9vYmplY3QobmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKHNwZWMpKSk7CisJCX0KKwkJYXBw ZW5kX2FycmF5X29iamVjdChyZXQsICJUTyAle3JvbGU6LCB9UiIsIGxpc3QpOworCX0KKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJLyogQWRkIHRoZSBVU0lORyBjbGF1c2Us IGlmIGFueSAqLworCWlmIChkb19xdWFsKQorCXsKKwkJRGF0dW0JCWRlcGFyc2VkOworCQlEYXR1 bQkJc3RvcmVkZXhwcjsKKwkJYm9vbAkJaXNudWxsOworCisJCXN0b3JlZGV4cHIgPSBoZWFwX2dl dGF0dHIocG9sVHVwLCBBbnVtX3BnX3BvbGljeV9wb2xxdWFsLAorCQkJCQkJCQkgIFJlbGF0aW9u R2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9nKEVSUk9S LCAibnVsbCBwb2xxdWFsIGV4cHJlc3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJ ZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBw b2xGb3JtLT5wb2xyZWxpZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlVTSU5HICgl e2V4cHJlc3Npb259cykiLCAiZXhwcmVzc2lvbiIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJp bmcoZGVwYXJzZWQpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKwor CS8qIEFkZCB0aGUgV0lUSCBDSEVDSyBjbGF1c2UsIGlmIGFueSAqLworCWlmIChkb193aXRoX2No ZWNrKQorCXsKKwkJRGF0dW0JCWRlcGFyc2VkOworCQlEYXR1bQkJc3RvcmVkZXhwcjsKKwkJYm9v bAkJaXNudWxsOworCisJCXN0b3JlZGV4cHIgPSBoZWFwX2dldGF0dHIocG9sVHVwLCBBbnVtX3Bn X3BvbGljeV9wb2x3aXRoY2hlY2ssCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihwb2xSZWwp LCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHBvbHdpdGhj aGVjayBleHByZXNzaW9uIGluIHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0g RGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9s cmVsaWQpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJXSVRIIENIRUNLICgle2V4cHJl c3Npb259cykiLAorCQkJCQkJCSAiZXhwcmVzc2lvbiIsIFRleHREYXR1bUdldENTdHJpbmcoZGVw YXJzZWQpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJlbGF0 aW9uX2Nsb3NlKHBvbFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBDcmVhdGVQb2xpY3lTdG10IChDUkVBVEUgUE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9saWN5 IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBDUkVBVEUgUE9MSUNZICV7aWRlbnRpdHl9SQorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQ3JlYXRlUG9saWN5U3RtdCAqbm9kZSA9IChDcmVhdGVQb2xpY3lTdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JF QVRFIFBPTElDWSAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVT dHJpbmcsIG5vZGUtPnBvbGljeV9uYW1lKTsKKworCS8qIEFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1 ZmYgKi8KKwlhZGRfcG9saWN5X2NsYXVzZXMocmV0LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsIG5v ZGUtPnF1YWwgIT0gTlVMTCwKKwkJCQkJICAgbm9kZS0+d2l0aF9jaGVjayAhPSBOVUxMKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJQb2xpY3lTdG10IChBTFRF UiBQT0xJQ1kpCisgKgorICogR2l2ZW4gYSBwb2xpY3kgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSBv ZiB0aGUgQUxURVIgUE9MSUNZIGNvbW1hbmQsIHJldHVybgorICogYW4gT2JqVHJlZSByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVS IFBPTElDWSAle2lkZW50aXR5fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl clBvbGljeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJQb2xp Y3lTdG10ICpub2RlID0gKEFsdGVyUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lkZW50aXR5 fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBvbGljeV9u YW1lKTsKKworCS8qIEFkZCB0aGUgcmVzdCBvZiB0aGUgc3R1ZmYgKi8KKwlhZGRfcG9saWN5X2Ns YXVzZXMocmV0LCBvYmplY3RJZCwgbm9kZS0+cm9sZXMsIG5vZGUtPnF1YWwgIT0gTlVMTCwKKwkJ CQkJICAgbm9kZS0+d2l0aF9jaGVjayAhPSBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlU2NoZW1hU3RtdC4KKyAqCisgKiBHaXZlbiBhIHNjaGVtYSBP SUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhv cml6YXRpb259cworKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1hU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10ICpu b2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsK KwlPYmpUcmVlICAgICphdXRoOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTQ0hF TUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkiLCAyLAorCQkJCQkJICJpZl9ub3RfZXhpc3Rz IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBF WElTVFMiIDogIiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUt PnNjaGVtYW5hbWUgPyBub2RlLT5zY2hlbWFuYW1lIDogIiIpOworCisJYXV0aCA9IG5ld19vYmp0 cmVlKCJBVVRIT1JJWkFUSU9OIik7CisJaWYgKG5vZGUtPmF1dGhyb2xlKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0aW9uX3JvbGV9SSIsCisJCQkJCQkJICJhdXRo b3JpemF0aW9uX3JvbGUiLAorCQkJCQkJCSBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5hdXRocm9s ZSkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdChhdXRoLCAiJXthdXRob3JpemF0 aW9uX3JvbGV9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQoYXV0aCk7CisJfQorCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7YXV0aG9yaXphdGlvbn1zIiwgYXV0aCk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZG9tYWluLgor ICovCitzdGF0aWMgY2hhciAqCitEb21haW5HZXREZWZhdWx0KEhlYXBUdXBsZSBkb21UdXAsIGJv b2wgbWlzc2luZ19vaykKK3sKKwlEYXR1bQkJZGVmOworCU5vZGUJICAgKmRlZnZhbDsKKwljaGFy CSAgICpkZWZzdHI7CisJYm9vbAkJaXNudWxsOworCisJZGVmID0gU3lzQ2FjaGVHZXRBdHRyKFRZ UEVPSUQsIGRvbVR1cCwgQW51bV9wZ190eXBlX3R5cGRlZmF1bHRiaW4sCisJCQkJCQkgICZpc251 bGwpOworCWlmIChpc251bGwpCisJeworCQlpZiAoIW1pc3Npbmdfb2spCisJCQllbG9nKEVSUk9S LCAiZG9tYWluIFwiJXNcIiBkb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSIsCisJCQkJTmFt ZVN0cigoKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKGRvbVR1cCkpLT50eXBuYW1lKSk7CisJCWVs c2UKKwkJCXJldHVybiBOVUxMOworCX0KKworCWRlZnZhbCA9IHN0cmluZ1RvTm9kZShUZXh0RGF0 dW1HZXRDU3RyaW5nKGRlZikpOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWws IE5VTEwgLyogZHBjb250ZXh0PyAqLyAsCisJCQkJCQkJCWZhbHNlLCBmYWxzZSk7CisKKwlyZXR1 cm4gZGVmc3RyOworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyRG9tYWluU3RtdC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIERFRkFV TFQKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBERUZBVUxUICV7ZGVm YXVsdH1zCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIE5PVCBOVUxM CisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwKKyAqIE9S CisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIEFERCBDT05TVFJBSU5UICV7Y29uc3RyYWlu dF9uYW1lfXMgJXtkZWZpbml0aW9ufXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0 eX1EIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgJXtjb25zdHJhaW50X25hbWV9cyAle2Nhc2Nh ZGV9cworICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgVkFMSURBVEUgQ09OU1RS QUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf QWx0ZXJEb21haW5TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLAorCQkJCQkJT2Jq ZWN0QWRkcmVzcyBjb25zdHJhaW50QWRkcikKK3sKKwlBbHRlckRvbWFpblN0bXQgKm5vZGUgPSAo QWx0ZXJEb21haW5TdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZG9tVHVwOworCUZvcm1f cGdfdHlwZSBkb21Gb3JtOworCU9ialRyZWUgICAgKnJldDsKKworCWRvbVR1cCA9IFNlYXJjaFN5 c0NhY2hlMShUWVBFT0lELCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGRvbVR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBP SUQgJXUiLCBvYmplY3RJZCk7CisJZG9tRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChk b21UdXApOworCisJc3dpdGNoIChub2RlLT5zdWJ0eXBlKQorCXsKKwkJY2FzZSAnVCc6CisJCQkv KiBTRVQgREVGQVVMVCAvIERST1AgREVGQVVMVCAqLworCQkJaWYgKG5vZGUtPmRlZiA9PSBOVUxM KQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERS T1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBk ZWZhdWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpKTsKKwkJCWVsc2UKKwkJCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgREVGQVVMVCAl e2RlZmF1bHR9cyIsIDMsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGRl ZmF1bHQiLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCQkgImRlZmF1bHQi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIERvbWFpbkdldERlZmF1bHQoZG9tVHVwLCBmYWxz ZSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ04nOgorCQkJLyogRFJPUCBOT1QgTlVMTCAqLworCQkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBOT1Qg TlVMTCIsIDIsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51 bGwiLAorCQkJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJICBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkJICAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2Ug J08nOgorCQkJLyogU0VUIE5PVCBOVUxMICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgRE9NQUlOICV7aWRlbnRpdHl9RCBTRVQgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkgInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+ dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkp KTsKKwkJCWJyZWFrOworCQljYXNlICdDJzoKKwkJCS8qCisJCQkgKiBBREQgQ09OU1RSQUlOVC4g IE9ubHkgQ0hFQ0sgY29uc3RyYWludHMgYXJlIHN1cHBvcnRlZCBieQorCQkJICogZG9tYWlucwor CQkJICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9 RCBBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zICV7ZGVmaW5pdGlvbn1zIiwgNCwK KwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIo ZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkgImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCSBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0cmFpbnRBZGRyLm9iamVj dElkKSwKKwkJCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHBn X2dldF9jb25zdHJhaW50ZGVmX3N0cmluZyhjb25zdHJhaW50QWRkci5vYmplY3RJZCkpOworCQkJ YnJlYWs7CisJCWNhc2UgJ1YnOgorCQkJLyogVkFMSURBVEUgQ09OU1RSQUlOVCAqLworCQkJLyoK KwkJCSAqIFByb2Nlc3Mgc3VidHlwZT1zcGVjaWZpYyBvcHRpb25zLiBWYWxpZGF0aW9uIGEgY29u c3RyYWludAorCQkJICogcmVxdWlyZXMgaXRzIG5hbWUuCisJCQkgKi8KKwkJCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFZBTElEQVRFIENPTlNUUkFJTlQg JXtjb25zdHJhaW50X25hbWV9cyIsIDMsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJ2YWxpZGF0ZSBjb25zdHJhaW50IiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJ CQkgImNvbnN0cmFpbnRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5hbWUpOworCQkJYnJl YWs7CisJCWNhc2UgJ1gnOgorCQkJeworCQkJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJCQkv KiBEUk9QIENPTlNUUkFJTlQgKi8KKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9N QUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTICV7Y29uc3RyYWludF9u YW1lfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3Ry YWludCIsCisJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQlu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkJCU5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJCQkJCQkJCSJjb25zdHJhaW50 X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uYW1lKTsKKworCQkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBlQm9v bCwgbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKworCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwgdG1wX29iaik7CisJCQl9CisJCQlicmVhazsKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHN1YnR5cGUgJWMiLCBub2RlLT5zdWJ0 eXBlKTsKKwl9CisKKwkvKiBEb25lICovCisJUmVsZWFzZVN5c0NhY2hlKGRvbVR1cCk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVN0YXRzU3RtdC4KKyAqCisg KiBHaXZlbiBhIHN0YXRpc3RpY3MgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBTVEFUSVNUSUNTICV7aWZfbm90 X2V4aXN0c31zICV7aWRlbnRpdHl9RCBPTiAle2V4cHI6LCB9cyBGUk9NICV7c3RhdF90YWJsZV9p ZGVudGl0eX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3RhdGlzdGlj c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3RhdHNTdG10 ICpub2RlID0gKENyZWF0ZVN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJRm9ybV9wZ19zdGF0aXN0 aWNfZXh0IHN0YXRmb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJdHVwOworCURh dHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7CisJTGlzdAkgICAqc3RhdGV4cHJzID0gTklMOwor CisJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9iamVjdElkR2V0RGF0dW0ob2Jq ZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRpc3RpYyB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsK KworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3RhdGlzdGljX2V4dCkgR0VUU1RSVUNUKHR1cCk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFNUQVRJU1RJQ1MgJXtpZl9ub3RfZXhpc3Rz fXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKHN0YXRmb3JtLT5zdHhuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIo c3RhdGZvcm0tPnN0eG5hbWUpKSk7CisKKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihTVEFURVhU T0lELCB0dXAsIEFudW1fcGdfc3RhdGlzdGljX2V4dF9zdHhleHBycywKKwkJCQkJCQkmaXNudWxs KTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCQlSZWxhdGlvbglzdGF0 c3JlbDsKKwkJTGlzdAkgICAqY29udGV4dDsKKwkJTGlzdAkgICAqZXhwcnMgPSBOSUw7CisJCWNo YXIJICAgKmV4cHJzU3RyaW5nOworCisJCXN0YXRzcmVsID0gcmVsYXRpb25fb3BlbihzdGF0Zm9y bS0+c3R4cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRl eHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRzcmVsKSwKKwkJCQkJCQkJCSAgUmVs YXRpb25HZXRSZWxpZChzdGF0c3JlbCkpOworCisJCWV4cHJzU3RyaW5nID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhkYXR1bSk7CisJCWV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3Ry aW5nKTsKKworCQlmb3JlYWNoKGxjLCBleHBycykKKwkJeworCQkJTm9kZQkgICAqZXhwciA9IChO b2RlICopIGxmaXJzdChsYyk7CisJCQljaGFyCSAgICpzdGF0ZXhwcjsKKworCQkJc3RhdGV4cHIg PSBkZXBhcnNlX2V4cHJlc3Npb24oZXhwciwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwkJCXN0 YXRleHBycyA9IGxhcHBlbmQoc3RhdGV4cHJzLCBuZXdfc3RyaW5nX29iamVjdChzdGF0ZXhwcikp OworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJPTiAle2V4cHI6LCB9cyIsIHN0 YXRleHBycyk7CisJCXBmcmVlKGV4cHJzU3RyaW5nKTsKKwkJcmVsYXRpb25fY2xvc2Uoc3RhdHNy ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJfQorCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RB VEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4a2V5cywKKwkJCQkJCQkmaXNu dWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCWludAkJCWtleW5vOworCQljaGFyCSAgICphdHRu YW1lOworCQlMaXN0CSAgICpzdGF0Y29scyA9IE5JTDsKKwkJaW50MnZlY3RvciAqaW5kb3B0aW9u OworCisJCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihkYXR1bSk7 CisKKwkJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaW5kb3B0aW9uLT5kaW0xOyBrZXlubysrKQor CQl7CisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoc3RhdGZvcm0tPnN0eHJlbGlkLCBpbmRvcHRp b24tPnZhbHVlc1trZXlub10sCisJCQkJCQkJCSAgZmFsc2UpOworCQkJc3RhdGNvbHMgPSBsYXBw ZW5kKHN0YXRjb2xzLCBuZXdfc3RyaW5nX29iamVjdChhdHRuYW1lKSk7CisJCX0KKworCQlpZiAo aW5kb3B0aW9uLT5kaW0xKQorCQl7CisJCQkvKiBBcHBlbmQgYSAnLCcgaWYgc3RhdGV4cHJzIGlz IHByZXNlbnQgZWxzZSBhcHBlbmQgJ09OJyAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0 LCAiJXtjb21tYX1zIiwgImNvbW1hIiwKKwkJCQkJCQkJIHN0YXRleHBycyA/ICIsIiA6ICJPTiIp OworCQkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2NvbHM6LCB9cyIsIHN0YXRjb2xzKTsK KwkJfQorCX0KKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZST00gJXtzdGF0X3RhYmxl X2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShnZXRfcmVsX25h bWVzcGFjZShzdGF0Zm9ybS0+c3R4cmVsaWQpLAorCQkJCQkJCQkJCQkJICBnZXRfcmVsX25hbWUo c3RhdGZvcm0tPnN0eHJlbGlkKSkpOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAo Q1JFQVRFIFNFUlZFUikKKyAqCisgKiBHaXZlbiBhIHNlcnZlciBPSUQgYW5kIHRoZSBwYXJzZSB0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0 aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFNFUlZF UiAle2lkZW50aXR5fUkgJXt0eXBlfXMgJXt2ZXJzaW9ufXMgRk9SRUlHTiBEQVRBIFdSQVBQRVIg JXtmZHd9SQorICogJXtnZW5lcmljX29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0NyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNyZWF0ZUZvcmVpZ25TZXJ2ZXJTdG10ICpub2RlID0gKENyZWF0ZUZvcmVpZ25T ZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAq dG1wOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTRVJWRVIgJXtpZGVudGl0eX1J IiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJuYW1l KTsKKworCS8qIEFkZCBhIFRZUEUgY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZSgiVFlQRSIpOworCWlmIChub2RlLT5zZXJ2ZXJ0eXBlKQorCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXAsICIle3R5cGV9TCIsICJ0eXBlIiwgbm9kZS0+c2VydmVydHlwZSk7CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3R5 cGV9cyIsIHRtcCk7CisKKwkvKiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICovCisJdG1w ID0gbmV3X29ianRyZWUoIlZFUlNJT04iKTsKKwlpZiAobm9kZS0+dmVyc2lvbikKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9ufUwiLCAidmVyc2lvbiIsIG5vZGUtPnZlcnNp b24pOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXt2ZXJzaW9ufXMiLCB0bXApOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtmZHd9SSIsICJmZHciLAorCQkJCQkJIG5vZGUt PmZkd25hbWUpOworCisJLyogQWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNfb3B0aW9uc31zIiwKKwkJCQkJCSBkZXBh cnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGb3JlaWduU2VydmVyU3RtdCAoQUxURVIgU0VSVkVS KQorICoKKyAqIEdpdmVuIGEgc2VydmVyIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21t YW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTRVJWRVIgJXtpZGVudGl0eX1J ICV7dmVyc2lvbn1zICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUFsdGVyRm9yZWlnblNlcnZlclN0bXQgKm5vZGUgPSAoQWx0ZXJGb3JlaWduU2Vy dmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqdG1wOworCisJLyogQWRkIGEgVkVS U0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJWRVJTSU9OIik7CisJ aWYgKG5vZGUtPmhhc192ZXJzaW9uICYmIG5vZGUtPnZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgInZlcnNpb24iLCBub2RlLT52ZXJzaW9uKTsKKwll bHNlIGlmIChub2RlLT5oYXNfdmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi dmVyc2lvbiIsICJ2ZXJzaW9uIiwgIk5VTEwiKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTRVJWRVIgJXtpZGVudGl0 eX1JICV7dmVyc2lvbn1zICV7Z2VuZXJpY19vcHRpb25zfXMiLCAzLAorCQkJCQkJICAiaWRlbnRp dHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zZXJ2ZXJuYW1lLAorCQkJCQkJICAidmVyc2lvbiIs IE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAgImdlbmVyaWNfb3B0aW9ucyIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlUExhbmdTdG10LgorICoKKyAqIEdpdmVuIGEg bGFuZ3VhZ2UgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyAle3RydXN0ZWR9cyBMQU5H VUFHRSAle2lkZW50aXR5fXMgSEFORExFUiAle2hhbmRsZXJ9RAorICogJXtpbmxpbmV9cyAle3Zh bGlkYXRvcn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlTGFuZ1N0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlUExhbmdTdG10ICpub2Rl ID0gKENyZWF0ZVBMYW5nU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9i alRyZWUgICAgKnRtcDsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlGb3JtX3BnX2xhbmd1YWdlIGxh bmdGb3JtOworCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELAorCQkJCQkJCSAg T2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5n VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdp dGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdF VFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9y ZXBsYWNlfXMgJXt0cnVzdGVkfXMgTEFOR1VBR0UgJXtpZGVudGl0eX1zIiwgMywKKwkJCQkJCSAi b3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBS RVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0cnVzdGVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBs YW5nRm9ybS0+bGFucGx0cnVzdGVkID8gIlRSVVNURUQiIDogIiIsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cGxuYW1lKTsKKworCWlmIChub2RlLT5wbGhhbmRsZXIg IT0gTklMKQorCXsKKwkJLyogQWRkIHRoZSBIQU5ETEVSIGNsYXVzZSAqLworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICJIQU5ETEVSICV7aGFuZGxlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBs YW5nRm9ybS0+bGFucGxjYWxsZm9pZCkpOworCisJCS8qIEFkZCB0aGUgSU5MSU5FIGNsYXVzZSwg aWYgYW55ICovCisJCXRtcCA9IG5ld19vYmp0cmVlKCJJTkxJTkUiKTsKKwkJaWYgKE9pZElzVmFs aWQobGFuZ0Zvcm0tPmxhbmlubGluZSkpCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cCwgIiV7aGFuZGxlcl9uYW1lfUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbmlu bGluZSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle2lubGluZX1zIiwgdG1wKTsKKworCQkvKiBBZGQgdGhl IFZBTElEQVRPUiBjbGF1c2UsIGlmIGFueSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgiVkFMSURB VE9SIik7CisJCWlmIChPaWRJc1ZhbGlkKGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKQorCQl7CisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkJIGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKTsKKwkJfQorCQllbHNlCisJCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2YWxp ZGF0b3J9cyIsIHRtcCk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGb3JlaWduVGFibGVTdG10IChD UkVBVEUgRk9SRUlHTiBUQUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBDUkVBVEUgRk9SRUlHTiBUQUJMRSAl e2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQKKyAqIFsoJXt0YWJsZV9lbGVtZW50czosIH1z KSAle2luaGVyaXRzfXMKKyAqICB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EICgl e3R5cGVkX3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7cGFydGl0aW9uX2JvdW5kfXNdCisgKiBTRVJW RVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2VfQ3JlYXRlRm9yZWlnblRhYmxlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlDcmVhdGVGb3JlaWduVGFibGVTdG10ICpzdG10ID0gKENyZWF0ZUZvcmVpZ25U YWJsZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3Bl bihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJT2Jq VHJlZSAgICAqY3JlYXRlU3RtdDsKKwlPYmpUcmVlICAgICp0bXBvYmo7CisJTGlzdAkgICAqdGFi bGVlbHRzID0gTklMOworCisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRk9SRUlH TiBUQUJMRSIpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWZfbm90 X2V4aXN0c31zIiwgImlmX25vdF9leGlzdHMiLAorCQkJCQkJIHN0bXQtPmJhc2UuaWZfbm90X2V4 aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3Qo Y3JlYXRlU3RtdCwgIiV7aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwlkcGNvbnRleHQgPSBkZXBh cnNlX2NvbnRleHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJ CQkJCW9iamVjdElkKTsKKwlpZiAoc3RtdC0+YmFzZS5wYXJ0Ym91bmQpCisJeworCQkvKiBQYXJ0 aXRpb25lZCB0YWJsZSAqLworCQlMaXN0CSAgICpwYXJlbnRzOworCQlPYmpFbGVtICAgICplbGVt OworCisJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCk7CisJCWVsZW0g PSAoT2JqRWxlbSAqKSBsaW5pdGlhbChwYXJlbnRzKTsKKworCQlBc3NlcnQobGlzdF9sZW5ndGgo cGFyZW50cykgPT0gMSk7CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlBB UlRJVElPTiBPRiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3Bh cmVudF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKworCQl0 YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIHN0bXQtPmJhc2UudGFi bGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICB0cnVlLCAvKiB0eXBlZCB0YWJsZSAqLwor CQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9i dGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCXRt cG9iaiA9IG5ld19vYmp0cmVlKCIiKTsKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wb2JqLCAiKCV7ZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNl CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiJXt0eXBlZF90YWJsZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKworCQkv KgorCQkgKiBBZGQgdGhlIHBhcnRpdGlvbl9ib3VuZF9zcGVjLCBpLmUuIHRoZSBGT1IgVkFMVUVT IGNsYXVzZS4KKwkJICogR2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBw YXJ0Ym91bmQgaW4gdGhlIHBhcnNldHJlZQorCQkgKiBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmln aW5hbCBwYXJ0Ym91bmQgZXhwcmVzc2lvbiB3aGljaCBoYXZlbid0CisJCSAqIGJlZW4gdHJhbnNm b3JtZWQuCisJCSAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0 aXRpb25fYm91bmR9cyIsICJwYXJ0aXRpb25fYm91bmQiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBh cnRpdGlvbkJvdW5kKG9iamVjdElkKSk7CisKKwkJLyogTm8gUEFSVElUSU9OIEJZIGNsYXVzZSBm b3IgQ1JFQVRFIEZPUkVJR04gVEFCTEUgKi8KKwl9CisJZWxzZQorCXsKKwkJdGFibGVlbHRzID0g ZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHJlbGF0aW9uLCBzdG10LT5iYXNlLnRhYmxlRWx0cywgZHBj b250ZXh0LAorCQkJCQkJCQkJCSAgZmFsc2UsCQkvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJ CQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5D b25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFi bGVlbHRzKQorCQkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVfZWxl bWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRfZm9ybWF0X3N0cmlu ZyhjcmVhdGVTdG10LCAiKCkiKTsKKworCQkvKgorCQkqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZp Y2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSogcGFyZW50cyBm cm9tIHRoZSBwYXJzZXIgbm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJ KiBxdWFsaWZpZWQgbmFtZXMgb2YgdGhlIHBhcmVudCByZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0 cnlpbmcgdG8KKwkJKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhl IHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSogbW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0 byBncmFiIGl0IGZyb20gcGdfaW5oZXJpdHMuCisJCSovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVl KCJJTkhFUklUUyIpOworCQlpZiAoc3RtdC0+YmFzZS5pbmhSZWxhdGlvbnMgIT0gTklMKQorCQkJ YXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9J bmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmpl Y3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHRt cG9iaik7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aW5oZXJp dHN9cyIsIHRtcG9iaik7CisJfQorCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwg IlNFUlZFUiAle3NlcnZlcn1JIiwgInNlcnZlciIsIHN0bXQtPnNlcnZlcm5hbWUpOworCisJLyog YWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChj cmVhdGVTdG10LCAiJXtnZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRp b25zKHN0bXQtPm9wdGlvbnMsIE5VTEwpKTsKKworCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBB Y2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGNyZWF0ZVN0bXQ7Cit9CisKKy8qCisgKiBEZXBh cnNlIGEgRGVmaW5lU3RtdC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRyZXNzIHNlY29uZGFy eU9iaikKK3sKKwlEZWZpbmVTdG10ICpkZWZpbmUgPSAoRGVmaW5lU3RtdCAqKSBwYXJzZXRyZWU7 CisKKwlzd2l0Y2ggKGRlZmluZS0+a2luZCkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToK KwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfQWdncmVnYXRlKG9iamVjdElkLCBkZWZpbmUp OworCisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0 bXRfQ29sbGF0aW9uKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7CisKKwkJY2FzZSBP QkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKG9i amVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJl dHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFNDb25maWcob2JqZWN0SWQsIGRlZmluZSwgc2Vjb25k YXJ5T2JqKTsKKworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCQlyZXR1cm4gZGVwYXJz ZV9EZWZpbmVTdG10X1RTRGljdGlvbmFyeShvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9C SkVDVF9UU1BBUlNFUjoKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIob2Jq ZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNURU1QTEFURToKKwkJCXJldHVybiBk ZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNl IE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9UeXBlKG9iamVjdElk LCBkZWZpbmUpOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2Jq ZWN0IGtpbmQ6ICVkIiwgZGVmaW5lLT5raW5kKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwor LyoKKyAqIEZvcm0gYW4gT2JqRWxlbSB0byBiZSB1c2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50IGlu IGFuIGFnZ3JlZ2F0ZSBhcmd1bWVudAorICogbGlzdAorICovCitzdGF0aWMgT2JqRWxlbSAqCitm b3JtX2FnZ19hcmd1bWVudChpbnQgaWR4LCBjaGFyICptb2RlcywgY2hhciAqKm5hbWVzLCBPaWQg KnR5cGVzKQoreworCU9ialRyZWUJICAgKmFyZzsKKworCWFyZyA9IG5ld19vYmp0cmVlKCIiKTsK KworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGFyZywgIiV7bW9kZX1zIiwgIm1vZGUiLAorCQkJCQkJ IChtb2RlcyAmJiBtb2Rlc1tpZHhdID09ICd2JykgPyAiVkFSSUFESUMiIDogIiIpOworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KGFyZywgIiV7bmFtZX1zIiwgIm5hbWUiLCBuYW1lcyA/IG5hbWVzW2lk eF0gOiAiIik7CisJYXBwZW5kX29iamVjdF9vYmplY3QoYXJnLCAiJXt0eXBlfVQiLAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGVzW2lkeF0sIC0xKSk7CisKKwlyZXR1cm4gbmV3X29i amVjdF9vYmplY3QoYXJnKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVB VEUgQUdHUkVHQVRFKQorICoKKyAqIEdpdmVuIGEgYWdncmVnYXRlIE9JRCwgcmV0dXJuIGFuIE9i alRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQ1JFQVRFIEFHR1JFR0FURSAle2lkZW50aXR5fUQoJXt0eXBlc31zKSAoJXtlbGVt czosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfQWdncmVn YXRlKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZSAgIGFn Z1R1cDsKKwlIZWFwVHVwbGUgICBwcm9jVHVwOworCU9ialRyZWUJICAgKnN0bXQ7CisJT2JqVHJl ZQkgICAqdG1wOworCUxpc3QJICAgKmxpc3Q7CisJRGF0dW0JCWluaXR2YWw7CisJYm9vbAkJaXNu dWxsOworCUZvcm1fcGdfYWdncmVnYXRlIGFnZzsKKwlGb3JtX3BnX3Byb2MgcHJvYzsKKwlGb3Jt X3BnX29wZXJhdG9yIG9wOworCUhlYXBUdXBsZQl0dXA7CisKKwlhZ2dUdXAgPSBTZWFyY2hTeXND YWNoZTEoQUdHRk5PSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoYWdnVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGFnZ3JlZ2F0ZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlhZ2cgPSAoRm9ybV9wZ19h Z2dyZWdhdGUpIEdFVFNUUlVDVChhZ2dUdXApOworCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKGFnZy0+YWdnZm5vaWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAorCQkJIGFnZy0+YWdnZm5vaWQpOworCXByb2Mg PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwlzdG10ID0gbmV3X29ianRy ZWUoIkNSRUFURSBBR0dSRUdBVEUiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIl e2lkZW50aXR5fUQiLAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jLT5wcm9u YW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJvYy0+cHJvbmFtZSkpKTsKKworCS8q CisJICogQWRkIHRoZSBhcmd1bWVudCBsaXN0LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzIHRvIGNv bnNpZGVyOgorCSAqCisJICogMS4gbm8gYXJndW1lbnRzLCBpbiB3aGljaCBjYXNlIHRoZSBzaWdu YXR1cmUgaXMgKCopLgorCSAqCisJICogMi4gTm90IGFuIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZS4g IEluIHRoaXMgY2FzZSB0aGVyZSdzIG9uZSBvciBtb3JlCisJICogYXJndW1lbnRzLgorCSAqCisJ ICogMy4gT3JkZXJlZC1zZXQgYWdncmVnYXRlcy4gVGhlc2UgaGF2ZSB6ZXJvIG9yIG1vcmUgZGly ZWN0IGFyZ3VtZW50cywgYW5kCisJICogb25lIG9yIG1vcmUgb3JkZXJlZCBhcmd1bWVudHMuCisJ ICoKKwkgKiBXZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIGRlZmF1bHQgdmFsdWVzIG9yIHRhYmxl IHBhcmFtZXRlcnMsIGFuZCB0aGUKKwkgKiBvbmx5IG1vZGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnNp ZGVyIGlzIFZBUklBRElDLgorCSAqLworCisJaWYgKHByb2MtPnByb25hcmdzID09IDApCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHN0bXQsICIoJXt0eXBlc31zKSIsICJ0eXBlcyIsICIqIik7CisJ ZWxzZSBpZiAoIUFHR0tJTkRfSVNfT1JERVJFRF9TRVQoYWdnLT5hZ2draW5kKSkKKwl7CisJCWlu dAkJCWk7CisJCWludAkJCW5hcmdzOworCQlPaWQJCSAgICp0eXBlczsKKwkJY2hhcgkgICAqbW9k ZXM7CisJCWNoYXIJICAqKm5hbWVzOworCisJCW5hcmdzID0gZ2V0X2Z1bmNfYXJnX2luZm8ocHJv Y1R1cCwgJnR5cGVzLCAmbmFtZXMsICZtb2Rlcyk7CisKKwkJLyogb25seSBkaXJlY3QgYXJndW1l bnRzIGluIHRoaXMgY2FzZSAqLworCQlsaXN0ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgbmFy Z3M7IGkrKykKKwkJeworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgZm9ybV9hZ2dfYXJndW1lbnQo aSwgbW9kZXMsIG5hbWVzLCB0eXBlcykpOworCQl9CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEo IiV7ZGlyZWN0OiwgfXMiLCAxLAorCQkJCQkJCSAiZGlyZWN0IiwgT2JqVHlwZUFycmF5LCBsaXN0 KTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIigle3R5cGVzfXMpIiwgdG1wKTsKKwl9 CisJZWxzZQorCXsKKwkJaW50CQkJaTsKKwkJaW50CQkJbmFyZ3M7CisJCU9pZAkJICAgKnR5cGVz OworCQljaGFyCSAgICptb2RlczsKKwkJY2hhcgkgICoqbmFtZXM7CisKKwkJbmFyZ3MgPSBnZXRf ZnVuY19hcmdfaW5mbyhwcm9jVHVwLCAmdHlwZXMsICZuYW1lcywgJm1vZGVzKTsKKworCQkvKiBk aXJlY3QgYXJndW1lbnRzIC4uLiAqLworCQlsaXN0ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwg YWdnLT5hZ2dudW1kaXJlY3RhcmdzOyBpKyspCisJCXsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVzLCBuYW1lcywgdHlwZXMpKTsKKwkJfQorCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiJXtkaXJlY3Q6LCB9cyIsIDEsCisJCQkJCQkJICJkaXJlY3QiLCBP YmpUeXBlQXJyYXksIGxpc3QpOworCisJCS8qCisJCSAqIC4uLiBhbmQgYWdncmVnYXRlZCBhcmd1 bWVudHMuICBJZiB0aGUgbGFzdCBkaXJlY3QgYXJndW1lbnQgaXMKKwkJICogVkFSSUFESUMsIHdl IG5lZWQgdG8gcmVwZWF0IGl0IGhlcmUgcmF0aGVyIHRoYW4gc2VhcmNoaW5nIGZvciBtb3JlCisJ CSAqIGFyZ3VtZW50cy4gIChTZWUgYWdncl9hcmdzIHByb2R1Y3Rpb24gaW4gZ3JhbS55IGZvciBh biBleHBsYW5hdGlvbi4pCisJCSAqLworCQlpZiAobW9kZXMgJiYgbW9kZXNbYWdnLT5hZ2dudW1k aXJlY3RhcmdzIC0gMV0gPT0gJ3YnKQorCQl7CisJCQlsaXN0ID0gbGlzdF9tYWtlMShmb3JtX2Fn Z19hcmd1bWVudChhZ2ctPmFnZ251bWRpcmVjdGFyZ3MgLSAxLAorCQkJCQkJCQkJCQkJbW9kZXMs IG5hbWVzLCB0eXBlcykpOworCQl9CisJCWVsc2UKKwkJeworCQkJbGlzdCA9IE5JTDsKKwkJCWZv ciAoaSA9IGFnZy0+YWdnbnVtZGlyZWN0YXJnczsgaSA8IG5hcmdzOyBpKyspCisJCQl7CisJCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgZm9ybV9hZ2dfYXJndW1lbnQoaSwgbW9kZXMsIG5hbWVzLCB0 eXBlcykpOworCQkJfQorCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiT1JERVIgQlkg JXthZ2dyZWdhdGVkOiwgfXMiLCBsaXN0KTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10 LCAiKCV7dHlwZXN9cykiLCB0bXApOworCX0KKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1 c2UgKi8KKwlsaXN0ID0gTklMOworCisJLyogU0ZVTkMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiU0ZVTkM9JXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsIGFnZy0+YWdndHJhbnNmbikpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1RZUEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi U1RZUEU9JXt0eXBlfVQiLCAxLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfdHlwZShhZ2ctPmFnZ3RyYW5zdHlwZSwgLTEpKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFNTUEFDRSAqLwor CXRtcCA9IG5ld19vYmp0cmVlKCJTU1BBQ0U9Iik7CisJaWYgKGFnZy0+YWdndHJhbnNzcGFjZSAh PSAwKQorCQlhcHBlbmRfaW50X29iamVjdCh0bXAsIiV7c3BhY2V9biIsIGFnZy0+YWdndHJhbnNz cGFjZSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRklOQUxGVU5DICovCisJ dG1wID0gbmV3X29ianRyZWUoIkZJTkFMRlVOQz0iKTsKKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFn Z2ZpbmFsZm4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSBhZ2ctPmFnZ2ZpbmFsZm4pKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogRklOQUxGVU5DX0VYVFJBICovCisJdG1wID0gbmV3X29ianRyZWUoIkZJTkFM RlVOQ19FWFRSQT0iKTsKKwlpZiAoYWdnLT5hZ2dmaW5hbGV4dHJhKQorCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXAsICIle3ZhbHVlfXMiLCAidmFsdWUiLCAidHJ1ZSIpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBJTklUQ09ORCAqLworCWluaXR2YWwgPSBTeXNDYWNoZUdldEF0 dHIoQUdHRk5PSUQsIGFnZ1R1cCwKKwkJCQkJCQkgIEFudW1fcGdfYWdncmVnYXRlX2FnZ2luaXR2 YWwsCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiSU5JVENPTkQ9Iik7 CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwiJXtpbml0dmFsfUwi LCAiaW5pdHZhbCIsIFRleHREYXR1bUdldENTdHJpbmcoaW5pdHZhbCkpOworCWVsc2UKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisKKwkvKiBNU0ZVTkMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiTVNGVU5D PSIpOworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnbXRyYW5zZm4pKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsIGFnZy0+YWdnbXRyYW5zZm4pKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTVNUWVBFICovCisJdG1wID0gbmV3X29ianRyZWUo Ik1TVFlQRT0iKTsKKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ210cmFuc3R5cGUpKQorCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXAsICIle3R5cGV9VCIsIG5ld19vYmp0cmVlX2Zvcl90eXBlKGFn Zy0+YWdnbXRyYW5zdHlwZSwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXAp OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyog TVNTUEFDRSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJNU1NQQUNFPSIpOworCWlmIChhZ2ctPmFn Z210cmFuc3NwYWNlICE9IDApCisJCWFwcGVuZF9pbnRfb2JqZWN0KHRtcCwgIiV7c3BhY2V9biIs IGFnZy0+YWdnbXRyYW5zc3BhY2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBN SU5WRlVOQyAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJNSU5WRlVOQz0iKTsKKwlpZiAoT2lkSXNW YWxpZChhZ2ctPmFnZ21pbnZ0cmFuc2ZuKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAi JXt0eXBlfVQiLCBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJCWFnZy0+YWdnbWludnRyYW5zZm4pKTsKKwllbHNlCisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCisJLyogTUZJTkFMRlVOQyAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJNRklO QUxGVU5DPSIpOworCWlmIChPaWRJc1ZhbGlkKGFnZy0+YWdnbWZpbmFsZm4pKQorCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBhZ2ct PmFnZ21maW5hbGZuKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1GSU5BTEZV TkNfRVhUUkEgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiTUZJTkFMRlVOQ19FWFRSQT0iKTsKKwlp ZiAoYWdnLT5hZ2dtZmluYWxleHRyYSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2 YWx1ZX1zIiwgInZhbHVlIiwgInRydWUiKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ LyogTUlOSVRDT05EICovCisJaW5pdHZhbCA9IFN5c0NhY2hlR2V0QXR0cihBR0dGTk9JRCwgYWdn VHVwLAorCQkJCQkJCSAgQW51bV9wZ19hZ2dyZWdhdGVfYWdnbWluaXR2YWwsCisJCQkJCQkJICAm aXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiTUlOSVRDT05EPSIpOworCWlmICghaXNudWxs KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2luaXR2YWx9TCIsICJpbml0dmFsIiwg VGV4dERhdHVtR2V0Q1N0cmluZyhpbml0dmFsKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KworCS8qIEhZUE9USEVUSUNBTCAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJIWVBPVEhFVElDQUw9 Iik7CisJaWYgKGFnZy0+YWdna2luZCA9PSBBR0dLSU5EX0hZUE9USEVUSUNBTCkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wLCAiJXt2YWx1ZX1zIiwgInZhbHVlIiwgInRydWUiKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU09SVE9QICovCisJdG1wID0gbmV3X29ianRyZWUo IlNPUlRPUD0iKTsKKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ3NvcnRvcCkpCisJeworCQl0dXAg PSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShhZ2ctPmFnZ3NvcnRv cCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIGFnZy0+YWdnc29ydG9w KTsKKwkJb3AgPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNUKHR1cCk7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcCwgIiV7b3BlcmF0b3J9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShvcC0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcC0+ b3BybmFtZSkpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwl9CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIERvbmUgd2l0aCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHN0bXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVs ZWFzZVN5c0NhY2hlKHByb2NUdXApOworCVJlbGVhc2VTeXNDYWNoZShhZ2dUdXApOworCisJcmV0 dXJuIHN0bXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIENPTExB VElPTikKKyAqCisgKiBHaXZlbiBhIGNvbGxhdGlvbiBPSUQsIHJldHVybiBhbiBPYmpUcmVlIHJl cHJlc2VudGluZyB0aGUgQ1JFQVRFIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIEZST00gJXtmcm9tX2lkZW50aXR5fUQgKCV7 ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X0Nv bGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkgT2JqZWN0 QWRkcmVzcyBmcm9tQ29sbGlkKQoreworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVwbGUJY29s VHVwOworCUZvcm1fcGdfY29sbGF0aW9uIGNvbEZvcm07CisJRGF0dW0JCWRhdHVtOworCWJvb2wJ CWlzbnVsbDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCWNv bFR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElk KSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJ Y29sRm9ybSA9IChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKGNvbFR1cCk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIENPTExBVElPTiAle2lkZW50aXR5fUQiLCAxLAorCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lKGNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIoY29s Rm9ybS0+Y29sbG5hbWUpKSk7CisKKwlpZiAoT2lkSXNWYWxpZChmcm9tQ29sbGlkLm9iamVjdElk KSkKKwl7CisJCU9pZAkJCWNvbGxpZCA9IGZyb21Db2xsaWQub2JqZWN0SWQ7CisJCUhlYXBUdXBs ZQl0cDsKKwkJRm9ybV9wZ19jb2xsYXRpb24gZnJvbUNvbEZvcm07CisKKwkJLyoKKwkJICogQ1JF QVRFIENPTExBVElPTiAle2lkZW50aXR5fUQgRlJPTSBleGlzdGluZ19jb2xsYXRpb247CisJCSAq LworCQl0cCA9IFNlYXJjaFN5c0NhY2hlMShDT0xMT0lELCBPYmplY3RJZEdldERhdHVtKGNvbGxp ZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAldSIsIGNvbGxpZCk7CisKKwkJ ZnJvbUNvbEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCk7CisKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiRlJPTSAle2Zyb21faWRlbnRpdHl9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShmcm9tQ29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCQkgIE5hbWVTdHIoZnJvbUNvbEZvcm0tPmNvbGxuYW1lKSkpOworCisJCVJlbGVh c2VTeXNDYWNoZSh0cCk7CisJCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCQlyZXR1cm4gcmV0 OworCX0KKworCS8qIExPQ0FMRSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExPSUQs IGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGljdWxvY2FsZSwgJmlzbnVsbCk7CisJaWYg KCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTE9DQUxFPSV7bG9jYWxlfUwi LCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxvY2FsZSIsCisJCQkJCQkJ ICJsb2NhbGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0 dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBMQ19DT0xMQVRFICovCisJZGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsY29sbGF0ZSwg JmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiTENf Q09MTEFURT0le2NvbGxhdGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAiY29sbGF0ZSIsCisJCQkJCQkJICJjb2xsYXRlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkg cHNwcmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogTENfQ1RZUEUg Ki8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAsIEFudW1fcGdfY29s bGF0aW9uX2NvbGxjdHlwZSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiTENfQ1RZUEU9JXtjdHlwZX1MIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjdHlwZSIsCisJCQkJCQkJICJjdHlwZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8q IFBST1ZJREVSICovCisJaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJf SUNVKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIs IDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJ CSAicHJvdmlkZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAiaWN1 IikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9 CisJZWxzZSBpZiAoY29sRm9ybS0+Y29sbHByb3ZpZGVyID09IENPTExQUk9WSURFUl9MSUJDKQor CXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlBST1ZJREVSPSV7cHJvdmlkZXJ9TCIsIDIsCisJ CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicHJvdmlkZXIiLAorCQkJCQkJCSAicHJv dmlkZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMiLCAibGliYyIpKTsK KwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJ LyogREVURVJNSU5JU1RJQyAqLworCWlmIChjb2xGb3JtLT5jb2xsaXNkZXRlcm1pbmlzdGljKQor CXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFVEVSTUlOSVNUSUM9JXtkZXRlcm1pbmlzdGlj fUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRldGVybWluaXN0aWMi LAorCQkJCQkJCSAiZGV0ZXJtaW5pc3RpYyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJp bnRmKCIlcyIsICJ0cnVlIikpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwl9CisKKwkvKiBWRVJTSU9OICovCisJZGF0dW0gPSBTeXNDYWNoZUdldEF0 dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9jb2xsdmVyc2lvbiwgJmlzbnVs bCk7CisJaWYgKCFpc251bGwpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkVSU0lPTj0l e3ZlcnNpb259TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lv biIsCisJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYo IiVzIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChy ZXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOwor CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUg T1BFUkFUT1IpCisgKgorICogR2l2ZW4gYSBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUg Y3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJB VE9SICV7aWRlbnRpdHl9TyAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0RlZmluZVN0bXRfT3BlcmF0b3IoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZp bmUpCit7CisJSGVhcFR1cGxlCW9wclR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAg ICAqdG1wX29iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3By Rm9ybTsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9i amVjdElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXAp OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8i LCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFt ZVN0cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogUFJPQ0VEVVJFICovCisJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJQUk9DRURVUkU9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkJImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcm9jZWR1cmUiLAorCQkJCQkJCSJwcm9jZWR1cmUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1 cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQlvcHJGb3JtLT5vcHJjb2RlKSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogTEVGVEFS RyAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJCSJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZv cm0tPm9wcmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJsZWZ0LCAtMSkpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJSSUdIVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicmlnaHRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJy aWdodCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcnJpZ2h0LCAtMSkpOworCWVsc2UK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIENPTU1VVEFUT1IgKi8KKwl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIkNPTU1VVEFUT1I9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgImNvbW11dGF0b3IiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJj b20pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgb3ByRm9ybS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCisJLyogTkVHQVRPUiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRP Uj0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlm IChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcF9vYmosICIle29wZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJuZWdhdGUp KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLwor CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVTVFJJQ1Q9IiwgMSwKKwkJCQkJCQkiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+ b3BycmVzdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJZWxzZQorCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCisJLyogSk9JTiAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiSk9JTj0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiam9pbiIpOwor CWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3By am9pbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEhBU0hFUyAq LworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSEFTSEVTIiwgMSwKKwkJCQkJCQkiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImhhc2hlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkK KwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIE1FUkdFUyAqLworCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiTUVSR0VTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm1lcmdlcyIpOworCWlmICghb3ByRm9ybS0+b3ByY2FubWVyZ2UpCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle2VsZW1zOiwgfXMp IiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUob3ByVHVwKTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgc3RhdGVtZW50LgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgJXtlbGVtczosIH1zKQorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQs IERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHlwVHVwOworCU9ialRyZWUgICAg KnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwljaGFyCSAg ICpzdHI7CisJRGF0dW0JCWRmbHQ7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHlwZSB0eXBG b3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0 dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJ ZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUodHlwRm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHR5cEZvcm0t PnR5cG5hbWUpKSk7CisKKwkvKiBTaGVsbCB0eXBlcy4gKi8KKwlpZiAoIXR5cEZvcm0tPnR5cGlz ZGVmaW5lZCkKKwl7CisJCVJlbGVhc2VTeXNDYWNoZSh0eXBUdXApOworCQlyZXR1cm4gcmV0Owor CX0KKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBJTlBVVCAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCIoSU5QVVQ9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbnB1dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGlucHV0KSk7CisJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBPVVRQVVQgKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiT1VUUFVUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3V0cHV0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwb3V0cHV0KSk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBSRUNFSVZFICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlJFQ0VJVkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInJlY2VpdmUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBy ZWNlaXZlKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwcmVjZWl2ZSkpOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBTRU5EICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFTkQ9IiwgMSwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInNlbmQiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBGb3JtLT50eXBzZW5kKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9j ZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwc2VuZCkpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfSU4gKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiVFlQTU9EX0lOPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBt b2RfaW4iKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZv cm0tPnR5cG1vZGluKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFRZUE1PRF9P VVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cG1vZG91dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2Vk dXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBBTkFMWVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+ dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBJTlRFUk5BTExF TkdUSCAqLworCWlmICh0eXBGb3JtLT50eXBsZW4gPT0gLTEpCisJCXRtcCA9IG5ld19vYmp0cmVl KCJJTlRFUk5BTExFTkdUSD1WQVJJQUJMRSIpOworCWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVf VkEoIklOVEVSTkFMTEVOR1RIPSV7dHlwbGVufW4iLCAxLAorCQkJCQkJCSAidHlwbGVuIiwgT2Jq VHlwZUludGVnZXIsIHR5cEZvcm0tPnR5cGxlbik7CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBU1NFREJZVkFMVUUgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiUEFTU0VEQllWQUxVRSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJwYXNzZWRieXZhbHVlIik7CisJaWYgKCF0eXBGb3JtLT50eXBieXZhbCkKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBYWFggaXQncyBvZGQgdG8gcmVwcmVzZW50IGFsaWdubWVu dCB3aXRoIHNjaGVtYS1xdWFsaWZpZWQgdHlwZSBuYW1lcyAqLworCXN3aXRjaCAodHlwRm9ybS0+ dHlwYWxpZ24pCisJeworCQljYXNlICdkJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmZsb2F0OCI7 CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQ0IjsKKwkJ CWJyZWFrOworCQljYXNlICdzJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmludDIiOworCQkJYnJl YWs7CisJCWNhc2UgJ2MnOgorCQkJc3RyID0gInBnX2NhdGFsb2cuYnBjaGFyIjsKKwkJCWJyZWFr OworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYWxpZ25tZW50ICVjIiwgdHlw Rm9ybS0+dHlwYWxpZ24pOworCX0KKworCS8qIEFMSUdOTUVOVCAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJBTElHTk1FTlQ9JXthbGlnbn1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgImFsaWdubWVudCIsCisJCQkJCQkgImFsaWduIiwgT2JqVHlwZVN0cmluZywgc3Ry KTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8q IFNUT1JBR0UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRT0le3N0b3JhZ2V9cyIs IDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJCSAi c3RvcmFnZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3R5cGVfc3RvcmFnZSh0eXBGb3Jt LT50eXBzdG9yYWdlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBDQVRFR09SWSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDQVRFR09S WT0le2NhdGVnb3J5fXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2F0 ZWdvcnkiLAorCQkJCQkJICJjYXRlZ29yeSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgcHNwcmlu dGYoIiVjIiwgdHlwRm9ybS0+dHlwY2F0ZWdvcnkpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBSRUZFUlJFRCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJQUkVGRVJSRUQ9JXtwcmVmZXJyZWR9cyIsIDEsCisJCQkJCQkgInByZWZlcnJl ZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgdHlwRm9ybS0+dHlwaXNwcmVmZXJyZWQgPyAiVFJV RSIgOiAiRkFMU0UiKTsKKwlpZiAoIXR5cEZvcm0tPnR5cGlzcHJlZmVycmVkKQorCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIERFRkFVTFQgKi8KKwlkZmx0ID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVP SUQsIHR5cFR1cCwKKwkJCQkJCSAgIEFudW1fcGdfdHlwZV90eXBkZWZhdWx0LAorCQkJCQkJICAg JmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIkRFRkFVTFQ9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlZmF1bHQiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsCisJCQkJCQkJ IFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkVMRU1FTlQ9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImVsZW1lbnQiKTsKKwlpZiAoT2lkSXNWYWxp ZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtlbGVt fVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBGb3JtLT50eXBlbGVtLCAtMSkp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlz dCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBERUxJTUlURVIgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiREVMSU1JVEVSPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJkZWxpbWl0ZXIiKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2RlbGlt fUwiLCAiZGVsaW0iLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGRlbGltKSk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBD T0xMQVRBQkxFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTExBVEFCTEU9IiwgMSwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxhdGFibGUiKTsKKwlpZiAoIU9pZElz VmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlhcHBl bmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VT eXNDYWNoZSh0eXBUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBD UkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9 RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZmluZVN0 bXRfVFNDb25maWcoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJT2Jq ZWN0QWRkcmVzcyBjb3BpZWQpCit7CisJSGVhcFR1cGxlCXRzY1R1cDsKKwlIZWFwVHVwbGUJdHNw VHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJRm9ybV9wZ190c19j b25maWcgdHNjRm9ybTsKKwlGb3JtX3BnX3RzX3BhcnNlciB0c3BGb3JtOworCUxpc3QJICAgKmxp c3QgPSBOSUw7CisKKwl0c2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNDT05GSUdPSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNjVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGNvbmZp Z3VyYXRpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2NGb3JtID0gKEZvcm1f cGdfdHNfY29uZmlnKSBHRVRTVFJVQ1QodHNjVHVwKTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRHZXREYXR1bSh0c2NGb3JtLT5jZmdwYXJzZXIpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHBhcnNlciAldSIsCisJCQkgdHNjRm9ybS0+Y2Zn cGFyc2VyKTsKKwl0c3BGb3JtID0gKEZvcm1fcGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVw KTsKKworCS8qCisJICogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZS4gIElmIHdlIGhhdmUgQ09Q WSdlZCBhbiBleGlzdGluZyBjb25maWcsIGFkZAorCSAqIGEgQ09QWSBjbGF1c2U7IG90aGVyd2lz ZSBhZGQgYSBQQVJTRVIgY2xhdXNlLgorCSAqLworCS8qIENPUFkgKi8KKwl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiQ09QWT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29w eSIpOworCWlmIChPaWRJc1ZhbGlkKGNvcGllZC5vYmplY3RJZCkpCisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcCwgIiV7dHNjb25maWd9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChUU0NvbmZpZ1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjb3BpZWQub2JqZWN0 SWQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUEFSU0VSICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIlBBUlNFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAicGFyc2VyIik7CisJaWYgKGNvcGllZC5vYmplY3RJZCA9PSBJbnZhbGlkT2lkKQorCQlh cHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3BhcnNlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lKHRzcEZvcm0tPnByc25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5h bWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7 aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNjRm9ybS0+Y2ZnbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzY0Zvcm0tPmNmZ25hbWUpKSwKKwkJCQkJ CSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1 cCk7CisJUmVsZWFzZVN5c0NhY2hlKHRzY1R1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSIHN0YXRlbWVudC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiAle2lkZW50aXR5fUQg KCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10 X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBs ZQl0c3BUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCUZvcm1fcGdfdHNfcGFyc2VyIHRzcEZvcm07CisKKwl0c3BUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoVFNQQVJTRVJPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxv b2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHBhcnNlciB3aXRoIE9JRCAldSIsCisJCQkgb2Jq ZWN0SWQpOworCXRzcEZvcm0gPSAoRm9ybV9wZ190c19wYXJzZXIpIEdFVFNUUlVDVCh0c3BUdXAp OworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIFNUQVJUICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIlNUQVJUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNzdGFydCkpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogR0VUVE9LRU4gKi8KKwl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiR0VUVE9LRU49JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJnZXR0b2tlbiIsCisJCQkJCQkgInByb2NlZHVyZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2Nl ZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3Rva2VuKSk7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTkQgKi8K Kwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRU5EPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiZW5kIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzZW5kKSk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhUWVBFUyAqLworCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhUWVBFUz0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImxleHR5cGVzIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzbGV4dHlwZSkpOworCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSEVBRExJ TkUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEVBRExJTkU9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImhlYWRsaW5lIik7CisJaWYgKE9pZElzVmFsaWQodHNwRm9y bS0+cHJzaGVhZGxpbmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNoZWFkbGluZSkpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VB UkNIIFBBUlNFUiAle2lkZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRz cEZvcm0tPnByc25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNu YW1lKSksCisJCQkJCQkgImVsZW1zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VT eXNDYWNoZSh0c3BUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JF QVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3lu dGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZWxl bXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTRGlj dGlvbmFyeShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJ dHNkVHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAq bGlzdCA9IE5JTDsKKwlEYXR1bQkJb3B0aW9uczsKKwlib29sCQlpc251bGw7CisJRm9ybV9wZ190 c19kaWN0IHRzZEZvcm07CisKKwl0c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBP YmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBk aWN0aW9uYXJ5IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3Jt X3BnX3RzX2RpY3QpIEdFVFNUUlVDVCh0c2RUdXApOworCisKKworCS8qIEFkZCB0aGUgZGVmaW5p dGlvbiBjbGF1c2UgKi8KKwkvKiBURU1QTEFURSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJU RU1QTEFURT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidGVtcGxhdGUi KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3RlbXBsYXRlfUQiLAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU1RlbXBsYXRlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkgdHNkRm9ybS0+ZGljdHRlbXBsYXRlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKgorCSAqIG9wdGlvbnMuICBYWFggdGhpcyBpcyBh IHByZXR0eSB1c2VsZXNzIHJlcHJlc2VudGF0aW9uLCBidXQgd2UgY2FuJ3QgZG8KKwkgKiBiZXR0 ZXIgd2l0aG91dCBtb3JlIHRzX2NhY2hlLmMgY29vcGVyYXRpb24gLi4uCisJICovCisJb3B0aW9u cyA9IFN5c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdf dHNfZGljdF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19v Ymp0cmVlKCIiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAi JXtvcHRpb25zfXMiLCAib3B0aW9ucyIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcob3B0 aW9ucykpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2VsZW1zOiwg fXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ ICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSksCisJCQkJCQkgImVsZW1zIiwgT2JqVHlwZUFy cmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFIHN0YXRlbWVu dC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRF ICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmlu ZSkKK3sKKwlIZWFwVHVwbGUJdHN0VHVwOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAg ICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX3RzX3RlbXBsYXRlIHRzdEZv cm07CisKKwl0c3RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNURU1QTEFURU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3RUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggdGVtcGxhdGUg d2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c3RGb3JtID0gKEZvcm1fcGdfdHNfdGVt cGxhdGUpIEdFVFNUUlVDVCh0c3RUdXApOworCisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVz ZSAqLworCS8qIElOSVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSU5JVD0iLCAxLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5pdCIpOworCWlmIChPaWRJc1ZhbGlkKHRz dEZvcm0tPnRtcGxpbml0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGluaXQpKTsKKwllbHNlCisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyogTEVYSVpFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxF WElaRT0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImxleGl6ZSIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJIHRzdEZvcm0tPnRtcGxsZXhpemUpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBT RUFSQ0ggVEVNUExBVEUgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZSh0c3RGb3JtLT50bXBsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzdEZvcm0t PnRtcGxuYW1lKSksCisJCQkJCQkgImVsZW1zIiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJl bGVhc2VTeXNDYWNoZSh0c3RUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGFuIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OICV7aWRlbnRp dHl9RCBBREQgTUFQUElORworICogRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25h cmllczosIH1ECisgKglPUgorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lk ZW50aXR5fUQgRFJPUCBNQVBQSU5HICV7aWZfZXhpc3RzfXMKKyAqIEZPUiAle3Rva2VudHlwZX1J CisgKglPUgorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQg QUxURVIgTUFQUElORworICogRk9SICV7dG9rZW50eXBlOiwgfUkgV0lUSCAle2RpY3Rpb25hcmll czosIH1ECisgKglPUgorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50 aXR5fUQgQUxURVIgTUFQUElORworICogUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAl e25ld19kaWN0aW9uYXJ5fUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFU SU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9SSBS RVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChDb2xsZWN0 ZWRDb21tYW5kICpjbWQpCit7CisJQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICpub2RlID0gKEFs dGVyVFNDb25maWd1cmF0aW9uU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwg ICAqY2VsbDsKKwlpbnQJCQlpOworCisJcmV0ID0gbmV3X29ianRyZWUoIkFMVEVSIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04iKTsKKworCS8qIERldGVybWluZSB0aGUgZm9ybWF0IHN0cmluZyBh cHByb3ByaWF0ZSB0byBlYWNoIHN1YmNvbW1hbmQgKi8KKwlzd2l0Y2ggKG5vZGUtPmtpbmQpCisJ eworCQljYXNlIEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJZCwKKwkJCQkJ CQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgQUxURVJfVFNDT05GSUdfRFJPUF9NQVBQSU5HOgorCQkJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXtpZGVudGl0eX1EIERST1AgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJ CQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQl0bXAgPSBu ZXdfb2JqdHJlZSgiSUYgRVhJU1RTIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJl c2VudCIsIG5vZGUtPm1pc3Npbmdfb2spOworCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXtpZl9leGlzdHN9cyIsIHRtcCk7CisJCQlicmVhazsKKworCQljYXNlIEFMVEVSX1RTQ09ORklH X0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOOgorCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0Vf RElDVDoKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOOgorCQkJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkciLAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVz cy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJ ZCkpOworCQkJYnJlYWs7CisJfQorCisJLyogQWRkIHRoZSBhZmZlY3RlZCB0b2tlbiBsaXN0LCBm b3Igc3ViY29tbWFuZHMgdGhhdCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX0FERF9NQVBQSU5HIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdf QUxURVJfTUFQUElOR19GT1JfVE9LRU4gfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJ R19SRVBMQUNFX0RJQ1RfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05G SUdfRFJPUF9NQVBQSU5HKQorCXsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT50b2tlbnR5cGUpCisJ CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0KGNl bGwpKSkpOworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIkZPUiAle3Rva2VudHlwZTosIH1J IiwgbGlzdCk7CisJfQorCisJLyogQWRkIGZ1cnRoZXIgc3ViY29tbWFuZC1zcGVjaWZpYyBlbGVt ZW50cyAqLworCWlmIChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FERF9NQVBQSU5HIHx8 CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU4p CisJeworCQkvKiBBREQgTUFQUElORyBhbmQgQUxURVIgTUFQUElORyBGT1IgbmVlZCBhIGxpc3Qg b2YgZGljdGlvbmFyaWVzICovCisJCWxpc3QgPSBOSUw7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQt PmQuYXRzY2ZnLm5kaWN0czsgaSsrKQorCQl7CisJCQlPYmpUcmVlICAgICpkaWN0X29iajsKKwor CQkJZGljdF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCSAgY21kLT5kLmF0c2NmZy5kaWN0SWRzW2ldKTsKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0X29iamVjdChkaWN0X29iaikp OworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiV0lUSCAle2RpY3Rpb25hcmllczos IH1EIiwgbGlzdCk7CisJfQorCWVsc2UgaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdf UkVQTEFDRV9ESUNUIHx8CisJCQkgbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNF X0RJQ1RfRk9SX1RPS0VOKQorCXsKKwkJLyogVGhlIFJFUExBQ0UgZm9ybXMgd2FudCBvbGQgYW5k IG5ldyBkaWN0aW9uYXJpZXMgKi8KKwkJQXNzZXJ0KGNtZC0+ZC5hdHNjZmcubmRpY3RzID09IDIp OworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJSRVBMQUNFICV7b2xkX2RpY3Rpb25hcnl9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0c2NmZy5kaWN0SWRzWzBdKSk7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIldJVEggJXtuZXdfZGljdGlvbmFyeX1EIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRpY3RJZHNbMV0pKTsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZ IHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgVEVYVCBTRUFSQ0gg RElDVElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOwor CURhdHVtCQlvcHRpb25zOworCUxpc3QJICAgKmRlZmluaXRpb24gPSBOSUw7CisJYm9vbAkJaXNu dWxsOworCUhlYXBUdXBsZQl0c2RUdXA7CisJRm9ybV9wZ190c19kaWN0IHRzZEZvcm07CisKKwl0 c2RUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNESUNUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzZFR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IHdpdGggT0lEICV1 IiwKKwkJCSBvYmplY3RJZCk7CisJdHNkRm9ybSA9IChGb3JtX3BnX3RzX2RpY3QpIEdFVFNUUlVD VCh0c2RUdXApOworCisJLyoKKwkgKiBBZGQgdGhlIGRlZmluaXRpb24gbGlzdCBhY2NvcmRpbmcg dG8gdGhlIHBnX3RzX2RpY3QgZGljdGluaXRvcHRpb24KKwkgKiBjb2x1bW4KKwkgKi8KKwlvcHRp b25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9JRCwgdHNkVHVwLAorCQkJCQkJCSAgQW51bV9w Z190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJCQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3 X29ianRyZWUoIiIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAs ICIle29wdGlvbnN9cyIsICJvcHRpb25zIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhv cHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCWRlZmluaXRp b24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0 eX1EICgle2RlZmluaXRpb246LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSwKKwkJCQkJ CSAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZGVmaW5pdGlvbik7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHNkVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZGVwYXJzZV9WaWV3U3Rt dAorICoJCWRlcGFyc2UgYSBWaWV3U3RtdAorICoKKyAqIEdpdmVuIGEgdmlldyBPSUQgYW5kIHRo ZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBB UyAle3F1ZXJ5fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9WaWV3U3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlWaWV3U3RtdCAgICpub2RlID0gKFZpZXdT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247 CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lz dGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMiLCA0LAorCQkJCQkJICJvcl9y ZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8gIk9SIFJFUExB Q0UiIDogIiIsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBn ZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSksCisJCQkJCQkgInF1ZXJ5IiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSBwZ19nZXRfdmlld2RlZl9zdHJpbmcob2JqZWN0SWQpKTsKKworCXJl bGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIENSRUFURSBNYXRlcmlhbGl6ZWQgVmlldyBzdGF0ZW1lbnQsIGl0 IGlzIGEgdmFyaWFudCBvZgorICogQ3JlYXRlVGFibGVBc1N0bXQKKyAqCisgKiBOb3RlIHRoYXQg Q1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPIGNhbiBhbHNvIGJlIGRlcGFyc2VkIGJ5CisgKiBk ZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10IHRvIHJlbW92ZSB0aGUgU0VMRUNUIElOVE8gY2xhdXNl LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFtNQVRF UklBTElaRUQgVklFVyB8IFRBQkxFXSAle2lmX25vdF9leGlzdHN9cworICogCQkle2lkZW50aXR5 fUQgJXtjb2x1bW5zfXMgWyV7b25fY29tbWl0fXNdICV7dGFibGVzcGFjZX1zCisgKiAgCQlBUyAl e3F1ZXJ5fXMgJXt3aXRoX25vX2RhdGF9cyIKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9DcmVhdGVUYWJsZUFzU3RtdF92YW5pbGxhKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZVRhYmxlQXNTdG10ICpub2RlID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIHBh cnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlP YmpUcmVlICAgICp0bXAyOworCWNoYXIJICAgKmZtdDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOwor CUxpc3RDZWxsICAgKmNlbGw7CisKKwkvKiBSZWplY3QgdW5zdXBwb3J0ZWQgY2FzZSByaWdodCBh d2F5LiAqLworCWlmICgoKFF1ZXJ5ICopIChub2RlLT5xdWVyeSkpLT5jb21tYW5kVHlwZSA9PSBD TURfVVRJTElUWSkKKwkJZWxvZyhFUlJPUiwgInVuaW1wbGVtZW50ZWQgZGVwYXJzZSBvZiBDUkVB VEUgVEFCTEUgQVMgRVhFQ1VURSIpOworCisJLyoKKwkgKiBOb3RlIHRoYXQgSU5TRVJUIElOVE8g aXMgZGVwYXJzZWQgYXMgQ1JFQVRFIFRBQkxFIEFTLiAgVGhleSBhcmUKKwkgKiBmdW5jdGlvbmFs bHkgZXF1aXZhbGVudCBzeW5vbnltcyBzbyB0aGVyZSBpcyBubyBoYXJtIGZyb20gdGhpcy4KKwkg Ki8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfTUFUVklFVykKKwkJZm10ID0gIkNSRUFU RSAle3BlcnNpc3RlbmNlfXMgTUFURVJJQUxJWkVEIFZJRVcgJXtpZl9ub3RfZXhpc3RzfXMgJXtp ZGVudGl0eX1EIjsKKwllbHNlCisJCWZtdCA9ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxF ICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCI7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QShmbXQsIDMsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBn ZXRfcGVyc2lzdGVuY2Vfc3RyKG5vZGUtPmludG8tPnJlbC0+cmVscGVyc2lzdGVuY2UpLAorCQkJ CQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3Rf ZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJLyogQ09MVU1OUyBjbGF1c2Ug Ki8KKwlpZiAobm9kZS0+aW50by0+Y29sTmFtZXMpCisJeworCQlmb3JlYWNoKGNlbGwsIG5vZGUt PmludG8tPmNvbE5hbWVzKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7 Y29sdW1uczosIH1JKSIsIDEsCisJCQkJCQkJICJjb2x1bW5zIiwgT2JqVHlwZUFycmF5LCBsaXN0 KTsKKwl9CisJZWxzZQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiIiwgMSwKKwkJCQkJCQkgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXtjb2x1bW5zfXMiLCB0bXApOworCisJLyogVVNJTkcgY2xhdXNlICovCisJdG1wID0gbmV3 X29ianRyZWUoIlVTSU5HIik7CisJaWYgKG5vZGUtPmludG8tPmFjY2Vzc01ldGhvZCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXthY2Nlc3NfbWV0aG9kfUkiLCAiYWNjZXNzX21ldGhv ZCIsCisJCQkJCQkJIG5vZGUtPmludG8tPmFjY2Vzc01ldGhvZCk7CisJZWxzZQorCXsKKwkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2FjY2Vzc19t ZXRob2R9cyIsIHRtcCk7CisKKwkvKiBXSVRIIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVl KCJXSVRIIik7CisJbGlzdCA9IE5JTDsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+aW50by0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsK KworCQl0bXAyID0gZGVwYXJzZV9EZWZFbGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAyKSk7CisJfQorCisJaWYgKGxpc3QpCisJCWFw cGVuZF9hcnJheV9vYmplY3QodG1wLCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e3dpdGhfY2xhdXNlfXMiLCB0bXApOworCisJLyogT04gQ09NTUlUIGNsYXVzZS4gIENSRUFURSBN QVRFUklBTElaRUQgVklFVyBkb2Vzbid0IGhhdmUgb25lICovCisJaWYgKG5vZGUtPm9ianR5cGUg PT0gT0JKRUNUX1RBQkxFKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29uX2NvbW1p dH1zIiwKKwkJCQkJCQkgZGVwYXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5pbnRvLT5vbkNvbW1p dCkpOworCisJLyogVEFCTEVTUEFDRSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVEFC TEVTUEFDRSAle3RhYmxlc3BhY2V9SSIpOworCWlmIChub2RlLT5pbnRvLT50YWJsZVNwYWNlTmFt ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt0YWJsZXNwYWNlfXMiLCAidGFibGVz cGFjZSIsCisJCQkJCQkJIG5vZGUtPmludG8tPnRhYmxlU3BhY2VOYW1lKTsKKwllbHNlCisJewor CQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcCk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVz cGFjZX1zIiwgdG1wKTsKKworCS8qIEFkZCB0aGUgcXVlcnkgKi8KKwlBc3NlcnQoSXNBKG5vZGUt PnF1ZXJ5LCBRdWVyeSkpOworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkFTICV7cXVlcnl9 cyIsICJxdWVyeSIsCisJCQkJCQkgcGdfZ2V0X3F1ZXJ5ZGVmKChRdWVyeSAqKSBub2RlLT5xdWVy eSwgZmFsc2UpKTsKKworCS8qIEFkZCBhIFdJVEggTk8gREFUQSBjbGF1c2UgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiV0lUSCBOTyBEQVRBIiwgMSwKKwkJCQkJCSAicHJlc2VudCIsIE9ialR5 cGVCb29sLAorCQkJCQkJIG5vZGUtPmludG8tPnNraXBEYXRhID8gdHJ1ZSA6IGZhbHNlKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3dpdGhfbm9fZGF0YX1zIiwgdG1wKTsKKworCXJl bGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVUcmlnU3RtdCAoQ1JFQVRFIFRSSUdHRVIpCisg KgorICogR2l2ZW4gYSB0cmlnZ2VyIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVk IGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtjb25zdHJhaW50fXMgVFJJ R0dFUiAle25hbWV9SSAle3RpbWV9cyAle2V2ZW50czogT1IgfXMgT04KKyAqICV7cmVsYXRpb259 RCAle2Zyb21fdGFibGV9cyAle2NvbnN0cmFpbnRfYXR0cnM6IH1zICV7cmVmZXJlbmNpbmc6IH1z CisgKiBGT1IgRUFDSCAle2Zvcl9lYWNofXMgJXt3aGVufXMgRVhFQ1VURSBQUk9DRURVUkUgJXtm dW5jdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlVHJpZ1N0bXQo T2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJpZ1N0bXQgKm5vZGUg PSAoQ3JlYXRlVHJpZ1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisJ SGVhcFR1cGxlCXRyaWdUdXA7CisJRm9ybV9wZ190cmlnZ2VyIHRyaWdGb3JtOworCU9ialRyZWUg ICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCWludAkJCXRnbmFyZ3M7CisJTGlzdAkg ICAqbGlzdCA9IE5JTDsKKwlMaXN0CSAgICpldmVudHM7CisJY2hhcgkgICAqdHJpZ3RpbWluZzsK KwljaGFyCSAgICp0Z29sZHRhYmxlOworCWNoYXIJICAgKnRnbmV3dGFibGU7CisJRGF0dW0JCXZh bHVlOworCWJvb2wJCWlzbnVsbDsKKworCXBnX3RyaWdnZXIgPSB0YWJsZV9vcGVuKFRyaWdnZXJS ZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29i amVjdF9ieV9vaWQocGdfdHJpZ2dlciwgQW51bV9wZ190cmlnZ2VyX29pZCwgb2JqZWN0SWQpOwor CXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VUU1RSVUNUKHRyaWdUdXApOworCisJdHJp Z3RpbWluZyA9IG5vZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfQkVGT1JFID8gIkJFRk9SRSIg OgorCQlub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0FGVEVSID8gIkFGVEVSIiA6CisJCW5v ZGUtPnRpbWluZyA9PSBUUklHR0VSX1RZUEVfSU5TVEVBRCA/ICJJTlNURUFEIE9GIiA6CisJCU5V TEw7CisJaWYgKCF0cmlndGltaW5nKQorCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHRyaWdn ZXIgdGltaW5nIHR5cGUgJWQiLCBub2RlLT50aW1pbmcpOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSAle2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFtZX1JICV7dGltZX1zIiwgMywK KwkJCQkJCSAiY29uc3RyYWludCIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmlzY29uc3RyYWludCA/ ICJDT05TVFJBSU5UIiA6ICIiLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ dHJpZ25hbWUsCisJCQkJCQkgInRpbWUiLCBPYmpUeXBlU3RyaW5nLCB0cmlndGltaW5nKTsKKwor CS8qCisJICogRGVjb2RlIHRoZSBldmVudHMgdGhhdCB0aGUgdHJpZ2dlciBmaXJlcyBmb3IuICBU aGUgb3V0cHV0IGlzIGEgbGlzdDsgaW4KKwkgKiBtb3N0IGNhc2VzIGl0IHdpbGwganVzdCBiZSBh IHN0cmluZyB3aXRoIHRoZSBldmVudCBuYW1lLCBidXQgd2hlbgorCSAqIHRoZXJlJ3MgYW4gVVBE QVRFIHdpdGggYSBsaXN0IG9mIGNvbHVtbnMsIHdlIHJldHVybiBhIEpTT04gb2JqZWN0LgorCSAq LworCWV2ZW50cyA9IE5JTDsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBFX0lOU0VS VCkKKwkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19zdHJpbmdfb2JqZWN0KCJJTlNFUlQi KSk7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9ERUxFVEUpCisJCWV2ZW50cyA9 IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiREVMRVRFIikpOworCWlmIChub2Rl LT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVFJVTkNBVEUpCisJCWV2ZW50cyA9IGxhcHBlbmQoZXZl bnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVFJVTkNBVEUiKSk7CisJaWYgKG5vZGUtPmV2ZW50cyAm IFRSSUdHRVJfVFlQRV9VUERBVEUpCisJeworCQlpZiAobm9kZS0+Y29sdW1ucyA9PSBOSUwpCisJ CXsKKwkJCWV2ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiVVBEQVRF IikpOworCQl9CisJCWVsc2UKKwkJeworCQkJT2JqVHJlZSAgICAqdXBkYXRlOworCQkJTGlzdENl bGwgICAqY2VsbDsKKwkJCUxpc3QJICAgKmNvbHMgPSBOSUw7CisKKwkJCS8qCisJCQkgKiBDdXJy ZW50bHkgb25seSBVUERBVEUgT0YgY2FuIGJlIG9iamVjdHMgaW4gdGhlIG91dHB1dCBKU09OLCBi dXQKKwkJCSAqIHdlIGFkZCBhICJraW5kIiBlbGVtZW50IHNvIHRoYXQgdXNlciBjb2RlIGNhbiBk aXN0aW5ndWlzaAorCQkJICogcG9zc2libGUgZnV0dXJlIG5ldyBldmVudCB0eXBlcy4KKwkJCSAq LworCQkJdXBkYXRlID0gbmV3X29ianRyZWVfVkEoIlVQREFURSBPRiIsIDEsCisJCQkJCQkJCQki a2luZCIsIE9ialR5cGVTdHJpbmcsICJ1cGRhdGVfb2YiKTsKKworCQkJZm9yZWFjaChjZWxsLCBu b2RlLT5jb2x1bW5zKQorCQkJeworCQkJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0 KGNlbGwpKTsKKworCQkJCWNvbHMgPSBsYXBwZW5kKGNvbHMsIG5ld19zdHJpbmdfb2JqZWN0KGNv bG5hbWUpKTsKKwkJCX0KKworCQkJYXBwZW5kX2FycmF5X29iamVjdCh1cGRhdGUsICIle2NvbHVt bnM6LCB9SSIsIGNvbHMpOworCisJCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X29iamVj dF9vYmplY3QodXBkYXRlKSk7CisJCX0KKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIl e2V2ZW50czogT1IgfXMiLCBldmVudHMpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3Jl bGlkKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJPTiAle3JlbGF0aW9ufUQiLCB0bXBf b2JqKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiRlJPTSIpOworCWlmICh0cmlnRm9ybS0+ dGdjb25zdHJyZWxpZCkKKwl7CisJCU9ialRyZWUgICAgKnJlbDsKKworCQlyZWwgPSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSAgdHJp Z0Zvcm0tPnRnY29uc3RycmVsaWQpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAi JXtyZWxhdGlvbn1EIiwgcmVsKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtmcm9tX3RhYmxlfXMiLCB0bXBf b2JqKTsKKworCWlmIChub2RlLT5pc2NvbnN0cmFpbnQpCisJeworCQlpZiAoIW5vZGUtPmRlZmVy cmFibGUpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiTk9UIikp OworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiREVGRVJSQUJMRSBJ TklUSUFMTFkiKSk7CisJCWlmIChub2RlLT5pbml0ZGVmZXJyZWQpCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiREVGRVJSRUQiKSk7CisJCWVsc2UKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJJTU1FRElBVEUiKSk7CisJfQorCWFw cGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtjb25zdHJhaW50X2F0dHJzOiB9cyIsIGxpc3QpOwor CisJbGlzdCA9IE5JTDsKKwl2YWx1ZSA9IGZhc3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJp Z2dlcl90Z29sZHRhYmxlLAorCQkJCQkJUmVsYXRpb25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlz bnVsbCk7CisJaWYgKCFpc251bGwpCisJCXRnb2xkdGFibGUgPSBOYW1lU3RyKCpEYXR1bUdldE5h bWUodmFsdWUpKTsKKwllbHNlCisJCXRnb2xkdGFibGUgPSBOVUxMOworCXZhbHVlID0gZmFzdGdl dGF0dHIodHJpZ1R1cCwgQW51bV9wZ190cmlnZ2VyX3RnbmV3dGFibGUsCisJCQkJCQlSZWxhdGlv bkdldERlc2NyKHBnX3RyaWdnZXIpLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwkJdGduZXd0 YWJsZSA9IE5hbWVTdHIoKkRhdHVtR2V0TmFtZSh2YWx1ZSkpOworCWVsc2UKKwkJdGduZXd0YWJs ZSA9IE5VTEw7CisJaWYgKHRnb2xkdGFibGUgIT0gTlVMTCB8fCB0Z25ld3RhYmxlICE9IE5VTEwp CisJeworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiUkVGRVJFTkNJ TkciKSk7CisKKwkJaWYgKHRnb2xkdGFibGUgIT0gTlVMTCkKKwkJeworCQkJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIk9MRCBUQUJMRSBBUyIpKTsKKwkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHRnb2xkdGFibGUpKTsKKwkJfQorCQlpZiAo dGduZXd0YWJsZSAhPSBOVUxMKQorCQl7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdCgiTkVXIFRBQkxFIEFTIikpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X3N0cmluZ19vYmplY3QodGduZXd0YWJsZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiJXtyZWZlcmVuY2luZzogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIkZPUiBFQUNIICV7Zm9yX2VhY2h9cyIsICJmb3JfZWFjaCIsCisJCQkJCQkgbm9k ZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisKKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IldIRU4iKTsKKwlpZiAobm9kZS0+d2hlbkNsYXVzZSkKKwl7CisJCU5vZGUJICAgKndoZW5DbGF1 c2U7CisKKwkJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdnZXJfdGdx dWFsLAorCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwpOworCQlp ZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgdGdxdWFsIGZvciB0cmlnZ2VyIFwiJXNc IiIsCisJCQkJIE5hbWVTdHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCisJCXdoZW5DbGF1c2UgPSBz dHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBfb2JqLCAiKCV7Y2xhdXNlfXMpIiwgImNsYXVzZSIsCisJCQkJCQkJIHBnX2dl dF90cmlnZ2VyX3doZW5jbGF1c2UodHJpZ0Zvcm0sCisJCQkJCQkJCQkJCQkJICAgd2hlbkNsYXVz ZSwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3doZW59cyIsIHRt cF9vYmopOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2Z1bmNuYW1lfUQiLCAxLAor CQkJCQkJCSJmdW5jbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCXRyaWdGb3Jt LT50Z2ZvaWQpKTsKKwlsaXN0ID0gTklMOworCXRnbmFyZ3MgPSB0cmlnRm9ybS0+dGduYXJnczsK KwlpZiAodGduYXJncyA+IDApCisJeworCQlieXRlYQkgICAqdGdhcmdzOworCQljaGFyCSAgICph cmdzdHI7CisJCWludAkJCWZpbmR4OworCQlpbnQJCQlsZW50Z2FyZ3M7CisJCWNoYXIJICAgKnA7 CisKKwkJdGdhcmdzID0gRGF0dW1HZXRCeXRlYVAoZmFzdGdldGF0dHIodHJpZ1R1cCwKKwkJCQkJ CQkJCQkJQW51bV9wZ190cmlnZ2VyX3RnYXJncywKKwkJCQkJCQkJCQkJUmVsYXRpb25HZXREZXNj cihwZ190cmlnZ2VyKSwKKwkJCQkJCQkJCQkJJmlzbnVsbCkpOworCQlpZiAoaXNudWxsKQorCQkJ ZWxvZyhFUlJPUiwgIm51bGwgdGdhcmdzIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJIE5hbWVT dHIodHJpZ0Zvcm0tPnRnbmFtZSkpOworCQlhcmdzdHIgPSAoY2hhciAqKSBWQVJEQVRBKHRnYXJn cyk7CisJCWxlbnRnYXJncyA9IFZBUlNJWkVfQU5ZX0VYSERSKHRnYXJncyk7CisKKwkJcCA9IGFy Z3N0cjsKKwkJZm9yIChmaW5keCA9IDA7IGZpbmR4IDwgdGduYXJnczsgZmluZHgrKykKKwkJewor CQkJc2l6ZV90CQl0bGVuOworCisJCQkvKiBWZXJpZnkgdGhhdCB0aGUgYXJndW1lbnQgZW5jb2Rp bmcgaXMgY29ycmVjdCAqLworCQkJdGxlbiA9IHN0cmxlbihwKTsKKwkJCWlmIChwICsgdGxlbiA+ PSBhcmdzdHIgKyBsZW50Z2FyZ3MpCisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgYXJndW1lbnQg c3RyaW5nICglcykgZm9yIHRyaWdnZXIgXCIlc1wiIiwKKwkJCQkJIGFyZ3N0ciwgTmFtZVN0cih0 cmlnRm9ybS0+dGduYW1lKSk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KHApKTsKKworCQkJcCArPSB0bGVuICsgMTsKKwkJfQorCX0KKworCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcF9vYmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAi JXthcmdzOiwgfUwiLCBsaXN0KTsJLyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9z dHJpbmcodG1wX29iaiwgIikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkVYRUNV VEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259cyIsIHRtcF9vYmopOworCisJdGFibGVfY2xvc2UocGdf dHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlVXNlck1hcHBpbmdTdG10IChDUkVBVEUgVVNFUiBNQVBQSU5HKQorICoK KyAqIEdpdmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LAorICogcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVVNF UiBNQVBQSU5HIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBVU0VS IE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUNyZWF0ZVVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2Vy TWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbgly ZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWln blNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9u SWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBj YXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBh bmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2Jq ZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBP SUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcp IEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2Vy dmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAl e3JvbGV9UiBTRVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJ CSAicm9sZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQo Zm9ybS0+dW11c2VyKSwKKwkJCQkJCSAic2VydmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5z ZXJ2ZXJuYW1lLAorCQkJCQkJICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNl U3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdp dmVuIGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1S IFNFUlZFUiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJV c2VyTWFwcGluZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJV c2VyTWFwcGluZ1N0bXQgKm5vZGUgPSAoQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVl OworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZv cm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVs ID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwor CisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZl IHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNl YXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29r dXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK KworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2 ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1J ICV7Z2VuZXJpY19vcHRpb25zfXMiLCAzLAorCQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJz ZXJ2ZXIiLCBPYmpUeXBlU3RyaW5nLCBzZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVy aWNfb3B0aW9ucyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5v ZGUtPm9wdGlvbnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhbiBBbHRlclN0YXRzU3RtdCAoQUxURVIgU1RBVElTVElDUykKKyAqCisgKiBHaXZlbiBh IGFsdGVyIHN0YXRpc3RpY3MgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFNUQVRJU1RJQ1MgJXtpZGVudGl0eX1EIFNF VCBTVEFUSVNUSUNTICV7dGFyZ2V0fW4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9B bHRlclN0YXRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclN0 YXRzU3RtdCAqbm9kZSA9IChBbHRlclN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqcmV0OworCUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07 CisKKwlpZiAoIW5vZGUtPnN0eHN0YXR0YXJnZXQpCisJCXJldHVybiBOVUxMOworCisJLyogTG9v a3VwIG9iamVjdCBpbiB0aGUgY2F0YWxvZyAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRF WFRPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGlj IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0 aWNfZXh0KSBHRVRTVFJVQ1QodHApOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTVEFU SVNUSUNTICV7aWRlbnRpdHl9RCBTRVQgU1RBVElTVElDUyAle3RhcmdldH1uIiwgMiwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0YXRm b3JtLT5zdHhuYW1lKSksCisJCQkJCQkgInRhcmdldCIsIE9ialR5cGVJbnRlZ2VyLCBub2RlLT5z dHhzdGF0dGFyZ2V0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYSBSZWZyZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJ WkVEIFZJRVcpCisgKgorICogR2l2ZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2Vu dGluZyB0aGUgcmVmcmVzaCBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUZS RVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EICV7d2l0 aF9ub19kYXRhfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWZyZXNoTWF0Vmll d1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVmcmVzaE1hdFZpZXdT dG10ICpub2RlID0gKFJlZnJlc2hNYXRWaWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZS RVNIIE1BVEVSSUFMSVpFRCBWSUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EIiwgMiwK KwkJCQkJCSAiY29uY3VycmVudGx5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25j dXJyZW50ID8gIkNPTkNVUlJFTlRMWSIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERB VEEgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJ CQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCSBub2RlLT5za2lwRGF0YSA/IHRy dWUgOiBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9 cyIsIHRtcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0 bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMgJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFBPTElDWSAl e2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtu ZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFJFTkFNRSBDT05T VFJBSU5UICV7b2xkbmFtZX1JIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgVEFCTEUg JXtpZGVudGl0eX1EIFJFTkFNRSBDT05TVFJBSU5UICV7b2xkbmFtZX1JIFRPICV7bmV3bmFtZX1J CisgKiBPUgorICogQUxURVIgb2JqdHlwZSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURSAl e2NvbG5hbWV9SSBUTyAle25ld25hbWV9SSAle2Nhc2NhZGV9cworICogT1IKKyAqIEFMVEVSIG9i anR5cGUgJXtpZl9leGlzdHN9cyAlJXtpZGVudGl0eX1EIFJFTkFNRSBDT0xVTU4gJXtjb2xuYW1l fUkgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0eX1zIFJFTkFN RSBUTyAlJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtpZGVudGl0eX1EIFVTSU5H ICUle2luZGV4X21ldGhvZH1zIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRF UiBTQ0hFTUEgJXtpZGVudGl0eX1JIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFM VEVSIFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1l fUkKKyAqIE9SCisgKiBBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAle2lkZW50aXR5 fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgJXMgJSV7aWRlbnRpdHl9 RCBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf UmVuYW1lU3RtdChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlS ZW5hbWVTdG10ICpub2RlID0gKFJlbmFtZVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAg KnJldDsKKwlSZWxhdGlvbglyZWxhdGlvbjsKKwlPaWQJCQlzY2hlbWFJZDsKKworCS8qCisJICog SW4gYW4gQUxURVIgLi4gUkVOQU1FIGNvbW1hbmQsIHdlIGRvbid0IGhhdmUgdGhlIG9yaWdpbmFs IG5hbWUgb2YgdGhlCisJICogb2JqZWN0IGluIHN5c3RlbSBjYXRhbG9nczogc2luY2Ugd2UgaW5z cGVjdCB0aGVtIGFmdGVyIHRoZSBjb21tYW5kIGhhcworCSAqIGV4ZWN1dGVkLCB0aGUgb2xkIG5h bWUgaXMgYWxyZWFkeSBnb25lLiAgVGhlcmVmb3JlLCB3ZSBleHRyYWN0IGl0IGZyb20KKwkgKiB0 aGUgcGFyc2Ugbm9kZS4gIE5vdGUgd2Ugc3RpbGwgZXh0cmFjdCB0aGUgc2NoZW1hIG5hbWUgZnJv bSB0aGUgY2F0YWxvZworCSAqIChpdCBtaWdodCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcGFyc2Ug bm9kZSk7IGl0IGNhbm5vdCBwb3NzaWJseSBoYXZlCisJICogY2hhbmdlZCBhbnl3YXkuCisJICov CisJc3dpdGNoIChub2RlLT5yZW5hbWVUeXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJ CWNhc2UgT0JKRUNUX0lOREVYOgorCQljYXNlIE9CSkVDVF9TRVFVRU5DRToKKwkJY2FzZSBPQkpF Q1RfVklFVzoKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25f b3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBS ZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlvbik7CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgJXtvYmp0eXBlfXMgJXtpZl9leGlzdHN9cyAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7 bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJ ICJpZl9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ ICJJRiBFWElTVFMiIDogIiIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJ CQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSwKKwkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJcmVsYXRpb25fY2xvc2UocmVs YXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9QT0xJ Q1k6CisJCQl7CisJCQkJSGVhcFR1cGxlCXBvbFR1cDsKKwkJCQlGb3JtX3BnX3BvbGljeSBwb2xG b3JtOworCQkJCVJlbGF0aW9uCXBnX3BvbGljeTsKKwkJCQlTY2FuS2V5RGF0YSBrZXk7CisJCQkJ U3lzU2NhbkRlc2Mgc2NhbjsKKworCQkJCXBnX3BvbGljeSA9IHJlbGF0aW9uX29wZW4oUG9saWN5 UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlTY2FuS2V5SW5pdCgma2V5LCBBbnVt X3BnX3BvbGljeV9vaWQsCisJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAor CQkJCQkJCU9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXNjYW4gPSBz eXN0YWJsZV9iZWdpbnNjYW4ocGdfcG9saWN5LCBQb2xpY3lPaWRJbmRleElkLCB0cnVlLAorCQkJ CQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJCQkJcG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChz Y2FuKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocG9sVHVwKSkKKwkJCQkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHBvbGljeSB3aXRoIE9JRCAldSIsCisJCQkJCQkg YWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcG9sRm9ybSA9IChGb3JtX3BnX3BvbGljeSkgR0VUU1RS VUNUKHBvbFR1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZICV7 aWZfZXhpc3RzfXMgJXtwb2xpY3luYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25l d25hbWV9SSIsIDQsCisJCQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIsCisJCQkJCQkJCQkgInBv bGljeW5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPnN1Ym5hbWUsCisJCQkJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBwb2xG b3JtLT5wb2xyZWxpZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJIG5vZGUtPm5ld25hbWUpOworCQkJCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJCQkJ cmVsYXRpb25fY2xvc2UocGdfcG9saWN5LCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJl YWs7CisKKwkJY2FzZSBPQkpFQ1RfRE9NQ09OU1RSQUlOVDoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJ ZG9tdHVwOworCQkJCUhlYXBUdXBsZQljb25zdHR1cDsKKwkJCQlGb3JtX3BnX2NvbnN0cmFpbnQg Y29uc3Rmb3JtOworCQkJCUZvcm1fcGdfdHlwZSBkb21mb3JtOworCisJCQkJLyogR2V0IGRvbWFp biBpZCBmcm9tIHRoZSBjb25zdHJhaW50ICovCisJCQkJY29uc3R0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoQ09OU1RST0lELAorCQkJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmpl Y3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25zdHR1cCkpCisJCQkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb25zdHJhaW50IHdpdGggT0lEICV1IiwK KwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQljb25zdGZvcm0gPSAoRm9ybV9wZ19jb25z dHJhaW50KSBHRVRTVFJVQ1QoY29uc3R0dXApOworCisJCQkJZG9tdHVwID0gU2VhcmNoU3lzQ2Fj aGUxKFRZUEVPSUQsCisJCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0oY29uc3Rmb3JtLT5jb250 eXBpZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChkb210dXApKQorCQkJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1IiwKKwkJCQkJ CSBjb25zdGZvcm0tPmNvbnR5cGlkKTsKKwkJCQlSZWxlYXNlU3lzQ2FjaGUoY29uc3R0dXApOwor CisJCQkJZG9tZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChkb210dXApOworCQkJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFJFTkFNRSBDT05T VFJBSU5UICV7b2xkbmFtZX1JIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCSJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tZm9ybS0+ dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJIE5hbWVTdHIoZG9tZm9ybS0+dHlwbmFtZSkpLAor CQkJCQkJIm9sZG5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJIm5l d25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlSZWxlYXNlU3lzQ2Fj aGUoZG9tdHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RBQkNPTlNUUkFJ TlQ6CisJCQl7CisJCQkJSGVhcFR1cGxlCWNvbnN0cnR1cDsKKwkJCQlGb3JtX3BnX2NvbnN0cmFp bnQgY29uc3Rmb3JtOworCisJCQkJY29uc3RydHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9J RCwKKwkJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0cnR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBjb25zdHJhaW50IHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRy ZXNzLm9iamVjdElkKTsKKwkJCQljb25zdGZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRT VFJVQ1QoY29uc3RydHVwKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUQUJM RSAle2lkZW50aXR5fUQgUkVOQU1FIENPTlNUUkFJTlQgJXtvbGRuYW1lfUkgVE8gJXtuZXduYW1l fUkiLCAzLAorCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCQkJY29uc3Rmb3JtLT5jb25yZWxpZCksCisJCQkJCQkJCQkib2xkbmFtZSIsIE9ialR5cGVT dHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCQkibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPm5ld25hbWUpOworCQkJCVJlbGVhc2VTeXNDYWNoZShjb25zdHJ0dXApOworCQkJfQor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQVRUUklCVVRFOgorCQljYXNlIE9CSkVDVF9DT0xV TU46CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24p OworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRUUklC VVRFICV7Y29sbmFtZX1JIiwgMiwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJ CQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpLAorCQkJCQkJCQkJICJjb2xuYW1lIiwg T2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSk7CisJCQllbHNlCisJCQl7CisJCQkJcmV0ID0g bmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zIiwgMSwKKwkJCQkJCQkJCSAib2JqdHlw ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVs YXRpb25UeXBlLCBmYWxzZSkpOworCisJCQkJLyogQ29tcG9zaXRlIHR5cGVzIGRvIG5vdCBzdXBw b3J0IElGIEVYSVNUUyAqLworCQkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9DT0xV TU4pCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7aWZfZXhpc3RzfXMiLAorCQkJ CQkJCQkJCSAiaWZfZXhpc3RzIiwKKwkJCQkJCQkJCQkgbm9kZS0+bWlzc2luZ19vayA/ICJJRiBF WElTVFMiIDogIiIpOworCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0 eX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJ CQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKSk7CisJCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QocmV0LCAiUkVOQU1FIENPTFVNTiAle2NvbG5hbWV9SSIsCisJCQkJCQkJCQkgImNv bG5hbWUiLCBub2RlLT5zdWJuYW1lKTsKKwkJCX0KKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiVE8gJXtuZXduYW1lfUkiLCAibmV3bmFtZSIsCisJCQkJCQkJCSBub2RlLT5uZXduYW1l KTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Nhc2NhZGV9cyIsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJv b2wsCisJCQkJCQkJCQkJCQkJbm9kZS0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKSk7CisKKwkJ CXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJYnJlYWs7CisK KwkJY2FzZSBPQkpFQ1RfQUdHUkVHQVRFOgorCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2Fz ZSBPQkpFQ1RfUk9VVElORToKKwkJCXsKKwkJCQljaGFyCSAgICppZGVudDsKKwkJCQlIZWFwVHVw bGUJcHJvY3R1cDsKKwkJCQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07CisJCQkJTGlzdAkgICAqaWRl bnRpdHk7CisKKwkJCQlBc3NlcnQoSXNBKG5vZGUtPm9iamVjdCwgT2JqZWN0V2l0aEFyZ3MpKTsK KwkJCQlpZGVudGl0eSA9ICgoT2JqZWN0V2l0aEFyZ3MgKikgbm9kZS0+b2JqZWN0KS0+b2JqbmFt ZTsKKworCQkJCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwKKwkJCQkJCQkJCQkg IE9iamVjdElkR2V0RGF0dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxl SXNWYWxpZChwcm9jdHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJ CQkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkJCQkv KiBYWFggZG9lcyB0aGlzIHdvcmsgZm9yIG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ICovCisJCQkJ aWRlbnQgPSBwc3ByaW50ZigiJXMlcyIsCisJCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRp ZmllcihnZXRfbmFtZXNwYWNlX25hbWUocHJvY2Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJ CQkJCQkJCQlzdHJWYWwobGxhc3QoaWRlbnRpdHkpKSksCisJCQkJCQkJCSBmb3JtYXRfcHJvY2Vk dXJlX2FyZ3MoYWRkcmVzcy5vYmplY3RJZCwgdHJ1ZSkpOworCisJCQkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJXtuZXduYW1l fUkiLCAzLAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBz dHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpU eXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVw KTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJ SGVhcFR1cGxlCW9wY1R1cDsKKwkJCQlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwkJCQlMaXN0 CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9w Y25hbWU7CisKKwkJCQlvcGNUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdl dERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3Bj VHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mg d2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCisJCQkJb3BjRm9ybSA9 IChGb3JtX3BnX29wY2xhc3MpIEdFVFNUUlVDVChvcGNUdXApOworCisJCQkJb2xkbmFtZXMgPSBs aXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBub2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogRGVjb25z dHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLworCQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRu YW1lcywgJnNjaGVtYW5hbWUsICZvcGNuYW1lKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgVVNJTkcgJXtpbmRleF9tZXRob2R9cyBS RU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxz ZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUob3BjRm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CQkJICBvcGNuYW1lKSwKKwkJCQkJCQkJCSAiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCSBnZXRfYW1fbmFtZShvcGNGb3JtLT5vcGNtZXRob2QpLAorCQkJCQkJCQkJICJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lz Q2FjaGUob3BjVHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRkFNSUxZ OgorCQkJeworCQkJCUhlYXBUdXBsZQlvcGZUdXA7CisJCQkJSGVhcFR1cGxlCWFtVHVwOworCQkJ CUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwkJCQlGb3JtX3BnX2FtCWFtRm9ybTsKKwkJCQlM aXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAg Km9wZm5hbWU7CisKKwkJCQlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIGFk ZHJlc3Mub2JqZWN0SWQpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQkJ CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdp dGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJCQkJYW1UdXAgPSBTZWFyY2hT eXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJ CQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJCQkJIG9w ZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJCQlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNU KGFtVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+ b2JqZWN0LCAxKTsKKworCQkJCS8qIERlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlE ZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFtZSk7 CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0 eX1EIFVTSU5HICV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJ CQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29i anR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0t Pm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgb3BmbmFtZSksCisJCQkJCQkJCQkgImlu ZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgTmFtZVN0cihhbUZvcm0tPmFt bmFtZSksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShhbVR1cCk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKG9w ZlR1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtu ZXduYW1lfUkiLCAyLAorCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ c3VibmFtZSwKKwkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFt ZSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9GRFc6CisJCWNhc2UgT0JKRUNUX0xBTkdV QUdFOgorCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZFUjoKKwkJY2FzZSBPQkpFQ1RfUFVCTElD QVRJT046CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVu dGl0eX1zIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCSAib2JqdHlwZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBl LCBmYWxzZSksCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkg c3RyVmFsKGNhc3ROb2RlKFN0cmluZywgbm9kZS0+b2JqZWN0KSksCisJCQkJCQkJCSAibmV3bmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBP QkpFQ1RfUlVMRToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcmV3clR1cDsKKwkJCQlGb3JtX3BnX3Jl d3JpdGUgcmV3ckZvcm07CisJCQkJUmVsYXRpb24JcGdfcmV3cml0ZTsKKworCQkJCXBnX3Jld3Jp dGUgPSByZWxhdGlvbl9vcGVuKFJld3JpdGVSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCXJld3JUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3Jld3JpdGUsIEFudW1f cGdfcmV3cml0ZV9vaWQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXJld3JGb3JtID0gKEZvcm1f cGdfcmV3cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIFJVTEUgJXtydWxlbmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtu ZXduYW1lfUkiLCAzLAorCQkJCQkJCQkJICJydWxlbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt PnN1Ym5hbWUsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkJCSByZXdyRm9ybS0+ZXZfY2xhc3MpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2Jq VHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xvc2UocGdfcmV3cml0 ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1RS SUdHRVI6CisJCQl7CisJCQkJSGVhcFR1cGxlCXRyaWdUdXA7CisJCQkJRm9ybV9wZ190cmlnZ2Vy IHRyaWdGb3JtOworCQkJCVJlbGF0aW9uCXBnX3RyaWdnZXI7CisKKwkJCQlwZ190cmlnZ2VyID0g cmVsYXRpb25fb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl0 cmlnVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwZ190cmlnZ2VyLCBnZXRfb2JqZWN0 X2F0dG51bV9vaWQoYWRkcmVzcy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJdHJp Z0Zvcm0gPSAoRm9ybV9wZ190cmlnZ2VyKSBHRVRTVFJVQ1QodHJpZ1R1cCk7CisKKwkJCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVu dGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkgInRyaWdnZXJuYW1l IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxh dGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3JlbGlkKSwKKwkJ CQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCisJCQkJ cmVsYXRpb25fY2xvc2UocGdfdHJpZ2dlciwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJy ZWFrOworCisJCWNhc2UgT0JKRUNUX0NPTExBVElPTjoKKwkJY2FzZSBPQkpFQ1RfU1RBVElTVElD X0VYVDoKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJY2FzZSBPQkpFQ1RfQ09OVkVSU0lPTjoKKwkJ Y2FzZSBPQkpFQ1RfRE9NQUlOOgorCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05BUlk6CisJCWNhc2Ug T0JKRUNUX1RTUEFSU0VSOgorCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQljYXNlIE9CSkVD VF9UU0NPTkZJR1VSQVRJT046CisJCQl7CisJCQkJSGVhcFR1cGxlCW9ialR1cDsKKwkJCQlSZWxh dGlvbgljYXRhbG9nOworCQkJCURhdHVtCQlvYmpuc3A7CisJCQkJYm9vbAkJaXNudWxsOworCQkJ CUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJCQkJTGlzdAkgICAqaWRlbnRpdHkgPSBjYXN0 Tm9kZShMaXN0LCBub2RlLT5vYmplY3QpOworCisJCQkJLyogT2J0YWluIG9iamVjdCB0dXBsZSAq LworCQkJCWNhdGFsb2cgPSByZWxhdGlvbl9vcGVuKGFkZHJlc3MuY2xhc3NJZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwkJCQlvYmpUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFsb2cs IGdldF9vYmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElk KTsKKworCQkJCS8qIE9idGFpbiBuYW1lc3BhY2UgKi8KKwkJCQlBbnVtX25hbWVzcGFjZSA9IGdl dF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShhZGRyZXNzLmNsYXNzSWQpOworCQkJCW9iam5zcCA9 IGhlYXBfZ2V0YXR0cihvYmpUdXAsIEFudW1fbmFtZXNwYWNlLAorCQkJCQkJCQkJICBSZWxhdGlv bkdldERlc2NyKGNhdGFsb2cpLCAmaXNudWxsKTsKKwkJCQlpZiAoaXNudWxsKQorCQkJCQllbG9n KEVSUk9SLCAiaW52YWxpZCBOVUxMIG5hbWVzcGFjZSIpOworCisJCQkJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1l fUkiLCAzLAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBz dHJpbmdpZnlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoRGF0dW1HZXRPYmplY3RJZChvYmpuc3ApLAorCQkJCQkJCQkJCQkJCQkJICBzdHJWYWwobGxh c3QoaWRlbnRpdHkpKSksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2sp OworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBv cnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUpOworCX0KKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAoQUxURVIg Li4uIERFUEVORFMgT04gLi4uKS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgSU5E RVggJXtpZGVudGl0eX1EICV7bm99cyBERVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25hbWV9SQor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRGVwZW5kU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck9iamVjdERlcGVuZHNTdG10ICpub2RlID0g KEFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldCA9 IE5VTEw7CisKKwlpZiAobm9kZS0+b2JqZWN0VHlwZSA9PSBPQkpFQ1RfSU5ERVgpCisJeworCQlP YmpUcmVlICAgICpxdWFsaWZpZWQ7CisJCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3Bl bihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCQlxdWFsaWZpZWQgPSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpOworCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwg QWNjZXNzU2hhcmVMb2NrKTsKKworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgSU5ERVgg JXtpZGVudGl0eX1EICV7bm99cyBERVBFTkRTIE9OIEVYVEVOU0lPTiAle25ld25hbWV9SSIsIDMs CisJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsIHF1YWxpZmllZCwKKwkJCQkJCQkg Im5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgbm9kZS0+cmVtb3ZlID8gIk5PIiA6ICIiLAor CQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIHN0clZhbChub2RlLT5leHRuYW1lKSk7 CisJfQorCWVsc2UKKwkJZWxvZyhMT0csICJ1bnJlY29nbml6ZWQgbm9kZSB0eXBlIGluIGRlcGFy c2UgY29tbWFuZDogJWQiLAorCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFJ1bGVTdG10IChDUkVBVEUgUlVMRSkuCisg KgorICogR2l2ZW4gYSBydWxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBydWxlIGNvbW1hbmQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBSVUxFICV7b3JfcmVwbGFjZX1zICV7aWRl bnRpdHl9SSBBUyBPTiAle2V2ZW50fXMgVE8gJXt0YWJsZX1ECisgKiAle3doZXJlX2NsYXVzZX1z IERPICV7aW5zdGVhZH1zICV7YWN0aW9uczosIH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfUnVsZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUnVsZVN0 bXQgICAqbm9kZSA9IChSdWxlU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0Owor CU9ialRyZWUgICAgKnRtcDsKKwlSZWxhdGlvbglwZ19yZXdyaXRlOworCUZvcm1fcGdfcmV3cml0 ZSByZXdyRm9ybTsKKwlIZWFwVHVwbGUJcmV3clR1cDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNj YW5LZXlEYXRhIGtleTsKKwlEYXR1bQkJZXZfcXVhbDsKKwlEYXR1bQkJZXZfYWN0aW9uczsKKwli b29sCQlpc251bGw7CisJY2hhcgkgICAqcXVhbDsKKwlMaXN0CSAgICphY3Rpb25zOworCUxpc3QJ ICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljaGFyCSAgICpldmVudF9zdHI7 CisKKwlwZ19yZXdyaXRlID0gdGFibGVfb3BlbihSZXdyaXRlUmVsYXRpb25JZCwgQWNjZXNzU2hh cmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5LAorCQkJCUFudW1fcGdfcmV3cml0ZV9vaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLAorCQkJCUZfT0lERVEsIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocGdfcmV3cml0ZSwgUmV3 cml0ZU9pZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwlyZXdyVHVw ID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocmV3clR1 cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZXdyaXRlIHJ1bGUg d2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJld3JGb3JtID0gKEZvcm1fcGdfcmV3 cml0ZSkgR0VUU1RSVUNUKHJld3JUdXApOworCisJZXZlbnRfc3RyID0gbm9kZS0+ZXZlbnQgPT0g Q01EX1NFTEVDVCA/ICJTRUxFQ1QiIDoKKwkJbm9kZS0+ZXZlbnQgPT0gQ01EX1VQREFURSA/ICJV UERBVEUiIDoKKwkJbm9kZS0+ZXZlbnQgPT0gQ01EX0RFTEVURSA/ICJERUxFVEUiIDoKKwkJbm9k ZS0+ZXZlbnQgPT0gQ01EX0lOU0VSVCA/ICJJTlNFUlQiIDogTlVMTDsKKwlBc3NlcnQoZXZlbnRf c3RyICE9IE5VTEwpOworCisJZXZfcXVhbCA9IGhlYXBfZ2V0YXR0cihyZXdyVHVwLCBBbnVtX3Bn X3Jld3JpdGVfZXZfcXVhbCwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSks ICZpc251bGwpOworCWV2X2FjdGlvbnMgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19y ZXdyaXRlX2V2X2FjdGlvbiwKKwkJCQkJCQkgIFJlbGF0aW9uR2V0RGVzY3IocGdfcmV3cml0ZSks ICZpc251bGwpOworCisJcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoZXZfcXVhbCwgZXZfYWN0aW9u cywgJnF1YWwsICZhY3Rpb25zKTsKKworCXRtcCA9IG5ld19vYmp0cmVlKCIiKTsKKwlpZiAocXVh bCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiV0hFUkUgJXtjbGF1c2V9cyIsICJjbGF1 c2UiLCBxdWFsKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiV0hFUkUg JXtjbGF1c2V9cyIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9CisKKwlpZiAoYWN0 aW9ucyA9PSBOSUwpCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KCJO T1RISU5HIikpOworCWVsc2UKKwl7CisJCWZvcmVhY2goY2VsbCwgYWN0aW9ucykKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KGxmaXJzdChjZWxsKSkpOworCX0KKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50 aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7dGFibGV9RCAle3doZXJlX2NsYXVzZX1zIERPICV7 aW5zdGVhZH1zIiwgNiwKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVTdHJpbmcsIG5vZGUtPnJ1bGVuYW1lLAorCQkJCQkJICJldmVudCIsIE9ialR5cGVT dHJpbmcsIGV2ZW50X3N0ciwKKwkJCQkJCSAidGFibGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkgIndoZXJlX2NsYXVzZSIsIE9ialR5 cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAiaW5zdGVhZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkg bm9kZS0+aW5zdGVhZCA/ICJJTlNURUFEIiA6ICJBTFNPIik7CisKKwlpZiAobGlzdF9sZW5ndGgo bGlzdCkgPiAxKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle2FjdGlvbnM6OyB9cyki LCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXthY3Rpb25zOjsg fXMiLCBsaXN0KTsKKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdf cmV3cml0ZSwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlVHJhbnNmb3JtU3RtdCAoQ1JFQVRFIFRSQU5TRk9STSkuCisgKgorICog R2l2ZW4gYSB0cmFuc2Zvcm0gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIENSRUFURSBUUkFOU0ZPUk0g Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1z IFRSQU5TRk9STSBGT1IgJXt0eXBlbmFtZX1EIExBTkdVQUdFICV7bGFuZ3VhZ2V9SQorICogKCBG Uk9NIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlfXMsIFRPIFNRTCBXSVRIIEZVTkNUSU9O CisgKiAle3NpZ25hdHVyZV90b2Z9cyApCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlVHJhbnNmb3JtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVUcmFuc2Zvcm1TdG10ICpub2RlID0gKENyZWF0ZVRyYW5zZm9ybVN0bXQgKikgcGFyc2V0 cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICpzaWduYXR1cmU7CisJSGVhcFR1 cGxlCXRyZlR1cDsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlG b3JtX3BnX3RyYW5zZm9ybSB0cmZGb3JtOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFuZ0Zvcm07CisJ Rm9ybV9wZ19wcm9jIHByb2NGb3JtOworCWludAkJCWk7CisKKwkvKiBHZXQgdGhlIHBnX3RyYW5z Zm9ybSB0dXBsZSAqLworCXRyZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShUUkZPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHJmVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRyYW5zZm9ybSB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCXRyZkZvcm0gPSAoRm9ybV9wZ190cmFuc2Zvcm0pIEdFVFNU UlVDVCh0cmZUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5nIHBnX2xhbmd1YWdlIHR1 cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELCB0cmZGb3JtLT50cmZs YW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsCisJCQkgdHJmRm9y bS0+dHJmbGFuZyk7CisJbGFuZ0Zvcm0gPSAoRm9ybV9wZ19sYW5ndWFnZSkgR0VUU1RSVUNUKGxh bmdUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle29yX3JlcGxhY2V9cyBU UkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFHRSAle2xhbmd1YWdlfUkiLCAzLAorCQkJ CQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBsYWNlID8g Ik9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInR5cGVuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJIHRyZkZvcm0tPnRyZnR5cGUpLAorCQkJCQkJICJsYW5ndWFnZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFubmFtZSkpOworCisJLyogRGVwYXJzZSB0 aGUgdHJhbnNmb3JtX2VsZW1lbnRfbGlzdCAqLworCWlmIChPaWRJc1ZhbGlkKHRyZkZvcm0tPnRy ZmZyb21zcWwpKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qIEdldCB0aGUg cGdfcHJvYyB0dXBsZSBmb3IgdGhlIEZST00gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZmcm9tc3FsKTsKKwkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkgdHJmRm9ybS0+dHJmZnJvbXNxbCk7CisJ CXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJCS8qCisJ CSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNpZ25hdHVyZSBz byB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0IHR5cGUgT2lkcy4KKwkJICov CisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2Jq VHJlZSAgICAqcGFyYW1fb2JqOworCisJCQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0 eXBlfVQiLCAxLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkp OworCQkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29i aikpOworCQl9CisKKwkJc2lnbmF0dXJlID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHl9RCAo JXthcmd1bWVudHM6LCB9cykiLCAyLAorCQkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQkgICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCU5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSwKKwkJ CQkJCQkJICAgImFyZ3VtZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1zKTsKKworCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIoRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1z IiwKKwkJCQkJCQkgc2lnbmF0dXJlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0K KwlpZiAoT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZ0b3NxbCkpCisJeworCQlMaXN0CSAgICpwYXJh bXMgPSBOSUw7CisKKwkJLyogQXBwZW5kIGEgJywnIGlmIHRyZmZyb21zcWwgaXMgcHJlc2VudCwg ZWxzZSBhcHBlbmQgJygnICovCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgT2lkSXNWYWxp ZCh0cmZGb3JtLT50cmZmcm9tc3FsKSA/ICIsIiA6ICIoIik7CisKKwkJLyogR2V0IHRoZSBwZ19w cm9jIHR1cGxlIGZvciB0aGUgVE8gRlVOQ1RJT04gKi8KKwkJcHJvY1R1cCA9IFNlYXJjaFN5c0Nh Y2hlMShQUk9DT0lELCB0cmZGb3JtLT50cmZ0b3NxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxp ZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5j dGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIHRyZkZvcm0tPnRyZnRvc3FsKTsKKwkJcHJvY0Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJLyoKKwkJICogQ1JFQVRF IFRSQU5TRk9STSBkb2VzIG5vdCBjaGFuZ2UgZnVuY3Rpb24gc2lnbmF0dXJlIHNvIHdlIGNhbiB1 c2UKKwkJICogY2F0YWxvZyB0byBnZXQgaW5wdXQgdHlwZSBPaWRzLgorCQkgKi8KKwkJZm9yIChp ID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCQl7CisJCQlPYmpUcmVlICAgICpw YXJhbV9vYmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCXBhcmFtX29iaiA9IG5ld19vYmp0cmVl X1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVl c1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1zLCBuZXdfb2JqZWN0X29iamVj dChwYXJhbV9vYmopKTsKKwkJfQorCisJCXNpZ25hdHVyZSA9IG5ld19vYmp0cmVlX1ZBKCIle2lk ZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCQkJICAgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NG b3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKHByb2NGb3JtLT5wcm9u YW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisK KwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiVE8gU1FMIFdJVEggRlVOQ1RJT04gJXtzaWdu YXR1cmVfdG9mfXMiLAorCQkJCQkJCSBzaWduYXR1cmUpOworCQlSZWxlYXNlU3lzQ2FjaGUocHJv Y1R1cCk7CisJfQorCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiKSIpOworCisJUmVsZWFz ZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNoZSh0cmZUdXApOworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ29tbWVudFN0bXQgd2hlbiBpdCBwZXJ0YWlucyB0 byBhIGNvbnN0cmFpbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENPTU1FTlQgT04gQ09O U1RSQUlOVCAle2lkZW50aXR5fXMgT04gW0RPTUFJTl0gJXtwYXJlbnRvYmp9cyBJUyAle2NvbW1l bnR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbW1lbnRPbkNvbnN0cmFpbnRT bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tbWVudFN0bXQgKm5vZGUg PSAoQ29tbWVudFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlIZWFwVHVw bGUJY29uc3RyVHVwOworCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOworCU9iamVjdEFk ZHJlc3MgYWRkcjsKKworCUFzc2VydChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJDT05TVFJB SU5UIHx8IG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQpOworCisJY29uc3Ry VHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwgb2JqZWN0SWQpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChjb25zdHJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxl ZCBmb3IgY29uc3RyYWludCB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb25zdHJGb3JtID0g KEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvbnN0clR1cCk7CisKKwlpZiAoT2lkSXNW YWxpZChjb25zdHJGb3JtLT5jb25yZWxpZCkpCisJCU9iamVjdEFkZHJlc3NTZXQoYWRkciwgUmVs YXRpb25SZWxhdGlvbklkLCBjb25zdHJGb3JtLT5jb25yZWxpZCk7CisJZWxzZQorCQlPYmplY3RB ZGRyZXNzU2V0KGFkZHIsIFR5cGVSZWxhdGlvbklkLCBjb25zdHJGb3JtLT5jb250eXBpZCk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ09NTUVOVCBPTiBDT05TVFJBSU5UICV7aWRlbnRpdHl9 cyBPTiAle2RvbWFpbn1zICV7cGFyZW50b2JqfXMiLCAzLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVTdHJpbmcsIHBzdHJkdXAoTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSksCisJCQkJ CQkgImRvbWFpbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgKG5vZGUtPm9ianR5cGUgPT0gT0JK RUNUX0RPTUNPTlNUUkFJTlQpID8gIkRPTUFJTiIgOiAiIiwKKwkJCQkJCSAicGFyZW50b2JqIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRPYmplY3RJZGVudGl0eSgmYWRkciwgZmFsc2UpKTsK KworCS8qIEFkZCB0aGUgY29tbWVudCBjbGF1c2UgKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9udWxs KHJldCwgIklTICV7Y29tbWVudH1zIiwgbm9kZS0+Y29tbWVudCk7CisKKwlSZWxlYXNlU3lzQ2Fj aGUoY29uc3RyVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBDb21t ZW50U3RtdCAoQ09NTUVOVCBPTiAuLi4pLgorICoKKyAqIEdpdmVuIHRoZSBvYmplY3QgYWRkcmVz cyBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRy ZWUgcmVwcmVzZW50aW5nIHRoZSBjb21tZW50IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENPTU1FTlQgT04gJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIElTICV7Y29tbWVudH1z CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tbWVudFN0bXQoT2JqZWN0QWRkcmVz cyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ29tbWVudFN0bXQgKm5vZGUgPSAoQ29t bWVudFN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICppZGVu dGl0eTsKKworCS8qIENvbW1lbnQgb24gc3Vic2NyaXB0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKi8K KwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfU1VCU0NSSVBUSU9OKQorCQlyZXR1cm4gTlVM TDsKKworCS8qCisJICogQ29uc3RyYWludHMgYXJlIHN1ZmZpY2llbnRseSBkaWZmZXJlbnQgdGhh dCBpdCBpcyBlYXNpZXIgdG8gaGFuZGxlIHRoZW0KKwkgKiBzZXBhcmF0ZWx5LgorCSAqLworCWlm IChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5UIHx8CisJCW5vZGUtPm9ianR5 cGUgPT0gT0JKRUNUX1RBQkNPTlNUUkFJTlQpCisJeworCQlBc3NlcnQoYWRkcmVzcy5jbGFzc0lk ID09IENvbnN0cmFpbnRSZWxhdGlvbklkKTsKKwkJcmV0dXJuIGRlcGFyc2VfQ29tbWVudE9uQ29u c3RyYWludFNtdChhZGRyZXNzLm9iamVjdElkLCBwYXJzZXRyZWUpOworCX0KKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDT01NRU5UIE9OICV7b2JqdHlwZX1zIiwgMSwKKwkJCQkJCSAib2JqdHlw ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgKGNoYXIgKikgc3RyaW5naWZ5X29ianR5cGUobm9k ZS0+b2JqdHlwZSwgZmFsc2UpKTsKKworCS8qCisJICogQWRkIHRoZSBvYmplY3QgaWRlbnRpdHkg Y2xhdXNlLiAgRm9yIHplcm8gYXJndW1lbnQgYWdncmVnYXRlcyB3ZSBuZWVkCisJICogdG8gYWRk IHRoZSAoKikgYml0OyBpbiBhbGwgb3RoZXIgY2FzZXMgd2UgY2FuIGp1c3QgdXNlCisJICogZ2V0 T2JqZWN0SWRlbnRpdHkuCisJICoKKwkgKiBYWFggc2hvdWxkbid0IHdlIGluc3RlYWQgZml4IHRo ZSBvYmplY3QgaWRlbnRpdGllcyBmb3IgemVyby1hcmd1bWVudAorCSAqIGFnZ3JlZ2F0ZXM/CisJ ICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0FHR1JFR0FURSkKKwl7CisJCUhlYXBU dXBsZQlwcm9jVHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisKKwkJcHJvY1R1cCA9IFNl YXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQp KTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJIGFkZHJl c3Mub2JqZWN0SWQpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVDVChwcm9j VHVwKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9uYXJncyA9PSAwKQorCQkJaWRlbnRpdHkgPSBwc3By aW50ZigiJXMoKikiLAorCQkJCQkJCQlxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFt ZXNwYWNlX25hbWUocHJvY0Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCSAgIE5h bWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisJCWVsc2UKKwkJCWlkZW50aXR5ID0gZ2V0T2Jq ZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXAp OworCX0KKwllbHNlCisJCWlkZW50aXR5ID0gZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZh bHNlKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9cyIsICJpZGVu dGl0eSIsIGlkZW50aXR5KTsKKworCS8qIEFkZCB0aGUgY29tbWVudCBjbGF1c2U7IGNhbiBiZSBl aXRoZXIgTlVMTCBvciBhIHF1b3RlZCBsaXRlcmFsLiAqLworCWFwcGVuZF9saXRlcmFsX29yX251 bGwocmV0LCAiSVMgJXtjb21tZW50fXMiLCBub2RlLT5jb21tZW50KTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgU0VDVVJJVFkgTEFCRUwgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogU0VDVVJJVFkgTEFCRUwgRk9SICV7cHJvdmlkZXJ9cyBPTiAle29i amVjdF90eXBlX25hbWV9cyAle2lkZW50aXR5fXMgSVMgJXtsYWJlbH1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfU2VjTGFiZWxTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sK KwlPYmpUcmVlCSAgICpyZXQ7CisJU2VjTGFiZWxTdG10ICpub2RlID0gKFNlY0xhYmVsU3RtdCAq KSBjbWQtPnBhcnNldHJlZTsKKworCS8qIERvbid0IGRlcGFyc2Ugc3FsIGNvbW1hbmRzIGdlbmVy YXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24p CisJCXJldHVybiBOVUxMOworCisJQXNzZXJ0KGNtZC0+ZC5zZWNsYWJlbC5wcm92aWRlcik7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VDVVJJVFkgTEFCRUwgRk9SICV7cHJvdmlkZXJ9cyBP TiAle29ianR5cGV9cyAle2lkZW50aXR5fXMiLCAzLAorCQkJCQkJICJwcm92aWRlciIsIE9ialR5 cGVTdHJpbmcsIGNtZC0+ZC5zZWNsYWJlbC5wcm92aWRlciwKKwkJCQkJCSAib2JqdHlwZSIsIE9i alR5cGVTdHJpbmcsIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBnZXRPYmplY3RJZGVudGl0eSgmKGNtZC0+ ZC5zZWNsYWJlbC5hZGRyZXNzKSwgZmFsc2UpKTsKKworCS8qIEFkZCB0aGUgbGFiZWwgY2xhdXNl OyBjYW4gYmUgZWl0aGVyIE5VTEwgb3IgYSBxdW90ZWQgbGl0ZXJhbC4gKi8KKwlhcHBlbmRfbGl0 ZXJhbF9vcl9udWxsKHJldCwgIklTICV7bGFiZWx9cyIsIG5vZGUtPmxhYmVsKTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlQW1TdG10IChDUkVBVEUgQUNDRVNT IE1FVEhPRCkuCisgKgorICogR2l2ZW4gYW4gYWNjZXNzIG1ldGhvZCBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGlu ZyB0aGUgQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQ1JFQVRFIEFDQ0VTUyBNRVRIT0QgJXtpZGVudGl0eX1JIFRZUEUgJXthbV90eXBlfXMg SEFORExFUiAle2hhbmRsZXJ9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0 ZUFtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpy ZXQ7CisJSGVhcFR1cGxlCWFtVHVwOworCUZvcm1fcGdfYW0JYW1Gb3JtOworCWNoYXIJICAgKmFt dHlwZTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAor CQkJIG9iamVjdElkKTsKKwlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsK KworCXN3aXRjaCAoYW1Gb3JtLT5hbXR5cGUpCisJeworCQljYXNlICdpJzoKKwkJCWFtdHlwZSA9 ICJJTkRFWCI7CisJCQlicmVhazsKKwkJY2FzZSAndCc6CisJCQlhbXR5cGUgPSAiVEFCTEUiOwor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCB0eXBlICVjIGZv ciBhY2Nlc3MgbWV0aG9kIiwgYW1Gb3JtLT5hbXR5cGUpOworCX0KKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgQUNDRVNTIE1FVEhPRCAle2lkZW50aXR5fUkgVFlQRSAle2FtX3R5cGV9 cyBIQU5ETEVSICV7aGFuZGxlcn1EIiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJICJhbV90eXBlIiwg T2JqVHlwZVN0cmluZywgYW10eXBlLAorCQkJCQkJICJoYW5kbGVyIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgYW1Gb3JtLT5hbWhhbmRsZXIpKTsKKworCVJlbGVhc2VTeXNDYWNoZShh bVR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgcHVibGljYXRp b24gY29sdW1uIGxpc3QuCisgKgorICogR2l2ZW4gYSB0dXBsZSBvZiBwZ19wdWJsaWNhdGlvbl9y ZWwsIHJldHVybiBhbiBvYmpUcmVlIHRoYXQgcmVwcmVzZW50IHRoZQorICogY29sdW1uIG5hbWVz LgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1B1YmxpY2F0aW9uUmVsYXRpb25Db2x1 bW5MaXN0KEhlYXBUdXBsZSBwdWJyZWx0dXApCit7CisJYm9vbAkJaXNudWxsOworCUxpc3QJICAg KmNvbGxpc3QgPSBOSUw7CisJT2JqVHJlZQkgICAqY29sdW1ubGlzdDsKKwlEYXR1bQkJYXR0cnNk YXR1bTsKKworCWF0dHJzZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFVCTElDQVRJT05SRUxNQVAs IHB1YnJlbHR1cCwKKwkJCQkJCQkJIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJ CQkJCQkJCSAmaXNudWxsKTsKKworCWNvbHVtbmxpc3QgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYg KCFpc251bGwpCisJeworCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCBwdWJyZWw7CisJCUFycmF5 VHlwZSAgKmFycjsKKwkJaW50CQkJbmVsZW1zOworCQlpbnQxNgkgICAqZWxlbXM7CisKKwkJYXJy ID0gRGF0dW1HZXRBcnJheVR5cGVQKGF0dHJzZGF0dW0pOworCQluZWxlbXMgPSBBUlJfRElNUyhh cnIpWzBdOworCQllbGVtcyA9IChpbnQxNiAqKSBBUlJfREFUQV9QVFIoYXJyKTsKKworCQlwdWJy ZWwgPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVChwdWJyZWx0dXApOworCisJ CWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCXsKKwkJCWNoYXIgKmNvbG5hbWUg PSBnZXRfYXR0bmFtZShwdWJyZWwtPnBycmVsaWQsIGVsZW1zW2ldLCBmYWxzZSk7CisJCQljb2xs aXN0ID0gbGFwcGVuZChjb2xsaXN0LCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7CisJCX0K KworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KGNvbHVtbmxpc3QsICIoJXtjb2xzOiwgfXMpIiwgY29s bGlzdCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KGNvbHVtbmxpc3QpOworCisJ cmV0dXJuIGNvbHVtbmxpc3Q7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBwdWJsaWNhdGlvbiB3 aGVyZSBjbGF1c2UuCisgKgorICogR2l2ZW4gYSB0dXBsZSBvZiBwZ19wdWJsaWNhdGlvbl9yZWws IHJldHVybiBhIG9ialRyZWUgdGhhdCByZXByZXNlbnQgdGhlCisgKiBwdWJsaWNhdGlvbiB3aGVy ZSBjbGF1c2UuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUHVibGljYXRpb25SZWxh dGlvbldoZXJlQ2xhdXNlKEhlYXBUdXBsZSBwdWJyZWx0dXApCit7CisJRGF0dW0JCQkJCXF1YWxk YXR1bTsKKwlPYmpUcmVlCQkJCSAgICp3aGVyZWNsYXVzZTsKKwlib29sCQkJCQlpc251bGw7CisK KwlxdWFsZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFVCTElDQVRJT05SRUxNQVAsIHB1YnJlbHR1 cCwKKwkJCQkJCQkJQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsLCAmaXNudWxsKTsKKwor CXdoZXJlY2xhdXNlID0gbmV3X29ianRyZWUoIiIpOworCWlmICghaXNudWxsKQorCXsKKwkJRm9y bV9wZ19wdWJsaWNhdGlvbl9yZWwgcHVicmVsOworCQlOb2RlCQkJCSAgICpxdWFsbm9kZTsKKwkJ TGlzdAkJCQkgICAqY29udGV4dDsKKwkJY2hhcgkJCQkgICAqcXVhbHN0cjsKKwkJT2lkCQkJCQkJ cmVsaWQ7CisKKwkJcHVicmVsID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1Qo cHVicmVsdHVwKTsKKwkJcmVsaWQgPSBwdWJyZWwtPnBycmVsaWQ7CisKKwkJY29udGV4dCA9IGRl cGFyc2VfY29udGV4dF9mb3IoZ2V0X3JlbF9uYW1lKHJlbGlkKSwgcmVsaWQpOworCQlxdWFsbm9k ZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5nKHF1YWxkYXR1bSkpOworCQlxdWFs c3RyID0gZGVwYXJzZV9leHByZXNzaW9uKHF1YWxub2RlLCBjb250ZXh0LCBmYWxzZSwgZmFsc2Up OworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHdoZXJlY2xhdXNlLCAiV0hFUkUgJXt3aGVyZX1z IiwgIndoZXJlIiwgcXVhbHN0cik7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHdo ZXJlY2xhdXNlKTsKKworCXJldHVybiB3aGVyZWNsYXVzZTsKK30KKworLyoKKyAqIFN1YnJvdXRp bmUgZm9yIENSRUFURSBQVUJMSUNBVElPTiBkZXBhcnNpbmcuCisgKgorICogRGVhbCB3aXRoIGFs bCB0aGUgcHVibGljYXRpb24gdGFibGUgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRoZSB3aGVyZSBj bGF1c2UKKyAqIGFuZCBjb2x1bW4gbGlzdC4KKyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZV9Q dWJsaWNhdGlvblJlbGF0aW9uRGVmcyhPaWQgcHVib2lkKQoreworCVJlbGF0aW9uCXB1YnJlbHNy ZWw7CisJU2NhbktleURhdGEgc2NhbmtleTsKKwlTeXNTY2FuRGVzYyBzY2FuOworCUhlYXBUdXBs ZQl0dXA7CisJTGlzdAkgICAqcmVsZGVmcyA9IE5JTDsKKworCXB1YnJlbHNyZWwgPSB0YWJsZV9v cGVuKFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCVNjYW5L ZXlJbml0KCZzY2Fua2V5LAorCQkJCUFudW1fcGdfcHVibGljYXRpb25fcmVsX3BycHViaWQsCisJ CQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0o cHVib2lkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHB1YnJlbHNyZWwsIFB1Ymxp Y2F0aW9uUmVsUHJwdWJpZEluZGV4SWQsCisJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAmc2Nhbmtl eSk7CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNj YW4pKSkKKwl7CisJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsIHB1YnJlbDsKKwkJT2lkCQkJCQkJ cmVsaWQ7CisJCU9ialRyZWUJCQkJICAgKmNvbHVtbmxpc3Q7CisJCU9ialRyZWUJCQkJICAgKndo ZXJlY2xhdXNlOworCQlPYmpUcmVlCQkJCSAgICpyZWxkZWY7CisKKwkJcHVicmVsID0gKEZvcm1f cGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKwkJcmVsaWQgPSBwdWJyZWwtPnBy cmVsaWQ7CisKKwkJcmVsZGVmID0gbmV3X29ianRyZWVfVkEoIiV7dGFibGVuYW1lfUQiLCAxLAor CQkJCQkJCQkidGFibGVuYW1lIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsIHJlbGlkKSk7CisKKwkJY29sdW1u bGlzdCA9IGRlcGFyc2VfUHVibGljYXRpb25SZWxhdGlvbkNvbHVtbkxpc3QodHVwKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmVsZGVmLCAiJXtjb2x1bW5fbGlzdH1zIiwgY29sdW1ubGlzdCk7 CisKKwkJd2hlcmVjbGF1c2UgPSBkZXBhcnNlX1B1YmxpY2F0aW9uUmVsYXRpb25XaGVyZUNsYXVz ZSh0dXApOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZWxkZWYsICIle3doZXJlX2NsYXVzZX1z Iiwgd2hlcmVjbGF1c2UpOworCisJCXJlbGRlZnMgPSBsYXBwZW5kKHJlbGRlZnMsIG5ld19vYmpl Y3Rfb2JqZWN0KHJlbGRlZikpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFi bGVfY2xvc2UocHVicmVsc3JlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZWxkZWZz OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAoQ1JFQVRFIFBV QkxJQ0FUSU9OKS4KKyAqCisgKiBHaXZlbiBhbiBwdWJsaWNhdGlvbiBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGlu ZyB0aGUgQ1JFQVRFIFBVQkxJQ0FUSU9OIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBQVUJMSUNBVElPTiAle2lkZW50aXR5fUkgJXtmb3JfdGFibGVzfXMgJXtmb3Jf c2NoZW1hc31zICV7d2l0aF9jbGF1c2V9cworICogT1IKKyAqIENSRUFURSBQVUJMSUNBVElPTiAl e2lkZW50aXR5fUkgRk9SIEFMTCBUQUJMRVMgJXt3aXRoX2NsYXVzZX1zCisgKi8KK3N0YXRpYyBP YmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUHVibGljYXRpb25TdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqbm9kZSA9IChDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKmNyZWF0ZVB1YjsKKwlP YmpUcmVlICAgICp0bXA7CisJSGVhcFR1cGxlCXB1YlR1cDsKKwlGb3JtX3BnX3B1YmxpY2F0aW9u CXB1YkZvcm07CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJ cHViVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OT0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHB1YlR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kIHdpdGggT0lEICV1IiwK KwkJCSBvYmplY3RJZCk7CisJcHViRm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJV Q1QocHViVHVwKTsKKworCWNyZWF0ZVB1YiA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUFVCTElD QVRJT04gJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgICAiaWRlbnRpdHkiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCSAgIE5hbWVTdHIocHViRm9ybS0+cHVibmFtZSkpOworCisJaWYgKG5vZGUt PmZvcl9hbGxfdGFibGVzKQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVQdWIsICJGT1Ig QUxMIFRBQkxFUyIpOworCWVsc2UKKwl7CisJCUxpc3QJICAgKm9sZHNjaGVtYWlkczsKKwkJU3Ry aW5nSW5mb0RhdGEgZm9yX3NjaGVtYXM7CisKKwkJLyogRk9SIFRBQkxFUyB0MSx0MiwuLi4gKi8K KwkJdG1wID0gbmV3X29ianRyZWUoIkZPUiBUQUJMRSIpOworCisJCWxpc3QgPSBkZXBhcnNlX1B1 YmxpY2F0aW9uUmVsYXRpb25EZWZzKG9iamVjdElkKTsKKwkJaWYgKGxpc3QgIT0gTklMKQorCQkJ YXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIle3RhYmxlczosIH1zIiwgbGlzdCk7CisJCWVsc2UK KwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVB1YiwgIiV7Zm9yX3RhYmxlc31zIiwgdG1wKTsKKworCQkvKiBGT1IgVEFCTEVTIElOIFND SEVNQSBzMSxzMiwuLi4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmZvcl9zY2hlbWFzKTsKKwkJaWYg KGxpc3QgIT0gTklMKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm9yX3NjaGVtYXMsICIs ICIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZmb3Jfc2NoZW1hcywgIkZP UiAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZm9yX3NjaGVtYXMsICJUQUJMRVMgSU4g U0NIRU1BIik7CisKKwkJdG1wID0gbmV3X29ianRyZWUoZm9yX3NjaGVtYXMuZGF0YSk7CisJCWxp c3QgPSBOSUw7CisJCW9sZHNjaGVtYWlkcyA9IEdldFB1YmxpY2F0aW9uU2NoZW1hcyhwdWJGb3Jt LT5vaWQpOworCQlmb3JlYWNoKGNlbGwsIG9sZHNjaGVtYWlkcykKKwkJeworCQkJT2lkCQlzY2hl bWFpZCA9IGxmaXJzdF9vaWQoY2VsbCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdChnZXRfbmFtZXNwYWNlX25hbWUoc2NoZW1haWQpKSk7CisJCX0KKworCQlpZiAo bGlzdCAhPSBOSUwpCisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIiV7c2NoZW1hczosIH1J IiwgbGlzdCk7CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVB1YiwgIiV7Zm9yX3NjaGVtYXN9cyIsIHRtcCk7CisJfQor CisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCisJbGlz dCA9IE5JTDsKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlPYmpUcmVlICAg ICp0bXBfb2JqOworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisKKwkJdG1wX29iaiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCX0KKworCWlmIChsaXN0 ICE9IE5JTCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXt3aXRoOiwgfXMpIiwgbGlz dCk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVB1YiwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUocHViVHVwKTsKKworCXJldHVybiBjcmVhdGVQdWI7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKEFMVEVSIFBVQkxJQ0FUSU9OKS4KKyAqCisgKiBHaXZl biBhbiBwdWJsaWNhdGlvbiByZWxhdGlvbiBPSUQgb3IgcHVibGljYXRpb24gc2NoZW1hIE9JRCBh bmQgdGhlIHBhcnNlCisgKiB0cmVlIHRoYXQgYWRkZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlIHJl cHJlc2VudGluZyB0aGUgQUxURVIgUFVCTElDQVRJT04KKyAqIGNvbW1hbmQuCisgKgorICogTm90 ZSB0aGF0IG9ubHkgQUxURVIgUFVCTElDQVRJT04gQUREL1NFVCBzaG91bGQgYmUgZGVwYXJzZWQg aGVyZSwgQUxURVIKKyAqIFBVQkxJQ0FUSU9OIERST1AgaXMgZGVwYXJzZWQgaW4gZGlmZmVyZW50 IHBsYWNlcy4KKyAqCisgKiBYWFggQUxURVIgUFVCTElDQVRJT04gU0VUIHB1YmxpY2F0aW9uX29i amVjdCBpcyBjb252ZXJ0ZWQgdG8gQUxURVIKKyAqIFBVQkxJQ0FUSU9OIEFERC9EUk9QLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBQVUJMSUNBVElPTiAle2lkZW50aXR5fUkgJXth ZGRfb2JqZWN0fXMKKyAqIE9SCisgKiBBTFRFUiBQVUJMSUNBVElPTiAle2lkZW50aXR5fUkgJXtz ZXRfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJQdWJsaWNh dGlvbkFkZFN0bXQoT2JqZWN0QWRkcmVzcyBvYmplY3QsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlj aGFyCSAgICpwdWJuYW1lOworCU9ialRyZWUJICAgKmFsdGVycHViOworCU9ialRyZWUJICAgKmFk ZG9iamVjdCA9IE5VTEw7CisJT2JqVHJlZQkgICAqc2V0b3B0aW9uID0gTlVMTDsKKwlBbHRlclB1 YmxpY2F0aW9uU3RtdCAqbm9kZSA9IChBbHRlclB1YmxpY2F0aW9uU3RtdCAqKSBwYXJzZXRyZWU7 CisKKwlzd2l0Y2ggKG9iamVjdC5jbGFzc0lkKQorCXsKKwkJLyogQUREIFRBQkxFICovCisJCWNh c2UgUHVibGljYXRpb25SZWxSZWxhdGlvbklkOgorCQkJeworCQkJCU9ialRyZWUJICAgKndoZXJl Y2xhdXNlOworCQkJCU9ialRyZWUJICAgKmNvbHVtbmxpc3Q7CisJCQkJRm9ybV9wZ19wdWJsaWNh dGlvbl9yZWwgcHVicmVsZm9ybTsKKwkJCQlPaWQJCQlyZWxpZDsKKwkJCQlIZWFwVHVwbGUJdHVw OworCisJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OUkVMLAorCQkJCQkJCQkJ ICBPYmplY3RJZEdldERhdHVtKG9iamVjdC5vYmplY3RJZCkpOworCisJCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBwdWJsaWNhdGlvbiB0YWJsZSAldSIsCisJCQkJCQkgb2JqZWN0Lm9iamVjdElkKTsKKworCQkJ CXB1YnJlbGZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOwor CQkJCXJlbGlkID0gcHVicmVsZm9ybS0+cHJyZWxpZDsKKworCQkJCWFkZG9iamVjdCA9IG5ld19v Ymp0cmVlX1ZBKCJBREQgVEFCTEUgJXt0YWJsZW5hbWV9RCIsIDEsCisJCQkJCQkJCQkJICAgInRh YmxlbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJICAgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwgcmVsaWQpKTsKKworCQkJCWNvbHVtbmxpc3Qg PSBkZXBhcnNlX1B1YmxpY2F0aW9uUmVsYXRpb25Db2x1bW5MaXN0KHR1cCk7CisJCQkJYXBwZW5k X29iamVjdF9vYmplY3QoYWRkb2JqZWN0LCAiJXtjb2x1bW5fbGlzdH1zIiwgY29sdW1ubGlzdCk7 CisKKwkJCQl3aGVyZWNsYXVzZSA9IGRlcGFyc2VfUHVibGljYXRpb25SZWxhdGlvbldoZXJlQ2xh dXNlKHR1cCk7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QoYWRkb2JqZWN0LCAiJXt3aGVyZV9j bGF1c2V9cyIsIHdoZXJlY2xhdXNlKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJ fQorCQkJYnJlYWs7CisKKwkJLyogQUREIFRBQkxFUyBJTiBTQ0hFTUEgKi8KKwkJY2FzZSBQdWJs aWNhdGlvbk5hbWVzcGFjZVJlbGF0aW9uSWQ6CisJCQl7CisJCQkJRm9ybV9wZ19wdWJsaWNhdGlv bl9uYW1lc3BhY2UgcHVibnNwZm9ybTsKKwkJCQlIZWFwVHVwbGUJdHVwOworCisJCQkJdHVwID0g U2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OTkFNRVNQQUNFLAorCQkJCQkJCQkJICBPYmplY3RJ ZEdldERhdHVtKG9iamVjdC5vYmplY3RJZCkpOworCisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwdWJsaWNh dGlvbiBzY2hlbWEgJXUiLAorCQkJCQkJIG9iamVjdC5vYmplY3RJZCk7CisKKwkJCQlwdWJuc3Bm b3JtID0gKEZvcm1fcGdfcHVibGljYXRpb25fbmFtZXNwYWNlKSBHRVRTVFJVQ1QodHVwKTsKKwor CQkJCWFkZG9iamVjdCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgVEFCTEVTIElOIFNDSEVNQSAle3Nj aGVtYX1JIiwgMSwKKwkJCQkJCQkJCQkgICAic2NoZW1hIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CQkJCQkgICBnZXRfbmFtZXNwYWNlX25hbWUocHVibnNwZm9ybS0+cG5uc3BpZCkpOworCisJCQkJ UmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQl9CisJCQlicmVhazsKKworCQkvKiBTRVQgb3B0aW9u ICovCisJCWNhc2UgUHVibGljYXRpb25SZWxhdGlvbklkOgorCQkJeworCQkJCUxpc3QJICAgKm9w dGlvbmxpc3QgPSBOSUw7CisJCQkJTGlzdENlbGwgICAqY2VsbDsKKworCQkJCUFzc2VydChub2Rl LT5vcHRpb25zICE9IE5JTCk7CisKKwkJCQlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJ CQkJeworCQkJCQlPYmpUcmVlICAgICp0bXBfb2JqOworCQkJCQlEZWZFbGVtICAgICpvcHQgPSAo RGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJCQkJdG1wX29iaiA9IGRlcGFyc2VfRGVmRWxl bShvcHQsIGZhbHNlKTsKKwkJCQkJb3B0aW9ubGlzdCA9IGxhcHBlbmQob3B0aW9ubGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKworCQkJCXNldG9wdGlvbiA9IG5ld19v Ymp0cmVlX1ZBKCJTRVQgKCV7b3B0aW9uczosIH1zKSIsIDEsCisJCQkJCQkJCQkJICAgIm9wdGlv bnMiLCBPYmpUeXBlQXJyYXksCisJCQkJCQkJCQkJICAgb3B0aW9ubGlzdCk7CisJCQl9CisJCQli cmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKwor CXB1Ym5hbWUgPSBwc3RyZHVwKG5vZGUtPnB1Ym5hbWUpOworCisJYWx0ZXJwdWIgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgICJp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIHB1Ym5hbWUpOworCisJQXNzZXJ0KGFkZG9iamVjdCB8 fCBzZXRvcHRpb24pOworCisJaWYgKGFkZG9iamVjdCkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo YWx0ZXJwdWIsICIle2FkZF9vYmplY3R9cyIsIGFkZG9iamVjdCk7CisJZWxzZQorCQlhcHBlbmRf b2JqZWN0X29iamVjdChhbHRlcnB1YiwgIiV7c2V0X29wdGlvbnN9cyIsIHNldG9wdGlvbik7CisK KwlyZXR1cm4gYWx0ZXJwdWI7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIEFMVEVS IFBVQkxJQ0FUSU9OIERST1AgY29tbWFuZHMuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFM VEVSIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9SSAle2Ryb3Bfb2JqZWN0fXMKKyAqLworY2hhciAq CitkZXBhcnNlX0FsdGVyUHVibGljYXRpb25Ecm9wU3RtdChTUUxEcm9wT2JqZWN0ICpvYmopCit7 CisJT2JqVHJlZQkgICAqYWx0ZXJwdWI7CisJT2JqVHJlZQkgICAqZHJvcF9vYmplY3QgPSBOVUxM OworCWNoYXIJCW9iam5hbWVbTkFNRURBVEFMRU5dOworCWNoYXIJCXB1Ym5hbWVbTkFNRURBVEFM RU5dOworCUpzb25iCSAgICpqc29uYjsKKwljaGFyCSAgICpjb21tYW5kOworCVN0cmluZ0luZm9E YXRhIHN0cjsKKworCWlmIChzc2NhbmYob2JqLT5vYmppZGVudGl0eSwgIiVzIGluIHB1YmxpY2F0 aW9uICVzIiwgb2JqbmFtZSwgcHVibmFtZSkgIT0gMikKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5v dCBwYXJzZSBBTFRFUiBQVUJMSUNBVElPTiBjb21tYW5kIFwiJXNcIiIsCisJCQkgb2JqLT5vYmpp ZGVudGl0eSk7CisKKwlzd2l0Y2ggKGdldE9iamVjdENsYXNzKCZvYmotPmFkZHJlc3MpKQorCXsK KwkJLyogRFJPUCBUQUJMRSAqLworCQljYXNlIE9DTEFTU19QVUJMSUNBVElPTl9SRUw6CisJCQlk cm9wX29iamVjdCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIFRBQkxFICV7dGFibGVuYW1lfXMiLCAx LAorCQkJCQkJCQkJCSAidGFibGVuYW1lIiwgT2JqVHlwZVN0cmluZywgb2JqbmFtZSk7CisJCQli cmVhazsKKworCQkvKiBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgKi8KKwkJY2FzZSBPQ0xBU1NfUFVC TElDQVRJT05fTkFNRVNQQUNFOgorCQkJZHJvcF9vYmplY3QgPSBuZXdfb2JqdHJlZV9WQSgiRFJP UCBUQUJMRVMgSU4gU0NIRU1BICV7c2NoZW1hbmFtZX1zIiwgMSwKKwkJCQkJCQkJCQkgInNjaGVt YW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBvYmpuYW1lKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6 CisJCQlBc3NlcnQoZmFsc2UpOworCQkJYnJlYWs7CisJfQorCisJYWx0ZXJwdWIgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgUFVCTElDQVRJT04gJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgICJp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIHB1Ym5hbWUpOworCisJQXNzZXJ0KGRyb3Bfb2JqZWN0 KTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVycHViLCAiJXthZGRfb2JqZWN0fXMiLCBk cm9wX29iamVjdCk7CisKKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwlqc29uYiA9IG9ianRyZWVf dG9fanNvbmIoYWx0ZXJwdWIpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNv bmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisK Ky8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0 eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29s bGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNl dHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUg PSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmpl Y3RJZDsKKworCWlmIChjbWQtPmluX2V4dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9 IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCisJCXJldHVybiBOVUxMOworCisJLyogVGhpcyBzd2l0 Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9l cyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRyZWUpKQorCXsKKwkJY2FzZSBUX0FsdGVyQ29s bGF0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9BbHRlckRvbWFpblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgICBjbWQt PmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlckVudW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0Fs dGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJ CQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRXh0 ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJGZHdTdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQWx0ZXJGZHdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZv cmVpZ25TZXJ2ZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlckZ1bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlck9iamVjdERlcGVuZHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJE ZXBlbmRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck9iamVjdFNj aGVtYVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoY21kLT5k LnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJCQkJCQkJIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCSBj bWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0b3JT dG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyT3duZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0 ZXJPd25lclN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9BbHRlclBvbGljeVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCXJldHVybiBk ZXBhcnNlX0FsdGVyU2VxU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0 ZXJTdGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclN0YXRzU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlclR5cGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3Rt dChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6 CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclVzZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKworCQljYXNlIFRfQ29tbWVudFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9Db21tZW50 U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NvbXBv c2l0ZVR5cGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUFtU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZUFtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl Q2FzdFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlQ29udmVyc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVDb252ZXJzaW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9D cmVhdGVEb21haW5TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElk LCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUg QVMgRU5VTSAqLworCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVGZHdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRmR3U3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQ6CisJCQly ZXR1cm4gZGVwYXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKKworCQljYXNlIFRfQ3JlYXRlRnVuY3Rpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3Jl YXRlRnVuY3Rpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFt aWx5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVQTGFuZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVMYW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUG9s aWN5U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVJhbmdlU3RtdDogLyogQ1JFQVRFIFRZUEUgQVMg UkFOR0UgKi8KKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFy c2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU2NoZW1hU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0 ZVNlcVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTdGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVTdGF0aXN0aWNzU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZvcmVpZ25UYWJsZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVGb3JlaWduVGFibGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVUYWJsZUFzU3RtdDoJLyogQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXICovCisJCQly ZXR1cm4gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdF92YW5pbGxhKG9iamVjdElkLCBwYXJzZXRy ZWUpOworCisJCWNhc2UgVF9DcmVhdGVUcmFuc2Zvcm1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlVHJhbnNmb3JtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlVHJpZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlVXNlck1hcHBpbmdTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQ3JlYXRlVXNlck1hcHBpbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9EZWZpbmVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlLAorCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7 CisKKwkJY2FzZSBUX0luZGV4U3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9SZW5hbWVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfUmVuYW1lU3RtdChjbWQtPmQu c2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1J1bGVTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfUnVsZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1Zp ZXdTdG10OgkJLyogQ1JFQVRFIFZJRVcgKi8KKwkJCXJldHVybiBkZXBhcnNlX1ZpZXdTdG10KG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVQdWJsaWNhdGlvblN0bXQ6CisJ CQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVQdWJsaWNhdGlvblN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0FsdGVyUHVibGljYXRpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJQdWJsaWNhdGlvbkFkZFN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUp OworCisJCWRlZmF1bHQ6CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4g ZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVlKSk7CisJ fQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENv bGxlY3RlZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29s bGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJj aFBhdGggKm92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlNZW1vcnlDb250 ZXh0IHRtcGN4dDsKKwlPYmpUcmVlICAgICp0cmVlOworCWNoYXIJICAgKmNvbW1hbmQgPSBOVUxM OworCVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBk b25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0 byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2Rl LCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGlu Zy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRl eHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIs CisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NT RVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpF KTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJICog TWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5j IGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVz c2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2JqZWN0IG5hbWVzIHRv IGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiIHRvCisJICogZW52 aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRo YW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRl IHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkg aGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3VycmVu dE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlvdmVycmlk ZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVl OworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXZlcmJvc2UgPSB2 ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNhc2UgU0NUX1NpbXBs ZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsKIAkJ Y2FzZSBTQ1RfQWx0ZXJUYWJsZToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyUmVsYXRpb24oY21k KTsKIAkJCWJyZWFrOworCQljYXNlIFNDVF9HcmFudDoKKwkJCXRyZWUgPSBkZXBhcnNlX0dyYW50 U3RtdChjbWQpOworCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQl0cmVl ID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOwogCQkJYnJlYWs7CisJCWNhc2UgU0NU X0FsdGVyT3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJ CQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKKwkJCXRyZWUgPSBkZXBhcnNlX0Ny ZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJEZWZhdWx0 UHJpdmlsZWdlczoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10 KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUgPSBk ZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2Ug U0NUX1NlY3VyaXR5TGFiZWw6CisJCQl0cmVlID0gZGVwYXJzZV9TZWNMYWJlbFN0bXQoY21kKTsK KwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJz ZSBub2RlIHR5cGUgJWQiLCBjbWQtPnR5cGUpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAppbmRl eCAxYTI3MDJjLi42NTUyYzIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBh cnNlLmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0xMiwxMSArMTIs MjMgQEAKICNpZm5kZWYgRERMX0RFUEFSU0VfSAogI2RlZmluZSBERExfREVQQVJTRV9ICiAKKyNp bmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNl X3V0aWxpdHkuaCIKIAorLyoKKyAqIFJlcHJlc2VudCB0aGUgcHVibGljYXRpb24gcmVsYXRpb24g Zm9yIGRlcGFyc2luZy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcHVibGljYXRpb25fcmVsCit7CisJ T2lkCQkJcmVsaWQ7CQkJLyogcmVsYXRpb24gaWQgKi8KKwlOb2RlCSAgICp3aGVyZUNsYXVzZTsJ Lyogcm93IGZpbHRlciAqLworCUxpc3QJICAgKmNvbHVtbkxpc3Q7CQkvKiBjb2x1bW4gbGlzdCAq LworfQkJCXB1YmxpY2F0aW9uX3JlbDsKKwogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9j b21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOwogZXh0ZXJu IGNoYXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKIGV4dGVybiBj aGFyICpkZXBhcnNlX2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3Qg Y2hhciAqb2JqZWN0dHlwZSwKIAkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworZXh0 ZXJuIGNoYXIgKiBkZXBhcnNlX0FsdGVyUHVibGljYXRpb25Ecm9wU3RtdChTUUxEcm9wT2JqZWN0 ICpvYmopOwogCiAjZW5kaWYJCQkJCQkJLyogRERMX0RFUEFSU0VfSCAqLwotLSAKMS44LjMuMQoK --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v75-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kcp3 RnJvbSAxY2M5OTM3ODAwYWQ0M2JjMDI3Zjk0MGE1MjJiNjBlMmRkMTYwNzdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzoyNzo1NCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDQvOF0gSW50cm9kdWNlIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgdGVzdCBtb2R1 bGUuCgpUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZv dXIgdGVzdGluZyBnb2FscyBmb3IgdGhlIERETCBkZXBhcnNlcjoKMS4gVGVzdCB0aGF0IHRoZSBn ZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMi4gVGVzdCB0 aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3Rz LgozLiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZm ZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIGJ5IGNvbXBhcmluZwogICB0aGUgcmVzdWx0cyBv ZiBwZ19kdW1wLCB1c2luZyB0aGUgU1FMIHRlc3RzIGluIDEgYW5kIDIuCjQuIFRlc3QgdGhhdCBu ZXcgRERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5n IGFuZCBkZXBhcmluZyBEREwgY29tbWFuZHMKICAgcmFuIGJ5IHBnX3JlZ3Jlc3MuCgoxIGFuZCAy IGlzIHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgcHJpbnRpbmcgdGhlIGRlcGFyc2VkIEpTT04g YmxvYiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgoKR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRB UCBmcmFtZXdvcmsgaW4gdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAoKR29hbCA0IGlz IHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3Nf dGVzdHMucGwsIHRoZSBleGVjdXRpb24gaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVz ZSBpdCB3aWxsIGZhaWwgZHVlIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBh cnNlci4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiAuLi4vbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGln bm9yZSAgICB8ICAgNCArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9NYWtlZmlsZSB8ICA0NCArKysrKwogLi4uL21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL1JFQURNRS5tZCAgICAgfCAgMjIgKysrCiAuLi4vZXhwZWN0ZWQvYWdncmVnYXRlLm91dCAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArCiAuLi4vZXhwZWN0ZWQvY3JlYXRlX2V4dGVu c2lvbi5vdXQgICAgICAgICAgICAgICAgICB8ICAgNiArCiAuLi4vZXhwZWN0ZWQvY3JlYXRlX3Nj aGVtYS5vdXQgICAgICAgICAgICAgICAgICAgICB8ICAyMiArKysKIC4uLi9leHBlY3RlZC9jcmVh dGVfdGFibGUub3V0ICAgICAgICAgICAgICAgICAgICAgIHwgIDM2ICsrKysKIC4uLi9leHBlY3Rl ZC90ZXN0X2RkbF9kZXBhcnNlLm91dCAgICAgICAgICAgICAgICAgIHwgIDE4ICsrCiAuLi4vbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgICB8ICA0MiArKysrKwog Li4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvYWdncmVnYXRlLnNxbCAgICAgfCAgIDcg KwogLi4uL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCAgICAgICAgICAgICAgICAgICAgICAgfCAg IDUgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwg fCAgMTYgKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5z cWwgIHwgIDE2ICsrCiAuLi4vc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsICAgICAgICAgICAgICAg ICAgICAgICB8ICAyMCArKwogLi4uL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwgICAg ICAgICAgICAgICAgfCAxODEgKysrKysrKysrKysrKysrKysrCiAuLi4vdC8wMDJfcmVncmVzc190 ZXN0cy5wbCAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwNyArKysrKysrKysrKysrKysrKysr KysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwgICAgICAgICAgICAgIHwg ICA5ICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYyAgICAgICAgICAgICAgICAgICAg IHwgIDU5ICsrKysrKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250cm9sICAgICAg ICAgICAgICAgfCAgIDQgKwogMjAgZmlsZXMgY2hhbmdlZCwgNzI3IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9h Z2dyZWdhdGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBl Y3RlZC9jcmVhdGVfc2NoZW1hLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL21lc29uLmJ1aWxkCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3Fs L2FnZ3JlZ2F0ZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3Jl YXRlX3NjaGVtYS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbAogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2Rk bF9kZXBhcnNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90 LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAu c3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MuY29udHJvbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUg Yi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCmluZGV4IGM2MjljYmUuLmMyNzJjNjQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9N YWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBTVUJESVJTID0gXAogCQkgIHRlc3RfY29weV9jYWxs YmFja3MgXAogCQkgIHRlc3RfY3VzdG9tX3JtZ3JzIFwKIAkJICB0ZXN0X2RkbF9kZXBhcnNlIFwK KwkJICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgXAogCQkgIHRlc3RfZXh0ZW5zaW9ucyBcCiAJ CSAgdGVzdF9naW5wb3N0aW5nbGlzdCBcCiAJCSAgdGVzdF9pbnRlZ2Vyc2V0IFwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5naXRpZ25vcmUg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkY2IzZmYKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3Jl CkBAIC0wLDAgKzEsNCBAQAorIyBHZW5lcmF0ZWQgc3ViZGlyZWN0b3JpZXMKKy9sb2cvCisvcmVz dWx0cy8KKy90bXBfY2hlY2svCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjVkNWE5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ0IEBACisjLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIworIyBNYWtlZmlsZSBmb3Igc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MKKyMKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwg R2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisjCisjIHNyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCisjCisjLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorCisKK01PRFVMRVMgPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKK1BHRklMRURFU0Mg PSAidGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIC0gcmVncmVzc2lvbiB0ZXN0aW5nIGZvciBEREwg ZGVwYXJzaW5nIgorCitFWFRFTlNJT04gPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MKK0RBVEEg PSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwKKworIyB0ZXN0X2RkbF9kZXBhcnNl IG11c3QgYmUgZmlyc3QKK1JFR1JFU1MgPSB0ZXN0X2RkbF9kZXBhcnNlIFwKKwljcmVhdGVfZXh0 ZW5zaW9uIFwKKwljcmVhdGVfc2NoZW1hIFwKKwljcmVhdGVfdGFibGUgXAorCWFnZ3JlZ2F0ZQor CitleHBvcnQgUkVHUkVTUworCitFWFRSQV9JTlNUQUxMID0gY29udHJpYi9wZ19zdGF0X3N0YXRl bWVudHMKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdfQ09ORklHID0gcGdf Y29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykKK2luY2x1ZGUgJChQ R1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MKK3RvcF9idWlsZGRpciA9IC4uLy4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGly KS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250 cmliLWdsb2JhbC5taworZW5kaWYKKworUkVHUkVTU19TSExJQj0kKGFic190b3BfYnVpbGRkaXIp L3NyYy90ZXN0L3JlZ3Jlc3MvcmVncmVzcyQoRExTVUZGSVgpCitleHBvcnQgUkVHUkVTU19TSExJ QgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv UkVBRE1FLm1kIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvUkVB RE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMjUxOTgKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9S RUFETUUubWQKQEAgLTAsMCArMSwyMiBAQAorIyBUZXN0aW5nIGhhcm5lc3MgZm9yIERETCBkZXBh cnNlcgorCisjIyBUZXN0aW5nIGdvYWxzCisKK0RETCBEZXBhcnNlciBwcm92aWRlcyB0aGUgYWJp bGl0eSB0byBlbmNvZGUgdGhlIG9yaWdpbmFsIERETCBjb21tYW5kIHRvIGEgSlNPTiBzdHJpbmcs IHRoZW4gZGVjb2RlIGl0IHRvIGEgZnVsbHkgc2NoZW1hLXF1YWxpZmllZCBEREwgY29tbWFuZCB3 aGljaCBpcyBzdXBwb3NlZCB0byBoYXZlIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgb3JpZ2luYWwg Y29tbWFuZC4gVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2lu ZyBmb3VyIHRlc3RpbmcgZm9yIHRoZSBEREwgZGVwYXJzZXI6CisKKzEuIFRlc3QgdGhhdCB0aGUg Z2VuZXJhdGVkIEpTT04gYmxvYiBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVzdHMuCisyLiBUZXN0 IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBpcyBleHBlY3RlZCB1c2luZyBTUUwgdGVz dHMuCiszLiBUZXN0CXRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUg ZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kCisgICBieSBjb21wYXJpbmcJdGhlIHJlc3Vs dHMgb2YgcGdfZHVtcCwJdXNpbmcgdGhlIFNRTCB0ZXN0cyBpbiAxIGFuZCAyLgorNC4gVGVzdAl0 aGF0IG5ldyBEREwgc3ludGF4IGlzIGhhbmRsZWQgYnkgdGhlIERETCBkZXBhcnNlciBieSBjYXB0 dXJpbmcgYW5kIGRlcGFyaW5nCisgICBEREwgY29tbWFuZHMJcmFuIGJ5IHBnX3JlZ3Jlc3MuCisK KzEgYW5kIDIgaXMgdGVzdGVkIHdpdGggU1FMIHRlc3RzLCBieSBub3RpY2luZyB0aGUgZGVwYXJz ZWQgSlNPTiBibG9iIGFuZCB0aGUgcmUtZm9ybWVkIGNvbW1hbmQuCisKK0dvYWwgMyBpcyB0ZXN0 ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGluIHQvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwK KworR29hbCA0IGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4g MDAyX3JlZ3Jlc3NfdGVzdHMucGwKKworIyMgVXNhZ2UKKworUnVuIGBtYWtlIGNoZWNrYCwgaXQg d2lsbCBydW4gdGhlIFNRTCB0ZXN0cyBmaXJzdCwgdGhlbiBpdCB3aWxsIHJ1biB0aGUgVEFQIHRl c3RzLiBUaGUgZXhlY3V0aW9uIG9mIDAwMl9yZWdyZXNzX3Rlc3RzLnBsIGlzIGN1cnJlbnRseSBj b21tZW50ZWQgb3V0IGJlY2F1c2UgaXQgd2lsbCBmYWlsIGR1ZSB0byB1bmltcGxlbWVudGVkIGNv bW1hbmRzIGluIHRoZSBEREwgZGVwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0IGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvYWdncmVnYXRlLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE5YTdjCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0 ZWQvYWdncmVnYXRlLm91dApAQCAtMCwwICsxLDggQEAKK0NSRUFURSBBR0dSRUdBVEUgbmV3YXZn KGludDQpICgKKyAgIHNmdW5jID0gaW50NF9hdmdfYWNjdW0sIHN0eXBlID0gX2ludDgsCisgICBm aW5hbGZ1bmMgPSBpbnQ4X2F2ZywKKyAgIGluaXRjb25kMSA9ICd7MCwwfScKKyk7CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgQUdHUkVHQVRFICV7aWRlbnRpdHl9RCAo JXt0eXBlc31zKSAoJXtlbGVtczosIH1zKSIsICJlbGVtcyI6IFt7ImZtdCI6ICJTRlVOQz0le3By b2NlZHVyZX1EIiwgInByb2NlZHVyZSI6IHsib2JqbmFtZSI6ICJpbnQ0X2F2Z19hY2N1bSIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sIHsiZm10IjogIlNUWVBFPSV7dHlwZX1UIiwgInR5 cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiB0cnVlLCAidHlwZW5hbWUiOiAiaW50OCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sIHsiZm10IjogIlNTUEFDRT0iLCAicHJlc2Vu dCI6IGZhbHNlfSwgeyJmbXQiOiAiRklOQUxGVU5DPSAle3Byb2NlZHVyZX1EIiwgInByb2NlZHVy ZSI6IHsib2JqbmFtZSI6ICJpbnQ4X2F2ZyIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0s IHsiZm10IjogIkZJTkFMRlVOQ19FWFRSQT0iLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAi SU5JVENPTkQ9ICV7aW5pdHZhbH1MIiwgImluaXR2YWwiOiAiezAsMH0ifSwgeyJmbXQiOiAiTVNG VU5DPSIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNU1RZUEU9IiwgInByZXNlbnQiOiBm YWxzZX0sIHsiZm10IjogIk1TU1BBQ0U9IiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1J TlZGVU5DPSIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNRklOQUxGVU5DPSIsICJwcmVz ZW50IjogZmFsc2V9LCB7ImZtdCI6ICJNRklOQUxGVU5DX0VYVFJBPSIsICJwcmVzZW50IjogZmFs c2V9LCB7ImZtdCI6ICJNSU5JVENPTkQ9IiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIkhZ UE9USEVUSUNBTD0iLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiU09SVE9QPSIsICJwcmVz ZW50IjogZmFsc2V9XSwgInR5cGVzIjogeyJmbXQiOiAiJXtkaXJlY3Q6LCB9cyIsICJkaXJlY3Qi OiBbeyJmbXQiOiAiJXttb2RlfXMgJXtuYW1lfXMgJXt0eXBlfVQiLCAibW9kZSI6ICIiLCAibmFt ZSI6ICIiLCAidHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5h bWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX1dfSwgImlkZW50aXR5Ijog eyJvYmpuYW1lIjogIm5ld2F2ZyIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAg cmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBBR0dSRUdBVEUgcHVibGljLm5ld2F2ZyAoICBwZ19j YXRhbG9nLmludDQpIChTRlVOQz1wZ19jYXRhbG9nLmludDRfYXZnX2FjY3VtLCBTVFlQRT1wZ19j YXRhbG9nLmludDhbXSwgRklOQUxGVU5DPSBwZ19jYXRhbG9nLmludDhfYXZnLCBJTklUQ09ORD0g J3swLDB9JykKK0RST1AgQUdHUkVHQVRFIG5ld2F2ZyhpbnQ0KTsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRl bnNpb24ub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMDZjY2M2MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0CkBAIC0wLDAg KzEsNiBAQAorLS0tCistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCitDUkVBVEUgRVhURU5TSU9O IHBnX3N0YXRfc3RhdGVtZW50czsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNS RUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cyIs ICJuYW1lIjogInBnX3N0YXRfc3RhdGVtZW50cyIsICJvcHRpb25zIjogW3siZm10IjogIlNDSEVN QSAle3NjaGVtYX1JIiwgInR5cGUiOiAic2NoZW1hIiwgInNjaGVtYSI6ICJwdWJsaWMifV0sICJp Zl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIEVY VEVOU0lPTiAgcGdfc3RhdF9zdGF0ZW1lbnRzIFNDSEVNQSBwdWJsaWMKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9z Y2hlbWEub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhw ZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMWUwOWRhNQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0CkBAIC0wLDAgKzEsMjIg QEAKKy0tCistLSBDUkVBVEVfU0NIRU1BCistLQorQ1JFQVRFIFNDSEVNQSBmb287CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31z ICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRp b24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3Rz IjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgZm9vIAor Q1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhcjsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRo b3JpemF0aW9ufXMiLCAibmFtZSI6ICJiYXIiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFV VEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJh dXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiSUYgTk9UIEVYSVNU UyJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJ U1RTIGJhciAKK0NSRUFURSBTQ0hFTUEgYmF6OworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJm bXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6 YXRpb259cyIsICJuYW1lIjogImJheiIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9S SVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhv cml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGJheiAKKy0tIFdpbGwgbm90IGJlIGNyZWF0 ZWQsIGFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZQorLS0gZXZlbnQgdHJpZ2dlcgorQ1JF QVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhejsKK05PVElDRTogIHNjaGVtYSAiYmF6IiBhbHJl YWR5IGV4aXN0cywgc2tpcHBpbmcKK0NSRUFURSBTQ0hFTUEgZWxlbWVudF90ZXN0CisgIENSRUFU RSBUQUJMRSBmb28gKGlkIGludCkKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNS RUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMi LCAibmFtZSI6ICJlbGVtZW50X3Rlc3QiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhP UklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRo b3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJl LWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBlbGVtZW50X3Rlc3QgCitOT1RJQ0U6ICBk ZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZf bm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVy aXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNj ZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJm b28iLCAic2NoZW1hbmFtZSI6ICJlbGVtZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAi SU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBm YWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9 cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3Bh Y2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxz ZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6 IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10 IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZp bml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3Nf bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZf bm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtj b2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRp b259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFt ZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5 cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0 YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwg Im5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQi OiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAi Q09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJj b21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJH RU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX0KK05PVElDRTogIHJlLWZv cm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBlbGVtZW50X3Rlc3QuZm9vIChpZCBwZ19jYXRh bG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgKSAgICAgIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91 dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2Ny ZWF0ZV90YWJsZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVlYWEx YwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKQEAgLTAsMCArMSwzNiBAQAorQ1JFQVRF IFRBQkxFIHNpbXBsZV90YWJsZSgKKyAgICBpZCBpbnQsCisgICAgbmFtZSB2YXJjaGFyKDUpCisp OworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9 cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6 LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRp b25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7 Im9iam5hbWUiOiAic2ltcGxlX3RhYmxlIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhl cml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51 bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7 b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjog bnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs ICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIi LCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0 aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2Vu dCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10Ijog IlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRo b2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10 IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVz c2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVz c2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29s dW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwg eyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2Nv bXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5l cmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5 cGUiOiB7InR5cG1vZCI6ICIoNSkiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInZh cmNoYXIiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAi REVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6 IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0 IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQi LCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhv ZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2Vu ZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6 IGZhbHNlfX1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1 YmxpYy5zaW1wbGVfdGFibGUgKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAs IG5hbWUgcGdfY2F0YWxvZy4idmFyY2hhciIoNSkgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBw Z19jYXRhbG9nLiJkZWZhdWx0IiAgICkgICAgICAKKy0tIFRlc3QgQ1JFQVRFIElOREVYIHdpdGgg YW4gSU5DTFVERSBDTEFVU0UKK0NSRUFURSBVTklRVUUgSU5ERVggY292ZXJpbmdfaW5kZXggb24g c2ltcGxlX3RhYmxlIChpZCkgSU5DTFVERSAobmFtZSk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29u OiB7ImZtdCI6ICJDUkVBVEUgJXt1bmlxdWV9cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZf bm90X2V4aXN0c31zICV7bmFtZX1JIE9OICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgJXtk ZWZpbml0aW9ufXMgJXt3aXRofXMgJXt0YWJsZXNwYWNlfXMgJXt3aGVyZV9jbGF1c2V9cyIsICJu YW1lIjogImNvdmVyaW5nX2luZGV4IiwgIndpdGgiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQi OiBmYWxzZX0sICJ0YWJsZSI6IHsib2JqbmFtZSI6ICJzaW1wbGVfdGFibGUiLCAic2NoZW1hbmFt ZSI6ICJwdWJsaWMifSwgInVuaXF1ZSI6ICJVTklRVUUiLCAiaW5kZXhfYW0iOiAiYnRyZWUiLCAi ZGVmaW5pdGlvbiI6ICIoaWQgcGdfY2F0YWxvZy5pbnQ0X29wcykgSU5DTFVERSAobmFtZSkiLCAi dGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UiLCAicHJlc2VudCI6IGZhbHNlfSwgImNv bmN1cnJlbnRseSI6ICIiLCAid2hlcmVfY2xhdXNlIjogeyJmbXQiOiAiV0hFUkUiLCAicHJlc2Vu dCI6IGZhbHNlfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21t YW5kOiBDUkVBVEUgVU5JUVVFIElOREVYICAgY292ZXJpbmdfaW5kZXggT04gcHVibGljLnNpbXBs ZV90YWJsZSBVU0lORyBidHJlZSAoaWQgcGdfY2F0YWxvZy5pbnQ0X29wcykgSU5DTFVERSAobmFt ZSkgICAKKy0tIFRlc3QgVGFibGVMaWtlQ2xhdXNlIGlzIGhhbmRsZWQgcHJvcGVybHkKK0NSRUFU RSBUQUJMRSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZIEtFWSwg YiB0ZXh0KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNp c3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2Vs ZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7 cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50 aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhl cml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51 bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7 b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjog bnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIs ICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIi LCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0 aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2Vu dCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10Ijog IlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRo b2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10 IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVz c2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVk X2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0 eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVt YW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJl c2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xM QVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1l IjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9u IjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50 IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4i OiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZt dCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJl c3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRl ZF9jb2x1bW59cyIsICJuYW1lIjogImIiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFt ZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lv biI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1u IjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJm bXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQx X2FfY2hlY2siLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAiY2hlY2siLCAiZGVm aW5pdGlvbiI6ICJDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFs b2cuPikgMikpIn0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LCAibmFtZSI6ICJjdGx0MV9wa2V5IiwgInR5cGUiOiAiY29uc3RyYWludCIsICJjb250eXBlIjog InByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkgKGEpIn1dfQorTk9USUNF OiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5jdGx0MSAoYSBwZ19j YXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRhbG9nLiJkZWZhdWx0 IiAgICwgYiBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRh bG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBjdGx0MV9hX2NoZWNrIENIRUNLICgocGdfY2F0 YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSksIENPTlNUUkFJTlQgY3Rs dDFfcGtleSBQUklNQVJZIEtFWSAoYSkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8 TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK0FMVEVSIFRBQkxFIGN0 bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitOT1RJQ0U6ICBkZXBhcnNlZCBq c29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwg fXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0IHN0b3Jh Z2UiLCAiY29sdW1uIjogImEiLCAic3RvcmFnZSI6ICJtYWluIn1dLCAiaWRlbnRpdHkiOiB7Im9i am5hbWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJlLWZv cm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VU IFNUT1JBR0UgbWFpbgorQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JB R0UgRVhURVJOQUw7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29i anR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIs ICJzdWJjbWRzIjogW3siZm10IjogIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdF ICV7c3RvcmFnZX1zIiwgInR5cGUiOiAic2V0IHN0b3JhZ2UiLCAiY29sdW1uIjogImIiLCAic3Rv cmFnZSI6ICJleHRlcm5hbCJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNj aGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIg VEFCTEUgcHVibGljLmN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIGV4dGVybmFsCist LSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBhIGZvbGxvd2luZyBB TFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VTIHN1YmNvbW1h bmQKK0NSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7 CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1z IFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czos IH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlv bl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsi b2JqbmFtZSI6ICJwcm9kdWN0IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6 IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJw cmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29t bWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0s ICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVz ZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0 aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25f YnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZh bHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5H ICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBu dWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7 bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1z ICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVt bn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9k IjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1l IjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQi OiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIs ICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6 IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6 IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjog eyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQi OiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNz aW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRf Y29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7 InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRleHQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJw cmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNP TExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0IiwgInNjaGVtYW5h bWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAiY29tcHJlc3Np b24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNl bnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVt biI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsi Zm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFtZSI6ICJwcm9k dWN0X3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXki LCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAoaWQpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVk IGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5wcm9kdWN0IChpZCBwZ19jYXRhbG9nLmlu dDQgU1RPUkFHRSBwbGFpbiAgICAgLCBuYW1lIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVu ZGVkICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIHByb2R1Y3Rf cGtleSBQUklNQVJZIEtFWSAoaWQpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5V TEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitDUkVBVEUgVEFCTEUgb3Jk ZXJzIChvcmRlcl9pZCBpbnQgUFJJTUFSWSBLRVksIHByb2R1Y3RfaWQgaW50CitSRUZFUkVOQ0VT IHByb2R1Y3QgKGlkKSk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUg JXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0 YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21t aXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIs ICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJvcmRlcnMiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMi fSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJl bnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBD T01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRf dmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVz cGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3Rl bmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNl fSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIs ICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjog eyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNj ZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMi OiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAl e2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtn ZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJvcmRlcl9pZCIsICJ0eXBlIjogImNvbHVtbiIs ICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6 ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10Ijog IkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24i OiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBs YWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9t ZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwg ImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNl bnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29s c3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2Rl ZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogInByb2R1Y3RfaWQiLCAidHlw ZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNl LCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1 bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIi LCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29s c3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7 Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0 aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZ UyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAl e2RlZmluaXRpb259cyIsICJuYW1lIjogIm9yZGVyc19wa2V5IiwgInR5cGUiOiAiY29uc3RyYWlu dCIsICJjb250eXBlIjogInByaW1hcnkga2V5IiwgImRlZmluaXRpb24iOiAiUFJJTUFSWSBLRVkg KG9yZGVyX2lkKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxF ICBwdWJsaWMub3JkZXJzIChvcmRlcl9pZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAg ICAgLCBwcm9kdWN0X2lkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIENPTlNU UkFJTlQgb3JkZXJzX3BrZXkgUFJJTUFSWSBLRVkgKG9yZGVyX2lkKSkgICAgICAKK05PVElDRTog IGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxM PgorTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtp ZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6 IFt7ImZtdCI6ICJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1l IjogIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLCAidHlwZSI6ICJhZGQgY29uc3RyYWludCIsICJk ZWZpbml0aW9uIjogIkZPUkVJR04gS0VZIChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VTIHB1YmxpYy5w cm9kdWN0KGlkKSJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm9yZGVycyIsICJzY2hlbWFu YW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxF IHB1YmxpYy5vcmRlcnMgQUREIENPTlNUUkFJTlQgb3JkZXJzX3Byb2R1Y3RfaWRfZmtleSBGT1JF SUdOIEtFWSAocHJvZHVjdF9pZCkgUkVGRVJFTkNFUyBwdWJsaWMucHJvZHVjdChpZCkKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVk L3Rlc3RfZGRsX2RlcGFyc2Uub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYjBlMmJmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uu b3V0CkBAIC0wLDAgKzEsMTggQEAKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzOworQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9kZGxfZGVwYXJzZSgpCisg IFJFVFVSTlMgZXZlbnRfdHJpZ2dlciBMQU5HVUFHRSBwbHBnc3FsIEFTCiskJAorREVDTEFSRQor CXIgcmVjb3JkOworCWRlcGFyc2VkX2pzb24gdGV4dDsKK0JFR0lOCisJRk9SIHIgSU4gU0VMRUNU ICogRlJPTSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisJTE9PUAorCQlkZXBhcnNl ZF9qc29uID0gcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCk7CisJCVJB SVNFIE5PVElDRSAnZGVwYXJzZWQganNvbjogJScsIGRlcGFyc2VkX2pzb247CisJCVJBSVNFIE5P VElDRSAncmUtZm9ybWVkIGNvbW1hbmQ6ICUnLCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX2V4cGFu ZF9jb21tYW5kKGRlcGFyc2VkX2pzb24pOworCUVORCBMT09QOworRU5EOworJCQ7CitDUkVBVEUg RVZFTlQgVFJJR0dFUiB0ZXN0X2RkbF9kZXBhcnNlCitPTiBkZGxfY29tbWFuZF9lbmQgRVhFQ1VU RSBQUk9DRURVUkUgdGVzdF9kZGxfZGVwYXJzZSgpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi43YTE1MmEyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw0 MiBAQAorIyBGSVhNRTogcHJldmVudCBpbnN0YWxsIGR1cmluZyBtYWluIGluc3RhbGwsIGJ1dCBu b3QgZHVyaW5nIHRlc3QgOi8KKwordGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzX3NvdXJjZXMgPSBm aWxlcygKKyAgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jJywKKykKKworaWYgaG9zdF9zeXN0 ZW0gPT0gJ3dpbmRvd3MnCisgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzc19zb3VyY2VzICs9IHJj X2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5BTUUn LCAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgICAnLS1GSUxFREVTQycsICd0ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MgLSByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIERETCBkZXBhcnNpbmcn LF0pCitlbmRpZgorCit0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgPSBzaGFyZWRfbW9kdWxlKCd0 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MnLAorICB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Nfc291 cmNlcywKKyAga3dhcmdzOiBwZ19tb2RfYXJncywKKykKK3Rlc3RwcmVwX3RhcmdldHMgKz0gdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzCisKK2luc3RhbGxfZGF0YSgKKyAgJ3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy5jb250cm9sJywKKyAgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNx bCcsCisgIGt3YXJnczogY29udHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9IHsKKyAgJ25h bWUnOiAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9z b3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICdyZWdy ZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAndGVzdF9kZGxfZGVwYXJzZScsCisgICAgICAn Y3JlYXRlX2V4dGVuc2lvbicsCisgICAgICAnY3JlYXRlX3NjaGVtYScsCisgICAgICAnY3JlYXRl X3RhYmxlJywKKyAgICBdLAorICB9LAorICAndGFwJzogeworICAgICd0ZXN0cyc6IFsKKyAgICAg ICd0LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsJywKKyAgICBdLAorICB9LAorfQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2Fn Z3JlZ2F0ZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvYWdncmVnYXRlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjFi NGUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3Mvc3FsL2FnZ3JlZ2F0ZS5zcWwKQEAgLTAsMCArMSw3IEBACitDUkVBVEUgQUdHUkVH QVRFIG5ld2F2ZyhpbnQ0KSAoCisgICBzZnVuYyA9IGludDRfYXZnX2FjY3VtLCBzdHlwZSA9IF9p bnQ4LAorICAgZmluYWxmdW5jID0gaW50OF9hdmcsCisgICBpbml0Y29uZDEgPSAnezAsMH0nCisp OworCitEUk9QIEFHR1JFR0FURSBuZXdhdmcoaW50NCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4dGVuc2lvbi5zcWwg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX2V4 dGVuc2lvbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzZTdmZAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbApAQCAtMCwwICsxLDUgQEAKKy0tLQorLS0tIENS RUFURV9FWFRFTlNJT04KKy0tLQorCitDUkVBVEUgRVhURU5TSU9OIHBnX3N0YXRfc3RhdGVtZW50 czsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3NxbC9jcmVhdGVfc2NoZW1hLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1hLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4xMGIxM2YwCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsCkBAIC0wLDAgKzEs MTYgQEAKKy0tCistLSBDUkVBVEVfU0NIRU1BCistLQorCitDUkVBVEUgU0NIRU1BIGZvbzsKKwor Q1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhcjsKKworQ1JFQVRFIFNDSEVNQSBiYXo7CisK Ky0tIFdpbGwgbm90IGJlIGNyZWF0ZWQsIGFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkIGJ5IHRoZQor LS0gZXZlbnQgdHJpZ2dlcgorQ1JFQVRFIFNDSEVNQSBJRiBOT1QgRVhJU1RTIGJhejsKKworQ1JF QVRFIFNDSEVNQSBlbGVtZW50X3Rlc3QKKyAgQ1JFQVRFIFRBQkxFIGZvbyAoaWQgaW50KQpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2Ny ZWF0ZV90YWJsZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9zcWwvY3JlYXRlX3RhYmxlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45OTdkMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90YWJsZS5zcWwKQEAgLTAsMCArMSwxNiBAQAorQ1JF QVRFIFRBQkxFIHNpbXBsZV90YWJsZSgKKyAgICBpZCBpbnQsCisgICAgbmFtZSB2YXJjaGFyKDUp CispOworLS0gVGVzdCBDUkVBVEUgSU5ERVggd2l0aCBhbiBJTkNMVURFIENMQVVTRQorQ1JFQVRF IFVOSVFVRSBJTkRFWCBjb3ZlcmluZ19pbmRleCBvbiBzaW1wbGVfdGFibGUgKGlkKSBJTkNMVURF IChuYW1lKTsKKworLS0gVGVzdCBUYWJsZUxpa2VDbGF1c2UgaXMgaGFuZGxlZCBwcm9wZXJseQor Q1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxlbmd0aChhKSA+IDIpIFBSSU1BUlkg S0VZLCBiIHRleHQpOworQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JB R0UgTUFJTjsKK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIEVY VEVSTkFMOworCistLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBh IGZvbGxvd2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVO Q0VTIHN1YmNvbW1hbmQKK0NSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVks IG5hbWUgdGV4dCk7CitDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRlcl9pZCBpbnQgUFJJTUFSWSBL RVksIHByb2R1Y3RfaWQgaW50CitSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvdGVzdF9kZGxf ZGVwYXJzZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvdGVzdF9kZGxfZGVwYXJzZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMDg4OWZhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbApAQCAtMCwwICsxLDIwIEBA CitDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKworQ1JFQVRFIE9S IFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9kZGxfZGVwYXJzZSgpCisgIFJFVFVSTlMgZXZlbnRfdHJp Z2dlciBMQU5HVUFHRSBwbHBnc3FsIEFTCiskJAorREVDTEFSRQorCXIgcmVjb3JkOworCWRlcGFy c2VkX2pzb24gdGV4dDsKK0JFR0lOCisJRk9SIHIgSU4gU0VMRUNUICogRlJPTSBwZ19ldmVudF90 cmlnZ2VyX2RkbF9jb21tYW5kcygpCisJTE9PUAorCQlkZXBhcnNlZF9qc29uID0gcGdfY2F0YWxv Zy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCk7CisJCVJBSVNFIE5PVElDRSAnZGVwYXJz ZWQganNvbjogJScsIGRlcGFyc2VkX2pzb247CisJCVJBSVNFIE5PVElDRSAncmUtZm9ybWVkIGNv bW1hbmQ6ICUnLCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKGRlcGFyc2Vk X2pzb24pOworCUVORCBMT09QOworRU5EOworJCQ7CisKK0NSRUFURSBFVkVOVCBUUklHR0VSIHRl c3RfZGRsX2RlcGFyc2UKK09OIGRkbF9jb21tYW5kX2VuZCBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0 X2RkbF9kZXBhcnNlKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVz dWx0cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjRhZDM0Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv dC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbApAQCAtMCwwICsxLDE4MSBAQAordXNlIHN0 cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBFbnY7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOwordXNl IEZpbGU6OkJhc2VuYW1lOworCitzdWIgZXhlY3V0ZV90ZXN0X2Nhc2UgeworICAgIG15ICR0ZXN0 X25hbWUgPSAkX1swXTsKKyAgICBteSAkcHViX25vZGUgPSAkX1sxXTsKKyAgICBteSAkc3ViX25v ZGUgPSAkX1syXTsKKyAgICBteSAkZGJuYW1lID0gJF9bM107CisgICAgbXkgJG91dHB1dGRpciA9 ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1wX2NoZWNrOworCisgICAgIyBzZXQgdXAgZGVw YXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAgIGNyZWF0ZV9kZXBhcnNlX3Rlc3RpbmdfcmVzb3Vy Y2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICBteSAkdGVzdF9maWxl ID0gIi4vc3FsLyR7dGVzdF9uYW1lfS5zcWwiOworICAgIG15ICRjb250ZW50ID0gZG97bG9jYWwo QEFSR1YsJC8pPSR0ZXN0X2ZpbGU7PD59OworCisgICAgJHB1Yl9ub2RlIC0+IHBzcWwoJGRibmFt ZSwgJGNvbnRlbnQpOworCisgICAgIyByZXRyaWV2ZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIGZy b20gZGVwYXJzZWQgRERMcyBvbiBwdWIgbm9kZQorICAgIG15ICRkZGxfc3FsID0gJyc7CisgICAg JHB1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSxxKAorICAgICAgICBzZWxlY3QgZGRsX2RlcGFyc2Vf ZXhwYW5kX2NvbW1hbmQoZGRsKSB8fCAnOycgZnJvbSBkZXBhcnNlZF9kZGxzIE9SREVSIEJZIGlk IEFTQyksCisgICAgICAgIHN0ZG91dCA9PiBcJGRkbF9zcWwpOworCisgICAgcHJpbnQgIlxuc3Rh cnQgcHJpbnRpbmcgcmUtZm9ybWVkIHNxbFxuIjsKKyAgICBwcmludCAkZGRsX3NxbDsKKyAgICBw cmludCAiXG5lbmQgcHJpbnRpbmcgcmUtZm9ybWVkIHNxbFxuIjsKKyAgICAjIGV4ZWN1dGUgU1FM IGNvbW1hbmRzIG9uIHN1YiBub2RlCisgICAgJHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGRk bF9zcWwpOworCisgICAgIyBjbGVhbiB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAg Y2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRk Ym5hbWUpOworCisgICAgIyBkdW1wIGZyb20gcHViIG5vZGUgYW5kIHN1YiBub2RlCisgICAgbWtk aXIgJHtvdXRwdXRkaXJ9LiIvZHVtcHMiLCAwNzU1OworICAgIG15ICRwdWJfZHVtcCA9ICR7b3V0 cHV0ZGlyfS4iL2R1bXBzLyR7dGVzdF9uYW1lfV9wdWIuZHVtcCI7CisgICAgbXkgJHN1Yl9kdW1w ID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMvJHt0ZXN0X25hbWV9X3N1Yi5kdW1wIjsKKyAgICBzeXN0 ZW0oInBnX2R1bXBhbGwgIgorICAgICAgICAuICItcyAiCisgICAgICAgIC4gIi1mICIKKyAgICAg ICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIKKyAgICAgICAgLiAg Jy1wICcKKyAgICAgICAgLiAkcHViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRpZSAiRHVtcCBwdWIg bm9kZSBmYWlsZWQgaW4gJHt0ZXN0X25hbWV9IjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgor ICAgICAgICAuICItcyAiCisgICAgICAgIC4gIi1mICIKKyAgICAgICAgLiAkc3ViX2R1bXAgLiAi ICIKKyAgICAgICAgLiAiLS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAk c3ViX25vZGUtPnBvcnQpICA9PSAwIG9yIGRpZSAiRHVtcCBzdWIgbm9kZSBmYWlsZWQgaW4gJHt0 ZXN0X25hbWV9IjsKKworICAgICMgY29tcGFyZSBkdW1wZWQgcmVzdWx0cworICAgIGlzKHN5c3Rl bSgiZGlmZiAiCisgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAuICRzdWJfZHVtcCksIDAsICJE dW1wZWQgcmVzdWx0cyBkaWZmIGluICR7dGVzdF9uYW1lfSIpOworfQorCitzdWIgaW5pdF9ub2Rl IHsKKyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF07CisgICAgbXkgJG5vZGUgPSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyLT5uZXcoJG5vZGVfbmFtZSk7CisgICAgJG5vZGUtPmluaXQ7CisgICAg IyBpbmNyZWFzZSBzb21lIHNldHRpbmdzIHRoYXQgQ2x1c3Rlci0+bmV3IG1ha2VzIHRvbyBsb3cg YnkgZGVmYXVsdC4KKyAgICAkbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdt YXhfY29ubmVjdGlvbnMnLCAnMjUnKTsKKyAgICAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVz cWwuY29uZicsCisJCSAgICdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKKyAgICBy ZXR1cm4gJG5vZGU7Cit9CisKK3N1YiBpbml0X3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1l ID0gJF9bMF0uIl9wdWIiOworICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKwor c3ViIGluaXRfc3ViX25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3N1YiI7Cisg ICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQorCitzdWIgY3JlYXRlX2RlcGFyc2Vf dGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07Cisg ICAgbXkgJGRibmFtZSA9ICRfWzFdOworICAgICRub2RlIC0+IHBzcWwoJGRibmFtZSwgcSgKKyAg ICAgICAgYmVnaW47CisgICAgICAgIENSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzOworICAgICAgICBjcmVhdGUgdGFibGUgZGVwYXJzZWRfZGRscyhpZCBTRVJJQUwgUFJJ TUFSWSBLRVksIHRhZyB0ZXh0LCBvYmplY3RfaWRlbnRpdHkgdGV4dCwgZGRsIHRleHQpOworCisg ICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpCisgICAg ICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAg ICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVn aW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9k ZGxfY29tbWFuZHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBp bnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLmNv bW1hbmRfdGFnLCByLm9iamVjdF9pZGVudGl0eSwgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19q c29uKHIuY29tbWFuZCkpOworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAg ICAgICAgJCQ7CisKKyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV9k cm9wc190b19qc29uKCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFn ZSBwbHBnc3FsIGFzCisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIg cmVjb3JkOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJv bSBwZ19ldmVudF90cmlnZ2VyX2Ryb3BwZWRfb2JqZWN0cygpCisgICAgICAgICAgICBsb29wCisg ICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVu dGl0eSwgZGRsKSB2YWx1ZXMgKHIub2JqZWN0X3R5cGUsIHIub2JqZWN0X2lkZW50aXR5LCBwdWJs aWMuZGVwYXJzZV9kcm9wX2RkbChyLm9iamVjdF9pZGVudGl0eSwgci5vYmplY3RfdHlwZSkpOwor ICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisKKyAgICAg ICAgY3JlYXRlIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBkZGxf Y29tbWFuZF9lbmQgZXhlY3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV90b19qc29uKCk7CisKKyAgICAg ICAgY3JlYXRlIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZworICAgICAgICBv biBzcWxfZHJvcCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKwor ICAgICAgICBjb21taXQ7CisgICAgKSk7Cit9CisKK3N1YiBjbGVhbl9kZXBhcnNlX3Rlc3Rpbmdf cmVzb3VyY2VzX29uX3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZSA9ICRfWzBdOworICAgIG15ICRk Ym5hbWUgPSAkX1sxXTsKKyAgICAjIERyb3AgdGhlIGV2ZW50IHRyaWdnZXIgYW5kIHRoZSBmdW5j dGlvbiBiZWZvcmUgdGFraW5nIGEgbG9naWNhbCBkdW1wLgorICAgICRub2RlIC0+IHNhZmVfcHNx bCgkZGJuYW1lLHEoCisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmln OworICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZzsKKyAg ICAgICAgZHJvcCBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCBmdW5j dGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKyAgICAgICAgZHJvcCB0YWJsZSBkZXBhcnNl ZF9kZGxzOworICAgICAgICBEUk9QIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7 CisgICAgKSk7Cit9CisKK3N1YiB0cmltIHsKKyAgICBteSBAb3V0ID0gQF87CisgICAgZm9yIChA b3V0KSB7CisgICAgICAgIHMvXlxzKy8vOworICAgICAgICBzL1xzKyQvLzsKKyAgICB9CisgICAg cmV0dXJuIHdhbnRhcnJheSA/IEBvdXQgOiAkb3V0WzBdOworfQorCisjIENyZWF0ZSBhbmQgc3Rh cnQgcHViIHN1YiBub2RlcworbXkgJHB1Yl9ub2RlID0gaW5pdF9wdWJfbm9kZSgidGVzdCIpOwor bXkgJHN1Yl9ub2RlID0gaW5pdF9zdWJfbm9kZSgidGVzdCIpOworbXkgJGRibmFtZSA9ICJwb3N0 Z3JlcyI7CiskcHViX25vZGUgLT4gc3RhcnQ7Ciskc3ViX25vZGUgLT4gc3RhcnQ7CisKKyMgbG9h ZCB0ZXN0IGNhc2VzIGZyb20gdGhlIHJlZ3Jlc3Npb24gdGVzdHMKK215IEByZWdyZXNzX3Rlc3Rz ID0gc3BsaXQgL1xzKy8sICRFTlZ7UkVHUkVTU307CisKK2ZvcmVhY2goQHJlZ3Jlc3NfdGVzdHMp IHsKKyAgICBteSAkdGVzdF9uYW1lID0gdHJpbSgkXyk7CisgICAgIyBza2lwIGlmIGl0J3MgcmVn cmVzc2lvbiB0ZXN0IHByZXBhcmF0aW9uIG9yIGVtcHR5IHN0cmluZworICAgIGlmICgkdGVzdF9u YW1lIGVxICIiIG9yICR0ZXN0X25hbWUgZXEgInRlc3RfZGRsX2RlcGFyc2UiKQorICAgIHsKKyAg ICAgICAgbmV4dDsKKyAgICB9CisgICAgZXZhbCB7ZXhlY3V0ZV90ZXN0X2Nhc2UoJHRlc3RfbmFt ZSwgJHB1Yl9ub2RlLCAkc3ViX25vZGUsICRkYm5hbWUpO307CisgICAgaWYgKCRAIG5lICIiKQor ICAgIHsKKyAgICAgICAgZmFpbCgkQCk7CisgICAgfQorfQorY2xvc2U7CisKKyMgQ2xvc2Ugbm9k ZXMKKyRwdWJfbm9kZS0+c3RvcDsKKyRzdWJfbm9kZS0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90 LzAwMl9yZWdyZXNzX3Rlc3RzLnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvdC8wMDJfcmVncmVzc190ZXN0cy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4zYTg3NWMzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDJfcmVncmVzc190ZXN0cy5wbApAQCAtMCwwICsx LDIwNyBAQAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBFbnY7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBU ZXN0OjpNb3JlOwordXNlIEZpbGU6OkJhc2VuYW1lOworCitzdWIgZXhlY3V0ZV9yZWdyZXNzX3Rl c3QgeworICAgIG15ICRwdWJfbm9kZSA9ICRfWzBdOworICAgIG15ICRzdWJfbm9kZSA9ICRfWzFd OworICAgIG15ICRkYm5hbWUgPSAicG9zdGdyZXMiOworICAgIG15ICRkbHBhdGggICAgPSBkaXJu YW1lKCRFTlZ7UkVHUkVTU19TSExJQn0pOworICAgIG15ICRpbnB1dGRpciA9ICIuLi8uLi9yZWdy ZXNzIjsKKyAgICBteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBf Y2hlY2s7CisKKyAgICAjIHNldCB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY3Jl YXRlX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJu YW1lKTsKKworICAgICMgZXhlY3V0ZSBjb3JlIHJlZ3Jlc3Npb24gdGVzdHMgb24gcHViIG5vZGUK KyAgICBteSAkcmVncmVzc19jbWQgPSAkRU5We1BHX1JFR1JFU1N9CisgICAgICAgIC4gIiAiCisg ICAgICAgIC4gIi0tZGxwYXRoPVwiJGRscGF0aFwiICIKKyAgICAgICAgLiAiLS1tYXgtY29uY3Vy cmVudC10ZXN0cz0yMCAiCisgICAgICAgIC4gIi0tZGJuYW1lPSIKKyAgICAgICAgLiAkZGJuYW1l IC4gIiAiCisgICAgICAgIC4gIi0tdXNlLWV4aXN0aW5nICIKKyAgICAgICAgLiAiLS1ob3N0PSIK KyAgICAgICAgLiAkcHViX25vZGUtPmhvc3QgLiAiICIKKyAgICAgICAgLiAiLS1wb3J0PSIKKyAg ICAgICAgLiAkcHViX25vZGUtPnBvcnQgLiAiICIKKyAgICAgICAgLiAiLS1pbnB1dGRpcj0kaW5w dXRkaXIgIgorICAgICAgICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiAiCisgICAgICAg IC4gIi0tc2NoZWR1bGU9JGlucHV0ZGlyL3BhcmFsbGVsX3NjaGVkdWxlIjsKKyAgICBwcmludCAi UmVncmVzc2lvbiB0ZXN0IGNvbW1hbmQgaXMgJHJlZ3Jlc3NfY21kIjsKKyAgICBteSAkcmMgPSBz eXN0ZW0oJHJlZ3Jlc3NfY21kKTsKKyAgICBpZiAoJHJjICE9IDApCisgICAgeworICAgICAgICAj IElmIHJlZ3Jlc3Npb24gdGVzdCBmYWlscywgZHVtcCBvdXQgdGhlIHJlZ3Jlc3Npb24gZGlmZnMg ZmlsZQorICAgICAgICBteSAkZGlmZnMgPSAiJHtvdXRwdXRkaXJ9L3JlZ3Jlc3Npb24vcmVncmVz c2lvbi5kaWZmcyI7CisgICAgICAgIGlmICgtZSAkZGlmZnMpCisgICAgICAgIHsKKyAgICAgICAg ICAgIHByaW50ICI9PT0gZHVtcGluZyAkZGlmZnMgPT09XG4iOworICAgICAgICAgICAgcHJpbnQg c2x1cnBfZmlsZSgkZGlmZnMpOworICAgICAgICAgICAgcHJpbnQgIj09PSBFT0YgPT09XG4iOwor ICAgICAgICB9CisgICAgICAgIGRpZSAiUmVncmVzc2lvbiB0ZXN0IGZhaWxlZCI7CisgICAgfQor CisgICAgIyBSZXRyaWV2ZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIGZyb20gZGVwYXJzZWQgRERM cyBvbiBwdWIgbm9kZQorICAgIG15ICRkZGxfc3FsID0gJyc7CisgICAgJHB1Yl9ub2RlIC0+IHBz cWwoJGRibmFtZSxxKAorICAgICAgICBzZWxlY3QgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQo ZGRsKSB8fCAnOycgZnJvbSBkZXBhcnNlZF9kZGxzIE9SREVSIEJZIGlkIEFTQyksCisgICAgICAg IHN0ZG91dCA9PiBcJGRkbF9zcWwpOworCisgICAgIyBFeGVjdXRlIFNRTCBjb21tYW5kcyBvbiBz dWIgbm9kZQorICAgICRzdWJfbm9kZSAtPiBwc3FsKCRkYm5hbWUsICRkZGxfc3FsKTsKKworICAg ICMgQ2xlYW4gdXAgZGVwYXJzZSB0ZXN0aW5nIHJlc291cmNlcworICAgIGNsZWFuX2RlcGFyc2Vf dGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAg ICMgRHVtcCBmcm9tIHB1YiBub2RlIGFuZCBzdWIgbm9kZQorICAgIG1rZGlyICR7b3V0cHV0ZGly fS4iL2R1bXBzIiwgMDc1NTsKKyAgICBteSAkcHViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1w cy9yZWdyZXNzX3B1Yi5kdW1wIjsKKyAgICBteSAkc3ViX2R1bXAgPSAke291dHB1dGRpcn0uIi9k dW1wcy9yZWdyZXNzX3N1Yi5kdW1wIjsKKyAgICBzeXN0ZW0oInBnX2R1bXBhbGwgIgorICAgICAg ICAuICItcyAiCisgICAgICAgIC4gIi1mICIKKyAgICAgICAgLiAkcHViX2R1bXAgLiAiICIKKyAg ICAgICAgLiAiLS1uby1zeW5jICIKKyAgICAgICAgLiAgJy1wICcKKyAgICAgICAgLiAkcHViX25v ZGUtPnBvcnQpICA9PSAwIG9yIGRpZSAiRHVtcCBwdWIgbm9kZSBmYWlsZWQiOworICAgIHN5c3Rl bSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAg ICAuICRzdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAn LXAgJworICAgICAgICAuICRzdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHN1YiBu b2RlIGZhaWxlZCI7CisKKyAgICAjIENvbXBhcmUgZHVtcGVkIHJlc3VsdHMKKyAgICBpcyhzeXN0 ZW0oImRpZmYgIgorICAgIC4gJHB1Yl9kdW1wIC4gIiAiCisgICAgLiAkc3ViX2R1bXApLCAwLCAi Q29tcGFyaW5nIGR1bXBlZCBvdXRwdXQiKTsKKworICAgICMgQ2xvc2Ugbm9kZXMKKyAgICAkcHVi X25vZGUtPnN0b3A7CisgICAgJHN1Yl9ub2RlLT5zdG9wOworfQorCitzdWIgaW5pdF9ub2RlIHsK KyAgICBteSAkbm9kZV9uYW1lID0gJF9bMF07CisgICAgbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJG5vZGVfbmFtZSk7CisgICAgJG5vZGUtPmluaXQ7CisgICAgIyBp bmNyZWFzZSBzb21lIHNldHRpbmdzIHRoYXQgQ2x1c3Rlci0+bmV3IG1ha2VzIHRvbyBsb3cgYnkg ZGVmYXVsdC4KKyAgICAkbm9kZS0+YWRqdXN0X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhf Y29ubmVjdGlvbnMnLCAnMjUnKTsKKyAgICAkbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwu Y29uZicsCisJCSAgICdtYXhfcHJlcGFyZWRfdHJhbnNhY3Rpb25zID0gMTAnKTsKKyAgICByZXR1 cm4gJG5vZGU7Cit9CisKK3N1YiBpbml0X3B1Yl9ub2RlIHsKKyAgICBteSAkbm9kZV9uYW1lID0g JF9bMF0uIl9wdWIiOworICAgIHJldHVybiBpbml0X25vZGUoJG5vZGVfbmFtZSkKK30KKworc3Vi IGluaXRfc3ViX25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3N1YiI7CisgICAg cmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQorCitzdWIgY3JlYXRlX2RlcGFyc2VfdGVz dGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAg bXkgJGRibmFtZSA9ICRfWzFdOworICAgICRub2RlIC0+IHBzcWwoJGRibmFtZSwgcSgKKyAgICAg ICAgYmVnaW47CisgICAgICAgIENSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzOworICAgICAgICBjcmVhdGUgdGFibGUgZGVwYXJzZWRfZGRscyhpZCBTRVJJQUwgUFJJTUFS WSBLRVksIHRhZyB0ZXh0LCBvYmplY3RfaWRlbnRpdHkgdGV4dCwgZGRsIHRleHQpOworICAgICAg ICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX3RvX2pzb24oKQorICAgICAgICAg ICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQK KyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisg ICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2Nv bW1hbmRzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBk ZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5jb21tYW5k X3RhZywgci5vYmplY3RfaWRlbnRpdHksIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfdG9fanNvbihy LmNvbW1hbmQpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAg ICQkOworICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX2Ryb3BzX3Rv X2pzb24oKQorICAgICAgICAgICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdz cWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7 CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2 ZW50X3RyaWdnZXJfZHJvcHBlZF9vYmplY3RzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAg ICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBk ZGwpIHZhbHVlcyAoci5vYmplY3RfdHlwZSwgci5vYmplY3RfaWRlbnRpdHksIHB1YmxpYy5kZXBh cnNlX2Ryb3BfZGRsKHIub2JqZWN0X2lkZW50aXR5LCByLm9iamVjdF90eXBlKSk7CisgICAgICAg ICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAkJDsKKyAgICAgICAgY3JlYXRl IGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBkZGxfY29tbWFuZF9l bmQgZXhlY3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGNyZWF0ZSBl dmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWcKKyAgICAgICAgb24gc3FsX2Ryb3Ag ZXhlY3V0ZSBwcm9jZWR1cmUgZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGNvbW1p dDsKKyAgICApKTsKK30KKworc3ViIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25f cHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFd OworICAgICMgRHJvcCB0aGUgZXZlbnQgdHJpZ2dlciBhbmQgdGhlIGZ1bmN0aW9uIGJlZm9yZSB0 YWtpbmcgYSBsb2dpY2FsIGR1bXAuCisgICAgJG5vZGUgLT4gc2FmZV9wc3FsKCRkYm5hbWUscSgK KyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWc7CisgICAgICAgIGRy b3AgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9wIGZ1 bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2Vf ZHJvcHNfdG9fanNvbigpOworICAgICAgICBkcm9wIHRhYmxlIGRlcGFyc2VkX2RkbHM7CisgICAg ICAgIERST1AgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKyAgICApKTsKK30K Kworc3ViIHRyaW0geworICAgIG15IEBvdXQgPSBAXzsKKyAgICBmb3IgKEBvdXQpIHsKKyAgICAg ICAgcy9eXHMrLy87CisgICAgICAgIHMvXHMrJC8vOworICAgIH0KKyAgICByZXR1cm4gd2FudGFy cmF5ID8gQG91dCA6ICRvdXRbMF07Cit9CisKKyMgQ3JlYXRlIGFuZCBzdGFydCBwdWIgc3ViIG5v ZGVzCitteSAkcHViX25vZGUgPSBpbml0X3B1Yl9ub2RlKCJyZWdyZXNzIik7CitteSAkc3ViX25v ZGUgPSBpbml0X3N1Yl9ub2RlKCJyZWdyZXNzIik7CiskcHViX25vZGUgLT4gc3RhcnQ7Ciskc3Vi X25vZGUgLT4gc3RhcnQ7CisKKyMgQ29tbWVudCB0aGUgZXhlY3V0aW9uIHRlbXBvcmFyaWx5LCBh biBlcnJvciBpbiBkZGxfZGVwYXJzZS5jIHdpbGwgY2F1c2UgdGhlIGRhdGFiYXNlIGV4aXRzIGFi bm9ybWFsbHksIGVycm9yIHNpZ25hdHVyZToKKyMKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC43Nzgg VVRDIFsxMjkxMDJdIHBnX3JlZ3Jlc3MvdGFibGVzcGFjZSBMT0c6ICBzdGF0ZW1lbnQ6IEFMVEVS IFRBQkxFIEFMTCBJTiBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2VfcmVuYW1lZCBTRVQgVEFC TEVTUEFDRSBwZ19kZWZhdWx0OworIyBUUkFQOiBmYWlsZWQgQXNzZXJ0KCJJc0Eoc3RtdCwgQWx0 ZXJUYWJsZVN0bXQpIiksIEZpbGU6ICJkZGxfZGVwYXJzZS5jIiwgTGluZTogMzM3MSwgUElEOiAx MjkxMDIKKyMgcG9zdGdyZXM6IHJlZ3Jlc3NfcHViOiBydW5xaSBwb3N0Z3JlcyBbbG9jYWxdIEFM VEVSIFRBQkxFKEV4Y2VwdGlvbmFsQ29uZGl0aW9uKzB4YmIpWzB4NTYzYmQ2ZWE1YjBkXQorIyAu Li4KKyMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMuc28uNigrMHgyOWQ5MClbMHg3ZmQ2YTc0 YTZkOTBdCisjIC9saWIveDg2XzY0LWxpbnV4LWdudS9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21h aW4rMHg4MClbMHg3ZmQ2YTc0YTZlNDBdCisjIHBvc3RncmVzOiByZWdyZXNzX3B1YjogcnVucWkg cG9zdGdyZXMgW2xvY2FsXSBBTFRFUiBUQUJMRShfc3RhcnQrMHgyNSlbMHg1NjNiZDY3MmYxZTVd CisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUwIFVUQyBbMTI5MDU4XSBMT0c6ICBzZXJ2ZXIgcHJv Y2VzcyAoUElEIDEyOTEwMikgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsIDY6IEFib3J0ZWQKKyMg MjAyMi0xMi0wMyAyMzowMjo0NC44NTAgVVRDIFsxMjkwNThdIERFVEFJTDogIEZhaWxlZCBwcm9j ZXNzIHdhcyBydW5uaW5nOiBBTFRFUiBUQUJMRSBBTEwgSU4gVEFCTEVTUEFDRSByZWdyZXNzX3Ri bHNwYWNlX3JlbmFtZWQgU0VUIFRBQkxFU1BBQ0UgcGdfZGVmYXVsdDsKKyMgMjAyMi0xMi0wMyAy MzowMjo0NC44NTAgVVRDIFsxMjkwNThdIExPRzogIHRlcm1pbmF0aW5nIGFueSBvdGhlciBhY3Rp dmUgc2VydmVyIHByb2Nlc3NlcworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MSBVVEMgWzEyOTA1 OF0gTE9HOiAgc2h1dHRpbmcgZG93biBiZWNhdXNlIHJlc3RhcnRfYWZ0ZXJfY3Jhc2ggaXMgb2Zm CisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUyIFVUQyBbMTI5MDU4XSBMT0c6ICBkYXRhYmFzZSBz eXN0ZW0gaXMgc2h1dCBkb3duCisKKyMgZXZhbCB7ZXhlY3V0ZV9yZWdyZXNzX3Rlc3QoJHB1Yl9u b2RlLCAkc3ViX25vZGUpO307CisjIGlmICgkQCBuZSAiIikKKyMgeworIyAgICAgZmFpbCgkQCk7 CisjIH0KKworIyBDbG9zZSBub2RlcworJHB1Yl9ub2RlLT5zdG9wOworJHN1Yl9ub2RlLT5zdG9w OworCitwYXNzKCJyZWdyZXNzc2lvbiB0ZXN0IHBhc3NlZCIpOworCitkb25lX3Rlc3RpbmcoKTsK XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5z cWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MtLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uMTQwNzBjZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbApAQCAtMCww ICsxLDkgQEAKKy8qIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3Jp cHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgor XGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyIgdG8g bG9hZCB0aGlzIGZpbGUuIFxxdWl0CisKK0NSRUFURSBGVU5DVElPTiBkZXBhcnNlX2Ryb3BfZGRs KElOIG9iamlkZW50aXR5IHRleHQsCisgICAgSU4gb2JqZWN0dHlwZSB0ZXh0KQorICBSRVRVUk5T IHRleHQgSU1NVVRBQkxFIFNUUklDVAorICBBUyAnTU9EVUxFX1BBVEhOQU1FJyBMQU5HVUFHRSBD OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ2OTkyYgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICogdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKKyAqCQlTdXBwb3J0IGZ1bmN0 aW9ucyBmb3IgdGhlIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyBtb2R1bGUKKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTQtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYworICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgor I2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5 LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBh cnNlLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworUEdfRlVOQ1RJT05fSU5GT19WMShkZXBhcnNl X2Ryb3BfZGRsKTsKKworLyoKKyAqIEdpdmVuIG9iamVjdF9pZGVudGl0eSBhbmQgb2JqZWN0X3R5 cGUgb2YgZHJvcHBlZCBvYmplY3QsIHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgRFJP UCBjb21tYW5kLgorICovCitEYXR1bQorZGVwYXJzZV9kcm9wX2RkbChQR19GVU5DVElPTl9BUkdT KQoreworCXRleHQJICAgKm9iamlkZW50aXR5ID0gUEdfR0VUQVJHX1RFWFRfUCgwKTsKKwljb25z dCBjaGFyCSAgICpvYmppZGVudGl0eV9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcob2JqaWRlbnRpdHkp OworCXRleHQJICAgKm9iamVjdHR5cGUgPSBQR19HRVRBUkdfVEVYVF9QKDEpOworCWNvbnN0IGNo YXIJICAgKm9iamVjdHR5cGVfc3RyID0gdGV4dF90b19jc3RyaW5nKG9iamVjdHR5cGUpOworCisJ Y2hhcgkJICAgKmNvbW1hbmQ7CisKKwkvLyBjb25zdHJhaW50IGlzIHBhcnQgb2YgYWx0ZXIgdGFi bGUgY29tbWFuZCwgbm8gbmVlZCB0byBkcm9wIGluIERST1AgY29tbWFuZAorCWlmIChzdHJjbXAo b2JqZWN0dHlwZV9zdHIsICJ0YWJsZSBjb25zdHJhaW50IikgPT0gMCkgeworCQlQR19SRVRVUk5f TlVMTCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAidG9hc3QgdGFibGUi KSA9PSAwKSB7CisJCW9iamVjdHR5cGVfc3RyID0gInRhYmxlIjsKKwl9ICBlbHNlIGlmIChzdHJj bXAob2JqZWN0dHlwZV9zdHIsICJkZWZhdWx0IHZhbHVlIikgPT0gMCkgeworCQlQR19SRVRVUk5f TlVMTCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAib3BlcmF0b3Igb2Yg YWNjZXNzIG1ldGhvZCIpID09IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9IGVsc2UgaWYg KHN0cmNtcChvYmplY3R0eXBlX3N0ciwgImZ1bmN0aW9uIG9mIGFjY2VzcyBtZXRob2QiKSA9PSAw KSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJjbXAob2JqZWN0dHlwZV9z dHIsICJ0YWJsZSBjb2x1bW4iKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfQorCisJ Y29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iamlkZW50aXR5X3N0ciwgb2JqZWN0dHlw ZV9zdHIsIERST1BfQ0FTQ0FERSk7CisKKwlpZiAoY29tbWFuZCkKKwkJUEdfUkVUVVJOX1RFWFRf UChjc3RyaW5nX3RvX3RleHQoY29tbWFuZCkpOworCisJUEdfUkVUVVJOX05VTEwoKTsKK30KXCBO byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy5jb250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEx ZjkzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApAQCAtMCwwICsxLDQg QEAKK2NvbW1lbnQgPSAnVGVzdCBjb2RlIGZvciBEREwgZGVwYXJzZSByZWdyZXNzIGZlYXR1cmUn CitkZWZhdWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzJworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoxLjguMy4xCgo= --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Disposition: attachment; filename="v75-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kcr6 RnJvbSBhZGI3MDcxMWYzMTRjOTI5ZTNhZGVmMTE0NTE2Y2U5ZGMzZDIzODAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgNiBNYXIgMjAyMyAwMDowMToyOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDcvOF0gRG9jdW1lbnQgRERMIHJlcGxpY2F0aW9uIGFuZCBEREwgZGVwYXJzZXIuCgotLS0K IGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgfCAxMDU3ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwNTcgaW5zZXJ0aW9ucygr KQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgYi9k b2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCmluZGV4IDFiZDU2NjAuLjkyOGUw ZWYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKKysr IGIvZG9jL3NyYy9zZ21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbApAQCAtMTQzNyw2ICsxNDM3 LDEwNjMgQEAgdGVzdF9zdWI9IyBTRUxFQ1QgKiBGUk9NIHQxIE9SREVSIEJZIGlkOwogCiAgPC9z ZWN0MT4KIAorIDxzZWN0MSBpZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1kZGwiPgorICA8dGl0bGU+ RERMIFJlcGxpY2F0aW9uPC90aXRsZT4KKyAgPHBhcmE+CisgICAgRGF0YSBEZWZpbml0aW9uIENv bW1hbmRzIChERExzKSBjYW4gYmUgcmVwbGljYXRlZCB1c2luZyBsb2dpY2FsIHJlcGxpY2F0aW9u LgorICAgIFdoaWxlIGVuYWJsZWQgdGhpcyBmZWF0dXJlIGF1dG9tYXRpY2FsbHkgcmVwbGljYXRl cyBzdXBwb3J0ZWQgRERMIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgc3VjY2Vzc2Z1bGx5IGV4ZWN1 dGVkIG9uIGEgcHVibGlzaGVyIHRvIGEgc3Vic2NyaWJlci4gVGhpcyBpcworICAgIGVzcGVjaWFs bHkgdXNlZnVsIGlmIHlvdSBoYXZlIGxvdHMgc2NoZW1hIGNoYW5nZXMgb3ZlciB0aW1lIHRoYXQg bmVlZCByZXBsaWNhdGlvbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIEZvciBleGFtcGxl LCB3aGVuIGVuYWJsZWQgYSBDUkVBVEUgVEFCTEUgY29tbWFuZCBleGVjdXRlZCBvbiB0aGUgcHVi bGlzaGVyIGdldHMKKyAgICBXQUwtbG9nZ2VkLCBhbmQgZm9yd2FyZGVkIHRvIHRoZSBzdWJzY3Jp YmVyIHRvIHJlcGxheTsgYSBzdWJzZXF1ZW50ICJBTFRFUgorICAgIFNVQlNDUklQVElPTiAuLi4g UkVGUkVTSCBQVUJMSUNBVElPTiIgaXMgcnVuIG9uIHRoZSBzdWJzY3JpZXIgZGF0YWJhc2Ugc28g YW55CisgICAgZm9sbG93aW5nIERNTCBjaGFuZ2VzIG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlIHJl cGxpY2F0ZWQgd2l0aG91dCBhIGhpdGNoLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICAgRERM IHJlcGxpY2F0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGl0IGNhbiBiZSBlbmFibGVkIGF0 IGRpZmZlcmVudCBsZXZlbHMKKyAgICB1c2luZyB0aGUgZGRsIFBVQkxJQ0FUSU9OIG9wdGlvbi4g VGhpcyBvcHRpb24gY3VycmVudGx5IGhhcyB0d28gbGV2ZWxzIGFuZCBhcmUKKyAgICBvbmx5IGFs bG93ZWQgdG8gYmUgc2V0IGlmIHRoZSBQVUJMSUNBVElPTiBpcyBGT1IgQUxMIFRBQkxFUy4KKyAg PC9wYXJhPgorCisgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgIGFsbDogdGhpcyBvcHRpb24gZW5hYmxlcyByZXBsaWNhdGlvbiBvZiBhbGwgc3Vw cG9ydGVkIERETCBjb21tYW5kcy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorCisg ICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgIHRhYmxlOiB0aGlzIG9wdGlvbiBl bmFibGVzIHJlcGxpY2F0aW9uIG9mIFRhYmxlIERETCBjb21tYW5kcywKKyAgICAgICAgd2hpY2gg aW5jbHVkZToKKyAgICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgICAgQ1JFQVRFL0FMVEVSL0RST1AgVEFCTEUK KyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENSRUFURSBUQUJM RSBBUworICAgICAgICAgICAgPC9wYXJhPgorICAgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAg ICAgPC9pdGVtaXplZGxpc3Q+CisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgPC9p dGVtaXplZGxpc3Q+CisKKyAgPHNlY3QyIGlkPSJkZGwtcmVwbGljYXRpb24tb3B0aW9uLWV4YW1w bGVzIj4KKyAgICA8dGl0bGU+RXhhbXBsZXMgLSBTZXR1cCBEREwgUmVwbGljYXRpb24gb24gdGhl IFB1Ymxpc2hlcjwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIENyZWF0ZSBhIG5ldyBwdWJs aWNhdGlvbiB3aXRoIGFsbCBkZGwgcmVwbGljYXRpb24gZW5hYmxlZDoKKzxwcm9ncmFtbGlzdGlu Zz4KK0NSRUFURSBQVUJMSUNBVElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChkZGwgPSAn YWxsJyk7Cis8L3Byb2dyYW1saXN0aW5nPjwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgRW5h YmxlIHRhYmxlIGRkbCByZXBsaWNhdGlvbiBmb3IgYW4gZXhpc3RpbmcgUHVibGljYXRpb246Cis8 cHJvZ3JhbWxpc3Rpbmc+CitBTFRFUiBQVUJMSUNBVElPTiBteXB1YiBTRVQgKGRkbCA9ICd0YWJs ZScpOworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgPC9zZWN0Mj4KKworICA8c2VjdDIg aWQ9ImRkbC1yZXBsaWNhdGlvbi1zdXBwb3J0ZWQtY29tbWFuZHMiPgorICAgIDx0aXRsZT5TdXBw b3J0ZWQgRERMIGNvbW1hbmRzPC90aXRsZT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIERETCBj b21tYW5kcyBzdXBwb3J0ZWQgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gYXJlIGxpc3RlZCBpbiB0 aGUgZm9sbG93aW5nCisgICAgICBtYXRyaXguIE5vdGUgdGhhdCBnbG9iYWwgY29tbWFuZHMgY2Fu IGJlIGV4ZWN1dGVkIGF0IGFueSBkYXRhYmFzZSBhbmQgYXJlIGN1cnJlbnRseQorICAgICAgbm90 IHN1cHBvcnRlZCBmb3IgcmVwbGljYXRpb24sIGdsb2JhbCBjb21tYW5kcyBpbmNsdWRlIFJPTEUg c3RhdGVtZW50cywgRGF0YWJhc2UKKyAgICAgIHN0YXRlbWVudHMsIFRhYmxlU3BhY2Ugc3RhdGVt ZW50cyBhbmQgc29tZSBvZiB0aGUgR3JhbnRTdG10L1Jldm9rZVN0bXQgaWYgdGhlIHRhcmdldAor ICAgICAgb2JqZWN0IGlzIGEgZ2xvYmFsIG9iamVjdC4KKyAgICA8L3BhcmE+CisKKyAgICA8dGFi bGUgaWQ9ImRkbC1yZXBsaWNhdGlvbi1ieS1jb21tYW5kLXRhZyI+CisgICAgICA8dGl0bGU+RERM IFJlcGxpY2F0aW9uIFN1cHBvcnQgYnkgQ29tbWFuZCBUYWc8L3RpdGxlPgorICAgICAgPHRncm91 cCBjb2xzPSIzIj4KKyAgICAgICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMSIgY29sd2lkdGg9IjIq Ii8+CisgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDIiIGNvbHdpZHRoPSIxKiIvPgorICAg ICAgICA8Y29sc3BlYyBjb2xuYW1lPSJjb2wzIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAgIDx0aGVh ZD4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnk+Q29tbWFuZCBUYWc8L2VudHJ5PgorICAg ICAgICA8ZW50cnk+Rm9yIFJlcGxpY2F0aW9uPC9lbnRyeT4KKyAgICAgICAgPGVudHJ5Pk5vdGVz PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgIDwvdGhlYWQ+CisgICAgICA8dGJvZHk+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBB R0dSRUdBVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgQ0FTVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBDT0xMQVRJ T048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+QUxURVIgQ09OVkVSU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBEQVRBQkFT RTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBERUZBVUxUIFBSSVZJTEVHRVM8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIg RE9NQUlOPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEVWRU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIg RVhURU5TSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIEZPUkVJR04gVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgRlVOQ1RJT048L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgTEFOR1VBR0U8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ QUxURVIgTEFSR0UgT0JKRUNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkFMVEVSIE9QRVJBVE9SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIE9QRVJBVE9SIENMQVNT PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkFMVEVSIE9QRVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBQT0xJ Q1k8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+QUxURVIgUFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFBVQkxJQ0FU SU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFJPTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgUk9VVElORTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5BTFRFUiBSVUxFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBTQ0hFTUE8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ QUxURVIgU0VRVUVOQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU0VSVkVSPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVS IFNUQVRJU1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU1VCU0NSSVBUSU9OPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFM VEVSIFNZU1RFTTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUQUJM RVNQQUNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT048L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBURVhU IFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEVYVCBTRUFSQ0ggVEVNUExBVEU8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+QUxURVIgVFJBTlNGT1JNPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRSSUdHRVI8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgVFlQRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+QUxURVIgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTkFMWVpFPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkJFR0lOPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNBTEw8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0hFQ0tQT0lOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DTE9TRTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DTE9TRSBDVVJTT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0xPU0UgQ1VSU09SIEFMTDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DTFVTVEVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPTU1FTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09NTUlUPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNPTU1JVCBQUkVQQVJFRDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT1BZPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPUFkg RlJPTTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQUNDRVNTIE1FVEhPRDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUg QUdHUkVHQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDQVNUPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDT0xM QVRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIENPTlNUUkFJTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIENP TlZFUlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIERBVEFCQVNFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBE T01BSU48L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEVWRU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRF IEVYVEVOU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVI8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q1JFQVRFIEZPUkVJR04gVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEZVTkNUSU9OPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkNSRUFURSBJTkRFWDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgTEFOR1VBR0U8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBPUEVSQVRP UjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgT1BFUkFUT1IgQ0xBU1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIE9Q RVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUE9MSUNZPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFU RSBQUk9DRURVUkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFBVQkxJQ0FUSU9OPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNS RUFURSBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBSVUxFPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTQ0hF TUE8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFNFUVVFTkNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTRVJWRVI8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+Q1JFQVRFIFNUQVRJU1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFNVQlNDUklQ VElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRBQkxFIEFT PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBUQUJMRVNQQUNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNF QVJDSCBDT05GSUdVUkFUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNFQVJDSCBESUNUSU9O QVJZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBURVhUIFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JF QVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUUkFOU0ZPUk08L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+Q1JFQVRFIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRZUEU8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+Q1JFQVRFIFVTRVIgTUFQUElORzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVklFVzwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5ERUFMTE9DQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRFQUxMT0NBVEUgQUxMPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRFQ0xB UkUgQ1VSU09SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkRFTEVURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVNDQVJEPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRJU0NBUkQgQUxMPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQgUExBTlM8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElT Q0FSRCBTRVFVRU5DRVM8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRCBURU1QPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRPPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkRST1AgQUNDRVNTIE1FVEhPRDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEFHR1JFR0FURTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5EUk9QIENBU1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBDT0xMQVRJT048L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RFJPUCBDT05TVFJBSU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgQ09OVkVSU0lPTjwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5EUk9QIERBVEFCQVNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgRE9NQUlOPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag RVZFTlQgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEVYVEVOU0lPTjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9Q IEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgRk9SRUlHTiBUQUJMRTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5EUk9QIEZVTkNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgSU5ERVg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBMQU5HVUFHRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIE1BVEVSSUFMSVpFRCBWSUVXPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRST1AgT1BFUkFUT1I8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBPUEVSQVRPUiBDTEFTUzwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5EUk9QIE9QRVJBVE9SIEZBTUlMWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIE9XTkVEPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRST1AgUE9MSUNZPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgUFVCTElDQVRJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBST0xFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUk9V VElORTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFJVTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTQ0hFTUE8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+RFJPUCBTRVFVRU5DRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFNFUlZFUjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIFNUQVRJU1RJQ1M8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTVUJTQ1JJUFRJT048L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRBQkxFU1BBQ0U8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBU RVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVEVYVCBTRUFSQ0ggRElD VElPTkFSWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRFWFQgU0VBUkNIIFBBUlNFUjwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9y b3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5E Uk9QIFRFWFQgU0VBUkNIIFRFTVBMQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVFJBTlNGT1JNPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkRST1AgVFJJR0dFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRZUEU8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBWSUVXPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkVYRUNVVEU8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Pi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5GRVRDSDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5HUkFOVDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5HUkFOVCBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPklNUE9SVCBGT1JFSUdOIFNDSEVNQTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TElTVEVOPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkxPQUQ8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+TE9DSyBUQUJMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5NRVJHRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5NT1ZFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPk5PVElGWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5QUkVQQVJFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlBSRVBBUkUg VFJBTlNBQ1RJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVBU1NJR04gT1dORUQ8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVGUkVT SCBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUlOREVYPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFTEVB U0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+UkVTRVQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVWT0tFPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFVk9L RSBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPlJPTExCQUNLPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJPTExCQUNLIFBSRVBBUkVE PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPlNBVkVQT0lOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5TRUNVUklUWSBMQUJFTDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5TRVQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+U0VUIENPTlNUUkFJTlRTPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlNIT1c8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+U1RBUlQgVFJBTlNBQ1RJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+VU5MSVNURU48L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+VVBEQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPlZBQ1VVTTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgPC90Ym9k eT4KKyAgICA8L3Rncm91cD4KKyAgICA8L3RhYmxlPgorICA8L3NlY3QyPgorCisgIDxzZWN0MiBp ZD0iZGRsLXJlcGxpY2F0aW9uLWRkbC1kZXBhcnNlciI+CisgICAgPHRpdGxlPkRETCBEZXBhcnNl cjwvdGl0bGU+CisgICAgPHBhcmE+CisgICAgICBUaGUgRERMIGRlcGFyc2VyIHV0aWxpdHkgaXMg aW52b2tlZCBkdXJpbmcgdGhlIHJlcGxpY2F0aW9uIG9mIERETHMuIFRoZSBEREwKKyAgICAgIGRl cGFyc2VyIGlzIGNhcGFibGUgb2YgY29udmVydGluZyBhIERETCBjb21tYW5kIGludG8gZm9ybWF0 dGVkIEpTT04gYmxvYiwgd2l0aAorICAgICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBy ZWNvbnN0cnVjdCB0aGUgRERMIGNvbW1hbmRzIGF0IHRoZSBkZXN0aW5hdGlvbi4gVGhlCisgICAg ICBiZW5lZml0IG9mIHVzaW5nIHRoZSBkZXBhcnNlciBvdXRwdXQgY29tcGFyZWQgdG8gdGhlIG9y aWdpbmFsIGNvbW1hbmQgc3RyaW5nCisgICAgICBpbmNsdWRlczoKKyAgICAgIDxpdGVtaXplZGxp c3Q+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICAgIEV2 ZXJ5IGRhdGFiYXNlIG9iamVjdCBpbiB0aGUgZGVwYXJzZWQgb3V0cHV0IGlzIHNjaGVtYS1xdWFs aWZpZWQsIHNvIHRoYXQKKyAgICAgICAgICAgIHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVu IGluIHRoZSBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFy YT4KKyAgICAgICAgICAgIFRoZSBzdHJ1Y3R1cmVkIEpTT04gYW5kIHRoZSBmb3JtYXR0ZWQgb3V0 cHV0IG1ha2VzIGl0IHBvc3NpYmxlIGZvcgorICAgICAgICAgICAgbWFjaGluZSBlZGl0aW5nLiBU aGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIHN1YnNjcmliZXIgaXMgb24gYSBkaWZmZXJlbnQKKyAg ICAgICAgICAgIFBHIHZlcnNpb24gYW5kIGhhcyBjZXJ0YWluIERETCBzeW50YXggZGlmZmVyZW5j ZXMgd2hpY2ggbmVlZCB0byBiZQorICAgICAgICAgICAgcmVzb2x2ZWQgYmVmb3JlIGFwcGx5Lgor ICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgPC9pdGVtaXpl ZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgRERMIGRlcGFyc2Vy IGV4cG9zZXMgdHdvIFNRTCBmdW5jdGlvbnM6CisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBkZGxfZGVwYXJzZV90 b19qc29uOiBnaXZlbiBhIENvbGxlY3RlZENvbW1hbmQgZnJvbSBldmVudCB0cmlnZ2VyLAorICAg ICAgICAgICAgcmV0dXJucyBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuIFRoZSBjb21tYW5k IGlzIGV4cGFuZGVkIGZ1bGx5CisgICAgICAgICAgICBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJp Z3VpdGllcyBldmVuIGluIHRoZSBmYWNlIG9mIHNlYXJjaF9wYXRoCisgICAgICAgICAgICBjaGFu Z2VzLgorICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvaXRl bWl6ZWRsaXN0PgorCisgICAgICA8aXRlbWl6ZWRsaXN0PgorICAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZDog RXhwYW5kIEpTT04gZm9ybWF0IERETCBnZW5lcmF0ZWQgYnkKKyAgICAgICAgICAgIGRkbF9kZXBh cnNlX3RvX2pzb24gdG8gYSBwbGFpbiBEREwgY29tbWFuZC4KKyAgICAgICAgICA8L3BhcmE+Cisg ICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICA8L3BhcmE+Cisg IDwvc2VjdDI+CisKKyA8L3NlY3QxPgorCiAgPHNlY3QxIGlkPSJsb2dpY2FsLXJlcGxpY2F0aW9u LWNvbmZsaWN0cyI+CiAgIDx0aXRsZT5Db25mbGljdHM8L3RpdGxlPgogCi0tIAoxLjguMy4xCgo= --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0006-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v75-0006-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kcq5 RnJvbSBjOWRjNWEyM2MzMTcxM2EwOWVkNTA2OWY4OWZkNzM2N2QwZTJjODQxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzo1Njo0MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDYvOF0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNh dGlvbiwgd2UgdXNlIGV2ZW50IHRyaWdnZXIgYW5kIERETCBkZXBhcnNpbmcKZmFjaWxpdGllcy4g RHVyaW5nIENSRUFURSBQVUJMSUNBVElPTiB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kIHRyaWdn ZXIgdGhhdApkZXBhcnNlcyB0aGUgRERMIChpZiB0aGUgRERMIGlzIGFubm90YXRlZCBhcyBkZGxy ZXBsb2sgZm9yIERETCByZXBsaWNhdGlvbiBpbgpjbWR0YWdsaXN0LmgpIGFzIGEgSlNPTiBibG9i LCBhbmQgV0FMIGxvZ3MgaXQuIFRoZSBldmVudCB0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkKcmVt b3ZlZCBhdCB0aGUgdGltZSBvZiBEUk9QIFBVQkxJQ0FUSU9OLiBUaGUgV0FMU2VuZGVyIGRlY29k ZXMgdGhlIFdBTCBhbmQgc2VuZHMKaXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTCBj b21tYW5kcy4gVGhlIHN1YnNjcmliZXIgdGhlbiBjb252ZXJ0cyBKU09OCmJhY2sgdG8gdGhlIERE TCBjb21tYW5kIHN0cmluZyBhbmQgZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBh bHNvIGFkZAp0aGUgbmV3bHkgYWRkZWQgcmVsIHRvIHBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhh dCB0aGUgRE1MIGNoYW5nZXMgb24gdGhlIG5ldwp0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3aXRo b3V0IGhhdmluZyB0byBtYW51YWxseSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVT SCBQVUJMSUNBVElPTiIuCgotIEZvciBub24tcmV3cml0ZSBBTFRFUiBvYmplY3QgY29tbWFuZCBh bmQKLSAgICAgQ1JFQVRFIG9iamVjdCBjb21tYW5kOgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGF0 IGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZQpkZXBhcnNlZCBq c29uIHN0cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRv CnN1YnNjcmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIEl0 IHN1cHBvcnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNlcHQgc29tZSBjb21tYW5k cyhEREwgcmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRoYXQgaW50cm9kdWNlZCBy ZWNlbnRseSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50CmRkbF9k ZXBhcnNlciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgotIEZvciBEUk9QIG9iamVjdDoK VGhlICdjb21tYW5kIHN0YXJ0JyBldmVudCBoYW5kbGVyIGxvZ3MgYSBkZGwgbWVzc2FnZSB3aXRo IHRoZSByZWxpZHMgb2YKdGhlIHRhYmxlcyB0aGF0IGFyZSBkcm9wcGVkIHdoaWNoIHRoZSBvdXRw dXQgcGx1Z2luIChwZ291dHB1dCkgc3RvcmVzIGluCml0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVy ZSBhZnRlciB2ZXJpZnlpbmcgdGhhdCBpdCBpcyBmb3IgYSB0YWJsZSB0aGF0IGlzCnBhcnQgb2Yg dGhlIHB1YmxpY2F0aW9uLiBMYXRlciB0aGUgJ2NvbW1hbmQgZW5kJyBldmVudCBoYW5kbGVyIHNl bmRzIHRoZQphY3R1YWwgZHJvcCBtZXNzYWdlLiBQZ291dHB1dCBvbiByZWNlaXZpbmcgdGhlIGNv bW1hbmQgZW5kLCBvbmx5IHNlbmRzIG91dAp0aGUgZHJvcCBjb21tYW5kIG9ubHkgaWYgaXQgaXMg Zm9yIG9uZSBvZiB0aGUgcmVsaWRzIG1hcmtlZCBmb3IgZGVsZXRpbmcuCgpUaGUgcmVhc29uIHdl IGhhdmUgdG8gZG8gdGhpcyBpcyBiZWNhdXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVj ZWl2ZXMgdGhlICdjb21tYW5kIGVuZCcgbWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUg aXMgbm8gbG9uZ2VyCnZhbGlkIGFzIGl0IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZh bGlkYXRpb25zIHJlY2VpdmVkIGZvciB0aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBs b25nZXIgcG9zc2libGUgdG8gdmVyaWZ5IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJs aWNhdGlvbiBsaXN0IG9yIG5vdC4gVG8gbWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQK dHdvIG1vcmUgZWxlbWVudHMgdG8gdGhlIGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlk IGFuZCBjbWR0eXBlKS4KCldlIGNvdWxkIGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRo ZSBzdWJzY3JpYmVyIHNpZGUgYXMgd2VsbCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNw dXJpb3VzIGRkbCBtZXNzYWdlcyBmb3IgdGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBw dWJsaWNhdGlvbi4KCi0gRm9yIHRhYmxlX3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFM VEVSIENPTFVNTiBUWVBFLCBBREQgQ09MVU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NF U1MgTUVUSE9EKQoKd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJz ZWQganNvbiBzdHJpbmcgYXQKdGFibGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2Vu ZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0 ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0 IHRoZSB1cGNvbWluZyByZXdyaXRlIElOU0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRv CnN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2Ny aWJlciBjYW4gYWx3YXlzIGJlCmNvbnNpc3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQg cHVibGlzaCByZXdyaXRlIGRkbCBtdXN0IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3Vy ZWQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUg VVBEQVRFcy4KCldlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBk YXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1v bmcKcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEg aW4gc3Vic2NyaWJlciB3aGljaApkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCBy ZXdyaXR0ZW4sIHdlIG5lZWQgdG8gbGV0IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdp bmFsIHJld3JpdGUgZGRsIHRvIHJld3JpdGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRo ZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1v bmcKcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29w ZXJhdG9ycyB1c2VkIGR1cmluZwpyZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhl IHJld3JpdGUgVVBEQVRFcyB0byBrZWVwIHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZF OgpUaGlzIGFwcHJvYWNoIGNvdWxkIGJlIGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmli ZXIgdHJ5IHRvIHVwZGF0ZQp0aGUgZXh0cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBm dWxseSByZXdyaXRlIGRkbCBhbmQgdXNlIHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8g cmV3cml0ZSB0aGUgcmVzdCBkYXRhLiBUbyBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0 aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgdG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRl CnBhcnQgYW5kIGFkZCBzb21lIGxvZ2ljIGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRy YSBkYXRhLgpCZXNpZGVzLCB3ZSBtYXkgbm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMg Zm9yIGFsbCB0eXBlIG9mIHJld3JpdGUKZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0 byBza2lwIHNlbmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VE IGFzIHRoZSBkYXRhIGluIHRoZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdl CmNvdWxkIHVzZSB0aGUgZGVwYXJzZXIgYW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNl IGRkbHMgYW5kIHNraXAKc2VuZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgICAgICAgfCAgIDIgKwog c3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyAgICAgICAgICAgICAgICAgICAgfCAgMTAg Kwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jICAgICAgICAgICAgICAgfCAz MTAgKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j ICAgICAgICAgICAgIHwgMjUxICsrKysrKysrKy0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYyAgICAgICAgICAgICAgICAgICB8ICAxMCArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3V0aWxjbWQuYyAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMgICAgICAgfCAzNjUgKysrKysrKysrKysrKysr Kwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAgICAgICAgfCAg NDkgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkICAgICAg ICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgICAgICAg ICAgICB8ICA0MyArKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVm ZmVyLmMgICAgfCAgMjAgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMgICAgICAgICAgIHwgMjQwICsrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dC9wZ291dHB1dC5jICAgICAgICB8IDE5MSArKysrKysrKy0KIHNyYy9iYWNrZW5kL3Rj b3AvY21kdGFnLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI2ICstCiBzcmMvYmFja2Vu ZC90Y29wL3V0aWxpdHkuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgICAgICAgfCAgIDIgKwog c3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTAg KysrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKwogc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgICAgICAgICAgICAg ICAgfCAgIDIgKy0KIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDQ0ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAg ICAgICAgICAgICB8ICAxMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgg ICAgICAgICAgICAgICB8ICAxNyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2Vy LmggICAgICAgICAgICAgICB8ICAxNCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHByb3RvLmggICAgICAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0 cHV0X3BsdWdpbi5oICAgICAgICAgICAgfCAgMTUgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Bnb3V0cHV0LmggICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgICAgIHwgIDEyICsKIHNyYy9pbmNsdWRlL3Rjb3Av Y21kdGFnLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS90 Y29wL2NtZHRhZ2xpc3QuaCAgICAgICAgICAgICAgICAgICAgICB8IDM4NiArKysrKysrKy0tLS0t LS0tLQogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgICAgICAgICAgICAg fCAgIDEgKwogc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDMgKy0KIC4uLi9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0ICAgICAgICAgICAgICAg ICAgICAgIHwgICA3ICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90 YWJsZS5zcWwgIHwgICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgICAg ICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0 aW9uLm91dCAgICAgICAgICB8IDQyMCArKysrKysrKystLS0tLS0tLS0tCiBzcmMvdGVzdC9zdWJz Y3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsICAgICB8IDQ2NSArKysrKysrKysrKysr KysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICAg ICAgIHwgICA2ICsKIDM5IGZpbGVzIGNoYW5nZWQsIDI1NTggaW5zZXJ0aW9ucygrKSwgNDg3IGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvZGRsdHJpZ2dlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRp b24uYwppbmRleCBhOThmY2FkLi5jNTA1ZjI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jCkBAIC0xMDA1LDYgKzEwMDUsOCBAQCBHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpCiAJ cHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAlwdWItPnB1 YmFjdGlvbnMucHViZGVsZXRlID0gcHViZm9ybS0+cHViZGVsZXRlOwogCXB1Yi0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSA9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCXB1Yi0+cHViYWN0aW9ucy5w dWJkZGxfYWxsID0gcHViZm9ybS0+cHViZGRsX2FsbDsKKwlwdWItPnB1YmFjdGlvbnMucHViZGRs X3RhYmxlID0gcHViZm9ybS0+cHViZGRsX3RhYmxlOwogCXB1Yi0+cHVidmlhcm9vdCA9IHB1YmZv cm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVh dGVhcy5jCmluZGV4IGQ2YzZkNTEuLjc3ZGNiOWM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVhdGVhcy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rhc19pbnRlcm5h bChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3UXVlcnkoaW50 b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUgdHJpZ2dlciBm b3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28KKwkJICogdGhh dCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5IGNyZWF0ZWQg dGFibGUKKwkJICogaW4gdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFkZHIpOworCX0K IAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jCmluZGV4IDE5MjhlNTkuLmIzZjY4NDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90 cmlnZ2VyLmMKQEAgLTM2LDkgKzM2LDEzIEBACiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2Z1bmMuaCIKKyNpbmNs dWRlICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVw bGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIK ICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0 eS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wu aCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hl LmgiCkBAIC05Miw3ICs5Niw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdT dG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfc3Rh cnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQi KSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpICE9IDAgJiYK LQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwKQorCQlzdHJj bXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYKKwkJc3RyY21wKHN0 bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQllcmVwb3J0KEVSUk9S LAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkgZXJybXNnKCJ1bnJl Y29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTE4LDcgKzEyMyw4IEBAIENyZWF0ZUV2 ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZhbGlkYXRlIHRhZyBs aXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1h bmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInNxbF9kcm9wIikg PT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDAgfHwKKwkJ IHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKIAkJJiYg dGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFncyk7CiAJZWxzZSBp ZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9PSAwCkBAIC01MjIs NiArNTI4LDcgQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0cmVlLAogCUxp c3QJICAgKmNhY2hlbGlzdDsKIAlMaXN0Q2VsbCAgICpsYzsKIAlMaXN0CSAgICpydW5saXN0ID0g TklMOworCWludAkJCXB1Yl9kZXBhcnNlX2Z1bmNfY250ID0gMDsKIAogCS8qCiAJICogV2Ugd2Fu dCB0aGUgbGlzdCBvZiBjb21tYW5kIHRhZ3MgZm9yIHdoaWNoIHRoaXMgcHJvY2VkdXJlIGlzIGFj dHVhbGx5CkBAIC01NDQsNyArNTUxLDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAq cGFyc2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlm IChldmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29t bWFuZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FM RHJvcCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNv bW1hbmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5l eHBlY3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsK QEAgLTU3MSw2ICs1NzksMTIgQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFyc2V0 cmVlLAogCSAqIG9uY2Ugd2UgZG8gYW55dGhpbmcgYXQgYWxsIHRoYXQgdG91Y2hlcyB0aGUgY2F0 YWxvZ3MsIGFuIGludmFsaWRhdGlvbgogCSAqIG1pZ2h0IGxlYXZlIGNhY2hlbGlzdCBwb2ludGlu ZyBhdCBnYXJiYWdlLCBzbyB3ZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdlCiAJICogY2FuIGRvIG11 Y2ggZWxzZS4KKwkgKgorCSAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGV2ZW50IHRyaWdnZXJzIGNy ZWF0ZWQgYXMgcGFydCBvZiBwdWJsaWNhdGlvbnMuCisJICogSWYgdGhlcmUgYXJlIG11bHRpcGxl IHB1YmxpY2F0aW9ucyB3aGljaCBwdWJsaXNoIGRkbHMsIG9ubHkgb25lIHNldCBvZiB0aGUKKwkg KiBldmVudCB0cmlnZ2VyIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGludm9rZWQuIFRoZSBkZGwgZGVw YXJzZSBldmVudCB0cmlnZ2VycworCSAqIHdyaXRlIHRvIFdBTCwgc28gbm8gbmVlZCB0byBkdXBs aWNhdGUgaXQgYXMgYWxsIHdhbHNlbmRlcnMgd2lsbCByZWFkIHRoZSBzYW1lCisJICogV0FMLgog CSAqLwogCWZvcmVhY2gobGMsIGNhY2hlbGlzdCkKIAl7CkBAIC01NzgsOCArNTkyLDI1IEBAIEV2 ZW50VHJpZ2dlckNvbW1vblNldHVwKE5vZGUgKnBhcnNldHJlZSwKIAogCQlpZiAoZmlsdGVyX2V2 ZW50X3RyaWdnZXIodGFnLCBpdGVtKSkKIAkJewotCQkJLyogV2UgbXVzdCBwbGFuIHRvIGZpcmUg dGhpcyB0cmlnZ2VyLiAqLwotCQkJcnVubGlzdCA9IGxhcHBlbmRfb2lkKHJ1bmxpc3QsIGl0ZW0t PmZub2lkKTsKKwkJCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2VyX2Z1bmNfcHJlZml4ID0gInB1 YmxpY2F0aW9uX2RlcGFyc2VfJXMiOworCQkJY2hhcgkJdHJpZ2dlcl9mdW5jX25hbWVbTkFNRURB VEFMRU5dOworCQkJT2lkCQkJcHViX2Z1bmNvaWQ7CisJCQlMaXN0IAkJKnB1YmZ1bmNuYW1lOwor CisJCQkvKiBHZXQgZnVuY3Rpb24gb2lkIG9mIHRoZSBwdWJsaWNhdGlvbidzIGRkbCBkZXBhcnNl IGV2ZW50IHRyaWdnZXIgKi8KKwkJCXNucHJpbnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXplb2Yo dHJpZ2dlcl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNfcHJlZml4LAorCQkJCQkgZXZlbnRzdHIp OworCQkJcHViZnVuY25hbWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFtZSk7CisJ CQlwdWJfZnVuY29pZCA9IExvb2t1cEZ1bmNOYW1lKHB1YmZ1bmNuYW1lLCAwLCBOVUxMLCB0cnVl KTsKKworCQkJaWYgKGl0ZW0tPmZub2lkICE9IHB1Yl9mdW5jb2lkKQorCQkJCXJ1bmxpc3QgPSBs YXBwZW5kX29pZChydW5saXN0LCBpdGVtLT5mbm9pZCk7CisJCQllbHNlCisJCQl7CisJCQkJLyog T25seSB0aGUgZmlyc3QgZGRsIGRlcGFyc2UgZXZlbnQgdHJpZ2dlciBuZWVkcyB0byBiZSBpbnZv a2VkICovCisJCQkJaWYgKHB1Yl9kZXBhcnNlX2Z1bmNfY250KysgPT0gMCkKKwkJCQkJcnVubGlz dCA9IGxhcHBlbmRfb2lkKHJ1bmxpc3QsIGl0ZW0tPmZub2lkKTsKKwkJCX0KIAkJfQogCX0KIApA QCAtODI3LDYgKzg1OCwxNDEgQEAgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNl dHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKQogCUNvbW1hbmRDb3VudGVySW5jcmVtZW50 KCk7CiB9CiAKKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQKKyAqICAg ICBQcmVwYXJlIHRvIHJlY2VpdmUgZGF0YSBvbiBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRVQgSU5U TyBjb21tYW5kIGFib3V0CisgKiAgICAgdG8gYmUgZXhlY3V0ZWQuCisgKi8KK3ZvaWQKK0V2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQoreworCU1lbW9yeUNv bnRleHQgb2xkY3h0OworCUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisJQ3JlYXRlVGFibGVB c1N0bXQgKnN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKilwYXJzZXRyZWU7CisKKwkvKiBpZ25v cmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJs ZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlv bGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j eHQpOworCisJY29tbWFuZCA9IHBhbGxvYyhzaXplb2YoQ29sbGVjdGVkQ29tbWFuZCkpOworCisJ Y29tbWFuZC0+dHlwZSA9IChzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkgPyBTQ1RfQ3Jl YXRlVGFibGVBcyA6IFNDVF9TaW1wbGU7CisJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3JlYXRp bmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gSW52YWxpZE9iamVjdEFk ZHJlc3M7CisJY29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gTlVMTDsKKwljb21tYW5kLT5w YXJzZXRyZWUgPSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CisKKwljb21tYW5kLT5wYXJlbnQgPSBj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCWN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBjb21tYW5kOworCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVu ZAorICoJCUZpbmlzaCB1cCBzYXZpbmcgYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVDVCBJTlRPIGNv bW1hbmQuCisgKgorICogRklYTUUgdGhpcyBBUEkgaXNuJ3QgY29uc2lkZXJpbmcgdGhlIHBvc3Np YmlsaXR5IHRoYXQgYW4geGFjdC9zdWJ4YWN0IGlzCisgKiBhYm9ydGVkIHBhcnR3YXkgdGhyb3Vn aC4gIFByb2JhYmx5IGl0J3MgYmVzdCB0byBhZGQgYW4KKyAqIEF0RU9TdWJYYWN0X0V2ZW50VHJp Z2dlcnMoKSB0byBmaXggdGhpcy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3Jp dGVFbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVu dDsKKwlDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmln Z2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29t bWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCXN0bXQgPSAgKENyZWF0ZVRh YmxlQXNTdG10ICopY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFy c2V0cmVlOworCisJaWYgKHN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCXsKKwkJcGFy ZW50ID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+cGFyZW50Owor CisJCXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOworCisJ CWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgPSBwYXJlbnQ7CisJfQor CWVsc2UKKwl7CisJCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCisJCW9sZGN4dCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwkJY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5zaW1wbGUuYWRkcmVzcyA9IGFk ZHJlc3M7CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExpc3QgPQorCQkJbGFw cGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRMaXN0LAorCQkJCQljdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kKTsKKworCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkY3h0KTsKKwl9Cit9CisKKy8qCisgKiBGaXJlIHRhYmxlX2luaXRfcmV3cml0ZSB0 cmlnZ2Vycy4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcmVh bF9jcmVhdGUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcykKK3sKKwlMaXN0CSAgICpydW5saXN0Owor CUV2ZW50VHJpZ2dlckRhdGEgdHJpZ2RhdGE7CisJQ29sbGVjdGVkQ29tbWFuZCAqY29tbWFuZDsK KworCS8qCisJICogU2VlIEV2ZW50VHJpZ2dlckRETENvbW1hbmRTdGFydCBmb3IgYSBkaXNjdXNz aW9uIGFib3V0IHdoeSBldmVudAorCSAqIHRyaWdnZXJzIGFyZSBkaXNhYmxlZCBpbiBzaW5nbGUg dXNlciBtb2RlLgorCSAqLworCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCisJCXJldHVybjsKKwor CS8qCisJICogQWxzbyBkbyBub3RoaW5nIGlmIG91ciBzdGF0ZSBpc24ndCBzZXQgdXAsIHdoaWNo IGl0IHdvbid0IGJlIGlmIHRoZXJlCisJICogd2VyZW4ndCBhbnkgcmVsZXZhbnQgZXZlbnQgdHJp Z2dlcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IERETAorCSAqIGNvbW1hbmQuICBUaGlz IHRlc3QgbWlnaHQgdGhlcmVmb3JlIHNlZW0gb3B0aW9uYWwsIGJ1dCBpdCdzCisJICogKm5lY2Vz c2FyeSosIGJlY2F1c2UgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAgbWlnaHQgZmluZCB0cmlnZ2Vy cyB0aGF0CisJICogZGlkbid0IGV4aXN0IGF0IHRoZSB0aW1lIHRoZSBjb21tYW5kIHN0YXJ0ZWQu CisJICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUpCisJCXJldHVybjsKKworCS8q IERvIG5vdGhpbmcgaWYgbm8gY29tbWFuZCB3YXMgY29sbGVjdGVkLiAqLworCWlmICghY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCkKKwkJcmV0dXJuOworCisJY29tbWFu ZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlydW5saXN0 ID0gRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoY29tbWFuZC0+cGFyc2V0cmVlLAorCQkJCQkJCQkJ ICBFVlRfVGFibGVJbml0V3JpdGUsCisJCQkJCQkJCQkgICJ0YWJsZV9pbml0X3dyaXRlIiwKKwkJ CQkJCQkJCSAgJnRyaWdkYXRhKTsKKwlpZiAocnVubGlzdCA9PSBOSUwpCisJCXJldHVybjsKKwor CS8qIFNldCB0aGUgcmVhbCBDcmVhdGVUYWJsZSBzdGF0bWVudCBhbmQgb2JqZWN0IGFkZHJlc3Mg Ki8KKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSByZWFsX2NyZWF0ZTsKKwljb21tYW5k LT5kLmN0YXMuYWRkcmVzcyA9IGFkZHJlc3M7CisKKwkvKiBSdW4gdGhlIHRyaWdnZXJzLiAqLwor CUV2ZW50VHJpZ2dlckludm9rZShydW5saXN0LCAmdHJpZ2RhdGEpOworCisJLyogQ2xlYW51cC4g Ki8KKwlsaXN0X2ZyZWUocnVubGlzdCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbnl0aGluZyB0 aGUgZXZlbnQgdHJpZ2dlcnMgZGlkIHdpbGwgYmUgdmlzaWJsZSB0byB0aGUgbWFpbgorCSAqIGNv bW1hbmQuCisJICovCisJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKK30KKwogLyoKICAqIElu dm9rZSBlYWNoIGV2ZW50IHRyaWdnZXIgaW4gYSBsaXN0IG9mIGV2ZW50IHRyaWdnZXJzLgogICov CkBAIC0xMTA4LDcgKzEyNzQsOCBAQCB0cmFja0Ryb3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpCiAJ ICovCiAJcmV0dXJuIChFdmVudENhY2hlTG9va3VwKEVWVF9TUUxEcm9wKSAhPSBOSUwpIHx8CiAJ CShFdmVudENhY2hlTG9va3VwKEVWVF9UYWJsZVJld3JpdGUpICE9IE5JTCkgfHwKLQkJKEV2ZW50 Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRFbmQpICE9IE5JTCk7CisJCShFdmVudENhY2hlTG9v a3VwKEVWVF9ERExDb21tYW5kRW5kKSAhPSBOSUwpIHx8CisJCShFdmVudENhY2hlTG9va3VwKEVW VF9UYWJsZUluaXRXcml0ZSkgIT0gTklMKTsKIH0KIAogLyoKQEAgLTE0OTksNiArMTY2Niw3IEBA IEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpCiAKIAljb21tYW5k LT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKIAljb21tYW5kLT5k LmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZhbGlkT2lkOworCWNvbW1hbmQtPmQuYWx0ZXJUYWJs ZS5yZXdyaXRlID0gZmFsc2U7CiAJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBOSUw7 CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9iamVjdChwYXJzZXRyZWUpOwogCkBAIC0xNTMy LDcgKzE3MDAsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9iamVjdElkKQog ICogaW50ZXJuYWxseSwgc28gdGhhdCdzIGFsbCB0aGF0IHRoaXMgY29kZSBuZWVkcyB0byBoYW5k bGUgYXQgdGhlIG1vbWVudC4KICAqLwogdm9pZAotRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFi bGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCitFdmVudFRyaWdn ZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRk cmVzcywgYm9vbCByZXdyaXRlKQogewogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCUNvbGxlY3Rl ZEFUU3ViY21kICpuZXdzdWI7CkBAIC0xNTUyLDYgKzE3MjAsODMgQEAgRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Mp CiAJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlP YmplY3Qoc3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1h bmQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CisJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQorCQlsYXBwZW5k KGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5z dWJjbWRzLCBuZXdzdWIpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisK Ky8qCisgKiBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydAorICoJCVNhdmUgZGF0YSBhYm91dCBh IHNpbmdsZSBwYXJ0IG9mIGFuIEFMVEVSIFRZUEUuCisgKgorICogQUxURVIgVEFCTEUgY2FuIGhh dmUgbXVsdGlwbGUgc3ViY29tbWFuZHMgd2hpY2ggbWlnaHQgaW5jbHVkZSBEUk9QIENPTFVNTgor ICogY29tbWFuZCBhbmQgQUxURVIgVFlQRSByZWZlcnJpbmcgdGhlIGRyb3AgY29sdW1uIGluIFVT SU5HIGV4cHJlc3Npb24uCisgKiBBcyB0aGUgZHJvcHBlZCBjb2x1bW4gY2Fubm90IGJlIGFjY2Vz c2VkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgRFJPUCBDT0xVTU4sCisgKiBhIHNwZWNpYWwgdHJp Z2dlciBpcyByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBjYXNlIGJlZm9yZSB0aGUgZHJvcCBjb2x1 bW4gaXMKKyAqIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFy dChBbHRlclRhYmxlQ21kICpzdWJjbWQsIFJlbGF0aW9uIHJlbCkKK3sKKwlNZW1vcnlDb250ZXh0 IG9sZGN4dDsKKwlDb2xsZWN0ZWRBVFN1YmNtZCAqbmV3c3ViOworCUNvbHVtbkRlZiAgKmRlZjsK KwlSZWxhdGlvbglhdHRyZWxhdGlvbjsKKwlIZWFwVHVwbGUJaGVhcFR1cDsKKwlGb3JtX3BnX2F0 dHJpYnV0ZSBhdHRUdXA7CisJQXR0ck51bWJlcglhdHRudW07CisJT2JqZWN0QWRkcmVzcyBhZGRy ZXNzOworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBj b2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwK KwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkK KwkJcmV0dXJuOworCisJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKwlBc3Nl cnQoc3ViY21kLT5zdWJ0eXBlID09IEFUX0FsdGVyQ29sdW1uVHlwZSk7CisJQXNzZXJ0KGN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQgIT0gTlVMTCk7CisJQXNzZXJ0KE9p ZElzVmFsaWQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRl clRhYmxlLm9iamVjdElkKSk7CisKKwlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOwor CUFzc2VydChJc0EoZGVmLCBDb2x1bW5EZWYpKTsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBwYWxs b2Moc2l6ZW9mKENvbGxlY3RlZEFUU3ViY21kKSk7CisJbmV3c3ViLT5wYXJzZXRyZWUgPSAoTm9k ZSAqKWNvcHlPYmplY3Qoc3ViY21kKTsKKworCWF0dHJlbGF0aW9uID0gdGFibGVfb3BlbihBdHRy aWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCS8qIExvb2sgdXAgdGhlIHRh cmdldCBjb2x1bW4gKi8KKwloZWFwVHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5QXR0TmFtZShSZWxh dGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGhlYXBUdXApKSAvKiBzaG91bGRuJ3QgaGFwcGVuICovCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ ZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9DT0xVTU4pLAorCQkJCWVycm1zZygiY29sdW1uIFwi JXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkgICBzdWJjbWQt Pm5hbWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKTsKKwlhdHRUdXAgPSAoRm9ybV9w Z19hdHRyaWJ1dGUpIEdFVFNUUlVDVChoZWFwVHVwKTsKKwlhdHRudW0gPSBhdHRUdXAtPmF0dG51 bTsKKworCU9iamVjdEFkZHJlc3NTdWJTZXQoYWRkcmVzcywgUmVsYXRpb25SZWxhdGlvbklkLAor CQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0pOworCWhlYXBfZnJlZXR1cGxlKGhl YXBUdXApOworCXRhYmxlX2Nsb3NlKGF0dHJlbGF0aW9uLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlu ZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCisJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJewor CQljaGFyCSAgICpkZWZleHByOworCisJCWRlZmV4cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29r ZWRfZGVmYXVsdCk7CisJCW5ld3N1Yi0+dXNpbmdleHByID0gVGV4dERhdHVtR2V0Q1N0cmluZyhE aXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkJCQlDU3RyaW5n R2V0VGV4dERhdHVtKGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGlk KHJlbCkpKTsKKwl9CisJZWxzZQorCQluZXdzdWItPnVzaW5nZXhwciA9IE5VTEw7CisKIAljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21k cyA9CiAJCWxhcHBlbmQoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CiAKQEAgLTE1NTksNiArMTgwNCw1NyBAQCBF dmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVjdEFk ZHJlc3MgYWRkcmVzcykKIH0KIAogLyoKKyAqIEV2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZAorICoJ CUZpbmlzaCB1cCBzYXZpbmcgYW4gQUxURVIgVFlQRSBjb21tYW5kLCBhbmQgYWRkIGl0IHRvIGNv bW1hbmQgbGlzdC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5vZGUgKnN1 YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCit7CisJTWVtb3J5Q29u dGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKKwlMaXN0Q2VsbCAgICpj ZWxsOworCUNvbGxlY3RlZENvbW1hbmQgKmNtZDsKKwlBbHRlclRhYmxlQ21kICphbHRzdWJjbWQg PSAoQWx0ZXJUYWJsZUNtZCAqKXN1YmNtZDsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2Vy IGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVu dEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFu ZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCWNtZCA9IGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisKKwlBc3NlcnQoSXNBKHN1YmNtZCwgQWx0ZXJU YWJsZUNtZCkpOworCUFzc2VydChjbWQgIT0gTlVMTCk7CisJQXNzZXJ0KE9pZElzVmFsaWQoY21k LT5kLmFsdGVyVGFibGUub2JqZWN0SWQpKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVy VGFibGUuc3ViY21kcykKKwl7CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVk QVRTdWJjbWQgKikgbGZpcnN0KGNlbGwpOworCQlBbHRlclRhYmxlQ21kICpjb2xsY21kID0gKEFs dGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisKKwkJaWYgKGNvbGxjbWQtPnN1YnR5cGUg PT0gYWx0c3ViY21kLT5zdWJ0eXBlICYmCisJCQlhZGRyZXNzLmNsYXNzSWQgPT0gc3ViLT5hZGRy ZXNzLmNsYXNzSWQgJiYKKwkJCWFkZHJlc3Mub2JqZWN0SWQgPT0gc3ViLT5hZGRyZXNzLm9iamVj dElkICYmCisJCQlhZGRyZXNzLm9iamVjdFN1YklkID09IHN1Yi0+YWRkcmVzcy5vYmplY3RTdWJJ ZCkKKwkJeworCQkJY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSByZXdyaXRlOworCQkJcmV0 dXJuOworCQl9CisJfQorCisJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCW5ld3N1YiA9IHBhbGxvYyhzaXplb2YoQ29sbGVj dGVkQVRTdWJjbWQpKTsKKwluZXdzdWItPmFkZHJlc3MgPSBhZGRyZXNzOworCW5ld3N1Yi0+cGFy c2V0cmVlID0gY29weU9iamVjdChzdWJjbWQpOworCisJY21kLT5kLmFsdGVyVGFibGUucmV3cml0 ZSB8PSByZXdyaXRlOworCWNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPSBsYXBwZW5kKGNtZC0+ ZC5hbHRlclRhYmxlLnN1YmNtZHMsIG5ld3N1Yik7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkY3h0KTsKK30KKworLyoKICAqIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQKICAqCQlGaW5p c2ggdXAgc2F2aW5nIGFuIEFMVEVSIFRBQkxFIGNvbW1hbmQsIGFuZCBhZGQgaXQgdG8gY29tbWFu ZCBsaXN0LgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggZjRi YTU3Mi4uMjNhZGQzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAg LTM4LDEwICszOCwxMiBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgog I2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJu b2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRl ICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUu aCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJzZXIv cGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNs LmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKQEAgLTgyLDIxICs4NCwyNiBAQCBzdGF0aWMg dm9pZCBQdWJsaWNhdGlvbkRyb3BTY2hlbWFzKE9pZCBwdWJpZCwgTGlzdCAqc2NoZW1hcywgYm9v bCBtaXNzaW5nX29rKTsKIHN0YXRpYyB2b2lkCiBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBh cnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSAgTGlzdCAqb3B0aW9ucywKKwkJCQkJCSAgYm9vbCBm b3JfYWxsX3RhYmxlcywKIAkJCQkJCSAgYm9vbCAqcHVibGlzaF9naXZlbiwKIAkJCQkJCSAgUHVi bGljYXRpb25BY3Rpb25zICpwdWJhY3Rpb25zLAogCQkJCQkJICBib29sICpwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCSAgYm9vbCAqcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QpCisJCQkJCQkgIGJvb2wgKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290LAorCQkJCQkJ ICBib29sICpkZGxfdHlwZV9naXZlbikKIHsKIAlMaXN0Q2VsbCAgICpsYzsKIAogCSpwdWJsaXNo X2dpdmVuID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuID0gZmFs c2U7CisJKmRkbF90eXBlX2dpdmVuID0gZmFsc2U7CiAKIAkvKiBkZWZhdWx0cyAqLwogCXB1YmFj dGlvbnMtPnB1Ymluc2VydCA9IHRydWU7CiAJcHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsK IAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRl ID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJkZGxfYWxsID0gZmFsc2U7CisJcHViYWN0aW9ucy0+ cHViZGRsX3RhYmxlID0gZmFsc2U7CiAJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFs c2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICovCkBAIC0xMjMsNyArMTMwLDcgQEAgcGFyc2VfcHVi bGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsCiAJCQlwdWJhY3Rpb25zLT5wdWJ0 cnVuY2F0ZSA9IGZhbHNlOwogCiAJCQkqcHVibGlzaF9naXZlbiA9IHRydWU7Ci0JCQlwdWJsaXNo ID0gZGVmR2V0U3RyaW5nKGRlZmVsKTsKKwkJCXB1Ymxpc2ggPSBwc3RyZHVwKGRlZkdldFN0cmlu ZyhkZWZlbCkpOwogCiAJCQlpZiAoIVNwbGl0SWRlbnRpZmllclN0cmluZyhwdWJsaXNoLCAnLCcs ICZwdWJsaXNoX2xpc3QpKQogCQkJCWVyZXBvcnQoRVJST1IsCkBAIC0xNTgsNiArMTY1LDUyIEBA IHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJKnB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuID0gdHJ1ZTsKIAkJCSpwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCA9IGRlZkdldEJvb2xlYW4oZGVmZWwpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNt cChkZWZlbC0+ZGVmbmFtZSwgImRkbCIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKmRkbF9sZXZl bDsKKwkJCUxpc3QJICAgKmRkbF9saXN0OworCQkJTGlzdENlbGwgICAqbGMzOworCisJCQlpZiAo KmRkbF90eXBlX2dpdmVuKQorCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBwc3Rh dGUpOworCisJCQlpZiAoIWZvcl9hbGxfdGFibGVzKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkgZXJybXNnKCJEREwgcmVw bGljYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgaW4gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24i KSkpOworCQkJLyoKKwkJCSAqIElmIGRkbCBvcHRpb24gd2FzIGdpdmVuIG9ubHkgdGhlIGV4cGxp Y2l0bHkgbGlzdGVkIGRkbCB0eXBlcworCQkJICogc2hvdWxkIGJlIHB1Ymxpc2hlZC4KKwkJCSAq LworCQkJcHViYWN0aW9ucy0+cHViZGRsX2FsbCA9IGZhbHNlOworCQkJcHViYWN0aW9ucy0+cHVi ZGRsX3RhYmxlID0gZmFsc2U7CisKKwkJCSpkZGxfdHlwZV9naXZlbiA9IHRydWU7CisJCQlkZGxf bGV2ZWwgPSBkZWZHZXRTdHJpbmcoZGVmZWwpOworCisJCQlpZiAoIVNwbGl0SWRlbnRpZmllclN0 cmluZyhkZGxfbGV2ZWwsICcsJywgJmRkbF9saXN0KSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJIGVycm1zZygiaW52YWxp ZCBsaXN0IHN5bnRheCBmb3IgXCJkZGxcIiBvcHRpb24iKSkpOworCisJCQkvKiBQcm9jZXNzIHRo ZSBvcHRpb24gbGlzdC4gKi8KKwkJCWZvcmVhY2gobGMzLCBkZGxfbGlzdCkKKwkJCXsKKwkJCQlj aGFyCSAgICpwdWJsaXNoX29wdCA9IChjaGFyICopIGxmaXJzdChsYzMpOworCisJCQkJaWYgKHN0 cmNtcChwdWJsaXNoX29wdCwgImFsbCIpID09IDApCisJCQkJeworCQkJCQlwdWJhY3Rpb25zLT5w dWJkZGxfYWxsID0gdHJ1ZTsKKwkJCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gdHJ1ZTsK KwkJCQl9CisJCQkJZWxzZSBpZiAoc3RyY21wKHB1Ymxpc2hfb3B0LCAidGFibGUiKSA9PSAwKQor CQkJCQlwdWJhY3Rpb25zLT5wdWJkZGxfdGFibGUgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJ CQkJIGVycm1zZygidW5yZWNvZ25pemVkIFwiZGRsXCIgdmFsdWU6IFwiJXNcIiIsIHB1Ymxpc2hf b3B0KSkpOworCQkJfQorCQl9CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKQEAgLTYwMCwxMyArNjUzLDU2IEBAIGNoZWNrX3Np bXBsZV9yb3dmaWx0ZXJfZXhwcihOb2RlICpub2RlLCBQYXJzZVN0YXRlICpwc3RhdGUpCiB9CiAK IC8qCisgKiBIZWxwZXIgZnVuY3Rpb24gdG8gdHJhbmZvcm0gYSB3aGVyZSBjbGF1c2UuCisgKgor ICogQWxzbyBjaGVjayB0aGUgcHVibGljYXRpb24gcm93IGZpbHRlciBleHByZXNzaW9uIGFuZCB0 aHJvdyBhbiBlcnJvciBpZgorICogYW55dGhpbmcgbm90IHBlcm1pdHRlZCBvciB1bmV4cGVjdGVk IGlzIGVuY291bnRlcmVkLgorICovCitzdGF0aWMgTm9kZSAqCitHZXRUcmFuc2Zvcm1XaGVyZUNs YXVzZXMoY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsIFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJ IE5vZGUgKndoZXJlQ2xhdXNlLCBib29sIGNoZWNrX2V4cHIpCit7CisJTm9kZQkgICAqdHJhbnNm b3JtZWRXaGVyZUNsYXVzZSA9IE5VTEw7CisJUGFyc2VOYW1lc3BhY2VJdGVtICpuc2l0ZW07CisJ UGFyc2VTdGF0ZSAqcHN0YXRlOworCisJLyoKKwkgKiBBIGZyZXNoIHBzdGF0ZSBpcyByZXF1aXJl ZCBzbyB0aGF0IHdlIG9ubHkgaGF2ZSAidGhpcyIgdGFibGUgaW4gaXRzCisJICogcmFuZ2V0YWJs ZQorCSAqLworCXBzdGF0ZSA9IG1ha2VfcGFyc2VzdGF0ZShOVUxMKTsKKwlwc3RhdGUtPnBfc291 cmNldGV4dCA9IHF1ZXJ5U3RyaW5nOworCW5zaXRlbSA9IGFkZFJhbmdlVGFibGVFbnRyeUZvclJl bGF0aW9uKHBzdGF0ZSwgcmVsYXRpb24sCisJCQkJCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrLCBO VUxMLAorCQkJCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSk7CisJYWRkTlNJdGVtVG9RdWVyeShwc3Rh dGUsIG5zaXRlbSwgZmFsc2UsIHRydWUsIHRydWUpOworCisJdHJhbnNmb3JtZWRXaGVyZUNsYXVz ZSA9IHRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwKKwkJCQkJCQkJCQkJCSAgY29weU9iamVj dCh3aGVyZUNsYXVzZSksCisJCQkJCQkJCQkJCQkgIEVYUFJfS0lORF9XSEVSRSwKKwkJCQkJCQkJ CQkJCSAgIlBVQkxJQ0FUSU9OIFdIRVJFIik7CisKKwkvKiBGaXggdXAgY29sbGF0aW9uIGluZm9y bWF0aW9uICovCisJYXNzaWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIHRyYW5zZm9ybWVkV2hl cmVDbGF1c2UpOworCisJLyoKKwkgKiBXZSBhbGxvdyBvbmx5IHNpbXBsZSBleHByZXNzaW9ucyBp biByb3cgZmlsdGVycy4gU2VlCisJICogY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHByX3dhbGtl ci4KKwkgKi8KKwlpZiAoY2hlY2tfZXhwcikKKwkJY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHBy KHRyYW5zZm9ybWVkV2hlcmVDbGF1c2UsIHBzdGF0ZSk7CisKKwlmcmVlX3BhcnNlc3RhdGUocHN0 YXRlKTsKKworCXJldHVybiB0cmFuc2Zvcm1lZFdoZXJlQ2xhdXNlOworfQorCisvKgogICogVHJh bnNmb3JtIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9uIGZvciBhbGwgdGhlIHJlbGF0 aW9ucyBpbiB0aGUgbGlzdCwKICAqIGVuc3VyaW5nIGl0IGlzIGNvZXJjZWQgdG8gYm9vbGVhbiBh bmQgbmVjZXNzYXJ5IGNvbGxhdGlvbiBpbmZvcm1hdGlvbiBpcwogICogYWRkZWQgaWYgcmVxdWly ZWQsIGFuZCBhZGQgYSBuZXcgbnNpdGVtL1JURSBmb3IgdGhlIGFzc29jaWF0ZWQgcmVsYXRpb24g dG8KICAqIHRoZSBQYXJzZVN0YXRlJ3MgbmFtZXNwYWNlIGxpc3QuCiAgKgotICogQWxzbyBjaGVj ayB0aGUgcHVibGljYXRpb24gcm93IGZpbHRlciBleHByZXNzaW9uIGFuZCB0aHJvdyBhbiBlcnJv ciBpZgotICogYW55dGhpbmcgbm90IHBlcm1pdHRlZCBvciB1bmV4cGVjdGVkIGlzIGVuY291bnRl cmVkLgogICovCiBzdGF0aWMgdm9pZAogVHJhbnNmb3JtUHViV2hlcmVDbGF1c2VzKExpc3QgKnRh YmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCkBAIC02MTYsOSArNzEyLDcgQEAgVHJhbnNm b3JtUHViV2hlcmVDbGF1c2VzKExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcs CiAKIAlmb3JlYWNoKGxjLCB0YWJsZXMpCiAJewotCQlQYXJzZU5hbWVzcGFjZUl0ZW0gKm5zaXRl bTsKLQkJTm9kZQkgICAqd2hlcmVjbGF1c2UgPSBOVUxMOwotCQlQYXJzZVN0YXRlICpwc3RhdGU7 CisKIAkJUHVibGljYXRpb25SZWxJbmZvICpwcmkgPSAoUHVibGljYXRpb25SZWxJbmZvICopIGxm aXJzdChsYyk7CiAKIAkJaWYgKHByaS0+d2hlcmVDbGF1c2UgPT0gTlVMTCkKQEAgLTYzOCwzOCAr NzMyLDExIEBAIFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNvbnN0IGNo YXIgKnF1ZXJ5U3RyaW5nLAogCQkJCQkgZXJyZGV0YWlsKCJXSEVSRSBjbGF1c2UgY2Fubm90IGJl IHVzZWQgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgd2hlbiAlcyBpcyBmYWxzZS4iLAogCQkJCQkJ CSAgICJwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCIpKSk7CiAKLQkJLyoKLQkJICogQSBmcmVz aCBwc3RhdGUgaXMgcmVxdWlyZWQgc28gdGhhdCB3ZSBvbmx5IGhhdmUgInRoaXMiIHRhYmxlIGlu IGl0cwotCQkgKiByYW5nZXRhYmxlCi0JCSAqLwotCQlwc3RhdGUgPSBtYWtlX3BhcnNlc3RhdGUo TlVMTCk7Ci0JCXBzdGF0ZS0+cF9zb3VyY2V0ZXh0ID0gcXVlcnlTdHJpbmc7Ci0JCW5zaXRlbSA9 IGFkZFJhbmdlVGFibGVFbnRyeUZvclJlbGF0aW9uKHBzdGF0ZSwgcHJpLT5yZWxhdGlvbiwKLQkJ CQkJCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrLCBOVUxMLAotCQkJCQkJCQkJCQkgICBmYWxzZSwg ZmFsc2UpOwotCQlhZGROU0l0ZW1Ub1F1ZXJ5KHBzdGF0ZSwgbnNpdGVtLCBmYWxzZSwgdHJ1ZSwg dHJ1ZSk7Ci0KLQkJd2hlcmVjbGF1c2UgPSB0cmFuc2Zvcm1XaGVyZUNsYXVzZShwc3RhdGUsCi0J CQkJCQkJCQkJICAgY29weU9iamVjdChwcmktPndoZXJlQ2xhdXNlKSwKLQkJCQkJCQkJCQkgICBF WFBSX0tJTkRfV0hFUkUsCi0JCQkJCQkJCQkJICAgIlBVQkxJQ0FUSU9OIFdIRVJFIik7Ci0KLQkJ LyogRml4IHVwIGNvbGxhdGlvbiBpbmZvcm1hdGlvbiAqLwotCQlhc3NpZ25fZXhwcl9jb2xsYXRp b25zKHBzdGF0ZSwgd2hlcmVjbGF1c2UpOwotCi0JCS8qCi0JCSAqIFdlIGFsbG93IG9ubHkgc2lt cGxlIGV4cHJlc3Npb25zIGluIHJvdyBmaWx0ZXJzLiBTZWUKLQkJICogY2hlY2tfc2ltcGxlX3Jv d2ZpbHRlcl9leHByX3dhbGtlci4KLQkJICovCi0JCWNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhw cih3aGVyZWNsYXVzZSwgcHN0YXRlKTsKLQotCQlmcmVlX3BhcnNlc3RhdGUocHN0YXRlKTsKLQot CQlwcmktPndoZXJlQ2xhdXNlID0gd2hlcmVjbGF1c2U7CisJCXByaS0+d2hlcmVDbGF1c2UgPSBH ZXRUcmFuc2Zvcm1XaGVyZUNsYXVzZXMocXVlcnlTdHJpbmcsIHByaS0+cmVsYXRpb24sCisJCQkJ CQkJCQkJCQkJcHJpLT53aGVyZUNsYXVzZSwgdHJ1ZSk7CiAJfQogfQogCi0KIC8qCiAgKiBHaXZl biBhIGxpc3Qgb2YgdGFibGVzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGFkZGVkIHRvIGEgcHVibGlj YXRpb24sCiAgKiB2ZXJpZnkgdGhhdCB0aGV5IGZ1bGZpbGwgdGhlIG5lY2Vzc2FyeSBwcmVjb25k aXRpb25zLCBuYW1lbHk6IG5vIHRhYmxlcwpAQCAtNzI5LDYgKzc5Niw1MiBAQCBDaGVja1B1YlJl bGF0aW9uQ29sdW1uTGlzdChjaGFyICpwdWJuYW1lLCBMaXN0ICp0YWJsZXMsCiB9CiAKIC8qCisg KiBDcmVhdGUgZXZlbnQgdHJpZ2dlciB3aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRpb24u CisgKi8KK3N0YXRpYyB2b2lkCitDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2 ZW50bmFtZSwgQ29tbWFuZFRhZyAqY29tbWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMsIE9i amVjdEFkZHJlc3MgcHViYWRkcmVzcywKKwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQlp OworCUxpc3QJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRy ZXNzIHJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRUcmlnU3RtdCAqZGRsX3RyaWdnZXI7CisJY2hh cgkJdHJpZ2dlcl9uYW1lW05BTUVEQVRBTEVOXTsKKwljaGFyCQl0cmlnZ2VyX2Z1bmNfbmFtZVtO QU1FREFUQUxFTl07CisJc3RhdGljIGNvbnN0IGNoYXIgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAi cHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0 ZUV2ZW50VHJpZ1N0bXQpOworCisJc25wcmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dl cl9uYW1lKSwgUFVCX0VWRU5UX1RSSUdfUFJFRklYLAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsK KwlzbnByaW50Zih0cmlnZ2VyX2Z1bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwg dHJpZ2dlcl9mdW5jX3ByZWZpeCwKKwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRy aWduYW1lID0gcHN0cmR1cCh0cmlnZ2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUg PSBldmVudG5hbWU7CisJZGRsX3RyaWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJp Z2dlcl9mdW5jX25hbWUpOworCisJZm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsK KwkJU3RyaW5nCSAgICp0YWcgPSBtYWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUo Y29tbWFuZHNbaV0pKSk7CisKKwkJdGFncyA9IGxhcHBlbmQodGFncywgdGFnKTsKKwl9CisKKwlk ZGxfdHJpZ2dlci0+d2hlbmNsYXVzZSA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oInRhZyIsIChO b2RlICopIHRhZ3MsIC0xKSk7CisKKwl0cmlnZ2VyX2lkID0gQ3JlYXRlRXZlbnRUcmlnZ2VyKGRk bF90cmlnZ2VyKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIGV2ZW50IHRyaWdnZXJzIGFzIGlu dGVybmFsbHkgZGVwZW5kZW50IG9uIHRoZSBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRy ZXNzU2V0KHJlZmVyZW5jZWQsIEV2ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOwor CXJlY29yZERlcGVuZGVuY3lPbigmcmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lf SU5URVJOQUwpOworfQorCisvKgogICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwogT2Jq ZWN0QWRkcmVzcwpAQCAtNzQxLDYgKzg1NCw3IEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCURhdHVtCQl2YWx1ZXNb TmF0dHNfcGdfcHVibGljYXRpb25dOwogCUhlYXBUdXBsZQl0dXA7CiAJYm9vbAkJcHVibGlzaF9n aXZlbjsKKwlib29sCQlkZGxfdHlwZV9naXZlbjsKIAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0 aW9uczsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbjsKIAlib29sCQlw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDsKQEAgLTc4MSw5ICs4OTUsMTEgQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAKIAlwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKHBzdGF0ZSwKIAkJCQkJCQkgIHN0bXQtPm9w dGlvbnMsCisJCQkJCQkJICBzdG10LT5mb3JfYWxsX3RhYmxlcywKIAkJCQkJCQkgICZwdWJsaXNo X2dpdmVuLCAmcHViYWN0aW9ucywKIAkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dF9naXZlbiwKLQkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisJCQkJCQkJ ICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJCQkJICAmZGRsX3R5cGVfZ2l2ZW4p OwogCiAJcHVib2lkID0gR2V0TmV3T2lkV2l0aEluZGV4KHJlbCwgUHVibGljYXRpb25PYmplY3RJ bmRleElkLAogCQkJCQkJCQlBbnVtX3BnX3B1YmxpY2F0aW9uX29pZCk7CkBAIC03OTgsNiArOTE0 LDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGlj YXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZWxldGUpOwog CXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPQogCQlCb29sR2V0 RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRp b25fcHViZGRsX2FsbCAtIDFdID0KKwkJQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHViZGRsX2Fs bCk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsX3RhYmxlIC0gMV0gPQorCUJv b2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbF90YWJsZSk7CiAJdmFsdWVzW0FudW1fcGdfcHVi bGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290KTsKIApAQCAtODU4LDYgKzk3OCw1MCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQ YXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJfQogCX0K IAorCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9nZ2luZyBvZiBE REwgc3RhdGVtZW50cy4KKwkgKgorCSAqLworCWlmIChwdWJhY3Rpb25zLnB1YmRkbF90YWJsZSB8 fCBwdWJhY3Rpb25zLnB1YmRkbF9hbGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRz W10gPSB7Q01EVEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNb XSA9IHtDTURUQUdfQUxURVJfVEFCTEV9OworCQlDb21tYW5kVGFnCWluaXRfY29tbWFuZHNbXSA9 IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlDTURUQUdfU0VMRUNUX0lOVE8KKwkJ fTsKKwkJaW50IG5jb21tYW5kcyA9IDA7CisJCUNvbW1hbmRUYWcgKmVuZF9jb21tYW5kcyA9IE5V TEw7CisKKwkJaWYgKHB1YmFjdGlvbnMucHViZGRsX2FsbCkKKwkJCWVuZF9jb21tYW5kcyA9IEdl dENvbW1hbmRUYWdzRm9yRERMUmVwbCgmbmNvbW1hbmRzKTsKKwkJZWxzZSBpZiAocHViYWN0aW9u cy5wdWJkZGxfdGFibGUpCisJCXsKKwkJCW5jb21tYW5kcyA9IDM7CisJCQllbmRfY29tbWFuZHMg PSBwYWxsb2MwKG5jb21tYW5kcyAqIHNpemVvZihDb21tYW5kVGFnKSk7CisJCQllbmRfY29tbWFu ZHNbMF0gPSBDTURUQUdfQ1JFQVRFX1RBQkxFOworCQkJZW5kX2NvbW1hbmRzWzFdID0gQ01EVEFH X0FMVEVSX1RBQkxFOworCQkJZW5kX2NvbW1hbmRzWzJdID0gQ01EVEFHX0RST1BfVEFCTEU7CisJ CX0KKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICovCisJ CUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoUFVCX1RSSUdfRVZFTlQxLCBlbmRfY29tbWFu ZHMsCisJCQkJCQkJCQkgbmNvbW1hbmRzLCBteXNlbGYsIHB1Ym9pZCk7CisJCXBmcmVlKGVuZF9j b21tYW5kcyk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29tbWFuZF9zdGFydCBldmVudCB0cmln Z2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoUFVCX1RSSUdfRVZFTlQyLCBz dGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2Vs ZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dl ciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKFBVQl9UUklHX0VWRU5UMywgcmV3 cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlz ZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfaW5pdF93cml0ZSBldmVudCB0 cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoUFVCX1RSSUdfRVZFTlQ0 LCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNl bGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsK IAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHVi b2lkLCAwKTsKQEAgLTg4Miw2ICsxMDQ2LDcgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFy c2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAlib29sCQlyZXBs YWNlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl07CiAJRGF0dW0JCXZhbHVlc1tOYXR0c19wZ19wdWJs aWNhdGlvbl07CiAJYm9vbAkJcHVibGlzaF9naXZlbjsKKwlib29sCQlkZGxfdHlwZV9naXZlbjsK IAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdF9naXZlbjsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDsKQEAg LTg5MCwxMSArMTA1NSwxNSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCUxpc3QJICAgKnJvb3RfcmVsaWRz ID0gTklMOwogCUxpc3RDZWxsICAgKmxjOwogCisJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0 aW9uKSBHRVRTVFJVQ1QodHVwKTsKKwogCXBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMocHN0YXRl LAogCQkJCQkJCSAgc3RtdC0+b3B0aW9ucywKKwkJCQkJCQkgIHB1YmZvcm0tPnB1YmFsbHRhYmxl cywKIAkJCQkJCQkgICZwdWJsaXNoX2dpdmVuLCAmcHViYWN0aW9ucywKIAkJCQkJCQkgICZwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCk7CisJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJ CQkJICAmZGRsX3R5cGVfZ2l2ZW4pOwogCiAJcHViZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9u KSBHRVRTVFJVQ1QodHVwKTsKIApAQCAtOTk2LDYgKzExNjUsMTIgQEAgQWx0ZXJQdWJsaWNhdGlv bk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwK IAogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gQm9vbEdl dERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBsYWNlc1tBbnVtX3BnX3B1Ymxp Y2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZhbHVlc1tBbnVtX3BnX3B1Ymxp Y2F0aW9uX3B1YmRkbF9hbGwgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbF9h bGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF9hbGwgLSAxXSA9IHRy dWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsX3RhYmxlIC0gMV0gPSBC b29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfdGFibGUpOworCQlyZXBsYWNlc1tBbnVtX3Bn X3B1YmxpY2F0aW9uX3B1YmRkbF90YWJsZSAtIDFdID0gdHJ1ZTsKIAl9CiAKIAlpZiAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4 IDNhOTNjNDEuLjg1YzgxNmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC00NjgyLDYg KzQ2ODIsOSBAQCBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRh YmxlQ21kICpjbWQsCiAJCQljbWQgPSBBVFBhcnNlVHJhbnNmb3JtQ21kKHdxdWV1ZSwgdGFiLCBy ZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUsCiAJCQkJCQkJCQkgIEFUX1BBU1NfVU5TRVQsIGNv bnRleHQpOwogCQkJQXNzZXJ0KGNtZCAhPSBOVUxMKTsKKworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJU eXBlU3RhcnQoY21kLCByZWwpOworCiAJCQkvKiBQZXJmb3JtcyBvd24gcmVjdXJzaW9uICovCiAJ CQlBVFByZXBBbHRlckNvbHVtblR5cGUod3F1ZXVlLCB0YWIsIHJlbCwgcmVjdXJzZSwgcmVjdXJz aW5nLCBjbWQsCiAJCQkJCQkJCSAgbG9ja21vZGUsIGNvbnRleHQpOwpAQCAtNDk1Myw2ICs0OTU2 LDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIHsK IAlPYmplY3RBZGRyZXNzIGFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKIAlSZWxhdGlv bglyZWwgPSB0YWItPnJlbDsKKwlib29sCQljb21tYW5kQ29sbGVjdGVkID0gZmFsc2U7CiAKIAlz d2l0Y2ggKGNtZC0+c3VidHlwZSkKIAl7CkBAIC01MDc2LDYgKzUwODAsOCBAQCBBVEV4ZWNDbWQo TGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQljYXNlIEFUX0FsdGVyQ29s dW1uVHlwZToJLyogQUxURVIgQ09MVU1OIFRZUEUgKi8KIAkJCS8qIHBhcnNlIHRyYW5zZm9ybWF0 aW9uIHdhcyBkb25lIGVhcmxpZXIgKi8KIAkJCWFkZHJlc3MgPSBBVEV4ZWNBbHRlckNvbHVtblR5 cGUodGFiLCByZWwsIGNtZCwgbG9ja21vZGUpOworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5k KChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5yZXdyaXRlKTsKKwkJCWNvbW1hbmRDb2xsZWN0 ZWQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9u czoJLyogQUxURVIgQ09MVU1OIE9QVElPTlMgKi8KIAkJCWFkZHJlc3MgPQpAQCAtNTI0OCw4ICs1 MjU0LDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwK IAkvKgogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFuZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdn ZXJzLgogCSAqLwotCWlmIChjbWQpCi0JCUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3Vi Y21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJaWYgKGNtZCAmJiAhY29tbWFuZENvbGxlY3Rl ZCkKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBh ZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoKIAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50 ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jIGIvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBmOTIxOGY0Li44YjUzYjQzIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV91dGlsY21kLmMKQEAgLTEzOTIsNiArMTM5Miw3IEBAIGV4cGFuZFRhYmxlTGlrZUNs YXVzZShSYW5nZVZhciAqaGVhcFJlbCwgVGFibGVMaWtlQ2xhdXNlICp0YWJsZV9saWtlX2NsYXVz ZSkKIAkJYXRjbWQtPmNtZHMgPSBhdHN1YmNtZHM7CiAJCWF0Y21kLT5vYmp0eXBlID0gT0JKRUNU X1RBQkxFOwogCQlhdGNtZC0+bWlzc2luZ19vayA9IGZhbHNlOworCQlhdGNtZC0+dGFibGVfbGlr ZSA9IHRydWU7CiAJCXJlc3VsdCA9IGxjb25zKGF0Y21kLCByZXN1bHQpOwogCX0KIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggZDM2ODBlOS4uYjc5ZGRkOCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3 IEBAIG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiBPQkpTID0g XAogCWFwcGx5cGFyYWxsZWx3b3JrZXIubyBcCiAJZGRsbWVzc2FnZS5vIFwKKwlkZGx0cmlnZ2Vy Lm8gXAogCWRlY29kZS5vIFwKIAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi5kNjhhNTA3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbHRyaWdnZXIuYworICoJICBMb2dpY2FsIERETCBtZXNz YWdlcy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKKyAqCisgKiBOT1RFUworICoKKyAqIERlcGFy c2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUu aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3Qu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAidGNvcC9k ZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNsdWRlICJ1 dGlscy9sc3lzY2FjaGUuaCIKKworZXh0ZXJuIEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKmN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZTsKKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFu ZCBsb2cgaXQgcHJpb3IgdG8KKyAqIGV4ZWN1dGlvbi4gQ3VycmVudGx5IG9ubHkgdXNlZCBmb3Ig RFJPUCBUQUJMRSBjb21tYW5kCisgKiBzbyB0aGF0IGNhdGFsb2cgY2FuIGJlIGFjY2Vzc2VkIGJl Zm9yZSBiZWluZyBkZWxldGVkLgorICogVGhpcyBpcyB0byBjaGVjayBpZiB0aGUgdGFibGUgaXMg cGFydCBvZiB0aGUgcHVibGljYXRpb24KKyAqIG9yIG5vdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0 aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVu dFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCSAgICpjb21tYW5kID0gcHNwcmludGYoIkRy b3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BTdG10ICAgKnN0bXQ7CisJTGlzdENlbGwg ICAqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVs b2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmln ZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10ID0gKERy b3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkvKiBFeHRyYWN0IHRoZSByZWxpZCBm cm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7 CisJCWNoYXIJCXJlbHBlcnNpc3Q7CisJCU5vZGUJICAgKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7 CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOwor CisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJ CQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJLyogT2JqZWN0IGRvZXMgbm90IGV4aXN0 LCBub3RoaW5nIHRvIGRvICovCisJCWlmICghcmVsYXRpb24pCisJCQljb250aW51ZTsKKworCQly ZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkv KgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0 IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdl bmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkg KiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJl ciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0 aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNz YWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lz dCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJCSBjb21t YW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJsZV9j bG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoKKyAq IERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLwor RGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9BUkdT KQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCWNoYXIJ ICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8p KQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOwor CisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFz c2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJzaXN0ID0g Z2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwkvKgor CSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFi bGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUg d2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAq IGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4g VGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExP R0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91 dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJT SVNURU5DRV9URU1QKQorCXsKKwkJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBs b2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJCWpzb25fc3RyaW5nID0g ZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5n ICE9IE5VTEwpCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRl clRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkJIGpzb25fc3RyaW5nLCBz dHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuIFRo aXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjb21t YW5kIGJ1dCBiZWZvcmUgdGhlCisgKiB0cmFuc2FjdGlvbiBjb21taXRzLgorICovCitEYXR1bQor cHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlzdF9pdGVyCWl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlw ZSB0eXBlOworCU9pZAkJCXJlbGlkOworCWNoYXIJCXJlbGtpbmQ7CisKKwlpZiAoIUNBTExFRF9B U19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZl bnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmNvbW1hbmRMaXN0KQorCXsKKwkJY2hhcgkJcmVscGVyc2lzdCA9IFJFTFBFUlNJU1RF TkNFX1BFUk1BTkVOVDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gbGZpcnN0KGxjKTsKKwkJ Y2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwkJLyogUmV3cml0ZSBEREwgaGFzIGJlZW4gaGFuZGxl ZCBpbiB0YWJsZV9yZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+ZC5hbHRlclRhYmxlLnJl d3JpdGUpCisJCXsKKwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0bXQgPSAoUmVuYW1lU3RtdCAqKSBj bWQtPnBhcnNldHJlZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3RtdC0+cmVsYXRp b25UeXBlICE9IE9CSkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRpb25UeXBlICE9 IE9CSkVDVF9UQUJMRSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQtPnR5cGUgPT0g U0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVj dElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUp CisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0eXBlID0g RENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9TaW1wbGUg Zm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJ CQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtp bmQocmVsaWQpOworCQlpZiAocmVsa2luZCkKKwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNp c3RlbmNlKHJlbGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3Ig Y29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgor CQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMg c28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0 ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxl IHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICog aW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJ CSAqLworCQlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQkv KgorCQkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cg ZGVjb2Rpbmcgb2YgdGhlCisJCQkgKiBzYW1lLgorCQkJICovCisJCQlqc29uX3N0cmluZyA9IGRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCQlpZiAoanNvbl9zdHJpbmcg IT0gTlVMTCkKKwkJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBl LCBqc29uX3N0cmluZywKKwkJCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJCX0K Kwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5T UUxEcm9wTGlzdCkpCisJeworCQlTUUxEcm9wT2JqZWN0ICpvYmo7CisJCURyb3BTdG10ICAgKnN0 bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCQljaGFyCSAgICpjb21tYW5kOwor CQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CisJCWNvbnN0IGNoYXIgKnRtcHR5cGU7CisJ CU9iamVjdENsYXNzCW9iamNsYXNzOworCQlPYmplY3RBZGRyZXNzIG9iamFkZHI7CisKKwkJdHJp Z2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQgPSAo RHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWlu ZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwgaXRlci5jdXIpOworCQlvYmphZGRyID0gb2JqLT5hZGRy ZXNzOworCQlvYmpjbGFzcyA9IGdldE9iamVjdENsYXNzKCZvYmphZGRyKTsKKworCQlpZiAoc3Ry Y21wKG9iai0+b2JqZWN0dHlwZSwgInRhYmxlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfVGFi bGVEcm9wRW5kOworCQllbHNlIGlmIChvYmpjbGFzcyA9PSBPQ0xBU1NfU0NIRU1BIHx8CisJCQkJ IG9iamNsYXNzID09IE9DTEFTU19PUEVSQVRPUiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1Nf T1BDTEFTUyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BGQU1JTFkgfHwKKwkJCQkgb2Jq Y2xhc3MgPT0gT0NMQVNTX0NBU1QgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RZUEUgfHwK KwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RSSUdHRVIgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX0NPTlZFUlNJT04gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1BPTElDWSB8fAorCQkJ CSBvYmpjbGFzcyA9PSBPQ0xBU1NfUkVXUklURSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1Nf RVhURU5TSU9OIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19GRFcgfHwKKwkJCQkgb2JqY2xh c3MgPT0gT0NMQVNTX1RTQ09ORklHIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU0RJQ1Qg fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RTVEVNUExBVEUgfHwKKwkJCQkgb2JqY2xhc3Mg PT0gT0NMQVNTX1RTUEFSU0VSIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UUkFOU0ZPUk0g fHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0ZPUkVJR05fU0VSVkVSIHx8CisJCQkJIG9iamNs YXNzID09IE9DTEFTU19DT0xMQVRJT04gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1VTRVJf TUFQUElORyB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfTEFOR1VBR0UgfHwKKwkJCQkgb2Jq Y2xhc3MgPT0gT0NMQVNTX1NUQVRJU1RJQ19FWFQgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNT X0FNIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19QVUJMSUNBVElPTiB8fAorCQkJCSBvYmpj bGFzcyA9PSBPQ0xBU1NfUFVCTElDQVRJT05fUkVMIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFT U19QVUJMSUNBVElPTl9OQU1FU1BBQ0UgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg ImZvcmVpZ24gdGFibGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJp bmRleCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikg PT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidmlldyIpID09IDAgfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJj bXAob2JqLT5vYmplY3R0eXBlLCAibWF0ZXJpYWxpemVkIHZpZXciKSA9PSAwIHx8CisJCQkJIHN0 cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJyb3V0aW5lIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAiYWdncmVnYXRlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsK KwkJZWxzZQorCQkJY29udGludWU7CisKKwkJLyogQ2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVy IHRvIGZvcmVpZ24gZGF0YSB3cmFwcGVyICovCisJCWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlw ZSwgImZvcmVpZ24tZGF0YSB3cmFwcGVyIiwgMjApID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBw c3RyZHVwKCJmb3JlaWduIGRhdGEgd3JhcHBlciIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJv cF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+ YmVoYXZpb3IpOworCQl9CisKKwkJLyogQ2hhbmdlIHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRp c3RpY3MgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNz IG9iamVjdCIsCisJCQkJCQkgc3RybGVuKCJzdGF0aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7 CisJCQl0bXB0eXBlID0gcHN0cmR1cCgic3RhdGlzdGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFy c2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAg c3RtdC0+YmVoYXZpb3IpOworCQl9CisKKwkJLyoKKwkJICogT2JqZWN0IGlkZW50aXR5IG5lZWRz IHRvIGJlIG1vZGlmaWVkIHRvIG1ha2UgdGhlIGRyb3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8 cm9sZT4gb24gc2VydmVyIDxzZXJ2ZXJuYW1lPiBUTyAgOiBmb3IgPHJvbGU+IHNlcnZlcgorCQkg KiA8c2VydmVybmFtZT4KKwkJICoKKwkJICovCisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmpl Y3R0eXBlLCAidXNlciBtYXBwaW5nIiwgMTIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3Nl cnZlcjsKKworCQkJdG1wdHlwZSA9IHBhbGxvYyhzdHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAy KTsKKwkJCW9uX3NlcnZlciA9IHN0cnN0cihvYmotPm9iamlkZW50aXR5LCAib24gc2VydmVyIik7 CisKKwkJCXNwcmludGYoKGNoYXIgKikgdG1wdHlwZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNo YXIgKikgdG1wdHlwZSwgb2JqLT5vYmppZGVudGl0eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVu dGl0eSk7CisJCQlzdHJjYXQoKGNoYXIgKikgdG1wdHlwZSwgb25fc2VydmVyICsgMyk7CisJCQlj b21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQodG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAor CQkJCQkJCQkJCSAgIHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCQllbHNlIGlmIChzdHJuY21wKG9i ai0+b2JqZWN0dHlwZSwgInB1YmxpY2F0aW9uIG5hbWVzcGFjZSIsCisJCQkJCQkgc3RybGVuKCJw dWJsaWNhdGlvbiBuYW1lc3BhY2UiKSkgPT0gMCB8fAorCQkJCSBzdHJuY21wKG9iai0+b2JqZWN0 dHlwZSwgInB1YmxpY2F0aW9uIHJlbGF0aW9uIiwKKwkJCQkJCSBzdHJsZW4oInB1YmxpY2F0aW9u IHJlbGF0aW9uIikpID09IDApCisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9u RHJvcFN0bXQob2JqKTsKKwkJZWxzZQorCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5k KG9iai0+b2JqaWRlbnRpdHksIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5i ZWhhdmlvcik7CisKKwkJaWYgKGNvbW1hbmQpCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVw YXJzZSIsIG9iai0+YWRkcmVzcy5vYmplY3RJZCwgY21kdHlwZSwKKwkJCQkJCQkJIGNvbW1hbmQs IHN0cmxlbihjb21tYW5kKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVM TCk7Cit9CisKKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQor ICoKKyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0Lgor ICovCitEYXR1bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJY2hhcgkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7 CisJY2hhcgkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VS KGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5h Z2VyIik7CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k OworCUFzc2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21k LT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRl IHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQor CSAqIHRhYmxlLgorCSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dn ZWQgdGFibGVzIHNvIHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRl ZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICog cG9zc2libGUgdG8gZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRo ZSBpbmNvbWluZworCSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRh YmxlLgorCSAqLworCWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJl dHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFu ZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29u X3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpz b25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21k LT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29u X3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXRE YXR1bShOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvbG9naWNhbC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMK aW5kZXggMzllNjg2MS4uZjU2YTcxNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9sb2dpY2FsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9sb2dpY2FsLmMKQEAgLTk1LDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBz dGF0aWMgdm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9s c24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBT aXplIG1lc3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJl YW1fZGRsX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKKwkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29u c3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5 cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogc3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1 ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVs YXRpb25zLCBSZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdl KTsKIApAQCAtMjQ1LDYgKzI1MCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0 cHV0X3BsdWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAh PSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8 fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0 eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tz LnN0cmVhbV90cnVuY2F0ZV9jYiAhPSBOVUxMKTsKIAogCS8qCkBAIC0yNjIsNiArMjY4LDcgQEAg U3RhcnR1cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4 LT5yZW9yZGVyLT5zdHJlYW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0 eC0+cmVvcmRlci0+c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAlj dHgtPnJlb3JkZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsK KwljdHgtPnJlb3JkZXItPnN0cmVhbV9kZGwgPSBzdHJlYW1fZGRsX2NiX3dyYXBwZXI7CiAJY3R4 LT5yZW9yZGVyLT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsK IAogCkBAIC0xNTkzLDYgKzE2MDAsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9y ZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiBzdGF0aWMgdm9p ZAorc3RyZWFtX2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJIGNv bnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUs CisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdl KQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2YXRlX2RhdGE7 CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRleHRDYWxsYmFj ayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOworCisJLyogV2Un cmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMgc3VwcG9ydGVk LiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlzIG9w dGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgPT0gTlVMTCkKKwkJ cmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQg c3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJzdHJl YW1fZGRsIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxs YmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJh Y2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJ Lyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4 LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9u SWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFj dHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbF9j YihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJCQkJY21kdHlw ZSwgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBz dGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30K Kworc3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIg KmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJlbGF0aW9ucywg UmVsYXRpb24gcmVsYXRpb25zW10sCiAJCQkJCQkgICBSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFu Z2UpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1 aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAppbmRleCA5 OWM2MDhkLi4wNWU3NzU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVz b24uYnVpbGQKQEAgLTMsNiArMyw3IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdh cHBseXBhcmFsbGVsd29ya2VyLmMnLAogICAnZGRsbWVzc2FnZS5jJywKKyAgJ2RkbHRyaWdnZXIu YycsCiAgICdkZWNvZGUuYycsCiAgICdsYXVuY2hlci5jJywKICAgJ2xvZ2ljYWwuYycsCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggM2E5ZDUzYS4uZGU4NzRjMiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwpAQCAtNjY0LDYgKzY2NCw0 NyBAQCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9u SWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIH0KIAogLyoKKyAqIFJlYWQgRERMIE1FU1NBR0UgZnJv bSBzdHJlYW0KKyAqLworY2hhciAqCitsb2dpY2FscmVwX3JlYWRfZGRsKFN0cmluZ0luZm8gaW4s IFhMb2dSZWNQdHIgKmxzbiwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKipwcmVmaXgsCisJCQkJCQkg ICBTaXplICpzeikKK3sKKwl1aW50OCBmbGFnczsKKwljaGFyICptc2c7CisKKwlmbGFncyA9IHBx X2dldG1zZ2ludChpbiwgMSk7CisJaWYgKGZsYWdzICE9IDApCisJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgZmxhZ3MgJXUgaW4gZGRsIG1lc3NhZ2UiLCBmbGFncyk7CisKKwkqbHNuID0gcHFf Z2V0bXNnaW50NjQoaW4pOworCSpwcmVmaXggPSBwcV9nZXRtc2dzdHJpbmcoaW4pOworCSpzeiA9 IHBxX2dldG1zZ2ludChpbiwgNCk7CisJbXNnID0gKGNoYXIgKikgcHFfZ2V0bXNnYnl0ZXMoaW4s ICpzeik7CisKKwlyZXR1cm4gbXNnOworfQorCisvKgorICogV3JpdGUgRERMIE1FU1NBR0UgdG8g c3RyZWFtCisgKi8KK3ZvaWQKK2xvZ2ljYWxyZXBfd3JpdGVfZGRsKFN0cmluZ0luZm8gb3V0LCBY TG9nUmVjUHRyIGxzbiwKKwkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpCit7CisJdWludDgJCWZsYWdzID0gMDsKKworCXBxX3NlbmRieXRlKG91 dCwgTE9HSUNBTF9SRVBfTVNHX0RETCk7CisKKwlwcV9zZW5kaW50OChvdXQsIGZsYWdzKTsKKwlw cV9zZW5kaW50NjQob3V0LCBsc24pOworCXBxX3NlbmRzdHJpbmcob3V0LCBwcmVmaXgpOworCXBx X3NlbmRpbnQzMihvdXQsIHN6KTsKKwlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7Cit9 CisKKy8qCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVh bS4KICAqLwogdm9pZApAQCAtMTI0NCw2ICsxMjg1LDggQEAgbG9naWNhbHJlcF9tZXNzYWdlX3R5 cGUoTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uKQogCQkJcmV0dXJuICJUWVBFIjsKIAkJY2FzZSBM T0dJQ0FMX1JFUF9NU0dfTUVTU0FHRToKIAkJCXJldHVybiAiTUVTU0FHRSI7CisJCWNhc2UgTE9H SUNBTF9SRVBfTVNHX0RETDoKKwkJCXJldHVybiAiRERMIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9N U0dfQkVHSU5fUFJFUEFSRToKIAkJCXJldHVybiAiQkVHSU4gUFJFUEFSRSI7CiAJCWNhc2UgTE9H SUNBTF9SRVBfTVNHX1BSRVBBUkU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcmVvcmRlcmJ1ZmZlci5jCmluZGV4IDgxMTczOWIuLjAzYTM0ODQgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC0yMDUyLDEyICsy MDUyLDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZAogUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2Fn ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCSBSZW9y ZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UsIGJvb2wgc3RyZWFtaW5nKQogewotCXJiLT5kZGwocmIs IHR4biwgY2hhbmdlLT5sc24sCi0JCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwKLQkJCWNoYW5n ZS0+ZGF0YS5kZGwucmVsaWQsCi0JCQljaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCi0JCQljaGFu Z2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwKLQkJCWNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZSk7 CisJaWYgKHN0cmVhbWluZykKKwkJcmItPnN0cmVhbV9kZGwocmIsIHR4biwgY2hhbmdlLT5sc24s CisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGwucmVsaWQsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCisJCQkJCQkJ ICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5k ZGwubWVzc2FnZSk7CisJZWxzZQorCQlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNuLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5y ZWxpZCwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAorCQkJCQkgICBjaGFuZ2Ut PmRhdGEuZGRsLm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdl KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv d29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4 IGNmYjJhYjYuLjFhOGFmYjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3Jr ZXIuYwpAQCAtMTY2LDYgKzE2Niw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVk ZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgor I2luY2x1ZGUgInBhcnNlci9hbmFseXplLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0 aW9uLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtl ci5oIgpAQCAtMTkxLDcgKzE5MiwxMCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgogI2lu Y2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2FycmF5LmgiCisj aW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAj aW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgogI2lu Y2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVk ZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTMyMzYsNiArMzI0MCwyMzggQEAgYXBwbHlfaGFuZGxl X3RydW5jYXRlKFN0cmluZ0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogfQogCisv KgorICogU3BlY2lhbCBoYW5kbGluZyBmb3IgQ1JFQVRFIFRBQkxFIEFTIGFuZCBTRUxFQ1QgSU5U TworICogdG8gbm90IHBvcHVsYXRlIGRhdGEgZnJvbSB0aGUgc291cmNlIHRhYmxlIG9uIHRoZSBz dWJzY3JpYmVyLgorICogQWxsb3cgdGhlIGRhdGEgdG8gYmUgcmVwbGljYXRlZCB0aHJvdWdoIElO U0VSVHMgb24gdGhlIHB1Ymxpc2hlci4KKyAqLworc3RhdGljIHZvaWQKK3ByZXByb2Nlc3NfY3Jl YXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOwor CisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwlz d2l0Y2ggKGNvbW1hbmRUYWcpCisJeworCQljYXNlIENNRFRBR19DUkVBVEVfVEFCTEVfQVM6CisJ CWNhc2UgQ01EVEFHX1NFTEVDVF9JTlRPOgorCQkJeworCQkJCUNyZWF0ZVRhYmxlQXNTdG10ICpj YXN0bXQgPSAoQ3JlYXRlVGFibGVBc1N0bXQgKikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChj YXN0bXQtPm9ianR5cGUgPT0gT0JKRUNUX1RBQkxFKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog Rm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5j b25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUgcmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBw dWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICovCisJCQkJCWNhc3RtdC0+aW50by0+c2tpcERhdGEg PSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENNRFRBR19TRUxFQ1Q6CisJ CQl7CisJCQkJU2VsZWN0U3RtdCAqc3N0bXQgPSAoU2VsZWN0U3RtdCAqKSBjb21tYW5kLT5zdG10 OworCisJCQkJaWYgKHNzdG10LT5pbnRvQ2xhdXNlICE9IE5VTEwpCisJCQkJeworCQkJCQkvKgor CQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJ CQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJ CQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJc3N0bXQtPmludG9DbGF1 c2UtPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoK KwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBDUkVBVEUgVEFCTEUgY29tbWFuZAor ICoKKyAqIENhbGwgQWRkU3Vic2NyaXB0aW9uUmVsU3RhdGUgZm9yIENSRUFURSBMQUJFTCBjb21t YW5kIHRvIHNldCB0aGUgcmVsc3RhdGUgdG8KKyAqIFNVQlJFTF9TVEFURV9SRUFEWSBzbyBETUwg Y2hhbmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBjYW4gYmUgcmVwbGljYXRlZCB3aXRob3V0CisgKiBo YXZpbmcgdG8gbWFudWFsbHkgcnVuICJhbHRlciBzdWJzY3JpcHRpb24gLi4uIHJlZnJlc2ggcHVi bGljYXRpb24iCisgKi8KK3N0YXRpYyB2b2lkCitoYW5kbGVfY3JlYXRlX3RhYmxlKFJhd1N0bXQg KmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCVJhbmdlVmFyICAgKnJ2ID0g TlVMTDsKKwlPaWQJCQlyZWxpZDsKKwlPaWQJCQlyZWxuYW1lc3BhY2UgPSBJbnZhbGlkT2lkOwor CUNyZWF0ZVN0bXQgKmNzdG10OworCWNoYXIJICAgKnNjaGVtYW5hbWUgPSBOVUxMOworCWNoYXIJ ICAgKnJlbG5hbWUgPSBOVUxMOworCisJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5v ZGUgKikgY29tbWFuZCk7CisJY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10Owor CXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCisJaWYgKGNvbW1hbmRUYWcgPT0gQ01EVEFHX0NSRUFU RV9UQUJMRSkKKwl7CisJCWNzdG10ID0gKENyZWF0ZVN0bXQgKikgY29tbWFuZC0+c3RtdDsKKwkJ cnYgPSBjc3RtdC0+cmVsYXRpb247CisJfQorCWVsc2UKKwl7CisJCXJldHVybjsKKwl9CisKKwlp ZiAoIXJ2KQorCQlyZXR1cm47CisKKwlzY2hlbWFuYW1lID0gcnYtPnNjaGVtYW5hbWU7CisJcmVs bmFtZSA9IHJ2LT5yZWxuYW1lOworCisJaWYgKHNjaGVtYW5hbWUgIT0gTlVMTCkKKwkJcmVsbmFt ZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9vaWQoc2NoZW1hbmFtZSwgZmFsc2UpOworCisJaWYgKHJl bG5hbWVzcGFjZSAhPSBJbnZhbGlkT2lkKQorCQlyZWxpZCA9IGdldF9yZWxuYW1lX3JlbGlkKHJl bG5hbWUsIHJlbG5hbWVzcGFjZSk7CisJZWxzZQorCQlyZWxpZCA9IFJlbG5hbWVHZXRSZWxpZChy ZWxuYW1lKTsKKworCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKKwl7CisJCUFkZFN1YnNjcmlwdGlv blJlbFN0YXRlKE15U3Vic2NyaXB0aW9uLT5vaWQsIHJlbGlkLAorCQkJCQkJCQlTVUJSRUxfU1RB VEVfUkVBRFksCisJCQkJCQkJCUludmFsaWRYTG9nUmVjUHRyKTsKKwkJZXJlcG9ydChERUJVRzEs CisJCQkJKGVycm1zZ19pbnRlcm5hbCgidGFibGUgXCIlc1wiIGFkZGVkIHRvIHN1YnNjcmlwdGlv biBcIiVzXCIiLAorCQkJCQkJCQkgcmVsbmFtZSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJ fQorfQorCisvKgorICogSGFuZGxlIERETCByZXBsaWNhdGlvbiBtZXNzYWdlcy4KKyAqLworc3Rh dGljIHZvaWQKK2FwcGx5X2hhbmRsZV9kZGwoU3RyaW5nSW5mbyBzKQoreworCVhMb2dSZWNQdHIJ bHNuOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJY2hhcgkgICAqbWVzc2FnZSA9IE5V TEw7CisJY2hhcgkgICAqZGRsX2NvbW1hbmQ7CisJU2l6ZQkJc3o7CisJTGlzdAkgICAqcGFyc2V0 cmVlX2xpc3Q7CisJTGlzdENlbGwgICAqcGFyc2V0cmVlX2l0ZW07CisJRGVzdFJlY2VpdmVyICpy ZWNlaXZlcjsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJY29uc3QgY2hhciAqc2F2ZV9k ZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZWJ1Z19xdWVyeV9zdHJpbmc7CisKKwltZXNzYWdlID0gbG9n aWNhbHJlcF9yZWFkX2RkbChzLCAmbHNuLCAmcHJlZml4LCAmc3opOworCisJLyogTWFrZSBzdXJl IHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KKwliZWdpbl9yZXBsaWNhdGlvbl9z dGVwKCk7CisKKwlkZGxfY29tbWFuZCA9IGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKG1lc3Nh Z2UpOworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IGRkbF9jb21tYW5kOworCisJLyogRGVzdE5vbmUg Zm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gKi8KKwlyZWNlaXZlciA9IENyZWF0ZURlc3RSZWNlaXZl cihEZXN0Tm9uZSk7CisJcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShkZGxfY29tbWFu ZCk7CisKKwlmb3JlYWNoKHBhcnNldHJlZV9pdGVtLCBwYXJzZXRyZWVfbGlzdCkKKwl7CisJCUxp c3QJICAgKnBsYW50cmVlX2xpc3Q7CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0OworCQlSYXdT dG10ICAgICpjb21tYW5kID0gKFJhd1N0bXQgKikgbGZpcnN0KHBhcnNldHJlZV9pdGVtKTsKKwkJ Q29tbWFuZFRhZwljb21tYW5kVGFnOworCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRyZWVfY29u dGV4dCA9IE5VTEw7CisJCVBvcnRhbAkJcG9ydGFsOworCQlib29sCQlzbmFwc2hvdF9zZXQgPSBm YWxzZTsKKworCQljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5k KTsKKworCQkvKiBJZiB3ZSBnb3QgYSBjYW5jZWwgc2lnbmFsIGluIHBhcnNpbmcgb3IgcHJpb3Ig Y29tbWFuZCwgcXVpdCAqLworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCS8qIFJlbW92 ZSBkYXRhIHBvcHVsYXRpb24gZnJvbSB0aGUgY29tbWFuZCAqLworCQlwcmVwcm9jZXNzX2NyZWF0 ZV90YWJsZShjb21tYW5kKTsKKworCQkvKgorCQkgKiBTZXQgdXAgYSBzbmFwc2hvdCBpZiBwYXJz ZSBhbmFseXNpcy9wbGFubmluZyB3aWxsIG5lZWQgb25lLgorCQkgKi8KKwkJaWYgKGFuYWx5emVf cmVxdWlyZXNfc25hcHNob3QoY29tbWFuZCkpCisJCXsKKwkJCVB1c2hBY3RpdmVTbmFwc2hvdChH ZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOworCQkJc25hcHNob3Rfc2V0ID0gdHJ1ZTsKKwkJfQor CisJCS8qCisJCSAqIFdlIGRvIHRoZSB3b3JrIGZvciBlYWNoIHBhcnNldHJlZSBpbiBhIHNob3J0 LWxpdmVkIGNvbnRleHQsIHRvCisJCSAqIGxpbWl0IHRoZSBtZW1vcnkgdXNlZCB3aGVuIHRoZXJl IGFyZSBtYW55IGNvbW1hbmRzIGluIHRoZSBzdHJpbmcuCisJCSAqLworCQlwZXJfcGFyc2V0cmVl X2NvbnRleHQgPQorCQkJQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0 LAorCQkJCQkJCQkgICJleGVjdXRlX3NxbF9zdHJpbmcgcGVyLXN0YXRlbWVudCBjb250ZXh0IiwK KwkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwkJb2xkY29udGV4dCA9IE1lbW9y eUNvbnRleHRTd2l0Y2hUbyhwZXJfcGFyc2V0cmVlX2NvbnRleHQpOworCisJCXF1ZXJ5dHJlZV9s aXN0ID0gcGdfYW5hbHl6ZV9hbmRfcmV3cml0ZV9maXhlZHBhcmFtcyhjb21tYW5kLAorCQkJCQkJ CQkJCQkJCQkJZGRsX2NvbW1hbmQsCisJCQkJCQkJCQkJCQkJCQlOVUxMLCAwLCBOVUxMKTsKKwor CQlwbGFudHJlZV9saXN0ID0gcGdfcGxhbl9xdWVyaWVzKHF1ZXJ5dHJlZV9saXN0LCBkZGxfY29t bWFuZCwgMCwgTlVMTCk7CisKKwkJLyogRG9uZSB3aXRoIHRoZSBzbmFwc2hvdCB1c2VkIGZvciBw YXJzaW5nL3BsYW5uaW5nICovCisJCWlmIChzbmFwc2hvdF9zZXQpCisJCQlQb3BBY3RpdmVTbmFw c2hvdCgpOworCisJCXBvcnRhbCA9IENyZWF0ZVBvcnRhbCgibG9naWNhbCByZXBsaWNhdGlvbiIs IHRydWUsIHRydWUpOworCisJCS8qCisJCSAqIFdlIGRvbid0IGhhdmUgdG8gY29weSBhbnl0aGlu ZyBpbnRvIHRoZSBwb3J0YWwsIGJlY2F1c2UgZXZlcnl0aGluZworCQkgKiB3ZSBhcmUgcGFzc2lu ZyBoZXJlIGlzIGluIEFwcGx5TWVzc2FnZUNvbnRleHQgb3IgdGhlCisJCSAqIHBlcl9wYXJzZXRy ZWVfY29udGV4dCwgYW5kIHNvIHdpbGwgb3V0bGl2ZSB0aGUgcG9ydGFsIGFueXdheS4KKwkJICov CisJCVBvcnRhbERlZmluZVF1ZXJ5KHBvcnRhbCwKKwkJCQkJCSAgTlVMTCwKKwkJCQkJCSAgZGRs X2NvbW1hbmQsCisJCQkJCQkgIGNvbW1hbmRUYWcsCisJCQkJCQkgIHBsYW50cmVlX2xpc3QsCisJ CQkJCQkgIE5VTEwpOworCisJCS8qCisJCSAqIFN0YXJ0IHRoZSBwb3J0YWwuICBObyBwYXJhbWV0 ZXJzIGhlcmUuCisJCSAqLworCQlQb3J0YWxTdGFydChwb3J0YWwsIE5VTEwsIDAsIEludmFsaWRT bmFwc2hvdCk7CisKKwkJLyoKKwkJICogU3dpdGNoIGJhY2sgdG8gdHJhbnNhY3Rpb24gY29udGV4 dCBmb3IgZXhlY3V0aW9uLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRl eHQpOworCisJCSh2b2lkKSBQb3J0YWxSdW4ocG9ydGFsLAorCQkJCQkJIEZFVENIX0FMTCwKKwkJ CQkJCSB0cnVlLAorCQkJCQkJIHRydWUsCisJCQkJCQkgcmVjZWl2ZXIsCisJCQkJCQkgcmVjZWl2 ZXIsCisJCQkJCQkgTlVMTCk7CisKKwkJUG9ydGFsRHJvcChwb3J0YWwsIGZhbHNlKTsKKworCQlD b21tYW5kQ291bnRlckluY3JlbWVudCgpOworCisJCS8qCisJCSAqIFRhYmxlIGNyZWF0ZWQgYnkg RERMIHJlcGxpY2F0aW9uIChkYXRhYmFzZSBsZXZlbCkgaXMgYXV0b21hdGljYWxseQorCQkgKiBh ZGRlZCB0byB0aGUgc3Vic2NyaXB0aW9uIGhlcmUuCisJCSAqLworCQloYW5kbGVfY3JlYXRlX3Rh YmxlKGNvbW1hbmQpOworCisJCS8qIE5vdyB3ZSBtYXkgZHJvcCB0aGUgcGVyLXBhcnNldHJlZSBj b250ZXh0LCBpZiBvbmUgd2FzIGNyZWF0ZWQuICovCisJCU1lbW9yeUNvbnRleHREZWxldGUocGVy X3BhcnNldHJlZV9jb250ZXh0KTsKKwl9CisKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBzYXZlX2Rl YnVnX3F1ZXJ5X3N0cmluZzsKKwllbmRfcmVwbGljYXRpb25fc3RlcCgpOworfQogCiAvKgogICog TG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIuCkBAIC0zMzAx LDYgKzM1MzcsMTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQli cmVhazsKIAorCQljYXNlIExPR0lDQUxfUkVQX01TR19EREw6CisJCQlhcHBseV9oYW5kbGVfZGRs KHMpOworCQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgog CQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKaW5kZXggOGVkNjlmMC4uZGZlZDVhNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwor KysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01NSw2 ICs1NSwxMSBAQCBzdGF0aWMgdm9pZCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKIAkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLAogCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZp eCwKIAkJCQkJCQkgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBw Z291dHB1dF9kZGwoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVy QnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNo YXIgKnByZWZpeCwgT2lkIHJlbGlkLAorCQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wg cGdvdXRwdXRfb3JpZ2luX2ZpbHRlcihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJ CQkJCSAgIFJlcE9yaWdpbklkIG9yaWdpbl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdp bl9wcmVwYXJlX3R4bihMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTQsNiArMjU5 LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQog CWNiLT5jaGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdv dXRwdXRfdHJ1bmNhdGU7CiAJY2ItPm1lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNi LT5kZGxfY2IgPSBwZ291dHB1dF9kZGw7CiAJY2ItPmNvbW1pdF9jYiA9IHBnb3V0cHV0X2NvbW1p dF90eG47CiAKIAljYi0+YmVnaW5fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVf dHhuOwpAQCAtMjcwLDYgKzI3Niw3IEBAIF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1 Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+c3RyZWFtX2NvbW1pdF9jYiA9IHBnb3V0cHV0X3N0cmVh bV9jb21taXQ7CiAJY2ItPnN0cmVhbV9jaGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2It PnN0cmVhbV9tZXNzYWdlX2NiID0gcGdvdXRwdXRfbWVzc2FnZTsKKwljYi0+c3RyZWFtX2RkbF9j YiA9IHBnb3V0cHV0X2RkbDsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1 bmNhdGU7CiAJLyogdHJhbnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwog CWNiLT5zdHJlYW1fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAg LTQyNSw2ICs0MzIsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBi aW5hcnkgcHJvdG9jb2wuICovCiAJb3B0LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklO QVJZX09VVFBVVDsKKwlvcHQtPnJlY2VpdmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBU aGlzIGlzIHJlcGxpY2F0aW9uIHN0YXJ0IGFuZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAg LTUwNSw2ICs1MTMsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24g c3RhdGUuICovCiAJCWRhdGEtPnB1YmxpY2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9y ZWxpZHMgPSBOSUw7CiAJCXB1YmxpY2F0aW9uc192YWxpZCA9IGZhbHNlOwogCiAJCS8qCkBAIC0x NDA3LDYgKzE0MTYsMjAgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQg KmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCVJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlIGFj dGlvbiA9IGNoYW5nZS0+YWN0aW9uOwogCVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdCA9IE5VTEw7 CiAJVHVwbGVUYWJsZVNsb3QgKm5ld19zbG90ID0gTlVMTDsKKwlib29sICAgICAgICB0YWJsZV9y ZXdyaXRlID0gZmFsc2U7CisKKwkvKgorCSAqIEZvciBoZWFwIHJld3JpdGVzLCB3ZSBtaWdodCBu ZWVkIHRvIHJlcGxpY2F0ZSB0aGVtIGlmIHRoZSByZXdyaXR0ZW4KKwkgKiB0YWJsZSBwdWJsaXNo ZXMgcmV3cml0ZSBkZGwgbWVzc2FnZS4gU28gZ2V0IHRoZSBhY3R1YWwgcmVsYXRpb24gaGVyZQor CSAqIGFuZCBjaGVjayB0aGUgcHViYWN0aW9uIGxhdGVyLgorCSAqLworCWlmIChyZWxhdGlvbi0+ cmRfcmVsLT5yZWxyZXdyaXRlKQorCXsKKwkJdGFibGVfcmV3cml0ZSA9IHRydWU7CisJCXJlbGF0 aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHJld3JpdGUp OworCQl0YXJnZXRyZWwgPSByZWxhdGlvbjsKKwl9CisKIAogCWlmICghaXNfcHVibGlzaGFibGVf cmVsYXRpb24ocmVsYXRpb24pKQogCQlyZXR1cm47CkBAIC0xNDQxLDYgKzE0NjQsMTMgQEAgcGdv dXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJQXNzZXJ0KGZhbHNlKTsKIAl9CiAKKwkvKgorCSAqIFdlIGRvbid0IHB1Ymxp c2ggdGFibGUgcmV3cml0ZSBjaGFuZ2UgdW5sZXNzIHdlIHB1Ymxpc2ggdGhlIHJld3JpdGUgZGRs CisJICogbWVzc2FnZS4KKwkgKi8KKwlpZiAodGFibGVfcmV3cml0ZSAmJiAhcmVsZW50cnktPnB1 YmFjdGlvbnMucHViZGRsX3RhYmxlKQorCQlyZXR1cm47CisKIAkvKiBBdm9pZCBsZWFraW5nIG1l bW9yeSBieSB1c2luZyBhbmQgcmVzZXR0aW5nIG91ciBvd24gY29udGV4dCAqLwogCW9sZCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhkYXRhLT5jb250ZXh0KTsKIApAQCAtMTQ3MCw4ICsxNTAwLDgg QEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAogCQkJfQogCiAJCQkvKiBDaGVjayByb3cgZmlsdGVyICovCi0JCQlpZiAo IXBnb3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5 LAotCQkJCQkJCQkJICZhY3Rpb24pKQorCQkJaWYgKCF0YWJsZV9yZXdyaXRlICYmCisJCQkJIXBn b3V0cHV0X3Jvd19maWx0ZXIodGFyZ2V0cmVsLCBOVUxMLCAmbmV3X3Nsb3QsIHJlbGVudHJ5LCAm YWN0aW9uKSkKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTE0OTEsOCArMTUyMSwxOSBAQCBwZ291 dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCiAJCQltYXliZV9zZW5kX3NjaGVtYShjdHgsIGNoYW5nZSwgcmVsYXRpb24sIHJlbGVu dHJ5KTsKIAogCQkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7Ci0JCQlsb2dp Y2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAot CQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CisKKwkJCS8qCisJCQkg KiBDb252ZXJ0IHRoZSByZXdyaXRlIGluc2VydHMgdG8gdXBkYXRlcyBzbyB0aGF0IHRoZSBzdWJz Y3JpYmVyCisJCQkgKiBjYW4gcmVwbGF5IGl0LiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHN1cmUg dGhlIGRhdGEgYmV0d2VlbgorCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGlzIGNvbnNp c3RlbnQuCisJCQkgKi8KKwkJCWlmICh0YWJsZV9yZXdyaXRlKQorCQkJCWxvZ2ljYWxyZXBfd3Jp dGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwKKwkJCQkJCQkJCQlOVUxMLCBuZXdf c2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5zKTsKKwkJCWVs c2UKKwkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWws IG5ld19zbG90LAorCQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOwog CQkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xNjI0LDYgKzE2NjUsOSBAQCBwZ291dHB1dF9j aGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCWFuY2VzdG9yID0gTlVMTDsKIAl9CiAKKwlpZiAodGFibGVfcmV3cml0ZSkKKwkJUmVsYXRp b25DbG9zZShyZWxhdGlvbik7CisKIAkvKiBDbGVhbnVwICovCiAJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZCk7CiAJTWVtb3J5Q29udGV4dFJlc2V0KGRhdGEtPmNvbnRleHQpOwpAQCAtMTczOSw2 ICsxNzgzLDEzOCBAQCBwZ291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiAvKgorICogU2VuZCB0aGUgZGVjb2RlZCBE REwgb3ZlciB3aXJlLgorICovCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlYTG9nUmVjUHRy IG1lc3NhZ2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJz ZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdl KQoreworCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4LT5vdXRwdXRf cGx1Z2luX3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBHT3V0cHV0VHhu RGF0YSAqKSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9 IE5VTEw7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJc3dpdGNoIChjbWR0eXBl KQorCXsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6CisKKwkJCS8qCisJCQkgKiBPbiBEUk9Q IHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlmIHRoZQorCQkJ ICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMgZGRsIHB1Ymxp Y2F0aW9uLgorCQkJICogV2UgbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQsIHRoZSByZWxp ZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3AgZW5kLCB2ZXJp ZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBvbiB0aGUgZGVs ZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAqIG1lc3NhZ2Uu CisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwor CQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRh dGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF90YWJs ZSkKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0ZWRf cmVsaWRzLCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0dXJu OworCisJCWNhc2UgRENUX1RhYmxlRHJvcEVuZDoKKwkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGRh dGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCkpCisJCQkJcmV0dXJuOworCQkJZWxzZQorCQkJCWRh dGEtPmRlbGV0ZWRfcmVsaWRzID0gbGlzdF9kZWxldGVfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRz LCByZWxpZCk7CisJCQlicmVhazsKKworCQljYXNlIERDVF9UYWJsZUFsdGVyOgorCisJCQkvKgor CQkJICogRm9yIHRhYmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5hbCBk ZGwgbWVzc2FnZQorCQkJICogdG8gc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNvbWlu ZyByZXdyaXRlIElOU0VSVCB0bworCQkJICogVVBEQVRFIGFuZCBzZW5kIHRoZW0gdG8gc3Vic2Ny aWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2Ny aWJlciBjYW4gYWx3YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhpcyB3 YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBiZWZv cmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50CisJCQkgKiBhbW9u ZyBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBp bgorCQkJICogc3Vic2NyaWJlciB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNv IGdldCByZXdyaXR0ZW4sCisJCQkgKiB3ZSBuZWVkIHRvIGxldCB0aGUgc3Vic2NyaWJlciBleGVj dXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbAorCQkJICogdG8gcmV3cml0ZSBhbGwgdGhlIGRh dGEgYXQgZmlyc3QuCisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBy ZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBhbmQg c3Vic2NyaWJlcihkdWUgdG8gZGlmZmVyZW50CisJCQkgKiBmdW5jdGlvbnMvb3BlcmF0b3JzIHVz ZWQgZHVyaW5nIHJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvCisJCQkgKiByZXBsaWNhdGUgdGhlIHJl d3JpdGUgVVBEQVRFcyB0byBrZWVwIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICog VE8gSU1QUk9WRTogV2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmli ZXIKKwkJCSAqIG9ubHkgcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5nIGZ1 bGx5IHJld3JpdGUgYW5kCisJCQkgKiB1c2UgdGhlIHVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0 byByZXdyaXRlIHRoZSByZXN0IGRhdGEuCisJCQkgKiBCZXNpZGVzLCB3ZSBtYXkgbm90IG5lZWQg dG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlCisJCQkgKiBvZiByZXdyaXRlIGRk bCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nCisJCQkgKiByZXdy aXRlIGNoYW5nZXMgZm9yIEFMVEVSIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhl CisJCQkgKiB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuCisJCQkgKi8KKwkJCXJl bGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxhdGlv bik7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsK KworCQkJLyoKKwkJCSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJsaXNo IGRkbCBtZXNzYWdlIG9yIHRoZQorCQkJICogZGRsIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZpYSBp dHMgcm9vdCByZWxhdGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5w dWJkZGxfdGFibGUgfHwKKwkJCQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkK KwkJCXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisK KwkJCWJyZWFrOworCisJCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJCXJlbGF0aW9uID0gUmVsYXRp b25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJaWYgKHJlbGF0aW9uID09IE5VTEwpCisJCQkJ YnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9u KTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCQl7CisJ CQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVh azsKKworCQljYXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJYnJl YWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwg Y21kdHlwZSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3Qg eWV0ICovCisJaWYgKHR4bmRhdGEgJiYgIXR4bmRhdGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291 dHB1dF9zZW5kX2JlZ2luKGN0eCwgdHhuKTsKKworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShj dHgsIHRydWUpOworCWxvZ2ljYWxyZXBfd3JpdGVfZGRsKGN0eC0+b3V0LAorCQkJCQkJCQltZXNz YWdlX2xzbiwKKwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7 CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJUmVs YXRpb25DbG9zZShyZWxhdGlvbik7Cit9CisKKy8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0 YSBpcyBhc3NvY2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMKICAqIHJlcXVl c3RlZCB0aGUgY2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxzZSBvdGhlcndp c2UuCiAgKi8KQEAgLTIwNDYsNyArMjIyMiw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1 dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2NoZW1hX3NlbnQgPSBm YWxzZTsKIAkJZW50cnktPnN0cmVhbWVkX3R4bnMgPSBOSUw7CiAJCWVudHJ5LT5wdWJhY3Rpb25z LnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9Ci0JCQllbnRyeS0+cHVi YWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNl OworCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVi dHJ1bmNhdGUgPQorCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsX2FsbCA9IGVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRkbF90YWJsZSA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3QgPSBOVUxMOwog CQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0ZSwgMCwg c2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIxMDQsNiArMjI4MSw4IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRy eS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlvbnMucHVi ZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7 CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFj dGlvbnMucHViZGRsX3RhYmxlID0gZmFsc2U7CiAKIAkJLyoKIAkJICogVHVwbGUgc2xvdHMgY2xl YW51cHMuIChXaWxsIGJlIHJlYnVpbHQgbGF0ZXIgaWYgbmVlZGVkKS4KQEAgLTIyMTcsNiArMjM5 Niw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJl bGF0aW9uKQogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWItPnB1YmFjdGlv bnMucHVidXBkYXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8PSBwdWItPnB1 YmFjdGlvbnMucHViZGVsZXRlOwogCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9 IHB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZTsKKwkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZGxfYWxsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGxfYWxsOworCQkJCWVudHJ5LT5wdWJhY3Rp b25zLnB1YmRkbF90YWJsZSB8PSBwdWItPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlOwogCiAJCQkJ LyoKIAkJCQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0 IGFuY2VzdG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jIGIvc3JjL2Jh Y2tlbmQvdGNvcC9jbWR0YWcuYwppbmRleCA0YmQ3MTNhLi5jZTA5YzVmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC90Y29wL2NtZHRhZy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFnLmMK QEAgLTI2LDEwICsyNiwxMSBAQCB0eXBlZGVmIHN0cnVjdCBDb21tYW5kVGFnQmVoYXZpb3IKIAlj b25zdCBib29sCXRhYmxlX3Jld3JpdGVfb2s7CiAJY29uc3QgYm9vbAlkaXNwbGF5X3Jvd2NvdW50 OwkvKiBzaG91bGQgdGhlIG51bWJlciBvZiByb3dzIGFmZmVjdGVkIGJlCiAJCQkJCQkJCQkgKiBz aG93biBpbiB0aGUgY29tbWFuZCBjb21wbGV0aW9uIHN0cmluZyAqLworCWNvbnN0IGJvb2wJZGRs X3JlcGxpY2F0aW9uX29rOwogfSBDb21tYW5kVGFnQmVoYXZpb3I7CiAKLSNkZWZpbmUgUEdfQ01E VEFHKHRhZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCkgXAotCXsgbmFtZSwgKHVpbnQ4 KSAoc2l6ZW9mKG5hbWUpIC0gMSksIGV2dHJnb2ssIHJ3cm9rLCByb3djbnQgfSwKKyNkZWZpbmUg UEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCwgZGRscmVwbG9rKSBc CisJeyBuYW1lLCAodWludDgpIChzaXplb2YobmFtZSkgLSAxKSwgZXZ0cmdvaywgcndyb2ssIHJv d2NudCwgZGRscmVwbG9rIH0sCiAKIHN0YXRpYyBjb25zdCBDb21tYW5kVGFnQmVoYXZpb3IgdGFn X2JlaGF2aW9yW0NPTU1BTkRfVEFHX05FWFRUQUddID0gewogI2luY2x1ZGUgInRjb3AvY21kdGFn bGlzdC5oIgpAQCAtNTcsNiArNTgsMjEgQEAgR2V0Q29tbWFuZFRhZ05hbWVBbmRMZW4oQ29tbWFu ZFRhZyBjb21tYW5kVGFnLCBTaXplICpsZW4pCiAJcmV0dXJuIHRhZ19iZWhhdmlvcltjb21tYW5k VGFnXS5uYW1lOwogfQogCitDb21tYW5kVGFnICoKK0dldENvbW1hbmRUYWdzRm9yRERMUmVwbChp bnQgKm5jb21tYW5kcykKK3sKKwlDb21tYW5kVGFnICpkZGxyZXBsX2NvbW1hbmRzID0gcGFsbG9j MChDT01NQU5EX1RBR19ORVhUVEFHICogc2l6ZW9mKENvbW1hbmRUYWcpKTsKKwkqbmNvbW1hbmRz ID0gMDsKKworCWZvcihpbnQgaSA9IDA7IGkgPCBDT01NQU5EX1RBR19ORVhUVEFHOyBpKyspCisJ eworCQlpZiAodGFnX2JlaGF2aW9yW2ldLmRkbF9yZXBsaWNhdGlvbl9vaykKKwkJCWRkbHJlcGxf Y29tbWFuZHNbKCpuY29tbWFuZHMpKytdID0gKENvbW1hbmRUYWcpIGk7CisJfQorCisJcmV0dXJu IGRkbHJlcGxfY29tbWFuZHM7Cit9CisKIGJvb2wKIGNvbW1hbmRfdGFnX2Rpc3BsYXlfcm93Y291 bnQoQ29tbWFuZFRhZyBjb21tYW5kVGFnKQogewpAQCAtNzUsNiArOTEsMTIgQEAgY29tbWFuZF90 YWdfdGFibGVfcmV3cml0ZV9vayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpCiAJcmV0dXJuIHRhZ19i ZWhhdmlvcltjb21tYW5kVGFnXS50YWJsZV9yZXdyaXRlX29rOwogfQogCitib29sCitjb21tYW5k X3RhZ19kZGxfcmVwbGljYXRpb25fb2soQ29tbWFuZFRhZyBjb21tYW5kVGFnKQoreworCXJldHVy biB0YWdfYmVoYXZpb3JbY29tbWFuZFRhZ10uZGRsX3JlcGxpY2F0aW9uX29rOworfQorCiAvKgog ICogU2VhcmNoIENvbW1hbmRUYWcgYnkgbmFtZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKaW5kZXggNmZkM2Q0 Ny4uYTdlMGRjZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKKysrIGIv c3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjYsOCArMTY2NiwxMSBAQCBQcm9jZXNz VXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRf Q3JlYXRlVGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChw YXJzZXRyZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVBcyhwc3RhdGUsIChDcmVh dGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBhcmFtcywgcXVlcnlFbnYs IHFjKTsKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZChhZGRyZXNzKTsKKwkJCQlj b21tYW5kQ29sbGVjdGVkID0gdHJ1ZTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBUX1JlZnJlc2hN YXRWaWV3U3RtdDoKQEAgLTIyNTMsNiArMjI1Niw4IEBAIHN0cmluZ2lmeV9vYmp0eXBlKE9iamVj dFR5cGUgb2JqdHlwZSwgYm9vbCBpc2dyYW50KQogCQkJcmV0dXJuICJQT0xJQ1kiOwogCQljYXNl IE9CSkVDVF9QUk9DRURVUkU6CiAJCQlyZXR1cm4gIlBST0NFRFVSRSI7CisJCWNhc2UgT0JKRUNU X1BVQkxJQ0FUSU9OOgorCQkJcmV0dXJuICJQVUJMSUNBVElPTiI7CiAJCWNhc2UgT0JKRUNUX1JP TEU6CiAJCQlyZXR1cm4gIlJPTEUiOwogCQljYXNlIE9CSkVDVF9ST1VUSU5FOgpAQCAtMjI2NSw2 ICsyMjcwLDggQEAgc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29sIGlz Z3JhbnQpCiAJCQlyZXR1cm4gIlNFUVVFTkNFIjsKIAkJY2FzZSBPQkpFQ1RfU1RBVElTVElDX0VY VDoKIAkJCXJldHVybiAiU1RBVElTVElDUyI7CisJCWNhc2UgT0JKRUNUX1NVQlNDUklQVElPTjoK KwkJCXJldHVybiAiU1VCU0NSSVBUSU9OIjsKIAkJY2FzZSBPQkpFQ1RfVEFCTEU6CiAJCQlyZXR1 cm4gIlRBQkxFIjsKIAkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKQEAgLTIyOTMsMTAgKzIzMDAs OCBAQCBzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUsIGJvb2wgaXNncmFudCkK IAkJY2FzZSBPQkpFQ1RfREVGQUNMOgogCQljYXNlIE9CSkVDVF9ET01DT05TVFJBSU5UOgogCQlj YXNlIE9CSkVDVF9QQVJBTUVURVJfQUNMOgotCQljYXNlIE9CSkVDVF9QVUJMSUNBVElPTjoKIAkJ Y2FzZSBPQkpFQ1RfUFVCTElDQVRJT05fTkFNRVNQQUNFOgogCQljYXNlIE9CSkVDVF9QVUJMSUNB VElPTl9SRUw6Ci0JCWNhc2UgT0JKRUNUX1NVQlNDUklQVElPTjoKIAkJY2FzZSBPQkpFQ1RfVEFC Q09OU1RSQUlOVDoKIAkJY2FzZSBPQkpFQ1RfVFJBTlNGT1JNOgogCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0 Y2FjaGUuYwppbmRleCAxZjVlN2ViLi5mMmE5ZjVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9ldnRjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNh Y2hlLmMKQEAgLTE2Nyw2ICsxNjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJ CQlldmVudCA9IEVWVF9TUUxEcm9wOwogCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJs ZV9yZXdyaXRlIikgPT0gMCkKIAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBp ZiAoc3RyY21wKGV2dGV2ZW50LCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9 IEVWVF9UYWJsZUluaXRXcml0ZTsKIAkJZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCmluZGV4IDEzZjc5ODcuLmNmNzZkMzggMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2Fj aGUvcmVsY2FjaGUuYwpAQCAtNTY5MCw2ICs1NjkwLDggQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0 aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlw dWJkZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1 YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJ cHViZGVzYy0+cHViYWN0aW9ucy5wdWJkZGxfYWxsIHw9IHB1YmZvcm0tPnB1YmRkbF9hbGw7CisJ CXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHw9IHB1YmZvcm0tPnB1YmRkbF90YWJs ZTsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZlcmVuY2VkIGluIHRoZSBm aWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNzRkODA2Yy4uMzA3ZWRj YyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19s YXJnZW9iamVjdF9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19sYXJnZW9iamVjdF9tZXRhZGF0 YV9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXJfZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf dHlwZV9kLmgiCkBAIC0zOTQ4LDYgKzM5NDksOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAq Zm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJ aV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVuY2F0ZTsKKwlpbnQJCQlpX3B1YmRkbF9hbGw7 CisJaW50CQkJaV9wdWJkZGxfdGFibGU7CiAJaW50CQkJaV9wdWJ2aWFyb290OwogCWludAkJCWks CiAJCQkJbnR1cHM7CkBAIC0zOTYzLDIzICszOTY2LDIzIEBAIGdldFB1YmxpY2F0aW9ucyhBcmNo aXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlyZXNldFBRRXhwQnVmZmVyKHF1ZXJ5 KTsKIAogCS8qIEdldCB0aGUgcHVibGljYXRpb25zLiAqLwotCWlmIChmb3V0LT5yZW1vdGVWZXJz aW9uID49IDEzMDAwMCkKKwlpZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNjAwMDApCiAJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQsIHAu b2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAucHVi YWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRy dW5jYXRlLCBwLnB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5z ZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIHAucHViZGRsX2Fs bCwgcC5wdWJkZGxfdGFibGUsIHAucHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1Ymxp Y2F0aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwg cC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5w dWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVi dHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMs IHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZh bHNlIGFzIHAucHViZGRsX2FsbCwgZmFsc2UgYXMgcC5wdWJkZGxfdGFibGUsIGZhbHNlIEFTIHB1 YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAJZWxzZQogCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lkLCBw Lm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJwLnB1 YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2Ug QVMgcHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0 YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1 YnRydW5jYXRlLCBmYWxzZSBhcyBwLnB1YmRkbF9hbGwsIGZhbHNlIGFzIHAucHViZGRsX3RhYmxl LCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIp OwogCiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5LT5kYXRhLCBQR1JFU19UVVBM RVNfT0spOwpAQCAtMzk5NSw2ICszOTk4LDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZv dXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCWlfcHVidXBkYXRlID0gUFFmbnVtYmVyKHJlcywg InB1YnVwZGF0ZSIpOwogCWlfcHViZGVsZXRlID0gUFFmbnVtYmVyKHJlcywgInB1YmRlbGV0ZSIp OwogCWlfcHVidHJ1bmNhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidHJ1bmNhdGUiKTsKKwlpX3B1 YmRkbF9hbGwgPSBQUWZudW1iZXIocmVzLCAicHViZGRsX2FsbCIpOworCWlfcHViZGRsX3RhYmxl ID0gUFFmbnVtYmVyKHJlcywgInB1YmRkbF90YWJsZSIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51 bWJlcihyZXMsICJwdWJ2aWFyb290Iik7CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICog c2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykpOwpAQCAtNDAxOCw2ICs0MDIzLDEwIEBAIGdldFB1Ymxp Y2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAkJCShzdHJjbXAo UFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGVsZXRlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tp XS5wdWJ0cnVuY2F0ZSA9CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnRydW5j YXRlKSwgInQiKSA9PSAwKTsKKwkJcHViaW5mb1tpXS5wdWJkZGxfYWxsID0KKwkJCShzdHJjbXAo UFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRsX2FsbCksICJ0IikgPT0gMCk7CisJCXB1YmluZm9b aV0ucHViZGRsX3RhYmxlID0KKwkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHViZGRs X3RhYmxlKSwgInQiKSA9PSAwKTsKIAkJcHViaW5mb1tpXS5wdWJ2aWFyb290ID0KIAkJCShzdHJj bXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidmlhcm9vdCksICJ0IikgPT0gMCk7CiAKQEAgLTQw OTcsNyArNDEwNiwyNCBAQCBkdW1wUHVibGljYXRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgUHVi bGljYXRpb25JbmZvICpwdWJpbmZvKQogCQlmaXJzdCA9IGZhbHNlOwogCX0KIAotCWFwcGVuZFBR RXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks ICInIik7CisKKwlpZiAocHViaW5mby0+cHViZGRsX2FsbCB8fCBwdWJpbmZvLT5wdWJkZGxfdGFi bGUpCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgZGRsID0gJyIpOworCQlp ZiAocHViaW5mby0+cHViZGRsX2FsbCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi YWxsIik7CisKKwkJaWYgKHB1YmluZm8tPnB1YmRkbF90YWJsZSkKKwkJeworCQkJaWYgKHB1Ymlu Zm8tPnB1YmRkbF9hbGwpCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsICIpOwor CisJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgInRhYmxlIik7CisJCX0KKworCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiciKTsKKwl9CiAKIAlpZiAocHViaW5mby0+cHVidmlh cm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290ID0gdHJ1ZSIpOwpAQCAtNzc4MCw2ICs3ODA2LDUwIEBAIGdldFRyaWdnZXJzKEFy Y2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiB9CiAKIC8q CisgKiBnZXRQdWJsaWNhdGlvbkV2ZW50VHJpZ2dlcnMKKyAqCSAgZ2V0IHRoZSBwdWJsaWNhdGlv biBldmVudCB0cmlnZ2VycyB0aGF0IHNob3VsZCBiZSBza2lwcGVkCisgKi8KK3N0YXRpYyB2b2lk CitnZXRQdWJsaWNhdGlvbkV2ZW50VHJpZ2dlcnMoQXJjaGl2ZSAqZm91dCwgU2ltcGxlU3RyaW5n TGlzdCAqc2tpcFRyaWdnZXJzKQoreworCVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAg KnJlczsKKwlpbnQJCQlpOworCWludAkJCW50dXBzOworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1 ZmZlcigpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCisJCQkJCQkgIlNFTEVDVCBv aWQgRlJPTSBwZ19wdWJsaWNhdGlvbiAiCisJCQkJCQkgIldIRVJFIHB1YmRkbF9hbGwgT1IgcHVi ZGRsX3RhYmxlIik7CisKKwlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEs IFBHUkVTX1RVUExFU19PSyk7CisJbnR1cHMgPSBQUW50dXBsZXMocmVzKTsKKworCWZvciAoaSA9 IDA7IGkgPCBudHVwczsgaSsrKQorCXsKKwkJY2hhciAqdHJpZ25hbWU7CisJCU9pZCBwdWJpZCA9 IGF0b29pZChQUWdldHZhbHVlKHJlcywgMCwgMCkpOworCisJCXRyaWduYW1lID0gcHNwcmludGYo UFVCX0VWRU5UX1RSSUdfUFJFRklYLCBQVUJfVFJJR19FVkVOVDEsIHB1YmlkKTsKKwkJc2ltcGxl X3N0cmluZ19saXN0X2FwcGVuZChza2lwVHJpZ2dlcnMsIHRyaWduYW1lKTsKKworCQl0cmlnbmFt ZSA9IHBzcHJpbnRmKFBVQl9FVkVOVF9UUklHX1BSRUZJWCwgUFVCX1RSSUdfRVZFTlQyLCBwdWJp ZCk7CisJCXNpbXBsZV9zdHJpbmdfbGlzdF9hcHBlbmQoc2tpcFRyaWdnZXJzLCB0cmlnbmFtZSk7 CisKKwkJdHJpZ25hbWUgPSBwc3ByaW50ZihQVUJfRVZFTlRfVFJJR19QUkVGSVgsIFBVQl9UUklH X0VWRU5UMywgcHViaWQpOworCQlzaW1wbGVfc3RyaW5nX2xpc3RfYXBwZW5kKHNraXBUcmlnZ2Vy cywgdHJpZ25hbWUpOworCisJCXRyaWduYW1lID0gcHNwcmludGYoUFVCX0VWRU5UX1RSSUdfUFJF RklYLCBQVUJfVFJJR19FVkVOVDQsIHB1YmlkKTsKKwkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVu ZChza2lwVHJpZ2dlcnMsIHRyaWduYW1lKTsKKwl9CisKKwlQUWNsZWFyKHJlcyk7CisKKwlkZXN0 cm95UFFFeHBCdWZmZXIocXVlcnkpOworfQorCisvKgogICogZ2V0RXZlbnRUcmlnZ2VycwogICoJ ICBnZXQgaW5mb3JtYXRpb24gYWJvdXQgZXZlbnQgdHJpZ2dlcnMKICAqLwpAQCAtNzc5OSw2ICs3 ODY5LDcgQEAgZ2V0RXZlbnRUcmlnZ2VycyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bUV2ZW50VHJp Z2dlcnMpCiAJCQkJaV9ldnRmbmFtZSwKIAkJCQlpX2V2dGVuYWJsZWQ7CiAJaW50CQkJbnR1cHM7 CisJU2ltcGxlU3RyaW5nTGlzdCBza2lwVHJpZ2dlcnMgPSB7TlVMTCwgTlVMTH07CiAKIAkvKiBC ZWZvcmUgOS4zLCB0aGVyZSBhcmUgbm8gZXZlbnQgdHJpZ2dlcnMgKi8KIAlpZiAoZm91dC0+cmVt b3RlVmVyc2lvbiA8IDkwMzAwKQpAQCAtNzgwNyw2ICs3ODc4LDggQEAgZ2V0RXZlbnRUcmlnZ2Vy cyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bUV2ZW50VHJpZ2dlcnMpCiAJCXJldHVybiBOVUxMOwog CX0KIAorCWdldFB1YmxpY2F0aW9uRXZlbnRUcmlnZ2Vycyhmb3V0LCAmc2tpcFRyaWdnZXJzKTsK KwogCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LApAQCAtNzg1MSw5ICs3OTI0LDE0IEBAIGdldEV2ZW50VHJpZ2dlcnMoQXJjaGl2ZSAq Zm91dCwgaW50ICpudW1FdmVudFRyaWdnZXJzKQogCQlldnRpbmZvW2ldLmV2dGVuYWJsZWQgPSAq KFBRZ2V0dmFsdWUocmVzLCBpLCBpX2V2dGVuYWJsZWQpKTsKIAogCQkvKiBEZWNpZGUgd2hldGhl ciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8KLQkJc2VsZWN0RHVtcGFibGVPYmplY3QoJihldnRpbmZv W2ldLmRvYmopLCBmb3V0KTsKKwkJaWYgKHNpbXBsZV9zdHJpbmdfbGlzdF9tZW1iZXIoJnNraXBU cmlnZ2VycywgZXZ0aW5mb1tpXS5ldnRuYW1lKSkKKwkJCWV2dGluZm9baV0uZG9iai5kdW1wPSBE VU1QX0NPTVBPTkVOVF9OT05FOworCQllbHNlCisJCQlzZWxlY3REdW1wYWJsZU9iamVjdCgmKGV2 dGluZm9baV0uZG9iaiksIGZvdXQpOwogCX0KIAorCXNpbXBsZV9zdHJpbmdfbGlzdF9kZXN0cm95 KCZza2lwVHJpZ2dlcnMpOworCiAJUFFjbGVhcihyZXMpOwogCiAJZGVzdHJveVBRRXhwQnVmZmVy KHF1ZXJ5KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IGNkY2EwYjkuLjNlYTMwY2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApA QCAtNjE4LDYgKzYxOCw4IEBAIHR5cGVkZWYgc3RydWN0IF9QdWJsaWNhdGlvbkluZm8KIAlib29s CQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRydW5jYXRlOworCWJv b2wJCXB1YmRkbF9hbGw7CisJYm9vbAkJcHViZGRsX3RhYmxlOwogCWJvb2wJCXB1YnZpYXJvb3Q7 CiB9IFB1YmxpY2F0aW9uSW5mbzsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAy X3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCAxODdl NGI4Li5jODM3NWNiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5w bAorKysgYi9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbApAQCAtMjU2Nyw3ICsyNTY3 LDcgQEAgbXkgJXRlc3RzID0gKAogCQljcmVhdGVfb3JkZXIgPT4gNTAsCiAJCWNyZWF0ZV9zcWwg ICA9PiAnQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIKIAkJCQkJCSBGT1IgQUxMIFRBQkxFUwotCQkJ CQkJIFdJVEggKHB1Ymxpc2ggPSBcJ1wnKTsnLAorCQkJCQkJIFdJVEggKHB1Ymxpc2ggPSBcJ1wn LCBkZGwgPSBcJ1wnKTsnLAogCQlyZWdleHAgPT4gcXIvXgogCQkJXFFDUkVBVEUgUFVCTElDQVRJ T04gcHViMiBGT1IgQUxMIFRBQkxFUyBXSVRIIChwdWJsaXNoID0gJycpO1xFCiAJCQkveG0sCmRp ZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5jCmluZGV4IDIwODRmNWMuLjY2N2U2MmIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNj cmliZS5jCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02MTU3LDcgKzYxNTcsNyBA QCBsaXN0UHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUFFFeHBCdWZmZXJEYXRh IGJ1ZjsKIAlQR3Jlc3VsdCAgICpyZXM7CiAJcHJpbnRRdWVyeU9wdCBteW9wdCA9IHBzZXQucG9w dDsKLQlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVfY29sdW1uc1tdID0ge2ZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisJc3RhdGljIGNv bnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAKIAlpZiAocHNl dC5zdmVyc2lvbiA8IDEwMDAwMCkKIAl7CkBAIC02MTc0LDEzICs2MTc0LDIzIEBAIGxpc3RQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkgICJTRUxFQ1QgcHVibmFtZSBBUyBcIiVzXCIsXG4iCiAJCQkJCSAgIiAgcGdfY2F0YWxv Zy5wZ19nZXRfdXNlcmJ5aWQocHVib3duZXIpIEFTIFwiJXNcIixcbiIKLQkJCQkJICAiICBwdWJh bGx0YWJsZXMgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIgIHB1Ymluc2VydCBBUyBcIiVzXCIsXG4i Ci0JCQkJCSAgIiAgcHVidXBkYXRlIEFTIFwiJXNcIixcbiIKLQkJCQkJICAiICBwdWJkZWxldGUg QVMgXCIlc1wiIiwKKwkJCQkJICAiICBwdWJhbGx0YWJsZXMgQVMgXCIlc1wiIiwKIAkJCQkJICBn ZXR0ZXh0X25vb3AoIk5hbWUiKSwKIAkJCQkJICBnZXR0ZXh0X25vb3AoIk93bmVyIiksCi0JCQkJ CSAgZ2V0dGV4dF9ub29wKCJBbGwgdGFibGVzIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJBbGwg dGFibGVzIikpOworCWlmIChwc2V0LnN2ZXJzaW9uID49IDE2MDAwMCkKKwl7CisJCWFwcGVuZFBR RXhwQnVmZmVyKCZidWYsCisJCQkJCQkgICIsXG4gIHB1YmRkbF9hbGwgQVMgXCIlc1wiIiwKKwkJ CQkJCSAgZ2V0dGV4dF9ub29wKCJBbGwgRERMcyIpKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwKKwkJCQkJCSAgIixcbiAgcHViZGRsX3RhYmxlIEFTIFwiJXNcIiIsCisJCQkJCQkgIGdldHRl eHRfbm9vcCgiVGFibGUgRERMcyIpKTsKKwl9CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJ CQkJICAiLFxuICBwdWJpbnNlcnQgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIHB1YnVwZGF0ZSBB UyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcHViZGVsZXRlIEFTIFwiJXNcIiIsCiAJCQkJCSAgZ2V0 dGV4dF9ub29wKCJJbnNlcnRzIiksCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJVcGRhdGVzIiksCiAJ CQkJCSAgZ2V0dGV4dF9ub29wKCJEZWxldGVzIikpOwpAQCAtNjE5Miw3ICs2MjAyLDYgQEAgbGlz dFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLAogCQkJCQkJICAiLFxuICBwdWJ2aWFyb290IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdldHRl eHRfbm9vcCgiVmlhIHJvb3QiKSk7Ci0KIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJ CQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxuIik7CiAKQEAgLTYyODIsNiAr NjI5MSw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUEdy ZXN1bHQgICAqcmVzOwogCWJvb2wJCWhhc19wdWJ0cnVuY2F0ZTsKIAlib29sCQloYXNfcHVidmlh cm9vdDsKKwlib29sCQloYXNfcHViZGRsOwogCiAJUFFFeHBCdWZmZXJEYXRhIHRpdGxlOwogCXBy aW50VGFibGVDb250ZW50IGNvbnQ7CkBAIC02Mjk4LDEzICs2MzA4LDE5IEBAIGRlc2NyaWJlUHVi bGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAloYXNfcHVidHJ1bmNhdGUgPSAocHNl dC5zdmVyc2lvbiA+PSAxMTAwMDApOwogCWhhc19wdWJ2aWFyb290ID0gKHBzZXQuc3ZlcnNpb24g Pj0gMTMwMDAwKTsKKwloYXNfcHViZGRsID0gIChwc2V0LnN2ZXJzaW9uID49IDE2MDAwMCk7CiAK IAlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CiAKIAlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJ CQkgICJTRUxFQ1Qgb2lkLCBwdWJuYW1lLFxuIgogCQkJCQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0 X3VzZXJieWlkKHB1Ym93bmVyKSBBUyBvd25lcixcbiIKLQkJCQkJICAiICBwdWJhbGx0YWJsZXMs IHB1Ymluc2VydCwgcHVidXBkYXRlLCBwdWJkZWxldGUiKTsKKwkJCQkJICAiICBwdWJhbGx0YWJs ZXMiKTsKKwlpZiAoaGFzX3B1YmRkbCkKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJ CQkJCQkgIiwgcHViZGRsX2FsbCwgcHViZGRsX3RhYmxlIik7CisJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmJ1ZiwKKwkJCQkJCSAiLCAgcHViaW5zZXJ0LCBwdWJ1cGRhdGUsIHB1YmRlbGV0ZSIpOwog CWlmIChoYXNfcHVidHJ1bmNhdGUpCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJ CQkJICIsIHB1YnRydW5jYXRlIik7CkBAIC02MzYyLDYgKzYzNzgsOCBAQCBkZXNjcmliZVB1Ymxp Y2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCQkJbmNvbHMrKzsKIAkJaWYgKGhhc19wdWJ2 aWFyb290KQogCQkJbmNvbHMrKzsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQluY29scyArPSAyOwog CiAJCWluaXRQUUV4cEJ1ZmZlcigmdGl0bGUpOwogCQlwcmludGZQUUV4cEJ1ZmZlcigmdGl0bGUs IF8oIlB1YmxpY2F0aW9uICVzIiksIHB1Ym5hbWUpOwpAQCAtNjM2OSw2ICs2Mzg3LDExIEBAIGRl c2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAkJcHJpbnRUYWJsZUFk ZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJPd25lciIpLCB0cnVlLCBhbGlnbik7CiAJCXBy aW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpLCB0cnVl LCBhbGlnbik7CisJCWlmIChoYXNfcHViZGRsKQorCQl7CisJCQlwcmludFRhYmxlQWRkSGVhZGVy KCZjb250LCBnZXR0ZXh0X25vb3AoIkFsbCBERExzIiksIHRydWUsIGFsaWduKTsKKwkJCXByaW50 VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiVGFibGUgRERMcyIpLCB0cnVlLCBh bGlnbik7CisJCX0KIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4dF9ub29wKCJJ bnNlcnRzIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0 dGV4dF9ub29wKCJVcGRhdGVzIiksIHRydWUsIGFsaWduKTsKIAkJcHJpbnRUYWJsZUFkZEhlYWRl cigmY29udCwgZ2V0dGV4dF9ub29wKCJEZWxldGVzIiksIHRydWUsIGFsaWduKTsKQEAgLTYzODYs NiArNjQwOSwxMSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQog CQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA3KSwgZmFsc2Us IGZhbHNlKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNv bnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsKKwkJaWYgKGhhc19wdWJk ZGwpCisJCXsKKwkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwg OSksIGZhbHNlLCBmYWxzZSk7CisJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1 ZShyZXMsIGksIDEwKSwgZmFsc2UsIGZhbHNlKTsKKwkJfQogCiAJCWlmICghcHViYWxsdGFibGVz KQogCQl7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA1Y2QyNjNlLi5iNjI3NmQxIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExOTUzLDUgKzExOTUzLDE3IEBACiB7IG9pZCA9PiAn NDY0MycsIGRlc2NyID0+ICdleHBhbmQgSlNPTiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gdGV4dCBE REwgY29tbWFuZCcsCiAgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywg cHJvcmV0dHlwZSA9PiAndGV4dCcsCiAgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKK3sgb2lkID0+ICc0NjQ0JywgZGVzY3Ig PT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgZW5kJywKKyAgcHJvbmFtZSA9PiAn cHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnLCBwcm9yZXR0eXBlID0+ICdldmVu dF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25f ZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnIH0sCit7IG9pZCA9PiAnNDY0NScsIGRlc2NyID0+ICd0 cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0YXJ0JywKKyAgcHJvbmFtZSA9PiAncHVi bGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcsIHByb3JldHR5cGUgPT4gJ2V2ZW50 X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JyB9LAoreyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAn dHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKKyAgcHJvbmFt ZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAn ZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0 aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4g J3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUg PT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4g J2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNh dGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnIH0sCiAKIF0KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHVibGljYXRpb24uaAppbmRleCA3MTVmMmEyLi4xY2YwMmE0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5oCkBAIC0yMSw2ICsyMSwxNSBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdf cHVibGljYXRpb25fZC5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKIAorLyogUHVibGlj YXRpb24gdHJpZ2dlciBldmVudHMgKi8KKyNkZWZpbmUgUFVCX1RSSUdfRVZFTlQxICJkZGxfY29t bWFuZF9lbmQiCisjZGVmaW5lIFBVQl9UUklHX0VWRU5UMiAiZGRsX2NvbW1hbmRfc3RhcnQiCisj ZGVmaW5lIFBVQl9UUklHX0VWRU5UMyAidGFibGVfcmV3cml0ZSIKKyNkZWZpbmUgUFVCX1RSSUdf RVZFTlQ0ICJ0YWJsZV9pbml0X3dyaXRlIgorCisvKiBQdWJsaWNhdGlvbiBldmVudCB0cmlnZ2Vy IHByZWZpeCAqLworI2RlZmluZSBQVUJfRVZFTlRfVFJJR19QUkVGSVggInBnX2RlcGFyc2VfdHJp Z18lc18ldSIKKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCXBnX3B1YmxpY2F0aW9uIGRlZmlu aXRpb24uICBjcHAgdHVybnMgdGhpcyBpbnRvCiAgKgkJdHlwZWRlZiBzdHJ1Y3QgRm9ybURhdGFf cGdfcHVibGljYXRpb24KQEAgLTU0LDYgKzYzLDEyIEBAIENBVEFMT0cocGdfcHVibGljYXRpb24s NjEwNCxQdWJsaWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVlIGlmIHBhcnRpdGlvbiBjaGFu Z2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8KIAlib29sCQlwdWJ2aWFyb290 OworCisJLyogdHJ1ZSBpZiBhbGwgc3VwcG9ydGVkIGRkbHMgYXJlIHB1Ymxpc2hlZCAqLworCWJv b2wJCXB1YmRkbF9hbGw7CisKKwkvKiB0cnVlIGlmIHRhYmxlIGRkbHMgYXJlIHB1Ymxpc2hlZCAq LworCWJvb2wJCXB1YmRkbF90YWJsZTsKIH0gRm9ybURhdGFfcGdfcHVibGljYXRpb247CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzg3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGlj YXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29s CQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGxfYWxsOworCWJvb2wJCXB1YmRkbF90YWJsZTsK IH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkRlc2MK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAppbmRleCBhOTdlOGI3Li41ZjZkZDIyIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3Jj L2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCkBAIC05NCw2ICs5NCwxMCBAQCBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJERExDb21tYW5kRW5kKE5vZGUgKnBhcnNldHJlZSk7CiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJTUUxEcm9wKE5vZGUgKnBhcnNldHJlZSk7CiBleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQs IGludCByZWFzb24pOwogCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0 YXJ0KE5vZGUgKnBhcnNldHJlZSk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJUYWJsZUluaXRX cml0ZShOb2RlICpwYXJzZXRyZWUsIE9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CitleHRlcm4gdm9p ZCBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MpOwor CiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJCZWdpbkNvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRl cm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIGJvb2wg dHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lkKTsKQEAgLTExMCw3ICsxMTQsMTIgQEAgZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLAogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBh cnNldHJlZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlUmVsaWQoT2lkIG9i amVjdElkKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21k KE5vZGUgKnN1YmNtZCwKLQkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVzcyk7CisJCQkJ CQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkJCQlib29sIHJld3JpdGUp OworCitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFydChBbHRlclRhYmxlQ21k ICpzdWJjbWQsIFJlbGF0aW9uIHJlbCk7CitleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclR5 cGVFbmQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MsCisJCQkJCQkJCQkgYm9v bCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVFbmQodm9pZCk7 CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RHcmFudChJbnRlcm5hbEdyYW50ICpp c3RtdCk7CkBAIC0xMjAsNiArMTI5LDkgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVj dEFsdGVyT3BGYW0oQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQsCiBleHRlcm4gdm9pZCBFdmVudFRy aWdnZXJDb2xsZWN0Q3JlYXRlT3BDbGFzcyhDcmVhdGVPcENsYXNzU3RtdCAqc3RtdCwKIAkJCQkJ CQkJCQkJIE9pZCBvcGNvaWQsIExpc3QgKm9wZXJhdG9ycywKIAkJCQkJCQkJCQkJIExpc3QgKnBy b2NlZHVyZXMpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZVB1YmxpY2F0 aW9uKENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKKwkJCQkJCQkJCQkJCSBPaWQgcHViaWQs IExpc3QgKnJlbGF0aW9ucywKKwkJCQkJCQkJCQkJCSBMaXN0ICpzY2hlbWFzKTsKIGV4dGVybiB2 b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRTQ29uZmlnKEFsdGVyVFNDb25maWd1cmF0aW9u U3RtdCAqc3RtdCwKIAkJCQkJCQkJCQkJIE9pZCBjZmdJZCwgT2lkICpkaWN0SWRzLCBpbnQgbmRp Y3RzKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlckRlZlByaXZzKEFsdGVy RGVmYXVsdFByaXZpbGVnZXNTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHByb3RvLmgKaW5kZXggMGVhMmRmNS4uNWZiM2JhYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmgKQEAgLTY2LDYgKzY2LDcgQEAgdHlwZWRlZiBlbnVtIExvZ2ljYWxSZXBN c2dUeXBlCiAJTE9HSUNBTF9SRVBfTVNHX1JFTEFUSU9OID0gJ1InLAogCUxPR0lDQUxfUkVQX01T R19UWVBFID0gJ1knLAogCUxPR0lDQUxfUkVQX01TR19NRVNTQUdFID0gJ00nLAorCUxPR0lDQUxf UkVQX01TR19EREwgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYics CiAJTE9HSUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1J VF9QUkVQQVJFRCA9ICdLJywKQEAgLTI0Niw2ICsyNDcsOSBAQCBleHRlcm4gTGlzdCAqbG9naWNh bHJlcF9yZWFkX3RydW5jYXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJCQkgIGJvb2wgKmNhc2Nh ZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21l c3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwK IAkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBz eiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2Rk bChTdHJpbmdJbmZvIG91dCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJCQkJY29uc3QgY2hhciAq cHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiBjaGFyICpsb2dp Y2FscmVwX3JlYWRfZGRsKFN0cmluZ0luZm8gaW4sIFhMb2dSZWNQdHIgKmxzbiwgY29uc3QgY2hh ciAqKnByZWZpeCwgU2l6ZSAqc3opOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwo U3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgUmVsYXRpb24gcmVs LCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNh bHJlcF9yZWFkX3JlbChTdHJpbmdJbmZvIGluKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1 dF9wbHVnaW4uaAppbmRleCA1ZWQ1ZTZhLi40NGJhZjQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vb3V0cHV0X3BsdWdpbi5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBPVVRQVVRfUExVR0lO X0gKICNkZWZpbmUgT1VUUFVUX1BMVUdJTl9ICiAKLSNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxt ZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogCiBzdHJ1 Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dDsKQEAgLTIxNSw2ICsyMTQsMTkgQEAgdHlwZWRlZiB2 b2lkICgqTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgKIAkJCQkJCQkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogLyoK KyAqIENhbGxiYWNrIGZvciBzdHJlYW1pbmcgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMg ZnJvbSBpbi1wcm9ncmVzcworICogdHJhbnNhY3Rpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpM b2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJ CQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpw cmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJ CQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAqIENhbGxiYWNrIGZvciBzdHJl YW1pbmcgdHJ1bmNhdGVzIGZyb20gaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zLgogICovCiB0eXBl ZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtVHJ1bmNhdGVDQikgKHN0cnVjdCBMb2dpY2Fs RGVjb2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTMsNiArMjY1LDcgQEAgdHlwZWRlZiBzdHJ1Y3Qg T3V0cHV0UGx1Z2luQ2FsbGJhY2tzCiAJTG9naWNhbERlY29kZVN0cmVhbUNvbW1pdENCIHN0cmVh bV9jb21taXRfY2I7CiAJTG9naWNhbERlY29kZVN0cmVhbUNoYW5nZUNCIHN0cmVhbV9jaGFuZ2Vf Y2I7CiAJTG9naWNhbERlY29kZVN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1fbWVzc2FnZV9jYjsKKwlM b2dpY2FsRGVjb2RlU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGxfY2I7CiAJTG9naWNhbERl Y29kZVN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlX2NiOwogfSBPdXRwdXRQbHVnaW5D YWxsYmFja3M7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 LmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCmluZGV4IGI0YTgwMTUuLmEy Y2Y5OWIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaApAQCAtMjUsNiArMjUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBQR091dHB1dERhdGEKIAl1aW50MzIJCXByb3RvY29sX3ZlcnNpb247CiAJ TGlzdAkgICAqcHVibGljYXRpb25fbmFtZXM7CiAJTGlzdAkgICAqcHVibGljYXRpb25zOworCUxp c3QJICAgKmRlbGV0ZWRfcmVsaWRzOwogCWJvb2wJCWJpbmFyeTsKIAljaGFyCQlzdHJlYW1pbmc7 CiAJYm9vbAkJbWVzc2FnZXM7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgK aW5kZXggZTkyYjgxNi4uYjBmYWRlNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vcmVvcmRlcmJ1ZmZlci5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJi dWZmZXIuaApAQCAtNTQxLDYgKzU0MSwxNyBAQCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVy U3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXpl IHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERM IG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJlICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVm ZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIs CisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJ CQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNt ZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBzeiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICpt ZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5jYXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlw ZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJ ICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC02MTcsNiArNjI4LDcgQEAgc3RydWN0IFJlb3JkZXJC dWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9y ZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3Ry ZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNz YWdlQ0Igc3RyZWFtX2RkbDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1f dHJ1bmNhdGU7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaCBi L3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnLmgKaW5kZXggMWU3NTE0ZC4uMDc2YzI3ZSAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2Nt ZHRhZy5oCkBAIC0xNiw3ICsxNiw3IEBACiAvKiBidWZmZXIgc2l6ZSByZXF1aXJlZCBmb3IgY29t bWFuZCBjb21wbGV0aW9uIHRhZ3MgKi8KICNkZWZpbmUgQ09NUExFVElPTl9UQUdfQlVGU0laRQk2 NAogCi0jZGVmaW5lIFBHX0NNRFRBRyh0YWcsIG5hbWUsIGV2dHJnb2ssIHJ3cm9rLCByb3djbnQp IFwKKyNkZWZpbmUgUEdfQ01EVEFHKHRhZywgbmFtZSwgZXZ0cmdvaywgcndyb2ssIHJvd2NudCwg ZGRscmVwbG9rKSBcCiAJdGFnLAogCiB0eXBlZGVmIGVudW0gQ29tbWFuZFRhZwpAQCAtNTMsOSAr NTMsMTEgQEAgQ29weVF1ZXJ5Q29tcGxldGlvbihRdWVyeUNvbXBsZXRpb24gKmRzdCwgY29uc3Qg UXVlcnlDb21wbGV0aW9uICpzcmMpCiBleHRlcm4gdm9pZCBJbml0aWFsaXplUXVlcnlDb21wbGV0 aW9uKFF1ZXJ5Q29tcGxldGlvbiAqcWMpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKkdldENvbW1hbmRU YWdOYW1lKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gY29uc3QgY2hhciAqR2V0Q29t bWFuZFRhZ05hbWVBbmRMZW4oQ29tbWFuZFRhZyBjb21tYW5kVGFnLCBTaXplICpsZW4pOworZXh0 ZXJuIENvbW1hbmRUYWcgKkdldENvbW1hbmRUYWdzRm9yRERMUmVwbChpbnQgKm5jb21tYW5kcyk7 CiBleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19kaXNwbGF5X3Jvd2NvdW50KENvbW1hbmRUYWcgY29t bWFuZFRhZyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19ldmVudF90cmlnZ2VyX29rKENvbW1h bmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gYm9vbCBjb21tYW5kX3RhZ190YWJsZV9yZXdyaXRl X29rKENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CitleHRlcm4gYm9vbCBjb21tYW5kX3RhZ19kZGxf cmVwbGljYXRpb25fb2soQ29tbWFuZFRhZyBjb21tYW5kVGFnKTsKIGV4dGVybiBDb21tYW5kVGFn IEdldENvbW1hbmRUYWdFbnVtKGNvbnN0IGNoYXIgKmNvbW1hbmRuYW1lKTsKIGV4dGVybiBTaXpl IEJ1aWxkUXVlcnlDb21wbGV0aW9uU3RyaW5nKGNoYXIgKmJ1ZmYsIGNvbnN0IFF1ZXJ5Q29tcGxl dGlvbiAqcWMsCiAJCQkJCQkJCQkgICBib29sIG5hbWVvbmx5KTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oIGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgK aW5kZXggZTczOGFjMS4uMThiNjllNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9jbWR0 YWdsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWdsaXN0LmgKQEAgLTIzLDE5NiAr MjMsMTk2IEBACiAgKiB0ZXh0dWFsIG5hbWUsIHNvIHRoYXQgd2UgY2FuIGJzZWFyY2ggb24gaXQ7 IHNlZSBHZXRDb21tYW5kVGFnRW51bSgpLgogICovCiAKLS8qIHN5bWJvbCBuYW1lLCB0ZXh0dWFs IG5hbWUsIGV2ZW50X3RyaWdnZXJfb2ssIHRhYmxlX3Jld3JpdGVfb2ssIHJvd2NvdW50ICovCi1Q R19DTURUQUcoQ01EVEFHX1VOS05PV04sICI/Pz8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19BTFRFUl9BQ0NFU1NfTUVUSE9ELCAiQUxURVIgQUNDRVNTIE1FVEhPRCIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQUdHUkVHQVRFLCAi QUxURVIgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9DQVNULCAiQUxURVIgQ0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfQ09MTEFUSU9OLCAiQUxURVIgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT05TVFJBSU5ULCAiQUxURVIgQ09OU1RSQUlO VCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09OVkVSU0lP TiwgIkFMVEVSIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0FMVEVSX0RBVEFCQVNFLCAiQUxURVIgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ERUZBVUxUX1BSSVZJTEVHRVMsICJBTFRFUiBERUZB VUxUIFBSSVZJTEVHRVMiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX0RPTUFJTiwgIkFMVEVSIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfRVZFTlRfVFJJR0dFUiwgIkFMVEVSIEVWRU5UIFRSSUdHRVIiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9FWFRFTlNJT04sICJBTFRF UiBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVS X0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fVEFCTEUsICJB TFRFUiBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19BTFRFUl9GVU5DVElPTiwgIkFMVEVSIEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTFRFUl9JTkRFWCwgIkFMVEVSIElOREVYIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQU5HVUFHRSwgIkFMVEVSIExBTkdVQUdF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQVJHRV9PQkpF Q1QsICJBTFRFUiBMQVJHRSBPQkpFQ1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0FMVEVSX01BVEVSSUFMSVpFRF9WSUVXLCAiQUxURVIgTUFURVJJQUxJWkVEIFZJRVci LCB0cnVlLCB0cnVlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1IsICJB TFRFUiBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxU RVJfT1BFUkFUT1JfQ0xBU1MsICJBTFRFUiBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfT1BFUkFUT1JfRkFNSUxZLCAiQUxURVIgT1BF UkFUT1IgRkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9QT0xJQ1ksICJBTFRFUiBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0FMVEVSX1BST0NFRFVSRSwgIkFMVEVSIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUFVCTElDQVRJT04sICJBTFRFUiBQVUJMSUNB VElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUk9MRSwg IkFMVEVSIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9ST1VUSU5FLCAiQUxURVIgUk9VVElORSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfUlVMRSwgIkFMVEVSIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX1NDSEVNQSwgIkFMVEVSIFNDSEVNQSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VRVUVOQ0UsICJBTFRFUiBTRVFVRU5D RSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VSVkVSLCAi QUxURVIgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9TVEFUSVNUSUNTLCAiQUxURVIgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQUxURVJfU1VCU0NSSVBUSU9OLCAiQUxURVIgU1VCU0NSSVBUSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TWVNURU0sICJBTFRF UiBTWVNURU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9U QUJMRSwgIkFMVEVSIFRBQkxFIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FMVEVSX1RBQkxFU1BBQ0UsICJBTFRFUiBUQUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkFM VEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksICJBTFRFUiBURVhUIFNF QVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9URVhUX1NFQVJDSF9QQVJTRVIsICJBTFRFUiBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1RFTVBM QVRFLCAiQUxURVIgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX1RSQU5TRk9STSwgIkFMVEVSIFRSQU5TRk9STSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJJR0dFUiwgIkFMVEVSIFRS SUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RZUEUs ICJBTFRFUiBUWVBFIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVS X1VTRVJfTUFQUElORywgIkFMVEVSIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVklFVywgIkFMVEVSIFZJRVciLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FOQUxZWkUsICJBTkFMWVpFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQkVHSU4sICJCRUdJTiIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NBTEwsICJDQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lOVCwgIkNIRUNLUE9JTlQiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DTE9TRSwgIkNMT1NFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SLCAiQ0xPU0UgQ1VSU09SIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SX0FMTCwg IkNMT1NFIENVUlNPUiBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DTFVTVEVSLCAiQ0xVU1RFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0NPTU1FTlQsICJDT01NRU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DT01NSVQsICJDT01NSVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DT01NSVRfUFJFUEFSRUQsICJDT01NSVQgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DT1BZLCAiQ09QWSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK LVBHX0NNRFRBRyhDTURUQUdfQ09QWV9GUk9NLCAiQ09QWSBGUk9NIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FDQ0VTU19NRVRIT0QsICJDUkVBVEUgQUND RVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X0FHR1JFR0FURSwgIkNSRUFURSBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NSRUFURV9DQVNULCAiQ1JFQVRFIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT0xMQVRJT04sICJDUkVBVEUgQ09MTEFUSU9O IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09OU1RSQUlO VCwgIkNSRUFURSBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfQ09OVkVSU0lPTiwgIkNSRUFURSBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfREFUQUJBU0UsICJDUkVBVEUgREFUQUJB U0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRE9NQUlO LCAiQ1JFQVRFIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX0VWRU5UX1RSSUdHRVIsICJDUkVBVEUgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9FWFRFTlNJT04sICJDUkVBVEUgRVhU RU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9S RUlHTl9EQVRBX1dSQVBQRVIsICJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9GT1JFSUdOX1RBQkxFLCAiQ1JF QVRFIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0NSRUFURV9GVU5DVElPTiwgIkNSRUFURSBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0lOREVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTEFOR1VBR0UsICJDUkVBVEUgTEFO R1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9NQVRF UklBTElaRURfVklFVywgIkNSRUFURSBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SLCAiQ1JFQVRFIE9QRVJBVE9S IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1Jf Q0xBU1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFksICJDUkVBVEUgT1BFUkFUT1IgRkFN SUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUE9MSUNZ LCAiQ1JFQVRFIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1BST0NFRFVSRSwgIkNSRUFURSBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9QVUJMSUNBVElPTiwgIkNSRUFURSBQVUJMSUNBVElP TiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JPTEUsICJD UkVBVEUgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFU RV9ST1VUSU5FLCAiQ1JFQVRFIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NSRUFURV9SVUxFLCAiQ1JFQVRFIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9TQ0hFTUEsICJDUkVBVEUgU0NIRU1BIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0VRVUVOQ0UsICJDUkVBVEUg U0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9T RVJWRVIsICJDUkVBVEUgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfU1RBVElTVElDUywgIkNSRUFURSBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1VCU0NSSVBUSU9OLCAiQ1JFQVRFIFNV QlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X1RBQkxFLCAiQ1JFQVRFIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfVEFCTEVfQVMsICJDUkVBVEUgVEFCTEUgQVMiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRVNQQUNFLCAiQ1JFQVRFIFRBQkxFU1BB Q0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9T RUFSQ0hfQ09ORklHVVJBVElPTiwgIkNSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hf RElDVElPTkFSWSwgIkNSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiQ1JF QVRFIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFRF TVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJB TlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX1RSSUdHRVIsICJDUkVBVEUgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RZUEUsICJDUkVBVEUgVFlQRSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1VTRVJfTUFQUElORywgIkNS RUFURSBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RFQUxMT0NBVEUsICJERUFMTE9DQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FURV9BTEwsICJERUFMTE9DQVRFIEFMTCIsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RFQ0xBUkVfQ1VSU09SLCAiREVDTEFS RSBDVVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ERUxFVEUs ICJERUxFVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkQs ICJESVNDQVJEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRElTQ0FS RF9BTEwsICJESVNDQVJEIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RJU0NBUkRfUExBTlMsICJESVNDQVJEIFBMQU5TIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9TRVFVRU5DRVMsICJESVNDQVJEIFNFUVVFTkNFUyIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfVEVNUCwgIkRJ U0NBUkQgVEVNUCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RPLCAi RE8iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0FDQ0VTU19N RVRIT0QsICJEUk9QIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RST1BfQUdHUkVHQVRFLCAiRFJPUCBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQ0FTVCwgIkRST1AgQ0FTVCIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9DT0xMQVRJT04sICJEUk9QIENPTExB VElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9DT05TVFJB SU5ULCAiRFJPUCBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19EUk9QX0NPTlZFUlNJT04sICJEUk9QIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfREFUQUJBU0UsICJEUk9QIERBVEFCQVNFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9ET01BSU4sICJEUk9QIERP TUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9FVkVOVF9U UklHR0VSLCAiRFJPUCBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfRFJPUF9FWFRFTlNJT04sICJEUk9QIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkRS T1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfRk9SRUlHTl9UQUJMRSwgIkRST1AgRk9SRUlHTiBUQUJMRSIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9GVU5DVElPTiwgIkRST1AgRlVOQ1RJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfSU5ERVgsICJE Uk9QIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0xB TkdVQUdFLCAiRFJPUCBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9NQVRFUklBTElaRURfVklFVywgIkRST1AgTUFURVJJQUxJWkVEIFZJRVciLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1IsICJEUk9Q IE9QRVJBVE9SIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX09Q RVJBVE9SX0NMQVNTLCAiRFJPUCBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksICJEUk9QIE9QRVJBVE9SIEZB TUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PV05FRCwg IkRST1AgT1dORUQiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1Bf UE9MSUNZLCAiRFJPUCBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RST1BfUFJPQ0VEVVJFLCAiRFJPUCBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0RST1BfUFVCTElDQVRJT04sICJEUk9QIFBVQkxJQ0FUSU9OIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1JPTEUsICJEUk9QIFJP TEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1JPVVRJTkUs ICJEUk9QIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfUlVMRSwgIkRST1AgUlVMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURU QUdfRFJPUF9TQ0hFTUEsICJEUk9QIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfRFJPUF9TRVFVRU5DRSwgIkRST1AgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU0VSVkVSLCAiRFJPUCBTRVJWRVIiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU1RBVElTVElDUywgIkRST1Ag U1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9T VUJTQ1JJUFRJT04sICJEUk9QIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfRFJPUF9UQUJMRSwgIkRST1AgVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEVTUEFDRSwgIkRST1AgVEFCTEVTUEFDRSIs IGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hf Q09ORklHVVJBVElPTiwgIkRST1AgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9ESUNUSU9OQVJZ LCAiRFJPUCBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkRST1AgVEVYVCBTRUFSQ0gg UEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRf U0VBUkNIX1RFTVBMQVRFLCAiRFJPUCBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UUkFOU0ZPUk0sICJEUk9QIFRSQU5TRk9S TSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UUklHR0VSLCAi RFJPUCBUUklHR0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9Q X1RZUEUsICJEUk9QIFRZUEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0RST1BfVVNFUl9NQVBQSU5HLCAiRFJPUCBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVklFVywgIkRST1AgVklFVyIsIHRydWUsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRVhFQ1VURSwgIkVYRUNVVEUiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19FWFBMQUlOLCAiRVhQTEFJTiIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0ZFVENILCAiRkVUQ0giLCBmYWxzZSwgZmFs c2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX0dSQU5ULCAiR1JBTlQiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0dSQU5UX1JPTEUsICJHUkFOVCBST0xFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfSU1QT1JUX0ZPUkVJR05fU0NIRU1BLCAi SU1QT1JUIEZPUkVJR04gU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19JTlNFUlQsICJJTlNFUlQiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01E VEFHX0xJU1RFTiwgIkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0xPQUQsICJMT0FEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf TE9DS19UQUJMRSwgIkxPQ0sgVEFCTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19NRVJHRSwgIk1FUkdFIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENN RFRBR19NT1ZFLCAiTU9WRSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdf Tk9USUZZLCAiTk9USUZZIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf UFJFUEFSRSwgIlBSRVBBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19QUkVQQVJFX1RSQU5TQUNUSU9OLCAiUFJFUEFSRSBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFQVNTSUdOX09XTkVELCAiUkVBU1NJR04gT1dO RUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRUZSRVNIX01BVEVS SUFMSVpFRF9WSUVXLCAiUkVGUkVTSCBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVJTkRFWCwgIlJFSU5ERVgiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRUxFQVNFLCAiUkVMRUFTRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFU0VULCAiUkVTRVQiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19SRVZPS0UsICJSRVZPS0UiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JFVk9LRV9ST0xFLCAiUkVWT0tFIFJPTEUiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ST0xMQkFDSywgIlJPTExCQUNLIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUk9MTEJBQ0tfUFJFUEFSRUQs ICJST0xMQkFDSyBQUkVQQVJFRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX1NBVkVQT0lOVCwgIlNBVkVQT0lOVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX1NFQ1VSSVRZX0xBQkVMLCAiU0VDVVJJVFkgTEFCRUwiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVCwgIlNFTEVDVCIsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9LRVlfU0hBUkUsICJTRUxFQ1QgRk9S IEtFWSBTSEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVD VF9GT1JfTk9fS0VZX1VQREFURSwgIlNFTEVDVCBGT1IgTk8gS0VZIFVQREFURSIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfU0hBUkUsICJTRUxFQ1Qg Rk9SIFNIQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU0VMRUNU X0ZPUl9VUERBVEUsICJTRUxFQ1QgRk9SIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX1NFTEVDVF9JTlRPLCAiU0VMRUNUIElOVE8iLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFVCwgIlNFVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX1NFVF9DT05TVFJBSU5UUywgIlNFVCBDT05TVFJBSU5UUyIsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NIT1csICJTSE9XIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfU1RBUlRfVFJBTlNBQ1RJT04sICJTVEFS VCBUUkFOU0FDVElPTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1RS VU5DQVRFX1RBQkxFLCAiVFJVTkNBVEUgVEFCTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19VTkxJU1RFTiwgIlVOTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfVVBEQVRFLCAiVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQot UEdfQ01EVEFHKENNRFRBR19WQUNVVU0sICJWQUNVVU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor Lyogc3ltYm9sIG5hbWUsIHRleHR1YWwgbmFtZSwgZXZlbnRfdHJpZ2dlcl9vaywgdGFibGVfcmV3 cml0ZV9vaywgcm93Y291bnQsIGRkbHJlcGxvayAqLworUEdfQ01EVEFHKENNRFRBR19VTktOT1dO LCAiPz8/IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FM VEVSX0FDQ0VTU19NRVRIT0QsICJBTFRFUiBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQUdHUkVHQVRFLCAiQUxURVIgQUdH UkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9DQVNULCAiQUxURVIgQ0FTVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQUxURVJfQ09MTEFUSU9OLCAiQUxURVIgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9DT05TVFJBSU5ULCAiQUxURVIg Q09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX0NPTlZFUlNJT04sICJBTFRFUiBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9EQVRBQkFTRSwgIkFMVEVSIERBVEFCQVNF IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0RF RkFVTFRfUFJJVklMRUdFUywgIkFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRE9NQUlOLCAiQUxURVIgRE9N QUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9F VkVOVF9UUklHR0VSLCAiQUxURVIgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9FWFRFTlNJT04sICJBTFRFUiBFWFRFTlNJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0ZP UkVJR05fREFUQV9XUkFQUEVSLCAiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0ZPUkVJR05fVEFCTEUs ICJBTFRFUiBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19BTFRFUl9GVU5DVElPTiwgIkFMVEVSIEZVTkNUSU9OIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9JTkRFWCwgIkFMVEVSIElOREVY IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9MQU5H VUFHRSwgIkFMVEVSIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19BTFRFUl9MQVJHRV9PQkpFQ1QsICJBTFRFUiBMQVJHRSBPQkpFQ1QiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9NQVRFUklBTEla RURfVklFVywgIkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SLCAiQUxURVIgT1BFUkFUT1IiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9S X0NMQVNTLCAiQUxURVIgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwgIkFMVEVSIE9QRVJBVE9S IEZBTUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfUE9MSUNZLCAiQUxURVIgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9QUk9DRURVUkUsICJBTFRFUiBQUk9DRURVUkUiLCB0cnVlLCBm YWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1BVQkxJQ0FUSU9OLCAi QUxURVIgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX1JPTEUsICJBTFRFUiBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPVVRJTkUsICJBTFRFUiBST1VUSU5FIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9SVUxFLCAiQUxU RVIgUlVMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxU RVJfU0NIRU1BLCAiQUxURVIgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9TRVFVRU5DRSwgIkFMVEVSIFNFUVVFTkNFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TRVJWRVIsICJBTFRFUiBT RVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVS X1NUQVRJU1RJQ1MsICJBTFRFUiBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVUJTQ1JJUFRJT04sICJBTFRFUiBTVUJTQ1JJUFRJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9T WVNURU0sICJBTFRFUiBTWVNURU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfQUxURVJfVEFCTEUsICJBTFRFUiBUQUJMRSIsIHRydWUsIHRydWUsIGZhbHNl LCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UQUJMRVNQQUNFLCAiQUxURVIgVEFCTEVT UEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJB VElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJf VEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VB UkNIX1BBUlNFUiwgIkFMVEVSIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9TRUFSQ0hfVEVNUExBVEUsICJB TFRFUiBURVhUIFNFQVJDSCBURU1QTEFURSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQUxURVJfVFJBTlNGT1JNLCAiQUxURVIgVFJBTlNGT1JNIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVFJJR0dFUiwgIkFM VEVSIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX1RZUEUsICJBTFRFUiBUWVBFIiwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywgIkFMVEVSIFVTRVIgTUFQUElORyIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVklFVywgIkFM VEVSIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FO QUxZWkUsICJBTkFMWVpFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0JFR0lOLCAiQkVHSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfQ0FMTCwgIkNBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfQ0hFQ0tQT0lOVCwgIkNIRUNLUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xPU0UsICJDTE9TRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DTE9TRV9DVVJTT1IsICJDTE9TRSBD VVJTT1IiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xP U0VfQ1VSU09SX0FMTCwgIkNMT1NFIENVUlNPUiBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xVU1RFUiwgIkNMVVNURVIiLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09NTUVOVCwgIkNPTU1FTlQiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NPTU1JVCwgIkNPTU1JVCIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DT01NSVRfUFJF UEFSRUQsICJDT01NSVQgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfQ09QWSwgIkNPUFkiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19DT1BZX0ZST00sICJDT1BZIEZST00iLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0FDQ0VTU19NRVRIT0QsICJDUkVB VEUgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX0FHR1JFR0FURSwgIkNSRUFURSBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DQVNULCAiQ1JFQVRFIENBU1Qi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT0xM QVRJT04sICJDUkVBVEUgQ09MTEFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfQ09OU1RSQUlOVCwgIkNSRUFURSBDT05TVFJBSU5UIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTlZFUlNJ T04sICJDUkVBVEUgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFCQVNFLCAiQ1JFQVRFIERBVEFCQVNFIiwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9ET01BSU4sICJDUkVB VEUgRE9NQUlOIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfRVZFTlRfVFJJR0dFUiwgIkNSRUFURSBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9FWFRFTlNJT04sICJDUkVB VEUgRVhURU5TSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJDUkVBVEUgRk9SRUlHTiBEQVRBIFdSQVBQ RVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9G T1JFSUdOX1RBQkxFLCAiQ1JFQVRFIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9GVU5DVElPTiwgIkNSRUFURSBGVU5DVElP TiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0lO REVYLCAiQ1JFQVRFIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfTEFOR1VBR0UsICJDUkVBVEUgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9NQVRFUklBTElaRURfVklFVywg IkNSRUFURSBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SLCAiQ1JFQVRFIE9QRVJBVE9SIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfT1BFUkFUT1JfQ0xB U1MsICJDUkVBVEUgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFksICJDUkVBVEUgT1BFUkFUT1Ig RkFNSUxZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVB VEVfUE9MSUNZLCAiQ1JFQVRFIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BST0NFRFVSRSwgIkNSRUFURSBQUk9DRURVUkUiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9QVUJMSUNBVElP TiwgIkNSRUFURSBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfQ1JFQVRFX1JPTEUsICJDUkVBVEUgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUk9VVElORSwgIkNSRUFURSBST1VU SU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X1JVTEUsICJDUkVBVEUgUlVMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfQ1JFQVRFX1NDSEVNQSwgIkNSRUFURSBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVFVRU5DRSwgIkNSRUFURSBTRVFV RU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X1NFUlZFUiwgIkNSRUFURSBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0NSRUFURV9TVEFUSVNUSUNTLCAiQ1JFQVRFIFNUQVRJU1RJQ1MiLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TVUJTQ1JJUFRJ T04sICJDUkVBVEUgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFLCAiQ1JFQVRFIFRBQkxFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVfQVMsICJDUkVBVEUg VEFCTEUgQVMiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19D UkVBVEVfVEFCTEVTUEFDRSwgIkNSRUFURSBUQUJMRVNQQUNFIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFU SU9OLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9ESUNUSU9OQVJZ LCAiQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9QQVJTRVIsICJDUkVBVEUg VEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfVEVNUExBVEUsICJDUkVBVEUgVEVYVCBTRUFSQ0gg VEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NS RUFURV9UUkFOU0ZPUk0sICJDUkVBVEUgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJJR0dFUiwgIkNSRUFURSBUUklHR0VSIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFlQRSwg IkNSRUFURSBUWVBFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfVVNFUl9NQVBQSU5HLCAiQ1JFQVRFIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1ZJRVcsICJDUkVBVEUgVklF VyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfREVBTExPQ0FU RSwgIkRFQUxMT0NBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfREVBTExPQ0FURV9BTEwsICJERUFMTE9DQVRFIEFMTCIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ERUNMQVJFX0NVUlNPUiwgIkRFQ0xBUkUgQ1VS U09SIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RFTEVU RSwgIkRFTEVURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X0RJU0NBUkQsICJESVNDQVJEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX0RJU0NBUkRfQUxMLCAiRElTQ0FSRCBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9QTEFOUywgIkRJU0NBUkQgUExBTlMi LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRElTQ0FSRF9T RVFVRU5DRVMsICJESVNDQVJEIFNFUVVFTkNFUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1RFTVAsICJESVNDQVJEIFRFTVAiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRE8sICJETyIsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0FDQ0VTU19NRVRIT0Qs ICJEUk9QIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURU QUcoQ01EVEFHX0RST1BfQUdHUkVHQVRFLCAiRFJPUCBBR0dSRUdBVEUiLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQ0FTVCwgIkRST1AgQ0FTVCIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9DT0xMQVRJT04s ICJEUk9QIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9DT05TVFJBSU5ULCAiRFJPUCBDT05TVFJBSU5UIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9DT05WRVJTSU9OLCAiRFJPUCBDT05W RVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9Q X0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFTRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX0RPTUFJTiwgIkRST1AgRE9NQUlOIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0VWRU5UX1RSSUdHRVIsICJEUk9Q IEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9FWFRFTlNJT04sICJEUk9QIEVYVEVOU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9GT1JFSUdOX0RBVEFfV1JBUFBFUiwgIkRS T1AgRk9SRUlHTiBEQVRBIFdSQVBQRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9UQUJMRSwgIkRST1AgRk9SRUlHTiBUQUJMRSIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9GVU5DVElPTiwg IkRST1AgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0RST1BfSU5ERVgsICJEUk9QIElOREVYIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19EUk9QX0xBTkdVQUdFLCAiRFJPUCBMQU5HVUFHRSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9NQVRFUklBTElaRURfVklF VywgIkRST1AgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQ R19DTURUQUcoQ01EVEFHX0RST1BfT1BFUkFUT1IsICJEUk9QIE9QRVJBVE9SIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLCAi RFJPUCBPUEVSQVRPUiBDTEFTUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9PUEVSQVRPUl9GQU1JTFksICJEUk9QIE9QRVJBVE9SIEZBTUlMWSIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PV05FRCwgIkRS T1AgT1dORUQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19E Uk9QX1BPTElDWSwgIkRST1AgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19EUk9QX1BST0NFRFVSRSwgIkRST1AgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1BVQkxJQ0FUSU9OLCAiRFJP UCBQVUJMSUNBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfRFJPUF9ST0xFLCAiRFJPUCBST0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX0RST1BfUk9VVElORSwgIkRST1AgUk9VVElORSIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9SVUxFLCAiRFJPUCBSVUxFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1NDSEVNQSwg IkRST1AgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19EUk9QX1NFUVVFTkNFLCAiRFJPUCBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1 ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9TRVJWRVIsICJEUk9QIFNFUlZFUiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9TVEFUSVNUSUNTLCAiRFJP UCBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19EUk9QX1NVQlNDUklQVElPTiwgIkRST1AgU1VCU0NSSVBUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9UQUJMRSwgIkRST1AgVEFCTEUiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEVTUEFD RSwgIkRST1AgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sICJEUk9QIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkRST1AgVEVYVCBTRUFSQ0ggRElD VElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJP UF9URVhUX1NFQVJDSF9QQVJTRVIsICJEUk9QIFRFWFQgU0VBUkNIIFBBUlNFUiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9URU1Q TEFURSwgIkRST1AgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVFJBTlNGT1JNLCAiRFJPUCBUUkFOU0ZPUk0iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVFJJR0dFUiwg IkRST1AgVFJJR0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfRFJPUF9UWVBFLCAiRFJPUCBUWVBFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19EUk9QX1VTRVJfTUFQUElORywgIkRST1AgVVNFUiBNQVBQSU5HIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1ZJRVcsICJEUk9Q IFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0VYRUNV VEUsICJFWEVDVVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0VYUExBSU4sICJFWFBMQUlOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX0ZFVENILCAiRkVUQ0giLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19HUkFOVCwgIkdSQU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19HUkFOVF9ST0xFLCAiR1JBTlQgUk9MRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19JTVBPUlRfRk9SRUlHTl9TQ0hFTUEs ICJJTVBPUlQgRk9SRUlHTiBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0lOU0VSVCwgIklOU0VSVCIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0xJU1RFTiwgIkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19MT0FELCAiTE9BRCIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19MT0NLX1RBQkxFLCAiTE9DSyBUQUJMRSIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19NRVJHRSwgIk1FUkdF IiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTU9WRSwgIk1P VkUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19OT1RJRlks ICJOT1RJRlkiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf UFJFUEFSRSwgIlBSRVBBUkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfUFJFUEFSRV9UUkFOU0FDVElPTiwgIlBSRVBBUkUgVFJBTlNBQ1RJT04iLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVBU1NJR05fT1dORUQs ICJSRUFTU0lHTiBPV05FRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLCAiUkVGUkVTSCBNQVRFUklBTElaRUQg VklFVyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfUkVJTkRF WCwgIlJFSU5ERVgiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfUkVMRUFTRSwgIlJFTEVBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfUkVTRVQsICJSRVNFVCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19SRVZPS0UsICJSRVZPS0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRy dWUpCitQR19DTURUQUcoQ01EVEFHX1JFVk9LRV9ST0xFLCAiUkVWT0tFIFJPTEUiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUk9MTEJBQ0ssICJST0xMQkFD SyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ST0xMQkFD S19QUkVQQVJFRCwgIlJPTExCQUNLIFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX1NBVkVQT0lOVCwgIlNBVkVQT0lOVCIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUNVUklUWV9MQUJFTCwgIlNFQ1VS SVRZIExBQkVMIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19T RUxFQ1QsICJTRUxFQ1QiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19TRUxFQ1RfRk9SX0tFWV9TSEFSRSwgIlNFTEVDVCBGT1IgS0VZIFNIQVJFIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfTk9fS0VZ X1VQREFURSwgIlNFTEVDVCBGT1IgTk8gS0VZIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX1NIQVJFLCAiU0VMRUNUIEZPUiBT SEFSRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxF Q1RfRk9SX1VQREFURSwgIlNFTEVDVCBGT1IgVVBEQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFTEVDVF9JTlRPLCAiU0VMRUNUIElOVE8iLCB0cnVl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRVQsICJTRVQiLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VUX0NPTlNUUkFJTlRT LCAiU0VUIENPTlNUUkFJTlRTIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURU QUcoQ01EVEFHX1NIT1csICJTSE9XIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19D TURUQUcoQ01EVEFHX1NUQVJUX1RSQU5TQUNUSU9OLCAiU1RBUlQgVFJBTlNBQ1RJT04iLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfVFJVTkNBVEVfVEFCTEUs ICJUUlVOQ0FURSBUQUJMRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19VTkxJU1RFTiwgIlVOTElTVEVOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1ZBQ1VVTSwgIlZBQ1VVTSIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxp dHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggOWUyNjJkNy4u ZmJkMDk3NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAor KysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC02NSw2ICs2NSw3IEBA IHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2lkCQkJb2JqZWN0SWQ7 CiAJCQlPaWQJCQljbGFzc0lkOworCQkJYm9vbAkJcmV3cml0ZTsKIAkJCUxpc3QJICAgKnN1YmNt ZHM7CiAJCX0JCQlhbHRlclRhYmxlOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9l dnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBkMzQwMDI2Li45 MWQ0YmRkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlwZWRlZiBlbnVt CiAJRVZUX0RETENvbW1hbmRTdGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlFVlRfU1FMRHJv cCwKLQlFVlRfVGFibGVSZXdyaXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRfVGFibGVJbml0 V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVh dGVfdGFibGUub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAppbmRleCA5ZWVhYTFjLi44ZTZmZmE5IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9j cmVhdGVfdGFibGUub3V0CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKQEAgLTIwLDYgKzIwLDEzIEBAIE5PVElD RTogIHJlLWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09M VU1OIGEgU0VUIFNUT1JBR0UKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBT VE9SQUdFIEVYVEVSTkFMOwogTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIg JXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFC TEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RP UkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6ICJiIiwg InN0b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIs ICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQogTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFM VEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBleHRlcm5h bAorQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5DTFVESU5HIEFMTCk7CitO T1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRB QkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1z KSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9i eX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2Jq bmFtZSI6ICJjdGx0MV9saWtlIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6 IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJw cmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29t bWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0s ICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVz ZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0 aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25f YnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZh bHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5H ICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBu dWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7 bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1z ICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVt bn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2Qi OiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUi OiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6 IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7 bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBn X2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogIm1haW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6 ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwg ImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10Ijog IkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiYiIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAi IiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAi cGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZh bHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFt ZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2Nh dGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVybmFsIiwgImNvbXByZXNzaW9uIjogeyJmbXQi OiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2Us ICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6 ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfYV9jaGVjayIs ICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJjaGVjayIsICJkZWZpbml0aW9uIjog IkNIRUNLICgocGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSki fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjog ImN0bHQxX2xpa2VfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmlt YXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChhKSJ9XX0KK05PVElDRTogIHJl LWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMuY3RsdDFfbGlrZSAoYSBwZ19j YXRhbG9nLnRleHQgU1RPUkFHRSBtYWluICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAg LCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVybmFsICBDT0xMQVRFIHBnX2NhdGFsb2cu ImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0bHQxX2FfY2hlY2sgQ0hFQ0sgKChwZ19jYXRhbG9n Lmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSwgQ09OU1RSQUlOVCBjdGx0MV9s aWtlX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjog PE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBh cnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KIC0t IFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFM VEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFu ZAogQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsK IE5PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMg VEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwg fXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9u X2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJv YmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjog eyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInBy ZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21t aXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwg InRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNl bnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRo X2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9i eSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFs c2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcg JXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51 bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtu YW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMg JXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1u fXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2Qi OiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUi OiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6 IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwg InByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjog eyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7 ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6 ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Np b259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9j b2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFt ZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVzc2lv biI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1u IjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJm bXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogInByb2R1 Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIs ICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChpZCkifV19CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFi bGUuc3FsCmluZGV4IDk5N2QyZjUuLjFjNWYwYzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCisrKyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUu c3FsCkBAIC05LDYgKzksNyBAQCBDUkVBVEUgVU5JUVVFIElOREVYIGNvdmVyaW5nX2luZGV4IG9u IHNpbXBsZV90YWJsZSAoaWQpIElOQ0xVREUgKG5hbWUpOwogQ1JFQVRFIFRBQkxFIGN0bHQxIChh IHRleHQgQ0hFQ0sgKGxlbmd0aChhKSA+IDIpIFBSSU1BUlkgS0VZLCBiIHRleHQpOwogQUxURVIg VEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UgTUFJTjsKIEFMVEVSIFRBQkxF IGN0bHQxIEFMVEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOworQ1JFQVRFIFRBQkxF IGN0bHQxX2xpa2UgKExJS0UgY3RsdDEgSU5DTFVESU5HIEFMTCk7CiAKIC0tIFRlc3QgZm9yZWln biBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFE RCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAogQ1JFQVRFIFRB QkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BzcWwub3V0CmluZGV4IGI3NWE3NGQuLjczYjk0OTcgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wc3FsLm91dApAQCAtNjIyMyw5ICs2MjIzLDkgQEAgTGlzdCBvZiBzY2hlbWFzCiAoMCBy b3dzKQogCiBcZFJwICJuby5zdWNoLnB1YmxpY2F0aW9uIgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyBOYW1lIHwgT3duZXIgfCBBbGwgdGFibGVz IHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQogKDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDQyN2Y4N2UuLmIy MzE3ZTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24u b3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0z MCwyMCArMzAsMjAgQEAgRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwog TElORSAxOiAuLi51Yl94eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1 ZScsIHB1Ymxpc2hfdmkuLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAg ICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5z X3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAg IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAg ICAgICBOYW1lICAgICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHBpYl9p bnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgZiAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICAgIHwgZgogKDIgcm93cykKIAogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9kZWZhdWx0IFNFVCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJyk7CiBc ZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAgICAgICB8ICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHBpYl9pbnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAg fCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogKDIg cm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBAQCBSRVNFVCBjbGll bnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNjaGVtYSB0byAnRk9S IFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBB REQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJs ZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERM cyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKIFRhYmxlcyBm cm9tIHNjaGVtYXM6CkBAIC05OSwyMCArOTksMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0t IHNob3VsZCBiZSBhYmxlIHRvIGRyb3Agc2NoZW1hIGZyb20gJ0ZPUiBUQUJMRScgcHVibGljYXRp b24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRVMgSU4gU0NI RU1BIHB1Yl90ZXN0OwogXGRScCsgdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBz ZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0OwogXGRScCsgdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QiCiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0LCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOwogXGRScCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERM cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgog VGFibGVzOgogICAgICJwdWJfdGVzdC50ZXN0cHViX25vcGsiCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgpAQCAtMTM1LDEwICsxMzUsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHNob3VsZCBi ZSBhYmxlIHRvIGFkZCBhIHRhYmxlIG9mIHRoZSBzYW1lIHNjaGVtYSB0byB0aGUgc2NoZW1hIHB1 YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBBREQgVEFCTEUg cHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFibGVzIGZyb20g c2NoZW1hczoKQEAgLTE0NywxMCArMTQ3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBz aG91bGQgYmUgYWJsZSB0byBkcm9wIHRoZSB0YWJsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3JzY2hlbWEgRFJPUCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0 cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QiCiAKQEAgLTE2MSwxMCArMTYxLDEwIEBAIEVSUk9SOiAgcmVsYXRpb24gInRlc3Rw dWJfbm9wayIgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uCiAtLSBzaG91bGQgYmUgYWJs ZSB0byBzZXQgdGFibGUgdG8gc2NoZW1hIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnNjaGVtYSBTRVQgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9ub3BrOwogXGRScCsg dGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3Qu dGVzdHB1Yl9ub3BrIgogCkBAIC0xODYsMTAgKzE4NiwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAg InRlc3RwdWJfZm9yYWxsdGFibGVzIgogCiBcZFJwKyB0ZXN0cHViX2ZvcmFsbHRhYmxlcwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJs ZXMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IHQgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zv cmFsbHRhYmxlcworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwg RERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAg ICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7CkBAIC0y MDEsMTkgKzIwMSwxOSBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjMgRk9SIFRBQkxFIHRl c3RwdWJfdGJsMzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNCBGT1IgVEFCTEUgT05MWSB0 ZXN0cHViX3RibDM7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjMK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIz Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBU YWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAg ICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAgICAgInB1YmxpYy50 ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVi bGljLnRlc3RwdWJfdGJsMyIKIApAQCAtMjM0LDEwICsyMzQsMTAgQEAgVVBEQVRFIHRlc3RwdWJf cGFydGVkMSBTRVQgYSA9IDE7CiAtLSBvbmx5IHBhcmVudCBpcyBsaXN0ZWQgYXMgYmVpbmcgaW4g cHVibGljYXRpb24sIG5vdCB0aGUgcGFydGl0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnBhcnRlZCBBREQgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBcZFJwKyB0ZXN0cHViX2ZvcnBh cnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ycGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQi CiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVkIERFVEFD SCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQg YSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVk Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y cGFydGVkCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgdAogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI4 NCwxMCArMjg0LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViNSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHVi X3JmX3RibDIgV0hFUkUgKGMgPD4gJ3Rlc3QnIEFORCBkIDwgNSkgV0lUSCAocHVibGlzaCA9ICdp bnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViNQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBA IC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1 IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7 CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6 dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMTksMTAgKzMxOSwxMCBAQCBQdWJsaWNhdGlvbnM6CiAK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IERST1AgVEFCTEUgdGVzdHB1Yl9yZl90YmwyOwog XGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAg IHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3Ri bDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDEwMDApIEFORCAo ZSA8IDIwMDApKQpAQCAtMzMwLDEwICszMzAsMTAgQEAgVGFibGVzOgogLS0gcmVtb3ZlIHRlc3Rw dWJfcmZfdGJsMSBhbmQgYWRkIHRlc3RwdWJfcmZfdGJsMyBhZ2FpbiAoYW5vdGhlciBXSEVSRSBl eHByZXNzaW9uKQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjUgU0VUIFRBQkxFIHRlc3RwdWJf cmZfdGJsMyBXSEVSRSAoZSA+IDMwMCBBTkQgZSA8IDUwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMzAw KSBBTkQgKGUgPCA1MDApKQogCkBAIC0zNjYsMTAgKzM2NiwxMCBAQCBTRVQgY2xpZW50X21pbl9t ZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZP UiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwg OTk5KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIFxkUnArIHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAg ICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVi bGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUg KGUgPCA5OTkpCkBAIC0zNzksMTAgKzM3OSwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgyIEZPUiBUQUJMRSB0 ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfc2NoZW1hMS50ZXN0cHViX3JmX3RibDUgV0hFUkUg KGggPCA5OTkpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfc3ludGF4MgotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAg ICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJ0ZXN0cHViX3JmX3NjaGVtYTEudGVzdHB1 Yl9yZl90Ymw1IiBXSEVSRSAoaCA8IDk5OSkKQEAgLTQ5NywxMCArNDk3LDEwIEBAIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViNiBGT1IgVEFCTEVTIElOIFNDSEVNQSB0ZXN0cHViX3JmX3NjaGVt YTI7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEVTIElOIFNDSEVNQSB0ZXN0 cHViX3JmX3NjaGVtYTIsIFRBQkxFIHRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3RibDYg V0hFUkUgKGkgPCA5OSk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 YjYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI2Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjYKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInRlc3RwdWJfcmZfc2NoZW1hMi50ZXN0cHViX3JmX3Ri bDYiIFdIRVJFIChpIDwgOTkpCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtNzE0LDEwICs3MTQs MTAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2gg PSAnaW5zZXJ0LCB0cnVuY2F0ZScpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEp OwkJLS0gb2sKIFxkUnArIHRlc3RwdWJfdGFibGVfaW5zCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6 CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDUiIChhKQogCkBAIC04OTEsMTAgKzg5MSwxMCBAQCBD UkVBVEUgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMgaW50 LCBQUklNQVJZIEtFWSAoYSxjKSk7CiBBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRl cnMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnNf cGtleTsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJMRSB0 ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CiBcZFJwKyB0ZXN0 cHViX2JvdGhfZmlsdGVycwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCiAKQEAgLTEw OTksMTAgKzEwOTksMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl90YmwxIiBpcyBhbHJl YWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwKIENSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRibCBGT1IgVEFCTEUgdGVzdHB1Yl90YmwxOwogRVJST1I6ICBwdWJs aWNhdGlvbiAidGVzdHB1Yl9mb3J0YmwiIGFscmVhZHkgZXhpc3RzCiBcZFJwKyB0ZXN0cHViX2Zv cnRibAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YmwKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViX2ZvcnRibAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBB bGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgog ICAgICJwdWJsaWMudGVzdHB1Yl90YmwxIgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNh dGlvbnM6CiAgICAgInRlc3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0 Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Rl ZmF1bHQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVi bGljLnRlc3RwdWJfdGJsMSIKQEAgLTEyMjEsMTAgKzEyMjEsMTAgQEAgUkVWT0tFIENSRUFURSBP TiBEQVRBQkFTRSByZWdyZXNzaW9uIEZST00gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMjsKIERS T1AgVEFCTEUgdGVzdHB1Yl9wYXJ0ZWQ7CiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMTsKIFxkUnAr IHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gZmFpbCAtIG11c3Qg YmUgb3duZXIgb2YgcHVibGljYXRpb24KQEAgLTEyMzQsMjAgKzEyMzQsMjAgQEAgRVJST1I6ICBt dXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAogUkVTRVQgUk9MRTsK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBSRU5BTUUgVE8gdGVzdHB1Yl9mb287 CiBcZFJwIHRlc3RwdWJfZm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICBOYW1lICAgICB8ICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K KyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIHJlbmFtZSBiYWNrIHRvIGtlZXAgdGhlIHJlc3Qgc2lt cGxlCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvbyBSRU5BTUUgVE8gdGVzdHB1Yl9kZWZh dWx0OwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9kZWZhdWx0IE9XTkVSIFRPIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlcjI7CiBcZFJwIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAg IE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1 Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyMiB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0 aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyB0ZXN0 cHViX2RlZmF1bHQgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IGYg ICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAg ICAgICB8IGYKICgxIHJvdykKIAogLS0gYWRkaW5nIHNjaGVtYXMgYW5kIHRhYmxlcwpAQCAtMTI2 MywxOSArMTI2MywxOSBAQCBDUkVBVEUgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9T Q0hFTUEiKGlkIGludCk7CiBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVB VEUgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViMl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVz dDIsIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBE RExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIK QEAgLTEyODksNDQgKzEyODksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNj aGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJD VVJSRU5UX1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAg InB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogCiBcZFJwKyB0ZXN0cHVi NV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi Q1VSUkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI2X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBB bGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NI RU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEuQ1VSUkVOVF9TQ0hFTUEiCiAKQEAgLTEz NjAsMTAgKzEzNjAsMTAgQEAgRVJST1I6ICBzY2hlbWEgInRlc3RwdWJfdmlldyIgZG9lcyBub3Qg ZXhpc3QKIC0tIGRyb3BwaW5nIHRoZSBzY2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBp biBwdWJsaWNhdGlvbgogRFJPUCBTQ0hFTUEgcHViX3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogLS0gcmVuYW1pbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hh bmdlIGluIHB1YmxpY2F0aW9uCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJf dGVzdDFfcmVuYW1lZDsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBE RExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDFfcmVuYW1lZCIKICAgICAicHVi X3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxX3JlbmFtZWQgUkVOQU1FIHRvIHB1Yl90 ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEzOTIs MTAgKzEzOTIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9u IGFkZCBzY2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJw dWJfdGVzdDIiCkBAIC0xNDA0LDEwICsxNDA0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEg bm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1h IiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3Qy IgpAQCAtMTQxNiwxMCArMTQxNiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVC TElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1Ymxp Y2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBE RExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xNDI3LDEwICsxNDI3LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBkcm9wIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMg SU4gU0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJwdWJfdGVz dDIiIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAKQEAgLTE0NDksMjkgKzE0NDksMjkgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgbm9u X2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBk b2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogLS0gZHJvcCBhbGwgc2No ZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFi bGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAg ICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1h CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExz IHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg ZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJw dWJfdGVzdDIiCkBAIC0xNDgwLDEwICsxNDgwLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEg bm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1h IiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxl IERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAg IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3Qy IgpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gcmVtb3Zp bmcgdGhlIGR1cGxpY2F0ZSBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3Jz Y2hlbWEgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0 ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoK ICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0LDE4ICsxNTc0LDE4IEBAIFNFVCBjbGllbnRfbWlu X21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hl bWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBB bGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKICgxIHJvdykKIAogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjNf Zm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIz X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAKQEAgLTE1OTUsMjAgKzE1OTUsMjAgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwg VEEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYSBGT1IgVEFC TEUgcHViX3Rlc3QyLnRibDEsIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogUkVTRVQgY2xp ZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0 YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9y c2NoZW1hX2ZvcnRhYmxlCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsgdGVzdHB1Yl9mb3J0YWJs ZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90 ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjRiYzRmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAo YykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lv biB0ZXN0cyBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0Owor dXNlIHdhcm5pbmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdy ZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVy ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1 Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJs aXNoZXItPnN0YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93 c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitt eSAkZGRsID0gIkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUg dmFyY2hhciwgdmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJf Y29ubnN0ciA9ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNB VElPTiBteXB1YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRl LCBkZWxldGUnLCBkZGwgPSAnYWxsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiQ1JFQVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5 bmNocm9uaXplZCB0aGUgdGFibGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFu ZCBiZWxvdyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24u Ciskbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VM RUNUIENPVU5UKDEpID0gMCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3Jz dWJzdGF0ZSBOT1QgSU4gKCdzJywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJl Z2NsYXNzIgorKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVz dF9yZXAgVkFMVUVTICgyLCAnZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJF IGM0ID0gMjsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxp Y2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVw IHdoZXJlIGlkID0gMjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdB TFRFUiB0ZXN0X3JlcCBEUk9QIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFM VEVSIFRZUEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBU QUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMs ICdkYXRhMycsICczJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGlj YXRlZCcpOworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sg aWYgd2UgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBz dWJzY3JpYmVyIG5vZGUuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi QUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28n Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZB TFVFUyAoNCwgJ2RhdGE0Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7 Iik7CitpcygkcmVzdWx0LCAnZm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxU IHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAor IyBDaGVjayBpZiB3ZSBkb24ndCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVm aW5lZC4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJM RSB0ZXN0X3JlcCBBTFRFUiBDT0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRh NScpOyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Citp cygkcmVzdWx0LCBxKHQpLCAnQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxp Y2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1v dmUgdGhlIGV4aXN0aW5nIHJlY29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitt eSAoJHN0ZG91dCwgJHN0ZGVycik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2 YWx1ZSBTRVQgTk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVl XCIgb2YgcmVsYXRpb24gXCJ0ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQv CisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9U IE5VTEwiOworCisjIFRlc3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFM VEVSIHZhbHVlIERST1AgTk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7CisjIEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4g VGhpcyBmYWlsZWQgYmVmb3JlIGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAo NiwgJ2RhdGE2Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgdmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0g NjsiKTsKK2lzKCRyZXN1bHQsIHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBO VUxMIHJlcGxpY2F0ZWQiKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVw IFNFVCBVTkxPR0dFRDsnKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0ZXN0X3JlcCBWQUxVRVMgKDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVS RSBpZCA9IDc7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxP R0dFRCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAg U0VUIExPR0dFRDsnKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 ZXN0X3JlcCBWQUxVRVMgKDgsICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBp ZCA9IDg7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQg cmVwbGljYXRlZCcpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEg aW50LCBiIHZhcmNoYXIpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAn OyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFs dWVzICgxLCAnYScpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0 X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3Vs dCwgcXEoMiksICdETUwgQ2hhbmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSBJTkhFUklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFM VUVTICgxLCAnYScsIDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAy JzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxp Y2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2lu c2VydGluZyBzb21lIGRhdGEgdG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKwor IyBUZXN0IENSRUFURSBUQUJMRSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVT ICgxLCAxLCAnYScpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIGZyb20gdG1wMzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUg ZGF0YSB0byBhIHRhYmxlIGRlZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBU ZXN0IERST1AgVEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRBQkxFIHRtcDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsi KTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0 IENSRUFURSBVTkxPR0dFRCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBVTkxPR0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSBVTkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcg ZGF0YSB0byB1bmxvZ2dlZCB0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGlu dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3Rt cCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJl cGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn aW5zZXJ0aW5nIGRhdGEgdG8gYSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFU RSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxl CisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwg YW5kIGlmIHdlIHN1Y2NlZWQKKyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIp OworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNh dGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJM RSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3 ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhl IHB1Ymxpc2hlciwgYnV0IG5vdCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9U IEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRF IFwiQ1wiKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hl bWEuY29sdW1ucyBXSEVSRSB0YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShD KSwgJ0NSRUFURSBUQUJMRSB3aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBD UkVBVEUgVEFCTEUgd2l0aCBuYW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJt dXN0IGJlIGJpZ2dlciB0aGFuIDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vy cm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRv dXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlv biAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEw Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3Jl YXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBl cyBvZiBjb25zdHJhaW50cy4KKyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0 ZXh0IE5PVCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRt cCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3Rk ZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9 fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIg dmlvbGF0ZXMgbm90LW51bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIG5vbiBudWxsIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwg Y29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5V TEwgRlJPTSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5V TEwgY29uc3RyYWludCByZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQg aW50LCBwcm9kdWN0X2FtZSB0ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2Ny aWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Zvbycs IC0xMDApOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+ IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJS T1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50 ICJ0bXBfcHJpY2VfY2hlY2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sg Y29uc3RyYWludCI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXA7Iik7CisKKyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQg J2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAg VkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlNFTEVDVCBuYW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwg IkNSRUFURSBUQUJMRSB3aXRoIGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5J UVVFIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXIt PnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAg IG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkg ICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5 IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGll ICJmYWlsZWQgdG8gcmVwbGljYXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIFBSSU1BUlkgS0VZCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRt cCBWQUxVRVMgKDEsICdiYXInKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJ CSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRz dGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29u c3RyYWludCAidG1wX3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFy eSBrZXkgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUs IEVYQ0xVREUgVVNJTkcgZ2lzdCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEp LCAxPic6OmNpcmNsZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBj aXJjbGVzIFZBTFVFUyAoJzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJv cl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0 ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVl IHZpb2xhdGVzIGV4Y2x1c2lvbiBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRp ZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsK KworIyBSRUZFUkVOQ0VTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9k dWN0IFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAo b3JkZXJfaWQgaW50IFBSSU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1 Y3QgKGlkKSkiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBW QUxVRVMgKDEsIDEwKSIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3Rk ZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9 fiAvRVJST1I6ICBpbnNlcnQgb3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZv cmVpZ24ga2V5IGNvbnN0cmFpbnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUg ImZhaWxlZCB0byByZXBsaWNhdGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1 Y3QiKTsKKworIyBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5h bWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hl Y2sgb2YgZGVmZXJyYWJsZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUg YSB0ZXN0IHRoYXQgc2hvdWxkIGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1 bHQpCiskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERB VEUgdG1wIFNFVCBpZCA9IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29i YXInKTsKK0RFTEVURSBGUk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJv cl9zdG9wID0+IDAsIHN0ZGVyciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRz dGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29u c3RyYWludCAidG1wX3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJS QUJMRSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQg UFJJTUFSWSBLRVkgTk9UIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Zv bycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQ REFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1 ZSBjb25zdHJhaW50ICJ0bXBfcGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBO T1QgREVGRVJSQUJMRSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQg SU5JVElBTExZIERFRkVSUkVECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElB TExZIERFRkVSUkVELCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOwor IyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkg REVGRVJSRUQKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JF R0lOOworVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgzLCAnZm9vYmFyJyk7CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOwor KSk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0 bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdl IHdpbGwgc2V0IHR3byBjaGVja3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQg ZmFpbCByZXNwZWN0aXZlbHkuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJDUkVBVEUgVEFCTEUgdG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBD SEVDSyAoZGlzY291bnRlZF9wcmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAw LCAwKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAi dG1wX2NoZWNrIi8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFp bnQgKGZpcnN0IGNvbmRpdGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJl ci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyBy b3cgZm9yIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVj ayIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNv bmQgY29uZGl0aW9uKSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFC TEUgV0lUSCBzdHJvcmFnZV9wYXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4 MCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVs b3B0aW9ucyBGUk9NIHBnX2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBv bl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAg c3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3Ig ZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9w YXJhbWV0ZXIgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BB Q0UgKGNyZWF0aW5nIGEgdGFibGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0 aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitt eSAoJGJhc2VkaXIsICR0YWJsZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlz aGVyLT5iYXNlZGlyOworJHRhYmxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOwor bWtkaXIoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2Vf ZGlyJzsiKTsKKyRiYXNlZGlyID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNw YWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIp OworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVT UEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkg VEFCTEVTUEFDRSBteXRibHNwYzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIFRlc3QgQ1JFQVRFIFRZUEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVFlQRSBteXR5cGUgQVMgKGlkIGludCwgbmFtZSB0ZXh0LCBhZ2UgaW50KTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIE9GIG15dHlw ZTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0bXAgVkFMVUVTICgxLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgx KSwgJ0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgbXl0eXBlIik7CisKKyMgVGVzdCBDUkVBVEUg RU5VTSBUWVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRZUEUgbXllbnVtdHlwZSBBUyBFTlVNICgnbmV3JywgJ29wZW4nLCAnY2xvc2VkJyk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoc3RhdHVzIG15ZW51 bXR5cGUpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHRtcCBWQUxVRVMgKCduZXcnKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEobmV3KSwg J0NSRUFURSBUQUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRZUEUgbXllbnVtdHlwZSIpOworCisjIFRlc3QgQ1JFQVRF IFJBTkdFIFRZUEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVFlQRSBmbG9hdDhfcmFuZ2UgQVMgUkFOR0UgKHN1YnR5cGUgPSBmbG9hdDgsIHN1YnR5cGVf ZGlmZiA9IGZsb2F0OG1pKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgdG1wICh2YWwgZmxvYXQ4X3JhbmdlKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJpbnNlcnQgaW50byB0bXAgdmFsdWVzKGZsb2F0OF9yYW5nZSgtMTIu MzQsICcxLjExMTExM2UzJykpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcShbLTEyLjM0LDExMTEu MTEzXCkpLCAnQ1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVFlQRSBmbG9hdDhfcmFuZ2UiKTsKKworIyBU ZXN0IENSRUFURSBCQVNFIERBVEEgVFlQRSBhbmQgdXNlIGl0IGluIHRhYmxlIGRlZmluaXRpb24K KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKK0NSRUFURSBUWVBFIGlu dDQyOworQ1JFQVRFIEZVTkNUSU9OIGludDQyX2luKGNzdHJpbmcpCisgICBSRVRVUk5TIGludDQy CisgICBBUyAnaW50NGluJworICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsK K0NSRUFURSBGVU5DVElPTiBpbnQ0Ml9vdXQoaW50NDIpCisgICBSRVRVUk5TIGNzdHJpbmcKKyAg IEFTICdpbnQ0b3V0JworICAgTEFOR1VBR0UgaW50ZXJuYWwgU1RSSUNUIElNTVVUQUJMRTsKK0NS RUFURSBUWVBFIGludDQyICgKKyAgIGludGVybmFsbGVuZ3RoID0gNCwKKyAgIGlucHV0ID0gaW50 NDJfaW4sCisgICBvdXRwdXQgPSBpbnQ0Ml9vdXQsCisgICBhbGlnbm1lbnQgPSBpbnQ0LAorICAg ZGVmYXVsdCA9IDQyLAorICAgcGFzc2VkYnl2YWx1ZQorKTsKK0NSRUFURSBUQUJMRSB0bXAgKGYx IGludDQyKTsKK0lOU0VSVCBJTlRPIHRtcCBERUZBVUxUIFZBTFVFUzsKKyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUICogZnJvbSB0bXA7Iik7Citpcygk cmVzdWx0LCBxcSg0MiksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUi KTsKKworcGFzcyAiRERMIHJlcGxpY2F0aW9uIHRlc3RzIHBhc3NlZDoiOworCiskbm9kZV9zdWJz Y3JpYmVyLT5zdG9wOworJG5vZGVfcHVibGlzaGVyLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsK ZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNGEzMTgxOC4uYjc0NWE5YiAxMDA2NDQKLS0t IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTU2MSw2ICs1NjEsNyBAQCBEZWZFbGVtQWN0aW9uCiBEZWZh dWx0QUNMSW5mbwogRGVmaW5lU3RtdAogRGVsZXRlU3RtdAorRGVwYXJzZWRDb21tYW5kVHlwZQog RGVwZW5kZW5jeUdlbmVyYXRvcgogRGVwZW5kZW5jeUdlbmVyYXRvckRhdGEKIERlcGVuZGVuY3lU eXBlCkBAIC0xNDQ5LDYgKzE0NTAsOCBAQCBMb2dpY2FsRGVjb2RlQmVnaW5QcmVwYXJlQ0IKIExv Z2ljYWxEZWNvZGVDaGFuZ2VDQgogTG9naWNhbERlY29kZUNvbW1pdENCCiBMb2dpY2FsRGVjb2Rl Q29tbWl0UHJlcGFyZWRDQgorTG9naWNhbERlY29kZURETE1lc3NhZ2VDQgorTG9naWNhbERlY29k ZVN0cmVhbURETE1lc3NhZ2VDQgogTG9naWNhbERlY29kZUZpbHRlckJ5T3JpZ2luQ0IKIExvZ2lj YWxEZWNvZGVGaWx0ZXJQcmVwYXJlQ0IKIExvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IKQEAgLTIzMDUs NiArMjMwOCw4IEBAIFJlb3JkZXJCdWZmZXJDaGFuZ2UKIFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBl CiBSZW9yZGVyQnVmZmVyQ29tbWl0Q0IKIFJlb3JkZXJCdWZmZXJDb21taXRQcmVwYXJlZENCCitS ZW9yZGVyQnVmZmVyRERMTWVzc2FnZUNCCitSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNC CiBSZW9yZGVyQnVmZmVyRGlza0NoYW5nZQogUmVvcmRlckJ1ZmZlckl0ZXJUWE5FbnRyeQogUmVv cmRlckJ1ZmZlckl0ZXJUWE5TdGF0ZQpAQCAtMzYwNyw2ICszNjEyLDcgQEAgcHRocmVhZF9tdXRl eF90CiBwdGhyZWFkX29uY2VfdAogcHRocmVhZF90CiBwdHJkaWZmX3QKK3B1YmxpY2F0aW9uX3Jl bAogcHVsbF92YXJfY2xhdXNlX2NvbnRleHQKIHB1bGxfdmFyYXR0bm9zX2NvbnRleHQKIHB1bGxf dmFybm9zX2NvbnRleHQKLS0gCjEuOC4zLjEKCg== --000000000000387aaa05f6357d57 Content-Type: application/octet-stream; name="v75-0008-Allow-replicated-objects-to-have-the-same-owner-.patch" Content-Disposition: attachment; filename="v75-0008-Allow-replicated-objects-to-have-the-same-owner-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lewg5kcs7 RnJvbSAyNTY4YTgzNjU4OGJlNTA0MzBhNWNjOTQwYzk2YWRlNTM2NDc1YzdkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgNiBNYXIgMjAyMyAwMToyNDo0MiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc1IDgvOF0gQWxsb3cgcmVwbGljYXRlZCBvYmplY3RzIHRvIGhhdmUgdGhlIHNhbWUgb3duZXIg ZnJvbSAKIHRoZSBwdWJsaXNoZXIuIFNwZWNpZmljYWxseSwgdGhlIGNoYW5nZXMgaW5jbHVkZToK CjEuIENoYW5nZSBldmVudCB0cmlnZ2VyIGZ1bmN0aW9ucyB0byBjb2xsZWN0IHRoZSBjdXJyZW50 IHJvbGUgaW4gQ29sbGVjdGVkQ29tbWFuZC4KCjIuIENoYW5nZSBEZXBhcnNlciBmdW5jdGlvbiBk ZXBhcnNlX3V0aWxpdHlfY29tbWFuZCB0byBlbmNvZGUgb3duZXIgcm9sZSBpbiB0aGUgdG9wLWxl dmVsCmVsZW1lbnQgc3VjaCBhcyB7bXlvd25lcjpyb2xlX25hbWUsIGZtdDouLi4sIGlkZW50aXR5 Oi4uLn0gb2YgdGhlIGRlcGFyc2VkIGpzb25iIG91dHB1dApmb3IgY29tbWFuZHMgdGhhdCBjcmVh dGUgZGF0YWJhc2Ugb2JqZWN0cy4gQWxzbyBjaGFuZ2UgZnVuY3Rpb24gZGVwYXJzZV9kZGxfanNv bl90b19zdHJpbmcKdG8gcmV0cmlldmUgdGhlIG15b3duZXIgZWxlbWVudCBmcm9tIGEganNvbmIg c3RyaW5nLgoKMy4gSW50cm9kdWNlIGEgbmV3IHN1YnNjcmlwdGlvbiBvcHRpb24gbWF0Y2hfZGRs X293bmVyOiB3aGVuIHR1cm5lZCBvbiwgdGhlIGFwcGx5IHdvcmtlcgp3aWxsIGFwcGx5IERETCBt ZXNzYWdlcyBpbiB0aGUgcm9sZSByZXRyaWV2ZWQgZnJvbSB0aGUgIm15b3duZXIiIGZpZWxkIG9m IHRoZSBkZXBhcnNlZApqc29uYiBzdHJpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIG1hdGNoX2Rk bF9vd25lciBpcyBvbi4KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5j ICAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgICAg ICAgICAgICAgfCAgODYgKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf anNvbi5jICAgICAgICAgICAgICAgIHwgIDI1ICsrKystCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMgICAgICAgICAgIHwgICA2ICsrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9z dWJzY3JpcHRpb25jbWRzLmMgICAgICAgIHwgIDI3ICsrKystCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYyAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jICAgICAgIHwgIDIyICsrKy0KIHNyYy9iaW4vcGdfZHVtcC9w Z19kdW1wLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMTYgKystCiBzcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5oICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4vcHNxbC9kZXNj cmliZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL2NhdGFs b2cvcGdfc3Vic2NyaXB0aW9uLmggICAgICAgICAgfCAgIDUgKwogc3JjL2luY2x1ZGUvdGNvcC9k ZGxfZGVwYXJzZS5oICAgICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvdGNvcC9k ZXBhcnNlX3V0aWxpdHkuaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQgICAgIHwgMTQ0ICsrKysrKysrKysrKy0tLS0tLS0tLS0t LS0KIHNyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwgfCAgMTcg KysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAyNjkgaW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5jCmluZGV4IGE1NmFlMzEuLjAyMmFh YjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKKysr IGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uYwpAQCAtNzEsNiArNzEsNyBA QCBHZXRTdWJzY3JpcHRpb24oT2lkIHN1YmlkLCBib29sIG1pc3Npbmdfb2spCiAJc3ViLT5zdHJl YW0gPSBzdWJmb3JtLT5zdWJzdHJlYW07CiAJc3ViLT50d29waGFzZXN0YXRlID0gc3ViZm9ybS0+ c3VidHdvcGhhc2VzdGF0ZTsKIAlzdWItPmRpc2FibGVvbmVyciA9IHN1YmZvcm0tPnN1YmRpc2Fi bGVvbmVycjsKKwlzdWItPm1hdGNoZGRsb3duZXIgPSBzdWJmb3JtLT5zdWJtYXRjaGRkbG93bmVy OwogCiAJLyogR2V0IGNvbm5pbmZvICovCiAJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1VCU0NS SVBUSU9OT0lELApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2Uu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKaW5kZXggMmI5ZWI0ZS4uNTYy MmZlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0xNzIsNyArMTcyLDcgQEAg c3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKIHN0YXRp YyBPYmpUcmVlICpuZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CiBz dGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWUoY2hhciAqZm10KTsKIHN0YXRpYyBPYmpFbGVtICpu ZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7Ci1zdGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJl ZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7Citz dGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNv bmJQYXJzZVN0YXRlICpzdGF0ZSwgY2hhciAqb3duZXIpOwogc3RhdGljIHZvaWQgcGdfZ2V0X2lu ZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAogCQkJCQkJCQkJIGNoYXIgKippbmRleF9h bSwKIAkJCQkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKQEAgLTk5MywxNCArOTkzLDM5IEBAIG9i anRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJl ZSAqdHJlZSkKIH0KIAogLyoKLSAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20g YW4gT2JqVHJlZS4KKyAqIFByb2Nlc3MgdGhlIHJvbGUgc3RyaW5nIGludG8gdGhlIG91dHB1dCBw YXJzZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK3JvbGVfdG9fanNvbmJfZWxlbWVudChKc29u YlBhcnNlU3RhdGUgKnN0YXRlLCBjaGFyICpvd25lcikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlK c29uYlZhbHVlCXZhbDsKKworCWlmIChvd25lciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQ dXNoIHRoZSBrZXkgZmlyc3QgKi8KKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0 cmluZy52YWwgPSAibXlvd25lciI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52 YWwuc3RyaW5nLnZhbCk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsK KworCS8qIFRoZW4gcHJvY2VzcyB0aGUgcm9sZSBzdHJpbmcgKi8KKwl2YWwudHlwZSA9IGpidlN0 cmluZzsKKwl2YWwudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob3duZXIpOworCXZhbC52YWwuc3Ry aW5nLnZhbCA9IG93bmVyOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFs KTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2Jq VHJlZSBhbmQgaXRzIG93bmVyIChpZiBnaXZlbikuCiAgKi8KIHN0YXRpYyBKc29uYiAqCi1vYmp0 cmVlX3RvX2pzb25iKE9ialRyZWUgKnRyZWUpCitvYmp0cmVlX3RvX2pzb25iKE9ialRyZWUgKnRy ZWUsIGNoYXIgKm93bmVyKQogewogCUpzb25iVmFsdWUgKnZhbHVlOwogCi0JdmFsdWUgPSBvYmp0 cmVlX3RvX2pzb25iX3JlYyh0cmVlLCBOVUxMKTsKKwl2YWx1ZSA9IG9ianRyZWVfdG9fanNvbmJf cmVjKHRyZWUsIE5VTEwsIG93bmVyKTsKIAlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUp OwogfQogCkBAIC0xMDUyLDcgKzEwNzcsNyBAQCBvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNv bmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAogCiAJCWNhc2UgT2JqVHlwZU9i amVjdDoKIAkJCS8qIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5n IHBhcnNlIHN0YXRlICovCi0JCQlvYmp0cmVlX3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9i amVjdCwgc3RhdGUpOworCQkJb2JqdHJlZV90b19qc29uYl9yZWMob2JqZWN0LT52YWx1ZS5vYmpl Y3QsIHN0YXRlLCBOVUxMKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgT2JqVHlwZUFycmF5OgpAQCAt MTA4MCwxMiArMTEwNSwxMyBAQCBvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0 YXRlICpzdGF0ZSwgT2JqRWxlbSAqb2JqZWN0LAogICogUmVjdXJzaXZlIGhlbHBlciBmb3Igb2Jq dHJlZV90b19qc29uYi4KICAqLwogc3RhdGljIEpzb25iVmFsdWUgKgotb2JqdHJlZV90b19qc29u Yl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK29ianRyZWVfdG9f anNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIGNoYXIgKm93 bmVyKQogewogCXNsaXN0X2l0ZXIJaXRlcjsKIAogCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pC X0JFR0lOX09CSkVDVCwgTlVMTCk7CiAKKwlyb2xlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG93 bmVyKTsKIAlvYmp0cmVlX2ZtdF90b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKIAogCXNs aXN0X2ZvcmVhY2goaXRlciwgJnRyZWUtPnBhcmFtcykKQEAgLTM3MTQsNyArMzc0MCw3IEBAIGRl cGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpv YmplY3R0eXBlLAogCQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERS T1BfQ0FTQ0FERSk7CiAJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2FkZX1zIiwg dG1wX29iaik7CiAKLQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJanNvbmIgPSBv Ymp0cmVlX3RvX2pzb25iKHN0bXQsIE5VTEwgLyogT3duZXIvcm9sZSBjYW4gYmUgc2tpcHBlZCBm b3IgZHJvcCBjb21tYW5kICovKTsKIAljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpz b25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsKIAogCXJldHVybiBjb21tYW5kOwpAQCAt OTgzMCw3ICs5ODU2LDcgQEAgZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uRHJvcFN0bXQoU1FMRHJv cE9iamVjdCAqb2JqKQogCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVycHViLCAiJXthZGRfb2Jq ZWN0fXMiLCBkcm9wX29iamVjdCk7CiAKIAlpbml0U3RyaW5nSW5mbygmc3RyKTsKLQlqc29uYiA9 IG9ianRyZWVfdG9fanNvbmIoYWx0ZXJwdWIpOworCWpzb25iID0gb2JqdHJlZV90b19qc29uYihh bHRlcnB1YiwgTlVMTCAvKiBPd25lci9yb2xlIGNhbiBiZSBza2lwcGVkIGZvciBkcm9wIGNvbW1h bmQgKi8pOwogCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpT T05CX0VTVElNQVRFRF9MRU4pOwogCiAJcmV0dXJuIGNvbW1hbmQ7CkBAIC05ODQyLDcgKzk4Njgs NyBAQCBkZXBhcnNlX0FsdGVyUHVibGljYXRpb25Ecm9wU3RtdChTUUxEcm9wT2JqZWN0ICpvYmop CiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9j ZXNzVXRpbGl0eVNsb3cuCiAgKi8KIHN0YXRpYyBPYmpUcmVlICoKLWRlcGFyc2Vfc2ltcGxlX2Nv bW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xs ZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgKmluY2x1ZGVfb3duZXIpCiB7CiAJT2lkCQkJb2JqZWN0 SWQ7CiAJTm9kZQkgICAqcGFyc2V0cmVlOwpAQCAtOTg1OSw2NCArOTg4NSw4MyBAQCBkZXBhcnNl X3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAlzd2l0Y2ggKG5vZGVUYWco cGFyc2V0cmVlKSkKIAl7CiAJCWNhc2UgVF9BbHRlckNvbGxhdGlvblN0bXQ6CisJCQkqaW5jbHVk ZV9vd25lciA9IGZhbHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJDb2xsYXRpb24ob2JqZWN0 SWQsIHBhcnNldHJlZSk7CiAKIAkJY2FzZSBUX0FsdGVyRG9tYWluU3RtdDoKKwkJCSppbmNsdWRl X293bmVyID0gZmFsc2U7CiAJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRvbWFpblN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkgICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVj dCk7CiAKIAkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJCQkqaW5jbHVkZV9vd25lciA9IGZhbHNl OwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK IAogCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQ6CisJCQkqaW5jbHVkZV9vd25l ciA9IGZhbHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25k YXJ5T2JqZWN0KTsKIAogCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25TdG10OgorCQkJKmluY2x1ZGVf b3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJGZHdTdG10OgorCQkJKmluY2x1ZGVf b3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0FsdGVyRmR3U3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJGb3JlaWduU2VydmVyU3RtdDoKKwkJCSppbmNs dWRlX293bmVyID0gZmFsc2U7CiAJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJT dG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwogCiAJCWNhc2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoK KwkJCSppbmNsdWRlX293bmVyID0gZmFsc2U7CiAJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZ1bmN0 aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOwogCiAJCWNhc2UgVF9BbHRlck9iamVjdERlcGVuZHNT dG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0FsdGVy RGVwZW5kU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJPYmplY3RT Y2hlbWFTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNl X0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCiAJCQkJCQkJCQkJ CQkgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0 KTsKIAogCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQkqaW5jbHVkZV9vd25lciA9IGZh bHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNl dHJlZSk7CiAKIAkJY2FzZSBUX0FsdGVyT3duZXJTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBm YWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0FsdGVyT3duZXJTdG10KGNtZC0+ZC5zaW1wbGUuYWRk cmVzcywgcGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJQb2xpY3lTdG10OgorCQkJKmluY2x1 ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJTZXFTdG10OgorCQkJKmluY2x1ZGVf b3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0FsdGVyU2VxU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJTdGF0c1N0bXQ6CisJCQkqaW5jbHVkZV9vd25l ciA9IGZhbHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJTdGF0c1N0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CiAKIAkJY2FzZSBUX0FsdGVyVFNEaWN0aW9uYXJ5U3RtdDoKKwkJCSppbmNsdWRl X293bmVyID0gZmFsc2U7CiAJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CiAKIAkJY2FzZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQkqaW5j bHVkZV9vd25lciA9IGZhbHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChv YmplY3RJZCwgcGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6CisJ CQkqaW5jbHVkZV9vd25lciA9IGZhbHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJVc2VyTWFw cGluZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CiAKIAkJY2FzZSBUX0NvbW1lbnRTdG10Ogor CQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0NvbW1lbnRTdG10 KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsKIAogCQljYXNlIFRfQ29tcG9zaXRl VHlwZVN0bXQ6CkBAIC05OTk2LDkgKzEwMDQxLDExIEBAIGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQo Q29sbGVjdGVkQ29tbWFuZCAqY21kKQogCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOwogCiAJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQkqaW5j bHVkZV9vd25lciA9IGZhbHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfUmVmcmVzaE1hdFZpZXdTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOwogCiAJCWNhc2UgVF9SZW5hbWVTdG10OgorCQkJKmluY2x1 ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX1JlbmFtZVN0bXQoY21kLT5kLnNp bXBsZS5hZGRyZXNzLCBwYXJzZXRyZWUpOwogCiAJCWNhc2UgVF9SdWxlU3RtdDoKQEAgLTEwMDIz LDkgKzEwMDcwLDE1IEBAIGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAq Y21kKQogCiAvKgogICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xsZWN0ZWRDb21tYW5kLgor ICoKKyAqIGluY2x1ZGVfb3duZXIgaW5kaWNhdGVzIGlmIHRoZSBvd25lci9yb2xlIG9mIHRoZSBj b21tYW5kIHNob3VsZCBiZQorICogaW5jbHVkZWQgaW4gdGhlIGRlcGFyc2VkIEpzb24gb3V0cHV0 LiBJdCBpcyBzZXQgdG8gZmFsc2UgZm9yIGFueSBjb21tYW5kcworICogdGhhdCBkb24ndCBDUkVB VEUgZGF0YWJhc2Ugb2JqZWN0cyAoQUxURVIgY29tbWFuZHMgZm9yIGV4YW1wbGUpLCB0aGlzIGlz CisgKiB0byBhdm9pZCBlbmNvZGluZyBhbmQgc2VuZGluZyB0aGUgb3duZXIgdG8gZG93bnN0cmVh bSBmb3IgcmVwbGF5IGFzIGl0IGlzCisgKiB1bm5lY2Vzc2FyeSBmb3Igc3VjaCBjb21tYW5kcy4K ICAqLwogY2hhciAqCi1kZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpj bWQsIGJvb2wgdmVyYm9zZV9tb2RlKQorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVk Q29tbWFuZCAqY21kLCBib29sIGluY2x1ZGVfb3duZXIsIGJvb2wgdmVyYm9zZV9tb2RlKQogewog CU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0 OwpAQCAtMTAwNjYsMzAgKzEwMTE5LDM2IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxl Y3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCiAJc3dpdGNoIChjbWQtPnR5cGUp CiAJewogCQljYXNlIFNDVF9TaW1wbGU6Ci0JCQl0cmVlID0gZGVwYXJzZV9zaW1wbGVfY29tbWFu ZChjbWQpOworCQkJdHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kLCAmaW5jbHVkZV9v d25lcik7CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKIAkJCXRyZWUgPSBkZXBh cnNlX0FsdGVyUmVsYXRpb24oY21kKTsKKwkJCWluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCWJy ZWFrOwogCQljYXNlIFNDVF9HcmFudDoKIAkJCXRyZWUgPSBkZXBhcnNlX0dyYW50U3RtdChjbWQp OworCQkJaW5jbHVkZV9vd25lciA9IGZhbHNlOwogCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0NyZWF0 ZVRhYmxlQXM6CiAJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOwogCQkJ YnJlYWs7CiAJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQlpbmNsdWRlX293bmVyID0gZmFs c2U7CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CiAJCQlicmVhazsKIAkJ Y2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKIAkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NT dG10KGNtZCk7CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlczoK KwkJCWluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyRGVmYXVs dFByaXZpbGVnZXNTdG10KGNtZCk7CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZp ZzoKKwkJCWluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVFND b25maWd1cmF0aW9uU3RtdChjbWQpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0NUX1NlY3VyaXR5TGFi ZWw6CisJCQlpbmNsdWRlX293bmVyID0gZmFsc2U7CiAJCQl0cmVlID0gZGVwYXJzZV9TZWNMYWJl bFN0bXQoY21kKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTAxMDIsNyArMTAxNjEsOCBA QCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVy Ym9zZV9tb2RlKQogCXsKIAkJSnNvbmIJICAgKmpzb25iOwogCi0JCWpzb25iID0gb2JqdHJlZV90 b19qc29uYih0cmVlKTsKKwkJanNvbmIgPSBpbmNsdWRlX293bmVyID8gb2JqdHJlZV90b19qc29u Yih0cmVlLCBjbWQtPnJvbGUpIDoKKwkJCQkJCQkJb2JqdHJlZV90b19qc29uYih0cmVlLCBOVUxM KTsKIAkJY29tbWFuZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJf RVNUSU1BVEVEX0xFTik7CiAJfQogCkBAIC0xMDEyOCw3ICsxMDE4OCw3IEBAIGRkbF9kZXBhcnNl X3RvX2pzb24oUEdfRlVOQ1RJT05fQVJHUykKIAlDb2xsZWN0ZWRDb21tYW5kICpjbWQgPSAoQ29s bGVjdGVkQ29tbWFuZCAqKSBQR19HRVRBUkdfUE9JTlRFUigwKTsKIAljaGFyCSAgICpjb21tYW5k OwogCi0JY29tbWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgdHJ1ZSk7CisJY29t bWFuZCA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UsIHRydWUpOwogCiAJaWYg KGNvbW1hbmQpCiAJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9kZGxfanNvbi5jCmluZGV4IDUzNmM2ZDguLjM4YjJkOTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2pzb24uYwpAQCAtNzE5LDcgKzcxOSw3IEBAIGV4cGFuZF9qc29uYl9hcnJheShTdHJp bmdJbmZvIGJ1ZiwgY2hhciAqcGFyYW0sCiAgKiBXb3JraG9yc2UgZm9yIGRkbF9kZXBhcnNlX2V4 cGFuZF9jb21tYW5kLgogICovCiBjaGFyICoKLWRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNo YXIgKmpzb25fc3RyKQorZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIs IGNoYXIqKiBvd25lcikKIHsKIAlEYXR1bQkJZDsKIAlKc29uYgkgICAqanNvbmI7CkBAIC03MzAs NiArNzMwLDI3IEBAIGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyKQog CWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwxKGpzb25iX2luLCBQb2ludGVyR2V0RGF0dW0oanNvbl9z dHIpKTsKIAlqc29uYiA9IChKc29uYiAqKSBEYXR1bUdldFBvaW50ZXIoZCk7CiAKKwlpZiAob3du ZXIgIT0gTlVMTCkKKwl7CisJCWNvbnN0IGNoYXIgKmtleSA9ICJteW93bmVyIjsKKwkJSnNvbmJW YWx1ZSAqdmFsdWU7CisKKwkJdmFsdWUgPSBnZXRLZXlKc29uVmFsdWVGcm9tQ29udGFpbmVyKCZq c29uYi0+cm9vdCwga2V5LCBzdHJsZW4oa2V5KSwgTlVMTCk7CisJCWlmICh2YWx1ZSkKKwkJewor CQkJY2hhciAqc3RyOworCisJCQkvKiB2YWx1ZS0+dmFsLnN0cmluZy52YWwgbWF5IG5vdCBiZSBO VUxMIHRlcm1pbmF0ZWQgKi8KKwkJCXN0ciA9IHBhbGxvYyh2YWx1ZS0+dmFsLnN0cmluZy5sZW4g KyAxKTsKKwkJCW1lbWNweShzdHIsIHZhbHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5z dHJpbmcubGVuKTsKKwkJCXN0clt2YWx1ZS0+dmFsLnN0cmluZy5sZW5dID0gJ1wwJzsKKwkJCSpv d25lciA9IHN0cjsKKwkJfQorCQllbHNlCisJCQkvKiBteW93bmVyIGlzIG5vdCBnaXZlbiBpbiB0 aGlzIGpzb25iLCBlLmcuIGZvciBEcm9wIENvbW1hbmRzICovCisJCQkqb3duZXIgPSBOVUxMOwor CX0KKwogCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGJ1ZiwgJmpzb25iLT5yb290KTsKIAogCXJldHVy biBidWYtPmRhdGE7CkBAIC03NjYsNyArNzg3LDcgQEAgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1h bmQoUEdfRlVOQ1RJT05fQVJHUykKIAogCWpzb25fc3RyID0gdGV4dF90b19jc3RyaW5nKGpzb24p OwogCi0JUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQoZGVwYXJzZV9kZGxfanNvbl90 b19zdHJpbmcoanNvbl9zdHIpKSk7CisJUEdfUkVUVVJOX1RFWFRfUChjc3RyaW5nX3RvX3RleHQo ZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoanNvbl9zdHIsIE5VTEwpKSk7CiB9CiAKIC8qCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggYjNmNjg0OS4uMjc1YzQwMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtODgyLDYgKzg4Miw3IEBAIEV2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFuZC0+ dHlwZSA9IChzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkgPyBTQ1RfQ3JlYXRlVGFibGVB cyA6IFNDVF9TaW1wbGU7CiAJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5z aW9uOworCWNvbW1hbmQtPnJvbGUgPSBHZXRVc2VyTmFtZUZyb21JZChHZXRVc2VySWQoKSwgZmFs c2UpOwogCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gSW52YWxpZE9iamVjdEFkZHJlc3M7CiAJ Y29tbWFuZC0+ZC5jdGFzLnJlYWxfY3JlYXRlID0gTlVMTDsKIAljb21tYW5kLT5wYXJzZXRyZWUg PSBjb3B5T2JqZWN0KHBhcnNldHJlZSk7CkBAIC0xNjI3LDYgKzE2MjgsNyBAQCBFdmVudFRyaWdn ZXJDb2xsZWN0U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiAKIAljb21tYW5k LT50eXBlID0gU0NUX1NpbXBsZTsKIAljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19l eHRlbnNpb247CisJY29tbWFuZC0+cm9sZSA9IEdldFVzZXJOYW1lRnJvbUlkKEdldFVzZXJJZCgp LCBmYWxzZSk7CiAKIAljb21tYW5kLT5kLnNpbXBsZS5hZGRyZXNzID0gYWRkcmVzczsKIAljb21t YW5kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QgPSBzZWNvbmRhcnlPYmplY3Q7CkBAIC0xNjYz LDYgKzE2NjUsNyBAQCBFdmVudFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVl KQogCiAJY29tbWFuZC0+dHlwZSA9IFNDVF9BbHRlclRhYmxlOwogCWNvbW1hbmQtPmluX2V4dGVu c2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21tYW5kLT5yb2xlID0gR2V0VXNlck5hbWVG cm9tSWQoR2V0VXNlcklkKCksIGZhbHNlKTsKIAogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFz c0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJ ZCA9IEludmFsaWRPaWQ7CkBAIC0xOTMwLDYgKzE5MzMsNyBAQCBFdmVudFRyaWdnZXJDb2xsZWN0 R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpCiAJY29tbWFuZCA9IHBhbGxvYyhzaXplb2YoQ29s bGVjdGVkQ29tbWFuZCkpOwogCWNvbW1hbmQtPnR5cGUgPSBTQ1RfR3JhbnQ7CiAJY29tbWFuZC0+ aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPnJvbGUgPSBHZXRV c2VyTmFtZUZyb21JZChHZXRVc2VySWQoKSwgZmFsc2UpOwogCWNvbW1hbmQtPmQuZ3JhbnQuaXN0 bXQgPSBpY29weTsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBOVUxMOwogCkBAIC0xOTYxLDYgKzE5 NjUsNyBAQCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJPcEZhbShBbHRlck9wRmFtaWx5U3RtdCAq c3RtdCwgT2lkIG9wZmFtb2lkLAogCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENv bW1hbmQpKTsKIAljb21tYW5kLT50eXBlID0gU0NUX0FsdGVyT3BGYW1pbHk7CiAJY29tbWFuZC0+ aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPnJvbGUgPSBHZXRV c2VyTmFtZUZyb21JZChHZXRVc2VySWQoKSwgZmFsc2UpOwogCU9iamVjdEFkZHJlc3NTZXQoY29t bWFuZC0+ZC5vcGZhbS5hZGRyZXNzLAogCQkJCQkgT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLCBv cGZhbW9pZCk7CiAJY29tbWFuZC0+ZC5vcGZhbS5vcGVyYXRvcnMgPSBvcGVyYXRvcnM7CkBAIC0y MDkxLDYgKzIwOTYsNyBAQCBFdmVudFRyaWdnZXJDb2xsZWN0U2VjTGFiZWwoT2JqZWN0QWRkcmVz cyBhZGRyZXNzLCBjaGFyICpwcm92aWRlciwKIAljb21tYW5kID0gcGFsbG9jMChzaXplb2YoQ29s bGVjdGVkQ29tbWFuZCkpOwogCWNvbW1hbmQtPnR5cGUgPSBTQ1RfU2VjdXJpdHlMYWJlbDsKIAlj b21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRlbnNpb247CisJY29tbWFuZC0+cm9s ZSA9IEdldFVzZXJOYW1lRnJvbUlkKEdldFVzZXJJZCgpLCBmYWxzZSk7CiAJY29tbWFuZC0+ZC5z ZWNsYWJlbC5hZGRyZXNzID0gYWRkcmVzczsKIAljb21tYW5kLT5kLnNlY2xhYmVsLnByb3ZpZGVy ID0gcHJvdmlkZXI7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gKE5vZGUgKikgY29weU9iamVjdChz dG10KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMu YyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCA0NjRkYjZk Li5mN2JiNzM4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25j bWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC02 Niw2ICs2Niw3IEBACiAjZGVmaW5lIFNVQk9QVF9ESVNBQkxFX09OX0VSUgkJMHgwMDAwMDQwMAog I2RlZmluZSBTVUJPUFRfTFNOCQkJCQkweDAwMDAwODAwCiAjZGVmaW5lIFNVQk9QVF9PUklHSU4J CQkJMHgwMDAwMTAwMAorI2RlZmluZSBTVUJPUFRfTUFUQ0hfRERMX09XTkVSCQkweDAwMDAyMDAw CiAKIC8qIGNoZWNrIGlmIHRoZSAndmFsJyBoYXMgJ2JpdHMnIHNldCAqLwogI2RlZmluZSBJc1Nl dCh2YWwsIGJpdHMpICAoKCh2YWwpICYgKGJpdHMpKSA9PSAoYml0cykpCkBAIC04OSw2ICs5MCw3 IEBAIHR5cGVkZWYgc3RydWN0IFN1Yk9wdHMKIAlib29sCQl0d29waGFzZTsKIAlib29sCQlkaXNh Ymxlb25lcnI7CiAJY2hhcgkgICAqb3JpZ2luOworCWJvb2wJCW1hdGNoZGRsb3duZXI7CiAJWExv Z1JlY1B0cglsc247CiB9IFN1Yk9wdHM7CiAKQEAgLTE0Niw2ICsxNDgsOCBAQCBwYXJzZV9zdWJz Y3JpcHRpb25fb3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKnN0bXRfb3B0aW9ucywK IAkJb3B0cy0+ZGlzYWJsZW9uZXJyID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRz LCBTVUJPUFRfT1JJR0lOKSkKIAkJb3B0cy0+b3JpZ2luID0gcHN0cmR1cChMT0dJQ0FMUkVQX09S SUdJTl9BTlkpOworCWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX01BVENIX0RETF9P V05FUikpCisJCW9wdHMtPm1hdGNoZGRsb3duZXIgPSB0cnVlOwogCiAJLyogUGFyc2Ugb3B0aW9u cyAqLwogCWZvcmVhY2gobGMsIHN0bXRfb3B0aW9ucykKQEAgLTMyNCw2ICszMjgsMTUgQEAgcGFy c2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpzdG10X29w dGlvbnMsCiAJCQlvcHRzLT5zcGVjaWZpZWRfb3B0cyB8PSBTVUJPUFRfTFNOOwogCQkJb3B0cy0+ bHNuID0gbHNuOwogCQl9CisJCWVsc2UgaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRf TUFUQ0hfRERMX09XTkVSKSAmJgorCQkJCSBzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJtYXRjaF9k ZGxfb3duZXIiKSA9PSAwKQorCQl7CisJCQlpZiAoSXNTZXQob3B0cy0+c3BlY2lmaWVkX29wdHMs IFNVQk9QVF9NQVRDSF9ERExfT1dORVIpKQorCQkJCWVycm9yQ29uZmxpY3RpbmdEZWZFbGVtKGRl ZmVsLCBwc3RhdGUpOworCisJCQlvcHRzLT5zcGVjaWZpZWRfb3B0cyB8PSBTVUJPUFRfTUFUQ0hf RERMX09XTkVSOworCQkJb3B0cy0+bWF0Y2hkZGxvd25lciA9IGRlZkdldEJvb2xlYW4oZGVmZWwp OworCQl9CiAJCWVsc2UKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKQEAgLTU2MCw3ICs1NzMsOCBAQCBDcmVhdGVTdWJzY3JpcHRpb24oUGFy c2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCQkJCQkgIFNV Qk9QVF9TTE9UX05BTUUgfCBTVUJPUFRfQ09QWV9EQVRBIHwKIAkJCQkJICBTVUJPUFRfU1lOQ0hS T05PVVNfQ09NTUlUIHwgU1VCT1BUX0JJTkFSWSB8CiAJCQkJCSAgU1VCT1BUX1NUUkVBTUlORyB8 IFNVQk9QVF9UV09QSEFTRV9DT01NSVQgfAotCQkJCQkgIFNVQk9QVF9ESVNBQkxFX09OX0VSUiB8 IFNVQk9QVF9PUklHSU4pOworCQkJCQkgIFNVQk9QVF9ESVNBQkxFX09OX0VSUiB8IFNVQk9QVF9P UklHSU4gfAorCQkJCQkgIFNVQk9QVF9NQVRDSF9ERExfT1dORVIpOwogCXBhcnNlX3N1YnNjcmlw dGlvbl9vcHRpb25zKHBzdGF0ZSwgc3RtdC0+b3B0aW9ucywgc3VwcG9ydGVkX29wdHMsICZvcHRz KTsKIAogCS8qCkBAIC02NDksNiArNjYzLDcgQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJcHVibGljYXRpb25M aXN0VG9BcnJheShwdWJsaWNhdGlvbnMpOwogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9z dWJvcmlnaW4gLSAxXSA9CiAJCUNTdHJpbmdHZXRUZXh0RGF0dW0ob3B0cy5vcmlnaW4pOworCXZh bHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJtYXRjaGRkbG93bmVyIC0gMV0gPSBCb29sR2V0 RGF0dW0ob3B0cy5tYXRjaGRkbG93bmVyKTsKIAogCXR1cCA9IGhlYXBfZm9ybV90dXBsZShSZWxh dGlvbkdldERlc2NyKHJlbCksIHZhbHVlcywgbnVsbHMpOwogCkBAIC0xMDU0LDcgKzEwNjksNyBA QCBBbHRlclN1YnNjcmlwdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyU3Vic2NyaXB0aW9u U3RtdCAqc3RtdCwKIAkJCQlzdXBwb3J0ZWRfb3B0cyA9IChTVUJPUFRfU0xPVF9OQU1FIHwKIAkJ CQkJCQkJICBTVUJPUFRfU1lOQ0hST05PVVNfQ09NTUlUIHwgU1VCT1BUX0JJTkFSWSB8CiAJCQkJ CQkJCSAgU1VCT1BUX1NUUkVBTUlORyB8IFNVQk9QVF9ESVNBQkxFX09OX0VSUiB8Ci0JCQkJCQkJ CSAgU1VCT1BUX09SSUdJTik7CisJCQkJCQkJCSAgU1VCT1BUX09SSUdJTiB8IFNVQk9QVF9NQVRD SF9ERExfT1dORVIpOwogCiAJCQkJcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMocHN0YXRlLCBz dG10LT5vcHRpb25zLAogCQkJCQkJCQkJCSAgIHN1cHBvcnRlZF9vcHRzLCAmb3B0cyk7CkBAIC0x MTE4LDYgKzExMzMsMTQgQEAgQWx0ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBB bHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQkJCXJlcGxhY2VzW0FudW1fcGdfc3Vic2Ny aXB0aW9uX3N1Ym9yaWdpbiAtIDFdID0gdHJ1ZTsKIAkJCQl9CiAKKwkJCQlpZiAoSXNTZXQob3B0 cy5zcGVjaWZpZWRfb3B0cywgU1VCT1BUX01BVENIX0RETF9PV05FUikpCisJCQkJeworCQkJCQl2 YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VibWF0Y2hkZGxvd25lciAtIDFdCisJCQkJCQk9 IEJvb2xHZXREYXR1bShvcHRzLm1hdGNoZGRsb3duZXIpOworCQkJCQlyZXBsYWNlc1tBbnVtX3Bn X3N1YnNjcmlwdGlvbl9zdWJtYXRjaGRkbG93bmVyIC0gMV0KKwkJCQkJCT0gdHJ1ZTsKKwkJCQl9 CisKIAkJCQl1cGRhdGVfdHVwbGUgPSB0cnVlOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYwppbmRleCBkNjhhNTA3Li41Y2Nm ZWZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdn ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbHRyaWdnZXIuYwpA QCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19G VU5DVElPTl9BUkdTKQogCWlmIChyZWxwZXJzaXN0ICE9IFJFTFBFUlNJU1RFTkNFX1RFTVApCiAJ ewogCQkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBk ZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KLQkJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlf Y29tbWFuZChjbWQsIGZhbHNlKTsKKwkJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29t bWFuZChjbWQsIHRydWUsIGZhbHNlKTsKIAogCQlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKIAkJ CUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLmFsdGVyVGFibGUub2JqZWN0 SWQsIERDVF9UYWJsZUFsdGVyLApAQCAtMjAwLDcgKzIwMCw3IEBAIHB1YmxpY2F0aW9uX2RlcGFy c2VfZGRsX2NvbW1hbmRfZW5kKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkgKiBEZXBhcnNlIHRoZSBE REwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUKIAkJCSAq IHNhbWUuCiAJCQkgKi8KLQkJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQo Y21kLCBmYWxzZSk7CisJCQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNt ZCwgdHJ1ZSwgZmFsc2UpOwogCiAJCQlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKIAkJCQlMb2dM b2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBlLCBqc29uX3N0cmluZywKQEAg LTM1NSw3ICszNTUsNyBAQCBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUoUEdf RlVOQ1RJT05fQVJHUykKIAkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKIAogCS8qIERl cGFyc2UgdGhlIERETCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9m IHRoZSBzYW1lLiAqLwotCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21k LCBmYWxzZSk7CisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRy dWUsIGZhbHNlKTsKIAogCWlmIChqc29uX3N0cmluZyAhPSBOVUxMKQogCQlMb2dMb2dpY2FsRERM TWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCwgRENUX1Np bXBsZUNtZCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29y a2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDFh OGFmYjkuLjAxZjAyMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIu YwpAQCAtMzM1NywyMSArMzM1NywzMyBAQCBhcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykK IAljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOwogCWNoYXIJICAgKm1lc3NhZ2UgPSBOVUxMOwog CWNoYXIJICAgKmRkbF9jb21tYW5kOworCWNoYXIJICAgKm93bmVyOwogCVNpemUJCXN6OwogCUxp c3QJICAgKnBhcnNldHJlZV9saXN0OwogCUxpc3RDZWxsICAgKnBhcnNldHJlZV9pdGVtOwogCURl c3RSZWNlaXZlciAqcmVjZWl2ZXI7CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwogCWNvbnN0 IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3RyaW5nOworCWlu dAkJCXNhdmVfbmVzdGxldmVsID0gMDsKIAogCW1lc3NhZ2UgPSBsb2dpY2FscmVwX3JlYWRfZGRs KHMsICZsc24sICZwcmVmaXgsICZzeik7CiAKIAkvKiBNYWtlIHN1cmUgd2UgYXJlIGluIGEgdHJh bnNhY3Rpb24gY29tbWFuZCAqLwogCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAotCWRkbF9j b21tYW5kID0gZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcobWVzc2FnZSk7CisJZGRsX2NvbW1h bmQgPSBkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhtZXNzYWdlLCAmb3duZXIpOwogCWRlYnVn X3F1ZXJ5X3N0cmluZyA9IGRkbF9jb21tYW5kOwogCisJaWYgKE15U3Vic2NyaXB0aW9uLT5tYXRj aGRkbG93bmVyICYmIG93bmVyKQorCXsKKwkJLyoKKwkJICogU2V0IHRoZSBjdXJyZW50IHJvbGUg dG8gdGhlIG93bmVyIHRoYXQgZXhlY3V0ZWQgdGhlIGNvbW1hbmQgb24gdGhlCisJCSAqIHB1Ymxp Y2F0aW9uIHNlcnZlci4KKwkJICovCisJCXNhdmVfbmVzdGxldmVsID0gTmV3R1VDTmVzdExldmVs KCk7CisJCVNldENvbmZpZ09wdGlvbigicm9sZSIsIG93bmVyLCBQR0NfSU5URVJOQUwsIFBHQ19T X09WRVJSSURFKTsKKwl9CisKIAkvKiBEZXN0Tm9uZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiAq LwogCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERlc3ROb25lKTsKIAlwYXJzZXRyZWVf bGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsKQEAgLTM0NjksNiArMzQ4MSwxNCBA QCBhcHBseV9oYW5kbGVfZGRsKFN0cmluZ0luZm8gcykKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShw ZXJfcGFyc2V0cmVlX2NvbnRleHQpOwogCX0KIAorCS8qCisJICogUmVzdG9yZSB0aGUgR1VDIHZh cmlhYmxlcyB3ZSBzZXQgYWJvdmUuCisJICovCisJaWYgKHNhdmVfbmVzdGxldmVsID4gMCkKKwl7 CisJCUF0RU9YYWN0X0dVQyh0cnVlLCBzYXZlX25lc3RsZXZlbCk7CisJfQorCiAJZGVidWdfcXVl cnlfc3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CiAJZW5kX3JlcGxpY2F0aW9uX3N0 ZXAoKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4IDMwN2VkY2MuLmRlMmQ5Y2QgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpA QCAtNDUxOSw2ICs0NTE5LDcgQEAgZ2V0U3Vic2NyaXB0aW9ucyhBcmNoaXZlICpmb3V0KQogCWlu dAkJCWlfc3Vic3luY2NvbW1pdDsKIAlpbnQJCQlpX3N1YnB1YmxpY2F0aW9uczsKIAlpbnQJCQlp X3N1YmJpbmFyeTsKKwlpbnQJCQlpX3N1Ym1hdGNoZGRsb3duZXI7CiAJaW50CQkJaSwKIAkJCQlu dHVwczsKIApAQCAtNDU3MSw5ICs0NTcyLDE0IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAq Zm91dCkKIAkJCQkJCSAgTE9HSUNBTFJFUF9UV09QSEFTRV9TVEFURV9ESVNBQkxFRCk7CiAKIAlp ZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxNjAwMDApCi0JCWFwcGVuZFBRRXhwQnVmZmVyU3Ry KHF1ZXJ5LCAiIHMuc3Vib3JpZ2luXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks CisJCQkJCQkJICIgcy5zdWJvcmlnaW4sXG4iCisJCQkJCQkJICIgcy5zdWJtYXRjaGRkbG93bmVy XG4iKTsKIAllbHNlCi0JCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiICclcycgQVMgc3Vib3Jp Z2luXG4iLCBMT0dJQ0FMUkVQX09SSUdJTl9BTlkpOworCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVy eSwKKwkJCQkJCSAgIiAnJXMnIEFTIHN1Ym9yaWdpbixcbiIKKwkJCQkJCSAgIiBmYWxzZSBBUyBz dWJtYXRjaGRkbG93bmVyXG4iLAorCQkJCQkJICBMT0dJQ0FMUkVQX09SSUdJTl9BTlkpOwogCiAJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkgIkZST00gcGdfc3Vic2NyaXB0aW9u IHNcbiIKQEAgLTQ2MDEsNiArNDYwNyw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91 dCkKIAlpX3N1YnR3b3BoYXNlc3RhdGUgPSBQUWZudW1iZXIocmVzLCAic3VidHdvcGhhc2VzdGF0 ZSIpOwogCWlfc3ViZGlzYWJsZW9uZXJyID0gUFFmbnVtYmVyKHJlcywgInN1YmRpc2FibGVvbmVy ciIpOwogCWlfc3Vib3JpZ2luID0gUFFmbnVtYmVyKHJlcywgInN1Ym9yaWdpbiIpOworCWlfc3Vi bWF0Y2hkZGxvd25lciA9IFBRZm51bWJlcihyZXMsICJzdWJtYXRjaGRkbG93bmVyIik7CiAKIAlz dWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFN1YnNjcmlwdGlvbkluZm8pKTsKIApA QCAtNDYzMSw2ICs0NjM4LDggQEAgZ2V0U3Vic2NyaXB0aW9ucyhBcmNoaXZlICpmb3V0KQogCQlz dWJpbmZvW2ldLnN1YmRpc2FibGVvbmVyciA9CiAJCQlwZ19zdHJkdXAoUFFnZXR2YWx1ZShyZXMs IGksIGlfc3ViZGlzYWJsZW9uZXJyKSk7CiAJCXN1YmluZm9baV0uc3Vib3JpZ2luID0gcGdfc3Ry ZHVwKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3N1Ym9yaWdpbikpOworCQlzdWJpbmZvW2ldLnN1Ym1h dGNoZGRsb3duZXIgPQorCQkJcGdfc3RyZHVwKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3N1Ym1hdGNo ZGRsb3duZXIpKTsKIAogCQkvKiBEZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8K IAkJc2VsZWN0RHVtcGFibGVPYmplY3QoJihzdWJpbmZvW2ldLmRvYmopLCBmb3V0KTsKQEAgLTQ3 MDksNiArNDcxOCw5IEBAIGR1bXBTdWJzY3JpcHRpb24oQXJjaGl2ZSAqZm91dCwgY29uc3QgU3Vi c2NyaXB0aW9uSW5mbyAqc3ViaW5mbykKIAlpZiAocGdfc3RyY2FzZWNtcChzdWJpbmZvLT5zdWJv cmlnaW4sIExPR0lDQUxSRVBfT1JJR0lOX0FOWSkgIT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXIo cXVlcnksICIsIG9yaWdpbiA9ICVzIiwgc3ViaW5mby0+c3Vib3JpZ2luKTsKIAorCWlmIChzdHJj bXAoc3ViaW5mby0+c3VibWF0Y2hkZGxvd25lciwgImYiKSA9PSAwKQorCQlhcHBlbmRQUUV4cEJ1 ZmZlclN0cihxdWVyeSwgIiwgbWF0Y2hfZGRsX293bmVyID0gZmFsc2UiKTsKKwogCWlmIChzdHJj bXAoc3ViaW5mby0+c3Vic3luY2NvbW1pdCwgIm9mZiIpICE9IDApCiAJCWFwcGVuZFBRRXhwQnVm ZmVyKHF1ZXJ5LCAiLCBzeW5jaHJvbm91c19jb21taXQgPSAlcyIsIGZtdElkKHN1YmluZm8tPnN1 YnN5bmNjb21taXQpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBi L3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggM2VhMzBjZS4uNTY0NTFkNiAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAorKysgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5oCkBAIC02NjMsNiArNjYzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1N1YnNjcmlwdGlvbklu Zm8KIAljaGFyCSAgICpzdWJvcmlnaW47CiAJY2hhcgkgICAqc3Vic3luY2NvbW1pdDsKIAljaGFy CSAgICpzdWJwdWJsaWNhdGlvbnM7CisJY2hhcgkgICAqc3VibWF0Y2hkZGxvd25lcjsKIH0gU3Vi c2NyaXB0aW9uSW5mbzsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j IGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggNjY3ZTYyYi4uYWNjMjlmMSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJl LmMKQEAgLTY0OTUsNyArNjQ5NSw3IEBAIGRlc2NyaWJlU3Vic2NyaXB0aW9ucyhjb25zdCBjaGFy ICpwYXR0ZXJuLCBib29sIHZlcmJvc2UpCiAJUEdyZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlP cHQgbXlvcHQgPSBwc2V0LnBvcHQ7CiAJc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVt bnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLQlmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCWZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBz ZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpAQCAtNjU1Miw4ICs2NTUyLDEwIEBAIGRlc2NyaWJl U3Vic2NyaXB0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZlcmJvc2UpCiAKIAkJaWYg KHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKQogCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKLQkJ CQkJCQkgICIsIHN1Ym9yaWdpbiBBUyBcIiVzXCJcbiIsCi0JCQkJCQkJICBnZXR0ZXh0X25vb3Ao Ik9yaWdpbiIpKTsKKwkJCQkJCQkgICIsIHN1Ym9yaWdpbiBBUyBcIiVzXCJcbiIKKwkJCQkJCQkg ICIsIHN1Ym1hdGNoZGRsb3duZXIgQVMgXCIlc1wiXG4iLAorCQkJCQkJCSAgZ2V0dGV4dF9ub29w KCJPcmlnaW4iKSwKKwkJCQkJCQkgIGdldHRleHRfbm9vcCgiTWF0Y2ggRERMIG93bmVyIikpOwog CiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkgICIsICBzdWJzeW5jY29tbWl0IEFT IFwiJXNcIlxuIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRp b24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKaW5kZXggYjBmMmEx Ny4uMTdhZjdjNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRp b24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCkBAIC04OCw2 ICs4OCw5IEBAIENBVEFMT0cocGdfc3Vic2NyaXB0aW9uLDYxMDAsU3Vic2NyaXB0aW9uUmVsYXRp b25JZCkgQktJX1NIQVJFRF9SRUxBVElPTiBCS0lfUk9XCiAJYm9vbAkJc3ViZGlzYWJsZW9uZXJy OwkvKiBUcnVlIGlmIGEgd29ya2VyIGVycm9yIHNob3VsZCBjYXVzZSB0aGUKIAkJCQkJCQkJCSAq IHN1YnNjcmlwdGlvbiB0byBiZSBkaXNhYmxlZCAqLwogCisJYm9vbAkJc3VibWF0Y2hkZGxvd25l cjsJLyogVHJ1ZSBpZiByZXBsaWNhdGVkIG9iamVjdHMgYnkgRERMIHJlcGxpY2F0aW9uCisJCQkJ CQkJCQkgKiBzaG91bGQgbWF0Y2ggdGhlIG9yaWdpbmFsIG93bmVyIG9uIHRoZSBwdWJsaXNoZXIg Ki8KKwogI2lmZGVmIENBVEFMT0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBz dGFydCBoZXJlICovCiAJLyogQ29ubmVjdGlvbiBzdHJpbmcgdG8gdGhlIHB1Ymxpc2hlciAqLwog CXRleHQJCXN1YmNvbm5pbmZvIEJLSV9GT1JDRV9OT1RfTlVMTDsKQEAgLTEzNyw2ICsxNDAsOCBA QCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CS8q IExpc3Qgb2YgcHVibGljYXRpb24gbmFtZXMgdG8gc3Vic2NyaWJlIHRvICovCiAJY2hhcgkgICAq b3JpZ2luOwkJCS8qIE9ubHkgcHVibGlzaCBkYXRhIG9yaWdpbmF0aW5nIGZyb20gdGhlCiAJCQkJ CQkJCSAqIHNwZWNpZmllZCBvcmlnaW4gKi8KKwlib29sCQltYXRjaGRkbG93bmVyOyAgLyogSW5k aWNhdGVzIGlmIHJlcGxpY2F0ZWQgb2JqZWN0cyBieSBEREwgcmVwbGljYXRpb24KKwkJCQkJCQkJ ICogc2hvdWxkIG1hdGNoIHRoZSBvcmlnaW5hbCBvd25lciBvbiB0aGUgcHVibGlzaGVyICovCiB9 IFN1YnNjcmlwdGlvbjsKIAogLyogRGlzYWxsb3cgc3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5z YWN0aW9ucy4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBi L3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAppbmRleCA2NTUyYzIwLi5kNjFmNjY2IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKKysrIGIvc3JjL2luY2x1 ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0yNSw4ICsyNSw4IEBAIHR5cGVkZWYgc3RydWN0IHB1 YmxpY2F0aW9uX3JlbAogCUxpc3QJICAgKmNvbHVtbkxpc3Q7CQkvKiBjb2x1bW4gbGlzdCAqLwog fQkJCXB1YmxpY2F0aW9uX3JlbDsKIAotZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21t YW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOwotZXh0ZXJuIGNo YXIgKmRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVybiBjaGFy ICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgaW5j bHVkZV9vd25lciwgYm9vbCB2ZXJib3NlX21vZGUpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfZGRs X2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iLCBjaGFyKiogb3duZXIpOwogZXh0ZXJuIGNoYXIg KmRlcGFyc2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFy ICpvYmplY3R0eXBlLAogCQkJCQkJCQkgIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CiBleHRlcm4g Y2hhciAqIGRlcGFyc2VfQWx0ZXJQdWJsaWNhdGlvbkRyb3BTdG10KFNRTERyb3BPYmplY3QgKm9i aik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3Jj L2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBmYmQwOTc2Li5jY2UzYzA3IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBiL3NyYy9p bmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTQ5LDYgKzQ5LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgQ29sbGVjdGVkQ29tbWFuZAogCUNvbGxlY3RlZENvbW1hbmRUeXBlIHR5cGU7CiAKIAli b29sCQlpbl9leHRlbnNpb247CisJY2hhcgkgICAqcm9sZTsKIAlOb2RlCSAgICpwYXJzZXRyZWU7 CiAKIAl1bmlvbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3Jp cHRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0Cmlu ZGV4IDNmOTliMTQuLmFmODk0ZjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNj cmlwdGlvbi5vdXQKQEAgLTExNCwxOCArMTE0LDE4IEBAIENSRUFURSBTVUJTQ1JJUFRJT04gcmVn cmVzc190ZXN0c3ViNCBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBV CiBXQVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5lY3Rl ZAogSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVh dGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGVuYWJsZSB0aGUgc3Vic2NyaXB0aW9uLCBhbmQgcmVm cmVzaCB0aGUgc3Vic2NyaXB0aW9uLgogXGRScysgcmVncmVzc190ZXN0c3ViNAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgICBOYW1l ICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlv biB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVy cm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAg ICAgICAgIHwgU2tpcCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBub25lICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBP d25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1p bmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IE1hdGNo IERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAg ICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8 IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAg ICAgICAgfCBmICAgICAgICAgICAgICAgIHwgbm9uZSAgIHwgdCAgICAgICAgICAgICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSBy b3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI0IFNFVCAob3JpZ2luID0g YW55KTsKIFxkUnMrIHJlZ3Jlc3NfdGVzdHN1YjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0gICAgICAgTmFtZSAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJl YW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAotLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWI0IHwgcmVn cmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8 IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAg IHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8w CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2Ny aXB0aW9ucworICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg RW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNv bW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBNYXRjaCBEREwgb3duZXIgfCBTeW5j aHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAK Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVz c190ZXN0c3ViNCB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IHQgICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBEUk9QIFNVQlND UklQVElPTiByZWdyZXNzX3Rlc3RzdWIzOwpAQCAtMTQzLDEwICsxNDMsMTAgQEAgQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdmb29iYXInOwogRVJST1I6ICBp bnZhbGlkIGNvbm5lY3Rpb24gc3RyaW5nIHN5bnRheDogbWlzc2luZyAiPSIgYWZ0ZXIgImZvb2Jh ciIgaW4gY29ubmVjdGlvbiBpbmZvIHN0cmluZwogCiBcZFJzKwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5 IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmln aW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBT a2lwIExTTiAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIg fCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAg ICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBh bnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3Qg fCAwLzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBz dWJzY3JpcHRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFz ZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwg U3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBM U04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVz dHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAg ICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAgICAgICAgICAgICAg IHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNV QlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIFBVQkxJQ0FUSU9OIHRlc3RwdWIyLCB0ZXN0 cHViMyBXSVRIIChyZWZyZXNoID0gZmFsc2UpOwpAQCAtMTYzLDEwICsxNjMsMTAgQEAgRVJST1I6 ICB1bnJlY29nbml6ZWQgc3Vic2NyaXB0aW9uIHBhcmFtZXRlcjogImNyZWF0ZV9zbG90IgogLS0g b2sKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0tJUCAobHNuID0gJzAvMTIz NDUnKTsKIFxkUnMrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgRW5hYmxlZCB8ICAgICBQdWJsaWNhdGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcg fCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9u b3VzIGNvbW1pdCB8ICAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30g fCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdDIgfCAwLzEyMzQ1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8ICAgICBQdWJsaWNhdGlvbiAgICAgfCBCaW5hcnkg fCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdp biB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgICBDb25u aW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAgICAg fCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAg ICB8IHQgICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNz X2RvZXNub3RleGlzdDIgfCAwLzEyMzQ1CiAoMSByb3cpCiAKIC0tIG9rIC0gd2l0aCBsc24gPSBO T05FCkBAIC0xNzUsMTAgKzE3NSwxMCBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0 c3ViIFNLSVAgKGxzbiA9IE5PTkUpOwogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1 YiBTS0lQIChsc24gPSAnMC8wJyk7CiBFUlJPUjogIGludmFsaWQgV0FMIGxvY2F0aW9uIChMU04p OiAwLzAKIFxkUnMrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgRW5hYmxlZCB8ICAgICBQdWJsaWNhdGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcg fCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9u b3VzIGNvbW1pdCB8ICAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30g fCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAg ICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3Rl eGlzdDIgfCAwLzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBFbmFibGVkIHwgICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFyeSB8IFN0 cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwg TWF0Y2ggRERMIG93bmVyIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgIENvbm5pbmZv ICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2Ny aXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9m ZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwg dCAgICAgICAgICAgICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9l c25vdGV4aXN0MiB8IDAvMAogKDEgcm93KQogCiBCRUdJTjsKQEAgLTIxMCwxMCArMjEwLDEwIEBA IEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWJfZm9vIFNFVCAoc3luY2hyb25vdXNf Y29tbWl0ID0gZm9vYmFyKTsKIEVSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJz eW5jaHJvbm91c19jb21taXQiOiAiZm9vYmFyIgogSElOVDogIEF2YWlsYWJsZSB2YWx1ZXM6IGxv Y2FsLCByZW1vdGVfd3JpdGUsIHJlbW90ZV9hcHBseSwgb24sIG9mZi4KIFxkUnMrCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwotICAg ICAgICBOYW1lICAgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8 ICAgICBQdWJsaWNhdGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29t bWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAg ICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViX2ZvbyB8IHJlZ3Jlc3Nf c3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAg ICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55 ICAgIHwgbG9jYWwgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8 IDAvMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgIHwgICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgUHVibGljYXRpb24gICAgIHwgQmluYXJ5IHwgU3Ry ZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBN YXRjaCBEREwgb3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8g ICAgICAgICAgIHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1Yl9mb28gfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViMix0ZXN0cHViM30gfCBmICAg ICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFu eSAgICB8IHQgICAgICAgICAgICAgICB8IGxvY2FsICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdDIgfCAwLzAKICgxIHJvdykKIAogLS0gcmVuYW1lIGJhY2sgdG8ga2Vl cCB0aGUgcmVzdCBzaW1wbGUKQEAgLTI0NywxOSArMjQ3LDE5IEBAIENSRUFURSBTVUJTQ1JJUFRJ T04gcmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlz dCcgUFVCCiBXQVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNv bm5lY3RlZAogSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxs eSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGVuYWJsZSB0aGUgc3Vic2NyaXB0aW9uLCBh bmQgcmVmcmVzaCB0aGUgc3Vic2NyaXB0aW9uLgogXGRScysKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8 IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2lu IHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tp cCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwg cmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IHQgICAg ICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55 ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwg MC8wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vi c2NyaXB0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAg fCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2Ug Y29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCB0ICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IHQgICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoYmluYXJ5ID0gZmFsc2UpOwogQUxURVIgU1VC U0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwogXGRScysK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0g ICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQ dWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNh YmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29u bmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJl Z3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBT dHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8 IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZv ICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3Vz ZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAg ICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IHQgICAgICAgICAgICAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAog KDEgcm93KQogCiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI7CkBAIC0yNzEsMjcg KzI3MSwyNyBAQCBDUkVBVEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9O ICdkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QnIFBVQgogV0FSTklORzogIHN1YnNjcmlwdGlv biB3YXMgY3JlYXRlZCwgYnV0IGlzIG5vdCBjb25uZWN0ZWQKIEhJTlQ6ICBUbyBpbml0aWF0ZSBy ZXBsaWNhdGlvbiwgeW91IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90 LCBlbmFibGUgdGhlIHN1YnNjcmlwdGlvbiwgYW5kIHJlZnJlc2ggdGhlIHN1YnNjcmlwdGlvbi4K IFxkUnMrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0 aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFi bGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0 IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAg ICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBm ICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBkICAgICAgICAgICAg ICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRi bmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAgICAg fCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmlu YXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBP cmlnaW4gfCBNYXRjaCBEREwgb3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBD b25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlw dGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwg ZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAgICAgICAg ICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3Qg fCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQg KHN0cmVhbWluZyA9IHBhcmFsbGVsKTsKIFxkUnMrCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJl YW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBw YXJhbGxlbCAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlw dGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5h YmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1p dCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBNYXRjaCBEREwgb3duZXIgfCBTeW5jaHJv bm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rl c3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAg IHwgZiAgICAgIHwgcGFyYWxsZWwgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAg ICAgfCBhbnkgICAgfCB0ICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBU SU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNlKTsKIEFMVEVSIFNVQlND UklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsKIFxkUnMrCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwotICAg ICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVi bGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJs ZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5p bmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdy ZXNzX2RvZXNub3RleGlzdCB8IDAvMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3Ry ZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBN YXRjaCBEREwgb3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAg ICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAgICAgICAgICAgICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgx IHJvdykKIAogLS0gZmFpbCAtIHB1YmxpY2F0aW9uIGFscmVhZHkgZXhpc3RzCkBAIC0zMDYsMTAg KzMwNiwxMCBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIEFERCBQVUJMSUNB VElPTiB0ZXN0cHViMSwgdGVzdHB1YjIgV0lUSCAocmVmcgogQUxURVIgU1VCU0NSSVBUSU9OIHJl Z3Jlc3NfdGVzdHN1YiBBREQgUFVCTElDQVRJT04gdGVzdHB1YjEsIHRlc3RwdWIyIFdJVEggKHJl ZnJlc2ggPSBmYWxzZSk7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViMSIgaXMgYWxyZWFk eSBpbiBzdWJzY3JpcHRpb24gInJlZ3Jlc3NfdGVzdHN1YiIKIFxkUnMrCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0gICAgICBO YW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgICAg IFB1YmxpY2F0aW9uICAgICAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29t bWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAg ICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1 YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViLHRlc3RwdWIxLHRlc3RwdWIyfSB8 IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAg IHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4 aXN0IHwgMC8wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAgICAgIFB1YmxpY2F0aW9uICAgICAgICAgfCBC aW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8 IE9yaWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAg IENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIg fCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHViLHRlc3RwdWIx LHRlc3RwdWIyfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAg ICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIC0tIGZh aWwgLSBwdWJsaWNhdGlvbiB1c2VkIG1vcmUgdGhhbiBvbmNlCkBAIC0zMjQsMTAgKzMyNCwxMCBA QCBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHViMyIgaXMgbm90IGluIHN1YnNjcmlwdGlvbiAi cmVncmVzc190ZXN0c3ViIgogLS0gb2sgLSBkZWxldGUgcHVibGljYXRpb25zCiBBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIERST1AgUFVCTElDQVRJT04gdGVzdHB1YjEsIHRlc3Rw dWIyIFdJVEggKHJlZnJlc2ggPSBmYWxzZSk7CiBcZFJzKwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwg U3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4g fCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lw IExTTiAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCBy ZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAg IHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkg ICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAw LzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJz Y3JpcHRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBj b21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwgU3lu Y2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04g CistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVz c190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1 Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAg ICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwg ZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIERST1AgU1VCU0NS SVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjsKQEAgLTM2MywxMCArMzYzLDEwIEBAIENSRUFURSBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNu b3RleGlzdCcgUFVCCiBXQVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMg bm90IGNvbm5lY3RlZAogSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBt YW51YWxseSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGVuYWJsZSB0aGUgc3Vic2NyaXB0 aW9uLCBhbmQgcmVmcmVzaCB0aGUgc3Vic2NyaXB0aW9uLgogXGRScysKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0gICAgICBOYW1lICAgICAg IHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJp bmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwg T3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAg IHwgU2tpcCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0 c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8 IGYgICAgICB8IG9mZiAgICAgICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAg IHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4 aXN0IHwgMC8wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28t cGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IE1hdGNoIERETCBvd25l ciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNr aXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAg ICAgICAgICAgICAgICB8IGFueSAgICB8IHQgICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAg ICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiAtLWZh aWwgLSBhbHRlciBvZiB0d29fcGhhc2Ugb3B0aW9uIG5vdCBzdXBwb3J0ZWQuCkBAIC0zNzUsMTAg KzM3NSwxMCBAQCBFUlJPUjogIHVucmVjb2duaXplZCBzdWJzY3JpcHRpb24gcGFyYW1ldGVyOiAi dHdvX3BoYXNlIgogLS0gYnV0IGNhbiBhbHRlciBzdHJlYW1pbmcgd2hlbiB0d29fcGhhc2UgZW5h YmxlZAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9 IHRydWUpOwogXGRScysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBz dWJzY3JpcHRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFz ZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0 IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCi0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25f dXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9uICAgICAgICB8IHAgICAg ICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFt ZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRp b24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBl cnJvciB8IE9yaWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAg ICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nf c3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvbiAg ICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IHQg ICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNu b3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0 c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CkBAIC0zODgsMTAgKzM4OCwxMCBAQCBDUkVBVEUg U1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QnIFBVQgogV0FSTklORzogIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCwgYnV0 IGlzIG5vdCBjb25uZWN0ZWQKIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91IG11 c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlbmFibGUgdGhlIHN1YnNj cmlwdGlvbiwgYW5kIHJlZnJlc2ggdGhlIHN1YnNjcmlwdGlvbi4KIFxkUnMrCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwotICAgICAgTmFtZSAg ICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24g fCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJv ciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAg ICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf dGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9 ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAg ICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNu b3RleGlzdCB8IDAvMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwg VHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBNYXRjaCBEREwg b3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAg fCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAg ICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb24gICAgICAgIHwgcCAgICAgICAgICAgICAgICB8 IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAgICAgICAgICAgICAgfCBvZmYgICAgICAg ICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAog QUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUp OwpAQCAtNDA0LDE4ICs0MDQsMTggQEAgQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUIKIFdBUk5JTkc6 ICBzdWJzY3JpcHRpb24gd2FzIGNyZWF0ZWQsIGJ1dCBpcyBub3QgY29ubmVjdGVkCiBISU5UOiAg VG8gaW5pdGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVw bGljYXRpb24gc2xvdCwgZW5hYmxlIHRoZSBzdWJzY3JpcHRpb24sIGFuZCByZWZyZXNoIHRoZSBz dWJzY3JpcHRpb24uCiBcZFJzKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0 IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdv LXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBj b21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlw dGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwg ZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAg ICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAg ICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJs aWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxl IG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwgU3luY2hyb25vdXMgY29tbWl0 IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc190ZXN0c3ViIHwgcmVn cmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8 IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAg IHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNz X3Rlc3RzdWIgU0VUIChkaXNhYmxlX29uX2Vycm9yID0gdHJ1ZSk7CiBcZFJzKwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUg ICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9u IHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJy b3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAg ICAgICAgfCBTa2lwIExTTiAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVi fSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAg ICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8 IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERM IG93bmVyIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAg IHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAg fCB0ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAgICAg ICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAK IEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05F KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRp b24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCmlu ZGV4IDRiYzRmZjIuLjkwMmQyMDMgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90 LzAzMl9kZGxfcmVwbGljYXRpb24ucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMy X2RkbF9yZXBsaWNhdGlvbi5wbApAQCAtNDU3LDYgKzQ1NywyMyBAQCBpcygkcmVzdWx0LCBxcSg0 MiksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGljYXRlZCcpOwogJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CiAkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUWVBFIGludDQyIGNhc2NhZGUiKTsKIAorIyBUZXN0 IG93bmVyIG9mIHJlcGxpY2F0ZWQgdGFibGUgb24gc3Vic2NyaWJlciBtYXRjaGVzIHRoZSBvd25l ciBvbiBwdWJsaXNoZXIgd2hlbgorIyB0aGUgbWF0Y2hfZGRsX293bmVyIHN1YnNjcmlwdGlvbiBv cHRpb24gaXMgZW5hYmxlZAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBST0xFIGRkbF9yZXBsaWNhdGlvbl91c2VyIExPR0lOIFNVUEVSVVNFUjsiKTsKKwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUk9MRSBkZGxf cmVwbGljYXRpb25fdXNlciBMT0dJTiBTVVBFUlVTRVI7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFNVQlNDUklQVElPTiBteXN1YiBTRVQgKG1hdGNo X2RkbF9vd25lciA9IHRydWUpOyIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiAnZGRsX3JlcGxpY2F0aW9uX3VzZXIn OyBDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2YXJjaGFyKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHRhYmxlb3duZXIgZnJvbSBwZ19jYXRh bG9nLnBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFx KGRkbF9yZXBsaWNhdGlvbl91c2VyKSwgJ093bmVyIG9mIHRtcCBpcyBkZGxfcmVwbGljYXRpb25f dXNlcicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wIik7CisjIHJlc2V0IG1hdGNoX2RkbF9vd25lcgorJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBTVUJTQ1JJUFRJT04gbXlzdWIgU0VUIChtYXRjaF9k ZGxfb3duZXIgPSBmYWxzZSk7Iik7CisKKwogcGFzcyAiRERMIHJlcGxpY2F0aW9uIHRlc3RzIHBh c3NlZDoiOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwotLSAKMS44LjMuMQoK --000000000000387aaa05f6357d57--