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 1paZzv-0000WE-Pu for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Mar 2023 10:29:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1paZzu-00032M-7T for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Mar 2023 10:29:14 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1paZzt-000328-5Q for pgsql-hackers@lists.postgresql.org; Fri, 10 Mar 2023 10:29:13 +0000 Received: from mail-oo1-xc2c.google.com ([2607:f8b0:4864:20::c2c]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1paZzU-0006cS-QY for pgsql-hackers@lists.postgresql.org; Fri, 10 Mar 2023 10:29:12 +0000 Received: by mail-oo1-xc2c.google.com with SMTP id e12-20020a4ae0cc000000b00525034ca5e9so725381oot.0 for ; Fri, 10 Mar 2023 02:28:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678444126; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ezNEKZkLi5lhXola+palTnEVkoTRL3UHM+l7W8OmR5g=; b=nBOIUUxZruuSYzLzp1XcauH3o5LiGKs6CZYKOPFphwBmYBObaz1jioQ7I25FfL6U1c 1Cz2yJHgQxUaLRn/Ld9GajTP2hdNVBbnw6cLMcVPeuJ6OpxuREEAZuAePoJ4u7H9t37D mhS9tE5Vume0TPKMWczxvP5iSHGZQJ8pmNyYxwOfIOvJ1CFLbDSpl4/v0ltFCs+UyvqB KKOxvh4e4Oxx4PG/TuzW+UrJLGYoLVOqirFIcLzOfEkJ51MBShAbe9MweT/w1TGdqjCj l7uBd25m7wEyQaSOGh3noBpfExQ8STOjCHzneD3AmneHA+g9fWc2h92NfAquImbQAADj 8CDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678444126; 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=ezNEKZkLi5lhXola+palTnEVkoTRL3UHM+l7W8OmR5g=; b=vaGLRJ1AQCSMxw+KdFe+URla554ZpWXJNFqAUx3kXWOW+AUrAhodCBhMYa0eoJuzbl c7UgjmWfr1CqEwaR3ujHOYK3rgJJOGE5edZ1mKWiIv0m+GYo4w+3D77nO8WU9uw/z0x6 94zx09WVN52fS6/lBzpLLxa/prbZehJaaCbghJ4v4KO4y2ynovZxBhQz6hWC7EVUmkPj N42sPtLo0Dr/YUM0SMH0nkxxrfm+9Br8vb0R9W8XgKikiT6f9ijx58ELmC3Ah96vUGvA sBhlqLdTgkFnzURTA8g50GtYNXxztLF0wkH7mVoiA/q5/DHo2/TS0+oB/QrKAmxyTnul mj8g== X-Gm-Message-State: AO0yUKW63p82mq3/OMGTiBN5dzkiTEeHrra5svpw8HovgepdZy7fnvML TFGcKga9C7Jq1j6wOBTMfTmY5fS8dRf8uxB3o9w= X-Google-Smtp-Source: AK7set+pBzdq9qTYlITeqtrNK3/5KyLd7rITryV4JSc3xfqCLLeV38xT3AN/eeYTGt92UiJxWVZUh7kdQpfJ2vzZ+qE= X-Received: by 2002:a4a:956e:0:b0:525:6065:95c9 with SMTP id n43-20020a4a956e000000b00525606595c9mr8630083ooi.0.1678444126003; Fri, 10 Mar 2023 02:28:46 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: vignesh C Date: Fri, 10 Mar 2023 15:58:30 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Ajin Cherian Cc: Peter Smith , 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="000000000000e87dcb05f68939b7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e87dcb05f68939b7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 6 Mar 2023 at 18:43, vignesh C wrote: > > On Mon, 6 Mar 2023 at 12:04, Ajin Cherian wrote: > > > > 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 i= nto the output > > > > > + * buffer. force_qualify indicates whether to schema-qualify typ= e names > > > > > + * 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_quali= fied}; > > > > > + > > > > > + 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 stat= ic > > > > > 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, a= nd > > > > > 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 wr= ote: > > > > > > > > > > Hi Vignesh, thanks for addressing my v63-0002 review comments. > > > > > > > > > > I confirmed most of the changes. Below is a quick follow-up for t= he > > > > > remaining ones. > > > > > > > > > > On Mon, Feb 6, 2023 at 10:32 PM vignesh C w= rote: > > > > > > > > > > > > On Mon, 6 Feb 2023 at 06:47, Peter Smith wrote: > > > > > > > > > > > > ... > > > > > > > > > > > > > > 8. > > > > > > > + value =3D findJsonbValueFromContainer(container, JB_FOBJECT= , &key); > > > > > > > > > > > > > > Should the code be checking or asserting value is not NULL? > > > > > > > > > > > > > > (IIRC I asked this a long time ago - sorry if it was already = answered) > > > > > > > > > > > > > > > > > > > Yes, this was already answered by Zheng, quoting as "The null c= hecking > > > > > > for value is done in the upcoming call of expand_one_jsonb_elem= ent()." > > > > > > in [1] > > > > > > > > > > Thanks for the info. I saw that Zheng-san only wrote it is handle= d 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 = other > > > > > path (expand_jsonb_array) with a NULL jsonarr then it going to cr= ash, > > > > > 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 prope= r > > > ERROR. > > > > > Fixed this. Added an error check in expand_jsonb_array() as well. > > > > Changes are in patch 1 and patch 2 > > Few comments: > 1) The following statement crashes: > CREATE TABLE itest7b (a int); > CREATE TABLE itest7c (a int GENERATED ALWAYS AS IDENTITY) INHERITS (itest= 7b); > #0 0x0000559018aff927 in RangeVarGetRelidExtended (relation=3D0x0, > lockmode=3D0, flags=3D0, callback=3D0x0, callback_arg=3D0x0) at > namespace.c:255 > #1 0x0000559018be09dc in deparse_ColumnDef (relation=3D0x7f3e917abba8, > dpcontext=3D0x55901a792668, composite=3Dfalse, coldef=3D0x55901a77d758, > is_alter=3Dfalse, exprs=3D0x0) at ddl_deparse.c:1657 > #2 0x0000559018be2271 in deparse_TableElements > (relation=3D0x7f3e917abba8, tableElements=3D0x55901a77d708, > dpcontext=3D0x55901a792668, typed=3Dfalse, composite=3Dfalse) at > ddl_deparse.c:2460 > #3 0x0000559018be2b89 in deparse_CreateStmt (objectId=3D16420, > parsetree=3D0x55901a77d5f8) at ddl_deparse.c:2722 > #4 0x0000559018bf72c3 in deparse_simple_command (cmd=3D0x55901a77d590, > include_owner=3D0x7ffe4e611234) at ddl_deparse.c:10019 > #5 0x0000559018bf7563 in deparse_utility_command (cmd=3D0x55901a77d590, > include_owner=3Dtrue, verbose_mode=3Dfalse) at ddl_deparse.c:10122 > #6 0x0000559018eb650d in publication_deparse_ddl_command_end > (fcinfo=3D0x7ffe4e6113f0) at ddltrigger.c:203 Fixed > 2) invalid type storage error: > CREATE TYPE myvarchar; > > CREATE FUNCTION myvarcharin(cstring, oid, integer) RETURNS myvarchar > LANGUAGE internal IMMUTABLE PARALLEL SAFE STRICT AS 'varcharin'; > > CREATE FUNCTION myvarcharout(myvarchar) RETURNS cstring > LANGUAGE internal IMMUTABLE PARALLEL SAFE STRICT AS 'varcharout'; > > CREATE FUNCTION myvarcharsend(myvarchar) RETURNS bytea > LANGUAGE internal STABLE PARALLEL SAFE STRICT AS 'varcharsend'; > > CREATE FUNCTION myvarcharrecv(internal, oid, integer) RETURNS myvarchar > LANGUAGE internal STABLE PARALLEL SAFE STRICT AS 'varcharrecv'; > > CREATE TYPE myvarchar ( > input =3D myvarcharin, > output =3D myvarcharout, > alignment =3D integer, > storage =3D main > ); > > -- want to check updating of a domain over the target type, too > CREATE DOMAIN myvarchardom AS myvarchar; > > ALTER TYPE myvarchar SET (storage =3D extended); Fixed > 3) invalid type option send > ALTER TYPE myvarchar SET ( > send =3D myvarcharsend, > receive =3D myvarcharrecv, > typmod_in =3D varchartypmodin, > typmod_out =3D varchartypmodout, > -- these are bogus, but it's safe as long as we don't use the type: > analyze =3D ts_typanalyze, > subscript =3D raw_array_subscript_handler > ); Fixed > 4) There are some unsupported alter table subtype: > CREATE FOREIGN DATA WRAPPER dummy; > CREATE SERVER s0 FOREIGN DATA WRAPPER dummy; > CREATE FOREIGN TABLE ft1 ( > c1 integer OPTIONS ("param 1" 'val1') NOT NULL, > c2 text OPTIONS (param2 'val2', param3 'val3') CHECK (c2 <> ''), > c3 date, > CHECK (c3 BETWEEN '1994-01-01'::date AND '1994-01-31'::date) > ) SERVER s0 OPTIONS (delimiter ',', quote '"', "be quoted" 'value'); Fixed > 5) similarly in case of alter foreign table: > ALTER FOREIGN TABLE ft1 ADD COLUMN c10 integer OPTIONS (p1 'v1'); Fixed > 6) Few whitespace errors: > Applying: Infrastructure to support DDL deparsing. > .git/rebase-apply/patch:486: indent with spaces. > bool force_qualify) > .git/rebase-apply/patch:488: indent with spaces. > int i; > .git/rebase-apply/patch:489: indent with spaces. > char* (*func[2])(Oid) =3D {format_type_be, format_type_be_quali= fied}; > .git/rebase-apply/patch:491: indent with spaces. > appendStringInfoChar(buf, '('); > .git/rebase-apply/patch:492: indent with spaces. > for (i =3D 0; i < procform->pronargs; i++) > warning: squelched 10 whitespace errors > warning: 15 lines add whitespace errors. These were already fixed > 7) Alter foreign table rename not handled: > ALTER FOREIGN TABLE foreign_schema.ft1 RENAME TO foreign_table_1; Fixed Attached v77 version patch has the fixes for the same. Patches 0002 and 0003 were modified to fix the above issues. Regards, Vignesh --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Disposition: attachment; filename="v77-0001-Infrastructure-to-support-DDL-deparsing.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69co0 RnJvbSBhNDBmNmIzY2FhOWUwNjY5MjE2NTIxNjFiMDZmM2FjZjk5MzdjMDkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMjoyMjowNCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDEvOF0gSW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoKSW5mcmFz dHJ1Y3R1cmUgdG8gc3VwcG9ydCBEREwgZGVwYXJzaW5nLgoxKSBTb21lIG9mIHRoZSBldmVudCB0 cmlnZ2VyIHN0cnVjdHVyZXMgd2VyZSBtb3ZlZCBmcm9tIGV2ZW50X3RyaWdnZXIuYwogICB0byBl dmVudF90cmlnZ2VyLmggYXMgdGhlc2Ugd2lsbCBiZSByZXF1aXJlZCBmb3IgcHVibGljYXRpb24g ZXZlbnQKICAgdHJpZ2dlciBjcmVhdGlvbi4KMikgU29tZSBvZiB0aGUgcHJvdG90eXBlcyBhbmQg c3RydWN0dXJlcyB3ZXJlIG1vdmVkIGZyb20gcGdfcHVibGljYXRpb24uaAogICB0byBwdWJsaWNh dGlvbmNtZHMuaC4gVGhpcyB3YXMgYmVjYXVzZSBvbmUgb2YgdGhlIGxhdGVyIHBhdGNoIHJlcXVp cmVkIHRoZSBpbmNsdXNpb24gb2YKICAgcGdfcHVibGljYXRpb24uaCBhbmQgdGhlc2UgcHJvdG90 eXBlIGhhZCByZWZlcmVuY2VzIHRvIHNlcnZlciBoZWFkZXIKICAgZmlsZXMuCjMpIENoYW5nZSB0 aGUgb2JqZWN0IGlkZW50aXR5IHRvIG1hdGNoIHdpdGggdGhlIHN5bnRheCBpbiBvYmplY3RhZGRy ZXNzLmMKICAgVGhpcyBpcyBzbyB0aGF0IHRoZSBkZXBhcnNlIGxvZ2ljIGNhbiB1c2UgdGhpcyBp ZGVudGl0eSBkaXJlY3RseSBpbiB0aGUgZGVwYXJzZSBsb2dpYy4KLS0tCiBzcmMvYmFja2VuZC9j YXRhbG9nL2FjbGNoay5jICAgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jb2xsYXRpb25jbWRzLmMgICAgICAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMgICAgICAgIHwgIDczICsrLS0tCiBzcmMvYmFja2VuZC9jb21tYW5k cy9zZWNsYWJlbC5jICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMgICAgICAgICAgICAgfCAgNDMgKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dC9wZ291dHB1dC5jIHwgICAxICsKIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAg ICAgICAgICAgICAgICAgfCAxMTAgKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1h dF90eXBlLmMgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2Mu YyAgICAgICAgICAgICB8ICA1MiArKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxz LmMgICAgICAgICAgIHwgMzI0ICsrKysrKysrKysrKystLS0tLS0tCiBzcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAgIHwgIDE3ICstCiBzcmMvaW5jbHVkZS9jb21tYW5k cy9jb2xsYXRpb25jbWRzLmggICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmggICAgICAgIHwgIDQxICsrKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmggICAgICB8ICAxNCArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5j ZS5oICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5 LmggICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oICAgICAgICAg ICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggICAgICAgICAgICAgICAg ICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaCAgICAgICAg IHwgICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgICAgICAgICAgfCAg IDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggICAgICAgICAgICAgICAgICAgICB8ICAgMiAr CiBzcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCAgICAgICAgICAgICAgIHwgIDE5ICsrCiBz cmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgIHwgICAxICsKIDIzIGZp bGVzIGNoYW5nZWQsIDU5NiBpbnNlcnRpb25zKCspLCAxNzAgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsuYyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cv YWNsY2hrLmMKaW5kZXggYzQyMzIzNDRhYS4uMzZhNjY3NzExMyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9hY2xjaGsuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5j CkBAIC0xMjksNyArMTI5LDYgQEAgc3RhdGljIHZvaWQgZXhwYW5kX2FsbF9jb2xfcHJpdmlsZWdl cyhPaWQgdGFibGVfb2lkLCBGb3JtX3BnX2NsYXNzIGNsYXNzRm9ybSwKIAkJCQkJCQkJCSAgQWNs TW9kZSAqY29sX3ByaXZpbGVnZXMsCiAJCQkJCQkJCQkgIGludCBudW1fY29sX3ByaXZpbGVnZXMp Owogc3RhdGljIEFjbE1vZGUgc3RyaW5nX3RvX3ByaXZpbGVnZShjb25zdCBjaGFyICpwcml2bmFt ZSk7Ci1zdGF0aWMgY29uc3QgY2hhciAqcHJpdmlsZWdlX3RvX3N0cmluZyhBY2xNb2RlIHByaXZp bGVnZSk7CiBzdGF0aWMgQWNsTW9kZSByZXN0cmljdF9hbmRfY2hlY2tfZ3JhbnQoYm9vbCBpc19n cmFudCwgQWNsTW9kZSBhdmFpbF9nb3B0aW9ucywKIAkJCQkJCQkJCQlib29sIGFsbF9wcml2cywg QWNsTW9kZSBwcml2aWxlZ2VzLAogCQkJCQkJCQkJCU9pZCBvYmplY3RJZCwgT2lkIGdyYW50b3JJ ZCwKQEAgLTM4NSwxMSArMzg0LDEwIEBAIEV4ZWN1dGVHcmFudFN0bXQoR3JhbnRTdG10ICpzdG10 KQogCUxpc3RDZWxsICAgKmNlbGw7CiAJY29uc3QgY2hhciAqZXJyb3Jtc2c7CiAJQWNsTW9kZQkJ YWxsX3ByaXZpbGVnZXM7CisJT2lkCQkJZ3JhbnRvciA9IEludmFsaWRPaWQ7CiAKIAlpZiAoc3Rt dC0+Z3JhbnRvcikKIAl7Ci0JCU9pZAkJCWdyYW50b3I7Ci0KIAkJZ3JhbnRvciA9IGdldF9yb2xl c3BlY19vaWQoc3RtdC0+Z3JhbnRvciwgZmFsc2UpOwogCiAJCS8qCkBAIC00MDgsNiArNDA2LDkg QEAgRXhlY3V0ZUdyYW50U3RtdChHcmFudFN0bXQgKnN0bXQpCiAJaXN0bXQuaXNfZ3JhbnQgPSBz dG10LT5pc19ncmFudDsKIAlpc3RtdC5vYmp0eXBlID0gc3RtdC0+b2JqdHlwZTsKIAorCS8qIENv cHkgdGhlIGdyYW50b3IgaWQgbmVlZGVkIGZvciBEREwgZGVwYXJzaW5nIG9mIEdyYW50ICovCisJ aXN0bXQuZ3JhbnRvcl91aWQgPSBncmFudG9yOworCiAJLyogQ29sbGVjdCB0aGUgT0lEcyBvZiB0 aGUgdGFyZ2V0IG9iamVjdHMgKi8KIAlzd2l0Y2ggKHN0bXQtPnRhcmd0eXBlKQogCXsKQEAgLTI2 MjgsNyArMjYyOSw3IEBAIHN0cmluZ190b19wcml2aWxlZ2UoY29uc3QgY2hhciAqcHJpdm5hbWUp CiAJcmV0dXJuIDA7CQkJCQkvKiBhcHBlYXNlIGNvbXBpbGVyICovCiB9CiAKLXN0YXRpYyBjb25z dCBjaGFyICoKK2NvbnN0IGNoYXIgKgogcHJpdmlsZWdlX3RvX3N0cmluZyhBY2xNb2RlIHByaXZp bGVnZSkKIHsKIAlzd2l0Y2ggKHByaXZpbGVnZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2NvbGxhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNt ZHMuYwppbmRleCA4OTQ5Njg0YWZlLi5lNWIyZDk5MGViIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29s bGF0aW9uY21kcy5jCkBAIC01MCw5ICs1MCwyMSBAQCB0eXBlZGVmIHN0cnVjdAogCiAvKgogICog Q1JFQVRFIENPTExBVElPTgorICoKKyAqIHBzdGF0ZTogcGFyc2Ugc3RhdGUuCisgKiBuYW1lczog cXVhbGlmaWVkIGNvbGxhdGlvbiBuYW1lcyAoYSBsaXN0IG9mIFN0cmluZykuCisgKiBwYXJhbWV0 ZXJzOiBjb2xsYXRpb24gYXR0cmlidXRlcyAoYSBsaXN0IG9mIERlZkVsZW0pLgorICogaWZfbm90 X2V4aXN0czogaWYgdHJ1ZSwgZG9uJ3QgZmFpbCBvbiBkdXBsaWNhdGUgbmFtZSwganVzdCBwcmlu dCBhIG5vdGljZQorICogYW5kIHJldHVybiBJbnZhbGlkT2lkLgorICogZnJvbV9leGlzdGluZ19j b2xsaWQ6IG91dHB1dCBhcmd1bWVudCB3aGljaCwgaWYgbm90IE5VTEwsIGlzIHNldCB0byB0aGUK KyAqIGFkZHJlc3Mgb2YgZXhpc3RpbmcgY29sbGF0aW9uIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRl IGluIGNhc2Ugb2YKKyAqIENSRUFURSBDT0xMQVRJT04gYW55X25hbWUgRlJPTSBleGlzdGluZ19j b2xsYXRpb24uCisgKgorICogSWYgc3VjY2Vzc2Z1bCwgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0 aGUgbmV3IGNvbGxhdGlvbi4KICAqLwogT2JqZWN0QWRkcmVzcwotRGVmaW5lQ29sbGF0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZf bm90X2V4aXN0cykKK0RlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKm5h bWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAorCQkJCWJvb2wgaWZfbm90X2V4aXN0cywgT2JqZWN0QWRk cmVzcyAqZnJvbV9leGlzdGluZ19jb2xsaWQpCiB7CiAJY2hhcgkgICAqY29sbE5hbWU7CiAJT2lk CQkJY29sbE5hbWVzcGFjZTsKQEAgLTE0Myw2ICsxNTUsMTMgQEAgRGVmaW5lQ29sbGF0aW9uKFBh cnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZf bm90X2UKIAkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKIAkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gJXUiLCBjb2xsaWQpOwogCisJCS8qCisJCSAq IE1ha2UgZnJvbSBleGlzdGluZyBjb2xsYXRpb25pZCBhdmFpbGFibGUgdG8gY2FsbGVycyBmb3Ig c3RhdGVtZW50cyBzdWNoIGFzCisJCSAqIENSRUFURSBDT0xMQVRJT04gYW55X25hbWUgRlJPTSBh bnlfbmFtZQorCQkgKi8KKwkJaWYgKGZyb21fZXhpc3RpbmdfY29sbGlkICYmIE9pZElzVmFsaWQo Y29sbGlkKSkKKwkJCU9iamVjdEFkZHJlc3NTZXQoKmZyb21fZXhpc3RpbmdfY29sbGlkLCBDb2xs YXRpb25SZWxhdGlvbklkLCBjb2xsaWQpOworCiAJCWNvbGxwcm92aWRlciA9ICgoRm9ybV9wZ19j b2xsYXRpb24pIEdFVFNUUlVDVCh0cCkpLT5jb2xscHJvdmlkZXI7CiAJCWNvbGxpc2RldGVybWlu aXN0aWMgPSAoKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApKS0+Y29sbGlzZGV0ZXJt aW5pc3RpYzsKIAkJY29sbGVuY29kaW5nID0gKChGb3JtX3BnX2NvbGxhdGlvbikgR0VUU1RSVUNU KHRwKSktPmNvbGxlbmNvZGluZzsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRl eCBkNGIwMGQxYTgyLi5iMzgwZTM5MzliIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5jCkBAIC00OCw0NSArNDgsNyBAQAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUg InV0aWxzL3N5c2NhY2hlLmgiCiAKLXR5cGVkZWYgc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3Rh dGUKLXsKLQkvKiBtZW1vcnkgY29udGV4dCBmb3IgdGhpcyBzdGF0ZSdzIG9iamVjdHMgKi8KLQlN ZW1vcnlDb250ZXh0IGN4dDsKLQotCS8qIHNxbF9kcm9wICovCi0Jc2xpc3RfaGVhZAlTUUxEcm9w TGlzdDsKLQlib29sCQlpbl9zcWxfZHJvcDsKLQotCS8qIHRhYmxlX3Jld3JpdGUgKi8KLQlPaWQJ CQl0YWJsZV9yZXdyaXRlX29pZDsJLyogSW52YWxpZE9pZCwgb3Igc2V0IGZvciB0YWJsZV9yZXdy aXRlCi0JCQkJCQkJCQkgKiBldmVudCAqLwotCWludAkJCXRhYmxlX3Jld3JpdGVfcmVhc29uOwkv KiBBVF9SRVdSSVRFIHJlYXNvbiAqLwotCi0JLyogU3VwcG9ydCBmb3IgY29tbWFuZCBjb2xsZWN0 aW9uICovCi0JYm9vbAkJY29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQ7Ci0JQ29sbGVjdGVkQ29t bWFuZCAqY3VycmVudENvbW1hbmQ7Ci0JTGlzdAkgICAqY29tbWFuZExpc3Q7CS8qIGxpc3Qgb2Yg Q29sbGVjdGVkQ29tbWFuZDsgc2VlCi0JCQkJCQkJCSAqIGRlcGFyc2VfdXRpbGl0eS5oICovCi0J c3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKnByZXZpb3VzOwotfSBFdmVudFRyaWdnZXJR dWVyeVN0YXRlOwotCi1zdGF0aWMgRXZlbnRUcmlnZ2VyUXVlcnlTdGF0ZSAqY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlID0gTlVMTDsKLQotLyogU3VwcG9ydCBmb3IgZHJvcHBlZCBvYmplY3RzICov Ci10eXBlZGVmIHN0cnVjdCBTUUxEcm9wT2JqZWN0Ci17Ci0JT2JqZWN0QWRkcmVzcyBhZGRyZXNz OwotCWNvbnN0IGNoYXIgKnNjaGVtYW5hbWU7Ci0JY29uc3QgY2hhciAqb2JqbmFtZTsKLQljb25z dCBjaGFyICpvYmppZGVudGl0eTsKLQljb25zdCBjaGFyICpvYmplY3R0eXBlOwotCUxpc3QJICAg KmFkZHJuYW1lczsKLQlMaXN0CSAgICphZGRyYXJnczsKLQlib29sCQlvcmlnaW5hbDsKLQlib29s CQlub3JtYWw7Ci0JYm9vbAkJaXN0ZW1wOwotCXNsaXN0X25vZGUJbmV4dDsKLX0gU1FMRHJvcE9i amVjdDsKK0V2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSA9 IE5VTEw7CiAKIHN0YXRpYyB2b2lkIEFsdGVyRXZlbnRUcmlnZ2VyT3duZXJfaW50ZXJuYWwoUmVs YXRpb24gcmVsLAogCQkJCQkJCQkJCQlIZWFwVHVwbGUgdHVwLApAQCAtMTgxMiw2ICsxNzc0LDM2 IEBAIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlckRlZlByaXZzKEFsdGVyRGVmYXVsdFByaXZpbGVn ZXNTdG10ICpzdG10KQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogfQogCisvKgor ICogRXZlbnRUcmlnZ2VyQ29sbGVjdFNlY0xhYmVsCisgKgkJU2F2ZSBkYXRhIGFib3V0IGFuIFNF Q1VSSVRZIExBQkVMIGNvbW1hbmQgYmVpbmcgZXhlY3V0ZWQKKyAqLwordm9pZAorRXZlbnRUcmln Z2VyQ29sbGVjdFNlY0xhYmVsKE9iamVjdEFkZHJlc3MgYWRkcmVzcywgY2hhciAqcHJvdmlkZXIs CisJCQkJCQkJU2VjTGFiZWxTdG10ICpzdG10KQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0Owor CUNvbGxlY3RlZENvbW1hbmQgKmNvbW1hbmQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dl ciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1h bmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwlvbGRjeHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJY29tbWFuZCA9 IHBhbGxvYzAoc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKwljb21tYW5kLT50eXBlID0gU0NU X1NlY3VyaXR5TGFiZWw7CisJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5z aW9uOworCWNvbW1hbmQtPmQuc2VjbGFiZWwuYWRkcmVzcyA9IGFkZHJlc3M7CisJY29tbWFuZC0+ ZC5zZWNsYWJlbC5wcm92aWRlciA9IHByb3ZpZGVyOworCWNvbW1hbmQtPnBhcnNldHJlZSA9IChO b2RlICopIGNvcHlPYmplY3Qoc3RtdCk7CisKKwljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNv bW1hbmRMaXN0ID0KKwkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRM aXN0LCBjb21tYW5kKTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKwogLyoK ICAqIEluIGEgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIsIHRoaXMgZnVuY3Rpb24gcmVw b3J0cyB0aGUgRERMIGNvbW1hbmRzCiAgKiBiZWluZyBydW4uCkBAIC0xODYzLDYgKzE4NTUsNyBA QCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQogCQkJY2Fz ZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6CiAJCQljYXNl IFNDVF9BbHRlclRTQ29uZmlnOgorCQkJY2FzZSBTQ1RfU2VjdXJpdHlMYWJlbDoKIAkJCQl7CiAJ CQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAtMTg4MCw2ICsx ODczLDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykK IAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7CiAJCQkJCWVsc2UgaWYgKGNt ZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuYXRzY2Zn LmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfU2VjdXJpdHlMYWJlbCkK KwkJCQkJCWFkZHIgPSBjbWQtPmQuc2VjbGFiZWwuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkg KiBJZiBhbiBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5k CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvc2VjbGFiZWwuYwppbmRleCA3ZmYxNmUzMjc2Li43ZWU1NGNkZThlIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3NlY2xhYmVsLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9n L2luZGV4aW5nLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZWNsYWJlbC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfc2hzZWNsYWJlbC5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy9zZWNsYWJlbC5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCkBAIC0yMTMsNiArMjE0LDExIEBAIEV4 ZWNTZWNMYWJlbFN0bXQoU2VjTGFiZWxTdG10ICpzdG10KQogCWlmIChyZWxhdGlvbiAhPSBOVUxM KQogCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKIAorCS8qIFBhc3MgdGhlIGlu Zm8gdG8gZXZlbnQgdHJpZ2dlcnMgYWJvdXQgdGhlIFNFQ1VSSVRZIExBQkVMLiAqLworCWlmIChF dmVudFRyaWdnZXJTdXBwb3J0c09iamVjdFR5cGUoc3RtdC0+b2JqdHlwZSkpCisJCUV2ZW50VHJp Z2dlckNvbGxlY3RTZWNMYWJlbChhZGRyZXNzLCBwc3RyZHVwKHByb3ZpZGVyLT5wcm92aWRlcl9u YW1lKSwKKwkJCQkJCQkJCXN0bXQpOworCiAJcmV0dXJuIGFkZHJlc3M7CiB9CiAKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9zZXF1ZW5jZS5jCmluZGV4IGJmZTI3OWNkZGYuLjI5NjlkM2RmMDEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv c2VxdWVuY2UuYwpAQCAtMTcwOCw2ICsxNzA4LDQ5IEBAIHByb2Nlc3Nfb3duZWRfYnkoUmVsYXRp b24gc2VxcmVsLCBMaXN0ICpvd25lZF9ieSwgYm9vbCBmb3JfaWRlbnRpdHkpCiAJCXJlbGF0aW9u X2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2spOwogfQogCisvKgorICogUmV0dXJuIHNlcXVlbmNlIHBh cmFtZXRlcnMsIGRldGFpbGVkCisgKi8KK1NlcXVlbmNlX3ZhbHVlcyAqCitnZXRfc2VxdWVuY2Vf dmFsdWVzKE9pZCBzZXF1ZW5jZUlkKQoreworCUJ1ZmZlciAgICAgIGJ1ZjsKKwlTZXFUYWJsZSAg ICBlbG07CisJUmVsYXRpb24gICAgc2VxcmVsOworCUhlYXBUdXBsZQlzZXF0dXBsZTsKKwlIZWFw VHVwbGVEYXRhIHNlcXR1cGxlZGF0YTsKKwlGb3JtX3BnX3NlcXVlbmNlIHNlcWZvcm07CisJRm9y bV9wZ19zZXF1ZW5jZV9kYXRhIHNlcTsKKwlTZXF1ZW5jZV92YWx1ZXMgKnNlcXZhbHVlczsKKwor CXNlcXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFNFUVJFTElELCBzZXF1ZW5jZUlkKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLCBzZXF1ZW5jZUlkKTsKKwlzZXFmb3JtID0gKEZvcm1f cGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoc2Vx dHVwbGUpOworCisJLyogT3BlbiBhbmQgbG9jayBzZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uo c2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisKKwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2Vx dWVuY2VJZCwgR2V0VXNlcklkKCksCisJCUFDTF9TRUxFQ1QgfCBBQ0xfVVNBR0UpICE9IEFDTENI RUNLX09LKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9JTlNVRkZJQ0lF TlRfUFJJVklMRUdFKSwKKwkJCQllcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5j ZSAlcyIsCisJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHNlcXJlbCkpKTsKKworCXNl cSA9IHJlYWRfc2VxX3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlZGF0YSk7CisKKwlzZXF2 YWx1ZXMgPSAoU2VxdWVuY2VfdmFsdWVzICopIHBhbGxvYyhzaXplb2YoU2VxdWVuY2VfdmFsdWVz KSk7CisJc2VxdmFsdWVzLT5sYXN0X3ZhbHVlID0gc2VxLT5sYXN0X3ZhbHVlOworCXNlcXZhbHVl cy0+c2VxZm9ybSA9IHNlcWZvcm07CisKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1Zik7CisJcmVs YXRpb25fY2xvc2Uoc2VxcmVsLCBOb0xvY2spOworCisJcmV0dXJuIHNlcXZhbHVlczsKK30KIAog LyoKICAqIFJldHVybiBzZXF1ZW5jZSBwYXJhbWV0ZXJzIGluIGEgbGlzdCBvZiB0aGUgZm9ybSBj cmVhdGVkIGJ5IHRoZSBwYXJzZXIuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQv cGdvdXRwdXQuYwppbmRleCAwMGEyZDczZGFiLi40ZTYxYWQzNjJjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNs dWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdf c3Vic2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAi Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvc3Vic2NyaXB0 aW9uY21kcy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZm1n ci5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMvYmFja2Vu ZC90Y29wL3V0aWxpdHkuYwppbmRleCBjN2Q5ZDk2YjQ1Li42ZmQzZDQ3MWZkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29wL3V0aWxp dHkuYwpAQCAtMTQ0Niw3ICsxNDQ2LDggQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNlU3RhdGUg KnBzdGF0ZSwKIAkJCQkJCQlhZGRyZXNzID0gRGVmaW5lQ29sbGF0aW9uKHBzdGF0ZSwKIAkJCQkJ CQkJCQkJCQkgIHN0bXQtPmRlZm5hbWVzLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVmaW5pdGlv biwKLQkJCQkJCQkJCQkJCQkgIHN0bXQtPmlmX25vdF9leGlzdHMpOworCQkJCQkJCQkJCQkJCSAg c3RtdC0+aWZfbm90X2V4aXN0cywKKwkJCQkJCQkJCQkJCQkgICZzZWNvbmRhcnlPYmplY3QpOwog CQkJCQkJCWJyZWFrOwogCQkJCQkJZGVmYXVsdDoKIAkJCQkJCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIGRlZmluZSBzdG10IHR5cGU6ICVkIiwKQEAgLTE4MjYsNiArMTgyNyw3IEBAIFByb2Nl c3NVdGlsaXR5U2xvdyhQYXJzZVN0YXRlICpwc3RhdGUsCiAKIAkJCWNhc2UgVF9TZWNMYWJlbFN0 bXQ6CiAJCQkJYWRkcmVzcyA9IEV4ZWNTZWNMYWJlbFN0bXQoKFNlY0xhYmVsU3RtdCAqKSBwYXJz ZXRyZWUpOworCQkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQlj YXNlIFRfQ3JlYXRlQW1TdG10OgpAQCAtMjE5Niw2ICsyMTk4LDExMiBAQCBVdGlsaXR5Q29udGFp bnNRdWVyeShOb2RlICpwYXJzZXRyZWUpCiAJfQogfQogCisvKgorICogUmV0dXJuIHRoZSBnaXZl biBvYmplY3QgdHlwZSBhcyBhIHN0cmluZy4KKyAqCisgKiBJZiBpc2dyYW50IGlzIHRydWUsIHRo ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUgZGVwYXJzaW5nIEdSQU5UCisgKiBzdGF0 ZW1lbnQgYW5kIHNvbWUgb2JqZWN0IG5hbWVzIGFyZSByZXBsYWNlZC4KKyAqLworY29uc3QgY2hh ciAqCitzdHJpbmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUsIGJvb2wgaXNncmFudCkK K3sKKwlzd2l0Y2ggKG9ianR5cGUpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQly ZXR1cm4gIkFHR1JFR0FURSI7CisJCWNhc2UgT0JKRUNUX0NBU1Q6CisJCQlyZXR1cm4gIkNBU1Qi OworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1cm4gIkNPTExBVElPTiI7CisJCWNh c2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJldHVybiBpc2dyYW50ID8gIlRBQkxFIiA6ICJDT0xVTU4i OworCQljYXNlIE9CSkVDVF9DT05WRVJTSU9OOgorCQkJcmV0dXJuICJDT05WRVJTSU9OIjsKKwkJ Y2FzZSBPQkpFQ1RfREFUQUJBU0U6CisJCQlyZXR1cm4gIkRBVEFCQVNFIjsKKwkJY2FzZSBPQkpF Q1RfRE9NQUlOOgorCQkJcmV0dXJuICJET01BSU4iOworCQljYXNlIE9CSkVDVF9FVkVOVF9UUklH R0VSOgorCQkJcmV0dXJuICJFVkVOVCBUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfRVhURU5TSU9O OgorCQkJcmV0dXJuICJFWFRFTlNJT04iOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQlyZXR1cm4g IkZPUkVJR04gREFUQSBXUkFQUEVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJ CQlyZXR1cm4gaXNncmFudCA/ICJGT1JFSUdOIFNFUlZFUiIgOiAiU0VSVkVSIjsKKwkJY2FzZSBP QkpFQ1RfRk9SRUlHTl9UQUJMRToKKwkJCXJldHVybiAiRk9SRUlHTiBUQUJMRSI7CisJCWNhc2Ug T0JKRUNUX0ZVTkNUSU9OOgorCQkJcmV0dXJuICJGVU5DVElPTiI7CisJCWNhc2UgT0JKRUNUX0lO REVYOgorCQkJcmV0dXJuICJJTkRFWCI7CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQkJcmV0 dXJuICJMQU5HVUFHRSI7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJcmV0dXJuICJM QVJHRSBPQkpFQ1QiOworCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmV0dXJuICJNQVRFUklB TElaRUQgVklFVyI7CisJCWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQlyZXR1cm4gIk9QRVJBVE9S IENMQVNTIjsKKwkJY2FzZSBPQkpFQ1RfT1BFUkFUT1I6CisJCQlyZXR1cm4gIk9QRVJBVE9SIjsK KwkJY2FzZSBPQkpFQ1RfT1BGQU1JTFk6CisJCQlyZXR1cm4gIk9QRVJBVE9SIEZBTUlMWSI7CisJ CWNhc2UgT0JKRUNUX1BPTElDWToKKwkJCXJldHVybiAiUE9MSUNZIjsKKwkJY2FzZSBPQkpFQ1Rf UFJPQ0VEVVJFOgorCQkJcmV0dXJuICJQUk9DRURVUkUiOworCQljYXNlIE9CSkVDVF9ST0xFOgor CQkJcmV0dXJuICJST0xFIjsKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJCXJldHVybiAiUk9V VElORSI7CisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQlyZXR1cm4gIlJVTEUiOworCQljYXNlIE9C SkVDVF9TQ0hFTUE6CisJCQlyZXR1cm4gIlNDSEVNQSI7CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNF OgorCQkJcmV0dXJuICJTRVFVRU5DRSI7CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ19FWFQ6CisJ CQlyZXR1cm4gIlNUQVRJU1RJQ1MiOworCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJCXJldHVybiAi VEFCTEUiOworCQljYXNlIE9CSkVDVF9UQUJMRVNQQUNFOgorCQkJcmV0dXJuICJUQUJMRVNQQUNF IjsKKwkJY2FzZSBPQkpFQ1RfVFJJR0dFUjoKKwkJCXJldHVybiAiVFJJR0dFUiI7CisJCWNhc2Ug T0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggQ09ORklHVVJB VElPTiI7CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJCXJldHVybiAiVEVYVCBTRUFS Q0ggRElDVElPTkFSWSI7CisJCWNhc2UgT0JKRUNUX1RTUEFSU0VSOgorCQkJcmV0dXJuICJURVhU IFNFQVJDSCBQQVJTRVIiOworCQljYXNlIE9CSkVDVF9UU1RFTVBMQVRFOgorCQkJcmV0dXJuICJU RVhUIFNFQVJDSCBURU1QTEFURSI7CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlyZXR1cm4gIlRZ UEUiOworCQljYXNlIE9CSkVDVF9VU0VSX01BUFBJTkc6CisJCQlyZXR1cm4gIlVTRVIgTUFQUElO RyI7CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCQlyZXR1cm4gIlZJRVciOworCQljYXNlIE9CSkVD VF9BQ0NFU1NfTUVUSE9EOgorCQljYXNlIE9CSkVDVF9BTU9QOgorCQljYXNlIE9CSkVDVF9BTVBS T0M6CisJCWNhc2UgT0JKRUNUX0FUVFJJQlVURToKKwkJY2FzZSBPQkpFQ1RfREVGQVVMVDoKKwkJ Y2FzZSBPQkpFQ1RfREVGQUNMOgorCQljYXNlIE9CSkVDVF9ET01DT05TVFJBSU5UOgorCQljYXNl IE9CSkVDVF9QQVJBTUVURVJfQUNMOgorCQljYXNlIE9CSkVDVF9QVUJMSUNBVElPTjoKKwkJY2Fz ZSBPQkpFQ1RfUFVCTElDQVRJT05fTkFNRVNQQUNFOgorCQljYXNlIE9CSkVDVF9QVUJMSUNBVElP Tl9SRUw6CisJCWNhc2UgT0JKRUNUX1NVQlNDUklQVElPTjoKKwkJY2FzZSBPQkpFQ1RfVEFCQ09O U1RSQUlOVDoKKwkJY2FzZSBPQkpFQ1RfVFJBTlNGT1JNOgorCQkJZWxvZyhFUlJPUiwgInVuc3Vw cG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorCisJcmV0dXJuICI/Pz8iOwkJ CQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCit9CiAKIC8qCiAgKiBBbHRlck9iamVjdFR5cGVD b21tYW5kVGFnCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCmluZGV4IDEyNDAyYTA2Mzcu LjdiNDc2YWRiMjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlw ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXRfdHlwZS5jCkBAIC0yNyw4ICsy Nyw2IEBACiAjaW5jbHVkZSAidXRpbHMvbnVtZXJpYy5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2Nh Y2hlLmgiCiAKLXN0YXRpYyBjaGFyICpwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBp bnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpOwotCiAKIC8qCiAgKiBTUUwgZnVuY3Rpb246IGZv cm1hdF90eXBlKHR5cGVfb2lkLCB0eXBlbW9kKQpAQCAtMzYzLDcgKzM2MSw3IEBAIGZvcm1hdF90 eXBlX3dpdGhfdHlwZW1vZChPaWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRk IHR5cG1vZCBkZWNvcmF0aW9uIHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNo YXIgKgorY2hhciAqCiBwcmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBt b2QsIE9pZCB0eXBtb2RvdXQpCiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9j LmMKaW5kZXggMjk2OTMwZWIzYi4uY2U1ZTNhNzMyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3JlZ3Byb2MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5j CkBAIC00OSw3ICs0OSw2IEBAIHN0YXRpYyBib29sIHBhcnNlTmFtZUFuZEFyZ1R5cGVzKGNvbnN0 IGNoYXIgKnN0cmluZywgYm9vbCBhbGxvd05vbmUsCiAJCQkJCQkJCSBMaXN0ICoqbmFtZXMsIGlu dCAqbmFyZ3MsIE9pZCAqYXJndHlwZXMsCiAJCQkJCQkJCSBOb2RlICplc2NvbnRleHQpOwogCi0K IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgogICoJIFVTRVIgSS9PIFJPVVRJTkVTCQkJCQkJCQkJCQkJ CQkgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzA3LDYgKzMwNiw1NyBAQCBmb3JtYXRf cHJvY2VkdXJlX3F1YWxpZmllZChPaWQgcHJvY2VkdXJlX29pZCkKIAlyZXR1cm4gZm9ybWF0X3By b2NlZHVyZV9leHRlbmRlZChwcm9jZWR1cmVfb2lkLCBGT1JNQVRfUFJPQ19GT1JDRV9RVUFMSUZZ KTsKIH0KIAorLyoKKyAqIEFwcGVuZCB0aGUgcGFyZW50aGVzaXplZCBhcmd1bWVudHMgb2YgdGhl IGdpdmVuIHBnX3Byb2Mgcm93IGludG8gdGhlIG91dHB1dAorICogYnVmZmVyLiBmb3JjZV9xdWFs aWZ5IGluZGljYXRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHR5cGUgbmFtZXMKKyAqIHJl Z2FyZGxlc3Mgb2YgdmlzaWJpbGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF9wcm9jZWR1 cmVfYXJnc19pbnRlcm5hbChGb3JtX3BnX3Byb2MgcHJvY2Zvcm0sIFN0cmluZ0luZm8gYnVmLAor CQkJCQkJCSAgIGJvb2wgZm9yY2VfcXVhbGlmeSkKK3sKKwlpbnQJCQlpOworCWNoYXIJICAgKigq ZnVuY1syXSkgKE9pZCkgPSB7Zm9ybWF0X3R5cGVfYmUsIGZvcm1hdF90eXBlX2JlX3F1YWxpZmll ZH07CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9yIChpID0gMDsgaSA8 IHByb2Nmb3JtLT5wcm9uYXJnczsgaSsrKQorCXsKKwkJT2lkCQkJdGhpc2FyZ3R5cGUgPSBwcm9j Zm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldOworCQljaGFyCSAgICphcmd0eXBlOworCisJCWlm IChpID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKworCQlhcmd0eXBl ID0gZnVuY1tmb3JjZV9xdWFsaWZ5XSAodGhpc2FyZ3R5cGUpOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgYXJndHlwZSk7CisJCXBmcmVlKGFyZ3R5cGUpOworCX0KKwlhcHBlbmRTdHJp bmdJbmZvQ2hhcihidWYsICcpJyk7Cit9CisKKy8qCisgKiBmb3JtYXRfcHJvY2VkdXJlX2FyZ3Mg ICAtIGNvbnZlcnRzIHByb2MgT0lEIHRvICIoYXJncykiCisgKi8KK2NoYXIgKgorZm9ybWF0X3By b2NlZHVyZV9hcmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpCit7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCUhlYXBUdXBsZQlwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBw cm9jZm9ybTsKKworCXByb2N0dXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRH ZXREYXR1bShwcm9jZWR1cmVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1Iiwg cHJvY2VkdXJlX29pZCk7CisJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJv Y3R1cCk7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3Nf aW50ZXJuYWwocHJvY2Zvcm0sICZidWYsIGZvcmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0Nh Y2hlKHByb2N0dXApOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQorCiAvKgogICogZm9ybWF0X3By b2NlZHVyZV9leHRlbmRlZCAtIGNvbnZlcnRzIHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFy Z3MpIgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCBiY2I0OTNiNTZjLi42NDAy YWNhNjhhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCkBAIC0zNSw2ICszNSw3IEBACiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVyYXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcGFy dGl0aW9uZWRfdGFibGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3Jld3JpdGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRpc3RpY19l eHQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKQEAgLTM0MSw2ICszNDIsOCBAQCBzdGF0aWMgY2hhciAqcGdfZ2V0X3RyaWdn ZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KTsKIHN0YXRpYyBpbnQJZGVjb21w aWxlX2NvbHVtbl9pbmRleF9hcnJheShEYXR1bSBjb2x1bW5faW5kZXhfYXJyYXksIE9pZCByZWxJ ZCwKIAkJCQkJCQkJCQkgU3RyaW5nSW5mbyBidWYpOwogc3RhdGljIGNoYXIgKnBnX2dldF9ydWxl ZGVmX3dvcmtlcihPaWQgcnVsZW9pZCwgaW50IHByZXR0eUZsYWdzKTsKK3N0YXRpYyB2b2lkIHBn X2dldF9ydWxlX3doZXJlY2xhdXNlKGNoYXIgKnF1YWxzdHIsIFF1ZXJ5ICpxdWVyeSwKKwkJCQkJ CQkJCSBTdHJpbmdJbmZvIGJ1ZiwgaW50IHByZXR0eUZsYWdzKTsKIHN0YXRpYyBjaGFyICpwZ19n ZXRfaW5kZXhkZWZfd29ya2VyKE9pZCBpbmRleHJlbGlkLCBpbnQgY29sbm8sCiAJCQkJCQkJCQlj b25zdCBPaWQgKmV4Y2x1ZGVPcHMsCiAJCQkJCQkJCQlib29sIGF0dHJzT25seSwgYm9vbCBrZXlz T25seSwKQEAgLTM1OCw3ICszNjEsNiBAQCBzdGF0aWMgaW50CXByaW50X2Z1bmN0aW9uX2FyZ3Vt ZW50cyhTdHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXAsCiAJCQkJCQkJCQkgYm9vbCBw cmludF90YWJsZV9hcmdzLCBib29sIHByaW50X2RlZmF1bHRzKTsKIHN0YXRpYyB2b2lkIHByaW50 X2Z1bmN0aW9uX3JldHR5cGUoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIHN0 YXRpYyB2b2lkIHByaW50X2Z1bmN0aW9uX3RyZnR5cGVzKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVw bGUgcHJvY3R1cCk7Ci1zdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0lu Zm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCk7CiBzdGF0aWMgdm9pZCBzZXRfcnRhYmxlX25hbWVz KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNwYWNlcywKIAkJCQkJ CQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogc3RhdGljIHZvaWQgc2V0X2RlcGFyc2VfZm9yX3F1 ZXJ5KGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBRdWVyeSAqcXVlcnksCkBAIC00ODQsMjIgKzQ4 NiwxNSBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlzdChSYW5nZVRibEZ1 bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwog c3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNsYXVzZSAqdGFibGVz YW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1zdGF0aWMgdm9pZCBn ZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0eXBlLAotCQkJCQkJ CSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGlyZWN0aW9uKE5vZGUg Km5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBwcmludFN1YnNj cmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7 CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsKIHN0YXRpYyBjaGFy ICpnZW5lcmF0ZV9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCwgTGlzdCAqbmFtZXNwYWNlcyk7CiBz dGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlmaWVkX3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsK LXN0YXRpYyBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJn cywKLQkJCQkJCQkJCUxpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAotCQkJCQkJCQkJYm9v bCBoYXNfdmFyaWFkaWMsIGJvb2wgKnVzZV92YXJpYWRpY19wLAotCQkJCQkJCQkJUGFyc2VFeHBy S2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9vcGVyYXRvcl9u YW1lKE9pZCBvcGVyaWQsIE9pZCBhcmcxLCBPaWQgYXJnMik7CiBzdGF0aWMgdm9pZCBhZGRfY2Fz dF90byhTdHJpbmdJbmZvIGJ1ZiwgT2lkIHR5cGlkKTsKIHN0YXRpYyBjaGFyICpnZW5lcmF0ZV9x dWFsaWZpZWRfdHlwZV9uYW1lKE9pZCB0eXBpZCk7CiBzdGF0aWMgdGV4dCAqc3RyaW5nX3RvX3Rl eHQoY2hhciAqc3RyKTsKLXN0YXRpYyBjaGFyICpmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlk KTsKIHN0YXRpYyB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxv cHRpb25zKTsKIAogI2RlZmluZSBvbmx5X21hcmtlcihydGUpICAoKHJ0ZSktPmluaCA/ICIiIDog Ik9OTFkgIikKQEAgLTU0Nyw2ICs1NDIsODAgQEAgcGdfZ2V0X3J1bGVkZWZfZXh0KFBHX0ZVTkNU SU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0KIAor LyoKKyAqIEdpdmVuIGEgcGFpciBvZiBEYXR1bSBjb3JyZXNwb25kaW5nIHRvIGEgcnVsZSdzIHBn X3Jld3JpdGUuZXZfcXVhbCBhbmQKKyAqIGV2X2FjdGlvbiBjb2x1bW5zLCByZXR1cm4gdGhlaXIg dGV4dCByZXByZXNlbnRhdGlvbjsgZXZfcXVhbCBhcyBhIHNpbmdsZQorICogc3RyaW5nIGluIHdo ZXJlQ2xhdXNlIGFuZCBldl9hY3Rpb24gYXMgYSBMaXN0IG9mIHN0cmluZ3MgKHdoaWNoIG1pZ2h0 IGJlCisgKiBOSUwsIHNpZ25hbGxpbmcgTk9USElORykgaW4gYWN0aW9ucy4KKyAqLwordm9pZAor cGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwgRGF0dW0gZXZfYWN0aW9uLAor CQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0ICoqYWN0aW9ucykKK3sKKwlpbnQJCQlwcmV0 dHlGbGFncyA9IDA7CisJY2hhcgkgICAqcXVhbHN0ciA9IFRleHREYXR1bUdldENTdHJpbmcoZXZf cXVhbCk7CisJY2hhcgkgICAqYWN0aW9uc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhldl9hY3Rp b24pOworCUxpc3QJICAgKmFjdGlvbk5vZGVMaXN0ID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGFj dGlvbnN0cik7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJKndoZXJlQ2xhdXNlID0gTlVMTDsK KwkqYWN0aW9ucyA9IE5JTDsKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKworCWlmIChzdHJjbXAo cXVhbHN0ciwgIjw+IikgIT0gMCkKKwl7CisJCVF1ZXJ5CSAgICpxdWVyeSA9IChRdWVyeSAqKSBs aW5pdGlhbChhY3Rpb25Ob2RlTGlzdCk7CisKKwkJcGdfZ2V0X3J1bGVfd2hlcmVjbGF1c2UocXVh bHN0ciwgcXVlcnksICZidWYsIDApOworCQkqd2hlcmVDbGF1c2UgPSBwc3RyZHVwKGJ1Zi5kYXRh KTsKKwl9CisKKwlpZiAobGlzdF9sZW5ndGgoYWN0aW9uTm9kZUxpc3QpID4gMCkKKwl7CisJCUxp c3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBhY3Rpb25Ob2RlTGlzdCkKKwkJewor CQkJUXVlcnkJICAgKnF1ZXJ5ID0gKFF1ZXJ5ICopIGxmaXJzdChjZWxsKTsKKworCQkJcmVzZXRT dHJpbmdJbmZvKCZidWYpOworCQkJZ2V0X3F1ZXJ5X2RlZihxdWVyeSwgJmJ1ZiwgTklMLCBOVUxM LCB0cnVlLAorCQkJCQkJICBwcmV0dHlGbGFncywgV1JBUF9DT0xVTU5fREVGQVVMVCwgMCk7CisJ CQkqYWN0aW9ucyA9IGxhcHBlbmQoKmFjdGlvbnMsIHBzdHJkdXAoYnVmLmRhdGEpKTsKKwkJfQor CX0KK30KKworLyoKKyAqIFRvIGdldCB0aGUgcmV3cml0ZSBydWxlIG9mIGEgdmlldyB3aGVuIHRo ZSBDUkVBVEUgVklFVyBjb21tYW5kIGV4ZWN1dGlvbiBpcworICogc3RpbGwgaW4gcHJvZ3Jlc3M6 IHdlIHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRvIGdldCB0aGUgcmV3cml0 ZQorICogcnVsZSBvZiB0aGUgdmlldyBhcyBvcHBvc2VkIHRvIHF1ZXJ5aW5nIHBnX3Jld3JpdGUg YXMgaW4gcGdfZ2V0X3ZpZXdkZWZfd29ya2VyKCksCisgKiB3aGljaCB3aWxsIHJldHVybiBlbXB0 eSByZXN1bHQuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3ZpZXdkZWZfc3RyaW5nKE9pZCB2aWV3b2lk KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlSZWxhdGlvbglwZ19yZXdyaXRlOworCUhlYXBU dXBsZQlydWxldHVwOworCVR1cGxlRGVzYwlydWxldHRjOworCisJaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisKKwlydWxldHVwID0gU2VhcmNoU3lzQ2FjaGUyKFJVTEVSRUxOQU1FLAorCQkJ CQkJCSAgT2JqZWN0SWRHZXREYXR1bSh2aWV3b2lkKSwKKwkJCQkJCQkgIFBvaW50ZXJHZXREYXR1 bShWaWV3U2VsZWN0UnVsZU5hbWUpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocnVsZXR1cCkp CisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZXdyaXRlIHJ1bGUgZm9y IHZpZXcgd2l0aCBPSUQgJXUiLCB2aWV3b2lkKTsKKworCXJ1bGV0dGMgPSBwZ19yZXdyaXRlLT5y ZF9hdHQ7CisJbWFrZV92aWV3ZGVmKCZidWYsIHJ1bGV0dXAsIHJ1bGV0dGMsIDAsIFdSQVBfQ09M VU1OX0RFRkFVTFQpOworCVJlbGVhc2VTeXNDYWNoZShydWxldHVwKTsKKwl0YWJsZV9jbG9zZShw Z19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIGJ1Zi5kYXRhOworfQogCiBz dGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93b3JrZXIoT2lkIHJ1bGVvaWQsIGludCBwcmV0 dHlGbGFncykKQEAgLTEwMTcsNjUgKzEwODYsMTIgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2Vy KE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCWlmICghaXNudWxsKQogCXsKIAkJTm9kZQkgICAq cXVhbDsKLQkJY2hhcgkJcmVsa2luZDsKLQkJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0JCWRl cGFyc2VfbmFtZXNwYWNlIGRwbnM7Ci0JCVJhbmdlVGJsRW50cnkgKm9sZHJ0ZTsKLQkJUmFuZ2VU YmxFbnRyeSAqbmV3cnRlOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIldIRU4g KCIpOworCQljaGFyCSAgICpxdWFsc3RyOwogCiAJCXF1YWwgPSBzdHJpbmdUb05vZGUoVGV4dERh dHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlxdWFsc3RyID0gcGdfZ2V0X3RyaWdnZXJfd2hlbmNs YXVzZSh0cmlncmVjLCBxdWFsLCBwcmV0dHkpOwogCi0JCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtp bmQodHJpZ3JlYy0+dGdyZWxpZCk7Ci0KLQkJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBS VEVzIGZvciB0aGUgcmVsICovCi0JCW9sZHJ0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwot CQlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJT047Ci0JCW9sZHJ0ZS0+cmVsaWQgPSB0cmln cmVjLT50Z3JlbGlkOwotCQlvbGRydGUtPnJlbGtpbmQgPSByZWxraW5kOwotCQlvbGRydGUtPnJl bGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwotCQlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFz KCJvbGQiLCBOSUwpOwotCQlvbGRydGUtPmVyZWYgPSBvbGRydGUtPmFsaWFzOwotCQlvbGRydGUt PmxhdGVyYWwgPSBmYWxzZTsKLQkJb2xkcnRlLT5pbmggPSBmYWxzZTsKLQkJb2xkcnRlLT5pbkZy b21DbCA9IHRydWU7Ci0KLQkJbmV3cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW5l d3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsKLQkJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMt PnRncmVsaWQ7Ci0JCW5ld3J0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+cmVsbG9j a21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW5ld3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5l dyIsIE5JTCk7Ci0JCW5ld3J0ZS0+ZXJlZiA9IG5ld3J0ZS0+YWxpYXM7Ci0JCW5ld3J0ZS0+bGF0 ZXJhbCA9IGZhbHNlOwotCQluZXdydGUtPmluaCA9IGZhbHNlOwotCQluZXdydGUtPmluRnJvbUNs ID0gdHJ1ZTsKLQotCQkvKiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KLQkJbWVtc2V0KCZk cG5zLCAwLCBzaXplb2YoZHBucykpOwotCQlkcG5zLnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRl LCBuZXdydGUpOwotCQlkcG5zLnN1YnBsYW5zID0gTklMOwotCQlkcG5zLmN0ZXMgPSBOSUw7Ci0J CWRwbnMuYXBwZW5kcmVscyA9IE5VTEw7Ci0JCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwg TlVMTCk7Ci0JCXNldF9zaW1wbGVfY29sdW1uX25hbWVzKCZkcG5zKTsKLQotCQkvKiBTZXQgdXAg Y29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLwotCQljb250ZXh0LmJ1ZiA9 ICZidWY7Ci0JCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOwotCQljb250 ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKLQkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKLQkJ Y29udGV4dC52YXJwcmVmaXggPSB0cnVlOwotCQljb250ZXh0LnByZXR0eUZsYWdzID0gR0VUX1BS RVRUWV9GTEFHUyhwcmV0dHkpOwotCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9E RUZBVUxUOwotCQljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJY29u dGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQuYXBwZW5k cGFyZW50cyA9IE5VTEw7Ci0KLQkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2Up OwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIikgIik7CisJCWFwcGVuZFN0cmlu Z0luZm8oJmJ1ZiwgIldIRU4gKCVzKSAiLCBxdWFsc3RyKTsKIAl9CiAKIAlhcHBlbmRTdHJpbmdJ bmZvKCZidWYsICJFWEVDVVRFIEZVTkNUSU9OICVzKCIsCkBAIC0xMTE2LDYgKzExMzIsNzQgQEAg cGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCXJldHVy biBidWYuZGF0YTsKIH0KIAorLyoKKyAqIFBhc3MgYmFjayB0aGUgVHJpZ2dlcldoZW4gY2xhdXNl IG9mIGEgdHJpZ2dlciBnaXZlbiB0aGUgcGdfdHJpZ2dlciByZWNvcmQgYW5kCisgKiB0aGUgZXhw cmVzc2lvbiB0cmVlIChpbiBub2RlVG9TdHJpbmcoKSByZXByZXNlbnRhdGlvbikgZnJvbSBwZ190 cmlnZ2VyLnRncXVhbAorICogZm9yIHRoZSB0cmlnZ2VyJ3MgV0hFTiBjb25kaXRpb24uCisgKi8K K2NoYXIgKgorcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZShGb3JtX3BnX3RyaWdnZXIgdHJpZ3Jl YywgTm9kZSAqd2hlbkNsYXVzZSwgYm9vbCBwcmV0dHkpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVm OworCWNoYXIJCXJlbGtpbmQ7CisJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJZGVwYXJzZV9u YW1lc3BhY2UgZHBuczsKKwlSYW5nZVRibEVudHJ5ICpvbGRydGU7CisJUmFuZ2VUYmxFbnRyeSAq bmV3cnRlOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwlyZWxraW5kID0gZ2V0X3JlbF9y ZWxraW5kKHRyaWdyZWMtPnRncmVsaWQpOworCisJLyogQnVpbGQgbWluaW1hbCBPTEQgYW5kIE5F VyBSVEVzIGZvciB0aGUgcmVsICovCisJb2xkcnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7 CisJb2xkcnRlLT5ydGVraW5kID0gUlRFX1JFTEFUSU9OOworCW9sZHJ0ZS0+cmVsaWQgPSB0cmln cmVjLT50Z3JlbGlkOworCW9sZHJ0ZS0+cmVsa2luZCA9IHJlbGtpbmQ7CisJb2xkcnRlLT5yZWxs b2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKKwlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJv bGQiLCBOSUwpOworCW9sZHJ0ZS0+ZXJlZiA9IG9sZHJ0ZS0+YWxpYXM7CisJb2xkcnRlLT5sYXRl cmFsID0gZmFsc2U7CisJb2xkcnRlLT5pbmggPSBmYWxzZTsKKwlvbGRydGUtPmluRnJvbUNsID0g dHJ1ZTsKKworCW5ld3J0ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW5ld3J0ZS0+cnRl a2luZCA9IFJURV9SRUxBVElPTjsKKwluZXdydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsK KwluZXdydGUtPnJlbGtpbmQgPSByZWxraW5kOworCW5ld3J0ZS0+cmVsbG9ja21vZGUgPSBBY2Nl c3NTaGFyZUxvY2s7CisJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsKKwlu ZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOworCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOwor CW5ld3J0ZS0+aW5oID0gZmFsc2U7CisJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwkvKiBC dWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KKwltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihkcG5z KSk7CisJZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKwlkcG5zLnN1 YnBsYW5zID0gTklMOworCWRwbnMuY3RlcyA9IE5JTDsKKwlkcG5zLmFwcGVuZHJlbHMgPSBOVUxM OworCXNldF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7CisJc2V0X3NpbXBsZV9jb2x1 bW5fbmFtZXMoJmRwbnMpOworCisJLyogU2V0IHVwIGNvbnRleHQgd2l0aCBvbmUtZGVlcCBuYW1l c3BhY2Ugc3RhY2sgKi8KKwljb250ZXh0LmJ1ZiA9ICZidWY7CisJY29udGV4dC5uYW1lc3BhY2Vz ID0gbGlzdF9tYWtlMSgmZHBucyk7CisJY29udGV4dC53aW5kb3dDbGF1c2UgPSBOSUw7CisJY29u dGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwljb250ZXh0LnZhcnByZWZpeCA9IHRydWU7CisJY29u dGV4dC5wcmV0dHlGbGFncyA9IEdFVF9QUkVUVFlfRkxBR1MocHJldHR5KTsKKwljb250ZXh0Lndy YXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOworCWNvbnRleHQuaW5kZW50TGV2ZWwgPSBQ UkVUVFlJTkRFTlRfU1REOworCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9IEVYUFJfS0lORF9O T05FOworCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7CisKKwlnZXRfcnVsZV9leHByKHdo ZW5DbGF1c2UsICZjb250ZXh0LCBmYWxzZSk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKIC8q IC0tLS0tLS0tLS0KICAqIHBnX2dldF9pbmRleGRlZgkJCS0gR2V0IHRoZSBkZWZpbml0aW9uIG9m IGFuIGluZGV4CiAgKgpAQCAtMTg4Miw2ICsxOTY2LDE0IEBAIHBnX2dldF9wYXJ0a2V5ZGVmX2Nv bHVtbnMoT2lkIHJlbGlkLCBib29sIHByZXR0eSkKIAlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZf d29ya2VyKHJlbGlkLCBwcmV0dHlGbGFncywgdHJ1ZSwgZmFsc2UpOwogfQogCisvKiBJbnRlcm5h bCB2ZXJzaW9uIHRoYXQgcmVwb3J0cyB0aGUgZnVsbCBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24g Ki8KK2NoYXIgKgorcGdfZ2V0X3BhcnRrZXlkZWZfc3RyaW5nKE9pZCByZWxpZCkKK3sKKwlyZXR1 cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBHRVRfUFJFVFRZX0ZMQUdTKGZhbHNl KSwgZmFsc2UsCisJCQkJCQkJCQlmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB3b3JraG9y c2UgdG8gZGVjb21waWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uLgogICovCkBAIC0yMTMz LDYgKzIyMjUsMTYgQEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1Mp CiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIElu dGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIHRoZSBkZWZpbml0aW9uIG9mIGEgQ09OU1RSQUlO VCBjb21tYW5kCisgKi8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfc3RyaW5nKE9pZCBj b25zdHJhaW50SWQpCit7CisJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihjb25z dHJhaW50SWQsIGZhbHNlLAorCQkJCQkJCQkJICAgR0VUX1BSRVRUWV9GTEFHUyhmYWxzZSksIGZh bHNlKTsKK30KKwogLyoKICAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGEgZnVsbCBB TFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgY29tbWFuZAogICovCkBAIC0zNTAzLDcgKzM2 MDUsMTIgQEAgcGdfZ2V0X2Z1bmN0aW9uX2FyZ19kZWZhdWx0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJ UEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChzdHIpKTsKIH0KIAotc3RhdGljIHZvaWQK Ky8qCisgKiBQcm9kdWNlIHRoZSBmb3JtYXR0ZWQgU1FMIGJvZHkgKG5vdCB0aGUgd2hvbGUgZnVu Y3Rpb24gZGVmaW5pdGlvbikKKyAqIG9mIGEgZnVuY3Rpb24gZ2l2ZW4gdGhlIHBnX3Byb2MgdHVw bGUuIFNhdmUgdGhlIGZvcm1hdHRlZCBTUUwgaW4gdGhlCisgKiBnaXZlbiBTdHJpbmdJbmZvLgor ICovCit2b2lkCiBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmluZ0luZm8gYnVmLCBIZWFwVHVw bGUgcHJvY3R1cCkKIHsKIAlpbnQJCQludW1hcmdzOwpAQCAtNTI1MCw0OCArNTM1NywxOCBAQCBt YWtlX3J1bGVkZWYoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBydWxldHVwLCBUdXBsZURlc2Mg cnVsZXR0YywKIAkvKiBJZiB0aGUgcnVsZSBoYXMgYW4gZXZlbnQgcXVhbGlmaWNhdGlvbiwgYWRk IGl0ICovCiAJaWYgKHN0cmNtcChldl9xdWFsLCAiPD4iKSAhPSAwKQogCXsKLQkJTm9kZQkgICAq cXVhbDsKLQkJUXVlcnkJICAgKnF1ZXJ5OwotCQlkZXBhcnNlX2NvbnRleHQgY29udGV4dDsKLQkJ ZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKLQotCQlpZiAocHJldHR5RmxhZ3MgJiBQUkVUVFlGTEFH X0lOREVOVCkKLQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICIpOwotCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBXSEVSRSAiKTsKLQotCQlxdWFsID0gc3RyaW5nVG9O b2RlKGV2X3F1YWwpOwotCiAJCS8qCiAJCSAqIFdlIG5lZWQgdG8gbWFrZSBhIGNvbnRleHQgZm9y IHJlY29nbml6aW5nIGFueSBWYXJzIGluIHRoZSBxdWFsCiAJCSAqICh3aGljaCBjYW4gb25seSBi ZSByZWZlcmVuY2VzIHRvIE9MRCBhbmQgTkVXKS4gIFVzZSB0aGUgcnRhYmxlIG9mCiAJCSAqIHRo ZSBmaXJzdCBxdWVyeSBpbiB0aGUgYWN0aW9uIGxpc3QgZm9yIHRoaXMgcHVycG9zZS4KIAkJICov Ci0JCXF1ZXJ5ID0gKFF1ZXJ5ICopIGxpbml0aWFsKGFjdGlvbnMpOworCQlRdWVyeQkgICAqcXVl cnkgPSAoUXVlcnkgKikgbGluaXRpYWwoYWN0aW9ucyk7CiAKLQkJLyoKLQkJICogSWYgdGhlIGFj dGlvbiBpcyBJTlNFUlQuLi5TRUxFQ1QsIE9MRC9ORVcgaGF2ZSBiZWVuIHB1c2hlZCBkb3duCi0J CSAqIGludG8gdGhlIFNFTEVDVCwgYW5kIHRoYXQncyB3aGF0IHdlIG5lZWQgdG8gbG9vayBhdC4g KFVnbHkga2x1Z2UKLQkJICogLi4uIHRyeSB0byBmaXggdGhpcyB3aGVuIHdlIHJlZGVzaWduIHF1 ZXJ5dHJlZXMuKQotCQkgKi8KLQkJcXVlcnkgPSBnZXRJbnNlcnRTZWxlY3RRdWVyeShxdWVyeSwg TlVMTCk7Ci0KLQkJLyogTXVzdCBhY3F1aXJlIGxvY2tzIHJpZ2h0IGF3YXk7IHNlZSBub3RlcyBp biBnZXRfcXVlcnlfZGVmKCkgKi8KLQkJQWNxdWlyZVJld3JpdGVMb2NrcyhxdWVyeSwgZmFsc2Us IGZhbHNlKTsKLQotCQljb250ZXh0LmJ1ZiA9IGJ1ZjsKLQkJY29udGV4dC5uYW1lc3BhY2VzID0g bGlzdF9tYWtlMSgmZHBucyk7Ci0JCWNvbnRleHQud2luZG93Q2xhdXNlID0gTklMOwotCQljb250 ZXh0LndpbmRvd1RMaXN0ID0gTklMOwotCQljb250ZXh0LnZhcnByZWZpeCA9IChsaXN0X2xlbmd0 aChxdWVyeS0+cnRhYmxlKSAhPSAxKTsKLQkJY29udGV4dC5wcmV0dHlGbGFncyA9IHByZXR0eUZs YWdzOwotCQljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwotCQljb250 ZXh0LmluZGVudExldmVsID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJY29udGV4dC5zcGVjaWFsX2V4 cHJraW5kID0gRVhQUl9LSU5EX05PTkU7Ci0JCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7 Ci0KLQkJc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KCZkcG5zLCBxdWVyeSwgTklMKTsKKwkJaWYgKHBy ZXR0eUZsYWdzICYgUFJFVFRZRkxBR19JTkRFTlQpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIlxuICAiKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgV0hFUkUgIik7 CiAKLQkJZ2V0X3J1bGVfZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOworCQlwZ19nZXRfcnVs ZV93aGVyZWNsYXVzZShldl9xdWFsLCBxdWVyeSwgYnVmLCBwcmV0dHlGbGFncyk7CiAJfQogCiAJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRE8gIik7CkBAIC01MzMyLDYgKzU0MDksNDcg QEAgbWFrZV9ydWxlZGVmKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcnVsZXR1cCwgVHVwbGVE ZXNjIHJ1bGV0dGMsCiAJdGFibGVfY2xvc2UoZXZfcmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CiB9CiAKKy8qCisgKiBHaXZlbiBhIHN0cmluZyBjb3JyZXNwb25kaW5nIHRvIGEgcnVsZSdzIHBn X3Jld3JpdGUuZXZfcXVhbCBhbmQgYSBxdWVyeQorICogcGFyc2V0cmVlLCBhcHBlbmQgZXZfcXVh bCdzIHRleHQgcmVwcmVzZW50YXRpb24gaW50byB0aGUgb3V0cHV0IGJ1Zi4KKyAqCisgKiBUcmll cyB0byBwcmV0dHkgdXAgdGhlIG91dHB1dCBhY2NvcmRpbmcgdG8gcHJldHR5RmxhZ3MuCisgKi8K K3N0YXRpYyB2b2lkCitwZ19nZXRfcnVsZV93aGVyZWNsYXVzZShjaGFyICpxdWFsc3RyLCBRdWVy eSAqcXVlcnksIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJaW50IHByZXR0eUZsYWdzKQoreworCU5v ZGUJICAgKnF1YWw7CisJZGVwYXJzZV9jb250ZXh0IGNvbnRleHQ7CisJZGVwYXJzZV9uYW1lc3Bh Y2UgZHBuczsKKworCXF1YWwgPSBzdHJpbmdUb05vZGUocXVhbHN0cik7CisKKwkvKgorCSAqIElm IHRoZSBhY3Rpb24gaXMgSU5TRVJULi4uU0VMRUNULCBPTEQvTkVXIGhhdmUgYmVlbiBwdXNoZWQg ZG93bgorCSAqIGludG8gdGhlIFNFTEVDVCwgYW5kIHRoYXQncyB3aGF0IHdlIG5lZWQgdG8gbG9v ayBhdC4gKFVnbHkga2x1Z2UKKwkgKiAuLi4gdHJ5IHRvIGZpeCB0aGlzIHdoZW4gd2UgcmVkZXNp Z24gcXVlcnl0cmVlcy4pCisJICovCisJcXVlcnkgPSBnZXRJbnNlcnRTZWxlY3RRdWVyeShxdWVy eSwgTlVMTCk7CisKKwkvKiBNdXN0IGFjcXVpcmUgbG9ja3MgcmlnaHQgYXdheTsgc2VlIG5vdGVz IGluIGdldF9xdWVyeV9kZWYoKSAqLworCUFjcXVpcmVSZXdyaXRlTG9ja3MocXVlcnksIGZhbHNl LCBmYWxzZSk7CisKKwljb250ZXh0LmJ1ZiA9IGJ1ZjsKKwljb250ZXh0Lm5hbWVzcGFjZXMgPSBs aXN0X21ha2UxKCZkcG5zKTsKKwljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKwljb250ZXh0 LndpbmRvd1RMaXN0ID0gTklMOworCWNvbnRleHQudmFycHJlZml4ID0gKGxpc3RfbGVuZ3RoKHF1 ZXJ5LT5ydGFibGUpICE9IDEpOworCWNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHlGbGFnczsK Kwljb250ZXh0LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOworCWNvbnRleHQuaW5k ZW50TGV2ZWwgPSBQUkVUVFlJTkRFTlRfU1REOworCWNvbnRleHQuc3BlY2lhbF9leHBya2luZCA9 IEVYUFJfS0lORF9OT05FOworCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7CisKKwlzZXRf ZGVwYXJzZV9mb3JfcXVlcnkoJmRwbnMsIHF1ZXJ5LCBOSUwpOworCisJZ2V0X3J1bGVfZXhwcihx dWFsLCAmY29udGV4dCwgZmFsc2UpOworfQogCiAvKiAtLS0tLS0tLS0tCiAgKiBtYWtlX3ZpZXdk ZWYJCQktIHJlY29uc3RydWN0IHRoZSBTRUxFQ1QgcGFydCBvZiBhCkBAIC0xMTM3OSw3ICsxMTQ5 Nyw3IEBAIGdldF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2UgKnRhYmxlc2FtcGxl LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCiAgKiBhY3R1YWxfZGF0YXR5cGUuICAoSWYgeW91 IGRvbid0IHdhbnQgdGhpcyBiZWhhdmlvciwganVzdCBwYXNzCiAgKiBJbnZhbGlkT2lkIGZvciBh Y3R1YWxfZGF0YXR5cGUuKQogICovCi1zdGF0aWMgdm9pZAordm9pZAogZ2V0X29wY2xhc3NfbmFt ZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKIAkJCQkgU3RyaW5nSW5mbyBidWYp CiB7CkBAIC0xMTc3Myw3ICsxMTg5MSw3IEBAIGdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9u YW1lKE9pZCByZWxpZCkKICAqCiAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGFsbCBuZWNlc3Nhcnkg cXVvdGluZyBhbmQgc2NoZW1hLXByZWZpeGluZy4KICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAq CiBnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBuYXJncywgTGlzdCAqYXJn bmFtZXMsIE9pZCAqYXJndHlwZXMsCiAJCQkJCSAgIGJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1 c2VfdmFyaWFkaWNfcCwKIAkJCQkJICAgUGFyc2VFeHByS2luZCBzcGVjaWFsX2V4cHJraW5kKQpA QCAtMTIxNTksNyArMTIyNzcsNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0 dW0gcmVsb3B0aW9ucykKIC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBh IHJlbGF0aW9uJ3MgcmVsb3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hh ciAqCitjaGFyICoKIGZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAq cmVzdWx0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCA2ZWNh YTJhMDFlLi43MTVmMmEyZTM2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBA IC0xOCw4ICsxOCw4IEBACiAjZGVmaW5lIFBHX1BVQkxJQ0FUSU9OX0gKIAogI2luY2x1ZGUgImNh dGFsb2cvZ2VuYmtpLmgiCi0jaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5j bHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9kLmgiCisjaW5jbHVkZSAibm9kZXMvcGdfbGlz dC5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJcGdfcHVibGljYXRpb24gZGVmaW5pdGlv bi4gIGNwcCB0dXJucyB0aGlzIGludG8KQEAgLTEwMywxMiArMTAzLDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgUHVibGljYXRpb24KIAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsKIH0gUHVibGlj YXRpb247CiAKLXR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uUmVsSW5mbwotewotCVJlbGF0aW9u CXJlbGF0aW9uOwotCU5vZGUJICAgKndoZXJlQ2xhdXNlOwotCUxpc3QJICAgKmNvbHVtbnM7Ci19 IFB1YmxpY2F0aW9uUmVsSW5mbzsKIAogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlv bihPaWQgcHViaWQpOwogZXh0ZXJuIFB1YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbkJ5TmFtZShj b25zdCBjaGFyICpwdWJuYW1lLCBib29sIG1pc3Npbmdfb2spOwpAQCAtMTQ0LDE1ICsxMzgsNiBA QCBleHRlcm4gTGlzdCAqR2V0UHViUGFydGl0aW9uT3B0aW9uUmVsYXRpb25zKExpc3QgKnJlc3Vs dCwKIAkJCQkJCQkJCQkJT2lkIHJlbGlkKTsKIGV4dGVybiBPaWQJR2V0VG9wTW9zdEFuY2VzdG9y SW5QdWJsaWNhdGlvbihPaWQgcHVib2lkLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJCQkJCQkJCWlu dCAqYW5jZXN0b3JfbGV2ZWwpOwotCi1leHRlcm4gYm9vbCBpc19wdWJsaXNoYWJsZV9yZWxhdGlv bihSZWxhdGlvbiByZWwpOwogZXh0ZXJuIGJvb2wgaXNfc2NoZW1hX3B1YmxpY2F0aW9uKE9pZCBw dWJpZCk7Ci1leHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lk IHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKLQkJCQkJCQkJCQkJICBib29sIGlmX25v dF9leGlzdHMpOwotZXh0ZXJuIE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3NjaGVtYShP aWQgcHViaWQsIE9pZCBzY2hlbWFpZCwKLQkJCQkJCQkJCQkJYm9vbCBpZl9ub3RfZXhpc3RzKTsK LQotZXh0ZXJuIEJpdG1hcHNldCAqcHViX2NvbGxpc3RfdG9fYml0bWFwc2V0KEJpdG1hcHNldCAq Y29sdW1ucywgRGF0dW0gcHViY29scywKLQkJCQkJCQkJCQkgICBNZW1vcnlDb250ZXh0IG1jeHQp OwogCiAjZW5kaWYJCQkJCQkJLyogUEdfUFVCTElDQVRJT05fSCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMv Y29sbGF0aW9uY21kcy5oCmluZGV4IGI3NmM3YjNkYzMuLjUzYzRhMWE4YzIgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9jb2xsYXRpb25jbWRzLmgKQEAgLTE4LDcgKzE4LDggQEAKICNpbmNsdWRlICJjYXRh bG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgogCi1l eHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZXhpc3RzKTsKK2V4dGVy biBPYmplY3RBZGRyZXNzIERlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3Qg Km5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLAorCQkJCQkJCQkJICBib29sIGlmX25vdF9leGlzdHMs IE9iamVjdEFkZHJlc3MgKmZyb21fY29sbGlkKTsKIGV4dGVybiB2b2lkIElzVGhlcmVDb2xsYXRp b25Jbk5hbWVzcGFjZShjb25zdCBjaGFyICpjb2xsbmFtZSwgT2lkIG5zcE9pZCk7CiBleHRlcm4g T2JqZWN0QWRkcmVzcyBBbHRlckNvbGxhdGlvbihBbHRlckNvbGxhdGlvblN0bXQgKnN0bXQpOwog CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5kZXggNWVkNmVjZTU1NS4uYTk3ZThi N2RmOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisr KyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtMTYsNiArMTYsNyBA QAogI2luY2x1ZGUgImNhdGFsb2cvZGVwZW5kZW5jeS5oIgogI2luY2x1ZGUgImNhdGFsb2cvb2Jq ZWN0YWRkcmVzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZXZlbnRfdHJpZ2dlci5oIgorI2lu Y2x1ZGUgImxpYi9pbGlzdC5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNs dWRlICJ0Y29wL2NtZHRhZy5oIgogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCkBA IC0yOSw2ICszMCw0NCBAQCB0eXBlZGVmIHN0cnVjdCBFdmVudFRyaWdnZXJEYXRhCiAJQ29tbWFu ZFRhZwl0YWc7CiB9IEV2ZW50VHJpZ2dlckRhdGE7CiAKK3R5cGVkZWYgc3RydWN0IEV2ZW50VHJp Z2dlclF1ZXJ5U3RhdGUKK3sKKwkvKiBtZW1vcnkgY29udGV4dCBmb3IgdGhpcyBzdGF0ZSdzIG9i amVjdHMgKi8KKwlNZW1vcnlDb250ZXh0IGN4dDsKKworCS8qIHNxbF9kcm9wICovCisJc2xpc3Rf aGVhZAlTUUxEcm9wTGlzdDsKKwlib29sCQlpbl9zcWxfZHJvcDsKKworCS8qIHRhYmxlX3Jld3Jp dGUgKi8KKwlPaWQJCQl0YWJsZV9yZXdyaXRlX29pZDsJLyogSW52YWxpZE9pZCwgb3Igc2V0IGZv ciB0YWJsZV9yZXdyaXRlCisJCQkJCQkJCQkgKiBldmVudCAqLworCWludAkJCXRhYmxlX3Jld3Jp dGVfcmVhc29uOwkvKiBBVF9SRVdSSVRFIHJlYXNvbiAqLworCisJLyogU3VwcG9ydCBmb3IgY29t bWFuZCBjb2xsZWN0aW9uICovCisJYm9vbAkJY29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQ7CisJ Q29sbGVjdGVkQ29tbWFuZCAqY3VycmVudENvbW1hbmQ7CisJTGlzdAkgICAqY29tbWFuZExpc3Q7 CS8qIGxpc3Qgb2YgQ29sbGVjdGVkQ29tbWFuZDsgc2VlCisJCQkJCQkJCSAqIGRlcGFyc2VfdXRp bGl0eS5oICovCisJc3RydWN0IEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKnByZXZpb3VzOworfSBF dmVudFRyaWdnZXJRdWVyeVN0YXRlOworCisvKiBTdXBwb3J0IGZvciBkcm9wcGVkIG9iamVjdHMg Ki8KK3R5cGVkZWYgc3RydWN0IFNRTERyb3BPYmplY3QKK3sKKwlPYmplY3RBZGRyZXNzIGFkZHJl c3M7CisJY29uc3QgY2hhciAqc2NoZW1hbmFtZTsKKwljb25zdCBjaGFyICpvYmpuYW1lOworCWNv bnN0IGNoYXIgKm9iamlkZW50aXR5OworCWNvbnN0IGNoYXIgKm9iamVjdHR5cGU7CisJTGlzdAkg ICAqYWRkcm5hbWVzOworCUxpc3QJICAgKmFkZHJhcmdzOworCWJvb2wJCW9yaWdpbmFsOworCWJv b2wJCW5vcm1hbDsKKwlib29sCQlpc3RlbXA7CisJc2xpc3Rfbm9kZQluZXh0OworfSBTUUxEcm9w T2JqZWN0OworCiAjZGVmaW5lIEFUX1JFV1JJVEVfQUxURVJfUEVSU0lTVEVOQ0UJMHgwMQogI2Rl ZmluZSBBVF9SRVdSSVRFX0RFRkFVTFRfVkFMCQkJMHgwMgogI2RlZmluZSBBVF9SRVdSSVRFX0NP TFVNTl9SRVdSSVRFCQkweDA0CkBAIC04NCw1ICsxMjMsNyBAQCBleHRlcm4gdm9pZCBFdmVudFRy aWdnZXJDb2xsZWN0Q3JlYXRlT3BDbGFzcyhDcmVhdGVPcENsYXNzU3RtdCAqc3RtdCwKIGV4dGVy biB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRTQ29uZmlnKEFsdGVyVFNDb25maWd1cmF0 aW9uU3RtdCAqc3RtdCwKIAkJCQkJCQkJCQkJIE9pZCBjZmdJZCwgT2lkICpkaWN0SWRzLCBpbnQg bmRpY3RzKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlckRlZlByaXZzKEFs dGVyRGVmYXVsdFByaXZpbGVnZXNTdG10ICpzdG10KTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dl ckNvbGxlY3RTZWNMYWJlbChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIGNoYXIgKnByb3ZpZGVyLAor CQkJCQkJCQkJCVNlY0xhYmVsU3RtdCAqc3RtdCk7CiAKICNlbmRpZgkJCQkJCQkvKiBFVkVOVF9U UklHR0VSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgKaW5kZXggNzBk NWUzNjgwYS4uYTNmY2E5ZTY0YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRz LmgKQEAgLTIyLDYgKzIyLDEzIEBACiAvKiBTYW1lIGFzIE1BWE5VTU1FU1NBR0VTIGluIHNpbnZh bGFkdC5jICovCiAjZGVmaW5lIE1BWF9SRUxDQUNIRV9JTlZBTF9NU0dTIDQwOTYKIAordHlwZWRl ZiBzdHJ1Y3QgUHVibGljYXRpb25SZWxJbmZvCit7CisJUmVsYXRpb24JcmVsYXRpb247CisJTm9k ZQkgICAqd2hlcmVDbGF1c2U7CisJTGlzdAkgICAqY29sdW1uczsKK30gUHVibGljYXRpb25SZWxJ bmZvOworCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCk7CiBleHRlcm4gdm9pZCBBbHRl clB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0 bXQpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlUHVibGljYXRpb25CeUlkKE9pZCBwdWJpZCk7CkBAIC0z NSw1ICs0MiwxMiBAQCBleHRlcm4gYm9vbCBwdWJfcmZfY29udGFpbnNfaW52YWxpZF9jb2x1bW4o T2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQkgICBMaXN0ICphbmNlc3Rv cnMsIGJvb2wgcHVidmlhcm9vdCk7CiBleHRlcm4gYm9vbCBwdWJfY29sbGlzdF9jb250YWluc19p bnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJCQkJ TGlzdCAqYW5jZXN0b3JzLCBib29sIHB1YnZpYXJvb3QpOworZXh0ZXJuIEJpdG1hcHNldCAqcHVi X2NvbGxpc3RfdG9fYml0bWFwc2V0KEJpdG1hcHNldCAqY29sdW1ucywgRGF0dW0gcHViY29scywK KwkJCQkJCQkJCQkgICBNZW1vcnlDb250ZXh0IG1jeHQpOworZXh0ZXJuIE9iamVjdEFkZHJlc3Mg cHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICpw cmksCisJCQkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3RzKTsKK2V4dGVybiBPYmplY3RBZGRy ZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQgc2NoZW1haWQsCisJCQkJ CQkJCQkJCWJvb2wgaWZfbm90X2V4aXN0cyk7CitleHRlcm4gYm9vbCBpc19wdWJsaXNoYWJsZV9y ZWxhdGlvbihSZWxhdGlvbiByZWwpOwogCiAjZW5kaWYJCQkJCQkJLyogUFVCTElDQVRJT05DTURT X0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IDdkYjdiM2RhN2IuLmMwYTM5NTk2YWMg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtMTUsNiArMTUsNyBAQAogCiAjaW5jbHVkZSAi YWNjZXNzL3hsb2dyZWFkZXIuaCIKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiZm1nci5oIgogI2lu Y2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgpA QCAtNTEsOSArNTIsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxfc2VxX3JlYwogCS8qIFNFUVVFTkNF IFRVUExFIERBVEEgRk9MTE9XUyBBVCBUSEUgRU5EICovCiB9IHhsX3NlcV9yZWM7CiAKKy8qIElu Zm9ybWF0aW9uIG5lZWRlZCB0byBkZWZpbmUgYSBzZXF1ZW5jZS4gKi8KK3R5cGVkZWYgc3RydWN0 IFNlcXVlbmNlX3ZhbHVlcworeworCUZvcm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlpbnQ2NAkJ bGFzdF92YWx1ZTsKK30gU2VxdWVuY2VfdmFsdWVzOworCiBleHRlcm4gaW50NjQgbmV4dHZhbF9p bnRlcm5hbChPaWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVt IG5leHR2YWwoUEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9u cyhPaWQgcmVsaWQpOworZXh0ZXJuIFNlcXVlbmNlX3ZhbHVlcyAqZ2V0X3NlcXVlbmNlX3ZhbHVl cyhPaWQgc2VxdWVuY2VJZCk7CiAKIGV4dGVybiBPYmplY3RBZGRyZXNzIERlZmluZVNlcXVlbmNl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU2VxU3RtdCAqc2VxKTsKIGV4dGVybiBPYmplY3RB ZGRyZXNzIEFsdGVyU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0 bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3Ny Yy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKaW5kZXggYjU4NTgxMGI5YS4uYTFlMDZk YWI1MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysg Yi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCkBAIC0yOSw3ICsyOSw4IEBAIHR5 cGVkZWYgZW51bSBDb2xsZWN0ZWRDb21tYW5kVHlwZQogCVNDVF9BbHRlck9wRmFtaWx5LAogCVND VF9BbHRlckRlZmF1bHRQcml2aWxlZ2VzLAogCVNDVF9DcmVhdGVPcENsYXNzLAotCVNDVF9BbHRl clRTQ29uZmlnCisJU0NUX0FsdGVyVFNDb25maWcsCisJU0NUX1NlY3VyaXR5TGFiZWwKIH0gQ29s bGVjdGVkQ29tbWFuZFR5cGU7CiAKIC8qCkBAIC0xMDAsNiArMTAxLDEzIEBAIHR5cGVkZWYgc3Ry dWN0IENvbGxlY3RlZENvbW1hbmQKIAkJewogCQkJT2JqZWN0VHlwZQlvYmp0eXBlOwogCQl9CQkJ ZGVmcHJpdnM7CisKKwkJLyogU0VDVVJJVFkgTEFCRUwgKi8KKwkJc3RydWN0CisJCXsKKwkJCU9i amVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCWNoYXIJCSAqcHJvdmlkZXI7CisJCX0JCQlzZWNsYWJl bDsKIAl9CQkJZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kICpwYXJlbnQ7CS8qIHdoZW4g bmVzdGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaCBiL3NyYy9p bmNsdWRlL3Rjb3AvdXRpbGl0eS5oCmluZGV4IDU5ZTY0YWVhMDcuLmE2OGNlM2QzMzYgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3Av dXRpbGl0eS5oCkBAIC05OSw2ICs5OSw4IEBAIGV4dGVybiBRdWVyeSAqVXRpbGl0eUNvbnRhaW5z UXVlcnkoTm9kZSAqcGFyc2V0cmVlKTsKIAogZXh0ZXJuIENvbW1hbmRUYWcgQ3JlYXRlQ29tbWFu ZFRhZyhOb2RlICpwYXJzZXRyZWUpOwogCitleHRlcm4gY29uc3QgY2hhciAqc3RyaW5naWZ5X29i anR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBib29sIGlzZ3JhbnQpOworCiBzdGF0aWMgaW5saW5l IGNvbnN0IGNoYXIgKgogQ3JlYXRlQ29tbWFuZE5hbWUoTm9kZSAqcGFyc2V0cmVlKQogewpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmggYi9zcmMvaW5jbHVkZS91dGlscy9hY2wu aAppbmRleCBmOGUxMjM4ZmEyLi5mMDU1NzhkMzIyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91 dGlscy9hY2wuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9hY2wuaApAQCAtMjA5LDYgKzIwOSw4 IEBAIGV4dGVybiBBY2xNb2RlIGFjbG1hc2soY29uc3QgQWNsICphY2wsIE9pZCByb2xlaWQsIE9p ZCBvd25lcklkLAogCQkJCQkgICBBY2xNb2RlIG1hc2ssIEFjbE1hc2tIb3cgaG93KTsKIGV4dGVy biBpbnQJYWNsbWVtYmVycyhjb25zdCBBY2wgKmFjbCwgT2lkICoqcm9sZWlkcyk7CiAKK2V4dGVy biBjb25zdCBjaGFyICpwcml2aWxlZ2VfdG9fc3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKTsKKwog ZXh0ZXJuIGJvb2wgaGFzX3ByaXZzX29mX3JvbGUoT2lkIG1lbWJlciwgT2lkIHJvbGUpOwogZXh0 ZXJuIGJvb2wgbWVtYmVyX2Nhbl9zZXRfcm9sZShPaWQgbWVtYmVyLCBPaWQgcm9sZSk7CiBleHRl cm4gdm9pZCBjaGVja19jYW5fc2V0X3JvbGUoT2lkIG1lbWJlciwgT2lkIHJvbGUpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS91 dGlscy9hY2xjaGtfaW50ZXJuYWwuaAppbmRleCA1NWFmNjI0ZmIzLi45NDY1NDVmNTNmIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5j bHVkZS91dGlscy9hY2xjaGtfaW50ZXJuYWwuaApAQCAtMzksNiArMzksNyBAQCB0eXBlZGVmIHN0 cnVjdAogCUxpc3QJICAgKmdyYW50ZWVzOwogCWJvb2wJCWdyYW50X29wdGlvbjsKIAlEcm9wQmVo YXZpb3IgYmVoYXZpb3I7CisJT2lkCQkJZ3JhbnRvcl91aWQ7CiB9IEludGVybmFsR3JhbnQ7CiAK IApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaCBiL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmgKaW5kZXggMmY4YjQ2ZDZkYS4uNDhiOGJmZDc5YSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9i dWlsdGlucy5oCkBAIC0xMjMsMTAgKzEyMywxMiBAQCBleHRlcm4gRGF0dW0gbnVtZXJpY19mbG9h dDhfbm9fb3ZlcmZsb3coUEdfRlVOQ1RJT05fQVJHUyk7CiAjZGVmaW5lIEZPUk1BVF9UWVBFX0ZP UkNFX1FVQUxJRlkJMHgwNAkvKiBmb3JjZSBxdWFsaWZpY2F0aW9uIG9mIHR5cGUgKi8KICNkZWZp bmUgRk9STUFUX1RZUEVfSU5WQUxJRF9BU19OVUxMCTB4MDgJLyogTlVMTCBpZiB1bmRlZmluZWQg Ki8KIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV9leHRlbmRlZChPaWQgdHlwZV9vaWQsIGludDMy IHR5cGVtb2QsIGJpdHMxNiBmbGFncyk7CitleHRlcm4gY2hhciAqZm9ybWF0X3Byb2NlZHVyZV9h cmdzKE9pZCBwcm9jZWR1cmVfb2lkLCBib29sIGZvcmNlX3F1YWxpZnkpOwogCiBleHRlcm4gY2hh ciAqZm9ybWF0X3R5cGVfYmUoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlw ZV9iZV9xdWFsaWZpZWQoT2lkIHR5cGVfb2lkKTsKIGV4dGVybiBjaGFyICpmb3JtYXRfdHlwZV93 aXRoX3R5cGVtb2QoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kKTsKK2V4dGVybiBjaGFyICpw cmludFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2Rv dXQpOwogCiBleHRlcm4gaW50MzIgdHlwZV9tYXhpbXVtX3NpemUoT2lkIHR5cGVfb2lkLCBpbnQz MiB0eXBlbW9kKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggYi9zcmMv aW5jbHVkZS91dGlscy9yZWwuaAppbmRleCA2N2Y5OTRjYjNlLi4yMmNhN2E4MGE2IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWwu aApAQCAtMTYsMTAgKzE2LDEyIEBACiAKICNpbmNsdWRlICJhY2Nlc3MvdHVwZGVzYy5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhZGRyZXNzLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5k ZXguaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgiCiAjaW5jbHVkZSAibm9k ZXMvYml0bWFwc2V0LmgiCisjaW5jbHVkZSAibm9kZXMvbG9ja29wdGlvbnMuaCIKICNpbmNsdWRl ICJwYXJ0aXRpb25pbmcvcGFydGRlZnMuaCIKICNpbmNsdWRlICJyZXdyaXRlL3ByczJsb2NrLmgi CiAjaW5jbHVkZSAic3RvcmFnZS9ibG9jay5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRp bHMvcnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCAxYTQy ZDlmMzliLi5iNmUyMGU3ZWU0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRp bHMuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMTMsOSArMTMsMTIg QEAKICNpZm5kZWYgUlVMRVVUSUxTX0gKICNkZWZpbmUgUlVMRVVUSUxTX0gKIAorI2luY2x1ZGUg ImFjY2Vzcy9odHVwLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVk ZSAibm9kZXMvbm9kZXMuaCIKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCiAjaW5jbHVk ZSAibm9kZXMvcGdfbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV9ub2RlLmgiCiAKIHN0 cnVjdCBQbGFuOwkJCQkJLyogYXZvaWQgaW5jbHVkaW5nIHBsYW5ub2Rlcy5oIGhlcmUgKi8KIHN0 cnVjdCBQbGFubmVkU3RtdDsKQEAgLTIzLDEyICsyNiwyMCBAQCBzdHJ1Y3QgUGxhbm5lZFN0bXQ7 CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJlbGlkKTsK IGV4dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfY29sdW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9v bCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF90cmlnZ2VyX3doZW5jbGF1c2UoRm9ybV9w Z190cmlnZ2VyIHRyaWdyZWMsCisJCQkJCQkJCQkgICBOb2RlICp3aGVuQ2xhdXNlLCBib29sIHBy ZXR0eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwgYm9vbCBw cmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF92aWV3ZGVmX3N0cmluZyhPaWQgdmlld29pZCk7 CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9v bCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5ZGVmX3N0cmluZyhPaWQgcmVs aWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0Y29uc3RyZGVmX3N0cmluZyhPaWQgcGFydGl0 aW9uSWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWlu dGRlZl9jb21tYW5kKE9pZCBjb25zdHJhaW50SWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25z dHJhaW50ZGVmX3N0cmluZyhPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiB2b2lkIHBnX2dldF9y dWxlZGVmX2RldGFpbGVkKERhdHVtIGV2X3F1YWwsIERhdHVtIGV2X2FjdGlvbiwKKwkJCQkJCQkJ CWNoYXIgKip3aGVyZUNsYXVzZSwgTGlzdCAqKmFjdGlvbnMpOworCiBleHRlcm4gY2hhciAqZGVw YXJzZV9leHByZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9v bCBmb3JjZXByZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2Vf Y29udGV4dF9mb3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNDAsOCAr NTEsMTYgQEAgZXh0ZXJuIExpc3QgKnNlbGVjdF9ydGFibGVfbmFtZXNfZm9yX2V4cGxhaW4oTGlz dCAqcnRhYmxlLAogCQkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxzX3VzZWQpOwogZXh0ZXJuIGNo YXIgKmdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKE9pZCBjb2xsaWQpOwogZXh0ZXJuIGNoYXIgKmdl bmVyYXRlX29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcyk7CitleHRlcm4gY2hhciAqZ2VuZXJhdGVf ZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3MsIExpc3QgKmFyZ25hbWVzLAorCQkJ CQkJCQkJT2lkICphcmd0eXBlcywgYm9vbCBoYXNfdmFyaWFkaWMsCisJCQkJCQkJCQlib29sICp1 c2VfdmFyaWFkaWNfcCwKKwkJCQkJCQkJCVBhcnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7 CiBleHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0 dW1zKTsKK2V4dGVybiB2b2lkIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1 YWxfZGF0YXR5cGUsCisJCQkJCQkJIFN0cmluZ0luZm8gYnVmKTsKK2V4dGVybiBjaGFyICpmbGF0 dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0 aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlkKTsKK2V4dGVybiB2b2lkIHByaW50X2Z1bmN0 aW9uX3NxbGJvZHkoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwKTsKIAogI2VuZGlm CQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDg2 YTkzMDNiZjUuLjQyODY4OWE3ZjkgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0yNDU4 LDYgKzI0NTgsNyBAQCBTZXFTY2FuCiBTZXFTY2FuU3RhdGUKIFNlcVRhYmxlCiBTZXFUYWJsZURh dGEKK1NlcXVlbmNlX3ZhbHVlcwogU2VyQ29tbWl0U2VxTm8KIFNlcmlhbENvbnRyb2wKIFNlcmlh bGl6YWJsZVhhY3RIYW5kbGUKLS0gCjIuMzQuMQoK --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Disposition: attachment; filename="v77-0005-DDL-messaging-infrastructure-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69dh4 RnJvbSA5M2VmOTE3ZDExYmMxYzI4YTYwYjVmYTM4ZWQ5MGVlNDdlODg5MjdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzo1MzozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDUvOF0gRERMIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9u LgoKRERMIG1lc3NhZ2luZyBpbmZyYXN0cnVjdHVyZSBmb3IgRERMIHJlcGxpY2F0aW9uLgotLS0K IGNvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9kZGwub3V0ICAgICAgICB8ICAyNiArKysr CiBjb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwgICAgICAgICAgICAgfCAgIDUgKwog Y29udHJpYi90ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyAgICAgICAgIHwgIDQ4ICsrKysr KysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSAgICAgICAgICB8ICAgMSAr CiAuLi4vYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgICAgICAgfCAgNTIgKysr KysrKwogc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkICAgICAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYyAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlICAgICAgfCAgIDEgKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgIHwgIDg0ICsrKysr KysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwg IDQxICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMgICAg IHwgIDQ0ICsrKysrKwogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMgICAg ICAgIHwgIDI0ICsrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVp bGQgICB8ICAgMSArCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAg ICAgfCAxMjcgKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2Mu YyAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0Lmgg ICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQg ICAgICAgICAgICAgICB8ICAgOCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oICAgICAgICAgIHwgIDYwICsrKysrKysrKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVj b2RlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1 dF9wbHVnaW4uaCAgICAgICB8ICAxNCArKwogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRl cmJ1ZmZlci5oICAgICAgIHwgIDI3ICsrKysKIDIxIGZpbGVzIGNoYW5nZWQsIDU2OCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xv Z2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNv ZGluZy9leHBlY3RlZC9kZGwub3V0IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2Rk bC5vdXQKaW5kZXggOWEyOGI1ZGRjNS4uMGY1MWYyYjQxYSAxMDA2NDQKLS0tIGEvY29udHJpYi90 ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2RkbC5vdXQKKysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5n L2V4cGVjdGVkL2RkbC5vdXQKQEAgLTgzMSw2ICs4MzEsMzIgQEAgU0VMRUNUIGRhdGEgRlJPTSBw Z19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEws ICdpbmMKIC0tLS0tLQogKDAgcm93cykKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dp Y2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CisgP2Nv bHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1zZzEKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNn MicgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cyJywgMTYzOTQsIDEs ICd7ImZtdCI6ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0 aG9yaXphdGlvbn1zIiwgIm5hbWUiOiAiZm9vIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJB VVRIT1JJWkFUSU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAi YXV0aG9yaXphdGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9Jyk7CisgP2Nv bHVtbj8gCistLS0tLS0tLS0tCisgZGRsIG1zZzIKKygxIHJvdykKKworU0VMRUNUICdkZGwgbXNn MycgRlJPTSBwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2czJywgMTYzOTQsIDEs ICd7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31z ICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJs ZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1z ICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJmb28iLCAic2NoZW1h bmFtZSI6ICJlbGVtZW50X3Rlc3QifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7 cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9j b21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50 IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6 ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3Bh Y2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJ VEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElP TiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVs bH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6 ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RP UkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9u dWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0 eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFs c2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVm YXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjog IiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJj b2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04g JXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9t ZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxX QVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX19Jyk7CisgP2NvbHVtbj8gCistLS0tLS0tLS0t CisgZGRsIG1zZzMKKygxIHJvdykKKworU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3Rf Z2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMn LCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 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 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2cxLCBy ZWxpZDogMTYzOTQsIGNtZHR5cGU6IERyb3Agc3RhcnQsIHN6OiA0IGNvbnRlbnQ6bXNnMQorIG1l c3NhZ2U6IHByZWZpeDogZGRsIG1zZzIsIHJlbGlkOiAxNjM5NCwgY21kdHlwZTogRHJvcCBzdGFy dCwgc3o6IDIxNyBjb250ZW50OnsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3Rz fXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXph dGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJw cmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlz dHMiOiAiIn0KKyBtZXNzYWdlOiBwcmVmaXg6IGRkbCBtc2czLCByZWxpZDogMTYzOTQsIGNtZHR5 cGU6IERyb3Agc3RhcnQsIHN6OiAxMzk2IGNvbnRlbnQ6eyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lz dGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxl bWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtw YXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRp dHkiOiB7Im9iam5hbWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJp bmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6 IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlU ICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVl IjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9 SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6 ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJw YXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJl c2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10 IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19t ZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3si Zm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21w cmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJh dGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6 IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwg InByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAi Q09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21w cmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRf Y29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9 fV19fQorKDMgcm93cykKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVz c2lvbl9zbG90Jyk7CiAgcGdfZHJvcF9yZXBsaWNhdGlvbl9zbG90IAogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNx bCBiL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcWwvZGRsLnNxbAppbmRleCA0Zjc2YmVkNzJjLi4x ZWE1YTRiMjcxIDEwMDY0NAotLS0gYS9jb250cmliL3Rlc3RfZGVjb2Rpbmcvc3FsL2RkbC5zcWwK KysrIGIvY29udHJpYi90ZXN0X2RlY29kaW5nL3NxbC9kZGwuc3FsCkBAIC00MzEsNiArNDMxLDEx IEBAIFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdyZWdyZXNz aW9uX3Nsb3QnLCBOVUxMLCBOVUxMLCAnaW5jCiAtLSBkb25lLCBmcmVlIGxvZ2ljYWwgcmVwbGlj YXRpb24gc2xvdAogU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMo J3JlZ3Jlc3Npb25fc2xvdCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lw LWVtcHR5LXhhY3RzJywgJzEnKTsKIAorU0VMRUNUICdkZGwgbXNnMScgRlJPTSBwZ19sb2dpY2Fs X2VtaXRfZGRsX21lc3NhZ2UoJ2RkbCBtc2cxJywgMTYzOTQsIDEsICdtc2cxJyk7CitTRUxFQ1Qg J2RkbCBtc2cyJyBGUk9NIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZSgnZGRsIG1zZzInLCAx NjM5NCwgMSwgJ3siZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1l fUkgJXthdXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsi Zm10IjogIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0n KTsKK1NFTEVDVCAnZGRsIG1zZzMnIEZST00gcGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdlKCdk ZGwgbXNnMycsIDE2Mzk0LCAxLCAneyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJM RSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykg JXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9 cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAiZm9vIiwgInNjaGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsi Zm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVz ZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0 X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0 YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50 IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9j bGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnki OiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNl LCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7 YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxs fSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjog IiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjog InBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBm YWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJw cmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsi Zm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJm bXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19fScpOworU0VM RUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ3JlZ3Jlc3Npb25fc2xv dCcsIE5VTEwsIE5VTEwsICdpbmNsdWRlLXhpZHMnLCAnMCcsICdza2lwLWVtcHR5LXhhY3RzJywg JzEnKTsKKwogU0VMRUNUIHBnX2Ryb3BfcmVwbGljYXRpb25fc2xvdCgncmVncmVzc2lvbl9zbG90 Jyk7CiAKIC8qIGNoZWNrIHRoYXQgdGhlIHNsb3QgaXMgZ29uZSAqLwpkaWZmIC0tZ2l0IGEvY29u dHJpYi90ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYyBiL2NvbnRyaWIvdGVzdF9kZWNvZGlu Zy90ZXN0X2RlY29kaW5nLmMKaW5kZXggYjdlNjA0ODY0Ny4uZTk2N2UzYmZhNSAxMDA2NDQKLS0t IGEvY29udHJpYi90ZXN0X2RlY29kaW5nL3Rlc3RfZGVjb2RpbmcuYworKysgYi9jb250cmliL3Rl c3RfZGVjb2RpbmcvdGVzdF9kZWNvZGluZy5jCkBAIC0xNCw5ICsxNCwxMSBAQAogCiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0 aW9uL29yaWdpbi5oIgogCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUg InV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVk ZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTcyLDYgKzc0LDEyIEBAIHN0YXRpYyB2b2lkIHBnX2Rl Y29kZV9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJICBib29sIHRyYW5zYWN0 aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgIFNpemUgc3osIGNvbnN0IGNoYXIg Km1lc3NhZ2UpOworc3RhdGljIHZvaWQgcGdfZGVjb2RlX2RkbF9tZXNzYWdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJ CQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpwcmVm aXgsIE9pZCByZWxpZCwKKwkJCQkJCQkJICBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJ CQkJCQkJCSAgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ19k ZWNvZGVfZmlsdGVyX3ByZXBhcmUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJ CQkJIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmdpZCk7CkBAIC0x MzUsNiArMTQzLDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQbHVnaW5DYWxsYmFj a3MgKmNiKQogCWNiLT5maWx0ZXJfYnlfb3JpZ2luX2NiID0gcGdfZGVjb2RlX2ZpbHRlcjsKIAlj Yi0+c2h1dGRvd25fY2IgPSBwZ19kZWNvZGVfc2h1dGRvd247CiAJY2ItPm1lc3NhZ2VfY2IgPSBw Z19kZWNvZGVfbWVzc2FnZTsKKwljYi0+ZGRsX2NiID0gcGdfZGVjb2RlX2RkbF9tZXNzYWdlOwog CWNiLT5maWx0ZXJfcHJlcGFyZV9jYiA9IHBnX2RlY29kZV9maWx0ZXJfcHJlcGFyZTsKIAljYi0+ YmVnaW5fcHJlcGFyZV9jYiA9IHBnX2RlY29kZV9iZWdpbl9wcmVwYXJlX3R4bjsKIAljYi0+cHJl cGFyZV9jYiA9IHBnX2RlY29kZV9wcmVwYXJlX3R4bjsKQEAgLTc1MCw2ICs3NTksNDUgQEAgcGdf ZGVjb2RlX21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCU91dHB1dFBsdWdp bldyaXRlKGN0eCwgdHJ1ZSk7CiB9CiAKK3N0YXRpYyB2b2lkCitwZ19kZWNvZGVfZGRsX21lc3Nh Z2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVs aWQsCisJCQkJCSAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLCBTaXplIHN6LCBjb25zdCBj aGFyICptZXNzYWdlKQoreworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwor CWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJtZXNzYWdlOiBwcmVmaXg6ICVzLCByZWxpZDog JXUsICIsCisJCQkJCSBwcmVmaXgsIHJlbGlkKTsKKworCXN3aXRjaChjbWR0eXBlKQorCXsKKwlj YXNlIERDVF9TaW1wbGVDbWQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBl OiBTaW1wbGUsICIpOworCQlicmVhazsKKwljYXNlIERDVF9UYWJsZURyb3BTdGFydDoKKwkJYXBw ZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5cGU6IERyb3Agc3RhcnQsICIpOworCQlicmVh azsKKwljYXNlIERDVF9UYWJsZURyb3BFbmQ6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQs ICJjbWR0eXBlOiBEcm9wIGVuZCwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX1RhYmxlQWx0ZXI6 CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBBbHRlciB0YWJsZSwgIik7 CisJCWJyZWFrOworCWNhc2UgRENUX09iamVjdENyZWF0ZToKKwkJYXBwZW5kU3RyaW5nSW5mbyhj dHgtPm91dCwgImNtZHR5cGU6IENyZWF0ZSwgIik7CisJCWJyZWFrOworCWNhc2UgRENUX09iamVj dERyb3A6CisJCWFwcGVuZFN0cmluZ0luZm8oY3R4LT5vdXQsICJjbWR0eXBlOiBEcm9wLCAiKTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXBwZW5kU3RyaW5nSW5mbyhjdHgtPm91dCwgImNtZHR5 cGU6IEludmFsaWQsICIpOworCQlicmVhazsKKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvKGN0eC0+ b3V0LCAic3o6ICV6dSBjb250ZW50OiIsIHN6KTsKKwlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGN0 eC0+b3V0LCBtZXNzYWdlLCBzeik7CisJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKK30K Kwogc3RhdGljIHZvaWQKIHBnX2RlY29kZV9zdHJlYW1fc3RhcnQoTG9naWNhbERlY29kaW5nQ29u dGV4dCAqY3R4LAogCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uMmZmMDFlNjliZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBPQkpTID0gXAogCWdp c3RkZXNjLm8gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8gXAorCWxvZ2ljYWxkZGxtc2dk ZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNjLm8gXAogCW14YWN0ZGVzYy5vIFwKIAluYnRkZXNjLm8g XApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dk ZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNWU5MzBjOTBjCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNj LmMKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogbG9naWNhbGRk bG1zZ2Rlc2MuYworICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGluZXMgZm9yIHJlcGxpY2F0aW9u L2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDE1 LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoKKyAqIElE RU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRs bXNnZGVzYy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorCit2b2lkCitsb2dp Y2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQor eworCWNoYXIJICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29yZCk7CisJdWludDgJCWluZm8g PSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyA9 PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4bF9sb2dpY2FsX2RkbF9tZXNzYWdl ICp4bHJlYyA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJlYzsKKwkJY2hhcgkgICAqcHJl Zml4ID0geGxyZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3NhZ2UgPSB4bHJlYy0+bWVzc2Fn ZSArIHhscmVjLT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2VwID0gIiI7CisKKwkJQXNzZXJ0 KHByZWZpeFt4bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcpOworCisJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAicHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5dGVzKTogIiwKKwkJCQkJCSBw cmVmaXgsIHhscmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInJl bGlkICV1IGNtZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVjLT5jbWR0eXBlKTsKKwkJLyog V3JpdGUgbWVzc2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhleCBieXRlcyAqLworCQlmb3Ig KGludCBjbnQgPSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXplOyBjbnQrKykKKwkJeworCQkJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1bnNpZ25lZCBjaGFyKSBtZXNz YWdlW2NudF0pOworCQkJc2VwID0gIiAiOworCQl9CisJfQorfQorCitjb25zdCBjaGFyICoKK2xv Z2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbykKK3sKKwlpZiAoKGluZm8gJiB+WExSX0lO Rk9fTUFTSykgPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQorCQlyZXR1cm4gIkRETCI7CisK KwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZApp bmRleCAxNjZjZWU2N2I2Li43ODFlMmQ3NzEzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L21lc29uLmJ1aWxkCkBAIC0xMSw2ICsxMSw3IEBAIHJtZ3JfZGVzY19zb3VyY2VzID0gZmlsZXMo CiAgICdnaXN0ZGVzYy5jJywKICAgJ2hhc2hkZXNjLmMnLAogICAnaGVhcGRlc2MuYycsCisgICds b2dpY2FsZGRsbXNnZGVzYy5jJywKICAgJ2xvZ2ljYWxtc2dkZXNjLmMnLAogICAnbXhhY3RkZXNj LmMnLAogICAnbmJ0ZGVzYy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3JtZ3IuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA3ZDY3 ZWRhNWY3Li42NzhlODFhZTAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9ybWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2 ICsyNyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAj aW5jbHVkZSAicmVwbGljYXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVz c2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggMmRjMjVlMzdiYi4uZDM2ODBlOWJiNSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBA IG92ZXJyaWRlIENQUEZMQUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiAKIE9CSlMgPSBc CiAJYXBwbHlwYXJhbGxlbHdvcmtlci5vIFwKKwlkZGxtZXNzYWdlLm8gXAogCWRlY29kZS5vIFwK IAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RkbG1lc3NhZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5lMTFlNTZlNWEzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGxtZXNzYWdlLmMKQEAgLTAsMCArMSw4NCBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogZGRsbWVzc2FnZS5jCisgKgkgIExvZ2ljYWwgRERMIG1lc3NhZ2VzLgorICoKKyAq IENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIE5PVEVTCisgKgorICogTG9naWNhbCBEREwgbWVzc2Fn ZXMgYWxsb3cgWExPRyBsb2dnaW5nIG9mIERETCBjb21tYW5kIHN0cmluZ3MgdGhhdAorICogZ2V0 IHBhc3NlZCB0byB0aGUgbG9naWNhbCBkZWNvZGluZyBwbHVnaW4uIEluIG5vcm1hbCBYTE9HIHBy b2Nlc3NpbmcgdGhleQorICogYXJlIHNhbWUgYXMgTk9PUC4KKyAqCisgKiBVbmxpa2UgZ2VuZXJp YyBsb2dpY2FsIG1lc3NhZ2VzLCB0aGVzZSBEREwgbWVzc2FnZXMgaGF2ZSBvbmx5IHRyYW5zYWN0 aW9uYWwKKyAqIG1vZGUuIE5vdGUgYnkgZGVmYXVsdCBERExzIGluIFBvc3RncmVTUUwgYXJlIHRy YW5zYWN0aW9uYWwuCisgKgorICogVGhlc2UgbWVzc2FnZXMgYXJlIHBhcnQgb2YgY3VycmVudCB0 cmFuc2FjdGlvbiBhbmQgd2lsbCBiZSBzZW50IHRvCisgKiBkZWNvZGluZyBwbHVnaW4gdXNpbmcg aW4gYSBzYW1lIHdheSBhcyBETUwgb3BlcmF0aW9ucy4KKyAqCisgKiBFdmVyeSBtZXNzYWdlIGNh cnJpZXMgcHJlZml4IHRvIGF2b2lkIGNvbmZsaWN0cyBiZXR3ZWVuIGRpZmZlcmVudCBkZWNvZGlu ZworICogcGx1Z2lucy4gVGhlIHBsdWdpbiBhdXRob3JzIG11c3QgdGFrZSBleHRyYSBjYXJlIHRv IHVzZSB1bmlxdWUgcHJlZml4LAorICogZ29vZCBvcHRpb25zIHNlZW1zIHRvIGJlIGZvciBleGFt cGxlIHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLgorICoKKyAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNz L3hhY3QuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ2luc2VydC5oIgorI2luY2x1ZGUgImNhdGFs b2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMv ZXhlY25vZGVzLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbC5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgor CisvKgorICogV3JpdGUgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSBpbnRvIFhMb2cuCisg Ki8KK1hMb2dSZWNQdHIKK0xvZ0xvZ2ljYWxERExNZXNzYWdlKGNvbnN0IGNoYXIgKnByZWZpeCwg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSBjb25zdCBjaGFy ICptZXNzYWdlLCBzaXplX3Qgc2l6ZSkKK3sKKwl4bF9sb2dpY2FsX2RkbF9tZXNzYWdlIHhscmVj OworCisJIC8qIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHJhbnNhY3Rpb24gaWQuICovCisJQXNz ZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKwlHZXRDdXJyZW50VHJhbnNhY3Rpb25JZCgpOwor CisJeGxyZWMuZGJJZCA9IE15RGF0YWJhc2VJZDsKKwkvKiBUcmFpbGluZyB6ZXJvIGlzIGNyaXRp Y2FsOyBzZWUgbG9naWNhbGRkbG1zZ19kZXNjICovCisJeGxyZWMucHJlZml4X3NpemUgPSBzdHJs ZW4ocHJlZml4KSArIDE7CisJeGxyZWMubWVzc2FnZV9zaXplID0gc2l6ZTsKKwl4bHJlYy5yZWxp ZCA9IHJlbGlkOworCXhscmVjLmNtZHR5cGUgPSBjbWR0eXBlOworCisJWExvZ0JlZ2luSW5zZXJ0 KCk7CisJWExvZ1JlZ2lzdGVyRGF0YSgoY2hhciAqKSAmeGxyZWMsIFNpemVPZkxvZ2ljYWxERExN ZXNzYWdlKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBwcmVmaXgpLCB4 bHJlYy5wcmVmaXhfc2l6ZSk7CisJWExvZ1JlZ2lzdGVyRGF0YSh1bmNvbnN0aWZ5KGNoYXIgKiwg bWVzc2FnZSksIHNpemUpOworCisJLyogQWxsb3cgb3JpZ2luIGZpbHRlcmluZyAqLworCVhMb2dT ZXRSZWNvcmRGbGFncyhYTE9HX0lOQ0xVREVfT1JJR0lOKTsKKworCXJldHVybiBYTG9nSW5zZXJ0 KFJNX0xPR0lDQUxERExNU0dfSUQsIFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSk7Cit9CisKKy8q CisgKiBSZWRvIGlzIGJhc2ljYWxseSBqdXN0IG5vb3AgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgZGRs IG1lc3NhZ2VzLgorICovCit2b2lkCitsb2dpY2FsZGRsbXNnX3JlZG8oWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpCit7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhM Ul9JTkZPX01BU0s7CisKKwlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJ CWVsb2coUEFOSUMsICJsb2dpY2FsZGRsbXNnX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGlu Zm8pOworCisJLyogVGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIGZvciBsb2dpY2FsIGRlY29kaW5n LCBzZWUgZGVjb2RlLmMuICovCit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNv ZGUuYwppbmRleCA4ZmU3YmI2NWYxLi5jNjE1YTIzZmU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGVjb2RlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mv eGxvZ3V0aWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vZGVjb2RlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlv bi9tZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vb3JpZ2luLmgiCkBAIC02MTMsNiAr NjE0LDQ2IEBAIGxvZ2ljYWxtc2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg WExvZ1JlY29yZEJ1ZmZlciAqYnVmKQogCQkJCQkJCSAgbWVzc2FnZS0+bWVzc2FnZSArIG1lc3Nh Z2UtPnByZWZpeF9zaXplKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBybWdyIExPR0lDQUxERExNU0df SUQgcmVjb3JkcyBmb3IgRGVjb2RlUmVjb3JkSW50b1Jlb3JkZXJCdWZmZXIoKS4KKyAqLwordm9p ZAorbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYpCit7CisJU25hcEJ1aWxkICAqYnVpbGRlciA9IGN0eC0+c25hcHNob3Rf YnVpbGRlcjsKKwlYTG9nUmVhZGVyU3RhdGUgKnIgPSBidWYtPnJlY29yZDsKKwlUcmFuc2FjdGlv bklkIHhpZCA9IFhMb2dSZWNHZXRYaWQocik7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5m byhyKSAmIH5YTFJfSU5GT19NQVNLOworCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNH ZXRPcmlnaW4ocik7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqbWVzc2FnZTsKKworCWlmIChp bmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhFUlJPUiwgInVuZXhwZWN0 ZWQgUk1fTE9HSUNBTERETE1TR19JRCByZWNvcmQgdHlwZTogJXUiLCBpbmZvKTsKKworCVJlb3Jk ZXJCdWZmZXJQcm9jZXNzWGlkKGN0eC0+cmVvcmRlciwgWExvZ1JlY0dldFhpZChyKSwgYnVmLT5v cmlncHRyKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBzbmFwc2hvdCBvciB3ZSBhcmUg anVzdCBmYXN0LWZvcndhcmRpbmcsIHRoZXJlIGlzIG5vCisJICogcG9pbnQgaW4gZGVjb2Rpbmcg ZGRsIG1lc3NhZ2VzLgorCSAqLworCWlmIChTbmFwQnVpbGRDdXJyZW50U3RhdGUoYnVpbGRlcikg PCBTTkFQQlVJTERfRlVMTF9TTkFQU0hPVCB8fAorCQljdHgtPmZhc3RfZm9yd2FyZCkKKwkJcmV0 dXJuOworCisJbWVzc2FnZSA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIFhMb2dSZWNHZXRE YXRhKHIpOworCisJaWYgKG1lc3NhZ2UtPmRiSWQgIT0gY3R4LT5zbG90LT5kYXRhLmRhdGFiYXNl IHx8CisJCUZpbHRlckJ5T3JpZ2luKGN0eCwgb3JpZ2luX2lkKSkKKwkJcmV0dXJuOworCisJaWYg KFNuYXBCdWlsZFByb2Nlc3NDaGFuZ2UoYnVpbGRlciwgeGlkLCBidWYtPm9yaWdwdHIpKQorCQlS ZW9yZGVyQnVmZmVyUXVldWVERExNZXNzYWdlKGN0eC0+cmVvcmRlciwgeGlkLCBidWYtPmVuZHB0 ciwKKwkJCQkJCQkJCSBtZXNzYWdlLT5tZXNzYWdlLCAvKiBmaXJzdCBwYXJ0IG9mIG1lc3NhZ2Ug aXMgcHJlZml4ICovCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZV9zaXplLAorCQkJCQkJCQkJ IG1lc3NhZ2UtPm1lc3NhZ2UgKyBtZXNzYWdlLT5wcmVmaXhfc2l6ZSwKKwkJCQkJCQkJCSBtZXNz YWdlLT5yZWxpZCwgbWVzc2FnZS0+Y21kdHlwZSk7Cit9CisKIC8qCiAgKiBDb25zb2xpZGF0ZWQg Y29tbWl0IHJlY29yZCBoYW5kbGluZyBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQgZm9ybSBvZiBjb21t aXQKICAqIHJlY29yZHMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xvZ2ljYWwuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5j CmluZGV4IGMzZWM5N2EwYTYuLjM5ZTY4NjEyMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbG9naWNhbC5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiZm1nci5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInJl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24v b3JpZ2luLmgiCkBAIC03Myw2ICs3NCwxMCBAQCBzdGF0aWMgdm9pZCB0cnVuY2F0ZV9jYl93cmFw cGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiBzdGF0aWMg dm9pZCBtZXNzYWdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZm ZXJUWE4gKnR4biwKIAkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLCBib29sIHRyYW5z YWN0aW9uYWwsCiAJCQkJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6 ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBkZGxfY2Jfd3JhcHBlcihSZW9y ZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhMb2dS ZWNQdHIgbWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVs aWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vf c2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFja3MgKi8K IHN0YXRpYyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCkBAIC0yMjMsNiArMjI4LDcgQEAgU3RhcnR1cERlY29k aW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5h cHBseV90cnVuY2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5jb21t aXQgPSBjb21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBtZXNzYWdl X2NiX3dyYXBwZXI7CisJY3R4LT5yZW9yZGVyLT5kZGwgPSBkZGxfY2Jfd3JhcHBlcjsKIAogCS8q CiAJICogVG8gc3VwcG9ydCBzdHJlYW1pbmcsIHdlIHJlcXVpcmUgc3RhcnQvc3RvcC9hYm9ydC9j b21taXQvY2hhbmdlCkBAIC0xMjMzLDYgKzEyMzksNDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4 dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitzdGF0aWMgdm9pZAorZGRsX2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwg T2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNz YWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxi YWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlB c3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCWlmIChjdHgtPmNhbGxiYWNrcy5kZGxfY2Ig PT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVy cm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tf bmFtZSA9ICJkZGwiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVy cmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJj YWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBl cnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7 CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsK KwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0 aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxfY2Io Y3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgsIHJlbGlkLCBjbWR0eXBlLAorCQkJCQkJCQkg bWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFj ayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91czsKK30KKwog c3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hl LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGZpcnN0X2xzbikKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMg Yi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWxmdW5jcy5jCmluZGV4IGZh MWI2NDFhMmIuLjkyZjVmOTM1N2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvbG9naWNhbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsZnVuY3MuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIm5vZGVzL21h a2VmdW5jcy5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgi CiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQu aCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtMzg4LDMgKzM4OSwyNiBAQCBwZ19sb2dp Y2FsX2VtaXRfbWVzc2FnZV90ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJLyogYnl0ZWEgYW5kIHRl eHQgYXJlIGNvbXBhdGlibGUgKi8KIAlyZXR1cm4gcGdfbG9naWNhbF9lbWl0X21lc3NhZ2VfYnl0 ZWEoZmNpbmZvKTsKIH0KKworLyoKKyAqIFNRTCBmdW5jdGlvbiBmb3Igd3JpdGluZyBsb2dpY2Fs IGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gV0FMLgorICovCitEYXR1bQorcGdfbG9naWNhbF9l bWl0X2RkbF9tZXNzYWdlX2J5dGVhKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJY2hhcgkgICAqcHJl Zml4ID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKwlPaWQJCQlyZWxp ZCA9IFBHX0dFVEFSR19PSUQoMSk7CisJRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlID0gUEdf R0VUQVJHX0lOVDE2KDIpOworCWNoYXIJICAgKmRhdGEgPSB0ZXh0X3RvX2NzdHJpbmcoUEdfR0VU QVJHX1RFWFRfUFAoMykpOworCVhMb2dSZWNQdHIJbHNuOworCisJbHNuID0gTG9nTG9naWNhbERE TE1lc3NhZ2UocHJlZml4LCByZWxpZCwgY21kdHlwZSwgZGF0YSwgc3RybGVuKGRhdGEpKTsKKwlQ R19SRVRVUk5fTFNOKGxzbik7Cit9CisKK0RhdHVtCitwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3Nh Z2VfdGV4dChQR19GVU5DVElPTl9BUkdTKQoreworCS8qIGJ5dGVhIGFuZCB0ZXh0IGFyZSBjb21w YXRpYmxlICovCisJcmV0dXJuIHBnX2xvZ2ljYWxfZW1pdF9kZGxfbWVzc2FnZV9ieXRlYShmY2lu Zm8pOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNv bi5idWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5k ZXggZDQ4Y2Q0YzU5MC4uOTljNjA4ZDAzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL21lc29uLmJ1aWxkCkBAIC0yLDYgKzIsNyBAQAogCiBiYWNrZW5kX3NvdXJjZXMgKz0g ZmlsZXMoCiAgICdhcHBseXBhcmFsbGVsd29ya2VyLmMnLAorICAnZGRsbWVzc2FnZS5jJywKICAg J2RlY29kZS5jJywKICAgJ2xhdW5jaGVyLmMnLAogICAnbG9naWNhbC5jJywKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggMmQxN2M1NTFh OC4uODExNzM5YjU5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZW9yZGVyYnVmZmVyLmMKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVh cC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dp Y2FsLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL3Nsb3QuaCIKQEAgLTUxNiw2ICs1MTcsMTQgQEAgUmVvcmRlckJ1ZmZlclJl dHVybkNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdl LAogCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEu bXNnLm1lc3NhZ2UgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hB TkdFX0RETDoKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCAhPSBOVUxMKQorCQkJCXBm cmVlKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4 ID0gTlVMTDsKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlw ZnJlZShjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNz YWdlID0gTlVMTDsKKwkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZB TElEQVRJT046CiAJCQlpZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJ cGZyZWUoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAtOTA0LDYgKzkxMywz NiBAQCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2Fj dGlvbklkIHhpZCwKIAl9CiB9CiAKKy8qCisgKiBBIHRyYW5zYWN0aW9uYWwgRERMIG1lc3NhZ2Ug aXMgcXVldWVkIHRvIGJlIHByb2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAqLwordm9pZAorUmVvcmRl ckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4 aWQsCisJCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJ IFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJCQkJCSBPaWQgcmVs aWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNv bnRleHQ7CisJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJQXNzZXJ0KFRyYW5zYWN0 aW9uSWRJc1ZhbGlkKHhpZCkpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhyYi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsK KwljaGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw7CisJY2hhbmdlLT5k YXRhLmRkbC5wcmVmaXggPSBwc3RyZHVwKHByZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbC5yZWxp ZCA9IHJlbGlkOworCWNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdl LT5kYXRhLmRkbC5tZXNzYWdlX3NpemUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRk bC5tZXNzYWdlID0gcGFsbG9jKG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5k ZGwubWVzc2FnZSwgbWVzc2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1 ZUNoYW5nZShyYiwgeGlkLCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworfQorCiAvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlW ZXJpZnkgTFNOIG9yZGVyaW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVm ZmVyCkBAIC0yMDA2LDYgKzIwNDUsMjEgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9y ZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFuZ2UtPmRhdGEu bXNnLm1lc3NhZ2UpOwogfQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVm ZmVyUHJvY2Vzc1RYTiBmb3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0aWMg aW5saW5lIHZvaWQKK1Jlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAq cmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAq Y2hhbmdlLCBib29sIHN0cmVhbWluZykKK3sKKwlyYi0+ZGRsKHJiLCB0eG4sIGNoYW5nZS0+bHNu LAorCQkJY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgsCisJCQljaGFuZ2UtPmRhdGEuZGRsLnJlbGlk LAorCQkJY2hhbmdlLT5kYXRhLmRkbC5jbWR0eXBlLAorCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNz YWdlX3NpemUsCisJCQljaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworfQorCiAvKgogICogRnVu Y3Rpb24gdG8gc3RvcmUgdGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQgb2Yg dGhlIGN1cnJlbnQKICAqIHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3aGls ZSBzZW5kaW5nIHRoZSBuZXh0IHN0cmVhbS4KQEAgLTIzODgsNiArMjQ0MiwxMCBAQCBSZW9yZGVy QnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhu LAogCQkJCQlSZW9yZGVyQnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFt aW5nKTsKIAkJCQkJYnJlYWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6 CisJCQkJCVJlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJl YW1pbmcpOworCQkJCQlicmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lO VkFMSURBVElPTjoKIAkJCQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxv Y2FsbHkgKi8KIAkJCQkJUmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ ZGF0YS5pbnZhbC5uaW52YWxpZGF0aW9ucywKQEAgLTM4NDUsNiArMzkwMywzOSBAQCBSZW9yZGVy QnVmZmVyU2VyaWFsaXplQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCiAJCQkJCSAgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRh ICs9IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJ CWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRh OworCQkJCVNpemUJCXByZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4 KSArIDE7CisKKwkJCQlzeiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2Fn ZV9zaXplICsKKwkJCQkJc2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSAr IHNpemVvZihTaXplKTsKKwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3op OworCisJCQkJZGF0YSA9ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVm ZmVyRGlza0NoYW5nZSk7CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJv dmUgKi8KKwkJCQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1 ZjsKKworCQkJCS8qIHdyaXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGlu ZyB0aGUgc2l6ZSAqLworCQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXpl KSk7CisJCQkJZGF0YSArPSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2Ut PmRhdGEuZGRsLnJlbGlkLCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsK KwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwgc2l6ZW9mKERlcGFy c2VkQ29tbWFuZFR5cGUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShk YXRhLCBjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCwgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0g cHJlZml4X3NpemU7CisKKwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNp emUgKi8KKwkJCQltZW1jcHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLCBz aXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRh LCBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVz c2FnZV9zaXplKTsKKwkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplOwor CiAJCQkJYnJlYWs7CiAJCQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURB VElPTjoKQEAgLTQxNTksNiArNDI1MCwxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9y ZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCiAJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2Ut PmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSArCiAJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXpl KTsKIAorCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6 CisJCQl7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbC5w cmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbC5t ZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2Yo T2lkKSArIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKTsKKwogCQkJCWJyZWFrOwogCQkJfQog CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00NDM2LDYgKzQ1 MzYsMzMgQEAgUmVvcmRlckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3Np emUpOwogCQkJCWRhdGEgKz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQli cmVhazsKKwkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJ CVNpemUJCXByZWZpeF9zaXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1jcHko JnByZWZpeF9zaXplLCBkYXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNp emUpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9p ZCkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEu ZGRsLmNtZHR5cGUsIGRhdGEsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJCQkJZGF0 YSArPSBzaXplb2YoaW50KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE1lbW9yeUNv bnRleHRBbGxvYyhyYi0+Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2Ut PmRhdGEuZGRsLnByZWZpeCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2Ut PmRhdGEuZGRsLnByZWZpeFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0g cHJlZml4X3NpemU7CisKKwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZj aGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlk YXRhICs9IHNpemVvZihTaXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1v cnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdl LCBkYXRhLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0 YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwogCQkJfQog CQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVz Yy5jCmluZGV4IDZiOGMxN2JiNGMuLmRhZjE3MzAyNTIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf d2FsZHVtcC9ybWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCkBA IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMvZGJjb21tYW5kc194bG9nLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvc2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNw YWNlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNp bmNsdWRlICJybWdyZGVzYy5oIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3Js aXN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAppbmRleCA0NjNiY2I2N2M1Li5h YmNiZTk3NTkzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaApAQCAtNDcsMyArNDcsNCBAQCBQR19STUdS KFJNX0NPTU1JVF9UU19JRCwgIkNvbW1pdFRzIiwgY29tbWl0X3RzX3JlZG8sIGNvbW1pdF90c19k ZXNjLCBjb21taXRfdHNfaQogUEdfUk1HUihSTV9SRVBMT1JJR0lOX0lELCAiUmVwbGljYXRpb25P cmlnaW4iLCByZXBsb3JpZ2luX3JlZG8sIHJlcGxvcmlnaW5fZGVzYywgcmVwbG9yaWdpbl9pZGVu dGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKIFBHX1JNR1IoUk1fR0VORVJJQ19JRCwgIkdl bmVyaWMiLCBnZW5lcmljX3JlZG8sIGdlbmVyaWNfZGVzYywgZ2VuZXJpY19pZGVudGlmeSwgTlVM TCwgTlVMTCwgZ2VuZXJpY19tYXNrLCBOVUxMKQogUEdfUk1HUihSTV9MT0dJQ0FMTVNHX0lELCAi TG9naWNhbE1lc3NhZ2UiLCBsb2dpY2FsbXNnX3JlZG8sIGxvZ2ljYWxtc2dfZGVzYywgbG9naWNh bG1zZ19pZGVudGlmeSwgTlVMTCwgTlVMTCwgTlVMTCwgbG9naWNhbG1zZ19kZWNvZGUpCitQR19S TUdSKFJNX0xPR0lDQUxERExNU0dfSUQsICJMb2dpY2FsRERMTWVzc2FnZSIsIGxvZ2ljYWxkZGxt c2dfcmVkbywgbG9naWNhbGRkbG1zZ19kZXNjLCBsb2dpY2FsZGRsbXNnX2lkZW50aWZ5LCBOVUxM LCBOVUxMLCBOVUxMLCBsb2dpY2FsZGRsX2RlY29kZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0Cmlu ZGV4IGUwNGRlNTIxZTAuLjVjZDI2M2U4MzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAt MTEwNDQsNiArMTEwNDQsMTQgQEAKICAgcHJvbmFtZSA9PiAncGdfbG9naWNhbF9lbWl0X21lc3Nh Z2UnLCBwcm92b2xhdGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICd1JywKICAgcHJvcmV0dHlw ZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJ2Jvb2wgdGV4dCBieXRlYScsCiAgIHByb3Ny YyA9PiAncGdfbG9naWNhbF9lbWl0X21lc3NhZ2VfYnl0ZWEnIH0sCit7IG9pZCA9PiAnMzgxMycs IGRlc2NyID0+ICdlbWl0IGEgdGV4dHVhbCBsb2dpY2FsIGRlY29kaW5nIG1lc3NhZ2UnLAorICBw cm9uYW1lID0+ICdwZ19sb2dpY2FsX2VtaXRfZGRsX21lc3NhZ2UnLCBwcm92b2xhdGlsZSA9PiAn dicsIHByb3BhcmFsbGVsID0+ICd1JywKKyAgcHJvcmV0dHlwZSA9PiAncGdfbHNuJywgcHJvYXJn dHlwZXMgPT4gJ2Jvb2wgdGV4dCB0ZXh0JywKKyAgcHJvc3JjID0+ICdwZ19sb2dpY2FsX2VtaXRf ZGRsX21lc3NhZ2VfdGV4dCcgfSwKK3sgb2lkID0+ICczODE0JywgZGVzY3IgPT4gJ2VtaXQgYSBi aW5hcnkgbG9naWNhbCBkZWNvZGluZyBtZXNzYWdlJywKKyAgcHJvbmFtZSA9PiAncGdfbG9naWNh bF9lbWl0X2RkbF9tZXNzYWdlJywgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9PiAn dScsCisgIHByb3JldHR5cGUgPT4gJ3BnX2xzbicsIHByb2FyZ3R5cGVzID0+ICd0ZXh0IHJlZ2Ns YXNzIGludDQgdGV4dCcsCisgIHByb3NyYyA9PiAncGdfbG9naWNhbF9lbWl0X2RkbF9tZXNzYWdl X2J5dGVhJyB9LAogCiAjIGV2ZW50IHRyaWdnZXJzCiB7IG9pZCA9PiAnMzU2NicsIGRlc2NyID0+ ICdsaXN0IG9iamVjdHMgZHJvcHBlZCBieSB0aGUgY3VycmVudCBjb21tYW5kJywKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCBiL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi43N2RmNmVhMTFhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vZGRsbWVzc2FnZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog ZGRsbWVzc2FnZS5oCisgKgkgICBFeHBvcnRzIGZyb20gcmVwbGljYXRpb24vbG9naWNhbC9kZGxt ZXNzYWdlLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKgorICogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19MT0dJQ0FMX0RETF9NRVNT QUdFX0gKKyNkZWZpbmUgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisKKyNpbmNsdWRlICJhY2Nl c3MveGxvZy5oIgorI2luY2x1ZGUgImFjY2Vzcy94bG9nZGVmcy5oIgorI2luY2x1ZGUgImFjY2Vz cy94bG9ncmVhZGVyLmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKworCisvKgorICogU3Vw cG9ydCBmb3Iga2VlcGluZyB0cmFjayBvZiBkZXBhcnNlZCBjb21tYW5kcy4KKyAqLwordHlwZWRl ZiBlbnVtIERlcGFyc2VkQ29tbWFuZFR5cGUKK3sKKwlEQ1RfU2ltcGxlQ21kLAorCURDVF9UYWJs ZURyb3BTdGFydCwKKwlEQ1RfVGFibGVEcm9wRW5kLAorCURDVF9UYWJsZUFsdGVyLAorCURDVF9P YmplY3RDcmVhdGUsCisJRENUX09iamVjdERyb3AKK30gRGVwYXJzZWRDb21tYW5kVHlwZTsKKwor LyoKKyAqIEdlbmVyaWMgbG9naWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZSB3YWwgcmVjb3JkLgor ICovCit0eXBlZGVmIHN0cnVjdCB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlCit7CisJT2lkCQkJZGJJ ZDsJCQkvKiBkYXRhYmFzZSBPaWQgZW1pdHRlZCBmcm9tICovCisJU2l6ZQkJcHJlZml4X3NpemU7 CS8qIGxlbmd0aCBvZiBwcmVmaXggaW5jbHVkaW5nIG51bGwgdGVybWluYXRvciAqLworCU9pZAkJ CXJlbGlkOwkJCS8qIGlkIG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZTsJLyogdHlwZSBvZiBzcWwgY29tbWFuZCAqLworCVNpemUJCW1lc3NhZ2Vfc2l6ZTsJLyog c2l6ZSBvZiB0aGUgbWVzc2FnZSAqLworCisJLyoKKwkgKiBwYXlsb2FkLCBpbmNsdWRpbmcgbnVs bC10ZXJtaW5hdGVkIHByZWZpeCBvZiBsZW5ndGggcHJlZml4X3NpemUKKwkgKi8KKwljaGFyCQlt ZXNzYWdlW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07Cit9IHhsX2xvZ2ljYWxfZGRsX21lc3NhZ2U7 CisKKyNkZWZpbmUgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UJKG9mZnNldG9mKHhsX2xvZ2ljYWxf ZGRsX21lc3NhZ2UsIG1lc3NhZ2UpKQorCitleHRlcm4gWExvZ1JlY1B0ciBMb2dMb2dpY2FsRERM TWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkJICAgY29uc3QgY2hhciAqZGRsX21lc3NhZ2UsIHNpemVfdCBz aXplKTsKKworLyogUk1HUiBBUEkqLworI2RlZmluZSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UJ MHgwMAordm9pZAkJbG9naWNhbGRkbG1zZ19yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsK K3ZvaWQJCWxvZ2ljYWxkZGxtc2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRl ICpyZWNvcmQpOworY29uc3QgY2hhciAqbG9naWNhbGRkbG1zZ19pZGVudGlmeSh1aW50OCBpbmZv KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCmluZGV4IDE0ZmE5MjFhYjQuLmM5 YWM3MDhkMzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCisr KyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RlY29kZS5oCkBAIC0yNyw2ICsyNyw3IEBAIGV4 dGVybiB2b2lkIGhlYXAyX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dS ZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2Rp bmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CiBleHRlcm4gdm9pZCBzdGFu ZGJ5X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIg KmJ1Zik7CiBleHRlcm4gdm9pZCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250 ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1Zik7CitleHRlcm4gdm9pZCBsb2dpY2FsZGRs X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1 Zik7CiAKIGV4dGVybiB2b2lkIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJCSBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggMmQ4OWQyNjU4Ni4u NWVkNWU2YTdiYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3Bs dWdpbi5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAt OSw2ICs5LDcgQEAKICNpZm5kZWYgT1VUUFVUX1BMVUdJTl9ICiAjZGVmaW5lIE9VVFBVVF9QTFVH SU5fSAogCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKIAogc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQ7CkBAIC05MCw2ICs5MSwxOCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2Fn ZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQlTaXpl IG1lc3NhZ2Vfc2l6ZSwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsKIAorLyoKKyAq IENhbGxlZCBmb3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgorICovCit0eXBl ZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3NhZ2Vfc2l6ZSwK KwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyoKICAqIEZpbHRlciBjaGFu Z2VzIGJ5IG9yaWdpbi4KICAqLwpAQCAtMjIxLDYgKzIzNCw3IEBAIHR5cGVkZWYgc3RydWN0IE91 dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRydW5jYXRlX2Ni OwogCUxvZ2ljYWxEZWNvZGVDb21taXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERlY29kZU1lc3Nh Z2VDQiBtZXNzYWdlX2NiOworCUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRsX2NiOwogCUxv Z2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNh bERlY29kZVNodXRkb3duQ0Igc2h1dGRvd25fY2I7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaAppbmRleCAyMTVkMTQ5NGU5Li5lOTJiODE2ZTIwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVk ZSAibm9kZXMvbm9kZXMuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsY2FjaGUuaCIKQEAgLTY1LDYgKzY3LDcgQEAgdHlwZWRlZiBlbnVt IFJlb3JkZXJCdWZmZXJDaGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwK IAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9E RUxFVEUsCisJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0RETCwKIAlSRU9SREVSX0JVRkZFUl9DSEFO R0VfTUVTU0FHRSwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OLAogCVJFT1JE RVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzOSw2ICsxNDIsMTYgQEAg dHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAqbWVzc2FnZTsK IAkJfQkJCW1zZzsKIAorCQkvKiBEREwgKi8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnBy ZWZpeDsKKwkJCVNpemUJCW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlP aWQJCQlyZWxpZDsKKwkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJfQkJCWRkbDsK KwogCQkvKiBOZXcgc25hcHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBT SE9UICovCiAJCVNuYXBzaG90CXNuYXBzaG90OwogCkBAIC00NTIsNiArNDY1LDE2IEBAIHR5cGVk ZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJ CQkJCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hh ciAqbWVzc2FnZSk7CiAKKy8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlw ZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJi LAorCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9n UmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJ CQkJCQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBj bWR0eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAq bWVzc2FnZSk7CisKIC8qIGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBl ZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpy YiwKIAkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC01NzQsNiArNTk3LDcg QEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlUcnVuY2F0ZUNCIGFw cGx5X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7CiAJUmVvcmRlckJ1 ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IgZGRsOwog CiAJLyoKIAkgKiBDYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gc3RyZWFtaW5nIGEgdHJhbnNh Y3Rpb24gYXQgcHJlcGFyZSB0aW1lLgpAQCAtNjc4LDYgKzcwMiw5IEBAIGV4dGVybiB2b2lkIFJl b3JkZXJCdWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQg eGlkLAogCQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJ CSAgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNp emUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3Jk ZXJCdWZmZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBY TG9nUmVjUHRyIGxzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3Nh Z2Vfc2l6ZSwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1p dChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQ dHIgY29tbWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBj b21taXRfdGltZSwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24p OwotLSAKMi4zNC4xCgo= --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v77-0004-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69dg3 RnJvbSA3YjYxMGUwZjA3YWQyN2NiYmNkOWY0ZGNiZTZhZGQxNDE0MDBmODg4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzoyNzo1NCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDQvOF0gSW50cm9kdWNlIHRoZSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgdGVzdCBtb2R1 bGUuCgpUaGlzIHRlc3RpbmcgbW9kdWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZv dXIgdGVzdGluZyBnb2FscyBmb3IgdGhlIERETCBkZXBhcnNlcjoKMS4gVGVzdCB0aGF0IHRoZSBn ZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KMi4gVGVzdCB0 aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3Rz LgozLiBUZXN0IHRoYXQgdGhlIHJlLWZvcm1lZCBEREwgY29tbWFuZCBoYXMgdGhlIHNhbWUgZWZm ZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kIGJ5IGNvbXBhcmluZwogICB0aGUgcmVzdWx0cyBv ZiBwZ19kdW1wLCB1c2luZyB0aGUgU1FMIHRlc3RzIGluIDEgYW5kIDIuCjQuIFRlc3QgdGhhdCBu ZXcgRERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5n IGFuZCBkZXBhcmluZyBEREwgY29tbWFuZHMKICAgcmFuIGJ5IHBnX3JlZ3Jlc3MuCgoxIGFuZCAy IGlzIHRlc3RlZCB3aXRoIFNRTCB0ZXN0cywgYnkgcHJpbnRpbmcgdGhlIGRlcGFyc2VkIEpTT04g YmxvYiBhbmQgdGhlIHJlLWZvcm1lZCBjb21tYW5kLgoKR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRB UCBmcmFtZXdvcmsgaW4gdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAoKR29hbCA0IGlz IHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgYW5kIHBnX3JlZ3Jlc3MgaW4gMDAyX3JlZ3Jlc3Nf dGVzdHMucGwsIHRoZSBleGVjdXRpb24gaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVz ZSBpdCB3aWxsIGZhaWwgZHVlIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBh cnNlci4KLS0tCiBzcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3JlICAgICAgIHwg ICA0ICsKIC4uLi9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZSB8ICA0 NCArKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZCAgICAgICAgfCAg MjIgKysKIC4uLi9leHBlY3RlZC9hZ2dyZWdhdGUub3V0ICAgICAgICAgICAgICAgICAgICB8ICAg OCArCiAuLi4vZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQgICAgICAgICAgICAgfCAgIDYg KwogLi4uL2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0ICAgICAgICAgICAgICAgIHwgIDIyICsr CiAuLi4vZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dCAgICAgICAgICAgICAgICAgfCAgMzYgKysr CiAuLi4vZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgICAgICAgICAgICAgfCAgMTggKysK IC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgICAgICB8ICA0MiArKysr CiAuLi4vc3FsL2FnZ3JlZ2F0ZS5zcWwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKwog Li4uL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCAgICAgICAgICAgICAgICAgIHwgICA1ICsKIC4u Li9zcWwvY3JlYXRlX3NjaGVtYS5zcWwgICAgICAgICAgICAgICAgICAgICB8ICAxNiArKwogLi4u L3NxbC9jcmVhdGVfdGFibGUuc3FsICAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrCiAuLi4v c3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsICAgICAgICAgICAgICAgICAgfCAgMjAgKysKIC4uLi90 LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsICAgICAgICAgICB8IDE4MSArKysrKysrKysr KysrKysKIC4uLi90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsICAgICAgICAgICAgICAgICAgICB8IDIw NyArKysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5z cWwgICAgICAgICB8ICAgOSArCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMgICAgICAg ICAgICAgICAgfCAgNTkgKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJv bCAgICAgICAgICB8ICAgNCArCiAyMCBmaWxlcyBjaGFuZ2VkLCA3MjcgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzLy5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVk L2FnZ3JlZ2F0ZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dAogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4 cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL2V4cGVjdGVkL3Rlc3RfZGRsX2RlcGFyc2Uub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvYWdncmVnYXRlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9j cmVhdGVfc2NoZW1hLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3Rf ZGRsX2RlcGFyc2Uuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEu MC5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy5jb250cm9sCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmls ZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXggYzYyOWNiZTM4My4uYzI3MmM2NGEy MCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQorKysgYi9zcmMvdGVzdC9t b2R1bGVzL01ha2VmaWxlCkBAIC0xOCw2ICsxOCw3IEBAIFNVQkRJUlMgPSBcCiAJCSAgdGVzdF9j b3B5X2NhbGxiYWNrcyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAogCQkgIHRlc3RfZGRsX2Rl cGFyc2UgXAorCQkgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyBcCiAJCSAgdGVzdF9leHRlbnNp b25zIFwKIAkJICB0ZXN0X2dpbnBvc3RpbmdsaXN0IFwKIAkJICB0ZXN0X2ludGVnZXJzZXQgXApk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdp dGlnbm9yZSBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLy5naXRp Z25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNWRjYjNmZjk3Mgot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACisjIEdlbmVyYXRlZCBzdWJkaXJlY3Rvcmll cworL2xvZy8KKy9yZXN1bHRzLworL3RtcF9jaGVjay8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uNWQ1YTllODY1MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDQg QEAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIE1ha2VmaWxlIGZvciBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcworIworIyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyMKKyMgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZp bGUKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTU9EVUxFUyA9IHRlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcworUEdGSUxFREVTQyA9ICJ0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MgLSByZWdyZXNz aW9uIHRlc3RpbmcgZm9yIERETCBkZXBhcnNpbmciCisKK0VYVEVOU0lPTiA9IHRlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcworREFUQSA9IHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbAor CisjIHRlc3RfZGRsX2RlcGFyc2UgbXVzdCBiZSBmaXJzdAorUkVHUkVTUyA9IHRlc3RfZGRsX2Rl cGFyc2UgXAorCWNyZWF0ZV9leHRlbnNpb24gXAorCWNyZWF0ZV9zY2hlbWEgXAorCWNyZWF0ZV90 YWJsZSBcCisJYWdncmVnYXRlCisKK2V4cG9ydCBSRUdSRVNTCisKK0VYVFJBX0lOU1RBTEwgPSBj b250cmliL3BnX3N0YXRfc3RhdGVtZW50cworCitUQVBfVEVTVFMgPSAxCisKK2lmZGVmIFVTRV9Q R1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NPTkZJRykg LS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcwordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2lu Y2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bf c3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCitSRUdSRVNTX1NITElC PSQoYWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzJChETFNVRkZJWCkK K2V4cG9ydCBSRUdSRVNTX1NITElCCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uMTBmMGJkMTlhOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZApAQCAtMCwwICsxLDIyIEBACisjIFRl c3RpbmcgaGFybmVzcyBmb3IgRERMIGRlcGFyc2VyCisKKyMjIFRlc3RpbmcgZ29hbHMKKworRERM IERlcGFyc2VyIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGVuY29kZSB0aGUgb3JpZ2luYWwgRERM IGNvbW1hbmQgdG8gYSBKU09OIHN0cmluZywgdGhlbiBkZWNvZGUgaXQgdG8gYSBmdWxseSBzY2hl bWEtcXVhbGlmaWVkIERETCBjb21tYW5kIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGhhdmUgdGhlIHNh bWUgZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kLiBUaGlzIHRlc3RpbmcgbW9kdWxlIGFp bXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIgdGVzdGluZyBmb3IgdGhlIERETCBkZXBh cnNlcjoKKworMS4gVGVzdCB0aGF0IHRoZSBnZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4cGVjdGVk IHVzaW5nIFNRTCB0ZXN0cy4KKzIuIFRlc3QgdGhhdCB0aGUgcmUtZm9ybWVkIERETCBjb21tYW5k IGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KKzMuIFRlc3QgdGhhdCB0aGUgcmUtZm9ybWVk IERETCBjb21tYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIG9yaWdpbmFsIGNvbW1hbmQK KyAgIGJ5IGNvbXBhcmluZyB0aGUgcmVzdWx0cyBvZiBwZ19kdW1wLCB1c2luZyB0aGUgU1FMIHRl c3RzIGluIDEgYW5kIDIuCis0LiBUZXN0IHRoYXQgbmV3IERETCBzeW50YXggaXMgaGFuZGxlZCBi eSB0aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmluZyBhbmQgZGVwYXJpbmcKKyAgIERETCBjb21t YW5kcyByYW4gYnkgcGdfcmVncmVzcy4KKworMSBhbmQgMiBpcyB0ZXN0ZWQgd2l0aCBTUUwgdGVz dHMsIGJ5IG5vdGljaW5nIHRoZSBkZXBhcnNlZCBKU09OIGJsb2IgYW5kIHRoZSByZS1mb3JtZWQg Y29tbWFuZC4KKworR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgaW4gdC8wMDFf Y29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAorCitHb2FsIDQgaXMgdGVzdGVkIHdpdGggVEFQIGZy YW1ld29yayBhbmQgcGdfcmVncmVzcyBpbiAwMDJfcmVncmVzc190ZXN0cy5wbAorCisjIyBVc2Fn ZQorCitSdW4gYG1ha2UgY2hlY2tgLCBpdCB3aWxsIHJ1biB0aGUgU1FMIHRlc3RzIGZpcnN0LCB0 aGVuIGl0IHdpbGwgcnVuIHRoZSBUQVAgdGVzdHMuIFRoZSBleGVjdXRpb24gb2YgMDAyX3JlZ3Jl c3NfdGVzdHMucGwgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCB3aWxsIGZh aWwgZHVlIHRvIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNlci4KZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVj dGVkL2FnZ3JlZ2F0ZS5vdXQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLjFlMTlhN2NlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9hZ2dyZWdhdGUub3V0CkBAIC0wLDAg KzEsOCBAQAorQ1JFQVRFIEFHR1JFR0FURSBuZXdhdmcoaW50NCkgKAorICAgc2Z1bmMgPSBpbnQ0 X2F2Z19hY2N1bSwgc3R5cGUgPSBfaW50OCwKKyAgIGZpbmFsZnVuYyA9IGludDhfYXZnLAorICAg aW5pdGNvbmQxID0gJ3swLDB9JworKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10Ijog IkNSRUFURSBBR0dSRUdBVEUgJXtpZGVudGl0eX1EICgle3R5cGVzfXMpICgle2VsZW1zOiwgfXMp IiwgImVsZW1zIjogW3siZm10IjogIlNGVU5DPSV7cHJvY2VkdXJlfUQiLCAicHJvY2VkdXJlIjog eyJvYmpuYW1lIjogImludDRfYXZnX2FjY3VtIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9 fSwgeyJmbXQiOiAiU1RZUEU9JXt0eXBlfVQiLCAidHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBh cnJheSI6IHRydWUsICJ0eXBlbmFtZSI6ICJpbnQ4IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxv ZyJ9fSwgeyJmbXQiOiAiU1NQQUNFPSIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJGSU5B TEZVTkM9ICV7cHJvY2VkdXJlfUQiLCAicHJvY2VkdXJlIjogeyJvYmpuYW1lIjogImludDhfYXZn IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgeyJmbXQiOiAiRklOQUxGVU5DX0VYVFJB PSIsICJwcmVzZW50IjogZmFsc2V9LCB7ImZtdCI6ICJJTklUQ09ORD0gJXtpbml0dmFsfUwiLCAi aW5pdHZhbCI6ICJ7MCwwfSJ9LCB7ImZtdCI6ICJNU0ZVTkM9IiwgInByZXNlbnQiOiBmYWxzZX0s IHsiZm10IjogIk1TVFlQRT0iLCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiTVNTUEFDRT0i LCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiTUlOVkZVTkM9IiwgInByZXNlbnQiOiBmYWxz ZX0sIHsiZm10IjogIk1GSU5BTEZVTkM9IiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1G SU5BTEZVTkNfRVhUUkE9IiwgInByZXNlbnQiOiBmYWxzZX0sIHsiZm10IjogIk1JTklUQ09ORD0i LCAicHJlc2VudCI6IGZhbHNlfSwgeyJmbXQiOiAiSFlQT1RIRVRJQ0FMPSIsICJwcmVzZW50Ijog ZmFsc2V9LCB7ImZtdCI6ICJTT1JUT1A9IiwgInByZXNlbnQiOiBmYWxzZX1dLCAidHlwZXMiOiB7 ImZtdCI6ICIle2RpcmVjdDosIH1zIiwgImRpcmVjdCI6IFt7ImZtdCI6ICIle21vZGV9cyAle25h bWV9cyAle3R5cGV9VCIsICJtb2RlIjogIiIsICJuYW1lIjogIiIsICJ0eXBlIjogeyJ0eXBtb2Qi OiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUi OiAicGdfY2F0YWxvZyJ9fV19LCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAibmV3YXZnIiwgInNj aGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRF IEFHR1JFR0FURSBwdWJsaWMubmV3YXZnICggIHBnX2NhdGFsb2cuaW50NCkgKFNGVU5DPXBnX2Nh dGFsb2cuaW50NF9hdmdfYWNjdW0sIFNUWVBFPXBnX2NhdGFsb2cuaW50OFtdLCBGSU5BTEZVTkM9 IHBnX2NhdGFsb2cuaW50OF9hdmcsIElOSVRDT05EPSAnezAsMH0nKQorRFJPUCBBR0dSRUdBVEUg bmV3YXZnKGludDQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQgYi9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNmNjYzYyYmE5Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX2V4dGVuc2lvbi5vdXQKQEAgLTAsMCArMSw2IEBACistLS0KKy0tLSBD UkVBVEVfRVhURU5TSU9OCistLS0KK0NSRUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRz OworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIEVYVEVOU0lPTiAle2lm X25vdF9leGlzdHN9cyAle25hbWV9SSAle29wdGlvbnM6IH1zIiwgIm5hbWUiOiAicGdfc3RhdF9z dGF0ZW1lbnRzIiwgIm9wdGlvbnMiOiBbeyJmbXQiOiAiU0NIRU1BICV7c2NoZW1hfUkiLCAidHlw ZSI6ICJzY2hlbWEiLCAic2NoZW1hIjogInB1YmxpYyJ9XSwgImlmX25vdF9leGlzdHMiOiAiIn0K K05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgRVhURU5TSU9OICBwZ19zdGF0X3N0 YXRlbWVudHMgU0NIRU1BIHB1YmxpYwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1h Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xZTA5ZGE1MTcwCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvZXhwZWN0ZWQvY3JlYXRlX3NjaGVtYS5vdXQKQEAgLTAsMCArMSwyMiBAQAorLS0KKy0tIENS RUFURV9TQ0hFTUEKKy0tCitDUkVBVEUgU0NIRU1BIGZvbzsKK05PVElDRTogIGRlcGFyc2VkIGpz b246IHsiZm10IjogIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXth dXRob3JpemF0aW9ufXMiLCAibmFtZSI6ICJmb28iLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10Ijog IkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2Us ICJhdXRob3JpemF0aW9uX3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElD RTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BICBmb28gCitDUkVBVEUgU0NIRU1B IElGIE5PVCBFWElTVFMgYmFyOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JF QVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIs ICJuYW1lIjogImJhciIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAl e2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25f cm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICJJRiBOT1QgRVhJU1RTIn0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmFyIAorQ1JF QVRFIFNDSEVNQSBiYXo7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUg U0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7YXV0aG9yaXphdGlvbn1zIiwgIm5h bWUiOiAiYmF6IiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9OICV7YXV0 aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlvbl9yb2xl IjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFu ZDogQ1JFQVRFIFNDSEVNQSAgYmF6IAorLS0gV2lsbCBub3QgYmUgY3JlYXRlZCwgYW5kIHdpbGwg bm90IGJlIGhhbmRsZWQgYnkgdGhlCistLSBldmVudCB0cmlnZ2VyCitDUkVBVEUgU0NIRU1BIElG IE5PVCBFWElTVFMgYmF6OworTk9USUNFOiAgc2NoZW1hICJiYXoiIGFscmVhZHkgZXhpc3RzLCBz a2lwcGluZworQ1JFQVRFIFNDSEVNQSBlbGVtZW50X3Rlc3QKKyAgQ1JFQVRFIFRBQkxFIGZvbyAo aWQgaW50KQorTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAl e2lmX25vdF9leGlzdHN9cyAle25hbWV9SSAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImVs ZW1lbnRfdGVzdCIsICJhdXRob3JpemF0aW9uIjogeyJmbXQiOiAiQVVUSE9SSVpBVElPTiAle2F1 dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgImF1dGhvcml6YXRpb25fcm9s ZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1h bmQ6IENSRUFURSBTQ0hFTUEgIGVsZW1lbnRfdGVzdCAKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMg JXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxl c3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMg JXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImZvbyIsICJzY2hlbWFu YW1lIjogImVsZW1lbnRfdGVzdCJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtw YXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2Nv bW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQi OiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10Ijog IlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFj ZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lU SCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9O IEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxs fSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJw cmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjog IiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9S QUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251 bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5 cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxz ZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZh dWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAi IiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNv bHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAl e2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21l dGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdB WVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6 IENSRUFURSAgVEFCTEUgIGVsZW1lbnRfdGVzdC5mb28gKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9S QUdFIHBsYWluICAgICApICAgICAgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0IGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91 dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zZDAxYzNjNDA5Ci0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dApAQCAtMCwwICsxLDM2IEBACitDUkVBVEUgVEFCTEUg c2ltcGxlX3RhYmxlKAorICAgIGlkIGludCwKKyAgICBuYW1lIHZhcmNoYXIoNSkKKyk7CitOT1RJ Q0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxF ICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAl e2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1z ICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFt ZSI6ICJzaW1wbGVfdGFibGUiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjog eyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInBy ZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21t aXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwg InRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNl bnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRo X2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9i eSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFs c2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcg JXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51 bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtu YW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMg JXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1u fXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2Qi OiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUi OiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6 IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwg InByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjog eyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7 ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6 ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Np b259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9j b2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIig1KSIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidmFyY2hhciIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxU IiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQi OiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2No ZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21w cmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRf Y29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9 fV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLnNp bXBsZV90YWJsZSAoaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgICwgbmFtZSBw Z19jYXRhbG9nLiJ2YXJjaGFyIig1KSBTVE9SQUdFIGV4dGVuZGVkICBDT0xMQVRFIHBnX2NhdGFs b2cuImRlZmF1bHQiICAgKSAgICAgIAorLS0gVGVzdCBDUkVBVEUgSU5ERVggd2l0aCBhbiBJTkNM VURFIENMQVVTRQorQ1JFQVRFIFVOSVFVRSBJTkRFWCBjb3ZlcmluZ19pbmRleCBvbiBzaW1wbGVf dGFibGUgKGlkKSBJTkNMVURFIChuYW1lKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10 IjogIkNSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhp c3RzfXMgJXtuYW1lfUkgT04gJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAle2RlZmluaXRp b259cyAle3dpdGh9cyAle3RhYmxlc3BhY2V9cyAle3doZXJlX2NsYXVzZX1zIE5VTExTIERJU1RJ TkNUIiwgIm5hbWUiOiAiY292ZXJpbmdfaW5kZXgiLCAid2l0aCI6IHsiZm10IjogIldJVEgiLCAi cHJlc2VudCI6IGZhbHNlfSwgInRhYmxlIjogeyJvYmpuYW1lIjogInNpbXBsZV90YWJsZSIsICJz Y2hlbWFuYW1lIjogInB1YmxpYyJ9LCAidW5pcXVlIjogIlVOSVFVRSIsICJpbmRleF9hbSI6ICJi dHJlZSIsICJkZWZpbml0aW9uIjogIihpZCBwZ19jYXRhbG9nLmludDRfb3BzKSBJTkNMVURFIChu YW1lKSIsICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSIsICJwcmVzZW50IjogZmFs c2V9LCAiY29uY3VycmVudGx5IjogIiIsICJ3aGVyZV9jbGF1c2UiOiB7ImZtdCI6ICJXSEVSRSIs ICJwcmVzZW50IjogZmFsc2V9LCAiaWZfbm90X2V4aXN0cyI6ICIifQorTk9USUNFOiAgcmUtZm9y bWVkIGNvbW1hbmQ6IENSRUFURSBVTklRVUUgSU5ERVggICBjb3ZlcmluZ19pbmRleCBPTiBwdWJs aWMuc2ltcGxlX3RhYmxlIFVTSU5HIGJ0cmVlIChpZCBwZ19jYXRhbG9nLmludDRfb3BzKSBJTkNM VURFIChuYW1lKSAgICBOVUxMUyBESVNUSU5DVAorLS0gVGVzdCBUYWJsZUxpa2VDbGF1c2UgaXMg aGFuZGxlZCBwcm9wZXJseQorQ1JFQVRFIFRBQkxFIGN0bHQxIChhIHRleHQgQ0hFQ0sgKGxlbmd0 aChhKSA+IDIpIFBSSU1BUlkgS0VZLCBiIHRleHQpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjog eyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAl e2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVz cGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAl e3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiY3RsdDEiLCAic2NoZW1h bmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50 czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQi OiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFs c2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJM RVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBu dWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAi cHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAl e2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJh Y2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAi dGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAl e2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMg JXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJhIiwgInR5cGUiOiAi Y29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5 cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0Ijog eyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNv bGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6 ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAi ZXh0ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNz aW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51 bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAi cHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0Ug JXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1z ICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBlIjog ImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0 eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6 IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJj b2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUi OiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjog ImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVz c2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBu dWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwg InByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5p dGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfYV9jaGVjayIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAi Y29udHlwZSI6ICJjaGVjayIsICJkZWZpbml0aW9uIjogIkNIRUNLICgocGdfY2F0YWxvZy5sZW5n dGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAl e25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQxX3BrZXkiLCAidHlwZSI6ICJj b25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklN QVJZIEtFWSAoYSkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJM RSAgcHVibGljLmN0bHQxIChhIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVuZGVkICBDT0xM QVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4 dGVuZGVkICBDT0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0bHQx X2FfY2hlY2sgQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9n Lj4pIDIpKSwgQ09OU1RSQUlOVCBjdGx0MV9wa2V5IFBSSU1BUlkgS0VZIChhKSkgICAgICAKK05P VElDRTogIGRlcGFyc2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6 IDxOVUxMPgorQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGEgU0VUIFNUT1JBR0UgTUFJ TjsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7 aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMi OiBbeyJmbXQiOiAiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdl fXMiLCAidHlwZSI6ICJzZXQgc3RvcmFnZSIsICJjb2x1bW4iOiAiYSIsICJzdG9yYWdlIjogIm1h aW4ifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1 YmxpYyJ9fQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5j dGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBtYWluCitBTFRFUiBUQUJMRSBjdGx0MSBB TFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKK05PVElDRTogIGRlcGFyc2VkIGpz b246IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9 cyIsICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAidHlwZSI6ICJzZXQgc3RvcmFn ZSIsICJjb2x1bW4iOiAiYiIsICJzdG9yYWdlIjogImV4dGVybmFsIn1dLCAiaWRlbnRpdHkiOiB7 Im9iam5hbWUiOiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KK05PVElDRTogIHJl LWZvcm1lZCBjb21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1OIGIg U0VUIFNUT1JBR0UgZXh0ZXJuYWwKKy0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBo YW5kbGVkIGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04g S0VZIFJFRkVSRU5DRVMgc3ViY29tbWFuZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQ UklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10Ijog IkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0 eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAl e29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2Ns YXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFtZSI6 ICJwdWJsaWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1E KSIsICJwYXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZt dCI6ICJPTiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJv bl9jb21taXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNF ICV7dGFibGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwg InBlcnNpc3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2Vu dCI6IGZhbHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmlu aXRpb259cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3Nf bWV0aG9kIjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZh bHNlLCAiYWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVf ZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0 b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZh dWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVt biIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFt ZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10 IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRp b24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjog InBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxs fSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInBy ZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7 Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAl e2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6 ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAi dHlwZW5hbWUiOiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQi OiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAi Y29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1l IjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6 ICJleHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJl c3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjog bnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIs ICJwcmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmlu aXRpb259cyIsICJuYW1lIjogInByb2R1Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAi Y29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChpZCki fV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLnBy b2R1Y3QgKGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIG5hbWUgcGdfY2F0 YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIg ICAsIENPTlNUUkFJTlQgcHJvZHVjdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkpICAgICAgCitOT1RJ Q0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8 TlVMTD4KK0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJv ZHVjdF9pZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKTsKK05PVElDRTogIGRlcGFyc2Vk IGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhp c3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAl e3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0 aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm9yZGVycyIs ICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAo JXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9u X2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNl bnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10 IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVz cGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAi V0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElU SU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBu dWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIs ICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3Rz IjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBT VE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90 X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm9yZGVy X2lkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJy YXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9n In0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90 X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZh bHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01Q UkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXBy ZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVS QVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7 Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0 aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5h bWUiOiAicHJvZHVjdF9pZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2Qi OiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUi OiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6 IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwg InByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjog eyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7 ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6 ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3Br ZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVm aW5pdGlvbiI6ICJQUklNQVJZIEtFWSAob3JkZXJfaWQpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVk IGNvbW1hbmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5vcmRlcnMgKG9yZGVyX2lkIHBnX2NhdGFs b2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIHByb2R1Y3RfaWQgcGdfY2F0YWxvZy5pbnQ0IFNU T1JBR0UgcGxhaW4gICAgICwgQ09OU1RSQUlOVCBvcmRlcnNfcGtleSBQUklNQVJZIEtFWSAob3Jk ZXJfaWQpKSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICBy ZS1mb3JtZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6 ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlw ZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFERCBDT05TVFJBSU5UICV7bmFtZX1J ICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIsICJ0eXBl IjogImFkZCBjb25zdHJhaW50IiwgImRlZmluaXRpb24iOiAiRk9SRUlHTiBLRVkgKHByb2R1Y3Rf aWQpIFJFRkVSRU5DRVMgcHVibGljLnByb2R1Y3QoaWQpIn1dLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAib3JkZXJzIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3Jt ZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLm9yZGVycyBBREQgQ09OU1RSQUlOVCBvcmRl cnNfcHJvZHVjdF9pZF9ma2V5IEZPUkVJR04gS0VZIChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VTIHB1 YmxpYy5wcm9kdWN0KGlkKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9k ZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNl Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMGUyYmYyNTFhCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQKQEAgLTAsMCArMSwxOCBAQAorQ1JFQVRF IEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CitDUkVBVEUgT1IgUkVQTEFDRSBG VU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBldmVudF90cmlnZ2VyIExBTkdV QUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7CisJZGVwYXJzZWRfanNvbiB0 ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRs X2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBwZ19jYXRhbG9nLmRkbF9kZXBh cnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNFICdkZXBhcnNlZCBqc29uOiAl JywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1mb3JtZWQgY29tbWFuZDogJScs IHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGVwYXJzZWRfanNvbik7CisJ RU5EIExPT1A7CitFTkQ7CiskJDsKK0NSRUFURSBFVkVOVCBUUklHR0VSIHRlc3RfZGRsX2RlcGFy c2UKK09OIGRkbF9jb21tYW5kX2VuZCBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0X2RkbF9kZXBhcnNl KCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdhMTUy YTIzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy9tZXNvbi5idWlsZApAQCAtMCwwICsxLDQyIEBACisjIEZJWE1FOiBwcmV2ZW50 IGluc3RhbGwgZHVyaW5nIG1haW4gaW5zdGFsbCwgYnV0IG5vdCBkdXJpbmcgdGVzdCA6LworCit0 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Nfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAgdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMy dmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyAtIHJl Z3Jlc3Npb24gdGVzdGluZyBmb3IgRERMIGRlcGFyc2luZycsXSkKK2VuZGlmCisKK3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcyA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVz cycsCisgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzc19zb3VyY2VzLAorICBrd2FyZ3M6IHBnX21v ZF9hcmdzLAorKQordGVzdHByZXBfdGFyZ2V0cyArPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MK KworaW5zdGFsbF9kYXRhKAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wnLAor ICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsJywKKyAga3dhcmdzOiBjb250cmli X2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2JkJzog bWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6IFsK KyAgICAgICd0ZXN0X2RkbF9kZXBhcnNlJywKKyAgICAgICdjcmVhdGVfZXh0ZW5zaW9uJywKKyAg ICAgICdjcmVhdGVfc2NoZW1hJywKKyAgICAgICdjcmVhdGVfdGFibGUnLAorICAgIF0sCisgIH0s CisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2NvbXBhcmVfZHVtcGVk X3Jlc3VsdHMucGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvYWdncmVnYXRlLnNxbCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9hZ2dyZWdhdGUuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjU2MWI0ZTEyMGEKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvYWdn cmVnYXRlLnNxbApAQCAtMCwwICsxLDcgQEAKK0NSRUFURSBBR0dSRUdBVEUgbmV3YXZnKGludDQp ICgKKyAgIHNmdW5jID0gaW50NF9hdmdfYWNjdW0sIHN0eXBlID0gX2ludDgsCisgICBmaW5hbGZ1 bmMgPSBpbnQ4X2F2ZywKKyAgIGluaXRjb25kMSA9ICd7MCwwfScKKyk7CisKK0RST1AgQUdHUkVH QVRFIG5ld2F2ZyhpbnQ0KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kMjNlN2ZkOWNlCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2Ny ZWF0ZV9leHRlbnNpb24uc3FsCkBAIC0wLDAgKzEsNSBAQAorLS0tCistLS0gQ1JFQVRFX0VYVEVO U0lPTgorLS0tCisKK0NSRUFURSBFWFRFTlNJT04gcGdfc3RhdF9zdGF0ZW1lbnRzOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0 ZV9zY2hlbWEuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv c3FsL2NyZWF0ZV9zY2hlbWEuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjEwYjEzZjBhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5zcWwKQEAgLTAsMCArMSwxNiBA QAorLS0KKy0tIENSRUFURV9TQ0hFTUEKKy0tCisKK0NSRUFURSBTQ0hFTUEgZm9vOworCitDUkVB VEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmFyOworCitDUkVBVEUgU0NIRU1BIGJhejsKKworLS0g V2lsbCBub3QgYmUgY3JlYXRlZCwgYW5kIHdpbGwgbm90IGJlIGhhbmRsZWQgYnkgdGhlCistLSBl dmVudCB0cmlnZ2VyCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmF6OworCitDUkVBVEUg U0NIRU1BIGVsZW1lbnRfdGVzdAorICBDUkVBVEUgVEFCTEUgZm9vIChpZCBpbnQpCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRl X3RhYmxlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Nx bC9jcmVhdGVfdGFibGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu Ljk5N2QyZjU0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbApAQCAtMCwwICsxLDE2IEBACitD UkVBVEUgVEFCTEUgc2ltcGxlX3RhYmxlKAorICAgIGlkIGludCwKKyAgICBuYW1lIHZhcmNoYXIo NSkKKyk7CistLSBUZXN0IENSRUFURSBJTkRFWCB3aXRoIGFuIElOQ0xVREUgQ0xBVVNFCitDUkVB VEUgVU5JUVVFIElOREVYIGNvdmVyaW5nX2luZGV4IG9uIHNpbXBsZV90YWJsZSAoaWQpIElOQ0xV REUgKG5hbWUpOworCistLSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBoYW5kbGVkIHByb3Blcmx5 CitDUkVBVEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3RoKGEpID4gMikgUFJJTUFS WSBLRVksIGIgdGV4dCk7CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RP UkFHRSBNQUlOOworQUxURVIgVEFCTEUgY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JBR0Ug RVhURVJOQUw7CisKKy0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVkIGlu IGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJFRkVS RU5DRVMgc3ViY29tbWFuZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZIEtF WSwgbmFtZSB0ZXh0KTsKK0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZ IEtFWSwgcHJvZHVjdF9pZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKTsKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2Rk bF9kZXBhcnNlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4wODg5ZmEwMmY5Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsCkBAIC0wLDAg KzEsMjAgQEAKK0NSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworCitD UkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBl dmVudF90cmlnZ2VyIExBTkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7 CisJZGVwYXJzZWRfanNvbiB0ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBn X2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBw Z19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNF ICdkZXBhcnNlZCBqc29uOiAlJywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1m b3JtZWQgY29tbWFuZDogJScsIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQo ZGVwYXJzZWRfanNvbik7CisJRU5EIExPT1A7CitFTkQ7CiskJDsKKworQ1JFQVRFIEVWRU5UIFRS SUdHRVIgdGVzdF9kZGxfZGVwYXJzZQorT04gZGRsX2NvbW1hbmRfZW5kIEVYRUNVVEUgUFJPQ0VE VVJFIHRlc3RfZGRsX2RlcGFyc2UoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1 bXBlZF9yZXN1bHRzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY2 NGFkMzQ5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCkBAIC0wLDAgKzEs MTgxIEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVudjsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRl c3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiBleGVjdXRlX3Rlc3RfY2FzZSB7 CisgICAgbXkgJHRlc3RfbmFtZSA9ICRfWzBdOworICAgIG15ICRwdWJfbm9kZSA9ICRfWzFdOwor ICAgIG15ICRzdWJfbm9kZSA9ICRfWzJdOworICAgIG15ICRkYm5hbWUgPSAkX1szXTsKKyAgICBt eSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyAg ICAjIHNldCB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY3JlYXRlX2RlcGFyc2Vf dGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUoJHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAg IG15ICR0ZXN0X2ZpbGUgPSAiLi9zcWwvJHt0ZXN0X25hbWV9LnNxbCI7CisgICAgbXkgJGNvbnRl bnQgPSBkb3tsb2NhbChAQVJHViwkLyk9JHRlc3RfZmlsZTs8Pn07CisKKyAgICAkcHViX25vZGUg LT4gcHNxbCgkZGJuYW1lLCAkY29udGVudCk7CisKKyAgICAjIHJldHJpZXZlIFNRTCBjb21tYW5k cyBnZW5lcmF0ZWQgZnJvbSBkZXBhcnNlZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9z cWwgPSAnJzsKKyAgICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVj dCBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2Rk bHMgT1JERVIgQlkgaWQgQVNDKSwKKyAgICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAg ICBwcmludCAiXG5zdGFydCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOworICAgIHByaW50ICRk ZGxfc3FsOworICAgIHByaW50ICJcbmVuZCBwcmludGluZyByZS1mb3JtZWQgc3FsXG4iOworICAg ICMgZXhlY3V0ZSBTUUwgY29tbWFuZHMgb24gc3ViIG5vZGUKKyAgICAkc3ViX25vZGUgLT4gcHNx bCgkZGJuYW1lLCAkZGRsX3NxbCk7CisKKyAgICAjIGNsZWFuIHVwIGRlcGFyc2UgdGVzdGluZyBy ZXNvdXJjZXMKKyAgICBjbGVhbl9kZXBhcnNlX3Rlc3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2Rl KCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICAjIGR1bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3Vi IG5vZGUKKyAgICBta2RpciAke291dHB1dGRpcn0uIi9kdW1wcyIsIDA3NTU7CisgICAgbXkgJHB1 Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMvJHt0ZXN0X25hbWV9X3B1Yi5kdW1wIjsKKyAg ICBteSAkc3ViX2R1bXAgPSAke291dHB1dGRpcn0uIi9kdW1wcy8ke3Rlc3RfbmFtZX1fc3ViLmR1 bXAiOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAg LiAiLWYgIgorICAgICAgICAuICRwdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMg IgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCkgID09IDAgb3Ig ZGllICJEdW1wIHB1YiBub2RlIGZhaWxlZCBpbiAke3Rlc3RfbmFtZX0iOworICAgIHN5c3RlbSgi cGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAu ICRzdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAg JworICAgICAgICAuICRzdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHN1YiBub2Rl IGZhaWxlZCBpbiAke3Rlc3RfbmFtZX0iOworCisgICAgIyBjb21wYXJlIGR1bXBlZCByZXN1bHRz CisgICAgaXMoc3lzdGVtKCJkaWZmICIKKyAgICAuICRwdWJfZHVtcCAuICIgIgorICAgIC4gJHN1 Yl9kdW1wKSwgMCwgIkR1bXBlZCByZXN1bHRzIGRpZmYgaW4gJHt0ZXN0X25hbWV9Iik7Cit9CisK K3N1YiBpbml0X25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9k ZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9k ZS0+aW5pdDsKKyAgICAjIGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcg bWFrZXMgdG9vIGxvdyBieSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdy ZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBlbmRf Y29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMg PSAxMCcpOworICAgIHJldHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgeworICAg IG15ICRub2RlX25hbWUgPSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9k ZV9uYW1lKQorfQorCitzdWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRf WzBdLiJfc3ViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBj cmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5v ZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgk ZGJuYW1lLCBxKAorICAgICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxz KGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBk ZGwgdGV4dCk7CisKKyAgICAgICAgY3JlYXRlIG9yIHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90 b19qc29uKCkKKyAgICAgICAgICAgIHJldHVybnMgZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBn c3FsIGFzCisgICAgICAgICQkCisgICAgICAgIGRlY2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3Jk OworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19l dmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisgICAgICAgICAgICBsb29wCisgICAgICAgICAg ICAgICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRscyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRs KSB2YWx1ZXMgKHIuY29tbWFuZF90YWcsIHIub2JqZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRk bF9kZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAg ICAgICAgRU5EOworICAgICAgICAkJDsKKworICAgICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5j dGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKQorICAgICAgICAgICAgcmV0dXJucyBldmVudF90 cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAgICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQor ICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgciBp biBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdnZXJfZHJvcHBlZF9vYmplY3RzKCkKKyAgICAg ICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBpbnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRh Zywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVlcyAoci5vYmplY3RfdHlwZSwgci5vYmplY3Rf aWRlbnRpdHksIHB1YmxpYy5kZXBhcnNlX2Ryb3BfZGRsKHIub2JqZWN0X2lkZW50aXR5LCByLm9i amVjdF90eXBlKSk7CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAgICAg ICAkJDsKKworICAgICAgICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisg ICAgICAgIG9uIGRkbF9jb21tYW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pz b24oKTsKKworICAgICAgICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90 cmlnCisgICAgICAgIG9uIHNxbF9kcm9wIGV4ZWN1dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNf dG9fanNvbigpOworCisgICAgICAgIGNvbW1pdDsKKyAgICApKTsKK30KKworc3ViIGNsZWFuX2Rl cGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUgeworICAgIG15ICRub2RlID0gJF9b MF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFdOworICAgICMgRHJvcCB0aGUgZXZlbnQgdHJpZ2dl ciBhbmQgdGhlIGZ1bmN0aW9uIGJlZm9yZSB0YWtpbmcgYSBsb2dpY2FsIGR1bXAuCisgICAgJG5v ZGUgLT4gc2FmZV9wc3FsKCRkYm5hbWUscSgKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRk bF9kZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3AgZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVw YXJzZV90cmlnOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpOworICAg ICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworICAgICAgICBkcm9w IHRhYmxlIGRlcGFyc2VkX2RkbHM7CisgICAgICAgIERST1AgRVhURU5TSU9OIHRlc3RfZGRsX2Rl cGFyc2VfcmVncmVzczsKKyAgICApKTsKK30KKworc3ViIHRyaW0geworICAgIG15IEBvdXQgPSBA XzsKKyAgICBmb3IgKEBvdXQpIHsKKyAgICAgICAgcy9eXHMrLy87CisgICAgICAgIHMvXHMrJC8v OworICAgIH0KKyAgICByZXR1cm4gd2FudGFycmF5ID8gQG91dCA6ICRvdXRbMF07Cit9CisKKyMg Q3JlYXRlIGFuZCBzdGFydCBwdWIgc3ViIG5vZGVzCitteSAkcHViX25vZGUgPSBpbml0X3B1Yl9u b2RlKCJ0ZXN0Iik7CitteSAkc3ViX25vZGUgPSBpbml0X3N1Yl9ub2RlKCJ0ZXN0Iik7CitteSAk ZGJuYW1lID0gInBvc3RncmVzIjsKKyRwdWJfbm9kZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAtPiBz dGFydDsKKworIyBsb2FkIHRlc3QgY2FzZXMgZnJvbSB0aGUgcmVncmVzc2lvbiB0ZXN0cworbXkg QHJlZ3Jlc3NfdGVzdHMgPSBzcGxpdCAvXHMrLywgJEVOVntSRUdSRVNTfTsKKworZm9yZWFjaChA cmVncmVzc190ZXN0cykgeworICAgIG15ICR0ZXN0X25hbWUgPSB0cmltKCRfKTsKKyAgICAjIHNr aXAgaWYgaXQncyByZWdyZXNzaW9uIHRlc3QgcHJlcGFyYXRpb24gb3IgZW1wdHkgc3RyaW5nCisg ICAgaWYgKCR0ZXN0X25hbWUgZXEgIiIgb3IgJHRlc3RfbmFtZSBlcSAidGVzdF9kZGxfZGVwYXJz ZSIpCisgICAgeworICAgICAgICBuZXh0OworICAgIH0KKyAgICBldmFsIHtleGVjdXRlX3Rlc3Rf Y2FzZSgkdGVzdF9uYW1lLCAkcHViX25vZGUsICRzdWJfbm9kZSwgJGRibmFtZSk7fTsKKyAgICBp ZiAoJEAgbmUgIiIpCisgICAgeworICAgICAgICBmYWlsKCRAKTsKKyAgICB9Cit9CitjbG9zZTsK KworIyBDbG9zZSBub2RlcworJHB1Yl9ub2RlLT5zdG9wOworJHN1Yl9ub2RlLT5zdG9wOworCitk b25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVzdHMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNhODc1YzMzZmIKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNz X3Rlc3RzLnBsCkBAIC0wLDAgKzEsMjA3IEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwor dXNlIEVudjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6 OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1 YiBleGVjdXRlX3JlZ3Jlc3NfdGVzdCB7CisgICAgbXkgJHB1Yl9ub2RlID0gJF9bMF07CisgICAg bXkgJHN1Yl9ub2RlID0gJF9bMV07CisgICAgbXkgJGRibmFtZSA9ICJwb3N0Z3JlcyI7CisgICAg bXkgJGRscGF0aCAgICA9IGRpcm5hbWUoJEVOVntSRUdSRVNTX1NITElCfSk7CisgICAgbXkgJGlu cHV0ZGlyID0gIi4uLy4uL3JlZ3Jlc3MiOworICAgIG15ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKworICAgICMgc2V0IHVwIGRlcGFyc2UgdGVzdGlu ZyByZXNvdXJjZXMKKyAgICBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJf bm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAgIyBleGVjdXRlIGNvcmUgcmVncmVzc2lv biB0ZXN0cyBvbiBwdWIgbm9kZQorICAgIG15ICRyZWdyZXNzX2NtZCA9ICRFTlZ7UEdfUkVHUkVT U30KKyAgICAgICAgLiAiICIKKyAgICAgICAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorICAg ICAgICAuICItLW1heC1jb25jdXJyZW50LXRlc3RzPTIwICIKKyAgICAgICAgLiAiLS1kYm5hbWU9 IgorICAgICAgICAuICRkYm5hbWUgLiAiICIKKyAgICAgICAgLiAiLS11c2UtZXhpc3RpbmcgIgor ICAgICAgICAuICItLWhvc3Q9IgorICAgICAgICAuICRwdWJfbm9kZS0+aG9zdCAuICIgIgorICAg ICAgICAuICItLXBvcnQ9IgorICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCAuICIgIgorICAgICAg ICAuICItLWlucHV0ZGlyPSRpbnB1dGRpciAiCisgICAgICAgIC4gIi0tb3V0cHV0ZGlyPVwiJG91 dHB1dGRpclwiICIKKyAgICAgICAgLiAiLS1zY2hlZHVsZT0kaW5wdXRkaXIvcGFyYWxsZWxfc2No ZWR1bGUiOworICAgIHByaW50ICJSZWdyZXNzaW9uIHRlc3QgY29tbWFuZCBpcyAkcmVncmVzc19j bWQiOworICAgIG15ICRyYyA9IHN5c3RlbSgkcmVncmVzc19jbWQpOworICAgIGlmICgkcmMgIT0g MCkKKyAgICB7CisgICAgICAgICMgSWYgcmVncmVzc2lvbiB0ZXN0IGZhaWxzLCBkdW1wIG91dCB0 aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlCisgICAgICAgIG15ICRkaWZmcyA9ICIke291dHB1dGRp cn0vcmVncmVzc2lvbi9yZWdyZXNzaW9uLmRpZmZzIjsKKyAgICAgICAgaWYgKC1lICRkaWZmcykK KyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIj09PSBkdW1waW5nICRkaWZmcyA9PT1cbiI7 CisgICAgICAgICAgICBwcmludCBzbHVycF9maWxlKCRkaWZmcyk7CisgICAgICAgICAgICBwcmlu dCAiPT09IEVPRiA9PT1cbiI7CisgICAgICAgIH0KKyAgICAgICAgZGllICJSZWdyZXNzaW9uIHRl c3QgZmFpbGVkIjsKKyAgICB9CisKKyAgICAjIFJldHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0 ZWQgZnJvbSBkZXBhcnNlZCBERExzIG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsK KyAgICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVw YXJzZV9leHBhbmRfY29tbWFuZChkZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIg QlkgaWQgQVNDKSwKKyAgICAgICAgc3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAgICAjIEV4ZWN1 dGUgU1FMIGNvbW1hbmRzIG9uIHN1YiBub2RlCisgICAgJHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFt ZSwgJGRkbF9zcWwpOworCisgICAgIyBDbGVhbiB1cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2Vz CisgICAgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25v ZGUsICRkYm5hbWUpOworCisgICAgIyBEdW1wIGZyb20gcHViIG5vZGUgYW5kIHN1YiBub2RlCisg ICAgbWtkaXIgJHtvdXRwdXRkaXJ9LiIvZHVtcHMiLCAwNzU1OworICAgIG15ICRwdWJfZHVtcCA9 ICR7b3V0cHV0ZGlyfS4iL2R1bXBzL3JlZ3Jlc3NfcHViLmR1bXAiOworICAgIG15ICRzdWJfZHVt cCA9ICR7b3V0cHV0ZGlyfS4iL2R1bXBzL3JlZ3Jlc3Nfc3ViLmR1bXAiOworICAgIHN5c3RlbSgi cGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAu ICRwdWJfZHVtcCAuICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAg JworICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHB1YiBub2Rl IGZhaWxlZCI7CisgICAgc3lzdGVtKCJwZ19kdW1wYWxsICIKKyAgICAgICAgLiAiLXMgIgorICAg ICAgICAuICItZiAiCisgICAgICAgIC4gJHN1Yl9kdW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8t c3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAgICAgIC4gJHN1Yl9ub2RlLT5wb3J0KSAgPT0g MCBvciBkaWUgIkR1bXAgc3ViIG5vZGUgZmFpbGVkIjsKKworICAgICMgQ29tcGFyZSBkdW1wZWQg cmVzdWx0cworICAgIGlzKHN5c3RlbSgiZGlmZiAiCisgICAgLiAkcHViX2R1bXAgLiAiICIKKyAg ICAuICRzdWJfZHVtcCksIDAsICJDb21wYXJpbmcgZHVtcGVkIG91dHB1dCIpOworCisgICAgIyBD bG9zZSBub2RlcworICAgICRwdWJfbm9kZS0+c3RvcDsKKyAgICAkc3ViX25vZGUtPnN0b3A7Cit9 CisKK3N1YiBpbml0X25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAk bm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAk bm9kZS0+aW5pdDsKKyAgICAjIGluY3JlYXNlIHNvbWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5u ZXcgbWFrZXMgdG9vIGxvdyBieSBkZWZhdWx0LgorICAgICRub2RlLT5hZGp1c3RfY29uZigncG9z dGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycsICcyNScpOworICAgICRub2RlLT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlv bnMgPSAxMCcpOworICAgIHJldHVybiAkbm9kZTsKK30KKworc3ViIGluaXRfcHViX25vZGUgewor ICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3B1YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgk bm9kZV9uYW1lKQorfQorCitzdWIgaW5pdF9zdWJfbm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9 ICRfWzBdLiJfc3ViIjsKKyAgICByZXR1cm4gaW5pdF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1 YiBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkg JG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNx bCgkZGJuYW1lLCBxKAorICAgICAgICBiZWdpbjsKKyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9k ZGxzKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdGFnIHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0 LCBkZGwgdGV4dCk7CisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2Vf dG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxw Z3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29y ZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdf ZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAg ICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRk bCkgdmFsdWVzIChyLmNvbW1hbmRfdGFnLCByLm9iamVjdF9pZGVudGl0eSwgcGdfY2F0YWxvZy5k ZGxfZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCkpOworICAgICAgICAgICAgZW5kIGxvb3A7Cisg ICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisgICAgICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0 aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5zIGV2ZW50X3Ry aWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBkZWNsYXJlCisg ICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciByIGlu IHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9kcm9wcGVkX29iamVjdHMoKQorICAgICAg ICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFn LCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLm9iamVjdF90eXBlLCByLm9iamVjdF9p ZGVudGl0eSwgcHVibGljLmRlcGFyc2VfZHJvcF9kZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2Jq ZWN0X3R5cGUpKTsKKyAgICAgICAgICAgIGVuZCBsb29wOworICAgICAgICBFTkQ7CisgICAgICAg ICQkOworICAgICAgICBjcmVhdGUgZXZlbnQgdHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAg ICAgIG9uIGRkbF9jb21tYW5kX2VuZCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24o KTsKKyAgICAgICAgY3JlYXRlIGV2ZW50IHRyaWdnZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZwor ICAgICAgICBvbiBzcWxfZHJvcCBleGVjdXRlIHByb2NlZHVyZSBkZXBhcnNlX2Ryb3BzX3RvX2pz b24oKTsKKyAgICAgICAgY29tbWl0OworICAgICkpOworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90 ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAg ICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgIyBEcm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0 aGUgZnVuY3Rpb24gYmVmb3JlIHRha2luZyBhIGxvZ2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBz YWZlX3BzcWwoJGRibmFtZSxxKAorICAgICAgICBkcm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFy c2VfdHJpZzsKKyAgICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3Ry aWc7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCk7CisgICAgICAgIGRy b3AgZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19qc29uKCk7CisgICAgICAgIGRyb3AgdGFibGUg ZGVwYXJzZWRfZGRsczsKKyAgICAgICAgRFJPUCBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzOworICAgICkpOworfQorCitzdWIgdHJpbSB7CisgICAgbXkgQG91dCA9IEBfOworICAg IGZvciAoQG91dCkgeworICAgICAgICBzL15ccysvLzsKKyAgICAgICAgcy9ccyskLy87CisgICAg fQorICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0IDogJG91dFswXTsKK30KKworIyBDcmVhdGUg YW5kIHN0YXJ0IHB1YiBzdWIgbm9kZXMKK215ICRwdWJfbm9kZSA9IGluaXRfcHViX25vZGUoInJl Z3Jlc3MiKTsKK215ICRzdWJfbm9kZSA9IGluaXRfc3ViX25vZGUoInJlZ3Jlc3MiKTsKKyRwdWJf bm9kZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAtPiBzdGFydDsKKworIyBDb21tZW50IHRoZSBleGVj dXRpb24gdGVtcG9yYXJpbHksIGFuIGVycm9yIGluIGRkbF9kZXBhcnNlLmMgd2lsbCBjYXVzZSB0 aGUgZGF0YWJhc2UgZXhpdHMgYWJub3JtYWxseSwgZXJyb3Igc2lnbmF0dXJlOgorIworIyAyMDIy LTEyLTAzIDIzOjAyOjQ0Ljc3OCBVVEMgWzEyOTEwMl0gcGdfcmVncmVzcy90YWJsZXNwYWNlIExP RzogIHN0YXRlbWVudDogQUxURVIgVEFCTEUgQUxMIElOIFRBQkxFU1BBQ0UgcmVncmVzc190Ymxz cGFjZV9yZW5hbWVkIFNFVCBUQUJMRVNQQUNFIHBnX2RlZmF1bHQ7CisjIFRSQVA6IGZhaWxlZCBB c3NlcnQoIklzQShzdG10LCBBbHRlclRhYmxlU3RtdCkiKSwgRmlsZTogImRkbF9kZXBhcnNlLmMi LCBMaW5lOiAzMzcxLCBQSUQ6IDEyOTEwMgorIyBwb3N0Z3JlczogcmVncmVzc19wdWI6IHJ1bnFp IHBvc3RncmVzIFtsb2NhbF0gQUxURVIgVEFCTEUoRXhjZXB0aW9uYWxDb25kaXRpb24rMHhiYilb MHg1NjNiZDZlYTViMGRdCisjIC4uLgorIyAvbGliL3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42 KCsweDI5ZDkwKVsweDdmZDZhNzRhNmQ5MF0KKyMgL2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMu c28uNihfX2xpYmNfc3RhcnRfbWFpbisweDgwKVsweDdmZDZhNzRhNmU0MF0KKyMgcG9zdGdyZXM6 IHJlZ3Jlc3NfcHViOiBydW5xaSBwb3N0Z3JlcyBbbG9jYWxdIEFMVEVSIFRBQkxFKF9zdGFydCsw eDI1KVsweDU2M2JkNjcyZjFlNV0KKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTAgVVRDIFsxMjkw NThdIExPRzogIHNlcnZlciBwcm9jZXNzIChQSUQgMTI5MTAyKSB3YXMgdGVybWluYXRlZCBieSBz aWduYWwgNjogQWJvcnRlZAorIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0g REVUQUlMOiAgRmFpbGVkIHByb2Nlc3Mgd2FzIHJ1bm5pbmc6IEFMVEVSIFRBQkxFIEFMTCBJTiBU QUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2VfcmVuYW1lZCBTRVQgVEFCTEVTUEFDRSBwZ19kZWZh dWx0OworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gTE9HOiAgdGVybWlu YXRpbmcgYW55IG90aGVyIGFjdGl2ZSBzZXJ2ZXIgcHJvY2Vzc2VzCisjIDIwMjItMTItMDMgMjM6 MDI6NDQuODUxIFVUQyBbMTI5MDU4XSBMT0c6ICBzaHV0dGluZyBkb3duIGJlY2F1c2UgcmVzdGFy dF9hZnRlcl9jcmFzaCBpcyBvZmYKKyMgMjAyMi0xMi0wMyAyMzowMjo0NC44NTIgVVRDIFsxMjkw NThdIExPRzogIGRhdGFiYXNlIHN5c3RlbSBpcyBzaHV0IGRvd24KKworIyBldmFsIHtleGVjdXRl X3JlZ3Jlc3NfdGVzdCgkcHViX25vZGUsICRzdWJfbm9kZSk7fTsKKyMgaWYgKCRAIG5lICIiKQor IyB7CisjICAgICBmYWlsKCRAKTsKKyMgfQorCisjIENsb3NlIG5vZGVzCiskcHViX25vZGUtPnN0 b3A7Ciskc3ViX25vZGUtPnN0b3A7CisKK3Bhc3MoInJlZ3Jlc3NzaW9uIHRlc3QgcGFzc2VkIik7 CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy0tMS4wLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNDA3MGNkNTFmCi0tLSAvZGV2L251bGwKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzLS0xLjAuc3FsCkBAIC0wLDAgKzEsOSBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3Fs ICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0 aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNobyBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRF IEZVTkNUSU9OIGRlcGFyc2VfZHJvcF9kZGwoSU4gb2JqaWRlbnRpdHkgdGV4dCwKKyAgICBJTiBv YmplY3R0eXBlIHRleHQpCisgIFJFVFVSTlMgdGV4dCBJTU1VVEFCTEUgU1RSSUNUCisgIEFTICdN T0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5iZDY5OTJiZGZkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzLmMKQEAgLTAsMCArMSw1OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiB0ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MuYworICoJCVN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzIG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDIyLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisg KgkgIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy5jCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVz LmgiCisKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgi CisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0 aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKworUEdfTU9EVUxFX01BR0lD OworCitQR19GVU5DVElPTl9JTkZPX1YxKGRlcGFyc2VfZHJvcF9kZGwpOworCisvKgorICogR2l2 ZW4gb2JqZWN0X2lkZW50aXR5IGFuZCBvYmplY3RfdHlwZSBvZiBkcm9wcGVkIG9iamVjdCwgcmV0 dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBEUk9QIGNvbW1hbmQuCisgKi8KK0RhdHVtCitk ZXBhcnNlX2Ryb3BfZGRsKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJdGV4dAkgICAqb2JqaWRlbnRp dHkgPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNvbnN0IGNoYXIJICAgKm9iamlkZW50aXR5X3N0 ciA9IHRleHRfdG9fY3N0cmluZyhvYmppZGVudGl0eSk7CisJdGV4dAkgICAqb2JqZWN0dHlwZSA9 IFBHX0dFVEFSR19URVhUX1AoMSk7CisJY29uc3QgY2hhcgkgICAqb2JqZWN0dHlwZV9zdHIgPSB0 ZXh0X3RvX2NzdHJpbmcob2JqZWN0dHlwZSk7CisKKwljaGFyCQkgICAqY29tbWFuZDsKKworCS8v IGNvbnN0cmFpbnQgaXMgcGFydCBvZiBhbHRlciB0YWJsZSBjb21tYW5kLCBubyBuZWVkIHRvIGRy b3AgaW4gRFJPUCBjb21tYW5kCisJaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNv bnN0cmFpbnQiKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJj bXAob2JqZWN0dHlwZV9zdHIsICJ0b2FzdCB0YWJsZSIpID09IDApIHsKKwkJb2JqZWN0dHlwZV9z dHIgPSAidGFibGUiOworCX0gIGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgImRlZmF1 bHQgdmFsdWUiKSA9PSAwKSB7CisJCVBHX1JFVFVSTl9OVUxMKCk7CisJfSBlbHNlIGlmIChzdHJj bXAob2JqZWN0dHlwZV9zdHIsICJvcGVyYXRvciBvZiBhY2Nlc3MgbWV0aG9kIikgPT0gMCkgewor CQlQR19SRVRVUk5fTlVMTCgpOworCX0gZWxzZSBpZiAoc3RyY21wKG9iamVjdHR5cGVfc3RyLCAi ZnVuY3Rpb24gb2YgYWNjZXNzIG1ldGhvZCIpID09IDApIHsKKwkJUEdfUkVUVVJOX05VTEwoKTsK Kwl9IGVsc2UgaWYgKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgInRhYmxlIGNvbHVtbiIpID09IDAp IHsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9CisKKwljb21tYW5kID0gZGVwYXJzZV9kcm9wX2Nv bW1hbmQob2JqaWRlbnRpdHlfc3RyLCBvYmplY3R0eXBlX3N0ciwgRFJPUF9DQVNDQURFKTsKKwor CWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5k KSk7CisKKwlQR19SRVRVUk5fTlVMTCgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jb250cm9sIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTFmOTM0ZTY1OAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy5jb250cm9sCkBAIC0wLDAgKzEsNCBAQAorY29tbWVudCA9ICdUZXN0 IGNvZGUgZm9yIERETCBkZXBhcnNlIHJlZ3Jlc3MgZmVhdHVyZScKK2RlZmF1bHRfdmVyc2lvbiA9 ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MnCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIuMzQuMQoK --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Disposition: attachment; filename="v77-0002-Functions-to-deparse-Table-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69cu1 RnJvbSBlYzY3OWUxODM4M2IxMDdkNWM3YWQxOWQzMzMxYjFhMmRiOGJlNDhjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMjozODoyMyAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDIvOF0gRnVuY3Rpb25zIHRvIGRlcGFyc2UgVGFibGUgRERMIGNvbW1hbmRzLgoKVGhpcyBw YXRjaCBjb25zdHJ1Y3RzIEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hp Y2ggY2FuCmxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1k ZWZpbmVkIHNwcmludGYtbGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50 ZW5kZWQgdG8gYWxsb3cgZm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJl cGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGlu Zm9ybWF0aW9uIGluIHRoZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpj YXRhbG9ncywgbm90IGZyb20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3Nz aWJsZSB0byByZWxpYWJseQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5l LiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0 aGUgcGFyc2Ugbm9kZS4KClRoaXMgcHJvdmlkZXMgYSBiYXNlIGZvciBsb2dpY2FsIHJlcGxpY2F0 aW9uIG9mIERETCBzdGF0ZW1lbnRzLiBDdXJyZW50bHksCnRoZSBwYXRjaCBoYXMgc3VwcG9ydCBm b3I6CgpDUkVBVEUvQUxURVIvRFJPUCBUQUJMRSAtLSBOb3RlICMxLCBOb3RlICMyCgooTm90ZSAj MSkgU29tZSByZWNlbnRseSBpbnRyb2R1Y2VkIERETHMoZS5nLiBERExzIHJlbGF0ZWQgdG8KUEFS VElUSU9ORUQgVEFCTEUpIGFyZSB1bnN1cHBvcnRlZC4gV2UgY2FuIGV4dGVuZCBpdCBhcyB3ZSBu ZWVkIG1vcmUKZnVuY3Rpb25hbGl0eSBmb3IgRERMIHJlcGxpY2F0aW9uLgoKKE5vdGUgIzIpIEZv ciBBVFRBQ0gvREVUQUNIIFBBUlRJVElPTiwgd2UgaGF2ZW4ndCBhZGRlZCBleHRyYSBsb2dpYyBv bgp0aGUgc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRhYmxlIG9uIHRo ZSBwdWJsaXNoZXIgaXMgYSBQQVJUSVRJT05FRApUQUJMRSB3aGlsZSB0aGUgdGFyZ2V0IHRhYmxl IG9uIHRoZSBzdWJjcmliZXIgc2lkZSBpcyBhIE5PUk1BTCB0YWJsZS4gV2Ugd2lsbApyZXNlYXJj aCB0aGlzIG1vcmUgYW5kIGltcHJvdmUgaXQgbGF0ZXIuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRp b25jbWRzLmMgfCAgICA0ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICAg fCAzNTk5ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfanNvbi5jICAgICAgfCAgNzgxICsrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jIHwgICAgMyArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCAgICAg fCAgICAyICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICB8ICAgIDcgKwog c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVk ZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgfCAgIDIyICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVw YXJzZV91dGlsaXR5LmggICB8ICAgMTEgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0ICAgICB8ICAgIDQgKwogMTEgZmlsZXMgY2hhbmdlZCwgNDQzMyBpbnNlcnRpb25zKCspLCAz IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf anNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5o CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4ZjkxLi4xNzFkZmIyODAwIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwKIAlj cmVhdGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9qc29u Lm8gXAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IGU1YjJkOTkwZWIuLmE5MTFmZGEwM2MgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAgLTE1Niw4ICsxNTYsOCBAQCBEZWZpbmVD b2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVy cywKIAkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gJXUi LCBjb2xsaWQpOwogCiAJCS8qCi0JCSAqIE1ha2UgZnJvbSBleGlzdGluZyBjb2xsYXRpb25pZCBh dmFpbGFibGUgdG8gY2FsbGVycyBmb3Igc3RhdGVtZW50cyBzdWNoIGFzCi0JCSAqIENSRUFURSBD T0xMQVRJT04gYW55X25hbWUgRlJPTSBhbnlfbmFtZQorCQkgKiBNYWtlIGZyb20gZXhpc3Rpbmcg Y29sbGF0aW9uaWQgYXZhaWxhYmxlIHRvIGNhbGxlcnMgZm9yIHN0YXRlbWVudHMKKwkJICogc3Vj aCBhcyBDUkVBVEUgQ09MTEFUSU9OIGFueV9uYW1lIEZST00gZXhpc3RpbmdfY29sbGF0aW9uLgog CQkgKi8KIAkJaWYgKGZyb21fZXhpc3RpbmdfY29sbGlkICYmIE9pZElzVmFsaWQoY29sbGlkKSkK IAkJCU9iamVjdEFkZHJlc3NTZXQoKmZyb21fZXhpc3RpbmdfY29sbGlkLCBDb2xsYXRpb25SZWxh dGlvbklkLCBjb2xsaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTViZGY3ZWQ4NAotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTAsMCArMSwzNTk5IEBACisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJzZS5jCisgKgkgIEZ1bmN0aW9ucyB0 byBjb252ZXJ0IHV0aWxpdHkgY29tbWFuZHMgdG8gbWFjaGluZS1wYXJzZWFibGUKKyAqCSAgcmVw cmVzZW50YXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICog Tk9URVMKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgSlNPTiBibG9icyByZXBy ZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KKyAqIGxhdGVyIGJlIHJlLXByb2Nlc3Nl ZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYtbGlrZQorICogZXhw YW5zaW9uLiAgVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0byBhbGxvdyBmb3IgbWFj aGluZS1lZGl0aW5nIG9mCisgKiB0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWluIG5v ZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KKyAqCisgKiBNdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBp biB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJvbSBzeXN0ZW0KKyAqIGNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CisgKiBjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBv bmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aAorICogZXRjKSBsb29raW5nIG9ubHkgYXQg dGhlIHBhcnNlIG5vZGUuCisgKgorICogRGVwYXJzZSBvYmplY3QgdHJlZSBpcyBjcmVhdGVkIGJ5 IHVzaW5nOgorICogCWEpIG5ld19vYmp0cmVlKCJrbm93IGNvbnRlbnRzIikgd2hlcmUgdGhlIGNv bXBsZXRlIHRyZWUgY29udGVudCBpcyBrbm93biBvcgorICogICAgIHRoZSBpbml0aWFsIHRyZWUg Y29udGVudCBpcyBrbm93bi4KKyAqIAliKSBuZXdfb2JqdHJlZSgiIikgZm9yIHRoZSBzeW50YXgg d2hlcmUgdGhlIG9iamVjdCB0cmVlIHdpbGwgYmUgZGVyaXZlZAorICogICAgIGJhc2VkIG9uIHNv bWUgY29uZGl0aW9uYWwgY2hlY2tzLgorICogCWMpIG5ld19vYmp0cmVlX1ZBIHdoZXJlIHRoZSBj b21wbGV0ZSB0cmVlIGNhbiBiZSBkZXJpdmVkIHVzaW5nIHNvbWUgZml4ZWQKKyAqICAgICBjb250 ZW50IGFuZC9vciBzb21lIHZhcmlhYmxlIGFyZ3VtZW50cy4KKyAqCisgKiBJREVOVElGSUNBVElP TgorICoJICBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAiYWNjZXNz L2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCisjaW5jbHVkZSAiYWNjZXNz L3RhYmxlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX2FtLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hZ2dyZWdhdGUuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY2FzdC5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25z dHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb252ZXJzaW9uLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2V4dGVuc2lvbi5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2ZvcmVpZ25fc2VydmVyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0 cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKKyNpbmNsdWRlICJjYXRhbG9n L3BnX2xhcmdlb2JqZWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJh dG9yLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfcG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19yYW5nZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3N0YXRp c3RpY19leHQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyYW5zZm9ybS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfdHNfY29uZmlnLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19kaWN0Lmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19wYXJzZXIuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bn X3RzX3RlbXBsYXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ191c2VyX21hcHBpbmcuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9kZWZyZW0uaCIK KyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxl c3BhY2UuaCIKKyNpbmNsdWRlICJmb3JlaWduL2ZvcmVpZ24uaCIKKyNpbmNsdWRlICJmdW5jYXBp LmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3Mu aCIKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL29w dGltaXplci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCisjaW5jbHVkZSAicmV3 cml0ZS9yZXdyaXRlSGFuZGxlci5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNp bmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2lu Y2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5jbHVk ZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyNpbmNsdWRl ICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1 dGlscy9zeXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRoZSBnZW5lcmF0ZWQg anNvbmIgc3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VTVElNQVRFRF9MRU4gMTI4CisKKy8qCisg KiBCZWZvcmUgdGhleSBhcmUgdHVybmVkIGludG8gSlNPTkIgcmVwcmVzZW50YXRpb24sIGVhY2gg Y29tbWFuZCBpcworICogcmVwcmVzZW50ZWQgYXMgYW4gb2JqZWN0IHRyZWUsIHVzaW5nIHRoZSBz dHJ1Y3RzIGJlbG93LgorICovCit0eXBlZGVmIGVudW0KK3sKKwlPYmpUeXBlTnVsbCwKKwlPYmpU eXBlQm9vbCwKKwlPYmpUeXBlU3RyaW5nLAorCU9ialR5cGVBcnJheSwKKwlPYmpUeXBlSW50ZWdl ciwKKwlPYmpUeXBlRmxvYXQsCisJT2JqVHlwZU9iamVjdAorfSBPYmpUeXBlOworCisvKgorICog UmVwcmVzZW50IHRoZSBjb21tYW5kIGFzIGFuIG9iamVjdCB0cmVlLgorICovCit0eXBlZGVmIHN0 cnVjdCBPYmpUcmVlCit7CisJc2xpc3RfaGVhZAlwYXJhbXM7CQkJLyogT2JqZWN0IHRyZWUgcGFy YW1ldGVycyAqLworCWludAkJCW51bVBhcmFtczsJCS8qIE51bWJlciBvZiBwYXJhbWV0ZXJzIGlu IHRoZSBvYmplY3QgdHJlZSAqLworCVN0cmluZ0luZm8JZm10aW5mbzsJCS8qIEZvcm1hdCBzdHJp bmcgb2YgdGhlIE9ialRyZWUgKi8KKwlib29sCQlwcmVzZW50OwkJLyogSW5kaWNhdGVzIGlmIGJv b2xlYW4gdmFsdWUgc2hvdWxkIGJlIHN0b3JlZCAqLworfSBPYmpUcmVlOworCisvKgorICogQW4g ZWxlbWVudCBvZiBhbiBvYmplY3QgdHJlZSAoT2JqVHJlZSkuCisgKi8KK3R5cGVkZWYgc3RydWN0 IE9iakVsZW0KK3sKKwljaGFyCSAgICpuYW1lOwkJCS8qIE5hbWUgb2Ygb2JqZWN0IGVsZW1lbnQg Ki8KKwlPYmpUeXBlCQlvYmp0eXBlOwkJLyogT2JqZWN0IHR5cGUgKi8KKworCXVuaW9uCisJewor CQlib29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWludDY0CQlpbnRlZ2VyOwor CQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJlZSAgICAqb2JqZWN0OworCQlMaXN0CSAgICphcnJheTsK Kwl9CQkJdmFsdWU7CQkJLyogU3RvcmUgdGhlIG9iamVjdCB2YWx1ZSBiYXNlZCBvbiB0aGUgb2Jq ZWN0CisJCQkJCQkJCSAqIHR5cGUgKi8KKwlzbGlzdF9ub2RlCW5vZGU7CQkJLyogVXNlZCBpbiBj b252ZXJ0aW5nIGJhY2sgdG8gT2JqRWxlbQorCQkJCQkJCQkgKiBzdHJ1Y3R1cmUgKi8KK30gT2Jq RWxlbTsKKworLyoKKyAqIFJlZHVjZSBzb21lIHVubmVjZXNzYXJ5IHN0cmluZ3MgZnJvbSB0aGUg b3V0cHV0IGpzb24gd2hlbiB2ZXJib3NlCisgKiBhbmQgInByZXNlbnQiIG1lbWJlciBpcyBmYWxz ZS4gVGhpcyBtZWFucyB0aGVzZSBzdHJpbmdzIHdvbid0IGJlIG1lcmdlZCBpbnRvCisgKiB0aGUg bGFzdCBEREwgY29tbWFuZC4KKyAqLworYm9vbAkJdmVyYm9zZSA9IHRydWU7CisKK3N0YXRpYyB2 b2lkIGFwcGVuZF9hcnJheV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgTGlz dCAqYXJyYXkpOworc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xfb2JqZWN0KE9ialRyZWUgKnRyZWUs IGNoYXIgKnN1Yl9mbXQsIGJvb2wgdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpOworc3RhdGljIHZvaWQgYXBwZW5kX29i amVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgT2JqVHJlZSAqdmFsdWUp Oworc3RhdGljIGNoYXIgKmFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0 cmVlLCBjaGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9wcmVtYWRlX29iamVjdChP YmpUcmVlICp0cmVlLCBPYmpFbGVtICplbGVtKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmdf b2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKm5hbWUsCisJCQkJCQkJ CSBjaGFyICp2YWx1ZSk7CitzdGF0aWMgdm9pZCBmb3JtYXRfdHlwZV9kZXRhaWxlZChPaWQgdHlw ZV9vaWQsIGludDMyIHR5cGVtb2QsCisJCQkJCQkJCSBPaWQgKm5zcGlkLCBjaGFyICoqdHlwbmFt ZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCQkJCSBib29sICp0eXBhcnJheSk7CitzdGF0aWMg T2JqRWxlbSAqbmV3X29iamVjdChPYmpUeXBlIHR5cGUsIGNoYXIgKm5hbWUpOworc3RhdGljIE9i alRyZWUgKm5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lkIG9iamVj dElkKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7 CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2Jqcywu Li4pOworc3RhdGljIEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRy ZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVm X2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJ CQkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCQkJCSBjaGFyICoqcmVsb3B0aW9ucywK KwkJCQkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCQkJCSBjaGFyICoqd2hlcmVDbGF1 c2UpOworc3RhdGljIGNoYXIgKlJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWws IEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJCQkJCQkgIExpc3QgKmRwY29udGV4dCwgTGlzdCAqKmV4 cHJzKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0 aW9uLCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCQkJCQkgIENvbHVtbkRl ZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoqZXhwcnMpOworc3RhdGljIE9ialRyZWUg KmRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29s IGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMo QWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfRGVmRWxl bShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNl X09uQ29tbWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbik7CitzdGF0aWMgT2JqVHJlZSAq ZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7CisKK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ2FjaGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRh LCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFf Q3ljbGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVw YXJzZV9TZXFfTWludmFsdWUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfTWF4dmFsdWUoRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChpbnQ2NCBsYXN0X3ZhbHVlKTsKK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0 YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2Vx X0FzKERlZkVsZW0gKmVsZW0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVf U3RvcmFnZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfVHlwZV9SZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUg T2JqRWxlbSAqZGVwYXJzZV9UeXBlX1NlbmQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZvcm1fcGdfdHlwZSB0eXBG b3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9y bV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVf QW5hbHl6ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfVHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlz dCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBh cnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMs IExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUp OworCisvKgorICogQXBwZW5kIHByZXNlbnQgYXMgZmFsc2UgdG8gYSB0cmVlLgorICovCitzdGF0 aWMgdm9pZAorYXBwZW5kX25vdF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCit7CisJYXBwZW5kX2Jv b2xfb2JqZWN0KHRyZWUsICJwcmVzZW50IiwgZmFsc2UpOworfQorCisvKgorICogQXBwZW5kIGFu IGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJy YXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQorewor CU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1 Yl9mbXQpOworCisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlp ZiAoIXZlcmJvc2UpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBSZW1vdmUgZWxlbWVu dHMgd2hlcmUgcHJlc2VudCBmbGFnIGlzIGZhbHNlICovCisJCWZvcmVhY2gobGMsIGFycmF5KQor CQl7CisJCQlPYmpFbGVtICAgICplbGVtID0gKE9iakVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJ QXNzZXJ0KGVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCB8fAorCQkJCSAgIGVsZW0tPm9i anR5cGUgPT0gT2JqVHlwZVN0cmluZyk7CisKKwkJCWlmICghZWxlbS0+dmFsdWUub2JqZWN0LT5w cmVzZW50ICYmCisJCQkJZWxlbS0+b2JqdHlwZSA9PSBPYmpUeXBlT2JqZWN0KQorCQkJCWFycmF5 ID0gZm9yZWFjaF9kZWxldGVfY3VycmVudChhcnJheSwgbGMpOworCQl9CisKKwl9CisKKwkvKiBD aGVjayBmb3IgZW1wdHkgbGlzdCBhZnRlciByZW1vdmluZyBlbGVtZW50cyAqLworCWlmIChsaXN0 X2xlbmd0aChhcnJheSkgPT0gMCkKKwkJcmV0dXJuOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRf b2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19v YmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZhbHVlLmFycmF5ID0g YXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAq IEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZh bHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lID0gc3Vi X2ZtdDsKKwlib29sCQlpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFzc2VydChzdWJfZm10 KTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMgJ3ByZXNlbnQnIGFu ZCBpZiB5ZXMsIHN0b3JlIHRoZSBib29sZWFuCisJICogdmFsdWUKKwkgKi8KKwlpZiAoc3RyY21w KHN1Yl9mbXQsICJwcmVzZW50IikgPT0gMCkKKwl7CisJCWlzX3ByZXNlbnRfZmxhZyA9IHRydWU7 CisJCXRyZWUtPnByZXNlbnQgPSB2YWx1ZTsKKwl9CisKKwlpZiAoIXZlcmJvc2UgJiYgIXRyZWUt PnByZXNlbnQpCisJCXJldHVybjsKKworCWlmICghaXNfcHJlc2VudF9mbGFnKQorCQlvYmplY3Rf bmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKwor CXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlQm9vbCwgb2JqZWN0X25hbWUpOworCXBhcmFtLT52 YWx1ZS5ib29sZWFuID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFt KTsKK30KKworLyoKKyAqIEFwcGVuZCB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZyB0byB0aGUgT2Jq VHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9mb3JtYXRfc3RyaW5nKE9ialRyZWUgKnRy ZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJaW50CQkJbGVuOworCWNoYXIJICAgKmZtdDsKKworCWlm ICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZtdCA9IHRyZWUtPmZtdGlu Zm8tPmRhdGE7CisJbGVuID0gdHJlZS0+Zm10aW5mby0+bGVuOworCisJLyogQWRkIGEgc2VwYXJh dG9yIGlmIG5lY2Vzc2FyeSAqLworCWlmIChsZW4gPiAwICYmIGZtdFtsZW4gLSAxXSAhPSAnICcp CisJCWFwcGVuZFN0cmluZ0luZm9TcGFjZXModHJlZS0+Zm10aW5mbywgMSk7CisKKwlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKHRyZWUtPmZtdGluZm8sIHN1Yl9mbXQpOworfQorCisvKgorICogQXBw ZW5kIGEgTlVMTCBvYmplY3QgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX251 bGxfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQpCit7CisJY2hhcgkgICAqb2Jq ZWN0X25hbWU7CisKKwlBc3NlcnQoc3ViX2ZtdCk7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVy bjsKKworCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUs IHN1Yl9mbXQpOworCisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIG5ld19vYmplY3QoT2Jq VHlwZU51bGwsIG9iamVjdF9uYW1lKSk7Cit9CisKKy8qCisgKiBBcHBlbmQgYW4gb2JqZWN0IHBh cmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfb2JqZWN0X29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBPYmpUcmVlICp2YWx1ZSkKK3sKKwlPYmpF bGVtICAgICpwYXJhbTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10 KTsKKworCWlmICghdmVyYm9zZSAmJiAhdmFsdWUtPnByZXNlbnQpCisJCXJldHVybjsKKworCW9i amVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQp OworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIG9iamVjdF9uYW1lKTsKKwlw YXJhbS0+dmFsdWUub2JqZWN0ID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUs IHBhcmFtKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgb2JqZWN0IG5hbWUgd2hpY2ggaXMgZXh0 cmFjdGVkIGZyb20gdGhlIGlucHV0ICIqJXtuYW1lWzouXX0qIgorICogc3R5bGUgc3RyaW5nLiBB bmQgYXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpUcmVlLgorICovCitz dGF0aWMgY2hhciAqCithcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlTdHJpbmdJbmZvRGF0YSBvYmplY3RfbmFtZTsKKwljb25z dCBjaGFyICplbmRfcHRyLCAqc3RhcnRfcHRyOworCWludCAgICAgICAgIGxlbmd0aDsKKwljaGFy ICAgICAgICAqdG1wX3N0cjsKKworCWlmIChzdWJfZm10ID09IE5VTEwgfHwgdHJlZS0+Zm10aW5m byA9PSBOVUxMKQorCQlyZXR1cm4gc3ViX2ZtdDsKKworCWluaXRTdHJpbmdJbmZvKCZvYmplY3Rf bmFtZSk7CisKKwlzdGFydF9wdHIgPSBzdHJjaHIoc3ViX2ZtdCwgJ3snKTsKKwllbmRfcHRyID0g c3RyY2hyKHN1Yl9mbXQsICc6Jyk7CisJaWYgKGVuZF9wdHIgPT0gTlVMTCkKKwkJZW5kX3B0ciA9 IHN0cmNocihzdWJfZm10LCAnfScpOworCisJaWYgKHN0YXJ0X3B0ciAhPSBOVUxMICYmIGVuZF9w dHIgIT0gTlVMTCkKKwl7CisJCWxlbmd0aCA9IGVuZF9wdHIgLSBzdGFydF9wdHIgLSAxOworCQl0 bXBfc3RyID0gKGNoYXIgKikgcGFsbG9jKGxlbmd0aCArIDEpOworCQlzdHJuY3B5KHRtcF9zdHIs IHN0YXJ0X3B0ciArIDEsIGxlbmd0aCk7CisJCXRtcF9zdHJbbGVuZ3RoXSA9ICdcMCc7CisJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoJm9iamVjdF9uYW1lLCB0bXBfc3RyKTsKKwkJcGZyZWUodG1w X3N0cik7CisJfQorCisJaWYgKG9iamVjdF9uYW1lLmxlbiA9PSAwKQorCQllbG9nKEVSUk9SLCAi b2JqZWN0IG5hbWUgbm90IGZvdW5kIik7CisKKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0cmVlLCBz dWJfZm10KTsKKworCXJldHVybiBvYmplY3RfbmFtZS5kYXRhOworCit9CisKKy8qCisgKiBBcHBl bmQgYSBwcmVhbGxvY2F0ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIGlubGlu ZSB2b2lkCithcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxl bSkKK3sKKwlzbGlzdF9wdXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVsZW0tPm5vZGUpOworCXRy ZWUtPm51bVBhcmFtcysrOworfQorCisvKgorICogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0 byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVl ICp0cmVlLCBjaGFyICpzdWJfZm10LCBjaGFyICogb2JqZWN0X25hbWUsCisJCQkJCSBjaGFyICp2 YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJhbTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlm ICghdmVyYm9zZSAmJiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0 dXJuOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisJcGFyYW0gPSBu ZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuc3Ry aW5nID0gdmFsdWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKwor LyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSByZXR1cm4g ZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6CisgKgorICogLSBuc3BpZCBp cyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1zdGFuZGFyZCB0eXBlcyB3aGljaCBo YXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0dXJuIEludmFsaWRPaWQ7IHRoZSBj YWxsZXIgaXMgZXhwZWN0ZWQgdG8gbm90IHNjaGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBu b3IgYWRkIHF1b3RlcyB0byB0aGUgdHlwZSBuYW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5 cG5hbWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5hbWUsIHdpdGhvdXQgcXVvdGVzCisgKgorICogLSB0 eXBlbW9kc3RyIGlzIHNldCB0byB0aGUgdHlwZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRo IHBhcmVudGhlc2VzCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhlciBbXXMgbXVz dCBiZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBuYW1lcyB0byB0 aGVpciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUgY2FzZXMgb2Yg dHlwZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1h dF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAq bnNwaWQsIGNoYXIgKip0eXBlbmFtZSwgY2hhciAqKnR5cGVtb2RzdHIsCisJCQkJCSBib29sICp0 eXBlYXJyYXkpCit7CisJSGVhcFR1cGxlCXR1cGxlOworCUZvcm1fcGdfdHlwZSB0eXBlZm9ybTsK KwlPaWQJCQlhcnJheV9iYXNlX3R5cGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBF T0lELCBPYmplY3RJZEdldERhdHVtKHR5cGVfb2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0 aCBPSUQgJXUiLCB0eXBlX29pZCk7CisKKwl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNU UlVDVCh0dXBsZSk7CisKKwkvKgorCSAqIENoZWNrIGlmIGl0J3MgYSByZWd1bGFyICh2YXJpYWJs ZSBsZW5ndGgpIGFycmF5IHR5cGUuICBBcyBhYm92ZSwKKwkgKiBmaXhlZC1sZW5ndGggYXJyYXkg dHlwZXMgc3VjaCBhcyAibmFtZSIgc2hvdWxkbid0IGdldCBkZWNvbnN0cnVjdGVkLgorCSAqLwor CWFycmF5X2Jhc2VfdHlwZSA9IHR5cGVmb3JtLT50eXBlbGVtOworCisJKnR5cGVhcnJheSA9IChJ c1RydWVBcnJheVR5cGUodHlwZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9yYWdlICE9IFRZUFNU T1JBR0VfUExBSU4pOworCisJaWYgKCp0eXBlYXJyYXkpCisJeworCQkvKiBTd2l0Y2ggb3VyIGF0 dGVudGlvbiB0byB0aGUgYXJyYXkgZWxlbWVudCB0eXBlICovCisJCVJlbGVhc2VTeXNDYWNoZSh0 dXBsZSk7CisJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0RGF0 dW0oYXJyYXlfYmFzZV90eXBlKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJ CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdHlwZSB3aXRoIE9JRCAldSIs IHR5cGVfb2lkKTsKKworCQl0eXBlZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0dXBs ZSk7CisJCXR5cGVfb2lkID0gYXJyYXlfYmFzZV90eXBlOworCX0KKworCS8qCisJICogU3BlY2lh bC1jYXNlIGNyb2NrIGZvciB0eXBlcyB3aXRoIHN0cmFuZ2UgdHlwbW9kIHJ1bGVzIHdoZXJlIHdl IHB1dAorCSAqIHR5cGVtb2QgYXQgdGhlIG1pZGRsZSBvZiBuYW1lIChlLmcuIFRJTUUoNikgd2l0 aCB0aW1lIHpvbmUpLiBXZSBjYW5ub3QKKwkgKiBzY2hlbWEtcXVhbGlmeSBub3IgYWRkIHF1b3Rl cyB0byB0aGUgdHlwZSBuYW1lIGluIHRoZXNlIGNhc2VzLgorCSAqLworCSpuc3BpZCA9IEludmFs aWRPaWQ7CisKKwlzd2l0Y2ggKHR5cGVfb2lkKQorCXsKKwkJY2FzZSBJTlRFUlZBTE9JRDoKKwkJ CSp0eXBlbmFtZSA9IHBzdHJkdXAoIklOVEVSVkFMIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1F U1RBTVBUWk9JRDoKKwkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkqdHlwZW5hbWUgPSBwc3RyZHVw KCJUSU1FU1RBTVAgV0lUSCBUSU1FIFpPTkUiKTsKKwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2Us IFdJVEggVFogaXMgYWRkZWQgYnkgdHlwbW9kLiAqLworCQkJCSp0eXBlbmFtZSA9IHBzdHJkdXAo IlRJTUVTVEFNUCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QT0lEOgorCQkJKnR5cGVu YW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1FVFpPSUQ6 CisJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRSBXSVRI IFRJTUUgWk9ORSIpOworCQkJZWxzZQorCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRl ZCBieSB0eXBtb2QuICovCisJCQkJKnR5cGVuYW1lID0gcHN0cmR1cCgiVElNRSIpOworCQkJYnJl YWs7CisJCWNhc2UgVElNRU9JRDoKKwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoIlRJTUUiKTsKKwkJ CWJyZWFrOworCQlkZWZhdWx0OgorCisJCQkvKgorCQkJICogTm8gYWRkaXRpb25hbCBwcm9jZXNz aW5nIGlzIHJlcXVpcmVkIGZvciBvdGhlciB0eXBlcywgc28gZ2V0CisJCQkgKiB0aGUgdHlwZSBu YW1lIGFuZCBzY2hlbWEgZGlyZWN0bHkgZnJvbSB0aGUgY2F0YWxvZy4KKwkJCSAqLworCQkJKm5z cGlkID0gdHlwZWZvcm0tPnR5cG5hbWVzcGFjZTsKKwkJCSp0eXBlbmFtZSA9IHBzdHJkdXAoTmFt ZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkpOworCX0KKworCWlmICh0eXBlbW9kID49IDApCisJCSp0 eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQp OworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0dXBsZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBv ZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8KK3N0YXRpYyBjaGFyICoKK2dl dF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sKKwlzd2l0Y2ggKHBlcnNpc3Rl bmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgorCQkJcmV0dXJuICJURU1QT1JB UlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgorCQkJcmV0dXJuICJVTkxPR0dF RCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgorCQkJcmV0dXJuICIiOworCQlk ZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVyc2lzdGVuY2UgbWFya2luZyAl YyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCQkvKiBtYWtlIGNvbXBpbGVyIGhhcHB5 ICovCisJfQorfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yg dGhlIGdpdmVuIHN0b3JhZ2V0eXBlIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGNoYXIgKgor Z2V0X3R5cGVfc3RvcmFnZShjaGFyIHN0b3JhZ2V0eXBlKQoreworCXN3aXRjaCAoc3RvcmFnZXR5 cGUpCisJeworCQljYXNlICdwJzoKKwkJCXJldHVybiAicGxhaW4iOworCQljYXNlICdlJzoKKwkJ CXJldHVybiAiZXh0ZXJuYWwiOworCQljYXNlICd4JzoKKwkJCXJldHVybiAiZXh0ZW5kZWQiOwor CQljYXNlICdtJzoKKwkJCXJldHVybiAibWFpbiI7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAiaW52YWxpZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHN0b3JhZ2V0eXBlKTsKKwl9Cit9CisK Ky8qCisgKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpFbGVtICoK K25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQoreworCU9iakVsZW0gICAgKnBh cmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUg PSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJldHVybiBwYXJhbTsKK30KKwor LyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBPYmpF bGVtICoKK25ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKQoreworCU9iakVsZW0gICAg KnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVPYmplY3QsIE5VTEwpOworCXBh cmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyoKKyAq IEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlKGNoYXIgKmZtdCkKK3sKKwlPYmpUcmVl ICAgICpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxsb2MwKHNpemVvZihPYmpUcmVlKSk7CisJcGFy YW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlp ZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZvID0gbWFrZVN0cmluZ0luZm8oKTsKKwkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZtdGluZm8sIGZtdCk7CisJfQorCisJcmV0dXJu IHBhcmFtczsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5k ICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVtYV9uYW1lIiBhbmQgIm9ial9u YW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAqIGNvcnJlc3BvbmRzIHRvIGEg dGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgorICoKKyAqIFRoZSBkaWZmZXJl bmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMgd2hldGhlciB0aGUgb2JqX25h bWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Igbm90LCB3aGljaCBpcyBu b3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJucyBpdHNlbGYgd2l0aDsg dGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQsIGNoYXIgKm5hbWUpCit7 CisJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVzcGFjZTsKKworCWlmIChp c0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBwc3RyZHVwKCJwZ190ZW1w Iik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUobnNwaWQpOworCisJ cXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJCQkgICAic2NoZW1hbmFt ZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICAib2JqbmFtZSIsIE9ialR5 cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoK KyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMsIHdp dGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2JqSWQuCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPaWQgY2xhc3NJZCwgT2lk IG9iamVjdElkKQoreworCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwlSZWxhdGlvbgljYXRhbG9n OworCUhlYXBUdXBsZQljYXRvYmo7CisJRGF0dW0JCW9ial9uc3A7CisJRGF0dW0JCW9ial9uYW1l OworCUF0dHJOdW1iZXIJQW51bV9uYW1lOworCUF0dHJOdW1iZXIJQW51bV9uYW1lc3BhY2U7CisJ QXR0ck51bWJlcglBbnVtX29pZCA9IGdldF9vYmplY3RfYXR0bnVtX29pZChjbGFzc0lkKTsKKwli b29sCQlpc251bGw7CisKKwljYXRhbG9nID0gdGFibGVfb3BlbihjbGFzc0lkLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJY2F0b2JqID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBB bnVtX29pZCwgb2JqZWN0SWQpOworCWlmICghY2F0b2JqKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igb2JqZWN0IHdpdGggT0lEICV1IG9mIGNhdGFsb2cgXCIlc1wiIiwK KwkJCSBvYmplY3RJZCwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoY2F0YWxvZykpOworCUFudW1f bmFtZSA9IGdldF9vYmplY3RfYXR0bnVtX25hbWUoY2xhc3NJZCk7CisJQW51bV9uYW1lc3BhY2Ug PSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoY2xhc3NJZCk7CisKKwlvYmpfbnNwID0gaGVh cF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxv ZyksCisJCQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJudWxs IG5hbWVzcGFjZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJb2JqX25hbWUgPSBoZWFw X2dldGF0dHIoY2F0b2JqLCBBbnVtX25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJ CQkJCQkgICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAibnVsbCBhdHRy aWJ1dGUgbmFtZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJcXVhbGlmaWVkID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqX25zcCksCisJCQkJCQkJ CQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpfbmFtZSkpKTsKKwl0YWJsZV9jbG9zZShjYXRh bG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAq IEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGljIE9i alRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQor eworCU9pZAkJCXR5cG5zcGlkOworCWNoYXIJICAgKnR5cGVfbnNwOworCWNoYXIJICAgKnR5cGVf bmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWJvb2wJCXR5cGVfYXJyYXk7CisK Kwlmb3JtYXRfdHlwZV9kZXRhaWxlZCh0eXBlSWQsIHR5cG1vZCwKKwkJCQkJCSAmdHlwbnNwaWQs ICZ0eXBlX25hbWUsICZ0eXBtb2RzdHIsICZ0eXBlX2FycmF5KTsKKworCWlmIChPaWRJc1ZhbGlk KHR5cG5zcGlkKSkKKwkJdHlwZV9uc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcCh0eXBu c3BpZCk7CisJZWxzZQorCQl0eXBlX25zcCA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19v Ymp0cmVlX1ZBKE5VTEwsIDQsCisJCQkJCQkgICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywg dHlwZV9uc3AsCisJCQkJCQkgICJ0eXBlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHR5cGVfbmFtZSwK KwkJCQkJCSAgInR5cG1vZCIsIE9ialR5cGVTdHJpbmcsIHR5cG1vZHN0ciwKKwkJCQkJCSAgInR5 cGFycmF5IiwgT2JqVHlwZUJvb2wsIHR5cGVfYXJyYXkpOworfQorCisvKgorICogQWxsb2NhdGUg YSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUgcGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZl cnNpb24uCisgKgorICogVGhlICJmbXQiIGFyZ3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEg ImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0 aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRzIHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisg KiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9tIHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBt dXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVu OyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRlZ2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2Jq VHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIgKiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlz dCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBlT2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFu ZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBlICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNp b24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAq IGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24n dCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgor ICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3RzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdf b2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlICAgICp0 cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJaTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2 ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0cmVlID0gbmV3X29ianRyZWUoZm10KTsKKwor CS8qIEFuZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQoYXJncywgbnVt b2Jqcyk7CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNoYXIJICAgKm5h bWU7CisJCU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0gICAgKmVsZW07CisKKwkJbmFtZSA9IHZh X2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5cGUpOworCQll bGVtID0gbmV3X29iamVjdCh0eXBlLCBOVUxMKTsKKworCQkvKgorCQkgKiBGb3IgYWxsIHBhcmFt IHR5cGVzIG90aGVyIHRoYW4gT2JqVHlwZU51bGwsIHRoZXJlIG11c3QgYmUgYSB2YWx1ZSBpbgor CQkgKiB0aGUgdmFyYXJncy4gRmV0Y2ggaXQgYW5kIGFkZCB0aGUgZnVsbHkgZm9ybWVkIHN1Ym9i amVjdCBpbnRvIHRoZQorCQkgKiBtYWluIG9iamVjdC4KKwkJICovCisJCXN3aXRjaCAodHlwZSkK KwkJeworCQkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCQkvKiBOdWxsIHBhcmFtcyBkb24ndCBoYXZl IGEgdmFsdWUgKG9idmlvdXNseSkgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUJvb2w6 CisJCQkJZWxlbS0+dmFsdWUuYm9vbGVhbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJCWJyZWFr OworCQkJY2FzZSBPYmpUeXBlU3RyaW5nOgorCQkJCWVsZW0tPnZhbHVlLnN0cmluZyA9IHZhX2Fy ZyhhcmdzLCBjaGFyICopOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQkJ ZWxlbS0+dmFsdWUuYXJyYXkgPSB2YV9hcmcoYXJncywgTGlzdCAqKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbS0+dmFsdWUuaW50ZWdlciA9IHZhX2FyZyhh cmdzLCBpbnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJCQkJZWxlbS0+ dmFsdWUuZmx0ID0gdmFfYXJnKGFyZ3MsIGRvdWJsZSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9i alR5cGVPYmplY3Q6CisJCQkJZWxlbS0+dmFsdWUub2JqZWN0ID0gdmFfYXJnKGFyZ3MsIE9ialRy ZWUgKik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJpbnZhbGlk IE9ialRyZWUgZWxlbWVudCB0eXBlICVkIiwgdHlwZSk7CisJCX0KKworCQllbGVtLT5uYW1lID0g bmFtZTsKKwkJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIGVsZW0pOworCX0KKworCXZhX2Vu ZChhcmdzKTsKKwlyZXR1cm4gdHJlZTsKK30KKworLyoKKyAqIFByb2Nlc3MgdGhlIHByZS1idWls dCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRyZWUgaW50byB0aGUgb3V0cHV0IHBhcnNlCisg KiBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQo SnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlCWtl eTsKKwlKc29uYlZhbHVlCXZhbDsKKworCWlmICh0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJCXJl dHVybjsKKworCS8qIFB1c2ggdGhlIGtleSBmaXJzdCAqLworCWtleS50eXBlID0gamJ2U3RyaW5n OworCWtleS52YWwuc3RyaW5nLnZhbCA9ICJmbXQiOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0 cmxlbihrZXkudmFsLnN0cmluZy52YWwpOworCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0tF WSwgJmtleSk7CisKKwkvKiBUaGVuIHByb2Nlc3MgdGhlIHByZS1idWlsdCBmb3JtYXQgc3RyaW5n ICovCisJdmFsLnR5cGUgPSBqYnZTdHJpbmc7CisJdmFsLnZhbC5zdHJpbmcubGVuID0gdHJlZS0+ Zm10aW5mby0+bGVuOworCXZhbC52YWwuc3RyaW5nLnZhbCA9IHRyZWUtPmZtdGluZm8tPmRhdGE7 CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfVkFMVUUsICZ2YWwpOworfQorCisvKgorICog Q3JlYXRlIGEgSlNPTkIgcmVwcmVzZW50YXRpb24gZnJvbSBhbiBPYmpUcmVlLgorICovCitzdGF0 aWMgSnNvbmIgKgorb2JqdHJlZV90b19qc29uYihPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFs dWUgKnZhbHVlOworCisJdmFsdWUgPSBvYmp0cmVlX3RvX2pzb25iX3JlYyh0cmVlLCBOVUxMKTsK KwlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOworfQorCisvKgorICogSGVscGVyIGZv ciBvYmp0cmVlX3RvX2pzb25iOiBwcm9jZXNzIGFuIGluZGl2aWR1YWwgZWxlbWVudCBmcm9tIGFu IG9iamVjdCBvcgorICogYW4gYXJyYXkgaW50byB0aGUgb3V0cHV0IHBhcnNlIHN0YXRlLgorICov CitzdGF0aWMgdm9pZAorb2JqdHJlZV90b19qc29uYl9lbGVtZW50KEpzb25iUGFyc2VTdGF0ZSAq c3RhdGUsIE9iakVsZW0gKm9iamVjdCwKKwkJCQkJCSBKc29uYkl0ZXJhdG9yVG9rZW4gZWxlbV90 b2tlbikKK3sKKwlKc29uYlZhbHVlCXZhbDsKKworCXN3aXRjaCAob2JqZWN0LT5vYmp0eXBlKQor CXsKKwkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IE9ialR5cGVTdHJpbmc6CisJCQl2YWwudHlwZSA9IGpidlN0cmluZzsKKwkJCXZhbC52YWwuc3Ry aW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0cmluZyk7CisJCQl2YWwudmFsLnN0cmlu Zy52YWwgPSBvYmplY3QtPnZhbHVlLnN0cmluZzsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg ZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVJbnRlZ2VyOgor CQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMp CisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoaW50OF9udW1lcmljLAor CQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdlcikpOworCQkJcHVzaEpzb25iVmFsdWUo JnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUZs b2F0OgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFsLnZhbC5udW1lcmljID0gKE51 bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251 bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNv bmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBP YmpUeXBlQm9vbDoKKwkJCXZhbC50eXBlID0gamJ2Qm9vbDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9 IG9iamVjdC0+dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90 b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkvKiBS ZWN1cnNpdmVseSBhZGQgdGhlIG9iamVjdCBpbnRvIHRoZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAq LworCQkJb2JqdHJlZV90b19qc29uYl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsK KwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJeworCQkJCUxpc3RDZWxsICAg KmNlbGw7CisKKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9BUlJBWSwgTlVM TCk7CisJCQkJZm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJCXsKKwkJCQkJ T2JqRWxlbSAgICAqZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCQlvYmp0cmVlX3RvX2pzb25i X2VsZW1lbnQoc3RhdGUsIGVsZW0sIFdKQl9FTEVNKTsKKwkJCQl9CisJCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBXSkJfRU5EX0FSUkFZLCBOVUxMKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRl ZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwgb2Jq ZWN0LT5vYmp0eXBlKTsKKwkJCWJyZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxw ZXIgZm9yIG9ianRyZWVfdG9fanNvbmIuCisgKi8KK3N0YXRpYyBKc29uYlZhbHVlICoKK29ianRy ZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpCit7 CisJc2xpc3RfaXRlcglpdGVyOworCisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5f T0JKRUNULCBOVUxMKTsKKworCW9ianRyZWVfZm10X3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIHRy ZWUpOworCisJc2xpc3RfZm9yZWFjaChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxl bSAgICAqb2JqZWN0ID0gc2xpc3RfY29udGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsK KwkJSnNvbmJWYWx1ZQlrZXk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50 eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5u YW1lKTsKKwkJa2V5LnZhbC5zdHJpbmcudmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJW YWx1ZSgmc3RhdGUsIFdKQl9LRVksICZrZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFs dWUgYWNjb3JkaW5nIHRvIGl0cyB0eXBlICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChz dGF0ZSwgb2JqZWN0LCBXSkJfVkFMVUUpOworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgm c3RhdGUsIFdKQl9FTkRfT0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9y IENSRUFURSBUQUJMRS9DUkVBVEUgRE9NQUlOIGRlcGFyc2luZy4KKyAqCisgKiBHaXZlbiBhIHRh YmxlIE9JRCBvciBkb21haW4gT0lELCBvYnRhaW4gaXRzIGNvbnN0cmFpbnRzIGFuZCBhcHBlbmQg dGhlbSB0bworICogdGhlIGdpdmVuIGVsZW1lbnRzIGxpc3QuICBUaGUgdXBkYXRlZCBsaXN0IGlz IHJldHVybmVkLgorICoKKyAqIFRoaXMgd29ya3MgZm9yIHR5cGVkIHRhYmxlcywgcmVndWxhciB0 YWJsZXMsIGFuZCBkb21haW5zLgorICoKKyAqIE5vdGUgdGhhdCBDT05TVFJBSU5UX0ZPUkVJR04g Y29uc3RyYWludHMgYXJlIGFsd2F5cyBpZ25vcmVkLgorICovCitzdGF0aWMgTGlzdCAqCitvYnRh aW5Db25zdHJhaW50cyhMaXN0ICplbGVtZW50cywgT2lkIHJlbGF0aW9uSWQsIE9pZCBkb21haW5J ZCkKK3sKKwlSZWxhdGlvbgljb25SZWw7CisJU2NhbktleURhdGEga2V5OworCVN5c1NjYW5EZXNj IHNjYW47CisJSGVhcFR1cGxlCXR1cGxlOworCU9ialRyZWUgICAgKmNvbnN0cjsKKworCS8qIE9u bHkgb25lIG1heSBiZSB2YWxpZCAqLworCUFzc2VydChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpIF4g T2lkSXNWYWxpZChkb21haW5JZCkpOworCisJLyoKKwkgKiBTY2FuIHBnX2NvbnN0cmFpbnQgdG8g ZmV0Y2ggYWxsIGNvbnN0cmFpbnRzIGxpbmtlZCB0byB0aGUgZ2l2ZW4KKwkgKiByZWxhdGlvbi4K KwkgKi8KKwljb25SZWwgPSB0YWJsZV9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NT aGFyZUxvY2spOworCWlmIChPaWRJc1ZhbGlkKHJlbGF0aW9uSWQpKQorCXsKKwkJU2NhbktleUlu aXQoJmtleSwKKwkJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCQlCVEVxdWFs U3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0ocmVsYXRpb25J ZCkpOworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlk VHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisJ ZWxzZQorCXsKKwkJU2NhbktleUluaXQoJmtleSwKKwkJCQkJQW51bV9wZ19jb25zdHJhaW50X2Nv bnR5cGlkLAorCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVj dElkR2V0RGF0dW0oZG9tYWluSWQpKTsKKwkJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihjb25S ZWwsIENvbnN0cmFpbnRUeXBpZEluZGV4SWQsCisJCQkJCQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJmtl eSk7CisJfQorCisJLyoKKwkgKiBGb3IgZWFjaCBjb25zdHJhaW50LCBhZGQgYSBub2RlIHRvIHRo ZSBsaXN0IG9mIHRhYmxlIGVsZW1lbnRzLiAgSW4KKwkgKiB0aGVzZSBub2RlcyB3ZSBpbmNsdWRl IG5vdCBvbmx5IHRoZSBwcmludGFibGUgaW5mb3JtYXRpb24gKCJmbXQiKSwgYnV0CisJICogYWxz byBzZXBhcmF0ZSBhdHRyaWJ1dGVzIHRvIGluZGljYXRlIHRoZSB0eXBlIG9mIGNvbnN0cmFpbnQs IGZvcgorCSAqIGF1dG9tYXRpYyBwcm9jZXNzaW5nLgorCSAqLworCXdoaWxlIChIZWFwVHVwbGVJ c1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlGb3JtX3BnX2Nv bnN0cmFpbnQgY29uc3RyRm9ybTsKKwkJY2hhcgkgICAqY29udHlwZTsKKworCQljb25zdHJGb3Jt ID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKHR1cGxlKTsKKworCQlzd2l0Y2ggKGNv bnN0ckZvcm0tPmNvbnR5cGUpCisJCXsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoKKwkJCQlj b250eXBlID0gImNoZWNrIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9GT1JFSUdO OgorCQkJCWNvbnRpbnVlOwkJLyogbm90IGhlcmUgKi8KKwkJCWNhc2UgQ09OU1RSQUlOVF9QUklN QVJZOgorCQkJCWNvbnR5cGUgPSAicHJpbWFyeSBrZXkiOworCQkJCWJyZWFrOworCQkJY2FzZSBD T05TVFJBSU5UX1VOSVFVRToKKwkJCQljb250eXBlID0gInVuaXF1ZSI7CisJCQkJYnJlYWs7CisJ CQljYXNlIENPTlNUUkFJTlRfVFJJR0dFUjoKKwkJCQljb250eXBlID0gInRyaWdnZXIiOworCQkJ CWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0VYQ0xVU0lPTjoKKwkJCQljb250eXBlID0gImV4 Y2x1c2lvbiI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgY29uc3RyYWludCB0eXBlIik7CisJCX0KKworCQkvKgorCQkgKiAidHlwZSIgYW5k ICJjb250eXBlIiBhcmUgbm90IHBhcnQgb2YgdGhlIHByaW50YWJsZSBvdXRwdXQsIGJ1dCBhcmUK KwkJICogdXNlZnVsIHRvIHByb2dyYW1tYXRpY2FsbHkgZGlzdGluZ3Vpc2ggdGhlc2UgZnJvbSBj b2x1bW5zIGFuZCBhbW9uZworCQkgKiBkaWZmZXJlbnQgY29uc3RyYWludCB0eXBlcy4KKwkJICoK KwkJICogWFhYIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBhbHNvIGxpc3QgdGhlIGNvbHVtbiBuYW1l cyBpbiBhIFBLLCBldGMuCisJCSAqLworCQljb25zdHIgPSBuZXdfb2JqdHJlZV9WQSgiQ09OU1RS QUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsIDQsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImNvbnN0cmFpbnQiLAorCQkJCQkJCQkiY29udHlwZSIsIE9ialR5cGVTdHJpbmcs IGNvbnR5cGUsCisJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJG b3JtLT5jb25uYW1lKSwKKwkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9zdHJpbmcoY29uc3RyRm9ybS0+b2lkKSk7CisJCWVs ZW1lbnRzID0gbGFwcGVuZChlbGVtZW50cywgbmV3X29iamVjdF9vYmplY3QoY29uc3RyKSk7CisJ fQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShjb25SZWwsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBSZXR1cm4gYW4g aW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW50byBzZXZlcmFsIHBpZWNlcy4KKyAqCisgKiBBIGxh cmdlIGFtb3VudCBvZiBjb2RlIGlzIGR1cGxpY2F0ZWQgZnJvbSAgcGdfZ2V0X2luZGV4ZGVmX3dv cmtlciwgYnV0CisgKiBjb250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3VnaCB0aGF0IGl0IGRv ZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgorICovCitzdGF0aWMg dm9pZAorcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlkLAorCQkJCQkJIGNo YXIgKippbmRleF9hbSwKKwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJCQkJCSBjaGFyICoq cmVsb3B0aW9ucywKKwkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJCSBjaGFyICoqd2hl cmVDbGF1c2UpCit7CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJaHRfaWR4cmVsOwor CUhlYXBUdXBsZQlodF9hbTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlGb3JtX3BnX2NsYXNz IGlkeHJlbHJlYzsKKwlGb3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0aW5lICphbXJvdXRp bmU7CisJTGlzdAkgICAqaW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhwcl9pdGVtOworCUxp c3QJICAgKmNvbnRleHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5bm87CisJRGF0dW0J CWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1bQkJaW5kb3B0aW9u RGF0dW07CisJYm9vbAkJaXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxhdGlvbjsKKwlvaWR2 ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJU3RyaW5nSW5mb0Rh dGEgZGVmaW5pdGlvbkJ1ZjsKKworCSp0YWJsZXNwYWNlID0gTlVMTDsKKwkqd2hlcmVDbGF1c2Ug PSBOVUxMOworCisJLyogRmV0Y2ggdGhlIHBnX2luZGV4IHR1cGxlIGJ5IHRoZSBPaWQgb2YgdGhl IGluZGV4ICovCisJaHRfaWR4ID0gU2VhcmNoU3lzQ2FjaGUxKElOREVYUkVMSUQsIE9iamVjdElk R2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHgpKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgaW5kZXggd2l0aCBPSUQgJXUi LCBpbmRleHJlbGlkKTsKKwlpZHhyZWMgPSAoRm9ybV9wZ19pbmRleCkgR0VUU1RSVUNUKGh0X2lk eCk7CisKKwlpbmRyZWxpZCA9IGlkeHJlYy0+aW5kcmVsaWQ7CisJQXNzZXJ0KGluZGV4cmVsaWQg PT0gaWR4cmVjLT5pbmRleHJlbGlkKTsKKworCS8qIE11c3QgZ2V0IGluZGNvbGxhdGlvbiwgaW5k Y2xhc3MsIGFuZCBpbmRvcHRpb24gdGhlIGhhcmQgd2F5ICovCisJaW5kY29sbERhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJICAgQW51bV9wZ19pbmRl eF9pbmRjb2xsYXRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRjb2xsYXRp b24gPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjb2xsRGF0dW0pOworCisJaW5k Y2xhc3NEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJ CQlBbnVtX3BnX2luZGV4X2luZGNsYXNzLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJ aW5kY2xhc3MgPSAob2lkdmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRjbGFzc0RhdHVtKTsK KworCWluZG9wdGlvbkRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwK KwkJCQkJCQkJCSBBbnVtX3BnX2luZGV4X2luZG9wdGlvbiwgJmlzbnVsbCk7CisJQXNzZXJ0KCFp c251bGwpOworCWluZG9wdGlvbiA9IChpbnQydmVjdG9yICopIERhdHVtR2V0UG9pbnRlcihpbmRv cHRpb25EYXR1bSk7CisKKwkvKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4 IHJlbGF0aW9uICovCisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0 SWRHZXREYXR1bShpbmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJl bCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiB3aXRo IE9JRCAldSIsIGluZGV4cmVsaWQpOworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRT VFJVQ1QoaHRfaWR4cmVsKTsKKworCS8qIEZldGNoIHRoZSBwZ19hbSB0dXBsZSBvZiB0aGUgaW5k ZXgnIGFjY2VzcyBtZXRob2QgKi8KKwlodF9hbSA9IFNlYXJjaFN5c0NhY2hlMShBTU9JRCwgT2Jq ZWN0SWRHZXREYXR1bShpZHhyZWxyZWMtPnJlbGFtKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGh0X2FtKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2VzcyBt ZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIGlkeHJlbHJlYy0+cmVsYW0pOworCWFtcmVjID0gKEZv cm1fcGdfYW0pIEdFVFNUUlVDVChodF9hbSk7CisKKwkvKgorCSAqIEdldCB0aGUgaW5kZXggZXhw cmVzc2lvbnMsIGlmIGFueS4gIChOT1RFOiB3ZSBkbyBub3QgdXNlIHRoZSByZWxjYWNoZQorCSAq IHZlcnNpb25zIG9mIHRoZSBleHByZXNzaW9ucyBhbmQgcHJlZGljYXRlLCBiZWNhdXNlIHdlIHdh bnQgdG8gZGlzcGxheQorCSAqIG5vbi1jb25zdC1mb2xkZWQgZXhwcmVzc2lvbnMuKQorCSAqLwor CWlmICghaGVhcF9hdHRpc251bGwoaHRfaWR4LCBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCBOVUxM KSkKKwl7CisJCURhdHVtCQlleHByc0RhdHVtOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKwor CQlleHByc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJ CQkJCSBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwp OworCQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWlu ZGV4cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhw cnNTdHJpbmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVt ID0gbGlzdF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9y KGdldF9yZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZk ZWZpbml0aW9uQnVmKTsKKworCS8qIE91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBz dHJkdXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBG ZXRjaCB0aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhB bVJvdXRpbmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZp bml0aW9uLiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBj YWxsZXIuCisJICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIigi KTsKKwlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBpZHhyZWMtPmluZG5hdHRzOyBrZXlubysrKQor CXsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBpZHhyZWMtPmluZGtleS52YWx1ZXNba2V5bm9dOwor CQlpbnQxNgkJb3B0ID0gaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dOworCQlPaWQJCQlrZXljb2x0 eXBlOworCQlPaWQJCQlrZXljb2xjb2xsYXRpb247CisKKwkJLyogUHJpbnQgSU5DTFVERSB0byBk aXZpZGUga2V5IGFuZCBub24ta2V5IGF0dHJzLiAqLworCQlpZiAoa2V5bm8gPT0gaWR4cmVjLT5p bmRua2V5YXR0cykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1 ZiwgIikgSU5DTFVERSAoIik7CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZygmZGVmaW5pdGlvbkJ1Ziwga2V5bm8gPT0gMCA/ICIiIDogIiwgIik7CisKKwkJaWYgKGF0dG51 bSAhPSAwKQorCQl7CisJCQkvKiBTaW1wbGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICph dHRuYW1lOworCQkJaW50MzIJCWtleWNvbHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRu YW1lKGluZHJlbGlkLCBhdHRudW0sIGZhbHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRlZmluaXRpb25CdWYsIHF1b3RlX2lkZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5 cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBhdHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZr ZXljb2x0eXBtb2QsCisJCQkJCQkJCSAgJmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQor CQl7CisJCQkvKiBFeHByZXNzaW9uYWwgaW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5Owor CQkJY2hhcgkgICAqc3RyOworCisJCQlpZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxv ZyhFUlJPUiwgInRvbyBmZXcgZW50cmllcyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtl eSA9IChOb2RlICopIGxmaXJzdChpbmRleHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5l eHQoaW5kZXhwcnMsIGluZGV4cHJfaXRlbSk7CisKKwkJCS8qIERlcGFyc2UgKi8KKwkJCXN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbihpbmRleGtleSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwor CQkJLyogTmVlZCBwYXJlbnMgaWYgaXQncyBub3QgYSBiYXJlIGZ1bmN0aW9uIGNhbGwgKi8KKwkJ CWlmIChpbmRleGtleSAmJiBJc0EoaW5kZXhrZXksIEZ1bmNFeHByKSAmJgorCQkJCSgoRnVuY0V4 cHIgKikgaW5kZXhrZXkpLT5mdW5jZm9ybWF0ID09IENPRVJDRV9FWFBMSUNJVF9DQUxMKQorCQkJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHN0cik7CisJCQllbHNlCisJ CQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiglcykiLCBzdHIpOworCisJCQlr ZXljb2x0eXBlID0gZXhwclR5cGUoaW5kZXhrZXkpOworCQkJa2V5Y29sY29sbGF0aW9uID0gZXhw ckNvbGxhdGlvbihpbmRleGtleSk7CisJCX0KKworCQkvKiBQcmludCBhZGRpdGlvbmFsIGRlY29y YXRpb24gZm9yIChzZWxlY3RlZCkga2V5IGNvbHVtbnMsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlp ZiAoa2V5bm8gPCBpZHhyZWMtPmluZG5rZXlhdHRzKQorCQl7CisJCQlPaWQgaW5kY29sbCA9IGlu ZGNvbGxhdGlvbi0+dmFsdWVzW2tleW5vXTsKKwkJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQor CQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJ CQkJCWdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKChpbmRjb2xsKSkpOworCisJCQkvKiBBZGQgdGhl IG9wZXJhdG9yIGNsYXNzIG5hbWUsIGV2ZW4gaWYgZGVmYXVsdCAqLworCQkJZ2V0X29wY2xhc3Nf bmFtZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYp OworCisJCQkvKiBBZGQgb3B0aW9ucyBpZiByZWxldmFudCAqLworCQkJaWYgKGFtcm91dGluZS0+ YW1jYW5vcmRlcikKKwkJCXsKKwkJCQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9yZGVyaW5nLCBy ZXBvcnQgREVTQyBhbmQgTlVMTFMgb3B0cyAqLworCQkJCWlmIChvcHQgJiBJTkRPUFRJT05fREVT QykKKwkJCQl7CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIg REVTQyIpOworCQkJCQkvKiBOVUxMUyBGSVJTVCBpcyB0aGUgZGVmYXVsdCBpbiB0aGlzIGNhc2Ug Ki8KKwkJCQkJaWYgKCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIpOworCQkJCX0K KwkJCQllbHNlCisJCQkJeworCQkJCQlpZiAob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKQor CQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJT VCIpOworCQkJCX0KKwkJCX0KKworCQkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJl OyBkbyB3ZSBuZWVkIGFueXRoaW5nPyAqLworCQl9CisJfQorCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmRlZmluaXRpb25CdWYsICIpIik7CisJKmRlZmluaXRpb24gPSBkZWZpbml0aW9uQnVmLmRh dGE7CisKKwkvKiBPdXRwdXQgcmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0gZmxhdHRlbl9y ZWxvcHRpb25zKGluZGV4cmVsaWQpOworCisJLyogT3V0cHV0IHRhYmxlc3BhY2UgKi8KKwl7CisJ CU9pZAkJCXRibHNwYzsKKworCQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2UoaW5kZXhyZWxp ZCk7CisJCWlmIChPaWRJc1ZhbGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9IHBzdHJkdXAo cXVvdGVfaWRlbnRpZmllcihnZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsKKwl9CisKKwkv KiBSZXBvcnQgaW5kZXggcHJlZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxs KGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAgKm5v ZGU7CisJCURhdHVtCQlwcmVkRGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyog Q29udmVydCB0ZXh0IHN0cmluZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5k cHJlZCwgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHRE YXR1bUdldENTdHJpbmcocHJlZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9k ZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLwor CQkqd2hlcmVDbGF1c2UgPSBkZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2Us IGZhbHNlKTsKKwl9CisKKwkvKiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgp OworCVJlbGVhc2VTeXNDYWNoZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7 Cit9CisKKy8qCisgKiBPYnRhaW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBn aXZlbiBjb2x1bW4gb2YgdGhlIGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUg c2V0IGEgY29ycmVjdCBkZXBhcnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0 aW9uR2V0Q29sdW1uRGVmYXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3Qg KmRwY29udGV4dCwKKwkJCQkJCSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZQkgICAqZGVmdmFsOwor CWNoYXIJICAgKmRlZnN0cjsKKworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwg YXR0bm8pOworCWRlZnN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwg ZmFsc2UsIGZhbHNlKTsKKworCS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJl cGxpY2F0aW9uIHNhZmV0eSBjaGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBl bmQoKmV4cHJzLCBkZWZ2YWwpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIE9idGFp biB0aGUgZGVwYXJzZWQgcGFydGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiB0 YWJsZS4KKyAqLworc3RhdGljIGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChPaWQg cmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVtCQlib3VuZERhdHVtOworCWJvb2wJ CWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShS RUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQgJXUiLCByZWxp ZCk7CisKKwlib3VuZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsCisJCQkJ CQkJCSBBbnVtX3BnX2NsYXNzX3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251bGwpOworCisJ ZGVwYXJzZWQgPSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkgICBD U3RyaW5nR2V0VGV4dERhdHVtKFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1bSkpLAorCQkJ CQkJCQkgICByZWxpZCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIFRl eHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQpOworfQorCisvKgorICogRGVwYXJzZSBhIENvbHVt bkRlZiBub2RlIHdpdGhpbiBhIHJlZ3VsYXIgKG5vbi10eXBlZCkgdGFibGUgY3JlYXRpb24uCisg KgorICogTk9UIE5VTEwgY29uc3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBl bWl0dGVkIGRpcmVjdGx5IGluIHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0 aW5lOyBvdGhlciBjb25zdHJhaW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhl IGluZm8gaW4gdGhlIHBhcnNlIG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkpLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiAle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbXByZXNzaW9ufXMgJXtk ZWZhdWx0fXMgJXtub3RfbnVsbH1zICV7Y29sbGF0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9Db2x1bW5EZWYoUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmRwY29udGV4dCwg Ym9vbCBjb21wb3NpdGUsCisJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwg TGlzdCAqKmV4cHJzKQoreworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2Jq OworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1cGxl CWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7CisJ aW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51bGw7 CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5oZXJpdGVkIGNvbHVtbnMgd2l0aG91 dCBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAqCisJICogWFhYIG1h eWJlIGl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9IGZhbHNlIiBvciBz b21lCisJICogc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBO VUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5j b2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1Is ICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlv biAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9w Z19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29s bChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlw Y29sbGF0aW9uKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9 VCIsIDMsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1uIiwKKwkJCQkJCSAi bmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJCSAiY29sdHlwZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwaWQsIHR5cG1v ZCkpOworCisJaWYgKCFjb21wb3NpdGUpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlNU T1JBR0UgJXtjb2xzdG9yYWdlfXMiLCAiY29sc3RvcmFnZSIsCisJCQkJCQkJIGdldF90eXBlX3N0 b3JhZ2UoYXR0ckZvcm0tPmF0dHN0b3JhZ2UpKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiQ09NUFJFU1NJT04iKTsKKwlpZiAoY29sZGVmLT5jb21wcmVz c2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7Y29tcHJlc3Npb25fbWV0 aG9kfUkiLAorCQkJCQkJCSAiY29tcHJlc3Npb25fbWV0aG9kIiwgY29sZGVmLT5jb21wcmVzc2lv bik7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcF9vYmosICIle2NvbXByZXNz aW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwl9CisJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb21wcmVzc2lvbn1zIiwgdG1wX29iaik7CisKKwl0 bXBfb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBjb2xs YXRpb24pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoQ29sbGF0aW9uUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cGNvbGxhdGlvbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29sbGF0aW9ufXMiLCB0 bXBfb2JqKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJT2lkCQkJc2VxcmVsaWQgPSBJbnZh bGlkT2lkOworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbiBpZiBuZWNl c3NhcnkuICBOb3RlIHRoYXQgd2UgY2Fubm90CisJCSAqIHRydXN0IHBnX2F0dHJpYnV0ZS5hdHRu b3RudWxsIGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQKKwkJICogd2hlbiBwcmlt YXJ5IGtleXMgYXJlIHNwZWNpZmllZDsgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJCSAq IGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQuICBU aGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgYXR0YWNoZWQg dG8gdGhpcyBjb2x1bW4gdG8KKwkJICogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBlbWl0 IGFueXRoaW5nLiAoRm9ydHVuYXRlbHksIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnRzIGNhbm5v dCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJCSAqIEluIHRoZSBBTFRFUiBUQUJMRSBj YXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0aGUgY29sRGVmIGlzCisJCSAqIG1hcmtl ZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3RudWxsID0gZmFsc2U7CisJCWZvcmVhY2go Y2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJeworCQkJQ29uc3RyYWludCAqY29uc3RyID0g KENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAoY29uc3RyLT5jb250eXBlID09 IENPTlNUUl9OT1ROVUxMKQorCQkJeworCQkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCQlicmVh azsKKwkJCX0KKwkJfQorCisJCWlmIChpc19hbHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxsKQor CQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7 bm90X251bGx9cyIsICJub3RfbnVsbCIsCisJCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBOVUxM IiA6ICIiKTsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIkRFRkFVTFQiKTsKKwkJaWYgKGF0 dHJGb3JtLT5hdHRoYXNkZWYgJiYKKwkJCWNvbGRlZi0+Z2VuZXJhdGVkICE9IEFUVFJJQlVURV9H RU5FUkFURURfU1RPUkVEKQorCQl7CisJCQljaGFyCSAgICpkZWZzdHI7CisKKwkJCWRlZnN0ciA9 IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJ CQkJCQkJCQkJICBkcGNvbnRleHQsIGV4cHJzKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIiV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLCBkZWZzdHIpOworCQl9CisJCWVsc2UK KwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtkZWZhdWx0fXMiLCB0bXBfb2JqKTsKKworCQkvKiBJREVOVElUWSBDT0xVTU4gKi8K KwkJaWYgKGNvbGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCU9pZAkJCWF0dG5vID0gZ2V0X2F0dG51 bShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKworCQkJc2VxcmVsaWQgPSBnZXRJZGVudGl0eVNl cXVlbmNlKHJlbGlkLCBhdHRubywgdHJ1ZSk7CisJCQlpZiAoT2lkSXNWYWxpZChzZXFyZWxpZCkg JiYgY29sZGVmLT5pZGVudGl0eVNlcXVlbmNlKQorCQkJCXNlcXJlbGlkID0gUmFuZ2VWYXJHZXRS ZWxpZChjb2xkZWYtPmlkZW50aXR5U2VxdWVuY2UsIE5vTG9jaywgZmFsc2UpOworCQl9CisKKwkJ aWYgKE9pZElzVmFsaWQoc2VxcmVsaWQpKQorCQl7CisJCQl0bXBfb2JqID0gZGVwYXJzZV9Db2x1 bW5JZGVudGl0eShzZXFyZWxpZCwgY29sZGVmLT5pZGVudGl0eSwgaXNfYWx0ZXIpOworCQkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpZGVudGl0eV9jb2x1bW59cyIsIHRtcF9vYmopOwor CQl9CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcF9vYmogPSBu ZXdfb2JqdHJlZSgiR0VORVJBVEVEIEFMV0FZUyBBUyIpOworCQlpZiAoY29sZGVmLT5nZW5lcmF0 ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIJICAgKmRlZnN0 cjsKKworCQkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRy Rm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCQkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wX29iaiwgIigle2dlbmVyYXRpb25fZXhwcn1zKSBTVE9SRUQiLAor CQkJCQkJCQkgImdlbmVyYXRpb25fZXhwciIsIGRlZnN0cik7CisJCX0KKwkJZWxzZQorCQkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgdG1wX29iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hl KGF0dHJUdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1bW5E ZWYgbm9kZSB3aXRoaW4gYSB0eXBlZCB0YWJsZSBjcmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisg KiB0aGFuIHRoZSByZWd1bGFyIGNhc2UsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRo ZSB0eXBlIGRlY2xhcmF0aW9uLAorICogY29sbGF0aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBv bmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhlIGNvbHVtbiBpcyBiZWluZworICogZGVjbGFyZWQg Tk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVwYXJzZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25z dHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hlcmUuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq ICV7bmFtZX1JIFdJVEggT1BUSU9OUyAle2RlZmF1bHR9cyAle25vdF9udWxsfXMuCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0aW9u LCBMaXN0ICpkcGNvbnRleHQsIENvbHVtbkRlZiAqY29sZGVmKQoreworCU9ialRyZWUgICAgKnJl dCA9IE5VTEw7CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZvcm1fcGdfYXR0cmli dXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7CisJT2lkCQkJdHlw Y29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlh dHRyVHVwID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHRyVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNvdWxkIG5v dCBmaW5kIGNhY2hlIGVudHJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIHJlbGF0aW9uICV1IiwKKwkJ CSBjb2xkZWYtPmNvbG5hbWUsIHJlbGlkKTsKKwlhdHRyRm9ybSA9IChGb3JtX3BnX2F0dHJpYnV0 ZSkgR0VUU1RSVUNUKGF0dHJUdXApOworCisJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKHJlbGlkLCBh dHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJICAmdHlwaWQsICZ0eXBtb2QsICZ0eXBjb2xsYXRpb24p OworCisJLyoKKwkgKiBTZWFyY2ggZm9yIGEgTk9UIE5VTEwgZGVjbGFyYXRpb24uICBBcyBpbiBk ZXBhcnNlX0NvbHVtbkRlZiwgd2UgcmVseSBvbgorCSAqIGZpbmRpbmcgYSBjb25zdHJhaW50IG9u IHRoZSBjb2x1bW4gcmF0aGVyIHRoYW4gY29sZGVmLT5pc19ub3RfbnVsbC4KKwkgKiAoVGhpcyBy b3V0aW5lIGlzIG5ldmVyIHVzZWQgZm9yIEFMVEVSIGNhc2VzLikKKwkgKi8KKwlzYXdfbm90bnVs bCA9IGZhbHNlOworCWZvcmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwl7CisJCUNv bnN0cmFpbnQgKmNvbnN0ciA9IChDb25zdHJhaW50ICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAo Y29uc3RyLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQl7CisJCQlzYXdfbm90bnVsbCA9 IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc2F3X25vdG51bGwgJiYgIWF0dHJG b3JtLT5hdHRoYXNkZWYpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisJCXJldHVy biBOVUxMOworCX0KKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCWlmIChh dHRyRm9ybS0+YXR0aGFzZGVmKQorCXsKKwkJY2hhcgkgICAqZGVmc3RyOworCisJCWRlZnN0ciA9 IFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVsdChyZWxhdGlvbiwgYXR0ckZvcm0tPmF0dG51bSwKKwkJ CQkJCQkJCQkgIGRwY29udGV4dCwgTlVMTCk7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1w X29iaiwgIiV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFw cGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle25h bWV9SSBXSVRIIE9QVElPTlMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zIiwgNCwKKwkJCQkJCSAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb2x1bW4iLAorCQkJCQkJICJuYW1lIiwgT2JqVHlwZVN0 cmluZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJICJub3RfbnVsbCIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgc2F3X25vdG51bGwgPyAiTk9UIE5VTEwiIDogIiIsCisJCQkJCQkgImRlZmF1bHQi LCBPYmpUeXBlT2JqZWN0LCB0bXBfb2JqKTsKKworCS8qIEdlbmVyYXRlZCBjb2x1bW5zIGFyZSBu b3Qgc3VwcG9ydGVkIG9uIHR5cGVkIHRhYmxlcywgc28gd2UgYXJlIGRvbmUgKi8KKworCVJlbGVh c2VTeXNDYWNoZShhdHRyVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IHRoZSBkZWZpbml0aW9uIG9mIGNvbHVtbiBpZGVudGl0eS4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogU0VUIEdFTkVSQVRFRCAle29wdGlvbn1zICV7aWRlbnRpdHlfdHlwZX1zICV7c2VxX2Rl ZmluaXRpb246IH1zCisgKiAJT1IKKyAqIEdFTkVSQVRFRCAle29wdGlvbn1zIEFTIElERU5USVRZ ICV7aWRlbnRpdHlfdHlwZX1zICggJXtzZXFfZGVmaW5pdGlvbjogfXMgKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVu dGl0eSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAg ICAqaWRlbnRfb2JqOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ug c2VxZm9ybTsKKwlTZXF1ZW5jZV92YWx1ZXMgKnNlcXZhbHVlczsKKwljaGFyCSAgICppZGVudGZt dDsKKwljaGFyCSAgICpvYmpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJeworCQlpZGVudGZt dCA9ICJTRVQgR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1zIjsKKwl9CisJZWxz ZQorCXsKKwkJaWRlbnRmbXQgPSAiR0VORVJBVEVEICI7CisJCW9iamZtdCA9ICIle29wdGlvbn1z IEFTIElERU5USVRZIjsKKwl9CisKKwlpZGVudF9vYmogPSBuZXdfb2JqdHJlZShpZGVudGZtdCk7 CisKKwlpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0FMV0FZUykKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QoaWRlbnRfb2JqLCBvYmpmbXQsICJvcHRpb24iLCAiQUxXQVlTIik7CisJ ZWxzZSBpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50X29iaiwgb2JqZm10LCAib3B0aW9uIiwgIkJZIERFRkFV TFQiKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChpZGVudF9vYmopOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHlfdHlwZX1zIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHlf dHlwZSIsIE9ialR5cGVPYmplY3QsIGlkZW50X29iaik7CisKKwlzZXF2YWx1ZXMgPSBnZXRfc2Vx dWVuY2VfdmFsdWVzKHNlcXJlbGlkKTsKKwlzZXFmb3JtID0gc2VxdmFsdWVzLT5zZXFmb3JtOwor CisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMg PSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBhbHRlcl90 YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfTWludmFsdWUoc2Vx Zm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2Vx X01heHZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1z LCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9 IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2VxdmFsdWVzLT5sYXN0X3ZhbHVl KSk7CisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0IE9XTkVEIEJZIGhlcmUgKi8KKwor CWlmIChhbHRlcl90YWJsZSkKKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3NlcV9kZWZp bml0aW9uOiB9cyIsIGVsZW1zKTsKKwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAi KCAle3NlcV9kZWZpbml0aW9uOiB9cyApIiwgZWxlbXMpOworCisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBSRVNFVHxTRVQgKCV7b3B0aW9u czosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMo QWx0ZXJUYWJsZUNtZCAqc3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENl bGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQt PnN1YnR5cGUgPT0gQVRfUmVzZXRPcHRpb25zOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JICV7b3B0aW9ufXMiLCAyLAorCQkJCQkJICJjb2x1bW4iLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkgIm9wdGlvbiIsIE9ialR5cGVTdHJp bmcsIGlzX3Jlc2V0ID8gIlJFU0VUIiA6ICJTRVQiKTsKKworCWZvcmVhY2goY2VsbCwgKExpc3Qg Kikgc3ViY21kLT5kZWYpCisJeworCQlEZWZFbGVtICAgICplbGVtOworCQlPYmpUcmVlICAgICpz ZXQ7CisKKwkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKwkJc2V0ID0gZGVwYXJz ZV9EZWZFbGVtKGVsZW0sIGlzX3Jlc2V0KTsKKwkJc2V0cyA9IGxhcHBlbmQoc2V0cywgbmV3X29i amVjdF9vYmplY3Qoc2V0KSk7CisJfQorCisJQXNzZXJ0KHNldHMpOworCWFwcGVuZF9hcnJheV9v YmplY3QocmV0LCAiKCV7b3B0aW9uczosIH1zKSIsIHNldHMpOworCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBSRVNFVHxTRVQgKCV7b3B0aW9uczosIH1zKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKQor eworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlib29sCQlpc19y ZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9PSBBVF9SZXNldFJlbE9wdGlvbnM7CisKKwlmb3JlYWNo KGNlbGwsIChMaXN0ICopIHN1YmNtZC0+ZGVmKQorCXsKKwkJRGVmRWxlbSAgICAqZWxlbTsKKwkJ T2JqVHJlZSAgICAqc2V0OworCisJCWVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CXNldCA9IGRlcGFyc2VfRGVmRWxlbShlbGVtLCBpc19yZXNldCk7CisJCXNldHMgPSBsYXBwZW5k KHNldHMsIG5ld19vYmplY3Rfb2JqZWN0KHNldCkpOworCX0KKworCUFzc2VydChzZXRzKTsKKwor CXJldHVybiBuZXdfb2JqdHJlZV9WQSgiJXtzZXRfcmVzZXR9cyAoJXtvcHRpb25zOiwgfXMpIiwg MiwKKwkJCQkJCSAgInNldF9yZXNldCIsIE9ialR5cGVTdHJpbmcsIGlzX3Jlc2V0ID8gIlJFU0VU IiA6ICJTRVQiLAorCQkJCQkJICAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgc2V0cyk7Cit9CisK Ky8qCisgKiBEZXBhcnNlIERlZkVsZW1zLCBhcyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4u LiBTRVQsIGludG8gYSBsaXN0IG9mIFNFVAorICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRl bnRzLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiAle2xhYmVsfXMgPSAle3ZhbHVlfUwKKyAq Lworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZFbGVtKERlZkVsZW0gKmVsZW0sIGJvb2wg aXNfcmVzZXQpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKm9wdG5hbWUgPSBu ZXdfb2JqdHJlZSgiIik7CisKKwlpZiAoZWxlbS0+ZGVmbmFtZXNwYWNlICE9IE5VTEwpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle3NjaGVtYX1JLiIsICJzY2hlbWEiLAorCQkJ CQkJCSBlbGVtLT5kZWZuYW1lc3BhY2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3Qob3B0bmFt ZSwgIiV7bGFiZWx9SSIsICJsYWJlbCIsIGVsZW0tPmRlZm5hbWUpOworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIiV7bGFiZWx9cyIsIDEsCisJCQkJCQkgImxhYmVsIiwgT2JqVHlwZU9iamVjdCwg b3B0bmFtZSk7CisKKwlpZiAoIWlzX3Jlc2V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICI9ICV7dmFsdWV9TCIsICJ2YWx1ZSIsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmlu ZyhlbGVtKSA6CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0Ui KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBJTkhFUklUUyByZWxh dGlvbnMuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBhIHNjaGVtYS1xdWFsaWZp ZWQgdGFibGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQgdGFibGVzLgorICovCitz dGF0aWMgTGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2JqZWN0SWQpCit7CisJTGlz dAkgICAqcGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJU3lzU2NhbkRlc2Mgc2Nh bjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOworCisJaW5oUmVsID0gdGFi bGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJU2Nhbktl eUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlkLAorCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7 CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5oZXJpdHNSZWxpZFNlcW5v SW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCisJd2hpbGUgKEhlYXBU dXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9ialRy ZWUgICAgKnBhcmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5oID0gKEZvcm1fcGdfaW5o ZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJIGZvcm1JbmgtPmluaHBh cmVudCk7CisJCXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHBh cmVudCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoaW5o UmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRzOworfQorCisvKgorICog RGVwYXJzZSB0aGUgT04gQ09NTUlUIC4uLiBjbGF1c2UgZm9yIENSRUFURSAuLi4gVEVNUE9SQVJZ IC4uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPTiBDT01NSVQgJXtvbl9jb21taXRfdmFs dWV9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKE9uQ29t bWl0QWN0aW9uIG9wdGlvbikKK3sKKwlPYmpUcmVlICAgICpyZXQgID0gbmV3X29ianRyZWUoIk9O IENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNPTU1JVF9EUk9QOgor CQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9jb21taXRfdmFsdWV9cyIsCisJCQkJ CQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05D T01NSVRfREVMRVRFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle29uX2Nv bW1pdF92YWx1ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUiLCAiREVMRVRFIFJPV1Mi KTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoKKwkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMiLAorCQkJCQkJCQkgIm9u X2NvbW1pdF92YWx1ZSIsICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVhazsKKworCQljYXNlIE9O Q09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3QocmV0LCAiJXtvbl9jb21taXRfdmFs dWV9cyIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisJCQlicmVhazsKKwl9CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgQ0FDSEUgb3B0aW9u LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRVQgQ0FDSEUgJXt2YWx1ZX1zCisgKiBPUgor ICogQ0FDSEUgJXt2YWx1ZX0KKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2Vf U2VxX0NhY2hlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sK KwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKwor CWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCBDQUNIRSAle3ZhbHVlfXMiIDogIkNBQ0hFICV7dmFs dWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWNh Y2hlKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJjYWNoZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1w c3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgc2VxdWVuY2UgQ1lDTEUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBTRVQgJXtub31zIENZQ0xFCisgKiBPUgorICogJXtub31zIENZQ0xFCisgKi8KK3N0YXRpYyBp bmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9DeWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRh dGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKmZt dDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8gIlNFVCAle25vfXMgQ1lDTEUiIDogIiV7bm99cyBD WUNMRSI7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjeWNsZSIsCisJCQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCSBzZXFkYXRhLT5zZXFjeWNsZSA/ICIiIDogIk5PIik7CisKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIElOQ1JFTUVO VCBCWSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBJTkNSRU1FTlQgQlkg JXt2YWx1ZX1zCisgKiBPUgorICogSU5DUkVNRU5UIEJZICV7dmFsdWV9cworICovCitzdGF0aWMg aW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoRm9ybV9wZ19zZXF1ZW5j ZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFy CSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VU IElOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiIDogIklOQ1JFTUVOVCBCWSAle3ZhbHVlfXMiOworCisJ dG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFpbmNyZW1lbnQpOwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1w c3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVw YXJzZSB0aGUgc2VxdWVuY2UgTUFYVkFMVUUgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zCisgKiBPUgorICogTUFYVkFMVUUgJXt2YWx1ZX1z CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3Jt X3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAq cmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90 YWJsZSA/ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1zIiA6ICJNQVhWQUxVRSAle3ZhbHVlfXMiOwor CisJdG1wc3RyID0gcHNwcmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgIm1heHZhbHVlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOwor CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBzZXF1ZW5jZSBNSU5WQUxVRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNF VCBNSU5WQUxVRSAle3ZhbHVlfXMKKyAqIE9SCisgKiBNSU5WQUxVRSAle3ZhbHVlfXMKKyAqLwor c3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKEZvcm1fcGdfc2Vx dWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJ Y2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVyX3RhYmxlID8g IlNFVCBNSU5WQUxVRSAle3ZhbHVlfXMiIDogIk1JTlZBTFVFICV7dmFsdWV9cyI7CisKKwl0bXBz dHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1pbik7CisJcmV0ID0gbmV3 X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWlu dmFsdWUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1 cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVl bmNlIFJFU1RBUlQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNUQVJUICV7 dmFsdWV9cworICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfUmVzdGFy dChpbnQ2NCBsYXN0X3ZhbHVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBz dHI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIGxhc3RfdmFsdWUpOworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJSRVNUQVJUICV7dmFsdWV9cyIsIDIsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0YXJ0IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8q CisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBBUyBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIEFTICV7aWRlbnRpdHl9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVw YXJzZV9TZXFfQXMoRGVmRWxlbSAqZWxlbSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJVHlwZQkJ bGlrZVR5cGU7CisJRm9ybV9wZ190eXBlIGxpa2VGb3JtOworCisJbGlrZVR5cGUgPSB0eXBlbmFt ZVR5cGUoTlVMTCwgZGVmR2V0VHlwZU5hbWUoZWxlbSksIE5VTEwpOworCWxpa2VGb3JtID0gKEZv cm1fcGdfdHlwZSkgR0VUU1RSVUNUKGxpa2VUeXBlKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBUyAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGxpa2VGb3JtLT50eXBuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkgIE5hbWVTdHIobGlrZUZvcm0tPnR5cG5hbWUpKSk7CisJUmVsZWFzZVN5 c0NhY2hlKGxpa2VUeXBlKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgU1RBUlQgV0lUSCBvcHRpb24uCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIFNFVCBTVEFSVCBXSVRIICV7dmFsdWV9cworICogT1IKKyAqIFNU QVJUIFdJVEggJXt2YWx1ZX1zCisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNl X1NlcV9TdGFydHdpdGgoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxl KQoreworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10 OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zIiA6ICJT VEFSVCBXSVRIICV7dmFsdWV9cyI7CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQs IHNlcWRhdGEtPnNlcXN0YXJ0KTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJ CQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkgInZhbHVlIiwgT2Jq VHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOwor fQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTVE9SQUdFIG9wdGlvbi4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogU1RPUkFHRT0le3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpF bGVtICoKK2RlcGFyc2VfVHlwZV9TdG9yYWdlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9i alRyZWUgICAgKnJldDsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU1RPUkFHRSA9ICV7dmFsdWV9 cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdG9yYWdlIiwKKwkJCQkJ CSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfdHlwZV9zdG9yYWdlKHR5cEZvcm0tPnR5cHN0 b3JhZ2UpKTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICog RGVwYXJzZSB0aGUgdHlwZSBSRUNFSVZFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAor ICogUkVDRUlWRT0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1R5cGVfUmVjZWl2ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAg ICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVDRUlWRT0iLCAxLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVjZWl2ZSIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cHJlY2VpdmUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVy ZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXByZWNlaXZlKSk7CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQp OworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSBTRU5EIG9wdGlvbi4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogU0VORD0le3Byb2NlZHVyZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1R5cGVfU2VuZChGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpU cmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VORD0iLCAxLAorCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic2VuZCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZv cm0tPnR5cHNlbmQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3Byb2NlZHVyZX1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBzZW5kKSk7CisJZWxzZQorCQlhcHBlbmRf bm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQor CisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2RfaW4gb3B0aW9uLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBUWVBNT0RfSU49JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5l IE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1R5cG1vZF9JbihGb3JtX3BnX3R5cGUgdHlwRm9ybSkK K3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiVFlQTU9EX0lO PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2RfaW4iKTsKKwlp ZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RpbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZGlu KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgdHlwZSB0eXBtb2Rfb3V0 IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogVFlQTU9EX09VVD0le3Byb2NlZHVy ZX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX091 dChGb3JtX3BnX3R5cGUgdHlwRm9ybSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQSgiVFlQTU9EX09VVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAidHlwbW9kX291dCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZG91 dCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJIHR5cEZvcm0tPnR5cG1vZG91dCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAq IERlcGFyc2UgdGhlIHR5cGUgYW5hbHl6ZSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFOQUxZWkU9JXtwcm9jZWR1cmV9RAorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgor ZGVwYXJzZV9UeXBlX0FuYWx5emUoRm9ybV9wZ190eXBlIHR5cEZvcm0pCit7CisJT2JqVHJlZSAg ICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFOQUxZWkU9IiwgMSwKKwkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImFuYWx5emUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBG b3JtLT50eXBhbmFseXplKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwYW5hbHl6ZSkpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0 KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHR5cGUgc3Vic2NyaXB0IG9wdGlvbi4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogU1VCU0NSSVBUPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5 cEZvcm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNV QlNDUklQVD0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3Vic2NyaXB0 Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc3Vic2NyaXB0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwc3Vic2NyaXB0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsKKwor CXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogU3Vicm91dGluZSBm b3IgQ1JFQVRFIFRBQkxFIGRlcGFyc2luZy4KKyAqCisgKiBEZWFsIHdpdGggYWxsIHRoZSB0YWJs ZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3RyYWludHMpLgorICoKKyAqIE5vdGUgd2UgaWdu b3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBub2RlIGhlcmU7IHRoZXkgYXJlIGV4dHJhY3Rl ZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4KKyAqLworc3RhdGljIExpc3QgKgor ZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVsZW1l bnRzLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCSAgYm9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUp Cit7CisJTGlzdAkgICAqZWxlbWVudHMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3Jl YWNoKGxjLCB0YWJsZUVsZW1lbnRzKQorCXsKKwkJTm9kZQkgICAqZWx0ID0gKE5vZGUgKikgbGZp cnN0KGxjKTsKKworCQlzd2l0Y2ggKG5vZGVUYWcoZWx0KSkKKwkJeworCQkJY2FzZSBUX0NvbHVt bkRlZjoKKwkJCQl7CisJCQkJCU9ialRyZWUgICAgKnRyZWU7CisKKwkJCQkJdHJlZSA9IHR5cGVk ID8KKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmX3R5cGVkKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJ CQkJCQkJCQkJCQkoQ29sdW1uRGVmICopIGVsdCkgOgorCQkJCQkJZGVwYXJzZV9Db2x1bW5EZWYo cmVsYXRpb24sIGRwY29udGV4dCwKKwkJCQkJCQkJCQkgIGNvbXBvc2l0ZSwgKENvbHVtbkRlZiAq KSBlbHQsCisJCQkJCQkJCQkJICBmYWxzZSwgTlVMTCk7CisJCQkJCWlmICh0cmVlICE9IE5VTEwp CisJCQkJCQllbGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHRy ZWUpKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFRfQ29uc3RyYWludDoKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgbm9kZSB0eXBlICVkIiwg bm9kZVRhZyhlbHQpKTsKKwkJfQorCX0KKworCXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAq IERlcGFyc2UgYSBDcmVhdGVTZXFTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSAle3BlcnNpc3RlbmNlfXMgU0VRVUVOQ0UgJXtpZGVudGl0eX1ECisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2VxU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisJ TGlzdAkgICAqZWxlbXMgPSBOSUw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVNlcXVl bmNlX3ZhbHVlcyAqc2VxdmFsdWVzOworCUNyZWF0ZVNlcVN0bXQgKmNyZWF0ZVNlcVN0bXQgPSAo Q3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgorCSAqIFNlcXVlbmNlIGZvciBJREVO VElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBDUkVBVEUgVEFCTEUgb3IKKwkgKiBB TFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAqLworCWlmIChjcmVhdGVTZXFTdG10 LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxdmFsdWVzID0gZ2V0X3NlcXVl bmNlX3ZhbHVlcyhvYmplY3RJZCk7CisJc2VxZm9ybSA9IHNlcXZhbHVlcy0+c2VxZm9ybTsKKwor CS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFy c2VfU2VxX0NhY2hlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBk ZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2UpKTsKKwllbGVtcyA9IGxh cHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxl bXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFmb3JtLCBmYWxzZSkp OworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNlcWZvcm0s IGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KHNl cXZhbHVlcy0+bGFzdF92YWx1ZSkpOworCisJLyogV2UgcHVycG9zZWZ1bGx5IGRvIG5vdCBlbWl0 IE9XTkVEIEJZIGhlcmUgKi8KKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtwZXJz aXN0ZW5jZX1zIFNFUVVFTkNFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAle2RlZmlu aXRpb246IH1zIiwgNCwKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2Up LAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBjcmVhdGVT ZXFTdG10LT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFy cmF5LCBlbGVtcyk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2Nr KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEluZGV4U3RtdC4KKyAq CisgKiBHaXZlbiBhbiBpbmRleCBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFu ZC4KKyAqCisgKiBJZiB0aGUgaW5kZXggY29ycmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxM IGlzIHJldHVybmVkLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXt1bmlxdWV9 cyBJTkRFWCAle2NvbmN1cnJlbnRseX1zICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JIE9OCisg KiAle3RhYmxlfUQgVVNJTkcgJXtpbmRleF9hbX1zICV7ZGVmaW5pdGlvbn1zICV7d2l0aH1zICV7 dGFibGVzcGFjZX1zCisgKiAle3doZXJlX2NsYXVzZX1zICV7bnVsbHNfbm90X2Rpc3RpbmN0fXMK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9JbmRleFN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJSW5kZXhTdG10ICAqbm9kZSA9IChJbmRleFN0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCVJlbGF0 aW9uCWlkeHJlbDsKKwlSZWxhdGlvbgloZWFwcmVsOworCWNoYXIJICAgKmluZGV4X2FtOworCWNo YXIJICAgKmRlZmluaXRpb247CisJY2hhcgkgICAqcmVsb3B0aW9uczsKKwljaGFyCSAgICp0YWJs ZXNwYWNlOworCWNoYXIJICAgKndoZXJlQ2xhdXNlOworCisJaWYgKG5vZGUtPnByaW1hcnkgfHwg bm9kZS0+aXNjb25zdHJhaW50KQorCXsKKwkJLyoKKwkJICogSW5kZXhlcyBmb3IgUFJJTUFSWSBL RVkgYW5kIG90aGVyIGNvbnN0cmFpbnRzIGFyZSBvdXRwdXQKKwkJICogc2VwYXJhdGVseTsgcmV0 dXJuIGVtcHR5IGhlcmUuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZHhyZWwgPSBy ZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWhlYXByZWwgPSByZWxh dGlvbl9vcGVuKGlkeHJlbC0+cmRfaW5kZXgtPmluZHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKG9iamVjdElkLAorCQkJCQkJCSAmaW5kZXhfYW0s ICZkZWZpbml0aW9uLCAmcmVsb3B0aW9ucywKKwkJCQkJCQkgJnRhYmxlc3BhY2UsICZ3aGVyZUNs YXVzZSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7dW5pcXVlfXMgSU5ERVgg JXtjb25jdXJyZW50bHl9cyAle2lmX25vdF9leGlzdHN9cyAle25hbWV9SSBPTiAle3RhYmxlfUQg VVNJTkcgJXtpbmRleF9hbX1zICV7ZGVmaW5pdGlvbn1zIiwgNywKKwkJCQkJCSAidW5pcXVlIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5JUVVFIiA6ICIiLAorCQkJ CQkJICJjb25jdXJyZW50bHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJl bnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDog IiIsCisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKGlkeHJlbCksCisJCQkJCQkgInRhYmxlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXByZWwpKSwKKwkJCQkJ CSAiaW5kZXhfYW0iLCBPYmpUeXBlU3RyaW5nLCBpbmRleF9hbSwKKwkJCQkJCSAiZGVmaW5pdGlv biIsIE9ialR5cGVTdHJpbmcsIGRlZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAqLworCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiV0lUSCIpOworCWlmIChyZWxvcHRpb25zKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiKCV7b3B0c31zKSIsICJvcHRzIiwgcmVsb3B0aW9ucyk7 CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXt3aXRofXMiLCB0bXBfb2JqKTsKKworCS8qIHRhYmxlc3BhY2UgKi8KKwl0 bXBfb2JqID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0UiKTsKKwlpZiAodGFibGVzcGFjZSkKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3Bh Y2UiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIsIHRtcF9vYmopOwor CisJLyogV0hFUkUgY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVSRSIpOwor CWlmICh3aGVyZUNsYXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7d2hl cmV9cyIsICJ3aGVyZSIsIHdoZXJlQ2xhdXNlKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXBfb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3doZXJlX2NsYXVzZX1z IiwgdG1wX29iaik7CisKKwkvKiBudWxsc19ub3RfZGlzdGluY3QgKi8KKwlpZiAobm9kZS0+bnVs bHNfbm90X2Rpc3RpbmN0KQorCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJOVUxMUyBOT1Qg RElTVElOQ1QiKTsKKwllbHNlCisJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgIk5VTExTIERJ U1RJTkNUIik7CisKKwl0YWJsZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFi bGVfY2xvc2UoaGVhcHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU3RtdCAoQ1JFQVRFIFRBQkxFKS4KKyAqCisgKiBHaXZl biBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90 X2V4aXN0c31zICV7aWRlbnRpdHl9RCBbT0YKKyAqICV7b2ZfdHlwZX1UIHwgUEFSVElUSU9OIE9G ICV7cGFyZW50X2lkZW50aXR5fURdICV7dGFibGVfZWxlbWVudHN9cworICogJXtpbmhlcml0c31z ICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zCisgKiAl e29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFy c2VfQ3JlYXRlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVT dG10ICpub2RlID0gKENyZWF0ZVN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9u ID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpk cGNvbnRleHQ7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJTGlz dAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtp ZGVudGl0eX1EIiwgMywKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2Up LAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5p Zl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24t PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWxhdGlvbikpKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJb2JqZWN0SWQpOworCisJ LyoKKwkgKiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNlIGEgc2xpZ2h0bHkgZGlmZmVy ZW50IGZvcm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0IHRhYmxlX2VsZW1lbnRzIHdp dGggcGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywKKwkgKiBiZWNhdXNlIGlmIHRo ZXJlIGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnRoZXNlcyBtdXN0IG5vdCBiZSBlbWl0dGVkOwor CSAqIGFuZCBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5jZS4K KwkgKi8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJeworCQlM aXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRhYmxl IGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAqIHN1 cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgaGVyZSwgYmVjYXVzZSBhbiBlbXB0eSBjbGF1c2Ugd291 bGQgY2F1c2UKKwkJICogYSBzeW50YXggZXJyb3IuICBUaGVyZWZvcmUsIHdlIHVzZSBhbiBpbmRp cmVjdGlvbiBlbGVtZW50IGFuZCBzZXQKKwkJICogcHJlc2VudD1mYWxzZSB3aGVuIHRoZXJlIGFy ZSBubyBlbGVtZW50cy4KKwkJICovCisJCWlmIChub2RlLT5vZlR5cGVuYW1lKQorCQl7CisJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0eXBl LCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJPRiAle29mX3R5cGV9VCIsIHRt cF9vYmopOworCQl9CisJCWVsc2UKKwkJeworCQkJTGlzdAkgICAqcGFyZW50czsKKwkJCU9iakVs ZW0gICAgKmVsZW07CisKKwkJCXBhcmVudHMgPSBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJ ZCk7CisJCQllbGVtID0gKE9iakVsZW0gKikgbGluaXRpYWwocGFyZW50cyk7CisKKwkJCUFzc2Vy dChsaXN0X2xlbmd0aChwYXJlbnRzKSA9PSAxKTsKKworCQkJYXBwZW5kX2Zvcm1hdF9zdHJpbmco cmV0LCAiUEFSVElUSU9OIE9GIik7CisKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 cGFyZW50X2lkZW50aXR5fUQiLAorCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKwkJfQor CisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlvbiwgbm9kZS0+dGFi bGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICB0cnVlLCAvKiB0eXBlZCB0YWJsZSAqLwor CQkJCQkJCQkJCSAgZmFsc2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9i dGFpbkNvbnN0cmFpbnRzKHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCXRt cF9vYmogPSBuZXdfb2JqdHJlZSgiIik7CisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHRtcF9vYmosICIoJXtlbGVtZW50czosIH1zKSIsIHRhYmxlZWx0cyk7CisJCWVs c2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICIle3RhYmxlX2VsZW1lbnRzfXMiLCB0bXBfb2JqKTsKKwl9CisJZWxzZQorCXsK KwkJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5l ZWQgdG8gcHJvY2VzcyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFs cmVhZHkgYmVlbiB0cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkg Ki8KKworCQkvKgorCQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlv bnMgYW5kIGNvbnN0cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFy ZSBvYnRhaW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBjb25z dHJhaW50cyB3ZSByZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5vZGUK KwkJICogbWlnaHQgYmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRo ZSBjb25zdHJhaW50cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50 cyhyZWxhdGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxz ZSwJLyogbm90IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21w b3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmpl Y3RJZCwgSW52YWxpZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9v YmplY3QocmV0LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNl CisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICIoKSIpOworCisJCS8qCisJCSAqIEFkZCBp bmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0 IG9mCisJCSAqIHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkg bGFjayB0aGUgYWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0 aW9ucy4gIFJhdGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0 aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNj dXJhdGUgYW5kIGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8K KwkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOworCQlpZiAobm9kZS0+aW5oUmVs YXRpb25zICE9IE5JTCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle3BhcmVu dHM6LCB9RCkiLCBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCkpOworCQllbHNlCisJCXsK KwkJCWFwcGVuZF9udWxsX29iamVjdCh0bXBfb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOworCQkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCQl9CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7aW5oZXJpdHN9cyIsIHRtcF9vYmopOworCX0KKworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZSgiVEFCTEVTUEFDRSIpOworCWlmIChub2RlLT50YWJsZXNwYWNlbmFtZSkKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7dGFibGVzcGFjZX1JIiwgInRhYmxlc3BhY2UiLAor CQkJCQkJCSBub2RlLT50YWJsZXNwYWNlbmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxf b2JqZWN0KHRtcF9vYmosICIle3RhYmxlc3BhY2V9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wX29iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1z IiwgdG1wX29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvbl9jb21taXR9cyIs CisJCQkJCQkgZGVwYXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJLyog Rk9SIFZBTFVFUyBjbGF1c2UgKi8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoKKwkJ ICogR2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4g dGhlIHBhcnNldHJlZQorCQkgKiBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91 bmQgZXhwcmVzc2lvbiB3aGljaCBoYXZlbid0CisJCSAqIGJlZW4gdHJhbnNmb3JtZWQuCisJCSAq LworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3BhcnRpdGlvbl9ib3VuZH1zIiwgInBh cnRpdGlvbl9ib3VuZCIsCisJCQkJCQkJIFJlbGF0aW9uR2V0UGFydGl0aW9uQm91bmQob2JqZWN0 SWQpKTsKKwl9CisKKwkvKiBQQVJUSVRJT04gQlkgY2xhdXNlICovCisJdG1wX29iaiA9IG5ld19v Ymp0cmVlKCJQQVJUSVRJT04gQlkiKTsKKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9 PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBf b2JqLCAiJXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJIHBnX2dldF9wYXJ0 a2V5ZGVmX3N0cmluZyhvYmplY3RJZCkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVj dCh0bXBfb2JqLCAiJXtkZWZpbml0aW9ufXMiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3BhcnRpdGlvbl9ieX1zIiwg dG1wX29iaik7CisKKwkvKiBVU0lORyBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IlVTSU5HIik7CisJaWYgKG5vZGUtPmFjY2Vzc01ldGhvZCkKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wX29iaiwgIiV7YWNjZXNzX21ldGhvZH1JIiwgImFjY2Vzc19tZXRob2QiLAorCQkJCQkJ CSBub2RlLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0 bXBfb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9v YmopOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2FjY2Vzc19tZXRob2R9cyIs IHRtcF9vYmopOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWUo IldJVEgiKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCU9ialRyZWUg ICAgKnRtcF9vYmoyOworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2Vs bCk7CisKKwkJdG1wX29iajIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmoyKSk7CisJfQorCisJaWYg KGxpc3QpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wX29iaiwgIigle3dpdGg6LCB9cykiLCBs aXN0KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcF9vYmopOworCisJcmVsYXRp b25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogRGVwYXJzZSBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqCisgKiBkZXBhcnNl X0NyZWF0ZVN0bXQgZG8gdGhlIGFjdHVhbCB3b3JrIGFzIHdlIGRlcGFyc2UgdGhlIGZpbmFsIENy ZWF0ZVN0bXQgZm9yCisgKiBDUkVBVEUgVEFCTEUgQVMgY29tbWFuZC4KKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9DcmVhdGVUYWJsZUFzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQp Cit7CisJT2lkCQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNt ZC0+dHlwZSA9PSBTQ1RfQ3JlYXRlVGFibGVBcyk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPmQuY3Rh cy5yZWFsX2NyZWF0ZTsKKwlvYmplY3RJZCA9IGNtZC0+ZC5jdGFzLmFkZHJlc3Mub2JqZWN0SWQ7 CisKKwlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworfQor CisvKgorICogRGVwYXJzZSBhbGwgdGhlIGNvbGxlY3RlZCBzdWJjb21tYW5kcyBhbmQgcmV0dXJu IGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZQorICogYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQUxURVIgcmVsdHlwZSAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwg fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclJlbGF0aW9uKENvbGxlY3Rl ZENvbW1hbmQgKmNtZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wX29i ajsKKwlPYmpUcmVlICAgICp0bXBfb2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRp b24JcmVsOworCUxpc3QJICAgKnN1YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlj b25zdCBjaGFyICpyZWx0eXBlOworCWJvb2wJCWlzdHlwZSA9IGZhbHNlOworCUxpc3QJICAgKmV4 cHJzID0gTklMOworCU9pZAkJCXJlbElkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJ QWx0ZXJUYWJsZVN0bXQgKnN0bXQgPSBOVUxMOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1Rf QWx0ZXJUYWJsZSk7CisJc3RtdCA9IChBbHRlclRhYmxlU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsK KwlBc3NlcnQoSXNBKHN0bXQsIEFsdGVyVGFibGVTdG10KSk7CisKKwkvKgorCSAqIEFMVEVSIFRB QkxFIHN1YmNvbW1hbmRzIGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlIGlzIHByb2Nlc3Nl ZCBpbgorCSAqIHRoZSB0b3AgbGV2ZWwgQ1JFQVRFIFRBQkxFIGNvbW1hbmQ7IHJldHVybiBlbXB0 eSBoZXJlLgorCSAqLworCWlmIChzdG10LT50YWJsZV9saWtlKQorCQlyZXR1cm4gTlVMTDsKKwor CXJlbCA9IHJlbGF0aW9uX29wZW4ocmVsSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZHBjb250ZXh0 ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJ CQkJCQkJcmVsSWQpOworCisJc3dpdGNoIChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNh c2UgUkVMS0lORF9SRUxBVElPTjoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgor CQkJcmVsdHlwZSA9ICJUQUJMRSI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgor CQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsK KwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJ CQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJU WVBFIjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJ R05fVEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisJCWNh c2UgUkVMS0lORF9NQVRWSUVXOgorCQkJcmVsdHlwZSA9ICJNQVRFUklBTElaRUQgVklFVyI7CisJ CQlicmVhazsKKworCQkJLyogVE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0YWJsZSAqLwor CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxraW5kICVkIiwgcmVs LT5yZF9yZWwtPnJlbGtpbmQpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAl e29ianR5cGV9cyAle2lkZW50aXR5fUQiLCAyLAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0 cmluZywgcmVsdHlwZSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSk7CisKKwlmb3JlYWNoKGNl bGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0ZWRBVFN1YmNtZCAq c3ViID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJQWx0ZXJUYWJsZUNt ZCAqc3ViY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisJCU9ialRyZWUg ICAgKnRyZWU7CisKKwkJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKworCSAg IC8qCisJCSogSWYgdGhlIEFMVEVSIFRBQkxFIGNvbW1hbmQgZm9yIHRoZSBwYXJlbnQgdGFibGUg aW5jbHVkZXMgc3ViY29tbWFuZHMKKwkJKiBmb3IgY2hpbGQgdGFibGUocyksIGRvIG5vdCBkZXBh cnNlIHRoZSBzdWJjb21tYW5kIGZvciBjaGlsZAorCQkqIHRhYmxlKHMpLgorCQkqLworCQlpZiAo c3ViLT5hZGRyZXNzLm9iamVjdElkICE9IHJlbElkICYmCisJCQloYXNfc3VwZXJjbGFzcyhzdWIt PmFkZHJlc3Mub2JqZWN0SWQpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChzdWJjbWQtPnN1 YnR5cGUpCisJCXsKKwkJCWNhc2UgQVRfQWRkQ29sdW1uOgorCQkJCS8qIFhYWCBuZWVkIHRvIHNl dCB0aGUgInJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJQXNzZXJ0KElzQShzdWJjbWQt PmRlZiwgQ29sdW1uRGVmKSk7CisJCQkJdHJlZSA9IGRlcGFyc2VfQ29sdW1uRGVmKHJlbCwgZHBj b250ZXh0LCBmYWxzZSwKKwkJCQkJCQkJCQkgKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZiwgdHJ1 ZSwgJmV4cHJzKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFERCAle29ianR5cGV9 cyAle2lmX25vdF9leGlzdHN9cyAle2RlZmluaXRpb259cyIsIDQsCisJCQkJCQkJCQkJIm9ianR5 cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNP TFVNTiIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbHVtbiIsCisJ CQkJCQkJCQkJImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNt ZC0+bWlzc2luZ19vayA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJCSJkZWZpbml0 aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0FkZEluZGV4Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJ CQlSZWxhdGlvbglpZHg7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJbmRleFN0bXQpKTsKKwkJCQkJ aXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJCQkJCUFzc2VydChpc3RtdC0+ aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJCWlkeCA9IHJlbGF0aW9uX29w ZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCQkJCS8qCisJCQkJCSAq IFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIEFERCBDT05TVFJBSU5UICV7bmFtZX1J ICV7Y29uc3RyYWludF90eXBlfXMgVVNJTkcgSU5ERVgKKwkJCQkJICogJWluZGV4X25hbWV9SSAl e2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cworCQkJCQkgKi8KKwkJCQkJdG1wX29iaiA9 IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2NvbnN0cmFpbnRfdHlw ZX1zIFVTSU5HIElOREVYICV7aW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZl cnJlZH1zIiwgNiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0 cmFpbnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdl dF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJImNvbnN0cmFpbnRfdHlw ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5wcmltYXJ5ID8gIlBSSU1BUlkg S0VZIiA6ICJVTklRVUUiLAorCQkJCQkJCQkJCQkiaW5kZXhfbmFtZSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCksCisJCQkJCQkJCQkJCSJk ZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJaXN0bXQtPmRlZmVycmFibGUg PyAiREVGRVJSQUJMRSIgOiAiTk9UIERFRkVSUkFCTEUiLAorCQkJCQkJCQkJCQkiaW5pdF9kZWZl cnJlZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdG10LT5pbml0ZGVmZXJyZWQgPyAi SU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJ CQkJCXJlbGF0aW9uX2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfUmVBZGRJbmRleDoKKwkJCWNhc2UgQVRfUmVBZGRDb25zdHJhaW50 OgorCQkJY2FzZSBBVF9SZUFkZERvbWFpbkNvbnN0cmFpbnQ6CisJCQljYXNlIEFUX1JlQWRkQ29t bWVudDoKKwkJCWNhc2UgQVRfUmVwbGFjZVJlbE9wdGlvbnM6CisJCQljYXNlIEFUX0NoZWNrTm90 TnVsbDoKKwkJCWNhc2UgQVRfUmVBZGRTdGF0aXN0aWNzOgorCQkJCS8qIFN1YnR5cGVzIHVzZWQg Zm9yIGludGVybmFsIG9wZXJhdGlvbnM7IG5vdGhpbmcgdG8gZG8gaGVyZSAqLworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0Nvb2tlZENvbHVtbkRlZmF1bHQ6CisJCQkJeworCQkJCQlSZWxhdGlv bglhdHRycmVsOworCQkJCQlIZWFwVHVwbGUJYXR0dHVwOworCQkJCQlGb3JtX3BnX2F0dHJpYnV0 ZSBhdHRTdHJ1Y3Q7CisKKwkJCQkJYXR0cnJlbCA9IHRhYmxlX29wZW4oQXR0cmlidXRlUmVsYXRp b25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJCQkJCWF0dHR1cCA9IFNlYXJjaFN5c0NhY2hlQ29w eTIoQVRUTlVNLAorCQkJCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRSZWxp ZChyZWwpKSwKKwkJCQkJCQkJCQkJCSBJbnQxNkdldERhdHVtKHN1YmNtZC0+bnVtKSk7CisJCQkJ CWlmICghSGVhcFR1cGxlSXNWYWxpZChhdHR0dXApKQorCQkJCQkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGF0dHJpYnV0ZSAlZCBvZiByZWxhdGlvbiB3aXRoIE9JRCAldSIs CisJCQkJCQkJIHN1YmNtZC0+bnVtLCBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOworCQkJCQlhdHRT dHJ1Y3QgPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHR0dXApOworCisJCQkJCS8q CisJCQkJCSAqIEJvdGggZGVmYXVsdCBhbmQgZ2VuZXJhdGlvbiBleHByZXNzaW9uIG5vdCBzdXBw b3J0ZWQKKwkJCQkJICogdG9nZXRoZXIuCisJCQkJCSAqLworCQkJCQlpZiAoIWF0dFN0cnVjdC0+ YXR0Z2VuZXJhdGVkKQorCQkJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0ZXIgdGFi bGUgc3VidHlwZSAlZCIsCisJCQkJCQkJIHN1YmNtZC0+c3VidHlwZSk7CisKKwkJCQkJaGVhcF9m cmVldHVwbGUoYXR0dHVwKTsKKwkJCQkJdGFibGVfY2xvc2UoYXR0cnJlbCwgUm93RXhjbHVzaXZl TG9jayk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6 CisJCQkJLyogQ1JFQVRFIE9SIFJFUExBQ0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8K KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQt PmRlZiA9PSBOVUxMKQorCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVN TiAle2NvbHVtbn1JIERST1AgREVGQVVMVCIsIDIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCUxpc3QJICAgKmRwY29u dGV4dF9yZWw7CisJCQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5v OworCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJz ZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCisJCQkJCWRwY29udGV4dF9yZWwgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQo cmVsKSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRS ZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1 dGUpIEdFVFNUUlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wX29iaiwgIiV7ZGVmaW5pdGlvbn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJCQkJCSBS ZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVsLCBhdHRubywKKwkJCQkJCQkJCQkJCQkJCQkgIGRw Y29udGV4dF9yZWwsCisJCQkJCQkJCQkJCQkJCQkJICBOVUxMKSk7CisJCQkJCVJlbGVhc2VTeXND YWNoZShhdHRydHVwKTsKKwkJCQl9CisKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJv cE5vdE51bGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBEUk9QIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkcm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRm9yY2VSb3dTZWN1 cml0eToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIkZPUkNFIFJPVyBMRVZFTCBTRUNVUklU WSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ob0ZvcmNlUm93U2VjdXJpdHk6CisJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJOTyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2Jq KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Tm90TnVsbDoKKwkJCQl0bXBfb2JqID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsIDIs CisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJ CQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJl YWs7CisKKwkJCWNhc2UgQVRfRHJvcEV4cHJlc3Npb246CisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBEUk9QIEVYUFJFU1NJT04gJXtpZl9leGlz dHN9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZHJvcCBleHByZXNz aW9uIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAor CQkJCQkJCQkJCSJpZl9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN1YmNtZC0+ bWlzc2luZ19vayA/ICJJRiBFWElTVFMiIDogIiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9TZXRTdGF0aXN0aWNzOgorCQkJCXsKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwg SW50ZWdlcikpOworCQkJCQlpZiAoc3ViY21kLT5uYW1lKQorCQkJCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRp c3RpY3N9biIsIDMsCisJCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3Rh dGlzdGljcyIsCisJCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lLAorCQkJCQkJCQkJCQkJInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJ CQkJCWludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQllbHNlCisJCQkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1uIFNFVCBTVEFU SVNUSUNTICV7c3RhdGlzdGljc31uIiwgMywKKwkJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlSW50 ZWdlciwgc3ViY21kLT5udW0sCisJCQkJCQkJCQkJCQkic3RhdGlzdGljcyIsIE9ialR5cGVJbnRl Z2VyLAorCQkJCQkJCQkJCQkJaW50VmFsKChJbnRlZ2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9uczoKKwkJCWNhc2UgQVRf UmVzZXRPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KAorCQkJCQkJCQkJCQkJCQkJIGRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhzdWJjbWQp KSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0U3RvcmFnZToKKwkJCQlBc3NlcnQoSXNB KHN1YmNtZC0+ZGVmLCBTdHJpbmcpKTsKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVE9SQUdFICV7c3RvcmFnZX1zIiwgMywKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RvcmFnZSIsCisJCQkJCQkJCQkJImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkic3RvcmFnZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3RyVmFsKChTdHJpbmcgKikgc3ViY21kLT5kZWYp KTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBf b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNz ZXJ0KElzQShzdWJjbWQtPmRlZiwgU3RyaW5nKSk7CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGNv bXByZXNzaW9uIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lLAorCQkJCQkJCQkJCSJjb21wcmVzc2lvbl9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJCXN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Ryb3BDb2x1bW46CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJE Uk9QICV7b2JqdHlwZX1zICV7aWZfbm90X2V4aXN0c31zICV7Y29sdW1ufUkiLCA0LAorCQkJCQkJ CQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlpc3R5cGUgPyAiQVRUUklC VVRFIiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Ag Y29sdW1uIiwKKwkJCQkJCQkJCQkiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkJ CQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wX29iajIg PSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJICJwcmVzZW50IiwgT2Jq VHlwZUJvb2wsIHN1YmNtZC0+YmVoYXZpb3IpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cF9vYmosICIle2Nhc2NhZGV9cyIsIHRtcF9vYmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9BZGRJbmRleDoKKwkJCQl7CisJCQkJCU9pZAkJCWlkeE9pZCA9IHN1Yi0+YWRkcmVz cy5vYmplY3RJZDsKKwkJCQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsK KwkJCQkJY29uc3QgY2hhciAqaWR4bmFtZTsKKwkJCQkJT2lkCQkJY29uc3RyT2lkOworCisJCQkJ CUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRl eFN0bXQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJaWYgKCFpc3RtdC0+aXNjb25zdHJhaW50KQor CQkJCQkJYnJlYWs7CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3BlbihpZHhPaWQsIEFjY2Vzc1No YXJlTG9jayk7CisJCQkJCWlkeG5hbWUgPSBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShpZHgpOwor CisJCQkJCWNvbnN0ck9pZCA9IGdldF9yZWxhdGlvbl9jb25zdHJhaW50X29pZCgKKwkJCQkJCQkJ CQkJCQkJCWNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBpZHhuYW1lLCBmYWxzZSk7CisKKwkJ CQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RSQUlOVCAle25hbWV9SSAle2Rl ZmluaXRpb259cyIsIDMsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBj b25zdHJhaW50IiwKKwkJCQkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBpZHhuYW1lLAor CQkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCXBnX2dl dF9jb25zdHJhaW50ZGVmX3N0cmluZyhjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJCQkJCXJlbGF0aW9u X2Nsb3NlKGlkeCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfQWRkQ29uc3RyYWludDoKKwkJCQl7CisJCQkJCS8qIFhYWCBuZWVkIHRvIHNldCB0aGUg InJlY3Vyc2UiIGJpdCBzb21ld2hlcmU/ICovCisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9IHN1Yi0+ YWRkcmVzcy5vYmplY3RJZDsKKwkJCQkJYm9vbAkJaXNudWxsOworCQkJCQlIZWFwVHVwbGUJdHVw OworCQkJCQlEYXR1bQkJdmFsOworCQkJCQlDb25zdHJhaW50ICpjb25zdHI7CisKKwkJCQkJLyog U2tpcCBhZGRpbmcgY29uc3RyYWludCBmb3IgaW5oZXJpdHMgdGFibGUgc3ViIGNvbW1hbmQgKi8K KwkJCQkJaWYgKCFjb25zdHJPaWQpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlBc3NlcnQoSXNB KHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9IGNhc3ROb2RlKENvbnN0 cmFpbnQsIHN1YmNtZC0+ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9u KQorCQkJCQl7CisJCQkJCQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJ ZEdldERhdHVtKGNvbnN0ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXAp KQorCQkJCQkJeworCQkJCQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNv bnN0cmFpbnQgZXhwcmVzc2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5 c0NhY2hlR2V0QXR0cihDT05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25z dHJhaW50X2NvbmJpbiwgJmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7 CisJCQkJCQkJCWNvbmJpbiA9IFRleHREYXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhw cnMgPSBsYXBwZW5kKGV4cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJ CQkJCQkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlv bn1zIiwgMywKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFp bnQiLAorCQkJCQkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25h bWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9zdHJpbmcoY29uc3RyT2lkKSk7CisJCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsK KwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlDb25z dHJhaW50ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyogSWYgbm8g Y29uc3RyYWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAoIU9p ZElzVmFsaWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJc0EoYywg Q29uc3RyYWludCkpOworCQkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTlNU UkFJTlQgJXtuYW1lfUkgJXtkZWZlcnJhYmxlfXMgJXtpbml0X2RlZmVycmVkfXMiLCA0LAorCQkJ CQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhbHRlciBjb25zdHJhaW50IiwKKwkJCQkJ CQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9p ZCksCisJCQkJCQkJCQkJCSJkZWZlcnJhYmxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJ Yy0+ZGVmZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJCQkJ CQkJCSJpbml0X2RlZmVycmVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJYy0+aW5pdGRl ZmVycmVkID8gIklOSVRJQUxMWSBERUZFUlJFRCIgOiAiSU5JVElBTExZIElNTUVESUFURSIpOwor CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50 OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVEUgQ09OU1RSQUlOVCAle2Nv bnN0cmFpbnR9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRh dGUgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBz dWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWlu dDoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRST1AgQ09OU1RSQUlOVCAle2NvbnN0 cmFpbnR9SSAle2lmX25vdF9leGlzdHN9cyIsIDMsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZHJvcCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkiaWZfbm90X2V4aXN0cyIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkJCQkJc3ViY21kLT5taXNzaW5nX29rID8gIklGIE5PVCBFWElT VFMiIDogIiIsCisJCQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQt Pm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BbHRlckNvbHVtblR5cGU6CisJ CQkJeworCQkJCQlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwkJ CQkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQkJCQlDb2x1bW5EZWYgICpkZWY7CisKKwkJCQkJ YXR0ID0gJih0dXBkZXNjLT5hdHRyc1tzdWItPmFkZHJlc3Mub2JqZWN0U3ViSWQgLSAxXSk7CisJ CQkJCWRlZiA9IChDb2x1bW5EZWYgKikgc3ViY21kLT5kZWY7CisJCQkJCUFzc2VydChJc0EoZGVm LCBDb2x1bW5EZWYpKTsKKworCQkJCQkvKgorCQkJCQkgKiBWZXJib3NlIHN5bnRheAorCQkJCQkg KgorCQkJCQkgKiBDb21wb3NpdGUgdHlwZXM6IEFMVEVSIHJlbHR5cGUgJXtjb2x1bW59SSBTRVQg REFUQSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zIEFUVFJJQlVURSAl e2Nhc2NhZGV9cworCQkJCQkgKgorCQkJCQkgKiBOb3JtYWwgdHlwZXM6IEFMVEVSIHJlbHR5cGUg JXtjb2x1bW59SSBTRVQgREFUQSBUWVBFCisJCQkJCSAqICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlv bn1zIENPTFVNTiAle3VzaW5nfXMKKwkJCQkJICovCisJCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtjb2x1bW59SSBTRVQgREFUQSBUWVBFICV7ZGF0YXR5 cGV9VCIsIDQsCisJCQkJCQkJCQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CQkJaXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiYWx0ZXIgY29sdW1uIHR5cGUiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCQkiZGF0YXR5cGUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShhdHQtPmF0dHR5cGlk LAorCQkJCQkJCQkJCQkJCQkJCSBhdHQtPmF0dHR5cG1vZCkpOworCisJCQkJCS8qIEFkZCBhIENP TExBVEUgY2xhdXNlLCBpZiBuZWVkZWQgKi8KKwkJCQkJdG1wX29iajIgPSBuZXdfb2JqdHJlZSgi Q09MTEFURSIpOworCQkJCQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJ CXsKKwkJCQkJCU9ialRyZWUgICAgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJICAgYXR0LT5hdHRjb2xsYXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1w X29iajIsICIle25hbWV9RCIsIGNvbGxuYW1lKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wX29iajIpOworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXBfb2JqLCAiJXtjb2xsYXRpb259cyIsIHRtcF9vYmoyKTsKKworCQkJCQkvKiBJZiBub3QgYSBj b21wb3NpdGUgdHlwZSwgYWRkIHRoZSBVU0lORyBjbGF1c2UgKi8KKwkJCQkJaWYgKCFpc3R5cGUp CisJCQkJCXsKKwkJCQkJCS8qCisJCQkJCQkgKiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xhdXNlLCB0 cmFuc2Zvcm1BbHRlclRhYmxlU3RtdAorCQkJCQkJICogcmFuIGl0IHRocm91Z2ggdHJhbnNmb3Jt RXhwciBhbmQgc3RvcmVkIHRoZQorCQkJCQkJICogcmVzdWx0aW5nIG5vZGUgaW4gY29va2VkX2Rl ZmF1bHQsIHdoaWNoIHdlIGNhbiB1c2UKKwkJCQkJCSAqIGhlcmUuCisJCQkJCQkgKi8KKwkJCQkJ CXRtcF9vYmoyID0gbmV3X29ianRyZWUoIlVTSU5HIik7CisJCQkJCQlpZiAoZGVmLT5yYXdfZGVm YXVsdCkKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqMiwgIiV7ZXhwcmVzc2lv bn1zIiwKKwkJCQkJCQkJCQkJCSAiZXhwcmVzc2lvbiIsCisJCQkJCQkJCQkJCQkgc3ViLT51c2lu Z2V4cHIpOworCQkJCQkJZWxzZQorCQkJCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqMik7 CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt1c2luZ31zIiwgdG1wX29i ajIpOworCQkJCQl9CisKKwkJCQkJLyogSWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhl IENBU0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJCXRtcF9v YmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJCWlmIChzdWJjbWQtPmJlaGF2aW9y ICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iajIpOwor CQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7Y2FzY2FkZX1zIiwgdG1wX29i ajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRPRE9MSVNU CisJCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wX29iaiA9IGRl cGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKKwkJCQkJCQkJCQkJc3ViY21k LT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQ2hhbmdlT3duZXI6 CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJCQkJ CQkJIm93bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlnZXRfcm9sZXNwZWNfbmFtZShz dWJjbWQtPm5ld293bmVyKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0ZXJP bjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNMVVNURVIgT04gJXtpbmRleH1JIiwg MiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjbHVzdGVyIG9uIiwKKwkJCQkJ CQkJCQkiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9Ecm9wQ2x1c3RlcjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIlNFVCBXSVRIT1VUIENMVVNURVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCB3aXRob3V0IGNsdXN0ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfU2V0TG9nZ2VkOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIExPR0dFRCIs IDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGxvZ2dlZCIpOworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRVbkxvZ2dlZDoKKwkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAic2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ry b3BPaWRzOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEhPVVQgT0lEUyIs IDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGhvdXQgb2lkcyIp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9v YmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIEFDQ0VTUyBNRVRIT0QgJXthY2Nlc3NfbWV0aG9kfUki LCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBhY2Nlc3MgbWV0aG9k IiwKKwkJCQkJCQkJCQkiYWNjZXNzX21ldGhvZCIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFt ZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9TZXRUYWJsZVNwYWNlOgorCQkJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJ CQkJCQkidGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldFJlbE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0UmVs T3B0aW9uczoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCgKKwkJCQkJCQkJCQkJCQkJCSBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwg T2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRW5hYmxlQWx3YXlzVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJM RSBBTFdBWVMgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNl IEFUX0VuYWJsZVJlcGxpY2FUcmlnOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5B QkxFIFJFUExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdn ZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5k KHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJ Y2FzZSBBVF9EaXNhYmxlVHJpZzoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FC TEUgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZGlzYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRy aWdBbGw6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBBTEwi LCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIGFs bCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ0FsbDoKKwkJCQl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlX1ZBKCJFTkFCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX0Rpc2FibGVUcmlnVXNlcjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVf VkEoIkRJU0FCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkaXNhYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1 YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9FbmFibGVSdWxlOgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJV TEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJs ZSBydWxlIiwKKwkJCQkJCQkJCQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJFTkFCTEUgQUxXQVlTIFJVTEUgJXtydWxlfUkiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBhbHdheXMgcnVsZSIsCisJ CQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJCQli cmVhazsKKworCQkJY2FzZSBBVF9FbmFibGVSZXBsaWNhUnVsZToKKwkJCQl0bXBfb2JqID0gbmV3 X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJ CSJydWxlIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRGlzYWJsZVJ1bGU6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJE SVNBQkxFIFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRpc2FibGUgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRJbmhlcml0OgorCQkJ CXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSU5IRVJJVCAle3BhcmVudH1EIiwgMiwKKwkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJpbmhlcml0IiwKKwkJCQkJCQkJCQkicGFyZW50 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0 SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CisJCQkJdG1w X29iaiA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFyZW50fUQiLCAyLAorCQkJCQkJ CQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJpdCIsCisJCQkJCQkJCQkJInBh cmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9i amVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZE9mOgorCQkJCXRtcF9v YmogPSBuZXdfb2JqdHJlZV9WQSgiT0YgJXt0eXBlX29mfVQiLCAyLAorCQkJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImFkZCBvZiIsCisJCQkJCQkJCQkJInR5cGVfb2YiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHN1Yi0+YWRkcmVzcy5vYmpl Y3RJZCwgLTEpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9mOgorCQkJCXRt cF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiTk9UIE9GIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJub3Qgb2YiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfUmVw bGljYUlkZW50aXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiUkVQTElDQSBJREVO VElUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAicmVwbGljYSBpZGVu dGl0eSIpOworCQkJCXN3aXRjaCAoKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVm KS0+aWRlbnRpdHlfdHlwZSkKKwkJCQl7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9ERUZB VUxUOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9cyIsICJp ZGVudCIsCisJCQkJCQkJCQkJCSAiREVGQVVMVCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2Ug UkVQTElDQV9JREVOVElUWV9GVUxMOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29i aiwgIiV7aWRlbnR9cyIsICJpZGVudCIsCisJCQkJCQkJCQkJCSAiRlVMTCIpOworCQkJCQkJYnJl YWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RISU5HOgorCQkJCQkJYXBwZW5kX3N0 cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWRlbnR9cyIsICJpZGVudCIsCisJCQkJCQkJCQkJCSAi Tk9USElORyIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9JTkRF WDoKKwkJCQkJCXRtcF9vYmoyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElOREVYICV7aW5kZXh9 SSIsIDEsCisJCQkJCQkJCQkJCQkgImluZGV4IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJ CSAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1lKTsKKwkJCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle2lkZW50fXMiLCB0bXBfb2JqMik7CisJCQkJ CQlicmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVJvd1Nl Y3VyaXR5OgorCQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJPVyBMRVZFTCBT RUNVUklUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHJv dyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUm93U2Vj dXJpdHk6CisJCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJPVyBMRVZFTCBT RUNVUklUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGlzYWJsZSBy b3cgc2VjdXJpdHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisJCQkJYnJlYWs7CisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2Ug QVRfR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wX29iaiA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlz dCAqKSBzdWJjbWQtPmRlZiwgTlVMTCk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNl IEFUX0F0dGFjaFBhcnRpdGlvbjoKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFUVEFD SCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiYXR0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJInBhcnRpdGlv bl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJc3ViLT5hZGRy ZXNzLm9iamVjdElkKSk7CisKKwkJCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwg IiV7cGFydGl0aW9uX2JvdW5kfXMiLAorCQkJCQkJCQkJCSAicGFydGl0aW9uX2JvdW5kIiwKKwkJ CQkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQp KTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfRGV0YWNoUGFydGl0aW9uOgorCQkJewor CQkJCVBhcnRpdGlvbkNtZCAqY21kOworCisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgUGFy dGl0aW9uQ21kKSk7CisJCQkJY21kID0gKFBhcnRpdGlvbkNtZCAqKSBzdWJjbWQtPmRlZjsKKwor CQkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlv bl9pZGVudGl0eX1EICV7Y29uY3VycmVudH1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkJImRldGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0 aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+ YWRkcmVzcy5vYmplY3RJZCksCisJCQkJCQkJCQkJY21kLT5jb25jdXJyZW50ID8gIkNPTkNVUlJF TlRMWSIgOiAiIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBBVF9EZXRhY2hQYXJ0 aXRpb25GaW5hbGl6ZToKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkRFVEFDSCBQQVJU SVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCBGSU5BTElaRSIsIDIsCisJCQkJCQkJCQkJInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiBmaW5hbGl6ZSIsCisJCQkJCQkJ CQkJInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9B ZGRJZGVudGl0eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlz ZXFfcmVsaWQ7CisJCQkJCU9ialRyZWUgICAgKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29s ZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXBfb2JqID0gbmV3X29i anRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUi LCBPYmpUeXBlU3RyaW5nLCAiYWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShS ZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdl dElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOwor CisJCQkJCWlmIChPaWRJc1ZhbGlkKHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9 IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxz ZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiQUREICV7aWRlbnRpdHlf Y29sdW1ufXMiLCBzZXFkZWYpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ CWNhc2UgQVRfU2V0SWRlbnRpdHk6CisJCQkJeworCQkJCQlEZWZFbGVtICAgICpkZWZlbDsKKwkJ CQkJY2hhcgkJaWRlbnRpdHkgPSAwOworCQkJCQlPYmpUcmVlICAgICpzZXFkZWY7CisJCQkJCUF0 dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFfcmVsaWQ7CisKKworCQkJCQl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsK KworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9 IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50 MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdl dFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5 U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJCQkJCWlm IChPaWRJc1ZhbGlkKHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRlcGFyc2Vf Q29sdW1uSWRlbnRpdHkoc2VxX3JlbGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisJCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtkZWZpbml0aW9ufXMiLCBzZXFkZWYpOworCQkJCQl9 CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w X29iaikpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0eToKKwkJ CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1Ag SURFTlRJVFkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRl bnRpdHkiLAorCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7aWZfZXhpc3RzfXMiLAor CQkJCQkJCQkJICJpZl9leGlzdHMiLAorCQkJCQkJCQkJIHN1YmNtZC0+bWlzc2luZ19vayA/ICJJ RiBFWElTVFMiIDogIiIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wX29iaikpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9n KFdBUk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJsZSBzdWJ0eXBlICVkIiwKKwkJCQkJIHN1 YmNtZC0+c3VidHlwZSk7CisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBXZSBkb24ndCBz dXBwb3J0IHJlcGxpY2F0aW5nIEFMVEVSIFRBQkxFIHdoaWNoIGNvbnRhaW5zIHZvbGF0aWxlCisJ CSAqIGZ1bmN0aW9ucyBiZWNhdXNlIEl0J3MgcG9zc2libGUgdGhlIGZ1bmN0aW9ucyBjb250YWlu IERETC9ETUwgaW4KKwkJICogd2hpY2ggY2FzZSB0aGVzZSBvcGVyYXRpb25zIHdpbGwgYmUgZXhl Y3V0ZWQgdHdpY2UgYW5kIGNhdXNlCisJCSAqIGR1cGxpY2F0ZSBkYXRhLiBJbiBhZGRpdGlvbiwg d2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSB0YWJsZXMgYmVpbmcKKwkJICogYWNjZXNzZWQgYnkg dGhlc2UgRERML0RNTCBhcmUgcHVibGlzaGVkIG9yIG5vdC4gU28gYmxpbmRseSBhbGxvd2luZwor CQkgKiBzdWNoIGZ1bmN0aW9ucyBjYW4gYWxsb3cgdW5pbnRlbmRlZCBjbGF1c2VzIGxpa2UgdGhl IHRhYmxlcworCQkgKiBhY2Nlc3NlZCBpbiB0aG9zZSBmdW5jdGlvbnMgbWF5IG5vdCBldmVuIGV4 aXN0IG9uIHRoZSBzdWJzY3JpYmVyLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVu Y3Rpb25zKChOb2RlICopIGV4cHJzKSkKKwkJCWVsb2coRVJST1IsICJBTFRFUiBUQUJMRSBjb21t YW5kIHVzaW5nIHZvbGF0aWxlIGZ1bmN0aW9uIGNhbm5vdCBiZSByZXBsaWNhdGVkIik7CisKKwkJ LyoKKwkJICogQ2xlYW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMg bm8gdm9sYXRpbGUKKwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOwor CQlleHBycyA9IE5JTDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlpZiAobGlzdF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlh cHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7c3ViY21kczosIH1zIiwgc3ViY21kcyk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogSGFuZGxlIGRlcGFyc2luZyBvZiBEUk9QIGNvbW1hbmRz LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBEUk9QICVzIElGIEVYSVNUUyAlJXtvYmppZGVu dGl0eX1zICV7Y2FzY2FkZX1zCisgKi8KK2NoYXIgKgorZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29u c3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCSBEcm9w QmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCWNoYXIJICAgKmNv bW1hbmQ7CisJY2hhcgkgICAqaWRlbnRpdHkgPSAoY2hhciAqKSBvYmppZGVudGl0eTsKKwlPYmpU cmVlICAgICpzdG10OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJSnNvbmIJICAgKmpzb25iOwor CisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisKKwlzdG10ID0gbmV3X29ianRyZWVfVkEoIkRST1Ag JXtvYmp0eXBlfXMgSUYgRVhJU1RTICV7b2JqaWRlbnRpdHl9cyIsIDIsCisJCQkJCQkgICJvYmp0 eXBlIiwgT2JqVHlwZVN0cmluZywgb2JqZWN0dHlwZSwKKwkJCQkJCSAgIm9iamlkZW50aXR5Iiwg T2JqVHlwZVN0cmluZywgaWRlbnRpdHkpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJD QVNDQURFIiwgMSwKKwkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBE Uk9QX0NBU0NBREUpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIle2Nhc2NhZGV9cyIs IHRtcF9vYmopOworCisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQg PSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4p OworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5nIG9mIHNp bXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2Fz ZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoK K2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9pZAkJ CW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5cGUgPT0g U0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmplY3RJZCA9 IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQtPmluX2V4dGVuc2lv biAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCisJCXJl dHVybiBOVUxMOworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5dGhpbmcg dGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhwYXJzZXRy ZWUpKQorCXsKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVh dGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTdG10Ogor CQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQlj YXNlIFRfSW5kZXhTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWRlZmF1bHQ6CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2Rl IHR5cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0 cmVlKSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVw YXJzZSBhIENvbGxlY3RlZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2Nv bW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVy cmlkZVNlYXJjaFBhdGggKm92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlN ZW1vcnlDb250ZXh0IHRtcGN4dDsKKwlPYmpUcmVlICAgICp0cmVlOworCWNoYXIJICAgKmNvbW1h bmQgPSBOVUxMOworCVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZl cnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4 dCwKKwkgKiB0byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5k bGluZyBjb2RlLCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3Jl IHN3aXRjaGluZy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxv Y1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBh cnNlIGN0eCIsCisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJ ICAgQUxMT0NTRVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVM VF9NQVhTSVpFKTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKwor CS8qCisJICogTWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1 bGV1dGlscy5jIGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMg b2YgZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2JqZWN0 IG5hbWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiIHRv CisJICogZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAg UmF0aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRv IG92ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBj ZW50cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBh dGgoQ3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsK KwlvdmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRl bXAgPSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXZl cmJvc2UgPSB2ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNhc2Ug U0NUX1NpbXBsZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQli cmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyUmVs YXRpb24oY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgorCQkJdHJl ZSA9IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0 OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBjbWQt PnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUpCisJ eworCQlKc29uYgkgICAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUp OworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9F U1RJTUFURURfTEVOKTsKKwl9CisKKwkvKgorCSAqIENsZWFuIHVwLiAgTm90ZSB0aGF0IHNpbmNl IHdlIGNyZWF0ZWQgdGhlIFN0cmluZ0luZm8gaW4gdGhlIGNhbGxlcidzCisJICogY29udGV4dCwg dGhlIG91dHB1dCBzdHJpbmcgaXMgbm90IGRlbGV0ZWQgaGVyZS4KKwkgKi8KKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN4dCk7CisKKwly ZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIEdpdmVuIGEgQ29sbGVjdGVkQ29tbWFuZCwgcmV0 dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBpdC4KKyAqCisgKiBUaGUgY29tbWFuZCBpcyBl eHBhbmRlZCBmdWxseSBzbyB0aGF0IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyBldmVuIGluIHRo ZQorICogZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICovCitEYXR1bQorZGRsX2RlcGFy c2VfdG9fanNvbihQR19GVU5DVElPTl9BUkdTKQoreworCUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9 IChDb2xsZWN0ZWRDb21tYW5kICopIFBHX0dFVEFSR19QT0lOVEVSKDApOworCWNoYXIJICAgKmNv bW1hbmQ7CisKKwljb21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCB0cnVlKTsK KworCWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21t YW5kKSk7CisKKwlQR19SRVRVUk5fTlVMTCgpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTM2YzZkOGE2MAotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKQEAgLTAsMCArMSw3ODEg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9qc29uLmMKKyAqCSAgSlNPTiBjb2Rl IHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisgKgorICogUG9ydGlvbnMgQ29weXJp Z2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg b2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5naW5mby5oIgorI2luY2x1ZGUgInRj b3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUg InV0aWxzL2pzb25iLmgiCisKKworLyoKKyAqIENvbnZlcnNpb24gc3BlY2lmaWVyIHdoaWNoIGRl dGVybWluZXMgaG93IHRvIGV4cGFuZCB0aGUgSlNPTiBlbGVtZW50CisgKiBpbnRvIGEgc3RyaW5n LgorICovCit0eXBlZGVmIGVudW0KK3sKKwlTcGVjRG90dGVkTmFtZSwKKwlTcGVjSWRlbnRpZmll ciwKKwlTcGVjTnVtYmVyLAorCVNwZWNPcGVyYXRvck5hbWUsCisJU3BlY1JvbGUsCisJU3BlY1N0 cmluZywKKwlTcGVjU3RyaW5nTGl0ZXJhbCwKKwlTcGVjVHlwZU5hbWUKK30gY29udlNwZWNpZmll cjsKKworLyoKKyAqIEEgdGVybmFyeSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgYSBib29sZWFuIHR5 cGUgSnNvbmJWYWx1ZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3Ry dWUsCisJdHZfZmFsc2UKK30JCQlqc29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRf b25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCQkJ IEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJCQkJ IGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5n SW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNo YXIgKmFycmF5c2VwLAorCQkJCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBj aGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7 CisKKy8qCisgKiBHaXZlbiBhIEpzb25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdp dGggdGhlIGdpdmVuIGtleSBuYW1lIGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIg dGhhbiBqYnZCb29sLCBhbiBlcnJvciBpcyByYWlzZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0 LCB0dl9hYnNlbnQgaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29u X3RyaXZhbHVlLgorICovCitzdGF0aWMganNvbl90cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25i Y29udGFpbmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJ SnNvbmJWYWx1ZQlrZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJanNvbl90cml2YWx1ZSByZXN1 bHQ7CisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXlu YW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZp bmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVD VCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYg KHZhbHVlLT50eXBlICE9IGpidkJvb2wpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBc IiVzXCIgaXMgbm90IG9mIHR5cGUgYm9vbGVhbiIsCisJCQkJCQlrZXluYW1lKSkpOworCXJlc3Vs dCA9IHZhbHVlLT52YWwuYm9vbGVhbiA/IHR2X3RydWUgOiB0dl9mYWxzZTsKKwlwZnJlZSh2YWx1 ZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5l ciwgZmluZCB0aGUgSnNvbmJWYWx1ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAq IElmIGl0J3Mgb2YgYSB0eXBlIG90aGVyIHRoYW4gamJ2U3RyaW5nLCBhbiBlcnJvciBpcyByYWlz ZWQuICBJZiBpdCBkb2Vzbid0CisgKiBleGlzdCwgYW4gZXJyb3IgaXMgcmFpc2VkIHVubGVzcyBt aXNzaW5nX29rOyBvdGhlcndpc2UgcmV0dXJuIE5VTEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFu ZCBpcyBhIHN0cmluZywgYSBmcmVzaGx5IHBhbGxvYydlZCBjb3B5IGlzIHJldHVybmVkLgorICoK KyAqIElmICpsZW5ndGggaXMgbm90IE5VTEwsIGl0IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRo ZSBzdHJpbmcuCisgKi8KK3N0YXRpYyBjaGFyICoKK2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKEpzb25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBi b29sIG1pc3Npbmdfb2ssIGludCAqbGVuZ3RoKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25i VmFsdWUgKnZhbHVlOworCWNoYXIJICAgKnN0cjsKKworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlz IGlzIGFuIG9iamVjdCwgbm90IGFuIGFycmF5ICovCisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsK KwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0 cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250 YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwp CisJeworCQlpZiAobWlzc2luZ19vaykKKwkJCXJldHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9S LAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBl cnJtc2coIm1pc3NpbmcgZWxlbWVudCBcIiVzXCIgaW4gSlNPTiBvYmplY3QiLCBrZXluYW1lKSkp OworCX0KKworCWlmICh2YWx1ZS0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUgc3RyaW5nIiwga2V5bmFtZSkpKTsK KworCXN0ciA9IHBuc3RyZHVwKHZhbHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJp bmcubGVuKTsKKwlpZiAobGVuZ3RoKQorCQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVu OworCXBmcmVlKHZhbHVlKTsKKwlyZXR1cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFS U0VfUE9JTlRFUihwdHIsZW5kX3B0cikgXAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5k X3B0cikpIFwKKwkJCWVyZXBvcnQoRVJST1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZB TElEX1BBUkFNRVRFUl9WQUxVRSksIFwKKwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1h dCBzcGVjaWZpZXIiKSkpOyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxw ZXIgZm9yIGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nLgorICoKKyAqIEZpbmQgdGhlICJmbXQi IGVsZW1lbnQgaW4gdGhlIGdpdmVuIGNvbnRhaW5lciwgYW5kIGV4cGFuZCBpdCBpbnRvIHRoZQor ICogcHJvdmlkZWQgU3RyaW5nSW5mby4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9mbXRfcmVj dXJzaXZlKFN0cmluZ0luZm8gYnVmLCBKc29uYkNvbnRhaW5lciAqY29udGFpbmVyKQoreworCUpz b25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNvbnN0IGNoYXIgKmNwOworCWNv bnN0IGNoYXIgKnN0YXJ0X3B0cjsKKwljb25zdCBjaGFyICplbmRfcHRyOworCWludAkJCWxlbjsK KworCXN0YXJ0X3B0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGNvbnRhaW5lciwg ImZtdCIsIGZhbHNlLCAmbGVuKTsKKwllbmRfcHRyID0gc3RhcnRfcHRyICsgbGVuOworCisJZm9y IChjcCA9IHN0YXJ0X3B0cjsgY3AgPCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJY29udlNwZWNpZmll ciBzcGVjaWZpZXI7CisJCWJvb2wJCWlzX2FycmF5ID0gZmFsc2U7CisJCWNoYXIJICAgKnBhcmFt ID0gTlVMTDsKKwkJY2hhcgkgICAqYXJyYXlzZXAgPSBOVUxMOworCisJCWlmICgqY3AgIT0gJyUn KQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJQURWQU5DRV9QQVJTRV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKworCQkv KiBFYXN5IGNhc2U6ICUlIG91dHB1dHMgYSBzaW5nbGUgJSAqLworCQlpZiAoKmNwID09ICclJykK KwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybyhidWYsICpjcCk7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qCisJCSAqIFNjYW4gdGhlIG1hbmRhdG9yeSBlbGVtZW50IG5hbWUuICBB bGxvdyBmb3IgYW4gYXJyYXkgc2VwYXJhdG9yCisJCSAqICh3aGljaCBtYXkgYmUgdGhlIGVtcHR5 IHN0cmluZykgdG8gYmUgc3BlY2lmaWVkIGFmdGVyIGEgY29sb24uCisJCSAqLworCQlpZiAoKmNw ID09ICd7JykKKwkJeworCQkJU3RyaW5nSW5mb0RhdGEgcGFyYnVmOworCQkJU3RyaW5nSW5mb0Rh dGEgYXJyYXlzZXBidWY7CisJCQlTdHJpbmdJbmZvCWFwcGVuZFRvOworCisJCQlpbml0U3RyaW5n SW5mbygmcGFyYnVmKTsKKwkJCWFwcGVuZFRvID0gJnBhcmJ1ZjsKKworCQkJQURWQU5DRV9QQVJT RV9QT0lOVEVSKGNwLCBlbmRfcHRyKTsKKwkJCXdoaWxlIChjcCA8IGVuZF9wdHIpCisJCQl7CisJ CQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3VuZCBhcnJheSBz ZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBsZXRl LCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3RyaW5n SW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJ aXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIp OworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7CisJ CQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOworCQkJ CX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJCUFE VkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1 Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYuZGF0 YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJt aXNzaW5nIGNvbnZlcnNpb24gbmFtZSBpbiBjb252ZXJzaW9uIHNwZWNpZmllciIpKSk7CisKKwkJ c3dpdGNoICgqY3ApCisJCXsKKwkJCWNhc2UgJ0knOgorCQkJCXNwZWNpZmllciA9IFNwZWNJZGVu dGlmaWVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnRCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0Rv dHRlZE5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVj U3RyaW5nOworCQkJCWJyZWFrOworCQkJY2FzZSAnTCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0 cmluZ0xpdGVyYWw7CisJCQkJYnJlYWs7CisJCQljYXNlICdUJzoKKwkJCQlzcGVjaWZpZXIgPSBT cGVjVHlwZU5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICdPJzoKKwkJCQlzcGVjaWZpZXIgPSBT cGVjT3BlcmF0b3JOYW1lOworCQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJc3BlY2lmaWVy ID0gU3BlY051bWJlcjsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJCXNwZWNpZmllciA9 IFNwZWNSb2xlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJpbnZhbGlkIGNvbnZlcnNpb24gc3BlY2lmaWVyIFwiJWNcIiIsICpjcCkpKTsKKwkJ fQorCisJCS8qCisJCSAqIE9idGFpbiB0aGUgZWxlbWVudCB0byBiZSBleHBhbmRlZC4KKwkJICov CisJCWtleS50eXBlID0gamJ2U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy52YWwgPSBwYXJhbTsK KwkJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKHBhcmFtKTsKKworCQl2YWx1ZSA9IGZpbmRK c29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsIEpCX0ZPQkpFQ1QsICZrZXkpOworCQlB c3NlcnQodmFsdWUgIT0gTlVMTCk7CisKKwkJLyoKKwkJICogRXhwYW5kIHRoZSBkYXRhIChwb3Nz aWJseSBhbiBhcnJheSkgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8uCisJCSAqLworCQlpZiAo aXNfYXJyYXkpCisJCQlleHBhbmRfanNvbmJfYXJyYXkoYnVmLCBwYXJhbSwgdmFsdWUsIGFycmF5 c2VwLCBzcGVjaWZpZXIsIHN0YXJ0X3B0cik7CisJCWVsc2UKKwkJCWV4cGFuZF9vbmVfanNvbmJf ZWxlbWVudChidWYsIHBhcmFtLCB2YWx1ZSwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCX0KK30K KworLyoKKyAqIEV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSBxdW90ZWQgaWRlbnRpZmllci4gIFRo ZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5k X2pzb252YWxfaWRlbnRpZmllcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwljaGFyCSAgICpzdHI7CisKKwlBc3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZTdHJpbmcp OworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZh bC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRp ZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1 ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJlIG9mIHR5cGUKKyAq IGJpbmFyeSBhbmQgbWF5IGNvbnRhaW4gZWxlbWVudHMgInNjaGVtYW5hbWUiIChvcHRpb25hbCks ICJvYmpuYW1lIgorICogKG1hbmRhdG9yeSksICJhdHRybmFtZSIgKG9wdGlvbmFsKS4gIERvdWJs ZSBxdW90ZXMgYXJlIGFkZGVkIHRvIGVhY2ggZWxlbWVudAorICogYXMgbmVjZXNzYXJ5LCBhbmQg ZG90IHNlcGFyYXRvcnMgd2hlcmUgbmVlZGVkLgorICoKKyAqIE9uZSBkYXkgd2UgbWlnaHQgbmVl ZCBhICJjYXRhbG9nIiBlbGVtZW50IGFzIHdlbGwsIGJ1dCBubyBjdXJyZW50IHVzZSBjYXNlCisg KiBuZWVkcyB0aGF0LgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfZG90dGVkbmFt ZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7 CisJSnNvbmJDb250YWluZXIgKmRhdGEgPSBqc29udmFsLT52YWwuYmluYXJ5LmRhdGE7CisKKwlB c3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZCaW5hcnkpOworCisJc3RyID0gZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoZGF0YSwgInNjaGVtYW5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAo c3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVy KHN0cikpOworCQlwZnJlZShzdHIpOworCX0KKworCXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25i Y29udGFpbmVyKGRhdGEsICJvYmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCXBmcmVlKHN0cik7CisKKwlz dHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihkYXRhLCAiYXR0cm5hbWUiLCB0cnVl LCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIuJXMiLCBx dW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0KK30KKworLyoKKyAqIEV4 cGFuZCBhIEpTT04gdmFsdWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBh bmRfanNvbnZhbF90eXBlbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwljaGFyCSAgICpzY2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5cGVuYW1lOworCWNoYXIJ ICAgKnR5cG1vZHN0cjsKKwlqc29uX3RyaXZhbHVlIGlzX2FycmF5OworCWNoYXIJICAgKmFycmF5 X2RlY29yOworCUpzb25iQ29udGFpbmVyICpkYXRhID0ganNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh OworCisJLyoKKwkgKiBXZSBvbWl0IHNjaGVtYS1xdWFsaWZ5aW5nIHRoZSBvdXRwdXQgbmFtZSBp ZiB0aGUgc2NoZW1hIGVsZW1lbnQgaXMKKwkgKiBlaXRoZXIgdGhlIGVtcHR5IHN0cmluZyBvciBO VUxMOyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBjYXNlcworCSAqIGlzIHRoYXQg aW4gdGhlIGxhdHRlciB3ZSBxdW90ZSB0aGUgdHlwZSBuYW1lLCBpbiB0aGUgZm9ybWVyIHdlIGRv bid0LgorCSAqIFRoaXMgYWxsb3dzIGZvciB0eXBlcyB3aXRoIHNwZWNpYWwgdHlwbW9kIG5lZWRz LCBzdWNoIGFzIGludGVydmFsIGFuZAorCSAqIHRpbWVzdGFtcCAoc2VlIGZvcm1hdF90eXBlX2Rl dGFpbGVkKSwgd2hpbGUgYXQgdGhlIHNhbWUgdGltZSBhbGxvd2luZworCSAqIGZvciB0aGUgc2No ZW1hIG5hbWUgdG8gYmUgb21pdHRlZCBmcm9tIHR5cGUgbmFtZXMgdGhhdCByZXF1aXJlIHF1b3Rl cworCSAqIGJ1dCBhcmUgdG8gYmUgb2J0YWluZWQgZnJvbSBhIHVzZXIgc2NoZW1hLgorCSAqLwor CisJc2NoZW1hID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgInNjaGVtYW5h bWUiLCB0cnVlLCBOVUxMKTsKKwl0eXBlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFp bmVyKGRhdGEsICJ0eXBlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwl0eXBtb2RzdHIgPSBmaW5kX3N0 cmluZ19pbl9qc29uYmNvbnRhaW5lcihkYXRhLCAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNf YXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoZGF0YSwgInR5cGFycmF5Iik7CisJ c3dpdGNoIChpc19hcnJheSkKKwl7CisJCWNhc2UgdHZfdHJ1ZToKKwkJCWFycmF5X2RlY29yID0g IltdIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfZmFsc2U6CisJCQlhcnJheV9kZWNvciA9ICIi OworCQkJYnJlYWs7CisKKwkJY2FzZSB0dl9hYnNlbnQ6CisJCWRlZmF1bHQ6CisJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkJIGVycm1zZygibWlzc2luZyB0eXBhcnJheSBlbGVtZW50IikpKTsKKwl9CisKKwlpZiAo c2NoZW1hID09IE5VTEwpCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVu dGlmaWVyKHR5cGVuYW1lKSk7CisJZWxzZSBpZiAoc2NoZW1hWzBdID09ICdcMCcpCisJCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiJXMiLCB0eXBlbmFtZSk7CS8qIFNwZWNpYWwgdHlwbW9kIG5lZWRz ICovCisJZWxzZQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiVzIiwgcXVvdGVfaWRlbnRp ZmllcihzY2hlbWEpLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIodHlwZW5hbWUpKTsKKworCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyIsIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLCBh cnJheV9kZWNvcik7CisJcGZyZWUoc2NoZW1hKTsKKwlwZnJlZSh0eXBlbmFtZSk7CisJcGZyZWUo dHlwbW9kc3RyKTsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYW4gb3BlcmF0 b3IgbmFtZS4gVGhlIHZhbHVlIG1heSBjb250YWluIGVsZW1lbnQKKyAqICJzY2hlbWFuYW1lIiAo b3B0aW9uYWwpLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfb3BlcmF0b3IoU3Ry aW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCUpz b25iQ29udGFpbmVyICpkYXRhID0ganNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhOworCisJc3RyID0g ZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoZGF0YSwgInNjaGVtYW5hbWUiLCB0cnVlLCBO VUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLworCWlmIChzdHIgIT0g TlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMu IiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBm aW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihkYXRhLCAib2JqbmFtZSIsIGZhbHNlLCBOVUxM KTsKKwlpZiAoIXN0cikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCWVycm1zZygibWlzc2luZyBvcGVyYXRvciBuYW1l IikpOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJcGZyZWUoc3RyKTsK K30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJpbmcuICBUaGUgdmFsdWUg bXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBvZgorICogdHlwZSBCaW5hcnkuICBJbiB0aGUgbGF0 dGVyIGNhc2UsIGl0IG11c3QgY29udGFpbiBhICJmbXQiIGVsZW1lbnQgd2hpY2ggd2lsbAorICog YmUgcmVjdXJzaXZlbHkgZXhwYW5kZWQ7IGFsc28sIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYW4g ZWxlbWVudCAicHJlc2VudCIKKyAqIGFuZCBpdCBpcyBzZXQgdG8gZmFsc2UsIHRoZSBleHBhbnNp b24gaXMgdGhlIGVtcHR5IHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGFjdHVh bCBleHBhbnNpb24gd2FzIG1hZGUgZHVlIHRvIHRoZSAicHJlc2VudCIgZmxhZworICogYmVpbmcg c2V0IHRvICJmYWxzZSIuCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBjaGVj ayBqc29udmFsIGlzIG9mIHR5cGUgamJ2U3RyaW5nIG9yIGpidkJpbmFyeS4KKyAqLworc3RhdGlj IGJvb2wKK2V4cGFuZF9qc29udmFsX3N0cmluZyhTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAq anNvbnZhbCkKK3sKKwlib29sIGV4cGFuZGVkID0gZmFsc2U7CisKKwlpZiAoanNvbnZhbC0+dHlw ZSA9PSBqYnZTdHJpbmcpCisJeworCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwganNvbnZh bC0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJICAganNvbnZhbC0+dmFsLnN0cmluZy5sZW4pOwor CQlleHBhbmRlZCA9IHRydWU7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2Qmlu YXJ5KQorCXsKKwkJanNvbl90cml2YWx1ZSBwcmVzZW50OworCisJCXByZXNlbnQgPSBmaW5kX2Jv b2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CQkgICJwcmVzZW50Iik7CisKKwkJLyoKKwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0byBmYWxz ZSwgdGhpcyBlbGVtZW50IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAoZWl0aGVy IHRydWUgb3IgYWJzZW50KSwgZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgIT0g dHZfZmFsc2UpCisJCXsKKwkJCWV4cGFuZF9mbXRfcmVjdXJzaXZlKGJ1ZiwganNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhKTsKKwkJCWV4cGFuZGVkID0gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBl eHBhbmRlZDsKK30KKworLyoKKyAqIEV4cGFuZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJpbmcgbGl0 ZXJhbC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZv IGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisJU3RyaW5nSW5m b0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29uc3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZ WF8iOworCWludAkJCWRxbmV4dGNoYXIgPSAwOworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+ dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKworCS8qIEVhc3kgY2Fz ZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5vIFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1b3RlICov CisJaWYgKHN0cnBicmsoc3RyLCAiXCdcXCIpID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJ LyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVy ICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVM TCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4 dGNoYXIrK10pOworCQlkcW5leHRjaGFyID0gZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhl cykgLSAxKTsKKwl9CisJLyogQWRkIHRyYWlsaW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmZHFkZWxpbSwgJyQnKTsKKworCS8qIEFuZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBs aXRlcmFsIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcyVzJXMiLCBkcWRlbGltLmRhdGEsIHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShk cWRlbGltLmRhdGEpOworCXBmcmVlKHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZh bHVlIGFzIGFuIGludGVnZXIgcXVhbnRpdHkuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNv bnZhbF9udW1iZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hh cgkgICAqc3RyZGF0dW07CisKKwlBc3NlcnQoanNvbnZhbC0+dHlwZSA9PSBqYnZOdW1lcmljKTsK KworCXN0cmRhdHVtID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJp Y19vdXQsCisJCQkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0oanNvbnZhbC0+dmFsLm51bWVy aWMpKSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cmRhdHVtKTsKKwlwZnJlZShz dHJkYXR1bSk7Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGEgcm9sZSBuYW1l LiAgSWYgdGhlICdpc19wdWJsaWMnIGVsZW1lbnQgaXMgc2V0IHRvCisgKiB0cnVlLCBQVUJMSUMg aXMgZXhwYW5kZWQgKG5vIHF1b3Rlcyk7IG90aGVyd2lzZSwgZXhwYW5kIHRoZSBnaXZlbiByb2xl IG5hbWUsCisgKiBxdW90aW5nIGFzIGFuIGlkZW50aWZpZXIuCisgKi8KK3N0YXRpYyB2b2lkCitl eHBhbmRfanNvbnZhbF9yb2xlKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQor eworCWpzb25fdHJpdmFsdWUgaXNfcHVibGljOworCisJaXNfcHVibGljID0gZmluZF9ib29sX2lu X2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJImlz X3B1YmxpYyIpOworCWlmIChpc19wdWJsaWMgPT0gdHZfdHJ1ZSkKKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJQVUJMSUMiKTsKKwllbHNlCisJeworCQljaGFyCSAgICpyb2xlbmFtZTsK KworCQlyb2xlbmFtZSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJCSAicm9sZW5hbWUiLCBmYWxzZSwgTlVMTCk7CisJ CWlmIChyb2xlbmFtZSkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3Rl X2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwkJCXBmcmVlKHJvbGVuYW1lKTsKKwkJfQorCX0KK30K KworLyoKKyAqIEV4cGFuZCBvbmUgSlNPTiBlbGVtZW50IGludG8gdGhlIG91dHB1dCBTdHJpbmdJ bmZvIGFjY29yZGluZyB0byB0aGUKKyAqIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgVGhlIGVsZW1l bnQgdHlwZSBpcyB2YWxpZGF0ZWQsIGFuZCBhbiBlcnJvciBpcyByYWlzZWQKKyAqIGlmIGl0IGRv ZXNuJ3QgbWF0Y2ggd2hhdCB3ZSBleHBlY3QgZm9yIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllci4K KyAqCisgKiBSZXR1cm5zIHRydWUsIGV4Y2VwdCBmb3IgdGhlIGZvcm1hdHRlZCBzdHJpbmcgY2Fz ZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uCisgKiB3YXMgbWFkZSAoZHVlIHRvIHRoZSAicHJlc2Vu dCIgZmxhZyBiZWluZyBzZXQgdG8gImZhbHNlIikuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRf b25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLCBKc29uYlZhbHVl ICpqc29udmFsLAorCQkJCQkJIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpm bXQpCit7CisJYm9vbAkJc3RyaW5nX2V4cGFuZGVkID0gdHJ1ZTsKKwlFcnJvckNvbnRleHRDYWxs YmFjayBzcWxlcnJjb250ZXh0OworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJp bmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7 CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNx bGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3Vz ID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJj b250ZXh0OworCX0KKworCWlmICghanNvbnZhbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVt ZW50IFwiJXNcIiBub3QgZm91bmQiLCBwYXJhbSkpKTsKKworCXN3aXRjaCAoc3BlY2lmaWVyKQor CXsKKwkJY2FzZSBTcGVjSWRlbnRpZmllcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0 cmluZykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBm b3IgJSVJIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+ dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFsX2lkZW50aWZpZXIoYnVmLCBqc29udmFsKTsKKwkJ CWJyZWFrOworCisJCWNhc2UgU3BlY0RvdHRlZE5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAh PSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBz dHJ1Y3QgZm9yICUlRCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpz b252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9kb3R0ZWRuYW1lKGJ1ZiwganNvbnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJpbmc6CisJCQlpZiAoanNvbnZhbC0+dHlw ZSAhPSBqYnZTdHJpbmcgJiYKKwkJCQlqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBvciBzdHJ1Y3QgZm9y ICUlcyBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5 cGUpKSk7CisJCQlzdHJpbmdfZXhwYW5kZWQgPSBleHBhbmRfanNvbnZhbF9zdHJpbmcoYnVmLCBq c29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmluZ0xpdGVyYWw6CisJCQlpZiAo anNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygi ZXhwZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlTCBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJ CQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9zdHJsaXQo YnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1R5cGVOYW1lOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJVQgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfdHlwZW5h bWUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY09wZXJhdG9yTmFtZToK KwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVPIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X29wZXJhdG9yKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNOdW1iZXI6 CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImV4cGVjdGVkIEpTT04gbnVtZXJpYyBmb3IgJSVuIGVsZW1lbnQgXCIlc1wiLCBn b3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29u dmFsX251bWJlcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjUm9sZToK KwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVSIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X3JvbGUoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOworCX0KKworCWlmIChmbXQpCisJCWVycm9y X2NvbnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworCisJcmV0dXJuIHN0cmlu Z19leHBhbmRlZDsKK30KKworLyoKKyAqIEl0ZXJhdGUgb24gdGhlIGVsZW1lbnRzIG9mIGEgSlNP TiBhcnJheSwgZXhwYW5kaW5nIGVhY2ggb25lIGludG8gdGhlIG91dHB1dAorICogU3RyaW5nSW5m byBwZXIgdGhlIGdpdmVuIGNvbnZlcnNpb24gc3BlY2lmaWVyLCBzZXBhcmF0ZWQgYnkgdGhlIGdp dmVuCisgKiBzZXBhcmF0b3IuCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbmJfYXJyYXko U3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIs IGNoYXIgKmFycmF5c2VwLCBjb252U3BlY2lmaWVyIHNwZWNpZmllciwKKwkJCQkgICBjb25zdCBj aGFyICpmbXQpCit7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKwlKc29u YkNvbnRhaW5lciAqY29udGFpbmVyOworCUpzb25iSXRlcmF0b3IgKml0OworCUpzb25iVmFsdWUJ djsKKwlpbnQJCQl0eXBlOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwlTdHJpbmdJbmZvRGF0YSBh cnJheWVsZW07CisKKwkvKiBJZiB3ZSB3ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAg YW4gZXJlcG9ydCgpIGNvbnRleHQgY2FsbGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJy Y29udGV4dC5jYWxsYmFjayA9IGZtdHN0cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4 dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJCXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9j b250ZXh0X3N0YWNrOworCQllcnJvcl9jb250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJ fQorCisJaWYgKCFqc29uYXJyKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wi IG5vdCBmb3VuZCIsIHBhcmFtKSkpOworCisJaWYgKGpzb25hcnItPnR5cGUgIT0gamJ2QmluYXJ5 KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJy YXkiLCBwYXJhbSkpKTsKKworCWNvbnRhaW5lciA9IGpzb25hcnItPnZhbC5iaW5hcnkuZGF0YTsK KwlpZiAoIUpzb25Db250YWluZXJJc0FycmF5KGNvbnRhaW5lcikpCisJCWVyZXBvcnQoRVJST1Is CisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVy cm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IGEgSlNPTiBhcnJheSIsIHBhcmFtKSkpOworCisJ aW5pdFN0cmluZ0luZm8oJmFycmF5ZWxlbSk7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNv bnRhaW5lcik7CisJd2hpbGUgKCh0eXBlID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1 ZSkpICE9IFdKQl9ET05FKQorCXsKKwkJaWYgKHR5cGUgPT0gV0pCX0VMRU0pCisJCXsKKwkJCXJl c2V0U3RyaW5nSW5mbygmYXJyYXllbGVtKTsKKworCQkJaWYgKGV4cGFuZF9vbmVfanNvbmJfZWxl bWVudCgmYXJyYXllbGVtLCBwYXJhbSwgJnYsIHNwZWNpZmllciwgTlVMTCkpCisJCQl7CisJCQkJ aWYgKCFmaXJzdCkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIGFycmF5c2VwKTsK KworCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBhcnJheWVsZW0uZGF0YSwgYXJyYXll bGVtLmxlbik7CisJCQkJZmlyc3QgPSBmYWxzZTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmbXQp CisJCWVycm9yX2NvbnRleHRfc3RhY2sgPSBzcWxlcnJjb250ZXh0LnByZXZpb3VzOworfQorCisv KgorICogV29ya2hvcnNlIGZvciBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZC4KKyAqLworY2hh ciAqCitkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uX3N0cikKK3sKKwlEYXR1 bQkJZDsKKwlKc29uYgkgICAqanNvbmI7CisJU3RyaW5nSW5mbwlidWYgPSAoU3RyaW5nSW5mbykg cGFsbG9jMChzaXplb2YoU3RyaW5nSW5mb0RhdGEpKTsKKworCWluaXRTdHJpbmdJbmZvKGJ1Zik7 CisKKwlkID0gRGlyZWN0RnVuY3Rpb25DYWxsMShqc29uYl9pbiwgUG9pbnRlckdldERhdHVtKGpz b25fc3RyKSk7CisJanNvbmIgPSAoSnNvbmIgKikgRGF0dW1HZXRQb2ludGVyKGQpOworCisJZXhw YW5kX2ZtdF9yZWN1cnNpdmUoYnVmLCAmanNvbmItPnJvb3QpOworCisJcmV0dXJuIGJ1Zi0+ZGF0 YTsKK30KKworLyotLS0tLS0KKyAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBK U09OIG9iamVjdC4KKyAqCisgKiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGVsZW1lbnQgbmFt ZWQgImZtdCIgKHdoaWNoIG11c3QgYmUgYSBzdHJpbmcpLgorICogVGhpcyBmb3JtYXQgc3RyaW5n IG1heSBjb250YWluIHplcm8gb3IgbW9yZSAlLWVzY2FwZXMsIHdoaWNoIGNvbnNpc3Qgb2YgYW4K KyAqIGVsZW1lbnQgbmFtZSBlbmNsb3NlZCBpbiB7IH0sIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEg Y29udmVyc2lvbiBtb2RpZmllciwKKyAqIGZvbGxvd2VkIGJ5IGEgY29udmVyc2lvbiBzcGVjaWZp ZXIuICBQb3NzaWJsZSBjb252ZXJzaW9uIHNwZWNpZmllcnMgYXJlOgorICoKKyAqICUJCWV4cGFu ZCB0byBhIGxpdGVyYWwgJQorICogSQkJZXhwYW5kIGFzIGEgc2luZ2xlLCBub24tcXVhbGlmaWVk IGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBvc3NpYmx5LXF1YWxpZmllZCBpZGVudGlm aWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUKKyAqIE8JCWV4cGFuZCBhcyBhbiBvcGVy YXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0ZXJhbCAocXVvdGUgdXNpbmcg c2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBsZSBzdHJpbmcgKG5vIHF1b3Rp bmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChubyBxdW90aW5nKQorICogUgkJ ZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBxdW90ZWQgbmFtZSwgb3IgUFVCTElDKQor ICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwgc2VwYXJhdG9yIHNw ZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uICBJdHMgcHJlc2VuY2UgaW5kaWNh dGVzIHRoYXQgdGhlIGVsZW1lbnQgaXMgZXhwZWN0ZWQgdG8gYmUKKyAqIGFuIGFycmF5OyB0aGUg c3BlY2lmaWVkIHNlcGFyYXRvciBpcyB1c2VkIHRvIGpvaW4gdGhlIGFycmF5IGVsZW1lbnRzLgor ICotLS0tLS0KKyAqLworRGF0dW0KK2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNU SU9OX0FSR1MpCit7CisJdGV4dAkgICAqanNvbiA9IFBHX0dFVEFSR19URVhUX1AoMCk7CisJY2hh cgkgICAqanNvbl9zdHI7CisKKwlqc29uX3N0ciA9IHRleHRfdG9fY3N0cmluZyhqc29uKTsKKwor CVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGRlcGFyc2VfZGRsX2pzb25fdG9fc3Ry aW5nKGpzb25fc3RyKSkpOworfQorCisvKgorICogRXJyb3IgY29udGV4dCBjYWxsYmFjayBmb3Ig SlNPTiBmb3JtYXQgc3RyaW5nIGV4cGFuc2lvbi4KKyAqCisgKiBYWFg6IGluZGljYXRlIHdoaWNo IGVsZW1lbnQgd2UncmUgZXhwYW5kaW5nLCBpZiBhcHBsaWNhYmxlLgorICovCitzdGF0aWMgdm9p ZAorZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZykKK3sKKwllcnJjb250ZXh0KCJ3aGls ZSBleHBhbmRpbmcgZm9ybWF0IHN0cmluZyBcIiVzXCIiLCAoY2hhciAqKSBhcmcpOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IGIzODBlMzkzOWIuLjE5MjhlNTlhMGIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTE4NTYsNiArMTg1Niw3IEBA IHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQljYXNl IFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKIAkJCWNhc2Ug U0NUX1NlY3VyaXR5TGFiZWw6CisJCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgogCQkJCXsKIAkJ CQkJY2hhcgkgICAqaWRlbnRpdHk7CiAJCQkJCWNoYXIJICAgKnR5cGU7CkBAIC0xODc1LDYgKzE4 NzYsOCBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdTKQog CQkJCQkJYWRkciA9IGNtZC0+ZC5hdHNjZmcuYWRkcmVzczsKIAkJCQkJZWxzZSBpZiAoY21kLT50 eXBlID09IFNDVF9TZWN1cml0eUxhYmVsKQogCQkJCQkJYWRkciA9IGNtZC0+ZC5zZWNsYWJlbC5h ZGRyZXNzOworCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpCisJ CQkJCQlhZGRyID0gY21kLT5kLmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBh biBvYmplY3Qgd2FzIGRyb3BwZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL21lc29uLmJ1aWxkCmluZGV4IDQyY2NlZDllYmUuLjI4NDRkMzY1MjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL21lc29uLmJ1aWxkCkBAIC0xNyw2ICsxNyw4IEBAIGJhY2tlbmRfc291cmNlcyArPSBm aWxlcygKICAgJ2NvcHl0by5jJywKICAgJ2NyZWF0ZWFzLmMnLAogICAnZGJjb21tYW5kcy5jJywK KyAgJ2RkbF9kZXBhcnNlLmMnLAorICAnZGRsX2pzb24uYycsCiAgICdkZWZpbmUuYycsCiAgICdk aXNjYXJkLmMnLAogICAnZHJvcGNtZHMuYycsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA1 MDU1OTU2MjBlLi5lMDRkZTUyMWUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExOTM5 LDQgKzExOTM5LDExIEBACiAgIHByb25hbWUgPT4gJ2FueV92YWx1ZV90cmFuc2ZuJywgcHJvcmV0 dHlwZSA9PiAnYW55ZWxlbWVudCcsCiAgIHByb2FyZ3R5cGVzID0+ICdhbnllbGVtZW50IGFueWVs ZW1lbnQnLCBwcm9zcmMgPT4gJ2FueV92YWx1ZV90cmFuc2ZuJyB9LAogCit7IG9pZCA9PiAnNDY0 MicsIGRlc2NyID0+ICdkZXBhcnNlIHRoZSBEREwgY29tbWFuZCBpbnRvIGEgSlNPTiBmb3JtYXQg c3RyaW5nJywKKyAgcHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUg PT4gJ3RleHQnLAorICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4g J2RkbF9kZXBhcnNlX3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBh bmQgSlNPTiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gdGV4dCBEREwgY29tbWFuZCcsCisgIHByb25h bWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcs CisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRf Y29tbWFuZCcgfSwKKwogXQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDM3MWFhMGZmYzUuLjg1 ODk4MjBkNDEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTIwNTksNiArMjA1OSw3IEBAIHR5 cGVkZWYgc3RydWN0IEFsdGVyVGFibGVTdG10CiAJTGlzdAkgICAqY21kczsJCQkvKiBsaXN0IG9m IHN1YmNvbW1hbmRzICovCiAJT2JqZWN0VHlwZQlvYmp0eXBlOwkJLyogdHlwZSBvZiBvYmplY3Qg Ki8KIAlib29sCQltaXNzaW5nX29rOwkJLyogc2tpcCBlcnJvciBpZiB0YWJsZSBtaXNzaW5nICov CisJYm9vbCAgICAgICAgdGFibGVfbGlrZTsJCS8qIGludGVybmFsbHkgZ2VuZXJhdGVkIGZvciBU YWJsZUxpa2VDbGF1c2UgKi8KIH0gQWx0ZXJUYWJsZVN0bXQ7CiAKIHR5cGVkZWYgZW51bSBBbHRl clRhYmxlVHlwZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIv c3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAuLjFhMjcwMmM1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS90 Y29wL2RkbF9kZXBhcnNlLmgKQEAgLTAsMCArMSwyMiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogZGRsX2RlcGFyc2UuaAorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEK KyAqCisgKiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2lmbmRlZiBERExfREVQQVJTRV9ICisjZGVmaW5lIERETF9ERVBBUlNFX0gK KworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCisKK2V4dGVybiBjaGFyICpkZXBh cnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVyYm9zZV9t b2RlKTsKK2V4dGVybiBjaGFyICpkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFyICpqc29u Yik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRl bnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCQkJCSAgRHJvcEJlaGF2aW9yIGJl aGF2aW9yKTsKKworI2VuZGlmCQkJCQkJCS8qIERETF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2Rl cGFyc2VfdXRpbGl0eS5oCmluZGV4IGExZTA2ZGFiNTIuLjllMjYyZDcxMzEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNv cC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMzAsNyArMzAsOCBAQCB0eXBlZGVmIGVudW0gQ29sbGVj dGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRl T3BDbGFzcywKIAlTQ1RfQWx0ZXJUU0NvbmZpZywKLQlTQ1RfU2VjdXJpdHlMYWJlbAorCVNDVF9T ZWN1cml0eUxhYmVsLAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENvbGxlY3RlZENvbW1hbmRUeXBl OwogCiAvKgpAQCAtNDAsNiArNDEsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRBVFN1YmNt ZAogewogCU9iamVjdEFkZHJlc3MgYWRkcmVzczsJCS8qIGFmZmVjdGVkIGNvbHVtbiwgY29uc3Ry YWludCwgaW5kZXgsIC4uLiAqLwogCU5vZGUJICAgKnBhcnNldHJlZTsKKwljaGFyCSAgICp1c2lu Z2V4cHI7CiB9IENvbGxlY3RlZEFUU3ViY21kOwogCiB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRD b21tYW5kCkBAIC0xMDgsNiArMTEwLDEzIEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZENvbW1h bmQKIAkJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKIAkJCWNoYXIJCSAqcHJvdmlkZXI7CiAJCX0J CQlzZWNsYWJlbDsKKworCQkvKiBDUkVBVEUgVEFCTEUgQVMgKi8KKwkJc3RydWN0CisJCXsKKwkJ CU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJCU5vZGUJCSAqcmVhbF9jcmVhdGU7CisJCX0JCQlj dGFzOwogCX0JCQlkOwogCiAJc3RydWN0IENvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsJLyogd2hl biBuZXN0ZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNDI4Njg5YTdmOS4uNGEz MTgxOGYwNyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE2MjIsNiArMTYyMiw5IEBA IE9TSW5mbwogT1NTTENpcGhlcgogT1NTTERpZ2VzdAogT1ZFUkxBUFBFRAorT2JqRWxlbQorT2Jq VHJlZQorT2JqVHlwZQogT2JqZWN0QWNjZXNzRHJvcAogT2JqZWN0QWNjZXNzTmFtZXNwYWNlU2Vh cmNoCiBPYmplY3RBY2Nlc3NQb3N0QWx0ZXIKQEAgLTMxOTgsNiArMzIwMSw3IEBAIGNvbXBhcmVf Y29udGV4dAogY29uZmlnX3Zhcl92YWx1ZQogY29udGFpbl9hZ2dzX29mX2xldmVsX2NvbnRleHQK IGNvbnZlcnRfdGVzdGV4cHJfY29udGV4dAorY29udlNwZWNpZmllcgogY29weV9kYXRhX2Rlc3Rf Y2IKIGNvcHlfZGF0YV9zb3VyY2VfY2IKIGNvcmVfWVlTVFlQRQotLSAKMi4zNC4xCgo= --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Disposition: attachment; filename="v77-0003-Support-DDL-deparse-of-the-rest-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69d22 RnJvbSBhOThlMGIzYTAyZTFiNDhmN2JhYzIzN2U1ZTdmYjcxNjhmYjU1MGZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzowNDo1MiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDMvOF0gU3VwcG9ydCBEREwgZGVwYXJzZSBvZiB0aGUgcmVzdCBjb21tYW5kcy4KCiAgICBD 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 ZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgfCA2NjQzICsrKysrKysrKysrKysrKysrKysrKysr KysrKy0KIHNyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCAgICAgfCAgICAyICsKIDIgZmls ZXMgY2hhbmdlZCwgNjU4NiBpbnNlcnRpb25zKCspLCA1OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZGRsX2RlcGFyc2UuYwppbmRleCBhNWJkZjdlZDg0Li40ZTJkMzg4ZTI3IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTU4LDYgKzU4LDggQEAKICNpbmNsdWRlICJjYXRh bG9nL3BnX29wZmFtaWx5LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wb2xpY3kuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3B1YmxpY2F0aW9u X3JlbC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcHVibGljYXRpb25fbmFtZXNwYWNlLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3cml0 ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKQEAgLTcwLDYgKzcyLDcgQEAK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3VzZXJf bWFwcGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3NlcXVlbmNlLmgiCiAj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVzcGFjZS5oIgogI2luY2x1ZGUgImZvcmVpZ24vZm9yZWln bi5oIgpAQCAtMTUxLDYgKzE1NCw3IEBAIGJvb2wJCXZlcmJvc2UgPSB0cnVlOwogCiBzdGF0aWMg dm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExp c3QgKmFycmF5KTsKIHN0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9mbG9hdF9v YmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4IHZhbHVlKTsKIHN0YXRp YyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10KTsK IHN0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1 Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKIHN0YXRpYyBjaGFyICphcHBlbmRfb2JqZWN0X3RvX2Zv cm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7CkBAIC0xNjAsMTAgKzE2 NCwxNCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10LCBjaGFyICpuYW1lLAogc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWls ZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAogCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hh ciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAogCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkp Oworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVmYXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMp Owogc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsK IHN0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQs IE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfZm9yX3JvbGVzcGVj KFJvbGVTcGVjICpzcGVjKTsKIHN0YXRpYyBPYmpFbGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpU cmVlICp2YWx1ZSk7CiBzdGF0aWMgT2JqVHJlZSAqbmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBp bnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9ialRyZWUgKm5ld19vYmp0cmVlKGNoYXIgKmZtdCk7 CitzdGF0aWMgT2JqRWxlbSAqbmV3X3N0cmluZ19vYmplY3QoY2hhciAqdmFsdWUpOwogc3RhdGlj IEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRyZWUsIEpzb25iUGFy c2VTdGF0ZSAqc3RhdGUpOwogc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9p ZCBpbmRleHJlbGlkLAogCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKQEAgLTE3OCw4ICsxODYs MTggQEAgc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9u LCBMaXN0ICpkcGNvbnRleHQsIGJvb2wgY29tcG8KIAkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRl ZiwgYm9vbCBpc19hbHRlciwgTGlzdCAqKmV4cHJzKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNl X0NvbHVtbklkZW50aXR5KE9pZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90 YWJsZSk7CiBzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFi bGVDbWQgKnN1YmNtZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0FnZ3Jl Z2F0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAq ZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRl ZmluZSwKKwkJCQkJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxpZCk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9E ZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLCBPYmpl Y3RBZGRyZXNzIGNvcGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RT UGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVl ICpkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNUZW1wbGF0 ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CiAKIHN0YXRpYyBPYmpUcmVlICpk ZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNldCk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQga2luZCwgY2hhciAqbmFt ZSwgY2hhciAqdmFsdWUpOwogc3RhdGljIE9ialRyZWUgKmRlcGFyc2VfT25Db21taXRDbGF1c2Uo T25Db21taXRBY3Rpb24gb3B0aW9uKTsKIHN0YXRpYyBPYmpUcmVlICpkZXBhcnNlX1JlbFNldE9w dGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKIApAQCAtMTg4LDYgKzIwNiw3IEBAIHN0YXRp YyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfQ3ljbGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFk YXRhLCBib29sIGFsdGVyX3RhCiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0lu Y3JlbWVudEJ5KEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CiBz dGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01pbnZhbHVlKEZvcm1fcGdfc2VxdWVu Y2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRl cGFyc2VfU2VxX01heHZhbHVlKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90 YWJsZSk7CitzdGF0aWMgT2JqRWxlbSAqZGVwYXJzZV9TZXFfT3duZWRCeShPaWQgc2VxdWVuY2VJ ZCwgYm9vbCBhbHRlcl90YWJsZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2Vx X1Jlc3RhcnQoaW50NjQgbGFzdF92YWx1ZSk7CiBzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFy c2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFi bGUpOwogc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9BcyhEZWZFbGVtICplbGVt KTsKQEAgLTE5OSwxMCArMjE4LDE1IEBAIHN0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9U eXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOwogc3RhdGljIGlubGluZSBPYmpF bGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7CiBzdGF0aWMg aW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190eXBlIHR5cEZv cm0pOwogCitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GZHdPcHRpb25zKExpc3QgKm9wdGlvbnMs IGNoYXIgKmNvbG5hbWUsCisJCQkJCQkJCSAgIGJvb2wgYWx0ZXJjb2xvcHRpb25zKTsKKwogc3Rh dGljIExpc3QgKmRlcGFyc2VfSW5oUmVsYXRpb25zKE9pZCBvYmplY3RJZCk7CiBzdGF0aWMgTGlz dCAqZGVwYXJzZV9UYWJsZUVsZW1lbnRzKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICp0YWJsZUVs ZW1lbnRzLCBMaXN0ICpkcGNvbnRleHQsCiAJCQkJCQkJCSAgIGJvb2wgdHlwZWQsIGJvb2wgY29t cG9zaXRlKTsKIAorc3RhdGljIGNoYXIgKkRvbWFpbkdldERlZmF1bHQoSGVhcFR1cGxlIGRvbVR1 cCwgYm9vbCBtaXNzaW5nX29rKTsKKwogLyoKICAqIEFwcGVuZCBwcmVzZW50IGFzIGZhbHNlIHRv IGEgdHJlZS4KICAqLwpAQCAtMjEyLDYgKzIzNiw0MiBAQCBhcHBlbmRfbm90X3ByZXNlbnQoT2Jq VHJlZSAqdHJlZSkKIAlhcHBlbmRfYm9vbF9vYmplY3QodHJlZSwgInByZXNlbnQiLCBmYWxzZSk7 CiB9CiAKKy8qCisgKiBBcHBlbmQgYW4gaW50MzIgcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF9pbnRfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9m bXQsIGludDMyIHZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVj dF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2Jq ZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlwYXJhbSA9IG5ld19vYmpl Y3QoT2JqVHlwZUludGVnZXIsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFs dWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIEFw cGVuZCBhIGZsb2F0OCBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBw ZW5kX2Zsb2F0X29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBmbG9hdDggdmFs dWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisJY2hhcgkgICAqb2JqZWN0X25hbWU7CisKKwlB c3NlcnQoc3ViX2ZtdCk7CisKKwlvYmplY3RfbmFtZSA9IGFwcGVuZF9vYmplY3RfdG9fZm9ybWF0 X3N0cmluZyh0cmVlLCBzdWJfZm10KTsKKworCXBhcmFtID0gbmV3X29iamVjdChPYmpUeXBlRmxv YXQsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuZmx0ID0gdmFsdWU7CisJYXBwZW5kX3By ZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKwogLyoKICAqIEFwcGVuZCBhbiBhcnJheSBw YXJhbWV0ZXIgdG8gYSB0cmVlLgogICovCkBAIC00MjEsNiArNDgxLDM0IEBAIGFwcGVuZF9zdHJp bmdfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGNoYXIgKiBvYmplY3RfbmFt ZSwKIAlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0pOwogfQogCisvKgorICogQXBw ZW5kIGEgTlVMTC1vci1xdW90ZWQtbGl0ZXJhbCBjbGF1c2UuICBVc2VmdWwgZm9yIENPTU1FTlQg YW5kIFNFQ1VSSVRZCisgKiBMQUJFTC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtudWxs fXMgJXtsaXRlcmFsfXMKKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9saXRlcmFsX29yX251bGwo T2JqVHJlZSAqcGFyZW50LCBjaGFyICplbGVtbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJl ZSAgICAqdG9wOworCU9ialRyZWUgICAgKnBhcnQ7CisKKwl0b3AgPSBuZXdfb2JqdHJlZSgiIik7 CisJcGFydCA9IG5ld19vYmp0cmVlX1ZBKCJOVUxMIiwgMSwKKwkJCQkJCSAgInByZXNlbnQiLCBP YmpUeXBlQm9vbCwgIXZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle251bGx9 cyIsIHBhcnQpOworCisJcGFydCA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJICAicHJl c2VudCIsIE9ialR5cGVCb29sLCB2YWx1ZSAhPSBOVUxMKTsKKworCWlmICh2YWx1ZSkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocGFydCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIHZhbHVlKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle2xpdGVyYWx9cyIsIHBhcnQpOworCisJYXBwZW5k X29iamVjdF9vYmplY3QocGFyZW50LCBlbGVtbmFtZSwgdG9wKTsKK30KKwogLyoKICAqIFNpbWls YXIgdG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSByZXR1cm4gZWFjaCBiaXQgb2Yg aW5mb3JtYXRpb24KICAqIHNlcGFyYXRlbHk6CkBAIC01MjMsNiArNjExLDMxIEBAIGZvcm1hdF90 eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKIAlSZWxlYXNlU3lzQ2Fj aGUodHVwbGUpOwogfQogCisvKgorICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhcmd1 bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBsaXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9u cy4KKyAqLworc3RhdGljIExpc3QgKgorRnVuY3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdk ZWZhdWx0cykKK3sKKwlMaXN0CSAgICpub2RlZGVmczsKKwlMaXN0CSAgICpzdHJkZWZzID0gTklM OworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlub2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9k ZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVmYXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywg TGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9hcmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisK Kwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQorCXsKKwkJTm9kZQkgICAqb25lZGVmID0gbGZpcnN0 KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBwZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lv bihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNlKSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9 CisKIC8qCiAgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4g UkVMUEVSU0lTVEVOQ0UgdmFsdWUuCiAgKi8KQEAgLTcxMiw2ICs4MjUsNTcgQEAgbmV3X29ianRy ZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9kKQogCQkJCQkJICAidHlwYXJyYXki LCBPYmpUeXBlQm9vbCwgdHlwZV9hcnJheSk7CiB9CiAKKy8qCisgKiBIZWxwZXIgcm91dGluZSBm b3IgJXt9UiBvYmplY3RzLCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IFJvbGVTcGVjIG5vZGUuCisg KiBTcGVjaWFsIHZhbHVlcyBzdWNoIGFzIFJPTEVTUEVDX0NVUlJFTlRfVVNFUiBhcmUgZXhwYW5k ZWQgdG8gdGhlaXIgZmluYWwKKyAqIG5hbWVzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdf b2JqdHJlZV9mb3Jfcm9sZXNwZWMoUm9sZVNwZWMgKnNwZWMpCit7CisJY2hhcgkgICAqcm9sZXR5 cGU7CisKKwlpZiAoc3BlYy0+cm9sZXR5cGUgIT0gUk9MRVNQRUNfUFVCTElDKQorCQlyb2xldHlw ZSA9IGdldF9yb2xlc3BlY19uYW1lKHNwZWMpOworCWVsc2UKKwkJcm9sZXR5cGUgPSBwc3RyZHVw KCIiKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQShOVUxMLCAyLAorCQkJCQkJICAiaXNfcHVi bGljIiwgT2JqVHlwZUJvb2wsIHNwZWMtPnJvbGV0eXBlID09IFJPTEVTUEVDX1BVQkxJQywKKwkJ CQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgcm9sZXR5cGUpOworfQorCisvKgorICog SGVscGVyIHJvdXRpbmUgZm9yICV7fVIgb2JqZWN0cywgd2l0aCByb2xlIHNwZWNpZmllZCBieSBP SUQuIChBQ0xfSURfUFVCTElDCisgKiBtZWFucyB0byB1c2UgInB1YmxpYyIpLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChPaWQgcm9sZW9pZCkKK3sKKwlP YmpUcmVlICAgICpyb2xlOworCisJaWYgKHJvbGVvaWQgIT0gQUNMX0lEX1BVQkxJQykKKwl7CisJ CUhlYXBUdXBsZQlyb2x0dXA7CisJCWNoYXIJICAgKnJvbGVfbmFtZTsKKworCQlyb2x0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoQVVUSE9JRCwgT2JqZWN0SWRHZXREYXR1bShyb2xlb2lkKSk7CisJCWlm ICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1 cCBmYWlsZWQgZm9yIHJvbGUgd2l0aCBPSUQgJXUiLCByb2xlb2lkKTsKKworCQlyb2xlX25hbWUg PSBOYW1lU3RyKCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNUUlVDVChyb2x0dXApKS0+cm9sbmFtZSk7 CisJCXJvbGUgPSBuZXdfb2JqdHJlZV9WQSgiJXtyb2xlbmFtZX1JIiwgMSwKKwkJCQkJCQkgICJy b2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAocm9sZV9uYW1lKSk7CisKKwkJUmVsZWFz ZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCWVsc2UKKwkJcm9sZSA9IG5ld19vYmp0cmVlX1ZBKCIl e3JvbGVuYW1lfUkiLCAxLAorCQkJCQkJCSAgInJvbGVuYW1lIiwgT2JqVHlwZVN0cmluZywgInB1 YmxpYyIpOworCisJcmV0dXJuIHJvbGU7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBvYmpl Y3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVzIC0tIHZhcmFyZ3MgdmVyc2lvbi4KICAq CkBAIC03ODksNiArOTUzLDIyIEBAIG5ld19vYmp0cmVlX1ZBKGNoYXIgKmZtdCwgaW50IG51bW9i anMsLi4uKQogCXJldHVybiB0cmVlOwogfQogCisvKgorICogQWxsb2NhdGUgYSBuZXcgc3RyaW5n IG9iamVjdC4KKyAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X3N0cmluZ19vYmplY3QoY2hhciAq dmFsdWUpCit7CisJT2JqRWxlbSAgICAqcGFyYW07CisKKwlBc3NlcnQodmFsdWUpOworCisJcGFy YW0gPSBuZXdfb2JqZWN0KE9ialR5cGVTdHJpbmcsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5zdHJp bmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKwogLyoKICAqIFByb2Nlc3MgdGhlIHBy ZS1idWlsdCBmb3JtYXQgc3RyaW5nIGZyb20gdGhlIE9ialRyZWUgaW50byB0aGUgb3V0cHV0IHBh cnNlCiAgKiBzdGF0ZS4KQEAgLTE5MjQsNiArMjEwNCw4MyBAQCBkZXBhcnNlX1NlcV9NaW52YWx1 ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCiAJcmV0dXJuIG5l d19vYmplY3Rfb2JqZWN0KHJldCk7CiB9CiAKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBP V05FRCBCWSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPV05FRCBCWSAle293 bmVyfUQKKyAqLworc3RhdGljIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfT3duZWRCeShPaWQgc2Vx dWVuY2VJZCwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOwor CVJlbGF0aW9uCWRlcFJlbDsKKwlTeXNTY2FuRGVzYyBzY2FuOworCVNjYW5LZXlEYXRhIGtleXNb M107CisJSGVhcFR1cGxlCXR1cGxlOworCisJZGVwUmVsID0gdGFibGVfb3BlbihEZXBlbmRSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZrZXlzWzBdLAorCQkJCUFu dW1fcGdfZGVwZW5kX2NsYXNzaWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVR LAorCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25SZWxhdGlvbklkKSk7CisJU2NhbktleUlu aXQoJmtleXNbMV0sCisJCQkJQW51bV9wZ19kZXBlbmRfb2JqaWQsCisJCQkJQlRFcXVhbFN0cmF0 ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oc2VxdWVuY2VJZCkpOwor CVNjYW5LZXlJbml0KCZrZXlzWzJdLAorCQkJCUFudW1fcGdfZGVwZW5kX29ianN1YmlkLAorCQkJ CUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9JTlQ0RVEsCisJCQkJSW50MzJHZXREYXR1bSgwKSk7 CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGRlcFJlbCwgRGVwZW5kRGVwZW5kZXJJbmRl eElkLCB0cnVlLAorCQkJCQkJCSAgTlVMTCwgMywga2V5cyk7CisJd2hpbGUgKEhlYXBUdXBsZUlz VmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCU9pZAkJCW93bmVy SWQ7CisJCUZvcm1fcGdfZGVwZW5kIGRlcGZvcm07CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisJ CWNoYXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RS VUNUKHR1cGxlKTsKKworCQkvKiBPbmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBn X2NsYXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJ CWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9u SWQpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQlj b250aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBn ZXRfYXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAo Y29sbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsIG93bmVySWQpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXBfb2JqLCAiYXR0cm5hbWUiLCAiYXR0cm5hbWUiLCBjb2xuYW1lKTsK KwkJcmV0ID0gbmV3X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCSAib3duZXIiLCBPYmpU eXBlT2JqZWN0LCB0bXBfb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXJl bGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYgdGhl cmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwgc2V0 IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAoIXJl dCkKKwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJcmV0ID0gbmV3X29i anRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDMsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpU eXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJCQkJ CQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmplY3Rf b2JqZWN0KHJldCk7Cit9CisKIC8qCiAgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJUIG9w dGlvbi4KICAqCkBAIC0yNTkxLDcgKzI4NDgsNyBAQCBkZXBhcnNlX0FsdGVyUmVsYXRpb24oQ29s bGVjdGVkQ29tbWFuZCAqY21kKQogCiAJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJs ZSk7CiAJc3RtdCA9IChBbHRlclRhYmxlU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKLQlBc3NlcnQo SXNBKHN0bXQsIEFsdGVyVGFibGVTdG10KSk7CisJQXNzZXJ0KElzQShzdG10LCBBbHRlclRhYmxl U3RtdCkgfHwgSXNBKHN0bXQsIFZpZXdTdG10KSk7CiAKIAkvKgogCSAqIEFMVEVSIFRBQkxFIHN1 YmNvbW1hbmRzIGdlbmVyYXRlZCBmb3IgVGFibGVMaWtlQ2xhdXNlIGlzIHByb2Nlc3NlZCBpbgpA QCAtMzA2NSwxMyArMzMyMiwxMiBAQCBkZXBhcnNlX0FsdGVyUmVsYXRpb24oQ29sbGVjdGVkQ29t bWFuZCAqY21kKQogCQkJCX0KIAkJCQlicmVhazsKIAotI2lmZGVmIFRPRE9MSVNUCiAJCQljYXNl IEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CiAJCQkJdG1wX29iaiA9IGRlcGFyc2VfRmR3 T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwKLQkJCQkJCQkJCQkJc3ViY21kLT5uYW1lKTsK KwkJCQkJCQkJCQkJc3ViY21kLT5uYW1lLCB0cnVlKTsKIAkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CiAJCQkJYnJlYWs7Ci0jZW5kaWYK KwogCQkJY2FzZSBBVF9DaGFuZ2VPd25lcjoKIAkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEo Ik9XTkVSIFRPICV7b3duZXJ9SSIsIDIsCiAJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiY2hhbmdlIG93bmVyIiwKQEAgLTM0NjMsODcgKzM3MTksNjMzOCBAQCBkZXBhcnNlX2Ryb3Bf Y29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0dHlwZSwK IH0KIAogLyoKLSAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNvbW1hbmRzLgorICogRGVw YXJzZSBhbiBBbHRlckNvbGxhdGlvblN0bXQgKEFMVEVSIENPTExBVElPTikKICAqCi0gKiBUaGlz IGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBhbGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0 eVNsb3cuCisgKiBHaXZlbiBhIGNvbGxhdGlvbiBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIg Y29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheDoKKyAqIEFMVEVSIENPTExBVElPTiAle2lk ZW50aXR5fU8gUkVGUkVTSCBWRVJTSU9OCiAgKi8KIHN0YXRpYyBPYmpUcmVlICoKLWRlcGFyc2Vf c2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorZGVwYXJzZV9BbHRlckNvbGxh dGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKIHsKLQlPaWQJCQlvYmplY3RJZDsK LQlOb2RlCSAgICpwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQljb2xU dXA7CisJRm9ybV9wZ19jb2xsYXRpb24gY29sRm9ybTsKIAotCUFzc2VydChjbWQtPnR5cGUgPT0g U0NUX1NpbXBsZSk7CisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTExPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29sVHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbGxhdGlvbiB3aXRoIE9JRCAl dSIsIG9iamVjdElkKTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1Qo Y29sVHVwKTsKIAotCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOwotCW9iamVjdElkID0gY21k LT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJFRlJFU0ggVkVSU0lPTiIsIDEsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo Y29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5j b2xsbmFtZSkpKTsKIAotCWlmIChjbWQtPmluX2V4dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRy ZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkpCi0JCXJldHVybiBOVUxMOworCVJlbGVhc2VT eXNDYWNoZShjb2xUdXApOwogCi0JLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5 dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLwotCXN3aXRjaCAobm9kZVRhZyhw YXJzZXRyZWUpKQotCXsKLQkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCXJldHVybiByZXQ7Cit9CiAK LQkJY2FzZSBUX0NyZWF0ZVN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgc2V0dGluZyBvZiBGdW5j dGlvbgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRVNFVCBBTEwKKyAqIE9SCisgKiBTRVQg JXtzZXRfbmFtZX1JIFRPICV7c2V0X3ZhbHVlfXMKKyAqIE9SCisgKiBSRVNFVCAle3NldF9uYW1l fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNl dEtpbmQga2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAgICAqcmV0 OwogCi0JCWNhc2UgVF9JbmRleFN0bXQ6Ci0JCQlyZXR1cm4gZGVwYXJzZV9JbmRleFN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisJaWYgKGtpbmQgPT0gVkFSX1JFU0VUX0FMTCkKKwkJcmV0ID0g bmV3X29ianRyZWUoIlJFU0VUIEFMTCIpOworCWVsc2UgaWYgKGtpbmQgPT0gVkFSX1NFVF9WQUxV RSkKKwl7CisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgJXtzZXRfbmFtZX1JIiwgMSwKKwkJ CQkJCQkgInNldF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZSk7CiAKLQkJZGVmYXVsdDoKLQkJ CWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVk IiwKLQkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwkJLyoKKwkJICogU29tZSBHVUMg dmFyaWFibGUgbmFtZXMgYXJlICdMSVNUJyB0eXBlIGFuZCBoZW5jZSBtdXN0IG5vdCBiZQorCQkg KiBxdW90ZWQuCisJCSAqLworCQlpZiAoR2V0Q29uZmlnT3B0aW9uRmxhZ3MobmFtZSwgdHJ1ZSkg JiBHVUNfTElTVF9RVU9URSkKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7c2V0 X3ZhbHVlfXMiLCAic2V0X3ZhbHVlIiwgdmFsdWUpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICJUTyAle3NldF92YWx1ZX1MIiwgInNldF92YWx1ZSIsIHZhbHVlKTsKIAl9 CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVTRVQgJXtzZXRfbmFtZX1JIiwgMSwK KwkJCQkJCQkgInNldF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbmFtZSk7CiAKLQlyZXR1cm4gTlVM TDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgotICogV29ya2hvcnNlIHRvIGRlcGFyc2UgYSBDb2xs ZWN0ZWRDb21tYW5kLgorICogRGVwYXJzZSBhbiBBbHRlckZ1bmN0aW9uU3RtdCAoQUxURVIgRlVO Q1RJT04vUk9VVElORS9QUk9DRURVUkUpCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQgYW5k IHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJl cHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheDoKKyAq IEFMVEVSIEZVTkNUSU9OL1JPVVRJTkUvUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMgJXtkZWZpbml0 aW9uOiB9cwogICovCi1jaGFyICoKLWRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENv bW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCiB7Ci0JT3ZlcnJp ZGVTZWFyY2hQYXRoICpvdmVycmlkZVBhdGg7Ci0JTWVtb3J5Q29udGV4dCBvbGRjeHQ7Ci0JTWVt b3J5Q29udGV4dCB0bXBjeHQ7Ci0JT2JqVHJlZSAgICAqdHJlZTsKLQljaGFyCSAgICpjb21tYW5k ID0gTlVMTDsKLQlTdHJpbmdJbmZvRGF0YSBzdHI7CisJQWx0ZXJGdW5jdGlvblN0bXQgKm5vZGUg PSAoQWx0ZXJGdW5jdGlvblN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICpzaWduOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZvcm1fcGdfcHJvYyBwcm9j Rm9ybTsKKwlMaXN0CSAgICpwYXJhbXMgPSBOSUw7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJ TGlzdENlbGwgICAqY2VsbDsKKwlpbnQJCQlpOworCisJLyogR2V0IHRoZSBwZ19wcm9jIHR1cGxl ICovCisJcHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBvYmplY3RJZCk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJcHJvY0Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwlpZiAocHJvY0Zvcm0tPnBy b2tpbmQgPT0gUFJPS0lORF9QUk9DRURVUkUpCisJCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBQ Uk9DRURVUkUiKTsKKwllbHNlCisJCXJldCA9IG5ld19vYmp0cmVlKG5vZGUtPm9ianR5cGUgPT0g T0JKRUNUX1JPVVRJTkUgPworCQkJCQkJICAiQUxURVIgUk9VVElORSIgOiAiQUxURVIgRlVOQ1RJ T04iKTsKIAogCS8qCi0JICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25lIGJ5IHRoZSBkZXBhcnNp bmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKLQkgKiB0byBhdm9pZCBoYXZpbmcgdG8g c3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlLCBidXQKLQkgKiBhbGxvY2F0 ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4KKwkgKiBBTFRFUiBGVU5D VElPTiBkb2VzIG5vdCBjaGFuZ2Ugc2lnbmF0dXJlIHNvIHdlIGNhbiB1c2UgY2F0YWxvZyB0byBn ZXQKKwkgKiBpbnB1dCB0eXBlIE9pZHMuCiAJICovCi0JaW5pdFN0cmluZ0luZm8oJnN0cik7Ci0J dG1wY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAotCQkJ CQkJCQkgICAiZGVwYXJzZSBjdHgiLAotCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX01JTlNJ WkUsCi0JCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfSU5JVFNJWkUsCi0JCQkJCQkJCSAgIEFM TE9DU0VUX0RFRkFVTFRfTUFYU0laRSk7Ci0Jb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KHRtcGN4dCk7CisJZm9yIChpID0gMDsgaSA8IHByb2NGb3JtLT5wcm9uYXJnczsgaSsrKQorCXsK KwkJT2JqVHJlZSAgICAqdG1wX29iajsKKworCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIiV7 dHlwZX1UIiwgMSwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdf b2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOwor CQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOwor CX0KKworCXNpZ24gPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czos IH1zKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLCBvYmplY3RJZCks CisJCQkJCQkgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJyYXksIHBhcmFtcyk7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle3NpZ25hdHVyZX1zIiwgc2lnbik7CisKKwlmb3JlYWNoKGNl bGwsIG5vZGUtPmFjdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChEZWZFbGVtICop IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wX29iaiA9IE5VTEw7CisKKwkJaWYgKHN0 cmNtcChkZWZlbC0+ZGVmbmFtZSwgInZvbGF0aWxpdHkiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5l d19vYmp0cmVlKHN0clZhbChkZWZlbC0+YXJnKSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ ZGVmbmFtZSwgInN0cmljdCIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUoYm9vbFZh bChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoK KwkJCQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBVVCIpOworCQllbHNlIGlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJzZWN1cml0eSIpID09IDApCisJCQl0bXBfb2JqID0gbmV3X29ianRyZWUo Ym9vbFZhbChkZWZlbC0+YXJnKSA/CisJCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VD VVJJVFkgSU5WT0tFUiIpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJsZWFr cHJvb2YiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFy ZykgPworCQkJCQkJCQkgIkxFQUtQUk9PRiIgOiAiTk9UIExFQUtQUk9PRiIpOworCQllbHNlIGlm IChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJjb3N0IikgPT0gMCkKKwkJCXRtcF9vYmogPSBuZXdf b2JqdHJlZV9WQSgiQ09TVCAle2Nvc3R9biIsIDEsCisJCQkJCQkJCQkiY29zdCIsIE9ialR5cGVG bG9hdCwKKwkJCQkJCQkJCWRlZkdldE51bWVyaWMoZGVmZWwpKTsKKwkJZWxzZSBpZiAoc3RyY21w KGRlZmVsLT5kZWZuYW1lLCAicm93cyIpID09IDApCisJCXsKKwkJCXRtcF9vYmogPSBuZXdfb2Jq dHJlZSgiUk9XUyIpOworCQkJaWYgKGRlZkdldE51bWVyaWMoZGVmZWwpID09IDApCisJCQkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmpl Y3QodG1wX29iaiwgIiV7cm93c31uIiwKKwkJCQkJCQkJCWRlZkdldE51bWVyaWMoZGVmZWwpKTsK KwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzZXQiKSA9PSAwKQorCQl7 CisJCQlWYXJpYWJsZVNldFN0bXQgKnNzdG10ID0gKFZhcmlhYmxlU2V0U3RtdCAqKSBkZWZlbC0+ YXJnOworCQkJY2hhcgkgICAqdmFsdWUgPSBFeHRyYWN0U2V0VmFyaWFibGVBcmdzKHNzdG10KTsK KworCQkJdG1wX29iaiA9IGRlcGFyc2VfRnVuY3Rpb25TZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5u YW1lLCB2YWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic3Vw cG9ydCIpID09IDApCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzWzFdOworCisJCQl0bXBfb2JqID0g bmV3X29ianRyZWUoIlNVUFBPUlQiKTsKKworCQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0 KTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9u J3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRo ZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFM T0lEOworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7bmFtZX1zIiwgIm5hbWUi LAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9jRm9ybS0+cHJvc3VwcG9ydCwg MSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJCQkJCQkJCQkJZmFsc2UsIE5V TEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJCX0KKwkJZWxzZSBpZiAoc3Ry Y21wKGRlZmVsLT5kZWZuYW1lLCAicGFyYWxsZWwiKSA9PSAwKQorCQkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJQQVJBTExFTCAle3ZhbHVlfXMiLCAxLAorCQkJCQkJCQkJInZhbHVlIiwgT2Jq VHlwZVN0cmluZywgc3RyVmFsKGRlZmVsLT5hcmcpKTsKKworCQllbGVtcyA9IGxhcHBlbmQoZWxl bXMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJldCwgIiV7ZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo cHJvY1R1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck9i amVjdFNjaGVtYVN0bXQgKEFMVEVSIC4uLiBTRVQgU0NIRU1BIGNvbW1hbmQpCisgKgorICogR2l2 ZW4gdGhlIG9iamVjdCBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVzICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1B ICV7bmV3c2NoZW1hfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVj dFNjaGVtYVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJ CQkJICBPYmplY3RBZGRyZXNzIG9sZF9zY2hlbWEpCit7CisJQWx0ZXJPYmplY3RTY2hlbWFTdG10 ICpub2RlID0gKEFsdGVyT2JqZWN0U2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJY2hhcgkgICAq aWRlbnRpdHk7CisJY2hhcgkgICAqbmV3X3NjaGVtYSA9IG5vZGUtPm5ld3NjaGVtYTsKKwljaGFy CSAgICpvbGRfc2NobmFtZTsKKwljaGFyCSAgICppZGVudDsKIAogCS8qCi0JICogTWFueSByb3V0 aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1bmN0aW9u YWxpdHkKLQkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVzc2lvbnMuICBJ biBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKLQkgKiBhbGwgb2JqZWN0IG5hbWVzIHRvIGJlIHF1YWxp ZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiIHRvCi0JICogZW52aXJvbm1lbnRz IHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRoYW4gaW5qZWN0 Ci0JICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRlIHNlYXJjaCBw YXRoIGFsbCBvdmVyIHRoZQotCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkgaGVyZS4KKwkg KiBTaW5jZSB0aGUgY29tbWFuZCBoYXMgYWxyZWFkeSB0YWtlbiBwbGFjZSBmcm9tIHRoZSBwb2lu dCBvZiB2aWV3IG9mCisJICogY2F0YWxvZ3MsIGdldE9iamVjdElkZW50aXR5IHJldHVybnMgdGhl IG9iamVjdCBuYW1lIHdpdGggdGhlIGFscmVhZHkKKwkgKiBjaGFuZ2VkIHNjaGVtYS4gIFRoZSBv dXRwdXQgb2Ygb3VyIGRlcGFyc2luZyBtdXN0IHJldHVybiB0aGUgb3JpZ2luYWwKKwkgKiBzY2hl bWEgbmFtZSwgaG93ZXZlciwgc28gd2UgY2hvcCB0aGUgc2NoZW1hIG5hbWUgb2ZmIHRoZSBpZGVu dGl0eQorCSAqIHN0cmluZyBhbmQgdGhlbiBwcmVwZW5kIHRoZSBxdW90ZWQgc2NoZW1hIG5hbWUu CisJICoKKwkgKiBYWFggVGhpcyBpcyBwcmV0dHkgY2x1bmt5LiBDYW4gd2UgZG8gYmV0dGVyPwog CSAqLwotCW92ZXJyaWRlUGF0aCA9IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5 Q29udGV4dCk7Ci0Jb3ZlcnJpZGVQYXRoLT5zY2hlbWFzID0gTklMOwotCW92ZXJyaWRlUGF0aC0+ YWRkQ2F0YWxvZyA9IGZhbHNlOwotCW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7Ci0JUHVz aE92ZXJyaWRlU2VhcmNoUGF0aChvdmVycmlkZVBhdGgpOworCWlkZW50aXR5ID0gZ2V0T2JqZWN0 SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKTsKKwlvbGRfc2NobmFtZSA9IGdldF9uYW1lc3BhY2Vf bmFtZShvbGRfc2NoZW1hLm9iamVjdElkKTsKKwlpZiAoIW9sZF9zY2huYW1lKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2NoZW1hIHdpdGggT0lEICV1IiwKKwkJCSBv bGRfc2NoZW1hLm9iamVjdElkKTsKKworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9p ZGVudGlmaWVyKG9sZF9zY2huYW1lKSwKKwkJCQkJIGlkZW50aXR5ICsgc3RybGVuKHF1b3RlX2lk ZW50aWZpZXIobmV3X3NjaGVtYSkpKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIg JXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIFNFVCBTQ0hFTUEgJXtuZXdzY2hlbWF9SSIsIDMsCisJ CQkJCQkgICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5 cGUobm9kZS0+b2JqZWN0VHlwZSwgZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBl U3RyaW5nLCBpZGVudCwKKwkJCQkJCSAgIm5ld3NjaGVtYSIsIE9ialR5cGVTdHJpbmcsIG5ld19z Y2hlbWEpOworfQogCi0JdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKy8qCisgKiBEZXBhcnNlIGEg R1JBTlQvUkVWT0tFIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEdSQU5UICV7 cHJpdmlsZWdlczosIH1zIE9OIiAle29ianR5cGV9cyAle3ByaXZ0YXJnZXQ6LCB9cyBUTyAle2dy YW50ZWVzOiwgfXMKKyAqICV7Z3JhbnRfb3B0aW9ufXMgR1JBTlRFRCBCWSAle3JvbGVuYW1lfXMK KyAqIAkJT1IKKyAqIFJFVk9LRSAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtw cml2dGFyZ2V0OiwgfXMKKyAqIEZST00gJXtncmFudGVlczosIH1zICV7Z3JhbnRfb3B0aW9ufXMg JXtjYXNjYWRlfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9HcmFudFN0bXQoQ29s bGVjdGVkQ29tbWFuZCAqY21kKQoreworCUludGVybmFsR3JhbnQgKmlzdG10OworCU9ialRyZWUg ICAgKnJldDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2lk CQkJY2xhc3NJZDsKKwlPYmpUcmVlICAgICp0bXA7CiAKLQlzd2l0Y2ggKGNtZC0+dHlwZSkKKwkv KiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0 ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCWlz dG10ID0gY21kLT5kLmdyYW50LmlzdG10OworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gb2Jq ZWN0cyBmcm9tICJBTEwgLi4uIElOIFNDSEVNQSIgdG8gYmUgZ3JhbnRlZCwgdGhlbgorCSAqIG5v dGhpbmcgdG8gZG8uCisJICovCisJaWYgKGlzdG10LT5vYmplY3RzID09IE5JTCkKKwkJcmV0dXJu IE5VTEw7CisKKwlzd2l0Y2ggKGlzdG10LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1RfQ09M VU1OOgorCQljYXNlIE9CSkVDVF9UQUJMRToKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlj bGFzc0lkID0gUmVsYXRpb25SZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0RP TUFJTjoKKwkJY2FzZSBPQkpFQ1RfVFlQRToKKwkJCWNsYXNzSWQgPSBUeXBlUmVsYXRpb25JZDsK KwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQljbGFzc0lkID0gRm9yZWlnbkRhdGFX cmFwcGVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9GT1JFSUdOX1NFUlZF UjoKKwkJCWNsYXNzSWQgPSBGb3JlaWduU2VydmVyUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQlj YXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUFJPQ0VEVVJFOgorCQljYXNlIE9C SkVDVF9ST1VUSU5FOgorCQkJY2xhc3NJZCA9IFByb2NlZHVyZVJlbGF0aW9uSWQ7CisJCQlicmVh azsKKwkJY2FzZSBPQkpFQ1RfTEFOR1VBR0U6CisJCQljbGFzc0lkID0gTGFuZ3VhZ2VSZWxhdGlv bklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0xBUkdFT0JKRUNUOgorCQkJY2xhc3NJZCA9 IExhcmdlT2JqZWN0UmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9TQ0hFTUE6 CisJCQljbGFzc0lkID0gTmFtZXNwYWNlUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9C SkVDVF9EQVRBQkFTRToKKwkJY2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCWNsYXNzSWQgPSBJ bnZhbGlkT2lkOworCQkJZWxvZyhFUlJPUiwgImdsb2JhbCBvYmplY3RzIG5vdCBzdXBwb3J0ZWQi KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNU IHZhbHVlICVkIiwgaXN0bXQtPm9ianR5cGUpOworCX0KKworCS8qIEdSQU5UIFRPIG9yIFJFVk9L RSBGUk9NICovCisJcmV0ID0gbmV3X29ianRyZWUoaXN0bXQtPmlzX2dyYW50ID8gIkdSQU5UIiA6 ICJSRVZPS0UiKTsKKworCS8qIEJ1aWxkIGEgbGlzdCBvZiBwcml2aWxlZ2VzIHRvIGdyYW50L3Jl dm9rZSAqLworCWlmIChpc3RtdC0+YWxsX3ByaXZzKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWUo IkFMTCBQUklWSUxFR0VTIik7CisJCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCX0KKwllbHNlCisJeworCQljaGFyICpwcml2OworCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfSU5TRVJUKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9JTlNFUlQpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9TRUxFQ1Qp CisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1NFTEVDVCk7 CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0K KwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX1VQREFURSkKKwkJeworCQkJcHJpdiA9IChj aGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVBEQVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfREVMRVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9ERUxFVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9UUlVOQ0FU RSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJVTkNB VEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOwor CQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9SRUZFUkVOQ0VTKQorCQl7CisJCQlw cml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9SRUZFUkVOQ0VTKTsKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAo aXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJJR0dFUikKKwkJeworCQkJcHJpdiA9IChjaGFyICop cHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVFJJR0dFUik7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX0VYRUNVVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJp bmcoQUNMX0VYRUNVVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9VU0FHRSkKKwkJ eworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfVVNBR0UpOworCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlm IChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAq KXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NSRUFURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2Vz ICYgQUNMX0NSRUFURV9URU1QKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9DUkVBVEVfVEVNUCk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0NP Tk5FQ1QpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX0NP Tk5FQ1QpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikp OworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9NQUlOVEFJTikKKwkJeworCQkJ cHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfTUFJTlRBSU4pOworCQkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisKKwkJaWYg KCFpc3RtdC0+aXNfZ3JhbnQgJiYgaXN0bXQtPmdyYW50X29wdGlvbikKKwkJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJ CQkJIGlzdG10LT5ncmFudF9vcHRpb24gPyAiR1JBTlQgT1BUSU9OIEZPUiIgOiAiIik7CisKKwkJ aWYgKGlzdG10LT5jb2xfcHJpdnMgIT0gTklMKQorCQl7CisJCQlMaXN0Q2VsbCAgICpvY2VsbDsK KworCQkJZm9yZWFjaChvY2VsbCwgaXN0bXQtPmNvbF9wcml2cykKKwkJCXsKKwkJCQlBY2Nlc3NQ cml2ICpwcml2ID0gbGZpcnN0KG9jZWxsKTsKKwkJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJ CQkJZm9yZWFjaChjZWxsLCBwcml2LT5jb2xzKQorCQkJCXsKKwkJCQkJU3RyaW5nCSAgICpjb2xu YW1lID0gbGZpcnN0X25vZGUoU3RyaW5nLCBjZWxsKTsKKworCQkJCQljb2xzID0gbGFwcGVuZChj b2xzLAorCQkJCQkJCQkgICBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwoY29sbmFtZSkpKTsKKwkJ CQl9CisKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKCV7Y29sczosIH1zKSAle3ByaXZ9cyIs IDIsCisJCQkJCQkJCQkgImNvbHMiLCBPYmpUeXBlQXJyYXksIGNvbHMsCisJCQkJCQkJCQkgInBy aXYiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJICBwcml2LT5wcml2X25hbWUgPyBwcml2LT5w cml2X25hbWUgOiAiQUxMIFBSSVZJTEVHRVMiKTsKKworCQkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJfQorCQl9CisJfQorCWFwcGVuZF9hcnJheV9v YmplY3QocmV0LCAiJXtwcml2aWxlZ2VzOiwgfXMgT04iLCBsaXN0KTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIiV7b2JqdHlwZX1zIiwgIm9ianR5cGUiLAorCQkJCQkJIChjaGFyICop c3RyaW5naWZ5X29ianR5cGUoaXN0bXQtPm9ianR5cGUsIHRydWUpKTsKKworCS8qIFRhcmdldCBv YmplY3RzLiAgV2UgdXNlIG9iamVjdCBpZGVudGl0aWVzIGhlcmUgKi8KKwlsaXN0ID0gTklMOwor CWZvcmVhY2goY2VsbCwgaXN0bXQtPm9iamVjdHMpCisJeworCQlPaWQJCQlvYmppZCA9IGxmaXJz dF9vaWQoY2VsbCk7CisJCU9iamVjdEFkZHJlc3MgYWRkcjsKKworCQlhZGRyLmNsYXNzSWQgPSBj bGFzc0lkOworCQlhZGRyLm9iamVjdElkID0gb2JqaWQ7CisJCWFkZHIub2JqZWN0U3ViSWQgPSAw OworCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fXMiLCAxLAorCQkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBnZXRPYmplY3RJZGVudGl0eSgmYWRk ciwgZmFsc2UpKTsKKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwl9CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle3ByaXZ0YXJnZXQ6LCB9cyIs IGxpc3QpOworCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCBpc3RtdC0+aXNfZ3JhbnQgPyAi VE8iIDogIkZST00iKTsKKworCS8qIExpc3Qgb2YgZ3JhbnRlZXMgKi8KKwlsaXN0ID0gTklMOwor CWZvcmVhY2goY2VsbCwgaXN0bXQtPmdyYW50ZWVzKQorCXsKKwkJT2lkCQkJZ3JhbnRlZSA9IGxm aXJzdF9vaWQoY2VsbCk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZ3JhbnRl ZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0K KworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtncmFudGVlczosIH1zIiwgbGlzdCk7CisK KwkvKiBUaGUgd29yZGluZyBvZiB0aGUgZ3JhbnQgb3B0aW9uIGlzIHZhcmlhYmxlIC4uLiAqLwor CWlmIChpc3RtdC0+aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Z3Jh bnRfb3B0aW9ufXMiLCAiZ3JhbnRfb3B0aW9uIiwKKwkJCQkJCQkgaXN0bXQtPmdyYW50X29wdGlv biA/ICJXSVRIIEdSQU5UIE9QVElPTiIgOiAiIik7CisKKwlpZiAoaXN0bXQtPmdyYW50b3JfdWlk KQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAqcm9sZW5hbWU7CisKKwkJcm9s dHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElkR2V0RGF0dW0oaXN0bXQtPmdy YW50b3JfdWlkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChyb2x0dXApKQorCQkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJvbGUgd2l0aCBPSUQgJXUiLAorCQkJCSBp c3RtdC0+Z3JhbnRvcl91aWQpOworCisJCXJvbGVuYW1lID0gTmFtZVN0cigoKEZvcm1fcGdfYXV0 aGlkKSBHRVRTVFJVQ1Qocm9sdHVwKSktPnJvbG5hbWUpOworCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJHUkFOVEVEIEJZICV7cm9sZW5hbWV9cyIsCisJCQkJCQkJICJyb2xlbmFtZSIsIHJv bGVuYW1lKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHJvbHR1cCk7CisJfQorCisJaWYgKCFpc3RtdC0+ aXNfZ3JhbnQpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwgImNh c2NhZGUiLAorCQkJCQkJCSBpc3RtdC0+YmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFID8gIkNBU0NB REUiIDogIiIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJP cGVyYXRvclN0bXQgKEFMVEVSIE9QRVJBVE9SIC4uLiBTRVQgLi4uKS4KKyAqCisgKiBHaXZlbiBh biBvcGVyYXRvciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJu IGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQUxURVIgT1BFUkFUT1IgJXtpZGVudGl0eX1PICgle2xlZnRfdHlw ZX1ULCAle3JpZ2h0X3R5cGV9VCkKKyAqIFNFVCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BlcmF0b3JTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAq cGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJQWx0ZXJPcGVyYXRvclN0bXQgKm5v ZGUgPSAoQWx0ZXJPcGVyYXRvclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsK KwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisJTGlzdENlbGwgICAqY2VsbDsKKwlMaXN0CSAg ICpsaXN0ID0gTklMOworCisJb3ByVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3ByVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCW9wckZvcm0gPSAoRm9ybV9wZ19vcGVyYXRvcikgR0VUU1RSVUNU KG9wclR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgT1BFUkFUT1IgJXtpZGVu dGl0eX1PIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkgIE5hbWVTdHIob3ByRm9ybS0+b3BybmFtZSkpKTsKKworCS8qIExFRlRBUkcgKi8KKwlpZiAo T2lkSXNWYWxpZChvcHJGb3JtLT5vcHJsZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiKCV7bGVmdF90eXBlfVQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShvcHJGb3Jt LT5vcHJsZWZ0LCAtMSkpOworCWVsc2UKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiKCV7 bGVmdF90eXBlfXMiLCAibGVmdF90eXBlIiwgIk5PTkUiKTsKKworCS8qIFJJR0hUQVJHICovCisJ QXNzZXJ0KE9pZElzVmFsaWQob3ByRm9ybS0+b3BybGVmdCkpOworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiwgJXtyaWdodF90eXBlfVQpIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlw ZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9u cykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisJ CU9ialRyZWUgICAgKnRtcF9vYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFt ZSwgInJlc3RyaWN0IikgPT0gMCkKKwkJeworCQkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJS RVNUUklDVD0iLCAxLAorCQkJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZXN0cmlj dCIpOworCQkJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmVzdCkpCisJCQkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wX29iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ CSBvcHJGb3JtLT5vcHJyZXN0KSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIiV7cHJvY2VkdXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSAiTk9ORSIp OworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiam9pbiIpID09IDApCisJ CXsKKwkJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiSk9JTj0iLCAxLAorCQkJCQkJCQkJImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJqb2luIik7CisJCQlpZiAoT2lkSXNWYWxpZChvcHJGb3Jt LT5vcHJqb2luKSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1 cmV9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsKKwkJCWVsc2UK KwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJwcm9j ZWR1cmUiLAorCQkJCQkJCQkJICJOT05FIik7CisJCX0KKworCQlBc3NlcnQodG1wX29iaik7CisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIlNFVCAoJXtlbGVtczosIH1zKSIsIGxpc3QpOwor CisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSBhbiBBTFRFUiBPUEVSQVRPUiBGQU1JTFkgQUREL0RST1AgY29tbWFuZC4KKyAqCisg KiBHaXZlbiB0aGUgQ29sbGVjdGVkQ29tbWFuZCwgcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50 aW5nIHRoZSBBbHRlcgorICogT3BlcmF0b3IgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQUxURVIgT1BFUkFUT1IgRkFNSUxZICV7aWRlbnRpdHl9RCBVU0lORyAle2FtbmFtZX1J IEFERC9EUk9QICV7aXRlbXM6LH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJPcEZhbWlseShDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZSAgICAqcmV0Owor CUFsdGVyT3BGYW1pbHlTdG10ICpzdG10ID0gKEFsdGVyT3BGYW1pbHlTdG10ICopIGNtZC0+cGFy c2V0cmVlOworCUhlYXBUdXBsZQlmdHA7CisJRm9ybV9wZ19vcGZhbWlseSBvcGZGb3JtOworCUxp c3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFy c2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlp ZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJldHVybiBOVUxMOworCisJZnRwID0gU2VhcmNoU3lz Q2FjaGUxKE9QRkFNSUxZT0lELAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGNtZC0+ZC5vcGZh bS5hZGRyZXNzLm9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZ0cCkpCisJCWVs b2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBP SUQgJXUiLAorCQkJIGNtZC0+ZC5vcGZhbS5hZGRyZXNzLm9iamVjdElkKTsKKwlvcGZGb3JtID0g KEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChmdHApOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSIs IDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1l U3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwgT2JqVHlwZVN0cmluZywg c3RtdC0+YW1uYW1lKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLm9wZXJhdG9ycykK Kwl7CisJCU9wRmFtaWx5TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAg ICp0bXBfb2JqOworCisJCS8qCisJCSAqIFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJB VE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9 cworCQkgKi8KKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJPUEVSQVRPUiAle251bX1uIiwg MSwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIpOworCisJCS8q IEFkZCB0aGUgb3BlcmF0b3IgbmFtZTsgdGhlIERST1AgY2FzZSBkb2Vzbid0IGhhdmUgdGhpcyAq LworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmos ICIle29wZXJhdG9yfU8iLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9w ZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBvcGVyLT5vYmplY3QpKTsKKworCQkv KiBBZGQgdGhlIHR5cGVzICovCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIoJXts dHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAt MSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtydHlwZX1UKSIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wZXItPnJpZ2h0dHlwZSwgLTEpKTsKKworCQkvKiBB ZGQgdGhlIEZPUiBTRUFSQ0ggLyBGT1IgT1JERVIgQlkgY2xhdXNlOyBub3QgaW4gdGhlIERST1Ag Y2FzZSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJaWYgKG9wZXItPnNvcnRmYW1p bHkgPT0gSW52YWxpZE9pZCkKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBfb2JqLCAiJXtw dXJwb3NlfXMiLCAicHVycG9zZSIsCisJCQkJCQkJCQkgIkZPUiBTRUFSQ0giKTsKKwkJCWVsc2UK KwkJCXsKKwkJCQlPYmpUcmVlICAgICpvcmRlcmJ5X29iajsKKworCQkJCW9yZGVyYnlfb2JqID0g bmV3X29ianRyZWVfVkEoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQiLCAxLAorCQkJCQkJCQkJ CQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQkJ b3Blci0+c29ydGZhbWlseSkpOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIl e3B1cnBvc2V9cyIsIG9yZGVyYnlfb2JqKTsKKwkJCX0KKwkJfQorCisJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlmb3JlYWNoKGNlbGws IGNtZC0+ZC5vcGZhbS5wcm9jZWR1cmVzKQorCXsKKwkJT3BGYW1pbHlNZW1iZXIgKnByb2MgPSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnRtcF9vYmo7CisKKwkJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBlfVQsICV7cnR5cGV9VCkiLCAzLAor CQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkJImx0 eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+ bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJ bmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qCisJCSAq IEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVzOyB0aGUgRFJPUCBjYXNlIGRvZXNu J3QgaGF2ZQorCQkgKiB0aGlzCisJCSAqLworCQlpZiAoIXN0bXQtPmlzRHJvcCkKKwkJeworCQkJ SGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07CisJCQlPaWQJCSAg ICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCQlpbnQJCQlpOwor CisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0o cHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAl dSIsCisJCQkJCSBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBH RVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVzID0gcHJvY0Zvcm0tPnByb2FyZ3R5 cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykK KwkJCXsKKwkJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3Jf dHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xpc3QgPSBsYXBwZW5kKGFyZ2xpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBfb2JqLCAiJXtmdW5jdGlvbn1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIocHJv Y0Zvcm0tPnByb25hbWUpKSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIo Iik7CisJCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9vYmosICIle2FyZ3R5cGVzOiwgfVQiLCBh cmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwkJCVJl bGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5l d19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwlpZiAoc3RtdC0+aXNEcm9wKQorCQlh cHBlbmRfZm9ybWF0X3N0cmluZyhyZXQsICJEUk9QIik7CisJZWxzZQorCQlhcHBlbmRfZm9ybWF0 X3N0cmluZyhyZXQsICJBREQiKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtpdGVt czosIH1zIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZnRwKTsKKworCXJldHVybiByZXQ7 Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3duZXJTdG10IChBTFRFUiAuLi4gT1dORVIg VE8gLi4uKS4KKyAqCisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0 aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgJXMgJXtp ZGVudGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0 cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJTdG10ICopIHBhcnNl dHJlZTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVu dGl0eX1zIE9XTkVSIFRPICV7bmV3b3duZXJ9SSIsIDMsCisJCQkJCQkgICJvYmp0eXBlIiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCSAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSwg ZmFsc2UpLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBnZXRP YmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpLAorCQkJCQkJICAibmV3b3duZXIiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJICBnZXRfcm9sZXNwZWNfbmFtZShub2RlLT5uZXdvd25lcikpOwor fQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclNlcVN0bXQuCisgKgorICogR2l2ZW4gYSBzZXF1 ZW5jZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2Jq VHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBBTFRFUiBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cwor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyU2VxU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVsYXRpb24JcmVsYXRp b247CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlGb3JtX3Bn X3NlcXVlbmNlIHNlcWZvcm07CisJU2VxdWVuY2VfdmFsdWVzICpzZXF2YWx1ZXM7CisJQWx0ZXJT ZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8q CisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSAodmlh IENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJ ICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKwor CXNlcXZhbHVlcyA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCXNlcWZvcm0gPSBz ZXF2YWx1ZXMtPnNlcWZvcm07CisKKwlmb3JlYWNoKGNlbGwsICgoQWx0ZXJTZXFTdG10ICopIHBh cnNldHJlZSktPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICplbGVtID0gKERlZkVsZW0gKikg bGZpcnN0KGNlbGwpOworCQlPYmpFbGVtICAgICpuZXdlbG07CisKKwkJaWYgKHN0cmNtcChlbGVt LT5kZWZuYW1lLCAiY2FjaGUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQ2FjaGUo c2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xl IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGZhbHNlKTsK KwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJpbmNyZW1lbnQiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2UpOworCQllbHNl IGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgIm1pbnZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9 IGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21w KGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9NYXh2YWx1ZShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZu YW1lLCAic3RhcnQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfU3RhcnR3aXRoKHNl cWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJyZXN0YXJ0 IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX1Jlc3RhcnQoc2VxdmFsdWVzLT5sYXN0 X3ZhbHVlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJvd25lZF9ieSIpID09 IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9Pd25lZEJ5KG9iamVjdElkLCBmYWxzZSk7CisJ CWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiYXMiKSA9PSAwKQorCQkJbmV3ZWxtID0g ZGVwYXJzZV9TZXFfQXMoZWxlbSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNl cXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRlZm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChl bGVtcywgbmV3ZWxtKTsKKwl9CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQs IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU0VRVUVO Q0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlvbjogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9u LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxl bXMpOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwly ZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlclR5cGVTdG10LgorICoKKyAq IEdpdmVuIGEgdHlwZSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1 cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiB9 cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqY21kKQoreworCUFsdGVyVHlwZVN0bXQgKmFsdGVyVHlwZVNldFN0bXQg PSAoQWx0ZXJUeXBlU3RtdCAqKSBjbWQ7CisJTGlzdENlbGwgICAqcGw7CisJTGlzdAkgICAqZWxl bXMgPSBOSUw7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKwor CXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5 cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCWZvcmVhY2gocGws IGFsdGVyVHlwZVNldFN0bXQtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpkZWZlbCA9IChE ZWZFbGVtICopIGxmaXJzdChwbCk7CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3Ry Y21wKGRlZmVsLT5kZWZuYW1lLCAic3RvcmFnZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNl X1R5cGVfU3RvcmFnZSh0eXBGb3JtKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1l LCAicmVjZWl2ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2ZSh0eXBG b3JtKTsKKwkJZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAic2VuZCIpID09IDApCisJ CQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfU2VuZCh0eXBGb3JtKTsKKwkJZWxzZSBpZiAoc3RyY21w KGRlZmVsLT5kZWZuYW1lLCAidHlwbW9kX2luIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2Vf VHlwZV9UeXBtb2RfSW4odHlwRm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFt ZSwgInR5cG1vZF9vdXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9P dXQodHlwRm9ybSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImFuYWx5emUi KSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX0FuYWx5emUodHlwRm9ybSk7CisJCWVs c2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1YnNjcmlwdCIpID09IDApCisJCQluZXdl bG0gPSBkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KHR5cEZvcm0pOworCQllbHNlCisJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCB0eXBlIG9wdGlvbiAlcyIsIGRlZmVsLT5kZWZuYW1lKTsKKworCQllbGVt cyA9IGxhcHBlbmQoZWxlbXMsIG5ld2VsbSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1 cCk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFNF VCAoJXtkZWZpbml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSAgb2JqZWN0SWQpLAorCQkJCQkJICAiZGVmaW5pdGlvbiIsIE9ialR5 cGVBcnJheSwgZWxlbXMpOworfQorCisvKgorICogRGVwYXJzZSBhIENvbXBvc2l0ZVR5cGVTdG10 IChDUkVBVEUgVFlQRSBBUykKKyAqCisgKiBHaXZlbiBhIENvbXBvc2l0ZSB0eXBlIE9JRCBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVw cmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgKCV7Y29sdW1uczosIH1zKQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbXBvc2l0ZVR5cGVTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUNvbXBvc2l0ZVR5cGVTdG10ICpub2RlID0gKENvbXBvc2l0ZVR5 cGVTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJdHlwdHVwOworCUZvcm1fcGdfdHlwZSB0 eXBmb3JtOworCVJlbGF0aW9uCXR5cGVyZWw7CisJTGlzdAkgICAqZHBjb250ZXh0OworCUxpc3QJ ICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCS8qIEZpbmQgdGhlIHBnX3R5cGUgZW50cnkgYW5kIG9w ZW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVsYXRpb24gKi8KKwl0eXB0dXAgPSBTZWFyY2hTeXNDYWNo ZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0eXB0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig dHlwZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBmb3JtID0gKEZvcm1fcGdfdHlwZSkg R0VUU1RSVUNUKHR5cHR1cCk7CisJdHlwZXJlbCA9IHJlbGF0aW9uX29wZW4odHlwZm9ybS0+dHlw cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRf Zm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHR5cGVyZWwpLAorCQkJCQkJCQkJUmVsYXRpb25H ZXRSZWxpZCh0eXBlcmVsKSk7CisKKwl0YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMo dHlwZXJlbCwgbm9kZS0+Y29sZGVmbGlzdCwgZHBjb250ZXh0LAorCQkJCQkJCQkJICBmYWxzZSwJ Lyogbm90IHR5cGVkICovCisJCQkJCQkJCQkgIHRydWUpOwkvKiBjb21wb3NpdGUgdHlwZSAqLwor CisJdGFibGVfY2xvc2UodHlwZXJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlSZWxlYXNlU3lzQ2Fj aGUodHlwdHVwKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRZUEUgJXtpZGVu dGl0eX1EIEFTICgle2NvbHVtbnM6LCB9cykiLCAyLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0 aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImNvbHVtbnMiLCBPYmpUeXBlQXJyYXksIHRhYmxl ZWx0cyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlQ29udmVyc2lvblN0bXQKKyAqCisg KiBHaXZlbiBhIGNvbnZlcnNpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQg aXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1h bmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle2RlZmF1bHR9cyBDT05WRVJT SU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9TCBUTyAle2Rlc3R9TAorICogRlJPTSAle2Z1 bmN0aW9ufUQKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9u KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQljb25UdXA7CisJ UmVsYXRpb24JY29udnJlbDsKKwlGb3JtX3BnX2NvbnZlcnNpb24gY29uRm9ybTsKKwlPYmpUcmVl ICAgICpyZXQ7CisKKwljb252cmVsID0gdGFibGVfb3BlbihDb252ZXJzaW9uUmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwljb25UdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNv bnZyZWwsIEFudW1fcGdfY29udmVyc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQoY29uVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGNvbnZlcnNpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY29uRm9ybSA9IChGb3JtX3Bn X2NvbnZlcnNpb24pIEdFVFNUUlVDVChjb25UdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEo IkNSRUFURSAle2RlZmF1bHR9cyBDT05WRVJTSU9OICV7aWRlbnRpdHl9RCBGT1IgJXtzb3VyY2V9 TCBUTyAle2Rlc3R9TCBGUk9NICV7ZnVuY3Rpb259RCIsIDUsCisJCQkJCQkgICJkZWZhdWx0Iiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSAgY29uRm9ybS0+Y29uZGVmYXVsdCA/ICJERUZBVUxUIiA6 ICIiLAorCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoY29uRm9ybS0+Y29ubmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICAg TmFtZVN0cihjb25Gb3JtLT5jb25uYW1lKSksCisJCQkJCQkgICJzb3VyY2UiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJICAoY2hhciAqKXBnX2VuY29kaW5nX3RvX2NoYXIoY29uRm9ybS0+Y29uZm9y ZW5jb2RpbmcpLAorCQkJCQkJICAiZGVzdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIChjaGFy ICopcGdfZW5jb2RpbmdfdG9fY2hhcihjb25Gb3JtLT5jb250b2VuY29kaW5nKSwKKwkJCQkJCSAg ImZ1bmN0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJICBjb25Gb3JtLT5jb25w cm9jKSk7CisKKwl0YWJsZV9jbG9zZShjb252cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVFbnVtU3RtdCAoQ1JFQVRFIFRZ UEUgQVMgRU5VTSkKKyAqCisgKiBHaXZlbiBhIEVudW0gdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0 cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0 aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZ UEUgJXtpZGVudGl0eX1EIEFTIEVOVU0gKCV7dmFsdWVzOiwgfUwpCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfQ3JlYXRlRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQ3JlYXRlRW51bVN0bXQgKm5vZGUgPSAoQ3JlYXRlRW51bVN0bXQgKikgcGFyc2V0 cmVlOworCUxpc3QJICAgKnZhbHVlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJZm9y ZWFjaChjZWxsLCBub2RlLT52YWxzKQorCQl2YWx1ZXMgPSBsYXBwZW5kKHZhbHVlcywgbmV3X3N0 cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbCkpKSk7CisKKwlyZXR1 cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBFTlVNICgle3Zh bHVlczosIH1MKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQp LAorCQkJCQkJICAidmFsdWVzIiwgT2JqVHlwZUFycmF5LCB2YWx1ZXMpOworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZUV4dGVuc2lvblN0bXQKKyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24g T0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVl CisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIENSRUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtv cHRpb25zOiB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUV4dGVuc2lv blN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlRXh0ZW5zaW9u U3RtdCAqbm9kZSA9IChDcmVhdGVFeHRlbnNpb25TdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlv bglwZ19leHRlbnNpb247CisJSGVhcFR1cGxlCWV4dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBl eHRGb3JtOworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RD ZWxsICAgKmNlbGw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lvblJlbGF0 aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5 X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWV4dEZvcm0g PSAoRm9ybV9wZ19leHRlbnNpb24pIEdFVFNUUlVDVChleHRUdXApOworCisJLyogTGlzdCBvZiBv cHRpb25zICovCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAg ICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChzdHJjbXAob3B0LT5k ZWZuYW1lLCAic2NoZW1hIikgPT0gMCkKKwkJeworCQkJLyogU2tpcCB0aGlzIG9uZTsgd2UgYWRk IG9uZSB1bmNvbmRpdGlvbmFsbHkgYmVsb3cgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2Ug aWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdfdmVyc2lvbiIpID09IDApCisJCXsKKwkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJWRVJTSU9OICV7dmVyc2lvbn1MIiwgMiwKKwkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJCQkJCQkgInZlcnNpb24iLCBPYmpU eXBlU3RyaW5nLCBkZWZHZXRTdHJpbmcob3B0KSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZu YW1lLCAib2xkX3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi RlJPTSAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJm cm9tIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9w dCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJ CX0KKwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ ZGVmbmFtZSk7CisJfQorCisJLyogQWRkIHRoZSBTQ0hFTUEgb3B0aW9uICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIlNDSEVNQSAle3NjaGVtYX1JIiwgMiwKKwkJCQkJCSAidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJzY2hlbWEiLAorCQkJCQkJICJzY2hlbWEiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIGdldF9uYW1lc3BhY2VfbmFtZShleHRGb3JtLT5leHRuYW1lc3BhY2UpKTsKKwlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl0YWJsZV9jbG9zZShwZ19l eHRlbnNpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNS RUFURSBFWFRFTlNJT04gJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXtvcHRpb25zOiB9cyIs IDMsCisJCQkJCQkgICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgbm9k ZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICAibmFtZSIs IE9ialR5cGVTdHJpbmcsIG5vZGUtPmV4dG5hbWUsCisJCQkJCQkgICJvcHRpb25zIiwgT2JqVHlw ZUFycmF5LCBsaXN0KTsKK30KKworLyoKKyAqIElmIGEgY29sdW1uIG5hbWUgaXMgc3BlY2lmaWVk LCBhZGQgYW4gZWxlbWVudCBmb3IgaXQ7IG90aGVyd2lzZSBpdCdzIGEKKyAqIHRhYmxlLWxldmVs IG9wdGlvbi4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9GZHdPcHRpb25zKExpc3Qg Km9wdGlvbnMsIGNoYXIgKmNvbG5hbWUsIGJvb2wgYWx0ZXJjb2xvcHRpb25zKQoreworCU9ialRy ZWUgICAgKnJldDsKKworCWlmIChjb2xuYW1lKQorCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgJXtvcHRpb25zfXMiLCAyLAorCQkJCQkJCSAiY29sdW1uIiwg T2JqVHlwZVN0cmluZywgY29sbmFtZSwKKwkJCQkJCQkgIm9wdGlvbnMiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCSBhbHRlcmNvbG9wdGlvbnMgPyAiT1BUSU9OUyIgOiAiIik7CisJZWxzZQorCQly ZXQgPSBuZXdfb2JqdHJlZSgiT1BUSU9OUyIpOworCisJaWYgKG9wdGlvbnMgIT0gTklMKQorCXsK KwkJTGlzdAkgICAqb3B0b3V0ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVh Y2goY2VsbCwgb3B0aW9ucykKKwkJeworCQkJRGVmRWxlbSAgICAqZWxlbTsKKwkJCU9ialRyZWUg ICAgKm9wdDsKKworCQkJZWxlbSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQkJc3dp dGNoIChlbGVtLT5kZWZhY3Rpb24pCisJCQl7CisJCQkJY2FzZSBERUZFTEVNX1VOU1BFQzoKKwkJ CQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIiV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJ CQkJCSAibGFiZWwiLCBPYmpUeXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAi dmFsdWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJp bmcoZWxlbSkgOgorCQkJCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZB TFNFIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgREVGRUxFTV9TRVQ6CisJCQkJCW9wdCA9IG5l d19vYmp0cmVlX1ZBKCJTRVQgJXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJs YWJlbCIsIE9ialR5cGVTdHJpbmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVt KSA6CisJCQkJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsK KwkJCQkJYnJlYWs7CisJCQkJY2FzZSBERUZFTEVNX0FERDoKKwkJCQkJb3B0ID0gbmV3X29ianRy ZWVfVkEoIkFERCAle2xhYmVsfUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwg T2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlw ZVN0cmluZywKKwkJCQkJCQkJCQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJ CQkJCQkJCQkgZGVmR2V0Qm9vbGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQli cmVhazsKKwkJCQljYXNlIERFRkVMRU1fRFJPUDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEo IkRST1AgJXtsYWJlbH1JIiwgMSwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywg ZWxlbS0+ZGVmbmFtZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWVsb2coRVJS T1IsICJpbnZhbGlkIGRlZiBhY3Rpb24gJWQiLCBlbGVtLT5kZWZhY3Rpb24pOworCQkJCQlvcHQg PSBOVUxMOworCQkJfQorCisJCQlvcHRvdXQgPSBsYXBwZW5kKG9wdG91dCwgbmV3X29iamVjdF9v YmplY3Qob3B0KSk7CisJCX0KKworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle29wdGlv bjogLH1zKSIsIG9wdG91dCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZkd1N0bXQgKENS RUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcgT0lEIGFuZCB0 aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXBy ZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkgJXtoYW5kbGVyfXMgJXt2 YWxpZGF0b3J9cyAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlRmR3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVGZHdTdG10ICpub2RlID0gKENyZWF0ZUZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBU dXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3JtOworCVJl bGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJcmVs ID0gdGFibGVfb3BlbihGb3JlaWduRGF0YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKworCWZkd1R1cCA9IFNlYXJjaFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQs CisJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoZmR3VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZv cmVpZ24tZGF0YSB3cmFwcGVyIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmZHdG b3JtID0gKEZvcm1fcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOwor CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lk ZW50aXR5fUkiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIo ZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJLyogQWRkIEhBTkRMRVIgY2xhdXNlICovCisJaWYgKCFP aWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd2hhbmRsZXIpKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8g SEFORExFUiIpOworCWVsc2UKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7 cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHdoYW5kbGVyKSk7CisJfQorCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7aGFuZGxlcn1zIiwgdG1wKTsKKworCS8qIEFkZCBWQUxJREFUT1IgY2xh dXNlICovCisJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpCisJCXRtcCA9 IG5ld19vYmp0cmVlKCJOTyBWQUxJREFUT1IiKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiVkFMSURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJl IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3Ip KTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7 CisKKwkvKiBBZGQgYW4gT1BUSU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7Z2VuZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0 aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMLCBmYWxzZSkpOworCisJUmVsZWFzZVN5c0NhY2hlKGZk d1R1cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBy ZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRmR3U3RtdCAoQUxURVIgRk9SRUlHTiBE QVRBIFdSQVBQRVIpCisgKgorICogR2l2ZW4gYW4gRkRXIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUg dGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBh bHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBGT1JFSUdOIERB VEEgV1JBUFBFUiAle2lkZW50aXR5fUkgJXtmZHdfb3B0aW9uczogfXMgJXtnZW5lcmljX29wdGlv bnN9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRmR3U3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZkd1N0bXQgKm5vZGUgPSAoQWx0ZXJG ZHdTdG10ICopIHBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZmR3VHVwOworCUZvcm1fcGdfZm9yZWln bl9kYXRhX3dyYXBwZXIgZmR3Rm9ybTsKKwlSZWxhdGlvbglyZWw7CisJT2JqVHJlZSAgICAqcmV0 OworCUxpc3QJICAgKmZkd19vcHRpb25zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwly ZWwgPSB0YWJsZV9vcGVuKEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2 ZUxvY2spOworCisJZmR3VHVwID0gU2VhcmNoU3lzQ2FjaGUxKEZPUkVJR05EQVRBV1JBUFBFUk9J RCwKKwkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChmZHdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig Zm9yZWlnbi1kYXRhIHdyYXBwZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZk d0Zvcm0gPSAoRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlcikgR0VUU1RSVUNUKGZkd1R1cCk7 CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVIgJXtp ZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3Ry KGZkd0Zvcm0tPmZkd25hbWUpKTsKKworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdoIG9wdGlvbnMs IHRvIHNlZSB3aGF0IGNoYW5nZWQsIGJ1dCB1c2UgY2F0YWxvZyBhcyBhCisJICogYmFzaXMgZm9y IG5ldyB2YWx1ZXMuCisJICovCisJZm9yZWFjaChjZWxsLCBub2RlLT5mdW5jX29wdGlvbnMpCisJ eworCQlEZWZFbGVtICAgICplbGVtOworCQlPYmpUcmVlICAgICp0bXA7CisKKwkJZWxlbSA9IGxm aXJzdChjZWxsKTsKKworCQlpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAiaGFuZGxl ciIpID09IDApCisJCXsKKwkJCS8qIGFkZCBIQU5ETEVSIGNsYXVzZSAqLworCQkJaWYgKCFPaWRJ c1ZhbGlkKGZkd0Zvcm0tPmZkd2hhbmRsZXIpKQorCQkJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBI QU5ETEVSIik7CisJCQllbHNlCisJCQl7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkhBTkRM RVIgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd2hhbmRsZXIpKTsKKwkJCX0KKwkJ CWZkd19vcHRpb25zID0gbGFwcGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJCX0KKwkJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChlbGVtLT5kZWZuYW1lLCAidmFsaWRh dG9yIikgPT0gMCkKKwkJeworCQkJLyogYWRkIFZBTElEQVRPUiBjbGF1c2UgKi8KKwkJCWlmICgh T2lkSXNWYWxpZChmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKQorCQkJCXRtcCA9IG5ld19vYmp0cmVl KCJOTyBWQUxJREFUT1IiKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiVkFMSURBVE9SICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCQkJICJwcm9jZWR1cmUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9j ZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3Ip KTsKKwkJCX0KKwkJCWZkd19vcHRpb25zID0gbGFwcGVuZChmZHdfb3B0aW9ucywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCX0KKwl9CisKKwkvKiBBZGQgSEFORExFUi9WQUxJREFUT1IgaWYg c3BlY2lmaWVkICovCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIle2Zkd19vcHRpb25zOiB9 cyIsIGZkd19vcHRpb25zKTsKKworCS8qIEFkZCBhbiBPUFRJT05TIGNsYXVzZSwgaWYgYW55ICov CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmljX29wdGlvbnN9RCIsCisJCQkJ CQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwsIGZhbHNlKSk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVFlQRSBB UyBSQU5HRSBzdGF0ZW1lbnQKKyAqCisgKiBHaXZlbiBhIFJhbmdlIHR5cGUgT0lEIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENS RUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUmFuZ2VTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpkZWZpbml0 aW9uID0gTklMOworCVJlbGF0aW9uCXBnX3JhbmdlOworCUhlYXBUdXBsZQlyYW5nZVR1cDsKKwlG b3JtX3BnX3JhbmdlIHJhbmdlRm9ybTsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJU3lzU2NhbkRl c2Mgc2NhbjsKKworCXBnX3JhbmdlID0gdGFibGVfb3BlbihSYW5nZVJlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCisJU2NhbktleUluaXQoJmtleVswXSwKKwkJCQlBbnVtX3BnX3Jhbmdl X3JuZ3R5cGlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBn X3JhbmdlLCBSYW5nZVR5cGlkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDEsIGtleSk7 CisKKwlyYW5nZVR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHJhbmdlVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHJhbmdlIHdpdGggdHlwZSBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXJhbmdlRm9ybSA9 IChGb3JtX3BnX3JhbmdlKSBHRVRTVFJVQ1QocmFuZ2VUdXApOworCisJLyogU1VCVFlQRSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBFID0gJXt0eXBlfUQiLCAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3VidHlwZSIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25J ZCwgcmFuZ2VGb3JtLT5ybmdzdWJ0eXBlKSk7CisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5p dGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVUJUWVBFX09QQ0xBU1MgKi8K KwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ3N1Ym9wYykpCisJeworCQl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiU1VCVFlQRV9PUENMQVNTID0gJXtvcGNsYXNzfUQiLCAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm9wY2xhc3MiLAorCQkJCQkJCSAib3BjbGFzcyIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRv ckNsYXNzUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nc3Vib3BjKSk7 CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKworCS8qIENPTExBVElPTiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9ybS0+ cm5nY29sbGF0aW9uKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRJT04gPSAl e2NvbGxhdGlvbn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xs YXRpb24iLAorCQkJCQkJCSAiY29sbGF0aW9uIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJ CQkJCSByYW5nZUZvcm0tPnJuZ2NvbGxhdGlvbikpOworCQlkZWZpbml0aW9uID0gbGFwcGVuZChk ZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBDQU5PTklDQUwg Ki8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nhbm9uaWNhbCkpCisJeworCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiQ0FOT05JQ0FMID0gJXtjYW5vbmljYWx9RCIsIDIsCisJCQkJCQkJ ICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY2Fub25pY2FsIiwKKwkJCQkJCQkgImNhbm9uaWNh bCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQ cm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdjYW5vbmlj YWwpKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJfQorCisJLyogU1VCVFlQRV9ESUZGICovCisJaWYgKE9pZElzVmFsaWQocmFu Z2VGb3JtLT5ybmdzdWJkaWZmKSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTVUJUWVBF X0RJRkYgPSAle3N1YnR5cGVfZGlmZn1EIiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJzdWJ0eXBlX2RpZmYiLAorCQkJCQkJCSAic3VidHlwZV9kaWZmIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ3N1YmRpZmYpKTsKKwkJZGVmaW5p dGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQor CisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwl0YWJsZV9jbG9zZShwZ19yYW5nZSwgUm93RXhj bHVzaXZlTG9jayk7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRl bnRpdHl9RCBBUyBSQU5HRSAoJXtkZWZpbml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJCQkJCQkgICJkZWZpbml0aW9uIiwgT2JqVHlw ZUFycmF5LCBkZWZpbml0aW9uKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJFbnVtU3Rt dC4KKyAqCisgKiBHaXZlbiBhbiBlbnVtIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZp ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIEFERCBW QUxVRSAle2lmX25vdF9leGlzdHN9cyAle3ZhbHVlfUwKKyAqICV7YWZ0ZXJfb3JfYmVmb3JlfXMg JXtuZWlnaGJvcn1MCisgKiAJT1IKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBW QUxVRSAle3ZhbHVlfUwgVE8gJXtuZXd2YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQWx0ZXJFbnVtU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlB bHRlckVudW1TdG10ICpub2RlID0gKEFsdGVyRW51bVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUWVBFICV7aWRlbnRp dHl9RCIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9i amVjdElkKSk7CisKKwlpZiAoIW5vZGUtPm9sZFZhbCkKKwl7CisJCWFwcGVuZF9mb3JtYXRfc3Ry aW5nKHJldCwgIkFERCBWQUxVRSIpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2lm X25vdF9leGlzdHN9cyIsICJpZl9ub3RfZXhpc3RzIiwKKwkJCQkJCQkgbm9kZS0+c2tpcElmTmV3 VmFsRXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIG5vZGUtPm5ld1ZhbCk7CisKKwkJaWYgKG5v ZGUtPm5ld1ZhbE5laWdoYm9yKQorCQl7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e2FmdGVyX29yX2JlZm9yZX1zIiwKKwkJCQkJCQkJICJhZnRlcl9vcl9iZWZvcmUiLAorCQkJCQkJ CQkgbm9kZS0+bmV3VmFsSXNBZnRlciA/ICJBRlRFUiIgOiAiQkVGT1JFIik7CisJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICIle25laWdoYm9yfUwiLCAibmVpZ2hib3IiLAorCQkJCQkJCQkg bm9kZS0+bmV3VmFsTmVpZ2hib3IpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIlJFTkFNRSBWQUxVRSAle3ZhbHVlfUwgVE8iLCAidmFsdWUiLAorCQkJ CQkJCSBub2RlLT5vbGRWYWwpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle25ld3Zh bHVlfUwiLCAibmV3dmFsdWUiLCBub2RlLT5uZXdWYWwpOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0ZW5zaW9uU3RtdCAoQUxURVIgRVhURU5TSU9O IC4uIFVQREFURSBUTyBWRVJTSU9OKQorICoKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBPSUQgYW5k IGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRF UiBFWFRFTlNJT04gJXtpZGVudGl0eX1JIFVQREFURSAle29wdGlvbnM6IH1zCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRXh0ZW5zaW9uU3RtdCAqbm9kZSA9IChBbHRlckV4dGVu c2lvblN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXBnX2V4dGVuc2lvbjsKKwlIZWFwVHVw bGUJZXh0VHVwOworCUZvcm1fcGdfZXh0ZW5zaW9uIGV4dEZvcm07CisJT2JqVHJlZSAgICAqcmV0 OworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlEZWZFbGVtICAg ICpkX25ld192ZXJzaW9uID0gTlVMTDsKKworCXBnX2V4dGVuc2lvbiA9IHRhYmxlX29wZW4oRXh0 ZW5zaW9uUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlleHRUdXAgPSBnZXRfY2F0YWxv Z19vYmplY3RfYnlfb2lkKHBnX2V4dGVuc2lvbiwgQW51bV9wZ19leHRlbnNpb25fb2lkLCBvYmpl Y3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGV4dFR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVj dElkKTsKKwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9uKSBHRVRTVFJVQ1QoZXh0VHVwKTsK KworCWZvcmVhY2goY2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9 IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwg Im5ld192ZXJzaW9uIikgPT0gMCkKKwkJeworCQkJT2JqVHJlZSAgICAqdG1wOworCisJCQlpZiAo ZF9uZXdfdmVyc2lvbikKKwkJCQllbG9nKEVSUk9SLCAiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50 IG9wdGlvbnMgZm9yIGV4dGVuc2lvbiB3aXRoIE9JRCAldSIsCisJCQkJCSBvYmplY3RJZCk7CisK KwkJCWRfbmV3X3ZlcnNpb24gPSBvcHQ7CisKKwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUTyAl e3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJ2ZXJzaW9u IiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3RyaW5nKG9wdCkp OworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCX0K KwkJZWxzZQorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9wdGlvbiAlcyIsIG9wdC0+ZGVm bmFtZSk7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIEVYVEVOU0lPTiAle2lk ZW50aXR5fUkgVVBEQVRFICV7b3B0aW9uczogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVTdHJpbmcsIE5hbWVTdHIoZXh0Rm9ybS0+ZXh0bmFtZSksCisJCQkJCQkgIm9wdGlvbnMi LCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nl c3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0 ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKEFMVEVSIEVYVEVOU0lPTiBleHQgQUREL0RST1Agb2Jq ZWN0KQorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBFWFRFTlNJT04gJXtleHRpZGVu dGl0eX1JIEFERC9EUk9QICV7b2JqaWRlbnRpdHl9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlLAorCQkJCQkJCQkgICBPYmplY3RBZGRyZXNzIG9iamVjdEFkZHJlc3MpCit7CisJQWx0 ZXJFeHRlbnNpb25Db250ZW50c1N0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0 bXQgKikgcGFyc2V0cmVlOworCisJQXNzZXJ0KG5vZGUtPmFjdGlvbiA9PSArMSB8fCBub2RlLT5h Y3Rpb24gPT0gLTEpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04g JXtleHRpZGVudGl0eX1JICV7ZXh0b3B0aW9ufXMgJXtleHRvYmp0eXBlfXMgJXtvYmppZGVudGl0 eX1zIiwgNCwKKwkJCQkJCSAgImV4dGlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ZXh0 bmFtZSwKKwkJCQkJCSAgImV4dG9wdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUt PmFjdGlvbiA9PSArMSA/ICJBREQiIDogIkRST1AiLAorCQkJCQkJICAiZXh0b2JqdHlwZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZh bHNlKSwKKwkJCQkJCSAgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0 T2JqZWN0SWRlbnRpdHkoJm9iamVjdEFkZHJlc3MsIGZhbHNlKSk7Cit9CisKKy8qCisgKiBEZXBh cnNlIGFuIENyZWF0ZUNhc3RTdG10LgorICoKKyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBh IHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFIENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSAle21lY2hhbmlz bX1zICV7Y29udGV4dH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ2Fz dFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlQ2FzdFN0bXQg Km5vZGUgPSAoQ3JlYXRlQ2FzdFN0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCWNhc3RyZWw7 CisJSGVhcFR1cGxlCWNhc3RUdXA7CisJRm9ybV9wZ19jYXN0IGNhc3RGb3JtOworCU9ialRyZWUg ICAgKnJldDsKKwljaGFyCSAgICpjb250ZXh0OworCisJY2FzdHJlbCA9IHRhYmxlX29wZW4oQ2Fz dFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJY2FzdFR1cCA9IGdldF9jYXRhbG9nX29i amVjdF9ieV9vaWQoY2FzdHJlbCwgQW51bV9wZ19jYXN0X29pZCwgb2JqZWN0SWQpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZChjYXN0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIGNhc3Qgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJY2FzdEZvcm0gPSAoRm9y bV9wZ19jYXN0KSBHRVRTVFJVQ1QoY2FzdFR1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIENBU1QgKCV7c291cmNldHlwZX1UIEFTICV7dGFyZ2V0dHlwZX1UKSIsIDIsCisJCQkJ CQkgInNvdXJjZXR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90 eXBlKGNhc3RGb3JtLT5jYXN0c291cmNlLCAtMSksCisJCQkJCQkgInRhcmdldHR5cGUiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKGNhc3RGb3JtLT5jYXN0dGFy Z2V0LCAtMSkpOworCisJaWYgKG5vZGUtPmlub3V0KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle21lY2hhbmlzbX1zIiwgIm1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIIElOT1VUIik7 CisJZWxzZSBpZiAobm9kZS0+ZnVuYyA9PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle21lY2hhbmlzbX1zIiwgIm1lY2hhbmlzbSIsCisJCQkJCQkJICJXSVRIT1VUIEZVTkNU SU9OIik7CisJZWxzZQorCXsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJU3RyaW5nSW5mb0Rh dGEgZnVuYzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsK KwkJaW50CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RG b3JtLT5jYXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1 bmNUdXApOworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygm ZnVuYywgIiVzKCIsCisJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVz cGFjZV9uYW1lKGZ1bmNGb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIo ZnVuY0Zvcm0tPnByb25hbWUpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBmdW5jRm9ybS0+cHJvbmFy Z3M7IGkrKykKKwkJeworCQkJaWYgKGkgIT0gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigm ZnVuYywgJywnKTsKKworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJ ICAgZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNb aV0pKTsKKwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIldJVEggRlVOQ1RJT04gJXtjYXN0ZnVuY3Rpb259cyIsIDEs CisJCQkJCQkJCSJjYXN0ZnVuY3Rpb24iLCBPYmpUeXBlU3RyaW5nLCBmdW5jLmRhdGEpOworCQlh cHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle21lY2hhbmlzbX1zIiwgdG1wX29iaik7CisKKwkJ UmVsZWFzZVN5c0NhY2hlKGZ1bmNUdXApOworCX0KKworCXN3aXRjaCAobm9kZS0+Y29udGV4dCkK Kwl7CisJCWNhc2UgQ09FUkNJT05fSU1QTElDSVQ6CisJCQljb250ZXh0ID0gIkFTIElNUExJQ0lU IjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0FTU0lHTk1FTlQ6CisJCQljb250ZXh0ID0g IkFTIEFTU0lHTk1FTlQiOworCQkJYnJlYWs7CisJCWNhc2UgQ09FUkNJT05fRVhQTElDSVQ6CisJ CQljb250ZXh0ID0gIiI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJp bnZhbGlkIGNvZXJjaW9uIGNvZGUgJWMiLCBub2RlLT5jb250ZXh0KTsKKwkJCXJldHVybiBOVUxM OwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCX0KKwlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle2NvbnRleHR9cyIsICJjb250ZXh0IiwgY29udGV4dCk7CisKKwl0YWJsZV9jbG9zZShj YXN0cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYW4gQUxURVIgREVGQVVMVCBQUklWSUxFR0VTIHN0YXRlbWVudC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQUxURVIgREVGQVVMVCBQUklWSUxFR0VTICV7aW5fc2NoZW1hfXMgJXtm b3Jfcm9sZXN9cyAle2dyYW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRl ckRlZmF1bHRQcml2aWxlZ2VzU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJl ZSAgICAqcmV0OworCUFsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10ICpzdG10ID0gKEFsdGVyRGVm YXVsdFByaXZpbGVnZXNTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCUxpc3QJICAgKnJvbGVzID0g TklMOworCUxpc3QJICAgKnNjaGVtYXMgPSBOSUw7CisJTGlzdAkgICAqZ3JhbnRlZXM7CisJTGlz dAkgICAqcHJpdnM7CisJTGlzdENlbGwgICAqY2VsbDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2Jq VHJlZSAgICAqZ3JhbnQ7CisJY2hhcgkgICAqb2JqdHlwZTsKKworCXJldCA9IG5ld19vYmp0cmVl KCJBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMiKTsKKworCS8qIFNjYW4gdGhlIHBhcnNlIG5vZGUg dG8gZGlnIG91dCB0aGUgRk9SIFJPTEUgYW5kIElOIFNDSEVNQSBjbGF1c2VzICovCisJZm9yZWFj aChjZWxsLCBzdG10LT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCQlMaXN0Q2VsbCAgICpjZWxsMjsKKworCQlBc3NlcnQoSXNBKG9w dCwgRGVmRWxlbSkpOworCQlBc3NlcnQoSXNBKG9wdC0+YXJnLCBMaXN0KSk7CisJCWlmIChzdHJj bXAob3B0LT5kZWZuYW1lLCAicm9sZXMiKSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAo TGlzdCAqKSBvcHQtPmFyZykKKwkJCXsKKwkJCQlSb2xlU3BlYyAgICpyb2xlc3BlYyA9IGxmaXJz dChjZWxsMik7CisJCQkJT2JqVHJlZSAgICAqb2JqID0gbmV3X29ianRyZWVfZm9yX3JvbGVzcGVj KHJvbGVzcGVjKTsKKworCQkJCXJvbGVzID0gbGFwcGVuZChyb2xlcywgbmV3X29iamVjdF9vYmpl Y3Qob2JqKSk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNj aGVtYXMiKSA9PSAwKQorCQl7CisJCQlmb3JlYWNoKGNlbGwyLCAoTGlzdCAqKSBvcHQtPmFyZykK KwkJCXsKKwkJCQlTdHJpbmcJICAgKnZhbCA9IGxmaXJzdF9ub2RlKFN0cmluZywgY2VsbDIpOwor CisJCQkJc2NoZW1hcyA9IGxhcHBlbmQoc2NoZW1hcywgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFs KHZhbCkpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEFkZCB0aGUgSU4gU0NIRU1BIGNsYXVzZSwg aWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIklOIFNDSEVNQSIpOworCWFwcGVuZF9hcnJh eV9vYmplY3QodG1wLCAiJXtzY2hlbWFzOiwgfUkiLCBzY2hlbWFzKTsKKwlpZiAoc2NoZW1hcyA9 PSBOSUwpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7aW5fc2NoZW1hfXMiLCB0bXApOworCisJLyogQWRkIHRoZSBGT1IgUk9MRSBjbGF1 c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJGT1IgUk9MRSIpOworCWFwcGVuZF9h cnJheV9vYmplY3QodG1wLCAiJXtyb2xlczosIH1SIiwgcm9sZXMpOworCWlmIChyb2xlcyA9PSBO SUwpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7Zm9yX3JvbGVzfXMiLCB0bXApOworCisJLyoKKwkgKiBBZGQgdGhlIEdSQU5UIHN1YmNv bW1hbmQKKwkgKiBWZXJib3NlIHN5bnRheAorCSAqIEdSQU5UICV7cHJpdmlsZWdlczosIH1zIE9O ICV7dGFyZ2V0fXMgVE8gJXtncmFudGVlczosIH1SICV7Z3JhbnRfb3B0aW9ufXMKKwkgKiBvcgor CSAqIFJFVk9LRSAle2dyYW50X29wdGlvbn1zICV7cHJpdmlsZWdlczosIH1zIE9OICV7dGFyZ2V0 fXMgRlJPTSAle2dyYW50ZWVzOiwgfVIKKwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFu dCkKKwkJZ3JhbnQgPSBuZXdfb2JqdHJlZSgiR1JBTlQiKTsKKwllbHNlCisJeworCQlncmFudCA9 IG5ld19vYmp0cmVlKCJSRVZPS0UiKTsKKworCQkvKiBBZGQgdGhlIEdSQU5UIE9QVElPTiBjbGF1 c2UgZm9yIFJFVk9LRSBzdWJjb21tYW5kICovCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHUkFO VCBPUFRJT04gRk9SIiwgMSwKKwkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJ CQkgc3RtdC0+YWN0aW9uLT5ncmFudF9vcHRpb24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChn cmFudCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCB0bXApOworCX0KKworCS8qCisJICogQWRkIHRoZSBw cml2aWxlZ2VzIGxpc3QuICBUaGlzIHVzZXMgdGhlIHBhcnNlciBzdHJ1Y3QsIGFzIG9wcG9zZWQg dG8KKwkgKiB0aGUgSW50ZXJuYWxHcmFudCBmb3JtYXQgdXNlZCBieSBHUkFOVC4gIFRoZXJlIGFy ZSBlbm91Z2ggb3RoZXIKKwkgKiBkaWZmZXJlbmNlcyB0aGF0IHRoaXMgZG9lc24ndCBzZWVtIHdv cnRoIGltcHJvdmluZy4KKwkgKi8KKwlpZiAoc3RtdC0+YWN0aW9uLT5wcml2aWxlZ2VzID09IE5J TCkKKwkJcHJpdnMgPSBsaXN0X21ha2UxKG5ld19zdHJpbmdfb2JqZWN0KCJBTEwgUFJJVklMRUdF UyIpKTsKKwllbHNlCisJeworCQlwcml2cyA9IE5JTDsKKworCQlmb3JlYWNoKGNlbGwsIHN0bXQt PmFjdGlvbi0+cHJpdmlsZWdlcykKKwkJeworCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxmaXJzdChj ZWxsKTsKKworCQkJQXNzZXJ0KHByaXYtPmNvbHMgPT0gTklMKTsKKwkJCXByaXZzID0gbGFwcGVu ZChwcml2cywgbmV3X3N0cmluZ19vYmplY3QocHJpdi0+cHJpdl9uYW1lKSk7CisJCX0KKwl9CisK KwlhcHBlbmRfYXJyYXlfb2JqZWN0KGdyYW50LCAiJXtwcml2aWxlZ2VzOiwgfXMiLCBwcml2cyk7 CisKKwlzd2l0Y2ggKGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKQorCXsKKwkJY2FzZSBPQkpFQ1Rf VEFCTEU6CisJCQlvYmp0eXBlID0gIlRBQkxFUyI7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1Rf RlVOQ1RJT046CisJCQlvYmp0eXBlID0gIkZVTkNUSU9OUyI7CisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfUk9VVElORToKKwkJCW9ianR5cGUgPSAiUk9VVElORVMiOworCQkJYnJlYWs7CisJCWNh c2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJb2JqdHlwZSA9ICJTRVFVRU5DRVMiOworCQkJYnJlYWs7 CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJCQlvYmp0eXBlID0gIlRZUEVTIjsKKwkJCWJyZWFrOwor CQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlvYmp0eXBlID0gIlNDSEVNQVMiOworCQkJYnJlYWs7 CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPQkpFQ1QgdmFsdWUgJWQgZm9y IGRlZmF1bHQgcHJpdmlsZWdlcyIsIGNtZC0+ZC5kZWZwcml2cy5vYmp0eXBlKTsKKwl9CisKKwkv KiBBZGQgdGhlIHRhcmdldCBvYmplY3QgdHlwZSAqLworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGdy YW50LCAiT04gJXt0YXJnZXR9cyIsICJ0YXJnZXQiLCBvYmp0eXBlKTsKKworCS8qIEFkZCB0aGUg Z3JhbnRlZSBsaXN0ICovCisJZ3JhbnRlZXMgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBzdG10LT5h Y3Rpb24tPmdyYW50ZWVzKQorCXsKKwkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBs Zmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3Bl YyhzcGVjKTsKKworCQlncmFudGVlcyA9IGxhcHBlbmQoZ3JhbnRlZXMsIG5ld19vYmplY3Rfb2Jq ZWN0KG9iaikpOworCX0KKworCWlmIChzdG10LT5hY3Rpb24tPmlzX2dyYW50KQorCXsKKwkJYXBw ZW5kX2FycmF5X29iamVjdChncmFudCwgIlRPICV7Z3JhbnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsK KworCQkvKiBBZGQgdGhlIFdJVEggR1JBTlQgT1BUSU9OIGNsYXVzZSBmb3IgR1JBTlQgc3ViY29t bWFuZCAqLworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCBHUkFOVCBPUFRJT04iLCAxLAor CQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCSBzdG10LT5hY3Rpb24tPmdy YW50X29wdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGdyYW50LCAiJXtncmFudF9vcHRp b259cyIsIHRtcCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2FycmF5X29iamVjdChncmFudCwgIkZS T00gJXtncmFudGVlczosIH1SIiwgZ3JhbnRlZXMpOworCisJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtncmFudH1zIiwgZ3JhbnQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgdGhlIENSRUFURSBET01BSU4KKyAqCisgKiBHaXZlbiBhIGZ1bmN0aW9uIE9JRCBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBDUkVBVEUgRE9NQUlOICV7aWRlbnRpdHl9RCBBUyAle3R5cGV9VCAle25vdF9udWxsfXMgJXtj b25zdHJhaW50c31zCisgKiAle2NvbGxhdGlvbn1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlRG9tYWluKE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9i alRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBfb2JqOworCUhlYXBUdXBsZQl0eXBUdXA7 CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJTGlzdAkgICAqY29uc3RyYWludHM7CisJY2hhcgkg ICAqZGVmdmFsOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElk KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hl IGxvb2t1cCBmYWlsZWQgZm9yIGRvbWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwl0eXBG b3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR5cFR1cCk7CisKKwlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQ1JFQVRFIERPTUFJTiAle2lkZW50aXR5fUQgQVMgJXt0eXBlfVQgJXtub3RfbnVs bH1zIiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZSh0eXBG b3JtLT50eXBiYXNldHlwZSwKKwkJCQkJCQkJCQkJICB0eXBGb3JtLT50eXB0eXBtb2QpLAorCQkJ CQkJICJub3RfbnVsbCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgdHlwRm9ybS0+dHlwbm90bnVs bCA/ICJOT1QgTlVMTCIgOiAiIik7CisKKwljb25zdHJhaW50cyA9IG9idGFpbkNvbnN0cmFpbnRz KE5JTCwgSW52YWxpZE9pZCwgb2JqZWN0SWQpOworCWlmIChjb25zdHJhaW50cyA9PSBOSUwpCisJ eworCQl0bXBfb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisJfQorCWVsc2UKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle2VsZW1lbnRz OiwgfXMiLCAxLAorCQkJCQkJCQkiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIGNvbnN0cmFpbnRz KTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbnN0cmFpbnRzfXMiLCB0bXBfb2Jq KTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCWlmIChPaWRJc1ZhbGlk KHR5cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJeworCQlPYmpUcmVlICAgICpjb2xsbmFtZTsKKwor CQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkgICB0eXBGb3JtLT50eXBjb2xsYXRpb24pOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdCh0bXBfb2JqLCAiJXtuYW1lfUQiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7Y29sbGF0aW9ufXMiLCB0bXBfb2JqKTsKKworCWRlZnZhbCA9IERvbWFpbkdldERlZmF1bHQo dHlwVHVwLCB0cnVlKTsKKwlpZiAoZGVmdmFsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICJERUZBVUxUICV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLCBkZWZ2YWwpOworCisJUmVsZWFzZVN5 c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENy ZWF0ZUZ1bmN0aW9uU3RtdCAoQ1JFQVRFIEZVTkNUSU9OKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rp b24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9z ZSBzeW50YXgKKyAqCisgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMgRlVOQ1RJT04gJXtzaWduYXR1 cmV9cyBSRVRVUk5TICV7cmV0dXJuX3R5cGV9cworICogTEFOR1VBR0UgJXt0cmFuc2Zvcm1fdHlw ZX1zICV7bGFuZ3VhZ2V9SSAle3dpbmRvd31zICV7dm9sYXRpbGl0eX1zCisgKiAle3BhcmFsbGVs X3NhZmV0eX1zICV7bGVha3Byb29mfXMgJXtzdHJpY3R9cyAle3NlY3VyaXR5X2RlZmluZXJ9cwor ICogJXtjb3N0fXMgJXtyb3dzfXMgJXtzdXBwb3J0fXMgJXtzZXRfb3B0aW9uczogfXMgQVMgJXtv YmpmaWxlfUwsCisgKiAle3N5bWJvbH1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlRnVuY3Rpb24oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRl RnVuY3Rpb25TdG10ICpub2RlID0gKENyZWF0ZUZ1bmN0aW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9vYmo7CisJRGF0dW0JCXRtcGRhdHVt OworCWNoYXIJICAgKnNvdXJjZTsKKwljaGFyCSAgICpwcm9iaW4gPSBOVUxMOworCUxpc3QJICAg KnBhcmFtczsKKwlMaXN0CSAgICpkZWZhdWx0czsKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxp c3QJICAgKnR5cGVzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdENlbGwgICAqY3Vy ZGVmOworCUxpc3RDZWxsICAgKnRhYmxlX3BhcmFtcyA9IE5VTEw7CisJSGVhcFR1cGxlCXByb2NU dXA7CisJRm9ybV9wZ19wcm9jIHByb2NGb3JtOworCUhlYXBUdXBsZQlsYW5nVHVwOworCU9pZAkJ ICAgKnR5cGFycmF5OworCU9pZAkJICAgKnRyZnR5cGVzOworCUZvcm1fcGdfbGFuZ3VhZ2UgbGFu Z0Zvcm07CisJaW50CQkJaTsKKwlpbnQJCQl0eXBudW07CisJaW50CQkJbnR5cGVzOworCWludAkJ CXBhcmFtY291bnQgPSBsaXN0X2xlbmd0aChub2RlLT5wYXJhbWV0ZXJzKTsKKwlib29sCQlpc251 bGw7CisJYm9vbAkJaXNmdW5jdGlvbjsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLwor CXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJcHJvY0Zvcm0g PSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkvKiBHZXQgdGhlIGNvcnJl c3BvbmRpbmcgcGdfbGFuZ3VhZ2UgdHVwbGUgKi8KKwlsYW5nVHVwID0gU2VhcmNoU3lzQ2FjaGUx KExBTkdPSUQsIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQobGFu Z1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBsYW5ndWFnZSB3 aXRoIE9JRCAldSIsCisJCQkgcHJvY0Zvcm0tPnByb2xhbmcpOworCWxhbmdGb3JtID0gKEZvcm1f cGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCS8qCisJICogRGV0ZXJtaW5lIHVz ZWZ1bCB2YWx1ZXMgZm9yIHByb3NyYyBhbmQgcHJvYmluLiAgV2UgY29wZSB3aXRoIHByb2Jpbgor CSAqIGJlaW5nIGVpdGhlciBOVUxMIG9yICItIiwgYnV0IHByb3NyYyBtdXN0IGhhdmUgYSB2YWxp ZCB2YWx1ZS4KKwkgKi8KKwl0bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9j VHVwLAorCQkJCQkJCSAgIEFudW1fcGdfcHJvY19wcm9zcmMsICZpc251bGwpOworCWlmIChpc251 bGwpCisJCWVsb2coRVJST1IsICJudWxsIHByb3NyYyBpbiBmdW5jdGlvbiB3aXRoIE9JRCAldSIs IG9iamVjdElkKTsKKwlzb3VyY2UgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHRtcGRhdHVtKTsKKwor CS8qIERldGVybWluZSBhIHVzZWZ1bCB2YWx1ZSBmb3IgcHJvYmluICovCisJdG1wZGF0dW0gPSBT eXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3Byb2Nf cHJvYmluLCAmaXNudWxsKTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCXByb2JpbiA9IFRleHREYXR1 bUdldENTdHJpbmcodG1wZGF0dW0pOworCQlpZiAocHJvYmluWzBdID09ICdcMCcgfHwgc3RyY21w KHByb2JpbiwgIi0iKSA9PSAwKQorCQkJcHJvYmluID0gTlVMTDsKKwl9CisKKwlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zIiwgMSwKKwkJCQkJCSAib3JfcmVwbGFj ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6 ICIiKTsKKworCS8qCisJICogVG8gY29uc3RydWN0IHRoZSBhcmd1bWVudHMgYXJyYXksIGV4dHJh Y3QgdGhlIHR5cGUgT0lEcyBmcm9tIHRoZQorCSAqIGZ1bmN0aW9uJ3MgcGdfcHJvYyBlbnRyeS4g IElmIHByb25hcmdzIGVxdWFscyB0aGUgcGFyYW1ldGVyIGxpc3QKKwkgKiBsZW5ndGgsIHRoZXJl IGFyZSBubyBPVVQgcGFyYW1ldGVycyBhbmQgdGh1cyB3ZSBjYW4gZXh0cmFjdCB0aGUgdHlwZQor CSAqIE9JRCBmcm9tIHByb2FyZ3R5cGVzOyBvdGhlcndpc2Ugd2UgbmVlZCB0byBkZWNvZGUgcHJv YWxsYXJndHlwZXMsIHdoaWNoCisJICogaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4KKwkgKi8KKwl0 eXBhcnJheSA9IHBhbGxvYyhwYXJhbWNvdW50ICogc2l6ZW9mKE9pZCkpOworCWlmIChwYXJhbWNv dW50ID4gcHJvY0Zvcm0tPnByb25hcmdzKQorCXsKKwkJRGF0dW0JCWFsbHR5cGVzOworCQlEYXR1 bQkgICAqdmFsdWVzOworCQlib29sCSAgICpudWxsczsKKwkJaW50CQkJbmVsZW1zOworCisJCWFs bHR5cGVzID0gU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJCSAgIEFu dW1fcGdfcHJvY19wcm9hbGxhcmd0eXBlcywgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQll bG9nKEVSUk9SLCAibnVsbCBwcm9hbGxhcmd0eXBlcywgbW9yZSBudW1iZXIgb2YgcGFyYW1ldGVy cyB0aGFuIGFyZ3MgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSBvYmplY3RJZCk7CisJ CWRlY29uc3RydWN0X2FycmF5KERhdHVtR2V0QXJyYXlUeXBlUChhbGx0eXBlcyksCisJCQkJCQkg IE9JRE9JRCwgNCwgJ3QnLCAnaScsCisJCQkJCQkgICZ2YWx1ZXMsICZudWxscywgJm5lbGVtcyk7 CisJCWlmIChuZWxlbXMgIT0gcGFyYW1jb3VudCkKKwkJCWVsb2coRVJST1IsICJtaXNtYXRjaGVk IHByb2FsbGFyZ2F0eXBlcyIpOworCQlmb3IgKGkgPSAwOyBpIDwgcGFyYW1jb3VudDsgaSsrKQor CQkJdHlwYXJyYXlbaV0gPSB2YWx1ZXNbaV07CisJfQorCWVsc2UKKwl7CisJCWZvciAoaSA9IDA7 IGkgPCBwYXJhbWNvdW50OyBpKyspCisJCQl0eXBhcnJheVtpXSA9IHByb2NGb3JtLT5wcm9hcmd0 eXBlcy52YWx1ZXNbaV07CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgYW55IGRlZmF1bHQg ZXhwcmVzc2lvbnMsIHdlIHJlYWQgdGhlIGRlcGFyc2VkIGV4cHJlc3Npb24KKwkgKiBhcyBhIGxp c3Qgc28gdGhhdCB3ZSBjYW4gYXR0YWNoIHRoZW0gdG8gZWFjaCBhcmd1bWVudC4KKwkgKi8KKwl0 bXBkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCSAgIEFu dW1fcGdfcHJvY19wcm9hcmdkZWZhdWx0cywgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJewor CQlkZWZhdWx0cyA9IEZ1bmN0aW9uR2V0RGVmYXVsdHMoRGF0dW1HZXRUZXh0UCh0bXBkYXR1bSkp OworCQljdXJkZWYgPSBsaXN0X2hlYWQoZGVmYXVsdHMpOworCX0KKwllbHNlCisJeworCQlkZWZh dWx0cyA9IE5JTDsKKwkJY3VyZGVmID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIE5vdyBpdGVyYXRl IG92ZXIgZWFjaCBwYXJhbWV0ZXIgaW4gdGhlIHBhcnNlIHRyZWUgdG8gY3JlYXRlIHRoZQorCSAq IHBhcmFtZXRlcnMgYXJyYXkuCisJICovCisJcGFyYW1zID0gTklMOworCXR5cG51bSA9IDA7CisJ Zm9yZWFjaChjZWxsLCBub2RlLT5wYXJhbWV0ZXJzKQorCXsKKwkJRnVuY3Rpb25QYXJhbWV0ZXIg KnBhcmFtID0gKEZ1bmN0aW9uUGFyYW1ldGVyICopIGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAg ICAqcGFyYW1fb2JqOworCQlPYmpUcmVlICAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlICAgICpu YW1lOworCisJCS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUg ZW5kIG9mIGlucHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFy ZSBwYXJ0IG9mIHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhlcmUsIGJ1 dCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNvIHRoYXQg d2UKKwkJICogY2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4KKwkJICov CisJCWlmIChwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0YWJsZV9w YXJhbXMgPSBjZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRh eCBmb3IgcGFyYW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VAorCQkgKiAle2RlZmF1 bHR9cworCQkgKi8KKwkJcGFyYW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7bW9kZX1zIiwgMSwK KwkJCQkJCQkJICAibW9kZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSAgcGFyYW0tPm1vZGUg PT0gRlVOQ19QQVJBTV9PVVQgPyAiT1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVO Q19QQVJBTV9JTk9VVCA/ICJJTk9VVCIgOgorCQkJCQkJCQkgIHBhcmFtLT5tb2RlID09IEZVTkNf UEFSQU1fVkFSSUFESUMgPyAiVkFSSUFESUMiIDoKKwkJCQkJCQkJICAiSU4iKTsKKworCQkvKiBP cHRpb25hbCB3aG9sZXNhbGUgc3VwcHJlc3Npb24gb2YgIm5hbWUiIG9jY3VycyBoZXJlICovCisJ CW5hbWUgPSBuZXdfb2JqdHJlZSgiIik7CisJCWlmIChwYXJhbS0+bmFtZSkKKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KG5hbWUsICIle25hbWV9SSIsICJuYW1lIiwgcGFyYW0tPm5hbWUpOworCQll bHNlCisJCXsKKwkJCWFwcGVuZF9udWxsX29iamVjdChuYW1lLCAiJXtuYW1lfUkiKTsKKwkJCWFw cGVuZF9ub3RfcHJlc2VudChuYW1lKTsKKwkJfQorCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBh cmFtX29iaiwgIiV7bmFtZX1zIiwgbmFtZSk7CisKKwkJZGVmYXVsdHZhbCA9IG5ld19vYmp0cmVl KCJERUZBVUxUIik7CisJCWlmIChQb2ludGVySXNWYWxpZChwYXJhbS0+ZGVmZXhwcikpCisJCXsK KwkJCWNoYXIJICAgKmV4cHI7CisKKwkJCWlmIChjdXJkZWYgPT0gTlVMTCkKKwkJCQllbG9nKEVS Uk9SLCAicHJvYXJnZGVmYXVsdHMgbGlzdCB0b28gc2hvcnQiKTsKKwkJCWV4cHIgPSBsZmlyc3Qo Y3VyZGVmKTsKKworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QoZGVmYXVsdHZhbCwgIiV7dmFsdWV9 cyIsICJ2YWx1ZSIsIGV4cHIpOworCQkJY3VyZGVmID0gbG5leHQoZGVmYXVsdHMsIGN1cmRlZik7 CisJCX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KGRlZmF1bHR2YWwpOworCisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHBhcmFtX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHBhcmFtX29iaiwgIiV7ZGVmYXVsdH1zIiwgZGVmYXVsdHZhbCk7CisKKwkJcGFy YW1zID0gbGFwcGVuZChwYXJhbXMsIG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtX29iaikpOworCX0K KworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCQki aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQlvYmplY3RJZCkpOworCisJ YXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcF9vYmosICIle2FyZ3VtZW50czosIH1zIiwgcGFyYW1zKTsKKwlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0bXBfb2JqLCAiKSIpOworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAh PSBQUk9LSU5EX1BST0NFRFVSRSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsIHRtcF9vYmopOworCWVsc2UK KwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiUFJPQ0VEVVJFICV7c2lnbmF0dXJlfXMiLCB0 bXBfb2JqKTsKKworCS8qCisJICogQSByZXR1cm4gdHlwZSBjYW4gYWRvcHQgb25lIG9mIHR3byBm b3JtczogZWl0aGVyIGEgW1NFVE9GXSBzb21lX3R5cGUsCisJICogb3IgYSBUQUJMRShsaXN0LW9m LXR5cGVzKS4gIFdlIGNhbiB0ZWxsIHRoZSBzZWNvbmQgZm9ybSBiZWNhdXNlIHdlIHNhdworCSAq IGEgdGFibGUgcGFyYW0gYWJvdmUgd2hpbGUgc2Nhbm5pbmcgdGhlIGFyZ3VtZW50IGxpc3QuCisJ ICovCisJaWYgKHRhYmxlX3BhcmFtcyA9PSBOVUxMKQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0 cmVlX1ZBKCIiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxh aW4iKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwgIiV7c2V0b2Z9cyIsICJzZXRv ZiIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9yZXRzZXQgPyAiU0VUT0YiIDogIiIpOworCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtyZXR0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+cHJvcmV0dHlwZSwgLTEpKTsKKwl9CisJZWxzZQorCXsK KwkJTGlzdAkgICAqcmV0dHlwZXMgPSBOSUw7CisJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKwor CQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIlRBQkxFIiwgMSwKKwkJCQkJCQkJInJldHVybl9m b3JtIiwgT2JqVHlwZVN0cmluZywgInRhYmxlIik7CisJCWZvciAoOyB0YWJsZV9wYXJhbXMgIT0g TlVMTDsgdGFibGVfcGFyYW1zID0gbG5leHQobm9kZS0+cGFyYW1ldGVycywgdGFibGVfcGFyYW1z KSkKKwkJeworCQkJRnVuY3Rpb25QYXJhbWV0ZXIgKnBhcmFtID0gbGZpcnN0KHRhYmxlX3BhcmFt cyk7CisKKwkJCXBhcmFtX29iaiA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9SSAle3R5cGV9VCIs IDIsCisJCQkJCQkJCQkgICJuYW1lIiwgT2JqVHlwZVN0cmluZywgcGFyYW0tPm5hbWUsCisJCQkJ CQkJCQkgICJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9y X3R5cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCQkJcmV0dHlwZXMgPSBsYXBwZW5kKHJl dHR5cGVzLCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCWFwcGVuZF9h cnJheV9vYmplY3QodG1wX29iaiwgIigle3JldHR5cGVzOiwgfXMpIiwgcmV0dHlwZXMpOworCX0K KworCWlmIChpc2Z1bmN0aW9uKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJSRVRVUk5T ICV7cmV0dXJuX3R5cGV9cyIsIHRtcF9vYmopOworCisJLyogVFJBTlNGT1JNIEZPUiBUWVBFICov CisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJUUkFOU0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9m dW5jX3RyZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBlcyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBl czsgaSsrKQorCXsKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGT1IgVFlQRSAle3R5cGV9 VCIsIDEsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3R5cGUodHJmdHlwZXNbaV0sIC0xKSk7CisJCXR5cGVzID0gbGFwcGVuZCh0eXBlcywg dG1wX29iaik7CisJfQorCisJaWYgKHR5cGVzKQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcF9v YmosICIle2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wX29iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RyYW5zZm9ybV90 eXBlfXMiLCB0bXBfb2JqKTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkxBTkdVQUdF ICV7bGFuZ3VhZ2V9SSIsICJsYW5ndWFnZSIsCisJCQkJCQkgTmFtZVN0cihsYW5nRm9ybS0+bGFu bmFtZSkpOworCisJaWYgKGlzZnVuY3Rpb24pCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle3dpbmRvd31zIiwgIndpbmRvdyIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9raW5kID09 IFBST0tJTkRfV0lORE9XID8gIldJTkRPVyIgOiAiIik7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHJldCwgIiV7dm9sYXRpbGl0eX1zIiwgInZvbGF0aWxpdHkiLAorCQkJCQkJCSBwcm9jRm9ybS0+ cHJvdm9sYXRpbGUgPT0gUFJPVk9MQVRJTEVfVk9MQVRJTEUgPworCQkJCQkJCSAiVk9MQVRJTEUi IDoKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1NUQUJMRSA/ CisJCQkJCQkJICJTVEFCTEUiIDogIklNTVVUQUJMRSIpOworCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIiV7cGFyYWxsZWxfc2FmZXR5fXMiLAorCQkJCQkJCSAicGFyYWxsZWxfc2FmZXR5 IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1NBRkUgPwor CQkJCQkJCSAiUEFSQUxMRUwgU0FGRSIgOgorCQkJCQkJCSBwcm9jRm9ybS0+cHJvcGFyYWxsZWwg PT0gUFJPUEFSQUxMRUxfUkVTVFJJQ1RFRCA/CisJCQkJCQkJICJQQVJBTExFTCBSRVNUUklDVEVE IiA6ICJQQVJBTExFTCBVTlNBRkUiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIl e2xlYWtwcm9vZn1zIiwgImxlYWtwcm9vZiIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9sZWFrcHJv b2YgPyAiTEVBS1BST09GIiA6ICIiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtz dHJpY3R9cyIsICJzdHJpY3QiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvaXNzdHJpY3QgPworCQkJ CQkJCSAiUkVUVVJOUyBOVUxMIE9OIE5VTEwgSU5QVVQiIDoKKwkJCQkJCQkgIkNBTExFRCBPTiBO VUxMIElOUFVUIik7CisKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtzZWN1cml0eV9k ZWZpbmVyfXMiLAorCQkJCQkJCSAic2VjdXJpdHlfZGVmaW5lciIsCisJCQkJCQkJIHByb2NGb3Jt LT5wcm9zZWNkZWYgPworCQkJCQkJCSAiU0VDVVJJVFkgREVGSU5FUiIgOiAiU0VDVVJJVFkgSU5W T0tFUiIpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29zdH1zIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfVkEoIkNPU1QgJXtjb3N0fW4iLCAxLAorCQkJCQkJCQkJCQkiY29zdCIs IE9ialR5cGVGbG9hdCwKKwkJCQkJCQkJCQkJcHJvY0Zvcm0tPnByb2Nvc3QpKTsKKworCQl0bXBf b2JqID0gbmV3X29ianRyZWUoIlJPV1MiKTsKKwkJaWYgKHByb2NGb3JtLT5wcm9yb3dzID09IDAp CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJCWVsc2UKKwkJCWFwcGVuZF9mbG9h dF9vYmplY3QodG1wX29iaiwgIiV7cm93c31uIiwgcHJvY0Zvcm0tPnByb3Jvd3MpOworCQlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle3Jvd3N9cyIsIHRtcF9vYmopOworCisJCXRtcF9vYmog PSBuZXdfb2JqdHJlZSgiU1VQUE9SVCAle25hbWV9cyIpOworCQlpZiAocHJvY0Zvcm0tPnByb3N1 cHBvcnQpCisJCXsKKwkJCU9pZAkJCWFyZ3R5cGVzW10gPSB7IElOVEVSTkFMT0lEIH07CisKKwkJ CS8qCisJCQkgKiBXZSBzaG91bGQgcXVhbGlmeSB0aGUgc3VwcG9ydCBmdW5jdGlvbidzIG5hbWUg aWYgaXQgd291bGRuJ3QgYmUKKwkJCSAqIHJlc29sdmVkIGJ5IGxvb2t1cCBpbiB0aGUgY3VycmVu dCBzZWFyY2ggcGF0aC4KKwkJCSAqLworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wX29iaiwg IiV7bmFtZX1zIiwgIm5hbWUiLAorCQkJCQkJCQkgZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShwcm9j Rm9ybS0+cHJvc3VwcG9ydCwgMSwKKwkJCQkJCQkJCQkJCQkJTklMLCBhcmd0eXBlcywKKwkJCQkJ CQkJCQkJCQkJZmFsc2UsIE5VTEwsCisJCQkJCQkJCQkJCQkJCUVYUFJfS0lORF9OT05FKSk7CisJ CX0KKwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOworCisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7c3VwcG9ydH1zIiwgdG1wX29iaik7CisJfQorCisJZm9yZWFj aChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmZWwgPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNldCIp ID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0bXQgPSAoVmFyaWFibGVTZXRTdG10 ICopIGRlZmVsLT5hcmc7CisJCQljaGFyCSAgICp2YWx1ZSA9IEV4dHJhY3RTZXRWYXJpYWJsZUFy Z3Moc3N0bXQpOworCisJCQl0bXBfb2JqID0gZGVwYXJzZV9GdW5jdGlvblNldChzc3RtdC0+a2lu ZCwgc3N0bXQtPm5hbWUsIHZhbHVlKTsKKwkJCXNldHMgPSBsYXBwZW5kKHNldHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwg IiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1bmN0aW9uIGRlZmlu aXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsIEFudW1f cGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0tPnByb2xhbmcgPT0g U1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJ CWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxib2R5KCZidWYsIHBy b2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7ZGVmaW5pdGlvbn1zIiwg ImRlZmluaXRpb24iLAorCQkJCQkJCSBidWYuZGF0YSk7CisJfQorCWVsc2UgaWYgKHByb2JpbiA9 PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle2RlZmluaXRpb259TCIs ICJkZWZpbml0aW9uIiwgc291cmNlKTsKKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJBUyAle29iamZpbGV9TCIsICJvYmpmaWxlIiwgcHJvYmluKTsKKwkJYXBwZW5kX3N0 cmluZ19vYmplY3QocmV0LCAiLCAle3N5bWJvbH1MIiwgInN5bWJvbCIsIHNvdXJjZSk7CisJfQor CisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIE9QRVJBVE9SIENM QVNTIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRPUiBD TEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBlfVQgVVNJTkcKKyAq ICV7YW1uYW1lfUkgJXtvcGZhbWlseX1zIEFTICV7aXRlbXM6LCB9cworICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkK K3sKKwlPaWQJCQlvcGNvaWQgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mub2JqZWN0SWQ7CisJ SGVhcFR1cGxlCW9wY1R1cDsKKwlIZWFwVHVwbGUJb3BmVHVwOworCUZvcm1fcGdfb3BmYW1pbHkg b3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJ T2JqVHJlZSAgICAqdG1wX29iajsKKwlMaXN0CSAgICpsaXN0OworCUxpc3RDZWxsICAgKmNlbGw7 CisKKwkvKiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRp bmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsK KworCW9wY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShDTEFPSUQsIE9iamVjdElkR2V0RGF0dW0ob3Bj b2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1Iiwgb3Bjb2lkKTsKKwlv cGNGb3JtID0gKEZvcm1fcGdfb3BjbGFzcykgR0VUU1RSVUNUKG9wY1R1cCk7CisKKwlvcGZUdXAg PSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIG9wY0Zvcm0tPm9wY2ZhbWlseSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBvcGVyYXRvciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvcGNGb3JtLT5vcGNmYW1p bHkpOworCW9wZkZvcm0gPSAoRm9ybV9wZ19vcGZhbWlseSkgR0VUU1RSVUNUKG9wZlR1cCk7CisK KwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIENMQVNTICV7aWRlbnRpdHl9 RCAle2RlZmF1bHR9cyBGT1IgVFlQRSAle3R5cGV9VCBVU0lORyAle2FtbmFtZX1JIiwgNCwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShvcGNGb3JtLT5vcGNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3Bj Rm9ybS0+b3BjbmFtZSkpLAorCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJ CSBvcGNGb3JtLT5vcGNkZWZhdWx0ID8gIkRFRkFVTFQiIDogIiIsCisJCQkJCQkgInR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wY0Zvcm0tPm9wY2lu dHlwZSwgLTEpLAorCQkJCQkJICJhbW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfYW1fbmFtZShv cGNGb3JtLT5vcGNtZXRob2QpKTsKKworCS8qCisJICogQWRkIHRoZSBGQU1JTFkgY2xhdXNlLCBi dXQgaWYgaXQgaGFzIHRoZSBzYW1lIG5hbWUgYW5kIG5hbWVzcGFjZSBhcyB0aGUKKwkgKiBvcGNs YXNzLCB0aGVuIGhhdmUgaXQgZXhwYW5kIHRvIGVtcHR5IGJlY2F1c2UgaXQgd291bGQgY2F1c2Ug YSBmYWlsdXJlCisJICogaWYgdGhlIG9wZmFtaWx5IHdhcyBjcmVhdGVkIGludGVybmFsbHkuCisJ ICovCisJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGQU1JTFkgJXtvcGZhbWlseX1EIiwgMSwK KwkJCQkJCQkib3BmYW1pbHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJIE5hbWVTdHIo b3BmRm9ybS0+b3BmbmFtZSkpKTsKKworCWlmIChzdHJjbXAoTmFtZVN0cihvcGZGb3JtLT5vcGZu YW1lKSwgTmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSkgPT0gMCAmJgorCQlvcGZGb3JtLT5vcGZu YW1lc3BhY2UgPT0gb3BjRm9ybS0+b3BjbmFtZXNwYWNlKQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wX29iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29wZmFtaWx5fXMiLCB0 bXBfb2JqKTsKKworCS8qCisJICogQWRkIHRoZSBpbml0aWFsIGl0ZW0gbGlzdC4gIE5vdGUgd2Ug YWx3YXlzIGFkZCB0aGUgU1RPUkFHRSBjbGF1c2UsIGV2ZW4KKwkgKiB3aGVuIGl0IGlzIGltcGxp Y2l0IGluIHRoZSBvcmlnaW5hbCBjb21tYW5kLgorCSAqLworCXRtcF9vYmogPSBuZXdfb2JqdHJl ZSgiU1RPUkFHRSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmosICIle3R5cGV9VCIs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkSXNWYWxpZChvcGNGb3JtLT5vcGNrZXl0 eXBlKSA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0tPm9wY2lu dHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19vYmplY3Rf b2JqZWN0KHRtcF9vYmopKTsKKworCS8qIEFkZCB0aGUgZGVjbGFyZWQgb3BlcmF0b3JzICovCisJ Zm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLm9wZXJhdG9ycykKKwl7CisJCU9wRmFtaWx5 TWVtYmVyICpvcGVyID0gbGZpcnN0KGNlbGwpOworCisJCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9W QSgiT1BFUkFUT1IgJXtudW19biAle29wZXJhdG9yfU8oJXtsdHlwZX1ULCAle3J0eXBlfVQpIiwg NCwKKwkJCQkJCQkJIm51bSIsIE9ialR5cGVJbnRlZ2VyLCBvcGVyLT5udW1iZXIsCisJCQkJCQkJ CSJvcGVyYXRvciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQlvcGVyLT5vYmplY3Qp LAorCQkJCQkJCQkibHR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9m b3JfdHlwZShvcGVyLT5sZWZ0dHlwZSwgLTEpLAorCQkJCQkJCQkicnR5cGUiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZShvcGVyLT5yaWdodHR5cGUsIC0xKSk7 CisKKwkJLyogQWRkIHRoZSBGT1IgU0VBUkNIIC8gRk9SIE9SREVSIEJZIGNsYXVzZSAqLworCQlp ZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wX29iaiwgIiV7cHVycG9zZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkgIkZPUiBTRUFS Q0giKTsKKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp0bXBfb2JqMjsKKworCQkJdG1wX29i ajIgPSBuZXdfb2JqdHJlZSgiRk9SIE9SREVSIEJZICV7b3BmYW1pbHl9RCIpOworCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wX29iajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJIG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcF9vYmos ICIle3B1cnBvc2V9cyIsIHRtcF9vYmoyKTsKKwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVk IHN1cHBvcnQgZnVuY3Rpb25zICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnBy b2NlZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJ SGVhcFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAq cHJvYXJndHlwZXM7CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJ cHJvY1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2Mt Pm9iamVjdCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJ CQkgcHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1Qo cHJvY1R1cCk7CisKKwkJdG1wX29iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1u ICgle2x0eXBlfVQsICV7cnR5cGV9VCkgJXtmdW5jdGlvbn1EIiwgNCwKKwkJCQkJCQkJIm51bSIs IE9ialR5cGVJbnRlZ2VyLCBwcm9jLT5udW1iZXIsCisJCQkJCQkJCSJsdHlwZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2MtPmxlZnR0eXBlLCAtMSks CisJCQkJCQkJCSJydHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zv cl90eXBlKHByb2MtPnJpZ2h0dHlwZSwgLTEpLAorCQkJCQkJCQkiZnVuY3Rpb24iLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvY0Zvcm0tPnByb25h bWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJIE5hbWVTdHIocHJvY0Zvcm0tPnByb25hbWUpKSk7CisK KwkJcHJvYXJndHlwZXMgPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzOworCQlmb3IgKGkg PSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKmFy ZzsKKworCQkJYXJnID0gbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYXJndHlwZXNbaV0sIC0xKTsK KwkJCWFyZ2xpc3QgPSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOwor CQl9CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwgIigiKTsKKwkJYXBwZW5kX2Fy cmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVu ZF9mb3JtYXRfc3RyaW5nKHRtcF9vYmosICIpIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NU dXApOworCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmop KTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIkFTICV7aXRlbXM6LCB9cyIsIGxp c3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wY1R1 cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZU9wRmFtaWx5 U3RtdCAoQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSkKKyAqCisgKiBHaXZlbiBhIG9wZXJhdG9yIGZh bWlseSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisg KiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJTkcg JXthbW5hbWV9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wRmFtaWx5 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUhlYXBUdXBsZQlvcGZUdXA7CisJ SGVhcFR1cGxlCWFtVHVwOworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX2Ft CWFtRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisKKwlvcGZUdXAgPSBTZWFyY2hTeXNDYWNoZTEo T1BGQU1JTFlPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlvcGZGb3JtID0gKEZv cm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVDVChvcGZUdXApOworCisJYW1UdXAgPSBTZWFyY2hTeXND YWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKGFtVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIGFjY2VzcyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJIG9wZkZvcm0tPm9wZm1l dGhvZCk7CisJYW1Gb3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSAle2lkZW50aXR5fUQgVVNJ TkcgJXthbW5hbWV9SSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJ CQkJCQkJCQkJICBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSwKKwkJCQkJCSAiYW1uYW1lIiwg T2JqVHlwZVN0cmluZywgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSkpOworCisJUmVsZWFzZVN5c0Nh Y2hlKGFtVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUob3BmVHVwKTsKKworCXJldHVybiByZXQ7Cit9 CisKKy8qCisgKiBBZGQgY29tbW9uIGNsYXVzZXMgdG8gQ3JlYXRlUG9saWN5IG9yIEFsdGVyUG9s aWN5IGRlcGFyc2Ugb2JqZWN0cy4KKyAqLworc3RhdGljIHZvaWQKK2FkZF9wb2xpY3lfY2xhdXNl cyhPYmpUcmVlICpyZXQsIE9pZCBwb2xpY3lPaWQsIExpc3QgKnJvbGVzLCBib29sIGRvX3F1YWws CisJCQkJICAgYm9vbCBkb193aXRoX2NoZWNrKQoreworCVJlbGF0aW9uCXBvbFJlbCA9IHRhYmxl X29wZW4oUG9saWN5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlIZWFwVHVwbGUJcG9s VHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChwb2xSZWwsIEFudW1fcGdfcG9saWN5X29p ZCwgcG9saWN5T2lkKTsKKwlGb3JtX3BnX3BvbGljeSBwb2xGb3JtOworCisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHBvbFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBwb2xpY3kgd2l0aCBPSUQgJXUiLCBwb2xpY3lPaWQpOworCisJcG9sRm9ybSA9IChGb3JtX3Bn X3BvbGljeSkgR0VUU1RSVUNUKHBvbFR1cCk7CisKKwkvKiBBZGQgdGhlICJPTiB0YWJsZSIgY2xh dXNlICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT04gJXt0YWJsZX1EIiwKKwkJCQkJ CSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCSBwb2xGb3JtLT5wb2xyZWxpZCkpOworCisJLyoKKwkgKiBBZGQgdGhlICJUTyByb2xl IiBjbGF1c2UsIGlmIGFueS4gIEluIHRoZSBDUkVBVEUgY2FzZSwgaXQgYWx3YXlzCisJICogY29u dGFpbnMgYXQgbGVhc3QgUFVCTElDLCBidXQgaW4gdGhlIEFMVEVSIGNhc2UgaXQgbWlnaHQgYmUg ZW1wdHkuCisJICovCisJaWYgKHJvbGVzKQorCXsKKwkJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwkJ TGlzdENlbGwgICAqY2VsbDsKKworCQlmb3JlYWNoKGNlbGwsIHJvbGVzKQorCQl7CisJCQlSb2xl U3BlYyAgICpzcGVjID0gKFJvbGVTcGVjICopIGxmaXJzdChjZWxsKTsKKworCQkJbGlzdCA9IGxh cHBlbmQobGlzdCwKKwkJCQkJCSAgIG5ld19vYmplY3Rfb2JqZWN0KG5ld19vYmp0cmVlX2Zvcl9y b2xlc3BlYyhzcGVjKSkpOworCQl9CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiVE8gJXty b2xlOiwgfVIiLCBsaXN0KTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQocmV0KTsK KworCS8qIEFkZCB0aGUgVVNJTkcgY2xhdXNlLCBpZiBhbnkgKi8KKwlpZiAoZG9fcXVhbCkKKwl7 CisJCURhdHVtCQlkZXBhcnNlZDsKKwkJRGF0dW0JCXN0b3JlZGV4cHI7CisJCWJvb2wJCWlzbnVs bDsKKworCQlzdG9yZWRleHByID0gaGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lf cG9scXVhbCwKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwpOwor CQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgcG9scXVhbCBleHByZXNzaW9uIGlu IHBvbGljeSAldSIsIHBvbGljeU9pZCk7CisJCWRlcGFyc2VkID0gRGlyZWN0RnVuY3Rpb25DYWxs MihwZ19nZXRfZXhwciwgc3RvcmVkZXhwciwgcG9sRm9ybS0+cG9scmVsaWQpOworCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICJVU0lORyAoJXtleHByZXNzaW9ufXMpIiwgImV4cHJlc3Npb24i LAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwkvKiBBZGQgdGhlIFdJVEggQ0hFQ0sgY2xhdXNl LCBpZiBhbnkgKi8KKwlpZiAoZG9fd2l0aF9jaGVjaykKKwl7CisJCURhdHVtCQlkZXBhcnNlZDsK KwkJRGF0dW0JCXN0b3JlZGV4cHI7CisJCWJvb2wJCWlzbnVsbDsKKworCQlzdG9yZWRleHByID0g aGVhcF9nZXRhdHRyKHBvbFR1cCwgQW51bV9wZ19wb2xpY3lfcG9sd2l0aGNoZWNrLAorCQkJCQkJ CQkgIFJlbGF0aW9uR2V0RGVzY3IocG9sUmVsKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJ CQllbG9nKEVSUk9SLCAibnVsbCBwb2x3aXRoY2hlY2sgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUi LCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4 cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBvbHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmpl Y3QocmV0LCAiV0lUSCBDSEVDSyAoJXtleHByZXNzaW9ufXMpIiwKKwkJCQkJCQkgImV4cHJlc3Np b24iLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRlcGFyc2VkKSk7CisJfQorCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHJldCk7CisKKwlyZWxhdGlvbl9jbG9zZShwb2xSZWwsIEFjY2Vzc1NoYXJl TG9jayk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlUG9saWN5U3RtdCAoQ1JFQVRFIFBP TElDWSkKKyAqCisgKiBHaXZlbiBhIHBvbGljeSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFBPTElDWSAle2lk ZW50aXR5fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVQb2xpY3lTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVBvbGljeVN0bXQgKm5v ZGUgPSAoQ3JlYXRlUG9saWN5U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0Owor CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwK KwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisK KwkvKiBBZGQgdGhlIHJlc3Qgb2YgdGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJl dCwgb2JqZWN0SWQsIG5vZGUtPnJvbGVzLCBub2RlLT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5v ZGUtPndpdGhfY2hlY2sgIT0gTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVw YXJzZSBhIEFsdGVyUG9saWN5U3RtdCAoQUxURVIgUE9MSUNZKQorICoKKyAqIEdpdmVuIGEgcG9s aWN5IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgb2YgdGhlIEFMVEVSIFBPTElDWSBjb21tYW5kLCBy ZXR1cm4KKyAqIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJQb2xpY3lTdG10KE9pZCBvYmplY3RJZCwgTm9k ZSAqcGFyc2V0cmVlKQoreworCUFsdGVyUG9saWN5U3RtdCAqbm9kZSA9IChBbHRlclBvbGljeVN0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJBTFRFUiBQT0xJQ1kgJXtpZGVudGl0eX1JIiwgMSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5wb2xpY3lfbmFtZSk7CisKKwkvKiBBZGQgdGhlIHJlc3Qgb2Yg dGhlIHN0dWZmICovCisJYWRkX3BvbGljeV9jbGF1c2VzKHJldCwgb2JqZWN0SWQsIG5vZGUtPnJv bGVzLCBub2RlLT5xdWFsICE9IE5VTEwsCisJCQkJCSAgIG5vZGUtPndpdGhfY2hlY2sgIT0gTlVM TCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVNjaGVtYVN0 bXQuCisgKgorICogR2l2ZW4gYSBzY2hlbWEgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9u IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBTQ0hFTUEgJXtpZl9u b3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3JpemF0aW9ufXMKKyovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRy ZWUpCit7CisJQ3JlYXRlU2NoZW1hU3RtdCAqbm9kZSA9IChDcmVhdGVTY2hlbWFTdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqYXV0aDsKKworCXJldCA9 IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1J IiwgMiwKKwkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9k ZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJuYW1lIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5zY2hlbWFuYW1lID8gbm9kZS0+c2NoZW1hbmFt ZSA6ICIiKTsKKworCWF1dGggPSBuZXdfb2JqdHJlZSgiQVVUSE9SSVpBVElPTiIpOworCWlmIChu b2RlLT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXph dGlvbl9yb2xlfUkiLAorCQkJCQkJCSAiYXV0aG9yaXphdGlvbl9yb2xlIiwKKwkJCQkJCQkgZ2V0 X3JvbGVzcGVjX25hbWUobm9kZS0+YXV0aHJvbGUpKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVs bF9vYmplY3QoYXV0aCwgIiV7YXV0aG9yaXphdGlvbl9yb2xlfUkiKTsKKwkJYXBwZW5kX25vdF9w cmVzZW50KGF1dGgpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2F1dGhvcml6 YXRpb259cyIsIGF1dGgpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiB0aGUg ZGVmYXVsdCB2YWx1ZSBvZiBhIGRvbWFpbi4KKyAqLworc3RhdGljIGNoYXIgKgorRG9tYWluR2V0 RGVmYXVsdChIZWFwVHVwbGUgZG9tVHVwLCBib29sIG1pc3Npbmdfb2spCit7CisJRGF0dW0JCWRl ZjsKKwlOb2RlCSAgICpkZWZ2YWw7CisJY2hhcgkgICAqZGVmc3RyOworCWJvb2wJCWlzbnVsbDsK KworCWRlZiA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCBkb21UdXAsIEFudW1fcGdfdHlwZV90 eXBkZWZhdWx0YmluLAorCQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCXsKKwkJaWYg KCFtaXNzaW5nX29rKQorCQkJZWxvZyhFUlJPUiwgImRvbWFpbiBcIiVzXCIgZG9lcyBub3QgaGF2 ZSBhIGRlZmF1bHQgdmFsdWUiLAorCQkJCU5hbWVTdHIoKChGb3JtX3BnX3R5cGUpIEdFVFNUUlVD VChkb21UdXApKS0+dHlwbmFtZSkpOworCQllbHNlCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlk ZWZ2YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyhkZWYpKTsKKwlkZWZzdHIg PSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBOVUxMIC8qIGRwY29udGV4dD8gKi8gLAorCQkJ CQkJCQlmYWxzZSwgZmFsc2UpOworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIERlcGFy c2UgYSBBbHRlckRvbWFpblN0bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIERP TUFJTiAle2lkZW50aXR5fUQgRFJPUCBERUZBVUxUCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7 aWRlbnRpdHl9RCBTRVQgREVGQVVMVCAle2RlZmF1bHR9cworICogT1IKKyAqIEFMVEVSIERPTUFJ TiAle2lkZW50aXR5fUQgRFJPUCBOT1QgTlVMTAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lk ZW50aXR5fUQgU0VUIE5PVCBOVUxMCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9 RCBBREQgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnRfbmFtZX1zICV7ZGVmaW5pdGlvbn1zCisgKiBP UgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RT ICV7Y29uc3RyYWludF9uYW1lfXMgJXtjYXNjYWRlfXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4g JXtpZGVudGl0eX1EIFZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50X25hbWV9cworICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChPaWQgb2JqZWN0SWQs IE5vZGUgKnBhcnNldHJlZSwKKwkJCQkJCU9iamVjdEFkZHJlc3MgY29uc3RyYWludEFkZHIpCit7 CisJQWx0ZXJEb21haW5TdG10ICpub2RlID0gKEFsdGVyRG9tYWluU3RtdCAqKSBwYXJzZXRyZWU7 CisJSGVhcFR1cGxlCWRvbVR1cDsKKwlGb3JtX3BnX3R5cGUgZG9tRm9ybTsKKwlPYmpUcmVlICAg ICpyZXQ7CisKKwlkb21UdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgb2JqZWN0SWQpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChkb21UdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgZG9tYWluIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWRvbUZvcm0g PSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKTsKKworCXN3aXRjaCAobm9kZS0+c3Vi dHlwZSkKKwl7CisJCWNhc2UgJ1QnOgorCQkJLyogU0VUIERFRkFVTFQgLyBEUk9QIERFRkFVTFQg Ki8KKwkJCWlmIChub2RlLT5kZWYgPT0gTlVMTCkKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVsdCIsCisJCQkJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9t Rm9ybS0+dHlwbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5 cG5hbWUpKSk7CisJCQllbHNlCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJ TiAle2lkZW50aXR5fUQgU0VUIERFRkFVTFQgJXtkZWZhdWx0fXMiLCAzLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBkZWZhdWx0IiwKKwkJCQkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21G b3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQkgIE5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpLAorCQkJCQkJCQkJICJkZWZhdWx0IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBE b21haW5HZXREZWZhdWx0KGRvbVR1cCwgZmFsc2UpKTsKKwkJCWJyZWFrOworCQljYXNlICdOJzoK KwkJCS8qIERST1AgTk9UIE5VTEwgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBE T01BSU4gJXtpZGVudGl0eX1EIERST1AgTk9UIE5VTEwiLCAyLAorCQkJCQkJCQkJICAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkcm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCSAgImlkZW50aXR5Iiwg T2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoZG9tRm9ybS0+dHlw bmFtZSkpKTsKKwkJCWJyZWFrOworCQljYXNlICdPJzoKKwkJCS8qIFNFVCBOT1QgTlVMTCAqLwor CQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIE5P VCBOVUxMIiwgMiwKKwkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBub3QgbnVs bCIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJ ICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJ CQkvKgorCQkJICogQUREIENPTlNUUkFJTlQuICBPbmx5IENIRUNLIGNvbnN0cmFpbnRzIGFyZSBz dXBwb3J0ZWQgYnkKKwkJCSAqIGRvbWFpbnMKKwkJCSAqLworCQkJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgQUREIENPTlNUUkFJTlQgJXtjb25zdHJhaW50 X25hbWV9cyAle2RlZmluaXRpb259cyIsIDQsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJ ICJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgZ2V0X2NvbnN0cmFp bnRfbmFtZShjb25zdHJhaW50QWRkci5vYmplY3RJZCksCisJCQkJCQkJCSAiZGVmaW5pdGlvbiIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9zdHJpbmcoY29u c3RyYWludEFkZHIub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZB TElEQVRFIENPTlNUUkFJTlQgKi8KKwkJCS8qCisJCQkgKiBQcm9jZXNzIHN1YnR5cGU9c3BlY2lm aWMgb3B0aW9ucy4gVmFsaWRhdGlvbiBhIGNvbnN0cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0cyBu YW1lLgorCQkJICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRl bnRpdHl9RCBWQUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJ CQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3Ry KGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJICJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBl U3RyaW5nLCBub2RlLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlICdYJzoKKwkJCXsKKwkJCQlP YmpUcmVlICAgICp0bXBfb2JqOworCisJCQkJLyogRFJPUCBDT05TVFJBSU5UICovCisJCQkJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgRFJPUCBDT05TVFJB SU5UIElGIEVYSVNUUyAle2NvbnN0cmFpbnRfbmFtZX1zIiwgMywKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCSJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKGRvbUZvcm0tPnR5cG5h bWUpKSwKKwkJCQkJCQkJCQkiY29uc3RyYWludF9uYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ bmFtZSk7CisKKwkJCQl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJ CQkJCQkJCSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIG5vZGUtPmJlaGF2aW9yID09IERST1BfQ0FT Q0FERSk7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Nhc2NhZGV9cyIsIHRt cF9vYmopOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52 YWxpZCBzdWJ0eXBlICVjIiwgbm9kZS0+c3VidHlwZSk7CisJfQorCisJLyogRG9uZSAqLworCVJl bGVhc2VTeXNDYWNoZShkb21UdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYSBDcmVhdGVTdGF0c1N0bXQuCisgKgorICogR2l2ZW4gYSBzdGF0aXN0aWNzIE9JRCBhbmQg dGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVw cmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBDUkVBVEUgU1RBVElTVElDUyAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgT04gJXtl eHByOiwgfXMgRlJPTSAle3N0YXRfdGFibGVfaWRlbnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX0NyZWF0ZVN0YXRpc3RpY3NTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFy c2V0cmVlKQoreworCUNyZWF0ZVN0YXRzU3RtdCAqbm9kZSA9IChDcmVhdGVTdGF0c1N0bXQgKikg cGFyc2V0cmVlOworCUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0Zm9ybTsKKwlPYmpUcmVlICAg ICpyZXQ7CisJSGVhcFR1cGxlCXR1cDsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOwor CUxpc3QJICAgKnN0YXRleHBycyA9IE5JTDsKKworCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFU RVhUT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzdGF0aXN0 aWMgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisKKwlzdGF0Zm9ybSA9IChGb3JtX3BnX3N0YXRp c3RpY19leHQpIEdFVFNUUlVDVCh0dXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBTVEFUSVNUSUNTICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkg ImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlz dHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0YXRmb3JtLT5zdHhuYW1lKSkpOworCisJZGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoU1RBVEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19l eHRfc3R4ZXhwcnMsCisJCQkJCQkJJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlMaXN0 Q2VsbCAgICpsYzsKKwkJUmVsYXRpb24Jc3RhdHNyZWw7CisJCUxpc3QJICAgKmNvbnRleHQ7CisJ CUxpc3QJICAgKmV4cHJzID0gTklMOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlzdGF0 c3JlbCA9IHJlbGF0aW9uX29wZW4oc3RhdGZvcm0tPnN0eHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2sp OworCQljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShzdGF0c3JlbCksCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsaWQoc3RhdHNyZWwpKTsKKwor CQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQlleHBycyA9IChM aXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisKKwkJZm9yZWFjaChsYywgZXhwcnMp CisJCXsKKwkJCU5vZGUJICAgKmV4cHIgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCQkJY2hhcgkg ICAqc3RhdGV4cHI7CisKKwkJCXN0YXRleHByID0gZGVwYXJzZV9leHByZXNzaW9uKGV4cHIsIGNv bnRleHQsIGZhbHNlLCBmYWxzZSk7CisJCQlzdGF0ZXhwcnMgPSBsYXBwZW5kKHN0YXRleHBycywg bmV3X3N0cmluZ19vYmplY3Qoc3RhdGV4cHIpKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmpl Y3QocmV0LCAiT04gJXtleHByOiwgfXMiLCBzdGF0ZXhwcnMpOworCQlwZnJlZShleHByc1N0cmlu Zyk7CisJCXJlbGF0aW9uX2Nsb3NlKHN0YXRzcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKwor CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFNUQVRFWFRPSUQsIHR1cCwgQW51bV9wZ19zdGF0aXN0 aWNfZXh0X3N0eGtleXMsCisJCQkJCQkJJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlp bnQJCQlrZXlubzsKKwkJY2hhcgkgICAqYXR0bmFtZTsKKwkJTGlzdAkgICAqc3RhdGNvbHMgPSBO SUw7CisJCWludDJ2ZWN0b3IgKmluZG9wdGlvbjsKKworCQlpbmRvcHRpb24gPSAoaW50MnZlY3Rv ciAqKSBEYXR1bUdldFBvaW50ZXIoZGF0dW0pOworCisJCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8 IGluZG9wdGlvbi0+ZGltMTsga2V5bm8rKykKKwkJeworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1l KHN0YXRmb3JtLT5zdHhyZWxpZCwgaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dLAorCQkJCQkJCQkg IGZhbHNlKTsKKwkJCXN0YXRjb2xzID0gbGFwcGVuZChzdGF0Y29scywgbmV3X3N0cmluZ19vYmpl Y3QoYXR0bmFtZSkpOworCQl9CisKKwkJaWYgKGluZG9wdGlvbi0+ZGltMSkKKwkJeworCQkJLyog QXBwZW5kIGEgJywnIGlmIHN0YXRleHBycyBpcyBwcmVzZW50IGVsc2UgYXBwZW5kICdPTicgKi8K KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7Y29tbWF9cyIsICJjb21tYSIsCisJCQkJ CQkJCSBzdGF0ZXhwcnMgPyAiLCIgOiAiT04iKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0 LCAiJXtjb2xzOiwgfXMiLCBzdGF0Y29scyk7CisJCX0KKwl9CisKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICJGUk9NICV7c3RhdF90YWJsZV9pZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uoc3RhdGZvcm0tPnN0eHJlbGlkKSwK KwkJCQkJCQkJCQkJCSAgZ2V0X3JlbF9uYW1lKHN0YXRmb3JtLT5zdHhyZWxpZCkpKTsKKworCVJl bGVhc2VTeXNDYWNoZSh0dXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQgKENSRUFURSBTRVJWRVIpCisgKgorICogR2l2ZW4g YSBzZXJ2ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIENSRUFURSBTRVJWRVIgJXtpZGVudGl0eX1JICV7dHlwZX1zICV7dmVy c2lvbn1zIEZPUkVJR04gREFUQSBXUkFQUEVSICV7ZmR3fUkKKyAqICV7Z2VuZXJpY19vcHRpb25z fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGb3JlaWduU2VydmVy U3RtdCAqbm9kZSA9IChDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJDUkVBVEUgU0VSVkVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZVN0cmluZywgbm9kZS0+c2VydmVybmFtZSk7CisKKwkvKiBBZGQgYSBUWVBFIGNsYXVzZSwg aWYgYW55ICovCisJdG1wID0gbmV3X29ianRyZWUoIlRZUEUiKTsKKwlpZiAobm9kZS0+c2VydmVy dHlwZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt0eXBlfUwiLCAidHlwZSIsIG5v ZGUtPnNlcnZlcnR5cGUpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt0eXBlfXMiLCB0bXApOworCisJLyogQWRkIGEgVkVS U0lPTiBjbGF1c2UsIGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJWRVJTSU9OIik7CisJ aWYgKG5vZGUtPnZlcnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lv bn1MIiwgInZlcnNpb24iLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJl c2VudCh0bXApOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dmVyc2lvbn1zIiwgdG1w KTsKKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkZPUkVJR04gREFUQSBXUkFQUEVSICV7 ZmR3fUkiLCAiZmR3IiwKKwkJCQkJCSBub2RlLT5mZHduYW1lKTsKKworCS8qIEFkZCBhbiBPUFRJ T05TIGNsYXVzZSwgaWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5l cmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMs IE5VTEwsIGZhbHNlKSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBB bHRlckZvcmVpZ25TZXJ2ZXJTdG10IChBTFRFUiBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2 ZXIgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpU cmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIEFMVEVSIFNFUlZFUiAle2lkZW50aXR5fUkgJXt2ZXJzaW9ufXMgJXtnZW5lcmlj X29wdGlvbnN9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyRm9yZWlnblNl cnZlclN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJGb3JlaWdu U2VydmVyU3RtdCAqbm9kZSA9IChBbHRlckZvcmVpZ25TZXJ2ZXJTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICp0bXA7CisKKwkvKiBBZGQgYSBWRVJTSU9OIGNsYXVzZSwgaWYgYW55ICov CisJdG1wID0gbmV3X29ianRyZWUoIlZFUlNJT04iKTsKKwlpZiAobm9kZS0+aGFzX3ZlcnNpb24g JiYgbm9kZS0+dmVyc2lvbikKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt2ZXJzaW9u fUwiLCAidmVyc2lvbiIsIG5vZGUtPnZlcnNpb24pOworCWVsc2UgaWYgKG5vZGUtPmhhc192ZXJz aW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJ2ZXJzaW9uIiwgInZlcnNpb24iLCAi TlVMTCIpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisKKwlyZXR1cm4gbmV3 X29ianRyZWVfVkEoIkFMVEVSIFNFUlZFUiAle2lkZW50aXR5fUkgJXt2ZXJzaW9ufXMgJXtnZW5l cmljX29wdGlvbnN9cyIsIDMsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5v ZGUtPnNlcnZlcm5hbWUsCisJCQkJCQkgICJ2ZXJzaW9uIiwgT2JqVHlwZU9iamVjdCwgdG1wLAor CQkJCQkJICAiZ2VuZXJpY19vcHRpb25zIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgZGVwYXJz ZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwsIGZhbHNlKSk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGEgQ3JlYXRlUExhbmdTdG10LgorICoKKyAqIEdpdmVuIGEgbGFuZ3VhZ2UgT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSAle29yX3JlcGxhY2V9cyAle3RydXN0ZWR9cyBMQU5HVUFHRSAle2lkZW50aXR5 fXMgSEFORExFUiAle2hhbmRsZXJ9RAorICogJXtpbmxpbmV9cyAle3ZhbGlkYXRvcn1zCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlTGFuZ1N0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlUExhbmdTdG10ICpub2RlID0gKENyZWF0ZVBMYW5n U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsK KwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCisJbGFu Z1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lELAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1 bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChsYW5nVHVwKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGxhbmd1YWdlIHdpdGggT0lEICV1Iiwgb2Jq ZWN0SWQpOworCWxhbmdGb3JtID0gKEZvcm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVw KTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgJXt0cnVz dGVkfXMgTEFOR1VBR0UgJXtpZGVudGl0eX1zIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9i alR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAor CQkJCQkJICJ0cnVzdGVkIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBsYW5nRm9ybS0+bGFucGx0 cnVzdGVkID8gIlRSVVNURUQiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+cGxuYW1lKTsKKworCWlmIChub2RlLT5wbGhhbmRsZXIgIT0gTklMKQorCXsKKwkJ LyogQWRkIHRoZSBIQU5ETEVSIGNsYXVzZSAqLworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQs ICJIQU5ETEVSICV7aGFuZGxlcn1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFucGxj YWxsZm9pZCkpOworCisJCS8qIEFkZCB0aGUgSU5MSU5FIGNsYXVzZSwgaWYgYW55ICovCisJCXRt cCA9IG5ld19vYmp0cmVlKCJJTkxJTkUiKTsKKwkJaWYgKE9pZElzVmFsaWQobGFuZ0Zvcm0tPmxh bmlubGluZSkpCisJCXsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7aGFuZGxlcl9u YW1lfUQiLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbmlubGluZSkpOworCQl9CisJ CWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCQlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle2lubGluZX1zIiwgdG1wKTsKKworCQkvKiBBZGQgdGhlIFZBTElEQVRPUiBjbGF1 c2UsIGlmIGFueSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgiVkFMSURBVE9SIik7CisJCWlmIChP aWRJc1ZhbGlkKGxhbmdGb3JtLT5sYW52YWxpZGF0b3IpKQorCQl7CisJCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXAsICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJIGxhbmdG b3JtLT5sYW52YWxpZGF0b3IpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7 CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBDcmVhdGVGb3JlaWduVGFibGVTdG10IChDUkVBVEUgRk9SRUlHTiBU QUJMRSkuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqCisgKiBDUkVBVEUgRk9SRUlHTiBUQUJMRSAle2lmX25vdF9leGlzdHN9 cyAle2lkZW50aXR5fUQKKyAqIFsoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMK KyAqICB8IFBBUlRJVElPTiBPRiAle3BhcmVudF9pZGVudGl0eX1EICgle3R5cGVkX3RhYmxlX2Vs ZW1lbnRzOiwgfXMpICV7cGFydGl0aW9uX2JvdW5kfXNdCisgKiBTRVJWRVIgJXtzZXJ2ZXJ9SSAl e2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl Rm9yZWlnblRhYmxlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVh dGVGb3JlaWduVGFibGVTdG10ICpzdG10ID0gKENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKikgcGFy c2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNj ZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJT2JqVHJlZSAgICAqY3JlYXRl U3RtdDsKKwlPYmpUcmVlICAgICp0bXBvYmo7CisJTGlzdAkgICAqdGFibGVlbHRzID0gTklMOwor CisJY3JlYXRlU3RtdCA9IG5ld19vYmp0cmVlKCJDUkVBVEUgRk9SRUlHTiBUQUJMRSIpOworCisJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIiV7aWZfbm90X2V4aXN0c31zIiwgImlm X25vdF9leGlzdHMiLAorCQkJCQkJIHN0bXQtPmJhc2UuaWZfbm90X2V4aXN0cyA/ICJJRiBOT1Qg RVhJU1RTIiA6ICIiKTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxh dGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7 aWRlbnRpdHl9RCIsIHRtcG9iaik7CisKKwlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9y KFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSwKKwkJCQkJCQkJCW9iamVjdElkKTsK KwlpZiAoc3RtdC0+YmFzZS5wYXJ0Ym91bmQpCisJeworCQkvKiBQYXJ0aXRpb25lZCB0YWJsZSAq LworCQlMaXN0CSAgICpwYXJlbnRzOworCQlPYmpFbGVtICAgICplbGVtOworCisJCXBhcmVudHMg PSBkZXBhcnNlX0luaFJlbGF0aW9ucyhvYmplY3RJZCk7CisJCWVsZW0gPSAoT2JqRWxlbSAqKSBs aW5pdGlhbChwYXJlbnRzKTsKKworCQlBc3NlcnQobGlzdF9sZW5ndGgocGFyZW50cykgPT0gMSk7 CisKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcoY3JlYXRlU3RtdCwgIlBBUlRJVElPTiBPRiIpOwor CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNyZWF0ZVN0bXQsICIle3BhcmVudF9pZGVudGl0eX1E IiwKKwkJCQkJCQkJCQkgZWxlbS0+dmFsdWUub2JqZWN0KTsKKworCQl0YWJsZWVsdHMgPSBkZXBh cnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIHN0bXQtPmJhc2UudGFibGVFbHRzLCBkcGNvbnRl eHQsCisJCQkJCQkJCQkJICB0cnVlLCAvKiB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSAgZmFs c2UpOwkvKiBub3QgY29tcG9zaXRlICovCisJCXRhYmxlZWx0cyA9IG9idGFpbkNvbnN0cmFpbnRz KHRhYmxlZWx0cywgb2JqZWN0SWQsIEludmFsaWRPaWQpOworCisJCXRtcG9iaiA9IG5ld19vYmp0 cmVlKCIiKTsKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2Jq LCAiKCV7ZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wb2JqKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAi JXt0eXBlZF90YWJsZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKworCQkvKgorCQkgKiBBZGQgdGhl IHBhcnRpdGlvbl9ib3VuZF9zcGVjLCBpLmUuIHRoZSBGT1IgVkFMVUVTIGNsYXVzZS4KKwkJICog R2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQgaW4gdGhl IHBhcnNldHJlZQorCQkgKiBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0Ym91bmQg ZXhwcmVzc2lvbiB3aGljaCBoYXZlbid0CisJCSAqIGJlZW4gdHJhbnNmb3JtZWQuCisJCSAqLwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAiJXtwYXJ0aXRpb25fYm91bmR9cyIs ICJwYXJ0aXRpb25fYm91bmQiLAorCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKG9i amVjdElkKSk7CisKKwkJLyogTm8gUEFSVElUSU9OIEJZIGNsYXVzZSBmb3IgQ1JFQVRFIEZPUkVJ R04gVEFCTEUgKi8KKwl9CisJZWxzZQorCXsKKwkJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVs ZW1lbnRzKHJlbGF0aW9uLCBzdG10LT5iYXNlLnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJ CQkJCSAgZmFsc2UsCQkvKiBub3QgdHlwZWQgdGFibGUgKi8KKwkJCQkJCQkJCQkgIGZhbHNlKTsJ Lyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5Db25zdHJhaW50cyh0YWJs ZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQlpZiAodGFibGVlbHRzKQorCQkJYXBw ZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0 YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhjcmVhdGVTdG10LCAi KCkiKTsKKworCQkvKgorCQkqIEFkZCBpbmhlcml0YW5jZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fu bm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSogcGFyZW50cyBmcm9tIHRoZSBwYXJzZXIg bm9kZSwgYmVjYXVzZSB0aGF0IG1heSBsYWNrIHRoZSBhY3R1YWwKKwkJKiBxdWFsaWZpZWQgbmFt ZXMgb2YgdGhlIHBhcmVudCByZWxhdGlvbnMuICBSYXRoZXIgdGhhbiB0cnlpbmcgdG8KKwkJKiBy ZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0 IHNlZW1zCisJCSogbW9yZSBhY2N1cmF0ZSBhbmQgY29udmVuaWVudCB0byBncmFiIGl0IGZyb20g cGdfaW5oZXJpdHMuCisJCSovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJJTkhFUklUUyIpOwor CQlpZiAoc3RtdC0+YmFzZS5pbmhSZWxhdGlvbnMgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5X29i amVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2Jq ZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiKCV7 cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJCX0KKwkJ YXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIiV7aW5oZXJpdHN9cyIsIHRtcG9iaik7 CisJfQorCisJYXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgIlNFUlZFUiAle3NlcnZl cn1JIiwgInNlcnZlciIsIHN0bXQtPnNlcnZlcm5hbWUpOworCisJLyogYWRkIGFuIE9QVElPTlMg Y2xhdXNlLCBpZiBhbnkgKi8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAiJXtn ZW5lcmljX29wdGlvbnN9cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKHN0bXQtPm9wdGlv bnMsIE5VTEwsIGZhbHNlKSk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCisvKgorICogRGVwYXJzZSBhIERl ZmluZVN0bXQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQg b2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7 CisJRGVmaW5lU3RtdCAqZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCisJc3dp dGNoIChkZWZpbmUtPmtpbmQpCisJeworCQljYXNlIE9CSkVDVF9BR0dSRUdBVEU6CisJCQlyZXR1 cm4gZGVwYXJzZV9EZWZpbmVTdG10X0FnZ3JlZ2F0ZShvYmplY3RJZCwgZGVmaW5lKTsKKworCQlj YXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxh dGlvbihvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCisJCWNhc2UgT0JKRUNUX09Q RVJBVE9SOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRvcihvYmplY3RJZCwg ZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJCQlyZXR1cm4gZGVw YXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKG9iamVjdElkLCBkZWZpbmUsIHNlY29uZGFyeU9iaik7 CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5l U3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1RfVFNQ QVJTRVI6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2VyKG9iamVjdElkLCBk ZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1cm4gZGVwYXJzZV9E ZWZpbmVTdG10X1RTVGVtcGxhdGUob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2FzZSBPQkpFQ1Rf VFlQRToKKwkJCXJldHVybiBkZXBhcnNlX0RlZmluZVN0bXRfVHlwZShvYmplY3RJZCwgZGVmaW5l KTsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCBraW5k OiAlZCIsIGRlZmluZS0+a2luZCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBG b3JtIGFuIE9iakVsZW0gdG8gYmUgdXNlZCBhcyBhIHNpbmdsZSBhcmd1bWVudCBpbiBhbiBhZ2dy ZWdhdGUgYXJndW1lbnQKKyAqIGxpc3QKKyAqLworc3RhdGljIE9iakVsZW0gKgorZm9ybV9hZ2df YXJndW1lbnQoaW50IGlkeCwgY2hhciAqbW9kZXMsIGNoYXIgKipuYW1lcywgT2lkICp0eXBlcykK K3sKKwlPYmpUcmVlCSAgICphcmc7CisKKwlhcmcgPSBuZXdfb2JqdHJlZSgiIik7CisKKwlhcHBl bmRfc3RyaW5nX29iamVjdChhcmcsICIle21vZGV9cyIsICJtb2RlIiwKKwkJCQkJCSAobW9kZXMg JiYgbW9kZXNbaWR4XSA9PSAndicpID8gIlZBUklBRElDIiA6ICIiKTsKKwlhcHBlbmRfc3RyaW5n X29iamVjdChhcmcsICIle25hbWV9cyIsICJuYW1lIiwgbmFtZXMgPyBuYW1lc1tpZHhdIDogIiIp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFyZywgIiV7dHlwZX1UIiwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZSh0eXBlc1tpZHhdLCAtMSkpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KGFyZyk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIEFHR1JF R0FURSkKKyAqCisgKiBHaXZlbiBhIGFnZ3JlZ2F0ZSBPSUQsIHJldHVybiBhbiBPYmpUcmVlIHJl cHJlc2VudGluZyB0aGUgQ1JFQVRFIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSBBR0dSRUdBVEUgJXtpZGVudGl0eX1EKCV7dHlwZXN9cykgKCV7ZWxlbXM6LCB9cykK KyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X0FnZ3JlZ2F0ZShPaWQg b2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUgICBhZ2dUdXA7CisJ SGVhcFR1cGxlICAgcHJvY1R1cDsKKwlPYmpUcmVlCSAgICpzdG10OworCU9ialRyZWUJICAgKnRt cDsKKwlMaXN0CSAgICpsaXN0OworCURhdHVtCQlpbml0dmFsOworCWJvb2wJCWlzbnVsbDsKKwlG b3JtX3BnX2FnZ3JlZ2F0ZSBhZ2c7CisJRm9ybV9wZ19wcm9jIHByb2M7CisJRm9ybV9wZ19vcGVy YXRvciBvcDsKKwlIZWFwVHVwbGUJdHVwOworCisJYWdnVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFH R0ZOT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKGFnZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhZ2dy ZWdhdGUgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJYWdnID0gKEZvcm1fcGdfYWdncmVnYXRl KSBHRVRTVFJVQ1QoYWdnVHVwKTsKKworCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09J RCwgT2JqZWN0SWRHZXREYXR1bShhZ2ctPmFnZ2Zub2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHByb2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJv Y2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCSBhZ2ctPmFnZ2Zub2lkKTsKKwlwcm9jID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJc3RtdCA9IG5ld19vYmp0cmVlKCJDUkVB VEUgQUdHUkVHQVRFIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChzdG10LCAiJXtpZGVudGl0 eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocHJvYy0+cHJvbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHByb2MtPnByb25hbWUpKSk7CisKKwkvKgorCSAqIEFk ZCB0aGUgYXJndW1lbnQgbGlzdC4gIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyB0byBjb25zaWRlcjoK KwkgKgorCSAqIDEuIG5vIGFyZ3VtZW50cywgaW4gd2hpY2ggY2FzZSB0aGUgc2lnbmF0dXJlIGlz ICgqKS4KKwkgKgorCSAqIDIuIE5vdCBhbiBvcmRlcmVkLXNldCBhZ2dyZWdhdGUuICBJbiB0aGlz IGNhc2UgdGhlcmUncyBvbmUgb3IgbW9yZQorCSAqIGFyZ3VtZW50cy4KKwkgKgorCSAqIDMuIE9y ZGVyZWQtc2V0IGFnZ3JlZ2F0ZXMuIFRoZXNlIGhhdmUgemVybyBvciBtb3JlIGRpcmVjdCBhcmd1 bWVudHMsIGFuZAorCSAqIG9uZSBvciBtb3JlIG9yZGVyZWQgYXJndW1lbnRzLgorCSAqCisJICog V2UgZG9uJ3QgbmVlZCB0byBjb25zaWRlciBkZWZhdWx0IHZhbHVlcyBvciB0YWJsZSBwYXJhbWV0 ZXJzLCBhbmQgdGhlCisJICogb25seSBtb2RlIHRoYXQgd2UgbmVlZCB0byBjb25zaWRlciBpcyBW QVJJQURJQy4KKwkgKi8KKworCWlmIChwcm9jLT5wcm9uYXJncyA9PSAwKQorCQlhcHBlbmRfc3Ry aW5nX29iamVjdChzdG10LCAiKCV7dHlwZXN9cykiLCAidHlwZXMiLCAiKiIpOworCWVsc2UgaWYg KCFBR0dLSU5EX0lTX09SREVSRURfU0VUKGFnZy0+YWdna2luZCkpCisJeworCQlpbnQJCQlpOwor CQlpbnQJCQluYXJnczsKKwkJT2lkCQkgICAqdHlwZXM7CisJCWNoYXIJICAgKm1vZGVzOworCQlj aGFyCSAgKipuYW1lczsKKworCQluYXJncyA9IGdldF9mdW5jX2FyZ19pbmZvKHByb2NUdXAsICZ0 eXBlcywgJm5hbWVzLCAmbW9kZXMpOworCisJCS8qIG9ubHkgZGlyZWN0IGFyZ3VtZW50cyBpbiB0 aGlzIGNhc2UgKi8KKwkJbGlzdCA9IE5JTDsKKwkJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKysp CisJCXsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVz LCBuYW1lcywgdHlwZXMpKTsKKwkJfQorCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIle2RpcmVj dDosIH1zIiwgMSwKKwkJCQkJCQkgImRpcmVjdCIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHN0bXQsICIoJXt0eXBlc31zKSIsIHRtcCk7CisJfQorCWVsc2UK Kwl7CisJCWludAkJCWk7CisJCWludAkJCW5hcmdzOworCQlPaWQJCSAgICp0eXBlczsKKwkJY2hh cgkgICAqbW9kZXM7CisJCWNoYXIJICAqKm5hbWVzOworCisJCW5hcmdzID0gZ2V0X2Z1bmNfYXJn X2luZm8ocHJvY1R1cCwgJnR5cGVzLCAmbmFtZXMsICZtb2Rlcyk7CisKKwkJLyogZGlyZWN0IGFy Z3VtZW50cyAuLi4gKi8KKwkJbGlzdCA9IE5JTDsKKwkJZm9yIChpID0gMDsgaSA8IGFnZy0+YWdn bnVtZGlyZWN0YXJnczsgaSsrKQorCQl7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBmb3JtX2Fn Z19hcmd1bWVudChpLCBtb2RlcywgbmFtZXMsIHR5cGVzKSk7CisJCX0KKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIiV7ZGlyZWN0OiwgfXMiLCAxLAorCQkJCQkJCSAiZGlyZWN0IiwgT2JqVHlwZUFy cmF5LCBsaXN0KTsKKworCQkvKgorCQkgKiAuLi4gYW5kIGFnZ3JlZ2F0ZWQgYXJndW1lbnRzLiAg SWYgdGhlIGxhc3QgZGlyZWN0IGFyZ3VtZW50IGlzCisJCSAqIFZBUklBRElDLCB3ZSBuZWVkIHRv IHJlcGVhdCBpdCBoZXJlIHJhdGhlciB0aGFuIHNlYXJjaGluZyBmb3IgbW9yZQorCQkgKiBhcmd1 bWVudHMuICAoU2VlIGFnZ3JfYXJncyBwcm9kdWN0aW9uIGluIGdyYW0ueSBmb3IgYW4gZXhwbGFu YXRpb24uKQorCQkgKi8KKwkJaWYgKG1vZGVzICYmIG1vZGVzW2FnZy0+YWdnbnVtZGlyZWN0YXJn cyAtIDFdID09ICd2JykKKwkJeworCQkJbGlzdCA9IGxpc3RfbWFrZTEoZm9ybV9hZ2dfYXJndW1l bnQoYWdnLT5hZ2dudW1kaXJlY3RhcmdzIC0gMSwKKwkJCQkJCQkJCQkJCW1vZGVzLCBuYW1lcywg dHlwZXMpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWxpc3QgPSBOSUw7CisJCQlmb3IgKGkgPSBh Z2ctPmFnZ251bWRpcmVjdGFyZ3M7IGkgPCBuYXJnczsgaSsrKQorCQkJeworCQkJCWxpc3QgPSBs YXBwZW5kKGxpc3QsIGZvcm1fYWdnX2FyZ3VtZW50KGksIG1vZGVzLCBuYW1lcywgdHlwZXMpKTsK KwkJCX0KKwkJfQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIk9SREVSIEJZICV7YWdncmVn YXRlZDosIH1zIiwgbGlzdCk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgIigle3R5 cGVzfXMpIiwgdG1wKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJ bGlzdCA9IE5JTDsKKworCS8qIFNGVU5DICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNGVU5D PSV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLCBh Z2ctPmFnZ3RyYW5zZm4pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKworCS8qIFNUWVBFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUWVBFPSV7 dHlwZX1UIiwgMSwKKwkJCQkJCSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3R5cGUoYWdnLT5hZ2d0cmFuc3R5cGUsIC0xKSk7CisJbGlzdCA9IGxhcHBlbmQo bGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTU1BBQ0UgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZSgiU1NQQUNFPSIpOworCWlmIChhZ2ctPmFnZ3RyYW5zc3BhY2UgIT0gMCkKKwkJ YXBwZW5kX2ludF9vYmplY3QodG1wLCIle3NwYWNlfW4iLCBhZ2ctPmFnZ3RyYW5zc3BhY2UpOwor CWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEZJTkFMRlVOQyAqLworCXRtcCA9IG5l d19vYmp0cmVlKCJGSU5BTEZVTkM9Iik7CisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dmaW5hbGZu KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJ CQkJCQkJCQkgYWdnLT5hZ2dmaW5hbGZuKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIEZJTkFMRlVOQ19FWFRSQSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJGSU5BTEZVTkNfRVhU UkE9Iik7CisJaWYgKGFnZy0+YWdnZmluYWxleHRyYSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wLCAiJXt2YWx1ZX1zIiwgInZhbHVlIiwgInRydWUiKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogSU5JVENPTkQgKi8KKwlpbml0dmFsID0gU3lzQ2FjaGVHZXRBdHRyKEFHR0ZO T0lELCBhZ2dUdXAsCisJCQkJCQkJICBBbnVtX3BnX2FnZ3JlZ2F0ZV9hZ2dpbml0dmFsLAorCQkJ CQkJCSAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWUoIklOSVRDT05EPSIpOworCWlmICgh aXNudWxsKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsIiV7aW5pdHZhbH1MIiwgImluaXR2 YWwiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGluaXR2YWwpKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogTVNGVU5DICovCisJdG1wID0gbmV3X29ianRyZWUoIk1TRlVOQz0iKTsKKwlp ZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ210cmFuc2ZuKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo dG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9p ZChQcm9jZWR1cmVSZWxhdGlvbklkLCBhZ2ctPmFnZ210cmFuc2ZuKSk7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIE1TVFlQRSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJNU1RZUEU9 Iik7CisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dtdHJhbnN0eXBlKSkKKwkJYXBwZW5kX29iamVj dF9vYmplY3QodG1wLCAiJXt0eXBlfVQiLCBuZXdfb2JqdHJlZV9mb3JfdHlwZShhZ2ctPmFnZ210 cmFuc3R5cGUsIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1TU1BBQ0Ug Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiTVNTUEFDRT0iKTsKKwlpZiAoYWdnLT5hZ2dtdHJhbnNz cGFjZSAhPSAwKQorCQlhcHBlbmRfaW50X29iamVjdCh0bXAsICIle3NwYWNlfW4iLCBhZ2ctPmFn Z210cmFuc3NwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTUlOVkZVTkMg Ki8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiTUlOVkZVTkM9Iik7CisJaWYgKE9pZElzVmFsaWQoYWdn LT5hZ2dtaW52dHJhbnNmbikpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dHlwZX1U IiwgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJ CQkJCQkJCQkJCQlhZ2ctPmFnZ21pbnZ0cmFuc2ZuKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXAp KTsKKworCS8qIE1GSU5BTEZVTkMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiTUZJTkFMRlVOQz0i KTsKKwlpZiAoT2lkSXNWYWxpZChhZ2ctPmFnZ21maW5hbGZuKSkKKwkJYXBwZW5kX29iamVjdF9v YmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgYWdnLT5hZ2dtZmlu YWxmbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBNRklOQUxGVU5DX0VYVFJB ICovCisJdG1wID0gbmV3X29ianRyZWUoIk1GSU5BTEZVTkNfRVhUUkE9Iik7CisJaWYgKGFnZy0+ YWdnbWZpbmFsZXh0cmEpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmFsdWV9cyIs ICJ2YWx1ZSIsICJ0cnVlIik7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIE1JTklU Q09ORCAqLworCWluaXR2YWwgPSBTeXNDYWNoZUdldEF0dHIoQUdHRk5PSUQsIGFnZ1R1cCwKKwkJ CQkJCQkgIEFudW1fcGdfYWdncmVnYXRlX2FnZ21pbml0dmFsLAorCQkJCQkJCSAgJmlzbnVsbCk7 CisJdG1wID0gbmV3X29ianRyZWUoIk1JTklUQ09ORD0iKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtpbml0dmFsfUwiLCAiaW5pdHZhbCIsIFRleHREYXR1 bUdldENTdHJpbmcoaW5pdHZhbCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBI WVBPVEhFVElDQUwgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiSFlQT1RIRVRJQ0FMPSIpOworCWlm IChhZ2ctPmFnZ2tpbmQgPT0gQUdHS0lORF9IWVBPVEhFVElDQUwpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIiV7dmFsdWV9cyIsICJ2YWx1ZSIsICJ0cnVlIik7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIFNPUlRPUCAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJTT1JUT1A9 Iik7CisJaWYgKE9pZElzVmFsaWQoYWdnLT5hZ2dzb3J0b3ApKQorCXsKKwkJdHVwID0gU2VhcmNo U3lzQ2FjaGUxKE9QRVJPSUQsIE9iamVjdElkR2V0RGF0dW0oYWdnLT5hZ2dzb3J0b3ApKTsKKwkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBhZ2ctPmFnZ3NvcnRvcCk7CisJCW9w ID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVCh0dXApOworCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle29wZXJhdG9yfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUob3AtPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3AtPm9wcm5hbWUp KSk7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisKKwkvKiBEb25lIHdpdGggdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJYXBwZW5kX2Fy cmF5X29iamVjdChzdG10LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXND YWNoZShwcm9jVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUoYWdnVHVwKTsKKworCXJldHVybiBzdG10 OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQgKENSRUFURSBDT0xMQVRJT04pCisg KgorICogR2l2ZW4gYSBjb2xsYXRpb24gT0lELCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRp bmcgdGhlIENSRUFURSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUg Q09MTEFUSU9OICV7aWRlbnRpdHl9RCBGUk9NICV7ZnJvbV9pZGVudGl0eX1EICgle2VsZW1zOiwg fXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9Db2xsYXRpb24o T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJIE9iamVjdEFkZHJlc3Mg ZnJvbUNvbGxpZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsKKwlG b3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlpc251bGw7 CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwljb2xUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlm ICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNvbEZvcm0g PSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShj b2xGb3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZvcm0tPmNv bGxuYW1lKSkpOworCisJaWYgKE9pZElzVmFsaWQoZnJvbUNvbGxpZC5vYmplY3RJZCkpCisJewor CQlPaWQJCQljb2xsaWQgPSBmcm9tQ29sbGlkLm9iamVjdElkOworCQlIZWFwVHVwbGUJdHA7CisJ CUZvcm1fcGdfY29sbGF0aW9uIGZyb21Db2xGb3JtOworCisJCS8qCisJCSAqIENSRUFURSBDT0xM QVRJT04gJXtpZGVudGl0eX1EIEZST00gZXhpc3RpbmdfY29sbGF0aW9uOworCQkgKi8KKwkJdHAg PSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQpKTsKKwkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBjb2xsaWQpOworCisJCWZyb21Db2xG b3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApOworCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIkZST00gJXtmcm9tX2lkZW50aXR5fUQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoZnJvbUNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkJICBOYW1lU3RyKGZyb21Db2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCQlSZWxlYXNlU3lzQ2Fj aGUodHApOworCQlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwkvKiBMT0NBTEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBjb2xUdXAs IEFudW1fcGdfY29sbGF0aW9uX2NvbGxpY3Vsb2NhbGUsICZpc251bGwpOworCWlmICghaXNudWxs KQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxPQ0FMRT0le2xvY2FsZX1MIiwgMiwKKwkJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsb2NhbGUiLAorCQkJCQkJCSAibG9jYWxl IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERhdHVtR2V0Q1N0 cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJfQorCisJLyogTENfQ09MTEFURSAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZpc251bGwp OworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxDX0NPTExBVEU9 JXtjb2xsYXRlfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvbGxh dGUiLAorCQkJCQkJCSAiY29sbGF0ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRm KCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExDX0NUWVBFICovCisJZGF0 dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxhdGlvbl9j b2xsY3R5cGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkxDX0NUWVBFPSV7Y3R5cGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAiY3R5cGUiLAorCQkJCQkJCSAiY3R5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBQUk9WSURF UiAqLworCWlmIChjb2xGb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAorCQkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInByb3Zp ZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImljdSIpKTsKKwkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWVsc2Ug aWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAorCQkJCQkJCSAi Y2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInByb3ZpZGVyIiwg T2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImxpYmMiKSk7CisJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIERFVEVS TUlOSVNUSUMgKi8KKwlpZiAoY29sRm9ybS0+Y29sbGlzZGV0ZXJtaW5pc3RpYykKKwl7CisJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJERVRFUk1JTklTVElDPSV7ZGV0ZXJtaW5pc3RpY31MIiwgMiwK KwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZXRlcm1pbmlzdGljIiwKKwkJCQkJ CQkgImRldGVybWluaXN0aWMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50ZigiJXMi LCAidHJ1ZSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJfQorCisJLyogVkVSU0lPTiAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKENPTExP SUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbHZlcnNpb24sICZpc251bGwpOworCWlm ICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT049JXt2ZXJzaW9u fUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24iLAorCQkJ CQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIlcyIsIFRl eHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiKCV7 ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9QRVJBVE9S KQorICoKKyAqIEdpdmVuIGEgb3BlcmF0b3IgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNy ZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9u IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRPUiAle2lk ZW50aXR5fU8gKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9E ZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQorewor CUhlYXBUdXBsZQlvcHJUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcF9v Ymo7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlGb3JtX3BnX29wZXJhdG9yIG9wckZvcm07CisK KwlvcHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoT1BFUk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmpl Y3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChvcHJUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igb3BlcmF0b3Igd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7 CisJb3ByRm9ybSA9IChGb3JtX3BnX29wZXJhdG9yKSBHRVRTVFJVQ1Qob3ByVHVwKTsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgJXtpZGVudGl0eX1PIiwgMSwKKwkJ CQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShvcHJGb3JtLT5vcHJuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIob3By Rm9ybS0+b3BybmFtZSkpKTsKKworCS8qIFBST0NFRFVSRSAqLworCXRtcF9vYmogPSBuZXdfb2Jq dHJlZV9WQSgiUFJPQ0VEVVJFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJCSJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkicHJvY2VkdXJlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJb3ByRm9ybS0+b3ByY29kZSkpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKworCS8qIExFRlRBUkcgKi8KKwl0 bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkxFRlRBUkc9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImxlZnRhcmciKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJs ZWZ0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7dHlwZX1UIiwKKwkJCQkJ CQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEpKTsKKwllbHNlCisJ CWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBSSUdIVEFSRyAqLworCXRtcF9vYmogPSBu ZXdfb2JqdHJlZV9WQSgiUklHSFRBUkc9IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0 cmluZywgInJpZ2h0YXJnIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3BycmlnaHQpKQor CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBDT01NVVRBVE9SICovCisJdG1wX29iaiA9IG5ld19v Ymp0cmVlX1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJjb21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3ByY29tKSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7b3Blcn1EIiwKKwkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ IG9wckZvcm0tPm9wcmNvbSkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmop OworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwor CS8qIE5FR0FUT1IgKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIk5FR0FUT1I9IiwgMSwK KwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm5lZ2F0b3IiKTsKKwlpZiAoT2lkSXNW YWxpZChvcHJGb3JtLT5vcHJuZWdhdGUpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2Jq LCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0 b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BybmVnYXRlKSk7CisJZWxz ZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wX29iaikpOworCisJLyogUkVTVFJJQ1QgKi8KKwl0bXBfb2Jq ID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJyZXN0cmljdCIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJlc3Qp KQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBfb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcF9vYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cF9vYmopKTsKKworCS8qIEpPSU4gKi8KKwl0bXBfb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49 IiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJqb2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29i aiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcmpvaW4pKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXBf b2JqID0gbmV3X29ianRyZWVfVkEoIkhBU0hFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJoYXNoZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbmhhc2gpCisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXBfb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0 X29iamVjdCh0bXBfb2JqKSk7CisKKwkvKiBNRVJHRVMgKi8KKwl0bXBfb2JqID0gbmV3X29ianRy ZWVfVkEoIk1FUkdFUyIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJtZXJn ZXMiKTsKKwlpZiAoIW9wckZvcm0tPm9wcmNhbm1lcmdlKQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wX29iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wX29i aikpOworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3Qp OworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0eX1EICV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGlj IE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVT dG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXR5cFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJ T2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJY2hhcgkgICAqc3RyOwor CURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVsbDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKwor CXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVj dElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5 cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHlwVHVwKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZv cm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0eXBGb3JtLT50eXBuYW1l KSkpOworCisJLyogU2hlbGwgdHlwZXMuICovCisJaWYgKCF0eXBGb3JtLT50eXBpc2RlZmluZWQp CisJeworCQlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkv KiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogSU5QVVQgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiKElOUFVUPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiaW5wdXQiLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBpbnB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogT1VUUFVUICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIk9VVFBVVD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgIm91dHB1dCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9u SWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cG91dHB1dCkpOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogUkVDRUlWRSAqLworCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVT dHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogU0VORCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogVFlQTU9EX0lOICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1P RF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7 CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBt b2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBUWVBNT0RfT1VUICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50 eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogQU5BTFlaRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpF PSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYg KE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5 emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogSU5URVJOQUxMRU5HVEggKi8K KwlpZiAodHlwRm9ybS0+dHlwbGVuID09IC0xKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5URVJO QUxMRU5HVEg9VkFSSUFCTEUiKTsKKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRF Uk5BTExFTkdUSD0le3R5cGxlbn1uIiwgMSwKKwkJCQkJCQkgInR5cGxlbiIsIE9ialR5cGVJbnRl Z2VyLCB0eXBGb3JtLT50eXBsZW4pOworCisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVNTRURCWVZBTFVFICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIlBBU1NFREJZVkFMVUUiLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAicGFzc2VkYnl2YWx1ZSIpOworCWlmICghdHlwRm9ybS0+dHlwYnl2YWwpCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJLyogWFhYIGl0J3Mgb2RkIHRvIHJlcHJlc2VudCBhbGlnbm1lbnQgd2l0aCBz Y2hlbWEtcXVhbGlmaWVkIHR5cGUgbmFtZXMgKi8KKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cGFsaWdu KQorCXsKKwkJY2FzZSAnZCc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5mbG9hdDgiOworCQkJYnJl YWs7CisJCWNhc2UgJ2knOgorCQkJc3RyID0gInBnX2NhdGFsb2cuaW50NCI7CisJCQlicmVhazsK KwkJY2FzZSAncyc6CisJCQlzdHIgPSAicGdfY2F0YWxvZy5pbnQyIjsKKwkJCWJyZWFrOworCQlj YXNlICdjJzoKKwkJCXN0ciA9ICJwZ19jYXRhbG9nLmJwY2hhciI7CisJCQlicmVhazsKKwkJZGVm YXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFsaWdubWVudCAlYyIsIHR5cEZvcm0tPnR5 cGFsaWduKTsKKwl9CisKKwkvKiBBTElHTk1FTlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxJR05NRU5UPSV7YWxpZ259cyIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcs ICJhbGlnbm1lbnQiLAorCQkJCQkJICJhbGlnbiIsIE9ialR5cGVTdHJpbmcsIHN0cik7CisJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBTVE9SQUdF ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlNUT1JBR0U9JXtzdG9yYWdlfXMiLCAyLAorCQkJ CQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RvcmFnZSIsCisJCQkJCQkgInN0b3JhZ2Ui LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldF90eXBlX3N0b3JhZ2UodHlwRm9ybS0+dHlwc3Rv cmFnZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9JXtjYXRl Z29yeX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5IiwK KwkJCQkJCSAiY2F0ZWdvcnkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIs IHR5cEZvcm0tPnR5cGNhdGVnb3J5KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBQUkVGRVJSRUQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiUFJFRkVSUkVEPSV7cHJlZmVycmVkfXMiLCAxLAorCQkJCQkJICJwcmVmZXJyZWQiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJIHR5cEZvcm0tPnR5cGlzcHJlZmVycmVkID8gIlRSVUUiIDogIkZB TFNFIik7CisJaWYgKCF0eXBGb3JtLT50eXBpc3ByZWZlcnJlZCkKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisKKwkvKiBERUZBVUxUICovCisJZGZsdCA9IFN5c0NhY2hlR2V0QXR0cihUWVBFT0lELCB0eXBU dXAsCisJCQkJCQkgICBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdCwKKwkJCQkJCSAgICZpc251bGwp OworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJkZWZhdWx0Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7ZGVmYXVsdH1zIiwgImRlZmF1bHQiLAorCQkJCQkJCSBUZXh0RGF0 dW1HZXRDU3RyaW5nKGRmbHQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOwor CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRUxF TUVOVCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTEVNRU5UPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJlbGVtZW50Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwZWxlbSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7ZWxlbX1UIiwKKwkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlwRm9ybS0+dHlwZWxlbSwgLTEpKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogREVMSU1JVEVSICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIkRFTElNSVRFUj0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAi ZGVsaW1pdGVyIik7CisJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWxpbX1MIiwgImRl bGltIiwKKwkJCQkJCSBwc3ByaW50ZigiJWMiLCB0eXBGb3JtLT50eXBkZWxpbSkpOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ09MTEFUQUJM RSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRBQkxFPSIsIDEsCisJCQkJCQkgImNs YXVzZSIsIE9ialR5cGVTdHJpbmcsICJjb2xsYXRhYmxlIik7CisJaWYgKCFPaWRJc1ZhbGlkKHR5 cEZvcm0tPnR5cGNvbGxhdGlvbikpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJYXBwZW5kX2FycmF5 X29iamVjdChyZXQsICIle2VsZW1zOiwgfXMpIiwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHlwVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgKCV7ZWxl bXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29u ZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lLAorCQkJCQkJCU9iamVjdEFkZHJl c3MgY29waWVkKQoreworCUhlYXBUdXBsZQl0c2NUdXA7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlP YmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUZvcm1fcGdfdHNfY29uZmlnIHRz Y0Zvcm07CisJRm9ybV9wZ190c19wYXJzZXIgdHNwRm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklM OworCisJdHNjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTQ09ORklHT0lELCBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRzY1R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9u IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNjRm9ybSA9IChGb3JtX3BnX3RzX2Nv bmZpZykgR0VUU1RSVUNUKHRzY1R1cCk7CisKKwl0c3BUdXAgPSBTZWFyY2hTeXNDYWNoZTEoVFNQ QVJTRVJPSUQsIE9iamVjdElkR2V0RGF0dW0odHNjRm9ybS0+Y2ZncGFyc2VyKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJzZXIgJXUiLAorCQkJIHRzY0Zvcm0tPmNmZ3BhcnNlcik7 CisJdHNwRm9ybSA9IChGb3JtX3BnX3RzX3BhcnNlcikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkv KgorCSAqIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UuICBJZiB3ZSBoYXZlIENPUFknZWQgYW4g ZXhpc3RpbmcgY29uZmlnLCBhZGQKKwkgKiBhIENPUFkgY2xhdXNlOyBvdGhlcndpc2UgYWRkIGEg UEFSU0VSIGNsYXVzZS4KKwkgKi8KKwkvKiBDT1BZICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IkNPUFk9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImNvcHkiKTsKKwlp ZiAoT2lkSXNWYWxpZChjb3BpZWQub2JqZWN0SWQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0 bXAsICIle3RzY29uZmlnfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo VFNDb25maWdSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgY29waWVkLm9iamVjdElkKSk7CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIFBBUlNFUiAqLworCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJQQVJTRVI9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInBh cnNlciIpOworCWlmIChjb3BpZWQub2JqZWN0SWQgPT0gSW52YWxpZE9pZCkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiJXtwYXJzZXJ9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZSh0c3BGb3JtLT5wcnNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJICBOYW1lU3RyKHRz cEZvcm0tPnByc25hbWUpKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5l d19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5 fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzY0Zvcm0tPmNmZ25hbWVzcGFjZSwK KwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2NGb3JtLT5jZmduYW1lKSksCisJCQkJCQkgImVsZW1z IiwgT2JqVHlwZUFycmF5LCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c3BUdXApOworCVJl bGVhc2VTeXNDYWNoZSh0c2NUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNl IGEgQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUiBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBz eW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIgJXtpZGVudGl0eX1EICgle2VsZW1z OiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1BhcnNl cihPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSkKK3sKKwlIZWFwVHVwbGUJdHNwVHVw OworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlzdCA9 IE5JTDsKKwlGb3JtX3BnX3RzX3BhcnNlciB0c3BGb3JtOworCisJdHNwVHVwID0gU2VhcmNoU3lz Q2FjaGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRzcFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0ZXh0IHNlYXJjaCBwYXJzZXIgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsK Kwl0c3BGb3JtID0gKEZvcm1fcGdfdHNfcGFyc2VyKSBHRVRTVFJVQ1QodHNwVHVwKTsKKworCS8q IEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkvKiBTVEFSVCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJTVEFSVD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgInN0YXJ0IiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzc3RhcnQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEdFVFRPS0VOICovCisJdG1wID0gbmV3 X29ianRyZWVfVkEoIkdFVFRPS0VOPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAiZ2V0dG9rZW4iLAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnN0b2tlbikpOworCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogRU5EICovCisJdG1wID0g bmV3X29ianRyZWVfVkEoIkVORD0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImVuZCIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2VuZCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogTEVYVFlQRVMgKi8KKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiTEVYVFlQRVM9JXtwcm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJsZXh0eXBlcyIsCisJCQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2xleHR5cGUpKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIEhFQURMSU5FICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIkhFQURMSU5FPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJoZWFkbGluZSIpOworCWlmIChPaWRJc1ZhbGlkKHRzcEZvcm0tPnByc2hl YWRsaW5lKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtwcm9jZWR1cmV9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgdHNwRm9ybS0+cHJzaGVhZGxpbmUpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBQQVJT RVIgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c3BGb3JtLT5w cnNuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNwRm9ybS0+cHJzbmFtZSkpLAor CQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHNwVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhU IFNFQVJDSCBESUNUSU9OQVJZIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlkgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMp CisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnko T2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzZFR1cDsK KwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBO SUw7CisJRGF0dW0JCW9wdGlvbnM7CisJYm9vbAkJaXNudWxsOworCUZvcm1fcGdfdHNfZGljdCB0 c2RGb3JtOworCisJdHNkVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFy eSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19k aWN0KSBHRVRTVFJVQ1QodHNkVHVwKTsKKworCisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xh dXNlICovCisJLyogVEVNUExBVEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEVNUExBVEU9 IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInRlbXBsYXRlIik7CisJYXBw ZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXt0ZW1wbGF0ZX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoVFNUZW1wbGF0ZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRz ZEZvcm0tPmRpY3R0ZW1wbGF0ZSkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCisJLyoKKwkgKiBvcHRpb25zLiAgWFhYIHRoaXMgaXMgYSBwcmV0dHkg dXNlbGVzcyByZXByZXNlbnRhdGlvbiwgYnV0IHdlIGNhbid0IGRvCisJICogYmV0dGVyIHdpdGhv dXQgbW9yZSB0c19jYWNoZS5jIGNvb3BlcmF0aW9uIC4uLgorCSAqLworCW9wdGlvbnMgPSBTeXND YWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAsCisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3Rf ZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNudWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgi Iik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9u c31zIiwgIm9wdGlvbnMiLAorCQkJCQkJCSBUZXh0RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIs CisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWUodHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0 cih0c2RGb3JtLT5kaWN0bmFtZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlz dCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHNkVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSBzdGF0ZW1lbnQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lkZW50 aXR5fUQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZp bmVTdG10X1RTVGVtcGxhdGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJ SGVhcFR1cGxlCXRzdFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOwor CUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ190c190ZW1wbGF0ZSB0c3RGb3JtOworCisJ dHN0VHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTVEVNUExBVEVPSUQsIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHN0VHVwKSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIHRlbXBsYXRlIHdpdGggT0lE ICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHN0Rm9ybSA9IChGb3JtX3BnX3RzX3RlbXBsYXRlKSBH RVRTVFJVQ1QodHN0VHVwKTsKKworCS8qIEFkZCB0aGUgZGVmaW5pdGlvbiBjbGF1c2UgKi8KKwkv KiBJTklUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIklOSVQ9IiwgMSwKKwkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImluaXQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0c3RGb3JtLT50 bXBsaW5pdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAor CQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIHRzdEZvcm0tPnRtcGxpbml0KSk7CisJZWxzZQorCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIExFWElaRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJMRVhJWkU9JXtw cm9jZWR1cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsZXhpemUi LAorCQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3RG b3JtLT50bXBsbGV4aXplKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VBUkNIIFRF TVBMQVRFICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKSIsIDIsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHN0Rm9y bS0+dG1wbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3RGb3JtLT50bXBsbmFt ZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlSZWxlYXNlU3lz Q2FjaGUodHN0VHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBTFRF UiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIHN0YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lkZW50aXR5fUQgQURE IE1BUFBJTkcKKyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9 RAorICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1E IERST1AgTUFQUElORyAle2lmX2V4aXN0c31zCisgKiBGT1IgJXt0b2tlbnR5cGV9SQorICoJT1IK KyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1B UFBJTkcKKyAqIEZPUiAle3Rva2VudHlwZTosIH1JIFdJVEggJXtkaWN0aW9uYXJpZXM6LCB9RAor ICoJT1IKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFM VEVSIE1BUFBJTkcKKyAqIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdfZGlj dGlvbmFyeX1ECisgKglPUgorICogQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiAle2lk ZW50aXR5fUQgQUxURVIgTUFQUElORworICogRk9SICV7dG9rZW50eXBlOiwgfUkgUkVQTEFDRSAl e29sZF9kaWN0aW9uYXJ5fUQgV0lUSCAle25ld19kaWN0aW9uYXJ5fUQKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9BbHRlclRTQ29uZmlndXJhdGlvblN0bXQoQ29sbGVjdGVkQ29tbWFu ZCAqY21kKQoreworCUFsdGVyVFNDb25maWd1cmF0aW9uU3RtdCAqbm9kZSA9IChBbHRlclRTQ29u ZmlndXJhdGlvblN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCU9i alRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7 CisJaW50CQkJaTsKKworCXJldCA9IG5ld19vYmp0cmVlKCJBTFRFUiBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OIik7CisKKwkvKiBEZXRlcm1pbmUgdGhlIGZvcm1hdCBzdHJpbmcgYXBwcm9wcmlh dGUgdG8gZWFjaCBzdWJjb21tYW5kICovCisJc3dpdGNoIChub2RlLT5raW5kKQorCXsKKwkJY2Fz ZSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7aWRlbnRpdHl9RCBBREQgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoY21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJ CQkgY21kLT5kLmF0c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKworCQljYXNl IEFMVEVSX1RTQ09ORklHX0RST1BfTUFQUElORzoKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkciLAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJ CQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmplY3RJZCkpOworCQkJdG1wID0gbmV3X29ianRy ZWUoIklGIEVYSVNUUyIpOworCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBu b2RlLT5taXNzaW5nX29rKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aWZfZXhp c3RzfXMiLCB0bXApOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19BTFRFUl9N QVBQSU5HX0ZPUl9UT0tFTjoKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1Q6CisJ CWNhc2UgQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZPUl9UT0tFTjoKKwkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFkZHJlc3MuY2xhc3NJ ZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJ CWJyZWFrOworCX0KKworCS8qIEFkZCB0aGUgYWZmZWN0ZWQgdG9rZW4gbGlzdCwgZm9yIHN1YmNv bW1hbmRzIHRoYXQgaGF2ZSBvbmUgKi8KKwlpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJ R19BRERfTUFQUElORyB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FMVEVSX01B UFBJTkdfRk9SX1RPS0VOIHx8CisJCW5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFD RV9ESUNUX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX0RST1Bf TUFQUElORykKKwl7CisJCWZvcmVhY2goY2VsbCwgbm9kZS0+dG9rZW50eXBlKQorCQkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGxmaXJzdChjZWxsKSkpKTsK KwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJGT1IgJXt0b2tlbnR5cGU6LCB9SSIsIGxpc3Qp OworCX0KKworCS8qIEFkZCBmdXJ0aGVyIHN1YmNvbW1hbmQtc3BlY2lmaWMgZWxlbWVudHMgKi8K KwlpZiAobm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BRERfTUFQUElORyB8fAorCQlub2Rl LT5raW5kID09IEFMVEVSX1RTQ09ORklHX0FMVEVSX01BUFBJTkdfRk9SX1RPS0VOKQorCXsKKwkJ LyogQUREIE1BUFBJTkcgYW5kIEFMVEVSIE1BUFBJTkcgRk9SIG5lZWQgYSBsaXN0IG9mIGRpY3Rp b25hcmllcyAqLworCQlsaXN0ID0gTklMOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5kLmF0c2Nm Zy5uZGljdHM7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqZGljdF9vYmo7CisKKwkJCWRpY3Rf b2JqID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTRGljdGlvbmFyeVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkgIGNtZC0+ZC5hdHNjZmcuZGljdElkc1tpXSk7CisJCQlsaXN0ID0gbGFw cGVuZChsaXN0LAorCQkJCQkJICAgbmV3X29iamVjdF9vYmplY3QoZGljdF9vYmopKTsKKwkJfQor CQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIldJVEggJXtkaWN0aW9uYXJpZXM6LCB9RCIsIGxp c3QpOworCX0KKwllbHNlIGlmIChub2RlLT5raW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0Vf RElDVCB8fAorCQkJIG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUX0ZP Ul9UT0tFTikKKwl7CisJCS8qIFRoZSBSRVBMQUNFIGZvcm1zIHdhbnQgb2xkIGFuZCBuZXcgZGlj dGlvbmFyaWVzICovCisJCUFzc2VydChjbWQtPmQuYXRzY2ZnLm5kaWN0cyA9PSAyKTsKKwkJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiUkVQTEFDRSAle29sZF9kaWN0aW9uYXJ5fUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGljdElkc1swXSkpOworCQlhcHBlbmRfb2Jq ZWN0X29iamVjdChyZXQsICJXSVRIICV7bmV3X2RpY3Rpb25hcnl9RCIsCisJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUU0RpY3Rpb25hcnlSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkgY21kLT5kLmF0c2NmZy5kaWN0SWRzWzFdKSk7CisJfQorCisJcmV0dXJuIHJldDsKK30K KworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0ZW1l bnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05B UlkgJXtpZGVudGl0eX1EICgle2RlZmluaXRpb246LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJz ZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlEYXR1bQkJ b3B0aW9uczsKKwlMaXN0CSAgICpkZWZpbml0aW9uID0gTklMOworCWJvb2wJCWlzbnVsbDsKKwlI ZWFwVHVwbGUJdHNkVHVwOworCUZvcm1fcGdfdHNfZGljdCB0c2RGb3JtOworCisJdHNkVHVwID0g U2VhcmNoU3lzQ2FjaGUxKFRTRElDVE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c2RUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggZGljdGlvbmFyeSB3aXRoIE9JRCAldSIsCisJCQkg b2JqZWN0SWQpOworCXRzZEZvcm0gPSAoRm9ybV9wZ190c19kaWN0KSBHRVRTVFJVQ1QodHNkVHVw KTsKKworCS8qCisJICogQWRkIHRoZSBkZWZpbml0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHRoZSBw Z190c19kaWN0IGRpY3Rpbml0b3B0aW9uCisJICogY29sdW1uCisJICovCisJb3B0aW9ucyA9IFN5 c0NhY2hlR2V0QXR0cihUU0RJQ1RPSUQsIHRzZFR1cCwKKwkJCQkJCQkgIEFudW1fcGdfdHNfZGlj dF9kaWN0aW5pdG9wdGlvbiwKKwkJCQkJCQkgICZpc251bGwpOworCXRtcCA9IG5ld19vYmp0cmVl KCIiKTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtvcHRp b25zfXMiLCAib3B0aW9ucyIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcob3B0aW9ucykp OworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisKKwlkZWZpbml0aW9uID0gbGFw cGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtk ZWZpbml0aW9uOiwgfXMpIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZSh0c2RGb3JtLT5kaWN0bmFtZXNwYWNlLAor CQkJCQkJCQkJCQkJICBOYW1lU3RyKHRzZEZvcm0tPmRpY3RuYW1lKSksCisJCQkJCQkgImRlZmlu aXRpb24iLCBPYmpUeXBlQXJyYXksIGRlZmluaXRpb24pOworCisJUmVsZWFzZVN5c0NhY2hlKHRz ZFR1cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGRlcGFyc2VfVmlld1N0bXQKKyAqCQlk ZXBhcnNlIGEgVmlld1N0bXQKKyAqCisgKiBHaXZlbiBhIHZpZXcgT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAl e29yX3JlcGxhY2V9cyAle3BlcnNpc3RlbmNlfXMgVklFVyAle2lkZW50aXR5fUQgQVMgJXtxdWVy eX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfVmlld1N0bXQoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJVmlld1N0bXQgICAqbm9kZSA9IChWaWV3U3RtdCAqKSBw YXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCisJcmVs YXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0 ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle29yX3JlcGxhY2V9cyAle3BlcnNpc3RlbmNlfXMg VklFVyAle2lkZW50aXR5fUQgQVMgJXtxdWVyeX1zIiwgNCwKKwkJCQkJCSAib3JfcmVwbGFjZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIi LAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNp c3RlbmNlX3N0cihyZWxhdGlvbi0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSksCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo cmVsYXRpb24tPnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShyZWxhdGlvbikpLAorCQkJCQkJICJxdWVyeSIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkgcGdfZ2V0X3ZpZXdkZWZfc3RyaW5nKG9iamVjdElkKSk7CisKKwlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBDUkVBVEUgTWF0ZXJpYWxpemVkIFZpZXcgc3RhdGVtZW50LCBpdCBpcyBhIHZh cmlhbnQgb2YKKyAqIENyZWF0ZVRhYmxlQXNTdG10CisgKgorICogTm90ZSB0aGF0IENSRUFURSBU QUJMRSBBUyBTRUxFQ1QgSU5UTyBjYW4gYWxzbyBiZSBkZXBhcnNlZCBieQorICogZGVwYXJzZV9D cmVhdGVUYWJsZUFzU3RtdCB0byByZW1vdmUgdGhlIFNFTEVDVCBJTlRPIGNsYXVzZS4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBbTUFURVJJQUxJWkVE IFZJRVcgfCBUQUJMRV0gJXtpZl9ub3RfZXhpc3RzfXMKKyAqIAkJJXtpZGVudGl0eX1EICV7Y29s dW1uc31zIFsle29uX2NvbW1pdH1zXSAle3RhYmxlc3BhY2V9cworICogIAkJQVMgJXtxdWVyeX1z ICV7d2l0aF9ub19kYXRhfXMiCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRl VGFibGVBc1N0bXRfdmFuaWxsYShPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD cmVhdGVUYWJsZUFzU3RtdCAqbm9kZSA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWU7 CisJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFy ZUxvY2spOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJT2JqVHJlZSAg ICAqdG1wMjsKKwljaGFyCSAgICpmbXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2Vs bCAgICpjZWxsOworCisJLyogUmVqZWN0IHVuc3VwcG9ydGVkIGNhc2UgcmlnaHQgYXdheS4gKi8K KwlpZiAoKChRdWVyeSAqKSAobm9kZS0+cXVlcnkpKS0+Y29tbWFuZFR5cGUgPT0gQ01EX1VUSUxJ VFkpCisJCWVsb2coRVJST1IsICJ1bmltcGxlbWVudGVkIGRlcGFyc2Ugb2YgQ1JFQVRFIFRBQkxF IEFTIEVYRUNVVEUiKTsKKworCS8qCisJICogTm90ZSB0aGF0IElOU0VSVCBJTlRPIGlzIGRlcGFy c2VkIGFzIENSRUFURSBUQUJMRSBBUy4gIFRoZXkgYXJlCisJICogZnVuY3Rpb25hbGx5IGVxdWl2 YWxlbnQgc3lub255bXMgc28gdGhlcmUgaXMgbm8gaGFybSBmcm9tIHRoaXMuCisJICovCisJaWYg KG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX01BVFZJRVcpCisJCWZtdCA9ICJDUkVBVEUgJXtwZXJz aXN0ZW5jZX1zIE1BVEVSSUFMSVpFRCBWSUVXICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCI7CisJZWxzZQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25v dF9leGlzdHN9cyAle2lkZW50aXR5fUQiOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAz LAorCQkJCQkJICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0X3BlcnNp c3RlbmNlX3N0cihub2RlLT5pbnRvLT5yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWZf bm90X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+aWZfbm90X2V4aXN0cyA/ ICJJRiBOT1QgRVhJU1RTIiA6ICIiLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwK KwkJCQkJCQkJCQkJCQkgb2JqZWN0SWQpKTsKKworCS8qIENPTFVNTlMgY2xhdXNlICovCisJaWYg KG5vZGUtPmludG8tPmNvbE5hbWVzKQorCXsKKwkJZm9yZWFjaChjZWxsLCBub2RlLT5pbnRvLT5j b2xOYW1lcykKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZh bChsZmlyc3QoY2VsbCkpKSk7CisKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIigle2NvbHVtbnM6 LCB9SSkiLCAxLAorCQkJCQkJCSAiY29sdW1ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisJfQor CWVsc2UKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiIsIDEsCisJCQkJCQkJICJwcmVzZW50Iiwg T2JqVHlwZUJvb2wsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29s dW1uc31zIiwgdG1wKTsKKworCS8qIFVTSU5HIGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVl KCJVU0lORyIpOworCWlmIChub2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgIiV7YWNjZXNzX21ldGhvZH1JIiwgImFjY2Vzc19tZXRob2QiLAorCQkJ CQkJCSBub2RlLT5pbnRvLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxs X29iamVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthY2Nlc3NfbWV0aG9kfXMi LCB0bXApOworCisJLyogV0lUSCBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiV0lUSCIp OworCWxpc3QgPSBOSUw7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPmludG8tPm9wdGlvbnMpCisJ eworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJdG1w MiA9IGRlcGFyc2VfRGVmRWxlbShvcHQsIGZhbHNlKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wMikpOworCX0KKworCWlmIChsaXN0KQorCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHRtcCwgIigle3dpdGg6LCB9cykiLCBsaXN0KTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXApOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX2Ns YXVzZX1zIiwgdG1wKTsKKworCS8qIE9OIENPTU1JVCBjbGF1c2UuICBDUkVBVEUgTUFURVJJQUxJ WkVEIFZJRVcgZG9lc24ndCBoYXZlIG9uZSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVD VF9UQUJMRSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtvbl9jb21taXR9cyIsCisJ CQkJCQkJIGRlcGFyc2VfT25Db21taXRDbGF1c2Uobm9kZS0+aW50by0+b25Db21taXQpKTsKKwor CS8qIFRBQkxFU1BBQ0UgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRyZWUoIlRBQkxFU1BBQ0Ug JXt0YWJsZXNwYWNlfUkiKTsKKwlpZiAobm9kZS0+aW50by0+dGFibGVTcGFjZU5hbWUpCisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3BhY2UiLAor CQkJCQkJCSBub2RlLT5pbnRvLT50YWJsZVNwYWNlTmFtZSk7CisJZWxzZQorCXsKKwkJYXBwZW5k X251bGxfb2JqZWN0KHRtcCwgIiV7dGFibGVzcGFjZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2Vu dCh0bXApOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3RhYmxlc3BhY2V9cyIs IHRtcCk7CisKKwkvKiBBZGQgdGhlIHF1ZXJ5ICovCisJQXNzZXJ0KElzQShub2RlLT5xdWVyeSwg UXVlcnkpKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle3F1ZXJ5fXMiLCAicXVl cnkiLAorCQkJCQkJIHBnX2dldF9xdWVyeWRlZigoUXVlcnkgKikgbm9kZS0+cXVlcnksIGZhbHNl KSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNlICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwK KwkJCQkJCSBub2RlLT5pbnRvLT5za2lwRGF0YSA/IHRydWUgOiBmYWxzZSk7CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7CisKKwlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBEZXBhcnNlIGEgQ3JlYXRlVHJpZ1N0bXQgKENSRUFURSBUUklHR0VSKQorICoKKyAqIEdp dmVuIGEgdHJpZ2dlciBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0 dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAq CisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7Y29uc3RyYWludH1zIFRSSUdHRVIgJXtu YW1lfUkgJXt0aW1lfXMgJXtldmVudHM6IE9SIH1zIE9OCisgKiAle3JlbGF0aW9ufUQgJXtmcm9t X3RhYmxlfXMgJXtjb25zdHJhaW50X2F0dHJzOiB9cyAle3JlZmVyZW5jaW5nOiB9cworICogRk9S IEVBQ0ggJXtmb3JfZWFjaH1zICV7d2hlbn1zIEVYRUNVVEUgUFJPQ0VEVVJFICV7ZnVuY3Rpb259 cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVRyaWdTdG10ICpub2RlID0gKENyZWF0 ZVRyaWdTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ190cmlnZ2VyOworCUhlYXBUdXBs ZQl0cmlnVHVwOworCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7 CisJT2JqVHJlZSAgICAqdG1wX29iajsKKwlpbnQJCQl0Z25hcmdzOworCUxpc3QJICAgKmxpc3Qg PSBOSUw7CisJTGlzdAkgICAqZXZlbnRzOworCWNoYXIJICAgKnRyaWd0aW1pbmc7CisJY2hhcgkg ICAqdGdvbGR0YWJsZTsKKwljaGFyCSAgICp0Z25ld3RhYmxlOworCURhdHVtCQl2YWx1ZTsKKwli b29sCQlpc251bGw7CisKKwlwZ190cmlnZ2VyID0gdGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25J ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlf b2lkKHBnX3RyaWdnZXIsIEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9iamVjdElkKTsKKwl0cmlnRm9y bSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCXRyaWd0aW1pbmcg PSBub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9UWVBFX0JFRk9SRSA/ICJCRUZPUkUiIDoKKwkJbm9k ZS0+dGltaW5nID09IFRSSUdHRVJfVFlQRV9BRlRFUiA/ICJBRlRFUiIgOgorCQlub2RlLT50aW1p bmcgPT0gVFJJR0dFUl9UWVBFX0lOU1RFQUQgPyAiSU5TVEVBRCBPRiIgOgorCQlOVUxMOworCWlm ICghdHJpZ3RpbWluZykKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0cmlnZ2VyIHRpbWlu ZyB0eXBlICVkIiwgbm9kZS0+dGltaW5nKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVB VEUgJXtjb25zdHJhaW50fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyIsIDMsCisJCQkJCQkg ImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09OU1RS QUlOVCIgOiAiIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnRyaWduYW1l LAorCQkJCQkJICJ0aW1lIiwgT2JqVHlwZVN0cmluZywgdHJpZ3RpbWluZyk7CisKKwkvKgorCSAq IERlY29kZSB0aGUgZXZlbnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1 dCBpcyBhIGxpc3Q7IGluCisJICogbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcg d2l0aCB0aGUgZXZlbnQgbmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRo IGEgbGlzdCBvZiBjb2x1bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVu dHMgPSBOSUw7CisJaWYgKG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2 ZW50cyA9IGxhcHBlbmQoZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlm IChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5k KGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRz ICYgVFJJR0dFUl9UWVBFX1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3 X3N0cmluZ19vYmplY3QoIlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VS X1RZUEVfVVBEQVRFKQorCXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQll dmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJ fQorCQllbHNlCisJCXsKKwkJCU9ialRyZWUgICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNl bGw7CisJCQlMaXN0CSAgICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9u bHkgVVBEQVRFIE9GIGNhbiBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkg KiB3ZSBhZGQgYSAia2luZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vp c2gKKwkJCSAqIHBvc3NpYmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVw ZGF0ZSA9IG5ld19vYmp0cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBP YmpUeXBlU3RyaW5nLCAidXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29s dW1ucykKKwkJCXsKKwkJCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7 CisKKwkJCQljb2xzID0gbGFwcGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7 CisJCQl9CisKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwgfUki LCBjb2xzKTsKKworCQkJZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19vYmplY3Rfb2JqZWN0 KHVwZGF0ZSkpOworCQl9CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtldmVudHM6 IE9SIH1zIiwgZXZlbnRzKTsKKworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCSB0cmlnRm9ybS0+dGdyZWxpZCk7CisJ YXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiT04gJXtyZWxhdGlvbn1EIiwgdG1wX29iaik7CisK Kwl0bXBfb2JqID0gbmV3X29ianRyZWUoIkZST00iKTsKKwlpZiAodHJpZ0Zvcm0tPnRnY29uc3Ry cmVsaWQpCisJeworCQlPYmpUcmVlICAgICpyZWw7CisKKwkJcmVsID0gbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHRyaWdGb3JtLT50 Z2NvbnN0cnJlbGlkKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wX29iaiwgIiV7cmVsYXRp b259RCIsIHJlbCk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcF9vYmopOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7ZnJvbV90YWJsZX1zIiwgdG1wX29iaik7CisK KwlpZiAobm9kZS0+aXNjb25zdHJhaW50KQorCXsKKwkJaWYgKCFub2RlLT5kZWZlcnJhYmxlKQor CQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIk5PVCIpKTsKKwkJbGlz dCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUgSU5JVElBTExZ IikpOworCQlpZiAobm9kZS0+aW5pdGRlZmVycmVkKQorCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkVEIikpOworCQllbHNlCisJCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiSU1NRURJQVRFIikpOworCX0KKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIiV7Y29uc3RyYWludF9hdHRyczogfXMiLCBsaXN0KTsKKworCWxpc3Qg PSBOSUw7CisJdmFsdWUgPSBmYXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdnZXJfdGdv bGR0YWJsZSwKKwkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwpOwor CWlmICghaXNudWxsKQorCQl0Z29sZHRhYmxlID0gTmFtZVN0cigqRGF0dW1HZXROYW1lKHZhbHVl KSk7CisJZWxzZQorCQl0Z29sZHRhYmxlID0gTlVMTDsKKwl2YWx1ZSA9IGZhc3RnZXRhdHRyKHRy aWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z25ld3RhYmxlLAorCQkJCQkJUmVsYXRpb25HZXREZXNj cihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJCXRnbmV3dGFibGUgPSBO YW1lU3RyKCpEYXR1bUdldE5hbWUodmFsdWUpKTsKKwllbHNlCisJCXRnbmV3dGFibGUgPSBOVUxM OworCWlmICh0Z29sZHRhYmxlICE9IE5VTEwgfHwgdGduZXd0YWJsZSAhPSBOVUxMKQorCXsKKwkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIlJFRkVSRU5DSU5HIikpOwor CisJCWlmICh0Z29sZHRhYmxlICE9IE5VTEwpCisJCXsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19zdHJpbmdfb2JqZWN0KCJPTEQgVEFCTEUgQVMiKSk7CisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdCh0Z29sZHRhYmxlKSk7CisJCX0KKwkJaWYgKHRnbmV3dGFi bGUgIT0gTlVMTCkKKwkJeworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmpl Y3QoIk5FVyBUQUJMRSBBUyIpKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdf b2JqZWN0KHRnbmV3dGFibGUpKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwg IiV7cmVmZXJlbmNpbmc6IH1zIiwgbGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICJGT1IgRUFDSCAle2Zvcl9lYWNofXMiLCAiZm9yX2VhY2giLAorCQkJCQkJIG5vZGUtPnJvdyA/ ICJST1ciIDogIlNUQVRFTUVOVCIpOworCisJdG1wX29iaiA9IG5ld19vYmp0cmVlKCJXSEVOIik7 CisJaWYgKG5vZGUtPndoZW5DbGF1c2UpCisJeworCQlOb2RlCSAgICp3aGVuQ2xhdXNlOworCisJ CXZhbHVlID0gZmFzdGdldGF0dHIodHJpZ1R1cCwgQW51bV9wZ190cmlnZ2VyX3RncXVhbCwKKwkJ CQkJCQlSZWxhdGlvbkdldERlc2NyKHBnX3RyaWdnZXIpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVs bCkKKwkJCWVsb2coRVJST1IsICJudWxsIHRncXVhbCBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJ CSBOYW1lU3RyKHRyaWdGb3JtLT50Z25hbWUpKTsKKworCQl3aGVuQ2xhdXNlID0gc3RyaW5nVG9O b2RlKFRleHREYXR1bUdldENTdHJpbmcodmFsdWUpKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wX29iaiwgIigle2NsYXVzZX1zKSIsICJjbGF1c2UiLAorCQkJCQkJCSBwZ19nZXRfdHJpZ2dl cl93aGVuY2xhdXNlKHRyaWdGb3JtLAorCQkJCQkJCQkJCQkJCSAgIHdoZW5DbGF1c2UsCisJCQkJ CQkJCQkJCQkJICAgZmFsc2UpKTsKKwl9CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w X29iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aGVufXMiLCB0bXBfb2JqKTsK KworCXRtcF9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtmdW5jbmFtZX1EIiwgMSwKKwkJCQkJCQki ZnVuY25hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQl0cmlnRm9ybS0+dGdmb2lk KSk7CisJbGlzdCA9IE5JTDsKKwl0Z25hcmdzID0gdHJpZ0Zvcm0tPnRnbmFyZ3M7CisJaWYgKHRn bmFyZ3MgPiAwKQorCXsKKwkJY2hhcgkgICAqcDsKKwkJaW50CQkJaTsKKworCQl2YWx1ZSA9IGZh c3RnZXRhdHRyKHRyaWdUdXAsIEFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJUmVsYXRp b25HZXREZXNjcihwZ190cmlnZ2VyKSwgJmlzbnVsbCk7CisJCWlmIChpc251bGwpCisJCQllbG9n KEVSUk9SLCAibnVsbCB0Z2FyZ3MgZm9yIHRyaWdnZXIgXCIlc1wiIiwKKwkJCQkgTmFtZVN0cih0 cmlnRm9ybS0+dGduYW1lKSk7CisJCXAgPSAoY2hhciAqKSBWQVJEQVRBX0FOWShEYXR1bUdldEJ5 dGVhUFAodmFsdWUpKTsKKwkJZm9yIChpID0gMDsgaSA8IHRnbmFyZ3M7IGkrKykKKwkJeworCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocCkpOworCQkJLyogYWR2YW5j ZSBwIHRvIG5leHQgc3RyaW5nIGVtYmVkZGVkIGluIHRnYXJncyAqLworCQkJd2hpbGUgKCpwKQor CQkJCXArKzsKKwkJCXArKzsKKwkJfQorCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcF9v YmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBfb2JqLCAiJXthcmdzOiwgfUwiLCBs aXN0KTsJLyogbWlnaHQgYmUgTklMICovCisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wX29iaiwg IikiKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIkVYRUNVVEUgRlVOQ1RJT04gJXtm dW5jdGlvbn1zIiwgdG1wX29iaik7CisKKwl0YWJsZV9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NT aGFyZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVV c2VyTWFwcGluZ1N0bXQgKENSRUFURSBVU0VSIE1BUFBJTkcpCisgKgorICogR2l2ZW4gYSBVc2Vy IE1hcHBpbmcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsCisgKiByZXR1 cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBVU0VSIE1BUFBJTkcgY29tbWFu ZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFVTRVIgTUFQUElORyBGT1IgJXty b2xlfVIgU0VSVkVSICV7c2VydmVyfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9D cmVhdGVVc2VyTWFwcGluZ1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ Q3JlYXRlVXNlck1hcHBpbmdTdG10ICpub2RlID0gKENyZWF0ZVVzZXJNYXBwaW5nU3RtdCAqKSBw YXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJ dHA7CisJRm9ybV9wZ191c2VyX21hcHBpbmcgZm9ybTsKKwlGb3JlaWduU2VydmVyICpzZXJ2ZXI7 CisKKwlyZWwgPSB0YWJsZV9vcGVuKFVzZXJNYXBwaW5nUmVsYXRpb25JZCwgUm93RXhjbHVzaXZl TG9jayk7CisKKwkvKgorCSAqIExvb2t1cCBvYmplY3QgaW4gdGhlIGNhdGFsb2csIHNvIHdlIGRv bid0IGhhdmUgdG8gZGVhbCB3aXRoCisJICogY3VycmVudF91c2VyIGFuZCBzdWNoLgorCSAqLwor CXRwID0gU2VhcmNoU3lzQ2FjaGUxKFVTRVJNQVBQSU5HT0lELCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIHVzZXIgbWFwcGluZyB3aXRoIE9JRCAldSIsCisJCQkgb2Jq ZWN0SWQpOworCisJZm9ybSA9IChGb3JtX3BnX3VzZXJfbWFwcGluZykgR0VUU1RSVUNUKHRwKTsK KworCXNlcnZlciA9IEdldEZvcmVpZ25TZXJ2ZXIoZm9ybS0+dW1zZXJ2ZXIpOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAl e3NlcnZlcn1JICV7Z2VuZXJpY19vcHRpb25zfXMiLCAzLAorCQkJCQkJICJyb2xlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChmb3JtLT51bXVzZXIpLAor CQkJCQkJICJzZXJ2ZXIiLCBPYmpUeXBlU3RyaW5nLCBzZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJ CQkgImdlbmVyaWNfb3B0aW9ucyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgZGVwYXJzZV9GZHdP cHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwsIGZhbHNlKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdpdmVuIGEgVXNl ciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAl e3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJVc2VyTWFwcGlu Z1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJVc2VyTWFwcGlu Z1N0bXQgKm5vZGUgPSAoQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNl cl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVf b3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkg KiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwg d2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0Nh Y2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZvcm0g PSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRG b3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JICV7Z2VuZXJp Y19vcHRpb25zfXMiLCAzLAorCQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJzZXJ2ZXIiLCBP YmpUeXBlU3RyaW5nLCBzZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVyaWNfb3B0aW9u cyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlv bnMsIE5VTEwsIGZhbHNlKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXRhYmxlX2Nsb3Nl KHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFy c2UgYW4gQWx0ZXJTdGF0c1N0bXQgKEFMVEVSIFNUQVRJU1RJQ1MpCisgKgorICogR2l2ZW4gYSBh bHRlciBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCBy ZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBTVEFUSVNUSUNTICV7aWRlbnRpdHl9RCBTRVQg U1RBVElTVElDUyAle3RhcmdldH1uCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0 ZXJTdGF0c1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJTdGF0 c1N0bXQgKm5vZGUgPSAoQWx0ZXJTdGF0c1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAg KnJldDsKKwlIZWFwVHVwbGUJdHA7CisJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXRmb3JtOwor CisJaWYgKCFub2RlLT5zdHhzdGF0dGFyZ2V0KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIExvb2t1 cCBvYmplY3QgaW4gdGhlIGNhdGFsb2cgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFURVhU T0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KHRwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHN0YXRpc3RpYyB3 aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKworCXN0YXRmb3JtID0gKEZvcm1fcGdfc3RhdGlzdGlj X2V4dCkgR0VUU1RSVUNUKHRwKTsKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU1RBVElT VElDUyAle2lkZW50aXR5fUQgU0VUIFNUQVRJU1RJQ1MgJXt0YXJnZXR9biIsIDIsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWUoc3RhdGZvcm0tPnN0eG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihzdGF0Zm9y bS0+c3R4bmFtZSkpLAorCQkJCQkJICJ0YXJnZXQiLCBPYmpUeXBlSW50ZWdlciwgbm9kZS0+c3R4 c3RhdHRhcmdldCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUodHApOworCXJldHVybiByZXQ7Cit9CisK Ky8qCisgKiBEZXBhcnNlIGEgUmVmcmVzaE1hdFZpZXdTdG10IChSRUZSRVNIIE1BVEVSSUFMSVpF RCBWSUVXKQorICoKKyAqIEdpdmVuIGEgbWF0ZXJpYWxpemVkIHZpZXcgT0lEIGFuZCB0aGUgcGFy c2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNlbnRp bmcgdGhlIHJlZnJlc2ggY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVGUkVT SCBNQVRFUklBTElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1zICV7aWRlbnRpdHl9RCAle3dpdGhf bm9fZGF0YX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfUmVmcmVzaE1hdFZpZXdT dG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJlZnJlc2hNYXRWaWV3U3Rt dCAqbm9kZSA9IChSZWZyZXNoTWF0Vmlld1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAg KnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiUkVGUkVT SCBNQVRFUklBTElaRUQgVklFVyAle2NvbmN1cnJlbnRseX1zICV7aWRlbnRpdHl9RCIsIDIsCisJ CQkJCQkgImNvbmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+Y29uY3Vy cmVudCA/ICJDT05DVVJSRU5UTFkiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJZCkpOworCisJLyogQWRkIGEgV0lUSCBOTyBEQVRB IGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJ CQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+c2tpcERhdGEgPyB0cnVl IDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9ub19kYXRhfXMi LCB0bXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBSZW5hbWVTdG10 LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiAlcyAle2lmX2V4aXN0c31zICV7aWRl bnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBQT0xJQ1kgJXtp Zl9leGlzdHN9cyAle3BvbGljeW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3 bmFtZX1JCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBSRU5BTUUgQ09OU1RS QUlOVCAle29sZG5hbWV9SSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFRBQkxFICV7 aWRlbnRpdHl9RCBSRU5BTUUgQ09OU1RSQUlOVCAle29sZG5hbWV9SSBUTyAle25ld25hbWV9SQor ICogT1IKKyAqIEFMVEVSIG9ianR5cGUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRSSUJVVEUgJXtj b2xuYW1lfUkgVE8gJXtuZXduYW1lfUkgJXtjYXNjYWRlfXMKKyAqIE9SCisgKiBBTFRFUiBvYmp0 eXBlICV7aWZfZXhpc3RzfXMgJSV7aWRlbnRpdHl9RCBSRU5BTUUgQ09MVU1OICV7Y29sbmFtZX1J IFRPICV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgJXMgJSV7aWRlbnRpdHl9cyBSRU5BTUUg VE8gJSV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIgJXMgJSV7aWRlbnRpdHl9RCBVU0lORyAl JXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJSV7bmV3bmFtZX1JCisgKiBPUgorICogQUxURVIg U0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRF UiBSVUxFICV7cnVsZW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1J CisgKiBPUgorICogQUxURVIgVFJJR0dFUiAle3RyaWdnZXJuYW1lfUkgT04gJXtpZGVudGl0eX1E IFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5fUQg UkVOQU1FIFRPICUle25ld25hbWV9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1Jl bmFtZVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVu YW1lU3RtdCAqbm9kZSA9IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJUmVsYXRpb24JcmVsYXRpb247CisJT2lkCQkJc2NoZW1hSWQ7CisKKwkvKgorCSAqIElu IGFuIEFMVEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBkb24ndCBoYXZlIHRoZSBvcmlnaW5hbCBu YW1lIG9mIHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0gY2F0YWxvZ3M6IHNpbmNlIHdlIGluc3Bl Y3QgdGhlbSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkgKiBleGVjdXRlZCwgdGhlIG9sZCBuYW1l IGlzIGFscmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2UgZXh0cmFjdCBpdCBmcm9tCisJICogdGhl IHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJhY3QgdGhlIHNjaGVtYSBuYW1lIGZyb20g dGhlIGNhdGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJlIHByZXNlbnQgaW4gdGhlIHBhcnNlIG5v ZGUpOyBpdCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAqIGNoYW5nZWQgYW55d2F5LgorCSAqLwor CXN3aXRjaCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgorCQlj YXNlIE9CSkVDVF9JTkRFWDoKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCWNhc2UgT0JKRUNU X1ZJRVc6CisJCWNhc2UgT0JKRUNUX01BVFZJRVc6CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fVEFC TEU6CisJCQlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5vYmplY3RJZCwgQWNjZXNz U2hhcmVMb2NrKTsKKwkJCXNjaGVtYUlkID0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsYXRpb24p OworCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWZfZXhpc3Rz fXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCSAib2Jq dHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5y ZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCSAiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiLAorCQkJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShzY2hlbWFJZCwKKwkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSks CisJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBub2RlLT5uZXdu YW1lKTsKKwkJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJ YnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfUE9MSUNZOgorCQkJeworCQkJCUhlYXBUdXBsZQlwb2xU dXA7CisJCQkJRm9ybV9wZ19wb2xpY3kgcG9sRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19wb2xpY3k7 CisJCQkJU2NhbktleURhdGEga2V5OworCQkJCVN5c1NjYW5EZXNjIHNjYW47CisKKwkJCQlwZ19w b2xpY3kgPSByZWxhdGlvbl9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisJCQkJU2NhbktleUluaXQoJmtleSwgQW51bV9wZ19wb2xpY3lfb2lkLAorCQkJCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJCQlPYmplY3RJZEdldERhdHVtKGFkZHJl c3Mub2JqZWN0SWQpKTsKKwkJCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3BvbGljeSwg UG9saWN5T2lkSW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkJCQkgIE5VTEwsIDEsICZrZXkpOworCQkJ CXBvbFR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHBvbFR1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBw b2xpY3kgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXBvbEZv cm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJCQkJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIFBPTElDWSAle2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1JIE9O ICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkJICJpZl9l eGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYg RVhJU1RTIiA6ICIiLAorCQkJCQkJCQkJICJwb2xpY3luYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCSBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRp b25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpLAorCQkJCQkJCQkJICJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBub2RlLT5uZXduYW1lKTsKKwkJCQlz eXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3BvbGljeSwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0RPTUNPTlNU UkFJTlQ6CisJCQl7CisJCQkJSGVhcFR1cGxlCWRvbXR1cDsKKwkJCQlIZWFwVHVwbGUJY29uc3R0 dXA7CisJCQkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0Zm9ybTsKKwkJCQlGb3JtX3BnX3R5cGUg ZG9tZm9ybTsKKworCQkJCS8qIEdldCBkb21haW4gaWQgZnJvbSB0aGUgY29uc3RyYWludCAqLwor CQkJCWNvbnN0dHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwKKwkJCQkJCQkJCQkgICBP YmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoY29uc3R0dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgY29uc3RyYWludCB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJ CQkJY29uc3Rmb3JtID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvbnN0dHVwKTsK KworCQkJCWRvbXR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELAorCQkJCQkJCQkJCSBPYmpl Y3RJZEdldERhdHVtKGNvbnN0Zm9ybS0+Y29udHlwaWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoZG9tdHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IGRvbWFpbiB3aXRoIE9JRCAldSIsCisJCQkJCQkgY29uc3Rmb3JtLT5jb250eXBpZCk7CisJCQkJ UmVsZWFzZVN5c0NhY2hlKGNvbnN0dHVwKTsKKworCQkJCWRvbWZvcm0gPSAoRm9ybV9wZ190eXBl KSBHRVRTVFJVQ1QoZG9tdHVwKTsKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9N QUlOICV7aWRlbnRpdHl9RCBSRU5BTUUgQ09OU1RSQUlOVCAle29sZG5hbWV9SSBUTyAle25ld25h bWV9SSIsIDMsCisJCQkJCQkiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKGRvbWZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSBO YW1lU3RyKGRvbWZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCSJvbGRuYW1lIiwgT2JqVHlwZVN0cmlu Zywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCSJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+ bmV3bmFtZSk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKGRvbXR1cCk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9UQUJDT05TVFJBSU5UOgorCQkJeworCQkJCUhlYXBUdXBsZQljb25z dHJ0dXA7CisJCQkJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0Zm9ybTsKKworCQkJCWNvbnN0cnR1 cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsCisJCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0 dW0oYWRkcmVzcy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb25zdHJ0 dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgY29uc3RyYWlu dCB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJY29uc3Rmb3Jt ID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvbnN0cnR1cCk7CisKKwkJCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVEFCTEUgJXtpZGVudGl0eX1EIFJFTkFNRSBDT05TVFJB SU5UICV7b2xkbmFtZX1JIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVs YXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCWNvbnN0Zm9ybS0+Y29ucmVsaWQpLAor CQkJCQkJCQkJIm9sZG5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJ CQkJIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlSZWxlYXNl U3lzQ2FjaGUoY29uc3RydHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FU VFJJQlVURToKKwkJY2FzZSBPQkpFQ1RfQ09MVU1OOgorCQkJcmVsYXRpb24gPSByZWxhdGlvbl9v cGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hlbWFJZCA9IFJl bGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKworCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUg PT0gT0JKRUNUX0FUVFJJQlVURSkKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQ RSAle2lkZW50aXR5fUQgUkVOQU1FIEFUVFJJQlVURSAle2NvbG5hbWV9SSIsIDIsCisJCQkJCQkJ CQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJCQkJCQkJCQkJCQkgIG5vZGUtPnJlbGF0aW9uLT5yZWxu YW1lKSwKKwkJCQkJCQkJCSAiY29sbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUp OworCQkJZWxzZQorCQkJeworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5 cGV9cyIsIDEsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ IHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbGF0aW9uVHlwZSwgZmFsc2UpKTsKKworCQkJCS8q IENvbXBvc2l0ZSB0eXBlcyBkbyBub3Qgc3VwcG9ydCBJRiBFWElTVFMgKi8KKwkJCQlpZiAobm9k ZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQ09MVU1OKQorCQkJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICIle2lmX2V4aXN0c31zIiwKKwkJCQkJCQkJCQkgImlmX2V4aXN0cyIsCisJCQkJCQkJ CQkJIG5vZGUtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIiA6ICIiKTsKKworCQkJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7aWRlbnRpdHl9RCIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJCQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+ cmVsbmFtZSkpOworCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlJFTkFNRSBDT0xVTU4g JXtjb2xuYW1lfUkiLAorCQkJCQkJCQkJICJjb2xuYW1lIiwgbm9kZS0+c3VibmFtZSk7CisJCQl9 CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIlRPICV7bmV3bmFtZX1JIiwgIm5ld25h bWUiLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBl ID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtj YXNjYWRlfXMiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJ CQkJCQkJCQkicHJlc2VudCIsIE9ialR5cGVCb29sLAorCQkJCQkJCQkJCQkJCW5vZGUtPmJlaGF2 aW9yID09IERST1BfQ0FTQ0FERSkpOworCisJCQlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToKKwkJ Y2FzZSBPQkpFQ1RfRlVOQ1RJT046CisJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CisJCQl7CisJCQkJ Y2hhcgkgICAqaWRlbnQ7CisJCQkJSGVhcFR1cGxlCXByb2N0dXA7CisJCQkJRm9ybV9wZ19wcm9j IHByb2Nmb3JtOworCQkJCUxpc3QJICAgKmlkZW50aXR5OworCisJCQkJQXNzZXJ0KElzQShub2Rl LT5vYmplY3QsIE9iamVjdFdpdGhBcmdzKSk7CisJCQkJaWRlbnRpdHkgPSAoKE9iamVjdFdpdGhB cmdzICopIG5vZGUtPm9iamVjdCktPm9iam5hbWU7CisKKwkJCQlwcm9jdHVwID0gU2VhcmNoU3lz Q2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2Jq ZWN0SWQpKTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY3R1cCkpCisJCQkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1cmUgd2l0aCBPSUQgJXUiLAor CQkJCQkJIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXByb2Nmb3JtID0gKEZvcm1fcGdfcHJvYykg R0VUU1RSVUNUKHByb2N0dXApOworCisJCQkJLyogWFhYIGRvZXMgdGhpcyB3b3JrIGZvciBvcmRl cmVkLXNldCBhZ2dyZWdhdGVzPyAqLworCQkJCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLAorCQkJ CQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2Nm b3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCQkJc3RyVmFsKGxsYXN0KGlkZW50aXR5 KSkpLAorCQkJCQkJCQkgZm9ybWF0X3Byb2NlZHVyZV9hcmdzKGFkZHJlc3Mub2JqZWN0SWQsIHRy dWUpKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lk ZW50aXR5fXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2JqdHlwZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1l VHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGlkZW50 LAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisK KwkJCQlSZWxlYXNlU3lzQ2FjaGUocHJvY3R1cCk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNl IE9CSkVDVF9PUENMQVNTOgorCQkJeworCQkJCUhlYXBUdXBsZQlvcGNUdXA7CisJCQkJRm9ybV9w Z19vcGNsYXNzIG9wY0Zvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkgICAq c2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGNuYW1lOworCisJCQkJb3BjVHVwID0gU2VhcmNo U3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJ CQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wY1R1cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBvcGNsYXNzIHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRyZXNz Lm9iamVjdElkKTsKKworCQkJCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qo b3BjVHVwKTsKKworCQkJCW9sZG5hbWVzID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+ b2JqZWN0LCAxKTsKKworCQkJCS8qIERlY29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlE ZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUob2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BjbmFtZSk7 CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0 eX1EIFVTSU5HICV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJ CQkJCQkJCSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29i anR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9i alR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0t Pm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJCSAgb3BjbmFtZSksCisJCQkJCQkJCQkgImlu ZGV4X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X2FtX25hbWUob3BjRm9y bS0+b3BjbWV0aG9kKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUt Pm5ld25hbWUpOworCisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wY1R1cCk7CisJCQl9CisJCQlicmVh azsKKworCQljYXNlIE9CSkVDVF9PUEZBTUlMWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb3BmVHVw OworCQkJCUhlYXBUdXBsZQlhbVR1cDsKKwkJCQlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJ CQkJRm9ybV9wZ19hbQlhbUZvcm07CisJCQkJTGlzdAkgICAqb2xkbmFtZXM7CisJCQkJY2hhcgkg ICAqc2NoZW1hbmFtZTsKKwkJCQljaGFyCSAgICpvcGZuYW1lOworCisJCQkJb3BmVHVwID0gU2Vh cmNoU3lzQ2FjaGUxKE9QRkFNSUxZT0lELCBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlpZiAoIUhl YXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsCisJCQkJCQkgYWRkcmVzcy5v YmplY3RJZCk7CisJCQkJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qob3Bm VHVwKTsKKworCQkJCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFNT0lELCBPYmplY3RJZEdldERh dHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChhbVR1 cCkpCisJCQkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0 aG9kIHdpdGggT0lEICV1IiwKKwkJCQkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOworCisJCQkJYW1G b3JtID0gKEZvcm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwkJCQlvbGRuYW1lcyA9IGxp c3RfY29weV90YWlsKChMaXN0ICopIG5vZGUtPm9iamVjdCwgMSk7CisKKwkJCQkvKiBEZWNvbnN0 cnVjdCB0aGUgbmFtZSBsaXN0ICovCisJCQkJRGVjb25zdHJ1Y3RRdWFsaWZpZWROYW1lKG9sZG5h bWVzLCAmc2NoZW1hbmFtZSwgJm9wZm5hbWUpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEo IkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCBVU0lORyAle2luZGV4X21ldGhvZH1zIFJF TkFNRSBUTyAle25ld25hbWV9SSIsIDQsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNl KSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShvcGZGb3JtLT5vcGZuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ CQkgIG9wZm5hbWUpLAorCQkJCQkJCQkJICJpbmRleF9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkJIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpLAorCQkJCQkJCQkJICJuZXduYW1lIiwg T2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUoYW1U dXApOworCQkJCVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCQkJfQorCQkJYnJlYWs7CisKKwkJ Y2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFNDSEVN QSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMiwKKwkJCQkJCQkJICJpZGVu dGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5hbWUsCisJCQkJCQkJCSAibmV3bmFtZSIs IE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpF Q1RfRkRXOgorCQljYXNlIE9CSkVDVF9MQU5HVUFHRToKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9T RVJWRVI6CisJCWNhc2UgT0JKRUNUX1BVQkxJQ0FUSU9OOgorCQkJcmV0ID0gbmV3X29ianRyZWVf VkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUki LCAzLAorCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgc3RyaW5n aWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAorCQkJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0clZhbChjYXN0Tm9kZShTdHJpbmcsIG5vZGUt Pm9iamVjdCkpLAorCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXdu YW1lKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKRUNUX1JVTEU6CisJCQl7CisJCQkJSGVhcFR1 cGxlCXJld3JUdXA7CisJCQkJRm9ybV9wZ19yZXdyaXRlIHJld3JGb3JtOworCQkJCVJlbGF0aW9u CXBnX3Jld3JpdGU7CisKKwkJCQlwZ19yZXdyaXRlID0gcmVsYXRpb25fb3BlbihSZXdyaXRlUmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQlyZXdyVHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChwZ19yZXdyaXRlLCBBbnVtX3BnX3Jld3JpdGVfb2lkLCBhZGRyZXNzLm9iamVj dElkKTsKKwkJCQlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVw KTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBSVUxFICV7cnVsZW5hbWV9SSBP TiAle2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAicnVs ZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgcmV3ckZvcm0tPmV2X2NsYXNz KSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPm5ld25hbWUpOwor CQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9CisJ CQlicmVhazsKKworCQljYXNlIE9CSkVDVF9UUklHR0VSOgorCQkJeworCQkJCUhlYXBUdXBsZQl0 cmlnVHVwOworCQkJCUZvcm1fcGdfdHJpZ2dlciB0cmlnRm9ybTsKKwkJCQlSZWxhdGlvbglwZ190 cmlnZ2VyOworCisJCQkJcGdfdHJpZ2dlciA9IHJlbGF0aW9uX29wZW4oVHJpZ2dlclJlbGF0aW9u SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJdHJpZ1R1cCA9IGdldF9jYXRhbG9nX29iamVjdF9i eV9vaWQocGdfdHJpZ2dlciwgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCks IGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCXRyaWdGb3JtID0gKEZvcm1fcGdfdHJpZ2dlcikgR0VU U1RSVUNUKHRyaWdUdXApOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRSSUdH RVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUki LCAzLAorCQkJCQkJCQkJICJ0cmlnZ2VybmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnN1Ym5h bWUsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJCSB0cmlnRm9ybS0+dGdyZWxpZCksCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3Ry aW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCXJlbGF0aW9uX2Nsb3NlKHBnX3RyaWdnZXIsIEFj Y2Vzc1NoYXJlTG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9DT0xMQVRJ T046CisJCWNhc2UgT0JKRUNUX1NUQVRJU1RJQ19FWFQ6CisJCWNhc2UgT0JKRUNUX1RZUEU6CisJ CWNhc2UgT0JKRUNUX0NPTlZFUlNJT046CisJCWNhc2UgT0JKRUNUX0RPTUFJTjoKKwkJY2FzZSBP QkpFQ1RfVFNESUNUSU9OQVJZOgorCQljYXNlIE9CSkVDVF9UU1BBUlNFUjoKKwkJY2FzZSBPQkpF Q1RfVFNURU1QTEFURToKKwkJY2FzZSBPQkpFQ1RfVFNDT05GSUdVUkFUSU9OOgorCQkJeworCQkJ CUhlYXBUdXBsZQlvYmpUdXA7CisJCQkJUmVsYXRpb24JY2F0YWxvZzsKKwkJCQlEYXR1bQkJb2Jq bnNwOworCQkJCWJvb2wJCWlzbnVsbDsKKwkJCQlBdHRyTnVtYmVyCUFudW1fbmFtZXNwYWNlOwor CQkJCUxpc3QJICAgKmlkZW50aXR5ID0gY2FzdE5vZGUoTGlzdCwgbm9kZS0+b2JqZWN0KTsKKwor CQkJCS8qIE9idGFpbiBvYmplY3QgdHVwbGUgKi8KKwkJCQljYXRhbG9nID0gcmVsYXRpb25fb3Bl bihhZGRyZXNzLmNsYXNzSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJb2JqVHVwID0gZ2V0X2Nh dGFsb2dfb2JqZWN0X2J5X29pZChjYXRhbG9nLCBnZXRfb2JqZWN0X2F0dG51bV9vaWQoYWRkcmVz cy5jbGFzc0lkKSwgYWRkcmVzcy5vYmplY3RJZCk7CisKKwkJCQkvKiBPYnRhaW4gbmFtZXNwYWNl ICovCisJCQkJQW51bV9uYW1lc3BhY2UgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lc3BhY2UoYWRk cmVzcy5jbGFzc0lkKTsKKwkJCQlvYmpuc3AgPSBoZWFwX2dldGF0dHIob2JqVHVwLCBBbnVtX25h bWVzcGFjZSwKKwkJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihjYXRhbG9nKSwgJmlzbnVsbCk7 CisJCQkJaWYgKGlzbnVsbCkKKwkJCQkJZWxvZyhFUlJPUiwgImludmFsaWQgTlVMTCBuYW1lc3Bh Y2UiKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lk ZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAib2JqdHlwZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1l VHlwZSwgZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJ CQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKERhdHVtR2V0T2JqZWN0SWQob2JqbnNwKSwK KwkJCQkJCQkJCQkJCQkJCSAgc3RyVmFsKGxsYXN0KGlkZW50aXR5KSkpLAorCQkJCQkJCQkJICJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQkJcmVsYXRpb25fY2xv c2UoY2F0YWxvZywgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJWQiLCBub2RlLT5y ZW5hbWVUeXBlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIEFs dGVyT2JqZWN0RGVwZW5kc1N0bXQgKEFMVEVSIC4uLiBERVBFTkRTIE9OIC4uLikuCisgKgorICog VmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMgREVQRU5E UyBPTiBFWFRFTlNJT04gJXtuZXduYW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlckRlcGVuZFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0 ZXJPYmplY3REZXBlbmRzU3RtdCAqbm9kZSA9IChBbHRlck9iamVjdERlcGVuZHNTdG10ICopIHBh cnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQgPSBOVUxMOworCisJaWYgKG5vZGUtPm9iamVjdFR5 cGUgPT0gT0JKRUNUX0lOREVYKQorCXsKKwkJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCQlSZWxh dGlvbglyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwkJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJIG5vZGUtPnJlbGF0aW9uLT5yZWxuYW1lKTsK KwkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkJcmV0ID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIElOREVYICV7aWRlbnRpdHl9RCAle25vfXMgREVQRU5EUyBP TiBFWFRFTlNJT04gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl T2JqZWN0LCBxdWFsaWZpZWQsCisJCQkJCQkJICJubyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJ IG5vZGUtPnJlbW92ZSA/ICJOTyIgOiAiIiwKKwkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3Ry aW5nLCBzdHJWYWwobm9kZS0+ZXh0bmFtZSkpOworCX0KKwllbHNlCisJCWVsb2coTE9HLCAidW5y ZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCSAoaW50KSBu b2RlVGFnKHBhcnNldHJlZSkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YSBSdWxlU3RtdCAoQ1JFQVRFIFJVTEUpLgorICoKKyAqIEdpdmVuIGEgcnVsZSBPSUQgYW5kIHRo ZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJl c2VudGluZyB0aGUgcnVsZSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVB VEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7 dGFibGV9RAorICogJXt3aGVyZV9jbGF1c2V9cyBETyAle2luc3RlYWR9cyAle2FjdGlvbnM6LCB9 cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICAgKm5vZGUgPSAoUnVsZVN0bXQgKikgcGFy c2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJUmVsYXRpb24J cGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJSGVhcFR1cGxlCXJld3JU dXA7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJRGF0dW0JCWV2X3F1 YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxsOworCWNoYXIJICAgKnF1YWw7 CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJY2hhcgkgICAqZXZlbnRfc3RyOworCisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4o UmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUluaXQoJmtleSwK KwkJCQlBbnVtX3BnX3Jld3JpdGVfb2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwKKwkJ CQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFi bGVfYmVnaW5zY2FuKHBnX3Jld3JpdGUsIFJld3JpdGVPaWRJbmRleElkLCB0cnVlLAorCQkJCQkJ CSAgTlVMTCwgMSwgJmtleSk7CisJcmV3clR1cCA9IHN5c3RhYmxlX2dldG5leHQoc2Nhbik7CisJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJld3JUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7 CisKKwlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdyVHVwKTsKKwor CWV2ZW50X3N0ciA9IG5vZGUtPmV2ZW50ID09IENNRF9TRUxFQ1QgPyAiU0VMRUNUIiA6CisJCW5v ZGUtPmV2ZW50ID09IENNRF9VUERBVEUgPyAiVVBEQVRFIiA6CisJCW5vZGUtPmV2ZW50ID09IENN RF9ERUxFVEUgPyAiREVMRVRFIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9JTlNFUlQgPyAiSU5T RVJUIiA6IE5VTEw7CisJQXNzZXJ0KGV2ZW50X3N0ciAhPSBOVUxMKTsKKworCWV2X3F1YWwgPSBo ZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X3F1YWwsCisJCQkJCQkgICBS ZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKwlldl9hY3Rpb25zID0gaGVh cF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9hY3Rpb24sCisJCQkJCQkJICBS ZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKworCXBnX2dldF9ydWxlZGVm X2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZxdWFsLCAmYWN0aW9ucyk7CisKKwl0bXAg PSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKHF1YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRt cCwgIldIRVJFICV7Y2xhdXNlfXMiLCAiY2xhdXNlIiwgcXVhbCk7CisJZWxzZQorCXsKKwkJYXBw ZW5kX251bGxfb2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiKTsKKwkJYXBwZW5kX25vdF9w cmVzZW50KHRtcCk7CisJfQorCisJaWYgKGFjdGlvbnMgPT0gTklMKQorCQlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdCgiTk9USElORyIpKTsKKwllbHNlCisJeworCQlmb3Jl YWNoKGNlbGwsIGFjdGlvbnMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29i amVjdChsZmlyc3QoY2VsbCkpKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRF IFJVTEUgJXtvcl9yZXBsYWNlfXMgJXtpZGVudGl0eX1JIEFTIE9OICV7ZXZlbnR9cyBUTyAle3Rh YmxlfUQgJXt3aGVyZV9jbGF1c2V9cyBETyAle2luc3RlYWR9cyIsIDYsCisJCQkJCQkgIm9yX3Jl cGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFD RSIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5ydWxlbmFt ZSwKKwkJCQkJCSAiZXZlbnQiLCBPYmpUeXBlU3RyaW5nLCBldmVudF9zdHIsCisJCQkJCQkgInRh YmxlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSByZXdyRm9ybS0+ZXZfY2xhc3MpLAor CQkJCQkJICJ3aGVyZV9jbGF1c2UiLCBPYmpUeXBlT2JqZWN0LCB0bXAsCisJCQkJCQkgImluc3Rl YWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmluc3RlYWQgPyAiSU5TVEVBRCIgOiAi QUxTTyIpOworCisJaWYgKGxpc3RfbGVuZ3RoKGxpc3QpID4gMSkKKwkJYXBwZW5kX2FycmF5X29i amVjdChyZXQsICIoJXthY3Rpb25zOjsgfXMpIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIiV7YWN0aW9uczo7IH1zIiwgbGlzdCk7CisKKwlzeXN0YWJsZV9lbmRz Y2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisK KwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyYW5zZm9ybVN0bXQg KENSRUFURSBUUkFOU0ZPUk0pLgorICoKKyAqIEdpdmVuIGEgdHJhbnNmb3JtIE9JRCBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVz ZW50aW5nIHRoZSBDUkVBVEUgVFJBTlNGT1JNIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBM QU5HVUFHRSAle2xhbmd1YWdlfUkKKyAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25h dHVyZX1zLCBUTyBTUUwgV0lUSCBGVU5DVElPTgorICogJXtzaWduYXR1cmVfdG9mfXMgKQorICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQoT2lkIG9iamVj dElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJhbnNmb3JtU3RtdCAqbm9kZSA9IChD cmVhdGVUcmFuc2Zvcm1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2Jq VHJlZSAgICAqc2lnbmF0dXJlOworCUhlYXBUdXBsZQl0cmZUdXA7CisJSGVhcFR1cGxlCWxhbmdU dXA7CisJSGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ190cmFuc2Zvcm0gdHJmRm9ybTsKKwlG b3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlpbnQJ CQlpOworCisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0cmZUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFI ZWFwVHVwbGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFp bGVkIGZvciB0cmFuc2Zvcm0gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0cmZGb3Jt ID0gKEZvcm1fcGdfdHJhbnNmb3JtKSBHRVRTVFJVQ1QodHJmVHVwKTsKKworCS8qIEdldCB0aGUg Y29ycmVzcG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXND YWNoZTEoTEFOR09JRCwgdHJmRm9ybS0+dHJmbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGxhbmdUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3Vh Z2Ugd2l0aCBPSUQgJXUiLAorCQkJIHRyZkZvcm0tPnRyZmxhbmcpOworCWxhbmdGb3JtID0gKEZv cm1fcGdfbGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJDUkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFO R1VBR0UgJXtsYW5ndWFnZX1JIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0 eXBlbmFtZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0cmZGb3JtLT50cmZ0eXBlKSwKKwkJ CQkJCSAibGFuZ3VhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0t Pmxhbm5hbWUpKTsKKworCS8qIERlcGFyc2UgdGhlIHRyYW5zZm9ybV9lbGVtZW50X2xpc3QgKi8K KwlpZiAoT2lkSXNWYWxpZCh0cmZGb3JtLT50cmZmcm9tc3FsKSkKKwl7CisJCUxpc3QJICAgKnBh cmFtcyA9IE5JTDsKKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBGUk9NIEZV TkNUSU9OICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+ dHJmZnJvbXNxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJ CQkJIHRyZkZvcm0tPnRyZmZyb21zcWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdF VFNUUlVDVChwcm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90 IGNoYW5nZSBmdW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZQorCQkgKiBjYXRhbG9nIHRv IGdldCBpbnB1dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0t PnByb25hcmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKnBhcmFtX29iajsKKworCQkJcGFy YW1fb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJCSAgInR5cGUi LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0t PnByb2FyZ3R5cGVzLnZhbHVlc1tpXSwgLTEpKTsKKwkJCXBhcmFtcyA9IGxhcHBlbmQocGFyYW1z LCBuZXdfb2JqZWN0X29iamVjdChwYXJhbV9vYmopKTsKKwkJfQorCisJCXNpZ25hdHVyZSA9IG5l d19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJ CQkJICAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQlOYW1l U3RyKHByb2NGb3JtLT5wcm9uYW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBPYmpUeXBl QXJyYXksIHBhcmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiKEZST00gU1FM IFdJVEggRlVOQ1RJT04gJXtzaWduYXR1cmV9cyIsCisJCQkJCQkJIHNpZ25hdHVyZSk7CisJCVJl bGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJaWYgKE9pZElzVmFsaWQodHJmRm9ybS0+dHJm dG9zcWwpKQorCXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qIEFwcGVuZCBhICcs JyBpZiB0cmZmcm9tc3FsIGlzIHByZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAqLworCQlhcHBlbmRf Zm9ybWF0X3N0cmluZyhyZXQsIE9pZElzVmFsaWQodHJmRm9ybS0+dHJmZnJvbXNxbCkgPyAiLCIg OiAiKCIpOworCisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIFRPIEZVTkNUSU9O ICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmdG9z cWwpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSB0cmZG b3JtLT50cmZ0b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHBy b2NUdXApOworCisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1 bmN0aW9uIHNpZ25hdHVyZSBzbyB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0 IHR5cGUgT2lkcy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7 IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqcGFyYW1fb2JqID0gbmV3X29ianRyZWUoIiIpOwor CisJCQlwYXJhbV9vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXt0eXBlfVQiLCAxLAorCQkJCQkJCQkJ ICAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl90eXBl KHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMgPSBsYXBw ZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1fb2JqKSk7CisJCX0KKworCQlzaWdu YXR1cmUgPSBuZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1zKSIs IDIsCisJCQkJCQkJCSAgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSAgIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJ CQkJCQkJTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpLAorCQkJCQkJCQkgICAiYXJndW1lbnRz IiwgT2JqVHlwZUFycmF5LCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IlRPIFNRTCBXSVRIIEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zIiwKKwkJCQkJCQkgc2lnbmF0 dXJlKTsKKwkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKworCWFwcGVuZF9mb3JtYXRf c3RyaW5nKHJldCwgIikiKTsKKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNl U3lzQ2FjaGUodHJmVHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENv bW1lbnRTdG10IHdoZW4gaXQgcGVydGFpbnMgdG8gYSBjb25zdHJhaW50LgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBDT01NRU5UIE9OIENPTlNUUkFJTlQgJXtpZGVudGl0eX1zIE9OIFtET01B SU5dICV7cGFyZW50b2JqfXMgSVMgJXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9Db21tZW50T25Db25zdHJhaW50U210KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0 cmVlKQoreworCUNvbW1lbnRTdG10ICpub2RlID0gKENvbW1lbnRTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbnN0clR1cDsKKwlGb3JtX3BnX2NvbnN0 cmFpbnQgY29uc3RyRm9ybTsKKwlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwlBc3NlcnQobm9kZS0+ b2JqdHlwZSA9PSBPQkpFQ1RfVEFCQ09OU1RSQUlOVCB8fCBub2RlLT5vYmp0eXBlID09IE9CSkVD VF9ET01DT05TVFJBSU5UKTsKKworCWNvbnN0clR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJP SUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uc3RyVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNvbnN0cmFpbnQgd2l0aCBPSUQgJXUi LCBvYmplY3RJZCk7CisJY29uc3RyRm9ybSA9IChGb3JtX3BnX2NvbnN0cmFpbnQpIEdFVFNUUlVD VChjb25zdHJUdXApOworCisJaWYgKE9pZElzVmFsaWQoY29uc3RyRm9ybS0+Y29ucmVsaWQpKQor CQlPYmplY3RBZGRyZXNzU2V0KGFkZHIsIFJlbGF0aW9uUmVsYXRpb25JZCwgY29uc3RyRm9ybS0+ Y29ucmVsaWQpOworCWVsc2UKKwkJT2JqZWN0QWRkcmVzc1NldChhZGRyLCBUeXBlUmVsYXRpb25J ZCwgY29uc3RyRm9ybS0+Y29udHlwaWQpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNPTU1F TlQgT04gQ09OU1RSQUlOVCAle2lkZW50aXR5fXMgT04gJXtkb21haW59cyAle3BhcmVudG9ian1z IiwgMywKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBwc3RyZHVwKE5hbWVTdHIo Y29uc3RyRm9ybS0+Y29ubmFtZSkpLAorCQkJCQkJICJkb21haW4iLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9ET01DT05TVFJBSU5UKSA/ICJET01BSU4i IDogIiIsCisJCQkJCQkgInBhcmVudG9iaiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgZ2V0T2Jq ZWN0SWRlbnRpdHkoJmFkZHIsIGZhbHNlKSk7CisKKwkvKiBBZGQgdGhlIGNvbW1lbnQgY2xhdXNl ICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2NvbW1lbnR9cyIsIG5vZGUt PmNvbW1lbnQpOworCisJUmVsZWFzZVN5c0NhY2hlKGNvbnN0clR1cCk7CisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQ29tbWVudFN0bXQgKENPTU1FTlQgT04gLi4uKS4KKyAq CisgKiBHaXZlbiB0aGUgb2JqZWN0IGFkZHJlc3MgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3Jl YXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY29tbWVudCBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDT01NRU5UIE9OICV7b2JqdHlwZX1z ICV7aWRlbnRpdHl9cyBJUyAle2NvbW1lbnR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NvbW1lbnRTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVlKQor eworCUNvbW1lbnRTdG10ICpub2RlID0gKENvbW1lbnRTdG10ICopIHBhcnNldHJlZTsKKwlPYmpU cmVlICAgICpyZXQ7CisJY2hhcgkgICAqaWRlbnRpdHk7CisKKwkvKiBDb21tZW50IG9uIHN1YnNj cmlwdGlvbiBpcyBub3Qgc3VwcG9ydGVkICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNU X1NVQlNDUklQVElPTikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIENvbnN0cmFpbnRzIGFy ZSBzdWZmaWNpZW50bHkgZGlmZmVyZW50IHRoYXQgaXQgaXMgZWFzaWVyIHRvIGhhbmRsZSB0aGVt CisJICogc2VwYXJhdGVseS4KKwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9N Q09OU1RSQUlOVCB8fAorCQlub2RlLT5vYmp0eXBlID09IE9CSkVDVF9UQUJDT05TVFJBSU5UKQor CXsKKwkJQXNzZXJ0KGFkZHJlc3MuY2xhc3NJZCA9PSBDb25zdHJhaW50UmVsYXRpb25JZCk7CisJ CXJldHVybiBkZXBhcnNlX0NvbW1lbnRPbkNvbnN0cmFpbnRTbXQoYWRkcmVzcy5vYmplY3RJZCwg cGFyc2V0cmVlKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ09NTUVOVCBPTiAle29i anR5cGV9cyIsIDEsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIChj aGFyICopIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9ianR5cGUsIGZhbHNlKSk7CisKKwkvKgor CSAqIEFkZCB0aGUgb2JqZWN0IGlkZW50aXR5IGNsYXVzZS4gIEZvciB6ZXJvIGFyZ3VtZW50IGFn Z3JlZ2F0ZXMgd2UgbmVlZAorCSAqIHRvIGFkZCB0aGUgKCopIGJpdDsgaW4gYWxsIG90aGVyIGNh c2VzIHdlIGNhbiBqdXN0IHVzZQorCSAqIGdldE9iamVjdElkZW50aXR5LgorCSAqCisJICogWFhY IHNob3VsZG4ndCB3ZSBpbnN0ZWFkIGZpeCB0aGUgb2JqZWN0IGlkZW50aXRpZXMgZm9yIHplcm8t YXJndW1lbnQKKwkgKiBhZ2dyZWdhdGVzPworCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9C SkVDVF9BR0dSRUdBVEUpCisJeworCQlIZWFwVHVwbGUJcHJvY1R1cDsKKwkJRm9ybV9wZ19wcm9j IHByb2NGb3JtOworCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0 SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChw cm9jVHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwcm9jZWR1 cmUgd2l0aCBPSUQgJXUiLAorCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJcHJvY0Zvcm0gPSAo Rm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisJCWlmIChwcm9jRm9ybS0+cHJvbmFy Z3MgPT0gMCkKKwkJCWlkZW50aXR5ID0gcHNwcmludGYoIiVzKCopIiwKKwkJCQkJCQkJcXVvdGVf cXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9uYW1lKHByb2NGb3JtLT5wcm9uYW1l c3BhY2UpLAorCQkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKHByb2NGb3JtLT5wcm9uYW1lKSkpOwor CQllbHNlCisJCQlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7 CisJCVJlbGVhc2VTeXNDYWNoZShwcm9jVHVwKTsKKwl9CisJZWxzZQorCQlpZGVudGl0eSA9IGdl dE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICIle2lkZW50aXR5fXMiLCAiaWRlbnRpdHkiLCBpZGVudGl0eSk7CisKKwkvKiBBZGQg dGhlIGNvbW1lbnQgY2xhdXNlOyBjYW4gYmUgZWl0aGVyIE5VTEwgb3IgYSBxdW90ZWQgbGl0ZXJh bC4gKi8KKwlhcHBlbmRfbGl0ZXJhbF9vcl9udWxsKHJldCwgIklTICV7Y29tbWVudH1zIiwgbm9k ZS0+Y29tbWVudCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFNFQ1VS SVRZIExBQkVMIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFQ1VSSVRZIExB QkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmplY3RfdHlwZV9uYW1lfXMgJXtpZGVudGl0eX1z IElTICV7bGFiZWx9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1NlY0xhYmVsU3Rt dChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2JqVHJlZQkgICAqcmV0OworCVNlY0xhYmVs U3RtdCAqbm9kZSA9IChTZWNMYWJlbFN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisKKwkvKiBEb24n dCBkZXBhcnNlIHNxbCBjb21tYW5kcyBnZW5lcmF0ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9u ICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQorCQlyZXR1cm4gTlVMTDsKKworCUFzc2VydChj bWQtPmQuc2VjbGFiZWwucHJvdmlkZXIpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNFQ1VS SVRZIExBQkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIiwg MywKKwkJCQkJCSAicHJvdmlkZXIiLCBPYmpUeXBlU3RyaW5nLCBjbWQtPmQuc2VjbGFiZWwucHJv dmlkZXIsCisJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLCBzdHJpbmdpZnlfb2JqdHlw ZShub2RlLT5vYmp0eXBlLCBmYWxzZSksCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu ZywgZ2V0T2JqZWN0SWRlbnRpdHkoJihjbWQtPmQuc2VjbGFiZWwuYWRkcmVzcyksIGZhbHNlKSk7 CisKKwkvKiBBZGQgdGhlIGxhYmVsIGNsYXVzZTsgY2FuIGJlIGVpdGhlciBOVUxMIG9yIGEgcXVv dGVkIGxpdGVyYWwuICovCisJYXBwZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2xhYmVs fXMiLCBub2RlLT5sYWJlbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBh IENyZWF0ZUFtU3RtdCAoQ1JFQVRFIEFDQ0VTUyBNRVRIT0QpLgorICoKKyAqIEdpdmVuIGFuIGFj Y2VzcyBtZXRob2QgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBBQ0NFU1MgTUVUSE9EIGNv bW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBBQ0NFU1MgTUVUSE9EICV7 aWRlbnRpdHl9SSBUWVBFICV7YW1fdHlwZX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVBbVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpw YXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCUhlYXBUdXBsZQlhbVR1cDsKKwlGb3Jt X3BnX2FtCWFtRm9ybTsKKwljaGFyCSAgICphbXR5cGU7CisKKwlhbVR1cCA9IFNlYXJjaFN5c0Nh Y2hlMShBTU9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBh Y2Nlc3MgbWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJYW1Gb3JtID0gKEZv cm1fcGdfYW0pIEdFVFNUUlVDVChhbVR1cCk7CisKKwlzd2l0Y2ggKGFtRm9ybS0+YW10eXBlKQor CXsKKwkJY2FzZSAnaSc6CisJCQlhbXR5cGUgPSAiSU5ERVgiOworCQkJYnJlYWs7CisJCWNhc2Ug J3QnOgorCQkJYW10eXBlID0gIlRBQkxFIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgImludmFsaWQgdHlwZSAlYyBmb3IgYWNjZXNzIG1ldGhvZCIsIGFtRm9ybS0+YW10 eXBlKTsKKwl9CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIEFDQ0VTUyBNRVRIT0Qg JXtpZGVudGl0eX1JIFRZUEUgJXthbV90eXBlfXMgSEFORExFUiAle2hhbmRsZXJ9RCIsIDMsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBOYW1lU3RyKGFtRm9ybS0+ YW1uYW1lKSwKKwkJCQkJCSAiYW1fdHlwZSIsIE9ialR5cGVTdHJpbmcsIGFtdHlwZSwKKwkJCQkJ CSAiaGFuZGxlciIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIGFtRm9ybS0+YW1oYW5k bGVyKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoYW1UdXApOworCisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0LgorICoKKyAqIEdpdmVu IGEgdHVwbGUgb2YgcGdfcHVibGljYXRpb25fcmVsLCByZXR1cm4gYW4gb2JqVHJlZSB0aGF0IHJl cHJlc2VudCB0aGUKKyAqIGNvbHVtbiBuYW1lcy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9QdWJsaWNhdGlvblJlbGF0aW9uQ29sdW1uTGlzdChIZWFwVHVwbGUgcHVicmVsdHVwKQor eworCWJvb2wJCWlzbnVsbDsKKwlMaXN0CSAgICpjb2xsaXN0ID0gTklMOworCU9ialRyZWUJICAg KmNvbHVtbmxpc3Q7CisJRGF0dW0JCWF0dHJzZGF0dW07CisKKwlhdHRyc2RhdHVtID0gU3lzQ2Fj aGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCBwdWJyZWx0dXAsCisJCQkJCQkJCSBBbnVtX3Bn X3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzLAorCQkJCQkJCQkgJmlzbnVsbCk7CisKKwljb2x1bW5s aXN0ID0gbmV3X29ianRyZWUoIiIpOworCWlmICghaXNudWxsKQorCXsKKwkJRm9ybV9wZ19wdWJs aWNhdGlvbl9yZWwgcHVicmVsOworCQlBcnJheVR5cGUgICphcnI7CisJCWludAkJCW5lbGVtczsK KwkJaW50MTYJICAgKmVsZW1zOworCisJCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChhdHRyc2Rh dHVtKTsKKwkJbmVsZW1zID0gQVJSX0RJTVMoYXJyKVswXTsKKwkJZWxlbXMgPSAoaW50MTYgKikg QVJSX0RBVEFfUFRSKGFycik7CisKKwkJcHVicmVsID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVs KSBHRVRTVFJVQ1QocHVicmVsdHVwKTsKKworCQlmb3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsg aSsrKQorCQl7CisJCQljaGFyICpjb2xuYW1lID0gZ2V0X2F0dG5hbWUocHVicmVsLT5wcnJlbGlk LCBlbGVtc1tpXSwgZmFsc2UpOworCQkJY29sbGlzdCA9IGxhcHBlbmQoY29sbGlzdCwgbmV3X3N0 cmluZ19vYmplY3QoY29sbmFtZSkpOworCQl9CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjb2x1 bW5saXN0LCAiKCV7Y29sczosIH1zKSIsIGNvbGxpc3QpOworCX0KKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudChjb2x1bW5saXN0KTsKKworCXJldHVybiBjb2x1bW5saXN0OworfQorCisvKgor ICogRGVwYXJzZSB0aGUgcHVibGljYXRpb24gd2hlcmUgY2xhdXNlLgorICoKKyAqIEdpdmVuIGEg dHVwbGUgb2YgcGdfcHVibGljYXRpb25fcmVsLCByZXR1cm4gYSBvYmpUcmVlIHRoYXQgcmVwcmVz ZW50IHRoZQorICogcHVibGljYXRpb24gd2hlcmUgY2xhdXNlLgorICovCitzdGF0aWMgT2JqVHJl ZSAqCitkZXBhcnNlX1B1YmxpY2F0aW9uUmVsYXRpb25XaGVyZUNsYXVzZShIZWFwVHVwbGUgcHVi cmVsdHVwKQoreworCURhdHVtCQkJCQlxdWFsZGF0dW07CisJT2JqVHJlZQkJCQkgICAqd2hlcmVj bGF1c2U7CisJYm9vbAkJCQkJaXNudWxsOworCisJcXVhbGRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KFBVQkxJQ0FUSU9OUkVMTUFQLCBwdWJyZWx0dXAsCisJCQkJCQkJCUFudW1fcGdfcHVibGljYXRp b25fcmVsX3BycXVhbCwgJmlzbnVsbCk7CisKKwl3aGVyZWNsYXVzZSA9IG5ld19vYmp0cmVlKCIi KTsKKwlpZiAoIWlzbnVsbCkKKwl7CisJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsIHB1YnJlbDsK KwkJTm9kZQkJCQkgICAqcXVhbG5vZGU7CisJCUxpc3QJCQkJICAgKmNvbnRleHQ7CisJCWNoYXIJ CQkJICAgKnF1YWxzdHI7CisJCU9pZAkJCQkJCXJlbGlkOworCisJCXB1YnJlbCA9IChGb3JtX3Bn X3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHB1YnJlbHR1cCk7CisJCXJlbGlkID0gcHVicmVs LT5wcnJlbGlkOworCisJCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdldF9yZWxfbmFt ZShyZWxpZCksIHJlbGlkKTsKKwkJcXVhbG5vZGUgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0 Q1N0cmluZyhxdWFsZGF0dW0pKTsKKwkJcXVhbHN0ciA9IGRlcGFyc2VfZXhwcmVzc2lvbihxdWFs bm9kZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh3 aGVyZWNsYXVzZSwgIldIRVJFICV7d2hlcmV9cyIsICJ3aGVyZSIsIHF1YWxzdHIpOworCX0KKwll bHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh3aGVyZWNsYXVzZSk7CisKKwlyZXR1cm4gd2hlcmVj bGF1c2U7Cit9CisKKy8qCisgKiBTdWJyb3V0aW5lIGZvciBDUkVBVEUgUFVCTElDQVRJT04gZGVw YXJzaW5nLgorICoKKyAqIERlYWwgd2l0aCBhbGwgdGhlIHB1YmxpY2F0aW9uIHRhYmxlIGluZm9y bWF0aW9uIGluY2x1ZGluZyB0aGUgd2hlcmUgY2xhdXNlCisgKiBhbmQgY29sdW1uIGxpc3QuCisg Ki8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfUHVibGljYXRpb25SZWxhdGlvbkRlZnMoT2lkIHB1 Ym9pZCkKK3sKKwlSZWxhdGlvbglwdWJyZWxzcmVsOworCVNjYW5LZXlEYXRhIHNjYW5rZXk7CisJ U3lzU2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwOworCUxpc3QJICAgKnJlbGRlZnMgPSBO SUw7CisKKwlwdWJyZWxzcmVsID0gdGFibGVfb3BlbihQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQs IEFjY2Vzc1NoYXJlTG9jayk7CisKKwlTY2FuS2V5SW5pdCgmc2NhbmtleSwKKwkJCQlBbnVtX3Bn X3B1YmxpY2F0aW9uX3JlbF9wcnB1YmlkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9P SURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHB1Ym9pZCkpOworCisJc2NhbiA9IHN5c3RhYmxl X2JlZ2luc2NhbihwdWJyZWxzcmVsLCBQdWJsaWNhdGlvblJlbFBycHViaWRJbmRleElkLAorCQkJ CQkJCSAgdHJ1ZSwgTlVMTCwgMSwgJnNjYW5rZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFs aWQodHVwID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlGb3JtX3BnX3B1YmxpY2F0 aW9uX3JlbCBwdWJyZWw7CisJCU9pZAkJCQkJCXJlbGlkOworCQlPYmpUcmVlCQkJCSAgICpjb2x1 bW5saXN0OworCQlPYmpUcmVlCQkJCSAgICp3aGVyZWNsYXVzZTsKKwkJT2JqVHJlZQkJCQkgICAq cmVsZGVmOworCisJCXB1YnJlbCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNU KHR1cCk7CisJCXJlbGlkID0gcHVicmVsLT5wcnJlbGlkOworCisJCXJlbGRlZiA9IG5ld19vYmp0 cmVlX1ZBKCIle3RhYmxlbmFtZX1EIiwgMSwKKwkJCQkJCQkJInRhYmxlbmFtZSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxh dGlvbklkLCByZWxpZCkpOworCisJCWNvbHVtbmxpc3QgPSBkZXBhcnNlX1B1YmxpY2F0aW9uUmVs YXRpb25Db2x1bW5MaXN0KHR1cCk7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJlbGRlZiwgIiV7 Y29sdW1uX2xpc3R9cyIsIGNvbHVtbmxpc3QpOworCisJCXdoZXJlY2xhdXNlID0gZGVwYXJzZV9Q dWJsaWNhdGlvblJlbGF0aW9uV2hlcmVDbGF1c2UodHVwKTsKKwkJYXBwZW5kX29iamVjdF9vYmpl Y3QocmVsZGVmLCAiJXt3aGVyZV9jbGF1c2V9cyIsIHdoZXJlY2xhdXNlKTsKKworCQlyZWxkZWZz ID0gbGFwcGVuZChyZWxkZWZzLCBuZXdfb2JqZWN0X29iamVjdChyZWxkZWYpKTsKKwl9CisKKwlz eXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKHB1YnJlbHNyZWwsIEFjY2Vzc1No YXJlTG9jayk7CisKKwlyZXR1cm4gcmVsZGVmczsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVh dGVQdWJsaWNhdGlvblN0bXQgKENSRUFURSBQVUJMSUNBVElPTikuCisgKgorICogR2l2ZW4gYW4g cHVibGljYXRpb24gT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIENSRUFURSBQVUJMSUNBVElPTiBjb21t YW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgUFVCTElDQVRJT04gJXtpZGVu dGl0eX1JICV7Zm9yX3RhYmxlc31zICV7Zm9yX3NjaGVtYXN9cyAle3dpdGhfY2xhdXNlfXMKKyAq IE9SCisgKiBDUkVBVEUgUFVCTElDQVRJT04gJXtpZGVudGl0eX1JIEZPUiBBTEwgVEFCTEVTICV7 d2l0aF9jbGF1c2V9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVB1Ymxp Y2F0aW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVQdWJs aWNhdGlvblN0bXQgKm5vZGUgPSAoQ3JlYXRlUHVibGljYXRpb25TdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpjcmVhdGVQdWI7CisJT2JqVHJlZSAgICAqdG1wOworCUhlYXBUdXBsZQlw dWJUdXA7CisJRm9ybV9wZ19wdWJsaWNhdGlvbglwdWJGb3JtOworCUxpc3QJICAgKmxpc3QgPSBO SUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXB1YlR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJM SUNBVElPTk9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZChwdWJUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Ig YWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXB1YkZvcm0gPSAo Rm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNUKHB1YlR1cCk7CisKKwljcmVhdGVQdWIgPSBu ZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFBVQkxJQ0FUSU9OICV7aWRlbnRpdHl9cyIsIDEsCisJCQkJ CQkJICAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgICBOYW1lU3RyKHB1YkZv cm0tPnB1Ym5hbWUpKTsKKworCWlmIChub2RlLT5mb3JfYWxsX3RhYmxlcykKKwkJYXBwZW5kX2Zv cm1hdF9zdHJpbmcoY3JlYXRlUHViLCAiRk9SIEFMTCBUQUJMRVMiKTsKKwllbHNlCisJeworCQlM aXN0CSAgICpvbGRzY2hlbWFpZHM7CisJCVN0cmluZ0luZm9EYXRhIGZvcl9zY2hlbWFzOworCisJ CS8qIEZPUiBUQUJMRVMgdDEsdDIsLi4uICovCisJCXRtcCA9IG5ld19vYmp0cmVlKCJGT1IgVEFC TEUiKTsKKworCQlsaXN0ID0gZGVwYXJzZV9QdWJsaWNhdGlvblJlbGF0aW9uRGVmcyhvYmplY3RJ ZCk7CisJCWlmIChsaXN0ICE9IE5JTCkKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wLCAiJXt0 YWJsZXM6LCB9cyIsIGxpc3QpOworCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVQdWIsICIle2Zvcl90YWJsZXN9cyIsIHRt cCk7CisKKwkJLyogRk9SIFRBQkxFUyBJTiBTQ0hFTUEgczEsczIsLi4uICovCisJCWluaXRTdHJp bmdJbmZvKCZmb3Jfc2NoZW1hcyk7CisJCWlmIChsaXN0ICE9IE5JTCkKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmZvcl9zY2hlbWFzLCAiLCAiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZm9yX3NjaGVtYXMsICJGT1IgIik7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmZvcl9zY2hlbWFzLCAiVEFCTEVTIElOIFNDSEVNQSIpOworCisJCXRtcCA9IG5ld19vYmp0 cmVlKGZvcl9zY2hlbWFzLmRhdGEpOworCQlsaXN0ID0gTklMOworCQlvbGRzY2hlbWFpZHMgPSBH ZXRQdWJsaWNhdGlvblNjaGVtYXMocHViRm9ybS0+b2lkKTsKKwkJZm9yZWFjaChjZWxsLCBvbGRz Y2hlbWFpZHMpCisJCXsKKwkJCU9pZAkJc2NoZW1haWQgPSBsZmlyc3Rfb2lkKGNlbGwpOworCQkJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoZ2V0X25hbWVzcGFjZV9uYW1l KHNjaGVtYWlkKSkpOworCQl9CisKKwkJaWYgKGxpc3QgIT0gTklMKQorCQkJYXBwZW5kX2FycmF5 X29iamVjdCh0bXAsICIle3NjaGVtYXM6LCB9SSIsIGxpc3QpOworCQllbHNlCisJCQlhcHBlbmRf bm90X3ByZXNlbnQodG1wKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVQdWIsICIl e2Zvcl9zY2hlbWFzfXMiLCB0bXApOworCX0KKworCS8qIFdJVEggY2xhdXNlICovCisJdG1wID0g bmV3X29ianRyZWUoIldJVEgiKTsKKworCWxpc3QgPSBOSUw7CisJZm9yZWFjaChjZWxsLCBub2Rl LT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZSAgICAqdG1wX29iajsKKwkJRGVmRWxlbSAgICAqb3B0 ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJCXRtcF9vYmogPSBkZXBhcnNlX0RlZkVs ZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcF9vYmopKTsKKwl9CisKKwlpZiAobGlzdCAhPSBOSUwpCisJCWFwcGVuZF9hcnJheV9vYmpl Y3QodG1wLCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHRtcCk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVQdWIsICIle3dpdGhfY2xh dXNlfXMiLCB0bXApOworCisJUmVsZWFzZVN5c0NhY2hlKHB1YlR1cCk7CisKKwlyZXR1cm4gY3Jl YXRlUHViOworfQorCisvKgorICogRGVwYXJzZSBhIEFsdGVyUHVibGljYXRpb25TdG10IChBTFRF UiBQVUJMSUNBVElPTikuCisgKgorICogR2l2ZW4gYW4gcHVibGljYXRpb24gcmVsYXRpb24gT0lE IG9yIHB1YmxpY2F0aW9uIHNjaGVtYSBPSUQgYW5kIHRoZSBwYXJzZQorICogdHJlZSB0aGF0IGFk ZGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIEFMVEVSIFBVQkxJQ0FU SU9OCisgKiBjb21tYW5kLgorICoKKyAqIE5vdGUgdGhhdCBvbmx5IEFMVEVSIFBVQkxJQ0FUSU9O IEFERC9TRVQgc2hvdWxkIGJlIGRlcGFyc2VkIGhlcmUsIEFMVEVSCisgKiBQVUJMSUNBVElPTiBE Uk9QIGlzIGRlcGFyc2VkIGluIGRpZmZlcmVudCBwbGFjZXMuCisgKgorICogWFhYIEFMVEVSIFBV QkxJQ0FUSU9OIFNFVCBwdWJsaWNhdGlvbl9vYmplY3QgaXMgY29udmVydGVkIHRvIEFMVEVSCisg KiBQVUJMSUNBVElPTiBBREQvRFJPUC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIg UFVCTElDQVRJT04gJXtpZGVudGl0eX1JICV7YWRkX29iamVjdH1zCisgKiBPUgorICogQUxURVIg UFVCTElDQVRJT04gJXtpZGVudGl0eX1JICV7c2V0X29wdGlvbnN9cworICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyUHVibGljYXRpb25BZGRTdG10KE9iamVjdEFkZHJlc3Mgb2Jq ZWN0LCBOb2RlICpwYXJzZXRyZWUpCit7CisJY2hhcgkgICAqcHVibmFtZTsKKwlPYmpUcmVlCSAg ICphbHRlcnB1YjsKKwlPYmpUcmVlCSAgICphZGRvYmplY3QgPSBOVUxMOworCU9ialRyZWUJICAg KnNldG9wdGlvbiA9IE5VTEw7CisJQWx0ZXJQdWJsaWNhdGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJQ dWJsaWNhdGlvblN0bXQgKikgcGFyc2V0cmVlOworCisJc3dpdGNoIChvYmplY3QuY2xhc3NJZCkK Kwl7CisJCS8qIEFERCBUQUJMRSAqLworCQljYXNlIFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZDoK KwkJCXsKKwkJCQlPYmpUcmVlCSAgICp3aGVyZWNsYXVzZTsKKwkJCQlPYmpUcmVlCSAgICpjb2x1 bW5saXN0OworCQkJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsIHB1YnJlbGZvcm07CisJCQkJT2lk CQkJcmVsaWQ7CisJCQkJSGVhcFR1cGxlCXR1cDsKKworCQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hl MShQVUJMSUNBVElPTlJFTCwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShvYmplY3Qub2Jq ZWN0SWQpKTsKKworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHVibGljYXRpb24gdGFibGUgJXUiLAorCQkJ CQkJIG9iamVjdC5vYmplY3RJZCk7CisKKwkJCQlwdWJyZWxmb3JtID0gKEZvcm1fcGdfcHVibGlj YXRpb25fcmVsKSBHRVRTVFJVQ1QodHVwKTsKKwkJCQlyZWxpZCA9IHB1YnJlbGZvcm0tPnBycmVs aWQ7CisKKwkJCQlhZGRvYmplY3QgPSBuZXdfb2JqdHJlZV9WQSgiQUREIFRBQkxFICV7dGFibGVu YW1lfUQiLCAxLAorCQkJCQkJCQkJCSAgICJ0YWJsZW5hbWUiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJCSAgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQs IHJlbGlkKSk7CisKKwkJCQljb2x1bW5saXN0ID0gZGVwYXJzZV9QdWJsaWNhdGlvblJlbGF0aW9u Q29sdW1uTGlzdCh0dXApOworCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFkZG9iamVjdCwgIiV7 Y29sdW1uX2xpc3R9cyIsIGNvbHVtbmxpc3QpOworCisJCQkJd2hlcmVjbGF1c2UgPSBkZXBhcnNl X1B1YmxpY2F0aW9uUmVsYXRpb25XaGVyZUNsYXVzZSh0dXApOworCQkJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGFkZG9iamVjdCwgIiV7d2hlcmVfY2xhdXNlfXMiLCB3aGVyZWNsYXVzZSk7CisKKwkJ CQlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIEFERCBUQUJM RVMgSU4gU0NIRU1BICovCisJCWNhc2UgUHVibGljYXRpb25OYW1lc3BhY2VSZWxhdGlvbklkOgor CQkJeworCQkJCUZvcm1fcGdfcHVibGljYXRpb25fbmFtZXNwYWNlIHB1Ym5zcGZvcm07CisJCQkJ SGVhcFR1cGxlCXR1cDsKKworCQkJCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShQVUJMSUNBVElPTk5B TUVTUEFDRSwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShvYmplY3Qub2JqZWN0SWQpKTsK KworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgcHVibGljYXRpb24gc2NoZW1hICV1IiwKKwkJCQkJCSBvYmpl Y3Qub2JqZWN0SWQpOworCisJCQkJcHVibnNwZm9ybSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX25h bWVzcGFjZSkgR0VUU1RSVUNUKHR1cCk7CisKKwkJCQlhZGRvYmplY3QgPSBuZXdfb2JqdHJlZV9W QSgiQUREIFRBQkxFUyBJTiBTQ0hFTUEgJXtzY2hlbWF9SSIsIDEsCisJCQkJCQkJCQkJICAgInNj aGVtYSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJICAgZ2V0X25hbWVzcGFjZV9uYW1lKHB1 Ym5zcGZvcm0tPnBubnNwaWQpKTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJfQor CQkJYnJlYWs7CisKKwkJLyogU0VUIG9wdGlvbiAqLworCQljYXNlIFB1YmxpY2F0aW9uUmVsYXRp b25JZDoKKwkJCXsKKwkJCQlMaXN0CSAgICpvcHRpb25saXN0ID0gTklMOworCQkJCUxpc3RDZWxs ICAgKmNlbGw7CisKKwkJCQlBc3NlcnQobm9kZS0+b3B0aW9ucyAhPSBOSUwpOworCisJCQkJZm9y ZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCQkJCXsKKwkJCQkJT2JqVHJlZSAgICAqdG1wX29i ajsKKwkJCQkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJ CQkJCXRtcF9vYmogPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCQkJCW9wdGlvbmxp c3QgPSBsYXBwZW5kKG9wdGlvbmxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcF9vYmopKTsKKwkJ CQl9CisKKwkJCQlzZXRvcHRpb24gPSBuZXdfb2JqdHJlZV9WQSgiU0VUICgle29wdGlvbnM6LCB9 cykiLCAxLAorCQkJCQkJCQkJCSAgICJvcHRpb25zIiwgT2JqVHlwZUFycmF5LAorCQkJCQkJCQkJ CSAgIG9wdGlvbmxpc3QpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCUFzc2Vy dChmYWxzZSk7CisJCQlicmVhazsKKwl9CisKKwlwdWJuYW1lID0gcHN0cmR1cChub2RlLT5wdWJu YW1lKTsKKworCWFsdGVycHViID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBVQkxJQ0FUSU9OICV7 aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBwdWJu YW1lKTsKKworCUFzc2VydChhZGRvYmplY3QgfHwgc2V0b3B0aW9uKTsKKworCWlmIChhZGRvYmpl Y3QpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGFsdGVycHViLCAiJXthZGRfb2JqZWN0fXMiLCBh ZGRvYmplY3QpOworCWVsc2UKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoYWx0ZXJwdWIsICIle3Nl dF9vcHRpb25zfXMiLCBzZXRvcHRpb24pOworCisJcmV0dXJuIGFsdGVycHViOworfQorCisvKgor ICogSGFuZGxlIGRlcGFyc2luZyBvZiBBTFRFUiBQVUJMSUNBVElPTiBEUk9QIGNvbW1hbmRzLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBQVUJMSUNBVElPTiAle2lkZW50aXR5fUkg JXtkcm9wX29iamVjdH1zCisgKi8KK2NoYXIgKgorZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uRHJv cFN0bXQoU1FMRHJvcE9iamVjdCAqb2JqKQoreworCU9ialRyZWUJICAgKmFsdGVycHViOworCU9i alRyZWUJICAgKmRyb3Bfb2JqZWN0ID0gTlVMTDsKKwljaGFyCQlvYmpuYW1lW05BTUVEQVRBTEVO XTsKKwljaGFyCQlwdWJuYW1lW05BTUVEQVRBTEVOXTsKKwlKc29uYgkgICAqanNvbmI7CisJY2hh cgkgICAqY29tbWFuZDsKKwlTdHJpbmdJbmZvRGF0YSBzdHI7CisKKwlpZiAoc3NjYW5mKG9iai0+ b2JqaWRlbnRpdHksICIlcyBpbiBwdWJsaWNhdGlvbiAlcyIsIG9iam5hbWUsIHB1Ym5hbWUpICE9 IDIpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgcGFyc2UgQUxURVIgUFVCTElDQVRJT04gY29t bWFuZCBcIiVzXCIiLAorCQkJIG9iai0+b2JqaWRlbnRpdHkpOworCisJc3dpdGNoIChnZXRPYmpl Y3RDbGFzcygmb2JqLT5hZGRyZXNzKSkKKwl7CisJCS8qIERST1AgVEFCTEUgKi8KKwkJY2FzZSBP Q0xBU1NfUFVCTElDQVRJT05fUkVMOgorCQkJZHJvcF9vYmplY3QgPSBuZXdfb2JqdHJlZV9WQSgi RFJPUCBUQUJMRSAle3RhYmxlbmFtZX1zIiwgMSwKKwkJCQkJCQkJCQkgInRhYmxlbmFtZSIsIE9i alR5cGVTdHJpbmcsIG9iam5hbWUpOworCQkJYnJlYWs7CisKKwkJLyogRFJPUCBUQUJMRVMgSU4g U0NIRU1BICovCisJCWNhc2UgT0NMQVNTX1BVQkxJQ0FUSU9OX05BTUVTUEFDRToKKwkJCWRyb3Bf b2JqZWN0ID0gbmV3X29ianRyZWVfVkEoIkRST1AgVEFCTEVTIElOIFNDSEVNQSAle3NjaGVtYW5h bWV9cyIsIDEsCisJCQkJCQkJCQkJICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgb2JqbmFt ZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQXNzZXJ0KGZhbHNlKTsKKwkJCWJyZWFr OworCX0KKworCWFsdGVycHViID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFBVQkxJQ0FUSU9OICV7 aWRlbnRpdHl9cyIsIDEsCisJCQkJCQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBwdWJu YW1lKTsKKworCUFzc2VydChkcm9wX29iamVjdCk7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChh bHRlcnB1YiwgIiV7ZHJvcF9vYmplY3R9cyIsIGRyb3Bfb2JqZWN0KTsKKworCWluaXRTdHJpbmdJ bmZvKCZzdHIpOworCWpzb25iID0gb2JqdHJlZV90b19qc29uYihhbHRlcnB1Yik7CisJY29tbWFu ZCA9IEpzb25iVG9DU3RyaW5nKCZzdHIsICZqc29uYi0+cm9vdCwgSlNPTkJfRVNUSU1BVEVEX0xF Tik7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Yg c2ltcGxlIGNvbW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBj YXNlcyBoYW5kbGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lk CQkJb2JqZWN0SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCisJQXNzZXJ0KGNtZC0+dHlwZSA9 PSBTQ1RfU2ltcGxlKTsKKworCXBhcnNldHJlZSA9IGNtZC0+cGFyc2V0cmVlOworCW9iamVjdElk ID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCisJaWYgKGNtZC0+aW5fZXh0ZW5z aW9uICYmIChub2RlVGFnKHBhcnNldHJlZSkgIT0gVF9DcmVhdGVFeHRlbnNpb25TdG10KSkKKwkJ cmV0dXJuIE5VTEw7CisKKwkvKiBUaGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGlu ZyB0aGF0IFByb2Nlc3NVdGlsaXR5U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBhcnNl dHJlZSkpCisJeworCQljYXNlIFRfQWx0ZXJDb2xsYXRpb25TdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQWx0ZXJDb2xsYXRpb24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVy RG9tYWluU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRG9tYWluU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlLAorCQkJCQkJCQkJCSAgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsK KworCQljYXNlIFRfQWx0ZXJFbnVtU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRW51bVN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9uQ29udGVu dHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJFeHRlbnNpb25Db250ZW50c1N0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5 T2JqZWN0KTsKKworCQljYXNlIFRfQWx0ZXJFeHRlbnNpb25TdG10OgorCQkJcmV0dXJuIGRlcGFy c2VfQWx0ZXJFeHRlbnNpb25TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9B bHRlckZkd1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZkd1N0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyRm9yZWlnblNlcnZlclN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlckZ1bmN0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRnVuY3Rp b24ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0RGVwZW5kc1N0 bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQob2JqZWN0SWQsIHBhcnNldHJl ZSk7CisKKwkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0FsdGVyT2JqZWN0U2NoZW1hU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsCisJCQkJCQkJCQkJ CQkgcGFyc2V0cmVlLAorCQkJCQkJCQkJCQkJIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0 KTsKKworCQljYXNlIFRfQWx0ZXJPcGVyYXRvclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRl ck9wZXJhdG9yU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJPd25l clN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFk ZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyUG9saWN5U3RtdDoKKwkJCXJldHVy biBkZXBhcnNlX0FsdGVyUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQWx0ZXJTZXFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclN0YXRzU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0FsdGVyU3RhdHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRl clRTRGljdGlvbmFyeVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclRTRGljdGlvbmFyeVN0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVyVHlwZVN0bXQ6CisJCQly ZXR1cm4gZGVwYXJzZV9BbHRlclR5cGVTZXRTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJ CWNhc2UgVF9BbHRlclVzZXJNYXBwaW5nU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyVXNl ck1hcHBpbmdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9Db21tZW50U3Rt dDoKKwkJCXJldHVybiBkZXBhcnNlX0NvbW1lbnRTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ29tcG9zaXRlVHlwZVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9Db21wb3NpdGVUeXBlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf Q3JlYXRlQW1TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlQW1TdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVDYXN0U3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZUNhc3RTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVD b252ZXJzaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUNvbnZlcnNpb24ob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZURvbWFpblN0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9DcmVhdGVEb21haW4ob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZUVudW1TdG10OgkvKiBDUkVBVEUgVFlQRSBBUyBFTlVNICovCisJCQlyZXR1cm4gZGVwYXJz ZV9DcmVhdGVFbnVtU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl RXh0ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUV4dGVuc2lvblN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZUZkd1N0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9DcmVhdGVGZHdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9D cmVhdGVGb3JlaWduU2VydmVyU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUZvcmVpZ25T ZXJ2ZXJTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGdW5jdGlv blN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0 cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlT3BGYW1pbHlTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlT3BGYW1pbHkob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVBM YW5nU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUxhbmdTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVQb2xpY3lTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlUG9saWN5U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRl UmFuZ2VTdG10OiAvKiBDUkVBVEUgVFlQRSBBUyBSQU5HRSAqLworCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlUmFuZ2VTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVT Y2hlbWFTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCXJldHVybiBkZXBhcnNl X0NyZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVN0 YXRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0YXRpc3RpY3NTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf Q3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRm9yZWln blRhYmxlU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUZvcmVpZ25UYWJsZVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVRhYmxlQXNTdG10OgkvKiBDUkVB VEUgTUFURVJJQUxJWkVEIFZJRVcgKi8KKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNT dG10X3ZhbmlsbGEob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVRyYW5z Zm9ybVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVUcmFuc2Zvcm1TdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVUcmlnU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZVRyaWdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVh dGVVc2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVVc2VyTWFwcGluZ1N0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0RlZmluZVN0bXQ6CisJCQlyZXR1 cm4gZGVwYXJzZV9EZWZpbmVTdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkgIGNt ZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNlIFRfSW5kZXhTdG10OgorCQkJ cmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9SZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0 bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQlyZXR1 cm4gZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfUnVsZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9SdWxlU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfVmlld1N0bXQ6CQkvKiBDUkVBVEUgVklFVyAqLwor CQkJcmV0dXJuIGRlcGFyc2VfVmlld1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0NyZWF0ZVB1YmxpY2F0aW9uU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVB1Ymxp Y2F0aW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJQdWJsaWNh dGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uQWRkU3RtdChjbWQt PmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coTE9H LCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1hbmQ6ICVkIiwKKwkJCQkg KGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoK KyAqIFdvcmtob3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqLworY2hhciAq CitkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJvb2wgdmVy Ym9zZV9tb2RlKQoreworCU92ZXJyaWRlU2VhcmNoUGF0aCAqb3ZlcnJpZGVQYXRoOworCU1lbW9y eUNvbnRleHQgb2xkY3h0OworCU1lbW9yeUNvbnRleHQgdG1wY3h0OworCU9ialRyZWUgICAgKnRy ZWU7CisJY2hhcgkgICAqY29tbWFuZCA9IE5VTEw7CisJU3RyaW5nSW5mb0RhdGEgc3RyOworCisJ LyoKKwkgKiBBbGxvY2F0ZSBldmVyeXRoaW5nIGRvbmUgYnkgdGhlIGRlcGFyc2luZyByb3V0aW5l cyBpbnRvIGEgdGVtcCBjb250ZXh0LAorCSAqIHRvIGF2b2lkIGhhdmluZyB0byBzcHJpbmtsZSB0 aGVtIHdpdGggbWVtb3J5IGhhbmRsaW5nIGNvZGUsIGJ1dAorCSAqIGFsbG9jYXRlIHRoZSBvdXRw dXQgU3RyaW5nSW5mbyBiZWZvcmUgc3dpdGNoaW5nLgorCSAqLworCWluaXRTdHJpbmdJbmZvKCZz dHIpOworCXRtcGN4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4 dCwKKwkJCQkJCQkJICAgImRlcGFyc2UgY3R4IiwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVM VF9NSU5TSVpFLAorCQkJCQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX0lOSVRTSVpFLAorCQkJCQkJ CQkgICBBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyh0bXBjeHQpOworCisJLyoKKwkgKiBNYW55IHJvdXRpbmVzIHVuZGVybHlpbmcgdGhp cyBvbmUgd2lsbCBpbnZva2UgcnVsZXV0aWxzLmMgZnVuY3Rpb25hbGl0eQorCSAqIHRvIG9idGFp biBkZXBhcnNlZCB2ZXJzaW9ucyBvZiBleHByZXNzaW9ucy4gIEluIHN1Y2ggcmVzdWx0cywgd2Ug d2FudAorCSAqIGFsbCBvYmplY3QgbmFtZXMgdG8gYmUgcXVhbGlmaWVkLCBzbyB0aGF0IHJlc3Vs dHMgYXJlICJwb3J0YWJsZSIgdG8KKwkgKiBlbnZpcm9ubWVudHMgd2l0aCBkaWZmZXJlbnQgc2Vh cmNoX3BhdGggc2V0dGluZ3MuICBSYXRoZXIgdGhhbiBpbmplY3QKKwkgKiB3aGF0IHdvdWxkIGJl IHJlcGV0aXRpdmUgY2FsbHMgdG8gb3ZlcnJpZGUgc2VhcmNoIHBhdGggYWxsIG92ZXIgdGhlCisJ ICogcGxhY2UsIHdlIGRvIGl0IGNlbnRyYWxseSBoZXJlLgorCSAqLworCW92ZXJyaWRlUGF0aCA9 IEdldE92ZXJyaWRlU2VhcmNoUGF0aChDdXJyZW50TWVtb3J5Q29udGV4dCk7CisJb3ZlcnJpZGVQ YXRoLT5zY2hlbWFzID0gTklMOworCW92ZXJyaWRlUGF0aC0+YWRkQ2F0YWxvZyA9IGZhbHNlOwor CW92ZXJyaWRlUGF0aC0+YWRkVGVtcCA9IHRydWU7CisJUHVzaE92ZXJyaWRlU2VhcmNoUGF0aChv dmVycmlkZVBhdGgpOworCisJdmVyYm9zZSA9IHZlcmJvc2VfbW9kZTsKKworCXN3aXRjaCAoY21k LT50eXBlKQogCXsKIAkJY2FzZSBTQ1RfU2ltcGxlOgogCQkJdHJlZSA9IGRlcGFyc2Vfc2ltcGxl X2NvbW1hbmQoY21kKTsKQEAgLTM1NTEsOSArMTAwNTgsMjcgQEAgZGVwYXJzZV91dGlsaXR5X2Nv bW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAkJY2FzZSBT Q1RfQWx0ZXJUYWJsZToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyUmVsYXRpb24oY21kKTsKIAkJ CWJyZWFrOworCQljYXNlIFNDVF9HcmFudDoKKwkJCXRyZWUgPSBkZXBhcnNlX0dyYW50U3RtdChj bWQpOworCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQl0cmVlID0gZGVw YXJzZV9DcmVhdGVUYWJsZUFzU3RtdChjbWQpOwogCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVy T3BGYW1pbHk6CisJCQl0cmVlID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVh azsKKwkJY2FzZSBTQ1RfQ3JlYXRlT3BDbGFzczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9w Q2xhc3NTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJEZWZhdWx0UHJpdmls ZWdlczoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10KGNtZCk7 CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUgPSBkZXBhcnNl X0FsdGVyVFNDb25maWd1cmF0aW9uU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX1Nl Y3VyaXR5TGFiZWw6CisJCQl0cmVlID0gZGVwYXJzZV9TZWNMYWJlbFN0bXQoY21kKTsKKwkJCWJy ZWFrOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2Rl IHR5cGUgJWQiLCBjbWQtPnR5cGUpOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3Av ZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaAppbmRleCAxYTI3 MDJjNWFjLi5lMjYxYTNlNjIxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBh cnNlLmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0xMiwxMSArMTIs MTMgQEAKICNpZm5kZWYgRERMX0RFUEFSU0VfSAogI2RlZmluZSBERExfREVQQVJTRV9ICiAKKyNp bmNsdWRlICJjb21tYW5kcy9ldmVudF90cmlnZ2VyLmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNl X3V0aWxpdHkuaCIKIAogZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxl Y3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2ZXJib3NlX21vZGUpOwogZXh0ZXJuIGNoYXIgKmRlcGFy c2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKIGV4dGVybiBjaGFyICpkZXBhcnNl X2Ryb3BfY29tbWFuZChjb25zdCBjaGFyICpvYmppZGVudGl0eSwgY29uc3QgY2hhciAqb2JqZWN0 dHlwZSwKIAkJCQkJCQkJICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworZXh0ZXJuIGNoYXIgKiBk ZXBhcnNlX0FsdGVyUHVibGljYXRpb25Ecm9wU3RtdChTUUxEcm9wT2JqZWN0ICpvYmopOwogCiAj ZW5kaWYJCQkJCQkJLyogRERMX0RFUEFSU0VfSCAqLwotLSAKMi4zNC4xCgo= --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0008-Allow-replicated-objects-to-have-the-same-owner-.patch" Content-Disposition: attachment; filename="v77-0008-Allow-replicated-objects-to-have-the-same-owner-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69dk7 RnJvbSBkYjNkY2E3NzZhMTA0Y2QzYjAzMGQ3ZTkyYzEwOGIyM2Q2YTE1ZTU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgNiBNYXIgMjAyMyAwMToyNDo0MiAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDgvOF0gQWxsb3cgcmVwbGljYXRlZCBvYmplY3RzIHRvIGhhdmUgdGhlIHNhbWUgb3duZXIg ZnJvbQogdGhlIHB1Ymxpc2hlci4gU3BlY2lmaWNhbGx5LCB0aGUgY2hhbmdlcyBpbmNsdWRlOgoK MS4gQ2hhbmdlIGV2ZW50IHRyaWdnZXIgZnVuY3Rpb25zIHRvIGNvbGxlY3QgdGhlIGN1cnJlbnQg cm9sZSBpbiBDb2xsZWN0ZWRDb21tYW5kLgoKMi4gQ2hhbmdlIERlcGFyc2VyIGZ1bmN0aW9uIGRl cGFyc2VfdXRpbGl0eV9jb21tYW5kIHRvIGVuY29kZSBvd25lciByb2xlIGluIHRoZSB0b3AtbGV2 ZWwKZWxlbWVudCBzdWNoIGFzIHtteW93bmVyOnJvbGVfbmFtZSwgZm10Oi4uLiwgaWRlbnRpdHk6 Li4ufSBvZiB0aGUgZGVwYXJzZWQganNvbmIgb3V0cHV0CmZvciBjb21tYW5kcyB0aGF0IGNyZWF0 ZSBkYXRhYmFzZSBvYmplY3RzLiBBbHNvIGNoYW5nZSBmdW5jdGlvbiBkZXBhcnNlX2RkbF9qc29u X3RvX3N0cmluZwp0byByZXRyaWV2ZSB0aGUgbXlvd25lciBlbGVtZW50IGZyb20gYSBqc29uYiBz dHJpbmcuCgozLiBJbnRyb2R1Y2UgYSBuZXcgc3Vic2NyaXB0aW9uIG9wdGlvbiBtYXRjaF9kZGxf b3duZXI6IHdoZW4gdHVybmVkIG9uLCB0aGUgYXBwbHkgd29ya2VyCndpbGwgYXBwbHkgRERMIG1l c3NhZ2VzIGluIHRoZSByb2xlIHJldHJpZXZlZCBmcm9tIHRoZSAibXlvd25lciIgZmllbGQgb2Yg dGhlIGRlcGFyc2VkCmpzb25iIHN0cmluZy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgbWF0Y2hfZGRs X293bmVyIGlzIG9uLgotLS0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMg ICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jICAgICAg ICAgICAgfCAgODYgKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMg ICAgICAgICAgICAgICB8ICAyNSArKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYyAgICAgICAgICB8ICAgNiArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25j bWRzLmMgICAgICAgfCAgMjcgKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9k ZGx0cmlnZ2VyLmMgIHwgICA2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dv cmtlci5jICAgICAgfCAgMjIgKystCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAg ICAgICAgICAgICAgfCAgMTYgKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmggICAgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDggKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgg ICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgICAg ICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgICAg ICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQg ICAgfCAxNDQgKysrKysrKysrLS0tLS0tLS0tCiAuLi4vc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9y ZXBsaWNhdGlvbi5wbCAgICAgfCAgMTcgKysrCiAxNSBmaWxlcyBjaGFuZ2VkLCAyNjkgaW5zZXJ0 aW9ucygrKSwgMTAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfc3Vic2NyaXB0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3N1YnNjcmlwdGlv bi5jCmluZGV4IGE1NmFlMzExYzMuLjAyMmFhYjBmYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19z dWJzY3JpcHRpb24uYwpAQCAtNzEsNiArNzEsNyBAQCBHZXRTdWJzY3JpcHRpb24oT2lkIHN1Ymlk LCBib29sIG1pc3Npbmdfb2spCiAJc3ViLT5zdHJlYW0gPSBzdWJmb3JtLT5zdWJzdHJlYW07CiAJ c3ViLT50d29waGFzZXN0YXRlID0gc3ViZm9ybS0+c3VidHdvcGhhc2VzdGF0ZTsKIAlzdWItPmRp c2FibGVvbmVyciA9IHN1YmZvcm0tPnN1YmRpc2FibGVvbmVycjsKKwlzdWItPm1hdGNoZGRsb3du ZXIgPSBzdWJmb3JtLT5zdWJtYXRjaGRkbG93bmVyOwogCiAJLyogR2V0IGNvbm5pbmZvICovCiAJ ZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoU1VCU0NSSVBUSU9OT0lELApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Rk bF9kZXBhcnNlLmMKaW5kZXggNGUyZDM4OGUyNy4uODAxZWQ2ZGZlYSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfZGVwYXJzZS5jCkBAIC0xNzIsNyArMTcyLDcgQEAgc3RhdGljIE9iakVsZW0gKm5ld19v YmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVlKTsKIHN0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJl ZV9WQShjaGFyICpmbXQsIGludCBudW1vYmpzLC4uLik7CiBzdGF0aWMgT2JqVHJlZSAqbmV3X29i anRyZWUoY2hhciAqZm10KTsKIHN0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFy ICp2YWx1ZSk7Ci1zdGF0aWMgSnNvbmJWYWx1ZSAqb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJl ZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSk7CitzdGF0aWMgSnNvbmJWYWx1ZSAqb2Jq dHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwg Y2hhciAqb3duZXIpOwogc3RhdGljIHZvaWQgcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBp bmRleHJlbGlkLAogCQkJCQkJCQkJIGNoYXIgKippbmRleF9hbSwKIAkJCQkJCQkJCSBjaGFyICoq ZGVmaW5pdGlvbiwKQEAgLTk5NiwxNCArOTk2LDM5IEBAIG9ianRyZWVfZm10X3RvX2pzb25iX2Vs ZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqVHJlZSAqdHJlZSkKIH0KIAogLyoKLSAq IENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZS4KKyAqIFByb2Nl c3MgdGhlIHJvbGUgc3RyaW5nIGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4KKyAqLworc3Rh dGljIHZvaWQKK3JvbGVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3RhdGUgKnN0YXRlLCBj aGFyICpvd25lcikKK3sKKwlKc29uYlZhbHVlCWtleTsKKwlKc29uYlZhbHVlCXZhbDsKKworCWlm IChvd25lciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8K KwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSAibXlvd25lciI7 CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtleS52YWwuc3RyaW5nLnZhbCk7CisJcHVz aEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5KTsKKworCS8qIFRoZW4gcHJvY2VzcyB0 aGUgcm9sZSBzdHJpbmcgKi8KKwl2YWwudHlwZSA9IGpidlN0cmluZzsKKwl2YWwudmFsLnN0cmlu Zy5sZW4gPSBzdHJsZW4ob3duZXIpOworCXZhbC52YWwuc3RyaW5nLnZhbCA9IG93bmVyOworCXB1 c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX1ZBTFVFLCAmdmFsKTsKK30KKworLyoKKyAqIENyZWF0 ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9uIGZyb20gYW4gT2JqVHJlZSBhbmQgaXRzIG93bmVyIChp ZiBnaXZlbikuCiAgKi8KIHN0YXRpYyBKc29uYiAqCi1vYmp0cmVlX3RvX2pzb25iKE9ialRyZWUg KnRyZWUpCitvYmp0cmVlX3RvX2pzb25iKE9ialRyZWUgKnRyZWUsIGNoYXIgKm93bmVyKQogewog CUpzb25iVmFsdWUgKnZhbHVlOwogCi0JdmFsdWUgPSBvYmp0cmVlX3RvX2pzb25iX3JlYyh0cmVl LCBOVUxMKTsKKwl2YWx1ZSA9IG9ianRyZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwsIG93bmVy KTsKIAlyZXR1cm4gSnNvbmJWYWx1ZVRvSnNvbmIodmFsdWUpOwogfQogCkBAIC0xMDU1LDcgKzEw ODAsNyBAQCBvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwg T2JqRWxlbSAqb2JqZWN0LAogCiAJCWNhc2UgT2JqVHlwZU9iamVjdDoKIAkJCS8qIFJlY3Vyc2l2 ZWx5IGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCi0JCQlv Ymp0cmVlX3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJb2Jq dHJlZV90b19qc29uYl9yZWMob2JqZWN0LT52YWx1ZS5vYmplY3QsIHN0YXRlLCBOVUxMKTsKIAkJ CWJyZWFrOwogCiAJCWNhc2UgT2JqVHlwZUFycmF5OgpAQCAtMTA4MywxMiArMTEwOCwxMyBAQCBv Ymp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwgT2JqRWxlbSAq b2JqZWN0LAogICogUmVjdXJzaXZlIGhlbHBlciBmb3Igb2JqdHJlZV90b19qc29uYi4KICAqLwog c3RhdGljIEpzb25iVmFsdWUgKgotb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJlZSAqdHJlZSwg SnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK29ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRy ZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUsIGNoYXIgKm93bmVyKQogewogCXNsaXN0X2l0ZXIJ aXRlcjsKIAogCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX09CSkVDVCwgTlVMTCk7 CiAKKwlyb2xlX3RvX2pzb25iX2VsZW1lbnQoc3RhdGUsIG93bmVyKTsKIAlvYmp0cmVlX2ZtdF90 b19qc29uYl9lbGVtZW50KHN0YXRlLCB0cmVlKTsKIAogCXNsaXN0X2ZvcmVhY2goaXRlciwgJnRy ZWUtPnBhcmFtcykKQEAgLTM3MTIsNyArMzczOCw3IEBAIGRlcGFyc2VfZHJvcF9jb21tYW5kKGNv bnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmplY3R0eXBlLAogCQkJCQkJCSJw cmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CiAJYXBwZW5k X29iamVjdF9vYmplY3Qoc3RtdCwgIiV7Y2FzY2FkZX1zIiwgdG1wX29iaik7CiAKLQlqc29uYiA9 IG9ianRyZWVfdG9fanNvbmIoc3RtdCk7CisJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHN0bXQs IE5VTEwgLyogT3duZXIvcm9sZSBjYW4gYmUgc2tpcHBlZCBmb3IgZHJvcCBjb21tYW5kICovKTsK IAljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJ TUFURURfTEVOKTsKIAogCXJldHVybiBjb21tYW5kOwpAQCAtOTgxNyw3ICs5ODQzLDcgQEAgZGVw YXJzZV9BbHRlclB1YmxpY2F0aW9uRHJvcFN0bXQoU1FMRHJvcE9iamVjdCAqb2JqKQogCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KGFsdGVycHViLCAiJXtkcm9wX29iamVjdH1zIiwgZHJvcF9vYmplY3Qp OwogCiAJaW5pdFN0cmluZ0luZm8oJnN0cik7Ci0JanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKGFs dGVycHViKTsKKwlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIoYWx0ZXJwdWIsIE5VTEwgLyogT3du ZXIvcm9sZSBjYW4gYmUgc2tpcHBlZCBmb3IgZHJvcCBjb21tYW5kICovKTsKIAljb21tYW5kID0g SnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCBKU09OQl9FU1RJTUFURURfTEVOKTsK IAogCXJldHVybiBjb21tYW5kOwpAQCAtOTgyOSw3ICs5ODU1LDcgQEAgZGVwYXJzZV9BbHRlclB1 YmxpY2F0aW9uRHJvcFN0bXQoU1FMRHJvcE9iamVjdCAqb2JqKQogICogVGhpcyBmdW5jdGlvbiBz aG91bGQgY292ZXIgYWxsIGNhc2VzIGhhbmRsZWQgaW4gUHJvY2Vzc1V0aWxpdHlTbG93LgogICov CiBzdGF0aWMgT2JqVHJlZSAqCi1kZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1h bmQgKmNtZCkKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBi b29sICppbmNsdWRlX293bmVyKQogewogCU9pZAkJCW9iamVjdElkOwogCU5vZGUJICAgKnBhcnNl dHJlZTsKQEAgLTk4NDYsNjQgKzk4NzIsODMgQEAgZGVwYXJzZV9zaW1wbGVfY29tbWFuZChDb2xs ZWN0ZWRDb21tYW5kICpjbWQpCiAJc3dpdGNoIChub2RlVGFnKHBhcnNldHJlZSkpCiAJewogCQlj YXNlIFRfQWx0ZXJDb2xsYXRpb25TdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJ CXJldHVybiBkZXBhcnNlX0FsdGVyQ29sbGF0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOwogCiAJ CWNhc2UgVF9BbHRlckRvbWFpblN0bXQ6CisJCQkqaW5jbHVkZV9vd25lciA9IGZhbHNlOwogCQkJ cmV0dXJuIGRlcGFyc2VfQWx0ZXJEb21haW5TdG10KG9iamVjdElkLCBwYXJzZXRyZWUsCiAJCQkJ CQkJCQkJICAgY21kLT5kLnNpbXBsZS5zZWNvbmRhcnlPYmplY3QpOwogCiAJCWNhc2UgVF9BbHRl ckVudW1TdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBhcnNl X0FsdGVyRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CiAKIAkJY2FzZSBUX0FsdGVyRXh0 ZW5zaW9uQ29udGVudHNTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVy biBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUs CiAJCQkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CiAKIAkJY2Fz ZSBUX0FsdGVyRXh0ZW5zaW9uU3RtdDoKKwkJCSppbmNsdWRlX293bmVyID0gZmFsc2U7CiAJCQly ZXR1cm4gZGVwYXJzZV9BbHRlckV4dGVuc2lvblN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CiAK IAkJY2FzZSBUX0FsdGVyRmR3U3RtdDoKKwkJCSppbmNsdWRlX293bmVyID0gZmFsc2U7CiAJCQly ZXR1cm4gZGVwYXJzZV9BbHRlckZkd1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CiAKIAkJY2Fz ZSBUX0FsdGVyRm9yZWlnblNlcnZlclN0bXQ6CisJCQkqaW5jbHVkZV9vd25lciA9IGZhbHNlOwog CQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0 cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJCQkqaW5jbHVkZV9vd25lciA9 IGZhbHNlOwogCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGdW5jdGlvbihvYmplY3RJZCwgcGFyc2V0 cmVlKTsKIAogCQljYXNlIFRfQWx0ZXJPYmplY3REZXBlbmRzU3RtdDoKKwkJCSppbmNsdWRlX293 bmVyID0gZmFsc2U7CiAJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRlcGVuZFN0bXQob2JqZWN0SWQs IHBhcnNldHJlZSk7CiAKIAkJY2FzZSBUX0FsdGVyT2JqZWN0U2NoZW1hU3RtdDoKKwkJCSppbmNs dWRlX293bmVyID0gZmFsc2U7CiAJCQlyZXR1cm4gZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0 bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAogCQkJCQkJCQkJCQkJIHBhcnNldHJlZSwKIAkJCQkJ CQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVjdCk7CiAKIAkJY2FzZSBUX0FsdGVy T3BlcmF0b3JTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVybiBkZXBh cnNlX0FsdGVyT3BlcmF0b3JTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwogCiAJCWNhc2UgVF9B bHRlck93bmVyU3RtdDoKKwkJCSppbmNsdWRlX293bmVyID0gZmFsc2U7CiAJCQlyZXR1cm4gZGVw YXJzZV9BbHRlck93bmVyU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CiAK IAkJY2FzZSBUX0FsdGVyUG9saWN5U3RtdDoKKwkJCSppbmNsdWRlX293bmVyID0gZmFsc2U7CiAJ CQlyZXR1cm4gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CiAK IAkJY2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCSppbmNsdWRlX293bmVyID0gZmFsc2U7CiAJCQly ZXR1cm4gZGVwYXJzZV9BbHRlclNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CiAKIAkJY2Fz ZSBUX0FsdGVyU3RhdHNTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsKIAkJCXJldHVy biBkZXBhcnNlX0FsdGVyU3RhdHNTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOwogCiAJCWNhc2Ug VF9BbHRlclRTRGljdGlvbmFyeVN0bXQ6CisJCQkqaW5jbHVkZV9vd25lciA9IGZhbHNlOwogCQkJ cmV0dXJuIGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OwogCiAJCWNhc2UgVF9BbHRlclR5cGVTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsK IAkJCXJldHVybiBkZXBhcnNlX0FsdGVyVHlwZVNldFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7 CiAKIAkJY2FzZSBUX0FsdGVyVXNlck1hcHBpbmdTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBm YWxzZTsKIAkJCXJldHVybiBkZXBhcnNlX0FsdGVyVXNlck1hcHBpbmdTdG10KG9iamVjdElkLCBw YXJzZXRyZWUpOwogCiAJCWNhc2UgVF9Db21tZW50U3RtdDoKKwkJCSppbmNsdWRlX293bmVyID0g ZmFsc2U7CiAJCQlyZXR1cm4gZGVwYXJzZV9Db21tZW50U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJl c3MsIHBhcnNldHJlZSk7CiAKIAkJY2FzZSBUX0NvbXBvc2l0ZVR5cGVTdG10OgpAQCAtOTk4Myw5 ICsxMDAyOCwxMSBAQCBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNt ZCkKIAkJCXJldHVybiBkZXBhcnNlX0luZGV4U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKIAog CQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgorCQkJKmluY2x1ZGVfb3duZXIgPSBmYWxzZTsK IAkJCXJldHVybiBkZXBhcnNlX1JlZnJlc2hNYXRWaWV3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVl KTsKIAogCQljYXNlIFRfUmVuYW1lU3RtdDoKKwkJCSppbmNsdWRlX293bmVyID0gZmFsc2U7CiAJ CQlyZXR1cm4gZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0 cmVlKTsKIAogCQljYXNlIFRfUnVsZVN0bXQ6CkBAIC0xMDAxMCw5ICsxMDA1NywxNSBAQCBkZXBh cnNlX3NpbXBsZV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAogLyoKICAqIFdvcmto b3JzZSB0byBkZXBhcnNlIGEgQ29sbGVjdGVkQ29tbWFuZC4KKyAqCisgKiBpbmNsdWRlX293bmVy IGluZGljYXRlcyBpZiB0aGUgb3duZXIvcm9sZSBvZiB0aGUgY29tbWFuZCBzaG91bGQgYmUKKyAq IGluY2x1ZGVkIGluIHRoZSBkZXBhcnNlZCBKc29uIG91dHB1dC4gSXQgaXMgc2V0IHRvIGZhbHNl IGZvciBhbnkgY29tbWFuZHMKKyAqIHRoYXQgZG9uJ3QgQ1JFQVRFIGRhdGFiYXNlIG9iamVjdHMg KEFMVEVSIGNvbW1hbmRzIGZvciBleGFtcGxlKSwgdGhpcyBpcworICogdG8gYXZvaWQgZW5jb2Rp bmcgYW5kIHNlbmRpbmcgdGhlIG93bmVyIHRvIGRvd25zdHJlYW0gZm9yIHJlcGxheSBhcyBpdCBp cworICogdW5uZWNlc3NhcnkgZm9yIHN1Y2ggY29tbWFuZHMuCiAgKi8KIGNoYXIgKgotZGVwYXJz ZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9k ZSkKK2RlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCBp bmNsdWRlX293bmVyLCBib29sIHZlcmJvc2VfbW9kZSkKIHsKIAlPdmVycmlkZVNlYXJjaFBhdGgg Km92ZXJyaWRlUGF0aDsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKQEAgLTEwMDUzLDMwICsxMDEw NiwzNiBAQCBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQsIGJv b2wgdmVyYm9zZV9tb2RlKQogCXN3aXRjaCAoY21kLT50eXBlKQogCXsKIAkJY2FzZSBTQ1RfU2lt cGxlOgotCQkJdHJlZSA9IGRlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCXRyZWUgPSBk ZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCwgJmluY2x1ZGVfb3duZXIpOwogCQkJYnJlYWs7CiAJ CWNhc2UgU0NUX0FsdGVyVGFibGU6CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlclJlbGF0aW9uKGNt ZCk7CisJCQlpbmNsdWRlX293bmVyID0gZmFsc2U7CiAJCQlicmVhazsKIAkJY2FzZSBTQ1RfR3Jh bnQ6CiAJCQl0cmVlID0gZGVwYXJzZV9HcmFudFN0bXQoY21kKTsKKwkJCWluY2x1ZGVfb3duZXIg PSBmYWxzZTsKIAkJCWJyZWFrOwogCQljYXNlIFNDVF9DcmVhdGVUYWJsZUFzOgogCQkJdHJlZSA9 IGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoY21kKTsKIAkJCWJyZWFrOwogCQljYXNlIFNDVF9B bHRlck9wRmFtaWx5OgorCQkJaW5jbHVkZV9vd25lciA9IGZhbHNlOwogCQkJdHJlZSA9IGRlcGFy c2VfQWx0ZXJPcEZhbWlseShjbWQpOwogCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xh c3M6CiAJCQl0cmVlID0gZGVwYXJzZV9DcmVhdGVPcENsYXNzU3RtdChjbWQpOwogCQkJYnJlYWs7 CiAJCWNhc2UgU0NUX0FsdGVyRGVmYXVsdFByaXZpbGVnZXM6CisJCQlpbmNsdWRlX293bmVyID0g ZmFsc2U7CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdChjbWQp OwogCQkJYnJlYWs7CiAJCWNhc2UgU0NUX0FsdGVyVFNDb25maWc6CisJCQlpbmNsdWRlX293bmVy ID0gZmFsc2U7CiAJCQl0cmVlID0gZGVwYXJzZV9BbHRlclRTQ29uZmlndXJhdGlvblN0bXQoY21k KTsKIAkJCWJyZWFrOwogCQljYXNlIFNDVF9TZWN1cml0eUxhYmVsOgorCQkJaW5jbHVkZV9vd25l ciA9IGZhbHNlOwogCQkJdHJlZSA9IGRlcGFyc2VfU2VjTGFiZWxTdG10KGNtZCk7CiAJCQlicmVh azsKIAkJZGVmYXVsdDoKQEAgLTEwMDg5LDcgKzEwMTQ4LDggQEAgZGVwYXJzZV91dGlsaXR5X2Nv bW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKIAl7CiAJCUpz b25iCSAgICpqc29uYjsKIAotCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWpz b25iID0gaW5jbHVkZV9vd25lciA/IG9ianRyZWVfdG9fanNvbmIodHJlZSwgY21kLT5yb2xlKSA6 CisJCQkJCQkJCW9ianRyZWVfdG9fanNvbmIodHJlZSwgTlVMTCk7CiAJCWNvbW1hbmQgPSBKc29u YlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOwogCX0K IApAQCAtMTAxMTUsNyArMTAxNzUsNyBAQCBkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZVTkNUSU9O X0FSR1MpCiAJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1hbmQgKikgUEdf R0VUQVJHX1BPSU5URVIoMCk7CiAJY2hhcgkgICAqY29tbWFuZDsKIAotCWNvbW1hbmQgPSBkZXBh cnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCWNvbW1hbmQgPSBkZXBhcnNlX3V0aWxp dHlfY29tbWFuZChjbWQsIGZhbHNlLCB0cnVlKTsKIAogCWlmIChjb21tYW5kKQogCQlQR19SRVRV Uk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChjb21tYW5kKSk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9kZGxfanNvbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24u YwppbmRleCA1MzZjNmQ4YTYwLi4zOGIyZDkwMzkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9kZGxfanNvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMK QEAgLTcxOSw3ICs3MTksNyBAQCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNo YXIgKnBhcmFtLAogICogV29ya2hvcnNlIGZvciBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZC4K ICAqLwogY2hhciAqCi1kZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uX3N0cikK K2RlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25fc3RyLCBjaGFyKiogb3duZXIp CiB7CiAJRGF0dW0JCWQ7CiAJSnNvbmIJICAgKmpzb25iOwpAQCAtNzMwLDYgKzczMCwyNyBAQCBk ZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uX3N0cikKIAlkID0gRGlyZWN0RnVu Y3Rpb25DYWxsMShqc29uYl9pbiwgUG9pbnRlckdldERhdHVtKGpzb25fc3RyKSk7CiAJanNvbmIg PSAoSnNvbmIgKikgRGF0dW1HZXRQb2ludGVyKGQpOwogCisJaWYgKG93bmVyICE9IE5VTEwpCisJ eworCQljb25zdCBjaGFyICprZXkgPSAibXlvd25lciI7CisJCUpzb25iVmFsdWUgKnZhbHVlOwor CisJCXZhbHVlID0gZ2V0S2V5SnNvblZhbHVlRnJvbUNvbnRhaW5lcigmanNvbmItPnJvb3QsIGtl eSwgc3RybGVuKGtleSksIE5VTEwpOworCQlpZiAodmFsdWUpCisJCXsKKwkJCWNoYXIgKnN0cjsK KworCQkJLyogdmFsdWUtPnZhbC5zdHJpbmcudmFsIG1heSBub3QgYmUgTlVMTCB0ZXJtaW5hdGVk ICovCisJCQlzdHIgPSBwYWxsb2ModmFsdWUtPnZhbC5zdHJpbmcubGVuICsgMSk7CisJCQltZW1j cHkoc3RyLCB2YWx1ZS0+dmFsLnN0cmluZy52YWwsIHZhbHVlLT52YWwuc3RyaW5nLmxlbik7CisJ CQlzdHJbdmFsdWUtPnZhbC5zdHJpbmcubGVuXSA9ICdcMCc7CisJCQkqb3duZXIgPSBzdHI7CisJ CX0KKwkJZWxzZQorCQkJLyogbXlvd25lciBpcyBub3QgZ2l2ZW4gaW4gdGhpcyBqc29uYiwgZS5n LiBmb3IgRHJvcCBDb21tYW5kcyAqLworCQkJKm93bmVyID0gTlVMTDsKKwl9CisKIAlleHBhbmRf Zm10X3JlY3Vyc2l2ZShidWYsICZqc29uYi0+cm9vdCk7CiAKIAlyZXR1cm4gYnVmLT5kYXRhOwpA QCAtNzY2LDcgKzc4Nyw3IEBAIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kKFBHX0ZVTkNUSU9O X0FSR1MpCiAKIAlqc29uX3N0ciA9IHRleHRfdG9fY3N0cmluZyhqc29uKTsKIAotCVBHX1JFVFVS Tl9URVhUX1AoY3N0cmluZ190b190ZXh0KGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKGpzb25f c3RyKSkpOworCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGRlcGFyc2VfZGRsX2pz b25fdG9fc3RyaW5nKGpzb25fc3RyLCBOVUxMKSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5jCmluZGV4IGIzZjY4NDkwMDUuLjI3NWM0MDAwYzYgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYworKysgYi9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTg4Miw2ICs4ODIsNyBAQCBFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1hbmQtPnR5cGUgPSAo c3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpID8gU0NUX0NyZWF0ZVRhYmxlQXMgOiBTQ1Rf U2ltcGxlOwogCWNvbW1hbmQtPmluX2V4dGVuc2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwlj b21tYW5kLT5yb2xlID0gR2V0VXNlck5hbWVGcm9tSWQoR2V0VXNlcklkKCksIGZhbHNlKTsKIAlj b21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNzOwogCWNvbW1hbmQt PmQuY3Rhcy5yZWFsX2NyZWF0ZSA9IE5VTEw7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gY29weU9i amVjdChwYXJzZXRyZWUpOwpAQCAtMTYyNyw2ICsxNjI4LDcgQEAgRXZlbnRUcmlnZ2VyQ29sbGVj dFNpbXBsZUNvbW1hbmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAogCiAJY29tbWFuZC0+dHlwZSA9 IFNDVF9TaW1wbGU7CiAJY29tbWFuZC0+aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5zaW9u OworCWNvbW1hbmQtPnJvbGUgPSBHZXRVc2VyTmFtZUZyb21JZChHZXRVc2VySWQoKSwgZmFsc2Up OwogCiAJY29tbWFuZC0+ZC5zaW1wbGUuYWRkcmVzcyA9IGFkZHJlc3M7CiAJY29tbWFuZC0+ZC5z aW1wbGUuc2Vjb25kYXJ5T2JqZWN0ID0gc2Vjb25kYXJ5T2JqZWN0OwpAQCAtMTY2Myw2ICsxNjY1 LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNv bW1hbmQtPnR5cGUgPSBTQ1RfQWx0ZXJUYWJsZTsKIAljb21tYW5kLT5pbl9leHRlbnNpb24gPSBj cmVhdGluZ19leHRlbnNpb247CisJY29tbWFuZC0+cm9sZSA9IEdldFVzZXJOYW1lRnJvbUlkKEdl dFVzZXJJZCgpLCBmYWxzZSk7CiAKIAljb21tYW5kLT5kLmFsdGVyVGFibGUuY2xhc3NJZCA9IFJl bGF0aW9uUmVsYXRpb25JZDsKIAljb21tYW5kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQgPSBJbnZh bGlkT2lkOwpAQCAtMTkzMCw2ICsxOTMzLDcgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEdyYW50KElu dGVybmFsR3JhbnQgKmlzdG10KQogCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENv bW1hbmQpKTsKIAljb21tYW5kLT50eXBlID0gU0NUX0dyYW50OwogCWNvbW1hbmQtPmluX2V4dGVu c2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21tYW5kLT5yb2xlID0gR2V0VXNlck5hbWVG cm9tSWQoR2V0VXNlcklkKCksIGZhbHNlKTsKIAljb21tYW5kLT5kLmdyYW50LmlzdG10ID0gaWNv cHk7CiAJY29tbWFuZC0+cGFyc2V0cmVlID0gTlVMTDsKIApAQCAtMTk2MSw2ICsxOTY1LDcgQEAg RXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyT3BGYW0oQWx0ZXJPcEZhbWlseVN0bXQgKnN0bXQsIE9p ZCBvcGZhbW9pZCwKIAljb21tYW5kID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7 CiAJY29tbWFuZC0+dHlwZSA9IFNDVF9BbHRlck9wRmFtaWx5OwogCWNvbW1hbmQtPmluX2V4dGVu c2lvbiA9IGNyZWF0aW5nX2V4dGVuc2lvbjsKKwljb21tYW5kLT5yb2xlID0gR2V0VXNlck5hbWVG cm9tSWQoR2V0VXNlcklkKCksIGZhbHNlKTsKIAlPYmplY3RBZGRyZXNzU2V0KGNvbW1hbmQtPmQu b3BmYW0uYWRkcmVzcywKIAkJCQkJIE9wZXJhdG9yRmFtaWx5UmVsYXRpb25JZCwgb3BmYW1vaWQp OwogCWNvbW1hbmQtPmQub3BmYW0ub3BlcmF0b3JzID0gb3BlcmF0b3JzOwpAQCAtMjA5MSw2ICsy MDk2LDcgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdFNlY0xhYmVsKE9iamVjdEFkZHJlc3MgYWRkcmVz cywgY2hhciAqcHJvdmlkZXIsCiAJY29tbWFuZCA9IHBhbGxvYzAoc2l6ZW9mKENvbGxlY3RlZENv bW1hbmQpKTsKIAljb21tYW5kLT50eXBlID0gU0NUX1NlY3VyaXR5TGFiZWw7CiAJY29tbWFuZC0+ aW5fZXh0ZW5zaW9uID0gY3JlYXRpbmdfZXh0ZW5zaW9uOworCWNvbW1hbmQtPnJvbGUgPSBHZXRV c2VyTmFtZUZyb21JZChHZXRVc2VySWQoKSwgZmFsc2UpOwogCWNvbW1hbmQtPmQuc2VjbGFiZWwu YWRkcmVzcyA9IGFkZHJlc3M7CiAJY29tbWFuZC0+ZC5zZWNsYWJlbC5wcm92aWRlciA9IHByb3Zp ZGVyOwogCWNvbW1hbmQtPnBhcnNldHJlZSA9IChOb2RlICopIGNvcHlPYmplY3Qoc3RtdCk7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggNDY0ZGI2ZDI0Ny4uZjdi YjczODQzZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21k cy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtNjYs NiArNjYsNyBAQAogI2RlZmluZSBTVUJPUFRfRElTQUJMRV9PTl9FUlIJCTB4MDAwMDA0MDAKICNk ZWZpbmUgU1VCT1BUX0xTTgkJCQkJMHgwMDAwMDgwMAogI2RlZmluZSBTVUJPUFRfT1JJR0lOCQkJ CTB4MDAwMDEwMDAKKyNkZWZpbmUgU1VCT1BUX01BVENIX0RETF9PV05FUgkJMHgwMDAwMjAwMAog CiAvKiBjaGVjayBpZiB0aGUgJ3ZhbCcgaGFzICdiaXRzJyBzZXQgKi8KICNkZWZpbmUgSXNTZXQo dmFsLCBiaXRzKSAgKCgodmFsKSAmIChiaXRzKSkgPT0gKGJpdHMpKQpAQCAtODksNiArOTAsNyBA QCB0eXBlZGVmIHN0cnVjdCBTdWJPcHRzCiAJYm9vbAkJdHdvcGhhc2U7CiAJYm9vbAkJZGlzYWJs ZW9uZXJyOwogCWNoYXIJICAgKm9yaWdpbjsKKwlib29sCQltYXRjaGRkbG93bmVyOwogCVhMb2dS ZWNQdHIJbHNuOwogfSBTdWJPcHRzOwogCkBAIC0xNDYsNiArMTQ4LDggQEAgcGFyc2Vfc3Vic2Ny aXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpzdG10X29wdGlvbnMsCiAJ CW9wdHMtPmRpc2FibGVvbmVyciA9IGZhbHNlOwogCWlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywg U1VCT1BUX09SSUdJTikpCiAJCW9wdHMtPm9yaWdpbiA9IHBzdHJkdXAoTE9HSUNBTFJFUF9PUklH SU5fQU5ZKTsKKwlpZiAoSXNTZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9NQVRDSF9ERExfT1dO RVIpKQorCQlvcHRzLT5tYXRjaGRkbG93bmVyID0gdHJ1ZTsKIAogCS8qIFBhcnNlIG9wdGlvbnMg Ki8KIAlmb3JlYWNoKGxjLCBzdG10X29wdGlvbnMpCkBAIC0zMjQsNiArMzI4LDE1IEBAIHBhcnNl X3N1YnNjcmlwdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlzdCAqc3RtdF9vcHRp b25zLAogCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMgfD0gU1VCT1BUX0xTTjsKIAkJCW9wdHMtPmxz biA9IGxzbjsKIAkJfQorCQllbHNlIGlmIChJc1NldChzdXBwb3J0ZWRfb3B0cywgU1VCT1BUX01B VENIX0RETF9PV05FUikgJiYKKwkJCQkgc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibWF0Y2hfZGRs X293bmVyIikgPT0gMCkKKwkJeworCQkJaWYgKElzU2V0KG9wdHMtPnNwZWNpZmllZF9vcHRzLCBT VUJPUFRfTUFUQ0hfRERMX09XTkVSKSkKKwkJCQllcnJvckNvbmZsaWN0aW5nRGVmRWxlbShkZWZl bCwgcHN0YXRlKTsKKworCQkJb3B0cy0+c3BlY2lmaWVkX29wdHMgfD0gU1VCT1BUX01BVENIX0RE TF9PV05FUjsKKwkJCW9wdHMtPm1hdGNoZGRsb3duZXIgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsK KwkJfQogCQllbHNlCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZ TlRBWF9FUlJPUiksCkBAIC01NjAsNyArNTczLDggQEAgQ3JlYXRlU3Vic2NyaXB0aW9uKFBhcnNl U3RhdGUgKnBzdGF0ZSwgQ3JlYXRlU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwKIAkJCQkJICBTVUJP UFRfU0xPVF9OQU1FIHwgU1VCT1BUX0NPUFlfREFUQSB8CiAJCQkJCSAgU1VCT1BUX1NZTkNIUk9O T1VTX0NPTU1JVCB8IFNVQk9QVF9CSU5BUlkgfAogCQkJCQkgIFNVQk9QVF9TVFJFQU1JTkcgfCBT VUJPUFRfVFdPUEhBU0VfQ09NTUlUIHwKLQkJCQkJICBTVUJPUFRfRElTQUJMRV9PTl9FUlIgfCBT VUJPUFRfT1JJR0lOKTsKKwkJCQkJICBTVUJPUFRfRElTQUJMRV9PTl9FUlIgfCBTVUJPUFRfT1JJ R0lOIHwKKwkJCQkJICBTVUJPUFRfTUFUQ0hfRERMX09XTkVSKTsKIAlwYXJzZV9zdWJzY3JpcHRp b25fb3B0aW9ucyhwc3RhdGUsIHN0bXQtPm9wdGlvbnMsIHN1cHBvcnRlZF9vcHRzLCAmb3B0cyk7 CiAKIAkvKgpAQCAtNjQ5LDYgKzY2Myw3IEBAIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCXB1YmxpY2F0aW9uTGlz dFRvQXJyYXkocHVibGljYXRpb25zKTsKIAl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3Vi b3JpZ2luIC0gMV0gPQogCQlDU3RyaW5nR2V0VGV4dERhdHVtKG9wdHMub3JpZ2luKTsKKwl2YWx1 ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25fc3VibWF0Y2hkZGxvd25lciAtIDFdID0gQm9vbEdldERh dHVtKG9wdHMubWF0Y2hkZGxvd25lcik7CiAKIAl0dXAgPSBoZWFwX2Zvcm1fdHVwbGUoUmVsYXRp b25HZXREZXNjcihyZWwpLCB2YWx1ZXMsIG51bGxzKTsKIApAQCAtMTA1NCw3ICsxMDY5LDcgQEAg QWx0ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0 bXQgKnN0bXQsCiAJCQkJc3VwcG9ydGVkX29wdHMgPSAoU1VCT1BUX1NMT1RfTkFNRSB8CiAJCQkJ CQkJCSAgU1VCT1BUX1NZTkNIUk9OT1VTX0NPTU1JVCB8IFNVQk9QVF9CSU5BUlkgfAogCQkJCQkJ CQkgIFNVQk9QVF9TVFJFQU1JTkcgfCBTVUJPUFRfRElTQUJMRV9PTl9FUlIgfAotCQkJCQkJCQkg IFNVQk9QVF9PUklHSU4pOworCQkJCQkJCQkgIFNVQk9QVF9PUklHSU4gfCBTVUJPUFRfTUFUQ0hf RERMX09XTkVSKTsKIAogCQkJCXBhcnNlX3N1YnNjcmlwdGlvbl9vcHRpb25zKHBzdGF0ZSwgc3Rt dC0+b3B0aW9ucywKIAkJCQkJCQkJCQkgICBzdXBwb3J0ZWRfb3B0cywgJm9wdHMpOwpAQCAtMTEx OCw2ICsxMTMzLDE0IEBAIEFsdGVyU3Vic2NyaXB0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0 ZXJTdWJzY3JpcHRpb25TdG10ICpzdG10LAogCQkJCQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlw dGlvbl9zdWJvcmlnaW4gLSAxXSA9IHRydWU7CiAJCQkJfQogCisJCQkJaWYgKElzU2V0KG9wdHMu c3BlY2lmaWVkX29wdHMsIFNVQk9QVF9NQVRDSF9ERExfT1dORVIpKQorCQkJCXsKKwkJCQkJdmFs dWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1Ym1hdGNoZGRsb3duZXIgLSAxXQorCQkJCQkJPSBC b29sR2V0RGF0dW0ob3B0cy5tYXRjaGRkbG93bmVyKTsKKwkJCQkJcmVwbGFjZXNbQW51bV9wZ19z dWJzY3JpcHRpb25fc3VibWF0Y2hkZGxvd25lciAtIDFdCisJCQkJCQk9IHRydWU7CisJCQkJfQor CiAJCQkJdXBkYXRlX3R1cGxlID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMKaW5kZXggZDY4YTUwNzA4ZC4uNWNj ZmVmZTA4OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0 cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2Vy LmMKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUo UEdfRlVOQ1RJT05fQVJHUykKIAlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1Q KQogCXsKIAkJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxs b3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCi0JCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGls aXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5 X2NvbW1hbmQoY21kLCB0cnVlLCBmYWxzZSk7CiAKIAkJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwp CiAJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9i amVjdElkLCBEQ1RfVGFibGVBbHRlciwKQEAgLTIwMCw3ICsyMDAsNyBAQCBwdWJsaWNhdGlvbl9k ZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQogCQkJICogRGVwYXJzZSB0 aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlCiAJ CQkgKiBzYW1lLgogCQkJICovCi0JCQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21t YW5kKGNtZCwgZmFsc2UpOworCQkJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFu ZChjbWQsIHRydWUsIGZhbHNlKTsKIAogCQkJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCiAJCQkJ TG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCByZWxpZCwgdHlwZSwganNvbl9zdHJpbmcs CkBAIC0zNTUsNyArMzU1LDcgQEAgcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRl KFBHX0ZVTkNUSU9OX0FSR1MpCiAJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CiAKIAkv KiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxvZyBpdCB0byBhbGxvdyBkZWNvZGlu ZyBvZiB0aGUgc2FtZS4gKi8KLQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5k KGNtZCwgZmFsc2UpOworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21k LCB0cnVlLCBmYWxzZSk7CiAKIAlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKIAkJTG9nTG9naWNh bERETE1lc3NhZ2UoImRlcGFyc2UiLCBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQsIERD VF9TaW1wbGVDbWQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwppbmRl eCBiOWI2NTJmN2JjLi41MmFlZTMxODc2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvd29ya2VyLmMKQEAgLTMzNTksMjEgKzMzNTksMzMgQEAgYXBwbHlfaGFuZGxlX2RkbChTdHJp bmdJbmZvIHMpCiAJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKIAljaGFyCSAgICptZXNzYWdl ID0gTlVMTDsKIAljaGFyCSAgICpkZGxfY29tbWFuZDsKKwljaGFyCSAgICpvd25lcjsKIAlTaXpl CQlzejsKIAlMaXN0CSAgICpwYXJzZXRyZWVfbGlzdDsKIAlMaXN0Q2VsbCAgICpwYXJzZXRyZWVf aXRlbTsKIAlEZXN0UmVjZWl2ZXIgKnJlY2VpdmVyOwogCU1lbW9yeUNvbnRleHQgb2xkY29udGV4 dDsKIAljb25zdCBjaGFyICpzYXZlX2RlYnVnX3F1ZXJ5X3N0cmluZyA9IGRlYnVnX3F1ZXJ5X3N0 cmluZzsKKwlpbnQJCQlzYXZlX25lc3RsZXZlbCA9IDA7CiAKIAltZXNzYWdlID0gbG9naWNhbHJl cF9yZWFkX2RkbChzLCAmbHNuLCAmcHJlZml4LCAmc3opOwogCiAJLyogTWFrZSBzdXJlIHdlIGFy ZSBpbiBhIHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KIAliZWdpbl9yZXBsaWNhdGlvbl9zdGVwKCk7 CiAKLQlkZGxfY29tbWFuZCA9IGRlcGFyc2VfZGRsX2pzb25fdG9fc3RyaW5nKG1lc3NhZ2UpOwor CWRkbF9jb21tYW5kID0gZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcobWVzc2FnZSwgJm93bmVy KTsKIAlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29tbWFuZDsKIAorCWlmIChNeVN1YnNjcmlw dGlvbi0+bWF0Y2hkZGxvd25lciAmJiBvd25lcikKKwl7CisJCS8qCisJCSAqIFNldCB0aGUgY3Vy cmVudCByb2xlIHRvIHRoZSBvd25lciB0aGF0IGV4ZWN1dGVkIHRoZSBjb21tYW5kIG9uIHRoZQor CQkgKiBwdWJsaWNhdGlvbiBzZXJ2ZXIuCisJCSAqLworCQlzYXZlX25lc3RsZXZlbCA9IE5ld0dV Q05lc3RMZXZlbCgpOworCQlTZXRDb25maWdPcHRpb24oInJvbGUiLCBvd25lciwgUEdDX0lOVEVS TkFMLCBQR0NfU19PVkVSUklERSk7CisJfQorCiAJLyogRGVzdE5vbmUgZm9yIGxvZ2ljYWwgcmVw bGljYXRpb24gKi8KIAlyZWNlaXZlciA9IENyZWF0ZURlc3RSZWNlaXZlcihEZXN0Tm9uZSk7CiAJ cGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShkZGxfY29tbWFuZCk7CkBAIC0zNDcxLDYg KzM0ODMsMTQgQEAgYXBwbHlfaGFuZGxlX2RkbChTdHJpbmdJbmZvIHMpCiAJCU1lbW9yeUNvbnRl eHREZWxldGUocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKIAl9CiAKKwkvKgorCSAqIFJlc3RvcmUg dGhlIEdVQyB2YXJpYWJsZXMgd2Ugc2V0IGFib3ZlLgorCSAqLworCWlmIChzYXZlX25lc3RsZXZl bCA+IDApCisJeworCQlBdEVPWGFjdF9HVUModHJ1ZSwgc2F2ZV9uZXN0bGV2ZWwpOworCX0KKwog CWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdfcXVlcnlfc3RyaW5nOwogCWVuZF9yZXBs aWNhdGlvbl9zdGVwKCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA3Y2E4NzhiNTIyLi40NzBmNGE5NjY5 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKQEAgLTQ1MzUsNiArNDUzNSw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJj aGl2ZSAqZm91dCkKIAlpbnQJCQlpX3N1YnN5bmNjb21taXQ7CiAJaW50CQkJaV9zdWJwdWJsaWNh dGlvbnM7CiAJaW50CQkJaV9zdWJiaW5hcnk7CisJaW50CQkJaV9zdWJtYXRjaGRkbG93bmVyOwog CWludAkJCWksCiAJCQkJbnR1cHM7CiAKQEAgLTQ1ODcsOSArNDU4OCwxNCBAQCBnZXRTdWJzY3Jp cHRpb25zKEFyY2hpdmUgKmZvdXQpCiAJCQkJCQkgIExPR0lDQUxSRVBfVFdPUEhBU0VfU1RBVEVf RElTQUJMRUQpOwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTYwMDAwKQotCQlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBzLnN1Ym9yaWdpblxuIik7CisJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LAorCQkJCQkJCSAiIHMuc3Vib3JpZ2luLFxuIgorCQkJCQkJCSAiIHMu c3VibWF0Y2hkZGxvd25lclxuIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwg IiAnJXMnIEFTIHN1Ym9yaWdpblxuIiwgTE9HSUNBTFJFUF9PUklHSU5fQU5ZKTsKKwkJYXBwZW5k UFFFeHBCdWZmZXIocXVlcnksCisJCQkJCQkgICIgJyVzJyBBUyBzdWJvcmlnaW4sXG4iCisJCQkJ CQkgICIgZmFsc2UgQVMgc3VibWF0Y2hkZGxvd25lclxuIiwKKwkJCQkJCSAgTE9HSUNBTFJFUF9P UklHSU5fQU5ZKTsKIAogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJICJGUk9N IHBnX3N1YnNjcmlwdGlvbiBzXG4iCkBAIC00NjE3LDYgKzQ2MjMsNyBAQCBnZXRTdWJzY3JpcHRp b25zKEFyY2hpdmUgKmZvdXQpCiAJaV9zdWJ0d29waGFzZXN0YXRlID0gUFFmbnVtYmVyKHJlcywg InN1YnR3b3BoYXNlc3RhdGUiKTsKIAlpX3N1YmRpc2FibGVvbmVyciA9IFBRZm51bWJlcihyZXMs ICJzdWJkaXNhYmxlb25lcnIiKTsKIAlpX3N1Ym9yaWdpbiA9IFBRZm51bWJlcihyZXMsICJzdWJv cmlnaW4iKTsKKwlpX3N1Ym1hdGNoZGRsb3duZXIgPSBQUWZudW1iZXIocmVzLCAic3VibWF0Y2hk ZGxvd25lciIpOwogCiAJc3ViaW5mbyA9IHBnX21hbGxvYyhudHVwcyAqIHNpemVvZihTdWJzY3Jp cHRpb25JbmZvKSk7CiAKQEAgLTQ2NDcsNiArNDY1NCw4IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJj aGl2ZSAqZm91dCkKIAkJc3ViaW5mb1tpXS5zdWJkaXNhYmxlb25lcnIgPQogCQkJcGdfc3RyZHVw KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3N1YmRpc2FibGVvbmVycikpOwogCQlzdWJpbmZvW2ldLnN1 Ym9yaWdpbiA9IHBnX3N0cmR1cChQUWdldHZhbHVlKHJlcywgaSwgaV9zdWJvcmlnaW4pKTsKKwkJ c3ViaW5mb1tpXS5zdWJtYXRjaGRkbG93bmVyID0KKwkJCXBnX3N0cmR1cChQUWdldHZhbHVlKHJl cywgaSwgaV9zdWJtYXRjaGRkbG93bmVyKSk7CiAKIAkJLyogRGVjaWRlIHdoZXRoZXIgd2Ugd2Fu dCB0byBkdW1wIGl0ICovCiAJCXNlbGVjdER1bXBhYmxlT2JqZWN0KCYoc3ViaW5mb1tpXS5kb2Jq KSwgZm91dCk7CkBAIC00NzI1LDYgKzQ3MzQsOSBAQCBkdW1wU3Vic2NyaXB0aW9uKEFyY2hpdmUg KmZvdXQsIGNvbnN0IFN1YnNjcmlwdGlvbkluZm8gKnN1YmluZm8pCiAJaWYgKHBnX3N0cmNhc2Vj bXAoc3ViaW5mby0+c3Vib3JpZ2luLCBMT0dJQ0FMUkVQX09SSUdJTl9BTlkpICE9IDApCiAJCWFw cGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAiLCBvcmlnaW4gPSAlcyIsIHN1YmluZm8tPnN1Ym9yaWdp bik7CiAKKwlpZiAoc3RyY21wKHN1YmluZm8tPnN1Ym1hdGNoZGRsb3duZXIsICJmIikgPT0gMCkK KwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIG1hdGNoX2RkbF9vd25lciA9IGZhbHNl Iik7CisKIAlpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN5bmNjb21taXQsICJvZmYiKSAhPSAwKQog CQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIiwgc3luY2hyb25vdXNfY29tbWl0ID0gJXMiLCBm bXRJZChzdWJpbmZvLT5zdWJzeW5jY29tbWl0KSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDNlYTMwY2U2 ZmIuLjU2NDUxZDY3NzkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjYzLDYgKzY2Myw3IEBAIHR5cGVkZWYg c3RydWN0IF9TdWJzY3JpcHRpb25JbmZvCiAJY2hhcgkgICAqc3Vib3JpZ2luOwogCWNoYXIJICAg KnN1YnN5bmNjb21taXQ7CiAJY2hhcgkgICAqc3VicHVibGljYXRpb25zOworCWNoYXIJICAgKnN1 Ym1hdGNoZGRsb3duZXI7CiB9IFN1YnNjcmlwdGlvbkluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9z cmMvYmluL3BzcWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDQ4 YmYzN2E5NGYuLjY5YjM3ZjJhZmMgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5j CisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC02NTIxLDcgKzY1MjEsNyBAQCBkZXNj cmliZVN1YnNjcmlwdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlKQogCVBH cmVzdWx0ICAgKnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwogCXN0YXRp YyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsCi0JZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlfTsKKwlmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlfTsKIAogCWlmIChwc2V0LnN2ZXJzaW9uIDwgMTAwMDAwKQogCXsKQEAg LTY1NzgsOCArNjU3OCwxMCBAQCBkZXNjcmliZVN1YnNjcmlwdGlvbnMoY29uc3QgY2hhciAqcGF0 dGVybiwgYm9vbCB2ZXJib3NlKQogCiAJCWlmIChwc2V0LnN2ZXJzaW9uID49IDE2MDAwMCkKIAkJ CWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCi0JCQkJCQkJICAiLCBzdWJvcmlnaW4gQVMgXCIlc1wi XG4iLAotCQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJPcmlnaW4iKSk7CisJCQkJCQkJICAiLCBzdWJv cmlnaW4gQVMgXCIlc1wiXG4iCisJCQkJCQkJICAiLCBzdWJtYXRjaGRkbG93bmVyIEFTIFwiJXNc IlxuIiwKKwkJCQkJCQkgIGdldHRleHRfbm9vcCgiT3JpZ2luIiksCisJCQkJCQkJICBnZXR0ZXh0 X25vb3AoIk1hdGNoIERETCBvd25lciIpKTsKIAogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAog CQkJCQkJICAiLCAgc3Vic3luY2NvbW1pdCBBUyBcIiVzXCJcbiIKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3N1YnNjcmlwdGlvbi5oCmluZGV4IGIwZjJhMTcwNWQuLjE3YWY3Yzc3NTAgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2NyaXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApAQCAtODgsNiArODgsOSBAQCBDQVRBTE9HKHBnX3N1 YnNjcmlwdGlvbiw2MTAwLFN1YnNjcmlwdGlvblJlbGF0aW9uSWQpIEJLSV9TSEFSRURfUkVMQVRJ T04gQktJX1JPVwogCWJvb2wJCXN1YmRpc2FibGVvbmVycjsJLyogVHJ1ZSBpZiBhIHdvcmtlciBl cnJvciBzaG91bGQgY2F1c2UgdGhlCiAJCQkJCQkJCQkgKiBzdWJzY3JpcHRpb24gdG8gYmUgZGlz YWJsZWQgKi8KIAorCWJvb2wJCXN1Ym1hdGNoZGRsb3duZXI7CS8qIFRydWUgaWYgcmVwbGljYXRl ZCBvYmplY3RzIGJ5IERETCByZXBsaWNhdGlvbgorCQkJCQkJCQkJICogc2hvdWxkIG1hdGNoIHRo ZSBvcmlnaW5hbCBvd25lciBvbiB0aGUgcHVibGlzaGVyICovCisKICNpZmRlZiBDQVRBTE9HX1ZB UkxFTgkJCS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLwogCS8qIENvbm5l Y3Rpb24gc3RyaW5nIHRvIHRoZSBwdWJsaXNoZXIgKi8KIAl0ZXh0CQlzdWJjb25uaW5mbyBCS0lf Rk9SQ0VfTk9UX05VTEw7CkBAIC0xMzcsNiArMTQwLDggQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2Ny aXB0aW9uCiAJTGlzdAkgICAqcHVibGljYXRpb25zOwkvKiBMaXN0IG9mIHB1YmxpY2F0aW9uIG5h bWVzIHRvIHN1YnNjcmliZSB0byAqLwogCWNoYXIJICAgKm9yaWdpbjsJCQkvKiBPbmx5IHB1Ymxp c2ggZGF0YSBvcmlnaW5hdGluZyBmcm9tIHRoZQogCQkJCQkJCQkgKiBzcGVjaWZpZWQgb3JpZ2lu ICovCisJYm9vbAkJbWF0Y2hkZGxvd25lcjsgIC8qIEluZGljYXRlcyBpZiByZXBsaWNhdGVkIG9i amVjdHMgYnkgRERMIHJlcGxpY2F0aW9uCisJCQkJCQkJCSAqIHNob3VsZCBtYXRjaCB0aGUgb3Jp Z2luYWwgb3duZXIgb24gdGhlIHB1Ymxpc2hlciAqLwogfSBTdWJzY3JpcHRpb247CiAKIC8qIERp c2FsbG93IHN0cmVhbWluZyBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9k ZXBhcnNlLmgKaW5kZXggZTI2MWEzZTYyMS4uNTgxYTQ3MGMwOSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFy c2UuaApAQCAtMTUsOCArMTUsOCBAQAogI2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIu aCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0eS5oIgogCi1leHRlcm4gY2hhciAqZGVw YXJzZV91dGlsaXR5X2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2Vf bW9kZSk7Ci1leHRlcm4gY2hhciAqZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNv bmIpOworZXh0ZXJuIGNoYXIgKmRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1h bmQgKmNtZCwgYm9vbCBpbmNsdWRlX293bmVyLCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4g Y2hhciAqZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIsIGNoYXIqKiBvd25l cik7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRl bnRpdHksIGNvbnN0IGNoYXIgKm9iamVjdHR5cGUsCiAJCQkJCQkJCSAgRHJvcEJlaGF2aW9yIGJl aGF2aW9yKTsKIGV4dGVybiBjaGFyICogZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uRHJvcFN0bXQo U1FMRHJvcE9iamVjdCAqb2JqKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGZi ZDA5NzYzYmYuLmNjZTNjMDdmYzAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJz ZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAt NDksNiArNDksNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJQ29sbGVjdGVk Q29tbWFuZFR5cGUgdHlwZTsKIAogCWJvb2wJCWluX2V4dGVuc2lvbjsKKwljaGFyCSAgICpyb2xl OwogCU5vZGUJICAgKnBhcnNldHJlZTsKIAogCXVuaW9uCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3N1YnNjcmlwdGlvbi5vdXQKaW5kZXggM2Y5OWIxNDM5NC4uYWY4OTRmNzViOSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dApAQCAtMTE0LDE4ICsxMTQs MTggQEAgQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI0IENPTk5FQ1RJT04gJ2Ri bmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFUKIFdBUk5JTkc6ICBzdWJzY3JpcHRpb24gd2Fz IGNyZWF0ZWQsIGJ1dCBpcyBub3QgY29ubmVjdGVkCiBISU5UOiAgVG8gaW5pdGlhdGUgcmVwbGlj YXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xvdCwgZW5h YmxlIHRoZSBzdWJzY3JpcHRpb24sIGFuZCByZWZyZXNoIHRoZSBzdWJzY3JpcHRpb24uCiBcZFJz KyByZWdyZXNzX3Rlc3RzdWI0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2Ygc3Vic2NyaXB0aW9ucwotICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdv LXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBj b21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViNCB8IHJlZ3Jlc3Nfc3Vic2Ny aXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAg fCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IG5vbmUgICB8IG9mZiAgICAg ICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAg ICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQ dWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNh YmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwgU3luY2hyb25vdXMgY29t bWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YjQg fCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAg ICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBu b25lICAgfCB0ICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVn cmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJl Z3Jlc3NfdGVzdHN1YjQgU0VUIChvcmlnaW4gPSBhbnkpOwogXGRScysgcmVncmVzc190ZXN0c3Vi NAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMK LSAgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQg fCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBE aXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAg Q29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfdGVzdHN1YjQgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAg ICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5h bWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICAgTmFtZSAgICAgICB8 ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5h cnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9y aWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENv bm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWI0IHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAg ICAgICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCiAoMSByb3cpCiAKIERST1AgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YjM7CkBA IC0xNDMsMTAgKzE0MywxMCBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIENP Tk5FQ1RJT04gJ2Zvb2Jhcic7CiBFUlJPUjogIGludmFsaWQgY29ubmVjdGlvbiBzdHJpbmcgc3lu dGF4OiBtaXNzaW5nICI9IiBhZnRlciAiZm9vYmFyIiBpbiBjb25uZWN0aW9uIGluZm8gc3RyaW5n CiAKIFxkUnMrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2Ny aXB0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBF bmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29t bWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAg ICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIg fCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAg ICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAg ICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwg QmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3Ig fCBPcmlnaW4gfCBNYXRjaCBEREwgb3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNj cmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAg IHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAgICAg ICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhp c3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBT RVQgUFVCTElDQVRJT04gdGVzdHB1YjIsIHRlc3RwdWIzIFdJVEggKHJlZnJlc2ggPSBmYWxzZSk7 CkBAIC0xNjMsMTAgKzE2MywxMCBAQCBFUlJPUjogIHVucmVjb2duaXplZCBzdWJzY3JpcHRpb24g cGFyYW1ldGVyOiAiY3JlYXRlX3Nsb3QiCiAtLSBvawogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jl c3NfdGVzdHN1YiBTS0lQIChsc24gPSAnMC8xMjM0NScpOwogXGRScysKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwotICAgICAgTmFtZSAg ICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgICAgIFB1YmxpY2F0 aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxl IG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgIENvbm5p bmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBm ICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAg ICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMTIzNDUKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwor ICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwg ICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21t aXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwgU3luY2hy b25vdXMgY29tbWl0IHwgICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAor LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAg ICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAg ICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMTIzNDUKICgx IHJvdykKIAogLS0gb2sgLSB3aXRoIGxzbiA9IE5PTkUKQEAgLTE3NSwxMCArMTc1LDEwIEBAIEFM VEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0tJUCAobHNuID0gTk9ORSk7CiBBTFRF UiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNLSVAgKGxzbiA9ICcwLzAnKTsKIEVSUk9S OiAgaW52YWxpZCBXQUwgbG9jYXRpb24gKExTTik6IDAvMAogXGRScysKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwotICAgICAgTmFtZSAg ICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgICAgIFB1YmxpY2F0 aW9uICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxl IG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgIENvbm5p bmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBm ICAgICAgIHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAg ICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAg ICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAg ICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCAgICAg UHVibGljYXRpb24gICAgIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8 IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBNYXRjaCBEREwgb3duZXIgfCBTeW5jaHJvbm91 cyBjb21taXQgfCAgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVz dHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8 IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAgICAgICAgICAgICAgfCBvZmYgICAgICAg ICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8wCiAoMSByb3cpCiAK IEJFR0lOOwpAQCAtMjEwLDEwICsyMTAsMTAgQEAgQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1Yl9mb28gU0VUIChzeW5jaHJvbm91c19jb21taXQgPSBmb29iYXIpOwogRVJST1I6ICBp bnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInN5bmNocm9ub3VzX2NvbW1pdCI6ICJmb29iYXIi CiBISU5UOiAgQXZhaWxhYmxlIHZhbHVlczogbG9jYWwsIHJlbW90ZV93cml0ZSwgcmVtb3RlX2Fw cGx5LCBvbiwgb2ZmLgogXGRScysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0gICAgICAgIE5hbWUgICAgICAgICB8ICAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgICAgIFB1YmxpY2F0aW9uICAgICB8IEJpbmFy eSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3Jp Z2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8 IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3Rlc3RzdWJfZm9vIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1YjIsdGVzdHB1YjN9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAg ICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBsb2NhbCAgICAgICAgICAgICAgfCBk Ym5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QyIHwgMC8wCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgICBO YW1lICAgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8ICAgICBQ dWJsaWNhdGlvbiAgICAgfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwg RGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3Vz IGNvbW1pdCB8ICAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisg cmVncmVzc190ZXN0c3ViX2ZvbyB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAg IHwge3Rlc3RwdWIyLHRlc3RwdWIzfSB8IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAg ICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgbG9j YWwgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0MiB8IDAvMAogKDEg cm93KQogCiAtLSByZW5hbWUgYmFjayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQpAQCAtMjQ3LDE5 ICsyNDcsMTkgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElP TiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUIKIFdBUk5JTkc6ICBzdWJzY3JpcHRp b24gd2FzIGNyZWF0ZWQsIGJ1dCBpcyBub3QgY29ubmVjdGVkCiBISU5UOiAgVG8gaW5pdGlhdGUg cmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRpb24gc2xv dCwgZW5hYmxlIHRoZSBzdWJzY3JpcHRpb24sIGFuZCByZWZyZXNoIHRoZSBzdWJzY3JpcHRpb24u CiBcZFJzKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlw dGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5h YmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1p dCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAg ICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwg ZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgdCAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAg ICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBk Ym5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICBOYW1lICAgICAg IHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJp bmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwg T3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAg Q29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3Jp cHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IHQgICAgICB8IG9mZiAgICAgICB8 IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAg ICAgICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0 IHwgMC8wCiAoMSByb3cpCiAKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VU IChiaW5hcnkgPSBmYWxzZSk7CiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNF VCAoc2xvdF9uYW1lID0gTk9ORSk7CiBcZFJzKwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFt aW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5j aHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAK LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNz X3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2Zm ICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBv ZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRp b25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJs ZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQg fCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwgU3luY2hyb25v dXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc190ZXN0 c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8 IGYgICAgICB8IG9mZiAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAg IHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIERST1AgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YjsKQEAgLTI3MSwyNyArMjcxLDI3IEBAIENSRUFURSBTVUJTQ1JJUFRJ T04gcmVncmVzc190ZXN0c3ViIENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlz dCcgUFVCCiBXQVJOSU5HOiAgc3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNv bm5lY3RlZAogSElOVDogIFRvIGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxs eSBjcmVhdGUgdGhlIHJlcGxpY2F0aW9uIHNsb3QsIGVuYWJsZSB0aGUgc3Vic2NyaXB0aW9uLCBh bmQgcmVmcmVzaCB0aGUgc3Vic2NyaXB0aW9uLgogXGRScysKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8 IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2lu IHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tp cCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwg cmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAg ICB8IG9uICAgICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55 ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwg MC8wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vi c2NyaXB0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAg fCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2Ug Y29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5 bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNO IAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBvbiAgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IHQgICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAgICAgICB8 IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJT Q1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0gcGFyYWxsZWwpOwogXGRS cysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25z Ci0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQg fCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBE aXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAg Q29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAg ICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IHBhcmFsbGVsICB8IGQgICAgICAgICAgICAgICAg fCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1l PXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAgTmFtZSAgICAgICB8ICAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkg fCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdp biB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5p bmZvICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9u X3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBwYXJhbGxlbCAgfCBkICAg ICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IHQgICAgICAgICAgICAg ICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAv MAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3Ry ZWFtaW5nID0gZmFsc2UpOwogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQg KHNsb3RfbmFtZSA9IE5PTkUpOwogXGRScysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWlu ZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hy b25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCi0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19z dWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAg ICAgICB8IGQgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2Zm ICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9u cworICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVk IHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwg RGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3Vz IGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1 YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBm ICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8 IGFueSAgICB8IHQgICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1y ZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiAtLSBmYWlsIC0gcHVibGljYXRp b24gYWxyZWFkeSBleGlzdHMKQEAgLTMwNiwxMCArMzA2LDEwIEBAIEFMVEVSIFNVQlNDUklQVElP TiByZWdyZXNzX3Rlc3RzdWIgQUREIFBVQkxJQ0FUSU9OIHRlc3RwdWIxLCB0ZXN0cHViMiBXSVRI IChyZWZyCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIEFERCBQVUJMSUNBVElP TiB0ZXN0cHViMSwgdGVzdHB1YjIgV0lUSCAocmVmcmVzaCA9IGZhbHNlKTsKIEVSUk9SOiAgcHVi bGljYXRpb24gInRlc3RwdWIxIiBpcyBhbHJlYWR5IGluIHN1YnNjcmlwdGlvbiAicmVncmVzc190 ZXN0c3ViIgogXGRScysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXN0IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgRW5hYmxlZCB8ICAgICAgICAgUHVibGljYXRpb24gICAgICAgICB8IEJpbmFy eSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3Jp Z2luIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwg U2tpcCBMU04gCi0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwg e3Rlc3RwdWIsdGVzdHB1YjEsdGVzdHB1YjJ9IHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAg ICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAg ICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAg ICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8ICAg ICAgICAgUHVibGljYXRpb24gICAgICAgICB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFz ZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwg U3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBM U04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIg fCBmICAgICAgIHwge3Rlc3RwdWIsdGVzdHB1YjEsdGVzdHB1YjJ9IHwgZiAgICAgIHwgb2ZmICAg ICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAg ICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogLS0gZmFpbCAtIHB1YmxpY2F0aW9uIHVzZWQgbW9yZSB0 aGFuIG9uY2UKQEAgLTMyNCwxMCArMzI0LDEwIEBAIEVSUk9SOiAgcHVibGljYXRpb24gInRlc3Rw dWIzIiBpcyBub3QgaW4gc3Vic2NyaXB0aW9uICJyZWdyZXNzX3Rlc3RzdWIiCiAtLSBvayAtIGRl bGV0ZSBwdWJsaWNhdGlvbnMKIEFMVEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgRFJP UCBQVUJMSUNBVElPTiB0ZXN0cHViMSwgdGVzdHB1YjIgV0lUSCAocmVmcmVzaCA9IGZhbHNlKTsK IFxkUnMrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0 aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFi bGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0 IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAg ICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBm ICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAg ICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRi bmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAgICAg fCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmlu YXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBP cmlnaW4gfCBNYXRjaCBEREwgb3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBD b25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlw dGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwg ZCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAgICAgICAg ICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3Qg fCAwLzAKICgxIHJvdykKIAogRFJPUCBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViOwpAQCAt MzYzLDEwICszNjMsMTAgQEAgQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09O TkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUIKIFdBUk5JTkc6ICBzdWJz Y3JpcHRpb24gd2FzIGNyZWF0ZWQsIGJ1dCBpcyBub3QgY29ubmVjdGVkCiBISU5UOiAgVG8gaW5p dGlhdGUgcmVwbGljYXRpb24sIHlvdSBtdXN0IG1hbnVhbGx5IGNyZWF0ZSB0aGUgcmVwbGljYXRp b24gc2xvdCwgZW5hYmxlIHRoZSBzdWJzY3JpcHRpb24sIGFuZCByZWZyZXNoIHRoZSBzdWJzY3Jp cHRpb24uCiBcZFJzKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1 YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNl IGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQg fCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91 c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgcCAgICAg ICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAg ICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBzdWJzY3JpcHRpb25zCisgICAgICBOYW1l ICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlv biB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVy cm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93bmVyIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAg ICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19z dWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9mZiAg ICAgICB8IHAgICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAg ICAgICAgICAgICAgIHwgb2ZmICAgICAgICAgICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25v dGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIC0tZmFpbCAtIGFsdGVyIG9mIHR3b19waGFzZSBvcHRp b24gbm90IHN1cHBvcnRlZC4KQEAgLTM3NSwxMCArMzc1LDEwIEBAIEVSUk9SOiAgdW5yZWNvZ25p emVkIHN1YnNjcmlwdGlvbiBwYXJhbWV0ZXI6ICJ0d29fcGhhc2UiCiAtLSBidXQgY2FuIGFsdGVy IHN0cmVhbWluZyB3aGVuIHR3b19waGFzZSBlbmFibGVkCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVn cmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0gdHJ1ZSk7CiBcZFJzKwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKLSAgICAgIE5hbWUgICAg ICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwg QmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3Ig fCBPcmlnaW4gfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAg ICAgfCBTa2lwIExTTiAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rl c3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAg IHwgZiAgICAgIHwgb24gICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAg ICAgfCBhbnkgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QgfCAwLzAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz dCBvZiBzdWJzY3JpcHRpb25zCisgICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3 by1waGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgTWF0Y2ggRERMIG93 bmVyIHwgU3luY2hyb25vdXMgY29tbWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwg U2tpcCBMU04gCistLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t CisgcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRpb25fdXNlciB8IGYgICAgICAg fCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9uICAgICAgICB8IHAgICAgICAgICAgICAgICAgfCBm ICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgdCAgICAgICAgICAgICAgIHwgb2ZmICAgICAgICAg ICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCiAoMSByb3cpCiAKIEFM VEVSIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgU0VUIChzbG90X25hbWUgPSBOT05FKTsK QEAgLTM4OCwxMCArMzg4LDEwIEBAIENSRUFURSBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3Vi IENPTk5FQ1RJT04gJ2RibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCcgUFVCCiBXQVJOSU5HOiAg c3Vic2NyaXB0aW9uIHdhcyBjcmVhdGVkLCBidXQgaXMgbm90IGNvbm5lY3RlZAogSElOVDogIFRv IGluaXRpYXRlIHJlcGxpY2F0aW9uLCB5b3UgbXVzdCBtYW51YWxseSBjcmVhdGUgdGhlIHJlcGxp Y2F0aW9uIHNsb3QsIGVuYWJsZSB0aGUgc3Vic2NyaXB0aW9uLCBhbmQgcmVmcmVzaCB0aGUgc3Vi c2NyaXB0aW9uLgogXGRScysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBv ZiBzdWJzY3JpcHRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEVuYWJsZWQgfCBQdWJsaWNhdGlvbiB8IEJpbmFyeSB8IFN0cmVhbWluZyB8IFR3by1w aGFzZSBjb21taXQgfCBEaXNhYmxlIG9uIGVycm9yIHwgT3JpZ2luIHwgU3luY2hyb25vdXMgY29t bWl0IHwgICAgICAgICAgQ29ubmluZm8gICAgICAgICAgIHwgU2tpcCBMU04gCi0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc190ZXN0c3ViIHwgcmVncmVzc19zdWJzY3JpcHRp b25fdXNlciB8IGYgICAgICAgfCB7dGVzdHB1Yn0gICB8IGYgICAgICB8IG9uICAgICAgICB8IHAg ICAgICAgICAgICAgICAgfCBmICAgICAgICAgICAgICAgIHwgYW55ICAgIHwgb2ZmICAgICAgICAg ICAgICAgIHwgZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0IHwgMC8wCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucworICAgICAg TmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGlj YXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBv biBlcnJvciB8IE9yaWdpbiB8IE1hdGNoIERETCBvd25lciB8IFN5bmNocm9ub3VzIGNvbW1pdCB8 ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAorLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jl c3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBv biAgICAgICAgfCBwICAgICAgICAgICAgICAgIHwgZiAgICAgICAgICAgICAgICB8IGFueSAgICB8 IHQgICAgICAgICAgICAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAogKDEgcm93KQogCiBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190 ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0gTk9ORSk7CkBAIC00MDQsMTggKzQwNCwxOCBAQCBDUkVB VEUgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBDT05ORUNUSU9OICdkYm5hbWU9cmVncmVz c19kb2Vzbm90ZXhpc3QnIFBVQgogV0FSTklORzogIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCwg YnV0IGlzIG5vdCBjb25uZWN0ZWQKIEhJTlQ6ICBUbyBpbml0aWF0ZSByZXBsaWNhdGlvbiwgeW91 IG11c3QgbWFudWFsbHkgY3JlYXRlIHRoZSByZXBsaWNhdGlvbiBzbG90LCBlbmFibGUgdGhlIHN1 YnNjcmlwdGlvbiwgYW5kIHJlZnJlc2ggdGhlIHN1YnNjcmlwdGlvbi4KIFxkUnMrCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Ygc3Vic2NyaXB0aW9ucwotICAgICAgTmFt ZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRp b24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28tcGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBl cnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNvbW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAg ICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3Rw dWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBkICAgICAgICAgICAgICAgIHwgZiAgICAgICAg ICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAgICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2Rv ZXNub3RleGlzdCB8IDAvMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5n IHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBPcmlnaW4gfCBNYXRjaCBE REwgb3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAgICAgICAg ICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAg ICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgb2ZmICAgICAgIHwgZCAgICAgICAgICAgICAg ICB8IGYgICAgICAgICAgICAgICAgfCBhbnkgICAgfCB0ICAgICAgICAgICAgICAgfCBvZmYgICAg ICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykK IAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKGRpc2FibGVfb25fZXJy b3IgPSB0cnVlKTsKIFxkUnMrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2Ygc3Vic2NyaXB0aW9ucwotICAgICAgTmFtZSAgICAgICB8ICAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBFbmFibGVkIHwgUHVibGljYXRpb24gfCBCaW5hcnkgfCBTdHJlYW1pbmcgfCBUd28t cGhhc2UgY29tbWl0IHwgRGlzYWJsZSBvbiBlcnJvciB8IE9yaWdpbiB8IFN5bmNocm9ub3VzIGNv bW1pdCB8ICAgICAgICAgIENvbm5pbmZvICAgICAgICAgICB8IFNraXAgTFNOIAotLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfdGVzdHN1YiB8IHJlZ3Jlc3Nfc3Vic2NyaXB0 aW9uX3VzZXIgfCBmICAgICAgIHwge3Rlc3RwdWJ9ICAgfCBmICAgICAgfCBvZmYgICAgICAgfCBk ICAgICAgICAgICAgICAgIHwgdCAgICAgICAgICAgICAgICB8IGFueSAgICB8IG9mZiAgICAgICAg ICAgICAgICB8IGRibmFtZT1yZWdyZXNzX2RvZXNub3RleGlzdCB8IDAvMAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMKKyAgICAg IE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8IFB1Ymxp Y2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvLXBoYXNlIGNvbW1pdCB8IERpc2FibGUg b24gZXJyb3IgfCBPcmlnaW4gfCBNYXRjaCBEREwgb3duZXIgfCBTeW5jaHJvbm91cyBjb21taXQg fCAgICAgICAgICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKKy0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdy ZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwg b2ZmICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IHQgICAgICAgICAgICAgICAgfCBhbnkgICAg fCB0ICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19k b2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3Nf dGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vi c2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlv bi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwKaW5kZXggNGJjNGZmMjIxMi4uOTAyZDIwMzRmNSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5w bAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCkBA IC00NTcsNiArNDU3LDIzIEBAIGlzKCRyZXN1bHQsIHFxKDQyKSwgJ0NSRUFURSBUQUJMRSBPRiBy ZXBsaWNhdGVkJyk7CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJE Uk9QIFRZUEUgaW50NDIgY2FzY2FkZSIpOwogCisjIFRlc3Qgb3duZXIgb2YgcmVwbGljYXRlZCB0 YWJsZSBvbiBzdWJzY3JpYmVyIG1hdGNoZXMgdGhlIG93bmVyIG9uIHB1Ymxpc2hlciB3aGVuCisj IHRoZSBtYXRjaF9kZGxfb3duZXIgc3Vic2NyaXB0aW9uIG9wdGlvbiBpcyBlbmFibGVkCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFJPTEUgZGRsX3JlcGxp Y2F0aW9uX3VzZXIgTE9HSU4gU1VQRVJVU0VSOyIpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBST0xFIGRkbF9yZXBsaWNhdGlvbl91c2VyIExPR0lO IFNVUEVSVVNFUjsiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi QUxURVIgU1VCU0NSSVBUSU9OIG15c3ViIFNFVCAobWF0Y2hfZGRsX293bmVyID0gdHJ1ZSk7Iik7 CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRVQgU0VTU0lPTiBB VVRIT1JJWkFUSU9OICdkZGxfcmVwbGljYXRpb25fdXNlcic7IENSRUFURSBUQUJMRSB0bXAgKGEg aW50LCBiIHZhcmNoYXIpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgdGFibGVvd25lciBmcm9tIHBnX2NhdGFsb2cucGdfdGFibGVzIHdoZXJlIHRh YmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoZGRsX3JlcGxpY2F0aW9uX3VzZXIp LCAnT3duZXIgb2YgdG1wIGlzIGRkbF9yZXBsaWNhdGlvbl91c2VyJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyMgcmVzZXQgbWF0 Y2hfZGRsX293bmVyCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFM VEVSIFNVQlNDUklQVElPTiBteXN1YiBTRVQgKG1hdGNoX2RkbF9vd25lciA9IGZhbHNlKTsiKTsK KworCiBwYXNzICJEREwgcmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CiAKICRub2RlX3N1YnNj cmliZXItPnN0b3A7Ci0tIAoyLjM0LjEKCg== --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Disposition: attachment; filename="v77-0007-Document-DDL-replication-and-DDL-deparser.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69dj6 RnJvbSBiNjA4YTZlZjM2ZTliOGY4NjA2ZDU0NGJkM2EwMTdlYmU2M2QxMjUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgNiBNYXIgMjAyMyAwMDowMToyOCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDcvOF0gRG9jdW1lbnQgRERMIHJlcGxpY2F0aW9uIGFuZCBEREwgZGVwYXJzZXIuCgotLS0K IGRvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwgfCAxMDU3ICsrKysrKysrKysr KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMDU3IGluc2VydGlvbnMoKykKCmRpZmYg LS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9z Z21sL2xvZ2ljYWwtcmVwbGljYXRpb24uc2dtbAppbmRleCAxYmQ1NjYwYzg3Li45MjhlMGVmYjQy IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9naWNhbC1yZXBsaWNhdGlvbi5zZ21sCisrKyBi L2RvYy9zcmMvc2dtbC9sb2dpY2FsLXJlcGxpY2F0aW9uLnNnbWwKQEAgLTE0MzcsNiArMTQzNywx MDYzIEBAIHRlc3Rfc3ViPSMgU0VMRUNUICogRlJPTSB0MSBPUkRFUiBCWSBpZDsKIAogIDwvc2Vj dDE+CiAKKyA8c2VjdDEgaWQ9ImxvZ2ljYWwtcmVwbGljYXRpb24tZGRsIj4KKyAgPHRpdGxlPkRE TCBSZXBsaWNhdGlvbjwvdGl0bGU+CisgIDxwYXJhPgorICAgIERhdGEgRGVmaW5pdGlvbiBDb21t YW5kcyAoRERMcykgY2FuIGJlIHJlcGxpY2F0ZWQgdXNpbmcgbG9naWNhbCByZXBsaWNhdGlvbi4K KyAgICBXaGlsZSBlbmFibGVkIHRoaXMgZmVhdHVyZSBhdXRvbWF0aWNhbGx5IHJlcGxpY2F0ZXMg c3VwcG9ydGVkIERETCBjb21tYW5kcworICAgIHRoYXQgYXJlIHN1Y2Nlc3NmdWxseSBleGVjdXRl ZCBvbiBhIHB1Ymxpc2hlciB0byBhIHN1YnNjcmliZXIuIFRoaXMgaXMKKyAgICBlc3BlY2lhbGx5 IHVzZWZ1bCBpZiB5b3UgaGF2ZSBsb3RzIHNjaGVtYSBjaGFuZ2VzIG92ZXIgdGltZSB0aGF0IG5l ZWQgcmVwbGljYXRpb24uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgICBGb3IgZXhhbXBsZSwg d2hlbiBlbmFibGVkIGEgQ1JFQVRFIFRBQkxFIGNvbW1hbmQgZXhlY3V0ZWQgb24gdGhlIHB1Ymxp c2hlciBnZXRzCisgICAgV0FMLWxvZ2dlZCwgYW5kIGZvcndhcmRlZCB0byB0aGUgc3Vic2NyaWJl ciB0byByZXBsYXk7IGEgc3Vic2VxdWVudCAiQUxURVIKKyAgICBTVUJTQ1JJUFRJT04gLi4uIFJF RlJFU0ggUFVCTElDQVRJT04iIGlzIHJ1biBvbiB0aGUgc3Vic2NyaWVyIGRhdGFiYXNlIHNvIGFu eQorICAgIGZvbGxvd2luZyBETUwgY2hhbmdlcyBvbiB0aGUgbmV3IHRhYmxlIGNhbiBiZSByZXBs aWNhdGVkIHdpdGhvdXQgYSBoaXRjaC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgIERETCBy ZXBsaWNhdGlvbiBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBpdCBjYW4gYmUgZW5hYmxlZCBhdCBk aWZmZXJlbnQgbGV2ZWxzCisgICAgdXNpbmcgdGhlIGRkbCBQVUJMSUNBVElPTiBvcHRpb24uIFRo aXMgb3B0aW9uIGN1cnJlbnRseSBoYXMgdHdvIGxldmVscyBhbmQgYXJlCisgICAgb25seSBhbGxv d2VkIHRvIGJlIHNldCBpZiB0aGUgUFVCTElDQVRJT04gaXMgRk9SIEFMTCBUQUJMRVMuCisgIDwv cGFyYT4KKworICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgor ICAgICAgICBhbGw6IHRoaXMgb3B0aW9uIGVuYWJsZXMgcmVwbGljYXRpb24gb2YgYWxsIHN1cHBv cnRlZCBEREwgY29tbWFuZHMuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKworICAg IDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgICB0YWJsZTogdGhpcyBvcHRpb24gZW5h YmxlcyByZXBsaWNhdGlvbiBvZiBUYWJsZSBEREwgY29tbWFuZHMsCisgICAgICAgIHdoaWNoIGlu Y2x1ZGU6CisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICAgIENSRUFURS9BTFRFUi9EUk9QIFRBQkxFCisg ICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgICBDUkVBVEUgVEFCTEUg QVMKKyAgICAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgICA8L2xpc3RpdGVtPgorCisgICAgICAg IDwvaXRlbWl6ZWRsaXN0PgorICAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgIDwvaXRl bWl6ZWRsaXN0PgorCisgIDxzZWN0MiBpZD0iZGRsLXJlcGxpY2F0aW9uLW9wdGlvbi1leGFtcGxl cyI+CisgICAgPHRpdGxlPkV4YW1wbGVzIC0gU2V0dXAgRERMIFJlcGxpY2F0aW9uIG9uIHRoZSBQ dWJsaXNoZXI8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgICBDcmVhdGUgYSBuZXcgcHVibGlj YXRpb24gd2l0aCBhbGwgZGRsIHJlcGxpY2F0aW9uIGVuYWJsZWQ6Cis8cHJvZ3JhbWxpc3Rpbmc+ CitDUkVBVEUgUFVCTElDQVRJT04gbXlwdWIgRk9SIEFMTCBUQUJMRVMgd2l0aCAoZGRsID0gJ2Fs bCcpOworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEVuYWJs ZSB0YWJsZSBkZGwgcmVwbGljYXRpb24gZm9yIGFuIGV4aXN0aW5nIFB1YmxpY2F0aW9uOgorPHBy b2dyYW1saXN0aW5nPgorQUxURVIgUFVCTElDQVRJT04gbXlwdWIgU0VUIChkZGwgPSAndGFibGUn KTsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgIDwvc2VjdDI+CisKKyAgPHNlY3QyIGlk PSJkZGwtcmVwbGljYXRpb24tc3VwcG9ydGVkLWNvbW1hbmRzIj4KKyAgICA8dGl0bGU+U3VwcG9y dGVkIERETCBjb21tYW5kczwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBEREwgY29t bWFuZHMgc3VwcG9ydGVkIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIGFyZSBsaXN0ZWQgaW4gdGhl IGZvbGxvd2luZworICAgICAgbWF0cml4LiBOb3RlIHRoYXQgZ2xvYmFsIGNvbW1hbmRzIGNhbiBi ZSBleGVjdXRlZCBhdCBhbnkgZGF0YWJhc2UgYW5kIGFyZSBjdXJyZW50bHkKKyAgICAgIG5vdCBz dXBwb3J0ZWQgZm9yIHJlcGxpY2F0aW9uLCBnbG9iYWwgY29tbWFuZHMgaW5jbHVkZSBST0xFIHN0 YXRlbWVudHMsIERhdGFiYXNlCisgICAgICBzdGF0ZW1lbnRzLCBUYWJsZVNwYWNlIHN0YXRlbWVu dHMgYW5kIHNvbWUgb2YgdGhlIEdyYW50U3RtdC9SZXZva2VTdG10IGlmIHRoZSB0YXJnZXQKKyAg ICAgIG9iamVjdCBpcyBhIGdsb2JhbCBvYmplY3QuCisgICAgPC9wYXJhPgorCisgICAgPHRhYmxl IGlkPSJkZGwtcmVwbGljYXRpb24tYnktY29tbWFuZC10YWciPgorICAgICAgPHRpdGxlPkRETCBS ZXBsaWNhdGlvbiBTdXBwb3J0IGJ5IENvbW1hbmQgVGFnPC90aXRsZT4KKyAgICAgIDx0Z3JvdXAg Y29scz0iMyI+CisgICAgICAgIDxjb2xzcGVjIGNvbG5hbWU9ImNvbDEiIGNvbHdpZHRoPSIyKiIv PgorICAgICAgICA8Y29sc3BlYyBjb2xuYW1lPSJjb2wyIiBjb2x3aWR0aD0iMSoiLz4KKyAgICAg ICAgPGNvbHNwZWMgY29sbmFtZT0iY29sMyIgY29sd2lkdGg9IjEqIi8+CisgICAgICA8dGhlYWQ+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5PkNvbW1hbmQgVGFnPC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5PkZvciBSZXBsaWNhdGlvbjwvZW50cnk+CisgICAgICAgIDxlbnRyeT5Ob3Rlczwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICA8L3RoZWFkPgorICAgICAgPHRib2R5PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgQUdH UkVHQVRFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIENBU1Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgQ09MTEFUSU9O PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkFMVEVSIENPTlZFUlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxy b3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgREFUQUJBU0U8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Pi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+QUxURVIgREVGQVVMVCBQUklWSUxFR0VTPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIERP TUFJTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBFVkVOVCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEVY VEVOU0lPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUjwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5BTFRFUiBGT1JFSUdOIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIEZVTkNUSU9OPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIElOREVYPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIExBTkdVQUdFPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFM VEVSIExBUkdFIE9CSkVDVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBNQVRFUklBTElaRUQgVklFVzwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUiBDTEFTUzwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5BTFRFUiBPUEVSQVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgUE9MSUNZ PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkFMVEVSIFBST0NFRFVSRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBQVUJMSUNBVElP TjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5BTFRFUiBST0xFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFJPVVRJTkU8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+QUxURVIgUlVMRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgU0NIRU1BPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFM VEVSIFNFUVVFTkNFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNFUlZFUjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBT VEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFNVQlNDUklQVElPTjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRF UiBTWVNURU08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEFCTEVT UEFDRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVEVYVCBT RUFSQ0ggUEFSU0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkFMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkFMVEVSIFRSQU5TRk9STTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5BTFRFUiBUUklHR0VSPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkFMVEVSIFRZUEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QUxURVIgVVNFUiBNQVBQSU5HPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkFMVEVSIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+QU5BTFlaRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5CRUdJTjwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DQUxMPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNIRUNLUE9JTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAg IDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q0xPU0U8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+Q0xPU0UgQ1VSU09SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNMT1NFIENVUlNPUiBBTEw8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+Q0xVU1RFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT01NRU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8 cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNPTU1JVDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5DT01NSVQgUFJFUEFSRUQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q09QWTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DT1BZIEZS T008L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEFDQ0VTUyBNRVRIT0Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEFH R1JFR0FURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ0FTVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgQ09MTEFU SU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDT05TVFJBSU5UPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBDT05W RVJTSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBEQVRBQkFTRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgRE9N QUlOPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0 ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9l bnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBFVkVOVCBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBF WFRFTlNJT048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkNSRUFURSBGT1JFSUdOIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBGVU5DVElPTjwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5DUkVBVEUgSU5ERVg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIExBTkdVQUdFPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkNSRUFURSBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgT1BFUkFUT1I8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFs Plg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5 PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PGxpdGVyYWw+Q1JFQVRFIE9QRVJBVE9SIENMQVNTPC9saXRlcmFsPjwvZW50cnk+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAg ICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBPUEVS QVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFBPTElDWTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUg UFJPQ0VEVVJFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBQVUJMSUNBVElPTjwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVB VEUgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgUlVMRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAg PHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU0NIRU1B PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPkNSRUFURSBTRVFVRU5DRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgU0VSVkVSPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5Y PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkNSRUFURSBTVEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBTVUJTQ1JJUFRJ T048L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFRBQkxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUQUJMRSBBUzwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5DUkVBVEUgVEFCTEVTUEFDRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJv dz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFS Q0ggQ09ORklHVVJBVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFS WTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVy YWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50 cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFU RSBURVhUIFNFQVJDSCBURU1QTEFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5DUkVBVEUgVFJBTlNGT1JNPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkNSRUFURSBUUklHR0VSPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkNSRUFURSBUWVBFPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkNSRUFURSBVU0VSIE1BUFBJTkc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+Q1JFQVRFIFZJRVc8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ REVBTExPQ0FURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRl ciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUFMTE9DQVRFIEFMTDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUNMQVJF IENVUlNPUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RElTQ0FSRDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5ESVNDQVJEIEFMTDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ESVNDQVJEIFBMQU5TPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NB UkQgU0VRVUVOQ0VTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRJU0NBUkQgVEVNUDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ETzwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5EUk9QIEFDQ0VTUyBNRVRIT0Q8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBBR0dSRUdBVEU8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+RFJPUCBDQVNUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgQ09MTEFUSU9OPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PkRST1AgQ09OU1RSQUlOVDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIENPTlZFUlNJT048L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwv cm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+ RFJPUCBEQVRBQkFTRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIERPTUFJTjwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEVW RU5UIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBFWFRFTlNJT048L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93Pgor ICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBG T1JFSUdOIERBVEEgV1JBUFBFUjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIEZPUkVJR04gVEFCTEU8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAg ICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxp dGVyYWw+RFJPUCBGVU5DVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIElOREVYPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgTEFOR1VBR0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50 ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJs ZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRy eSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBNQVRFUklBTElaRUQgVklFVzwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5EUk9QIE9QRVJBVE9SPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgT1BFUkFUT1IgQ0xBU1M8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+RFJPUCBPUEVSQVRPUiBGQU1JTFk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBPV05FRDwvbGl0ZXJhbD48 L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAg PC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJh bD5EUk9QIFBPTElDWTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNl bnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249 ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFBST0NFRFVSRTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2Vu dHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+ CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9Q IFBVQkxJQ0FUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFJPVVRJ TkU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRl cmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2Vu dHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PGxpdGVyYWw+RFJPUCBSVUxFPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgU0NIRU1BPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAg ICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRl cmFsPkRST1AgU0VRVUVOQ0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBTRVJWRVI8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBTVEFUSVNUSUNTPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgU1VCU0NSSVBUSU9OPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jv dz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRS T1AgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIi PjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUQUJMRVNQQUNFPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVEVY VCBTRUFSQ0ggQ09ORklHVVJBVElPTjwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRFWFQgU0VBUkNIIERJQ1RJ T05BUlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxs aXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBURVhUIFNFQVJDSCBQQVJTRVI8L2xpdGVyYWw+PC9lbnRy eT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9l bnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93 PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJP UCBURVhUIFNFQVJDSCBURU1QTEFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5EUk9QIFRSQU5TRk9STTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAg ICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0 ZXJhbD5EUk9QIFRSSUdHRVI8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RFJPUCBUWVBFPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50 cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4K KyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1Ag VVNFUiBNQVBQSU5HPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2Vu dGVyIj48bGl0ZXJhbD5YPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i bGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkRST1AgVklFVzwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5FWEVDVVRFPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4t PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4K KyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+RkVUQ0g8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+R1JBTlQ8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+R1JBTlQgUk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxp Z249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAg ICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5JTVBPUlQgRk9SRUlHTiBTQ0hFTUE8L2xp dGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8 L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5Pgor ICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PGxpdGVyYWw+SU5TRVJUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0i Y2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPkxJU1RFTjwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5MT0FEPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPkxPQ0sgVEFCTEU8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TUVSR0U8L2xpdGVyYWw+PC9lbnRyeT4KKyAg ICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAg ICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+TU9WRTwvbGl0 ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+Cisg ICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48 bGl0ZXJhbD5OT1RJRlk8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJj ZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UFJFUEFSRTwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5QUkVQQVJFIFRS QU5TQUNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVy Ij48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVm dCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkg YWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFQVNTSUdOIE9XTkVEPC9saXRlcmFsPjwvZW50cnk+Cisg ICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+ CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAg ICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFRlJFU0gg TUFURVJJQUxJWkVEIFZJRVc8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAg IDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+UkVJTkRFWDwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRUxFQVNF PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJh bD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRy eT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249Imxl ZnQiPjxsaXRlcmFsPlJFU0VUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGln bj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBh bGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAg ICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlJFVk9LRTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+WDwvbGl0ZXJhbD48L2VudHJ5 PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+Cisg ICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5SRVZPS0Ug Uk9MRTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxp dGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwv ZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWdu PSJsZWZ0Ij48bGl0ZXJhbD5ST0xMQkFDSzwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50 cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8 ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4K KyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5ST0xMQkFDSyBQUkVQQVJFRDwv bGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+ LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+ CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0 Ij48bGl0ZXJhbD5TQVZFUE9JTlQ8L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5 IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgICAgIDxyb3c+CisgICAg ICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVyYWw+U0VDVVJJVFkgTEFCRUw8L2xpdGVyYWw+ PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPlg8L2xpdGVy YWw+PC9lbnRyeT4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAg IDwvcm93PgorICAgICAgIDxyb3c+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PGxpdGVy YWw+U0VUPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48 bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+ PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxp Z249ImxlZnQiPjxsaXRlcmFsPlNFVCBDT05TVFJBSU5UUzwvbGl0ZXJhbD48L2VudHJ5PgorICAg ICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAg ICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFsaWduPSJsZWZ0Ij48bGl0ZXJhbD5TSE9XPC9saXRl cmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9s aXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAg ICAgICA8L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxs aXRlcmFsPlNUQVJUIFRSQU5TQUNUSU9OPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxlbnRy eSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgIDxl bnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8L3Jvdz4KKyAgICAgICA8cm93Pgor ICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFsPlVOTElTVEVOPC9saXRlcmFsPjwv ZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0iY2VudGVyIj48bGl0ZXJhbD4tPC9saXRlcmFs PjwvZW50cnk+CisgICAgICAgIDxlbnRyeSBhbGlnbj0ibGVmdCI+PC9lbnRyeT4KKyAgICAgICA8 L3Jvdz4KKyAgICAgICA8cm93PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQiPjxsaXRlcmFs PlVQREFURTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImNlbnRlciI+ PGxpdGVyYWw+LTwvbGl0ZXJhbD48L2VudHJ5PgorICAgICAgICA8ZW50cnkgYWxpZ249ImxlZnQi PjwvZW50cnk+CisgICAgICAgPC9yb3c+CisgICAgICAgPHJvdz4KKyAgICAgICAgPGVudHJ5IGFs aWduPSJsZWZ0Ij48bGl0ZXJhbD5WQUNVVU08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAgPGVu dHJ5IGFsaWduPSJjZW50ZXIiPjxsaXRlcmFsPi08L2xpdGVyYWw+PC9lbnRyeT4KKyAgICAgICAg PGVudHJ5IGFsaWduPSJsZWZ0Ij48L2VudHJ5PgorICAgICAgIDwvcm93PgorICAgIDwvdGJvZHk+ CisgICAgPC90Z3JvdXA+CisgICAgPC90YWJsZT4KKyAgPC9zZWN0Mj4KKworICA8c2VjdDIgaWQ9 ImRkbC1yZXBsaWNhdGlvbi1kZGwtZGVwYXJzZXIiPgorICAgIDx0aXRsZT5EREwgRGVwYXJzZXI8 L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhlIERETCBkZXBhcnNlciB1dGlsaXR5IGlzIGlu dm9rZWQgZHVyaW5nIHRoZSByZXBsaWNhdGlvbiBvZiBERExzLiBUaGUgRERMCisgICAgICBkZXBh cnNlciBpcyBjYXBhYmxlIG9mIGNvbnZlcnRpbmcgYSBEREwgY29tbWFuZCBpbnRvIGZvcm1hdHRl ZCBKU09OIGJsb2IsIHdpdGgKKyAgICAgIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gcmVj b25zdHJ1Y3QgdGhlIERETCBjb21tYW5kcyBhdCB0aGUgZGVzdGluYXRpb24uIFRoZQorICAgICAg YmVuZWZpdCBvZiB1c2luZyB0aGUgZGVwYXJzZXIgb3V0cHV0IGNvbXBhcmVkIHRvIHRoZSBvcmln aW5hbCBjb21tYW5kIHN0cmluZworICAgICAgaW5jbHVkZXM6CisgICAgICA8aXRlbWl6ZWRsaXN0 PgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+CisgICAgICAgICAgICBFdmVy eSBkYXRhYmFzZSBvYmplY3QgaW4gdGhlIGRlcGFyc2VkIG91dHB1dCBpcyBzY2hlbWEtcXVhbGlm aWVkLCBzbyB0aGF0CisgICAgICAgICAgICB0aGVyZSBhcmUgbm8gYW1iaWd1aXRpZXMgZXZlbiBp biB0aGUgZmFjZSBvZiBzZWFyY2hfcGF0aCBjaGFuZ2VzLgorICAgICAgICAgIDwvcGFyYT4KKyAg ICAgICAgPC9saXN0aXRlbT4KKworICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICAgPHBhcmE+ CisgICAgICAgICAgICBUaGUgc3RydWN0dXJlZCBKU09OIGFuZCB0aGUgZm9ybWF0dGVkIG91dHB1 dCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IKKyAgICAgICAgICAgIG1hY2hpbmUgZWRpdGluZy4gVGhp cyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBzdWJzY3JpYmVyIGlzIG9uIGEgZGlmZmVyZW50CisgICAg ICAgICAgICBQRyB2ZXJzaW9uIGFuZCBoYXMgY2VydGFpbiBEREwgc3ludGF4IGRpZmZlcmVuY2Vz IHdoaWNoIG5lZWQgdG8gYmUKKyAgICAgICAgICAgIHJlc29sdmVkIGJlZm9yZSBhcHBseS4KKyAg ICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisKKyAgICAgIDwvaXRlbWl6ZWRs aXN0PgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIERETCBkZXBhcnNlciBl eHBvc2VzIHR3byBTUUwgZnVuY3Rpb25zOgorICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgZGRsX2RlcGFyc2VfdG9f anNvbjogZ2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kIGZyb20gZXZlbnQgdHJpZ2dlciwKKyAgICAg ICAgICAgIHJldHVybnMgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0LiBUaGUgY29tbWFuZCBp cyBleHBhbmRlZCBmdWxseQorICAgICAgICAgICAgc28gdGhhdCB0aGVyZSBhcmUgbm8gYW1iaWd1 aXRpZXMgZXZlbiBpbiB0aGUgZmFjZSBvZiBzZWFyY2hfcGF0aAorICAgICAgICAgICAgY2hhbmdl cy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L2l0ZW1p emVkbGlzdD4KKworICAgICAgPGl0ZW1pemVkbGlzdD4KKyAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICAgIDxwYXJhPgorICAgICAgICAgICAgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQ6IEV4 cGFuZCBKU09OIGZvcm1hdCBEREwgZ2VuZXJhdGVkIGJ5CisgICAgICAgICAgICBkZGxfZGVwYXJz ZV90b19qc29uIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQuCisgICAgICAgICAgPC9wYXJhPgorICAg ICAgICA8L2xpc3RpdGVtPgorICAgICAgPC9pdGVtaXplZGxpc3Q+CisgICAgPC9wYXJhPgorICA8 L3NlY3QyPgorCisgPC9zZWN0MT4KKwogIDxzZWN0MSBpZD0ibG9naWNhbC1yZXBsaWNhdGlvbi1j b25mbGljdHMiPgogICA8dGl0bGU+Q29uZmxpY3RzPC90aXRsZT4KIAotLSAKMi4zNC4xCgo= --000000000000e87dcb05f68939b7 Content-Type: text/x-patch; charset="US-ASCII"; name="v77-0006-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v77-0006-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lf2e69di5 RnJvbSBjNDI3ZWFlZjYxM2MyMzAzODhiNzM1NDkwMDhiMzU3YjQzODE5NTRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IFN1biwgNSBNYXIgMjAyMyAyMzo1Njo0MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0gg djc3IDYvOF0gU3VwcG9ydCBEREwgcmVwbGljYXRpb24uCgpUbyBzdXBwb3J0IERETCByZXBsaWNh 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 L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICAgIHwgICAyICsKIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgICAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgICAgICAgICAgfCAzMTAgKysrKysrKysrKyst CiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgICAgfCAyNTEgKysr KysrKystLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICAgIHwg IDEwICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jICAgICAgICAgICAgfCAg IDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgIHwgICAx ICsKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jICB8IDM2NSAr KysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMg ICAgIHwgIDQ5ICsrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxk ICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAg IHwgIDQzICsrCiAuLi4vcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAg fCAgMjAgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgICAgICB8 IDI0MCArKysrKysrKysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMgICB8IDE5MSArKysrKystCiBzcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jICAgICAgICAgICAg ICAgICAgICAgfCAgMjYgKy0KIHNyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jICAgICAgICAgICAg ICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyAgICAg ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAg ICAgICB8ICAgMiArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAg ICAgfCAgOTAgKysrLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAg ICAgIHwgICAyICsKIHNyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsICAgICAgICAgICAg ICB8ICAgMiArLQogc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAg IHwgIDQ0ICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAg fCAgMTIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwg IDE3ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAx NCArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICAgIHwgICA0 ICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCAgICAgICB8ICAxNSAr LQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCAgICAgICAgICAgIHwgICAxICsK IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICB8ICAxMiArCiBz cmMvaW5jbHVkZS90Y29wL2NtZHRhZy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNy Yy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oICAgICAgICAgICAgICAgICB8IDM4NiArKysrKysr LS0tLS0tLS0KIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oICAgICAgICAgICAgICAgICAgfCAg IDMgKy0KIC4uLi9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0ICAgICAgICAgICAgICAgICB8ICAg NyArCiAuLi4vc3FsL2NyZWF0ZV90YWJsZS5zcWwgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgIHwgICA2ICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgICAgfCA0MjAgKysr KysrKystLS0tLS0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwg ICAgIHwgNDY1ICsrKysrKysrKysrKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QgICAgICAgICAgICAgIHwgICA2ICsKIDM5IGZpbGVzIGNoYW5nZWQsIDI1NTggaW5zZXJ0 aW9ucygrKSwgNDg3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsdHJpZ2dlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYwppbmRleCBhOThmY2FkNDIxLi5jNTA1ZjI0NDBkIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC0xMDA1LDYgKzEwMDUsOCBAQCBHZXRQdWJs aWNhdGlvbihPaWQgcHViaWQpCiAJcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IHB1YmZvcm0t PnB1YnVwZGF0ZTsKIAlwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlID0gcHViZm9ybS0+cHViZGVs ZXRlOwogCXB1Yi0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IHB1YmZvcm0tPnB1YnRydW5jYXRl OworCXB1Yi0+cHViYWN0aW9ucy5wdWJkZGxfYWxsID0gcHViZm9ybS0+cHViZGRsX2FsbDsKKwlw dWItPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlID0gcHViZm9ybS0+cHViZGRsX3RhYmxlOwogCXB1 Yi0+cHVidmlhcm9vdCA9IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUo dHVwKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmluZGV4IGQ2YzZkNTE0ZjMuLjc3ZGNiOWM5ZGIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNh dGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1 ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dl ci5oIgogI2luY2x1ZGUgImNvbW1hbmRzL21hdHZpZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9w cmVwYXJlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0 LDE1IEBAIGNyZWF0ZV9jdGFzX2ludGVybmFsKExpc3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICpp bnRvKQogCQlTdG9yZVZpZXdRdWVyeShpbnRvUmVsYXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwg ZmFsc2UpOwogCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwogCX0KKwllbHNlCisJeworCQkv KgorCQkgKiBGaXJlIHRoZSB0cmlnZ2VyIGZvciB0YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0 aW5nIHRoZSB0YWJsZSBzbworCQkgKiB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5m byBhYm91dCB0aGUgbmV3bHkgY3JlYXRlZCB0YWJsZQorCQkgKiBpbiB0aGUgdHJpZ2dlciBmdW5j dGlvbi4KKwkJICovCisJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0 ZSwgaW50b1JlbGF0aW9uQWRkcik7CisJfQogCiAJcmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggMTkyOGU1OWEwYi4uYjNmNjg0 OTAwNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMzYsOSArMzYsMTMg QEAKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNp bmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisj aW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91 dGlsaXR5LmgiCiAjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCisjaW5jbHVkZSAidGNvcC9kZGxf ZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZXZ0Y2FjaGUuaCIKQEAgLTkyLDcgKzk2LDggQEAgQ3Jl YXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJpZ1N0bXQgKnN0bXQpCiAJaWYgKHN0cmNtcChz dG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpICE9IDAgJiYKIAkJc3RyY21wKHN0 bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpICE9IDAgJiYKIAkJc3RyY21wKHN0bXQt PmV2ZW50bmFtZSwgInNxbF9kcm9wIikgIT0gMCAmJgotCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAidGFibGVfcmV3cml0ZSIpICE9IDApCisJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJs ZV9yZXdyaXRlIikgIT0gMCAmJgorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfaW5p dF93cml0ZSIpICE9IDApCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9T WU5UQVhfRVJST1IpLAogCQkJCSBlcnJtc2coInVucmVjb2duaXplZCBldmVudCBuYW1lIFwiJXNc IiIsCkBAIC0xMTgsNyArMTIzLDggQEAgQ3JlYXRlRXZlbnRUcmlnZ2VyKENyZWF0ZUV2ZW50VHJp Z1N0bXQgKnN0bXQpCiAJLyogVmFsaWRhdGUgdGFnIGxpc3QsIGlmIGFueS4gKi8KIAlpZiAoKHN0 cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9zdGFydCIpID09IDAgfHwKIAkJIHN0 cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxfY29tbWFuZF9lbmQiKSA9PSAwIHx8Ci0JCSBzdHJj bXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwKQorCQkgc3RyY21wKHN0bXQtPmV2 ZW50bmFtZSwgInNxbF9kcm9wIikgPT0gMCB8fAorCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwg InRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQogCQkmJiB0YWdzICE9IE5VTEwpCiAJCXZhbGlkYXRl X2RkbF90YWdzKCJ0YWciLCB0YWdzKTsKIAllbHNlIGlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAidGFibGVfcmV3cml0ZSIpID09IDAKQEAgLTUyMiw2ICs1MjgsNyBAQCBFdmVudFRyaWdnZXJD b21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJTGlzdAkgICAqY2FjaGVsaXN0OwogCUxpc3RD ZWxsICAgKmxjOwogCUxpc3QJICAgKnJ1bmxpc3QgPSBOSUw7CisJaW50CQkJcHViX2RlcGFyc2Vf ZnVuY19jbnQgPSAwOwogCiAJLyoKIAkgKiBXZSB3YW50IHRoZSBsaXN0IG9mIGNvbW1hbmQgdGFn cyBmb3Igd2hpY2ggdGhpcyBwcm9jZWR1cmUgaXMgYWN0dWFsbHkKQEAgLTU0NCw3ICs1NTEsOCBA QCBFdmVudFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJCWRiZ3RhZyA9IENy ZWF0ZUNvbW1hbmRUYWcocGFyc2V0cmVlKTsKIAkJaWYgKGV2ZW50ID09IEVWVF9ERExDb21tYW5k U3RhcnQgfHwKIAkJCWV2ZW50ID09IEVWVF9ERExDb21tYW5kRW5kIHx8Ci0JCQlldmVudCA9PSBF VlRfU1FMRHJvcCkKKwkJCWV2ZW50ID09IEVWVF9TUUxEcm9wIHx8CisJCQlldmVudCA9PSBFVlRf VGFibGVJbml0V3JpdGUpCiAJCXsKIAkJCWlmICghY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9v ayhkYmd0YWcpKQogCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGNvbW1hbmQgdGFnIFwiJXNc IiIsIEdldENvbW1hbmRUYWdOYW1lKGRiZ3RhZykpOwpAQCAtNTcxLDYgKzU3OSwxMiBAQCBFdmVu dFRyaWdnZXJDb21tb25TZXR1cChOb2RlICpwYXJzZXRyZWUsCiAJICogb25jZSB3ZSBkbyBhbnl0 aGluZyBhdCBhbGwgdGhhdCB0b3VjaGVzIHRoZSBjYXRhbG9ncywgYW4gaW52YWxpZGF0aW9uCiAJ ICogbWlnaHQgbGVhdmUgY2FjaGVsaXN0IHBvaW50aW5nIGF0IGdhcmJhZ2UsIHNvIHdlIG11c3Qg ZG8gdGhpcyBiZWZvcmUgd2UKIAkgKiBjYW4gZG8gbXVjaCBlbHNlLgorCSAqCisJICogU3BlY2lh bCBoYW5kbGluZyBmb3IgZXZlbnQgdHJpZ2dlcnMgY3JlYXRlZCBhcyBwYXJ0IG9mIHB1YmxpY2F0 aW9ucy4KKwkgKiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgcHVibGljYXRpb25zIHdoaWNoIHB1Ymxp c2ggZGRscywgb25seSBvbmUgc2V0IG9mIHRoZQorCSAqIGV2ZW50IHRyaWdnZXIgZnVuY3Rpb25z IG5lZWQgdG8gYmUgaW52b2tlZC4gVGhlIGRkbCBkZXBhcnNlIGV2ZW50IHRyaWdnZXJzCisJICog d3JpdGUgdG8gV0FMLCBzbyBubyBuZWVkIHRvIGR1cGxpY2F0ZSBpdCBhcyBhbGwgd2Fsc2VuZGVy cyB3aWxsIHJlYWQgdGhlIHNhbWUKKwkgKiBXQUwuCiAJICovCiAJZm9yZWFjaChsYywgY2FjaGVs aXN0KQogCXsKQEAgLTU3OCw4ICs1OTIsMjUgQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9k ZSAqcGFyc2V0cmVlLAogCiAJCWlmIChmaWx0ZXJfZXZlbnRfdHJpZ2dlcih0YWcsIGl0ZW0pKQog CQl7Ci0JCQkvKiBXZSBtdXN0IHBsYW4gdG8gZmlyZSB0aGlzIHRyaWdnZXIuICovCi0JCQlydW5s aXN0ID0gbGFwcGVuZF9vaWQocnVubGlzdCwgaXRlbS0+Zm5vaWQpOworCQkJc3RhdGljIGNvbnN0 IGNoYXIgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8lcyI7CisJ CQljaGFyCQl0cmlnZ2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07CisJCQlPaWQJCQlwdWJfZnVu Y29pZDsKKwkJCUxpc3QgCQkqcHViZnVuY25hbWU7CisKKwkJCS8qIEdldCBmdW5jdGlvbiBvaWQg b2YgdGhlIHB1YmxpY2F0aW9uJ3MgZGRsIGRlcGFyc2UgZXZlbnQgdHJpZ2dlciAqLworCQkJc25w cmludGYodHJpZ2dlcl9mdW5jX25hbWUsIHNpemVvZih0cmlnZ2VyX2Z1bmNfbmFtZSksIHRyaWdn ZXJfZnVuY19wcmVmaXgsCisJCQkJCSBldmVudHN0cik7CisJCQlwdWJmdW5jbmFtZSA9IFN5c3Rl bUZ1bmNOYW1lKHRyaWdnZXJfZnVuY19uYW1lKTsKKwkJCXB1Yl9mdW5jb2lkID0gTG9va3VwRnVu Y05hbWUocHViZnVuY25hbWUsIDAsIE5VTEwsIHRydWUpOworCisJCQlpZiAoaXRlbS0+Zm5vaWQg IT0gcHViX2Z1bmNvaWQpCisJCQkJcnVubGlzdCA9IGxhcHBlbmRfb2lkKHJ1bmxpc3QsIGl0ZW0t PmZub2lkKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiBPbmx5IHRoZSBmaXJzdCBkZGwgZGVwYXJz ZSBldmVudCB0cmlnZ2VyIG5lZWRzIHRvIGJlIGludm9rZWQgKi8KKwkJCQlpZiAocHViX2RlcGFy c2VfZnVuY19jbnQrKyA9PSAwKQorCQkJCQlydW5saXN0ID0gbGFwcGVuZF9vaWQocnVubGlzdCwg aXRlbS0+Zm5vaWQpOworCQkJfQogCQl9CiAJfQogCkBAIC04MjcsNiArODU4LDE0MSBAQCBFdmVu dFRyaWdnZXJUYWJsZVJld3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPaWQgdGFibGVPaWQsIGludCBy ZWFzb24pCiAJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKIH0KIAorCisvKgorICogRXZlbnRU cmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydAorICogICAgIFByZXBhcmUgdG8gcmVjZWl2ZSBkYXRh IG9uIGFuIENSRUFURSBUQUJMRSBBUy9TRUxFVCBJTlRPIGNvbW1hbmQgYWJvdXQKKyAqICAgICB0 byBiZSBleGVjdXRlZC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFy dChOb2RlICpwYXJzZXRyZWUpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVk Q29tbWFuZCAqY29tbWFuZDsKKwlDcmVhdGVUYWJsZUFzU3RtdCAqc3RtdCA9IChDcmVhdGVUYWJs ZUFzU3RtdCAqKXBhcnNldHJlZTsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRl eHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50 VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxl Y3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwljb21tYW5kID0gcGFsbG9j KHNpemVvZihDb2xsZWN0ZWRDb21tYW5kKSk7CisKKwljb21tYW5kLT50eXBlID0gKHN0bXQtPm9i anR5cGUgPT0gT0JKRUNUX1RBQkxFKSA/IFNDVF9DcmVhdGVUYWJsZUFzIDogU0NUX1NpbXBsZTsK Kwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBjcmVhdGluZ19leHRlbnNpb247CisJY29tbWFuZC0+ ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2JqZWN0QWRkcmVzczsKKwljb21tYW5kLT5kLmN0YXMu cmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFy c2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoK KyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kCisgKgkJRmluaXNoIHVwIHNhdmluZyBh biBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElOVE8gY29tbWFuZC4KKyAqCisgKiBGSVhNRSB0aGlz IEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1Ynhh Y3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0aHJvdWdoLiAgUHJvYmFibHkgaXQncyBiZXN0IHRv IGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZlbnRUcmlnZ2VycygpIHRvIGZpeCB0aGlzLgorICov Cit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZChPYmplY3RBZGRyZXNzIGFkZHJl c3MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqcGFyZW50OworCUNyZWF0ZVRhYmxlQXNTdG10ICpz dG10OworCisJLyogaWdub3JlIGlmIGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBj b2xsZWN0aW9uIGRpc2FibGVkICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwK KwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkK KwkJcmV0dXJuOworCisJc3RtdCA9ICAoQ3JlYXRlVGFibGVBc1N0bXQgKiljdXJyZW50RXZlbnRU cmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJzZXRyZWU7CisKKwlpZiAoc3RtdC0+b2Jq dHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJeworCQlwYXJlbnQgPSBjdXJyZW50RXZlbnRUcmlnZ2Vy U3RhdGUtPmN1cnJlbnRDb21tYW5kLT5wYXJlbnQ7CisKKwkJcGZyZWUoY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCk7CisKKwkJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKKwl9CisJZWxzZQorCXsKKwkJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CisKKwkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y3h0KTsKKworCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJl bnRDb21tYW5kLT5kLnNpbXBsZS5hZGRyZXNzID0gYWRkcmVzczsKKwkJY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jb21tYW5kTGlzdCA9CisJCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y29tbWFuZExpc3QsCisJCQkJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVu dENvbW1hbmQpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCX0KK30KKwor LyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2b2lkCitFdmVu dFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0QWRkcmVzcyBh ZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0YSB0cmlnZGF0 YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUgRXZlbnRUcmln Z2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2ZW50CisJICog dHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICovCisJaWYgKCFJ c1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRvIG5vdGhpbmcg aWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYgdGhlcmUKKwkg KiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3RhcnQgb2YgdGhl IGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVyZWZvcmUgc2Vl bSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBFdmVudFRyaWdn ZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRuJ3QgZXhpc3Qg YXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBpZiBubyBjb21tYW5k IHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJl bnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0 YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJDb21tb25TZXR1 cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRXcml0ZSwKKwkJ CQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2RhdGEpOworCWlm IChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSByZWFsIENyZWF0ZVRh YmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQuY3Rhcy5yZWFs X2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0gYWRkcmVz czsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52b2tlKHJ1bmxp c3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShydW5saXN0KTsK KworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2VycyBkaWQgd2ls bCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8KKwlDb21tYW5kQ291 bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQgdHJpZ2dlciBp biBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExMDgsNyArMTI3NCw4IEBAIHRy YWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gKEV2ZW50Q2FjaGVM b29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1Rh YmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERMQ29tbWFu ZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRFbmQpICE9 IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdyaXRlKSAhPSBOSUwp OwogfQogCiAvKgpAQCAtMTQ5OSw2ICsxNjY2LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0 YXJ0KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0g UmVsYXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IElu dmFsaWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21t YW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IE5JTDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBj b3B5T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAgLTE1MzIsNyArMTcwMCw3IEBAIEV2ZW50VHJpZ2dl ckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpCiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3Mg YWxsIHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRvIGhhbmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2 b2lkCi1FdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9i amVjdEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21k KE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJ TWVtb3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1 NTIsMTIgKzE3MjAsMTQwIEBAIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5v ZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFk ZHJlc3M7CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0 ZSB8PSByZXdyaXRlOworCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQt PmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0KKwkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3Rh dGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKKworCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworfQorCisvKgorICogRXZlbnRUcmlnZ2VyQWx0 ZXJUeXBlU3RhcnQKKyAqCQlTYXZlIGRhdGEgYWJvdXQgYSBzaW5nbGUgcGFydCBvZiBhbiBBTFRF UiBUWVBFLgorICoKKyAqIEFMVEVSIFRBQkxFIGNhbiBoYXZlIG11bHRpcGxlIHN1YmNvbW1hbmRz IHdoaWNoIG1pZ2h0IGluY2x1ZGUgRFJPUCBDT0xVTU4KKyAqIGNvbW1hbmQgYW5kIEFMVEVSIFRZ UEUgcmVmZXJyaW5nIHRoZSBkcm9wIGNvbHVtbiBpbiBVU0lORyBleHByZXNzaW9uLgorICogQXMg dGhlIGRyb3BwZWQgY29sdW1uIGNhbm5vdCBiZSBhY2Nlc3NlZCBhZnRlciB0aGUgZXhlY3V0aW9u IG9mIERST1AgQ09MVU1OLAorICogYSBzcGVjaWFsIHRyaWdnZXIgaXMgcmVxdWlyZWQgdG8gaGFu ZGxlIHRoaXMgY2FzZSBiZWZvcmUgdGhlIGRyb3AgY29sdW1uIGlzCisgKiBleGVjdXRlZC4KKyAq Lwordm9pZAorRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoQWx0ZXJUYWJsZUNtZCAqc3ViY21k LCBSZWxhdGlvbiByZWwpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQVRT dWJjbWQgKm5ld3N1YjsKKwlDb2x1bW5EZWYgICpkZWY7CisJUmVsYXRpb24JYXR0cmVsYXRpb247 CisJSGVhcFR1cGxlCWhlYXBUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0VHVwOworCUF0dHJO dW1iZXIJYXR0bnVtOworCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKworCS8qIGlnbm9yZSBpZiBl dmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLwor CWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCUFzc2VydChJ c0Eoc3ViY21kLCBBbHRlclRhYmxlQ21kKSk7CisJQXNzZXJ0KHN1YmNtZC0+c3VidHlwZSA9PSBB VF9BbHRlckNvbHVtblR5cGUpOworCUFzc2VydChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kICE9IE5VTEwpOworCUFzc2VydChPaWRJc1ZhbGlkKGN1cnJlbnRFdmVudFRy aWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCkpOworCisJ ZGVmID0gKENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKwlBc3NlcnQoSXNBKGRlZiwgQ29sdW1u RGVmKSk7CisKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jeHQpOworCisJbmV3c3ViID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRBVFN1 YmNtZCkpOworCW5ld3N1Yi0+cGFyc2V0cmVlID0gKE5vZGUgKiljb3B5T2JqZWN0KHN1YmNtZCk7 CisKKwlhdHRyZWxhdGlvbiA9IHRhYmxlX29wZW4oQXR0cmlidXRlUmVsYXRpb25JZCwgUm93RXhj bHVzaXZlTG9jayk7CisKKwkvKiBMb29rIHVwIHRoZSB0YXJnZXQgY29sdW1uICovCisJaGVhcFR1 cCA9IFNlYXJjaFN5c0NhY2hlQ29weUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJj bWQtPm5hbWUpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChoZWFwVHVwKSkgLyogc2hvdWxkbid0 IGhhcHBlbiAqLworCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklO RURfQ09MVU1OKSwKKwkJCQllcnJtc2coImNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wi IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJICAgc3ViY21kLT5uYW1lLCBSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpKSk7CisJYXR0VHVwID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1Qo aGVhcFR1cCk7CisJYXR0bnVtID0gYXR0VHVwLT5hdHRudW07CisKKwlPYmplY3RBZGRyZXNzU3Vi U2V0KGFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsaWQo cmVsKSwgYXR0bnVtKTsKKwloZWFwX2ZyZWV0dXBsZShoZWFwVHVwKTsKKwl0YWJsZV9jbG9zZShh dHRyZWxhdGlvbiwgUm93RXhjbHVzaXZlTG9jayk7CisJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVz czsKKworCWlmIChkZWYtPnJhd19kZWZhdWx0KQorCXsKKwkJY2hhcgkgICAqZGVmZXhwcjsKKwor CQlkZWZleHByID0gbm9kZVRvU3RyaW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQluZXdzdWIt PnVzaW5nZXhwciA9IFRleHREYXR1bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19n ZXRfZXhwciwKKwkJCQkJCQkJCQkJCQkJCQkJQ1N0cmluZ0dldFRleHREYXR1bShkZWZleHByKSwK KwkJCQkJCQkJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxpZChyZWwpKSk7CisJfQorCWVsc2UKKwkJ bmV3c3ViLT51c2luZ2V4cHIgPSBOVUxMOworCiAJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5j dXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5kKGN1cnJlbnRF dmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBu ZXdzdWIpOwogCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiB9CiAKKy8qCisgKiBF dmVudFRyaWdnZXJBbHRlclR5cGVFbmQKKyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIEFMVEVSIFRZ UEUgY29tbWFuZCwgYW5kIGFkZCBpdCB0byBjb21tYW5kIGxpc3QuCisgKi8KK3ZvaWQKK0V2ZW50 VHJpZ2dlckFsdGVyVHlwZUVuZChOb2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywg Ym9vbCByZXdyaXRlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZEFUU3Vi Y21kICpuZXdzdWI7CisJTGlzdENlbGwgICAqY2VsbDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7 CisJQWx0ZXJUYWJsZUNtZCAqYWx0c3ViY21kID0gKEFsdGVyVGFibGVDbWQgKilzdWJjbWQ7CisK KwkvKiBpZ25vcmUgaWYgZXZlbnQgdHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rp b24gZGlzYWJsZWQgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJy ZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1 cm47CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOwor CisJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQpKTsKKwlBc3NlcnQoY21kICE9IE5V TEwpOworCUFzc2VydChPaWRJc1ZhbGlkKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7CisK Kwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0 ZWRBVFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJ QWx0ZXJUYWJsZUNtZCAqY29sbGNtZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVl OworCisJCWlmIChjb2xsY21kLT5zdWJ0eXBlID09IGFsdHN1YmNtZC0+c3VidHlwZSAmJgorCQkJ YWRkcmVzcy5jbGFzc0lkID09IHN1Yi0+YWRkcmVzcy5jbGFzc0lkICYmCisJCQlhZGRyZXNzLm9i amVjdElkID09IHN1Yi0+YWRkcmVzcy5vYmplY3RJZCAmJgorCQkJYWRkcmVzcy5vYmplY3RTdWJJ ZCA9PSBzdWItPmFkZHJlc3Mub2JqZWN0U3ViSWQpCisJCXsKKwkJCWNtZC0+ZC5hbHRlclRhYmxl LnJld3JpdGUgfD0gcmV3cml0ZTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW9sZGN4dCA9IE1l bW9yeUNvbnRleHRTd2l0Y2hUbyhjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwlu ZXdzdWIgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZEFUU3ViY21kKSk7CisJbmV3c3ViLT5hZGRy ZXNzID0gYWRkcmVzczsKKwluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsK KworCWNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsKKwljbWQtPmQuYWx0ZXJU YWJsZS5zdWJjbWRzID0gbGFwcGVuZChjbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIp OworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKIC8qCiAgKiBFdmVudFRy aWdnZXJBbHRlclRhYmxlRW5kCiAgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBBTFRFUiBUQUJMRSBj b21tYW5kLCBhbmQgYWRkIGl0IHRvIGNvbW1hbmQgbGlzdC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVi bGljYXRpb25jbWRzLmMKaW5kZXggZjRiYTU3MjY5Ny4uMjNhZGQzMmJmNiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTM4LDEwICszOCwxMiBAQAogI2luY2x1ZGUg ImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRl ICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAj aW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvbGxhdGUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2Vf cmVsYXRpb24uaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2VyLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXku aCIKQEAgLTgyLDIxICs4NCwyNiBAQCBzdGF0aWMgdm9pZCBQdWJsaWNhdGlvbkRyb3BTY2hlbWFz KE9pZCBwdWJpZCwgTGlzdCAqc2NoZW1hcywgYm9vbCBtaXNzaW5nX29rKTsKIHN0YXRpYyB2b2lk CiBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCSAg TGlzdCAqb3B0aW9ucywKKwkJCQkJCSAgYm9vbCBmb3JfYWxsX3RhYmxlcywKIAkJCQkJCSAgYm9v bCAqcHVibGlzaF9naXZlbiwKIAkJCQkJCSAgUHVibGljYXRpb25BY3Rpb25zICpwdWJhY3Rpb25z LAogCQkJCQkJICBib29sICpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJ CSAgYm9vbCAqcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QpCisJCQkJCQkgIGJvb2wgKnB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290LAorCQkJCQkJICBib29sICpkZGxfdHlwZV9naXZlbikKIHsK IAlMaXN0Q2VsbCAgICpsYzsKIAogCSpwdWJsaXNoX2dpdmVuID0gZmFsc2U7CiAJKnB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290X2dpdmVuID0gZmFsc2U7CisJKmRkbF90eXBlX2dpdmVuID0gZmFs c2U7CiAKIAkvKiBkZWZhdWx0cyAqLwogCXB1YmFjdGlvbnMtPnB1Ymluc2VydCA9IHRydWU7CiAJ cHViYWN0aW9ucy0+cHVidXBkYXRlID0gdHJ1ZTsKIAlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0 cnVlOwogCXB1YmFjdGlvbnMtPnB1YnRydW5jYXRlID0gdHJ1ZTsKKwlwdWJhY3Rpb25zLT5wdWJk ZGxfYWxsID0gZmFsc2U7CisJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gZmFsc2U7CiAJKnB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2U7CiAKIAkvKiBQYXJzZSBvcHRpb25zICov CkBAIC0xMjMsNyArMTMwLDcgQEAgcGFyc2VfcHVibGljYXRpb25fb3B0aW9ucyhQYXJzZVN0YXRl ICpwc3RhdGUsCiAJCQlwdWJhY3Rpb25zLT5wdWJ0cnVuY2F0ZSA9IGZhbHNlOwogCiAJCQkqcHVi bGlzaF9naXZlbiA9IHRydWU7Ci0JCQlwdWJsaXNoID0gZGVmR2V0U3RyaW5nKGRlZmVsKTsKKwkJ CXB1Ymxpc2ggPSBwc3RyZHVwKGRlZkdldFN0cmluZyhkZWZlbCkpOwogCiAJCQlpZiAoIVNwbGl0 SWRlbnRpZmllclN0cmluZyhwdWJsaXNoLCAnLCcsICZwdWJsaXNoX2xpc3QpKQogCQkJCWVyZXBv cnQoRVJST1IsCkBAIC0xNTgsNiArMTY1LDUyIEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJKnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVu ID0gdHJ1ZTsKIAkJCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGRlZkdldEJvb2xlYW4o ZGVmZWwpOwogCQl9CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgImRkbCIpID09 IDApCisJCXsKKwkJCWNoYXIJICAgKmRkbF9sZXZlbDsKKwkJCUxpc3QJICAgKmRkbF9saXN0Owor CQkJTGlzdENlbGwgICAqbGMzOworCisJCQlpZiAoKmRkbF90eXBlX2dpdmVuKQorCQkJCWVycm9y Q29uZmxpY3RpbmdEZWZFbGVtKGRlZmVsLCBwc3RhdGUpOworCisJCQlpZiAoIWZvcl9hbGxfdGFi bGVzKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9F UlJPUiksCisJCQkJCQkgZXJybXNnKCJEREwgcmVwbGljYXRpb24gaXMgb25seSBzdXBwb3J0ZWQg aW4gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24iKSkpOworCQkJLyoKKwkJCSAqIElmIGRkbCBv cHRpb24gd2FzIGdpdmVuIG9ubHkgdGhlIGV4cGxpY2l0bHkgbGlzdGVkIGRkbCB0eXBlcworCQkJ ICogc2hvdWxkIGJlIHB1Ymxpc2hlZC4KKwkJCSAqLworCQkJcHViYWN0aW9ucy0+cHViZGRsX2Fs bCA9IGZhbHNlOworCQkJcHViYWN0aW9ucy0+cHViZGRsX3RhYmxlID0gZmFsc2U7CisKKwkJCSpk ZGxfdHlwZV9naXZlbiA9IHRydWU7CisJCQlkZGxfbGV2ZWwgPSBkZWZHZXRTdHJpbmcoZGVmZWwp OworCisJCQlpZiAoIVNwbGl0SWRlbnRpZmllclN0cmluZyhkZGxfbGV2ZWwsICcsJywgJmRkbF9s aXN0KSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhf RVJST1IpLAorCQkJCQkJIGVycm1zZygiaW52YWxpZCBsaXN0IHN5bnRheCBmb3IgXCJkZGxcIiBv cHRpb24iKSkpOworCisJCQkvKiBQcm9jZXNzIHRoZSBvcHRpb24gbGlzdC4gKi8KKwkJCWZvcmVh Y2gobGMzLCBkZGxfbGlzdCkKKwkJCXsKKwkJCQljaGFyCSAgICpwdWJsaXNoX29wdCA9IChjaGFy ICopIGxmaXJzdChsYzMpOworCisJCQkJaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgImFsbCIpID09 IDApCisJCQkJeworCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGxfYWxsID0gdHJ1ZTsKKwkJCQkJcHVi YWN0aW9ucy0+cHViZGRsX3RhYmxlID0gdHJ1ZTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoc3RyY21w KHB1Ymxpc2hfb3B0LCAidGFibGUiKSA9PSAwKQorCQkJCQlwdWJhY3Rpb25zLT5wdWJkZGxfdGFi bGUgPSB0cnVlOworCQkJCWVsc2UKKwkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIFwi ZGRsXCIgdmFsdWU6IFwiJXNcIiIsIHB1Ymxpc2hfb3B0KSkpOworCQkJfQorCQl9CiAJCWVsc2UK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwK QEAgLTU5OSwxNCArNjUyLDU3IEBAIGNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJfZXhwcihOb2RlICpu b2RlLCBQYXJzZVN0YXRlICpwc3RhdGUpCiAJcmV0dXJuIGNoZWNrX3NpbXBsZV9yb3dmaWx0ZXJf ZXhwcl93YWxrZXIobm9kZSwgcHN0YXRlKTsKIH0KIAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiB0 byB0cmFuZm9ybSBhIHdoZXJlIGNsYXVzZS4KKyAqCisgKiBBbHNvIGNoZWNrIHRoZSBwdWJsaWNh dGlvbiByb3cgZmlsdGVyIGV4cHJlc3Npb24gYW5kIHRocm93IGFuIGVycm9yIGlmCisgKiBhbnl0 aGluZyBub3QgcGVybWl0dGVkIG9yIHVuZXhwZWN0ZWQgaXMgZW5jb3VudGVyZWQuCisgKi8KK3N0 YXRpYyBOb2RlICoKK0dldFRyYW5zZm9ybVdoZXJlQ2xhdXNlcyhjb25zdCBjaGFyICpxdWVyeVN0 cmluZywgUmVsYXRpb24gcmVsYXRpb24sCisJCQkJCQkgTm9kZSAqd2hlcmVDbGF1c2UsIGJvb2wg Y2hlY2tfZXhwcikKK3sKKwlOb2RlCSAgICp0cmFuc2Zvcm1lZFdoZXJlQ2xhdXNlID0gTlVMTDsK KwlQYXJzZU5hbWVzcGFjZUl0ZW0gKm5zaXRlbTsKKwlQYXJzZVN0YXRlICpwc3RhdGU7CisKKwkv KgorCSAqIEEgZnJlc2ggcHN0YXRlIGlzIHJlcXVpcmVkIHNvIHRoYXQgd2Ugb25seSBoYXZlICJ0 aGlzIiB0YWJsZSBpbiBpdHMKKwkgKiByYW5nZXRhYmxlCisJICovCisJcHN0YXRlID0gbWFrZV9w YXJzZXN0YXRlKE5VTEwpOworCXBzdGF0ZS0+cF9zb3VyY2V0ZXh0ID0gcXVlcnlTdHJpbmc7CisJ bnNpdGVtID0gYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yUmVsYXRpb24ocHN0YXRlLCByZWxhdGlvbiwK KwkJCQkJCQkJCQkgICBBY2Nlc3NTaGFyZUxvY2ssIE5VTEwsCisJCQkJCQkJCQkJICAgZmFsc2Us IGZhbHNlKTsKKwlhZGROU0l0ZW1Ub1F1ZXJ5KHBzdGF0ZSwgbnNpdGVtLCBmYWxzZSwgdHJ1ZSwg dHJ1ZSk7CisKKwl0cmFuc2Zvcm1lZFdoZXJlQ2xhdXNlID0gdHJhbnNmb3JtV2hlcmVDbGF1c2Uo cHN0YXRlLAorCQkJCQkJCQkJCQkJICBjb3B5T2JqZWN0KHdoZXJlQ2xhdXNlKSwKKwkJCQkJCQkJ CQkJCSAgRVhQUl9LSU5EX1dIRVJFLAorCQkJCQkJCQkJCQkJICAiUFVCTElDQVRJT04gV0hFUkUi KTsKKworCS8qIEZpeCB1cCBjb2xsYXRpb24gaW5mb3JtYXRpb24gKi8KKwlhc3NpZ25fZXhwcl9j b2xsYXRpb25zKHBzdGF0ZSwgdHJhbnNmb3JtZWRXaGVyZUNsYXVzZSk7CisKKwkvKgorCSAqIFdl IGFsbG93IG9ubHkgc2ltcGxlIGV4cHJlc3Npb25zIGluIHJvdyBmaWx0ZXJzLiBTZWUKKwkgKiBj aGVja19zaW1wbGVfcm93ZmlsdGVyX2V4cHJfd2Fsa2VyLgorCSAqLworCWlmIChjaGVja19leHBy KQorCQljaGVja19zaW1wbGVfcm93ZmlsdGVyX2V4cHIodHJhbnNmb3JtZWRXaGVyZUNsYXVzZSwg cHN0YXRlKTsKKworCWZyZWVfcGFyc2VzdGF0ZShwc3RhdGUpOworCisJcmV0dXJuIHRyYW5zZm9y bWVkV2hlcmVDbGF1c2U7Cit9CisKIC8qCiAgKiBUcmFuc2Zvcm0gdGhlIHB1YmxpY2F0aW9uIFdI RVJFIGV4cHJlc3Npb24gZm9yIGFsbCB0aGUgcmVsYXRpb25zIGluIHRoZSBsaXN0LAogICogZW5z dXJpbmcgaXQgaXMgY29lcmNlZCB0byBib29sZWFuIGFuZCBuZWNlc3NhcnkgY29sbGF0aW9uIGlu Zm9ybWF0aW9uIGlzCiAgKiBhZGRlZCBpZiByZXF1aXJlZCwgYW5kIGFkZCBhIG5ldyBuc2l0ZW0v UlRFIGZvciB0aGUgYXNzb2NpYXRlZCByZWxhdGlvbiB0bwogICogdGhlIFBhcnNlU3RhdGUncyBu YW1lc3BhY2UgbGlzdC4KICAqCi0gKiBBbHNvIGNoZWNrIHRoZSBwdWJsaWNhdGlvbiByb3cgZmls dGVyIGV4cHJlc3Npb24gYW5kIHRocm93IGFuIGVycm9yIGlmCi0gKiBhbnl0aGluZyBub3QgcGVy bWl0dGVkIG9yIHVuZXhwZWN0ZWQgaXMgZW5jb3VudGVyZWQuCiAgKi8KIHN0YXRpYyB2b2lkCiBU cmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0 cmluZywKQEAgLTYxNiw5ICs3MTIsNyBAQCBUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMoTGlzdCAq dGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAogCWZvcmVhY2gobGMsIHRhYmxlcykK IAl7Ci0JCVBhcnNlTmFtZXNwYWNlSXRlbSAqbnNpdGVtOwotCQlOb2RlCSAgICp3aGVyZWNsYXVz ZSA9IE5VTEw7Ci0JCVBhcnNlU3RhdGUgKnBzdGF0ZTsKKwogCQlQdWJsaWNhdGlvblJlbEluZm8g KnByaSA9IChQdWJsaWNhdGlvblJlbEluZm8gKikgbGZpcnN0KGxjKTsKIAogCQlpZiAocHJpLT53 aGVyZUNsYXVzZSA9PSBOVUxMKQpAQCAtNjM4LDM4ICs3MzIsMTEgQEAgVHJhbnNmb3JtUHViV2hl cmVDbGF1c2VzKExpc3QgKnRhYmxlcywgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCiAJCQkJCSBl cnJkZXRhaWwoIldIRVJFIGNsYXVzZSBjYW5ub3QgYmUgdXNlZCBmb3IgYSBwYXJ0aXRpb25lZCB0 YWJsZSB3aGVuICVzIGlzIGZhbHNlLiIsCiAJCQkJCQkJICAgInB1Ymxpc2hfdmlhX3BhcnRpdGlv bl9yb290IikpKTsKIAotCQkvKgotCQkgKiBBIGZyZXNoIHBzdGF0ZSBpcyByZXF1aXJlZCBzbyB0 aGF0IHdlIG9ubHkgaGF2ZSAidGhpcyIgdGFibGUgaW4gaXRzCi0JCSAqIHJhbmdldGFibGUKLQkJ ICovCi0JCXBzdGF0ZSA9IG1ha2VfcGFyc2VzdGF0ZShOVUxMKTsKLQkJcHN0YXRlLT5wX3NvdXJj ZXRleHQgPSBxdWVyeVN0cmluZzsKLQkJbnNpdGVtID0gYWRkUmFuZ2VUYWJsZUVudHJ5Rm9yUmVs YXRpb24ocHN0YXRlLCBwcmktPnJlbGF0aW9uLAotCQkJCQkJCQkJCQkgICBBY2Nlc3NTaGFyZUxv Y2ssIE5VTEwsCi0JCQkJCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSk7Ci0JCWFkZE5TSXRlbVRvUXVl cnkocHN0YXRlLCBuc2l0ZW0sIGZhbHNlLCB0cnVlLCB0cnVlKTsKLQotCQl3aGVyZWNsYXVzZSA9 IHRyYW5zZm9ybVdoZXJlQ2xhdXNlKHBzdGF0ZSwKLQkJCQkJCQkJCQkgICBjb3B5T2JqZWN0KHBy aS0+d2hlcmVDbGF1c2UpLAotCQkJCQkJCQkJCSAgIEVYUFJfS0lORF9XSEVSRSwKLQkJCQkJCQkJ CQkgICAiUFVCTElDQVRJT04gV0hFUkUiKTsKLQotCQkvKiBGaXggdXAgY29sbGF0aW9uIGluZm9y bWF0aW9uICovCi0JCWFzc2lnbl9leHByX2NvbGxhdGlvbnMocHN0YXRlLCB3aGVyZWNsYXVzZSk7 Ci0KLQkJLyoKLQkJICogV2UgYWxsb3cgb25seSBzaW1wbGUgZXhwcmVzc2lvbnMgaW4gcm93IGZp bHRlcnMuIFNlZQotCQkgKiBjaGVja19zaW1wbGVfcm93ZmlsdGVyX2V4cHJfd2Fsa2VyLgotCQkg Ki8KLQkJY2hlY2tfc2ltcGxlX3Jvd2ZpbHRlcl9leHByKHdoZXJlY2xhdXNlLCBwc3RhdGUpOwot Ci0JCWZyZWVfcGFyc2VzdGF0ZShwc3RhdGUpOwotCi0JCXByaS0+d2hlcmVDbGF1c2UgPSB3aGVy ZWNsYXVzZTsKKwkJcHJpLT53aGVyZUNsYXVzZSA9IEdldFRyYW5zZm9ybVdoZXJlQ2xhdXNlcyhx dWVyeVN0cmluZywgcHJpLT5yZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQlwcmktPndoZXJlQ2xhdXNl LCB0cnVlKTsKIAl9CiB9CiAKLQogLyoKICAqIEdpdmVuIGEgbGlzdCBvZiB0YWJsZXMgdGhhdCBh cmUgZ29pbmcgdG8gYmUgYWRkZWQgdG8gYSBwdWJsaWNhdGlvbiwKICAqIHZlcmlmeSB0aGF0IHRo ZXkgZnVsZmlsbCB0aGUgbmVjZXNzYXJ5IHByZWNvbmRpdGlvbnMsIG5hbWVseTogbm8gdGFibGVz CkBAIC03MjgsNiArNzk1LDUyIEBAIENoZWNrUHViUmVsYXRpb25Db2x1bW5MaXN0KGNoYXIgKnB1 Ym5hbWUsIExpc3QgKnRhYmxlcywKIAl9CiB9CiAKKy8qCisgKiBDcmVhdGUgZXZlbnQgdHJpZ2dl ciB3aGljaCBpcyB1c2VkIGZvciBEREwgcmVwbGljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitD cmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKGNoYXIgKmV2ZW50bmFtZSwgQ29tbWFuZFRhZyAq Y29tbWFuZHMsCisJCQkJCQkJIGludCBuY29tbWFuZHMsIE9iamVjdEFkZHJlc3MgcHViYWRkcmVz cywKKwkJCQkJCQkgT2lkIHB1Ym9pZCkKK3sKKwlpbnQJCQlpOworCUxpc3QJICAgKnRhZ3MgPSBO SUw7CisJT2lkCQkJdHJpZ2dlcl9pZDsKKwlPYmplY3RBZGRyZXNzIHJlZmVyZW5jZWQ7CisJQ3Jl YXRlRXZlbnRUcmlnU3RtdCAqZGRsX3RyaWdnZXI7CisJY2hhcgkJdHJpZ2dlcl9uYW1lW05BTUVE QVRBTEVOXTsKKwljaGFyCQl0cmlnZ2VyX2Z1bmNfbmFtZVtOQU1FREFUQUxFTl07CisJc3RhdGlj IGNvbnN0IGNoYXIgKnRyaWdnZXJfZnVuY19wcmVmaXggPSAicHVibGljYXRpb25fZGVwYXJzZV8l cyI7CisKKwlkZGxfdHJpZ2dlciA9IG1ha2VOb2RlKENyZWF0ZUV2ZW50VHJpZ1N0bXQpOworCisJ c25wcmludGYodHJpZ2dlcl9uYW1lLCBzaXplb2YodHJpZ2dlcl9uYW1lKSwgUFVCX0VWRU5UX1RS SUdfUFJFRklYLAorCQkJIGV2ZW50bmFtZSwgcHVib2lkKTsKKwlzbnByaW50Zih0cmlnZ2VyX2Z1 bmNfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfZnVuY19uYW1lKSwgdHJpZ2dlcl9mdW5jX3ByZWZpeCwK KwkJCSBldmVudG5hbWUpOworCisJZGRsX3RyaWdnZXItPnRyaWduYW1lID0gcHN0cmR1cCh0cmln Z2VyX25hbWUpOworCWRkbF90cmlnZ2VyLT5ldmVudG5hbWUgPSBldmVudG5hbWU7CisJZGRsX3Ry aWdnZXItPmZ1bmNuYW1lID0gU3lzdGVtRnVuY05hbWUodHJpZ2dlcl9mdW5jX25hbWUpOworCisJ Zm9yIChpID0gMDsgaSA8IG5jb21tYW5kczsgaSsrKQorCXsKKwkJU3RyaW5nCSAgICp0YWcgPSBt YWtlU3RyaW5nKHBzdHJkdXAoR2V0Q29tbWFuZFRhZ05hbWUoY29tbWFuZHNbaV0pKSk7CisKKwkJ dGFncyA9IGxhcHBlbmQodGFncywgdGFnKTsKKwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNsYXVz ZSA9IGxpc3RfbWFrZTEobWFrZURlZkVsZW0oInRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7CisK Kwl0cmlnZ2VyX2lkID0gQ3JlYXRlRXZlbnRUcmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8qCisJ ICogUmVnaXN0ZXIgdGhlIGV2ZW50IHRyaWdnZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50IG9u IHRoZSBwdWJsaWNhdGlvbi4KKwkgKi8KKwlPYmplY3RBZGRyZXNzU2V0KHJlZmVyZW5jZWQsIEV2 ZW50VHJpZ2dlclJlbGF0aW9uSWQsIHRyaWdnZXJfaWQpOworCXJlY29yZERlcGVuZGVuY3lPbigm cmVmZXJlbmNlZCwgJnB1YmFkZHJlc3MsIERFUEVOREVOQ1lfSU5URVJOQUwpOworfQorCiAvKgog ICogQ3JlYXRlIG5ldyBwdWJsaWNhdGlvbi4KICAqLwpAQCAtNzQxLDYgKzg1NCw3IEBAIENyZWF0 ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpz dG10KQogCURhdHVtCQl2YWx1ZXNbTmF0dHNfcGdfcHVibGljYXRpb25dOwogCUhlYXBUdXBsZQl0 dXA7CiAJYm9vbAkJcHVibGlzaF9naXZlbjsKKwlib29sCQlkZGxfdHlwZV9naXZlbjsKIAlQdWJs aWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdF9naXZlbjsKIAlib29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdDsKQEAgLTc4MSw5 ICs4OTUsMTEgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKnN0bXQpCiAKIAlwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKHBzdGF0 ZSwKIAkJCQkJCQkgIHN0bXQtPm9wdGlvbnMsCisJCQkJCQkJICBzdG10LT5mb3JfYWxsX3RhYmxl cywKIAkJCQkJCQkgICZwdWJsaXNoX2dpdmVuLCAmcHViYWN0aW9ucywKIAkJCQkJCQkgICZwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCk7CisJCQkJCQkJICAmcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QsCisJCQkJ CQkJICAmZGRsX3R5cGVfZ2l2ZW4pOwogCiAJcHVib2lkID0gR2V0TmV3T2lkV2l0aEluZGV4KHJl bCwgUHVibGljYXRpb25PYmplY3RJbmRleElkLAogCQkJCQkJCQlBbnVtX3BnX3B1YmxpY2F0aW9u X29pZCk7CkBAIC03OTgsNiArOTE0LDEwIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3RhdGUg KnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCQlCb29sR2V0RGF0dW0ocHVi YWN0aW9ucy5wdWJkZWxldGUpOwogCXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5j YXRlIC0gMV0gPQogCQlCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSk7CisJdmFs dWVzW0FudW1fcGdfcHVibGljYXRpb25fcHViZGRsX2FsbCAtIDFdID0KKwkJQm9vbEdldERhdHVt KHB1YmFjdGlvbnMucHViZGRsX2FsbCk7CisJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVi ZGRsX3RhYmxlIC0gMV0gPQorCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbF90YWJsZSk7 CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9vbEdl dERhdHVtKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIApAQCAtODU4LDYgKzk3OCw1MCBA QCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9u U3RtdCAqc3RtdCkKIAkJfQogCX0KIAorCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIg dG8gYWxsb3cgbG9nZ2luZyBvZiBEREwgc3RhdGVtZW50cy4KKwkgKgorCSAqLworCWlmIChwdWJh Y3Rpb25zLnB1YmRkbF90YWJsZSB8fCBwdWJhY3Rpb25zLnB1YmRkbF9hbGwpCisJeworCQlDb21t YW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5k VGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtDTURUQUdfQUxURVJfVEFCTEV9OworCQlDb21tYW5k VGFnCWluaXRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMsCisJCQlD TURUQUdfU0VMRUNUX0lOVE8KKwkJfTsKKwkJaW50IG5jb21tYW5kcyA9IDA7CisJCUNvbW1hbmRU YWcgKmVuZF9jb21tYW5kcyA9IE5VTEw7CisKKwkJaWYgKHB1YmFjdGlvbnMucHViZGRsX2FsbCkK KwkJCWVuZF9jb21tYW5kcyA9IEdldENvbW1hbmRUYWdzRm9yRERMUmVwbCgmbmNvbW1hbmRzKTsK KwkJZWxzZSBpZiAocHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCXsKKwkJCW5jb21tYW5kcyA9 IDM7CisJCQllbmRfY29tbWFuZHMgPSBwYWxsb2MwKG5jb21tYW5kcyAqIHNpemVvZihDb21tYW5k VGFnKSk7CisJCQllbmRfY29tbWFuZHNbMF0gPSBDTURUQUdfQ1JFQVRFX1RBQkxFOworCQkJZW5k X2NvbW1hbmRzWzFdID0gQ01EVEFHX0FMVEVSX1RBQkxFOworCQkJZW5kX2NvbW1hbmRzWzJdID0g Q01EVEFHX0RST1BfVEFCTEU7CisJCX0KKworCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21tYW5kX2Vu ZCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoUFVCX1RS SUdfRVZFTlQxLCBlbmRfY29tbWFuZHMsCisJCQkJCQkJCQkgbmNvbW1hbmRzLCBteXNlbGYsIHB1 Ym9pZCk7CisJCXBmcmVlKGVuZF9jb21tYW5kcyk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxfY29t bWFuZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdn ZXIoUFVCX1RSSUdfRVZFTlQyLCBzdGFydF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihz dGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhlIHRhYmxl X3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZlbnRUcmlnZ2Vy KFBVQl9UUklHX0VWRU5UMywgcmV3cml0ZV9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhvZihy ZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCisJCS8qIENyZWF0ZSB0aGUgdGFi bGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoUFVCX1RSSUdfRVZFTlQ0LCBpbml0X2NvbW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9m KGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisJfQorCiAJdGFibGVfY2xvc2UocmVs LCBSb3dFeGNsdXNpdmVMb2NrKTsKIAogCUludm9rZU9iamVjdFBvc3RDcmVhdGVIb29rKFB1Ymxp Y2F0aW9uUmVsYXRpb25JZCwgcHVib2lkLCAwKTsKQEAgLTg4Miw2ICsxMDQ2LDcgQEAgQWx0ZXJQ dWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3Rt dCAqc3RtdCwKIAlib29sCQlyZXBsYWNlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl07CiAJRGF0dW0J CXZhbHVlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl07CiAJYm9vbAkJcHVibGlzaF9naXZlbjsKKwli b29sCQlkZGxfdHlwZV9naXZlbjsKIAlQdWJsaWNhdGlvbkFjdGlvbnMgcHViYWN0aW9uczsKIAli b29sCQlwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbjsKIAlib29sCQlwdWJsaXNoX3Zp YV9wYXJ0aXRpb25fcm9vdDsKQEAgLTg5MCwxMSArMTA1NSwxNSBAQCBBbHRlclB1YmxpY2F0aW9u T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAog CUxpc3QJICAgKnJvb3RfcmVsaWRzID0gTklMOwogCUxpc3RDZWxsICAgKmxjOwogCisJcHViZm9y bSA9IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QodHVwKTsKKwogCXBhcnNlX3B1Ymxp Y2F0aW9uX29wdGlvbnMocHN0YXRlLAogCQkJCQkJCSAgc3RtdC0+b3B0aW9ucywKKwkJCQkJCQkg IHB1YmZvcm0tPnB1YmFsbHRhYmxlcywKIAkJCQkJCQkgICZwdWJsaXNoX2dpdmVuLCAmcHViYWN0 aW9ucywKIAkJCQkJCQkgICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdF9naXZlbiwKLQkJCQkJ CQkgICZwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CisJCQkJCQkJICAmcHVibGlzaF92aWFf cGFydGl0aW9uX3Jvb3QsCisJCQkJCQkJICAmZGRsX3R5cGVfZ2l2ZW4pOwogCiAJcHViZm9ybSA9 IChGb3JtX3BnX3B1YmxpY2F0aW9uKSBHRVRTVFJVQ1QodHVwKTsKIApAQCAtOTk2LDYgKzExNjUs MTIgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0 cnVuY2F0ZSAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQly ZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJ CXZhbHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF9hbGwgLSAxXSA9IEJvb2xHZXREYXR1 bShwdWJhY3Rpb25zLnB1YmRkbF9hbGwpOworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9u X3B1YmRkbF9hbGwgLSAxXSA9IHRydWU7CisKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25f cHViZGRsX3RhYmxlIC0gMV0gPSBCb29sR2V0RGF0dW0ocHViYWN0aW9ucy5wdWJkZGxfdGFibGUp OworCQlyZXBsYWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbF90YWJsZSAtIDFdID0gdHJ1 ZTsKIAl9CiAKIAlpZiAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3RfZ2l2ZW4pCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCmluZGV4IDNlMmM1Zjc5N2MuLjg0YTAzOGJkNmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCkBAIC00NzE4LDYgKzQ3MTgsOSBAQCBBVFByZXBDbWQoTGlzdCAqKndx dWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAJCQljbWQgPSBBVFBhcnNl VHJhbnNmb3JtQ21kKHdxdWV1ZSwgdGFiLCByZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUsCiAJ CQkJCQkJCQkgIEFUX1BBU1NfVU5TRVQsIGNvbnRleHQpOwogCQkJQXNzZXJ0KGNtZCAhPSBOVUxM KTsKKworCQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoY21kLCByZWwpOworCiAJCQkvKiBQ ZXJmb3JtcyBvd24gcmVjdXJzaW9uICovCiAJCQlBVFByZXBBbHRlckNvbHVtblR5cGUod3F1ZXVl LCB0YWIsIHJlbCwgcmVjdXJzZSwgcmVjdXJzaW5nLCBjbWQsCiAJCQkJCQkJCSAgbG9ja21vZGUs IGNvbnRleHQpOwpAQCAtNDk4OSw2ICs0OTkyLDcgQEAgQVRFeGVjQ21kKExpc3QgKip3cXVldWUs IEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIHsKIAlPYmplY3RBZGRyZXNzIGFkZHJlc3MgPSBJbnZh bGlkT2JqZWN0QWRkcmVzczsKIAlSZWxhdGlvbglyZWwgPSB0YWItPnJlbDsKKwlib29sCQljb21t YW5kQ29sbGVjdGVkID0gZmFsc2U7CiAKIAlzd2l0Y2ggKGNtZC0+c3VidHlwZSkKIAl7CkBAIC01 MTEyLDYgKzUxMTYsOCBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5m byAqdGFiLAogCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToJLyogQUxURVIgQ09MVU1OIFRZUEUg Ki8KIAkJCS8qIHBhcnNlIHRyYW5zZm9ybWF0aW9uIHdhcyBkb25lIGVhcmxpZXIgKi8KIAkJCWFk ZHJlc3MgPSBBVEV4ZWNBbHRlckNvbHVtblR5cGUodGFiLCByZWwsIGNtZCwgbG9ja21vZGUpOwor CQkJRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKChOb2RlICopIGNtZCwgYWRkcmVzcywgdGFiLT5y ZXdyaXRlKTsKKwkJCWNvbW1hbmRDb2xsZWN0ZWQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2Ug QVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoJLyogQUxURVIgQ09MVU1OIE9QVElPTlMgKi8K IAkJCWFkZHJlc3MgPQpAQCAtNTI4NCw4ICs1MjkwLDggQEAgQVRFeGVjQ21kKExpc3QgKip3cXVl dWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkvKgogCSAqIFJlcG9ydCB0aGUgc3ViY29tbWFu ZCB0byBpbnRlcmVzdGVkIGV2ZW50IHRyaWdnZXJzLgogCSAqLwotCWlmIChjbWQpCi0JCUV2ZW50 VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKChOb2RlICopIGNtZCwgYWRkcmVzcyk7CisJ aWYgKGNtZCAmJiAhY29tbWFuZENvbGxlY3RlZCkKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVy VGFibGVTdWJjbWQoKE5vZGUgKikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoK IAkgKiBCdW1wIHRoZSBjb21tYW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1h bmQgaW4gdGhlIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf dXRpbGNtZC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwppbmRleCBmOTIx OGY0OGFhLi44YjUzYjQzNWFmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2Vf dXRpbGNtZC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMKQEAgLTEz OTIsNiArMTM5Miw3IEBAIGV4cGFuZFRhYmxlTGlrZUNsYXVzZShSYW5nZVZhciAqaGVhcFJlbCwg VGFibGVMaWtlQ2xhdXNlICp0YWJsZV9saWtlX2NsYXVzZSkKIAkJYXRjbWQtPmNtZHMgPSBhdHN1 YmNtZHM7CiAJCWF0Y21kLT5vYmp0eXBlID0gT0JKRUNUX1RBQkxFOwogCQlhdGNtZC0+bWlzc2lu Z19vayA9IGZhbHNlOworCQlhdGNtZC0+dGFibGVfbGlrZSA9IHRydWU7CiAJCXJlc3VsdCA9IGxj b25zKGF0Y21kLCByZXN1bHQpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv TWFrZWZpbGUKaW5kZXggZDM2ODBlOWJiNS4uYjc5ZGRkOGNkYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw3IEBAIG92ZXJyaWRlIENQUEZM QUdTIDo9IC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCiBPQkpTID0gXAogCWFwcGx5cGFyYWxsZWx3 b3JrZXIubyBcCiAJZGRsbWVzc2FnZS5vIFwKKwlkZGx0cmlnZ2VyLm8gXAogCWRlY29kZS5vIFwK IAlsYXVuY2hlci5vIFwKIAlsb2dpY2FsLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZGx0cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2RkbHRyaWdnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5kNjhhNTA3MDhkCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9kZGx0cmlnZ2VyLmMKQEAgLTAsMCArMSwzNjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICoKKyAqIGRkbHRyaWdnZXIuYworICoJICBMb2dpY2FsIERETCBtZXNzYWdlcy4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9kZGx0cmlnZ2VyLmMKKyAqCisgKiBOT1RFUworICoKKyAqIERlcGFyc2UgdGhlIGRkbCBj b21tYW5kIGFuZCBsb2cgaXQuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5o IgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvaWxpc3QuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5o IgorI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKKworZXh0ZXJuIEV2ZW50VHJpZ2dlclF1ZXJ5U3RhdGUgKmN1cnJlbnRFdmVudFRyaWdn ZXJTdGF0ZTsKKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQgcHJp b3IgdG8KKyAqIGV4ZWN1dGlvbi4gQ3VycmVudGx5IG9ubHkgdXNlZCBmb3IgRFJPUCBUQUJMRSBj b21tYW5kCisgKiBzbyB0aGF0IGNhdGFsb2cgY2FuIGJlIGFjY2Vzc2VkIGJlZm9yZSBiZWluZyBk ZWxldGVkLgorICogVGhpcyBpcyB0byBjaGVjayBpZiB0aGUgdGFibGUgaXMgcGFydCBvZiB0aGUg cHVibGljYXRpb24KKyAqIG9yIG5vdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2Vf ZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRyaWdnZXJEYXRh ICp0cmlnZGF0YTsKKwljaGFyCSAgICpjb21tYW5kID0gcHNwcmludGYoIkRyb3AgdGFibGUgY29t bWFuZCBzdGFydCIpOworCURyb3BTdG10ICAgKnN0bXQ7CisJTGlzdENlbGwgICAqY2VsbDE7CisK KwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJu b3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChFdmVu dFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10ID0gKERyb3BTdG10ICopIHRy aWdkYXRhLT5wYXJzZXRyZWU7CisKKwkvKiBFeHRyYWN0IHRoZSByZWxpZCBmcm9tIHRoZSBwYXJz ZSB0cmVlICovCisJZm9yZWFjaChjZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7CisJCWNoYXIJCXJl bHBlcnNpc3Q7CisJCU5vZGUJICAgKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFk ZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3Mg PSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3Qs CisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJ CQkJCQkJCQkgdHJ1ZSk7CisKKwkJLyogT2JqZWN0IGRvZXMgbm90IGV4aXN0LCBub3RoaW5nIHRv IGRvICovCisJCWlmICghcmVsYXRpb24pCisJCQljb250aW51ZTsKKworCQlyZWxwZXJzaXN0ID0g Z2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkvKgorCQkgKiBEbyBu b3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEK KwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBs b2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2Fu IGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlz CisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dF RCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQg Y3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJT SVNURU5DRV9URU1QKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBhZGRyZXNz Lm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4o Y29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJsZV9jbG9zZShyZWxhdGlv biwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoK KyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoKKyAqIERlcGFyc2UgdGhl IGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1Ymxp Y2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9BUkdTKQoreworCWNoYXIJ CXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCWNoYXIJICAgKmpzb25fc3Ry aW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8pKQorCQllbG9nKEVS Uk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOworCisJY21kID0gY3Vy cmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFzc2VydChjbWQgJiYg Y21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJz aXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwkvKgorCSAqIERvIG5vdCBn ZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFibGUgaXMgYSB0ZW1w b3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUgd2FsIGxvZ3MgZm9y IHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAqIGNhbiBhbHNvIGJl IGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4gVGhpcyBtYWtlcyBp dAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5k IGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91dCBjcmVhdGluZyBh IG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1Q KQorCXsKKwkJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxs b3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGls aXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJ CQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRlclRhYmxlLm9iamVj dElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkJIGpzb25fc3RyaW5nLCBzdHJsZW4oanNvbl9z dHJpbmcpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKwor LyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuIFRoaXMgZnVuY3Rpb24K KyAqIGlzIGNhbGxlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjb21tYW5kIGJ1dCBiZWZv cmUgdGhlCisgKiB0cmFuc2FjdGlvbiBjb21taXRzLgorICovCitEYXR1bQorcHVibGljYXRpb25f ZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlMaXN0Q2VsbCAg ICpsYzsKKwlzbGlzdF9pdGVyCWl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlwZSB0eXBlOworCU9p ZAkJCXJlbGlkOworCWNoYXIJCXJlbGtpbmQ7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklH R0VSKGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBt YW5hZ2VyIik7CisKKwlmb3JlYWNoKGxjLCBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmNvbW1h bmRMaXN0KQorCXsKKwkJY2hhcgkJcmVscGVyc2lzdCA9IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVO VDsKKwkJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gbGZpcnN0KGxjKTsKKwkJY2hhcgkgICAqanNv bl9zdHJpbmc7CisKKwkJLyogUmV3cml0ZSBEREwgaGFzIGJlZW4gaGFuZGxlZCBpbiB0YWJsZV9y ZXdyaXRlIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUpCisJCXsK KwkJCVJlbmFtZVN0bXQgKnJlbmFtZVN0bXQgPSAoUmVuYW1lU3RtdCAqKSBjbWQtPnBhcnNldHJl ZTsKKworCQkJaWYgKHJlbmFtZVN0bXQgJiYgcmVuYW1lU3RtdC0+cmVsYXRpb25UeXBlICE9IE9C SkVDVF9UWVBFICYmCisJCQkJcmVuYW1lU3RtdC0+cmVsYXRpb25UeXBlICE9IE9CSkVDVF9UQUJM RSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX1NpbXBsZSAm JgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKSkKKwkJCWNv bnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVGFibGUpCisJCXsKKwkJCXJl bGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0eXBlID0gRENUX1RhYmxlQWx0 ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9TaW1wbGUgZm9yIG5vdyAqLwor CQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisJCQl0eXBlID0gRENU X1NpbXBsZUNtZDsKKwkJfQorCisJCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQocmVsaWQpOwor CQlpZiAocmVsa2luZCkKKwkJCXJlbHBlcnNpc3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKHJlbGlk KTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hv c2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBX ZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxv Z2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUg c3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5 IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3 cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAo cmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQl7CisJCQkvKgorCQkJICogRGVw YXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2Yg dGhlCisJCQkgKiBzYW1lLgorCQkJICovCisJCQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0 eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJCQlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJ CQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBlLCBqc29uX3N0cmlu ZywKKwkJCQkJCQkJCSBzdHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJCX0KKwl9CisKKwlzbGlz dF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5TUUxEcm9wTGlzdCkp CisJeworCQlTUUxEcm9wT2JqZWN0ICpvYmo7CisJCURyb3BTdG10ICAgKnN0bXQ7CisJCUV2ZW50 VHJpZ2dlckRhdGEgKnRyaWdkYXRhOworCQljaGFyCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGU7CisJCWNvbnN0IGNoYXIgKnRtcHR5cGU7CisJCU9iamVjdENsYXNz CW9iamNsYXNzOworCQlPYmplY3RBZGRyZXNzIG9iamFkZHI7CisKKwkJdHJpZ2RhdGEgPSAoRXZl bnRUcmlnZ2VyRGF0YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQgPSAoRHJvcFN0bXQgKikg dHJpZ2RhdGEtPnBhcnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9i amVjdCwgbmV4dCwgaXRlci5jdXIpOworCQlvYmphZGRyID0gb2JqLT5hZGRyZXNzOworCQlvYmpj bGFzcyA9IGdldE9iamVjdENsYXNzKCZvYmphZGRyKTsKKworCQlpZiAoc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInRhYmxlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfVGFibGVEcm9wRW5kOwor CQllbHNlIGlmIChvYmpjbGFzcyA9PSBPQ0xBU1NfU0NIRU1BIHx8CisJCQkJIG9iamNsYXNzID09 IE9DTEFTU19PUEVSQVRPUiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BDTEFTUyB8fAor CQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfT1BGQU1JTFkgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX0NBU1QgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RZUEUgfHwKKwkJCQkgb2JqY2xh c3MgPT0gT0NMQVNTX1RSSUdHRVIgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0NPTlZFUlNJ T04gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1BPTElDWSB8fAorCQkJCSBvYmpjbGFzcyA9 PSBPQ0xBU1NfUkVXUklURSB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfRVhURU5TSU9OIHx8 CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19GRFcgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNT X1RTQ09ORklHIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UU0RJQ1QgfHwKKwkJCQkgb2Jq Y2xhc3MgPT0gT0NMQVNTX1RTVEVNUExBVEUgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1RT UEFSU0VSIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19UUkFOU0ZPUk0gfHwKKwkJCQkgb2Jq Y2xhc3MgPT0gT0NMQVNTX0ZPUkVJR05fU0VSVkVSIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFT U19DT0xMQVRJT04gfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX1VTRVJfTUFQUElORyB8fAor CQkJCSBvYmpjbGFzcyA9PSBPQ0xBU1NfTEFOR1VBR0UgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NM QVNTX1NUQVRJU1RJQ19FWFQgfHwKKwkJCQkgb2JqY2xhc3MgPT0gT0NMQVNTX0FNIHx8CisJCQkJ IG9iamNsYXNzID09IE9DTEFTU19QVUJMSUNBVElPTiB8fAorCQkJCSBvYmpjbGFzcyA9PSBPQ0xB U1NfUFVCTElDQVRJT05fUkVMIHx8CisJCQkJIG9iamNsYXNzID09IE9DTEFTU19QVUJMSUNBVElP Tl9OQU1FU1BBQ0UgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24gdGFi bGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJpbmRleCIpID09IDAg fHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInNlcXVlbmNlIikgPT0gMCB8fAorCQkJ CSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgImZ1bmN0aW9uIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmpl Y3R0eXBlLCAibWF0ZXJpYWxpemVkIHZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5 cGUsICJyb3V0aW5lIikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiYWdn cmVnYXRlIikgPT0gMCkKKwkJCWNtZHR5cGUgPSBEQ1RfT2JqZWN0RHJvcDsKKwkJZWxzZQorCQkJ Y29udGludWU7CisKKwkJLyogQ2hhbmdlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIHRvIGZvcmVpZ24g ZGF0YSB3cmFwcGVyICovCisJCWlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImZvcmVpZ24t ZGF0YSB3cmFwcGVyIiwgMjApID09IDApCisJCXsKKwkJCXRtcHR5cGUgPSBwc3RyZHVwKCJmb3Jl aWduIGRhdGEgd3JhcHBlciIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9i ai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZpb3IpOwor CQl9CisKKwkJLyogQ2hhbmdlIHN0YXRpc3RpY3Mgb2JqZWN0IHRvIHN0YXRpc3RpY3MgKi8KKwkJ ZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJzdGF0aXN0aWNzIG9iamVjdCIsCisJ CQkJCQkgc3RybGVuKCJzdGF0aXN0aWNzIG9iamVjdCIpKSA9PSAwKQorCQl7CisJCQl0bXB0eXBl ID0gcHN0cmR1cCgic3RhdGlzdGljcyIpOworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21t YW5kKG9iai0+b2JqaWRlbnRpdHksIHRtcHR5cGUsCisJCQkJCQkJCQkJICAgc3RtdC0+YmVoYXZp b3IpOworCQl9CisKKwkJLyoKKwkJICogT2JqZWN0IGlkZW50aXR5IG5lZWRzIHRvIGJlIG1vZGlm aWVkIHRvIG1ha2UgdGhlIGRyb3Agd29yaworCQkgKgorCQkgKiBGUk9NOiA8cm9sZT4gb24gc2Vy dmVyIDxzZXJ2ZXJuYW1lPiBUTyAgOiBmb3IgPHJvbGU+IHNlcnZlcgorCQkgKiA8c2VydmVybmFt ZT4KKwkJICoKKwkJICovCisJCWVsc2UgaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAidXNl ciBtYXBwaW5nIiwgMTIpID09IDApCisJCXsKKwkJCWNoYXIJICAgKm9uX3NlcnZlcjsKKworCQkJ dG1wdHlwZSA9IHBhbGxvYyhzdHJsZW4ob2JqLT5vYmppZGVudGl0eSkgKyAyKTsKKwkJCW9uX3Nl cnZlciA9IHN0cnN0cihvYmotPm9iamlkZW50aXR5LCAib24gc2VydmVyIik7CisKKwkJCXNwcmlu dGYoKGNoYXIgKikgdG1wdHlwZSwgImZvciAiKTsKKwkJCXN0cm5jYXQoKGNoYXIgKikgdG1wdHlw ZSwgb2JqLT5vYmppZGVudGl0eSwgb25fc2VydmVyIC0gb2JqLT5vYmppZGVudGl0eSk7CisJCQlz dHJjYXQoKGNoYXIgKikgdG1wdHlwZSwgb25fc2VydmVyICsgMyk7CisJCQljb21tYW5kID0gZGVw YXJzZV9kcm9wX2NvbW1hbmQodG1wdHlwZSwgb2JqLT5vYmplY3R0eXBlLAorCQkJCQkJCQkJCSAg IHN0bXQtPmJlaGF2aW9yKTsKKwkJfQorCQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlw ZSwgInB1YmxpY2F0aW9uIG5hbWVzcGFjZSIsCisJCQkJCQkgc3RybGVuKCJwdWJsaWNhdGlvbiBu YW1lc3BhY2UiKSkgPT0gMCB8fAorCQkJCSBzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInB1Ymxp Y2F0aW9uIHJlbGF0aW9uIiwKKwkJCQkJCSBzdHJsZW4oInB1YmxpY2F0aW9uIHJlbGF0aW9uIikp ID09IDApCisJCQljb21tYW5kID0gZGVwYXJzZV9BbHRlclB1YmxpY2F0aW9uRHJvcFN0bXQob2Jq KTsKKwkJZWxzZQorCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9jb21tYW5kKG9iai0+b2JqaWRl bnRpdHksIG9iai0+b2JqZWN0dHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7CisK KwkJaWYgKGNvbW1hbmQpCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+ YWRkcmVzcy5vYmplY3RJZCwgY21kdHlwZSwKKwkJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21t YW5kKSArIDEpOworCX0KKworCXJldHVybiBQb2ludGVyR2V0RGF0dW0oTlVMTCk7Cit9CisKKwor LyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFy c2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQor cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJY2hhcgkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJY2hhcgkgICAq anNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJ CWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlj bWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChj bWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9y IGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgor CSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNv IHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJl ZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8g ZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZwor CSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLwor CWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxv ZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9 IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3Ry bGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5j IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXggMzllNjg2 MTIyZi4uZjU2YTcxNjU2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dp Y2FsLmMKQEAgLTk1LDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMg dm9pZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJv b2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1l c3NhZ2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRs X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwK KwkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hh ciAqcHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Owogc3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAq Y2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVsYXRpb25z LCBSZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIApA QCAtMjQ1LDYgKzI1MCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3Bs dWdpbl9vcHRpb25zLAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxM KSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQko Y3R4LT5jYWxsYmFja3Muc3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2Fs bGJhY2tzLnN0cmVhbV9kZGxfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVh bV90cnVuY2F0ZV9jYiAhPSBOVUxMKTsKIAogCS8qCkBAIC0yNjIsNiArMjY4LDcgQEAgU3RhcnR1 cERlY29kaW5nQ29udGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9y ZGVyLT5zdHJlYW1fY29tbWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVv cmRlci0+c3RyZWFtX2NoYW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJl b3JkZXItPnN0cmVhbV9tZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgt PnJlb3JkZXItPnN0cmVhbV9kZGwgPSBzdHJlYW1fZGRsX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9y ZGVyLT5zdHJlYW1fdHJ1bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBA IC0xNTkyLDYgKzE1OTksNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVm ZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCWVycm9yX2NvbnRleHRfc3RhY2sg PSBlcnJjYWxsYmFjay5wcmV2aW91czsKIH0KIAorc3RhdGljIHZvaWQKK3N0cmVhbV9kZGxfY2Jf d3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJ CQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgs IE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCSBTaXplIG1l c3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNh bGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisK KwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKworCS8qIFdlJ3JlIG9ubHkgc3VwcG9zZWQg dG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFtaW5nIGlzIHN1cHBvcnRlZC4gKi8KKwlBc3NlcnQoY3R4 LT5zdHJlYW1pbmcpOworCisJLyogdGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCAqLworCWlmIChj dHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsX2NiID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIFB1 c2ggY2FsbGJhY2sgKyBpbmZvIG9uIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrICovCisJc3RhdGUu Y3R4ID0gY3R4OworCXN0YXRlLmNhbGxiYWNrX25hbWUgPSAic3RyZWFtX2RkbCI7CisJc3RhdGUu cmVwb3J0X2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBv dXRwdXRfcGx1Z2luX2Vycm9yX2NhbGxiYWNrOworCWVycmNhbGxiYWNrLmFyZyA9ICh2b2lkICop ICZzdGF0ZTsKKwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJ ZXJyb3JfY29udGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCS8qIHNldCBvdXRwdXQgc3Rh dGUgKi8KKwljdHgtPmFjY2VwdF93cml0ZXMgPSB0cnVlOworCWN0eC0+d3JpdGVfeGlkID0gdHhu ICE9IE5VTEwgPyB0eG4tPnhpZCA6IEludmFsaWRUcmFuc2FjdGlvbklkOworCWN0eC0+d3JpdGVf bG9jYXRpb24gPSBtZXNzYWdlX2xzbjsKKworCS8qIGRvIHRoZSBhY3R1YWwgd29yazogY2FsbCBj YWxsYmFjayAqLworCWN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IoY3R4LCB0eG4sIG1lc3Nh Z2VfbHNuLCBwcmVmaXgsIHJlbGlkLAorCQkJCQkJCQkJCWNtZHR5cGUsIG1lc3NhZ2Vfc2l6ZSwg bWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9j b250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKIHN0YXRpYyB2b2lkCiBz dHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAogCQkJCQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9u c1tdLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9tZXNvbi5i dWlsZCBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKaW5kZXgg OTljNjA4ZDAzZi4uMDVlNzc1Njk3ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9tZXNvbi5idWlsZAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL21lc29uLmJ1aWxkCkBAIC0zLDYgKzMsNyBAQAogYmFja2VuZF9zb3VyY2VzICs9IGZpbGVz KAogICAnYXBwbHlwYXJhbGxlbHdvcmtlci5jJywKICAgJ2RkbG1lc3NhZ2UuYycsCisgICdkZGx0 cmlnZ2VyLmMnLAogICAnZGVjb2RlLmMnLAogICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMn LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGYzMDg3MTMyNzUu LjFiYTNmZWIxODcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv cHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAg LTY2Myw2ICs2NjMsNDcgQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0 LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAJcHFfc2VuZGJ5dGVzKG91dCwg bWVzc2FnZSwgc3opOwogfQogCisvKgorICogUmVhZCBEREwgTUVTU0FHRSBmcm9tIHN0cmVhbQor ICovCitjaGFyICoKK2xvZ2ljYWxyZXBfcmVhZF9kZGwoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0 ciAqbHNuLAorCQkJCQkJICAgY29uc3QgY2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUgKnN6 KQoreworCXVpbnQ4IGZsYWdzOworCWNoYXIgKm1zZzsKKworCWZsYWdzID0gcHFfZ2V0bXNnaW50 KGluLCAxKTsKKwlpZiAoZmxhZ3MgIT0gMCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBm bGFncyAldSBpbiBkZGwgbWVzc2FnZSIsIGZsYWdzKTsKKworCSpsc24gPSBwcV9nZXRtc2dpbnQ2 NChpbik7CisJKnByZWZpeCA9IHBxX2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFfZ2V0bXNn aW50KGluLCA0KTsKKwltc2cgPSAoY2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6KTsKKwor CXJldHVybiBtc2c7Cit9CisKKy8qCisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJlYW0KKyAq Lwordm9pZAorbG9naWNhbHJlcF93cml0ZV9kZGwoU3RyaW5nSW5mbyBvdXQsIFhMb2dSZWNQdHIg bHNuLAorCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVz c2FnZSkKK3sKKwl1aW50OAkJZmxhZ3MgPSAwOworCisJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FM X1JFUF9NU0dfRERMKTsKKworCXBxX3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2 NChvdXQsIGxzbik7CisJcHFfc2VuZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMy KG91dCwgc3opOworCXBxX3NlbmRieXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAq IFdyaXRlIHJlbGF0aW9uIGRlc2NyaXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBA IC0xMjM4LDYgKzEyNzksOCBAQCBsb2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNn VHlwZSBhY3Rpb24pCiAJCQlyZXR1cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19N RVNTQUdFOgogCQkJcmV0dXJuICJNRVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERM OgorCQkJcmV0dXJuICJEREwiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJF OgogCQkJcmV0dXJuICJCRUdJTiBQUkVQQVJFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfUFJF UEFSRToKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRl cmJ1ZmZlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMKaW5kZXggODExNzM5YjU5Zi4uMDNhMzQ4NGRlMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKQEAgLTIwNTIsMTIgKzIwNTIsMjAgQEAg c3RhdGljIGlubGluZSB2b2lkCiBSZW9yZGVyQnVmZmVyQXBwbHlERExNZXNzYWdlKFJlb3JkZXJC dWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJD aGFuZ2UgKmNoYW5nZSwgYm9vbCBzdHJlYW1pbmcpCiB7Ci0JcmItPmRkbChyYiwgdHhuLCBjaGFu Z2UtPmxzbiwKLQkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAotCQkJY2hhbmdlLT5kYXRhLmRk bC5yZWxpZCwKLQkJCWNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKLQkJCWNoYW5nZS0+ZGF0YS5k ZGwubWVzc2FnZV9zaXplLAotCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwlpZiAoc3Ry ZWFtaW5nKQorCQlyYi0+c3RyZWFtX2RkbChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkg IGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5yZWxp ZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ ZGF0YS5kZGwubWVzc2FnZV9zaXplLAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdl KTsKKwllbHNlCisJCXJiLT5kZGwocmIsIHR4biwgY2hhbmdlLT5sc24sCisJCQkJCSAgIGNoYW5n ZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwu bWVzc2FnZV9zaXplLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOwogfQogCiAv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKaW5kZXggYzdkMTczNGEx Ny4uYjliNjUyZjdiYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5j CkBAIC0xNjYsNiArMTY2LDcgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJu b2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvb3B0aW1pemVyLmgiCisjaW5j bHVkZSAicGFyc2VyL2FuYWx5emUuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24u aCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyLmgi CkBAIC0xOTEsNyArMTkyLDEwIEBACiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNs dWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNs dWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidGNvcC91dGlsaXR5LmgiCiAjaW5jbHVk ZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1 dGlscy9jYXRjYWNoZS5oIgpAQCAtMzIzOCw2ICszMjQyLDIzOCBAQCBhcHBseV9oYW5kbGVfdHJ1 bmNhdGUoU3RyaW5nSW5mbyBzKQogCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CiB9CiAKKy8qCisg KiBTcGVjaWFsIGhhbmRsaW5nIGZvciBDUkVBVEUgVEFCTEUgQVMgYW5kIFNFTEVDVCBJTlRPCisg KiB0byBub3QgcG9wdWxhdGUgZGF0YSBmcm9tIHRoZSBzb3VyY2UgdGFibGUgb24gdGhlIHN1YnNj cmliZXIuCisgKiBBbGxvdyB0aGUgZGF0YSB0byBiZSByZXBsaWNhdGVkIHRocm91Z2ggSU5TRVJU cyBvbiB0aGUgcHVibGlzaGVyLgorICovCitzdGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVf dGFibGUoUmF3U3RtdCAqY29tbWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwlj b21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAqKSBjb21tYW5kKTsKKworCXN3aXRj aCAoY29tbWFuZFRhZykKKwl7CisJCWNhc2UgQ01EVEFHX0NSRUFURV9UQUJMRV9BUzoKKwkJY2Fz ZSBDTURUQUdfU0VMRUNUX0lOVE86CisJCQl7CisJCQkJQ3JlYXRlVGFibGVBc1N0bXQgKmNhc3Rt dCA9IChDcmVhdGVUYWJsZUFzU3RtdCAqKSBjb21tYW5kLT5zdG10OworCisJCQkJaWYgKGNhc3Rt dC0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3Jj ZSBza2lwcGluZyBkYXRhIHBvcHVsYXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNp c3RlbmN5LiBEYXRhIHNob3VsZCBiZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxp c2hlciBpbnN0ZWFkLgorCQkJCQkgKi8KKwkJCQkJY2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRy dWU7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsK KwkJCQlTZWxlY3RTdG10ICpzc3RtdCA9IChTZWxlY3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisK KwkJCQlpZiAoc3N0bXQtPmludG9DbGF1c2UgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJ CSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAq IGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJ ICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+ c2tpcERhdGEgPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ YnJlYWs7CisJfQorfQorCisvKgorICogSGFuZGxlIENSRUFURSBUQUJMRSBjb21tYW5kCisgKgor ICogQ2FsbCBBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZSBmb3IgQ1JFQVRFIExBQkVMIGNvbW1hbmQg dG8gc2V0IHRoZSByZWxzdGF0ZSB0bworICogU1VCUkVMX1NUQVRFX1JFQURZIHNvIERNTCBjaGFu Z2VzIG9uIHRoaXMgbmV3IHRhYmxlIGNhbiBiZSByZXBsaWNhdGVkIHdpdGhvdXQKKyAqIGhhdmlu ZyB0byBtYW51YWxseSBydW4gImFsdGVyIHN1YnNjcmlwdGlvbiAuLi4gcmVmcmVzaCBwdWJsaWNh dGlvbiIKKyAqLworc3RhdGljIHZvaWQKK2hhbmRsZV9jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29t bWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisJUmFuZ2VWYXIgICAqcnYgPSBOVUxM OworCU9pZAkJCXJlbGlkOworCU9pZAkJCXJlbG5hbWVzcGFjZSA9IEludmFsaWRPaWQ7CisJQ3Jl YXRlU3RtdCAqY3N0bXQ7CisJY2hhcgkgICAqc2NoZW1hbmFtZSA9IE5VTEw7CisJY2hhcgkgICAq cmVsbmFtZSA9IE5VTEw7CisKKwljb21tYW5kVGFnID0gQ3JlYXRlQ29tbWFuZFRhZygoTm9kZSAq KSBjb21tYW5kKTsKKwljc3RtdCA9IChDcmVhdGVTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisJcnYg PSBjc3RtdC0+cmVsYXRpb247CisKKwlpZiAoY29tbWFuZFRhZyA9PSBDTURUQUdfQ1JFQVRFX1RB QkxFKQorCXsKKwkJY3N0bXQgPSAoQ3JlYXRlU3RtdCAqKSBjb21tYW5kLT5zdG10OworCQlydiA9 IGNzdG10LT5yZWxhdGlvbjsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuOworCX0KKworCWlmICgh cnYpCisJCXJldHVybjsKKworCXNjaGVtYW5hbWUgPSBydi0+c2NoZW1hbmFtZTsKKwlyZWxuYW1l ID0gcnYtPnJlbG5hbWU7CisKKwlpZiAoc2NoZW1hbmFtZSAhPSBOVUxMKQorCQlyZWxuYW1lc3Bh Y2UgPSBnZXRfbmFtZXNwYWNlX29pZChzY2hlbWFuYW1lLCBmYWxzZSk7CisKKwlpZiAocmVsbmFt ZXNwYWNlICE9IEludmFsaWRPaWQpCisJCXJlbGlkID0gZ2V0X3JlbG5hbWVfcmVsaWQocmVsbmFt ZSwgcmVsbmFtZXNwYWNlKTsKKwllbHNlCisJCXJlbGlkID0gUmVsbmFtZUdldFJlbGlkKHJlbG5h bWUpOworCisJaWYgKE9pZElzVmFsaWQocmVsaWQpKQorCXsKKwkJQWRkU3Vic2NyaXB0aW9uUmVs U3RhdGUoTXlTdWJzY3JpcHRpb24tPm9pZCwgcmVsaWQsCisJCQkJCQkJCVNVQlJFTF9TVEFURV9S RUFEWSwKKwkJCQkJCQkJSW52YWxpZFhMb2dSZWNQdHIpOworCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkoZXJybXNnX2ludGVybmFsKCJ0YWJsZSBcIiVzXCIgYWRkZWQgdG8gc3Vic2NyaXB0aW9uIFwi JXNcIiIsCisJCQkJCQkJCSByZWxuYW1lLCBNeVN1YnNjcmlwdGlvbi0+bmFtZSkpKTsKKwl9Cit9 CisKKy8qCisgKiBIYW5kbGUgRERMIHJlcGxpY2F0aW9uIG1lc3NhZ2VzLgorICovCitzdGF0aWMg dm9pZAorYXBwbHlfaGFuZGxlX2RkbChTdHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0cglsc247 CisJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwljaGFyCSAgICptZXNzYWdlID0gTlVMTDsK KwljaGFyCSAgICpkZGxfY29tbWFuZDsKKwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRyZWVf bGlzdDsKKwlMaXN0Q2VsbCAgICpwYXJzZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJlY2Vp dmVyOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2RlYnVn X3F1ZXJ5X3N0cmluZyA9IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dpY2Fs cmVwX3JlYWRfZGRsKHMsICZsc24sICZwcmVmaXgsICZzeik7CisKKwkvKiBNYWtlIHN1cmUgd2Ug YXJlIGluIGEgdHJhbnNhY3Rpb24gY29tbWFuZCAqLworCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAo KTsKKworCWRkbF9jb21tYW5kID0gZGVwYXJzZV9kZGxfanNvbl90b19zdHJpbmcobWVzc2FnZSk7 CisJZGVidWdfcXVlcnlfc3RyaW5nID0gZGRsX2NvbW1hbmQ7CisKKwkvKiBEZXN0Tm9uZSBmb3Ig bG9naWNhbCByZXBsaWNhdGlvbiAqLworCXJlY2VpdmVyID0gQ3JlYXRlRGVzdFJlY2VpdmVyKERl c3ROb25lKTsKKwlwYXJzZXRyZWVfbGlzdCA9IHBnX3BhcnNlX3F1ZXJ5KGRkbF9jb21tYW5kKTsK KworCWZvcmVhY2gocGFyc2V0cmVlX2l0ZW0sIHBhcnNldHJlZV9saXN0KQorCXsKKwkJTGlzdAkg ICAqcGxhbnRyZWVfbGlzdDsKKwkJTGlzdAkgICAqcXVlcnl0cmVlX2xpc3Q7CisJCVJhd1N0bXQg ICAgKmNvbW1hbmQgPSAoUmF3U3RtdCAqKSBsZmlyc3QocGFyc2V0cmVlX2l0ZW0pOworCQlDb21t YW5kVGFnCWNvbW1hbmRUYWc7CisJCU1lbW9yeUNvbnRleHQgcGVyX3BhcnNldHJlZV9jb250ZXh0 ID0gTlVMTDsKKwkJUG9ydGFsCQlwb3J0YWw7CisJCWJvb2wJCXNuYXBzaG90X3NldCA9IGZhbHNl OworCisJCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOwor CisJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgaW4gcGFyc2luZyBvciBwcmlvciBjb21t YW5kLCBxdWl0ICovCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJLyogUmVtb3ZlIGRh dGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21tYW5kICovCisJCXByZXByb2Nlc3NfY3JlYXRlX3Rh YmxlKGNvbW1hbmQpOworCisJCS8qCisJCSAqIFNldCB1cCBhIHNuYXBzaG90IGlmIHBhcnNlIGFu YWx5c2lzL3BsYW5uaW5nIHdpbGwgbmVlZCBvbmUuCisJCSAqLworCQlpZiAoYW5hbHl6ZV9yZXF1 aXJlc19zbmFwc2hvdChjb21tYW5kKSkKKwkJeworCQkJUHVzaEFjdGl2ZVNuYXBzaG90KEdldFRy YW5zYWN0aW9uU25hcHNob3QoKSk7CisJCQlzbmFwc2hvdF9zZXQgPSB0cnVlOworCQl9CisKKwkJ LyoKKwkJICogV2UgZG8gdGhlIHdvcmsgZm9yIGVhY2ggcGFyc2V0cmVlIGluIGEgc2hvcnQtbGl2 ZWQgY29udGV4dCwgdG8KKwkJICogbGltaXQgdGhlIG1lbW9yeSB1c2VkIHdoZW4gdGhlcmUgYXJl IG1hbnkgY29tbWFuZHMgaW4gdGhlIHN0cmluZy4KKwkJICovCisJCXBlcl9wYXJzZXRyZWVfY29u dGV4dCA9CisJCQlBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJ CQkJCQkJCSAgImV4ZWN1dGVfc3FsX3N0cmluZyBwZXItc3RhdGVtZW50IGNvbnRleHQiLAorCQkJ CQkJCQkgIEFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCQlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisKKwkJcXVlcnl0cmVlX2xpc3Qg PSBwZ19hbmFseXplX2FuZF9yZXdyaXRlX2ZpeGVkcGFyYW1zKGNvbW1hbmQsCisJCQkJCQkJCQkJ CQkJCQlkZGxfY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCU5VTEwsIDAsIE5VTEwpOworCisJCXBs YW50cmVlX2xpc3QgPSBwZ19wbGFuX3F1ZXJpZXMocXVlcnl0cmVlX2xpc3QsIGRkbF9jb21tYW5k LCAwLCBOVUxMKTsKKworCQkvKiBEb25lIHdpdGggdGhlIHNuYXBzaG90IHVzZWQgZm9yIHBhcnNp bmcvcGxhbm5pbmcgKi8KKwkJaWYgKHNuYXBzaG90X3NldCkKKwkJCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CisKKwkJcG9ydGFsID0gQ3JlYXRlUG9ydGFsKCJsb2dpY2FsIHJlcGxpY2F0aW9uIiwgdHJ1 ZSwgdHJ1ZSk7CisKKwkJLyoKKwkJICogV2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGFueXRoaW5nIGlu dG8gdGhlIHBvcnRhbCwgYmVjYXVzZSBldmVyeXRoaW5nCisJCSAqIHdlIGFyZSBwYXNzaW5nIGhl cmUgaXMgaW4gQXBwbHlNZXNzYWdlQ29udGV4dCBvciB0aGUKKwkJICogcGVyX3BhcnNldHJlZV9j b250ZXh0LCBhbmQgc28gd2lsbCBvdXRsaXZlIHRoZSBwb3J0YWwgYW55d2F5LgorCQkgKi8KKwkJ UG9ydGFsRGVmaW5lUXVlcnkocG9ydGFsLAorCQkJCQkJICBOVUxMLAorCQkJCQkJICBkZGxfY29t bWFuZCwKKwkJCQkJCSAgY29tbWFuZFRhZywKKwkJCQkJCSAgcGxhbnRyZWVfbGlzdCwKKwkJCQkJ CSAgTlVMTCk7CisKKwkJLyoKKwkJICogU3RhcnQgdGhlIHBvcnRhbC4gIE5vIHBhcmFtZXRlcnMg aGVyZS4KKwkJICovCisJCVBvcnRhbFN0YXJ0KHBvcnRhbCwgTlVMTCwgMCwgSW52YWxpZFNuYXBz aG90KTsKKworCQkvKgorCQkgKiBTd2l0Y2ggYmFjayB0byB0cmFuc2FjdGlvbiBjb250ZXh0IGZv ciBleGVjdXRpb24uCisJCSAqLworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7 CisKKwkJKHZvaWQpIFBvcnRhbFJ1bihwb3J0YWwsCisJCQkJCQkgRkVUQ0hfQUxMLAorCQkJCQkJ IHRydWUsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSByZWNlaXZlciwKKwkJCQkJCSByZWNlaXZlciwK KwkJCQkJCSBOVUxMKTsKKworCQlQb3J0YWxEcm9wKHBvcnRhbCwgZmFsc2UpOworCisJCUNvbW1h bmRDb3VudGVySW5jcmVtZW50KCk7CisKKwkJLyoKKwkJICogVGFibGUgY3JlYXRlZCBieSBEREwg cmVwbGljYXRpb24gKGRhdGFiYXNlIGxldmVsKSBpcyBhdXRvbWF0aWNhbGx5CisJCSAqIGFkZGVk IHRvIHRoZSBzdWJzY3JpcHRpb24gaGVyZS4KKwkJICovCisJCWhhbmRsZV9jcmVhdGVfdGFibGUo Y29tbWFuZCk7CisKKwkJLyogTm93IHdlIG1heSBkcm9wIHRoZSBwZXItcGFyc2V0cmVlIGNvbnRl eHQsIGlmIG9uZSB3YXMgY3JlYXRlZC4gKi8KKwkJTWVtb3J5Q29udGV4dERlbGV0ZShwZXJfcGFy c2V0cmVlX2NvbnRleHQpOworCX0KKworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IHNhdmVfZGVidWdf cXVlcnlfc3RyaW5nOworCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7Cit9CiAKIC8qCiAgKiBMb2dp Y2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAgLTMzMDMsNiAr MzUzOSwxMCBAQCBhcHBseV9kaXNwYXRjaChTdHJpbmdJbmZvIHMpCiAJCQkgKi8KIAkJCWJyZWFr OwogCisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETDoKKwkJCWFwcGx5X2hhbmRsZV9kZGwocyk7 CisJCQlicmVhazsKKwogCQljYXNlIExPR0lDQUxfUkVQX01TR19TVFJFQU1fU1RBUlQ6CiAJCQlh cHBseV9oYW5kbGVfc3RyZWFtX3N0YXJ0KHMpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCA0ZTYxYWQzNjJjLi4yODEyODA1MTUz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5j CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMKQEAgLTU2 LDYgKzU2LDExIEBAIHN0YXRpYyB2b2lkIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4LAogCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sCiAJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJl Zml4LAogCQkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK3N0YXRpYyB2b2lk IHBnb3V0cHV0X2RkbChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCVJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJY29uc3Qg Y2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgYm9v bCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJ CQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0X2Jl Z2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTI1NSw2ICsy NjAsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2Ip CiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAljYi0+dHJ1bmNhdGVfY2IgPSBw Z291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9IHBnb3V0cHV0X21lc3NhZ2U7CisJ Y2ItPmRkbF9jYiA9IHBnb3V0cHV0X2RkbDsKIAljYi0+Y29tbWl0X2NiID0gcGdvdXRwdXRfY29t bWl0X3R4bjsKIAogCWNiLT5iZWdpbl9wcmVwYXJlX2NiID0gcGdvdXRwdXRfYmVnaW5fcHJlcGFy ZV90eG47CkBAIC0yNzEsNiArMjc3LDcgQEAgX1BHX291dHB1dF9wbHVnaW5faW5pdChPdXRwdXRQ bHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5zdHJlYW1fY29tbWl0X2NiID0gcGdvdXRwdXRfc3Ry ZWFtX2NvbW1pdDsKIAljYi0+c3RyZWFtX2NoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsKIAlj Yi0+c3RyZWFtX21lc3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5zdHJlYW1fZGRs X2NiID0gcGdvdXRwdXRfZGRsOwogCWNiLT5zdHJlYW1fdHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90 cnVuY2F0ZTsKIAkvKiB0cmFuc2FjdGlvbiBzdHJlYW1pbmcgLSB0d28tcGhhc2UgY29tbWl0ICov CiAJY2ItPnN0cmVhbV9wcmVwYXJlX2NiID0gcGdvdXRwdXRfc3RyZWFtX3ByZXBhcmVfdHhuOwpA QCAtNDI2LDYgKzQzMyw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAKIAkvKiBUaGlzIHBsdWdpbiB1c2Vz IGJpbmFyeSBwcm90b2NvbC4gKi8KIAlvcHQtPm91dHB1dF90eXBlID0gT1VUUFVUX1BMVUdJTl9C SU5BUllfT1VUUFVUOworCW9wdC0+cmVjZWl2ZV9yZXdyaXRlcyA9IHRydWU7CiAKIAkvKgogCSAq IFRoaXMgaXMgcmVwbGljYXRpb24gc3RhcnQgYW5kIG5vdCBzbG90IGluaXRpYWxpemF0aW9uLgpA QCAtNTA2LDYgKzUxNCw3IEBAIHBnb3V0cHV0X3N0YXJ0dXAoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBPdXRwdXRQbHVnaW5PcHRpb25zICpvcHQsCiAKIAkJLyogSW5pdCBwdWJsaWNhdGlv biBzdGF0ZS4gKi8KIAkJZGF0YS0+cHVibGljYXRpb25zID0gTklMOworCQlkYXRhLT5kZWxldGVk X3JlbGlkcyA9IE5JTDsKIAkJcHVibGljYXRpb25zX3ZhbGlkID0gZmFsc2U7CiAKIAkJLyoKQEAg LTE0MTIsNiArMTQyMSwyMCBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJUmVvcmRlckJ1ZmZlckNoYW5nZVR5cGUg YWN0aW9uID0gY2hhbmdlLT5hY3Rpb247CiAJVHVwbGVUYWJsZVNsb3QgKm9sZF9zbG90ID0gTlVM TDsKIAlUdXBsZVRhYmxlU2xvdCAqbmV3X3Nsb3QgPSBOVUxMOworCWJvb2wgICAgICAgIHRhYmxl X3Jld3JpdGUgPSBmYWxzZTsKKworCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0 IG5lZWQgdG8gcmVwbGljYXRlIHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxp c2hlcyByZXdyaXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJl CisJICogYW5kIGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9u LT5yZF9yZWwtPnJlbHJld3JpdGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVs YXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0 ZSk7CisJCXRhcmdldHJlbCA9IHJlbGF0aW9uOworCX0KKwogCiAJaWYgKCFpc19wdWJsaXNoYWJs ZV9yZWxhdGlvbihyZWxhdGlvbikpCiAJCXJldHVybjsKQEAgLTE0NDYsNiArMTQ2OSwxMyBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQlBc3NlcnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVi bGlzaCB0YWJsZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBk ZGwKKwkgKiBtZXNzYWdlLgorCSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+ cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcg bWVtb3J5IGJ5IHVzaW5nIGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDc1LDggKzE1MDUs OCBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlm ICghcGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50 cnksCi0JCQkJCQkJCQkgJmFjdGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkh cGdvdXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnks ICZhY3Rpb24pKQogCQkJCWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ5Niw4ICsxNTI2LDE5IEBAIHBn b3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAkJCW1heWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVs ZW50cnkpOwogCiAJCQlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxv Z2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3Qs Ci0JCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJ CSAqIENvbnZlcnQgdGhlIHJld3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1 YnNjcmliZXIKKwkJCSAqIGNhbiByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3Vy ZSB0aGUgZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29u c2lzdGVudC4KKwkJCSAqLworCQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93 cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5l d19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJ ZWxzZQorCQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJl bCwgbmV3X3Nsb3QsCisJCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7 CiAJCQlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVP UkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFURToKQEAgLTE2MjksNiArMTY3MCw5IEBAIHBnb3V0cHV0 X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJYW5jZXN0b3IgPSBOVUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxh dGlvbkNsb3NlKHJlbGF0aW9uKTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkKTsKIAlNZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNzQz LDYgKzE3ODcsMTM4IEBAIHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVl KTsKIH0KIAorLyoKKyAqIFNlbmQgdGhlIGRlY29kZWQgRERMIG92ZXIgd2lyZS4KKyAqLworc3Rh dGljIHZvaWQKK3Bnb3V0cHV0X2RkbChMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJY29u c3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwK KwkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlQR091dHB1dERhdGEgKmRh dGEgPSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOworCVBHT3V0 cHV0VHhuRGF0YSAqdHhuZGF0YSA9IChQR091dHB1dFR4bkRhdGEgKikgdHhuLT5vdXRwdXRfcGx1 Z2luX3ByaXZhdGU7CisJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOworCVJlbGF0aW9uU3luY0Vu dHJ5ICpyZWxlbnRyeTsKKworCXN3aXRjaCAoY21kdHlwZSkKKwl7CisJCWNhc2UgRENUX1RhYmxl RHJvcFN0YXJ0OgorCisJCQkvKgorCQkJICogT24gRFJPUCBzdGFydCwgYWRkIHRoZSByZWxpZCB0 byBhIGRlbGV0ZWRfcmVsaWQgbGlzdCBpZiB0aGUKKwkJCSAqIHJlbGlkIGlzIHBhcnQgb2YgYSBw dWJsaWNhdGlvbiB0aGF0IHN1cHBvcnRzIGRkbCBwdWJsaWNhdGlvbi4KKwkJCSAqIFdlIG5lZWQg dGhpcyBiZWNhdXNlIG9uIERST1AgZW5kLCB0aGUgcmVsaWQgd2lsbCBubyBsb25nZXIgYmUKKwkJ CSAqIHZhbGlkLiBMYXRlciBvbiBEcm9wIGVuZCwgdmVyaWZ5IHRoYXQgdGhlIGRyb3AgaXMgZm9y IGEgcmVsaWQKKwkJCSAqIHRoYXQgaXMgb24gdGhlIGRlbGV0ZWRfcmlkIGxpc3QsIGFuZCBvbmx5 IHRoZW4gc2VuZCB0aGUgZGRsCisJCQkgKiBtZXNzYWdlLgorCQkJICovCisJCQlyZWxhdGlvbiA9 IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7CisKKwkJCUFzc2VydChyZWxhdGlvbik7CisJ CQlyZWxlbnRyeSA9IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlm IChyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUpCisJCQkJZGF0YS0+ZGVsZXRlZF9y ZWxpZHMgPSBsYXBwZW5kX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCisJCQlS ZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCXJldHVybjsKKworCQljYXNlIERDVF9UYWJsZURy b3BFbmQ6CisJCQlpZiAoIWxpc3RfbWVtYmVyX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVs aWQpKQorCQkJCXJldHVybjsKKwkJCWVsc2UKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxp c3RfZGVsZXRlX29pZChkYXRhLT5kZWxldGVkX3JlbGlkcywgcmVsaWQpOworCQkJYnJlYWs7CisK KwkJY2FzZSBEQ1RfVGFibGVBbHRlcjoKKworCQkJLyoKKwkJCSAqIEZvciB0YWJsZSByZXdyaXRl IGRkbCwgd2UgZmlyc3Qgc2VuZCB0aGUgb3JpZ2luYWwgZGRsIG1lc3NhZ2UKKwkJCSAqIHRvIHN1 YnNjcmliZXIsIHRoZW4gY29udmVydCB0aGUgdXBjb21pbmcgcmV3cml0ZSBJTlNFUlQgdG8KKwkJ CSAqIFVQREFURSBhbmQgc2VuZCB0aGVtIHRvIHN1YnNjcmliZXIgc28gdGhhdCB0aGUgZGF0YSBi ZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgY2FuIGFsd2F5cyBiZSBjb25z aXN0ZW50LgorCQkJICoKKwkJCSAqIFdlIGRvIHRoaXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNv bjoKKwkJCSAqCisJCQkgKiAoMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRlIGRkbCBjb3Vs ZCBhbHJlYWR5IGJlIGRpZmZlcmVudAorCQkJICogYW1vbmcgcHVibGlzaGVyIGFuZCBzdWJzY3Jp YmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4KKwkJCSAqIHN1YnNjcmliZXIgd2hp Y2ggZG9lc24ndCBleGlzdCBpbiBwdWJsaXNoZXIgYWxzbyBnZXQgcmV3cml0dGVuLAorCQkJICog d2UgbmVlZCB0byBsZXQgdGhlIHN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0 ZSBkZGwKKwkJCSAqIHRvIHJld3JpdGUgYWxsIHRoZSBkYXRhIGF0IGZpcnN0LgorCQkJICoKKwkJ CSAqICgyKSB0aGUgZGF0YSBhZnRlciBleGVjdXRpbmcgcmV3cml0ZSBkZGwgY291bGQgYmUgZGlm ZmVyZW50CisJCQkgKiBhbW9uZyBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIoZHVlIHRvIGRpZmZl cmVudAorCQkJICogZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmluZyByZXdyaXRlKSwgc28g d2UgbmVlZCB0bworCQkJICogcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcCB0 aGUgZGF0YSBjb25zaXN0ZW50LgorCQkJICoKKwkJCSAqIFRPIElNUFJPVkU6IFdlIGNvdWxkIGlt cHJvdmUgdGhpcyBieSBsZXR0aW5nIHRoZSBzdWJzY3JpYmVyCisJCQkgKiBvbmx5IHJld3JpdGUg dGhlIGV4dHJhIGRhdGEgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGFuZAorCQkJICog dXNlIHRoZSB1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBkYXRh LgorCQkJICogQmVzaWRlcywgd2UgbWF5IG5vdCBuZWVkIHRvIHNlbmQgcmV3cml0ZSBjaGFuZ2Vz IGZvciBhbGwgdHlwZQorCQkJICogb2YgcmV3cml0ZSBkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVt cyBmaW5lIHRvIHNraXAgc2VuZGluZworCQkJICogcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUiBU QUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRoZQorCQkJICogdGFibGUgZG9lc24ndCBh Y3R1YWxseSBiZSBjaGFuZ2VkLgorCQkJICovCisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRS ZWxhdGlvbihyZWxpZCk7CisJCQlBc3NlcnQocmVsYXRpb24pOworCisJCQlyZWxlbnRyeSA9IGdl dF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCS8qCisJCQkgKiBTa2lwIHNl bmRpbmcgdGhpcyBkZGwgaWYgd2UgZG9uJ3QgcHVibGlzaCBkZGwgbWVzc2FnZSBvciB0aGUKKwkJ CSAqIGRkbCBuZWVkIHRvIGJlIHB1Ymxpc2hlZCB2aWEgaXRzIHJvb3QgcmVsYXRpb24uCisJCQkg Ki8KKwkJCWlmICghcmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHx8CisJCQkJcmVs ZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgIT0gcmVsaWQpCisJCQl7CisJCQkJUmVsYXRpb25DbG9z ZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIERD VF9TaW1wbGVDbWQ6CisJCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihyZWxpZCk7 CisKKwkJCWlmIChyZWxhdGlvbiA9PSBOVUxMKQorCQkJCWJyZWFrOworCisJCQlyZWxlbnRyeSA9 IGdldF9yZWxfc3luY19lbnRyeShkYXRhLCByZWxhdGlvbik7CisKKwkJCWlmICghcmVsZW50cnkt PnB1YmFjdGlvbnMucHViZGRsX3RhYmxlKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRp b24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBEQ1RfT2JqZWN0 RHJvcDoKKwkJCS8qIGRvIG5vdGhpbmcgKi8KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQll bG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgdHlwZSAlZCIsIGNtZHR5cGUpOworCQkJYnJlYWs7CisJ fQorCisJLyogU2VuZCBCRUdJTiBpZiB3ZSBoYXZlbid0IHlldCAqLworCWlmICh0eG5kYXRhICYm ICF0eG5kYXRhLT5zZW50X2JlZ2luX3R4bikKKwkJcGdvdXRwdXRfc2VuZF9iZWdpbihjdHgsIHR4 bik7CisKKwlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKKwlsb2dpY2FscmVw X3dyaXRlX2RkbChjdHgtPm91dCwKKwkJCQkJCQkJbWVzc2FnZV9sc24sCisJCQkJCQkJCXByZWZp eCwKKwkJCQkJCQkJc3osCisJCQkJCQkJCW1lc3NhZ2UpOworCU91dHB1dFBsdWdpbldyaXRlKGN0 eCwgdHJ1ZSk7CisKKwlpZiAocmVsYXRpb24pCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOwor fQorCiAvKgogICogUmV0dXJuIHRydWUgaWYgdGhlIGRhdGEgaXMgYXNzb2NpYXRlZCB3aXRoIGFu IG9yaWdpbiBhbmQgdGhlIHVzZXIgaGFzCiAgKiByZXF1ZXN0ZWQgdGhlIGNoYW5nZXMgdGhhdCBk b24ndCBoYXZlIGFuIG9yaWdpbiwgZmFsc2Ugb3RoZXJ3aXNlLgpAQCAtMjA1MSw3ICsyMjI3LDgg QEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRp b24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3RyZWFtZWRfdHhu cyA9IE5JTDsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnktPnB1YmFjdGlv bnMucHVidXBkYXRlID0KLQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5w dWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZGxfYWxsID0gZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlID0gZmFsc2U7 CiAJCWVudHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJ CW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwpA QCAtMjEwOSw2ICsyMjg2LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0 YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZh bHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKIAkJZW50cnktPnB1 YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJZW50cnktPnB1YmFjdGlvbnMucHViZGRs X2FsbCA9IGZhbHNlOworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUgPSBmYWxzZTsK IAogCQkvKgogCQkgKiBUdXBsZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVidWlsdCBsYXRl ciBpZiBuZWVkZWQpLgpAQCAtMjIyMiw2ICsyNDAxLDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBH T3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnktPnB1YmFjdGlv bnMucHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJZW50cnktPnB1 YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJZW50 cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRl OworCQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgfD0gcHViLT5wdWJhY3Rpb25zLnB1 YmRkbF9hbGw7CisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGRsX3RhYmxlIHw9IHB1Yi0+cHVi YWN0aW9ucy5wdWJkZGxfdGFibGU7CiAKIAkJCQkvKgogCQkJCSAqIFdlIHdhbnQgdG8gcHVibGlz aCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5jZXN0b3IKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Rjb3AvY21kdGFnLmMgYi9zcmMvYmFja2VuZC90Y29wL2NtZHRhZy5jCmluZGV4IDRi ZDcxM2EwYjQuLmNlMDljNWYyMzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvY21kdGFn LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9jbWR0YWcuYwpAQCAtMjYsMTAgKzI2LDExIEBAIHR5 cGVkZWYgc3RydWN0IENvbW1hbmRUYWdCZWhhdmlvcgogCWNvbnN0IGJvb2wJdGFibGVfcmV3cml0 ZV9vazsKIAljb25zdCBib29sCWRpc3BsYXlfcm93Y291bnQ7CS8qIHNob3VsZCB0aGUgbnVtYmVy IG9mIHJvd3MgYWZmZWN0ZWQgYmUKIAkJCQkJCQkJCSAqIHNob3duIGluIHRoZSBjb21tYW5kIGNv bXBsZXRpb24gc3RyaW5nICovCisJY29uc3QgYm9vbAlkZGxfcmVwbGljYXRpb25fb2s7CiB9IENv bW1hbmRUYWdCZWhhdmlvcjsKIAotI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29r LCByd3Jvaywgcm93Y250KSBcCi0JeyBuYW1lLCAodWludDgpIChzaXplb2YobmFtZSkgLSAxKSwg ZXZ0cmdvaywgcndyb2ssIHJvd2NudCB9LAorI2RlZmluZSBQR19DTURUQUcodGFnLCBuYW1lLCBl dnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBsb2spIFwKKwl7IG5hbWUsICh1aW50OCkgKHNp emVvZihuYW1lKSAtIDEpLCBldnRyZ29rLCByd3Jvaywgcm93Y250LCBkZGxyZXBsb2sgfSwKIAog c3RhdGljIGNvbnN0IENvbW1hbmRUYWdCZWhhdmlvciB0YWdfYmVoYXZpb3JbQ09NTUFORF9UQUdf TkVYVFRBR10gPSB7CiAjaW5jbHVkZSAidGNvcC9jbWR0YWdsaXN0LmgiCkBAIC01Nyw2ICs1OCwy MSBAQCBHZXRDb21tYW5kVGFnTmFtZUFuZExlbihDb21tYW5kVGFnIGNvbW1hbmRUYWcsIFNpemUg KmxlbikKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLm5hbWU7CiB9CiAKK0NvbW1h bmRUYWcgKgorR2V0Q29tbWFuZFRhZ3NGb3JERExSZXBsKGludCAqbmNvbW1hbmRzKQoreworCUNv bW1hbmRUYWcgKmRkbHJlcGxfY29tbWFuZHMgPSBwYWxsb2MwKENPTU1BTkRfVEFHX05FWFRUQUcg KiBzaXplb2YoQ29tbWFuZFRhZykpOworCSpuY29tbWFuZHMgPSAwOworCisJZm9yKGludCBpID0g MDsgaSA8IENPTU1BTkRfVEFHX05FWFRUQUc7IGkrKykKKwl7CisJCWlmICh0YWdfYmVoYXZpb3Jb aV0uZGRsX3JlcGxpY2F0aW9uX29rKQorCQkJZGRscmVwbF9jb21tYW5kc1soKm5jb21tYW5kcykr K10gPSAoQ29tbWFuZFRhZykgaTsKKwl9CisKKwlyZXR1cm4gZGRscmVwbF9jb21tYW5kczsKK30K KwogYm9vbAogY29tbWFuZF90YWdfZGlzcGxheV9yb3djb3VudChDb21tYW5kVGFnIGNvbW1hbmRU YWcpCiB7CkBAIC03NSw2ICs5MSwxMiBAQCBjb21tYW5kX3RhZ190YWJsZV9yZXdyaXRlX29rKENv bW1hbmRUYWcgY29tbWFuZFRhZykKIAlyZXR1cm4gdGFnX2JlaGF2aW9yW2NvbW1hbmRUYWddLnRh YmxlX3Jld3JpdGVfb2s7CiB9CiAKK2Jvb2wKK2NvbW1hbmRfdGFnX2RkbF9yZXBsaWNhdGlvbl9v ayhDb21tYW5kVGFnIGNvbW1hbmRUYWcpCit7CisJcmV0dXJuIHRhZ19iZWhhdmlvcltjb21tYW5k VGFnXS5kZGxfcmVwbGljYXRpb25fb2s7Cit9CisKIC8qCiAgKiBTZWFyY2ggQ29tbWFuZFRhZyBi eSBuYW1lCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCA2ZmQzZDQ3MWZkLi5hN2UwZGNlYTkzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYwpAQCAtMTY2Niw4ICsxNjY2LDExIEBAIFByb2Nlc3NVdGlsaXR5U2xvdyhQYXJz ZVN0YXRlICpwc3RhdGUsCiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9DcmVhdGVUYWJsZUFzU3Rt dDoKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KHBhcnNldHJlZSk7CiAJCQkJ YWRkcmVzcyA9IEV4ZWNDcmVhdGVUYWJsZUFzKHBzdGF0ZSwgKENyZWF0ZVRhYmxlQXNTdG10ICop IHBhcnNldHJlZSwKIAkJCQkJCQkJCQkJcGFyYW1zLCBxdWVyeUVudiwgcWMpOworCQkJCUV2ZW50 VHJpZ2dlclRhYmxlSW5pdFdyaXRlRW5kKGFkZHJlc3MpOworCQkJCWNvbW1hbmRDb2xsZWN0ZWQg PSB0cnVlOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpAQCAt MjI1Myw2ICsyMjU2LDggQEAgc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0eXBlLCBi b29sIGlzZ3JhbnQpCiAJCQlyZXR1cm4gIlBPTElDWSI7CiAJCWNhc2UgT0JKRUNUX1BST0NFRFVS RToKIAkJCXJldHVybiAiUFJPQ0VEVVJFIjsKKwkJY2FzZSBPQkpFQ1RfUFVCTElDQVRJT046CisJ CQlyZXR1cm4gIlBVQkxJQ0FUSU9OIjsKIAkJY2FzZSBPQkpFQ1RfUk9MRToKIAkJCXJldHVybiAi Uk9MRSI7CiAJCWNhc2UgT0JKRUNUX1JPVVRJTkU6CkBAIC0yMjY1LDYgKzIyNzAsOCBAQCBzdHJp bmdpZnlfb2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUsIGJvb2wgaXNncmFudCkKIAkJCXJldHVy biAiU0VRVUVOQ0UiOwogCQljYXNlIE9CSkVDVF9TVEFUSVNUSUNfRVhUOgogCQkJcmV0dXJuICJT VEFUSVNUSUNTIjsKKwkJY2FzZSBPQkpFQ1RfU1VCU0NSSVBUSU9OOgorCQkJcmV0dXJuICJTVUJT Q1JJUFRJT04iOwogCQljYXNlIE9CSkVDVF9UQUJMRToKIAkJCXJldHVybiAiVEFCTEUiOwogCQlj YXNlIE9CSkVDVF9UQUJMRVNQQUNFOgpAQCAtMjI5MywxMCArMjMwMCw4IEBAIHN0cmluZ2lmeV9v Ymp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSwgYm9vbCBpc2dyYW50KQogCQljYXNlIE9CSkVDVF9E RUZBQ0w6CiAJCWNhc2UgT0JKRUNUX0RPTUNPTlNUUkFJTlQ6CiAJCWNhc2UgT0JKRUNUX1BBUkFN RVRFUl9BQ0w6Ci0JCWNhc2UgT0JKRUNUX1BVQkxJQ0FUSU9OOgogCQljYXNlIE9CSkVDVF9QVUJM SUNBVElPTl9OQU1FU1BBQ0U6CiAJCWNhc2UgT0JKRUNUX1BVQkxJQ0FUSU9OX1JFTDoKLQkJY2Fz ZSBPQkpFQ1RfU1VCU0NSSVBUSU9OOgogCQljYXNlIE9CSkVDVF9UQUJDT05TVFJBSU5UOgogCQlj YXNlIE9CSkVDVF9UUkFOU0ZPUk06CiAJCQllbG9nKEVSUk9SLCAidW5zdXBwb3J0ZWQgb2JqZWN0 IHR5cGUgJWQiLCBvYmp0eXBlKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L2V2dGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5jCmluZGV4IDFm NWU3ZWI0YzYuLmYyYTlmNWRjYzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hl L2V2dGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwpAQCAt MTY3LDYgKzE2Nyw4IEBAIEJ1aWxkRXZlbnRUcmlnZ2VyQ2FjaGUodm9pZCkKIAkJCWV2ZW50ID0g RVZUX1NRTERyb3A7CiAJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX3Jld3JpdGUi KSA9PSAwKQogCQkJZXZlbnQgPSBFVlRfVGFibGVSZXdyaXRlOworCQllbHNlIGlmIChzdHJjbXAo ZXZ0ZXZlbnQsICJ0YWJsZV9pbml0X3dyaXRlIikgPT0gMCkKKwkJCWV2ZW50ID0gRVZUX1RhYmxl SW5pdFdyaXRlOwogCQllbHNlCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNh Y2hlLmMKaW5kZXggMTNmNzk4NzM3My4uY2Y3NmQzODdkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9y ZWxjYWNoZS5jCkBAIC01NjkwLDYgKzU2OTAsOCBAQCBSZWxhdGlvbkJ1aWxkUHVibGljYXRpb25E ZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2MpCiAJCXB1YmRl c2MtPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1YmZvcm0tPnB1YnVwZGF0ZTsKIAkJcHViZGVz Yy0+cHViYWN0aW9ucy5wdWJkZWxldGUgfD0gcHViZm9ybS0+cHViZGVsZXRlOwogCQlwdWJkZXNj LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlIHw9IHB1YmZvcm0tPnB1YnRydW5jYXRlOworCQlwdWJk ZXNjLT5wdWJhY3Rpb25zLnB1YmRkbF9hbGwgfD0gcHViZm9ybS0+cHViZGRsX2FsbDsKKwkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJkZGxfdGFibGUgfD0gcHViZm9ybS0+cHViZGRsX3RhYmxlOwog CiAJCS8qCiAJCSAqIENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZpbHRl ciBleHByZXNzaW9uIGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVt cC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA0MjE3OTA4Zjg0Li43Y2E4Nzhi NTIyIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19kdW1wLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2xhcmdlb2JqZWN0X2QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2xhcmdlb2JqZWN0X21ldGFk YXRhX2QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2NfZC5oIgorI2luY2x1ZGUgImNhdGFs b2cvcGdfcHVibGljYXRpb24uaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlcl9kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlX2QuaCIKQEAgLTM5NjQsNiArMzk2NSw4IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZl ICpmb3V0LCBpbnQgKm51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlpbnQJ CQlpX3B1YmRlbGV0ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRsX2Fs bDsKKwlpbnQJCQlpX3B1YmRkbF90YWJsZTsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJ aSwKIAkJCQludHVwczsKQEAgLTM5NzksMjMgKzM5ODIsMjMgQEAgZ2V0UHVibGljYXRpb25zKEFy Y2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVl cnkpOwogCiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZl cnNpb24gPj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE2MDAwMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwg cC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5w dWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVi dHJ1bmNhdGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJp bnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGxf YWxsLCBwLnB1YmRkbF90YWJsZSwgcC5wdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVi bGljYXRpb24gcCIpOwogCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTEwMDAwKQog CQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCBwLnRhYmxlb2lk LCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkJICJwLnB1Ym93bmVyLCAiCi0JCQkJCQkJICJw LnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5w dWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxl cywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwg ZmFsc2UgYXMgcC5wdWJkZGxfYWxsLCBmYWxzZSBhcyBwLnB1YmRkbF90YWJsZSwgZmFsc2UgQVMg cHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlCiAJ CWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAiU0VMRUNUIHAudGFibGVvaWQs IHAub2lkLCBwLnB1Ym5hbWUsICIKIAkJCQkJCQkgInAucHVib3duZXIsICIKLQkJCQkJCQkgInAu cHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxz ZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFs bHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgZmFsc2UgQVMg cHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsX2FsbCwgZmFsc2UgYXMgcC5wdWJkZGxfdGFi bGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBw Iik7CiAKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RV UExFU19PSyk7CkBAIC00MDExLDYgKzQwMTQsOCBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAq Zm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVz LCAicHVidXBkYXRlIik7CiAJaV9wdWJkZWxldGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRl Iik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlf cHViZGRsX2FsbCA9IFBRZm51bWJlcihyZXMsICJwdWJkZGxfYWxsIik7CisJaV9wdWJkZGxfdGFi bGUgPSBQUWZudW1iZXIocmVzLCAicHViZGRsX3RhYmxlIik7CiAJaV9wdWJ2aWFyb290ID0gUFFm bnVtYmVyKHJlcywgInB1YnZpYXJvb3QiKTsKIAogCXB1YmluZm8gPSBwZ19tYWxsb2MobnR1cHMg KiBzaXplb2YoUHVibGljYXRpb25JbmZvKSk7CkBAIC00MDM0LDYgKzQwMzksMTAgQEAgZ2V0UHVi bGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNt cChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZWxldGUpLCAidCIpID09IDApOwogCQlwdWJpbmZv W2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1 bmNhdGUpLCAidCIpID09IDApOworCQlwdWJpbmZvW2ldLnB1YmRkbF9hbGwgPQorCQkJKHN0cmNt cChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJkZGxfYWxsKSwgInQiKSA9PSAwKTsKKwkJcHViaW5m b1tpXS5wdWJkZGxfdGFibGUgPQorCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJk ZGxfdGFibGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnZpYXJvb3QgPQogCQkJKHN0 cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJ2aWFyb290KSwgInQiKSA9PSAwKTsKIApAQCAt NDExMyw3ICs0MTIyLDI0IEBAIGR1bXBQdWJsaWNhdGlvbihBcmNoaXZlICpmb3V0LCBjb25zdCBQ dWJsaWNhdGlvbkluZm8gKnB1YmluZm8pCiAJCWZpcnN0ID0gZmFsc2U7CiAJfQogCi0JYXBwZW5k UFFFeHBCdWZmZXJDaGFyKHF1ZXJ5LCAnXCcnKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVy eSwgIiciKTsKKworCWlmIChwdWJpbmZvLT5wdWJkZGxfYWxsIHx8IHB1YmluZm8tPnB1YmRkbF90 YWJsZSkKKwl7CisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBkZGwgPSAnIik7CisJ CWlmIChwdWJpbmZvLT5wdWJkZGxfYWxsKQorCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnks ICJhbGwiKTsKKworCQlpZiAocHViaW5mby0+cHViZGRsX3RhYmxlKQorCQl7CisJCQlpZiAocHVi aW5mby0+cHViZGRsX2FsbCkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgIik7 CisKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAidGFibGUiKTsKKwkJfQorCisJCWFw cGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiJyIpOworCX0KIAogCWlmIChwdWJpbmZvLT5wdWJ2 aWFyb290KQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgcHVibGlzaF92aWFfcGFy dGl0aW9uX3Jvb3QgPSB0cnVlIik7CkBAIC03Nzk1LDYgKzc4MjEsNTAgQEAgZ2V0VHJpZ2dlcnMo QXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAlkZXN0 cm95UFFFeHBCdWZmZXIodGJsb2lkcyk7CiB9CiAKKy8qCisgKiBnZXRQdWJsaWNhdGlvbkV2ZW50 VHJpZ2dlcnMKKyAqCSAgZ2V0IHRoZSBwdWJsaWNhdGlvbiBldmVudCB0cmlnZ2VycyB0aGF0IHNo b3VsZCBiZSBza2lwcGVkCisgKi8KK3N0YXRpYyB2b2lkCitnZXRQdWJsaWNhdGlvbkV2ZW50VHJp Z2dlcnMoQXJjaGl2ZSAqZm91dCwgU2ltcGxlU3RyaW5nTGlzdCAqc2tpcFRyaWdnZXJzKQorewor CVBRRXhwQnVmZmVyIHF1ZXJ5OworCVBHcmVzdWx0ICAgKnJlczsKKwlpbnQJCQlpOworCWludAkJ CW50dXBzOworCisJcXVlcnkgPSBjcmVhdGVQUUV4cEJ1ZmZlcigpOworCisJYXBwZW5kUFFFeHBC dWZmZXJTdHIocXVlcnksCisJCQkJCQkgIlNFTEVDVCBvaWQgRlJPTSBwZ19wdWJsaWNhdGlvbiAi CisJCQkJCQkgIldIRVJFIHB1YmRkbF9hbGwgT1IgcHViZGRsX3RhYmxlIik7CisKKwlyZXMgPSBF eGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CisJbnR1 cHMgPSBQUW50dXBsZXMocmVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBudHVwczsgaSsrKQorCXsK KwkJY2hhciAqdHJpZ25hbWU7CisJCU9pZCBwdWJpZCA9IGF0b29pZChQUWdldHZhbHVlKHJlcywg MCwgMCkpOworCisJCXRyaWduYW1lID0gcHNwcmludGYoUFVCX0VWRU5UX1RSSUdfUFJFRklYLCBQ VUJfVFJJR19FVkVOVDEsIHB1YmlkKTsKKwkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVuZChza2lw VHJpZ2dlcnMsIHRyaWduYW1lKTsKKworCQl0cmlnbmFtZSA9IHBzcHJpbnRmKFBVQl9FVkVOVF9U UklHX1BSRUZJWCwgUFVCX1RSSUdfRVZFTlQyLCBwdWJpZCk7CisJCXNpbXBsZV9zdHJpbmdfbGlz dF9hcHBlbmQoc2tpcFRyaWdnZXJzLCB0cmlnbmFtZSk7CisKKwkJdHJpZ25hbWUgPSBwc3ByaW50 ZihQVUJfRVZFTlRfVFJJR19QUkVGSVgsIFBVQl9UUklHX0VWRU5UMywgcHViaWQpOworCQlzaW1w bGVfc3RyaW5nX2xpc3RfYXBwZW5kKHNraXBUcmlnZ2VycywgdHJpZ25hbWUpOworCisJCXRyaWdu YW1lID0gcHNwcmludGYoUFVCX0VWRU5UX1RSSUdfUFJFRklYLCBQVUJfVFJJR19FVkVOVDQsIHB1 YmlkKTsKKwkJc2ltcGxlX3N0cmluZ19saXN0X2FwcGVuZChza2lwVHJpZ2dlcnMsIHRyaWduYW1l KTsKKwl9CisKKwlQUWNsZWFyKHJlcyk7CisKKwlkZXN0cm95UFFFeHBCdWZmZXIocXVlcnkpOwor fQorCiAvKgogICogZ2V0RXZlbnRUcmlnZ2VycwogICoJICBnZXQgaW5mb3JtYXRpb24gYWJvdXQg ZXZlbnQgdHJpZ2dlcnMKQEAgLTc4MTUsNiArNzg4NSw3IEBAIGdldEV2ZW50VHJpZ2dlcnMoQXJj aGl2ZSAqZm91dCwgaW50ICpudW1FdmVudFRyaWdnZXJzKQogCQkJCWlfZXZ0Zm5hbWUsCiAJCQkJ aV9ldnRlbmFibGVkOwogCWludAkJCW50dXBzOworCVNpbXBsZVN0cmluZ0xpc3Qgc2tpcFRyaWdn ZXJzID0ge05VTEwsIE5VTEx9OwogCiAJLyogQmVmb3JlIDkuMywgdGhlcmUgYXJlIG5vIGV2ZW50 IHRyaWdnZXJzICovCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPCA5MDMwMCkKQEAgLTc4MjMs NiArNzg5NCw4IEBAIGdldEV2ZW50VHJpZ2dlcnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1FdmVu dFRyaWdnZXJzKQogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlnZXRQdWJsaWNhdGlvbkV2ZW50VHJp Z2dlcnMoZm91dCwgJnNraXBUcmlnZ2Vycyk7CisKIAlxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVy KCk7CiAKIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKQEAgLTc4NjcsOSArNzk0MCwxNCBA QCBnZXRFdmVudFRyaWdnZXJzKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtRXZlbnRUcmlnZ2VycykK IAkJZXZ0aW5mb1tpXS5ldnRlbmFibGVkID0gKihQUWdldHZhbHVlKHJlcywgaSwgaV9ldnRlbmFi bGVkKSk7CiAKIAkJLyogRGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkdW1wIGl0ICovCi0JCXNl bGVjdER1bXBhYmxlT2JqZWN0KCYoZXZ0aW5mb1tpXS5kb2JqKSwgZm91dCk7CisJCWlmIChzaW1w bGVfc3RyaW5nX2xpc3RfbWVtYmVyKCZza2lwVHJpZ2dlcnMsIGV2dGluZm9baV0uZXZ0bmFtZSkp CisJCQlldnRpbmZvW2ldLmRvYmouZHVtcD0gRFVNUF9DT01QT05FTlRfTk9ORTsKKwkJZWxzZQor CQkJc2VsZWN0RHVtcGFibGVPYmplY3QoJihldnRpbmZvW2ldLmRvYmopLCBmb3V0KTsKIAl9CiAK KwlzaW1wbGVfc3RyaW5nX2xpc3RfZGVzdHJveSgmc2tpcFRyaWdnZXJzKTsKKwogCVBRY2xlYXIo cmVzKTsKIAogCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCBjZGNh MGI5OTNkLi4zZWEzMGNlNmZiIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5o CisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYxOCw2ICs2MTgsOCBAQCB0eXBl ZGVmIHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1 YmRlbGV0ZTsKIAlib29sCQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGxfYWxsOworCWJvb2wJ CXB1YmRkbF90YWJsZTsKIAlib29sCQlwdWJ2aWFyb290OwogfSBQdWJsaWNhdGlvbkluZm87CiAK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsIGIvc3JjL2Jpbi9w Z19kdW1wL3QvMDAyX3BnX2R1bXAucGwKaW5kZXggMTg3ZTRiOGQwNy4uYzgzNzVjYmVjNCAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysrIGIvc3JjL2Jpbi9w Z19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTI1NjcsNyArMjU2Nyw3IEBAIG15ICV0ZXN0cyA9 ICgKIAkJY3JlYXRlX29yZGVyID0+IDUwLAogCQljcmVhdGVfc3FsICAgPT4gJ0NSRUFURSBQVUJM SUNBVElPTiBwdWIyCiAJCQkJCQkgRk9SIEFMTCBUQUJMRVMKLQkJCQkJCSBXSVRIIChwdWJsaXNo ID0gXCdcJyk7JywKKwkJCQkJCSBXSVRIIChwdWJsaXNoID0gXCdcJywgZGRsID0gXCdcJyk7JywK IAkJcmVnZXhwID0+IHFyL14KIAkJCVxRQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjIgRk9SIEFMTCBU QUJMRVMgV0lUSCAocHVibGlzaCA9ICcnKTtcRQogCQkJL3htLApkaWZmIC0tZ2l0IGEvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCA5OWUyOGY2 MDdlLi40OGJmMzdhOTRmIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysg Yi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE4Myw3ICs2MTgzLDcgQEAgbGlzdFB1Ymxp Y2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBidWY7CiAJUEdy ZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7Ci0Jc3RhdGlj IGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25zdCBib29sIHRy YW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24g PCAxMDAwMDApCiAJewpAQCAtNjIwMCwxMyArNjIwMCwyMyBAQCBsaXN0UHVibGljYXRpb25zKGNv bnN0IGNoYXIgKnBhdHRlcm4pCiAJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJICAiU0VM RUNUIHB1Ym5hbWUgQVMgXCIlc1wiLFxuIgogCQkJCQkgICIgIHBnX2NhdGFsb2cucGdfZ2V0X3Vz ZXJieWlkKHB1Ym93bmVyKSBBUyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHViYWxsdGFibGVzIEFT IFwiJXNcIixcbiIKLQkJCQkJICAiICBwdWJpbnNlcnQgQVMgXCIlc1wiLFxuIgotCQkJCQkgICIg IHB1YnVwZGF0ZSBBUyBcIiVzXCIsXG4iCi0JCQkJCSAgIiAgcHViZGVsZXRlIEFTIFwiJXNcIiIs CisJCQkJCSAgIiAgcHViYWxsdGFibGVzIEFTIFwiJXNcIiIsCiAJCQkJCSAgZ2V0dGV4dF9ub29w KCJOYW1lIiksCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJPd25lciIpLAotCQkJCQkgIGdldHRleHRf bm9vcCgiQWxsIHRhYmxlcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQWxsIHRhYmxlcyIpKTsK KwlpZiAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApCisJeworCQlhcHBlbmRQUUV4cEJ1ZmZlcigm YnVmLAorCQkJCQkJICAiLFxuICBwdWJkZGxfYWxsIEFTIFwiJXNcIiIsCisJCQkJCQkgIGdldHRl eHRfbm9vcCgiQWxsIERETHMiKSk7CisJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCQkg ICIsXG4gIHB1YmRkbF90YWJsZSBBUyBcIiVzXCIiLAorCQkJCQkJICBnZXR0ZXh0X25vb3AoIlRh YmxlIERETHMiKSk7CisJfQorCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIixcbiAg cHViaW5zZXJ0IEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBwdWJ1cGRhdGUgQVMgXCIlc1wiLFxu IgorCQkJCQkgICIgIHB1YmRlbGV0ZSBBUyBcIiVzXCIiLAogCQkJCQkgIGdldHRleHRfbm9vcCgi SW5zZXJ0cyIpLAogCQkJCQkgIGdldHRleHRfbm9vcCgiVXBkYXRlcyIpLAogCQkJCQkgIGdldHRl eHRfbm9vcCgiRGVsZXRlcyIpKTsKQEAgLTYyMTgsNyArNjIyOCw2IEBAIGxpc3RQdWJsaWNhdGlv bnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJ CSAgIixcbiAgcHVidmlhcm9vdCBBUyBcIiVzXCIiLAogCQkJCQkJICBnZXR0ZXh0X25vb3AoIlZp YSByb290IikpOwotCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAiXG5GUk9N IHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwogCkBAIC02MzA4LDYgKzYzMTcsNyBAQCBk ZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBHcmVzdWx0ICAgKnJl czsKIAlib29sCQloYXNfcHVidHJ1bmNhdGU7CiAJYm9vbAkJaGFzX3B1YnZpYXJvb3Q7CisJYm9v bAkJaGFzX3B1YmRkbDsKIAogCVBRRXhwQnVmZmVyRGF0YSB0aXRsZTsKIAlwcmludFRhYmxlQ29u dGVudCBjb250OwpAQCAtNjMyNCwxMyArNjMzNCwxOSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhj b25zdCBjaGFyICpwYXR0ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBzZXQuc3ZlcnNpb24g Pj0gMTEwMDAwKTsKIAloYXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9uID49IDEzMDAwMCk7 CisJaGFzX3B1YmRkbCA9ICAocHNldC5zdmVyc2lvbiA+PSAxNjAwMDApOwogCiAJaW5pdFBRRXhw QnVmZmVyKCZidWYpOwogCiAJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJICAiU0VMRUNU IG9pZCwgcHVibmFtZSxcbiIKIAkJCQkJICAiICBwZ19jYXRhbG9nLnBnX2dldF91c2VyYnlpZChw dWJvd25lcikgQVMgb3duZXIsXG4iCi0JCQkJCSAgIiAgcHViYWxsdGFibGVzLCBwdWJpbnNlcnQs IHB1YnVwZGF0ZSwgcHViZGVsZXRlIik7CisJCQkJCSAgIiAgcHViYWxsdGFibGVzIik7CisJaWYg KGhhc19wdWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJICIsIHB1 YmRkbF9hbGwsIHB1YmRkbF90YWJsZSIpOworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJ CQkJCQkgIiwgIHB1Ymluc2VydCwgcHVidXBkYXRlLCBwdWJkZWxldGUiKTsKIAlpZiAoaGFzX3B1 YnRydW5jYXRlKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ0 cnVuY2F0ZSIpOwpAQCAtNjM4OCw2ICs2NDA0LDggQEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29u c3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJ CW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMgKz0gMjsKIAogCQlpbml0UFFF eHBCdWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBfKCJQdWJsaWNh dGlvbiAlcyIpLCBwdWJuYW1lKTsKQEAgLTYzOTUsNiArNjQxMywxMSBAQCBkZXNjcmliZVB1Ymxp Y2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNv bnQsIGdldHRleHRfbm9vcCgiT3duZXIiKSwgdHJ1ZSwgYWxpZ24pOwogCQlwcmludFRhYmxlQWRk SGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIkFsbCB0YWJsZXMiKSwgdHJ1ZSwgYWxpZ24pOwor CQlpZiAoaGFzX3B1YmRkbCkKKwkJeworCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0 dGV4dF9ub29wKCJBbGwgRERMcyIpLCB0cnVlLCBhbGlnbik7CisJCQlwcmludFRhYmxlQWRkSGVh ZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRhYmxlIERETHMiKSwgdHJ1ZSwgYWxpZ24pOworCQl9 CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiSW5zZXJ0cyIpLCB0 cnVlLCBhbGlnbik7CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgi VXBkYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdl dHRleHRfbm9vcCgiRGVsZXRlcyIpLCB0cnVlLCBhbGlnbik7CkBAIC02NDEyLDYgKzY0MzUsMTEg QEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50VGFi bGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgNyksIGZhbHNlLCBmYWxzZSk7CiAJ CWlmIChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZh bHVlKHJlcywgaSwgOCksIGZhbHNlLCBmYWxzZSk7CisJCWlmIChoYXNfcHViZGRsKQorCQl7CisJ CQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDkpLCBmYWxzZSwg ZmFsc2UpOworCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAx MCksIGZhbHNlLCBmYWxzZSk7CisJCX0KIAogCQlpZiAoIXB1YmFsbHRhYmxlcykKIAkJewpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2Nh dGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggNWNkMjYzZTgzNS4uYjYyNzZkMTg0YSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Byb2MuZGF0CkBAIC0xMTk1Myw1ICsxMTk1MywxNyBAQAogeyBvaWQgPT4gJzQ2NDMn LCBkZXNjciA9PiAnZXhwYW5kIEpTT04gZm9ybWF0IERETCB0byBhIHBsYWluIHRleHQgRERMIGNv bW1hbmQnLAogICBwcm9uYW1lID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3Jl dHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRs X2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0sCit7IG9pZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0 cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIGVuZCcsCisgIHByb25hbWUgPT4gJ3B1Ymxp Y2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJp Z2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFy c2VfZGRsX2NvbW1hbmRfZW5kJyB9LAoreyBvaWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dl ciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSBzdGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0 aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmln Z2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJz ZV9kZGxfY29tbWFuZF9zdGFydCcgfSwKK3sgb2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdn ZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4g J3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50 X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9k ZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRlc2NyID0+ICd0cmln Z2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBwcm9uYW1lID0+ICdw dWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0eXBlID0+ICdldmVu dF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAncHVibGljYXRpb25f ZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmgKaW5kZXggNzE1ZjJhMmUzNi4uMWNmMDJhNDFkYSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHVibGljYXRpb24uaApAQCAtMjEsNiArMjEsMTUgQEAKICNpbmNsdWRlICJjYXRhbG9nL3Bn X3B1YmxpY2F0aW9uX2QuaCIKICNpbmNsdWRlICJub2Rlcy9wZ19saXN0LmgiCiAKKy8qIFB1Ymxp Y2F0aW9uIHRyaWdnZXIgZXZlbnRzICovCisjZGVmaW5lIFBVQl9UUklHX0VWRU5UMSAiZGRsX2Nv bW1hbmRfZW5kIgorI2RlZmluZSBQVUJfVFJJR19FVkVOVDIgImRkbF9jb21tYW5kX3N0YXJ0Igor I2RlZmluZSBQVUJfVFJJR19FVkVOVDMgInRhYmxlX3Jld3JpdGUiCisjZGVmaW5lIFBVQl9UUklH X0VWRU5UNCAidGFibGVfaW5pdF93cml0ZSIKKworLyogUHVibGljYXRpb24gZXZlbnQgdHJpZ2dl ciBwcmVmaXggKi8KKyNkZWZpbmUgUFVCX0VWRU5UX1RSSUdfUFJFRklYICJwZ19kZXBhcnNlX3Ry aWdfJXNfJXUiCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCQlwZ19wdWJsaWNhdGlvbiBkZWZp bml0aW9uLiAgY3BwIHR1cm5zIHRoaXMgaW50bwogICoJCXR5cGVkZWYgc3RydWN0IEZvcm1EYXRh X3BnX3B1YmxpY2F0aW9uCkBAIC01NCw2ICs2MywxMiBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9u LDYxMDQsUHVibGljYXRpb25SZWxhdGlvbklkKQogCiAJLyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hh bmdlcyBhcmUgcHVibGlzaGVkIHVzaW5nIHJvb3Qgc2NoZW1hICovCiAJYm9vbAkJcHVidmlhcm9v dDsKKworCS8qIHRydWUgaWYgYWxsIHN1cHBvcnRlZCBkZGxzIGFyZSBwdWJsaXNoZWQgKi8KKwli b29sCQlwdWJkZGxfYWxsOworCisJLyogdHJ1ZSBpZiB0YWJsZSBkZGxzIGFyZSBwdWJsaXNoZWQg Ki8KKwlib29sCQlwdWJkZGxfdGFibGU7CiB9IEZvcm1EYXRhX3BnX3B1YmxpY2F0aW9uOwogCiAv KiAtLS0tLS0tLS0tLS0tLS0tCkBAIC03Miw2ICs4Nyw4IEBAIHR5cGVkZWYgc3RydWN0IFB1Ymxp Y2F0aW9uQWN0aW9ucwogCWJvb2wJCXB1YnVwZGF0ZTsKIAlib29sCQlwdWJkZWxldGU7CiAJYm9v bAkJcHVidHJ1bmNhdGU7CisJYm9vbAkJcHViZGRsX2FsbDsKKwlib29sCQlwdWJkZGxfdGFibGU7 CiB9IFB1YmxpY2F0aW9uQWN0aW9uczsKIAogdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNj CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMv aW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5kZXggYTk3ZThiN2RmOC4uNWY2ZGQy MjlkZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCisr KyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaApAQCAtOTQsNiArOTQsMTAg QEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRERMQ29tbWFuZEVuZChOb2RlICpwYXJzZXRyZWUp OwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyU1FMRHJvcChOb2RlICpwYXJzZXRyZWUpOwogZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5vZGUgKnBhcnNldHJlZSwgT2lkIHRh YmxlT2lkLCBpbnQgcmVhc29uKTsKIAorZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0 V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFi bGVJbml0V3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoT2JqZWN0QWRkcmVzcyBhZGRy ZXNzKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVnaW5Db21wbGV0ZVF1ZXJ5KHZvaWQp OwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxldGVRdWVyeSh2b2lkKTsKIGV4dGVy biBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCk7CkBAIC0xMTAsNyArMTE0LDEy IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFk ZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChO b2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlk KE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJs ZVN1YmNtZChOb2RlICpzdWJjbWQsCi0JCQkJCQkJCQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3Mp OworCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCBy ZXdyaXRlKTsKKworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQoQWx0ZXJU YWJsZUNtZCAqc3ViY21kLCBSZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2Vy QWx0ZXJUeXBlRW5kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLAorCQkJCQkJ CQkJIGJvb2wgcmV3cml0ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5k KHZvaWQpOwogCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0R3JhbnQoSW50ZXJuYWxH cmFudCAqaXN0bXQpOwpAQCAtMTIwLDYgKzEyOSw5IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dl ckNvbGxlY3RBbHRlck9wRmFtKEFsdGVyT3BGYW1pbHlTdG10ICpzdG10LAogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyQ29sbGVjdENyZWF0ZU9wQ2xhc3MoQ3JlYXRlT3BDbGFzc1N0bXQgKnN0bXQs CiAJCQkJCQkJCQkJCSBPaWQgb3Bjb2lkLCBMaXN0ICpvcGVyYXRvcnMsCiAJCQkJCQkJCQkJCSBM aXN0ICpwcm9jZWR1cmVzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxlY3RDcmVhdGVQ dWJsaWNhdGlvbihDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQsCisJCQkJCQkJCQkJCQkgT2lk IHB1YmlkLCBMaXN0ICpyZWxhdGlvbnMsCisJCQkJCQkJCQkJCQkgTGlzdCAqc2NoZW1hcyk7CiBl eHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUU0NvbmZpZyhBbHRlclRTQ29uZmln dXJhdGlvblN0bXQgKnN0bXQsCiAJCQkJCQkJCQkJCSBPaWQgY2ZnSWQsIE9pZCAqZGljdElkcywg aW50IG5kaWN0cyk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJEZWZQcml2 cyhBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdCAqc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L2xvZ2ljYWxwcm90by5oCmluZGV4IDBlYTJkZjUwODguLjVmYjNiYWFlYjEgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC02Niw2ICs2Niw3IEBAIHR5cGVkZWYgZW51 bSBMb2dpY2FsUmVwTXNnVHlwZQogCUxPR0lDQUxfUkVQX01TR19SRUxBVElPTiA9ICdSJywKIAlM T0dJQ0FMX1JFUF9NU0dfVFlQRSA9ICdZJywKIAlMT0dJQ0FMX1JFUF9NU0dfTUVTU0FHRSA9ICdN JywKKwlMT0dJQ0FMX1JFUF9NU0dfRERMID0gJ0wnLAogCUxPR0lDQUxfUkVQX01TR19CRUdJTl9Q UkVQQVJFID0gJ2InLAogCUxPR0lDQUxfUkVQX01TR19QUkVQQVJFID0gJ1AnLAogCUxPR0lDQUxf UkVQX01TR19DT01NSVRfUFJFUEFSRUQgPSAnSycsCkBAIC0yNDYsNiArMjQ3LDkgQEAgZXh0ZXJu IExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJ ICBib29sICpjYXNjYWRlLCBib29sICpyZXN0YXJ0X3NlcXMpOwogZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpw cmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworZXh0ZXJuIHZvaWQgbG9naWNh bHJlcF93cml0ZV9kZGwoU3RyaW5nSW5mbyBvdXQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJ CWNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRl cm4gY2hhciAqbG9naWNhbHJlcF9yZWFkX2RkbChTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICps c24sIGNvbnN0IGNoYXIgKipwcmVmaXgsIFNpemUgKnN6KTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxy ZXBfd3JpdGVfcmVsKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJ IFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVs YXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKaW5kZXggNWVkNWU2YTdiYy4uNDRiYWY0MDcyMCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCisrKyBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaApAQCAtOSw3ICs5LDYgQEAKICNp Zm5kZWYgT1VUUFVUX1BMVUdJTl9ICiAjZGVmaW5lIE9VVFBVVF9QTFVHSU5fSAogCi0jaW5jbHVk ZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3Jk ZXJidWZmZXIuaCIKIAogc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQ7CkBAIC0yMTQsNiAr MjEzLDE5IEBAIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0IpIChz dHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4CiAJCQkJCQkJCQkJCSAgU2l6ZSBtZXNz YWdlX3NpemUsCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7CiAKKy8qCisgKiBD YWxsYmFjayBmb3Igc3RyZWFtaW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzIGZyb20g aW4tcHJvZ3Jlc3MKKyAqIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRlZiB2b2lkICgqTG9naWNh bERlY29kZVN0cmVhbURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCQkJ IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4 LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBhcnNlZENvbW1hbmRU eXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCQkJCQkJ CQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5n IHRydW5jYXRlcyBmcm9tIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KICAqLwpAQCAtMjUzLDYg KzI2NSw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxE ZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJl YW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdl Q0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQiBz dHJlYW1fZGRsX2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1UcnVuY2F0ZUNCIHN0cmVhbV90cnVu Y2F0ZV9jYjsKIH0gT3V0cHV0UGx1Z2luQ2FsbGJhY2tzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdv dXRwdXQuaAppbmRleCBiNGE4MDE1NDAzLi5hMmNmOTliNGU0IDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Bnb3V0cHV0LmgKQEAgLTI1LDYgKzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUEdPdXRwdXREYXRh CiAJdWludDMyCQlwcm90b2NvbF92ZXJzaW9uOwogCUxpc3QJICAgKnB1YmxpY2F0aW9uX25hbWVz OwogCUxpc3QJICAgKnB1YmxpY2F0aW9uczsKKwlMaXN0CSAgICpkZWxldGVkX3JlbGlkczsKIAli b29sCQliaW5hcnk7CiAJY2hhcgkJc3RyZWFtaW5nOwogCWJvb2wJCW1lc3NhZ2VzOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oCmluZGV4IGU5MmI4MTZlMjAuLmIwZmFkZTcw Y2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAor KysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKQEAgLTU0MSw2ICs1 NDEsMTcgQEAgdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQikgKAog CQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwKIAkJCQkJCQkJCQkJICBj b25zdCBjaGFyICptZXNzYWdlKTsKIAorLyogc3RyZWFtIERETCBtZXNzYWdlIGNhbGxiYWNrIHNp Z25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VD QikgKAorCQkJCQkJCQkJCQkJIFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCQkJIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVsaWQs CisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCQkJ IFNpemUgc3osCisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qIHN0cmVh bSB0cnVuY2F0ZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KIHR5cGVkZWYgdm9pZCAoKlJlb3JkZXJC dWZmZXJTdHJlYW1UcnVuY2F0ZUNCKSAoCiAJCQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXIgKnJi LApAQCAtNjE3LDYgKzYyOCw3IEBAIHN0cnVjdCBSZW9yZGVyQnVmZmVyCiAJUmVvcmRlckJ1ZmZl clN0cmVhbUNvbW1pdENCIHN0cmVhbV9jb21taXQ7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbUNoYW5n ZUNCIHN0cmVhbV9jaGFuZ2U7CiAJUmVvcmRlckJ1ZmZlclN0cmVhbU1lc3NhZ2VDQiBzdHJlYW1f bWVzc2FnZTsKKwlSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCIHN0cmVhbV9kZGw7CiAJ UmVvcmRlckJ1ZmZlclN0cmVhbVRydW5jYXRlQ0Igc3RyZWFtX3RydW5jYXRlOwogCiAJLyoKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnLmggYi9zcmMvaW5jbHVkZS90Y29wL2Nt ZHRhZy5oCmluZGV4IDFlNzUxNGRjZmYuLjA3NmMyN2U2NDIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3Rjb3AvY21kdGFnLmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9jbWR0YWcuaApAQCAtMTYs NyArMTYsNyBAQAogLyogYnVmZmVyIHNpemUgcmVxdWlyZWQgZm9yIGNvbW1hbmQgY29tcGxldGlv biB0YWdzICovCiAjZGVmaW5lIENPTVBMRVRJT05fVEFHX0JVRlNJWkUJNjQKIAotI2RlZmluZSBQ R19DTURUQUcodGFnLCBuYW1lLCBldnRyZ29rLCByd3Jvaywgcm93Y250KSBcCisjZGVmaW5lIFBH X0NNRFRBRyh0YWcsIG5hbWUsIGV2dHJnb2ssIHJ3cm9rLCByb3djbnQsIGRkbHJlcGxvaykgXAog CXRhZywKIAogdHlwZWRlZiBlbnVtIENvbW1hbmRUYWcKQEAgLTUzLDkgKzUzLDExIEBAIENvcHlR dWVyeUNvbXBsZXRpb24oUXVlcnlDb21wbGV0aW9uICpkc3QsIGNvbnN0IFF1ZXJ5Q29tcGxldGlv biAqc3JjKQogZXh0ZXJuIHZvaWQgSW5pdGlhbGl6ZVF1ZXJ5Q29tcGxldGlvbihRdWVyeUNvbXBs ZXRpb24gKnFjKTsKIGV4dGVybiBjb25zdCBjaGFyICpHZXRDb21tYW5kVGFnTmFtZShDb21tYW5k VGFnIGNvbW1hbmRUYWcpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKkdldENvbW1hbmRUYWdOYW1lQW5k TGVuKENvbW1hbmRUYWcgY29tbWFuZFRhZywgU2l6ZSAqbGVuKTsKK2V4dGVybiBDb21tYW5kVGFn ICpHZXRDb21tYW5kVGFnc0ZvckRETFJlcGwoaW50ICpuY29tbWFuZHMpOwogZXh0ZXJuIGJvb2wg Y29tbWFuZF90YWdfZGlzcGxheV9yb3djb3VudChDb21tYW5kVGFnIGNvbW1hbmRUYWcpOwogZXh0 ZXJuIGJvb2wgY29tbWFuZF90YWdfZXZlbnRfdHJpZ2dlcl9vayhDb21tYW5kVGFnIGNvbW1hbmRU YWcpOwogZXh0ZXJuIGJvb2wgY29tbWFuZF90YWdfdGFibGVfcmV3cml0ZV9vayhDb21tYW5kVGFn IGNvbW1hbmRUYWcpOworZXh0ZXJuIGJvb2wgY29tbWFuZF90YWdfZGRsX3JlcGxpY2F0aW9uX29r KENvbW1hbmRUYWcgY29tbWFuZFRhZyk7CiBleHRlcm4gQ29tbWFuZFRhZyBHZXRDb21tYW5kVGFn RW51bShjb25zdCBjaGFyICpjb21tYW5kbmFtZSk7CiBleHRlcm4gU2l6ZSBCdWlsZFF1ZXJ5Q29t cGxldGlvblN0cmluZyhjaGFyICpidWZmLCBjb25zdCBRdWVyeUNvbXBsZXRpb24gKnFjLAogCQkJ CQkJCQkJICAgYm9vbCBuYW1lb25seSk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2Nt ZHRhZ2xpc3QuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCmluZGV4IGU3MzhhYzFj MDkuLjE4YjY5ZTRiYjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5o CisrKyBiL3NyYy9pbmNsdWRlL3Rjb3AvY21kdGFnbGlzdC5oCkBAIC0yMywxOTYgKzIzLDE5NiBA QAogICogdGV4dHVhbCBuYW1lLCBzbyB0aGF0IHdlIGNhbiBic2VhcmNoIG9uIGl0OyBzZWUgR2V0 Q29tbWFuZFRhZ0VudW0oKS4KICAqLwogCi0vKiBzeW1ib2wgbmFtZSwgdGV4dHVhbCBuYW1lLCBl dmVudF90cmlnZ2VyX29rLCB0YWJsZV9yZXdyaXRlX29rLCByb3djb3VudCAqLwotUEdfQ01EVEFH KENNRFRBR19VTktOT1dOLCAiPz8/IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfQUxURVJfQUNDRVNTX01FVEhPRCwgIkFMVEVSIEFDQ0VTUyBNRVRIT0QiLCB0cnVlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0FHR1JFR0FURSwgIkFMVEVSIEFH R1JFR0FURSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfQ0FT VCwgIkFMVEVSIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FM VEVSX0NPTExBVElPTiwgIkFMVEVSIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQUxURVJfQ09OU1RSQUlOVCwgIkFMVEVSIENPTlNUUkFJTlQiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sICJBTFRF UiBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRF Ul9EQVRBQkFTRSwgIkFMVEVSIERBVEFCQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NN RFRBRyhDTURUQUdfQUxURVJfREVGQVVMVF9QUklWSUxFR0VTLCAiQUxURVIgREVGQVVMVCBQUklW SUxFR0VTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ET01B SU4sICJBTFRFUiBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FMVEVSX0VWRU5UX1RSSUdHRVIsICJBTFRFUiBFVkVOVCBUUklHR0VSIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfRVhURU5TSU9OLCAiQUxURVIgRVhURU5T SU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdO X0RBVEFfV1JBUFBFUiwgIkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdOX1RBQkxFLCAiQUxURVIgRk9S RUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJf RlVOQ1RJT04sICJBTFRFUiBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRB RyhDTURUQUdfQUxURVJfSU5ERVgsICJBTFRFUiBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQUxURVJfTEFOR1VBR0UsICJBTFRFUiBMQU5HVUFHRSIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfTEFSR0VfT0JKRUNULCAiQUxU RVIgTEFSR0UgT0JKRUNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9NQVRFUklBTElaRURfVklFVywgIkFMVEVSIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwg dHJ1ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SLCAiQUxURVIgT1BF UkFUT1IiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJB VE9SX0NMQVNTLCAiQUxURVIgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX09QRVJBVE9SX0ZBTUlMWSwgIkFMVEVSIE9QRVJBVE9SIEZB TUlMWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUE9MSUNZ LCAiQUxURVIgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19B TFRFUl9QUk9DRURVUkUsICJBTFRFUiBQUk9DRURVUkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0FMVEVSX1BVQkxJQ0FUSU9OLCAiQUxURVIgUFVCTElDQVRJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1JPTEUsICJBTFRFUiBS T0xFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfUk9VVElO RSwgIkFMVEVSIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0FMVEVSX1JVTEUsICJBTFRFUiBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19BTFRFUl9TQ0hFTUEsICJBTFRFUiBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NFUVVFTkNFLCAiQUxURVIgU0VRVUVOQ0UiLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1NFUlZFUiwgIkFMVEVSIFNF UlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1RBVElT VElDUywgIkFMVEVSIFNUQVRJU1RJQ1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0FMVEVSX1NVQlNDUklQVElPTiwgIkFMVEVSIFNVQlNDUklQVElPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfU1lTVEVNLCAiQUxURVIgU1lTVEVN IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEUsICJB TFRFUiBUQUJMRSIsIHRydWUsIHRydWUsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9U QUJMRVNQQUNFLCAiQUxURVIgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sICJBTFRFUiBURVhU IFNFQVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19BTFRFUl9URVhUX1NFQVJDSF9ESUNUSU9OQVJZLCAiQUxURVIgVEVYVCBTRUFSQ0ggRElD VElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVY VF9TRUFSQ0hfUEFSU0VSLCAiQUxURVIgVEVYVCBTRUFSQ0ggUEFSU0VSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9URU1QTEFURSwgIkFM VEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19BTFRFUl9UUkFOU0ZPUk0sICJBTFRFUiBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0FMVEVSX1RSSUdHRVIsICJBTFRFUiBUUklHR0VSIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9UWVBFLCAiQUxURVIg VFlQRSIsIHRydWUsIHRydWUsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19BTFRFUl9VU0VSX01B UFBJTkcsICJBTFRFUiBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0FMVEVSX1ZJRVcsICJBTFRFUiBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19BTkFMWVpFLCAiQU5BTFlaRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0JFR0lOLCAiQkVHSU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19DQUxMLCAiQ0FMTCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19D TURUQUcoQ01EVEFHX0NIRUNLUE9JTlQsICJDSEVDS1BPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xPU0UsICJDTE9TRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0NMT1NFX0NVUlNPUiwgIkNMT1NFIENVUlNPUiIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NMT1NFX0NVUlNPUl9BTEwsICJDTE9TRSBD VVJTT1IgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ0xVU1RF UiwgIkNMVVNURVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DT01N RU5ULCAiQ09NTUVOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09N TUlULCAiQ09NTUlUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ09N TUlUX1BSRVBBUkVELCAiQ09NTUlUIFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBH X0NNRFRBRyhDTURUQUdfQ09QWSwgIkNPUFkiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURU QUcoQ01EVEFHX0NPUFlfRlJPTSwgIkNPUFkgRlJPTSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9BQ0NFU1NfTUVUSE9ELCAiQ1JFQVRFIEFDQ0VTUyBNRVRI T0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9BR0dSRUdB VEUsICJDUkVBVEUgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfQ0FTVCwgIkNSRUFURSBDQVNUIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfQ09MTEFUSU9OLCAiQ1JFQVRFIENPTExBVElPTiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0NPTlNUUkFJTlQsICJDUkVB VEUgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX0NPTlZFUlNJT04sICJDUkVBVEUgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RBVEFCQVNFLCAiQ1JFQVRFIERBVEFCQVNFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0RPTUFJTiwgIkNSRUFU RSBET01BSU4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9F VkVOVF9UUklHR0VSLCAiQ1JFQVRFIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVhURU5TSU9OLCAiQ1JFQVRFIEVYVEVOU0lPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0ZPUkVJR05fREFU QV9XUkFQUEVSLCAiQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9UQUJMRSwgIkNSRUFURSBGT1JF SUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf RlVOQ1RJT04sICJDUkVBVEUgRlVOQ1RJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0NSRUFURV9JTkRFWCwgIkNSRUFURSBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0xBTkdVQUdFLCAiQ1JFQVRFIExBTkdVQUdFIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTUFURVJJQUxJWkVE X1ZJRVcsICJDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9PUEVSQVRPUiwgIkNSRUFURSBPUEVSQVRPUiIsIHRydWUs IGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0NMQVNTLCAi Q1JFQVRFIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLCAiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSIsIHRy dWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BPTElDWSwgIkNSRUFU RSBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9Q Uk9DRURVUkUsICJDUkVBVEUgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfUFVCTElDQVRJT04sICJDUkVBVEUgUFVCTElDQVRJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9ST0xFLCAiQ1JFQVRFIFJP TEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUk9VVElO RSwgIkNSRUFURSBST1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19DUkVBVEVfUlVMRSwgIkNSRUFURSBSVUxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19DUkVBVEVfU0NIRU1BLCAiQ1JFQVRFIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBm YWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NFUVVFTkNFLCAiQ1JFQVRFIFNFUVVFTkNF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0VSVkVSLCAi Q1JFQVRFIFNFUlZFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1NUQVRJU1RJQ1MsICJDUkVBVEUgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1NVQlNDUklQVElPTiwgIkNSRUFURSBTVUJTQ1JJUFRJ T04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9UQUJMRSwg IkNSRUFURSBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JF QVRFX1RBQkxFX0FTLCAiQ1JFQVRFIFRBQkxFIEFTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfVEFCTEVTUEFDRSwgIkNSRUFURSBUQUJMRVNQQUNFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0NP TkZJR1VSQVRJT04sICJDUkVBVEUgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX0RJQ1RJT05B UlksICJDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1BBUlNFUiwgIkNSRUFURSBURVhU IFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NS RUFURV9URVhUX1NFQVJDSF9URU1QTEFURSwgIkNSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSQU5TRk9STSwg IkNSRUFURSBUUkFOU0ZPUk0iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFH X0NSRUFURV9UUklHR0VSLCAiQ1JFQVRFIFRSSUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX0NSRUFURV9UWVBFLCAiQ1JFQVRFIFRZUEUiLCB0cnVlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0NSRUFURV9VU0VSX01BUFBJTkcsICJDUkVBVEUgVVNF UiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19DUkVBVEVf VklFVywgIkNSRUFURSBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19ERUFMTE9DQVRFLCAiREVBTExPQ0FURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RFQUxMT0NBVEVfQUxMLCAiREVBTExPQ0FURSBBTEwiLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ERUNMQVJFX0NVUlNPUiwgIkRFQ0xBUkUgQ1VSU09S IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfREVMRVRFLCAiREVMRVRF IiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJELCAiRElTQ0FS RCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfQUxMLCAi RElTQ0FSRCBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ESVND QVJEX1BMQU5TLCAiRElTQ0FSRCBQTEFOUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RJU0NBUkRfU0VRVUVOQ0VTLCAiRElTQ0FSRCBTRVFVRU5DRVMiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ESVNDQVJEX1RFTVAsICJESVNDQVJEIFRF TVAiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19ETywgIkRPIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELCAi RFJPUCBBQ0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19EUk9QX0FHR1JFR0FURSwgIkRST1AgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX0NBU1QsICJEUk9QIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQ09MTEFUSU9OLCAiRFJPUCBDT0xMQVRJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfQ09OU1RSQUlOVCwgIkRS T1AgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJP UF9DT05WRVJTSU9OLCAiRFJPUCBDT05WRVJTSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX0RBVEFCQVNFLCAiRFJPUCBEQVRBQkFTRSIsIGZhbHNlLCBmYWxz ZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRE9NQUlOLCAiRFJPUCBET01BSU4iLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRVZFTlRfVFJJR0dFUiwg IkRST1AgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RST1BfRVhURU5TSU9OLCAiRFJPUCBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJEUk9QIEZPUkVJ R04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19E Uk9QX0ZPUkVJR05fVEFCTEUsICJEUk9QIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfRlVOQ1RJT04sICJEUk9QIEZVTkNUSU9OIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX0lOREVYLCAiRFJPUCBJTkRF WCIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9MQU5HVUFHRSwg IkRST1AgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RS T1BfTUFURVJJQUxJWkVEX1ZJRVcsICJEUk9QIE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX09QRVJBVE9SLCAiRFJPUCBPUEVSQVRP UiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9D TEFTUywgIkRST1AgT1BFUkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZLCAiRFJPUCBPUEVSQVRPUiBGQU1JTFkiLCB0 cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfT1dORUQsICJEUk9QIE9X TkVEIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1BPTElDWSwg IkRST1AgUE9MSUNZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9Q X1BST0NFRFVSRSwgIkRST1AgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19EUk9QX1BVQkxJQ0FUSU9OLCAiRFJPUCBQVUJMSUNBVElPTiIsIHRydWUsIGZh bHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9ST0xFLCAiRFJPUCBST0xFIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9ST1VUSU5FLCAiRFJPUCBS T1VUSU5FIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1JVTEUs ICJEUk9QIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1Bf U0NIRU1BLCAiRFJPUCBTQ0hFTUEiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01E VEFHX0RST1BfU0VRVUVOQ0UsICJEUk9QIFNFUVVFTkNFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19EUk9QX1NFUlZFUiwgIkRST1AgU0VSVkVSIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1NUQVRJU1RJQ1MsICJEUk9QIFNUQVRJU1RJ Q1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfU1VCU0NSSVBU SU9OLCAiRFJPUCBTVUJTQ1JJUFRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUco Q01EVEFHX0RST1BfVEFCTEUsICJEUk9QIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX1RBQkxFU1BBQ0UsICJEUk9QIFRBQkxFU1BBQ0UiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJR1VS QVRJT04sICJEUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFs c2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkRST1Ag VEVYVCBTRUFSQ0ggRElDVElPTkFSWSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfRFJPUF9URVhUX1NFQVJDSF9QQVJTRVIsICJEUk9QIFRFWFQgU0VBUkNIIFBBUlNFUiIs IHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9URVhUX1NFQVJDSF9U RU1QTEFURSwgIkRST1AgVEVYVCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0RST1BfVFJBTlNGT1JNLCAiRFJPUCBUUkFOU0ZPUk0iLCB0cnVl LCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0RST1BfVFJJR0dFUiwgIkRST1AgVFJJ R0dFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfRFJPUF9UWVBFLCAi RFJPUCBUWVBFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19EUk9QX1VT RVJfTUFQUElORywgIkRST1AgVVNFUiBNQVBQSU5HIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQotUEdf Q01EVEFHKENNRFRBR19EUk9QX1ZJRVcsICJEUk9QIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2Up Ci1QR19DTURUQUcoQ01EVEFHX0VYRUNVVEUsICJFWEVDVVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKLVBHX0NNRFRBRyhDTURUQUdfRVhQTEFJTiwgIkVYUExBSU4iLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19GRVRDSCwgIkZFVENIIiwgZmFsc2UsIGZhbHNlLCB0cnVl KQotUEdfQ01EVEFHKENNRFRBR19HUkFOVCwgIkdSQU5UIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19HUkFOVF9ST0xFLCAiR1JBTlQgUk9MRSIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0lNUE9SVF9GT1JFSUdOX1NDSEVNQSwgIklNUE9SVCBG T1JFSUdOIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfSU5T RVJULCAiSU5TRVJUIiwgZmFsc2UsIGZhbHNlLCB0cnVlKQotUEdfQ01EVEFHKENNRFRBR19MSVNU RU4sICJMSVNURU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19MT0FE LCAiTE9BRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX0xPQ0tfVEFC TEUsICJMT0NLIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdf TUVSR0UsICJNRVJHRSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRBRyhDTURUQUdfTU9W RSwgIk1PVkUiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1QR19DTURUQUcoQ01EVEFHX05PVElGWSwg Ik5PVElGWSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1BSRVBBUkUs ICJQUkVQQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUFJFUEFS RV9UUkFOU0FDVElPTiwgIlBSRVBBUkUgVFJBTlNBQ1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19SRUFTU0lHTl9PV05FRCwgIlJFQVNTSUdOIE9XTkVEIiwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUkVGUkVTSF9NQVRFUklBTElaRURf VklFVywgIlJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UpCi1Q R19DTURUQUcoQ01EVEFHX1JFSU5ERVgsICJSRUlOREVYIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfUkVMRUFTRSwgIlJFTEVBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQotUEdfQ01EVEFHKENNRFRBR19SRVNFVCwgIlJFU0VUIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK LVBHX0NNRFRBRyhDTURUQUdfUkVWT0tFLCAiUkVWT0tFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19SRVZPS0VfUk9MRSwgIlJFVk9LRSBST0xFIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKLVBHX0NNRFRBRyhDTURUQUdfUk9MTEJBQ0ssICJST0xMQkFDSyIsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1JPTExCQUNLX1BSRVBBUkVELCAiUk9MTEJB Q0sgUFJFUEFSRUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TQVZF UE9JTlQsICJTQVZFUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRB R19TRUNVUklUWV9MQUJFTCwgIlNFQ1VSSVRZIExBQkVMIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19TRUxFQ1QsICJTRUxFQ1QiLCBmYWxzZSwgZmFsc2UsIHRydWUpCi1Q R19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfS0VZX1NIQVJFLCAiU0VMRUNUIEZPUiBLRVkgU0hB UkUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX05P X0tFWV9VUERBVEUsICJTRUxFQ1QgRk9SIE5PIEtFWSBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZh bHNlKQotUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX1NIQVJFLCAiU0VMRUNUIEZPUiBTSEFS RSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NFTEVDVF9GT1JfVVBE QVRFLCAiU0VMRUNUIEZPUiBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFH KENNRFRBR19TRUxFQ1RfSU5UTywgIlNFTEVDVCBJTlRPIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKQot UEdfQ01EVEFHKENNRFRBR19TRVQsICJTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01E VEFHKENNRFRBR19TRVRfQ09OU1RSQUlOVFMsICJTRVQgQ09OU1RSQUlOVFMiLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19TSE9XLCAiU0hPVyIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCi1QR19DTURUQUcoQ01EVEFHX1NUQVJUX1RSQU5TQUNUSU9OLCAiU1RBUlQgVFJBTlNB Q1RJT04iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQotUEdfQ01EVEFHKENNRFRBR19UUlVOQ0FURV9U QUJMRSwgIlRSVU5DQVRFIFRBQkxFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKLVBHX0NNRFRBRyhD TURUQUdfVU5MSVNURU4sICJVTkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCi1QR19DTURU QUcoQ01EVEFHX1VQREFURSwgIlVQREFURSIsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLVBHX0NNRFRB RyhDTURUQUdfVkFDVVVNLCAiVkFDVVVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKKy8qIHN5bWJv bCBuYW1lLCB0ZXh0dWFsIG5hbWUsIGV2ZW50X3RyaWdnZXJfb2ssIHRhYmxlX3Jld3JpdGVfb2ss IHJvd2NvdW50LCBkZGxyZXBsb2sgKi8KK1BHX0NNRFRBRyhDTURUQUdfVU5LTk9XTiwgIj8/PyIs IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9BQ0NF U1NfTUVUSE9ELCAiQUxURVIgQUNDRVNTIE1FVEhPRCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0FHR1JFR0FURSwgIkFMVEVSIEFHR1JFR0FURSIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ0FTVCwg IkFMVEVSIENBU1QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0FMVEVSX0NPTExBVElPTiwgIkFMVEVSIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfQ09OU1RSQUlOVCwgIkFMVEVSIENPTlNUUkFJ TlQiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9D T05WRVJTSU9OLCAiQUxURVIgQ09OVkVSU0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfREFUQUJBU0UsICJBTFRFUiBEQVRBQkFTRSIsIGZhbHNl LCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9ERUZBVUxUX1BS SVZJTEVHRVMsICJBTFRFUiBERUZBVUxUIFBSSVZJTEVHRVMiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX0RPTUFJTiwgIkFMVEVSIERPTUFJTiIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRVZFTlRfVFJJ R0dFUiwgIkFMVEVSIEVWRU5UIFRSSUdHRVIiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfRVhURU5TSU9OLCAiQUxURVIgRVhURU5TSU9OIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdOX0RB VEFfV1JBUFBFUiwgIkFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9GT1JFSUdOX1RBQkxFLCAiQUxURVIg Rk9SRUlHTiBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQUxURVJfRlVOQ1RJT04sICJBTFRFUiBGVU5DVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfSU5ERVgsICJBTFRFUiBJTkRFWCIsIHRydWUs IGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfTEFOR1VBR0UsICJB TFRFUiBMQU5HVUFHRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURU QUdfQUxURVJfTEFSR0VfT0JKRUNULCAiQUxURVIgTEFSR0UgT0JKRUNUIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfTUFURVJJQUxJWkVEX1ZJRVcs ICJBTFRFUiBNQVRFUklBTElaRUQgVklFVyIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUiwgIkFMVEVSIE9QRVJBVE9SIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUl9DTEFTUywg IkFMVEVSIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01E VEFHKENNRFRBR19BTFRFUl9PUEVSQVRPUl9GQU1JTFksICJBTFRFUiBPUEVSQVRPUiBGQU1JTFki LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1BPTElD WSwgIkFMVEVSIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfUFJPQ0VEVVJFLCAiQUxURVIgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2UsIGZh bHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9QVUJMSUNBVElPTiwgIkFMVEVSIFBV QkxJQ0FUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19B TFRFUl9ST0xFLCAiQUxURVIgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19BTFRFUl9ST1VUSU5FLCAiQUxURVIgUk9VVElORSIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfUlVMRSwgIkFMVEVSIFJVTEUi LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1NDSEVN QSwgIkFMVEVSIFNDSEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQUxURVJfU0VRVUVOQ0UsICJBTFRFUiBTRVFVRU5DRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU0VSVkVSLCAiQUxURVIgU0VSVkVSIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9TVEFUSVNU SUNTLCAiQUxURVIgU1RBVElTVElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfQUxURVJfU1VCU0NSSVBUSU9OLCAiQUxURVIgU1VCU0NSSVBUSU9OIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfU1lTVEVNLCAi QUxURVIgU1lTVEVNIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0FMVEVSX1RBQkxFLCAiQUxURVIgVEFCTEUiLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSkK K1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEFCTEVTUEFDRSwgIkFMVEVSIFRBQkxFU1BBQ0UiLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQUxURVJfVEVYVF9T RUFSQ0hfQ09ORklHVVJBVElPTiwgIkFMVEVSIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VB UkNIX0RJQ1RJT05BUlksICJBTFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9URVhUX1NFQVJDSF9QQVJT RVIsICJBTFRFUiBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQUxURVIgVEVY VCBTRUFSQ0ggVEVNUExBVEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0FMVEVSX1RSQU5TRk9STSwgIkFMVEVSIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1RSSUdHRVIsICJBTFRFUiBUUklH R0VSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTFRFUl9U WVBFLCAiQUxURVIgVFlQRSIsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19BTFRFUl9VU0VSX01BUFBJTkcsICJBTFRFUiBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0FMVEVSX1ZJRVcsICJBTFRFUiBWSUVX IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19BTkFMWVpFLCAi QU5BTFlaRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19C RUdJTiwgIkJFR0lOIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX0NBTEwsICJDQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0NIRUNLUE9JTlQsICJDSEVDS1BPSU5UIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0NMT1NFLCAiQ0xPU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ0xPU0VfQ1VSU09SLCAiQ0xPU0UgQ1VSU09SIiwg ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NMT1NFX0NVUlNP Ul9BTEwsICJDTE9TRSBDVVJTT1IgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQ R19DTURUQUcoQ01EVEFHX0NMVVNURVIsICJDTFVTVEVSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg ZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NPTU1FTlQsICJDT01NRU5UIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DT01NSVQsICJDT01NSVQiLCBmYWxzZSwg ZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ09NTUlUX1BSRVBBUkVELCAi Q09NTUlUIFBSRVBBUkVEIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0NPUFksICJDT1BZIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfQ09QWV9GUk9NLCAiQ09QWSBGUk9NIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9BQ0NFU1NfTUVUSE9ELCAiQ1JFQVRFIEFDQ0VT UyBNRVRIT0QiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NS RUFURV9BR0dSRUdBVEUsICJDUkVBVEUgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ0FTVCwgIkNSRUFURSBDQVNUIiwgdHJ1ZSwg ZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfQ09MTEFUSU9OLCAi Q1JFQVRFIENPTExBVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfQ1JFQVRFX0NPTlNUUkFJTlQsICJDUkVBVEUgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9DT05WRVJTSU9OLCAiQ1JF QVRFIENPTlZFUlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9EQVRBQkFTRSwgIkNSRUFURSBEQVRBQkFTRSIsIGZhbHNlLCBmYWxzZSwgZmFs c2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRE9NQUlOLCAiQ1JFQVRFIERPTUFJ TiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX0VW RU5UX1RSSUdHRVIsICJDUkVBVEUgRVZFTlQgVFJJR0dFUiIsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRVhURU5TSU9OLCAiQ1JFQVRFIEVYVEVO U0lPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X0ZPUkVJR05fREFUQV9XUkFQUEVSLCAiQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSIiwgdHJ1 ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRk9SRUlHTl9U QUJMRSwgIkNSRUFURSBGT1JFSUdOIFRBQkxFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQor UEdfQ01EVEFHKENNRFRBR19DUkVBVEVfRlVOQ1RJT04sICJDUkVBVEUgRlVOQ1RJT04iLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9JTkRFWCwgIkNS RUFURSBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX0xBTkdVQUdFLCAiQ1JFQVRFIExBTkdVQUdFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfTUFURVJJQUxJWkVEX1ZJRVcsICJDUkVBVEUg TUFURVJJQUxJWkVEIFZJRVciLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9PUEVSQVRPUiwgIkNSRUFURSBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBm YWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX09QRVJBVE9SX0NMQVNTLCAiQ1JF QVRFIE9QRVJBVE9SIENMQVNTIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19DUkVBVEVfT1BFUkFUT1JfRkFNSUxZLCAiQ1JFQVRFIE9QRVJBVE9SIEZBTUlMWSIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1BPTElD WSwgIkNSRUFURSBQT0xJQ1kiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9QUk9DRURVUkUsICJDUkVBVEUgUFJPQ0VEVVJFIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfUFVCTElDQVRJT04sICJDUkVB VEUgUFVCTElDQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01E VEFHX0NSRUFURV9ST0xFLCAiQ1JFQVRFIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1JPVVRJTkUsICJDUkVBVEUgUk9VVElORSIsIHRy dWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9SVUxFLCAi Q1JFQVRFIFJVTEUiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0NSRUFURV9TQ0hFTUEsICJDUkVBVEUgU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU0VRVUVOQ0UsICJDUkVBVEUgU0VRVUVOQ0UiLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9TRVJWRVIs ICJDUkVBVEUgU0VSVkVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19DUkVBVEVfU1RBVElTVElDUywgIkNSRUFURSBTVEFUSVNUSUNTIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfU1VCU0NSSVBUSU9OLCAiQ1JF QVRFIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUco Q01EVEFHX0NSRUFURV9UQUJMRSwgIkNSRUFURSBUQUJMRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLCAiQ1JFQVRFIFRBQkxFIEFT IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RB QkxFU1BBQ0UsICJDUkVBVEUgVEFCTEVTUEFDRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfQ09ORklHVVJBVElPTiwgIkNS RUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVl KQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfRElDVElPTkFSWSwgIkNSRUFU RSBURVhUIFNFQVJDSCBESUNUSU9OQVJZIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19DUkVBVEVfVEVYVF9TRUFSQ0hfUEFSU0VSLCAiQ1JFQVRFIFRFWFQgU0VB UkNIIFBBUlNFUiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdf Q1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLCAiQ1JFQVRFIFRFWFQgU0VBUkNIIFRFTVBMQVRF IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19DUkVBVEVfVFJB TlNGT1JNLCAiQ1JFQVRFIFRSQU5TRk9STSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BH X0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RSSUdHRVIsICJDUkVBVEUgVFJJR0dFUiIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRFX1RZUEUsICJDUkVBVEUg VFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfQ1JFQVRF X1VTRVJfTUFQUElORywgIkNSRUFURSBVU0VSIE1BUFBJTkciLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0NSRUFURV9WSUVXLCAiQ1JFQVRFIFZJRVciLCB0cnVl LCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RFQUxMT0NBVEUsICJERUFM TE9DQVRFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RF QUxMT0NBVEVfQUxMLCAiREVBTExPQ0FURSBBTEwiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfREVDTEFSRV9DVVJTT1IsICJERUNMQVJFIENVUlNPUiIsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ERUxFVEUsICJERUxF VEUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19ESVNDQVJE LCAiRElTQ0FSRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19ESVNDQVJEX0FMTCwgIkRJU0NBUkQgQUxMIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Up CitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfUExBTlMsICJESVNDQVJEIFBMQU5TIiwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RJU0NBUkRfU0VRVUVOQ0VT LCAiRElTQ0FSRCBTRVFVRU5DRVMiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NN RFRBRyhDTURUQUdfRElTQ0FSRF9URU1QLCAiRElTQ0FSRCBURU1QIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RPLCAiRE8iLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9BQ0NFU1NfTUVUSE9ELCAiRFJPUCBB Q0NFU1MgTUVUSE9EIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRB R19EUk9QX0FHR1JFR0FURSwgIkRST1AgQUdHUkVHQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0 cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX0NBU1QsICJEUk9QIENBU1QiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQ09MTEFUSU9OLCAiRFJPUCBD T0xMQVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfQ09OU1RSQUlOVCwgIkRST1AgQ09OU1RSQUlOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwgIkRST1AgQ09OVkVSU0lPTiIs IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9EQVRBQkFT RSwgIkRST1AgREFUQUJBU0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9ET01BSU4sICJEUk9QIERPTUFJTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwg dHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9FVkVOVF9UUklHR0VSLCAiRFJPUCBFVkVOVCBU UklHR0VSIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX0RS T1BfRVhURU5TSU9OLCAiRFJPUCBFWFRFTlNJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUp CitQR19DTURUQUcoQ01EVEFHX0RST1BfRk9SRUlHTl9EQVRBX1dSQVBQRVIsICJEUk9QIEZPUkVJ R04gREFUQSBXUkFQUEVSIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19EUk9QX0ZPUkVJR05fVEFCTEUsICJEUk9QIEZPUkVJR04gVEFCTEUiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfRlVOQ1RJT04sICJEUk9QIEZV TkNUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9Q X0lOREVYLCAiRFJPUCBJTkRFWCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRB RyhDTURUQUdfRFJPUF9MQU5HVUFHRSwgIkRST1AgTEFOR1VBR0UiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfTUFURVJJQUxJWkVEX1ZJRVcsICJEUk9Q IE1BVEVSSUFMSVpFRCBWSUVXIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX09QRVJBVE9SLCAiRFJPUCBPUEVSQVRPUiIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9PUEVSQVRPUl9DTEFTUywgIkRST1AgT1BF UkFUT1IgQ0xBU1MiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFH X0RST1BfT1BFUkFUT1JfRkFNSUxZLCAiRFJPUCBPUEVSQVRPUiBGQU1JTFkiLCB0cnVlLCBmYWxz ZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfT1dORUQsICJEUk9QIE9XTkVE IiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9QT0xJ Q1ksICJEUk9QIFBPTElDWSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9QUk9DRURVUkUsICJEUk9QIFBST0NFRFVSRSIsIHRydWUsIGZhbHNlLCBmYWxz ZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9QVUJMSUNBVElPTiwgIkRST1AgUFVCTElD QVRJT04iLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1Bf Uk9MRSwgIkRST1AgUk9MRSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFH KENNRFRBR19EUk9QX1JPVVRJTkUsICJEUk9QIFJPVVRJTkUiLCB0cnVlLCBmYWxzZSwgZmFsc2Us IHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfUlVMRSwgIkRST1AgUlVMRSIsIHRydWUsIGZh bHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9TQ0hFTUEsICJEUk9QIFND SEVNQSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9T RVFVRU5DRSwgIkRST1AgU0VRVUVOQ0UiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19D TURUQUcoQ01EVEFHX0RST1BfU0VSVkVSLCAiRFJPUCBTRVJWRVIiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfU1RBVElTVElDUywgIkRST1AgU1RBVElT VElDUyIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9T VUJTQ1JJUFRJT04sICJEUk9QIFNVQlNDUklQVElPTiIsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFs c2UpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEFCTEUsICJEUk9QIFRBQkxFIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RBQkxFU1BBQ0UsICJEUk9Q IFRBQkxFU1BBQ0UiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURU QUdfRFJPUF9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLCAiRFJPUCBURVhUIFNFQVJDSCBDT05G SUdVUkFUSU9OIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19E Uk9QX1RFWFRfU0VBUkNIX0RJQ1RJT05BUlksICJEUk9QIFRFWFQgU0VBUkNIIERJQ1RJT05BUlki LCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9T RUFSQ0hfUEFSU0VSLCAiRFJPUCBURVhUIFNFQVJDSCBQQVJTRVIiLCB0cnVlLCBmYWxzZSwgZmFs c2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfVEVNUExBVEUsICJE Uk9QIFRFWFQgU0VBUkNIIFRFTVBMQVRFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19EUk9QX1RSQU5TRk9STSwgIkRST1AgVFJBTlNGT1JNIiwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19EUk9QX1RSSUdHRVIsICJEUk9QIFRS SUdHRVIiLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX0RST1Bf VFlQRSwgIkRST1AgVFlQRSIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhD TURUQUdfRFJPUF9VU0VSX01BUFBJTkcsICJEUk9QIFVTRVIgTUFQUElORyIsIHRydWUsIGZhbHNl LCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfRFJPUF9WSUVXLCAiRFJPUCBWSUVXIiwg dHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENNRFRBR19FWEVDVVRFLCAiRVhF Q1VURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19FWFBM QUlOLCAiRVhQTEFJTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19GRVRDSCwgIkZFVENIIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfR1JBTlQsICJHUkFOVCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NN RFRBRyhDTURUQUdfR1JBTlRfUk9MRSwgIkdSQU5UIFJPTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfSU1QT1JUX0ZPUkVJR05fU0NIRU1BLCAiSU1QT1JU IEZPUkVJR04gU0NIRU1BIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdfQ01EVEFHKENN RFRBR19JTlNFUlQsICJJTlNFUlQiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19MSVNURU4sICJMSVNURU4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfTE9BRCwgIkxPQUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxz ZSkKK1BHX0NNRFRBRyhDTURUQUdfTE9DS19UQUJMRSwgIkxPQ0sgVEFCTEUiLCBmYWxzZSwgZmFs c2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTUVSR0UsICJNRVJHRSIsIGZhbHNl LCBmYWxzZSwgdHJ1ZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX01PVkUsICJNT1ZFIiwgZmFs c2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfTk9USUZZLCAiTk9USUZZ IiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1BSRVBBUkUs ICJQUkVQQVJFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFH X1BSRVBBUkVfVFJBTlNBQ1RJT04sICJQUkVQQVJFIFRSQU5TQUNUSU9OIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JFQVNTSUdOX09XTkVELCAiUkVBU1NJ R04gT1dORUQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf UkVGUkVTSF9NQVRFUklBTElaRURfVklFVywgIlJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVciLCB0 cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUpCitQR19DTURUQUcoQ01EVEFHX1JFSU5ERVgsICJSRUlO REVYIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JFTEVB U0UsICJSRUxFQVNFIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01E VEFHX1JFU0VULCAiUkVTRVQiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRB RyhDTURUQUdfUkVWT0tFLCAiUkVWT0tFIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlKQorUEdf Q01EVEFHKENNRFRBR19SRVZPS0VfUk9MRSwgIlJFVk9LRSBST0xFIiwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1JPTExCQUNLLCAiUk9MTEJBQ0siLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfUk9MTEJBQ0tfUFJFUEFS RUQsICJST0xMQkFDSyBQUkVQQVJFRCIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdf Q01EVEFHKENNRFRBR19TQVZFUE9JTlQsICJTQVZFUE9JTlQiLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VDVVJJVFlfTEFCRUwsICJTRUNVUklUWSBMQUJF TCIsIHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNULCAi U0VMRUNUIiwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VM RUNUX0ZPUl9LRVlfU0hBUkUsICJTRUxFQ1QgRk9SIEtFWSBTSEFSRSIsIGZhbHNlLCBmYWxzZSwg ZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfRk9SX05PX0tFWV9VUERBVEUs ICJTRUxFQ1QgRk9SIE5PIEtFWSBVUERBVEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkK K1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9TSEFSRSwgIlNFTEVDVCBGT1IgU0hBUkUiLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VMRUNUX0ZPUl9V UERBVEUsICJTRUxFQ1QgRk9SIFVQREFURSIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19TRUxFQ1RfSU5UTywgIlNFTEVDVCBJTlRPIiwgdHJ1ZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdfU0VULCAiU0VUIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1NFVF9DT05TVFJBSU5UUywgIlNFVCBD T05TVFJBSU5UUyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENNRFRB R19TSE9XLCAiU0hPVyIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01EVEFHKENN RFRBR19TVEFSVF9UUkFOU0FDVElPTiwgIlNUQVJUIFRSQU5TQUNUSU9OIiwgZmFsc2UsIGZhbHNl LCBmYWxzZSwgZmFsc2UpCitQR19DTURUQUcoQ01EVEFHX1RSVU5DQVRFX1RBQkxFLCAiVFJVTkNB VEUgVEFCTEUiLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSkKK1BHX0NNRFRBRyhDTURUQUdf VU5MSVNURU4sICJVTkxJU1RFTiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKQorUEdfQ01E VEFHKENNRFRBR19VUERBVEUsICJVUERBVEUiLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlKQor UEdfQ01EVEFHKENNRFRBR19WQUNVVU0sICJWQUNVVU0iLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9z cmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDllMjYyZDcxMzEuLmZiZDA5 NzYzYmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysr IGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtNjUsNiArNjUsNyBAQCB0 eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9iamVjdElkOwog CQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAgICpzdWJjbWRz OwogCQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0 Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKaW5kZXggZDM0MDAyNjUxOC4u OTFkNGJkZDZiMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3ICsyMiw4IEBAIHR5cGVkZWYg ZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENvbW1hbmRFbmQsCiAJRVZUX1NR TERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJld3JpdGUsCisJRVZUX1RhYmxl SW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBlZGVmIHN0cnVjdApkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQv Y3JlYXRlX3RhYmxlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQKaW5kZXggM2QwMWMzYzQwOS4uOGQ5ODE5YThh NiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv ZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91dAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CkBAIC0yMCw2ICsyMCwx MyBAQCBOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmN0bHQx IEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFCiBBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xV TU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKIE5PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10 IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0 eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAidHlwZSI6ICJzZXQgc3RvcmFnZSIsICJjb2x1 bW4iOiAiYiIsICJzdG9yYWdlIjogImV4dGVybmFsIn1dLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUi OiAiY3RsdDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifX0KIE5PVElDRTogIHJlLWZvcm1lZCBj b21tYW5kOiBBTFRFUiBUQUJMRSBwdWJsaWMuY3RsdDEgQUxURVIgQ09MVU1OIGIgU0VUIFNUT1JB R0UgZXh0ZXJuYWwKK0NSRUFURSBUQUJMRSBjdGx0MV9saWtlIChMSUtFIGN0bHQxIElOQ0xVRElO RyBBTEwpOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lz dGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxl bWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtw YXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRp dHkiOiB7Im9iam5hbWUiOiAiY3RsdDFfbGlrZSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAi aW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMi OiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1J VCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1 ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNl fUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2Ui OiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAi cGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInBy ZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZt dCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3Nf bWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7 ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29t cHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVy YXRlZF9jb2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6 IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwg InByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAi Q09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1h bmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJtYWluIiwgImNvbXByZXNzaW9u IjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50 IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4i OiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZt dCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJl c3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRl ZF9jb2x1bW59cyIsICJuYW1lIjogImIiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsi dHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidGV4dCIsICJzY2hl bWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09M TEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFt ZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlcm5hbCIsICJjb21wcmVzc2lv biI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2Vu dCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1u IjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwgeyJm bXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogImN0bHQx X2FfY2hlY2siLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAiY2hlY2siLCAiZGVm aW5pdGlvbiI6ICJDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFs b2cuPikgMikpIn0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMi LCAibmFtZSI6ICJjdGx0MV9saWtlX3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5 cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAoYSkifV19CitO T1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLmN0bHQxX2xp a2UgKGEgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgbWFpbiAgQ09MTEFURSBwZ19jYXRhbG9nLiJk ZWZhdWx0IiAgICwgYiBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlcm5hbCAgQ09MTEFURSBw Z19jYXRhbG9nLiJkZWZhdWx0IiAgICwgQ09OU1RSQUlOVCBjdGx0MV9hX2NoZWNrIENIRUNLICgo cGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1IocGdfY2F0YWxvZy4+KSAyKSksIENPTlNUUkFJ TlQgY3RsdDFfbGlrZV9wa2V5IFBSSU1BUlkgS0VZIChhKSkgICAgICAKK05PVElDRTogIGRlcGFy c2VkIGpzb246IDxOVUxMPgorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IDxOVUxMPgorTk9U SUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDog PE5VTEw+CiAtLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBhIGZv bGxvd2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VT IHN1YmNvbW1hbmQKIENSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5h bWUgdGV4dCk7CiBOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgJXtwZXJz aXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0YWJsZV9l bGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21taXR9cyAl e3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIsICJpZGVu dGl0eSI6IHsib2JqbmFtZSI6ICJwcm9kdWN0IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJp bmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6 IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlU ICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVl IjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9 SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6 ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJw YXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJl c2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10 IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19t ZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3si Zm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21w cmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJh dGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6 IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwg InByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAi Q09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21w cmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRf Y29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9 fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAl e2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtn ZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAiY29sdW1uIiwgImNv bHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogInRl eHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVG QVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsi Zm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6ICJkZWZhdWx0Iiwg InNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAiZXh0ZW5kZWQiLCAi Y29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJh dGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZh bHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAibmFt ZSI6ICJwcm9kdWN0X3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJp bWFyeSBrZXkiLCAiZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAoaWQpIn1dfQpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV90 YWJsZS5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwv Y3JlYXRlX3RhYmxlLnNxbAppbmRleCA5OTdkMmY1NGZiLi4xYzVmMGMyMDZhIDEwMDY0NAotLS0g YS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3Rh YmxlLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvY3JlYXRlX3RhYmxlLnNxbApAQCAtOSw2ICs5LDcgQEAgQ1JFQVRFIFVOSVFVRSBJTkRFWCBj b3ZlcmluZ19pbmRleCBvbiBzaW1wbGVfdGFibGUgKGlkKSBJTkNMVURFIChuYW1lKTsKIENSRUFU RSBUQUJMRSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgoYSkgPiAyKSBQUklNQVJZIEtFWSwg YiB0ZXh0KTsKIEFMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIE1B SU47CiBBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYiBTRVQgU1RPUkFHRSBFWFRFUk5B TDsKK0NSRUFURSBUQUJMRSBjdGx0MV9saWtlIChMSUtFIGN0bHQxIElOQ0xVRElORyBBTEwpOwog CiAtLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMgaGFuZGxlZCBpbiBhIGZvbGxvd2lu ZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZFUkVOQ0VTIHN1YmNv bW1hbmQKIENSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4 dCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCBjMDBlMjgzNjFjLi43MjJiMzkx NzNjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKQEAgLTYyMjMsOSArNjIyMyw5IEBA IExpc3Qgb2Ygc2NoZW1hcwogKDAgcm93cykKIAogXGRScCAibm8uc3VjaC5wdWJsaWNhdGlvbiIK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gTmFt ZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgTmFt ZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tKy0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KICgwIHJvd3MpCiAKIFxkUnMgIm5v LnN1Y2guc3Vic2NyaXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9u Lm91dAppbmRleCA0MjdmODdlYTA3Li5iMjMxN2U3OWJlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAgY29uZmxp Y3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEggKHB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogXGRS cAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2Yg cHVibGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg ZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAg ICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKICgyIHJv d3MpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBTRVQgKHB1Ymxpc2ggPSAn aW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScpOwogXGRScAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5hbWUg ICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2lu c190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAg ICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAg ICAgICAgTmFtZSAgICAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwg VHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHRlc3RwaWJf aW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAg ICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgICB8IGYKICgyIHJvd3MpCiAKIC0tLSBhZGRpbmcgdGFibGVzCkBA IC04NywxMCArODcsMTAgQEAgUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIC0tIHNob3VsZCBi ZSBhYmxlIHRvIGFkZCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7 CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3RibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtOTksMjAgKzk5LDIw IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHNjaGVt YSBmcm9tICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnRhYmxlIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJf Zm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfdGJs MSIKIAogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHNjaGVtYSB0byAnRk9SIFRBQkxFJyBwdWJs aWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEVTIElO IFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xMjMsMTAgKzEyMywx MCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3Q7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JfdGJsX3NjaGVt YSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdCwgVEFCTEUgcHViX3Rlc3QudGVzdHB1Yl9u b3BrOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfZm9yX3RibF9z Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3JfdGJsX3NjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1 Yl9ub3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTEzNSwxMCArMTM1LDEwIEBAIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBhZGQgYSB0YWJsZSBvZiB0aGUg c2FtZSBzY2hlbWEgdG8gdGhlIHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3JzY2hlbWEgQUREIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnAr IHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMg fCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0 LnRlc3RwdWJfbm9wayIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC0xNDcsMTAgKzE0NywxMCBA QCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gc2hvdWxkIGJlIGFibGUgdG8gZHJvcCB0aGUgdGFi bGUKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIERST1AgVEFCTEUgcHViX3Rl c3QudGVzdHB1Yl9ub3BrOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0IgogCkBAIC0xNjEsMTAgKzE2MSwx MCBAQCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX25vcGsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBw dWJsaWNhdGlvbgogLS0gc2hvdWxkIGJlIGFibGUgdG8gc2V0IHRhYmxlIHRvIHNjaGVtYSBwdWJs aWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgU0VUIFRBQkxFIHB1 Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEKLSAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJs ZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAg ICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIApAQCAtMTg2LDEwICsx ODYsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRS cCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IHQgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIERS T1AgVEFCTEUgdGVzdHB1Yl90YmwyOwpAQCAtMjAxLDE5ICsyMDEsMTkgQEAgQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWIzIEZPUiBUQUJMRSB0ZXN0cHViX3RibDM7CiBDUkVBVEUgUFVCTElDQVRJ T04gdGVzdHB1YjQgRk9SIFRBQkxFIE9OTFkgdGVzdHB1Yl90YmwzOwogUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMu dGVzdHB1Yl90YmwzIgogICAgICJwdWJsaWMudGVzdHB1Yl90YmwzYSIKIAogXGRScCsgdGVzdHB1 YjQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI0Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjQKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIzNCwx MCArMjM0LDEwIEBAIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBw YXJlbnQgaXMgbGlzdGVkIGFzIGJlaW5nIGluIHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlv bgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJf cGFydGVkOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCBBTFRF UiBUQUJMRSB0ZXN0cHViX3BhcnRlZCBERVRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfcGFydGVkMTsK IFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3JwYXJ0ZWQgU0VUIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwog XGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IHQKIFRhYmxlczoKICAgICAicHVi bGljLnRlc3RwdWJfcGFydGVkIgogCkBAIC0yODQsMTAgKzI4NCwxMCBAQCBTRVQgY2xpZW50X21p bl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjUgRk9SIFRB QkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1Yl9yZl90YmwyIFdIRVJFIChjIDw+ICd0ZXN0JyBB TkQgZCA8IDUpIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CiBSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAn dGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzAwLDEwICszMDAsMTAgQEAgVGFibGVzOgog CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBBREQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdI RVJFIChlID4gMTAwMCBBTkQgZSA8IDIwMDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHViX3Jm X3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzE5LDEw ICszMTksMTAgQEAgUHVibGljYXRpb25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBE Uk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVz OgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90 YmwzIiBXSEVSRSAoKGUgPiAxMDAwKSBBTkQgKGUgPCAyMDAwKSkKQEAgLTMzMCwxMCArMzMwLDEw IEBAIFRhYmxlczoKIC0tIHJlbW92ZSB0ZXN0cHViX3JmX3RibDEgYW5kIGFkZCB0ZXN0cHViX3Jm X3RibDMgYWdhaW4gKGFub3RoZXIgV0hFUkUgZXhwcmVzc2lvbikKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI1IFNFVCBUQUJMRSB0ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAzMDAgQU5EIGUg PCA1MDApOwogXGRScCsgdGVzdHB1YjUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3JmX3RibDMiIFdIRVJFICgoZSA+IDMwMCkgQU5EIChlIDwgNTAwKSkKIApAQCAtMzY2LDEw ICszNjYsMTAgQEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWJfc3ludGF4MSBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCBPTkxZ IHRlc3RwdWJfcmZfdGJsMyBXSEVSRSAoZSA8IDk5OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQn KTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX3N5bnRheDEKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgx Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5 bnRheDEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1 YmxpYy50ZXN0cHViX3JmX3RibDMiIFdIRVJFIChlIDwgOTk5KQpAQCAtMzc5LDEwICszNzksMTAg QEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfc3ludGF4MiBGT1IgVEFCTEUgdGVzdHB1Yl9yZl90YmwxLCB0ZXN0cHViX3JmX3Nj aGVtYTEudGVzdHB1Yl9yZl90Ymw1IFdIRVJFIChoIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2lu c2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4 MgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5 bnRheDIKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfc3ludGF4MgorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwg RERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAg ICAidGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGggPCA5OTkpCkBA IC00OTcsMTAgKzQ5NywxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYgRk9SIFRBQkxF UyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyLCBUQUJMRSB0ZXN0cHVi X3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IFdIRVJFIChpIDwgOTkpOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI2Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgotICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJ0ZXN0 cHViX3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IiBXSEVSRSAoaSA8IDk5KQogVGFibGVzIGZy b20gc2NoZW1hczoKQEAgLTcxNCwxMCArNzE0LDEwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1bmNhdGUnKTsKIFJFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lu cyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCiBcZFJwKyB0ZXN0cHViX3RhYmxl X2lucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf dGFibGVfaW5zCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90Ymw1IiAo YSkKIApAQCAtODkxLDEwICs4OTEsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOwogQUxURVIg VEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5E RVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhLGMp IFdIRVJFIChjICE9IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9maWx0ZXJzCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRl cnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBU YWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAg ICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChh LCBjKSBXSEVSRSAoYyA8PiAxKQogCkBAIC0xMDk5LDEwICsxMDk5LDEwIEBAIEVSUk9SOiAgcmVs YXRpb24gInRlc3RwdWJfdGJsMSIgaXMgYWxyZWFkeSBtZW1iZXIgb2YgcHVibGljYXRpb24gInRl c3RwdWJfZm9ydGJsCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YmwgRk9SIFRBQkxF IHRlc3RwdWJfdGJsMTsKIEVSUk9SOiAgcHVibGljYXRpb24gInRlc3RwdWJfZm9ydGJsIiBhbHJl YWR5IGV4aXN0cwogXGRScCsgdGVzdHB1Yl9mb3J0YmwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YmwKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKICAgICAicHVibGljLnRlc3RwdWJfdGJsMSIKQEAg LTExNDAsMTAgKzExNDAsMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcnRibCIK IAogXGRScCsgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJf dGVzdC50ZXN0cHViX25vcGsiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCkBAIC0xMjIxLDEw ICsxMjIxLDEwIEBAIFJFVk9LRSBDUkVBVEUgT04gREFUQUJBU0UgcmVncmVzc2lvbiBGUk9NIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlcjI7CiBEUk9QIFRBQkxFIHRlc3RwdWJfcGFydGVkOwogRFJP UCBUQUJMRSB0ZXN0cHViX3RibDE7CiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBE RExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBm CiAoMSByb3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9mIHB1YmxpY2F0aW9uCkBAIC0x MjM0LDIwICsxMjM0LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25lciBvZiBwdWJsaWNhdGlvbiB0 ZXN0cHViX2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Rl ZmF1bHQgUkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0cHViX2ZvbwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0g ICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHB1Yl9mb28g fCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgTmFt ZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMg fCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCistLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSByZW5h bWUgYmFjayB0byBrZWVwIHRoZSByZXN0IHNpbXBsZQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb28gUkVOQU1FIFRPIHRlc3RwdWJfZGVmYXVsdDsKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZGVmYXVsdCBPV05FUiBUTyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogXGRScCB0ZXN0 cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICBOYW1lICAgICAgIHwgICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlcjIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgIE5hbWUgICAgICAgfCAgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERM cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCisgdGVzdHB1Yl9kZWZhdWx0IHwgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyMiB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGFkZGlu ZyBzY2hlbWFzIGFuZCB0YWJsZXMKQEAgLTEyNjMsMTkgKzEyNjMsMTkgQEAgQ1JFQVRFIFRBQkxF ICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihpZCBpbnQpOwogU0VUIGNsaWVudF9t aW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNj aGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIEZPUiBUQUJMRVMg SU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMjg5LDQ0ICsxMjg5LDQ0IEBAIENSRUFU RSBQVUJMSUNBVElPTiB0ZXN0cHViNl9mb3JzY2hlbWEgRk9SIFRBQkxFUyBJTiBTQ0hFTUEgIkNV UlJFTlRfU0NIRU1BIiwgQ1VSCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBG T1IgVEFCTEUgIkNVUlJFTlRfU0NIRU1BIi4iQ1VSUkVOVF9TQ0hFTUEiOwogUkVTRVQgY2xpZW50 X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAg ICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBE RExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWI0X2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI0X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViNF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJS RU5UX1NDSEVNQSIKIAogXGRScCsgdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1X2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERE THMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BIgogICAgICJwdWJsaWMi CiAKIFxkUnArIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJv bSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0 ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNVUlJFTlRfU0NI RU1BLkNVUlJFTlRfU0NIRU1BIgogCkBAIC0xMzYwLDEwICsxMzYwLDEwIEBAIEVSUk9SOiAgc2No ZW1hICJ0ZXN0cHViX3ZpZXciIGRvZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0aGUgc2NoZW1h IHNob3VsZCByZWZsZWN0IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIERST1AgU0NIRU1BIHB1 Yl90ZXN0MzsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEz NzEsMjAgKzEzNzEsMjAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbmFtaW5nIHRoZSBz Y2hlbWEgc2hvdWxkIHJlZmxlY3QgdGhlIGNoYW5nZSBpbiBwdWJsaWNhdGlvbgogQUxURVIgU0NI RU1BIHB1Yl90ZXN0MSBSRU5BTUUgdG8gcHViX3Rlc3QxX3JlbmFtZWQ7CiBcZFJwKyB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1BIHB1Yl90 ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8 IEFsbCBERExzIHwgVGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgZiAgICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3Qx IgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzkyLDEwICsxMzkyLDEwIEBAIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAtLSBhbHRlciBwdWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRS cCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQwNCwxMCArMTQwNCwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIEFERCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjog IHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAg ICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MTYsMTAgKzE0MTYsMTAgQEAgVGFi bGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBB REQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBFUlJPUjogIHNjaGVtYSAicHViX3Rlc3Qx IiBpcyBhbHJlYWR5IG1lbWJlciBvZiBwdWJsaWNhdGlvbiAidGVzdHB1YjFfZm9yc2NoZW1hIgog XGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQyNywxMCArMTQy NywxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gZHJvcCBz Y2hlbWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJ TiBTQ0hFTUEgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTQzOCwx MCArMTQzOCwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIERST1AgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBFUlJPUjog IHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rlc3QyIiBhcmUgbm90IHBhcnQgb2YgdGhlIHB1Ymxp Y2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERMcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNDQ5LDI5ICsxNDQ5LDI5IEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNj aGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJw dWJfdGVzdDEiCiAKIC0tIGRyb3AgYWxsIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIxX2ZvcnNjaGVtYSBEUk9QIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsgdGVz dHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKICgxIHJvdykKIAogLS0gYWx0ZXIgcHVi bGljYXRpb24gc2V0IG11bHRpcGxlIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QyOwogXGRS cCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ4MCwxMCArMTQ4MCwx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjog IHNjaGVtYSAibm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAg ICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0OTIsMTAgKzE0OTIsMTAgQEAgVGFi bGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbW92aW5nIHRoZSBkdXBsaWNhdGUgc2NoZW1hcwogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMgSU4gU0NIRU1BIHB1 Yl90ZXN0MSwgcHViX3Rlc3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRh YmxlIERETHMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAg ICAgIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTU3NCwx OCArMTU3NCwxOCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKIFxkUnArIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKKyAgICAgICAgICBPd25l ciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgQWxsIERETHMgfCBUYWJsZSBERExzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBmICAgICAgICB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCiAoMSByb3cpCiAK IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVN QSBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwgVGFibGUgRERM cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICAgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgog VGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTk1LDIwICsxNTk1 LDIwIEBAIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZSBGT1Ig VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIFRBCiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZV9mb3JzY2hlbWEgRk9SIFRBQkxFIHB1Yl90ZXN0Mi50YmwxLCBUQUJMRVMgSU4g U0NIRU1BIHB1Yl90ZXN0MTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0 cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYV9mb3J0YWJsZQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBBbGwgRERMcyB8IFRhYmxlIERETHMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHViX3Rlc3QyLnRibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2No ZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEFsbCBERExzIHwg VGFibGUgRERMcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAg ICAgICAgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3JlcGxpY2F0 aW9uLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40YmM0ZmYyMjEyCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5w bApAQCAtMCwwICsxLDQ2NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisjIFJlZ3Jlc3Npb24gdGVzdHMgZm9yIGxvZ2ljYWwgcmVw bGljYXRpb24gb2YgRERMcworIwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNl IFRlc3Q6Ok1vcmU7CisKK215ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXItPm5ldygncHVibGlzaGVyJyk7Ciskbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0 cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfcHVibGlzaGVyLT5zdGFydDsKKworbXkgJG5v ZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vic2NyaWJl cicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2Fs Jyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zdGFydDsKKworbXkgJGRkbCA9ICJDUkVBVEUgVEFCTEUg dGVzdF9yZXAoaWQgaW50IHByaW1hcnkga2V5LCBuYW1lIHZhcmNoYXIsIHZhbHVlIGludGVnZXIp OyI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBW QUxVRVMgKDEsICdkYXRhMScsIDEpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICRkZGwpOworCitteSAkcHVibGlzaGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNo ZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jlcyc7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgUFVCTElDQVRJT04gbXlwdWIgRk9SIEFMTCBUQUJM RVMgd2l0aCAocHVibGlzaCA9ICdpbnNlcnQsIHVwZGF0ZSwgZGVsZXRlJywgZGRsID0gJ2FsbCcp OyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBT VUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNB VElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6ZWQgdGhlIHRhYmxlLgor IyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cgZnJvbSBiZWluZyBleGVj dXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVfc3Vic2NyaWJlci0+cG9s bF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VOVCgxKSA9IDAgRlJPTSBw Z19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUgTk9UIElOICgncycsICdy JykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIKKyk7CisKKyMgVGVzdCBB TFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJB TFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMiwgJ2RhdGEy JywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRF UiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxU RVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBpZCA9IDI7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0 ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgRFJPUCByZXBs aWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBFCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFs dWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMnLCAnMycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00g dGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0FMVEVS IHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVS IFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGRlZmF1bHQg dmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJlciBub2RlLgorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFM VEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQsICdkYXRhNCcpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMoJHJlc3VsdCwgJ2Zvbycs ICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgZG9uJ3QgaGF2 ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgQ09MVU1O IHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWx1ZSBJUyBOVUxM IEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3VsdCwgcSh0KSwgJ0FMVEVS IHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRF UiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBleGlzdGluZyByZWNvcmQg dGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRvdXQsICRzdGRlcnIpOwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0 X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VUIE5PVCBOVUxMOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2Ny aWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg2LCAn ZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9 PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VS Uk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJlbGF0aW9uIFwidGVzdF9y ZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxlZCB0byBy ZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsKKworIyBUZXN0IEFMVEVS IFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBEUk9QIE5PVCBOVUxM OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBJbnNl cnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFpbGVkIGJlZm9yZSBidXQg bm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRhNicpOyIpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVl IElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7CitpcygkcmVzdWx0LCBxKHQp LCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBsaWNhdGVkIik7CisKKyMg VGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQ7Jyk7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg3LCAn ZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3OyIpOworaXMoJHJlc3Vs dCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVwbGljYXRlZCcpOworCisj IFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dHRUQ7Jyk7Ciskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg4LCAnZGF0 YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0 IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2YXJjaGFyKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwgJ2EnKSIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2YWx1ZXMg KDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIpLCAnRE1MIENoYW5nZXMg dG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSU5IRVJJVFMK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w MiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwgJ2EnLCAxKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7CitpcygkcmVzdWx0LCBxcSgx KSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJv bSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgc29tZSBkYXRhIHRvIGlu aGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgTElL RQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwgJ2EnKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHBn X3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDM7Iik7 CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8gYSB0YWJsZSBkZWZpbmVk IHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9QIFRBQkxFCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBw Z190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgwKSwg J1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVU5MT0dHRUQgVEFCTEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVU5MT0dHRUQg VEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVzIHdoZXJl IHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVU5MT0dH RUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsi KTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8gdW5sb2dnZWQgdGFibGUg aXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJ RiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JF QVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEo MSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBkYXRhIHRvIGEgdGFi bGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAo Y2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRh YmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3ZSBzdWNjZWVkCisjIGlu IHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRtcCAoaWQg aW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVB VEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJs ZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNoZXIsIGJ1dCBub3Qgb24g dGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIp OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRt cCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1 YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUg VEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJM RSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJD UkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoJ2Zv bycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv bGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgV0hFUkUgdGFibGVf bmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVBVEUgVEFCTEUgd2l0aCBj b2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggbmFtZWQg Y29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBiaWdnZXIgdGhhbiAxMFwi IENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAg IHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRl cnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sg Y29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9yIGRpZSAiZmFpbGVkIHRv IHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uc3RyYWludHMuCisjIE5P VCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1QgTlVMTCk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBp biBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0 cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24gbnVsbCBjb25zdHJhaW50 IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5h bWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00gdG1wOyIpOworaXMoJHJl c3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0cmFpbnQgcmVwbGljYXRl ZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUg dG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJvZHVjdF9hbWUgdGV4dCwg cHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsiLAorCQkJCQkgICBvbl9l cnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rk b3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRp b24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3ByaWNlX2NoZWNrIi8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFpbnQiOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIERF RkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBm cm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUgVEFCTEUgd2l0aCBkZWZh dWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25zdHJhaW50Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50 IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUg Y29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBj b25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklNQVJZIEtFWQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGlu dCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFyJyk7IiwK KwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIs CisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxp Y2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5Ii8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0IGNyZWF0aW5nIHRhYmxl IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRt cDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURFIFVTSU5HIGdpc3QgKGMg V0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEp LCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBz dGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJy ID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNpb24gY29u c3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUg RVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVGRVJFTkNFUworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBwcm9kdWN0IChp ZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxVRVMgKDEsICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBw cm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtF WSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3Fs KCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgxLCAxMCkiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgaW5zZXJ0IG9yIHVw ZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJv cmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIFJF RkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisKKyMgREVGRVJSQUJMRQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEs ICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVycmFibGUgY2xhdXNl Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VU IGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0IHNob3VsZCBmYWls IGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5vZGVfc3Vic2NyaWJlci0+ cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQgaWQgPSBpZCArIDE7 CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxFVEUgRlJPTSB0bXAg V0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9PiAwLCBzdGRlcnIgPT4g XCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIGR1cGxp Y2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5Ii8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQgY3JlYXRpbmcgdGFibGUi OworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1w OyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIE5PVCBERUZFUlJB QkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFy Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsg MTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0 ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAg ZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3BrZXki LworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVSUkFCTEUgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxMWSBERUZFUlJFRAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlk IGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCwgbmFtZSB0ZXh0 KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5U TyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVjayBvZiBk ZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBhIHRlc3Qg dGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVECiskbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOworREVMRVRF IEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNldCB0d28gY2hlY2tzIGFu ZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVzcGVjdGl2ZWx5LgorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRtcCAo cHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRpc2NvdW50ZWRfcHJpY2Ug PiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwKKwkJCQkJICAgb25fZXJy b3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91 dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAi ZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJzdCBjb25kaXRpb24pIGF0 IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2 aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBvciBkaWUgImZhaWxlZCB0 byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRpdGlvbikgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEggc3Ryb3JhZ2VfcGFyYW1l dGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2Ny aWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBX SEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJ CQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Cisk c3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0 ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVyIHJlcGxpY2F0ZWQnKTsK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVhdGluZyBhIHRhYmxlc3Bh Y2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVjdG9yaWVzIGZvciB0aGUg cHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNlZGlyLCAkdGFibGVzcGFj ZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFzZWRpcjsKKyR0YWJsZXNw YWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0YWJsZXNwYWNlX2Rpcik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BB Q0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CiskYmFzZWRpciA9ICRu b2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIgPSAiJGJhc2VkaXIvdGJs c3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04g JyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BBQ0UgbXl0YmxzcGM7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFURSBU QUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUWVBFCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXl0eXBl IEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2Jhcicp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUgT0YgcmVw bGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUWVBFIG15dHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIEVOVU0gVFlQRQorJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15ZW51bXR5cGUgQVMgRU5V TSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBUQUJMRSB0bXAgKHN0YXR1cyBteWVudW10eXBlKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgnbmV3 Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgKiBm cm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKG5ldyksICdDUkVBVEUgVEFCTEUgT0YgcmVwbGlj YXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU WVBFIG15ZW51bXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBSQU5HRSBUWVBFCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgZmxvYXQ4X3JhbmdlIEFT IFJBTkdFIChzdWJ0eXBlID0gZmxvYXQ4LCBzdWJ0eXBlX2RpZmYgPSBmbG9hdDhtaSk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAodmFsIGZsb2F0OF9y YW5nZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiaW5zZXJ0 IGludG8gdG1wIHZhbHVlcyhmbG9hdDhfcmFuZ2UoLTEyLjM0LCAnMS4xMTExMTNlMycpKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1w OyIpOworaXMoJHJlc3VsdCwgcXEoWy0xMi4zNCwxMTExLjExM1wpKSwgJ0NSRUFURSBUQUJMRSBP RiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJEUk9QIFRZUEUgZmxvYXQ4X3JhbmdlIik7CisKKyMgVGVzdCBDUkVBVEUgQkFTRSBEQVRBIFRZ UEUgYW5kIHVzZSBpdCBpbiB0YWJsZSBkZWZpbml0aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiCitDUkVBVEUgVFlQRSBpbnQ0MjsKK0NSRUFURSBGVU5DVElPTiBp bnQ0Ml9pbihjc3RyaW5nKQorICAgUkVUVVJOUyBpbnQ0MgorICAgQVMgJ2ludDRpbicKKyAgIExB TkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgRlVOQ1RJT04gaW50NDJf b3V0KGludDQyKQorICAgUkVUVVJOUyBjc3RyaW5nCisgICBBUyAnaW50NG91dCcKKyAgIExBTkdV QUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgVFlQRSBpbnQ0MiAoCisgICBp bnRlcm5hbGxlbmd0aCA9IDQsCisgICBpbnB1dCA9IGludDQyX2luLAorICAgb3V0cHV0ID0gaW50 NDJfb3V0LAorICAgYWxpZ25tZW50ID0gaW50NCwKKyAgIGRlZmF1bHQgPSA0MiwKKyAgIHBhc3Nl ZGJ5dmFsdWUKKyk7CitDUkVBVEUgVEFCTEUgdG1wIChmMSBpbnQ0Mik7CitJTlNFUlQgSU5UTyB0 bXAgREVGQVVMVCBWQUxVRVM7CisiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoNDIpLCAnQ1JFQVRF IFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkRST1AgVFlQRSBpbnQ0MiBjYXNjYWRlIik7CisKK3Bhc3MgIkRETCByZXBsaWNh dGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKKyRub2RlX3B1 Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9zcmMvdG9vbHMv cGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CmluZGV4IDRhMzE4MThmMDcuLmI3NDVhOWJiYmUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 CkBAIC01NjEsNiArNTYxLDcgQEAgRGVmRWxlbUFjdGlvbgogRGVmYXVsdEFDTEluZm8KIERlZmlu ZVN0bXQKIERlbGV0ZVN0bXQKK0RlcGFyc2VkQ29tbWFuZFR5cGUKIERlcGVuZGVuY3lHZW5lcmF0 b3IKIERlcGVuZGVuY3lHZW5lcmF0b3JEYXRhCiBEZXBlbmRlbmN5VHlwZQpAQCAtMTQ0OSw2ICsx NDUwLDggQEAgTG9naWNhbERlY29kZUJlZ2luUHJlcGFyZUNCCiBMb2dpY2FsRGVjb2RlQ2hhbmdl Q0IKIExvZ2ljYWxEZWNvZGVDb21taXRDQgogTG9naWNhbERlY29kZUNvbW1pdFByZXBhcmVkQ0IK K0xvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IKK0xvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdl Q0IKIExvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCCiBMb2dpY2FsRGVjb2RlRmlsdGVyUHJl cGFyZUNCCiBMb2dpY2FsRGVjb2RlTWVzc2FnZUNCCkBAIC0yMzA1LDYgKzIzMDgsOCBAQCBSZW9y ZGVyQnVmZmVyQ2hhbmdlCiBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQogUmVvcmRlckJ1ZmZlckNv bW1pdENCCiBSZW9yZGVyQnVmZmVyQ29tbWl0UHJlcGFyZWRDQgorUmVvcmRlckJ1ZmZlckRETE1l c3NhZ2VDQgorUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQgogUmVvcmRlckJ1ZmZlckRp c2tDaGFuZ2UKIFJlb3JkZXJCdWZmZXJJdGVyVFhORW50cnkKIFJlb3JkZXJCdWZmZXJJdGVyVFhO U3RhdGUKQEAgLTM2MDcsNiArMzYxMiw3IEBAIHB0aHJlYWRfbXV0ZXhfdAogcHRocmVhZF9vbmNl X3QKIHB0aHJlYWRfdAogcHRyZGlmZl90CitwdWJsaWNhdGlvbl9yZWwKIHB1bGxfdmFyX2NsYXVz ZV9jb250ZXh0CiBwdWxsX3ZhcmF0dG5vc19jb250ZXh0CiBwdWxsX3Zhcm5vc19jb250ZXh0Ci0t IAoyLjM0LjEKCg== --000000000000e87dcb05f68939b7--