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 1p5r3P-0000hv-53 for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Dec 2022 16:25:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1p5r3O-0004kj-29 for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Dec 2022 16:25:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p5r3M-0004kT-I5 for pgsql-hackers@lists.postgresql.org; Thu, 15 Dec 2022 16:25:49 +0000 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1p5r2y-0002Od-If for pgsql-hackers@lists.postgresql.org; Thu, 15 Dec 2022 16:25:47 +0000 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-14455716674so21592480fac.7 for ; Thu, 15 Dec 2022 08:25:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ArVahnFs9TJasfl+5i+RFLn/NEvKlaoIT/NXvekZqLk=; b=cU/w7SIZcrk+jyT8Sd5NjGe+cdX4Rld6HQt0Lo83pAKe8nhR9eQW0Nz6S7+CJQgG5Z 6Y4WVA+G5577k2UpfovsVOuCVj/DGWv7Kxxyi8sPPFPGyDxbfhXNo4ygaEWRQRPae5LM F6fZeOgL5s1yoydGNxjohVurKZVCcghmwpho3U8iHfPRkS43wMW/3KZ6US1hLjdUVzFf OamBBRwTpSqReos/Mzc6N9Oh5xVgwD3XEHwbLDifTEf/0IQWt3LnD+0gTmKKLEPsU26e i3KeKcUWCJJP0iKy3FA1ZDHudP4O284LwWcEMcGn1/tehnd7G6mH9K5snkMl/5pS0amk 2zXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ArVahnFs9TJasfl+5i+RFLn/NEvKlaoIT/NXvekZqLk=; b=Mk1EcSoX90AZ/DswVh3T1/CByQ2uf9cZMnqvolm541DmkvWNabpFDBEfGiE4cYrwhg FgRjf7WXElPgD85Wz+Pb9kVe2+bT+7x7cH5Z4tw5ibbD5+2puH9hVH8r9w1FmyuYSVJ+ cwZR17P1lApGmLpckuh5CUMZTQAPxtgjmnPcUN4NXFUhBLHdDDLSww3qCMgSha632/Q0 Puk2w7c6NXvAsBpDlOZKeEyH2I6JSRWzyxnmy6TT7iP7wIsiVT3X6RFns+TqDkXgxz+l S/VCo3geaPNUI//OxgJ44np0/r5sVyGY9OYxuQ66QV85h+FZbEZKuSGHk7IIBzYYneC9 KPBA== X-Gm-Message-State: AFqh2kqESTrVjCP69a1SfyuHJxO8E+g+uJWd0OlraDatjWHfKYGAVvym a+XFaC2wH47pZkl8egK5ESR+esQI5nl10DKH06s= X-Google-Smtp-Source: AMrXdXto8TheKyEsqsjvvHxZnfj6XYkanbYdYpbTVYt/tyWEfJ4YSyMLh6A/SAYNH/LtBGqS4lMHNXofDZwkv95QIJM= X-Received: by 2002:a05:6871:4107:b0:144:ca10:dfd8 with SMTP id la7-20020a056871410700b00144ca10dfd8mr320494oab.160.1671121523631; Thu, 15 Dec 2022 08:25:23 -0800 (PST) MIME-Version: 1.0 References: <20221006171601.6um4ey5idm4h62vf@alvherre.pgsql> In-Reply-To: From: vignesh C Date: Thu, 15 Dec 2022 21:54:44 +0530 Message-ID: Subject: Re: Support logical replication of DDLs To: Peter Smith Cc: Zheng Li , Ajin Cherian , Dilip Kumar , Alvaro Herrera , "houzj.fnst@fujitsu.com" , Amit Kapila , Masahiko Sawada , Japin Li , rajesh singarapu , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000cb887705efe04c32" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cb887705efe04c32 Content-Type: text/plain; charset="UTF-8" On Fri, 11 Nov 2022 at 10:17, Peter Smith wrote: > > Here are more review comments for the v32-0001 file ddl_deparse.c > > This completes my first review pass over this overly large file. > > This review has taken a long time, so for any of my review comments > (in this and previous posts) that get rejected, please reply citing > the rejected reference numbers, because I hope to avoid spending > multiple days (in a future review) trying to reconcile what was > addressed vs what was not addressed. TIA. > > *** NOTE - my review post became too big, so I split it into smaller parts. > > THIS IS PART 1 OF 4. > > ====== > > src/backend/commands/ddl_deparse.c > > G.1. GENERAL _VA args wrapping > > + tmp = new_objtree_VA("WITH GRANT OPTION", > + 1, "present", ObjTypeBool, > + stmt->action->grant_option); > > In general, I think all these _VA() style function calls are easier to > read if you can arrange to put each of the argument names on a new > line instead of just wrapping them randomly. > > So the above would be better as: > > tmp = new_objtree_VA("WITH GRANT OPTION", 1, > "present", ObjTypeBool, stmt->action->grant_option); > > Please search/modify all cases of new_objtree_VA like this. Modified > G.2. GENERAL - "type" object > > There are many functions that insert a "type" object for some purpose: > > e.g. > + tmpobj = new_objtree_VA("DETACH PARTITION %{partition_identity}D FINALIZE", 2, > + "type", ObjTypeString, "detach partition finalize", > + "partition_identity", ObjTypeObject, > + new_objtree_for_qualname_id(RelationRelationId, > + sub->address.objectId)); > > e.g. > + tmpobj = new_objtree_VA(fmtstr, 2, > + "type", ObjTypeString, "add column", > + "definition", ObjTypeObject, tree); > > I'm not sure yet what these "type" objects are used for, but I felt > that these unsubstituted values should look slightly more like enum > values, and slightly less like real SQL syntax. > > For example - maybe do like this (for the above): > > "detach partition finalize" -> "type_detach_partition_finalize" > "add column" -> "type_add_column" > etc. I felt this is mainly useful for handling when the publisher is running on a higher version and the subscriber is running on a lower version, this feature may or may not be part of the first version. We might be removing this code from the final patch. I have not made any change for this. We will handle this at a later point based on handling version is required or not as part of patch to be committed. > G.3. GENERAL - JSON deparsed structures should be documented > > AFAICT there are mixtures of different JSON structure styles at play > in this module. Sometimes there are trees with names and sometimes > not, sometimes there are "present" objects and sometimes not. > Sometimes entire trees seemed unnecessary to me. It feels quite > arbitrary in places but it's quite hard to compare them because > everything is spread across 9000+ lines. > > IMO all these deparse structures ought to be documented. Then I think > it will become apparent that lots of them are inconsistent with the > others. Even if such documentation is ultimately not needed by > end-users, I think it would be a very valuable internal design > accompaniment to this module, and it would help a lot for > reviews/maintenance/bug prevention etc. Better late than never. There is "type" and "present" which might confuse the user, this is required for handling when the publisher is running on a higher version and the subscriber is running on a lower version, this feature may or may not be part of the first version. We might be removing this code from the final patch. I have not documented this part, the others I have documented. Let me know if you are looking for adding comments for some others particularly. > G.4 GENERAL - Underuse of _VA() function. > > (Probably I've mentioned this before in previous review comments, but > I keep encountering this many times). > > The json is sort of built up part by part and objects are appended ... > it was probably easier to think about each part during coding but OTOH > I think this style is often unnecessary. IMO most times the function > can be far simpler just by gathering together all the necessary values > and then using a single big new_objtree_VA() call to deparse the > complete format in one call. I think it could also shave 100s of lines > of code from the module. Modified > G.5 GENERAL - Inconsistent function comment wording. > > The function comments are worded in different ways... > > "Given a XXX OID and the parse tree that created it, return an ObjTree > representing the creation command." > > versus > > "Given a XXX OID and the parse tree that created it, return the JSON > blob representing the creation command." > > Please use consistent wording throughout. Modified > G.6 GENERAL - present=false > > There are many calls that do like: > append_bool_object(tmpobj, "present", false); > > I was thinking the code would be cleaner if there was a wrapper function like: > > static void > append_not_present(ObjTree objTree) > { > append_bool_object(objTree, "present", false); > } Modified > G.7 GENERAL - psprintf format strings > > There are quite a few places where the format string is > pre-constructed using psprintf. > > e.g. > + fmt = psprintf("ALTER %s %%{identity}s OWNER TO %%{newowner}I", > + stringify_objtype(node->objectType)); > + > + ownerStmt = new_objtree_VA(fmt, 2, > + "identity", ObjTypeString, > + getObjectIdentity(&address, false), > + "newowner", ObjTypeString, > + get_rolespec_name(node->newowner)); > > It's not entirely clear to me why this kind of distinction is even > made, or even what are the rules governing the choice. AFAICT this > same result could be achieved by using another string substitution > marker. So why not do it that way instead of mixing different styles? > > IMO many/most of the psprintf can be removed. > > e.g. I mean something like this (for the above example): > > fmt = "ALTER %{obj_type}s %{identity}s OWNER TO %{newowner}I"; > > ownerStmt = new_objtree_VA(fmt, 3, > "obj_type", ObjTypeString, stringify_objtype(node->objectType), > "identity", ObjTypeString, getObjectIdentity(&address, false), > "newowner", ObjTypeString, get_rolespec_name(node->newowner)); Modified wherever possible > G.8 GENERAL - Inconsistent OID/oid in error messages. > > errmsg("role with OID %u does not exist", roleoid))); > elog(ERROR, "cache lookup failed for collation with OID %u", objectId); > elog(ERROR, "cache lookup failure for function with OID %u", > elog(ERROR, "cache lookup failed for schema with OID %u", > errmsg("role with OID %u does not exist", istmt->grantor_uid))); > elog(ERROR, "cache lookup failed for operator with OID %u", objectId); > elog(ERROR, "cache lookup failed for type with OID %u", objectId); > elog(ERROR, "cache lookup failed for conversion with OID %u", objectId); > elog(ERROR, "cache lookup failed for extension with OID %u", > elog(ERROR, "cache lookup failed for extension with OID %u", > elog(ERROR, "cache lookup failed for cast with OID %u", objectId); > elog(ERROR, "cache lookup failed for domain with OID %u", objectId); > elog(ERROR, "cache lookup failure for function with OID %u", > elog(ERROR, "cache lookup failure for language with OID %u", > elog(ERROR, "null prosrc in function with OID %u", objectId); > elog(ERROR, "cache lookup failed for opclass with OID %u", opcoid); > elog(ERROR, "cache lookup failed for operator family with OID %u", > opcForm->opcfamily); > elog(ERROR, "cache lookup failed for operator family with OID %u", objectId); > elog(ERROR, "cache lookup failed for domain with OID %u", > elog(ERROR, "cache lookup failed for collation with OID %u", objectId); > elog(ERROR, "cache lookup failed for operator with OID %u", objectId); > elog(ERROR, "cache lookup failed for type with OID %u", objectId); > elog(ERROR, "cache lookup failed for text search parser with OID %u", > elog(ERROR, "cache lookup failed for text search dictionary " "with > OID %u", objectId); > elog(ERROR, "cache lookup failed for text search template with OID %u", > elog(ERROR, "cache lookup failed for text search dictionary " "with > OID %u", objectId); > elog(ERROR, "cache lookup failed for opclass with OID %u", > elog(ERROR, "cache lookup failed for operator family with OID %u", > elog(ERROR, "cache lookup failure for transform with OID %u", > elog(ERROR, "cache lookup failure for language with OID %u", > elog(ERROR, "cache lookup failure for function with OID %u", > elog(ERROR, "cache lookup failure for function with OID %u", > elog(ERROR, "cache lookup failed for rewrite rule for view with OID > %u", viewoid) > > elog(ERROR, "cache lookup failed for range with type oid %u", > elog(ERROR, "cache lookup failed for rewrite rule with oid %u", > > G.8a. > Most are uppercase 'OID'. A few are lowercase 'oid' Modified > G.8b. > There is a mixture of "cache lookup failed" and "cache lookup failure" > -- should all be the same. Modified > G.8c. > A few above (e.g. role) have a different message text. Shouldn't those > also be "cache lookup failed"? Modified > G.9 GENERAL - ObjTree variables > > Often the ObjTree variable (for the deparse_XXX function return) is > given the name of the statement it is creating. > > Although it is good to be descriptive, often there is no need for long > variable names (e.g. 'createTransform' etc), because there is no > ambiguity anyway and it just makes for extra code characters and > unnecessary wrapping. IMO it would be better to just call everything > some short but *consistent* name across every function -- like 'stmt' > or 'json_ddl' or 'root' or 'ret' ... or whatever. Modified Thanks for the comments, the attached v52 patch has the changes for the same. Regards, Vignesh --000000000000cb887705efe04c32 Content-Type: text/x-patch; charset="US-ASCII"; name="v52-0005-Skip-ALTER-TABLE-subcommands-generated-for-Table.patch" Content-Disposition: attachment; filename="v52-0005-Skip-ALTER-TABLE-subcommands-generated-for-Table.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpakrph4 RnJvbSAwY2I2NGM1NjY5MjI2OTQ3MGM5YTE2NWIyZGU5MGM4Y2M4NjkwN2FmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTIgRGVjIDIwMjIgMDQ6Mjk6MzcgLTA1MDAKU3ViamVjdDogW1BBVENI IHY1MiA1LzddIFNraXAgQUxURVIgVEFCTEUgc3ViY29tbWFuZHMgZ2VuZXJhdGVkIGZvcgogVGFi bGVMaWtlQ2xhdXNlIGluIHRoZSBEREwgZGVwYXJzZXIgdG8gYXZvaWQgZHVwbGljYXRlZCBzdWJj b21tYW5kcy4KCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyB8IDEwICsr KysrKysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV91dGlsY21kLmMgfCAgMSArCiBzcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgIHwgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCAx MiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKaW5kZXggMDNiNTg3 NWRmMi4uYWEwNGNjZTAxOSAxMDA3NTUKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2Rl cGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCkBAIC0zMjgx LDggKzMyODEsMTggQEAgZGVwYXJzZV9BbHRlclJlbGF0aW9uKENvbGxlY3RlZENvbW1hbmQgKmNt ZCkKIAlib29sCQlpc3RhYmxlID0gZmFsc2U7CiAJTGlzdAkgICAqZXhwcnMgPSBOSUw7CiAJT2lk CQkJcmVsSWQgPSBjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZDsKKwlBbHRlclRhYmxlU3RtdCAq c3RtdCA9IE5VTEw7CiAKIAlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKwlz dG10ID0gKEFsdGVyVGFibGVTdG10ICopIGNtZC0+cGFyc2V0cmVlOworCUFzc2VydChJc0Eoc3Rt dCwgQWx0ZXJUYWJsZVN0bXQpKTsKKworCS8qCisJICogQUxURVIgVEFCTEUgc3ViY29tbWFuZHMg Z2VuZXJhdGVkIGZvciBUYWJsZUxpa2VDbGF1c2UgaXMgcHJvY2Vzc2VkIGluCisJICogdGhlIHRv cCBsZXZlbCBDUkVBVEUgVEFCTEUgY29tbWFuZDsgcmV0dXJuIGVtcHR5IGhlcmUuCisJICovCisJ aWYgKHN0bXQtPnRhYmxlX2xpa2UpCisJCXJldHVybiBOVUxMOwogCiAJcmVsID0gcmVsYXRpb25f b3BlbihyZWxJZCwgQWNjZXNzU2hhcmVMb2NrKTsKIAlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRl eHRfZm9yKFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3V0 aWxjbWQuYwppbmRleCBmNzQzY2Q1NDhjLi4xNjk2NzQ2OGI4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJz ZV91dGlsY21kLmMKQEAgLTEzOTcsNiArMTM5Nyw3IEBAIGV4cGFuZFRhYmxlTGlrZUNsYXVzZShS YW5nZVZhciAqaGVhcFJlbCwgVGFibGVMaWtlQ2xhdXNlICp0YWJsZV9saWtlX2NsYXVzZSkKIAkJ YXRjbWQtPmNtZHMgPSBhdHN1YmNtZHM7CiAJCWF0Y21kLT5vYmp0eXBlID0gT0JKRUNUX1RBQkxF OwogCQlhdGNtZC0+bWlzc2luZ19vayA9IGZhbHNlOworCQlhdGNtZC0+dGFibGVfbGlrZSA9IHRy dWU7CiAJCXJlc3VsdCA9IGxjb25zKGF0Y21kLCByZXN1bHQpOwogCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oCmluZGV4IDM0YmM2NDBmZjIuLjI2M2MwZTI3YzIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVz LmgKQEAgLTE5NzMsNiArMTk3Myw3IEBAIHR5cGVkZWYgc3RydWN0IEFsdGVyVGFibGVTdG10CiAJ TGlzdAkgICAqY21kczsJCQkvKiBsaXN0IG9mIHN1YmNvbW1hbmRzICovCiAJT2JqZWN0VHlwZQlv Ymp0eXBlOwkJLyogdHlwZSBvZiBvYmplY3QgKi8KIAlib29sCQltaXNzaW5nX29rOwkJLyogc2tp cCBlcnJvciBpZiB0YWJsZSBtaXNzaW5nICovCisJYm9vbCAgICAgICAgdGFibGVfbGlrZTsJCS8q IGludGVybmFsbHkgZ2VuZXJhdGVkIGZvciBUYWJsZUxpa2VDbGF1c2UgKi8KIH0gQWx0ZXJUYWJs ZVN0bXQ7CiAKIHR5cGVkZWYgZW51bSBBbHRlclRhYmxlVHlwZQotLSAKMi4zNC4xCgo= --000000000000cb887705efe04c32 Content-Type: text/x-patch; charset="US-ASCII"; name="v52-0004-Test-cases-for-DDL-replication.patch" Content-Disposition: attachment; filename="v52-0004-Test-cases-for-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpakrpg3 RnJvbSBkMTNhNDdhNDBmY2RlODE3Nzg0ZDM1OTBhMzFkNjJlZjcyYzk5ZTVkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTIgRGVjIDIwMjIgMDQ6MjU6MzggLTA1MDAKU3ViamVjdDogW1BBVENI IHY1MiA0LzddIFRlc3QgY2FzZXMgZm9yIERETCByZXBsaWNhdGlvbi4KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogLi4uL3N1YnNjcmlwdGlvbi90LzAzMl9kZGxfcmVwbGljYXRpb24ucGwg ICAgIHwgNDY1ICsrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDQ2NSBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2Rk bF9yZXBsaWNhdGlvbi5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRsX3Jl cGxpY2F0aW9uLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY2ZGNi MDEyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzJfZGRs X3JlcGxpY2F0aW9uLnBsCkBAIC0wLDAgKzEsNDY1IEBACisjIENvcHlyaWdodCAoYykgMjAyMiwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyMgUmVncmVzc2lvbiB0ZXN0cyBm b3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBERExzCisjCit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVz dDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+ aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0 YXJ0OworCitteSAkbm9kZV9zdWJzY3JpYmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCdzdWJzY3JpYmVyJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1p bmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitteSAkZGRsID0g IkNSRUFURSBUQUJMRSB0ZXN0X3JlcChpZCBpbnQgcHJpbWFyeSBrZXksIG5hbWUgdmFyY2hhciwg dmFsdWUgaW50ZWdlcik7IjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICRkZGwpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRlc3RfcmVwIFZBTFVFUyAoMSwgJ2RhdGExJywgMSk7Iik7Ciskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJGRkbCk7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9 ICRub2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQVUJMSUNBVElPTiBteXB1 YiBGT1IgQUxMIFRBQkxFUyB3aXRoIChwdWJsaXNoID0gJ2luc2VydCwgdXBkYXRlLCBkZWxldGUs IGRkbCcpOyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNS RUFURSBTVUJTQ1JJUFRJT04gbXlzdWIgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQ VUJMSUNBVElPTiBteXB1YjsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBmdWxseSBzeW5jaHJvbml6ZWQgdGhlIHRh YmxlLgorIyBUaGlzIHByZXZlbnRzIEFMVEVSIFRBQkxFIGNvbW1hbmQgYmVsb3cgZnJvbSBiZWlu ZyBleGVjdXRlZCBkdXJpbmcgdGFibGUgc3luY2hyb25pemF0aW9uLgorJG5vZGVfc3Vic2NyaWJl ci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorICAgIlNFTEVDVCBDT1VOVCgxKSA9IDAg RlJPTSBwZ19zdWJzY3JpcHRpb25fcmVsIHNyIFdIRVJFIHNyLnNyc3Vic3RhdGUgTk9UIElOICgn cycsICdyJykgQU5EIHNyLnNycmVsaWQgPSAndGVzdF9yZXAnOjpyZWdjbGFzcyIKKyk7CisKKyMg VGVzdCBBTFRFUiBUQUJMRSBBREQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBREQgYzQgaW50OyIpOworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoMiwg J2RhdGEyJywgMiwgMik7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215 c3ViJyk7CitteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBjNCA9IDI7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIEFERCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBEUk9QCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgRFJPUCBjNDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3JlcCB3aGVyZSBpZCA9IDI7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSB0ZXN0X3JlcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgRFJP UCByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBUWVBFCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxU RVIgdmFsdWUgVFlQRSB2YXJjaGFyIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgzLCAnZGF0YTMnLCAnMycpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF9yZXAgV0hFUkUgdmFsdWUgPSAnMyc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0FMVEVSIHRlc3RfcmVwIEFMVEVSIENPTFVNTiBUWVBFIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBERUZBVUxUCisjIENoZWNrIGlmIHdlIGhhdmUgdGhlIGRl ZmF1bHQgdmFsdWUgYWZ0ZXIgdGhlIGRpcmVjdCBpbnNlcnQgdG8gc3Vic2NyaWJlciBub2RlLgor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3Rf cmVwIEFMVEVSIENPTFVNTiB2YWx1ZSBTRVQgREVGQVVMVCAnZm9vJyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDQsICdkYXRhNCcp OyIpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIHZhbHVlIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA0OyIpOworaXMoJHJlc3VsdCwg J2ZvbycsICdBTFRFUiB0ZXN0X3JlcCBBTFRFUiBTRVQgREVGQVVMVCByZXBsaWNhdGVkJyk7CisK KyMgVGVzdCBBTFRFUiBUQUJMRSBBTFRFUiBEUk9QIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgZG9u J3QgaGF2ZSB0aGUgZGVmYXVsdCB2YWx1ZSBwcmV2aW91c2x5IGRlZmluZWQuCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIg Q09MVU1OIHZhbHVlIERST1AgREVGQVVMVDsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg1LCAnZGF0YTUnKTsiKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCB2YWx1ZSBJ UyBOVUxMIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA1OyIpOworaXMoJHJlc3VsdCwgcSh0KSwg J0FMVEVSIHRlc3RfcmVwIEFMVEVSIERST1AgREVGQVVMVCByZXBsaWNhdGVkJyk7CisKKyMgVGVz dCBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwKKyMgUmVtb3ZlIHRoZSBleGlzdGluZyBy ZWNvcmQgdGhhdCBjb250YWlucyBudWxsIHZhbHVlIGZpcnN0LgorbXkgKCRzdGRvdXQsICRzdGRl cnIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJP TSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVzdF9yZXAgQUxURVIgdmFsdWUgU0VUIE5PVCBOVUxM OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVT ICg2LCAnZGF0YTYnKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0 ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIg PX4gL0VSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4gXCJ2YWx1ZVwiIG9mIHJlbGF0aW9uIFwi dGVzdF9yZXBcIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50LworICBvciBkaWUgImZhaWxl ZCB0byByZXBsaWNhdGUgQUxURVIgVEFCTEUgQUxURVIgU0VUIE5PVCBOVUxMIjsKKworIyBUZXN0 IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgTk9UIE5VTEwKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBEUk9QIE5P VCBOVUxMOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor IyBJbnNlcnQgc2FtZSBkYXRhIHRoYXQgaGFzIE5VTEwgdmFsdWUuIFRoaXMgZmFpbGVkIGJlZm9y ZSBidXQgbm93IHNob3VsZCBzdWNjZWVkLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDYsICdkYXRhNicpOyIpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IHZhbHVlIElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDY7Iik7CitpcygkcmVzdWx0 LCBxKHQpLCAiQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBOT1QgTlVMTCByZXBsaWNhdGVkIik7 CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgVU5MT0dHRUQKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICdBTFRFUiBUQUJMRSB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQ7Jyk7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVT ICg3LCAnZGF0YTcnLCAnNycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA3OyIpOworaXMo JHJlc3VsdCwgcXEoMCksICdBTFRFUiB0ZXN0X3JlcCBTRVQgVU5MT0dHRUQgcmVwbGljYXRlZCcp OworCisjIFRlc3QgQUxURVIgVEFCTEUgU0VUIExPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBMT0dHRUQ7Jyk7Cisk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICg4 LCAnZGF0YTgnLCAnOCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF9yZXAgV0hFUkUgaWQgPSA4OyIpOworaXMoJHJl c3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBTRVQgTE9HR0VEIHJlcGxpY2F0ZWQnKTsKKwor IyBUZXN0IENSRUFURSBUQUJMRSBhbmQgRE1MIGNoYW5nZXMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChhIGludCwgYiB2YXJjaGFyKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIHRtcCBpcyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIHZhbHVlcyAoMSwgJ2EnKSIpOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCB2 YWx1ZXMgKDIsICdiJykiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlz dWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDIpLCAnRE1MIENo YW5nZXMgdG8gdG1wIGFyZSByZXBsaWNhdGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSU5I RVJJVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFC TEUgdG1wMiAoYzMgaW50KSBJTkhFUklUUyAodG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAyIFZBTFVFUyAoMSwgJ2EnLCAxKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMic7Iik7CitpcygkcmVzdWx0 LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJTkhFUklUUyBpcyByZXBsaWNhdGVkJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgZnJvbSB0bXAyOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdpbnNlcnRpbmcgc29tZSBkYXRh IHRvIGluaGVyaXRlZCB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAyIik7CisKKyMgVGVzdCBDUkVBVEUgVEFC TEUgTElLRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAzIChjMyBpbnQsIExJS0UgdG1wKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAzIFZBTFVFUyAoMSwgMSwgJ2EnKTsiKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBm cm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wMyc7Iik7CitpcygkcmVzdWx0LCBx cSgxKSwgJ0NSRUFURSBUQUJMRSBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRt cDM7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydCBzb21lIGRhdGEgdG8gYSB0YWJsZSBk ZWZpbmVkIHdpdGggTElLRSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAzIik7CisKKyMgVGVzdCBEUk9QIFRBQkxFCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikg ZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBx cSgwKSwgJ1RBQkxFIHRtcCBpcyBkcm9wcGVkJyk7CisKKyMgVGVzdCBDUkVBVEUgVU5MT0dHRUQg VEFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVU5M T0dHRUQgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gcGdfdGFibGVz IHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUg VU5MT0dHRUQgVEFCTEUgaXMgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9t IHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDApLCAnaW5zZXJ0aW5nIGRhdGEgdG8gdW5sb2dnZWQg dGFibGUgaXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBJRiBOT1QgRVhJU1RTCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBkYXRhIHRv IGEgdGFibGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVY SVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUgYSB0YWJsZQorIyB3aGVuIHdlIGhhdmUg dGhlIHRhYmxlIG9uIHRoZSBzdWJzY3JpYmVyIGluIGFkdmFuY2UsIGFuZCBpZiB3ZSBzdWNjZWVk CisjIGluIHJlcGxpY2F0aW5nIGNoYW5nZXMuKQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHRt cCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFx KDEpLCAnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgcmVwbGljYXRlZCcpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyAoY2hlY2sgaWYgd2Ugc2tpcCB0byBjcmVhdGUg YSB0YWJsZQorIyB3aGVuIHdlIGhhdmUgdGhlIHRhYmxlIG9uIHRoZSBwdWJsaXNoZXIsIGJ1dCBu b3Qgb24gdGhlIHN1YnNjcmliZXIuKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgdG1wIChpZCBp bnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJ TlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdD UkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFU RSBUQUJMRSB3aXRoIGNvbGxhdGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgdG1wIChuYW1lIHRleHQgQ09MTEFURSBcIkNcIik7Iik7Ciskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVF UyAoJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1Yicp OworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvbGxhdGlvbl9uYW1lIEZST00gaW5mb3JtYXRpb25fc2NoZW1hLmNvbHVtbnMgV0hFUkUg dGFibGVfbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3VsdCwgcXEoQyksICdDUkVBVEUgVEFCTEUg d2l0aCBjb2xsYXRlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGgg bmFtZWQgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCBDT05TVFJBSU5UIFwibXVzdCBiZSBiaWdnZXIgdGhh biAxMFwiIENIRUNLIChpZCA+IDEwKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMg Y2hlY2sgY29uc3RyYWludCAibXVzdCBiZSBiaWdnZXIgdGhhbiAxMCIvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBuYW1lZCBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsK KworIyBUZXN0IENSRUFURSBUQUJMRSB3aXRoIHZhcmlvdXMgdHlwZXMgb2YgY29uc3RyYWludHMu CisjIE5PVCBOVUxMIGNvbnN0cmFpbnQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBOT1QgTlVMTCk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbnVsbCB2 YWx1ZSBpbiBjb2x1bW4gIm5hbWUiIG9mIHJlbGF0aW9uICJ0bXAiIHZpb2xhdGVzIG5vdC1udWxs IGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBub24gbnVsbCBjb25z dHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBOVUxMIGNvbnN0cmFpbnQKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBp bnQsIG5hbWUgdGV4dCBOVUxMKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgbmFtZSBJUyBOVUxMIEZST00gdG1wOyIpOwor aXMoJHJlc3VsdCwgcXEodCksICJDUkVBVEUgVEFCTEUgd2l0aCBOVUxMIGNvbnN0cmFpbnQgcmVw bGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wIik7CisKKyMgQ0hFQ0sgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgcHJvZHVjdF9hbWUg dGV4dCwgcHJpY2UgaW50IENIRUNLIChwcmljZSA+IDApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3Rn cmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nLCAtMTAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX3ByaWNlX2NoZWNr Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIENIRUNLIGNvbnN0cmFpbnQiOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOwor CisjIERFRkFVTFQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQsIG5hbWUgdGV4dCBERUZBVUxUICdmb28nKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Cisk cmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg bmFtZSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKGZvbyksICJDUkVBVEUgVEFCTEUgd2l0 aCBkZWZhdWx0IHZhbHVlIHJlcGxpY2F0ZWQiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFVOSVFVRSBjb25zdHJhaW50Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAo aWQgaW50IFVOSVFVRSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1 bmlxdWUgY29uc3RyYWludCAidG1wX2lkX2tleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxp Y2F0ZSBjb25zdHJhaW50IGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBQUklNQVJZIEtFWQor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAg KGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnYmFy Jyk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRz dGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjog IGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5 Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHByaW1hcnkga2V5IGF0IGNyZWF0aW5n IHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRB QkxFIHRtcDsiKTsKKworIyBFWENMVURFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIGNpcmNsZXMgKGMgY2lyY2xlLCBFWENMVURFIFVTSU5HIGdp c3QgKGMgV0lUSCAmJikpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIGNpcmNsZXMgVkFMVUVTICgnPCgxLCAxKSwgMT4nOjpjaXJjbGUpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vi c2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8 KDEsIDEpLCAxPic6OmNpcmNsZSk7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJ CQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91dCk7Cisk c3RkZXJyID1+IC9FUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1ZSB2aW9sYXRlcyBleGNsdXNp b24gY29uc3RyYWludCAiY2lyY2xlc19jX2V4Y2wiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgRVhDTFVERSBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBjaXJjbGVzIik7CisKKyMgUkVGRVJFTkNFUwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBwcm9k dWN0IChpZCBpbnQgUFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gcHJvZHVjdCBWQUxVRVMgKDEsICdm b28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyBwcm9kdWN0IFZBTFVFUyAoMiwgJ2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklN QVJZIEtFWSwgcHJvZHVjdF9pZCBpbnQgUkVGRVJFTkNFUyBwcm9kdWN0IChpZCkpIik7Ciskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVy LT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBvcmRlcnMgVkFMVUVTICgxLCAxMCkiLAor CQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwK KwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgaW5zZXJ0 IG9yIHVwZGF0ZSBvbiB0YWJsZSAib3JkZXJzIiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJh aW50ICJvcmRlcnNfcHJvZHVjdF9pZF9ma2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGlj YXRlIFJFRkVSRU5DRVMgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgb3JkZXJzIik7Ciskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBwcm9kdWN0Iik7CisKKyMgREVGRVJS QUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJM RSB0bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxV RVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNoZWNrIG9mIGRlZmVycmFibGUg Y2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0 bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRlIGEgdGVzdCB0aGF0IHNob3Vs ZCBmYWlsIGZvciBJTklUSUFMTFkgSU1NRURJQVRFKHRoZSBkZWZhdWx0KQorJG5vZGVfc3Vic2Ny aWJlci0+cHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRtcCBTRVQgaWQgPSBp ZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7CitERUxFVEUgRlJP TSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSwgb25fZXJyb3Jfc3RvcCA9PiAwLCBzdGRl cnIgPT4gXCRzdGRlcnIsIHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjog IGR1cGxpY2F0ZSBrZXkgdmFsdWUgdmlvbGF0ZXMgdW5pcXVlIGNvbnN0cmFpbnQgInRtcF9wa2V5 Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIERFRkVSUkFCTEUgYXQgY3JlYXRpbmcg dGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIE5PVCBERUZFUlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIE5PVCBE RUZFUlJBQkxFLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgy LCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 Ciskbm9kZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9 PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VS Uk9SOiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1w X3BrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgTk9UIERFRkVSUkFCTEUgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIERFRkVSUkFCTEUgYW5kIElOSVRJQUxMWSBERUZFUlJF RAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0 bXAgKGlkIGludCBQUklNQVJZIEtFWSBERUZFUlJBQkxFIElOSVRJQUxMWSBERUZFUlJFRCwgbmFt ZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNF UlQgSU5UTyB0bXAgVkFMVUVTICgxLCAnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMiwgJ2JhcicpOyIpOwor JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworIyBRdWljayBjaGVj ayBvZiBkZWZlcnJhYmxlIGNsYXVzZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJVUERBVEUgdG1wIFNFVCBpZCA9IGlkICsgMTsiKTsKKyMgQWxzbywgZXhlY3V0ZSBh IHRlc3QgdGhhdCBzaG91bGQgc3VjY2VlZCBmb3IgSU5JVElBTExZIERFRkVSUkVECiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCitCRUdJTjsKK1VQREFURSB0bXAg U0VUIGlkID0gaWQgKyAxOworSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMywgJ2Zvb2JhcicpOwor REVMRVRFIEZST00gdG1wIFdIRVJFIGlkID0gMzsKK0NPTU1JVDsKKykpOworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3Qg Q1JFQVRFIFRBQkxFIHdpdGggdGFibGUgY29uc3RyYWludAorIyBXZSB3aWxsIHNldCB0d28gY2hl Y2tzIGFuZCBjb25kdWN0IHR3byBpbnNlcnRzIHRoYXQgc2hvdWxkIGZhaWwgcmVzcGVjdGl2ZWx5 LgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFRBQkxF IHRtcCAocHJpY2UgaW50LCBkaXNjb3VudGVkX3ByaWNlIGludCwgQ0hFQ0sgKGRpc2NvdW50ZWRf cHJpY2UgPiAwIEFORCBwcmljZSA+IGRpc2NvdW50ZWRfcHJpY2UpKTsiKTsKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEwMCwgMCk7IiwKKwkJCQkJICAg b25fZXJyb3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAg IHN0ZG91dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJl bGF0aW9uICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9y IGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChmaXJzdCBjb25kaXRp b24pIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDUwLCAxMDApOyIsCisJCQkJCSAgIG9uX2Vycm9y X3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQg PT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAi dG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfY2hlY2siLworICBvciBkaWUgImZh aWxlZCB0byByZXBsaWNhdGUgdGFibGUgY29uc3RyYWludCAoc2Vjb25kIGNvbmRpdGlvbikgYXQg Y3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFdJVEggc3Ryb3JhZ2Vf cGFyYW1ldGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcCAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9yID0gODApOyIpOworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVf c3Vic2NyaWJlci0+cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19j bGFzcyBXSEVSRSByZWxuYW1lID0gJ3RtcCc7IiwKKwkJCQkJICAgb25fZXJyb3Jfc3RvcCA9PiAw LAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91dCA9PiBcJHN0ZG91 dCk7Ciskc3Rkb3V0ID1+IC97ZmlsbGZhY3Rvcj04MH0vCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBzdG9yYWdlIG9wdGlvbiI7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSB3aXRoIHN0b3JhZ2VfcGFyYW1ldGVyIHJlcGxpY2F0 ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxF IHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBUQUJMRVNQQUNFIChjcmVhdGluZyBhIHRh Ymxlc3BhY2UgaXMgbm90IHJlcGxpY2F0ZWQpCisjIFByZXBhcmUgdGhlIGRpcmVjdG9yaWVzIGZv ciB0aGUgcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGZpcnN0LgorbXkgKCRiYXNlZGlyLCAkdGFi bGVzcGFjZV9kaXIpOworCiskYmFzZWRpciA9ICRub2RlX3B1Ymxpc2hlci0+YmFzZWRpcjsKKyR0 YWJsZXNwYWNlX2RpciA9ICIkYmFzZWRpci90YmxzcGNfcHViIjsKK21rZGlyKCR0YWJsZXNwYWNl X2Rpcik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFU1BBQ0UgbXl0YmxzcGMgTE9DQVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CiskYmFzZWRp ciA9ICRub2RlX3N1YnNjcmliZXItPmJhc2VkaXI7CiskdGFibGVzcGFjZV9kaXIgPSAiJGJhc2Vk aXIvdGJsc3BjX3N1YiI7Citta2RpciAoJHRhYmxlc3BhY2VfZGlyKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFU1BBQ0UgbXl0YmxzcGMgTE9D QVRJT04gJyR0YWJsZXNwYWNlX2Rpcic7Iik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQpIFRBQkxFU1BBQ0UgbXl0Ymxz cGM7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElO VE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NS RUFURSBUQUJMRSBUQUJMRVNQQUNFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsiKTsKKworIyBUZXN0IENSRUFURSBU WVBFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUg bXl0eXBlIEFTIChpZCBpbnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCBPRiBteXR5cGU7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwg J2JhcicpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOwor JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdDUkVBVEUgVEFCTEUg T0YgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IkRST1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUWVBFIG15dHlwZSIpOworCisjIFRlc3QgQ1JFQVRFIEVOVU0gVFlQRQorJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15ZW51bXR5cGUg QVMgRU5VTSAoJ25ldycsICdvcGVuJywgJ2Nsb3NlZCcpOyIpOworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKHN0YXR1cyBteWVudW10eXBlKTsiKTsKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVT ICgnbmV3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgKiBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKG5ldyksICdDUkVBVEUgVEFCTEUgT0Yg cmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRS T1AgVEFCTEUgdG1wIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi RFJPUCBUWVBFIG15ZW51bXR5cGUiKTsKKworIyBUZXN0IENSRUFURSBSQU5HRSBUWVBFCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgZmxvYXQ4X3Jh bmdlIEFTIFJBTkdFIChzdWJ0eXBlID0gZmxvYXQ4LCBzdWJ0eXBlX2RpZmYgPSBmbG9hdDhtaSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAodmFsIGZs b2F0OF9yYW5nZSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi aW5zZXJ0IGludG8gdG1wIHZhbHVlcyhmbG9hdDhfcmFuZ2UoLTEyLjM0LCAnMS4xMTExMTNlMycp KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCAqIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoWy0xMi4zNCwxMTExLjExM1wpKSwgJ0NSRUFURSBU QUJMRSBPRiByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJEUk9QIFRZUEUgZmxvYXQ4X3JhbmdlIik7CisKKyMgVGVzdCBDUkVBVEUgQkFTRSBE QVRBIFRZUEUgYW5kIHVzZSBpdCBpbiB0YWJsZSBkZWZpbml0aW9uCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCitDUkVBVEUgVFlQRSBpbnQ0MjsKK0NSRUFURSBGVU5D VElPTiBpbnQ0Ml9pbihjc3RyaW5nKQorICAgUkVUVVJOUyBpbnQ0MgorICAgQVMgJ2ludDRpbicK KyAgIExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgRlVOQ1RJT04g aW50NDJfb3V0KGludDQyKQorICAgUkVUVVJOUyBjc3RyaW5nCisgICBBUyAnaW50NG91dCcKKyAg IExBTkdVQUdFIGludGVybmFsIFNUUklDVCBJTU1VVEFCTEU7CitDUkVBVEUgVFlQRSBpbnQ0MiAo CisgICBpbnRlcm5hbGxlbmd0aCA9IDQsCisgICBpbnB1dCA9IGludDQyX2luLAorICAgb3V0cHV0 ID0gaW50NDJfb3V0LAorICAgYWxpZ25tZW50ID0gaW50NCwKKyAgIGRlZmF1bHQgPSA0MiwKKyAg IHBhc3NlZGJ5dmFsdWUKKyk7CitDUkVBVEUgVEFCTEUgdG1wIChmMSBpbnQ0Mik7CitJTlNFUlQg SU5UTyB0bXAgREVGQVVMVCBWQUxVRVM7CisiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCAqIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoNDIpLCAn Q1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVFlQRSBpbnQ0MiBjYXNjYWRlIik7CisKK3Bhc3MgIkRETCBy ZXBsaWNhdGlvbiB0ZXN0cyBwYXNzZWQ6IjsKKworJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKKyRu b2RlX3B1Ymxpc2hlci0+c3RvcDsKKworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --000000000000cb887705efe04c32 Content-Type: text/x-patch; charset="US-ASCII"; name="v52-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Disposition: attachment; filename="v52-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpakrpg2 RnJvbSBiZDE5NmQ3OGZiYzE4MTM2Nzk1NjQxMzQ2ZDM0ZjdkYWJlZWI2N2I3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTUgRGVjIDIwMjIgMjA6NTQ6MDIgKzA1MzAKU3ViamVjdDogW1BBVENIIHY1MiAzLzdd IFN1cHBvcnQgQ1JFQVRFIFRBQkxFIEFTIFNFTEVDVCBJTlRPCgpUaGUgbWFpbiBpZGVhIG9mIHJl cGxpY2F0aW5nIHRoZSBDUkVBVEUgVEFCTEUgQVMgaXMgdGhhdCB3ZSBkZXByYXNlIHRoZSBDUkVB VEUKVEFCTEUgQVMgaW50byBhIHNpbXBsZSBDUkVBVEUgVEFCTEUod2l0aG91dCBzdWJxdWVyeSkg Y29tbWFuZCBhbmQgV0FMIGxvZyBpdAphZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kIGJlZm9y ZSB3cml0aW5nIGRhdGEgaW50byB0aGUgdGFibGUgYW5kIHJlcGxpY2F0ZQp0aGUgaW5jb21pbmcg d3JpdGVzIGxhdGVyIGFzIG5vcm1hbCBJTlNFUlRzLiBJbiB0aGlzIGFwcG9yYWNoLCB3ZSBkb24n dCBleGVjdXRlCnRoZSBzdWJxdWVyeSBvbiBzdWJzY3JpYmVyIHNvIHRoYXQgZG9uJ3QgbmVlZCB0 byBtYWtlIHN1cmUgYWxsIHRoZSBvYmplY3RzCnJlZmVyZW5jZWQgaW4gdGhlIHN1YnF1ZXJ5IGFs c28gZXhpc3RzIGluIHN1YnNjcmliZXIuIEFuZCBUaGlzIGFwcHJvYWNoIHdvcmtzCmZvciBhbGwg a2luZCBvZiBjb21tYW5kcyhlLmcuIENSQUVURSBUQUJMRSBBUyBbU0VMRUNUXVtFWEVDVVRFXVtW QUxVRVNdKQoKSW50cm9kdWNpbmcgYSBuZXcgdHlwZSBvZiBldmVudCB0cmlnZ2VyICJ0YWJsZV9p bml0X3dyaXRlIi4gd2hpY2ggd291bGQgYmUgZmlyZWQKZm9yIENSRUFURSBUQUJMRSBBUy9TRUxF Q1QgSU5UTyBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgYW5kCmJlZm9yZSBhbnkgb3RoZXIgbW9k aWZpY2F0aW9uLiB3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGluIHRoZSB0YWJsZV9pbml0X3dyaXRl IGV2ZW50CnRyaWdnZXIgYW5kIFdBTCBsb2cgdGhlIGRlcGFyc2VkIGpzb24gc3RyaW5nLiBUaGUg d2Fsc2VuZGVyIHdpbGwgc2VuZCB0aGUKc3RyaW5nIHRvIHN1YnNjcmliZXIuIEFuZCBpbmNvbWlu ZyBJTlNFUlRzIHdpbGwgYWxzbyBiZSByZXBsaWNhdGVkLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMgICAgICAgIHwgIDEwICsrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9kZGxf ZGVwYXJzZS5jICAgICB8ICAyMyArKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYyAgIHwgMTkyICsrKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5jIHwgICA5ICsrCiBzcmMvYmFja2VuZC90Y29wL3V0aWxpdHku YyAgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNoZS5j ICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICB8ICAg MyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmggICB8ICAgNCArCiBzcmMv aW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oICAgICB8ICAgOSArLQogc3JjL2luY2x1ZGUv dXRpbHMvZXZ0Y2FjaGUuaCAgICAgICAgICAgfCAgIDMgKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDI1 MiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2NyZWF0ZWFzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jCmlu ZGV4IDE1MmMyOWI1NTEuLmI3Nzk1ZGE4N2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2NyZWF0ZWFzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwpAQCAt MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy90b2FzdGluZy5oIgogI2luY2x1ZGUgImNvbW1hbmRzL2NyZWF0ZWFzLmgiCisjaW5j bHVkZSAiY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImNvbW1hbmRzL21hdHZp ZXcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMv dGFibGVjbWRzLmgiCkBAIC0xNDMsNiArMTQ0LDE1IEBAIGNyZWF0ZV9jdGFzX2ludGVybmFsKExp c3QgKmF0dHJMaXN0LCBJbnRvQ2xhdXNlICppbnRvKQogCQlTdG9yZVZpZXdRdWVyeShpbnRvUmVs YXRpb25BZGRyLm9iamVjdElkLCBxdWVyeSwgZmFsc2UpOwogCQlDb21tYW5kQ291bnRlckluY3Jl bWVudCgpOwogCX0KKwllbHNlCisJeworCQkvKgorCQkgKiBGaXJlIHRoZSB0cmlnZ2VyIGZvciB0 YWJsZV9pbml0X3dyaXRlIGFmdGVyIGNyZWF0aW5nIHRoZSB0YWJsZSBzbworCQkgKiB0aGF0IHdl IGNhbiBhY2Nlc3MgdGhlIGNhdGFsb2cgaW5mbyBhYm91dCB0aGUgbmV3bHkgY3JlYXRlZCB0YWJs ZQorCQkgKiBpbiB0aGUgdHJpZ2dlciBmdW5jdGlvbi4KKwkJICovCisJCUV2ZW50VHJpZ2dlclRh YmxlSW5pdFdyaXRlKChOb2RlICopIGNyZWF0ZSwgaW50b1JlbGF0aW9uQWRkcik7CisJfQogCiAJ cmV0dXJuIGludG9SZWxhdGlvbkFkZHI7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpp bmRleCBiODYzMjYwYTU2Li4wM2I1ODc1ZGYyIDEwMDc1NQotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNl LmMKQEAgLTgzNDEsNiArODM0MSwyNiBAQCBkZXBhcnNlX1R5cGVfVHlwbW9kX091dChGb3JtX3Bn X3R5cGUgdHlwRm9ybSkKIAlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKIH0KIAorLyoK KyAqIERlcGFyc2UgQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKgorICogZGVwYXJzZV9DcmVh dGVTdG10IGRvIHRoZSBhY3R1YWwgd29yayBhcyB3ZSBkZXBhcnNlIHRoZSBmaW5hbCBDcmVhdGVT dG10IGZvcgorICogQ1JFQVRFIFRBQkxFIEFTIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5 cGUgPT0gU0NUX0NyZWF0ZVRhYmxlQXMpOworCisJcGFyc2V0cmVlID0gY21kLT5kLmN0YXMucmVh bF9jcmVhdGU7CisJb2JqZWN0SWQgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzLm9iamVjdElkOworCisJ cmV0dXJuIGRlcGFyc2VfQ3JlYXRlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKK30KKwogCiAv KgogICogRGVwYXJzZSB0aGUgdHlwZSBhbmFseXplIG9wdGlvbi4KQEAgLTkwOTksNiArOTExOSw5 IEBAIGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCwgYm9vbCB2 ZXJib3NlX21vZGUpCiAJCWNhc2UgU0NUX0dyYW50OgogCQkJdHJlZSA9IGRlcGFyc2VfR3JhbnRT dG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUg PSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNtZCk7CisJCQlicmVhazsKIAkJY2FzZSBTQ1Rf QWx0ZXJPcEZhbWlseToKIAkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyT3BGYW1pbHkoY21kKTsKIAkJ CWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCmluZGV4IDUzODU1ZjUxZmYu LmFiN2NkNTlmNGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKQEAgLTEzMyw3 ICsxMzMsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIoQ3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkK IAlpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0IikgIT0gMCAm JgogCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRsX2NvbW1hbmRfZW5kIikgIT0gMCAmJgog CQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSAhPSAwICYmCi0JCXN0cmNtcChz dG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgIT0gMCkKKwkJc3RyY21wKHN0bXQtPmV2 ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAhPSAwICYmCisJCXN0cmNtcChzdG10LT5ldmVudG5h bWUsICJ0YWJsZV9pbml0X3dyaXRlIikgIT0gMCkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCiAJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGV2 ZW50IG5hbWUgXCIlc1wiIiwKQEAgLTE1OSw3ICsxNjAsOCBAQCBDcmVhdGVFdmVudFRyaWdnZXIo Q3JlYXRlRXZlbnRUcmlnU3RtdCAqc3RtdCkKIAkvKiBWYWxpZGF0ZSB0YWcgbGlzdCwgaWYgYW55 LiAqLwogCWlmICgoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX3N0YXJ0Iikg PT0gMCB8fAogCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgImRkbF9jb21tYW5kX2VuZCIpID09 IDAgfHwKLQkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIpID09IDApCisJCSBz dHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAic3FsX2Ryb3AiKSA9PSAwIHx8CisJCSBzdHJjbXAoc3Rt dC0+ZXZlbnRuYW1lLCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCiAJCSYmIHRhZ3MgIT0gTlVM TCkKIAkJdmFsaWRhdGVfZGRsX3RhZ3MoInRhZyIsIHRhZ3MpOwogCWVsc2UgaWYgKHN0cmNtcChz dG10LT5ldmVudG5hbWUsICJ0YWJsZV9yZXdyaXRlIikgPT0gMApAQCAtNTg1LDcgKzU4Nyw4IEBA IEV2ZW50VHJpZ2dlckNvbW1vblNldHVwKE5vZGUgKnBhcnNldHJlZSwKIAkJZGJndGFnID0gQ3Jl YXRlQ29tbWFuZFRhZyhwYXJzZXRyZWUpOwogCQlpZiAoZXZlbnQgPT0gRVZUX0RETENvbW1hbmRT dGFydCB8fAogCQkJZXZlbnQgPT0gRVZUX0RETENvbW1hbmRFbmQgfHwKLQkJCWV2ZW50ID09IEVW VF9TUUxEcm9wKQorCQkJZXZlbnQgPT0gRVZUX1NRTERyb3AgfHwKKwkJCWV2ZW50ID09IEVWVF9U YWJsZUluaXRXcml0ZSkKIAkJewogCQkJaWYgKCFjb21tYW5kX3RhZ19ldmVudF90cmlnZ2VyX29r KGRiZ3RhZykpCiAJCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgY29tbWFuZCB0YWcgXCIlc1wi IiwgR2V0Q29tbWFuZFRhZ05hbWUoZGJndGFnKSk7CkBAIC04NjgsNiArODcxLDE4MyBAQCBFdmVu 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 LyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERlcGFy c2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1bQor cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1MpCit7 CisJY2hhcgkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJY2hhcgkgICAq anNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJ CWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwlj bWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCUFzc2VydChj bWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9y IGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhIHRlbXBvcmFyeQorCSAqIHRhYmxlLgor CSAqCisJICogV2Ugd2lsbCBnZW5lcmF0ZSB3YWwgbG9ncyBmb3IgdW5sb2dnZWQgdGFibGVzIHNv IHRoYXQgdW5sb2dnZWQgdGFibGVzCisJICogY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJl ZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzIG1ha2VzIGl0CisJICogcG9zc2libGUgdG8g ZGlyZWN0bHkgcmVwbGF5IHRoZSBTRVQgTE9HR0VEIGNvbW1hbmQgYW5kIHRoZSBpbmNvbWluZwor CSAqIHJld3JpdGUgbWVzc2FnZSB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IHRhYmxlLgorCSAqLwor CWlmIChyZWxwZXJzaXN0ID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCXJldHVybiBQb2ludGVy R2V0RGF0dW0oTlVMTCk7CisKKwkvKiBEZXBhcnNlIHRoZSBEREwgY29tbWFuZCBhbmQgV0FMIGxv ZyBpdCB0byBhbGxvdyBkZWNvZGluZyBvZiB0aGUgc2FtZS4gKi8KKwlqc29uX3N0cmluZyA9IGRl cGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJaWYgKGpzb25fc3RyaW5nICE9 IE5VTEwpCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5h ZGRyZXNzLm9iamVjdElkLCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3Ry bGVuKGpzb25fc3RyaW5nKSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsK K30KKworLyoKKyAqIEZpcmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2b2lk CitFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0QWRk cmVzcyBhZGRyZXNzKQoreworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0YSB0 cmlnZGF0YTsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUgRXZl bnRUcmlnZ2VyRERMQ29tbWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2ZW50 CisJICogdHJpZ2dlcnMgYXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICovCisJ aWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRvIG5v dGhpbmcgaWYgb3VyIHN0YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYgdGhl cmUKKwkgKiB3ZXJlbid0IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3RhcnQg b2YgdGhlIGN1cnJlbnQgRERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVyZWZv cmUgc2VlbSBvcHRpb25hbCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBFdmVu dFRyaWdnZXJDb21tb25TZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRuJ3Qg ZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZSkKKwkJcmV0dXJuOworCisJLyogRG8gbm90aGluZyBpZiBubyBj b21tYW5kIHdhcyBjb2xsZWN0ZWQuICovCisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmN1cnJlbnRDb21tYW5kKQorCQlyZXR1cm47CisKKwljb21tYW5kID0gY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCXJ1bmxpc3QgPSBFdmVudFRyaWdnZXJDb21t b25TZXR1cChjb21tYW5kLT5wYXJzZXRyZWUsCisJCQkJCQkJCQkgIEVWVF9UYWJsZUluaXRXcml0 ZSwKKwkJCQkJCQkJCSAgInRhYmxlX2luaXRfd3JpdGUiLAorCQkJCQkJCQkJICAmdHJpZ2RhdGEp OworCWlmIChydW5saXN0ID09IE5JTCkKKwkJcmV0dXJuOworCisJLyogU2V0IHRoZSByZWFsIENy ZWF0ZVRhYmxlIHN0YXRtZW50IGFuZCBvYmplY3QgYWRkcmVzcyAqLworCWNvbW1hbmQtPmQuY3Rh cy5yZWFsX2NyZWF0ZSA9IHJlYWxfY3JlYXRlOworCWNvbW1hbmQtPmQuY3Rhcy5hZGRyZXNzID0g YWRkcmVzczsKKworCS8qIFJ1biB0aGUgdHJpZ2dlcnMuICovCisJRXZlbnRUcmlnZ2VySW52b2tl KHJ1bmxpc3QsICZ0cmlnZGF0YSk7CisKKwkvKiBDbGVhbnVwLiAqLworCWxpc3RfZnJlZShydW5s aXN0KTsKKworCS8qCisJICogTWFrZSBzdXJlIGFueXRoaW5nIHRoZSBldmVudCB0cmlnZ2VycyBk aWQgd2lsbCBiZSB2aXNpYmxlIHRvIHRoZSBtYWluCisJICogY29tbWFuZC4KKwkgKi8KKwlDb21t YW5kQ291bnRlckluY3JlbWVudCgpOworfQorCiAvKgogICogSW52b2tlIGVhY2ggZXZlbnQgdHJp Z2dlciBpbiBhIGxpc3Qgb2YgZXZlbnQgdHJpZ2dlcnMuCiAgKi8KQEAgLTExNDksNyArMTMyOSw4 IEBAIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9pZCkKIAkgKi8KIAlyZXR1cm4gKEV2ZW50 Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApICE9IE5JTCkgfHwKIAkJKEV2ZW50Q2FjaGVMb29rdXAo RVZUX1RhYmxlUmV3cml0ZSkgIT0gTklMKSB8fAotCQkoRXZlbnRDYWNoZUxvb2t1cChFVlRfRERM Q29tbWFuZEVuZCkgIT0gTklMKTsKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX0RETENvbW1hbmRF bmQpICE9IE5JTCkgfHwKKwkJKEV2ZW50Q2FjaGVMb29rdXAoRVZUX1RhYmxlSW5pdFdyaXRlKSAh PSBOSUwpOwogfQogCiAvKgpAQCAtMTg2OCw2ICsyMDQ5LDcgQEAgcGdfZXZlbnRfdHJpZ2dlcl9k ZGxfY29tbWFuZHMoUEdfRlVOQ1RJT05fQVJHUykKIAkJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6 CiAJCQljYXNlIFNDVF9DcmVhdGVPcENsYXNzOgogCQkJY2FzZSBTQ1RfQWx0ZXJUU0NvbmZpZzoK KwkJCWNhc2UgU0NUX0NyZWF0ZVRhYmxlQXM6CiAJCQkJewogCQkJCQljaGFyCSAgICppZGVudGl0 eTsKIAkJCQkJY2hhcgkgICAqdHlwZTsKQEAgLTE4ODUsNiArMjA2Nyw4IEBAIHBnX2V2ZW50X3Ry aWdnZXJfZGRsX2NvbW1hbmRzKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQkJCQlhZGRyID0gY21kLT5k LmNyZWF0ZW9wYy5hZGRyZXNzOwogCQkJCQllbHNlIGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VFNDb25maWcpCiAJCQkJCQlhZGRyID0gY21kLT5kLmF0c2NmZy5hZGRyZXNzOworCQkJCQllbHNl IGlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVyVFNDb25maWcpCisJCQkJCQlhZGRyID0gY21kLT5k LmN0YXMuYWRkcmVzczsKIAogCQkJCQkvKgogCQkJCQkgKiBJZiBhbiBvYmplY3Qgd2FzIGRyb3Bw ZWQgaW4gdGhlIHNhbWUgY29tbWFuZCB3ZSBtYXkgZW5kCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5jCmluZGV4IDExZDI4MDE3ZTQuLmQ0N2Q4ZTA3MTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0xMDIwLDYgKzEwMjAsMTEgQEAgQ3JlYXRlUHVi bGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQgKnN0bXQp CiAJCQlDTURUQUdfU0VDVVJJVFlfTEFCRUwsCiAJfTsKIAorCUNvbW1hbmRUYWcJaW5pdF9jb21t YW5kc1tdID0geworCQlDTURUQUdfQ1JFQVRFX1RBQkxFX0FTLAorCQlDTURUQUdfU0VMRUNUX0lO VE8KKwl9OworCiAJCS8qIENyZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIg Ki8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5k X2NvbW1hbmRzLAogCQkJCQkJCQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVi b2lkKTsKQEAgLTEwMzEsNiArMTAzNiwxMCBAQCBDcmVhdGVQdWJsaWNhdGlvbihQYXJzZVN0YXRl ICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJLyogQ3JlYXRlIHRoZSB0 YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KIAkJQ3JlYXRlRERMUmVwbGljYUV2ZW50VHJp Z2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCiAJCQkJCQkJCQkgbGVuZ3Ro b2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVhdGUgdGhl IHRhYmxlX2luaXRfd3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExSZXBsaWNhRXZl bnRUcmlnZ2VyKCJ0YWJsZV9pbml0X3dyaXRlIiwgaW5pdF9jb21tYW5kcywKKwkJCQkJCQkJCSBs ZW5ndGhvZihpbml0X2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOwogCX0KIAogCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYyBiL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCmluZGV4IGYxMjE1YzhlMTgu LjI5YTMxNDQ5Y2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCisrKyBi L3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jCkBAIC0xNjY2LDggKzE2NjYsMTEgQEAgUHJvY2Vz c1V0aWxpdHlTbG93KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQlicmVhazsKIAogCQkJY2FzZSBU X0NyZWF0ZVRhYmxlQXNTdG10OgorCQkJCUV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQo cGFyc2V0cmVlKTsKIAkJCQlhZGRyZXNzID0gRXhlY0NyZWF0ZVRhYmxlQXMocHN0YXRlLCAoQ3Jl YXRlVGFibGVBc1N0bXQgKikgcGFyc2V0cmVlLAogCQkJCQkJCQkJCQlwYXJhbXMsIHF1ZXJ5RW52 LCBxYyk7CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVFbmQoYWRkcmVzcyk7CisJCQkJ Y29tbWFuZENvbGxlY3RlZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgVF9SZWZyZXNo TWF0Vmlld1N0bXQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNo ZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYwppbmRleCBmN2Y3MTY1Zjdm Li43ZmI4Y2IyOTFkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9ldnRjYWNo ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2V2dGNhY2hlLmMKQEAgLTE2Nyw2ICsx NjcsOCBAQCBCdWlsZEV2ZW50VHJpZ2dlckNhY2hlKHZvaWQpCiAJCQlldmVudCA9IEVWVF9TUUxE cm9wOwogCQllbHNlIGlmIChzdHJjbXAoZXZ0ZXZlbnQsICJ0YWJsZV9yZXdyaXRlIikgPT0gMCkK IAkJCWV2ZW50ID0gRVZUX1RhYmxlUmV3cml0ZTsKKwkJZWxzZSBpZiAoc3RyY21wKGV2dGV2ZW50 LCAidGFibGVfaW5pdF93cml0ZSIpID09IDApCisJCQlldmVudCA9IEVWVF9UYWJsZUluaXRXcml0 ZTsKIAkJZWxzZQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDEx NDk4NTE0N2IuLjVlYzJlODAzMjUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4Nzcs NCArMTE4NzcsNyBAQAogeyBvaWQgPT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRs IGNvbW1hbmQgZGVwYXJzZSB0YWJsZSByZXdyaXRlJywKICAgcHJvbmFtZSA9PiAncHVibGljYXRp b25fZGVwYXJzZV90YWJsZV9yZXdyaXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcics CiAgIHByb2FyZ3R5cGVzID0+ICcnLCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFi bGVfcmV3cml0ZScgfSwKK3sgb2lkID0+ICc0NjQ3JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRk bCBjb21tYW5kIGRlcGFyc2UgdGFibGUgaW5pdCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9u X2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXIn LAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3Rh YmxlX2luaXRfd3JpdGUnIH0sCiBdCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKaW5k ZXggZmQyZWU3ZmZlNC4uYzI0MWRiMzAyMSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaApAQCAtNTUsNiArNTUsMTAgQEAgZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRERMQ29tbWFu ZEVuZChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyU1FMRHJvcChO b2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVSZXdyaXRlKE5v ZGUgKnBhcnNldHJlZSwgT2lkIHRhYmxlT2lkLCBpbnQgcmVhc29uKTsKIAorZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVTdGFydChOb2RlICpwYXJzZXRyZWUpOworZXh0ZXJu IHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGUoTm9kZSAqcGFyc2V0cmVlLCBPYmplY3RB ZGRyZXNzIGFkZHJlc3MpOworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyVGFibGVJbml0V3JpdGVF bmQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwogZXh0ZXJuIGJvb2wgRXZlbnRUcmlnZ2VyQmVn aW5Db21wbGV0ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyRW5kQ29tcGxl dGVRdWVyeSh2b2lkKTsKIGV4dGVybiBib29sIHRyYWNrRHJvcHBlZE9iamVjdHNOZWVkZWQodm9p ZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oIGIvc3Jj L2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAppbmRleCBiNTMyOTRiZjU3Li4zZDI5NGEw MzcxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCisrKyBi L3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKQEAgLTI5LDcgKzI5LDggQEAgdHlw ZWRlZiBlbnVtIENvbGxlY3RlZENvbW1hbmRUeXBlCiAJU0NUX0FsdGVyT3BGYW1pbHksCiAJU0NU X0FsdGVyRGVmYXVsdFByaXZpbGVnZXMsCiAJU0NUX0NyZWF0ZU9wQ2xhc3MsCi0JU0NUX0FsdGVy VFNDb25maWcKKwlTQ1RfQWx0ZXJUU0NvbmZpZywKKwlTQ1RfQ3JlYXRlVGFibGVBcwogfSBDb2xs ZWN0ZWRDb21tYW5kVHlwZTsKIAogLyoKQEAgLTEwMSw2ICsxMDIsMTIgQEAgdHlwZWRlZiBzdHJ1 Y3QgQ29sbGVjdGVkQ29tbWFuZAogCQl7CiAJCQlPYmplY3RUeXBlCW9ianR5cGU7CiAJCX0JCQlk ZWZwcml2czsKKworCQlzdHJ1Y3QKKwkJeworCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOworCQkJ Tm9kZQkJICpyZWFsX2NyZWF0ZTsKKwkJfQkJCWN0YXM7CiAJfQkJCWQ7CiAKIAlzdHJ1Y3QgQ29s bGVjdGVkQ29tbWFuZCAqcGFyZW50OwkvKiB3aGVuIG5lc3RlZCAqLwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgK aW5kZXggZGRiNjdhNjhmYS4uMWU2NDgzMTdhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRp bHMvZXZ0Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5oCkBAIC0yMiw3 ICsyMiw4IEBAIHR5cGVkZWYgZW51bQogCUVWVF9ERExDb21tYW5kU3RhcnQsCiAJRVZUX0RETENv bW1hbmRFbmQsCiAJRVZUX1NRTERyb3AsCi0JRVZUX1RhYmxlUmV3cml0ZQorCUVWVF9UYWJsZVJl d3JpdGUsCisJRVZUX1RhYmxlSW5pdFdyaXRlCiB9IEV2ZW50VHJpZ2dlckV2ZW50OwogCiB0eXBl ZGVmIHN0cnVjdAotLSAKMi4zNC4xCgo= --000000000000cb887705efe04c32 Content-Type: text/x-patch; charset="US-ASCII"; name="v52-0001-Functions-to-deparse-DDL-commands.patch" Content-Disposition: attachment; filename="v52-0001-Functions-to-deparse-DDL-commands.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpakrp50 RnJvbSA1OGM1YzNhMWIxOWFhMDUwNjNkNDZiMDVlYjc0OWI2MTMzNmMwYjUxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTIgRGVjIDIwMjIgMDE6MTk6NTkgLTA1MDAKU3ViamVjdDogW1BBVENI IHY1MiAxLzddIEZ1bmN0aW9ucyB0byBkZXBhcnNlIERETCBjb21tYW5kcy4KClRoaXMgcGF0Y2gg cHJvdmlkZXMgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4K bGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxhaW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQg c3ByaW50Zi1saWtlCmV4cGFuc2lvbi4gVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRlbmRlZCB0 byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCnRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5n IGNlcnRhaW4gbm9kZXMgd2l0aGluIHRoZSBvYmplY3RzLgoKTXVjaCBvZiB0aGUgaW5mb3JtYXRp b24gaW4gdGhlIG91dHB1dCBibG9iIGFjdHVhbGx5IGNvbWVzIGZyb20gc3lzdGVtCmNhdGFsb2dz LCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBhcyBpdCBpcyBpbXBvc3NpYmxlIHRv IHJlbGlhYmx5CmNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBu b3QgZGVwZW5kZW50IG9uIHNlYXJjaF9wYXRoCmV0YykgbG9va2luZyBvbmx5IGF0IHRoZSBwYXJz ZSBub2RlLgoKVGhpcyBwcm92aWRlcyBhIGJhc2UgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gb2Yg RERMIHN0YXRlbWVudHMuIEN1cnJlbnRseSwKdGhlIHBhdGNoIGhhcyBzdXBwb3J0IGZvcjoKCkNS RUFURS9EUk9QIEFDQ0VTUyBNRVRIT0QKQ1JFQVRFL0FMVEVSL0RST1AgQ0FTVApDUkVBVEUvQUxU RVIvRFJPUCBDT0xMQVRJT04KQ09NTUVOVApDUkVBVEUvQUxURVIvRFJPUCBDT05WRVJTSU9OCkFM VEVSIERFRkFVTFQgUFJJVklMRUdFUwpDUkVBVEUvQUxURVIvRFJPUCBET01BSU4KQ1JFQVRFL0FM VEVSL0RST1AgRVhURU5TSU9OCkNSRUFURS9BTFRFUi9EUk9QIEZPUkVJR04gREFUQSBXUkFQUEVS CkNSRUFURS9BTFRFUiBGVU5DVElPTi9QUk9DRURVUkUKR1JBTlQKQ1JFQVRFL0RST1AgSU5ERVgK Q1JFQVRFL0FMVEVSL0RST1AgTEFOR1VBR0UKQ1JFQVRFL0FMVEVSL0RST1AgTUFURVJJQUxJWkVE IFZJRVcKQ1JFQVRFL0RST1AgT1BFUkFUT1IgW0NMQVNTL0ZBTUlMWV0KQ1JFQVRFL0FMVEVSL0RS T1AgUE9MSUNZClJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcKUkVWT0tFCkFMVEVSL0RST1AgUk9V VElORQpDUkVBVEUvQUxURVIvRFJPUCBSVUxFCkNSRUFURS9BTFRFUi9EUk9QIFNDSEVNQQpDUkVB VEUvQUxURVIvRFJPUCBTRVFVRU5DRQpDUkVBVEUvQUxURVIvRFJPUCBTRVJWRVIKQ1JFQVRFL0FM VEVSL0RST1AgU1RBVElTVElDUwpDUkVBVEUvQUxURVIvRFJPUCBUQUJMRSAtLSBOb3RlICMxLCBO b3RlICMyCkNSRUFURS9BTFRFUi9EUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04vUEFSU0VS L0RJQ1RJT05BUlkvVEVNUExBVEUKQ1JFQVRFL0RST1AgVFJBTlNGT1JNCkNSRUFURS9BTFRFUiBU UklHR0VSCkNSRUFURS9BTFRFUi9EUk9QIFRZUEUKQ1JFQVRFL0FMVEVSL0RST1AgVVNFUiBNQVBQ SU5HCkNSRUFURS9BTFRFUi9EUk9QIFZJRVcgLS0gTm90ZSAjNApTRUNVUklUWSBMQUJFTAoKKE5v dGUgIzEpIFNvbWUgcmVjZW50bHkgaW50cm9kdWNlZCBERExzKGUuZy4gRERMcyByZWxhdGVkIHRv ClBBUlRJVElPTkVEIFRBQkxFKSBhcmUgdW5zdXBwb3J0ZWQuIFdlIGNhbiBleHRlbmQgaXQgYXMg d2UgbmVlZCBtb3JlCmZ1bmN0aW9uYWxpdHkgZm9yIERETCByZXBsaWNhdGlvbi4KCihOb3RlICMy KSBGb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJT04sIHdlIGhhdmVuJ3QgYWRkZWQgZXh0cmEgbG9n aWMgb24KdGhlIHN1YnNjcmliZXIgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSB0YWJsZSBv biB0aGUgcHVibGlzaGVyIGlzIGEgUEFSVElUSU9ORUQKVEFCTEUgd2hpbGUgdGhlIHRhcmdldCB0 YWJsZSBvbiB0aGUgc3ViY3JpYmVyIHNpZGUgaXMgYSBOT1JNQUwgdGFibGUuIFdlIHdpbGwKcmVz ZWFyY2ggdGhpcyBtb3JlIGFuZCBpbXByb3ZlIGl0IGxhdGVyLgoKKE5vdGUgIzMpIFJlbW92ZWQg YW4gdW5kZXNpcmFibGUgJ29uJyBmcm9tIHRoZSBpZGVudGl0eSBzdHJpbmcgZm9yIFRSQU5TRk9S TQppbiBnZXRPYmplY3RJZGVudGl0eVBhcnRzLiBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIGRlcGFy c2Ugb2YgRFJPUApUUkFOU0ZPUk0gY29tbWFuZCB3b3JrIHNpbmNlICdvbicgaXMgbm90IHByZXNl bnQgaW4gdGhlIGN1cnJlbnQKRFJPUCBUUkFOU0ZPUk0gc3ludGF4LiBGb3IgZXhhbXBsZSwgdGhl IGNvcnJlY3Qgc3ludGF4IGlzCkRST1AgVFJBTlNGT1JNIHRyZiBGT1IgSU5UIExBTkdVQUdFIFNR TDsKaW5zdGVhZCBvZgpEUk9QIFRSQU5TRk9STSB0cmYgRk9SIElOVCBPTiBMQU5HVUFHRSBTUUw7 CgooTm90ZSAjNCkgRm9yIFZJRVdTVE1ULCB3ZSBjcmVhdGVkIHBnX2dldF92aWV3ZGVmX2ludGVy bmFsIHRvIGdldCB0aGUKU0VMRUNUIHF1ZXJ5IG9mIHRoZSBwZW5kaW5nIFZJRVdTVE1ULiBJbiB0 aGUgY2FzZSB0aGF0IHRoZSBDUkVBVEUgVklFVyBjb21tYW5kCmlzIHN0aWxsIGluIHByb2dyZXNz LCB3ZSB3b3VsZCBuZWVkIHRvIHNlYXJjaCB0aGUgc3lzdGVtIGNhY2hlIFJVTEVSRUxOQU1FIHRv IGdldCB0aGUKcmV3cml0ZSBydWxlIG9mIHRoZSB2aWV3IGFzIG9wcG9zZSB0byBxdWVyeWluZyBw Z19yZXdyaXRlIGFzIGluIHBnX2dldF92aWV3ZGVmX3dvcmtlcigpLAp0aGUgbGF0dGVyIHdpbGwg cmV0dXJuIGVtcHR5IHJlc3VsdC4KLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jICAg ICAgICAgICAgICAgICB8ICAgIDcgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVz cy5jICAgICAgICAgIHwgICAgMiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgICAg ICAgICAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMu YyAgICAgICAgIHwgICAxMCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyAg ICAgICAgICAgfCA5MTM2ICsrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv ZGRsX2pzb24uYyAgICAgICAgICAgICAgfCAgNzc2ICsrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9t ZXNvbi5idWlsZCAgICAgICAgICAgICB8ICAgIDIgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvc2Vj bGFiZWwuYyAgICAgICAgICAgICAgfCAgICAyICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVl bmNlLmMgICAgICAgICAgICAgIHwgICAzMyArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jICAgICB8ICAgIDEgLQogc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgICAg ICAgICAgICAgICAgICAgfCAgIDkxICstCiBzcmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5 cGUuYyAgICAgICAgICB8ICAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMg ICAgICAgICAgICAgIHwgICA1MyArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMg ICAgICAgICAgICB8ICAyNTggKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg ICAgICAgICAgIHwgICAgNiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgg ICAgICAgICB8ICAgIDMgKy0KIHNyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmggICAgICAg ICAgICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgICAgICAg ICAgICB8ICAgMjMgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgICAg ICAgfCAgICAxICsKIHNyYy9pbmNsdWRlL3Rjb3AvdXRpbGl0eS5oICAgICAgICAgICAgICAgICAg IHwgICAgMiArCiBzcmMvaW5jbHVkZS91dGlscy9hY2wuaCAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDIgKwogc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmggICAgICAgICAgfCAg ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL2J1aWx0aW5zLmggICAgICAgICAgICAgICAgIHwgICAg MiArCiBzcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaCAgICAgICAgICAgICAgICB8ICAgMTkg Kwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQgfCAgICAyICst CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICB8ICAgIDQgKwog MjYgZmlsZXMgY2hhbmdlZCwgMTAzNjIgaW5zZXJ0aW9ucygrKSwgODAgZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA3NTUgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmgKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jYXRhbG9nL2FjbGNoay5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9hY2xjaGsu YwppbmRleCBiNTAxOTA1OWU4Li5jNGY5NjQ0NDVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j YXRhbG9nL2FjbGNoay5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvYWNsY2hrLmMKQEAgLTEy OSw3ICsxMjksNiBAQCBzdGF0aWMgdm9pZCBleHBhbmRfYWxsX2NvbF9wcml2aWxlZ2VzKE9pZCB0 YWJsZV9vaWQsIEZvcm1fcGdfY2xhc3MgY2xhc3NGb3JtLAogCQkJCQkJCQkJICBBY2xNb2RlICpj b2xfcHJpdmlsZWdlcywKIAkJCQkJCQkJCSAgaW50IG51bV9jb2xfcHJpdmlsZWdlcyk7CiBzdGF0 aWMgQWNsTW9kZSBzdHJpbmdfdG9fcHJpdmlsZWdlKGNvbnN0IGNoYXIgKnByaXZuYW1lKTsKLXN0 YXRpYyBjb25zdCBjaGFyICpwcml2aWxlZ2VfdG9fc3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKTsK IHN0YXRpYyBBY2xNb2RlIHJlc3RyaWN0X2FuZF9jaGVja19ncmFudChib29sIGlzX2dyYW50LCBB Y2xNb2RlIGF2YWlsX2dvcHRpb25zLAogCQkJCQkJCQkJCWJvb2wgYWxsX3ByaXZzLCBBY2xNb2Rl IHByaXZpbGVnZXMsCiAJCQkJCQkJCQkJT2lkIG9iamVjdElkLCBPaWQgZ3JhbnRvcklkLApAQCAt Mzg1LDExICszODQsMTAgQEAgRXhlY3V0ZUdyYW50U3RtdChHcmFudFN0bXQgKnN0bXQpCiAJTGlz dENlbGwgICAqY2VsbDsKIAljb25zdCBjaGFyICplcnJvcm1zZzsKIAlBY2xNb2RlCQlhbGxfcHJp dmlsZWdlczsKKwlPaWQJCQlncmFudG9yID0gSW52YWxpZE9pZDsKIAogCWlmIChzdG10LT5ncmFu dG9yKQogCXsKLQkJT2lkCQkJZ3JhbnRvcjsKLQogCQlncmFudG9yID0gZ2V0X3JvbGVzcGVjX29p ZChzdG10LT5ncmFudG9yLCBmYWxzZSk7CiAKIAkJLyoKQEAgLTQwNSw2ICs0MDMsNyBAQCBFeGVj dXRlR3JhbnRTdG10KEdyYW50U3RtdCAqc3RtdCkKIAkvKgogCSAqIFR1cm4gdGhlIHJlZ3VsYXIg R3JhbnRTdG10IGludG8gdGhlIEludGVybmFsR3JhbnQgZm9ybS4KIAkgKi8KKwlpc3RtdC5ncmFu dG9yX3VpZCA9IGdyYW50b3I7CiAJaXN0bXQuaXNfZ3JhbnQgPSBzdG10LT5pc19ncmFudDsKIAlp c3RtdC5vYmp0eXBlID0gc3RtdC0+b2JqdHlwZTsKIApAQCAtMjYyOCw3ICsyNjI3LDcgQEAgc3Ry aW5nX3RvX3ByaXZpbGVnZShjb25zdCBjaGFyICpwcml2bmFtZSkKIAlyZXR1cm4gMDsJCQkJCS8q IGFwcGVhc2UgY29tcGlsZXIgKi8KIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hh ciAqCiBwcml2aWxlZ2VfdG9fc3RyaW5nKEFjbE1vZGUgcHJpdmlsZWdlKQogewogCXN3aXRjaCAo cHJpdmlsZWdlKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNz LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwppbmRleCBmZTk3ZmJmNzlk Li4yOWNkNTBmMmU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJl c3MuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwpAQCAtNTk0Myw3 ICs1OTQzLDcgQEAgZ2V0T2JqZWN0SWRlbnRpdHlQYXJ0cyhjb25zdCBPYmplY3RBZGRyZXNzICpv YmplY3QsCiAJCQkJdHJhbnNmb3JtVHlwZSA9IGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZCh0cmFu c2Zvcm0tPnRyZnR5cGUpOwogCQkJCXRyYW5zZm9ybUxhbmcgPSBnZXRfbGFuZ3VhZ2VfbmFtZSh0 cmFuc2Zvcm0tPnRyZmxhbmcsIGZhbHNlKTsKIAotCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZl ciwgImZvciAlcyBvbiBsYW5ndWFnZSAlcyIsCisJCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmZmVy LCAiZm9yICVzIGxhbmd1YWdlICVzIiwKIAkJCQkJCQkJIHRyYW5zZm9ybVR5cGUsCiAJCQkJCQkJ CSB0cmFuc2Zvcm1MYW5nKTsKIAkJCQlpZiAob2JqbmFtZSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKaW5k ZXggNDhmNzM0OGY5MS4uMTcxZGZiMjgwMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUKQEAgLTI5LDYg KzI5LDggQEAgT0JKUyA9IFwKIAljb3B5dG8ubyBcCiAJY3JlYXRlYXMubyBcCiAJZGJjb21tYW5k cy5vIFwKKwlkZGxfZGVwYXJzZS5vIFwKKwlkZGxfanNvbi5vIFwKIAlkZWZpbmUubyBcCiAJZGlz Y2FyZC5vIFwKIAlkcm9wY21kcy5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2NvbGxhdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYwpp bmRleCA4MWU1NGUwY2U2Li4zY2ViN2IyNTJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9jb2xsYXRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9u Y21kcy5jCkBAIC01Miw3ICs1Miw4IEBAIHR5cGVkZWYgc3RydWN0CiAgKiBDUkVBVEUgQ09MTEFU SU9OCiAgKi8KIE9iamVjdEFkZHJlc3MKLURlZmluZUNvbGxhdGlvbihQYXJzZVN0YXRlICpwc3Rh dGUsIExpc3QgKm5hbWVzLCBMaXN0ICpwYXJhbWV0ZXJzLCBib29sIGlmX25vdF9leGlzdHMpCitE ZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFy YW1ldGVycywKKwkJCQkgYm9vbCBpZl9ub3RfZXhpc3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2V4 aXN0aW5nX2NvbGxpZCkKIHsKIAljaGFyCSAgICpjb2xsTmFtZTsKIAlPaWQJCQljb2xsTmFtZXNw YWNlOwpAQCAtMTM5LDYgKzE0MCwxMyBAQCBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0 YXRlLCBMaXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywgYm9vbCBpZl9ub3RfZQogCQlpZiAo IUhlYXBUdXBsZUlzVmFsaWQodHApKQogCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGNvbGxhdGlvbiAldSIsIGNvbGxpZCk7CiAKKwkJLyoKKwkJICogTWFrZSBmcm9tIGV4 aXN0aW5nIGNvbGxhdGlvbmlkIGF2YWlsYWJsZSB0byBjYWxsZXJzIGZvciBzdGF0ZW1lbnQgc3Vj aCBhcworCQkgKiBDUkVBVEUgQ09MTEFUSU9OIGFueV9uYW1lIEZST00gYW55X25hbWUKKwkJICov CisJCWlmIChmcm9tX2V4aXN0aW5nX2NvbGxpZCAmJiBPaWRJc1ZhbGlkKGNvbGxpZCkpCisJCQlP YmplY3RBZGRyZXNzU2V0KCpmcm9tX2V4aXN0aW5nX2NvbGxpZCwgQ29sbGF0aW9uUmVsYXRpb25J ZCwgY29sbGlkKTsKKwogCQljb2xscHJvdmlkZXIgPSAoKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRT VFJVQ1QodHApKS0+Y29sbHByb3ZpZGVyOwogCQljb2xsaXNkZXRlcm1pbmlzdGljID0gKChGb3Jt X3BnX2NvbGxhdGlvbikgR0VUU1RSVUNUKHRwKSktPmNvbGxpc2RldGVybWluaXN0aWM7CiAJCWNv bGxlbmNvZGluZyA9ICgoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVCh0cCkpLT5jb2xsZW5j b2Rpbmc7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwMDAwLi5iODYzMjYwYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYwpAQCAtMCwwICsxLDkxMzYgQEAKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNvbnZlcnQg dXRpbGl0eSBjb21tYW5kcyB0byBtYWNoaW5lLXBhcnNlYWJsZQorICoJICByZXByZXNlbnRhdGlv bgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBOT1RFUworICoK KyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBKU09OIGJsb2JzIHJlcHJlc2VudGluZyBE REwgY29tbWFuZHMsIHdoaWNoIGNhbgorICogbGF0ZXIgYmUgcmUtcHJvY2Vzc2VkIGludG8gcGxh aW4gc3RyaW5ncyBieSB3ZWxsLWRlZmluZWQgc3ByaW50Zi1saWtlCisgKiBleHBhbnNpb24uICBU aGVzZSBKU09OIG9iamVjdHMgYXJlIGludGVuZGVkIHRvIGFsbG93IGZvciBtYWNoaW5lLWVkaXRp bmcgb2YKKyAqIHRoZSBjb21tYW5kcywgYnkgcmVwbGFjaW5nIGNlcnRhaW4gbm9kZXMgd2l0aGlu IHRoZSBvYmplY3RzLgorICoKKyAqIE11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvdXRw dXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQorICogY2F0YWxvZ3MsIG5vdCBmcm9t IHRoZSBjb21tYW5kIHBhcnNlIG5vZGUsIGFzIGl0IGlzIGltcG9zc2libGUgdG8gcmVsaWFibHkK KyAqIGNvbnN0cnVjdCBhIGZ1bGx5LXNwZWNpZmllZCBjb21tYW5kIChpLmUuIG9uZSBub3QgZGVw ZW5kZW50IG9uIHNlYXJjaF9wYXRoCisgKiBldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ug bm9kZS4KKyAqCisgKiBEZXBhcnNlIG9iamVjdCB0cmVlIGlzIGNyZWF0ZWQgYnkgdXNpbmc6Cisg KiAJYSkgbmV3X29ianRyZWUoImtub3cgY29udGVudHMiKSB3aGVyZSB0aGUgY29tcGxldGUgdHJl ZSBjb250ZW50IGlzIGtub3duIG9yCisgKiAgICAgdGhlIGluaXRpYWwgdHJlZSBjb250ZW50IGlz IGtub3duLgorICogCWIpIG5ld19vYmp0cmVlKCIiKSBmb3IgdGhlIHN5bnRheCB3aGVyZSB0aGUg b2JqZWN0IHRyZWUgd2lsbCBiZSBkZXJpdmVkCisgKiAgICAgYmFzZWQgb24gc29tZSBjb25kaXRp b25hbCBjaGVja3MuCisgKiAJYykgbmV3X29ianRyZWVfVkEgd2hlcmUgdGhlIGNvbXBsZXRlIHRy ZWUgY2FuIGJlIGRlcml2ZWQgdXNpbmcgc29tZSBmaXhlZAorICogICAgIGNvbnRlbnQgYW5kL29y IHNvbWUgdmFyaWFibGUgYXJndW1lbnRzLgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNy Yy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIK KyNpbmNsdWRlICJhY2Nlc3MvcmVsYXRpb24uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIK KyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0u aCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y2FzdC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb252ZXJzaW9uLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX2V4 dGVuc2lvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfZm9yZWlnbl9kYXRhX3dyYXBwZXIuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2ZvcmVpZ25fc2VydmVyLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfbGFuZ3VhZ2UuaCIKKyNpbmNs dWRlICJjYXRhbG9nL3BnX2xhcmdlb2JqZWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1l c3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xhc3MuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX29wZXJhdG9yLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgorI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19yYW5nZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfcmV3 cml0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfc2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjYXRh bG9nL3BnX3N0YXRpc3RpY19leHQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3RyYW5zZm9ybS5o IgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHNfY29uZmlnLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9w Z190c19kaWN0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190c19wYXJzZXIuaCIKKyNpbmNsdWRl ICJjYXRhbG9nL3BnX3RzX3RlbXBsYXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ191c2VyX21hcHBpbmcuaCIKKyNpbmNsdWRlICJjb21tYW5k cy9kZWZyZW0uaCIKKyNpbmNsdWRlICJjb21tYW5kcy9zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNv bW1hbmRzL3RhYmxlc3BhY2UuaCIKKyNpbmNsdWRlICJmb3JlaWduL2ZvcmVpZ24uaCIKKyNpbmNs dWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKKyNpbmNsdWRlICJub2Rl cy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAi b3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZV90eXBlLmgiCisj aW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2Rl cGFyc2UuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvZ3Vj LmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIK KyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgorCisvKiBFc3RpbWF0ZWQgbGVuZ3RoIG9mIHRo ZSBnZW5lcmF0ZWQganNvbmIgc3RyaW5nICovCisjZGVmaW5lIEpTT05CX0VTVElNQVRFRF9MRU4g MTI4CisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVybmVkIGludG8gSlNPTkIgcmVwcmVzZW50 YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVzZW50ZWQgYXMgYW4gb2JqZWN0IHRyZWUs IHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0eXBlZGVmIGVudW0KK3sKKwlPYmpUeXBl TnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3RyaW5nLAorCU9ialR5cGVBcnJheSwKKwlP YmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJT2JqVHlwZU9iamVjdAorfSBPYmpUeXBl OworCisvKgorICogUmVwcmVzZW50IHRoZSBjb21tYW5kIGFzIGFuIG9iamVjdCB0cmVlLgorICov Cit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJc2xpc3RfaGVhZAlwYXJhbXM7CQkJLyogT2Jq ZWN0IHRyZWUgcGFyYW1ldGVycyAqLworCWludAkJCW51bVBhcmFtczsJCS8qIE51bWJlciBvZiBw YXJhbWV0ZXJzIGluIHRoZSBvYmplY3QgdHJlZSAqLworCVN0cmluZ0luZm8JZm10aW5mbzsJCS8q IEZvcm1hdCBzdHJpbmcgb2YgdGhlIE9ialRyZWUgKi8KKwlib29sCQlwcmVzZW50OwkJLyogSW5k aWNhdGVzIGlmIGJvb2xlYW4gdmFsdWUgc2hvdWxkIGJlIHN0b3JlZCAqLworfSBPYmpUcmVlOwor CisvKgorICogQW4gZWxlbWVudCBvZiBhbiBvYmplY3QgdHJlZSAoT2JqVHJlZSkuCisgKi8KK3R5 cGVkZWYgc3RydWN0IE9iakVsZW0KK3sKKwljaGFyCSAgICpuYW1lOwkJCS8qIE5hbWUgb2Ygb2Jq ZWN0IGVsZW1lbnQgKi8KKwlPYmpUeXBlCQlvYmp0eXBlOwkJLyogT2JqZWN0IHR5cGUgKi8KKwor CXVuaW9uCisJeworCQlib29sCQlib29sZWFuOworCQljaGFyCSAgICpzdHJpbmc7CisJCWludDY0 CQlpbnRlZ2VyOworCQlmbG9hdDgJCWZsdDsKKwkJT2JqVHJlZSAgICAqb2JqZWN0OworCQlMaXN0 CSAgICphcnJheTsKKwl9CQkJdmFsdWU7CQkJLyogU3RvcmUgdGhlIG9iamVjdCB2YWx1ZSBiYXNl ZCBvbiB0aGUgb2JqZWN0CisJCQkJCQkJCSAqIHR5cGUgKi8KKwlzbGlzdF9ub2RlCW5vZGU7CQkJ LyogVXNlZCBpbiBjb252ZXJ0aW5nIGJhY2sgdG8gT2JqRWxlbQorCQkJCQkJCQkgKiBzdHJ1Y3R1 cmUgKi8KK30gT2JqRWxlbTsKKworLyoKKyAqIFJlZHVjZSBzb21lIHVubmNlc3Nhcnkgc3RyaW5n IGZyb20gdGhlIG91dHB1dCBqc29uIHN0dWZmIHdoZW4gdmVyYm9zZQorICogYW5kICJwcmVzZW50 IiBtZW1iZXIgaXMgZmFsc2UuIFRoaXMgbWVhbnMgdGhlc2Ugc3RyaW5ncyB3b24ndCBiZSBtZXJn ZWQgaW50bworICogdGhlIGxhc3QgRERMIGNvbW1hbmQuCisgKi8KK2Jvb2wJCXZlcmJvc2UgPSB0 cnVlOworCitzdGF0aWMgdm9pZCBhcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNo YXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9ib29sX29iamVj dChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJfZm10LCBib29sIHZhbHVlKTsKK3N0YXRpYyB2b2lk IGFwcGVuZF9mbG9hdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCwgZmxvYXQ4 IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9udWxsX29iamVjdChPYmpUcmVlICp0cmVlLCBj aGFyICpzdWJfZm10KTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9vYmplY3Rfb2JqZWN0KE9ialRyZWUg KnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKTsKK3N0YXRpYyBjaGFyICphcHBl bmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCk7 CitzdGF0aWMgdm9pZCBhcHBlbmRfcHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxl bSAqZWxlbSk7CitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10LCBjaGFyICpuYW1lLAorCQkJCQkJCQkgY2hhciAqdmFsdWUpOworc3Rh dGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9k LAorCQkJCQkJCQkgT2lkICpuc3BpZCwgY2hhciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3Ry LAorCQkJCQkJCQkgYm9vbCAqdHlwYXJyYXkpOworc3RhdGljIExpc3QgKkZ1bmN0aW9uR2V0RGVm YXVsdHModGV4dCAqcHJvYXJnZGVmYXVsdHMpOworc3RhdGljIE9iakVsZW0gKm5ld19vYmplY3Qo T2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKTsKK3N0YXRpYyBPYmpUcmVlICpuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoT2lkIGNsYXNzSWQsIE9pZCBvYmplY3RJZCk7CitzdGF0aWMgT2JqVHJl ZSAqbmV3X29ianRyZWVfZm9yX3JvbGVzcGVjKFJvbGVTcGVjICpzcGVjKTsKK3N0YXRpYyBPYmpF bGVtICpuZXdfb2JqZWN0X29iamVjdChPYmpUcmVlICp2YWx1ZSk7CitzdGF0aWMgT2JqVHJlZSAq bmV3X29ianRyZWVfVkEoY2hhciAqZm10LCBpbnQgbnVtb2JqcywuLi4pOworc3RhdGljIE9iakVs ZW0gKm5ld19zdHJpbmdfb2JqZWN0KGNoYXIgKnZhbHVlKTsKK3N0YXRpYyBKc29uYlZhbHVlICpv Ymp0cmVlX3RvX2pzb25iX3JlYyhPYmpUcmVlICp0cmVlLCBKc29uYlBhcnNlU3RhdGUgKnN0YXRl KTsKK3N0YXRpYyB2b2lkIHBnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwK KwkJCQkJCQkJCSBjaGFyICoqaW5kZXhfYW0sCisJCQkJCQkJCQkgY2hhciAqKmRlZmluaXRpb24s CisJCQkJCQkJCQkgY2hhciAqKnJlbG9wdGlvbnMsCisJCQkJCQkJCQkgY2hhciAqKnRhYmxlc3Bh Y2UsCisJCQkJCQkJCQkgY2hhciAqKndoZXJlQ2xhdXNlKTsKK3N0YXRpYyBjaGFyICpSZWxhdGlv bkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG5vLAorCQkJCQkJ CQkJICBMaXN0ICpkcGNvbnRleHQsIExpc3QgKipleHBycyk7CisKK3N0YXRpYyBPYmpUcmVlICpk ZXBhcnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29s IGNvbXBvc2l0ZSwKKwkJCQkJCQkJICBDb2x1bW5EZWYgKmNvbGRlZiwgYm9vbCBpc19hbHRlciwg TGlzdCAqKmV4cHJzKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0NvbHVtbklkZW50aXR5KE9p ZCBzZXFyZWxpZCwgY2hhciBpZGVudGl0eSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCk7Citz dGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X0NvbGxhdGlvbihPaWQgb2JqZWN0SWQs IERlZmluZVN0bXQgKmRlZmluZSwKKwkJCQkJCQkJCQkJIE9iamVjdEFkZHJlc3MgZnJvbUNvbGxp ZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfVHlwZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CitzdGF0aWMgT2Jq VHJlZSAqZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKE9pZCBvYmplY3RJZCwgRGVmaW5lU3Rt dCAqZGVmaW5lLCBPYmplY3RBZGRyZXNzIGNvcGllZCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJz ZV9EZWZpbmVTdG10X1RTUGFyc2VyKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsK K3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmpl Y3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5lKTsKK3N0YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZmlu ZVN0bXRfVFNUZW1wbGF0ZShPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQgKmRlZmluZSk7CisKK3N0 YXRpYyBPYmpUcmVlICpkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxlbSwgYm9vbCBpc19yZXNl dCk7CitzdGF0aWMgT2JqVHJlZSAqZGVwYXJzZV9GdW5jdGlvblNldChWYXJpYWJsZVNldEtpbmQg a2luZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworc3RhdGljIE9ialRyZWUgKmRlcGFyc2Vf T25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKTsKK3N0YXRpYyBPYmpUcmVlICpk ZXBhcnNlX1JlbFNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAqc3ViY21kKTsKKworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9DYWNoZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEs IGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9D eWNsZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGlj IGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVlbmNl IHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBh cnNlX1NlcV9NaW52YWx1ZShGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFi bGUpOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NYXh2YWx1ZShGb3JtX3Bn X3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpOworc3RhdGljIE9iakVsZW0gKmRl cGFyc2VfU2VxX093bmVkQnkoT2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpOworc3Rh dGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9SZXN0YXJ0KEZvcm1fcGdfc2VxdWVuY2Vf ZGF0YSBzZXFkYXRhKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3 aXRoKEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0aWMg aW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0FzKERlZkVsZW0gKmVsZW0pOworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfU3RvcmFnZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7 CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9SZWNlaXZlKEZvcm1fcGdfdHlw ZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9UeXBlX1NlbmQoRm9y bV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVf VHlwbW9kX0luKEZvcm1fcGdfdHlwZSB0eXBGb3JtKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAq ZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQoRm9ybV9wZ190eXBlIHR5cEZvcm0pOworc3RhdGljIGlu bGluZSBPYmpFbGVtICpkZXBhcnNlX1R5cGVfQW5hbHl6ZShGb3JtX3BnX3R5cGUgdHlwRm9ybSk7 CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfVHlwZV9TdWJzY3JpcHQoRm9ybV9wZ190 eXBlIHR5cEZvcm0pOworCitzdGF0aWMgTGlzdCAqZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9i amVjdElkKTsKK3N0YXRpYyBMaXN0ICpkZXBhcnNlX1RhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVs YXRpb24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJCQkJICAg Ym9vbCB0eXBlZCwgYm9vbCBjb21wb3NpdGUpOworCitzdGF0aWMgY2hhciAqRG9tYWluR2V0RGVm YXVsdChIZWFwVHVwbGUgZG9tVHVwLCBib29sIG1pc3Npbmdfb2spOworCisvKgorICogQXBwZW5k IHByZXNlbnQgYXMgZmFsc2UgdG8gYSB0cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX25v dF9wcmVzZW50KE9ialRyZWUgKnRyZWUpCit7CisJYXBwZW5kX2Jvb2xfb2JqZWN0KHRyZWUsICJw cmVzZW50IiwgZmFsc2UpOworfQorCisvKgorICogQWRkIGNvbW1vbiBjbGF1c2VzIHRvIENyZWF0 ZVBvbGljeSBvciBBbHRlclBvbGljeSBkZXBhcnNlIG9iamVjdHMuCisgKi8KK3N0YXRpYyB2b2lk CithZGRfcG9saWN5X2NsYXVzZXMoT2JqVHJlZSAqcmV0LCBPaWQgcG9saWN5T2lkLCBMaXN0ICpy b2xlcywgYm9vbCBkb19xdWFsLAorCQkJCSAgIGJvb2wgZG9fd2l0aF9jaGVjaykKK3sKKwlSZWxh dGlvbglwb2xSZWwgPSB0YWJsZV9vcGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJSGVhcFR1cGxlCXBvbFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocG9sUmVs LCBBbnVtX3BnX3BvbGljeV9vaWQsIHBvbGljeU9pZCk7CisJRm9ybV9wZ19wb2xpY3kgcG9sRm9y bTsKKworCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5IHdpdGggT0lEICV1IiwgcG9saWN5T2lkKTsKKwor CXBvbEZvcm0gPSAoRm9ybV9wZ19wb2xpY3kpIEdFVFNUUlVDVChwb2xUdXApOworCisJLyogYWRk IHRoZSAiT04gdGFibGUiIGNsYXVzZSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9O ICV7dGFibGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgcG9sRm9ybS0+cG9scmVsaWQpKTsKKworCS8qCisJ ICogQWRkIHRoZSAiVE8gcm9sZSIgY2xhdXNlLCBpZiBhbnkuICBJbiB0aGUgQ1JFQVRFIGNhc2Us IGl0IGFsd2F5cworCSAqIGNvbnRhaW5zIGF0IGxlYXN0IFBVQkxJQywgYnV0IGluIHRoZSBBTFRF UiBjYXNlIGl0IG1pZ2h0IGJlIGVtcHR5LgorCSAqLworCWlmIChyb2xlcykKKwl7CisJCUxpc3QJ ICAgKmxpc3QgPSBOSUw7CisJCUxpc3RDZWxsICAgKmNlbGw7CisKKwkJZm9yZWFjaChjZWxsLCBy b2xlcykKKwkJeworCQkJUm9sZVNwZWMgICAqc3BlYyA9IChSb2xlU3BlYyAqKSBsZmlyc3QoY2Vs bCk7CisKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0X29iamVj dChuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYykpKTsKKwkJfQorCQlhcHBlbmRfYXJyYXlf b2JqZWN0KHJldCwgIlRPICV7cm9sZTosIH1SIiwgbGlzdCk7CisJfQorCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHJldCk7CisKKwkvKiBhZGQgdGhlIFVTSU5HIGNsYXVzZSwgaWYgYW55ICov CisJaWYgKGRvX3F1YWwpCisJeworCQlEYXR1bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRl eHByOworCQlib29sCQlpc251bGw7CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xU dXAsIEFudW1fcGdfcG9saWN5X3BvbHF1YWwsCisJCQkJCQkJCSAgUmVsYXRpb25HZXREZXNjcihw b2xSZWwpLCAmaXNudWxsKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2coRVJST1IsICJudWxsIHBv bHF1YWwgZXhwcmVzc2lvbiBpbiBwb2xpY3kgJXUiLCBwb2xpY3lPaWQpOworCQlkZXBhcnNlZCA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsIHN0b3JlZGV4cHIsIHBvbEZvcm0tPnBv bHJlbGlkKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVVNJTkcgKCV7ZXhwcmVzc2lv bn1zKSIsICJleHByZXNzaW9uIiwKKwkJCQkJCQkgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNl ZCkpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJLyogYWRkIHRo ZSBXSVRIIENIRUNLIGNsYXVzZSwgaWYgYW55ICovCisJaWYgKGRvX3dpdGhfY2hlY2spCisJewor CQlEYXR1bQkJZGVwYXJzZWQ7CisJCURhdHVtCQlzdG9yZWRleHByOworCQlib29sCQlpc251bGw7 CisKKwkJc3RvcmVkZXhwciA9IGhlYXBfZ2V0YXR0cihwb2xUdXAsIEFudW1fcGdfcG9saWN5X3Bv bHdpdGhjaGVjaywKKwkJCQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBvbFJlbCksICZpc251bGwp OworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJPUiwgIm51bGwgcG9sd2l0aGNoZWNrIGV4cHJl c3Npb24gaW4gcG9saWN5ICV1IiwgcG9saWN5T2lkKTsKKwkJZGVwYXJzZWQgPSBEaXJlY3RGdW5j dGlvbkNhbGwyKHBnX2dldF9leHByLCBzdG9yZWRleHByLCBwb2xGb3JtLT5wb2xyZWxpZCk7CisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIldJVEggQ0hFQ0sgKCV7ZXhwcmVzc2lvbn1zKSIs CisJCQkJCQkJICJleHByZXNzaW9uIiwgVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCkpOwor CX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmVsYXRpb25fY2xvc2Uo cG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogQXBwZW5kIGFuIGFycmF5IHBh cmFtZXRlciB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIExpc3QgKmFycmF5KQoreworCU9iakVsZW0g ICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQpOwor CisJaWYgKGxpc3RfbGVuZ3RoKGFycmF5KSA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoIXZlcmJv c2UpCisJeworCQlMaXN0Q2VsbCAgICpsYzsKKworCQkvKiBFeHRyYWN0IHRoZSBPYmpFbGVtcyB3 aG9zZSBwcmVzZW50IGZsYWcgaXMgdHJ1ZSAqLworCQlmb3JlYWNoKGxjLCBhcnJheSkKKwkJewor CQkJT2JqRWxlbSAgICAqZWxlbSA9IChPYmpFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCUFzc2Vy dChlbGVtLT5vYmp0eXBlID09IE9ialR5cGVPYmplY3QgfHwKKwkJCQkgICBlbGVtLT5vYmp0eXBl ID09IE9ialR5cGVTdHJpbmcpOworCisJCQlpZiAoIWVsZW0tPnZhbHVlLm9iamVjdC0+cHJlc2Vu dCAmJgorCQkJCWVsZW0tPm9ianR5cGUgPT0gT2JqVHlwZU9iamVjdCkKKwkJCQlhcnJheSA9IGZv cmVhY2hfZGVsZXRlX2N1cnJlbnQoYXJyYXksIGxjKTsKKwkJfQorCisJfQorCisJb2JqZWN0X25h bWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisKKwlw YXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZUFycmF5LCBvYmplY3RfbmFtZSk7CisJcGFyYW0tPnZh bHVlLmFycmF5ID0gYXJyYXk7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsK K30KKworLyoKKyAqIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpzdWJf Zm10LCBib29sIHZhbHVlKQoreworCU9iakVsZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVj dF9uYW1lID0gc3ViX2ZtdDsKKwlib29sCQlpc19wcmVzZW50X2ZsYWcgPSBmYWxzZTsKKworCUFz c2VydChzdWJfZm10KTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHByZXNlbnQgaXMgcGFydCBv ZiB0aGUgZm9ybWF0IHN0cmluZyBhbmQgc3RvcmUgdGhlIGJvb2xlYW4KKwkgKiB2YWx1ZQorCSAq LworCWlmIChzdHJjbXAoc3ViX2ZtdCwgInByZXNlbnQiKSA9PSAwKQorCXsKKwkJaXNfcHJlc2Vu dF9mbGFnID0gdHJ1ZTsKKwkJdHJlZS0+cHJlc2VudCA9IHZhbHVlOworCX0KKworCWlmICghdmVy Ym9zZSAmJiAhdHJlZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJaWYgKCFpc19wcmVzZW50X2Zs YWcpCisJCW9iamVjdF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUs IHN1Yl9mbXQpOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVCb29sLCBvYmplY3RfbmFt ZSk7CisJcGFyYW0tPnZhbHVlLmJvb2xlYW4gPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmpl Y3QodHJlZSwgcGFyYW0pOworfQorCisvKgorICogQXBwZW5kIGEgZmxvYXQ4IHBhcmFtZXRlciB0 byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfZmxvYXRfb2JqZWN0KE9ialRyZWUg KnRyZWUsIGNoYXIgKnN1Yl9mbXQsIGZsb2F0OCB2YWx1ZSkKK3sKKwlPYmpFbGVtICAgICpwYXJh bTsKKwljaGFyCSAgICpvYmplY3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCW9iamVj dF9uYW1lID0gYXBwZW5kX29iamVjdF90b19mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOwor CisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVGbG9hdCwgb2JqZWN0X25hbWUpOworCXBhcmFt LT52YWx1ZS5mbHQgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFyYW0p OworfQorCisvKgorICogQXBwZW5kIHRoZSBpbnB1dCBmb3JtYXQgc3RyaW5nIHRvIHRoZSBPYmpU cmVlLgorICovCitzdGF0aWMgdm9pZAorYXBwZW5kX2Zvcm1hdF9zdHJpbmcoT2JqVHJlZSAqdHJl ZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwlpbnQJCQlsZW47CisJY2hhcgkgICAqZm10OworCisJaWYg KHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm10ID0gdHJlZS0+Zm10aW5m by0+ZGF0YTsKKwlsZW4gPSB0cmVlLT5mbXRpbmZvLT5sZW47CisKKwkvKiBBZGQgYSBzZXBhcmF0 b3IgaWYgbmVjZXNzYXJ5ICovCisJaWYgKGxlbiA+IDAgJiYgZm10W2xlbiAtIDFdICE9ICcgJykK KwkJYXBwZW5kU3RyaW5nSW5mb1NwYWNlcyh0cmVlLT5mbXRpbmZvLCAxKTsKKworCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcodHJlZS0+Zm10aW5mbywgc3ViX2ZtdCk7Cit9CisKKy8qCisgKiBBcHBl bmQgYSBOVUxMIG9iamVjdCB0byBhIHRyZWUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVs bF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqc3ViX2ZtdCkKK3sKKwljaGFyCSAgICpvYmpl Y3RfbmFtZTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSkKKwkJcmV0dXJu OworCisJb2JqZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwg c3ViX2ZtdCk7CisKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgbmV3X29iamVjdChPYmpU eXBlTnVsbCwgb2JqZWN0X25hbWUpKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBvYmplY3QgcGFy YW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9vYmplY3Rfb2JqZWN0 KE9ialRyZWUgKnRyZWUsIGNoYXIgKnN1Yl9mbXQsIE9ialRyZWUgKnZhbHVlKQoreworCU9iakVs ZW0gICAgKnBhcmFtOworCWNoYXIJICAgKm9iamVjdF9uYW1lOworCisJQXNzZXJ0KHN1Yl9mbXQp OworCisJaWYgKCF2ZXJib3NlICYmICF2YWx1ZS0+cHJlc2VudCkKKwkJcmV0dXJuOworCisJb2Jq ZWN0X25hbWUgPSBhcHBlbmRfb2JqZWN0X3RvX2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7 CisKKwlwYXJhbSA9IG5ld19vYmplY3QoT2JqVHlwZU9iamVjdCwgb2JqZWN0X25hbWUpOworCXBh cmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwg cGFyYW0pOworfQorCisvKgorICogUmV0dXJuIHRoZSBvYmplY3QgbmFtZSB3aGljaCBpcyBleHRy YWN0ZWQgZnJvbSB0aGUgaW5wdXQgIiole25hbWVbOi5dfSoiCisgKiBzdHlsZSBzdHJpbmcuIEFu ZCBhcHBlbmQgdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcgdG8gdGhlIE9ialRyZWUuCisgKi8KK3N0 YXRpYyBjaGFyICoKK2FwcGVuZF9vYmplY3RfdG9fZm9ybWF0X3N0cmluZyhPYmpUcmVlICp0cmVl LCBjaGFyICpzdWJfZm10KQoreworCVN0cmluZ0luZm9EYXRhIG9iamVjdF9uYW1lOworCWNvbnN0 IGNoYXIgKmVuZF9wdHI7CisJY29uc3QgY2hhciAqY3A7CisJYm9vbAkJc3RhcnRfY29weSA9IGZh bHNlOworCisJaWYgKHN1Yl9mbXQgPT0gTlVMTCB8fCB0cmVlLT5mbXRpbmZvID09IE5VTEwpCisJ CXJldHVybiBzdWJfZm10OworCisJaW5pdFN0cmluZ0luZm8oJm9iamVjdF9uYW1lKTsKKwllbmRf cHRyID0gc3ViX2ZtdCArIHN0cmxlbihzdWJfZm10KTsKKworCWZvciAoY3AgPSBzdWJfZm10OyBj cCA8IGVuZF9wdHI7IGNwKyspCisJeworCQlpZiAoKmNwID09ICd7JykKKwkJeworCQkJc3RhcnRf Y29weSA9IHRydWU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3RhcnRfY29weSkKKwkJ CWNvbnRpbnVlOworCisJCWlmICgqY3AgPT0gJzonIHx8ICpjcCA9PSAnfScpCisJCQlicmVhazsK KworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZvYmplY3RfbmFtZSwgKmNwKTsKKwl9CisK KwlpZiAob2JqZWN0X25hbWUubGVuID09IDApCisJCWVsb2coRVJST1IsICJvYmplY3QgbmFtZSBu b3QgZm91bmQiKTsKKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRyZWUsIHN1Yl9mbXQpOworCisJ cmV0dXJuIG9iamVjdF9uYW1lLmRhdGE7Cit9CisKKy8qCisgKiBBcHBlbmQgYSBwcmVhbGxvY2F0 ZWQgcGFyYW1ldGVyIHRvIGEgdHJlZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCithcHBlbmRf cHJlbWFkZV9vYmplY3QoT2JqVHJlZSAqdHJlZSwgT2JqRWxlbSAqZWxlbSkKK3sKKwlzbGlzdF9w dXNoX2hlYWQoJnRyZWUtPnBhcmFtcywgJmVsZW0tPm5vZGUpOworCXRyZWUtPm51bVBhcmFtcysr OworfQorCisvKgorICogQXBwZW5kIGEgc3RyaW5nIHBhcmFtZXRlciB0byBhIHRyZWUuCisgKi8K K3N0YXRpYyB2b2lkCithcHBlbmRfc3RyaW5nX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpz dWJfZm10LCBjaGFyICogb2JqZWN0X25hbWUsCisJCQkJCSBjaGFyICp2YWx1ZSkKK3sKKwlPYmpF bGVtICAgICpwYXJhbTsKKworCUFzc2VydChzdWJfZm10KTsKKworCWlmICghdmVyYm9zZSAmJiAo dmFsdWUgPT0gTlVMTCB8fCB2YWx1ZVswXSA9PSAnXDAnKSkKKwkJcmV0dXJuOworCisJYXBwZW5k X2Zvcm1hdF9zdHJpbmcodHJlZSwgc3ViX2ZtdCk7CisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5 cGVTdHJpbmcsIG9iamVjdF9uYW1lKTsKKwlwYXJhbS0+dmFsdWUuc3RyaW5nID0gdmFsdWU7CisJ YXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRyZWUsIHBhcmFtKTsKK30KKworLyoKKyAqIFNpbWlsYXIg dG8gZm9ybWF0X3R5cGVfZXh0ZW5kZWQsIGV4Y2VwdCB3ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5m b3JtYXRpb24KKyAqIHNlcGFyYXRlbHk6CisgKgorICogLSBuc3BpZCBpcyB0aGUgc2NoZW1hIE9J RC4gIEZvciBjZXJ0YWluIFNRTC1zdGFuZGFyZCB0eXBlcyB3aGljaCBoYXZlIHdlaXJkCisgKiAg IHR5cG1vZCBydWxlcywgd2UgcmV0dXJuIEludmFsaWRPaWQ7IHRoZSBjYWxsZXIgaXMgZXhwZWN0 ZWQgdG8gbm90IHNjaGVtYS0KKyAqICAgcXVhbGlmeSB0aGUgbmFtZSBub3IgYWRkIHF1b3RlcyB0 byB0aGUgdHlwZSBuYW1lIGluIHRoaXMgY2FzZS4KKyAqCisgKiAtIHR5cG5hbWUgaXMgc2V0IHRv IHRoZSB0eXBlIG5hbWUsIHdpdGhvdXQgcXVvdGVzCisgKgorICogLSB0eXBlbW9kc3RyIGlzIHNl dCB0byB0aGUgdHlwZW1vZCwgaWYgYW55LCBhcyBhIHN0cmluZyB3aXRoIHBhcmVudGhlc2VzCisg KgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhlciBbXXMgbXVzdCBiZSBhZGRlZAorICoK KyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBuYW1lcyB0byB0aGVpciBzdGFuZGFyZC1t YW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUgY2FzZXMgb2YgdHlwZXMgd2l0aCB1bnVz dWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF90eXBlX2RldGFpbGVk KE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJCQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0 eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJIGJvb2wgKnR5cGFycmF5KQoreworCUhl YXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlwZWZvcm07CisJT2lkCQkJYXJyYXlfYmFz ZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXRE YXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1IiwgdHlwZV9v aWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QodHVwbGUpOworCisJ LyoKKwkgKiBDaGVjayBpZiBpdCdzIGEgcmVndWxhciAodmFyaWFibGUgbGVuZ3RoKSBhcnJheSB0 eXBlLiAgQXMgYWJvdmUsCisJICogZml4ZWQtbGVuZ3RoIGFycmF5IHR5cGVzIHN1Y2ggYXMgIm5h bWUiIHNob3VsZG4ndCBnZXQgZGVjb25zdHJ1Y3RlZC4KKwkgKi8KKwlhcnJheV9iYXNlX3R5cGUg PSB0eXBlZm9ybS0+dHlwZWxlbTsKKworCSp0eXBhcnJheSA9IChJc1RydWVBcnJheVR5cGUodHlw ZWZvcm0pICYmIHR5cGVmb3JtLT50eXBzdG9yYWdlICE9IFRZUFNUT1JBR0VfUExBSU4pOworCisJ aWYgKCp0eXBhcnJheSkKKwl7CisJCS8qIFN3aXRjaCBvdXIgYXR0ZW50aW9uIHRvIHRoZSBhcnJh eSBlbGVtZW50IHR5cGUgKi8KKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsKKwkJdHVwbGUgPSBT ZWFyY2hTeXNDYWNoZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bShhcnJheV9iYXNlX3R5cGUp KTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciB0eXBlIHdpdGggT0lEICV1IiwgdHlwZV9vaWQpOworCisJCXR5 cGVmb3JtID0gKEZvcm1fcGdfdHlwZSkgR0VUU1RSVUNUKHR1cGxlKTsKKwkJdHlwZV9vaWQgPSBh cnJheV9iYXNlX3R5cGU7CisJfQorCisJLyoKKwkgKiBTcGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5 cGVzIHdpdGggc3RyYW5nZSB0eXBtb2QgcnVsZXMgd2hlcmUgd2UgcHV0CisJICogdHlwbW9kIGF0 IHRoZSBtaWRkbGUgb2YgbmFtZSAoZS5nLiBUSU1FKDYpIHdpdGggdGltZSB6b25lICkuIFdlIGNh bm5vdAorCSAqIHNjaGVtYS1xdWFsaWZ5IG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUg aW4gdGhlc2UgY2FzZXMuCisJICovCisJKm5zcGlkID0gSW52YWxpZE9pZDsKKworCXN3aXRjaCAo dHlwZV9vaWQpCisJeworCQljYXNlIElOVEVSVkFMT0lEOgorCQkJKnR5cG5hbWUgPSBwc3RyZHVw KCJJTlRFUlZBTCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVNUQU1QVFpPSUQ6CisJCQlpZiAo dHlwZW1vZCA8IDApCisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAgV0lUSCBUSU1F IFpPTkUiKTsKKwkJCWVsc2UKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMgYWRkZWQgYnkg dHlwbW9kLiAqLworCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNUQU1QIik7CisJCQlicmVh azsKKwkJY2FzZSBUSU1FU1RBTVBPSUQ6CisJCQkqdHlwbmFtZSA9IHBzdHJkdXAoIlRJTUVTVEFN UCIpOworCQkJYnJlYWs7CisJCWNhc2UgVElNRVRaT0lEOgorCQkJaWYgKHR5cGVtb2QgPCAwKQor CQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRSBXSVRIIFRJTUUgWk9ORSIpOworCQkJZWxzZQor CQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBhZGRlZCBieSB0eXBtb2QuICovCisJCQkJKnR5 cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsKKwkJY2FzZSBUSU1FT0lEOgorCQkJ KnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKworCQkJ LyoKKwkJCSAqIE5vIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBpcyByZXF1aXJlZCBmb3Igb3RoZXIg dHlwZXMsIHNvIGdldAorCQkJICogdGhlIHR5cGUgbmFtZSBhbmQgc2NoZW1hIGRpcmVjdGx5IGZy b20gdGhlIGNhdGFsb2cuCisJCQkgKi8KKwkJCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBuYW1lc3Bh Y2U7CisJCQkqdHlwbmFtZSA9IHBzdHJkdXAoTmFtZVN0cih0eXBlZm9ybS0+dHlwbmFtZSkpOwor CX0KKworCWlmICh0eXBlbW9kID49IDApCisJCSp0eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIs IHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2RvdXQpOworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBw c3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7Cit9CisKKy8qCisgKiBSZXR1 cm4gdGhlIGRlZmF1bHRzIHZhbHVlcyBvZiBhcmd1bWVudHMgdG8gYSBmdW5jdGlvbiwgYXMgYSBs aXN0IG9mCisgKiBkZXBhcnNlZCBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIExpc3QgKgorRnVu Y3Rpb25HZXREZWZhdWx0cyh0ZXh0ICpwcm9hcmdkZWZhdWx0cykKK3sKKwlMaXN0CSAgICpub2Rl ZGVmczsKKwlMaXN0CSAgICpzdHJkZWZzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisKKwlu b2RlZGVmcyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZSh0ZXh0X3RvX2NzdHJpbmcocHJvYXJnZGVm YXVsdHMpKTsKKwlpZiAoIUlzQShub2RlZGVmcywgTGlzdCkpCisJCWVsb2coRVJST1IsICJwcm9h cmdkZWZhdWx0cyBpcyBub3QgYSBsaXN0Iik7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGVkZWZzKQor CXsKKwkJTm9kZQkgICAqb25lZGVmID0gbGZpcnN0KGNlbGwpOworCisJCXN0cmRlZnMgPSBsYXBw ZW5kKHN0cmRlZnMsIGRlcGFyc2VfZXhwcmVzc2lvbihvbmVkZWYsIE5JTCwgZmFsc2UsIGZhbHNl KSk7CisJfQorCisJcmV0dXJuIHN0cmRlZnM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHN0cmlu ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gUkVMUEVSU0lTVEVOQ0UgdmFsdWUuCisgKi8K K3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sK Kwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgor CQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgor CQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgor CQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVy c2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCQkvKiBt YWtlIGNvbXBpbGVyIGhhcHB5ICovCisJfQorfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJpbmcg cmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHN0b3JhZ2V0eXBlIHZhbHVlLgorICovCitzdGF0 aWMgaW5saW5lIGNoYXIgKgorZ2V0X3R5cGVfc3RvcmFnZShjaGFyIHN0b3JhZ2V0eXBlKQorewor CXN3aXRjaCAoc3RvcmFnZXR5cGUpCisJeworCQljYXNlICdwJzoKKwkJCXJldHVybiAicGxhaW4i OworCQljYXNlICdlJzoKKwkJCXJldHVybiAiZXh0ZXJuYWwiOworCQljYXNlICd4JzoKKwkJCXJl dHVybiAiZXh0ZW5kZWQiOworCQljYXNlICdtJzoKKwkJCXJldHVybiAibWFpbiI7CisJCWRlZmF1 bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdG9yYWdlIHNwZWNpZmllciAlYyIsIHN0b3Jh Z2V0eXBlKTsKKwl9Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBwYXJhbWV0ZXIuCisgKi8K K3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3QoT2JqVHlwZSB0eXBlLCBjaGFyICpuYW1lKQor eworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVt KSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCXBhcmFtLT5vYmp0eXBlID0gdHlwZTsKKworCXJl dHVybiBwYXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCBwYXJhbWV0ZXIu CisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK25ld19vYmplY3Rfb2JqZWN0KE9ialRyZWUgKnZhbHVl KQoreworCU9iakVsZW0gICAgKnBhcmFtOworCisJcGFyYW0gPSBuZXdfb2JqZWN0KE9ialR5cGVP YmplY3QsIE5VTEwpOworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJldHVybiBw YXJhbTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0cmVlIHRvIHN0b3JlIHBh cmFtZXRlciB2YWx1ZXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlKGNoYXIg KmZtdCkKK3sKKwlPYmpUcmVlICAgICpwYXJhbXM7CisKKwlwYXJhbXMgPSBwYWxsb2MwKHNpemVv ZihPYmpUcmVlKSk7CisJcGFyYW1zLT5wcmVzZW50ID0gdHJ1ZTsKKwlzbGlzdF9pbml0KCZwYXJh bXMtPnBhcmFtcyk7CisKKwlpZiAoZm10KQorCXsKKwkJcGFyYW1zLT5mbXRpbmZvID0gbWFrZVN0 cmluZ0luZm8oKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhwYXJhbXMtPmZtdGluZm8sIGZt dCk7CisJfQorCisJcmV0dXJuIHBhcmFtczsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUg dG8gc2V0IHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMuCisgKgorICogRWxlbWVudHMgInNjaGVt YW5hbWUiIGFuZCAib2JqbmFtZSIgYXJlIHNldC4gIElmIHRoZSBuYW1lc3BhY2UgT0lECisgKiBj b3JyZXNwb25kcyB0byBhIHRlbXAgc2NoZW1hLCB0aGF0J3Mgc2V0IHRvICJwZ190ZW1wIi4KKyAq CisgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRob3NlIHR3byBlbGVtZW50IHR5cGVzIGlzIHdo ZXRoZXIgdGhlIG9iam5hbWUgd2lsbAorICogYmUgcXVvdGVkIGFzIGFuIGlkZW50aWZpZXIgb3Ig bm90LCB3aGljaCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgdGhpcyByb3V0aW5lCisgKiBjb25jZXJu cyBpdHNlbGYgd2l0aDsgdGhhdCB3aWxsIGJlIHVwIHRvIHRoZSBleHBhbmQgZnVuY3Rpb24uCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShPaWQgbnNwaWQs IGNoYXIgKm5hbWUpCit7CisJT2JqVHJlZSAgICAqcXVhbGlmaWVkOworCWNoYXIJICAgKm5hbWVz cGFjZTsKKworCWlmIChpc0FueVRlbXBOYW1lc3BhY2UobnNwaWQpKQorCQluYW1lc3BhY2UgPSBw c3RyZHVwKCJwZ190ZW1wIik7CisJZWxzZQorCQluYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25h bWUobnNwaWQpOworCisJcXVhbGlmaWVkID0gbmV3X29ianRyZWVfVkEoTlVMTCwgMiwKKwkJCQkJ CQkgICAic2NoZW1hbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5hbWVzcGFjZSwKKwkJCQkJCQkgICAi b2JqbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxp ZmllZDsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0IHVwICV7fUQgYW5kICV7 fU8gZWxlbWVudHMsIHdpdGggdGhlIG9iamVjdCBzcGVjaWZpZWQKKyAqIGJ5IGNsYXNzSWQvb2Jq SWQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChP aWQgY2xhc3NJZCwgT2lkIG9iamVjdElkKQoreworCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwlS ZWxhdGlvbgljYXRhbG9nOworCUhlYXBUdXBsZQljYXRvYmo7CisJRGF0dW0JCW9iam5zcDsKKwlE YXR1bQkJb2JqbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1fbmFtZTsKKwlBdHRyTnVtYmVyCUFudW1f bmFtZXNwYWNlOworCUF0dHJOdW1iZXIJQW51bV9vaWQgPSBnZXRfb2JqZWN0X2F0dG51bV9vaWQo Y2xhc3NJZCk7CisJYm9vbAkJaXNudWxsOworCisJY2F0YWxvZyA9IHRhYmxlX29wZW4oY2xhc3NJ ZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCWNhdG9iaiA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9v aWQoY2F0YWxvZywgQW51bV9vaWQsIG9iamVjdElkKTsKKwlpZiAoIWNhdG9iaikKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9iamVjdCB3aXRoIE9JRCAldSBvZiBjYXRh bG9nIFwiJXNcIiIsCisJCQkgb2JqZWN0SWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGNhdGFs b2cpKTsKKwlBbnVtX25hbWUgPSBnZXRfb2JqZWN0X2F0dG51bV9uYW1lKGNsYXNzSWQpOworCUFu dW1fbmFtZXNwYWNlID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGNsYXNzSWQpOworCisJ b2JqbnNwID0gaGVhcF9nZXRhdHRyKGNhdG9iaiwgQW51bV9uYW1lc3BhY2UsIFJlbGF0aW9uR2V0 RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2co RVJST1IsICJudWxsIG5hbWVzcGFjZSBmb3Igb2JqZWN0ICV1Iiwgb2JqZWN0SWQpOworCisJb2Jq bmFtZSA9IGhlYXBfZ2V0YXR0cihjYXRvYmosIEFudW1fbmFtZSwgUmVsYXRpb25HZXREZXNjcihj YXRhbG9nKSwKKwkJCQkJCSAgICZpc251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1Is ICJudWxsIGF0dHJpYnV0ZSBuYW1lIGZvciBvYmplY3QgJXUiLCBvYmplY3RJZCk7CisKKwlxdWFs aWZpZWQgPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoRGF0dW1HZXRPYmplY3RJZChvYmpuc3Ap LAorCQkJCQkJCQkJCSBOYW1lU3RyKCpEYXR1bUdldE5hbWUob2JqbmFtZSkpKTsKKwl0YWJsZV9j bG9zZShjYXRhbG9nLCBBY2Nlc3NTaGFyZUxvY2spOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30K KworLyoKKyAqIEhlbHBlciByb3V0aW5lIGZvciAle31SIG9iamVjdHMsIHdpdGggcm9sZSBzcGVj aWZpZWQgYnkgUm9sZVNwZWMgbm9kZS4KKyAqIFNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMgUk9MRVNQ RUNfQ1VSUkVOVF9VU0VSIGFyZSBleHBhbmRlZCB0byB0aGVpciBmaW5hbAorICogbmFtZXMuCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhSb2xlU3BlYyAq c3BlYykKK3sKKwljaGFyCSAgICpyb2xldHlwZTsKKworCWlmIChzcGVjLT5yb2xldHlwZSAhPSBS T0xFU1BFQ19QVUJMSUMpCisJCXJvbGV0eXBlID0gZ2V0X3JvbGVzcGVjX25hbWUoc3BlYyk7CisJ ZWxzZQorCQlyb2xldHlwZSA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZB KE5VTEwsIDIsCisJCQkJCQkgICJpc19wdWJsaWMiLCBPYmpUeXBlQm9vbCwgc3BlYy0+cm9sZXR5 cGUgPT0gUk9MRVNQRUNfUFVCTElDLAorCQkJCQkJICAicm9sZW5hbWUiLCBPYmpUeXBlU3RyaW5n LCByb2xldHlwZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgcm91dGluZSBmb3IgJXt9UiBvYmplY3Rz LCB3aXRoIHJvbGUgc3BlY2lmaWVkIGJ5IE9JRC4gKEFDTF9JRF9QVUJMSUMKKyAqIG1lYW5zIHRv IHVzZSAicHVibGljIikuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK25ld19vYmp0cmVlX2Zvcl9y b2xlX2lkKE9pZCByb2xlb2lkKQoreworCU9ialRyZWUgICAgKnJvbGU7CisKKwlpZiAocm9sZW9p ZCAhPSBBQ0xfSURfUFVCTElDKQorCXsKKwkJSGVhcFR1cGxlCXJvbHR1cDsKKwkJY2hhcgkgICAq cm9sZW5hbWU7CisKKwkJcm9sdHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFVVEhPSUQsIE9iamVjdElk R2V0RGF0dW0ocm9sZW9pZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocm9sdHVwKSkKKwkJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByb2xlIHdpdGggT0lEICV1Iiwg cm9sZW9pZCk7CisKKwkJcm9sZW5hbWUgPSBOYW1lU3RyKCgoRm9ybV9wZ19hdXRoaWQpIEdFVFNU UlVDVChyb2x0dXApKS0+cm9sbmFtZSk7CisJCXJvbGUgPSBuZXdfb2JqdHJlZV9WQSgiJXtyb2xl bmFtZX1JIiwgMSwKKwkJCQkJCQkgICJyb2xlbmFtZSIsIE9ialR5cGVTdHJpbmcsIHBzdHJkdXAo cm9sZW5hbWUpKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocm9sdHVwKTsKKwl9CisJZWxzZQorCQly b2xlID0gbmV3X29ianRyZWVfVkEoIiV7cm9sZW5hbWV9SSIsIDEsCisJCQkJCQkJICAicm9sZW5h bWUiLCBPYmpUeXBlU3RyaW5nLCAicHVibGljIik7CisKKwlyZXR1cm4gcm9sZTsKK30KKworLyoK KyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50cy4KKyAqLworc3RhdGlj IE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJZCwgaW50MzIgdHlwbW9k KQoreworCU9pZAkJCXR5cG5zcGlkOworCWNoYXIJICAgKnR5cG5zcDsKKwljaGFyCSAgICp0eXBl bmFtZSA9IE5VTEw7CisJY2hhcgkgICAqdHlwbW9kc3RyOworCWJvb2wJCXR5cGFycmF5OworCisJ Zm9ybWF0X3R5cGVfZGV0YWlsZWQodHlwZUlkLCB0eXBtb2QsCisJCQkJCQkgJnR5cG5zcGlkLCAm dHlwZW5hbWUsICZ0eXBtb2RzdHIsICZ0eXBhcnJheSk7CisKKwlpZiAoT2lkSXNWYWxpZCh0eXBu c3BpZCkpCisJCXR5cG5zcCA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKHR5cG5zcGlkKTsK KwllbHNlCisJCXR5cG5zcCA9IHBzdHJkdXAoIiIpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZB KE5VTEwsIDQsCisJCQkJCQkgICJzY2hlbWFuYW1lIiwgT2JqVHlwZVN0cmluZywgdHlwbnNwLAor CQkJCQkJICAidHlwZW5hbWUiLCBPYmpUeXBlU3RyaW5nLCB0eXBlbmFtZSwKKwkJCQkJCSAgInR5 cG1vZCIsIE9ialR5cGVTdHJpbmcsIHR5cG1vZHN0ciwKKwkJCQkJCSAgInR5cGFycmF5IiwgT2Jq VHlwZUJvb2wsIHR5cGFycmF5KTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IG9iamVjdCB0 cmVlIHRvIHN0b3JlIHBhcmFtZXRlciB2YWx1ZXMgLS0gdmFyYXJncyB2ZXJzaW9uLgorICoKKyAq IFRoZSAiZm10IiBhcmd1bWVudCBpcyB1c2VkIHRvIGFwcGVuZCBhcyBhICJmbXQiIGVsZW1lbnQg aW4gdGhlIG91dHB1dCBibG9iLgorICogbnVtb2JqcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBl eHRyYSBlbGVtZW50cyB0byBhcHBlbmQ7IGZvciBlYWNoIG9uZSwgYQorICogbmFtZSAoc3RyaW5n KSwgdHlwZSAoZnJvbSB0aGUgT2JqVHlwZSBlbnVtKSBhbmQgdmFsdWUgbXVzdCBiZSBzdXBwbGll ZC4gIFRoZQorICogdmFsdWUgbXVzdCBtYXRjaCB0aGUgdHlwZSBnaXZlbjsgZm9yIGluc3RhbmNl LCBPYmpUeXBlSW50ZWdlciByZXF1aXJlcyBhbgorICogaW50NjQsIE9ialR5cGVTdHJpbmcgcmVx dWlyZXMgYSBjaGFyICosIE9ialR5cGVBcnJheSByZXF1aXJlcyBhIGxpc3QgKG9mCisgKiBPYmpF bGVtKSwgT2JqVHlwZU9iamVjdCByZXF1aXJlcyBhbiBPYmpUcmVlLCBhbmQgc28gb24uICBFYWNo IGVsZW1lbnQgdHlwZSAqCisgKiBtdXN0IG1hdGNoIHRoZSBjb252ZXJzaW9uIHNwZWNpZmllciBn aXZlbiBpbiB0aGUgZm9ybWF0IHN0cmluZywgYXMgZGVzY3JpYmVkCisgKiBpbiBkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZCwgcS52LgorICoKKyAqIE5vdGUgd2UgZG9uJ3QgaGF2ZSB0aGUgbHV4 dXJ5IG9mIHNwcmludGYtbGlrZSBjb21waWxlciB3YXJuaW5ncyBmb3IKKyAqIG1hbGZvcm1lZCBh cmd1bWVudCBsaXN0cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfVkEoY2hh ciAqZm10LCBpbnQgbnVtb2JqcywuLi4pCit7CisJT2JqVHJlZSAgICAqdHJlZTsKKwl2YV9saXN0 CQlhcmdzOworCWludAkJCWk7CisKKwkvKiBTZXQgdXAgdGhlIHRvcGxldmVsIG9iamVjdCBhbmQg aXRzICJmbXQiICovCisJdHJlZSA9IG5ld19vYmp0cmVlKGZtdCk7CisKKwkvKiBBbmQgcHJvY2Vz cyB0aGUgZ2l2ZW4gdmFyYXJncyAqLworCXZhX3N0YXJ0KGFyZ3MsIG51bW9ianMpOworCWZvciAo aSA9IDA7IGkgPCBudW1vYmpzOyBpKyspCisJeworCQljaGFyCSAgICpuYW1lOworCQlPYmpUeXBl CQl0eXBlOworCQlPYmpFbGVtICAgICplbGVtOworCisJCW5hbWUgPSB2YV9hcmcoYXJncywgY2hh ciAqKTsKKwkJdHlwZSA9IHZhX2FyZyhhcmdzLCBPYmpUeXBlKTsKKwkJZWxlbSA9IG5ld19vYmpl Y3QodHlwZSwgTlVMTCk7CisKKwkJLyoKKwkJICogRm9yIGFsbCBwYXJhbSB0eXBlcyBvdGhlciB0 aGFuIE9ialR5cGVOdWxsLCB0aGVyZSBtdXN0IGJlIGEgdmFsdWUgaW4KKwkJICogdGhlIHZhcmFy Z3MuIEZldGNoIGl0IGFuZCBhZGQgdGhlIGZ1bGx5IGZvcm1lZCBzdWJvYmplY3QgaW50byB0aGUK KwkJICogbWFpbiBvYmplY3QuCisJCSAqLworCQlzd2l0Y2ggKHR5cGUpCisJCXsKKwkJCWNhc2Ug T2JqVHlwZU51bGw6CisJCQkJLyogTnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZp b3VzbHkpICovCisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0tPnZh bHVlLmJvb2xlYW4gPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2Jq VHlwZVN0cmluZzoKKwkJCQllbGVtLT52YWx1ZS5zdHJpbmcgPSB2YV9hcmcoYXJncywgY2hhciAq KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUFycmF5OgorCQkJCWVsZW0tPnZhbHVlLmFy cmF5ID0gdmFfYXJnKGFyZ3MsIExpc3QgKik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVJ bnRlZ2VyOgorCQkJCWVsZW0tPnZhbHVlLmludGVnZXIgPSB2YV9hcmcoYXJncywgaW50KTsKKwkJ CQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJCWVsZW0tPnZhbHVlLmZsdCA9IHZh X2FyZyhhcmdzLCBkb3VibGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlT2JqZWN0Ogor CQkJCWVsZW0tPnZhbHVlLm9iamVjdCA9IHZhX2FyZyhhcmdzLCBPYmpUcmVlICopOworCQkJCWJy ZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBPYmpUcmVlIGVsZW1l bnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisKKwkJZWxlbS0+bmFtZSA9IG5hbWU7CisJCWFwcGVu ZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVtKTsKKwl9CisKKwl2YV9lbmQoYXJncyk7CisJcmV0 dXJuIHRyZWU7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0LgorICov CitzdGF0aWMgT2JqRWxlbSAqCituZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlP YmpFbGVtICAgICpwYXJhbTsKKworCUFzc2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9IG5ld19vYmpl Y3QoT2JqVHlwZVN0cmluZywgTlVMTCk7CisJcGFyYW0tPnZhbHVlLnN0cmluZyA9IHZhbHVlOwor CisJcmV0dXJuIHBhcmFtOworfQorCisvKgorICogUHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1h dCBzdHJpbmcgZnJvbSB0aGUgT2JqVHJlZSBpbnRvIHRoZSBvdXRwdXQgcGFyc2UKKyAqIHN0YXRl LgorICovCitzdGF0aWMgdm9pZAorb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChKc29uYlBh cnNlU3RhdGUgKnN0YXRlLCBPYmpUcmVlICp0cmVlKQoreworCUpzb25iVmFsdWUJa2V5OworCUpz b25iVmFsdWUJdmFsOworCisJaWYgKHRyZWUtPmZtdGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOwor CisJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJa2V5 LnZhbC5zdHJpbmcudmFsID0gImZtdCI7CisJa2V5LnZhbC5zdHJpbmcubGVuID0gc3RybGVuKGtl eS52YWwuc3RyaW5nLnZhbCk7CisJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfS0VZLCAma2V5 KTsKKworCS8qIFRoZW4gcHJvY2VzcyB0aGUgcHJlLWJ1aWx0IGZvcm1hdCBzdHJpbmcgKi8KKwl2 YWwudHlwZSA9IGpidlN0cmluZzsKKwl2YWwudmFsLnN0cmluZy5sZW4gPSB0cmVlLT5mbXRpbmZv LT5sZW47CisJdmFsLnZhbC5zdHJpbmcudmFsID0gdHJlZS0+Zm10aW5mby0+ZGF0YTsKKwlwdXNo SnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9WQUxVRSwgJnZhbCk7Cit9CisKKy8qCisgKiBDcmVhdGUg YSBKU09OQiByZXByZXNlbnRhdGlvbiBmcm9tIGFuIE9ialRyZWUuCisgKi8KK3N0YXRpYyBKc29u YiAqCitvYmp0cmVlX3RvX2pzb25iKE9ialRyZWUgKnRyZWUpCit7CisJSnNvbmJWYWx1ZSAqdmFs dWU7CisKKwl2YWx1ZSA9IG9ianRyZWVfdG9fanNvbmJfcmVjKHRyZWUsIE5VTEwpOworCXJldHVy biBKc29uYlZhbHVlVG9Kc29uYih2YWx1ZSk7Cit9CisKKy8qCisgKiBIZWxwZXIgZm9yIG9ianRy ZWVfdG9fanNvbmI6IHByb2Nlc3MgYW4gaW5kaXZpZHVhbCBlbGVtZW50IGZyb20gYW4gb2JqZWN0 IG9yCisgKiBhbiBhcnJheSBpbnRvIHRoZSBvdXRwdXQgcGFyc2Ugc3RhdGUuCisgKi8KK3N0YXRp YyB2b2lkCitvYmp0cmVlX3RvX2pzb25iX2VsZW1lbnQoSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSwg T2JqRWxlbSAqb2JqZWN0LAorCQkJCQkJIEpzb25iSXRlcmF0b3JUb2tlbiBlbGVtX3Rva2VuKQor eworCUpzb25iVmFsdWUJdmFsOworCisJc3dpdGNoIChvYmplY3QtPm9ianR5cGUpCisJeworCQlj YXNlIE9ialR5cGVOdWxsOgorCQkJdmFsLnR5cGUgPSBqYnZOdWxsOworCQkJcHVzaEpzb25iVmFs dWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlw ZVN0cmluZzoKKwkJCXZhbC50eXBlID0gamJ2U3RyaW5nOworCQkJdmFsLnZhbC5zdHJpbmcubGVu ID0gc3RybGVuKG9iamVjdC0+dmFsdWUuc3RyaW5nKTsKKwkJCXZhbC52YWwuc3RyaW5nLnZhbCA9 IG9iamVjdC0+dmFsdWUuc3RyaW5nOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rv a2VuLCAmdmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQl2YWwu dHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykKKwkJCQlE YXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShpbnQ4X251bWVyaWMsCisJCQkJCQkJ CQkJCQkJb2JqZWN0LT52YWx1ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUs IGVsZW1fdG9rZW4sICZ2YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlRmxvYXQ6CisJ CQl2YWwudHlwZSA9IGpidk51bWVyaWM7CisJCQl2YWwudmFsLm51bWVyaWMgPSAoTnVtZXJpYykK KwkJCQlEYXR1bUdldE51bWVyaWMoRGlyZWN0RnVuY3Rpb25DYWxsMShmbG9hdDhfbnVtZXJpYywK KwkJCQkJCQkJCQkJCQlvYmplY3QtPnZhbHVlLmludGVnZXIpKTsKKwkJCXB1c2hKc29uYlZhbHVl KCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVC b29sOgorCQkJdmFsLnR5cGUgPSBqYnZCb29sOworCQkJdmFsLnZhbC5ib29sZWFuID0gb2JqZWN0 LT52YWx1ZS5ib29sZWFuOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAm dmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZU9iamVjdDoKKwkJCS8qIFJlY3Vyc2l2 ZWx5IGFkZCB0aGUgb2JqZWN0IGludG8gdGhlIGV4aXN0aW5nIHBhcnNlIHN0YXRlICovCisJCQlv Ymp0cmVlX3RvX2pzb25iX3JlYyhvYmplY3QtPnZhbHVlLm9iamVjdCwgc3RhdGUpOworCQkJYnJl YWs7CisKKwkJY2FzZSBPYmpUeXBlQXJyYXk6CisJCQl7CisJCQkJTGlzdENlbGwgICAqY2VsbDsK KworCQkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgV0pCX0JFR0lOX0FSUkFZLCBOVUxMKTsKKwkJ CQlmb3JlYWNoKGNlbGwsIG9iamVjdC0+dmFsdWUuYXJyYXkpCisJCQkJeworCQkJCQlPYmpFbGVt ICAgICplbGVtID0gbGZpcnN0KGNlbGwpOworCisJCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVu dChzdGF0ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJCX0KKwkJCQlwdXNoSnNvbmJWYWx1ZSgmc3Rh dGUsIFdKQl9FTkRfQVJSQVksIE5VTEwpOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgb2JqZWN0IHR5cGUgJWQiLCBvYmplY3QtPm9i anR5cGUpOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogUmVjdXJzaXZlIGhlbHBlciBmb3Ig b2JqdHJlZV90b19qc29uYi4KKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2JqdHJlZV90b19q c29uYl9yZWMoT2JqVHJlZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sKKwlzbGlz dF9pdGVyCWl0ZXI7CisKKwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1Qs IE5VTEwpOworCisJb2JqdHJlZV9mbXRfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgdHJlZSk7CisK KwlzbGlzdF9mb3JlYWNoKGl0ZXIsICZ0cmVlLT5wYXJhbXMpCisJeworCQlPYmpFbGVtICAgICpv YmplY3QgPSBzbGlzdF9jb250YWluZXIoT2JqRWxlbSwgbm9kZSwgaXRlci5jdXIpOworCQlKc29u YlZhbHVlCWtleTsKKworCQkvKiBQdXNoIHRoZSBrZXkgZmlyc3QgKi8KKwkJa2V5LnR5cGUgPSBq YnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPm5hbWUpOwor CQlrZXkudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPm5hbWU7CisJCXB1c2hKc29uYlZhbHVlKCZz dGF0ZSwgV0pCX0tFWSwgJmtleSk7CisKKwkJLyogVGhlbiBwcm9jZXNzIHRoZSB2YWx1ZSBhY2Nv cmRpbmcgdG8gaXRzIHR5cGUgKi8KKwkJb2JqdHJlZV90b19qc29uYl9lbGVtZW50KHN0YXRlLCBv YmplY3QsIFdKQl9WQUxVRSk7CisJfQorCisJcmV0dXJuIHB1c2hKc29uYlZhbHVlKCZzdGF0ZSwg V0pCX0VORF9PQkpFQ1QsIE5VTEwpOworfQorCisvKgorICogU3Vicm91dGluZSBmb3IgQ1JFQVRF IFRBQkxFL0NSRUFURSBET01BSU4gZGVwYXJzaW5nLgorICoKKyAqIEdpdmVuIGEgdGFibGUgT0lE IG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5kIGFwcGVuZCB0aGVtIHRv CisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVkIGxpc3QgaXMgcmV0dXJu ZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCByZWd1bGFyIHRhYmxlcywg YW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRfRk9SRUlHTiBjb25zdHJh aW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK29idGFpbkNvbnN0 cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lkIGRvbWFpbklkKQorewor CVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lzU2NhbkRlc2Mgc2NhbjsK KwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZSAgICAqY29uc3RyOworCisJLyogT25seSBvbmUg bWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkgXiBPaWRJc1Zh bGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIFNjYW4gcGdfY29uc3RyYWludCB0byBmZXRjaCBh bGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9uLgorCSAqLwor CWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5SW5pdCgma2V5 LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlvbklkKSk7CisJ CXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVsaWRUeXBpZE5h bWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0KKwllbHNlCisJ eworCQlTY2FuS2V5SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQs CisJCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXRE YXR1bShkb21haW5JZCkpOworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29u c3RyYWludFR5cGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9 CisKKwkvKgorCSAqIEZvciBlYWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qg b2YgdGFibGUgZWxlbWVudHMuICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9u bHkgdGhlIHByaW50YWJsZSBpbmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFy YXRlIGF0dHJpYnV0ZXMgdG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJ ICogYXV0b21hdGljIHByb2Nlc3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQo dHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWlu dCBjb25zdHJGb3JtOworCQljaGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9y bV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9y bS0+Y29udHlwZSkKKwkJeworCQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUg PSAiY2hlY2siOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJ Y29udGludWU7CQkvKiBub3QgaGVyZSAqLworCQkJY2FzZSBDT05TVFJBSU5UX1BSSU1BUlk6CisJ CQkJY29udHlwZSA9ICJwcmltYXJ5IGtleSI7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJ TlRfVU5JUVVFOgorCQkJCWNvbnR5cGUgPSAidW5pcXVlIjsKKwkJCQlicmVhazsKKwkJCWNhc2Ug Q09OU1RSQUlOVF9UUklHR0VSOgorCQkJCWNvbnR5cGUgPSAidHJpZ2dlciI7CisJCQkJYnJlYWs7 CisJCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OOgorCQkJCWNvbnR5cGUgPSAiZXhjbHVzaW9u IjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXpl ZCBjb25zdHJhaW50IHR5cGUiKTsKKwkJfQorCisJCS8qCisJCSAqICJ0eXBlIiBhbmQgImNvbnR5 cGUiIGFyZSBub3QgcGFydCBvZiB0aGUgcHJpbnRhYmxlIG91dHB1dCwgYnV0IGFyZQorCQkgKiB1 c2VmdWwgdG8gcHJvZ3JhbW1hdGljYWxseSBkaXN0aW5ndWlzaCB0aGVzZSBmcm9tIGNvbHVtbnMg YW5kIGFtb25nCisJCSAqIGRpZmZlcmVudCBjb25zdHJhaW50IHR5cGVzLgorCQkgKgorCQkgKiBY WFggaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGFsc28gbGlzdCB0aGUgY29sdW1uIG5hbWVzIGluIGEg UEssIGV0Yy4KKwkJICovCisJCWNvbnN0ciA9IG5ld19vYmp0cmVlX1ZBKCJDT05TVFJBSU5UICV7 bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgNCwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiY29uc3RyYWludCIsCisJCQkJCQkJCSJjb250eXBlIiwgT2JqVHlwZVN0cmluZywgY29udHlw ZSwKKwkJCQkJCQkJIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBOYW1lU3RyKGNvbnN0ckZvcm0tPmNv bm5hbWUpLAorCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCXBn X2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ckZvcm0tPm9pZCkpOworCQll bGVtZW50cyA9IGxhcHBlbmQoZWxlbWVudHMsIG5ld19vYmplY3Rfb2JqZWN0KGNvbnN0cikpOwor CX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBBY2Nl c3NTaGFyZUxvY2spOworCisJcmV0dXJuIGVsZW1lbnRzOworfQorCisvKgorICogUmV0dXJuIGFu IGluZGV4IGRlZmluaXRpb24sIHNwbGl0IGludG8gc2V2ZXJhbCBwaWVjZXMuCisgKgorICogQSBs YXJnZSBhbW91bnQgb2YgY29kZSBpcyBkdXBsaWNhdGVkIGZyb20gIHBnX2dldF9pbmRleGRlZl93 b3JrZXIsIGJ1dAorICogY29udHJvbCBmbG93IGlzIGRpZmZlcmVudCBlbm91Z2ggdGhhdCBpdCBk b2Vzbid0IHNlZW0gd29ydGgga2VlcGluZyB0aGVtCisgKiB0b2dldGhlci4KKyAqLworc3RhdGlj IHZvaWQKK3BnX2dldF9pbmRleGRlZl9kZXRhaWxlZChPaWQgaW5kZXhyZWxpZCwKKwkJCQkJCSBj aGFyICoqaW5kZXhfYW0sCisJCQkJCQkgY2hhciAqKmRlZmluaXRpb24sCisJCQkJCQkgY2hhciAq KnJlbG9wdGlvbnMsCisJCQkJCQkgY2hhciAqKnRhYmxlc3BhY2UsCisJCQkJCQkgY2hhciAqKndo ZXJlQ2xhdXNlKQoreworCUhlYXBUdXBsZQlodF9pZHg7CisJSGVhcFR1cGxlCWh0X2lkeHJlbDsK KwlIZWFwVHVwbGUJaHRfYW07CisJRm9ybV9wZ19pbmRleCBpZHhyZWM7CisJRm9ybV9wZ19jbGFz cyBpZHhyZWxyZWM7CisJRm9ybV9wZ19hbQlhbXJlYzsKKwlJbmRleEFtUm91dGluZSAqYW1yb3V0 aW5lOworCUxpc3QJICAgKmluZGV4cHJzOworCUxpc3RDZWxsICAgKmluZGV4cHJfaXRlbTsKKwlM aXN0CSAgICpjb250ZXh0OworCU9pZAkJCWluZHJlbGlkOworCWludAkJCWtleW5vOworCURhdHVt CQlpbmRjb2xsRGF0dW07CisJRGF0dW0JCWluZGNsYXNzRGF0dW07CisJRGF0dW0JCWluZG9wdGlv bkRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlvaWR2ZWN0b3IgICppbmRjb2xsYXRpb247CisJb2lk dmVjdG9yICAqaW5kY2xhc3M7CisJaW50MnZlY3RvciAqaW5kb3B0aW9uOworCVN0cmluZ0luZm9E YXRhIGRlZmluaXRpb25CdWY7CisKKwkqdGFibGVzcGFjZSA9IE5VTEw7CisJKndoZXJlQ2xhdXNl ID0gTlVMTDsKKworCS8qIEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRo ZSBpbmRleCAqLworCWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJ ZEdldERhdHVtKGluZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4IHdpdGggT0lEICV1 IiwgaW5kZXhyZWxpZCk7CisJaWR4cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9p ZHgpOworCisJaW5kcmVsaWQgPSBpZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlk ID09IGlkeHJlYy0+aW5kZXhyZWxpZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGlu ZGNsYXNzLCBhbmQgaW5kb3B0aW9uIHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5 c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5k ZXhfaW5kY29sbGF0aW9uLCAmaXNudWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0 aW9uID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWlu ZGNsYXNzRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJ CQkJQW51bV9wZ19pbmRleF9pbmRjbGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOwor CWluZGNsYXNzID0gKG9pZHZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7 CisKKwlpbmRvcHRpb25EYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgs CisJCQkJCQkJCQkgQW51bV9wZ19pbmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCgh aXNudWxsKTsKKwlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5k b3B0aW9uRGF0dW0pOworCisJLyogRmV0Y2ggdGhlIHBnX2NsYXNzIHR1cGxlIG9mIHRoZSBpbmRl eCByZWxhdGlvbiAqLworCWh0X2lkeHJlbCA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIE9iamVj dElkR2V0RGF0dW0oaW5kZXhyZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9pZHhy ZWwpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0 aCBPSUQgJXUiLCBpbmRleHJlbGlkKTsKKwlpZHhyZWxyZWMgPSAoRm9ybV9wZ19jbGFzcykgR0VU U1RSVUNUKGh0X2lkeHJlbCk7CisKKwkvKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGlu ZGV4JyBhY2Nlc3MgbWV0aG9kICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9i amVjdElkR2V0RGF0dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChodF9hbSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3Mg bWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChG b3JtX3BnX2FtKSBHRVRTVFJVQ1QoaHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4 cHJlc3Npb25zLCBpZiBhbnkuICAoTk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkg KiB2ZXJzaW9ucyBvZiB0aGUgZXhwcmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3 YW50IHRvIGRpc3BsYXkKKwkgKiBub24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8K KwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVM TCkpCisJeworCQlEYXR1bQkJZXhwcnNEYXR1bTsKKwkJY2hhcgkgICAqZXhwcnNTdHJpbmc7CisK KwkJZXhwcnNEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJ CQkJCQkgQW51bV9wZ19pbmRleF9pbmRleHBycywgJmlzbnVsbCk7CisJCUFzc2VydCghaXNudWxs KTsKKwkJZXhwcnNTdHJpbmcgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKGV4cHJzRGF0dW0pOworCQlp bmRleHBycyA9IChMaXN0ICopIHN0cmluZ1RvTm9kZShleHByc1N0cmluZyk7CisJCXBmcmVlKGV4 cHJzU3RyaW5nKTsKKwl9CisJZWxzZQorCQlpbmRleHBycyA9IE5JTDsKKworCWluZGV4cHJfaXRl bSA9IGxpc3RfaGVhZChpbmRleHBycyk7CisKKwljb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2Zv cihnZXRfcmVsX25hbWUoaW5kcmVsaWQpLCBpbmRyZWxpZCk7CisKKwlpbml0U3RyaW5nSW5mbygm ZGVmaW5pdGlvbkJ1Zik7CisKKwkvKiBPdXRwdXQgaW5kZXggQU0gKi8KKwkqaW5kZXhfYW0gPSBw c3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhbXJlYy0+YW1uYW1lKSkpOworCisJLyog RmV0Y2ggdGhlIGluZGV4IEFNJ3MgQVBJIHN0cnVjdCAqLworCWFtcm91dGluZSA9IEdldEluZGV4 QW1Sb3V0aW5lKGFtcmVjLT5hbWhhbmRsZXIpOworCisJLyoKKwkgKiBPdXRwdXQgaW5kZXggZGVm aW5pdGlvbi4gIE5vdGUgdGhlIG91dGVyIHBhcmVucyBtdXN0IGJlIHN1cHBsaWVkIGJ5CisJICog Y2FsbGVyLgorCSAqLworCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGlkeHJlYy0+aW5kbmF0dHM7 IGtleW5vKyspCisJeworCQlBdHRyTnVtYmVyCWF0dG51bSA9IGlkeHJlYy0+aW5ka2V5LnZhbHVl c1trZXlub107CisJCWludDE2CQlvcHQgPSBpbmRvcHRpb24tPnZhbHVlc1trZXlub107CisJCU9p ZAkJCWtleWNvbHR5cGU7CisJCU9pZAkJCWtleWNvbGNvbGxhdGlvbjsKKwkJT2lkCQkJaW5kY29s bDsKKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZkZWZpbml0aW9uQnVmLCBrZXlubyA9PSAw ID8gIiIgOiAiLCAiKTsKKworCQlpZiAoYXR0bnVtICE9IDApCisJCXsKKwkJCS8qIFNpbXBsZSBp bmRleCBjb2x1bW4gKi8KKwkJCWNoYXIJICAgKmF0dG5hbWU7CisJCQlpbnQzMgkJa2V5Y29sdHlw bW9kOworCisJCQlhdHRuYW1lID0gZ2V0X2F0dG5hbWUoaW5kcmVsaWQsIGF0dG51bSwgZmFsc2Up OworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgcXVvdGVfaWRlbnRp ZmllcihhdHRuYW1lKSk7CisJCQlnZXRfYXR0dHlwZXR5cG1vZGNvbGwoaW5kcmVsaWQsIGF0dG51 bSwKKwkJCQkJCQkJICAma2V5Y29sdHlwZSwgJmtleWNvbHR5cG1vZCwKKwkJCQkJCQkJICAma2V5 Y29sY29sbGF0aW9uKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIEV4cHJlc3Npb25hbCBpbmRl eCAqLworCQkJTm9kZQkgICAqaW5kZXhrZXk7CisJCQljaGFyCSAgICpzdHI7CisKKwkJCWlmIChp bmRleHByX2l0ZW0gPT0gTlVMTCkKKwkJCQllbG9nKEVSUk9SLCAidG9vIGZldyBlbnRyaWVzIGlu IGluZGV4cHJzIGxpc3QiKTsKKwkJCWluZGV4a2V5ID0gKE5vZGUgKikgbGZpcnN0KGluZGV4cHJf aXRlbSk7CisJCQlpbmRleHByX2l0ZW0gPSBsbmV4dChpbmRleHBycywgaW5kZXhwcl9pdGVtKTsK KworCQkJLyogRGVwYXJzZSAqLworCQkJc3RyID0gZGVwYXJzZV9leHByZXNzaW9uKGluZGV4a2V5 LCBjb250ZXh0LCBmYWxzZSwgZmFsc2UpOworCisJCQkvKiBOZWVkIHBhcmVucyBpZiBpdCdzIG5v dCBhIGJhcmUgZnVuY3Rpb24gY2FsbCAqLworCQkJaWYgKGluZGV4a2V5ICYmIElzQShpbmRleGtl eSwgRnVuY0V4cHIpICYmCisJCQkJKChGdW5jRXhwciAqKSBpbmRleGtleSktPmZ1bmNmb3JtYXQg PT0gQ09FUkNFX0VYUExJQ0lUX0NBTEwpCisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVm aW5pdGlvbkJ1Ziwgc3RyKTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZkZWZpbml0 aW9uQnVmLCAiKCVzKSIsIHN0cik7CisKKwkJCWtleWNvbHR5cGUgPSBleHByVHlwZShpbmRleGtl eSk7CisJCQlrZXljb2xjb2xsYXRpb24gPSBleHByQ29sbGF0aW9uKGluZGV4a2V5KTsKKwkJfQor CisJCS8qIEFkZCBjb2xsYXRpb24sIGV2ZW4gaWYgZGVmYXVsdCAqLworCQlpbmRjb2xsID0gaW5k Y29sbGF0aW9uLT52YWx1ZXNba2V5bm9dOworCQlpZiAoT2lkSXNWYWxpZChpbmRjb2xsKSkKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmRlZmluaXRpb25CdWYsICIgQ09MTEFURSAlcyIsCisJCQkJCQkJ IGdlbmVyYXRlX2NvbGxhdGlvbl9uYW1lKChpbmRjb2xsKSkpOworCisJCS8qIEFkZCB0aGUgb3Bl cmF0b3IgY2xhc3MgbmFtZSwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWdldF9vcGNsYXNzX25hbWUo aW5kY2xhc3MtPnZhbHVlc1trZXlub10sIEludmFsaWRPaWQsICZkZWZpbml0aW9uQnVmKTsKKwor CQkvKiBBZGQgb3B0aW9ucyBpZiByZWxldmFudCAqLworCQlpZiAoYW1yb3V0aW5lLT5hbWNhbm9y ZGVyKQorCQl7CisJCQkvKiBJZiBpdCBzdXBwb3J0cyBzb3J0IG9yZGVyaW5nLCByZXBvcnQgREVT QyBhbmQgTlVMTFMgb3B0cyAqLworCQkJaWYgKG9wdCAmIElORE9QVElPTl9ERVNDKQorCQkJewor CQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgREVTQyIpOworCQkJ CS8qIE5VTExTIEZJUlNUIGlzIHRoZSBkZWZhdWx0IGluIHRoaXMgY2FzZSAqLworCQkJCWlmICgh KG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgTEFTVCIpOworCQkJfQorCQkJZWxzZQorCQkJewor CQkJCWlmIChvcHQgJiBJTkRPUFRJT05fTlVMTFNfRklSU1QpCisJCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoJmRlZmluaXRpb25CdWYsICIgTlVMTFMgRklSU1QiKTsKKwkJCX0KKwkJfQorCisJ CS8qIFhYWCBleGNsdWRlT3BzIHRoaW5neSB3YXMgaGVyZTsgZG8gd2UgbmVlZCBhbnl0aGluZz8g Ki8KKwl9CisJKmRlZmluaXRpb24gPSBkZWZpbml0aW9uQnVmLmRhdGE7CisKKwkvKiBPdXRwdXQg cmVsb3B0aW9ucyAqLworCSpyZWxvcHRpb25zID0gZmxhdHRlbl9yZWxvcHRpb25zKGluZGV4cmVs aWQpOworCisJLyogT3V0cHV0IHRhYmxlc3BhY2UgKi8KKwl7CisJCU9pZAkJCXRibHNwYzsKKwor CQl0YmxzcGMgPSBnZXRfcmVsX3RhYmxlc3BhY2UoaW5kZXhyZWxpZCk7CisJCWlmIChPaWRJc1Zh bGlkKHRibHNwYykpCisJCQkqdGFibGVzcGFjZSA9IHBzdHJkdXAocXVvdGVfaWRlbnRpZmllcihn ZXRfdGFibGVzcGFjZV9uYW1lKHRibHNwYykpKTsKKwl9CisKKwkvKiBSZXBvcnQgaW5kZXggcHJl ZGljYXRlLCBpZiBhbnkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxsKGh0X2lkeCwgQW51bV9wZ19p bmRleF9pbmRwcmVkLCBOVUxMKSkKKwl7CisJCU5vZGUJICAgKm5vZGU7CisJCURhdHVtCQlwcmVk RGF0dW07CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmlu ZyB0byBub2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVM SUQsIGh0X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJ CUFzc2VydCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJl ZERhdHVtKTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJ cGZyZWUocHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPSBk ZXBhcnNlX2V4cHJlc3Npb24obm9kZSwgY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwl9CisKKwkv KiBDbGVhbiB1cCAqLworCVJlbGVhc2VTeXNDYWNoZShodF9pZHgpOworCVJlbGVhc2VTeXNDYWNo ZShodF9pZHhyZWwpOworCVJlbGVhc2VTeXNDYWNoZShodF9hbSk7Cit9CisKKy8qCisgKiBPYnRh aW4gdGhlIGRlcGFyc2VkIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBnaXZlbiBjb2x1bW4gb2YgdGhl IGdpdmVuIHRhYmxlLgorICoKKyAqIENhbGxlciBtdXN0IGhhdmUgc2V0IGEgY29ycmVjdCBkZXBh cnNlIGNvbnRleHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK1JlbGF0aW9uR2V0Q29sdW1uRGVmYXVs dChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sIExpc3QgKmRwY29udGV4dCwKKwkJCQkJ CSBMaXN0ICoqZXhwcnMpCit7CisJTm9kZQkgICAqZGVmdmFsOworCWNoYXIJICAgKmRlZnN0cjsK KworCWRlZnZhbCA9IGJ1aWxkX2NvbHVtbl9kZWZhdWx0KHJlbCwgYXR0bm8pOworCWRlZnN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbihkZWZ2YWwsIGRwY29udGV4dCwgZmFsc2UsIGZhbHNlKTsKKwor CS8qIENvbGxlY3QgdGhlIGV4cHJlc3Npb24gZm9yIGxhdGVyIHJlcGxpY2F0aW9uIHNhZmV0eSBj aGVja3MgKi8KKwlpZiAoZXhwcnMpCisJCSpleHBycyA9IGxhcHBlbmQoKmV4cHJzLCBkZWZ2YWwp OworCisJcmV0dXJuIGRlZnN0cjsKK30KKworLyoKKyAqIE9idGFpbiB0aGUgZGVwYXJzZWQgcGFy dGl0aW9uIGJvdW5kIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiB0YWJsZS4KKyAqLworc3RhdGlj IGNoYXIgKgorUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0J CWRlcGFyc2VkOworCURhdHVtCQlib3VuZERhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVw bGUJdHVwbGU7CisKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3IgcmVsYXRpb24gd2l0aCBPSUQgJXUiLCByZWxpZCk7CisKKwlib3VuZERhdHVt ID0gU3lzQ2FjaGVHZXRBdHRyKFJFTE9JRCwgdHVwbGUsCisJCQkJCQkJCSBBbnVtX3BnX2NsYXNz X3JlbHBhcnRib3VuZCwKKwkJCQkJCQkJICZpc251bGwpOworCisJZGVwYXJzZWQgPSBEaXJlY3RG dW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkgICBDU3RyaW5nR2V0VGV4dERhdHVt KFRleHREYXR1bUdldENTdHJpbmcoYm91bmREYXR1bSkpLAorCQkJCQkJCQkgICByZWxpZCk7CisK KwlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCisJcmV0dXJuIFRleHREYXR1bUdldENTdHJpbmco ZGVwYXJzZWQpOworfQorCisvKgorICogR2l2ZW4gYSBDb2xsZWN0ZWRDb21tYW5kLCByZXR1cm4g YSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGl0LgorICoKKyAqIFRoZSBjb21tYW5kIGlzIGV4cGFu ZGVkIGZ1bGx5IHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVzIGV2ZW4gaW4gdGhlCisg KiBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVtCitkZGxfZGVwYXJzZV90 b19qc29uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kID0gKENv bGxlY3RlZENvbW1hbmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJY2hhcgkgICAqY29tbWFu ZDsKKworCWNvbW1hbmQgPSBkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChjbWQsIHRydWUpOworCisJ aWYgKGNvbW1hbmQpCisJCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQp KTsKKworCVBHX1JFVFVSTl9OVUxMKCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyQ29s bGF0aW9uU3RtdCAoQUxURVIgQ09MTEFUSU9OKQorICoKKyAqIEdpdmVuIGEgY29sbGF0aW9uIE9J RCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQor ICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 OgorICogQUxURVIgQ09MTEFUSU9OICV7aWRlbnRpdHl9TyBSRUZSRVNIIFZFUlNJT04KKyAqLwor c3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckNvbGxhdGlvbihPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1cDsK KwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOworCisJY29sVHVwID0gU2VhcmNoU3lzQ2FjaGUx KENPTExPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoY29sVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGNv bGxhdGlvbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwljb2xGb3JtID0gKEZvcm1fcGdfY29s bGF0aW9uKSBHRVRTVFJVQ1QoY29sVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRF UiBDT0xMQVRJT04gJXtpZGVudGl0eX1PIFJFRlJFU0ggVkVSU0lPTiIsIDEsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo Y29sRm9ybS0+Y29sbG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihjb2xGb3JtLT5j b2xsbmFtZSkpKTsKKworCVJlbGVhc2VTeXNDYWNoZShjb2xUdXApOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJGdW5jdGlvblN0bXQgKEFMVEVSIEZVTkNUSU9O L1JPVVRJTkUvUFJPQ0VEVVJFKQorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXg6CisgKiBBTFRF UiBGVU5DVElPTi9ST1VUSU5FL1BST0NFRFVSRSAle3NpZ25hdHVyZX1zICV7ZGVmaW5pdGlvbjog fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlckZ1bmN0aW9uKE9pZCBvYmpl Y3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyRnVuY3Rpb25TdG10ICpub2RlID0gKEFs dGVyRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqc2lnbjsKKwlIZWFwVHVwbGUJcHJvY1R1cDsKKwlGb3JtX3BnX3Byb2MgcHJvY0Zvcm07 CisJTGlzdAkgICAqcGFyYW1zID0gTklMOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUxpc3RD ZWxsICAgKmNlbGw7CisJaW50CQkJaTsKKworCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSAqLwor CXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgb2JqZWN0SWQpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIGZ1bmN0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZv cm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJaWYgKHByb2NGb3JtLT5wcm9raW5k ID09IFBST0tJTkRfUFJPQ0VEVVJFKQorCQlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIgUFJPQ0VE VVJFIik7CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZShub2RlLT5vYmp0eXBlID09IE9CSkVD VF9ST1VUSU5FID8KKwkJCQkJCSAgIkFMVEVSIFJPVVRJTkUiIDogIkFMVEVSIEZVTkNUSU9OIik7 CisKKwkvKgorCSAqIEFMVEVSIEZVTkNUSU9OIGRvZXMgbm90IGNoYW5nZSBzaWduYXR1cmUgc28g d2UgY2FuIHVzZSBjYXRhbG9nIHRvIGdldAorCSAqIGlucHV0IHR5cGUgT2lkcy4KKwkgKi8KKwlm b3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25hcmdzOyBpKyspCisJeworCQlPYmpUcmVlICAg ICp0bXBvYmo7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlw ZShwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQlwYXJhbXMgPSBsYXBw ZW5kKHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJc2lnbiA9IG5l d19vYmp0cmVlX1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJ CSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgImFyZ3Vt ZW50cyIsIE9ialR5cGVBcnJheSwgcGFyYW1zKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7c2lnbmF0dXJlfXMiLCBzaWduKTsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+YWN0aW9u cykKKwl7CisJCURlZkVsZW0gICAgKmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOwor CQlPYmpUcmVlICAgICp0bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJ2b2xhdGlsaXR5IikgPT0gMCkKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKHN0clZhbChk ZWZlbC0+YXJnKSk7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN0cmljdCIp ID09IDApCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZShib29sVmFsKGRlZmVsLT5hcmcpID8KKwkJ CQkJCQkJICJSRVRVUk5TIE5VTEwgT04gTlVMTCBJTlBVVCIgOgorCQkJCQkJCQkgIkNBTExFRCBP TiBOVUxMIElOUFVUIik7CisJCWVsc2UgaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlY3Vy aXR5IikgPT0gMCkKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykg PworCQkJCQkJCQkgIlNFQ1VSSVRZIERFRklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKwkJ ZWxzZSBpZiAoc3RyY21wKGRlZmVsLT5kZWZuYW1lLCAibGVha3Byb29mIikgPT0gMCkKKwkJCXRt cG9iaiA9IG5ld19vYmp0cmVlKGJvb2xWYWwoZGVmZWwtPmFyZykgPworCQkJCQkJCQkgIkxFQUtQ Uk9PRiIgOiAiTk9UIExFQUtQUk9PRiIpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5h bWUsICJjb3N0IikgPT0gMCkKKwkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29z dH1uIiwgMSwKKwkJCQkJCQkJCSJjb3N0IiwgT2JqVHlwZUZsb2F0LAorCQkJCQkJCQkJZGVmR2V0 TnVtZXJpYyhkZWZlbCkpOworCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJyb3dz IikgPT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoIlJPV1MiKTsKKwkJCWlmIChk ZWZHZXROdW1lcmljKGRlZmVsKSA9PSAwKQorCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmop OworCQkJZWxzZQorCQkJCWFwcGVuZF9mbG9hdF9vYmplY3QodG1wb2JqLCAiJXtyb3dzfW4iLAor CQkJCQkJCQkJZGVmR2V0TnVtZXJpYyhkZWZlbCkpOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInNldCIpID09IDApCisJCXsKKwkJCVZhcmlhYmxlU2V0U3RtdCAqc3N0 bXQgPSAoVmFyaWFibGVTZXRTdG10ICopIGRlZmVsLT5hcmc7CisJCQljaGFyCSAgICp2YWx1ZSA9 IEV4dHJhY3RTZXRWYXJpYWJsZUFyZ3Moc3N0bXQpOworCisJCQl0bXBvYmogPSBkZXBhcnNlX0Z1 bmN0aW9uU2V0KHNzdG10LT5raW5kLCBzc3RtdC0+bmFtZSwgdmFsdWUpOworCQl9CisJCWVsc2Ug aWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInN1cHBvcnQiKSA9PSAwKQorCQl7CisJCQlPaWQJ CQlhcmd0eXBlc1sxXTsKKworCQkJdG1wb2JqID0gbmV3X29ianRyZWUoIlNVUFBPUlQiKTsKKwor CQkJQXNzZXJ0KHByb2NGb3JtLT5wcm9zdXBwb3J0KTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3Vs ZCBxdWFsaWZ5IHRoZSBzdXBwb3J0IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQor CQkJICogcmVzb2x2ZWQgYnkgbG9va3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJ ICovCisJCQlhcmd0eXBlc1swXSA9IElOVEVSTkFMT0lEOworCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wb2JqLCAiJXtuYW1lfXMiLCAibmFtZSIsCisJCQkJCQkJCSBnZW5lcmF0ZV9mdW5jdGlv bl9uYW1lKHByb2NGb3JtLT5wcm9zdXBwb3J0LCAxLAorCQkJCQkJCQkJCQkJCQlOSUwsIGFyZ3R5 cGVzLAorCQkJCQkJCQkJCQkJCQlmYWxzZSwgTlVMTCwKKwkJCQkJCQkJCQkJCQkJRVhQUl9LSU5E X05PTkUpKTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJwYXJhbGxl bCIpID09IDApCisJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiUEFSQUxMRUwgJXt2YWx1ZX1z IiwgMSwKKwkJCQkJCQkJCSJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHN0clZhbChkZWZlbC0+YXJn KSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmop KTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZGVmaW5pdGlvbjogfXMiLCBl bGVtcyk7CisKKwlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogRGVwYXJzZSBhbiBBbHRlck9iamVjdFNjaGVtYVN0bXQgKEFMVEVSIC4uLiBTRVQg U0NIRU1BIGNvbW1hbmQpCisgKgorICogR2l2ZW4gdGhlIG9iamVjdCBhZGRyZXNzIGFuZCB0aGUg cGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJlZSByZXByZXNl bnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVS ICVzICV7aWRlbnRpdHl9cyBTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkKKyAqLworc3RhdGljIE9i alRyZWUgKgorZGVwYXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoT2JqZWN0QWRkcmVzcyBhZGRy ZXNzLCBOb2RlICpwYXJzZXRyZWUsCisJCQkJCQkJICBPYmplY3RBZGRyZXNzIG9sZHNjaGVtYSkK K3sKKwlBbHRlck9iamVjdFNjaGVtYVN0bXQgKm5vZGUgPSAoQWx0ZXJPYmplY3RTY2hlbWFTdG10 ICopIHBhcnNldHJlZTsKKwljaGFyCSAgICppZGVudGl0eTsKKwljaGFyCSAgICpuZXdzY2hlbWEg PSBub2RlLT5uZXdzY2hlbWE7CisJY2hhcgkgICAqb2xkc2NobmFtZTsKKwljaGFyCSAgICppZGVu dDsKKworCS8qCisJICogU2luY2UgdGhlIGNvbW1hbmQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2Ug ZnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZgorCSAqIGNhdGFsb2dzLCBnZXRPYmplY3RJZGVudGl0 eSByZXR1cm5zIHRoZSBvYmplY3QgbmFtZSB3aXRoIHRoZSBhbHJlYWR5CisJICogY2hhbmdlZCBz Y2hlbWEuICBUaGUgb3V0cHV0IG9mIG91ciBkZXBhcnNpbmcgbXVzdCByZXR1cm4gdGhlIG9yaWdp bmFsCisJICogc2NoZW1hIG5hbWUsIGhvd2V2ZXIsIHNvIHdlIGNob3AgdGhlIHNjaGVtYSBuYW1l IG9mZiB0aGUgaWRlbnRpdHkKKwkgKiBzdHJpbmcgYW5kIHRoZW4gcHJlcGVuZCB0aGUgcXVvdGVk IHNjaGVtYSBuYW1lLgorCSAqCisJICogWFhYIFRoaXMgaXMgcHJldHR5IGNsdW5reS4gQ2FuIHdl IGRvIGJldHRlcj8KKwkgKi8KKwlpZGVudGl0eSA9IGdldE9iamVjdElkZW50aXR5KCZhZGRyZXNz LCBmYWxzZSk7CisJb2xkc2NobmFtZSA9IGdldF9uYW1lc3BhY2VfbmFtZShvbGRzY2hlbWEub2Jq ZWN0SWQpOworCWlmICghb2xkc2NobmFtZSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBm YWlsZWQgZm9yIHNjaGVtYSB3aXRoIE9JRCAldSIsCisJCQkgb2xkc2NoZW1hLm9iamVjdElkKTsK KworCWlkZW50ID0gcHNwcmludGYoIiVzJXMiLCBxdW90ZV9pZGVudGlmaWVyKG9sZHNjaG5hbWUp LAorCQkJCQkgaWRlbnRpdHkgKyBzdHJsZW4ocXVvdGVfaWRlbnRpZmllcihuZXdzY2hlbWEpKSk7 CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9 cyBTRVQgU0NIRU1BICV7bmV3c2NoZW1hfUkiLCAzLAorCQkJCQkJICAib2JqdHlwZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPm9iamVjdFR5cGUsIGZh bHNlKSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgaWRlbnQsCisJCQkJCQkg ICJuZXdzY2hlbWEiLCBPYmpUeXBlU3RyaW5nLCBuZXdzY2hlbWEpOworfQorCisvKgorICogRGVw YXJzZSBhIEdSQU5UL1JFVk9LRSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBH UkFOVCAle3ByaXZpbGVnZXM6LCB9cyBPTiIgJXtvYmp0eXBlfXMgJXtwcml2dGFyZ2V0OiwgfXMg VE8gJXtncmFudGVlczosIH1zCisgKiAle2dyYW50X29wdGlvbn1zIEdSQU5URUQgQlkgJXtyb2xl bmFtZX1zCisgKiAJCU9SCisgKiBSRVZPS0UgJXtwcml2aWxlZ2VzOiwgfXMgT04iICV7b2JqdHlw ZX1zICV7cHJpdnRhcmdldDosIH1zCisgKiBGUk9NICV7Z3JhbnRlZXM6LCB9cyAle2dyYW50X29w dGlvbn1zICV7Y2FzY2FkZX1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfR3JhbnRT dG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlJbnRlcm5hbEdyYW50ICppc3RtdDsKKwlP YmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCU9pZAkJCWNsYXNzSWQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJLyogRG9uJ3QgZGVwYXJz ZSBTUUwgY29tbWFuZHMgZ2VuZXJhdGVkIHdoaWxlIGNyZWF0aW5nIGV4dGVuc2lvbiAqLworCWlm IChjbWQtPmluX2V4dGVuc2lvbikKKwkJcmV0dXJuIE5VTEw7CisKKwlpc3RtdCA9IGNtZC0+ZC5n cmFudC5pc3RtdDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIG9iamVjdHMgZnJvbSAiQUxM IC4uLiBJTiBTQ0hFTUEiIHRvIGJlIGdyYW50ZWQsIHRoZW4KKwkgKiBub3RoaW5nIHRvIGRvLgor CSAqLworCWlmIChpc3RtdC0+b2JqZWN0cyA9PSBOSUwpCisJCXJldHVybiBOVUxMOworCisJc3dp dGNoIChpc3RtdC0+b2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJY2FzZSBP QkpFQ1RfVEFCTEU6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQkJY2xhc3NJZCA9IFJlbGF0 aW9uUmVsYXRpb25JZDsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNhc2Ug T0JKRUNUX1RZUEU6CisJCQljbGFzc0lkID0gVHlwZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJ Y2FzZSBPQkpFQ1RfRkRXOgorCQkJY2xhc3NJZCA9IEZvcmVpZ25EYXRhV3JhcHBlclJlbGF0aW9u SWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQljbGFzc0lk ID0gRm9yZWlnblNlcnZlclJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfRlVO Q1RJT046CisJCWNhc2UgT0JKRUNUX1BST0NFRFVSRToKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToK KwkJCWNsYXNzSWQgPSBQcm9jZWR1cmVSZWxhdGlvbklkOworCQkJYnJlYWs7CisJCWNhc2UgT0JK RUNUX0xBTkdVQUdFOgorCQkJY2xhc3NJZCA9IExhbmd1YWdlUmVsYXRpb25JZDsKKwkJCWJyZWFr OworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoKKwkJCWNsYXNzSWQgPSBMYXJnZU9iamVjdFJl bGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfU0NIRU1BOgorCQkJY2xhc3NJZCA9 IE5hbWVzcGFjZVJlbGF0aW9uSWQ7CisJCQlicmVhazsKKwkJY2FzZSBPQkpFQ1RfREFUQUJBU0U6 CisJCWNhc2UgT0JKRUNUX1RBQkxFU1BBQ0U6CisJCQljbGFzc0lkID0gSW52YWxpZE9pZDsKKwkJ CWVsb2coRVJST1IsICJnbG9iYWwgb2JqZWN0cyBub3Qgc3VwcG9ydGVkIik7CisJCQlicmVhazsK KwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIE9CSkVDVCB2YWx1ZSAlZCIsIGlz dG10LT5vYmp0eXBlKTsKKwl9CisKKwkvKiBHUkFOVCBUTyBvciBSRVZPS0UgRlJPTSAqLworCXJl dCA9IG5ld19vYmp0cmVlKGlzdG10LT5pc19ncmFudCA/ICJHUkFOVCIgOiAiUkVWT0tFIik7CisK KwkvKiBidWlsZCBhIGxpc3Qgb2YgcHJpdmlsZWdlcyB0byBncmFudC9yZXZva2UgKi8KKwlpZiAo aXN0bXQtPmFsbF9wcml2cykKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlKCJBTEwgUFJJVklMRUdF UyIpOworCQlsaXN0ID0gbGlzdF9tYWtlMShuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisJ ZWxzZQorCXsKKwkJY2hhciAqcHJpdjsKKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0lO U0VSVCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfSU5T RVJUKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsK KwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfU0VMRUNUKQorCQl7CisJCQlwcml2 ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9TRUxFQ1QpOworCQkJbGlzdCA9IGxh cHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+ cHJpdmlsZWdlcyAmIEFDTF9VUERBVEUpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVn ZV90b19zdHJpbmcoQUNMX1VQREFURSk7CisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3Ry aW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxlZ2VzICYgQUNMX0RF TEVURSkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfREVM RVRFKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsK KwkJfQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVFJVTkNBVEUpCisJCXsKKwkJCXBy aXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1RSVU5DQVRFKTsKKwkJCWxpc3Qg PSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0 bXQtPnByaXZpbGVnZXMgJiBBQ0xfUkVGRVJFTkNFUykKKwkJeworCQkJcHJpdiA9IChjaGFyICop cHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfUkVGRVJFTkNFUyk7CisJCQlsaXN0ID0gbGFwcGVuZChs aXN0LCBuZXdfc3RyaW5nX29iamVjdChwcml2KSk7CisJCX0KKwkJaWYgKGlzdG10LT5wcml2aWxl Z2VzICYgQUNMX1RSSUdHRVIpCisJCXsKKwkJCXByaXYgPSAoY2hhciAqKXByaXZpbGVnZV90b19z dHJpbmcoQUNMX1RSSUdHRVIpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9FWEVDVVRF KQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9FWEVDVVRF KTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJ fQorCQlpZiAoaXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfVVNBR0UpCisJCXsKKwkJCXByaXYgPSAo Y2hhciAqKXByaXZpbGVnZV90b19zdHJpbmcoQUNMX1VTQUdFKTsKKwkJCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAoaXN0bXQtPnByaXZp bGVnZXMgJiBBQ0xfQ1JFQVRFKQorCQl7CisJCQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9f c3RyaW5nKEFDTF9DUkVBVEUpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19v YmplY3QocHJpdikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DUkVBVEVf VEVNUCkKKwkJeworCQkJcHJpdiA9IChjaGFyICopcHJpdmlsZWdlX3RvX3N0cmluZyhBQ0xfQ1JF QVRFX1RFTVApOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QocHJp dikpOworCQl9CisJCWlmIChpc3RtdC0+cHJpdmlsZWdlcyAmIEFDTF9DT05ORUNUKQorCQl7CisJ CQlwcml2ID0gKGNoYXIgKilwcml2aWxlZ2VfdG9fc3RyaW5nKEFDTF9DT05ORUNUKTsKKwkJCWxp c3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCQlpZiAo aXN0bXQtPnByaXZpbGVnZXMgJiBBQ0xfTUFJTlRBSU4pCisJCXsKKwkJCXByaXYgPSAoY2hhciAq KXByaXZpbGVnZV90b19zdHJpbmcoQUNMX01BSU5UQUlOKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19zdHJpbmdfb2JqZWN0KHByaXYpKTsKKwkJfQorCisJCWlmICghaXN0bXQtPmlzX2dy YW50ICYmIGlzdG10LT5ncmFudF9vcHRpb24pCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle2dyYW50X29wdGlvbn1zIiwgImdyYW50X29wdGlvbiIsCisJCQkJCQkJCSBpc3RtdC0+Z3Jh bnRfb3B0aW9uID8gIkdSQU5UIE9QVElPTiBGT1IiIDogIiIpOworCisJCWlmIChpc3RtdC0+Y29s X3ByaXZzICE9IE5JTCkKKwkJeworCQkJTGlzdENlbGwgICAqb2NlbGw7CisKKwkJCWZvcmVhY2go b2NlbGwsIGlzdG10LT5jb2xfcHJpdnMpCisJCQl7CisJCQkJQWNjZXNzUHJpdiAqcHJpdiA9IGxm aXJzdChvY2VsbCk7CisJCQkJTGlzdAkgICAqY29scyA9IE5JTDsKKworCQkJCWZvcmVhY2goY2Vs bCwgcHJpdi0+Y29scykKKwkJCQl7CisJCQkJCVN0cmluZwkgICAqY29sbmFtZSA9IGxmaXJzdF9u b2RlKFN0cmluZywgY2VsbCk7CisKKwkJCQkJY29scyA9IGxhcHBlbmQoY29scywKKwkJCQkJCQkJ ICAgbmV3X3N0cmluZ19vYmplY3Qoc3RyVmFsKGNvbG5hbWUpKSk7CisJCQkJfQorCisJCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoIigle2NvbHM6LCB9cykgJXtwcml2fXMiLCAyLAorCQkJCQkJCQkJ ICJjb2xzIiwgT2JqVHlwZUFycmF5LCBjb2xzLAorCQkJCQkJCQkJICJwcml2IiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCQkJCSAgcHJpdi0+cHJpdl9uYW1lID8gcHJpdi0+cHJpdl9uYW1lIDogIkFM TCBQUklWSUxFR0VTIik7CisKKwkJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJCX0KKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7 cHJpdmlsZWdlczosIH1zIE9OIiwgbGlzdCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQs ICIle29ianR5cGV9cyIsICJvYmp0eXBlIiwKKwkJCQkJCSAoY2hhciAqKXN0cmluZ2lmeV9vYmp0 eXBlKGlzdG10LT5vYmp0eXBlLCB0cnVlKSk7CisKKwkvKiB0YXJnZXQgb2JqZWN0cy4gIFdlIHVz ZSBvYmplY3QgaWRlbnRpdGllcyBoZXJlICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGws IGlzdG10LT5vYmplY3RzKQorCXsKKwkJT2lkCQkJb2JqaWQgPSBsZmlyc3Rfb2lkKGNlbGwpOwor CQlPYmplY3RBZGRyZXNzIGFkZHI7CisKKwkJYWRkci5jbGFzc0lkID0gY2xhc3NJZDsKKwkJYWRk ci5vYmplY3RJZCA9IG9iamlkOworCQlhZGRyLm9iamVjdFN1YklkID0gMDsKKworCQl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1zIiwgMSwKKwkJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZVN0cmluZywKKwkJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHIsIGZhbHNlKSk7CisK KwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCWFw cGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtwcml2dGFyZ2V0OiwgfXMiLCBsaXN0KTsKKworCWFw cGVuZF9mb3JtYXRfc3RyaW5nKHJldCwgaXN0bXQtPmlzX2dyYW50ID8gIlRPIiA6ICJGUk9NIik7 CisKKwkvKiBsaXN0IG9mIGdyYW50ZWVzICovCisJbGlzdCA9IE5JTDsKKwlmb3JlYWNoKGNlbGws IGlzdG10LT5ncmFudGVlcykKKwl7CisJCU9pZAkJCWdyYW50ZWUgPSBsZmlyc3Rfb2lkKGNlbGwp OworCisJCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlX2lkKGdyYW50ZWUpOworCQlsaXN0ID0g bGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KHJldCwgIiV7Z3JhbnRlZXM6LCB9cyIsIGxpc3QpOworCisJLyogdGhlIHdvcmRp bmcgb2YgdGhlIGdyYW50IG9wdGlvbiBpcyB2YXJpYWJsZSAuLi4gKi8KKwlpZiAoaXN0bXQtPmlz X2dyYW50KQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2dyYW50X29wdGlvbn1zIiwg ImdyYW50X29wdGlvbiIsCisJCQkJCQkJIGlzdG10LT5ncmFudF9vcHRpb24gPyAiV0lUSCBHUkFO VCBPUFRJT04iIDogIiIpOworCisJaWYgKGlzdG10LT5ncmFudG9yX3VpZCkKKwl7CisJCUhlYXBU dXBsZQlyb2x0dXA7CisJCWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJvbHR1cCA9IFNlYXJjaFN5 c0NhY2hlMShBVVRIT0lELCBPYmplY3RJZEdldERhdHVtKGlzdG10LT5ncmFudG9yX3VpZCkpOwor CQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocm9sdHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciByb2xlIHdpdGggT0lEICV1IiwKKwkJCQkgaXN0bXQtPmdyYW50b3Jf dWlkKTsKKworCQlyb2xlbmFtZSA9IE5hbWVTdHIoKChGb3JtX3BnX2F1dGhpZCkgR0VUU1RSVUNU KHJvbHR1cCkpLT5yb2xuYW1lKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiR1JBTlRF RCBCWSAle3JvbGVuYW1lfXMiLAorCQkJCQkJCSAicm9sZW5hbWUiLCByb2xlbmFtZSk7CisJCVJl bGVhc2VTeXNDYWNoZShyb2x0dXApOworCX0KKworCWlmICghaXN0bXQtPmlzX2dyYW50KQorCQlh cHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle2Nhc2NhZGV9cyIsICJjYXNjYWRlIiwKKwkJCQkJ CQkgaXN0bXQtPmJlaGF2aW9yID09IERST1BfQ0FTQ0FERSA/ICJDQVNDQURFIiA6ICIiKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyT3BlcmF0b3JTdG10IChB TFRFUiBPUEVSQVRPUiAuLi4gU0VUIC4uLikuCisgKgorICogR2l2ZW4gYW4gb3BlcmF0b3IgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyAoJXtsZWZ0X3R5cGV9VCwgJXtyaWdodF90 eXBlfVQpCisgKiBTRVQgKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9BbHRlck9wZXJhdG9yU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlIZWFwVHVwbGUJb3ByVHVwOworCUFsdGVyT3BlcmF0b3JTdG10ICpub2RlID0gKEFsdGVyT3Bl cmF0b3JTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJRm9ybV9wZ19vcGVy YXRvciBvcHJGb3JtOworCUxpc3RDZWxsICAgKmNlbGw7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsK KworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVtKG9i amVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVjdElk KTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIE9QRVJBVE9SICV7aWRlbnRpdHl9TyIsIDEsCisJ CQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWUob3ByRm9ybS0+b3BybmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKG9w ckZvcm0tPm9wcm5hbWUpKSk7CisKKwkvKiBMRUZUQVJHICovCisJaWYgKE9pZElzVmFsaWQob3By Rm9ybS0+b3BybGVmdCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIigle2xlZnRfdHlw ZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3BybGVmdCwgLTEp KTsKKwllbHNlCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIigle2xlZnRfdHlwZX1zIiwg ImxlZnRfdHlwZSIsICJOT05FIik7CisKKwkvKiBSSUdIVEFSRyAqLworCUFzc2VydChPaWRJc1Zh bGlkKG9wckZvcm0tPm9wcmxlZnQpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIsICV7 cmlnaHRfdHlwZX1UKSIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3ByRm9ybS0+b3By cmlnaHQsIC0xKSk7CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZF bGVtICAgICplbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlPYmpUcmVlICAgICp0 bXBvYmogPSBOVUxMOworCisJCWlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RyaWN0Iikg PT0gMCkKKwkJeworCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlJFU1RSSUNUPSIsIDEsCisJ CQkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RyaWN0Iik7CisJCQlpZiAoT2lk SXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3BycmVz dCkpOworCQkJZWxzZQorCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2Vk dXJlfXMiLCAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSAiTk9ORSIpOworCQl9CisJCWVsc2UgaWYg KHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiam9pbiIpID09IDApCisJCXsKKwkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJKT0lOPSIsIDEsCisJCQkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgImpvaW4iKTsKKwkJCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcmpvaW4pKQorCQkJCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJ CQkJCQkJCSBvcHJGb3JtLT5vcHJqb2luKSk7CisJCQllbHNlCisJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9cyIsICJwcm9jZWR1cmUiLAorCQkJCQkJCQkJICJO T05FIik7CisJCX0KKworCQlBc3NlcnQodG1wb2JqKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJYXBwZW5kX2FycmF5X29iamVjdChy ZXQsICJTRVQgKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKworCVJlbGVhc2VTeXNDYWNoZShvcHJU dXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgT1BFUkFU T1IgRkFNSUxZIEFERC9EUk9QIGNvbW1hbmQuCisgKgorICogR2l2ZW4gdGhlIENvbGxlY3RlZENv bW1hbmQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgQWx0ZXIKKyAqIE9wZXJh dG9yIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIE9QRVJBVE9SIEZB TUlMWSAle2lkZW50aXR5fUQgVVNJTkcgJXthbW5hbWV9SSBBREQvRFJPUCAle2l0ZW1zOix9cwor ICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3BGYW1pbHkoQ29sbGVjdGVkQ29t bWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJldDsKKwlBbHRlck9wRmFtaWx5U3RtdCAqc3Rt dCA9IChBbHRlck9wRmFtaWx5U3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlIZWFwVHVwbGUJZnRw OworCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxp c3RDZWxsICAgKmNlbGw7CisKKwkvKiBEb24ndCBkZXBhcnNlIFNRTCBjb21tYW5kcyBnZW5lcmF0 ZWQgd2hpbGUgY3JlYXRpbmcgZXh0ZW5zaW9uICovCisJaWYgKGNtZC0+aW5fZXh0ZW5zaW9uKQor CQlyZXR1cm4gTlVMTDsKKworCWZ0cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwKKwkJ CQkJCSAgT2JqZWN0SWRHZXREYXR1bShjbWQtPmQub3BmYW0uYWRkcmVzcy5vYmplY3RJZCkpOwor CWlmICghSGVhcFR1cGxlSXNWYWxpZChmdHApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3Vw IGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCSBjbWQtPmQub3Bm YW0uYWRkcmVzcy5vYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRT VFJVQ1QoZnRwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBPUEVSQVRPUiBGQU1J TFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1lfUkiLCAyLAorCQkJCQkJICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0t Pm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSks CisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIHN0bXQtPmFtbmFtZSk7CisKKwlmb3Jl YWNoKGNlbGwsIGNtZC0+ZC5vcGZhbS5vcGVyYXRvcnMpCisJeworCQlPcEZhbWlseU1lbWJlciAq b3BlciA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wb2JqOworCisJCS8qCisJCSAq IFZlcmJvc2Ugc3ludGF4CisJCSAqCisJCSAqIE9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1P KCV7bHR5cGV9VCwgJXtydHlwZX1UKSAle3B1cnBvc2V9cworCQkgKi8KKwkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4iLCAxLAorCQkJCQkJCQkibnVtIiwgT2JqVHlw ZUludGVnZXIsIG9wZXItPm51bWJlcik7CisKKwkJLyogQWRkIHRoZSBvcGVyYXRvciBuYW1lOyB0 aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZSB0aGlzICovCisJCWlmICghc3RtdC0+aXNEcm9wKQor CQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyYXRvcn1PIiwKKwkJCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvclJlbGF0aW9uSWQsCisJCQkJCQkJ CQkJCQkJCQkgb3Blci0+b2JqZWN0KSk7CisKKwkJLyogQWRkIHRoZSB0eXBlcyAqLworCQlhcHBl bmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIoJXtsdHlwZX1ULCIsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl90eXBlKG9wZXItPmxlZnR0eXBlLCAtMSkpOworCQlhcHBlbmRfb2JqZWN0X29iamVj dCh0bXBvYmosICIle3J0eXBlfVQpIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Bl ci0+cmlnaHR0eXBlLCAtMSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRF UiBCWSBjbGF1c2U7IG5vdCBpbiB0aGUgRFJPUCBjYXNlICovCisJCWlmICghc3RtdC0+aXNEcm9w KQorCQl7CisJCQlpZiAob3Blci0+c29ydGZhbWlseSA9PSBJbnZhbGlkT2lkKQorCQkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJ CQkJICJGT1IgU0VBUkNIIik7CisJCQllbHNlCisJCQl7CisJCQkJT2JqVHJlZSAgICAqb3JkZXJi eW9iajsKKworCQkJCW9yZGVyYnlvYmogPSBuZXdfb2JqdHJlZV9WQSgiRk9SIE9SREVSIEJZICV7 b3BmYW1pbHl9RCIsIDEsCisJCQkJCQkJCQkJCSJvcGZhbWlseSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChPcGVyYXRvckZhbWlseVJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCQlvcGVyLT5zb3J0ZmFtaWx5KSk7CisJCQkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwdXJwb3NlfXMiLCBvcmRlcmJ5b2JqKTsKKwkJCX0K KwkJfQorCisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCX0KKworCWZvcmVhY2goY2VsbCwgY21kLT5kLm9wZmFtLnByb2NlZHVyZXMpCisJeworCQlP cEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJT2JqVHJlZSAgICAqdG1wb2Jq OworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJGVU5DVElPTiAle251bX1uICgle2x0eXBl fVQsICV7cnR5cGV9VCkiLCAzLAorCQkJCQkJCQkibnVtIiwgT2JqVHlwZUludGVnZXIsIHByb2Mt Pm51bWJlciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29i anRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+cmlnaHR0eXBl LCAtMSkpOworCisJCS8qCisJCSAqIEFkZCB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJnIHR5cGVz OyB0aGUgRFJPUCBjYXNlIGRvZXNuJ3QgaGF2ZQorCQkgKiB0aGlzCisJCSAqLworCQlpZiAoIXN0 bXQtPmlzRHJvcCkKKwkJeworCQkJSGVhcFR1cGxlCXByb2NUdXA7CisJCQlGb3JtX3BnX3Byb2Mg cHJvY0Zvcm07CisJCQlPaWQJCSAgICpwcm9hcmd0eXBlczsKKwkJCUxpc3QJICAgKmFyZ2xpc3Qg PSBOSUw7CisJCQlpbnQJCQlpOworCisJCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NP SUQsIE9iamVjdElkR2V0RGF0dW0ocHJvYy0+b2JqZWN0KSk7CisJCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocHJvY1R1cCkpCisJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9y IHByb2NlZHVyZSB3aXRoIE9JRCAldSIsCisJCQkJCSBwcm9jLT5vYmplY3QpOworCQkJcHJvY0Zv cm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY1R1cCk7CisKKwkJCXByb2FyZ3R5cGVz ID0gcHJvY0Zvcm0tPnByb2FyZ3R5cGVzLnZhbHVlczsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcm9j Rm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJCXsKKwkJCQlPYmpUcmVlICAgICphcmc7CisKKwkJCQlh cmcgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJCWFyZ2xp c3QgPSBsYXBwZW5kKGFyZ2xpc3QsIG5ld19vYmplY3Rfb2JqZWN0KGFyZykpOworCQkJfQorCisJ CQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2Z1bmN0aW9ufUQiLAorCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkJCSAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQkJYXBwZW5kX2Zvcm1h dF9zdHJpbmcodG1wb2JqLCAiKCIpOworCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIl e2FyZ3R5cGVzOiwgfVQiLCBhcmdsaXN0KTsKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHRtcG9i aiwgIikiKTsKKworCQkJUmVsZWFzZVN5c0NhY2hlKHByb2NUdXApOworCQl9CisKKwkJbGlzdCA9 IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQorCisJaWYgKHN0 bXQtPmlzRHJvcCkKKwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiRFJPUCIpOworCWVsc2UK KwkJYXBwZW5kX2Zvcm1hdF9zdHJpbmcocmV0LCAiQUREIik7CisKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJldCwgIiV7aXRlbXM6LCB9cyIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKGZ0cCk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBBbHRlck93bmVyU3RtdCAo QUxURVIgLi4uIE9XTkVSIFRPIC4uLikuCisgKgorICogR2l2ZW4gdGhlIG9iamVjdCBhZGRyZXNz IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJl ZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSICVzICV7aWRlbnRpdHl9cyBPV05FUiBUTyAle25ld293bmVyfUkKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlck93bmVyU3RtdChPYmplY3RBZGRyZXNzIGFkZHJl c3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlck93bmVyU3RtdCAqbm9kZSA9IChBbHRlck93 bmVyU3RtdCAqKSBwYXJzZXRyZWU7CisKKwlyZXR1cm4gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7 b2JqdHlwZX1zICV7aWRlbnRpdHl9cyBPV05FUiBUTyAle25ld293bmVyfUkiLCAzLAorCQkJCQkJ ICAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIHN0cmluZ2lmeV9vYmp0eXBlKG5v ZGUtPm9iamVjdFR5cGUsIGZhbHNlKSwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCSAgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSwKKwkJCQkJCSAg Im5ld293bmVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgZ2V0X3JvbGVzcGVjX25hbWUobm9k ZS0+bmV3b3duZXIpKTsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQWx0ZXJTZXFTdG10LgorICoK KyAqIEdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCBhIHBhcnNlIHRyZWUgdGhhdCBtb2RpZmllZCBp dCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4K KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7 ZGVmaW5pdGlvbjogfXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0 bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2JqVHJlZSAgICAqcmV0Owor CVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxp c3QJICAgKmVsZW1zID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5j ZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJT ZXFTdG10ICphbHRlclNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8q CisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSAodmlh IENSRUFURSBUQUJMRSBvcgorCSAqIEFMVEVSIFRBQkxFKTsgcmV0dXJuIGVtcHR5IGhlcmUuCisJ ICovCisJaWYgKGFsdGVyU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQorCQlyZXR1cm4gTlVMTDsKKwor CXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElkKTsKKworCXJlbGF0aW9uID0g cmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlyZWwgPSB0YWJsZV9v cGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBT ZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhF UlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNlIHdpdGggT0lEICAldSIsIG9i amVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1 cGxlKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisJCU9iakVsZW0gICAgKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJj YWNoZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShzZXFmb3JtLCBmYWxz ZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiY3ljbGUiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9TZXFfQ3ljbGUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChz dHJjbXAoZWxlbS0+ZGVmbmFtZSwgImluY3JlbWVudCIpID09IDApCisJCQluZXdlbG0gPSBkZXBh cnNlX1NlcV9JbmNyZW1lbnRCeShzZXFmb3JtLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChl bGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFf TWludmFsdWUoc2VxZm9ybSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFt ZSwgIm1heHZhbHVlIikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX01heHZhbHVlKHNl cWZvcm0sIGZhbHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJzdGFydCIp ID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgZmFsc2Up OworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChzZXFkYXRhKTsKKwkJZWxzZSBpZiAoc3RyY21w KGVsZW0tPmRlZm5hbWUsICJvd25lZF9ieSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1Nl cV9Pd25lZEJ5KG9iamVjdElkLCBmYWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZu YW1lLCAiYXMiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfQXMoZWxlbSk7CisJCWVs c2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHNlcXVlbmNlIG9wdGlvbiAlcyIsIGVsZW0tPmRl Zm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywgbmV3ZWxtKTsKKwl9CisKKwlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgU0VRVUVOQ0UgJXtpZGVudGl0eX1EICV7ZGVmaW5pdGlv bjogfXMiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJ CQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKSwKKwkJCQkJCSAi ZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJheSwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyVHlwZVN0 bXQuCisgKgorICogR2l2ZW4gYSB0eXBlIE9JRCBhbmQgYSBwYXJzZSB0cmVlIHRoYXQgbW9kaWZp ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIHR5cGUu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRZUEUgJXtpZGVudGl0eX1EICgle2Rl ZmluaXRpb246IH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyVHlwZVNl dFN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpjbWQpCit7CisJQWx0ZXJUeXBlU3RtdCAqYWx0ZXJU eXBlU2V0U3RtdCA9IChBbHRlclR5cGVTdG10ICopIGNtZDsKKwlMaXN0Q2VsbCAgICpwbDsKKwlM aXN0CSAgICplbGVtcyA9IE5JTDsKKwlIZWFwVHVwbGUJdHlwVHVwOworCUZvcm1fcGdfdHlwZSB0 eXBGb3JtOworCisJdHlwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBvYmpl Y3RJZCk7CisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJ Zm9yZWFjaChwbCwgYWx0ZXJUeXBlU2V0U3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAg KmRlZmVsID0gKERlZkVsZW0gKikgbGZpcnN0KHBsKTsKKwkJT2JqRWxlbSAgICAqbmV3ZWxtOwor CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJzdG9yYWdlIikgPT0gMCkKKwkJCW5ld2Vs bSA9IGRlcGFyc2VfVHlwZV9TdG9yYWdlKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAicmVjZWl2ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1R5cGVfUmVjZWl2 ZSh0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInNlbmQiKSA9PSAwKQor CQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1NlbmQodHlwRm9ybSk7CisJCWlmIChzdHJjbXAoZGVm ZWwtPmRlZm5hbWUsICJ0eXBtb2RfaW4iKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBl X1R5cG1vZF9Jbih0eXBGb3JtKTsKKwkJaWYgKHN0cmNtcChkZWZlbC0+ZGVmbmFtZSwgInR5cG1v ZF9vdXQiKSA9PSAwKQorCQkJbmV3ZWxtID0gZGVwYXJzZV9UeXBlX1R5cG1vZF9PdXQodHlwRm9y bSk7CisJCWlmIChzdHJjbXAoZGVmZWwtPmRlZm5hbWUsICJhbmFseXplIikgPT0gMCkKKwkJCW5l d2VsbSA9IGRlcGFyc2VfVHlwZV9BbmFseXplKHR5cEZvcm0pOworCQlpZiAoc3RyY21wKGRlZmVs LT5kZWZuYW1lLCAic3Vic2NyaXB0IikgPT0gMCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfVHlwZV9T dWJzY3JpcHQodHlwRm9ybSk7CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGUg b3B0aW9uICVzIiwgZGVmZWwtPmRlZm5hbWUpOworCisJCWVsZW1zID0gbGFwcGVuZChlbGVtcywg bmV3ZWxtKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUodHlwVHVwKTsKKworCXJldHVybiBuZXdf b2JqdHJlZV9WQSgiQUxURVIgVFlQRSAle2lkZW50aXR5fUQgU0VUICgle2RlZmluaXRpb246IH1z KSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgIG9i amVjdElkKSwKKwkJCQkJCSAgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGVsZW1zKTsKK30K KworLyoKKyAqIERlcGFyc2UgYSBDb21wb3NpdGVUeXBlU3RtdCAoQ1JFQVRFIFRZUEUgQVMpCisg KgorICogR2l2ZW4gYSBDb21wb3NpdGUgdHlwZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQg Y3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgY3JlYXRp b24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVu dGl0eX1EIEFTICgle2NvbHVtbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9Db21wb3NpdGVUeXBlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlD b21wb3NpdGVUeXBlU3RtdCAqbm9kZSA9IChDb21wb3NpdGVUeXBlU3RtdCAqKSBwYXJzZXRyZWU7 CisJSGVhcFR1cGxlCXR5cHR1cDsKKwlGb3JtX3BnX3R5cGUgdHlwZm9ybTsKKwlSZWxhdGlvbgl0 eXBlcmVsOworCUxpc3QJICAgKmRwY29udGV4dDsKKwlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7 CisKKwkvKiBGaW5kIHRoZSBwZ190eXBlIGVudHJ5IGFuZCBvcGVuIHRoZSBjb3JyZXNwb25kaW5n IHJlbGF0aW9uICovCisJdHlwdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHlwdHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgd2l0aCBPSUQgJXUiLCBv YmplY3RJZCk7CisJdHlwZm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXB0dXApOwor CXR5cGVyZWwgPSByZWxhdGlvbl9vcGVuKHR5cGZvcm0tPnR5cHJlbGlkLCBBY2Nlc3NTaGFyZUxv Y2spOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZSh0eXBlcmVsKSwKKwkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodHlwZXJlbCkpOwor CisJdGFibGVlbHRzID0gZGVwYXJzZV9UYWJsZUVsZW1lbnRzKHR5cGVyZWwsIG5vZGUtPmNvbGRl Zmxpc3QsIGRwY29udGV4dCwKKwkJCQkJCQkJCSAgZmFsc2UsCS8qIG5vdCB0eXBlZCAqLworCQkJ CQkJCQkJICB0cnVlKTsJLyogY29tcG9zaXRlIHR5cGUgKi8KKworCXRhYmxlX2Nsb3NlKHR5cGVy ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJUmVsZWFzZVN5c0NhY2hlKHR5cHR1cCk7CisKKwlyZXR1 cm4gbmV3X29ianRyZWVfVkEoIkNSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyAoJXtjb2x1bW5z OiwgfXMpIiwgMiwKKwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLCBvYmplY3RJZCksCisJ CQkJCQkgICJjb2x1bW5zIiwgT2JqVHlwZUFycmF5LCB0YWJsZWVsdHMpOworfQorCisvKgorICog RGVwYXJzZSBhIENyZWF0ZUNvbnZlcnNpb25TdG10CisgKgorICogR2l2ZW4gYSBjb252ZXJzaW9u IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJl ZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBDUkVBVEUgJXtkZWZhdWx0fXMgQ09OVkVSU0lPTiAle2lkZW50aXR5fUQgRk9S ICV7c291cmNlfUwgVE8gJXtkZXN0fUwKKyAqIEZST00gJXtmdW5jdGlvbn1ECisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlQ29udmVyc2lvbihPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJY29uVHVwOworCVJlbGF0aW9uCWNvbnZyZWw7CisJ Rm9ybV9wZ19jb252ZXJzaW9uIGNvbkZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCisJY29udnJl bCA9IHRhYmxlX29wZW4oQ29udmVyc2lvblJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJ Y29uVHVwID0gZ2V0X2NhdGFsb2dfb2JqZWN0X2J5X29pZChjb252cmVsLCBBbnVtX3BnX2NvbnZl cnNpb25fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBjb252ZXJzaW9uIHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCWNvbkZvcm0gPSAoRm9ybV9wZ19jb252ZXJzaW9uKSBHRVRTVFJV Q1QoY29uVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtkZWZhdWx0fXMg Q09OVkVSU0lPTiAle2lkZW50aXR5fUQgRk9SICV7c291cmNlfUwgVE8gJXtkZXN0fUwgRlJPTSAl e2Z1bmN0aW9ufUQiLCA1LAorCQkJCQkJICAiZGVmYXVsdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkgIGNvbkZvcm0tPmNvbmRlZmF1bHQgPyAiREVGQVVMVCIgOiAiIiwKKwkJCQkJCSAgImlkZW50 aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSAgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGNv bkZvcm0tPmNvbm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgIE5hbWVTdHIoY29uRm9ybS0+Y29u bmFtZSkpLAorCQkJCQkJICAic291cmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgKGNoYXIg KilwZ19lbmNvZGluZ190b19jaGFyKGNvbkZvcm0tPmNvbmZvcmVuY29kaW5nKSwKKwkJCQkJCSAg ImRlc3QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICAoY2hhciAqKXBnX2VuY29kaW5nX3RvX2No YXIoY29uRm9ybS0+Y29udG9lbmNvZGluZyksCisJCQkJCQkgICJmdW5jdGlvbiIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxh dGlvbklkLAorCQkJCQkJCQkJCQkJCSAgY29uRm9ybS0+Y29ucHJvYykpOworCisJdGFibGVfY2xv c2UoY29udnJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiBEZXBhcnNlIGEgQ3JlYXRlRW51bVN0bXQgKENSRUFURSBUWVBFIEFTIEVOVU0pCisgKgorICog R2l2ZW4gYSBFbnVtIHR5cGUgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQs IHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBUWVBFICV7aWRlbnRpdHl9RCBBUyBF TlVNICgle3ZhbHVlczosIH1MKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0 ZUVudW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUVudW1T dG10ICpub2RlID0gKENyZWF0ZUVudW1TdG10ICopIHBhcnNldHJlZTsKKwlMaXN0CSAgICp2YWx1 ZXMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWZvcmVhY2goY2VsbCwgbm9kZS0+dmFs cykKKwkJdmFsdWVzID0gbGFwcGVuZCh2YWx1ZXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbChs Zmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwpKSkpOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgVFlQRSAle2lkZW50aXR5fUQgQVMgRU5VTSAoJXt2YWx1ZXM6LCB9TCkiLCAyLAorCQkJ CQkJICAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJCSAgInZhbHVlcyIs IE9ialR5cGVBcnJheSwgdmFsdWVzKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVFeHRl bnNpb25TdG10CisgKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIE9JRCBhbmQgdGhlIHBhcnNlIHRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgRVhU RU5TSU9OICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10KE9pZCBvYmplY3RJZCwg Tm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQ3JlYXRl RXh0ZW5zaW9uU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfZXh0ZW5zaW9uOworCUhl YXBUdXBsZQlleHRUdXA7CisJRm9ybV9wZ19leHRlbnNpb24gZXh0Rm9ybTsKKwlPYmpUcmVlICAg ICp0bXA7CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcGdf ZXh0ZW5zaW9uID0gdGFibGVfb3BlbihFeHRlbnNpb25SZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxv Y2spOworCWV4dFR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfZXh0ZW5zaW9uLCBB bnVtX3BnX2V4dGVuc2lvbl9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQo ZXh0VHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGV4dGVuc2lv biB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlleHRGb3JtID0gKEZvcm1fcGdfZXh0ZW5zaW9u KSBHRVRTVFJVQ1QoZXh0VHVwKTsKKworCS8qIExpc3Qgb2Ygb3B0aW9ucyAqLworCWZvcmVhY2go Y2VsbCwgbm9kZS0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICop IGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgInNjaGVtYSIpID09 IDApCisJCXsKKwkJCS8qIHNraXAgdGhpcyBvbmU7IHdlIGFkZCBvbmUgdW5jb25kaXRpb25hbGx5 IGJlbG93ICovCisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZu YW1lLCAibmV3X3ZlcnNpb24iKSA9PSAwKQorCQl7CisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi VkVSU0lPTiAle3ZlcnNpb259TCIsIDIsCisJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcs ICJ2ZXJzaW9uIiwKKwkJCQkJCQkJICJ2ZXJzaW9uIiwgT2JqVHlwZVN0cmluZywgZGVmR2V0U3Ry aW5nKG9wdCkpOworCQkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1w KSk7CisJCX0KKwkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFtZSwgIm9sZF92ZXJzaW9uIikg PT0gMCkKKwkJeworCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkZST00gJXt2ZXJzaW9ufUwiLCAy LAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZnJvbSIsCisJCQkJCQkJCSAidmVy c2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVsc2UKKwkJCWVsb2co RVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMiLCBvcHQtPmRlZm5hbWUpOworCX0KKworCS8q IEFkZCB0aGUgU0NIRU1BIG9wdGlvbiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTQ0hFTUEg JXtzY2hlbWF9SSIsIDIsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2NoZW1hIiwK KwkJCQkJCSAic2NoZW1hIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfbmFtZXNwYWNlX25h bWUoZXh0Rm9ybS0+ZXh0bmFtZXNwYWNlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJdGFibGVfY2xvc2UocGdfZXh0ZW5zaW9uLCBBY2Nlc3NTaGFy ZUxvY2spOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgRVhURU5TSU9OICV7aWZf bm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMiLCAzLAorCQkJCQkJICAiaWZfbm90 X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIG5vZGUtPmlmX25vdF9leGlzdHMgPyAi SUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2Rl LT5leHRuYW1lLAorCQkJCQkJICAib3B0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7Cit9CisK Ky8qCisgKiBJZiBhIGNvbHVtbiBuYW1lIGlzIHNwZWNpZmllZCwgYWRkIGFuIGVsZW1lbnQgZm9y IGl0OyBvdGhlcndpc2UgaXQncyBhCisgKiB0YWJsZS1sZXZlbCBvcHRpb24uCisgKi8KK3N0YXRp YyBPYmpUcmVlICoKK2RlcGFyc2VfRmR3T3B0aW9ucyhMaXN0ICpvcHRpb25zLCBjaGFyICpjb2xu YW1lKQoreworCU9ialRyZWUgICAgKnJldDsKKworCWlmIChjb2xuYW1lKQorCQlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkiLCAxLAorCQkJCQkJCSAiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgY29sbmFtZSk7CisJZWxzZQorCQlyZXQgPSBuZXdfb2JqdHJlZSgi T1BUSU9OUyIpOworCisJaWYgKG9wdGlvbnMgIT0gTklMKQorCXsKKwkJTGlzdAkgICAqb3B0b3V0 ID0gTklMOworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2VsbCwgb3B0aW9ucykK KwkJeworCQkJRGVmRWxlbSAgICAqZWxlbTsKKwkJCU9ialRyZWUgICAgKm9wdDsKKworCQkJZWxl bSA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQkJc3dpdGNoIChlbGVtLT5kZWZhY3Rp b24pCisJCQl7CisJCQkJY2FzZSBERUZFTEVNX1VOU1BFQzoKKwkJCQkJb3B0ID0gbmV3X29ianRy ZWVfVkEoIiV7bGFiZWx9SSAle3ZhbHVlfUwiLCAyLAorCQkJCQkJCQkJCSAibGFiZWwiLCBPYmpU eXBlU3RyaW5nLCBlbGVtLT5kZWZuYW1lLAorCQkJCQkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJCSBlbGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJ CQkJCSBkZWZHZXRCb29sZWFuKGVsZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisJCQkJCWJyZWFr OworCQkJCWNhc2UgREVGRUxFTV9TRVQ6CisJCQkJCW9wdCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQg JXtsYWJlbH1JICV7dmFsdWV9TCIsIDIsCisJCQkJCQkJCQkJICJsYWJlbCIsIE9ialR5cGVTdHJp bmcsIGVsZW0tPmRlZm5hbWUsCisJCQkJCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6CisJCQkJCQkJCQkJIGRl ZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKwkJCQkJYnJlYWs7CisJCQkJ Y2FzZSBERUZFTEVNX0FERDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIkFERCAle2xhYmVs fUkgJXt2YWx1ZX1MIiwgMiwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxl bS0+ZGVmbmFtZSwKKwkJCQkJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJ CQkgZWxlbS0+YXJnID8gZGVmR2V0U3RyaW5nKGVsZW0pIDoKKwkJCQkJCQkJCQkgZGVmR2V0Qm9v bGVhbihlbGVtKSA/ICJUUlVFIiA6ICJGQUxTRSIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIERF RkVMRU1fRFJPUDoKKwkJCQkJb3B0ID0gbmV3X29ianRyZWVfVkEoIkRST1AgJXtsYWJlbH1JIiwg MSwKKwkJCQkJCQkJCQkgImxhYmVsIiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZSk7CisJ CQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGRlZiBh Y3Rpb24gJWQiLCBlbGVtLT5kZWZhY3Rpb24pOworCQkJCQlvcHQgPSBOVUxMOworCQkJfQorCisJ CQlvcHRvdXQgPSBsYXBwZW5kKG9wdG91dCwgbmV3X29iamVjdF9vYmplY3Qob3B0KSk7CisJCX0K KworCQlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIigle29wdGlvbjogLH1zKSIsIG9wdG91dCk7 CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisKKwlyZXR1cm4gcmV0Owor fQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZUZkd1N0bXQgKENSRUFURSBGT1JFSUdOIERBVEEg V1JBUFBFUikKKyAqCisgKiBHaXZlbiBhbiBGRFcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0 IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0 aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBGT1JFSUdOIERB VEEgV1JBUFBFUiAle2lkZW50aXR5fUkgJXtoYW5kbGVyfXMgJXt2YWxpZGF0b3J9cyAle2dlbmVy aWNfb3B0aW9uc31zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlRmR3U3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGZHdTdG10ICpub2Rl ID0gKENyZWF0ZUZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlmZHdUdXA7CisJRm9y bV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3JtOworCVJlbGF0aW9uCXJlbDsKKwlPYmpU cmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCisJcmVsID0gdGFibGVfb3BlbihGb3Jl aWduRGF0YVdyYXBwZXJSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCWZkd1R1cCA9 IFNlYXJjaFN5c0NhY2hlMShGT1JFSUdOREFUQVdSQVBQRVJPSUQsCisJCQkJCQkJIE9iamVjdElk R2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoZmR3VHVwKSkKKwkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZvcmVpZ24tZGF0YSB3cmFwcGVy IHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlmZHdGb3JtID0gKEZvcm1fcGdfZm9y ZWlnbl9kYXRhX3dyYXBwZXIpIEdFVFNUUlVDVChmZHdUdXApOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkp OworCisJLyogYWRkIEhBTkRMRVIgY2xhdXNlICovCisJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0t PmZkd2hhbmRsZXIpKQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiTk8gSEFORExFUiIpOworCWVsc2UK Kwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIQU5ETEVSICV7cHJvY2VkdXJlfUQiLCAxLAor CQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBmZHdG b3JtLT5mZHdoYW5kbGVyKSk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7aGFu ZGxlcn1zIiwgdG1wKTsKKworCS8qIGFkZCBWQUxJREFUT1IgY2xhdXNlICovCisJaWYgKCFPaWRJ c1ZhbGlkKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpCisJCXRtcCA9IG5ld19vYmp0cmVlKCJOTyBW QUxJREFUT1IiKTsKKwllbHNlCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVE9S ICV7cHJvY2VkdXJlfUQiLCAxLAorCQkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSBmZHdGb3JtLT5mZHd2YWxpZGF0b3IpKTsKKwl9CisJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXt2YWxpZGF0b3J9cyIsIHRtcCk7CisKKwkvKiBBZGQgYW4gT1BU SU9OUyBjbGF1c2UsIGlmIGFueSAqLworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Z2Vu ZXJpY19vcHRpb25zfXMiLAorCQkJCQkJIGRlcGFyc2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25z LCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUoZmR3VHVwKTsKKwl0YWJsZV9jbG9zZShyZWws IFJvd0V4Y2x1c2l2ZUxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2Ug YW4gQWx0ZXJGZHdTdG10IChBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUikKKyAqCisgKiBHaXZl biBhbiBGRFcgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh biBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFMVEVSIEZPUkVJR04gREFUQSBXUkFQUEVSICV7aWRlbnRpdHl9SSAl e2Zkd19vcHRpb25zOiB9cyAle2dlbmVyaWNfb3B0aW9uc31ECisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfQWx0ZXJGZHdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQor eworCUFsdGVyRmR3U3RtdCAqbm9kZSA9IChBbHRlckZkd1N0bXQgKikgcGFyc2V0cmVlOworCUhl YXBUdXBsZQlmZHdUdXA7CisJRm9ybV9wZ19mb3JlaWduX2RhdGFfd3JhcHBlciBmZHdGb3JtOwor CVJlbGF0aW9uCXJlbDsKKwlPYmpUcmVlICAgICpyZXQ7CisJTGlzdAkgICAqZmR3X29wdGlvbnMg PSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCXJlbCA9IHRhYmxlX29wZW4oRm9yZWlnbkRh dGFXcmFwcGVyUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlmZHdUdXAgPSBTZWFy Y2hTeXNDYWNoZTEoRk9SRUlHTkRBVEFXUkFQUEVST0lELAorCQkJCQkJCSBPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGZkd1R1cCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmb3JlaWduLWRhdGEgd3JhcHBlciB3aXRo IE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCisJZmR3Rm9ybSA9IChGb3JtX3BnX2ZvcmVpZ25f ZGF0YV93cmFwcGVyKSBHRVRTVFJVQ1QoZmR3VHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiBGT1JFSUdOIERBVEEgV1JBUFBFUiAle2lkZW50aXR5fUkiLCAxLAorCQkJCQkJICJp ZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIE5hbWVTdHIoZmR3Rm9ybS0+ZmR3bmFtZSkpOworCisJ LyoKKwkgKiBJdGVyYXRlIHRocm91Z2ggb3B0aW9ucywgdG8gc2VlIHdoYXQgY2hhbmdlZCwgYnV0 IHVzZSBjYXRhbG9nIGFzIGEKKwkgKiBiYXNpcyBmb3IgbmV3IHZhbHVlcy4KKwkgKi8KKwlmb3Jl YWNoKGNlbGwsIG5vZGUtPmZ1bmNfb3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJ CU9ialRyZWUgICAgKnRtcDsKKworCQllbGVtID0gbGZpcnN0KGNlbGwpOworCisJCWlmIChwZ19z dHJjYXNlY21wKGVsZW0tPmRlZm5hbWUsICJoYW5kbGVyIikgPT0gMCkKKwkJeworCQkJLyogYWRk IEhBTkRMRVIgY2xhdXNlICovCisJCQlpZiAoIU9pZElzVmFsaWQoZmR3Rm9ybS0+ZmR3aGFuZGxl cikpCisJCQkJdG1wID0gbmV3X29ianRyZWUoIk5PIEhBTkRMRVIiKTsKKwkJCWVsc2UKKwkJCXsK KwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiSEFORExFUiAle3Byb2NlZHVyZX1EIiwgMSwKKwkJ CQkJCQkJCSAicHJvY2VkdXJlIiwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgZmR3Rm9ybS0+ZmR3aGFu ZGxlcikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwkJfQorCQllbHNlIGlmIChwZ19zdHJjYXNlY21wKGVsZW0t PmRlZm5hbWUsICJ2YWxpZGF0b3IiKSA9PSAwKQorCQl7CisJCQkvKiBhZGQgVkFMSURBVE9SIGNs YXVzZSAqLworCQkJaWYgKCFPaWRJc1ZhbGlkKGZkd0Zvcm0tPmZkd3ZhbGlkYXRvcikpCisJCQkJ dG1wID0gbmV3X29ianRyZWUoIk5PIFZBTElEQVRPUiIpOworCQkJZWxzZQorCQkJeworCQkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJWQUxJREFUT1IgJXtwcm9jZWR1cmV9RCIsIDEsCisJCQkJCQkJ CQkgInByb2NlZHVyZSIsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFBy b2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIGZkd0Zvcm0tPmZkd3ZhbGlkYXRv cikpOworCQkJfQorCQkJZmR3X29wdGlvbnMgPSBsYXBwZW5kKGZkd19vcHRpb25zLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXApKTsKKwkJfQorCX0KKworCS8qIEFkZCBIQU5ETEVSL1ZBTElEQVRPUiBp ZiBzcGVjaWZpZWQgKi8KKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHJldCwgIiV7ZmR3X29wdGlvbnM6 IH1zIiwgZmR3X29wdGlvbnMpOworCisJLyogQWRkIGFuIE9QVElPTlMgY2xhdXNlLCBpZiBhbnkg Ki8KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyaWNfb3B0aW9uc31EIiwKKwkJ CQkJCSBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+b3B0aW9ucywgTlVMTCkpOworCisJUmVsZWFz ZVN5c0NhY2hlKGZkd1R1cCk7CisJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRFIFRZUEUgQVMgUkFO R0Ugc3RhdGVtZW50CisgKgorICogR2l2ZW4gYSBSYW5nZSB0eXBlIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUg VFlQRSAle2lkZW50aXR5fUQgQVMgUkFOR0UgKCV7ZGVmaW5pdGlvbjosIH1zKQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVJhbmdlU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSkKK3sKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9 IE5JTDsKKwlSZWxhdGlvbglwZ19yYW5nZTsKKwlIZWFwVHVwbGUJcmFuZ2VUdXA7CisJRm9ybV9w Z19yYW5nZSByYW5nZUZvcm07CisJU2NhbktleURhdGEga2V5WzFdOworCVN5c1NjYW5EZXNjIHNj YW47CisKKwlwZ19yYW5nZSA9IHRhYmxlX29wZW4oUmFuZ2VSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXlbMF0sCisJCQkJQW51bV9wZ19yYW5nZV9ybmd0 eXBpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19yYW5n ZSwgUmFuZ2VUeXBpZEluZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOworCisJ cmFuZ2VUdXAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4pOworCWlmICghSGVhcFR1cGxlSXNWYWxp ZChyYW5nZVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByYW5n ZSB3aXRoIHR5cGUgT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlyYW5nZUZvcm0gPSAoRm9y bV9wZ19yYW5nZSkgR0VUU1RSVUNUKHJhbmdlVHVwKTsKKworCS8qIFNVQlRZUEUgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRSA9ICV7dHlwZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInN1YnR5cGUiLAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIHJh bmdlRm9ybS0+cm5nc3VidHlwZSkpOworCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24s IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU1VCVFlQRV9PUENMQVNTICovCisJaWYg KE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdzdWJvcGMpKQorCXsKKwkJdG1wID0gbmV3X29ianRy ZWVfVkEoIlNVQlRZUEVfT1BDTEFTUyA9ICV7b3BjbGFzc31EIiwgMiwKKwkJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJvcGNsYXNzIiwKKwkJCQkJCQkgIm9wY2xhc3MiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JDbGFz c1JlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSByYW5nZUZvcm0tPnJuZ3N1Ym9wYykpOworCQlk ZWZpbml0aW9uID0gbGFwcGVuZChkZWZpbml0aW9uLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK Kwl9CisKKwkvKiBDT0xMQVRJT04gKi8KKwlpZiAoT2lkSXNWYWxpZChyYW5nZUZvcm0tPnJuZ2Nv bGxhdGlvbikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFUSU9OID0gJXtjb2xs YXRpb259RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0aW9u IiwKKwkJCQkJCQkgImNvbGxhdGlvbiIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkg cmFuZ2VGb3JtLT5ybmdjb2xsYXRpb24pKTsKKwkJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5p dGlvbiwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQorCisJLyogQ0FOT05JQ0FMICovCisJ aWYgKE9pZElzVmFsaWQocmFuZ2VGb3JtLT5ybmdjYW5vbmljYWwpKQorCXsKKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkNBTk9OSUNBTCA9ICV7Y2Fub25pY2FsfUQiLCAyLAorCQkJCQkJCSAiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImNhbm9uaWNhbCIsCisJCQkJCQkJICJjYW5vbmljYWwiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHJhbmdlRm9ybS0+cm5nY2Fub25pY2FsKSk7 CisJCWRlZmluaXRpb24gPSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCX0KKworCS8qIFNVQlRZUEVfRElGRiAqLworCWlmIChPaWRJc1ZhbGlkKHJhbmdlRm9y bS0+cm5nc3ViZGlmZikpCisJeworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1VCVFlQRV9ESUZG ID0gJXtzdWJ0eXBlX2RpZmZ9RCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3VidHlwZV9kaWZmIiwKKwkJCQkJCQkgInN1YnR5cGVfZGlmZiIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgcmFuZ2VGb3JtLT5ybmdzdWJkaWZmKSk7CisJCWRlZmluaXRpb24g PSBsYXBwZW5kKGRlZmluaXRpb24sIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCXN5 c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJdGFibGVfY2xvc2UocGdfcmFuZ2UsIFJvd0V4Y2x1c2l2 ZUxvY2spOworCisJcmV0dXJuIG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lkZW50aXR5 fUQgQVMgUkFOR0UgKCV7ZGVmaW5pdGlvbjosIH1zKSIsIDIsCisJCQkJCQkgICJpZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChUeXBl UmVsYXRpb25JZCwgb2JqZWN0SWQpLAorCQkJCQkJICAiZGVmaW5pdGlvbiIsIE9ialR5cGVBcnJh eSwgZGVmaW5pdGlvbik7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRW51bVN0bXQuCisg KgorICogR2l2ZW4gYW4gZW51bSBPSUQgYW5kIGEgcGFyc2UgdHJlZSB0aGF0IG1vZGlmaWVkIGl0 LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBhbHRlciB0eXBlLgorICoK KyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBBREQgVkFMVUUg JXtpZl9ub3RfZXhpc3RzfXMgJXt2YWx1ZX1MCisgKiAle2FmdGVyX29yX2JlZm9yZX1zICV7bmVp Z2hib3J9TAorICogCU9SCisgKiBBTFRFUiBUWVBFICV7aWRlbnRpdHl9RCBSRU5BTUUgVkFMVUUg JXt2YWx1ZX1MIFRPICV7bmV3dmFsdWV9TAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0FsdGVyRW51bVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJF bnVtU3RtdCAqbm9kZSA9IChBbHRlckVudW1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAg ICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVFlQRSAle2lkZW50aXR5fUQi LCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFR5cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSBvYmplY3RJ ZCkpOworCisJaWYgKCFub2RlLT5vbGRWYWwpCisJeworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyhy ZXQsICJBREQgVkFMVUUiKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtpZl9ub3Rf ZXhpc3RzfXMiLCAiaWZfbm90X2V4aXN0cyIsCisJCQkJCQkJIG5vZGUtPnNraXBJZk5ld1ZhbEV4 aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKworCQlhcHBlbmRfc3RyaW5nX29iamVjdChy ZXQsICIle3ZhbHVlfUwiLCAidmFsdWUiLCBub2RlLT5uZXdWYWwpOworCisJCWlmIChub2RlLT5u ZXdWYWxOZWlnaGJvcikKKwkJeworCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXthZnRl cl9vcl9iZWZvcmV9cyIsCisJCQkJCQkJCSAiYWZ0ZXJfb3JfYmVmb3JlIiwKKwkJCQkJCQkJIG5v ZGUtPm5ld1ZhbElzQWZ0ZXIgPyAiQUZURVIiIDogIkJFRk9SRSIpOworCQkJYXBwZW5kX3N0cmlu Z19vYmplY3QocmV0LCAiJXtuZWlnaGJvcn1MIiwgIm5laWdoYm9yIiwKKwkJCQkJCQkJIG5vZGUt Pm5ld1ZhbE5laWdoYm9yKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlhcHBlbmRfc3RyaW5nX29i amVjdChyZXQsICJSRU5BTUUgVkFMVUUgJXt2YWx1ZX1MIFRPIiwgInZhbHVlIiwKKwkJCQkJCQkg bm9kZS0+b2xkVmFsKTsKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtuZXd2YWx1ZX1M IiwgIm5ld3ZhbHVlIiwgbm9kZS0+bmV3VmFsKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhbiBBbHRlckV4dGVuc2lvblN0bXQgKEFMVEVSIEVYVEVOU0lPTiAuLiBV UERBVEUgVE8gVkVSU0lPTikKKyAqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gT0lEIGFuZCBhIHBh cnNlIHRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2Vu dGluZyB0aGUgYWx0ZXIgdHlwZS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRVhU RU5TSU9OICV7aWRlbnRpdHl9SSBVUERBVEUgJXtvcHRpb25zOiB9cworICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBh cnNldHJlZSkKK3sKKwlBbHRlckV4dGVuc2lvblN0bXQgKm5vZGUgPSAoQWx0ZXJFeHRlbnNpb25T dG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglwZ19leHRlbnNpb247CisJSGVhcFR1cGxlCWV4 dFR1cDsKKwlGb3JtX3BnX2V4dGVuc2lvbiBleHRGb3JtOworCU9ialRyZWUgICAgKnJldDsKKwlM aXN0CSAgICpsaXN0ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRGVmRWxlbSAgICAqZF9u ZXdfdmVyc2lvbiA9IE5VTEw7CisKKwlwZ19leHRlbnNpb24gPSB0YWJsZV9vcGVuKEV4dGVuc2lv blJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJZXh0VHVwID0gZ2V0X2NhdGFsb2dfb2Jq ZWN0X2J5X29pZChwZ19leHRlbnNpb24sIEFudW1fcGdfZXh0ZW5zaW9uX29pZCwgb2JqZWN0SWQp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChleHRUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgZXh0ZW5zaW9uIHdpdGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7 CisJZXh0Rm9ybSA9IChGb3JtX3BnX2V4dGVuc2lvbikgR0VUU1RSVUNUKGV4dFR1cCk7CisKKwlm b3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpvcHQgPSAoRGVm RWxlbSAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJuZXdf dmVyc2lvbiIpID09IDApCisJCXsKKwkJCU9ialRyZWUgICAgKnRtcDsKKworCQkJaWYgKGRfbmV3 X3ZlcnNpb24pCisJCQkJZWxvZyhFUlJPUiwgImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBvcHRp b25zIGZvciBleHRlbnNpb24gd2l0aCBPSUQgJXUiLAorCQkJCQkgb2JqZWN0SWQpOworCisJCQlk X25ld192ZXJzaW9uID0gb3B0OworCisJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiVE8gJXt2ZXJz aW9ufUwiLCAyLAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmVyc2lvbiIsCisJ CQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsIGRlZkdldFN0cmluZyhvcHQpKTsKKwkJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQl9CisJCWVs c2UKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCBvcHRpb24gJXMiLCBvcHQtPmRlZm5hbWUp OworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBFWFRFTlNJT04gJXtpZGVudGl0 eX1JIFVQREFURSAle29wdGlvbnM6IH1zIiwgMiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBl U3RyaW5nLCBOYW1lU3RyKGV4dEZvcm0tPmV4dG5hbWUpLAorCQkJCQkJICJvcHRpb25zIiwgT2Jq VHlwZUFycmF5LCBsaXN0KTsKKworCXRhYmxlX2Nsb3NlKHBnX2V4dGVuc2lvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRXh0 ZW5zaW9uQ29udGVudHNTdG10IChBTFRFUiBFWFRFTlNJT04gZXh0IEFERC9EUk9QIG9iamVjdCkK KyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgRVhURU5TSU9OICV7ZXh0aWRlbnRpdHl9 SSBBREQvRFJPUCAle29iamlkZW50aXR5fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9BbHRlckV4dGVuc2lvbkNvbnRlbnRzU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJl ZSwKKwkJCQkJCQkJICAgT2JqZWN0QWRkcmVzcyBvYmplY3RBZGRyZXNzKQoreworCUFsdGVyRXh0 ZW5zaW9uQ29udGVudHNTdG10ICpub2RlID0gKEFsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10ICop IHBhcnNldHJlZTsKKworCUFzc2VydChub2RlLT5hY3Rpb24gPT0gKzEgfHwgbm9kZS0+YWN0aW9u ID09IC0xKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRVhURU5TSU9OICV7ZXh0 aWRlbnRpdHl9SSAle2V4dG9wdGlvbn1zICV7ZXh0b2JqdHlwZX1zICV7b2JqaWRlbnRpdHl9cyIs IDQsCisJCQkJCQkgICJleHRpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmV4dG5hbWUs CisJCQkJCQkgICJleHRvcHRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBub2RlLT5hY3Rp b24gPT0gKzEgPyAiQUREIiA6ICJEUk9QIiwKKwkJCQkJCSAgImV4dG9ianR5cGUiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJICBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSks CisJCQkJCQkgICJvYmppZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgIGdldE9iamVj dElkZW50aXR5KCZvYmplY3RBZGRyZXNzLCBmYWxzZSkpOworfQorCisvKgorICogRGVwYXJzZSBh biBDcmVhdGVDYXN0U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgYSBwYXJz ZSB0cmVlIHRoYXQgbW9kaWZpZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRp bmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkgJXttZWNoYW5pc219cyAl e2NvbnRleHR9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZUNhc3RTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZUNhc3RTdG10ICpub2Rl ID0gKENyZWF0ZUNhc3RTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbgljYXN0cmVsOworCUhl YXBUdXBsZQljYXN0VHVwOworCUZvcm1fcGdfY2FzdCBjYXN0Rm9ybTsKKwlPYmpUcmVlICAgICpy ZXQ7CisJY2hhcgkgICAqY29udGV4dDsKKworCWNhc3RyZWwgPSB0YWJsZV9vcGVuKENhc3RSZWxh dGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCWNhc3RUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3Rf Ynlfb2lkKGNhc3RyZWwsIEFudW1fcGdfY2FzdF9vaWQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoY2FzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBjYXN0IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNhc3RGb3JtID0gKEZvcm1fcGdf Y2FzdCkgR0VUU1RSVUNUKGNhc3RUdXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFU RSBDQVNUICgle3NvdXJjZXR5cGV9VCBBUyAle3RhcmdldHR5cGV9VCkiLCAyLAorCQkJCQkJICJz b3VyY2V0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShj YXN0Rm9ybS0+Y2FzdHNvdXJjZSwgLTEpLAorCQkJCQkJICJ0YXJnZXR0eXBlIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShjYXN0Rm9ybS0+Y2FzdHRhcmdldCwg LTEpKTsKKworCWlmIChub2RlLT5pbm91dCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAi JXttZWNoYW5pc219cyIsICJtZWNoYW5pc20iLAorCQkJCQkJCSAiV0lUSCBJTk9VVCIpOworCWVs c2UgaWYgKG5vZGUtPmZ1bmMgPT0gTlVMTCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAi JXttZWNoYW5pc219cyIsICJtZWNoYW5pc20iLAorCQkJCQkJCSAiV0lUSE9VVCBGVU5DVElPTiIp OworCWVsc2UKKwl7CisJCU9ialRyZWUgICAgKnRtcG9iajsKKwkJU3RyaW5nSW5mb0RhdGEgZnVu YzsKKwkJSGVhcFR1cGxlCWZ1bmNUdXA7CisJCUZvcm1fcGdfcHJvYyBmdW5jRm9ybTsKKwkJaW50 CQkJaTsKKworCQlmdW5jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIGNhc3RGb3JtLT5j YXN0ZnVuYyk7CisJCWZ1bmNGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKGZ1bmNUdXAp OworCisJCWluaXRTdHJpbmdJbmZvKCZmdW5jKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmZnVuYywg IiVzKCIsCisJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIoZ2V0X25hbWVzcGFjZV9u YW1lKGZ1bmNGb3JtLT5wcm9uYW1lc3BhY2UpLAorCQkJCQkJCQkJCQkJCU5hbWVTdHIoZnVuY0Zv cm0tPnByb25hbWUpKSk7CisJCWZvciAoaSA9IDA7IGkgPCBmdW5jRm9ybS0+cHJvbmFyZ3M7IGkr KykKKwkJeworCQkJaWYgKGkgIT0gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywg JywnKTsKKworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZnVuYywKKwkJCQkJCQkJICAgZm9y bWF0X3R5cGVfYmVfcXVhbGlmaWVkKGZ1bmNGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXNbaV0pKTsK KwkJfQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZnVuYywgJyknKTsKKworCQl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiV0lUSCBGVU5DVElPTiAle2Nhc3RmdW5jdGlvbn1zIiwgMSwKKwkJCQkJ CQkJImNhc3RmdW5jdGlvbiIsIE9ialR5cGVTdHJpbmcsIGZ1bmMuZGF0YSk7CisJCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHJldCwgIiV7bWVjaGFuaXNtfXMiLCB0bXBvYmopOworCisJCVJlbGVhc2VT eXNDYWNoZShmdW5jVHVwKTsKKwl9CisKKwlzd2l0Y2ggKG5vZGUtPmNvbnRleHQpCisJeworCQlj YXNlIENPRVJDSU9OX0lNUExJQ0lUOgorCQkJY29udGV4dCA9ICJBUyBJTVBMSUNJVCI7CisJCQli cmVhazsKKwkJY2FzZSBDT0VSQ0lPTl9BU1NJR05NRU5UOgorCQkJY29udGV4dCA9ICJBUyBBU1NJ R05NRU5UIjsKKwkJCWJyZWFrOworCQljYXNlIENPRVJDSU9OX0VYUExJQ0lUOgorCQkJY29udGV4 dCA9ICIiOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBj b2VyY2lvbiBjb2RlICVjIiwgbm9kZS0+Y29udGV4dCk7CisJCQlyZXR1cm4gTlVMTDsJCS8qIGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KKwl9CisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtj b250ZXh0fXMiLCAiY29udGV4dCIsIGNvbnRleHQpOworCisJdGFibGVfY2xvc2UoY2FzdHJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFu IEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyBzdGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIEFMVEVSIERFRkFVTFQgUFJJVklMRUdFUyAle2luX3NjaGVtYX1zICV7Zm9yX3JvbGVz fXMgJXtncmFudH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZWZhdWx0 UHJpdmlsZWdlc1N0bXQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQoreworCU9ialRyZWUgICAgKnJl dDsKKwlBbHRlckRlZmF1bHRQcml2aWxlZ2VzU3RtdCAqc3RtdCA9IChBbHRlckRlZmF1bHRQcml2 aWxlZ2VzU3RtdCAqKSBjbWQtPnBhcnNldHJlZTsKKwlMaXN0CSAgICpyb2xlcyA9IE5JTDsKKwlM aXN0CSAgICpzY2hlbWFzID0gTklMOworCUxpc3QJICAgKmdyYW50ZWVzOworCUxpc3QJICAgKnBy aXZzOworCUxpc3RDZWxsICAgKmNlbGw7CisJT2JqVHJlZSAgICAqdG1wOworCU9ialRyZWUgICAg KmdyYW50OworCWNoYXIJICAgKm9ianR5cGU7CisKKwlyZXQgPSBuZXdfb2JqdHJlZSgiQUxURVIg REVGQVVMVCBQUklWSUxFR0VTIik7CisKKwkvKiBTY2FuIHRoZSBwYXJzZSBub2RlIHRvIGRpZyBv dXQgdGhlIEZPUiBST0xFIGFuZCBJTiBTQ0hFTUEgY2xhdXNlcyAqLworCWZvcmVhY2goY2VsbCwg c3RtdC0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAgKm9wdCA9IChEZWZFbGVtICopIGxmaXJz dChjZWxsKTsKKwkJTGlzdENlbGwgICAqY2VsbDI7CisKKwkJQXNzZXJ0KElzQShvcHQsIERlZkVs ZW0pKTsKKwkJQXNzZXJ0KElzQShvcHQtPmFyZywgTGlzdCkpOworCQlpZiAoc3RyY21wKG9wdC0+ ZGVmbmFtZSwgInJvbGVzIikgPT0gMCkKKwkJeworCQkJZm9yZWFjaChjZWxsMiwgKExpc3QgKikg b3B0LT5hcmcpCisJCQl7CisJCQkJUm9sZVNwZWMgICAqcm9sZXNwZWMgPSBsZmlyc3QoY2VsbDIp OworCQkJCU9ialRyZWUgICAgKm9iaiA9IG5ld19vYmp0cmVlX2Zvcl9yb2xlc3BlYyhyb2xlc3Bl Yyk7CisKKwkJCQlyb2xlcyA9IGxhcHBlbmQocm9sZXMsIG5ld19vYmplY3Rfb2JqZWN0KG9iaikp OworCQkJfQorCQl9CisJCWVsc2UgaWYgKHN0cmNtcChvcHQtPmRlZm5hbWUsICJzY2hlbWFzIikg PT0gMCkKKwkJeworCQkJZm9yZWFjaChjZWxsMiwgKExpc3QgKikgb3B0LT5hcmcpCisJCQl7CisJ CQkJU3RyaW5nCSAgICp2YWwgPSBsZmlyc3Rfbm9kZShTdHJpbmcsIGNlbGwyKTsKKworCQkJCXNj aGVtYXMgPSBsYXBwZW5kKHNjaGVtYXMsIG5ld19zdHJpbmdfb2JqZWN0KHN0clZhbCh2YWwpKSk7 CisJCQl9CisJCX0KKwl9CisKKwkvKiBBZGQgdGhlIElOIFNDSEVNQSBjbGF1c2UsIGlmIGFueSAq LworCXRtcCA9IG5ld19vYmp0cmVlKCJJTiBTQ0hFTUEiKTsKKwlhcHBlbmRfYXJyYXlfb2JqZWN0 KHRtcCwgIiV7c2NoZW1hczosIH1JIiwgc2NoZW1hcyk7CisJaWYgKHNjaGVtYXMgPT0gTklMKQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIl e2luX3NjaGVtYX1zIiwgdG1wKTsKKworCS8qIEFkZCB0aGUgRk9SIFJPTEUgY2xhdXNlLCBpZiBh bnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiRk9SIFJPTEUiKTsKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHRtcCwgIiV7cm9sZXM6LCB9UiIsIHJvbGVzKTsKKwlpZiAocm9sZXMgPT0gTklMKQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2Zv cl9yb2xlc31zIiwgdG1wKTsKKworCS8qCisJICogQWRkIHRoZSBHUkFOVCBzdWJjb21tYW5kCisJ ICogVmVyYm9zZSBzeW50YXgKKwkgKiBHUkFOVCAle3ByaXZpbGVnZXM6LCB9cyBPTiAle3Rhcmdl dH1zIFRPICV7Z3JhbnRlZXM6LCB9UiAle2dyYW50X29wdGlvbn1zCisJICogb3IKKwkgKiBSRVZP S0UgJXtncmFudF9vcHRpb259cyAle3ByaXZpbGVnZXM6LCB9cyBPTiAle3RhcmdldH1zIEZST00g JXtncmFudGVlczosIH1SCisJICovCisJaWYgKHN0bXQtPmFjdGlvbi0+aXNfZ3JhbnQpCisJCWdy YW50ID0gbmV3X29ianRyZWUoIkdSQU5UIik7CisJZWxzZQorCXsKKwkJZ3JhbnQgPSBuZXdfb2Jq dHJlZSgiUkVWT0tFIik7CisKKwkJLyogQWRkIHRoZSBHUkFOVCBPUFRJT04gY2xhdXNlIGZvciBS RVZPS0Ugc3ViY29tbWFuZCAqLworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiR1JBTlQgT1BUSU9O IEZPUiIsIDEsCisJCQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkJIHN0bXQt PmFjdGlvbi0+Z3JhbnRfb3B0aW9uKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QoZ3JhbnQsICIl e2dyYW50X29wdGlvbn1zIiwgdG1wKTsKKwl9CisKKwkvKgorCSAqIEFkZCB0aGUgcHJpdmlsZWdl cyBsaXN0LiAgVGhpcyB1c2VzIHRoZSBwYXJzZXIgc3RydWN0LCBhcyBvcHBvc2VkIHRvCisJICog dGhlIEludGVybmFsR3JhbnQgZm9ybWF0IHVzZWQgYnkgR1JBTlQuICBUaGVyZSBhcmUgZW5vdWdo IG90aGVyCisJICogZGlmZmVyZW5jZXMgdGhhdCB0aGlzIGRvZXNuJ3Qgc2VlbSB3b3J0aCBpbXBy b3ZpbmcuCisJICovCisJaWYgKHN0bXQtPmFjdGlvbi0+cHJpdmlsZWdlcyA9PSBOSUwpCisJCXBy aXZzID0gbGlzdF9tYWtlMShuZXdfc3RyaW5nX29iamVjdCgiQUxMIFBSSVZJTEVHRVMiKSk7CisJ ZWxzZQorCXsKKwkJcHJpdnMgPSBOSUw7CisKKwkJZm9yZWFjaChjZWxsLCBzdG10LT5hY3Rpb24t PnByaXZpbGVnZXMpCisJCXsKKwkJCUFjY2Vzc1ByaXYgKnByaXYgPSBsZmlyc3QoY2VsbCk7CisK KwkJCUFzc2VydChwcml2LT5jb2xzID09IE5JTCk7CisJCQlwcml2cyA9IGxhcHBlbmQocHJpdnMs IG5ld19zdHJpbmdfb2JqZWN0KHByaXYtPnByaXZfbmFtZSkpOworCQl9CisJfQorCisJYXBwZW5k X2FycmF5X29iamVjdChncmFudCwgIiV7cHJpdmlsZWdlczosIH1zIiwgcHJpdnMpOworCisJc3dp dGNoIChjbWQtPmQuZGVmcHJpdnMub2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX1RBQkxFOgor CQkJb2JqdHlwZSA9ICJUQUJMRVMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX0ZVTkNUSU9O OgorCQkJb2JqdHlwZSA9ICJGVU5DVElPTlMiOworCQkJYnJlYWs7CisJCWNhc2UgT0JKRUNUX1JP VVRJTkU6CisJCQlvYmp0eXBlID0gIlJPVVRJTkVTIjsKKwkJCWJyZWFrOworCQljYXNlIE9CSkVD VF9TRVFVRU5DRToKKwkJCW9ianR5cGUgPSAiU0VRVUVOQ0VTIjsKKwkJCWJyZWFrOworCQljYXNl IE9CSkVDVF9UWVBFOgorCQkJb2JqdHlwZSA9ICJUWVBFUyI7CisJCQlicmVhazsKKwkJY2FzZSBP QkpFQ1RfU0NIRU1BOgorCQkJb2JqdHlwZSA9ICJTQ0hFTUFTIjsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgImludmFsaWQgT0JKRUNUIHZhbHVlICVkIGZvciBkZWZhdWx0 IHByaXZpbGVnZXMiLCBjbWQtPmQuZGVmcHJpdnMub2JqdHlwZSk7CisJfQorCisJLyogYWRkIHRo ZSB0YXJnZXQgb2JqZWN0IHR5cGUgKi8KKwlhcHBlbmRfc3RyaW5nX29iamVjdChncmFudCwgIk9O ICV7dGFyZ2V0fXMiLCAidGFyZ2V0Iiwgb2JqdHlwZSk7CisKKwkvKiBhZGQgdGhlIGdyYW50ZWUg bGlzdCAqLworCWdyYW50ZWVzID0gTklMOworCWZvcmVhY2goY2VsbCwgc3RtdC0+YWN0aW9uLT5n cmFudGVlcykKKwl7CisJCVJvbGVTcGVjICAgKnNwZWMgPSAoUm9sZVNwZWMgKikgbGZpcnN0KGNl bGwpOworCQlPYmpUcmVlICAgICpvYmogPSBuZXdfb2JqdHJlZV9mb3Jfcm9sZXNwZWMoc3BlYyk7 CisKKwkJZ3JhbnRlZXMgPSBsYXBwZW5kKGdyYW50ZWVzLCBuZXdfb2JqZWN0X29iamVjdChvYmop KTsKKwl9CisKKwlpZiAoc3RtdC0+YWN0aW9uLT5pc19ncmFudCkKKwl7CisJCWFwcGVuZF9hcnJh eV9vYmplY3QoZ3JhbnQsICJUTyAle2dyYW50ZWVzOiwgfVIiLCBncmFudGVlcyk7CisKKwkJLyog YWRkIHRoZSBXSVRIIEdSQU5UIE9QVElPTiBjbGF1c2UgZm9yIEdSQU5UIHN1YmNvbW1hbmQgKi8K KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggR1JBTlQgT1BUSU9OIiwgMSwKKwkJCQkJCQkg InByZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCQkgc3RtdC0+YWN0aW9uLT5ncmFudF9vcHRp b24pOworCQlhcHBlbmRfb2JqZWN0X29iamVjdChncmFudCwgIiV7Z3JhbnRfb3B0aW9ufXMiLCB0 bXApOworCX0KKwllbHNlCisJCWFwcGVuZF9hcnJheV9vYmplY3QoZ3JhbnQsICJGUk9NICV7Z3Jh bnRlZXM6LCB9UiIsIGdyYW50ZWVzKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 Z3JhbnR9cyIsIGdyYW50KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFs bCB0aGUgY29sbGVjdGVkIHN1YmNvbW1hbmRzIGFuZCByZXR1cm4gYW4gT2JqVHJlZSByZXByZXNl bnRpbmcgdGhlCisgKiBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBB TFRFUiByZWx0eXBlICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cworICovCitzdGF0aWMgT2Jq VHJlZSAqCitkZXBhcnNlX0FsdGVyUmVsYXRpb24oQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBvYmo7CisJT2JqVHJlZSAgICAqdG1w b2JqMjsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJUmVsYXRpb24JcmVsOworCUxpc3QJICAgKnN1 YmNtZHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwljb25zdCBjaGFyICpyZWx0eXBlOwor CWJvb2wJCWlzdHlwZSA9IGZhbHNlOworCWJvb2wJCWlzdGFibGUgPSBmYWxzZTsKKwlMaXN0CSAg ICpleHBycyA9IE5JTDsKKwlPaWQJCQlyZWxJZCA9IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElk OworCisJQXNzZXJ0KGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUYWJsZSk7CisKKwlyZWwgPSByZWxh dGlvbl9vcGVuKHJlbElkLCBBY2Nlc3NTaGFyZUxvY2spOworCWRwY29udGV4dCA9IGRlcGFyc2Vf Y29udGV4dF9mb3IoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSwKKwkJCQkJCQkJCXJlbElk KTsKKworCXN3aXRjaCAocmVsLT5yZF9yZWwtPnJlbGtpbmQpCisJeworCQljYXNlIFJFTEtJTkRf UkVMQVRJT046CisJCWNhc2UgUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRToKKwkJCXJlbHR5cGUg PSAiVEFCTEUiOworCQkJaXN0YWJsZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5E X0lOREVYOgorCQljYXNlIFJFTEtJTkRfUEFSVElUSU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0g IklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlIFJFTEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAi VklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVs dHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxL SU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0eXBlID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJl YWs7CisJCWNhc2UgUkVMS0lORF9NQVRWSUVXOgorCQkJcmVsdHlwZSA9ICJNQVRFUklBTElaRUQg VklFVyI7CisJCQlicmVhazsKKworCQkJLyogVE9ETyBzdXBwb3J0IGZvciBwYXJ0aXRpb25lZCB0 YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZWxraW5k ICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCX0KKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5fUQiLCAyLAorCQkJCQkJICJvYmp0eXBlIiwg T2JqVHlwZVN0cmluZywgcmVsdHlwZSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0 LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwtPnJkX3JlbC0+cmVsbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSk7CisKKwlm b3JlYWNoKGNlbGwsIGNtZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0ZWRB VFN1YmNtZCAqc3ViID0gKENvbGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJQWx0 ZXJUYWJsZUNtZCAqc3ViY21kID0gKEFsdGVyVGFibGVDbWQgKikgc3ViLT5wYXJzZXRyZWU7CisJ CU9ialRyZWUgICAgKnRyZWU7CisKKwkJQXNzZXJ0KElzQShzdWJjbWQsIEFsdGVyVGFibGVDbWQp KTsKKworCSAgIC8qCisJCSogU2tpcCBkZXBhcnNlIG9mIHRoZSBzdWJjb21tYW5kIGlmIHRoZSBv YmplY3RJZCBkb2Vzbid0IG1hdGNoIHRoZQorCQkqIHRhcmdldCByZWxhdGlvbiBJRC4gSXQgY2Fu IGhhcHBlbiBmb3IgaW5oZXJpdGVkIHRhYmxlcyB3aGVuCisJCSogc3ViY29tbWFuZHMgZm9yIGlu aGVyaXRlZCB0YWJsZXMgYW5kIHRoZSBwYXJlbnQgdGFibGUgYXJlIGJvdGgKKwkJKiBjb2xsZWN0 ZWQgaW4gdGhlIEFMVEVSIFRBTEJFIGNvbW1hbmQgZm9yIHRoZSBwYXJlbnQgdGFibGUuIFdpdGgg dGhlCisJCSogZXhjZXB0aW9uIG9mIHRoZSBpbnRlcm5hbGx5IGdlbmVyYXRlZCBBZGRDb25zdHJh aW50IChmb3IKKwkJKiBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdOIEtFWSBSRUZF UkVOQ0VTKSB3aGVyZSB0aGUKKwkJKiBvYmplY3RJZHMgY291bGQgbWlzbWF0Y2ggKGZvcmVpbiB0 YWJsZSBpZCBhbmQgdGhlIHJlZmVyZW5jZWQgdGFibGUKKwkJKiBpZCkuCisJCSovCisJCWlmICgo c3ViLT5hZGRyZXNzLm9iamVjdElkICE9IHJlbElkICYmCisJCQkgc3ViLT5hZGRyZXNzLm9iamVj dElkICE9IEludmFsaWRPaWQpICYmCisJCQkhKHN1YmNtZC0+c3VidHlwZSA9PSBBVF9BZGRDb25z dHJhaW50ICYmCisJCQkgIHN1YmNtZC0+cmVjdXJzZSkgJiYKKwkJCWlzdGFibGUpCisJCQljb250 aW51ZTsKKworCQlzd2l0Y2ggKHN1YmNtZC0+c3VidHlwZSkKKwkJeworCQkJY2FzZSBBVF9BZGRD b2x1bW46CisJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVy ZT8gKi8KKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBDb2x1bW5EZWYpKTsKKwkJCQl0cmVl ID0gZGVwYXJzZV9Db2x1bW5EZWYocmVsLCBkcGNvbnRleHQsIGZhbHNlLAorCQkJCQkJCQkJCSAo Q29sdW1uRGVmICopIHN1YmNtZC0+ZGVmLCB0cnVlLCAmZXhwcnMpOworCQkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJBREQgJXtvYmp0eXBlfXMgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJ CQkJCSJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlpc3R5cGUgPyAiQVRUUklC VVRFIiA6ICJDT0xVTU4iLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBj b2x1bW4iLAorCQkJCQkJCQkJCSJkZWZpbml0aW9uIiwgT2JqVHlwZU9iamVjdCwgdHJlZSk7CisJ CQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXhDb25zdHJhaW50OgorCQkJCXsKKwkJ CQkJSW5kZXhTdG10ICAqaXN0bXQ7CisJCQkJCVJlbGF0aW9uCWlkeDsKKwkJCQkJT2lkCQkJY29u c3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCisJCQkJCUFzc2VydChJc0Eoc3ViY21k LT5kZWYsIEluZGV4U3RtdCkpOworCQkJCQlpc3RtdCA9IChJbmRleFN0bXQgKikgc3ViY21kLT5k ZWY7CisKKwkJCQkJQXNzZXJ0KGlzdG10LT5pc2NvbnN0cmFpbnQgJiYgaXN0bXQtPnVuaXF1ZSk7 CisKKwkJCQkJaWR4ID0gcmVsYXRpb25fb3Blbihpc3RtdC0+aW5kZXhPaWQsIEFjY2Vzc1NoYXJl TG9jayk7CisKKwkJCQkJLyoKKwkJCQkJICogVmVyYm9zZSBzeW50YXgKKwkJCQkJICoKKwkJCQkJ ICogQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRF WAorCQkJCQkgKiAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZlcnJlZH1z CisJCQkJCSAqLworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQg JXtuYW1lfUkgJXtjb25zdHJhaW50X3R5cGV9cyBVU0lORyBJTkRFWCAle2luZGV4X25hbWV9SSAl e2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDYsCisJCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IHVzaW5nIGluZGV4IiwKKwkJCQkJCQkJCQkJ Im5hbWUiLCBPYmpUeXBlU3RyaW5nLCBnZXRfY29uc3RyYWludF9uYW1lKGNvbnN0ck9pZCksCisJ CQkJCQkJCQkJCSJjb25zdHJhaW50X3R5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQlp c3RtdC0+ZGVmZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6ICJOT1QgREVGRVJSQUJMRSIsCisJCQkJ CQkJCQkJCSJpbmRleF9uYW1lIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQkJUmVsYXRpb25H ZXRSZWxhdGlvbk5hbWUoaWR4KSwKKwkJCQkJCQkJCQkJImRlZmVycmFibGUiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJCQkJCQlpc3RtdC0+ZGVmZXJyYWJsZSA/ICJERUZFUlJBQkxFIiA6ICJOT1Qg REVGRVJSQUJMRSIsCisJCQkJCQkJCQkJCSJpbml0X2RlZmVycmVkIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQkJaXN0bXQtPmluaXRkZWZlcnJlZCA/ICJJTklUSUFMTFkgREVGRVJSRUQiIDog IklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgs IEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlQWRk SW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRDb21t ZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfQ2hlY2tOb3RO dWxsOgorCQkJY2FzZSBBVF9SZUFkZFN0YXRpc3RpY3M6CisJCQkJLyogU3VidHlwZXMgdXNlZCBm b3IgaW50ZXJuYWwgb3BlcmF0aW9uczsgbm90aGluZyB0byBkbyBoZXJlICovCisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfQ29va2VkQ29sdW1uRGVmYXVsdDoKKwkJCQl7CisJCQkJCVJlbGF0aW9u CWF0dHJyZWw7CisJCQkJCUhlYXBUdXBsZQlhdHR0dXA7CisJCQkJCUZvcm1fcGdfYXR0cmlidXRl IGF0dFN0cnVjdDsKKworCQkJCQlhdHRycmVsID0gdGFibGVfb3BlbihBdHRyaWJ1dGVSZWxhdGlv bklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwkJCQkJYXR0dHVwID0gU2VhcmNoU3lzQ2FjaGVDb3B5 MihBVFROVU0sCisJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlk KHJlbCkpLAorCQkJCQkJCQkJCQkJIEludDE2R2V0RGF0dW0oc3ViY21kLT5udW0pKTsKKwkJCQkJ aWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHR1cCkpCisJCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgYXR0cmlidXRlICVkIG9mIHJlbGF0aW9uIHdpdGggT0lEICV1IiwK KwkJCQkJCQkgc3ViY21kLT5udW0sIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCWF0dFN0 cnVjdCA9IChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKGF0dHR1cCk7CisKKwkJCQkJLyoK KwkJCQkJICogQm90aCBkZWZhdWx0IGFuZCBnZW5lcmF0aW9uIGV4cHJlc3Npb24gbm90IHN1cHBv cnRlZAorCQkJCQkgKiB0b2dldGhlci4KKwkJCQkJICovCisJCQkJCWlmICghYXR0U3RydWN0LT5h dHRnZW5lcmF0ZWQpCisJCQkJCQllbG9nKFdBUk5JTkcsICJ1bnN1cHBvcnRlZCBhbHRlciB0YWJs ZSBzdWJ0eXBlICVkIiwKKwkJCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKworCQkJCQloZWFwX2Zy ZWV0dXBsZShhdHR0dXApOworCQkJCQl0YWJsZV9jbG9zZShhdHRycmVsLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEFUX0FkZENvbHVtblRvVmlldzoK KwkJCQkvKiBDUkVBVEUgT1IgUkVQTEFDRSBWSUVXIC0tIG5vdGhpbmcgdG8gZG8gaGVyZSAqLwor CQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NvbHVtbkRlZmF1bHQ6CisJCQkJaWYgKHN1YmNtZC0+ ZGVmID09IE5VTEwpCisJCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBEUk9QIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lKTsKKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRl eHRfcmVsOworCQkJCQlIZWFwVHVwbGUJYXR0cnR1cDsKKwkJCQkJQXR0ck51bWJlcglhdHRubzsK KworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkg U0VUIERFRkFVTFQiLCAyLAorCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQg ZGVmYXVsdCIsCisJCQkJCQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5h bWUpOworCisJCQkJCWRwY29udGV4dF9yZWwgPSBkZXBhcnNlX2NvbnRleHRfZm9yKFJlbGF0aW9u R2V0UmVsYXRpb25OYW1lKHJlbCksCisJCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVs KSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUp IEdFVFNUUlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtkZWZpbml0aW9ufXMiLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJCQkJIFJlbGF0 aW9uR2V0Q29sdW1uRGVmYXVsdChyZWwsIGF0dG5vLAorCQkJCQkJCQkJCQkJCQkJCSAgZHBjb250 ZXh0X3JlbCwKKwkJCQkJCQkJCQkJCQkJCQkgIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hl KGF0dHJ0dXApOworCQkJCX0KKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BOb3RO dWxsOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSBEUk9QIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJk cm9wIG5vdCBudWxsIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21k LT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Gb3JjZVJvd1NlY3VyaXR5Ogor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkiKTsKKwkJ CQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ob0ZvcmNlUm93U2VjdXJpdHk6CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIk5PIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSIpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJy ZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJCQkJCQkJ InR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIiwKKwkJCQkJCQkJCQkiY29sdW1u IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg Q09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OICV7aWZfZXhpc3RzfXMiLCAzLAorCQkJ CQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZXhwcmVzc2lvbiIsCisJCQkJCQkJ CQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkiaWZf ZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCQlzdWJjbWQtPm1pc3Npbmdfb2sgPyAi SUYgRVhJU1RTIiA6ICIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2Jq ZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRTdGF0aXN0 aWNzOgorCQkJCXsKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW50ZWdlcikpOworCQkJ CQlpZiAoc3ViY21kLT5uYW1lKQorCQkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVS IENPTFVNTiAle2NvbHVtbn1JIFNFVCBTVEFUSVNUSUNTICV7c3RhdGlzdGljc31uIiwgMywKKwkJ CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCBzdGF0aXN0aWNzIiwKKwkJCQkJ CQkJCQkJCSJjb2x1bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkJ CQkic3RhdGlzdGljcyIsIE9ialR5cGVJbnRlZ2VyLAorCQkJCQkJCQkJCQkJaW50VmFsKChJbnRl Z2VyICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJCWVsc2UKKwkJCQkJCXRtcG9iaiA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59biBTRVQgU1RBVElTVElDUyAle3N0YXRpc3Rp Y3N9biIsIDMsCisJCQkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlz dGljcyIsCisJCQkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZUludGVnZXIsIHN1YmNtZC0+bnVt LAorCQkJCQkJCQkJCQkJInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJ CWludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgQVRfU2V0T3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRPcHRpb25zOgorCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KAorCQkJCQkJCQkJ CQkJCQkJIGRlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfU2V0U3RvcmFnZToKKwkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBTdHJp bmcpKTsKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1u fUkgU0VUIFNUT1JBR0UgJXtzdG9yYWdlfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInNldCBzdG9yYWdlIiwKKwkJCQkJCQkJCQkiY29sdW1uIiwgT2JqVHlwZVN0cmlu Zywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJzdG9yYWdlIiwgT2JqVHlwZVN0cmluZywKKwkJ CQkJCQkJCQlzdHJWYWwoKFN0cmluZyAqKSBzdWJjbWQtPmRlZikpOworCQkJCXN1YmNtZHMgPSBs YXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOwor CisJCQljYXNlIEFUX1NldENvbXByZXNzaW9uOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IFN0cmluZykpOworCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtj b2x1bW59SSBTRVQgQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9cyIsIDMsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGNvbXByZXNzaW9uIiwKKwkJCQkJCQkJ CQkiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lLAorCQkJCQkJCQkJCSJjb21w cmVzc2lvbl9tZXRob2QiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCXN0clZhbCgoU3RyaW5n ICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcENvbHVt bjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle29ianR5cGV9cyAle2NvbHVt bn1JIiwgMywKKwkJCQkJCQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJ aXN0eXBlID8gIkFUVFJJQlVURSIgOiAiQ09MVU1OIiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURF IiwgMSwKKwkJCQkJCQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgc3ViY21kLT5iZWhhdmlv cik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjYXNjYWRlfXMiLCB0bXBv YmoyKTsKKworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4OgorCQkJCXsKKwkJ CQkJT2lkCQkJaWR4T2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlJbmRleFN0bXQg ICppc3RtdDsKKwkJCQkJUmVsYXRpb24JaWR4OworCQkJCQljb25zdCBjaGFyICppZHhuYW1lOwor CQkJCQlPaWQJCQljb25zdHJPaWQ7CisKKwkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgSW5k ZXhTdG10KSk7CisJCQkJCWlzdG10ID0gKEluZGV4U3RtdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJ CQlpZiAoIWlzdG10LT5pc2NvbnN0cmFpbnQpCisJCQkJCQlicmVhazsKKworCQkJCQlpZHggPSBy ZWxhdGlvbl9vcGVuKGlkeE9pZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQkJaWR4bmFtZSA9IFJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKGlkeCk7CisKKwkJCQkJY29uc3RyT2lkID0gZ2V0X3JlbGF0 aW9uX2NvbnN0cmFpbnRfb2lkKAorCQkJCQkJCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2Jq ZWN0SWQsIGlkeG5hbWUsIGZhbHNlKTsKKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi QUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJCQkJCQki dHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJCSJuYW1l IiwgT2JqVHlwZVN0cmluZywgaWR4bmFtZSwKKwkJCQkJCQkJCQkJImRlZmluaXRpb24iLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJCQkJCQlwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBs ZShjb25zdHJPaWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisKKwkJCQkJcmVsYXRpb25fY2xvc2UoaWR4LCBBY2Nlc3NTaGFy ZUxvY2spOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9BZGRDb25zdHJhaW50Ogor CQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAicmVjdXJzZSIgYml0IHNvbWV3aGVy ZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJ CQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7CisJCQkJCURhdHVtCQl2YWw7CisJ CQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBD b25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9IGNhc3ROb2RlKENvbnN0cmFpbnQsIHN1YmNtZC0+ ZGVmKTsKKworCQkJCQlpZiAoIWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uKQorCQkJCQl7CisJCQkJ CQl0dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBPYmplY3RJZEdldERhdHVtKGNvbnN0 ck9pZCkpOworCisJCQkJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZCh0dXApKQorCQkJCQkJeworCQkJ CQkJCWNoYXIJICAgKmNvbmJpbjsKKworCQkJCQkJCS8qIEZldGNoIGNvbnN0cmFpbnQgZXhwcmVz c2lvbiBpbiBwYXJzZXRyZWUgZm9ybSAqLworCQkJCQkJCXZhbCA9IFN5c0NhY2hlR2V0QXR0cihD T05TVFJPSUQsIHR1cCwKKwkJCQkJCQkJCQkJCSAgQW51bV9wZ19jb25zdHJhaW50X2NvbmJpbiwg JmlzbnVsbCk7CisKKwkJCQkJCQlpZiAoIWlzbnVsbCkKKwkJCQkJCQl7CisJCQkJCQkJCWNvbmJp biA9IFRleHREYXR1bUdldENTdHJpbmcodmFsKTsKKwkJCQkJCQkJZXhwcnMgPSBsYXBwZW5kKGV4 cHJzLCBzdHJpbmdUb05vZGUoY29uYmluKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUmVsZWFzZVN5 c0NhY2hlKHR1cCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9ufXMiLCAzLAorCQkJCQkJ CQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29uc3RyYWludCIsCisJCQkJCQkJCQkJ CSJuYW1lIiwgT2JqVHlwZVN0cmluZywgZ2V0X2NvbnN0cmFpbnRfbmFtZShjb25zdHJPaWQpLAor CQkJCQkJCQkJCQkiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCXBnX2dl dF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9pZCkpOworCQkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQl9CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgorCQkJCXsKKwkJCQkJT2lk CQkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJCQlDb25zdHJhaW50ICpj ID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyogSWYgbm8gY29uc3RyYWlu dCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlpZiAoIU9pZElzVmFsaWQo Y29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJc0EoYywgQ29uc3RyYWlu dCkpOworCQkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09OU1RSQUlOVCAle25h bWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsIDQsCisJCQkJCQkJCQkJCSJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJCQkJCQkJCQkibmFt ZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJ CQkJCQkJImRlZmVycmFibGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5kZWZlcnJh YmxlID8gIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIiwKKwkJCQkJCQkJCQkJImluaXRf ZGVmZXJyZWQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCQljLT5pbml0ZGVmZXJyZWQgPyAi SU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkgSU1NRURJQVRFIik7CisKKwkJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ fQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludDoKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiVkFMSURBVEUgQ09OU1RSQUlOVCAle2NvbnN0cmFpbnR9SSIs IDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3RyYWlu dCIsCisJCQkJCQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUp OworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9i aikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgorCQkJCXRtcG9i aiA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJ CQkJCQkJImNvbnN0cmFpbnQiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1 YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uVHlwZToKKwkJCQl7CisJCQkJCVR1cGxl RGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCQkJCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZiAgKmRlZjsKKworCQkJCQlhdHQgPSAmKHR1cGRlc2Mt PmF0dHJzW3N1Yi0+YWRkcmVzcy5vYmplY3RTdWJJZCAtIDFdKTsKKwkJCQkJZGVmID0gKENvbHVt bkRlZiAqKSBzdWJjbWQtPmRlZjsKKwkJCQkJQXNzZXJ0KElzQShkZWYsIENvbHVtbkRlZikpOwor CisJCQkJCS8qCisJCQkJCSAqIFZlcmJvc2Ugc3ludGF4CisJCQkJCSAqCisJCQkJCSAqIENvbXBv c2l0ZSB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUKKwkJCQkJ ICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQVRUUklCVVRFICV7Y2FzY2FkZX1zCisJCQkJ CSAqCisJCQkJCSAqIE5vcm1hbCB0eXBlczogQUxURVIgcmVsdHlwZSAle2NvbHVtbn1JIFNFVCBE QVRBIFRZUEUKKwkJCQkJICogJXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgQ09MVU1OICV7dXNp bmd9cworCQkJCQkgKi8KKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2Jq dHlwZX1zICV7Y29sdW1ufUkgU0VUIERBVEEgVFlQRSAle2RhdGF0eXBlfVQiLCA0LAorCQkJCQkJ CQkJCQkib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJCWlzdHlwZSA/ICJBVFRS SUJVVEUiIDogIkNPTFVNTiIsCisJCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFs dGVyIGNvbHVtbiB0eXBlIiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1 YmNtZC0+bmFtZSwKKwkJCQkJCQkJCQkJImRhdGF0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJ CQkgYXR0LT5hdHR0eXBtb2QpKTsKKworCQkJCQkvKiBBZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYg bmVlZGVkICovCisJCQkJCXRtcG9iajIgPSBuZXdfb2JqdHJlZSgiQ09MTEFURSIpOworCQkJCQlp ZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRyZWUg ICAgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xs YXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqMiwgIiV7bmFtZX1EIiwg Y29sbG5hbWUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXBvYmoyKTsKKwkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtjb2xsYXRpb259 cyIsIHRtcG9iajIpOworCisJCQkJCS8qIElmIG5vdCBhIGNvbXBvc2l0ZSB0eXBlLCBhZGQgdGhl IFVTSU5HIGNsYXVzZSAqLworCQkJCQlpZiAoIWlzdHlwZSkKKwkJCQkJeworCQkJCQkJLyoKKwkJ CQkJCSAqIElmIHRoZXJlJ3MgYSBVU0lORyBjbGF1c2UsIHRyYW5zZm9ybUFsdGVyVGFibGVTdG10 CisJCQkJCQkgKiByYW4gaXQgdGhyb3VnaCB0cmFuc2Zvcm1FeHByIGFuZCBzdG9yZWQgdGhlCisJ CQkJCQkgKiByZXN1bHRpbmcgbm9kZSBpbiBjb29rZWRfZGVmYXVsdCwgd2hpY2ggd2UgY2FuIHVz ZQorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVl KCJVU0lORyIpOworCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCisJCQkJCQl7CisJCQkJCQkJ RGF0dW0JCWRlcGFyc2VkOworCQkJCQkJCWNoYXIJICAgKmRlZmV4cHI7CisKKwkJCQkJCQlleHBy cyA9IGxhcHBlbmQoZXhwcnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQkJCQkJCWRlZmV4cHIg PSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJCQkJCQkJZGVwYXJzZWQgPSBE aXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAorCQkJCQkJCQkJCQkJCQkgICBDU3RyaW5n R2V0VGV4dERhdHVtKGRlZmV4cHIpLAorCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGlk KHJlbCkpOworCQkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iajIsICIle2V4cHJlc3Np b259cyIsCisJCQkJCQkJCQkJCQkgImV4cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIFRleHREYXR1 bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wb2JqMik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBv YmosICIle3VzaW5nfXMiLCB0bXBvYmoyKTsKKwkJCQkJfQorCisJCQkJCS8qIElmIGl0J3MgYSBj b21wb3NpdGUgdHlwZSwgYWRkIHRoZSBDQVNDQURFIGNsYXVzZSAqLworCQkJCQlpZiAoaXN0eXBl KQorCQkJCQl7CisJCQkJCQl0bXBvYmoyID0gbmV3X29ianRyZWUoIkNBU0NBREUiKTsKKwkJCQkJ CWlmIChzdWJjbWQtPmJlaGF2aW9yICE9IERST1BfQ0FTQ0FERSkKKwkJCQkJCQlhcHBlbmRfbm90 X3ByZXNlbnQodG1wb2JqMik7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIl e2Nhc2NhZGV9cyIsIHRtcG9iajIpOworCQkJCQl9CisKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQo c3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJfQorCQkJCWJyZWFrOwor CisjaWZkZWYgVE9ET0xJU1QKKwkJCWNhc2UgQVRfQWx0ZXJDb2x1bW5HZW5lcmljT3B0aW9uczoK KwkJCQl0bXBvYmogPSBkZXBhcnNlX0Zkd09wdGlvbnMoKExpc3QgKikgc3ViY21kLT5kZWYsCisJ CQkJCQkJCQkJCXN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywg bmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2Ug QVRfQ2hhbmdlT3duZXI6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk9XTkVSIFRPICV7 b3duZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY2hhbmdlIG93 bmVyIiwKKwkJCQkJCQkJCQkib3duZXIiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJCWdldF9y b2xlc3BlY19uYW1lKHN1YmNtZC0+bmV3b3duZXIpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9DbHVzdGVyT246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkNMVVNURVIgT04g JXtpbmRleH1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjbHVzdGVy IG9uIiwKKwkJCQkJCQkJCQkiaW5kZXgiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikp OworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BDbHVzdGVyOgorCQkJCXRtcG9iaiA9IG5l d19vYmp0cmVlX1ZBKCJTRVQgV0lUSE9VVCBDTFVTVEVSIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIs IE9ialR5cGVTdHJpbmcsICJzZXQgd2l0aG91dCBjbHVzdGVyIik7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfU2V0TG9nZ2VkOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQg TE9HR0VEIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbG9nZ2Vk Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1w b2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0VW5Mb2dnZWQ6CisJCQkJdG1wb2Jq ID0gbmV3X29ianRyZWVfVkEoIlNFVCBVTkxPR0dFRCIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAic2V0IHVubG9nZ2VkIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug QVRfRHJvcE9pZHM6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIE9J RFMiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IG9p ZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNjZXNzTWV0aG9kOgorCQkJCXRt cG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAle2FjY2Vzc19tZXRob2R9 SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGFjY2VzcyBtZXRo b2QiLAorCQkJCQkJCQkJCSJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5u YW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFjZToKKwkJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNlIiwKKwkJCQkJ CQkJCQkidGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVzZXRSZWxP cHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0 KAorCQkJCQkJCQkJCQkJCQkJIGRlcGFyc2VfUmVsU2V0T3B0aW9ucyhzdWJjbWQpKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJl ZV9WQSgiRU5BQkxFIFRSSUdHRVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIiwKKwkJCQkJCQkJCQkidHJpZ2dlciIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RW5hYmxlQWx3YXlzVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIEFM V0FZUyBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVT dHJpbmcsICJlbmFibGUgYWx3YXlzIHRyaWdnZXIiLAorCQkJCQkJCQkJCSJ0cmlnZ2VyIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9F bmFibGVSZXBsaWNhVHJpZzoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJF UExJQ0EgVFJJR0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAiZW5hYmxlIHJlcGxpY2EgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBP YmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Rpc2FibGVUcmlnOgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdH RVIgJXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRp c2FibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkJInRyaWdnZXIiLCBPYmpUeXBlU3RyaW5nLCBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWdBbGw6CisJ CQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIEFMTCIsIDEsCisJCQkJ CQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZW5hYmxlIHRyaWdnZXIgYWxsIik7CisJCQkJ c3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJ CQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRGlzYWJsZVRyaWdBbGw6CisJCQkJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIkRJU0FCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwg T2JqVHlwZVN0cmluZywgImRpc2FibGUgdHJpZ2dlciBhbGwiKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9FbmFibGVUcmlnVXNlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi RU5BQkxFIFRSSUdHRVIgVVNFUiIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZW5hYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rp c2FibGVUcmlnVXNlcjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklH R0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUg dHJpZ2dlciB1c2VyIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUnVsZToK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJVTEUgJXtydWxlfUkiLCAyLAor CQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSBydWxlIiwKKwkJCQkJCQkJ CQkicnVsZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisK KwkJCWNhc2UgQVRfRW5hYmxlQWx3YXlzUnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiRU5BQkxFIEFMV0FZUyBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9i alR5cGVTdHJpbmcsICJlbmFibGUgYWx3YXlzIHJ1bGUiLAorCQkJCQkJCQkJCSJydWxlIiwgT2Jq VHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9F bmFibGVSZXBsaWNhUnVsZToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5BQkxFIFJF UExJQ0EgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiZW5hYmxlIHJlcGxpY2EgcnVsZSIsCisJCQkJCQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmpl Y3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2FibGVSdWxl OgorCQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFJVTEUgJXtydWxlfUkiLCAy LAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRpc2FibGUgcnVsZSIsCisJCQkJ CQkJCQkJInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMg PSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0FkZEluaGVyaXQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEo IklOSEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiaW5oZXJpdCIsCisJCQkJCQkJCQkJInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJ CQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJ CQkJCQkJCQkJCQkJc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfRHJvcEluaGVyaXQ6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5PIElO SEVSSVQgJXtwYXJlbnR9RCIsIDIsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBpbmhlcml0IiwKKwkJCQkJCQkJCQkicGFyZW50IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJ CQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJ CQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9BZGRPZjoKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiT0YgJXt0eXBl X29mfVQiLCAyLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFkZCBvZiIsCisJ CQkJCQkJCQkJInR5cGVfb2YiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVl X2Zvcl90eXBlKHN1Yi0+YWRkcmVzcy5vYmplY3RJZCwgLTEpKTsKKwkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwor CQkJY2FzZSBBVF9Ecm9wT2Y6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIk5PVCBPRiIs IDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAibm90IG9mIik7CisJCQkJc3Vi Y21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgQVRfUmVwbGljYUlkZW50aXR5OgorCQkJCXRtcG9iaiA9IG5ld19v Ymp0cmVlX1ZBKCJSRVBMSUNBIElERU5USVRZIiwgMSwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5 cGVTdHJpbmcsICJyZXBsaWNhIGlkZW50aXR5Iik7CisJCQkJc3dpdGNoICgoKFJlcGxpY2FJZGVu dGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5pZGVudGl0eV90eXBlKQorCQkJCXsKKwkJCQkJY2Fz ZSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQ6CisJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBvYmosICIle2lkZW50fXMiLCAiaWRlbnQiLAorCQkJCQkJCQkJCQkgIkRFRkFVTFQiKTsKKwkJ CQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7aWRlbnR9cyIsICJpZGVudCIsCisJCQkJCQkJCQkJ CSAiRlVMTCIpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgUkVQTElDQV9JREVOVElUWV9OT1RI SU5HOgorCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtpZGVudH1zIiwgImlk ZW50IiwKKwkJCQkJCQkJCQkJICJOT1RISU5HIik7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBS RVBMSUNBX0lERU5USVRZX0lOREVYOgorCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0cmVlX1ZBKCJV U0lORyBJTkRFWCAle2luZGV4fUkiLCAxLAorCQkJCQkJCQkJCQkJICJpbmRleCIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkJCQkgKChSZXBsaWNhSWRlbnRpdHlTdG10ICopIHN1YmNtZC0+ZGVm KS0+bmFtZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle2lkZW50fXMi LCB0bXBvYmoyKTsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKworCQkJY2Fz ZSBBVF9FbmFibGVSb3dTZWN1cml0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRU5B QkxFIFJPVyBMRVZFTCBTRUNVUklUWSIsIDEsCisJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiZW5hYmxlIHJvdyBzZWN1cml0eSIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFU X0Rpc2FibGVSb3dTZWN1cml0eToKKwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJM RSBST1cgTEVWRUwgU0VDVVJJVFkiLCAxLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRpc2FibGUgcm93IHNlY3VyaXR5Iik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisjaWZkZWYgVE9ET0xJ U1QKKwkJCWNhc2UgQVRfR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wb2JqID0gZGVwYXJzZV9GZHdP cHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLCBOVUxMKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVu ZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKyNlbmRp ZgorCQkJY2FzZSBBVF9BdHRhY2hQYXJ0aXRpb246CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFUVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsIDIsCisJCQkJCQkJ CQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYXR0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkJ InBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkJ c3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisKKwkJCQlpZiAocmVsLT5yZF9yZWwtPnJlbGtpbmQg PT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJCQkJICJwYXJ0aXRpb25fYm91 bmQiLAorCQkJCQkJCQkJCSBSZWxhdGlvbkdldFBhcnRpdGlvbkJvdW5kKHN1Yi0+YWRkcmVzcy5v YmplY3RJZCkpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFjaFBhcnRpdGlvbjoK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlv bl9pZGVudGl0eX1EIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCQkJImRldGFjaCBwYXJ0aXRpb24iLAorCQkJCQkJCQkJCSJwYXJ0aXRpb25faWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChS ZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJCXN1Yi0+YWRkcmVzcy5vYmplY3RJ ZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cG9iaikpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZToK KwkJCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiREVUQUNIIFBBUlRJVElPTiAle3BhcnRpdGlv bl9pZGVudGl0eX1EIEZJTkFMSVpFIiwgMiwKKwkJCQkJCQkJCQkidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkZXRhY2ggcGFydGl0aW9uIGZpbmFsaXplIiwKKwkJCQkJCQkJCQkicGFydGl0aW9uX2lk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJCQlzdWItPmFkZHJlc3Mu b2JqZWN0SWQpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfQWRkSWRlbnRpdHk6CisJCQkJ eworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCQkJCQlP YmpUcmVlICAgICpzZXFkZWY7CisJCQkJCUNvbHVtbkRlZiAgKmNvbGRlZiA9IChDb2x1bW5EZWYg Kikgc3ViY21kLT5kZWY7CisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENP TFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi YWRkIGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNt ZC0+bmFtZSk7CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJl bCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2Uo UmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJCQkJCWlmIChPaWRJc1Zh bGlkKHNlcV9yZWxpZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRl bnRpdHkoc2VxX3JlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisJCQkJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXBvYmosICJBREQgJXtpZGVudGl0eV9jb2x1bW59cyIsIHNlcWRlZik7 CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXBvYmopKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX1NldElkZW50aXR5 OgorCQkJCXsKKwkJCQkJRGVmRWxlbSAgICAqZGVmZWw7CisJCQkJCWNoYXIJCWlkZW50aXR5ID0g MDsKKwkJCQkJT2JqVHJlZSAgICAqc2VxZGVmOworCQkJCQlBdHRyTnVtYmVyCWF0dG51bTsKKwkJ CQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkFM VEVSIENPTFVNTiAle2NvbHVtbn1JIiwgMiwKKwkJCQkJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAic2V0IGlkZW50aXR5IiwKKwkJCQkJCQkJCQkJImNvbHVtbiIsIE9ialR5cGVTdHJpbmcs IHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJaWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlM aXN0CSAgICpkZWYgPSAoTGlzdCAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShz dWJjbWQtPmRlZiwgTGlzdCkpOworCisJCQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxl bSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisK KwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+ bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRS ZWxpZChyZWwpLCBhdHRudW0sIHRydWUpOworCisJCQkJCWlmIChPaWRJc1ZhbGlkKHNlcV9yZWxp ZCkpCisJCQkJCXsKKwkJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3Jl bGlkLCBpZGVudGl0eSwgdHJ1ZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmos ICIle2RlZmluaXRpb259cyIsIHNlcWRlZik7CisJCQkJCX0KKworCQkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJY2FzZSBBVF9Ecm9wSWRlbnRpdHk6CisJCQkJdG1wb2JqID0gbmV3X29ianRyZWVf VkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgSURFTlRJVFkiLCAyLAorCQkJCQkJCQkJ CSJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaWRlbnRpdHkiLAorCQkJCQkJCQkJCSJjb2x1 bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCisJCQkJYXBwZW5kX3N0cmluZ19v YmplY3QodG1wb2JqLCAiJXtpZl9leGlzdHN9cyIsCisJCQkJCQkJCQkgImlmX2V4aXN0cyIsCisJ CQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7CisKKwkJCQlz dWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJ CQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZWxvZyhXQVJOSU5HLCAidW5zdXBwb3J0ZWQgYWx0 ZXIgdGFibGUgc3VidHlwZSAlZCIsCisJCQkJCSBzdWJjbWQtPnN1YnR5cGUpOworCQkJCWJyZWFr OworCQl9CisKKwkJLyoKKwkJICogV2UgZG9uJ3Qgc3VwcG9ydCByZXBsaWNhdGluZyBBTFRFUiBU QUJMRSB3aGljaCBjb250YWlucyB2b2xhdGlsZQorCQkgKiBmdW5jdGlvbnMgYmVjYXVzZSBJdCdz IHBvc3NpYmxlIHRoZSBmdW5jdGlvbnMgY29udGFpbiBEREwvRE1MIGluCisJCSAqIHdoaWNoIGNh c2UgdGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQorCQkg KiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUg dGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxpc2hl ZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2FuIGFs bG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMKKwkJICogYWNjZXNzZWQgaW4g dGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci4KKwkJ ICovCisJCWlmIChjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSBleHBycykpCisJ CQllbG9nKEVSUk9SLCAiQUxURVIgVEFCTEUgY29tbWFuZCB1c2luZyB2b2xhdGlsZSBmdW5jdGlv biBjYW5ub3QgYmUgcmVwbGljYXRlZCIpOworCisJCS8qCisJCSAqIENsZWFuIHRoZSBsaXN0IGFz IHdlIGFscmVhZHkgY29uZmlybWVkIHRoZXJlIGlzIG5vIHZvbGF0aWxlCisJCSAqIGZ1bmN0aW9u LgorCQkgKi8KKwkJbGlzdF9mcmVlKGV4cHJzKTsKKwkJZXhwcnMgPSBOSUw7CisJfQorCisJdGFi bGVfY2xvc2UocmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCisJaWYgKGxpc3RfbGVuZ3RoKHN1YmNt ZHMpID09IDApCisJCXJldHVybiBOVUxMOworCisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICIl e3N1YmNtZHM6LCB9cyIsIHN1YmNtZHMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERl cGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSByZWd1bGFyIChub24tdHlwZWQpIHRhYmxl IGNyZWF0aW9uLgorICoKKyAqIE5PVCBOVUxMIGNvbnN0cmFpbnRzIGluIHRoZSBjb2x1bW4gZGVm aW5pdGlvbiBhcmUgZW1pdHRlZCBkaXJlY3RseSBpbiB0aGUKKyAqIGNvbHVtbiBkZWZpbml0aW9u IGJ5IHRoaXMgcm91dGluZTsgb3RoZXIgY29uc3RyYWludHMgbXVzdCBiZSBlbWl0dGVkCisgKiBl bHNld2hlcmUgKHRoZSBpbmZvIGluIHRoZSBwYXJzZSBub2RlIGlzIGluY29tcGxldGUgYW55d2F5 KS4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtuYW1lfUkgJXtjb2x0eXBlfVQgJXtjb21w cmVzc2lvbn1zICV7ZGVmYXVsdH1zICV7bm90X251bGx9cyAle2NvbGxhdGlvbn1zCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uRGVmKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0 ICpkcGNvbnRleHQsIGJvb2wgY29tcG9zaXRlLAorCQkJCSAgQ29sdW1uRGVmICpjb2xkZWYsIGJv b2wgaXNfYWx0ZXIsIExpc3QgKipleHBycykKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqdG1wb2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7 CisJSGVhcFR1cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lk CQkJdHlwaWQ7CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJ c2F3X25vdG51bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qCisJICogSW5oZXJpdGVkIGNv bHVtbnMgd2l0aG91dCBsb2NhbCBkZWZpbml0aW9ucyBtdXN0IG5vdCBiZSBlbWl0dGVkLgorCSAq CisJICogWFhYIG1heWJlIGl0IGlzIHVzZWZ1bCB0byBoYXZlIHRoZW0gd2l0aCAicHJlc2VudCA9 IGZhbHNlIiBvciBzb21lCisJICogc3VjaD8KKwkgKi8KKwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwp CisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxp ZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJ CWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNc IiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZv cm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0 eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAm dHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle25hbWV9 SSAle2NvbHR5cGV9VCIsIDMsCisJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiY29sdW1u IiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFtZSwKKwkJCQkJ CSAiY29sdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUo dHlwaWQsIHR5cG1vZCkpOworCisJaWYgKCFjb21wb3NpdGUpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIlNUT1JBR0UgJXtjb2xzdG9yYWdlfXMiLCAiY29sc3RvcmFnZSIsCisJCQkJCQkJ IGdldF90eXBlX3N0b3JhZ2UoYXR0ckZvcm0tPmF0dHN0b3JhZ2UpKTsKKworCS8qIFVTSU5HIGNs YXVzZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT01QUkVTU0lPTiIpOworCWlmIChjb2xk ZWYtPmNvbXByZXNzaW9uKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2NvbXBy ZXNzaW9uX21ldGhvZH1JIiwKKwkJCQkJCQkgImNvbXByZXNzaW9uX21ldGhvZCIsIGNvbGRlZi0+ Y29tcHJlc3Npb24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIl e2NvbXByZXNzaW9uX21ldGhvZH1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOwor CX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbXByZXNzaW9ufXMiLCB0bXBvYmop OworCisJdG1wb2JqID0gbmV3X29ianRyZWUoIkNPTExBVEUiKTsKKwlpZiAoT2lkSXNWYWxpZCh0 eXBjb2xsYXRpb24pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle25hbWV9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChDb2xsYXRpb25SZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgdHlwY29sbGF0aW9uKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3By ZXNlbnQodG1wb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2NvbGxhdGlvbn1z IiwgdG1wb2JqKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJT2lkCQkJc2VxcmVsaWQgPSBJ bnZhbGlkT2lkOworCisJCS8qCisJCSAqIEVtaXQgYSBOT1QgTlVMTCBkZWNsYXJhdGlvbiBpZiBu ZWNlc3NhcnkuICBOb3RlIHRoYXQgd2UgY2Fubm90CisJCSAqIHRydXN0IHBnX2F0dHJpYnV0ZS5h dHRub3RudWxsIGhlcmUsIGJlY2F1c2UgdGhhdCBiaXQgaXMgYWxzbyBzZXQKKwkJICogd2hlbiBw cmltYXJ5IGtleXMgYXJlIHNwZWNpZmllZDsgd2UgbXVzdCBub3QgZW1pdCBhIE5PVCBOVUxMCisJ CSAqIGNvbnN0cmFpbnQgaW4gdGhhdCBjYXNlLCB1bmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQu ICBUaGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgYXR0YWNo ZWQgdG8gdGhpcyBjb2x1bW4gdG8KKwkJICogZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBl bWl0IGFueXRoaW5nLiAoRm9ydHVuYXRlbHksIE5PVCBOVUxMCisJCSAqIGNvbnN0cmFpbnRzIGNh bm5vdCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJCSAqIEluIHRoZSBBTFRFUiBUQUJM RSBjYXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0aGUgY29sRGVmIGlzCisJCSAqIG1h cmtlZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3RudWxsID0gZmFsc2U7CisJCWZvcmVh Y2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJeworCQkJQ29uc3RyYWludCAqY29uc3Ry ID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAoY29uc3RyLT5jb250eXBl ID09IENPTlNUUl9OT1ROVUxMKQorCQkJeworCQkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCQli cmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpc19hbHRlciAmJiBjb2xkZWYtPmlzX25vdF9udWxs KQorCQkJc2F3X25vdG51bGwgPSB0cnVlOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwg IiV7bm90X251bGx9cyIsICJub3RfbnVsbCIsCisJCQkJCQkJIHNhd19ub3RudWxsID8gIk5PVCBO VUxMIiA6ICIiKTsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIpOworCQlpZiAo YXR0ckZvcm0tPmF0dGhhc2RlZiAmJgorCQkJY29sZGVmLT5nZW5lcmF0ZWQgIT0gQVRUUklCVVRF X0dFTkVSQVRFRF9TVE9SRUQpCisJCXsKKwkJCWNoYXIJICAgKmRlZnN0cjsKKworCQkJZGVmc3Ry ID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9uLCBhdHRyRm9ybS0+YXR0bnVtLAor CQkJCQkJCQkJCQkgIGRwY29udGV4dCwgZXhwcnMpOworCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dCh0bXBvYmosICIle2RlZmF1bHR9cyIsICJkZWZhdWx0IiwgZGVmc3RyKTsKKwkJfQorCQllbHNl CisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3Qo cmV0LCAiJXtkZWZhdWx0fXMiLCB0bXBvYmopOworCisJCS8qIElERU5USVRZIENPTFVNTiAqLwor CQlpZiAoY29sZGVmLT5pZGVudGl0eSkKKwkJeworCQkJT2lkCQkJYXR0bm8gPSBnZXRfYXR0bnVt KHJlbGlkLCBjb2xkZWYtPmNvbG5hbWUpOworCisJCQlzZXFyZWxpZCA9IGdldElkZW50aXR5U2Vx dWVuY2UocmVsaWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQlpZiAoT2lkSXNWYWxpZChzZXFy ZWxpZCkpCisJCXsKKwkJCXRtcG9iaiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxcmVsaWQs IGNvbGRlZi0+aWRlbnRpdHksIGlzX2FsdGVyKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7aWRlbnRpdHlfY29sdW1ufXMiLCB0bXBvYmopOworCQl9CisKKwkJLyogR0VORVJBVEVE IENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJHRU5FUkFURUQg QUxXQVlTIEFTIik7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJB VEVEX1NUT1JFRCkKKwkJeworCQkJY2hhcgkgICAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxh dGlvbkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJ CQkJCSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmos ICIle2dlbmVyYXRpb25fZXhwcn1zIFNUT1JFRCIsCisJCQkJCQkJCSAiZ2VuZXJhdGlvbl9leHBy IiwgZGVmc3RyKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsK KworCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2dlbmVyYXRlZF9jb2x1bW59cyIsIHRt cG9iaik7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYSBDb2x1bW5EZWYgbm9kZSB3aXRoaW4gYSB0eXBlZCB0YWJs ZSBjcmVhdGlvbi4JVGhpcyBpcyBzaW1wbGVyCisgKiB0aGFuIHRoZSByZWd1bGFyIGNhc2UsIGJl Y2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0byBlbWl0IHRoZSB0eXBlIGRlY2xhcmF0aW9uLAorICogY29s bGF0aW9uLCBvciBkZWZhdWx0LiAgSGVyZSB3ZSBvbmx5IHJldHVybiBzb21ldGhpbmcgaWYgdGhl IGNvbHVtbiBpcyBiZWluZworICogZGVjbGFyZWQgTk9UIE5VTEwuCisgKgorICogQXMgaW4gZGVw YXJzZV9Db2x1bW5EZWYsIGFueSBvdGhlciBjb25zdHJhaW50IGlzIHByb2Nlc3NlZCBlbHNld2hl cmUuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqICV7bmFtZX1JIFdJVEggT1BUSU9OUyAle2Rl ZmF1bHR9cyAle25vdF9udWxsfXMuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29s dW1uRGVmX3R5cGVkKFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICpkcGNvbnRleHQsIENvbHVtbkRl ZiAqY29sZGVmKQoreworCU9ialRyZWUgICAgKnJldCA9IE5VTEw7CisJT2JqVHJlZSAgICAqdG1w b2JqOworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWxhdGlvbik7CisJSGVhcFR1 cGxlCWF0dHJUdXA7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0ckZvcm07CisJT2lkCQkJdHlwaWQ7 CisJaW50MzIJCXR5cG1vZDsKKwlPaWQJCQl0eXBjb2xsYXRpb247CisJYm9vbAkJc2F3X25vdG51 bGw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCWF0dHJUdXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5h bWUocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0dHJU dXApKQorCQllbG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgY2FjaGUgZW50cnkgZm9yIGNvbHVt biBcIiVzXCIgb2YgcmVsYXRpb24gJXUiLAorCQkJIGNvbGRlZi0+Y29sbmFtZSwgcmVsaWQpOwor CWF0dHJGb3JtID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoYXR0clR1cCk7CisKKwln ZXRfYXR0dHlwZXR5cG1vZGNvbGwocmVsaWQsIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkgICZ0 eXBpZCwgJnR5cG1vZCwgJnR5cGNvbGxhdGlvbik7CisKKwkvKgorCSAqIFNlYXJjaCBmb3IgYSBO T1QgTlVMTCBkZWNsYXJhdGlvbi4gIEFzIGluIGRlcGFyc2VfQ29sdW1uRGVmLCB3ZSByZWx5IG9u CisJICogZmluZGluZyBhIGNvbnN0cmFpbnQgb24gdGhlIGNvbHVtbiByYXRoZXIgdGhhbiBjb2xk ZWYtPmlzX25vdF9udWxsLgorCSAqIChUaGlzIHJvdXRpbmUgaXMgbmV2ZXIgdXNlZCBmb3IgQUxU RVIgY2FzZXMuKQorCSAqLworCXNhd19ub3RudWxsID0gZmFsc2U7CisJZm9yZWFjaChjZWxsLCBj b2xkZWYtPmNvbnN0cmFpbnRzKQorCXsKKwkJQ29uc3RyYWludCAqY29uc3RyID0gKENvbnN0cmFp bnQgKikgbGZpcnN0KGNlbGwpOworCisJCWlmIChjb25zdHItPmNvbnR5cGUgPT0gQ09OU1RSX05P VE5VTEwpCisJCXsKKwkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQor CisJaWYgKCFzYXdfbm90bnVsbCAmJiAhYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCVJlbGVh c2VTeXNDYWNoZShhdHRyVHVwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdG1wb2JqID0gbmV3 X29ianRyZWUoIkRFRkFVTFQiKTsKKwlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwl7CisJCWNo YXIJICAgKmRlZnN0cjsKKworCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQocmVs YXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJICBkcGNvbnRleHQsIE5VTEwpOwor CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgIiV7ZGVmYXVsdH1zIiwgImRlZmF1bHQi LCBkZWZzdHIpOworCX0KKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIiV7bmFtZX1JIFdJVEggT1BUSU9OUyAle25vdF9udWxsfXMg JXtkZWZhdWx0fXMiLCA0LAorCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIs CisJCQkJCQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBjb2xkZWYtPmNvbG5hbWUsCisJCQkJCQkg Im5vdF9udWxsIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzYXdfbm90bnVsbCA/ICJOT1QgTlVM TCIgOiAiIiwKKwkJCQkJCSAiZGVmYXVsdCIsIE9ialR5cGVPYmplY3QsIHRtcG9iaik7CisKKwkv KiBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0eXBlZCB0YWJsZXMsIHNv IHdlIGFyZSBkb25lICovCisKKwlSZWxlYXNlU3lzQ2FjaGUoYXR0clR1cCk7CisKKwlyZXR1cm4g cmV0OworfQorCisvKgorICogRGVwYXJzZSB0aGUgZGVmaW5pdGlvbiBvZiBjb2x1bW4gaWRlbnRp dHkuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBHRU5FUkFURUQgJXtvcHRpb259cyAl e2lkZW50aXR5X3R5cGV9cyAle3NlcV9kZWZpbml0aW9uOiB9cworICogCU9SCisgKiBHRU5FUkFU RUQgJXtvcHRpb259cyBBUyBJREVOVElUWSAle2lkZW50aXR5X3R5cGV9cyAoICV7c2VxX2RlZmlu aXRpb246IH1zICkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5JZGVudGl0 eShPaWQgc2VxcmVsaWQsIGNoYXIgaWRlbnRpdHksIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2Jq VHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKmlkZW50b2JqOworCUxpc3QJICAgKmVsZW1zID0g TklMOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJRm9ybV9wZ19zZXF1 ZW5jZSBzZXFmb3JtOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCWNoYXIJICAg KmlkZW50Zm10OworCWNoYXIJICAgKm9iamZtdDsKKworCWlmIChhbHRlcl90YWJsZSkKKwl7CisJ CWlkZW50Zm10ID0gIlNFVCBHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7b3B0aW9ufXMiOwor CX0KKwllbHNlCisJeworCQlpZGVudGZtdCA9ICJHRU5FUkFURUQgIjsKKwkJb2JqZm10ID0gIiV7 b3B0aW9ufXMgQVMgSURFTlRJVFkiOworCX0KKworCWlkZW50b2JqID0gbmV3X29ianRyZWUoaWRl bnRmbXQpOworCisJaWYgKGlkZW50aXR5ID09IEFUVFJJQlVURV9JREVOVElUWV9BTFdBWVMpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQsICJvcHRpb24iLCAiQUxXQVlT Iik7CisJZWxzZSBpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lERU5USVRZX0JZX0RFRkFVTFQp CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGlkZW50b2JqLCBvYmpmbXQsICJvcHRpb24iLCAiQlkg REVGQVVMVCIpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KGlkZW50b2JqKTsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKCIle2lkZW50aXR5X3R5cGV9cyIsIDEsCisJCQkJCQkgImlkZW50 aXR5X3R5cGUiLCBPYmpUeXBlT2JqZWN0LCBpZGVudG9iaik7CisKKwlyZWwgPSB0YWJsZV9vcGVu KFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJc2VxdHVwbGUgPSBTZWFy Y2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELCBzZXFyZWxpZCk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHNlcXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNl cXVlbmNlIHdpdGggT0lEICV1IiwKKwkJCSBzZXFyZWxpZCk7CisKKwlzZXFmb3JtID0gKEZvcm1f cGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXF0dXBsZSk7CisJc2VxZGF0YSA9IGdldF9zZXF1ZW5j ZV92YWx1ZXMoc2VxcmVsaWQpOworCisJLyogRGVmaW5pdGlvbiBlbGVtZW50cyAqLworCWVsZW1z ID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfQ2FjaGUoc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0N5Y2xlKHNlcWZvcm0sIGFs dGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNyZW1l bnRCeShzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVw YXJzZV9TZXFfTWludmFsdWUoc2VxZm9ybSwgYWx0ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBl bmQoZWxlbXMsIGRlcGFyc2VfU2VxX01heHZhbHVlKHNlcWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFydHdpdGgoc2VxZm9ybSwgYWx0 ZXJfdGFibGUpKTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX1Jlc3RhcnQo c2VxZGF0YSkpOworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBPV05FRCBCWSBoZXJl ICovCisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtz ZXFfZGVmaW5pdGlvbjogfXMiLCBlbGVtcyk7CisJZWxzZQorCQlhcHBlbmRfYXJyYXlfb2JqZWN0 KHJldCwgIiggJXtzZXFfZGVmaW5pdGlvbjogfXMgKSIsIGVsZW1zKTsKKworCXRhYmxlX2Nsb3Nl KHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogLi4u IEFMVEVSIENPTFVNTiAuLi4gU0VUL1JFU0VUICguLi4pCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIEFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFJFU0VUfFNFVCAoJXtvcHRpb25zOiwgfXMpCisg Ki8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29sdW1uU2V0T3B0aW9ucyhBbHRlclRhYmxl Q21kICpzdWJjbWQpCit7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxs OworCU9ialRyZWUgICAgKnJldDsKKwlib29sCQlpc19yZXNldCA9IHN1YmNtZC0+c3VidHlwZSA9 PSBBVF9SZXNldE9wdGlvbnM7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1O ICV7Y29sdW1ufUkgJXtvcHRpb259cyIsIDIsCisJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCSAib3B0aW9uIiwgT2JqVHlwZVN0cmluZywgaXNfcmVz ZXQgPyAiUkVTRVQiIDogIlNFVCIpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQt PmRlZikKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUgICAgKnNldDsKKworCQll bGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0o ZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVj dChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQs ICIoJXtvcHRpb25zOiwgfXMpIiwgc2V0cyk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICog RGVwYXJzZSB0aGUgQ1JFQVRFIERPTUFJTgorICoKKyAqIEdpdmVuIGEgZnVuY3Rpb24gT0lEIGFu ZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiBy ZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAl e2NvbnN0cmFpbnRzfXMKKyAqICV7Y29sbGF0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9DcmVhdGVEb21haW4oT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJ T2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcG9iajsKKwlIZWFwVHVwbGUJdHlwVHVw OworCUZvcm1fcGdfdHlwZSB0eXBGb3JtOworCUxpc3QJICAgKmNvbnN0cmFpbnRzOworCWNoYXIJ ICAgKmRlZnZhbDsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBvYmplY3RJ ZCk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBkb21haW4gd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJdHlw Rm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0eXBUdXApOworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBET01BSU4gJXtpZGVudGl0eX1EIEFTICV7dHlwZX1UICV7bm90X251 bGx9cyIsIDMsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVHlwZVJlbGF0aW9uSWQsIG9iamVjdElkKSwKKwkJCQkJ CSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUodHlw Rm9ybS0+dHlwYmFzZXR5cGUsCisJCQkJCQkJCQkJCSAgdHlwRm9ybS0+dHlwdHlwbW9kKSwKKwkJ CQkJCSAibm90X251bGwiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIHR5cEZvcm0tPnR5cG5vdG51 bGwgPyAiTk9UIE5VTEwiIDogIiIpOworCisJY29uc3RyYWludHMgPSBvYnRhaW5Db25zdHJhaW50 cyhOSUwsIEludmFsaWRPaWQsIG9iamVjdElkKTsKKwlpZiAoY29uc3RyYWludHMgPT0gTklMKQor CXsKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIiIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1w b2JqKTsKKwl9CisJZWxzZQorCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiJXtlbGVtZW50czos IH1zIiwgMSwKKwkJCQkJCQkJImVsZW1lbnRzIiwgT2JqVHlwZUFycmF5LCBjb25zdHJhaW50cyk7 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjb25zdHJhaW50c31zIiwgdG1wb2JqKTsK KworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJDT0xMQVRFIik7CisJaWYgKE9pZElzVmFsaWQodHlw Rm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgICAgKmNvbGxuYW1lOworCisJCWNv bGxuYW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCSAgIHR5cEZvcm0tPnR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHRtcG9iaiwgIiV7bmFtZX1EIiwgY29sbG5hbWUpOworCX0KKwllbHNlCisJCWFwcGVu ZF9ub3RfcHJlc2VudCh0bXBvYmopOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y29s bGF0aW9ufXMiLCB0bXBvYmopOworCisJZGVmdmFsID0gRG9tYWluR2V0RGVmYXVsdCh0eXBUdXAs IHRydWUpOworCWlmIChkZWZ2YWwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIkRFRkFV TFQgJXtkZWZhdWx0fXMiLCAiZGVmYXVsdCIsIGRlZnZhbCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHlwVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlRnVu Y3Rpb25TdG10IChDUkVBVEUgRlVOQ1RJT04pCisgKgorICogR2l2ZW4gYSBmdW5jdGlvbiBPSUQg YW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICoKKyAqIENSRUFURSAle29yX3JlcGxhY2V9cyBGVU5DVElPTiAle3NpZ25hdHVyZX1zIFJF VFVSTlMgJXtyZXR1cm5fdHlwZX1zCisgKiBMQU5HVUFHRSAle3RyYW5zZm9ybV90eXBlfXMgJXts YW5ndWFnZX1JICV7d2luZG93fXMgJXt2b2xhdGlsaXR5fXMKKyAqICV7cGFyYWxsZWxfc2FmZXR5 fXMgJXtsZWFrcHJvb2Z9cyAle3N0cmljdH1zICV7c2VjdXJpdHlfZGVmaW5lcn1zCisgKiAle2Nv c3R9cyAle3Jvd3N9cyAle3N1cHBvcnR9cyAle3NldF9vcHRpb25zOiB9cyBBUyAle29iamZpbGV9 TCwKKyAqICV7c3ltYm9sfUwKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVG dW5jdGlvbihPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGdW5jdGlv blN0bXQgKm5vZGUgPSAoQ3JlYXRlRnVuY3Rpb25TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVl ICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wb2JqOworCURhdHVtCQl0bXBkYXR1bTsKKwljaGFy CSAgICpzb3VyY2U7CisJY2hhcgkgICAqcHJvYmluID0gTlVMTDsKKwlMaXN0CSAgICpwYXJhbXM7 CisJTGlzdAkgICAqZGVmYXVsdHM7CisJTGlzdAkgICAqc2V0cyA9IE5JTDsKKwlMaXN0CSAgICp0 eXBlcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCUxpc3RDZWxsICAgKmN1cmRlZjsKKwlM aXN0Q2VsbCAgICp0YWJsZV9wYXJhbXMgPSBOVUxMOworCUhlYXBUdXBsZQlwcm9jVHVwOworCUZv cm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlIZWFwVHVwbGUJbGFuZ1R1cDsKKwlPaWQJCSAgICp0eXBh cnJheTsKKwlPaWQJCSAgICp0cmZ0eXBlczsKKwlGb3JtX3BnX2xhbmd1YWdlIGxhbmdGb3JtOwor CWludAkJCWk7CisJaW50CQkJdHlwbnVtOworCWludAkJCW50eXBlczsKKwlpbnQJCQlwYXJhbWNv dW50ID0gbGlzdF9sZW5ndGgobm9kZS0+cGFyYW1ldGVycyk7CisJYm9vbAkJaXNudWxsOworCWJv b2wJCWlzZnVuY3Rpb247CisKKwkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgKi8KKwlwcm9jVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQocHJvY1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBm dW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXByb2NGb3JtID0gKEZvcm1f cGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOworCisJLyogR2V0IHRoZSBjb3JyZXNwb25kaW5n IHBnX2xhbmd1YWdlIHR1cGxlICovCisJbGFuZ1R1cCA9IFNlYXJjaFN5c0NhY2hlMShMQU5HT0lE LCBwcm9jRm9ybS0+cHJvbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdUdXApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ugd2l0aCBPSUQg JXUiLAorCQkJIHByb2NGb3JtLT5wcm9sYW5nKTsKKwlsYW5nRm9ybSA9IChGb3JtX3BnX2xhbmd1 YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwkvKgorCSAqIERldGVybWluZSB1c2VmdWwgdmFs dWVzIGZvciBwcm9zcmMgYW5kIHByb2Jpbi4gIFdlIGNvcGUgd2l0aCBwcm9iaW4KKwkgKiBiZWlu ZyBlaXRoZXIgTlVMTCBvciAiLSIsIGJ1dCBwcm9zcmMgbXVzdCBoYXZlIGEgdmFsaWQgdmFsdWUu CisJICovCisJdG1wZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJ CQkJCQkgICBBbnVtX3BnX3Byb2NfcHJvc3JjLCAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQll bG9nKEVSUk9SLCAibnVsbCBwcm9zcmMgaW4gZnVuY3Rpb24gd2l0aCBPSUQgJXUiLCBvYmplY3RJ ZCk7CisJc291cmNlID0gVGV4dERhdHVtR2V0Q1N0cmluZyh0bXBkYXR1bSk7CisKKwkvKiBEZXRl cm1pbmUgYSB1c2VmdWwgdmFsdWUgZm9yIHByb2JpbiAqLworCXRtcGRhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKFBST0NPSUQsIHByb2NUdXAsCisJCQkJCQkJICAgQW51bV9wZ19wcm9jX3Byb2Jpbiwg JmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlwcm9iaW4gPSBUZXh0RGF0dW1HZXRDU3Ry aW5nKHRtcGRhdHVtKTsKKwkJaWYgKHByb2JpblswXSA9PSAnXDAnIHx8IHN0cmNtcChwcm9iaW4s ICItIikgPT0gMCkKKwkJCXByb2JpbiA9IE5VTEw7CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSAle29yX3JlcGxhY2V9cyIsIDEsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpU eXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIik7CisK KwkvKgorCSAqIFRvIGNvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGFycmF5LCBleHRyYWN0IHRoZSB0 eXBlIE9JRHMgZnJvbSB0aGUKKwkgKiBmdW5jdGlvbidzIHBnX3Byb2MgZW50cnkuICBJZiBwcm9u YXJncyBlcXVhbHMgdGhlIHBhcmFtZXRlciBsaXN0CisJICogbGVuZ3RoLCB0aGVyZSBhcmUgbm8g T1VUIHBhcmFtZXRlcnMgYW5kIHRodXMgd2UgY2FuIGV4dHJhY3QgdGhlIHR5cGUKKwkgKiBPSUQg ZnJvbSBwcm9hcmd0eXBlczsgb3RoZXJ3aXNlIHdlIG5lZWQgdG8gZGVjb2RlIHByb2FsbGFyZ3R5 cGVzLCB3aGljaAorCSAqIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQuCisJICovCisJdHlwYXJyYXkg PSBwYWxsb2MocGFyYW1jb3VudCAqIHNpemVvZihPaWQpKTsKKwlpZiAocGFyYW1jb3VudCA+IHBy b2NGb3JtLT5wcm9uYXJncykKKwl7CisJCURhdHVtCQlhbGx0eXBlczsKKwkJRGF0dW0JICAgKnZh bHVlczsKKwkJYm9vbAkgICAqbnVsbHM7CisJCWludAkJCW5lbGVtczsKKworCQlhbGx0eXBlcyA9 IFN5c0NhY2hlR2V0QXR0cihQUk9DT0lELCBwcm9jVHVwLAorCQkJCQkJCQkgICBBbnVtX3BnX3By b2NfcHJvYWxsYXJndHlwZXMsICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxvZyhFUlJP UiwgIm51bGwgcHJvYWxsYXJndHlwZXMsIG1vcmUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhbiBh cmdzIGluIGZ1bmN0aW9uIHdpdGggT0lEICV1IiwKKwkJCQkgb2JqZWN0SWQpOworCQlkZWNvbnN0 cnVjdF9hcnJheShEYXR1bUdldEFycmF5VHlwZVAoYWxsdHlwZXMpLAorCQkJCQkJICBPSURPSUQs IDQsICd0JywgJ2knLAorCQkJCQkJICAmdmFsdWVzLCAmbnVsbHMsICZuZWxlbXMpOworCQlpZiAo bmVsZW1zICE9IHBhcmFtY291bnQpCisJCQllbG9nKEVSUk9SLCAibWlzbWF0Y2hlZCBwcm9hbGxh cmdhdHlwZXMiKTsKKwkJZm9yIChpID0gMDsgaSA8IHBhcmFtY291bnQ7IGkrKykKKwkJCXR5cGFy cmF5W2ldID0gdmFsdWVzW2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGkgPSAwOyBpIDwgcGFy YW1jb3VudDsgaSsrKQorCQkJdHlwYXJyYXlbaV0gPSBwcm9jRm9ybS0+cHJvYXJndHlwZXMudmFs dWVzW2ldOworCX0KKworCS8qCisJICogSWYgdGhlcmUgYXJlIGFueSBkZWZhdWx0IGV4cHJlc3Np b25zLCB3ZSByZWFkIHRoZSBkZXBhcnNlZCBleHByZXNzaW9uCisJICogYXMgYSBsaXN0IHNvIHRo YXQgd2UgY2FuIGF0dGFjaCB0aGVtIHRvIGVhY2ggYXJndW1lbnQuCisJICovCisJdG1wZGF0dW0g PSBTeXNDYWNoZUdldEF0dHIoUFJPQ09JRCwgcHJvY1R1cCwKKwkJCQkJCQkgICBBbnVtX3BnX3By b2NfcHJvYXJnZGVmYXVsdHMsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJZGVmYXVs dHMgPSBGdW5jdGlvbkdldERlZmF1bHRzKERhdHVtR2V0VGV4dFAodG1wZGF0dW0pKTsKKwkJY3Vy ZGVmID0gbGlzdF9oZWFkKGRlZmF1bHRzKTsKKwl9CisJZWxzZQorCXsKKwkJZGVmYXVsdHMgPSBO SUw7CisJCWN1cmRlZiA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBOb3cgaXRlcmF0ZSBvdmVyIGVh Y2ggcGFyYW1ldGVyIGluIHRoZSBwYXJzZSB0cmVlIHRvIGNyZWF0ZSB0aGUKKwkgKiBwYXJhbWV0 ZXJzIGFycmF5LgorCSAqLworCXBhcmFtcyA9IE5JTDsKKwl0eXBudW0gPSAwOworCWZvcmVhY2go Y2VsbCwgbm9kZS0+cGFyYW1ldGVycykKKwl7CisJCUZ1bmN0aW9uUGFyYW1ldGVyICpwYXJhbSA9 IChGdW5jdGlvblBhcmFtZXRlciAqKSBsZmlyc3QoY2VsbCk7CisJCU9ialRyZWUgICAgKnBhcmFt b2JqOworCQlPYmpUcmVlICAgICpkZWZhdWx0dmFsOworCQlPYmpUcmVlICAgICpuYW1lOworCisJ CS8qCisJCSAqIEEgUEFSQU1fVEFCTEUgcGFyYW1ldGVyIGluZGljYXRlcyB0aGUgZW5kIG9mIGlu cHV0IGFyZ3VtZW50czsgdGhlCisJCSAqIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBwYXJ0IG9m IHRoZSByZXR1cm4gdHlwZS4gIFdlIGlnbm9yZSB0aGVtCisJCSAqIGhlcmUsIGJ1dCBrZWVwIHRy YWNrIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBsaXN0IHNvIHRoYXQgd2UKKwkJICog Y2FuIGVhc2lseSBwcm9kdWNlIHRoZSByZXR1cm4gdHlwZSBiZWxvdy4KKwkJICovCisJCWlmIChw YXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX1RBQkxFKQorCQl7CisJCQl0YWJsZV9wYXJhbXMgPSBj ZWxsOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBWZXJib3NlIHN5bnRheCBmb3IgcGFy YW1hdGVyOiAle21vZGV9cyAle25hbWV9cyAle3R5cGV9VAorCQkgKiAle2RlZmF1bHR9cworCQkg Ki8KKwkJcGFyYW1vYmogPSBuZXdfb2JqdHJlZV9WQSgiJXttb2RlfXMiLCAxLAorCQkJCQkJCQkg ICJtb2RlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BB UkFNX09VVCA/ICJPVVQiIDoKKwkJCQkJCQkJICBwYXJhbS0+bW9kZSA9PSBGVU5DX1BBUkFNX0lO T1VUID8gIklOT1VUIiA6CisJCQkJCQkJCSAgcGFyYW0tPm1vZGUgPT0gRlVOQ19QQVJBTV9WQVJJ QURJQyA/ICJWQVJJQURJQyIgOgorCQkJCQkJCQkgICJJTiIpOworCisJCS8qIE9wdGlvbmFsIHdo b2xlc2FsZSBzdXBwcmVzc2lvbiBvZiAibmFtZSIgb2NjdXJzIGhlcmUgKi8KKwkJbmFtZSA9IG5l d19vYmp0cmVlKCIiKTsKKwkJaWYgKHBhcmFtLT5uYW1lKQorCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QobmFtZSwgIiV7bmFtZX1JIiwgIm5hbWUiLCBwYXJhbS0+bmFtZSk7CisJCWVsc2UKKwkJewor CQkJYXBwZW5kX251bGxfb2JqZWN0KG5hbWUsICIle25hbWV9SSIpOworCQkJYXBwZW5kX25vdF9w cmVzZW50KG5hbWUpOworCQl9CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocGFyYW1vYmosICIl e25hbWV9cyIsIG5hbWUpOworCisJCWRlZmF1bHR2YWwgPSBuZXdfb2JqdHJlZSgiREVGQVVMVCIp OworCQlpZiAoUG9pbnRlcklzVmFsaWQocGFyYW0tPmRlZmV4cHIpKQorCQl7CisJCQljaGFyCSAg ICpleHByOworCisJCQlpZiAoY3VyZGVmID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInByb2Fy Z2RlZmF1bHRzIGxpc3QgdG9vIHNob3J0Iik7CisJCQlleHByID0gbGZpcnN0KGN1cmRlZik7CisK KwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGRlZmF1bHR2YWwsICIle3ZhbHVlfXMiLCAidmFsdWUi LCBleHByKTsKKwkJCWN1cmRlZiA9IGxuZXh0KGRlZmF1bHRzLCBjdXJkZWYpOworCQl9CisJCWVs c2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudChkZWZhdWx0dmFsKTsKKworCQlhcHBlbmRfb2JqZWN0 X29iamVjdChwYXJhbW9iaiwgIiV7dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5 cGUodHlwYXJyYXlbdHlwbnVtKytdLCAtMSkpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHBh cmFtb2JqLCAiJXtkZWZhdWx0fXMiLCBkZWZhdWx0dmFsKTsKKworCQlwYXJhbXMgPSBsYXBwZW5k KHBhcmFtcywgbmV3X29iamVjdF9vYmplY3QocGFyYW1vYmopKTsKKwl9CisKKwl0bXBvYmogPSBu ZXdfb2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJCQkiaWRlbnRpdHkiLCBPYmpU eXBlT2JqZWN0LAorCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQlvYmplY3RJZCkpOworCisJYXBwZW5kX2Zvcm1hdF9z dHJpbmcodG1wb2JqLCAiKCIpOworCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiJXthcmd1 bWVudHM6LCB9cyIsIHBhcmFtcyk7CisJYXBwZW5kX2Zvcm1hdF9zdHJpbmcodG1wb2JqLCAiKSIp OworCisJaXNmdW5jdGlvbiA9IChwcm9jRm9ybS0+cHJva2luZCAhPSBQUk9LSU5EX1BST0NFRFVS RSk7CisKKwlpZiAoaXNmdW5jdGlvbikKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiRlVO Q1RJT04gJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisJZWxzZQorCQlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICJQUk9DRURVUkUgJXtzaWduYXR1cmV9cyIsIHRtcG9iaik7CisKKwkvKgorCSAq IEEgcmV0dXJuIHR5cGUgY2FuIGFkb3B0IG9uZSBvZiB0d28gZm9ybXM6IGVpdGhlciBhIFtTRVRP Rl0gc29tZV90eXBlLAorCSAqIG9yIGEgVEFCTEUobGlzdC1vZi10eXBlcykuICBXZSBjYW4gdGVs bCB0aGUgc2Vjb25kIGZvcm0gYmVjYXVzZSB3ZSBzYXcKKwkgKiBhIHRhYmxlIHBhcmFtIGFib3Zl IHdoaWxlIHNjYW5uaW5nIHRoZSBhcmd1bWVudCBsaXN0LgorCSAqLworCWlmICh0YWJsZV9wYXJh bXMgPT0gTlVMTCkKKwl7CisJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJ CQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAicGxhaW4iKTsKKwkJYXBwZW5kX3N0cmlu Z19vYmplY3QodG1wb2JqLCAiJXtzZXRvZn1zIiwgInNldG9mIiwKKwkJCQkJCQkgcHJvY0Zvcm0t PnByb3JldHNldCA/ICJTRVRPRiIgOiAiIik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9i aiwgIiV7cmV0dHlwZX1UIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUocHJvY0Zvcm0t PnByb3JldHR5cGUsIC0xKSk7CisJfQorCWVsc2UKKwl7CisJCUxpc3QJICAgKnJldHR5cGVzID0g TklMOworCQlPYmpUcmVlICAgICpwYXJhbW9iajsKKworCQl0bXBvYmogPSBuZXdfb2JqdHJlZV9W QSgiVEFCTEUiLCAxLAorCQkJCQkJCQkicmV0dXJuX2Zvcm0iLCBPYmpUeXBlU3RyaW5nLCAidGFi bGUiKTsKKwkJZm9yICg7IHRhYmxlX3BhcmFtcyAhPSBOVUxMOyB0YWJsZV9wYXJhbXMgPSBsbmV4 dChub2RlLT5wYXJhbWV0ZXJzLCB0YWJsZV9wYXJhbXMpKQorCQl7CisJCQlGdW5jdGlvblBhcmFt ZXRlciAqcGFyYW0gPSBsZmlyc3QodGFibGVfcGFyYW1zKTsKKworCQkJcGFyYW1vYmogPSBuZXdf b2JqdHJlZV9WQSgiJXtuYW1lfUkgJXt0eXBlfVQiLCAyLAorCQkJCQkJCQkJICAibmFtZSIsIE9i alR5cGVTdHJpbmcsIHBhcmFtLT5uYW1lLAorCQkJCQkJCQkJICAidHlwZSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGFycmF5W3R5cG51bSsrXSwg LTEpKTsKKwkJCXJldHR5cGVzID0gbGFwcGVuZChyZXR0eXBlcywgbmV3X29iamVjdF9vYmplY3Qo cGFyYW1vYmopKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1wb2JqLCAiKCV7cmV0 dHlwZXM6LCB9cykiLCByZXR0eXBlcyk7CisJfQorCisJaWYgKGlzZnVuY3Rpb24pCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIlJFVFVSTlMgJXtyZXR1cm5fdHlwZX1zIiwgdG1wb2JqKTsK KworCS8qIFRSQU5TRk9STSBGT1IgVFlQRSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJUUkFO U0ZPUk0iKTsKKworCW50eXBlcyA9IGdldF9mdW5jX3RyZnR5cGVzKHByb2NUdXAsICZ0cmZ0eXBl cyk7CisJZm9yIChpID0gMDsgaSA8IG50eXBlczsgaSsrKQorCXsKKwkJdG1wb2JqID0gbmV3X29i anRyZWVfVkEoIkZPUiBUWVBFICV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJInR5cGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfdHlwZSh0cmZ0eXBlc1tpXSwgLTEpKTsK KwkJdHlwZXMgPSBsYXBwZW5kKHR5cGVzLCB0bXBvYmopOworCX0KKworCWlmICh0eXBlcykKKwkJ YXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2Zvcl90eXBlOiwgfXMiLCB0eXBlcyk7CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKworCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiV7dHJhbnNmb3JtX3R5cGV9cyIsIHRtcG9iaik7CisKKwlhcHBlbmRfc3RyaW5n X29iamVjdChyZXQsICJMQU5HVUFHRSAle2xhbmd1YWdlfUkiLCAibGFuZ3VhZ2UiLAorCQkJCQkJ IE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5hbWUpKTsKKworCWlmIChpc2Z1bmN0aW9uKQorCXsKKwkJ YXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXt3aW5kb3d9cyIsICJ3aW5kb3ciLAorCQkJCQkJ CSBwcm9jRm9ybS0+cHJva2luZCA9PSBQUk9LSU5EX1dJTkRPVyA/ICJXSU5ET1ciIDogIiIpOwor CQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3ZvbGF0aWxpdHl9cyIsICJ2b2xhdGlsaXR5 IiwKKwkJCQkJCQkgcHJvY0Zvcm0tPnByb3ZvbGF0aWxlID09IFBST1ZPTEFUSUxFX1ZPTEFUSUxF ID8KKwkJCQkJCQkgIlZPTEFUSUxFIiA6CisJCQkJCQkJIHByb2NGb3JtLT5wcm92b2xhdGlsZSA9 PSBQUk9WT0xBVElMRV9TVEFCTEUgPworCQkJCQkJCSAiU1RBQkxFIiA6ICJJTU1VVEFCTEUiKTsK KworCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICIle3BhcmFsbGVsX3NhZmV0eX1zIiwKKwkJ CQkJCQkgInBhcmFsbGVsX3NhZmV0eSIsCisJCQkJCQkJIHByb2NGb3JtLT5wcm9wYXJhbGxlbCA9 PSBQUk9QQVJBTExFTF9TQUZFID8KKwkJCQkJCQkgIlBBUkFMTEVMIFNBRkUiIDoKKwkJCQkJCQkg cHJvY0Zvcm0tPnByb3BhcmFsbGVsID09IFBST1BBUkFMTEVMX1JFU1RSSUNURUQgPworCQkJCQkJ CSAiUEFSQUxMRUwgUkVTVFJJQ1RFRCIgOiAiUEFSQUxMRUwgVU5TQUZFIik7CisKKwkJYXBwZW5k X3N0cmluZ19vYmplY3QocmV0LCAiJXtsZWFrcHJvb2Z9cyIsICJsZWFrcHJvb2YiLAorCQkJCQkJ CSBwcm9jRm9ybS0+cHJvbGVha3Byb29mID8gIkxFQUtQUk9PRiIgOiAiIik7CisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIiV7c3RyaWN0fXMiLCAic3RyaWN0IiwKKwkJCQkJCQkgcHJvY0Zv cm0tPnByb2lzc3RyaWN0ID8KKwkJCQkJCQkgIlJFVFVSTlMgTlVMTCBPTiBOVUxMIElOUFVUIiA6 CisJCQkJCQkJICJDQUxMRUQgT04gTlVMTCBJTlBVVCIpOworCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHJldCwgIiV7c2VjdXJpdHlfZGVmaW5lcn1zIiwKKwkJCQkJCQkgInNlY3VyaXR5X2RlZmlu ZXIiLAorCQkJCQkJCSBwcm9jRm9ybS0+cHJvc2VjZGVmID8KKwkJCQkJCQkgIlNFQ1VSSVRZIERF RklORVIiIDogIlNFQ1VSSVRZIElOVk9LRVIiKTsKKworCQlhcHBlbmRfb2JqZWN0X29iamVjdChy ZXQsICIle2Nvc3R9cyIsCisJCQkJCQkJIG5ld19vYmp0cmVlX1ZBKCJDT1NUICV7Y29zdH1uIiwg MSwKKwkJCQkJCQkJCQkJImNvc3QiLCBPYmpUeXBlRmxvYXQsCisJCQkJCQkJCQkJCXByb2NGb3Jt LT5wcm9jb3N0KSk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWUoIlJPV1MiKTsKKwkJaWYgKHBy b2NGb3JtLT5wcm9yb3dzID09IDApCisJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKwkJ ZWxzZQorCQkJYXBwZW5kX2Zsb2F0X29iamVjdCh0bXBvYmosICIle3Jvd3N9biIsIHByb2NGb3Jt LT5wcm9yb3dzKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtyb3dzfXMiLCB0bXBv YmopOworCisJCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJTVVBQT1JUICV7bmFtZX1zIik7CisJCWlm IChwcm9jRm9ybS0+cHJvc3VwcG9ydCkKKwkJeworCQkJT2lkCQkJYXJndHlwZXNbXSA9IHsgSU5U RVJOQUxPSUQgfTsKKworCQkJLyoKKwkJCSAqIFdlIHNob3VsZCBxdWFsaWZ5IHRoZSBzdXBwb3J0 IGZ1bmN0aW9uJ3MgbmFtZSBpZiBpdCB3b3VsZG4ndCBiZQorCQkJICogcmVzb2x2ZWQgYnkgbG9v a3VwIGluIHRoZSBjdXJyZW50IHNlYXJjaCBwYXRoLgorCQkJICovCisJCQlhcHBlbmRfc3RyaW5n X29iamVjdCh0bXBvYmosICIle25hbWV9cyIsICJuYW1lIiwKKwkJCQkJCQkJIGdlbmVyYXRlX2Z1 bmN0aW9uX25hbWUocHJvY0Zvcm0tPnByb3N1cHBvcnQsIDEsCisJCQkJCQkJCQkJCQkJCU5JTCwg YXJndHlwZXMsCisJCQkJCQkJCQkJCQkJCWZhbHNlLCBOVUxMLAorCQkJCQkJCQkJCQkJCQlFWFBS X0tJTkRfTk9ORSkpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmop OworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7c3VwcG9ydH1zIiwgdG1wb2JqKTsK Kwl9CisKKwlmb3JlYWNoKGNlbGwsIG5vZGUtPm9wdGlvbnMpCisJeworCQlEZWZFbGVtICAgICpk ZWZlbCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQlpZiAoc3RyY21wKGRlZmVsLT5k ZWZuYW1lLCAic2V0IikgPT0gMCkKKwkJeworCQkJVmFyaWFibGVTZXRTdG10ICpzc3RtdCA9IChW YXJpYWJsZVNldFN0bXQgKikgZGVmZWwtPmFyZzsKKwkJCWNoYXIJICAgKnZhbHVlID0gRXh0cmFj dFNldFZhcmlhYmxlQXJncyhzc3RtdCk7CisKKwkJCXRtcG9iaiA9IGRlcGFyc2VfRnVuY3Rpb25T ZXQoc3N0bXQtPmtpbmQsIHNzdG10LT5uYW1lLCB2YWx1ZSk7CisJCQlzZXRzID0gbGFwcGVuZChz ZXRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwkJfQorCX0KKwlhcHBlbmRfYXJyYXlf b2JqZWN0KHJldCwgIiV7c2V0X29wdGlvbnM6IH1zIiwgc2V0cyk7CisKKwkvKiBBZGQgdGhlIGZ1 bmN0aW9uIGRlZmluaXRpb24gKi8KKwkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBST0NPSUQsIHBy b2NUdXAsIEFudW1fcGdfcHJvY19wcm9zcWxib2R5LCAmaXNudWxsKTsKKwlpZiAocHJvY0Zvcm0t PnByb2xhbmcgPT0gU1FMbGFuZ3VhZ2VJZCAmJiAhaXNudWxsKQorCXsKKwkJU3RyaW5nSW5mb0Rh dGEgYnVmOworCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwcmludF9mdW5jdGlvbl9zcWxi b2R5KCZidWYsIHByb2NUdXApOworCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7ZGVm aW5pdGlvbn1zIiwgImRlZmluaXRpb24iLAorCQkJCQkJCSBidWYuZGF0YSk7CisJfQorCWVsc2Ug aWYgKHByb2JpbiA9PSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChyZXQsICJBUyAle2Rl ZmluaXRpb259TCIsICJkZWZpbml0aW9uIiwgc291cmNlKTsKKwllbHNlCisJeworCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICJBUyAle29iamZpbGV9TCIsICJvYmpmaWxlIiwgcHJvYmluKTsK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiLCAle3N5bWJvbH1MIiwgInN5bWJvbCIsIHNv dXJjZSk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKGxhbmdUdXApOworCVJlbGVhc2VTeXNDYWNo ZShwcm9jVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ1JFQVRF IE9QRVJBVE9SIENMQVNTIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSBPUEVSQVRPUiBDTEFTUyAle2lkZW50aXR5fUQgJXtkZWZhdWx0fXMgRk9SIFRZUEUgJXt0eXBl fVQgVVNJTkcKKyAqICV7YW1uYW1lfUkgJXtvcGZhbWlseX1zIEFTICV7aXRlbXM6LCB9cworICov CitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KENvbGxlY3RlZENv bW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvcGNvaWQgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3Mu b2JqZWN0SWQ7CisJSGVhcFR1cGxlCW9wY1R1cDsKKwlIZWFwVHVwbGUJb3BmVHVwOworCUZvcm1f cGdfb3BmYW1pbHkgb3BmRm9ybTsKKwlGb3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwlPYmpUcmVl ICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wb2JqOworCUxpc3QJICAgKmxpc3Q7CisJTGlzdENl bGwgICAqY2VsbDsKKworCS8qIERvbid0IGRlcGFyc2UgU1FMIGNvbW1hbmRzIGdlbmVyYXRlZCB3 aGlsZSBjcmVhdGluZyBleHRlbnNpb24gKi8KKwlpZiAoY21kLT5pbl9leHRlbnNpb24pCisJCXJl dHVybiBOVUxMOworCisJb3BjVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENMQU9JRCwgT2JqZWN0SWRH ZXREYXR1bShvcGNvaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJZWxv ZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLCBv cGNvaWQpOworCW9wY0Zvcm0gPSAoRm9ybV9wZ19vcGNsYXNzKSBHRVRTVFJVQ1Qob3BjVHVwKTsK KworCW9wZlR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEZBTUlMWU9JRCwgb3BjRm9ybS0+b3BjZmFt aWx5KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BmVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNh Y2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wZXJhdG9yIGZhbWlseSB3aXRoIE9JRCAldSIsIG9wY0Zv cm0tPm9wY2ZhbWlseSk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29wZmFtaWx5KSBHRVRTVFJVQ1Qo b3BmVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgT1BFUkFUT1IgQ0xBU1Mg JXtpZGVudGl0eX1EICV7ZGVmYXVsdH1zIEZPUiBUWVBFICV7dHlwZX1UIFVTSU5HICV7YW1uYW1l fUkiLCA0LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lKG9wY0Zvcm0tPm9wY25hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAg TmFtZVN0cihvcGNGb3JtLT5vcGNuYW1lKSksCisJCQkJCQkgImRlZmF1bHQiLCBPYmpUeXBlU3Ry aW5nLAorCQkJCQkJIG9wY0Zvcm0tPm9wY2RlZmF1bHQgPyAiREVGQVVMVCIgOiAiIiwKKwkJCQkJ CSAidHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUob3Bj Rm9ybS0+b3BjaW50eXBlLCAtMSksCisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVTdHJpbmcsIGdl dF9hbV9uYW1lKG9wY0Zvcm0tPm9wY21ldGhvZCkpOworCisJLyoKKwkgKiBBZGQgdGhlIEZBTUlM WSBjbGF1c2UsIGJ1dCBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhbmQgbmFtZXNwYWNlIGFzIHRo ZQorCSAqIG9wY2xhc3MsIHRoZW4gaGF2ZSBpdCBleHBhbmQgdG8gZW1wdHkgYmVjYXVzZSBpdCB3 b3VsZCBjYXVzZSBhIGZhaWx1cmUKKwkgKiBpZiB0aGUgb3BmYW1pbHkgd2FzIGNyZWF0ZWQgaW50 ZXJuYWxseS4KKwkgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiRkFNSUxZICV7b3BmYW1p bHl9RCIsIDEsCisJCQkJCQkJIm9wZmFtaWx5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQluZXdf b2JqdHJlZV9mb3JfcXVhbG5hbWUob3BmRm9ybS0+b3BmbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJ CSBOYW1lU3RyKG9wZkZvcm0tPm9wZm5hbWUpKSk7CisKKwlpZiAoc3RyY21wKE5hbWVTdHIob3Bm Rm9ybS0+b3BmbmFtZSksIE5hbWVTdHIob3BjRm9ybS0+b3BjbmFtZSkpID09IDAgJiYKKwkJb3Bm Rm9ybS0+b3BmbmFtZXNwYWNlID09IG9wY0Zvcm0tPm9wY25hbWVzcGFjZSkKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcG9iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle29wZmFt aWx5fXMiLCB0bXBvYmopOworCisJLyoKKwkgKiBBZGQgdGhlIGluaXRpYWwgaXRlbSBsaXN0LiAg Tm90ZSB3ZSBhbHdheXMgYWRkIHRoZSBTVE9SQUdFIGNsYXVzZSwgZXZlbgorCSAqIHdoZW4gaXQg aXMgaW1wbGljaXQgaW4gdGhlIG9yaWdpbmFsIGNvbW1hbmQuCisJICovCisJdG1wb2JqID0gbmV3 X29ianRyZWUoIlNUT1JBR0UiKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5 cGV9VCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkSXNWYWxpZChvcGNGb3JtLT5v cGNrZXl0eXBlKSA/CisJCQkJCQkJCQkJCSAgb3BjRm9ybS0+b3Bja2V5dHlwZSA6IG9wY0Zvcm0t Pm9wY2ludHlwZSwKKwkJCQkJCQkJCQkJICAtMSkpOworCWxpc3QgPSBsaXN0X21ha2UxKG5ld19v YmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJLyogQWRkIHRoZSBkZWNsYXJlZCBvcGVyYXRvcnMg Ki8KKwlmb3JlYWNoKGNlbGwsIGNtZC0+ZC5jcmVhdGVvcGMub3BlcmF0b3JzKQorCXsKKwkJT3BG YW1pbHlNZW1iZXIgKm9wZXIgPSBsZmlyc3QoY2VsbCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRy ZWVfVkEoIk9QRVJBVE9SICV7bnVtfW4gJXtvcGVyYXRvcn1PKCV7bHR5cGV9VCwgJXtydHlwZX1U KSIsIDQsCisJCQkJCQkJCSJudW0iLCBPYmpUeXBlSW50ZWdlciwgb3Blci0+bnVtYmVyLAorCQkJ CQkJCQkib3BlcmF0b3IiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQluZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJb3Blci0+b2Jq ZWN0KSwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRy ZWVfZm9yX3R5cGUob3Blci0+bGVmdHR5cGUsIC0xKSwKKwkJCQkJCQkJInJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUob3Blci0+cmlnaHR0eXBlLCAt MSkpOworCisJCS8qIEFkZCB0aGUgRk9SIFNFQVJDSCAvIEZPUiBPUkRFUiBCWSBjbGF1c2UgKi8K KwkJaWYgKG9wZXItPnNvcnRmYW1pbHkgPT0gSW52YWxpZE9pZCkKKwkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcG9iaiwgIiV7cHVycG9zZX1zIiwgInB1cnBvc2UiLAorCQkJCQkJCQkgIkZPUiBT RUFSQ0giKTsKKwkJZWxzZQorCQl7CisJCQlPYmpUcmVlICAgICp0bXBvYmoyOworCisJCQl0bXBv YmoyID0gbmV3X29ianRyZWUoIkZPUiBPUkRFUiBCWSAle29wZmFtaWx5fUQiKTsKKwkJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHRtcG9iajIsICJvcGZhbWlseSIsCisJCQkJCQkJCSBuZXdfb2JqdHJl ZV9mb3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JGYW1pbHlSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJ CQkJIG9wZXItPnNvcnRmYW1pbHkpKTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwg IiV7cHVycG9zZX1zIiwgdG1wb2JqMik7CisJCX0KKworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBu ZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlY2xhcmVkIHN1 cHBvcnQgZnVuY3Rpb25zICovCisJZm9yZWFjaChjZWxsLCBjbWQtPmQuY3JlYXRlb3BjLnByb2Nl ZHVyZXMpCisJeworCQlPcEZhbWlseU1lbWJlciAqcHJvYyA9IGxmaXJzdChjZWxsKTsKKwkJSGVh cFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwkJT2lkCQkgICAqcHJv YXJndHlwZXM7CisJCUxpc3QJICAgKmFyZ2xpc3QgPSBOSUw7CisJCWludAkJCWk7CisKKwkJcHJv Y1R1cCA9IFNlYXJjaFN5c0NhY2hlMShQUk9DT0lELCBPYmplY3RJZEdldERhdHVtKHByb2MtPm9i amVjdCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9S LCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lEICV1IiwKKwkJCQkg cHJvYy0+b2JqZWN0KTsKKwkJcHJvY0Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJv Y1R1cCk7CisKKwkJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkZVTkNUSU9OICV7bnVtfW4gKCV7 bHR5cGV9VCwgJXtydHlwZX1UKSAle2Z1bmN0aW9ufUQiLCA0LAorCQkJCQkJCQkibnVtIiwgT2Jq VHlwZUludGVnZXIsIHByb2MtPm51bWJlciwKKwkJCQkJCQkJImx0eXBlIiwgT2JqVHlwZU9iamVj dCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5cGUocHJvYy0+bGVmdHR5cGUsIC0xKSwKKwkJ CQkJCQkJInJ0eXBlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJbmV3X29ianRyZWVfZm9yX3R5 cGUocHJvYy0+cmlnaHR0eXBlLCAtMSksCisJCQkJCQkJCSJmdW5jdGlvbiIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCW5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNw YWNlLAorCQkJCQkJCQkJCQkJCQkgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKworCQlw cm9hcmd0eXBlcyA9IHByb2NGb3JtLT5wcm9hcmd0eXBlcy52YWx1ZXM7CisJCWZvciAoaSA9IDA7 IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJeworCQkJT2JqVHJlZSAgICAqYXJnOwor CisJCQlhcmcgPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9hcmd0eXBlc1tpXSwgLTEpOworCQkJ YXJnbGlzdCA9IGxhcHBlbmQoYXJnbGlzdCwgbmV3X29iamVjdF9vYmplY3QoYXJnKSk7CisJCX0K KworCQlhcHBlbmRfZm9ybWF0X3N0cmluZyh0bXBvYmosICIoIik7CisJCWFwcGVuZF9hcnJheV9v YmplY3QodG1wb2JqLCAiJXthcmd0eXBlczosIH1UIiwgYXJnbGlzdCk7CisJCWFwcGVuZF9mb3Jt YXRfc3RyaW5nKHRtcG9iaiwgIikiKTsKKworCQlSZWxlYXNlU3lzQ2FjaGUocHJvY1R1cCk7CisK KwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisJfQor CisJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJBUyAle2l0ZW1zOiwgfXMiLCBsaXN0KTsKKwor CVJlbGVhc2VTeXNDYWNoZShvcGZUdXApOworCVJlbGVhc2VTeXNDYWNoZShvcGNUdXApOworCisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVPcEZhbWlseVN0bXQgKENS RUFURSBPUEVSQVRPUiBGQU1JTFkpCisgKgorICogR2l2ZW4gYSBvcGVyYXRvciBmYW1pbHkgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbgorICogT2JqVHJl ZSByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIENSRUFURSBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1uYW1l fUkKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVPcEZhbWlseShPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlIZWFwVHVwbGUJb3BmVHVwOworCUhlYXBUdXBs ZQlhbVR1cDsKKwlGb3JtX3BnX29wZmFtaWx5IG9wZkZvcm07CisJRm9ybV9wZ19hbQlhbUZvcm07 CisJT2JqVHJlZSAgICAqcmV0OworCisJb3BmVHVwID0gU2VhcmNoU3lzQ2FjaGUxKE9QRkFNSUxZ T0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KG9wZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRv ciBmYW1pbHkgd2l0aCBPSUQgJXUiLCBvYmplY3RJZCk7CisJb3BmRm9ybSA9IChGb3JtX3BnX29w ZmFtaWx5KSBHRVRTVFJVQ1Qob3BmVHVwKTsKKworCWFtVHVwID0gU2VhcmNoU3lzQ2FjaGUxKEFN T0lELCBPYmplY3RJZEdldERhdHVtKG9wZkZvcm0tPm9wZm1ldGhvZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZChhbVR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciBhY2Nlc3MgbWV0aG9kIHdpdGggT0lEICV1IiwKKwkJCSBvcGZGb3JtLT5vcGZtZXRob2QpOwor CWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1UdXApOworCisJcmV0ID0gbmV3X29i anRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiBGQU1JTFkgJXtpZGVudGl0eX1EIFVTSU5HICV7YW1u YW1lfUkiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJ CSAgTmFtZVN0cihvcGZGb3JtLT5vcGZuYW1lKSksCisJCQkJCQkgImFtbmFtZSIsIE9ialR5cGVT dHJpbmcsIE5hbWVTdHIoYW1Gb3JtLT5hbW5hbWUpKTsKKworCVJlbGVhc2VTeXNDYWNoZShhbVR1 cCk7CisJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgor ICogRGVwYXJzZSBhIENyZWF0ZVBvbGljeVN0bXQgKENSRUFURSBQT0xJQ1kpCisgKgorICogR2l2 ZW4gYSBwb2xpY3kgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgor ICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBQT0xJQ1kgJXtpZGVudGl0eX1JCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5v ZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVQb2xpY3lTdG10ICpub2RlID0gKENyZWF0ZVBvbGlj eVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJDUkVBVEUgUE9MSUNZICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+cG9saWN5X25hbWUpOworCisJLyogQWRkIHRoZSByZXN0 IG9mIHRoZSBzdHVmZiAqLworCWFkZF9wb2xpY3lfY2xhdXNlcyhyZXQsIG9iamVjdElkLCBub2Rl LT5yb2xlcywgbm9kZS0+cXVhbCAhPSBOVUxMLAorCQkJCQkgICBub2RlLT53aXRoX2NoZWNrICE9 IE5VTEwpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlclBvbGlj eVN0bXQgKEFMVEVSIFBPTElDWSkKKyAqCisgKiBHaXZlbiBhIHBvbGljeSBPSUQgYW5kIHRoZSBw YXJzZSB0cmVlIG9mIHRoZSBBTFRFUiBQT0xJQ1kgY29tbWFuZCwgcmV0dXJuCisgKiBhbiBPYmpU cmVlIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRh eAorICogQUxURVIgUE9MSUNZICV7aWRlbnRpdHl9SQorICovCitzdGF0aWMgT2JqVHJlZSAqCitk ZXBhcnNlX0FsdGVyUG9saWN5U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sK KwlBbHRlclBvbGljeVN0bXQgKm5vZGUgPSAoQWx0ZXJQb2xpY3lTdG10ICopIHBhcnNldHJlZTsK KwlPYmpUcmVlICAgICpyZXQ7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgUE9MSUNZ ICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9k ZS0+cG9saWN5X25hbWUpOworCisJLyogQWRkIHRoZSByZXN0IG9mIHRoZSBzdHVmZiAqLworCWFk ZF9wb2xpY3lfY2xhdXNlcyhyZXQsIG9iamVjdElkLCBub2RlLT5yb2xlcywgbm9kZS0+cXVhbCAh PSBOVUxMLAorCQkJCQkgICBub2RlLT53aXRoX2NoZWNrICE9IE5VTEwpOworCisJcmV0dXJuIHJl dDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10LgorICoKKyAqIEdpdmVu IGEgc2NoZW1hIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAq IFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFt ZX1JICV7YXV0aG9yaXphdGlvbn1zCisqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVh dGVTY2hlbWFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0ZVNj aGVtYVN0bXQgKm5vZGUgPSAoQ3JlYXRlU2NoZW1hU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJl ZSAgICAqcmV0OworCU9ialRyZWUgICAgKmF1dGg7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgi Q1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9cyIsIDIsCisJCQkJCQkgImlm X25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMg PyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+c2NoZW1hbmFtZSA/IG5vZGUtPnNjaGVtYW5hbWUgOiAiIik7CisKKwlhdXRo ID0gbmV3X29ianRyZWUoIkFVVEhPUklaQVRJT04iKTsKKwlpZiAobm9kZS0+YXV0aHJvbGUpCisJ CWFwcGVuZF9zdHJpbmdfb2JqZWN0KGF1dGgsICIle2F1dGhvcml6YXRpb25fcm9sZX1JIiwKKwkJ CQkJCQkgImF1dGhvcml6YXRpb25fcm9sZSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5v ZGUtPmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICIl e2F1dGhvcml6YXRpb25fcm9sZX1JIik7CisJCWFwcGVuZF9ub3RfcHJlc2VudChhdXRoKTsKKwl9 CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXthdXRob3JpemF0aW9ufXMiLCBhdXRoKTsK KworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2Yg YSBkb21haW4uCisgKi8KK3N0YXRpYyBjaGFyICoKK0RvbWFpbkdldERlZmF1bHQoSGVhcFR1cGxl IGRvbVR1cCwgYm9vbCBtaXNzaW5nX29rKQoreworCURhdHVtCQlkZWY7CisJTm9kZQkgICAqZGVm dmFsOworCWNoYXIJICAgKmRlZnN0cjsKKwlib29sCQlpc251bGw7CisKKwlkZWYgPSBTeXNDYWNo ZUdldEF0dHIoVFlQRU9JRCwgZG9tVHVwLCBBbnVtX3BnX3R5cGVfdHlwZGVmYXVsdGJpbiwKKwkJ CQkJCSAgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwl7CisJCWlmICghbWlzc2luZ19vaykKKwkJ CWVsb2coRVJST1IsICJkb21haW4gXCIlc1wiIGRvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVl IiwKKwkJCQlOYW1lU3RyKCgoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoZG9tVHVwKSktPnR5cG5h bWUpKTsKKwkJZWxzZQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJZGVmdmFsID0gc3RyaW5nVG9O b2RlKFRleHREYXR1bUdldENTdHJpbmcoZGVmKSk7CisJZGVmc3RyID0gZGVwYXJzZV9leHByZXNz aW9uKGRlZnZhbCwgTlVMTCAvKiBkcGNvbnRleHQ/ICovICwKKwkJCQkJCQkJZmFsc2UsIGZhbHNl KTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQWx0ZXJEb21haW5T dG10LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1E IERST1AgREVGQVVMVAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgU0VUIERF RkFVTFQgJXtkZWZhdWx0fXMKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERS T1AgTk9UIE5VTEwKKyAqIE9SCisgKiBBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBOT1Qg TlVMTAorICogT1IKKyAqIEFMVEVSIERPTUFJTiAle2lkZW50aXR5fUQgQUREIENPTlNUUkFJTlQg JXtjb25zdHJhaW50X25hbWV9cyAle2RlZmluaXRpb259cworICogT1IKKyAqIEFMVEVSIERPTUFJ TiAle2lkZW50aXR5fUQgRFJPUCBDT05TVFJBSU5UIElGIEVYSVNUUyAle2NvbnN0cmFpbnRfbmFt ZX1zICV7Y2FzY2FkZX1zCisgKiBPUgorICogQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBWQUxJ REFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlckRvbWFpblN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUs CisJCQkJCQlPYmplY3RBZGRyZXNzIGNvbnN0cmFpbnRBZGRyKQoreworCUFsdGVyRG9tYWluU3Rt dCAqbm9kZSA9IChBbHRlckRvbWFpblN0bXQgKikgcGFyc2V0cmVlOworCUhlYXBUdXBsZQlkb21U dXA7CisJRm9ybV9wZ190eXBlIGRvbUZvcm07CisJT2JqVHJlZSAgICAqcmV0OworCisJZG9tVHVw ID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVPSUQsIG9iamVjdElkKTsKKwlpZiAoIUhlYXBUdXBsZUlz VmFsaWQoZG9tVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGRv bWFpbiB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlkb21Gb3JtID0gKEZvcm1fcGdfdHlwZSkg R0VUU1RSVUNUKGRvbVR1cCk7CisKKwlzd2l0Y2ggKG5vZGUtPnN1YnR5cGUpCisJeworCQljYXNl ICdUJzoKKwkJCS8qIFNFVCBERUZBVUxUIC8gRFJPUCBERUZBVUxUICovCisJCQlpZiAobm9kZS0+ ZGVmID09IE5VTEwpCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIERPTUFJTiAle2lk ZW50aXR5fUQgRFJPUCBERUZBVUxUIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkcm9wIGRlZmF1bHQiLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3Qs CisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKGRvbUZvcm0tPnR5cG5hbWVzcGFj ZSwKKwkJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSkpOworCQkJZWxz ZQorCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNF VCBERUZBVUxUICV7ZGVmYXVsdH1zIiwgMywKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJzZXQgZGVmYXVsdCIsCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwK KwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSwKKwkJCQkJCQkJ CSAiZGVmYXVsdCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgRG9tYWluR2V0RGVmYXVsdChk b21UdXAsIGZhbHNlKSk7CisJCQlicmVhazsKKwkJY2FzZSAnTic6CisJCQkvKiBEUk9QIE5PVCBO VUxMICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9 RCBEUk9QIE5PVCBOVUxMIiwgMiwKKwkJCQkJCQkJCSAgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZHJvcCBub3QgbnVsbCIsCisJCQkJCQkJCQkgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCQkgIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2Us CisJCQkJCQkJCQkJCQkJCQkgICBOYW1lU3RyKGRvbUZvcm0tPnR5cG5hbWUpKSk7CisJCQlicmVh azsKKwkJY2FzZSAnTyc6CisJCQkvKiBTRVQgTk9UIE5VTEwgKi8KKwkJCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIFNFVCBOT1QgTlVMTCIsIDIsCisJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwiLAorCQkJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCSAgTmFtZVN0cihkb21Gb3Jt LT50eXBuYW1lKSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ0MnOgorCQkJLyoKKwkJCSAqIEFERCBD T05TVFJBSU5ULiAgT25seSBDSEVDSyBjb25zdHJhaW50cyBhcmUgc3VwcG9ydGVkIGJ5CisJCQkg KiBkb21haW5zCisJCQkgKi8KKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBET01BSU4g JXtpZGVudGl0eX1EIEFERCBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMgJXtkZWZpbml0 aW9ufXMiLCA0LAorCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0cmFp bnQiLAorCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShkb21Gb3JtLT50eXBuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJ CSAgTmFtZVN0cihkb21Gb3JtLT50eXBuYW1lKSksCisJCQkJCQkJCSAiY29uc3RyYWludF9uYW1l IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIGdldF9jb25zdHJhaW50X25hbWUoY29uc3RyYWlu dEFkZHIub2JqZWN0SWQpLAorCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCQkgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoY29uc3RyYWludEFk ZHIub2JqZWN0SWQpKTsKKwkJCWJyZWFrOworCQljYXNlICdWJzoKKwkJCS8qIFZBTElEQVRFIENP TlNUUkFJTlQgKi8KKwkJCS8qCisJCQkgKiBQcm9jZXNzIHN1YnR5cGU9c3BlY2lmaWMgb3B0aW9u cy4gVmFsaWRhdGlvbiBhIGNvbnN0cmFpbnQKKwkJCSAqIHJlcXVpcmVzIGl0cyBuYW1lLgorCQkJ ICovCisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBW QUxJREFURSBDT05TVFJBSU5UICV7Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkgInR5 cGUiLCBPYmpUeXBlU3RyaW5nLCAidmFsaWRhdGUgY29uc3RyYWludCIsCisJCQkJCQkJCSAiaWRl bnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l KGRvbUZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCQkJICBOYW1lU3RyKGRvbUZvcm0t PnR5cG5hbWUpKSwKKwkJCQkJCQkJICJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBu b2RlLT5uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlICdYJzoKKwkJCXsKKwkJCQlPYmpUcmVlICAg ICp0bXBvYmo7CisKKwkJCQkvKiBEUk9QIENPTlNUUkFJTlQgKi8KKwkJCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgRE9NQUlOICV7aWRlbnRpdHl9RCBEUk9QIENPTlNUUkFJTlQgSUYgRVhJ U1RTICV7Y29uc3RyYWludF9uYW1lfXMiLCAzLAorCQkJCQkJCQkJCSJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkJImlkZW50aXR5IiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZG9tRm9ybS0+dHlwbmFt ZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJCU5hbWVTdHIoZG9tRm9ybS0+dHlwbmFtZSkpLAorCQkJ CQkJCQkJCSJjb25zdHJhaW50X25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uYW1lKTsKKwor CQkJCXRtcG9iaiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCQkicHJl c2VudCIsIE9ialR5cGVCb29sLCBub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCisJ CQkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtjYXNjYWRlfXMiLCB0bXBvYmopOworCQkJ fQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiaW52YWxpZCBzdWJ0eXBl ICVjIiwgbm9kZS0+c3VidHlwZSk7CisJfQorCisJLyogRG9uZSAqLworCVJlbGVhc2VTeXNDYWNo ZShkb21UdXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVT dGF0c1N0bXQuCisgKgorICogR2l2ZW4gYSBzdGF0aXN0aWNzIE9JRCBhbmQgdGhlIHBhcnNlIHRy ZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRo ZSBjcmVhdGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgU1RB VElTVElDUyAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgT04gJXtleHByOiwgfXMgRlJP TSAle3N0YXRfdGFibGVfaWRlbnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVN0YXRpc3RpY3NTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQorewor CUNyZWF0ZVN0YXRzU3RtdCAqbm9kZSA9IChDcmVhdGVTdGF0c1N0bXQgKikgcGFyc2V0cmVlOwor CUZvcm1fcGdfc3RhdGlzdGljX2V4dCBzdGF0Zm9ybTsKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVh cFR1cGxlCXR1cDsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCUxpc3QJICAgKnN0 YXRleHBycyA9IE5JTDsKKworCXR1cCA9IFNlYXJjaFN5c0NhY2hlMShTVEFURVhUT0lELCBPYmpl Y3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBzdGF0aXN0aWMgd2l0aCBPSUQg JXUiLCBvYmplY3RJZCk7CisKKwlzdGF0Zm9ybSA9IChGb3JtX3BnX3N0YXRpc3RpY19leHQpIEdF VFNUUlVDVCh0dXApOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBTVEFUSVNUSUNT ICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCIsIDIsCisJCQkJCQkgImlmX25vdF9leGlz dHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9U IEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJ IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzdGF0Zm9ybS0+c3R4bmFtZXNwYWNlLAorCQkJCQkJ CQkJCQkJICBOYW1lU3RyKHN0YXRmb3JtLT5zdHhuYW1lKSkpOworCisJZGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoU1RBVEVYVE9JRCwgdHVwLCBBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4ZXhwcnMs CisJCQkJCQkJJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlMaXN0Q2VsbCAgICpsYzsK KwkJUmVsYXRpb24Jc3RhdHNyZWw7CisJCUxpc3QJICAgKmNvbnRleHQ7CisJCUxpc3QJICAgKmV4 cHJzID0gTklMOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQlzdGF0c3JlbCA9IHJlbGF0 aW9uX29wZW4oc3RhdGZvcm0tPnN0eHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCQljb250ZXh0 ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzdGF0c3JlbCks CisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsaWQoc3RhdHNyZWwpKTsKKworCQlleHByc1N0cmlu ZyA9IFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pOworCQlleHBycyA9IChMaXN0ICopIHN0cmlu Z1RvTm9kZShleHByc1N0cmluZyk7CisKKwkJZm9yZWFjaChsYywgZXhwcnMpCisJCXsKKwkJCU5v ZGUJICAgKmV4cHIgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCQkJY2hhcgkgICAqc3RhdGV4cHI7 CisKKwkJCXN0YXRleHByID0gZGVwYXJzZV9leHByZXNzaW9uKGV4cHIsIGNvbnRleHQsIGZhbHNl LCBmYWxzZSk7CisJCQlzdGF0ZXhwcnMgPSBsYXBwZW5kKHN0YXRleHBycywgbmV3X3N0cmluZ19v YmplY3Qoc3RhdGV4cHIpKTsKKwkJfQorCisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiT04g JXtleHByOiwgfXMiLCBzdGF0ZXhwcnMpOworCQlwZnJlZShleHByc1N0cmluZyk7CisJCXJlbGF0 aW9uX2Nsb3NlKHN0YXRzcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKworCWRhdHVtID0gU3lz Q2FjaGVHZXRBdHRyKFNUQVRFWFRPSUQsIHR1cCwgQW51bV9wZ19zdGF0aXN0aWNfZXh0X3N0eGtl eXMsCisJCQkJCQkJJmlzbnVsbCk7CisJaWYgKCFpc251bGwpCisJeworCQlpbnQJCQlrZXlubzsK KwkJY2hhcgkgICAqYXR0bmFtZTsKKwkJTGlzdAkgICAqc3RhdGNvbHMgPSBOSUw7CisJCWludDJ2 ZWN0b3IgKmluZG9wdGlvbjsKKworCQlpbmRvcHRpb24gPSAoaW50MnZlY3RvciAqKSBEYXR1bUdl dFBvaW50ZXIoZGF0dW0pOworCisJCWZvciAoa2V5bm8gPSAwOyBrZXlubyA8IGluZG9wdGlvbi0+ ZGltMTsga2V5bm8rKykKKwkJeworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKHN0YXRmb3JtLT5z dHhyZWxpZCwgaW5kb3B0aW9uLT52YWx1ZXNba2V5bm9dLAorCQkJCQkJCQkgIGZhbHNlKTsKKwkJ CXN0YXRjb2xzID0gbGFwcGVuZChzdGF0Y29scywgbmV3X3N0cmluZ19vYmplY3QoYXR0bmFtZSkp OworCQl9CisKKwkJaWYgKGluZG9wdGlvbi0+ZGltMSkKKwkJeworCQkJLyogQXBwZW5kIGEgJywn IGlmIHN0YXRleHBycyBpcyBwcmVzZW50IGVsc2UgYXBwZW5kICdPTicgKi8KKwkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHJldCwgIiV7Y29tbWF9cyIsICJjb21tYSIsCisJCQkJCQkJCSBzdGF0ZXhw cnMgPyAiLCIgOiAiT04iKTsKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtjb2xzOiwg fXMiLCBzdGF0Y29scyk7CisJCX0KKwl9CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJG Uk9NICV7c3RhdF90YWJsZV9pZGVudGl0eX1EIiwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVh bG5hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uoc3RhdGZvcm0tPnN0eHJlbGlkKSwKKwkJCQkJCQkJCQkJ CSAgZ2V0X3JlbF9uYW1lKHN0YXRmb3JtLT5zdHhyZWxpZCkpKTsKKworCVJlbGVhc2VTeXNDYWNo ZSh0dXApOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gQ3JlYXRlRm9y ZWlnblNlcnZlclN0bXQgKENSRUFURSBTRVJWRVIpCisgKgorICogR2l2ZW4gYSBzZXJ2ZXIgT0lE IGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisg KiByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIENSRUFURSBTRVJWRVIgJXtpZGVudGl0eX1JICV7dHlwZX1zICV7dmVyc2lvbn1zIEZPUkVJ R04gREFUQSBXUkFQUEVSICV7ZmR3fUkKKyAqICV7Z2VuZXJpY19vcHRpb25zfXMKKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVGb3JlaWduU2VydmVyU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAqbm9kZSA9 IChDcmVhdGVGb3JlaWduU2VydmVyU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0 OworCU9ialRyZWUgICAgKnRtcDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgU0VS VkVSICV7aWRlbnRpdHl9SSIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywg bm9kZS0+c2VydmVybmFtZSk7CisKKwkvKiBBZGQgYSBUWVBFIGNsYXVzZSwgaWYgYW55ICovCisJ dG1wID0gbmV3X29ianRyZWUoIlRZUEUiKTsKKwlpZiAobm9kZS0+c2VydmVydHlwZSkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXt0eXBlfUwiLCAidHlwZSIsIG5vZGUtPnNlcnZlcnR5 cGUpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJYXBwZW5kX29iamVjdF9v YmplY3QocmV0LCAiJXt0eXBlfXMiLCB0bXApOworCisJLyogQWRkIGEgVkVSU0lPTiBjbGF1c2Us IGlmIGFueSAqLworCXRtcCA9IG5ld19vYmp0cmVlKCJWRVJTSU9OIik7CisJaWYgKG5vZGUtPnZl cnNpb24pCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIiV7dmVyc2lvbn1MIiwgInZlcnNp b24iLCBub2RlLT52ZXJzaW9uKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOwor CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dmVyc2lvbn1zIiwgdG1wKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KHJldCwgIkZPUkVJR04gREFUQSBXUkFQUEVSICV7ZmR3fUkiLCAiZmR3 IiwKKwkJCQkJCSBub2RlLT5mZHduYW1lKTsKKworCS8qIEFkZCBhbiBPUFRJT05TIGNsYXVzZSwg aWYgYW55ICovCisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtnZW5lcmljX29wdGlvbnN9 cyIsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlvbnMsIE5VTEwpKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFsdGVyRm9yZWlnblNlcnZlclN0 bXQgKEFMVEVSIFNFUlZFUikKKyAqCisgKiBHaXZlbiBhIHNlcnZlciBPSUQgYW5kIHRoZSBwYXJz ZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAqIHJlcHJlc2VudGlu ZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQUxURVIgU0VS VkVSICV7aWRlbnRpdHl9SSAle3ZlcnNpb259cyAle2dlbmVyaWNfb3B0aW9uc31zCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChPaWQgb2JqZWN0 SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlckZvcmVpZ25TZXJ2ZXJTdG10ICpub2RlID0g KEFsdGVyRm9yZWlnblNlcnZlclN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnRtcDsK KworCS8qIEFkZCBhIFZFUlNJT04gY2xhdXNlLCBpZiBhbnkgKi8KKwl0bXAgPSBuZXdfb2JqdHJl ZSgiVkVSU0lPTiIpOworCWlmIChub2RlLT5oYXNfdmVyc2lvbiAmJiBub2RlLT52ZXJzaW9uKQor CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3ZlcnNpb259TCIsICJ2ZXJzaW9uIiwgbm9k ZS0+dmVyc2lvbik7CisJZWxzZSBpZiAobm9kZS0+aGFzX3ZlcnNpb24pCisJCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHRtcCwgInZlcnNpb24iLCAidmVyc2lvbiIsICJOVUxMIik7CisJZWxzZQorCQlh cHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCXJldHVybiBuZXdfb2JqdHJlZV9WQSgiQUxURVIg U0VSVkVSICV7aWRlbnRpdHl9SSAle3ZlcnNpb259cyAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywK KwkJCQkJCSAgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c2VydmVybmFtZSwKKwkJ CQkJCSAgInZlcnNpb24iLCBPYmpUeXBlT2JqZWN0LCB0bXAsCisJCQkJCQkgICJnZW5lcmljX29w dGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJICBkZXBhcnNlX0Zkd09wdGlvbnMobm9kZS0+ b3B0aW9ucywgTlVMTCkpOworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVBMYW5nU3RtdC4K KyAqCisgKiBHaXZlbiBhIGxhbmd1YWdlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVh dGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVhdGlvbiBj b21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtvcl9yZXBsYWNlfXMg JXt0cnVzdGVkfXMgTEFOR1VBR0UgJXtpZGVudGl0eX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQKKyAq ICV7aW5saW5lfXMgJXt2YWxpZGF0b3J9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZUxhbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUNyZWF0 ZVBMYW5nU3RtdCAqbm9kZSA9IChDcmVhdGVQTGFuZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJRm9y bV9wZ19sYW5ndWFnZSBsYW5nRm9ybTsKKworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEoTEFO R09JRCwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQobGFuZ1R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciBsYW5ndWFnZSB3aXRoIE9JRCAldSIsIG9iamVjdElkKTsKKwlsYW5nRm9ybSA9IChGb3Jt X3BnX2xhbmd1YWdlKSBHRVRTVFJVQ1QobGFuZ1R1cCk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9W QSgiQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7dHJ1c3RlZH1zIExBTkdVQUdFICV7aWRlbnRpdHl9 cyIsIDMsCisJCQkJCQkgIm9yX3JlcGxhY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUt PnJlcGxhY2UgPyAiT1IgUkVQTEFDRSIgOiAiIiwKKwkJCQkJCSAidHJ1c3RlZCIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgbGFuZ0Zvcm0tPmxhbnBsdHJ1c3RlZCA/ICJUUlVTVEVEIiA6ICIiLAor CQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnBsbmFtZSk7CisKKwlpZiAo bm9kZS0+cGxoYW5kbGVyICE9IE5JTCkKKwl7CisJCS8qIEFkZCB0aGUgSEFORExFUiBjbGF1c2Ug Ki8KKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiSEFORExFUiAle2hhbmRsZXJ9RCIsCisJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAor CQkJCQkJCQkJCQkJCQkgbGFuZ0Zvcm0tPmxhbnBsY2FsbGZvaWQpKTsKKworCQkvKiBBZGQgdGhl IElOTElORSBjbGF1c2UsIGlmIGFueSAqLworCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5MSU5FIik7 CisJCWlmIChPaWRJc1ZhbGlkKGxhbmdGb3JtLT5sYW5pbmxpbmUpKQorCQl7CisJCQlhcHBlbmRf b2JqZWN0X29iamVjdCh0bXAsICIle2hhbmRsZXJfbmFtZX1EIiwKKwkJCQkJCQkJIG5ld19vYmp0 cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJ IGxhbmdGb3JtLT5sYW5pbmxpbmUpKTsKKwkJfQorCQllbHNlCisJCQlhcHBlbmRfbm90X3ByZXNl bnQodG1wKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpbmxpbmV9cyIsIHRtcCk7 CisKKwkJLyogQWRkIHRoZSBWQUxJREFUT1IgY2xhdXNlLCBpZiBhbnkgKi8KKwkJdG1wID0gbmV3 X29ianRyZWUoIlZBTElEQVRPUiIpOworCQlpZiAoT2lkSXNWYWxpZChsYW5nRm9ybS0+bGFudmFs aWRhdG9yKSkKKwkJeworCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXtoYW5kbGVyX25h bWV9RCIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCSBsYW5nRm9ybS0+bGFudmFsaWRhdG9yKSk7CisJCX0K KwkJZWxzZQorCQkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiV7dmFsaWRhdG9yfXMiLCB0bXApOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShs YW5nVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgQ3JlYXRlU2Vx U3RtdC4KKyAqCisgKiBHaXZlbiBhIHNlcXVlbmNlIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgJXtwZXJzaXN0 ZW5jZX1zIFNFUVVFTkNFICV7aWRlbnRpdHl9RAorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NyZWF0ZVNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJT2Jq VHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0 YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1zID0gTklMOworCUZvcm1fcGdfc2VxdWVuY2Ugc2Vx Zm9ybTsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUNyZWF0ZVNlcVN0 bXQgKmNyZWF0ZVNlcVN0bXQgPSAoQ3JlYXRlU2VxU3RtdCAqKSBwYXJzZXRyZWU7CisKKwkvKgor CSAqIFNlcXVlbmNlIGZvciBJREVOVElUWSBDT0xVTU4gb3V0cHV0IHNlcGFyYXRlbHkgKHZpYSBD UkVBVEUgVEFCTEUgb3IKKwkgKiBBTFRFUiBUQUJMRSk7IHJldHVybiBlbXB0eSBoZXJlLgorCSAq LworCWlmIChjcmVhdGVTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJ c2VxZGF0YSA9IGdldF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSBy ZWxhdGlvbl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29w ZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNl YXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0o b2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVS Uk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2Ugd2l0aCBPSUQgJXUiLAorCQkJ IG9iamVjdElkKTsKKworCXNlcWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNl cXR1cGxlKTsKKworCS8qIERlZmluaXRpb24gZWxlbWVudHMgKi8KKwllbGVtcyA9IGxhcHBlbmQo ZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0g bGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50Qnkoc2VxZm9ybSwgZmFsc2UpKTsK KwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKHNlcWZvcm0sIGZh bHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShzZXFm b3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3 aXRoKHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9SZXN0YXJ0KHNlcWRhdGEpKTsKKworCS8qIFdlIHB1cnBvc2VmdWxseSBkbyBub3QgZW1pdCBP V05FRCBCWSBoZXJlICovCisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7cGVyc2lz dGVuY2V9cyBTRVFVRU5DRSAle2lkZW50aXR5fUQgJXtkZWZpbml0aW9uOiB9cyIsIDMsCisJCQkJ CQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vf c3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKSwKKwkJCQkJCSAiaWRlbnRpdHki LCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlv bi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSksCisJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlQXJyYXksIGVs ZW1zKTsKKworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmVsYXRpb25f Y2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KgorICogRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJMRSkuCisgKgorICogR2l2ZW4g YSB0YWJsZSBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFu IE9ialRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9l eGlzdHN9cyAle2lkZW50aXR5fUQgW09GCisgKiAle29mX3R5cGV9VCB8IFBBUlRJVElPTiBPRiAl e3BhcmVudF9pZGVudGl0eX1EXSAle3RhYmxlX2VsZW1lbnRzfXMKKyAqICV7aW5oZXJpdHN9cyAl e3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cworICogJXtv bl9jb21taXR9cyAle3RhYmxlc3BhY2V9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNl X0NyZWF0ZVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlU3Rt dCAqbm9kZSA9IChDcmVhdGVTdG10ICopIHBhcnNldHJlZTsKKwlSZWxhdGlvbglyZWxhdGlvbiA9 IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJTGlzdAkgICAqZHBj b250ZXh0OworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXBvYmo7CisJTGlzdAkg ICAqbGlzdCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJcmV0ID0gbmV3X29ianRyZWVf VkEoIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVu dGl0eX1EIiwgMywKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ IGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpLAor CQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5pZl9u b3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUocmVsYXRpb24tPnJk X3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWxhdGlvbikpKTsKKworCWRwY29udGV4dCA9IGRlcGFyc2VfY29udGV4dF9mb3IoUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pLAorCQkJCQkJCQkJb2JqZWN0SWQpOworCisJLyoK KwkgKiBUeXBlZCB0YWJsZXMgYW5kIHBhcnRpdGlvbnMgdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50 IGZvcm1hdCBzdHJpbmc6IHdlCisJICogbXVzdCBub3QgcHV0IHRhYmxlX2VsZW1lbnRzIHdpdGgg cGFyZW50cyBkaXJlY3RseSBpbiB0aGUgZm10IHN0cmluZywKKwkgKiBiZWNhdXNlIGlmIHRoZXJl IGFyZSBubyBvcHRpb25zIHRoZSBwYXJlbnRoZXNlcyBtdXN0IG5vdCBiZSBlbWl0dGVkOworCSAq IGFuZCBhbHNvLCB0eXBlZCB0YWJsZXMgZG8gbm90IGFsbG93IGZvciBpbmhlcml0YW5jZS4KKwkg Ki8KKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJeworCQlMaXN0 CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0IHRhYmxlIGVs ZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJCSAqIHN1cnJv dW5kZWQgYnkgcGFyZW50aGVzZXMgaGVyZSwgYmVjYXVzZSBhbiBlbXB0eSBjbGF1c2Ugd291bGQg Y2F1c2UKKwkJICogYSBzeW50YXggZXJyb3IuICBUaGVyZWZvcmUsIHdlIHVzZSBhbiBpbmRpcmVj dGlvbiBlbGVtZW50IGFuZCBzZXQKKwkJICogcHJlc2VudD1mYWxzZSB3aGVuIHRoZXJlIGFyZSBu byBlbGVtZW50cy4KKwkJICovCisJCWlmIChub2RlLT5vZlR5cGVuYW1lKQorCQl7CisJCQl0bXBv YmogPSBuZXdfb2JqdHJlZV9mb3JfdHlwZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxvZnR5cGUsIC0x KTsKKwkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIk9GICV7b2ZfdHlwZX1UIiwgdG1wb2Jq KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxpc3QJICAgKnBhcmVudHM7CisJCQlPYmpFbGVtICAg ICplbGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOwor CQkJZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlz dF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwg IlBBUlRJVElPTiBPRiIpOworCisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3BhcmVu dF9pZGVudGl0eX1EIiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVlLm9iamVjdCk7CisJCX0KKworCQl0 YWJsZWVsdHMgPSBkZXBhcnNlX1RhYmxlRWxlbWVudHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0 cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSAgdHJ1ZSwgLyogdHlwZWQgdGFibGUgKi8KKwkJCQkJ CQkJCQkgIGZhbHNlKTsJLyogbm90IGNvbXBvc2l0ZSAqLworCQl0YWJsZWVsdHMgPSBvYnRhaW5D b25zdHJhaW50cyh0YWJsZWVsdHMsIG9iamVjdElkLCBJbnZhbGlkT2lkKTsKKworCQl0bXBvYmog PSBuZXdfb2JqdHJlZSgiIik7CisJCWlmICh0YWJsZWVsdHMpCisJCQlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHRtcG9iaiwgIigle2VsZW1lbnRzOiwgfXMpIiwgdGFibGVlbHRzKTsKKwkJZWxzZQorCQkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0 LCAiJXt0YWJsZV9lbGVtZW50c31zIiwgdG1wb2JqKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkg ICAqdGFibGVlbHRzID0gTklMOworCisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gcHJv Y2VzcyBMSUtFIGNsYXVzZXMgc2VwYXJhdGVseTsgdGhleSBoYXZlCisJCSAqIGFscmVhZHkgYmVl biB0cmFuc2Zvcm1lZCBpbnRvIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzLgorCQkgKi8KKworCQkv KgorCQkgKiBQcm9jZXNzIHRhYmxlIGVsZW1lbnRzOiBjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIGNv bnN0cmFpbnRzLiAgT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25zIGFyZSBvYnRhaW5l ZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4gIFRvCisJCSAqIGdldCBjb25zdHJhaW50cyB3 ZSByZWx5IG9uIHBnX2NvbnN0cmFpbnQsIGJlY2F1c2UgdGhlIHBhcnNlIG5vZGUKKwkJICogbWln aHQgYmUgbWlzc2luZyBzb21lIHRoaW5ncyBzdWNoIGFzIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJh aW50cy4KKwkJICovCisJCXRhYmxlZWx0cyA9IGRlcGFyc2VfVGFibGVFbGVtZW50cyhyZWxhdGlv biwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBmYWxzZSwJLyogbm90 IHR5cGVkIHRhYmxlICovCisJCQkJCQkJCQkJICBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8K KwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52 YWxpZE9pZCk7CisKKwkJaWYgKHRhYmxlZWx0cykKKwkJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0 LCAiKCV7dGFibGVfZWxlbWVudHM6LCB9cykiLCB0YWJsZWVsdHMpOworCQllbHNlCisJCQlhcHBl bmRfZm9ybWF0X3N0cmluZyhyZXQsICIoKSIpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5j ZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAq IHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUg YWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJh dGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3Jt YXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5k IGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wb2Jq ID0gbmV3X29ianRyZWUoIklOSEVSSVRTIik7CisJCWlmIChub2RlLT5pbmhSZWxhdGlvbnMgIT0g TklMKQorCQkJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIoJXtwYXJlbnRzOiwgfUQpIiwg ZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRf bnVsbF9vYmplY3QodG1wb2JqLCAiKCV7cGFyZW50czosIH1EKSIpOworCQkJYXBwZW5kX25vdF9w cmVzZW50KHRtcG9iaik7CisJCX0KKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtpbmhl cml0c31zIiwgdG1wb2JqKTsKKwl9CisKKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVEFCTEVTUEFD RSIpOworCWlmIChub2RlLT50YWJsZXNwYWNlbmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wb2JqLCAiJXt0YWJsZXNwYWNlfUkiLCAidGFibGVzcGFjZSIsCisJCQkJCQkJIG5vZGUtPnRh Ymxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAi JXt0YWJsZXNwYWNlfUkiKTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJfQorCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKwlhcHBl bmRfb2JqZWN0X29iamVjdChyZXQsICIle29uX2NvbW1pdH1zIiwKKwkJCQkJCSBkZXBhcnNlX09u Q29tbWl0Q2xhdXNlKG5vZGUtPm9uY29tbWl0KSk7CisKKwkvKiBGT1IgVkFMVUVTIGNsYXVzZSAq LworCWlmIChub2RlLT5wYXJ0Ym91bmQpCisJeworCQkvKgorCQkgKiBHZXQgcGdfY2xhc3MucmVs cGFydGJvdW5kLiBXZSBjYW5ub3QgdXNlIHBhcnRib3VuZCBpbiB0aGUgcGFyc2V0cmVlCisJCSAq IGRpcmVjdGx5IGFzIGl0J3MgdGhlIG9yaWdpbmFsIHBhcnRib3VuZCBleHByZXNzaW9uIHdoaWNo IGhhdmVuJ3QKKwkJICogYmVlbiB0cmFuc2Zvcm1lZC4KKwkJICovCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHJldCwgIiV7cGFydGl0aW9uX2JvdW5kfXMiLCAicGFydGl0aW9uX2JvdW5kIiwKKwkJ CQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKworCS8qIFBB UlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiUEFSVElUSU9OIEJZ Iik7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXtkZWZpbml0aW9ufXMi LCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJIHBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShvYmplY3RJ ZCkpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXBvYmosICIle2RlZmluaXRp b259cyIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKwl9CisJYXBwZW5kX29iamVj dF9vYmplY3QocmV0LCAiJXtwYXJ0aXRpb25fYnl9cyIsIHRtcG9iaik7CisKKwkvKiBVU0lORyBj bGF1c2UgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+YWNj ZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIle2FjY2Vzc19tZXRo b2R9SSIsICJhY2Nlc3NfbWV0aG9kIiwKKwkJCQkJCQkgbm9kZS0+YWNjZXNzTWV0aG9kKTsKKwll bHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wb2JqLCAiJXthY2Nlc3NfbWV0aG9kfUki KTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJfQorCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wb2JqKTsKKworCS8qIFdJVEggY2xhdXNl ICovCisJdG1wb2JqID0gbmV3X29ianRyZWUoIldJVEgiKTsKKworCWZvcmVhY2goY2VsbCwgbm9k ZS0+b3B0aW9ucykKKwl7CisJCU9ialRyZWUgICAgKnRtcG9iajI7CisJCURlZkVsZW0gICAgKm9w dCA9IChEZWZFbGVtICopIGxmaXJzdChjZWxsKTsKKworCQl0bXBvYmoyID0gZGVwYXJzZV9EZWZF bGVtKG9wdCwgZmFsc2UpOworCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVj dCh0bXBvYmoyKSk7CisJfQorCisJaWYgKGxpc3QpCisJCWFwcGVuZF9hcnJheV9vYmplY3QodG1w b2JqLCAiKCV7d2l0aDosIH1zKSIsIGxpc3QpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50 KHRtcG9iaik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle3dpdGhfY2xhdXNlfXMi LCB0bXBvYmopOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIERlZmluZVN0bXQuCisgKi8K K3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdChPaWQgb2JqZWN0SWQsIE5vZGUg KnBhcnNldHJlZSwgT2JqZWN0QWRkcmVzcyBzZWNvbmRhcnlPYmopCit7CisJRGVmaW5lU3RtdCAq ZGVmaW5lID0gKERlZmluZVN0bXQgKikgcGFyc2V0cmVlOworCisJc3dpdGNoIChkZWZpbmUtPmtp bmQpCisJeworCQljYXNlIE9CSkVDVF9DT0xMQVRJT046CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZp bmVTdG10X0NvbGxhdGlvbihvYmplY3RJZCwgZGVmaW5lLCBzZWNvbmRhcnlPYmopOworCisJCWNh c2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3RtdF9PcGVyYXRv cihvYmplY3RJZCwgZGVmaW5lKTsKKworCQljYXNlIE9CSkVDVF9UU0NPTkZJR1VSQVRJT046CisJ CQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTQ29uZmlnKG9iamVjdElkLCBkZWZpbmUsIHNl Y29uZGFyeU9iaik7CisKKwkJY2FzZSBPQkpFQ1RfVFNESUNUSU9OQVJZOgorCQkJcmV0dXJuIGRl cGFyc2VfRGVmaW5lU3RtdF9UU0RpY3Rpb25hcnkob2JqZWN0SWQsIGRlZmluZSk7CisKKwkJY2Fz ZSBPQkpFQ1RfVFNQQVJTRVI6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTUGFyc2Vy KG9iamVjdElkLCBkZWZpbmUpOworCisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCQlyZXR1 cm4gZGVwYXJzZV9EZWZpbmVTdG10X1RTVGVtcGxhdGUob2JqZWN0SWQsIGRlZmluZSk7CisJCQli cmVhazsKKworCQljYXNlIE9CSkVDVF9UWVBFOgorCQkJcmV0dXJuIGRlcGFyc2VfRGVmaW5lU3Rt dF9UeXBlKG9iamVjdElkLCBkZWZpbmUpOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAi dW5zdXBwb3J0ZWQgb2JqZWN0IGtpbmQ6ICVkIiwgZGVmaW5lLT5raW5kKTsKKwl9CisKKwlyZXR1 cm4gTlVMTDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBEZWZpbmVTdG10IChDUkVBVEUgQ09MTEFU SU9OKQorICoKKyAqIEdpdmVuIGEgY29sbGF0aW9uIE9JRCwgcmV0dXJuIGFuIE9ialRyZWUgcmVw cmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBD UkVBVEUgQ09MTEFUSU9OICV7aWRlbnRpdHl9RCBGUk9NICV7ZnJvbV9pZGVudGl0eX1EICgle2Vs ZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9Db2xs YXRpb24oT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUsCisJCQkJCQkJIE9iamVjdEFk ZHJlc3MgZnJvbUNvbGxpZCkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJSGVhcFR1cGxlCWNvbFR1 cDsKKwlGb3JtX3BnX2NvbGxhdGlvbiBjb2xGb3JtOworCURhdHVtCQlkYXR1bTsKKwlib29sCQlp c251bGw7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisKKwljb2xU dXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkp OworCWlmICghSGVhcFR1cGxlSXNWYWxpZChjb2xUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgY29sbGF0aW9uIHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCWNv bEZvcm0gPSAoRm9ybV9wZ19jb2xsYXRpb24pIEdFVFNUUlVDVChjb2xUdXApOworCisJcmV0ID0g bmV3X29ianRyZWVfVkEoIkNSRUFURSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIiwgMSwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZShjb2xGb3JtLT5jb2xsbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKGNvbEZv cm0tPmNvbGxuYW1lKSkpOworCisJaWYgKE9pZElzVmFsaWQoZnJvbUNvbGxpZC5vYmplY3RJZCkp CisJeworCQlPaWQJCQljb2xsaWQgPSBmcm9tQ29sbGlkLm9iamVjdElkOworCQlIZWFwVHVwbGUJ dHA7CisJCUZvcm1fcGdfY29sbGF0aW9uIGZyb21Db2xGb3JtOworCisJCS8qCisJCSAqIENSRUFU RSBDT0xMQVRJT04gJXtpZGVudGl0eX1EIEZST00gZXhpc3RpbmdfY29sbGF0aW9uOworCQkgKi8K KwkJdHAgPSBTZWFyY2hTeXNDYWNoZTEoQ09MTE9JRCwgT2JqZWN0SWRHZXREYXR1bShjb2xsaWQp KTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJCWVsb2coRVJST1IsICJjYWNoZSBs b29rdXAgZmFpbGVkIGZvciBjb2xsYXRpb24gd2l0aCBPSUQgJXUiLCBjb2xsaWQpOworCisJCWZy b21Db2xGb3JtID0gKEZvcm1fcGdfY29sbGF0aW9uKSBHRVRTVFJVQ1QodHApOworCisJCWFwcGVu ZF9vYmplY3Rfb2JqZWN0KHJldCwgIkZST00gJXtmcm9tX2lkZW50aXR5fUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoZnJvbUNvbEZvcm0tPmNvbGxuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCQkJICBOYW1lU3RyKGZyb21Db2xGb3JtLT5jb2xsbmFtZSkpKTsKKworCQlSZWxlYXNl U3lzQ2FjaGUodHApOworCQlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwkvKiBMT0NBTEUgKi8KKwlkYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihDT0xMT0lELCBj b2xUdXAsIEFudW1fcGdfY29sbGF0aW9uX2NvbGxpY3Vsb2NhbGUsICZpc251bGwpOworCWlmICgh aXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxPQ0FMRT0le2xvY2FsZX1MIiwg MiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJsb2NhbGUiLAorCQkJCQkJCSAi bG9jYWxlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgVGV4dERhdHVt R2V0Q1N0cmluZyhkYXR1bSkpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJfQorCisJLyogTENfQ09MTEFURSAqLworCWRhdHVtID0gU3lzQ2FjaGVH ZXRBdHRyKENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbGNvbGxhdGUsICZp c251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkxDX0NP TExBVEU9JXtjb2xsYXRlfUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywg ImNvbGxhdGUiLAorCQkJCQkJCSAiY29sbGF0ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBz cHJpbnRmKCIlcyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBw ZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8qIExDX0NUWVBFICov CisJZGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoQ09MTE9JRCwgY29sVHVwLCBBbnVtX3BnX2NvbGxh dGlvbl9jb2xsY3R5cGUsICZpc251bGwpOworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkxDX0NUWVBFPSV7Y3R5cGV9TCIsIDIsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiY3R5cGUiLAorCQkJCQkJCSAiY3R5cGUiLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJCSBwc3ByaW50ZigiJXMiLCBUZXh0RGF0dW1HZXRDU3RyaW5nKGRhdHVtKSkpOworCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwkvKiBQ Uk9WSURFUiAqLworCWlmIChjb2xGb3JtLT5jb2xscHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lD VSkKKwl7CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAy LAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkg InByb3ZpZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImljdSIp KTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJfQor CWVsc2UgaWYgKGNvbEZvcm0tPmNvbGxwcm92aWRlciA9PSBDT0xMUFJPVklERVJfTElCQykKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJQUk9WSURFUj0le3Byb3ZpZGVyfUwiLCAyLAorCQkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInByb3ZpZGVyIiwKKwkJCQkJCQkgInByb3Zp ZGVyIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkgcHNwcmludGYoIiVzIiwgImxpYmMiKSk7CisJ CWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCS8q IERFVEVSTUlOSVNUSUMgKi8KKwlpZiAoY29sRm9ybS0+Y29sbGlzZGV0ZXJtaW5pc3RpYykKKwl7 CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERVRFUk1JTklTVElDPSV7ZGV0ZXJtaW5pc3RpY31M IiwgMiwKKwkJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJkZXRlcm1pbmlzdGljIiwK KwkJCQkJCQkgImRldGVybWluaXN0aWMiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBwc3ByaW50 ZigiJXMiLCAidHJ1ZSIpKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJfQorCisJLyogVkVSU0lPTiAqLworCWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRy KENPTExPSUQsIGNvbFR1cCwgQW51bV9wZ19jb2xsYXRpb25fY29sbHZlcnNpb24sICZpc251bGwp OworCWlmICghaXNudWxsKQorCXsKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIlZFUlNJT049JXt2 ZXJzaW9ufUwiLCAyLAorCQkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInZlcnNpb24i LAorCQkJCQkJCSAidmVyc2lvbiIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIHBzcHJpbnRmKCIl cyIsIFRleHREYXR1bUdldENTdHJpbmcoZGF0dW0pKSk7CisJCWxpc3QgPSBsYXBwZW5kKGxpc3Qs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCX0KKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0 LCAiKCV7ZWxlbXM6LCB9cykiLCBsaXN0KTsKKwlSZWxlYXNlU3lzQ2FjaGUoY29sVHVwKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEgRGVmaW5lU3RtdCAoQ1JFQVRFIE9Q RVJBVE9SKQorICoKKyAqIEdpdmVuIGEgb3BlcmF0b3IgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0 aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNy ZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBPUEVSQVRP UiAle2lkZW50aXR5fU8gKCV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9EZWZpbmVTdG10X09wZXJhdG9yKE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVmaW5l KQoreworCUhlYXBUdXBsZQlvcHJUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAg KnRtcG9iajsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1fcGdfb3BlcmF0b3Igb3ByRm9y bTsKKworCW9wclR1cCA9IFNlYXJjaFN5c0NhY2hlMShPUEVST0lELCBPYmplY3RJZEdldERhdHVt KG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKG9wclR1cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBvcGVyYXRvciB3aXRoIE9JRCAldSIsIG9iamVj dElkKTsKKwlvcHJGb3JtID0gKEZvcm1fcGdfb3BlcmF0b3IpIEdFVFNUUlVDVChvcHJUdXApOwor CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSBPUEVSQVRPUiAle2lkZW50aXR5fU8iLCAx LAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVf Zm9yX3F1YWxuYW1lKG9wckZvcm0tPm9wcm5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0 cihvcHJGb3JtLT5vcHJuYW1lKSkpOworCisJLyogUFJPQ0VEVVJFICovCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIlBST0NFRFVSRT0le3Byb2NlZHVyZX1EIiwgMiwKKwkJCQkJCQkiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgInByb2NlZHVyZSIsCisJCQkJCQkJInByb2NlZHVyZSIsIE9ialR5 cGVPYmplY3QsCisJCQkJCQkJbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJl bGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCW9wckZvcm0tPm9wcmNvZGUpKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIExFRlRBUkcgKi8K Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTEVGVEFSRz0iLCAxLAorCQkJCQkJCSJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAibGVmdGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9w cmxlZnQpKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXBvYmosICIle3R5cGV9VCIsCisJCQkJ CQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKG9wckZvcm0tPm9wcmxlZnQsIC0xKSk7CisJZWxzZQor CQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdf b2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIFJJR0hUQVJHICovCisJdG1wb2JqID0gbmV3 X29ianRyZWVfVkEoIlJJR0hUQVJHPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJyaWdodGFyZyIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZvcm0tPm9wcnJpZ2h0KSkKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXt0eXBlfVQiLAorCQkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfdHlwZShvcHJGb3JtLT5vcHJyaWdodCwgLTEpKTsKKwllbHNlCisJCWFwcGVuZF9u b3RfcHJlc2VudCh0bXBvYmopOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcG9iaikpOworCisJLyogQ09NTVVUQVRPUiAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJDT01NVVRBVE9SPSIsIDEsCisJCQkJCQkJImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJj b21tdXRhdG9yIik7CisJaWYgKE9pZElzVmFsaWQob3ByRm9ybS0+b3ByY29tKSkKKwkJYXBwZW5k X29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtvcGVyfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoT3BlcmF0b3JSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3ByRm9y bS0+b3ByY29tKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXBvYmopKTsKKworCS8qIE5FR0FU T1IgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTkVHQVRPUj0iLCAxLAorCQkJCQkJCSJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibmVnYXRvciIpOworCWlmIChPaWRJc1ZhbGlkKG9wckZv cm0tPm9wcm5lZ2F0ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcG9iaiwgIiV7b3Blcn1E IiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKE9wZXJhdG9yUmVsYXRpb25J ZCwKKwkJCQkJCQkJCQkJCQkJIG9wckZvcm0tPm9wcm5lZ2F0ZSkpOworCWVsc2UKKwkJYXBwZW5k X25vdF9wcmVzZW50KHRtcG9iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9v YmplY3QodG1wb2JqKSk7CisKKwkvKiBSRVNUUklDVCAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVl X1ZBKCJSRVNUUklDVD0iLCAxLAorCQkJCQkJCSJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVz dHJpY3QiKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5vcHJyZXN0KSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVl X2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgb3By Rm9ybS0+b3BycmVzdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkvKiBK T0lOICovCisJdG1wb2JqID0gbmV3X29ianRyZWVfVkEoIkpPSU49IiwgMSwKKwkJCQkJCQkiY2xh dXNlIiwgT2JqVHlwZVN0cmluZywgImpvaW4iKTsKKwlpZiAoT2lkSXNWYWxpZChvcHJGb3JtLT5v cHJqb2luKSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtwcm9jZWR1cmV9RCIs CisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklk LAorCQkJCQkJCQkJCQkJCQkgb3ByRm9ybS0+b3Byam9pbikpOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcG9iaik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmpl Y3QodG1wb2JqKSk7CisKKwkvKiBIQVNIRVMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgi SEFTSEVTIiwgMSwKKwkJCQkJCQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImhhc2hlcyIpOwor CWlmICghb3ByRm9ybS0+b3ByY2FuaGFzaCkKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7 CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wb2JqKSk7CisKKwkv KiBNRVJHRVMgKi8KKwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiTUVSR0VTIiwgMSwKKwkJCQkJ CQkiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1lcmdlcyIpOworCWlmICghb3ByRm9ybS0+b3By Y2FubWVyZ2UpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOworCWxpc3QgPSBsYXBwZW5k KGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcG9iaikpOworCisJYXBwZW5kX2FycmF5X29iamVj dChyZXQsICIoJXtlbGVtczosIH1zKSIsIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKG9wclR1 cCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBUWVBFIHN0 YXRlbWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRZUEUgJXtpZGVudGl0 eX1EICV7ZWxlbXM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9EZWZpbmVT dG10X1R5cGUoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpkZWZpbmUpCit7CisJSGVhcFR1cGxl CXR5cFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAgICAqdG1wOworCUxpc3QJICAg Kmxpc3QgPSBOSUw7CisJY2hhcgkgICAqc3RyOworCURhdHVtCQlkZmx0OworCWJvb2wJCWlzbnVs bDsKKwlGb3JtX3BnX3R5cGUgdHlwRm9ybTsKKworCXR5cFR1cCA9IFNlYXJjaFN5c0NhY2hlMShU WVBFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1Zh bGlkKHR5cFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0eXBl IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOworCXR5cEZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRT VFJVQ1QodHlwVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVFlQRSAle2lk ZW50aXR5fUQiLCAxLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHR5cEZvcm0tPnR5cG5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCSAgTmFtZVN0cih0eXBGb3JtLT50eXBuYW1lKSkpOworCisJLyogU2hlbGwgdHlwZXMuICov CisJaWYgKCF0eXBGb3JtLT50eXBpc2RlZmluZWQpCisJeworCQlSZWxlYXNlU3lzQ2FjaGUodHlw VHVwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNl ICovCisJLyogSU5QVVQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiKElOUFVUPSV7cHJvY2Vk dXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaW5wdXQiLAorCQkJ CQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50 eXBpbnB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkp OworCisJLyogT1VUUFVUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIk9VVFBVVD0le3Byb2Nl ZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm91dHB1dCIsCisJ CQkJCQkgInByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9y X3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cG91dHB1dCkpOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogUkVDRUlWRSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRt cCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUp KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogU0VORCAqLworCXRtcCA9IG5ld19v Ymp0cmVlX1ZBKCJTRU5EPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJz ZW5kIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3Jf cXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0t PnR5cHNlbmQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogVFlQTU9EX0lOICov CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1PRF9JTj0iLCAxLAorCQkJCQkJICJjbGF1c2Ui LCBPYmpUeXBlU3RyaW5nLCAidHlwbW9kX2luIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+ dHlwbW9kaW4pKQorCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwK KwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQs CisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50eXBtb2RpbikpOworCWVsc2UKKwkJYXBwZW5kX25v dF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBUWVBNT0RfT1VUICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlRZUE1P RF9PVVQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1vZF9vdXQi KTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBtb2RvdXQpKQorCQlhcHBlbmRfb2JqZWN0 X29iamVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0eXBGb3JtLT50 eXBtb2RvdXQpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQU5BTFlaRSAqLwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwYW5h bHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJ CQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJ CQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUpKTsKKwllbHNlCisJCWFwcGVuZF9ub3Rf cHJlc2VudCh0bXApOworCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCisJLyogSU5URVJOQUxMRU5HVEggKi8KKwlpZiAodHlwRm9ybS0+dHlwbGVuID09IC0x KQorCQl0bXAgPSBuZXdfb2JqdHJlZSgiSU5URVJOQUxMRU5HVEg9VkFSSUFCTEUiKTsKKwllbHNl CisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTlRFUk5BTExFTkdUSD0le3R5cGxlbn1uIiwgMSwK KwkJCQkJCQkgInR5cGxlbiIsIE9ialR5cGVJbnRlZ2VyLCB0eXBGb3JtLT50eXBsZW4pOworCisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQQVNT RURCWVZBTFVFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIlBBU1NFREJZVkFMVUUiLCAxLAor CQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicGFzc2VkYnl2YWx1ZSIpOworCWlmICgh dHlwRm9ybS0+dHlwYnl2YWwpCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXApOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogWFhYIGl0J3Mgb2Rk IHRvIHJlcHJlc2VudCBhbGlnbm1lbnQgd2l0aCBzY2hlbWEtcXVhbGlmaWVkIHR5cGUgbmFtZXMg Ki8KKwlzd2l0Y2ggKHR5cEZvcm0tPnR5cGFsaWduKQorCXsKKwkJY2FzZSAnZCc6CisJCQlzdHIg PSAicGdfY2F0YWxvZy5mbG9hdDgiOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJc3RyID0g InBnX2NhdGFsb2cuaW50NCI7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQlzdHIgPSAicGdf Y2F0YWxvZy5pbnQyIjsKKwkJCWJyZWFrOworCQljYXNlICdjJzoKKwkJCXN0ciA9ICJwZ19jYXRh bG9nLmJwY2hhciI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZh bGlkIGFsaWdubWVudCAlYyIsIHR5cEZvcm0tPnR5cGFsaWduKTsKKwl9CisKKwkvKiBBTElHTk1F TlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxJR05NRU5UPSV7YWxpZ259cyIsIDIsCisJ CQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbGlnbm1lbnQiLAorCQkJCQkJICJhbGln biIsIE9ialR5cGVTdHJpbmcsIHN0cik7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwkvKiBTVE9SQUdFICovCisJdG1wID0gbmV3X29ianRyZWVfVkEo IlNUT1JBR0U9JXtzdG9yYWdlfXMiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5n LCAic3RvcmFnZSIsCisJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdl dF90eXBlX3N0b3JhZ2UodHlwRm9ybS0+dHlwc3RvcmFnZSkpOworCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJLyogQ0FURUdPUlkgKi8KKwl0bXAgPSBu ZXdfb2JqdHJlZV9WQSgiQ0FURUdPUlk9JXtjYXRlZ29yeX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImNhdGVnb3J5IiwKKwkJCQkJCSAiY2F0ZWdvcnkiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJIHBzcHJpbnRmKCIlYyIsIHR5cEZvcm0tPnR5cGNhdGVnb3J5KSk7CisJ bGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBQUkVG RVJSRUQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUFJFRkVSUkVEPSIsIDEsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwcmVmZXJyZWQiKTsKKwlpZiAoIXR5cEZvcm0tPnR5 cGlzcHJlZmVycmVkKQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVu ZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERFRkFVTFQgKi8KKwlkZmx0 ID0gU3lzQ2FjaGVHZXRBdHRyKFRZUEVPSUQsIHR5cFR1cCwKKwkJCQkJCSAgIEFudW1fcGdfdHlw ZV90eXBkZWZhdWx0LAorCQkJCQkJICAgJmlzbnVsbCk7CisJdG1wID0gbmV3X29ianRyZWVfVkEo IkRFRkFVTFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlZmF1bHQi KTsKKwlpZiAoIWlzbnVsbCkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAiJXtkZWZhdWx0 fXMiLCAiZGVmYXVsdCIsCisJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGZsdCkpOworCWVs c2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBFTEVNRU5UICovCisJdG1wID0gbmV3X29ianRy ZWVfVkEoIkVMRU1FTlQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImVs ZW1lbnQiKTsKKwlpZiAoT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBlbGVtKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QodG1wLCAiZWxlbSIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHR5 cEZvcm0tPnR5cGVsZW0sIC0xKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsK KwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qIERF TElNSVRFUiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUxJTUlURVI9IiwgMSwKKwkJCQkJ CSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImRlbGltaXRlciIpOworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIiV7ZGVsaW19TCIsICJkZWxpbSIsCisJCQkJCQkgcHNwcmludGYoIiVjIiwg dHlwRm9ybS0+dHlwZGVsaW0pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCS8qIENPTExBVEFCTEUgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi Q09MTEFUQUJMRT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiY29sbGF0 YWJsZSIpOworCWlmICghT2lkSXNWYWxpZCh0eXBGb3JtLT50eXBjb2xsYXRpb24pKQorCQlhcHBl bmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKworCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtlbGVtczosIH1zKSIs IGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHR5cFR1cCk7CisKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OIHN0YXRl bWVudC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJ R1VSQVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0YXRpYyBPYmpUcmVl ICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU0NvbmZpZyhPaWQgb2JqZWN0SWQsIERlZmluZVN0bXQg KmRlZmluZSwKKwkJCQkJCQlPYmplY3RBZGRyZXNzIGNvcGllZCkKK3sKKwlIZWFwVHVwbGUJdHNj VHVwOworCUhlYXBUdXBsZQl0c3BUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAg KnRtcDsKKwlGb3JtX3BnX3RzX2NvbmZpZyB0c2NGb3JtOworCUZvcm1fcGdfdHNfcGFyc2VyIHRz cEZvcm07CisJTGlzdAkgICAqbGlzdCA9IE5JTDsKKworCXRzY1R1cCA9IFNlYXJjaFN5c0NhY2hl MShUU0NPTkZJR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1 cGxlSXNWYWxpZCh0c2NUdXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBm b3IgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvbiB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQp OworCXRzY0Zvcm0gPSAoRm9ybV9wZ190c19jb25maWcpIEdFVFNUUlVDVCh0c2NUdXApOworCisJ dHNwVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFRTUEFSU0VST0lELCBPYmplY3RJZEdldERhdHVtKHRz Y0Zvcm0tPmNmZ3BhcnNlcikpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2VyICV1 IiwKKwkJCSB0c2NGb3JtLT5jZmdwYXJzZXIpOworCXRzcEZvcm0gPSAoRm9ybV9wZ190c19wYXJz ZXIpIEdFVFNUUlVDVCh0c3BUdXApOworCisJLyoKKwkgKiBBZGQgdGhlIGRlZmluaXRpb24gY2xh dXNlLiAgSWYgd2UgaGF2ZSBDT1BZJ2VkIGFuIGV4aXN0aW5nIGNvbmZpZywgYWRkCisJICogYSBD T1BZIGNsYXVzZTsgb3RoZXJ3aXNlIGFkZCBhIFBBUlNFUiBjbGF1c2UuCisJICovCisJLyogQ09Q WSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT1BZPSIsIDEsCisJCQkJCQkgImNsYXVzZSIs IE9ialR5cGVTdHJpbmcsICJjb3B5Iik7CisJaWYgKE9pZElzVmFsaWQoY29waWVkLm9iamVjdElk KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiJXt0c2NvbmZpZ31EIiwKKwkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTQ29uZmlnUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIGNvcGllZC5vYmplY3RJZCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRt cCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkv KiBQQVJTRVIgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSU0VSPSIsIDEsCisJCQkJCQkg ImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJwYXJzZXIiKTsKKwlpZiAoY29waWVkLm9iamVjdElk ID09IEludmFsaWRPaWQpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7cGFyc2VyfUQi LAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNl LAorCQkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c3BGb3JtLT5wcnNuYW1lKSkpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFIFRFWFQgU0VB UkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpIiwgMiwKKwkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZSh0c2NGb3JtLT5jZmduYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNjRm9y bS0+Y2ZnbmFtZSkpLAorCQkJCQkJICJlbGVtcyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlS ZWxlYXNlU3lzQ2FjaGUodHNwVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHNjVHVwKTsKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENSRUFURSBURVhUIFNFQVJDSCBQQVJTRVIg c3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUgVEVYVCBTRUFSQ0gg UEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAq CitkZXBhcnNlX0RlZmluZVN0bXRfVFNQYXJzZXIoT2lkIG9iamVjdElkLCBEZWZpbmVTdG10ICpk ZWZpbmUpCit7CisJSGVhcFR1cGxlCXRzcFR1cDsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJl ZSAgICAqdG1wOworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJRm9ybV9wZ190c19wYXJzZXIgdHNw Rm9ybTsKKworCXRzcFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1BBUlNFUk9JRCwgT2JqZWN0SWRH ZXREYXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0c3BUdXApKQorCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgdGV4dCBzZWFyY2ggcGFyc2VyIHdp dGggT0lEICV1IiwKKwkJCSBvYmplY3RJZCk7CisJdHNwRm9ybSA9IChGb3JtX3BnX3RzX3BhcnNl cikgR0VUU1RSVUNUKHRzcFR1cCk7CisKKwkvKiBBZGQgdGhlIGRlZmluaXRpb24gY2xhdXNlICov CisJLyogU1RBUlQgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU1RBUlQ9JXtwcm9jZWR1cmV9 RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzdGFydCIsCisJCQkJCQkg InByb2NlZHVyZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc3N0 YXJ0KSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisK KwkvKiBHRVRUT0tFTiAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJHRVRUT0tFTj0le3Byb2Nl ZHVyZX1EIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgImdldHRva2VuIiwK KwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9m b3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHNwRm9y bS0+cHJzdG9rZW4pKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCS8qIEVORCAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJFTkQ9JXtwcm9jZWR1 cmV9RCIsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJlbmQiLAorCQkJCQkJ ICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFs bmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3JtLT5wcnNl bmQpKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CS8qIExFWFRZUEVTICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIkxFWFRZUEVTPSV7cHJvY2Vk dXJlfUQiLCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibGV4dHlwZXMiLAor CQkJCQkJICJwcm9jZWR1cmUiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c3BGb3Jt LT5wcnNsZXh0eXBlKSk7CisJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisKKwkvKiBIRUFETElORSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJIRUFETElO RT0iLCAxLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAiaGVhZGxpbmUiKTsKKwlp ZiAoT2lkSXNWYWxpZCh0c3BGb3JtLT5wcnNoZWFkbGluZSkpCisJCWFwcGVuZF9vYmplY3Rfb2Jq ZWN0KHRtcCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5h bWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHRzcEZvcm0tPnByc2hl YWRsaW5lKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwlsaXN0ID0gbGFw cGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCXJldCA9IG5ld19vYmp0cmVl X1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggUEFSU0VSICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1z KSIsIDIsCisJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUodHNwRm9ybS0+cHJzbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBO YW1lU3RyKHRzcEZvcm0tPnByc25hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBlQXJyYXks IGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzcFR1cCk7CisJcmV0dXJuIHJldDsKK30KKwor LyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSBzdGF0ZW1lbnQu CisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBURVhUIFNFQVJDSCBESUNUSU9OQVJZ ICV7aWRlbnRpdHl9RCAoJXtlbGVtczosIH1zKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0RlZmluZVN0bXRfVFNEaWN0aW9uYXJ5KE9pZCBvYmplY3RJZCwgRGVmaW5lU3RtdCAqZGVm aW5lKQoreworCUhlYXBUdXBsZQl0c2RUdXA7CisJT2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUg ICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCURhdHVtCQlvcHRpb25zOworCWJvb2wJ CWlzbnVsbDsKKwlGb3JtX3BnX3RzX2RpY3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5 c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQodHNkVHVwKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWls ZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rpb25hcnkgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElk KTsKKwl0c2RGb3JtID0gKEZvcm1fcGdfdHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwor CisJLyogQWRkIHRoZSBkZWZpbml0aW9uIGNsYXVzZSAqLworCS8qIFRFTVBMQVRFICovCisJdG1w ID0gbmV3X29ianRyZWVfVkEoIlRFTVBMQVRFPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5 cGVTdHJpbmcsICJ0ZW1wbGF0ZSIpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgIiV7dGVt cGxhdGV9RCIsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFRTVGVtcGxhdGVS ZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0c2RGb3JtLT5kaWN0dGVtcGxhdGUpKTsKKwlsaXN0 ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCS8qCisJICogb3B0 aW9ucy4gIFhYWCB0aGlzIGlzIGEgcHJldHR5IHVzZWxlc3MgcmVwcmVzZW50YXRpb24sIGJ1dCB3 ZSBjYW4ndCBkbworCSAqIGJldHRlciB3aXRob3V0IG1vcmUgdHNfY2FjaGUuYyBjb29wZXJhdGlv biAuLi4KKwkgKi8KKwlvcHRpb25zID0gU3lzQ2FjaGVHZXRBdHRyKFRTRElDVE9JRCwgdHNkVHVw LAorCQkJCQkJCSAgQW51bV9wZ190c19kaWN0X2RpY3Rpbml0b3B0aW9uLAorCQkJCQkJCSAgJmlz bnVsbCk7CisJdG1wID0gbmV3X29ianRyZWUoIiIpOworCWlmICghaXNudWxsKQorCQlhcHBlbmRf c3RyaW5nX29iamVjdCh0bXAsICIle29wdGlvbnN9cyIsICJvcHRpb25zIiwKKwkJCQkJCQkgVGV4 dERhdHVtR2V0Q1N0cmluZyhvcHRpb25zKSk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQo dG1wKTsKKwlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVEVYVCBTRUFSQ0ggRElDVElPTkFSWSAle2lk ZW50aXR5fUQgKCV7ZWxlbXM6LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzZEZvcm0tPmRpY3RuYW1l c3BhY2UsCisJCQkJCQkJCQkJCQkgIE5hbWVTdHIodHNkRm9ybS0+ZGljdG5hbWUpKSwKKwkJCQkJ CSAiZWxlbXMiLCBPYmpUeXBlQXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzZFR1 cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDUkVBVEUgVEVYVCBTRUFS Q0ggVEVNUExBVEUgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBDUkVBVEUg VEVYVCBTRUFSQ0ggVEVNUExBVEUgJXtpZGVudGl0eX1EICgle2VsZW1zOiwgfXMpCisgKi8KK3N0 YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmaW5lU3RtdF9UU1RlbXBsYXRlKE9pZCBvYmplY3RJ ZCwgRGVmaW5lU3RtdCAqZGVmaW5lKQoreworCUhlYXBUdXBsZQl0c3RUdXA7CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKnRtcDsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUZvcm1f cGdfdHNfdGVtcGxhdGUgdHN0Rm9ybTsKKworCXRzdFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU1RF TVBMQVRFT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJ c1ZhbGlkKHRzdFR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0 ZXh0IHNlYXJjaCB0ZW1wbGF0ZSB3aXRoIE9JRCAldSIsCisJCQkgb2JqZWN0SWQpOworCXRzdEZv cm0gPSAoRm9ybV9wZ190c190ZW1wbGF0ZSkgR0VUU1RSVUNUKHRzdFR1cCk7CisKKwkvKiBBZGQg dGhlIGRlZmluaXRpb24gY2xhdXNlICovCisJLyogSU5JVCAqLworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKCJJTklUPSIsIDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJpbml0Iik7 CisJaWYgKE9pZElzVmFsaWQodHN0Rm9ybS0+dG1wbGluaXQpKQorCQlhcHBlbmRfb2JqZWN0X29i amVjdCh0bXAsICIle3Byb2NlZHVyZX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lX2lkKFByb2NlZHVyZVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSB0c3RGb3JtLT50bXBs aW5pdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJbGlzdCA9IGxhcHBl bmQobGlzdCwgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisKKwkvKiBMRVhJWkUgKi8KKwl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiTEVYSVpFPSV7cHJvY2VkdXJlfUQiLCAyLAorCQkJCQkJICJjbGF1 c2UiLCBPYmpUeXBlU3RyaW5nLCAibGV4aXplIiwKKwkJCQkJCSAicHJvY2VkdXJlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVs YXRpb25JZCwKKwkJCQkJCQkJCQkJCQkgdHN0Rm9ybS0+dG1wbGxleGl6ZSkpOworCWxpc3QgPSBs YXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCisJcmV0ID0gbmV3X29ianRy ZWVfVkEoIkNSRUFURSBURVhUIFNFQVJDSCBURU1QTEFURSAle2lkZW50aXR5fUQgKCV7ZWxlbXM6 LCB9cykiLCAyLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lKHRzdEZvcm0tPnRtcGxuYW1lc3BhY2UsCisJCQkJCQkJCQkJ CQkgIE5hbWVTdHIodHN0Rm9ybS0+dG1wbG5hbWUpKSwKKwkJCQkJCSAiZWxlbXMiLCBPYmpUeXBl QXJyYXksIGxpc3QpOworCisJUmVsZWFzZVN5c0NhY2hlKHRzdFR1cCk7CisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIERlcGFyc2UgYW4gQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiBz dGF0ZW1lbnQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSIFRFWFQgU0VBUkNIIENP TkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFERCBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6 LCB9SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBEUk9QIE1BUFBJTkcgJXtpZl9leGlzdHN9cwor ICogRk9SICV7dG9rZW50eXBlfUkKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdV UkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBGT1IgJXt0b2tlbnR5cGU6LCB9 SSBXSVRIICV7ZGljdGlvbmFyaWVzOiwgfUQKKyAqCU9SCisgKiBBTFRFUiBURVhUIFNFQVJDSCBD T05GSUdVUkFUSU9OICV7aWRlbnRpdHl9RCBBTFRFUiBNQVBQSU5HCisgKiBSRVBMQUNFICV7b2xk X2RpY3Rpb25hcnl9RCBXSVRIICV7bmV3X2RpY3Rpb25hcnl9RAorICoJT1IKKyAqIEFMVEVSIFRF WFQgU0VBUkNIIENPTkZJR1VSQVRJT04gJXtpZGVudGl0eX1EIEFMVEVSIE1BUFBJTkcKKyAqIEZP UiAle3Rva2VudHlwZTosIH1JIFJFUExBQ0UgJXtvbGRfZGljdGlvbmFyeX1EIFdJVEggJXtuZXdf ZGljdGlvbmFyeX1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0NvbmZp Z3VyYXRpb25TdG10KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlBbHRlclRTQ29uZmlndXJh dGlvblN0bXQgKm5vZGUgPSAoQWx0ZXJUU0NvbmZpZ3VyYXRpb25TdG10ICopIGNtZC0+cGFyc2V0 cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJTGlzdAkgICAqbGlz dCA9IE5JTDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCWludAkJCWk7CisKKwlyZXQgPSBuZXdfb2Jq dHJlZSgiQUxURVIgVEVYVCBTRUFSQ0ggQ09ORklHVVJBVElPTiIpOworCisJLyogRGV0ZXJtaW5l IHRoZSBmb3JtYXQgc3RyaW5nIGFwcHJvcHJpYXRlIHRvIGVhY2ggc3ViY29tbWFuZCAqLworCXN3 aXRjaCAobm9kZS0+a2luZCkKKwl7CisJCWNhc2UgQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkc6 CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgQUREIE1BUFBJTkci LAorCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKGNtZC0+ZC5hdHNjZmcuYWRk cmVzcy5jbGFzc0lkLAorCQkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuYWRkcmVzcy5vYmpl Y3RJZCkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkc6 CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5fUQgRFJPUCBNQVBQSU5H IiwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChjbWQtPmQuYXRzY2ZnLmFk ZHJlc3MuY2xhc3NJZCwKKwkJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmFkZHJlc3Mub2Jq ZWN0SWQpKTsKKwkJCXRtcCA9IG5ld19vYmp0cmVlKCJJRiBFWElTVFMiKTsKKwkJCWFwcGVuZF9i b29sX29iamVjdCh0bXAsICJwcmVzZW50Iiwgbm9kZS0+bWlzc2luZ19vayk7CisJCQlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle2lmX2V4aXN0c31zIiwgdG1wKTsKKwkJCWJyZWFrOworCisJ CWNhc2UgQUxURVJfVFNDT05GSUdfQUxURVJfTUFQUElOR19GT1JfVE9LRU46CisJCWNhc2UgQUxU RVJfVFNDT05GSUdfUkVQTEFDRV9ESUNUOgorCQljYXNlIEFMVEVSX1RTQ09ORklHX1JFUExBQ0Vf RElDVF9GT1JfVE9LRU46CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50aXR5 fUQgQUxURVIgTUFQUElORyIsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo Y21kLT5kLmF0c2NmZy5hZGRyZXNzLmNsYXNzSWQsCisJCQkJCQkJCQkJCQkJCQkgY21kLT5kLmF0 c2NmZy5hZGRyZXNzLm9iamVjdElkKSk7CisJCQlicmVhazsKKwl9CisKKwkvKiBBZGQgdGhlIGFm ZmVjdGVkIHRva2VuIGxpc3QsIGZvciBzdWJjb21tYW5kcyB0aGF0IGhhdmUgb25lICovCisJaWYg KG5vZGUtPmtpbmQgPT0gQUxURVJfVFNDT05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2lu ZCA9PSBBTFRFUl9UU0NPTkZJR19BTFRFUl9NQVBQSU5HX0ZPUl9UT0tFTiB8fAorCQlub2RlLT5r aW5kID09IEFMVEVSX1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4gfHwKKwkJbm9kZS0+ a2luZCA9PSBBTFRFUl9UU0NPTkZJR19EUk9QX01BUFBJTkcpCisJeworCQlmb3JlYWNoKGNlbGws IG5vZGUtPnRva2VudHlwZSkKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19zdHJpbmdfb2Jq ZWN0KHN0clZhbChsZmlyc3QoY2VsbCkpKSk7CisJCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAi Rk9SICV7dG9rZW50eXBlOiwgfUkiLCBsaXN0KTsKKwl9CisKKwkvKiBBZGQgZnVydGhlciBzdWJj b21tYW5kLXNwZWNpZmljIGVsZW1lbnRzICovCisJaWYgKG5vZGUtPmtpbmQgPT0gQUxURVJfVFND T05GSUdfQUREX01BUFBJTkcgfHwKKwkJbm9kZS0+a2luZCA9PSBBTFRFUl9UU0NPTkZJR19BTFRF Ul9NQVBQSU5HX0ZPUl9UT0tFTikKKwl7CisJCS8qIEFERCBNQVBQSU5HIGFuZCBBTFRFUiBNQVBQ SU5HIEZPUiBuZWVkIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgKi8KKwkJbGlzdCA9IE5JTDsKKwkJ Zm9yIChpID0gMDsgaSA8IGNtZC0+ZC5hdHNjZmcubmRpY3RzOyBpKyspCisJCXsKKwkJCU9ialRy ZWUgICAgKmRpY3RvYmo7CisKKwkJCWRpY3RvYmogPSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVf aWQoVFNEaWN0aW9uYXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCSAgY21kLT5kLmF0c2NmZy5k aWN0SWRzW2ldKTsKKwkJCWxpc3QgPSBsYXBwZW5kKGxpc3QsCisJCQkJCQkgICBuZXdfb2JqZWN0 X29iamVjdChkaWN0b2JqKSk7CisJCX0KKwkJYXBwZW5kX2FycmF5X29iamVjdChyZXQsICJXSVRI ICV7ZGljdGlvbmFyaWVzOiwgfUQiLCBsaXN0KTsKKwl9CisJZWxzZSBpZiAobm9kZS0+a2luZCA9 PSBBTFRFUl9UU0NPTkZJR19SRVBMQUNFX0RJQ1QgfHwKKwkJCSBub2RlLT5raW5kID09IEFMVEVS X1RTQ09ORklHX1JFUExBQ0VfRElDVF9GT1JfVE9LRU4pCisJeworCQkvKiBUaGUgUkVQTEFDRSBm b3JtcyB3YW50IG9sZCBhbmQgbmV3IGRpY3Rpb25hcmllcyAqLworCQlBc3NlcnQoY21kLT5kLmF0 c2NmZy5uZGljdHMgPT0gMik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlJFUExBQ0Ug JXtvbGRfZGljdGlvbmFyeX1EIiwKKwkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFRTRGljdGlvbmFyeVJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCSBjbWQtPmQuYXRzY2ZnLmRp Y3RJZHNbMF0pKTsKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiV0lUSCAle25ld19kaWN0 aW9uYXJ5fUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoVFNEaWN0aW9u YXJ5UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIGNtZC0+ZC5hdHNjZmcuZGljdElkc1sxXSkp OworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGFuIEFMVEVSIFRFWFQg U0VBUkNIIERJQ1RJT05BUlkgc3RhdGVtZW50LgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBB TFRFUiBURVhUIFNFQVJDSCBESUNUSU9OQVJZICV7aWRlbnRpdHl9RCAoJXtkZWZpbml0aW9uOiwg fXMpCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJUU0RpY3Rpb25hcnlTdG10 KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICp0bXA7CisJRGF0dW0JCW9wdGlvbnM7CisJTGlzdAkgICAqZGVmaW5pdGlvbiA9 IE5JTDsKKwlib29sCQlpc251bGw7CisJSGVhcFR1cGxlCXRzZFR1cDsKKwlGb3JtX3BnX3RzX2Rp Y3QgdHNkRm9ybTsKKworCXRzZFR1cCA9IFNlYXJjaFN5c0NhY2hlMShUU0RJQ1RPSUQsIE9iamVj dElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHNkVHVwKSkK KwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHRleHQgc2VhcmNoIGRpY3Rp b25hcnkgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0c2RGb3JtID0gKEZvcm1fcGdf dHNfZGljdCkgR0VUU1RSVUNUKHRzZFR1cCk7CisKKwkvKgorCSAqIEFkZCB0aGUgZGVmaW5pdGlv biBsaXN0IGFjY29yZGluZyB0byB0aGUgcGdfdHNfZGljdCBkaWN0aW5pdG9wdGlvbgorCSAqIGNv bHVtbgorCSAqLworCW9wdGlvbnMgPSBTeXNDYWNoZUdldEF0dHIoVFNESUNUT0lELCB0c2RUdXAs CisJCQkJCQkJICBBbnVtX3BnX3RzX2RpY3RfZGljdGluaXRvcHRpb24sCisJCQkJCQkJICAmaXNu dWxsKTsKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKCFpc251bGwpCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgIiV7b3B0aW9uc31zIiwgIm9wdGlvbnMiLAorCQkJCQkJCSBUZXh0 RGF0dW1HZXRDU3RyaW5nKG9wdGlvbnMpKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0 bXApOworCisJZGVmaW5pdGlvbiA9IGxhcHBlbmQoZGVmaW5pdGlvbiwgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgVEVYVCBTRUFSQ0ggRElD VElPTkFSWSAle2lkZW50aXR5fUQgKCV7ZGVmaW5pdGlvbjosIH1zKSIsIDIsCisJCQkJCQkgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUo dHNkRm9ybS0+ZGljdG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cih0c2RGb3JtLT5k aWN0bmFtZSkpLAorCQkJCQkJICJkZWZpbml0aW9uIiwgT2JqVHlwZUFycmF5LCBkZWZpbml0aW9u KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0c2RUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisg KiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQgKC4uLikKKyAqCisgKiBWZXJib3NlIHN5 bnRheAorICogUkVTRVR8U0VUICgle29wdGlvbnM6LCB9cykKKyAqLworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVyVGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0 CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJYm9vbAkJaXNfcmVzZXQgPSBz dWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVzZXRSZWxPcHRpb25zOworCisJZm9yZWFjaChjZWxsLCAo TGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0gICAgKmVsZW07CisJCU9ialRyZWUg ICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBk ZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBu ZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlBc3NlcnQoc2V0cyk7CisKKwlyZXR1cm4g bmV3X29ianRyZWVfVkEoIiV7c2V0X3Jlc2V0fXMgKCV7b3B0aW9uczosIH1zKSIsIDIsCisJCQkJ CQkgICJzZXRfcmVzZXQiLCBPYmpUeXBlU3RyaW5nLCBpc19yZXNldCA/ICJSRVNFVCIgOiAiU0VU IiwKKwkJCQkJCSAgIm9wdGlvbnMiLCBPYmpUeXBlQXJyYXksIHNldHMpOworfQorCisvKgorICog ZGVwYXJzZV9WaWV3U3RtdAorICoJCWRlcGFyc2UgYSBWaWV3U3RtdAorICoKKyAqIEdpdmVuIGEg dmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9i alRyZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBWZXJi b3NlIHN5bnRheAorICogQ1JFQVRFICV7b3JfcmVwbGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVX ICV7aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9WaWV3U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlWaWV3U3RtdCAg ICpub2RlID0gKFZpZXdTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJUmVs YXRpb24JcmVsYXRpb247CisKKwlyZWxhdGlvbiA9IHJlbGF0aW9uX29wZW4ob2JqZWN0SWQsIEFj Y2Vzc1NoYXJlTG9jayk7CisKKwlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQ1JFQVRFICV7b3JfcmVw bGFjZX1zICV7cGVyc2lzdGVuY2V9cyBWSUVXICV7aWRlbnRpdHl9RCBBUyAle3F1ZXJ5fXMiLCA0 LAorCQkJCQkJICJvcl9yZXBsYWNlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5yZXBs YWNlID8gIk9SIFJFUExBQ0UiIDogIiIsCisJCQkJCQkgInBlcnNpc3RlbmNlIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBnZXRfcGVyc2lzdGVuY2Vfc3RyKHJlbGF0aW9uLT5yZF9yZWwtPnJlbHBl cnNpc3RlbmNlKSwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5l d19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJ CQkJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSksCisJCQkJCQkg InF1ZXJ5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBwZ19nZXRfdmlld2RlZl9pbnRlcm5hbChv YmplY3RJZCkpOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgQ1JFQVRFIE1hdGVyaWFsaXplZCBW aWV3IHN0YXRlbWVudCwgaXQgaXMgYSB2YXJpYW50IG9mCisgKiBDcmVhdGVUYWJsZUFzU3RtdAor ICoKKyAqIE5vdGUgdGhhdCBDUkVBVEUgVEFCTEUgQVMgU0VMRUNUIElOVE8gY2FuIGFsc28gYmUg ZGVwYXJzZWQgYnkKKyAqIGRlcGFyc2VfQ3JlYXRlVGFibGVBc1N0bXQgdG8gcmVtb3ZlIHRoZSBT RUxFQ1QgSU5UTyBjbGF1c2UuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAle3Bl cnNpc3RlbmNlfXMgW01BVEVSSUFMSVpFRCBWSUVXIHwgVEFCTEVdICV7aWZfbm90X2V4aXN0c31z CisgKiAJCSV7aWRlbnRpdHl9RCAle2NvbHVtbnN9cyBbJXtvbl9jb21taXR9c10gJXt0YWJsZXNw YWNlfXMKKyAqICAJCUFTICV7cXVlcnl9cyAle3dpdGhfbm9fZGF0YX1zIgorICovCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEoT2lkIG9iamVjdElk LCBOb2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVGFibGVBc1N0bXQgKm5vZGUgPSAoQ3JlYXRl VGFibGVBc1N0bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25f b3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2Jq VHJlZSAgICAqdG1wOworCU9ialRyZWUgICAgKnRtcDI7CisJY2hhcgkgICAqZm10OworCUxpc3QJ ICAgKmxpc3QgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKworCS8qIFJlamVjdCB1bnN1cHBv cnRlZCBjYXNlIHJpZ2h0IGF3YXkuICovCisJaWYgKCgoUXVlcnkgKikgKG5vZGUtPnF1ZXJ5KSkt PmNvbW1hbmRUeXBlID09IENNRF9VVElMSVRZKQorCQllbG9nKEVSUk9SLCAidW5pbXBsZW1lbnRl ZCBkZXBhcnNlIG9mIENSRUFURSBUQUJMRSBBUyBFWEVDVVRFIik7CisKKwkvKgorCSAqIE5vdGUg dGhhdCBJTlNFUlQgSU5UTyBpcyBkZXBhcnNlZCBhcyBDUkVBVEUgVEFCTEUgQVMuICBUaGV5IGFy ZQorCSAqIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHN5bm9ueW1zIHNvIHRoZXJlIGlzIG5vIGhh cm0gZnJvbSB0aGlzLgorCSAqLworCWlmIChub2RlLT5vYmp0eXBlID09IE9CSkVDVF9NQVRWSUVX KQorCQlmbXQgPSAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBNQVRFUklBTElaRUQgVklFVyAle2lm X25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQiOworCWVsc2UKKwkJZm10ID0gIkNSRUFURSAle3Bl cnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EIjsKKworCXJl dCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMywKKwkJCQkJCSAicGVyc2lzdGVuY2UiLCBPYmpUeXBl U3RyaW5nLAorCQkJCQkJIGdldF9wZXJzaXN0ZW5jZV9zdHIobm9kZS0+aW50by0+cmVsLT5yZWxw ZXJzaXN0ZW5jZSksCisJCQkJCQkgImlmX25vdF9leGlzdHMiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVYSVNUUyIgOiAiIiwKKwkJCQkJCSAi aWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwkv KiBDT0xVTU5TIGNsYXVzZSAqLworCWlmIChub2RlLT5pbnRvLT5jb2xOYW1lcykKKwl7CisJCWZv cmVhY2goY2VsbCwgbm9kZS0+aW50by0+Y29sTmFtZXMpCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0 LCBuZXdfc3RyaW5nX29iamVjdChzdHJWYWwobGZpcnN0KGNlbGwpKSkpOworCisJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCIoJXtjb2x1bW5zOiwgfUkpIiwgMSwKKwkJCQkJCQkgImNvbHVtbnMiLCBP YmpUeXBlQXJyYXksIGxpc3QpOworCX0KKwllbHNlCisJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIi LCAxLAorCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisKKwlhcHBlbmRf b2JqZWN0X29iamVjdChyZXQsICIle2NvbHVtbnN9cyIsIHRtcCk7CisKKwkvKiBVU0lORyBjbGF1 c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZSgiVVNJTkciKTsKKwlpZiAobm9kZS0+aW50by0+YWNj ZXNzTWV0aG9kKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle2FjY2Vzc19tZXRob2R9 SSIsICJhY2Nlc3NfbWV0aG9kIiwKKwkJCQkJCQkgbm9kZS0+aW50by0+YWNjZXNzTWV0aG9kKTsK KwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAiJXthY2Nlc3NfbWV0aG9kfUki KTsKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7YWNjZXNzX21ldGhvZH1zIiwgdG1wKTsKKworCS8qIFdJVEggY2xhdXNlICovCisJ dG1wID0gbmV3X29ianRyZWUoIldJVEgiKTsKKwlsaXN0ID0gTklMOworCisJZm9yZWFjaChjZWxs LCBub2RlLT5pbnRvLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqb3B0ID0gKERlZkVsZW0g KikgbGZpcnN0KGNlbGwpOworCisJCXRtcDIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7 CisJCWxpc3QgPSBsYXBwZW5kKGxpc3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcDIpKTsKKwl9CisK KwlpZiAobGlzdCkKKwkJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICIoJXt3aXRoOiwgfXMpIiwg bGlzdCk7CisJZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKworCWFwcGVuZF9vYmpl Y3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9jbGF1c2V9cyIsIHRtcCk7CisKKwkvKiBPTiBDT01NSVQg Y2xhdXNlLiAgQ1JFQVRFIE1BVEVSSUFMSVpFRCBWSUVXIGRvZXNuJ3QgaGF2ZSBvbmUgKi8KKwlp ZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCTEUpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KHJldCwgIiV7b25fY29tbWl0fXMiLAorCQkJCQkJCSBkZXBhcnNlX09uQ29tbWl0Q2xhdXNlKG5v ZGUtPmludG8tPm9uQ29tbWl0KSk7CisKKwkvKiBUQUJMRVNQQUNFIGNsYXVzZSAqLworCXRtcCA9 IG5ld19vYmp0cmVlKCJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIik7CisJaWYgKG5vZGUtPmlu dG8tPnRhYmxlU3BhY2VOYW1lKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICIle3RhYmxl c3BhY2V9cyIsICJ0YWJsZXNwYWNlIiwKKwkJCQkJCQkgbm9kZS0+aW50by0+dGFibGVTcGFjZU5h bWUpOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICIle3RhYmxlc3BhY2V9 SSIpOworCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmpl Y3QocmV0LCAiJXt0YWJsZXNwYWNlfXMiLCB0bXApOworCisJLyogQWRkIHRoZSBxdWVyeSAqLwor CUFzc2VydChJc0Eobm9kZS0+cXVlcnksIFF1ZXJ5KSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3Qo cmV0LCAiQVMgJXtxdWVyeX1zIiwgInF1ZXJ5IiwKKwkJCQkJCSBwZ19nZXRfcXVlcnlkZWYoKFF1 ZXJ5ICopIG5vZGUtPnF1ZXJ5LCBmYWxzZSkpOworCisJLyogQWRkIGEgV0lUSCBOTyBEQVRBIGNs YXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIIE5PIERBVEEiLCAxLAorCQkJCQkJ ICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsCisJCQkJCQkgbm9kZS0+aW50by0+c2tpcERhdGEgPyB0 cnVlIDogZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7d2l0aF9ub19kYXRh fXMiLCB0bXApOworCisJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyaWdTdG10IChD UkVBVEUgVFJJR0dFUikKKyAqCisgKiBHaXZlbiBhIHRyaWdnZXIgT0lEIGFuZCB0aGUgcGFyc2Ug dHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcg dGhlIGNyZWF0aW9uIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSAl e2NvbnN0cmFpbnR9cyBUUklHR0VSICV7bmFtZX1JICV7dGltZX1zICV7ZXZlbnRzOiBPUiB9cyBP TgorICogJXtyZWxhdGlvbn1EICV7ZnJvbV90YWJsZX1zICV7Y29uc3RyYWludF9hdHRyczogfXMg Rk9SIEVBQ0gKKyAqICV7Zm9yX2VhY2h9cyAle3doZW59cyBFWEVDVVRFIFBST0NFRFVSRSAle2Z1 bmN0aW9ufXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9DcmVhdGVUcmlnU3RtdChP aWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVUcmlnU3RtdCAqbm9kZSA9 IChDcmVhdGVUcmlnU3RtdCAqKSBwYXJzZXRyZWU7CisJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKwlI ZWFwVHVwbGUJdHJpZ1R1cDsKKwlGb3JtX3BnX3RyaWdnZXIgdHJpZ0Zvcm07CisJT2JqVHJlZSAg ICAqcmV0OworCU9ialRyZWUgICAgKnRtcG9iajsKKwlpbnQJCQl0Z25hcmdzOworCUxpc3QJICAg Kmxpc3QgPSBOSUw7CisJTGlzdAkgICAqZXZlbnRzOworCWNoYXIJICAgKnRyaWd0aW1pbmc7CisK KwlwZ190cmlnZ2VyID0gdGFibGVfb3BlbihUcmlnZ2VyUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVM b2NrKTsKKworCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIs IEFudW1fcGdfdHJpZ2dlcl9vaWQsIG9iamVjdElkKTsKKwl0cmlnRm9ybSA9IChGb3JtX3BnX3Ry aWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCXRyaWd0aW1pbmcgPSBub2RlLT50aW1pbmcg PT0gVFJJR0dFUl9UWVBFX0JFRk9SRSA/ICJCRUZPUkUiIDoKKwkJbm9kZS0+dGltaW5nID09IFRS SUdHRVJfVFlQRV9BRlRFUiA/ICJBRlRFUiIgOgorCQlub2RlLT50aW1pbmcgPT0gVFJJR0dFUl9U WVBFX0lOU1RFQUQgPyAiSU5TVEVBRCBPRiIgOgorCQlOVUxMOworCWlmICghdHJpZ3RpbWluZykK KwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB0cmlnZ2VyIHRpbWluZyB0eXBlICVkIiwgbm9k ZS0+dGltaW5nKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgJXtjb25zdHJhaW50 fXMgVFJJR0dFUiAle25hbWV9SSAle3RpbWV9cyIsIDMsCisJCQkJCQkgImNvbnN0cmFpbnQiLCBP YmpUeXBlU3RyaW5nLCBub2RlLT5pc2NvbnN0cmFpbnQgPyAiQ09OU1RSQUlOVCIgOiAiIiwKKwkJ CQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnRyaWduYW1lLAorCQkJCQkJICJ0aW1l IiwgT2JqVHlwZVN0cmluZywgdHJpZ3RpbWluZyk7CisKKwkvKgorCSAqIERlY29kZSB0aGUgZXZl bnRzIHRoYXQgdGhlIHRyaWdnZXIgZmlyZXMgZm9yLiAgVGhlIG91dHB1dCBpcyBhIGxpc3Q7IGlu CisJICogbW9zdCBjYXNlcyBpdCB3aWxsIGp1c3QgYmUgYSBzdHJpbmcgd2l0aCB0aGUgZXZlbnQg bmFtZSwgYnV0IHdoZW4KKwkgKiB0aGVyZSdzIGFuIFVQREFURSB3aXRoIGEgbGlzdCBvZiBjb2x1 bW5zLCB3ZSByZXR1cm4gYSBKU09OIG9iamVjdC4KKwkgKi8KKwlldmVudHMgPSBOSUw7CisJaWYg KG5vZGUtPmV2ZW50cyAmIFRSSUdHRVJfVFlQRV9JTlNFUlQpCisJCWV2ZW50cyA9IGxhcHBlbmQo ZXZlbnRzLCBuZXdfc3RyaW5nX29iamVjdCgiSU5TRVJUIikpOworCWlmIChub2RlLT5ldmVudHMg JiBUUklHR0VSX1RZUEVfREVMRVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0 cmluZ19vYmplY3QoIkRFTEVURSIpKTsKKwlpZiAobm9kZS0+ZXZlbnRzICYgVFJJR0dFUl9UWVBF X1RSVU5DQVRFKQorCQlldmVudHMgPSBsYXBwZW5kKGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3Qo IlRSVU5DQVRFIikpOworCWlmIChub2RlLT5ldmVudHMgJiBUUklHR0VSX1RZUEVfVVBEQVRFKQor CXsKKwkJaWYgKG5vZGUtPmNvbHVtbnMgPT0gTklMKQorCQl7CisJCQlldmVudHMgPSBsYXBwZW5k KGV2ZW50cywgbmV3X3N0cmluZ19vYmplY3QoIlVQREFURSIpKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCU9ialRyZWUgICAgKnVwZGF0ZTsKKwkJCUxpc3RDZWxsICAgKmNlbGw7CisJCQlMaXN0CSAg ICpjb2xzID0gTklMOworCisJCQkvKgorCQkJICogQ3VycmVudGx5IG9ubHkgVVBEQVRFIE9GIGNh biBiZSBvYmplY3RzIGluIHRoZSBvdXRwdXQgSlNPTiwgYnV0CisJCQkgKiB3ZSBhZGQgYSAia2lu ZCIgZWxlbWVudCBzbyB0aGF0IHVzZXIgY29kZSBjYW4gZGlzdGluZ3Vpc2gKKwkJCSAqIHBvc3Np YmxlIGZ1dHVyZSBuZXcgZXZlbnQgdHlwZXMuCisJCQkgKi8KKwkJCXVwZGF0ZSA9IG5ld19vYmp0 cmVlX1ZBKCJVUERBVEUgT0YiLCAxLAorCQkJCQkJCQkJImtpbmQiLCBPYmpUeXBlU3RyaW5nLCAi dXBkYXRlX29mIik7CisKKwkJCWZvcmVhY2goY2VsbCwgbm9kZS0+Y29sdW1ucykKKwkJCXsKKwkJ CQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChjZWxsKSk7CisKKwkJCQljb2xzID0g bGFwcGVuZChjb2xzLCBuZXdfc3RyaW5nX29iamVjdChjb2xuYW1lKSk7CisJCQl9CisKKwkJCWFw cGVuZF9hcnJheV9vYmplY3QodXBkYXRlLCAiJXtjb2x1bW5zOiwgfUkiLCBjb2xzKTsKKworCQkJ ZXZlbnRzID0gbGFwcGVuZChldmVudHMsIG5ld19vYmplY3Rfb2JqZWN0KHVwZGF0ZSkpOworCQl9 CisJfQorCWFwcGVuZF9hcnJheV9vYmplY3QocmV0LCAiJXtldmVudHM6IE9SIH1zIiwgZXZlbnRz KTsKKworCXRtcG9iaiA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJIHRyaWdGb3JtLT50Z3JlbGlkKTsKKwlhcHBlbmRfb2JqZWN0X29i amVjdChyZXQsICJPTiAle3JlbGF0aW9ufUQiLCB0bXBvYmopOworCisJdG1wb2JqID0gbmV3X29i anRyZWUoIkZST00iKTsKKwlpZiAodHJpZ0Zvcm0tPnRnY29uc3RycmVsaWQpCisJeworCQlPYmpU cmVlICAgICpyZWw7CisKKwkJcmVsID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0 aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkgIHRyaWdGb3JtLT50Z2NvbnN0cnJlbGlkKTsKKwkJ YXBwZW5kX29iamVjdF9vYmplY3QodG1wb2JqLCAiJXtyZWxhdGlvbn1EIiwgcmVsKTsKKwl9CisJ ZWxzZQorCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqKTsKKwlhcHBlbmRfb2JqZWN0X29iamVj dChyZXQsICIle2Zyb21fdGFibGV9cyIsIHRtcG9iaik7CisKKwlpZiAobm9kZS0+ZGVmZXJyYWJs ZSkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3X3N0cmluZ19vYmplY3QoIkRFRkVSUkFCTEUi KSk7CisJaWYgKG5vZGUtPmluaXRkZWZlcnJlZCkKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgbmV3 X3N0cmluZ19vYmplY3QoIklOSVRJQUxMWSBERUZFUlJFRCIpKTsKKwlhcHBlbmRfYXJyYXlfb2Jq ZWN0KHJldCwgIiV7Y29uc3RyYWludF9hdHRyczogfXMiLCBsaXN0KTsKKworCWFwcGVuZF9zdHJp bmdfb2JqZWN0KHJldCwgIkZPUiBFQUNIICV7Zm9yX2VhY2h9cyIsICJmb3JfZWFjaCIsCisJCQkJ CQkgbm9kZS0+cm93ID8gIlJPVyIgOiAiU1RBVEVNRU5UIik7CisKKwl0bXBvYmogPSBuZXdfb2Jq dHJlZSgiV0hFTiIpOworCWlmIChub2RlLT53aGVuQ2xhdXNlKQorCXsKKwkJTm9kZQkgICAqd2hl bkNsYXVzZTsKKwkJRGF0dW0JCXZhbHVlOworCQlib29sCQlpc251bGw7CisKKwkJdmFsdWUgPSBm YXN0Z2V0YXR0cih0cmlnVHVwLCBBbnVtX3BnX3RyaWdnZXJfdGdxdWFsLAorCQkJCQkJCVJlbGF0 aW9uR2V0RGVzY3IocGdfdHJpZ2dlciksICZpc251bGwpOworCQlpZiAoaXNudWxsKQorCQkJZWxv ZyhFUlJPUiwgIm51bGwgdGdxdWFsIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJIE5hbWVTdHIo dHJpZ0Zvcm0tPnRnbmFtZSkpOworCisJCXdoZW5DbGF1c2UgPSBzdHJpbmdUb05vZGUoVGV4dERh dHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXBvYmosICIo JXtjbGF1c2V9cykiLCAiY2xhdXNlIiwKKwkJCQkJCQkgcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVz ZSh0cmlnRm9ybSwKKwkJCQkJCQkJCQkJCQkgICB3aGVuQ2xhdXNlLAorCQkJCQkJCQkJCQkJCSAg IGZhbHNlKSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJYXBw ZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aGVufXMiLCB0bXBvYmopOworCisJdG1wb2JqID0g bmV3X29ianRyZWVfVkEoIiV7ZnVuY25hbWV9RCIsIDEsCisJCQkJCQkJImZ1bmNuYW1lIiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCQluZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJl UmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJdHJpZ0Zvcm0tPnRnZm9pZCkpOworCWxpc3QgPSBO SUw7CisJdGduYXJncyA9IHRyaWdGb3JtLT50Z25hcmdzOworCWlmICh0Z25hcmdzID4gMCkKKwl7 CisJCWJ5dGVhCSAgICp0Z2FyZ3M7CisJCWNoYXIJICAgKmFyZ3N0cjsKKwkJYm9vbAkJaXNudWxs OworCQlpbnQJCQlmaW5keDsKKwkJaW50CQkJbGVudGdhcmdzOworCQljaGFyCSAgICpwOworCisJ CXRnYXJncyA9IERhdHVtR2V0Qnl0ZWFQKGZhc3RnZXRhdHRyKHRyaWdUdXAsCisJCQkJCQkJCQkJ CUFudW1fcGdfdHJpZ2dlcl90Z2FyZ3MsCisJCQkJCQkJCQkJCVJlbGF0aW9uR2V0RGVzY3IocGdf dHJpZ2dlciksCisJCQkJCQkJCQkJCSZpc251bGwpKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWVsb2co RVJST1IsICJudWxsIHRnYXJncyBmb3IgdHJpZ2dlciBcIiVzXCIiLAorCQkJCSBOYW1lU3RyKHRy aWdGb3JtLT50Z25hbWUpKTsKKwkJYXJnc3RyID0gKGNoYXIgKikgVkFSREFUQSh0Z2FyZ3MpOwor CQlsZW50Z2FyZ3MgPSBWQVJTSVpFX0FOWV9FWEhEUih0Z2FyZ3MpOworCisJCXAgPSBhcmdzdHI7 CisJCWZvciAoZmluZHggPSAwOyBmaW5keCA8IHRnbmFyZ3M7IGZpbmR4KyspCisJCXsKKwkJCXNp emVfdAkJdGxlbjsKKworCQkJLyogVmVyaWZ5IHRoYXQgdGhlIGFyZ3VtZW50IGVuY29kaW5nIGlz IGNvcnJlY3QgKi8KKwkJCXRsZW4gPSBzdHJsZW4ocCk7CisJCQlpZiAocCArIHRsZW4gPj0gYXJn c3RyICsgbGVudGdhcmdzKQorCQkJCWVsb2coRVJST1IsICJpbnZhbGlkIGFyZ3VtZW50IHN0cmlu ZyAoJXMpIGZvciB0cmlnZ2VyIFwiJXNcIiIsCisJCQkJCSBhcmdzdHIsIE5hbWVTdHIodHJpZ0Zv cm0tPnRnbmFtZSkpOworCisJCQlsaXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVj dChwKSk7CisKKwkJCXAgKz0gdGxlbiArIDE7CisJCX0KKwl9CisKKwlhcHBlbmRfZm9ybWF0X3N0 cmluZyh0bXBvYmosICIoIik7CisJYXBwZW5kX2FycmF5X29iamVjdCh0bXBvYmosICIle2FyZ3M6 LCB9TCIsIGxpc3QpOwkvKiBtaWdodCBiZSBOSUwgKi8KKwlhcHBlbmRfZm9ybWF0X3N0cmluZyh0 bXBvYmosICIpIik7CisKKwlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICJFWEVDVVRFIFBST0NF RFVSRSAle2Z1bmN0aW9ufXMiLCB0bXBvYmopOworCisJdGFibGVfY2xvc2UocGdfdHJpZ2dlciwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIGEg Q3JlYXRlVXNlck1hcHBpbmdTdG10IChDUkVBVEUgVVNFUiBNQVBQSU5HKQorICoKKyAqIEdpdmVu IGEgVXNlciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LAor ICogcmV0dXJuIGFuIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBDUkVBVEUgVVNFUiBNQVBQSU5H IGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFURSBVU0VSIE1BUFBJTkcg Rk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2Rl cGFyc2VfQ3JlYXRlVXNlck1hcHBpbmdTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVl KQoreworCUNyZWF0ZVVzZXJNYXBwaW5nU3RtdCAqbm9kZSA9IChDcmVhdGVVc2VyTWFwcGluZ1N0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVh cFR1cGxlCXRwOworCUZvcm1fcGdfdXNlcl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAq c2VydmVyOworCisJcmVsID0gdGFibGVfb3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCisJLyoKKwkgKiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBz byB3ZSBkb24ndCBoYXZlIHRvIGRlYWwgd2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4K KwkgKi8KKwl0cCA9IFNlYXJjaFN5c0NhY2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXRE YXR1bShvYmplY3RJZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJS T1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAor CQkJIG9iamVjdElkKTsKKworCWZvcm0gPSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVD VCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRGb3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiAle3JvbGV9UiBT RVJWRVIgJXtzZXJ2ZXJ9SSAle2dlbmVyaWNfb3B0aW9uc31zIiwgMywKKwkJCQkJCSAicm9sZSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3JvbGVfaWQoZm9ybS0+dW11 c2VyKSwKKwkJCQkJCSAic2VydmVyIiwgT2JqVHlwZVN0cmluZywgc2VydmVyLT5zZXJ2ZXJuYW1l LAorCQkJCQkJICJnZW5lcmljX29wdGlvbnMiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIGRlcGFy c2VfRmR3T3B0aW9ucyhub2RlLT5vcHRpb25zLCBOVUxMKSk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHApOworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJcmV0dXJuIHJldDsK K30KKworLyoKKyAqIGRlcGFyc2VfQWx0ZXJVc2VyTWFwcGluZworICoKKyAqIEdpdmVuIGEgVXNl ciBNYXBwaW5nIE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4g YW4KKyAqIE9ialRyZWUgcmVwcmVzZW50aW5nIHRoZSBhbHRlciBjb21tYW5kLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAl e3NlcnZlcn1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJVc2VyTWFwcGlu Z1N0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJQWx0ZXJVc2VyTWFwcGlu Z1N0bXQgKm5vZGUgPSAoQWx0ZXJVc2VyTWFwcGluZ1N0bXQgKikgcGFyc2V0cmVlOworCU9ialRy ZWUgICAgKnJldDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXRwOworCUZvcm1fcGdfdXNl cl9tYXBwaW5nIGZvcm07CisJRm9yZWlnblNlcnZlciAqc2VydmVyOworCisJcmVsID0gdGFibGVf b3BlbihVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCisJLyoKKwkg KiBMb29rdXAgb2JqZWN0IGluIHRoZSBjYXRhbG9nLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGRlYWwg d2l0aAorCSAqIGN1cnJlbnRfdXNlciBhbmQgc3VjaC4KKwkgKi8KKwl0cCA9IFNlYXJjaFN5c0Nh Y2hlMShVU0VSTUFQUElOR09JRCwgT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCWlmICgh SGVhcFR1cGxlSXNWYWxpZCh0cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVk IGZvciB1c2VyIG1hcHBpbmcgd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKworCWZvcm0g PSAoRm9ybV9wZ191c2VyX21hcHBpbmcpIEdFVFNUUlVDVCh0cCk7CisKKwlzZXJ2ZXIgPSBHZXRG b3JlaWduU2VydmVyKGZvcm0tPnVtc2VydmVyKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJB TFRFUiBVU0VSIE1BUFBJTkcgRk9SICV7cm9sZX1SIFNFUlZFUiAle3NlcnZlcn1JICV7Z2VuZXJp Y19vcHRpb25zfXMiLCAzLAorCQkJCQkJICJyb2xlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBu ZXdfb2JqdHJlZV9mb3Jfcm9sZV9pZChmb3JtLT51bXVzZXIpLAorCQkJCQkJICJzZXJ2ZXIiLCBP YmpUeXBlU3RyaW5nLCBzZXJ2ZXItPnNlcnZlcm5hbWUsCisJCQkJCQkgImdlbmVyaWNfb3B0aW9u cyIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgZGVwYXJzZV9GZHdPcHRpb25zKG5vZGUtPm9wdGlv bnMsIE5VTEwpKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJdGFibGVfY2xvc2UocmVsLCBS b3dFeGNsdXNpdmVMb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhbiBB bHRlclN0YXRzU3RtdCAoQUxURVIgU1RBVElTVElDUykKKyAqCisgKiBHaXZlbiBhIGFsdGVyIHN0 YXRpc3RpY3MgT0lEIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVybiBh bgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGFsdGVyIGNvbW1hbmQuCisgKgorICogVmVy Ym9zZSBzeW50YXgKKyAqIEFMVEVSIFNUQVRJU1RJQ1MgJXtpZGVudGl0eX1EIFNFVCBTVEFUSVNU SUNTICV7dGFyZ2V0fW4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9BbHRlclN0YXRz U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlBbHRlclN0YXRzU3RtdCAq bm9kZSA9IChBbHRlclN0YXRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0Owor CUhlYXBUdXBsZQl0cDsKKwlGb3JtX3BnX3N0YXRpc3RpY19leHQgc3RhdGZvcm07CisKKwlpZiAo IW5vZGUtPnN0eHN0YXR0YXJnZXQpCisJCXJldHVybiBOVUxMOworCisJLyogTG9va3VwIG9iamVj dCBpbiB0aGUgY2F0YWxvZyAqLworCXRwID0gU2VhcmNoU3lzQ2FjaGUxKFNUQVRFWFRPSUQsIE9i amVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHApKQor CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3Igc3RhdGlzdGljIHdpdGggT0lE ICV1Iiwgb2JqZWN0SWQpOworCisJc3RhdGZvcm0gPSAoRm9ybV9wZ19zdGF0aXN0aWNfZXh0KSBH RVRTVFJVQ1QodHApOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBTVEFUSVNUSUNTICV7 aWRlbnRpdHl9RCBTRVQgU1RBVElTVElDUyAle3RhcmdldH1uIiwgMiwKKwkJCQkJCSAiaWRlbnRp dHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzdGF0 Zm9ybS0+c3R4bmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJICBOYW1lU3RyKHN0YXRmb3JtLT5zdHhu YW1lKSksCisJCQkJCQkgInRhcmdldCIsIE9ialR5cGVJbnRlZ2VyLCBub2RlLT5zdHhzdGF0dGFy Z2V0KTsKKworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAq IERlcGFyc2UgYSBSZWZyZXNoTWF0Vmlld1N0bXQgKFJFRlJFU0ggTUFURVJJQUxJWkVEIFZJRVcp CisgKgorICogR2l2ZW4gYSBtYXRlcmlhbGl6ZWQgdmlldyBPSUQgYW5kIHRoZSBwYXJzZSB0cmVl IHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuCisgKiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUg cmVmcmVzaCBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBSRUZSRVNIIE1BVEVS SUFMSVpFRCBWSUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EICV7d2l0aF9ub19kYXRh fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWZyZXNoTWF0Vmlld1N0bXQoT2lk IG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVmcmVzaE1hdFZpZXdTdG10ICpub2Rl ID0gKFJlZnJlc2hNYXRWaWV3U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0Owor CU9ialRyZWUgICAgKnRtcDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRUZSRVNIIE1BVEVS SUFMSVpFRCBWSUVXICV7Y29uY3VycmVudGx5fXMgJXtpZGVudGl0eX1EIiwgMiwKKwkJCQkJCSAi Y29uY3VycmVudGx5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBub2RlLT5jb25jdXJyZW50ID8g IkNPTkNVUlJFTlRMWSIgOiAiIiwKKwkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAor CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJIG9iamVjdElkKSk7CisKKwkvKiBBZGQgYSBXSVRIIE5PIERBVEEgY2xhdXNl ICovCisJdG1wID0gbmV3X29ianRyZWVfVkEoIldJVEggTk8gREFUQSIsIDEsCisJCQkJCQkgInBy ZXNlbnQiLCBPYmpUeXBlQm9vbCwKKwkJCQkJCSBub2RlLT5za2lwRGF0YSA/IHRydWUgOiBmYWxz ZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXt3aXRoX25vX2RhdGF9cyIsIHRtcCk7 CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBEZWZFbGVtcywgYXMgdXNlZCBl LmcuIGJ5IEFMVEVSIENPTFVNTiAuLi4gU0VULCBpbnRvIGEgbGlzdCBvZiBTRVQKKyAqICguLi4p ICBvciBSRVNFVCAoLi4uKSBjb250ZW50cy4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXts YWJlbH1zID0gJXt2YWx1ZX1MCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfRGVmRWxl bShEZWZFbGVtICplbGVtLCBib29sIGlzX3Jlc2V0KQoreworCU9ialRyZWUgICAgKnJldDsKKwlP YmpUcmVlICAgICpvcHRuYW1lID0gbmV3X29ianRyZWUoIiIpOworCisJaWYgKGVsZW0tPmRlZm5h bWVzcGFjZSAhPSBOVUxMKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChvcHRuYW1lLCAiJXtzY2hl bWF9SS4iLCAic2NoZW1hIiwKKwkJCQkJCQkgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKworCWFwcGVu ZF9zdHJpbmdfb2JqZWN0KG9wdG5hbWUsICIle2xhYmVsfUkiLCAibGFiZWwiLCBlbGVtLT5kZWZu YW1lKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCIle2xhYmVsfXMiLCAxLAorCQkJCQkJICJs YWJlbCIsIE9ialR5cGVPYmplY3QsIG9wdG5hbWUpOworCisJaWYgKCFpc19yZXNldCkKKwkJYXBw ZW5kX3N0cmluZ19vYmplY3QocmV0LCAiPSAle3ZhbHVlfUwiLCAidmFsdWUiLAorCQkJCQkJCSBl bGVtLT5hcmcgPyBkZWZHZXRTdHJpbmcoZWxlbSkgOgorCQkJCQkJCSBkZWZHZXRCb29sZWFuKGVs ZW0pID8gIlRSVUUiIDogIkZBTFNFIik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSGFu ZGxlIGRlcGFyc2luZyBvZiBEUk9QIGNvbW1hbmRzLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4Cisg KiBEUk9QICVzIElGIEVYSVNUUyAlJXtvYmppZGVudGl0eX1zICV7Y2FzY2FkZX1zCisgKi8KK2No YXIgKgorZGVwYXJzZV9kcm9wX2NvbW1hbmQoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIGNvbnN0 IGNoYXIgKm9iamVjdHR5cGUsCisJCQkJCSBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7CisJU3Ry aW5nSW5mb0RhdGEgc3RyOworCWNoYXIJICAgKmNvbW1hbmQ7CisJY2hhcgkgICAqaWRlbnRpdHkg PSAoY2hhciAqKSBvYmppZGVudGl0eTsKKwlPYmpUcmVlICAgICpzdG10OworCU9ialRyZWUgICAg KnRtcG9iajsKKwlKc29uYgkgICAqanNvbmI7CisKKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwor CXN0bXQgPSBuZXdfb2JqdHJlZV9WQSgiRFJPUCAle29ianR5cGV9cyBJRiBFWElTVFMgJXtvYmpp ZGVudGl0eX1zIiwgMiwKKwkJCQkJCSAgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLCBvYmplY3R0 eXBlLAorCQkJCQkJICAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLCBpZGVudGl0eSk7CisK Kwl0bXBvYmogPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJInByZXNlbnQi LCBPYmpUeXBlQm9vbCwgYmVoYXZpb3IgPT0gRFJPUF9DQVNDQURFKTsKKwlhcHBlbmRfb2JqZWN0 X29iamVjdChzdG10LCAiJXtjYXNjYWRlfXMiLCB0bXBvYmopOworCisJanNvbmIgPSBvYmp0cmVl X3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmIt PnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8q CisgKiBIYW5kbGUgZGVwYXJzaW5nIHNldHRpbmcgb2YgRnVuY3Rpb24KKyAqCisgKiBWZXJib3Nl IHN5bnRheAorICogUkVTRVQgQUxMCisgKiBPUgorICogU0VUICV7c2V0X25hbWV9SSBUTyAle3Nl dF92YWx1ZX1zCisgKiBPUgorICogUkVTRVQgJXtzZXRfbmFtZX1JCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfRnVuY3Rpb25TZXQoVmFyaWFibGVTZXRLaW5kIGtpbmQsIGNoYXIgKm5h bWUsIGNoYXIgKnZhbHVlKQoreworCU9ialRyZWUgICAgKnJldDsKKworCWlmIChraW5kID09IFZB Ul9SRVNFVF9BTEwpCisJCXJldCA9IG5ld19vYmp0cmVlKCJSRVNFVCBBTEwiKTsKKwllbHNlIGlm IChraW5kID09IFZBUl9TRVRfVkFMVUUpCisJeworCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiU0VU ICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVTdHJpbmcsIG5h bWUpOworCisJCS8qCisJCSAqIFNvbWUgR1VDIHZhcmlhYmxlIG5hbWVzIGFyZSAnTElTVCcgdHlw ZSBhbmQgaGVuY2UgbXVzdCBub3QgYmUKKwkJICogcXVvdGVkLgorCQkgKi8KKwkJaWYgKEdldENv bmZpZ09wdGlvbkZsYWdzKG5hbWUsIHRydWUpICYgR1VDX0xJU1RfUVVPVEUpCisJCQlhcHBlbmRf c3RyaW5nX29iamVjdChyZXQsICJUTyAle3NldF92YWx1ZX1zIiwgInNldF92YWx1ZSIsIHZhbHVl KTsKKwkJZWxzZQorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiVE8gJXtzZXRfdmFsdWV9 TCIsICJzZXRfdmFsdWUiLCB2YWx1ZSk7CisJfQorCWVsc2UKKwkJcmV0ID0gbmV3X29ianRyZWVf VkEoIlJFU0VUICV7c2V0X25hbWV9SSIsIDEsCisJCQkJCQkJICJzZXRfbmFtZSIsIE9ialR5cGVT dHJpbmcsIG5hbWUpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYW4gSW5k ZXhTdG10LgorICoKKyAqIEdpdmVuIGFuIGluZGV4IE9JRCBhbmQgdGhlIHBhcnNlIHRyZWUgdGhh dCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5nIHRoZSBjcmVh dGlvbiBjb21tYW5kLgorICoKKyAqIElmIHRoZSBpbmRleCBjb3JyZXNwb25kcyB0byBhIGNvbnN0 cmFpbnQsIE5VTEwgaXMgcmV0dXJuZWQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIENSRUFU RSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtu YW1lfUkgT04KKyAqICV7dGFibGV9RCBVU0lORyAle2luZGV4X2FtfXMgKCV7ZGVmaW5pdGlvbn1z KSAle3dpdGh9cyAle3RhYmxlc3BhY2V9cworICogJXt3aGVyZV9jbGF1c2V9cworICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZSAgICAqcmV0OworCU9ialRyZWUgICAgKnRtcG9iajsKKwlSZWxhdGlvbglpZHhyZWw7 CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRleF9hbTsKKwljaGFyCSAgICpkZWZp bml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hhcgkgICAqdGFibGVzcGFjZTsKKwlj aGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlzY29u c3RyYWludCkKKwl7CisJCS8qCisJCSAqIEluZGV4ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBvdGhl ciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFyYXRlbHk7IHJldHVybiBlbXB0eSBo ZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWR4cmVsID0gcmVsYXRpb25fb3Bl bihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFwcmVsID0gcmVsYXRpb25fb3Blbihp ZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXBnX2dldF9p bmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkgJmluZGV4X2FtLCAmZGVmaW5pdGlv biwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNlLCAmd2hlcmVDbGF1c2UpOworCisJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkNSRUFURSAle3VuaXF1ZX1zIElOREVYICV7Y29uY3VycmVu dGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgT04gJXt0YWJsZX1EIFVTSU5HICV7aW5k ZXhfYW19cyAoJXtkZWZpbml0aW9ufXMpIiwgNywKKwkJCQkJCSAidW5pcXVlIiwgT2JqVHlwZVN0 cmluZywKKwkJCQkJCSBub2RlLT51bmlxdWUgPyAiVU5JUVVFIiA6ICIiLAorCQkJCQkJICJjb25j dXJyZW50bHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09O Q1VSUkVOVExZIiA6ICIiLAorCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCSBub2RlLT5pZl9ub3RfZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIsCisJCQkJ CQkgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1l KGlkeHJlbCksCisJCQkJCQkgInRhYmxlIiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2Jq dHJlZV9mb3JfcXVhbG5hbWUoaGVhcHJlbC0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJ CQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGhlYXByZWwpKSwKKwkJCQkJCSAiaW5kZXhf YW0iLCBPYmpUeXBlU3RyaW5nLCBpbmRleF9hbSwKKwkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5 cGVTdHJpbmcsIGRlZmluaXRpb24pOworCisJLyogcmVsb3B0aW9ucyAqLworCXRtcG9iaiA9IG5l d19vYmp0cmVlKCJXSVRIIik7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2Jq ZWN0KHRtcG9iaiwgIigle29wdHN9cykiLCAib3B0cyIsIHJlbG9wdGlvbnMpOworCWVsc2UKKwkJ YXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAi JXt3aXRofXMiLCB0bXBvYmopOworCisJLyogdGFibGVzcGFjZSAqLworCXRtcG9iaiA9IG5ld19v Ymp0cmVlKCJUQUJMRVNQQUNFIik7CisJaWYgKHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcG9iaiwgIiV7dGFibGVzcGFjZX1zIiwgInRhYmxlc3BhY2UiLCB0YWJsZXNwYWNl KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudCh0bXBvYmopOworCWFwcGVuZF9vYmplY3Rf b2JqZWN0KHJldCwgIiV7dGFibGVzcGFjZX1zIiwgdG1wb2JqKTsKKworCS8qIFdIRVJFIGNsYXVz ZSAqLworCXRtcG9iaiA9IG5ld19vYmp0cmVlKCJXSEVSRSIpOworCWlmICh3aGVyZUNsYXVzZSkK KwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wb2JqLCAiJXt3aGVyZX1zIiwgIndoZXJlIiwgd2hl cmVDbGF1c2UpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVzZW50KHRtcG9iaik7CisJYXBwZW5k X29iamVjdF9vYmplY3QocmV0LCAiJXt3aGVyZV9jbGF1c2V9cyIsIHRtcG9iaik7CisKKwl0YWJs ZV9jbG9zZShpZHhyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJdGFibGVfY2xvc2UoaGVhcHJlbCwg QWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRo ZSBJTkhFUklUUyByZWxhdGlvbnMuCisgKgorICogR2l2ZW4gYSB0YWJsZSBPSUQsIHJldHVybiBh IHNjaGVtYS1xdWFsaWZpZWQgdGFibGUgbGlzdCByZXByZXNlbnRpbmcKKyAqIHRoZSBwYXJlbnQg dGFibGVzLgorICovCitzdGF0aWMgTGlzdCAqCitkZXBhcnNlX0luaFJlbGF0aW9ucyhPaWQgb2Jq ZWN0SWQpCit7CisJTGlzdAkgICAqcGFyZW50cyA9IE5JTDsKKwlSZWxhdGlvbglpbmhSZWw7CisJ U3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJSGVhcFR1cGxlCXR1cGxlOwor CisJaW5oUmVsID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxv Y2spOworCisJU2NhbktleUluaXQoJmtleSwKKwkJCQlBbnVtX3BnX2luaGVyaXRzX2luaHJlbGlk LAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERh dHVtKG9iamVjdElkKSk7CisKKwlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGluaFJlbCwgSW5o ZXJpdHNSZWxpZFNlcW5vSW5kZXhJZCwKKwkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOwor CisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW4p KSkKKwl7CisJCU9ialRyZWUgICAgKnBhcmVudDsKKwkJRm9ybV9wZ19pbmhlcml0cyBmb3JtSW5o ID0gKEZvcm1fcGdfaW5oZXJpdHMpIEdFVFNUUlVDVCh0dXBsZSk7CisKKwkJcGFyZW50ID0gbmV3 X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJ IGZvcm1JbmgtPmluaHBhcmVudCk7CisJCXBhcmVudHMgPSBsYXBwZW5kKHBhcmVudHMsIG5ld19v YmplY3Rfb2JqZWN0KHBhcmVudCkpOworCX0KKworCXN5c3RhYmxlX2VuZHNjYW4oc2Nhbik7CisJ dGFibGVfY2xvc2UoaW5oUmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCXJldHVybiBwYXJlbnRz OworfQorCisvKgorICogRGVwYXJzZSB0aGUgT04gQ09NTUlUIC4uLiBjbGF1c2UgZm9yIENSRUFU RSAuLi4gVEVNUE9SQVJZIC4uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBPTiBDT01NSVQg JXtvbl9jb21taXRfdmFsdWV9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX09uQ29t bWl0Q2xhdXNlKE9uQ29tbWl0QWN0aW9uIG9wdGlvbikKK3sKKwlPYmpUcmVlICAgICpyZXQgID0g bmV3X29ianRyZWUoIk9OIENPTU1JVCIpOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBP TkNPTU1JVF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtvbl9jb21taXRf dmFsdWV9cyIsCisJCQkJCQkJCSAib25fY29tbWl0X3ZhbHVlIiwgIkRST1AiKTsKKwkJCWJyZWFr OworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICIle29uX2NvbW1pdF92YWx1ZX1zIiwKKwkJCQkJCQkJICJvbl9jb21taXRfdmFsdWUi LCAiREVMRVRFIFJPV1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVf Uk9XUzoKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJldCwgIiV7b25fY29tbWl0X3ZhbHVlfXMi LAorCQkJCQkJCQkgIm9uX2NvbW1pdF92YWx1ZSIsICJQUkVTRVJWRSBST1dTIik7CisJCQlicmVh azsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9vYmplY3QocmV0LCAi JXtvbl9jb21taXRfdmFsdWV9cyIpOworCQkJYXBwZW5kX25vdF9wcmVzZW50KHJldCk7CisJCQli cmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIFJlbmFtZVN0 bXQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIEFMVEVSICVzICV7aWZfZXhpc3RzfXMgJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFBPTElDWSAl e2lmX2V4aXN0c31zICV7cG9saWN5bmFtZX1JIE9OICV7aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtu ZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiBvYmp0eXBlICV7aWRlbnRpdHl9RCBSRU5BTUUgQVRU UklCVVRFICV7Y29sbmFtZX1JIFRPICV7bmV3bmFtZX1JICV7Y2FzY2FkZX1zCisgKiBPUgorICog QUxURVIgb2JqdHlwZSAle2lmX2V4aXN0c31zICUle2lkZW50aXR5fUQgUkVOQU1FIENPTFVNTiAl e2NvbG5hbWV9SSBUTyAle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5 fXMgUkVOQU1FIFRPICUle25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSICVzICUle2lkZW50aXR5 fUQgVVNJTkcgJSV7aW5kZXhfbWV0aG9kfXMgUkVOQU1FIFRPICUle25ld25hbWV9SQorICogT1IK KyAqIEFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JCisgKiBP UgorICogQUxURVIgUlVMRSAle3J1bGVuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAl e25ld25hbWV9SQorICogT1IKKyAqIEFMVEVSIFRSSUdHRVIgJXt0cmlnZ2VybmFtZX1JIE9OICV7 aWRlbnRpdHl9RCBSRU5BTUUgVE8gJXtuZXduYW1lfUkKKyAqIE9SCisgKiBBTFRFUiAlcyAlJXtp ZGVudGl0eX1EIFJFTkFNRSBUTyAlJXtuZXduYW1lfUkKKyAqLworc3RhdGljIE9ialRyZWUgKgor ZGVwYXJzZV9SZW5hbWVTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywgTm9kZSAqcGFyc2V0cmVl KQoreworCVJlbmFtZVN0bXQgKm5vZGUgPSAoUmVuYW1lU3RtdCAqKSBwYXJzZXRyZWU7CisJT2Jq VHJlZSAgICAqcmV0OworCVJlbGF0aW9uCXJlbGF0aW9uOworCU9pZAkJCXNjaGVtYUlkOworCisJ LyoKKwkgKiBJbiBhbiBBTFRFUiAuLiBSRU5BTUUgY29tbWFuZCwgd2UgZG9uJ3QgaGF2ZSB0aGUg b3JpZ2luYWwgbmFtZSBvZiB0aGUKKwkgKiBvYmplY3QgaW4gc3lzdGVtIGNhdGFsb2dzOiBzaW5j ZSB3ZSBpbnNwZWN0IHRoZW0gYWZ0ZXIgdGhlIGNvbW1hbmQgaGFzCisJICogZXhlY3V0ZWQsIHRo ZSBvbGQgbmFtZSBpcyBhbHJlYWR5IGdvbmUuICBUaGVyZWZvcmUsIHdlIGV4dHJhY3QgaXQgZnJv bQorCSAqIHRoZSBwYXJzZSBub2RlLiAgTm90ZSB3ZSBzdGlsbCBleHRyYWN0IHRoZSBzY2hlbWEg bmFtZSBmcm9tIHRoZSBjYXRhbG9nCisJICogKGl0IG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIHRo ZSBwYXJzZSBub2RlKTsgaXQgY2Fubm90IHBvc3NpYmx5IGhhdmUKKwkgKiBjaGFuZ2VkIGFueXdh eS4KKwkgKi8KKwlzd2l0Y2ggKG5vZGUtPnJlbmFtZVR5cGUpCisJeworCQljYXNlIE9CSkVDVF9U QUJMRToKKwkJY2FzZSBPQkpFQ1RfSU5ERVg6CisJCWNhc2UgT0JKRUNUX1NFUVVFTkNFOgorCQlj YXNlIE9CSkVDVF9WSUVXOgorCQljYXNlIE9CSkVDVF9NQVRWSUVXOgorCQkJcmVsYXRpb24gPSBy ZWxhdGlvbl9vcGVuKGFkZHJlc3Mub2JqZWN0SWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlzY2hl bWFJZCA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbGF0aW9uKTsKKwkJCXJldCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lmX2V4aXN0c31zICV7aWRlbnRpdHl9RCBSRU5B TUUgVE8gJXtuZXduYW1lfUkiLCA0LAorCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwgZmFsc2UpLAor CQkJCQkJCQkgImlmX2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCSBub2RlLT5taXNz aW5nX29rID8gIklGIEVYSVNUUyIgOiAiIiwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVP YmplY3QsCisJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUoc2NoZW1hSWQsCisJCQkJ CQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpLAorCQkJCQkJCQkgIm5ld25hbWUi LCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQlyZWxhdGlvbl9j bG9zZShyZWxhdGlvbiwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JK RUNUX1BPTElDWToKKwkJCXsKKwkJCQlIZWFwVHVwbGUJcG9sVHVwOworCQkJCUZvcm1fcGdfcG9s aWN5IHBvbEZvcm07CisJCQkJUmVsYXRpb24JcGdfcG9saWN5OworCQkJCVNjYW5LZXlEYXRhIGtl eTsKKwkJCQlTeXNTY2FuRGVzYyBzY2FuOworCisJCQkJcGdfcG9saWN5ID0gcmVsYXRpb25fb3Bl bihQb2xpY3lSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCVNjYW5LZXlJbml0KCZr ZXksIEFudW1fcGdfcG9saWN5X29pZCwKKwkJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZf T0lERVEsCisJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShhZGRyZXNzLm9iamVjdElkKSk7CisJCQkJ c2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihwZ19wb2xpY3ksIFBvbGljeU9pZEluZGV4SWQsIHRy dWUsCisJCQkJCQkJCQkJICBOVUxMLCAxLCAma2V5KTsKKwkJCQlwb2xUdXAgPSBzeXN0YWJsZV9n ZXRuZXh0KHNjYW4pOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwb2xUdXApKQorCQkJCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcG9saWN5IHdpdGggT0lEICV1IiwK KwkJCQkJCSBhZGRyZXNzLm9iamVjdElkKTsKKwkJCQlwb2xGb3JtID0gKEZvcm1fcGdfcG9saWN5 KSBHRVRTVFJVQ1QocG9sVHVwKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBQ T0xJQ1kgJXtpZl9leGlzdHN9cyAle3BvbGljeW5hbWV9SSBPTiAle2lkZW50aXR5fUQgUkVOQU1F IFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJCSAiaWZfZXhpc3RzIiwgT2JqVHlwZVN0cmlu ZywKKwkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIiwKKwkJCQkJ CQkJCSAicG9saWN5bmFtZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgbm9kZS0+c3VibmFt ZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIHBvbEZvcm0tPnBvbHJlbGlkKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkgbm9kZS0+bmV3bmFtZSk7CisJCQkJc3lzdGFibGVfZW5kc2NhbihzY2Fu KTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19wb2xpY3ksIEFjY2Vzc1NoYXJlTG9jayk7CisJCQl9 CisJCQlicmVhazsKKworCQljYXNlIE9CSkVDVF9BVFRSSUJVVEU6CisJCWNhc2UgT0JKRUNUX0NP TFVNTjoKKwkJCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihhZGRyZXNzLm9iamVjdElkLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJc2NoZW1hSWQgPSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWxhdGlv bik7CisKKwkJCWlmIChub2RlLT5yZW5hbWVUeXBlID09IE9CSkVDVF9BVFRSSUJVVEUpCisJCQkJ cmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIFRZUEUgJXtpZGVudGl0eX1EIFJFTkFNRSBBVFRS SUJVVEUgJXtjb2xuYW1lfUkiLCAyLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmpl Y3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHNjaGVtYUlkLAorCQkJCQkJ CQkJCQkJCQkJICBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSksCisJCQkJCQkJCQkgImNvbG5hbWUi LCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lKTsKKwkJCWVsc2UKKwkJCXsKKwkJCQlyZXQg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMiLCAxLAorCQkJCQkJCQkJICJvYmp0 eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5y ZWxhdGlvblR5cGUsIGZhbHNlKSk7CisKKwkJCQkvKiBDb21wb3NpdGUgdHlwZXMgZG8gbm90IHN1 cHBvcnQgSUYgRVhJU1RTICovCisJCQkJaWYgKG5vZGUtPnJlbmFtZVR5cGUgPT0gT0JKRUNUX0NP TFVNTikKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtpZl9leGlzdHN9cyIsCisJ CQkJCQkJCQkJICJpZl9leGlzdHMiLAorCQkJCQkJCQkJCSBub2RlLT5taXNzaW5nX29rID8gIklG IEVYSVNUUyIgOiAiIik7CisKKwkJCQlhcHBlbmRfb2JqZWN0X29iamVjdChyZXQsICIle2lkZW50 aXR5fUQiLAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShzY2hlbWFJZCwKKwkJ CQkJCQkJCQkJCQkJCSAgbm9kZS0+cmVsYXRpb24tPnJlbG5hbWUpKTsKKwkJCQlhcHBlbmRfc3Ry aW5nX29iamVjdChyZXQsICJSRU5BTUUgQ09MVU1OICV7Y29sbmFtZX1JIiwKKwkJCQkJCQkJCSAi Y29sbmFtZSIsIG5vZGUtPnN1Ym5hbWUpOworCQkJfQorCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChyZXQsICJUTyAle25ld25hbWV9SSIsICJuZXduYW1lIiwKKwkJCQkJCQkJIG5vZGUtPm5ld25h bWUpOworCisJCQlpZiAobm9kZS0+cmVuYW1lVHlwZSA9PSBPQkpFQ1RfQVRUUklCVVRFKQorCQkJ CWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7Y2FzY2FkZX1zIiwKKwkJCQkJCQkJCSBuZXdf b2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDEsCisJCQkJCQkJCQkJCQkJInByZXNlbnQiLCBPYmpUeXBl Qm9vbCwKKwkJCQkJCQkJCQkJCQlub2RlLT5iZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpKTsKKwor CQkJcmVsYXRpb25fY2xvc2UocmVsYXRpb24sIEFjY2Vzc1NoYXJlTG9jayk7CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJY2FzZSBPQkpFQ1RfUk9VVElORToKKwkJCXsK KwkJCQljaGFyCSAgICppZGVudDsKKwkJCQlIZWFwVHVwbGUJcHJvY3R1cDsKKwkJCQlGb3JtX3Bn X3Byb2MgcHJvY2Zvcm07CisJCQkJTGlzdAkgICAqaWRlbnRpdHk7CisKKwkJCQlBc3NlcnQoSXNB KG5vZGUtPm9iamVjdCwgT2JqZWN0V2l0aEFyZ3MpKTsKKwkJCQlpZGVudGl0eSA9ICgoT2JqZWN0 V2l0aEFyZ3MgKikgbm9kZS0+b2JqZWN0KS0+b2JqbmFtZTsKKworCQkJCXByb2N0dXAgPSBTZWFy Y2hTeXNDYWNoZTEoUFJPQ09JRCwKKwkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oYWRkcmVz cy5vYmplY3RJZCkpOworCQkJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHByb2NlZHVyZSB3aXRoIE9JRCAl dSIsCisJCQkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19w cm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwkJCQkvKiBYWFggZG9lcyB0aGlzIHdvcmsgZm9y IG9yZGVyZWQtc2V0IGFnZ3JlZ2F0ZXM/ICovCisJCQkJaWRlbnQgPSBwc3ByaW50ZigiJXMlcyIs CisJCQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihnZXRfbmFtZXNwYWNlX25hbWUo cHJvY2Zvcm0tPnByb25hbWVzcGFjZSksCisJCQkJCQkJCQkJCQkJCQlzdHJWYWwobGxhc3QoaWRl bnRpdHkpKSksCisJCQkJCQkJCSBmb3JtYXRfcHJvY2VkdXJlX2FyZ3MoYWRkcmVzcy5vYmplY3RJ ZCwgdHJ1ZSkpOworCisJCQkJcmV0ID0gbmV3X29ianRyZWVfVkEoIkFMVEVSICV7b2JqdHlwZX1z ICV7aWRlbnRpdHl9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAzLAorCQkJCQkJCQkJICJvYmp0 eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdpZnlfb2JqdHlwZShub2RlLT5y ZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywg aWRlbnQsCisJCQkJCQkJCQkgIm5ld25hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1l KTsKKworCQkJCVJlbGVhc2VTeXNDYWNoZShwcm9jdHVwKTsKKwkJCX0KKwkJCWJyZWFrOworCisJ CWNhc2UgT0JKRUNUX09QQ0xBU1M6CisJCQl7CisJCQkJSGVhcFR1cGxlCW9wY1R1cDsKKwkJCQlG b3JtX3BnX29wY2xhc3Mgb3BjRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQljaGFy CSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wY25hbWU7CisKKwkJCQlvcGNUdXAgPSBT ZWFyY2hTeXNDYWNoZTEoQ0xBT0lELCBPYmplY3RJZEdldERhdHVtKGFkZHJlc3Mub2JqZWN0SWQp KTsKKwkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQob3BjVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwg ImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIG9wY2xhc3Mgd2l0aCBPSUQgJXUiLAorCQkJCQkJIGFk ZHJlc3Mub2JqZWN0SWQpOworCisJCQkJb3BjRm9ybSA9IChGb3JtX3BnX29wY2xhc3MpIEdFVFNU UlVDVChvcGNUdXApOworCisJCQkJb2xkbmFtZXMgPSBsaXN0X2NvcHlfdGFpbCgoTGlzdCAqKSBu b2RlLT5vYmplY3QsIDEpOworCisJCQkJLyogRGVjb25zdHJ1Y3QgdGhlIG5hbWUgbGlzdCAqLwor CQkJCURlY29uc3RydWN0UXVhbGlmaWVkTmFtZShvbGRuYW1lcywgJnNjaGVtYW5hbWUsICZvcGNu YW1lKTsKKworCQkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAle2lk ZW50aXR5fUQgVVNJTkcgJXtpbmRleF9tZXRob2R9cyBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCA0 LAorCQkJCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBzdHJpbmdp Znlfb2JqdHlwZShub2RlLT5yZW5hbWVUeXBlLCBmYWxzZSksCisJCQkJCQkJCQkgImlkZW50aXR5 IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUob3Bj Rm9ybS0+b3BjbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJICBvcGNuYW1lKSwKKwkJCQkJCQkJ CSAiaW5kZXhfbWV0aG9kIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBnZXRfYW1fbmFtZShv cGNGb3JtLT5vcGNtZXRob2QpLAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywg bm9kZS0+bmV3bmFtZSk7CisKKwkJCQlSZWxlYXNlU3lzQ2FjaGUob3BjVHVwKTsKKwkJCX0KKwkJ CWJyZWFrOworCisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJeworCQkJCUhlYXBUdXBsZQlv cGZUdXA7CisJCQkJSGVhcFR1cGxlCWFtVHVwOworCQkJCUZvcm1fcGdfb3BmYW1pbHkgb3BmRm9y bTsKKwkJCQlGb3JtX3BnX2FtCWFtRm9ybTsKKwkJCQlMaXN0CSAgICpvbGRuYW1lczsKKwkJCQlj aGFyCSAgICpzY2hlbWFuYW1lOworCQkJCWNoYXIJICAgKm9wZm5hbWU7CisKKwkJCQlvcGZUdXAg PSBTZWFyY2hTeXNDYWNoZTEoT1BGQU1JTFlPSUQsIGFkZHJlc3Mub2JqZWN0SWQpOworCQkJCWlm ICghSGVhcFR1cGxlSXNWYWxpZChvcGZUdXApKQorCQkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3Igb3BlcmF0b3IgZmFtaWx5IHdpdGggT0lEICV1IiwKKwkJCQkJCSBhZGRy ZXNzLm9iamVjdElkKTsKKwkJCQlvcGZGb3JtID0gKEZvcm1fcGdfb3BmYW1pbHkpIEdFVFNUUlVD VChvcGZUdXApOworCisJCQkJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElk R2V0RGF0dW0ob3BmRm9ybS0+b3BmbWV0aG9kKSk7CisJCQkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlk KGFtVHVwKSkKKwkJCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGFjY2Vz cyBtZXRob2Qgd2l0aCBPSUQgJXUiLAorCQkJCQkJIG9wZkZvcm0tPm9wZm1ldGhvZCk7CisKKwkJ CQlhbUZvcm0gPSAoRm9ybV9wZ19hbSkgR0VUU1RSVUNUKGFtVHVwKTsKKworCQkJCW9sZG5hbWVz ID0gbGlzdF9jb3B5X3RhaWwoKExpc3QgKikgbm9kZS0+b2JqZWN0LCAxKTsKKworCQkJCS8qIERl Y29uc3RydWN0IHRoZSBuYW1lIGxpc3QgKi8KKwkJCQlEZWNvbnN0cnVjdFF1YWxpZmllZE5hbWUo b2xkbmFtZXMsICZzY2hlbWFuYW1lLCAmb3BmbmFtZSk7CisKKwkJCQlyZXQgPSBuZXdfb2JqdHJl ZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIFVTSU5HICV7aW5kZXhfbWV0aG9k fXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgNCwKKwkJCQkJCQkJCSAib2JqdHlwZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+cmVuYW1lVHlwZSwg ZmFsc2UpLAorCQkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkg bmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKG9wZkZvcm0tPm9wZm5hbWVzcGFjZSwKKwkJCQkJCQkJ CQkJCQkJCSAgb3BmbmFtZSksCisJCQkJCQkJCQkgImluZGV4X21ldGhvZCIsIE9ialR5cGVTdHJp bmcsCisJCQkJCQkJCQkgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkJCQkgIm5ld25h bWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKworCQkJCVJlbGVhc2VTeXNDYWNo ZShhbVR1cCk7CisJCQkJUmVsZWFzZVN5c0NhY2hlKG9wZlR1cCk7CisJCQl9CisJCQlicmVhazsK KworCQljYXNlIE9CSkVDVF9TQ0hFTUE6CisJCQlyZXQgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIg U0NIRU1BICV7aWRlbnRpdHl9SSBSRU5BTUUgVE8gJXtuZXduYW1lfUkiLCAyLAorCQkJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgbm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJICJuZXdu YW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQljYXNl IE9CSkVDVF9GRFc6CisJCWNhc2UgT0JKRUNUX0xBTkdVQUdFOgorCQljYXNlIE9CSkVDVF9GT1JF SUdOX1NFUlZFUjoKKwkJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiAle29ianR5cGV9cyAl e2lkZW50aXR5fXMgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJICJvYmp0eXBl IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFt ZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsCisJCQkJ CQkJCSBzdHJWYWwoY2FzdE5vZGUoU3RyaW5nLCBub2RlLT5vYmplY3QpKSwKKwkJCQkJCQkJICJu ZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisJCQlicmVhazsKKworCQlj YXNlIE9CSkVDVF9SVUxFOgorCQkJeworCQkJCUhlYXBUdXBsZQlyZXdyVHVwOworCQkJCUZvcm1f cGdfcmV3cml0ZSByZXdyRm9ybTsKKwkJCQlSZWxhdGlvbglwZ19yZXdyaXRlOworCisJCQkJcGdf cmV3cml0ZSA9IHJlbGF0aW9uX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisJCQkJcmV3clR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQocGdfcmV3cml0ZSwg QW51bV9wZ19yZXdyaXRlX29pZCwgYWRkcmVzcy5vYmplY3RJZCk7CisJCQkJcmV3ckZvcm0gPSAo Rm9ybV9wZ19yZXdyaXRlKSBHRVRTVFJVQ1QocmV3clR1cCk7CisKKwkJCQlyZXQgPSBuZXdfb2Jq dHJlZV9WQSgiQUxURVIgUlVMRSAle3J1bGVuYW1lfUkgT04gJXtpZGVudGl0eX1EIFJFTkFNRSBU TyAle25ld25hbWV9SSIsIDMsCisJCQkJCQkJCQkgInJ1bGVuYW1lIiwgT2JqVHlwZVN0cmluZywg bm9kZS0+c3VibmFtZSwKKwkJCQkJCQkJCSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJ CQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkJCQkgIm5ld25hbWUi LCBPYmpUeXBlU3RyaW5nLCBub2RlLT5uZXduYW1lKTsKKwkJCQlyZWxhdGlvbl9jbG9zZShwZ19y ZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpF Q1RfVFJJR0dFUjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJdHJpZ1R1cDsKKwkJCQlGb3JtX3BnX3Ry aWdnZXIgdHJpZ0Zvcm07CisJCQkJUmVsYXRpb24JcGdfdHJpZ2dlcjsKKworCQkJCXBnX3RyaWdn ZXIgPSByZWxhdGlvbl9vcGVuKFRyaWdnZXJSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCXRyaWdUdXAgPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKHBnX3RyaWdnZXIsIGdldF9v YmplY3RfYXR0bnVtX29pZChhZGRyZXNzLmNsYXNzSWQpLCBhZGRyZXNzLm9iamVjdElkKTsKKwkJ CQl0cmlnRm9ybSA9IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJ CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBUUklHR0VSICV7dHJpZ2dlcm5hbWV9SSBPTiAl e2lkZW50aXR5fUQgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwgMywKKwkJCQkJCQkJCSAidHJpZ2dl cm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5zdWJuYW1lLAorCQkJCQkJCQkJICJpZGVudGl0 eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lk KFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgdHJpZ0Zvcm0tPnRncmVsaWQp LAorCQkJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+bmV3bmFtZSk7CisK KwkJCQlyZWxhdGlvbl9jbG9zZShwZ190cmlnZ2VyLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJfQor CQkJYnJlYWs7CisKKwkJY2FzZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQljYXNlIE9CSkVDVF9TVEFU SVNUSUNfRVhUOgorCQljYXNlIE9CSkVDVF9UWVBFOgorCQljYXNlIE9CSkVDVF9DT05WRVJTSU9O OgorCQljYXNlIE9CSkVDVF9ET01BSU46CisJCWNhc2UgT0JKRUNUX1RTRElDVElPTkFSWToKKwkJ Y2FzZSBPQkpFQ1RfVFNQQVJTRVI6CisJCWNhc2UgT0JKRUNUX1RTVEVNUExBVEU6CisJCWNhc2Ug T0JKRUNUX1RTQ09ORklHVVJBVElPTjoKKwkJCXsKKwkJCQlIZWFwVHVwbGUJb2JqVHVwOworCQkJ CVJlbGF0aW9uCWNhdGFsb2c7CisJCQkJRGF0dW0JCW9iam5zcDsKKwkJCQlib29sCQlpc251bGw7 CisJCQkJQXR0ck51bWJlcglBbnVtX25hbWVzcGFjZTsKKwkJCQlMaXN0CSAgICppZGVudGl0eSA9 IGNhc3ROb2RlKExpc3QsIG5vZGUtPm9iamVjdCk7CisKKwkJCQkvKiBPYnRhaW4gb2JqZWN0IHR1 cGxlICovCisJCQkJY2F0YWxvZyA9IHJlbGF0aW9uX29wZW4oYWRkcmVzcy5jbGFzc0lkLCBBY2Nl c3NTaGFyZUxvY2spOworCQkJCW9ialR1cCA9IGdldF9jYXRhbG9nX29iamVjdF9ieV9vaWQoY2F0 YWxvZywgZ2V0X29iamVjdF9hdHRudW1fb2lkKGFkZHJlc3MuY2xhc3NJZCksIGFkZHJlc3Mub2Jq ZWN0SWQpOworCisJCQkJLyogT2J0YWluIG5hbWVzcGFjZSAqLworCQkJCUFudW1fbmFtZXNwYWNl ID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZXNwYWNlKGFkZHJlc3MuY2xhc3NJZCk7CisJCQkJb2Jq bnNwID0gaGVhcF9nZXRhdHRyKG9ialR1cCwgQW51bV9uYW1lc3BhY2UsCisJCQkJCQkJCQkgIFJl bGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksICZpc251bGwpOworCQkJCWlmIChpc251bGwpCisJCQkJ CWVsb2coRVJST1IsICJpbnZhbGlkIE5VTEwgbmFtZXNwYWNlIik7CisKKwkJCQlyZXQgPSBuZXdf b2JqdHJlZV9WQSgiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EIFJFTkFNRSBUTyAle25l d25hbWV9SSIsIDMsCisJCQkJCQkJCQkgIm9ianR5cGUiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJ CQkJIHN0cmluZ2lmeV9vYmp0eXBlKG5vZGUtPnJlbmFtZVR5cGUsIGZhbHNlKSwKKwkJCQkJCQkJ CSAiaWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9x dWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5zcCksCisJCQkJCQkJCQkJCQkJCQkgIHN0clZh bChsbGFzdChpZGVudGl0eSkpKSwKKwkJCQkJCQkJCSAibmV3bmFtZSIsIE9ialR5cGVTdHJpbmcs IG5vZGUtPm5ld25hbWUpOworCQkJCXJlbGF0aW9uX2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJl TG9jayk7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVu c3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgbm9kZS0+cmVuYW1lVHlwZSk7CisJfQorCisJcmV0 dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBBbHRlck9iamVjdERlcGVuZHNTdG10IChB TFRFUiAuLi4gREVQRU5EUyBPTiAuLi4pLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBBTFRF UiBJTkRFWCAle2lkZW50aXR5fUQgJXtub31zIERFUEVORFMgT04gRVhURU5TSU9OICV7bmV3bmFt ZX1JCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT2JqZWN0RGVwZW5kc1N0bXQgKm5v ZGUgPSAoQWx0ZXJPYmplY3REZXBlbmRzU3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAq cmV0ID0gTlVMTDsKKworCWlmIChub2RlLT5vYmplY3RUeXBlID09IE9CSkVDVF9JTkRFWCkKKwl7 CisJCU9ialRyZWUgICAgKnF1YWxpZmllZDsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSByZWxhdGlv bl9vcGVuKG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCXF1YWxpZmllZCA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJ CQkJCQkJCSBub2RlLT5yZWxhdGlvbi0+cmVsbmFtZSk7CisJCXJlbGF0aW9uX2Nsb3NlKHJlbGF0 aW9uLCBBY2Nlc3NTaGFyZUxvY2spOworCisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBJ TkRFWCAle2lkZW50aXR5fUQgJXtub31zIERFUEVORFMgT04gRVhURU5TSU9OICV7bmV3bmFtZX1J IiwgMywKKwkJCQkJCQkgImlkZW50aXR5IiwgT2JqVHlwZU9iamVjdCwgcXVhbGlmaWVkLAorCQkJ CQkJCSAibm8iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCSBub2RlLT5yZW1vdmUgPyAiTk8iIDog IiIsCisJCQkJCQkJICJuZXduYW1lIiwgT2JqVHlwZVN0cmluZywgc3RyVmFsKG5vZGUtPmV4dG5h bWUpKTsKKwl9CisJZWxzZQorCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5cGUgaW4g ZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwor CXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBDQUNIRSBvcHRp b24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFVCBDQUNIRSAle3ZhbHVlfXMKKyAqIE9S CisgKiBDQUNIRSAle3ZhbHVlfQorICovCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJz ZV9TZXFfQ2FjaGUoRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQor eworCU9ialRyZWUgICAgKnJldDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10Owor CisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUIENBQ0hFICV7dmFsdWV9cyIgOiAiQ0FDSEUgJXt2 YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vx Y2FjaGUpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwg T2JqVHlwZVN0cmluZywgImNhY2hlIiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0 bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBDWUNMRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgK KyAqIFNFVCAle25vfXMgQ1lDTEUKKyAqIE9SCisgKiAle25vfXMgQ1lDTEUKKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKEZvcm1fcGdfc2VxdWVuY2Ugc2Vx ZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAgICpyZXQ7CisJY2hhcgkgICAq Zm10OworCisJZm10ID0gYWx0ZXJfdGFibGUgPyAiU0VUICV7bm99cyBDWUNMRSIgOiAiJXtub31z IENZQ0xFIjsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMiwKKwkJCQkJCSAiY2xhdXNl IiwgT2JqVHlwZVN0cmluZywgImN5Y2xlIiwKKwkJCQkJCSAibm8iLCBPYmpUeXBlU3RyaW5nLAor CQkJCQkJIHNlcWRhdGEtPnNlcWN5Y2xlID8gIiIgOiAiTk8iKTsKKworCXJldHVybiBuZXdfb2Jq ZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2VxdWVuY2UgSU5DUkVN RU5UIEJZIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIElOQ1JFTUVOVCBC WSAle3ZhbHVlfXMKKyAqIE9SCisgKiBJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zCisgKi8KK3N0YXRp YyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShGb3JtX3BnX3NlcXVl bmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNo YXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJT RVQgSU5DUkVNRU5UIEJZICV7dmFsdWV9cyIgOiAiSU5DUkVNRU5UIEJZICV7dmFsdWV9cyI7CisK Kwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcWluY3JlbWVudCk7 CisJcmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBl U3RyaW5nLCAic2VxaW5jcmVtZW50IiwKKwkJCQkJCSAidmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0 bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBE ZXBhcnNlIHRoZSBzZXF1ZW5jZSBNQVhWQUxVRSBvcHRpb24uCisgKgorICogVmVyYm9zZSBzeW50 YXgKKyAqIFNFVCBNQVhWQUxVRSAle3ZhbHVlfXMKKyAqIE9SCisgKiBNQVhWQUxVRSAle3ZhbHVl fXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01heHZhbHVlKEZv cm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSkKK3sKKwlPYmpUcmVlICAg ICpyZXQ7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZtdDsKKworCWZtdCA9IGFsdGVy X3RhYmxlID8gIlNFVCBNQVhWQUxVRSAle3ZhbHVlfXMiIDogIk1BWFZBTFVFICV7dmFsdWV9cyI7 CisKKwl0bXBzdHIgPSBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIHNlcWRhdGEtPnNlcW1heCk7CisJ cmV0ID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3Ry aW5nLCAibWF4dmFsdWUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7 CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAqIERlcGFyc2Ug dGhlIHNlcXVlbmNlIE1JTlZBTFVFIG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog U0VUIE1JTlZBTFVFICV7dmFsdWV9cworICogT1IKKyAqIE1JTlZBTFVFICV7dmFsdWV9cworICov CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWludmFsdWUoRm9ybV9wZ19z ZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUgICAgKnJldDsK KwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJZm10ID0gYWx0ZXJfdGFibGUg PyAiU0VUIE1JTlZBTFVFICV7dmFsdWV9cyIgOiAiTUlOVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRt cHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxbWluKTsKKwlyZXQgPSBu ZXdfb2JqdHJlZV9WQShmbXQsIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJt aW52YWx1ZSIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKworCXJl dHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOworfQorCisvKgorICogRGVwYXJzZSB0aGUgc2Vx dWVuY2UgT1dORUQgQlkgY29tbWFuZC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogT1dORUQg QlkgJXtvd25lcn1ECisgKi8KK3N0YXRpYyBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX093bmVkQnko T2lkIHNlcXVlbmNlSWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0ID0g TlVMTDsKKwlSZWxhdGlvbglkZXBSZWw7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0 YSBrZXlzWzNdOworCUhlYXBUdXBsZQl0dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVw ZW5kUmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwK KwkJCQlBbnVtX3BnX2RlcGVuZF9jbGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwg Rl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNj YW5LZXlJbml0KCZrZXlzWzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNl SWQpKTsKKwlTY2FuS2V5SW5pdCgma2V5c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJp ZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0 dW0oMCkpOworCisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVu ZGVySW5kZXhJZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFw VHVwbGVJc1ZhbGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJ CQlvd25lcklkOworCQlGb3JtX3BnX2RlcGVuZCBkZXBmb3JtOworCQlPYmpUcmVlICAgICp0bXBv Ymo7CisJCWNoYXIJICAgKmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkg R0VUU1RSVUNUKHR1cGxlKTsKKworCQkvKiBPbmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVz IG9uIHBnX2NsYXNzICovCisJCWlmIChkZXBmb3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVU TykKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVwZm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJl bGF0aW9uSWQpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDAp CisJCQljb250aW51ZTsKKworCQlvd25lcklkID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5h bWUgPSBnZXRfYXR0bmFtZShvd25lcklkLCBkZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOwor CQlpZiAoY29sbmFtZSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdG1wb2JqID0gbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iaiwgImF0dHJuYW1lIiwgImF0dHJuYW1lIiwgY29sbmFt ZSk7CisJCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJPV05FRCBCWSAle293bmVyfUQiLCAyLAorCQkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkgIm93bmVyIiwg T2JqVHlwZU9iamVjdCwgdG1wb2JqKTsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOwor CXJlbGF0aW9uX2Nsb3NlKGRlcFJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCS8qCisJICogSWYg dGhlcmUncyBubyBvd25lciBjb2x1bW4sIGVtaXQgYW4gZW1wdHkgT1dORUQgQlkgZWxlbWVudCwg c2V0IHVwIHNvCisJICogdGhhdCBpdCB3b24ndCBwcmludCBhbnl0aGluZy4KKwkgKi8KKwlpZiAo IXJldCkKKwkJLyogWFhYIHRoaXMgc2hvdWxkbid0IGhhcHBlbiAuLi4gKi8KKwkJcmV0ID0gbmV3 X29ianRyZWVfVkEoIk9XTkVEIEJZICV7b3duZXJ9RCIsIDMsCisJCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAib3duZWQiLAorCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJ CQkJCQkgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgZmFsc2UpOworCisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBSRVNUQVJU IG9wdGlvbi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogUkVTVEFSVCAle3ZhbHVlfXMKKyAq Lworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX1Jlc3RhcnQoRm9ybV9wZ19z ZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRt cHN0cjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+bGFzdF92 YWx1ZSk7CisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlJFU1RBUlQgJXt2YWx1ZX1zIiwgMiwKKwkJ CQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInJlc3RhcnQiLAorCQkJCQkJICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0 KTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIHNlcXVlbmNlIEFTIG9wdGlvbi4KKyAqCisgKiBW ZXJib3NlIHN5bnRheAorICogQVMgJXtpZGVudGl0eX1ECisgKi8KK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqCitkZXBhcnNlX1NlcV9BcyhEZWZFbGVtICplbGVtKQoreworCU9ialRyZWUgICAgKnJl dDsKKwlUeXBlCQlsaWtlVHlwZTsKKwlGb3JtX3BnX3R5cGUgbGlrZUZvcm07CisKKwlsaWtlVHlw ZSA9IHR5cGVuYW1lVHlwZShOVUxMLCBkZWZHZXRUeXBlTmFtZShlbGVtKSwgTlVMTCk7CisJbGlr ZUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QobGlrZVR5cGUpOworCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkFTICV7aWRlbnRpdHl9RCIsIDEsCisJCQkJCQkgImlkZW50aXR5IiwgT2Jq VHlwZU9iamVjdCwKKwkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWUobGlrZUZvcm0tPnR5 cG5hbWVzcGFjZSwKKwkJCQkJCQkJCQkJCSAgTmFtZVN0cihsaWtlRm9ybS0+dHlwbmFtZSkpKTsK KwlSZWxlYXNlU3lzQ2FjaGUobGlrZVR5cGUpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0 KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSBzZXF1ZW5jZSBTVEFSVCBXSVRIIG9wdGlv bi4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogU0VUIFNUQVJUIFdJVEggJXt2YWx1ZX1zCisg KiBPUgorICogU1RBUlQgV0lUSCAle3ZhbHVlfXMKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVt ICoKK2RlcGFyc2VfU2VxX1N0YXJ0d2l0aChGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wg YWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZSAgICAqcmV0OworCWNoYXIJICAgKnRtcHN0cjsKKwlj aGFyCSAgICpmbXQ7CisKKwlmbXQgPSBhbHRlcl90YWJsZSA/ICJTRVQgU1RBUlQgV0lUSCAle3Zh bHVlfXMiIDogIlNUQVJUIFdJVEggJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElO VDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vxc3RhcnQpOworCXJldCA9IG5ld19vYmp0cmVlX1ZBKGZt dCwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0YXJ0IiwKKwkJCQkJCSAi dmFsdWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2Jq ZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNUT1JBR0Ugb3B0aW9uLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTVE9SQUdFPSV7dmFsdWV9cworICovCitzdGF0aWMg aW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9UeXBlX1N0b3JhZ2UoRm9ybV9wZ190eXBlIHR5cEZv cm0pCit7CisJT2JqVHJlZSAgICAqcmV0OworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTVE9SQUdF ID0gJXt2YWx1ZX1zIiwgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInN0b3Jh Z2UiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIGdldF90eXBlX3N0b3JhZ2UodHlw Rm9ybS0+dHlwc3RvcmFnZSkpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9 CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFJFQ0VJVkUgb3B0aW9uLgorICoKKyAqIFZlcmJv c2Ugc3ludGF4CisgKiBSRUNFSVZFPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBP YmpFbGVtICoKK2RlcGFyc2VfVHlwZV9SZWNlaXZlKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQorewor CU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJSRUNFSVZFPSIsIDEs CisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJyZWNlaXZlIik7CisJaWYgKE9pZElz VmFsaWQodHlwRm9ybS0+dHlwcmVjZWl2ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwg IiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJv Y2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHJlY2VpdmUpKTsK KwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rf b2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIFNFTkQgb3B0aW9uLgor ICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBTRU5EPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGlj IGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9TZW5kKEZvcm1fcGdfdHlwZSB0eXBGb3Jt KQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJTRU5EPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJzZW5kIik7CisJaWYgKE9pZElz VmFsaWQodHlwRm9ybS0+dHlwc2VuZCkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7 cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2Vk dXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cHNlbmQpKTsKKwllbHNl CisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0 KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHR5cG1vZF9pbiBvcHRpb24uCisg KgorICogVmVyYm9zZSBzeW50YXgKKyAqIFRZUE1PRF9JTj0le3Byb2NlZHVyZX1ECisgKi8KK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfVHlwbW9kX0luKEZvcm1fcGdfdHlw ZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZB KCJUWVBNT0RfSU49IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgInR5cG1v ZF9pbiIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cG1vZGluKSkKKwkJYXBwZW5kX29i amVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9y bS0+dHlwbW9kaW4pKTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0 dXJuIG5ld19vYmplY3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBl IHR5cG1vZF9vdXQgb3B0aW9uLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4CisgKiBUWVBNT0RfT1VU PSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGluZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlw ZV9UeXBtb2RfT3V0KEZvcm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsK KworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJUWVBNT0RfT1VUPSIsIDEsCisJCQkJCQkgImNsYXVz ZSIsIE9ialR5cGVTdHJpbmcsICJ0eXBtb2Rfb3V0Iik7CisJaWYgKE9pZElzVmFsaWQodHlwRm9y bS0+dHlwbW9kb3V0KSkKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiJXtwcm9jZWR1cmV9 RCIsCisJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCQkgdHlwRm9ybS0+dHlwbW9kb3V0KSk7CisJZWxzZQorCQlhcHBl bmRfbm90X3ByZXNlbnQocmV0KTsKKworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdChyZXQpOwor fQorCisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIGFuYWx5emUgb3B0aW9uLgorICoKKyAqIFZl cmJvc2Ugc3ludGF4CisgKiBBTkFMWVpFPSV7cHJvY2VkdXJlfUQKKyAqLworc3RhdGljIGlubGlu ZSBPYmpFbGVtICoKK2RlcGFyc2VfVHlwZV9BbmFseXplKEZvcm1fcGdfdHlwZSB0eXBGb3JtKQor eworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJBTkFMWVpFPSIs IDEsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJpbmcsICJhbmFseXplIik7CisJaWYgKE9p ZElzVmFsaWQodHlwRm9ybS0+dHlwYW5hbHl6ZSkpCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJl dCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQo UHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJIHR5cEZvcm0tPnR5cGFuYWx5emUp KTsKKwllbHNlCisJCWFwcGVuZF9ub3RfcHJlc2VudChyZXQpOworCisJcmV0dXJuIG5ld19vYmpl Y3Rfb2JqZWN0KHJldCk7Cit9CisKKy8qCisgKiBEZXBhcnNlIHRoZSB0eXBlIHN1YnNjcmlwdCBv cHRpb24uCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNVQlNDUklQVD0le3Byb2NlZHVyZX1E CisgKi8KK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1R5cGVfU3Vic2NyaXB0KEZv cm1fcGdfdHlwZSB0eXBGb3JtKQoreworCU9ialRyZWUgICAgKnJldDsKKworCXJldCA9IG5ld19v Ymp0cmVlX1ZBKCJTVUJTQ1JJUFQ9IiwgMSwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmlu ZywgInN1YnNjcmlwdCIpOworCWlmIChPaWRJc1ZhbGlkKHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkp CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIiV7cHJvY2VkdXJlfUQiLAorCQkJCQkJCSBu ZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoUHJvY2VkdXJlUmVsYXRpb25JZCwKKwkJCQkJCQkJ CQkJCQkJIHR5cEZvcm0tPnR5cHN1YnNjcmlwdCkpOworCWVsc2UKKwkJYXBwZW5kX25vdF9wcmVz ZW50KHJldCk7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QocmV0KTsKK30KKworLyoKKyAq IERlcGFyc2UgYSBSdWxlU3RtdCAoQ1JFQVRFIFJVTEUpLgorICoKKyAqIEdpdmVuIGEgcnVsZSBP SUQgYW5kIHRoZSBwYXJzZSB0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgcnVsZSBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ugc3ludGF4 CisgKiBDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50aXR5fUkgQVMgT04gJXtldmVu dH1zIFRPICV7dGFibGV9RAorICogJXt3aGVyZV9jbGF1c2V9cyBETyAle2luc3RlYWR9cyAle2Fj dGlvbnM6LCB9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1J1bGVTdG10KE9pZCBv YmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCVJ1bGVTdG10ICAgKm5vZGUgPSAoUnVsZVN0 bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUgICAgKnJldDsKKwlPYmpUcmVlICAgICp0bXA7CisJ UmVsYXRpb24JcGdfcmV3cml0ZTsKKwlGb3JtX3BnX3Jld3JpdGUgcmV3ckZvcm07CisJSGVhcFR1 cGxlCXJld3JUdXA7CisJU3lzU2NhbkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXk7CisJRGF0 dW0JCWV2X3F1YWw7CisJRGF0dW0JCWV2X2FjdGlvbnM7CisJYm9vbAkJaXNudWxsOworCWNoYXIJ ICAgKnF1YWw7CisJTGlzdAkgICAqYWN0aW9uczsKKwlMaXN0CSAgICpsaXN0ID0gTklMOworCUxp c3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZXZlbnRfc3RyOworCisJcGdfcmV3cml0ZSA9IHRh YmxlX29wZW4oUmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJU2NhbktleUlu aXQoJmtleSwKKwkJCQlBbnVtX3BnX3Jld3JpdGVfb2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51 bWJlciwKKwkJCQlGX09JREVRLCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisKKwlzY2Fu ID0gc3lzdGFibGVfYmVnaW5zY2FuKHBnX3Jld3JpdGUsIFJld3JpdGVPaWRJbmRleElkLCB0cnVl LAorCQkJCQkJCSAgTlVMTCwgMSwgJmtleSk7CisJcmV3clR1cCA9IHN5c3RhYmxlX2dldG5leHQo c2Nhbik7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHJld3JUdXApKQorCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmV3cml0ZSBydWxlIHdpdGggT0lEICV1IiwKKwkJCSBv YmplY3RJZCk7CisKKwlyZXdyRm9ybSA9IChGb3JtX3BnX3Jld3JpdGUpIEdFVFNUUlVDVChyZXdy VHVwKTsKKworCWV2ZW50X3N0ciA9IG5vZGUtPmV2ZW50ID09IENNRF9TRUxFQ1QgPyAiU0VMRUNU IiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9VUERBVEUgPyAiVVBEQVRFIiA6CisJCW5vZGUtPmV2 ZW50ID09IENNRF9ERUxFVEUgPyAiREVMRVRFIiA6CisJCW5vZGUtPmV2ZW50ID09IENNRF9JTlNF UlQgPyAiSU5TRVJUIiA6IE5VTEw7CisJQXNzZXJ0KGV2ZW50X3N0ciAhPSBOVUxMKTsKKworCWV2 X3F1YWwgPSBoZWFwX2dldGF0dHIocmV3clR1cCwgQW51bV9wZ19yZXdyaXRlX2V2X3F1YWwsCisJ CQkJCQkgICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKwlldl9hY3Rp b25zID0gaGVhcF9nZXRhdHRyKHJld3JUdXAsIEFudW1fcGdfcmV3cml0ZV9ldl9hY3Rpb24sCisJ CQkJCQkJICBSZWxhdGlvbkdldERlc2NyKHBnX3Jld3JpdGUpLCAmaXNudWxsKTsKKworCXBnX2dl dF9ydWxlZGVmX2RldGFpbGVkKGV2X3F1YWwsIGV2X2FjdGlvbnMsICZxdWFsLCAmYWN0aW9ucyk7 CisKKwl0bXAgPSBuZXdfb2JqdHJlZSgiIik7CisJaWYgKHF1YWwpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiLCAiY2xhdXNlIiwgcXVhbCk7CisJZWxzZQor CXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KHRtcCwgIldIRVJFICV7Y2xhdXNlfXMiKTsKKwkJYXBw ZW5kX25vdF9wcmVzZW50KHRtcCk7CisJfQorCisJZm9yZWFjaChjZWxsLCBhY3Rpb25zKQorCQls aXN0ID0gbGFwcGVuZChsaXN0LCBuZXdfc3RyaW5nX29iamVjdChsZmlyc3QoY2VsbCkpKTsKKwor CXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDUkVBVEUgUlVMRSAle29yX3JlcGxhY2V9cyAle2lkZW50 aXR5fUkgQVMgT04gJXtldmVudH1zIFRPICV7dGFibGV9RCAle3doZXJlX2NsYXVzZX1zIERPICV7 aW5zdGVhZH1zICV7YWN0aW9uczosIH1zIiwgNywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJ CQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPnJ1bGVuYW1lLAorCQkJCQkJICJl dmVudCIsIE9ialR5cGVTdHJpbmcsIGV2ZW50X3N0ciwKKwkJCQkJCSAidGFibGUiLCBPYmpUeXBl T2JqZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0 aW9uSWQsCisJCQkJCQkJCQkJCQkJIHJld3JGb3JtLT5ldl9jbGFzcyksCisJCQkJCQkgIndoZXJl X2NsYXVzZSIsIE9ialR5cGVPYmplY3QsIHRtcCwKKwkJCQkJCSAiaW5zdGVhZCIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkgbm9kZS0+aW5zdGVhZCA/ICJJTlNURUFEIiA6ICJBTFNPIiwKKwkJCQkJ CSAiYWN0aW9ucyIsIE9ialR5cGVBcnJheSwgbGlzdCk7CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNj YW4pOworCXRhYmxlX2Nsb3NlKHBnX3Jld3JpdGUsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1 cm4gcmV0OworfQorCisvKgorICogRGVwYXJzZSBhIENyZWF0ZVRyYW5zZm9ybVN0bXQgKENSRUFU RSBUUkFOU0ZPUk0pLgorICoKKyAqIEdpdmVuIGEgdHJhbnNmb3JtIE9JRCBhbmQgdGhlIHBhcnNl IHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogcmVwcmVzZW50aW5n IHRoZSBDUkVBVEUgVFJBTlNGT1JNIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAq IENSRUFURSAle29yX3JlcGxhY2V9cyBUUkFOU0ZPUk0gRk9SICV7dHlwZW5hbWV9RCBMQU5HVUFH RSAle2xhbmd1YWdlfUkKKyAqICggRlJPTSBTUUwgV0lUSCBGVU5DVElPTiAle3NpZ25hdHVyZX1z LCBUTyBTUUwgV0lUSCBGVU5DVElPTgorICogJXtzaWduYXR1cmVfdG9mfXMgKQorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRyYW5zZm9ybVN0bXQoT2lkIG9iamVjdElkLCBO b2RlICpwYXJzZXRyZWUpCit7CisJQ3JlYXRlVHJhbnNmb3JtU3RtdCAqbm9kZSA9IChDcmVhdGVU cmFuc2Zvcm1TdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlICAgICpyZXQ7CisJT2JqVHJlZSAg ICAqc2lnbmF0dXJlOworCUhlYXBUdXBsZQl0cmZUdXA7CisJSGVhcFR1cGxlCWxhbmdUdXA7CisJ SGVhcFR1cGxlCXByb2NUdXA7CisJRm9ybV9wZ190cmFuc2Zvcm0gdHJmRm9ybTsKKwlGb3JtX3Bn X2xhbmd1YWdlIGxhbmdGb3JtOworCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsKKwlpbnQJCQlpOwor CisJLyogR2V0IHRoZSBwZ190cmFuc2Zvcm0gdHVwbGUgKi8KKwl0cmZUdXAgPSBTZWFyY2hTeXND YWNoZTEoVFJGT0lELCBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHRyZlR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZv ciB0cmFuc2Zvcm0gd2l0aCBPSUQgJXUiLAorCQkJIG9iamVjdElkKTsKKwl0cmZGb3JtID0gKEZv cm1fcGdfdHJhbnNmb3JtKSBHRVRTVFJVQ1QodHJmVHVwKTsKKworCS8qIEdldCB0aGUgY29ycmVz cG9uZGluZyBwZ19sYW5ndWFnZSB0dXBsZSAqLworCWxhbmdUdXAgPSBTZWFyY2hTeXNDYWNoZTEo TEFOR09JRCwgdHJmRm9ybS0+dHJmbGFuZyk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGxhbmdU dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgbGFuZ3VhZ2Ugd2l0 aCBPSUQgJXUiLAorCQkJIHRyZkZvcm0tPnRyZmxhbmcpOworCWxhbmdGb3JtID0gKEZvcm1fcGdf bGFuZ3VhZ2UpIEdFVFNUUlVDVChsYW5nVHVwKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJD UkVBVEUgJXtvcl9yZXBsYWNlfXMgVFJBTlNGT1JNIEZPUiAle3R5cGVuYW1lfUQgTEFOR1VBR0Ug JXtsYW5ndWFnZX1JIiwgMywKKwkJCQkJCSAib3JfcmVwbGFjZSIsIE9ialR5cGVTdHJpbmcsCisJ CQkJCQkgbm9kZS0+cmVwbGFjZSA/ICJPUiBSRVBMQUNFIiA6ICIiLAorCQkJCQkJICJ0eXBlbmFt ZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFR5 cGVSZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCSB0cmZGb3JtLT50cmZ0eXBlKSwKKwkJCQkJCSAi bGFuZ3VhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIE5hbWVTdHIobGFuZ0Zvcm0tPmxhbm5h bWUpKTsKKworCS8qIERlcGFyc2UgdGhlIHRyYW5zZm9ybV9lbGVtZW50X2xpc3QgKi8KKwlpZiAo T2lkSXNWYWxpZCh0cmZGb3JtLT50cmZmcm9tc3FsKSkKKwl7CisJCUxpc3QJICAgKnBhcmFtcyA9 IE5JTDsKKworCQkvKiBHZXQgdGhlIHBnX3Byb2MgdHVwbGUgZm9yIHRoZSBGUk9NIEZVTkNUSU9O ICovCisJCXByb2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmZnJv bXNxbCk7CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jVHVwKSkKKwkJCWVsb2coRVJST1Is ICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiB3aXRoIE9JRCAldSIsCisJCQkJIHRy ZkZvcm0tPnRyZmZyb21zcWwpOworCQlwcm9jRm9ybSA9IChGb3JtX3BnX3Byb2MpIEdFVFNUUlVD VChwcm9jVHVwKTsKKworCQkvKgorCQkgKiBDUkVBVEUgVFJBTlNGT1JNIGRvZXMgbm90IGNoYW5n ZSBmdW5jdGlvbiBzaWduYXR1cmUgc28gd2UgY2FuIHVzZQorCQkgKiBjYXRhbG9nIHRvIGdldCBp bnB1dCB0eXBlIE9pZHMuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcHJvY0Zvcm0tPnByb25h cmdzOyBpKyspCisJCXsKKwkJCU9ialRyZWUgICAgKnBhcmFtb2JqOworCisJCQlwYXJhbW9iaiA9 IG5ld19vYmp0cmVlX1ZBKCIle3R5cGV9VCIsIDEsCisJCQkJCQkJCQkgICJ0eXBlIiwgT2JqVHlw ZU9iamVjdCwKKwkJCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl90eXBlKHByb2NGb3JtLT5wcm9hcmd0 eXBlcy52YWx1ZXNbaV0sIC0xKSk7CisJCQlwYXJhbXMgPSBsYXBwZW5kKHBhcmFtcywgbmV3X29i amVjdF9vYmplY3QocGFyYW1vYmopKTsKKwkJfQorCisJCXNpZ25hdHVyZSA9IG5ld19vYmp0cmVl X1ZBKCIle2lkZW50aXR5fUQgKCV7YXJndW1lbnRzOiwgfXMpIiwgMiwKKwkJCQkJCQkJICAgImlk ZW50aXR5IiwgT2JqVHlwZU9iamVjdCwKKwkJCQkJCQkJICAgbmV3X29ianRyZWVfZm9yX3F1YWxu YW1lKHByb2NGb3JtLT5wcm9uYW1lc3BhY2UsCisJCQkJCQkJCQkJCQkJCQlOYW1lU3RyKHByb2NG b3JtLT5wcm9uYW1lKSksCisJCQkJCQkJCSAgICJhcmd1bWVudHMiLCBPYmpUeXBlQXJyYXksIHBh cmFtcyk7CisKKwkJYXBwZW5kX29iamVjdF9vYmplY3QocmV0LCAiKEZST00gU1FMIFdJVEggRlVO Q1RJT04gJXtzaWduYXR1cmV9cyIsCisJCQkJCQkJIHNpZ25hdHVyZSk7CisJCVJlbGVhc2VTeXND YWNoZShwcm9jVHVwKTsKKwl9CisJaWYgKE9pZElzVmFsaWQodHJmRm9ybS0+dHJmdG9zcWwpKQor CXsKKwkJTGlzdAkgICAqcGFyYW1zID0gTklMOworCisJCS8qIEFwcGVuZCBhICcsJyBpZiB0cmZm cm9tc3FsIGlzIHByZXNlbnQsIGVsc2UgYXBwZW5kICcoJyAqLworCQlhcHBlbmRfZm9ybWF0X3N0 cmluZyhyZXQsIE9pZElzVmFsaWQodHJmRm9ybS0+dHJmZnJvbXNxbCkgPyAiLCIgOiAiKCIpOwor CisJCS8qIEdldCB0aGUgcGdfcHJvYyB0dXBsZSBmb3IgdGhlIFRPIEZVTkNUSU9OICovCisJCXBy b2NUdXAgPSBTZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgdHJmRm9ybS0+dHJmdG9zcWwpOworCQlp ZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9v a3VwIGZhaWxlZCBmb3IgZnVuY3Rpb24gd2l0aCBPSUQgJXUiLAorCQkJCSB0cmZGb3JtLT50cmZ0 b3NxbCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2NUdXApOwor CisJCS8qCisJCSAqIENSRUFURSBUUkFOU0ZPUk0gZG9lcyBub3QgY2hhbmdlIGZ1bmN0aW9uIHNp Z25hdHVyZSBzbyB3ZSBjYW4gdXNlCisJCSAqIGNhdGFsb2cgdG8gZ2V0IGlucHV0IHR5cGUgT2lk cy4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBwcm9jRm9ybS0+cHJvbmFyZ3M7IGkrKykKKwkJ eworCQkJT2JqVHJlZSAgICAqcGFyYW1vYmogPSBuZXdfb2JqdHJlZSgiIik7CisKKwkJCXBhcmFt b2JqID0gbmV3X29ianRyZWVfVkEoIiV7dHlwZX1UIiwgMSwKKwkJCQkJCQkJCSAgInR5cGUiLCBP YmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJICBuZXdfb2JqdHJlZV9mb3JfdHlwZShwcm9jRm9ybS0+ cHJvYXJndHlwZXMudmFsdWVzW2ldLCAtMSkpOworCQkJcGFyYW1zID0gbGFwcGVuZChwYXJhbXMs IG5ld19vYmplY3Rfb2JqZWN0KHBhcmFtb2JqKSk7CisJCX0KKworCQlzaWduYXR1cmUgPSBuZXdf b2JqdHJlZV9WQSgiJXtpZGVudGl0eX1EICgle2FyZ3VtZW50czosIH1zKSIsIDIsCisJCQkJCQkJ CSAgICJpZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCSAgIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlLAorCQkJCQkJCQkJCQkJCQkJTmFtZVN0 cihwcm9jRm9ybS0+cHJvbmFtZSkpLAorCQkJCQkJCQkgICAiYXJndW1lbnRzIiwgT2JqVHlwZUFy cmF5LCBwYXJhbXMpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHJldCwgIlRPIFNRTCBXSVRI IEZVTkNUSU9OICV7c2lnbmF0dXJlX3RvZn1zIiwKKwkJCQkJCQkgc2lnbmF0dXJlKTsKKwkJUmVs ZWFzZVN5c0NhY2hlKHByb2NUdXApOworCX0KKworCWFwcGVuZF9mb3JtYXRfc3RyaW5nKHJldCwg IikiKTsKKworCVJlbGVhc2VTeXNDYWNoZShsYW5nVHVwKTsKKwlSZWxlYXNlU3lzQ2FjaGUodHJm VHVwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQXBwZW5kIGEgTlVMTC1vci1xdW90ZWQt bGl0ZXJhbCBjbGF1c2UuICBVc2VmdWwgZm9yIENPTU1FTlQgYW5kIFNFQ1VSSVRZCisgKiBMQUJF TC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICogJXtudWxsfXMgJXtsaXRlcmFsfXMKKyAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF9saXRlcmFsX29yX251bGwoT2JqVHJlZSAqcGFyZW50LCBjaGFy ICplbGVtbmFtZSwgY2hhciAqdmFsdWUpCit7CisJT2JqVHJlZSAgICAqdG9wOworCU9ialRyZWUg ICAgKnBhcnQ7CisKKwl0b3AgPSBuZXdfb2JqdHJlZSgiIik7CisJcGFydCA9IG5ld19vYmp0cmVl X1ZBKCJOVUxMIiwgMSwKKwkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwgIXZhbHVlKTsK KwlhcHBlbmRfb2JqZWN0X29iamVjdCh0b3AsICIle251bGx9cyIsIHBhcnQpOworCisJcGFydCA9 IG5ld19vYmp0cmVlX1ZBKCIiLCAxLAorCQkJCQkJICAicHJlc2VudCIsIE9ialR5cGVCb29sLCB2 YWx1ZSAhPSBOVUxMKTsKKworCWlmICh2YWx1ZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QocGFy dCwgIiV7dmFsdWV9TCIsICJ2YWx1ZSIsIHZhbHVlKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdCh0 b3AsICIle2xpdGVyYWx9cyIsIHBhcnQpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QocGFyZW50 LCBlbGVtbmFtZSwgdG9wKTsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDb21tZW50U3RtdCB3aGVu IGl0IHBlcnRhaW5zIHRvIGEgY29uc3RyYWludC4KKyAqCisgKiBWZXJib3NlIHN5bnRheAorICog Q09NTUVOVCBPTiBDT05TVFJBSU5UICV7aWRlbnRpdHl9cyBPTiBbRE9NQUlOXSAle3BhcmVudG9i an1zIElTICV7Y29tbWVudH1zCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ29tbWVu dE9uQ29uc3RyYWludFNtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21t ZW50U3RtdCAqbm9kZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAq cmV0OworCUhlYXBUdXBsZQljb25zdHJUdXA7CisJRm9ybV9wZ19jb25zdHJhaW50IGNvbnN0ckZv cm07CisJT2JqZWN0QWRkcmVzcyBhZGRyOworCisJQXNzZXJ0KG5vZGUtPm9ianR5cGUgPT0gT0JK RUNUX1RBQkNPTlNUUkFJTlQgfHwgbm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlO VCk7CisKKwljb25zdHJUdXAgPSBTZWFyY2hTeXNDYWNoZTEoQ09OU1RST0lELCBvYmplY3RJZCk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGNvbnN0clR1cCkpCisJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBjb25zdHJhaW50IHdpdGggT0lEICV1Iiwgb2JqZWN0SWQpOwor CWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uc3RyVHVwKTsK KworCWlmIChPaWRJc1ZhbGlkKGNvbnN0ckZvcm0tPmNvbnJlbGlkKSkKKwkJT2JqZWN0QWRkcmVz c1NldChhZGRyLCBSZWxhdGlvblJlbGF0aW9uSWQsIGNvbnN0ckZvcm0tPmNvbnJlbGlkKTsKKwll bHNlCisJCU9iamVjdEFkZHJlc3NTZXQoYWRkciwgVHlwZVJlbGF0aW9uSWQsIGNvbnN0ckZvcm0t PmNvbnR5cGlkKTsKKworCXJldCA9IG5ld19vYmp0cmVlX1ZBKCJDT01NRU5UIE9OIENPTlNUUkFJ TlQgJXtpZGVudGl0eX1zIE9OICV7ZG9tYWlufXMgJXtwYXJlbnRvYmp9cyIsIDMsCisJCQkJCQkg ImlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywgcHN0cmR1cChOYW1lU3RyKGNvbnN0ckZvcm0tPmNv bm5hbWUpKSwKKwkJCQkJCSAiZG9tYWluIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAobm9kZS0+ b2JqdHlwZSA9PSBPQkpFQ1RfRE9NQ09OU1RSQUlOVCkgPyAiRE9NQUlOIiA6ICIiLAorCQkJCQkJ ICJwYXJlbnRvYmoiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJIGdldE9iamVjdElkZW50aXR5KCZh ZGRyLCBmYWxzZSkpOworCisJLyogQWRkIHRoZSBjb21tZW50IGNsYXVzZSAqLworCWFwcGVuZF9s aXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtjb21tZW50fXMiLCBub2RlLT5jb21tZW50KTsKKwor CVJlbGVhc2VTeXNDYWNoZShjb25zdHJUdXApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBE ZXBhcnNlIGFuIENvbW1lbnRTdG10IChDT01NRU5UIE9OIC4uLikuCisgKgorICogR2l2ZW4gdGhl IG9iamVjdCBhZGRyZXNzIGFuZCB0aGUgcGFyc2UgdHJlZSB0aGF0IGNyZWF0ZWQgaXQsIHJldHVy biBhbgorICogT2JqVHJlZSByZXByZXNlbnRpbmcgdGhlIGNvbW1lbnQgY29tbWFuZC4KKyAqCisg KiBWZXJib3NlIHN5bnRheAorICogQ09NTUVOVCBPTiAle29ianR5cGV9cyAle2lkZW50aXR5fXMg SVMgJXtjb21tZW50fXMKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9Db21tZW50U3Rt dChPYmplY3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDb21tZW50U3Rt dCAqbm9kZSA9IChDb21tZW50U3RtdCAqKSBwYXJzZXRyZWU7CisJT2JqVHJlZSAgICAqcmV0Owor CWNoYXIJICAgKmlkZW50aXR5OworCisJLyoKKwkgKiBDb25zdHJhaW50cyBhcmUgc3VmZmljaWVu dGx5IGRpZmZlcmVudCB0aGF0IGl0IGlzIGVhc2llciB0byBoYW5kbGUgdGhlbQorCSAqIHNlcGFy YXRlbHkuCisJICovCisJaWYgKG5vZGUtPm9ianR5cGUgPT0gT0JKRUNUX0RPTUNPTlNUUkFJTlQg fHwKKwkJbm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfVEFCQ09OU1RSQUlOVCkKKwl7CisJCUFzc2Vy dChhZGRyZXNzLmNsYXNzSWQgPT0gQ29uc3RyYWludFJlbGF0aW9uSWQpOworCQlyZXR1cm4gZGVw YXJzZV9Db21tZW50T25Db25zdHJhaW50U210KGFkZHJlc3Mub2JqZWN0SWQsIHBhcnNldHJlZSk7 CisJfQorCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIkNPTU1FTlQgT04gJXtvYmp0eXBlfXMiLCAx LAorCQkJCQkJICJvYmp0eXBlIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAoY2hhciAqKSBzdHJp bmdpZnlfb2JqdHlwZShub2RlLT5vYmp0eXBlLCBmYWxzZSkpOworCisJLyoKKwkgKiBBZGQgdGhl IG9iamVjdCBpZGVudGl0eSBjbGF1c2UuICBGb3IgemVybyBhcmd1bWVudCBhZ2dyZWdhdGVzIHdl IG5lZWQKKwkgKiB0byBhZGQgdGhlICgqKSBiaXQ7IGluIGFsbCBvdGhlciBjYXNlcyB3ZSBjYW4g anVzdCB1c2UKKwkgKiBnZXRPYmplY3RJZGVudGl0eS4KKwkgKgorCSAqIFhYWCBzaG91bGRuJ3Qg d2UgaW5zdGVhZCBmaXggdGhlIG9iamVjdCBpZGVudGl0aWVzIGZvciB6ZXJvLWFyZ3VtZW50CisJ ICogYWdncmVnYXRlcz8KKwkgKi8KKwlpZiAobm9kZS0+b2JqdHlwZSA9PSBPQkpFQ1RfQUdHUkVH QVRFKQorCXsKKwkJSGVhcFR1cGxlCXByb2NUdXA7CisJCUZvcm1fcGdfcHJvYyBwcm9jRm9ybTsK KworCQlwcm9jVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsIE9iamVjdElkR2V0RGF0dW0o YWRkcmVzcy5vYmplY3RJZCkpOworCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQocHJvY1R1cCkpCisJ CQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlIHdpdGggT0lE ICV1IiwKKwkJCQkgYWRkcmVzcy5vYmplY3RJZCk7CisJCXByb2NGb3JtID0gKEZvcm1fcGdfcHJv YykgR0VUU1RSVUNUKHByb2NUdXApOworCQlpZiAocHJvY0Zvcm0tPnByb25hcmdzID09IDApCisJ CQlpZGVudGl0eSA9IHBzcHJpbnRmKCIlcygqKSIsCisJCQkJCQkJCXF1b3RlX3F1YWxpZmllZF9p ZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZShwcm9jRm9ybS0+cHJvbmFtZXNwYWNlKSwKKwkJ CQkJCQkJCQkJCQkJICAgTmFtZVN0cihwcm9jRm9ybS0+cHJvbmFtZSkpKTsKKwkJZWxzZQorCQkJ aWRlbnRpdHkgPSBnZXRPYmplY3RJZGVudGl0eSgmYWRkcmVzcywgZmFsc2UpOworCQlSZWxlYXNl U3lzQ2FjaGUocHJvY1R1cCk7CisJfQorCWVsc2UKKwkJaWRlbnRpdHkgPSBnZXRPYmplY3RJZGVu dGl0eSgmYWRkcmVzcywgZmFsc2UpOworCisJYXBwZW5kX3N0cmluZ19vYmplY3QocmV0LCAiJXtp ZGVudGl0eX1zIiwgImlkZW50aXR5IiwgaWRlbnRpdHkpOworCisJLyogQWRkIHRoZSBjb21tZW50 IGNsYXVzZTsgY2FuIGJlIGVpdGhlciBOVUxMIG9yIGEgcXVvdGVkIGxpdGVyYWwuICovCisJYXBw ZW5kX2xpdGVyYWxfb3JfbnVsbChyZXQsICJJUyAle2NvbW1lbnR9cyIsIG5vZGUtPmNvbW1lbnQp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBTZWNMYWJlbFN0bXQgKFNF Q1VSSVRZIExBQkVMKQorICoKKyAqIEdpdmVuIHRoZSBPYmplY3RBZGRyZXNzIG9mIHRoZSB0YXJn ZXQgb2JqZWN0IGFuZCB0aGUgcGFyc2UgdHJlZSBvZiB0aGUKKyAqIFNFQ1VSSVRZIExBQkVMIGNv bW1hbmQsIHJldHVybiBhbiBPYmpUcmVlIHJlcHJlc2VudGluZyB0aGUgU0VDVVJJVFkgTEFCRUwK KyAqIGNvbW1hbmQuCisgKgorICogVmVyYm9zZSBzeW50YXgKKyAqIFNFQ1VSSVRZIExBQkVMIEZP UiAle3Byb3ZpZGVyfXMgT04gJXtvYmplY3RfdHlwZV9uYW1lfXMgJXtpZGVudGl0eX1zIElTICV7 bGFiZWx9cworICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1NlY0xhYmVsU3RtdChPYmpl Y3RBZGRyZXNzIGFkZHJlc3MsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlTZWNMYWJlbFN0bXQgKm5v ZGUgPSAoU2VjTGFiZWxTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZXQ7CisKKwlB c3NlcnQobm9kZS0+cHJvdmlkZXIpOworCisJcmV0ID0gbmV3X29ianRyZWVfVkEoIlNFQ1VSSVRZ IExBQkVMIEZPUiAle3Byb3ZpZGVyfXMgT04gJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1zIiwgMywK KwkJCQkJCSAicHJvdmlkZXIiLCBPYmpUeXBlU3RyaW5nLCBub2RlLT5wcm92aWRlciwKKwkJCQkJ CSAib2JqdHlwZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkgc3RyaW5naWZ5X29ianR5cGUobm9k ZS0+b2JqdHlwZSwgZmFsc2UpLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5cGVTdHJpbmcsIGdl dE9iamVjdElkZW50aXR5KCZhZGRyZXNzLCBmYWxzZSkpOworCisJLyogQWRkIHRoZSBsYWJlbCBj bGF1c2U7IGNhbiBiZSBlaXRoZXIgTlVMTCBvciBhIHF1b3RlZCBsaXRlcmFsLiAqLworCWFwcGVu ZF9saXRlcmFsX29yX251bGwocmV0LCAiSVMgJXtsYWJlbH1zIiwgbm9kZS0+bGFiZWwpOworCisJ cmV0dXJuIHJldDsKK30KKworLyoKKyAqIERlcGFyc2UgYSBDcmVhdGVBbVN0bXQgKENSRUFURSBB Q0NFU1MgTUVUSE9EKS4KKyAqCisgKiBHaXZlbiBhbiBhY2Nlc3MgbWV0aG9kIE9JRCBhbmQgdGhl IHBhcnNlIHRyZWUgdGhhdCBjcmVhdGVkIGl0LCByZXR1cm4gYW4KKyAqIE9ialRyZWUgcmVwcmVz ZW50aW5nIHRoZSBDUkVBVEUgQUNDRVNTIE1FVEhPRCBjb21tYW5kLgorICoKKyAqIFZlcmJvc2Ug c3ludGF4CisgKiBDUkVBVEUgQUNDRVNTIE1FVEhPRCAle2lkZW50aXR5fUkgVFlQRSAle2FtX3R5 cGV9cyBIQU5ETEVSICV7aGFuZGxlcn1ECisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q3JlYXRlQW1TdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9ialRyZWUg ICAgKnJldDsKKwlIZWFwVHVwbGUJYW1UdXA7CisJRm9ybV9wZ19hbQlhbUZvcm07CisJY2hhcgkg ICAqYW10eXBlOworCisJYW1UdXAgPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0 RGF0dW0ob2JqZWN0SWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoYW1UdXApKQorCQllbG9n KEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYWNjZXNzIG1ldGhvZCB3aXRoIE9JRCAl dSIsCisJCQkgb2JqZWN0SWQpOworCWFtRm9ybSA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1QoYW1U dXApOworCisJc3dpdGNoIChhbUZvcm0tPmFtdHlwZSkKKwl7CisJCWNhc2UgJ2knOgorCQkJYW10 eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNlICd0JzoKKwkJCWFtdHlwZSA9ICJUQUJM RSI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJpbnZhbGlkIHR5cGUg JWMgZm9yIGFjY2VzcyBtZXRob2QiLCBhbUZvcm0tPmFtdHlwZSk7CisJfQorCisJcmV0ID0gbmV3 X29ianRyZWVfVkEoIkNSRUFURSBBQ0NFU1MgTUVUSE9EICV7aWRlbnRpdHl9SSBUWVBFICV7YW1f dHlwZX1zIEhBTkRMRVIgJXtoYW5kbGVyfUQiLCAzLAorCQkJCQkJICJpZGVudGl0eSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCQkgTmFtZVN0cihhbUZvcm0tPmFtbmFtZSksCisJCQkJCQkgImFtX3R5 cGUiLCBPYmpUeXBlU3RyaW5nLCBhbXR5cGUsCisJCQkJCQkgImhhbmRsZXIiLCBPYmpUeXBlT2Jq ZWN0LAorCQkJCQkJIG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChQcm9jZWR1cmVSZWxhdGlv bklkLAorCQkJCQkJCQkJCQkJCSBhbUZvcm0tPmFtaGFuZGxlcikpOworCisJUmVsZWFzZVN5c0Nh Y2hlKGFtVHVwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgZGVwYXJzaW5n IG9mIHNpbXBsZSBjb21tYW5kcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBjb3ZlciBh bGwgY2FzZXMgaGFuZGxlZCBpbiBQcm9jZXNzVXRpbGl0eVNsb3cuCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2Vfc2ltcGxlX2NvbW1hbmQoQ29sbGVjdGVkQ29tbWFuZCAqY21kKQorewor CU9pZAkJCW9iamVjdElkOworCU5vZGUJICAgKnBhcnNldHJlZTsKKworCUFzc2VydChjbWQtPnR5 cGUgPT0gU0NUX1NpbXBsZSk7CisKKwlwYXJzZXRyZWUgPSBjbWQtPnBhcnNldHJlZTsKKwlvYmpl Y3RJZCA9IGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZDsKKworCWlmIChjbWQtPmluX2V4 dGVuc2lvbiAmJiAobm9kZVRhZyhwYXJzZXRyZWUpICE9IFRfQ3JlYXRlRXh0ZW5zaW9uU3RtdCkp CisJCXJldHVybiBOVUxMOworCisJLyogVGhpcyBzd2l0Y2ggbmVlZHMgdG8gaGFuZGxlIGV2ZXJ5 dGhpbmcgdGhhdCBQcm9jZXNzVXRpbGl0eVNsb3cgZG9lcyAqLworCXN3aXRjaCAobm9kZVRhZyhw YXJzZXRyZWUpKQorCXsKKwkJY2FzZSBUX0FsdGVyQ29sbGF0aW9uU3RtdDoKKwkJCXJldHVybiBk ZXBhcnNlX0FsdGVyQ29sbGF0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9B bHRlckRvbWFpblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckRvbWFpblN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkgICBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9iamVj dCk7CisKKwkJY2FzZSBUX0FsdGVyRW51bVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckVu dW1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckV4dGVuc2lvbkNv bnRlbnRzU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyRXh0ZW5zaW9uQ29udGVudHNTdG10 KG9iamVjdElkLCBwYXJzZXRyZWUsCisJCQkJCQkJCQkJCQkJICBjbWQtPmQuc2ltcGxlLnNlY29u ZGFyeU9iamVjdCk7CisKKwkJY2FzZSBUX0FsdGVyRXh0ZW5zaW9uU3RtdDoKKwkJCXJldHVybiBk ZXBhcnNlX0FsdGVyRXh0ZW5zaW9uU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQWx0ZXJGZHdTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJGZHdTdG10KG9iamVjdElk LCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlckZvcmVpZ25TZXJ2ZXJTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfQWx0ZXJGb3JlaWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfQWx0ZXJGdW5jdGlvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRlckZ1 bmN0aW9uKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck9iamVjdERlcGVu ZHNTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJEZXBlbmRTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9BbHRlck9iamVjdFNjaGVtYVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9BbHRlck9iamVjdFNjaGVtYVN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNzLAorCQkJCQkJ CQkJCQkJIHBhcnNldHJlZSwKKwkJCQkJCQkJCQkJCSBjbWQtPmQuc2ltcGxlLnNlY29uZGFyeU9i amVjdCk7CisKKwkJY2FzZSBUX0FsdGVyT3BlcmF0b3JTdG10OgorCQkJcmV0dXJuIGRlcGFyc2Vf QWx0ZXJPcGVyYXRvclN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0FsdGVy T3duZXJTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21kLT5kLnNpbXBs ZS5hZGRyZXNzLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclBvbGljeVN0bXQ6CisJCQly ZXR1cm4gZGVwYXJzZV9BbHRlclBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJ Y2FzZSBUX0FsdGVyU2VxU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0FsdGVyU2VxU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQWx0ZXJTdGF0c1N0bXQ6CisJCQlyZXR1cm4g ZGVwYXJzZV9BbHRlclN0YXRzU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRf QWx0ZXJUU0RpY3Rpb25hcnlTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJUU0RpY3Rpb25h cnlTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9BbHRlclR5cGVTdG10Ogor CQkJcmV0dXJuIGRlcGFyc2VfQWx0ZXJUeXBlU2V0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsK KworCQljYXNlIFRfQWx0ZXJVc2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9BbHRl clVzZXJNYXBwaW5nU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ29tbWVu dFN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9Db21tZW50U3RtdChjbWQtPmQuc2ltcGxlLmFkZHJl c3MsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NvbXBvc2l0ZVR5cGVTdG10OgorCQkJcmV0dXJu IGRlcGFyc2VfQ29tcG9zaXRlVHlwZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2Fz ZSBUX0NyZWF0ZUFtU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZUFtU3RtdChvYmplY3RJ ZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlQ2FzdFN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVDYXN0U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlQ29udmVyc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVDb252ZXJzaW9uKG9i amVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVEb21haW5TdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfQ3JlYXRlRG9tYWluKG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2Ug VF9DcmVhdGVFbnVtU3RtdDoJLyogQ1JFQVRFIFRZUEUgQVMgRU5VTSAqLworCQkJcmV0dXJuIGRl cGFyc2VfQ3JlYXRlRW51bVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZUV4dGVuc2lvblN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVFeHRlbnNpb25TdG10 KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVGZHdTdG10OgorCQkJcmV0 dXJuIGRlcGFyc2VfQ3JlYXRlRmR3U3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNl IFRfQ3JlYXRlRm9yZWlnblNlcnZlclN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVGb3Jl aWduU2VydmVyU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlRnVu Y3Rpb25TdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfQ3JlYXRlRnVuY3Rpb24ob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZU9wRmFtaWx5U3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZU9wRmFtaWx5KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVh dGVQTGFuZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVMYW5nU3RtdChvYmplY3RJZCwg cGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlUG9saWN5U3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZVBvbGljeVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Ny ZWF0ZVJhbmdlU3RtdDogLyogQ1JFQVRFIFRZUEUgQVMgUkFOR0UgKi8KKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZVJhbmdlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3Jl YXRlU2NoZW1hU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQob2JqZWN0 SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVNlcVN0bXQ6CisJCQlyZXR1cm4gZGVw YXJzZV9DcmVhdGVTZXFTdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVh dGVTdGF0c1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVTdGF0aXN0aWNzU3RtdChvYmpl Y3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoKKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0NyZWF0ZVRh YmxlQXNTdG10OgkvKiBDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcgKi8KKwkJCXJldHVybiBkZXBh cnNlX0NyZWF0ZVRhYmxlQXNTdG10X3ZhbmlsbGEob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJ Y2FzZSBUX0NyZWF0ZVRyYW5zZm9ybVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9DcmVhdGVUcmFu c2Zvcm1TdG10KG9iamVjdElkLCBwYXJzZXRyZWUpOworCisJCWNhc2UgVF9DcmVhdGVUcmlnU3Rt dDoKKwkJCXJldHVybiBkZXBhcnNlX0NyZWF0ZVRyaWdTdG10KG9iamVjdElkLCBwYXJzZXRyZWUp OworCisJCWNhc2UgVF9DcmVhdGVVc2VyTWFwcGluZ1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9D cmVhdGVVc2VyTWFwcGluZ1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX0Rl ZmluZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9EZWZpbmVTdG10KG9iamVjdElkLCBwYXJzZXRy ZWUsCisJCQkJCQkJCQkgIGNtZC0+ZC5zaW1wbGUuc2Vjb25kYXJ5T2JqZWN0KTsKKworCQljYXNl IFRfSW5kZXhTdG10OgorCQkJcmV0dXJuIGRlcGFyc2VfSW5kZXhTdG10KG9iamVjdElkLCBwYXJz ZXRyZWUpOworCisJCWNhc2UgVF9SZWZyZXNoTWF0Vmlld1N0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9SZWZyZXNoTWF0Vmlld1N0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisKKwkJY2FzZSBUX1Jl bmFtZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRk cmVzcywgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfUnVsZVN0bXQ6CisJCQlyZXR1cm4gZGVwYXJz ZV9SdWxlU3RtdChvYmplY3RJZCwgcGFyc2V0cmVlKTsKKworCQljYXNlIFRfVmlld1N0bXQ6CQkv KiBDUkVBVEUgVklFVyAqLworCQkJcmV0dXJuIGRlcGFyc2VfVmlld1N0bXQob2JqZWN0SWQsIHBh cnNldHJlZSk7CisKKwkJY2FzZSBUX1NlY0xhYmVsU3RtdDoKKwkJCXJldHVybiBkZXBhcnNlX1Nl Y0xhYmVsU3RtdChjbWQtPmQuc2ltcGxlLmFkZHJlc3MsIHBhcnNldHJlZSk7CisKKwkJZGVmYXVs dDoKKwkJCWVsb2coTE9HLCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZSBpbiBkZXBhcnNlIGNvbW1h bmQ6ICVkIiwKKwkJCQkgKGludCkgbm9kZVRhZyhwYXJzZXRyZWUpKTsKKwl9CisKKwlyZXR1cm4g TlVMTDsKK30KKworLyoKKyAqIFN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcu CisgKgorICogRGVhbCB3aXRoIGFsbCB0aGUgdGFibGUgZWxlbWVudHMgKGNvbHVtbnMgYW5kIGNv bnN0cmFpbnRzKS4KKyAqCisgKiBOb3RlIHdlIGlnbm9yZSBjb25zdHJhaW50cyBpbiB0aGUgcGFy c2Ugbm9kZSBoZXJlOyB0aGV5IGFyZSBleHRyYWN0ZWQgZnJvbQorICogc3lzdGVtIGNhdGFsb2dz IGluc3RlYWQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2RlcGFyc2VfVGFibGVFbGVtZW50cyhSZWxh dGlvbiByZWxhdGlvbiwgTGlzdCAqdGFibGVFbGVtZW50cywgTGlzdCAqZHBjb250ZXh0LAorCQkJ CQkgIGJvb2wgdHlwZWQsIGJvb2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0g TklMOworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7 CisJCU5vZGUJICAgKmVsdCA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2Rl VGFnKGVsdCkpCisJCXsKKwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVl ICAgICp0cmVlOworCisJCQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRl Zl90eXBlZChyZWxhdGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBl bHQpIDoKKwkJCQkJCWRlcGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJ CQkJCQkJICBjb21wb3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2Us IE5VTEwpOworCQkJCQlpZiAodHJlZSAhPSBOVUxMKQorCQkJCQkJZWxlbWVudHMgPSBsYXBwZW5k KGVsZW1lbnRzLCBuZXdfb2JqZWN0X29iamVjdCh0cmVlKSk7CisJCQkJfQorCQkJCWJyZWFrOwor CQkJY2FzZSBUX0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2co RVJST1IsICJpbnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisK KwlyZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBXb3JraG9yc2UgdG8gZGVwYXJzZSBhIENv bGxlY3RlZENvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29s bGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSkKK3sKKwlPdmVycmlkZVNlYXJj aFBhdGggKm92ZXJyaWRlUGF0aDsKKwlNZW1vcnlDb250ZXh0IG9sZGN4dDsKKwlNZW1vcnlDb250 ZXh0IHRtcGN4dDsKKwlPYmpUcmVlICAgICp0cmVlOworCWNoYXIJICAgKmNvbW1hbmQgPSBOVUxM OworCVN0cmluZ0luZm9EYXRhIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBk b25lIGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0 byBhdm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2Rl LCBidXQKKwkgKiBhbGxvY2F0ZSB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGlu Zy4KKwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRl eHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIs CisJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NT RVRfREVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpF KTsKKwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJICog TWFueSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5j IGZ1bmN0aW9uYWxpdHkKKwkgKiB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2YgZXhwcmVz c2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsIHdlIHdhbnQKKwkgKiBhbGwgb2JqZWN0IG5hbWVzIHRv IGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiIHRvCisJICogZW52 aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0aGVyIHRo YW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92ZXJyaWRl IHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50cmFsbHkg aGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgoQ3VycmVu dE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlvdmVycmlk ZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAgPSB0cnVl OworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXZlcmJvc2UgPSB2 ZXJib3NlX21vZGU7CisKKwlzd2l0Y2ggKGNtZC0+dHlwZSkKKwl7CisJCWNhc2UgU0NUX1NpbXBs ZToKKwkJCXRyZWUgPSBkZXBhcnNlX3NpbXBsZV9jb21tYW5kKGNtZCk7CisJCQlicmVhazsKKwkJ Y2FzZSBTQ1RfQWx0ZXJUYWJsZToKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyUmVsYXRpb24oY21k KTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9HcmFudDoKKwkJCXRyZWUgPSBkZXBhcnNlX0dyYW50 U3RtdChjbWQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUX0FsdGVyT3BGYW1pbHk6CisJCQl0cmVl ID0gZGVwYXJzZV9BbHRlck9wRmFtaWx5KGNtZCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RfQ3Jl YXRlT3BDbGFzczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZU9wQ2xhc3NTdG10KGNtZCk7CisJ CQlicmVhazsKKwkJY2FzZSBTQ1RfQWx0ZXJEZWZhdWx0UHJpdmlsZWdlczoKKwkJCXRyZWUgPSBk ZXBhcnNlX0FsdGVyRGVmYXVsdFByaXZpbGVnZXNTdG10KGNtZCk7CisJCQlicmVhazsKKwkJY2Fz ZSBTQ1RfQWx0ZXJUU0NvbmZpZzoKKwkJCXRyZWUgPSBkZXBhcnNlX0FsdGVyVFNDb25maWd1cmF0 aW9uU3RtdChjbWQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5l eHBlY3RlZCBkZXBhcnNlIG5vZGUgdHlwZSAlZCIsIGNtZC0+dHlwZSk7CisJfQorCisJUG9wT3Zl cnJpZGVTZWFyY2hQYXRoKCk7CisKKwlpZiAodHJlZSkKKwl7CisJCUpzb25iCSAgICpqc29uYjsK KworCQlqc29uYiA9IG9ianRyZWVfdG9fanNvbmIodHJlZSk7CisJCWNvbW1hbmQgPSBKc29uYlRv Q1N0cmluZygmc3RyLCAmanNvbmItPnJvb3QsIEpTT05CX0VTVElNQVRFRF9MRU4pOworCX0KKwor CS8qCisJICogQ2xlYW4gdXAuICBOb3RlIHRoYXQgc2luY2Ugd2UgY3JlYXRlZCB0aGUgU3RyaW5n SW5mbyBpbiB0aGUgY2FsbGVyJ3MKKwkgKiBjb250ZXh0LCB0aGUgb3V0cHV0IHN0cmluZyBpcyBu b3QgZGVsZXRlZCBoZXJlLgorCSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwor CU1lbW9yeUNvbnRleHREZWxldGUodG1wY3h0KTsKKworCXJldHVybiBjb21tYW5kOworfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2pzb24uYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9qc29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ZmJkM2I1NGU1ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9q c29uLmMKQEAgLTAsMCArMSw3NzYgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9q c29uLmMKKyAqCSAgSlNPTiBjb2RlIHJlbGF0ZWQgdG8gRERMIGNvbW1hbmQgZGVwYXJzaW5nCisg KgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMKKyAqCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJsaWIvc3RyaW5n aW5mby5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvanNv bmIuaCIKKworCisvKgorICogQ29udmVyc2lvbiBzcGVjaWZpZXIgd2hpY2ggZGV0ZXJtaW5lcyBo b3cgd2UgZXhwYW5kIHRoZSBKU09OIGVsZW1lbnQgaW50bworICogc3RyaW5nLgorICovCit0eXBl ZGVmIGVudW0KK3sKKwlTcGVjVHlwZU5hbWUsCisJU3BlY09wZXJhdG9yTmFtZSwKKwlTcGVjRG90 dGVkTmFtZSwKKwlTcGVjU3RyaW5nLAorCVNwZWNOdW1iZXIsCisJU3BlY1N0cmluZ0xpdGVyYWws CisJU3BlY0lkZW50aWZpZXIsCisJU3BlY1JvbGUKK30gY29udlNwZWNpZmllcjsKKworLyoKKyAq IEEgdGVybmFyeSB2YWx1ZSB0aGF0IHJlcHJlc2VudHMgYSBib29sZWFuIHR5cGUgSnNvbmJWYWx1 ZS4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJdHZfYWJzZW50LAorCXR2X3RydWUsCisJdHZfZmFs c2UKK30JCQlqc29uX3RyaXZhbHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2Vs ZW1lbnQoU3RyaW5nSW5mbyBidWYsIGNoYXIgKnBhcmFtLAorCQkJCQkJCQkJIEpzb25iVmFsdWUg Kmpzb252YWwsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCQkJCQkJIGNvbnN0IGNoYXIg KmZtdCk7CitzdGF0aWMgdm9pZCBleHBhbmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBidWYsIGNo YXIgKnBhcmFtLAorCQkJCQkJCSAgIEpzb25iVmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2Vw LAorCQkJCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOwor c3RhdGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxiYWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZXBh cnNlX2RkbF9qc29uX3RvX3N0cmluZyhjaGFyICpqc29uYik7CisKKy8qCisgKiBHaXZlbiBhIEpz b25iQ29udGFpbmVyLCBmaW5kIHRoZSBKc29uYlZhbHVlIHdpdGggdGhlIGdpdmVuIGtleSBuYW1l IGluIGl0LgorICogSWYgaXQncyBvZiBhIHR5cGUgb3RoZXIgdGhhbiBqYnZCb29sLCBhbiBlcnJv ciBpcyByYWlzZWQuIElmIGl0IGRvZXNuJ3QKKyAqIGV4aXN0LCB0dl9hYnNlbnQgaXMgcmV0dXJu ZWQ7IG90aGVyd2lzZSByZXR1cm4gdGhlIGFjdHVhbCBqc29uX3RyaXZhbHVlLgorICovCitzdGF0 aWMganNvbl90cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFp bmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlrZXk7CisJSnNv bmJWYWx1ZSAqdmFsdWU7CisJanNvbl90cml2YWx1ZSByZXN1bHQ7CisKKwlrZXkudHlwZSA9IGpi dlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwgPSBrZXluYW1lOworCWtleS52YWwuc3RyaW5n LmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRh aW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJfRk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVl ID09IE5VTEwpCisJCXJldHVybiB0dl9hYnNlbnQ7CisJaWYgKHZhbHVlLT50eXBlICE9IGpidkJv b2wpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgaXMgbm90IG9mIHR5cGUg Ym9vbGVhbiIsCisJCQkJCQlrZXluYW1lKSkpOworCXJlc3VsdCA9IHZhbHVlLT52YWwuYm9vbGVh biA/IHR2X3RydWUgOiB0dl9mYWxzZTsKKwlwZnJlZSh2YWx1ZSk7CisKKwlyZXR1cm4gcmVzdWx0 OworfQorCisvKgorICogR2l2ZW4gYSBKc29uYkNvbnRhaW5lciwgZmluZCB0aGUgSnNvbmJWYWx1 ZSB3aXRoIHRoZSBnaXZlbiBrZXkgbmFtZSBpbiBpdC4KKyAqIElmIGl0J3Mgb2YgYSB0eXBlIG90 aGVyIHRoYW4gamJ2U3RyaW5nLCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCBkb2Vzbid0Cisg KiBleGlzdCwgYW4gZXJyb3IgaXMgcmFpc2VkIHVubGVzcyBtaXNzaW5nX29rOyBvdGhlcndpc2Ug cmV0dXJuIE5VTEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVz aGx5IHBhbGxvYydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90 IE5VTEwsIGl0IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRp YyBjaGFyICoKK2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpj b250YWluZXIsIGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAq bGVuZ3RoKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJ ICAgKnN0cjsKKworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFu IGFycmF5ICovCisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwg PSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1 ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJf Rk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19v aykKKwkJCXJldHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVu dCBcIiVzXCIgaW4gSlNPTiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCWlmICh2YWx1ZS0+ dHlwZSAhPSBqYnZTdHJpbmcpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09E RV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIg aXMgbm90IG9mIHR5cGUgc3RyaW5nIiwga2V5bmFtZSkpKTsKKworCXN0ciA9IHBuc3RyZHVwKHZh bHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAobGVuZ3Ro KQorCQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVlKTsKKwly ZXR1cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIsZW5kX3B0 cikgXAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVyZXBvcnQo RVJST1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSks IFwKKwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkpOyBcCisJ fSB3aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIGRlcGFyc2VfZGRsX2pz b25fdG9fc3RyaW5nLgorICoKKyAqIEZpbmQgdGhlICJmbXQiIGVsZW1lbnQgaW4gdGhlIGdpdmVu IGNvbnRhaW5lciwgYW5kIGV4cGFuZCBpdCBpbnRvIHRoZQorICogcHJvdmlkZWQgU3RyaW5nSW5m by4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9mbXRfcmVjdXJzaXZlKEpzb25iQ29udGFpbmVy ICpjb250YWluZXIsIFN0cmluZ0luZm8gYnVmKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25i VmFsdWUgKnZhbHVlOworCWNvbnN0IGNoYXIgKmNwOworCWNvbnN0IGNoYXIgKnN0YXJ0X3B0cjsK Kwljb25zdCBjaGFyICplbmRfcHRyOworCWludAkJCWxlbjsKKworCXN0YXJ0X3B0ciA9IGZpbmRf c3RyaW5nX2luX2pzb25iY29udGFpbmVyKGNvbnRhaW5lciwgImZtdCIsIGZhbHNlLCAmbGVuKTsK KwllbmRfcHRyID0gc3RhcnRfcHRyICsgbGVuOworCisJZm9yIChjcCA9IHN0YXJ0X3B0cjsgY3Ag PCBlbmRfcHRyOyBjcCsrKQorCXsKKwkJY29udlNwZWNpZmllciBzcGVjaWZpZXI7CisJCWJvb2wJ CWlzX2FycmF5ID0gZmFsc2U7CisJCWNoYXIJICAgKnBhcmFtID0gTlVMTDsKKwkJY2hhcgkgICAq YXJyYXlzZXAgPSBOVUxMOworCisJCWlmICgqY3AgIT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlBRFZB TkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCisJCS8qIEVhc3kgY2FzZTogJSUgb3V0 cHV0cyBhIHNpbmdsZSAlICovCisJCWlmICgqY3AgPT0gJyUnKQorCQl7CisJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhck1hY3JvKGJ1ZiwgKmNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJ ICogU2NhbiB0aGUgbWFuZGF0b3J5IGVsZW1lbnQgbmFtZS4gIEFsbG93IGZvciBhbiBhcnJheSBz ZXBhcmF0b3IKKwkJICogKHdoaWNoIG1heSBiZSB0aGUgZW1wdHkgc3RyaW5nKSB0byBiZSBzcGVj aWZpZWQgYWZ0ZXIgYSBjb2xvbi4KKwkJICovCisJCWlmICgqY3AgPT0gJ3snKQorCQl7CisJCQlT dHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZvRGF0YSBhcnJheXNlcGJ1ZjsKKwkJ CVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJpbmdJbmZvKCZwYXJidWYpOworCQkJ YXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9w dHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7CisJCQkJaWYgKCpjcCA9PSAnOicp CisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3VuZCBhcnJheSBzZXBhcmF0b3IgZGVsaW1pdGVy OyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBsZXRlLCBzdGFydCBmaWxsaW5nIHRo ZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3RyaW5nSW5mbygmYXJyYXlzZXBidWYp OworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJCQkJaXNfYXJyYXkgPSB0cnVlOwor CQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJCQljb250aW51ZTsK KwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7CisJCQkJCUFEVkFOQ0VfUEFSU0Vf UE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlhcHBlbmRTdHJp bmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRF UihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBhcmJ1Zi5kYXRhOworCQkJaWYgKGlz X2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYuZGF0YTsKKwkJfQorCQlpZiAocGFy YW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJtaXNzaW5nIGNvbnZlcnNpb24g bmFtZSBpbiBjb252ZXJzaW9uIHNwZWNpZmllciIpKSk7CisKKwkJc3dpdGNoICgqY3ApCisJCXsK KwkJCWNhc2UgJ0knOgorCQkJCXNwZWNpZmllciA9IFNwZWNJZGVudGlmaWVyOworCQkJCWJyZWFr OworCQkJY2FzZSAnRCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0RvdHRlZE5hbWU7CisJCQkJYnJl YWs7CisJCQljYXNlICdzJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjU3RyaW5nOworCQkJCWJyZWFr OworCQkJY2FzZSAnTCc6CisJCQkJc3BlY2lmaWVyID0gU3BlY1N0cmluZ0xpdGVyYWw7CisJCQkJ YnJlYWs7CisJCQljYXNlICdUJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjVHlwZU5hbWU7CisJCQkJ YnJlYWs7CisJCQljYXNlICdPJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVjT3BlcmF0b3JOYW1lOwor CQkJCWJyZWFrOworCQkJY2FzZSAnbic6CisJCQkJc3BlY2lmaWVyID0gU3BlY051bWJlcjsKKwkJ CQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJCXNwZWNpZmllciA9IFNwZWNSb2xlOworCQkJCWJy ZWFrOworCQkJZGVmYXVsdDoKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNv bnZlcnNpb24gc3BlY2lmaWVyIFwiJWNcIiIsICpjcCkpKTsKKwkJfQorCisJCS8qCisJCSAqIE9i dGFpbiB0aGUgZWxlbWVudCB0byBiZSBleHBhbmRlZC4KKwkJICovCisJCWtleS50eXBlID0gamJ2 U3RyaW5nOworCQlrZXkudmFsLnN0cmluZy52YWwgPSBwYXJhbTsKKwkJa2V5LnZhbC5zdHJpbmcu bGVuID0gc3RybGVuKHBhcmFtKTsKKworCQl2YWx1ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRh aW5lcihjb250YWluZXIsIEpCX0ZPQkpFQ1QsICZrZXkpOworCisJCS8qCisJCSAqIEV4cGFuZCB0 aGUgZGF0YSAocG9zc2libHkgYW4gYXJyYXkpIGludG8gdGhlIG91dHB1dCBTdHJpbmdJbmZvLgor CQkgKi8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KGJ1ZiwgcGFyYW0s IHZhbHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBh bmRfb25lX2pzb25iX2VsZW1lbnQoYnVmLCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRf cHRyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcXVvdGVkIGlk ZW50aWZpZXIuICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGlj IHZvaWQKK2V4cGFuZF9qc29udmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFs dWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUg PT0gamJ2U3RyaW5nKTsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFs LCBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYs IHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYSBkb3Qtc2VwYXJhdGVkLW5hbWUuICBUaGUgdmFsdWUgbXVzdCBi ZSBvZiB0eXBlCisgKiBiaW5hcnkgYW5kIG1heSBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1l IiAob3B0aW9uYWwpLCAib2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRp b25hbCkuICBEb3VibGUgcXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5l Y2Vzc2FyeSwgYW5kIGRvdCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5 IHdlIG1pZ2h0IG5lZWQgYSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVu dCB1c2UgY2FzZQorICogbmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u dmFsX2RvdHRlZG5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KTsKKwor CXN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOworCWlmIChzdHIpCisJ eworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzLiIsIHF1b3RlX2lkZW50aWZpZXIoc3RyKSk7 CisJCXBmcmVlKHN0cik7CisJfQorCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWlu ZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJvYmpuYW1lIiwgZmFsc2Us IE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0 cikpOworCXBmcmVlKHN0cik7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJImF0dHJuYW1lIiwgdHJ1ZSwg TlVMTCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiLiVzIiwgcXVv dGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9Cit9CisKKy8qCisgKiBFeHBh bmQgYSBKU09OIHZhbHVlIGFzIGEgdHlwZSBuYW1lLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5k X2pzb252YWxfdHlwZW5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7 CisJY2hhcgkgICAqc2NoZW1hID0gTlVMTDsKKwljaGFyCSAgICp0eXBlbmFtZTsKKwljaGFyCSAg ICp0eXBtb2RzdHI7CisJanNvbl90cml2YWx1ZSBpc19hcnJheTsKKwljaGFyCSAgICphcnJheV9k ZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0aGUgb3V0cHV0IG5h bWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBlbXB0eSBzdHJpbmcg b3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2FzZXMKKwkgKiBpcyB0 aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4gdGhlIGZvcm1lciB3 ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBu ZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNlZSBmb3JtYXRfdHlw ZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcKKwkgKiBmb3IgdGhl IHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRoYXQgcmVxdWlyZSBx dW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2VyIHNjaGVtYS4KKwkg Ki8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZh bC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRydWUsIE5VTEwpOwor CXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJp bmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5VTEwpOworCXR5cG1v ZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnku ZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJaXNfYXJyYXkgPSBm aW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJ CQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJeworCQljYXNlIHR2 X3RydWU6CisJCQlhcnJheV9kZWNvciA9ICJbXSI7CisJCQlicmVhazsKKworCQljYXNlIHR2X2Zh bHNlOgorCQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCisJCWNhc2UgdHZfYWJzZW50 OgorCQlkZWZhdWx0OgorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9J TlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coIm1pc3NpbmcgdHlwYXJyYXkg ZWxlbWVudCIpKSk7CisJfQorCisJaWYgKHNjaGVtYSA9PSBOVUxMKQorCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiVzIiwgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSkpOworCWVsc2UgaWYgKHNj aGVtYVswXSA9PSAnXDAnKQorCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzIiwgdHlwZW5hbWUp OwkvKiBTcGVjaWFsIHR5cG1vZCBuZWVkcyAqLworCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcy4lcyIsIHF1b3RlX2lkZW50aWZpZXIoc2NoZW1hKSwKKwkJCQkJCSBxdW90ZV9pZGVu dGlmaWVyKHR5cGVuYW1lKSk7CisKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiVzJXMiLCB0eXBt b2RzdHIgPyB0eXBtb2RzdHIgOiAiIiwgYXJyYXlfZGVjb3IpOworCXBmcmVlKHNjaGVtYSk7CisJ cGZyZWUodHlwZW5hbWUpOworCXBmcmVlKHR5cG1vZHN0cik7Cit9CisKKy8qCisgKiBFeHBhbmQg YSBKU09OIHZhbHVlIGFzIGFuIG9wZXJhdG9yIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitleHBh bmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5l cihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5hbWUiLCB0cnVl LCBOVUxMKTsKKwkvKiBTY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLworCWlmIChzdHIg IT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi JXMuIiwgcXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIg PSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEs CisJCQkJCQkJCQkJIm9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisKKwlpZiAoc3RyKQorCXsKKwkJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHN0cik7CisJCXBmcmVlKHN0cik7CisJfQorfQor CisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1ZSBtdXN0 IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIEJpbmFyeS4gIEluIHRoZSBsYXR0ZXIg Y2FzZSwgaXQgbXVzdCBjb250YWluIGEgImZtdCIgZWxlbWVudCB3aGljaCB3aWxsCisgKiBiZSBy ZWN1cnNpdmVseSBleHBhbmRlZDsgYWxzbywgaWYgdGhlIG9iamVjdCBjb250YWlucyBhbiBlbGVt ZW50ICJwcmVzZW50IgorICogYW5kIGl0IGlzIHNldCB0byBmYWxzZSwgdGhlIGV4cGFuc2lvbiBp cyB0aGUgZW1wdHkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4 cGFuc2lvbiB3YXMgbWFkZSBkdWUgdG8gdGhlICJwcmVzZW50IiBmbGFnCisgKiBiZWluZyBzZXQg dG8gImZhbHNlIi4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGNoZWNrIGpz b252YWwgaXMgb2YgdHlwZSBqYnZTdHJpbmcgb3IgamJ2QmluYXJ5LgorICovCitzdGF0aWMgYm9v bAorZXhwYW5kX2pzb252YWxfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29u dmFsKQoreworCWlmIChqc29udmFsLT50eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJp bmFyeVN0cmluZ0luZm8oYnVmLCBqc29udmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBq c29udmFsLT52YWwuc3RyaW5nLmxlbik7CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0g amJ2QmluYXJ5KQorCXsKKwkJanNvbl90cml2YWx1ZSBwcmVzZW50OworCisJCXByZXNlbnQgPSBm aW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJ CQkJCQkJCQkgICJwcmVzZW50Iik7CisKKwkJLyoKKwkJICogSWYgInByZXNlbnQiIGlzIHNldCB0 byBmYWxzZSwgdGhpcyBlbGVtZW50IGV4cGFuZHMgdG8gZW1wdHk7CisJCSAqIG90aGVyd2lzZSAo ZWl0aGVyIHRydWUgb3IgYWJzZW50KSwgZmFsbCB0aHJvdWdoIHRvIGV4cGFuZCAiZm10Ii4KKwkJ ICovCisJCWlmIChwcmVzZW50ID09IHR2X2ZhbHNlKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWV4 cGFuZF9mbXRfcmVjdXJzaXZlKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwgYnVmKTsKKwl9CisJ ZWxzZQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIEpTT04gdmFsdWUgYXMgYSBzdHJpbmcgbGl0ZXJhbC4KKyAqLworc3RhdGljIHZvaWQKK2V4 cGFuZF9qc29udmFsX3N0cmxpdChTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkK K3sKKwljaGFyCSAgICpzdHI7CisJU3RyaW5nSW5mb0RhdGEgZHFkZWxpbTsKKwlzdGF0aWMgY29u c3QgY2hhciBkcXN1ZmZpeGVzW10gPSAiX1hZWlpZWF8iOworCWludAkJCWRxbmV4dGNoYXIgPSAw OworCisJc3RyID0gcG5zdHJkdXAoanNvbnZhbC0+dmFsLnN0cmluZy52YWwsIGpzb252YWwtPnZh bC5zdHJpbmcubGVuKTsKKworCS8qIEVhc3kgY2FzZTogaWYgdGhlcmUgYXJlIG5vICcgYW5kIG5v IFwsIGp1c3QgdXNlIGEgc2luZ2xlIHF1b3RlICovCisJaWYgKHN0cnBicmsoc3RyLCAiXCdcXCIp ID09IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlw ZnJlZShzdHIpOworCQlyZXR1cm47CisJfQorCisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBh IHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVsaW1pdGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVs aW0pOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0 cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkgIT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVzW2RxbmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFyID0g ZHFuZXh0Y2hhciAlIChzaXplb2YoZHFzdWZmaXhlcykgLSAxKTsKKwl9CisJLyogQWRkIHRyYWls aW5nICQgKi8KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmZHFkZWxpbSwgJyQnKTsKKworCS8qIEFu ZCBmaW5hbGx5IHByb2R1Y2UgdGhlIHF1b3RlZCBsaXRlcmFsIGludG8gdGhlIG91dHB1dCBTdHJp bmdJbmZvICovCisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLCBkcWRlbGltLmRhdGEs IHN0ciwgZHFkZWxpbS5kYXRhKTsKKwlwZnJlZShkcWRlbGltLmRhdGEpOworCXBmcmVlKHN0cik7 Cit9CisKKy8qCisgKiBFeHBhbmQgYSBKU09OIHZhbHVlIGFzIGFuIGludGVnZXIgcXVhbnRpdHku CisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1iZXIoU3RyaW5nSW5mbyBidWYs IEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhcgkgICAqc3RyZGF0dW07CisKKwlzdHJkYXR1 bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfb3V0LAorCQkJ CQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5udW1lcmljKSkpOworCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7CisJcGZyZWUoc3RyZGF0dW0pOwor fQorCisvKgorICogRXhwYW5kIGEgSlNPTiB2YWx1ZSBhcyBhIHJvbGUgbmFtZS4gIElmIHRoZSBp c19wdWJsaWMgZWxlbWVudCBpcyBzZXQgdG8KKyAqIHRydWUsIFBVQkxJQyBpcyBleHBhbmRlZCAo bm8gcXVvdGVzKTsgb3RoZXJ3aXNlLCBleHBhbmQgdGhlIGdpdmVuIHJvbGUgbmFtZSwKKyAqIHF1 b3RpbmcgYXMgYW4gaWRlbnRpZmllci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29udmFs X3JvbGUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJanNvbl90cml2 YWx1ZSBpc19wdWJsaWM7CisKKwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWlu ZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJ aWYgKGlzX3B1YmxpYyA9PSB0dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IlBVQkxJQyIpOworCWVsc2UKKwl7CisJCWNoYXIJICAgKnJvbGVuYW1lOworCisJCXJvbGVuYW1l ID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRh LAorCQkJCQkJCQkJCQkJICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJaWYgKHJvbGVuYW1l KQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihy b2xlbmFtZSkpOworCQkJcGZyZWUocm9sZW5hbWUpOworCQl9CisJfQorfQorCisvKgorICogRXhw YW5kIG9uZSBKU09OIGVsZW1lbnQgaW50byB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYWNjb3JkaW5n IHRvIHRoZQorICogY29udmVyc2lvbiBzcGVjaWZpZXIuICBUaGUgZWxlbWVudCB0eXBlIGlzIHZh bGlkYXRlZCwgYW5kIGFuIGVycm9yIGlzIHJhaXNlZAorICogaWYgaXQgZG9lc24ndCBtYXRjaCB3 aGF0IHdlIGV4cGVjdCBmb3IgdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorICoKKyAqIFJldHVy bnMgZmFsc2UgaWYgbm8gYWN0dWFsIGV4cGFuc2lvbiB3YXMgbWFkZSAoZHVlIHRvIHRoZSAicHJl c2VudCIgZmxhZworICogYmVpbmcgc2V0IHRvICJmYWxzZSIgaW4gZm9ybWF0dGVkIHN0cmluZyBl eHBhbnNpb24pLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KFN0 cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwgSnNvbmJWYWx1ZSAqanNvbnZhbCwKKwkJCQkJCSBj b252U3BlY2lmaWVyIHNwZWNpZmllciwgY29uc3QgY2hhciAqZm10KQoreworCWJvb2wJCXJlc3Vs dCA9IHRydWU7CisJRXJyb3JDb250ZXh0Q2FsbGJhY2sgc3FsZXJyY29udGV4dDsKKworCS8qIElm IHdlIHdlcmUgZ2l2ZW4gYSBmb3JtYXQgc3RyaW5nLCBzZXR1cCBhbiBlcmVwb3J0KCkgY29udGV4 dCBjYWxsYmFjayAqLworCWlmIChmbXQpCisJeworCQlzcWxlcnJjb250ZXh0LmNhbGxiYWNrID0g Zm10c3RyX2Vycm9yX2NhbGxiYWNrOworCQlzcWxlcnJjb250ZXh0LmFyZyA9ICh2b2lkICopIGZt dDsKKwkJc3FsZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJCWVy cm9yX2NvbnRleHRfc3RhY2sgPSAmc3FsZXJyY29udGV4dDsKKwl9CisKKwlpZiAoIWpzb252YWwp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRF Ul9WQUxVRSksCisJCQkJIGVycm1zZygiZWxlbWVudCBcIiVzXCIgbm90IGZvdW5kIiwgcGFyYW0p KSk7CisKKwlzd2l0Y2ggKHNwZWNpZmllcikKKwl7CisJCWNhc2UgU3BlY0lkZW50aWZpZXI6CisJ CQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZTdHJpbmcpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVy cm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJpbmcgZm9yICUlSSBlbGVtZW50IFwiJXNcIiwgZ290ICVk IiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRfanNvbnZhbF9p ZGVudGlmaWVyKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNEb3R0ZWRO YW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RydWN0IGZvciAlJUQgZWxlbWVudCBcIiVzXCIs IGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pz b252YWxfZG90dGVkbmFtZShidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVj U3RyaW5nOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nICYmCisJCQkJanNvbnZh bC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0 ZWQgSlNPTiBzdHJpbmcgb3Igc3RydWN0IGZvciAlJXMgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIs CisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJcmVzdWx0ID0gZXhwYW5kX2pz b252YWxfc3RyaW5nKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNwZWNTdHJp bmdMaXRlcmFsOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBv cnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVF KSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUwgZWxlbWVudCBc IiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhw YW5kX2pzb252YWxfc3RybGl0KGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNlIFNw ZWNUeXBlTmFtZToKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cnVjdCBmb3IgJSVUIGVsZW1lbnQg XCIlc1wiLCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4 cGFuZF9qc29udmFsX3R5cGVuYW1lKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IFNwZWNPcGVyYXRvck5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlTyBl bGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7 CisJCQlleHBhbmRfanNvbnZhbF9vcGVyYXRvcihidWYsIGpzb252YWwpOworCQkJYnJlYWs7CisK KwkJY2FzZSBTcGVjTnVtYmVyOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2TnVtZXJpYykK KwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIG51bWVyaWMgZm9yICUl biBlbGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUp KSk7CisJCQlleHBhbmRfanNvbnZhbF9udW1iZXIoYnVmLCBqc29udmFsKTsKKwkJCWJyZWFrOwor CisJCWNhc2UgU3BlY1JvbGU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJ CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVU RVJfVkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBzdHJ1Y3QgZm9yICUlUiBl bGVtZW50IFwiJXNcIiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7 CisJCQlleHBhbmRfanNvbnZhbF9yb2xlKGJ1ZiwganNvbnZhbCk7CisJCQlicmVhazsKKwl9CisK KwlpZiAoZm10KQorCQllcnJvcl9jb250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91 czsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBJdGVyYXRlIG9uIHRoZSBlbGVtZW50 cyBvZiBhIEpTT04gYXJyYXksIGV4cGFuZGluZyBlYWNoIG9uZSBpbnRvIHRoZSBvdXRwdXQKKyAq IFN0cmluZ0luZm8gcGVyIHRoZSBnaXZlbiBjb252ZXJzaW9uIHNwZWNpZmllciwgc2VwYXJhdGVk IGJ5IHRoZSBnaXZlbgorICogc2VwYXJhdG9yLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pz b25iX2FycmF5KFN0cmluZ0luZm8gYnVmLCBjaGFyICpwYXJhbSwKKwkJCQkgICBKc29uYlZhbHVl ICpqc29uYXJyLCBjaGFyICphcnJheXNlcCwgY29udlNwZWNpZmllciBzcGVjaWZpZXIsCisJCQkJ ICAgY29uc3QgY2hhciAqZm10KQoreworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRl eHQ7CisJSnNvbmJDb250YWluZXIgKmNvbnRhaW5lcjsKKwlKc29uYkl0ZXJhdG9yICppdDsKKwlK c29uYlZhbHVlCXY7CisJaW50CQkJdHlwZTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJU3RyaW5n SW5mb0RhdGEgYXJyYXllbGVtOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJp bmcsIHNldHVwIGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7 CisJCXNxbGVycmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNx bGVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3Vz ID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJj b250ZXh0OworCX0KKworCWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFyeSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwK KwkJCQkgZXJybXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0p KSk7CisKKwljb250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJaWYgKCFKc29u Q29udGFpbmVySXNBcnJheShjb250YWluZXIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1l bnQgXCIlc1wiIGlzIG5vdCBhIEpTT04gYXJyYXkiLCBwYXJhbSkpKTsKKworCWluaXRTdHJpbmdJ bmZvKCZhcnJheWVsZW0pOworCisJaXQgPSBKc29uYkl0ZXJhdG9ySW5pdChjb250YWluZXIpOwor CXdoaWxlICgodHlwZSA9IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwgJnYsIHRydWUpKSAhPSBXSkJf RE9ORSkKKwl7CisJCWlmICh0eXBlID09IFdKQl9FTEVNKQorCQl7CisJCQlyZXNldFN0cmluZ0lu Zm8oJmFycmF5ZWxlbSk7CisKKwkJCWlmIChleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoJmFycmF5 ZWxlbSwgcGFyYW0sICZ2LCBzcGVjaWZpZXIsIE5VTEwpKQorCQkJeworCQkJCWlmICghZmlyc3Qp CisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBhcnJheXNlcCk7CisKKwkJCQlhcHBl bmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwgYXJyYXllbGVtLmRhdGEsIGFycmF5ZWxlbS5sZW4pOwor CQkJCWZpcnN0ID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZm10KQorCQllcnJvcl9j b250ZXh0X3N0YWNrID0gc3FsZXJyY29udGV4dC5wcmV2aW91czsKK30KKworLyoKKyAqIFdvcmto b3JzZSBmb3IgZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQuCisgKi8KK2NoYXIgKgorZGVwYXJz ZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJRGF0dW0JCWQ7CisJSnNv bmIJICAgKmpzb25iOworCVN0cmluZ0luZm8JYnVmID0gKFN0cmluZ0luZm8pIHBhbGxvYzAoc2l6 ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhidWYpOworCisJZCA9IERp cmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sIFBvaW50ZXJHZXREYXR1bShqc29uX3N0cikpOwor CWpzb25iID0gKEpzb25iICopIERhdHVtR2V0UG9pbnRlcihkKTsKKworCWV4cGFuZF9mbXRfcmVj dXJzaXZlKCZqc29uYi0+cm9vdCwgYnVmKTsKKworCXJldHVybiBidWYtPmRhdGE7Cit9CisKKy8q LS0tLS0tCisgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9tIGEgSlNPTiBvYmplY3Qu CisgKgorICogVGhlIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBlbGVtZW50IG5hbWVkICJmbXQiICh3 aGljaCBtdXN0IGJlIGEgc3RyaW5nKS4KKyAqIFRoaXMgZm9ybWF0IHN0cmluZyBtYXkgY29udGFp biB6ZXJvIG9yIG1vcmUgJS1lc2NhcGVzLCB3aGljaCBjb25zaXN0IG9mIGFuCisgKiBlbGVtZW50 IG5hbWUgZW5jbG9zZWQgaW4geyB9LCBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24g bW9kaWZpZXIsCisgKiBmb2xsb3dlZCBieSBhIGNvbnZlcnNpb24gc3BlY2lmaWVyLiAgUG9zc2li bGUgY29udmVyc2lvbiBzcGVjaWZpZXJzIGFyZToKKyAqCisgKiAlCQlleHBhbmQgdG8gYSBsaXRl cmFsICUKKyAqIEkJCWV4cGFuZCBhcyBhIHNpbmdsZSwgbm9uLXF1YWxpZmllZCBpZGVudGlmaWVy CisgKiBECQlleHBhbmQgYXMgYSBwb3NzaWJseS1xdWFsaWZpZWQgaWRlbnRpZmllcgorICogVAkJ ZXhwYW5kIGFzIGEgdHlwZSBuYW1lCisgKiBPCQlleHBhbmQgYXMgYW4gb3BlcmF0b3IgbmFtZQor ICogTAkJZXhwYW5kIGFzIGEgc3RyaW5nIGxpdGVyYWwgKHF1b3RlIHVzaW5nIHNpbmdsZSBxdW90 ZXMpCisgKiBzCQlleHBhbmQgYXMgYSBzaW1wbGUgc3RyaW5nIChubyBxdW90aW5nKQorICogbgkJ ZXhwYW5kIGFzIGEgc2ltcGxlIG51bWJlciAobm8gcXVvdGluZykKKyAqIFIJCWV4cGFuZCBhcyBh IHJvbGUgbmFtZSAocG9zc2libHkgcXVvdGVkIG5hbWUsIG9yIFBVQkxJQykKKyAqCisgKiBUaGUg ZWxlbWVudCBuYW1lIG1heSBoYXZlIGFuIG9wdGlvbmFsIHNlcGFyYXRvciBzcGVjaWZpY2F0aW9u IHByZWNlZGVkCisgKiBieSBhIGNvbG9uLiAgSXRzIHByZXNlbmNlIGluZGljYXRlcyB0aGF0IHRo ZSBlbGVtZW50IGlzIGV4cGVjdGVkIHRvIGJlCisgKiBhbiBhcnJheTsgdGhlIHNwZWNpZmllZCBz ZXBhcmF0b3IgaXMgdXNlZCB0byBqb2luIHRoZSBhcnJheSBlbGVtZW50cy4KKyAqLS0tLS0tCisg Ki8KK0RhdHVtCitkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChQR19GVU5DVElPTl9BUkdTKQor eworCXRleHQJICAgKmpzb24gPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNoYXIJICAgKmpzb25f c3RyOworCisJanNvbl9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcoanNvbik7CisKKwlQR19SRVRVUk5f VEVYVF9QKGNzdHJpbmdfdG9fdGV4dChkZXBhcnNlX2RkbF9qc29uX3RvX3N0cmluZyhqc29uX3N0 cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNvbnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0 IHN0cmluZyBleHBhbnNpb24uCisgKgorICogWFhYOiBpbmRpY2F0ZSB3aGljaCBlbGVtZW50IHdl J3JlIGV4cGFuZGluZywgaWYgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2ZtdHN0cl9l cnJvcl9jYWxsYmFjayh2b2lkICphcmcpCit7CisJZXJyY29udGV4dCgid2hpbGUgZXhwYW5kaW5n IGZvcm1hdCBzdHJpbmcgXCIlc1wiIiwgKGNoYXIgKikgYXJnKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVz b24uYnVpbGQKaW5kZXggOWIzNTBkMDI1Zi4uYzFlMWEyYzE4ZSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWVz b24uYnVpbGQKQEAgLTE1LDYgKzE1LDggQEAgYmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAn Y29weXRvLmMnLAogICAnY3JlYXRlYXMuYycsCiAgICdkYmNvbW1hbmRzLmMnLAorICAnZGRsX2Rl cGFyc2UuYycsCisgICdkZGxfanNvbi5jJywKICAgJ2RlZmluZS5jJywKICAgJ2Rpc2NhcmQuYycs CiAgICdkcm9wY21kcy5jJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xh YmVsLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZWNsYWJlbC5jCmluZGV4IDdhZTE5Yjk4YmIu LjgxY2VkZWMyZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlY2xhYmVsLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VjbGFiZWwuYwpAQCAtMTM0LDYgKzEzNCw4IEBA IEV4ZWNTZWNMYWJlbFN0bXQoU2VjTGFiZWxTdG10ICpzdG10KQogCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKIAkJCQkJIGVycm1zZygibXVzdCBzcGVjaWZ5 IHByb3ZpZGVyIHdoZW4gbXVsdGlwbGUgc2VjdXJpdHkgbGFiZWwgcHJvdmlkZXJzIGhhdmUgYmVl biBsb2FkZWQiKSkpOwogCQlwcm92aWRlciA9IChMYWJlbFByb3ZpZGVyICopIGxpbml0aWFsKGxh YmVsX3Byb3ZpZGVyX2xpc3QpOworCQkvKiBDb3B5IHRoZSBwcm92aWRlciBuYW1lIHRvIHRoZSBw YXJzZXRyZWUsIG5lZWRlZCBmb3IgRERMIGRlcGFyc2luZyBvZiBTZWNMYWJlbFN0bXQgKi8KKwkJ c3RtdC0+cHJvdmlkZXIgPSBwc3RyZHVwKHByb3ZpZGVyLT5wcm92aWRlcl9uYW1lKTsKIAl9CiAJ ZWxzZQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9z cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmluZGV4IDk5YzlmOTFjYmEuLjQyMDVkZGEy MjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3NlcXVlbmNlLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTcwOCw2ICsxNzA4LDM5IEBAIHByb2Nl c3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25lZF9ieSwgYm9vbCBmb3JfaWRl bnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xvY2spOwogfQogCisvKgorICog UmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisgKi8KK0Zvcm1fcGdfc2VxdWVu Y2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVuY2VJZCkKK3sKKwlCdWZmZXIg ICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9uICAgIHNlcXJlbDsKKwlIZWFw VHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXE7CisJRm9ybV9w Z19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCS8qIE9wZW4gYW5kIEFjY2Vzc1NoYXJlTG9jayBz ZXF1ZW5jZSAqLworCWluaXRfc2VxdWVuY2Uoc2VxdWVuY2VJZCwgJmVsbSwgJnNlcXJlbCk7CisK KwlpZiAocGdfY2xhc3NfYWNsY2hlY2soc2VxdWVuY2VJZCwgR2V0VXNlcklkKCksCisJCQlBQ0xf U0VMRUNUIHwgQUNMX1VQREFURSB8IEFDTF9VU0FHRSkgIT0gQUNMQ0hFQ0tfT0spCisJCWVyZXBv cnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSks CisJCQkJCSBlcnJtc2coInBlcm1pc3Npb24gZGVuaWVkIGZvciBzZXF1ZW5jZSAlcyIsCisJCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoc2VxcmVsKSkpKTsKKworCXNlcSA9IHJlYWRfc2Vx X3R1cGxlKHNlcXJlbCwgJmJ1ZiwgJnNlcXR1cGxlKTsKKwlyZXRTZXEgPSBwYWxsb2Moc2l6ZW9m KEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCW1lbWNweShyZXRTZXEsIHNlcSwgc2l6 ZW9mKEZvcm1EYXRhX3BnX3NlcXVlbmNlX2RhdGEpKTsKKworCVVubG9ja1JlbGVhc2VCdWZmZXIo YnVmKTsKKwlyZWxhdGlvbl9jbG9zZShzZXFyZWwsIE5vTG9jayk7CisKKwlyZXR1cm4gcmV0U2Vx OworfQogCiAvKgogICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMgaW4gYSBsaXN0IG9mIHRo ZSBmb3JtIGNyZWF0ZWQgYnkgdGhlIHBhcnNlci4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3dvcmtlci5jCmluZGV4IDk2NzcyZTRkNzMuLmU2ZGM1Y2NkOGMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMjUwNyw3ICsyNTA3LDYgQEAgYXBwbHlf aGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwog fQogCi0KIC8qCiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0 Y2hlci4KICAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMgYi9zcmMv YmFja2VuZC90Y29wL3V0aWxpdHkuYwppbmRleCAyNDdkMDgxNmFkLi5mMTIxNWM4ZTE4IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3V0aWxpdHkuYworKysgYi9zcmMvYmFja2VuZC90Y29w L3V0aWxpdHkuYwpAQCAtMTQ0Niw3ICsxNDQ2LDggQEAgUHJvY2Vzc1V0aWxpdHlTbG93KFBhcnNl U3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQlhZGRyZXNzID0gRGVmaW5lQ29sbGF0aW9uKHBzdGF0ZSwK IAkJCQkJCQkJCQkJCQkgIHN0bXQtPmRlZm5hbWVzLAogCQkJCQkJCQkJCQkJCSAgc3RtdC0+ZGVm aW5pdGlvbiwKLQkJCQkJCQkJCQkJCQkgIHN0bXQtPmlmX25vdF9leGlzdHMpOworCQkJCQkJCQkJ CQkJCSAgc3RtdC0+aWZfbm90X2V4aXN0cywKKwkJCQkJCQkJCQkJCQkgICZzZWNvbmRhcnlPYmpl Y3QpOwogCQkJCQkJCWJyZWFrOwogCQkJCQkJZGVmYXVsdDoKIAkJCQkJCQllbG9nKEVSUk9SLCAi dW5yZWNvZ25pemVkIGRlZmluZSBzdG10IHR5cGU6ICVkIiwKQEAgLTIxOTYsNiArMjE5Nyw5NCBA QCBVdGlsaXR5Q29udGFpbnNRdWVyeShOb2RlICpwYXJzZXRyZWUpCiAJfQogfQogCisvKgorICog UmV0dXJuIHRoZSBnaXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0cmluZy4KKyAqLworY29uc3QgY2hh 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 RyI7CisJCWNhc2UgT0JKRUNUX1ZJRVc6CisJCQlyZXR1cm4gIlZJRVciOworCQlkZWZhdWx0Ogor CQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJ fQorfQogCiAvKgogICogQWx0ZXJPYmplY3RUeXBlQ29tbWFuZFRhZwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L2Zvcm1hdF90eXBlLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv Zm9ybWF0X3R5cGUuYwppbmRleCAyOTE4ZmRiZmI2Li5mNjRhNzIxM2I3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvZm9ybWF0X3R5cGUuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvZm9ybWF0X3R5cGUuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgInV0aWxzL251 bWVyaWMuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCi1zdGF0aWMgY2hhciAqcHJp bnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0 KTsKIAogCiAvKgpAQCAtMzYzLDcgKzM2Miw3IEBAIGZvcm1hdF90eXBlX3dpdGhfdHlwZW1vZChP aWQgdHlwZV9vaWQsIGludDMyIHR5cGVtb2QpCiAvKgogICogQWRkIHR5cG1vZCBkZWNvcmF0aW9u IHRvIHRoZSBiYXNpYyB0eXBlIG5hbWUKICAqLwotc3RhdGljIGNoYXIgKgorY2hhciAqCiBwcmlu dFR5cG1vZChjb25zdCBjaGFyICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQp CiB7CiAJY2hhcgkgICAqcmVzOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Jl Z3Byb2MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9yZWdwcm9jLmMKaW5kZXggNmQ0YzFjMjdh NS4uNDg2YTA5ZTE3ZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JlZ3Byb2Mu YworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmVncHJvYy5jCkBAIC00NCw2ICs0NCw4IEBA CiBzdGF0aWMgdm9pZCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcsIGJv b2wgYWxsb3dOb25lLAogCQkJCQkJCQkgTGlzdCAqKm5hbWVzLCBpbnQgKm5hcmdzLCBPaWQgKmFy Z3R5cGVzKTsKIAorc3RhdGljIHZvaWQgZm9ybWF0X3Byb2NlZHVyZV9hcmdzX2ludGVybmFsKEZv cm1fcGdfcHJvYyBwcm9jZm9ybSwKKwkJCQkJCQkJCQkgICBTdHJpbmdJbmZvIGJ1ZiwgYm9vbCBm b3JjZV9xdWFsaWZ5KTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkgVVNFUiBJL08gUk9V VElORVMJCQkJCQkJCQkJCQkJCSAqCkBAIC0zMzEsNiArMzMzLDI5IEBAIGZvcm1hdF9wcm9jZWR1 cmVfcXVhbGlmaWVkKE9pZCBwcm9jZWR1cmVfb2lkKQogCXJldHVybiBmb3JtYXRfcHJvY2VkdXJl X2V4dGVuZGVkKHByb2NlZHVyZV9vaWQsIEZPUk1BVF9QUk9DX0ZPUkNFX1FVQUxJRlkpOwogfQog CisvKgorICogZm9ybWF0X3Byb2NlZHVyZV9hcmdzICAgLSBjb252ZXJ0cyBwcm9jIE9JRCB0byAi KGFyZ3MpIgorICovCitjaGFyICoKK2Zvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJvY2VkdXJl X29pZCwgYm9vbCBmb3JjZV9xdWFsaWZ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlIZWFw VHVwbGUgICBwcm9jdHVwOworCUZvcm1fcGdfcHJvYyBwcm9jZm9ybTsKKworCXByb2N0dXAgPSBT ZWFyY2hTeXNDYWNoZTEoUFJPQ09JRCwgT2JqZWN0SWRHZXREYXR1bShwcm9jZWR1cmVfb2lkKSk7 CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3IgcHJvY2VkdXJlICV1IiwgcHJvY2VkdXJlX29pZCk7CisJcHJvY2Zv cm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisKKwlpbml0U3RyaW5nSW5m bygmYnVmKTsKKwlmb3JtYXRfcHJvY2VkdXJlX2FyZ3NfaW50ZXJuYWwocHJvY2Zvcm0sICZidWYs IGZvcmNlX3F1YWxpZnkpOworCisJUmVsZWFzZVN5c0NhY2hlKHByb2N0dXApOworCisJcmV0dXJu IGJ1Zi5kYXRhOworfQorCiAvKgogICogZm9ybWF0X3Byb2NlZHVyZV9leHRlbmRlZCAtIGNvbnZl cnRzIHByb2NlZHVyZSBPSUQgdG8gInByb19uYW1lKGFyZ3MpIgogICoKQEAgLTIwNjAsMyArMjA4 NSwzMSBAQCBwYXJzZU5hbWVBbmRBcmdUeXBlcyhjb25zdCBjaGFyICpzdHJpbmcsIGJvb2wgYWxs b3dOb25lLCBMaXN0ICoqbmFtZXMsCiAKIAlwZnJlZShyYXduYW1lKTsKIH0KKworLyoKKyAqIEFw cGVuZCB0aGUgcGFyZW50aGVzaXplZCBhcmd1bWVudHMgb2YgdGhlIGdpdmVuIHBnX3Byb2Mgcm93 IGludG8gdGhlIG91dHB1dAorICogYnVmZmVyLiBmb3JjZV9xdWFsaWZ5IGluZGljYXRlcyB3aGV0 aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHR5cGUgbmFtZXMKKyAqIHJlZ2FyZGxlc3Mgb2YgdmlzaWJp bGl0eS4KKyAqLworc3RhdGljIHZvaWQKK2Zvcm1hdF9wcm9jZWR1cmVfYXJnc19pbnRlcm5hbChG b3JtX3BnX3Byb2MgcHJvY2Zvcm0sIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIGJvb2wgZm9y Y2VfcXVhbGlmeSkKK3sKKwlpbnQJCQlpOworCWNoYXIqCQkoKmZ1bmNbMl0pKE9pZCkgPSB7Zm9y bWF0X3R5cGVfYmUsIGZvcm1hdF90eXBlX2JlX3F1YWxpZmllZH07CisKKwlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihidWYsICcoJyk7CisJZm9yIChpID0gMDsgaSA8IHByb2Nmb3JtLT5wcm9uYXJnczsg aSsrKQorCXsKKwkJT2lkCQkJdGhpc2FyZ3R5cGUgPSBwcm9jZm9ybS0+cHJvYXJndHlwZXMudmFs dWVzW2ldOworCQljaGFyCSAgICphcmd0eXBlID0gTlVMTDsKKworCQlpZiAoaSA+IDApCisJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcsJyk7CisKKwkJYXJndHlwZSA9IGZ1bmNbZm9yY2Vf cXVhbGlmeV0odGhpc2FyZ3R5cGUpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgYXJn dHlwZSk7CisJCXBmcmVlKGFyZ3R5cGUpOworCX0KKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYs ICcpJyk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKaW5kZXggNjQxZGYxY2FiZS4uZjk5 ZWJhMWQ3MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwpAQCAtMzUsNiArMzUsNyBAQAog I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Bh cnRpdGlvbmVkX3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCisjaW5jbHVk ZSAiY2F0YWxvZy9wZ19yZXdyaXRlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19zdGF0aXN0aWNf ZXh0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190cmlnZ2VyLmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCkBAIC0zNTgsNyArMzU5LDYgQEAgc3RhdGljIGludAlwcmludF9mdW5jdGlv bl9hcmd1bWVudHMoU3RyaW5nSW5mbyBidWYsIEhlYXBUdXBsZSBwcm9jdHVwLAogCQkJCQkJCQkJ IGJvb2wgcHJpbnRfdGFibGVfYXJncywgYm9vbCBwcmludF9kZWZhdWx0cyk7CiBzdGF0aWMgdm9p ZCBwcmludF9mdW5jdGlvbl9yZXR0eXBlKFN0cmluZ0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1 cCk7CiBzdGF0aWMgdm9pZCBwcmludF9mdW5jdGlvbl90cmZ0eXBlcyhTdHJpbmdJbmZvIGJ1Ziwg SGVhcFR1cGxlIHByb2N0dXApOwotc3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShT dHJpbmdJbmZvIGJ1ZiwgSGVhcFR1cGxlIHByb2N0dXApOwogc3RhdGljIHZvaWQgc2V0X3J0YWJs ZV9uYW1lcyhkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgTGlzdCAqcGFyZW50X25hbWVzcGFjZXMs CiAJCQkJCQkJIEJpdG1hcHNldCAqcmVsc191c2VkKTsKIHN0YXRpYyB2b2lkIHNldF9kZXBhcnNl X2Zvcl9xdWVyeShkZXBhcnNlX25hbWVzcGFjZSAqZHBucywgUXVlcnkgKnF1ZXJ5LApAQCAtNDgy LDIyICs0ODIsMTUgQEAgc3RhdGljIHZvaWQgZ2V0X2Zyb21fY2xhdXNlX2NvbGRlZmxpc3QoUmFu Z2VUYmxGdW5jdGlvbiAqcnRmdW5jLAogCQkJCQkJCQkJICAgZGVwYXJzZV9jb250ZXh0ICpjb250 ZXh0KTsKIHN0YXRpYyB2b2lkIGdldF90YWJsZXNhbXBsZV9kZWYoVGFibGVTYW1wbGVDbGF1c2Ug KnRhYmxlc2FtcGxlLAogCQkJCQkJCQlkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwotc3RhdGlj IHZvaWQgZ2V0X29wY2xhc3NfbmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwK LQkJCQkJCQkgU3RyaW5nSW5mbyBidWYpOwogc3RhdGljIE5vZGUgKnByb2Nlc3NJbmRpcmVjdGlv bihOb2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgcHJp bnRTdWJzY3JpcHRzKFN1YnNjcmlwdGluZ1JlZiAqc2JzcmVmLCBkZXBhcnNlX2NvbnRleHQgKmNv bnRleHQpOwogc3RhdGljIGNoYXIgKmdldF9yZWxhdGlvbl9uYW1lKE9pZCByZWxpZCk7CiBzdGF0 aWMgY2hhciAqZ2VuZXJhdGVfcmVsYXRpb25fbmFtZShPaWQgcmVsaWQsIExpc3QgKm5hbWVzcGFj ZXMpOwogc3RhdGljIGNoYXIgKmdlbmVyYXRlX3F1YWxpZmllZF9yZWxhdGlvbl9uYW1lKE9pZCBy ZWxpZCk7Ci1zdGF0aWMgY2hhciAqZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBp bnQgbmFyZ3MsCi0JCQkJCQkJCQlMaXN0ICphcmduYW1lcywgT2lkICphcmd0eXBlcywKLQkJCQkJ CQkJCWJvb2wgaGFzX3ZhcmlhZGljLCBib29sICp1c2VfdmFyaWFkaWNfcCwKLQkJCQkJCQkJCVBh cnNlRXhwcktpbmQgc3BlY2lhbF9leHBya2luZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfb3Bl cmF0b3JfbmFtZShPaWQgb3BlcmlkLCBPaWQgYXJnMSwgT2lkIGFyZzIpOwogc3RhdGljIHZvaWQg YWRkX2Nhc3RfdG8oU3RyaW5nSW5mbyBidWYsIE9pZCB0eXBpZCk7CiBzdGF0aWMgY2hhciAqZ2Vu ZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFtZShPaWQgdHlwaWQpOwogc3RhdGljIHRleHQgKnN0cmlu Z190b190ZXh0KGNoYXIgKnN0cik7Ci1zdGF0aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9p ZCByZWxpZCk7CiBzdGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0 dW0gcmVsb3B0aW9ucyk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5pbmgg PyAiIiA6ICJPTkxZICIpCkBAIC01NDUsNiArNTM4LDEwNCBAQCBwZ19nZXRfcnVsZWRlZl9leHQo UEdfRlVOQ1RJT05fQVJHUykKIAlQR19SRVRVUk5fVEVYVF9QKHN0cmluZ190b190ZXh0KHJlcykp OwogfQogCisvKgorICogR2l2ZW4gYSBwYWlyIG9mIERhdHVtIGNvcnJlc3BvbmRpbmcgdG8gYSBy dWxlJ3MgcGdfcmV3cml0ZS5ldl9xdWFsIGFuZAorICogZXZfYWN0aW9uIGNvbHVtbnMsIHJldHVy biB0aGVpciB0ZXh0IHJlcHJlc2VudGF0aW9uOyBldl9xdWFsIGFzIGEgc2luZ2xlCisgKiBzdHJp bmcgaW4gd2hlcmVDbGF1c2UgYW5kIGV2X2FjdGlvbiBhcyBhIExpc3Qgb2Ygc3RyaW5ncyAod2hp Y2ggbWlnaHQgYmUKKyAqIE5JTCwgc2lnbmFsbGluZyBOT1RISU5HKSBpbiBhY3Rpb25zLgorICov Cit2b2lkCitwZ19nZXRfcnVsZWRlZl9kZXRhaWxlZChEYXR1bSBldl9xdWFsLCBEYXR1bSBldl9h Y3Rpb24sCisJCQkJCQljaGFyICoqd2hlcmVDbGF1c2UsIExpc3QgKiphY3Rpb25zKQoreworCWlu dAkJCXByZXR0eUZsYWdzID0gMDsKKwljaGFyCSAgICpxdWFsc3RyID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhldl9xdWFsKTsKKwljaGFyCSAgICphY3Rpb25zdHIgPSBUZXh0RGF0dW1HZXRDU3RyaW5n KGV2X2FjdGlvbik7CisJTGlzdAkgICAqYWN0aW9uTm9kZUxpc3QgPSAoTGlzdCAqKSBzdHJpbmdU b05vZGUoYWN0aW9uc3RyKTsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkqd2hlcmVDbGF1c2Ug PSBOVUxMOworCSphY3Rpb25zID0gTklMOworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWlmIChz dHJsZW4ocXVhbHN0cikgPiAwICYmIHN0cmNtcChxdWFsc3RyLCAiPD4iKSAhPSAwKQorCXsKKwkJ Tm9kZQkgICAqcXVhbDsKKwkJUXVlcnkJICAgKnF1ZXJ5OworCQlkZXBhcnNlX2NvbnRleHQgY29u dGV4dDsKKwkJZGVwYXJzZV9uYW1lc3BhY2UgZHBuczsKKworCQlxdWFsID0gc3RyaW5nVG9Ob2Rl KHF1YWxzdHIpOworCisJCXF1ZXJ5ID0gKFF1ZXJ5ICopIGxpbml0aWFsKGFjdGlvbk5vZGVMaXN0 KTsKKwkJcXVlcnkgPSBnZXRJbnNlcnRTZWxlY3RRdWVyeShxdWVyeSwgTlVMTCk7CisKKwkJQWNx dWlyZVJld3JpdGVMb2NrcyhxdWVyeSwgZmFsc2UsIGZhbHNlKTsKKworCQljb250ZXh0LmJ1ZiA9 ICZidWY7CisJCWNvbnRleHQubmFtZXNwYWNlcyA9IGxpc3RfbWFrZTEoJmRwbnMpOworCQljb250 ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKKwkJY29udGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKKwkJ Y29udGV4dC52YXJwcmVmaXggPSAobGlzdF9sZW5ndGgocXVlcnktPnJ0YWJsZSkgIT0gMSk7CisJ CWNvbnRleHQucHJldHR5RmxhZ3MgPSBwcmV0dHlGbGFnczsKKwkJY29udGV4dC53cmFwQ29sdW1u ID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKwkJY29udGV4dC5pbmRlbnRMZXZlbCA9IFBSRVRUWUlO REVOVF9TVEQ7CisKKwkJc2V0X2RlcGFyc2VfZm9yX3F1ZXJ5KCZkcG5zLCBxdWVyeSwgTklMKTsK KworCQlnZXRfcnVsZV9leHByKHF1YWwsICZjb250ZXh0LCBmYWxzZSk7CisKKwkJKndoZXJlQ2xh dXNlID0gcHN0cmR1cChidWYuZGF0YSk7CisJfQorCisJaWYgKGxpc3RfbGVuZ3RoKGFjdGlvbk5v ZGVMaXN0KSA+IDApCisJeworCQlMaXN0Q2VsbCAgICpjZWxsOworCisJCWZvcmVhY2goY2VsbCwg YWN0aW9uTm9kZUxpc3QpCisJCXsKKwkJCVF1ZXJ5CSAgICpxdWVyeSA9IChRdWVyeSAqKSBsZmly c3QoY2VsbCk7CisKKwkJCWlmIChxdWVyeS0+Y29tbWFuZFR5cGUgPT0gQ01EX05PVEhJTkcpCisJ CQkJY29udGludWU7CisKKwkJCXJlc2V0U3RyaW5nSW5mbygmYnVmKTsKKwkJCWdldF9xdWVyeV9k ZWYocXVlcnksICZidWYsIE5JTCwgTlVMTCwgdHJ1ZSwKKwkJCQkJCSAgcHJldHR5RmxhZ3MsIFdS QVBfQ09MVU1OX0RFRkFVTFQsIDApOworCQkJKmFjdGlvbnMgPSBsYXBwZW5kKCphY3Rpb25zLCBw c3RyZHVwKGJ1Zi5kYXRhKSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUbyBnZXQgdGhlIHJld3Jp dGUgcnVsZSBvZiBhIHZpZXcgd2hlbiB0aGUgQ1JFQVRFIFZJRVcgY29tbWFuZCBleGVjdXRpb24g aXMKKyAqIHN0aWxsIGluIHByb2dyZXNzOiB3ZSBzZWFyY2ggdGhlIHN5c3RlbSBjYWNoZSBSVUxF UkVMTkFNRSB0byBnZXQgdGhlIHJld3JpdGUKKyAqIHJ1bGUgb2YgdGhlIHZpZXcgYXMgb3Bwb3Nl ZCB0byBxdWVyeWluZyBwZ19yZXdyaXRlIGFzIGluIHBnX2dldF92aWV3ZGVmX3dvcmtlcigpLAor ICogd2hpY2ggd2lsbCByZXR1cm4gZW1wdHkgcmVzdWx0LgorICovCitjaGFyICoKK3BnX2dldF92 aWV3ZGVmX2ludGVybmFsKE9pZCB2aWV3b2lkKQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlS ZWxhdGlvbglwZ19yZXdyaXRlOworCUhlYXBUdXBsZQlydWxldHVwOworCVR1cGxlRGVzYwlydWxl dHRjOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJcGdfcmV3cml0ZSA9IHRhYmxlX29wZW4o UmV3cml0ZVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlydWxldHVwID0gU2VhcmNo U3lzQ2FjaGUyKFJVTEVSRUxOQU1FLAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bSh2aWV3b2lk KSwKKwkJCQkJCQkgIFBvaW50ZXJHZXREYXR1bShWaWV3U2VsZWN0UnVsZU5hbWUpKTsKKwlpZiAo IUhlYXBUdXBsZUlzVmFsaWQocnVsZXR1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciByZXdyaXRlIHJ1bGUgZm9yIHZpZXcgd2l0aCBPSUQgJXUiLCB2aWV3b2lkKTsK KworCXJ1bGV0dGMgPSBwZ19yZXdyaXRlLT5yZF9hdHQ7CisJbWFrZV92aWV3ZGVmKCZidWYsIHJ1 bGV0dXAsIHJ1bGV0dGMsIDAsIFdSQVBfQ09MVU1OX0RFRkFVTFQpOworCVJlbGVhc2VTeXNDYWNo ZShydWxldHVwKTsKKwl0YWJsZV9jbG9zZShwZ19yZXdyaXRlLCBBY2Nlc3NTaGFyZUxvY2spOwor CisJcmV0dXJuIGJ1Zi5kYXRhOworfQogCiBzdGF0aWMgY2hhciAqCiBwZ19nZXRfcnVsZWRlZl93 b3JrZXIoT2lkIHJ1bGVvaWQsIGludCBwcmV0dHlGbGFncykKQEAgLTEwMTUsNjUgKzExMDYsMTIg QEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0cmlnaWQsIGJvb2wgcHJldHR5KQogCWlm ICghaXNudWxsKQogCXsKIAkJTm9kZQkgICAqcXVhbDsKLQkJY2hhcgkJcmVsa2luZDsKLQkJZGVw YXJzZV9jb250ZXh0IGNvbnRleHQ7Ci0JCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7Ci0JCVJhbmdl VGJsRW50cnkgKm9sZHJ0ZTsKLQkJUmFuZ2VUYmxFbnRyeSAqbmV3cnRlOwotCi0JCWFwcGVuZFN0 cmluZ0luZm9TdHJpbmcoJmJ1ZiwgIldIRU4gKCIpOworCQljaGFyCSAgICpxdWFsc3RyOwogCiAJ CXF1YWwgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmluZyh2YWx1ZSkpOworCQlxdWFs c3RyID0gcGdfZ2V0X3RyaWdnZXJfd2hlbmNsYXVzZSh0cmlncmVjLCBxdWFsLCBwcmV0dHkpOwog Ci0JCXJlbGtpbmQgPSBnZXRfcmVsX3JlbGtpbmQodHJpZ3JlYy0+dGdyZWxpZCk7Ci0KLQkJLyog QnVpbGQgbWluaW1hbCBPTEQgYW5kIE5FVyBSVEVzIGZvciB0aGUgcmVsICovCi0JCW9sZHJ0ZSA9 IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOwotCQlvbGRydGUtPnJ0ZWtpbmQgPSBSVEVfUkVMQVRJ T047Ci0JCW9sZHJ0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOwotCQlvbGRydGUtPnJlbGtp bmQgPSByZWxraW5kOwotCQlvbGRydGUtPnJlbGxvY2ttb2RlID0gQWNjZXNzU2hhcmVMb2NrOwot CQlvbGRydGUtPmFsaWFzID0gbWFrZUFsaWFzKCJvbGQiLCBOSUwpOwotCQlvbGRydGUtPmVyZWYg PSBvbGRydGUtPmFsaWFzOwotCQlvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsKLQkJb2xkcnRlLT5p bmggPSBmYWxzZTsKLQkJb2xkcnRlLT5pbkZyb21DbCA9IHRydWU7Ci0KLQkJbmV3cnRlID0gbWFr ZU5vZGUoUmFuZ2VUYmxFbnRyeSk7Ci0JCW5ld3J0ZS0+cnRla2luZCA9IFJURV9SRUxBVElPTjsK LQkJbmV3cnRlLT5yZWxpZCA9IHRyaWdyZWMtPnRncmVsaWQ7Ci0JCW5ld3J0ZS0+cmVsa2luZCA9 IHJlbGtpbmQ7Ci0JCW5ld3J0ZS0+cmVsbG9ja21vZGUgPSBBY2Nlc3NTaGFyZUxvY2s7Ci0JCW5l d3J0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm5ldyIsIE5JTCk7Ci0JCW5ld3J0ZS0+ZXJlZiA9IG5l d3J0ZS0+YWxpYXM7Ci0JCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNlOwotCQluZXdydGUtPmluaCA9 IGZhbHNlOwotCQluZXdydGUtPmluRnJvbUNsID0gdHJ1ZTsKLQotCQkvKiBCdWlsZCB0d28tZWxl bWVudCBydGFibGUgKi8KLQkJbWVtc2V0KCZkcG5zLCAwLCBzaXplb2YoZHBucykpOwotCQlkcG5z LnJ0YWJsZSA9IGxpc3RfbWFrZTIob2xkcnRlLCBuZXdydGUpOwotCQlkcG5zLnN1YnBsYW5zID0g TklMOwotCQlkcG5zLmN0ZXMgPSBOSUw7Ci0JCWRwbnMuYXBwZW5kcmVscyA9IE5VTEw7Ci0JCXNl dF9ydGFibGVfbmFtZXMoJmRwbnMsIE5JTCwgTlVMTCk7Ci0JCXNldF9zaW1wbGVfY29sdW1uX25h bWVzKCZkcG5zKTsKLQotCQkvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9uZS1kZWVwIG5hbWVzcGFj ZSBzdGFjayAqLwotCQljb250ZXh0LmJ1ZiA9ICZidWY7Ci0JCWNvbnRleHQubmFtZXNwYWNlcyA9 IGxpc3RfbWFrZTEoJmRwbnMpOwotCQljb250ZXh0LndpbmRvd0NsYXVzZSA9IE5JTDsKLQkJY29u dGV4dC53aW5kb3dUTGlzdCA9IE5JTDsKLQkJY29udGV4dC52YXJwcmVmaXggPSB0cnVlOwotCQlj b250ZXh0LnByZXR0eUZsYWdzID0gR0VUX1BSRVRUWV9GTEFHUyhwcmV0dHkpOwotCQljb250ZXh0 LndyYXBDb2x1bW4gPSBXUkFQX0NPTFVNTl9ERUZBVUxUOwotCQljb250ZXh0LmluZGVudExldmVs ID0gUFJFVFRZSU5ERU5UX1NURDsKLQkJY29udGV4dC5zcGVjaWFsX2V4cHJraW5kID0gRVhQUl9L SU5EX05PTkU7Ci0JCWNvbnRleHQuYXBwZW5kcGFyZW50cyA9IE5VTEw7Ci0KLQkJZ2V0X3J1bGVf ZXhwcihxdWFsLCAmY29udGV4dCwgZmFsc2UpOwotCi0JCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmJ1ZiwgIikgIik7CisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIldIRU4gKCVzKSAiLCBxdWFs c3RyKTsKIAl9CiAKIAlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJFWEVDVVRFIEZVTkNUSU9OICVz KCIsCkBAIC0xMTE0LDYgKzExNTIsNjkgQEAgcGdfZ2V0X3RyaWdnZXJkZWZfd29ya2VyKE9pZCB0 cmlnaWQsIGJvb2wgcHJldHR5KQogCXJldHVybiBidWYuZGF0YTsKIH0KIAorLyoKKyAqIFBhcnNl IGJhY2sgdGhlIFRyaWdnZXJXaGVuIGNsYXVzZSBvZiBhIHRyaWdnZXIgZ2l2ZW4gdGhlIHBnX3Ry aWdnZXIgcmVjb3JkIGFuZAorICogdGhlIGV4cHJlc3Npb24gdHJlZSAoaW4gbm9kZVRvU3RyaW5n KCkgcmVwcmVzZW50YXRpb24pIGZyb20gcGdfdHJpZ2dlci50Z3F1YWwKKyAqIGZvciB0aGUgdHJp Z2dlcidzIFdIRU4gY29uZGl0aW9uLgorICovCitjaGFyICoKK3BnX2dldF90cmlnZ2VyX3doZW5j bGF1c2UoRm9ybV9wZ190cmlnZ2VyIHRyaWdyZWMsIE5vZGUgKndoZW5DbGF1c2UsIGJvb2wgcHJl dHR5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwljaGFyCQlyZWxraW5kOworCWRlcGFyc2Vf Y29udGV4dCBjb250ZXh0OworCWRlcGFyc2VfbmFtZXNwYWNlIGRwbnM7CisJUmFuZ2VUYmxFbnRy eSAqb2xkcnRlOworCVJhbmdlVGJsRW50cnkgKm5ld3J0ZTsKKworCWluaXRTdHJpbmdJbmZvKCZi dWYpOworCisJcmVsa2luZCA9IGdldF9yZWxfcmVsa2luZCh0cmlncmVjLT50Z3JlbGlkKTsKKwor CS8qIEJ1aWxkIG1pbmltYWwgT0xEIGFuZCBORVcgUlRFcyBmb3IgdGhlIHJlbCAqLworCW9sZHJ0 ZSA9IG1ha2VOb2RlKFJhbmdlVGJsRW50cnkpOworCW9sZHJ0ZS0+cnRla2luZCA9IFJURV9SRUxB VElPTjsKKwlvbGRydGUtPnJlbGlkID0gdHJpZ3JlYy0+dGdyZWxpZDsKKwlvbGRydGUtPnJlbGtp bmQgPSByZWxraW5kOworCW9sZHJ0ZS0+YWxpYXMgPSBtYWtlQWxpYXMoIm9sZCIsIE5JTCk7CisJ b2xkcnRlLT5lcmVmID0gb2xkcnRlLT5hbGlhczsKKwlvbGRydGUtPmxhdGVyYWwgPSBmYWxzZTsK KwlvbGRydGUtPmluaCA9IGZhbHNlOworCW9sZHJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworCisJbmV3 cnRlID0gbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSk7CisJbmV3cnRlLT5ydGVraW5kID0gUlRFX1JF TEFUSU9OOworCW5ld3J0ZS0+cmVsaWQgPSB0cmlncmVjLT50Z3JlbGlkOworCW5ld3J0ZS0+cmVs a2luZCA9IHJlbGtpbmQ7CisJbmV3cnRlLT5hbGlhcyA9IG1ha2VBbGlhcygibmV3IiwgTklMKTsK KwluZXdydGUtPmVyZWYgPSBuZXdydGUtPmFsaWFzOworCW5ld3J0ZS0+bGF0ZXJhbCA9IGZhbHNl OworCW5ld3J0ZS0+aW5oID0gZmFsc2U7CisJbmV3cnRlLT5pbkZyb21DbCA9IHRydWU7CisKKwkv KiBCdWlsZCB0d28tZWxlbWVudCBydGFibGUgKi8KKwltZW1zZXQoJmRwbnMsIDAsIHNpemVvZihk cG5zKSk7CisJZHBucy5ydGFibGUgPSBsaXN0X21ha2UyKG9sZHJ0ZSwgbmV3cnRlKTsKKwlkcG5z LmN0ZXMgPSBOSUw7CisJc2V0X3J0YWJsZV9uYW1lcygmZHBucywgTklMLCBOVUxMKTsKKwlzZXRf c2ltcGxlX2NvbHVtbl9uYW1lcygmZHBucyk7CisKKwkvKiBTZXQgdXAgY29udGV4dCB3aXRoIG9u ZS1kZWVwIG5hbWVzcGFjZSBzdGFjayAqLworCWNvbnRleHQuYnVmID0gJmJ1ZjsKKwljb250ZXh0 Lm5hbWVzcGFjZXMgPSBsaXN0X21ha2UxKCZkcG5zKTsKKwljb250ZXh0LndpbmRvd0NsYXVzZSA9 IE5JTDsKKwljb250ZXh0LndpbmRvd1RMaXN0ID0gTklMOworCWNvbnRleHQudmFycHJlZml4ID0g dHJ1ZTsKKwljb250ZXh0LnByZXR0eUZsYWdzID0gcHJldHR5ID8gUFJFVFRZRkxBR19QQVJFTiB8 IFBSRVRUWUZMQUdfSU5ERU5UIDogUFJFVFRZRkxBR19JTkRFTlQ7CisJY29udGV4dC53cmFwQ29s dW1uID0gV1JBUF9DT0xVTU5fREVGQVVMVDsKKwljb250ZXh0LmluZGVudExldmVsID0gUFJFVFRZ SU5ERU5UX1NURDsKKwljb250ZXh0LnNwZWNpYWxfZXhwcmtpbmQgPSBFWFBSX0tJTkRfTk9ORTsK KworCWdldF9ydWxlX2V4cHIod2hlbkNsYXVzZSwgJmNvbnRleHQsIGZhbHNlKTsKKworCXJldHVy biBidWYuZGF0YTsKK30KKwogLyogLS0tLS0tLS0tLQogICogcGdfZ2V0X2luZGV4ZGVmCQkJLSBH ZXQgdGhlIGRlZmluaXRpb24gb2YgYW4gaW5kZXgKICAqCkBAIC0xODgwLDYgKzE5ODEsMTMgQEAg cGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQsIGJvb2wgcHJldHR5KQogCXJldHVy biBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIHByZXR0eUZsYWdzLCB0cnVlLCBmYWxz ZSk7CiB9CiAKKy8qIEludGVybmFsIHZlcnNpb24gdGhhdCByZXBvcnRzIHRoZSBmdWxsIHBhcnRp dGlvbiBrZXkgZGVmaW5pdGlvbiAqLworY2hhciAqCitwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUo T2lkIHJlbGlkKQoreworCXJldHVybiBwZ19nZXRfcGFydGtleWRlZl93b3JrZXIocmVsaWQsIDAs IGZhbHNlLCBmYWxzZSk7Cit9CisKIC8qCiAgKiBJbnRlcm5hbCB3b3JraG9yc2UgdG8gZGVjb21w aWxlIGEgcGFydGl0aW9uIGtleSBkZWZpbml0aW9uLgogICovCkBAIC0yMTMxLDYgKzIyMzksMTUg QEAgcGdfZ2V0X2NvbnN0cmFpbnRkZWZfZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJO X1RFWFRfUChzdHJpbmdfdG9fdGV4dChyZXMpKTsKIH0KIAorLyoKKyAqIEludGVybmFsIHZlcnNp b24gdGhhdCByZXR1cm5zIHRoZSBkZWZpbml0aW9uIG9mIGEgQ09OU1RSQUlOVCBjb21tYW5kCisg Ki8KK2NoYXIgKgorcGdfZ2V0X2NvbnN0cmFpbnRkZWZfY29tbWFuZF9zaW1wbGUoT2lkIGNvbnN0 cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFp bnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30KKwogLyoKICAqIEludGVybmFsIHZlcnNpb24gdGhh dCByZXR1cm5zIGEgZnVsbCBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQgY29tbWFuZAog ICovCkBAIC0zNTAxLDcgKzM2MTgsMTIgQEAgcGdfZ2V0X2Z1bmN0aW9uX2FyZ19kZWZhdWx0KFBH X0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChzdHIpKTsK IH0KIAotc3RhdGljIHZvaWQKKy8qCisgKiBQcm9kdWNlIHRoZSBmb3JtYXR0ZWQgU1FMIGJvZHkg KG5vdCB0aGUgd2hvbGUgZnVuY3Rpb24gZGVmaW5pdGlvbikKKyAqIG9mIGEgZnVuY3Rpb24gZ2l2 ZW4gdGhlIHBnX3Byb2MgdHVwbGUuIFNhdmUgdGhlIGZvcm1hdHRlZCBTUUwgaW4gdGhlCisgKiBn aXZlbiBTdHJpbmdJbmZvLgorICovCit2b2lkCiBwcmludF9mdW5jdGlvbl9zcWxib2R5KFN0cmlu Z0luZm8gYnVmLCBIZWFwVHVwbGUgcHJvY3R1cCkKIHsKIAlpbnQJCQludW1hcmdzOwpAQCAtMTEz NTcsNyArMTE0NzksNyBAQCBnZXRfdGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0 YWJsZXNhbXBsZSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBl LiAgKElmIHlvdSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxp ZE9pZCBmb3IgYWN0dWFsX2RhdGF0eXBlLikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9v cGNsYXNzX25hbWUoT2lkIG9wY2xhc3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmlu Z0luZm8gYnVmKQogewpAQCAtMTE3NTEsNyArMTE4NzMsNyBAQCBnZW5lcmF0ZV9xdWFsaWZpZWRf cmVsYXRpb25fbmFtZShPaWQgcmVsaWQpCiAgKgogICogVGhlIHJlc3VsdCBpbmNsdWRlcyBhbGwg bmVjZXNzYXJ5IHF1b3RpbmcgYW5kIHNjaGVtYS1wcmVmaXhpbmcuCiAgKi8KLXN0YXRpYyBjaGFy ICoKK2NoYXIgKgogZ2VuZXJhdGVfZnVuY3Rpb25fbmFtZShPaWQgZnVuY2lkLCBpbnQgbmFyZ3Ms IExpc3QgKmFyZ25hbWVzLCBPaWQgKmFyZ3R5cGVzLAogCQkJCQkgICBib29sIGhhc192YXJpYWRp YywgYm9vbCAqdXNlX3ZhcmlhZGljX3AsCiAJCQkJCSAgIFBhcnNlRXhwcktpbmQgc3BlY2lhbF9l eHBya2luZCkKQEAgLTEyMTM3LDcgKzEyMjU5LDcgQEAgZ2V0X3JlbG9wdGlvbnMoU3RyaW5nSW5m byBidWYsIERhdHVtIHJlbG9wdGlvbnMpCiAvKgogICogR2VuZXJhdGUgYSBDIHN0cmluZyByZXBy ZXNlbnRpbmcgYSByZWxhdGlvbidzIHJlbG9wdGlvbnMsIG9yIE5VTEwgaWYgbm9uZS4KICAqLwot c3RhdGljIGNoYXIgKgorY2hhciAqCiBmbGF0dGVuX3JlbG9wdGlvbnMoT2lkIHJlbGlkKQogewog CWNoYXIJICAgKnJlc3VsdCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA3MTk1 OTk2NDlhLi4xMTZhYzJiOGYxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTExODYyLDQg KzExODYyLDEwIEBACiAgIHByb3JldHR5cGUgPT4gJ2J5dGVhJywgcHJvYXJndHlwZXMgPT4gJ3Bn X2JyaW5fbWlubWF4X211bHRpX3N1bW1hcnknLAogICBwcm9zcmMgPT4gJ2JyaW5fbWlubWF4X211 bHRpX3N1bW1hcnlfc2VuZCcgfSwKIAoreyBvaWQgPT4gJzQ2NDInLCBkZXNjciA9PiAnZGVwYXJz ZSB0aGUgRERMIGNvbW1hbmQgaW50byBKU09OIGZvcm1hdCBzdHJpbmcnLAorICBwcm9uYW1lID0+ ICdkZGxfZGVwYXJzZV90b19qc29uJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5 cGVzID0+ICdwZ19kZGxfY29tbWFuZCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicg fSwKK3sgb2lkID0+ICc0NjQzJywgZGVzY3IgPT4gJ2V4cGFuZCBKU09OIGZvcm1hdCBEREwgdG8g YSBwbGFpbiBEREwgY29tbWFuZCcsCisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9j b21tYW5kJywgcHJvcmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0Jywg cHJvc3JjID0+ICdkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZCcgfSwKIF0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2NvbGxhdGlvbmNtZHMuaAppbmRleCAyMDFiMTlmOGI3Li40NmQxODM3NjBhIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmgKKysrIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvY29sbGF0aW9uY21kcy5oCkBAIC0xOCw3ICsxOCw4IEBACiAjaW5jbHVkZSAi Y2F0YWxvZy9vYmplY3RhZGRyZXNzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX25vZGUuaCIK IAotZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lQ29sbGF0aW9uKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgTGlzdCAqbmFtZXMsIExpc3QgKnBhcmFtZXRlcnMsIGJvb2wgaWZfbm90X2V4aXN0cyk7Citl eHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVDb2xsYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpuYW1lcywgTGlzdCAqcGFyYW1ldGVycywKKwkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhp c3RzLCBPYmplY3RBZGRyZXNzICpmcm9tX2NvbGxpZCk7CiBleHRlcm4gdm9pZCBJc1RoZXJlQ29s bGF0aW9uSW5OYW1lc3BhY2UoY29uc3QgY2hhciAqY29sbG5hbWUsIE9pZCBuc3BPaWQpOwogZXh0 ZXJuIE9iamVjdEFkZHJlc3MgQWx0ZXJDb2xsYXRpb24oQWx0ZXJDb2xsYXRpb25TdG10ICpzdG10 KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaCBiL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgKaW5kZXggYjNiMDRjY2ZhOS4uYzJiMWNhMzJmNiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCkBAIC01NCw2ICs1NCw3IEBAIHR5cGVkZWYgc3RydWN0 IHhsX3NlcV9yZWMKIGV4dGVybiBpbnQ2NCBuZXh0dmFsX2ludGVybmFsKE9pZCByZWxpZCwgYm9v bCBjaGVja19wZXJtaXNzaW9ucyk7CiBleHRlcm4gRGF0dW0gbmV4dHZhbChQR19GVU5DVElPTl9B UkdTKTsKIGV4dGVybiBMaXN0ICpzZXF1ZW5jZV9vcHRpb25zKE9pZCByZWxpZCk7CitleHRlcm4g Rm9ybV9wZ19zZXF1ZW5jZV9kYXRhIGdldF9zZXF1ZW5jZV92YWx1ZXMoT2lkIHNlcXVlbmNlSWQp OwogCiBleHRlcm4gT2JqZWN0QWRkcmVzcyBEZWZpbmVTZXF1ZW5jZShQYXJzZVN0YXRlICpwc3Rh dGUsIENyZWF0ZVNlcVN0bXQgKnNlcSk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBBbHRlclNlcXVl bmNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJTZXFTdG10ICpzdG10KTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2RlcGFyc2UuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGRsX2Rl cGFyc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45YzI1NDljOTRj Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCkBAIC0w LDAgKzEsMjMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGRkbF9kZXBhcnNlLmgKKyAq CisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50 cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1ZGUvdGNv cC9kZGxfZGVwYXJzZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERM X0RFUEFSU0VfSAorI2RlZmluZSBERExfREVQQVJTRV9ICisKKyNpbmNsdWRlICJ0Y29wL2RlcGFy c2VfdXRpbGl0eS5oIgorCitleHRlcm4gY2hhciAqZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoQ29s bGVjdGVkQ29tbWFuZCAqY21kLCBib29sIHZlcmJvc2VfbW9kZSk7CitleHRlcm4gY2hhciAqZGVw YXJzZV9kZGxfanNvbl90b19zdHJpbmcoY2hhciAqanNvbmIpOworZXh0ZXJuIGNoYXIgKmRlcGFy c2VfZHJvcF9jb21tYW5kKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBjb25zdCBjaGFyICpvYmpl Y3R0eXBlLAorCQkJCQkJCQkgIERyb3BCZWhhdmlvciBiZWhhdmlvcik7CisKKworI2VuZGlmCQkJ CQkJCS8qIERETF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVw YXJzZV91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4 IDk0ZGUxM2Q5OTAuLmI1MzI5NGJmNTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVw YXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApA QCAtNjIsNiArNjIsNyBAQCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJ CU9pZAkJCW9iamVjdElkOwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJ CQlMaXN0CSAgICpzdWJjbWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvdGNvcC91dGlsaXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaAppbmRl eCBmOWRhZjViNzQ0Li5mOTJiYmY4ODQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS90Y29wL3V0 aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL3V0aWxpdHkuaApAQCAtOTksNiArOTksOCBA QCBleHRlcm4gUXVlcnkgKlV0aWxpdHlDb250YWluc1F1ZXJ5KE5vZGUgKnBhcnNldHJlZSk7CiAK IGV4dGVybiBDb21tYW5kVGFnIENyZWF0ZUNvbW1hbmRUYWcoTm9kZSAqcGFyc2V0cmVlKTsKIAor ZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSwg Ym9vbCBpc2dyYW50KTsKKwogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKIENyZWF0ZUNvbW1h bmROYW1lKE5vZGUgKnBhcnNldHJlZSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxz L2FjbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKaW5kZXggNjllYjQzNzM3Ni4uYzBlMjAy YjQ0ZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvYWNsLmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvYWNsLmgKQEAgLTIwOSw2ICsyMDksOCBAQCBleHRlcm4gQWNsTW9kZSBhY2xtYXNr KGNvbnN0IEFjbCAqYWNsLCBPaWQgcm9sZWlkLCBPaWQgb3duZXJJZCwKIAkJCQkJICAgQWNsTW9k ZSBtYXNrLCBBY2xNYXNrSG93IGhvdyk7CiBleHRlcm4gaW50CWFjbG1lbWJlcnMoY29uc3QgQWNs ICphY2wsIE9pZCAqKnJvbGVpZHMpOwogCitleHRlcm4gY29uc3QgY2hhciAqcHJpdmlsZWdlX3Rv X3N0cmluZyhBY2xNb2RlIHByaXZpbGVnZSk7CisKIGV4dGVybiBib29sIGhhc19wcml2c19vZl9y b2xlKE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKIGV4dGVybiBib29sIG1lbWJlcl9jYW5fc2V0X3Jv bGUoT2lkIG1lbWJlciwgT2lkIHJvbGUpOwogZXh0ZXJuIHZvaWQgY2hlY2tfY2FuX3NldF9yb2xl KE9pZCBtZW1iZXIsIE9pZCByb2xlKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2Fj bGNoa19pbnRlcm5hbC5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFsLmgKaW5k ZXggMzYxMjg0ZDhlYi4uNGUwMjBlZjRhZSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMv YWNsY2hrX2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYWNsY2hrX2ludGVybmFs LmgKQEAgLTM5LDYgKzM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlMaXN0CSAgICpncmFudGVlczsK IAlib29sCQlncmFudF9vcHRpb247CiAJRHJvcEJlaGF2aW9yIGJlaGF2aW9yOworCU9pZAkJCWdy YW50b3JfdWlkOwogfSBJbnRlcm5hbEdyYW50OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL2J1aWx0aW5zLmggYi9zcmMvaW5jbHVkZS91dGlscy9idWlsdGlucy5oCmluZGV4IDEw ZDEzYjBmMWUuLmU3YjIzZmE1YjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL2J1aWx0 aW5zLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvYnVpbHRpbnMuaApAQCAtMTE3LDEwICsxMTcs MTIgQEAgZXh0ZXJuIERhdHVtIG51bWVyaWNfZmxvYXQ4X25vX292ZXJmbG93KFBHX0ZVTkNUSU9O X0FSR1MpOwogI2RlZmluZSBGT1JNQVRfVFlQRV9GT1JDRV9RVUFMSUZZCTB4MDQJLyogZm9yY2Ug cXVhbGlmaWNhdGlvbiBvZiB0eXBlICovCiAjZGVmaW5lIEZPUk1BVF9UWVBFX0lOVkFMSURfQVNf TlVMTAkweDA4CS8qIE5VTEwgaWYgdW5kZWZpbmVkICovCiBleHRlcm4gY2hhciAqZm9ybWF0X3R5 cGVfZXh0ZW5kZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLCBiaXRzMTYgZmxhZ3MpOwor ZXh0ZXJuIGNoYXIgKmZvcm1hdF9wcm9jZWR1cmVfYXJncyhPaWQgcHJvY2VkdXJlX29pZCwgYm9v bCBmb3JjZV9xdWFsaWZ5KTsKIAogZXh0ZXJuIGNoYXIgKmZvcm1hdF90eXBlX2JlKE9pZCB0eXBl X29pZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVkKE9pZCB0eXBlX29p ZCk7CiBleHRlcm4gY2hhciAqZm9ybWF0X3R5cGVfd2l0aF90eXBlbW9kKE9pZCB0eXBlX29pZCwg aW50MzIgdHlwZW1vZCk7CitleHRlcm4gY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlw bmFtZSwgaW50MzIgdHlwbW9kLCBPaWQgdHlwbW9kb3V0KTsKIAogZXh0ZXJuIGludDMyIHR5cGVf bWF4aW11bV9zaXplKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCk7CiAKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0 aWxzLmgKaW5kZXggN2Q0ODk3MThhMy4uZWM2ZWY4MDE2NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdXRpbHMvcnVsZXV0aWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgK QEAgLTEzLDkgKzEzLDEyIEBACiAjaWZuZGVmIFJVTEVVVElMU19ICiAjZGVmaW5lIFJVTEVVVElM U19ICiAKKyNpbmNsdWRlICJhY2Nlc3MvaHR1cC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJp Z2dlci5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vu b2Rlcy5oIgogI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFy c2Vfbm9kZS5oIgogCiBzdHJ1Y3QgUGxhbjsJCQkJCS8qIGF2b2lkIGluY2x1ZGluZyBwbGFubm9k ZXMuaCBoZXJlICovCiBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CkBAIC0yMywxMiArMjYsMjAgQEAgc3Ry dWN0IFBsYW5uZWRTdG10OwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhP aWQgaW5kZXhyZWxpZCk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X2luZGV4ZGVmX2NvbHVtbnMoT2lk IGluZGV4cmVsaWQsIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfdHJpZ2dlcl93 aGVuY2xhdXNlKEZvcm1fcGdfdHJpZ2dlciB0cmlncmVjLAorCQkJCQkJCQkJICAgTm9kZSAqd2hl bkNsYXVzZSwgYm9vbCBwcmV0dHkpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9xdWVyeWRlZihRdWVy eSAqcXVlcnksIGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfdmlld2RlZl9pbnRl cm5hbChPaWQgdmlld29pZCk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9jb2x1 bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0a2V5 ZGVmX3NpbXBsZShPaWQgcmVsaWQpOwogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0Y29uc3RyZGVm X3N0cmluZyhPaWQgcGFydGl0aW9uSWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAKIGV4dGVybiBjaGFy ICpwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kKE9pZCBjb25zdHJhaW50SWQpOworZXh0ZXJu IGNoYXIgKnBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKE9pZCBjb25zdHJhaW50 SWQpOworZXh0ZXJuIHZvaWQgcGdfZ2V0X3J1bGVkZWZfZGV0YWlsZWQoRGF0dW0gZXZfcXVhbCwg RGF0dW0gZXZfYWN0aW9uLAorCQkJCQkJCQkJY2hhciAqKndoZXJlQ2xhdXNlLCBMaXN0ICoqYWN0 aW9ucyk7CisKIGV4dGVybiBjaGFyICpkZXBhcnNlX2V4cHJlc3Npb24oTm9kZSAqZXhwciwgTGlz dCAqZHBjb250ZXh0LAogCQkJCQkJCQlib29sIGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNp dCk7CiBleHRlcm4gTGlzdCAqZGVwYXJzZV9jb250ZXh0X2Zvcihjb25zdCBjaGFyICphbGlhc25h bWUsIE9pZCByZWxpZCk7CkBAIC00MCw4ICs1MSwxNiBAQCBleHRlcm4gTGlzdCAqc2VsZWN0X3J0 YWJsZV9uYW1lc19mb3JfZXhwbGFpbihMaXN0ICpydGFibGUsCiAJCQkJCQkJCQkJCSBCaXRtYXBz ZXQgKnJlbHNfdXNlZCk7CiBleHRlcm4gY2hhciAqZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoT2lk IGNvbGxpZCk7CiBleHRlcm4gY2hhciAqZ2VuZXJhdGVfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNz KTsKK2V4dGVybiBjaGFyICpnZW5lcmF0ZV9mdW5jdGlvbl9uYW1lKE9pZCBmdW5jaWQsIGludCBu YXJncywgTGlzdCAqYXJnbmFtZXMsCisJCQkJCQkJCQlPaWQgKmFyZ3R5cGVzLCBib29sIGhhc192 YXJpYWRpYywKKwkJCQkJCQkJCWJvb2wgKnVzZV92YXJpYWRpY19wLAorCQkJCQkJCQkJUGFyc2VF eHByS2luZCBzcGVjaWFsX2V4cHJraW5kKTsKIGV4dGVybiBjaGFyICpnZXRfcmFuZ2VfcGFydGJv dW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpOworZXh0ZXJuIHZvaWQgZ2V0X29wY2xhc3Nf bmFtZShPaWQgb3BjbGFzcywgT2lkIGFjdHVhbF9kYXRhdHlwZSwKKwkJCQkJCQkgU3RyaW5nSW5m byBidWYpOworZXh0ZXJuIGNoYXIgKmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogCiBl eHRlcm4gY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQp OworZXh0ZXJuIHZvaWQgcHJpbnRfZnVuY3Rpb25fc3FsYm9keShTdHJpbmdJbmZvIGJ1ZiwgSGVh cFR1cGxlIHByb2N0dXApOwogCiAjZW5kaWYJCQkJCQkJLyogUlVMRVVUSUxTX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2FkZHJlc3Mub3V0IGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRkcmVzcy5vdXQKaW5kZXggMjVjMTc0ZjI3 NS4uZmM0MmQ0MThiZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmpl Y3RfYWRkcmVzcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3RfYWRk cmVzcy5vdXQKQEAgLTQ5Niw3ICs0OTYsNyBAQCBvcGVyYXRvciBmYW1pbHl8cGdfY2F0YWxvZ3xp bnRlZ2VyX29wc3xwZ19jYXRhbG9nLmludGVnZXJfb3BzIFVTSU5HIGJ0cmVlfHQKIHBvbGljeXxO VUxMfE5VTEx8Z2VucG9sIG9uIGFkZHJfbnNwLmdlbnRhYmxlfHQKIHN0YXRpc3RpY3Mgb2JqZWN0 fGFkZHJfbnNwfGdlbnRhYmxlX3N0YXR8YWRkcl9uc3AuZ2VudGFibGVfc3RhdHx0CiBjb2xsYXRp b258cGdfY2F0YWxvZ3wiZGVmYXVsdCJ8cGdfY2F0YWxvZy4iZGVmYXVsdCJ8dAotdHJhbnNmb3Jt fE5VTEx8TlVMTHxmb3IgaW50ZWdlciBvbiBsYW5ndWFnZSBzcWx8dAordHJhbnNmb3JtfE5VTEx8 TlVMTHxmb3IgaW50ZWdlciBsYW5ndWFnZSBzcWx8dAogdGV4dCBzZWFyY2ggZGljdGlvbmFyeXxh ZGRyX25zcHxhZGRyX3RzX2RpY3R8YWRkcl9uc3AuYWRkcl90c19kaWN0fHQKIHRleHQgc2VhcmNo IHBhcnNlcnxhZGRyX25zcHxhZGRyX3RzX3Byc3xhZGRyX25zcC5hZGRyX3RzX3Byc3x0CiB0ZXh0 IHNlYXJjaCBjb25maWd1cmF0aW9ufGFkZHJfbnNwfGFkZHJfdHNfY29uZnxhZGRyX25zcC5hZGRy X3RzX2NvbmZ8dApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA2MGM3MWQwNWZlLi5mZTMz MGI0MDg0IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTYxMCw2ICsxNjEwLDkgQEAg T1NJbmZvCiBPU1NMQ2lwaGVyCiBPU1NMRGlnZXN0CiBPVkVSTEFQUEVECitPYmpFbGVtCitPYmpU cmVlCitPYmpUeXBlCiBPYmplY3RBY2Nlc3NEcm9wCiBPYmplY3RBY2Nlc3NOYW1lc3BhY2VTZWFy Y2gKIE9iamVjdEFjY2Vzc1Bvc3RBbHRlcgpAQCAtMzE3Nyw2ICszMTgwLDcgQEAgY29tcGFyZV9j b250ZXh0CiBjb25maWdfdmFyX3ZhbHVlCiBjb250YWluX2FnZ3Nfb2ZfbGV2ZWxfY29udGV4dAog Y29udmVydF90ZXN0ZXhwcl9jb250ZXh0Citjb252U3BlY2lmaWVyCiBjb3B5X2RhdGFfZGVzdF9j YgogY29weV9kYXRhX3NvdXJjZV9jYgogY29yZV9ZWVNUWVBFCi0tIAoyLjM0LjEKCg== --000000000000cb887705efe04c32 Content-Type: text/x-patch; charset="US-ASCII"; name="v52-0002-Support-DDL-replication.patch" Content-Disposition: attachment; filename="v52-0002-Support-DDL-replication.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpakrpf1 RnJvbSBiMDQ2OGYyZmE4YTg5YTcwYzdhMTg1YTMxNDAzMTgyNmQ2Yjk4ODNjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBamluIENoZXJpYW4gPGFqaW5jQGZhc3QuYXUuZnVqaXRzdS5j b20+CkRhdGU6IE1vbiwgMTIgRGVjIDIwMjIgMDI6Mzk6MTAgLTA1MDAKU3ViamVjdDogW1BBVENI IHY1MiAyLzddIFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLgoKVG8gc3VwcG9ydCBEREwgcmVwbGlj YXRpb24sIHdlIHVzZSBldmVudCB0cmlnZ2VyIGFuZCBEREwgZGVwYXJzaW5nCmZhY2lsaXRpZXMu IER1cmluZyBDUkVBVEUgUFVCTElDQVRJT04gd2UgcmVnaXN0ZXIgYSBjb21tYW5kIGVuZCB0cmln Z2VyIHRoYXQKZGVwYXJzZXMgdGhlIERETCBhcyBhIEpTT04gYmxvYiwgYW5kIFdBTCBsb2dzIGl0 LiBUaGUgZXZlbnQKdHJpZ2dlciBpcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgYXQgdGhlIHRpbWUg b2YgRFJPUCBQVUJMSUNBVElPTi4gVGhlCldBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNl bmRzIGl0IGRvd25zdHJlYW0gc2ltaWxhciB0byBvdGhlciBETUwKY29tbWFuZHMuIFRoZSBzdWJz Y3JpYmVyIHRoZW4gY29udmVydHMgSlNPTiBiYWNrIHRvIHRoZSBEREwgY29tbWFuZCBzdHJpbmcK YW5kIGV4ZWN1dGVzIGl0LiBJbiB0aGUgc3Vic2NyaWJlciwgd2UgYWxzbyBhZGQgdGhlIG5ld2x5 IGFkZGVkIHJlbCB0bwpwZ19zdWJzY3JpcHRpb25fcmVsIHNvIHRoYXQgdGhlIERNTCBjaGFuZ2Vz IG9uIHRoZSBuZXcgdGFibGUgY2FuIGJlCnJlcGxpY2F0ZWQgd2l0aG91dCBoYXZpbmcgdG8gbWFu dWFsbHkgcnVuCiJBTFRFUiBTVUJTQ1JJUFRJT04gLi4uIFJFRlJFU0ggUFVCTElDQVRJT04iLgoK LSBGb3Igbm9uLXJld3JpdGUgQUxURVIgb2JqZWN0IGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBv YmplY3QgY29tbWFuZDoKd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBhdCBkZGxfY29tbWFuZF9lbmQg ZXZlbnQgdHJpZ2dlciBhbmQgV0FMIGxvZyB0aGUKZGVwYXJzZWQganNvbiBzdHJpbmcuIFRoZSBX QUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFuZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRo ZSBjcmVhdGVkL2FsdGVyZWQgdGFibGUgaXMgcHVibGlzaGVkLiBJdCBzdXBwb3J0cyBtb3N0IG9m CkFMVEVSIFRBQkxFIGNvbW1hbmQgZXhjZXB0IHNvbWUgY29tbWFuZHMoRERMIHJlbGF0ZWQgdG8g UEFSVElUSU9ORUQgVEFCTEUKLi4uKSB0aGF0IGludHJvZHVjZWQgcmVjZW50bHkgd2hpY2ggaGF2 ZW4ndCBiZWVuIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudApkZGxfZGVwYXJzZXIsIHdlIHdpbGwg c3VwcG9ydCB0aGF0IGxhdGVyLgoKLSBGb3IgRFJPUCBvYmplY3Q6ClRoZSAnY29tbWFuZCBzdGFy dCcgZXZlbnQgaGFuZGxlciBsb2dzIGEgZGRsIG1lc3NhZ2Ugd2l0aCB0aGUgcmVsaWRzIG9mCnRo ZSB0YWJsZXMgdGhhdCBhcmUgZHJvcHBlZCB3aGljaCB0aGUgb3V0cHV0IHBsdWdpbiAocGdvdXRw dXQpIHN0b3JlcyBpbgppdHMgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgYWZ0ZXIgdmVyaWZ5aW5n IHRoYXQgaXQgaXMgZm9yIGEgdGFibGUgdGhhdCBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4g TGF0ZXIgdGhlICdjb21tYW5kIGVuZCcgZXZlbnQgaGFuZGxlciBzZW5kcyB0aGUKYWN0dWFsIGRy b3AgbWVzc2FnZS4gUGdvdXRwdXQgb24gcmVjZWl2aW5nIHRoZSBjb21tYW5kIGVuZCwgb25seSBz ZW5kcyBvdXQKdGhlIGRyb3AgY29tbWFuZCBvbmx5IGlmIGl0IGlzIGZvciBvbmUgb2YgdGhlIHJl bGlkcyBtYXJrZWQgZm9yIGRlbGV0aW5nLgpUaGUgcmVhc29uIHdlIGhhdmUgdG8gZG8gdGhpcyBp cyBiZWNhdXNlLCBvbmNlIHRoZSBsb2dpY2FsIGRlY29kZXIKcmVjZWl2ZXMgdGhlICdjb21tYW5k IGVuZCcgbWVzc2FnZSwgIHRoZSByZWxpZCBvZiB0aGUgdGFibGUgaXMgbm8gbG9uZ2VyCnZhbGlk IGFzIGl0IGhhcyBiZWVuIGRlbGV0ZWQgYXMgcGFydCBvZiBpbnZhbGlkYXRpb25zIHJlY2VpdmVk IGZvciB0aGUKZHJvcCB0YWJsZSBjb21tYW5kLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8g dmVyaWZ5IGlmIHRoZSB0YWJsZSBpcwpwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbiBsaXN0IG9yIG5v dC4gVG8gbWFrZSB0aGlzIHBvc3NpYmxlLCBJIGhhdmUgYWRkZWQKdHdvIG1vcmUgZWxlbWVudHMg dG8gdGhlIGRkbCB4bG9nIGFuZCBkZGwgbWVzc2FnZSwgKHJlbGlkIGFuZCBjbWR0eXBlKS4KCldl IGNvdWxkIGhhdmUgYWxzbyBoYW5kbGVkIGFsbCB0aGlzIG9uIHRoZSBzdWJzY3JpYmVyIHNpZGUg YXMgd2VsbCwgYnV0CnRoYXQgd291bGQgbWVhbiBzZW5kaW5nIHNwdXJpb3VzIGRkbCBtZXNzYWdl cyBmb3IgdGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0Cm9mIHRoZSBwdWJsaWNhdGlvbi4KCi0gRm9y IHRhYmxlX3Jld3JpdGUgQUxURVIgVEFCTEUgY29tbWFuZDoKKEFMVEVSIENPTFVNTiBUWVBFLCBB REQgQ09MVU1OIERFRkFVTFQsIFNFVCBMT0dHRUQsIFNFVCBBQ0NFU1MgTUVUSE9EKQoKd2UgZGVw YXJzZSB0aGUgY29tbWFuZCBhbmQgV0FMIGxvZyB0aGUgZGVwYXJzZWQganNvbiBzdHJpbmcgYXQK dGFibGVfcmV3cml0ZSBldmVudCB0cmlnZ2VyLiBUaGUgV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdB TCBhbmQgc2VuZHMgaXQgdG8Kc3Vic2NyaWJlciBpZiB0aGUgYWx0ZXJlZCB0YWJsZSBpcyBwdWJs aXNoZWQuIFRoZW4sIHRoZSBXQUxTZW5kZXIgd2lsbApjb252ZXJ0IHRoZSB1cGNvbWluZyByZXdy aXRlIElOU0VSVHMgdG8gVVBEQVRFcyBhbmQgc2VuZCB0aGVtIHRvCnN1YnNjcmliZXIgc28gdGhh dCB0aGUgZGF0YSBiZXR3ZWVuIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBjYW4gYWx3YXlzIGJl CmNvbnNpc3RlbnQuIE5vdGUgdGhhdCB0aGUgdGFibGVzIHRoYXQgcHVibGlzaCByZXdyaXRlIGRk bCBtdXN0IGhhdmUgYQpyZXBsaWNhIGlkZW50aXR5IGNvbmZpZ3VyZWQgaW4gb3JkZXIgdG8gYmUg YWJsZSB0byByZXBsaWNhdGUgdGhlIHVwY29taW5nCnJld3JpdGUgVVBEQVRFcy4KCldlIGRvIHRo aXMgd2F5IGJlY2F1c2Ugb2YgdHdvIHJlYXNvbjoKKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3 cml0ZSBkZGwgY291bGQgYWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBz dWJzY3JpYmVyLiBUbyBtYWtlIHN1cmUgdGhlIGV4dHJhIGRhdGEgaW4gc3Vic2NyaWJlciB3aGlj aApkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBhbHNvIGdldCByZXdyaXR0ZW4sIHdlIG5lZWQg dG8gbGV0IHRoZQpzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUgZGRsIHRv IHJld3JpdGUgYWxsIHRoZSBkYXRhIGF0CmZpcnN0LgoKKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1 dGluZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQgYW1vbmcKcHVibGlzaGVyIGFuZCBz dWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJlbnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkIGR1cmlu ZwpyZXdyaXRlKSwgc28gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhlIHJld3JpdGUgVVBEQVRFcyB0 byBrZWVwIHRoZSBkYXRhCmNvbnNpc3RlbnQuCgpUTyBJTVBST1ZFOgpUaGlzIGFwcHJvYWNoIGNv dWxkIGJlIGltcHJvdmVkIGJ5IGxldHRpbmcgdGhlIHN1YnNjcmliZXIgdHJ5IHRvIHVwZGF0ZQp0 aGUgZXh0cmEgZGF0YSBpdHNlbGYgaW5zdGVhZCBvZiBkb2luZyBmdWxseSByZXdyaXRlIGRkbCBh bmQgdXNlIHRoZQp1cGNvbWluZyByZXdyaXRlIFVQREFURXMgdG8gcmV3cml0ZSB0aGUgcmVzdCBk YXRhLiBUbyBhY2hpZXZlIHRoaXMsIHdlCmNvdWxkIG1vZGlmeSB0aGUgZGVwYXJzZWQganNvbiBz dHJpbmcgdG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSByZXdyaXRlCnBhcnQgYW5kIGFkZCBzb21l IGxvZ2ljIGluIHN1YnNjcmliZXIgdG8gdXBkYXRlIHRoZSBleHRyYSBkYXRhLgpCZXNpZGVzLCB3 ZSBtYXkgbm90IG5lZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlIG9mIHJl d3JpdGUKZGRsLCBmb3IgZXhhbXBsZSwgaXQgc2VlbXMgZmluZSB0byBza2lwIHNlbmRpbmcgcmV3 cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgpUQUJMRSBTRVQgTE9HR0VEIGFzIHRoZSBkYXRhIGluIHRo ZSB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuIFdlCmNvdWxkIHVzZSB0aGUgZGVw YXJzZXIgYW5kIGV2ZW50IHRyaWdnZXIgdG8gZmlsdGVyIHRoZXNlIGRkbHMgYW5kIHNraXAKc2Vu ZGluZyByZXdyaXRlIGNoYW5nZXMgZm9yIHRoZW0uCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL01ha2VmaWxlICAgICAgICAgIHwgICAxICsKIC4uLi9hY2Nlc3Mvcm1ncmRlc2MvbG9n aWNhbGRkbG1zZ2Rlc2MuYyAgICAgICB8ICA1MiArKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9tZXNvbi5idWlsZCAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5jICAgICAgICAgIHwgMjg0ICsrKysrKysrKysrLQogc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgIHwgMTc4ICsrKysrKysrCiBzcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYyAgfCAgODQgKysrKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyAgICAgIHwgIDQxICsrCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xvZ2ljYWwuYyAgICAgfCAgOTMgKysrKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC9tZXNvbi5idWlsZCAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgICB8ICA0MyArKwogLi4uL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcmVvcmRlcmJ1ZmZlci5jICAgICAgIHwgMTM1ICsrKysrKwogc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICAgIHwgMjQxICsrKysrKysrKysKIHNyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgICB8IDE4OSArKysrKysrLQogc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICAgIHwgICAxICsKIHNyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgICB8ICAyMSArLQogc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9iaW4v cGdfd2FsZHVtcC9ybWdyZGVzYy5jICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3Bz cWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvY2F0 YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRlL2NvbW1h bmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICB8ICAgMyArLQogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vZGRsbWVzc2FnZS5oICAgICAgICAgIHwgIDYwICsrKwogc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vZGVjb2RlLmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3JlcGxpY2F0 aW9uL2xvZ2ljYWxwcm90by5oICAgICAgICB8ICAgNCArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9vdXRwdXRfcGx1Z2luLmggICAgICAgfCAgMjcgKysKIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9u L3Bnb3V0cHV0LmggICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9y ZW9yZGVyYnVmZmVyLmggICAgICAgfCAgMzkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHNxbC5vdXQgICAgICAgICAgICB8ICAgNiArLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w dWJsaWNhdGlvbi5vdXQgICAgIHwgNDIwICsrKysrKysrKy0tLS0tLS0tLQogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICA1ICsKIDM0IGZpbGVzIGNoYW5n ZWQsIDE3NDIgaW5zZXJ0aW9ucygrKSwgMjI2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdl LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdl LmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUgYi9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKaW5kZXggZjg4ZDcyZmQ4Ni4uMmZm MDFlNjliZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL01ha2VmaWxl CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgs NyBAQCBPQkpTID0gXAogCWdpc3RkZXNjLm8gXAogCWhhc2hkZXNjLm8gXAogCWhlYXBkZXNjLm8g XAorCWxvZ2ljYWxkZGxtc2dkZXNjLm8gXAogCWxvZ2ljYWxtc2dkZXNjLm8gXAogCW14YWN0ZGVz Yy5vIFwKIAluYnRkZXNjLm8gXApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3Jk ZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9n aWNhbGRkbG1zZ2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4w NWU5MzBjOTBjCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L2xvZ2ljYWxkZGxtc2dkZXNjLmMKQEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogbG9naWNhbGRkbG1zZ2Rlc2MuYworICoJICBybWdyIGRlc2NyaXB0b3Igcm91dGlu ZXMgZm9yIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9y bWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgorCit2b2lkCitsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFk ZXJTdGF0ZSAqcmVjb3JkKQoreworCWNoYXIJICAgKnJlYyA9IFhMb2dSZWNHZXREYXRhKHJlY29y ZCk7CisJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhyZWNvcmQpICYgflhMUl9JTkZPX01B U0s7CisKKwlpZiAoaW5mbyA9PSBYTE9HX0xPR0lDQUxfRERMX01FU1NBR0UpCisJeworCQl4bF9s b2dpY2FsX2RkbF9tZXNzYWdlICp4bHJlYyA9ICh4bF9sb2dpY2FsX2RkbF9tZXNzYWdlICopIHJl YzsKKwkJY2hhcgkgICAqcHJlZml4ID0geGxyZWMtPm1lc3NhZ2U7CisJCWNoYXIJICAgKm1lc3Nh Z2UgPSB4bHJlYy0+bWVzc2FnZSArIHhscmVjLT5wcmVmaXhfc2l6ZTsKKwkJY2hhcgkgICAqc2Vw ID0gIiI7CisKKwkJQXNzZXJ0KHByZWZpeFt4bHJlYy0+cHJlZml4X3NpemVdICE9ICdcMCcpOwor CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicHJlZml4IFwiJXNcIjsgcGF5bG9hZCAoJXp1IGJ5 dGVzKTogIiwKKwkJCQkJCSBwcmVmaXgsIHhscmVjLT5tZXNzYWdlX3NpemUpOworCQlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgInJlbGlkICV1IGNtZHR5cGUgJXUiLCB4bHJlYy0+cmVsaWQsIHhscmVj LT5jbWR0eXBlKTsKKwkJLyogV3JpdGUgbWVzc2FnZSBwYXlsb2FkIGFzIGEgc2VyaWVzIG9mIGhl eCBieXRlcyAqLworCQlmb3IgKGludCBjbnQgPSAwOyBjbnQgPCB4bHJlYy0+bWVzc2FnZV9zaXpl OyBjbnQrKykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyUwMlgiLCBzZXAsICh1 bnNpZ25lZCBjaGFyKSBtZXNzYWdlW2NudF0pOworCQkJc2VwID0gIiAiOworCQl9CisJfQorfQor Citjb25zdCBjaGFyICoKK2xvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbykKK3sKKwlp ZiAoKGluZm8gJiB+WExSX0lORk9fTUFTSykgPT0gWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKQor CQlyZXR1cm4gIkRETCI7CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9ybWdyZGVzYy9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9tZXNvbi5idWlsZAppbmRleCBmM2E2ZTBhNTcxLi4zYTcwYzk3NGRlIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL21lc29uLmJ1aWxkCkBAIC05LDYgKzksNyBAQCBybWdyX2Rlc2Nf c291cmNlcyA9IGZpbGVzKAogICAnZ2lzdGRlc2MuYycsCiAgICdoYXNoZGVzYy5jJywKICAgJ2hl YXBkZXNjLmMnLAorICAnbG9naWNhbGRkbG1zZ2Rlc2MuYycsCiAgICdsb2dpY2FsbXNnZGVzYy5j JywKICAgJ214YWN0ZGVzYy5jJywKICAgJ25idGRlc2MuYycsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmMKaW5kZXggNTk5NjcwOThiMy4uNzIxZDAyM2FhNSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfcHVibGljYXRpb24uYwpAQCAtMTAwNSw2ICsxMDA1LDcgQEAgR2V0UHVibGljYXRpb24o T2lkIHB1YmlkKQogCXB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBwdWJmb3JtLT5wdWJ1cGRh dGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAlw dWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwlwdWIt PnB1YmFjdGlvbnMucHViZGRsID0gcHViZm9ybS0+cHViZGRsOwogCXB1Yi0+cHVidmlhcm9vdCA9 IHB1YmZvcm0tPnB1YnZpYXJvb3Q7CiAKIAlSZWxlYXNlU3lzQ2FjaGUodHVwKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuYwppbmRleCBhM2JkYzVkYjA3Li41Mzg1NWY1MWZmIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCkBAIC0zNyw4ICszNywxMSBAQAogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9mdW5jLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRlICJ0Y29wL2RlcGFyc2VfdXRpbGl0 eS5oIgogI2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFy c2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgogI2luY2x1ZGUgInV0aWxzL2V2dGNhY2hlLmgiCkBAIC0xNTM3LDYgKzE1NDAsNyBAQCBFdmVu dFRyaWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKQogCiAJY29tbWFuZC0+ZC5h bHRlclRhYmxlLmNsYXNzSWQgPSBSZWxhdGlvblJlbGF0aW9uSWQ7CiAJY29tbWFuZC0+ZC5hbHRl clRhYmxlLm9iamVjdElkID0gSW52YWxpZE9pZDsKKwljb21tYW5kLT5kLmFsdGVyVGFibGUucmV3 cml0ZSA9IGZhbHNlOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gTklMOwogCWNv bW1hbmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKIApAQCAtMTU3MCw3ICsx NTc0LDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCkKICAqIGlu dGVybmFsbHksIHNvIHRoYXQncyBhbGwgdGhhdCB0aGlzIGNvZGUgbmVlZHMgdG8gaGFuZGxlIGF0 IHRoZSBtb21lbnQuCiAgKi8KIHZvaWQKLUV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3Vi Y21kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQorRXZlbnRUcmlnZ2VyQ29s bGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3Ms IGJvb2wgcmV3cml0ZSkKIHsKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlDb2xsZWN0ZWRBVFN1 YmNtZCAqbmV3c3ViOwpAQCAtMTU5MCw2ICsxNTk0LDcgQEAgRXZlbnRUcmlnZ2VyQ29sbGVjdEFs dGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLCBPYmplY3RBZGRyZXNzIGFkZHJlc3MpCiAJbmV3 c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKIAluZXdzdWItPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qo c3ViY21kKTsKIAorCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQu YWx0ZXJUYWJsZS5yZXdyaXRlIHw9IHJld3JpdGU7CiAJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRl LT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRlclRhYmxlLnN1YmNtZHMgPQogCQlsYXBwZW5kKGN1cnJl bnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRz LCBuZXdzdWIpOwogCkBAIC0yMTc1LDMgKzIxODAsMjgwIEBAIHN0cmluZ2lmeV9hZGVmcHJpdnNf b2JqdHlwZShPYmplY3RUeXBlIG9ianR5cGUpCiAKIAlyZXR1cm4gIj8/PyI7CQkJCS8qIGtlZXAg Y29tcGlsZXIgcXVpZXQgKi8KIH0KKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFu ZCBsb2cgaXQgcHJpb3IgdG8KKyAqIGV4ZWN1dGlvbi4gQ3VycmVudGx5IG9ubHkgdXNlZCBmb3Ig RFJPUCBUQUJMRSBjb21tYW5kCisgKiBzbyB0aGF0IGNhdGFsb2cgY2FuIGJlIGFjY2Vzc2VkIGJl Zm9yZSBiZWluZyBkZWxldGVkLgorICogVGhpcyBpcyB0byBjaGVjayBpZiB0aGUgdGFibGUgaXMg cGFydCBvZiB0aGUgcHVibGljYXRpb24KKyAqIG9yIG5vdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0 aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVu dFRyaWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCSAgICpjb21tYW5kID0gcHNwcmludGYoIkRy b3AgdGFibGUgY29tbWFuZCBzdGFydCIpOworCURyb3BTdG10ICAgKnN0bXQ7CisJTGlzdENlbGwg ICAqY2VsbDE7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVs b2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmln ZGF0YSA9IChFdmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10ID0gKERy b3BTdG10ICopIHRyaWdkYXRhLT5wYXJzZXRyZWU7CisKKwkvKiBFeHRyYWN0IHRoZSByZWxpZCBm cm9tIHRoZSBwYXJzZSB0cmVlICovCisJZm9yZWFjaChjZWxsMSwgc3RtdC0+b2JqZWN0cykKKwl7 CisJCWNoYXIJCXJlbHBlcnNpc3Q7CisJCU5vZGUJICAgKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7 CisJCU9iamVjdEFkZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24JcmVsYXRpb24gPSBOVUxMOwor CisJCWFkZHJlc3MgPSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJ CQkJCSBvYmplY3QsCisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2ssCisJCQkJCQkJCQkgdHJ1ZSk7CisKKwkJLyogT2JqZWN0IGRvZXMgbm90IGV4aXN0 LCBub3RoaW5nIHRvIGRvICovCisJCWlmICghcmVsYXRpb24pCisJCQljb250aW51ZTsKKworCQly ZWxwZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShhZGRyZXNzLm9iamVjdElkKTsKKworCQkv KgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0 IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdl bmVyYXRlIHdhbCBsb2dzIGZvciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkg KiB0YWJsZXMgY2FuIGFsc28gYmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJl ciBzaWRlLiBUaGlzCisJCSAqIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0 aGUgU0VUIExPR0dFRCBjb21tYW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNz YWdlIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lz dCAhPSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFy c2UiLCBhZGRyZXNzLm9iamVjdElkLCBEQ1RfVGFibGVEcm9wU3RhcnQsCisJCQkJCQkJCSBjb21t YW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJsZV9j bG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxM KTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoKKyAq IERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLwor RGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9BUkdT KQoreworCWNoYXIJCXJlbHBlcnNpc3Q7CisJQ29sbGVjdGVkQ29tbWFuZCAqY21kOworCWNoYXIJ ICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihmY2luZm8p KQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdlciIpOwor CisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZDsKKworCUFz c2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxwZXJzaXN0ID0g Z2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7CisKKwkvKgor CSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0YXJnZXQgdGFi bGUgaXMgYSB0ZW1wb3JhcnkKKwkgKiB0YWJsZS4KKwkgKgorCSAqIFdlIHdpbGwgZ2VuZXJhdGUg d2FsIGxvZ3MgZm9yIHVubG9nZ2VkIHRhYmxlcyBzbyB0aGF0IHVubG9nZ2VkIHRhYmxlcworCSAq IGNhbiBhbHNvIGJlIGNyZWF0ZWQgYW5kIGFsdGVyZWQgb24gdGhlIHN1YnNjcmliZXIgc2lkZS4g VGhpcyBtYWtlcyBpdAorCSAqIHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExP R0dFRCBjb21tYW5kIGFuZCB0aGUgaW5jb21pbmcKKwkgKiByZXdyaXRlIG1lc3NhZ2Ugd2l0aG91 dCBjcmVhdGluZyBhIG5ldyB0YWJsZS4KKwkgKi8KKwlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJT SVNURU5DRV9URU1QKQorCXsKKwkJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBs b2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJCWpzb25fc3RyaW5nID0g ZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kLCBmYWxzZSk7CisKKwkJaWYgKGpzb25fc3RyaW5n ICE9IE5VTEwpCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNtZC0+ZC5hbHRl clRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkJIGpzb25fc3RyaW5nLCBz dHJsZW4oanNvbl9zdHJpbmcpICsgMSk7CisJfQorCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuIFRo aXMgZnVuY3Rpb24KKyAqIGlzIGNhbGxlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBjb21t YW5kIGJ1dCBiZWZvcmUgdGhlCisgKiB0cmFuc2FjdGlvbiBjb21taXRzLgorICovCitEYXR1bQor cHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlMaXN0Q2VsbCAgICpsYzsKKwlzbGlzdF9pdGVyCWl0ZXI7CisJRGVwYXJzZWRDb21tYW5kVHlw ZSB0eXBlOworCU9pZAkJCXJlbGlkOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dFUihm Y2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFuYWdl ciIpOworCisJZm9yZWFjaChsYywgY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jb21tYW5kTGlz dCkKKwl7CisJCWNoYXIJCXJlbHBlcnNpc3QgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CisJ CUNvbGxlY3RlZENvbW1hbmQgKmNtZCA9IGxmaXJzdChsYyk7CisJCWNoYXIJICAgKmpzb25fc3Ry aW5nOworCisJCS8qIFJld3JpdGUgRERMIGhhcyBiZWVuIGhhbmRsZWQgaW4gdGFibGVfcmV3cml0 ZSB0cmlnZ2VyICovCisJCWlmIChjbWQtPmQuYWx0ZXJUYWJsZS5yZXdyaXRlKQorCQl7CisJCQlS ZW5hbWVTdG10ICpyZW5hbWVTdG10ID0gKFJlbmFtZVN0bXQgKikgY21kLT5wYXJzZXRyZWU7CisK KwkJCWlmIChyZW5hbWVTdG10ICYmIHJlbmFtZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1Rf VFlQRSAmJgorCQkJCXJlbmFtZVN0bXQtPnJlbGF0aW9uVHlwZSAhPSBPQkpFQ1RfVEFCTEUpCisJ CQkJY29udGludWU7CisJCX0KKworCQlpZiAoY21kLT50eXBlID09IFNDVF9TaW1wbGUgJiYKKwkJ CSFPaWRJc1ZhbGlkKGNtZC0+ZC5zaW1wbGUuYWRkcmVzcy5vYmplY3RJZCkpCisJCQljb250aW51 ZTsKKworCQlpZiAoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKQorCQl7CisJCQlyZWxpZCA9 IGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkOworCQkJdHlwZSA9IERDVF9UYWJsZUFsdGVyOwor CQl9CisJCWVsc2UKKwkJeworCQkJLyogT25seSBTQ1RfU2ltcGxlIGZvciBub3cgKi8KKwkJCXJl bGlkID0gY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkOworCQkJdHlwZSA9IERDVF9TaW1w bGVDbWQ7CisJCX0KKworCQlpZiAoZ2V0X3JlbF9yZWxraW5kKHJlbGlkKSkKKwkJCXJlbHBlcnNp c3QgPSBnZXRfcmVsX3BlcnNpc3RlbmNlKHJlbGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2Vu ZXJhdGUgd2FsIGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICog dGVtcG9yYXJ5IHRhYmxlLgorCQkgKgorCQkgKiBXZSB3aWxsIGdlbmVyYXRlIHdhbCBsb2dzIGZv ciB1bmxvZ2dlZCB0YWJsZXMgc28gdGhhdCB1bmxvZ2dlZAorCQkgKiB0YWJsZXMgY2FuIGFsc28g YmUgY3JlYXRlZCBhbmQgYWx0ZXJlZCBvbiB0aGUgc3Vic2NyaWJlciBzaWRlLiBUaGlzCisJCSAq IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGRpcmVjdGx5IHJlcGxheSB0aGUgU0VUIExPR0dFRCBjb21t YW5kIGFuZCB0aGUKKwkJICogaW5jb21pbmcgcmV3cml0ZSBtZXNzYWdlIHdpdGhvdXQgY3JlYXRp bmcgYSBuZXcgdGFibGUuCisJCSAqLworCQlpZiAocmVscGVyc2lzdCAhPSBSRUxQRVJTSVNURU5D RV9URU1QKQorCQl7CisJCQkvKgorCQkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdB TCBsb2cgaXQgdG8gYWxsb3cgZGVjb2Rpbmcgb2YgdGhlCisJCQkgKiBzYW1lLgorCQkJICovCisJ CQlqc29uX3N0cmluZyA9IGRlcGFyc2VfdXRpbGl0eV9jb21tYW5kKGNtZCwgZmFsc2UpOworCisJ CQlpZiAoanNvbl9zdHJpbmcgIT0gTlVMTCkKKwkJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVw YXJzZSIsIHJlbGlkLCB0eXBlLCBqc29uX3N0cmluZywKKwkJCQkJCQkJCSBzdHJsZW4oanNvbl9z dHJpbmcpICsgMSk7CisJCX0KKwl9CisKKwlzbGlzdF9mb3JlYWNoKGl0ZXIsICYoY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5TUUxEcm9wTGlzdCkpCisJeworCQl2b2xhdGlsZSBTUUxEcm9wT2Jq ZWN0ICpvYmo7CisJCURyb3BTdG10ICAgKnN0bXQ7CisJCUV2ZW50VHJpZ2dlckRhdGEgKnRyaWdk YXRhOworCQljaGFyCSAgICpjb21tYW5kOworCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7 CisJCWNvbnN0IGNoYXIgKnRtcHR5cGU7CisKKwkJdHJpZ2RhdGEgPSAoRXZlbnRUcmlnZ2VyRGF0 YSAqKSBmY2luZm8tPmNvbnRleHQ7CisJCXN0bXQgPSAoRHJvcFN0bXQgKikgdHJpZ2RhdGEtPnBh cnNldHJlZTsKKworCQlvYmogPSBzbGlzdF9jb250YWluZXIoU1FMRHJvcE9iamVjdCwgbmV4dCwg aXRlci5jdXIpOworCisJCWlmIChzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGFibGUiKSA9PSAw KQorCQkJY21kdHlwZSA9IERDVF9UYWJsZURyb3BFbmQ7CisJCWVsc2UgaWYgKHN0cmNtcChvYmot Pm9iamVjdHR5cGUsICJzZXF1ZW5jZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0 dHlwZSwgInNjaGVtYSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgImlu ZGV4IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiZnVuY3Rpb24iKSA9 PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJwcm9jZWR1cmUiKSA9PSAwIHx8 CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJvcGVyYXRvciIpID09IDAgfHwKKwkJCQkg c3RyY21wKG9iai0+b2JqZWN0dHlwZSwgIm9wZXJhdG9yIGNsYXNzIikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAib3BlcmF0b3IgZmFtaWx5IikgPT0gMCB8fAorCQkJCSBz dHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY2FzdCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+ b2JqZWN0dHlwZSwgInR5cGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUs ICJkb21haW4iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmlnZ2Vy IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAiY29udmVyc2lvbiIpID09 IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInBvbGljeSIpID09IDAgfHwKKwkJ CQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwgInJ1bGUiKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJleHRlbnNpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9i amVjdHR5cGUsICJmb3JlaWduLWRhdGEgd3JhcHBlciIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9i ai0+b2JqZWN0dHlwZSwgInRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24iKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0ZXh0IHNlYXJjaCBkaWN0aW9uYXJ5IikgPT0gMCB8 fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggcGFyc2VyIikgPT0g MCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBlLCAidGV4dCBzZWFyY2ggdGVtcGxhdGUi KSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJ0cmFuc2Zvcm0iKSA9PSAw IHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJzZXJ2ZXIiKSA9PSAwIHx8CisJCQkJ IHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJjb2xsYXRpb24iKSA9PSAwIHx8CisJCQkJIHN0cmNt cChvYmotPm9iamVjdHR5cGUsICJ1c2VyIG1hcHBpbmciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChv YmotPm9iamVjdHR5cGUsICJsYW5ndWFnZSIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2Jq ZWN0dHlwZSwgInZpZXciKSA9PSAwIHx8CisJCQkJIHN0cmNtcChvYmotPm9iamVjdHR5cGUsICJt YXRlcmlhbGl6ZWQgdmlldyIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg InN0YXRpc3RpY3Mgb2JqZWN0IikgPT0gMCB8fAorCQkJCSBzdHJjbXAob2JqLT5vYmplY3R0eXBl LCAiYWNjZXNzIG1ldGhvZCIpID09IDAgfHwKKwkJCQkgc3RyY21wKG9iai0+b2JqZWN0dHlwZSwg InJvdXRpbmUiKSA9PSAwKQorCQkJY21kdHlwZSA9IERDVF9PYmplY3REcm9wOworCQllbHNlCisJ CQljb250aW51ZTsKKworCQkvKiBDaGFuZ2UgZm9yZWlnbi1kYXRhIHdyYXBwZXIgdG8gZm9yZWln biBkYXRhIHdyYXBwZXIgKi8KKwkJaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAiZm9yZWln bi1kYXRhIHdyYXBwZXIiLCAyMCkgPT0gMCkKKwkJeworCQkJdG1wdHlwZSA9IHBzdHJkdXAoImZv cmVpZ24gZGF0YSB3cmFwcGVyIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2NvbW1hbmQo b2JqLT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhhdmlvcik7 CisJCX0KKworCQkvKiBDaGFuZ2Ugc3RhdGlzdGljcyBvYmplY3QgdG8gc3RhdGlzdGljcyAqLwor CQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgInN0YXRpc3RpY3Mgb2JqZWN0IiwK KwkJCQkJCSBzdHJsZW4oInN0YXRpc3RpY3Mgb2JqZWN0IikpID09IDApCisJCXsKKwkJCXRtcHR5 cGUgPSBwc3RyZHVwKCJzdGF0aXN0aWNzIik7CisJCQljb21tYW5kID0gZGVwYXJzZV9kcm9wX2Nv bW1hbmQob2JqLT5vYmppZGVudGl0eSwgdG1wdHlwZSwKKwkJCQkJCQkJCQkgICBzdG10LT5iZWhh dmlvcik7CisJCX0KKworCQkvKgorCQkgKiBPYmplY3QgaWRlbnRpdHkgbmVlZHMgdG8gYmUgbW9k aWZpZWQgdG8gbWFrZSB0aGUgZHJvcCB3b3JrCisJCSAqCisJCSAqIEZST006IDxyb2xlPiBvbiBz ZXJ2ZXIgPHNlcnZlcm5hbWU+IFRPICA6IGZvciA8cm9sZT4gc2VydmVyCisJCSAqIDxzZXJ2ZXJu YW1lPgorCQkgKgorCQkgKi8KKwkJZWxzZSBpZiAoc3RybmNtcChvYmotPm9iamVjdHR5cGUsICJ1 c2VyIG1hcHBpbmciLCAxMikgPT0gMCkKKwkJeworCQkJY2hhcgkgICAqb25fc2VydmVyOworCisJ CQl0bXB0eXBlID0gcGFsbG9jKHN0cmxlbihvYmotPm9iamlkZW50aXR5KSArIDIpOworCQkJb25f c2VydmVyID0gc3Ryc3RyKG9iai0+b2JqaWRlbnRpdHksICJvbiBzZXJ2ZXIiKTsKKworCQkJc3By aW50ZigoY2hhciAqKSB0bXB0eXBlLCAiZm9yICIpOworCQkJc3RybmNhdCgoY2hhciAqKSB0bXB0 eXBlLCBvYmotPm9iamlkZW50aXR5LCBvbl9zZXJ2ZXIgLSBvYmotPm9iamlkZW50aXR5KTsKKwkJ CXN0cmNhdCgoY2hhciAqKSB0bXB0eXBlLCBvbl9zZXJ2ZXIgKyAzKTsKKwkJCWNvbW1hbmQgPSBk ZXBhcnNlX2Ryb3BfY29tbWFuZCh0bXB0eXBlLCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJCQkJ ICAgc3RtdC0+YmVoYXZpb3IpOworCQl9CisJCWVsc2UKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX2Ry b3BfY29tbWFuZChvYmotPm9iamlkZW50aXR5LCBvYmotPm9iamVjdHR5cGUsCisJCQkJCQkJCQkJ ICAgc3RtdC0+YmVoYXZpb3IpOworCisJCWlmIChjb21tYW5kKQorCQkJTG9nTG9naWNhbERETE1l c3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJlc3Mub2JqZWN0SWQsIGNtZHR5cGUsCisJCQkJCQkJ CSBjb21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKwl9CisKKwlyZXR1cm4gUG9pbnRlckdl dERhdHVtKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGlj YXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwppbmRl eCAyMGZhNzJjNWM4Li4xMWQyODAxN2U0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5k cy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlv bmNtZHMuYwpAQCAtMzgsMTAgKzM4LDEyIEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgor I2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5o IgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jbGF1c2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFy c2VfY29sbGF0ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgorI2luY2x1 ZGUgInBhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRl ICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtOTcsNiArOTksNyBA QCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlwdWJhY3Rp b25zLT5wdWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7CiAJ cHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCXB1YmFjdGlvbnMtPnB1YmRkbCA9IGZh bHNlOwogCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlOwogCiAJLyogUGFyc2Ug b3B0aW9ucyAqLwpAQCAtMTQ0LDYgKzE0Nyw4IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlvbnMo UGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVlOwog CQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgInRydW5jYXRlIikgPT0gMCkKIAkJCQkJ cHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJs aXNoX29wdCwgImRkbCIpID09IDApCisJCQkJCXB1YmFjdGlvbnMtPnB1YmRkbCA9IHRydWU7CiAJ CQkJZWxzZQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKQEAgLTcyOCw2ICs3MzMsNTMgQEAgQ2hlY2tQdWJSZWxhdGlvbkNvbHVtbkxp c3QoY2hhciAqcHVibmFtZSwgTGlzdCAqdGFibGVzLAogCX0KIH0KIAorLyoKKyAqIENyZWF0ZSBl dmVudCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNhdGlvbi4KKyAqLworc3Rh dGljIHZvaWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hhciAqZXZlbnRuYW1lLCBD b21tYW5kVGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5kcywgT2JqZWN0QWRkcmVz cyBwdWJhZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWludAkJCWk7CisJTGlzdAkg ICAqdGFncyA9IE5JTDsKKwlPaWQJCQl0cmlnZ2VyX2lkOworCU9iamVjdEFkZHJlc3MgcmVmZXJl bmNlZDsKKwlDcmVhdGVFdmVudFRyaWdTdG10ICpkZGxfdHJpZ2dlcjsKKwljaGFyCQl0cmlnZ2Vy X25hbWVbTkFNRURBVEFMRU5dOworCWNoYXIJCXRyaWdnZXJfZnVuY19uYW1lW05BTUVEQVRBTEVO XTsKKwlzdGF0aWMgY29uc3QgY2hhciAqdHJpZ2dlcl9uYW1lX3ByZWZpeCA9ICJwZ19kZXBhcnNl X3RyaWdfJXNfJXUiOworCXN0YXRpYyBjb25zdCBjaGFyICp0cmlnZ2VyX2Z1bmNfcHJlZml4ID0g InB1YmxpY2F0aW9uX2RlcGFyc2VfJXMiOworCisJZGRsX3RyaWdnZXIgPSBtYWtlTm9kZShDcmVh dGVFdmVudFRyaWdTdG10KTsKKworCXNucHJpbnRmKHRyaWdnZXJfbmFtZSwgc2l6ZW9mKHRyaWdn ZXJfbmFtZSksIHRyaWdnZXJfbmFtZV9wcmVmaXgsCisJCQkgZXZlbnRuYW1lLCBwdWJvaWQpOwor CXNucHJpbnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXplb2YodHJpZ2dlcl9mdW5jX25hbWUpLCB0 cmlnZ2VyX2Z1bmNfcHJlZml4LAorCQkJIGV2ZW50bmFtZSk7CisKKwlkZGxfdHJpZ2dlci0+dHJp Z25hbWUgPSBwc3RyZHVwKHRyaWdnZXJfbmFtZSk7CisJZGRsX3RyaWdnZXItPmV2ZW50bmFtZSA9 IGV2ZW50bmFtZTsKKwlkZGxfdHJpZ2dlci0+ZnVuY25hbWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmln Z2VyX2Z1bmNfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbW1hbmRzOyBpKyspCisJewor CQlTdHJpbmcJICAgKnRhZyA9IG1ha2VTdHJpbmcocHN0cmR1cChHZXRDb21tYW5kVGFnTmFtZShj b21tYW5kc1tpXSkpKTsKKworCQl0YWdzID0gbGFwcGVuZCh0YWdzLCB0YWcpOworCX0KKworCWRk bF90cmlnZ2VyLT53aGVuY2xhdXNlID0gbGlzdF9tYWtlMShtYWtlRGVmRWxlbSgidGFnIiwgKE5v ZGUgKikgdGFncywgLTEpKTsKKworCXRyaWdnZXJfaWQgPSBDcmVhdGVFdmVudFRyaWdnZXIoZGRs X3RyaWdnZXIpOworCisJLyoKKwkgKiBSZWdpc3RlciB0aGUgZXZlbnQgdHJpZ2dlcnMgYXMgaW50 ZXJuYWxseSBkZXBlbmRlbnQgb24gdGhlIHB1YmxpY2F0aW9uLgorCSAqLworCU9iamVjdEFkZHJl c3NTZXQocmVmZXJlbmNlZCwgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZCwgdHJpZ2dlcl9pZCk7CisJ cmVjb3JkRGVwZW5kZW5jeU9uKCZyZWZlcmVuY2VkLCAmcHViYWRkcmVzcywgREVQRU5ERU5DWV9J TlRFUk5BTCk7Cit9CisKIC8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0aW9uLgogICovCkBAIC03 OTgsNiArODUwLDggQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVh dGVQdWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRl bGV0ZSk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9CiAJ CUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9wZ19w dWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9CisJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRk bCk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9v bEdldERhdHVtKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIApAQCAtODU4LDYgKzkxMiwx MjcgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNh dGlvblN0bXQgKnN0bXQpCiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhbiBldmVudCB0cmln Z2VyIHRvIGFsbG93IGxvZ2dpbmcgb2YgRERMIHN0YXRlbWVudHMuCisJICoKKwkgKi8KKwlpZiAo cHViYWN0aW9ucy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0YXJ0X2NvbW1hbmRzW10gPSB7 Q01EVEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3JpdGVfY29tbWFuZHNbXSA9IHtD TURUQUdfQUxURVJfVEFCTEV9OworCisJCXN0YXRpYyBDb21tYW5kVGFnCWVuZF9jb21tYW5kc1td ID0geworCQkJQ01EVEFHX0FMVEVSX0NBU1QsCisJCQlDTURUQUdfQUxURVJfQ09MTEFUSU9OLAor CQkJQ01EVEFHX0FMVEVSX0NPTlZFUlNJT04sCisJCQlDTURUQUdfQUxURVJfREVGQVVMVF9QUklW SUxFR0VTLAorCQkJQ01EVEFHX0FMVEVSX0RPTUFJTiwKKwkJCUNNRFRBR19BTFRFUl9FWFRFTlNJ T04sCisJCQlDTURUQUdfQUxURVJfRk9SRUlHTl9EQVRBX1dSQVBQRVIsCisJCQlDTURUQUdfQUxU RVJfRlVOQ1RJT04sCisJCQlDTURUQUdfQUxURVJfSU5ERVgsCisJCQlDTURUQUdfQUxURVJfSU5E RVgsCisJCQlDTURUQUdfQUxURVJfTEFOR1VBR0UsCisJCQlDTURUQUdfQUxURVJfTUFURVJJQUxJ WkVEX1ZJRVcsCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1IsCisJCQlDTURUQUdfQUxURVJfT1BF UkFUT1JfQ0xBU1MsCisJCQlDTURUQUdfQUxURVJfT1BFUkFUT1JfRkFNSUxZLAorCQkJQ01EVEFH X0FMVEVSX1BPTElDWSwKKwkJCUNNRFRBR19BTFRFUl9QUk9DRURVUkUsCisJCQlDTURUQUdfQUxU RVJfUk9VVElORSwKKwkJCUNNRFRBR19BTFRFUl9SVUxFLAorCQkJQ01EVEFHX0FMVEVSX1NDSEVN QSwKKwkJCUNNRFRBR19BTFRFUl9TRVFVRU5DRSwKKwkJCUNNRFRBR19BTFRFUl9TRVJWRVIsCisJ CQlDTURUQUdfQUxURVJfU1RBVElTVElDUywKKwkJCUNNRFRBR19BTFRFUl9UQUJMRSwKKwkJCUNN RFRBR19BTFRFUl9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0FMVEVSX1RF WFRfU0VBUkNIX0RJQ1RJT05BUlksCisJCQlDTURUQUdfQUxURVJfVFJJR0dFUiwKKwkJCUNNRFRB R19BTFRFUl9UWVBFLAorCQkJQ01EVEFHX0FMVEVSX1VTRVJfTUFQUElORywKKwkJCUNNRFRBR19B TFRFUl9WSUVXLAorCQkJQ01EVEFHX0NPTU1FTlQsCisJCQlDTURUQUdfQ1JFQVRFX0FDQ0VTU19N RVRIT0QsCisJCQlDTURUQUdfQ1JFQVRFX0NBU1QsCisJCQlDTURUQUdfQ1JFQVRFX0NPTExBVElP TiwKKwkJCUNNRFRBR19DUkVBVEVfQ09OVkVSU0lPTiwKKwkJCUNNRFRBR19DUkVBVEVfRE9NQUlO LAorCQkJQ01EVEFHX0NSRUFURV9FWFRFTlNJT04sCisJCQlDTURUQUdfQ1JFQVRFX0ZPUkVJR05f REFUQV9XUkFQUEVSLAorCQkJQ01EVEFHX0NSRUFURV9GVU5DVElPTiwKKwkJCUNNRFRBR19DUkVB VEVfSU5ERVgsCisJCQlDTURUQUdfQ1JFQVRFX0xBTkdVQUdFLAorCQkJQ01EVEFHX0NSRUFURV9N QVRFUklBTElaRURfVklFVywKKwkJCUNNRFRBR19DUkVBVEVfT1BFUkFUT1IsCisJCQlDTURUQUdf Q1JFQVRFX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0NSRUFURV9PUEVSQVRPUl9GQU1JTFks CisJCQlDTURUQUdfQ1JFQVRFX1BPTElDWSwKKwkJCUNNRFRBR19DUkVBVEVfUFJPQ0VEVVJFLAor CQkJQ01EVEFHX0NSRUFURV9SVUxFLAorCQkJQ01EVEFHX0NSRUFURV9TQ0hFTUEsCisJCQlDTURU QUdfQ1JFQVRFX1NFUVVFTkNFLAorCQkJQ01EVEFHX0NSRUFURV9TRVJWRVIsCisJCQlDTURUQUdf Q1JFQVRFX1NUQVRJU1RJQ1MsCisJCQlDTURUQUdfQ1JFQVRFX1RBQkxFLAorCQkJQ01EVEFHX0NS RUFURV9URVhUX1NFQVJDSF9DT05GSUdVUkFUSU9OLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NF QVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0NSRUFURV9URVhUX1NFQVJDSF9QQVJTRVIsCisJ CQlDTURUQUdfQ1JFQVRFX1RFWFRfU0VBUkNIX1RFTVBMQVRFLAorCQkJQ01EVEFHX0NSRUFURV9U UkFOU0ZPUk0sCisJCQlDTURUQUdfQ1JFQVRFX1RSSUdHRVIsCisJCQlDTURUQUdfQ1JFQVRFX1RZ UEUsCisJCQlDTURUQUdfQ1JFQVRFX1VTRVJfTUFQUElORywKKwkJCUNNRFRBR19DUkVBVEVfVklF VywKKwkJCUNNRFRBR19EUk9QX0FDQ0VTU19NRVRIT0QsCisJCQlDTURUQUdfRFJPUF9DQVNULAor CQkJQ01EVEFHX0RST1BfQ09MTEFUSU9OLAorCQkJQ01EVEFHX0RST1BfQ09OVkVSU0lPTiwKKwkJ CUNNRFRBR19EUk9QX0RPTUFJTiwKKwkJCUNNRFRBR19EUk9QX0VYVEVOU0lPTiwKKwkJCUNNRFRB R19EUk9QX0ZPUkVJR05fREFUQV9XUkFQUEVSLAorCQkJQ01EVEFHX0RST1BfRlVOQ1RJT04sCisJ CQlDTURUQUdfRFJPUF9JTkRFWCwKKwkJCUNNRFRBR19EUk9QX0xBTkdVQUdFLAorCQkJQ01EVEFH X0RST1BfTUFURVJJQUxJWkVEX1ZJRVcsCisJCQlDTURUQUdfRFJPUF9PUEVSQVRPUiwKKwkJCUNN RFRBR19EUk9QX09QRVJBVE9SX0NMQVNTLAorCQkJQ01EVEFHX0RST1BfT1BFUkFUT1JfRkFNSUxZ LAorCQkJQ01EVEFHX0RST1BfUE9MSUNZLAorCQkJQ01EVEFHX0RST1BfUFJPQ0VEVVJFLAorCQkJ Q01EVEFHX0RST1BfUk9VVElORSwKKwkJCUNNRFRBR19EUk9QX1JVTEUsCisJCQlDTURUQUdfRFJP UF9TQ0hFTUEsCisJCQlDTURUQUdfRFJPUF9TRVFVRU5DRSwKKwkJCUNNRFRBR19EUk9QX1NFUlZF UiwKKwkJCUNNRFRBR19EUk9QX1NUQVRJU1RJQ1MsCisJCQlDTURUQUdfRFJPUF9UQUJMRSwKKwkJ CUNNRFRBR19EUk9QX1RFWFRfU0VBUkNIX0NPTkZJR1VSQVRJT04sCisJCQlDTURUQUdfRFJPUF9U RVhUX1NFQVJDSF9ESUNUSU9OQVJZLAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfUEFSU0VS LAorCQkJQ01EVEFHX0RST1BfVEVYVF9TRUFSQ0hfVEVNUExBVEUsCisJCQlDTURUQUdfRFJPUF9U UkFOU0ZPUk0sCisJCQlDTURUQUdfRFJPUF9UWVBFLAorCQkJQ01EVEFHX0RST1BfVklFVywKKwkJ CUNNRFRBR19HUkFOVCwKKwkJCUNNRFRBR19SRUZSRVNIX01BVEVSSUFMSVpFRF9WSUVXLAorCQkJ Q01EVEFHX1JFVk9LRSwKKwkJCUNNRFRBR19TRUNVUklUWV9MQUJFTCwKKwl9OworCisJCS8qIENy ZWF0ZSB0aGUgZGRsX2NvbW1hbmRfZW5kIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVw bGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfZW5kIiwgZW5kX2NvbW1hbmRzLAorCQkJCQkJ CQkJIGxlbmd0aG9mKGVuZF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkvKiBDcmVh dGUgdGhlIGRkbF9jb21tYW5kX3N0YXJ0IGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVw bGljYUV2ZW50VHJpZ2dlcigiZGRsX2NvbW1hbmRfc3RhcnQiLCBzdGFydF9jb21tYW5kcywKKwkJ CQkJCQkJCSBsZW5ndGhvZihzdGFydF9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKworCQkv KiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLworCQlDcmVhdGVERExS ZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5kcywKKwkJ CQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQpOworCX0K KwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CiAKIAlJbnZva2VPYmplY3RQ b3N0Q3JlYXRlSG9vayhQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1Ym9pZCwgMCk7CkBAIC05OTYs NiArMTE3MSw5IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwg QWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAKIAkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRp b25fcHVidHJ1bmNhdGUgLSAxXSA9IEJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YnRydW5jYXRl KTsKIAkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVuY2F0ZSAtIDFdID0gdHJ1 ZTsKKworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAxXSA9IEJvb2xHZXRE YXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CisJCXJlcGxhY2VzW0FudW1fcGdfcHVibGljYXRpb25f cHViZGRsIC0gMV0gPSB0cnVlOwogCX0KIAogCWlmIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dF9naXZlbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNTZkYzk5NTcxMy4uNWI0N2Rj MWY0OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTUyMTgsNyArNTIxOCw3IEBAIEFU RXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJICogUmVwb3J0 IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0ZWQgZXZlbnQgdHJpZ2dlcnMuCiAJICovCiAJaWYg KGNtZCkKLQkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUgKikgY21k LCBhZGRyZXNzKTsKKwkJRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoKE5vZGUg KikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOwogCiAJLyoKIAkgKiBCdW1wIHRoZSBjb21t YW5kIGNvdW50ZXIgdG8gZW5zdXJlIHRoZSBuZXh0IHN1YmNvbW1hbmQgaW4gdGhlIHNlcXVlbmNl CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQppbmRleCBjNGUyZmRlYjcx Li5kNGYyOWY4ZmZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUK QEAgLTE1LDYgKzE1LDcgQEAgaW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmds b2JhbAogb3ZlcnJpZGUgQ1BQRkxBR1MgOj0gLUkkKHNyY2RpcikgJChDUFBGTEFHUykKIAogT0JK UyA9IFwKKwlkZGxtZXNzYWdlLm9cCiAJZGVjb2RlLm8gXAogCWxhdW5jaGVyLm8gXAogCWxvZ2lj YWwubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1l c3NhZ2UuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmUxMWU1NmU1YTMKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwpA QCAtMCwwICsxLDg0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxtZXNzYWdlLmMK KyAqCSAgTG9naWNhbCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIyLCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9O CisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgor ICogTk9URVMKKyAqCisgKiBMb2dpY2FsIERETCBtZXNzYWdlcyBhbGxvdyBYTE9HIGxvZ2dpbmcg b2YgRERMIGNvbW1hbmQgc3RyaW5ncyB0aGF0CisgKiBnZXQgcGFzc2VkIHRvIHRoZSBsb2dpY2Fs IGRlY29kaW5nIHBsdWdpbi4gSW4gbm9ybWFsIFhMT0cgcHJvY2Vzc2luZyB0aGV5CisgKiBhcmUg c2FtZSBhcyBOT09QLgorICoKKyAqIFVubGlrZSBnZW5lcmljIGxvZ2ljYWwgbWVzc2FnZXMsIHRo ZXNlIERETCBtZXNzYWdlcyBoYXZlIG9ubHkgdHJhbnNhY3Rpb25hbAorICogbW9kZS4gTm90ZSBi eSBkZWZhdWx0IERETHMgaW4gUG9zdGdyZVNRTCBhcmUgdHJhbnNhY3Rpb25hbC4KKyAqCisgKiBU aGVzZSBtZXNzYWdlcyBhcmUgcGFydCBvZiBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB3aWxsIGJl IHNlbnQgdG8KKyAqIGRlY29kaW5nIHBsdWdpbiB1c2luZyBpbiBhIHNhbWUgd2F5IGFzIERNTCBv cGVyYXRpb25zLgorICoKKyAqIEV2ZXJ5IG1lc3NhZ2UgY2FycmllcyBwcmVmaXggdG8gYXZvaWQg Y29uZmxpY3RzIGJldHdlZW4gZGlmZmVyZW50IGRlY29kaW5nCisgKiBwbHVnaW5zLiBUaGUgcGx1 Z2luIGF1dGhvcnMgbXVzdCB0YWtlIGV4dHJhIGNhcmUgdG8gdXNlIHVuaXF1ZSBwcmVmaXgsCisg KiBnb29kIG9wdGlvbnMgc2VlbXMgdG8gYmUgZm9yIGV4YW1wbGUgdG8gdXNlIHRoZSBuYW1lIG9m IHRoZSBleHRlbnNpb24uCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1 ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorI2luY2x1ZGUgImFj Y2Vzcy94bG9naW5zZXJ0LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNs dWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9leGVjbm9kZXMuaCIKKyNpbmNsdWRl ICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2Fn ZS5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisKKy8qCisgKiBXcml0ZSBsb2dpY2Fs IGRlY29kaW5nIERETCBtZXNzYWdlIGludG8gWExvZy4KKyAqLworWExvZ1JlY1B0cgorTG9nTG9n aWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29t bWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBzaXpl KQoreworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgeGxyZWM7CisKKwkgLyogRW5zdXJlIHdlIGhh dmUgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4gKi8KKwlBc3NlcnQoSXNUcmFuc2FjdGlvblN0YXRl KCkpOworCUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisKKwl4bHJlYy5kYklkID0gTXlEYXRh YmFzZUlkOworCS8qIFRyYWlsaW5nIHplcm8gaXMgY3JpdGljYWw7IHNlZSBsb2dpY2FsZGRsbXNn X2Rlc2MgKi8KKwl4bHJlYy5wcmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpICsgMTsKKwl4bHJl Yy5tZXNzYWdlX3NpemUgPSBzaXplOworCXhscmVjLnJlbGlkID0gcmVsaWQ7CisJeGxyZWMuY21k dHlwZSA9IGNtZHR5cGU7CisKKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVnaXN0ZXJEYXRh KChjaGFyICopICZ4bHJlYywgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UpOworCVhMb2dSZWdpc3Rl ckRhdGEodW5jb25zdGlmeShjaGFyICosIHByZWZpeCksIHhscmVjLnByZWZpeF9zaXplKTsKKwlY TG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBtZXNzYWdlKSwgc2l6ZSk7CisKKwkv KiBBbGxvdyBvcmlnaW4gZmlsdGVyaW5nICovCisJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfSU5D TFVERV9PUklHSU4pOworCisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fTE9HSUNBTERETE1TR19JRCwg WExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKTsKK30KKworLyoKKyAqIFJlZG8gaXMgYmFzaWNhbGx5 IGp1c3Qgbm9vcCBmb3IgbG9naWNhbCBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisgKi8KK3ZvaWQK K2xvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwl1aW50OAkJ aW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsKKworCWlmIChp bmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhQQU5JQywgImxvZ2ljYWxk ZGxtc2dfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CisKKwkvKiBUaGlzIGlzIG9u bHkgaW50ZXJlc3RpbmcgZm9yIGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUuYy4gKi8KK30K ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IDJjYzBhYzllYjAu LmI2MjgxMjk5M2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwv ZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpA QCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRl ICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUuaCIK KyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNsdWRl ICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTYwMyw2ICs2MDQsNDYgQEAgbG9naWNhbG1zZ19k ZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp CiAJCQkJCQkJICBtZXNzYWdlLT5tZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUpOwogfQog CisvKgorICogSGFuZGxlIHJtZ3IgTE9HSUNBTERETE1TR19JRCByZWNvcmRzIGZvciBEZWNvZGVS ZWNvcmRJbnRvUmVvcmRlckJ1ZmZlcigpLgorICovCit2b2lkCitsb2dpY2FsZGRsX2RlY29kZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKK3sKKwlT bmFwQnVpbGQgICpidWlsZGVyID0gY3R4LT5zbmFwc2hvdF9idWlsZGVyOworCVhMb2dSZWFkZXJT dGF0ZSAqciA9IGJ1Zi0+cmVjb3JkOworCVRyYW5zYWN0aW9uSWQgeGlkID0gWExvZ1JlY0dldFhp ZChyKTsKKwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHIpICYgflhMUl9JTkZPX01BU0s7 CisJUmVwT3JpZ2luSWQgb3JpZ2luX2lkID0gWExvZ1JlY0dldE9yaWdpbihyKTsKKwl4bF9sb2dp Y2FsX2RkbF9tZXNzYWdlICptZXNzYWdlOworCisJaWYgKGluZm8gIT0gWExPR19MT0dJQ0FMX0RE TF9NRVNTQUdFKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBSTV9MT0dJQ0FMRERMTVNHX0lE IHJlY29yZCB0eXBlOiAldSIsIGluZm8pOworCisJUmVvcmRlckJ1ZmZlclByb2Nlc3NYaWQoY3R4 LT5yZW9yZGVyLCBYTG9nUmVjR2V0WGlkKHIpLCBidWYtPm9yaWdwdHIpOworCisJLyoKKwkgKiBJ ZiB3ZSBkb24ndCBoYXZlIHNuYXBzaG90IG9yIHdlIGFyZSBqdXN0IGZhc3QtZm9yd2FyZGluZywg dGhlcmUgaXMgbm8KKwkgKiBwb2ludCBpbiBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisJICovCisJ aWYgKFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShidWlsZGVyKSA8IFNOQVBCVUlMRF9GVUxMX1NOQVBT SE9UIHx8CisJCWN0eC0+ZmFzdF9mb3J3YXJkKQorCQlyZXR1cm47CisKKwltZXNzYWdlID0gKHhs X2xvZ2ljYWxfZGRsX21lc3NhZ2UgKikgWExvZ1JlY0dldERhdGEocik7CisKKwlpZiAobWVzc2Fn ZS0+ZGJJZCAhPSBjdHgtPnNsb3QtPmRhdGEuZGF0YWJhc2UgfHwKKwkJRmlsdGVyQnlPcmlnaW4o Y3R4LCBvcmlnaW5faWQpKQorCQlyZXR1cm47CisKKwlpZiAoU25hcEJ1aWxkUHJvY2Vzc0NoYW5n ZShidWlsZGVyLCB4aWQsIGJ1Zi0+b3JpZ3B0cikpCisJCVJlb3JkZXJCdWZmZXJRdWV1ZURETE1l c3NhZ2UoY3R4LT5yZW9yZGVyLCB4aWQsIGJ1Zi0+ZW5kcHRyLAorCQkJCQkJCQkJIG1lc3NhZ2Ut Pm1lc3NhZ2UsIC8qIGZpcnN0IHBhcnQgb2YgbWVzc2FnZSBpcyBwcmVmaXggKi8KKwkJCQkJCQkJ CSBtZXNzYWdlLT5tZXNzYWdlX3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+bWVzc2FnZSArIG1l c3NhZ2UtPnByZWZpeF9zaXplLAorCQkJCQkJCQkJIG1lc3NhZ2UtPnJlbGlkLCBtZXNzYWdlLT5j bWR0eXBlKTsKK30KKwogLyoKICAqIENvbnNvbGlkYXRlZCBjb21taXQgcmVjb3JkIGhhbmRsaW5n IGJldHdlZW4gdGhlIGRpZmZlcmVudCBmb3JtIG9mIGNvbW1pdAogICogcmVjb3Jkcy4KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXggNjI1YTdmNDI3My4uMjNh ODg5NWFjNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dp Y2FsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKQEAg LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5o IgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTczLDYgKzc0 LDEwIEBAIHN0YXRpYyB2b2lkIHRydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2VfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCSAg IFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkgICBj b25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdl KTsKK3N0YXRpYyB2b2lkIGRkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCSAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwgY29u c3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkgIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5kVHlw ZSBjbWR0eXBlLAorCQkJCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNz YWdlKTsKIAogLyogc3RyZWFtaW5nIGNhbGxiYWNrcyAqLwogc3RhdGljIHZvaWQgc3RyZWFtX3N0 YXJ0X2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKQEAgLTkwLDYgKzk1LDExIEBAIHN0YXRpYyB2b2lkIHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuCiBzdGF0aWMgdm9p ZCBzdHJlYW1fbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wg dHJhbnNhY3Rpb25hbCwKIAkJCQkJCQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3Nh Z2Vfc2l6ZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBzdHJlYW1fZGRsX2Ni X3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJ CQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAq cHJlZml4LAorCQkJCQkJCQkJCSBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlw ZSwKKwkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwog c3RhdGljIHZvaWQgc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2Fj aGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJCQkJCSAgIGludCBucmVsYXRpb25zLCBS ZWxhdGlvbiByZWxhdGlvbnNbXSwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKTsKIApAQCAt MjE4LDYgKzIyOCw3IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdp bl9vcHRpb25zLAogCWN0eC0+cmVvcmRlci0+YXBwbHlfdHJ1bmNhdGUgPSB0cnVuY2F0ZV9jYl93 cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+Y29tbWl0ID0gY29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4 LT5yZW9yZGVyLT5tZXNzYWdlID0gbWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+ ZGRsID0gZGRsX2NiX3dyYXBwZXI7CiAKIAkvKgogCSAqIFRvIHN1cHBvcnQgc3RyZWFtaW5nLCB3 ZSByZXF1aXJlIHN0YXJ0L3N0b3AvYWJvcnQvY29tbWl0L2NoYW5nZQpAQCAtMjM0LDYgKzI0NSw3 IEBAIFN0YXJ0dXBEZWNvZGluZ0NvbnRleHQoTGlzdCAqb3V0cHV0X3BsdWdpbl9vcHRpb25zLAog CQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX2NvbW1pdF9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5j YWxsYmFja3Muc3RyZWFtX2NoYW5nZV9jYiAhPSBOVUxMKSB8fAogCQkoY3R4LT5jYWxsYmFja3Mu c3RyZWFtX21lc3NhZ2VfY2IgIT0gTlVMTCkgfHwKKwkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9k ZGxfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV90cnVuY2F0ZV9jYiAh PSBOVUxMKTsKIAogCS8qCkBAIC0yNTEsNiArMjYzLDcgQEAgU3RhcnR1cERlY29kaW5nQ29udGV4 dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY29t bWl0ID0gc3RyZWFtX2NvbW1pdF9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX2No YW5nZSA9IHN0cmVhbV9jaGFuZ2VfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9t ZXNzYWdlID0gc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcjsKKwljdHgtPnJlb3JkZXItPnN0cmVh bV9kZGwgPSBzdHJlYW1fZGRsX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fdHJ1 bmNhdGUgPSBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3JhcHBlcjsKIAogCkBAIC0xMjIwLDYgKzEyMzMs NDQgQEAgbWVzc2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3Vz OwogfQogCitzdGF0aWMgdm9pZAorZGRsX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJICBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQkgIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsCisJCQkJCSAgY29uc3QgY2hhciAq bWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+cHJpdmF0 ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JDb250ZXh0 Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJkKTsKKwor CWlmIChjdHgtPmNhbGxiYWNrcy5kZGxfY2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVz aCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5j dHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFtZSA9ICJkZGwiOworCXN0YXRlLnJlcG9ydF9s b2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3Bs dWdpbl9lcnJvcl9jYWxsYmFjazsKKwllcnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7 CisJZXJyY2FsbGJhY2sucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2Nv bnRleHRfc3RhY2sgPSAmZXJyY2FsbGJhY2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJ Y3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxM ID8gdHhuLT54aWQgOiBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9u ID0gbWVzc2FnZV9sc247CisKKwkvKiBkbyB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sg Ki8KKwljdHgtPmNhbGxiYWNrcy5kZGxfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNuLCBwcmVmaXgs IHJlbGlkLCBjbWR0eXBlLAorCQkJCQkJCQkgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8q IFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBl cnJjYWxsYmFjay5wcmV2aW91czsKK30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV9zdGFydF9jYl93 cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJ CQlYTG9nUmVjUHRyIGZpcnN0X2xzbikKQEAgLTE1MzUsNiArMTU4Niw0OCBAQCBzdHJlYW1fbWVz c2FnZV9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0 eG4sCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3VzOwogfQogCitz dGF0aWMgdm9pZAorc3RyZWFtX2RkbF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJ CQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBl IGNtZHR5cGUsCisJCQkJCQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCSBjb25zdCBjaGFy ICptZXNzYWdlKQoreworCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCA9IGNhY2hlLT5wcml2 YXRlX2RhdGE7CisJTG9naWNhbEVycm9yQ2FsbGJhY2tTdGF0ZSBzdGF0ZTsKKwlFcnJvckNvbnRl eHRDYWxsYmFjayBlcnJjYWxsYmFjazsKKworCUFzc2VydCghY3R4LT5mYXN0X2ZvcndhcmQpOwor CisJLyogV2UncmUgb25seSBzdXBwb3NlZCB0byBjYWxsIHRoaXMgd2hlbiBzdHJlYW1pbmcgaXMg c3VwcG9ydGVkLiAqLworCUFzc2VydChjdHgtPnN0cmVhbWluZyk7CisKKwkvKiB0aGlzIGNhbGxi YWNrIGlzIG9wdGlvbmFsICovCisJaWYgKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9kZGxfY2IgPT0g TlVMTCkKKwkJcmV0dXJuOworCisJLyogUHVzaCBjYWxsYmFjayArIGluZm8gb24gdGhlIGVycm9y IGNvbnRleHQgc3RhY2sgKi8KKwlzdGF0ZS5jdHggPSBjdHg7CisJc3RhdGUuY2FsbGJhY2tfbmFt ZSA9ICJzdHJlYW1fZGRsIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRpb24gPSBtZXNzYWdlX2xzbjsK KwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5fZXJyb3JfY2FsbGJhY2s7CisJ ZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVycmNhbGxiYWNrLnByZXZpb3Vz ID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0X3N0YWNrID0gJmVycmNhbGxi YWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+YWNjZXB0X3dyaXRlcyA9IHRy dWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4bi0+eGlkIDogSW52YWxpZFRy YW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOworCisJLyog ZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJY3R4LT5jYWxsYmFja3Muc3Ry ZWFtX2RkbF9jYihjdHgsIHR4biwgbWVzc2FnZV9sc24sIHByZWZpeCwgcmVsaWQsCisJCQkJCQkJ CQkJY21kdHlwZSwgbWVzc2FnZV9zaXplLCBtZXNzYWdlKTsKKworCS8qIFBvcCB0aGUgZXJyb3Ig Y29udGV4dCBzdGFjayAqLworCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2 aW91czsKK30KKwogc3RhdGljIHZvaWQKIHN0cmVhbV90cnVuY2F0ZV9jYl93cmFwcGVyKFJlb3Jk ZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQkgICBpbnQgbnJl bGF0aW9ucywgUmVsYXRpb24gcmVsYXRpb25zW10sCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9tZXNvbi5idWlsZAppbmRleCA3NzM1ODNhMTJiLi5lN2M3MGFhMjYxIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL21lc29uLmJ1aWxkCisrKyBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbWVzb24uYnVpbGQKQEAgLTEsNCArMSw1IEBA CiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCisgICdkZGxtZXNzYWdlLmMnLAogICAnZGVjb2Rl LmMnLAogICAnbGF1bmNoZXIuYycsCiAgICdsb2dpY2FsLmMnLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jCmluZGV4IGY1ZjJiYzI0ZDguLjM4MTc1ZGMwMzAgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTY2Myw2ICs2NjMsNDcgQEAgbG9n aWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24sCiAJcHFfc2VuZGJ5dGVzKG91dCwgbWVzc2FnZSwgc3opOwogfQogCisv KgorICogUmVhZCBEREwgTUVTU0FHRSBmcm9tIHN0cmVhbQorICovCitjaGFyICoKK2xvZ2ljYWxy ZXBfcmVhZF9kZGwoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqbHNuLAorCQkJCQkJICAgY29u c3QgY2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNpemUgKnN6KQoreworCXVpbnQ4IGZsYWdzOwor CWNoYXIgKm1zZzsKKworCWZsYWdzID0gcHFfZ2V0bXNnaW50KGluLCAxKTsKKwlpZiAoZmxhZ3Mg IT0gMCkKKwkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBmbGFncyAldSBpbiBkZGwgbWVzc2Fn ZSIsIGZsYWdzKTsKKworCSpsc24gPSBwcV9nZXRtc2dpbnQ2NChpbik7CisJKnByZWZpeCA9IHBx X2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0gcHFfZ2V0bXNnaW50KGluLCA0KTsKKwltc2cgPSAo Y2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwgKnN6KTsKKworCXJldHVybiBtc2c7Cit9CisKKy8q CisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBzdHJlYW0KKyAqLwordm9pZAorbG9naWNhbHJlcF93 cml0ZV9kZGwoU3RyaW5nSW5mbyBvdXQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCWNvbnN0IGNo YXIgKnByZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwl1aW50OAkJZmxh Z3MgPSAwOworCisJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMX1JFUF9NU0dfRERMKTsKKworCXBx X3NlbmRpbnQ4KG91dCwgZmxhZ3MpOworCXBxX3NlbmRpbnQ2NChvdXQsIGxzbik7CisJcHFfc2Vu ZHN0cmluZyhvdXQsIHByZWZpeCk7CisJcHFfc2VuZGludDMyKG91dCwgc3opOworCXBxX3NlbmRi eXRlcyhvdXQsIG1lc3NhZ2UsIHN6KTsKK30KKwogLyoKICAqIFdyaXRlIHJlbGF0aW9uIGRlc2Ny aXB0aW9uIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0xMjE5LDYgKzEyNjAsOCBAQCBs b2dpY2FscmVwX21lc3NhZ2VfdHlwZShMb2dpY2FsUmVwTXNnVHlwZSBhY3Rpb24pCiAJCQlyZXR1 cm4gIlRZUEUiOwogCQljYXNlIExPR0lDQUxfUkVQX01TR19NRVNTQUdFOgogCQkJcmV0dXJuICJN RVNTQUdFIjsKKwkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfRERMOgorCQkJcmV0dXJuICJEREwiOwog CQljYXNlIExPR0lDQUxfUkVQX01TR19CRUdJTl9QUkVQQVJFOgogCQkJcmV0dXJuICJCRUdJTiBQ UkVQQVJFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRToKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggYjU2N2I4YjU5ZS4u NmQ0NDFhNTk2MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9y ZGVyYnVmZmVyLmMKQEAgLTk0LDYgKzk0LDcgQEAKICNpbmNsdWRlICJsaWIvYmluYXJ5aGVhcC5o IgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2Fs LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vcmVvcmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL3Nsb3QuaCIKQEAgLTUxMyw2ICs1MTQsMTQgQEAgUmVvcmRlckJ1ZmZlclJldHVy bkNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLAog CQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSk7CiAJCQljaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2UgPSBOVUxMOwogCQkJYnJlYWs7CisJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdF X0RETDoKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVl KGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGwucHJlZml4ID0g TlVMTDsKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlwZnJl ZShjaGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdl ID0gTlVMTDsKKwkJCWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElE QVRJT046CiAJCQlpZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZy ZWUoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAtODkxLDYgKzkwMCwzNiBA QCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlv bklkIHhpZCwKIAl9CiB9CiAKKy8qCisgKiBBIHRyYW5zYWN0aW9uYWwgRERMIG1lc3NhZ2UgaXMg cXVldWVkIHRvIGJlIHByb2Nlc3NlZCB1cG9uIGNvbW1pdC4KKyAqLwordm9pZAorUmVvcmRlckJ1 ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQs CisJCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJIFNp emUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlLAorCQkJCQkJCSBPaWQgcmVsaWQs IERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRl eHQ7CisJUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlOworCisJQXNzZXJ0KFRyYW5zYWN0aW9u SWRJc1ZhbGlkKHhpZCkpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhy Yi0+Y29udGV4dCk7CisKKwljaGFuZ2UgPSBSZW9yZGVyQnVmZmVyR2V0Q2hhbmdlKHJiKTsKKwlj aGFuZ2UtPmFjdGlvbiA9IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw7CisJY2hhbmdlLT5kYXRh LmRkbC5wcmVmaXggPSBwc3RyZHVwKHByZWZpeCk7CisJY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCA9 IHJlbGlkOworCWNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSA9IGNtZHR5cGU7CisJY2hhbmdlLT5k YXRhLmRkbC5tZXNzYWdlX3NpemUgPSBtZXNzYWdlX3NpemU7CisJY2hhbmdlLT5kYXRhLmRkbC5t ZXNzYWdlID0gcGFsbG9jKG1lc3NhZ2Vfc2l6ZSk7CisJbWVtY3B5KGNoYW5nZS0+ZGF0YS5kZGwu bWVzc2FnZSwgbWVzc2FnZSwgbWVzc2FnZV9zaXplKTsKKworCVJlb3JkZXJCdWZmZXJRdWV1ZUNo YW5nZShyYiwgeGlkLCBsc24sIGNoYW5nZSwgZmFsc2UpOworCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworfQorCiAvKgogICogQXNzZXJ0VFhOTHNuT3JkZXIKICAqCQlWZXJp ZnkgTFNOIG9yZGVyaW5nIG9mIHRyYW5zYWN0aW9uIGxpc3RzIGluIHRoZSByZW9yZGVyYnVmZmVy CkBAIC0xOTk5LDYgKzIwMzgsMjkgQEAgUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShSZW9yZGVy QnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQljaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2UpOwogfQogCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVmZmVy UHJvY2Vzc1RYTiBmb3IgYXBwbHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0aWMgaW5s aW5lIHZvaWQKK1Jlb3JkZXJCdWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIs IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hh bmdlLCBib29sIHN0cmVhbWluZykKK3sKKwlpZiAoc3RyZWFtaW5nKQorCQlyYi0+c3RyZWFtX2Rk bChyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4 LAorCQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0 YS5kZGwuY21kdHlwZSwKKwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLAor CQkJCQkJCSAgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlKTsKKwllbHNlCisJCXJiLT5kZGwocmIs IHR4biwgY2hhbmdlLT5sc24sCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4LAorCQkJ CQkgICBjaGFuZ2UtPmRhdGEuZGRsLnJlbGlkLAorCQkJCQkgICBjaGFuZ2UtPmRhdGEuZGRsLmNt ZHR5cGUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLAorCQkJCQkgICBj aGFuZ2UtPmRhdGEuZGRsLm1lc3NhZ2UpOworfQorCiAvKgogICogRnVuY3Rpb24gdG8gc3RvcmUg dGhlIGNvbW1hbmQgaWQgYW5kIHNuYXBzaG90IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQKICAq IHN0cmVhbSBzbyB0aGF0IHdlIGNhbiByZXVzZSB0aGUgc2FtZSB3aGlsZSBzZW5kaW5nIHRoZSBu ZXh0IHN0cmVhbS4KQEAgLTIzNzksNiArMjQ0MSwxMCBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RY TihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQlSZW9yZGVy QnVmZmVyQXBwbHlNZXNzYWdlKHJiLCB0eG4sIGNoYW5nZSwgc3RyZWFtaW5nKTsKIAkJCQkJYnJl YWs7CiAKKwkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQkJCVJlb3JkZXJC dWZmZXJBcHBseURETE1lc3NhZ2UocmIsIHR4biwgY2hhbmdlLCBzdHJlYW1pbmcpOworCQkJCQli cmVhazsKKwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKIAkJ CQkJLyogRXhlY3V0ZSB0aGUgaW52YWxpZGF0aW9uIG1lc3NhZ2VzIGxvY2FsbHkgKi8KIAkJCQkJ UmVvcmRlckJ1ZmZlckV4ZWN1dGVJbnZhbGlkYXRpb25zKGNoYW5nZS0+ZGF0YS5pbnZhbC5uaW52 YWxpZGF0aW9ucywKQEAgLTM4MDEsNiArMzg2NywzOSBAQCBSZW9yZGVyQnVmZmVyU2VyaWFsaXpl Q2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCSAg IGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKIAkJCQlkYXRhICs9IGNoYW5nZS0+ZGF0 YS5tc2cubWVzc2FnZV9zaXplOwogCisJCQkJYnJlYWs7CisJCQl9CisJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RETDoKKwkJCXsKKwkJCQljaGFyCSAgICpkYXRhOworCQkJCVNpemUJCXBy ZWZpeF9zaXplID0gc3RybGVuKGNoYW5nZS0+ZGF0YS5kZGwucHJlZml4KSArIDE7CisKKwkJCQlz eiArPSBwcmVmaXhfc2l6ZSArIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplICsKKwkJCQkJ c2l6ZW9mKFNpemUpICsgc2l6ZW9mKE9pZCkgKyBzaXplb2YoaW50KSArIHNpemVvZihTaXplKTsK KwkJCQlSZW9yZGVyQnVmZmVyU2VyaWFsaXplUmVzZXJ2ZShyYiwgc3opOworCisJCQkJZGF0YSA9 ICgoY2hhciAqKSByYi0+b3V0YnVmKSArIHNpemVvZihSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSk7 CisKKwkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KKwkJCQlvbmRp c2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKKworCQkJCS8qIHdy aXRlIHRoZSBwcmVmaXgsIHJlbGlkIGFuZCBjbWR0eXBlIGluY2x1ZGluZyB0aGUgc2l6ZSAqLwor CQkJCW1lbWNweShkYXRhLCAmcHJlZml4X3NpemUsIHNpemVvZihTaXplKSk7CisJCQkJZGF0YSAr PSBzaXplb2YoU2l6ZSk7CisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsLnJlbGlk LCBzaXplb2YoT2lkKSk7CisJCQkJZGF0YSArPSBzaXplb2YoT2lkKTsKKwkJCQltZW1jcHkoZGF0 YSwgJmNoYW5nZS0+ZGF0YS5kZGwuY21kdHlwZSwgc2l6ZW9mKERlcGFyc2VkQ29tbWFuZFR5cGUp KTsKKwkJCQlkYXRhICs9IHNpemVvZihpbnQpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRh dGEuZGRsLnByZWZpeCwgcHJlZml4X3NpemUpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisK KwkJCQkvKiB3cml0ZSB0aGUgbWVzc2FnZSBpbmNsdWRpbmcgdGhlIHNpemUgKi8KKwkJCQltZW1j cHkoZGF0YSwgJmNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplLCBzaXplb2YoU2l6ZSkpOwor CQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNweShkYXRhLCBjaGFuZ2UtPmRhdGEu ZGRsLm1lc3NhZ2UsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplKTsKKwkJ CQlkYXRhICs9IGNoYW5nZS0+ZGF0YS5kZGwubWVzc2FnZV9zaXplOworCiAJCQkJYnJlYWs7CiAJ CQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTjoKQEAgLTQxMTUs NiArNDIxNCwxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdl ICpjaGFuZ2UpCiAJCQkJc3ogKz0gcHJlZml4X3NpemUgKyBjaGFuZ2UtPmRhdGEubXNnLm1lc3Nh Z2Vfc2l6ZSArCiAJCQkJCXNpemVvZihTaXplKSArIHNpemVvZihTaXplKTsKIAorCQkJCWJyZWFr OworCQkJfQorCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9EREw6CisJCQl7CisJCQkJU2l6 ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbC5wcmVmaXgpICsgMTsKKwor CQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbC5tZXNzYWdlX3NpemUgKwor CQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVvZihE ZXBhcnNlZENvbW1hbmRUeXBlKTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CkBAIC00MzkyLDYgKzQ1MDAsMzMgQEAgUmVvcmRl ckJ1ZmZlclJlc3RvcmVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJCQkJICAgY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemUpOwogCQkJCWRhdGEg Kz0gY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlX3NpemU7CiAKKwkJCQlicmVhazsKKwkJCX0KKwkJ Y2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMOgorCQkJeworCQkJCVNpemUJCXByZWZpeF9z aXplOworCisJCQkJLyogcmVhZCBwcmVmaXggKi8KKwkJCQltZW1jcHkoJnByZWZpeF9zaXplLCBk YXRhLCBzaXplb2YoU2l6ZSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKFNpemUpOworCQkJCW1lbWNw eSgmY2hhbmdlLT5kYXRhLmRkbC5yZWxpZCwgZGF0YSwgc2l6ZW9mKE9pZCkpOworCQkJCWRhdGEg Kz0gc2l6ZW9mKE9pZCk7CisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEuZGRsLmNtZHR5cGUsIGRh dGEsIHNpemVvZihEZXBhcnNlZENvbW1hbmRUeXBlKSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50 KTsKKwkJCQljaGFuZ2UtPmRhdGEuZGRsLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+ Y29udGV4dCwgcHJlZml4X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eCwgZGF0YSwgcHJlZml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEuZGRsLnByZWZp eFtwcmVmaXhfc2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisK KwkJCQkvKiByZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEubXNn Lm1lc3NhZ2Vfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihT aXplKTsKKwkJCQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0QWxsb2Mo cmItPmNvbnRleHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9z aXplKTsKKwkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRhLAorCQkJCQkg ICBjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRh dGEubXNnLm1lc3NhZ2Vfc2l6ZTsKKwogCQkJCWJyZWFrOwogCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYwppbmRleCBlNmRjNWNjZDhjLi5jYTkyNTgxMTNhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9w dGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1 ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1 ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKQEAgLTE4MCw3ICsxODEsMTAgQEAKICNpbmNsdWRl ICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJz dG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2RlcGFyc2UuaCIKKyNpbmNs dWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKKyNpbmNsdWRl ICJ0Y29wL3V0aWxpdHkuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCkBAIC0yNTA3LDYgKzI1 MTEsMjM5IEBAIGFwcGx5X2hhbmRsZV90cnVuY2F0ZShTdHJpbmdJbmZvIHMpCiAJZW5kX3JlcGxp Y2F0aW9uX3N0ZXAoKTsKIH0KIAorLyoKKyAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIENSRUFURSBU QUJMRSBBUyBhbmQgU0VMRUNUIElOVE8KKyAqIHRvIG5vdCBwb3B1bGF0ZSBkYXRhIGZyb20gdGhl IHNvdXJjZSB0YWJsZSBvbiB0aGUgc3Vic2NyaWJlci4KKyAqIEFsbG93IHRoZSBkYXRhIHRvIGJl IHJlcGxpY2F0ZWQgdGhyb3VnaCBJTlNFUlRzIG9uIHRoZSBwdWJsaXNoZXIuCisgKi8KK3N0YXRp YyB2b2lkCitwcmVwcm9jZXNzX2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNv bW1hbmRUYWcJY29tbWFuZFRhZzsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5kVGFnKChO b2RlICopIGNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2FzZSBDTURU QUdfQ1JFQVRFX1RBQkxFX0FTOgorCQljYXNlIENNRFRBR19TRUxFQ1RfSU5UTzoKKwkJCXsKKwkJ CQlDcmVhdGVUYWJsZUFzU3RtdCAqY2FzdG10ID0gKENyZWF0ZVRhYmxlQXNTdG10ICopIGNvbW1h bmQtPnN0bXQ7CisKKwkJCQlpZiAoY2FzdG10LT5vYmp0eXBlID09IE9CSkVDVF9UQUJMRSkKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRhdGEgcG9wdWxhdGlvbiB0byBh dm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEgc2hvdWxkIGJlIHJlcGxpY2F0 ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQuCisJCQkJCSAqLworCQkJCQlj YXN0bXQtPmludG8tPnNraXBEYXRhID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJ Y2FzZSBDTURUQUdfU0VMRUNUOgorCQkJeworCQkJCVNlbGVjdFN0bXQgKnNzdG10ID0gKFNlbGVj dFN0bXQgKikgY29tbWFuZC0+c3RtdDsKKworCQkJCWlmIChzc3RtdC0+aW50b0NsYXVzZSAhPSBO VUxMKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICogRm9yY2Ugc2tpcHBpbmcgZGF0YSBwb3B1bGF0 aW9uIHRvIGF2b2lkIGRhdGEKKwkJCQkJICogaW5jb25zaXN0ZW5jeS4gRGF0YSBzaG91bGQgYmUg cmVwbGljYXRlZCBmcm9tIHRoZQorCQkJCQkgKiBwdWJsaXNoZXIgaW5zdGVhZC4KKwkJCQkJICov CisJCQkJCXNzdG10LT5pbnRvQ2xhdXNlLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQor CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGUg Q1JFQVRFIFRBQkxFIGNvbW1hbmQKKyAqCisgKiBDYWxsIEFkZFN1YnNjcmlwdGlvblJlbFN0YXRl IGZvciBDUkVBVEUgTEFCRUwgY29tbWFuZCB0byBzZXQgdGhlIHJlbHN0YXRlIHRvCisgKiBTVUJS RUxfU1RBVEVfUkVBRFkgc28gRE1MIGNoYW5nZXMgb24gdGhpcyBuZXcgdGFibGUgY2FuIGJlIHJl cGxpY2F0ZWQgd2l0aG91dAorICogaGF2aW5nIHRvIG1hbnVhbGx5IHJ1biAiYWx0ZXIgc3Vic2Ny aXB0aW9uIC4uLiByZWZyZXNoIHB1YmxpY2F0aW9uIgorICovCitzdGF0aWMgdm9pZAoraGFuZGxl X2NyZWF0ZV90YWJsZShSYXdTdG10ICpjb21tYW5kKQoreworCUNvbW1hbmRUYWcJY29tbWFuZFRh ZzsKKwlSYW5nZVZhciAgICpydiA9IE5VTEw7CisJT2lkCQkJcmVsaWQ7CisJT2lkCQkJcmVsbmFt ZXNwYWNlID0gSW52YWxpZE9pZDsKKwlDcmVhdGVTdG10ICpjc3RtdDsKKwljaGFyCSAgICpzY2hl bWFuYW1lID0gTlVMTDsKKwljaGFyCSAgICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcg PSBDcmVhdGVDb21tYW5kVGFnKChOb2RlICopIGNvbW1hbmQpOworCWNzdG10ID0gKENyZWF0ZVN0 bXQgKikgY29tbWFuZC0+c3RtdDsKKwlydiA9IGNzdG10LT5yZWxhdGlvbjsKKworCWlmIChjb21t YW5kVGFnID09IENNRFRBR19DUkVBVEVfVEFCTEUpCisJeworCQljc3RtdCA9IChDcmVhdGVTdG10 ICopIGNvbW1hbmQtPnN0bXQ7CisJCXJ2ID0gY3N0bXQtPnJlbGF0aW9uOworCX0KKwllbHNlCisJ eworCQlyZXR1cm47CisJfQorCisJaWYgKCFydikKKwkJcmV0dXJuOworCisJc2NoZW1hbmFtZSA9 IHJ2LT5zY2hlbWFuYW1lOworCXJlbG5hbWUgPSBydi0+cmVsbmFtZTsKKworCWlmIChzY2hlbWFu YW1lICE9IE5VTEwpCisJCXJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vfb2lkKHNjaGVtYW5h bWUsIGZhbHNlKTsKKworCWlmIChyZWxuYW1lc3BhY2UgIT0gSW52YWxpZE9pZCkKKwkJcmVsaWQg PSBnZXRfcmVsbmFtZV9yZWxpZChyZWxuYW1lLCByZWxuYW1lc3BhY2UpOworCWVsc2UKKwkJcmVs aWQgPSBSZWxuYW1lR2V0UmVsaWQocmVsbmFtZSk7CisKKwlpZiAoT2lkSXNWYWxpZChyZWxpZCkp CisJeworCQlBZGRTdWJzY3JpcHRpb25SZWxTdGF0ZShNeVN1YnNjcmlwdGlvbi0+b2lkLCByZWxp ZCwKKwkJCQkJCQkJU1VCUkVMX1NUQVRFX1JFQURZLAorCQkJCQkJCQlJbnZhbGlkWExvZ1JlY1B0 cik7CisJCWVyZXBvcnQoREVCVUcxLAorCQkJCShlcnJtc2dfaW50ZXJuYWwoInRhYmxlIFwiJXNc IiBhZGRlZCB0byBzdWJzY3JpcHRpb24gXCIlc1wiIiwKKwkJCQkJCQkJIHJlbG5hbWUsIE15U3Vi c2NyaXB0aW9uLT5uYW1lKSkpOworCX0KK30KKworLyoKKyAqIEhhbmRsZSBEREwgcmVwbGljYXRp b24gbWVzc2FnZXMuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfZGRsKFN0cmluZ0lu Zm8gcykKK3sKKwlYTG9nUmVjUHRyCWxzbjsKKwljb25zdCBjaGFyICpwcmVmaXggPSBOVUxMOwor CWNoYXIJICAgKm1lc3NhZ2UgPSBOVUxMOworCWNoYXIJICAgKmRkbF9jb21tYW5kOworCVNpemUJ CXN6OworCUxpc3QJICAgKnBhcnNldHJlZV9saXN0OworCUxpc3RDZWxsICAgKnBhcnNldHJlZV9p dGVtOworCURlc3RSZWNlaXZlciAqcmVjZWl2ZXI7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0 OworCWNvbnN0IGNoYXIgKnNhdmVfZGVidWdfcXVlcnlfc3RyaW5nID0gZGVidWdfcXVlcnlfc3Ry aW5nOworCisJbWVzc2FnZSA9IGxvZ2ljYWxyZXBfcmVhZF9kZGwocywgJmxzbiwgJnByZWZpeCwg JnN6KTsKKworCS8qIE1ha2Ugc3VyZSB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb21tYW5kICov CisJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJZGRsX2NvbW1hbmQgPSBkZXBhcnNlX2Rk bF9qc29uX3RvX3N0cmluZyhtZXNzYWdlKTsKKwlkZWJ1Z19xdWVyeV9zdHJpbmcgPSBkZGxfY29t bWFuZDsKKworCS8qIERlc3ROb25lIGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uICovCisJcmVjZWl2 ZXIgPSBDcmVhdGVEZXN0UmVjZWl2ZXIoRGVzdE5vbmUpOworCXBhcnNldHJlZV9saXN0ID0gcGdf cGFyc2VfcXVlcnkoZGRsX2NvbW1hbmQpOworCisJZm9yZWFjaChwYXJzZXRyZWVfaXRlbSwgcGFy c2V0cmVlX2xpc3QpCisJeworCQlMaXN0CSAgICpwbGFudHJlZV9saXN0OworCQlMaXN0CSAgICpx dWVyeXRyZWVfbGlzdDsKKwkJUmF3U3RtdCAgICAqY29tbWFuZCA9IChSYXdTdG10ICopIGxmaXJz dChwYXJzZXRyZWVfaXRlbSk7CisJCUNvbW1hbmRUYWcJY29tbWFuZFRhZzsKKwkJTWVtb3J5Q29u dGV4dCBwZXJfcGFyc2V0cmVlX2NvbnRleHQgPSBOVUxMOworCQlQb3J0YWwJCXBvcnRhbDsKKwkJ Ym9vbAkJc25hcHNob3Rfc2V0ID0gZmFsc2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1h bmRUYWcoKE5vZGUgKikgY29tbWFuZCk7CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25h bCBpbiBwYXJzaW5nIG9yIHByaW9yIGNvbW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKKworCQkvKiBSZW1vdmUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQg Ki8KKwkJcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0 IHVwIGEgc25hcHNob3QgaWYgcGFyc2UgYW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4K KwkJICovCisJCWlmIChhbmFseXplX3JlcXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJ CQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBz aG90X3NldCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFj aCBwYXJzZXRyZWUgaW4gYSBzaG9ydC1saXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUg bWVtb3J5IHVzZWQgd2hlbiB0aGVyZSBhcmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgor CQkgKi8KKwkJcGVyX3BhcnNldHJlZV9jb250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0 ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBl ci1zdGF0ZW1lbnQgY29udGV4dCIsCisJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7 CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250 ZXh0KTsKKworCQlxdWVyeXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRw YXJhbXMoY29tbWFuZCwKKwkJCQkJCQkJCQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJ CQkJTlVMTCwgMCwgTlVMTCk7CisKKwkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhx dWVyeXRyZWVfbGlzdCwgZGRsX2NvbW1hbmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0 aGUgc25hcHNob3QgdXNlZCBmb3IgcGFyc2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rf c2V0KQorCQkJUG9wQWN0aXZlU25hcHNob3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwo ImxvZ2ljYWwgcmVwbGljYXRpb24iLCB0cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24n dCBoYXZlIHRvIGNvcHkgYW55dGhpbmcgaW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhp bmcKKwkJICogd2UgYXJlIHBhc3NpbmcgaGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9y IHRoZQorCQkgKiBwZXJfcGFyc2V0cmVlX2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhl IHBvcnRhbCBhbnl3YXkuCisJCSAqLworCQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJ CQkgIE5VTEwsCisJCQkJCQkgIGRkbF9jb21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJ CQkJICBwbGFudHJlZV9saXN0LAorCQkJCQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0 aGUgcG9ydGFsLiAgTm8gcGFyYW1ldGVycyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9y dGFsLCBOVUxMLCAwLCBJbnZhbGlkU25hcHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNr IHRvIHRyYW5zYWN0aW9uIGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwK KwkJCQkJCSBGRVRDSF9BTEwsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJl Y2VpdmVyLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3Ao cG9ydGFsLCBmYWxzZSk7CisKKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgor CQkgKiBUYWJsZSBjcmVhdGVkIGJ5IERETCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlz IGF1dG9tYXRpY2FsbHkKKwkJICogYWRkZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkg Ki8KKwkJaGFuZGxlX2NyZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRy b3AgdGhlIHBlci1wYXJzZXRyZWUgY29udGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlN ZW1vcnlDb250ZXh0RGVsZXRlKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdf cXVlcnlfc3RyaW5nID0gc2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9u X3N0ZXAoKTsKK30KKwogLyoKICAqIExvZ2ljYWwgcmVwbGljYXRpb24gcHJvdG9jb2wgbWVzc2Fn ZSBkaXNwYXRjaGVyLgogICovCkBAIC0yNTcxLDYgKzI4MDgsMTAgQEAgYXBwbHlfZGlzcGF0Y2go U3RyaW5nSW5mbyBzKQogCQkJICovCiAJCQlicmVhazsKIAorCQljYXNlIExPR0lDQUxfUkVQX01T R19EREw6CisJCQlhcHBseV9oYW5kbGVfZGRsKHMpOworCQkJYnJlYWs7CisKIAkJY2FzZSBMT0dJ Q0FMX1JFUF9NU0dfU1RSRUFNX1NUQVJUOgogCQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChz KTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRw dXQvcGdvdXRwdXQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMKaW5kZXggY2E0NmZiYTNhZi4uOGU5ZGExMWI0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC01Myw2ICs1MywxMSBAQCBzdGF0aWMgdm9pZCBw Z291dHB1dF9tZXNzYWdlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLCBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAogCQkJCQkJCSBib29s IHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKIAkJCQkJCQkgU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSk7CitzdGF0aWMgdm9pZCBwZ291dHB1dF9kZGwoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQlSZW9yZGVyQnVmZmVyVFhOICp0eG4sIFhMb2dSZWNQ dHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLAor CQkJCQkJCQlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCVNpemUgc3osIGNv bnN0IGNoYXIgKm1lc3NhZ2UpOwogc3RhdGljIGJvb2wgcGdvdXRwdXRfb3JpZ2luX2ZpbHRlcihM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJCSAgIFJlcE9yaWdpbklkIG9yaWdp bl9pZCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bihMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCkBAIC0yNTYsNiArMjYxLDcgQEAgX1BHX291dHB1dF9wbHVnaW5f aW5pdChPdXRwdXRQbHVnaW5DYWxsYmFja3MgKmNiKQogCWNiLT5jaGFuZ2VfY2IgPSBwZ291dHB1 dF9jaGFuZ2U7CiAJY2ItPnRydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJY2ItPm1l c3NhZ2VfY2IgPSBwZ291dHB1dF9tZXNzYWdlOworCWNiLT5kZGxfY2IgPSBwZ291dHB1dF9kZGw7 CiAJY2ItPmNvbW1pdF9jYiA9IHBnb3V0cHV0X2NvbW1pdF90eG47CiAKIAljYi0+YmVnaW5fcHJl cGFyZV9jYiA9IHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuOwpAQCAtMjcyLDYgKzI3OCw3IEBA IF9QR19vdXRwdXRfcGx1Z2luX2luaXQoT3V0cHV0UGx1Z2luQ2FsbGJhY2tzICpjYikKIAljYi0+ c3RyZWFtX2NvbW1pdF9jYiA9IHBnb3V0cHV0X3N0cmVhbV9jb21taXQ7CiAJY2ItPnN0cmVhbV9j aGFuZ2VfY2IgPSBwZ291dHB1dF9jaGFuZ2U7CiAJY2ItPnN0cmVhbV9tZXNzYWdlX2NiID0gcGdv dXRwdXRfbWVzc2FnZTsKKwljYi0+c3RyZWFtX2RkbF9jYiA9IHBnb3V0cHV0X2RkbDsKIAljYi0+ c3RyZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7CiAJLyogdHJhbnNhY3Rpb24g c3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwogCWNiLT5zdHJlYW1fcHJlcGFyZV9jYiA9 IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTQyNiw2ICs0MzMsNyBAQCBwZ291dHB1 dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9u cyAqb3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkgcHJvdG9jb2wuICovCiAJb3B0 LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklOQVJZX09VVFBVVDsKKwlvcHQtPnJlY2Vp dmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlzIHJlcGxpY2F0aW9uIHN0YXJ0 IGFuZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ5OSw2ICs1MDcsNyBAQCBwZ291dHB1 dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgT3V0cHV0UGx1Z2luT3B0aW9u cyAqb3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24gc3RhdGUuICovCiAJCWRhdGEtPnB1Ymxp Y2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMgPSBOSUw7CiAJCXB1YmxpY2F0 aW9uc192YWxpZCA9IGZhbHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lzY2FjaGVDYWxsYmFjayhQVUJM SUNBVElPTk9JRCwKIAkJCQkJCQkJCSAgcHVibGljYXRpb25faW52YWxpZGF0aW9uX2NiLApAQCAt MTM3Nyw5ICsxMzg2LDIyIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZSBh Y3Rpb24gPSBjaGFuZ2UtPmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Nsb3QgPSBOVUxM OwogCVR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCA9IE5VTEw7CisJYm9vbAkJdGFibGVfcmV3cml0 ZSA9IGZhbHNlOwogCiAJdXBkYXRlX3JlcGxpY2F0aW9uX3Byb2dyZXNzKGN0eCwgZmFsc2UpOwog CisJLyoKKwkgKiBGb3IgaGVhcCByZXdyaXRlcywgd2UgbWlnaHQgbmVlZCB0byByZXBsaWNhdGUg dGhlbSBpZiB0aGUgcmV3cml0dGVuCisJICogdGFibGUgcHVibGlzaGVzIHJld3JpdGUgZGRsIG1l c3NhZ2UuIFNvIGdldCB0aGUgYWN0dWFsIHJlbGF0aW9uIGhlcmUKKwkgKiBhbmQgY2hlY2sgdGhl IHB1YmFjdGlvbiBsYXRlci4KKwkgKi8KKwlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0 ZSkKKwl7CisJCXRhYmxlX3Jld3JpdGUgPSB0cnVlOworCQlyZWxhdGlvbiA9IFJlbGF0aW9uSWRH ZXRSZWxhdGlvbihyZWxhdGlvbi0+cmRfcmVsLT5yZWxyZXdyaXRlKTsKKwkJdGFyZ2V0cmVsID0g cmVsYXRpb247CisJfQorCiAJaWYgKCFpc19wdWJsaXNoYWJsZV9yZWxhdGlvbihyZWxhdGlvbikp CiAJCXJldHVybjsKIApAQCAtMTQxMyw2ICsxNDM1LDEzIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCUFzc2Vy dChmYWxzZSk7CiAJfQogCisJLyoKKwkgKiBXZSBkb24ndCBwdWJsaXNoIHRhYmxlIHJld3JpdGUg Y2hhbmdlIHVubGVzcyB3ZSBwdWJsaXNoIHRoZSByZXdyaXRlIGRkbAorCSAqIG1lc3NhZ2UuCisJ ICovCisJaWYgKHRhYmxlX3Jld3JpdGUgJiYgIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCkK KwkJcmV0dXJuOworCiAJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgYnkgdXNpbmcgYW5kIHJlc2V0 dGluZyBvdXIgb3duIGNvbnRleHQgKi8KIAlvbGQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZGF0 YS0+Y29udGV4dCk7CiAKQEAgLTE0NDIsOCArMTQ3MSw4IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCX0KIAog CQkJLyogQ2hlY2sgcm93IGZpbHRlciAqLwotCQkJaWYgKCFwZ291dHB1dF9yb3dfZmlsdGVyKHRh cmdldHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwKLQkJCQkJCQkJCSAmYWN0aW9uKSkK KwkJCWlmICghdGFibGVfcmV3cml0ZSAmJgorCQkJCSFwZ291dHB1dF9yb3dfZmlsdGVyKHRhcmdl dHJlbCwgTlVMTCwgJm5ld19zbG90LCByZWxlbnRyeSwgJmFjdGlvbikpCiAJCQkJYnJlYWs7CiAK IAkJCS8qCkBAIC0xNDYzLDggKzE0OTIsMTkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJbWF5YmVfc2VuZF9z Y2hlbWEoY3R4LCBjaGFuZ2UsIHJlbGF0aW9uLCByZWxlbnRyeSk7CiAKIAkJCU91dHB1dFBsdWdp blByZXBhcmVXcml0ZShjdHgsIHRydWUpOwotCQkJbG9naWNhbHJlcF93cml0ZV9pbnNlcnQoY3R4 LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEtPmJpbmFyeSwg cmVsZW50cnktPmNvbHVtbnMpOworCisJCQkvKgorCQkJICogQ29udmVydCB0aGUgcmV3cml0ZSBp bnNlcnRzIHRvIHVwZGF0ZXMgc28gdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkJICogY2FuIHJlcGxh eSBpdC4gVGhpcyBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIGJldHdlZW4KKwkJCSAq IHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBpcyBjb25zaXN0ZW50LgorCQkJICovCisJCQlpZiAo dGFibGVfcmV3cml0ZSkKKwkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlk LCB0YXJnZXRyZWwsCisJCQkJCQkJCQkJTlVMTCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSwKKwkJ CQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1ucyk7CisJCQllbHNlCisJCQkJbG9naWNhbHJlcF93cml0 ZV9pbnNlcnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKKwkJCQkJCQkJCQlk YXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCU91dHB1dFBsdWdpbldyaXRlKGN0 eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRF OgpAQCAtMTU5Niw2ICsxNjM2LDkgQEAgcGdvdXRwdXRfY2hhbmdlKExvZ2ljYWxEZWNvZGluZ0Nv bnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQlhbmNlc3RvciA9IE5VTEw7CiAJ fQogCisJaWYgKHRhYmxlX3Jld3JpdGUpCisJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCiAJ LyogQ2xlYW51cCAqLwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGQpOwogCU1lbW9yeUNvbnRl eHRSZXNldChkYXRhLT5jb250ZXh0KTsKQEAgLTE3MTQsNiArMTc1NywxMzggQEAgcGdvdXRwdXRf bWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAlPdXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogfQogCisvKgorICogU2VuZCB0aGUg ZGVjb2RlZCBEREwgb3ZlciB3aXJlLgorICovCitzdGF0aWMgdm9pZAorcGdvdXRwdXRfZGRsKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQlY TG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAorCQkJCQljb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxp ZCwgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQlTaXplIHN6LCBjb25zdCBjaGFy ICptZXNzYWdlKQoreworCVBHT3V0cHV0RGF0YSAqZGF0YSA9IChQR091dHB1dERhdGEgKikgY3R4 LT5vdXRwdXRfcGx1Z2luX3ByaXZhdGU7CisJUEdPdXRwdXRUeG5EYXRhICp0eG5kYXRhID0gKFBH T3V0cHV0VHhuRGF0YSAqKSB0eG4tPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlSZWxhdGlvbgly ZWxhdGlvbiA9IE5VTEw7CisJUmVsYXRpb25TeW5jRW50cnkgKnJlbGVudHJ5OworCisJc3dpdGNo IChjbWR0eXBlKQorCXsKKwkJY2FzZSBEQ1RfVGFibGVEcm9wU3RhcnQ6CisKKwkJCS8qCisJCQkg KiBPbiBEUk9QIHN0YXJ0LCBhZGQgdGhlIHJlbGlkIHRvIGEgZGVsZXRlZF9yZWxpZCBsaXN0IGlm IHRoZQorCQkJICogcmVsaWQgaXMgcGFydCBvZiBhIHB1YmxpY2F0aW9uIHRoYXQgc3VwcG9ydHMg ZGRsIHB1YmxpY2F0aW9uLgorCQkJICogV2UgbmVlZCB0aGlzIGJlY2F1c2Ugb24gRFJPUCBlbmQs IHRoZSByZWxpZCB3aWxsIG5vIGxvbmdlciBiZQorCQkJICogdmFsaWQuIExhdGVyIG9uIERyb3Ag ZW5kLCB2ZXJpZnkgdGhhdCB0aGUgZHJvcCBpcyBmb3IgYSByZWxpZAorCQkJICogdGhhdCBpcyBv biB0aGUgZGVsZXRlZF9yaWQgbGlzdCwgYW5kIG9ubHkgdGhlbiBzZW5kIHRoZSBkZGwKKwkJCSAq IG1lc3NhZ2UuCisJCQkgKi8KKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJl bGlkKTsKKworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5j X2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKHJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRkbCkKKwkJCQlkYXRhLT5kZWxldGVkX3JlbGlkcyA9IGxhcHBlbmRfb2lkKGRhdGEtPmRlbGV0 ZWRfcmVsaWRzLCByZWxpZCk7CisKKwkJCVJlbGF0aW9uQ2xvc2UocmVsYXRpb24pOworCQkJcmV0 dXJuOworCisJCWNhc2UgRENUX1RhYmxlRHJvcEVuZDoKKwkJCWlmICghbGlzdF9tZW1iZXJfb2lk KGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCkpCisJCQkJcmV0dXJuOworCQkJZWxzZQorCQkJ CWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0gbGlzdF9kZWxldGVfb2lkKGRhdGEtPmRlbGV0ZWRfcmVs aWRzLCByZWxpZCk7CisJCQlicmVhazsKKworCQljYXNlIERDVF9UYWJsZUFsdGVyOgorCisJCQkv KgorCQkJICogRm9yIHRhYmxlIHJld3JpdGUgZGRsLCB3ZSBmaXJzdCBzZW5kIHRoZSBvcmlnaW5h bCBkZGwgbWVzc2FnZQorCQkJICogdG8gc3Vic2NyaWJlciwgdGhlbiBjb252ZXJ0IHRoZSB1cGNv bWluZyByZXdyaXRlIElOU0VSVCB0bworCQkJICogVVBEQVRFIGFuZCBzZW5kIHRoZW0gdG8gc3Vi c2NyaWJlciBzbyB0aGF0IHRoZSBkYXRhIGJldHdlZW4KKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vi c2NyaWJlciBjYW4gYWx3YXlzIGJlIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJICogV2UgZG8gdGhp cyB3YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgorCQkJICoKKwkJCSAqICgxKSBUaGUgZGF0YSBi ZWZvcmUgdGhlIHJld3JpdGUgZGRsIGNvdWxkIGFscmVhZHkgYmUgZGlmZmVyZW50CisJCQkgKiBh bW9uZyBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0 YSBpbgorCQkJICogc3Vic2NyaWJlciB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHB1Ymxpc2hlciBh bHNvIGdldCByZXdyaXR0ZW4sCisJCQkgKiB3ZSBuZWVkIHRvIGxldCB0aGUgc3Vic2NyaWJlciBl eGVjdXRlIHRoZSBvcmlnaW5hbCByZXdyaXRlIGRkbAorCQkJICogdG8gcmV3cml0ZSBhbGwgdGhl IGRhdGEgYXQgZmlyc3QuCisJCQkgKgorCQkJICogKDIpIHRoZSBkYXRhIGFmdGVyIGV4ZWN1dGlu ZyByZXdyaXRlIGRkbCBjb3VsZCBiZSBkaWZmZXJlbnQKKwkJCSAqIGFtb25nIHB1Ymxpc2hlciBh bmQgc3Vic2NyaWJlcihkdWUgdG8gZGlmZmVyZW50CisJCQkgKiBmdW5jdGlvbnMvb3BlcmF0b3Jz IHVzZWQgZHVyaW5nIHJld3JpdGUpLCBzbyB3ZSBuZWVkIHRvCisJCQkgKiByZXBsaWNhdGUgdGhl IHJld3JpdGUgVVBEQVRFcyB0byBrZWVwIHRoZSBkYXRhIGNvbnNpc3RlbnQuCisJCQkgKgorCQkJ ICogVE8gSU1QUk9WRTogV2UgY291bGQgaW1wcm92ZSB0aGlzIGJ5IGxldHRpbmcgdGhlIHN1YnNj cmliZXIKKwkJCSAqIG9ubHkgcmV3cml0ZSB0aGUgZXh0cmEgZGF0YSBpbnN0ZWFkIG9mIGRvaW5n IGZ1bGx5IHJld3JpdGUgYW5kCisJCQkgKiB1c2UgdGhlIHVwY29taW5nIHJld3JpdGUgVVBEQVRF cyB0byByZXdyaXRlIHRoZSByZXN0IGRhdGEuCisJCQkgKiBCZXNpZGVzLCB3ZSBtYXkgbm90IG5l ZWQgdG8gc2VuZCByZXdyaXRlIGNoYW5nZXMgZm9yIGFsbCB0eXBlCisJCQkgKiBvZiByZXdyaXRl IGRkbCwgZm9yIGV4YW1wbGUsIGl0IHNlZW1zIGZpbmUgdG8gc2tpcCBzZW5kaW5nCisJCQkgKiBy ZXdyaXRlIGNoYW5nZXMgZm9yIEFMVEVSIFRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4g dGhlCisJCQkgKiB0YWJsZSBkb2Vzbid0IGFjdHVhbGx5IGJlIGNoYW5nZWQuCisJCQkgKi8KKwkJ CXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKwkJCUFzc2VydChyZWxh dGlvbik7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9u KTsKKworCQkJLyoKKwkJCSAqIFNraXAgc2VuZGluZyB0aGlzIGRkbCBpZiB3ZSBkb24ndCBwdWJs aXNoIGRkbCBtZXNzYWdlIG9yIHRoZQorCQkJICogZGRsIG5lZWQgdG8gYmUgcHVibGlzaGVkIHZp YSBpdHMgcm9vdCByZWxhdGlvbi4KKwkJCSAqLworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwgfHwKKwkJCQlyZWxlbnRyeS0+cHVibGlzaF9hc19yZWxpZCAhPSByZWxpZCkKKwkJ CXsKKwkJCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJ CWJyZWFrOworCisJCWNhc2UgRENUX1NpbXBsZUNtZDoKKwkJCXJlbGF0aW9uID0gUmVsYXRpb25J ZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJaWYgKHJlbGF0aW9uID09IE5VTEwpCisJCQkJYnJl YWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9zeW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsK KworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwpCisJCQl7CisJCQkJUmVsYXRp b25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlicmVhazsKKworCQlj YXNlIERDVF9PYmplY3REcm9wOgorCQkJLyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CisKKwkJ ZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnN1cHBvcnRlZCB0eXBlICVkIiwgY21kdHlwZSk7 CisJCQlicmVhazsKKwl9CisKKwkvKiBTZW5kIEJFR0lOIGlmIHdlIGhhdmVuJ3QgeWV0ICovCisJ aWYgKHR4bmRhdGEgJiYgIXR4bmRhdGEtPnNlbnRfYmVnaW5fdHhuKQorCQlwZ291dHB1dF9zZW5k X2JlZ2luKGN0eCwgdHhuKTsKKworCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUp OworCWxvZ2ljYWxyZXBfd3JpdGVfZGRsKGN0eC0+b3V0LAorCQkJCQkJCQltZXNzYWdlX2xzbiwK KwkJCQkJCQkJcHJlZml4LAorCQkJCQkJCQlzeiwKKwkJCQkJCQkJbWVzc2FnZSk7CisJT3V0cHV0 UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKKworCWlmIChyZWxhdGlvbikKKwkJUmVsYXRpb25DbG9z ZShyZWxhdGlvbik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZGF0YSBpcyBhc3Nv Y2lhdGVkIHdpdGggYW4gb3JpZ2luIGFuZCB0aGUgdXNlciBoYXMKICAqIHJlcXVlc3RlZCB0aGUg Y2hhbmdlcyB0aGF0IGRvbid0IGhhdmUgYW4gb3JpZ2luLCBmYWxzZSBvdGhlcndpc2UuCkBAIC0x OTk1LDcgKzIxNzAsOCBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBS ZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnktPnNjaGVtYV9zZW50ID0gZmFsc2U7CiAJCWVudHJ5 LT5zdHJlYW1lZF90eG5zID0gTklMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBl bnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPQotCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVs ZXRlID0gZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgPSBmYWxzZTsKKwkJCWVudHJ5LT5w dWJhY3Rpb25zLnB1YmRlbGV0ZSA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0KKwkJ CWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCQllbnRyeS0+bmV3X3Nsb3QgPSBO VUxMOwogCQllbnRyeS0+b2xkX3Nsb3QgPSBOVUxMOwogCQltZW1zZXQoZW50cnktPmV4cHJzdGF0 ZSwgMCwgc2l6ZW9mKGVudHJ5LT5leHByc3RhdGUpKTsKQEAgLTIwNTMsNiArMjIyOSw3IEBAIGdl dF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQog CQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlv bnMucHViZGVsZXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0g ZmFsc2U7CisJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCA9IGZhbHNlOwogCiAJCS8qCiAJCSAq IFR1cGxlIHNsb3RzIGNsZWFudXBzLiAoV2lsbCBiZSByZWJ1aWx0IGxhdGVyIGlmIG5lZWRlZCku CkBAIC0yMTY2LDYgKzIzNDMsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpk YXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg fD0gcHViLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJk ZWxldGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZTsKIAkJCQllbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSB8PSBwdWItPnB1YmFjdGlvbnMucHVidHJ1bmNhdGU7CisJCQkJZW50cnkt PnB1YmFjdGlvbnMucHViZGRsIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZGw7CiAKIAkJCQkvKgog CQkJCSAqIFdlIHdhbnQgdG8gcHVibGlzaCB0aGUgY2hhbmdlcyBhcyB0aGUgdG9wLW1vc3QgYW5j ZXN0b3IKQEAgLTIzNTEsNiArMjUyOSw3IEBAIHJlbF9zeW5jX2NhY2hlX3B1YmxpY2F0aW9uX2Ni KERhdHVtIGFyZywgaW50IGNhY2hlaWQsIHVpbnQzMiBoYXNodmFsdWUpCiAJewogCQllbnRyeS0+ cmVwbGljYXRlX3ZhbGlkID0gZmFsc2U7CiAJfQorCiB9CiAKIC8qIFNlbmQgUmVwbGljYXRpb24g b3JpZ2luICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRleCA0NTBlNTEyNGE1Li4y ZjlkZDE5Yzg1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKQEAgLTU2OTAsNiArNTY5 MCw3IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1 YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAkJcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ1cGRhdGUg fD0gcHViZm9ybS0+cHVidXBkYXRlOwogCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSB8 PSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUg fD0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGRsIHw9 IHB1YmZvcm0tPnB1YmRkbDsKIAogCQkvKgogCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyByZWZl cmVuY2VkIGluIHRoZSBmaWx0ZXIgZXhwcmVzc2lvbiBhcmUgcGFydApkaWZmIC0tZ2l0IGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXgg NDRkOTU3YzAzOC4uZWRiNGExYmE4MiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1 bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC0zOTQ5LDYgKzM5NDksNyBA QCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJ aW50CQkJaV9wdWJ1cGRhdGU7CiAJaW50CQkJaV9wdWJkZWxldGU7CiAJaW50CQkJaV9wdWJ0cnVu Y2F0ZTsKKwlpbnQJCQlpX3B1YmRkbDsKIAlpbnQJCQlpX3B1YnZpYXJvb3Q7CiAJaW50CQkJaSwK IAkJCQludHVwczsKQEAgLTM5NjQsMjMgKzM5NjUsMjMgQEAgZ2V0UHVibGljYXRpb25zKEFyY2hp dmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkp OwogCiAJLyogR2V0IHRoZSBwdWJsaWNhdGlvbnMuICovCi0JaWYgKGZvdXQtPnJlbW90ZVZlcnNp b24gPj0gMTMwMDAwKQorCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE2MDAwMCkKIAkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5v aWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJh bGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1 bmNhdGUsIHAucHVidmlhcm9vdCAiCisJCQkJCQkJICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNl cnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJkZGwsIHAu cHVidmlhcm9vdCAiCiAJCQkJCQkJICJGUk9NIHBnX3B1YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlm IChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIo cXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgog CQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5z ZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIEFTIHB1 YnZpYXJvb3QgIgorCQkJCQkJCSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZhbHNlIGFzIHAucHViZGRsLCBmYWxz ZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCQkgIkZST00gcGdfcHVibGljYXRpb24gcCIpOwogCWVs c2UKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCiAJCQkJCQkJICJTRUxFQ1QgcC50YWJs ZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJCSAicC5wdWJvd25lciwgIgotCQkJCQkJ CSAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUs IGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKKwkJCQkJCQkgInAu cHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBmYWxz ZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgQVMgcC5wdWJkZGwsIGZhbHNlIEFTIHB1YnZpYXJvb3Qg IgogCQkJCQkJCSAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAKIAlyZXMgPSBFeGVjdXRlU3Fs UXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CkBAIC0zOTk2LDYgKzM5 OTcsNyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlv bnMpCiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVidXBkYXRlIik7CiAJaV9wdWJk ZWxldGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJaV9wdWJ0cnVuY2F0ZSA9IFBR Zm51bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRsID0gUFFmbnVtYmVyKHJlcywg InB1YmRkbCIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihyZXMsICJwdWJ2aWFyb290Iik7 CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9mKFB1YmxpY2F0aW9uSW5mbykp OwpAQCAtNDAxOSw2ICs0MDIxLDggQEAgZ2V0UHVibGljYXRpb25zKEFyY2hpdmUgKmZvdXQsIGlu dCAqbnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9wdWJk ZWxldGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRydW5jYXRlID0KIAkJCShzdHJj bXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAidCIpID09IDApOworCQlwdWJp bmZvW2ldLnB1YmRkbCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YmRkbCks ICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9CiAJCQkoc3RyY21wKFBRZ2V0 dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDApOwogCkBAIC00MDk4LDYgKzQx MDIsMTUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFB1YmxpY2F0aW9u SW5mbyAqcHViaW5mbykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAKKwlpZiAocHViaW5mby0+cHVi ZGRsKQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAi LCAiKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgImRkbCIpOworCQlmaXJzdCA9 IGZhbHNlOworCX0KKwogCWFwcGVuZFBRRXhwQnVmZmVyQ2hhcihxdWVyeSwgJ1wnJyk7CiAKIAlp ZiAocHViaW5mby0+cHVidmlhcm9vdCkKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmggYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCmluZGV4IDQzNmFjNWJiOTguLmNkNTBl YzhjZjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKysrIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjE5LDYgKzYxOSw3IEBAIHR5cGVkZWYgc3RydWN0IF9Q dWJsaWNhdGlvbkluZm8KIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJv b2wJCXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIAlib29sCQlwdWJ2aWFyb290OwogfSBQ dWJsaWNhdGlvbkluZm87CiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVz Yy5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKaW5kZXggNmI4YzE3YmI0Yy4uNzky ZjQzODk1OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKKysrIGIv c3JjL2Jpbi9wZ193YWxkdW1wL3JtZ3JkZXNjLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl ICJjb21tYW5kcy9zZXF1ZW5jZS5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlc3BhY2UuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdlLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24v ZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUg InJtZ3JkZXNjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zdGFuZGJ5ZGVmcy5oIgpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRl eCBkZjE2NjM2NWU4Li4yNGNlMWE3OWZlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3Jp YmUuYworKysgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtNjE2NCw3ICs2MTY0LDcgQEAg bGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0ZXJuKQogCVBRRXhwQnVmZmVyRGF0YSBi dWY7CiAJUEdyZXN1bHQgICAqcmVzOwogCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7 Ci0Jc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2V9OworCXN0YXRpYyBjb25z dCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CiAKIAlpZiAocHNldC5zdmVyc2lv biA8IDEwMDAwMCkKIAl7CkBAIC02MTk5LDYgKzYxOTksMTAgQEAgbGlzdFB1YmxpY2F0aW9ucyhj b25zdCBjaGFyICpwYXR0ZXJuKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJICAi LFxuICBwdWJ2aWFyb290IEFTIFwiJXNcIiIsCiAJCQkJCQkgIGdldHRleHRfbm9vcCgiVmlhIHJv b3QiKSk7CisJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTYwMDAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZl cigmYnVmLAorCQkJCQkJICAiLFxuICBwdWJkZGwgQVMgXCIlc1wiIiwKKwkJCQkJCSAgZ2V0dGV4 dF9ub29wKCJERExzIikpOwogCiAJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCSAi XG5GUk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25cbiIpOwpAQCAtNjI4OSw2ICs2MjkzLDcg QEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAlQR3Jlc3VsdCAg ICpyZXM7CiAJYm9vbAkJaGFzX3B1YnRydW5jYXRlOwogCWJvb2wJCWhhc19wdWJ2aWFyb290Owor CWJvb2wJCWhhc19wdWJkZGw7CiAKIAlQUUV4cEJ1ZmZlckRhdGEgdGl0bGU7CiAJcHJpbnRUYWJs ZUNvbnRlbnQgY29udDsKQEAgLTYzMDUsNiArNjMxMCw3IEBAIGRlc2NyaWJlUHVibGljYXRpb25z KGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAKIAloYXNfcHVidHJ1bmNhdGUgPSAocHNldC5zdmVyc2lv biA+PSAxMTAwMDApOwogCWhhc19wdWJ2aWFyb290ID0gKHBzZXQuc3ZlcnNpb24gPj0gMTMwMDAw KTsKKwloYXNfcHViZGRsID0gIChwc2V0LnN2ZXJzaW9uID49IDE2MDAwMCk7CiAKIAlpbml0UFFF eHBCdWZmZXIoJmJ1Zik7CiAKQEAgLTYzMTgsNiArNjMyNCw5IEBAIGRlc2NyaWJlUHVibGljYXRp b25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJaWYgKGhhc19wdWJ2aWFyb290KQogCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmYnVmLAogCQkJCQkJCSAiLCBwdWJ2aWFyb290Iik7CisJaWYgKGhhc19w dWJkZGwpCisJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJCQkJICIsIHB1YmRkbCIp OwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9n LnBnX3B1YmxpY2F0aW9uXG4iKTsKIApAQCAtNjM2OSw2ICs2Mzc4LDggQEAgZGVzY3JpYmVQdWJs aWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCW5jb2xzKys7CiAJCWlmIChoYXNfcHVi dmlhcm9vdCkKIAkJCW5jb2xzKys7CisJCWlmIChoYXNfcHViZGRsKQorCQkJbmNvbHMrKzsKIAog CQlpbml0UFFFeHBCdWZmZXIoJnRpdGxlKTsKIAkJcHJpbnRmUFFFeHBCdWZmZXIoJnRpdGxlLCBf KCJQdWJsaWNhdGlvbiAlcyIpLCBwdWJuYW1lKTsKQEAgLTYzODMsNiArNjM5NCw4IEBAIGRlc2Ny aWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkSGVh ZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlRydW5jYXRlcyIpLCB0cnVlLCBhbGlnbik7CiAJCWlm IChoYXNfcHVidmlhcm9vdCkKIAkJCXByaW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRf bm9vcCgiVmlhIHJvb3QiKSwgdHJ1ZSwgYWxpZ24pOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXBy aW50VGFibGVBZGRIZWFkZXIoJmNvbnQsIGdldHRleHRfbm9vcCgiRERMcyIpLCB0cnVlLCBhbGln bik7CiAKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCAyKSwg ZmFsc2UsIGZhbHNlKTsKIAkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVz LCBpLCAzKSwgZmFsc2UsIGZhbHNlKTsKQEAgLTYzOTMsNiArNjQwNiw4IEBAIGRlc2NyaWJlUHVi bGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29u dCwgUFFnZXR2YWx1ZShyZXMsIGksIDcpLCBmYWxzZSwgZmFsc2UpOwogCQlpZiAoaGFzX3B1YnZp YXJvb3QpCiAJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIDgp LCBmYWxzZSwgZmFsc2UpOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCXByaW50VGFibGVBZGRDZWxs KCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgOSksIGZhbHNlLCBmYWxzZSk7CiAKIAkJaWYgKCFw dWJhbGx0YWJsZXMpCiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlz dC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKaW5kZXggMDAwYmNiZmRhZi4uMjJi YzA1YWY1MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKKysrIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3JtZ3JsaXN0LmgKQEAgLTQ3LDMgKzQ3LDQgQEAgUEdfUk1HUihS TV9DT01NSVRfVFNfSUQsICJDb21taXRUcyIsIGNvbW1pdF90c19yZWRvLCBjb21taXRfdHNfZGVz YywgY29tbWl0X3RzX2kKIFBHX1JNR1IoUk1fUkVQTE9SSUdJTl9JRCwgIlJlcGxpY2F0aW9uT3Jp Z2luIiwgcmVwbG9yaWdpbl9yZWRvLCByZXBsb3JpZ2luX2Rlc2MsIHJlcGxvcmlnaW5faWRlbnRp ZnksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCiBQR19STUdSKFJNX0dFTkVSSUNfSUQsICJHZW5l cmljIiwgZ2VuZXJpY19yZWRvLCBnZW5lcmljX2Rlc2MsIGdlbmVyaWNfaWRlbnRpZnksIE5VTEws IE5VTEwsIGdlbmVyaWNfbWFzaywgTlVMTCkKIFBHX1JNR1IoUk1fTE9HSUNBTE1TR19JRCwgIkxv Z2ljYWxNZXNzYWdlIiwgbG9naWNhbG1zZ19yZWRvLCBsb2dpY2FsbXNnX2Rlc2MsIGxvZ2ljYWxt c2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxtc2dfZGVjb2RlKQorUEdfUk1H UihSTV9MT0dJQ0FMRERMTVNHX0lELCAiTG9naWNhbERETE1lc3NhZ2UiLCBsb2dpY2FsZGRsbXNn X3JlZG8sIGxvZ2ljYWxkZGxtc2dfZGVzYywgbG9naWNhbGRkbG1zZ19pZGVudGlmeSwgTlVMTCwg TlVMTCwgTlVMTCwgbG9naWNhbGRkbF9kZWNvZGUpCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRl eCAxMTZhYzJiOGYxLi4xMTQ5ODUxNDdiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTEx ODY4LDQgKzExODY4LDEzIEBACiB7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdleHBhbmQgSlNP TiBmb3JtYXQgRERMIHRvIGEgcGxhaW4gRERMIGNvbW1hbmQnLAogICBwcm9uYW1lID0+ICdkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0 eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0s Cit7IG9pZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBh cnNlIGVuZCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRf ZW5kJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcn LCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfZW5kJyB9LAoreyBv aWQgPT4gJzQ2NDUnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSBz dGFydCcsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfZGRsX2NvbW1hbmRfc3Rh cnQnLCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycs IHByb3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcgfSwKK3sg b2lkID0+ICc0NjQ2JywgZGVzY3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2Ug dGFibGUgcmV3cml0ZScsCisgIHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVf cmV3cml0ZScsIHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9 PiAnJywgcHJvc3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCiBd CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggZWNmNWEyOGUwMC4uY2M5NTA0 MzZhMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtNTQsNiArNTQsOSBA QCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uLDYxMDQsUHVibGljYXRpb25SZWxhdGlvbklkKQogCiAJ LyogdHJ1ZSBpZiBwYXJ0aXRpb24gY2hhbmdlcyBhcmUgcHVibGlzaGVkIHVzaW5nIHJvb3Qgc2No ZW1hICovCiAJYm9vbAkJcHVidmlhcm9vdDsKKworCS8qIHRydWUgaWYgZGRscyBhcmUgcHVibGlz aGVkICovCisJYm9vbAkJcHViZGRsOwogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbjsKIAogLyog LS0tLS0tLS0tLS0tLS0tLQpAQCAtNzIsNiArNzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNh dGlvbkFjdGlvbnMKIAlib29sCQlwdWJ1cGRhdGU7CiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJ CXB1YnRydW5jYXRlOworCWJvb2wJCXB1YmRkbDsKIH0gUHVibGljYXRpb25BY3Rpb25zOwogCiB0 eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvbkRlc2MKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL2V2ZW50X3RyaWdnZXIuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdn ZXIuaAppbmRleCAxMDA5MWMzYWFmLi5mZDJlZTdmZmU0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZl bnRfdHJpZ2dlci5oCkBAIC03MSw3ICs3MSw4IEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNv bGxlY3RTaW1wbGVDb21tYW5kKE9iamVjdEFkZHJlc3MgYWRkcmVzcywKIGV4dGVybiB2b2lkIEV2 ZW50VHJpZ2dlckFsdGVyVGFibGVTdGFydChOb2RlICpwYXJzZXRyZWUpOwogZXh0ZXJuIHZvaWQg RXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVJlbGlkKE9pZCBvYmplY3RJZCk7CiBleHRlcm4gdm9pZCBF dmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsCi0JCQkJCQkJ CQkJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3MpOworCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBh ZGRyZXNzLAorCQkJCQkJCQkJCQkJYm9vbCByZXdyaXRlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJp Z2dlckFsdGVyVGFibGVFbmQodm9pZCk7CiAKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckNvbGxl Y3RHcmFudChJbnRlcm5hbEdyYW50ICppc3RtdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzdkZjZlYTExYQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaApA QCAtMCwwICsxLDYwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGRkbG1lc3NhZ2UuaAorICoJ ICAgRXhwb3J0cyBmcm9tIHJlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisgKgorICog Q29weXJpZ2h0IChjKSAyMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor ICoKKyAqIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAorICotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfTE9HSUNBTF9ERExfTUVTU0FHRV9ICisjZGVmaW5lIFBH X0xPR0lDQUxfRERMX01FU1NBR0VfSAorCisjaW5jbHVkZSAiYWNjZXNzL3hsb2cuaCIKKyNpbmNs dWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ3JlYWRlci5oIgor I2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCisKKworLyoKKyAqIFN1cHBvcnQgZm9yIGtlZXBpbmcg dHJhY2sgb2YgZGVwYXJzZWQgY29tbWFuZHMuCisgKi8KK3R5cGVkZWYgZW51bSBEZXBhcnNlZENv bW1hbmRUeXBlCit7CisJRENUX1NpbXBsZUNtZCwKKwlEQ1RfVGFibGVEcm9wU3RhcnQsCisJRENU X1RhYmxlRHJvcEVuZCwKKwlEQ1RfVGFibGVBbHRlciwKKwlEQ1RfT2JqZWN0Q3JlYXRlLAorCURD VF9PYmplY3REcm9wCit9IERlcGFyc2VkQ29tbWFuZFR5cGU7CisKKy8qCisgKiBHZW5lcmljIGxv Z2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2Ugd2FsIHJlY29yZC4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgeGxfbG9naWNhbF9kZGxfbWVzc2FnZQoreworCU9pZAkJCWRiSWQ7CQkJLyogZGF0YWJhc2Ug T2lkIGVtaXR0ZWQgZnJvbSAqLworCVNpemUJCXByZWZpeF9zaXplOwkvKiBsZW5ndGggb2YgcHJl Zml4IGluY2x1ZGluZyBudWxsIHRlcm1pbmF0b3IgKi8KKwlPaWQJCQlyZWxpZDsJCQkvKiBpZCBv ZiB0aGUgdGFibGUgKi8KKwlEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGU7CS8qIHR5cGUgb2Yg c3FsIGNvbW1hbmQgKi8KKwlTaXplCQltZXNzYWdlX3NpemU7CS8qIHNpemUgb2YgdGhlIG1lc3Nh Z2UgKi8KKworCS8qCisJICogcGF5bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVm aXggb2YgbGVuZ3RoIHByZWZpeF9zaXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOworfSB4bF9sb2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVP ZkxvZ2ljYWxERExNZXNzYWdlCShvZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNz YWdlKSkKKworZXh0ZXJuIFhMb2dSZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hh ciAqcHJlZml4LCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJ CQkJCSAgIGNvbnN0IGNoYXIgKmRkbF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1Ig QVBJKi8KKyNkZWZpbmUgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2lj YWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRs bXNnX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0 IGNoYXIgKmxvZ2ljYWxkZGxtc2dfaWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZWNvZGUuaAppbmRleCA3NDFiZjY1Y2Y3Li5mMjcxZjRiMzYxIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9kZWNvZGUuaApAQCAtMjcsNiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9k ZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYp OwogZXh0ZXJuIHZvaWQgeGFjdF9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBY TG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZv aWQgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVj b3JkQnVmZmVyICpidWYpOworZXh0ZXJuIHZvaWQgbG9naWNhbGRkbF9kZWNvZGUoTG9naWNhbERl Y29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9p ZCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNzUmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0 eCwKIAkJCQkJCQkJCQkgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9sb2dpY2FscHJvdG8uaAppbmRleCAxZWI3ZGRhNTI5Li44NTcyY2E2YzFlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVm IGVudW0gTG9naWNhbFJlcE1zZ1R5cGUKIAlMT0dJQ0FMX1JFUF9NU0dfUkVMQVRJT04gPSAnUics CiAJTE9HSUNBTF9SRVBfTVNHX1RZUEUgPSAnWScsCiAJTE9HSUNBTF9SRVBfTVNHX01FU1NBR0Ug PSAnTScsCisJTE9HSUNBTF9SRVBfTVNHX0RETCA9ICdMJywKIAlMT0dJQ0FMX1JFUF9NU0dfQkVH SU5fUFJFUEFSRSA9ICdiJywKIAlMT0dJQ0FMX1JFUF9NU0dfUFJFUEFSRSA9ICdQJywKIAlMT0dJ Q0FMX1JFUF9NU0dfQ09NTUlUX1BSRVBBUkVEID0gJ0snLApAQCAtMjMwLDYgKzIzMSw5IEBAIGV4 dGVybiBMaXN0ICpsb2dpY2FscmVwX3JlYWRfdHJ1bmNhdGUoU3RyaW5nSW5mbyBpbiwKIAkJCQkJ CQkJCSAgYm9vbCAqY2FzY2FkZSwgYm9vbCAqcmVzdGFydF9zZXFzKTsKIGV4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs IFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCQkJIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd3JpdGVfZGRsKFN0cmluZ0luZm8gb3V0LCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJ CQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor ZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGwoU3RyaW5nSW5mbyBpbiwgWExvZ1JlY1B0 ciAqbHNuLCBjb25zdCBjaGFyICoqcHJlZml4LCBTaXplICpzeik7CiBleHRlcm4gdm9pZCBsb2dp Y2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJ CQkJCSBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNhbFJl cFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8gaW4pOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCmluZGV4IGI3ZDI4ZDcwNDUuLmFlMWFkZGNlN2Eg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKQEAgLTkwLDYgKzkwLDE4 IEBAIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LAogCQkJCQkJCQkJCVNpemUgbWVzc2FnZV9zaXplLAogCQkJ CQkJCQkJCWNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCisvKgorICogQ2FsbGVkIGZvciB0aGUgbG9n aWNhbCBkZWNvZGluZyBEREwgbWVzc2FnZXMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxE ZWNvZGVERExNZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAor CQkJCQkJCQkJCSAgIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVj UHRyIG1lc3NhZ2VfbHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJ CQkJCQkgICBPaWQgcmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0 eXBlLAorCQkJCQkJCQkJCSAgIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSAgIGNvbnN0 IGNoYXIgKm1lc3NhZ2UpOworCiAvKgogICogRmlsdGVyIGNoYW5nZXMgYnkgb3JpZ2luLgogICov CkBAIC0yMDEsNiArMjEzLDE5IEBAIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1N ZXNzYWdlQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4CiAJCQkJCQkJCQkJ CSAgU2l6ZSBtZXNzYWdlX3NpemUsCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7 CiAKKy8qCisgKiBDYWxsYmFjayBmb3Igc3RyZWFtaW5nIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1l c3NhZ2VzIGZyb20gaW4tcHJvZ3Jlc3MKKyAqIHRyYW5zYWN0aW9ucy4KKyAqLwordHlwZWRlZiB2 b2lkICgqTG9naWNhbERlY29kZVN0cmVhbURETE1lc3NhZ2VDQikgKHN0cnVjdCBMb2dpY2FsRGVj b2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAor CQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJCQkJCQkgY29uc3Qg Y2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJCQkJCQkJCSBEZXBh cnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUs CisJCQkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8qCiAgKiBDYWxsYmFjayBm b3Igc3RyZWFtaW5nIHRydW5jYXRlcyBmcm9tIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KICAq LwpAQCAtMjIxLDYgKzI0Niw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBsdWdpbkNhbGxiYWNr cwogCUxvZ2ljYWxEZWNvZGVUcnVuY2F0ZUNCIHRydW5jYXRlX2NiOwogCUxvZ2ljYWxEZWNvZGVD b21taXRDQiBjb21taXRfY2I7CiAJTG9naWNhbERlY29kZU1lc3NhZ2VDQiBtZXNzYWdlX2NiOwor CUxvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IgZGRsX2NiOwogCUxvZ2ljYWxEZWNvZGVGaWx0ZXJC eU9yaWdpbkNCIGZpbHRlcl9ieV9vcmlnaW5fY2I7CiAJTG9naWNhbERlY29kZVNodXRkb3duQ0Ig c2h1dGRvd25fY2I7CiAKQEAgLTIzOSw2ICsyNjUsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQ bHVnaW5DYWxsYmFja3MKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1p dF9jYjsKIAlMb2dpY2FsRGVjb2RlU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZV9jYjsKIAlM b2dpY2FsRGVjb2RlU3RyZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlX2NiOworCUxvZ2ljYWxE ZWNvZGVTdHJlYW1ERExNZXNzYWdlQ0Igc3RyZWFtX2RkbF9jYjsKIAlMb2dpY2FsRGVjb2RlU3Ry ZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdpbkNhbGxiYWNr czsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaCBiL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggMDIwMjc1NTBlMi4uODNlMGIx ZTJlNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5 cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsKIAlM aXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJTGlz dAkgICAqZGVsZXRlZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5OwogCWJvb2wJCXN0cmVhbWluZzsK IAlib29sCQltZXNzYWdlczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApp bmRleCBjNzAwYjU1YjFjLi5kMjU2NWJiMjVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVv cmRlcmJ1ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9k ZXRhaWxzLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9zaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMv cmVsY2FjaGUuaCIKQEAgLTU2LDYgKzU4LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJD aGFuZ2VUeXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZF Ul9DSEFOR0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRF Ul9CVUZGRVJfQ0hBTkdFX0RETCwKIAlSRU9SREVSX0JVRkZFUl9DSEFOR0VfTUVTU0FHRSwKIAlS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OLAogCVJFT1JERVJfQlVGRkVSX0NIQU5H RV9JTlRFUk5BTF9TTkFQU0hPVCwKQEAgLTEzMCw2ICsxMzMsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg UmVvcmRlckJ1ZmZlckNoYW5nZQogCQkJY2hhcgkgICAqbWVzc2FnZTsKIAkJfQkJCW1zZzsKIAor CQkvKiBEREwgKi8KKwkJc3RydWN0CisJCXsKKwkJCWNoYXIJICAgKnByZWZpeDsKKwkJCVNpemUJ CW1lc3NhZ2Vfc2l6ZTsKKwkJCWNoYXIJICAgKm1lc3NhZ2U7CisJCQlPaWQJCQlyZWxpZDsKKwkJ CURlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZTsKKwkJfQkJCWRkbDsKKwogCQkvKiBOZXcgc25h cHNob3QsIHNldCB3aGVuIGFjdGlvbiA9PSAqX0lOVEVSTkFMX1NOQVBTSE9UICovCiAJCVNuYXBz aG90CXNuYXBzaG90OwogCkBAIC00NDIsNiArNDU1LDE2IEBAIHR5cGVkZWYgdm9pZCAoKlJlb3Jk ZXJCdWZmZXJNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQljb25zdCBj aGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJY29uc3QgY2hhciAqbWVzc2FnZSk7CiAK Ky8qIERETCBtZXNzYWdlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwordHlwZWRlZiB2b2lkICgqUmVv cmRlckJ1ZmZlckRETE1lc3NhZ2VDQikgKFJlb3JkZXJCdWZmZXIgKnJiLAorCQkJCQkJCQkJCSAg IFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkgICBYTG9nUmVjUHRyIG1lc3NhZ2Vf bHNuLAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkgICBPaWQg cmVsaWQsCisJCQkJCQkJCQkJICAgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJ CQkJCSAgIFNpemUgc3osCisJCQkJCQkJCQkJICAgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKIC8q IGJlZ2luIHByZXBhcmUgY2FsbGJhY2sgc2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9y ZGVyQnVmZmVyQmVnaW5QcmVwYXJlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwKIAkJCQkJCQkJCQkJ IFJlb3JkZXJCdWZmZXJUWE4gKnR4bik7CkBAIC01MDgsNiArNTMxLDE3IEBAIHR5cGVkZWYgdm9p ZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0IpICgKIAkJCQkJCQkJCQkJICBjb25zdCBj aGFyICpwcmVmaXgsIFNpemUgc3osCiAJCQkJCQkJCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSk7 CiAKKy8qIHN0cmVhbSBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVkZWYg dm9pZCAoKlJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNzYWdlQ0IpICgKKwkJCQkJCQkJCQkJCSBS ZW9yZGVyQnVmZmVyICpyYiwKKwkJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJ CQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkJCSBjb25zdCBj aGFyICpwcmVmaXgsCisJCQkJCQkJCQkJCQkgT2lkIHJlbGlkLAorCQkJCQkJCQkJCQkJIERlcGFy c2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkJCSBTaXplIHN6LAorCQkJCQkJCQkJ CQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworCiAvKiBzdHJlYW0gdHJ1bmNhdGUgY2FsbGJhY2sg c2lnbmF0dXJlICovCiB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVD QikgKAogCQkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyICpyYiwKQEAgLTU1OCw2ICs1OTIsNyBA QCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJBcHBseVRydW5jYXRlQ0IgYXBw bHlfdHJ1bmNhdGU7CiAJUmVvcmRlckJ1ZmZlckNvbW1pdENCIGNvbW1pdDsKIAlSZW9yZGVyQnVm ZmVyTWVzc2FnZUNCIG1lc3NhZ2U7CisJUmVvcmRlckJ1ZmZlckRETE1lc3NhZ2VDQiBkZGw7CiAK IAkvKgogCSAqIENhbGxiYWNrcyB0byBiZSBjYWxsZWQgd2hlbiBzdHJlYW1pbmcgYSB0cmFuc2Fj dGlvbiBhdCBwcmVwYXJlIHRpbWUuCkBAIC01NzcsNiArNjEyLDcgQEAgc3RydWN0IFJlb3JkZXJC dWZmZXIKIAlSZW9yZGVyQnVmZmVyU3RyZWFtQ29tbWl0Q0Igc3RyZWFtX2NvbW1pdDsKIAlSZW9y ZGVyQnVmZmVyU3RyZWFtQ2hhbmdlQ0Igc3RyZWFtX2NoYW5nZTsKIAlSZW9yZGVyQnVmZmVyU3Ry ZWFtTWVzc2FnZUNCIHN0cmVhbV9tZXNzYWdlOworCVJlb3JkZXJCdWZmZXJTdHJlYW1ERExNZXNz YWdlQ0Igc3RyZWFtX2RkbDsKIAlSZW9yZGVyQnVmZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1f dHJ1bmNhdGU7CiAKIAkvKgpAQCAtNjU2LDYgKzY5Miw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJC dWZmZXJRdWV1ZU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAog CQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJCSAgYm9v bCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJCQkgIFNpemUgbWVz c2FnZV9zaXplLCBjb25zdCBjaGFyICptZXNzYWdlKTsKK2V4dGVybiB2b2lkIFJlb3JkZXJCdWZm ZXJRdWV1ZURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqLCBUcmFuc2FjdGlvbklkLCBYTG9nUmVj UHRyIGxzbiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIG1lc3NhZ2Vfc2l6 ZSwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgT2lkIHJlbGlkLCBEZXBhcnNlZENv bW1hbmRUeXBlIGNtZHR5cGUpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9y ZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCVhMb2dSZWNQdHIgY29t bWl0X2xzbiwgWExvZ1JlY1B0ciBlbmRfbHNuLAogCQkJCQkJCQlUaW1lc3RhbXBUeiBjb21taXRf dGltZSwgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24pOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKaW5kZXggOGZjNjJjZWJkMi4uMGIwMzYzNTZiZiAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0CkBAIC02MTk0LDkgKzYxOTQsOSBAQCBMaXN0IG9m IHNjaGVtYXMKICgwIHJvd3MpCiAKIFxkUnAgIm5vLnN1Y2gucHVibGljYXRpb24iCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotIE5hbWUgfCBPd25l ciB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCAKLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworIE5hbWUgfCBPd25lciB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KICgwIHJvd3MpCiAKIFxk UnMgIm5vLnN1Y2guc3Vic2NyaXB0aW9uIgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1Ymxp Y2F0aW9uLm91dAppbmRleCA0MjdmODdlYTA3Li4yYjdjZDBkNTk2IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtMzAsMjAgKzMwLDIwIEBAIEVSUk9SOiAg Y29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IG9wdGlvbnMKIExJTkUgMTogLi4udWJfeHh4IFdJVEgg KHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJ3RydWUnLCBwdWJsaXNoX3ZpLi4uCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XgogXGRScAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExp c3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCBmICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAgIE5hbWUgICAgICAgIHwgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5j dCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1 bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgZiAgICAgICB8 IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQog CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgU0VUIChwdWJsaXNoID0gJ2luc2Vy dCwgdXBkYXRlLCBkZWxldGUnKTsKIFxkUnAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgICBOYW1lICAgICAg ICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gdGVzdHBpYl9pbnNfdHJ1 bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKLSB0ZXN0cHViX2RlZmF1bHQgICAgfCBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgICBOYW1lICAg ICAgICB8ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyB0ZXN0cGliX2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAg fCBmCisgdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYgICAg ICAgIHwgZgogKDIgcm93cykKIAogLS0tIGFkZGluZyB0YWJsZXMKQEAgLTg3LDEwICs4NywxMCBA QCBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogLS0gc2hvdWxkIGJlIGFibGUgdG8gYWRkIHNj aGVtYSB0byAnRk9SIFRBQkxFJyBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl9mb3J0YWJsZSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJf Zm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3Ri bDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtOTksMjAgKzk5LDIwIEBAIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHNjaGVtYSBmcm9tICdGT1IgVEFC TEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1Ag VEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDEiCiAKIC0tIHNob3Vs ZCBiZSBhYmxlIHRvIHNldCBzY2hlbWEgdG8gJ0ZPUiBUQUJMRScgcHVibGljYXRpb24KIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3Q7CiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20g c2NoZW1hczoKICAgICAicHViX3Rlc3QiCiAKQEAgLTEyMywxMCArMTIzLDEwIEBAIENSRUFURSBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1hIEZPUiBUQUJMRVMg SU4gU0NIRU1BIHB1Yl90ZXN0LCBUQUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBSRVNFVCBj bGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JfdGJsX3NjaGVtYQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2Zvcl90Ymxfc2NoZW1h CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogVGFi bGVzIGZyb20gc2NoZW1hczoKQEAgLTEzNSwxMCArMTM1LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBhZGQgYSB0YWJsZSBvZiB0aGUgc2FtZSBzY2hlbWEg dG8gdGhlIHNjaGVtYSBwdWJsaWNhdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3Jz Y2hlbWEgQUREIFRBQkxFIHB1Yl90ZXN0LnRlc3RwdWJfbm9wazsKIFxkUnArIHRlc3RwdWJfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9u b3BrIgogVGFibGVzIGZyb20gc2NoZW1hczoKQEAgLTE0NywxMCArMTQ3LDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHRoZSB0YWJsZQogQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWEgRFJPUCBUQUJMRSBwdWJfdGVzdC50ZXN0cHVi X25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTYxLDEwICsxNjEsMTAgQEAgRVJS T1I6ICByZWxhdGlvbiAidGVzdHB1Yl9ub3BrIiBpcyBub3QgcGFydCBvZiB0aGUgcHVibGljYXRp b24KIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCB0YWJsZSB0byBzY2hlbWEgcHVibGljYXRpb24K IEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIFNFVCBUQUJMRSBwdWJfdGVzdC50 ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1hCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIApAQCAtMTg2LDEwICsxODYsMTAg QEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxlcyIKIAogXGRScCsgdGVz dHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwg ZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93KQogCiBEUk9QIFRB QkxFIHRlc3RwdWJfdGJsMjsKQEAgLTIwMSwxOSArMjAxLDE5IEBAIENSRUFURSBQVUJMSUNBVElP TiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKIFJFU0VUIGNsaWVudF9taW5fbWVz c2FnZXM7CiBcZFJwKyB0ZXN0cHViMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1YjMKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0 cHViX3RibDMiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBcZFJwKyB0ZXN0cHViNAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjQK LSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNAorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAKQEAgLTIzNCwxMCAr MjM0LDEwIEBAIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAxOwogLS0gb25seSBwYXJl bnQgaXMgbGlzdGVkIGFzIGJlaW5nIGluIHB1YmxpY2F0aW9uLCBub3QgdGhlIHBhcnRpdGlvbgog QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgQUREIFRBQkxFIHRlc3RwdWJfcGFy dGVkOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgog ICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTI1MiwxMCArMjUyLDEwIEBAIEFMVEVS IFRBQkxFIHRlc3RwdWJfcGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl9wYXJ0ZWQxOwog VVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CiBc ZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1 YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjg0LDEwICsyODQsMTAgQEAgU0VUIGNsaWVudF9t aW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEZPUiBU QUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMiBXSEVSRSAoYyA8PiAndGVzdCcg QU5EIGQgPCA1KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9t ZXNzYWdlczsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRl c3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMiIgV0hFUkUgKChjIDw+ ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0zMDAsMTAgKzMwMCwxMCBAQCBUYWJsZXM6 CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0ZXN0cHViX3JmX3RibDMg V0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0cHViNQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjUKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAgInB1YmxpYy50ZXN0cHVi X3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAoZCA8IDUpKQpAQCAtMzE5 LDEwICszMTksMTAgQEAgUHVibGljYXRpb25zOgogCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NSBEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMjsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJf cmZfdGJsMyIgV0hFUkUgKChlID4gMTAwMCkgQU5EIChlIDwgMjAwMCkpCkBAIC0zMzAsMTAgKzMz MCwxMCBAQCBUYWJsZXM6CiAtLSByZW1vdmUgdGVzdHB1Yl9yZl90YmwxIGFuZCBhZGQgdGVzdHB1 Yl9yZl90YmwzIGFnYWluIChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24pCiBBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlID4gMzAwIEFO RCBlIDwgNTAwKTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGlj LnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUgPCA1MDApKQogCkBAIC0z NjYsMTAgKzM2NiwxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVB VEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEs IE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRIIChwdWJsaXNoID0gJ2lu c2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWJfc3ludGF4 MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5 bnRheDEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3N5bnRh eDEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAg ICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwxIgog ICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoZSA8IDk5OSkKQEAgLTM3OSwxMCAr Mzc5LDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX3N5bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJfcmZfdGJsMSwgdGVzdHB1 Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5OSkgV0lUSCAocHVibGlz aCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHVi X3N5bnRheDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1Yl9zeW50YXgyCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9zeW50YXgyCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBm ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZf dGJsMSIKICAgICAidGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSIgV0hFUkUgKGgg PCA5OTkpCkBAIC00OTcsMTAgKzQ5NywxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjYg Rk9SIFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyOwogQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1YjYgU0VUIFRBQkxFUyBJTiBTQ0hFTUEgdGVzdHB1Yl9yZl9zY2hlbWEyLCBUQUJM RSB0ZXN0cHViX3JmX3NjaGVtYTIudGVzdHB1Yl9yZl90Ymw2IFdIRVJFIChpIDwgOTkpOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI2Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNgotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2CisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAidGVzdHB1Yl9yZl9zY2hlbWEyLnRlc3RwdWJfcmZfdGJsNiIgV0hFUkUgKGkgPCA5OSkK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CkBAIC03MTQsMTAgKzcxNCwxMCBAQCBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRl Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsgdGVz dHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl90Ymw1IiAoYSkKIApAQCAtODkxLDEwICs4OTEsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3Rw dWJfdGJsX2JvdGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEs YykpOwogQUxURVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9m aWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9m aWx0ZXJzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2Zp bHRlcnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90 aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApAQCAtMTA5OSwxMCArMTA5OSwxMCBA QCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1 YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGJsIEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHVi X2ZvcnRibCIgYWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVz dHB1Yl90YmwxIgpAQCAtMTE0MCwxMCArMTE0MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRl c3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90 YmwxIgpAQCAtMTIyMSwxMCArMTIyMSwxMCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJl Z3Jlc3Npb24gRlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0 cHViX3BhcnRlZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZh dWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf ZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVm YXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9m IHB1YmxpY2F0aW9uCkBAIC0xMjM0LDIwICsxMjM0LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25l ciBvZiBwdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgUkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0 cHViX2ZvbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2YgcHVibGljYXRpb25zCi0gICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25z CisgICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYK ICgxIHJvdykKIAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyMjsKIFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQg fCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAg ICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBm CiAoMSByb3cpCiAKIC0tIGFkZGluZyBzY2hlbWFzIGFuZCB0YWJsZXMKQEAgLTEyNjMsMTkgKzEy NjMsMTkgQEAgQ1JFQVRFIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihp ZCBpbnQpOwogU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7 CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8 IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWIy X2ZvcnNjaGVtYSBGT1IgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MiwgcHVi X3Rlc3QzOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIKQEAgLTEy ODksNDQgKzEyODksNDQgQEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2X2ZvcnNjaGVtYSBG T1IgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLCBDVVIKIENSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRhYmxlIEZPUiBUQUJMRSAiQ1VSUkVOVF9TQ0hFTUEiLiJDVVJSRU5U X1NDSEVNQSI7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9y c2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIz X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJs aWMiCiAKIFxkUnArIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNF9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVz IGZyb20gc2NoZW1hczoKICAgICAiQ1VSUkVOVF9TQ0hFTUEiCiAKIFxkUnArIHRlc3RwdWI1X2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWI1X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi NV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAiQ1VS UkVOVF9TQ0hFTUEiCiAgICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjZfZm9yc2NoZW1hCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZfZm9yc2No ZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBV cGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI2X2ZvcnNjaGVt YQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAg IHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVN QSIKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViX2ZvcnRhYmxlCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGUKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzOgogICAgICJDVVJSRU5UX1NDSEVNQS5DVVJSRU5UX1NDSEVNQSIKIApAQCAtMTM2 MCwxMCArMTM2MCwxMCBAQCBFUlJPUjogIHNjaGVtYSAidGVzdHB1Yl92aWV3IiBkb2VzIG5vdCBl eGlzdAogLS0gZHJvcHBpbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hhbmdlIGlu IHB1YmxpY2F0aW9uCiBEUk9QIFNDSEVNQSBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Ml9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90 ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM3MSwyMCArMTM3MSwyMCBAQCBUYWJsZXMgZnJv bSBzY2hlbWFzOgogLS0gcmVuYW1pbmcgdGhlIHNjaGVtYSBzaG91bGQgcmVmbGVjdCB0aGUgY2hh bmdlIGluIHB1YmxpY2F0aW9uCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxIFJFTkFNRSB0byBwdWJf dGVzdDFfcmVuYW1lZDsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxX3JlbmFtZWQiCiAgICAgInB1 Yl90ZXN0MiIKIAogQUxURVIgU0NIRU1BIHB1Yl90ZXN0MV9yZW5hbWVkIFJFTkFNRSB0byBwdWJf dGVzdDE7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl cyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM5 MiwxMCArMTM5MiwxMCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRp b24gYWRkIHNjaGVtYQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xNDA0LDEwICsxNDA0LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIFRBQkxFUyBJTiBTQ0hF TUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2No ZW1hIiBkb2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAg ICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwg RGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90 ZXN0MiIKQEAgLTE0MTYsMTAgKzE0MTYsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgVEFCTEVTIElOIFNDSEVNQSBwdWJf dGVzdDE7CiBFUlJPUjogIHNjaGVtYSAicHViX3Rlc3QxIiBpcyBhbHJlYWR5IG1lbWJlciBvZiBw dWJsaWNhdGlvbiAidGVzdHB1YjFfZm9yc2NoZW1hIgogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1h Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNj aGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEi CiAgICAgInB1Yl90ZXN0MiIKQEAgLTE0MjcsMTAgKzE0MjcsMTAgQEAgVGFibGVzIGZyb20gc2No ZW1hczoKIC0tIGFsdGVyIHB1YmxpY2F0aW9uIGRyb3Agc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxk UnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8 IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBW aWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0t CisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2No ZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNDM4LDEwICsxNDM4LDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIEVSUk9SOiAgdGFibGVzIGZyb20gc2NoZW1hICJw dWJfdGVzdDIiIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljYXRpb24KIFxkUnArIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91 c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg ICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19w dWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAi cHViX3Rlc3QxIgogCkBAIC0xNDQ5LDI5ICsxNDQ5LDI5IEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBUQUJMRVMgSU4gU0NI RU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0ZW50X3Nj aGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiAtLSBkcm9w IGFsbCBzY2hlbWFzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogKDEgcm93KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlw bGUgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIFRBQkxF UyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDI7CiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hl bWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYg ICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9y c2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0 MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTQ4MCwxMCArMTQ4MCwxMCBAQCBUYWJsZXMgZnJvbSBz Y2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIFNFVCBUQUJMRVMg SU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAibm9uX2V4aXN0 ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVt YQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBk YXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEK KyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0 ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAg ICJwdWJfdGVzdDIiCkBAIC0xNDkyLDEwICsxNDkyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6 CiAtLSByZW1vdmluZyB0aGUgZHVwbGljYXRlIHNjaGVtYXMKIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0 MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAg ICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZy b20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTc0LDE4ICsxNTc0LDE4IEBAIFNF VCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViM19mb3JzY2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1 YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMg fCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERE THMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNz X3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIEFMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSBTRVQgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBc ZFJwKyB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3Nf cHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0t LQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNj aGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTU5NSwyMCArMTU5NSwyMCBAQCBDUkVBVEUg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3JzY2hlbWFfZm9ydGFibGUgRk9SIFRBQkxFUyBJTiBTQ0hF TUEgcHViX3Rlc3QxLCBUQQogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfZm9y c2NoZW1hIEZPUiBUQUJMRSBwdWJfdGVzdDIudGJsMSwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVz dDE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1Yl9mb3JzY2hlbWFf Zm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf Zm9yc2NoZW1hX2ZvcnRhYmxlCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1 Yl9mb3JzY2hlbWFfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg fCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVn cmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJfdGVz dDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIAogXGRScCsg dGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1 YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGFibGVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFi bGVzOgogICAgICJwdWJfdGVzdDIudGJsMSIKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CmRpZmYgLS1n aXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IGZlMzMwYjQwODQuLjYzN2YxMmQzOTIgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC01NTksNiArNTU5LDcgQEAgRGVmRWxlbUFjdGlvbgogRGVmYXVs dEFDTEluZm8KIERlZmluZVN0bXQKIERlbGV0ZVN0bXQKK0RlcGFyc2VkQ29tbWFuZFR5cGUKIERl cGVuZGVuY3lHZW5lcmF0b3IKIERlcGVuZGVuY3lHZW5lcmF0b3JEYXRhCiBEZXBlbmRlbmN5VHlw ZQpAQCAtMTQzOSw2ICsxNDQwLDggQEAgTG9naWNhbERlY29kZUJlZ2luUHJlcGFyZUNCCiBMb2dp Y2FsRGVjb2RlQ2hhbmdlQ0IKIExvZ2ljYWxEZWNvZGVDb21taXRDQgogTG9naWNhbERlY29kZUNv bW1pdFByZXBhcmVkQ0IKK0xvZ2ljYWxEZWNvZGVERExNZXNzYWdlQ0IKK0xvZ2ljYWxEZWNvZGVT dHJlYW1ERExNZXNzYWdlQ0IKIExvZ2ljYWxEZWNvZGVGaWx0ZXJCeU9yaWdpbkNCCiBMb2dpY2Fs RGVjb2RlRmlsdGVyUHJlcGFyZUNCCiBMb2dpY2FsRGVjb2RlTWVzc2FnZUNCCkBAIC0yMjg2LDYg KzIyODksOCBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlCiBSZW9yZGVyQnVmZmVyQ2hhbmdlVHlwZQog UmVvcmRlckJ1ZmZlckNvbW1pdENCCiBSZW9yZGVyQnVmZmVyQ29tbWl0UHJlcGFyZWRDQgorUmVv cmRlckJ1ZmZlckRETE1lc3NhZ2VDQgorUmVvcmRlckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQgog UmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UKIFJlb3JkZXJCdWZmZXJJdGVyVFhORW50cnkKIFJlb3Jk ZXJCdWZmZXJJdGVyVFhOU3RhdGUKLS0gCjIuMzQuMQoK --000000000000cb887705efe04c32 Content-Type: text/x-patch; charset="US-ASCII"; name="v52-0006-Support-DDL-replication-of-alter-type-having-USI.patch" Content-Disposition: attachment; filename="v52-0006-Support-DDL-replication-of-alter-type-having-USI.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpakrpi5 RnJvbSA0MDRmMTJkZjBjMDA5MDBmODA3MTVhMzUxODk1MDNlNDAzNTljZTNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWaWduZXNoIEMgPHZpZ25lc2gyMUBnbWFpbC5jb20+CkRhdGU6 IFRodSwgMTUgRGVjIDIwMjIgMjA6NTU6MDYgKzA1MzAKU3ViamVjdDogW1BBVENIIHY1MiA2Lzdd IFN1cHBvcnQgRERMIHJlcGxpY2F0aW9uIG9mIGFsdGVyIHR5cGUgaGF2aW5nIFVTSU5HCiBleHBy ZXNzaW9uIG9uIGRyb3BwZWQgY29sdW1uLgoKU3VwcG9ydCBEREwgcmVwbGljYXRpb24gb2YgYWx0 ZXIgdGFibGUgaGF2aW5nIHN1YmNvbW1hbmRzIHdoaWNoIGluY2x1ZGUKZHJvcCBjb2x1bW4gYW5k IGFsdGVyIHR5cGUgd2hpY2ggdXNlcyBkcm9wcGVkIGNvbHVtbiBleHByZXNzaW9uIGxpa2U6CkNS RUFURSBUQUJMRSBhbm90aGVyIChmMSBpbnQsIGYyIHRleHQsIGYzIHRleHQpOwpBTFRFUiBUQUJM RSBhbm90aGVyCiAgRFJPUCBDT0xVTU4gZjMsCiAgQUxURVIgZjEgVFlQRSB0ZXh0IHVzaW5nIGYy IHx8ICcgYW5kICcgfHwgZjMgfHwgJyBtb3JlJywKICBBTFRFUiBmMiBUWVBFIGJpZ2ludCB1c2lu ZyBmMSAqIDEwOwoKQ3VycmVudGx5IGV2ZW50IHRyaWdnZXIgaXMgY2FsbGVkIGFmdGVyIHRoZSBl eGVjdXRpb24gb2YgdGhlIGNvbW1hbmQsIGkuZS4KYWZ0ZXIgdGhlIGRyb3AgY29sdW1uLCBzaW5j ZSB0aGUgY29sdW1uIGlzIGRyb3BwZWQgd2UgY2Fubm90IGV2YWx1YXRlCnRoZSBleHByZXNzaW9u IHVzaW5nIHBnX2dldF9leHByIGZvciBhIGRyb3BwZWQgY29sdW1uLiBGaXhlZCB0aGlzIGlzc3Vl CmJ5IGFkZGluZyBldmVudCB0cmlnZ2VyIGJlZm9yZSBwcmVwYXJhdGlvbiBvZiBBTFRFUiBUWVBF IHN1YiBjb21tYW5kLgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMgICB8 ICAxMSArLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYyB8IDEyNyArKysr KysrKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5j ICAgICB8ICAgOCArLQogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIHwgICA0 ICsKIHNyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggICB8ICAgMSArCiA1IGZpbGVz IGNoYW5nZWQsIDE0MCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2RlcGFyc2UuYwppbmRleCBhYTA0Y2NlMDE5Li40YzhhZmY5NTFmIDEwMDc1NQotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2RkbF9kZXBhcnNlLmMKQEAgLTM3MzcsMTcgKzM3MzcsOCBAQCBkZXBhcnNlX0FsdGVy UmVsYXRpb24oQ29sbGVjdGVkQ29tbWFuZCAqY21kKQogCQkJCQkJdG1wb2JqMiA9IG5ld19vYmp0 cmVlKCJVU0lORyIpOwogCQkJCQkJaWYgKGRlZi0+cmF3X2RlZmF1bHQpCiAJCQkJCQl7Ci0JCQkJ CQkJRGF0dW0JCWRlcGFyc2VkOwotCQkJCQkJCWNoYXIJICAgKmRlZmV4cHI7Ci0KIAkJCQkJCQll eHBycyA9IGxhcHBlbmQoZXhwcnMsIGRlZi0+Y29va2VkX2RlZmF1bHQpOwotCQkJCQkJCWRlZmV4 cHIgPSBub2RlVG9TdHJpbmcoZGVmLT5jb29rZWRfZGVmYXVsdCk7Ci0JCQkJCQkJZGVwYXJzZWQg PSBEaXJlY3RGdW5jdGlvbkNhbGwyKHBnX2dldF9leHByLAotCQkJCQkJCQkJCQkJCQkgICBDU3Ry aW5nR2V0VGV4dERhdHVtKGRlZmV4cHIpLAotCQkJCQkJCQkJCQkJCQkgICBSZWxhdGlvbkdldFJl bGlkKHJlbCkpOwotCQkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcG9iajIsICIle2V4cHJl c3Npb259cyIsCi0JCQkJCQkJCQkJCQkgImV4cHJlc3Npb24iLAotCQkJCQkJCQkJCQkJIFRleHRE YXR1bUdldENTdHJpbmcoZGVwYXJzZWQpKTsKKwkJCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0 bXBvYmoyLCAiJXtleHByZXNzaW9ufXMiLCAiZXhwcmVzc2lvbiIsIHN1Yi0+dXNpbmdleHByKTsK IAkJCQkJCX0KIAkJCQkJCWVsc2UKIAkJCQkJCQlhcHBlbmRfbm90X3ByZXNlbnQodG1wb2JqMik7 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMv YmFja2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMKaW5kZXggYWI3Y2Q1OWY0ZC4uOThiMzAy OTA4YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisr KyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwpAQCAtMTc4Miw2ICsxNzgy LDEzMyBAQCBFdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQs IE9iamVjdEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZQogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjeHQpOwogfQogCisvKgorICogRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlU3RhcnQKKyAqCQlTYXZl IGRhdGEgYWJvdXQgYSBzaW5nbGUgcGFydCBvZiBhbiBBTFRFUiBUWVBFLgorICoKKyAqIEFMVEVS IFRBQkxFIGNhbiBoYXZlIG11bHRpcGxlIHN1YmNvbW1hbmRzIHdoaWNoIG1pZ2h0IGluY2x1ZGUg RFJPUCBDT0xVTU4KKyAqIGNvbW1hbmQgYW5kIEFMVEVSIFRZUEUgcmVmZXJyaW5nIHRoZSBkcm9w IGNvbHVtbiBpbiBVU0lORyBleHByZXNzaW9uLgorICogQXMgdGhlIGRyb3BwZWQgY29sdW1uIGNh bm5vdCBiZSBhY2Nlc3NlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIERST1AgQ09MVU1OLAorICog YSBzcGVjaWFsIHRyaWdnZXIgaXMgcmVxdWlyZWQgdG8gaGFuZGxlIHRoaXMgY2FzZSBiZWZvcmUg dGhlIGRyb3AgY29sdW1uIGlzCisgKiBleGVjdXRlZC4KKyAqLwordm9pZAorRXZlbnRUcmlnZ2Vy QWx0ZXJUeXBlU3RhcnQoQWx0ZXJUYWJsZUNtZCAqc3ViY21kLCBSZWxhdGlvbiByZWwpCit7CisJ TWVtb3J5Q29udGV4dCBvbGRjeHQ7CisJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKKwlDb2x1 bW5EZWYgICpkZWY7CisJUmVsYXRpb24JYXR0cmVsYXRpb247CisJSGVhcFR1cGxlCWhlYXBUdXA7 CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0VHVwOworCUF0dHJOdW1iZXIJYXR0bnVtOworCU9iamVj dEFkZHJlc3MgYWRkcmVzczsKKworCS8qIGlnbm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQg bm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNhYmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJp Z2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rp b25JbmhpYml0ZWQpCisJCXJldHVybjsKKworCUFzc2VydChJc0Eoc3ViY21kLCBBbHRlclRhYmxl Q21kKSk7CisJQXNzZXJ0KHN1YmNtZC0+c3VidHlwZSA9PSBBVF9BbHRlckNvbHVtblR5cGUpOwor CUFzc2VydChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kICE9IE5VTEwp OworCUFzc2VydChPaWRJc1ZhbGlkKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENv bW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCkpOworCisJZGVmID0gKENvbHVtbkRlZiAqKSBz dWJjbWQtPmRlZjsKKwlBc3NlcnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwlvbGRjeHQgPSBN ZW1vcnlDb250ZXh0U3dpdGNoVG8oY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jeHQpOworCisJ bmV3c3ViID0gcGFsbG9jKHNpemVvZihDb2xsZWN0ZWRBVFN1YmNtZCkpOworCW5ld3N1Yi0+cGFy c2V0cmVlID0gKE5vZGUgKiljb3B5T2JqZWN0KHN1YmNtZCk7CisKKwlhdHRyZWxhdGlvbiA9IHRh YmxlX29wZW4oQXR0cmlidXRlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwkvKiBM b29rIHVwIHRoZSB0YXJnZXQgY29sdW1uICovCisJaGVhcFR1cCA9IFNlYXJjaFN5c0NhY2hlQ29w eUF0dE5hbWUoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCWlmICghSGVh cFR1cGxlSXNWYWxpZChoZWFwVHVwKSkgLyogc2hvdWxkbid0IGhhcHBlbiAqLworCQllcmVwb3J0 KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQllcnJt c2coImNvbHVtbiBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJ CQkJICAgc3ViY21kLT5uYW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSk7CisJYXR0 VHVwID0gKEZvcm1fcGdfYXR0cmlidXRlKSBHRVRTVFJVQ1QoaGVhcFR1cCk7CisJYXR0bnVtID0g YXR0VHVwLT5hdHRudW07CisKKwlPYmplY3RBZGRyZXNzU3ViU2V0KGFkZHJlc3MsIFJlbGF0aW9u UmVsYXRpb25JZCwKKwkJCQkJCVJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtKTsKKwloZWFw X2ZyZWV0dXBsZShoZWFwVHVwKTsKKwl0YWJsZV9jbG9zZShhdHRyZWxhdGlvbiwgUm93RXhjbHVz aXZlTG9jayk7CisJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKKworCWlmIChkZWYtPnJhd19k ZWZhdWx0KQorCXsKKwkJY2hhcgkgICAqZGVmZXhwcjsKKworCQlkZWZleHByID0gbm9kZVRvU3Ry aW5nKGRlZi0+Y29va2VkX2RlZmF1bHQpOworCQluZXdzdWItPnVzaW5nZXhwciA9IFRleHREYXR1 bUdldENTdHJpbmcoRGlyZWN0RnVuY3Rpb25DYWxsMihwZ19nZXRfZXhwciwKKwkJCQkJCQkJCQkJ CQkJCQkJQ1N0cmluZ0dldFRleHREYXR1bShkZWZleHByKSwKKwkJCQkJCQkJCQkJCQkJCQkJUmVs YXRpb25HZXRSZWxpZChyZWwpKSk7CisJfQorCWVsc2UKKwkJbmV3c3ViLT51c2luZ2V4cHIgPSBO VUxMOworCisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZC0+ZC5hbHRl clRhYmxlLnN1YmNtZHMgPQorCQlsYXBwZW5kKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3Vy cmVudENvbW1hbmQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOworCisJTWVtb3J5Q29u dGV4dFN3aXRjaFRvKG9sZGN4dCk7Cit9CisKKy8qCisgKiBFdmVudFRyaWdnZXJBbHRlclR5cGVF bmQKKyAqCQlGaW5pc2ggdXAgc2F2aW5nIGFuIEFMVEVSIFRZUEUgY29tbWFuZCwgYW5kIGFkZCBp dCB0byBjb21tYW5kIGxpc3QuCisgKi8KK3ZvaWQKK0V2ZW50VHJpZ2dlckFsdGVyVHlwZUVuZChO b2RlICpzdWJjbWQsIE9iamVjdEFkZHJlc3MgYWRkcmVzcywgYm9vbCByZXdyaXRlKQoreworCU1l bW9yeUNvbnRleHQgb2xkY3h0OworCUNvbGxlY3RlZEFUU3ViY21kICpuZXdzdWI7CisJTGlzdENl bGwgICAqY2VsbDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjbWQ7CisJQWx0ZXJUYWJsZUNtZCAqYWx0 c3ViY21kID0gKEFsdGVyVGFibGVDbWQgKilzdWJjbWQ7CisKKwkvKiBpZ25vcmUgaWYgZXZlbnQg dHJpZ2dlciBjb250ZXh0IG5vdCBzZXQsIG9yIGNvbGxlY3Rpb24gZGlzYWJsZWQgKi8KKwlpZiAo IWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZSB8fAorCQljdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUt PmNvbW1hbmRDb2xsZWN0aW9uSW5oaWJpdGVkKQorCQlyZXR1cm47CisKKwljbWQgPSBjdXJyZW50 RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kOworCisJQXNzZXJ0KElzQShzdWJjbWQs IEFsdGVyVGFibGVDbWQpKTsKKwlBc3NlcnQoY21kICE9IE5VTEwpOworCUFzc2VydChPaWRJc1Zh bGlkKGNtZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkKSk7CisKKwlmb3JlYWNoKGNlbGwsIGNtZC0+ ZC5hbHRlclRhYmxlLnN1YmNtZHMpCisJeworCQlDb2xsZWN0ZWRBVFN1YmNtZCAqc3ViID0gKENv bGxlY3RlZEFUU3ViY21kICopIGxmaXJzdChjZWxsKTsKKwkJQWx0ZXJUYWJsZUNtZCAqY29sbGNt ZCA9IChBbHRlclRhYmxlQ21kICopIHN1Yi0+cGFyc2V0cmVlOworCisJCWlmIChjb2xsY21kLT5z dWJ0eXBlID09IGFsdHN1YmNtZC0+c3VidHlwZSAmJgorCQkJYWRkcmVzcy5jbGFzc0lkID09IHN1 Yi0+YWRkcmVzcy5jbGFzc0lkICYmCisJCQlhZGRyZXNzLm9iamVjdElkID09IHN1Yi0+YWRkcmVz cy5vYmplY3RJZCAmJgorCQkJYWRkcmVzcy5vYmplY3RTdWJJZCA9PSBzdWItPmFkZHJlc3Mub2Jq ZWN0U3ViSWQpCisJCXsKKwkJCWNtZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgfD0gcmV3cml0ZTsK KwkJCXJldHVybjsKKwkJfQorCX0KKworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhj dXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN4dCk7CisKKwluZXdzdWIgPSBwYWxsb2Moc2l6ZW9m KENvbGxlY3RlZEFUU3ViY21kKSk7CisJbmV3c3ViLT5hZGRyZXNzID0gYWRkcmVzczsKKwluZXdz dWItPnBhcnNldHJlZSA9IGNvcHlPYmplY3Qoc3ViY21kKTsKKworCWNtZC0+ZC5hbHRlclRhYmxl LnJld3JpdGUgfD0gcmV3cml0ZTsKKwljbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzID0gbGFwcGVu ZChjbWQtPmQuYWx0ZXJUYWJsZS5zdWJjbWRzLCBuZXdzdWIpOworCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGN4dCk7Cit9CisKIC8qCiAgKiBFdmVudFRyaWdnZXJBbHRlclRhYmxlRW5kCiAg KgkJRmluaXNoIHVwIHNhdmluZyBhbiBBTFRFUiBUQUJMRSBjb21tYW5kLCBhbmQgYWRkIGl0IHRv IGNvbW1hbmQgbGlzdC4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21k cy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggNWI0N2RjMWY0OC4u OWM2ZWNiODg4NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK KysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTQ2NTEsNiArNDY1MSw5 IEBAIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEFsdGVyVGFibGVDbWQg KmNtZCwKIAkJCWNtZCA9IEFUUGFyc2VUcmFuc2Zvcm1DbWQod3F1ZXVlLCB0YWIsIHJlbCwgY21k LCByZWN1cnNlLCBsb2NrbW9kZSwKIAkJCQkJCQkJCSAgQVRfUEFTU19VTlNFVCwgY29udGV4dCk7 CiAJCQlBc3NlcnQoY21kICE9IE5VTEwpOworCisJCQlFdmVudFRyaWdnZXJBbHRlclR5cGVTdGFy dChjbWQsIHJlbCk7CisKIAkJCS8qIFBlcmZvcm1zIG93biByZWN1cnNpb24gKi8KIAkJCUFUUHJl cEFsdGVyQ29sdW1uVHlwZSh3cXVldWUsIHRhYiwgcmVsLCByZWN1cnNlLCByZWN1cnNpbmcsIGNt ZCwKIAkJCQkJCQkJICBsb2NrbW9kZSwgY29udGV4dCk7CkBAIC00OTIyLDYgKzQ5MjUsNyBAQCBB VEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogewogCU9iamVj dEFkZHJlc3MgYWRkcmVzcyA9IEludmFsaWRPYmplY3RBZGRyZXNzOwogCVJlbGF0aW9uCXJlbCA9 IHRhYi0+cmVsOworCWJvb2wJCWNvbW1hbmRDb2xsZWN0ZWQgPSBmYWxzZTsKIAogCXN3aXRjaCAo Y21kLT5zdWJ0eXBlKQogCXsKQEAgLTUwNDUsNiArNTA0OSw4IEBAIEFURXhlY0NtZChMaXN0ICoq d3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJCWNhc2UgQVRfQWx0ZXJDb2x1bW5UeXBl OgkvKiBBTFRFUiBDT0xVTU4gVFlQRSAqLwogCQkJLyogcGFyc2UgdHJhbnNmb3JtYXRpb24gd2Fz IGRvbmUgZWFybGllciAqLwogCQkJYWRkcmVzcyA9IEFURXhlY0FsdGVyQ29sdW1uVHlwZSh0YWIs IHJlbCwgY21kLCBsb2NrbW9kZSk7CisJCQlFdmVudFRyaWdnZXJBbHRlclR5cGVFbmQoKE5vZGUg KikgY21kLCBhZGRyZXNzLCB0YWItPnJld3JpdGUpOworCQkJY29tbWFuZENvbGxlY3RlZCA9IHRy dWU7CiAJCQlicmVhazsKIAkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgkvKiBB TFRFUiBDT0xVTU4gT1BUSU9OUyAqLwogCQkJYWRkcmVzcyA9CkBAIC01MjE3LDcgKzUyMjMsNyBA QCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCS8qCiAJ ICogUmVwb3J0IHRoZSBzdWJjb21tYW5kIHRvIGludGVyZXN0ZWQgZXZlbnQgdHJpZ2dlcnMuCiAJ ICovCi0JaWYgKGNtZCkKKwlpZiAoY21kICYmICFjb21tYW5kQ29sbGVjdGVkKQogCQlFdmVudFRy aWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MsIHRhYi0+ cmV3cml0ZSk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRf dHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IGMy NDFkYjMwMjEuLmU3YWE4ZjY0YzUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmgK QEAgLTc3LDYgKzc3LDEwIEBAIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dlckFsdGVyVGFibGVSZWxp ZChPaWQgb2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQ29sbGVjdEFsdGVyVGFi bGVTdWJjbWQoTm9kZSAqc3ViY21kLAogCQkJCQkJCQkJCQkJT2JqZWN0QWRkcmVzcyBhZGRyZXNz LAogCQkJCQkJCQkJCQkJYm9vbCByZXdyaXRlKTsKKworZXh0ZXJuIHZvaWQgRXZlbnRUcmlnZ2Vy QWx0ZXJUeXBlU3RhcnQoQWx0ZXJUYWJsZUNtZCAqc3ViY21kLCBSZWxhdGlvbiByZWwpOworZXh0 ZXJuIHZvaWQgRXZlbnRUcmlnZ2VyQWx0ZXJUeXBlRW5kKE5vZGUgKnN1YmNtZCwgT2JqZWN0QWRk cmVzcyBhZGRyZXNzLAorCQkJCQkJCQkJIGJvb2wgcmV3cml0ZSk7CiBleHRlcm4gdm9pZCBFdmVu dFRyaWdnZXJBbHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJD b2xsZWN0R3JhbnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCBiL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGls aXR5LmgKaW5kZXggM2QyOTRhMDM3MS4uYTFkZDI0ODgxYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2Vf dXRpbGl0eS5oCkBAIC00MCw2ICs0MCw3IEBAIHR5cGVkZWYgc3RydWN0IENvbGxlY3RlZEFUU3Vi Y21kCiB7CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNzOwkJLyogYWZmZWN0ZWQgY29sdW1uLCBjb25z dHJhaW50LCBpbmRleCwgLi4uICovCiAJTm9kZQkgICAqcGFyc2V0cmVlOworCWNoYXIJICAgKnVz aW5nZXhwcjsKIH0gQ29sbGVjdGVkQVRTdWJjbWQ7CiAKIHR5cGVkZWYgc3RydWN0IENvbGxlY3Rl ZENvbW1hbmQKLS0gCjIuMzQuMQoK --000000000000cb887705efe04c32 Content-Type: text/x-patch; charset="US-ASCII"; name="v52-0007-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Disposition: attachment; filename="v52-0007-Introduce-the-test_ddl_deparse_regress-test-modu.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lbpakrpi6 RnJvbSA2YzE5MjMzZjkyZTZjZDg3ZDA1ZTEwNzYzYWJmNzAxOTdmNjQ0MmRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiWmhlbmcgKFphbmUpIExpIiA8emhlbGxpQGFtYXpvbi5jb20+ CkRhdGU6IFRodSwgMTUgRGVjIDIwMjIgMDU6MTg6NDUgKzAwMDAKU3ViamVjdDogW1BBVENIIHY1 MiA3LzddIEludHJvZHVjZSB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIHRlc3QgbW9kdWxl LgogVGhpcyB0ZXN0aW5nIG1vZHVsZSBhaW1zIHRvIGFjaGlldmUgdGhlIGZvbGxvd2luZyBmb3Vy IHRlc3RpbmcgZ29hbHMgZm9yIHRoZQogRERMIGRlcGFyc2VyOiAxLiBUZXN0IHRoYXQgdGhlIGdl bmVyYXRlZCBKU09OIGJsb2IgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMCiB0ZXN0cy4gMi4gVGVzdCB0 aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaXMgZXhwZWN0ZWQgdXNpbmcgU1FMIHRlc3Rz LiAzLgogVGVzdCB0aGF0IHRoZSByZS1mb3JtZWQgRERMIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGVm ZmVjdCBhcyB0aGUgb3JpZ2luYWwKIGNvbW1hbmQgYnkgY29tcGFyaW5nIHRoZSByZXN1bHRzIG9m IHBnX2R1bXAsIHVzaW5nIHRoZSBTUUwgdGVzdHMgaW4gMSBhbmQgMi4KIDQuIFRlc3QgdGhhdCBu ZXcgRERMIHN5bnRheCBpcyBoYW5kbGVkIGJ5IHRoZSBEREwgZGVwYXJzZXIgYnkgY2FwdHVyaW5n IGFuZAogZGVwYXJpbmcgRERMIGNvbW1hbmRzIHJhbiBieSBwZ19yZWdyZXNzLgoKMSBhbmQgMiBp cyB0ZXN0ZWQgd2l0aCBTUUwgdGVzdHMsIGJ5IHByaW50aW5nIHRoZSBkZXBhcnNlZCBKU09OIGJs b2IgYW5kIHRoZSByZS1mb3JtZWQgY29tbWFuZC4KCkdvYWwgMyBpcyB0ZXN0ZWQgd2l0aCBUQVAg ZnJhbWV3b3JrIGluIHQvMDAxX2NvbXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwKCkdvYWwgNCBpcyB0 ZXN0ZWQgd2l0aCBUQVAgZnJhbWV3b3JrIGFuZCBwZ19yZWdyZXNzIGluIDAwMl9yZWdyZXNzX3Rl c3RzLnBsLCB0aGUgZXhlY3V0aW9uIGlzIGN1cnJlbnRseSBjb21tZW50ZWQgb3V0IGJlY2F1c2Ug aXQgd2lsbCBmYWlsIGR1ZSB1bmltcGxlbWVudGVkIGNvbW1hbmRzIGluIHRoZSBEREwgZGVwYXJz ZXIuCi0tLQogc3JjL3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGlnbm9yZSAgICAgICB8ICAg NCArCiAuLi4vbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUgfCAgNDUg KysrKwogLi4uL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgICAgICAgIHwgIDIy ICsrCiAuLi4vZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0ICAgICAgICAgICAgICAgICAgfCAgNDYg KysrKwogLi4uL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNpb24ub3V0ICAgICAgICAgICAgIHwgICA2 ICsKIC4uLi9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dCAgICAgICAgICAgICAgICB8ICAyMiAr KwogLi4uL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgICAgICAgICAgICAgICAgIHwgIDM5ICsr KysKIC4uLi9leHBlY3RlZC9kb21haW4ub3V0ICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiAr CiAuLi4vZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgICAgICAgICAgICAgfCAgMTggKysK IC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvbWVzb24uYnVpbGQgICAgICB8ICA0MiArKysr CiAuLi4vc3FsL2FsdGVyX3RhYmxlLnNxbCAgICAgICAgICAgICAgICAgICAgICAgfCAgMjggKysr CiAuLi4vc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsICAgICAgICAgICAgICAgICAgfCAgIDUgKwog Li4uL3NxbC9jcmVhdGVfc2NoZW1hLnNxbCAgICAgICAgICAgICAgICAgICAgIHwgIDE2ICsrCiAu Li4vc3FsL2NyZWF0ZV90YWJsZS5zcWwgICAgICAgICAgICAgICAgICAgICAgfCAgMTUgKysKIC4u Li90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2RvbWFpbi5zcWwgICB8ICAgMiArCiAuLi4v c3FsL3Rlc3RfZGRsX2RlcGFyc2Uuc3FsICAgICAgICAgICAgICAgICAgfCAgMjAgKysKIC4uLi90 LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsICAgICAgICAgICB8IDE4MSArKysrKysrKysr KysrKysKIC4uLi90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsICAgICAgICAgICAgICAgICAgICB8IDIw NyArKysrKysrKysrKysrKysrKysKIC4uLi90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MtLTEuMC5z cWwgICAgICAgICB8ICAgOSArCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMgICAgICAg ICAgICAgICAgfCAgNzEgKysrKysrCiAuLi4vdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRy b2wgICAgICAgICAgfCAgIDQgKwogMjIgZmlsZXMgY2hhbmdlZCwgODA5IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy8uZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3Rl ZC9hbHRlcl90YWJsZS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dAogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L2V4cGVjdGVkL2NyZWF0ZV9zY2hlbWEub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvY3JlYXRlX3RhYmxlLm91 dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzL2V4cGVjdGVkL2RvbWFpbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBhcnNl Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJz ZV9yZWdyZXNzL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxlLnNxbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9j cmVhdGVfZXh0ZW5zaW9uLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfc2NoZW1hLnNxbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9j cmVhdGVfdGFibGUuc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2RvbWFpbi5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvdGVzdF9kZGxfZGVw YXJzZS5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdC8wMDJf cmVncmVzc190ZXN0cy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbAog Y3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzLmNvbnRyb2wKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlIGIvc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZQppbmRleCBjNjI5Y2JlMzgzLi5jMjcyYzY0YTIwIDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCisrKyBiL3NyYy90ZXN0L21vZHVsZXMv TWFrZWZpbGUKQEAgLTE4LDYgKzE4LDcgQEAgU1VCRElSUyA9IFwKIAkJICB0ZXN0X2NvcHlfY2Fs bGJhY2tzIFwKIAkJICB0ZXN0X2N1c3RvbV9ybWdycyBcCiAJCSAgdGVzdF9kZGxfZGVwYXJzZSBc CisJCSAgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIFwKIAkJICB0ZXN0X2V4dGVuc2lvbnMgXAog CQkgIHRlc3RfZ2lucG9zdGluZ2xpc3QgXAogCQkgIHRlc3RfaW50ZWdlcnNldCBcCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy8uZ2l0aWdub3Jl IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdpdGlnbm9yZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41ZGNiM2ZmOTcyCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvLmdp dGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKyMgR2VuZXJhdGVkIHN1YmRpcmVjdG9yaWVzCisvbG9n LworL3Jlc3VsdHMvCisvdG1wX2NoZWNrLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwLi43ZDQ2N2Y1MjIxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxl cy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvTWFrZWZpbGUKQEAgLTAsMCArMSw0NSBAQAorIy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZpbGUgZm9yIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzCisjCisjIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorIwor IyBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9NYWtlZmlsZQorIwor Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKworCitNT0RVTEVTID0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz CitQR0ZJTEVERVNDID0gInRlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyAtIHJlZ3Jlc3Npb24gdGVz dGluZyBmb3IgRERMIGRlcGFyc2luZyIKKworRVhURU5TSU9OID0gdGVzdF9kZGxfZGVwYXJzZV9y ZWdyZXNzCitEQVRBID0gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsCisKKyMgdGVz dF9kZGxfZGVwYXJzZSBtdXN0IGJlIGZpcnN0CitSRUdSRVNTID0gdGVzdF9kZGxfZGVwYXJzZSBc CisJY3JlYXRlX2V4dGVuc2lvbiBcCisJY3JlYXRlX3NjaGVtYSBcCisJY3JlYXRlX3RhYmxlIFwK KwlhbHRlcl90YWJsZSBcCisJZG9tYWluCisKK2V4cG9ydCBSRUdSRVNTCisKK0VYVFJBX0lOU1RB TEwgPSBjb250cmliL3BnX3N0YXRfc3RhdGVtZW50cworCitUQVBfVEVTVFMgPSAxCisKK2lmZGVm IFVTRV9QR1hTCitQR19DT05GSUcgPSBwZ19jb25maWcKK1BHWFMgOj0gJChzaGVsbCAkKFBHX0NP TkZJRykgLS1wZ3hzKQoraW5jbHVkZSAkKFBHWFMpCitlbHNlCitzdWJkaXIgPSBzcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcwordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4v Li4KK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUg JCh0b3Bfc3JjZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCitSRUdSRVNT X1NITElCPSQoYWJzX3RvcF9idWlsZGRpcikvc3JjL3Rlc3QvcmVncmVzcy9yZWdyZXNzJChETFNV RkZJWCkKK2V4cG9ydCBSRUdSRVNTX1NITElCCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfZGRsX2RlcGFyc2VfcmVncmVzcy9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uY2MyNTE5ODk1YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL1JFQURNRS5tZApAQCAtMCwwICsxLDIyIEBA CisjIFRlc3RpbmcgaGFybmVzcyBmb3IgRERMIGRlcGFyc2VyCisKKyMjIFRlc3RpbmcgZ29hbHMK KworRERMIERlcGFyc2VyIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGVuY29kZSB0aGUgb3JpZ2lu YWwgRERMIGNvbW1hbmQgdG8gYSBKU09OIHN0cmluZywgdGhlbiBkZWNvZGUgaXQgdG8gYSBmdWxs eSBzY2hlbWEtcXVhbGlmaWVkIERETCBjb21tYW5kIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGhhdmUg dGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBvcmlnaW5hbCBjb21tYW5kLiBUaGlzIHRlc3RpbmcgbW9k dWxlIGFpbXMgdG8gYWNoaWV2ZSB0aGUgZm9sbG93aW5nIGZvdXIgdGVzdGluZyBmb3IgdGhlIERE TCBkZXBhcnNlcjoKKworMS4gVGVzdCB0aGF0IHRoZSBnZW5lcmF0ZWQgSlNPTiBibG9iIGlzIGV4 cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KKzIuIFRlc3QgdGhhdCB0aGUgcmUtZm9ybWVkIERETCBj b21tYW5kIGlzIGV4cGVjdGVkIHVzaW5nIFNRTCB0ZXN0cy4KKzMuIFRlc3QJdGhhdCB0aGUgcmUt Zm9ybWVkIERETCBjb21tYW5kIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdGhlIG9yaWdpbmFsIGNv bW1hbmQKKyAgIGJ5IGNvbXBhcmluZwl0aGUgcmVzdWx0cyBvZiBwZ19kdW1wLAl1c2luZyB0aGUg U1FMIHRlc3RzIGluIDEgYW5kIDIuCis0LiBUZXN0CXRoYXQgbmV3IERETCBzeW50YXggaXMgaGFu ZGxlZCBieSB0aGUgRERMIGRlcGFyc2VyIGJ5IGNhcHR1cmluZyBhbmQgZGVwYXJpbmcKKyAgIERE TCBjb21tYW5kcwlyYW4gYnkgcGdfcmVncmVzcy4KKworMSBhbmQgMiBpcyB0ZXN0ZWQgd2l0aCBT UUwgdGVzdHMsIGJ5IG5vdGljaW5nIHRoZSBkZXBhcnNlZCBKU09OIGJsb2IgYW5kIHRoZSByZS1m b3JtZWQgY29tbWFuZC4KKworR29hbCAzIGlzIHRlc3RlZCB3aXRoIFRBUCBmcmFtZXdvcmsgaW4g dC8wMDFfY29tcGFyZV9kdW1wZWRfcmVzdWx0cy5wbAorCitHb2FsIDQgaXMgdGVzdGVkIHdpdGgg VEFQIGZyYW1ld29yayBhbmQgcGdfcmVncmVzcyBpbiAwMDJfcmVncmVzc190ZXN0cy5wbAorCisj IyBVc2FnZQorCitSdW4gYG1ha2UgY2hlY2tgLCBpdCB3aWxsIHJ1biB0aGUgU1FMIHRlc3RzIGZp cnN0LCB0aGVuIGl0IHdpbGwgcnVuIHRoZSBUQVAgdGVzdHMuIFRoZSBleGVjdXRpb24gb2YgMDAy X3JlZ3Jlc3NfdGVzdHMucGwgaXMgY3VycmVudGx5IGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBpdCB3 aWxsIGZhaWwgZHVlIHRvIHVuaW1wbGVtZW50ZWQgY29tbWFuZHMgaW4gdGhlIERETCBkZXBhcnNl ci4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L2V4cGVjdGVkL2FsdGVyX3RhYmxlLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVw YXJzZV9yZWdyZXNzL2V4cGVjdGVkL2FsdGVyX3RhYmxlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi4zZTM0M2M2MjVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUu b3V0CkBAIC0wLDAgKzEsNDYgQEAKKy0tIFRlc3QgU2ltcGxlIEFMVEVSIFRBQkxFIEFERCBDT0xV TU4KK0NSRUFURSBUQUJMRSB0MSAoCithIGludCBwcmltYXJ5IGtleSwKK2IgdmFyY2hhciAoMTAp CispOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVu Y2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVu dHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0 aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHki OiB7Im9iam5hbWUiOiAidDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgImluaGVyaXRzIjog eyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJwYXJlbnRzIjogbnVsbCwgInBy ZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJPTiBDT01NSVQgJXtvbl9jb21t aXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21taXRfdmFsdWUiOiBudWxsfSwg InRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFibGVzcGFjZX1JIiwgInByZXNl bnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNpc3RlbmNlIjogIiIsICJ3aXRo X2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZhbHNlfSwgInBhcnRpdGlvbl9i eSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259cyIsICJwcmVzZW50IjogZmFs c2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9kIjogeyJmbXQiOiAiVVNJTkcg JXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYWNjZXNzX21ldGhvZCI6IG51 bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVudHMiOiBbeyJmbXQiOiAiJXtu YW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMg JXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1u fXMiLCAibmFtZSI6ICJhIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6 ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6 ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50Ijog ZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAi cHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7 ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBm YWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsi Zm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10Ijog IiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lv bn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2Nv bHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBt b2QiOiAiKDEwKSIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUiOiAidmFyY2hhciIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwg InByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAi Q09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1h bmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRlbmRlZCIsICJjb21wcmVz c2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJl c2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29s dW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fSwg eyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsICJuYW1lIjogInQx X3BrZXkiLCAidHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAi ZGVmaW5pdGlvbiI6ICJQUklNQVJZIEtFWSAoYSkifV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29t bWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLnQxIChhIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdF IHBsYWluICAgICAsIGIgcGdfY2F0YWxvZy4idmFyY2hhciIoMTApIFNUT1JBR0UgZXh0ZW5kZWQg IENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgdDFfcGtleSBQUklN QVJZIEtFWSAoYSkpICAgICAgCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElD RTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4KK0FMVEVSIFRBQkxFIHQxIEFERCBjIHRleHQ7 CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lk ZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjog W3siZm10IjogIkFERCAle29ianR5cGV9cyAle2RlZmluaXRpb259cyIsICJ0eXBlIjogImFkZCBj b2x1bW4iLCAib2JqdHlwZSI6ICJDT0xVTU4iLCAiZGVmaW5pdGlvbiI6IHsiZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiYyIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAi IiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAi cGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZh bHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFt ZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2Nh dGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQi OiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2Us ICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6 ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19fV0sICJpZGVudGl0eSI6 IHsib2JqbmFtZSI6ICJ0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy50MSBBREQgQ09MVU1OIGMgcGdfY2F0 YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIg ICAKKy0tIFRlc3QgQUxURVIgVEFCTEUgRFJPUCBDT05TVFJBSU5UCitBTFRFUiBUQUJMRSB0MSBE Uk9QIENPTlNUUkFJTlQgdDFfcGtleTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10Ijog IkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIsICJvYmp0eXBl IjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiRFJPUCBDT05TVFJBSU5UICV7Y29uc3Ry YWludH1JIiwgInR5cGUiOiAiZHJvcCBjb25zdHJhaW50IiwgImNvbnN0cmFpbnQiOiAidDFfcGtl eSJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInQxIiwgInNjaGVtYW5hbWUiOiAicHVibGlj In19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLnQxIERS T1AgQ09OU1RSQUlOVCB0MV9wa2V5CistLSBUZXN0IEFMVEVSIFRBQkxFIG9uIGluaGVyaXRlZCB0 YWJsZQorQ1JFQVRFIFRBQkxFIGd0ZXN0MzAgKAorYSBpbnQsCitiIGludCBHRU5FUkFURUQgQUxX QVlTIEFTIChhICogMikgU1RPUkVECispOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQi OiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50 aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1z ICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhf Y2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZ3Rlc3QzMCIsICJzY2hlbWFuYW1l IjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwg fUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsi Zm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwg Im9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BB Q0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9 LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVz ZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVm aW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vz c19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50Ijog ZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJs ZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29s c3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2Rl ZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJjb2x1 bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5h bWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZt dCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0 aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6 ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Np b25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVs bH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJw cmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAl e2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMg JXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJiIiwgInR5cGUiOiAi Y29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5 cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0Ijog eyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNv bGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3Jh Z2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXBy ZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6 IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMg JXtnZW5lcmF0aW9uX2V4cHJ9cyBTVE9SRUQiLCAiZ2VuZXJhdGlvbl9leHByIjogIihhIE9QRVJB VE9SKHBnX2NhdGFsb2cuKikgMikifX1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENS RUFURSAgVEFCTEUgIHB1YmxpYy5ndGVzdDMwIChhIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBs YWluICAgICAsIGIgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0UgcGxhaW4gICAgIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGEgT1BFUkFUT1IocGdfY2F0YWxvZy4qKSAyKSBTVE9SRUQpICAgICAgCitDUkVB VEUgVEFCTEUgZ3Rlc3QzMF8xICgpIElOSEVSSVRTIChndGVzdDMwKTsKK05PVElDRTogIGRlcGFy c2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3Rf ZXhpc3RzfXMgJXtpZGVudGl0eX1EICgpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29u X2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVz ZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImd0ZXN0MzBfMSIsICJzY2hlbWFuYW1lIjog InB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQp IiwgInBhcmVudHMiOiBbeyJvYmpuYW1lIjogImd0ZXN0MzAiLCAic2NoZW1hbmFtZSI6ICJwdWJs aWMifV19LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVl fXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNw YWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFs c2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2Ui OiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZt dCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVm aW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNz X21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlm X25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRB QkxFICBwdWJsaWMuZ3Rlc3QzMF8xICgpIElOSEVSSVRTIChwdWJsaWMuZ3Rlc3QzMCkgICAgIAor QUxURVIgVEFCTEUgZ3Rlc3QzMCBBTFRFUiBDT0xVTU4gYiBEUk9QIEVYUFJFU1NJT047CitOT1RJ Q0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2lkZW50aXR5 fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJUQUJMRSIsICJzdWJjbWRzIjogW3siZm10 IjogIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgRVhQUkVTU0lPTiAle2lmX2V4aXN0c31z IiwgInR5cGUiOiAiZHJvcCBleHByZXNzaW9uIiwgImNvbHVtbiI6ICJiIiwgImlmX2V4aXN0cyI6 ICIifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJndGVzdDMwIiwgInNjaGVtYW5hbWUiOiAi cHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGlj Lmd0ZXN0MzAgQUxURVIgQ09MVU1OIGIgRFJPUCBFWFBSRVNTSU9OIAorLS0gVGVzdCBBTFRFUiBU QUJMRSBTRVQgU1RBVElTVElDUworQ1JFQVRFIFRBQkxFIHRlc3Rfc3RhdCAoYSBpbnQpOworTk9U SUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJM RSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykg JXtpbmhlcml0c31zICV7dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9 cyAle2FjY2Vzc19tZXRob2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAidGVzdF9zdGF0IiwgInNjaGVtYW5hbWUiOiAicHVibGljIn0sICJpbmhlcml0cyI6IHsi Zm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVz ZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0 X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0 YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50 IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9j bGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnki OiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNl LCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7 YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxs fSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFt ZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7 Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1z IiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAi IiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAi cGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZh bHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInBy ZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJm bXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFs c2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZt dCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19XX0KK05PVElDRTog IHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMudGVzdF9zdGF0IChhIHBn X2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICApICAgICAgCitBTFRFUiBUQUJMRSB0ZXN0 X3N0YXQgQUxURVIgYSBTRVQgU1RBVElTVElDUyAtMTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkFMVEVSICV7b2JqdHlwZX1zICV7aWRlbnRpdHl9RCAle3N1YmNtZHM6LCB9cyIs ICJvYmp0eXBlIjogIlRBQkxFIiwgInN1YmNtZHMiOiBbeyJmbXQiOiAiQUxURVIgQ09MVU1OICV7 Y29sdW1ufUkgU0VUIFNUQVRJU1RJQ1MgJXtzdGF0aXN0aWNzfW4iLCAidHlwZSI6ICJzZXQgc3Rh dGlzdGljcyIsICJjb2x1bW4iOiAiYSIsICJzdGF0aXN0aWNzIjogLTF9XSwgImlkZW50aXR5Ijog eyJvYmpuYW1lIjogInRlc3Rfc3RhdCIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNF OiAgcmUtZm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy50ZXN0X3N0YXQgQUxURVIg Q09MVU1OIGEgU0VUIFNUQVRJU1RJQ1MgLTEKKy0tIFRlc3QgQUxURVIgVEFCTEUgc3ViY29tbWFu ZCByZWZlcmVuY2luZyBkcm9wcGVkIG9iamVjdAorQ1JFQVRFIFRBQkxFIGFub3RoZXIgKGYxIGlu dCwgZjIgdGV4dCwgZjMgdGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJD UkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9 RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtv bl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1 c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJhbm90aGVyIiwgInNjaGVtYW5hbWUiOiAi cHVibGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCki LCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQi OiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25f Y29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAl e3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJw ZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQi OiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0 aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21l dGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxz ZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2Vs ZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9y YWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVs dH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiZjEiLCAidHlwZSI6ICJjb2x1bW4i LCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5hbWUi OiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZtdCI6 ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0aW9u IjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9LCAiY29sc3RvcmFnZSI6ICJw bGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25f bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0s ICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVz ZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2Nv bHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtk ZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJmMiIsICJ0eXBlIjogImNv bHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBl bmFtZSI6ICJ0ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsi Zm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAi ZGVmYXVsdCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4 dGVuZGVkIiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lv bl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxs fSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInBy ZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7 Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAl e2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImYzIiwgInR5cGUiOiAi Y29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5 cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0Ijog eyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNv bGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6 ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAi ZXh0ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNz aW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51 bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAi cHJlc2VudCI6IGZhbHNlfX1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSAg VEFCTEUgIHB1YmxpYy5hbm90aGVyIChmMSBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAg ICAgLCBmMiBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBleHRlbmRlZCAgQ09MTEFURSBwZ19jYXRh bG9nLiJkZWZhdWx0IiAgICwgZjMgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENP TExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICApICAgICAgCitBTFRFUiBUQUJMRSBhbm90aGVy CisgIEFMVEVSIGYxIFRZUEUgdGV4dCBVU0lORyBmMiB8fCAnIGFuZCAnIHx8IGYzIHx8ICcgbW9y ZScsCisgIEFMVEVSIGYyIFRZUEUgYmlnaW50IFVTSU5HIGYxICogMTAsCisgIERST1AgQ09MVU1O IGYzOworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMg JXtpZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21k cyI6IFt7ImZtdCI6ICJBTFRFUiAle29ianR5cGV9cyAle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUg JXtkYXRhdHlwZX1UICV7Y29sbGF0aW9ufXMgJXt1c2luZ31zIiwgInR5cGUiOiAiYWx0ZXIgY29s dW1uIHR5cGUiLCAidXNpbmciOiB7ImZtdCI6ICJVU0lORyAle2V4cHJlc3Npb259cyIsICJleHBy ZXNzaW9uIjogIigoKGYyIHx8ICcgYW5kICc6OnRleHQpIHx8IGYzKSB8fCAnIG1vcmUnOjp0ZXh0 KSJ9LCAiY29sdW1uIjogImYxIiwgIm9ianR5cGUiOiAiQ09MVU1OIiwgImRhdGF0eXBlIjogeyJ0 eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0IiwgInNjaGVt YW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25h bWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19j YXRhbG9nIn19fSwgeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtjb2x1bW59SSBTRVQgREFU QSBUWVBFICV7ZGF0YXR5cGV9VCAle2NvbGxhdGlvbn1zICV7dXNpbmd9cyIsICJ0eXBlIjogImFs dGVyIGNvbHVtbiB0eXBlIiwgInVzaW5nIjogeyJmbXQiOiAiVVNJTkcgJXtleHByZXNzaW9ufXMi LCAiZXhwcmVzc2lvbiI6ICIoZjEgKiAxMCkifSwgImNvbHVtbiI6ICJmMiIsICJvYmp0eXBlIjog IkNPTFVNTiIsICJkYXRhdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAi dHlwZW5hbWUiOiAiaW50OCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImNvbGxhdGlv biI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkRST1Ag JXtvYmp0eXBlfXMgJXtjb2x1bW59SSAle2Nhc2NhZGV9cyIsICJ0eXBlIjogImRyb3AgY29sdW1u IiwgImNvbHVtbiI6ICJmMyIsICJjYXNjYWRlIjogeyJmbXQiOiAiQ0FTQ0FERSIsICJwcmVzZW50 IjogZmFsc2V9LCAib2JqdHlwZSI6ICJDT0xVTU4ifV0sICJpZGVudGl0eSI6IHsib2JqbmFtZSI6 ICJhbm90aGVyIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQg Y29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmFub3RoZXIgQUxURVIgQ09MVU1OIGYxIFNFVCBE QVRBIFRZUEUgcGdfY2F0YWxvZy50ZXh0IENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgVVNJ TkcgKCgoZjIgfHwgJyBhbmQgJzo6dGV4dCkgfHwgZjMpIHx8ICcgbW9yZSc6OnRleHQpLCBBTFRF UiBDT0xVTU4gZjIgU0VUIERBVEEgVFlQRSBwZ19jYXRhbG9nLmludDggIFVTSU5HIChmMSAqIDEw KSwgRFJPUCBDT0xVTU4gZjMgCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRs X2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dCBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9leHRlbnNp b24ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA2Y2NjNjJiYTkK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9leHBlY3RlZC9jcmVhdGVfZXh0ZW5zaW9uLm91dApAQCAtMCwwICsxLDYgQEAKKy0tLQor LS0tIENSRUFURV9FWFRFTlNJT04KKy0tLQorQ1JFQVRFIEVYVEVOU0lPTiBwZ19zdGF0X3N0YXRl bWVudHM7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgRVhURU5TSU9O ICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1JICV7b3B0aW9uczogfXMiLCAibmFtZSI6ICJwZ19z dGF0X3N0YXRlbWVudHMiLCAib3B0aW9ucyI6IFt7ImZtdCI6ICJTQ0hFTUEgJXtzY2hlbWF9SSIs ICJ0eXBlIjogInNjaGVtYSIsICJzY2hlbWEiOiAicHVibGljIn1dLCAiaWZfbm90X2V4aXN0cyI6 ICIifQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBFWFRFTlNJT04gIHBnX3N0 YXRfc3RhdGVtZW50cyBTQ0hFTUEgcHVibGljCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dCBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV9z Y2hlbWEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmVjYWZmZDI4 NjkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9leHBlY3RlZC9jcmVhdGVfc2NoZW1hLm91dApAQCAtMCwwICsxLDIyIEBACistLQor LS0gQ1JFQVRFX1NDSEVNQQorLS0KK0NSRUFURSBTQ0hFTUEgZm9vOworTk9USUNFOiAgZGVwYXJz ZWQganNvbjogeyJmbXQiOiAiQ1JFQVRFIFNDSEVNQSAle2lmX25vdF9leGlzdHN9cyAle25hbWV9 cyAle2F1dGhvcml6YXRpb259cyIsICJuYW1lIjogImZvbyIsICJhdXRob3JpemF0aW9uIjogeyJm bXQiOiAiQVVUSE9SSVpBVElPTiAle2F1dGhvcml6YXRpb25fcm9sZX1JIiwgInByZXNlbnQiOiBm YWxzZSwgImF1dGhvcml6YXRpb25fcm9sZSI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIifQor Tk9USUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgIGZvbyAKK0NSRUFURSBT Q0hFTUEgSUYgTk9UIEVYSVNUUyBiYXI7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6 ICJDUkVBVEUgU0NIRU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1zICV7YXV0aG9yaXphdGlv bn1zIiwgIm5hbWUiOiAiYmFyIiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFU SU9OICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXph dGlvbl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIklGIE5PVCBFWElTVFMifQorTk9U SUNFOiAgcmUtZm9ybWVkIGNvbW1hbmQ6IENSRUFURSBTQ0hFTUEgSUYgTk9UIEVYSVNUUyBiYXIg CitDUkVBVEUgU0NIRU1BIGJhejsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNS RUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfXMgJXthdXRob3JpemF0aW9ufXMi LCAibmFtZSI6ICJiYXoiLCAiYXV0aG9yaXphdGlvbiI6IHsiZm10IjogIkFVVEhPUklaQVRJT04g JXthdXRob3JpemF0aW9uX3JvbGV9SSIsICJwcmVzZW50IjogZmFsc2UsICJhdXRob3JpemF0aW9u X3JvbGUiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIn0KK05PVElDRTogIHJlLWZvcm1lZCBj b21tYW5kOiBDUkVBVEUgU0NIRU1BICBiYXogCistLSBXaWxsIG5vdCBiZSBjcmVhdGVkLCBhbmQg d2lsbCBub3QgYmUgaGFuZGxlZCBieSB0aGUKKy0tIGV2ZW50IHRyaWdnZXIKK0NSRUFURSBTQ0hF TUEgSUYgTk9UIEVYSVNUUyBiYXo7CitOT1RJQ0U6ICBzY2hlbWEgImJheiIgYWxyZWFkeSBleGlz dHMsIHNraXBwaW5nCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRfdGVzdAorICBDUkVBVEUgVEFCTEUg Zm9vIChpZCBpbnQpCitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUgU0NI RU1BICV7aWZfbm90X2V4aXN0c31zICV7bmFtZX1zICV7YXV0aG9yaXphdGlvbn1zIiwgIm5hbWUi OiAiZWxlbWVudF90ZXN0IiwgImF1dGhvcml6YXRpb24iOiB7ImZtdCI6ICJBVVRIT1JJWkFUSU9O ICV7YXV0aG9yaXphdGlvbl9yb2xlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiYXV0aG9yaXphdGlv bl9yb2xlIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiJ9CitOT1RJQ0U6ICByZS1mb3JtZWQg Y29tbWFuZDogQ1JFQVRFIFNDSEVNQSAgZWxlbWVudF90ZXN0IAorTk9USUNFOiAgZGVwYXJzZWQg anNvbjogeyJmbXQiOiAiQ1JFQVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlz dHN9cyAle2lkZW50aXR5fUQgKCV7dGFibGVfZWxlbWVudHM6LCB9cykgJXtpbmhlcml0c31zICV7 dGFibGVzcGFjZX1zICV7b25fY29tbWl0fXMgJXtwYXJ0aXRpb25fYnl9cyAle2FjY2Vzc19tZXRo b2R9cyAle3dpdGhfY2xhdXNlfXMiLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZm9vIiwgInNj aGVtYW5hbWUiOiAiZWxlbWVudF90ZXN0In0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRT ICgle3BhcmVudHM6LCB9RCkiLCAicGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAi b25fY29tbWl0IjogeyJmbXQiOiAiT04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJl c2VudCI6IGZhbHNlLCAib25fY29tbWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJm bXQiOiAiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJs ZXNwYWNlIjogbnVsbH0sICJwZXJzaXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6 ICJXSVRIIiwgInByZXNlbnQiOiBmYWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJU SVRJT04gQlkgJXtkZWZpbml0aW9ufXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6 IG51bGx9LCAiYWNjZXNzX21ldGhvZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1J IiwgInByZXNlbnQiOiBmYWxzZSwgImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlz dHMiOiAiIiwgInRhYmxlX2VsZW1lbnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1U IFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtu b3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiaWQi LCAidHlwZSI6ICJjb2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6 IGZhbHNlLCAidHlwZW5hbWUiOiAiaW50NCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwg ImRlZmF1bHQiOiB7ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVs bCI6ICIiLCAiY29sbGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSIsICJwcmVzZW50IjogZmFsc2V9 LCAiY29sc3RvcmFnZSI6ICJwbGFpbiIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNT SU9OICV7Y29tcHJlc3Npb25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Np b25fbWV0aG9kIjogbnVsbH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVE IEFMV0FZUyBBUyIsICJwcmVzZW50IjogZmFsc2V9fV19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29t bWFuZDogQ1JFQVRFICBUQUJMRSAgZWxlbWVudF90ZXN0LmZvbyAoaWQgcGdfY2F0YWxvZy5pbnQ0 IFNUT1JBR0UgcGxhaW4gICAgICkgICAgICAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMv dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV90YWJsZS5vdXQgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdGFi bGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmU1YjYyMmQwZDEK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9leHBlY3RlZC9jcmVhdGVfdGFibGUub3V0CkBAIC0wLDAgKzEsMzkgQEAKK0NSRUFURSBU QUJMRSBzaW1wbGVfdGFibGUoCisgICAgaWQgaW50LAorICAgIG5hbWUgdmFyY2hhcig1KQorKTsK K05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMg VEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwg fXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9u X2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJv YmpuYW1lIjogInNpbXBsZV90YWJsZSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJp dHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxs LCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6IHsiZm10IjogIk9OIENPTU1JVCAle29u X2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51 bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAi cHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwg IndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0 aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQi OiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJV U0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9k IjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6 ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Np b259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9j b2x1bW59cyIsICJuYW1lIjogImlkIiwgInR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5 cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1h bmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVz ZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExB VEUiLCAicHJlc2VudCI6IGZhbHNlfSwgImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Np b24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNl bnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVt biI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsi Zm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21w cmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJh dGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBl IjogeyJ0eXBtb2QiOiAiKDUpIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ2YXJj aGFyIiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRF RkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7 ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVuZGVkIiwg ImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9 SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVy YXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBm YWxzZX19XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJs aWMuc2ltcGxlX3RhYmxlIChpZCBwZ19jYXRhbG9nLmludDQgU1RPUkFHRSBwbGFpbiAgICAgLCBu YW1lIHBnX2NhdGFsb2cuInZhcmNoYXIiKDUpIFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdf Y2F0YWxvZy4iZGVmYXVsdCIgICApICAgICAgCistLSBUZXN0IFRhYmxlTGlrZUNsYXVzZSBpcyBo YW5kbGVkIHByb3Blcmx5CitDUkVBVEUgVEFCTEUgY3RsdDEgKGEgdGV4dCBDSEVDSyAobGVuZ3Ro KGEpID4gMikgUFJJTUFSWSBLRVksIGIgdGV4dCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7 ImZtdCI6ICJDUkVBVEUgJXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7 aWRlbnRpdHl9RCAoJXt0YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNw YWNlfXMgJXtvbl9jb21taXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7 d2l0aF9jbGF1c2V9cyIsICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFu YW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJlbnRz OiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1pdCI6 IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBmYWxz ZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRBQkxF U1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6IG51 bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIsICJw cmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZICV7 ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwgImFj Y2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVzZW50 IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIsICJ0 YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7 Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAl e2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogImEiLCAidHlwZSI6ICJj b2x1bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlw ZW5hbWUiOiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7 ImZtdCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29s bGF0aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjog ImRlZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJl eHRlbmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Np b25fbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVs bH0sICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJw cmVzZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAl e2NvbHN0b3JhZ2V9cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMg JXtkZWZhdWx0fXMgJXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJiIiwgInR5cGUiOiAi Y29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBmYWxzZSwgInR5 cGVuYW1lIjogInRleHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJkZWZhdWx0Ijog eyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwiOiAiIiwgImNv bGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUgJXtuYW1lfUQiLCAibmFtZSI6IHsib2JqbmFtZSI6 ICJkZWZhdWx0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9fSwgImNvbHN0b3JhZ2UiOiAi ZXh0ZW5kZWQiLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNz aW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51 bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAi cHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0 aW9ufXMiLCAibmFtZSI6ICJjdGx0MV9hX2NoZWNrIiwgInR5cGUiOiAiY29uc3RyYWludCIsICJj b250eXBlIjogImNoZWNrIiwgImRlZmluaXRpb24iOiAiQ0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0 aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSJ9LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7 bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiY3RsdDFfcGtleSIsICJ0eXBlIjogImNv bnN0cmFpbnQiLCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1B UlkgS0VZIChhKSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxF ICBwdWJsaWMuY3RsdDEgKGEgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExB VEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIGIgcGdfY2F0YWxvZy50ZXh0IFNUT1JBR0UgZXh0 ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENPTlNUUkFJTlQgY3RsdDFf YV9jaGVjayBDSEVDSyAoKHBnX2NhdGFsb2cubGVuZ3RoKGEpIE9QRVJBVE9SKHBnX2NhdGFsb2cu PikgMikpLCBDT05TVFJBSU5UIGN0bHQxX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9U SUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDog PE5VTEw+CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4gYSBTRVQgU1RPUkFHRSBNQUlO OworTk9USUNFOiAgZGVwYXJzZWQganNvbjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtp ZGVudGl0eX1EICV7c3ViY21kczosIH1zIiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6 IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9 cyIsICJ0eXBlIjogInNldCBzdG9yYWdlIiwgImNvbHVtbiI6ICJhIiwgInN0b3JhZ2UiOiAibWFp biJ9XSwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogImN0bHQxIiwgInNjaGVtYW5hbWUiOiAicHVi bGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQUxURVIgVEFCTEUgcHVibGljLmN0 bHQxIEFMVEVSIENPTFVNTiBhIFNFVCBTVE9SQUdFIG1haW4KK0FMVEVSIFRBQkxFIGN0bHQxIEFM VEVSIENPTFVNTiBiIFNFVCBTVE9SQUdFIEVYVEVSTkFMOworTk9USUNFOiAgZGVwYXJzZWQganNv bjogeyJmbXQiOiAiQUxURVIgJXtvYmp0eXBlfXMgJXtpZGVudGl0eX1EICV7c3ViY21kczosIH1z IiwgIm9ianR5cGUiOiAiVEFCTEUiLCAic3ViY21kcyI6IFt7ImZtdCI6ICJBTFRFUiBDT0xVTU4g JXtjb2x1bW59SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsICJ0eXBlIjogInNldCBzdG9yYWdl IiwgImNvbHVtbiI6ICJiIiwgInN0b3JhZ2UiOiAiZXh0ZXJuYWwifV0sICJpZGVudGl0eSI6IHsi b2JqbmFtZSI6ICJjdGx0MSIsICJzY2hlbWFuYW1lIjogInB1YmxpYyJ9fQorTk9USUNFOiAgcmUt Zm9ybWVkIGNvbW1hbmQ6IEFMVEVSIFRBQkxFIHB1YmxpYy5jdGx0MSBBTFRFUiBDT0xVTU4gYiBT RVQgU1RPUkFHRSBleHRlcm5hbAorQ1JFQVRFIFRBQkxFIGN0bHQxX2xpa2UgKExJS0UgY3RsdDEg SU5DTFVESU5HIEFMTCk7CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJDUkVBVEUg JXtwZXJzaXN0ZW5jZX1zIFRBQkxFICV7aWZfbm90X2V4aXN0c31zICV7aWRlbnRpdHl9RCAoJXt0 YWJsZV9lbGVtZW50czosIH1zKSAle2luaGVyaXRzfXMgJXt0YWJsZXNwYWNlfXMgJXtvbl9jb21t aXR9cyAle3BhcnRpdGlvbl9ieX1zICV7YWNjZXNzX21ldGhvZH1zICV7d2l0aF9jbGF1c2V9cyIs ICJpZGVudGl0eSI6IHsib2JqbmFtZSI6ICJjdGx0MV9saWtlIiwgInNjaGVtYW5hbWUiOiAicHVi bGljIn0sICJpbmhlcml0cyI6IHsiZm10IjogIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAi cGFyZW50cyI6IG51bGwsICJwcmVzZW50IjogZmFsc2V9LCAib25fY29tbWl0IjogeyJmbXQiOiAi T04gQ09NTUlUICV7b25fY29tbWl0X3ZhbHVlfXMiLCAicHJlc2VudCI6IGZhbHNlLCAib25fY29t bWl0X3ZhbHVlIjogbnVsbH0sICJ0YWJsZXNwYWNlIjogeyJmbXQiOiAiVEFCTEVTUEFDRSAle3Rh Ymxlc3BhY2V9SSIsICJwcmVzZW50IjogZmFsc2UsICJ0YWJsZXNwYWNlIjogbnVsbH0sICJwZXJz aXN0ZW5jZSI6ICIiLCAid2l0aF9jbGF1c2UiOiB7ImZtdCI6ICJXSVRIIiwgInByZXNlbnQiOiBm YWxzZX0sICJwYXJ0aXRpb25fYnkiOiB7ImZtdCI6ICJQQVJUSVRJT04gQlkgJXtkZWZpbml0aW9u fXMiLCAicHJlc2VudCI6IGZhbHNlLCAiZGVmaW5pdGlvbiI6IG51bGx9LCAiYWNjZXNzX21ldGhv ZCI6IHsiZm10IjogIlVTSU5HICV7YWNjZXNzX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwg ImFjY2Vzc19tZXRob2QiOiBudWxsfSwgImlmX25vdF9leGlzdHMiOiAiIiwgInRhYmxlX2VsZW1l bnRzIjogW3siZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdl fXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1z ICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYSIsICJ0eXBlIjogImNvbHVtbiIsICJj b2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0 ZXh0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRF RkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7 ImZtdCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIs ICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogIm1haW4iLCAiY29t cHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwg InByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9uX21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVk X2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBBTFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNl fX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlwZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMg JXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMgJXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7 Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAiYiIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0 eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJ0ZXh0 IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFV TFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZt dCI6ICJDT0xMQVRFICV7bmFtZX1EIiwgIm5hbWUiOiB7Im9iam5hbWUiOiAiZGVmYXVsdCIsICJz Y2hlbWFuYW1lIjogInBnX2NhdGFsb2cifX0sICJjb2xzdG9yYWdlIjogImV4dGVybmFsIiwgImNv bXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIs ICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRl ZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxz ZX19LCB7ImZtdCI6ICJDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUi OiAiY3RsdDFfYV9jaGVjayIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlwZSI6ICJjaGVj ayIsICJkZWZpbml0aW9uIjogIkNIRUNLICgocGdfY2F0YWxvZy5sZW5ndGgoYSkgT1BFUkFUT1Io cGdfY2F0YWxvZy4+KSAyKSkifSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmlu aXRpb259cyIsICJuYW1lIjogImN0bHQxX2xpa2VfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQi LCAiY29udHlwZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChh KSJ9XX0KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiBDUkVBVEUgIFRBQkxFICBwdWJsaWMu Y3RsdDFfbGlrZSAoYSBwZ19jYXRhbG9nLnRleHQgU1RPUkFHRSBtYWluICBDT0xMQVRFIHBnX2Nh dGFsb2cuImRlZmF1bHQiICAgLCBiIHBnX2NhdGFsb2cudGV4dCBTVE9SQUdFIGV4dGVybmFsICBD T0xMQVRFIHBnX2NhdGFsb2cuImRlZmF1bHQiICAgLCBDT05TVFJBSU5UIGN0bHQxX2FfY2hlY2sg Q0hFQ0sgKChwZ19jYXRhbG9nLmxlbmd0aChhKSBPUEVSQVRPUihwZ19jYXRhbG9nLj4pIDIpKSwg Q09OU1RSQUlOVCBjdGx0MV9saWtlX3BrZXkgUFJJTUFSWSBLRVkgKGEpKSAgICAgIAorTk9USUNF OiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogPE5V TEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBj b21tYW5kOiA8TlVMTD4KKy0tIFRlc3QgZm9yZWlnbiBrZXkgY29uc3RyYWludCBpcyBoYW5kbGVk IGluIGEgZm9sbG93aW5nIEFMVEVSIFRBQkxFIEFERCBDT05TVFJBSU5UIEZPUkVJR04gS0VZIFJF RkVSRU5DRVMgc3ViY29tbWFuZAorQ1JFQVRFIFRBQkxFIHByb2R1Y3QgKGlkIGludCBQUklNQVJZ IEtFWSwgbmFtZSB0ZXh0KTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFU RSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICgl e3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxlc3BhY2V9cyAle29uX2Nv bW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgJXt3aXRoX2NsYXVzZX1z IiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogInByb2R1Y3QiLCAic2NoZW1hbmFtZSI6ICJwdWJs aWMifSwgImluaGVyaXRzIjogeyJmbXQiOiAiSU5IRVJJVFMgKCV7cGFyZW50czosIH1EKSIsICJw YXJlbnRzIjogbnVsbCwgInByZXNlbnQiOiBmYWxzZX0sICJvbl9jb21taXQiOiB7ImZtdCI6ICJP TiBDT01NSVQgJXtvbl9jb21taXRfdmFsdWV9cyIsICJwcmVzZW50IjogZmFsc2UsICJvbl9jb21t aXRfdmFsdWUiOiBudWxsfSwgInRhYmxlc3BhY2UiOiB7ImZtdCI6ICJUQUJMRVNQQUNFICV7dGFi bGVzcGFjZX1JIiwgInByZXNlbnQiOiBmYWxzZSwgInRhYmxlc3BhY2UiOiBudWxsfSwgInBlcnNp c3RlbmNlIjogIiIsICJ3aXRoX2NsYXVzZSI6IHsiZm10IjogIldJVEgiLCAicHJlc2VudCI6IGZh bHNlfSwgInBhcnRpdGlvbl9ieSI6IHsiZm10IjogIlBBUlRJVElPTiBCWSAle2RlZmluaXRpb259 cyIsICJwcmVzZW50IjogZmFsc2UsICJkZWZpbml0aW9uIjogbnVsbH0sICJhY2Nlc3NfbWV0aG9k IjogeyJmbXQiOiAiVVNJTkcgJXthY2Nlc3NfbWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAi YWNjZXNzX21ldGhvZCI6IG51bGx9LCAiaWZfbm90X2V4aXN0cyI6ICIiLCAidGFibGVfZWxlbWVu dHMiOiBbeyJmbXQiOiAiJXtuYW1lfUkgJXtjb2x0eXBlfVQgU1RPUkFHRSAle2NvbHN0b3JhZ2V9 cyAle2NvbXByZXNzaW9ufXMgJXtjb2xsYXRpb259cyAle25vdF9udWxsfXMgJXtkZWZhdWx0fXMg JXtnZW5lcmF0ZWRfY29sdW1ufXMiLCAibmFtZSI6ICJpZCIsICJ0eXBlIjogImNvbHVtbiIsICJj b2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJp bnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRF RkFVTFQiLCAicHJlc2VudCI6IGZhbHNlfSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7 ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWlu IiwgImNvbXByZXNzaW9uIjogeyJmbXQiOiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRo b2R9SSIsICJwcmVzZW50IjogZmFsc2UsICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdl bmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQi OiBmYWxzZX19LCB7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdFICV7Y29sc3Rv cmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9cyAle2RlZmF1 bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJjb2x1 bW4iLCAiY29sdHlwZSI6IHsidHlwbW9kIjogIiIsICJ0eXBhcnJheSI6IGZhbHNlLCAidHlwZW5h bWUiOiAidGV4dCIsICJzY2hlbWFuYW1lIjogInBnX2NhdGFsb2cifSwgImRlZmF1bHQiOiB7ImZt dCI6ICJERUZBVUxUIiwgInByZXNlbnQiOiBmYWxzZX0sICJub3RfbnVsbCI6ICIiLCAiY29sbGF0 aW9uIjogeyJmbXQiOiAiQ09MTEFURSAle25hbWV9RCIsICJuYW1lIjogeyJvYmpuYW1lIjogImRl ZmF1bHQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn19LCAiY29sc3RvcmFnZSI6ICJleHRl bmRlZCIsICJjb21wcmVzc2lvbiI6IHsiZm10IjogIkNPTVBSRVNTSU9OICV7Y29tcHJlc3Npb25f bWV0aG9kfUkiLCAicHJlc2VudCI6IGZhbHNlLCAiY29tcHJlc3Npb25fbWV0aG9kIjogbnVsbH0s ICJnZW5lcmF0ZWRfY29sdW1uIjogeyJmbXQiOiAiR0VORVJBVEVEIEFMV0FZUyBBUyIsICJwcmVz ZW50IjogZmFsc2V9fSwgeyJmbXQiOiAiQ09OU1RSQUlOVCAle25hbWV9SSAle2RlZmluaXRpb259 cyIsICJuYW1lIjogInByb2R1Y3RfcGtleSIsICJ0eXBlIjogImNvbnN0cmFpbnQiLCAiY29udHlw ZSI6ICJwcmltYXJ5IGtleSIsICJkZWZpbml0aW9uIjogIlBSSU1BUlkgS0VZIChpZCkifV19CitO T1RJQ0U6ICByZS1mb3JtZWQgY29tbWFuZDogQ1JFQVRFICBUQUJMRSAgcHVibGljLnByb2R1Y3Qg KGlkIHBnX2NhdGFsb2cuaW50NCBTVE9SQUdFIHBsYWluICAgICAsIG5hbWUgcGdfY2F0YWxvZy50 ZXh0IFNUT1JBR0UgZXh0ZW5kZWQgIENPTExBVEUgcGdfY2F0YWxvZy4iZGVmYXVsdCIgICAsIENP TlNUUkFJTlQgcHJvZHVjdF9wa2V5IFBSSU1BUlkgS0VZIChpZCkpICAgICAgCitOT1RJQ0U6ICBk ZXBhcnNlZCBqc29uOiA8TlVMTD4KK05PVElDRTogIHJlLWZvcm1lZCBjb21tYW5kOiA8TlVMTD4K K0NSRUFURSBUQUJMRSBvcmRlcnMgKG9yZGVyX2lkIGludCBQUklNQVJZIEtFWSwgcHJvZHVjdF9p ZCBpbnQKK1JFRkVSRU5DRVMgcHJvZHVjdCAoaWQpKTsKK05PVElDRTogIGRlcGFyc2VkIGpzb246 IHsiZm10IjogIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMg JXtpZGVudGl0eX1EICgle3RhYmxlX2VsZW1lbnRzOiwgfXMpICV7aW5oZXJpdHN9cyAle3RhYmxl c3BhY2V9cyAle29uX2NvbW1pdH1zICV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMg JXt3aXRoX2NsYXVzZX1zIiwgImlkZW50aXR5IjogeyJvYmpuYW1lIjogIm9yZGVycyIsICJzY2hl bWFuYW1lIjogInB1YmxpYyJ9LCAiaW5oZXJpdHMiOiB7ImZtdCI6ICJJTkhFUklUUyAoJXtwYXJl bnRzOiwgfUQpIiwgInBhcmVudHMiOiBudWxsLCAicHJlc2VudCI6IGZhbHNlfSwgIm9uX2NvbW1p dCI6IHsiZm10IjogIk9OIENPTU1JVCAle29uX2NvbW1pdF92YWx1ZX1zIiwgInByZXNlbnQiOiBm YWxzZSwgIm9uX2NvbW1pdF92YWx1ZSI6IG51bGx9LCAidGFibGVzcGFjZSI6IHsiZm10IjogIlRB QkxFU1BBQ0UgJXt0YWJsZXNwYWNlfUkiLCAicHJlc2VudCI6IGZhbHNlLCAidGFibGVzcGFjZSI6 IG51bGx9LCAicGVyc2lzdGVuY2UiOiAiIiwgIndpdGhfY2xhdXNlIjogeyJmbXQiOiAiV0lUSCIs ICJwcmVzZW50IjogZmFsc2V9LCAicGFydGl0aW9uX2J5IjogeyJmbXQiOiAiUEFSVElUSU9OIEJZ ICV7ZGVmaW5pdGlvbn1zIiwgInByZXNlbnQiOiBmYWxzZSwgImRlZmluaXRpb24iOiBudWxsfSwg ImFjY2Vzc19tZXRob2QiOiB7ImZtdCI6ICJVU0lORyAle2FjY2Vzc19tZXRob2R9SSIsICJwcmVz ZW50IjogZmFsc2UsICJhY2Nlc3NfbWV0aG9kIjogbnVsbH0sICJpZl9ub3RfZXhpc3RzIjogIiIs ICJ0YWJsZV9lbGVtZW50cyI6IFt7ImZtdCI6ICIle25hbWV9SSAle2NvbHR5cGV9VCBTVE9SQUdF ICV7Y29sc3RvcmFnZX1zICV7Y29tcHJlc3Npb259cyAle2NvbGxhdGlvbn1zICV7bm90X251bGx9 cyAle2RlZmF1bHR9cyAle2dlbmVyYXRlZF9jb2x1bW59cyIsICJuYW1lIjogIm9yZGVyX2lkIiwg InR5cGUiOiAiY29sdW1uIiwgImNvbHR5cGUiOiB7InR5cG1vZCI6ICIiLCAidHlwYXJyYXkiOiBm YWxzZSwgInR5cGVuYW1lIjogImludDQiLCAic2NoZW1hbmFtZSI6ICJwZ19jYXRhbG9nIn0sICJk ZWZhdWx0IjogeyJmbXQiOiAiREVGQVVMVCIsICJwcmVzZW50IjogZmFsc2V9LCAibm90X251bGwi OiAiIiwgImNvbGxhdGlvbiI6IHsiZm10IjogIkNPTExBVEUiLCAicHJlc2VudCI6IGZhbHNlfSwg ImNvbHN0b3JhZ2UiOiAicGxhaW4iLCAiY29tcHJlc3Npb24iOiB7ImZtdCI6ICJDT01QUkVTU0lP TiAle2NvbXByZXNzaW9uX21ldGhvZH1JIiwgInByZXNlbnQiOiBmYWxzZSwgImNvbXByZXNzaW9u X21ldGhvZCI6IG51bGx9LCAiZ2VuZXJhdGVkX2NvbHVtbiI6IHsiZm10IjogIkdFTkVSQVRFRCBB TFdBWVMgQVMiLCAicHJlc2VudCI6IGZhbHNlfX0sIHsiZm10IjogIiV7bmFtZX1JICV7Y29sdHlw ZX1UIFNUT1JBR0UgJXtjb2xzdG9yYWdlfXMgJXtjb21wcmVzc2lvbn1zICV7Y29sbGF0aW9ufXMg JXtub3RfbnVsbH1zICV7ZGVmYXVsdH1zICV7Z2VuZXJhdGVkX2NvbHVtbn1zIiwgIm5hbWUiOiAi cHJvZHVjdF9pZCIsICJ0eXBlIjogImNvbHVtbiIsICJjb2x0eXBlIjogeyJ0eXBtb2QiOiAiIiwg InR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdf Y2F0YWxvZyJ9LCAiZGVmYXVsdCI6IHsiZm10IjogIkRFRkFVTFQiLCAicHJlc2VudCI6IGZhbHNl fSwgIm5vdF9udWxsIjogIiIsICJjb2xsYXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNl bnQiOiBmYWxzZX0sICJjb2xzdG9yYWdlIjogInBsYWluIiwgImNvbXByZXNzaW9uIjogeyJmbXQi OiAiQ09NUFJFU1NJT04gJXtjb21wcmVzc2lvbl9tZXRob2R9SSIsICJwcmVzZW50IjogZmFsc2Us ICJjb21wcmVzc2lvbl9tZXRob2QiOiBudWxsfSwgImdlbmVyYXRlZF9jb2x1bW4iOiB7ImZtdCI6 ICJHRU5FUkFURUQgQUxXQVlTIEFTIiwgInByZXNlbnQiOiBmYWxzZX19LCB7ImZtdCI6ICJDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3BrZXkiLCAi dHlwZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAicHJpbWFyeSBrZXkiLCAiZGVmaW5pdGlv biI6ICJQUklNQVJZIEtFWSAob3JkZXJfaWQpIn1dfQorTk9USUNFOiAgcmUtZm9ybWVkIGNvbW1h bmQ6IENSRUFURSAgVEFCTEUgIHB1YmxpYy5vcmRlcnMgKG9yZGVyX2lkIHBnX2NhdGFsb2cuaW50 NCBTVE9SQUdFIHBsYWluICAgICAsIHByb2R1Y3RfaWQgcGdfY2F0YWxvZy5pbnQ0IFNUT1JBR0Ug cGxhaW4gICAgICwgQ09OU1RSQUlOVCBvcmRlcnNfcGtleSBQUklNQVJZIEtFWSAob3JkZXJfaWQp KSAgICAgIAorTk9USUNFOiAgZGVwYXJzZWQganNvbjogPE5VTEw+CitOT1RJQ0U6ICByZS1mb3Jt ZWQgY29tbWFuZDogPE5VTEw+CitOT1RJQ0U6ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRF UiAle29ianR5cGV9cyAle2lkZW50aXR5fUQgJXtzdWJjbWRzOiwgfXMiLCAib2JqdHlwZSI6ICJU QUJMRSIsICJzdWJjbWRzIjogW3siZm10IjogIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVm aW5pdGlvbn1zIiwgIm5hbWUiOiAib3JkZXJzX3Byb2R1Y3RfaWRfZmtleSIsICJ0eXBlIjogImFk ZCBjb25zdHJhaW50IiwgImRlZmluaXRpb24iOiAiRk9SRUlHTiBLRVkgKHByb2R1Y3RfaWQpIFJF RkVSRU5DRVMgcHVibGljLnByb2R1Y3QoaWQpIn1dLCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAi b3JkZXJzIiwgInNjaGVtYW5hbWUiOiAicHVibGljIn19CitOT1RJQ0U6ICByZS1mb3JtZWQgY29t bWFuZDogQUxURVIgVEFCTEUgcHVibGljLm9yZGVycyBBREQgQ09OU1RSQUlOVCBvcmRlcnNfcHJv ZHVjdF9pZF9ma2V5IEZPUkVJR04gS0VZIChwcm9kdWN0X2lkKSBSRUZFUkVOQ0VTIHB1YmxpYy5w cm9kdWN0KGlkKQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MvZXhwZWN0ZWQvZG9tYWluLm91dCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2RvbWFpbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMC4uODJmNmExOWMxZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL2V4cGVjdGVkL2RvbWFpbi5vdXQKQEAg LTAsMCArMSw2IEBACitDUkVBVEUgRE9NQUlOIGQxIEFTIElOVCBDSEVDSyAoVkFMVUUgPiAxKTsK K05PVElDRTogIGRlcGFyc2VkIGpzb246IHsiZm10IjogIkNSRUFURSBET01BSU4gJXtpZGVudGl0 eX1EIEFTICV7dHlwZX1UICV7bm90X251bGx9cyAle2NvbnN0cmFpbnRzfXMgJXtjb2xsYXRpb259 cyIsICJ0eXBlIjogeyJ0eXBtb2QiOiAiIiwgInR5cGFycmF5IjogZmFsc2UsICJ0eXBlbmFtZSI6 ICJpbnQ0IiwgInNjaGVtYW5hbWUiOiAicGdfY2F0YWxvZyJ9LCAiaWRlbnRpdHkiOiB7Im9iam5h bWUiOiAiZDEiLCAic2NoZW1hbmFtZSI6ICJwdWJsaWMifSwgIm5vdF9udWxsIjogIiIsICJjb2xs YXRpb24iOiB7ImZtdCI6ICJDT0xMQVRFIiwgInByZXNlbnQiOiBmYWxzZX0sICJjb25zdHJhaW50 cyI6IHsiZm10IjogIiV7ZWxlbWVudHM6LCB9cyIsICJlbGVtZW50cyI6IFt7ImZtdCI6ICJDT05T VFJBSU5UICV7bmFtZX1JICV7ZGVmaW5pdGlvbn1zIiwgIm5hbWUiOiAiZDFfY2hlY2siLCAidHlw ZSI6ICJjb25zdHJhaW50IiwgImNvbnR5cGUiOiAiY2hlY2siLCAiZGVmaW5pdGlvbiI6ICJDSEVD SyAoKFZBTFVFIE9QRVJBVE9SKHBnX2NhdGFsb2cuPikgMSkpIn1dfX0KK05PVElDRTogIHJlLWZv cm1lZCBjb21tYW5kOiBDUkVBVEUgRE9NQUlOIHB1YmxpYy5kMSBBUyBwZ19jYXRhbG9nLmludDQg IENPTlNUUkFJTlQgZDFfY2hlY2sgQ0hFQ0sgKChWQUxVRSBPUEVSQVRPUihwZ19jYXRhbG9nLj4p IDEpKSAKK0FMVEVSIERPTUFJTiBkMSBEUk9QIENPTlNUUkFJTlQgZDFfQ0hFQ0s7CitOT1RJQ0U6 ICBkZXBhcnNlZCBqc29uOiB7ImZtdCI6ICJBTFRFUiBET01BSU4gJXtpZGVudGl0eX1EIERST1Ag Q09OU1RSQUlOVCBJRiBFWElTVFMgJXtjb25zdHJhaW50X25hbWV9cyAle2Nhc2NhZGV9cyIsICJ0 eXBlIjogImRyb3AgY29uc3RyYWludCIsICJjYXNjYWRlIjogeyJmbXQiOiAiQ0FTQ0FERSIsICJw cmVzZW50IjogZmFsc2V9LCAiaWRlbnRpdHkiOiB7Im9iam5hbWUiOiAiZDEiLCAic2NoZW1hbmFt ZSI6ICJwdWJsaWMifSwgImNvbnN0cmFpbnRfbmFtZSI6ICJkMV9jaGVjayJ9CitOT1RJQ0U6ICBy ZS1mb3JtZWQgY29tbWFuZDogQUxURVIgRE9NQUlOIHB1YmxpYy5kMSBEUk9QIENPTlNUUkFJTlQg SUYgRVhJU1RTIGQxX2NoZWNrIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9leHBlY3RlZC90ZXN0X2RkbF9kZXBh cnNlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMGUyYmYyNTFh Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvZXhwZWN0ZWQvdGVzdF9kZGxfZGVwYXJzZS5vdXQKQEAgLTAsMCArMSwxOCBAQAorQ1JF QVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CitDUkVBVEUgT1IgUkVQTEFD RSBGVU5DVElPTiB0ZXN0X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBldmVudF90cmlnZ2VyIExB TkdVQUdFIHBscGdzcWwgQVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7CisJZGVwYXJzZWRfanNv biB0ZXh0OworQkVHSU4KKwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJf ZGRsX2NvbW1hbmRzKCkKKwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBwZ19jYXRhbG9nLmRkbF9k ZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNFICdkZXBhcnNlZCBqc29u OiAlJywgZGVwYXJzZWRfanNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1mb3JtZWQgY29tbWFuZDog JScsIHBnX2NhdGFsb2cuZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGVwYXJzZWRfanNvbik7 CisJRU5EIExPT1A7CitFTkQ7CiskJDsKK0NSRUFURSBFVkVOVCBUUklHR0VSIHRlc3RfZGRsX2Rl cGFyc2UKK09OIGRkbF9jb21tYW5kX2VuZCBFWEVDVVRFIFBST0NFRFVSRSB0ZXN0X2RkbF9kZXBh cnNlKCk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdy ZXNzL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjdh MTUyYTIzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9tZXNvbi5idWlsZApAQCAtMCwwICsxLDQyIEBACisjIEZJWE1FOiBwcmV2 ZW50IGluc3RhbGwgZHVyaW5nIG1haW4gaW5zdGFsbCwgYnV0IG5vdCBkdXJpbmcgdGVzdCA6Lwor Cit0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Nfc291cmNlcyA9IGZpbGVzKAorICAndGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2luZG93cycKKyAg dGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdp bjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3MnLAorICAgICctLUZJTEVERVNDJywgJ3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcyAt IHJlZ3Jlc3Npb24gdGVzdGluZyBmb3IgRERMIGRlcGFyc2luZycsXSkKK2VuZGlmCisKK3Rlc3Rf ZGRsX2RlcGFyc2VfcmVncmVzcyA9IHNoYXJlZF9tb2R1bGUoJ3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcycsCisgIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzc19zb3VyY2VzLAorICBrd2FyZ3M6IHBn X21vZF9hcmdzLAorKQordGVzdHByZXBfdGFyZ2V0cyArPSB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jl c3MKKworaW5zdGFsbF9kYXRhKAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmNvbnRyb2wn LAorICAndGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsJywKKyAga3dhcmdzOiBjb250 cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0geworICAnbmFtZSc6ICd0ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MnLAorICAnc2QnOiBtZXNvbi5jdXJyZW50X3NvdXJjZV9kaXIoKSwKKyAgJ2Jk JzogbWVzb24uY3VycmVudF9idWlsZF9kaXIoKSwKKyAgJ3JlZ3Jlc3MnOiB7CisgICAgJ3NxbCc6 IFsKKyAgICAgICd0ZXN0X2RkbF9kZXBhcnNlJywKKyAgICAgICdjcmVhdGVfZXh0ZW5zaW9uJywK KyAgICAgICdjcmVhdGVfc2NoZW1hJywKKyAgICAgICdjcmVhdGVfdGFibGUnLAorICAgIF0sCisg IH0sCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2NvbXBhcmVfZHVt cGVkX3Jlc3VsdHMucGwnLAorICAgIF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxlLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wMzhiOTIzMzFlCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mv c3FsL2FsdGVyX3RhYmxlLnNxbApAQCAtMCwwICsxLDI4IEBACistLSBUZXN0IFNpbXBsZSBBTFRF UiBUQUJMRSBBREQgQ09MVU1OCitDUkVBVEUgVEFCTEUgdDEgKAorYSBpbnQgcHJpbWFyeSBrZXks CitiIHZhcmNoYXIgKDEwKQorKTsKK0FMVEVSIFRBQkxFIHQxIEFERCBjIHRleHQ7CisKKy0tIFRl c3QgQUxURVIgVEFCTEUgRFJPUCBDT05TVFJBSU5UCitBTFRFUiBUQUJMRSB0MSBEUk9QIENPTlNU UkFJTlQgdDFfcGtleTsKKworLS0gVGVzdCBBTFRFUiBUQUJMRSBvbiBpbmhlcml0ZWQgdGFibGUK K0NSRUFURSBUQUJMRSBndGVzdDMwICgKK2EgaW50LAorYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBB UyAoYSAqIDIpIFNUT1JFRAorKTsKK0NSRUFURSBUQUJMRSBndGVzdDMwXzEgKCkgSU5IRVJJVFMg KGd0ZXN0MzApOworQUxURVIgVEFCTEUgZ3Rlc3QzMCBBTFRFUiBDT0xVTU4gYiBEUk9QIEVYUFJF U1NJT047CisKKy0tIFRlc3QgQUxURVIgVEFCTEUgU0VUIFNUQVRJU1RJQ1MKK0NSRUFURSBUQUJM RSB0ZXN0X3N0YXQgKGEgaW50KTsKK0FMVEVSIFRBQkxFIHRlc3Rfc3RhdCBBTFRFUiBhIFNFVCBT VEFUSVNUSUNTIC0xOworCistLSBUZXN0IEFMVEVSIFRBQkxFIHN1YmNvbW1hbmQgcmVmZXJlbmNp bmcgZHJvcHBlZCBvYmplY3QKK0NSRUFURSBUQUJMRSBhbm90aGVyIChmMSBpbnQsIGYyIHRleHQs IGYzIHRleHQpOworQUxURVIgVEFCTEUgYW5vdGhlcgorICBBTFRFUiBmMSBUWVBFIHRleHQgVVNJ TkcgZjIgfHwgJyBhbmQgJyB8fCBmMyB8fCAnIG1vcmUnLAorICBBTFRFUiBmMiBUWVBFIGJpZ2lu dCBVU0lORyBmMSAqIDEwLAorICBEUk9QIENPTFVNTiBmMzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfZXh0ZW5zaW9uLnNx bCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVf ZXh0ZW5zaW9uLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kMjNl N2ZkOWNlCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9leHRlbnNpb24uc3FsCkBAIC0wLDAgKzEsNSBAQAorLS0t CistLS0gQ1JFQVRFX0VYVEVOU0lPTgorLS0tCisKK0NSRUFURSBFWFRFTlNJT04gcGdfc3RhdF9z dGF0ZW1lbnRzOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNl X3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Rk bF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL2NyZWF0ZV9zY2hlbWEuc3FsCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjEwYjEzZjBhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3NjaGVtYS5z cWwKQEAgLTAsMCArMSwxNiBAQAorLS0KKy0tIENSRUFURV9TQ0hFTUEKKy0tCisKK0NSRUFURSBT Q0hFTUEgZm9vOworCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElTVFMgYmFyOworCitDUkVBVEUg U0NIRU1BIGJhejsKKworLS0gV2lsbCBub3QgYmUgY3JlYXRlZCwgYW5kIHdpbGwgbm90IGJlIGhh bmRsZWQgYnkgdGhlCistLSBldmVudCB0cmlnZ2VyCitDUkVBVEUgU0NIRU1BIElGIE5PVCBFWElT VFMgYmF6OworCitDUkVBVEUgU0NIRU1BIGVsZW1lbnRfdGVzdAorICBDUkVBVEUgVEFCTEUgZm9v IChpZCBpbnQpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2Vf cmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC9jcmVhdGVfdGFibGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmU4ODYzZDA3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9zcWwvY3JlYXRlX3RhYmxlLnNxbApA QCAtMCwwICsxLDE1IEBACitDUkVBVEUgVEFCTEUgc2ltcGxlX3RhYmxlKAorICAgIGlkIGludCwK KyAgICBuYW1lIHZhcmNoYXIoNSkKKyk7CisKKy0tIFRlc3QgVGFibGVMaWtlQ2xhdXNlIGlzIGhh bmRsZWQgcHJvcGVybHkKK0NSRUFURSBUQUJMRSBjdGx0MSAoYSB0ZXh0IENIRUNLIChsZW5ndGgo YSkgPiAyKSBQUklNQVJZIEtFWSwgYiB0ZXh0KTsKK0FMVEVSIFRBQkxFIGN0bHQxIEFMVEVSIENP TFVNTiBhIFNFVCBTVE9SQUdFIE1BSU47CitBTFRFUiBUQUJMRSBjdGx0MSBBTFRFUiBDT0xVTU4g YiBTRVQgU1RPUkFHRSBFWFRFUk5BTDsKK0NSRUFURSBUQUJMRSBjdGx0MV9saWtlIChMSUtFIGN0 bHQxIElOQ0xVRElORyBBTEwpOworCistLSBUZXN0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgaXMg aGFuZGxlZCBpbiBhIGZvbGxvd2luZyBBTFRFUiBUQUJMRSBBREQgQ09OU1RSQUlOVCBGT1JFSUdO IEtFWSBSRUZFUkVOQ0VTIHN1YmNvbW1hbmQKK0NSRUFURSBUQUJMRSBwcm9kdWN0IChpZCBpbnQg UFJJTUFSWSBLRVksIG5hbWUgdGV4dCk7CitDUkVBVEUgVEFCTEUgb3JkZXJzIChvcmRlcl9pZCBp bnQgUFJJTUFSWSBLRVksIHByb2R1Y3RfaWQgaW50CitSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSk7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy9z cWwvZG9tYWluLnNxbCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNz L3NxbC9kb21haW4uc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjU2 ODc0ODZiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy9zcWwvZG9tYWluLnNxbApAQCAtMCwwICsxLDIgQEAKK0NSRUFURSBET01B SU4gZDEgQVMgSU5UIENIRUNLIChWQUxVRSA+IDEpOworQUxURVIgRE9NQUlOIGQxIERST1AgQ09O U1RSQUlOVCBkMV9DSEVDSzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3NxbC90ZXN0X2RkbF9kZXBhcnNlLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wODg5ZmEwMmY5Ci0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3Mvc3FsL3Rl c3RfZGRsX2RlcGFyc2Uuc3FsCkBAIC0wLDAgKzEsMjAgQEAKK0NSRUFURSBFWFRFTlNJT04gdGVz dF9kZGxfZGVwYXJzZV9yZWdyZXNzOworCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiB0ZXN0 X2RkbF9kZXBhcnNlKCkKKyAgUkVUVVJOUyBldmVudF90cmlnZ2VyIExBTkdVQUdFIHBscGdzcWwg QVMKKyQkCitERUNMQVJFCisJciByZWNvcmQ7CisJZGVwYXJzZWRfanNvbiB0ZXh0OworQkVHSU4K KwlGT1IgciBJTiBTRUxFQ1QgKiBGUk9NIHBnX2V2ZW50X3RyaWdnZXJfZGRsX2NvbW1hbmRzKCkK KwlMT09QCisJCWRlcGFyc2VkX2pzb24gPSBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24o ci5jb21tYW5kKTsKKwkJUkFJU0UgTk9USUNFICdkZXBhcnNlZCBqc29uOiAlJywgZGVwYXJzZWRf anNvbjsKKwkJUkFJU0UgTk9USUNFICdyZS1mb3JtZWQgY29tbWFuZDogJScsIHBnX2NhdGFsb2cu ZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQoZGVwYXJzZWRfanNvbik7CisJRU5EIExPT1A7CitF TkQ7CiskJDsKKworQ1JFQVRFIEVWRU5UIFRSSUdHRVIgdGVzdF9kZGxfZGVwYXJzZQorT04gZGRs X2NvbW1hbmRfZW5kIEVYRUNVVEUgUFJPQ0VEVVJFIHRlc3RfZGRsX2RlcGFyc2UoKTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAxX2Nv bXBhcmVfZHVtcGVkX3Jlc3VsdHMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1bXBlZF9yZXN1bHRzLnBsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjY2NGFkMzQ5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMV9jb21wYXJlX2R1 bXBlZF9yZXN1bHRzLnBsCkBAIC0wLDAgKzEsMTgxIEBACit1c2Ugc3RyaWN0OwordXNlIHdhcm5p bmdzOwordXNlIEVudjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6QmFzZW5hbWU7 CisKK3N1YiBleGVjdXRlX3Rlc3RfY2FzZSB7CisgICAgbXkgJHRlc3RfbmFtZSA9ICRfWzBdOwor ICAgIG15ICRwdWJfbm9kZSA9ICRfWzFdOworICAgIG15ICRzdWJfbm9kZSA9ICRfWzJdOworICAg IG15ICRkYm5hbWUgPSAkX1szXTsKKyAgICBteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRl c3Q6OlV0aWxzOjp0bXBfY2hlY2s7CisKKyAgICAjIHNldCB1cCBkZXBhcnNlIHRlc3RpbmcgcmVz b3VyY2VzCisgICAgY3JlYXRlX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHViX25vZGUo JHB1Yl9ub2RlLCAkZGJuYW1lKTsKKworICAgIG15ICR0ZXN0X2ZpbGUgPSAiLi9zcWwvJHt0ZXN0 X25hbWV9LnNxbCI7CisgICAgbXkgJGNvbnRlbnQgPSBkb3tsb2NhbChAQVJHViwkLyk9JHRlc3Rf ZmlsZTs8Pn07CisKKyAgICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAkY29udGVudCk7CisK KyAgICAjIHJldHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgZnJvbSBkZXBhcnNlZCBERExz IG9uIHB1YiBub2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsKKyAgICAkcHViX25vZGUgLT4gcHNx bCgkZGJuYW1lLHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChk ZGwpIHx8ICc7JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIgQlkgaWQgQVNDKSwKKyAgICAgICAg c3Rkb3V0ID0+IFwkZGRsX3NxbCk7CisKKyAgICBwcmludCAiXG5zdGFydCBwcmludGluZyByZS1m b3JtZWQgc3FsXG4iOworICAgIHByaW50ICRkZGxfc3FsOworICAgIHByaW50ICJcbmVuZCBwcmlu dGluZyByZS1mb3JtZWQgc3FsXG4iOworICAgICMgZXhlY3V0ZSBTUUwgY29tbWFuZHMgb24gc3Vi IG5vZGUKKyAgICAkc3ViX25vZGUgLT4gcHNxbCgkZGJuYW1lLCAkZGRsX3NxbCk7CisKKyAgICAj IGNsZWFuIHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBjbGVhbl9kZXBhcnNlX3Rl c3RpbmdfcmVzb3VyY2VzX29uX3B1Yl9ub2RlKCRwdWJfbm9kZSwgJGRibmFtZSk7CisKKyAgICAj IGR1bXAgZnJvbSBwdWIgbm9kZSBhbmQgc3ViIG5vZGUKKyAgICBta2RpciAke291dHB1dGRpcn0u Ii9kdW1wcyIsIDA3NTU7CisgICAgbXkgJHB1Yl9kdW1wID0gJHtvdXRwdXRkaXJ9LiIvZHVtcHMv JHt0ZXN0X25hbWV9X3B1Yi5kdW1wIjsKKyAgICBteSAkc3ViX2R1bXAgPSAke291dHB1dGRpcn0u Ii9kdW1wcy8ke3Rlc3RfbmFtZX1fc3ViLmR1bXAiOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAi CisgICAgICAgIC4gIi1zICIKKyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRwdWJfZHVtcCAu ICIgIgorICAgICAgICAuICItLW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAu ICRwdWJfbm9kZS0+cG9ydCkgID09IDAgb3IgZGllICJEdW1wIHB1YiBub2RlIGZhaWxlZCBpbiAk e3Rlc3RfbmFtZX0iOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIK KyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRzdWJfZHVtcCAuICIgIgorICAgICAgICAuICIt LW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRzdWJfbm9kZS0+cG9ydCkg ID09IDAgb3IgZGllICJEdW1wIHN1YiBub2RlIGZhaWxlZCBpbiAke3Rlc3RfbmFtZX0iOworCisg ICAgIyBjb21wYXJlIGR1bXBlZCByZXN1bHRzCisgICAgaXMoc3lzdGVtKCJkaWZmICIKKyAgICAu ICRwdWJfZHVtcCAuICIgIgorICAgIC4gJHN1Yl9kdW1wKSwgMCwgIkR1bXBlZCByZXN1bHRzIGRp ZmYgaW4gJHt0ZXN0X25hbWV9Iik7Cit9CisKK3N1YiBpbml0X25vZGUgeworICAgIG15ICRub2Rl X25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9kZS0+aW5pdDsKKyAgICAjIGluY3JlYXNlIHNvbWUg c2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcgbWFrZXMgdG9vIGxvdyBieSBkZWZhdWx0LgorICAg ICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9ucycs ICcyNScpOworICAgICRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJICAg J21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOworICAgIHJldHVybiAkbm9kZTsKK30K Kworc3ViIGluaXRfcHViX25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3B1YiI7 CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQorCitzdWIgaW5pdF9zdWJfbm9k ZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfc3ViIjsKKyAgICByZXR1cm4gaW5pdF9u b2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNl c19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0g JF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgkZGJuYW1lLCBxKAorICAgICAgICBiZWdpbjsKKyAg ICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAgICAg IGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxzKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdGFnIHRl eHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBkZGwgdGV4dCk7CisKKyAgICAgICAgY3JlYXRlIG9y IHJlcGxhY2UgZnVuY3Rpb24gZGVwYXJzZV90b19qc29uKCkKKyAgICAgICAgICAgIHJldHVybnMg ZXZlbnRfdHJpZ2dlciBsYW5ndWFnZSBwbHBnc3FsIGFzCisgICAgICAgICQkCisgICAgICAgIGRl Y2xhcmUKKyAgICAgICAgICAgIHIgcmVjb3JkOworICAgICAgICBiZWdpbgorICAgICAgICAgICAg Zm9yIHIgaW4gc2VsZWN0ICogZnJvbSBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcygpCisg ICAgICAgICAgICBsb29wCisgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gZGVwYXJzZWRfZGRs cyh0YWcsIG9iamVjdF9pZGVudGl0eSwgZGRsKSB2YWx1ZXMgKHIuY29tbWFuZF90YWcsIHIub2Jq ZWN0X2lkZW50aXR5LCBwZ19jYXRhbG9nLmRkbF9kZXBhcnNlX3RvX2pzb24oci5jb21tYW5kKSk7 CisgICAgICAgICAgICBlbmQgbG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAkJDsKKworICAg ICAgICBjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKQor ICAgICAgICAgICAgcmV0dXJucyBldmVudF90cmlnZ2VyIGxhbmd1YWdlIHBscGdzcWwgYXMKKyAg ICAgICAgJCQKKyAgICAgICAgZGVjbGFyZQorICAgICAgICAgICAgciByZWNvcmQ7CisgICAgICAg IGJlZ2luCisgICAgICAgICAgICBmb3IgciBpbiBzZWxlY3QgKiBmcm9tIHBnX2V2ZW50X3RyaWdn ZXJfZHJvcHBlZF9vYmplY3RzKCkKKyAgICAgICAgICAgIGxvb3AKKyAgICAgICAgICAgICAgICBp bnNlcnQgaW50byBkZXBhcnNlZF9kZGxzKHRhZywgb2JqZWN0X2lkZW50aXR5LCBkZGwpIHZhbHVl cyAoci5vYmplY3RfdHlwZSwgci5vYmplY3RfaWRlbnRpdHksIHB1YmxpYy5kZXBhcnNlX2Ryb3Bf ZGRsKHIub2JqZWN0X2lkZW50aXR5LCByLm9iamVjdF90eXBlKSk7CisgICAgICAgICAgICBlbmQg bG9vcDsKKyAgICAgICAgRU5EOworICAgICAgICAkJDsKKworICAgICAgICBjcmVhdGUgZXZlbnQg dHJpZ2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIGRkbF9jb21tYW5kX2VuZCBleGVj dXRlIHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24oKTsKKworICAgICAgICBjcmVhdGUgZXZlbnQg dHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIHNxbF9kcm9wIGV4ZWN1 dGUgcHJvY2VkdXJlIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpOworCisgICAgICAgIGNvbW1pdDsK KyAgICApKTsKK30KKworc3ViIGNsZWFuX2RlcGFyc2VfdGVzdGluZ19yZXNvdXJjZXNfb25fcHVi X25vZGUgeworICAgIG15ICRub2RlID0gJF9bMF07CisgICAgbXkgJGRibmFtZSA9ICRfWzFdOwor ICAgICMgRHJvcCB0aGUgZXZlbnQgdHJpZ2dlciBhbmQgdGhlIGZ1bmN0aW9uIGJlZm9yZSB0YWtp bmcgYSBsb2dpY2FsIGR1bXAuCisgICAgJG5vZGUgLT4gc2FmZV9wc3FsKCRkYm5hbWUscSgKKyAg ICAgICAgZHJvcCBldmVudCB0cmlnZ2VyIGRkbF9kZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3Ag ZXZlbnQgdHJpZ2dlciBkZGxfZHJvcHNfZGVwYXJzZV90cmlnOworICAgICAgICBkcm9wIGZ1bmN0 aW9uIGRlcGFyc2VfdG9fanNvbigpOworICAgICAgICBkcm9wIGZ1bmN0aW9uIGRlcGFyc2VfZHJv cHNfdG9fanNvbigpOworICAgICAgICBkcm9wIHRhYmxlIGRlcGFyc2VkX2RkbHM7CisgICAgICAg IERST1AgRVhURU5TSU9OIHRlc3RfZGRsX2RlcGFyc2VfcmVncmVzczsKKyAgICApKTsKK30KKwor c3ViIHRyaW0geworICAgIG15IEBvdXQgPSBAXzsKKyAgICBmb3IgKEBvdXQpIHsKKyAgICAgICAg cy9eXHMrLy87CisgICAgICAgIHMvXHMrJC8vOworICAgIH0KKyAgICByZXR1cm4gd2FudGFycmF5 ID8gQG91dCA6ICRvdXRbMF07Cit9CisKKyMgQ3JlYXRlIGFuZCBzdGFydCBwdWIgc3ViIG5vZGVz CitteSAkcHViX25vZGUgPSBpbml0X3B1Yl9ub2RlKCJ0ZXN0Iik7CitteSAkc3ViX25vZGUgPSBp bml0X3N1Yl9ub2RlKCJ0ZXN0Iik7CitteSAkZGJuYW1lID0gInBvc3RncmVzIjsKKyRwdWJfbm9k ZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAtPiBzdGFydDsKKworIyBsb2FkIHRlc3QgY2FzZXMgZnJv bSB0aGUgcmVncmVzc2lvbiB0ZXN0cworbXkgQHJlZ3Jlc3NfdGVzdHMgPSBzcGxpdCAvXHMrLywg JEVOVntSRUdSRVNTfTsKKworZm9yZWFjaChAcmVncmVzc190ZXN0cykgeworICAgIG15ICR0ZXN0 X25hbWUgPSB0cmltKCRfKTsKKyAgICAjIHNraXAgaWYgaXQncyByZWdyZXNzaW9uIHRlc3QgcHJl cGFyYXRpb24gb3IgZW1wdHkgc3RyaW5nCisgICAgaWYgKCR0ZXN0X25hbWUgZXEgIiIgb3IgJHRl c3RfbmFtZSBlcSAidGVzdF9kZGxfZGVwYXJzZSIpCisgICAgeworICAgICAgICBuZXh0OworICAg IH0KKyAgICBldmFsIHtleGVjdXRlX3Rlc3RfY2FzZSgkdGVzdF9uYW1lLCAkcHViX25vZGUsICRz dWJfbm9kZSwgJGRibmFtZSk7fTsKKyAgICBpZiAoJEAgbmUgIiIpCisgICAgeworICAgICAgICBm YWlsKCRAKTsKKyAgICB9Cit9CitjbG9zZTsKKworIyBDbG9zZSBub2RlcworJHB1Yl9ub2RlLT5z dG9wOworJHN1Yl9ub2RlLT5zdG9wOworCitkb25lX3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3QvMDAyX3JlZ3Jlc3NfdGVz dHMucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90LzAwMl9y ZWdyZXNzX3Rlc3RzLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjNh ODc1YzMzZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2Rl cGFyc2VfcmVncmVzcy90LzAwMl9yZWdyZXNzX3Rlc3RzLnBsCkBAIC0wLDAgKzEsMjA3IEBACit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVudjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7 Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiBleGVjdXRlX3JlZ3Jlc3NfdGVzdCB7CisgICAg bXkgJHB1Yl9ub2RlID0gJF9bMF07CisgICAgbXkgJHN1Yl9ub2RlID0gJF9bMV07CisgICAgbXkg JGRibmFtZSA9ICJwb3N0Z3JlcyI7CisgICAgbXkgJGRscGF0aCAgICA9IGRpcm5hbWUoJEVOVntS RUdSRVNTX1NITElCfSk7CisgICAgbXkgJGlucHV0ZGlyID0gIi4uLy4uL3JlZ3Jlc3MiOworICAg IG15ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKwor ICAgICMgc2V0IHVwIGRlcGFyc2UgdGVzdGluZyByZXNvdXJjZXMKKyAgICBjcmVhdGVfZGVwYXJz ZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisg ICAgIyBleGVjdXRlIGNvcmUgcmVncmVzc2lvbiB0ZXN0cyBvbiBwdWIgbm9kZQorICAgIG15ICRy ZWdyZXNzX2NtZCA9ICRFTlZ7UEdfUkVHUkVTU30KKyAgICAgICAgLiAiICIKKyAgICAgICAgLiAi LS1kbHBhdGg9XCIkZGxwYXRoXCIgIgorICAgICAgICAuICItLW1heC1jb25jdXJyZW50LXRlc3Rz PTIwICIKKyAgICAgICAgLiAiLS1kYm5hbWU9IgorICAgICAgICAuICRkYm5hbWUgLiAiICIKKyAg ICAgICAgLiAiLS11c2UtZXhpc3RpbmcgIgorICAgICAgICAuICItLWhvc3Q9IgorICAgICAgICAu ICRwdWJfbm9kZS0+aG9zdCAuICIgIgorICAgICAgICAuICItLXBvcnQ9IgorICAgICAgICAuICRw dWJfbm9kZS0+cG9ydCAuICIgIgorICAgICAgICAuICItLWlucHV0ZGlyPSRpbnB1dGRpciAiCisg ICAgICAgIC4gIi0tb3V0cHV0ZGlyPVwiJG91dHB1dGRpclwiICIKKyAgICAgICAgLiAiLS1zY2hl ZHVsZT0kaW5wdXRkaXIvcGFyYWxsZWxfc2NoZWR1bGUiOworICAgIHByaW50ICJSZWdyZXNzaW9u IHRlc3QgY29tbWFuZCBpcyAkcmVncmVzc19jbWQiOworICAgIG15ICRyYyA9IHN5c3RlbSgkcmVn cmVzc19jbWQpOworICAgIGlmICgkcmMgIT0gMCkKKyAgICB7CisgICAgICAgICMgSWYgcmVncmVz c2lvbiB0ZXN0IGZhaWxzLCBkdW1wIG91dCB0aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlCisgICAg ICAgIG15ICRkaWZmcyA9ICIke291dHB1dGRpcn0vcmVncmVzc2lvbi9yZWdyZXNzaW9uLmRpZmZz IjsKKyAgICAgICAgaWYgKC1lICRkaWZmcykKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQg Ij09PSBkdW1waW5nICRkaWZmcyA9PT1cbiI7CisgICAgICAgICAgICBwcmludCBzbHVycF9maWxl KCRkaWZmcyk7CisgICAgICAgICAgICBwcmludCAiPT09IEVPRiA9PT1cbiI7CisgICAgICAgIH0K KyAgICAgICAgZGllICJSZWdyZXNzaW9uIHRlc3QgZmFpbGVkIjsKKyAgICB9CisKKyAgICAjIFJl dHJpZXZlIFNRTCBjb21tYW5kcyBnZW5lcmF0ZWQgZnJvbSBkZXBhcnNlZCBERExzIG9uIHB1YiBu b2RlCisgICAgbXkgJGRkbF9zcWwgPSAnJzsKKyAgICAkcHViX25vZGUgLT4gcHNxbCgkZGJuYW1l LHEoCisgICAgICAgIHNlbGVjdCBkZGxfZGVwYXJzZV9leHBhbmRfY29tbWFuZChkZGwpIHx8ICc7 JyBmcm9tIGRlcGFyc2VkX2RkbHMgT1JERVIgQlkgaWQgQVNDKSwKKyAgICAgICAgc3Rkb3V0ID0+ IFwkZGRsX3NxbCk7CisKKyAgICAjIEV4ZWN1dGUgU1FMIGNvbW1hbmRzIG9uIHN1YiBub2RlCisg ICAgJHN1Yl9ub2RlIC0+IHBzcWwoJGRibmFtZSwgJGRkbF9zcWwpOworCisgICAgIyBDbGVhbiB1 cCBkZXBhcnNlIHRlc3RpbmcgcmVzb3VyY2VzCisgICAgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jl c291cmNlc19vbl9wdWJfbm9kZSgkcHViX25vZGUsICRkYm5hbWUpOworCisgICAgIyBEdW1wIGZy b20gcHViIG5vZGUgYW5kIHN1YiBub2RlCisgICAgbWtkaXIgJHtvdXRwdXRkaXJ9LiIvZHVtcHMi LCAwNzU1OworICAgIG15ICRwdWJfZHVtcCA9ICR7b3V0cHV0ZGlyfS4iL2R1bXBzL3JlZ3Jlc3Nf cHViLmR1bXAiOworICAgIG15ICRzdWJfZHVtcCA9ICR7b3V0cHV0ZGlyfS4iL2R1bXBzL3JlZ3Jl c3Nfc3ViLmR1bXAiOworICAgIHN5c3RlbSgicGdfZHVtcGFsbCAiCisgICAgICAgIC4gIi1zICIK KyAgICAgICAgLiAiLWYgIgorICAgICAgICAuICRwdWJfZHVtcCAuICIgIgorICAgICAgICAuICIt LW5vLXN5bmMgIgorICAgICAgICAuICAnLXAgJworICAgICAgICAuICRwdWJfbm9kZS0+cG9ydCkg ID09IDAgb3IgZGllICJEdW1wIHB1YiBub2RlIGZhaWxlZCI7CisgICAgc3lzdGVtKCJwZ19kdW1w YWxsICIKKyAgICAgICAgLiAiLXMgIgorICAgICAgICAuICItZiAiCisgICAgICAgIC4gJHN1Yl9k dW1wIC4gIiAiCisgICAgICAgIC4gIi0tbm8tc3luYyAiCisgICAgICAgIC4gICctcCAnCisgICAg ICAgIC4gJHN1Yl9ub2RlLT5wb3J0KSAgPT0gMCBvciBkaWUgIkR1bXAgc3ViIG5vZGUgZmFpbGVk IjsKKworICAgICMgQ29tcGFyZSBkdW1wZWQgcmVzdWx0cworICAgIGlzKHN5c3RlbSgiZGlmZiAi CisgICAgLiAkcHViX2R1bXAgLiAiICIKKyAgICAuICRzdWJfZHVtcCksIDAsICJDb21wYXJpbmcg ZHVtcGVkIG91dHB1dCIpOworCisgICAgIyBDbG9zZSBub2RlcworICAgICRwdWJfbm9kZS0+c3Rv cDsKKyAgICAkc3ViX25vZGUtPnN0b3A7Cit9CisKK3N1YiBpbml0X25vZGUgeworICAgIG15ICRu b2RlX25hbWUgPSAkX1swXTsKKyAgICBteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXItPm5ldygkbm9kZV9uYW1lKTsKKyAgICAkbm9kZS0+aW5pdDsKKyAgICAjIGluY3JlYXNlIHNv bWUgc2V0dGluZ3MgdGhhdCBDbHVzdGVyLT5uZXcgbWFrZXMgdG9vIGxvdyBieSBkZWZhdWx0Lgor ICAgICRub2RlLT5hZGp1c3RfY29uZigncG9zdGdyZXNxbC5jb25mJywgJ21heF9jb25uZWN0aW9u cycsICcyNScpOworICAgICRub2RlLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywKKwkJ ICAgJ21heF9wcmVwYXJlZF90cmFuc2FjdGlvbnMgPSAxMCcpOworICAgIHJldHVybiAkbm9kZTsK K30KKworc3ViIGluaXRfcHViX25vZGUgeworICAgIG15ICRub2RlX25hbWUgPSAkX1swXS4iX3B1 YiI7CisgICAgcmV0dXJuIGluaXRfbm9kZSgkbm9kZV9uYW1lKQorfQorCitzdWIgaW5pdF9zdWJf bm9kZSB7CisgICAgbXkgJG5vZGVfbmFtZSA9ICRfWzBdLiJfc3ViIjsKKyAgICByZXR1cm4gaW5p dF9ub2RlKCRub2RlX25hbWUpCit9CisKK3N1YiBjcmVhdGVfZGVwYXJzZV90ZXN0aW5nX3Jlc291 cmNlc19vbl9wdWJfbm9kZSB7CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1l ID0gJF9bMV07CisgICAgJG5vZGUgLT4gcHNxbCgkZGJuYW1lLCBxKAorICAgICAgICBiZWdpbjsK KyAgICAgICAgQ1JFQVRFIEVYVEVOU0lPTiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3M7CisgICAg ICAgIGNyZWF0ZSB0YWJsZSBkZXBhcnNlZF9kZGxzKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgdGFn IHRleHQsIG9iamVjdF9pZGVudGl0eSB0ZXh0LCBkZGwgdGV4dCk7CisgICAgICAgIGNyZWF0ZSBv ciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfdG9fanNvbigpCisgICAgICAgICAgICByZXR1cm5z IGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAgICAgICAkJAorICAgICAgICBk ZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAg IGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoKQor ICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGRlcGFyc2VkX2Rk bHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVzIChyLmNvbW1hbmRfdGFnLCByLm9i amVjdF9pZGVudGl0eSwgcGdfY2F0YWxvZy5kZGxfZGVwYXJzZV90b19qc29uKHIuY29tbWFuZCkp OworICAgICAgICAgICAgZW5kIGxvb3A7CisgICAgICAgIEVORDsKKyAgICAgICAgJCQ7CisgICAg ICAgIGNyZWF0ZSBvciByZXBsYWNlIGZ1bmN0aW9uIGRlcGFyc2VfZHJvcHNfdG9fanNvbigpCisg ICAgICAgICAgICByZXR1cm5zIGV2ZW50X3RyaWdnZXIgbGFuZ3VhZ2UgcGxwZ3NxbCBhcworICAg ICAgICAkJAorICAgICAgICBkZWNsYXJlCisgICAgICAgICAgICByIHJlY29yZDsKKyAgICAgICAg YmVnaW4KKyAgICAgICAgICAgIGZvciByIGluIHNlbGVjdCAqIGZyb20gcGdfZXZlbnRfdHJpZ2dl cl9kcm9wcGVkX29iamVjdHMoKQorICAgICAgICAgICAgbG9vcAorICAgICAgICAgICAgICAgIGlu c2VydCBpbnRvIGRlcGFyc2VkX2RkbHModGFnLCBvYmplY3RfaWRlbnRpdHksIGRkbCkgdmFsdWVz IChyLm9iamVjdF90eXBlLCByLm9iamVjdF9pZGVudGl0eSwgcHVibGljLmRlcGFyc2VfZHJvcF9k ZGwoci5vYmplY3RfaWRlbnRpdHksIHIub2JqZWN0X3R5cGUpKTsKKyAgICAgICAgICAgIGVuZCBs b29wOworICAgICAgICBFTkQ7CisgICAgICAgICQkOworICAgICAgICBjcmVhdGUgZXZlbnQgdHJp Z2dlciBkZGxfZGVwYXJzZV90cmlnCisgICAgICAgIG9uIGRkbF9jb21tYW5kX2VuZCBleGVjdXRl IHByb2NlZHVyZSBkZXBhcnNlX3RvX2pzb24oKTsKKyAgICAgICAgY3JlYXRlIGV2ZW50IHRyaWdn ZXIgZGRsX2Ryb3BzX2RlcGFyc2VfdHJpZworICAgICAgICBvbiBzcWxfZHJvcCBleGVjdXRlIHBy b2NlZHVyZSBkZXBhcnNlX2Ryb3BzX3RvX2pzb24oKTsKKyAgICAgICAgY29tbWl0OworICAgICkp OworfQorCitzdWIgY2xlYW5fZGVwYXJzZV90ZXN0aW5nX3Jlc291cmNlc19vbl9wdWJfbm9kZSB7 CisgICAgbXkgJG5vZGUgPSAkX1swXTsKKyAgICBteSAkZGJuYW1lID0gJF9bMV07CisgICAgIyBE cm9wIHRoZSBldmVudCB0cmlnZ2VyIGFuZCB0aGUgZnVuY3Rpb24gYmVmb3JlIHRha2luZyBhIGxv Z2ljYWwgZHVtcC4KKyAgICAkbm9kZSAtPiBzYWZlX3BzcWwoJGRibmFtZSxxKAorICAgICAgICBk cm9wIGV2ZW50IHRyaWdnZXIgZGRsX2RlcGFyc2VfdHJpZzsKKyAgICAgICAgZHJvcCBldmVudCB0 cmlnZ2VyIGRkbF9kcm9wc19kZXBhcnNlX3RyaWc7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVw YXJzZV90b19qc29uKCk7CisgICAgICAgIGRyb3AgZnVuY3Rpb24gZGVwYXJzZV9kcm9wc190b19q c29uKCk7CisgICAgICAgIGRyb3AgdGFibGUgZGVwYXJzZWRfZGRsczsKKyAgICAgICAgRFJPUCBF WFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzOworICAgICkpOworfQorCitzdWIgdHJp bSB7CisgICAgbXkgQG91dCA9IEBfOworICAgIGZvciAoQG91dCkgeworICAgICAgICBzL15ccysv LzsKKyAgICAgICAgcy9ccyskLy87CisgICAgfQorICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0 IDogJG91dFswXTsKK30KKworIyBDcmVhdGUgYW5kIHN0YXJ0IHB1YiBzdWIgbm9kZXMKK215ICRw dWJfbm9kZSA9IGluaXRfcHViX25vZGUoInJlZ3Jlc3MiKTsKK215ICRzdWJfbm9kZSA9IGluaXRf c3ViX25vZGUoInJlZ3Jlc3MiKTsKKyRwdWJfbm9kZSAtPiBzdGFydDsKKyRzdWJfbm9kZSAtPiBz dGFydDsKKworIyBDb21tZW50IHRoZSBleGVjdXRpb24gdGVtcG9yYXJpbHksIGFuIGVycm9yIGlu IGRkbF9kZXBhcnNlLmMgd2lsbCBjYXVzZSB0aGUgZGF0YWJhc2UgZXhpdHMgYWJub3JtYWxseSwg ZXJyb3Igc2lnbmF0dXJlOgorIworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljc3OCBVVEMgWzEyOTEw Ml0gcGdfcmVncmVzcy90YWJsZXNwYWNlIExPRzogIHN0YXRlbWVudDogQUxURVIgVEFCTEUgQUxM IElOIFRBQkxFU1BBQ0UgcmVncmVzc190YmxzcGFjZV9yZW5hbWVkIFNFVCBUQUJMRVNQQUNFIHBn X2RlZmF1bHQ7CisjIFRSQVA6IGZhaWxlZCBBc3NlcnQoIklzQShzdG10LCBBbHRlclRhYmxlU3Rt dCkiKSwgRmlsZTogImRkbF9kZXBhcnNlLmMiLCBMaW5lOiAzMzcxLCBQSUQ6IDEyOTEwMgorIyBw b3N0Z3JlczogcmVncmVzc19wdWI6IHJ1bnFpIHBvc3RncmVzIFtsb2NhbF0gQUxURVIgVEFCTEUo RXhjZXB0aW9uYWxDb25kaXRpb24rMHhiYilbMHg1NjNiZDZlYTViMGRdCisjIC4uLgorIyAvbGli L3g4Nl82NC1saW51eC1nbnUvbGliYy5zby42KCsweDI5ZDkwKVsweDdmZDZhNzRhNmQ5MF0KKyMg L2xpYi94ODZfNjQtbGludXgtZ251L2xpYmMuc28uNihfX2xpYmNfc3RhcnRfbWFpbisweDgwKVsw eDdmZDZhNzRhNmU0MF0KKyMgcG9zdGdyZXM6IHJlZ3Jlc3NfcHViOiBydW5xaSBwb3N0Z3JlcyBb bG9jYWxdIEFMVEVSIFRBQkxFKF9zdGFydCsweDI1KVsweDU2M2JkNjcyZjFlNV0KKyMgMjAyMi0x Mi0wMyAyMzowMjo0NC44NTAgVVRDIFsxMjkwNThdIExPRzogIHNlcnZlciBwcm9jZXNzIChQSUQg MTI5MTAyKSB3YXMgdGVybWluYXRlZCBieSBzaWduYWwgNjogQWJvcnRlZAorIyAyMDIyLTEyLTAz IDIzOjAyOjQ0Ljg1MCBVVEMgWzEyOTA1OF0gREVUQUlMOiAgRmFpbGVkIHByb2Nlc3Mgd2FzIHJ1 bm5pbmc6IEFMVEVSIFRBQkxFIEFMTCBJTiBUQUJMRVNQQUNFIHJlZ3Jlc3NfdGJsc3BhY2VfcmVu YW1lZCBTRVQgVEFCTEVTUEFDRSBwZ19kZWZhdWx0OworIyAyMDIyLTEyLTAzIDIzOjAyOjQ0Ljg1 MCBVVEMgWzEyOTA1OF0gTE9HOiAgdGVybWluYXRpbmcgYW55IG90aGVyIGFjdGl2ZSBzZXJ2ZXIg cHJvY2Vzc2VzCisjIDIwMjItMTItMDMgMjM6MDI6NDQuODUxIFVUQyBbMTI5MDU4XSBMT0c6ICBz aHV0dGluZyBkb3duIGJlY2F1c2UgcmVzdGFydF9hZnRlcl9jcmFzaCBpcyBvZmYKKyMgMjAyMi0x Mi0wMyAyMzowMjo0NC44NTIgVVRDIFsxMjkwNThdIExPRzogIGRhdGFiYXNlIHN5c3RlbSBpcyBz aHV0IGRvd24KKworIyBldmFsIHtleGVjdXRlX3JlZ3Jlc3NfdGVzdCgkcHViX25vZGUsICRzdWJf bm9kZSk7fTsKKyMgaWYgKCRAIG5lICIiKQorIyB7CisjICAgICBmYWlsKCRAKTsKKyMgfQorCisj IENsb3NlIG5vZGVzCiskcHViX25vZGUtPnN0b3A7Ciskc3ViX25vZGUtPnN0b3A7CisKK3Bhc3Mo InJlZ3Jlc3NzaW9uIHRlc3QgcGFzc2VkIik7CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy0tMS4wLnNxbCBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy0tMS4wLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4xNDA3 MGNkNTFmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBh cnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsCkBAIC0wLDAgKzEs OSBAQAorLyogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9k ZGxfZGVwYXJzZV9yZWdyZXNzLS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlwdCBp cyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBDUkVBVEUgRVhURU5TSU9OCitcZWNo byBVc2UgIkNSRUFURSBFWFRFTlNJT04gdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIiB0byBsb2Fk IHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIGRlcGFyc2VfZHJvcF9kZGwoSU4g b2JqaWRlbnRpdHkgdGV4dCwKKyAgICBJTiBvYmplY3R0eXBlIHRleHQpCisgIFJFVFVSTlMgdGV4 dCBJTU1VVEFCTEUgU1RSSUNUCisgIEFTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdFIEM7Clwg Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45MzQwOWQ4ZmYz Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2RkbF9kZXBhcnNlX3Jl Z3Jlc3MvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzLmMKQEAgLTAsMCArMSw3MSBAQAorLyotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKiB0ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuYworICoJCVN1cHBvcnQgZnVu Y3Rpb25zIGZvciB0aGUgdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzIG1vZHVsZQorICoKKyAqIENv cHlyaWdodCAoYykgMjAxNC0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5jCisgKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKKyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibm9kZXMvZXhlY25vZGVzLmgi CisjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29wL3V0aWxp dHkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInRjb3AvZGRsX2Rl cGFyc2UuaCIKKworUEdfTU9EVUxFX01BR0lDOworCitQR19GVU5DVElPTl9JTkZPX1YxKGRlcGFy c2VfZHJvcF9kZGwpOworCisvKgorICogR2l2ZW4gb2JqZWN0X2lkZW50aXR5IGFuZCBvYmplY3Rf dHlwZSBvZiBkcm9wcGVkIG9iamVjdCwgcmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBE Uk9QIGNvbW1hbmQuCisgKi8KK0RhdHVtCitkZXBhcnNlX2Ryb3BfZGRsKFBHX0ZVTkNUSU9OX0FS R1MpCit7CisJdGV4dAkgICAqb2JqaWRlbnRpdHkgPSBQR19HRVRBUkdfVEVYVF9QKDApOworCWNv bnN0IGNoYXIJICAgKm9iamlkZW50aXR5X3N0ciA9IHRleHRfdG9fY3N0cmluZyhvYmppZGVudGl0 eSk7CisJdGV4dAkgICAqb2JqZWN0dHlwZSA9IFBHX0dFVEFSR19URVhUX1AoMSk7CisJY29uc3Qg Y2hhcgkgICAqb2JqZWN0dHlwZV9zdHIgPSB0ZXh0X3RvX2NzdHJpbmcob2JqZWN0dHlwZSk7CisK KwljaGFyCQkgICAqY29tbWFuZDsKKworCS8qCisJICogVGhlIGZvbGxvd2luZyB0eXBlcyBhcmUg ZHJvcHBlZCBhcyBwYXJ0IG9mIHRoZSBhbHRlciB0YWJsZSBjb21tYW5kLAorCSAqIG5vIG5lZWQg dG8gaGFuZGxlIGluIERST1AgY29tbWFuZDoKKwkgKiB0YWJsZSBjb25zdHJhaW50CisJICogZG9t YWluIGNvbnN0cmFpbnQKKwkgKiBwcmltYXJ5IGtleSBpbmRleAorCSAqIGRlZmF1bHQgdmFsdWUK KwkgKiBvcGVyYXRvciBvZiBhY2Nlc3MgbWV0aG9kCisJICogZnVuY3Rpb24gb2YgYWNjZXNzIG1l dGhvZAorCSAqIHRhYmxlIGNvbHVtbgorCSAqLworCWlmIChzdHJjbXAob2JqZWN0dHlwZV9zdHIs ICJ0YWJsZSBjb25zdHJhaW50IikgPT0gMCB8fAorCQlzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJk b21haW4gY29uc3RyYWludCIpID09IDAgfHwKKwkJKHN0cmNtcChvYmplY3R0eXBlX3N0ciwgImlu ZGV4IikgPT0gMCAmJgorCQkgc3RybmNtcChvYmppZGVudGl0eV9zdHIgKyBzdHJsZW4ob2JqaWRl bnRpdHlfc3RyKSAtIHN0cmxlbigiX3BrZXkiKSwgIl9wa2V5Iiwgc3RybGVuKCJfcGtleSIpKSA9 PSAwKSB8fAorCQlzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJkZWZhdWx0IHZhbHVlIikgPT0gMCB8 fAorCQlzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJvcGVyYXRvciBvZiBhY2Nlc3MgbWV0aG9kIikg PT0gMCB8fAorCQlzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJmdW5jdGlvbiBvZiBhY2Nlc3MgbWV0 aG9kIikgPT0gMCB8fAorCQlzdHJjbXAob2JqZWN0dHlwZV9zdHIsICJ0YWJsZSBjb2x1bW4iKSA9 PSAwKQorCXsKKwkJUEdfUkVUVVJOX05VTEwoKTsKKwl9CisJZWxzZSBpZiAoc3RyY21wKG9iamVj dHR5cGVfc3RyLCAidG9hc3QgdGFibGUiKSA9PSAwKQorCXsKKwkJb2JqZWN0dHlwZV9zdHIgPSAi dGFibGUiOworCX0KKworCWNvbW1hbmQgPSBkZXBhcnNlX2Ryb3BfY29tbWFuZChvYmppZGVudGl0 eV9zdHIsIG9iamVjdHR5cGVfc3RyLCBEUk9QX0NBU0NBREUpOworCisJaWYgKGNvbW1hbmQpCisJ CVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KGNvbW1hbmQpKTsKKworCVBHX1JFVFVS Tl9OVUxMKCk7Cit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFy c2VfcmVncmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9kZGxfZGVwYXJzZV9yZWdyZXNzL3Rlc3RfZGRsX2RlcGFyc2VfcmVncmVzcy5j b250cm9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmExZjkzNGU2NTgK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfZGRsX2RlcGFyc2VfcmVn cmVzcy90ZXN0X2RkbF9kZXBhcnNlX3JlZ3Jlc3MuY29udHJvbApAQCAtMCwwICsxLDQgQEAKK2Nv bW1lbnQgPSAnVGVzdCBjb2RlIGZvciBEREwgZGVwYXJzZSByZWdyZXNzIGZlYXR1cmUnCitkZWZh dWx0X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvdGVzdF9kZGxf ZGVwYXJzZV9yZWdyZXNzJworcmVsb2NhdGFibGUgPSB0cnVlCi0tIAoyLjM0LjEKCg== --000000000000cb887705efe04c32--