Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vVEpy-00H2Qw-2m for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Dec 2025 20:06:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vVEpx-002CfJ-0H for pgsql-hackers@arkaria.postgresql.org; Mon, 15 Dec 2025 20:06:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vVEpv-002Cf5-1p for pgsql-hackers@lists.postgresql.org; Mon, 15 Dec 2025 20:06:29 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vVEpt-000qFV-0O for pgsql-hackers@lists.postgresql.org; Mon, 15 Dec 2025 20:06:27 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b728a43e410so612880766b.1 for ; Mon, 15 Dec 2025 12:06:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765829182; x=1766433982; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6cQLSONKRcSuN4X9VymJN8ig+42EOQbH1YfvLrVCG2A=; b=Nl2JwEEV9BgrY15ku+ZxjhWCG3hih+zYqYxiMnAeC2vJUejjQrpmPcLQ4Qpx+SgeBz RxW9G8jYd8+BsDg1UVn5hdcxKgNaZzHNQM2MOrVTC2Pc5S9qLlrWSADOo0FKmHydUbWl F5yKopNbHgA52HmzNoDArcTBp4QdVIKdduNHgdHX501oCqzHfAIcP5iww+uvDPLmCBkr mpyz+dL2hQew7VoCne42Wa8XYEZM3Eh5dimUq3I7LB4plubft1U/62cve40vd62Sm+Me 9Lmd7GNb4VhBS/0Sk87vd30zhE0uV//qnXZgVUrC0QrvqBUL7zOs2MXbi/6V0qzPUEYC r65A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765829182; x=1766433982; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6cQLSONKRcSuN4X9VymJN8ig+42EOQbH1YfvLrVCG2A=; b=JqehPUP3ZHpDPCq4swODLXT5Bp2+vM90buw09SacQUjvDMhJSxQql25YGZhFQM5NZ+ px6ltRhZTPjfGyF0pB6NKkYKUOcC7m9cLqv7BqCjjzMEXtMmLm1TaqrSOmifihPBbn0A RJlpLX1QmltvBi3Kx46C5pOupsgJpNqDgP74usL3OEj70s1gd7L0MOfkKTMi/5MnwNVc m113/TZUUBH2PuwSQ3PFu6w8upcdKCDVcx2CRQo+3PJsMqXNkyWe5PxogceBOskEuWJ0 ASlgibuPi26zMDkUY2Tqn7gYgNpYa/sH4CJOSHlDXtO32FO3DJrGhpZcGYh2rYQsLrYe XBRQ== X-Forwarded-Encrypted: i=1; AJvYcCVqDoCM804P6POFxOAql1HlOW4Jo5j+0W8Ryf4bpsF9ww77bUYnsuaBrj2Y/b4c8QLTzZ0F6q7hytqV7ehz@lists.postgresql.org X-Gm-Message-State: AOJu0Yy/b6U5j/XzxVTtOLZQAKEOYSZ3MrrUhPnUKELAsE+3mV1pJjbs wrTp1G1aXtKO71P5+3UowmXwa2fOa2oRNalh3MifUr9MGQrQuAoXo2RLMa7QCPy565vtYJ3Yxkq QmBovVboWSFv0L3/JcDYfuf23kVmoD+A= X-Gm-Gg: AY/fxX7VwXhexAKol22iNuGXhljRk1jj0X3HAxa5NoSSSKC3+h2n5IqdZNIb0tNlfa9 Iwh68N/lpWHwWK/Aw9NLHRerz5JxAKuC+sFrXiIbOZi6SvjuwG1LOkLReck4OHlqJ39dPLdkKVg 5CnAwBaeWnvAHpwugBGmV4QL8bstZKYTxpSJtKYwKv+jMOG35Kc9/gMZ7w4avlyLd0zLqeixaGg MHFCDsNe7IdFkIdNdJMpcxGGvrbwFVF3yuDfjvdEtZ+UJ3JCMxHYjQgQwmKiRy6bfzFW60YPvwL 8OkyNOa6MnGosgJftktBZzOOJic= X-Google-Smtp-Source: AGHT+IFS0+8kA+oe20AO3MrFo0Va+wFXP0r90nFcwSe2TjBIYb8Ig+P9TADnhPmVwXenPNcnrwj4o67V089MGO3UujM= X-Received: by 2002:a17:907:3fa7:b0:b72:5d08:486c with SMTP id a640c23a62f3a-b7d23a9d458mr1300222766b.27.1765829181643; Mon, 15 Dec 2025 12:06:21 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Mon, 15 Dec 2025 15:06:08 -0500 X-Gm-Features: AQt7F2oRpszAUoCrjzxMlU7u8iEm1l9c_V8fhlsQECKGBIih_Iz8DZ3ssNK-qbQ Message-ID: Subject: Re: pg_plan_advice To: Jacob Champion Cc: Dian Fay , Matheus Alcantara , Jakub Wartak , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000001b5bb506460325ec" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001b5bb506460325ec Content-Type: text/plain; charset="UTF-8" Here's v7. In 0001, I removed "const" from a node's struct declaration, because Tom gave me some feedback to avoid that on another recent patch, and I noticed I had done it here also. 0002, 0003, and 0004 are unchanged. In 0005: - Refactored the code to avoid issuing SEMIJOIN_NON_UNIQUE() advice in cases where uniqueness wasn't actually considered. - Adjusted the code not to issue NO_GATHER() advice for non-relation RTEs. (This is the issue reported by Ajay Pal in a recent message to this thread, which was also mentioned in an XXX in the code.) - Reject zero-length delimited identifiers, per Jacob's email. - Properly initialize element->indexes in pgpa_trove_add_to_hash, per Jacob'e email. - Add gather((d d/d.d)) test case, per Jacob, and fix the related bug in pgpa_identifier_matches_target, per Jacob's email. - Add EXPLAIN SELECT 1 after various test cases in syntax.sql, to improve test coverage, per analysis of why the existing test case didn't catch a bug previously reported by Jacob. - Added a dummy initialization to pgpa_collector.c to placate nervous compilers, per discussion with Jacob. I think this mostly catches me up on responding to issues reported here, although there is one thing reported to me off-list that I haven't dealt with yet. If there's anything reported on thread that isn't addressed here, let me know. Thanks, -- Robert Haas EDB: http://www.enterprisedb.com --0000000000001b5bb506460325ec Content-Type: application/octet-stream; name="v7-0001-Store-information-about-range-table-flattening-in.patch" Content-Disposition: attachment; filename="v7-0001-Store-information-about-range-table-flattening-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj7kxtne0 RnJvbSAyYjZkNTlmOWZmM2U1Nzg3MTg0MjdlYTY3NTYyMDhlM2M1ZGUzYjU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHY3IDEv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgcmFuZ2UtdGFibGUgZmxhdHRlbmluZyBpbiB0aGUK IGZpbmFsIHBsYW4uCgpTdXBwb3NlIHRoYXQgd2UncmUgY3VycmVudGx5IHBsYW5uaW5nIGEgcXVl cnkgYW5kLCB3aGVuIHRoYXQgc2FtZQpxdWVyeSB3YXMgcHJldmlvdXNseSBwbGFubmVkIGFuZCBl eGVjdXRlZCwgd2UgbGVhcm5lZCBzb21ldGhpbmcgYWJvdXQKaG93IGEgY2VydGFpbiB0YWJsZSB3 aXRoaW4gdGhhdCBxdWVyeSBzaG91bGQgYmUgcGxhbm5lZC4gV2Ugd2FudCB0bwp0YWtlIG5vdGUg d2hlbiB0aGF0IHNhbWUgdGFibGUgaXMgYmVpbmcgcGxhbm5lZCBkdXJpbmcgdGhlIGN1cnJlbnQK cGxhbm5pbmcgY3ljbGUsIGJ1dCB0aGlzIGlzIGRpZmZpY3VsdCB0byBkbywgYmVjYXVzZSB0aGUg UlRJIG9mIHRoZQp0YWJsZSBmcm9tIHRoZSBwcmV2aW91cyBwbGFuIHdvbid0IG5lY2Vzc2FyaWx5 IGJlIGVxdWFsIHRvIHRoZSBSVEkKdGhhdCB3ZSBzZWUgZHVyaW5nIHRoZSBjdXJyZW50IHBsYW5u aW5nIGN5Y2xlLiBUaGlzIGlzIGJlY2F1c2UgZWFjaApzdWJxdWVyeSBoYXMgYSBzZXBhcmF0ZSBy YW5nZSB0YWJsZSBkdXJpbmcgcGxhbm5pbmcsIGJ1dCB0aGVzZSBhcmUKZmxhdHRlbmVkIGludG8g b25lIHJhbmdlIHRhYmxlIHdoZW4gY29uc3RydWN0aW5nIHRoZSBmaW5hbCBwbGFuLApjaGFuZ2lu ZyBSVElzLgoKQ29tbWl0IDhjNDlhNDg0ZThlYmIwMTk5ZmJhNGJkNjhlYWFlZGFmNDliNDhlZDAg YWxsb3dzIHVzIHRvIG1hdGNoIHVwCnN1YnF1ZXJpZXMgc2VlbiBpbiB0aGUgcHJldmlvdXMgcGxh bm5pbmcgY3ljbGVzIHdpdGggdGhlIHN1YnF1ZXJpZXMKY3VycmVudGx5IGJlaW5nIHBsYW5uZWQg anVzdCBieSBjb21wYXJpbmcgdGV4dHVhbCBuYW1lcywgYnV0IHRoYXQncwpub3QgcXVpdGUgZW5v dWdoIHRvIGxldCB1cyBkZWR1Y2UgYW55dGhpbmcgYWJvdXQgaW5kaXZpZHVhbCB0YWJsZXMsCmJl Y2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSBlYWNoIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUgYXBw ZWFycyBpbgp0aGUgZmluYWwsIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4KClRvIGZpeCB0aGF0LCBz dG9yZSBhIGxpc3Qgb2YgU3ViUGxhblJUSW5mbyBvYmplY3RzIGluIHRoZSBmaW5hbApwbGFubmVk IHN0YXRlbWVudCwgZWFjaCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIHN1YnBsYW4sIHRoZSBv ZmZzZXQKYXQgd2hpY2ggaXQgYmVnaW5zIGluIHRoZSBmbGF0dGVuZWQgcmFuZ2UgdGFibGUsIGFu ZCB3aGV0aGVyIG9yIG5vdAppdCB3YXMgYSBkdW1teSBzdWJwbGFuIC0tIGlmIGl0IHdhcywgc29t ZSBSVElzIG1heSBoYXZlIGJlZW4gZHJvcHBlZApmcm9tIHRoZSBmaW5hbCByYW5nZSB0YWJsZSwg YnV0IGFsc28gdGhlcmUncyBubyBuZWVkIHRvIGNvbnRyb2wgaG93CmEgZHVtbXkgc3VicXVlcnkg Z2V0cyBwbGFubmVkLiBUaGUgdG9wbGV2ZWwgc3VicXVlcnkgaGFzIG5vIG5hbWUgYW5kCmFsd2F5 cyBiZWdpbnMgYXQgcnRvZmZzZXQgMCwgc28gd2UgbWFrZSBubyBlbnRyeSBmb3IgaXQuCgpUaGlz IGNvbW1pdCB0ZWFjaGVzIHBnX292ZXJleHBsYWluJ3MgUkFOR0VfVEFCTEUgb3B0aW9uIHRvIG1h a2UgdXNlCm9mIHRoaXMgbmV3IGRhdGEgdG8gZGlzcGxheSB0aGUgc3VicXVlcnkgbmFtZSBmb3Ig ZWFjaCByYW5nZSB0YWJsZQplbnRyeS4KCk5PVEUgVE8gUkVWSUVXRVJTOiBJZiB0aGVyZSdzIGEg Y2xlYW4gd2F5IHRvIG1ha2UgcGdfb3ZlcmV4cGxhaW4gZGlzcGxheQp0aGlzIGluZm9ybWF0aW9u IHdpdGhvdXQgdGhlIG5ldyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSB0aGlzIHBhdGNoLAp0 aGVuIHRoaXMgcGF0Y2ggaXMgdW5uZWNlc3NhcnkuIEkgdGhvdWdodCB0aGVyZSB3b3VsZCBiZSBh IHdheSB0byBkbwp0aGF0LCBidXQgSSBjb3VsZG4ndCBmaWd1cmUgYW55dGhpbmcgb3V0OiB0aGVy ZSBzZWVtcyB0byBiZSBub3RoaW5nIHRoYXQKcmVjb3JkcyBpbiB0aGUgZmluYWwgUGxhbm5lZFN0 bXQgd2hlcmUgc3VicXVlcnkncyByYW5nZSB0YWJsZSBlbmRzIGFuZAp0aGUgbmV4dCBvbmUgYmVn aW5zLiBJbiBwcmFjdGljZSwgb25lIGNvdWxkIHVzdWFsbHkgZmlndXJlIGl0IG91dCBieQptYXRj aGluZyB1cCB0YWJsZXMgYnkgcmVsYXRpb24gT0lELCBidXQgdGhhdCdzIG5laXRoZXIgY2xlYW4g bm9yCnRoZW9yZXRpY2FsbHkgc291bmQuCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggZmNkYzE3MDEy ZGEuLjFjNGM3OTZhZGIyIDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA4YjIyYzMw NTU5Yi4uMzFkY2JkZjM0MjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTYwNyw2ICs2MDcsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg Y2Q3ZWExZTZiNTguLmVkY2Q0YWFhNTNlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IGI1ZmY0NTZlZjdmLi40Yjg5MjQxNGQ1OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTEzNSw2ICsxMzUsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBjNDM5M2E5NDMyMS4uNDgz MzE4OTNhNjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwlib29s CQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RFU19I ICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDM0NTE1Mzg1NjVlLi4xNGMwMWY4MGIy MiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5MTgsNiArMjkxOCw3IEBAIFN1Ykxp bmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQbGFu U3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --0000000000001b5bb506460325ec Content-Type: application/octet-stream; name="v7-0003-Store-information-about-Append-node-consolidation.patch" Content-Disposition: attachment; filename="v7-0003-Store-information-about-Append-node-consolidation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj7kxtnr2 RnJvbSA5YzM3MWU0ZTQ1NzQxZTBiZDkwNjc1YjY5NTM1ZWZhMWVmODU2ZTI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6MDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY3IDMv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgQXBwZW5kIG5vZGUgY29uc29saWRhdGlvbiBpbgog dGhlIGZpbmFsIHBsYW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0 byByZWNvbnN0cnVjdCB0aGUgcGxhbm5lcidzCmRlY2lzaW9ucyBhYm91dCB3aGV0aGVyIGFuZCB3 aGVyZSB0byBwZXJmb3JtIHBhcnRpdGlvbndpc2Ugam9pbnMgZnJvbQp0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUgdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMKb2Yg cGFydGl0aW9uZWQgdGFibGVzIGFwcGVhcmluZyBpbiB0aGUgcGxhbi4gQnV0IHdoZW4gYW4gQXBw ZW5kUGF0aApvciBNZXJnZUFwcGVuZFBhdGggcHVsbHMgdXAgY2hpbGQgcGF0aHMgZnJvbSBhIHN1 Ym9yZGluYXRlIEFwcGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoLCB0aGUgUlRJcyBvZiB0aGUg c3Vib3JkaW5hdGUgcGF0aCBkbyBub3QgYXBwZWFyCmluIHRoZSBmaW5hbCBwbGFuLCBtYWtpbmcg dGhpcyBraW5kIG9mIHJlY29uc3RydWN0aW9uIGltcG9zc2libGUuCgpUbyBhdm9pZCB0aGlzLCBw cm9wYWdhdGUgdGhlIFJUSSBzZXRzIHRoYXQgd291bGQgaGF2ZSBiZWVuIHByZXNlbnQKaW4gdGhl ICdhcHByZWxpZHMnIGZpZWxkIG9mIHRoZSBzdWJvcmRpbmF0ZSBBcHBlbmQgb3IgTWVyZ2VBcHBl bmQKbm9kZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gY3JlYXRlZCBpbnRvIHRoZSBzdXJ2aXZpbmcg QXBwZW5kIG9yCk1lcmdlQXBwZW5kIG5vZGUsIHVzaW5nIGEgbmV3ICdjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cycgZmllbGQgZm9yCnRoYXQgcHVycG9zZS4gVGhlIHZhbHVlIG9mIHRoaXMgZmllbGQg aXMgYSBsaXN0IG9mIEJpdG1hcHNldHMsCmJlY2F1c2UgZWFjaCByZWxhdGlvbiB3aG9zZSBhcHBl bmQtbGlzdCB3YXMgcHVsbGVkIHVwIGhhZCBpdHMgb3duCnNldCBvZiBSVElzOiBqdXN0IG9uZSwg aWYgaXQgd2FzIGEgcGFydGl0aW9ud2lzZSBzY2FuLCBvciBtb3JlIHRoYW4Kb25lLCBpZiBpdCB3 YXMgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNpbmNlIG91ciBnb2FsIGlzIHRvIHNlZSB3aGVyZQpw YXJ0aXRpb253aXNlIGpvaW5zIHdlcmUgZG9uZSwgaXQgaXMgZXNzZW50aWFsIHRvIGF2b2lkIGxv c2luZyB0aGUKaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoZSBSVElzIHdlcmUgZ3JvdXBlZCBpbiB0 aGUgcHVsbGVkLXVwCnJlbGF0aW9ucy4KClRoaXMgY29tbWl0IGFsc28gdXBkYXRlcyBwZ19vdmVy ZXhwbGFpbiBzbyB0aGF0IEVYUExBSU4gKFJBTkdFX1RBQkxFKQp3aWxsIGRpc3BsYXkgdGhlIHNh dmVkIFJUSSBzZXRzLgotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAg ICAgICAgICB8ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg ICAgICAgfCA1NiArKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0 aHMuYyAgICAgICAgIHwgOTggKysrKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgIHwgIDIgKy0KIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL2NyZWF0ZXBsYW4uYyAgICAgICB8ICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3BsYW5uZXIuYyAgICAgICAgICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVw L3ByZXB1bmlvbi5jICAgICAgICB8IDExICsrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYyAgICAgICAgIHwgIDUgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTAgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAg ICAgICAgICAgICAgICB8IDExICsrKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgICAgICAgIHwgIDIgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhw ZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3Rl ZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggY2E5YTIzZWE2MWYuLmEzNzdmYjI1NzFkIDEwMDY0 NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91 dApAQCAtMTA0LDYgKzEwNCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKICAgICAgICAgICAgICAgIFBsYW4gTm9kZSBJRDogMgogICAgICAgICAgICAgICAgQXBw ZW5kIFJUSXM6IDEKKyAgICAgICAgICAgICAgIENoaWxkIEFwcGVuZCBSVElzOiBub25lCiAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYnJhc3NpY2EgdmVnZXRhYmxlc18xCiAgICAgICAg ICAgICAgICAgICAgICBEaXNhYmxlZCBOb2RlczogMAogICAgICAgICAgICAgICAgICAgICAgUGFy YWxsZWwgU2FmZTogdHJ1ZQpAQCAtMTQyLDcgKzE0Myw3IEBAICQkKTsKICAgIFJlbGF0aW9uIEtp bmQ6IHJlbGF0aW9uCiAgICBSZWxhdGlvbiBMb2NrIE1vZGU6IEFjY2Vzc1NoYXJlTG9jawogIFVu cHJ1bmFibGUgUlRJczogMSAzIDQKLSg1MyByb3dzKQorKDU0IHJvd3MpCiAKIC0tIFRlc3QgYSBk aWZmZXJlbnQgb3V0cHV0IGZvcm1hdC4KIFNFTEVDVCBleHBsYWluX2ZpbHRlcigkJApAQCAtMTk3 LDYgKzE5OCw3IEBAICQkKTsKICAgICAgICAgICAgICAgIDxleHRQYXJhbT5ub25lPC9leHRQYXJh bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPGFsbFBhcmFt Pm5vbmU8L2FsbFBhcmFtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAg ICAgICA8QXBwZW5kLVJUSXM+MTwvQXBwZW5kLVJUSXM+ICAgICAgICAgICAgICAgICAgICAgICAg ICsKKyAgICAgICAgICAgICAgIDxDaGlsZC1BcHBlbmQtUlRJcz5ub25lPC9DaGlsZC1BcHBlbmQt UlRJcz4gICAgICAgICAgKwogICAgICAgICAgICAgICAgPFN1YnBsYW5zLVJlbW92ZWQ+MDwvU3Vi cGxhbnMtUmVtb3ZlZD4gICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICA8UGxhbnM+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAg ICAgICAgPFBsYW4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jIGIv Y29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmluZGV4IGU1NGY4Y2ZjMzMy Li5jMjgzNDhlYTk2NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVy ZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwpA QCAtNTQsNiArNTQsOCBAQCBzdGF0aWMgdm9pZCBvdmVyZXhwbGFpbl9hbGlhcyhjb25zdCBjaGFy ICpxbGFiZWwsIEFsaWFzICphbGlhcywKIAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3Rh dGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0bWFwc2V0KGNvbnN0IGNoYXIgKnFsYWJlbCwgQml0bWFw c2V0ICpibXMsCiAJCQkJCQkJCSAgRXhwbGFpblN0YXRlICplcyk7CitzdGF0aWMgdm9pZCBvdmVy ZXhwbGFpbl9iaXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0 LAorCQkJCQkJCQkJICAgRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBvdmVyZXhwbGFp bl9pbnRsaXN0KGNvbnN0IGNoYXIgKnFsYWJlbCwgTGlzdCAqbGlzdCwKIAkJCQkJCQkJRXhwbGFp blN0YXRlICplcyk7CiAKQEAgLTIzMiwxMSArMjM0LDE3IEBAIG92ZXJleHBsYWluX3Blcl9ub2Rl X2hvb2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCQlvdmVyZXhw bGFpbl9iaXRtYXBzZXQoIkFwcGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChBcHBlbmQgKikgcGxh biktPmFwcHJlbGlkcywKIAkJCQkJCQkJCSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNl dF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJcyIsCisJCQkJCQkJCQkJICAgKChBcHBlbmQgKikgcGxh biktPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAorCQkJCQkJCQkJCSAgIGVzKTsKIAkJCQlicmVh azsKIAkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKIAkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXQoIkFw cGVuZCBSVElzIiwKIAkJCQkJCQkJCSAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRz LAogCQkJCQkJCQkJICBlcyk7CisJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xpc3QoIkNoaWxk IEFwcGVuZCBSVElzIiwKKwkJCQkJCQkJCQkgICAoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQlj YXNlIFRfUmVzdWx0OgogCkBAIC04MTUsNiArODIzLDU0IEBAIG92ZXJleHBsYWluX2JpdG1hcHNl dChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLCBFeHBsYWluU3RhdGUgKmVzKQog CXBmcmVlKGJ1Zi5kYXRhKTsKIH0KIAorLyoKKyAqIEVtaXQgYSB0ZXh0IHByb3BlcnR5IGRlc2Ny aWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBiaXRtYXBzZXRzLgorICogSWYgYSBiaXRt YXBzZXQgY29udGFpbnMgZXhhY3RseSAxIG1lbWJlciwgd2UganVzdCBwcmludCBhbiBpbnRlZ2Vy OworICogb3RoZXJ3aXNlLCB3ZSBzdXJyb3VuZCB0aGUgbGlzdCBvZiBtZW1iZXJzIGJ5IHBhcmVu dGhlc2VzLgorICoKKyAqIElmIHRoZXJlIGFyZSBubyBiaXRtYXBzZXRzIGluIHRoZSBsaXN0LCB3 ZSBwcmludCB0aGUgd29yZCAibm9uZSIuCisgKi8KK3N0YXRpYyB2b2lkCitvdmVyZXhwbGFpbl9i aXRtYXBzZXRfbGlzdChjb25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmJtc19saXN0LAorCQkJCQkJ ICAgRXhwbGFpblN0YXRlICplcykKK3sKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3Ry aW5nSW5mbygmYnVmKTsKKworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGJtcywgYm1zX2xpc3Qp CisJeworCQlpZiAoYm1zX21lbWJlcnNoaXAoYm1zKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAiICVkIiwgYm1zX3NpbmdsZXRvbl9tZW1iZXIoYm1zKSk7CisJ CWVsc2UKKwkJeworCQkJaW50CQkJeCA9IC0xOworCQkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJ CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZidWYsICIgKCIpOworCQkJd2hpbGUgKCh4ID0gYm1z X25leHRfbWVtYmVyKGJtcywgeCkpID49IDApCisJCQl7CisJCQkJaWYgKGZpcnN0KQorCQkJCQlm aXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1Ziwg JyAnKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCQkJfQorCQkJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWlmIChidWYubGVuID09 IDApCisJeworCQlFeHBsYWluUHJvcGVydHlUZXh0KHFsYWJlbCwgIm5vbmUiLCBlcyk7CisJCXJl dHVybjsKKwl9CisKKwlBc3NlcnQoYnVmLmRhdGFbMF0gPT0gJyAnKTsKKwlFeHBsYWluUHJvcGVy dHlUZXh0KHFsYWJlbCwgYnVmLmRhdGEgKyAxLCBlcyk7CisJcGZyZWUoYnVmLmRhdGEpOworfQor CiAvKgogICogRW1pdCBhIHRleHQgcHJvcGVydHkgZGVzY3JpYmluZyB0aGUgY29udGVudHMgb2Yg YSBsaXN0IG9mIGludGVnZXJzLCBPSURzLAogICogb3IgWElEcyAtLSBlaXRoZXIgYSBzcGFjZS1z ZXBhcmF0ZWQgbGlzdCBvZiBpbnRlZ2VyIG1lbWJlcnMsIG9yIHRoZSB3b3JkCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA0YzQzZmQwYjE5Yi4uOTI4YjhkODRhZDggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtMTI4LDggKzEyOCwxMCBAQCBz dGF0aWMgUGF0aCAqZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBzdGF0 aWMgdm9pZCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsCiAJCQkJCQkJCQkg IExpc3QgKipzdWJwYXRocywKLQkJCQkJCQkJCSAgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpOwot c3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCk7CisJ CQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBMaXN0ICoqY2hp bGRfYXBwZW5kX3JlbGlkX3NldHMpOworc3RhdGljIFBhdGggKmdldF9zaW5nbGV0b25fYXBwZW5k X3N1YnBhdGgoUGF0aCAqcGF0aCwKKwkJCQkJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyk7CiBzdGF0aWMgdm9pZCBzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KFJlbE9wdEluZm8g KnJlbCk7CiBzdGF0aWMgdm9pZCBzZXRfc3VicXVlcnlfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSk7CkBAIC0xNDA2LDExICsxNDA4LDE1IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiB7CiAJTGlzdAkgICAqc3VicGF0aHMg PSBOSUw7CiAJYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN1YnBhdGhf Y2FycyA9IE5JTDsKIAlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhzID0gTklMOwogCWJvb2wJCXN0 YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSB0cnVlOworCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aF9j YXJzID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxfc3VicGF0aHMgPSBOSUw7CisJTGlzdAkgICAq cGFydGlhbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJTGlzdAkgICAqcGFfcGFydGlhbF9zdWJwYXRo cyA9IE5JTDsKIAlMaXN0CSAgICpwYV9ub25wYXJ0aWFsX3N1YnBhdGhzID0gTklMOworCUxpc3QJ ICAgKnBhX3N1YnBhdGhfY2FycyA9IE5JTDsKIAlib29sCQlwYXJ0aWFsX3N1YnBhdGhzX3ZhbGlk ID0gdHJ1ZTsKIAlib29sCQlwYV9zdWJwYXRoc192YWxpZDsKIAlMaXN0CSAgICphbGxfY2hpbGRf cGF0aGtleXMgPSBOSUw7CkBAIC0xNDQzLDcgKzE0NDksNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5k X3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQlpZiAoY2hpbGRyZWwt PnBhdGhsaXN0ICE9IE5JTCAmJgogCQkJY2hpbGRyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBh cmFtX2luZm8gPT0gTlVMTCkKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hpbGRyZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgsCi0JCQkJCQkJCQkgICZzdWJwYXRocywgTlVMTCk7CisJCQkJ CQkJCQkgICZzdWJwYXRocywgTlVMTCwgJnN1YnBhdGhfY2Fycyk7CiAJCWVsc2UKIAkJCXN1YnBh dGhzX3ZhbGlkID0gZmFsc2U7CiAKQEAgLTE0NzIsNyArMTQ3OCw4IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlBc3NlcnQo Y2hlYXBlc3RfcGF0aC0+cGFyYW1faW5mbyA9PSBOVUxMKTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5k X3N1YnBhdGgoY2hlYXBlc3RfcGF0aCwKIAkJCQkJCQkJCSAgJnN0YXJ0dXBfc3VicGF0aHMsCi0J CQkJCQkJCQkgIE5VTEwpOworCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJICAmc3RhcnR1cF9z dWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXN0YXJ0dXBfc3VicGF0aHNfdmFsaWQgPSBm YWxzZTsKQEAgLTE0ODMsNyArMTQ5MCw4IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxf cGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxh dGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlhbF9wYXRoLAotCQkJCQkJCQkJICAmcGFy dGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkgICZwYXJ0aWFsX3N1YnBhdGhzLCBOVUxM LAorCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRoX2NhcnMpOwogCQl9CiAJCWVsc2UKIAkJCXBh cnRpYWxfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKQEAgLTE1MTIsNyArMTUyMCw4IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJQXNzZXJ0KGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKTsKIAkJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKIAkJCQkJCQkJCQkgICZwYV9w YXJ0aWFsX3N1YnBhdGhzLAotCQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMpOwor CQkJCQkJCQkJCSAgJnBhX25vbnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFfc3Vi cGF0aF9jYXJzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTE1MzEsNyArMTU0MCw4IEBAIGFk ZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CiAJCQkJICovCiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChucHBhdGgsCiAJCQkJCQkJ CQkJICAmcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgIE5VTEwpOworCQkJCQkJ CQkJCSAgTlVMTCwKKwkJCQkJCQkJCQkgICZwYV9zdWJwYXRoX2NhcnMpOwogCQkJfQogCQl9CiAK QEAgLTE2MDYsMTQgKzE2MTYsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBpZiB3ZSBoYXZlIHplcm8gb3Igb25lIGxp dmUgc3VicGF0aCBkdWUgdG8gY29uc3RyYWludCBleGNsdXNpb24uKQogCSAqLwogCWlmIChzdWJw YXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo cm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJICBOSUwsIHN1 YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwKIAkJCQkJCQkJ CQkJCSAgLTEpKTsKIAogCS8qIGJ1aWxkIGFuIEFwcGVuZFBhdGggZm9yIHRoZSBjaGVhcCBzdGFy dHVwIHBhdGhzLCBpZiB2YWxpZCAqLwogCWlmIChzdGFydHVwX3N1YnBhdGhzX3ZhbGlkKQogCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN0YXJ0 dXBfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkgIE5JTCwgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEp KTsKKwkJCQkJCQkJCQkJCSAgTklMLCBzdGFydHVwX3N1YnBhdGhfY2FycywKKwkJCQkJCQkJCQkJ CSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIgYW4gYXBw ZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBNYWtlCkBA IC0xNjU0LDYgKzE2NjYsNyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIEdlbmVyYXRlIGEgcGFydGlhbCBhcHBlbmQg cGF0aC4gKi8KIAkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5J TCwgcGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCQlwYXJ0aWFsX3N1YnBhdGhfY2FycywKIAkJ CQkJCQkJCQlOSUwsIE5VTEwsIHBhcmFsbGVsX3dvcmtlcnMsCiAJCQkJCQkJCQkJZW5hYmxlX3Bh cmFsbGVsX2FwcGVuZCwKIAkJCQkJCQkJCQktMSk7CkBAIC0xNzA0LDYgKzE3MTcsNyBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CiAJCWFwcGVuZHBhdGggPSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBwYV9ub25wYXJ0 aWFsX3N1YnBhdGhzLAogCQkJCQkJCQkJCXBhX3BhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJ cGFfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxsZWxfd29ya2Vycywg dHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlhbF9wYXRoKHJlbCwg KFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzM3LDYgKzE3NTEsNyBAQCBhZGRfcGF0aHNfdG9f YXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIFNl bGVjdCB0aGUgY2hpbGQgcGF0aHMgZm9yIGFuIEFwcGVuZCB3aXRoIHRoaXMgcGFyYW1ldGVyaXph dGlvbiAqLwogCQlzdWJwYXRocyA9IE5JTDsKKwkJc3VicGF0aF9jYXJzID0gTklMOwogCQlzdWJw YXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBsaXZlX2NoaWxkcmVscykKIAkJewpA QCAtMTc1OSwxMiArMTc3NCwxMyBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCXN1YnBhdGhzX3ZhbGlkID0gZmFsc2U7CiAJ CQkJYnJlYWs7CiAJCQl9Ci0JCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCk7CisJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKHN1YnBhdGgsICZz dWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnN1YnBhdGhfY2Fycyk7CiAJCX0KIAogCQlpZiAo c3VicGF0aHNfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICopCi0JCQkJCSBjcmVhdGVf YXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJCQkgY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgc3VicGF0aHMsIE5JTCwgc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJ CU5JTCwgcmVxdWlyZWRfb3V0ZXIsIDAsIGZhbHNlLAogCQkJCQkJCQkJCS0xKSk7CiAJfQpAQCAt MTc5MSw2ICsxODA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQljb250aW51ZTsKIAogCQkJYXBwZW5kcGF0aCA9IGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRoKSwKKwkJCQkJ CQkJCQkJbGlzdF9tYWtlMShyZWwtPnJlbGlkcyksCiAJCQkJCQkJCQkJCU5JTCwgTlVMTCwKIAkJ CQkJCQkJCQkJcGF0aC0+cGFyYWxsZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQkJcGFydGlh bF9yb3dzKTsKQEAgLTE4NzQsOCArMTg5MSwxMSBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewogCQlMaXN0CSAgICpw YXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwogCQlMaXN0CSAgICpzdGFydHVwX3N1YnBh dGhzID0gTklMOworCQlMaXN0CSAgICpzdGFydHVwX3N1YnBhdGhfY2FycyA9IE5JTDsKIAkJTGlz dAkgICAqdG90YWxfc3VicGF0aHMgPSBOSUw7CisJCUxpc3QJICAgKnRvdGFsX3N1YnBhdGhfY2Fy cyA9IE5JTDsKIAkJTGlzdAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJTGlzdAkg ICAqZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMgPSBOSUw7CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3Rv dGFsID0gZmFsc2U7CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29s CQltYXRjaF9wYXJ0aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDU4LDIzIEBAIGdlbmVyYXRl X29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkgKiBqdXN0IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55 dGhpbmcKIAkJCQkgKiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBn ZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFw ZXN0X3RvdGFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7 CisJCQkJY2hlYXBlc3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBh dGgoY2hlYXBlc3Rfc3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cF9zdWJwYXRoX2NhcnMp OworCQkJCWNoZWFwZXN0X3RvdGFsID0KKwkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0 aChjaGVhcGVzdF90b3RhbCwKKwkJCQkJCQkJCQkJCSAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAog CQkJCXN0YXJ0dXBfc3VicGF0aHMgPSBsYXBwZW5kKHN0YXJ0dXBfc3VicGF0aHMsIGNoZWFwZXN0 X3N0YXJ0dXApOwogCQkJCXRvdGFsX3N1YnBhdGhzID0gbGFwcGVuZCh0b3RhbF9zdWJwYXRocywg Y2hlYXBlc3RfdG90YWwpOwogCiAJCQkJaWYgKGNoZWFwZXN0X2ZyYWN0aW9uYWwpCiAJCQkJewot CQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0gZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChj aGVhcGVzdF9mcmFjdGlvbmFsKTsKLQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocyA9IGxhcHBlbmQo ZnJhY3Rpb25hbF9zdWJwYXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CisJCQkJCWNoZWFwZXN0 X2ZyYWN0aW9uYWwgPQorCQkJCQkJZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVz dF9mcmFjdGlvbmFsLAorCQkJCQkJCQkJCQkJCSAmZnJhY3Rpb25hbF9zdWJwYXRoX2NhcnMpOwor CQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbF9zdWJw YXRocywgY2hlYXBlc3RfZnJhY3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1 NywxMyArMjA4NCwxNiBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJn ZUFwcGVuZC4KIAkJCQkgKi8KIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0 X3N0YXJ0dXAsCi0JCQkJCQkJCQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwX3N1YnBh dGhfY2Fycyk7CiAJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCwK LQkJCQkJCQkJCQkgICZ0b3RhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmdG90YWxf c3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkJICAmdG90YWxfc3VicGF0aF9jYXJzKTsKIAogCQkJ CWlmIChjaGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X2ZyYWN0aW9uYWwsCi0JCQkJCQkJCQkJCSAgJmZyYWN0aW9uYWxfc3VicGF0aHMs IE5VTEwpOworCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhzLCBOVUxMLAorCQkJCQkJ CQkJCQkgICZmcmFjdGlvbmFsX3N1YnBhdGhfY2Fycyk7CiAJCQl9CiAJCX0KIApAQCAtMjA3NSw2 ICsyMTA1LDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJCQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCSAg c3RhcnR1cF9zdWJwYXRocywKIAkJCQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkgIHN0 YXJ0dXBfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJ CQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwKQEAgLTIwODUsNiArMjExNiw3IEBAIGdlbmVy YXRlX29yZGVyZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCwKIAkJCQkJCQkJCQkJCQkJICByZWwsCiAJCQkJCQkJCQkJCQkJCSAgdG90YWxfc3VicGF0aHMs CiAJCQkJCQkJCQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhfY2Fy cywKIAkJCQkJCQkJCQkJCQkJICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJ CQkJCQkJCQkJCQkgIDAsCkBAIC0yMDk2LDYgKzIxMjgsNyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBw ZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJ CQkJCSAgcmVsLAogCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCiAJCQkJCQkJ CQkJCQkJCSAgTklMLAorCQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAog CQkJCQkJCQkJCQkJCQkgIHBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJ CQkJCQkJCSAgMCwKQEAgLTIxMDgsMTIgKzIxNDEsMTQgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVu ZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCXN0YXJ0dXBfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJ CQlzdGFydHVwX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCXBhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCQkJTlVMTCkpOwogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRo KHJlbCwgKFBhdGggKikgY3JlYXRlX21lcmdlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJ CQkJCQkJcmVsLAogCQkJCQkJCQkJCQkJCQkJCXRvdGFsX3N1YnBhdGhzLAorCQkJCQkJCQkJCQkJ CQkJCXRvdGFsX3N1YnBhdGhfY2FycywKIAkJCQkJCQkJCQkJCQkJCQlwYXRoa2V5cywKIAkJCQkJ CQkJCQkJCQkJCQlOVUxMKSk7CiAKQEAgLTIxMjEsNiArMjE1Niw3IEBAIGdlbmVyYXRlX29yZGVy ZWRhcHBlbmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJ CQkJCQkJCQkJCQkJCXJlbCwKIAkJCQkJCQkJCQkJCQkJCQlmcmFjdGlvbmFsX3N1YnBhdGhzLAor CQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWxfc3VicGF0aF9jYXJzLAogCQkJCQkJCQkJCQkJCQkJ CXBhdGhrZXlzLAogCQkJCQkJCQkJCQkJCQkJCU5VTEwpKTsKIAkJfQpAQCAtMjIyMyw3ICsyMjU5 LDggQEAgZ2V0X2NoZWFwZXN0X3BhcmFtZXRlcml6ZWRfY2hpbGRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogICogcGF0aHMpLgogICovCiBzdGF0aWMgdm9pZAotYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3Qg KipzcGVjaWFsX3N1YnBhdGhzKQorYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRo LCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzLAorCQkJCQkJICBMaXN0 ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpCiB7CiAJaWYgKElzQShwYXRoLCBBcHBlbmRQYXRo KSkKIAl7CkBAIC0yMjMyLDYgKzIyNjksOCBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlm ICghYXBhdGgtPnBhdGgucGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0 aCA9PSAwKQogCQl7CiAJCQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRo LT5zdWJwYXRocyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQo KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1 cm47CiAJCX0KIAkJZWxzZSBpZiAoc3BlY2lhbF9zdWJwYXRocyAhPSBOVUxMKQpAQCAtMjI0Niw2 ICsyMjg1LDggQEAgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoq c3VicGF0aHMsIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKQogCQkJCQkJCQkJCQkJICBhcGF0aC0+ Zmlyc3RfcGFydGlhbF9wYXRoKTsKIAkJCSpzcGVjaWFsX3N1YnBhdGhzID0gbGlzdF9jb25jYXQo KnNwZWNpYWxfc3VicGF0aHMsCiAJCQkJCQkJCQkJCW5ld19zcGVjaWFsX3N1YnBhdGhzKTsKKwkJ CSpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVsaWRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAg LTIyNTQsNiArMjI5NSw4IEBAIGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwg TGlzdCAqKnN1YnBhdGhzLCBMaXN0ICoqc3BlY2lhbF9zdWJwYXRocykKIAkJTWVyZ2VBcHBlbmRQ YXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQkqc3VicGF0aHMgPSBs aXN0X2NvbmNhdCgqc3VicGF0aHMsIG1wYXRoLT5zdWJwYXRocyk7CisJCSpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cyA9CisJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0aC0+ cGFyZW50LT5yZWxpZHMpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMjY1LDEwICsyMzA4LDE1IEBA IGFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKnN1YnBhdGhzLCBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocykKICAqCQlSZXR1cm5zIHRoZSBzaW5nbGUgc3VicGF0aCBv ZiBhbiBBcHBlbmQvTWVyZ2VBcHBlbmQsIG9yIGp1c3QKICAqCQlyZXR1cm4gJ3BhdGgnIGlmIGl0 J3Mgbm90IGEgc2luZ2xlIHN1Yi1wYXRoIEFwcGVuZC9NZXJnZUFwcGVuZC4KICAqCisgKiBBcyBh IHNpZGUgZWZmZWN0LCB3aGVuZXZlciB3ZSByZXR1cm4gYSBzaW5nbGUgc3VicGF0aCByYXRoZXIg dGhhbiB0aGUKKyAqIG9yaWdpbmFsIHBhdGgsIGFkZCB0aGUgcmVsaWQgc2V0IGZvciB0aGUgb3Jp Z2luYWwgcGF0aCB0bworICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHNvIHRoYXQgdGhvc2Ug cmVsaWRzIGRvbid0IGVudGlyZWx5IGRpc2FwcGVhcgorICogZnJvbSB0aGUgZmluYWwgcGxhbi4K KyAqCiAgKiBOb3RlOiAncGF0aCcgbXVzdCBub3QgYmUgYSBwYXJhbGxlbC1hd2FyZSBwYXRoLgog ICovCiBzdGF0aWMgUGF0aCAqCi1nZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBh dGgpCitnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cykKIHsKIAlBc3NlcnQoIXBhdGgtPnBhcmFsbGVsX2F3YXJlKTsK IApAQCAtMjI3NywxNCArMjMyNSwyMiBAQCBnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgpCiAJCUFwcGVuZFBhdGggKmFwYXRoID0gKEFwcGVuZFBhdGggKikgcGF0aDsKIAog CQlpZiAobGlzdF9sZW5ndGgoYXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz LCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwoYXBh dGgtPnN1YnBhdGhzKTsKKwkJfQogCX0KIAllbHNlIGlmIChJc0EocGF0aCwgTWVyZ2VBcHBlbmRQ YXRoKSkKIAl7CiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGggPSAoTWVyZ2VBcHBlbmRQYXRoICop IHBhdGg7CiAKIAkJaWYgKGxpc3RfbGVuZ3RoKG1wYXRoLT5zdWJwYXRocykgPT0gMSkKKwkJewor CQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cywgcGF0aC0+cGFyZW50LT5yZWxpZHMpOwogCQkJcmV0dXJuIChQYXRoICopIGxp bml0aWFsKG1wYXRoLT5zdWJwYXRocyk7CisJCX0KIAl9CiAKIAlyZXR1cm4gcGF0aDsKQEAgLTIz MTMsNyArMjM2OSw3IEBAIHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQog CXJlbC0+cGFydGlhbF9wYXRobGlzdCA9IE5JTDsKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0 aCAqLwotCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJl bCwgTklMLCBOSUwsCisJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgo TlVMTCwgcmVsLCBOSUwsIE5JTCwgTklMLAogCQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFs X3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBmYWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKaW5kZXggODgyN2I5YTUyNDUuLjc2NDc4Mzg5NjUzIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTE1MzAsNyArMTUzMCw3IEBAIG1hcmtf ZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCkKIAogCS8qIFNldCB1cCB0aGUgZHVtbXkgcGF0aCAq LwogCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwg TklMLCBOSUwsCi0JCQkJCQkJCQkJCSAgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAorCQkJCQkJ CQkJCQkgIE5JTCwgTklMLCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZh bHNlLCAtMSkpOwogCiAJLyogU2V0IG9yIHVwZGF0ZSBjaGVhcGVzdF90b3RhbF9wYXRoIGFuZCBy ZWxhdGVkIGZpZWxkcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmlu ZGV4IGJjNDE3ZjkzODQwLi5lM2YyN2E1ODZjYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2NyZWF0ZXBsYW4uYwpAQCAtMTI2NSw2ICsxMjY1LDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBs YW5uZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFu LT5wbGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJ cGxhbi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhr ZXlzICE9IE5JTCkKIAl7CkBAIC0xNDc3LDYgKzE0NzgsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5k X3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBs YW4tPmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFw cHJlbGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g YmVzdF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBz b3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVk LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGRmOWQwM2Q1NDkyLi45NGUx YWM5NmVkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDAyNyw2ICs0 MDI3LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkgICBwYXRocywKIAkJCQkJCQkgICBO SUwsCiAJCQkJCQkJICAgTklMLAorCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCiAJCQkJCQkJICAgZmFsc2UsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1 bmlvbi5jCmluZGV4IGEwMWIwMmYzYTdiLi4xMmQwYzgyMWVkNyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTg0Myw3ICs4NDMsNyBAQCBnZW5lcmF0ZV91bmlvbl9w YXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogdW5pb24g Y2hpbGQuCiAJICovCiAJYXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwg cmVzdWx0X3JlbCwgY2hlYXBlc3RfcGF0aGxpc3QsCi0JCQkJCQkJCQkJTklMLCBOSUwsIE5VTEws IDAsIGZhbHNlLCAtMSk7CisJCQkJCQkJCQkJTklMLCBOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2Us IC0xKTsKIAogCS8qCiAJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4gIEZvciBub3cgd2Ug anVzdCBhc3N1bWUgdGhlIG91dHB1dCBpcyB1bmlxdWUKQEAgLTg4OSw3ICs4ODksNyBAQCBnZW5l cmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3Qs CiAKIAkJcGFwYXRoID0gKFBhdGggKikKIAkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1 bHRfcmVsLCBOSUwsIHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJICAgTklMLCBOVUxMLCBwYXJh bGxlbF93b3JrZXJzLAorCQkJCQkJCSAgIE5JTCwgTklMLCBOVUxMLCBwYXJhbGxlbF93b3JrZXJz LAogCQkJCQkJCSAgIGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQsIC0xKTsKIAkJZ3BhdGggPSAoUGF0 aCAqKQogCQkJY3JlYXRlX2dhdGhlcl9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIHBhcGF0aCwKQEAg LTEwMTgsNiArMTAxOCw3IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWVyZ2Vf YXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkgcmVzdWx0X3JlbCwKIAkJCQkJCQkJCQkJ CQkgb3JkZXJlZF9wYXRobGlzdCwKKwkJCQkJCQkJCQkJCQkgTklMLAogCQkJCQkJCQkJCQkJCSB1 bmlvbl9wYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkgTlVMTCk7CiAKQEAgLTEyMjQsOCArMTIyNSwx MCBAQCBnZW5lcmF0ZV9ub251bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJICogYmV0d2VlbiB0aGUgc2V0IG9wIHRhcmdldGxpc3QgYW5kIHRo ZSB0YXJnZXRsaXN0IG9mIHRoZQogCQkJCSAqIGxlZnQgaW5wdXQuICBUaGUgQXBwZW5kIHdpbGwg YmUgcmVtb3ZlZCBpbiBzZXRyZWZzLmMuCiAJCQkJICovCi0JCQkJYXBhdGggPSAoUGF0aCAqKSBj cmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwgbGlzdF9tYWtlMShscGF0aCksCi0J CQkJCQkJCQkJCQkJTklMLCBOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CisJCQkJYXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVzdWx0X3JlbCwKKwkJCQkJCQkJCQkJ CQlsaXN0X21ha2UxKGxwYXRoKSwKKwkJCQkJCQkJCQkJCQlOSUwsIE5JTCwgTklMLCBOVUxMLCAw LAorCQkJCQkJCQkJCQkJCWZhbHNlLCAtMSk7CiAKIAkJCQlhZGRfcGF0aChyZXN1bHRfcmVsLCBh cGF0aCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2Rl LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCmluZGV4IGI2YmU0ZGRi ZDAxLi4zM2NlMzRmMDA4OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBA IC0xMzAxLDYgKzEzMDEsNyBAQCBBcHBlbmRQYXRoICoKIGNyZWF0ZV9hcHBlbmRfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgICBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICAgTGlzdCAqc3Vi cGF0aHMsIExpc3QgKnBhcnRpYWxfc3VicGF0aHMsCisJCQkJICAgTGlzdCAqY2hpbGRfYXBwZW5k X3JlbGlkX3NldHMsCiAJCQkJICAgTGlzdCAqcGF0aGtleXMsIFJlbGlkcyByZXF1aXJlZF9vdXRl ciwKIAkJCQkgICBpbnQgcGFyYWxsZWxfd29ya2VycywgYm9vbCBwYXJhbGxlbF9hd2FyZSwKIAkJ CQkgICBkb3VibGUgcm93cykKQEAgLTEzMTAsNiArMTMxMSw3IEBAIGNyZWF0ZV9hcHBlbmRfcGF0 aChQbGFubmVySW5mbyAqcm9vdCwKIAogCUFzc2VydCghcGFyYWxsZWxfYXdhcmUgfHwgcGFyYWxs ZWxfd29ya2VycyA+IDApOwogCisJcGF0aG5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0g Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiAJcGF0aG5vZGUtPnBhdGgucGF0aHR5cGUgPSBUX0Fw cGVuZDsKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJcGF0aG5vZGUtPnBhdGgucGF0 aHRhcmdldCA9IHJlbC0+cmVsdGFyZ2V0OwpAQCAtMTQ3Miw2ICsxNDc0LDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4Nyw2ICsxNDkwLDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5NTEsNiArMzk1NSw3IEBAIHJlcGFyYW1ldGVyaXpl X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJfQogCQkJCXJldHVybiAo UGF0aCAqKQogCQkJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBw YXJ0aWFscGF0aHMsCisJCQkJCQkJCQkgICBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJ CQkJCQkgICBhcGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgt PnBhdGgucGFyYWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDcxNjkyMDk3MzU1 Li5lYWNhZTE2YjgyNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgK KysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIxNzIsNiArMjE3MiwxMiBA QCB0eXBlZGVmIHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJw YXRocycgY29udGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRp YWwgc3VicGF0aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgp IGFsbG93cyB1cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBw YXRocyBkb3duIHRvIG9uZSwgd2Ugc3RvcmUgdGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAor ICogcGF0aHMgaW4gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2Fy eSBmb3IgcGxhbm5pbmcgb3IKKyAqIGV4ZWN1dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0 IG9mIGNvZGUgdGhhdCB3YW50cyB0byBpbnNwZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5k ZXJzdGFuZCBob3cgaXQgY2FtZSB0byBiZS4KKyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBm b3IgInN1YnBhdGhzIiB0byBjb250YWluIG9ubHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVu dHMuICBUaGVzZSBjYXNlcyBhcmUgb3B0aW1pemVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4u CiAgKiBJbiBwYXJ0aWN1bGFyLCBhbiBBcHBlbmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAi ZHVtbXkiIHBhdGggdGhhdApAQCAtMjE4Nyw2ICsyMTkzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBw ZW5kUGF0aAogCS8qIEluZGV4IG9mIGZpcnN0IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlz dF9sZW5ndGgoc3VicGF0aHMpIGlmIG5vbmUgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7 CiAJQ2FyZGluYWxpdHkgbGltaXRfdHVwbGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBs ZXMsIG9yIC0xICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVu ZFBhdGg7CiAKICNkZWZpbmUgSVNfRFVNTVlfQVBQRU5EKHApIFwKQEAgLTIyMDMsMTIgKzIyMTAs MTUgQEAgZXh0ZXJuIGJvb2wgaXNfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICog TWVyZ2VBcHBlbmRQYXRoIHJlcHJlc2VudHMgYSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1l cmdpbmcgb2Ygc29ydGVkCiAgKiByZXN1bHRzIGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8g cHJvZHVjZSBzaW1pbGFybHktc29ydGVkIG91dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVs aWRfc2V0cyBoYXMgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICov CiB0eXBlZGVmIHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJ ICAgKnN1YnBhdGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0 eSBsaW1pdF90dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8K KwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwog CiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5j bHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCBlZGZkMDIyMzBhNi4uNzI0OGRiMjE2YmIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0zOTQsOSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25Q cnVuZUluZm87CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVk ZWYgc3RydWN0IEFwcGVuZAogewogCVBsYW4JCXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJl bChzKSBmb3JtZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJ Lyogc2V0cyBvZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2Rl ICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBy dW4gKi8KIAlMaXN0CSAgICphcHBlbmRwbGFuczsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBs YW5zICovCiAJaW50CQkJbmFzeW5jcGxhbnM7CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRl ZiBzdHJ1Y3QgTWVyZ2VBcHBlbmQKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkg dGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElz IG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAq Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAg ICptZXJnZXBsYW5zOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQt a2V5IGluZm8gaW4gc3RydWN0IFNvcnQ6ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4 IDZiMDEwZjBiMWE1Li5kYmY0NzAyYWNjOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAg LTcxLDEyICs3MSwxNCBAQCBleHRlcm4gVGlkUmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFuZ2VzY2Fu X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtl cnMpOwogZXh0ZXJuIEFwcGVuZFBhdGggKmNyZWF0ZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICBMaXN0ICpzdWJwYXRocywgTGlzdCAq cGFydGlhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMsCiAJCQkJCQkJCQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJ CQkJCQkJCQkgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJ CQkJCQkJICBkb3VibGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQYXRoICpjcmVhdGVfbWVy Z2VfYXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5m byAqcmVsLAogCQkJCQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJIExpc3Qg KmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhdGhrZXlzLAog CQkJCQkJCQkJCQkJIFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRlcm4gR3JvdXBSZXN1bHRQ YXRoICpjcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCi0tIAoyLjUx LjAKCg== --0000000000001b5bb506460325ec Content-Type: application/octet-stream; name="v7-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Disposition: attachment; filename="v7-0002-Store-information-about-elided-nodes-in-the-final.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj7kxtno1 RnJvbSA5ODA4NGI5OThlMWI0MDM1NDU2YjY5NTkxNzRiNWU1NDhiNjY2ZmI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY3IDIv NV0gU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgZWxpZGVkIG5vZGVzIGluIHRoZSBmaW5hbAogcGxh bi4KCkFuIGV4dGVuc2lvbiAob3IgY29yZSBjb2RlKSBtaWdodCB3YW50IHRvIHJlY29uc3RydWN0 IHRoZSBwbGFubmVyJ3MKY2hvaWNlIG9mIGpvaW4gb3JkZXIgZnJvbSB0aGUgZmluYWwgcGxhbi4g VG8gZG8gc28sIGl0IG11c3QgYmUgcG9zc2libGUKdG8gZmluZCBhbGwgb2YgdGhlIFJUSXMgdGhh dCB3ZXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbSBpbiB0aGF0IHBsYW4uClRoZSBwcmV2aW91 cyBjb21taXQsIHRvZ2V0aGVyIHdpdGggdGhlIGVhcmxpZXIgd29yayBpbgo4YzQ5YTQ4NGU4ZWJi MDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQwLCBpcyBlbm91Z2ggdG8gbGV0IHVzIG1hdGNoIHVw ClJUSXMgd2Ugc2VlIGluIHRoZSBmaW5hbCBwbGFuIHdpdGggUlRJcyB0aGF0IHdlIHNlZSBkdXJp bmcgdGhlIHBsYW5uaW5nCmN5Y2xlLCBidXQgd2Ugc3RpbGwgaGF2ZSBhIHByb2JsZW0gaWYgdGhl IHBsYW5uZXIgZGVjaWRlcyB0byBkcm9wIHNvbWUKUlRJcyBvdXQgb2YgdGhlIGZpbmFsIHBsYW4g YWx0b2dldGhlci4KClRvIGZpeCB0aGF0LCB3aGVuIHNldHJlZnMuYyByZW1vdmVzIGEgU3VicXVl cnlTY2FuLCBzaW5nbGUtY2hpbGQgQXBwZW5kLApvciBzaW5nbGUtY2hpbGQgTWVyZ2VBcHBlbmQg ZnJvbSB0aGUgZmluYWwgUGxhbiB0cmVlLCByZWNvcmQgdGhlIHR5cGUgb2YKdGhlIHJlbW92ZWQg bm9kZSBhbmQgdGhlIFJUSXMgdGhhdCB0aGUgcmVtb3ZlZCBub2RlIHdvdWxkIGhhdmUgc2Nhbm5l ZAppbiB0aGUgZmluYWwgcGxhbiB0cmVlLiBJdCB3b3VsZCBiZSBuYXR1cmFsIHRvIHJlY29yZCB0 aGlzIGluZm9ybWF0aW9uCm9uIHRoZSBjaGlsZCBvZiB0aGUgcmVtb3ZlZCBwbGFuIG5vZGUsIGJ1 dCB0aGF0IHdvdWxkIHJlcXVpcmUgYWRkaW5nCmFuIGFkZGl0aW9uYWwgcG9pbnRlciBmaWVsZCB0 byB0eXBlIFBsYW4sIHdoaWNoIHNlZW1zIHVuZGVzaXJhYmxlLgpTbywgaW5zdGVhZCwgc3RvcmUg dGhlIGluZm9ybWF0aW9uIGluIGEgc2VwYXJhdGUgbGlzdCB0aGF0IHRoZQpleGVjdXRvciBuZWVk IG5ldmVyIGNvbnN1bHQsIGFuZCB1c2UgdGhlIHBsYW5fbm9kZV9pZCB0byBpZGVudGlmeQp0aGUg cGxhbiBub2RlIHdpdGggd2hpY2ggdGhlIHJlbW92ZWQgbm9kZSBpcyBsb2dpY2FsbHkgYXNzb2Np YXRlZC4KCkFsc28sIHVwZGF0ZSBwZ19vdmVyZXhwbGFpbiB0byBkaXNwbGF5IHRoZXNlIGRldGFp bHMuCi0tLQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwg IDQgKy0KIGNvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyAgICAgICB8IDM5 ICsrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAg ICAgfCA1MiArKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCAgICAgICAgICAgICAgICAgfCAgMyArKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgg ICAgICAgICAgICAgICAgIHwgMTcgKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgMSArCiA3IGZpbGVzIGNoYW5nZWQsIDExNCBpbnNlcnRpb25z KCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4v ZXhwZWN0ZWQvcGdfb3ZlcmV4cGxhaW4ub3V0IGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9leHBl Y3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKaW5kZXggNTVkMzQ2NjZkODcuLmNhOWEyM2VhNjFmIDEw MDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dAorKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292ZXJleHBsYWlu Lm91dApAQCAtNDUyLDYgKzQ1Miw4IEBAIFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBn ZW51cyA9ICdkYXVjdXMnOwogIFNlcSBTY2FuIG9uIGRhdWN1cyB2ZWdldGFibGVzCiAgICBGaWx0 ZXI6IChnZW51cyA9ICdkYXVjdXMnOjp0ZXh0KQogICAgU2NhbiBSVEk6IDIKKyAgIEVsaWRlZCBO b2RlIFR5cGU6IEFwcGVuZAorICAgRWxpZGVkIE5vZGUgUlRJczogMQogIFJUSSAxIChyZWxhdGlv biwgaW5oZXJpdGVkLCBpbi1mcm9tLWNsYXVzZSk6CiAgICBFcmVmOiB2ZWdldGFibGVzIChpZCwg bmFtZSwgZ2VudXMpCiAgICBSZWxhdGlvbjogdmVnZXRhYmxlcwpAQCAtNDY1LDcgKzQ2Nyw3IEBA IFNFTEVDVCAqIEZST00gdmVnZXRhYmxlcyBXSEVSRSBnZW51cyA9ICdkYXVjdXMnOwogICAgUmVs YXRpb24gS2luZDogcmVsYXRpb24KICAgIFJlbGF0aW9uIExvY2sgTW9kZTogQWNjZXNzU2hhcmVM b2NrCiAgVW5wcnVuYWJsZSBSVElzOiAxIDIKLSgxNiByb3dzKQorKDE4IHJvd3MpCiAKIC0tIEFs c28gdGVzdCBhIGNhc2UgdGhhdCBpbnZvbHZlcyBhIHdyaXRlLgogRVhQTEFJTiAoUkFOR0VfVEFC TEUsIENPU1RTIE9GRikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3Zl cmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRl eCAxYzRjNzk2YWRiMi4uZTU0ZjhjZmMzMzIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4 cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYworKysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKQEAgLTE5MSw2ICsxOTEsOCBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29r KFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICovCiAJaWYgKG9wdGlv bnMtPnJhbmdlX3RhYmxlKQogCXsKKwkJYm9vbAkJb3BlbmVkX2VsaWRlZF9ub2RlcyA9IGZhbHNl OworCiAJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKIAkJewogCQkJY2FzZSBUX1NlcVNjYW46CkBA IC0yNTEsNiArMjUzLDQzIEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hvb2soUGxhblN0YXRlICpw bGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWRlZmF1bHQ6CiAJCQkJYnJlYWs7CiAJCX0K KworCQlmb3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgbiwgZXMtPnBzdG10LT5lbGlkZWROb2RlcykK KwkJeworCQkJY2hhcgkgICAqZWxpZGVkbm9kZXRhZzsKKworCQkJaWYgKG4tPnBsYW5fbm9kZV9p ZCAhPSBwbGFuLT5wbGFuX25vZGVfaWQpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb3BlbmVk X2VsaWRlZF9ub2RlcykKKwkJCXsKKwkJCQlFeHBsYWluT3Blbkdyb3VwKCJFbGlkZWQgTm9kZXMi LCAiRWxpZGVkIE5vZGVzIiwgZmFsc2UsIGVzKTsKKwkJCQlvcGVuZWRfZWxpZGVkX25vZGVzID0g dHJ1ZTsKKwkJCX0KKworCQkJc3dpdGNoIChuLT5lbGlkZWRfdHlwZSkKKwkJCXsKKwkJCQljYXNl IFRfQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIkFwcGVuZCI7CisJCQkJCWJyZWFrOwor CQkJCWNhc2UgVF9NZXJnZUFwcGVuZDoKKwkJCQkJZWxpZGVkbm9kZXRhZyA9ICJNZXJnZUFwcGVu ZCI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisJCQkJCWVsaWRlZG5v ZGV0YWcgPSAiU3VicXVlcnlTY2FuIjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJ ZWxpZGVkbm9kZXRhZyA9IHBzcHJpbnRmKCIlZCIsIG4tPmVsaWRlZF90eXBlKTsKKwkJCQkJYnJl YWs7CisJCQl9CisKKwkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2RlIiwgTlVMTCwgdHJ1 ZSwgZXMpOworCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiRWxpZGVkIE5vZGUgVHlwZSIsIGVsaWRl ZG5vZGV0YWcsIGVzKTsKKwkJCW92ZXJleHBsYWluX2JpdG1hcHNldCgiRWxpZGVkIE5vZGUgUlRJ cyIsIG4tPnJlbGlkcywgZXMpOworCQkJRXhwbGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlIiwg TlVMTCwgdHJ1ZSwgZXMpOworCQl9CisJCWlmIChvcGVuZWRfZWxpZGVkX25vZGVzKQorCQkJRXhw bGFpbkNsb3NlR3JvdXAoIkVsaWRlZCBOb2RlcyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMp OwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5l ci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDMxZGNiZGYz NDIyLi5kZjlkMDNkNTQ5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm5lci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAt NjE4LDYgKzYxOCw3IEBAIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25zLAogCXJlc3VsdC0+cGFyYW1FeGVjVHlw ZXMgPSBnbG9iLT5wYXJhbUV4ZWNUeXBlczsKIAkvKiB1dGlsaXR5U3RtdCBzaG91bGQgYmUgbnVs bCwgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgY29weSBpdCAqLwogCXJlc3VsdC0+dXRpbGl0eVN0bXQg PSBwYXJzZS0+dXRpbGl0eVN0bXQ7CisJcmVzdWx0LT5lbGlkZWROb2RlcyA9IGdsb2ItPmVsaWRl ZE5vZGVzOwogCXJlc3VsdC0+c3RtdF9sb2NhdGlvbiA9IHBhcnNlLT5zdG10X2xvY2F0aW9uOwog CXJlc3VsdC0+c3RtdF9sZW4gPSBwYXJzZS0+c3RtdF9sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL3NldHJlZnMuYwppbmRleCBlZGNkNGFhYTUzZS4uNDA3ZWMzOWI2M2IgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTIxMSw2ICsyMTEsOSBAQCBzdGF0aWMgTGlzdCAq c2V0X3dpbmRvd2FnZ19ydW5jb25kaXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCSAgIExpc3QgKnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4g KnBsYW4pOwogCitzdGF0aWMgdm9pZCByZWNvcmRfZWxpZGVkX25vZGUoUGxhbm5lckdsb2JhbCAq Z2xvYiwgaW50IHBsYW5fbm9kZV9pZCwKKwkJCQkJCQkgICBOb2RlVGFnIGVsaWRlZF90eXBlLCBC aXRtYXBzZXQgKnJlbGlkcyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTQ2 MCwxMCArMTQ2MywxNyBAQCBzZXRfc3VicXVlcnlzY2FuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8g KnJvb3QsCiAKIAlpZiAodHJpdmlhbF9zdWJxdWVyeXNjYW4ocGxhbikpCiAJeworCQlJbmRleAkJ c2NhbnJlbGlkOworCiAJCS8qCiAJCSAqIFdlIGNhbiBvbWl0IHRoZSBTdWJxdWVyeVNjYW4gbm9k ZSBhbmQganVzdCBwdWxsIHVwIHRoZSBzdWJwbGFuLgogCQkgKi8KIAkJcmVzdWx0ID0gY2xlYW5f dXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIHBsYW4sIHBsYW4tPnN1YnBsYW4pOworCisJ CS8qIFJlbWVtYmVyIHRoYXQgd2UgcmVtb3ZlZCBhIFN1YnF1ZXJ5U2NhbiAqLworCQlzY2FucmVs aWQgPSBwbGFuLT5zY2FuLnNjYW5yZWxpZCArIHJ0b2Zmc2V0OworCQlyZWNvcmRfZWxpZGVkX25v ZGUocm9vdC0+Z2xvYiwgcGxhbi0+c3VicGxhbi0+cGxhbl9ub2RlX2lkLAorCQkJCQkJICAgVF9T dWJxdWVyeVNjYW4sIGJtc19tYWtlX3NpbmdsZXRvbihzY2FucmVsaWQpKTsKIAl9CiAJZWxzZQog CXsKQEAgLTE4OTEsNyArMTkwMSwxNyBAQCBzZXRfYXBwZW5kX3JlZmVyZW5jZXMoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBsaW5pdGlhbChhcGxhbi0+YXBwZW5k cGxhbnMpOwogCiAJCWlmIChwLT5wYXJhbGxlbF9hd2FyZSA9PSBhcGxhbi0+cGxhbi5wYXJhbGxl bF9hd2FyZSkKLQkJCXJldHVybiBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikg YXBsYW4sIHApOworCQl7CisJCQlQbGFuCSAgICpyZXN1bHQ7CisKKwkJCXJlc3VsdCA9IGNsZWFu X3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAqKSBhcGxhbiwgcCk7CisKKwkJCS8qIFJlbWVt YmVyIHRoYXQgd2UgcmVtb3ZlZCBhbiBBcHBlbmQgKi8KKwkJCXJlY29yZF9lbGlkZWRfbm9kZShy b290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfQXBwZW5kLAorCQkJCQkJCSAgIG9mZnNldF9y ZWxpZF9zZXQoYXBsYW4tPmFwcHJlbGlkcywgcnRvZmZzZXQpKTsKKworCQkJcmV0dXJuIHJlc3Vs dDsKKwkJfQogCX0KIAogCS8qCkBAIC0xOTU5LDcgKzE5NzksMTcgQEAgc2V0X21lcmdlYXBwZW5k X3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCVBsYW4JICAgKnAgPSAoUGxhbiAqKSBs aW5pdGlhbChtcGxhbi0+bWVyZ2VwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09 IG1wbGFuLT5wbGFuLnBhcmFsbGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRf cGxhbl9sZXZlbCgoUGxhbiAqKSBtcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsK KworCQkJcmVzdWx0ID0gY2xlYW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFu LCBwKTsKKworCQkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgTWVyZ2VBcHBlbmQgKi8K KwkJCXJlY29yZF9lbGlkZWRfbm9kZShyb290LT5nbG9iLCBwLT5wbGFuX25vZGVfaWQsIFRfTWVy Z2VBcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0X3JlbGlkX3NldChtcGxhbi0+YXBwcmVsaWRzLCBy dG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTM3NzQs MyArMzgwNCwyMSBAQCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIoTm9kZSAqbm9k ZSwgUGxhbm5lckluZm8gKmNvbnRleHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIo bm9kZSwgZXh0cmFjdF9xdWVyeV9kZXBlbmRlbmNpZXNfd2Fsa2VyLAogCQkJCQkJCQkgIGNvbnRl eHQpOwogfQorCisvKgorICogUmVjb3JkIHNvbWUgZGV0YWlscyBhYm91dCBhIG5vZGUgcmVtb3Zl ZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzCisgKiBwcm9jZXNzaW5nLCBmb3IgdGhlIGJl bmVmaXQgb2YgY29kZSB0cnlpbmcgdG8gcmVjb25zdHJ1Y3QgcGxhbm5lciBkZWNpc2lvbnMKKyAq IGZyb20gZXhhbWluYXRpb24gb2YgdGhlIGZpbmFsIHBsYW4gdHJlZS4KKyAqLworc3RhdGljIHZv aWQKK3JlY29yZF9lbGlkZWRfbm9kZShQbGFubmVyR2xvYmFsICpnbG9iLCBpbnQgcGxhbl9ub2Rl X2lkLAorCQkJCSAgIE5vZGVUYWcgZWxpZGVkX3R5cGUsIEJpdG1hcHNldCAqcmVsaWRzKQorewor CUVsaWRlZE5vZGUgKm4gPSBtYWtlTm9kZShFbGlkZWROb2RlKTsKKworCW4tPnBsYW5fbm9kZV9p ZCA9IHBsYW5fbm9kZV9pZDsKKwluLT5lbGlkZWRfdHlwZSA9IGVsaWRlZF90eXBlOworCW4tPnJl bGlkcyA9IHJlbGlkczsKKworCWdsb2ItPmVsaWRlZE5vZGVzID0gbGFwcGVuZChnbG9iLT5lbGlk ZWROb2Rlcywgbik7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMu aCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDRiODkyNDE0ZDU4Li43MTY5 MjA5NzM1NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE1OSw2ICsxNTksOSBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogdHlwZSBPSURzIGZvciBQQVJBTV9FWEVDIFBhcmFt cyAqLwogCUxpc3QJICAgKnBhcmFtRXhlY1R5cGVzOwogCisJLyogaW5mbyBhYm91dCBub2RlcyBl bGlkZWQgZnJvbSB0aGUgcGxhbiBkdXJpbmcgc2V0cmVmcyBwcm9jZXNzaW5nICovCisJTGlzdAkg ICAqZWxpZGVkTm9kZXM7CisKIAkvKiBoaWdoZXN0IFBsYWNlSG9sZGVyVmFyIElEIGFzc2lnbmVk ICovCiAJSW5kZXgJCWxhc3RQSElkOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9w bGFubm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDQ4MzMxODkz YTYzLi5lZGZkMDIyMzBhNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTE1Miw2ICsxNTIsOSBA QCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3RtdAogCS8qIG5vbi1udWxsIGlmIHRoaXMgaXMgdXRp bGl0eSBzdG10ICovCiAJTm9kZQkgICAqdXRpbGl0eVN0bXQ7CiAKKwkvKiBpbmZvIGFib3V0IG5v ZGVzIGVsaWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlM aXN0CSAgICplbGlkZWROb2RlczsKKwogCS8qCiAJICogRGVmRWxlbSBvYmplY3RzIGFkZGVkIGJ5 IGV4dGVuc2lvbnMsIGUuZy4gdXNpbmcgcGxhbm5lcl9zaHV0ZG93bl9ob29rCiAJICoKQEAgLTE4 MzgsNCArMTg0MSwxOCBAQCB0eXBlZGVmIHN0cnVjdCBTdWJQbGFuUlRJbmZvCiAJYm9vbAkJZHVt bXk7CiB9IFN1YlBsYW5SVEluZm87CiAKKy8qCisgKiBFbGlkZWROb2RlCisgKgorICogSW5mb3Jt YXRpb24gYWJvdXQgbm9kZXMgZWxpZGVkIGZyb20gdGhlIGZpbmFsIHBsYW4gdHJlZTogdHJpdmlh bCBzdWJxdWVyeQorICogc2NhbnMsIGFuZCBzaW5nbGUtY2hpbGQgQXBwZW5kIGFuZCBNZXJnZUFw cGVuZCBub2Rlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgRWxpZGVkTm9kZQoreworCU5vZGVUYWcJ CXR5cGU7CisJaW50CQkJcGxhbl9ub2RlX2lkOworCU5vZGVUYWcJCWVsaWRlZF90eXBlOworCUJp dG1hcHNldCAgKnJlbGlkczsKK30gRWxpZGVkTm9kZTsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5O T0RFU19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDE0YzAxZjgwYjIyLi41OGM5 YTNmMWUwMSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysr IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTcwNyw2ICs3MDcsNyBAQCBF YWNoU3RhdGUKIEVkZ2UKIEVkaXRhYmxlT2JqZWN0VHlwZQogRWxlbWVudHNTdGF0ZQorRWxpZGVk Tm9kZQogRW5hYmxlVGltZW91dFBhcmFtcwogRW5kRGF0YVB0clR5cGUKIEVuZERpcmVjdE1vZGlm eV9mdW5jdGlvbgotLSAKMi41MS4wCgo= --0000000000001b5bb506460325ec Content-Type: application/octet-stream; name="v7-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Disposition: attachment; filename="v7-0004-Allow-for-plugin-control-over-path-generation-str.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj7kxtnt3 RnJvbSAyY2QzZWRjMGU1MzM5NDM0NjAxZTRjNzY4ZGM4NTM3OTBkMzQ0YjBmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjQgT2N0IDIwMjUgMTU6MTE6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHY3IDQv NV0gQWxsb3cgZm9yIHBsdWdpbiBjb250cm9sIG92ZXIgcGF0aCBnZW5lcmF0aW9uCiBzdHJhdGVn aWVzLgoKRWFjaCBSZWxPcHRJbmZvIG5vdyBoYXMgYSBwZ3NfbWFzayBtZW1iZXIgd2hpY2ggaXMg YSBtYXNrIG9mIGFjY2VwdGFibGUKc3RyYXRlZ2llcy4gRm9yIG1vc3QgcmVscywgdGhpcyBpcyBw b3B1bGF0ZWQgZnJvbSBQbGFubmVyR2xvYmFsJ3MKZGVmYXVsdF9wZ3NfbWFzaywgd2hpY2ggaXMg Y29tcHV0ZWQgZnJvbSB0aGUgdmFsdWVzIG9mIHRoZSBlbmFibGVfKgpHVUNzIGF0IHRoZSBzdGFy dCBvZiBwbGFubmluZy4KCkZvciBiYXNlcmVscywgZ2V0X3JlbGF0aW9uX2luZm9faG9vayBjYW4g YmUgdXNlZCB0byBhZGp1c3QgcGdzX21hc2sgZm9yCmVhY2ggbmV3IFJlbE9wdEluZm8sIGF0IGxl YXN0IGZvciByZWxzIG9mIHR5cGUgUlRFX1JFTEFUSU9OLiBBZGp1c3RpbmcKcGdzX21hc2sgaXMg bGVzcyB1c2VmdWwgZm9yIG90aGVyIHR5cGVzIG9mIHJlbHMsIGJ1dCBpZiBpdCBwcm92ZXMgdG8K YmUgbmVjZXNzYXJ5LCB3ZSBjYW4gcmV2aXNpdCB0aGUgd2F5IHRoaXMgaG9vayB3b3JrcyBvciBh ZGQgYSBuZXcgb25lLgoKRm9yIGpvaW5yZWxzLCB0d28gbmV3IGhvb2tzIGFyZSBhZGRlZC4gam9p bnJlbF9zZXR1cF9ob29rIGlzIGNhbGxlZCBlYWNoCnRpbWUgYSBqb2lucmVsIGlzIGNyZWF0ZWQs IGFuZCBvbmUgdGhpbmcgdGhhdCBjYW4gYmUgZG9uZSBmcm9tIHRoYXQgaG9vawppcyB0byBtYW5p cHVsYXRlIHBnc19tYXNrIGZvciB0aGUgbmV3IGpvaW5yZWwuIGpvaW5fcGF0aF9zZXR1cF9ob29r IGlzCmNhbGxlZCBlYWNoIHRpbWUgd2UncmUgYWJvdXQgdG8gYWRkIHBhdGhzIHRvIGEgam9pbnJl bCBieSBjb25zaWRlcmluZwpzb21lIHBhcnRpY3VsYXIgY29tYmluYXRpb24gb2YgYW4gb3V0ZXIg cmVsLCBhbiBpbm5lciByZWwsIGFuZCBhIGpvaW4KdHlwZS4gSXQgY2FuIG1vZGlmeSB0aGUgcGdz X21hc2sgcHJvcGFnYXRlZCBpbnRvIEpvaW5QYXRoRXh0cmFEYXRhIHRvCnJlc3RyaWN0IHN0cmF0 ZWd5IGNob2ljZSBmb3IgdGhhdCBwYXJpY3VsYXIgY29tYmluYXRpb24gb2YgcmVscy4KClRvIG1h a2Ugam9pbnJlbF9zZXR1cF9ob29rIHdvcmsgYXMgaW50ZW5kZWQsIHRoZSBleGlzdGluZyBjYWxs cyB0bwpidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvIGFyZSBtb3ZlZCBsYXRlciBpbiB0aGUg Y2FsbGluZyBmdW5jdGlvbnM7CnRoaXMgaXMgYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGNoZWNrcyB3 aGV0aGVyIHRoZSByZWwncyBwZ3NfbWFzayBpbmNsdWRlcwpQR1NfQ09OU0lERVJfUEFSVElUSU9O V0lTRSwgc28gd2Ugd2FudCBpdCB0byBvbmx5IGJlIGNhbGxlZCBhZnRlcgpwbHVnaW5zIGhhdmUg aGFkIGEgY2hhbmNlIHRvIGFsdGVyIHBnc19tYXNrLgoKVXBwZXIgcmVscyBjdXJyZW50bHkgaW5o ZXJpdCBwZ3NfbWFzayBmcm9tIHRoZSBpbnB1dCByZWxhdGlvbi4gSXQncwp1bmNsZWFyIHRoYXQg dGhpcyBpcyB0aGUgbW9zdCB1c2VmdWwgYmVoYXZpb3IsIGJ1dCBhdCB0aGUgbW9tZW50IHRoZXJl CmFyZSBubyBob29rcyB0byBhbGxvdyB0aGUgbWFzayB0byBiZSBzZXQgaW4gYW55IG90aGVyIHdh eS4KLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICB8IDIyMiArKysrKysrKysr KysrKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICB8 ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyAgIHwgIDg5ICsr KysrKystLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBhdGguYyAgICB8ICAgNyAr LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIHwgICA0ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgfCAgNTQgKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgfCAgMTkgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYyAgICB8ICAgMyArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9yZWxub2RlLmMgICAgfCAgNDMgKysrKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oICAgICAgICAgICB8ICA4MiArKysrKysrKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0 LmggICAgICAgICAgICB8ICAgNCArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgg ICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCAgICAgICAgICAg fCAgIDkgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDQ1NSBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCA5MjhiOGQ4NGFk OC4uOGU5ZGRlM2QxOTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Fs bHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAt OTU0LDcgKzk1NCw3IEBAIHNldF90YWJsZXNhbXBsZV9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgUmFuZ2VUYmxFbnRyeSAqCiAJCSBibXNfbWVtYmVyc2hp cChyb290LT5hbGxfcXVlcnlfcmVscykgIT0gQk1TX1NJTkdMRVRPTikgJiYKIAkJIShHZXRUc21S b3V0aW5lKHJ0ZS0+dGFibGVzYW1wbGUtPnRzbWhhbmRsZXIpLT5yZXBlYXRhYmxlX2Fjcm9zc19z Y2FucykpCiAJewotCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBw YXRoKTsKKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgcGF0aCwg dHJ1ZSk7CiAJfQogCiAJYWRkX3BhdGgocmVsLCBwYXRoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9jb3N0c2l6ZS5jCmluZGV4IGEzOWNjNzkzYjRkLi41MTk0MGFlYzgyMCAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0yNzUsNiArMjc1LDcgQEAgY29zdF9zZXFzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gUEdTX1NFUVNDQU47CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBs aWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBA IC0zMjcsOCArMzI4LDExIEBAIGNvc3Rfc2Vxc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJICovCiAJCXBhdGgtPnJvd3MgPSBjbGFtcF9yb3dfZXN0KHBhdGgtPnJvd3MgLyBw YXJhbGxlbF9kaXZpc29yKTsKIAl9CisJZWxzZQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX3NlcXNjYW4g PyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29z dCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgY3B1 X3J1bl9jb3N0ICsgZGlza19ydW5fY29zdDsKIH0KQEAgLTM1NCw2ICszNTgsNyBAQCBjb3N0X3Nh bXBsZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJc3BjX3BhZ2VfY29z dDsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2 NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNl IHJlbGF0aW9ucyB3aXRoIHRhYmxlc2FtcGxlIGNsYXVzZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+ cmVsaWQgPiAwKTsKQEAgLTQwMSw3ICs0MDYsMTEgQEAgY29zdF9zYW1wbGVzY2FuKFBhdGggKnBh dGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0 LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJf dHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChw YXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOworCisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdz X21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFy dHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29z dCArIHJ1bl9jb3N0OwogfQpAQCAtNDQwLDcgKzQ0OSw4IEBAIGNvc3RfZ2F0aGVyKEdhdGhlclBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9z ZXR1cF9jb3N0OwogCXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRo LnJvd3M7CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgt PmRpc2FibGVkX25vZGVzCisJCSsgKChyZWwtPnBnc19tYXNrICYgUEdTX0dBVEhFUikgIT0gMCA/ IDAgOiAxKTsKIAlwYXRoLT5wYXRoLnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT5wYXRoLnRvdGFsX2Nvc3QgPSAoc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3QpOwogfQpAQCAtNTA2 LDggKzUxNiw4IEBAIGNvc3RfZ2F0aGVyX21lcmdlKEdhdGhlck1lcmdlUGF0aCAqcGF0aCwgUGxh bm5lckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhcmFsbGVsX3NldHVwX2Nvc3Q7CiAJ cnVuX2Nvc3QgKz0gcGFyYWxsZWxfdHVwbGVfY29zdCAqIHBhdGgtPnBhdGgucm93cyAqIDEuMDU7 CiAKLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMKLQkJ KyAoZW5hYmxlX2dhdGhlcm1lcmdlID8gMCA6IDEpOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9k ZXMgPSBwYXRoLT5zdWJwYXRoLT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAm IFBHU19HQVRIRVJfTUVSR0UpICE9IDAgPyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+cGF0aC50b3Rh bF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdCk7CiB9 CkBAIC01NTcsNiArNTY3LDcgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LCBkb3VibGUgbG9vcF9jb3VudCwKIAlkb3VibGUJCXBhZ2VzX2ZldGNoZWQ7CiAJ ZG91YmxlCQlyYW5kX2hlYXBfcGFnZXM7CiAJZG91YmxlCQlpbmRleF9wYWdlczsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0 aW9ucyAqLwogCUFzc2VydChJc0EoYmFzZXJlbCwgUmVsT3B0SW5mbykgJiYKQEAgLTU4OCw4ICs1 OTksMTEgQEAgY29zdF9pbmRleChJbmRleFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LCBk b3VibGUgbG9vcF9jb3VudCwKIAkJCQkJCQkJCQkJICBwYXRoLT5pbmRleGNsYXVzZXMpOwogCX0K IAotCS8qIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZW5hYmxlX2luZGV4b25seXNjYW47IGluZHhw YXRoLmMgZG9lcyB0aGF0ICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9p bmRleHNjYW4gPyAwIDogMTsKKwkvKiBpcyB0aGlzIHNjYW4gdHlwZSBkaXNhYmxlZD8gKi8KKwll bmFibGVfbWFzayA9IChpbmRleG9ubHkgPyBQR1NfSU5ERVhPTkxZU0NBTiA6IFBHU19JTkRFWFND QU4pCisJCXwgKHBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwID8gUEdTX0NPTlNJREVS X05PTlBBUlRJQUwgOiAwKTsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2Vy ZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAKIAkv KgogCSAqIENhbGwgaW5kZXgtYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBjb2RlIHRvIGVzdGltYXRl IHRoZSBwcm9jZXNzaW5nIGNvc3QKQEAgLTEwMTAsNiArMTAyNCw3IEBAIGNvc3RfYml0bWFwX2hl YXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJl bCwKIAlkb3VibGUJCXNwY19zZXFfcGFnZV9jb3N0LAogCQkJCXNwY19yYW5kb21fcGFnZV9jb3N0 OwogCWRvdWJsZQkJVDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0JJVE1BUFNDQU47CiAK IAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zICovCiAJQXNzZXJ0 KElzQShiYXNlcmVsLCBSZWxPcHRJbmZvKSk7CkBAIC0xMDc1LDYgKzEwOTAsOCBAQCBjb3N0X2Jp dG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KmJhc2VyZWwsCiAKIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jvd19lc3QocGF0aC0+cm93cyAvIHBh cmFsbGVsX2Rpdmlzb3IpOwogCX0KKwllbHNlCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURF Ul9OT05QQVJUSUFMOwogCiAKIAlydW5fY29zdCArPSBjcHVfcnVuX2Nvc3Q7CkBAIC0xMDgzLDcg KzExMDAsOCBAQCBjb3N0X2JpdG1hcF9oZWFwX3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0 YXJnZXQtPmNvc3Quc3RhcnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0 LnBlcl90dXBsZSAqIHBhdGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGVuYWJs ZV9iaXRtYXBzY2FuID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJl bC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRo LT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0 dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTI0MCw2ICsxMjU4LDcgQEAgY29zdF90aWRzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWRvdWJsZQkJbnR1cGxlczsKIAlMaXN0 Q2VsbCAgICpsOwogCWRvdWJsZQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CisJdWludDY0CQllbmFi bGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRp b25zICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xMjYxLDEwICsxMjgwLDEw IEBAIGNvc3RfdGlkc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkvKgog CQkgKiBXZSBtdXN0IHVzZSBhIFRJRCBzY2FuIGZvciBDdXJyZW50T2ZFeHByOyBpbiBhbnkgb3Ro ZXIgY2FzZSwgd2UKLQkJICogc2hvdWxkIGJlIGdlbmVyYXRpbmcgYSBUSUQgc2NhbiBvbmx5IGlm IGVuYWJsZV90aWRzY2FuPXRydWUuIEFsc28sCi0JCSAqIGlmIEN1cnJlbnRPZkV4cHIgaXMgdGhl IHF1YWwsIHRoZXJlIHNob3VsZCBiZSBvbmx5IG9uZS4KKwkJICogc2hvdWxkIGJlIGdlbmVyYXRp bmcgYSBUSUQgc2NhbiBvbmx5IGlmIFRJRCBzY2FucyBhcmUgYWxsb3dlZC4KKwkJICogQWxzbywg aWYgQ3VycmVudE9mRXhwciBpcyB0aGUgcXVhbCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLgog CQkgKi8KLQkJQXNzZXJ0KGVuYWJsZV90aWRzY2FuIHx8IElzQShxdWFsLCBDdXJyZW50T2ZFeHBy KSk7CisJCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikgIT0gMCB8fCBJ c0EocXVhbCwgQ3VycmVudE9mRXhwcikpOwogCQlBc3NlcnQobGlzdF9sZW5ndGgodGlkcXVhbHMp ID09IDEgfHwgIUlzQShxdWFsLCBDdXJyZW50T2ZFeHByKSk7CiAKIAkJaWYgKElzQShxdWFsLCBT Y2FsYXJBcnJheU9wRXhwcikpCkBAIC0xMzE2LDEwICsxMzM1LDE0IEBAIGNvc3RfdGlkc2NhbihQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogVGhlcmUgYXJlIGFzc2Vy dGlvbnMgYWJvdmUgdmVyaWZ5aW5nIHRoYXQgd2Ugb25seSByZWFjaCB0aGlzIGZ1bmN0aW9uCi0J ICogZWl0aGVyIHdoZW4gZW5hYmxlX3RpZHNjYW49dHJ1ZSBvciB3aGVuIHRoZSBUSUQgc2NhbiBp cyB0aGUgb25seSBsZWdhbAotCSAqIHBhdGgsIHNvIGl0J3Mgc2FmZSB0byBzZXQgZGlzYWJsZWRf bm9kZXMgdG8gemVybyBoZXJlLgorCSAqIGVpdGhlciB3aGVuIGJhc2VyZWwtPnBnc19tYXNrIGlu Y2x1ZGVzIFBHU19USURTQ0FOIG9yIHdoZW4gdGhlIFRJRCBzY2FuCisJICogaXMgdGhlIG9ubHkg bGVnYWwgcGF0aCwgc28gd2Ugb25seSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBlZmZlY3RzIG9mCisJ ICogUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZS4KIAkgKi8KLQlwYXRoLT5kaXNhYmxlZF9u b2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21h c2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQor CQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDog MDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29z dCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMTM1MCw2ICsxMzczLDcgQEAgY29z dF90aWRyYW5nZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJZG91YmxlCQlu c2VxcGFnZXM7CiAJZG91YmxlCQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKIAlkb3VibGUJCXNwY19z ZXFfcGFnZV9jb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfVElEU0NBTjsKIAogCS8q IFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFz ZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE0MjgsOCArMTQ1MiwxNSBAQCBjb3N0X3RpZHJhbmdlc2Nh bihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJcGF0aC0+cm93cyA9IGNsYW1wX3Jv d19lc3QocGF0aC0+cm93cyAvIHBhcmFsbGVsX2Rpdmlzb3IpOwogCX0KIAotCS8qIHdlIHNob3Vs ZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfdGlkc2Nhbj1mYWxzZSAq LwotCUFzc2VydChlbmFibGVfdGlkc2Nhbik7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGdlbmVy YXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gUEdTX1RJRFNDQU4gaXMgdW5zZXQsIGJ1dCB3ZQorCSAq IG1pZ2h0IG5lZWQgdG8gZGlzYWJsZSB0aGlzIHBhdGggZHVlIHRvIFBHU19DT05TSURFUl9OT05Q QVJUSUFMLgorCSAqLworCUFzc2VydCgoYmFzZXJlbC0+cGdzX21hc2sgJiBQR1NfVElEU0NBTikg IT0gMCk7CisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sg fD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQko YmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsK IAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1 cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBjcHVfcnVuX2Nvc3Qg KyBkaXNrX3J1bl9jb3N0OwpAQCAtMTQ1Myw2ICsxNDg0LDcgQEAgY29zdF9zdWJxdWVyeXNjYW4o U3VicXVlcnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdAkgICAqcXBx dWFsczsKIAlRdWFsQ29zdAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBi YXNlIHJlbGF0aW9ucyB0aGF0IGFyZSBzdWJxdWVyaWVzICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJl bGlkID4gMCk7CkBAIC0xNDgzLDcgKzE1MTUsMTAgQEAgY29zdF9zdWJxdWVyeXNjYW4oU3VicXVl cnlTY2FuUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJICogU3VicXVlcnlTY2FuIG5v ZGUsIHBsdXMgY3B1X3R1cGxlX2Nvc3QgdG8gYWNjb3VudCBmb3Igc2VsZWN0aW9uIGFuZAogCSAq IHByb2plY3Rpb24gb3ZlcmhlYWQuCiAJICovCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9 IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25vZGVzOworCWlmIChwYXRoLT5wYXRoLnBhcmFsbGVs X3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7 CisJcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRpc2FibGVkX25v ZGVzCisJCSsgKCgoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21h c2spID8gMSA6IDApOwogCXBhdGgtPnBhdGguc3RhcnR1cF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+ c3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90YWxfY29zdCA9IHBhdGgtPnN1YnBhdGgtPnRv dGFsX2Nvc3Q7CiAKQEAgLTE1MzQsNiArMTU2OSw3IEBAIGNvc3RfZnVuY3Rpb25zY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CiAJUmFuZ2VU YmxFbnRyeSAqcnRlOwogCVF1YWxDb3N0CWV4cHJjb3N0OworCXVpbnQ2NAkJZW5hYmxlX21hc2sg PSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0aGF0 IGFyZSBmdW5jdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE1NzQs NyArMTYxMCwxMCBAQCBjb3N0X2Z1bmN0aW9uc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAq cm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwog CXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93 czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29y a2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlw YXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNr KSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBf Y29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBA IC0xNTk2LDYgKzE2MzUsNyBAQCBjb3N0X3RhYmxlZnVuY3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7 CiAJUXVhbENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBT aG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9u cyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTYzMSw3ICsxNjcxLDEwIEBA IGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFy dHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9 IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNjUxLDYgKzE2 OTQsNyBAQCBjb3N0X3ZhbHVlc3NjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ Q29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9w ZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBi ZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIHZhbHVlcyBsaXN0cyAqLwogCUFz c2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTY3OSw3ICsxNzIzLDEwIEBAIGNvc3RfdmFs dWVzc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0g cGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0 YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJ CShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAw OwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0 ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzAyLDYgKzE3NDksNyBAQCBjb3N0 X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3Qg PSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJh c2UgcmVsYXRpb25zIHRoYXQgYXJlIENURXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAw KTsKQEAgLTE3MjcsNyArMTc3NSwxMCBAQCBjb3N0X2N0ZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJc3RhcnR1cF9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3Quc3Rh cnR1cDsKIAlydW5fY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnBlcl90dXBsZSAqIHBh dGgtPnJvd3M7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFs bGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBz dGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0 OwogfQpAQCAtMTc0NCw2ICsxNzk1LDcgQEAgY29zdF9uYW1lZHR1cGxlc3RvcmVzY2FuKFBhdGgg KnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29z dAlxcHF1YWxfY29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21h c2sgPSAwOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBiYXNlIHJlbGF0aW9ucyB0 aGF0IGFyZSBUdXBsZXN0b3JlcyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAt MTc2NSw3ICsxODE3LDEwIEBAIGNvc3RfbmFtZWR0dXBsZXN0b3Jlc2NhbihQYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAljcHVfcGVyX3R1cGxlICs9IGNwdV90dXBsZV9jb3N0ICsgcXBx dWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVs LT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBhdGgtPnBhcmFs bGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJ QUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBz dGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0 OwogfQpAQCAtMTc4Miw2ICsxODM3LDcgQEAgY29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBs YW5uZXJJbmZvICpyb290LAogCUNvc3QJCXJ1bl9jb3N0ID0gMDsKIAlRdWFsQ29zdAlxcHF1YWxf Y29zdDsKIAlDb3N0CQljcHVfcGVyX3R1cGxlOworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSAwOwog CiAJLyogU2hvdWxkIG9ubHkgYmUgYXBwbGllZCB0byBSVEVfUkVTVUxUIGJhc2UgcmVsYXRpb25z ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xODAwLDcgKzE4NTYsMTAgQEAg Y29zdF9yZXN1bHRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCWNwdV9wZXJf dHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIHFwcXVhbF9jb3N0LnBlcl90dXBsZTsKIAlydW5fY29z dCArPSBjcHVfcGVyX3R1cGxlICogYmFzZXJlbC0+dHVwbGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRf bm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9t YXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0K KwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6 IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE4MTgsNiArMTg3Nyw3IEBAIGNv c3RfcmVjdXJzaXZlX3VuaW9uKFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVy bSkKIAlDb3N0CQlzdGFydHVwX2Nvc3Q7CiAJQ29zdAkJdG90YWxfY29zdDsKIAlkb3VibGUJCXRv dGFsX3Jvd3M7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBXZSBwcm9iYWJseSBo YXZlIGRlY2VudCBlc3RpbWF0ZXMgZm9yIHRoZSBub24tcmVjdXJzaXZlIHRlcm0gKi8KIAlzdGFy dHVwX2Nvc3QgPSBucnRlcm0tPnN0YXJ0dXBfY29zdDsKQEAgLTE4NDAsNyArMTkwMCwxMCBAQCBj b3N0X3JlY3Vyc2l2ZV91bmlvbihQYXRoICpydW5pb24sIFBhdGggKm5ydGVybSwgUGF0aCAqcnRl cm0pCiAJICovCiAJdG90YWxfY29zdCArPSBjcHVfdHVwbGVfY29zdCAqIHRvdGFsX3Jvd3M7CiAK LQlydW5pb24tPmRpc2FibGVkX25vZGVzID0gbnJ0ZXJtLT5kaXNhYmxlZF9ub2RlcyArIHJ0ZXJt LT5kaXNhYmxlZF9ub2RlczsKKwlpZiAocnVuaW9uLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJ CWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXJ1bmlvbi0+ZGlzYWJs ZWRfbm9kZXMgPQorCQkocnVuaW9uLT5wYXJlbnQtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9 IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcnVuaW9uLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nv c3Q7CiAJcnVuaW9uLT50b3RhbF9jb3N0ID0gdG90YWxfY29zdDsKIAlydW5pb24tPnJvd3MgPSB0 b3RhbF9yb3dzOwpAQCAtMjExMCw3ICsyMTczLDExIEBAIGNvc3RfaW5jcmVtZW50YWxfc29ydChQ YXRoICpwYXRoLAogCiAJcGF0aC0+cm93cyA9IGlucHV0X3R1cGxlczsKIAotCS8qIHNob3VsZCBu b3QgZ2VuZXJhdGUgdGhlc2UgcGF0aHMgd2hlbiBlbmFibGVfaW5jcmVtZW50YWxfc29ydD1mYWxz ZSAqLworCS8qCisJICogV2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGVzZSBwYXRocyB3aGVuIGVu YWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlLgorCSAqIFdlIGNhbiBpZ25vcmUgUEdTX0NPTlNJ REVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBpdCdzIHJlbGV2YW50LAorCSAqIGl0IHdp bGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1dCBwYXRoLgorCSAqLwogCUFzc2VydChl bmFibGVfaW5jcmVtZW50YWxfc29ydCk7CiAJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1dF9k aXNhYmxlZF9ub2RlczsKIApAQCAtMjE0OCw2ICsyMjE1LDEwIEBAIGNvc3Rfc29ydChQYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCXN0YXJ0dXBfY29zdCArPSBpbnB1dF9jb3N0Owog CisJLyoKKwkgKiBXZSBjYW4gaWdub3JlIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGhlcmUsIGJl Y2F1c2UgaWYgaXQncyByZWxldmFudCwKKwkgKiBpdCB3aWxsIGhhdmUgYWxyZWFkeSBhZmZlY3Rl ZCB0aGUgaW5wdXQgcGF0aC4KKwkgKi8KIAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCXBhdGgtPmRp c2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMgKyAoZW5hYmxlX3NvcnQgPyAwIDog MSk7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwpAQCAtMjIzOSw5ICsyMzEw LDE1IEBAIGFwcGVuZF9ub25wYXJ0aWFsX2Nvc3QoTGlzdCAqc3VicGF0aHMsIGludCBudW1wYXRo cywgaW50IHBhcmFsbGVsX3dvcmtlcnMpCiB2b2lkCiBjb3N0X2FwcGVuZChBcHBlbmRQYXRoICph cGF0aCwgUGxhbm5lckluZm8gKnJvb3QpCiB7CisJUmVsT3B0SW5mbyAqcmVsID0gYXBhdGgtPnBh dGgucGFyZW50OwogCUxpc3RDZWxsICAgKmw7CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19B UFBFTkQ7CisKKwlpZiAoYXBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFi bGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAotCWFwYXRoLT5wYXRoLmRpc2Fi bGVkX25vZGVzID0gMDsKKwlhcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9CisJCShyZWwtPnBn c19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJYXBhdGgtPnBh dGguc3RhcnR1cF9jb3N0ID0gMDsKIAlhcGF0aC0+cGF0aC50b3RhbF9jb3N0ID0gMDsKIAlhcGF0 aC0+cGF0aC5yb3dzID0gMDsKQEAgLTI0NTEsMTEgKzI1MjgsMTYgQEAgY29zdF9tZXJnZV9hcHBl bmQoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICBDb3N0IGlucHV0X3N0YXJ0 dXBfY29zdCwgQ29zdCBpbnB1dF90b3RhbF9jb3N0LAogCQkJCSAgZG91YmxlIHR1cGxlcykKIHsK KwlSZWxPcHRJbmZvICpyZWwgPSBwYXRoLT5wYXJlbnQ7CiAJQ29zdAkJc3RhcnR1cF9jb3N0ID0g MDsKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJQ29zdAkJY29tcGFyaXNvbl9jb3N0OwogCWRvdWJs ZQkJTjsKIAlkb3VibGUJCWxvZ047CisJdWludDY0CQllbmFibGVfbWFzayA9IFBHU19NRVJHRV9B UFBFTkQ7CisKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFz ayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKIAogCS8qCiAJICogQXZvaWQgbG9nKDApLi4u CkBAIC0yNDc4LDcgKzI1NjAsOSBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAkgKi8KIAlydW5fY29zdCArPSBjcHVfdHVwbGVfY29zdCAqIEFQUEVO RF9DUFVfQ09TVF9NVUxUSVBMSUVSICogdHVwbGVzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMg PSBpbnB1dF9kaXNhYmxlZF9ub2RlczsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShyZWwt PnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CisJcGF0aC0+ ZGlzYWJsZWRfbm9kZXMgKz0gaW5wdXRfZGlzYWJsZWRfbm9kZXM7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nv c3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlucHV0X3RvdGFsX2Nvc3Q7CiB9CkBAIC0y NDk3LDcgKzI1ODEsNyBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFubmVySW5m byAqcm9vdCwKICAqLwogdm9pZAogY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAotCQkJICBpbnQg aW5wdXRfZGlzYWJsZWRfbm9kZXMsCisJCQkgIGJvb2wgZW5hYmxlZCwgaW50IGlucHV0X2Rpc2Fi bGVkX25vZGVzLAogCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3Rh bF9jb3N0LAogCQkJICBkb3VibGUgdHVwbGVzLCBpbnQgd2lkdGgpCiB7CkBAIC0yNTA2LDYgKzI1 OTAsMTEgQEAgY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAogCWRvdWJsZQkJbmJ5dGVzID0gcmVs YXRpb25fYnl0ZV9zaXplKHR1cGxlcywgd2lkdGgpOwogCWRvdWJsZQkJd29ya19tZW1fYnl0ZXMg PSB3b3JrX21lbSAqIChTaXplKSAxMDI0OwogCisJaWYgKHBhdGgtPnBhcmFsbGVsX3dvcmtlcnMg PT0gMCAmJgorCQlwYXRoLT5wYXJlbnQgIT0gTlVMTCAmJgorCQkocGF0aC0+cGFyZW50LT5wZ3Nf bWFzayAmIFBHU19DT05TSURFUl9OT05QQVJUSUFMKSA9PSAwKQorCQllbmFibGVkID0gZmFsc2U7 CisKIAlwYXRoLT5yb3dzID0gdHVwbGVzOwogCiAJLyoKQEAgLTI1MzUsNyArMjYyNCw3IEBAIGNv c3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKIAkJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29zdCAqIG5w YWdlczsKIAl9CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVz ICsgKGVuYWJsZV9tYXRlcmlhbCA/IDAgOiAxKTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlu cHV0X2Rpc2FibGVkX25vZGVzICsgKGVuYWJsZWQgPyAwIDogMSk7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBy dW5fY29zdDsKIH0KQEAgLTMyODcsNyArMzM3Niw3IEBAIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwg UGxhbm5lckluZm8gKnJvb3QsCiAgKi8KIHZvaWQKIGluaXRpYWxfY29zdF9uZXN0bG9vcChQbGFu bmVySW5mbyAqcm9vdCwgSm9pbkNvc3RXb3Jrc3BhY2UgKndvcmtzcGFjZSwKLQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwKKwkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9t YXNrLAogCQkJCQkgIFBhdGggKm91dGVyX3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCSAg Sm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewpAQCAtMzMwMSw3ICszMzkwLDcgQEAgaW5pdGlh bF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29y a3NwYWNlLAogCUNvc3QJCWlubmVyX3Jlc2Nhbl9ydW5fY29zdDsKIAogCS8qIENvdW50IHVwIGRp c2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVkX25vZGVzID0gZW5hYmxlX25lc3Rsb29wID8gMCA6 IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09 IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlzYWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlz YWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9kZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9k ZXM7CiAKQEAgLTM3MDEsNyArMzc5MCwxOSBAQCBpbml0aWFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5u ZXJJbmZvICpyb290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCUFzc2VydChvdXRl cnN0YXJ0c2VsIDw9IG91dGVyZW5kc2VsKTsKIAlBc3NlcnQoaW5uZXJzdGFydHNlbCA8PSBpbm5l cmVuZHNlbCk7CiAKLQlkaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9tZXJnZWpvaW4gPyAwIDogMTsK KwkvKgorCSAqIFdlIGRvbid0IGRlY2lkZSB3aGV0aGVyIHRvIG1hdGVyaWFsaXplIHRoZSBpbm5l ciBwYXRoIHVudGlsIHdlIGdldCB0bworCSAqIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCksIHNvIHdl IGRvbid0IGtub3cgd2hldGhlciB0byBjaGVjayB0aGUgcGdzX21hc2sKKwkgKiBhZ2FpbiBQR1Nf TUVSR0VKT0lOX1BMQUlOIG9yIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUuIEluc3RlYWQsIHdl CisJICoganVzdCBhY2NvdW50IGZvciBhbnkgY2hpbGQgbm9kZXMgaGVyZSBhbmQgYXNzdW1lIHRo YXQgdGhpcyBub2RlIGlzIG5vdAorCSAqIGl0c2xlZiBkaXNhYmxlZDsgd2UgY2FuIHNvcnQgb3V0 IHRoZSBkZXRhaWxzIGluIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKCkuCisJICoKKwkgKiAoV2UgY291 bGQgYmUgbW9yZSBwcmVjaXNlIGhlcmUgYnkgc2V0dGluZyBkaXNhYmxlZF9ub2RlcyB0byAxIGF0 IHRoaXMKKwkgKiBzdGFnZSBpZiBib3RoIFBHU19NRVJHRUpPSU5fUExBSU4gYW5kIFBHU19NRVJH RUpPSU5fTUFURVJJQUxJWkUgYXJlCisJICogZGlzYWJsZWQsIGJ1dCB0aGF0IHNlZW1zIHRvIGFn YWluc3QgdGhlIGlkZWEgb2YgbWFraW5nIHRoaXMgZnVuY3Rpb24KKwkgKiBwcm9kdWNlIGEgcXVp Y2ssIG9wdGltaXN0aWMgYXBwcm94aW1hdGlvbiBvZiB0aGUgZmluYWwgY29zdC4pCisJICovCisJ ZGlzYWJsZWRfbm9kZXMgPSAwOwogCiAJLyogY29zdCBvZiBzb3VyY2UgZGF0YSAqLwogCkBAIC0z ODgwLDkgKzM5ODEsNyBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9vdCwg TWVyZ2VQYXRoICpwYXRoLAogCWRvdWJsZQkJbWVyZ2Vqb2ludHVwbGVzLAogCQkJCXJlc2Nhbm5l ZHR1cGxlczsKIAlkb3VibGUJCXJlc2NhbnJhdGlvOwotCi0JLyogU2V0IHRoZSBudW1iZXIgb2Yg ZGlzYWJsZWQgbm9kZXMuICovCi0JcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdv cmtzcGFjZS0+ZGlzYWJsZWRfbm9kZXM7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkv KiBQcm90ZWN0IHNvbWUgYXNzdW1wdGlvbnMgYmVsb3cgdGhhdCByb3djb3VudHMgYXJlbid0IHpl cm8gKi8KIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDApCkBAIC00MDEyLDE2ICs0MTExLDIwIEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJCXBhdGgtPm1hdGVyaWFsaXplX2lubmVyID0gZmFsc2U7CiAKIAkvKgotCSAqIFByZWZlciBt YXRlcmlhbGl6aW5nIGlmIGl0IGxvb2tzIGNoZWFwZXIsIHVubGVzcyB0aGUgdXNlciBoYXMgYXNr ZWQgdG8KLQkgKiBzdXBwcmVzcyBtYXRlcmlhbGl6YXRpb24uCisJICogSWYgbWVyZ2Ugam9pbnMg d2l0aCBtYXRlcmlhbGl6YXRpb24gYXJlIGVuYWJsZWQsIHRoZW4gY2hvb3NlCisJICogbWF0ZXJp YWxpemF0aW9uIGlmIGVpdGhlciAoYSkgaXQgbG9va3MgY2hlYXBlciBvciAoYikgbWVyZ2Ugam9p bnMKKwkgKiB3aXRob3V0IG1hdGVyaWFsaXphdGlvbiBhcmUgZGlzYWJsZWQuCiAJICovCi0JZWxz ZSBpZiAoZW5hYmxlX21hdGVyaWFsICYmIG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0 KQorCWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpF KSAhPSAwICYmCisJCQkgKG1hdF9pbm5lcl9jb3N0IDwgYmFyZV9pbm5lcl9jb3N0IHx8CisJCQkg IChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX1BMQUlOKSA9PSAwKSkKIAkJcGF0aC0+ bWF0ZXJpYWxpemVfaW5uZXIgPSB0cnVlOwogCiAJLyoKLQkgKiBFdmVuIGlmIG1hdGVyaWFsaXpp bmcgZG9lc24ndCBsb29rIGNoZWFwZXIsIHdlICptdXN0KiBkbyBpdCBpZiB0aGUKLQkgKiBpbm5l ciBwYXRoIGlzIHRvIGJlIHVzZWQgZGlyZWN0bHkgKHdpdGhvdXQgc29ydGluZykgYW5kIGl0IGRv ZXNuJ3QKLQkgKiBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKwkgKiBSZWdhcmRsZXNzIG9mIHdoYXQg cGxhbiBzaGFwZXMgYXJlIGVuYWJsZWQgYW5kIHdoYXQgdGhlIGNvc3RzIHNlZW0gdG8KKwkgKiBi ZSwgd2UgKm11c3QqIG1hdGVyaWFsaXplIGl0IGlmIHRoZSBpbm5lciBwYXRoIGlzIHRvIGJlIHVz ZWQgZGlyZWN0bHkKKwkgKiAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndCBzdXBwb3J0 IG1hcmsvcmVzdG9yZS4gUGxhbm5lciBmYWlsdXJlCisJICogaXMgbm90IGFuIG9wdGlvbiEKIAkg KgogCSAqIFNpbmNlIHRoZSBpbm5lciBzaWRlIG11c3QgYmUgb3JkZXJlZCwgYW5kIG9ubHkgU29y dHMgYW5kIEluZGV4U2NhbnMgY2FuCiAJICogY3JlYXRlIG9yZGVyIHRvIGJlZ2luIHdpdGgsIGFu ZCB0aGV5IGJvdGggc3VwcG9ydCBtYXJrL3Jlc3RvcmUsIHlvdQpAQCAtNDAyOSwxMCArNDEzMiw2 IEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBh dGgsCiAJICogbWVyZ2Ugam9pbnMgY2FuICpwcmVzZXJ2ZSogdGhlIG9yZGVyIG9mIHRoZWlyIGlu cHV0cywgc28gdGhleSBjYW4gYmUKIAkgKiBzZWxlY3RlZCBhcyB0aGUgaW5wdXQgb2YgYSBtZXJn ZWpvaW4sIGFuZCB0aGV5IGRvbid0IHN1cHBvcnQKIAkgKiBtYXJrL3Jlc3RvcmUgYXQgcHJlc2Vu dC4KLQkgKgotCSAqIFdlIGRvbid0IHRlc3QgdGhlIHZhbHVlIG9mIGVuYWJsZV9tYXRlcmlhbCBo ZXJlLCBiZWNhdXNlCi0JICogbWF0ZXJpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0 bmVzcyBpbiB0aGlzIGNhc2UsIGFuZCB0dXJuaW5nCi0JICogaXQgb2ZmIGRvZXMgbm90IGVudGl0 bGUgdXMgdG8gZGVsaXZlciBhbiBpbnZhbGlkIHBsYW4uCiAJICovCiAJZWxzZSBpZiAoaW5uZXJz b3J0a2V5cyA9PSBOSUwgJiYKIAkJCSAhRXhlY1N1cHBvcnRzTWFya1Jlc3RvcmUoaW5uZXJfcGF0 aCkpCkBAIC00MDQ2LDEwICs0MTQ1LDExIEBAIGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJ bmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJICogdGhvdWdoLgogCSAqCiAJICogU2luY2Ug bWF0ZXJpYWxpemF0aW9uIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGluIHRoaXMgY2Fz ZSwKLQkgKiByYXRoZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0 IGlmIGVuYWJsZV9tYXRlcmlhbCBpcwotCSAqIG9mZi4KKwkgKiByYXRoZXIgdGhhbiBuZWNlc3Nh cnkgZm9yIGNvcnJlY3RuZXNzLCB3ZSBza2lwIGl0IGlmIG1hdGVyaWFsaXphdGlvbiBpcworCSAq IHN3aXRjaGVkIG9mZi4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJpYWwgJiYgaW5uZXJz b3J0a2V5cyAhPSBOSUwgJiYKKwllbHNlIGlmICgoZXh0cmEtPnBnc19tYXNrICYgUEdTX01FUkdF Sk9JTl9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJIGlubmVyc29ydGtleXMgIT0gTklMICYmCiAJ CQkgcmVsYXRpb25fYnl0ZV9zaXplKGlubmVyX3BhdGhfcm93cywKIAkJCQkJCQkJaW5uZXJfcGF0 aC0+cGF0aHRhcmdldC0+d2lkdGgpID4KIAkJCSB3b3JrX21lbSAqIChTaXplKSAxMDI0KQpAQCAt NDA1NywxMSArNDE1NywyOSBAQCBmaW5hbF9jb3N0X21lcmdlam9pbihQbGFubmVySW5mbyAqcm9v dCwgTWVyZ2VQYXRoICpwYXRoLAogCWVsc2UKIAkJcGF0aC0+bWF0ZXJpYWxpemVfaW5uZXIgPSBm YWxzZTsKIAotCS8qIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29zdCBmb3IgdGhlIGNo b3NlbiBjYXNlICovCisJLyogR2V0IHRoZSBudW1iZXIgb2YgZGlzYWJsZWQgbm9kZXMsIG5vdCB5 ZXQgaW5jbHVkaW5nIHRoaXMgb25lLiAqLworCXBhdGgtPmpwYXRoLnBhdGguZGlzYWJsZWRfbm9k ZXMgPSB3b3Jrc3BhY2UtPmRpc2FibGVkX25vZGVzOworCisJLyoKKwkgKiBDaGFyZ2UgdGhlIHJp Z2h0IGluY3JlbWVudGFsIGNvc3QgZm9yIHRoZSBjaG9zZW4gY2FzZSwgYW5kIHVwZGF0ZQorCSAq IGVuYWJsZV9tYXNrIGFzIGFwcHJvcHJpYXRlLgorCSAqLwogCWlmIChwYXRoLT5tYXRlcmlhbGl6 ZV9pbm5lcikKKwl7CiAJCXJ1bl9jb3N0ICs9IG1hdF9pbm5lcl9jb3N0OworCQllbmFibGVfbWFz ayB8PSBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFOworCX0KIAllbHNlCisJewogCQlydW5fY29z dCArPSBiYXJlX2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExB SU47CisJfQorCisJLyogSW5jcmVtZW50YWwgY291bnQgb2YgZGlzYWJsZWQgbm9kZXMgaWYgdGhp cyBub2RlIGlzIGRpc2FibGVkLiAqLworCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dv cmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJ aWYgKChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2spCisJCSsr cGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlczsKIAogCS8qIENQVSBjb3N0cyAqLwogCkBA IC00MTk5LDkgKzQzMTcsMTMgQEAgaW5pdGlhbF9jb3N0X2hhc2hqb2luKFBsYW5uZXJJbmZvICpy b290LCBKb2luQ29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAogCWludAkJCW51bWJhdGNoZXM7CiAJ aW50CQkJbnVtX3NrZXdfbWN2czsKIAlzaXplX3QJCXNwYWNlX2FsbG93ZWQ7CS8qIHVudXNlZCAq LworCXVpbnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfSEFTSEpPSU47CisKKwlpZiAob3V0ZXJfcGF0 aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTDsKIAogCS8qIENvdW50IHVwIGRpc2FibGVkIG5vZGVzLiAqLwotCWRpc2FibGVk X25vZGVzID0gZW5hYmxlX2hhc2hqb2luID8gMCA6IDE7CisJZGlzYWJsZWRfbm9kZXMgPSAoZXh0 cmEtPnBnc19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJZGlz YWJsZWRfbm9kZXMgKz0gaW5uZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAJZGlzYWJsZWRfbm9k ZXMgKz0gb3V0ZXJfcGF0aC0+ZGlzYWJsZWRfbm9kZXM7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9pbmR4cGF0aC5jCmluZGV4IDVkNGY4MWVlNzdlLi44OTIyYjY4MDMzYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0yMjMyLDggKzIyMzIsOCBAQCBjaGVja19pbmRl eF9vbmx5KFJlbE9wdEluZm8gKnJlbCwgSW5kZXhPcHRJbmZvICppbmRleCkKIAlMaXN0Q2VsbCAg ICpsYzsKIAlpbnQJCQlpOwogCi0JLyogSW5kZXgtb25seSBzY2FucyBtdXN0IGJlIGVuYWJsZWQg Ki8KLQlpZiAoIWVuYWJsZV9pbmRleG9ubHlzY2FuKQorCS8qIElmIHdlJ3JlIG5vdCBhbGxvd2Vk IHRvIGNvbnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGdpdmUgdXAgbm93ICovCisJaWYgKChyZWwt PnBnc19tYXNrICYgUEdTX0NPTlNJREVSX0lOREVYT05MWSkgPT0gMCkKIAkJcmV0dXJuIGZhbHNl OwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRo LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCmluZGV4IGVhNWI2NDE1 MTg2Li44MmRhYjNkNjAwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv am9pbnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCkBA IC0yOSw4ICsyOSw5IEBACiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAi dXRpbHMvdHlwY2FjaGUuaCIKIAotLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBp biBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQg Y29udHJvbCBpbiBhZGRfcGF0aHNfdG9fam9pbnJlbCgpICovCiBzZXRfam9pbl9wYXRobGlzdF9o b29rX3R5cGUgc2V0X2pvaW5fcGF0aGxpc3RfaG9vayA9IE5VTEw7Citqb2luX3BhdGhfc2V0dXBf aG9va190eXBlIGpvaW5fcGF0aF9zZXR1cF9ob29rID0gTlVMTDsKIAogLyoKICAqIFBhdGhzIHBh cmFtZXRlcml6ZWQgYnkgYSBwYXJlbnQgcmVsIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHBhcmFt ZXRlcml6ZWQKQEAgLTE1MSw2ICsxNTIsMzMgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5l ckluZm8gKnJvb3QsCiAJZXh0cmEubWVyZ2VjbGF1c2VfbGlzdCA9IE5JTDsKIAlleHRyYS5zamlu Zm8gPSBzamluZm87CiAJZXh0cmEucGFyYW1fc291cmNlX3JlbHMgPSBOVUxMOworCWV4dHJhLnBn c19tYXNrID0gam9pbnJlbC0+cGdzX21hc2s7CisKKwkvKgorCSAqIEdpdmUgZXh0ZW5zaW9ucyBh IGNoYW5jZSB0byB0YWtlIGNvbnRyb2wuIEluIHBhcnRpY3VsYXIsIGFuIGV4dGVuc2lvbgorCSAq IG1pZ2h0IHdhbnQgdG8gbW9kaWZ5IGV4dHJhLnBnc19tYXNrLiBJdCdzIHBvc3NpYmxlIHRvIG92 ZXJyaWRlIHBnc19tYXNrCisJICogb24gYSBxdWVyeS13aWRlIGJhc2lzIHVzaW5nIGpvaW5fc2Vh cmNoX2hvb2ssIG9yIGZvciBhIHBhcnRpY3VsYXIKKwkgKiByZWxhdGlvbiB1c2luZyBqb2lucmVs X3NldHVwX2hvb2ssIGJ1dCBleHRlbnNpb25zIHRoYXQgd2FudCB0byBwcm92aWRlCisJICogZGlm ZmVyZW50IGFkdmljZSBmb3IgdGhlIHNhbWUgam9pbnJlbCBiYXNlZCBvbiB0aGUgY2hvaWNlIG9m IGlubmVycmVsCisJICogYW5kIG91dGVycmVsIHdpbGwgbmVlZCB0byB1c2UgdGhpcyBob29rLgor CSAqCisJICogQSB2ZXJ5IHNpbXBsZSB3YXkgZm9yIGFuIGV4dGVuc2lvbiB0byB1c2UgdGhpcyBo b29rIGlzIHRvIHNldAorCSAqIGV4dHJhLnBnc19tYXNrICY9IH5QR1NfSk9JTl9BTlksIGlmIGl0 IHNpbXBseSBkb2Vzbid0IHdhbnQgYW55IG9mIHRoZQorCSAqIHBhdGhzIGdlbmVyYXRlZCBieSB0 aGlzIGNhbGwgdG8gYWRkX3BhdGhzX3RvX2pvaW5yZWwoKSB0byBiZSBzZWxlY3RlZC4KKwkgKiBB biBleHRlbnNpb24gY291bGQgdXNlIHRoaXMgdGVjaG5pcXVlIHRvIGNvbnN0cmFpbiB0aGUgam9p biBvcmRlciwKKwkgKiBzaW5jZSBpdCBjb3VsZCB0aGVyZWJ5IGFycmFuZ2UgdG8gcmVqZWN0IGFs bCBwYXRocyBmcm9tIGpvaW4gb3JkZXJzCisJICogdGhhdCBpdCBkb2VzIG5vdCBsaWtlLiBBbiBl eHRlbnNpb24gY2FuIGFsc28gc2VsZWN0aXZlbHkgY2xlYXIgYml0cworCSAqIGZyb20gZXh0cmEu cGdzX21hc2sgdG8gcnVsZSBvdXQgc3BlY2lmaWMgdGVjaG5pcXVlcyBmb3Igc3BlY2lmaWMgam9p bnMsCisJICogb3IgY291bGQgZXZlbiBzZXQgYWRkaXRpb25hbCBiaXRzIHRvIHJlLWFsbG93IG1l dGhvZHMgZGlzYWJsZWQgYXQgc29tZQorCSAqIGhpZ2hlciBsZXZlbC4KKwkgKgorCSAqIE5COiBC ZWxvdyB0aGlzIHBvaW50LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYXJlZnVsIHRvIHJlZmVy ZW5jZQorCSAqIGV4dHJhLnBnc19tYXNrIHJhdGhlciB0aGFuIHJlbC0+cGdzX21hc2sgdG8gYXZv aWQgZGlzcmVnYXJkaW5nIGFueQorCSAqIGNoYW5nZXMgbWFkZSBieSB0aGUgaG9vayB3ZSdyZSBh Ym91dCB0byBjYWxsLgorCSAqLworCWlmIChqb2luX3BhdGhfc2V0dXBfaG9vaykKKwkJam9pbl9w YXRoX3NldHVwX2hvb2socm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJ CSBqb2ludHlwZSwgJmV4dHJhKTsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBpbm5lciByZWxhdGlv biBpcyBwcm92YWJseSB1bmlxdWUgZm9yIHRoaXMgb3V0ZXIgcmVsLgpAQCAtMjEwLDEwICsyMzgs MTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJLyoKIAkgKiBG aW5kIHBvdGVudGlhbCBtZXJnZWpvaW4gY2xhdXNlcy4gIFdlIGNhbiBza2lwIHRoaXMgaWYgd2Ug YXJlIG5vdAogCSAqIGludGVyZXN0ZWQgaW4gZG9pbmcgYSBtZXJnZWpvaW4uICBIb3dldmVyLCBt ZXJnZWpvaW4gbWF5IGJlIG91ciBvbmx5Ci0JICogd2F5IG9mIGltcGxlbWVudGluZyBhIGZ1bGwg b3V0ZXIgam9pbiwgc28gb3ZlcnJpZGUgZW5hYmxlX21lcmdlam9pbiBpZgotCSAqIGl0J3MgYSBm dWxsIGpvaW4uCisJICogd2F5IG9mIGltcGxlbWVudGluZyBhIGZ1bGwgb3V0ZXIgam9pbiwgc28g aW4gdGhhdCBjYXNlIHdlIGRvbid0IGNhcmUKKwkgKiB3aGV0aGVyIG1lcmdlam9pbnMgYXJlIGRp c2FibGVkLgogCSAqLwotCWlmIChlbmFibGVfbWVyZ2Vqb2luIHx8IGpvaW50eXBlID09IEpPSU5f RlVMTCkKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX01FUkdFSk9JTl9BTlkpICE9IDAgfHwg am9pbnR5cGUgPT0gSk9JTl9GVUxMKQogCQlleHRyYS5tZXJnZWNsYXVzZV9saXN0ID0gc2VsZWN0 X21lcmdlam9pbl9jbGF1c2VzKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgam9pbnJlbCwKIAkJCQkJ CQkJCQkJCQkJICBvdXRlcnJlbCwKQEAgLTMyMSwxMCArMzQ5LDEwIEBAIGFkZF9wYXRoc190b19q b2lucmVsKFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiA0LiBDb25zaWRlciBwYXRocyB3 aGVyZSBib3RoIG91dGVyIGFuZCBpbm5lciByZWxhdGlvbnMgbXVzdCBiZSBoYXNoZWQKLQkgKiBi ZWZvcmUgYmVpbmcgam9pbmVkLiAgQXMgYWJvdmUsIGRpc3JlZ2FyZCBlbmFibGVfaGFzaGpvaW4g Zm9yIGZ1bGwKLQkgKiBqb2lucywgYmVjYXVzZSB0aGVyZSBtYXkgYmUgbm8gb3RoZXIgYWx0ZXJu YXRpdmUuCisJICogYmVmb3JlIGJlaW5nIGpvaW5lZC4gIEFzIGFib3ZlLCB3aGVuIGl0J3MgYSBm dWxsIGpvaW4sIHdlIG11c3QgdHJ5IHRoaXMKKwkgKiBldmVuIHdoZW4gdGhlIHBhdGggdHlwZSBp cyBkaXNhYmxlZCwgYmVjYXVzZSBpdCBtYXkgYmUgb3VyIG9ubHkgb3B0aW9uLgogCSAqLwotCWlm IChlbmFibGVfaGFzaGpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEu cGdzX21hc2sgJiBQR1NfSEFTSEpPSU4pICE9IDAgfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQog CQloYXNoX2lubmVyX2FuZF9vdXRlcihyb290LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWws CiAJCQkJCQkJIGpvaW50eXBlLCAmZXh0cmEpOwogCkBAIC0zMzMsNyArMzYxLDcgQEAgYWRkX3Bh dGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJICogdG8gdGhlIHNhbWUgc2VydmVy IGFuZCBhc3NpZ25lZCB0byB0aGUgc2FtZSB1c2VyIHRvIGNoZWNrIGFjY2VzcwogCSAqIHBlcm1p c3Npb25zIGFzLCBnaXZlIHRoZSBGRFcgYSBjaGFuY2UgdG8gcHVzaCBkb3duIGpvaW5zLgogCSAq LwotCWlmIChqb2lucmVsLT5mZHdyb3V0aW5lICYmCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBH U19GT1JFSUdOSk9JTikgIT0gMCAmJiBqb2lucmVsLT5mZHdyb3V0aW5lICYmCiAJCWpvaW5yZWwt PmZkd3JvdXRpbmUtPkdldEZvcmVpZ25Kb2luUGF0aHMpCiAJCWpvaW5yZWwtPmZkd3JvdXRpbmUt PkdldEZvcmVpZ25Kb2luUGF0aHMocm9vdCwgam9pbnJlbCwKIAkJCQkJCQkJCQkJCSBvdXRlcnJl bCwgaW5uZXJyZWwsCkBAIC0zNDIsOCArMzcwLDEzIEBAIGFkZF9wYXRoc190b19qb2lucmVsKFBs YW5uZXJJbmZvICpyb290LAogCS8qCiAJICogNi4gRmluYWxseSwgZ2l2ZSBleHRlbnNpb25zIGEg Y2hhbmNlIHRvIG1hbmlwdWxhdGUgdGhlIHBhdGggbGlzdC4gIFRoZXkKIAkgKiBjb3VsZCBhZGQg bmV3IHBhdGhzIChzdWNoIGFzIEN1c3RvbVBhdGhzKSBieSBjYWxsaW5nIGFkZF9wYXRoKCksIG9y Ci0JICogYWRkX3BhcnRpYWxfcGF0aCgpIGlmIHBhcmFsbGVsIGF3YXJlLiAgVGhleSBjb3VsZCBh bHNvIGRlbGV0ZSBvciBtb2RpZnkKLQkgKiBwYXRocyBhZGRlZCBieSB0aGUgY29yZSBjb2RlLgor CSAqIGFkZF9wYXJ0aWFsX3BhdGgoKSBpZiBwYXJhbGxlbCBhd2FyZS4KKwkgKgorCSAqIEluIHRo ZW9yeSwgZXh0ZW5zaW9ucyBjb3VsZCBhbHNvIHVzZSB0aGlzIGhvb2sgdG8gZGVsZXRlIG9yIG1v ZGlmeQorCSAqIHBhdGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUsIGJ1dCBpbiBwcmFjdGljZSB0 aGlzIGlzIGRpZmZpY3VsdCB0byBtYWtlCisJICogd29yaywgc2luY2UgaXQncyB0b28gbGF0ZSB0 byBnZXQgYmFjayBhbnkgcGF0aHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgorCSAqIGRpc2NhcmRl ZCBieSBhZGRfcGF0aCgpIG9yIGFkZF9wYXJ0aWFsX3BhdGgoKS4gSWYgeW91J3JlIHRyeWluZyB0 bworCSAqIHN1cHByZXNzIHBhdGhzLCBjb25zaWRlciB1c2luZyBqb2luX3BhdGhfc2V0dXBfaG9v ayBpbnN0ZWFkLgogCSAqLwogCWlmIChzZXRfam9pbl9wYXRobGlzdF9ob29rKQogCQlzZXRfam9p bl9wYXRobGlzdF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTY5 MCw3ICs3MjMsNyBAQCBnZXRfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICppbm5lcnJlbCwKIAlMaXN0CSAgICpwaF9sYXRlcmFsX3ZhcnM7CiAKIAkvKiBPYnZpb3Vz bHkgbm90IGlmIGl0J3MgZGlzYWJsZWQgKi8KLQlpZiAoIWVuYWJsZV9tZW1vaXplKQorCWlmICgo ZXh0cmEtPnBnc19tYXNrICYgUEdTX05FU1RMT09QX01FTU9JWkUpID09IDApCiAJCXJldHVybiBO VUxMOwogCiAJLyoKQEAgLTg0NSw2ICs4NzgsNyBAQCB0cnlfbmVzdGxvb3BfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkgIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJICBMaXN0ICpwYXRoa2V5 cywKIAkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCSAgdWludDY0IG5lc3Rsb29wX3N1YnR5 cGUsCiAJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAqZXh0cmEpCiB7CiAJUmVsaWRzCQlyZXF1aXJl ZF9vdXRlcjsKQEAgLTkyNyw2ICs5NjEsNyBAQCB0cnlfbmVzdGxvb3BfcGF0aChQbGFubmVySW5m byAqcm9vdCwKIAkgKiBtZXRob2RvbG9neSB3b3J0aHdoaWxlLgogCSAqLwogCWluaXRpYWxfY29z dF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBqb2ludHlwZSwKKwkJCQkJCSAgbmVzdGxvb3Bf c3VidHlwZSB8IFBHU19DT05TSURFUl9OT05QQVJUSUFMLAogCQkJCQkJICBvdXRlcl9wYXRoLCBp bm5lcl9wYXRoLCBleHRyYSk7CiAKIAlpZiAoYWRkX3BhdGhfcHJlY2hlY2soam9pbnJlbCwgd29y a3NwYWNlLmRpc2FibGVkX25vZGVzLApAQCAtOTY0LDYgKzk5OSw3IEBAIHRyeV9wYXJ0aWFsX25l c3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgIFBhdGggKmlubmVyX3BhdGgs CiAJCQkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwKKwkJ CQkJCSAgdWludDY0IG5lc3Rsb29wX3N1YnR5cGUsCiAJCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRh ICpleHRyYSkKIHsKIAlKb2luQ29zdFdvcmtzcGFjZSB3b3Jrc3BhY2U7CkBAIC0xMDExLDcgKzEw NDcsNyBAQCB0cnlfcGFydGlhbF9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAq IEJlZm9yZSBjcmVhdGluZyBhIHBhdGgsIGdldCBhIHF1aWNrIGxvd2VyIGJvdW5kIG9uIHdoYXQg aXQgaXMgbGlrZWx5IHRvCiAJICogY29zdC4gIEJhaWwgb3V0IHJpZ2h0IGF3YXkgaWYgaXQgbG9v a3MgdGVycmlibGUuCiAJICovCi0JaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3Bh Y2UsIGpvaW50eXBlLAorCWluaXRpYWxfY29zdF9uZXN0bG9vcChyb290LCAmd29ya3NwYWNlLCBq b2ludHlwZSwgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkJCSAgb3V0ZXJfcGF0aCwgaW5uZXJfcGF0 aCwgZXh0cmEpOwogCWlmICghYWRkX3BhcnRpYWxfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jr c3BhY2UuZGlzYWJsZWRfbm9kZXMsCiAJCQkJCQkJCSAgIHdvcmtzcGFjZS50b3RhbF9jb3N0LCBw YXRoa2V5cykpCkBAIC0xODU5LDE0ICsxODk1LDE0IEBAIG1hdGNoX3Vuc29ydGVkX291dGVyKFBs YW5uZXJJbmZvICpyb290LAogCWlmIChuZXN0am9pbk9LKQogCXsKIAkJLyoKLQkJICogQ29uc2lk ZXIgbWF0ZXJpYWxpemluZyB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCwgdW5sZXNzCi0JCSAqIGVu YWJsZV9tYXRlcmlhbCBpcyBvZmYgb3IgdGhlIHBhdGggaW4gcXVlc3Rpb24gbWF0ZXJpYWxpemVz IGl0cwotCQkgKiBvdXRwdXQgYW55d2F5LgorCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRo ZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MgdGhhdCBpcworCQkgKiBkaXNhYmxlZCBvciB0 aGUgcGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzIG91dHB1dCBhbnl3YXkuCiAJCSAq LwotCQlpZiAoZW5hYmxlX21hdGVyaWFsICYmIGlubmVyX2NoZWFwZXN0X3RvdGFsICE9IE5VTEwg JiYKKwkJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTkVTVExPT1BfTUFURVJJQUxJWkUpICE9 IDAgJiYKKwkJCWlubmVyX2NoZWFwZXN0X3RvdGFsICE9IE5VTEwgJiYKIAkJCSFFeGVjTWF0ZXJp YWxpemVzT3V0cHV0KGlubmVyX2NoZWFwZXN0X3RvdGFsLT5wYXRodHlwZSkpCiAJCQltYXRwYXRo ID0gKFBhdGggKikKLQkJCQljcmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hl YXBlc3RfdG90YWwpOworCQkJCWNyZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9j aGVhcGVzdF90b3RhbCwgdHJ1ZSk7CiAJfQogCiAJZm9yZWFjaChsYzEsIG91dGVycmVsLT5wYXRo bGlzdCkKQEAgLTE5MDksNiArMTk0NSw3IEBAIG1hdGNoX3Vuc29ydGVkX291dGVyKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkgIGlubmVycGF0aCwKIAkJCQkJCQkJICBtZXJnZV9wYXRoa2V5 cywKIAkJCQkJCQkJICBqb2ludHlwZSwKKwkJCQkJCQkJICBQR1NfTkVTVExPT1BfUExBSU4sCiAJ CQkJCQkJCSAgZXh0cmEpOwogCiAJCQkJLyoKQEAgLTE5MjUsNiArMTk2Miw3IEBAIG1hdGNoX3Vu c29ydGVkX291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJICBtcGF0aCwKIAkJCQkJ CQkJCSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCQkgIGpvaW50eXBlLAorCQkJCQkJCQkJICBQ R1NfTkVTVExPT1BfTUVNT0laRSwKIAkJCQkJCQkJCSAgZXh0cmEpOwogCQkJfQogCkBAIC0xOTM2 LDYgKzE5NzQsNyBAQCBtYXRjaF91bnNvcnRlZF9vdXRlcihQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCQkJICBtYXRwYXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpv aW50eXBlLAorCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSwKIAkJCQkJCQkJICBl eHRyYSk7CiAJCX0KIApAQCAtMjA1MiwxNiArMjA5MSwxNyBAQCBjb25zaWRlcl9wYXJhbGxlbF9u ZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogQ29uc2lkZXIgbWF0ZXJpYWxp emluZyB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCwgdW5sZXNzOiAxKQotCSAqIGVuYWJsZV9tYXRl cmlhbCBpcyBvZmYsIDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAorCSAqIG1hdGVy aWFsaXphdGlvbiBpcyBkaXNhYmxlZCBoZXJlLCAyKSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBp cyBub3QKIAkgKiBwYXJhbGxlbC1zYWZlLCAzKSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBpcyBw YXJhbWV0ZXJpemVkIGJ5IHRoZSBvdXRlcgogCSAqIHJlbCwgb3IgNCkgdGhlIGNoZWFwZXN0IGlu bmVyIHBhdGggbWF0ZXJpYWxpemVzIGl0cyBvdXRwdXQgYW55d2F5LgogCSAqLwotCWlmIChlbmFi bGVfbWF0ZXJpYWwgJiYgaW5uZXJfY2hlYXBlc3RfdG90YWwtPnBhcmFsbGVsX3NhZmUgJiYKKwlp ZiAoKGV4dHJhLT5wZ3NfbWFzayAmIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgor CQlpbm5lcl9jaGVhcGVzdF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgogCQkhUEFUSF9QQVJBTV9C WV9SRUwoaW5uZXJfY2hlYXBlc3RfdG90YWwsIG91dGVycmVsKSAmJgogCQkhRXhlY01hdGVyaWFs aXplc091dHB1dChpbm5lcl9jaGVhcGVzdF90b3RhbC0+cGF0aHR5cGUpKQogCXsKIAkJbWF0cGF0 aCA9IChQYXRoICopCi0JCQljcmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hl YXBlc3RfdG90YWwpOworCQkJY3JlYXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2No ZWFwZXN0X3RvdGFsLCB0cnVlKTsKIAkJQXNzZXJ0KG1hdHBhdGgtPnBhcmFsbGVsX3NhZmUpOwog CX0KIApAQCAtMjA5MSw3ICsyMTMxLDggQEAgY29uc2lkZXJfcGFyYWxsZWxfbmVzdGxvb3AoUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJY29udGludWU7CiAKIAkJCXRyeV9wYXJ0aWFsX25lc3Rsb29w X3BhdGgocm9vdCwgam9pbnJlbCwgb3V0ZXJwYXRoLCBpbm5lcnBhdGgsCi0JCQkJCQkJCQkgIHBh dGhrZXlzLCBqb2ludHlwZSwgZXh0cmEpOworCQkJCQkJCQkJICBwYXRoa2V5cywgam9pbnR5cGUs CisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwgZXh0cmEpOwogCiAJCQkvKgogCQkJICog VHJ5IGdlbmVyYXRpbmcgYSBtZW1vaXplIHBhdGggYW5kIHNlZSBpZiB0aGF0IG1ha2VzIHRoZSBu ZXN0ZWQKQEAgLTIxMDIsMTMgKzIxNDMsMTUgQEAgY29uc2lkZXJfcGFyYWxsZWxfbmVzdGxvb3Ao UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgZXh0cmEpOwogCQkJaWYgKG1wYXRoICE9IE5V TEwpCiAJCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBh dGgsIG1wYXRoLAotCQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJ CQkJCQkJICBwYXRoa2V5cywgam9pbnR5cGUsCisJCQkJCQkJCQkJICBQR1NfTkVTVExPT1BfTUVN T0laRSwgZXh0cmEpOwogCQl9CiAKIAkJLyogQWxzbyBjb25zaWRlciBtYXRlcmlhbGl6ZWQgZm9y bSBvZiB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCAqLwogCQlpZiAobWF0cGF0aCAhPSBOVUxMKQog CQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVsLCBvdXRlcnBhdGgsIG1h dHBhdGgsCi0JCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwgZXh0cmEpOworCQkJCQkJCQkJ ICBwYXRoa2V5cywgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NQVRFUklBTEla RSwgZXh0cmEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvdGlkcGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCmluZGV4 IDNkZGJjMTBiYmRmLi4xNTAxMTVjMjkzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvdGlkcGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL3RpZHBh dGguYwpAQCAtNDk5LDE4ICs0OTksMTkgQEAgY3JlYXRlX3RpZHNjYW5fcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIAlMaXN0CSAgICp0aWRxdWFsczsKIAlMaXN0CSAg ICp0aWRyYW5nZXF1YWxzOwogCWJvb2wJCWlzQ3VycmVudE9mOworCWJvb2wJCWVuYWJsZWQgPSAo cmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwOwogCiAJLyoKIAkgKiBJZiBhbnkgc3Vp dGFibGUgcXVhbHMgZXhpc3QgaW4gdGhlIHJlbCdzIGJhc2VyZXN0cmljdCBsaXN0LCBnZW5lcmF0 ZSBhCiAJICogcGxhaW4gKHVucGFyYW1ldGVyaXplZCkgVGlkUGF0aCB3aXRoIHRoZW0uCiAJICoK LQkgKiBXZSBza2lwIHRoaXMgd2hlbiBlbmFibGVfdGlkc2NhbiA9IGZhbHNlLCBleGNlcHQgd2hl biB0aGUgcXVhbCBpcworCSAqIFdlIHNraXAgdGhpcyB3aGVuIFRJRCBzY2FucyBhcmUgZGlzYWJs ZWQsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCiAJICogQ3VycmVudE9mRXhwci4gSW4gdGhhdCBj YXNlLCBhIFRJRCBzY2FuIGlzIHRoZSBvbmx5IGNvcnJlY3QgcGF0aC4KIAkgKi8KIAl0aWRxdWFs cyA9IFRpZFF1YWxGcm9tUmVzdHJpY3RJbmZvTGlzdChyb290LCByZWwtPmJhc2VyZXN0cmljdGlu Zm8sIHJlbCwKIAkJCQkJCQkJCQkgICAmaXNDdXJyZW50T2YpOwogCi0JaWYgKHRpZHF1YWxzICE9 IE5JTCAmJiAoZW5hYmxlX3RpZHNjYW4gfHwgaXNDdXJyZW50T2YpKQorCWlmICh0aWRxdWFscyAh PSBOSUwgJiYgKGVuYWJsZWQgfHwgaXNDdXJyZW50T2YpKQogCXsKIAkJLyoKIAkJICogVGhpcyBw YXRoIHVzZXMgbm8gam9pbiBjbGF1c2VzLCBidXQgaXQgY291bGQgc3RpbGwgaGF2ZSByZXF1aXJl ZApAQCAtNTMyLDcgKzUzMyw3IEBAIGNyZWF0ZV90aWRzY2FuX3BhdGhzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwpCiAJfQogCiAJLyogU2tpcCB0aGUgcmVzdCBpZiBUSUQgc2Nh bnMgYXJlIGRpc2FibGVkLiAqLwotCWlmICghZW5hYmxlX3RpZHNjYW4pCisJaWYgKCFlbmFibGVk KQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRl cGxhbi5jCmluZGV4IGUzZjI3YTU4NmNhLi42NmQ0OTFlY2IxMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtNjUwMyw3ICs2NTAzLDcgQEAgUGxhbiAqCiBtYXRl cmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiB7CiAJUGxhbgkgICAqbWF0cGxh bjsKLQlQYXRoCQltYXRwYXRoOwkJLyogZHVtbXkgZm9yIHJlc3VsdCBvZiBjb3N0X21hdGVyaWFs ICovCisJUGF0aAkJbWF0cGF0aDsJCS8qIGR1bW15IGZvciBjb3N0X21hdGVyaWFsICovCiAJQ29z dAkJaW5pdHBsYW5fY29zdDsKIAlib29sCQl1bnNhZmVfaW5pdHBsYW5zOwogCkBAIC02NTI1LDcg KzY1MjUsOSBAQCBtYXRlcmlhbGl6ZV9maW5pc2hlZF9wbGFuKFBsYW4gKnN1YnBsYW4pCiAJc3Vi cGxhbi0+dG90YWxfY29zdCAtPSBpbml0cGxhbl9jb3N0OwogCiAJLyogU2V0IGNvc3QgZGF0YSAq LworCW1hdHBhdGgucGFyZW50ID0gTlVMTDsKIAljb3N0X21hdGVyaWFsKCZtYXRwYXRoLAorCQkJ CSAgZW5hYmxlX21hdGVyaWFsLAogCQkJCSAgc3VicGxhbi0+ZGlzYWJsZWRfbm9kZXMsCiAJCQkJ ICBzdWJwbGFuLT5zdGFydHVwX2Nvc3QsCiAJCQkJICBzdWJwbGFuLT50b3RhbF9jb3N0LApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDk0ZTFhYzk2ZWQ5Li4zNmEyOTM1NTEw NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDYyLDYgKzQ2Miw1MyBA QCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5n LCBpbnQgY3Vyc29yT3B0aW9ucywKIAkJdHVwbGVfZnJhY3Rpb24gPSAwLjA7CiAJfQogCisJLyoK KwkgKiBDb21wdXRlIHRoZSBpbml0aWFsIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrLgor CSAqCisJICogU29tZSBzdHJhdGVnaWVzLCBzdWNoIGFzIFBHU19GT1JFSUdOSk9JTiwgaGF2ZSBu byBjb3JyZXNwb25kaW5nIGVuYWJsZV8qCisJICogR1VDLCBhbmQgc28gdGhlIGNvcnJlc3BvbmRp bmcgYml0cyBhcmUgYWx3YXlzIHNldCBpbiB0aGUgZGVmYXVsdAorCSAqIHN0cmF0ZWd5IG1hc2su CisJICoKKwkgKiBJdCBtYXkgc2VlbSBzdXJwcmlzaW5nIHRoYXQgZW5hYmxlX2luZGV4c2NhbiBz ZXRzIGJvdGggUEdTX0lOREVYU0NBTgorCSAqIGFuZCBQR1NfSU5ERVhPTkxZU0NBTi4gSG93ZXZl ciwgdGhlIGhpc3RvcmljYWwgYmVoYXZpb3Igb2YgdGhpcyBHVUMKKwkgKiBjb3JyZXNwb25kcyB0 byB0aGlzIGV4YWN0bHk6IGVuYWJsZV9pbmRleHNjYW49b2ZmIGRpc2FibGVzIGJvdGgKKwkgKiBp bmRleC1zY2FuIGFuZCBpbmRleC1vbmx5IHNjYW4gcGF0aHMsIHdoZXJlYXMgZW5hYmxlX2luZGV4 b25seXNjYW49b2ZmCisJICogY29udmVydHMgdGhlIGluZGV4LW9ubHkgc2NhbiBwYXRocyB0aGF0 IHdlIHdvdWxkIGhhdmUgY29uc2lkZXJlZCBpbnRvCisJICogaW5kZXggc2NhbiBwYXRocy4KKwkg Ki8KKwlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrID0gUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBF TkQgfCBQR1NfRk9SRUlHTkpPSU4gfAorCQlQR1NfR0FUSEVSIHwgUEdTX0NPTlNJREVSX05PTlBB UlRJQUw7CisJaWYgKGVuYWJsZV90aWRzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9 IFBHU19USURTQ0FOOworCWlmIChlbmFibGVfc2Vxc2NhbikKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3Nf bWFzayB8PSBQR1NfU0VRU0NBTjsKKwlpZiAoZW5hYmxlX2luZGV4c2NhbikKKwkJZ2xvYi0+ZGVm YXVsdF9wZ3NfbWFzayB8PSBQR1NfSU5ERVhTQ0FOIHwgUEdTX0lOREVYT05MWVNDQU47CisJaWYg KGVuYWJsZV9pbmRleG9ubHlzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19D T05TSURFUl9JTkRFWE9OTFk7CisJaWYgKGVuYWJsZV9iaXRtYXBzY2FuKQorCQlnbG9iLT5kZWZh dWx0X3Bnc19tYXNrIHw9IFBHU19CSVRNQVBTQ0FOOworCWlmIChlbmFibGVfbWVyZ2Vqb2luKQor CXsKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTUVSR0VKT0lOX1BMQUlOOworCQlp ZiAoZW5hYmxlX21hdGVyaWFsKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTUVS R0VKT0lOX01BVEVSSUFMSVpFOworCX0KKwlpZiAoZW5hYmxlX25lc3Rsb29wKQorCXsKKwkJZ2xv Yi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfTkVTVExPT1BfUExBSU47CisJCWlmIChlbmFibGVf bWF0ZXJpYWwpCisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19ORVNUTE9PUF9NQVRF UklBTElaRTsKKwkJaWYgKGVuYWJsZV9tZW1vaXplKQorCQkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFz ayB8PSBQR1NfTkVTVExPT1BfTUVNT0laRTsKKwl9CisJaWYgKGVuYWJsZV9oYXNoam9pbikKKwkJ Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfSEFTSEpPSU47CisJaWYgKGVuYWJsZV9nYXRo ZXJtZXJnZSkKKwkJZ2xvYi0+ZGVmYXVsdF9wZ3NfbWFzayB8PSBQR1NfR0FUSEVSX01FUkdFOwor CWlmIChlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNr IHw9IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFOworCiAJLyogQWxsb3cgcGx1Z2lucyB0byB0 YWtlIGNvbnRyb2wgYWZ0ZXIgd2UndmUgaW5pdGlhbGl6ZWQgImdsb2IiICovCiAJaWYgKHBsYW5u ZXJfc2V0dXBfaG9vaykKIAkJKCpwbGFubmVyX3NldHVwX2hvb2spIChnbG9iLCBwYXJzZSwgcXVl cnlfc3RyaW5nLCAmdHVwbGVfZnJhY3Rpb24sIGVzKTsKQEAgLTM5NTQsNiArNDAwMSw5IEBAIG1h a2VfZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWws CiAJCWlzX3BhcmFsbGVsX3NhZmUocm9vdCwgaGF2aW5nUXVhbCkpCiAJCWdyb3VwZWRfcmVsLT5j b25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKiBBc3N1bWUgdGhhdCB0aGUgc2FtZSBwYXRo IGdlbmVyYXRpb24gc3RyYXRlZ2llcyBhcmUgYWxsb3dlZCAqLworCWdyb3VwZWRfcmVsLT5wZ3Nf bWFzayA9IGlucHV0X3JlbC0+cGdzX21hc2s7CisKIAkvKgogCSAqIElmIHRoZSBpbnB1dCByZWwg YmVsb25ncyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlIGdyb3VwZWQgcmVsLgogCSAqLwpA QCAtNTM0OCw2ICs1Mzk4LDkgQEAgY3JlYXRlX29yZGVyZWRfcGF0aHMoUGxhbm5lckluZm8gKnJv b3QsCiAJaWYgKGlucHV0X3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgdGFyZ2V0X3BhcmFsbGVs X3NhZmUpCiAJCW9yZGVyZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IHRydWU7CiAKKwkvKiBB c3N1bWUgdGhhdCB0aGUgc2FtZSBwYXRoIGdlbmVyYXRpb24gc3RyYXRlZ2llcyBhcmUgYWxsb3dl ZC4gKi8KKwlvcmRlcmVkX3JlbC0+cGdzX21hc2sgPSBpbnB1dF9yZWwtPnBnc19tYXNrOworCiAJ LyoKIAkgKiBJZiB0aGUgaW5wdXQgcmVsIGJlbG9uZ3MgdG8gYSBzaW5nbGUgRkRXLCBzbyBkb2Vz IHRoZSBvcmRlcmVkX3JlbC4KIAkgKi8KQEAgLTc0MjgsNiArNzQ4MSw3IEBAIGNyZWF0ZV9wYXJ0 aWFsX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQlncm91cGVk X3JlbC0+cmVsaWRzKTsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVs ID0KIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBhcnRpYWxseV9ncm91cGVk X3JlbC0+cGdzX21hc2sgPSBncm91cGVkX3JlbC0+cGdzX21hc2s7CiAJcGFydGlhbGx5X2dyb3Vw ZWRfcmVsLT5yZWxvcHRraW5kID0gZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQ7CiAJcGFydGlhbGx5 X2dyb3VwZWRfcmVsLT5zZXJ2ZXJpZCA9IGdyb3VwZWRfcmVsLT5zZXJ2ZXJpZDsKIAlwYXJ0aWFs bHlfZ3JvdXBlZF9yZWwtPnVzZXJpZCA9IGdyb3VwZWRfcmVsLT51c2VyaWQ7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCAzM2NlMzRmMDA4OC4uN2RkOWE3YzQ2MDkgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwpAQCAtMTY1OSw3ICsxNjU5LDcgQEAg Y3JlYXRlX2dyb3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAgKgkgIHBhdGhub2RlLgogICovCiBNYXRlcmlhbFBhdGggKgotY3JlYXRlX21hdGVyaWFs X3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKQorY3JlYXRlX21hdGVyaWFsX3Bh dGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLCBib29sIGVuYWJsZWQpCiB7CiAJTWF0 ZXJpYWxQYXRoICpwYXRobm9kZSA9IG1ha2VOb2RlKE1hdGVyaWFsUGF0aCk7CiAKQEAgLTE2Nzgs NiArMTY3OCw3IEBAIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKFJlbE9wdEluZm8gKnJlbCwgUGF0aCAq c3VicGF0aCkKIAlwYXRobm9kZS0+c3VicGF0aCA9IHN1YnBhdGg7CiAKIAljb3N0X21hdGVyaWFs KCZwYXRobm9kZS0+cGF0aCwKKwkJCQkgIGVuYWJsZWQsCiAJCQkJICBzdWJwYXRoLT5kaXNhYmxl ZF9ub2RlcywKIAkJCQkgIHN1YnBhdGgtPnN0YXJ0dXBfY29zdCwKIAkJCQkgIHN1YnBhdGgtPnRv dGFsX2Nvc3QsCkBAIC0xNzMwLDggKzE3MzEsMTUgQEAgY3JlYXRlX21lbW9pemVfcGF0aChQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLAogCXBhdGhub2Rl LT5lc3RfdW5pcXVlX2tleXMgPSAwLjA7CiAJcGF0aG5vZGUtPmVzdF9oaXRfcmF0aW8gPSAwLjA7 CiAKLQkvKiB3ZSBzaG91bGQgbm90IGdlbmVyYXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gZW5hYmxl X21lbW9pemU9ZmFsc2UgKi8KLQlBc3NlcnQoZW5hYmxlX21lbW9pemUpOworCS8qCisJICogV2Ug c2hvdWxkIG5vdCBiZSBhc2tlZCB0byBnZW5lcmF0ZSB0aGlzIHBhdGggdHlwZSB3aGVuIG1lbW9p emF0aW9uIGlzCisJICogZGlzYWJsZWQsIHNvIHNldCBvdXIgY291bnQgb2YgZGlzYWJsZWQgbm9k ZXMgZXF1YWwgdG8gdGhlIHN1YnBhdGgncworCSAqIGNvdW50LgorCSAqCisJICogSXQgd291bGQg YmUgbmljZSB0byBhbHNvIEFzc2VydCB0aGF0IG1lbW9pemF0aW9uIGlzIGVuYWJsZWQsIGJ1dCB0 aGUKKwkgKiB2YWx1ZSBvZiBlbmFibGVfbWVtb2l6ZSBpcyBub3QgY29udHJvbGxpbmc6IHdoYXQg d2Ugd291bGQgbmVlZCB0byBjaGVjaworCSAqIGlzIHRoYXQgdGhlIEpvaW5QYXRoRXh0cmFEYXRh J3MgcGdzX21hc2sgaW5jbHVkZWQgUEdTX05FU1RMT09QX01FTU9JWkUuCisJICovCiAJcGF0aG5v ZGUtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBzdWJwYXRoLT5kaXNhYmxlZF9ub2RlczsKIAogCS8q CkBAIC0zOTY1LDEzICszOTczLDE2IEBAIHJlcGFyYW1ldGVyaXplX3BhdGgoUGxhbm5lckluZm8g KnJvb3QsIFBhdGggKnBhdGgsCiAJCQl7CiAJCQkJTWF0ZXJpYWxQYXRoICptcGF0aCA9IChNYXRl cmlhbFBhdGggKikgcGF0aDsKIAkJCQlQYXRoCSAgICpzcGF0aCA9IG1wYXRoLT5zdWJwYXRoOwor CQkJCWJvb2wJCWVuYWJsZWQ7CiAKIAkJCQlzcGF0aCA9IHJlcGFyYW1ldGVyaXplX3BhdGgocm9v dCwgc3BhdGgsCiAJCQkJCQkJCQkJCXJlcXVpcmVkX291dGVyLAogCQkJCQkJCQkJCQlsb29wX2Nv dW50KTsKKwkJCQllbmFibGVkID0KKwkJCQkJKG1wYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzIDw9 IHNwYXRoLT5kaXNhYmxlZF9ub2Rlcyk7CiAJCQkJaWYgKHNwYXRoID09IE5VTEwpCiAJCQkJCXJl dHVybiBOVUxMOwotCQkJCXJldHVybiAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWws IHNwYXRoKTsKKwkJCQlyZXR1cm4gKFBhdGggKikgY3JlYXRlX21hdGVyaWFsX3BhdGgocmVsLCBz cGF0aCwgZW5hYmxlZCk7CiAJCQl9CiAJCWNhc2UgVF9NZW1vaXplOgogCQkJewpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IGJmNDVjMzU1Yjc3Li44MmE2MGMzYmE2YSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtNTc2LDYgKzU3Niw5IEBAIGdldF9y ZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwgYm9v bCBpbmhwYXJlbnQsCiAJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXplIG9uIHRoZSBp bmZvIHdlIG9idGFpbmVkIGZyb20gdGhlCiAJICogY2F0YWxvZ3MuICBBY3Rpb25zIG1pZ2h0IGlu Y2x1ZGUgYWx0ZXJpbmcgdGhlIGFzc3VtZWQgcmVsYXRpb24gc2l6ZSwKIAkgKiByZW1vdmluZyBh biBpbmRleCwgb3IgYWRkaW5nIGEgaHlwb3RoZXRpY2FsIGluZGV4IHRvIHRoZSBpbmRleGxpc3Qu CisJICoKKwkgKiBBbiBleHRlbnNpb24gY2FuIGFsc28gbW9kaWZ5IHJlbC0+cGdzX21hc2sgaGVy ZSB0byBjb250cm9sIHBhdGgKKwkgKiBnZW5lcmF0aW9uLgogCSAqLwogCWlmIChnZXRfcmVsYXRp b25faW5mb19ob29rKQogCQkoKmdldF9yZWxhdGlvbl9pbmZvX2hvb2spIChyb290LCByZWxhdGlv bk9iamVjdElkLCBpbmhwYXJlbnQsIHJlbCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMKaW5kZXggNDA1ZjRkYWUxMDkuLjFkMmQ3MjkyZmU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcmVsbm9kZS5jCkBAIC00Nyw2ICs0Nyw5IEBAIHR5cGVkZWYgc3RydWN0IEpvaW5IYXNoRW50 cnkKIAlSZWxPcHRJbmZvICpqb2luX3JlbDsKIH0gSm9pbkhhc2hFbnRyeTsKIAorLyogSG9vayBm b3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBkdXJpbmcgam9pbnJlbCBzZXR1cCAqLworam9pbnJl bF9zZXR1cF9ob29rX3R5cGUgam9pbnJlbF9zZXR1cF9ob29rID0gTlVMTDsKKwogc3RhdGljIHZv aWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9p bnJlbCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQlTcGVjaWFsSm9p bkluZm8gKnNqaW5mbywKQEAgLTIyNSw2ICsyMjgsNyBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAlyZWwtPmNvbnNp ZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlyZWwtPmNvbnNpZGVy X3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsJLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KIAly ZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gZmFsc2U7IC8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVy ICovCisJcmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAJcmVs LT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdldCgpOwogCXJlbC0+cGF0aGxpc3Qg PSBOSUw7CiAJcmVsLT5wcGlsaXN0ID0gTklMOwpAQCAtODIyLDYgKzgyNiw3IEBAIGJ1aWxkX2pv aW5fcmVsKFBsYW5uZXJJbmZvICpyb290LAogCWpvaW5yZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAo cm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJhbV9zdGFy dHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSBmYWxzZTsKKwlqb2lu cmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAJam9pbnJlbC0+ cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJnZXQoKTsKIAlqb2lucmVsLT5wYXRobGlz dCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklMOwpAQCAtOTM0LDEwICs5MzksNiBAQCBi dWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlqb2lucmVsLT5oYXNfZWNs YXNzX2pvaW5zID0gaGFzX3JlbGV2YW50X2VjbGFzc19qb2luY2xhdXNlKHJvb3QsIGpvaW5yZWwp OwogCi0JLyogU3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlvbi4gKi8KLQlidWlsZF9qb2lu cmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBz amluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyoKIAkgKiBTZXQgZXN0aW1hdGVz IG9mIHRoZSBqb2lucmVsJ3Mgc2l6ZS4KIAkgKi8KQEAgLTk2Myw2ICs5NjQsMTggQEAgYnVpbGRf am9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJCWlzX3BhcmFsbGVsX3NhZmUocm9vdCwgKE5v ZGUgKikgam9pbnJlbC0+cmVsdGFyZ2V0LT5leHBycykpCiAJCWpvaW5yZWwtPmNvbnNpZGVyX3Bh cmFsbGVsID0gdHJ1ZTsKIAorCS8qCisJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXpl IG9uIHRoZSBuZXcgam9pbnJlbCdzIHByb3BlcnRpZXMuIEFjdGlvbnMKKwkgKiBtaWdodCBpbmNs dWRlIGFsdGVyaW5nIHRoZSBzaXplIGVzdGltYXRlIG9yIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFs bGVsLgorCSAqLworCWlmIChqb2lucmVsX3NldHVwX2hvb2spCisJCSgqam9pbnJlbF9zZXR1cF9o b29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJ CQkgICByZXN0cmljdGxpc3QpOworCisJLyogU3RvcmUgdGhlIHBhcnRpdGlvbiBpbmZvcm1hdGlv bi4gKi8KKwlidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVy X3JlbCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0cmljdGxpc3QpOworCiAJLyog QWRkIHRoZSBqb2lucmVsIHRvIHRoZSBQbGFubmVySW5mby4gKi8KIAlhZGRfam9pbl9yZWwocm9v dCwgam9pbnJlbCk7CiAKQEAgLTEwMTksNiArMTAzMiw3IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVs KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJam9pbnJlbC0+Y29u c2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCWpvaW5yZWwtPmNv bnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lucmVsLT5jb25zaWRlcl9wYXJhbGxl bCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3Nf bWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVfZW1wdHlfcGF0aHRhcmdldCgpOwog CWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwtPnBwaWxpc3QgPSBOSUw7CkBAIC0x MTAyLDEwICsxMTE2LDYgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAkgKi8KIAlqb2lucmVsLT5oYXNfZWNsYXNzX2pvaW5z ID0gcGFyZW50X2pvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnM7CiAKLQkvKiBJcyB0aGUgam9pbiBi ZXR3ZWVuIHBhcnRpdGlvbnMgaXRzZWxmIHBhcnRpdGlvbmVkPyAqLwotCWJ1aWxkX2pvaW5yZWxf cGFydGl0aW9uX2luZm8ocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5m bywKLQkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7Ci0KIAkvKiBDaGlsZCBqb2lucmVsIGlzIHBhcmFs bGVsIHNhZmUgaWYgcGFyZW50IGlzIHBhcmFsbGVsIHNhZmUuICovCiAJam9pbnJlbC0+Y29uc2lk ZXJfcGFyYWxsZWwgPSBwYXJlbnRfam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWw7CiAKQEAgLTEx MTMsNiArMTEyMywyMCBAQCBidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCXNldF9qb2lucmVsX3NpemVfZXN0aW1hdGVzKHJvb3Qs IGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLAogCQkJCQkJCSAgIHNqaW5mbywgcmVzdHJp Y3RsaXN0KTsKIAorCS8qCisJICogQWxsb3cgYSBwbHVnaW4gdG8gZWRpdG9yaWFsaXplIG9uIHRo ZSBuZXcgam9pbnJlbCdzIHByb3BlcnRpZXMuIEFjdGlvbnMKKwkgKiBtaWdodCBpbmNsdWRlIGFs dGVyaW5nIHRoZSBzaXplIGVzdGltYXRlIG9yIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFsbGVsLAor CSAqIGFsdGhvdWdoIHRoZSBsYXR0ZXIgd291bGQgYmUgYmV0dGVyIGRvbmUgaW4gdGhlIHBhcmVu dCBqb2lucmVsIHJhdGhlcgorCSAqIHRoYW4gaGVyZS4KKwkgKi8KKwlpZiAoam9pbnJlbF9zZXR1 cF9ob29rKQorCQkoKmpvaW5yZWxfc2V0dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVyX3Jl bCwgaW5uZXJfcmVsLCBzamluZm8sCisJCQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8qIElz IHRoZSBqb2luIGJldHdlZW4gcGFydGl0aW9ucyBpdHNlbGYgcGFydGl0aW9uZWQ/ICovCisJYnVp bGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVy X3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKKwogCS8qIFdlIGJ1aWxkIHRo ZSBqb2luIG9ubHkgb25jZS4gKi8KIAlBc3NlcnQoIWZpbmRfam9pbl9yZWwocm9vdCwgam9pbnJl bC0+cmVsaWRzKSk7CiAKQEAgLTE2MDIsNiArMTYyNiw3IEBAIGZldGNoX3VwcGVyX3JlbChQbGFu bmVySW5mbyAqcm9vdCwgVXBwZXJSZWxhdGlvbktpbmQga2luZCwgUmVsaWRzIHJlbGlkcykKIAl1 cHBlcnJlbCA9IG1ha2VOb2RlKFJlbE9wdEluZm8pOwogCXVwcGVycmVsLT5yZWxvcHRraW5kID0g UkVMT1BUX1VQUEVSX1JFTDsKIAl1cHBlcnJlbC0+cmVsaWRzID0gYm1zX2NvcHkocmVsaWRzKTsK Kwl1cHBlcnJlbC0+cGdzX21hc2sgPSByb290LT5nbG9iLT5kZWZhdWx0X3Bnc19tYXNrOwogCiAJ LyogY2hlYXAgc3RhcnR1cCBjb3N0IGlzIGludGVyZXN0aW5nIGlmZiBub3QgYWxsIHR1cGxlcyB0 byBiZSByZXRyaWV2ZWQgKi8KIAl1cHBlcnJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50 dXBsZV9mcmFjdGlvbiA+IDApOwpAQCAtMjExOCw3ICsyMTQzLDcgQEAgYnVpbGRfam9pbnJlbF9w YXJ0aXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwKIAlQYXJ0aXRpb25TY2hlbWUgcGFydF9z Y2hlbWU7CiAKIAkvKiBOb3RoaW5nIHRvIGRvIGlmIHBhcnRpdGlvbndpc2Ugam9pbiB0ZWNobmlx dWUgaXMgZGlzYWJsZWQuICovCi0JaWYgKCFlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luKQorCWlm ICgoam9pbnJlbC0+cGdzX21hc2sgJiBQR1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRSkgPT0gMCkK IAl7CiAJCUFzc2VydCghSVNfUEFSVElUSU9ORURfUkVMKGpvaW5yZWwpKTsKIAkJcmV0dXJuOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaAppbmRleCBlYWNhZTE2YjgyNy4uN2RiYzk3OWRhMTIgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oCkBAIC0yMiw2ICsyMiw3OSBAQAogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9k ZXMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAKKy8qCisgKiBQYXRoIGdlbmVyYXRp b24gc3RyYXRlZ2llcy4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgdG8gc3BlY2lm eSB0aGUgc2V0IG9mIHN0cmF0ZWdpZXMgdGhhdCB0aGUgcGxhbm5lcgorICogc2hvdWxkIHVzZSwg ZWl0aGVyIGZvciB0aGUgcXVlcnkgYXMgYSB3aG9sZSBvciBmb3IgYSBzcGVjaWZpYyBiYXNlcmVs IG9yCisgKiBqb2lucmVsLiBUaGUgdmFyaW91cyBwbGFubmVyLXJlbGF0ZWQgZW5hYmxlXyogR1VD cyBhcmUgdXNlZCB0byBzZXQgdGhlCisgKiBQbGFubmVyR2xvYmFsJ3MgZGVmYXVsdF9wZ3NfbWFz aywgYW5kIHRoYXQgaW4gdHVybiBpcyB1c2VkIHRvIHNldCBlYWNoCisgKiBSZWxPcHRJbmZvJ3Mg cGdzX21hc2suIEluIGJvdGggY2FzZXMsIGV4dGVuc2lvbnMgY2FuIHVzZSBob29rcyB0byBtb2Rp ZnkgdGhlCisgKiBkZWZhdWx0IHZhbHVlLiAgTm90IGV2ZXJ5IHN0cmF0ZWd5IGxpc3RlZCBoZXJl IGhhcyBhIGNvcnJlc3BvbmRpbmcgZW5hYmxlXyoKKyAqIEdVQzsgdGhvc2UgdGhhdCBkb24ndCBh cmUgYWx3YXlzIGFsbG93ZWQgdW5sZXNzIGRpc2FibGVkIGJ5IGFuIGV4dGVuc2lvbi4KKyAqIE5v dCBhbGwgc3RyYXRlZ2llcyBhcmUgcmVsZXZhbnQgZm9yIGV2ZXJ5IFJlbE9wdEluZm87IGUuZy4g UEdTX1NFUVNDQU4KKyAqIGRvZXNuJ3QgYWZmZWN0IGpvaW5yZWxzIG9uZSB3YXkgb3IgdGhlIG90 aGVyLgorICoKKyAqIEluIG1vc3QgY2FzZXMsIGRpc2FibGluZyBhIHBhdGggZ2VuZXJhdGlvbiBz dHJhdGVneSBtZXJlbHkgbWVhbnMgdGhhdCBhbnkKKyAqIHBhdGhzIGdlbmVyYXRlZCB1c2luZyB0 aGF0IHN0cmF0ZWd5IGFyZSBtYXJrZWQgYXMgZGlzYWJsZWQsIGJ1dCBpbiBzb21lCisgKiBjYXNl cywgcGF0aCBnZW5lcmF0aW9uIGlzIHNraXBwZWQgYWx0b2dldGhlci4gVGhlIGxhdHRlciBzdHJh dGVneSBpcyBvbmx5CisgKiBwZXJtaXNzaWJsZSB3aGVuIGl0IGNhbid0IHJlc3VsdCBpbiBwbGFu bmVyIGZhaWx1cmUgLS0gZm9yIGluc3RhbmNlLCB3ZQorICogY291bGRuJ3QgZG8gdGhpcyBmb3Ig c2VxdWVudGlhbCBzY2FucyBvbiBhIHBsYWluIHJlbCwgYmVjYXVzZSB0aGVyZSBtaWdodAorICog bm90IGJlIGFueSBvdGhlciBwb3NzaWJsZSBwYXRoLiBOZXZlcnRoZWxlc3MsIHRoZSBiZWhhdmlv cnMgaW4gZWFjaAorICogaW5kaXZpZHVhbCBjYXNlIGFyZSB0byBzb21lIGV4dGVudCB0aGUgcmVz dWx0IG9mIGhpc3RvcmljYWwgYWNjaWRlbnQsCisgKiBjaG9zZW4gdG8gbWF0Y2ggdGhlIHByZWV4 aXN0aW5nIGJlaGF2aW9ycyBvZiB0aGUgZW5hYmxlXyogR1VDcy4KKyAqCisgKiBJbiBhIGZldyBj YXNlcywgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIGJpdCBmb3IgdGhlIHNhbWUgc3RyYXRlZ3ksIGNv bnRyb2xsaW5nCisgKiBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUgcGxhbm5lciBiZWhhdmlvci4g V2hlbiBQR1NfQ09OU0lERVJfSU5ERVhPTkxZIGlzCisgKiB1bnNldCwgd2UgZG9uJ3QgZXZlbiBj b25zaWRlciBpbmRleC1vbmx5IHNjYW5zLCBhbmQgYW55IHN1Y2ggc2NhbnMgdGhhdAorICogd291 bGQgaGF2ZSBiZWVuIGdlbmVyYXRlZCBiZWNvbWUgaW5kZXggc2NhbnMgaW5zdGVhZC4gT24gdGhl IG90aGVyIGhhbmQsCisgKiB1bnNldHRpbmcgUEdTX0lOREVYU0NBTiBvciBQR1NfSU5ERVhPTkxZ U0NBTiBjYXVzZXMgZ2VuZXJhdGVkIHBhdGhzIG9mIHRoZQorICogY29ycmVzcG9uZGluZyB0eXBl cyB0byBiZSBtYXJrZWQgYXMgZGlzYWJsZWQuIFNpbWlsYXJseSwgdW5zZXR0aW5nCisgKiBQR1Nf Q09OU0lERVJfUEFSVElUSU9OV0lTRSBwcmV2ZW50cyBhbnkgc29ydCBvZiB0aGlua2luZyBhYm91 dCBwYXJ0aXRpb253aXNlCisgKiBqb2lucyBmb3IgdGhlIGN1cnJlbnQgcmVsLCB3aGljaCBpbmNp ZGVudGFsbHkgd2lsbCBwcmVjbHVkZSBoaWdoZXItbGV2ZWwKKyAqIGpvaW5yZWxzIGZyb20gYnVp bGRpbmcgcGFyaXRpdG9ud2lzZSBwYXRocyB1c2luZyBwYXRocyB0YWtlbiBmcm9tIHRoZQorICog Y3VycmVudCByZWwncyBjaGlsZHJlbi4gT24gdGhlIG90aGVyIGhhbmQsIHVuc2V0dGluZyBQR1Nf QVBQRU5EIG9yCisgKiBQR1NfTUVSR0VfQVBQRU5EIHdpbGwgb25seSBhcnJhbmdlIHRvIGRpc2Fi bGUgcGF0aHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHR5cGVzIGlmIHRoZXkgYXJlIGdlbmVy YXRlZCBhdCB0aGUgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgcmVsLgorICoKKyAqIEZpbmFsbHksIHVu c2V0dGluZyBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBkaXNhYmxlcyBhbGwgbm9uLXBhcnRpYWwg cGF0aHMKKyAqIGV4Y2VwdCB0aG9zZSB0aGF0IHVzZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlLiBJ biBtb3N0IG90aGVyIGNhc2VzLCBhCisgKiBwbHVnaW4gY2FuIG51ZGdlIHRoZSBwbGFubmVyIHRv d2FyZCBhIHBhcnRpY3VsYXIgc3RyYXRlZ3kgYnkgZGlzYWJsaW5nCisgKiBhbGwgb2YgdGhlIG90 aGVycywgYnV0IHRoYXQgZG9lc24ndCB3b3JrIGhlcmU6IHVuc2V0dGluZyBQR1NfU0VRU0NBTiwK KyAqIGZvciBpbnN0YW5jZSwgd291bGQgZGlzYWJsZSBib3RoIHBhcnRpYWwgYW5kIG5vbi1wYXJ0 aWFsIHNlcXVlbnRpYWwgc2NhbnMuCisgKi8KKyNkZWZpbmUgUEdTX1NFUVNDQU4JCQkJCTB4MDAw MDAwMDEKKyNkZWZpbmUgUEdTX0lOREVYU0NBTgkJCQkweDAwMDAwMDAyCisjZGVmaW5lIFBHU19J TkRFWE9OTFlTQ0FOCQkJMHgwMDAwMDAwNAorI2RlZmluZSBQR1NfQklUTUFQU0NBTgkJCQkweDAw MDAwMDA4CisjZGVmaW5lIFBHU19USURTQ0FOCQkJCQkweDAwMDAwMDEwCisjZGVmaW5lIFBHU19G T1JFSUdOSk9JTgkJCQkweDAwMDAwMDIwCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fUExBSU4JCQkw eDAwMDAwMDQwCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUJMHgwMDAwMDA4MAor I2RlZmluZSBQR1NfTkVTVExPT1BfUExBSU4JCQkweDAwMDAwMTAwCisjZGVmaW5lIFBHU19ORVNU TE9PUF9NQVRFUklBTElaRQkweDAwMDAwMjAwCisjZGVmaW5lIFBHU19ORVNUTE9PUF9NRU1PSVpF CQkweDAwMDAwNDAwCisjZGVmaW5lIFBHU19IQVNISk9JTgkJCQkweDAwMDAwODAwCisjZGVmaW5l IFBHU19BUFBFTkQJCQkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgUEdTX01FUkdFX0FQUEVORAkJCTB4 MDAwMDIwMDAKKyNkZWZpbmUgUEdTX0dBVEhFUgkJCQkJMHgwMDAwNDAwMAorI2RlZmluZSBQR1Nf R0FUSEVSX01FUkdFCQkJMHgwMDAwODAwMAorI2RlZmluZSBQR1NfQ09OU0lERVJfSU5ERVhPTkxZ CQkweDAwMDEwMDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFCTB4MDAwMjAw MDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwJCTB4MDAwNDAwMDAKKworLyoKKyAq IENvbnZlbmllbmNlIG1hY3JvcyBmb3IgdXNlZnVsIGNvbWJpbmF0aW9uIG9mIHRoZSBiaXRzIGRl ZmluZWQgYWJvdmUuCisgKi8KKyNkZWZpbmUgUEdTX1NDQU5fQU5ZCQlcCisJKFBHU19TRVFTQ0FO IHwgUEdTX0lOREVYU0NBTiB8IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0JJVE1BUFNDQU4gfCBc CisJIFBHU19USURTQ0FOKQorI2RlZmluZSBQR1NfTUVSR0VKT0lOX0FOWQlcCisJKFBHU19NRVJH RUpPSU5fUExBSU4gfCBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKQorI2RlZmluZSBQR1NfTkVT VExPT1BfQU5ZCVwKKwkoUEdTX05FU1RMT09QX1BMQUlOIHwgUEdTX05FU1RMT09QX01BVEVSSUFM SVpFIHwgUEdTX05FU1RMT09QX01FTU9JWkUpCisjZGVmaW5lIFBHU19KT0lOX0FOWQkJXAorCShQ R1NfRk9SRUlHTkpPSU4gfCBQR1NfTUVSR0VKT0lOX0FOWSB8IFBHU19ORVNUTE9PUF9BTlkgfCBQ R1NfSEFTSEpPSU4pCiAKIC8qCiAgKiBSZWxpZHMKQEAgLTE4Niw2ICsyNTksOSBAQCB0eXBlZGVm IHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogd29yc3QgUFJPUEFSQUxMRUwgaGF6YXJkIGxldmVs ICovCiAJY2hhcgkJbWF4UGFyYWxsZWxIYXphcmQ7CiAKKwkvKiBtYXNrIG9mIGFsbG93ZWQgcGF0 aCBnZW5lcmF0aW9uIHN0cmF0ZWdpZXMgKi8KKwl1aW50NjQJCWRlZmF1bHRfcGdzX21hc2s7CisK IAkvKiBwYXJ0aXRpb24gZGVzY3JpcHRvcnMgKi8KIAlQYXJ0aXRpb25EaXJlY3RvcnkgcGFydGl0 aW9uX2RpcmVjdG9yeSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCkBAIC05Mzks NyArMTAxNSw3IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlDYXJkaW5hbGl0eSByb3dz OwogCiAJLyoKLQkgKiBwZXItcmVsYXRpb24gcGxhbm5lciBjb250cm9sIGZsYWdzCisJICogcGVy LXJlbGF0aW9uIHBsYW5uZXIgY29udHJvbAogCSAqLwogCS8qIGtlZXAgY2hlYXAtc3RhcnR1cC1j b3N0IHBhdGhzPyAqLwogCWJvb2wJCWNvbnNpZGVyX3N0YXJ0dXA7CkBAIC05NDcsNiArMTAyMyw4 IEBAIHR5cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlib29sCQljb25zaWRlcl9wYXJhbV9zdGFy dHVwOwogCS8qIGNvbnNpZGVyIHBhcmFsbGVsIHBhdGhzPyAqLwogCWJvb2wJCWNvbnNpZGVyX3Bh cmFsbGVsOworCS8qIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVneSBtYXNrICovCisJdWludDY0CQlw Z3NfbWFzazsKIAogCS8qCiAJICogZGVmYXVsdCByZXN1bHQgdGFyZ2V0bGlzdCBmb3IgUGF0aHMg c2Nhbm5pbmcgdGhpcyByZWxhdGlvbjsgbGlzdCBvZgpAQCAtMzUwNiw2ICszNTg0LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgU2VtaUFudGlKb2luRmFjdG9ycwogICogc2ppbmZvIGlzIGV4dHJhIGluZm8g YWJvdXQgc3BlY2lhbCBqb2lucyBmb3Igc2VsZWN0aXZpdHkgZXN0aW1hdGlvbgogICogc2VtaWZh Y3RvcnMgaXMgYXMgc2hvd24gYWJvdmUgKG9ubHkgdmFsaWQgZm9yIFNFTUkvQU5USS9pbm5lcl91 bmlxdWUgam9pbnMpCiAgKiBwYXJhbV9zb3VyY2VfcmVscyBhcmUgT0sgdGFyZ2V0cyBmb3IgcGFy YW1ldGVyaXphdGlvbiBvZiByZXN1bHQgcGF0aHMKKyAqIHBnc19tYXNrIGlzIGEgYml0bWFzayBv ZiBQR1NfKiBjb25zdGFudHMgdG8gbGltaXQgdGhlIGpvaW4gc3RyYXRlZ3kKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgSm9pblBhdGhFeHRyYURhdGEKIHsKQEAgLTM1MTUsNiArMzU5NCw3IEBAIHR5cGVk ZWYgc3RydWN0IEpvaW5QYXRoRXh0cmFEYXRhCiAJU3BlY2lhbEpvaW5JbmZvICpzamluZm87CiAJ U2VtaUFudGlKb2luRmFjdG9ycyBzZW1pZmFjdG9yczsKIAlSZWxpZHMJCXBhcmFtX3NvdXJjZV9y ZWxzOworCXVpbnQ2NAkJcGdzX21hc2s7CiB9IEpvaW5QYXRoRXh0cmFEYXRhOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4ZjMuLjJkODA0NjJiZWNlIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9j b3N0LmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBleHRlcm4gdm9pZCBjb3N0X21lcmdlX2FwcGVuZChQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgIENvc3QgaW5wdXRfc3RhcnR1 cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCiAJCQkJCQkJICBkb3VibGUgdHVwbGVzKTsK IGV4dGVybiB2b2lkIGNvc3RfbWF0ZXJpYWwoUGF0aCAqcGF0aCwKLQkJCQkJCSAgaW50IGlucHV0 X2Rpc2FibGVkX25vZGVzLAorCQkJCQkJICBib29sIGVuYWJsZWQsIGludCBpbnB1dF9kaXNhYmxl ZF9ub2RlcywKIAkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVwX2Nvc3QsIENvc3QgaW5wdXRfdG90 YWxfY29zdCwKIAkJCQkJCSAgZG91YmxlIHR1cGxlcywgaW50IHdpZHRoKTsKIGV4dGVybiB2b2lk IGNvc3RfYWdnKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LApAQCAtMTQ4LDcgKzE0OCw3 IEBAIGV4dGVybiB2b2lkIGNvc3RfZ3JvdXAoUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCSAgIGRvdWJsZSBpbnB1dF90dXBsZXMpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbF9jb3N0 X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIEpvaW5Db3N0V29ya3NwYWNl ICp3b3Jrc3BhY2UsCi0JCQkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCSAgSm9p blR5cGUgam9pbnR5cGUsIHVpbnQ2NCBlbmFibGVfbWFzaywKIAkJCQkJCQkJICBQYXRoICpvdXRl cl9wYXRoLCBQYXRoICppbm5lcl9wYXRoLAogCQkJCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpl eHRyYSk7CiBleHRlcm4gdm9pZCBmaW5hbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290 LCBOZXN0UGF0aCAqcGF0aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo bm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKaW5kZXggZGJmNDcwMmFj YzkuLjEyM2I3OGNiZjExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5v ZGUuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaApAQCAtMTcsNiArMTcs MTQgQEAKICNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9wYXRo bm9kZXMuaCIKIAorLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBkdXJpbmcgam9p bnJlbCBzZXR1cCAqLwordHlwZWRlZiB2b2lkICgqam9pbnJlbF9zZXR1cF9ob29rX3R5cGUpIChQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJ CQkJCQkgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAorCQkJCQkJCQkJCSBSZWxPcHRJbmZvICppbm5l cl9yZWwsCisJCQkJCQkJCQkJIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkJCQkJCSBM aXN0ICpyZXN0cmljdGxpc3QpOworZXh0ZXJuIFBHRExMSU1QT1JUIGpvaW5yZWxfc2V0dXBfaG9v a190eXBlIGpvaW5yZWxfc2V0dXBfaG9vazsKIAogLyoKICAqIHByb3RvdHlwZXMgZm9yIHBhdGhu b2RlLmMKQEAgLTg1LDcgKzkzLDggQEAgZXh0ZXJuIEdyb3VwUmVzdWx0UGF0aCAqY3JlYXRlX2dy b3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJIFJlbE9wdElu Zm8gKnJlbCwKIAkJCQkJCQkJCQkJCSBQYXRoVGFyZ2V0ICp0YXJnZXQsCiAJCQkJCQkJCQkJCQkg TGlzdCAqaGF2aW5ncXVhbCk7Ci1leHRlcm4gTWF0ZXJpYWxQYXRoICpjcmVhdGVfbWF0ZXJpYWxf cGF0aChSZWxPcHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgpOworZXh0ZXJuIE1hdGVyaWFsUGF0 aCAqY3JlYXRlX21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLAor CQkJCQkJCQkJCSAgYm9vbCBlbmFibGVkKTsKIGV4dGVybiBNZW1vaXplUGF0aCAqY3JlYXRlX21l bW9pemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWws CiAJCQkJCQkJCQkJUGF0aCAqc3VicGF0aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggZjZhNjJk ZjBiNDMuLjYxYzE2MDdmODcyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtMjgsNyArMjgsMTQg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplOwog ZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwogZXh0 ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmc7CiAKLS8qIEhv b2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNvbnRyb2wgaW4gc2V0X3JlbF9wYXRobGlzdCgpICovCisv KiBIb29rcyBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBzZXRfcmVsX3BhdGhsaXN0KCkg Ki8KK3R5cGVkZWYgdm9pZCAoKmpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUpIChQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCSAg IFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVs LAorCQkJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJCQkJCSAgIEpvaW5QYXRo RXh0cmFEYXRhICpleHRyYSk7CitleHRlcm4gUEdETExJTVBPUlQgam9pbl9wYXRoX3NldHVwX2hv b2tfdHlwZSBqb2luX3BhdGhfc2V0dXBfaG9vazsKIHR5cGVkZWYgdm9pZCAoKnNldF9yZWxfcGF0 aGxpc3RfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCVJlbE9wdElu Zm8gKnJlbCwKIAkJCQkJCQkJCQkJSW5kZXggcnRpLAotLSAKMi41MS4wCgo= --0000000000001b5bb506460325ec Content-Type: application/octet-stream; name="v7-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v7-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mj7kxtnw4 RnJvbSAxYTA2NGM0YmZmMTQ0ZDczOTdhNDM4ZDlkNGMxM2U0NzE3ZDRhYWUyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFR1ZSwgNCBOb3YgMjAyNSAxNDo0NTozMSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjcgNS81 XSBXSVA6IEFkZCBwZ19wbGFuX2FkdmljZSBjb250cmliIG1vZHVsZS4KClByb3ZpZGUgYSBmYWNp bGl0eSB0aGF0ICgxKSBjYW4gYmUgdXNlZCB0byBzdGFiaWxpemUgY2VydGFpbiBwbGFuIGNob2lj ZXMKc28gdGhhdCB0aGUgcGxhbm5lciBjYW5ub3QgcmV2ZXJzZSBjb3Vyc2Ugd2l0aG91dCBhdXRo b3JpemF0aW9uIGFuZAooMikgY2FuIGJlIHVzZWQgYnkga25vd2xlZGdlYWJsZSB1c2VycyB0byBp bnNpc3Qgb24gcGxhbiBjaG9pY2VzIGNvbnRyYXJ5CnRvIHdoYXQgdGhlIHBsYW5uZXIgYmVsaWV2 ZXMgYmVzdC4gSW4gYm90aCBjYXNlcywgdGVycmlibGUgb3V0Y29tZXMgYXJlCnBvc3NpYmxlOiB1 c2VycyBzaG91bGQgdGhpbmsgdHdpY2UgYW5kIHBlcmhhcHMgdGhyZWUgdGltZXMgYmVmb3JlCmNv bnN0cmFpbmluZyB0aGUgcGxhbm5lcidzIGFiaWxpdHkgdG8gZG8gYXMgaXQgdGhpbmtzIGJlc3Q7 IG5ldmVydGhlbGVzcywKdGhlcmUgYXJlIHByb2JsZW1zIHRoYXQgYXJlIG11Y2ggbW9yZSBlYXNp bHkgc29sdmVkIHdpdGggdGhlc2UgZmFjaWxpdGllcwp0aGFuIHdpdGhvdXQgdGhlbS4KCldlIHRh a2UgdGhlIGFwcHJvYWNoIG9mIGFuYWx5emluZyBhIGZpbmlzaGVkIHBsYW4gdG8gcHJvZHVjZSB0 ZXh0dWFsCm91dHB1dCwgd2hpY2ggd2UgY2FsbCAicGxhbiBhZHZpY2UiLCB0aGF0IGRlc2NyaWJl cyBrZXkgZGVjaXNpb25zIG1hZGUKZHVyaW5nIHBsYW47IGlmIHRoYXQgcGxhbiBhZHZpY2UgaXMg cHJvdmlkZWQgZHVyaW5nIGZ1dHVyZSBwbGFubmluZwpjeWNsZXMsIGl0IHdpbGwgZm9yY2UgdGhv c2Uga2V5IGRlY2lzaW9ucyB0byBiZSBtYWRlIGluIHRoZSBzYW1lIHdheS4KTm90IGFsbCBwbGFu bmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7IGZvciBleGFtcGxl LApkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24gYXJlIGN1cnJlbnRs eSBvdXQgb2Ygc2NvcGUsCmFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQbGFuIGFkdmljZSBj YW4gYWxzbyBiZSBlZGl0ZWQgYnkgdGhlIHVzZXIsCm9yIGV2ZW4gd3JpdHRlbiBmcm9tIHNjcmF0 Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQgcG9zc2libGUgdG8KZ2VuZXJhdGUgb3V0Y29t ZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4gUGFydGlhbAphZHZp Y2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91dGNvbWVzIGJ1dCBu b3Qgb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2VkIG9ubHkgb24gc3Bl Y2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBzZXF1ZW50aWFsIHNj YW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3RpbWF0ZXMgdGhhdCBt aWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEKcG9zc2libHktaW5j b3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBiZSB1c2VmdWwgdG8K dXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQgYWZmZWN0cyBzZWxl Y3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5nLCB0aGF0IGlzIG91 dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxzLCBzZWUgY29udHJp Yi9wZ19wbGFuX2FkdmljZS9SRUFETUUuCgpOT1RFOiBUaGlzIGNvZGUgaXMganVzdCBhIHByb29m IG9mIGNvbmNlcHQuIEEgYnVuY2ggb2YgdGhpbmdzIGRvbid0CndvcmsgYW5kIGEgbG90IG9mIHRo ZSBjb2RlIG5lZWRzIGNsZWFudXAuIEl0IGhhcyBubyBTR01MIGRvY3VtZW50YXRpb24KYW5kIG5v dCBlbm91Z2ggdGVzdCBjYXNlcywgYW5kIHNvbWUgb2YgdGhlIGV4aXN0aW5nIHRlc3QgY2FzZXMg ZG9uJ3QKZG8gYXMgd2Ugd291bGQgaG9wZS4gS25vd24gcHJvYmxlbXMgYXJlIGNhbGxlZCBvdXQg YnkgWFhYLgotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAg fCAgICAzICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgNTAgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwg IDI3MSArKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8 ICAzNDQgKysrKwogLi4uL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0ICAg IHwgIDI5MiArKysKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0ZWd5Lm91 dCB8ICAyOTcgKysrCiAuLi4vZXhwZWN0ZWQvbG9jYWxfY29sbGVjdG9yLm91dCAgICAgICAgICAg ICAgfCAgIDY1ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91 dCB8ICAyNDMgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0ICAg ICAgfCAgNzU3ICsrKysrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4 Lm91dCAgICB8ICAxNjIgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgICAg ICAgICAgICB8ICAgNzAgKwogLi4uL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAu c3FsICAgIHwgICA0MiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMg ICAgICAgfCAgNDU1ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmNvbnRyb2wgfCAgICA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2Uu aCAgICAgICB8ICAgMzkgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAg ICAgICAgIHwgIDM5MiArKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggICAg ICAgICAgICAgfCAgMjA0ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9y LmMgICAgICAgfCAgNjM3ICsrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxl Y3Rvci5oICAgICAgIHwgICAxOCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRp Zmllci5jICAgICAgfCAgNDc2ICsrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5oICAgICAgfCAgIDUyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2lu LmMgICAgICAgICAgICB8ICA2MjkgKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf am9pbi5oICAgICAgICAgICAgfCAgMTA1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9v dXRwdXQuYyAgICAgICAgICB8ICA2MjggKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfb3V0cHV0LmggICAgICAgICAgfCAgIDIyICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wYXJzZXIueSAgICAgICAgICB8ICAzMzcgKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3BsYW5uZXIuYyAgICAgICAgIHwgMTc2NCArKysrKysrKysrKysrKysrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCAgICAgICAgIHwgICAxNyArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jICAgICAgICAgICAgfCAgMzAzICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaCAgICAgICAgICAgIHwgICA4NSArCiBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sICAgICAgICAgfCAgMzAyICsrKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgICAgICAgICAgIHwgIDQ5MiArKysrKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmggICAgICAgICAgIHwgIDExMyArKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5jICAgICAgICAgIHwgIDk2NSArKysrKysrKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCAgICAgICAgICB8ICAxNDEgKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwgICAgICAgICB8ICAgNzkgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwgICAgIHwgICA5NiArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbCAgfCAgIDc2ICsKIC4u Li9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCAgICB8ICAgNDEgKwogY29u dHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0aW9ud2lzZS5zcWwgIHwgICA3OCArCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zY2FuLnNxbCAgICAgICAgICAgfCAgMTk1ICsrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsICAgICAgICAgfCAgIDU3ICsKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbCAgICAgICB8ICAxNDcgKysKIHNyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMzggKwogNDYgZmls ZXMgY2hhbmdlZCwgMTE1ODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvLmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3Bs YW5fYWR2aWNlL1JFQURNRQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvZ2F0aGVyLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iu b3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9w YXJ0aXRpb253aXNlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvZXhwZWN0ZWQvc2Nhbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5f YWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3Bn X3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwK IGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0 ZWd5LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xv Y2FsX2NvbGxlY3Rvci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL3NxbC9wYXJ0aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvdC8wMDFfcmVncmVzcy5wbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZp bGUgYi9jb250cmliL01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAxMDA2 NDQKLS0tIGEvY29udHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zNCw2 ICszNCw3IEBAIFNVQkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2ljYWxp bnNwZWN0IFwKIAkJcGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3By ZXdhcm0JXAogCQlwZ19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAtLWdp dCBhL2NvbnRyaWIvbWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGVkMzBl ZTdkNjM5Li5jYjcxOGRiZGFjMCAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysg Yi9jb250cmliL21lc29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlwdG8n KQogc3ViZGlyKCdwZ19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcp CiBzdWJkaXIoJ3BnX292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQogc3Vi ZGlyKCdwZ19wcmV3YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0YXRf c3RhdGVtZW50cycpCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25v cmUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFfcGFy c2VyLmgKKy9wZ3BhX3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDRjNTU5YWVkOAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAs MCArMSw1MCBAQAorIyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9i aWcgPSBwZ19wbGFuX2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxhbl9h ZHZpY2UubyBcCisJcGdwYV9hc3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9pZGVu dGlmaWVyLm8gXAorCXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNl ci5vIFwKKwlwZ3BhX3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5v IFwKKwlwZ3BhX3Ryb3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdfcGxh bl9hZHZpY2UKK0RBVEEgPSBwZ19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJw Z19wbGFuX2FkdmljZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitS RUdSRVNTID0gZ2F0aGVyIGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHNj YW4KK1RBUF9URVNUUyA9IDEKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFy c2VyLmMgcGdwYV9zY2FubmVyLmMKKworIyByZXF1aXJlZCBmb3IgMDAxX3JlZ3Jlc3MucGwKK1JF R1JFU1NfU0hMSUI9JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3Mk KERMU1VGRklYKQorZXhwb3J0IFJFR1JFU1NfU0hMSUIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NP TkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitp bmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3Rv cF9idWlsZGRpciA9IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUu Z2xvYmFsCitpbmNsdWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5tawor ZW5kaWYKKworIyBTZWUgbm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0 IHRoZSBmb2xsb3dpbmcgdHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJ dG91Y2ggJEAKKworcGdwYV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRo ZXNlIGRlcGVuZGVuY2llcyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZv IGJ1aWx0OgorcGdwYV9wYXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Nk M2FiZGRiOTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURN RQpAQCAtMCwwICsxLDI3MSBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxh biBBZHZpY2UKKz09PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxh bmd1YWdlIGZvciAicGxhbiBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0 YWluIGtleSBwbGFubmVyIGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBs YW4KK3N0YWJpbGl0eSAobXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtl IHRvIGtlZXAgZ2V0dGluZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0 byBleHBlcmltZW50IHdpdGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkg dGhlIG9wdGltaXplci4gTm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBw b3NzaWJsZSBwbGFubmVyIGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9m IHBsYW5zCit0aGF0IHRoZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFu IGNvc3QuIChUaGVyZSBpcyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBl eGFjdGx5IHRoaXMgbm9uLWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0 aW9uIGVudGlyZWx5IGZvciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtu b3cgaXQgY2Fubm90IHdpbiBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2Vk IHJlamVjdGlvbgorZXZlbiB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dl bmVyYWxseSwgcGxhbiBhZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQg YWR2aWNlIGl0ZW1zLAorZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBs aXN0IG9mIGFkdmljZSB0YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hf Sk9JTihiYXJAc3MpIiBjb250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9m IHdoaWNoIGFwcGxpZXMgdGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBv Zgord2hpY2ggYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBz aW1wbGUgZXhhbXBsZSwgZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247 IHNlZSAiUmVsYXRpb24gSWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNv IGJlIGFwcGxpZWQgdG8gZ3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9K T0lOKGJheiAoYmxldGNoIHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUg c2luZ2xlCityZWxhdGlvbiBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRl bSBsaXN0IGNvbnRhaW5pbmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRo aXMgbW9kdWxlIGtub3dzIGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4K K2FscmVhZHktZXhpc3RpbmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5n IGZ1dHVyZSBwbGFubmluZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQg dG8gYmUgInJvdW5kLXRyaXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBw bGFuIGFuZCB0aGVuIGZlZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3ljbGUs IGVhY2ggcGllY2Ugb2YgYWR2aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRvIHRo ZSBleGFjdGx5IHRoZQorc2FtZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBn ZW5lcmF0ZWQgd2l0aG91dCBhbWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBz dWNjZXNmdWxseSBlbmZvcmNlIHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xlZCB0 byBpdCBiZWluZyBnZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhlcmUg aXMgbm8KK2ludGVudGlvbiB0aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJlc2Vu Y2Ugb2YgaW50ZXJ2ZW5pbmcgRERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0aWVz IG9mIGEgZnVuY3Rpb24gc28gdGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5lZCwg b3IgaWYgeW91IGRyb3AgYW4gaW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUgYWR2 aWNlCitpc24ndCBnb2luZyB0byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisKK1Ro aXMgbW9kdWxlIGFpbXMgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92aWRl ZCBhZHZpY2Ugd2l0aG91dAorcmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBiZSBn b29kIGFkdmljZSBvciBiYWQgYWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZp Y2UsIHdoZXRoZXIgZGVyaXZlZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3Ig bWFudWFsbHkgd3JpdHRlbiwgdGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlz IGFzIHVzZXIgZXJyb3IsCitub3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxp a2VseSB0aGF0IGFwcGx5aW5nIGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVs eSByZXF1aXJlZCB0byBhdm9pZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBz dHJhdGVneSB0aGFuIGFwcGx5aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFy ZSBmcmVlCit0byBleHBlcmltZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5r IGJlc3QuCisKK1JlbGF0aW9uIElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitV bmlxdWVseSBpZGVudGlmeWluZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFp biBwaWVjZSBvZgorYWR2aWNlIGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIg YmFzaWMgYXBwcm9hY2ggaXMgdG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcg cG9pbnQsIGFuZCB0aGVuIGRpc2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQg c2FtZSByZWxhdGlvbiBhbGlhcyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0IGNh biBhcHBlYXIgaW4gbW9yZSB0aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVhciBt b3JlIHRoYW4gb25jZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lOIGJh cikgeCBKT0lOIGZvby4KKworMy4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKworQW55 IGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHkuICBU aGVyZWZvcmUsIG91cgorZ2VuZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBp czoKKworYWxpYXNfbmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRp dGlvbl9uYW1lQHBsYW5fbmFtZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlh c19uYW1lIGFyZSBvcHRpb25hbCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hl biBhIGNvbXBvbmVudCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVz dCBhbHNvIGJlIG9taXR0ZWQuIE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmlu ZyBjaGlsZHJlbiBvZgorcGFydGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVkIG9j Y3VycmVuY2UgbnVtYmVyIGlzIDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4gVGhl IHBhcnRpdGlvbiBzY2hlbWEgYW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25seSBm b3IgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB0 aGUKK3BhcnRpdGlvbl9zY2hlbWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJlIGlz IGEgcGFydGl0aW9uX25hbWUsCitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlvbiB0 aGUgbmFtZSBhbmQgb21pdCB0aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVkIGZv ciB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09PT0K KworRm9yIG1hbnkgdHlwZXMgb2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBwb3Nz aWJsZTsgZm9yIGluc3RhbmNlLAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2luZyBh IHN1YnF1ZXJ5IHNjYW4uIFdoaWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0cmVm cyBwcm9jZXNzaW5nLCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBvbmUK K2Jhc2ljIGFwcHJvYWNoIGV4aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9zdGx5 IHRvIHJlbGF0aW9ucywgd2hpY2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMuCisK K1dlIHRlbmQgdG8gdGhpbmsgb2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxhdGlv biwgYW5kIHRoYXQncworbm9ybWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8g YmUuIEZvciBpbnN0YW5jZSwgaWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9sZSB0 aGluZyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gsIGlu IGVmZmVjdCwgaXMgYSBkZWdlbmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhlIGNv bGxhcHNlZAorcG9ydGlvbiBvZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9zc2li bGUgdG8gaW5qZWN0IGEgY3VzdG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBsYWNl cyBhbiBlbnRpcmUgam9pbi4gSWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNhc2Vz LCBpdCB3b3VsZCB0YXJnZXQgc2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3VuZGVk CitieSBjdXJseSBicmFuY2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikp IHdvdWxkIG1lYW4gdGhhdCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBm b3IgZm9vIGFzIGEgc2luZ2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2Yg YmFyIGFuZCBiYXogYXMgYSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAor cHJlc2VudC4KKworRm9yIGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxh dGlvbiBiZWluZyBzY2FubmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBt dXN0IGJlIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHgg YmFyIGJhcl9iX2lkeCkgaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4 LW9ubHkKK3NjYW4pIHNob3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZv bywgYW5kIHRoYXQgYW4gaW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdo ZW4gc2Nhbm5pbmcgYmFyLgorCitCaXRtYXAgaGVhcCBzY2FucyBhbGxvdyBmb3IgYSBtb3JlIGNv bXBsaWNhdGVkIGluZGV4IHNwZWNpZmljYXRpb24uIEZvcgorZXhhbXBsZSwgQklUTUFQX0hFQVBf U0NBTihmb28gJiYoZm9vX2FfaWR4IHx8KGZvb19iX2lkeCBmb29fY19pZHgpKSkgc2F5cwordGhh dCBmb28gc2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcgYSBCaXRtYXBIZWFwU2NhbiBvdmVyIGEgQml0 bWFwQW5kIGJldHdlZW4KK2Zvb19hX2lkeCBhbmQgdGhlIHJlc3VsdCBvZiBhIEJpdG1hcE9yIGJl dHdlZW4gZm9vX2JfaWR4IGFuZCBmb29fY19pZHguCisKK1hYWDogQ3VycmVudGx5LCBCSVRNQVBf SEVBUF9TQ0FOIGRvZXMgbm90IGVuZm9yY2UgdGhlIGluZGV4IHNwZWNpZmljYXRpb24sCitiZWNh dXNlIHRoZSBhdmFpbGFibGUgaG9va3MgYXJlIGluc3VmZmljaWVudCB0byBkbyBzby4gSXQncyBw b3NzaWJsZSB0aGF0Cit0aGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGV4Y2x1ZGUgdGhlIGluZGV4 IHNwZWNpZmljYXRpb24gYWx0b2dldGhlciBhbmQKK3NpbXBseSBpbnNpc3QgdGhhdCBzb21lIHNv cnQgb2YgYml0bWFwIGhlYXAgc2NhbiBpcyB1c2VkOyBhbHRlcm5hdGl2ZWx5LAord2UgbmVlZCBi ZXR0ZXIgaG9va3MuCisKK0pvaW4gT3JkZXIgQWR2aWNlCis9PT09PT09PT09PT09PT09PQorCitU aGUgSk9JTl9PUkRFUiB0YWcgc3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBzZXZlcmFsIHRh YmxlcyB0aGF0IGFyZQorcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0gc2hvdWxkIGJlIGpv aW5lZC4gRWFjaCBzdWJxdWVyeSAoZXhjZXB0IGZvcgordGhvc2UgdGhhdCBhcmUgaW5saW5lZCkg aXMgYSBzZXBhcmF0ZSBqb2luIHByb2JsZW0uIFdpdGhpbiBhIHN1YnF1ZXJ5LAorcGFydGl0aW9u d2lzZSBqb2lucyBjYW4gY3JlYXRlIGFkZGl0aW9uYWwsIHNlcGFyYXRlIGpvaW4gcHJvYmxlbXMu IEhlbmNlLAorcXVlcmllcyBpbnZvbHZpbmcgcGFydGl0aW9ud2lzZSBqb2lucyBtYXkgdXNlIEpP SU5fT1JERVIoKSBtYW55IHRpbWVzLgorCitXZSB0YWtlIHRoZSBjYW5vbmljYWwgam9pbiBzdHJ1 Y3R1cmUgdG8gYmUgYW4gb3V0ZXItZGVlcCB0cmVlLCBzbworSk9JTl9PUkRFUih0MSB0MiB0Mykg c2F5cyB0aGF0IHQxIGlzIHRoZSBkcml2aW5nIHRhYmxlIGFuZCBzaG91bGQgYmUgam9pbmVkCitm aXJzdCB0byB0MiBhbmQgdGhlbiB0byB0My4gSWYgdGhlIGpvaW4gcHJvYmxlbSBpbnZvbHZlcyBh ZGRpdGlvbmFsIHRhYmxlcywKK3RoZXkgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIgYWZ0ZXIg dGhlIGpvaW4gYmV0d2VlbiB0MSwgdDIsIGFuZCB0MyBoYXMKK2JlZW4gY29uc3RydWN0dXJlZC4g R2VuZXJhdGVkIGpvaW4gYWR2aWNlIGFsd2F5cyBtZW50aW9ucyBhbGwgdGFibGVzCitpbiB0aGUg am9pbiBwcm9ibGVtLCBidXQgbWFudWFsbHkgd3JpdHRlbiBqb2luIGFkdmljZSBuZWVkIG5vdCBk byBzby4KKworRm9yIHRyZWVzIHdoaWNoIGFyZSBub3Qgb3V0ZXItZGVlcCwgcGFyZW50aGVzZXMg Y2FuIGJlIHVzZWQuIEZvciBleGFtcGxlLAorSk9JTl9PUkRFUih0MSAodDIgdDMpKSBzYXlzIHRo YXQgdGhlIHRvcC1sZXZlbCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZQorb3V0ZXIgc2lkZSBh bmQgYSBqb2luIGJldHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLiBUaGF0IGpvaW4g c2hvdWxkCitiZSBjb25zdHJ1Y3RlZCBzbyB0aGF0IHQyIGlzIG9uIHRoZSBvdXRlciBzaWRlIGFu ZCB0MyBpcyBvbiB0aGUgaW5uZXIgc2lkZS4KKworSW4gc29tZSBjYXNlcywgaXQncyBub3QgcG9z c2libGUgdG8gZnVsbHkgc3BlY2lmeSB0aGUgam9pbiBvcmRlciBpbiB0aGlzIHdheS4KK0ZvciBl eGFtcGxlLCBpZiB0MiBhbmQgdDMgYXJlIGJlaW5nIHNjYW5uZWQgYnkgYSBzaW5nbGUgY3VzdG9t IHNjYW4gb3IgZm9yZWlnbgorc2Nhbiwgb3IgaWYgYSBwYXJ0aXRpb253aXNlIGpvaW4gaXMgYmVp bmcgcGVyZm9ybWVkIGJldHdlZW4gdGhvc2UgdGFibGVzLCB0aGVuCitpdCdzIGltcG9zc2libGUg dG8gc2F5IHRoYXQgdDIgaXMgdGhlIG91dGVyIHRhYmxlIGFuZCB0MyBpcyB0aGUgaW5uZXIgdGFi bGUsCitvciB0aGUgb3RoZXIgd2F5IGFyb3VuZDsgaXQncyBqdXN0IHVuZGVmaW5lZC4gSW4gc3Vj aCBjYXNlcywgd2UgZ2VuZXJhdGUKK2pvaW4gYWR2aWNlIHRoYXQgdXNlcyBjdXJseSBicmFjZXMs IGludGVuZGluZyB0byBpbmRpY2F0ZSBhIGxhY2sgb2Ygb3JkZXJpbmc6CitKT0lOX09SREVSKHQx IHt0MiB0M30pIHNheXMgdGhhdCB0aGUgdXBwZXJtb3N0IGpvaW4gc2hvdWxkIGhhdmUgdDEgb24g dGhlIG91dGVyCitzaWRlIGFuZCBzb21lIGtpbmQgb2Ygam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBv biB0aGUgaW5uZXIgc2lkZSwgYnV0IHdpdGhvdXQKK3NheWluZyBob3cgdGhhdCBqb2luIG11c3Qg YmUgcGVyZm9ybWVkIG9yIGFueXRoaW5nIGFib3V0IHdoaWNoIHJlbGF0aW9uIHNob3VsZAorYXBw ZWFyIG9uIHdoaWNoIHNpZGUgb2YgdGhlIGpvaW4sIG9yIGV2ZW4gd2hldGhlciB0aGlzIGtpbmQg b2Ygam9pbiBoYXMgc2lkZXMuCisKK0pvaW4gU3RyYXRlZ3kgQWR2aWNlCis9PT09PT09PT09PT09 PT09PT09PQorCitUYWdzIHN1Y2ggYXMgTkVTVEVEX0xPT1BfUExBSU4gc3BlY2lmeSB0aGUgbWV0 aG9kIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8KK3BlcmZvcm0gYSBjZXJ0YWluIGpvaW4uIE1vcmUg c3BlY2lmaWNhbGx5LCBORVNURURfTE9PUF9QTEFJTih4ICh5IHopKSBzYXlzCit0aGF0IHRoZSBw bGFuIHNob3VsZCBwdXQgdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgIngiIG9uIHRo ZSBpbm5lcgorc2lkZSBvZiBhIHBsYWluIG5lc3RlZCBsb29wIChvbmUgd2l0aG91dCBtYXRlcmlh bGl6YXRpb24gb3IgbWVtb2l6YXRpb24pCithbmQgdGhhdCBpdCBzaG91bGQgYWxzbyBwdXQgYSBq b2luIGJldHdlZW4gdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMKKyJ5IiBhbmQgdGhl IHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgInoiIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEg bmVzdGVkCitsb29wLiBIZW5jZSwgZm9yIGFuIE4tdGFibGUgam9pbiBwcm9ibGVtLCB0aGVyZSB3 aWxsIGJlIE4tMSBwaWVjZXMgb2Ygam9pbgorc3RyYXRlZ3kgYWR2aWNlOyBubyBqb2luIHN0cmF0 ZWd5IGFkdmljZSBpcyByZXF1aXJlZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpv aW4gcHJvYmxlbS4KKworQ29uc2lkZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBh ZHZpY2UgYW5kIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLAoraXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRv IHNheSB0aGF0IE5FU1RFRF9MT09QX1BMQUlOKHgpIHNob3VsZCBiZSByZWRlZmluZWQKK3RvIG1l YW4gdGhhdCB4IHNob3VsZCBhcHBlYXIgYnkgaXRzZWxmIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhl ciBvZiBhIG5lc3RlZAorbG9vcCwgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IG9uIHRoZSBpbm5l ciBzaWRlLCBidXQgdGhpcyBkZWZpbml0aW9uIGFwcGVhcnMKK3VzZWxlc3MgaW4gcHJhY3RpY2Uu IEl0IGdpdmVzIHRoZSBwbGFubmVyIHRvbyBtdWNoIGZyZWVkb20gdG8gZG8gdGhpbmdzIHRoYXQK K2JlYXIgbGl0dGxlIHJlc2VtYmxhbmNlIHRvIHdoYXQgdGhlIHVzZXIgcHJvYmFibHkgaGFkIGlu IG1pbmQuIFRoaXMgbWFrZXMKK29ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmFjdGljYWwgZGlm ZmVyZW5jZSBpbiB0aGUgY2FzZSBvZiBhIG1lcmdlIGpvaW4gb3IKK3VucGFyYW1ldGVyaXplZCBu ZXN0ZWQgbG9vcCwgYnV0IGZvciBhIHBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3Agb3IgYSBoYXNo Citqb2luLCB0aGUgdHdvIHNpZGVzIGFyZSB0cmVhdGVkIHZlcnkgZGlmZmVyZW50bHkgYW5kIHNh eWluZyB0aGF0IGEgY2VydGFpbgorcmVsYXRpb24gc2hvdWxkIGJlIGludm9sdmVkIGluIG9uZSBv ZiB0aG9zZSBvcGVyYXRpb25zIHdpdGhvdXQgc2F5aW5nIHdoaWNoCityb2xlIGl0IHNob3VsZCB0 YWtlIGlzbid0IHNheWluZyBtdWNoLgorCitUaGlzIGNob2ljZSBvZiBkZWZpbml0aW9uIGltcGxp ZXMgdGhhdCBqb2luIHN0cmF0ZWd5IGFkdmljZSBhbHNvIGltcG9zZXMgc29tZQoram9pbiBvcmRl ciBjb25zdHJhaW50cy4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgam9pbiBiZXR3ZWVuIGZvbyBhbmQg YmFyLAorSEFTSF9KT0lOKGJhcikgaW1wbGllcyB0aGF0IGZvbyBpcyB0aGUgZHJpdmluZyB0YWJs ZS4gT3RoZXJ3aXNlLCBpdCB3b3VsZAorYmUgaW1wb3NzaWJsZSB0byBwdXQgYmFyIGJlbmVhdGgg dGhlIGlubmVyIHNpZGUgb2YgYSBIYXNoIEpvaW4uCisKK05vdGUgdGhhdCwgZ2l2ZW4gdGhpcyBk ZWZpbml0aW9uLCBpdCdzIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZGVsZXRpbmcgdGhlCitqb2lu IG9yZGVyIGFkdmljZSBidXQgYXBwbHlpbmcgdGhlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiBGb3Ig ZXhhbXBsZSwKK2NvbnNpZGVyIGEgc3RhciBzY2hlbWEgd2l0aCB0YWJsZXMgZmFjdCwgZGltMSwg ZGltMiwgZGltMywgZGltNCwgYW5kIGRpbTUuCitUaGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg YWR2aWNlIG1pZ2h0IHNwZWNpZnkgSk9JTl9PUkRFUihmYWN0IGRpbTEgZGltMworZGltNCBkaW0y IGRpbTUpIEhBU0hfSk9JTihkaW0yIGRpbTQpIE5FU1RFRF9MT09QX1BMQUlOKGRpbTEgZGltMyBk aW01KS4KK0RlbGV0aW5nIHRoZSBKT0lOX09SREVSIGFkdmljZSBhbGxvd3MgdGhlIHBsYW5uZXIg dG8gcmVvcmRlciB0aGUgam9pbnMKK2hvd2V2ZXIgaXQgbGlrZXMgd2hpbGUgc3RpbGwgZm9yY2lu ZyB0aGUgc2FtZSBjaG9pY2Ugb2Ygam9pbiBtZXRob2QuIFRoaXMKK3NlZW1zIHBvdGVudGlhbGx5 IHVzZWZ1bCwgYW5kIGlzIG9uZSByZWFzb24gd2h5IGEgdW5pZmllZCBzeW50YXggdGhhdCBjb250 cm9scworYm90aCBqb2luIG9yZGVyIGFuZCBqb2luIG1ldGhvZCBpbiBhIHNpbmdsZSBsb2N1dGlv biB3YXMgbm90IGNob3Nlbi4KKworQWR2aWNlIENvbXBsZXRlbmVzcworPT09PT09PT09PT09PT09 PT09PQorCitBbiBlc3NlbnRpYWwgZ3VpZGluZyBwcmluY2lwbGUgaXMgdGhhdCBubyBpbmZlcmVu Y2UgbWF5IG1hZGUgb24gdGhlIGJhc2lzCitvZiB0aGUgYWJzZW5jZSBvZiBhZHZpY2UuIFRoZSB1 c2VyIGlzIGVudGl0bGVkIHRvIHJlbW92ZSBhbnkgcG9ydGlvbiBvZiB0aGUKK2dlbmVyYXRlZCBh ZHZpY2Ugd2hpY2ggdGhleSBkZWVtIHVuc3VpdGFibGUgb3IgY291bnRlcnByb2R1Y3RpdmUgYW5k IHRoZQorcmVzdWx0IHNob3VsZCBvbmx5IGJlIHRvIGluY3JlYXNlIHRoZSBmbGV4aWJpbGl0eSBh ZmZvcmRlZCB0byB0aGUgcGxhbm5lci4KK1RoaXMgbWVhbnMgdGhhdCBpZiBhZHZpY2UgY2FuIHNh eSB0aGF0IGEgY2VydGFpbiBvcHRpbWl6YXRpb24gb3IgdGVjaG5pcXVlCitzaG91bGQgYmUgdXNl ZCwgaXQgc2hvdWxkIGFsc28gYmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgb3B0aW1pemF0aW9uIG9y Cit0ZWNobmlxdWUgc2hvdWxkIG5vdCBiZSB1c2VkLiBXZSBzaG91bGQgbmV2ZXIgYXNzdW1lIHRo YXQgdGhlIGFic2VuY2Ugb2YgYW4KK2luc3RydWN0aW9uIHRvIGRvIGEgY2VydGFpbiB0aGluZyBt ZWFucyB0aGF0IGl0IHNob3VsZCBub3QgYmUgZG9uZTsgYWxsCitpbnN0cnVjdGlvbnMgbXVzdCBi ZSBleHBsaWNpdC4KKworU2VtaWpvaW4gVW5pcXVlbmVzcworPT09PT09PT09PT09PT09PT09PQor CitGYWNlZCB3aXRoIGEgc2VtaWpvaW4sIHRoZSBwbGFubmVyIGNvbnNpZGVycyBib3RoIGEgZGly ZWN0IGltcGxlbWVudGF0aW9uCithbmQgYSBwbGFuIHdoZXJlIHRoZSBvbmUgc2lkZSBpcyBtYWRl IHVuaXF1ZSBhbmQgdGhlbiBhbiBpbm5lciBqb2luIGlzCitwZXJmb3JtZWQuIFdlIGVtaXQgU0VN SUpPSU5fVU5JUVVFKCkgYWR2aWNlIHdoZW4gdGhpcyB0cmFuc2Zvcm1hdGlvbiBvY2N1cnMKK2Fu ZCBTRU1JSk9JTl9OT05fVU5JUVVFKCkgYWR2aWNlIHdoZW4gaXQgZG9lc24ndC4gVGhlc2UgaXRl bXMgd29yayBsaWtlCitqb2luIHN0cmF0ZWd5IGFkdmljZTogdGhlIGlubmVyIHNpZGUgb2YgdGhl IHJlbGV2YW50IGpvaW4gaXMgbmFtZWQsIGFuZCB0aGUKK2Nob3NlbiBqb2luIG9yZGVyIG11c3Qg YmUgY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2UgaGF2aW5nIHNvbWUgZWZmZWN0LgorCitYWFg6 IFJpZ2h0IHNlbWlqb2lucyBoYXZlbid0IGJlZW4gcHJvcGVybHkgdGhvdWdodCB0aHJvdWdoLiBU aGUgYXNzb2NpYXRlZAorY29kZSBwcm9iYWJseSBqdXN0IGRvZXNuJ3Qgd29yay4KKworWFhYOiBT ZW1pam9pbiB1bmlxdWVuZXNzIGFkdmljZSBoYXMgbm8gYXV0b21hdGVkIHRlc3RzIGFuZCBuZWVk IHN1YnN0YW50aWFsbHkKK21vcmUgbWFudWFsIHRlc3RpbmcuCisKK1BhcnRpdGlvbndpc2UKKz09 PT09PT09PT09PT0KKworUEFSVElUSU9OV0lTRSgpIGFkdmlzZSBjYW4gYmUgdXNlZCB0byBzcGVj aWZ5IGJvdGggdGhvc2UgcGFydGl0aW9ud2lzZSBqb2lucword2hpY2ggc2hvdWxkIGJlIHBlcmZv cm1lZCBhbmQgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBwZXJmb3JtZWQ7IHRoZSBpZGVhCitp cyB0aGF0IGVhY2ggYXJndW1lbnQgdG8gUEFSVElUSU9OV0lTRSBzcGVjaWZpZXMgYSBzZXQgb2Yg cmVsYXRpb25zIHRoYXQKK3Nob3VsZCBiZSBzY2FubmVkIHBhcnRpdGlvbndpc2UgYWZ0ZXIgYmVp bmcgam9pbmVkIHRvIGVhY2ggb3RoZXIgYW5kIG5vdGhpbmcKK2Vsc2UuIEhlbmNlLCBmb3IgZXhh bXBsZSwgUEFSVElUSU9OV0lTRSgodDEgdDIpIHQzKSBzcGVjaWZpZXMgdGhhdCB0aGUKK3F1ZXJ5 IHNob3VsZCBjb250YWluIGEgcGFydGl0aW9ud2lzZSBqb2luIGJldHdlZW4gdDEgYW5kIHQyIGFu ZCB0aGF0IHQzCitzaG91bGQgbm90IGJlIHBhcnQgb2YgYW55IHBhcnRpdGlvbndpc2Ugam9pbi4g SWYgdGhlcmUgYXJlIG5vIG90aGVyIHJlbHMKK2luIHRoZSBxdWVyeSwgc3BlY2lmeWluZyBqdXN0 IFBBUlRJVElPTldJU0UoKHQxIHQyKSkgd291bGQgaGF2ZSB0aGUgc2FtZQorZWZmZWN0LCBzaW5j ZSB0aGVyZSB3b3VsZCBiZSBubyBvdGhlciByZWxzIHRvIHdoaWNoIHQzIGNvdWxkIGJlIGpvaW5l ZCBpbgorYSBwYXJ0aXRpb253aXNlIGZhc2hpb24uCisKK1BhcmFsbGVsIFF1ZXJ5IChHYXRoZXIs IGV0Yy4pCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFYWNoIGFyZ3VtZW50IHRv IEdBVEhFUigpIG9yIEdBVEhFUl9NRVJHRSgpIGlzIGEgc2luZ2xlIHJlbGF0aW9uIG9yIGFuCitl eGFjdCBzZXQgb2YgcmVsYXRpb25zIG9uIHRvcCBvZiB3aGljaCBhIEdhdGhlciBvciBHYXRoZXIg TWVyZ2Ugbm9kZSwKK3Jlc3BlY3RpdmVseSwgc2hvdWxkIGJlIHBsYWNlZC4gRWFjaCBhcmd1bWVu dCB0byBOT19HQVRIRVIoKSBpcyBhIHNpbmdsZQorcmVsYXRpb24gdGhhdCBzaG91bGQgbm90IGFw cGVhciBiZW5lYXRoIGFueSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5vZGU7Cit0aGF0IGlzLCBw YXJhbGxlbGlzbSBzaG91bGQgbm90IGJlIHVzZWQuCisKK0ltcGxpY2l0IEpvaW4gT3JkZXIgQ29u c3RyYWludHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hlbiBKT0lOX09S REVSKCkgYWR2aWNlIGlzIG5vdCBwcm92aWRlZCBmb3IgYSBwYXJ0aWN1bGFyIGpvaW4gcHJvYmxl bSwKK290aGVyIHBpZWNlcyBvZiBhZHZpY2UgbWF5IHN0aWxsIGluY2lkZW50YWxseSBjb25zdHJh aW50IHRoZSBqb2luIG9yZGVyLgorRm9yIGV4YW1wbGUsIGEgdXNlciB3aG8gc3BlY2lmaWVzIEhB U0hfSk9JTigoZm9vIGJhcikpIGlzIGV4cGxpY2l0bHkgc2F5aW5nCit0aGF0IHRoZXJlIHNob3Vs ZCBiZSBhIGhhc2ggam9pbiB3aXRoIGV4YWN0bHkgZm9vIGFuZCBiYXIgb24gdGhlIG91dGVyCitz aWRlIG9mIGl0LCBidXQgdGhhdCBhbHNvIGltcGxpZXMgdGhhdCBmb28gYW5kIGJhciBtdXN0IGJl IGpvaW5lZCB0bworZWFjaCBvdGhlciBiZWZvcmUgZWl0aGVyIG9mIHRoZW0gaXMgam9pbmVkIHRv IGFueXRoaW5nIGVsc2UuIE90aGVyd2lzZSwKK3RoZSBqb2luIHRoZSB1c2VyIGlzIGF0dGVtcHRp bmcgdG8gY29uc3RyYWludCB3b24ndCBhY3R1YWxseSBvY2N1ciBpbiB0aGUKK3F1ZXJ5LCB3aGlj aCBlbmRzIHVwIGxvb2tpbmcgbGlrZSB0aGUgc3lzdGVtIGhhcyBqdXN0IGRlY2lkZWQgdG8gaWdu b3JlCit0aGUgYWR2aWNlIGFsdG9nZXRoZXIuCisKK0Z1dHVyZSBXb3JrCis9PT09PT09PT09PQor CitXZSBkb24ndCBoYW5kbGUgY2hvaWNlIG9mIGFnZ3JlZ2F0aW9uOiBpdCB3b3VsZCBiZSBuaWNl IHRvIGJlIGFibGUgdG8gZm9yY2UKK3NvcnRlZCBvciBncm91cGVkIGFnZ3JlZ2F0aW9uLiBJJ20g Z3Vlc3NpbmcgdGhpcyBjYW4gYmUgbGVmdCB0byBmdXR1cmUgd29yay4KKworTW9yZSBzZXJpb3Vz bHksIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgZWFnZXIgYWdncmVnYXRpb24sIHdoaWNo IGNvdWxkCitoYXZlIGEgbGFyZ2UgaW1wYWN0IG9uIHRoZSBzaGFwZSBvZiB0aGUgcGxhbiB0cmVl LiBYWFg6IFRoaXMgbmVlZHMgc29tZSBzdHVkeQordG8gZGV0ZXJtaW5lIGhvdyBsYXJnZSBhIHBy b2JsZW0gaXQgaXMsIGFuZCBtaWdodCBuZWVkIHRvIGJlIGZpeGVkIHNvb25lcgorcmF0aGVyIHRo YW4gbGF0ZXIuCisKK1dlIGRvbid0IG9mZmVyIGFueSBjb250cm9sIG92ZXIgZXN0aW1hdGVzLCBv bmx5IG91dGNvbWVzLiBJdCBzZWVtcyBsaWtlIGEKK2dvb2QgaWRlYSB0byBpbmNvcnBvcmF0ZSB0 aGF0IGFiaWxpdHkgYXQgc29tZSBmdXR1cmUgcG9pbnQsIGFzIHBnX2hpbnRfcGxhbgorZG9lcy4g SG93ZXZlciwgc2luY2UgcHJpbWFyeSBnb2FsIG9mIHRoZSBpbml0aWFsIGRldmVsb3BtZW50IHdv cmsgaXMgdG8gYmUKK2FibGUgdG8gaW5kdWNlIHRoZSBwbGFubmVyIHRvIHJlY3JlYXRlIGEgZGVz aXJlZCBwbGFuIHRoYXQgd29ya2VkIHdlbGwgaW4KK3RoZSBwYXN0LCB0aGlzIGhhcyBub3QgYmVl biBpbmNsdWRlZCBpbiB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCBlZmZvcnQuCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL2V4cGVjdGVkL2dhdGhlci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmJkNGY0YzI0ZTI3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0CkBAIC0wLDAgKzEsMzQ0IEBACitMT0FE ICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9 IDE7CitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdCA9IDA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29z dCA9IDA7CitTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZSA9IDA7CitTRVQgZGVidWdf cGFyYWxsZWxfcXVlcnkgPSBvZmY7CitDUkVBVEUgVEFCTEUgZ3RfZGltIChpZCBzZXJpYWwgcHJp bWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRleHQgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBndF9kaW07CitDUkVBVEUgVEFC TEUgZ3RfZmFjdCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxs IHJlZmVyZW5jZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworSU5TRVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgZ3RfZmFjdDsKKy0tIEJ5IGRl ZmF1bHQsIHdlIGV4cGVjdCBHYXRoZXIgTWVyZ2Ugd2l0aCBhIHBhcmFsbGVsIGhhc2ggam9pbi4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0 IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRo ZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNv cnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4g IFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBn dF9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg SEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCiso MTQgcm93cykKKworLS0gRm9yY2UgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvZiBib3RoIHJlbGF0 aW9ucyB0b2dldGhlci4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdnYXRoZXJfbWVyZ2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBHYXRoZXIgTWVyZ2UKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQor ICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFBh cmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBk LmlkKQorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgor ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgR0FUSEVSX01FUkdFKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYg ZCkKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIFNvcnQgS2V5OiBmLmRpbV9p ZAorICAgLT4gIEdhdGhlcgorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAt PiAgUGFyYWxsZWwgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9p ZCA9IGQuaWQpCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFj dCBmCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAg ICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBHQVRIRVIoKGYgZCkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBk KQorICAgR0FUSEVSKChmIGQpKQorKDE2IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGEgc2Vw YXJhdGUgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBvcGVyYXRpb24gZm9yIGVhY2ggcmVsYXRpb24u CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdl KGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2Ug Sm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVy Z2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAg ICAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhlciBNZXJnZQorICAgICAgICAgV29y a2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBL ZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0g ZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8qIG1hdGNoZWQg Ki8KKyAgIEdBVEhFUl9NRVJHRShkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFf U0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGlt X2lkID0gZC5pZCkKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAg ICAgICAgIC0+ICBHYXRoZXIKKyAgICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAg ICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIFNv cnQKKyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAg ICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBT ZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGYp IC8qIG1hdGNoZWQgKi8KKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisg ICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZiBkKQorKDIwIHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5kKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDog KGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMg UGxhbm5lZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBm LmRpbV9pZAorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3Qg ZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZCBkL2QuZCkpIC8qIHBhcnRpYWxseSBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBN RVJHRV9KT0lOX1BMQUlOKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1Ymxp Yy5ndF9kaW1fcGtleSkKKyAgIEdBVEhFUl9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTcg cm93cykKKworQ09NTUlUOworLS0gRm9yY2UgYSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9uIG9u ZSByZWxhdGlvbiBidXQgbm8gcGFyYWxsZWxpc20gb24gb3RoZXIuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKGYpIG5vX2dhdGhlcihkKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFj dCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisg ICBNZXJnZSBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIEdhdGhlciBNZXJnZQorICAg ICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAg ICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBndF9kaW1fcGtleSBvbiBn dF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSX01FUkdFKGYpIC8qIG1h dGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisgICBT RVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIEdBVEhF Ul9NRVJHRShmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9J TiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBD b25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBm LmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEdhdGhl ciBNZXJnZQorICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAgICAtPiAgU29ydAor ICAgICAgICAgICAgICAgU29ydCBLZXk6IGQuaWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVS X01FUkdFKGQpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lO X1BMQUlOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoZCkKKyAgIE5PX0dB VEhFUihmKQorKDE5IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn Z2F0aGVyKGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQor ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyAgIC0+ICBT b3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBHYXRoZXIKKyAg ICAgICAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgICAgICAgLT4gIFBhcmFs bGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FU SEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihkKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BM QUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5ndF9kaW1fcGtl eSkKKyAgIEdBVEhFUihmKQorICAgTk9fR0FUSEVSKGQpCisoMTggcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9J TiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBD b25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBm LmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIFNvcnQK KyAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAg ICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEg U2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKGQpIC8q IG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisg ICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoZCkKKyAgIE5PX0dBVEhFUihmKQorKDE5IHJvd3Mp CisKK0NPTU1JVDsKKy0tIEZvcmNlIG5vIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgdXNlIGF0IGFs bC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdub19nYXRoZXIo ZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00g Z3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4K KyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBndF9kaW1fcGtleSBvbiBndF9kaW0gZAorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5 OiBmLmRpbV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgTk9fR0FUSEVSKGYpIC8qIG1hdGNoZWQgKi8KKyAgIE5PX0dBVEhF UihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhf U0NBTihkIHB1YmxpYy5ndF9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykK KworQ09NTUlUOworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhvdXQgdGhlIE9SREVS IEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBHYXRoZXIKKyAgIERpc2FibGVkOiB0cnVlCisgICBXb3JrZXJzIFBsYW5u ZWQ6IDEKKyAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYu ZGltX2lkID0gZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0 IGYKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhF Ul9NRVJHRSgoZiBkKSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYg ZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBH YXRoZXIKKyAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgor ICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgLT4gIFBhcmFs bGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2gKKyAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9kaW0gZAorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNF UV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNCByb3dzKQorCitDT01NSVQ7CmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTg3NjUyMzcwYzMKLS0tIC9kZXYvbnVsbAor KysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0CkBAIC0w LDAgKzEsMjkyIEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dv cmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9fZGltMSAoaWQgaW50ZWdlciBw cmltYXJ5IGtleSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxF Q1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0xOworQ1JFQVRFIFRB QkxFIGpvX2RpbTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGlt MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywg KGcgJSA3KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBB TkFMWVpFIGpvX2RpbTI7CitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50IHByaW1hcnkg a2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTEgKGlkKSwK KwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChpZCkKKykgV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZmFjdAorCVNF TEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CistLSBXZSBleHBlY3QgdG8gam9pbiB0byBk MiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBkMgorLS0gaXMgbW9y ZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0x IGQxCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIgZDEpCisgICBT RVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTYgcm93cykKKworLS0g Rm9yY2UgYSBmZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRoZXNlIGFyZSB2ZXJ5 IGluZWZmaWNpZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0aGVtIGFsbCB2aWFi bGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRl cihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5p ZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFs MSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0y IGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAgIEhBU0hfSk9JTihkMSBkMikK KyAgIFNFUV9TQ0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFj dCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpP SU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2 YWwyID0gMTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBI YXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg IEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2ZhY3QgZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIgZDEpCisgICBTRVFfU0NB TihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYgZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7Cisg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYu ZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAo ZDEuaWQgPSBmLmRpbTFfaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQor ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSGFzaAorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEgZiBkMikg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEg ZiBkMikKKyAgIEhBU0hfSk9JTihmIGQyKQorICAgU0VRX1NDQU4oZDEgZiBkMikKKyAgIE5PX0dB VEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnam9pbl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9O IGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0g ZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9p bgorICAgSGFzaCBDb25kOiAoKGYuZGltMV9pZCA9IGQxLmlkKSBBTkQgKGYuZGltMl9pZCA9IGQy LmlkKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0x IGQxCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAg ICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChkMSBkMikpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgKGQxIGQy KSkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQyKQorICAgSEFTSF9KT0lOKGQyKQorICAg U0VRX1NDQU4oZiBkMSBkMikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJvd3MpCisKK0NP TU1JVDsKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVlcnkgaXMgaW50ZW5k ZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1Y2luZyB0aGUgRlVM TCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCistLSBjYW4gdGVzdCB3 aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSByZW9yZGVyZWQuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQx CisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9p ZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElT IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlk ID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElTIE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwg Sm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGltMl9pZCAr IDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5p ZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAg ICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYp CisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisg ICBOT19HQVRIRVIoZDEgZiBkMikKKygxOCByb3dzKQorCistLSBXZSBzaG91bGQgbm90IGJlIGFi bGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBiZWNhdXNlCist LSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZSB0 byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0aGUgZHJpdmlu ZyB0YWJsZS4KK0JFR0lOOworLS0gWFhYOiBUaGUgYWR2aWNlIGZlZWRiYWNrIHNheXMgJ3BhcnRp YWxseSBtYXRjaGVkJyBoZXJlIHdoaWNoIGlzbid0IGV4YWN0bHkKKy0tIHdyb25nIGdpdmVuIHRo ZSB3YXkgdGhhdCBmbGFnIGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUsIGJ1dCBpdCdzIGF0IHRoZSB2 ZXJ5CistLSBsZWFzdCBjb25mdXNpbmcuIFNvbWV0aGluZyBzaG91bGQgcHJvYmFibHkgYmUgaW1w cm92ZWQgaGVyZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRl cihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICog RlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0y IGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQg T1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2Fi bGVkOiB0cnVlCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGlt MV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIERpc2FibGVk OiB0cnVlCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lk ICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQy LmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDAp KQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIo ZiBkMSBkMikgLyogcGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNU RURfTE9PUF9QTEFJTihkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEg ZiBkMikKKygyMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pv aW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NF TEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5k aW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxM KSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGYuZGlt Ml9pZCArIDApKSA9ICgoZDIuaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAg ICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZmFjdCBmCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29y dCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0yIGQyCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0xIGQxCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIg ZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQyKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUo ZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYg ZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpv X2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04g Zi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRp bTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6 ICgoZDEuaWQgPSBmLmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVy Z2UgRnVsbCBKb2luCisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5k aW0yX2lkICsgMCkpKQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5 OiAoKGQyLmlkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBk MgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9p ZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4g IE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0Vf Sk9JTl9QTEFJTihmKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NB TihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93cykKKworQ09NTUlUOwor LS0gWFhYOiBhZGQgdGVzdHMgZm9yIGpvaW4gb3JkZXIgcHJlZml4IG1hdGNoaW5nCistLSBYWFg6 IGpvaW5fb3JkZXIoanVzdG9uZXJlbCkgc2hvdWxkbid0IHJlcG9ydCBwYXJ0aWFsbHkgbWF0Y2hl ZApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0cmF0 ZWd5Lm91dCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5v dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjcxZWUyNmEzMzdhCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX3N0 cmF0ZWd5Lm91dApAQCAtMCwwICsxLDI5NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VU IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIGpvaW5f ZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvaW5fZGltIChkaW0pIFNFTEVDVCByYW5k b20oKTo6dGV4dCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpF IGpvaW5fZGltOworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5 LAorCWRpbV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QK KwlTRUxFQ1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NS RUFURSBJTkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VV TSBBTkFMWVpFIGpvaW5fZmFjdDsKKy0tIFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBkZWZhdWx0 LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5f ZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4g IFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvaW5fZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYg ZCkKKygxMCByb3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1cm4g d2l0aCBqb2luX2RpbSBhcyB0aGUgaW5uZXIgdGFibGUuCistLSBBbGwgb2YgdGhlc2Ugc2hvdWxk IHdvcmsgZXhjZXB0IGZvciBNRVJHRV9KT0lOX01BVEVSSUFMSVpFOyB0aGF0IHdpbGwKKy0tIGZh aWwsIGJlY2F1c2UgdGhlIHBsYW5uZXIga25vd3MgdGhhdCBqb2luX2RpbSAoaWQpIGlzIHVuaXF1 ZSwgYW5kIHdpbGwKKy0tIHJlZnVzZSB0byBhZGQgbWFyay9yZXN0b3JlIG92ZXJoZWFkLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihkKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0 IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2Vx IFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKGQpIC8q IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkK KyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKygx MiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5f TUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgRGlzYWJsZWQ6IHRydWUKKyAgIE1l cmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2lu X2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2lu X2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdF X0pPSU5fTUFURVJJQUxJWkUoZCkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQpCisg ICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9pbl9kaW1f cGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAg IE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBq b2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBq b2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1F UkdFX0pPSU5fUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgSU5ERVhfU0NB TihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkIGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBO T19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2Vx IFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9M T09QX01BVEVSSUFMSVpFKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpCisgICBT RVFfU0NBTihmIGQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg LT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgICAtPiAgTWVtb2l6ZQorICAgICAgICAgQ2Fj aGUgS2V5OiBmLmRpbV9pZAorICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAgICAgICAg LT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmlj ZToKKyAgIE5FU1RFRF9MT09QX01FTU9JWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUVNT0laRShk KQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9kaW1fcGtleSkK KyAgIE5PX0dBVEhFUihmIGQpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBm CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZCkKKyAg IFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkpCisgICBO T19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1JVDsKKy0tIE5vdyB0cnkgZm9yY2luZyBl YWNoIGpvaW4gbWV0aG9kIGluIHR1cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlubmVyCistLSB0 YWJsZS4gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhh c2ggQ29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBk CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZmFjdCBmCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgSEFTSF9KT0lOKGYpCisg ICBTRVFfU0NBTihkIGYpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0 IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIElu ZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24g am9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1FUkdFX0pPSU5fTUFURVJJ QUxJWkUoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShmKQorICAgSU5ERVhfU0NBTihk IHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19H QVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo ZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBv biBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9u IGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBNRVJHRV9KT0lOX1BMQUlO KGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGQgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9p bl9kaW1fcGtleSBmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAgTk9fR0FUSEVSKGYgZCkK KygxMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9M T09QX01BVEVSSUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAg IEpvaW4gRmlsdGVyOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5f ZGltIGQKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5f ZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9NQVRFUklBTEla RShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRF UihkIGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShmKQorICAgU0VRX1NDQU4oZCBmKQor ICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ05FU1RFRF9MT09QX01FTU9JWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNl cSBTY2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBNZW1vaXplCisgICAgICAgICBDYWNoZSBLZXk6 IGQuaWQKKyAgICAgICAgIENhY2hlIE1vZGU6IGxvZ2ljYWwKKyAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgICAgICAgICAgICAg IEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg TkVTVEVEX0xPT1BfTUVNT0laRShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBORVNURURfTE9PUF9NRU1PSVpFKGYpCisgICBT RVFfU0NBTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGltX2lkKQorICAg Tk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5k aW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2Rp bSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9uIGpvaW5fZmFj dCBmCisgICAgICAgICBJbmRleCBDb25kOiAoZGltX2lkID0gZC5pZCkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlO KGYpCisgICBTRVFfU0NBTihkKQorICAgSU5ERVhfU0NBTihmIHB1YmxpYy5qb2luX2ZhY3RfZGlt X2lkKQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4n dCBmb3JjZSBhIGZvcmVpZ24gam9pbiBiZXR3ZWVuIHRoZXNlIHRhYmxlcywgYmVjYXVzZSB0aGV5 CistLSBhcmVuJ3QgZm9yZWlnbiB0YWJsZXMuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBT ZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1f cGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRpbV9pZCkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEZPUkVJR05fSk9JTigoZiBkKSkgLyogbWF0Y2hl ZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQp CisgICBORVNURURfTE9PUF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4o ZCBwdWJsaWMuam9pbl9kaW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTMgcm93cykKKwor Q09NTUlUOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2Nh bF9jb2xsZWN0b3Iub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9j b2xsZWN0b3Iub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NmY1 NTRiZjIzOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0 ZWQvbG9jYWxfY29sbGVjdG9yLm91dApAQCAtMCwwICsxLDY1IEBACitDUkVBVEUgRVhURU5TSU9O IHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworLS0gVHJ5 IGNsZWFyaW5nIGFkdmljZSBiZWZvcmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NFTEVDVCBwZ19j bGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2Fs X2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQor CistLSBTZXQgYSBzbWFsbCBhZHZpY2UgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHdlJ2xsIGV4 Y2VlZCBpdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjsK Ky0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxlIChhIGlu dCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNl LCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CistLSBUZXN0IHF1ZXJpZXMuCitTRUxFQ1QgKiBGUk9N IGR1bW15X3RhYmxlIGEsIGR1bW15X3RhYmxlIGI7CisgYSB8IGIgfCBhIHwgYiAKKy0tLSstLS0r LS0tKy0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSBkdW1teV90YWJsZTsKKyBhIHwgYiAK Ky0tLSstLS0KKygwIHJvd3MpCisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRo ZSBzZWNvbmQgdGVzdCBxdWVyeS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVk X2xvY2FsX2FkdmljZSgpIE9SREVSIEJZIGlkIERFU0MgTElNSVQgMTsKKyAgICAgICAgIGFkdmlj ZSAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU0VRX1NDQU4oZHVtbXlfdGFi bGUpICsKKyBOT19HQVRIRVIoZHVtbXlfdGFibGUpCisoMSByb3cpCisKKy0tIE5vdyB0cnkgY2xl YXJpbmcgYWR2aWNlIGFnYWluLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZp Y2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFJhaXNlIHRoZSBjb2xsZWN0aW9u IGxpbWl0IHNvIHRoYXQgdGhlIGNvbGxlY3RvciB1c2VzIG11bHRpcGxlIGNodW5rcy4KK1NFVCBw Z19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0gMjAwMDsKKy0tIFB1c2ggYSBi dW5jaCBvZiBxdWVyaWVzIHRocm91Z2ggdGhlIGNvbGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZP UiB4IElOIDEuLjIwMDAgTE9PUAorCQlFWEVDVVRFICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxl JzsKKwlFTkQgTE9PUDsKK0VORAorJCQ7CistLSBDaGVjayB0aGF0IHRoZSBjb2xsZWN0b3Igd29y a2VkLgorU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKyBjb3VudCAKKy0tLS0tLS0KKyAgMjAwMAorKDEgcm93KQorCistLSBBbmQgY2xlYXIgb25l IG1vcmUgdGltZSwgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQor LS0gZXZlbiB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2 aWNlIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5v dXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0Cm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kZjBmMDU1MzFkNQotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lz ZS5vdXQKQEAgLTAsMCArMSwyNDMgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhf cGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lz ZV9qb2luID0gdHJ1ZTsKK0NSRUFURSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBrZXks IGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUg VEFCTEUgcHQxYSBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEp CisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MWIg UEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJVElP TiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwxKQor CVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CitDUkVBVEUg VEFCTEUgcHQyIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQsIHZhbDIgaW50KQor CVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEgUEFSVElUSU9OIE9G IHB0MiBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5h YmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZB TFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBm YWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJP TSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOwor SU5TRVJUIElOVE8gcHQyIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgb3RoZXIg dGV4dCAnIHx8IGcsIChnICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDAp IGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHBy aW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEp IHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBU QUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAw MSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQz YyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGlt MywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcp ICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUg cHQzOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2ggKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRp bW0gdGV4dCwgdmFsbSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFC TEUgcHRtaXNtYXRjaGEgUEFSVElUSU9OIE9GIHB0bWlzbWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZS T00gKDEpIHRvICgxNTAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NS RUFURSBUQUJMRSBwdG1pc21hdGNoYiBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBW QUxVRVMgRlJPTSAoMTUwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gcHRtaXNtYXRjaCAoaWQsIGRpbW0sIHZhbG0pCisJU0VMRUNU IGcsICd5ZXQgYW5vdGhlciB0ZXh0ICcgfHwgZywgKGcgJSAyKSArIDEKKwkgIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsMzAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIHB0bWlzbWF0Y2g7CitFWFBMQUlO IChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdI RVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEg QU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIC0+ICBOZXN0ZWQgTG9v cAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQy XzEuaWQgPSBwdDNfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0 Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBw dDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24gcHQxYSBwdDFfMQorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIuaWQgPSBwdDNfMi5pZCkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlk ID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBO ZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBD b25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9 IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFf MworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzMuaWQpCisgICAgICAgICAg ICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1YmxpYy5wdDFhKQor ICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJsaWMu cHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBwdDEv cHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQxL3B1 YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMvcHVibGljLnB0M2Eg cHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJsaWMu cHQyYSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgorICAg IHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9wdWJs aWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9wa2V5 CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05XSVNF KChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMu cHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJi IHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJs aWMucHQzYykKKyg0NyByb3dzKQorCistLSBTdXBwcmVzcyBwYXJ0aXRpb253aXNlIGpvaW4sIG9y IGRvIGl0IGp1c3QgcGFydGlhbGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1BBUlRJVElPTldJU0UocHQxIHB0MiBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURW SUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlk ID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9 IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAocHQxLmlkID0g cHQyLmlkKQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWEgcHQx XzEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB0MWIgcHQxXzIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDEgPSAxKQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgICAgICAgIC0+ICBB cHBlbmQKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAt PiAgQXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQz YSBwdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9 IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNf MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKHB0MSkgLyogbWF0Y2hlZCAqLworICAg UEFSVElUSU9OV0lTRShwdDIpIC8qIG1hdGNoZWQgKi8KKyAgIFBBUlRJVElPTldJU0UocHQzKSAv KiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihwdDEg KHB0MiBwdDMpKQorICAgSEFTSF9KT0lOKHB0MyBwdDMpCisgICBTRVFfU0NBTihwdDEvcHVibGlj LnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAg ICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVi bGljLnB0M2IKKyAgICBwdDMvcHVibGljLnB0M2MpCisgICBQQVJUSVRJT05XSVNFKHB0MSBwdDIg cHQzKQorICAgTk9fR0FUSEVSKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1 YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGlj LnB0MmMgcHQzL3B1YmxpYy5wdDNhIHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCiso NDAgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05X SVNFKChwdDEgcHQyKSBwdDMpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIu aWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAocHQxLmlkID0gcHQzLmlkKQorICAgLT4gIEFw cGVuZAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAo cHQxXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFh IHB0MV8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQy YSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisg ICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMi5p ZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWIgcHQxXzIK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8y CisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0MV8zLmlkID0gcHQy XzMuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYyBwdDFfMworICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQyXzMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgLT4gIEhhc2gKKyAg ICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0 M18xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0M18z CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIpKSAvKiBtYXRjaGVkICovCisgICBQ QVJUSVRJT05XSVNFKHB0MykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSkKKyAgIEpPSU5f T1JERVIocHQxL3B1YmxpYy5wdDFiIHB0Mi9wdWJsaWMucHQyYikKKyAgIEpPSU5fT1JERVIocHQx L3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMucHQyYykKKyAgIEpPSU5fT1JERVIoe3B0MSBwdDJ9IHB0 MykKKyAgIEhBU0hfSk9JTihwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJs aWMucHQyYyBwdDMpCisgICBTRVFfU0NBTihwdDEvcHVibGljLnB0MWEgcHQyL3B1YmxpYy5wdDJh IHB0MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIKKyAgICBwdDEvcHVibGljLnB0MWMgcHQy L3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IKKyAgICBwdDMvcHVi bGljLnB0M2MpCisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSBwdDMpCisgICBOT19HQVRIRVIo cHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1Ymxp Yy5wdDJhCisgICAgcHQyL3B1YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0 M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyg0NyByb3dzKQorCitDT01NSVQ7 CistLSBDYW4ndCBmb3JjZSBhIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0 YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJ T05XSVNFKChwdDEgcHRtaXNtYXRjaCkpJzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21h dGNoLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdDFhIHB0MV8xCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEg cHRtaXNtYXRjaF8xCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0 Y2hiIHB0bWlzbWF0Y2hfMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlk KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0 Y2gpKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKHB0MSBwdG1pc21hdGNoKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRj aCkKKyAgIFNFUV9TQ0FOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1Ymxp Yy5wdDFjKQorICAgSU5ERVhfU0NBTihwdG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJs aWMucHRtaXNtYXRjaGFfcGtleQorICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1 YmxpYy5wdG1pc21hdGNoYl9wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkK KyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMu cHQxYworICAgIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGlj LnB0bWlzbWF0Y2hiKQorKDIyIHJvd3MpCisKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2Nhbi5vdXQgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L2V4cGVjdGVkL3NjYW4ub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li5hODBkZTc4ZDgyMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv ZXhwZWN0ZWQvc2Nhbi5vdXQKQEAgLTAsMCArMSw3NTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNl JzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFn ZV9jb3N0ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxl X2Nvc3QgPSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKK0NSRUFURSBUQUJMRSBz Y2FuX3RhYmxlIChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNjYW5fdGFibGUKKwlTRUxFQ1QgZywgJ3Nv bWUgdGV4dCAnIHx8IGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOworQ1JFQVRF IElOREVYIHNjYW5fdGFibGVfYiBPTiBzY2FuX3RhYmxlIFVTSU5HIGJyaW4gKGIpOworVkFDVVVN IEFOQUxZWkUgc2Nhbl90YWJsZTsKKy0tIFNlcXVlbnRpYWwgc2NhbgorRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgIFFVRVJZ IFBMQU4gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNj YW5fdGFibGUKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxl KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNCByb3dzKQorCistLSBJbmRleCBzY2FuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5k ZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNSByb3dzKQorCistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXgg T25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBD b25kOiAoYSA9IDEpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDUgcm93cykKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21l IHRleHQgOCc7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChi ID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzY2Fu X3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfYikKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykK KworLS0gVElEIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAq IEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFRpZCBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIFRJRCBDb25kOiAoY3RpZCA9ICcoMCwxKSc6OnRp ZCkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAg Tk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBUSUQgcmFuZ2Ugc2NhbgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJ V0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKChjdGlkID4gJygx LDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg1IHJvd3MpCisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1 c2UgdGhlIHNjYW4gdHlwZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91 bGQgc3VjY2VlZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBzY2FuX3RhYmxlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2Fu X3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1ND QU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDYgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5f dGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5 KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJs ZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf T05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1ND QU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgn OworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQml0bWFwIEhlYXAgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENv bmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6dGV4dCkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBv biBzY2FuX3RhYmxlX2IKKyAgICAgICAgIEluZGV4IENvbmQ6IChiID4gJ3NvbWUgdGV4dCA4Jzo6 dGV4dCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX2IpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfYikKKyAg IE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwx KSc7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBU SUQgQ29uZDogKGN0aWQgPSAnKDAsMSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBUSURfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlCisJV0hFUkUgY3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOwor ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBUaWQgUmFuZ2UgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29u ZDogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRyeSB0byBmb3Jj ZSBhIGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBB bGwKKy0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBz Y2FuIGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1 dCB0aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0 aWVzIGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQor ICAgRGlzYWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIo c2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2Fi bGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nh bl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn QklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2Fi bGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVHJ5 IGFnYWluIHRvIGZvcmNlIGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRo ZSBJTkRFWF9TQ0FOCistLSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZ X1NDQU4gY2FuJ3QgYmUgZm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVt bnMgbm90IGluY2x1ZGVkIGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBz Y2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisg ICBGaWx0ZXI6IChhID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dB VEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA+IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHNjYW5fdGFi bGUKKyAgIFJlY2hlY2sgQ29uZDogKGEgPiAwKQorICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9u IHNjYW5fdGFibGVfcGtleQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9I RUFQX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHNjYW5fdGFibGUpCisoOSByb3dzKQorCitDT01NSVQ7CistLSBXZSBjYW4gZm9yY2UgYSBwcmlt YXJ5IGtleSBsb29rdXAgdG8gdXNlIGEgc2VxdWVudGlhbCBzY2FuLCBidXQgd2UKKy0tIGNhbid0 IGZvcmNlIGl0IHRvIHVzZSBhbiBpbmRleC1vbmx5IHNjYW4gKGR1ZSB0byB0aGUgY29sdW1uIGxp c3QpCistLSBvciBhIFRJRCBzY2FuIChkdWUgdG8gdGhlIGFic2VuY2Ugb2YgYSBUSUQgcXVhbCku CitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nh bl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZp Y2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAx OworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVl CisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBUSURf U0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2UgY2Fu IGZvcmNpYmx5IGRvd25ncmFkZSBhbiBpbmRleC1vbmx5IHNjYW4gdG8gYW4gaW5kZXggc2Nhbiwg YnV0IHdlIGNhbid0CistLSBmb3JjZSB0aGUgdXNlIG9mIGFuIGluZGV4IHRoYXQgdGhlIHBsYW5u ZXIgdGhpbmtzIGlzIGluYXBwbGljYWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up IFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXgg Q29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVf cGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9i KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5f dGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQor ICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYikgLyogbWF0Y2hlZCwg ZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93cykKKworQ09NTUlUOworLS0gV2Ug Y2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNjYW4gaW4gcGxhY2Ugb2YgYSBiaXRt YXAgaGVhcCBzY2FuLAorLS0gYnV0IGEgcGxhaW4gaW5kZXggc2NhbiBvbiBhIEJSSU4gaW5kZXgg aXMgbm90IHBvc3NpYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOwor ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVy OiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTihzY2FuX3RhYmxlKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNj YW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2Vx IFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlzYWJsZWQ6IHRydWUKKyAgIEZpbHRlcjogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfYikgLyogbWF0Y2hlZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93 cykKKworQ09NTUlUOworLS0gV2UgY2FuIGZvcmNlIHRoZSB1c2Ugb2YgYSBzZXF1ZW50aWFsIHNj YW4gcmF0aGVyIHRoYW4gYSBUSUQgc2NhbiBvcgorLS0gVElEIHJhbmdlIHNjYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2Nhbl90YWJsZQorICAgRmlsdGVyOiAoY3RpZCA9ICcoMCwxKSc6OnRpZCkKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBB TkQgY3RpZCA8ICcoMiwxKSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQor ICAgRmlsdGVyOiAoKGN0aWQgPiAnKDEsMSknOjp0aWQpIEFORCAoY3RpZCA8ICcoMiwxKSc6OnRp ZCkpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKSAvKiBt YXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJs ZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworQ09NTUlUOworLS0gVGVz dCBtb3JlIGNvbXBsZXggc2NlbmFyaW9zIHdpdGggaW5kZXggc2NhbnMuCitCRUdJTjsKKy0tIFNo b3VsZCBzdGlsbCB3b3JrIGlmIHdlIG1lbnRpb24gdGhlIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1 c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworLS0gQnV0IG5vdCBpZiB3ZSBtZW50aW9u IHRoZSB3cm9uZyBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBT Y2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAo YSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg Y2lsYnVwLnNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEl0 J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3Rh YmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2lu ZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfcGtleSkgLyogbWF0Y2hlZCAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFi bGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVY X1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNj YW5fdGFibGUpCisoOCByb3dzKQorCistLSBCdXQgaXQgZG9lc24ndCB3b3JrIGlmIHRoZSBpbmRl eCB0YXJnZXQgaXMgZXZlbiBub3Rpb25hbGx5IGRpZmZlcmVudC4KK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBz Y2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNj YW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9w a2V5KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworICAgSU5ERVhfU0NBTihzY2FuX3RhYmxl IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2Fu X3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1J VDsKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1ND QU4obm90aGluZykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAg Tk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQor ICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFi bGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgYm9ndXMpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJs ZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2Nh biB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEg PSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJv Z3VzKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFu IEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxl X3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZl ciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpIC8qIG5v dCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBib2d1cykgLyogbWF0Y2hlZCwgaW5hcHBsaWNh YmxlICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQor KDcgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBtdWx0 aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgYWxpYXMuCitCRUdJTjsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkg ZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AgTGVmdCBKb2luCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAg RnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMgZworICAgICAgICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgICAgICAgICAgICAg SW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxl X3BrZXkgb24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQor IEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RF RF9MT09QX1BMQUlOKHMgcyMyKQorICAgSU5ERVhfU0NBTihzIHB1YmxpYy5zY2FuX3RhYmxlX3Br ZXkgcyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTIg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJh dGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4Cisg ICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w IExlZnQgSm9pbgorICAgLT4gIEhhc2ggTGVmdCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChn LmcgPSBzLmEpCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJpZXMg ZworICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzY2Fu X3RhYmxlIHMKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2Fu X3RhYmxlIHNfMQorICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAgTkVTVEVEX0xPT1BfUExBSU4ocyMy KQorICAgSEFTSF9KT0lOKHMpCisgICBTRVFfU0NBTihzKQorICAgSU5ERVhfU0NBTihzIzIgcHVi bGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzIHMjMikKKygxNyByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMjMiknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3Nlcmll cygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQg Sk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBK b2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0 IEpvaW4KKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJs ZSBzCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGcuZykKKyAgIC0+ICBIYXNoCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2Nhbl90YWJsZSBzXzEKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHMjMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHMpCisg ICBIQVNIX0pPSU4ocyMyKQorICAgU0VRX1NDQU4ocyMyKQorICAgSU5ERVhfU0NBTihzIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93cykKKworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSBTRVFfU0NBTihzIzIp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5l cmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgK KyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggTGVmdCBKb2luCisgICBIYXNoIENvbmQ6 IChnLmcgPSBzXzEuYSkKKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBDb25k OiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2Vy aWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g c2Nhbl90YWJsZSBzCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5f dGFibGUgc18xCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzKSAvKiBtYXRj aGVkICovCisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBB ZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBIQVNIX0pPSU4ocyBzIzIpCisgICBT RVFfU0NBTihzIHMjMikKKyAgIE5PX0dBVEhFUihzIHMjMikKKygxNyByb3dzKQorCitDT01NSVQ7 CistLSBUZXN0IG91ciBhYmlsaXR5IHRvIHJlZmVyIHRvIHNjYW5zIHdpdGhpbiBhIHN1YnF1ZXJ5 LgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNjYW5fdGFi bGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHgpCisoNSByb3dzKQorCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFi bGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0 ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg1IHJv d3MpCisKK0JFR0lOOworLS0gU2hvdWxkIG5vdCBtYXRjaC4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEg PSAxIE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBz CisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFf U0NBTihzKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElO REVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B4KQor KDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJ bmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihz KSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1ND QU4oc0B1bm5hbWVkX3N1YnF1ZXJ5IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRI RVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hvdWxkIG1hdGNoIGZpcnN0 IHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KHNAeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKSB4OworICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHgpCisgICBOT19HQVRIRVIoc0B4KQor KDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZS T00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJ bmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihz QHgpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhf U0NBTihzQHVubmFtZWRfc3VicXVlcnkgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dB VEhFUihzQHVubmFtZWRfc3VicXVlcnkpCisoNyByb3dzKQorCistLSBTaG91bGQgbWF0Y2ggc2Vj b25kIHF1ZXJ5IG9ubHkuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKHNAdW5uYW1lZF9zdWJxdWVyeSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJFIGEgPSAx IE9GRlNFVCAwKSB4OworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisg ICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NB TihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG5vdCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHggcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzQHgpCisoNyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEg T0ZGU0VUIDApOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIHNjYW5fdGFibGUgcworICAgRmlsdGVyOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpIC8qIG1hdGNoZWQgKi8KKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpCisg ICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworQ09NTUlUOwpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0IGIvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0Cm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZWMwMjk4MDg5NgotLS0gL2Rldi9udWxsCisrKyBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dApAQCAtMCwwICsxLDE2MiBA QAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworLS0gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQs IGFuZCBzbyBpcyBhbiBlbXB0eSB0YXJnZXQgbGlzdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnJzsKK0VYUExBSU4gU0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKygxIHJvdykKKwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigpJzsKK0VYUExBSU4gU0VMRUNU IDE7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4u MC4wMSByb3dzPTEgd2lkdGg9NCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKygyIHJvd3MpCisK Ky0tIFRlc3QgYXNzb3J0ZWQgdmFyaWF0aW9ucyBpbiBjYXBpdGFsaXphdGlvbiwgd2hpdGVzcGFj ZSwgYW5kIHdoaWNoIHBhcnRzIG9mCistLSB0aGUgcmVsYXRpb24gaWRlbnRpZmllciBhcmUgaW5j bHVkZWQuIFRoZXNlIHNob3VsZCBhbGwgd29yay4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnU0VRX1NDQU4oeCknOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD00KQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCkgLyogbm90IG1hdGNoZWQgKi8KKygz IHJvd3MpCisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VxX3NjYW4oeEB5KSc7CitF WFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQg IChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTih4QHkpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiBTRUxFQ1QgMTsK KyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAx IHJvd3M9MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCMy KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTiAoeC95KSc7CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQp CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTih4L3kpIC8qIG5vdCBtYXRjaGVk ICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyAgU0VRX1NDQU4g KCB4IC8geSAuIHogKSAgJzsKK0VYUExBSU4gU0VMRUNUIDE7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFJlc3VsdCAgKGNvc3Q9MC4wMC4uMC4wMSByb3dzPTEgd2lkdGg9NCkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgveS56KSAvKiBub3QgbWF0Y2hlZCAq LworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigieCIj Mi8ieSIuInoiQCJ0IiknOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9MSB3aWR0aD00KQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oeCMyL3kuekB0KSAvKiBub3QgbWF0Y2hl ZCAqLworKDMgcm93cykKKworLS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRVUVOVElBTF9TQ0FOKHgpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRVUVOVElBTF9TQ0FOKHgpIgor REVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIg IlNFUVVFTlRJQUxfU0NBTiIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4n OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJTRVFfU0NBTiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRh eCBlcnJvciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VR X1NDQU4oJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2Fk dmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTigiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJw Z19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIiIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IHVudGVybWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciBhdCBlbmQgb2YgaW5w dXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIiIpJzsKK0VSUk9SOiAg aW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VR X1NDQU4oIiIpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogemVyby1sZW5ndGgg ZGVsaW1pdGVkIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiIiIKK1NFVCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4oImEiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1l dGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oImEiIgorREVUQUlMOiAgQ291 bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1 ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIyIKK0RF VEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIj IgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGludmFsaWQgdmFs dWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgorREVUQUlMOiAg Q291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9y IHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJTDogIENvdWxk IG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMiCistLSBMZWdh bCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyoqLyc7CitFWFBMQUlO IFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0 PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisoMSByb3cpCisKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSEFTSF9KT0lOKF8pLyoqKi8nOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9 MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKF8pIC8qIG5v dCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q IGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiBTRUxFQ1QgMTsKKyAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0ICAoY29zdD0wLjAwLi4wLjAxIHJvd3M9 MSB3aWR0aD00KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKHkpIC8qIG5v dCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8q IGNvbW1lbnQgKi8gSEFTSF9KT0lOKHkvLyp4Ki96KSc7CitFWFBMQUlOIFNFTEVDVCAxOworICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93 cz0xIHdpZHRoPTQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBIQVNIX0pPSU4oeS96KSAv KiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworLS0gVW50ZXJtaW5hdGVkIGNvbW1lbnRzLgor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKic7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIi8qIgorREVUQUlMOiAgQ291 bGQgbm90IHBhcnNlIGFkdmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0 CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMn OworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFk dmljZSI6ICJKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzIgorREVUQUlMOiAgQ291bGQgbm90IHBh cnNlIGFkdmljZTogdW50ZXJtaW5hdGVkIGNvbW1lbnQgYXQgZW5kIG9mIGlucHV0CistLSBOZXN0 ZWQgY29tbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoZSBmaXJzdCBvZiB0aGVzZSBpcyBs ZWdhbCBhbmQKKy0tIHRoZSBzZWNvbmQgaXMgbm90LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICcvKi8qLyc7CitFWFBMQUlOIFNFTEVDVCAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBSZXN1bHQgIChjb3N0PTAuMDAuLjAuMDEgcm93cz0xIHdpZHRoPTQpCisoMSByb3cp CisKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAqLyovJzsKK0VSUk9S OiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAi LyovKiBzdHVmZiAqLyovIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4 IGVycm9yIGF0IG9yIG5lYXIgIioiCistLSBGb3JlaWduIGpvaW4gcmVxdWlyZXMgbXVsdGlwbGUg cmVsYXRpb24gaWRlbnRpZmllcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJ R05fSk9JTihhKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxh bl9hZHZpY2UuYWR2aWNlIjogIkZPUkVJR05fSk9JTihhKSIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4g b25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAiKSIKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnRk9SRUlHTl9KT0lOKChhKSknOworRVJST1I6ICBpbnZhbGlkIHZhbHVlIGZv ciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJGT1JFSUdOX0pPSU4oKGEpKSIK K0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IEZPUkVJR05fSk9JTiB0YXJnZXRzIG11 c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50aWZpZXIgYXQgb3IgbmVhciAi KSIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvbWVzb24uYnVpbGQgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi4zNDUyZTVhZDQ4ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvbWVzb24uYnVpbGQKQEAgLTAsMCArMSw3MCBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjItMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworcGdfcGxh bl9hZHZpY2Vfc291cmNlcyA9IGZpbGVzKAorICAncGdfcGxhbl9hZHZpY2UuYycsCisgICdwZ3Bh X2FzdC5jJywKKyAgJ3BncGFfY29sbGVjdG9yLmMnLAorICAncGdwYV9pZGVudGlmaWVyLmMnLAor ICAncGdwYV9qb2luLmMnLAorICAncGdwYV9vdXRwdXQuYycsCisgICdwZ3BhX3BsYW5uZXIuYycs CisgICdwZ3BhX3NjYW4uYycsCisgICdwZ3BhX3Ryb3ZlLmMnLAorICAncGdwYV93YWxrZXIuYycs CispCisKK3BncGFfc2Nhbm5lciA9IGN1c3RvbV90YXJnZXQoJ3BncGFfc2Nhbm5lcicsCisgIGlu cHV0OiAncGdwYV9zY2FubmVyLmwnLAorICBvdXRwdXQ6ICdwZ3BhX3NjYW5uZXIuYycsCisgIGNv bW1hbmQ6IGZsZXhfY21kLAorKQorZ2VuZXJhdGVkX3NvdXJjZXMgKz0gcGdwYV9zY2FubmVyCitw Z19wbGFuX2FkdmljZV9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorCitwZ3BhX3BhcnNlciA9IGN1 c3RvbV90YXJnZXQoJ3BncGFfcGFyc2VyJywKKyAgaW5wdXQ6ICdwZ3BhX3BhcnNlci55JywKKyAg a3dhcmdzOiBiaXNvbl9rdywKKykKK2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfcGFyc2VyLnRv X2xpc3QoKQorcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSBwZ3BhX3BhcnNlcgorCitpZiBob3N0 X3N5c3RlbSA9PSAnd2luZG93cycKKyAgcGdfcGxhbl9hZHZpY2Vfc291cmNlcyArPSByY19saWJf Z2VuLnByb2Nlc3Mod2luMzJ2ZXJfcmMsIGV4dHJhX2FyZ3M6IFsKKyAgICAnLS1OQU1FJywgJ3Bn X3BsYW5fYWR2aWNlJywKKyAgICAnLS1GSUxFREVTQycsICdwZ19wbGFuX2FkdmljZSAtIGhlbHAg dGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuJyxdKQorZW5kaWYKKworcGdfcGxhbl9hZHZp Y2UgPSBzaGFyZWRfbW9kdWxlKCdwZ19wbGFuX2FkdmljZScsCisgIHBnX3BsYW5fYWR2aWNlX3Nv dXJjZXMsCisgIGluY2x1ZGVfZGlyZWN0b3JpZXM6IGluY2x1ZGVfZGlyZWN0b3JpZXMoJy4nKSwK KyAga3dhcmdzOiBjb250cmliX21vZF9hcmdzLAorKQorY29udHJpYl90YXJnZXRzICs9IHBnX3Bs YW5fYWR2aWNlCisKK2luc3RhbGxfZGF0YSgKKyAgJ3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsJywK KyAgJ3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wnLAorICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdz LAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzogJ3BnX3BsYW5fYWR2aWNlJywKKyAgJ3NkJzog bWVzb24uY3VycmVudF9zb3VyY2VfZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRf ZGlyKCksCisgICdyZWdyZXNzJzogeworICAgICdzcWwnOiBbCisgICAgICAnZ2F0aGVyJywKKyAg ICAgICdqb2luX29yZGVyJywKKyAgICAgICdqb2luX3N0cmF0ZWd5JywKKyAgICAgICdsb2NhbF9j b2xsZWN0b3InLAorICAgICAgJ3BhcnRpdGlvbndpc2UnLAorICAgICAgJ3NjYW4nLAorICAgICAg J3N5bnRheCcsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAgICAndGVzdHMnOiBbCisgICAg ICAndC8wMDFfcmVncmVzcy5wbCcsCisgICAgXSwKKyAgfSwKK30KZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi4yOWY0ZjIyNDg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwKQEAgLTAsMCArMSw0MiBAQAor LyogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAqLworCist LSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3FsLCByYXRoZXIgdGhhbiB2aWEg Q1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2 aWNlIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9EVUxFX1BBVEhO QU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UnCitMQU5HVUFHRSBDIFNUUklD VDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkK K1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19jbGVhcl9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdf Z2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJpZ2ludCwKKwlPVVQgdXNlcmlk IG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmlnaW50LAorCU9VVCBjb2xsZWN0 aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQsCisJT1VUIGFkdmljZSB0ZXh0 CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdwZ19nZXRf Y29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitDUkVBVEUgRlVO Q1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAorCU9VVCBpZCBiaWdpbnQsCisJ T1VUIHVzZXJpZCBvaWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBxdWVyeWlkIGJpZ2ludCwKKwlP VVQgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBxdWVyeSB0ZXh0LAorCU9VVCBh ZHZpY2UgdGV4dAorKQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FTICdNT0RVTEVfUEFUSE5BTUUn LCAncGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFOR1VBR0UgQyBTVFJJQ1Q7CisK K1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkg RlJPTSBQVUJMSUM7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5f YWR2aWNlLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2NTkzMWM5NjBmCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCkBAIC0wLDAg KzEsNDU1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5jCisg KgkgIG1haW4gZW50cnlwb2ludHMgZm9yIGdlbmVyYXRpbmcgYW5kIGFwcGx5aW5nIHBsYW5uZXIg YWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFs IERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3Bs YW5fYWR2aWNlLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3Rn cmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfYXN0 LmgiCisjaW5jbHVkZSAicGdwYV9jb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZp ZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5o IgorI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisj aW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5o IgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVkZSAiY29tbWFu ZHMvZXhwbGFpbl9zdGF0ZS5oIgorI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJvcHRp bWl6ZXIvcGxhbm5lci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCisjaW5j bHVkZSAidXRpbHMvZ3VjLmgiCisKK1BHX01PRFVMRV9NQUdJQzsKKworc3RhdGljIHBncGFfc2hh cmVkX3N0YXRlICpwZ3BhX3N0YXRlID0gTlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAqcGdwYV9kc2Ff YXJlYSA9IE5VTEw7CisKKy8qIEdVQyB2YXJpYWJsZXMgKi8KK2NoYXIJICAgKnBnX3BsYW5fYWR2 aWNlX2FkdmljZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhw bGFpbl9zdXBwbGllZF9hZHZpY2UgPSB0cnVlOworaW50CQkJcGdfcGxhbl9hZHZpY2VfbG9jYWxf Y29sbGVjdGlvbl9saW1pdCA9IDA7CitpbnQJCQlwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVj dGlvbl9saW1pdCA9IDA7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWUgKi8KK3N0YXRpYyBleHBsYWlu X3Blcl9wbGFuX2hvb2tfdHlwZSBwcmV2X2V4cGxhaW5fcGVyX3BsYW4gPSBOVUxMOworCisvKiBP dGhlciBmaWxlLWxldmVsIGdsb2JhbHMgKi8KK3N0YXRpYyBpbnQJZXNfZXh0ZW5zaW9uX2lkOwor c3RhdGljIE1lbW9yeUNvbnRleHQgcGdwYV9tZW1vcnlfY29udGV4dCA9IE5VTEw7CisKK3N0YXRp YyB2b2lkIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0YXRl ICplcywKKwkJCQkJCQkJCQkJCSAgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJCQkJICBQYXJzZVN0 YXRlICpwc3RhdGUpOworc3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJfcGxh bl9ob29rKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCSBJbnRvQ2xhdXNl ICppbnRvLAorCQkJCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkJCQkgY29u c3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJhbXMs CisJCQkJCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworc3RhdGljIGJvb2wg cGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4 dHJhLAorCQkJCQkJCQkJCQkgR3VjU291cmNlIHNvdXJjZSk7CitzdGF0aWMgRGVmRWxlbSAqZmlu ZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSk7CisKKy8q CisgKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lkKQor eworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hZHZpY2UiLAor CQkJCQkJCSAgICJhZHZpY2UgdG8gYXBwbHkgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nIiwKKwkJCQkJ CQkgICBOVUxMLAorCQkJCQkJCSAgICZwZ19wbGFuX2FkdmljZV9hZHZpY2UsCisJCQkJCQkJICAg TlVMTCwKKwkJCQkJCQkgICBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAgIHBn X3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJ ICAgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNlLmFs d2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSIsCisJCQkJCQkJICJFWFBMQUlOIG91dHB1dCBp bmNsdWRlcyBzdXBwbGllZCBhZHZpY2UgZXZlbiB3aXRob3V0IEVYUExBSU4gKFBMQU5fQURWSUNF KSIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhwbGFp bl9zdXBwbGllZF9hZHZpY2UsCisJCQkJCQkJIHRydWUsCisJCQkJCQkJIFBHQ19VU0VSU0VULAor CQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMKTsK KworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0 aW9uX2xpbWl0IiwKKwkJCQkJCQkiIyBvZiBhZHZpY2UgZW50cmllcyB0byByZXRhaW4gaW4gcGVy LWJhY2tlbmQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFuX2FkdmljZV9s b2NhbF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwgSU5UX01BWCwKKwkJ CQkJCQlQR0NfVVNFUlNFVCwKKwkJCQkJCQkwLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJTlVMTCwK KwkJCQkJCQlOVUxMKTsKKworCURlZmluZUN1c3RvbUludFZhcmlhYmxlKCJwZ19wbGFuX2Fkdmlj ZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMg dG8gcmV0YWluIGluIHNoYXJlZCBtZW1vcnkiLAorCQkJCQkJCU5VTEwsCisJCQkJCQkJJnBnX3Bs YW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0LAorCQkJCQkJCTAsCisJCQkJCQkJMCwg SU5UX01BWCwKKwkJCQkJCQlQR0NfU1VTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCU5VTEwsCisJCQkJCQkJTlVMTCk7CisKKwlNYXJrR1VDUHJlZml4UmVzZXJ2ZWQoInBnX3Bs YW5fYWR2aWNlIik7CisKKwkvKiBHZXQgYW4gSUQgdGhhdCB3ZSBjYW4gdXNlIHRvIGNhY2hlIGRh dGEgaW4gYW4gRXhwbGFpblN0YXRlLiAqLworCWVzX2V4dGVuc2lvbl9pZCA9IEdldEV4cGxhaW5F eHRlbnNpb25JZCgicGdfcGxhbl9hZHZpY2UiKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXcgRVhQ TEFJTiBvcHRpb25zIGltcGxlbWVudGVkIGJ5IHRoaXMgbW9kdWxlLiAqLworCVJlZ2lzdGVyRXh0 ZW5zaW9uRXhwbGFpbk9wdGlvbigicGxhbl9hZHZpY2UiLAorCQkJCQkJCQkgICBwZ19wbGFuX2Fk dmljZV9leHBsYWluX29wdGlvbl9oYW5kbGVyKTsKKworCS8qIEluc3RhbGwgaG9va3MgKi8KKwlw Z3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcygpOworCXByZXZfZXhwbGFpbl9wZXJfcGxhbiA9IGV4 cGxhaW5fcGVyX3BsYW5faG9vazsKKwlleHBsYWluX3Blcl9wbGFuX2hvb2sgPSBwZ19wbGFuX2Fk dmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2s7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIHNoYXJl ZCBzdGF0ZSB3aGVuIGZpcnN0IGNyZWF0ZWQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRf c2hhcmVkX3N0YXRlKHZvaWQgKnB0cikKK3sKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSAo cGdwYV9zaGFyZWRfc3RhdGUgKikgcHRyOworCisJTFdMb2NrSW5pdGlhbGl6ZSgmc3RhdGUtPmxv Y2ssIExXTG9ja05ld1RyYW5jaGVJZCgicGdfcGxhbl9hZHZpY2VfbG9jayIpKTsKKwlzdGF0ZS0+ ZHNhX3RyYW5jaGUgPSBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNlX2RzYSIpOwor CXN0YXRlLT5hcmVhID0gRFNBX0hBTkRMRV9JTlZBTElEOworCXN0YXRlLT5zaGFyZWRfY29sbGVj dG9yID0gSW52YWxpZERzYVBvaW50ZXI7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRv IGEgbWVtb3J5IGNvbnRleHQgd2hlcmUgbG9uZy1saXZlZCBkYXRhIG1hbmFnZWQgYnkgdGhpcwor ICogbW9kdWxlIGNhbiBiZSBzdG9yZWQuCisgKi8KK01lbW9yeUNvbnRleHQKK3BnX3BsYW5fYWR2 aWNlX2dldF9tY3h0KHZvaWQpCit7CisJaWYgKHBncGFfbWVtb3J5X2NvbnRleHQgPT0gTlVMTCkK KwkJcGdwYV9tZW1vcnlfY29udGV4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlD b250ZXh0LAorCQkJCQkJCQkJCQkJCSJwZ19wbGFuX2FkdmljZSIsCisJCQkJCQkJCQkJCQkJQUxM T0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwlyZXR1cm4gcGdwYV9tZW1vcnlfY29udGV4dDsKK30K KworLyoKKyAqIEdldCBhIHBvaW50ZXIgdG8gb3VyIHNoYXJlZCBzdGF0ZS4KKyAqCisgKiBJZiBu byBzaGFyZWQgc3RhdGUgZXhpc3RzLCBjcmVhdGUgYW5kIGluaXRpYWxpemUgaXQuIElmIGl0IGRv ZXMgZXhpc3QgYnV0CisgKiB0aGlzIGJhY2tlbmQgaGFzIG5vdCB5ZXQgYWNjZXNzZWQgaXQsIGF0 dGFjaCB0byBpdC4gT3RoZXJ3aXNlLCBqdXN0IHJldHVybgorICogb3VyIGNhY2hlZCBwb2ludGVy LgorICoKKyAqIEFsb25nIHRoZSB3YXksIG1ha2Ugc3VyZSB0aGUgcmVsZXZhbnQgTFdMb2NrIHRy YW5jaGVzIGFyZSByZWdpc3RlcmVkLgorICovCitwZ3BhX3NoYXJlZF9zdGF0ZSAqCitwZ19wbGFu X2FkdmljZV9hdHRhY2godm9pZCkKK3sKKwlpZiAocGdwYV9zdGF0ZSA9PSBOVUxMKQorCXsKKwkJ Ym9vbAkJZm91bmQ7CisKKwkJcGdwYV9zdGF0ZSA9CisJCQlHZXROYW1lZERTTVNlZ21lbnQoInBn X3BsYW5fYWR2aWNlIiwgc2l6ZW9mKHBncGFfc2hhcmVkX3N0YXRlKSwKKwkJCQkJCQkgICBwZ3Bh X2luaXRfc2hhcmVkX3N0YXRlLCAmZm91bmQpOworCX0KKworCXJldHVybiBwZ3BhX3N0YXRlOwor fQorCisvKgorICogUmV0dXJuIGEgcG9pbnRlciB0byBwZ19wbGFuX2FkdmljZSdzIERTQSBhcmVh LCBjcmVhdGluZyBpdCBpZiBuZWVkZWQuCisgKi8KK2RzYV9hcmVhICoKK3BnX3BsYW5fYWR2aWNl X2RzYV9hcmVhKHZvaWQpCit7CisJaWYgKHBncGFfZHNhX2FyZWEgPT0gTlVMTCkKKwl7CisJCXBn cGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCQlkc2Ff aGFuZGxlCWFyZWFfaGFuZGxlOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4dCgp KTsKKworCQlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKwkJYXJl YV9oYW5kbGUgPSBzdGF0ZS0+YXJlYTsKKwkJaWYgKGFyZWFfaGFuZGxlID09IERTQV9IQU5ETEVf SU5WQUxJRCkKKwkJeworCQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9jcmVhdGUoc3RhdGUtPmRzYV90 cmFuY2hlKTsKKwkJCWRzYV9waW4ocGdwYV9kc2FfYXJlYSk7CisJCQlzdGF0ZS0+YXJlYSA9IGRz YV9nZXRfaGFuZGxlKHBncGFfZHNhX2FyZWEpOworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxv Y2spOworCQl9CisJCWVsc2UKKwkJeworCQkJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOwor CQkJcGdwYV9kc2FfYXJlYSA9IGRzYV9hdHRhY2goYXJlYV9oYW5kbGUpOworCQl9CisKKwkJZHNh X3Bpbl9tYXBwaW5nKHBncGFfZHNhX2FyZWEpOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKwl9CisKKwlyZXR1cm4gcGdwYV9kc2FfYXJlYTsKK30KKworLyoKKyAqIFdh cyB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uIHNwZWNpZmllZCBhbmQgbm90IHNldCB0byBmYWxzZT8K KyAqLworYm9vbAorcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oRXhwbGFpblN0YXRlICpl cykKK3sKKwlib29sCSAgICpwbGFuX2FkdmljZSA9IE5VTEw7CisKKwlpZiAoZXMgIT0gTlVMTCkK KwkJcGxhbl9hZHZpY2UgPSBHZXRFeHBsYWluRXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lv bl9pZCk7CisJcmV0dXJuIHBsYW5fYWR2aWNlICE9IE5VTEwgJiYgKnBsYW5fYWR2aWNlOworfQor CisvKgorICogSGFuZGxlciBmb3IgRVhQTEFJTiAoUExBTl9BRFZJQ0UpLgorICovCitzdGF0aWMg dm9pZAorcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9vcHRpb25faGFuZGxlcihFeHBsYWluU3RhdGUg KmVzLCBEZWZFbGVtICpvcHQsCisJCQkJCQkJCQkgIFBhcnNlU3RhdGUgKnBzdGF0ZSkKK3sKKwli b29sCSAgICpwbGFuX2FkdmljZTsKKworCXBsYW5fYWR2aWNlID0gR2V0RXhwbGFpbkV4dGVuc2lv blN0YXRlKGVzLCBlc19leHRlbnNpb25faWQpOworCisJaWYgKHBsYW5fYWR2aWNlID09IE5VTEwp CisJeworCQlwbGFuX2FkdmljZSA9IHBhbGxvYzBfb2JqZWN0KGJvb2wpOworCQlTZXRFeHBsYWlu RXh0ZW5zaW9uU3RhdGUoZXMsIGVzX2V4dGVuc2lvbl9pZCwgcGxhbl9hZHZpY2UpOworCX0KKwor CSpwbGFuX2FkdmljZSA9IGRlZkdldEJvb2xlYW4ob3B0KTsKK30KKworLyoKKyAqIERpc3BsYXkg YSBzdHJpbmcgdGhhdCBpcyBsaWtlbHkgdG8gY29uc2lzdCBvZiBtdWx0aXBsZSBsaW5lcyBpbiBF WFBMQUlOCisgKiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBs YWluX3RleHRfbXVsdGlsaW5lKEV4cGxhaW5TdGF0ZSAqZXMsIGNoYXIgKnFsYWJlbCwKKwkJCQkJ CQkJCSAgY2hhciAqdmFsdWUpCit7CisJY2hhcgkgICAqczsKKworCS8qIEZvciBub24tdGV4dCBm b3JtYXRzLCBpdCdzIGJlc3Qgbm90IHRvIGFkZCBhbnkgc3BlY2lhbCBoYW5kbGluZy4gKi8KKwlp ZiAoZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCXsKKwkJRXhwbGFpblByb3Bl cnR5VGV4dChxbGFiZWwsIHZhbHVlLCBlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbiB0ZXh0 IGZvcm1hdCwgaWYgdGhlcmUgaXMgbm8gZGF0YSwgZGlzcGxheSBub3RoaW5nLiAqLworCWlmICgq cWxhYmVsID09ICdcMCcpCisJCXJldHVybjsKKworCS8qCisJICogSXQgbG9va3MgbmljZXN0IHRv IGluZGVudCBlYWNoIGxpbmUgb2YgdGhlIGFkdmljZSBzZXBhcmF0ZWx5LCBiZWdpbm5pbmcKKwkg KiBvbiB0aGUgbGluZSBiZWxvdyB0aGUgbGFiZWwuCisJICovCisJRXhwbGFpbkluZGVudFRleHQo ZXMpOworCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiVzOlxuIiwgcWxhYmVsKTsKKwllcy0+ aW5kZW50Kys7CisJd2hpbGUgKChzID0gc3RyY2hyKHZhbHVlLCAnXG4nKSkgIT0gTlVMTCkKKwl7 CisJCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhlcy0+ c3RyLCB2YWx1ZSwgKHMgLSB2YWx1ZSkgKyAxKTsKKwkJdmFsdWUgPSBzICsgMTsKKwl9CisKKwkv KiBEb24ndCBpbnRlcnByZXQgYSB0ZXJtaW5hbCBuZXdsaW5lIGFzIGEgcmVxdWVzdCBmb3IgYW4g ZW1wdHkgbGluZS4gKi8KKwlpZiAoKnZhbHVlICE9ICdcMCcpCisJeworCQlFeHBsYWluSW5kZW50 VGV4dChlcyk7CisJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiVzXG4iLCB2YWx1ZSk7CisJ fQorCisJZXMtPmluZGVudC0tOworfQorCisvKgorICogQWRkIGFkdmljZSBmZWVkYmFjayB0byB0 aGUgRVhQTEFJTiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2FkdmljZV9leHBs YWluX2ZlZWRiYWNrKEV4cGxhaW5TdGF0ZSAqZXMsIExpc3QgKmZlZWRiYWNrKQoreworCVN0cmlu Z0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZvcmVhY2hfbm9kZShE ZWZFbGVtLCBpdGVtLCBmZWVkYmFjaykKKwl7CisJCWludAkJCWZsYWdzID0gZGVmR2V0SW50MzIo aXRlbSk7CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJXMgLyogIiwgaXRlbS0+ZGVmbmFt ZSk7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX0ZVTEwpICE9IDApCisJCXsKKwkJCUFz c2VydCgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX1BBUlRJQUwpICE9IDApOworCQkJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAibWF0Y2hlZCIpOworCQl9CisJCWVsc2UgaWYgKChmbGFncyAmIFBHUEFf VEVfTUFUQ0hfUEFSVElBTCkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgInBhcnRp YWxseSBtYXRjaGVkIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIm5vdCBt YXRjaGVkIik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0lOQVBQTElDQUJMRSkgIT0gMCkKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgaW5hcHBsaWNhYmxlIik7CisJCWlmICgoZmxhZ3Mg JiBQR1BBX1RFX0NPTkZMSUNUSU5HKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAi LCBjb25mbGljdGluZyIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9GQUlMRUQpICE9IDApCisJ CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIsIGZhaWxlZCIpOworCQlhcHBlbmRTdHJpbmdJbmZv KCZidWYsICIgKi9cbiIpOworCX0KKworCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0 aWxpbmUoZXMsICJTdXBwbGllZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJICBidWYuZGF0YSk7 Cit9CisKKy8qCisgKiBBZGQgcmVsZXZhbnQgZGV0YWlscywgaWYgYW55LCB0byB0aGUgRVhQTEFJ TiBvdXRwdXQgZm9yIGEgc2luZ2xlIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFuX2Fk dmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LAorCQkJ CQkJCQkJIEludG9DbGF1c2UgKmludG8sCisJCQkJCQkJCQkgRXhwbGFpblN0YXRlICplcywKKwkJ CQkJCQkJCSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCSBQYXJhbUxpc3RJbmZv IHBhcmFtcywKKwkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVudikKK3sKKwlib29s CQlzaG91bGRfZXhwbGFpbjsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJTGlzdAkgICAqcGdw YV9saXN0OworCisJaWYgKHByZXZfZXhwbGFpbl9wZXJfcGxhbikKKwkJcHJldl9leHBsYWluX3Bl cl9wbGFuKHBsYW5uZWRzdG10LCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBhcmFtcywKKwkJCQkJ CQkgIHF1ZXJ5RW52KTsKKworCS8qIFNob3VsZCBhbiBhZHZpY2Ugc3RyaW5nIGJlIHBhcnQgb2Yg dGhlIEVYUExBSU4gb3V0cHV0PyAqLworCXNob3VsZF9leHBsYWluID0gcGdfcGxhbl9hZHZpY2Vf c2hvdWxkX2V4cGxhaW4oZXMpOworCisJLyogRmluZCBhbnkgZGF0YSBwZ3BhX3BsYW5uZXJfc2h1 dGRvd24gc3Rhc2hlZCBpbiB0aGUgUGxhbm5lZFN0bXQuICovCisJcGdwYV9pdGVtID0gZmluZF9k ZWZlbGVtX2J5X2RlZm5hbWUocGxhbm5lZHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJCQkJ CQkicGdfcGxhbl9hZHZpY2UiKTsKKwlwZ3BhX2xpc3QgPSBwZ3BhX2l0ZW0gPT0gTlVMTCA/IE5V TEwgOiAoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZzsKKworCS8qCisJICogQnkgZGVmYXVsdCwgaWYg dGhlcmUgaXMgYSByZWNvcmQgb2YgYXR0ZW1wdGluZyB0byBhcHBseSBhZHZpY2UgZHVyaW5nCisJ ICogcXVlcnkgcGxhbm5pbmcsIHdlIGFsd2F5cyBvdXRwdXQgdGhhdCBpbmZvcm1hdGlvbiwgYnV0 IHRoZSB1c2VyIGNhbiBzZXQKKwkgKiBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBw bGllZF9hZHZpY2UgPSBmYWxzZSB0byBzdXBwcmVzcyB0aGF0CisJICogYmVoYXZpb3IuIElmIHRo ZXkgZG8sIHdlJ2xsIG9ubHkgZGlzcGxheSBpdCB3aGVuIHRoZSBQTEFOX0FEVklDRSBvcHRpb24K KwkgKiB3YXMgc3BlY2lmaWVkIGFuZCBub3Qgc2V0IHRvIGZhbHNlLgorCSAqCisJICogTkI6IElm IHdlJ3JlIGV4cGxhaW5pbmcgYSBxdWVyeSBwbGFubmVkIGJlZm9yZWhhbmQgLS0gaS5lLiBhIHBy ZXBhcmVkCisJICogc3RhdGVtZW50IC0tIHRoZSBhcHBsaWNhdGlvbiBvZiBxdWVyeSBhZHZpY2Ug bWF5IG5vdCBoYXZlIGJlZW4KKwkgKiByZWNvcmRlZCwgYW5kIHRoZXJlZm9yZSB0aGlzIHdvbid0 IGJlIGFibGUgdG8gc2hvdyBhbnl0aGluZy4KKwkgKi8KKwlpZiAocGdwYV9saXN0ICE9IE5VTEwg JiYgKHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSB8fAorCQkJ CQkJCSAgc2hvdWxkX2V4cGxhaW4pKQorCXsKKwkJRGVmRWxlbSAgICAqZmVlZGJhY2s7CisKKwkJ ZmVlZGJhY2sgPSBmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJmZWVkYmFjayIp OworCQlpZiAoZmVlZGJhY2sgIT0gTlVMTCkKKwkJCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fZmVl ZGJhY2soZXMsIChMaXN0ICopIGZlZWRiYWNrLT5hcmcpOworCX0KKworCS8qCisJICogSWYgdGhl IFBMQU5fQURWSUNFIG9wdGlvbiB3YXMgc3BlY2lmaWVkIC0tIGFuZCBub3Qgc2VudCB0byBGQUxT RSAtLQorCSAqIHNob3cgZ2VuZXJhdGVkIGFkdmljZS4KKwkgKi8KKwlpZiAoc2hvdWxkX2V4cGxh aW4pCisJeworCQlEZWZFbGVtICAgICphZHZpY2Vfc3RyaW5nX2l0ZW07CisJCWNoYXIJICAgKmFk dmljZV9zdHJpbmcgPSBOVUxMOworCisJCWFkdmljZV9zdHJpbmdfaXRlbSA9CisJCQlmaW5kX2Rl ZmVsZW1fYnlfZGVmbmFtZShwZ3BhX2xpc3QsICJhZHZpY2Vfc3RyaW5nIik7CisJCWlmIChhZHZp Y2Vfc3RyaW5nX2l0ZW0gIT0gTlVMTCkKKwkJeworCQkJLyogQWR2aWNlIGhhcyBhbHJlYWR5IGJl ZW4gZ2VuZXJhdGVkOyB3ZSBjYW4gcmV1c2UgaXQuICovCisJCQlhZHZpY2Vfc3RyaW5nID0gc3Ry VmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJnKTsKKwkJfQorCQlpZiAoYWR2aWNlX3N0cmluZyAh PSBOVUxMICYmIGFkdmljZV9zdHJpbmdbMF0gIT0gJ1wwJykKKwkJCXBnX3BsYW5fYWR2aWNlX2V4 cGxhaW5fdGV4dF9tdWx0aWxpbmUoZXMsICJHZW5lcmF0ZWQgUGxhbiBBZHZpY2UiLAorCQkJCQkJ CQkJCQkJICBhZHZpY2Vfc3RyaW5nKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayBob29rIGZvciBw Z19wbGFuX2FkdmljZS5hZHZpY2UKKyAqLworc3RhdGljIGJvb2wKK3BnX3BsYW5fYWR2aWNlX2Fk dmljZV9jaGVja19ob29rKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3VjU291cmNlIHNv dXJjZSkKK3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCB0bXBj b250ZXh0OworCWNoYXIJICAgKmVycm9yOworCisJaWYgKCpuZXd2YWwgPT0gTlVMTCkKKwkJcmV0 dXJuIHRydWU7CisKKwl0bXBjb250ZXh0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRN ZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJICAgInBnX3BsYW5fYWR2aWNlLmFkdmljZSIsCisJCQkJ CQkJCQkgICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHRtcGNvbnRleHQpOworCisJLyoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRv IHNhdmUgdGhlIHBhcnNlIHRyZWUgdGhhdCB3ZSBjb25zdHJ1Y3QgaGVyZSBmb3IKKwkgKiBldmVu dHVhbCB1c2Ugd2hlbiBwbGFubmluZyB3aXRoIHRoaXMgYWR2aWNlLCBidXQgKmV4dHJhIGNhbiBv bmx5IHBvaW50CisJICogdG8gYSBzaW5nbGUgZ3VjX21hbGxvYydkIGNodW5rLCBhbmQgb3VyIHBh cnNlIHRyZWUgaW52b2x2ZXMgYW4KKwkgKiBhcmJpdHJhcnkgbnVtYmVyIG9mIG1lbW9yeSBhbGxv Y2F0aW9ucy4KKwkgKi8KKwkodm9pZCkgcGdwYV9wYXJzZSgqbmV3dmFsLCAmZXJyb3IpOworCisJ aWYgKGVycm9yICE9IE5VTEwpCisJeworCQlHVUNfY2hlY2tfZXJyZGV0YWlsKCJDb3VsZCBub3Qg cGFyc2UgYWR2aWNlOiAlcyIsIGVycm9yKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGNv bnRleHQpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBTZWFyY2ggYSBsaXN0IG9mIERl ZkVsZW0gb2JqZWN0cyBmb3IgYSBnaXZlbiBkZWZuYW1lLgorICovCitzdGF0aWMgRGVmRWxlbSAq CitmaW5kX2RlZmVsZW1fYnlfZGVmbmFtZShMaXN0ICpkZWZsaXN0LCBjaGFyICpkZWZuYW1lKQor eworCWZvcmVhY2hfbm9kZShEZWZFbGVtLCBpdGVtLCBkZWZsaXN0KQorCXsKKwkJaWYgKHN0cmNt cChpdGVtLT5kZWZuYW1lLCBkZWZuYW1lKSA9PSAwKQorCQkJcmV0dXJuIGl0ZW07CisJfQorCisJ cmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3Bs YW5fYWR2aWNlLmNvbnRyb2wgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmNvbnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFhNmZkYzll N2IyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fk dmljZS5jb250cm9sCkBAIC0wLDAgKzEsNSBAQAorIyBwZ19wbGFuX2FkdmljZSBleHRlbnNpb24K K2NvbW1lbnQgPSAnaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW4nCitkZWZhdWx0 X3ZlcnNpb24gPSAnMS4wJworbW9kdWxlX3BhdGhuYW1lID0gJyRsaWJkaXIvcGdfcGxhbl9hZHZp Y2UnCityZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdfcGxhbl9hZHZpY2UuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZp Y2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDJlNjVhMzM4MmIK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNl LmgKQEAgLTAsMCArMSwzOSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdfcGxhbl9h ZHZpY2UuaAorICoJICBtYWluIGhlYWRlciBmaWxlIGZvciBwZ19wbGFuX2FkdmljZSBjb250cmli IG1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19w bGFuX2FkdmljZS5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdfUExB Tl9BRFZJQ0VfSAorI2RlZmluZSBQR19QTEFOX0FEVklDRV9ICisKKyNpbmNsdWRlICJjb21tYW5k cy9leHBsYWluX3N0YXRlLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJ1dGlscy9kc2EuaCIKKwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9zaGFyZWRfc3RhdGUKK3sKKwlMV0xvY2sJCWxvY2s7CisJaW50CQkJZHNhX3Ry YW5jaGU7CisJZHNhX2hhbmRsZQlhcmVhOworCWRzYV9wb2ludGVyIHNoYXJlZF9jb2xsZWN0b3I7 Cit9IHBncGFfc2hhcmVkX3N0YXRlOworCisvKiBHVUMgdmFyaWFibGVzICovCitleHRlcm4gaW50 CXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQ7CitleHRlcm4gaW50CXBnX3Bs YW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0aW9uX2xpbWl0OworZXh0ZXJuIGNoYXIgKnBnX3BsYW5f YWR2aWNlX2FkdmljZTsKKworLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLworZXh0ZXJuIE1lbW9y eUNvbnRleHQgcGdfcGxhbl9hZHZpY2VfZ2V0X21jeHQodm9pZCk7CitleHRlcm4gcGdwYV9zaGFy ZWRfc3RhdGUgKnBnX3BsYW5fYWR2aWNlX2F0dGFjaCh2b2lkKTsKK2V4dGVybiBkc2FfYXJlYSAq cGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEodm9pZCk7CitleHRlcm4gYm9vbCBwZ19wbGFuX2Fkdmlj ZV9zaG91bGRfZXhwbGFpbihFeHBsYWluU3RhdGUgKmVzKTsKKworI2VuZGlmCmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmMgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVm ODIyYmNlMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3Bh X2FzdC5jCkBAIC0wLDAgKzEsMzkyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X2FzdC5jCisgKgkgIGFkZGl0aW9uYWwgc3VwcG9ydGluZyBjb2RlIHJlbGF0ZWQgdG8gcGxhbiBh ZHZpY2UgcGFyc2luZworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2FzdC5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBv c3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorCisjaW5jbHVkZSAiZnVuY2FwaS5o IgorI2luY2x1ZGUgInV0aWxzL2FycmF5LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIK Kworc3RhdGljIGJvb2wgcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQoaW50IG5yaWRzLCBw Z3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCwKKwkJCQkJCQkJCQkgIGJvb2wgKnJpZHNfdXNlZCk7CisKKy8qCisgKiBHZXQgYSBDIHN0 cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgYWR2aWNlIHRhZy4KKyAqLwor Y2hhciAqCitwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBhZHZp Y2VfdGFnKQoreworCXN3aXRjaCAoYWR2aWNlX3RhZykKKwl7CisJCWNhc2UgUEdQQV9UQUdfQklU TUFQX0hFQVBfU0NBTjoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NBTiI7CisJCWNhc2UgUEdQ QV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuICJGT1JFSUdOX0pPSU4iOworCQljYXNlIFBH UEFfVEFHX0dBVEhFUjoKKwkJCXJldHVybiAiR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19HQVRI RVJfTUVSR0U6CisJCQlyZXR1cm4gIkdBVEhFUl9NRVJHRSI7CisJCWNhc2UgUEdQQV9UQUdfSEFT SF9KT0lOOgorCQkJcmV0dXJuICJIQVNIX0pPSU4iOworCQljYXNlIFBHUEFfVEFHX0lOREVYX09O TFlfU0NBTjoKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19J TkRFWF9TQ0FOOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2FzZSBQR1BBX1RBR19KT0lO X09SREVSOgorCQkJcmV0dXJuICJKT0lOX09SREVSIjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9K T0lOX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX01BVEVSSUFMSVpFIjsKKwkJ Y2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJNRVJHRV9KT0lOX1BM QUlOIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVy biAiTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUiOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09Q X01FTU9JWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9MT09QX01FTU9JWkUiOworCQljYXNlIFBHUEFf VEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9QTEFJTiI7CisJ CWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJuICJOT19HQVRIRVIiOworCQljYXNl IFBHUEFfVEFHX1BBUlRJVElPTldJU0U6CisJCQlyZXR1cm4gIlBBUlRJVElPTldJU0UiOworCQlj YXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX05P Tl9VTklRVUUiOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiAi U0VNSUpPSU5fVU5JUVVFIjsKKwkJY2FzZSBQR1BBX1RBR19TRVFfU0NBTjoKKwkJCXJldHVybiAi U0VRX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX1RJRF9TQ0FOOgorCQkJcmV0dXJuICJUSURfU0NB TiI7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAq IENvbnZlcnQgYW4gYWR2aWNlIHRhZywgZm9ybWF0dGVkIGFzIGEgc3RyaW5nIHRoYXQgaGFzIGFs cmVhZHkgYmVlbgorICogZG93bmNhc2VkIGFzIGFwcHJvcHJpYXRlLCB0byBhIHBncGFfYWR2aWNl X3RhZ190eXBlLgorICoKKyAqIElmIHdlIHN1Y2NlZWQsIHNldCAqZmFpbCA9IGZhbHNlIGFuZCBy ZXR1cm4gdGhlIHJlc3VsdDsgaWYgd2UgZmFpbCwKKyAqIHNldCAqZmFpbCA9IHRydWUgYW5kIHJl dXJuIGFuIGFyYml0cmFyeSB2YWx1ZS4KKyAqLworcGdwYV9hZHZpY2VfdGFnX3R5cGUKK3BncGFf cGFyc2VfYWR2aWNlX3RhZyhjb25zdCBjaGFyICp0YWcsIGJvb2wgKmZhaWwpCit7CisJKmZhaWwg PSBmYWxzZTsKKworCXN3aXRjaCAodGFnWzBdKQorCXsKKwkJY2FzZSAnYic6CisJCQlpZiAoc3Ry Y21wKHRhZywgImJpdG1hcF9oZWFwX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19C SVRNQVBfSEVBUF9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJaWYgKHN0cmNtcCh0 YWcsICJmb3JlaWduX2pvaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19GT1JFSUdOX0pP SU47CisJCQlicmVhazsKKwkJY2FzZSAnZyc6CisJCQlpZiAoc3RyY21wKHRhZywgImdhdGhlciIp ID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUjsKKwkJCWlmIChzdHJjbXAodGFnLCAi Z2F0aGVyX21lcmdlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfR0FUSEVSX01FUkdFOwor CQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJoYXNoX2pvaW4iKSA9 PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19IQVNIX0pPSU47CisJCQlicmVhazsKKwkJY2FzZSAn aSc6CisJCQlpZiAoc3RyY21wKHRhZywgImluZGV4X3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQ R1BBX1RBR19JTkRFWF9TQ0FOOworCQkJaWYgKHN0cmNtcCh0YWcsICJpbmRleF9vbmx5X3NjYW4i KSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU47CisJCQlicmVhazsK KwkJY2FzZSAnaic6CisJCQlpZiAoc3RyY21wKHRhZywgImpvaW5fb3JkZXIiKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19KT0lOX09SREVSOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJ aWYgKHN0cmNtcCh0YWcsICJtZXJnZV9qb2luX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQlyZXR1 cm4gUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRTsKKwkJCWlmIChzdHJjbXAodGFnLCAi bWVyZ2Vfam9pbl9wbGFpbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX01FUkdFX0pPSU5f UExBSU47CisJCQlicmVhazsKKwkJY2FzZSAnbic6CisJCQlpZiAoc3RyY21wKHRhZywgIm5lc3Rl ZF9sb29wX21hdGVyaWFsaXplIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xP T1BfTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm5lc3RlZF9sb29wX21lbW9pemUi KSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOworCQkJaWYg KHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9wbGFpbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFf VEFHX05FU1RFRF9MT09QX1BMQUlOOworCQkJaWYgKHN0cmNtcCh0YWcsICJub19nYXRoZXIiKSA9 PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19OT19HQVRIRVI7CisJCQlicmVhazsKKwkJY2FzZSAn cCc6CisJCQlpZiAoc3RyY21wKHRhZywgInBhcnRpdGlvbndpc2UiKSA9PSAwKQorCQkJCXJldHVy biBQR1BBX1RBR19QQVJUSVRJT05XSVNFOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYg KHN0cmNtcCh0YWcsICJzZW1pam9pbl9ub25fdW5pcXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQ QV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRTsKKwkJCWlmIChzdHJjbXAodGFnLCAic2VtaWpvaW5f dW5pcXVlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfU0VNSUpPSU5fVU5JUVVFOworCQkJ aWYgKHN0cmNtcCh0YWcsICJzZXFfc2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NF UV9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJ0aWRf c2NhbiIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJYnJlYWs7CisJ fQorCisJLyogZGlkbid0IHdvcmsgb3V0ICovCisJKmZhaWwgPSB0cnVlOworCisJLyogcmV0dXJu IGFuIGFyYml0cmFyeSB2YWx1ZSB0byB1bndpbmQgdGhlIGNhbGwgc3RhY2sgKi8KKwlyZXR1cm4g UEdQQV9UQUdfU0VRX1NDQU47Cit9CisKKy8qCisgKiBGb3JtYXQgYSBwZ3BhX2FkdmljZV90YXJn ZXQgYXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQgdG8gYSBTdHJpbmdJbmZvLgorICovCit2 b2lkCitwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLCBwZ3BhX2Fkdmlj ZV90YXJnZXQgKnRhcmdldCkKK3sKKwlpZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9J REVOVElGSUVSKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0cnVlOworCQljaGFyCSAgICpkZWxpbXM7 CisKKwkJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1QpCisJ CQlkZWxpbXMgPSAie30iOworCQllbHNlCisJCQlkZWxpbXMgPSAiKCkiOworCisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKHN0ciwgZGVsaW1zWzBdKTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2Vf dGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCWlmIChmaXJz dCkKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFy KHN0ciwgJyAnKTsKKwkJCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoc3RyLCBjaGlsZF90YXJn ZXQpOworCQl9CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgZGVsaW1zWzFdKTsKKwl9CisJ ZWxzZQorCXsKKwkJY29uc3QgY2hhciAqcnRfaWRlbnRpZmllcjsKKworCQlydF9pZGVudGlmaWVy ID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmdGFyZ2V0LT5yaWQpOworCQlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKHN0ciwgcnRfaWRlbnRpZmllcik7CisJfQorfQorCisvKgorICogRm9ybWF0IGEg cGdwYV9pbmRleF90YXJnZXQgYXMgYSBzdHJpbmcgYW5kIGFwcGVuZCByZXN1bHQgdG8gYSBTdHJp bmdJbmZvLgorICovCit2b2lkCitwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5mbyBz dHIsIHBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0KQoreworCWlmIChpdGFyZ2V0LT5pdHlwZSAh PSBQR1BBX0lOREVYX05BTUUpCisJeworCQlib29sCQlmaXJzdCA9IHRydWU7CisKKwkJaWYgKGl0 YXJnZXQtPml0eXBlID09IFBHUEFfSU5ERVhfQU5EKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhzdHIsICImJigiKTsKKwkJZWxzZQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhzdHIsICJ8 fCgiKTsKKworCQlmb3JlYWNoX3B0cihwZ3BhX2luZGV4X3RhcmdldCwgY2hpbGRfdGFyZ2V0LCBp dGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0ID0gZmFsc2U7 CisJCQllbHNlCisJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoc3RyLCAnICcpOworCQkJcGdwYV9m b3JtYXRfaW5kZXhfdGFyZ2V0KHN0ciwgY2hpbGRfdGFyZ2V0KTsKKwkJfQorCQlhcHBlbmRTdHJp bmdJbmZvQ2hhcihzdHIsICcpJyk7CisJfQorCWVsc2UKKwl7CisJCWlmIChpdGFyZ2V0LT5pbmRu YW1lc3BhY2UgIT0gTlVMTCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oc3RyLCAiJXMuIiwKKwkJCQkJ CQkgcXVvdGVfaWRlbnRpZmllcihpdGFyZ2V0LT5pbmRuYW1lc3BhY2UpKTsKKwkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhzdHIsIHF1b3RlX2lkZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZSkpOwor CX0KK30KKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIHR3byBwZ3BhX2luZGV4X3RhcmdldCBv YmplY3RzIGFyZSBleGFjdGx5IGlkZW50aWNhbC4KKyAqLworYm9vbAorcGdwYV9pbmRleF90YXJn ZXRzX2VxdWFsKHBncGFfaW5kZXhfdGFyZ2V0ICppMSwgcGdwYV9pbmRleF90YXJnZXQgKmkyKQor eworCWlmIChpMS0+aXR5cGUgIT0gaTItPml0eXBlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAo aTEtPml0eXBlID09IFBHUEFfSU5ERVhfTkFNRSkKKwl7CisJCS8qIGluZG5hbWVzcGFjZSBjYW4g YmUgTlVMTCwgYW5kIHR3byBOVUxMIHZhbHVlcyBhcmUgZXF1YWwgKi8KKwkJaWYgKChpMS0+aW5k bmFtZXNwYWNlICE9IE5VTEwgfHwgaTItPmluZG5hbWVzcGFjZSAhPSBOVUxMKSAmJgorCQkJKGkx LT5pbmRuYW1lc3BhY2UgPT0gTlVMTCB8fCBpMi0+aW5kbmFtZXNwYWNlID09IE5VTEwgfHwKKwkJ CSBzdHJjbXAoaTEtPmluZG5hbWVzcGFjZSwgaTItPmluZG5hbWVzcGFjZSkgIT0gMCkpCisJCQly ZXR1cm4gZmFsc2U7CisJCWlmIChzdHJjbXAoaTEtPmluZG5hbWUsIGkyLT5pbmRuYW1lKSAhPSAw KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCisJeworCQlpbnQJCQlpMV9sZW5ndGggPSBs aXN0X2xlbmd0aChpMS0+Y2hpbGRyZW4pOworCisJCWlmIChpMV9sZW5ndGggIT0gbGlzdF9sZW5n dGgoaTItPmNoaWxkcmVuKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZm9yIChpbnQgbiA9IDA7IG4g PCBpMV9sZW5ndGg7ICsrbikKKwkJeworCQkJcGdwYV9pbmRleF90YXJnZXQgKmMxID0gbGlzdF9u dGgoaTEtPmNoaWxkcmVuLCBuKTsKKwkJCXBncGFfaW5kZXhfdGFyZ2V0ICpjMiA9IGxpc3RfbnRo KGkyLT5jaGlsZHJlbiwgbik7CisKKwkJCWlmICghcGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKGMx LCBjMikpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisK Ky8qCisgKiBDaGVjayB3aGV0aGVyIGFuIGlkZW50aWZpZXIgbWF0Y2hlcyBhbiBhbnkgcGFydCBv ZiBhbiBhZHZpY2UgdGFyZ2V0LgorICovCitib29sCitwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190 YXJnZXQocGdwYV9pZGVudGlmaWVyICpyaWQsIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQor eworCS8qIEZvciBub24taWRlbnRpZmllcnMsIGNoZWNrIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlp ZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFj aF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4p CisJCXsKKwkJCWlmIChwZ3BhX2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBjaGlsZF90 YXJnZXQpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwkv KgorCSAqIElmIGEgcmVsYXRpb24gaWRlbnRpZmVyIG1lbnRpb25zIGEgcGFydGl0aW9uIG5hbWUs IGl0IHNob3VsZCBhbHNvIHNwZWNpZnkKKwkgKiBhIHBhcnRpdGlvbiBzY2hlbWEuCisJICovCisJ QXNzZXJ0KHJpZC0+cGFydG5zcCAhPSBOVUxMIHx8IHJpZC0+cGFydHJlbCA9PSBOVUxMKTsKKwor CS8qIFN0cmFpZ2h0Zm9yd2FyZCBjb21wYXJpc29ucyBvZiBhbGlhcyBuYW1lIGFuZCBvY2NjdXJy ZW5jZSBudW1iZXIuICovCisJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHRhcmdldC0+cmlk LmFsaWFzX25hbWUpICE9IDApCisJCXJldHVybiBmYWxzZTsKKwlpZiAocmlkLT5vY2N1cnJlbmNl ICE9IHRhcmdldC0+cmlkLm9jY3VycmVuY2UpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICog VGhlc2UgZmllbGRzIGNhbiBiZSBOVUxMIG9uIGVpdGhlciBzaWRlLCBidXQgTlVMTCBvbmx5IG1h dGNoZXMgYW5vdGhlcgorCSAqIE5VTEwuCisJICovCisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2Jv dGhfbnVsbChyaWQtPnBhcnRuc3AsIHRhcmdldC0+cmlkLnBhcnRuc3ApKQorCQlyZXR1cm4gZmFs c2U7CisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBhcnRyZWwsIHRhcmdl dC0+cmlkLnBhcnRyZWwpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzdHJpbmdzX2VxdWFsX29y X2JvdGhfbnVsbChyaWQtPnBsYW5fbmFtZSwgdGFyZ2V0LT5yaWQucGxhbl9uYW1lKSkKKwkJcmV0 dXJuIGZhbHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBNYXRjaCBpZGVudGlmaWVy cyB0byBhZHZpY2UgdGFyZ2V0cyBhbmQgcmV0dXJuIGFuIGVudW0gdmFsdWUgaW5kaWNhdGluZwor ICogdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBzZXQgb2Yga2V5cyBhbmQgdGhlIHNldCBv ZiB0YXJnZXRzLgorICoKKyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIHBncGFfaXRtX3R5cGUuCisg Ki8KK3BncGFfaXRtX3R5cGUKK3BncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGludCBucmlk cywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQpCit7CisJYm9vbAkJYWxsX3JpZHNfdXNlZCA9IHRydWU7CisJYm9vbAkJYW55X3JpZHNf dXNlZCA9IGZhbHNlOworCWJvb2wJCWFsbF90YXJnZXRzX3VzZWQ7CisJYm9vbAkgICAqcmlkc191 c2VkID0gcGFsbG9jMF9hcnJheShib29sLCBucmlkcyk7CisKKwlhbGxfdGFyZ2V0c191c2VkID0K KwkJcGdwYV9pZGVudGlmaWVyc19jb3Zlcl90YXJnZXQobnJpZHMsIHJpZHMsIHRhcmdldCwgcmlk c191c2VkKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkKKwl7CisJCWlmIChy aWRzX3VzZWRbaV0pCisJCQlhbnlfcmlkc191c2VkID0gdHJ1ZTsKKwkJZWxzZQorCQkJYWxsX3Jp ZHNfdXNlZCA9IGZhbHNlOworCX0KKworCWlmIChhbGxfcmlkc191c2VkKQorCXsKKwkJaWYgKGFs bF90YXJnZXRzX3VzZWQpCisJCQlyZXR1cm4gUEdQQV9JVE1fRVFVQUw7CisJCWVsc2UKKwkJCXJl dHVybiBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQ7CisJfQorCWVsc2UKKwl7CisJCWlmIChhbGxf dGFyZ2V0c191c2VkKQorCQkJcmV0dXJuIFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVDsKKwkJ ZWxzZSBpZiAoYW55X3JpZHNfdXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9JTlRFUlNFQ1RJTkc7 CisJCWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9ESVNKT0lOVDsKKwl9Cit9CisKKy8qCisgKiBS ZXR1cm5zIHRydWUgaWYgZXZlcnkgdGFyZ2V0IG9yIHN1Yi10YXJnZXQgaXMgbWF0Y2hlZCBieSBh dCBsZWFzdCBvbmUKKyAqIGlkZW50aWZpZXIsIGFuZCBvdGhlcndpc2UgZmFsc2UuCisgKgorICog QWxzbyBzZXRzIHJpZHNfdXNlZFtpXSA9IHRydWUgZm9yIGVhY2ggaWRlbmlmaWVyIHRoYXQgbWF0 Y2hlcyBhdCBsZWFzdCBvbmUKKyAqIHRhcmdldC4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfaWRl bnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAor CQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsIGJvb2wgKnJpZHNfdXNlZCkKK3sK Kwlib29sCQlyZXN1bHQgPSBmYWxzZTsKKworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFS R0VUX0lERU5USUZJRVIpCisJeworCQlyZXN1bHQgPSB0cnVlOworCisJCWZvcmVhY2hfcHRyKHBn cGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJ CQlpZiAoIXBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCBjaGlsZF90 YXJnZXQsCisJCQkJCQkJCQkJCSAgIHJpZHNfdXNlZCkpCisJCQkJcmVzdWx0ID0gZmFsc2U7CisJ CX0KKwl9CisJZWxzZQorCXsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBucmlkczsgKytpKQorCQl7 CisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KCZyaWRzW2ldLCB0YXJnZXQp KQorCQkJeworCQkJCXJpZHNfdXNlZFtpXSA9IHRydWU7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJ CX0KKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfYXN0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2ZmU3MzBhNGQ0Ci0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCkBAIC0w LDAgKzEsMjA0IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2FzdC5oCisgKgkg IGFic3RyYWN0IHN5bnRheCB0cmVlcyBmb3IgcGxhbiBhZHZpY2UsIHBsdXMgcGFyc2VyL3NjYW5u ZXIgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEds b2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2FzdC5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9BU1Rf SAorI2RlZmluZSBQR1BBX0FTVF9ICisKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKwor I2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKworLyoKKyAqIEFkdmljZSBpdGVtcyBnZW5lcmFs bHkgdGFrZSB0aGUgZm9ybSBTT01FX1RBRyhpdGVtIFsuLi5dKSwgd2hlcmUgYW4gaXRlbQorICog Y2FuIHRha2UgdmFyaW91cyBmb3Jtcy4gVGhlIHNpbXBsZXN0IGNhc2UgaXMgYSByZWxhdGlvbiBp ZGVudGlmaWVyLCBidXQKKyAqIHNvbWUgdGFncyBhbGxvdyBzdWJsaXN0cywgYW5kIEpPSU5fT1JE RVIoKSBhbGxvd3MgYm90aCBvcmRlcmVkIGFuZCB1bm9yZGVyZWQKKyAqIHN1Ymxpc3RzLgorICov Cit0eXBlZGVmIGVudW0KK3sKKwlQR1BBX1RBUkdFVF9JREVOVElGSUVSLAkJLyogcmVsYXRpb24g aWRlbnRpZmllciAqLworCVBHUEFfVEFSR0VUX09SREVSRURfTElTVCwJLyogKGl0ZW0gLi4uKSAq LworCVBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUCS8qIHtpdGVtIC4uLn0gKi8KK30gcGdwYV90 YXJnZXRfdHlwZTsKKworLyoKKyAqIFdoZW4gYW4gYWR2aWNlIGl0ZW0gZGVzY3JpYmVzIGEgYml0 bWFwIGluZGV4IHNjYW4sIGl0IG1heSBuZWVkIHRvIGRlc2NyaWJlCisgKiB0aGUgdXNlIG9mIG11 bHRpcGxlIGluZGV4ZXMuCisgKi8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfSU5ERVhfTkFNRSwJ CQkvKiBpbmRleCBzY2hlbWEgKyBuYW1lICovCisJUEdQQV9JTkRFWF9BTkQsCQkJCS8qICYmKGl0 ZW0gLi4uKSAqLworCVBHUEFfSU5ERVhfT1IJCQkJLyogfHwoaXRlbSAuLi4pICovCit9IHBncGFf aW5kZXhfdHlwZTsKKworLyoKKyAqIEFuIGluZGV4IHNwZWNpZmljYXRpb24uIFdlIHVzZSB0aGlz IGZvciBJTkRFWF9TQ0FOLCBJTkRFWF9PTkxZX1NDQU4sCisgKiBhbmQgQklUTUFQX0hFQVBfU0NB TiBhZHZpY2UsIGJ1dCBpbiB0aGUgZm9ybWVyIHR3byBjYXNlcywgdGhlIHRhcmdldCBtdXN0Cisg KiBiZSBvZiB0eXBlIFBHUEFfSU5ERVhfTkFNRS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9p bmRleF90YXJnZXQKK3sKKwlwZ3BhX2luZGV4X3R5cGUgaXR5cGU7CisKKwkvKiBJbmRleCBzY2hl bSBhbmQgbmFtZSwgd2hlbiBpdHlwZSA9PSBQR1BBX0lOREVYX05BTUUgKi8KKwljaGFyCSAgICpp bmRuYW1lc3BhY2U7CisJY2hhcgkgICAqaW5kbmFtZTsKKworCS8qIExpc3Qgb2YgcGdwYV9pbmRl eF90YXJnZXQgb2JqZWN0cywgd2hlbiBpdHlwZSAhPSBQR1BBX0lOREVYX05BTUUgKi8KKwlMaXN0 CSAgICpjaGlsZHJlbjsKK30gcGdwYV9pbmRleF90YXJnZXQ7CisKKy8qCisgKiBBIHNpbmdsZSBp dGVtIGFib3V0IHdoaWNoIGFkdmljZSBpcyBiZWluZyBnaXZlbiwgd2hpY2ggY291bGQgYmUgZWl0 aGVyCisgKiBhIHJlbGF0aW9uIGlkZW50aWZpZXIgdGhhdCB3ZSB3YW50IHRvIGJyZWFrIG91dCBp bnRvIGl0cyBjb25zdGl0dWVudCBmaWVsZHMsCisgKiBvciBhIHN1Ymxpc3Qgb2Ygc29tZSBraW5k LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2FkdmljZV90YXJnZXQKK3sKKwlwZ3BhX3Rhcmdl dF90eXBlIHR0eXBlOworCisJLyoKKwkgKiBUaGlzIGZpZWxkIGlzIG1lYW5pbmdmdWwgd2hlbiB0 dHlwZSBpcyBQR1BBX1RBUkdFVF9JREVOVElGSUVSLgorCSAqCisJICogQWxsIGlkZW50aWZpZXJz IG11c3QgaGF2ZSBhbiBhbGlhcyBuYW1lIGFuZCBhbiBvY2N1cnJlbmNlIG51bWJlcjsgdGhlCisJ ICogcmVtYWluaW5nIGZpZWxkcyBjYW4gYmUgTlVMTC4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUg dG8gc3BlY2lmeSBhCisJICogcGFydGl0aW9uIG5hbWUgd2l0aG91dCBhIHBhcnRpdGlvbiBzY2hl bWEsIGJ1dCBub3QgdGhlIHJldmVyc2UuCisJICovCisJcGdwYV9pZGVudGlmaWVyIHJpZDsKKwor CS8qCisJICogVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiB0dHlwZSBpcyBQUEdBX1RBUkdFVF9JREVO VElGSUVSIGFuZCB0aGUgYWR2aWNlCisJICogdGFnIGlzIFBHUEFfVEFHX0lOREVYX1NDQU4sIFBH UEFfVEFHX0lOREVYX09OTFlfU0NBTiwgb3IKKwkgKiBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FO LgorCSAqLworCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0OworCisJLyoKKwkgKiBXaGVuIHRo ZSB0dHlwZSBpcyBQR1BBX1RBUkdFVF88YW55dGhpbmc+X0xJU1QsIHRoaXMgZmllbGQgY29udGFp bnMgYQorCSAqIGxpc3Qgb2YgYWRkaXRpb25hbCBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4g T3RoZXJ3aXNlLCBpdCBpcyB1bnVzZWQuCisJICovCisJTGlzdAkgICAqY2hpbGRyZW47Cit9IHBn cGFfYWR2aWNlX3RhcmdldDsKKworLyoKKyAqIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIGFk dmljZSB0aGF0IHdlIGtub3cgaG93IHRvIHBhcnNlLiBJZiBhIGtleXdvcmQKKyAqIGlzIGZvdW5k IGF0IHRoZSB0b3AgbGV2ZWwsIGl0IG11c3QgYmUgaW4gdGhpcyBsaXN0LgorICoKKyAqIElmIHlv dSBjaGFuZ2UgYW55dGhpbmcgaGVyZSwgYWxzbyB1cGRhdGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFn IGFuZAorICogcGdwYV9jc3RyaW5nX2FkdmljZV90YWcuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3Bh X2FkdmljZV90YWdfdHlwZQoreworCVBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4sCisJUEdQQV9U QUdfRk9SRUlHTl9KT0lOLAorCVBHUEFfVEFHX0dBVEhFUiwKKwlQR1BBX1RBR19HQVRIRVJfTUVS R0UsCisJUEdQQV9UQUdfSEFTSF9KT0lOLAorCVBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwKKwlQ R1BBX1RBR19JTkRFWF9TQ0FOLAorCVBHUEFfVEFHX0pPSU5fT1JERVIsCisJUEdQQV9UQUdfTUVS R0VfSk9JTl9NQVRFUklBTElaRSwKKwlQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOLAorCVBHUEFf VEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9J WkUsCisJUEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU4sCisJUEdQQV9UQUdfTk9fR0FUSEVSLAor CVBHUEFfVEFHX1BBUlRJVElPTldJU0UsCisJUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSwK KwlQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUsCisJUEdQQV9UQUdfU0VRX1NDQU4sCisJUEdQQV9U QUdfVElEX1NDQU4KK30gcGdwYV9hZHZpY2VfdGFnX3R5cGU7CisKKy8qCisgKiBBbiBpdGVtIG9m IGFkdmljZSwgbWVhbmluZyBhIHRhZyBhbmQgdGhlIGxpc3Qgb2YgYWxsIHRhcmdldHMgdG8gd2hp Y2gKKyAqIGl0IGlzIGJlaW5nIGFwcGxpZWQuCisgKgorICogInRhcmdldHMiIGlzIGEgbGlzdCBv ZiBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4KKyAqCisgKiBUaGUgTGlzdCByZXR1cm5lZCBm cm9tIHBncGFfeXlwYXJzZSBpcyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0gb2JqZWN0cy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9hZHZpY2VfaXRlbQoreworCXBncGFfYWR2aWNlX3RhZ190 eXBlIHRhZzsKKwlMaXN0CSAgICp0YXJnZXRzOworfSBwZ3BhX2FkdmljZV9pdGVtOworCisvKgor ICogUmVzdWx0IG9mIGNvbXBhcmluZyBhbiBhcnJheSBvZiBwZ3BhX3JlbGF0aW9uX2lkZW50aWZp ZXIgb2JqZWN0cyB0byBhCisgKiBwZ3BhX2FkdmljZV90YXJnZXQuCisgKgorICogUEdQQV9JVE1f RVFVQUwgbWVhbnMgYWxsIHRhcmdldHMgYXJlIG1hdGNoZWQgYnkgc29tZSBpZGVudGlmaWVyLCBh bmQKKyAqIGFsbCBpZGVudGlmaWVycyB3ZXJlIG1hdGNoZWQgdG8gYSB0YXJnZXQuCisgKgorICog UEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIG1lYW5zIHRoYXQgYWxsIGlkZW50aWZpZXJzIG1hdGNo ZWQgdG8gYSB0YXJnZXQsCisgKiBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciB0YXJnZXRzLiBHZW5l cmFsbHksIHRoaXMgbWVhbnMgdGhhdCB0aGUgYWR2aWNlIGlzCisgKiBsb29raW5nIHRvIGFwcGx5 IHRvIGFsbCBvZiB0aGUgcmVscyB3ZSBoYXZlIHBsdXMgc29tZSBhZGRpdGlvbmFsIG9uZXMgdGhh dAorICogd2UgZG9uJ3QgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQg bWVhbnMgdGhhdCBhbGwgdGFyZ2V0cyBhcmUgbWF0Y2hlZCBieSBhbgorICogaWRlbnRpZmllcnMs IGJ1dCB0aGVyZSB3ZXJlIGxlZnRvdmVyIGlkZW50aWZpZXJzLiBHZW5lcmFsbHksIHRoaXMgbWVh bnMKKyAqIHRoYXQgdGhlIGFkdmljZSBpcyBsb29raW5nIHRvIGFwcGx5IHRvIHNvbWUgYnV0IG5v dCBhbGwgb2YgdGhlIHJlbHMgd2UgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9JTlRFUlNFQ1RJTkcg bWVhbnMgdGhhdCBzb21lIGlkZW50aWZlaXJzIGFuZCB0YXJnZXRzIHdlcmUgbWF0Y2hlZCwKKyAq IGJ1dCBuZWl0aGVyIGFsbCBpZGVudGlmaWVycyBub3IgYWxsIHRhcmdldHMgY291bGQgYmUgbWF0 Y2hlZCB0byBpdGVtcyBpbgorICogdGhlIG90aGVyIHNldC4KKyAqCisgKiBQR1BBX0lUTV9ESVNK T0lOVCBtZWFucyB0aGF0IG5vIG1hdGNoZXMgYmV0d2VlbiBpZGVudGlmZWlycyBhbmQgdGFyZ2V0 cyB3ZXJlCisgKiBmb3VuZC4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9JVE1fRVFVQUws CisJUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULAorCVBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNF VCwKKwlQR1BBX0lUTV9JTlRFUlNFQ1RJTkcsCisJUEdQQV9JVE1fRElTSk9JTlQKK30gcGdwYV9p dG1fdHlwZTsKKworLyogZm9yIHBncGFfc2Nhbm5lci5sIGFuZCBwZ3BhX3BhcnNlci55ICovCit1 bmlvbiBZWVNUWVBFOworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZ WV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkICp5eXNjYW5fdDsKKyNlbmRpZgor CisvKiBpbiBwZ3BhX3NjYW5uZXIubCAqLworZXh0ZXJuIGludAlwZ3BhX3l5bGV4KHVuaW9uIFlZ U1RZUEUgKnl5bHZhbF9wYXJhbSwgTGlzdCAqKnJlc3VsdCwKKwkJCQkJICAgY2hhciAqKnBhcnNl X2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgcGdwYV95eWVy cm9yKExpc3QgKipyZXN1bHQsIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNj YW5fdCB5eXNjYW5uZXIsCisJCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9p ZCBwZ3BhX3NjYW5uZXJfaW5pdChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJw KTsKK2V4dGVybiB2b2lkIHBncGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3QgeXlzY2FubmVyKTsK KworLyogaW4gcGdwYV9wYXJzZXIueSAqLworZXh0ZXJuIGludAlwZ3BhX3l5cGFyc2UoTGlzdCAq KnJlc3VsdCwgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLAorCQkJCQkJIHl5c2Nhbl90IHl5c2Nh bm5lcik7CitleHRlcm4gTGlzdCAqcGdwYV9wYXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5n LCBjaGFyICoqZXJyb3JfcCk7CisKKy8qIGluIHBncGFfYXN0LmMgKi8KK2V4dGVybiBjaGFyICpw Z3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKTsK K2V4dGVybiBib29sIHBncGFfaWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZp ZXIgKnJpZCwKKwkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRl cm4gcGdwYV9pdG1fdHlwZSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMs CisJCQkJCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJCQkgICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gYm9vbCBwZ3BhX2luZGV4X3Rhcmdl dHNfZXF1YWwocGdwYV9pbmRleF90YXJnZXQgKmkxLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFy Z2V0ICppMik7CitleHRlcm4gcGdwYV9hZHZpY2VfdGFnX3R5cGUgcGdwYV9wYXJzZV9hZHZpY2Vf dGFnKGNvbnN0IGNoYXIgKnRhZywgYm9vbCAqZmFpbCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1h dF9hZHZpY2VfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90 YXJnZXQgKnRhcmdldCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3Ry aW5nSW5mbyBzdHIsCisJCQkJCQkJCQkgcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3Iu YyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2E0NWI1MDMxZmUKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMKQEAgLTAsMCArMSw2Mzcg QEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfY29sbGVjdG9yLmMKKyAqCSAgY29s bGVjdCBhZHZpY2UgaW50byBiYWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5j bHVkZSAicGdfcGxhbl9hZHZpY2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorCisj aW5jbHVkZSAiZGF0YXR5cGUvdGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRl ICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0 aWxzL3RpbWVzdGFtcC5oIgorCitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3Rl ZF9sb2NhbF9hZHZpY2UpOworUEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRf c2hhcmVkX2FkdmljZSk7CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKTsKK1BHX0ZVTkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRf YWR2aWNlKTsKKworI2RlZmluZSBBRFZJQ0VfQ0hVTktfU0laRQkJMTAyNAorI2RlZmluZSBBRFZJ Q0VfQ0hVTktfQVJSQVlfU0laRQk2NAorCisjZGVmaW5lCVBHX0dFVF9BRFZJQ0VfQ09MVU1OUwk3 CisKKy8qCisgKiBBZHZpY2UgZXh0cmFjdGVkIGZyb20gb25lIHF1ZXJ5IHBsYW4sIHRvZ2V0aGVy IHdpdGggdGhlIHF1ZXJ5IHN0cmluZworICogYW5kIHZhcmlvdXMgb3RoZXIgaWRlbnRpZnlpbmcg ZGV0YWlscy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCit7CisJ T2lkCQkJdXNlcmlkOwkJCS8qIHVzZXIgT0lEICovCisJT2lkCQkJZGJpZDsJCQkvKiBkYXRhYmFz ZSBPSUQgKi8KKwl1aW50NjQJCXF1ZXJ5aWQ7CQkvKiBxdWVyeSBpZGVudGlmaWVyICovCisJVGlt ZXN0YW1wVHogdGltZXN0YW1wOwkJLyogcXVlcnkgdGltZXN0YW1wICovCisJaW50CQkJYWR2aWNl X29mZnNldDsJLyogc3RhcnQgb2YgYWR2aWNlIGluIHRleHR1YWwgZGF0YSAqLworCWNoYXIJCXRl eHR1YWxfZGF0YVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSBwZ3BhX2NvbGxlY3RlZF9hZHZp Y2U7CisKKy8qCisgKiBBIGJ1bmNoIG9mIHBvaW50ZXJzIHRvIHBncGFfY29sbGVjdGVkX2Fkdmlj ZSBvYmplY3RzLCBzdG9yZWQgaW4KKyAqIGJhY2tlbmQtbG9jYWwgbWVtb3J5LgorICovCit0eXBl ZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZV9jaHVuaworeworCXBncGFfY29sbGVjdGVkX2Fk dmljZSAqZW50cmllc1tBRFZJQ0VfQ0hVTktfU0laRV07Cit9IHBncGFfbG9jYWxfYWR2aWNlX2No dW5rOworCisvKgorICogSW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSBwZ3BhX2NvbGxlY3Rl ZF9hZHZpY2Ugb2JqZWN0cyB0aGF0IHdlJ3JlCisgKiBzdG9yaW5nIGluIGxvY2FsIG1lbW9yeS4K KyAqCisgKiBXZSBhc3NpZ24gY29uc2VjdXRpdmUgSURzLCBzdGFydGluZyBmcm9tIDAsIHRvIGVh Y2ggcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCisgKiBvYmplY3QgdGhhdCB3ZSBzdG9yZS4gVGhlIGFj dHVhbCBzdG9yYWdlIGlzIGFuIGFycmF5IG9mIGNodW5rcywgd2hpY2gKKyAqIGhlbHBzIGtlZXAg bWVtY3B5KCkgb3ZlcmhlYWQgbG93IHdoZW4gd2Ugc3RhcnQgZGlzY2FyZGluZyBvbGRlciBkYXRh LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xvY2FsX2FkdmljZQoreworCXVpbnQ2NAkJbmV4 dF9pZDsKKwl1aW50NjQJCW9sZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJaW50CQkJY2h1 bmtfYXJyYXlfYWxsb2NhdGVkX3NpemU7CisJcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKipjaHVu a3M7Cit9IHBncGFfbG9jYWxfYWR2aWNlOworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxf YWR2aWNlX2NodW5rLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwKKyAqIHNv IHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICov Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3sKKwlkc2FfcG9pbnRl ciBlbnRyaWVzW0FEVklDRV9DSFVOS19TSVpFXTsKK30gcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5r OworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNlLCBidXQgc3RvcmVkIGluIGEg ZHluYW1pYyBzaGFyZWQgYXJlYSwgc28KKyAqIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3Rl YWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9h ZHZpY2UKK3sKKwl1aW50NjQJCW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0 CQliYXNlX2lkOworCWludAkJCWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCWRzYV9wb2lu dGVyIGNodW5rczsKK30gcGdwYV9zaGFyZWRfYWR2aWNlOworCisvKiBQb2ludGVycyB0byBsb2Nh bCBhbmQgc2hhcmVkIGNvbGxlY3RvcnMgKi8KK3N0YXRpYyBwZ3BhX2xvY2FsX2FkdmljZSAqbG9j YWxfY29sbGVjdG9yID0gTlVMTDsKK3N0YXRpYyBwZ3BhX3NoYXJlZF9hZHZpY2UgKnNoYXJlZF9j b2xsZWN0b3IgPSBOVUxMOworCisvKiBTdGF0aWMgZnVuY3Rpb25zICovCitzdGF0aWMgcGdwYV9j b2xsZWN0ZWRfYWR2aWNlICpwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLAor CQkJCQkJCQkJCQkJCQkgT2lkIGRiaWQsCisJCQkJCQkJCQkJCQkJCSB1aW50NjQgcXVlcnlJZCwK KwkJCQkJCQkJCQkJCQkJIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJCQkJCQkJCQkJIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmFkdmlj ZV9zdHJpbmcsCisJCQkJCQkJCQkJCQkJCSBkc2FfYXJlYSAqYXJlYSwKKwkJCQkJCQkJCQkJCQkJ IGRzYV9wb2ludGVyICpyZXN1bHQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9yZV9sb2NhbF9hZHZp Y2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSk7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fbG9j YWxfYWR2aWNlKGludCBsaW1pdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3JlX3NoYXJlZF9hZHZp Y2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcik7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fc2hhcmVk X2FkdmljZShkc2FfYXJlYSAqYXJlYSwgaW50IGxpbWl0KTsKKworLyogSGVscGVyIGZ1bmN0aW9u IHRvIGV4dHJhY3QgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2FkdmljZSAq Lworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK3F1ZXJ5X3N0cmluZyhwZ3BhX2NvbGxlY3Rl ZF9hZHZpY2UgKmNhKQoreworCXJldHVybiBjYS0+dGV4dHVhbF9kYXRhOworfQorCisvKiBIZWxw ZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgYWR2aWNlIHN0cmluZyBmcm9tIHBncGFfY29sbGVj dGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK2FkdmljZV9zdHJpbmco cGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YSAr IGNhLT5hZHZpY2Vfb2Zmc2V0OworfQorCisvKgorICogU3RvcmUgY29sbGVjdGVkIHF1ZXJ5IGFk dmljZSBpbnRvIHRoZSBsb2NhbCBvciBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciwKKyAqIGFzIGFw cHJvcHJpYXRlLgorICovCit2b2lkCitwZ3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlk LCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsCisJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJp bmcpCit7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisJT2lkCQkJZGJpZCA9IE15RGF0 YWJhc2VJZDsKKwlUaW1lc3RhbXBUeiBub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwlp ZiAocGdfcGxhbl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlwZ3Bh X2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkJ b2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhwZ19wbGFuX2FkdmljZV9nZXRfbWN4 dCgpKTsKKwkJY2EgPSBwZ3BhX21ha2VfY29sbGVjdGVkX2FkdmljZSh1c2VyaWQsIGRiaWQsIHF1 ZXJ5SWQsIG5vdywKKwkJCQkJCQkJCQlxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJpbmcsCisJCQkJ CQkJCQkJTlVMTCwgTlVMTCk7CisJCXBncGFfc3RvcmVfbG9jYWxfYWR2aWNlKGNhKTsKKwkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCX0KKworCWlmIChwZ19wbGFuX2Fkdmlj ZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlkc2FfYXJlYSAgICphcmVhID0g cGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2FfcG9pbnRlciA9IElu dmFsaWREc2FQb2ludGVyOyAvKiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJcGdwYV9tYWtlX2Nv bGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCSAgIHF1 ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJICAgJmNhX3BvaW50ZXIp OworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJfQorfQorCisvKgor ICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdC4K KyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIG5ldyBv YmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyByZXR1cm5lZCB2aWEg KnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2JqZWN0IGlzIGFsbG9j YXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCByZXN1bHQgaXMgbm90 IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNl ICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsIE9pZCBkYmlkLCB1aW50 NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJCSAgIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJp bmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJlc3VsdCkKK3sKKwlz aXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3RyaW5nKSArIDE7CisJ c2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vfc3RyaW5nKSArIDE7 CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwor CXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2FkdmljZSwgdGV4dHVhbF9k YXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5nX2xlbmd0aDsKKwor CWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0aCk7CisJZWxzZQor CXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5ndGgpOworCQljYSA9 IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+dXNlcmlkID0gR2V0 VXNlcklkKCk7CisJY2EtPmRiaWQgPSBNeURhdGFiYXNlSWQ7CisJY2EtPnF1ZXJ5aWQgPSBxdWVy eUlkOworCWNhLT50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisJY2EtPmFkdmljZV9vZmZzZXQgPSBx dWVyeV9zdHJpbmdfbGVuZ3RoOworCisJbWVtY3B5KGNhLT50ZXh0dWFsX2RhdGEsIHF1ZXJ5X3N0 cmluZywgcXVlcnlfc3RyaW5nX2xlbmd0aCk7CisJbWVtY3B5KCZjYS0+dGV4dHVhbF9kYXRhW2Nh LT5hZHZpY2Vfb2Zmc2V0XSwKKwkJICAgYWR2aWNlX3N0cmluZywgYWR2aWNlX3N0cmluZ19sZW5n dGgpOworCisJcmV0dXJuIGNhOworfQorCisvKgorICogQWRkIGEgcGdfY29sbGVjdGVkX2Fkdmlj ZSBvYmplY3QgdG8gb3VyIGJhY2tlbmQtbG9jYWwgYWR2aWNlIGNvbGxlY3Rpb24uCisgKgorICog Q2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzd2l0Y2hpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIG1l bW9yeSBjb250ZXh0OworICogdGhlIHByb3ZpZGVkIG9iamVjdCBzaG91bGQgaGF2ZSBiZWVuIGFs bG9jYXRlZCBpbiB0aGF0IHNhbWUgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfc3Rv cmVfbG9jYWxfYWR2aWNlKHBncGFfY29sbGVjdGVkX2FkdmljZSAqY2EpCit7CisJdWludDY0CQlj aHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdwYV9sb2NhbF9hZHZpY2Ug KmxhID0gbG9jYWxfY29sbGVjdG9yOworCisJLyogSWYgdGhlIGxvY2FsIGFkdmljZSBjb2xsZWN0 b3IgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCBkbyB0aGF0IG5vdy4gKi8KKwlpZiAobGEgPT0gTlVM TCkKKwl7CisJCWxhID0gcGFsbG9jMChzaXplb2YocGdwYV9sb2NhbF9hZHZpY2UpKTsKKwkJbGEt PmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJ CWxhLT5jaHVua3MgPSBwYWxsb2MwX2FycmF5KHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICosCisJ CQkJCQkJCSAgIGxhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJCWxvY2FsX2NvbGxl Y3RvciA9IGxhOworCX0KKworCS8qIENvbXB1dGUgY2h1bmsgYW5kIG9mZnNldCBhdCB3aGljaCB0 byBzdG9yZSB0aGlzIGFkdmljZS4gKi8KKwljaHVua19udW1iZXIgPSAobGEtPm5leHRfaWQgLSBs YS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwljaHVua19vZmZzZXQgPSAobGEtPm5l eHRfaWQgLSBsYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCS8qIEV4dGVuZCBj aHVuayBhcnJheSwgaWYgbmVlZGVkLiAqLworCWlmIChjaHVua19udW1iZXIgPj0gbGEtPmNodW5r X2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisKKwkJbmV3X3Np emUgPSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlf U0laRTsKKwkJbGEtPmNodW5rcyA9IHJlcGFsbG9jMF9hcnJheShsYS0+Y2h1bmtzLAorCQkJCQkJ CQkJIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICosCisJCQkJCQkJCQkgbGEtPmNodW5rX2FycmF5 X2FsbG9jYXRlZF9zaXplLAorCQkJCQkJCQkJIG5ld19zaXplKTsKKwkJbGEtPmNodW5rX2FycmF5 X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCisJLyogQWxsb2NhdGUgbmV3IGNodW5r LCBpZiBuZWVkZWQuICovCisJaWYgKGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXSA9PSBOVUxMKQor CQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0gPSBwYWxsb2MwX29iamVjdChwZ3BhX2xvY2FsX2Fk dmljZV9jaHVuayk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1bXAgbmV4dC1pZCBjb3VudGVy LiAqLworCUFzc2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zm c2V0XSA9PSBOVUxMKTsKKwlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtf b2Zmc2V0XSA9IGNhOworCSsrbGEtPm5leHRfaWQ7CisKKwkvKiBJZiB3ZSd2ZSBleGNlZWRlZCB0 aGUgc3RvcmFnZSBsaW1pdCwgZGlzY2FyZCBvbGQgZGF0YS4gKi8KKwlwZ3BhX3RyaW1fbG9jYWxf YWR2aWNlKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQpOworfQorCisvKgor ICogQWRkIGEgcGdfY29sbGVjdGVkX2FkdmljZSBvYmplY3QgdG8gdGhlIHNoYXJlZCBhZHZpY2Ug Y29sbGVjdGlvbi4KKyAqCisgKiAnY2FfcG9pbnRlcicgc2hvdWxkIGhhdmUgYmVlbiBhbGxvY2F0 ZWQgZnJvbSB0aGUgcGdfcGxhbl9hZHZpY2UgRFNBIGFyZWEKKyAqIGFuZCBzaG91bGQgcG9pbnQg dG8gYW4gb2JqZWN0IG9mIHR5cGUgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlLgorICovCitzdGF0aWMg dm9pZAorcGdwYV9zdG9yZV9zaGFyZWRfYWR2aWNlKGRzYV9wb2ludGVyIGNhX3BvaW50ZXIpCit7 CisJdWludDY0CQljaHVua19udW1iZXI7CisJdWludDY0CQljaHVua19vZmZzZXQ7CisJcGdwYV9z aGFyZWRfc3RhdGUgKnN0YXRlID0gcGdfcGxhbl9hZHZpY2VfYXR0YWNoKCk7CisJZHNhX2FyZWEg ICAqYXJlYSA9IHBnX3BsYW5fYWR2aWNlX2RzYV9hcmVhKCk7CisJcGdwYV9zaGFyZWRfYWR2aWNl ICpzYSA9IHNoYXJlZF9jb2xsZWN0b3I7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCXBn cGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisKKwkvKiBMb2NrIHRoZSBzaGFyZWQgc3Rh dGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkv KgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0 b3IgeWV0LCBmaXggdGhhdCBub3cuCisJICogSWYgd2UncmUgdGhlIGZpcnN0IG9uZXMgdG8gYXR0 YWNoLCB3ZSBtYXkgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoc2EgPT0g TlVMTCkKKwl7CisJCWlmIChzdGF0ZS0+c2hhcmVkX2NvbGxlY3RvciA9PSBJbnZhbGlkRHNhUG9p bnRlcikKKwkJCXN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID0KKwkJCQlkc2FfYWxsb2NhdGUwKGFy ZWEsIHNpemVvZihwZ3BhX3NoYXJlZF9hZHZpY2UpKTsKKwkJc2hhcmVkX2NvbGxlY3RvciA9IHNh ID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yKTsKKwl9CisK KwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIG90aGVyIGJhY2tlbmQgbWF5IGhhdmUg c3VjY2VlZGVkIGluIGNyZWF0aW5nCisJICogdGhlIG1haW4gY29sbGVjdG9yIG9iamVjdCBidXQg ZmFpbGVkIHRvIGFsbG9jYXRlIGFuIGluaXRpYWwgY2h1bmsKKwkgKiBhcnJheSwgc28gd2UgbXVz dCBiZSBwcmVwYXJlZCB0byBhbGxvY2F0ZSB0aGUgY2h1bmsgYXJyYXkgaGVyZSB3aGV0aGVyCisJ ICogb3Igbm90IHdlIGNyZWF0ZWQgdGhlIGNvbGxlY3RvciBvYmplY3QuCisJICovCisJaWYgKHNo YXJlZF9jb2xsZWN0b3ItPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID09IDApCisJeworCQlz YS0+Y2h1bmtzID0KKwkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwKKwkJCQkJCSAgc2l6ZW9mKGRzYV9w b2ludGVyKSAqIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFKTsKKwkJc2EtPmNodW5rX2FycmF5X2Fs bG9jYXRlZF9zaXplID0gQURWSUNFX0NIVU5LX0FSUkFZX1NJWkU7CisJfQorCisJLyogQ29tcHV0 ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMgYWR2aWNlLiAqLworCWNo dW5rX251bWJlciA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19T SVpFOworCWNodW5rX29mZnNldCA9IChzYS0+bmV4dF9pZCAtIHNhLT5iYXNlX2lkKSAlIEFEVklD RV9DSFVOS19TSVpFOworCisJLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBjaHVuayBhcnJheSBh bmQsIGlmIG5lZWRlZCwgZXh0ZW5kIGl0LiAqLworCWlmIChjaHVua19udW1iZXIgPj0gc2EtPmNo dW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKQorCXsKKwkJaW50CQkJbmV3X3NpemU7CisJCWRzYV9w b2ludGVyIG5ld19jaHVua3M7CisKKwkJLyoKKwkJICogRFNBIGNhbid0IGVubGFyZ2UgYW4gZXhp c3RpbmcgYWxsb2NhdGlvbiwgc28gd2UgbXVzdCBtYWtlIGEgbmV3CisJCSAqIGFsbG9jYXRpb24g YW5kIGNvcHkgZGF0YSBvdmVyLgorCQkgKi8KKwkJbmV3X3NpemUgPSBzYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUgKyBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbmV3X2NodW5rcyA9 IGRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKGRzYV9wb2ludGVyKSAqIG5ld19zaXplKTsKKwkJ Y2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgbmV3X2NodW5rcyk7CisJCW1lbWNw eShjaHVua19hcnJheSwgZHNhX2dldF9hZGRyZXNzKGFyZWEsIHNhLT5jaHVua3MpLAorCQkJICAg c2l6ZW9mKGRzYV9wb2ludGVyKSAqIHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6ZSk7CisJ CWRzYV9mcmVlKGFyZWEsIHNhLT5jaHVua3MpOworCQlzYS0+Y2h1bmtzID0gbmV3X2NodW5rczsK KwkJc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplID0gbmV3X3NpemU7CisJfQorCWVsc2UK KwkJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkv KiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGRlc2lyZWQgY2h1bmssIGFsbG9jYXRpbmcgaXQgaWYg bmVlZGVkLiAqLworCWlmIChjaHVua19hcnJheVtjaHVua19udW1iZXJdID09IEludmFsaWREc2FQ b2ludGVyKQorCQljaHVua19hcnJheVtjaHVua19udW1iZXJdID0KKwkJCWRzYV9hbGxvY2F0ZTAo YXJlYSwgc2l6ZW9mKHBncGFfc2hhcmVkX2FkdmljZV9jaHVuaykpOworCWNodW5rID0gZHNhX2dl dF9hZGRyZXNzKGFyZWEsIGNodW5rX2FycmF5W2NodW5rX251bWJlcl0pOworCisJLyogU2F2ZSBw b2ludGVyIGFuZCBidW1wIG5leHQtaWQgY291bnRlci4gKi8KKwlBc3NlcnQoY2h1bmstPmVudHJp ZXNbY2h1bmtfb2Zmc2V0XSA9PSBJbnZhbGlkRHNhUG9pbnRlcik7CisJY2h1bmstPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9IGNhX3BvaW50ZXI7CisJKytzYS0+bmV4dF9pZDsKKworCS8qIElmIHdl J3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxpbWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXBn cGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIHBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0 aW9uX2xpbWl0KTsKKworCS8qIFJlbGVhc2UgbG9jayBvbiBzaGFyZWQgc3RhdGUuICovCisJTFdM b2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworfQorCisvKgorICogRGlzY2FyZCBjb2xsZWN0ZWQg YWR2aWNlIHN0b3JlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisg KiBzcGVjaWZpZWQgbGltaXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3RyaW1fbG9jYWxfYWR2 aWNlKGludCBsaW1pdCkKK3sKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9jb2xsZWN0 b3I7CisJdWludDY0CQljdXJyZW50X2NvdW50OworCXVpbnQ2NAkJdHJpbV9jb3VudDsKKwl1aW50 NjQJCXRvdGFsX2NodW5rX2NvdW50OworCXVpbnQ2NAkJdHJpbV9jaHVua19jb3VudDsKKwl1aW50 NjQJCXJlbWFpbmluZ19jaHVua19jb3VudDsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNo ZWQgdGhlIGxpbWl0LCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9jb3VudCA9 IGxhLT5uZXh0X2lkIC0gbGEtPm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1p dCkKKwkJcmV0dXJuOworCisJLyogRnJlZSBlbm91Z2ggZW50cmllcyB0byBnZXQgdXMgYmFjayBk b3duIHRvIHRoZSBsaW1pdC4gKi8KKwl0cmltX2NvdW50ID0gY3VycmVudF9jb3VudCAtIGxpbWl0 OworCXdoaWxlICh0cmltX2NvdW50ID4gMCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVyOwor CQl1aW50NjQJCWNodW5rX29mZnNldDsKKworCQljaHVua19udW1iZXIgPSAobGEtPm9sZGVzdF9p ZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAo bGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJCUFz c2VydChsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSAhPSBO VUxMKTsKKwkJcGZyZWUobGEtPmNodW5rc1tjaHVua19udW1iZXJdLT5lbnRyaWVzW2NodW5rX29m ZnNldF0pOworCQlsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0 XSA9IE5VTEw7CisJCSsrbGEtPm9sZGVzdF9pZDsKKwkJLS10cmltX2NvdW50OworCX0KKworCS8q IEZyZWUgYW55IGNodW5rcyB0aGF0IGFyZSBub3cgZW50aXJlbHkgdW51c2VkLiAqLworCXRyaW1f Y2h1bmtfY291bnQgPSAobGEtPm9sZGVzdF9pZCAtIGxhLT5iYXNlX2lkKSAvIEFEVklDRV9DSFVO S19TSVpFOworCWZvciAodWludDY0IG4gPSAwOyBuIDwgdHJpbV9jaHVua19jb3VudDsgKytuKQor CQlwZnJlZShsYS0+Y2h1bmtzW25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2lu dGVycyBiYWNrIHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtf Y291bnQgPSAobGEtPm5leHRfaWQgLSBsYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5L X1NJWkUgLSAxKSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9 IHRvdGFsX2NodW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2No dW5rX2NvdW50ID4gMCkKKwkJbWVtbW92ZSgmbGEtPmNodW5rc1swXSwgJmxhLT5jaHVua3NbdHJp bV9jaHVua19jb3VudF0sCisJCQkJc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICopICog cmVtYWluaW5nX2NodW5rX2NvdW50KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxlIHBvaW50ZXJz IGFyb3VuZC4gKi8KKwltZW1zZXQoJmxhLT5jaHVua3NbcmVtYWluaW5nX2NodW5rX2NvdW50XSwg MCwKKwkJICAgc2l6ZW9mKHBncGFfbG9jYWxfYWR2aWNlX2NodW5rICopCisJCSAgICogKHRvdGFs X2NodW5rX2NvdW50IC0gcmVtYWluaW5nX2NodW5rX2NvdW50KSk7CisKKwkvKiBBZGp1c3QgYmFz ZSBJRCB2YWx1ZSBhY2NvcmRpbmdseS4gKi8KKwlsYS0+YmFzZV9pZCArPSB0cmltX2NodW5rX2Nv dW50ICogQURWSUNFX0NIVU5LX1NJWkU7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNvbGxlY3RlZCBh ZHZpY2Ugc3RvcmVkIGluIHNoYXJlZCBtZW1vcnkgaW4gZXhjZXNzIG9mIHRoZQorICogc3BlY2lm aWVkIGxpbWl0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cmltX3NoYXJlZF9hZHZpY2UoZHNh X2FyZWEgKmFyZWEsIGludCBsaW1pdCkKK3sKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hh cmVkX2NvbGxlY3RvcjsKKwl1aW50NjQJCWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2Nv dW50OworCXVpbnQ2NAkJdG90YWxfY2h1bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2Nv dW50OworCXVpbnQ2NAkJcmVtYWluaW5nX2NodW5rX2NvdW50OworCWRzYV9wb2ludGVyICpjaHVu a19hcnJheTsKKworCS8qIElmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlIGxpbWl0LCB0aGVy ZSdzIG5vdGhpbmcgdG8gZG8uICovCisJY3VycmVudF9jb3VudCA9IHNhLT5uZXh0X2lkIC0gc2Et Pm9sZGVzdF9pZDsKKwlpZiAoY3VycmVudF9jb3VudCA8PSBsaW1pdCkKKwkJcmV0dXJuOworCisJ LyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJyYXkuICovCisJY2h1bmtfYXJyYXkgPSBk c2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7CisKKwkvKiBGcmVlIGVub3VnaCBlbnRy aWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxpbWl0LiAqLworCXRyaW1fY291bnQgPSBj dXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRyaW1fY291bnQgPiAwKQorCXsKKwkJdWlu dDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ3BhX3NoYXJl ZF9hZHZpY2VfY2h1bmsgKmNodW5rOworCisJCWNodW5rX251bWJlciA9IChzYS0+b2xkZXN0X2lk IC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChz YS0+b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2h1 bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisJ CUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IEludmFsaWREc2FQb2ludGVy KTsKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmstPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWNo dW5rLT5lbnRyaWVzW2NodW5rX29mZnNldF0gPSBJbnZhbGlkRHNhUG9pbnRlcjsKKwkJKytzYS0+ b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1bmtzIHRo YXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9IChzYS0+ b2xkZXN0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9yICh1aW50 NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCWRzYV9mcmVlKGFyZWEsIGNo dW5rX2FycmF5W25dKTsKKworCS8qIFNsaWRlIHJlbWFpbmluZyBjaHVuayBwb2ludGVycyBiYWNr IHRvd2FyZCB0aGUgYmFzZSBvZiB0aGUgYXJyYXkuICovCisJdG90YWxfY2h1bmtfY291bnQgPSAo c2EtPm5leHRfaWQgLSBzYS0+YmFzZV9pZCArCisJCQkJCQkgQURWSUNFX0NIVU5LX1NJWkUgLSAx KSAvIEFEVklDRV9DSFVOS19TSVpFOworCXJlbWFpbmluZ19jaHVua19jb3VudCA9IHRvdGFsX2No dW5rX2NvdW50IC0gdHJpbV9jaHVua19jb3VudDsKKwlpZiAocmVtYWluaW5nX2NodW5rX2NvdW50 ID4gMCkKKwkJbWVtbW92ZSgmY2h1bmtfYXJyYXlbMF0sICZjaHVua19hcnJheVt0cmltX2NodW5r X2NvdW50XSwKKwkJCQlzaXplb2YoZHNhX3BvaW50ZXIpICogcmVtYWluaW5nX2NodW5rX2NvdW50 KTsKKworCS8qIERvbid0IGxlYXZlIHN0YWxlIHBvaW50ZXJzIGFyb3VuZC4gKi8KKwltZW1zZXQo JmNodW5rX2FycmF5W3JlbWFpbmluZ19jaHVua19jb3VudF0sIDAsCisJCSAgIHNpemVvZihwZ3Bh X3NoYXJlZF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtfY291bnQgLSByZW1h aW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVlIGFjY29yZGlu Z2x5LiAqLworCXNhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJQ0VfQ0hVTktf U0laRTsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBmdW5jdGlvbiB0byBkaXNjYXJkIGFkdmlj ZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1vcnkKKyAqLworRGF0dW0KK3BnX2NsZWFy X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpZiAobG9jYWxf Y29sbGVjdG9yICE9IE5VTEwpCisJCXBncGFfdHJpbV9sb2NhbF9hZHZpY2UoMCk7CisKKwlQR19S RVRVUk5fVk9JRCgpOworfQorCisvKgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2Nh cmQgYWR2aWNlIGNvbGxlY3RlZCBpbiBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQor cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlw Z3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2Ff YXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKworCUxXTG9ja0FjcXVp cmUoJnN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJLyoKKwkgKiBJZiB3ZSdyZSBub3Qg YXR0YWNoZWQgdG8gdGhlIHNoYXJlZCBhZHZpY2UgY29sbGVjdG9yIHlldCwgZml4IHRoYXQgbm93 OworCSAqIGJ1dCBpZiB0aGUgY29sbGVjdG9yIGRvZXNuJ3QgZXZlbiBleGlzdCwgd2UgY2FuIHJl dHVybiB3aXRob3V0IGRvaW5nCisJICogYW55dGhpbmcgZWxzZS4KKwkgKi8KKwlpZiAoc2hhcmVk X2NvbGxlY3RvciA9PSBOVUxMKQorCXsKKwkJaWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09 IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlMV0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7 CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJCXNoYXJlZF9jb2xsZWN0b3IgPSBkc2FfZ2V0 X2FkZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qIERvIHRo ZSByZWFsIHdvcmsgKi8KKwlwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShhcmVhLCAwKTsKKworCUxX TG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7Cit9CisKKy8q CisgKiBTUUwtY2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGluIGJhY2tl bmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZShQR19GVU5DVElPTl9BUkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5T ZXRJbmZvICopIGZjaW5mby0+cmVzdWx0aW5mbzsKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBs b2NhbF9jb2xsZWN0b3I7CisJT2lkCQkJdXNlcmlkID0gR2V0VXNlcklkKCk7CisKKwlJbml0TWF0 ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisKKwlpZiAobGEgPT0gTlVMTCkKKwkJcmV0dXJuIChE YXR1bSkgMDsKKworCS8qIExvb3Agb3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBp ZCA9IGxhLT5vbGRlc3RfaWQ7IGlkIDwgbGEtPm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJ CWNodW5rX251bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfY29sbGVjdGVk X2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXTsKKwkJ Ym9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsKKworCQljaHVua19udW1i ZXIgPSAoaWQgLSBsYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zm c2V0ID0gKGlkIC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJY2EgPSBs YS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XTsKKworCQlpZiAo IW1lbWJlcl9jYW5fc2V0X3JvbGUodXNlcmlkLCBjYS0+dXNlcmlkKSkKKwkJCWNvbnRpbnVlOwor CisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFsdWVzWzFdID0gT2JqZWN0 SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2JqZWN0SWRHZXREYXR1bShj YS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNhLT5xdWVyeWlkKTsKKwkJ dmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVzdGFtcCk7CisJCXZhbHVlc1s1 XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7CisJCXZhbHVlc1s2XSA9 IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOworCisJCXR1cGxlc3RvcmVf cHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERlc2MsCisJCQkJCQkJIHZh bHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9CisKKy8qCisgKiBTUUwt Y2FsbGFibGUgU1JGIHRvIHJldHVybiBhZHZpY2UgY29sbGVjdGVkIGluIHNoYXJlZCBtZW1vcnkK KyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9B UkdTKQoreworCVJldHVyblNldEluZm8gKnJzaW5mbyA9IChSZXR1cm5TZXRJbmZvICopIGZjaW5m by0+cmVzdWx0aW5mbzsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2Fkdmlj ZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEo KTsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRfYWR2aWNlICpzYSA9 IHNoYXJlZF9jb2xsZWN0b3I7CisKKwlJbml0TWF0ZXJpYWxpemVkU1JGKGZjaW5mbywgMCk7CisK KwkvKiBMb2NrIHRoZSBzaGFyZWQgc3RhdGUuICovCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxv Y2ssIExXX1NIQVJFRCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0aGUg c2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0IGlmIHRo ZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhvdXQgZG9p bmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJaWYg KHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQl7CisJCQlM V0xvY2tSZWxlYXNlKCZzdGF0ZS0+bG9jayk7CisJCQlyZXR1cm4gKERhdHVtKSAwOworCQl9CisJ CXNoYXJlZF9jb2xsZWN0b3IgPSBzYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzdGF0ZS0+c2hh cmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogR2V0IGEgcG9pbnRlciB0byB0aGUgY2h1bmsgYXJy YXkuICovCisJY2h1bmtfYXJyYXkgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyk7 CisKKwkvKiBMb29wIG92ZXIgYWxsIGVudHJpZXMuICovCisJZm9yICh1aW50NjQgaWQgPSBzYS0+ b2xkZXN0X2lkOyBpZCA8IHNhLT5uZXh0X2lkOyArK2lkKQorCXsKKwkJdWludDY0CQljaHVua19u dW1iZXI7CisJCXVpbnQ2NAkJY2h1bmtfb2Zmc2V0OworCQlwZ3BhX3NoYXJlZF9hZHZpY2VfY2h1 bmsgKmNodW5rOworCQlwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhOworCQlEYXR1bQkJdmFsdWVz W1BHX0dFVF9BRFZJQ0VfQ09MVU1OU107CisJCWJvb2wJCW51bGxzW1BHX0dFVF9BRFZJQ0VfQ09M VU1OU10gPSB7MH07CisKKwkJY2h1bmtfbnVtYmVyID0gKGlkIC0gc2EtPmJhc2VfaWQpIC8gQURW SUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChpZCAtIHNhLT5iYXNlX2lkKSAlIEFE VklDRV9DSFVOS19TSVpFOworCisJCWNodW5rID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5r X2FycmF5W2NodW5rX251bWJlcl0pOworCQljYSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBjaHVu ay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKworCQl2YWx1ZXNbMF0gPSBVSW50NjRHZXREYXR1 bShpZCk7CisJCXZhbHVlc1sxXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPnVzZXJpZCk7CisJCXZh bHVlc1syXSA9IE9iamVjdElkR2V0RGF0dW0oY2EtPmRiaWQpOworCQl2YWx1ZXNbM10gPSBVSW50 NjRHZXREYXR1bShjYS0+cXVlcnlpZCk7CisJCXZhbHVlc1s0XSA9IFRpbWVzdGFtcEdldERhdHVt KGNhLT50aW1lc3RhbXApOworCQl2YWx1ZXNbNV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHF1ZXJ5 X3N0cmluZyhjYSkpOworCQl2YWx1ZXNbNl0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGFkdmljZV9z dHJpbmcoY2EpKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwg cnNpbmZvLT5zZXREZXNjLAorCQkJCQkJCSB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwkvKiBSZWxl YXNlIGxvY2sgb24gc2hhcmVkIHN0YXRlLiAqLworCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2Nr KTsKKworCXJldHVybiAoRGF0dW0pIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfY29sbGVjdG9yLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29s bGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI2ZTc0NmEw NmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxl Y3Rvci5oCkBAIC0wLDAgKzEsMTggQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf Y29sbGVjdG9yLmgKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBiYWNrZW5kLWxvY2FsIG9yIHNo YXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9jb2xsZWN0b3IuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBH UEFfQ09MTEVDVE9SX0gKKyNkZWZpbmUgUEdQQV9DT0xMRUNUT1JfSAorCitleHRlcm4gdm9pZCBw Z3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpxdWVyeV9zdHJp bmcsCisJCQkJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5hNWZhNzdlMDgzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKQEAgLTAsMCArMSw0NzYgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfaWRlbnRpZmllci5jCisgKgkgIGNyZWF0ZSBhcHBy b3ByaWF0ZSBpZGVudGlmaWVycyBmb3IgcmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIFRoZSBn b2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGJlIGFibGUgdG8gcHJvZHVjZSBpZGVudGlmaWVycyBm b3IgcmFuZ2UKKyAqIHRhYmxlIGVudHJpZXMgdGhhdCBhcmUgdW5pcXVlLCB1bmRlcnN0YW5kYWJs ZSB0byBodW1hbiBiZWluZ3MsIGFuZAorICogYWJsZSB0byBiZSByZWNvbnN0cnVjdGVkIGR1cmlu ZyBmdXR1cmUgcGxhbm5pbmcgY3ljbGVzLiBBcyBhbgorICogZXhjZXB0aW9uLCB3ZSBkbyBub3Qg Y2FyZSBhYm91dCwgb3Igd2FudCB0byBwcm9kdWNlLCBpZGVudGlmaWVycyBmb3IKKyAqIFJURV9K T0lOIGVudHJpZXMuIFRoaXMgaXMgYmVjYXVzZSAoMSkgd2Ugd291bGQgZW5kIHVwIHdpdGggYSB0 b24gb2YKKyAqIFJURXMgd2l0aCB1bmhlbHBmdWwgbmFtZXMgbGlrZSB1bm5hbWVkX2pvaW5fMTc7 ICgyKSBub3QgYWxsIGpvaW5zIGhhdmUKKyAqIFJURXM7IGFuZCAoMykgd2UgaW50ZW5kIHRvIHJl ZmVyIHRvIGpvaW5zIGJ5IHRoZWlyIGNvbnN0aXR1ZW50IG1lbWJlcnMKKyAqIHJhdGhlciB0aGFu IGJ5IHJlZmVyZW5jZSB0byB0aGUgam9pbiBSVEUuCisgKgorICogSW4gZ2VuZXJhbCwgd2UgY29u c3RydWN0IGlkZW50aWZpZXJzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybToKKyAqCisgKiBhbGlhc19u YW1lI29jY3VycmVuY2VfbnVtYmVyL2NoaWxkX3RhYmxlX25hbWVAc3VicXVlcnlfbmFtZQorICoK KyAqIEhvd2V2ZXIsIG9jY3VycmVuY2VfbnVtYmVyIGlzIG9taXR0ZWQgd2hlbiBpdCBpcyB0aGUg Zmlyc3Qgb2NjdXJyZW5jZQorICogd2l0aGluIHRoZSBzYW1lIHN1YnF1ZXJ5LCBjaGlsZF90YWJs ZV9uYW1lIGlzIG9taXR0ZWQgZm9yIHJlbGF0aW9ucyB0aGF0CisgKiBhcmUgbm90IGNoaWxkIHRh YmxlcywgYW5kIHN1YnF1ZXJ5X25hbWUgaXMgb21pdHRlZCBmb3IgdGhlIHRvcG1vc3QKKyAqIHF1 ZXJ5IGxldmVsLiBXaGVuZXZlciBhbiBpdGVtIGlzIG9taXR0ZWQsIHRoZSBwcmVjZWRpbmcgcHVu Y3R1YXRpb24gbWFyaworICogaXMgYWxzbyBvbWl0dGVkLiAgSWRlbnRpZmllci1zdHlsZSBlc2Nh cGluZyBpcyBhcHBsaWVkIHRvIGFsaWFzX25hbWUgYW5kCisgKiBzdWJxdWVyeV9uYW1lLiAgV2hl bmV2ZXIgd2UgaW5jbHVkZSBjaGlsZF90YWJsZV9uYW1lLCB3ZSBhbHdheXMKKyAqIHNjaGVtYS1x dWFsaWZpZWQgbmFtZSwgYnV0IHdyaXRpbmcgdGhlaXIgb3duIHBsYW4gYWR2aWNlIGFyZSBub3Qg cmVxdWlyZWQKKyAqIHRvIGRvIHNvLiAgSWRlbnRpZmllci1zdHlsZSBlc2NhcGluZyBpcyBhcHBs aWVkIHRvIHRoZSBzY2hlbWEgYW5kIHRvIHRoZQorICogcmVsYXRpb24gbmFtZXMgc2VwYXJhdGVs eS4KKyAqCisgKiBUaGUgdXBzaG90IG9mIGFsbCBvZiB0aGVzZSBydWxlcyBpcyB0aGF0IGluIHNp bXBsZSBjYXNlcywgdGhlIHJlbGF0aW9uCisgKiBpZGVudGlmaWVyIGlzIHRleHR1YWxseSBpZGVu dGljYWwgdG8gdGhlIGFsaWFzIG5hbWUsIG1ha2luZyBsaWZlIGVhc2llcgorICogZm9yIHVzZXJz LiBIb3dldmVyLCBldmVuIGluIGNvbXBsZXggY2FzZXMsIGV2ZXJ5IHJlbGF0aW9uIGlkZW50aWZp ZXIKKyAqIGZvciBhIGdpdmVuIHF1ZXJ5IHdpbGwgYmUgdW5pcXVlIChvciBhdCBsZWFzdCB3ZSBo b3BlIHNvOiBpZiBub3QsIHRoaXMKKyAqIGNvZGUgaXMgYnVnZ3kgYW5kIHRoZSBpZGVudGlmaWVy IGZvcm1hdCBtaWdodCBuZWVkIHRvIGJlIHJldGhvdWdodCkuCisgKgorICogQSBrZXkgZ29hbCBv ZiB0aGlzIHN5c3RlbSBpcyB0aGF0IHdlIHdhbnQgdG8gYmUgYWJsZSB0byByZWNvbnN0cnVjdCB0 aGUKKyAqIHNhbWUgaWRlbnRpZmllcnMgZHVyaW5nIGEgZnV0dXJlIHBsYW5uaW5nIGN5Y2xlIGZv ciB0aGUgc2FtZSBxdWVyeSwgc28KKyAqIHRoYXQgaWYgYSBjZXJ0YWluIGJlaGF2aW9yIGlzIHNw ZWNpZmllZCBmb3IgYSBjZXJ0YWluIGlkZW50aWZpZXIsIHdlIGNhbgorICogcHJvcGVybHkgaWRl bnRpZnkgdGhlIFJUSSBmb3Igd2hpY2ggdGhhdCBiZWhhdmlvciBpcyBtYW5kYXRlZC4gSW4gb3Jk ZXIKKyAqIGZvciB0aGlzIHRvIHdvcmssIHN1YnF1ZXJ5IG5hbWVzIG11c3QgYmUgdW5pcXVlIGFu ZCBrbm93biBiZWZvcmUgdGhlCisgKiBzdWJxdWVyeSBpcyBwbGFubmVkLCBhbmQgdGhlIHJlbWFp bmRlciBvZiB0aGUgaWRlbnRpZmllciBtdXN0IG5vdCBkZXBlbmQKKyAqIG9uIGFueSBwYXJ0IG9m IHRoZSBxdWVyeSBvdXRzaWRlIG9mIHRoZSBjdXJyZW50IHN1YnF1ZXJ5IGxldmVsLiBJbgorICog cGFydGljdWxhciwgb2NjdXJyZW5jZV9udW1iZXIgbXVzdCBiZSBjYWxjdWxhdGVkIHJlbGF0aXZl IHRvIHRoZSByYW5nZQorICogdGFibGUgZm9yIHRoZSByZWxldmFudCBzdWJxdWVyeSwgbm90IHRo ZSBmaW5hbCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX2lkZW50 aWZpZXIuaCIKKworI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGls cy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCitzdGF0aWMgSW5k ZXggKnBncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5ndGgsIExpc3QgKnJ0 YWJsZSwKKwkJCQkJCQkJCSAgTGlzdCAqYXBwaW5mb3MpOworc3RhdGljIGludAlwZ3BhX29jY3Vy cmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRvcF9ydGlfbWFwLAorCQkJCQkJCQkg ICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSk7CisKKy8qCisgKiBDcmVhdGUgYSBy YW5nZSB0YWJsZSBpZGVudGlmaWVyIGZyb20gc2NyYXRjaC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u IGxlYXZlcyB0aGUgY2FsbGVyIHRvIGRvIGFsbCB0aGUgaGVhdnkgbGlmdGluZywgc28gaXQncwor ICogZ2VuZXJhbGx5IGJldHRlciB0byB1c2Ugb25lIG9mIHRoZSBmdW5jdGlvbnMgYmVsb3cgaW5z dGVhZC4KKyAqCisgKiBTZWUgdGhlIGZpbGUgaGVhZGVyIGNvbW1lbnRzIGZvciBtb3JlIGRldGFp bHMgb24gdGhlIGZvcm1hdCBvZiBhbgorICogaWRlbnRpZmllci4KKyAqLworY29uc3QgY2hhciAq CitwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFfaWRlbnRpZmllciAqcmlkKQorewor CWNvbnN0IGNoYXIgKnJlc3VsdDsKKworCUFzc2VydChyaWQtPmFsaWFzX25hbWUgIT0gTlVMTCk7 CisJcmVzdWx0ID0gcXVvdGVfaWRlbnRpZmllcihyaWQtPmFsaWFzX25hbWUpOworCisJQXNzZXJ0 KHJpZC0+b2NjdXJyZW5jZSA+PSAwKTsKKwlpZiAocmlkLT5vY2N1cnJlbmNlID4gMSkKKwkJcmVz dWx0ID0gcHNwcmludGYoIiVzIyVkIiwgcmVzdWx0LCByaWQtPm9jY3VycmVuY2UpOworCisJaWYg KHJpZC0+cGFydHJlbCAhPSBOVUxMKQorCXsKKwkJaWYgKHJpZC0+cGFydG5zcCA9PSBOVUxMKQor CQkJcmVzdWx0ID0gcHNwcmludGYoIiVzLyVzIiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVfaWRl bnRpZmllcihyaWQtPnBhcnRyZWwpKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0gcHNwcmludGYoIiVz LyVzLiVzIiwgcmVzdWx0LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRuc3Ap LAorCQkJCQkJCSAgcXVvdGVfaWRlbnRpZmllcihyaWQtPnBhcnRyZWwpKTsKKwl9CisKKwlpZiAo cmlkLT5wbGFuX25hbWUgIT0gTlVMTCkKKwkJcmVzdWx0ID0gcHNwcmludGYoIiVzQCVzIiwgcmVz dWx0LCBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGxhbl9uYW1lKSk7CisKKwlyZXR1cm4gcmVzdWx0 OworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9yIGEgcGFydGlj dWxhciBSVEkuCisgKgorICogVGhlIGNhbGxlciBwcm92aWRlcyByb290IGFuZCBydGksIGFuZCBn ZXRzIHRoZSBuZWNlc3NhcnkgZGV0YWlscyBiYWNrIHZpYQorICogdGhlIHJlbWFpbmluZyBwYXJh bWV0ZXJzLgorICovCit2b2lkCitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkoUGxhbm5l ckluZm8gKnJvb3QsIEluZGV4IHJ0aSwKKwkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZCkK K3sKKwlJbmRleAkJdG9wX3J0aSA9IHJ0aTsKKwlpbnQJCQlvY2N1cnJlbmNlID0gMTsKKwlSYW5n ZVRibEVudHJ5ICpydGU7CisJUmFuZ2VUYmxFbnRyeSAqdG9wX3J0ZTsKKwljaGFyCSAgICpwYXJ0 bnNwID0gTlVMTDsKKwljaGFyCSAgICpwYXJ0cmVsID0gTlVMTDsKKworCS8qCisJICogSWYgdGhp cyBpcyBhIGNoaWxkIFJURSwgZmluZCB0aGUgdG9wbW9zdCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBv ZiB0eXBlCisJICogUlRFX1JFTEFUSU9OLiBXZSBkbyB0aGlzIGJlY2F1c2Ugd2UgaWRlbnRpZnkg Y2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKwkgKiB0YWJsZXMgYnkgdGhlIG5hbWUgb2YgdGhlIGNo aWxkIHRhYmxlLCBidXQgc3VicXVlcmllcyBjYW4gYWxzbyBoYXZlCisJICogY2hpbGQgcmVscyBh bmQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aG9zZSBoZXJlLgorCSAqLworCWZvciAoOzspCisJewor CQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlOwor CisJCS8qIGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhlcmUgYXJlIG5vIGNoaWxk cmVuICovCisJCWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5ID09IE5VTEwgfHwKKwkJCShhcHBp bmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJheVt0b3BfcnRpXSkgPT0gTlVMTCkKKwkJCWJyZWFr OworCisJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8tPnBhcmVudF9yZWxp ZCwgcm9vdCk7CisJCWlmIChwYXJlbnRfcnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJ CWJyZWFrOworCisJCXRvcF9ydGkgPSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQ7CisJfQorCisJLyog R2V0IHRoZSByYW5nZSB0YWJsZSBlbnRyaWVzIGZvciB0aGUgUlRJIGFuZCB0b3AgUlRJLiAqLwor CXJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290KTsKKwl0b3BfcnRlID0gcGxhbm5lcl9y dF9mZXRjaCh0b3BfcnRpLCByb290KTsKKwlBc3NlcnQocnRlLT5ydGVraW5kICE9IFJURV9KT0lO KTsKKwlBc3NlcnQodG9wX3J0ZS0+cnRla2luZCAhPSBSVEVfSk9JTik7CisKKwkvKiBXb3JrIG91 dCB0aGUgY29ycmVjdCBvY2N1cnJlbmNlIG51bWJlci4gKi8KKwlmb3IgKEluZGV4IHByaW9yX3J0 aSA9IDE7IHByaW9yX3J0aSA8IHRvcF9ydGk7ICsrcHJpb3JfcnRpKQorCXsKKwkJUmFuZ2VUYmxF bnRyeSAqcHJpb3JfcnRlOworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCisJCS8qCisJCSAq IElmIHRoaXMgaXMgYSBjaGlsZCByZWwgb2YgYSBwYXJlbnQgdGhhdCBpcyBhIHJlbGF0aW9uLCBz a2lwIGl0LgorCQkgKgorCQkgKiBTdWNoIHJhbmdlIHRhYmxlIGVudHJpZXMgYXJlIGRpc2FtYmln dWF0ZWQgYnkgbWVudGlvbmluZyB0aGUgc2NoZW1hCisJCSAqIGFuZCBuYW1lIG9mIHRoZSB0YWJs ZSwgbm90IGJ5IGNvdW50aW5nIHRoZW0gYXMgc2VwYXJhdGUgb2NjdXJyZW5jZXMKKwkJICogb2Yg dGhlIHNhbWUgdGFibGUuCisJCSAqCisJCSAqIE5COiBhcHBlbmRfcmVsX2FycmF5IGNhbiBiZSBO VUxMIGlmIHRoZXJlIGFyZSBubyBjaGlsZHJlbgorCQkgKi8KKwkJaWYgKHJvb3QtPmFwcGVuZF9y ZWxfYXJyYXkgIT0gTlVMTCAmJgorCQkJKGFwcGluZm8gPSByb290LT5hcHBlbmRfcmVsX2FycmF5 W3ByaW9yX3J0aV0pICE9IE5VTEwpCisJCXsKKwkJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7 CisKKwkJCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8tPnBhcmVudF9yZWxp ZCwgcm9vdCk7CisJCQlpZiAocGFyZW50X3J0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pCisJ CQkJY29udGludWU7CisJCX0KKworCQkvKiBTa2lwIE5VTEwgZW50cmllcyBhbmQgam9pbnMuICov CisJCXByaW9yX3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocHJpb3JfcnRpLCByb290KTsKKwkJaWYg KHByaW9yX3J0ZSA9PSBOVUxMIHx8IHByaW9yX3J0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJ CWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFzIG5hbWUgZGlmZmVycy4gKi8KKwkJ aWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFtZSwgcnRlLT5lcmVmLT5hbGlhc25h bWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29rcyBsaWtlIGEgdHJ1ZSBkdXBsaWNh dGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwkvKiBJZiB0aGlzIGlzIGEgY2hpbGQgdGFi bGUsIGdldCB0aGUgc2NoZW1hIGFuZCByZWxhdGlvbiBuYW1lcy4gKi8KKwlpZiAocnRpICE9IHRv cF9ydGkpCisJeworCQlwYXJ0bnNwID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAoZ2V0X3Jl bF9uYW1lc3BhY2UocnRlLT5yZWxpZCkpOworCQlwYXJ0cmVsID0gZ2V0X3JlbF9uYW1lKHJ0ZS0+ cmVsaWQpOworCX0KKworCS8qIE9LLCB3ZSBoYXZlIGFsbCB0aGUgYW5zd2VycyB3ZSBuZWVkLiBS ZXR1cm4gdGhlbSB0byB0aGUgY2FsbGVyLiAqLworCXJpZC0+YWxpYXNfbmFtZSA9IHRvcF9ydGUt PmVyZWYtPmFsaWFzbmFtZTsKKwlyaWQtPm9jY3VycmVuY2UgPSBvY2N1cnJlbmNlOworCXJpZC0+ cGFydG5zcCA9IHBhcnRuc3A7CisJcmlkLT5wYXJ0cmVsID0gcGFydHJlbDsKKwlyaWQtPnBsYW5f bmFtZSA9IHJvb3QtPnBsYW5fbmFtZTsKK30KKworLyoKKyAqIENvbXB1dGUgYSByZWxhdGlvbiBp ZGVudGlmaWVyIGZvciBhIHNldCBvZiBSVElzLCBleGNlcHQgZm9yIGFueSBSVEVfSk9JTgorICog UlRJcyB0aGF0IG1heSBiZSBwcmVzZW50LgorICoKKyAqIFJURV9KT0lOIGVudHJpZXMgYXJlIGV4 Y2x1ZGVkIGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgbWVudGlvbmVkIGJ5IHBsYW4KKyAqIGFkdmlj ZS4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBtYWtpbmcgc3VyZSB0aGF0 IHRoZSB0a2V5cyBhcnJheSBpcyBsYXJnZQorICogZW5vdWdoIHRvIHN0b3JlIHRoZSByZXN1bHRz LgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBpZGVudGlmaWVycyBj b21wdXRlZC4KKyAqLworaW50CitwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBs YW5uZXJJbmZvICpyb290LCBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJICAgcGdwYV9pZGVu dGlmaWVyICpyaWRzKQoreworCWludAkJCWNvdW50ID0gMDsKKwlpbnQJCQlydGkgPSAtMTsKKwor CXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJ CVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHBsYW5uZXJfcnRfZmV0Y2gocnRpLCByb290KTsKKworCQlp ZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisJCXBncGFfY29tcHV0 ZV9pZGVudGlmaWVyX2J5X3J0aShyb290LCBydGksICZyaWRzW2NvdW50KytdKTsKKwl9CisKKwlB c3NlcnQoY291bnQgPiAwKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBDcmVhdGUgYW4g YXJyYXkgb2YgcmFuZ2UgdGFibGUgaWRlbnRpZmllcnMgZm9yIGFsbCB0aGUgbm9uLU5VTEwsCisg KiBub24tUlRFX0pPSU4gZW50cmllcyBpbiB0aGUgUGxhbm5lZFN0bXQncyByYW5nZSB0YWJsZS4K KyAqLworcGdwYV9pZGVudGlmaWVyICoKK3BncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9wbGFu bmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KQoreworCUluZGV4CQlydGFibGVfbGVuZ3RoID0g bGlzdF9sZW5ndGgocHN0bXQtPnJ0YWJsZSk7CisJcGdwYV9pZGVudGlmaWVyICpyZXN1bHQgPSBw YWxsb2MwX2FycmF5KHBncGFfaWRlbnRpZmllciwgcnRhYmxlX2xlbmd0aCk7CisJSW5kZXgJICAg KnRvcF9ydGlfbWFwOworCWludAkJCXJ0aW5mb2luZGV4ID0gMDsKKwlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBOVUxMOworCVN1YlBsYW5SVEluZm8gKm5leHRydGluZm8gPSBOVUxMOworCisJLyoK KwkgKiBBY2NvdW50IGZvciByZWxhdGlvbnMgYWRkZGVkIGJ5IGluaGVyaXRhbmNlIGV4cGFuc2lv biBvZiBwYXJ0aXRpb25lZAorCSAqIHRhYmxlcy4KKwkgKi8KKwl0b3BfcnRpX21hcCA9IHBncGFf Y3JlYXRlX3RvcF9ydGlfbWFwKHJ0YWJsZV9sZW5ndGgsIHBzdG10LT5ydGFibGUsCisJCQkJCQkJ CQkJICBwc3RtdC0+YXBwZW5kUmVsYXRpb25zKTsKKworCS8qCisJICogV2hlbiB3ZSBiZWdpbiBp dGVyYXRpbmcsIHdlJ3JlIHByb2Nlc3NpbmcgdGhlIHBvcnRpb24gb2YgdGhlIHJhbmdlCisJICog dGFibGUgdGhhdCBvcmlnaW5hdGVkIGZyb20gdGhlIHRvcC1sZXZlbCBQbGFubmVySW5mbywgc28g c3VicnRpbmZvIGlzCisJICogTlVMTC4gTGF0ZXIsIHN1YnJ0aW5mbyB3aWxsIGJlIHRoZSBTdWJQ bGFuUlRJbmZvIGZvciB0aGUgc3VicXVlcnkgd2hvc2UKKwkgKiBwb3J0aW9uIG9mIHRoZSByYW5n ZSB0YWJsZSB3ZSBhcmUgcHJvY2Vzc2luZy4gbmV4dHJ0aW5mbyBpcyBhbHdheXMgdGhlCisJICog U3ViUGxhblJUSW5mbyB0aGF0IGZvbGxvd3MgdGhlIGN1cnJlbnQgb25lLCBpZiBhbnksIHNvIHdo ZW4gd2UncmUKKwkgKiBwcm9jZXNzaW5nIHRoZSB0b3AtbGV2ZWwgcXVlcnkncyBwb3J0aW9uIG9m IHRoZSByYW5nZSB0YWJsZSwgdGhlIG5leHQKKwkgKiBTdWJQbGFuUlRJbmZvIGlzIHRoZSB2ZXJ5 IGZpcnN0IG9uZS4KKwkgKi8KKwlpZiAocHN0bXQtPnN1YnJ0aW5mb3MgIT0gTlVMTCkKKwkJbmV4 dHJ0aW5mbyA9IGxpbml0aWFsKHBzdG10LT5zdWJydGluZm9zKTsKKworCS8qIE1haW4gbG9vcCBv dmVyIHRoZSByYW5nZSB0YWJsZS4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBydGFi bGVfbGVuZ3RoOyBydGkrKykKKwl7CisJCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKKwkJSW5kZXgJ CXRvcF9ydGk7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKwkJUmFuZ2VUYmxFbnRyeSAqdG9wX3J0 ZTsKKwkJY2hhcgkgICAqcGFydG5zcCA9IE5VTEw7CisJCWNoYXIJICAgKnBhcnRyZWwgPSBOVUxM OworCQlpbnQJCQlvY2N1cnJlbmNlOworCQlwZ3BhX2lkZW50aWZpZXIgKnJpZDsKKworCQkvKgor CQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IFN1YlBsYW5SVEluZm8sIGlmIGl0J3MgdGltZSB0byBk byB0aGF0LgorCQkgKgorCQkgKiBUaGlzIGxvb3AgcHJvYmFibHkgc2hvdWxkbid0IGV2ZXIgaXRl cmF0ZSBtb3JlIHRoYW4gb25jZSwgYmVjYXVzZQorCQkgKiB0aGF0IHdvdWxkIGltcGx5IHRoYXQg YSBzdWJxdWVyeSB3YXMgcGxhbm5lZCBidXQgYWRkZWQgbm90aGluZyB0bworCQkgKiB0aGUgcmFu Z2UgdGFibGU7IGJ1dCBsZXQncyBiZSBkZWZlbnNpdmUgYW5kIGFzc3VtZSBpdCBjYW4gaGFwcGVu LgorCQkgKi8KKwkJd2hpbGUgKG5leHRydGluZm8gIT0gTlVMTCAmJiBydGkgPiBuZXh0cnRpbmZv LT5ydG9mZnNldCkKKwkJeworCQkJcnRpbmZvID0gbmV4dHJ0aW5mbzsKKwkJCWlmICgrK3J0aW5m b2luZGV4ID49IGxpc3RfbGVuZ3RoKHBzdG10LT5zdWJydGluZm9zKSkKKwkJCQluZXh0cnRpbmZv ID0gTlVMTDsKKwkJCWVsc2UKKwkJCQluZXh0cnRpbmZvID0gbGlzdF9udGgocHN0bXQtPnN1YnJ0 aW5mb3MsIHJ0aW5mb2luZGV4KTsKKwkJfQorCisJCS8qIEZldGNoIHRoZSByYW5nZSB0YWJsZSBl bnRyeSwgaWYgYW55LiAqLworCQlydGUgPSBydF9mZXRjaChydGksIHBzdG10LT5ydGFibGUpOwor CisJCS8qCisJCSAqIFdlIGNhbid0IGFuZCBkb24ndCBuZWVkIHRvIGlkZW50aWZ5IG51bGwgZW50 cmllcywgYW5kIHdlIGRvbid0IHdhbnQKKwkJICogdG8gaWRlbnRpZnkgam9pbiBlbnRyaWVzLgor CQkgKi8KKwkJaWYgKHJ0ZSA9PSBOVUxMIHx8IHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJ CWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgbm90IGEgcmVsYXRpb24gYWRkZWQg YnkgcGFydGl0aW9uZWQgdGFibGUgZXhwYW5zaW9uLAorCQkgKiB0aGVuIHRoZSB0b3AgUlRJL1JU RSBhcmUganVzdCB0aGUgc2FtZSBhcyB0aGlzIFJUSS9SVEUuIE90aGVyd2lzZSwKKwkJICogd2Ug bmVlZCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSB0b3AgUlRJL1JURSwgYW5kIG11c3QgYWxzbyBm ZXRjaAorCQkgKiB0aGUgcGFydGl0aW9uIHNjaGVtYSBhbmQgbmFtZS4KKwkJICovCisJCXRvcF9y dGkgPSB0b3BfcnRpX21hcFtydGkgLSAxXTsKKwkJaWYgKHJ0aSA9PSB0b3BfcnRpKQorCQkJdG9w X3J0ZSA9IHJ0ZTsKKwkJZWxzZQorCQl7CisJCQl0b3BfcnRlID0gcnRfZmV0Y2godG9wX3J0aSwg cHN0bXQtPnJ0YWJsZSk7CisJCQlwYXJ0bnNwID0KKwkJCQlnZXRfbmFtZXNwYWNlX25hbWVfb3Jf dGVtcChnZXRfcmVsX25hbWVzcGFjZShydGUtPnJlbGlkKSk7CisJCQlwYXJ0cmVsID0gZ2V0X3Jl bF9uYW1lKHJ0ZS0+cmVsaWQpOworCQl9CisKKwkJLyogQ29tcHV0ZSB0aGUgY29ycmVjdCBvY2N1 cnJlbmNlIG51bWJlci4gKi8KKwkJb2NjdXJyZW5jZSA9IHBncGFfb2NjdXJyZW5jZV9udW1iZXIo cHN0bXQtPnJ0YWJsZSwgdG9wX3J0aV9tYXAsCisJCQkJCQkJCQkJCXJ0aW5mbywgdG9wX3J0aSk7 CisKKwkJLyogR2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHBsYW4gKE5VTEwgZm9yIHRvcGxl dmVsIHF1ZXJ5KS4gKi8KKwkJcGxhbl9uYW1lID0gcnRpbmZvID09IE5VTEwgPyBOVUxMIDogcnRp bmZvLT5wbGFuX25hbWU7CisKKwkJLyogU2F2ZSBhbGwgdGhlIGRldGFpbHMgd2UndmUgZGVyaXZl ZC4gKi8KKwkJcmlkID0gJnJlc3VsdFtydGkgLSAxXTsKKwkJcmlkLT5hbGlhc19uYW1lID0gdG9w X3J0ZS0+ZXJlZi0+YWxpYXNuYW1lOworCQlyaWQtPm9jY3VycmVuY2UgPSBvY2N1cnJlbmNlOwor CQlyaWQtPnBhcnRuc3AgPSBwYXJ0bnNwOworCQlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCQly aWQtPnBsYW5fbmFtZSA9IHBsYW5fbmFtZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisv KgorICogU2VhcmNoIGZvciBhIHBncGFfaWRlbnRpZmllciBpbiB0aGUgYXJyYXkgb2YgaWRlbnRp ZmllcnMgY29tcHV0ZWQgZm9yIHRoZQorICogcmFuZ2UgdGFibGUuIElmIGV4YWN0bHkgb25lIG1h dGNoIGlzIGZvdW5kLCByZXR1cm4gdGhlIG1hdGNoaW5nIFJUSTsgZWxzZQorICogcmV0dXJuIDAu CisgKi8KK0luZGV4CitwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihpbnQgcnRhYmxl X2xlbmd0aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJcmVzdWx0ID0gMDsKKworCWZv ciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7ICsrcnRpKQorCXsKKwkJcGdw YV9pZGVudGlmaWVyICpydGlfcmlkID0gJnJ0X2lkZW50aWZpZXJzW3J0aSAtIDFdOworCisJCS8q IElmIHRoZXJlJ3Mgbm8gaWRlbnRpZmllciBmb3IgdGhpcyBSVEksIHNraXAgaXQuICovCisJCWlm IChydGlfcmlkLT5hbGlhc19uYW1lID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKgorCQkg KiBJZiBpdCBtYXRjaGVzLCByZXR1cm4gdGhpcyBSVEkuIEFzIHVzdWFsLCBhbiBvbWl0dGVkIHBh cnRpdGlvbgorCQkgKiBzY2hlbWEgbWF0Y2hlcyBhbnl0aGluZywgYnV0IHBhcnRpdGlvbiBhbmQg cGxhbiBuYW1lcyBtdXN0IGVpdGhlcgorCQkgKiBtYXRjaCBleGFjdGx5IG9yIGJlIG9taXR0ZWQg b24gYm90aCBzaWRlcy4KKwkJICovCisJCWlmIChzdHJjbXAocmlkLT5hbGlhc19uYW1lLCBydGlf cmlkLT5hbGlhc19uYW1lKSA9PSAwICYmCisJCQlyaWQtPm9jY3VycmVuY2UgPT0gcnRpX3JpZC0+ b2NjdXJyZW5jZSAmJgorCQkJKHJpZC0+cGFydG5zcCA9PSBOVUxMIHx8IHJ0aV9yaWQtPnBhcnRu c3AgPT0gTlVMTCB8fAorCQkJIHN0cmNtcChyaWQtPnBhcnRuc3AsIHJ0aV9yaWQtPnBhcnRuc3Ap ID09IDApICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBhcnRyZWwsIHJ0 aV9yaWQtPnBhcnRyZWwpICYmCisJCQlzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBs YW5fbmFtZSwgcnRpX3JpZC0+cGxhbl9uYW1lKSkKKwkJeworCQkJaWYgKHJlc3VsdCAhPSAwKQor CQkJeworCQkJCS8qIE11bHRpcGxlIG1hdGNoZXMgd2VyZSBmb3VuZC4gKi8KKwkJCQlyZXR1cm4g MDsKKwkJCX0KKwkJCXJlc3VsdCA9IHJ0aTsKKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9 CisKKy8qCisgKiBCdWlsZCBhIG1hcHBpbmcgZnJvbSBlYWNoIFJUSSB0byB0aGUgUlRJIHdob3Nl IGFsaWFzX25hbWUgd2lsbCBiZSB1c2VkIHRvCisgKiBjb25zdHJ1Y3QgdGhlIHJhbmdlIHRhYmxl IGlkZW50aWZpZXIuCisgKgorICogRm9yIGNoaWxkIHJlbGF0aW9ucywgdGhpcyBpcyB0aGUgdG9w bW9zdCBwYXJlbnQgdGhhdCBpcyBzdGlsbCBvZiB0eXBlCisgKiBSVEVfUkVMQVRJT04uIEZvciBv dGhlciByZWxhdGlvbnMsIGl0J3MganVzdCB0aGUgb3JpZ2luYWwgUlRJLgorICoKKyAqIFNpbmNl IHdlJ3JlIGV2ZW50dWFsbHkgZ29pbmcgdG8gbmVlZCB0aGlzIGluZm9ybWF0aW9uIGZvciBldmVy eSBSVEkgaW4KKyAqIHRoZSByYW5nZSB0YWJsZSwgaXQncyBiZXN0IHRvIGNvbXB1dGUgYWxsIHRo ZSBhbnN3ZXJzIGluIGEgc2luZ2xlIHBhc3Mgb3ZlcgorICogdGhlIEFwcGVuZFJlbEluZm8gbGlz dC4gT3RoZXJ3aXNlLCB3ZSBtaWdodCBlbmQgdXAgc2VhcmNoaW5nIHRocm91Z2ggdGhhdAorICog bGlzdCByZXBlYXRlZGx5IGZvciBlbnRyaWVzIG9mIGludGVyZXN0LgorICoKKyAqIE5vdGUgdGhh dCB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgdXNlcyB6ZXJvLWJhc2VkIGluZGV4aW5nLCB3aGlsZSBS VElzIHVzZQorICogMS1iYXNlZCBpbmRleGluZywgc28gc3VidHJhY3QgMSBmcm9tIHRoZSBSVEkg YmVmb3JlIGxvb2tpbmcgaXQgdXAgaW4gdGhlCisgKiBhcnJheS4KKyAqLworc3RhdGljIEluZGV4 ICoKK3BncGFfY3JlYXRlX3RvcF9ydGlfbWFwKEluZGV4IHJ0YWJsZV9sZW5ndGgsIExpc3QgKnJ0 YWJsZSwgTGlzdCAqYXBwaW5mb3MpCit7CisJSW5kZXgJICAgKnRvcF9ydGlfbWFwID0gcGFsbG9j MF9hcnJheShJbmRleCwgcnRhYmxlX2xlbmd0aCk7CisKKwkvKiBJbml0aWFsbHksIG1ha2UgZXZl cnkgUlRJIHBvaW50IHRvIGl0c2VsZi4gKi8KKwlmb3IgKEluZGV4IHJ0aSA9IDE7IHJ0aSA8PSBy dGFibGVfbGVuZ3RoOyArK3J0aSkKKwkJdG9wX3J0aV9tYXBbcnRpIC0gMV0gPSBydGk7CisKKwkv KiBVcGRhdGUgdGhlIG1hcCBmb3IgZWFjaCBBcHBlbmRSZWxJbmZvIG9iamVjdC4gKi8KKwlmb3Jl YWNoX25vZGUoQXBwZW5kUmVsSW5mbywgYXBwaW5mbywgYXBwaW5mb3MpCisJeworCQlJbmRleAkJ cGFyZW50X3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwkJUmFuZ2VUYmxFbnRyeSAqcGFy ZW50X3J0ZSA9IHJ0X2ZldGNoKHBhcmVudF9ydGksIHJ0YWJsZSk7CisKKwkJLyogSWYgdGhlIHBh cmVudCBpcyBub3QgUlRFX1JFTEFUSU9OLCBpZ25vcmUgdGhpcyBlbnRyeS4gKi8KKwkJaWYgKHBh cmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJY29udGludWU7CisKKwkJLyoK KwkJICogTWFwIHRoZSBjaGlsZCB0byB3aGVyZXZlciB3ZSBtYXBwZWQgdGhlIHBhcmVudC4gUGFy ZW50cyBhbHdheXMKKwkJICogcHJlY2VkZSB0aGVpciBjaGlsZHJlbiBpbiB0aGUgQXBwZW5kUmVs SW5mbyBsaXN0LCBzbyB0aGlzIHNob3VsZAorCQkgKiB3b3JrIG91dC4KKwkJICovCisJCXRvcF9y dGlfbWFwW2FwcGluZm8tPmNoaWxkX3JlbGlkIC0gMV0gPSB0b3BfcnRpX21hcFtwYXJlbnRfcnRp IC0gMV07CisJfQorCisJcmV0dXJuIHRvcF9ydGlfbWFwOworfQorCisvKgorICogRmluZCB0aGUg b2NjdXJlbmNlIG51bWJlciBvZiBhIGNlcnRhaW4gcmVsYXRpb24gd2l0aGluIGEgY2VydGFpbiBz dWJxdWVyeS4KKyAqCisgKiBUaGUgc2FtZSBhbGlhcyBuYW1lIGNhbiBvY2N1ciBtdWx0aXBsZSB0 aW1lcyB3aXRoaW4gYSBzdWJxdWVyeSwgYnV0IHdlIHdhbnQKKyAqIHRvIGRpc2FtYmlndWF0ZSBi eSBnaXZpbmcgZGlmZmVyZW50IG9jY3VycmVuY2VzIGRpZmZlcmVudCBpbnRlZ2VyIGluZGV4ZXMu CisgKiBIb3dldmVyLCBjaGlsZCB0YWJsZXMgYXJlIGRpc2FtYmlndWF0ZWQgYnkgaW5jbHVkaW5n IHRoZSB0YWJsZSBuYW1lIHJhdGhlcgorICogdGhhbiBieSBpbmNyZW1lbnRpbmcgdGhlIG9jY3Vy cmVuY2UgbnVtYmVyOyBhbmQgam9pbnMgYXJlIG5vdCBuYW1lZCBhbmQgc28KKyAqIHNob3VsZG4n dCBpbmNyZW1lbnQgdGhlIG9jY3VyZW5jZSBudW1iZXIgZWl0aGVyLgorICovCitzdGF0aWMgaW50 CitwZ3BhX29jY3VycmVuY2VfbnVtYmVyKExpc3QgKnJ0YWJsZSwgSW5kZXggKnRvcF9ydGlfbWFw LAorCQkJCQkgICBTdWJQbGFuUlRJbmZvICpydGluZm8sIEluZGV4IHJ0aSkKK3sKKwlJbmRleAkJ cnRvZmZzZXQgPSAocnRpbmZvID09IE5VTEwpID8gMCA6IHJ0aW5mby0+cnRvZmZzZXQ7CisJaW50 CQkJb2NjdXJyZW5jZSA9IDE7CisJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRpLCBy dGFibGUpOworCisJZm9yIChJbmRleCBwcmlvcl9ydGkgPSBydG9mZnNldCArIDE7IHByaW9yX3J0 aSA8IHJ0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpwcmlvcl9ydGU7CisK KwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGNoaWxkIHJlbCBvZiBhIHBhcmVudCB0aGF0IGlzIGEg cmVsYXRpb24sIHNraXAgaXQuCisJCSAqCisJCSAqIFN1Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBh cmUgZGlzYW1iaWd1YXRlZCBieSBtZW50aW9uaW5nIHRoZSBzY2hlbWEKKwkJICogYW5kIG5hbWUg b2YgdGhlIHRhYmxlLCBub3QgYnkgY291bnRpbmcgdGhlbSBhcyBzZXBhcmF0ZSBvY2N1cnJlbmNl cworCQkgKiBvZiB0aGUgc2FtZSB0YWJsZS4KKwkJICovCisJCWlmICh0b3BfcnRpX21hcFtwcmlv cl9ydGkgLSAxXSAhPSBwcmlvcl9ydGkpCisJCQlicmVhazsKKworCQkvKiBTa2lwIGpvaW5zLiAq LworCQlwcmlvcl9ydGUgPSBydF9mZXRjaChwcmlvcl9ydGksIHJ0YWJsZSk7CisJCWlmIChwcmlv cl9ydGUtPnJ0ZWtpbmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKworCQkvKiBTa2lwIGlm IHRoZSBhbGlhcyBuYW1lIGRpZmZlcnMuICovCisJCWlmIChzdHJjbXAocHJpb3JfcnRlLT5lcmVm LT5hbGlhc25hbWUsIHJ0ZS0+ZXJlZi0+YWxpYXNuYW1lKSAhPSAwKQorCQkJY29udGludWU7CisK KwkJLyogTG9va3MgbGlrZSBhIHRydWUgZHVwbGljYXRlLiAqLworCQkrK29jY3VycmVuY2U7CisJ fQorCisJcmV0dXJuIG9jY3VycmVuY2U7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfaWRlbnRpZmllci5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lk ZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjAwMGQy YjcwODEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRl bnRpZmllci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBn cGFfaWRlbnRpZmllci5oCisgKgkgIGNyZWF0ZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVycyBmb3Ig cmFuZ2UgdGFibGUgZW50cmllcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisK KyNpZm5kZWYgUEdQQV9JREVOVElGSUVSX0gKKyNkZWZpbmUgUEdQQV9JREVOVElGSUVSX0gKKwor I2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5o IgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2lkZW50aWZpZXIKK3sKKwljb25zdCBjaGFyICphbGlh c19uYW1lOworCWludAkJCW9jY3VycmVuY2U7CisJY29uc3QgY2hhciAqcGFydG5zcDsKKwljb25z dCBjaGFyICpwYXJ0cmVsOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdwYV9pZGVudGlm aWVyOworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHBvc3NpYmx5LU5V TEwgc3RyaW5ncy4gKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorc3RyaW5nc19lcXVhbF9vcl9ib3Ro X251bGwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwlpZiAoYSA9PSBiKQorCQly ZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChhID09IE5VTEwgfHwgYiA9PSBOVUxMKQorCQlyZXR1cm4g ZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEsIGIpID09IDA7Cit9CisKK2V4dGVybiBj b25zdCBjaGFyICpwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKGNvbnN0IHBncGFfaWRlbnRpZmllciAq cmlkKTsKK2V4dGVybiB2b2lkIHBncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShQbGFubmVy SW5mbyAqcm9vdCwgSW5kZXggcnRpLAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlk KTsKK2V4dGVybiBpbnQJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3JlbGlkcyhQbGFubmVy SW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkJCQkJCQkJ CSAgIHBncGFfaWRlbnRpZmllciAqcmlkcyk7CitleHRlcm4gcGdwYV9pZGVudGlmaWVyICpwZ3Bh X2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KFBsYW5uZWRTdG10ICpwc3RtdCk7 CisKK2V4dGVybiBJbmRleCBwZ3BhX2NvbXB1dGVfcnRpX2Zyb21faWRlbnRpZmllcihpbnQgcnRh YmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJz LAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX2pvaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uN2QxYWI3MmYxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3BncGFfam9pbi5jCkBAIC0wLDAgKzEsNjI5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX2pvaW4uYworICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFuIHRyZWVzCisgKgor ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5jCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNs dWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJwZ3BhX3NjYW4uaCIKKyNpbmNsdWRlICJwZ3Bh X3dhbGtlci5oIgorCisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9k ZXMvcHJpbnQuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKKy8qCisgKiBUZW1w b3Jhcnkgb2JqZWN0IHVzZWQgd2hlbiB1bnJvbGxpbmcgYSBqb2luIHRyZWUuCisgKi8KK3N0cnVj dCBwZ3BhX2pvaW5fdW5yb2xsZXIKK3sKKwl1bnNpZ25lZAluYWxsb2NhdGVkOworCXVuc2lnbmVk CW51c2VkOworCVBsYW4JICAgKm91dGVyX3N1YnBsYW47CisJRWxpZGVkTm9kZSAqb3V0ZXJfZWxp ZGVkX25vZGU7CisJYm9vbAkJb3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOworCXBncGFfam9pbl9z dHJhdGVneSAqc3RyYXRlZ3k7CisJUGxhbgkgICoqaW5uZXJfc3VicGxhbnM7CisJRWxpZGVkTm9k ZSAqKmlubmVyX2VsaWRlZF9ub2RlczsKKwlwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl91bnJv bGxlcnM7CisJYm9vbAkgICAqaW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyOworfTsKKworc3RhdGlj IHBncGFfam9pbl9zdHJhdGVneSBwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCQkgIFBsYW4gKnBsYW4sCisJCQkJCQkJCQkJCSAg UGxhbiAqKnJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVhbGlubmVyLAorCQkJCQkJ CQkJCQkgIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsCisJCQkJCQkJCQkJCSAgRWxpZGVk Tm9kZSAqKmVsaWRlZHJlYWxpbm5lciwKKwkJCQkJCQkJCQkJICBib29sICpmb3VuZF9hbnlfb3V0 ZXJfZ2F0aGVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIpOwor c3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwg UGxhbiAqKnBsYW4pOworc3RhdGljIEVsaWRlZE5vZGUgKnBncGFfZGVzY2VuZF9hbnlfZ2F0aGVy KFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQkJICAgYm9vbCAqZm91 bmRfYW55X2dhdGhlcik7CitzdGF0aWMgYm9vbCBwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShQbGFu bmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJCQkJRWxpZGVkTm9kZSAqKmVsaWRl ZF9ub2RlKTsKKworc3RhdGljIGJvb2wgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChQbGFuICpw bGFuKTsKK3N0YXRpYyBib29sIGlzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKTsKKworLyoKKyAq IENyZWF0ZSBhbiBpbml0aWFsbHktZW1wdHkgb2JqZWN0IGZvciB1bnJvbGxpbmcgam9pbnMuCisg KgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgaGVscGVyIG9iamVjdCB0aGF0IGNhbiBsYXRl ciBiZSB1c2VkIHRvIGNyZWF0ZSBhCisgKiBwZ3BhX3Vucm9sbGVkX2pvaW4sIGFmdGVyIGZpcnN0 IGNhbGxpbmcgcGdwYV91bnJvbGxfam9pbiBvbmUgb3IgbW9yZSB0aW1lcy4KKyAqLworcGdwYV9q b2luX3Vucm9sbGVyICoKK3BncGFfY3JlYXRlX2pvaW5fdW5yb2xsZXIodm9pZCkKK3sKKwlwZ3Bh X2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXI7CisKKwlqb2luX3Vucm9sbGVyID0gcGFsbG9j MF9vYmplY3QocGdwYV9qb2luX3Vucm9sbGVyKTsKKwlqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk ID0gNDsKKwlqb2luX3Vucm9sbGVyLT5zdHJhdGVneSA9CisJCXBhbGxvY19hcnJheShwZ3BhX2pv aW5fc3RyYXRlZ3ksIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXIt PmlubmVyX3N1YnBsYW5zID0KKwkJcGFsbG9jX2FycmF5KFBsYW4gKiwgam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzID0KKwkJcGFs bG9jX2FycmF5KEVsaWRlZE5vZGUgKiwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9p bl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzID0KKwkJcGFsbG9jX2FycmF5KHBncGFfam9pbl91 bnJvbGxlciAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVyLT5p bm5lcl9iZW5lYXRoX2FueV9nYXRoZXIgPQorCQlwYWxsb2NfYXJyYXkoYm9vbCwgam9pbl91bnJv bGxlci0+bmFsbG9jYXRlZCk7CisKKwlyZXR1cm4gam9pbl91bnJvbGxlcjsKK30KKworLyoKKyAq IFVucm9sbCBvbmUgbGV2ZWwgb2YgYW4gdW5yb2xsYWJsZSBqb2luIHRyZWUuCisgKgorICogT3Vy IGJhc2ljIGdvYWwgaGVyZSBpcyB0byB1bnJvbGwgam9pbiB0cmVlcyBhcyB0aGV5IG9jY3VyIGlu IHRoZSBQbGFuCisgKiB0cmVlIGludG8gYSBzaW1wbGVyIGFuZCBtb3JlIHJlZ3VsYXIgc3RydWN0 dXJlIHRoYXQgd2UgY2FuIG1vcmUgZWFzaWx5CisgKiB1c2UgZm9yIGZ1cnRoZXIgcHJvY2Vzc2lu Zy4gVW5yb2xsaW5nIGlzIG91dGVyLWRlZXAsIHNvIGlmIHRoZSBwbGFuIHRyZWUKKyAqIGhhcyBK b2luMShKb2luMihBLEIpLEpvaW4zKEMsRCkpLCB0aGUgc2FtZSBqb2luIHVucm9sbGVyIG9iamVj dCBzaG91bGQgYmUKKyAqIHVzZWQgZm9yIEpvaW4xIGFuZCBKb2luMiwgYnV0IGEgZGlmZmVyZW50 IG9uZSB3aWxsIGJlIG5lZWRlZCBmb3IgSm9pbjMsCisgKiBzaW5jZSB0aGF0IGludm9sdmVzIGEg am9pbiB3aXRoaW4gdGhlICppbm5lciogc2lkZSBvZiBhbm90aGVyIGpvaW4uCisgKgorICogcGdw YV9wbGFuX3dhbGtlciBjcmVhdGVzIGEgInRvcCBsZXZlbCIgam9pbiB1bnJvbGxlciBvYmplY3Qg d2hlbiBpdAorICogZW5jb3VudGVycyBhIGpvaW4gaW4gYSBwb3J0aW9uIG9mIHRoZSBwbGFuIHRy ZWUgaW4gd2hpY2ggbm8gam9pbiB1bnJvbGxlcgorICogaXMgYWxyZWFkeSBhY3RpdmUuIEZyb20g dGhlcmUsIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluZworICogdG8g d2hhdCBwb3J0aW9uIG9mIHRoZSBwbGFuIHRyZWUgdGhhdCBqb2luIHVucm9sbGVyIGFwcGxpZXMs IGFuZCBmb3IKKyAqIGNyZWF0aW5nIGFueSBzdWJvcmRpbmF0ZSBqb2luIHVucm9sbGVyIG9iamVj dHMgdGhhdCBhcmUgbmVlZGVkIGFzIGEgcmVzdWx0CisgKiBvZiBub24tb3V0ZXItZGVlcCBqb2lu IHRyZWVzLiBXZSBkbyB0aGlzIGJ5IHJldHVybmluZyB0aGUgam9pbiB1bnJvbGxlcgorICogb2Jq ZWN0cyB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBmdXJ0aGVyIHRyYXZlcnNhbCBvZiB0aGUgb3V0 ZXIgYW5kIGlubmVyCisgKiBzdWJ0cmVlcyBvZiB0aGUgY3VycmVudCBwbGFuIG5vZGUgdmlhICpv dXRlcl9qb2luX3Vucm9sbGVyIGFuZAorICogKmlubmVyX2pvaW5fdW5yb2xsZXIsIHJlc3BlY3Rp dmVseS4KKyAqLwordm9pZAorcGdwYV91bnJvbGxfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkgYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJ CQkJIHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlciwKKwkJCQkgcGdwYV9qb2luX3Vu cm9sbGVyICoqb3V0ZXJfam9pbl91bnJvbGxlciwKKwkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoq aW5uZXJfam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3k7CisJ UGxhbgkgICAqcmVhbGlubmVyLAorCQkJICAgKnJlYWxvdXRlcjsKKwlFbGlkZWROb2RlICplbGlk ZWRpbm5lciwKKwkJCSAgICplbGlkZWRvdXRlcjsKKwlpbnQJCQluOworCWJvb2wJCWZvdW5kX2Fu eV9vdXRlcl9nYXRoZXIgPSBmYWxzZTsKKwlib29sCQlmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyID0g ZmFsc2U7CisKKwlBc3NlcnQoam9pbl91bnJvbGxlciAhPSBOVUxMKTsKKworCS8qCisJICogV2Ug bmVlZCB0byBwYXNzIHRoZSBqb2luX3Vucm9sbGVyIG9iamVjdCBkb3duIHRocm91Z2ggY2VydGFp biB0eXBlcyBvZgorCSAqIHBsYW4gbm9kZXMgLS0gYW55dGhpbmcgdGhhdCdzIGNvbnNpZGVyZWQg cGFydCBvZiB0aGUgam9pbiBzdHJhdGVneSwgYW5kCisJICogYW55IG90aGVyIG5vZGVzIHRoYXQg Y2FuIG9jY3VyIGluIGEgam9pbiB0cmVlIGRlc3BpdGUgbm90IGJlaW5nIHNjYW5zCisJICogb3Ig am9pbnMuCisJICoKKwkgKiBUaGlzIGluY2x1ZGVzOgorCSAqCisJICogKDEpIE1hdGVyaWFsaXpl LCBNZW1vaXplLCBhbmQgSGFzaCBub2Rlcywgd2hpY2ggYXJlIHBhcnQgb2YgdGhlIGpvaW4KKwkg KiBzdHJhdGVneSwKKwkgKgorCSAqICgyKSBHYXRoZXIgYW5kIEdhdGhlciBNZXJnZSBub2Rlcywg d2hpY2ggY2FuIG9jY3VyIGF0IGFueSBwb2ludCBpbiB0aGUKKwkgKiBqb2luIHRyZWUgd2hlcmUg dGhlIHBsYW5uZXIgZGVjaWRlZCB0byBpbml0aWF0ZSBwYXJhbGxlbGlzbSwKKwkgKgorCSAqICgz KSBTb3J0IGFuZCBJbmNyZW1lbnRhbFNvcnQgbm9kZXMsIHdoaWNoIGNhbiBvY2N1ciBiZW5lYXRo IE1lcmdlSm9pbgorCSAqIG9yIEdhdGhlck1lcmdlLAorCSAqCisJICogKDQpIEFnZyBhbmQgVW5p cXVlIG5vZGVzLCB3aGljaCBjYW4gb2NjdXIgd2hlbiB3ZSBkZWNpZGUgdG8gbWFrZSB0aGUKKwkg KiBudWxsYWJsZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5pcXVlIGFuZCB0aGVuIGpvaW4gdGhlIHJl c3VsdCwgYW5kCisJICoKKwkgKiAoNSkgUmVzdWx0IG5vZGVzIHdpdGggY2hpbGRyZW4sIHdoaWNo IGNhbiBiZSBhZGRlZCBlaXRoZXIgdG8gcHJvamVjdCB0bworCSAqIGVuZm9yY2UgYSBvbmUtdGlt ZSBmaWx0ZXIgKGJ1dCBSZXN1bHQgbm9kZXMgd2l0aG91dCBjaGlsZHJlbiBhcmUKKwkgKiBkZWdl bmVyYXRlIHNjYW5zIG9yIGpvaW5zKS4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIE1hdGVyaWFsKSB8 fCBJc0EocGxhbiwgTWVtb2l6ZSkgfHwgSXNBKHBsYW4sIEhhc2gpCisJCXx8IElzQShwbGFuLCBH YXRoZXIpIHx8IElzQShwbGFuLCBHYXRoZXJNZXJnZSkKKwkJfHwgaXNfc29ydGluZ19wbGFuKHBs YW4pIHx8IElzQShwbGFuLCBBZ2cpIHx8IElzQShwbGFuLCBVbmlxdWUpCisJCXx8IGlzX3Jlc3Vs dF9ub2RlX3dpdGhfY2hpbGQocGxhbikpCisJeworCQkqb3V0ZXJfam9pbl91bnJvbGxlciA9IGpv aW5fdW5yb2xsZXI7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlJ3ZlIGFscmVh ZHkgaGFuZGxlZCBub2RlcyB0aGF0IHJlcXVpcmUgcGFzcy10aHJvdWdoIHRyZWF0bWVudCwKKwkg KiB0aGlzIHNob3VsZCBiZSBhbiB1bnJvbGxhYmxlIGpvaW4uCisJICovCisJc3RyYXRlZ3kgPSBw Z3BhX2RlY29tcG9zZV9qb2luKHdhbGtlciwgcGxhbiwKKwkJCQkJCQkJICAgJnJlYWxvdXRlciwg JnJlYWxpbm5lciwKKwkJCQkJCQkJICAgJmVsaWRlZG91dGVyLCAmZWxpZGVkaW5uZXIsCisJCQkJ CQkJCSAgICZmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLAorCQkJCQkJCQkgICAmZm91bmRfYW55X2lu bmVyX2dhdGhlcik7CisKKwkvKiBJZiBvdXIgd29ya3NwYWNlIGlzIGZ1bGwsIGV4cGFuZCBpdC4g Ki8KKwlpZiAoam9pbl91bnJvbGxlci0+bnVzZWQgPj0gam9pbl91bnJvbGxlci0+bmFsbG9jYXRl ZCkKKwl7CisJCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgKj0gMjsKKwkJam9pbl91bnJvbGxl ci0+c3RyYXRlZ3kgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+c3RyYXRlZ3ks CisJCQkJCQkgICBwZ3BhX2pvaW5fc3RyYXRlZ3ksCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5u YWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMgPQorCQkJcmVwYWxs b2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMsCisJCQkJCQkgICBQbGFuICos CisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwkJam9pbl91bnJvbGxlci0+ aW5uZXJfZWxpZGVkX25vZGVzID0KKwkJCXJlcGFsbG9jX2FycmF5KGpvaW5fdW5yb2xsZXItPmlu bmVyX2VsaWRlZF9ub2RlcywKKwkJCQkJCSAgIEVsaWRlZE5vZGUgKiwKKwkJCQkJCSAgIGpvaW5f dW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2Fu eV9nYXRoZXIgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfYmVuZWF0 aF9hbnlfZ2F0aGVyLAorCQkJCQkJICAgYm9vbCwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5h bGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMgPQorCQkJcmVwYWxs b2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzLAorCQkJCQkJICAgcGdwYV9q b2luX3Vucm9sbGVyICosCisJCQkJCQkgICBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwl9 CisKKwkvKgorCSAqIFNpbmNlIHdlJ3JlIGZsYXR0ZW5pbmcgb3V0ZXItZGVlcCBqb2luIHRyZWVz LCBpdCBmb2xsb3dzIHRoYXQgaWYgdGhlCisJICogb3V0ZXIgc2lkZSBpcyBzdGlsbCBhbiB1bnJv bGxhYmxlIGpvaW4sIGl0IHNob3VsZCBiZSB1bnJvbGxlZCBpbnRvIHRoaXMKKwkgKiBzYW1lIG9i amVjdC4gT3RoZXJ3aXNlLCB3ZSd2ZSByZWFjaGVkIHRoZSBsaW1pdCBvZiB3aGF0IHdlIGNhbiB1 bnJvbGwKKwkgKiBpbnRvIHRoaXMgb2JqZWN0IGFuZCBtdXN0IHJlbWVtYmVyIHRoZSBvdXRlciBz aWRlIGFzIHRoZSBmaW5hbCBvdXRlcgorCSAqIHN1YnBsYW4uCisJICovCisJaWYgKGVsaWRlZG91 dGVyID09IE5VTEwgJiYgcGdwYV9pc19qb2luKHJlYWxvdXRlcikpCisJCSpvdXRlcl9qb2luX3Vu cm9sbGVyID0gam9pbl91bnJvbGxlcjsKKwllbHNlCisJeworCQlqb2luX3Vucm9sbGVyLT5vdXRl cl9zdWJwbGFuID0gcmVhbG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9lbGlkZWRfbm9k ZSA9IGVsaWRlZG91dGVyOworCQlqb2luX3Vucm9sbGVyLT5vdXRlcl9iZW5lYXRoX2FueV9nYXRo ZXIgPQorCQkJYmVuZWF0aF9hbnlfZ2F0aGVyIHx8IGZvdW5kX2FueV9vdXRlcl9nYXRoZXI7CisJ fQorCisJLyoKKwkgKiBTdG9yZSB0aGUgaW5uZXIgc3VicGxhbi4gSWYgaXQncyBhbiB1bnJvbGxh YmxlIGpvaW4sIGl0IG5lZWRzIHRvIGJlCisJICogZmxhdHRlbmVkIGluIHR1cm4sIGJ1dCBpbnRv IGEgbmV3IHVucm9sbGVyIG9iamVjdCwgbm90IHRoaXMgb25lLgorCSAqLworCW4gPSBqb2luX3Vu cm9sbGVyLT5udXNlZCsrOworCWpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W25dID0gc3RyYXRlZ3k7 CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnNbbl0gPSByZWFsaW5uZXI7CisJam9pbl91 bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzW25dID0gZWxpZGVkaW5uZXI7CisJam9pbl91bnJv bGxlci0+aW5uZXJfYmVuZWF0aF9hbnlfZ2F0aGVyW25dID0KKwkJYmVuZWF0aF9hbnlfZ2F0aGVy IHx8IGZvdW5kX2FueV9pbm5lcl9nYXRoZXI7CisJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYg cGdwYV9pc19qb2luKHJlYWxpbm5lcikpCisJCSppbm5lcl9qb2luX3Vucm9sbGVyID0gcGdwYV9j cmVhdGVfam9pbl91bnJvbGxlcigpOworCWVsc2UKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBO VUxMOworCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1tuXSA9ICppbm5lcl9qb2luX3Vu cm9sbGVyOworfQorCisvKgorICogVXNlIHRoZSBkYXRhIHdlJ3ZlIGFjY3VtdWxhdGVkIGluIGEg cGdwYV9qb2luX3Vucm9sbGVyIG9iamVjdCB0byBjb25zdHJ1Y3QKKyAqIGEgcGdwYV91bnJvbGxl ZF9qb2luLgorICovCitwZ3BhX3Vucm9sbGVkX2pvaW4gKgorcGdwYV9idWlsZF91bnJvbGxlZF9q b2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJIHBncGFfam9pbl91 bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luOwor CWludAkJCWk7CisKKwkvKgorCSAqIFdlIHNob3VsZG4ndCBoYXZlIGdvbmUgZXZlbiBzbyBmYXIg YXMgdG8gY3JlYXRlIGEgam9pbiB1bnJvbGxlciB1bmxlc3MKKwkgKiB3ZSBmb3VuZCBhdCBsZWFz dCBvbmUgdW5yb2xsYWJsZSBqb2luLgorCSAqLworCUFzc2VydChqb2luX3Vucm9sbGVyLT5udXNl ZCA+IDApOworCisJLyogQWxsb2NhdGUgcmVzdWx0IHN0cnVjdHVyZXMuICovCisJdWpvaW4gPSBw YWxsb2MwX29iamVjdChwZ3BhX3Vucm9sbGVkX2pvaW4pOworCXVqb2luLT5uaW5uZXIgPSBqb2lu X3Vucm9sbGVyLT5udXNlZDsKKwl1am9pbi0+c3RyYXRlZ3kgPSBwYWxsb2MwX2FycmF5KHBncGFf am9pbl9zdHJhdGVneSwgam9pbl91bnJvbGxlci0+bnVzZWQpOworCXVqb2luLT5pbm5lciA9IHBh bGxvYzBfYXJyYXkocGdwYV9qb2luX21lbWJlciwgam9pbl91bnJvbGxlci0+bnVzZWQpOworCisJ LyogSGFuZGxlIHRoZSBvdXRlcm1vc3Qgam9pbi4gKi8KKwl1am9pbi0+b3V0ZXIucGxhbiA9IGpv aW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW47CisJdWpvaW4tPm91dGVyLmVsaWRlZF9ub2RlID0g am9pbl91bnJvbGxlci0+b3V0ZXJfZWxpZGVkX25vZGU7CisJdWpvaW4tPm91dGVyLnNjYW4gPQor CQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+b3V0ZXIucGxhbiwKKwkJCQkJCXVqb2lu LT5vdXRlci5lbGlkZWRfbm9kZSwKKwkJCQkJCWpvaW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhf YW55X2dhdGhlciwKKwkJCQkJCXRydWUpOworCisJLyoKKwkgKiBXZSB3YW50IHRoZSBqb2lucyBm cm9tIHRoZSBkZWVwZXN0IHBhcnQgb2YgdGhlIHBsYW4gdHJlZSB0byBhcHBlYXIKKwkgKiBmaXJz dCBpbiB0aGUgcmVzdWx0IG9iamVjdCwgYnV0IHRoZSBqb2luIHVucm9sbGVyIGFkZHMgdGhlbSBp biBleGFjdGx5CisJICogdGhlIHJldmVyc2Ugb2YgdGhhdCBvcmRlciwgc28gd2UgbmVlZCB0byBm bGlwIHRoZSBvcmRlciBvZiB0aGUgYXJyYXlzCisJICogd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGZp bmFsIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgam9pbl91bnJvbGxlci0+bnVzZWQ7 ICsraSkKKwl7CisJCWludAkJCWsgPSBqb2luX3Vucm9sbGVyLT5udXNlZCAtIGkgLSAxOworCisJ CS8qIENvcHkgc3RyYXRlZ3ksIFBsYW4sIGFuZCBFbGlkZWROb2RlLiAqLworCQl1am9pbi0+c3Ry YXRlZ3lbaV0gPSBqb2luX3Vucm9sbGVyLT5zdHJhdGVneVtrXTsKKwkJdWpvaW4tPmlubmVyW2ld LnBsYW4gPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFuc1trXTsKKwkJdWpvaW4tPmlubmVy W2ldLmVsaWRlZF9ub2RlID0gam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVkX25vZGVzW2tdOwor CisJCS8qCisJCSAqIEZpbGwgaW4gcmVtYWluaW5nIGRldGFpbHMsIHVzaW5nIGVpdGhlciB0aGUg bmVzdGVkIGpvaW4gdW5yb2xsZXIsCisJCSAqIG9yIGJ5IGRlcml2aW5nIHRoZW0gZnJvbSB0aGUg cGxhbiBhbmQgZWxpZGVkIG5vZGVzLgorCQkgKi8KKwkJaWYgKGpvaW5fdW5yb2xsZXItPmlubmVy X3Vucm9sbGVyc1trXSAhPSBOVUxMKQorCQkJdWpvaW4tPmlubmVyW2ldLnVucm9sbGVkX2pvaW4g PQorCQkJCXBncGFfYnVpbGRfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJIGpvaW5f dW5yb2xsZXItPmlubmVyX3Vucm9sbGVyc1trXSk7CisJCWVsc2UKKwkJCXVqb2luLT5pbm5lcltp XS5zY2FuID0KKwkJCQlwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCB1am9pbi0+aW5uZXJbaV0ucGxh biwKKwkJCQkJCQkJdWpvaW4tPmlubmVyW2ldLmVsaWRlZF9ub2RlLAorCQkJCQkJCQlqb2luX3Vu cm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRoZXJbaV0sCisJCQkJCQkJCXRydWUpOworCX0K KworCXJldHVybiB1am9pbjsKK30KKworLyoKKyAqIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3Ig cGdwYV9qb2luX3Vucm9sbGVyLgorICovCit2b2lkCitwZ3BhX2Rlc3Ryb3lfam9pbl91bnJvbGxl cihwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIpCit7CisJcGZyZWUoam9pbl91bnJv bGxlci0+c3RyYXRlZ3kpOworCXBmcmVlKGpvaW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zKTsK KwlwZnJlZShqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMpOworCXBmcmVlKGpvaW5f dW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyk7CisJcGZyZWUoam9pbl91bnJvbGxlcik7Cit9CisK Ky8qCisgKiBJZGVudGlmeSB0aGUgam9pbiBzdHJhdGVneSB1c2VkIGJ5IGEgam9pbiBhbmQgdGhl ICJyZWFsIiBpbm5lciBhbmQgb3V0ZXIKKyAqIHBsYW5zLgorICoKKyAqIEZvciBleGFtcGxlLCBh IEhhc2ggSm9pbiBhbHdheXMgaGFzIGEgSGFzaCBub2RlIG9uIHRoZSBpbm5lciBzaWRlLCBidXQK KyAqIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMgdGhlIHJlYWwgaW5uZXIgaW5wdXQgaXMg dGhlIEhhc2ggbm9kZSdzIGNoaWxkLAorICogbm90IHRoZSBIYXNoIG5vZGUgaXRzZWxmLgorICoK KyAqIExpa2V3aXNlLCBhIE1lcmdlIEpvaW4gbWF5IGhhdmUgU29ydCBub3RlIG9uIHRoZSBpbm5l ciBvciBvdXRlciBzaWRlOyBpZgorICogaXQgZG9lcywgdGhlIHJlYWwgaW5wdXQgdG8gdGhlIGpv aW4gaXMgdGhlIFNvcnQgbm9kZSdzIGNoaWxkLCBub3QgdGhlCisgKiBTb3J0IG5vZGUgaXRzZWxm LgorICoKKyAqIEluIGFkZGl0aW9uLCB3aXRoIGEgTWVyZ2UgSm9pbiBvciBhIE5lc3RlZCBMb29w LCB0aGUgam9pbiBwbGFubmluZyBjb2RlCisgKiBtYXkgYWRkIGFkZGl0aW9uYWwgbm9kZXMgc3Vj aCBhcyBNYXRlcmlhbGl6ZSBvciBNZW1vaXplLiBXZSByZWdhcmQgdGhlc2UKKyAqIGFzIGFuIGFz cGVjdCBvZiB0aGUgam9pbiBzdHJhdGVneS4gQXMgaW4gdGhlIHByZXZpb3VzIGNhc2VzLCB0aGUg dHJ1ZSBpbnB1dAorICogdG8gdGhlIGpvaW4gaXMgdGhlIHVuZGVybHlpbmcgbm9kZS4KKyAqCisg KiBIb3dldmVyLCBpZiBhbnkgaW52b2x2ZWQgY2hpbGQgbm9kZSBwcmV2aW91c2x5IGhhZCBhIG5v dy1lbGlkZWQgbm9kZSBzdGFja2VkCisgKiBvbiB0b3AsIHRoZW4gd2UgY2FuJ3QgImxvb2sgdGhy b3VnaCIgdGhhdCBub2RlIC0tIGluZGVlZCwgd2hhdCdzIGdvaW5nIHRvIGJlCisgKiByZWxldmFu dCBmb3Igb3VyIHB1cnBvc2VzIGlzIHRoZSBFbGlkZWROb2RlIG9uIHRvcCBvZiB0aGF0IHBsYW4g bm9kZSwgcmF0aGVyCisgKiB0aGFuIHRoZSBwbGFuIG5vZGUgaXRzZWxmLgorICoKKyAqIElmIHRo ZXJlIGFyZSBtdWx0aXBsZSBlbGlkZWQgbm9kZXMsIHdlIHdhbnQgdGhhdCBvbmUgdGhhdCB3b3Vs ZCBoYXZlIGJlZW4KKyAqIHVwcGVybW9zdCBpbiB0aGUgcGxhbiB0cmVlIHByaW9yIHRvIHNldHJl ZnMgcHJvY2Vzc2luZzsgd2UgZXhwZWN0IHRvIGZpbmQKKyAqIHRoYXQgb25lIGxhc3QgaW4gdGhl IGxpc3Qgb2YgZWxpZGVkIG5vZGVzLgorICoKKyAqIE9uIHJldHVybiAqcmVhbG91dGVyIGFuZCAq cmVhbGlubmVyIHdpbGwgaGF2ZSBiZWVuIHNldCB0byB0aGUgcmVhbCBpbm5lcgorICogYW5kIHJl YWwgb3V0ZXIgcGxhbnMgdGhhdCB3ZSBpZGVudGlmaWVkLCBhbmQgKmVsaWRlZHJlYWxvdXRlciBh bmQKKyAqICplbGlkZWRyZWFsaW5uZXIgdG8gdGhlIGxhc3Qgb2YgYW55IGNvcnJlc3BvZGluZyBl bGlkZWQgbm9kZXMuCisgKiBBZGRpdGlvbmFsbHksICpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyIGFu ZCAqZm91bmRfYW55X2lubmVyX2dhdGhlciB3aWxsCisgKiBiZSBzZXQgdG8gdHJ1ZSBpZiB3ZSBs b29rZWQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSBvbgorICogdGhhdCBz aWRlIG9mIHRoZSBqb2luLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgcGdwYV9q b2luX3N0cmF0ZWd5CitwZ3BhX2RlY29tcG9zZV9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQlQbGFuICoqcmVhbG91dGVyLCBQbGFuICoqcmVh bGlubmVyLAorCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkcmVhbG91dGVyLCBFbGlkZWROb2RlICoq ZWxpZGVkcmVhbGlubmVyLAorCQkJCQlib29sICpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyLCBib29s ICpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyKQoreworCVBsYW5uZWRTdG10ICpwc3RtdCA9IHdhbGtl ci0+cHN0bXQ7CisJSm9pblR5cGUJam9pbnR5cGUgPSAoKEpvaW4gKikgcGxhbiktPmpvaW50eXBl OworCVBsYW4JICAgKm91dGVycGxhbiA9IHBsYW4tPmxlZnR0cmVlOworCVBsYW4JICAgKmlubmVy cGxhbiA9IHBsYW4tPnJpZ2h0dHJlZTsKKwlFbGlkZWROb2RlICplbGlkZWRvdXRlcjsKKwlFbGlk ZWROb2RlICplbGlkZWRpbm5lcjsKKwlwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3k7CisJYm9v bAkJdW5pcXVlb3V0ZXI7CisJYm9vbAkJdW5pcXVlaW5uZXI7CisKKwllbGlkZWRvdXRlciA9IHBn cGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgb3V0ZXJwbGFuKTsKKwllbGlkZWRpbm5lciA9IHBn cGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgaW5uZXJwbGFuKTsKKwkqZm91bmRfYW55X291dGVy X2dhdGhlciA9IGZhbHNlOworCSpmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyID0gZmFsc2U7CisKKwlz d2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNlIFRfTWVyZ2VKb2luOgorCisJCQkvKgor CQkJICogVGhlIHBsYW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwgbm9k ZSBvbiB0aGUKKwkJCSAqIGlubmVyIHNpZGUgb2YgdGhlIE1lcmdlSm9pbjsgaWYgdGhpcyBpcyBw cmVzZW50LCB3ZSByZWNvcmQgaXQKKwkJCSAqIGFzIHBhcnQgb2YgdGhlIGpvaW4gc3RyYXRlZ3ku CisJCQkgKi8KKwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5lcnBsYW4sIE1h dGVyaWFsKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10 LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9NRVJHRV9KT0lOX01BVEVSSUFM SVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fUExB SU47CisKKwkJCS8qCisJCQkgKiBGb3IgYSBNZXJnZUpvaW4sIGVpdGhlciB0aGUgb3V0ZXIgb3Ig dGhlIGlubmVyIHN1YnBsYW4sIG9yCisJCQkgKiBib3RoLCBtYXkgaGF2ZSBuZWVkZWQgdG8gYmUg c29ydGVkOyB3ZSBtdXN0IGRpc3JlZ2FyZCBhbnkgU29ydAorCQkJICogb3IgSW5jcmVtZW50YWxT b3J0IG5vZGUgdG8gZmluZCB0aGUgcmVhbCBpbm5lciBvciBvdXRlcgorCQkJICogc3VicGxhbi4K KwkJCSAqLworCQkJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKG91 dGVycGxhbikpCisJCQkJZWxpZGVkb3V0ZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJm91 dGVycGxhbik7CisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4o aW5uZXJwbGFuKSkKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAm aW5uZXJwbGFuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9OZXN0TG9vcDoKKworCQkJLyoKKwkJ CSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGNob3NlbiB0byBwbGFjZSBhIE1hdGVyaWFsIG9yIE1l bW9pemUgbm9kZQorCQkJICogb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlIE5lc3RMb29wOyBpZiB0 aGlzIGlzIHByZXNlbnQsIHdlCisJCQkgKiByZWNvcmQgaXQgYXMgcGFydCBvZiB0aGUgam9pbiBz dHJhdGVneS4KKwkJCSAqLworCQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVy cGxhbiwgTWF0ZXJpYWwpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09Q X01BVEVSSUFMSVpFOworCQkJfQorCQkJZWxzZSBpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJ c0EoaW5uZXJwbGFuLCBNZW1vaXplKSkKKwkJCXsKKwkJCQllbGlkZWRpbm5lciA9IHBncGFfZGVz Y2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKwkJCQlzdHJhdGVneSA9IEpTVFJBVF9ORVNU RURfTE9PUF9NRU1PSVpFOworCQkJfQorCQkJZWxzZQorCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05F U1RFRF9MT09QX1BMQUlOOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0hhc2hKb2luOgorCisJCQkv KgorCQkJICogVGhlIGlubmVyIHN1YnBsYW4gb2YgYSBIYXNoSm9pbiBpcyBhbHdheXMgYSBIYXNo IG5vZGU7IHRoZSByZWFsCisJCQkgKiBpbm5lciBzdWJwbGFuIGlzIHRoZSBIYXNoIG5vZGUncyBj aGlsZC4KKwkJCSAqLworCQkJQXNzZXJ0KElzQShpbm5lcnBsYW4sIEhhc2gpKTsKKwkJCUFzc2Vy dChlbGlkZWRpbm5lciA9PSBOVUxMKTsKKwkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25v ZGUocHN0bXQsICZpbm5lcnBsYW4pOworCQkJc3RyYXRlZ3kgPSBKU1RSQVRfSEFTSF9KT0lOOwor CQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgbm9k ZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCX0KKworCS8qCisJICogVGhlIHBs YW5uZXIgbWF5IGhhdmUgZGVjaWRlZCB0byBpbXBsZW1lbnQgYSBzZW1pam9pbiBieSBmaXJzdCBt YWtpbmcKKwkgKiB0aGUgbnVsbGFibGUgc2lkZSBvZiB0aGUgcGxhbiB1bmlxdWUsIGFuZCB0aGVu IHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbgorCSAqIGFnYWluc3QgdGhlIHJlc3VsdC4gVGhlcmVm b3JlLCB3ZSBtaWdodCBuZWVkIHRvIGRlc2NlbmQgdGhyb3VnaCBhCisJICogdW5pcXVlIG5vZGUg b24gZWl0aGVyIHNpZGUgb2YgdGhlIHBsYW4uCisJICovCisJdW5pcXVlb3V0ZXIgPSBwZ3BhX2Rl c2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxhbiwgJmVsaWRlZG91dGVyKTsKKwl1bmlx dWVpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmaW5uZXJwbGFuLCAmZWxp ZGVkaW5uZXIpOworCisJLyoKKwkgKiBUaGUgcGxhbm5lciBtYXkgaGF2ZSBkZWNpZGVkIHRvIHBh cmFsbGVsaXplIHBhcnQgb2YgdGhlIGpvaW4gdHJlZSwgc28KKwkgKiB3ZSBjb3VsZCBmaW5kIGEg R2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIGhlcmUuIE5vdGUgdGhhdCwgaWYKKwkgKiBwcmVz ZW50LCB0aGlzIHdpbGwgYXBwZWFyIGJlbG93IG5vZGVzIHdlIGNvbnNpZGVyZWQgYXMgcGFydCBv ZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5LCBidXQgd2UgY291bGQgZmluZCBhbm90aGVyIHVuaXF1 ZW5lc3MtZW5mb3JjaW5nIG5vZGUgYmVsb3cgdGhlCisJICogR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSwgaWYgcHJlc2VudC4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCkKKwl7CisJCWVs aWRlZG91dGVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0bXQsICZvdXRlcnBsYW4sCisJ CQkJCQkJCQkJCSAgZm91bmRfYW55X291dGVyX2dhdGhlcik7CisJCWlmIChmb3VuZF9hbnlfb3V0 ZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShwc3RtdCwgJm91dGVycGxh biwgJmVsaWRlZG91dGVyKSkKKwkJCXVuaXF1ZW91dGVyID0gdHJ1ZTsKKwl9CisJaWYgKGVsaWRl ZGlubmVyID09IE5VTEwpCisJeworCQllbGlkZWRpbm5lciA9IHBncGFfZGVzY2VuZF9hbnlfZ2F0 aGVyKHBzdG10LCAmaW5uZXJwbGFuLAorCQkJCQkJCQkJCQkgIGZvdW5kX2FueV9pbm5lcl9nYXRo ZXIpOworCQlpZiAoZm91bmRfYW55X2lubmVyX2dhdGhlciAmJgorCQkJcGdwYV9kZXNjZW5kX2Fu eV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5lcikpCisJCQl1bmlxdWVpbm5l ciA9IHRydWU7CisJfQorCisJLyoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgUmVzdWx0IG5vZGUg aGFzIGJlZW4gaW5zZXJ0ZWQgZWl0aGVyIHRvIHByb2plY3QgYQorCSAqIHRhcmdldCBsaXN0IG9y IHRvIGltcGxlbWVudCBhIG9uZS10aW1lIGZpbHRlci4gSWYgc28sIHdlIGNhbiBkZXNjZW5kCisJ ICogdGhyb3VnaHQgaXQuIE5vdGUgdGhhdCBhIHJlc3VsdCBub2RlIHdpdGhvdXQgYSBjaGlsZCB3 b3VsZCBiZSBhCisJICogZGVnZW5lcmF0ZSBzY2FuIG9yIGpvaW4sIGFuZCBub3Qgc29tZXRoaW5n IHdlIGNvdWxkIGRlc2NlbmQgdGhyb3VnaC4KKwkgKgorCSAqIFhYWC4gSSBzdXNwZWN0IGl0J3Mg cG9zc2libGUgZm9yIHRoaXMgdG8gaGFwcGVuIGFib3ZlIHRoZSBHYXRoZXIgb3IKKwkgKiBHYXRo ZXIgTWVyZ2Ugbm9kZSwgdG9vLCBidXQgYXBwYXJlbnRseSB3ZSBoYXZlIG5vIHRlc3QgY2FzZSBm b3IgdGhhdAorCSAqIHNjZW5hcmlvLgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMICYm IGlzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQob3V0ZXJwbGFuKSkKKwkJZWxpZGVkb3V0ZXIgPSBw Z3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgJm91dGVycGxhbik7CisJaWYgKGVsaWRlZGlubmVyID09 IE5VTEwgJiYgaXNfcmVzdWx0X25vZGVfd2l0aF9jaGlsZChpbm5lcnBsYW4pKQorCQllbGlkZWRp bm5lciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmaW5uZXJwbGFuKTsKKworCS8qCisJICog SWYgdGhpcyBpcyBhIHNlbWlqb2luIHRoYXQgd2FzIGNvbnZlcnRlZCB0byBhbiBpbm5lciBqb2lu IGJ5IG1ha2luZyBvbmUKKwkgKiBzaWRlIG9yIHRoZSBvdGhlciB1bmlxdWUsIG1ha2UgYSBub3Rl IHRoYXQgdGhlIGlubmVyIG9yIG91dGVyIHN1YnBsYW4sCisJICogYXMgYXBwcm9wcmlhdGUsIHNo b3VsZCBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgcGxhbiBmZWF0dXJlIHdoZW4gdGhlIG1haW4KKwkg KiB0cmVlIHRyYXZlcnNhbCByZWFjaGVzIGl0LgorCSAqCisJICogQ29udmVyc2VseSwgaWYgdGhl IHBsYW5uZXIgY291bGQgaGF2ZSBtYWRlIG9uZSBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZQorCSAq IGFuZCB0aGVyZWJ5IGNvbnZlcnRlZCBpdCB0byBhbiBpbm5lciBqb2luLCBhbmQgY2hvc2Ugbm90 IHRvIGRvIHNvLCB0aGF0CisJICogaXMgYWxzbyB3b3J0aCBub3RpbmcuCisJICoKKwkgKiBOQjog VGhpcyBjb2RlIGNvdWxkIGFwcGVhciBzbGlnaHRseSBoaWdoZXIgdXAgaW4gaW4gdGhpcyBmdW5j dGlvbiwgYnV0CisJICogbm9uZSBvZiB0aGUgbm9kZXMgdGhyb3VnaCB3aGljaCB3ZSBqdXN0IGRl c2NlbmRlZCBzaG91bGQgaGF2ZQorCSAqIGFzc29jaWF0ZWQgUlRJcy4KKwkgKgorCSAqIE5COiBU aGlzIHNlZW1zIGxpa2UgYSBzb21ld2hhdCBoYWNreSB3YXkgb2YgcGFzc2luZyBpbmZvcm1hdGlv biB1cCB0bworCSAqIHRoZSBtYWluIHRyZWUgd2FsaywgYnV0IEkgZG9uJ3QgY3VycmVudGx5IGhh dmUgYSBiZXR0ZXIgaWRlYS4KKwkgKi8KKwlpZiAodW5pcXVlb3V0ZXIpCisJCXBncGFfYWRkX2Z1 dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX1VOSVFVRSwgb3V0ZXJwbGFuKTsK KwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpCisJCXBncGFfYWRkX2Z1dHVy ZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsIG91dGVycGxhbik7 CisJaWYgKHVuaXF1ZWlubmVyKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBH UEFRRl9TRU1JSk9JTl9VTklRVUUsIGlubmVycGxhbik7CisJZWxzZSBpZiAoam9pbnR5cGUgPT0g Sk9JTl9TRU1JKQorCQlwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9TRU1J Sk9JTl9OT05fVU5JUVVFLCBpbm5lcnBsYW4pOworCisJLyogU2V0IG91dHB1dCBwYXJhbWV0ZXJz LiAqLworCSpyZWFsb3V0ZXIgPSBvdXRlcnBsYW47CisJKnJlYWxpbm5lciA9IGlubmVycGxhbjsK KwkqZWxpZGVkcmVhbG91dGVyID0gZWxpZGVkb3V0ZXI7CisJKmVsaWRlZHJlYWxpbm5lciA9IGVs aWRlZGlubmVyOworCXJldHVybiBzdHJhdGVneTsKK30KKworLyoKKyAqIERlc2NlbmQgdGhyb3Vn aCBhIFBsYW4gbm9kZSBpbiBhIGpvaW4gdHJlZSB0aGF0IHRoZSBjYWxsZXIgaGFzIGRldGVybWlu ZWQKKyAqIHRvIGJlIGlycmVsZXZhbnQuCisgKgorICogVXBkYXRlcyAqcGxhbiwgYW5kIHJldHVy bnMgdGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBwZXJ0YWluaW5nIHRvIHRoZQorICogbmV3 IHBsYW4gbm9kZS4KKyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX25vZGUo UGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbikKK3sKKwkqcGxhbiA9ICgqcGxhbiktPmxl ZnR0cmVlOworCXJldHVybiBwZ3BhX2xhc3RfZWxpZGVkX25vZGUocHN0bXQsICpwbGFuKTsKK30K KworLyoKKyAqIERlc2NlbmQgdGhyb3VnaCBhIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZSwg aWYgcHJlc2VudCwgYW5kIGFueSBTb3J0CisgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9kZSBvY2N1 cnJpbmcgdW5kZXIgYSBHYXRoZXIgTWVyZ2UuCisgKgorICogQ2FsbGVyIHNob3VsZCBoYXZlIHZl cmlmaWVkIHRoYXQgdGhlcmUgaXMgbm8gRWxpZGVkTm9kZSBwZXJ0YWluaW5nIHRvCisgKiB0aGUg aW5pdGlhbCB2YWx1ZSBvZiAqcGxhbi4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJu cyB0aGUgbGFzdCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcg cGxhbiBub2RlLiBTZXRzICpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZSBpZiBlaXRoZXIgR2F0aGVy IG9yCisgKiBHYXRoZXIgTWVyZ2Ugd2FzIGZvdW5kLCBhbmQgb3RoZXJ3aXNlIGxlYXZlcyBpdCB1 bmNoYW5nZWQuCisgKi8KK3N0YXRpYyBFbGlkZWROb2RlICoKK3BncGFfZGVzY2VuZF9hbnlfZ2F0 aGVyKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQlib29sICpmb3VuZF9h bnlfZ2F0aGVyKQoreworCWlmIChJc0EoKnBsYW4sIEdhdGhlcikpCisJeworCQkqZm91bmRfYW55 X2dhdGhlciA9IHRydWU7CisJCXJldHVybiBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7 CisJfQorCisJaWYgKElzQSgqcGxhbiwgR2F0aGVyTWVyZ2UpKQorCXsKKwkJRWxpZGVkTm9kZSAq ZWxpZGVkID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsIHBsYW4pOworCisJCWlmIChlbGlkZWQg PT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4oKnBsYW4pKQorCQkJZWxpZGVkID0gcGdwYV9kZXNj ZW5kX25vZGUocHN0bXQsIHBsYW4pOworCisJCSpmb3VuZF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwkJ cmV0dXJuIGVsaWRlZDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIElmICpwbGFu IGlzIGFuIEFnZyBvciBVbmlxdWUgbm9kZSwgd2Ugd2FudCB0byBkZXNjZW5kIHRocm91Z2ggaXQs IHVubGVzcworICogaXQgaGFzIGEgY29ycmVzcG9uZGluZyBlbGlkZWQgbm9kZS4gSWYgaXRzIGlt bWVkaWF0ZSBjaGlsZCBpcyBhIFNvcnQgb3IKKyAqIEluY3JlbWVudGFsU29ydCwgd2UgYWxzbyB3 YW50IHRvIGRlc2NlbmQgdGhyb3VnaCB0aGF0LCB1bmxlc3MgaXQgaGFzIGEKKyAqIGNvcnJlc3Bv bmRpbmcgZWxpZGVkIG5vZGUuCisgKgorICogT24gZW50cnksICplbGlkZWRfbm9kZSBtdXN0IGJl IHRoZSBsYXN0IG9mIGFueSBlbGlkZWQgbm9kZXMgY29ycmVzcG9uZGluZworICogdG8gKnBsYW47 IG9uIGV4aXQsIHRoaXMgd2lsbCBzdGlsbCBiZSB0cnVlLCBidXQgKnBsYW4gbWF5IGhhdmUgYmVl biB1cGRhdGVkLgorICoKKyAqIFRoZSByZWFzb24gd2UgZG9uJ3Qgd2FudCB0byBkZXNjZW5kIHRo cm91Z2ggZWxpZGVkIG5vZGVzIGlzIHRoYXQgYSBzaW5nbGUKKyAqIGpvaW4gdHJlZSBjYW4ndCBj cm9zcyB0aHJvdWdoIGFueSBzb3J0IG9mIGVsaWRlZCBub2RlOiBzdWJxdWVyaWVzIGFyZQorICog cGxhbm5lZCBzZXBhcmF0ZWx5LCBhbmQgcGxhbm5pbmcgaW5zaWRlIGFuIEFwcGVuZCBvciBNZXJn ZUFwcGVuZCBpcworICogc2VwYXJhdGUgZnJvbSBwbGFubmluZyBvdXRzaWRlIG9mIGl0LgorICoK KyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiB3ZSBkZXNjZW5kIHRocm91Z2ggYSBub2Rl IHRoYXQgd2UgYmVsaWV2ZSBpcworICogbWFraW5nIG9uZSBzaWRlIG9mIGEgc2VtaWpvaW4gdW5p cXVlLCBhbmQgb3RoZXJ3aXNlIGZhbHNlLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9kZXNjZW5k X2FueV91bmlxdWUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCUVsaWRl ZE5vZGUgKiplbGlkZWRfbm9kZSkKK3sKKwlib29sCQlkZXNjZW5kID0gZmFsc2U7CisJYm9vbAkJ c2p1bmlxdWUgPSBmYWxzZTsKKworCWlmICgqZWxpZGVkX25vZGUgIT0gTlVMTCkKKwkJcmV0dXJu IHNqdW5pcXVlOworCisJaWYgKElzQSgqcGxhbiwgVW5pcXVlKSkKKwl7CisJCWRlc2NlbmQgPSB0 cnVlOworCQlzanVuaXF1ZSA9IHRydWU7CisJfQorCWVsc2UgaWYgKElzQSgqcGxhbiwgQWdnKSkK Kwl7CisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBzaW1wbGUgQWdnIG5vZGUsIHRoZW4gYXNzdW1l IGl0J3MgaGVyZSB0byBpbXBsZW1lbnQKKwkJICogc2VtaWpvaW4gdW5pcXVlbmVzcy4gT3RoZXJ3 aXNlLCBhc3N1bWUgaXQncyBjb21wbGV0aW5nIGFuIGVhZ2VyCisJCSAqIGFnZ3JlZ2F0aW9uIG9y IHBhcnRpdGlvbndpc2UgYWdncmVnYXRpb24gb3BlcmF0aW9uIHRoYXQgYmVnYW4gYXQgYQorCQkg KiBoaWdoZXIgbGV2ZWwgb2YgdGhlIHBsYW4gdHJlZS4KKwkJICoKKwkJICogWFhYLiBJIHN1c3Bl Y3QgdGhpcyBsb2dpYyBkb2VzIG5vdCBjb3ZlciBhbGwgY2FzZXM6IGNvdWxkbid0IFNKCisJCSAq IHVuaXF1ZW5lc3MgYmUgaW1wbGVtZW50ZWQgaW4gdHdvIHN0ZXBzIHdpdGggYW4gaW50ZXJtZWRp YXRlIEdhdGhlcj8KKwkJICovCisJCWRlc2NlbmQgPSB0cnVlOworCQlzanVuaXF1ZSA9ICgoKEFn ZyAqKSAqcGxhbiktPmFnZ3NwbGl0ID09IEFHR1NQTElUX1NJTVBMRSk7CisJfQorCisJaWYgKGRl c2NlbmQpCisJeworCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxh bik7CisKKwkJaWYgKCplbGlkZWRfbm9kZSA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbigqcGxh bikpCisJCQkqZWxpZGVkX25vZGUgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisJ fQorCisJcmV0dXJuIHNqdW5pcXVlOworfQorCisvKgorICogSXMgdGhpcyBhIFJlc3VsdCBub2Rl IHRoYXQgaGFzIGEgY2hpbGQ/CisgKi8KK3N0YXRpYyBib29sCitpc19yZXN1bHRfbm9kZV93aXRo X2NoaWxkKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBSZXN1bHQpICYmIHBsYW4t PmxlZnR0cmVlICE9IE5VTEw7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUGxhbiBub2RlIHdob3Nl IHB1cnBvc2UgaXMgcHV0IHRoZSBkYXRhIGluIGEgY2VydGFpbiBvcmRlcj8KKyAqLworc3RhdGlj IGJvb2wKK2lzX3NvcnRpbmdfcGxhbihQbGFuICpwbGFuKQoreworCXJldHVybiBJc0EocGxhbiwg U29ydCkgfHwgSXNBKHBsYW4sIEluY3JlbWVudGFsU29ydCk7Cit9CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX2pvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGRjNzI5 ODZhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9p bi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2pv aW4uaAorICoJICBhbmFseXNpcyBvZiBqb2lucyBpbiBQbGFuIHRyZWVzCisgKgorICogQ29weXJp Z2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5oCisgKgorICotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9KT0lOX0gKKyNkZWZpbmUgUEdQQV9KT0lOX0gK KworI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0OwordHlwZWRlZiBzdHJ1 Y3QgcGdwYV9qb2luX3Vucm9sbGVyIHBncGFfam9pbl91bnJvbGxlcjsKK3R5cGVkZWYgc3RydWN0 IHBncGFfdW5yb2xsZWRfam9pbiBwZ3BhX3Vucm9sbGVkX2pvaW47CisKKy8qCisgKiBBbHRob3Vn aCB0aGVyZSBhcmUgdGhyZWUgbWFpbiBqb2luIHN0cmF0ZWdpZXMsIHdlIHRyeSB0byBjbGFzc2lm eSB0aGluZ3MKKyAqIG1vcmUgcHJlY2lzZWx5IGhlcmU6IG1lcmdlIGpvaW5zIGhhdmUgdGhlIG9w dGlvbiBvZiB1c2luZyBtYXRlcmlhbGl6YXRpb24KKyAqIG9uIHRoZSBpbm5lciBzaWRlLCBhbmQg bmVzdGVkIGxvb3BzIGNhbiB1c2UgZWl0aGVyIG1hdGVyaWFsaXphdGlvbiBvcgorICogbWVtb2l6 YXRpb24uCisgKi8KK3R5cGVkZWYgZW51bQoreworCUpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOID0g MCwKKwlKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwlKU1RSQVRfTkVTVEVEX0xPT1Bf UExBSU4sCisJSlNUUkFUX05FU1RFRF9MT09QX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURf TE9PUF9NRU1PSVpFLAorCUpTVFJBVF9IQVNIX0pPSU4KKwkvKiB1cGRhdGUgTlVNX1BHUEFfSk9J Tl9TVFJBVEVHWSBpZiB5b3UgYWRkIGFueXRoaW5nIGhlcmUgKi8KK30gcGdwYV9qb2luX3N0cmF0 ZWd5OworCisjZGVmaW5lIE5VTV9QR1BBX0pPSU5fU1RSQVRFR1kJCSgoaW50KSBKU1RSQVRfSEFT SF9KT0lOICsgMSkKKworLyoKKyAqIEluIGFuIG91dGVyLWRlZXAgam9pbiB0cmVlLCBldmVyeSBt ZW1iZXIgb2YgYW4gdW5yb2xsZWQgam9pbiB3aWxsIGJlIGEgc2NhbiwKKyAqIGJ1dCBqb2luIHRy ZWVzIHdpdGggb3RoZXIgc2hhcGVzIGNhbiBjb250YWluIHVucm9sbGVkIGpvaW5zLgorICoKKyAq IFRoZSBwbGFuIG5vZGUgd2Ugc3RvcmUgaGVyZSB3aWxsIGJlIHRoZSBpbm5lciBvciBvdXRlciBj aGlsZCBvZiB0aGUgam9pbgorICogbm9kZSwgYXMgYXBwcm9wcmlhdGUsIGV4Y2VwdCB0aGF0IHdl IGxvb2sgdGhyb3VnaCBzdWJub2RlcyB0aGF0IHdlIHJlZ2FyZCBhcworICogcGFydCBvZiB0aGUg am9pbiBtZXRob2QgaXRzZWxmLiBGb3IgaW5zdGFuY2UsIGZvciBhIE5lc3RlZCBMb29wIHRoYXQK KyAqIG1hdGVyaWFsaXplcyB0aGUgaW5uZXIgaW5wdXQsIHdlJ2xsIHN0b3JlIHRoZSBjaGlsZCBv ZiB0aGUgTWF0ZXJpYWxpemUgbm9kZSwKKyAqIG5vdCB0aGUgTWF0ZXJpYWxpemUgbm9kZSBpdHNl bGYuCisgKgorICogSWYgc2V0cmVmcyBwcm9jZXNzaW5nIGVsaWRlZCBvbmUgb3IgbW9yZSBub2Rl cyBmcm9tIHRoZSBwbGFuIHRyZWUsIHRoZW4KKyAqIHdlJ2xsIHN0b3JlIGRldGFpbHMgYWJvdXQg dGhlIHRvcG1vc3Qgb2YgdGhvc2UgaW4gZWxpZGVkX25vZGU7IG90aGVyd2lzZSwKKyAqIGl0IHdp bGwgYmUgTlVMTC4KKyAqCisgKiBFeGFjdGx5IG9uZSBvZiBzY2FuIGFuZCB1bnJvbGxlZF9qb2lu IHdpbGwgYmUgbm9uLU5VTEwuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJUGxhbgkgICAqcGxh bjsKKwlFbGlkZWROb2RlICplbGlkZWRfbm9kZTsKKwlzdHJ1Y3QgcGdwYV9zY2FuICpzY2FuOwor CXBncGFfdW5yb2xsZWRfam9pbiAqdW5yb2xsZWRfam9pbjsKK30gcGdwYV9qb2luX21lbWJlcjsK KworLyoKKyAqIFdlIGNvbnZlcnQgb3V0ZXItZGVlcCBqb2luIHRyZWVzIHRvIGEgZmxhdCBzdHJ1 Y3R1cmU7IHRoYXQgaXMsICgoQSBKT0lOIEIpCisgKiBKT0lOIEMpIEpPSU4gRCBnZXRzIGNvbnZl cnRlZCB0byBvdXRlciA9IEEsIGlubmVyID0gPEIgQyBEPi4gIFdoZW4gam9pbnMKKyAqIGFyZW4n dCBvdXRlci1kZWVwLCBzdWJzdHJ1Y3R1cmUgaXMgcmVxdWlyZWQsIGUuZy4gKEEgSk9JTiBCKSBK T0lOIChDIEpPSU4gRCkKKyAqIGlzIHJlcHJlc2VudGVkIGFzIG91dGVyID0gQSwgaW5uZXIgPSA8 QiBYPiwgd2hlcmUgWCBpcyBhIHBncGFfdW5yb2xsZWRfam9pbgorICogY292ZXJpbmcgQy1ELgor ICovCitzdHJ1Y3QgcGdwYV91bnJvbGxlZF9qb2luCit7CisJLyogT3V0ZXJtb3N0IG1lbWJlcjsg bXVzdCBub3QgaXRzZWxmIGJlIGFuIHVucm9sbGVkIGpvaW4uICovCisJcGdwYV9qb2luX21lbWJl ciBvdXRlcjsKKworCS8qIE51bWJlciBvZiBpbm5lciBtZW1iZXJzLiBMZW5ndGggb2YgdGhlIHN0 cmF0ZWd5IGFuZCBpbm5lciBhcnJheXMuICovCisJdW5zaWduZWQJbmlubmVyOworCisJLyogQXJy YXkgb2Ygc3RyYXRlZ2llcywgb25lIHBlciBub24tb3V0ZXJtb3N0IG1lbWJlci4gKi8KKwlwZ3Bh X2pvaW5fc3RyYXRlZ3kgKnN0cmF0ZWd5OworCisJLyogQXJyYXkgb2YgbWVtYmVycywgZXhjbHVk aW5nIHRoZSBvdXRlcm1vc3QuIERlZXBlc3QgZmlyc3QuICovCisJcGdwYV9qb2luX21lbWJlciAq aW5uZXI7Cit9OworCisvKgorICogRG9lcyB0aGlzIHBsYW4gbm9kZSBpbmhlcml0IGZyb20gSm9p bj8KKyAqLworc3RhdGljIGlubGluZSBib29sCitwZ3BhX2lzX2pvaW4oUGxhbiAqcGxhbikKK3sK KwlyZXR1cm4gSXNBKHBsYW4sIE5lc3RMb29wKSB8fCBJc0EocGxhbiwgTWVyZ2VKb2luKSB8fCBJ c0EocGxhbiwgSGFzaEpvaW4pOworfQorCitleHRlcm4gcGdwYV9qb2luX3Vucm9sbGVyICpwZ3Bh X2NyZWF0ZV9qb2luX3Vucm9sbGVyKHZvaWQpOworZXh0ZXJuIHZvaWQgcGdwYV91bnJvbGxfam9p bihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkgUGxhbiAqcGxhbiwg Ym9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJIHBncGFfam9pbl91bnJvbGxlciAqam9p bl91bnJvbGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqb3V0ZXJfam9pbl91bnJv bGxlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICoqaW5uZXJfam9pbl91bnJvbGxlcik7 CitleHRlcm4gcGdwYV91bnJvbGxlZF9qb2luICpwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4ocGdw YV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQkJCQkJcGdwYV9qb2luX3Vu cm9sbGVyICpqb2luX3Vucm9sbGVyKTsKK2V4dGVybiB2b2lkIHBncGFfZGVzdHJveV9qb2luX3Vu cm9sbGVyKHBncGFfam9pbl91bnJvbGxlciAqam9pbl91bnJvbGxlcik7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi44OWE2NzVmZjkzZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9vdXRwdXQuYwpAQCAtMCwwICsxLDYyOCBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogcGdwYV9vdXRwdXQuYworICoJICBwcm9kdWNlIHRleHR1YWwgb3V0cHV0IGZy b20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2FsaworICoKKyAqIENvcHlyaWdodCAoYykg MjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAg Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ3BhX291dHB1 dC5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rl cy5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKyNpbmNsdWRlICJ1dGlscy9idWls dGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorCisvKgorICogQ29udGV4dCBv YmplY3QgZm9yIHRleHR1YWwgYWR2aWNlIGdlbmVyYXRpb24uCisgKgorICogcnRfaWRlbnRpZmll cnMgaXMgdGhlIGNhbGxlci1wcm92aWRlZCBhcnJheSBvZiByYW5nZSB0YWJsZSBpZGVudGlmaWVy cy4KKyAqIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiBwZ3BhX2lkZW50aWZpZXIuYyBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIGJ1ZiBpcyB0aGUgY2FsbGVyLXByb3ZpZGVkIG91dHB1 dCBidWZmZXIuCisgKgorICogd3JhcF9jb2x1bW4gaXMgdGhlIHdyYXAgY29sdW1uLCBzbyB0aGF0 IHdlIGRvbid0IGNyZWF0ZSBvdXRwdXQgdGhhdCBpcworICogdG9vIHdpZGUuIFNlZSBwZ3BhX21h eWJlX2xpbmVicmVhaygpIGFuZCBjb21tZW50cyBpbiBwZ3BhX291dHB1dF9hZHZpY2UuCisgKi8K K3R5cGVkZWYgc3RydWN0IHBncGFfb3V0cHV0X2NvbnRleHQKK3sKKwljb25zdCBjaGFyICoqcmlk X3N0cmluZ3M7CisJU3RyaW5nSW5mbwlidWY7CisJaW50CQkJd3JhcF9jb2x1bW47Cit9IHBncGFf b3V0cHV0X2NvbnRleHQ7CisKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4o cGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCSAgcGdwYV91bnJvbGxlZF9q b2luICpqb2luKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIp Oworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfc2Nhbl9zdHJhdGVneShwZ3BhX291dHB1dF9jb250 ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3ksCisJ CQkJCQkJCQkgIExpc3QgKnNjYW5zKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X2JpdG1hcF9p bmRleF9kZXRhaWxzKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCQkJCSBQ bGFuICpwbGFuKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3JlbGF0aW9uX25hbWUocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwgT2lkIHJlbGlkKTsKK3N0YXRpYyB2b2lkIHBncGFfb3V0 cHV0X3F1ZXJ5X2ZlYXR1cmUocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJ CSAgcGdwYV9xZl90eXBlIHR5cGUsCisJCQkJCQkJCQkgIExpc3QgKnF1ZXJ5X2ZlYXR1cmVzKTsK K3N0YXRpYyB2b2lkIHBncGFfb3V0cHV0X3NpbXBsZV9zdHJhdGVneShwZ3BhX291dHB1dF9jb250 ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJCWNoYXIgKnN0cmF0ZWd5LAorCQkJCQkJCQkJCUxpc3Qg KnJlbGlkX3NldHMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfbm9fZ2F0aGVyKHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworc3Rh dGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRl eHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKKworc3Rh dGljIGNoYXIgKnBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBz dHJhdGVneSk7CitzdGF0aWMgY2hhciAqcGdwYV9jc3RyaW5nX3NjYW5fc3RyYXRlZ3kocGdwYV9z Y2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KTsKK3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfcXVlcnlf ZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKTsKKworc3RhdGljIHZvaWQgcGdwYV9tYXli ZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBidWYsIGludCB3cmFwX2NvbHVtbik7CisKKy8qCisgKiBB cHBlbmQgcXVlcnkgYWR2aWNlIHRvIHRoZSBwcm92aWRlZCBidWZmZXIuCisgKgorICogQmVmb3Jl IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgJ3dhbGtlcicgbXVzdCBiZSB1c2VkIHRvIGl0ZXJhdGUg b3ZlciB0aGUKKyAqIG1haW4gcGxhbiB0cmVlIGFuZCBhbGwgc3VicGxhbnMgZnJvbSB0aGUgUGxh bm5lZFN0bXQuCisgKgorICogJ3J0X2lkZW50aWZpZXJzJyBpcyBhIHRhYmxlIG9mIHVuaXF1ZSBp ZGVudGlmaWVycywgb25lIGZvciBlYWNoIFJUSS4KKyAqIFNlZSBwZ3BhX2NyZWF0ZV9pZGVudGlm aWVyc19mb3JfcGxhbm5lZF9zdG10KCkuCisgKgorICogUmVzdWx0cyB3aWxsIGJlIGFwcGVuZGVk IHRvICdidWYnLgorICovCit2b2lkCitwZ3BhX291dHB1dF9hZHZpY2UoU3RyaW5nSW5mbyBidWYs IHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCSAgIHBncGFfaWRlbnRpZmll ciAqcnRfaWRlbnRpZmllcnMpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0 aCh3YWxrZXItPnBzdG10LT5ydGFibGUpOworCUxpc3RDZWxsICAgKmxjOworCXBncGFfb3V0cHV0 X2NvbnRleHQgY29udGV4dDsKKworCS8qIEJhc2ljIGluaXRpYWxpemF0aW9uLiAqLworCW1lbXNl dCgmY29udGV4dCwgMCwgc2l6ZW9mKHBncGFfb3V0cHV0X2NvbnRleHQpKTsKKwljb250ZXh0LmJ1 ZiA9IGJ1ZjsKKworCS8qCisJICogQ29udmVydCBpZGVudGlmaWVycyB0byBzdHJpbmcgZm9ybS4g Tm90ZSB0aGF0IHRoZSBsb29wIHZhcmlhYmxlIGhlcmUgaXMKKwkgKiBub3QgYW4gUlRJLCBiZWNh dXNlIFJUSXMgYXJlIDEtYmFzZWQuIFNvbWUgUlRJcyB3aWxsIGhhdmUgbm8KKwkgKiBpZGVudGlm aWVyLCBlaXRoZXIgYmVjYXVzZSB0aGUgcmVsb3B0a2luZCBpcyBSVEVfSk9JTiBvciBiZWNhdXNl IHRoYXQKKwkgKiBwb3J0aW9uIG9mIHRoZSBxdWVyeSBkaWRuJ3QgbWFrZSBpdCBpbnRvIHRoZSBm aW5hbCBwbGFuLgorCSAqLworCWNvbnRleHQucmlkX3N0cmluZ3MgPSBwYWxsb2MwX2FycmF5KGNv bnN0IGNoYXIgKiwgcnRhYmxlX2xlbmd0aCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBydGFibGVf bGVuZ3RoOyArK2kpCisJCWlmIChydF9pZGVudGlmaWVyc1tpXS5hbGlhc19uYW1lICE9IE5VTEwp CisJCQljb250ZXh0LnJpZF9zdHJpbmdzW2ldID0gcGdwYV9pZGVudGlmaWVyX3N0cmluZygmcnRf aWRlbnRpZmllcnNbaV0pOworCisJLyoKKwkgKiBJZiB0aGUgdXNlciBjaG9vc2VzIHRvIHVzZSBF WFBMQUlOIChQTEFOX0FEVklDRSkgaW4gYW4gODAtY29sdW1uIHdpbmRvdworCSAqIGZyb20gYSBw c3FsIGNsaWVudCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MsIHBzcWwgd2lsbCBhZGQgb25lIHNwYWNl IHRvCisJICogdGhlIGxlZnQgb2YgdGhlIG91dHB1dCBhbmQgRVhQTEFJTiB3aWxsIGFkZCB0d28g bW9yZSB0byB0aGUgbGVmdCBvZiB0aGUKKwkgKiBhZHZpY2UuIFRodXMsIGxpbmVzIG9mIG1vcmUg dGhhbiA3NyBjaGFyYWN0ZXJzIHdpbGwgd3JhcC4gV2Ugc2V0IHRoZQorCSAqIHdyYXAgbGltaXQg dG8gNzYgaGVyZSBzbyB0aGF0IHRoZSBvdXRwdXQgd29uJ3QgcmVhY2ggYWxsIHRoZSB3YXkgdG8g dGhlCisJICogdmVyeSBsYXN0IGNvbHVtbiBvZiB0aGUgdGVybWluYWwuCisJICoKKwkgKiBPZiBj b3Vyc2UsIHRoaXMgaXMgZmFpcmx5IGFyYml0cmFyeSBzZXQgb2YgYXNzdW1wdGlvbnMsIGFuZCBv bmUgY291bGQKKwkgKiB3ZWxsIG1ha2UgYW4gYXJndW1lbnQgZm9yIGEgZGlmZmVyZW50IHdyYXAg bGltaXQsIG9yIGZvciBhIGNvbmZpZ3VyYWJsZQorCSAqIG9uZS4KKwkgKi8KKwljb250ZXh0Lndy YXBfY29sdW1uID0gNzY7CisKKwkvKgorCSAqIEVhY2ggcGllY2Ugb2YgSk9JTl9PUkRFUigpIGFk dmljZSBmdWxseSBkZXNjcmliZXMgdGhlIGpvaW4gb3JkZXIgZm9yIGEKKwkgKiBhIHNpbmdsZSB1 bnJvbGxlZCBqb2luLiBNZXJnaW5nIGlzIG5vdCBwZXJtaXR0ZWQsIGJlY2F1c2UgdGhhdCB3b3Vs ZAorCSAqIGNoYW5nZSB0aGUgbWVhbmluZywgZS5nLiBTRVFfU0NBTihhIGIgYyBkKSBtZWFucyBz aW1wbHkgdGhhdCBzZXF1ZW50aWFsCisJICogc2NhbnMgc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCBv ZiB0aG9zZSByZWxhdGlvbnMsIGFuZCBpcyB0aHVzIGVxdWl2YWxlbnQKKwkgKiB0byBTRVFfU0NB TihhIGIpIFNFUV9TQ0FOKGMgZCksIGJ1dCBKT0lOX09SREVSKGEgYiBjIGQpIG1lYW5zIHRoYXQg ImEiCisJICogaXMgdGhlIGRyaXZpbmcgdGFibGUgd2hpY2ggaXMgdGhlbiBqb2luZWQgdG8gImIi IHRoZW4gImMiIHRoZW4gImQiLAorCSAqIHdoaWNoIGlzIHRvdGFsbHkgZGlmZmVyZW50IGZyb20g Sk9JTl9PUkRFUihhIGIpIGFuZCBKT0lOX09SREVSKGMgZCkuCisJICovCisJZm9yZWFjaChsYywg d2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwl7CisJCXBncGFfdW5yb2xsZWRfam9p biAqdWpvaW4gPSBsZmlyc3QobGMpOworCisJCWlmIChidWYtPmxlbiA+IDApCisJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihidWYsICdcbicpOworCQlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQuYnVm LCAiSk9JTl9PUkRFUigiKTsKKwkJcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbigmY29udGV4dCwg dWpvaW4pOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LmJ1ZiwgJyknKTsKKwkJcGdw YV9tYXliZV9saW5lYnJlYWsoY29udGV4dC5idWYsIGNvbnRleHQud3JhcF9jb2x1bW4pOworCX0K KworCS8qIEVtaXQgam9pbiBzdHJhdGVneSBhZHZpY2UuICovCisJZm9yIChpbnQgcyA9IDA7IHMg PCBOVU1fUEdQQV9KT0lOX1NUUkFURUdZOyArK3MpCisJeworCQljaGFyCSAgICpzdHJhdGVneSA9 IHBncGFfY3N0cmluZ19qb2luX3N0cmF0ZWd5KHMpOworCisJCXBncGFfb3V0cHV0X3NpbXBsZV9z dHJhdGVneSgmY29udGV4dCwKKwkJCQkJCQkJCXN0cmF0ZWd5LAorCQkJCQkJCQkJd2Fsa2VyLT5q b2luX3N0cmF0ZWdpZXNbc10pOworCX0KKworCS8qCisJICogRW1pdCBzY2FuIHN0cmF0ZWd5IGFk dmljZSAoYnV0IG5vdCBmb3Igb3JkaW5hcnkgc2NhbnMsIHdoaWNoIGFyZQorCSAqIGRlZmluaXRp b25hbGx5IHVuaW50ZXJlc3RpbmcpLgorCSAqLworCWZvciAoaW50IGMgPSAwOyBjIDwgTlVNX1BH UEFfU0NBTl9TVFJBVEVHWTsgKytjKQorCQlpZiAoYyAhPSBQR1BBX1NDQU5fT1JESU5BUlkpCisJ CQlwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KCZjb250ZXh0LCBjLCB3YWxrZXItPnNjYW5zW2Nd KTsKKworCS8qIEVtaXQgcXVlcnkgZmVhdHVyZSBhZHZpY2UuICovCisJZm9yIChpbnQgdCA9IDA7 IHQgPCBOVU1fUEdQQV9RRl9UWVBFUzsgKyt0KQorCQlwZ3BhX291dHB1dF9xdWVyeV9mZWF0dXJl KCZjb250ZXh0LCB0LCB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3RdKTsKKworCS8qIEVtaXQgTk9f R0FUSEVSIGFkdmljZS4gKi8KKwlwZ3BhX291dHB1dF9ub19nYXRoZXIoJmNvbnRleHQsIHdhbGtl ci0+bm9fZ2F0aGVyX3NjYW5zKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgbWVtYmVycyBvZiBh biB1bnJvbGxlZCBqb2luLCBmaXJzdCB0aGUgb3V0ZXJtb3N0IG1lbWJlciwgYW5kCisgKiB0aGVu IHRoZSBpbm5lciBtZW1iZXJzIG9uZSBieSBvbmUsIGFzIHBhcnQgb2YgSk9JTl9PUkRFUigpIGFk dmljZS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4ocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV91bnJvbGxlZF9qb2luICpqb2lu KQoreworCXBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKGNvbnRleHQsICZqb2luLT5vdXRlcik7CisK Kwlmb3IgKGludCBrID0gMDsgayA8IGpvaW4tPm5pbm5lcjsgKytrKQorCXsKKwkJcGdwYV9qb2lu X21lbWJlciAqbWVtYmVyID0gJmpvaW4tPmlubmVyW2tdOworCisJCXBncGFfbWF5YmVfbGluZWJy ZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCXBncGFfb3V0cHV0X2pvaW5fbWVtYmVyKGNv bnRleHQsIG1lbWJlcik7CisJfQorfQorCisvKgorICogT3V0cHV0IGEgc2luZ2xlIG1lbWJlciBv ZiBhbiB1bnJvbGxlZCBqb2luIGFzIHBhcnQgb2YgSk9JTl9PUkRFUigpIGFkdmljZS4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X2pvaW5fbWVtYmVyKHBncGFfb3V0cHV0X2NvbnRleHQg KmNvbnRleHQsCisJCQkJCQlwZ3BhX2pvaW5fbWVtYmVyICptZW1iZXIpCit7CisJaWYgKG1lbWJl ci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnKCcpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKGNvbnRleHQsIG1l bWJlci0+dW5yb2xsZWRfam9pbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1 ZiwgJyknKTsKKwl9CisJZWxzZQorCXsKKwkJcGdwYV9zY2FuICAqc2NhbiA9IG1lbWJlci0+c2Nh bjsKKworCQlBc3NlcnQoc2NhbiAhPSBOVUxMKTsKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHNjYW4t PnJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250 ZXh0LCBjb250ZXh0LT5idWYsIHNjYW4tPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAneycpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRp b25zKGNvbnRleHQsIGNvbnRleHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJCWFwcGVuZFN0cmlu Z0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ30nKTsKKwkJfQorCX0KK30KKworLyoKKyAqIE91dHB1 dCBhZHZpY2UgZm9yIGEgTGlzdCBvZiBwZ3BhX3NjYW4gb2JqZWN0cy4KKyAqCisgKiBBbGwgdGhl IHNjYW5zIG11c3QgdXNlIHRoZSBzdHJhdGVneSBzcGVjaWZpZWQgYnkgdGhlICJzdHJhdGVneSIg YXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBn cGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsCisJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBz dHJhdGVneSwKKwkJCQkJCSAgTGlzdCAqc2NhbnMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOwor CisJaWYgKHNjYW5zID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVu ID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBl bmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJCSBwZ3BhX2NzdHJpbmdfc2Nh bl9zdHJhdGVneShzdHJhdGVneSkpOworCisJZm9yZWFjaF9wdHIocGdwYV9zY2FuLCBzY2FuLCBz Y2FucykKKwl7CisJCVBsYW4JICAgKnBsYW4gPSBzY2FuLT5wbGFuOworCisJCWlmIChmaXJzdCkK KwkJCWZpcnN0ID0gZmFsc2U7CisJCWVsc2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWso Y29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCX0KKworCQkvKiBPdXRwdXQgdGhlIHJlbGF0aW9u IGlkZW50aWZpZXJzLiAqLworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nhbi0+cmVsaWRzKSA9PSBC TVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQt PmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwg Y29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnKScpOworCQl9CisKKwkJLyogRm9yIHNjYW5zIGludm9sdmluZyBpbmRleGVz LCBvdXRwdXQgaW5kZXggaW5mb3JtYXRpb24uICovCisJCWlmIChzdHJhdGVneSA9PSBQR1BBX1ND QU5fSU5ERVgpCisJCXsKKwkJCUFzc2VydChJc0EocGxhbiwgSW5kZXhTY2FuKSk7CisJCQlwZ3Bh X21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0 X3JlbGF0aW9uX25hbWUoY29udGV4dCwgKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4aWQpOwor CQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9JTkRFWF9PTkxZKQorCQl7CisJ CQlBc3NlcnQoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKTsKKwkJCXBncGFfbWF5YmVfbGluZWJy ZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5n SW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFt ZShjb250ZXh0LAorCQkJCQkJCQkJICAoKEluZGV4T25seVNjYW4gKikgcGxhbiktPmluZGV4aWQp OworCQl9CisJCWVsc2UgaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9CSVRNQVBfSEVBUCkKKwkJ eworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2Nv bHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcgJyk7CisJCQlw Z3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBwbGFuLT5sZWZ0dHJlZSk7 CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJ cGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7 Cit9CisKKy8qCisgKiBPdXRwdXQgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggaW5kZXggb3IgaW5k ZXhlcyBwb3dlciBhIEJpdG1hcEhlYXBTY2FuLgorICoKKyAqIFdlIGVtaXQgJiYoaTEgaTIgaTMp IGZvciBhIEJpdG1hcEFuZCBiZXR3ZWVuIGluZGV4ZXMgaTEsIGkyLCBhbmQgaTM7CisgKiBhbmQg bGlrZXdpc2UgfHwoaTEgaTIgaTMpIGZvciBhIHNpbWlsYXIgQml0bWFwT3Igb3BlcmF0aW9uLgor ICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFpbHMocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwgUGxhbiAqcGxhbikKK3sKKwljaGFyCSAgICpvcGVyYXRv cjsKKwlMaXN0CSAgICpiaXRtYXBwbGFuczsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAo SXNBKHBsYW4sIEJpdG1hcEluZGV4U2NhbikpCisJeworCQlCaXRtYXBJbmRleFNjYW4gKmJpdG1h cGluZGV4c2NhbiA9IChCaXRtYXBJbmRleFNjYW4gKikgcGxhbjsKKworCQlwZ3BhX291dHB1dF9y ZWxhdGlvbl9uYW1lKGNvbnRleHQsIGJpdG1hcGluZGV4c2Nhbi0+aW5kZXhpZCk7CisJCXJldHVy bjsKKwl9CisKKwlpZiAoSXNBKHBsYW4sIEJpdG1hcE9yKSkKKwl7CisJCW9wZXJhdG9yID0gInx8 IjsKKwkJYml0bWFwcGxhbnMgPSAoKEJpdG1hcE9yICopIHBsYW4pLT5iaXRtYXBwbGFuczsKKwl9 CisJZWxzZSBpZiAoSXNBKHBsYW4sIEJpdG1hcEFuZCkpCisJeworCQlvcGVyYXRvciA9ICImJiI7 CisJCWJpdG1hcHBsYW5zID0gKChCaXRtYXBBbmQgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCX0K KwllbHNlCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIG5vZGUgdHlwZTogJWQiLCAoaW50KSBu b2RlVGFnKHBsYW4pKTsKKworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwg b3BlcmF0b3IpOworCWZvcmVhY2hfcHRyKFBsYW4sIGNoaWxkX3BsYW4sIGJpdG1hcHBsYW5zKQor CXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3Bh X21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCQlwZ3BhX291 dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhjb250ZXh0LCBjaGlsZF9wbGFuKTsKKwl9CisJYXBw ZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOworfQorCisvKgorICogT3V0cHV0 IGEgc2NoZW1hLXF1YWxpZmllZCByZWxhdGlvbiBuYW1lLgorICovCitzdGF0aWMgdm9pZAorcGdw YV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBPaWQg cmVsaWQpCit7CisJT2lkCQkJbnNwb2lkID0gZ2V0X3JlbF9uYW1lc3BhY2UocmVsaWQpOworCWNo YXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7 CisJY2hhcgkgICAqcmVsbmFtZSA9IGdldF9yZWxfbmFtZShyZWxpZCk7CisKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lc3BhY2Up KTsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcuJyk7CisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhjb250ZXh0LT5idWYsIHF1b3RlX2lkZW50aWZpZXIocmVsbmFtZSkpOwor fQorCisvKgorICogT3V0cHV0IGFkdmljZSBmb3IgYSBMaXN0IG9mIHBncGFfcXVlcnlfZmVhdHVy ZSBvYmplY3RzLgorICoKKyAqIEFsbCBmZWF0dXJlcyBtdXN0IGJlIG9mIHRoZSB0eXBlIHNwZWNp ZmllZCBieSB0aGUgInR5cGUiIGFyZ3VtZW50LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRw dXRfcXVlcnlfZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LCBwZ3BhX3FmX3R5 cGUgdHlwZSwKKwkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpCit7CisJYm9vbAkJZmlyc3Qg PSB0cnVlOworCisJaWYgKHF1ZXJ5X2ZlYXR1cmVzID09IE5JTCkKKwkJcmV0dXJuOworCisJaWYg KGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+ YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGNvbnRleHQtPmJ1ZiwgIiVzKCIsCisJCQkJ CSBwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHR5cGUpKTsKKworCWZvcmVhY2hfcHRy KHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsIHF1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJaWYgKGZpcnN0 KQorCQkJZmlyc3QgPSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVh ayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChx Zi0+cmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNv bnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKCcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRp b25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICcpJyk7CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+ YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7Cit9CisKKy8qCisgKiBPdXRwdXQgInNpbXBsZSIg YWR2aWNlIGZvciBhIExpc3Qgb2YgQml0bWFwc2V0IG9iamVjdHMgZWFjaCBvZiB3aGljaAorICog Y29udGFpbnMgb25lIG9yIG1vcmUgUlRJcy4KKyAqCisgKiBCeSBzaW1wbGUsIHdlIGp1c3QgbWVh biB0aGF0IHRoZSBhZHZpY2UgZW1pdHRlZCBmb2xsb3dzIHRoZSBtb3N0CisgKiBzdHJhaWdodGZv cndhcmQgcGF0dGVybjogdGhlIHN0cmF0ZWd5IG5hbWUsIGZvbGxvd2VkIGJ5IGEgbGlzdCBvZiBp dGVtcworICogc2VwYXJhdGVkIGJ5IHNwYWNlcyBhbmQgc3Vycm91bmRlZCBieSBwYXJlbnRoZXNl cy4gSW5kaXZpZHVhbCBpdGVtcyBpbgorICogdGhlIGxpc3QgYXJlIGEgc2luZ2xlIHJlbGF0aW9u IGlkZW50aWZpZXIgZm9yIGEgQml0bWFwc2V0IHRoYXQgY29udGFpbnMKKyAqIGp1c3Qgb25lIG1l bWJlciwgb3IgYSBzdWItbGlzdCBhZ2FpbiBzZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBzdXJyb3Vu ZGVkCisgKiBieSBwYXJlbnRoZXNlcyBmb3IgYSBCaXRtYXBzZXQgd2l0aCBtdWx0aXBsZSBtZW1i ZXJzLiBCaXRtYXBzZXRzIHdpdGgKKyAqIG5vIG1lbWJlcnMgcHJvYmFibHkgc2hvdWxkbid0IG9j Y3VyIGhlcmUsIGJ1dCBpZiB0aGV5IGRvIHRoZXknbGwgYmUKKyAqIHJlbmRlcmVkIGFzIGFuIGVt cHR5IHN1Yi1saXN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0 ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIGNoYXIgKnN0cmF0ZWd5LAorCQkJCQkJ CUxpc3QgKnJlbGlkX3NldHMpCit7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJaWYgKHJlbGlk X3NldHMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmlu Z0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwgc3RyYXRlZ3kpOworCisJZm9yZWFjaF9ub2RlKEJp dG1hcHNldCwgcmVsaWRzLCByZWxpZF9zZXRzKQorCXsKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3Qg PSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5i dWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCWlmIChibXNfbWVtYmVyc2hpcChyZWxpZHMpID09IEJN U19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+ YnVmLCByZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0 LT5idWYsIHJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcp Jyk7CisJCX0KKwl9CisKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7 CisJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVt bik7Cit9CisKKy8qCisgKiBPdXRwdXQgTk9fR0FUSEVSIGFkdmljZSBmb3IgYWxsIHJlbGF0aW9u cyBub3QgYXBwZWFyaW5nIGJlbmVhdGggYW55CisgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG5v ZGUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRf Y29udGV4dCAqY29udGV4dCwgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJaWYgKHJlbGlkcyA9PSBO VUxMKQorCQlyZXR1cm47CisJaWYgKGNvbnRleHQtPmJ1Zi0+bGVuID4gMCkKKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnXG4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGNvbnRleHQtPmJ1ZiwgIk5PX0dBVEhFUigiKTsKKwlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29u dGV4dCwgY29udGV4dC0+YnVmLCByZWxpZHMpOworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyknKTsKK30KKworLyoKKyAqIE91dHB1dCB0aGUgaWRlbnRpZmllcnMgZm9yIGVh Y2ggUlRJIGluIHRoZSBwcm92aWRlZCBzZXQuCisgKgorICogSWRlbnRpZmllcnMgYXJlIHNlcGFy YXRlZCBieSBzcGFjZXMsIGFuZCBhIGxpbmUgYnJlYWsgaXMgcG9zc2libGUgYWZ0ZXIKKyAqIGVh Y2ggb25lLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfcmVsYXRpb25zKHBncGFfb3V0 cHV0X2NvbnRleHQgKmNvbnRleHQsIFN0cmluZ0luZm8gYnVmLAorCQkJCQkgIEJpdG1hcHNldCAq cmVsaWRzKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCXdo aWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7CisJCWNv bnN0IGNoYXIgKnJpZF9zdHJpbmcgPSBjb250ZXh0LT5yaWRfc3RyaW5nc1tydGkgLSAxXTsKKwor CQlpZiAocmlkX3N0cmluZyA9PSBOVUxMKQorCQkJZWxvZyhFUlJPUiwgIm5vIGlkZW50aWZpZXIg Zm9yIFJUSSAlZCIsIHJ0aSk7CisKKwkJaWYgKGZpcnN0KQorCQl7CisJCQlmaXJzdCA9IGZhbHNl OworCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHJpZF9zdHJpbmcpOworCQl9CisJCWVs c2UKKwkJeworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoYnVmLCBjb250ZXh0LT53cmFwX2NvbHVt bik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiAlcyIsIHJpZF9zdHJpbmcpOworCQl9CisJ fQorfQorCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgc3Bl Y2lmaWVkIGpvaW4gc3RyYXRlZ3kuCisgKi8KK3N0YXRpYyBjaGFyICoKK3BncGFfY3N0cmluZ19q b2luX3N0cmF0ZWd5KHBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneSkKK3sKKwlzd2l0Y2ggKHN0 cmF0ZWd5KQorCXsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAi TUVSR0VfSk9JTl9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6 CisJCQlyZXR1cm4gIk1FUkdFX0pPSU5fTUFURVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNU RURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIEpT VFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUiOworCQljYXNlIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFOgorCQkJcmV0dXJu ICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBKU1RSQVRfSEFTSF9KT0lOOgorCQkJcmV0 dXJuICJIQVNIX0pPSU4iOworCX0KKworCXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7 Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVj aWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3Nj YW5fc3RyYXRlZ3kocGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRjaCAoc3Ry YXRlZ3kpCisJeworCQljYXNlIFBHUEFfU0NBTl9PUkRJTkFSWToKKwkJCXJldHVybiAiT1JESU5B UllfU0NBTiI7CisJCWNhc2UgUEdQQV9TQ0FOX1NFUToKKwkJCXJldHVybiAiU0VRX1NDQU4iOwor CQljYXNlIFBHUEFfU0NBTl9CSVRNQVBfSEVBUDoKKwkJCXJldHVybiAiQklUTUFQX0hFQVBfU0NB TiI7CisJCWNhc2UgUEdQQV9TQ0FOX0ZPUkVJR046CisJCQlyZXR1cm4gIkZPUkVJR05fSk9JTiI7 CisJCWNhc2UgUEdQQV9TQ0FOX0lOREVYOgorCQkJcmV0dXJuICJJTkRFWF9TQ0FOIjsKKwkJY2Fz ZSBQR1BBX1NDQU5fSU5ERVhfT05MWToKKwkJCXJldHVybiAiSU5ERVhfT05MWV9TQ0FOIjsKKwkJ Y2FzZSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRToKKwkJCXJldHVybiAiUEFSVElUSU9OV0lTRSI7 CisJCWNhc2UgUEdQQV9TQ0FOX1RJRDoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKworCXBn X3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBHZXQgYSBDIHN0cmlu ZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgc2NhbiBzdHJhdGVneS4KKyAqLwor c3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX3F1ZXJ5X2ZlYXR1cmVfdHlwZShwZ3BhX3FmX3R5 cGUgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCQljYXNlIFBHUEFRRl9HQVRIRVI6CisJ CQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQVFGX0dBVEhFUl9NRVJHRToKKwkJCXJldHVy biAiR0FUSEVSX01FUkdFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRToKKwkJ CXJldHVybiAiU0VNSUpPSU5fTk9OX1VOSVFVRSI7CisJCWNhc2UgUEdQQVFGX1NFTUlKT0lOX1VO SVFVRToKKwkJCXJldHVybiAiU0VNSUpPSU5fVU5JUVVFIjsKKwl9CisKKworCXBnX3VucmVhY2hh YmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBsaW5lIGJyZWFrIGlu dG8gdGhlIFN0cmluZ0luZm9EYXRhLCBpZiBuZWVkZWQuCisgKgorICogSWYgd3JhcF9jb2x1bW4g aXMgemVybyBvciBuZWdhdGl2ZSwgdGhpcyBkb2VzIG5vdGhpbmcuIE90aGVyd2lzZSwgd2UKKyAq IGNvbnNpZGVyIGluc2VydGluZyBhIG5ld2xpbmUuIFdlIG9ubHkgaW5zZXJ0IGEgbmV3bGluZSBp ZiB0aGUgbGVuZ3RoIG9mCisgKiB0aGUgbGFzdCBsaW5lIGluIHRoZSBidWZmZXIgZXhjZWVkcyB3 cmFwX2NvbHVtbiwgYW5kIG5vdCBpZiB3ZSdkIGJlCisgKiBpbnNlcnRpbmcgYSBuZXdsaW5lIGF0 IG9yIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisgKgorICogVGhl IHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBuZXdsaW5lIGlzIGluc2VydGVkIGlzIHNpbXBseSB3aGVy ZXZlciB0aGUKKyAqIGJ1ZmZlciBlbmRlZCB0aGUgbGFzdCB0aW1lIHRoaXMgZnVuY3Rpb24gd2Fz IGNhbGxlZC4gSW4gb3RoZXIgd29yZHMsCisgKiB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGNh bGwgdGhpcyBmdW5jdGlvbiBldmVyeSB0aW1lIHdlIHJlYWNoIGEgZ29vZAorICogcGxhY2UgZm9y IGEgbGluZSBicmVhay4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfbWF5YmVfbGluZWJyZWFrKFN0 cmluZ0luZm8gYnVmLCBpbnQgd3JhcF9jb2x1bW4pCit7CisJY2hhcgkgICAqdHJhaWxpbmdfbmw7 CisJaW50CQkJbGluZV9zdGFydDsKKwlpbnQJCQlzYXZlX2N1cnNvcjsKKworCS8qIElmIGxpbmUg d3JhcHBpbmcgaXMgZGlzYWJsZWQsIGV4aXQgcXVpY2tseS4gKi8KKwlpZiAod3JhcF9jb2x1bW4g PD0gMCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTZXQgbGluZV9zdGFydCB0byB0aGUgYnl0ZSBv ZmZzZXQgd2l0aGluIGJ1Zi0+ZGF0YSBvZiB0aGUgZmlyc3QKKwkgKiBjaGFyYWN0ZXIgb2YgdGhl IGN1cnJlbnQgbGluZSwgd2hlcmUgdGhlIGN1cnJlbnQgbGluZSBtZWFucyB0aGUgbGFzdAorCSAq IG9uZSBpbiB0aGUgYnVmZmVyLiBOb3RlIHRoYXQgbGluZV9zdGFydCBjb3VsZCBiZSB0aGUgb2Zm c2V0IG9mIHRoZQorCSAqIHRyYWlsaW5nICdcMCcgaWYgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRo ZSBidWZmZXIgaXMgYSBsaW5lIGJyZWFrLgorCSAqLworCXRyYWlsaW5nX25sID0gc3RycmNocihi dWYtPmRhdGEsICdcbicpOworCWlmICh0cmFpbGluZ19ubCA9PSBOVUxMKQorCQlsaW5lX3N0YXJ0 ID0gMDsKKwllbHNlCisJCWxpbmVfc3RhcnQgPSAodHJhaWxpbmdfbmwgLSBidWYtPmRhdGEpICsg MTsKKworCS8qCisJICogUmVtZW1iZXIgdGhhdCB0aGUgY3VycmVudCBlbmQgb2YgdGhlIGJ1ZmZl ciBpcyBhIHBvdGVudGlhbCBsb2NhdGlvbiB0bworCSAqIGluc2VydCBhIGxpbmUgYnJlYWsgb24g YSBmdXR1cmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgorCSAqLworCXNhdmVfY3Vyc29yID0gYnVm LT5jdXJzb3I7CisJYnVmLT5jdXJzb3IgPSBidWYtPmxlbjsKKworCS8qIElmIHdlIGhhdmVuJ3Qg cGFzc2VkIHRoZSB3cmFwIGNvbHVtbiwgd2UgZG9uJ3QgbmVlZCBhIG5ld2xpbmUuICovCisJaWYg KGJ1Zi0+bGVuIC0gbGluZV9zdGFydCA8PSB3cmFwX2NvbHVtbikKKwkJcmV0dXJuOworCisJLyoK KwkgKiBJdCBvbmx5IG1ha2VzIHNlbnNlIHRvIGluc2VydCBhIG5ld2xpbmUgYXQgYSBwb3NpdGlv biBsYXRlciB0aGFuIHRoZQorCSAqIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lLgorCSAq LworCWlmIChidWYtPmN1cnNvciA8PSBsaW5lX3N0YXJ0KQorCQlyZXR1cm47CisKKwkvKiBJbnNl cnQgYSBuZXdsaW5lIGF0IHRoZSBwcmV2aW91cyBjdXJzb3IgbG9jYXRpb24uICovCisJZW5sYXJn ZVN0cmluZ0luZm8oYnVmLCAxKTsKKwltZW1tb3ZlKCZidWYtPmRhdGFbc2F2ZV9jdXJzb3JdICsg MSwgJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0sCisJCQlidWYtPmxlbiAtIHNhdmVfY3Vyc29yKTsK KwkrK2J1Zi0+Y3Vyc29yOworCWJ1Zi0+ZGF0YVsrK2J1Zi0+bGVuXSA9ICdcMCc7CisJYnVmLT5k YXRhW3NhdmVfY3Vyc29yXSA9ICdcbic7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfb3V0cHV0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ3NDk2ZDc2ZjUyCi0t LSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5oCkBA IC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfb3V0cHV0LmgK KyAqCSAgcHJvZHVjZSB0ZXh0dWFsIG91dHB1dCBmcm9tIHRoZSByZXN1bHRzIG9mIGEgcGxhbiB0 cmVlIHdhbGsKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9vdXRwdXQuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIFBHUEFfT1VU UFVUX0gKKyNkZWZpbmUgUEdQQV9PVVRQVVRfSAorCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVy LmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworZXh0ZXJuIHZvaWQgcGdwYV9vdXRwdXRf YWR2aWNlKFN0cmluZ0luZm8gYnVmLAorCQkJCQkJCSAgIHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMpOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIu eSBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDYxN2U3ZjJmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKQEAgLTAsMCArMSwzMzcgQEAKKyV7 CisvKgorICogUGFyc2VyIGZvciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAw MC0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRl ICJmbWdyLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAidXRpbHMv YnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbG9hdC5oIgorCisjaW5jbHVkZSAicGdwYV9h c3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogQmlzb24gZG9lc24ndCBh bGxvY2F0ZSBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGxpdmUgYWNyb3NzIHBhcnNlciBjYWxscywK KyAqIHNvIHdlIGNhbiBlYXNpbHkgaGF2ZSBpdCB1c2UgcGFsbG9jIGluc3RlYWQgb2YgbWFsbG9j LiAgVGhpcyBwcmV2ZW50cworICogbWVtb3J5IGxlYWtzIGlmIHdlIGVycm9yIG91dCBkdXJpbmcg cGFyc2luZy4KKyAqLworI2RlZmluZSBZWU1BTExPQyBwYWxsb2MKKyNkZWZpbmUgWVlGUkVFICAg cGZyZWUKKyV9CisKKy8qIEJJU09OIERlY2xhcmF0aW9ucyAqLworJXBhcnNlLXBhcmFtIHtMaXN0 ICoqcmVzdWx0fQorJXBhcnNlLXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislcGFy c2UtcGFyYW0ge3l5c2Nhbl90IHl5c2Nhbm5lcn0KKyVsZXgtcGFyYW0ge0xpc3QgKipyZXN1bHR9 CislbGV4LXBhcmFtIHtjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3B9CislbGV4LXBhcmFtIHt5eXNj YW5fdCB5eXNjYW5uZXJ9CislcHVyZS1wYXJzZXIKKyVleHBlY3QgMAorJW5hbWUtcHJlZml4PSJw Z3BhX3l5IgorCisldW5pb24KK3sKKwljaGFyCSAgICpzdHI7CisJaW50CQkJaW50ZWdlcjsKKwlM aXN0CSAgICpsaXN0OworCXBncGFfYWR2aWNlX2l0ZW0gKml0ZW07CisJcGdwYV9hZHZpY2VfdGFy Z2V0ICp0YXJnZXQ7CisJcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQ7Cit9CisldG9rZW4gPHN0 cj4gVE9LX0lERU5UIFRPS19UQUdfSk9JTl9PUkRFUiBUT0tfVEFHX0JJVE1BUCBUT0tfVEFHX0lO REVYCisldG9rZW4gPHN0cj4gVE9LX1RBR19TSU1QTEUgVE9LX1RBR19HRU5FUklDCisldG9rZW4g PGludGVnZXI+IFRPS19JTlRFR0VSCisldG9rZW4gVE9LX09SIFRPS19BTkQKKworJXR5cGUgPGlu dGVnZXI+IG9wdF9yaV9vY2N1cnJlbmNlCisldHlwZSA8aXRlbT4gYWR2aWNlX2l0ZW0KKyV0eXBl IDxsaXN0PiBhZHZpY2VfaXRlbV9saXN0IGJpdG1hcF9zdWJsaXN0IGJpdG1hcF90YXJnZXRfbGlz dCBnZW5lcmljX3RhcmdldF9saXN0CisldHlwZSA8bGlzdD4gaW5kZXhfdGFyZ2V0X2xpc3Qgam9p bl9vcmRlcl90YXJnZXRfbGlzdAorJXR5cGUgPGxpc3Q+IG9wdF9wYXJ0aXRpb24gc2ltcGxlX3Rh cmdldF9saXN0CisldHlwZSA8c3RyPiBpZGVudGlmaWVyIG9wdF9wbGFuX25hbWUKKyV0eXBlIDx0 YXJnZXQ+IGdlbmVyaWNfc3VibGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKyV0eXBlIDx0YXJnZXQ+ IHJlbGF0aW9uX2lkZW50aWZpZXIKKyV0eXBlIDxpdGFyZ2V0PiBiaXRtYXBfdGFyZ2V0X2l0ZW0g aW5kZXhfbmFtZQorCislc3RhcnQgcGFyc2VfdG9wbGV2ZWwKKworLyogR3JhbW1hciBmb2xsb3dz ICovCislJQorCitwYXJzZV90b3BsZXZlbDogYWR2aWNlX2l0ZW1fbGlzdAorCQl7CisJCQkodm9p ZCkgeXluZXJyczsJCQkJLyogc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworCQkJKnJlc3Vs dCA9ICQxOworCQl9CisJOworCithZHZpY2VfaXRlbV9saXN0OiBhZHZpY2VfaXRlbV9saXN0IGFk dmljZV9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsgJCQgPSBOSUw7 IH0KKwk7CisKK2FkdmljZV9pdGVtOiBUT0tfVEFHX0pPSU5fT1JERVIgJygnIGpvaW5fb3JkZXJf dGFyZ2V0X2xpc3QgJyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2Vf aXRlbSk7CisJCQkkJC0+dGFnID0gUEdQQV9UQUdfSk9JTl9PUkRFUjsKKwkJCSQkLT50YXJnZXRz ID0gJDM7CisJCX0KKwl8IFRPS19UQUdfSU5ERVggJygnIGluZGV4X3RhcmdldF9saXN0ICcpJwor CQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0 cmNtcCgkMSwgImluZGV4X29ubHlfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFH X0lOREVYX09OTFlfU0NBTjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgImluZGV4X3NjYW4iKSA9 PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19JTkRFWF9TQ0FOOworCQkJZWxzZQorCQkJCWVs b2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdldHMg PSAkMzsKKwkJfQorCXwgVE9LX1RBR19CSVRNQVAgJygnIGJpdG1hcF90YXJnZXRfbGlzdCAnKScK KwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCSQkLT50 YWcgPSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJ fQorCXwgVE9LX1RBR19TSU1QTEUgJygnIHNpbXBsZV90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJ JCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJCWlmIChzdHJjbXAoJDEs ICJub19nYXRoZXIiKSA9PSAwKQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19OT19HQVRIRVI7CisJ CQllbHNlIGlmIChzdHJjbXAoJDEsICJzZXFfc2NhbiIpID09IDApCisJCQkJJCQtPnRhZyA9IFBH UEFfVEFHX1NFUV9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAidGlkX3NjYW4iKSA9PSAw KQorCQkJCSQkLT50YWcgPSBQR1BBX1RBR19USURfU0NBTjsKKwkJCWVsc2UKKwkJCQllbG9nKEVS Uk9SLCAidGFnIHBhcnNpbmcgZmFpbGVkOiAlcyIsICQxKTsKKwkJCSQkLT50YXJnZXRzID0gJDM7 CisJCX0KKwl8IFRPS19UQUdfR0VORVJJQyAnKCcgZ2VuZXJpY190YXJnZXRfbGlzdCAnKScKKwkJ eworCQkJYm9vbAlmYWlsOworCisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0 ZW0pOworCQkJJCQtPnRhZyA9IHBncGFfcGFyc2VfYWR2aWNlX3RhZygkMSwgJmZhaWwpOworCQkJ aWYgKGZhaWwpCisJCQl7CisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNn X3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgInVucmVjb2duaXplZCBhZHZpY2UgdGFnIik7CisJCQl9 CisKKwkJCWlmICgkJC0+dGFnID09IFBHUEFfVEFHX0ZPUkVJR05fSk9JTikKKwkJCXsKKwkJCQlm b3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgJDMpCisJCQkJeworCQkJCQlp ZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSIHx8CisJCQkJCQlsaXN0 X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKSA9PSAxKQorCQkJCQkJCXBncGFfeXllcnJvcihyZXN1 bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkJICJGT1JFSUdOX0pP SU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVudGlmaWVy Iik7CisJCQkJfQorCQkJfQorCisJCQkkJC0+dGFyZ2V0cyA9ICQzOworCQl9CisJOworCityZWxh dGlvbl9pZGVudGlmaWVyOiBpZGVudGlmaWVyIG9wdF9yaV9vY2N1cnJlbmNlIG9wdF9wYXJ0aXRp b24gb3B0X3BsYW5fbmFtZQorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNl X3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSOworCQkJJCQt PnJpZC5hbGlhc19uYW1lID0gJDE7CisJCQkkJC0+cmlkLm9jY3VycmVuY2UgPSAkMjsKKwkJCWlm IChsaXN0X2xlbmd0aCgkMykgPT0gMikKKwkJCXsKKwkJCQkkJC0+cmlkLnBhcnRuc3AgPSBsaW5p dGlhbCgkMyk7CisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbHNlY29uZCgkMyk7CisJCQl9CisJCQll bHNlIGlmICgkMyAhPSBOSUwpCisJCQkJJCQtPnJpZC5wYXJ0cmVsID0gbGluaXRpYWwoJDMpOwor CQkJJCQtPnJpZC5wbGFuX25hbWUgPSAkNDsKKwkJfQorCTsKKworaW5kZXhfbmFtZTogaWRlbnRp ZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJ CSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFNRTsKKwkJCSQkLT5pbmRuYW1lID0gJDE7CisJCX0K Kwl8IGlkZW50aWZpZXIgJy4nIGlkZW50aWZpZXIKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVj dChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX05BTUU7CisJ CQkkJC0+aW5kbmFtZXNwYWNlID0gJDE7CisJCQkkJC0+aW5kbmFtZSA9ICQzOworCQl9CisJOwor CitvcHRfcmlfb2NjdXJyZW5jZToKKwknIycgVE9LX0lOVEVHRVIKKwkJeworCQkJaWYgKCQyIDw9 IDApCisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5l ciwKKwkJCQkJCQkgIm9ubHkgcG9zaXRpdmUgb2NjdXJyZW5jZSBudW1iZXJzIGFyZSBwZXJtaXR0 ZWQiKTsKKwkJCSQkID0gJDI7CisJCX0KKwl8CisJCXsKKwkJCS8qIFRoZSBkZWZhdWx0IG9jY3Vy cmVuY2UgbnVtYmVyIGlzIDEuICovCisJCQkkJCA9IDE7CisJCX0KKwk7CisKK2lkZW50aWZpZXI6 IFRPS19JREVOVAorCXwgVE9LX1RBR19KT0lOX09SREVSCisJfCBUT0tfVEFHX0lOREVYCisJfCBU T0tfVEFHX0JJVE1BUAorCXwgVE9LX1RBR19TSU1QTEUKKwl8IFRPS19UQUdfR0VORVJJQworCTsK KworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIGFsd2F5cyBzY2hlbWEtcXVhbGlm eSB0aGUgcGFydGl0aW9uIG5hbWUsIGJ1dAorICogd2hlbiBwYXJzaW5nIGFkdmljZSwgd2UgYWNj ZXB0IGEgc3BlY2lmaWNhdGlvbiB0aGF0IGxhY2tzIG9uZS4KKyAqLworb3B0X3BhcnRpdGlvbjoK KwknLycgVE9LX0lERU5UICcuJyBUT0tfSURFTlQKKwkJeyAkJCA9IGxpc3RfbWFrZTIoJDIsICQ0 KTsgfQorCXwgJy8nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtlMSgkMik7IH0KKwl8CisJ CXsgJCQgPSBOSUw7IH0KKwk7CisKK29wdF9wbGFuX25hbWU6CisJJ0AnIFRPS19JREVOVAorCQl7 ICQkID0gJDI7IH0KKwl8CisJCXsgJCQgPSBOVUxMOyB9CisJOworCitiaXRtYXBfdGFyZ2V0X2xp c3Q6IGJpdG1hcF90YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVudGlmaWVyIGJpdG1hcF90YXJnZXRf aXRlbQorCQl7CisJCQkkMi0+aXRhcmdldCA9ICQzOworCQkJJCQgPSBsYXBwZW5kKCQxLCAkMik7 CisJCX0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2JpdG1hcF90YXJnZXRfaXRlbTogaW5k ZXhfbmFtZQorCQl7ICQkID0gJDE7IH0KKwl8IFRPS19PUiAnKCcgYml0bWFwX3N1Ymxpc3QgJykn CisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQpOworCQkJJCQt Pml0eXBlID0gUEdQQV9JTkRFWF9PUjsKKwkJCSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJfCBU T0tfQU5EICcoJyBiaXRtYXBfc3VibGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVj dChwZ3BhX2luZGV4X3RhcmdldCk7CisJCQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX0FORDsKKwkJ CSQkLT5jaGlsZHJlbiA9ICQzOworCQl9CisJOworCitiaXRtYXBfc3VibGlzdDogYml0bWFwX3N1 Ymxpc3QgYml0bWFwX3RhcmdldF9pdGVtCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8 IGJpdG1hcF90YXJnZXRfaXRlbQorCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwk7CisKK2dl bmVyaWNfdGFyZ2V0X2xpc3Q6IGdlbmVyaWNfdGFyZ2V0X2xpc3QgcmVsYXRpb25faWRlbnRpZmll cgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfCBnZW5lcmljX3RhcmdldF9saXN0IGdl bmVyaWNfc3VibGlzdAorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAorCQl7ICQkID0g TklMOyB9CisJOworCitnZW5lcmljX3N1Ymxpc3Q6ICcoJyBnZW5lcmljX3RhcmdldF9saXN0ICcp JworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX3RhcmdldCk7CisJCQkk JC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAk MjsKKwkJfQorCTsKKworaW5kZXhfdGFyZ2V0X2xpc3Q6CisJICBpbmRleF90YXJnZXRfbGlzdCBy ZWxhdGlvbl9pZGVudGlmaWVyIGluZGV4X25hbWUKKwkJeworCQkJJDItPml0YXJnZXQgPSAkMzsK KwkJCSQkID0gbGFwcGVuZCgkMSwgJDIpOworCQl9CisJfAorCQl7ICQkID0gTklMOyB9CisJOwor Citqb2luX29yZGVyX3RhcmdldF9saXN0OiBqb2luX29yZGVyX3RhcmdldF9saXN0IHJlbGF0aW9u X2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwgam9pbl9vcmRlcl90 YXJnZXRfbGlzdCBqb2luX29yZGVyX3N1Ymxpc3QKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsg fQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworam9pbl9vcmRlcl9zdWJsaXN0OgorCScoJyBq b2luX29yZGVyX3RhcmdldF9saXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBn cGFfYWR2aWNlX3RhcmdldCk7CisJCQkkJC0+dHR5cGUgPSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJ U1Q7CisJCQkkJC0+Y2hpbGRyZW4gPSAkMjsKKwkJfQorCXwgJ3snIHNpbXBsZV90YXJnZXRfbGlz dCAnfScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOwor CQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q7CisJCQkkJC0+Y2hpbGRy ZW4gPSAkMjsKKwkJfQorCTsKKworc2ltcGxlX3RhcmdldF9saXN0OiBzaW1wbGVfdGFyZ2V0X2xp c3QgcmVsYXRpb25faWRlbnRpZmllcgorCQl7ICQkID0gbGFwcGVuZCgkMSwgJDIpOyB9CisJfAor CQl7ICQkID0gTklMOyB9CisJOworCislJQorCisvKgorICogUGFyc2UgYW4gYWR2aWNlX3N0cmlu ZyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdCBvZiBwZ3BhX2FkdmljZV9pdGVtCisgKiBv YmplY3RzLiBJZiBhIHBhcnNlIGVycm9yIG9jY3VycywgaW5zdGVhZCByZXR1cm4gTlVMTC4KKyAq CisgKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIE5VTEwsICplcnJvcl9wIHdpbGwgYmUgc2V0IHRv IHRoZSBlcnJvciBtZXNzYWdlOworICogb3RoZXJ3aXNlLCAqZXJyb3JfcCB3aWxsIGJlIHNldCB0 byBOVUxMLgorICovCitMaXN0ICoKK3BncGFfcGFyc2UoY29uc3QgY2hhciAqYWR2aWNlX3N0cmlu ZywgY2hhciAqKmVycm9yX3ApCit7CisJeXlzY2FuX3QJc2Nhbm5lcjsKKwlMaXN0CSAgICpyZXN1 bHQ7CisJY2hhcgkgICAqZXJyb3IgPSBOVUxMOworCisJcGdwYV9zY2FubmVyX2luaXQoYWR2aWNl X3N0cmluZywgJnNjYW5uZXIpOworCXBncGFfeXlwYXJzZSgmcmVzdWx0LCAmZXJyb3IsIHNjYW5u ZXIpOworCXBncGFfc2Nhbm5lcl9maW5pc2goc2Nhbm5lcik7CisKKwlpZiAoZXJyb3IgIT0gTlVM TCkKKwl7CisJCSplcnJvcl9wID0gZXJyb3I7CisJCXJldHVybiBOVUxMOworCX0KKworCSplcnJv cl9wID0gTlVMTDsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19w bGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9w bGFubmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVjODJmMjY2 YjE4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5u ZXIuYwpAQCAtMCwwICsxLDE3NjQgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFf cGxhbm5lci5jCisgKgkgIHBsYW5uZXIgaG9va3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19wbGFuX2FkdmljZS5o IgorI2luY2x1ZGUgInBncGFfY29sbGVjdG9yLmgiCisjaW5jbHVkZSAicGdwYV9pZGVudGlmaWVy LmgiCisjaW5jbHVkZSAicGdwYV9vdXRwdXQuaCIKKyNpbmNsdWRlICJwZ3BhX3BsYW5uZXIuaCIK KyNpbmNsdWRlICJwZ3BhX3Ryb3ZlLmgiCisjaW5jbHVkZSAicGdwYV93YWxrZXIuaCIKKworI2lu Y2x1ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvZXh0ZW5kcGxhbi5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9wYXRobm9kZS5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2luY2x1ZGUg Im9wdGltaXplci9wbGFuY2F0LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKKyNp bmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKy8qCisgKiBXaGVuIGFzc2VydGlvbnMg YXJlIGVuYWJsZWQsIHdlIHRyeSBnZW5lcmF0aW5nIHJlbGF0aW9uIGlkZW50aWZpZXJzIGR1cmlu ZworICogcGxhbm5pbmcsIHNhdmluZyB0aGVtIGluIGEgaGFzaCB0YWJsZSwgYW5kIHRoZW4gY3Jv c3MtY2hlY2tpbmcgdGhlbSBhZ2FpbnN0CisgKiB0aGUgb25lcyBnZW5lcmF0ZWQgYWZ0ZXIgcGxh bm5pbmcgaXMgY29tcGxldGUuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hlY2tlcl9r ZXkKK3sKKwljaGFyCSAgICpwbGFuX25hbWU7CisJSW5kZXgJCXJ0aTsKK30gcGdwYV9yaV9jaGVj a2VyX2tleTsKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9yaV9jaGVja2VyCit7CisJcGdwYV9yaV9j aGVja2VyX2tleSBrZXk7CisJdWludDMyCQlzdGF0dXM7CisJY29uc3QgY2hhciAqcmlkX3N0cmlu ZzsKK30gcGdwYV9yaV9jaGVja2VyOworCitzdGF0aWMgdWludDMyIHBncGFfcmlfY2hlY2tlcl9o YXNoX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSk7CisKK3N0YXRpYyBpbmxpbmUgYm9vbAor cGdwYV9yaV9jaGVja2VyX2NvbXBhcmVfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkgYSwgcGdwYV9y aV9jaGVja2VyX2tleSBiKQoreworCWlmIChhLnJ0aSAhPSBiLnJ0aSkKKwkJcmV0dXJuIGZhbHNl OworCWlmIChhLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gKGIucGxhbl9uYW1lID09IE5V TEwpOworCWlmIChiLnBsYW5fbmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJu IHN0cmNtcChhLnBsYW5fbmFtZSwgYi5wbGFuX25hbWUpID09IDA7Cit9CisKKyNkZWZpbmUgU0hf UFJFRklYCQkJcGdwYV9yaV9jaGVjaworI2RlZmluZSBTSF9FTEVNRU5UX1RZUEUJCXBncGFfcmlf Y2hlY2tlcgorI2RlZmluZSBTSF9LRVlfVFlQRQkJCXBncGFfcmlfY2hlY2tlcl9rZXkKKyNkZWZp bmUgU0hfS0VZCQkJCWtleQorI2RlZmluZSBTSF9IQVNIX0tFWSh0Yiwga2V5KQlwZ3BhX3JpX2No ZWNrZXJfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV9yaV9j aGVja2VyX2NvbXBhcmVfa2V5KGEsIGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJc3RhdGljIGlubGlu ZQorI2RlZmluZSBTSF9ERUNMQVJFCisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUgImxpYi9z aW1wbGVoYXNoLmgiCisKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5uZXJfc3Rh dGUKK3sKKwlFeHBsYWluU3RhdGUgKmV4cGxhaW5fc3RhdGU7CisJYm9vbAkJZ2VuZXJhdGVfYWR2 aWNlX3N0cmluZzsKKwlwZ3BhX3Ryb3ZlICp0cm92ZTsKKwlNZW1vcnlDb250ZXh0IHRyb3ZlX2N4 dDsKKwlMaXN0CSAgICpzal91bmlxdWVfcmVsczsKKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJ TkcKKwlwZ3BhX3JpX2NoZWNrX2hhc2ggKnJpX2NoZWNrX2hhc2g7CisjZW5kaWYKK30gcGdwYV9w bGFubmVyX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2pvaW5fc3RhdGUKK3sKKwkvKiBN b3N0LXJlY2VudGx5LWNvbnNpZGVyZWQgb3V0ZXIgcmVsLiAqLworCVJlbE9wdEluZm8gKm91dGVy cmVsOworCisJLyogTW9zdC1yZWNlbnRseS1jb25zaWRlcmVkIGlubmVyIHJlbC4gKi8KKwlSZWxP cHRJbmZvICppbm5lcnJlbDsKKworCS8qCisJICogQXJyYXkgb2YgcmVsYXRpb24gaWRlbnRpZmll cnMgZm9yIGFsbCBtZW1iZXJzIG9mIHRoaXMgam9pbnJlbCwgd2l0aAorCSAqIG91dGVycmVsIGlk ZW5pZmllcnMgYmVmb3JlIGlubmVycmVsIGlkZW50aWZpZXJzLgorCSAqLworCXBncGFfaWRlbnRp ZmllciAqcmlkczsKKworCS8qIE51bWJlciBvZiBvdXRlciByZWwgaWRlbnRpZmllcnMuICovCisJ aW50CQkJb3V0ZXJfY291bnQ7CisKKwkvKiBOdW1iZXIgb2YgaW5uZXIgcmVsIGlkZW50aWZpZXJz LiAqLworCWludAkJCWlubmVyX2NvdW50OworCisJLyoKKwkgKiBUcm92ZSBsb29rdXAgcmVzdWx0 cy4KKwkgKgorCSAqIGpvaW5fZW50cmllcyBhbmQgcmVsX2VudHJpZXMgYXJlIGFycmF5cyBvZiBl bnRyaWVzLCBhbmQgam9pbl9pbmRleGVzCisJICogYW5kIHJlbF9pbmRleGVzIGFyZSB0aGUgaW50 ZWdlciBvZmZzZXRzIHdpdGhpbiB0aG9zZSBhcnJheXMgb2YgZW50cmllcworCSAqIHBvdGVudGlh bGx5IHJlbGV2YW50IHRvIHVzLiBUaGUgImpvaW4iIGZpZWxkcyBjb3JyZXNwb25kIHRvIGEgbG9v a3VwCisJICogdXNpbmcgUEdQQV9UUk9WRV9MT09LVVBfSk9JTiBhbmQgdGhlICJyZWwiIGZpZWxk cyB0byBhIGxvb2t1cCB1c2luZworCSAqIFBHUEFfVFJPVkVfTE9PS1VQX1JFTC4KKwkgKi8KKwlw Z3BhX3Ryb3ZlX2VudHJ5ICpqb2luX2VudHJpZXM7CisJQml0bWFwc2V0ICAqam9pbl9pbmRleGVz OworCXBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRyaWVzOworCUJpdG1hcHNldCAgKnJlbF9pbmRl eGVzOworfSBwZ3BhX2pvaW5fc3RhdGU7CisKKy8qIFNhdmVkIGhvb2sgdmFsdWVzICovCitzdGF0 aWMgZ2V0X3JlbGF0aW9uX2luZm9faG9va190eXBlIHByZXZfZ2V0X3JlbGF0aW9uX2luZm8gPSBO VUxMOworc3RhdGljIGpvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgcHJldl9qb2luX3BhdGhfc2V0 dXAgPSBOVUxMOworc3RhdGljIGpvaW5yZWxfc2V0dXBfaG9va190eXBlIHByZXZfam9pbnJlbF9z ZXR1cCA9IE5VTEw7CitzdGF0aWMgcGxhbm5lcl9zZXR1cF9ob29rX3R5cGUgcHJldl9wbGFubmVy X3NldHVwID0gTlVMTDsKK3N0YXRpYyBwbGFubmVyX3NodXRkb3duX2hvb2tfdHlwZSBwcmV2X3Bs YW5uZXJfc2h1dGRvd24gPSBOVUxMOworCisvKiBPdGhlciBnbG9iYWwgdmFyaWFiZXMgKi8KK3N0 YXRpYyBpbnQJcGxhbm5lcl9leHRlbnNpb25faWQgPSAtMTsKKworLyogRnVuY3Rpb24gcHJvdG90 eXBlcy4gKi8KK3N0YXRpYyB2b2lkIHBncGFfZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8g KnJvb3QsCisJCQkJCQkJCSAgIE9pZCByZWxhdGlvbk9iamVjdElkLAorCQkJCQkJCQkgICBib29s IGluaHBhcmVudCwKKwkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lkIHBn cGFfam9pbnJlbF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkgICBSZWxPcHRJbmZv ICpqb2lucmVsLAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLAorCQkJCQkJCSAgIFJl bE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCSAgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAor CQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCk7CitzdGF0aWMgdm9pZCBwZ3BhX2pvaW5fcGF0 aF9zZXR1cChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKmpvaW5yZWws CisJCQkJCQkJCSBSZWxPcHRJbmZvICpvdXRlcnJlbCwKKwkJCQkJCQkJIFJlbE9wdEluZm8gKmlu bmVycmVsLAorCQkJCQkJCQkgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCSBKb2luUGF0aEV4 dHJhRGF0YSAqZXh0cmEpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJH bG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpxdWVyeV9z dHJpbmcsCisJCQkJCQkJICAgZG91YmxlICp0dXBsZV9mcmFjdGlvbiwKKwkJCQkJCQkgICBFeHBs YWluU3RhdGUgKmVzKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9zaHV0ZG93bihQbGFubmVy R2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsCisJCQkJCQkJCSAgY29uc3QgY2hhciAqcXVlcnlf c3RyaW5nLCBQbGFubmVkU3RtdCAqcHN0bXQpOworc3RhdGljIHZvaWQgcGdwYV9wbGFubmVyX2Fw cGx5X2pvaW5yZWxfYWR2aWNlKHVpbnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCQkJICBjaGFy ICpwbGFuX25hbWUsCisJCQkJCQkJCQkJCSAgcGdwYV9qb2luX3N0YXRlICpwanMpOworc3RhdGlj IHZvaWQgcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2UoSm9pblR5cGUgam9pbnR5 cGUsCisJCQkJCQkJCQkJCQl1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQkJCQljaGFyICpw bGFuX25hbWUsCisJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBqcyk7CitzdGF0aWMgdm9p ZCBwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nhbl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJ CQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNjYW5fZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRt YXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxf ZW50cmllcywKKwkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbF9pbmRleGVzKTsKK3N0YXRpYyB1 aW50NjQgcGdwYV9qb2luX3N0cmF0ZWd5X21hc2tfZnJvbV9hZHZpY2VfdGFnKHBncGFfYWR2aWNl X3RhZ190eXBlIHRhZyk7CitzdGF0aWMgYm9vbCBwZ3BhX2pvaW5fb3JkZXJfcGVybWl0c19qb2lu KGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSBwZ3BhX2lkZW50 aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5KTsKK3N0YXRp YyBib29sIHBncGFfam9pbl9tZXRob2RfcGVybWl0c19qb2luKGludCBvdXRlcl9jb3VudCwgaW50 IGlubmVyX2NvdW50LAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJ CQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJCQkJICBib29sICpyZXN0cmlj dF9tZXRob2QpOworc3RhdGljIGJvb2wgcGdwYV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4oaW50 IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJICBwZ3BhX2lkZW50aWZp ZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSwKKwkJCQkJCQkJ CQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CisKK3N0YXRpYyBMaXN0ICpwZ3BhX3BsYW5uZXJf YXBwZW5kX2ZlZWRiYWNrKExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCQkJ CSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgIHBncGFfcGxhbl93YWxrZXJfY29udGV4 dCAqd2Fsa2VyKTsKKworc3RhdGljIGlubGluZSB2b2lkIHBncGFfcmlfY2hlY2tlcl9zYXZlKHBn cGFfcGxhbm5lcl9zdGF0ZSAqcHBzLAorCQkJCQkJCQkJCVBsYW5uZXJJbmZvICpyb290LAorCQkJ CQkJCQkJCVJlbE9wdEluZm8gKnJlbCk7CitzdGF0aWMgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfdmFs aWRhdGUocGdwYV9wbGFubmVyX3N0YXRlICpwcHMsCisJCQkJCQkJCQkgUGxhbm5lZFN0bXQgKnBz dG10KTsKKworLyoKKyAqIEluc3RhbGwgcGxhbm5lci1yZWxhdGVkIGhvb2tzLgorICovCit2b2lk CitwZ3BhX3BsYW5uZXJfaW5zdGFsbF9ob29rcyh2b2lkKQoreworCXBsYW5uZXJfZXh0ZW5zaW9u X2lkID0gR2V0UGxhbm5lckV4dGVuc2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCXByZXZfZ2V0 X3JlbGF0aW9uX2luZm8gPSBnZXRfcmVsYXRpb25faW5mb19ob29rOworCWdldF9yZWxhdGlvbl9p bmZvX2hvb2sgPSBwZ3BhX2dldF9yZWxhdGlvbl9pbmZvOworCXByZXZfam9pbnJlbF9zZXR1cCA9 IGpvaW5yZWxfc2V0dXBfaG9vazsKKwlqb2lucmVsX3NldHVwX2hvb2sgPSBwZ3BhX2pvaW5yZWxf c2V0dXA7CisJcHJldl9qb2luX3BhdGhfc2V0dXAgPSBqb2luX3BhdGhfc2V0dXBfaG9vazsKKwlq b2luX3BhdGhfc2V0dXBfaG9vayA9IHBncGFfam9pbl9wYXRoX3NldHVwOworCXByZXZfcGxhbm5l cl9zZXR1cCA9IHBsYW5uZXJfc2V0dXBfaG9vazsKKwlwbGFubmVyX3NldHVwX2hvb2sgPSBwZ3Bh X3BsYW5uZXJfc2V0dXA7CisJcHJldl9wbGFubmVyX3NodXRkb3duID0gcGxhbm5lcl9zaHV0ZG93 bl9ob29rOworCXBsYW5uZXJfc2h1dGRvd25faG9vayA9IHBncGFfcGxhbm5lcl9zaHV0ZG93bjsK K30KKworLyoKKyAqIEhvb2sgZnVuY3Rpb24gZm9yIGdldF9yZWxhdGlvbl9pbmZvKCkuCisgKgor ICogV2UgY2FuIGFwcGx5IHNjYW4gYWR2aWNlIGF0IHRoaXMgb3BpbnQsIGFuZCB3ZSBhbHNvIHVz ZWUgdGhpcyBhcyBhbgorICogb3Bwb3J0dW5pdHkgdG8gZG8gcmFuZ2UtdGFibGUgaWRlbnRpZmll ciBjcm9zcy1jaGVja2luZyBpbiBhc3NlcnQtZW5hYmxlZAorICogYnVpbGRzLgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJl bGF0aW9uT2JqZWN0SWQsCisJCQkJCSAgIGJvb2wgaW5ocGFyZW50LCBSZWxPcHRJbmZvICpyZWwp Cit7CisJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBz dGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxhbm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5u ZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShyb290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7 CisKKwkvKiBTYXZlIGRldGFpbHMgbmVlZGVkIGZvciByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGNy b3NzLWNoZWNraW5nLiAqLworCWlmIChwcHMgIT0gTlVMTCkKKwkJcGdwYV9yaV9jaGVja2VyX3Nh dmUocHBzLCByb290LCByZWwpOworCisJLyogSWYgcXVlcnkgYWR2aWNlIHdhcyBwcm92aWRlZCwg c2VhcmNoIGZvciByZWxldmFudCBlbnRyaWVzLiAqLworCWlmIChwcHMgIT0gTlVMTCAmJiBwcHMt PnRyb3ZlICE9IE5VTEwpCisJeworCQlwZ3BhX2lkZW50aWZpZXIgcmlkOworCQlwZ3BhX3Ryb3Zl X3Jlc3VsdCB0cmVzdWx0X3NjYW47CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHRfcmVsOwor CisJCS8qIFNlYXJjaCBmb3Igc2NhbiBhZHZpY2UgYW5kIGdlbmVyYWwgcmVsIGFkdmljZS4gKi8K KwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKHJvb3QsIHJlbC0+cmVsaWQsICZyaWQp OworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FO LCAxLCAmcmlkLAorCQkJCQkJICAmdHJlc3VsdF9zY2FuKTsKKwkJcGdwYV90cm92ZV9sb29rdXAo cHBzLT50cm92ZSwgUEdQQV9UUk9WRV9MT09LVVBfUkVMLCAxLCAmcmlkLAorCQkJCQkJICAmdHJl c3VsdF9yZWwpOworCisJCS8qIElmIHJlbGV2YW50IGVudHJpZXMgd2VyZSBmb3VuZCwgYXBwbHkg dGhlbS4gKi8KKwkJaWYgKHRyZXN1bHRfc2Nhbi5pbmRleGVzICE9IE5VTEwgfHwgdHJlc3VsdF9y ZWwuaW5kZXhlcyAhPSBOVUxMKQorCQkJcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKHJl bCwKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3NjYW4uZW50cmllcywKKwkJCQkJCQkJCQkgICB0cmVz dWx0X3NjYW4uaW5kZXhlcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3JlbC5lbnRyaWVzLAorCQkJ CQkJCQkJCSAgIHRyZXN1bHRfcmVsLmluZGV4ZXMpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBw cmV2aW91cyBob29rLiAqLworCWlmIChwcmV2X2dldF9yZWxhdGlvbl9pbmZvKQorCQkoKnByZXZf Z2V0X3JlbGF0aW9uX2luZm8pIChyb290LCByZWxhdGlvbk9iamVjdElkLCBpbmhwYXJlbnQsIHJl bCk7Cit9CisKKy8qCisgKiBTZWFyY2ggZm9yIGFkdmljZSBwZXJ0YWluaW5nIHRvIGEgcHJvcG9z ZWQgam9pbi4KKyAqLworc3RhdGljIHBncGFfam9pbl9zdGF0ZSAqCitwZ3BhX2dldF9qb2luX3N0 YXRlKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQlSZWxPcHRJ bmZvICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwpCit7CisJcGdwYV9wbGFubmVyX3N0 YXRlICpwcHM7CisJcGdwYV9qb2luX3N0YXRlICpwanM7CisJYm9vbAkJbmV3X3BqcyA9IGZhbHNl OworCisJLyogRmV0Y2ggb3VyIHByaXZhdGUgc3RhdGUsIHNldCB1cCBieSBwZ3BhX3BsYW5uZXJf c2V0dXAoKS4gKi8KKwlwcHMgPSBHZXRQbGFubmVyR2xvYmFsRXh0ZW5zaW9uU3RhdGUocm9vdC0+ Z2xvYiwgcGxhbm5lcl9leHRlbnNpb25faWQpOworCWlmIChwcHMgPT0gTlVMTCB8fCBwcHMtPnRy b3ZlID09IE5VTEwpCisJeworCQkvKiBObyBhZHZpY2UgYXBwbGllcyB0byB0aGlzIHF1ZXJ5LCBo ZW5jZSBub25lIHRvIHRoaXMgam9pbnJlbC4gKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoK KwkgKiBTZWUgd2hldGhlciB3ZSd2ZSBwcmV2aW91c2x5IGFzc29jaWF0ZWQgYSBwZ3BhX2pvaW5f c3RhdGUgd2l0aCB0aGlzCisJICogam9pbnJlbC4gSWYgd2UgaGF2ZSBub3QsIHdlIG5lZWQgdG8g dHJ5IHRvIGNvbnN0cnVjdCBvbmUuIElmIHdlIGhhdmUsCisJICogdGhlbiB0aGVyZSBhcmUgdHdv IGNhc2VzOiAoYSkgaWYgaW5uZXJyZWwgYW5kIG91dGVycmVsIGFyZSB1bmNoYW5nZWQsCisJICog d2UgY2FuIHNpbXBseSB1c2UgaXQsIGFuZCAoYikgaWYgdGhleSBoYXZlIGNoYW5nZWQsIHdlIG5l ZWQgdG8gcmVqaWdnZXIKKwkgKiB0aGUgYXJyYXkgb2YgaWRlbnRpZmllcnMgYnV0IGNhbiBzdGls bCBza2lwIHRoZSB0cm92ZSBsb29rdXAuCisJICovCisJcGpzID0gR2V0UmVsT3B0SW5mb0V4dGVu c2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKwlpZiAocGpzICE9IE5V TEwpCisJeworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVMTCAmJiBwanMtPnJlbF9pbmRl eGVzID09IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBJZiB0aGVyZSdzIG5vIHBvdGVudGlhbGx5 IHJlbGV2YW50IGFkdmljZSwgdGhlbiB0aGUgcHJlc2VuY2Ugb2YKKwkJCSAqIHRoaXMgcGdwYV9q b2luX3N0YXRlIGFjdHMgbGlrZSBhIG5lZ2F0aXZlIGNhY2hlIGVudHJ5OiBpdCB0ZWxscworCQkJ ICogdXMgbm90IHRvIGJvdGhlciBzZWFyY2hpbmcgdGhlIHRyb3ZlIGZvciBhZHZpY2UsIGJlY2F1 c2Ugd2UKKwkJCSAqIHdpbGwgbm90IGZpbmQgYW55LgorCQkJICovCisJCQlyZXR1cm4gTlVMTDsK KwkJfQorCisJCWlmIChwanMtPm91dGVycmVsID09IG91dGVycmVsICYmIHBqcy0+aW5uZXJyZWwg PT0gaW5uZXJyZWwpCisJCXsKKwkJCS8qIE5vIHVwZGF0ZXMgcmVxdWlyZWQsIHNvIGp1c3QgcmV0 dXJuLiAqLworCQkJLyogWFhYLiBEb2VzIHRoaXMgbmVlZCB0byBkbyBzb21ldGhpbmcgZGlmZmVy ZW50IHVuZGVyIEdFUU8/ICovCisJCQlyZXR1cm4gcGpzOworCQl9CisJfQorCisJLyoKKwkgKiBJ ZiB0aGVyZSdzIG5vIHBncGFfam9pbl9zdGF0ZSB5ZXQsIHdlIG5lZWQgdG8gYWxsb2NhdGUgb25l LiBUcm92ZSBrZXlzCisJICogd2lsbCBub3QgZ2V0IGJ1aWx0IGZvciBSVEVfSk9JTiBSVEVzLCBz byB0aGUgYXJyYXkgbWF5IGVuZCB1cCBiZWluZworCSAqIGxhcmdlciB0aGFuIG5lZWRlZC4gSXQn cyBub3Qgd29ydGggdHJ5aW5nIHRvIGNvbXB1dGUgYSBwZXJmZWN0bHkKKwkgKiBhY2N1cmF0ZSBj b3VudCBoZXJlLgorCSAqLworCWlmIChwanMgPT0gTlVMTCkKKwl7CisJCWludAkJCXBlc3NpbWlz dGljX2NvdW50ID0gYm1zX251bV9tZW1iZXJzKGpvaW5yZWwtPnJlbGlkcyk7CisKKwkJcGpzID0g cGFsbG9jMF9vYmplY3QocGdwYV9qb2luX3N0YXRlKTsKKwkJcGpzLT5yaWRzID0gcGFsbG9jX2Fy cmF5KHBncGFfaWRlbnRpZmllciwgcGVzc2ltaXN0aWNfY291bnQpOworCQluZXdfcGpzID0gdHJ1 ZTsKKwl9CisKKwkvKgorCSAqIEVpdGhlciB3ZSBqdXN0IGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pv aW5fc3RhdGUsIG9yIHRoZSBleGlzdGluZyBvbmUKKwkgKiBuZWVkcyByZWNvbmZpZ3VyaW5nIGZv ciBhIG5ldyBpbm5lcnJlbCBhbmQgb3V0ZXJyZWwuIFRoZSByZXF1aXJlZCBhcnJheQorCSAqIHNp emUgY2FuJ3QgY2hhbmdlLCBzbyB3ZSBjYW4gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBvbmUuCisJ ICovCisJcGpzLT5vdXRlcnJlbCA9IG91dGVycmVsOworCXBqcy0+aW5uZXJyZWwgPSBpbm5lcnJl bDsKKwlwanMtPm91dGVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJzX2J5X3Jl bGlkcyhyb290LCBvdXRlcnJlbC0+cmVsaWRzLCBwanMtPnJpZHMpOworCXBqcy0+aW5uZXJfY291 bnQgPQorCQlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKHJvb3QsIGlubmVycmVs LT5yZWxpZHMsCisJCQkJCQkJCQkJICAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCk7CisK KwkvKgorCSAqIElmIHdlIGFsbG9jYXRlZCBhIG5ldyBwZ3BhX2pvaW5fc3RhdGUsIHNlYXJjaCBv dXIgdHJvdmUgb2YgYWR2aWNlIGZvcgorCSAqIHJlbGV2YW50IGVudHJpZXMuIFRoZSB0cm92ZSBs b29rdXAgd2lsbCByZXR1cm4gdGhlIHNhbWUgcmVzdWx0cyBmb3IKKwkgKiBldmVyeSBvdXRlcnJl bC9pbm5lcnJlbCBjb21iaW5hdGlvbiwgc28gd2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhhdAor CSAqIHdvcmsgZXZlcnkgdGltZS4KKwkgKi8KKwlpZiAobmV3X3BqcykKKwl7CisJCXBncGFfdHJv dmVfcmVzdWx0IHRyZXN1bHQ7CisKKwkJLyogRmluZCBqb2luIGVudHJpZXMuICovCisJCXBncGFf dHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJCQkg IHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJpZHMs ICZ0cmVzdWx0KTsKKwkJcGpzLT5qb2luX2VudHJpZXMgPSB0cmVzdWx0LmVudHJpZXM7CisJCXBq cy0+am9pbl9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIEZpbmQgcmVsIGVudHJp ZXMuICovCisJCXBncGFfdHJvdmVfbG9va3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQ X1JFTCwKKwkJCQkJCSAgcGpzLT5vdXRlcl9jb3VudCArIHBqcy0+aW5uZXJfY291bnQsCisJCQkJ CQkgIHBqcy0+cmlkcywgJnRyZXN1bHQpOworCQlwanMtPnJlbF9lbnRyaWVzID0gdHJlc3VsdC5l bnRyaWVzOworCQlwanMtPnJlbF9pbmRleGVzID0gdHJlc3VsdC5pbmRleGVzOworCisJCS8qIE5v dyB0aGF0IHRoZSBuZXcgcGdwYV9qb2luX3N0YXRlIGlzIGZ1bGx5IHZhbGlkLCBzYXZlIGEgcG9p bnRlci4gKi8KKwkJU2V0UmVsT3B0SW5mb0V4dGVuc2lvblN0YXRlKGpvaW5yZWwsIHBsYW5uZXJf ZXh0ZW5zaW9uX2lkLCBwanMpOworCisJCS8qCisJCSAqIElmIHRoZXJlIHdhcyBubyByZWxldmFu dCBhZHZpY2UgZm91bmQsIGp1c3QgcmV0dXJuIE5VTEwuIFRoaXMKKwkJICogcGdwYV9qb2luX3N0 YXRlIHdpbGwgc3RpY2sgYXJvdW5kIGFzIGEgc29ydCBvZiBuZWdhdGl2ZSBjYWNoZQorCQkgKiBl bnRyeSwgc28gdGhhdCBmdXR1cmUgY2FsbHMgZm9yIHRoaXMgc2FtZSBqb2lucmVsIHF1aWNrbHkg cmV0dXJuCisJCSAqIE5VTEwuCisJCSAqLworCQlpZiAocGpzLT5qb2luX2luZGV4ZXMgPT0gTlVM TCAmJiBwanMtPnJlbF9pbmRleGVzID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwly ZXR1cm4gcGpzOworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQg aXMgcmVsZXZhbnQgdG8gYW55IG1ldGhvZCBvZiBpbXBsZW1lbnRpbmcKKyAqIHRoaXMgam9pbi4K KyAqCisgKiBBbHRob3VnaCB3ZSdyZSBwYXNzZWQgdGhlIG91dGVycmVsIGFuZCBpbm5lcnJlbCBo ZXJlLCB0aG9zZSBhcmUganVzdAorICogd2hhdGV2ZXIgdmFsdWVzIGhhcHBlbmVkIHRvIHByb21w dCB0aGUgY3JlYXRpb24gb2YgdGhpcyBqb2lucmVsOyB0aGV5CisgKiBzaG91bGRuJ3QgcmVhbGx5 IGluZmx1ZW5jZSBvdXIgY2hvaWNlIG9mIHdoYXQgYWR2aWNlIHRvIGFwcGx5LgorICovCitzdGF0 aWMgdm9pZAorcGdwYV9qb2lucmVsX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpqb2lucmVsLAorCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLCBSZWxPcHRJbmZvICppbm5l cnJlbCwKKwkJCQkgICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywgTGlzdCAqcmVzdHJpY3RsaXN0 KQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpv aW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsKKworCS8qIEdldCBvdXIgcHJpdmF0ZSBz dGF0ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5f c3RhdGUocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJl IGlzIHJlbGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4g Ki8KKwlpZiAocGpzICE9IE5VTEwpCisJCXBncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2Fkdmlj ZSgmam9pbnJlbC0+cGdzX21hc2ssCisJCQkJCQkJCQkJICByb290LT5wbGFuX25hbWUsCisJCQkJ CQkJCQkJICBwanMpOworCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYg KHByZXZfam9pbnJlbF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5yZWxfc2V0dXApIChyb290LCBqb2lu cmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJICAgc2ppbmZvLCByZXN0cmljdGxpc3Qp OworfQorCisvKgorICogRW5mb3JjZSBhbnkgcHJvdmlkZWQgYWR2aWNlIHRoYXQgaXMgcmVsZXZh bnQgdG8gdGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCBvZgorICogaW1wbGVtZW50aW5nIHRoaXMgcGFy dGljdWxhciBqb2luLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9qb2luX3BhdGhfc2V0dXAoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCSBSZWxPcHRJbmZvICpv dXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwg Sm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQoreworCXBncGFfam9pbl9zdGF0ZSAqcGpzOworCisJ QXNzZXJ0KGJtc19tZW1iZXJzaGlwKGpvaW5yZWwtPnJlbGlkcykgPT0gQk1TX01VTFRJUExFKTsK KworCS8qCisJICogSWYgd2UncmUgY29uc2lkZXJpbmcgaW1wbGVtZW50aW5nIGEgc2VtaWpvaW4g YnkgbWFraW5nIG9uZSBzaWRlIHVuaXF1ZSwKKwkgKiBtYWtlIGEgbm90ZSBvZiBpdCBpbiB0aGUg cGdwYV9wbGFubmVyX3N0YXRlLiBTZWUgY29tbWVudHMgZm9yCisJICogcGdwYV9zal91bmlxdWVf cmVsIGZvciB3aHkgd2UgZG8gdGhpcy4KKwkgKi8KKwlpZiAoam9pbnR5cGUgPT0gSk9JTl9VTklR VUVfT1VURVIgfHwgam9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIpCisJeworCQlwZ3BhX3Bs YW5uZXJfc3RhdGUgKnBwczsKKwkJUmVsT3B0SW5mbyAqdW5pcXVlcmVsOworCisJCXVuaXF1ZXJl bCA9IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSID8gb3V0ZXJyZWwgOiBpbm5lcnJlbDsK KwkJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5u ZXJfZXh0ZW5zaW9uX2lkKTsKKwkJaWYgKHBwcy0+Z2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwkJ eworCQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKKworCQkJLyogQXZvaWQgYWRkaW5nIGR1cGxpY2F0 ZXMuICovCisJCQlmb3JlYWNoX3B0cihwZ3BhX3NqX3VuaXF1ZV9yZWwsIHVyLCBwcHMtPnNqX3Vu aXF1ZV9yZWxzKQorCQkJeworCQkJCS8qCisJCQkJICogV2Ugc2hvdWxkIGFsd2F5cyB1c2UgdGhl IHNhbWUgcG9pbnRlciBmb3IgdGhlIHNhbWUgcGxhbgorCQkJCSAqIG5hbWUsIHNvIHdlIG5lZWQg bm90IHVzZSBzdHJjbXAoKSBoZXJlLgorCQkJCSAqLworCQkJCWlmIChyb290LT5wbGFuX25hbWUg PT0gdXItPnBsYW5fbmFtZSAmJgorCQkJCQlibXNfZXF1YWwodW5pcXVlcmVsLT5yZWxpZHMsIHVy LT5yZWxpZHMpKQorCQkJCXsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9 CisJCQl9CisKKwkJCS8qIElmIG5vdCBhIGR1cGxpY2F0ZSwgYXBwZW5kIHRvIHRoZSBsaXN0LiAq LworCQkJaWYgKCFmb3VuZCkKKwkJCXsKKwkJCQlwZ3BhX3NqX3VuaXF1ZV9yZWwgKnVyID0gcGFs bG9jX29iamVjdChwZ3BhX3NqX3VuaXF1ZV9yZWwpOworCisJCQkJdXItPnBsYW5fbmFtZSA9IHJv b3QtPnBsYW5fbmFtZTsKKwkJCQl1ci0+cmVsaWRzID0gdW5pcXVlcmVsLT5yZWxpZHM7CisJCQkJ cHBzLT5zal91bmlxdWVfcmVscyA9IGxhcHBlbmQocHBzLT5zal91bmlxdWVfcmVscywgdXIpOwor CQkJfQorCQl9CisJfQorCisJLyogR2V0IG91ciBwcml2YXRlIHN0YXRlIGluZm9ybWF0aW9uIGZv ciB0aGlzIGpvaW4uICovCisJcGpzID0gcGdwYV9nZXRfam9pbl9zdGF0ZShyb290LCBqb2lucmVs LCBvdXRlcnJlbCwgaW5uZXJyZWwpOworCisJLyogSWYgdGhlcmUgaXMgcmVsZXZhbnQgYWR2aWNl LCBjYWxsIGEgaGVscGVyIGZ1bmN0aW9uIHRvIGFwcGx5IGl0LiAqLworCWlmIChwanMgIT0gTlVM TCkKKwkJcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2Uoam9pbnR5cGUsCisJCQkJ CQkJCQkJCSZleHRyYS0+cGdzX21hc2ssCisJCQkJCQkJCQkJCXJvb3QtPnBsYW5fbmFtZSwKKwkJ CQkJCQkJCQkJcGpzKTsKKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91cyBob29rLiAqLworCWlm IChwcmV2X2pvaW5fcGF0aF9zZXR1cCkKKwkJKCpwcmV2X2pvaW5fcGF0aF9zZXR1cCkgKHJvb3Qs IGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkJIGpvaW50eXBlLCBleHRyYSk7 Cit9CisKKy8qCisgKiBDYXJyeSBvdXQgd2hhdGV2ZXIgc2V0dXAgd29yayB3ZSBuZWVkIHRvIGRv IGJlZm9yZSBwbGFubmluZy4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9zZXR1cChQ bGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmlu ZywKKwkJCQkgICBkb3VibGUgKnR1cGxlX2ZyYWN0aW9uLCBFeHBsYWluU3RhdGUgKmVzKQorewor CXBncGFfdHJvdmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwczsKKwli b29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJYm9vbAkJbmVlZHNfcHBzID0g ZmFsc2U7CisKKwkvKgorCSAqIERlY2lkZSB3aGV0aGVyIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYW4g YWR2aWNlIHN0cmluZy4gV2UgbXVzdCBkbyB0aGlzIGlmCisJICogYXQgbGVhc3Qgb25lIGNvbGxl Y3RvciBpcyBlbmFibGVkIG9yIGlmIHRoZSB1c2VyIGhhcyByZXF1ZXN0ZWQgaXQgdXNpbmcKKwkg KiB0aGUgRVhQTEFJTiAoUExBTl9BRFZJQ0UpIG9wdGlvbi4KKwkgKi8KKwlnZW5lcmF0ZV9hZHZp Y2Vfc3RyaW5nID0gKHBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPiAwIHx8 CisJCQkJCQkJICBwZ19wbGFuX2FkdmljZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDAgfHwK KwkJCQkJCQkgIHBnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKGVzKSk7CisJaWYgKGdlbmVy YXRlX2FkdmljZV9zdHJpbmcpCisJCW5lZWRzX3BwcyA9IHRydWU7CisKKwkvKgorCSAqIElmIGFu eSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBidWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBmb3IgdXNlIGR1 cmluZworCSAqIHBsYW5uaW5nLgorCSAqLworCWlmIChwZ19wbGFuX2FkdmljZV9hZHZpY2UgIT0g TlVMTCAmJiBwZ19wbGFuX2FkdmljZV9hZHZpY2VbMF0gIT0gJ1wwJykKKwl7CisJCUxpc3QJICAg KmFkdmljZV9pdGVtczsKKwkJY2hhcgkgICAqZXJyb3I7CisKKwkJLyoKKwkJICogUGFyc2luZyBz aG91bGRuJ3QgZmFpbCBoZXJlLCBiZWNhdXNlIHdlIG11c3QgaGF2ZSBwcmV2aW91c2x5IHBhcnNl ZAorCQkgKiBzdWNjZXNzZnVsbHkgaW4gcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2ss IGJ1dCBpZiBpdCBkb2VzLAorCQkgKiBlbWl0IGEgd2FybmluZy4KKwkJICovCisJCWFkdmljZV9p dGVtcyA9IHBncGFfcGFyc2UocGdfcGxhbl9hZHZpY2VfYWR2aWNlLCAmZXJyb3IpOworCQlpZiAo ZXJyb3IpCisJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgcGFyc2UgYWR2aWNlOiAlcyIsIGVy cm9yKTsKKworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGFkdmljZSBzdHJpbmcg d2FzIG5vbi1lbXB0eSBidXQgY29udGFpbmVkIG5vCisJCSAqIGFjdHVhbCBhZHZpY2UsIGUuZy4g aXQgd2FzIGFsbCB3aGl0ZXNwYWNlLgorCQkgKi8KKwkJaWYgKGFkdmljZV9pdGVtcyAhPSBOSUwp CisJCXsKKwkJCXRyb3ZlID0gcGdwYV9idWlsZF90cm92ZShhZHZpY2VfaXRlbXMpOworCQkJbmVl ZHNfcHBzID0gdHJ1ZTsKKwkJfQorCX0KKworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwor CS8qCisJICogSWYgYXNzZXJ0cyBhcmUgZW5hYmxlZCwgYWx3YXlzIGJ1aWxkIGEgcHJpdmF0ZSBz dGF0ZSBvYmplY3QgZm9yCisJICogY3Jvc3MtY2hlY2tzLgorCSAqLworCW5lZWRzX3BwcyA9IHRy dWU7CisjZW5kaWYKKworCS8qCisJICogV2Ugb25seSBjcmVhdGUgYW5kIGluaXRpYWxpemUgYSBw cml2YXRlIHN0YXRlIG9iamVjdCBpZiBpdCdzIG5lZWRlZCBmb3IKKwkgKiBzb21lIHB1cnBvc2Uu IFRoYXQgY291bGQgYmUgKDEpIHJlY29yZGluZyB0aGF0IHdlIHdpbGwgbmVlZCB0byBnZW5lcmF0 ZQorCSAqIGFuIGFkdmljZSBzdHJpbmcsICgyKSBzdG9yaW5nIGEgdHJvdmUgb2Ygc3VwcGxpZWQg YWR2aWNlLCBvciAoMykKKwkgKiBmYWNpbGl0YXRpbmcgZGVidWdnaW5nIGNyb3NzLWNoZWNrcyB3 aGVuIGFzc2VydHMgYXJlIGVuYWJsZWQuCisJICovCisJaWYgKG5lZWRzX3BwcykKKwl7CisJCXBw cyA9IHBhbGxvYzBfb2JqZWN0KHBncGFfcGxhbm5lcl9zdGF0ZSk7CisJCXBwcy0+ZXhwbGFpbl9z dGF0ZSA9IGVzOworCQlwcHMtPmdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSBnZW5lcmF0ZV9hZHZp Y2Vfc3RyaW5nOworCQlwcHMtPnRyb3ZlID0gdHJvdmU7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVD S0lORworCQlwcHMtPnJpX2NoZWNrX2hhc2ggPQorCQkJcGdwYV9yaV9jaGVja19jcmVhdGUoQ3Vy cmVudE1lbW9yeUNvbnRleHQsIDEwMjQsIE5VTEwpOworI2VuZGlmCisJCVNldFBsYW5uZXJHbG9i YWxFeHRlbnNpb25TdGF0ZShnbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCwgcHBzKTsKKwl9Cit9 CisKKy8qCisgKiBDYXJyeSBvdXQgd2hhdGV2ZXIgd29yayB3ZSB3YW50IHRvIGRvIGFmdGVyIHBs YW5uaW5nIGlzIGNvbXBsZXRlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX3NodXRk b3duKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKKwkJCQkJICBjb25zdCBjaGFy ICpxdWVyeV9zdHJpbmcsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKwlwZ3BhX3BsYW5uZXJfc3Rh dGUgKnBwczsKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IE5VTEw7CisJRXhwbGFpblN0YXRlICplcyA9 IE5VTEw7CisJcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHdhbGtlciA9IHswfTsJLyogcGxhY2F0 ZSBjb21waWxlciAqLworCWJvb2wJCWRvX2FkdmljZV9mZWVkYmFjazsKKwlib29sCQlnZW5lcmF0 ZV9hZHZpY2Vfc3RyaW5nID0gZmFsc2U7CisJTGlzdAkgICAqcGdwYV9pdGVtcyA9IE5JTDsKKwlw Z3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzID0gTlVMTDsKKworCS8qIEZldGNoIG91ciBw cml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0g R2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lk KTsKKwlpZiAocHBzICE9IE5VTEwpCisJeworCQl0cm92ZSA9IHBwcy0+dHJvdmU7CisJCWVzID0g cHBzLT5leHBsYWluX3N0YXRlOworCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nID0gcHBzLT5nZW5l cmF0ZV9hZHZpY2Vfc3RyaW5nOworCX0KKworCS8qCisJICogSWYgYW55IGFkdmljZSB3YXMgc3Bl Y2lmaWVkLCBhbmQgaWYgd2UncmUgcnVubmluZyB1bmRlciBFWFBMQUlOLCB0aGVuCisJICogd2Ug c2hvdWxkIHRyeSB0cnkgdG8gcHJvdmlkZSBhZHZpY2UgZmVlZGJhY2suCisJICoKKwkgKiBJZiB3 ZSdyZSB0cnlpbmcgdG8gZ2VuZXJhdGUgYW4gYWR2aWNlIHN0cmluZyBvciBpZiB3ZSdyZSB0cnlp bmcgdG8KKwkgKiBwcm92aWRlIGFkdmljZSBmZWVkYmFjaywgdGhlbiB3ZSB3aWxsIG5lZWQgdG8g Y3JlYXRlIHJhbmdlIHRhYmxlCisJICogaWRlbnRpZmllcnMuCisJICovCisJZG9fYWR2aWNlX2Zl ZWRiYWNrID0gKHRyb3ZlICE9IE5VTEwgJiYgZXMgIT0gTlVMTCk7CisJaWYgKGdlbmVyYXRlX2Fk dmljZV9zdHJpbmcgfHwgZG9fYWR2aWNlX2ZlZWRiYWNrKQorCXsKKwkJcGdwYV9wbGFuX3dhbGtl cigmd2Fsa2VyLCBwc3RtdCwgcHBzLT5zal91bmlxdWVfcmVscyk7CisJCXJ0X2lkZW50aWZpZXJz ID0gcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChwc3RtdCk7CisJfQor CisJLyogR2VuZXJhdGUgdGhlIGFkdmljZSBzdHJpbmcsIGlmIHdlIG5lZWQgdG8gZG8gc28uICov CisJaWYgKGdlbmVyYXRlX2FkdmljZV9zdHJpbmcpCisJeworCQljaGFyCSAgICphZHZpY2Vfc3Ry aW5nOworCQlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwkJLyogR2VuZXJhdGUgYSB0ZXh0dWFsIGFk dmljZSBzdHJpbmcuICovCisJCWluaXRTdHJpbmdJbmZvKCZidWYpOworCQlwZ3BhX291dHB1dF9h ZHZpY2UoJmJ1ZiwgJndhbGtlciwgcnRfaWRlbnRpZmllcnMpOworCQlhZHZpY2Vfc3RyaW5nID0g YnVmLmRhdGE7CisKKwkJLyogSWYgdGhlIGFkdmljZSBzdHJpbmcgaXMgZW1wdHksIGRvbid0IGJv dGhlciBjb2xsZWN0aW5nIGl0LiAqLworCQlpZiAoYWR2aWNlX3N0cmluZ1swXSAhPSAnXDAnKQor CQkJcGdwYV9jb2xsZWN0X2FkdmljZShwc3RtdC0+cXVlcnlJZCwgcXVlcnlfc3RyaW5nLCBhZHZp Y2Vfc3RyaW5nKTsKKworCQkvKgorCQkgKiBJZiB3ZSd2ZSBnb25lIHRvIHRoZSB0cm91YmxlIG9m IGdlbmVyYXRpbmcgYW4gYWR2aWNlIHN0cmluZywgYW5kIGlmCisJCSAqIHdlJ3JlIGluc2lkZSBF WFBMQUlOLCBzYXZlIHRoZSBzdHJpbmcgc28gd2UgZG9uJ3QgbmVlZCB0bworCQkgKiByZWdlbmVy YXRlIGl0LgorCQkgKi8KKwkJaWYgKGVzICE9IE5VTEwpCisJCQlwZ3BhX2l0ZW1zID0gbGFwcGVu ZChwZ3BhX2l0ZW1zLAorCQkJCQkJCQkgbWFrZURlZkVsZW0oImFkdmljZV9zdHJpbmciLAorCQkJ CQkJCQkJCQkgKE5vZGUgKikgbWFrZVN0cmluZyhhZHZpY2Vfc3RyaW5nKSwKKwkJCQkJCQkJCQkJ IC0xKSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgcGxhbm5pbmcgd2l0aGluIEVYUExBSU4s IG1ha2UgYXJyYW5nZW1lbnRzIHRvIGFsbG93IEVYUExBSU4KKwkgKiB0byB0ZWxsIHRoZSB1c2Vy IHdoYXQgaGFzIGhhcHBlbmVkIHdpdGggdGhlIHByb3ZpZGVkIGFkdmljZS4KKwkgKgorCSAqIE5C OiBJZiBFWFBMQUlOIGlzIHVzZWQgb24gYSBwcmVwYXJlZCBpcyBhIHByZXBhcmVkIHN0YXRlbWVu dCwgcGxhbm5pbmcKKwkgKiB3aWxsIGhhdmUgYWxyZWFkeSBoYXBwZW5lZCBoYXBwZW5lZCB3aXRo b3V0IHJlY29yZGluZyB0aGVzZSBkZXRhaWxzLiBXZQorCSAqIGNvdWxkIGNvbnNpZGVyIGFkZGlu ZyBhIEdVQyB0byBjYXRlciB0byB0aGF0IHNjZW5hcmlvOyBvciB3ZSBjb3VsZCBkbworCSAqIHRo aXMgd29yayBhbGwgdGhlIHRpbWUsIGJ1dCB0aGF0IHNlZW1zIGxpa2UgdG9vIG11Y2ggb3Zlcmhl YWQuCisJICovCisJaWYgKGRvX2FkdmljZV9mZWVkYmFjaykKKwl7CisJCUxpc3QJICAgKmZlZWRi YWNrID0gTklMOworCisJCS8qCisJCSAqIEluamVjdCBhIE5vZGUtdHJlZSByZXByZXNlbnRhdGlv biBvZiBhbGwgdGhlIHRyb3ZlLWVudHJ5IGZsYWdzIGludG8KKwkJICogdGhlIFBsYW5uZWRTdG10 LgorCQkgKi8KKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNrKGZlZWRi YWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQR1BBX1RST1ZFX0xPT0tVUF9T Q0FOLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOworCQlmZWVkYmFjayA9 IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ssCisJCQkJCQkJCQkJCQl0cm92 ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX0pPSU4sCisJCQkJCQkJCQkJCQlydF9p ZGVudGlmaWVycywgJndhbGtlcik7CisJCWZlZWRiYWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9m ZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJCXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9U Uk9WRV9MT09LVVBfUkVMLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxrZXIpOwor CisJCXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsIG1ha2VEZWZFbGVtKCJmZWVkYmFj ayIsCisJCQkJCQkJCQkJCQkJIChOb2RlICopIGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJCSAtMSkp OworCX0KKworCS8qIFB1c2ggd2hhdGV2ZXIgZGF0YSB3ZSdyZSBzYXZpbmcgaW50byB0aGUgUGxh bm5lZFN0bXQuICovCisJaWYgKHBncGFfaXRlbXMgIT0gTklMKQorCQlwc3RtdC0+ZXh0ZW5zaW9u X3N0YXRlID0KKwkJCWxhcHBlbmQocHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSwKKwkJCQkJbWFrZURl ZkVsZW0oInBnX3BsYW5fYWR2aWNlIiwgKE5vZGUgKikgcGdwYV9pdGVtcywgLTEpKTsKKworCS8q CisJICogSWYgYXNzZXJ0aW9ucyBhcmUgZW5hYmxlZCwgY3Jvc3MtY2hlY2sgdGhlIGdlbmVyYXRl ZCByYW5nZSB0YWJsZQorCSAqIGlkZW50aWZpZXJzLgorCSAqLworCWlmIChwcHMgIT0gTlVMTCkK KwkJcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBwcywgcHN0bXQpOworfQorCisvKgorICogRW5m b3JjZSBvdmVyYWxsIHJlc3RyaWN0aW9ucyBvbiBhIGpvaW4gcmVsYXRpb24gdGhhdCBhcHBseSB1 bmlmb3JtbHkKKyAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGNob2ljZSBvZiBpbm5lciBhbmQgb3V0ZXIg cmVsLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNl KHVpbnQ2NCAqcGdzX21hc2tfcCwgY2hhciAqcGxhbl9uYW1lLAorCQkJCQkJCQkgIHBncGFfam9p bl9zdGF0ZSAqcGpzKQoreworCWludAkJCWkgPSAtMTsKKwlpbnQJCQlmbGFnczsKKwlib29sCQln YXRoZXJfY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwlCaXRt YXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqZ2F0aGVy X2Z1bGxfbWF0Y2ggPSBOVUxMOworCWJvb2wJCXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSBmYWxz ZTsKKwlpbnQJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgPSAwOworCUJpdG1hcHNldCAgKnBhcnRp dGlvbndpc2VfcGFydGlhbF9tYXRjaCA9IE5VTEw7CisJQml0bWFwc2V0ICAqcGFydGl0aW9ud2lz ZV9mdWxsX21hdGNoID0gTlVMTDsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgcG9zc2libHktcmVs ZXZhbnQgYWR2aWNlLiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwanMtPnJlbF9p bmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0gJnBqcy0+ cmVsX2VudHJpZXNbaV07CisJCXBncGFfaXRtX3R5cGUgaXRtOworCQlib29sCQlmdWxsX21hdGNo ID0gZmFsc2U7CisJCXVpbnQ2NAkJbXlfZ2F0aGVyX21hc2sgPSAwOworCQlpbnQJCQlteV9wYXJ0 aXRpb253aXNlX291dGNvbWUgPSAwOwkvKiA+MCB5ZXMsIDwwIG5vICovCisKKwkJLyoKKwkJICog Rm9yIEdBVEhFUiBhbmQgR0FUSEVSX01FUkdFLCBpZiB0aGUgc3BlY2lmaWVkIHJlbGF0aW9ucyBl eGFjdGx5CisJCSAqIG1hdGNoIHRoaXMgam9pbnJlbCwgZG8gd2hhdGV2ZXIgdGhlIGFkdmljZSBz YXlzOyBvdGhlcndpc2UsIGRvbid0CisJCSAqIGFsbG93IEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ug YXQgdGhpcyBsZXZlbC4gRm9yIE5PX0dBVEhFUiwgdGhlcmUKKwkJICogbXVzdCBiZSBhIHNpbmds ZSB0YXJnZXQgcmVsYXRpb24gd2hpY2ggbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGlzCisJCSAqIGpv aW5yZWwsIHNvIGp1c3QgZG9uJ3QgYWxsb3cgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBoZXJlLCBm dWxsCisJCSAqIHN0b3AuCisJCSAqLworCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19H QVRIRVIpCisJCXsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7 CisJCQlmdWxsX21hdGNoID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWludAkJCXRvdGFs X2NvdW50OworCisJCQl0b3RhbF9jb3VudCA9IHBqcy0+b3V0ZXJfY291bnQgKyBwanMtPmlubmVy X2NvdW50OworCQkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQodG90YWxfY291 bnQsIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJCWVudHJ5LT50YXJnZXQpOworCQkJQXNzZXJ0KGl0 bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwp CisJCQl7CisJCQkJZnVsbF9tYXRjaCA9IHRydWU7CisJCQkJaWYgKGVudHJ5LT50YWcgPT0gUEdQ QV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gMTsK KwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUikKKwkJCQkJbXlfZ2F0 aGVyX21hc2sgPSBQR1NfR0FUSEVSOworCQkJCWVsc2UgaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9U QUdfR0FUSEVSX01FUkdFKQorCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJfTUVSR0U7 CisJCQkJZWxzZQorCQkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBhZHZpY2UgdGFnOiAlZCIs CisJCQkJCQkgKGludCkgZW50cnktPnRhZyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYg KGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfUEFSVElUSU9OV0lTRSkKKwkJCQl7CisJCQkJCW15X3Bh cnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19DT05T SURFUl9OT05QQVJUSUFMOworCQkJCX0KKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFf VEFHX0dBVEhFUiB8fAorCQkJCQkJIGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSX01FUkdF KQorCQkJCXsKKwkJCQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lID0gLTE7CisJCQkJCW15X2dh dGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCQkJfQorCQkJCWVsc2UKKwkJ CQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQp IGVudHJ5LT50YWcpOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc2V0IG15X2dhdGhl cl9tYXNrIHVwIGFib3ZlLCB0aGVuIHdlICgxKSBtYWtlIGEgbm90ZSBpZiB0aGUKKwkJICogYWR2 aWNlIGNvbmZsaWN0ZWQsICgyKSByZW1lbWJlciB0aGUgbWFzayB2YWx1ZSwgYW5kICgzKSByZW1l bWJlcgorCQkgKiB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsIG1hdGNoLgorCQkg Ki8KKwkJaWYgKG15X2dhdGhlcl9tYXNrICE9IDApCisJCXsKKwkJCWlmIChnYXRoZXJfbWFzayAh PSAwICYmIGdhdGhlcl9tYXNrICE9IG15X2dhdGhlcl9tYXNrKQorCQkJCWdhdGhlcl9jb25mbGlj dCA9IHRydWU7CisJCQlnYXRoZXJfbWFzayA9IG15X2dhdGhlcl9tYXNrOworCQkJaWYgKGZ1bGxf bWF0Y2gpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRoZXJfZnVs bF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBibXNfYWRk X21lbWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKworCQkvKgorCQkgKiBMaWtl d2lzZSwgaWYgd2Ugc2V0IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSB1cCBhYm92ZSwgdGhlbiB3 ZSAoMSkKKwkJICogbWFrZSBhIG5vdGUgaWYgdGhlIGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVt ZW1iZXIgd2hhdCB0aGUgZGVzaXJlZAorCQkgKiBvdXRjb21lIHdhcywgYW5kICgzKSByZW1lbWJl ciB3aGV0aGVyIHRoaXMgd2FzIGEgZnVsbCBvciBwYXJ0aWFsCisJCSAqIG1hdGNoLgorCQkgKi8K KwkJaWYgKG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwKQorCQl7CisJCQlpZiAocGFydGl0 aW9ud2lzZV9vdXRjb21lICE9IDAgJiYKKwkJCQlwYXJ0aXRpb253aXNlX291dGNvbWUgIT0gbXlf cGFydGl0aW9ud2lzZV9vdXRjb21lKQorCQkJCXBhcnRpdGlvbndpc2VfY29uZmxpY3QgPSB0cnVl OworCQkJcGFydGl0aW9ud2lzZV9vdXRjb21lID0gbXlfcGFydGl0aW9ud2lzZV9vdXRjb21lOwor CQkJaWYgKGZ1bGxfbWF0Y2gpCisJCQkJcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoID0KKwkJCQkJ Ym1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBpKTsKKwkJCWVsc2UKKwkJ CQlwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2ggPQorCQkJCQlibXNfYWRkX21lbWJlcihwYXJ0 aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGkpOworCQl9CisJfQorCisJLyoKKwkgKiBNYXJrIGV2 ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFkdmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZCwg YW5kIGlmCisJICogdGhlIHNldCBvZiB0YXJnZXRzIGV4YWN0bHkgbWF0Y2hlZCB0aGlzIHJlbGF0 aW9uLCBmdWxseSBtYXRjaGVkLiBJZgorCSAqIHRoZXJlIHdhcyBhIGNvbmZsaWN0LCBtYXJrIHRo ZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9NQVRDSF9QQVJU SUFMOworCWlmIChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVfQ09ORkxJQ1RJ Tkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX3BhcnRp YWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90 cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdz KTsKKworCS8qIExpa2V3aXNlIGZvciBwYXJ0aXRpb253aXNlIGFkdmljZS4gKi8KKwlmbGFncyA9 IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAocGFydGl0aW9ud2lzZV9jb25mbGljdCkKKwkJ ZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMt PnJlbF9lbnRyaWVzLCBwYXJ0aXRpb253aXNlX3BhcnRpYWxfbWF0Y2gsIGZsYWdzKTsKKwlmbGFn cyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxf ZW50cmllcywgcGFydGl0aW9ud2lzZV9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKiBJZiB0aGVy ZSBpcyBhIG5vbi1jb25mbGljdGluZyBnYXRoZXIgc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4g Ki8KKwlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiAhZ2F0aGVyX2NvbmZsaWN0KQorCXsKKwkJKnBn c19tYXNrX3AgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19HQVRIRVJfTUVSR0UgfCBQR1NfQ09O U0lERVJfTk9OUEFSVElBTCk7CisJCSpwZ3NfbWFza19wIHw9IGdhdGhlcl9tYXNrOworCX0KKwor CS8qCisJICogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgcGFydGl0aW9ud2lzZSBzcGVj aWZpY2F0aW9uLCBlbmZvcmNlLgorCSAqCisJICogVG8gZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpv aW4sIHdlIGRpc2FibGUgYWxsIHRoZSBvcmRpbmFyeSBtZWFucyBvZgorCSAqIHBlcmZvcm1pbmcg YSBqb2luLCBhbmQgaW5zdGVhZCBvbmx5IEFwcGVuZCBhbmQgTWVyZ2VBcHBlbmQgcGF0aHMgaGVy ZS4KKwkgKiBUbyBwcmV2ZW50IG9uZSwgd2UganVzdCBkaXNhYmxlIEFwcGVuZCBhbmQgTWVyZ2VB cHBlbmQuICBOb3RlIHRoYXQgd2UKKwkgKiBtdXN0IG5vdCB1bnNldCBQR1NfQ09OU0lERVJfUEFS VElUSU9OV0lTRSBldmVuIHdoZW4gd2UgZG9uJ3Qgd2FudCBhCisJICogcGFydGl0aW9ud2lzZSBq b2luIGhlcmUsIGJlY2F1c2Ugd2UgbWlnaHQgd2FudCBvbmUgYXQgYSBoaWdoZXIgbGV2ZWwKKwkg KiB0aGF0IGlzIGNvbnN0cnVjdGluZyB1c2luZyBwYXRocyBmcm9tIHRoaXMgbGV2ZWwuCisJICov CisJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAhPSAwICYmICFwYXJ0aXRpb253aXNlX2NvbmZs aWN0KQorCXsKKwkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSA+IDApCisJCQkqcGdzX21hc2tf cCA9ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwKKwkJCQlQR1NfQVBQRU5EIHwgUEdT X01FUkdFX0FQUEVORCB8IFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFOworCQllbHNlCisJCQkq cGdzX21hc2tfcCAmPSB+KFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EKTsKKwl9Cit9CisK Ky8qCisgKiBFbmZvcmNlIHJlc3RyaWN0aW9ucyBvbiB0aGUgam9pbiBvcmRlciBvciBqb2luIG1l dGhvZC4KKyAqCisgKiBOb3RlIHRoYXQsIGFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvIHZpZXcg UEFSVElUSU9OV0lTRSBhZHZpY2UgYXMKKyAqIGNvbnRyb2xsaW5nIHRoZSBqb2luIG1ldGhvZCwg d2UgY2FuJ3QgZW5mb3JjZSBpdCBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlCisgKiBwYXRoIHdoZXJl IHRoaXMgZXhlY3V0ZXMgb25seSBkZWFscyB3aXRoIGpvaW4gcGF0aHMgdGhhdCBhcmUgYnVpbHQg ZGlyZWN0bHkKKyAqIGZyb20gYSBzaW5nbGUgb3V0ZXIgcGF0aCBhbmQgYSBzaW5nbGUgaW5uZXIg cGF0aC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9qb2luX3BhdGhfYWR2 aWNlKEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgKnBnc19tYXNrX3AsCisJCQkJCQkJCQljaGFy ICpwbGFuX25hbWUsCisJCQkJCQkJCQlwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sKKwlpbnQJCQlp ID0gLTE7CisJQml0bWFwc2V0ICAqam9fcGVybWl0X2luZGV4ZXMgPSBOVUxMOworCUJpdG1hcHNl dCAgKmpvX2RlbnlfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqam1faW5kZXhlcyA9IE5V TEw7CisJYm9vbAkJam1fY29uZmxpY3QgPSBmYWxzZTsKKwl1aW50MzIJCWpvaW5fbWFzayA9IDA7 CisKKwkvKiBJdGVyYXRlIG92ZXIgYWxsIHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8KKwl3 aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5qb2luX2luZGV4ZXMsIGkpKSA+PSAwKQor CXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5qb2luX2VudHJpZXNbaV07CisJ CXVpbnQzMgkJbXlfam9pbl9tYXNrOworCisJCS8qIEhhbmRsZSBqb2luIG9yZGVyIGFkdmljZS4g Ki8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfSk9JTl9PUkRFUikKKwkJeworCQkJaWYg KHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJ CQkJIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSBwanMtPnJpZHMsCisJCQkJCQkJCQkJ CSBlbnRyeSkpCisJCQkJam9fcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19wZXJt aXRfaW5kZXhlcywgaSk7CisJCQllbHNlCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1zX2FkZF9t ZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSGFu ZGxlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiAqLworCQlteV9qb2luX21hc2sgPSBwZ3BhX2pvaW5f c3RyYXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcoZW50cnktPnRhZyk7CisJCWlmIChteV9qb2lu X21hc2sgIT0gMCkKKwkJeworCQkJYm9vbAkJcGVybWl0OworCQkJYm9vbAkJcmVzdHJpY3RfbWV0 aG9kOworCisJCQlpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdOX0pPSU4pCisJCQkJ cGVybWl0ID0gcGdwYV9vcGFxdWVfam9pbl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwK KwkJCQkJCQkJCQkJCQkgICBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+ cmlkcywKKwkJCQkJCQkJCQkJCQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3Rf bWV0aG9kKTsKKwkJCWVsc2UKKwkJCQlwZXJtaXQgPSBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNf am9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQs CisJCQkJCQkJCQkJCQkJICAgcGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJ CQkJCQkJCQkJCSAgICZyZXN0cmljdF9tZXRob2QpOworCQkJaWYgKCFwZXJtaXQpCisJCQkJam9f ZGVueV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWVs c2UgaWYgKHJlc3RyaWN0X21ldGhvZCkKKwkJCXsKKwkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJt c19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsKKwkJCQlqbV9pbmRleGVzID0gYm1z X2FkZF9tZW1iZXIoam9fcGVybWl0X2luZGV4ZXMsIGkpOworCQkJCWlmIChqb2luX21hc2sgIT0g MCAmJiBqb2luX21hc2sgIT0gbXlfam9pbl9tYXNrKQorCQkJCQlqbV9jb25mbGljdCA9IHRydWU7 CisJCQkJam9pbl9tYXNrID0gbXlfam9pbl9tYXNrOworCQkJfQorCQkJY29udGludWU7CisJCX0K KworCQkvKiBIYW5kbGUgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2UuICovCisJCWlmIChlbnRy eS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSB8fAorCQkJZW50cnktPnRhZyA9PSBQ R1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFKQorCQl7CisJCQlib29sCQlhZHZpY2VfdW5pcXVl OworCQkJYm9vbAkJanRfdW5pcXVlOworCQkJYm9vbAkJanRfbm9uX3VuaXF1ZTsKKwkJCWJvb2wJ CXJlc3RyaWN0X21ldGhvZDsKKworCQkJLyogQWR2aWNlIHdhbnRzIHRvIHVuaXF1ZS1pZnkgYW5k IHVzZSBhIHJlZ3VsYXIgam9pbj8gKi8KKwkJCWFkdmljZV91bmlxdWUgPSAoZW50cnktPnRhZyA9 PSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUUpOworCisJCQkvKiBQbGFubmVyIGlzIHRyeWluZyB0 byB1bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQlqdF91bmlxdWUgPSAo am9pbnR5cGUgPT0gSk9JTl9VTklRVUVfSU5ORVIgfHwKKwkJCQkJCSBqb2ludHlwZSA9PSBKT0lO X1VOSVFVRV9PVVRFUik7CisKKwkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5nIGEgc2VtaS1qb2luLCB3 aXRob3V0IHVuaXF1ZS1pZnlpbmc/ICovCisJCQlqdF9ub25fdW5pcXVlID0gKGpvaW50eXBlID09 IEpPSU5fU0VNSSB8fAorCQkJCQkJCSBqb2ludHlwZSA9PSBKT0lOX1JJR0hUX1NFTUkpOworCisJ CQkvKgorCQkJICogVGhlc2UgYWR2aWNlIHRhZ3MgYmVoYXZlIHZlcnkgbXVjaCBsaWtlIGpvaW4g bWV0aG9kIGFkdmljZSwgaW4KKwkJCSAqIHRoYXQgdGhleSB3YW50IHRoZSBpbm5lciBzaWRlIG9m IHRoZSBzZW1pam9pbiB0byBtYXRjaCB0aGUKKwkJCSAqIHJlbGF0aW9ucyBsaXN0ZWQgaW4gdGhl IGFkdmljZS4gSGVuY2UsIHdlIHRlc3Qgd2hldGhlciBqb2luCisJCQkgKiBtZXRob2QgYWR2aWNl IHdvdWxkIGVuZm9yY2UgYSBqb2luIG9yZGVyIHJlc3RyaWN0aW9uIGhlcmUsIGFuZAorCQkJICog ZGlzYWxsb3cgdGhlIGpvaW4gaWYgbm90LgorCQkJICoKKwkJCSAqIFhYWC4gVGhpbmsgaGFyZGVy IGFib3V0IHJpZ2h0IHNlbWlqb2lucy4KKwkJCSAqLworCQkJaWYgKCFwZ3BhX2pvaW5fbWV0aG9k X3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgICBwanMtPmlubmVy X2NvdW50LAorCQkJCQkJCQkJCQkgICBwanMtPnJpZHMsCisJCQkJCQkJCQkJCSAgIGVudHJ5LAor CQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKSkKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBi bXNfYWRkX21lbWJlcihqb19kZW55X2luZGV4ZXMsIGkpOworCQkJZWxzZSBpZiAocmVzdHJpY3Rf bWV0aG9kKQorCQkJeworCQkJCWlmICghanRfdW5pcXVlICYmICFqdF9ub25fdW5pcXVlKQorCQkJ CXsKKwkJCQkJLyoKKwkJCQkJICogVGhpcyBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzZW1pam9pbiB0 byB3aGljaCBTSl9VTklRVUUKKwkJCQkJICogb3IgU0pfTk9OX1VOSVFVRSBjYW4gYmUgYXBwbGll ZC4KKwkJCQkJICovCisJCQkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0lOQVBQTElDQUJMRTsK KwkJCQl9CisJCQkJZWxzZSBpZiAoYWR2aWNlX3VuaXF1ZSAhPSBqdF91bmlxdWUpCisJCQkJCWpv X2RlbnlfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQkJ ZWxzZQorCQkJCQlqb19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9p bmRleGVzLCBpKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJLyoKKwkgKiBJZiB0 aGUgYWR2aWNlIGluZGljYXRlcyBib3RoIHRoYXQgdGhpcyBqb2luIG9yZGVyIGlzIHBlcm1pc3Np YmxlIGFuZAorCSAqIGFsc28gdGhhdCBpdCBpc24ndCwgdGhlbiBtYXJrIGFkdmljZSByZWxhdGVk IHRvIHRoZSBqb2luIG9yZGVyIGFzCisJICogY29uZmxpY3RpbmcuCisJICovCisJaWYgKGpvX3Bl cm1pdF9pbmRleGVzICE9IE5VTEwgJiYgam9fZGVueV9pbmRleGVzICE9IE5VTEwpCisJeworCQlw Z3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam9fcGVybWl0X2luZGV4ZXMs CisJCQkJCQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhw anMtPmpvaW5fZW50cmllcywgam9fZGVueV9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZM SUNUSU5HKTsKKwl9CisKKwkvKgorCSAqIElmIG1vcmUgdGhhbiBvbmUgam9pbiBtZXRob2Qgc3Bl Y2lmaWNhdGlvbiBpcyByZWxldmFudCBoZXJlIGFuZCB0aGV5CisJICogZGlmZmVyLCBtYXJrIHRo ZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqbV9jb25mbGljdCkKKwkJcGdwYV90 cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGptX2luZGV4ZXMsCisJCQkJCQkJIFBH UEFfVEVfQ09ORkxJQ1RJTkcpOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGFkdmlzZWQgdG8gZGVu eSB0aGlzIGpvaW4gb3JkZXIsIHRoZW4gZG8gc28uIEhvd2V2ZXIsIGlmIHdlCisJICogd2VyZSBh bHNvIGFkdmlzZWQgdG8gcGVybWl0IGl0LCB0aGVuIGRvIG5vdGhpbmcsIHNpbmNlIHRoZSBhZHZp Y2UKKwkgKiBjb25mbGljdHMuCisJICovCisJaWYgKGpvX2RlbnlfaW5kZXhlcyAhPSBOVUxMICYm IGpvX3Blcm1pdF9pbmRleGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wID0gMDsKKworCS8qCisJ ICogSWYgd2Ugd2VyZSBhZHZpc2VkIHRvIHJlc3RyaWN0IHRoZSBqb2luIG1ldGhvZCwgdGhlbiBk byBzby4gSG93ZXZlciwgaWYKKwkgKiB3ZSBnb3QgY29uZmxpY3Rpbmcgam9pbiBtZXRob2QgYWR2 aWNlIG9yIHdlcmUgYWxzbyBhZHZpc2VkIHRvIHJlamVjdAorCSAqIHRoaXMgam9pbiBvcmRlciBj b21wbGV0ZWx5LCB0aGVuIGluc3RlYWQgZG8gbm90aGluZy4KKwkgKi8KKwlpZiAoam9pbl9tYXNr ICE9IDAgJiYgIWptX2NvbmZsaWN0ICYmIGpvX2RlbnlfaW5kZXhlcyA9PSBOVUxMKQorCQkqcGdz X21hc2tfcCA9ICgqcGdzX21hc2tfcCAmIH5QR1NfSk9JTl9BTlkpIHwgam9pbl9tYXNrOworfQor CisvKgorICogVHJhbnNsYXRlIGFuIGFkdmljZSB0YWcgaW50byBhIHBhdGggZ2VuZXJhdGlvbiBz dHJhdGVneSBtYXNrLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB3aXRoIHRh ZyB0eXBlcyB0aGF0IGRvbid0IHJlcHJlc2VudCBqb2luCisgKiBzdHJhdGVnaWVzLiBJbiBzdWNo IGNhc2VzLCB3ZSBqdXN0IHJldHVybiAwLCB3aGljaCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoCisg KiBhIHZhbGlkIG1hc2suCisgKi8KK3N0YXRpYyB1aW50NjQKK3BncGFfam9pbl9zdHJhdGVneV9t YXNrX2Zyb21fYWR2aWNlX3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcpCit7CisJc3dpdGNo ICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0ZPUkVJR05fSk9JTjoKKwkJCXJldHVybiBQR1Nf Rk9SRUlHTkpPSU47CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVy biBQR1NfTUVSR0VKT0lOX1BMQUlOOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJ QUxJWkU6CisJCQlyZXR1cm4gUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BB X1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBQR1NfTkVTVExPT1BfUExBSU47CisJ CWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gUEdTX05F U1RMT09QX01BVEVSSUFMSVpFOworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6 CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX01FTU9JWkU7CisJCWNhc2UgUEdQQV9UQUdfSEFTSF9K T0lOOgorCQkJcmV0dXJuIFBHU19IQVNISk9JTjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOwor CX0KK30KKworLyoKKyAqIERvZXMgYSBjZXJ0YWluIGl0ZW0gb2Ygam9pbiBvcmRlciBhZHZpY2Ug cGVybWl0IGEgY2VydGFpbiBqb2luPworICovCitzdGF0aWMgYm9vbAorcGdwYV9qb2luX29yZGVy X3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkg cGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSkK K3sKKwlib29sCQlsb29wID0gdHJ1ZTsKKwlib29sCQlzdWJsaXN0ID0gZmFsc2U7CisJaW50CQkJ bGVuZ3RoOworCWludAkJCW91dGVyX2xlbmd0aDsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dCA9IGVudHJ5LT50YXJnZXQ7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICpwcmVmaXhfdGFyZ2V0Owor CisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhp cyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFM OworCisJLyoKKwkgKiBGaW5kIHRoZSBpbm5lcm1vc3Qgc3VibGlzdCB0aGF0IGNvbnRhaW5zIGFs bCBrZXlzOyBpZiBubyBzdWJsaXN0IGRvZXMsCisJICogdGhlbiBjb250aW51ZSBwcm9jZXNzaW5n IHdpdGggdGhlIHRvcGxldmVsIGxpc3QuCisJICoKKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFk dmljZSBzYXlzIEpPSU5fT1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIHRoZW4gd2UKKwkgKiBzaG91 bGQgZXZhbHVhdGUgam9pbnMgdGhhdCBvbmx5IGludm9sdmUgdDMsIHQ0LCBhbmQvb3IgdDUgYWdh aW5zdCB0aGUKKwkgKiAodDMgdDQgdDUpIHN1Ymxpc3QsIGFuZCBvdGhlcnMgYWdhaW5zdCB0aGUg ZnVsbCBsaXN0LgorCSAqCisJICogTm90ZSB0aGF0ICgxKSBvdXRlcm1vc3Qgc3VibGlzdCBpcyBh bHdheXMgb3JkZXJlZCBhbmQgKDIpIHdoZW5ldmVyIHdlCisJICogem9vbSBpbnRvIGFuIHVub3Jk ZXJlZCBzdWJsaXN0LCB3ZSBpbnN0YW50bHkgYWNjZXB0IHRoZSBwcm9wb3NlZCBqb2luLgorCSAq IElmIHRoZSBhZHZpY2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyIHt0MyB0NCB0NX0pLCBhbnkgYXBw cm9hY2ggdG8KKwkgKiBqb2luaW5nIHQzLCB0NCwgYW5kL29yIHQ1IGlzIGFjY2VwdGFibGUuCisJ ICovCisJd2hpbGUgKGxvb3ApCisJeworCQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RB UkdFVF9PUkRFUkVEX0xJU1QpOworCisJCWxvb3AgPSBmYWxzZTsKKwkJZm9yZWFjaF9wdHIocGdw YV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJ CXBncGFfaXRtX3R5cGUgaXRtOworCisJCQlpZiAoY2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BB X1RBUkdFVF9JREVOVElGSUVSKQorCQkJCWNvbnRpbnVlOworCisJCQlpdG0gPSBwZ3BhX2lkZW50 aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJ CQkJcmlkcywgY2hpbGRfdGFyZ2V0KTsKKwkJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwg aXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCkKKwkJCXsKKwkJCQlpZiAoY2hpbGRfdGFy Z2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpCisJCQkJeworCQkJCQl0YXJn ZXQgPSBjaGlsZF90YXJnZXQ7CisJCQkJCXN1Ymxpc3QgPSB0cnVlOworCQkJCQlsb29wID0gdHJ1 ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFzc2VydChjaGls ZF90YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKTsKKwkJCQkJcmV0 dXJuIHRydWU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBUcnkgdG8gZmluZCBh IHByZWZpeCBvZiB0aGUgc2VsZWN0ZWQgam9pbiBvcmRlciBsaXN0IHRoYXQgaXMgZXhhY3RseQor CSAqIGVxdWFsIHRvIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBwcm9wb3NlZCBqb2luLgorCSAqLwor CWxlbmd0aCA9IGxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pOworCXByZWZpeF90YXJnZXQg PSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCXByZWZpeF90YXJnZXQtPnR0 eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCWZvciAob3V0ZXJfbGVuZ3RoID0gMTsg b3V0ZXJfbGVuZ3RoIDw9IGxlbmd0aDsgKytvdXRlcl9sZW5ndGgpCisJeworCQlwZ3BhX2l0bV90 eXBlIGl0bTsKKworCQkvKiBBdm9pZCBsZWFraW5nIG1lbW9yeSBpbiBldmVyeSBsb29wIGl0ZXJh dGlvbi4gKi8KKwkJaWYgKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuICE9IE5VTEwpCisJCQlsaXN0 X2ZyZWUocHJlZml4X3RhcmdldC0+Y2hpbGRyZW4pOworCQlwcmVmaXhfdGFyZ2V0LT5jaGlsZHJl biA9IGxpc3RfY29weV9oZWFkKHRhcmdldC0+Y2hpbGRyZW4sCisJCQkJCQkJCQkJCQkgb3V0ZXJf bGVuZ3RoKTsKKworCQkvKiBTZWFyY2gsIGhvcGluZyB0byBmaW5kIGFuIGV4YWN0IG1hdGNoLiAq LworCQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwgcmlk cywgcHJlZml4X3RhcmdldCk7CisJCWlmIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCQlicmVh azsKKworCQkvKgorCQkgKiBJZiB0aGUgcHJlZml4IG9mIHRoZSBqb2luIG9yZGVyIGxpc3QgdGhh dCB3ZSdyZSBjb25zaWRlcmluZworCQkgKiBpbmNsdWRlcyBzb21lIGJ1dCBub3QgYWxsIG9mIHRo ZSBvdXRlciByZWxzLCB3ZSBjYW4gbWFrZSB0aGUgcHJlZml4CisJCSAqIGxvbmdlciB0byBmaW5k IGFuIGV4YWN0IG1hdGNoLiBCdXQgdGhlIGFkdmljZSBoYXNuJ3QgbWVudGlvbmVkCisJCSAqIGV2 ZXJ5dGhpbmcgdGhhdCdzIHBhcnQgb2Ygb3VyIG91dGVyIHJlbCB5ZXQsIGJ1dCBoYXMgbWVudGlv bmVkCisJCSAqIHRoaW5ncyB0aGF0IGFyZSBub3QsIHRoZW4gdGhpcyBqb2luIGRvZXNuJ3QgbWF0 Y2ggdGhlIGpvaW4gb3JkZXIKKwkJICogbGlzdC4KKwkJICovCisJCWlmIChpdG0gIT0gUEdQQV9J VE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICog SWYgdGhlIHByZXZpb3VzIGxvb3BlZCBzdG9wcGVkIGJlZm9yZSB0aGUgcHJlZml4X3RhcmdldCBp bmNsdWRlZCB0aGUKKwkgKiBlbnRpcmUgam9pbiBvcmRlciBsaXN0LCB0aGVuIHRoZSBuZXh0IG1l bWJlciBvZiB0aGUgam9pbiBvcmRlciBsaXN0CisJICogbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBp bm5lciBzaWRlIG9mIHRoZSBqb2luLgorCSAqCisJICogRXhhbXBsZTogR2l2ZW4gSk9JTl9PUkRF Uih0MSB0MiAodDMgdDQgdDUpKSwgaWYgdGhlIG91dGVyIHNpZGUgb2YgdGhlCisJICogY3VycmVu dCBqb2luIGluY2x1ZGVzIG9ubHkgdDEsIHRoZW4gdGhlIGlubmVyIHNpZGUgbXVzdCBiZSBleGFj dGx5IHQyOworCSAqIGlmIHRoZSBvdXRlciBzaWRlIGluY2x1ZGVzIGJvdGggdDEgYW5kIHQyLCB0 aGVuIHRoZSBpbm5lciBzaWRlIG11c3QKKwkgKiBpbmNsdWRlIGV4YWN0bHkgdDMsIHQ0LCBhbmQg dDUuCisJICovCisJaWYgKG91dGVyX2xlbmd0aCA8IGxlbmd0aCkKKwl7CisJCXBncGFfYWR2aWNl X3RhcmdldCAqaW5uZXJfdGFyZ2V0OworCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQlpbm5lcl90 YXJnZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxkcmVuLCBvdXRlcl9sZW5ndGgpOworCisJCWl0 bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGlubmVyX2NvdW50LCByaWRzICsgb3V0 ZXJfY291bnQsCisJCQkJCQkJCQkJCWlubmVyX3RhcmdldCk7CisKKwkJLyoKKwkJICogQmVmb3Jl IHJldHVybmluZywgY29uc2lkZXIgd2hldGhlciB3ZSBuZWVkIHRvIG1hcmsgdGhpcyBlbnRyeSBh cworCQkgKiBmdWxseSBtYXRjaGVkLiBJZiB3ZSBmb3VuZCBldmVyeSBpdGVtIGJ1dCBvbmUgb24g dGhlIGxlZnRoYW5kIHNpZGUKKwkJICogb2YgdGhlIGpvaW4gYW5kIHRoZSBsYXN0IGl0ZW0gb24g dGhlIHJpZ2h0aGFuZCBzaWRlIG9mIHRoZSBqb2luLAorCQkgKiB0aGVuIHRoZSBhbnN3ZXIgaXMg eWVzLgorCQkgKi8KKwkJaWYgKG91dGVyX2xlbmd0aCArIDEgPT0gbGVuZ3RoICYmIGl0bSA9PSBQ R1BBX0lUTV9FUVVBTCkKKwkJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisK KwkJcmV0dXJuIChpdG0gPT0gUEdQQV9JVE1fRVFVQUwpOworCX0KKworCS8qCisJICogSWYgd2Ug Z2V0IGhlcmUsIHRoZW4gdGhlIG91dGVyIHNpZGUgb2YgdGhlIGpvaW4gaW5jbHVkZXMgdGhlIGVu dGlyZXR5CisJICogb2YgdGhlIGpvaW4gb3JkZXIgbGlzdC4gSW4gdGhpcyBjYXNlLCB3ZSBiZWhh dmUgZGlmZmVyZW50bHkgZGVwZW5kaW5nCisJICogb24gd2hldGhlciB3ZSdyZSBsb29raW5nIGF0 IHRoZSB0b3AtbGV2ZWwgam9pbiBvcmRlciBsaXN0IG9yIHN1Ymxpc3QuCisJICogQXQgdGhlIHRv cC1sZXZlbCwgd2UgdHJlYXQgdGhlIHNwZWNpZmllZCBsaXN0IGFzIG1hbmRhdGluZyB0aGF0IHRo ZQorCSAqIGFjdHVhbCBqb2luIG9yZGVyIGhhcyB0aGUgZ2l2ZW4gbGlzdCBhcyBhIHByZWZpeCwg YnV0IGEgc3VibGlzdAorCSAqIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoLgorCSAqCisJICogRXht YXBsZTogR2l2ZW4gSk9JTl9PUkRFUih0MSB0MiAodDMgdDQgdDUpKSwgd2UgbXVzdCBzdGFydCBi eSBqb2luaW5nCisJICogYWxsIGZpdmUgb2YgdGhvc2UgcmVsYXRpb25zIGFuZCBpbiB0aGF0IHNl cXVlbmNlLCBidXQgb25jZSB0aGF0IGlzCisJICogZG9uZSwgaXQncyBPSyB0byBqb2luIGFueSBv dGhlciByZWxzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGpvaW4gcHJvYmxlbS4KKwkgKiBUaGlzIGFs bG93cyBhIHVzZXIgdG8gc3BlY2lmeSB0aGUgZHJpdmluZyB0YWJsZSBhbmQgcGVyaGFwcyB0aGUg Zmlyc3QKKwkgKiBmZXcgdGhpbmdzIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgd2hpbGUg bGVhdmluZyB0aGUgcmVzdCBvZiB0aGUKKwkgKiBqb2luIG9yZGVyIHVwIHRoZSBvcHRpbWl6ZXIu IEJ1dCBpdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGJlIHN1cnByaXNpbmcsCisJICogZ2l2ZW4gdGhh dCBzcGVjaWZpY2F0aW9uLCBpZiB0aGUgdXNlciBjb3VsZCBhZGQgdDYgdG8gdGhlICh0MyB0NCB0 NSkKKwkgKiBzdWItam9pbiwgc28gd2UgZG9uJ3QgYWxsb3cgdGhhdC4gSWYgd2UgZGlkIHdhbnQg dG8gYWxsb3cgaXQsIHRoZSBsb2dpYworCSAqIGVhcmxpZXIgaW4gdGhpcyBmdW5jdGlvbiB3b3Vs ZCByZXF1aXJlIHN1YnN0YW50aWFsIGFkanVzdG1lbnQ6IHdlIGNvdWxkCisJICogYWxsb3cgdGhl IHQzLXQ0LXQ1LXQ2IGpvaW4gdG8gYmUgYnVpbHQgaGVyZSwgYnV0IHRoZSBuZXh0IHN0ZXAgb2YK KwkgKiBqb2luaW5nIHQxLXQyIHRvIHRoZSByZXN1bHQgd291bGQgc3RpbGwgYmUgcmVqZWN0ZWQu CisJICovCisJcmV0dXJuICFzdWJsaXN0OworfQorCisvKgorICogRG9lcyBhIGNlcnRhaW4gaXRl bSBvZiBqb2luIG1ldGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEFk dmljZSBzdWNoIGFzIEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhhdCB0aGVyZSBzaG91bGQgYmUg YSBoYXNoIGpvaW4gd2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9uIHRoZSBpbm5lciBzaWRlLiBP YnZpb3VzbHksIHRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAqIGNvbnNpZGVyaW5nIGEgam9p biB3aXRoIGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lkZSwgd2Ugc2hvdWxkIGVuZm9y Y2UKKyAqIHRoZSB1c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIsIGl0IGFsc28gbWVhbnMgdGhh dCB3ZSBtdXN0IHJlamVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUgam9pbiBvcmRlcnMgZW50aXJl bHkuICBGb3IgZXhhbXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4CisgKiBhbmQgeSBvbiB0aGUg b3V0ZXIgc2lkZSBzaG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVzZSBzdWNoIHBhdGhzIG1pZ2h0 IHdpbgorICogb3ZlciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9uIGNvc3QuCisgKgorICogVG8g YWNjb21tb2RhdGUgdGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1 ZSBpZiB0aGUgam9pbgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5kIGZhbHNlIGlmIGl0IHNob3Vs ZCBub3QuIEZ1cnRoZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisgKiBpcyBzZXQgdG8gdHJ1ZSBp ZiB0aGUgam9pbiBtZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFuZCBmYWxzZSBpZiBub3QuCisg Ki8KK3N0YXRpYyBib29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJf Y291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJp Y3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdl dDsKKwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIG91dGVyX2l0bTsK KwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0IGxl YXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+Zmxh Z3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZhbHNl OworCisJLyoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHNhbWUg cmVsYXRpb25zIGFzIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFsbG93IHRoZSBqb2luIGFuZCBl bmZvcmNlIHRoZSBqb2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkgKgorCSAqIElmIG91ciBpbm5l ciByZWwgbWVudGlvbnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0IHJlbGF0aW9ucywgYWxsb3cg dGhlCisJICogam9pbi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBoYXMgYWxyZWFkeSB0YWtlbiBw bGFjZSwgYW5kIHRoaXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9u cy4KKwkgKi8KKwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5l cl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJCQkJCQkJCSAg dGFyZ2V0KTsKKwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsKKwkJZW50cnkt PmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7 CisJCXJldHVybiB0cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFS R0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgb3VyIG91dGVy IHJlbCBtZW50aW9ucyBhIHN1cHNlcnNldCBvZiB0aGUgcmVsYXRpb25zIGluIHRoZSBhZHZpY2UK KwkgKiB0YXJnZXQsIG5vIHJlc3RyaWN0aW9ucyBhcHBseS4gVGhlIGpvaW4gd2UgY2FyZSBoYXMg YWxyZWFkeSB0YWtlbgorCSAqIHBsYWNlLCBhbmQgdGhpcyBhZHZpY2UgaW1wb3NlcyBubyBmdXJ0 aGVyIHJlc3RyaWN0aW9ucy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBvdXIgb3V0 ZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucworCSAqIG1lbnRpb25lZCBpbiB0 aGUgYWR2aWNlIHRhcmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5nIHRvIHJldmVyc2UgdGhlCisJ ICogc2lkZXMgb2YgdGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBvdXIgZGVzaXJlZCBvdXRjb21l LiBSZWplY3QgdGhhdC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNo X3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzLCB0YXJnZXQpOworCWlmIChv dXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsK KwllbHNlIGlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiBmYWxzZTsK KworCS8qCisJICogSWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlvbnMgb25seSBhIHNpbmdsZSBy ZWxhdGlvbiwgdGhlIHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZlciBwYXNzLCBzbyBzYXZlIHNv bWUgd29yayBieSBleGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFyZ2V0LT50dHlwZSA9PSBQR1BB X1RBUkdFVF9JREVOVElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIElmIGV2ZXJ5 dGhpbmcgaW4gdGhlIGpvaW5yZWwgaXMgYXBwZWFycyBpbiB0aGUgYWR2aWNlIHRhcmdldCwgd2Un cmUKKwkgKiBiZWxvdyB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2FudCB0byBjb250cm9sLgor CSAqCisJICogRm9yIGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9lc24ndCByZXN0cmljdCBo b3cgeCBhbmQgeSBjYW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBUaGlzIGxvb2t1cCBzaG91 bGRuJ3QgcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFueSBzdWNoIGFkdmljZQor CSAqIHNob3VsZCBub3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhlIHRyb3ZlIGluIHRoZSBm aXJzdCBwbGFjZS4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQp OworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7CisJaWYgKGpvaW5faXRt ID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9F UVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFscmVhZHkgcGVybWl0dGVk IGFsbCBhbGxvd2FibGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAqCisJICogSWYgd2UgcmVh Y2ggdGhpcyBwb2ludCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdpdGggdGhpcyBqb2luIGJ1 dAorCSAqIGlzbid0IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0aGVyIHNpZGUsIGFuZCB0 aGVyZSdzIGFsc28gYXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJlc2VudCBpbiB0aGUgam9p biB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAqCisJICogRm9yIGluc3Rh bmNlLCBpbiB0aGUgSEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3b3VsZCByZWFjaCBoZXJl IGlmIHgKKwkgKiB3ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5IG9uIHRoZSBvdGhlciwg YW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxzbyBpbmNsdWRlZCBzb21l IG90aGVyIHJlbGF0aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAqIGFjY2VwdGluZyB0aGlz IGpvaW4gd291bGQgYWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBjb250YWluCisJICogbm9u LWRpc2FibGVkIHBhdGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0aGUgaW5uZXIgc2lkZSBv ZiBhIGhhc2gKKwkgKiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1cCB3aXRoIHNvbWV0aGlu ZyBsaWtlICh4IEpPSU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoK KyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4gcGVybWl0IGEgY2VydGFp biBqb2luPworICoKKyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFuIG9uZSB3aGVyZSB0aGUg ZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBwZXJmb3JtZWQgaXMgbm90 IHZpc2libGUgdG8gUG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMgdGhlCisgKiBjYXNlIG9u bHkgZm9yIGZvcmVpZ24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHopKSBtZWFucyB0aGF0IHgs IHksIGFuZAorICogeiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lkZSwgYnV0IHdlIGtub3cg bm90aGluZyBhYm91dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBtZXRob2RzIHVzZWQgb3Zl ciB0aGVyZS4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfb3BhcXVlX2pvaW5fcGVybWl0c19qb2lu KGludCBvdXRlcl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCSAgcGdwYV9pZGVudGlm aWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJICBi b29sICpyZXN0cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBl bnRyeS0+dGFyZ2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisKKwkvKiBXZSBkZWZpbml0 ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0aGlzIHRyb3ZlIGVudHJ5LiAq LworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJQUw7CisKKwkqcmVzdHJpY3Rf bWV0aG9kID0gZmFsc2U7CisKKwlqb2luX2l0bSA9IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFy Z2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJCSByaWRzLCB0YXJnZXQp OworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwl7CisJCS8qCisJCSAqIFdlIGhh dmUgYW4gZXhhY3QgbWF0Y2gsIGFuZCBzaG91bGQgdGhlcmVmb3JlIGFsbG93IHRoZSBqb2luIGFu ZAorCQkgKiBlbmZvcmNlIHRoZSB1c2Ugb2YgdGhlIHJlbGV2YW50IG9wYXF1ZSBqb2luIG1ldGhv ZC4KKwkJICovCisJCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJCSpyZXN0 cmljdF9tZXRob2QgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpZiAoam9pbl9pdG0g PT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VUIHx8CisJCWpvaW5faXRtID09IFBHUEFfSVRNX1RB UkdFVFNfQVJFX1NVQlNFVCkKKwl7CisJCS8qCisJCSAqIElmIGpvaW5faXRtID09IFBHUEFfSVRN X1RBUkdFVFNfQVJFX1NVQlNFVCwgdGhlbiB0aGUgam9pbiB3ZSBjYXJlCisJCSAqIGFib3V0IGhh cyBhbHJlYWR5IHRha2VuIHBsYWNlIGFuZCBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcHBseS4K KwkJICoKKwkJICogSWYgam9pbl9pdG0gPT0gUEdQQV9JVE1fS0VZU19BUkVfU1VCU0VULCB3ZSdy ZSBzdGlsbCBidWlsZGluZyB1cCB0bworCQkgKiB0aGUgam9pbiB3ZSBjYXJlIGFib3V0IGFuZCBo YXZlIG5vdCBpbnRyb2R1Y2VkIGFueSBleHRyYW5lb3VzCisJCSAqIHJlbGF0aW9ucyBub3QgbmFt ZWQgaW4gdGhlIGFkdmljZS4gTm90ZSB0aGF0IEZvcmVpZ25TY2FuIHBhdGhzIGZvcgorCQkgKiBq b2lucyBhcmUgYnVpbHQgdXAgZnJvbSBGb3JlaWduU2NhbiBwYXRocyBmcm9tIHVuZGVybHlpbmcg am9pbnMgYW5kCisJCSAqIHNjYW5zLCBzbyB3ZSBtdXN0IG5vdCBkaXNhYmxlIHRoaXMgam9pbiB3 aGVuIGNvbnNpZGVyaW5nIGEgc3Vic2V0CisJCSAqIG9mIHRoZSByZWxhdGlvbnMgd2UgdWx0aW1h dGVseSB3YW50LgorCQkgKi8KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBUaGUgYWR2 aWNlIG92ZXJsYXBzIHRoZSBqb2luLCBidXQgYXQgbGVhc3Qgb25lIHJlbGF0aW9uIGlzIHByZXNl bnQgaW4KKwkgKiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLiBX ZSB3YW50IHRvIGRpc2FibGUgc3VjaAorCSAqIHBhdGhzIHNvIHRoYXQgd2UgYWN0dWFsbHkgcHVz aCBkb3duIHRoZSBqb2luIGFzIGludGVuZGVkLgorCSAqLworCXJldHVybiBmYWxzZTsKK30KKwor LyoKKyAqIEFwcGx5IHNjYW4gYWR2aWNlIHRvIGEgUmVsT3B0SW5mby4KKyAqCisgKiBYWFguIEZv ciBiaXRtYXAgaGVhcCBzY2Fucywgd2UncmUganVzdCBpZ25vcmluZyB0aGUgaW5kZXggaW5mb3Jt YXRpb24gZnJvbQorICogdGhlIGFkdmljZS4gVGhhdCdzIG5vdCBjb29sLgorICovCitzdGF0aWMg dm9pZAorcGdwYV9wbGFubmVyX2FwcGx5X3NjYW5fYWR2aWNlKFJlbE9wdEluZm8gKnJlbCwKKwkJ CQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJpZXMsCisJCQkJCQkJICAgQml0bWFw c2V0ICpzY2FuX2luZGV4ZXMsCisJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqcmVsX2VudHJp ZXMsCisJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxfaW5kZXhlcykKK3sKKwlib29sCQlnYXRoZXJf Y29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpnYXRoZXJfcGFydGlhbF9tYXRjaCA9IE5V TEw7CisJQml0bWFwc2V0ICAqZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBOVUxMOworCWludAkJCWkgPSAt MTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICpzY2FuX2VudHJ5ID0gTlVMTDsKKwlpbnQJCQlmbGFnczsK Kwlib29sCQlzY2FuX3R5cGVfY29uZmxpY3QgPSBmYWxzZTsKKwlCaXRtYXBzZXQgICpzY2FuX3R5 cGVfaW5kZXhlcyA9IE5VTEw7CisJQml0bWFwc2V0ICAqc2Nhbl90eXBlX3JlbF9pbmRleGVzID0g TlVMTDsKKwl1aW50NjQJCWdhdGhlcl9tYXNrID0gMDsKKwl1aW50NjQJCXNjYW5fdHlwZSA9IDA7 CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBzY2FuIGFkdmljZS4gKi8KKwl3aGlsZSAoKGkg PSBibXNfbmV4dF9tZW1iZXIoc2Nhbl9pbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJv dmVfZW50cnkgKm15X2VudHJ5ID0gJnNjYW5fZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9zY2Fu X3R5cGUgPSAwOworCisJCS8qIFRyYW5zbGF0ZSBvdXIgYWR2aWNlIHRhZ3MgdG8gYSBzY2FuIHN0 cmF0ZWd5IGFkdmljZSB2YWx1ZS4gKi8KKwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdf QklUTUFQX0hFQVBfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19CSVRNQVBTQ0FOOworCQll bHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikKKwkJCW15 X3NjYW5fdHlwZSA9IFBHU19JTkRFWE9OTFlTQ0FOIHwgUEdTX0NPTlNJREVSX0lOREVYT05MWTsK KwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRFWF9TQ0FOKQorCQkJbXlf c2Nhbl90eXBlID0gUEdTX0lOREVYU0NBTjsKKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQ R1BBX1RBR19TRVFfU0NBTikKKwkJCW15X3NjYW5fdHlwZSA9IFBHU19TRVFTQ0FOOworCQllbHNl IGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOKQorCQkJbXlfc2Nhbl90eXBl ID0gUEdTX1RJRFNDQU47CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyB1bmRlcnN0YW5kYWJsZSBz Y2FuIGFkdmljZSwgaGFuZyBvbiB0byB0aGUgZW50cnksIHRoZQorCQkgKiBpbmZlcnJlZCBzY2Fu IHR5cGUgdHlwZSwgYW5kIHRoZSBpbmRleCBhdCB3aGljaCB3ZSBmb3VuZCBpdC4KKwkJICoKKwkJ ICogQWxzbyBtYWtlIGEgbm90ZSBpZiB3ZSBzZWUgY29uZmxpY3Rpbmcgc2NhbiB0eXBlIGFkdmlj ZS4gTm90ZSB0aGF0CisJCSAqIHdlIHJlZ2FyZCB0d28gaW5kZXggc3BlY2lmaWNhdGlvbnMgYXMg Y29uZmxpY3RpbmcgdW5sZXNzIHRoZXkgbWF0Y2gKKwkJICogZXhhY3RseS4gSW4gdGhlb3J5LCBw ZXJoYXBzIHdlIGNvdWxkIHJlZ2FyZCBJTkRFWF9TQ0FOKGEgYykgYW5kCisJCSAqIElOREVYX1ND QU4oYSBiLmMpIGFzIG5vbi1jb25mbGljdGluZyBpZiBpdCBoYXBwZW5zIHRoYXQgdGhlIG9ubHkK KwkJICogaW5kZXggbmFtZWQgYyBpcyBpbiBzY2hlbWEgYiwgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3 b3J0aCB0aGUgY29kZS4KKwkJICovCisJCWlmIChteV9zY2FuX3R5cGUgIT0gMCkKKwkJeworCQkJ aWYgKHNjYW5fdHlwZSAhPSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJc2Nh bl90eXBlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWlmICghc2Nhbl90eXBlX2NvbmZsaWN0ICYmIHNj YW5fZW50cnkgIT0gTlVMTCAmJgorCQkJCW15X2VudHJ5LT50YXJnZXQtPml0YXJnZXQgIT0gTlVM TCAmJgorCQkJCXNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJIXBn cGFfaW5kZXhfdGFyZ2V0c19lcXVhbChzY2FuX2VudHJ5LT50YXJnZXQtPml0YXJnZXQsCisJCQkJ CQkJCQkJICBteV9lbnRyeS0+dGFyZ2V0LT5pdGFyZ2V0KSkKKwkJCQlzY2FuX3R5cGVfY29uZmxp Y3QgPSB0cnVlOworCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJc2Nhbl90eXBlID0gbXlf c2Nhbl90eXBlOworCQkJc2Nhbl90eXBlX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzY2FuX3R5 cGVfaW5kZXhlcywgaSk7CisJCX0KKwl9CisKKwkvKiBTY3J1dGluaXplIGF2YWlsYWJsZSBnYXRo ZXItcmVsYXRlZCBhbmQgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJaSA9IC0xOworCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxfaW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3Bh X3Ryb3ZlX2VudHJ5ICpteV9lbnRyeSA9ICZyZWxfZW50cmllc1tpXTsKKwkJdWludDY0CQlteV9n YXRoZXJfbWFzayA9IDA7CisJCWJvb2wJCWp1c3Rfb25lX3JlbDsKKworCQlqdXN0X29uZV9yZWwg PSBteV9lbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSCisJCQl8 fCBsaXN0X2xlbmd0aChteV9lbnRyeS0+dGFyZ2V0LT5jaGlsZHJlbikgPT0gMTsKKworCQkvKgor CQkgKiBQQVJUSVRJT05XSVNFIGJlaGF2ZXMgbGlrZSBhIHNjYW4gdHlwZSwgZXhjZXB0IHRoYXQg aWYgdGhlcmUncyBtb3JlCisJCSAqIHRoYW4gb25lIHJlbGF0aW9uIHRhcmdldGVkLCBpdCBoYXMg bm8gZWZmZWN0IGF0IHRoaXMgbGV2ZWwuCisJCSAqLworCQlpZiAobXlfZW50cnktPnRhZyA9PSBQ R1BBX1RBR19QQVJUSVRJT05XSVNFKQorCQl7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJewor CQkJCWNvbnN0IHVpbnQ2NCBteV9zY2FuX3R5cGUgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQ UEVORDsKKworCQkJCWlmIChzY2FuX3R5cGUgIT0gMCAmJiBzY2FuX3R5cGUgIT0gbXlfc2Nhbl90 eXBlKQorCQkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJCXNjYW5fZW50cnkgPSBt eV9lbnRyeTsKKwkJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQkJc2Nhbl90eXBlX3Jl bF9pbmRleGVzID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIoc2Nhbl90eXBlX3JlbF9pbmRleGVzLCBp KTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogR0FUSEVSIGFuZCBHQVRI RVJfTUVSR0UgYXBwbGllZCB0byBhIHNpbmdsZSByZWwgbWVhbiB0aGF0IHdlIHNob3VsZAorCQkg KiB1c2UgdGhlIGNvcnJlc3BvbmRpbmdzIHN0cmF0ZWd5IGhlcmUsIHdoaWxlIGFwcGx5aW5nIGVp dGhlciB0byBtb3JlCisJCSAqIHRoYW4gb25lIHJlbCBtZWFucyB3ZSBzaG91bGQgbm90IHVzZSB0 aG9zZSBzdHJhdGVnaWVzIGhlcmUsIGJ1dAorCQkgKiByYXRoZXIgYXQgdGhlIGxldmVsIG9mIHRo ZSBqb2lucmVsIHRoYXQgY29ycmVzcG9uZHMgdG8gd2hhdCB3YXMKKwkJICogc3BlY2lmaWVkLiBO T19HQVRIRVIgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBzaW5nbGUgcmVscy4KKwkJICoKKwkJICog Tm90ZSB0aGF0IHNldHRpbmcgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaW4gbXlfZ2F0aGVyX21h c2sgaXMKKwkJICogZXF1aXZhbGVudCB0byBhbGxvd2luZyB0aGUgbm9uLXVzZSBvZiBlaXRoZXIg Zm9ybSBvZiBHYXRoZXIgaGVyZS4KKwkJICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFf VEFHX0dBVEhFUiB8fAorCQkJbXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVJfTUVSR0Up CisJCXsKKwkJCWlmICghanVzdF9vbmVfcmVsKQorCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NP TlNJREVSX05PTlBBUlRJQUw7CisJCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFH X0dBVEhFUikKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVI7CisJCQllbHNlCisJCQkJ bXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQl9CisJCWVsc2UgaWYgKG15X2Vu dHJ5LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlBc3NlcnQoanVzdF9vbmVf cmVsKTsKKwkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CisJCX0K KworCQkvKgorCQkgKiBJZiB3ZSBzZXQgbXlfZ2F0aGVyX21hc2sgdXAgYWJvdmUsIHRoZW4gd2Ug KDEpIG1ha2UgYSBub3RlIGlmIHRoZQorCQkgKiBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVt YmVyIHRoZSBtYXNrIHZhbHVlLCBhbmQgKDMpIHJlbWVtYmVyCisJCSAqIHdoZXRoZXIgdGhpcyB3 YXMgYSBmdWxsIG9yIHBhcnRpYWwgbWF0Y2guCisJCSAqLworCQlpZiAobXlfZ2F0aGVyX21hc2sg IT0gMCkKKwkJeworCQkJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgZ2F0aGVyX21hc2sgIT0gbXlf Z2F0aGVyX21hc2spCisJCQkJZ2F0aGVyX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCWdhdGhlcl9tYXNr ID0gbXlfZ2F0aGVyX21hc2s7CisJCQlpZiAoanVzdF9vbmVfcmVsKQorCQkJCWdhdGhlcl9mdWxs X21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJZWxzZQor CQkJCWdhdGhlcl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3BhcnRpYWxf bWF0Y2gsIGkpOworCQl9CisJfQorCisJLyogRW5mb3JjZSBjaG9pY2Ugb2YgaW5kZXguICovCisJ aWYgKHNjYW5fZW50cnkgIT0gTlVMTCAmJiAhc2Nhbl90eXBlX2NvbmZsaWN0ICYmCisJCShzY2Fu X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkgc2Nhbl9lbnRyeS0+dGFn ID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikpCisJeworCQlwZ3BhX2luZGV4X3RhcmdldCAq aXRhcmdldCA9IHNjYW5fZW50cnktPnRhcmdldC0+aXRhcmdldDsKKwkJSW5kZXhPcHRJbmZvICpt YXRjaGVkX2luZGV4ID0gTlVMTDsKKworCQlBc3NlcnQoaXRhcmdldC0+aXR5cGUgPT0gUEdQQV9J TkRFWF9OQU1FKTsKKworCQlmb3JlYWNoX25vZGUoSW5kZXhPcHRJbmZvLCBpbmRleCwgcmVsLT5p bmRleGxpc3QpCisJCXsKKwkJCWNoYXIJICAgKnJlbG5hbWUgPSBnZXRfcmVsX25hbWUoaW5kZXgt PmluZGV4b2lkKTsKKwkJCU9pZAkJCW5zcG9pZCA9IGdldF9yZWxfbmFtZXNwYWNlKGluZGV4LT5p bmRleG9pZCk7CisJCQljaGFyCSAgICpyZWxuYW1lc3BhY2UgPSBnZXRfbmFtZXNwYWNlX25hbWUo bnNwb2lkKTsKKworCQkJaWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1lLCByZWxuYW1lKSA9PSAw ICYmCisJCQkJKGl0YXJnZXQtPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkJIHN0cmNtcChp dGFyZ2V0LT5pbmRuYW1lc3BhY2UsIHJlbG5hbWVzcGFjZSkgPT0gMCkpCisJCQl7CisJCQkJbWF0 Y2hlZF9pbmRleCA9IGluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKG1hdGNo ZWRfaW5kZXggPT0gTlVMTCkKKwkJeworCQkJLyogRG9uJ3QgZm9yY2UgdGhlIHNjYW4gdHlwZSBp ZiB0aGUgaW5kZXggZG9lc24ndCBleGlzdC4gKi8KKwkJCXNjYW5fdHlwZSA9IDA7CisKKwkJCS8q IE1hcmsgYWR2aWNlIGFzIGluYXBwbGljYWJsZS4gKi8KKwkJCXBncGFfdHJvdmVfc2V0X2ZsYWdz KHNjYW5fZW50cmllcywgc2Nhbl90eXBlX2luZGV4ZXMsCisJCQkJCQkJCSBQR1BBX1RFX0lOQVBQ TElDQUJMRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBSZXRhaW4gdGhpcyBpbmRleCBhbmQg ZGlzY2FyZCB0aGUgcmVzdC4gKi8KKwkJCXJlbC0+aW5kZXhsaXN0ID0gbGlzdF9tYWtlMShtYXRj aGVkX2luZGV4KTsKKwkJfQorCX0KKworCS8qCisJICogTWFyayBhbGwgdGhlIHNjYW4gbWV0aG9k IGVudHJpZXMgYXMgZnVsbHkgbWF0Y2hlZDsgYW5kIGlmIHRoZXkgc3BlY2lmeQorCSAqIGRpZmZl cmVudCB0aGluZ3MsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJZmxhZ3Mg PSBQR1BBX1RFX01BVENIX1BBUlRJQUwgfCBQR1BBX1RFX01BVENIX0ZVTEw7CisJaWYgKHNjYW5f dHlwZV9jb25mbGljdCkKKwkJZmxhZ3MgfD0gUEdQQV9URV9DT05GTElDVElORzsKKwlwZ3BhX3Ry b3ZlX3NldF9mbGFncyhzY2FuX2VudHJpZXMsIHNjYW5fdHlwZV9pbmRleGVzLCBmbGFncyk7CisJ cGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIHNjYW5fdHlwZV9yZWxfaW5kZXhlcywg ZmxhZ3MpOworCisJLyoKKwkgKiBNYXJrIGV2ZXJ5IEdhdGhlci1yZWxhdGVkIHBpZWNlIG9mIGFk dmljZSBhcyBwYXJ0aWFsbHkgbWF0Y2hlZC4gTWFyaworCSAqIHRoZSBvbmVzIHRoYXQgaW5jbHVk ZWQgdGhpcyByZWxhdGlvbiBhcyBhIHRhcmdldCBieSBpdHNlbGYgYXMgZnVsbHkKKwkgKiBtYXRj aGVkLiBJZiB0aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGljdGlu Zy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVyX2Nv bmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0 X2ZsYWdzKHJlbF9lbnRyaWVzLCBnYXRoZXJfcGFydGlhbF9tYXRjaCwgZmxhZ3MpOworCWZsYWdz IHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50cmll cywgZ2F0aGVyX2Z1bGxfbWF0Y2gsIGZsYWdzKTsKKworCS8qIElmIHRoZXJlIGlzIGEgbm9uLWNv bmZsaWN0aW5nIHNjYW4gc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAoc2Nhbl90 eXBlICE9IDAgJiYgIXNjYW5fdHlwZV9jb25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0K KwkJCX4oUEdTX1NDQU5fQU5ZIHwgUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfAorCQkJ ICBQR1NfQ09OU0lERVJfSU5ERVhPTkxZKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBzY2FuX3R5cGU7 CisJfQorCisJLyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3RpbmcgZ2F0aGVyIHNwZWNpZmlj YXRpb24sIGVuZm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9tYXNrICE9IDAgJiYgIWdhdGhlcl9j b25mbGljdCkKKwl7CisJCXJlbC0+cGdzX21hc2sgJj0KKwkJCX4oUEdTX0dBVEhFUiB8IFBHU19H QVRIRVJfTUVSR0UgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCk7CisJCXJlbC0+cGdzX21hc2sg fD0gZ2F0aGVyX21hc2s7CisJfQorfQorCisvKgorICogQWRkIGZlZWRiYWNrIGVudHJpZXMgdG8g Zm9yIG9uZSB0cm92ZSBzbGljZSB0byB0aGUgcHJvdmlkZWQgbGlzdCBhbmQKKyAqIHJldHVybiB0 aGUgcmVzdWx0aW5nIGxpc3QuCisgKgorICogRmVlZGJhY2sgZW50cmllcyBhcmUgZ2VuZXJhdGVk IGZyb20gdGhlIHRyb3ZlIGVudHJ5J3MgZmxhZ3MuIEl0J3MgYXNzdW1lZAorICogdGhhdCB0aGUg Y2FsbGVyIGhhcyBhbHJlYWR5IHNldCBhbGwgcmVsZXZhbnQgZmxhZ3Mgd2l0aCB0aGUgZXhjZXB0 aW9uIG9mCisgKiBQR1BBX1RFX0ZBSUxFRC4gV2Ugc2V0IHRoYXQgZmxhZyBoZXJlIGlmIGFwcHJv cHJpYXRlLgorICovCitzdGF0aWMgTGlzdCAqCitwZ3BhX3BsYW5uZXJfYXBwZW5kX2ZlZWRiYWNr KExpc3QgKmxpc3QsIHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJCSBwZ3BhX3Ryb3ZlX2xvb2t1 cF90eXBlIHR5cGUsCisJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJ CQkJCQkJIHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyKQoreworCXBncGFfdHJvdmVf ZW50cnkgKmVudHJpZXM7CisJaW50CQkJbmVudHJpZXM7CisJU3RyaW5nSW5mb0RhdGEgYnVmOwor CisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJcGdwYV90cm92ZV9sb29rdXBfYWxsKHRyb3ZlLCB0 eXBlLCAmZW50cmllcywgJm5lbnRyaWVzKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5lbnRyaWVz OyArK2kpCisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZlbnRyaWVzW2ldOworCQlE ZWZFbGVtICAgICppdGVtOworCisJCS8qCisJCSAqIElmIHRoaXMgZW50cnkgd2FzIGZ1bGx5IG1h dGNoZWQsIGNoZWNrIHdoZXRoZXIgZ2VuZXJhdGluZyBhZHZpY2UKKwkJICogZnJvbSB0aGlzIHBs YW4gd291bGQgcHJvZHVjZSBzdWNoIGFuIGVudHJ5LiBJZiBub3QsIGxhYmVsIHRoZSBlbnRyeQor CQkgKiBhcyBmYWlsZWQuCisJCSAqLworCQlpZiAoKGVudHJ5LT5mbGFncyAmIFBHUEFfVEVfTUFU Q0hfRlVMTCkgIT0gMCAmJgorCQkJIXBncGFfd2Fsa2VyX3dvdWxkX2FkdmlzZSh3YWxrZXIsIHJ0 X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJICBlbnRyeS0+dGFnLCBlbnRyeS0+dGFyZ2V0KSkKKwkJ CWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX0ZBSUxFRDsKKworCQlpdGVtID0gbWFrZURlZkVsZW0o cGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KGVudHJ5KSwKKwkJCQkJCSAgIChOb2RlICopIG1ha2VJ bnRlZ2VyKGVudHJ5LT5mbGFncyksIC0xKTsKKwkJbGlzdCA9IGxhcHBlbmQobGlzdCwgaXRlbSk7 CisJfQorCisJcmV0dXJuIGxpc3Q7Cit9CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisK Ky8qCisgKiBGYXN0IGhhc2ggZnVuY3Rpb24gZm9yIGEga2V5IGNvbnNpc3Rpbmcgb2YgYW4gUlRJ IGFuZCBwbGFuIG5hbWUuCisgKi8KK3N0YXRpYyB1aW50MzIKK3BncGFfcmlfY2hlY2tlcl9oYXNo X2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGtleSkKK3sKKwlmYXN0aGFzaF9zdGF0ZSBoczsKKwlp bnQJCQlzcF9sZW47CisKKwlmYXN0aGFzaF9pbml0KCZocywgMCk7CisKKwlocy5hY2N1bSA9IGtl eS5ydGk7CisJZmFzdGhhc2hfY29tYmluZSgmaHMpOworCisJLyogcGxhbl9uYW1lIGNhbiBiZSBO VUxMICovCisJaWYgKGtleS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJc3BfbGVuID0gMDsKKwllbHNl CisJCXNwX2xlbiA9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBrZXkucGxhbl9uYW1lKTsK KworCS8qIGhhc2hmbl91bnN0YWJsZS5oIHJlY29tbWVuZHMgdXNpbmcgc3RyaW5nIGxlbmd0aCBh cyB0d2VhayAqLworCXJldHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKwor I2VuZGlmCisKKy8qCisgKiBTYXZlIHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVyIGZvciBvbmUg cmVsYXRpb24gZm9yIGZ1dHVyZSBjcm9zcy1jaGVja2luZy4KKyAqLworc3RhdGljIHZvaWQKK3Bn cGFfcmlfY2hlY2tlcl9zYXZlKHBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzLCBQbGFubmVySW5mbyAq cm9vdCwKKwkJCQkJIFJlbE9wdEluZm8gKnJlbCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCisJcGdwYV9yaV9jaGVja2VyX2tleSBrZXk7CisJcGdwYV9yaV9jaGVja2VyICpjaGVjazsK KwlwZ3BhX2lkZW50aWZpZXIgcmlkOworCWNvbnN0IGNoYXIgKnJpZF9zdHJpbmc7CisJYm9vbAkJ Zm91bmQ7CisKKwlrZXkucnRpID0gYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsLT5yZWxpZHMpOwor CWtleS5wbGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7CisJcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJfYnlfcnRpKHJvb3QsIGtleS5ydGksICZyaWQpOworCXJpZF9zdHJpbmcgPSBwZ3BhX2lkZW50 aWZpZXJfc3RyaW5nKCZyaWQpOworCWNoZWNrID0gcGdwYV9yaV9jaGVja19pbnNlcnQocHBzLT5y aV9jaGVja19oYXNoLCBrZXksICZmb3VuZCk7CisJQXNzZXJ0KCFmb3VuZCB8fCBzdHJjbXAoY2hl Y2stPnJpZF9zdHJpbmcsIHJpZF9zdHJpbmcpID09IDApOworCWNoZWNrLT5yaWRfc3RyaW5nID0g cmlkX3N0cmluZzsKKyNlbmRpZgorfQorCisvKgorICogVmFsaWRhdGUgdGhhdCB0aGUgcmFuZ2Ug dGFibGUgaWRlbnRpZmllcnMgd2Ugd2VyZSBhYmxlIHRvIGdlbmVyYXRlIGR1cmluZworICogcGxh bm5pbmcgbWF0Y2ggdGhlIG9uZXMgd2UgZ2VuZXJhdGVkIGZyb20gdGhlIGZpbmFsIHBsYW4uCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX3JpX2NoZWNrZXJfdmFsaWRhdGUocGdwYV9wbGFubmVyX3N0 YXRlICpwcHMsIFBsYW5uZWRTdG10ICpwc3RtdCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNL SU5HCisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVyczsKKwlwZ3BhX3JpX2NoZWNrX2l0 ZXJhdG9yIGl0OworCXBncGFfcmlfY2hlY2tlciAqY2hlY2s7CisKKwkvKiBDcmVhdGUgaWRlbnRp ZmllcnMgZnJvbSB0aGUgcGxhbm5lZCBzdGF0ZW1lbnQuICovCisJcnRfaWRlbnRpZmllcnMgPSBw Z3BhX2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKworCS8qIEl0 ZXJhdGUgb3ZlciBpZGVudGlmaWVycyBjcmVhdGVkIGR1cmluZyBwbGFubmluZywgc28gd2UgY2Fu IGNvbXBhcmUuICovCisJcGdwYV9yaV9jaGVja19zdGFydF9pdGVyYXRlKHBwcy0+cmlfY2hlY2tf aGFzaCwgJml0KTsKKwl3aGlsZSAoKGNoZWNrID0gcGdwYV9yaV9jaGVja19pdGVyYXRlKHBwcy0+ cmlfY2hlY2tfaGFzaCwgJml0KSkgIT0gTlVMTCkKKwl7CisJCWludAkJCXJ0b2Zmc2V0ID0gMDsK KwkJY29uc3QgY2hhciAqcmlkX3N0cmluZzsKKwkJSW5kZXgJCWZsYXRfcnRpOworCisJCS8qCisJ CSAqIElmIHRoZXJlJ3Mgbm8gcGxhbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGVudHJ5LCB0 aGVuIHRoZQorCQkgKiBydG9mZnNldCBpcyAwLiBPdGhlcndpc2UsIHdlIGNhbiBzZWFyY2ggdGhl IFN1YlBsYW5SVEluZm8gbGlzdCB0bworCQkgKiBmaW5kIHRoZSBydG9mZnNldC4KKwkJICovCisJ CWlmIChjaGVjay0+a2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQl7CisJCQlmb3JlYWNoX25vZGUo U3ViUGxhblJUSW5mbywgcnRpbmZvLCBwc3RtdC0+c3VicnRpbmZvcykKKwkJCXsKKwkJCQkvKgor CQkJCSAqIElmIHJ0aW5mby0+ZHVtbXkgaXMgc2V0LCB0aGVuIHRoZSBzdWJxdWVyeSdzIHJhbmdl IHRhYmxlCisJCQkJICogd2lsbCBvbmx5IGhhdmUgYmVlbiBwYXJ0aWFsbHkgY29waWVkIHRvIHRo ZSBmaW5hbCByYW5nZQorCQkJCSAqIHRhYmxlLiBTcGVjaWZpY2FsbHksIG9ubHkgUlRFX1JFTEFU SU9OIGVudHJpZXMgYW5kCisJCQkJICogUlRFX1NVQlFVRVJZIGVudHJpZXMgdGhhdCB3ZXJlIG9u Y2UgUlRFX1JFTEFUSU9OIGVudHJpZXMKKwkJCQkgKiB3aWxsIGJlIGNvcGllZCwgYXMgcGVyIGFk ZF9ydGVzX3RvX2ZsYXRfcnRhYmxlLiBUaGVyZWZvcmUsCisJCQkJICogdGhlcmUncyBubyBmaXhl ZCBydG9mZnNldCB0aGF0IHdlIGNhbiBhcHBseSB0byB0aGUgUlRJcworCQkJCSAqIHVzZWQgZHVy aW5nIHBsYW5uaW5nIHRvIGxvY2F0ZSB0aGUgY29ycmVzcG9uZGluZyByZWxhdGlvbnMKKwkJCQkg KiBpbiB0aGUgZmluYWwgcnRhYmxlLgorCQkJCSAqCisJCQkJICogV2l0aCBtb3JlIGNvbXBsZXgg bG9naWMsIHdlIGNvdWxkIHdvcmsgYXJvdW5kIHRoYXQgcHJvYmxlbQorCQkJCSAqIGJ5IHJlbWVt YmVyaW5nIHRoZSB3aG9sZSBjb250ZW50cyBvZiB0aGUgc3VicXVlcnkncyBydGFibGUKKwkJCQkg KiBkdXJpbmcgcGxhbm5pbmcsIGRldGVybWluaW5nIHdoaWNoIG9mIHRob3NlIHdvdWxkIGhhdmUg YmVlbgorCQkJCSAqIGNvcGllZCB0byB0aGUgZmluYWwgcnRhYmxlLCBhbmQgbWF0Y2hpbmcgdGhl bSB1cC4gQnV0IGl0CisJCQkJICogZG9lc24ndCBzZWVtIGxpa2UgYSB3b3J0aHdoaWxlIGVuZGVh dm9yIGZvciByaWdodCBub3csCisJCQkJICogYmVjYXVzZSBSVElzIGZyb20gc3VjaCBzdWJxdWVy aWVzIHdvbid0IGFwcGVhciBpbiB0aGUgcGxhbgorCQkJCSAqIHRyZWUgaXRzZWxmLCBqdXN0IGlu IHRoZSByYW5nZSB0YWJsZS4gSGVuY2UsIHdlIGNhbiBuZWl0aGVyCisJCQkJICogZ2VuZXJhdGUg bm9yIGFjY2VwdCBhZHZpY2UgZm9yIHRoZW0uCisJCQkJICovCisJCQkJaWYgKHN0cmNtcChjaGVj ay0+a2V5LnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDAKKwkJCQkJJiYgIXJ0aW5m by0+ZHVtbXkpCisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJ CUFzc2VydChydG9mZnNldCA+IDApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCS8q CisJCQkgKiBJdCdzIG5vdCBhbiBlcnJvciBpZiB3ZSBkb24ndCBmaW5kIHRoZSBwbGFuIG5hbWU6 IHRoYXQganVzdAorCQkJICogbWVhbnMgdGhhdCB3ZSBwbGFubmVkIGEgc3VicGxhbiBieSB0aGlz IG5hbWUgYnV0IGl0IGVuZGVkIHVwCisJCQkgKiBiZWluZyBhIGR1bW15IHN1YnBsYW4gYW5kIHNv IHdhc24ndCBpbmNsdWRlZCBpbiB0aGUgZmluYWwgcGxhbgorCQkJICogdHJlZS4KKwkJCSAqLwor CQkJaWYgKHJ0b2Zmc2V0ID09IDApCisJCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBj aGVjay0+a2V5LnJ0aSBpcyB0aGUgUlRJIHRoYXQgd2Ugc2F3IHByaW9yIHRvIHJhbmdlLXRhYmxl CisJCSAqIGZsYXR0ZW5pbmcsIHNvIHdlIG11c3QgYWRkIHRoZSBhcHByb3ByaWF0ZSBSVCBvZmZz ZXQgdG8gZ2V0IHRoZQorCQkgKiBmaW5hbCBSVEkuCisJCSAqLworCQlmbGF0X3J0aSA9IGNoZWNr LT5rZXkucnRpICsgcnRvZmZzZXQ7CisJCUFzc2VydChmbGF0X3J0aSA8PSBsaXN0X2xlbmd0aChw c3RtdC0+cnRhYmxlKSk7CisKKwkJLyogQXNzZXJ0IHRoYXQgdGhlIHN0cmluZyB3ZSBjb21wdXRl IG5vdyBtYXRjaGVzIHRoZSBwcmV2aW91cyBvbmUuICovCisJCXJpZF9zdHJpbmcgPSBwZ3BhX2lk ZW50aWZpZXJfc3RyaW5nKCZydF9pZGVudGlmaWVyc1tmbGF0X3J0aSAtIDFdKTsKKwkJQXNzZXJ0 KHN0cmNtcChyaWRfc3RyaW5nLCBjaGVjay0+cmlkX3N0cmluZykgPT0gMCk7CisJfQorI2VuZGlm Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uN2Q0MGI5MTBiMDAKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfcGxhbm5lci5oCisgKgkgIHBsYW5uZXIgaG9va3MK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVy LmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1BMQU5ORVJfSAor I2RlZmluZSBQR1BBX1BMQU5ORVJfSAorCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5uZXJfaW5zdGFs bF9ob29rcyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfc2Nhbi5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDE1NmY1MjA5YTAKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCkBAIC0wLDAgKzEs MzAzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3NjYW4uYworICoJICBhbmFs eXNpcyBvZiBzY2FucyBpbiBQbGFuIHRyZWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIw MjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdwYV9zY2FuLmgiCisjaW5jbHVk ZSAicGdwYV93YWxrZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKKyNpbmNs dWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisKK3N0YXRpYyBwZ3BhX3NjYW4gKnBncGFfbWFrZV9z Y2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJ CQkgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxp ZHMsCisJCQkJCQkJCSBib29sIG5lZWRzX25vX2dhdGhlcik7CisKKworc3RhdGljIFJURUtpbmQg dW5pcXVlX25vbmpvaW5fcnRla2luZChCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKTsK KworLyoKKyAqIEJ1aWxkIGEgcGdwYV9zY2FuIG9iamVjdCBmb3IgYSBQbGFuIG5vZGUgYW5kIHVw ZGF0ZSB0aGUgcGxhbiB3YWxrZXIKKyAqIGNvbnRleHQgYXMgYXBwb3ByaWF0ZS4gIElmIHRoaXMg aXMgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIHNjYW4sIGFsc28KKyAqIGJ1aWxkIHBncGFfc2Nh biBmb3IgYW55IHNjYW5zIHRoYXQgd2VyZSBjb25zb2xpZGF0ZWQgaW50byB0aGlzIG9uZSBieQor ICogQXBwZW5kL01lcmdlQXBwZW5kIHB1bGwtdXAuCisgKgorICogSWYgdGhlcmUgaXMgYXQgbGVh c3Qgb25lIEVsaWRlZE5vZGUgZm9yIHRoaXMgcGxhbiBub2RlLCBwYXNzIHRoZSB1cHBlcm1vc3QK KyAqIG9uZSBhcyBlbGlkZWRfbm9kZSwgZWxzZSBwYXNzIE5VTEwuCisgKgorICogU2V0IHRoZSAn YmVuZWF0aF9hbnlfZ2F0aGVyJyBub2RlIGlmIHdlIGFyZSB1bmRlcm5lYXRoIGEgR2F0aGVyIG9y CisgKiBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqCisgKiBTZXQgdGhlICd3aXRoaW5fam9pbl9wcm9i bGVtJyBmbGFnIGlmIHdlJ3JlIGluc2lkZSBvZiBhIGpvaW4gcHJvYmxlbSBhbmQKKyAqIG5vdCBv dGhlcndpc2UuCisgKi8KK3BncGFfc2NhbiAqCitwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dh bGtlcl9jb250ZXh0ICp3YWxrZXIsIFBsYW4gKnBsYW4sCisJCQkJRWxpZGVkTm9kZSAqZWxpZGVk X25vZGUsCisJCQkJYm9vbCBiZW5lYXRoX2FueV9nYXRoZXIsIGJvb2wgd2l0aGluX2pvaW5fcHJv YmxlbSkKK3sKKwlwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kgPSBQR1BBX1NDQU5fT1JESU5B Ulk7CisJQml0bWFwc2V0ICAqcmVsaWRzID0gTlVMTDsKKwlpbnQJCQlydGkgPSAtMTsKKwlib29s CQluZWVkc19ub19nYXRoZXIgPSAhYmVuZWF0aF9hbnlfZ2F0aGVyOworCUxpc3QJICAgKmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzID0gTklMOworCisJaWYgKGVsaWRlZF9ub2RlICE9IE5VTEwpCisJ eworCQlOb2RlVGFnCQllbGlkZWRfdHlwZSA9IGVsaWRlZF9ub2RlLT5lbGlkZWRfdHlwZTsKKwor CQkvKgorCQkgKiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIGFuIEFwcGVuZCBvciBNZXJn ZUFwcGVuZCBub2RlIHRoYXQgaGFkCisJCSAqIG9ubHkgb25lIHN1cnZpdmluZyBjaGlsZCwgdGhl biB0aGlzIGlzIGEgcGFydGl0aW9ud2lzZSAic2NhbiIgLS0KKwkJICogd2hpY2ggbWF5IHJlYWxs eSBiZSBhIHBhcnRpdGlvbndpc2Ugam9pbiwgYnV0IHRoZXJlJ3Mgbm8gbmVlZCB0bworCQkgKiBk aXN0aW5ndWlzaC4KKwkJICoKKwkJICogSWYgaXQncyBhIHRyaXZpYWwgU3VicXVlcnlTY2FuIHRo YXQgd2FzIGVsaWRlZCwgdGhlbiB0aGlzIGlzIGFuCisJCSAqICJvcmRpbmFyeSIgc2NhbiBpLmUu IG9uZSBmb3Igd2hpY2ggd2UgbmVlZCB0byBnZW5lcmF0ZSBhZHZpY2UKKwkJICogYmVjYXVzZSB0 aGUgcGxhbm5lciBoYXMgbm90IG1hZGUgYW55IG1lYW5pbmdmdWwgY2hvaWNlLgorCQkgKi8KKwkJ cmVsaWRzID0gZWxpZGVkX25vZGUtPnJlbGlkczsKKwkJaWYgKGVsaWRlZF90eXBlID09IFRfQXBw ZW5kIHx8IGVsaWRlZF90eXBlID09IFRfTWVyZ2VBcHBlbmQpCisJCQlzdHJhdGVneSA9IFBHUEFf U0NBTl9QQVJUSVRJT05XSVNFOworCQllbHNlCisJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJ TkFSWTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGFuIGVsaWRlZCBBcHBlbmQgb3IgTWVyZ2VB cHBlbmQgbm9kZSwgd2UgZG9uJ3QgbmVlZCB0bworCQkgKiBlbWl0IE5PX0dBVEhFUigpIGJlY2F1 c2Ugd2UnbGwgYWxzbyBlbWl0IGl0IGZvciB0aGUgdW5kZXJseWluZworCQkgKiBzY2FuLCB3aGlj aCBpcyBnb29kIGVub3VnaC4KKwkJICoKKwkJICogSWYgaXQncyBhbiBlbGlkZWQgU3VicXVlcnlT Y2FuLCB0aGUgc2FtZSBhcmd1bWVudCBpcyBsaWtlbHkgdG8KKwkJICogYXBwbHksIGJlY2F1c2Ug dGhlIHN1YnF1ZXJ5IHByb2JhYmx5IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gdGFibGVzLAorCQkg KiBhbmQgaWYgaXQgZG9lc24ndCwgdGhlbiBwbGFubmVyIGlzbid0IGxpa2VseSB0byB3YW50IHRv IGRvIGl0IGluCisJCSAqIHBhcmFsbGVsIGFueXdheS4gQnV0IGFsc28sIHdlIGNhbid0IGltcGxl bWVudCBOT19HQVRIRVIoKSBhZHZpY2UKKwkJICogZm9yIGEgbm9uLXJlbGF0aW9uIFJURUtpbmQs IGJlY2F1c2UgZ2V0X3JlbGF0aW9uX2luZm8oKSBpc24ndAorCQkgKiBjYWxsZWQgaW4gc3VjaCBj YXNlcy4gVGhhdCBzaG91bGQgcHJvYmFibHkgYmUgZml4ZWQgYXQgc29tZSBwb2ludCwKKwkJICog YnV0IHVudGlsIHRoZW4gd2Ugc2hvdWxkbid0IGVtaXQgaXQuCisJCSAqLworCQluZWVkc19ub19n YXRoZXIgPSBmYWxzZTsKKworCQkvKiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1dCBhZHZp Y2UgbmV2ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291dF9q b2luX3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCWVsc2UgaWYg KChydGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwl7CisJCVJhbmdlVGJsRW50cnkg KnJ0ZTsKKworCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKworCQlzd2l0Y2gg KG5vZGVUYWcocGxhbikpCisJCXsKKwkJCWNhc2UgVF9TZXFTY2FuOgorCQkJCXN0cmF0ZWd5ID0g UEdQQV9TQ0FOX1NFUTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoKKwkJ CQlzdHJhdGVneSA9IFBHUEFfU0NBTl9CSVRNQVBfSEVBUDsKKwkJCQlicmVhazsKKwkJCWNhc2Ug VF9JbmRleFNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fSU5ERVg7CisJCQkJYnJlYWs7 CisJCQljYXNlIFRfSW5kZXhPbmx5U2NhbjoKKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9JTkRF WF9PTkxZOworCQkJCWJyZWFrOworCQkJY2FzZSBUX1RpZFNjYW46CisJCQljYXNlIFRfVGlkUmFu Z2VTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1RJRDsKKwkJCQlicmVhazsKKwkJCWRl ZmF1bHQ6CisKKwkJCQkvKgorCQkJCSAqIFRoaXMgY2FzZSBpbmNsdWRlcyBhIEZvcmVpZ25TY2Fu IHRhcmdldGluZyBhIHNpbmdsZQorCQkJCSAqIHJlbGF0aW9uOyBubyBvdGhlciBzdHJhdGVneSBp cyBwb3NzaWJsZSBpbiB0aGF0IGNhc2UsIGJ1dAorCQkJCSAqIHNlZSBiZWxvdywgd2hlcmUgdGhp bmdzIGFyZSBkaWZmZXJlbnQgaW4gbXVsdGktcmVsYXRpb24KKwkJCQkgKiBjYXNlcy4KKwkJCQkg Ki8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKworCQkJCS8qCisJCQkJICog V2UgY2FuJ3QgaGFuZGxlIE5PX0dBVEhFUigpIGZvciBub24tcmVsYXRpb24gUlRFcyBiZWNhdXNl CisJCQkJICogZ2V0X3JlbGF0aW9uX2luZm8gd29uJ3QgYmUgY2FsbGVkLgorCQkJCSAqLworCQkJ CXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJCQlpZiAocnRl LT5ydGVraW5kICE9IFJURV9SRUxBVElPTikKKwkJCQkJbmVlZHNfbm9fZ2F0aGVyID0gZmFsc2U7 CisKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNlIGlmICgocmVsaWRzID0gcGdwYV9yZWxpZHMo cGxhbikpICE9IE5VTEwpCisJeworCQlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJCXsKKwkJCWNh c2UgVF9Gb3JlaWduU2NhbjoKKworCQkJCS8qCisJCQkJICogSWYgbXVsdGlwbGUgcmVsYXRpb25z IGFyZSBiZWluZyB0YXJnZXRlZCBieSBhIHNpbmdsZQorCQkJCSAqIGZvcmVpZ24gc2NhbiwgdGhl biB0aGUgZm9yZWlnbiBqb2luIGhhcyBiZWVuIHB1c2hlZCB0byB0aGUKKwkJCQkgKiByZW1vdGUg c2lkZSwgYW5kIHdlIHdhbnQgdGhhdCB0byBiZSByZWZsZWN0ZWQgaW4gdGhlCisJCQkJICogZ2Vu ZXJhdGVkIGFkdmljZS4KKwkJCQkgKi8KKwkJCQlzdHJhdGVneSA9IFBHUEFfU0NBTl9GT1JFSUdO OworCQkJCWJyZWFrOworCQkJY2FzZSBUX0FwcGVuZDoKKworCQkJCS8qCisJCQkJICogQXBwZW5k IG5vZGVzIGNhbiByZXByZXNlbnQgcGFydGl0aW9ud2lzZSBzY2FucyBvZiBhIGEKKwkJCQkgKiBy ZWxhdGlvbiwgYnV0IHdoZW4gdGhleSBpbXBsZW1lbnQgYSBzZXQgb3BlcmF0aW9uLCB0aGV5IGFy ZQorCQkJCSAqIGp1c3Qgb3JkaW5hcnkgc2NhbnMuCisJCQkJICovCisJCQkJaWYgKHVuaXF1ZV9u b25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUpCisJCQkJCT09IFJU RV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElUSU9OV0lTRTsKKwkJ CQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyogTk9f R0FUSEVSKCkgc2hvdWxkIGJlIGVtaXR0ZWQgZm9yIHVuZGVybHlpbmcgcmVscyBvbmx5LiAqLwor CQkJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJCQkJLyogQmUgc3VyZSB0byBhY2NvdW50 IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQor CQkJCQkoKEFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJl YWs7CisJCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQkJLyogU29tZSBsb2dpYyBoZXJlIGFzIGZv ciBBcHBlbmQsIGFib3ZlLiAqLworCQkJCWlmICh1bmlxdWVfbm9uam9pbl9ydGVraW5kKHJlbGlk cywgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKQorCQkJCQk9PSBSVEVfUkVMQVRJT04pCisJCQkJCXN0 cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCQkJZWxzZQorCQkJCQlzdHJhdGVn eSA9IFBHUEFfU0NBTl9PUkRJTkFSWTsKKworCQkJCS8qIE5PX0dBVEhFUigpIHNob3VsZCBiZSBl bWl0dGVkIGZvciB1bmRlcmx5aW5nIHJlbHMgb25seS4gKi8KKwkJCQluZWVkc19ub19nYXRoZXIg PSBmYWxzZTsKKworCQkJCS8qIEJlIHN1cmUgdG8gYWNjb3VudCBmb3IgcHVsbGVkLXVwIHNjYW5z LiAqLworCQkJCWNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQkJKChNZXJnZUFwcGVuZCAq KSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0 OgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCQkJLyoKKwkJCQkgKiBX ZSBjYW4ndCBoYW5kbGUgTk9fR0FUSEVSKCkgZm9yIHNpbmdsZSBub24tcmVsYXRpb24gUlRFcwor CQkJCSAqIGJlY2F1c2UgZ2V0X3JlbGF0aW9uX2luZm8gd29uJ3QgYmUgY2FsbGVkLgorCQkJCSAq LworCQkJCWlmIChibXNfbWVtYmVyc2hpcChyZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJCQkJ eworCQkJCQlSYW5nZVRibEVudHJ5ICpydGU7CisKKwkJCQkJcnRlID0gcnRfZmV0Y2goYm1zX3Np bmdsZXRvbl9tZW1iZXIocmVsaWRzKSwKKwkJCQkJCQkJICAgd2Fsa2VyLT5wc3RtdC0+cnRhYmxl KTsKKwkJCQkJaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQkJCQluZWVkc19u b19nYXRoZXIgPSBmYWxzZTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJfQorCisKKwkJLyogSm9p biBSVElzIGNhbiBiZSBwcmVzZW50LCBidXQgYWR2aWNlIG5ldmVyIHJlZmVycyB0byB0aGVtLiAq LworCQlyZWxpZHMgPSBwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMocmVsaWRzLCB3YWxrZXIt PnBzdG10LT5ydGFibGUpOworCX0KKworCS8qCisJICogSWYgdGhpcyBpcyBhbiBBcHBlbmQgb3Ig TWVyZ2VBcHBlbmQgbm9kZSBpbnRvIHdoaWNoIHN1Ym9yZGluYXRlIEFwcGVuZAorCSAqIG9yIE1l cmdlQXBwZW5kIHBhdGhzIHdlcmUgbWVyZ2VkLCBlYWNoIG9mIHRob3NlIG1lcmdlZCBwYXRocyBp cworCSAqIGVmZmVjdGl2ZWx5IGFub3RoZXIgc2NhbiBmb3Igd2hpY2ggd2UgbmVlZCB0byBhY2Nv dW50LgorCSAqLworCWZvcmVhY2hfbm9kZShCaXRtYXBzZXQsIGNoaWxkX3JlbGlkcywgY2hpbGRf YXBwZW5kX3JlbGlkX3NldHMpCisJeworCQlCaXRtYXBzZXQgICpjaGlsZF9ub25qb2luX3JlbGlk czsKKworCQljaGlsZF9ub25qb2luX3JlbGlkcyA9CisJCQlwZ3BhX2ZpbHRlcl9vdXRfam9pbl9y ZWxpZHMoY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCXdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJ CSh2b2lkKSBwZ3BhX21ha2Vfc2Nhbih3YWxrZXIsIHBsYW4sIHN0cmF0ZWd5LAorCQkJCQkJCSAg Y2hpbGRfbm9uam9pbl9yZWxpZHMsIGZhbHNlKTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgcGxh biBub2RlIGhhcyBubyBhc3NvY2lhdGVkIFJUSXMsIGl0J3Mgbm90IGEgc2Nhbi4gV2hlbiB0aGUK KwkgKiAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpcyBzZXQsIHRoYXQncyB1bmV4cGVjdGVk LCBzbyB0aHJvdyBhbgorCSAqIGVycm9yLCBlbHNlIHJldHVybiBxdWlldGx5LgorCSAqLworCWlm IChyZWxpZHMgPT0gTlVMTCkKKwl7CisJCWlmICh3aXRoaW5fam9pbl9wcm9ibGVtKQorCQkJZWxv ZyhFUlJPUiwgInBsYW4gbm9kZSBoYXMgbm8gUlRJczogJWQiLCAoaW50KSBub2RlVGFnKHBsYW4p KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBncGFfbWFrZV9zY2FuKHdhbGtlciwg cGxhbiwgc3RyYXRlZ3ksIHJlbGlkcywgbmVlZHNfbm9fZ2F0aGVyKTsKK30KKworLyoKKyAqIENy ZWF0ZSBhIHNpbmdsZSBwZ3BhX3NjYW4gb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHBncGFfcGxhbl93 YWxrZXJfY29udGV4dC4KKyAqLworc3RhdGljIHBncGFfc2NhbiAqCitwZ3BhX21ha2Vfc2Nhbihw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCSAgIHBncGFf c2Nhbl9zdHJhdGVneSBzdHJhdGVneSwgQml0bWFwc2V0ICpyZWxpZHMsCisJCQkgICBib29sIG5l ZWRzX25vX2dhdGhlcikKK3sKKwlwZ3BhX3NjYW4gICpzY2FuOworCisJLyogQ3JlYXRlIHRoZSBz Y2FuIG9iamVjdC4gKi8KKwlzY2FuID0gcGFsbG9jKHNpemVvZihwZ3BhX3NjYW4pKTsKKwlzY2Fu LT5wbGFuID0gcGxhbjsKKwlzY2FuLT5zdHJhdGVneSA9IHN0cmF0ZWd5OworCXNjYW4tPnJlbGlk cyA9IHJlbGlkczsKKworCS8qIEFkZCBpdCB0byB0aGUgYXBwcm9wcmlhdGUgbGlzdC4gKi8KKwl3 YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSA9IGxhcHBlbmQod2Fsa2VyLT5zY2Fuc1tzY2Fu LT5zdHJhdGVneV0sCisJCQkJCQkJCQkJCXNjYW4pOworCisJLyogQ2FsbGVyIHRlbGxzIHVzIHdo ZXRoZXIgTk9fR0FUSEVSKCkgYWR2aWNlIGZvciB0aGlzIHNjYW4gaXMgbmVlZGVkLiAqLworCWlm IChuZWVkc19ub19nYXRoZXIpCisJCXdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zID0gYm1zX2FkZF9t ZW1iZXJzKHdhbGtlci0+bm9fZ2F0aGVyX3NjYW5zLAorCQkJCQkJCQkJCQkJICBzY2FuLT5yZWxp ZHMpOworCisJcmV0dXJuIHNjYW47Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgdGhlIHVuaXF1ZSBy dGVraW5kIG9mIGEgc2V0IG9mIHJlbGlkcy4KKyAqLworc3RhdGljIFJURUtpbmQKK3VuaXF1ZV9u b25qb2luX3J0ZWtpbmQoQml0bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJ CQlydGkgPSAtMTsKKwlib29sCQlmaXJzdCA9IHRydWU7CisJUlRFS2luZAkJcnRla2luZDsKKwor CUFzc2VydChyZWxpZHMgIT0gTlVMTCk7CisKKwl3aGlsZSAoKHJ0aSA9IGJtc19uZXh0X21lbWJl cihyZWxpZHMsIHJ0aSkpID49IDApCisJeworCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRj aChydGksIHJ0YWJsZSk7CisKKwkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfSk9JTikKKwkJCWNv bnRpbnVlOworCisJCWlmIChmaXJzdCkKKwkJeworCQkJcnRla2luZCA9IHJ0ZS0+cnRla2luZDsK KwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKwkJZWxzZSBpZiAocnRla2luZCAhPSBydGUtPnJ0ZWtp bmQpCisJCQllbG9nKEVSUk9SLCAicnRla2luZCBtaXNtYXRjaDogJWQgdnMuICVkIiwKKwkJCQkg cnRla2luZCwgcnRlLT5ydGVraW5kKTsKKwl9CisKKwlpZiAoZmlyc3QpCisJCWVsb2coRVJST1Is ICJubyBub24tUlRFX0pPSU4gUlRFcyBmb3VuZCIpOworCisJcmV0dXJuIHJ0ZWtpbmQ7Cit9CmRp ZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uM2JiODcyNmZmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfc2Nhbi5oCkBAIC0wLDAgKzEsODUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHBncGFfc2Nhbi5oCisgKgkgIGFuYWx5c2lzIG9mIHNjYW5zIGluIFBsYW4gdHJlZXMK KyAqCisgKiBGb3IgcHVycG9zZXMgb2YgdGhpcyBtb2R1bGUsIGEgInNjYW4iIGluY2x1ZGVzICgx KSBzaW5nbGUgcGxhbiBub2RlcyB0aGF0CisgKiBzY2FuIG11bHRpcGxlIFJUSXMsIHN1Y2ggYXMg YSBkZWdlbmVyYXRlIFJlc3VsdCBub2RlIHRoYXQgcmVwbGFjZXMgd2hhdAorICogd291bGQgb3Ro ZXJ3aXNlIGhhdmUgYmVlbiBhIGpvaW4sIGFuZCAoMikgQXBwZW5kIGFuZCBNZXJnZUFwcGVuZCBu b2RlcworICogaW1wbGVtZW50aW5nIGEgcGFydGl0aW9ud2lzZSBzY2FuIG9yIGEgcGFydGl0aW9u d2lzZSBqb2luLiBTYWlkCisgKiBkaWZmZXJlbnRseSwgc2NhbnMgYXJlIHRoZSBsZWF2ZXMgb2Yg dGhlIGpvaW4gdHJlZSBmb3IgYSBzaW5nbGUgam9pbgorICogcHJvYmxlbS4KKyAqCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAK KyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR1BBX1NDQU5fSAorI2RlZmluZSBQR1BBX1NDQU5f SAorCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFf cGxhbl93YWxrZXJfY29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7CisKKy8qCisgKiBT Y2FuIHN0cmF0ZWdpZXMuCisgKgorICogUEdQQV9TQ0FOX09SRElOQVJZIGlzIGFueSBzY2FuIHN0 cmF0ZWd5IHRoYXQgaXNuJ3QgaW50ZXJlc3RpbmcgdG8gdXMKKyAqIGJlY2F1c2UgdGhlcmUgaXMg bm8gbWVhbmluZ2Z1bCBwbGFubmVyIGRlY2lzaW9uIGludm9sdmVkLiBGb3IgZXhhbXBsZSwKKyAq IHRoZSBvbmx5IHdheSB0byBzY2FuIGEgc3VicXVlcnkgaXMgYSBTdWJxdWVyeVNjYW4sIGFuZCB0 aGUgb25seSB3YXkgdG8KKyAqIHNjYW4gYSBWQUxVRVMgY29uc3RydWN0IGlzIGEgVmFsdWVzU2Nh bi4gV2UgbmVlZCBub3QgY2FyZSBleGFjdGx5IHdoaWNoCisgKiB0eXBlIG9mIHBsYW5uZXIgbm9k ZSB3YXMgdXNlZCBpbiBzdWNoIGNhc2VzLCBiZWNhdXNlIHRoZSBzYW1lIHRoaW5nIHdpbGwKKyAq IGhhcHBlbiB3aGVuIHJlcGxhbm5pbmcuCisgKgorICogUEdQQV9TQ0FOX09SRElOQVJZIGFsc28g aW5jbHVkZXMgUmVzdWx0IG5vZGVzIHRoYXQgY29ycmVzcG9uZCB0byBzY2FucworICogb3IgZXZl biBqb2lucyB0aGF0IGFyZSBwcm92ZWQgZW1wdHkuIFdlIGRvbid0IGtub3cgd2hldGhlciBvciBu b3QgdGhlIHNjYW4KKyAqIG9yIGpvaW4gd2lsbCBzdGlsbCBiZSBwcm92YWJseSBlbXB0eSBhdCBy ZXBsYW5uaW5nIHRpbWUsIGJ1dCBpZiBpdCBpcywKKyAqIHRoZW4gbm8gc2Nhbi10eXBlIGFkdmlj ZSBpcyBuZWVkZWQsIGFuZCBpZiBpdCdzIG5vdCwgd2UgY2FuJ3QgcmVjb21tZW5kCisgKiBhIHNj YW4gdHlwZSBiYXNlZCBvbiB0aGUgY3VycmVudCBwbGFuLgorICoKKyAqIFBHUEFfU0NBTl9QQVJU SVRJT05XSVNFIGFsc28gbHVtcHMgdG9nZXRoZXIgc2NhbnMgYW5kIGpvaW5zOiB0aGlzIGNhbgor ICogYmUgZWl0aGVyIGEgcGFydGl0aW9ud2lzZSBzY2FuIG9mIGEgcGFydGl0aW9uZWQgdGFibGUg b3IgYSBwYXJ0aXRpb253aXNlCisgKiBqb2luIGJldHdlZW4gc2V2ZXJhbCBwYXJ0aXRpb25lZCB0 YWJsZXMuIE5vdGUgdGhhdCBhbGwgZGVjaXNpb25zIGFib3V0CisgKiB3aGV0aGVyIG9yIG5vdCB0 byB1c2UgcGFydGl0aW9ud2lzZSBqb2luIGFyZSBtZWFuaW5nZnVsOiBubyBtYXR0ZXIgd2hhdAor ICogd2UgZGVjaWRlZCB0aGlzIHRpbWUsIHdlIGNvdWxkIGRvIG1vcmUgb3IgZmV3ZXIgdGhpbmdz IHBhcnRpdGlvbndpc2UgdGhlCisgKiBuZXh0IHRpbWUuCisgKgorICogUEdQQV9TQ0FOX0ZPUkVJ R04gaXMgb25seSB1c2VkIHdoZW4gdGhlcmUncyBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGludm9s dmVkOworICogYSBzaW5nbGUtdGFibGUgZm9yZWlnbiBzY2FuIGlzIGNsYXNzaWZpZWQgYXMgb3Jk aW5hcnksIHNpbmNlIHRoZXJlIGlzIG5vCisgKiBkZWNpc2lvbiB0byBtYWtlIGluIHRoYXQgY2Fz ZS4KKyAqCisgKiBPdGhlciBzY2FuIHN0cmF0ZWdpZXMgbWFwIG9uZS10by1vbmUgdG8gcGxhbiBu b2Rlcy4KKyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9TQ0FOX09SRElOQVJZID0gMCwKKwlQ R1BBX1NDQU5fU0VRLAorCVBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwlQR1BBX1NDQU5fRk9SRUlH TiwKKwlQR1BBX1NDQU5fSU5ERVgsCisJUEdQQV9TQ0FOX0lOREVYX09OTFksCisJUEdQQV9TQ0FO X1BBUlRJVElPTldJU0UsCisJUEdQQV9TQ0FOX1RJRAorCS8qIHVwZGF0ZSBOVU1fUEdQQV9TQ0FO X1NUUkFURUdZIGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX3NjYW5fc3RyYXRl Z3k7CisKKyNkZWZpbmUgTlVNX1BHUEFfU0NBTl9TVFJBVEVHWQkoKGludCkgUEdQQV9TQ0FOX1RJ RCArIDEpCisKKy8qCisgKiBBbGwgb2YgdGhlIGRldGFpbHMgd2UgbmVlZCByZWdhcmRpbmcgYSBz Y2FuLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NjYW4KK3sKKwlQbGFuCSAgICpwbGFuOwor CXBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneTsKKwlCaXRtYXBzZXQgICpyZWxpZHM7Cit9IHBn cGFfc2NhbjsKKworZXh0ZXJuIHBncGFfc2NhbiAqcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkJCQkgIEVsaWRlZE5vZGUg KmVsaWRlZF9ub2RlLAorCQkJCQkJCQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyLAorCQkJCQkJ CQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9zY2FubmVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmM0OWIyOWQ5MDZkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX3NjYW5uZXIubApAQCAtMCwwICsxLDMwMiBAQAorJXRvcHsKKy8qCisgKiBTY2FubmVyIGZv ciBwbGFuIGFkdmljZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDI1LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv cGdwYV9zY2FubmVyLmwKKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJj b21tb24vc3RyaW5nLmgiCisjaW5jbHVkZSAibm9kZXMvbWlzY25vZGVzLmgiCisjaW5jbHVkZSAi cGFyc2VyL3NjYW5zdXAuaCIKKworI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdw YV9wYXJzZXIuaCIKKworLyoKKyAqIEV4dHJhIGRhdGEgdGhhdCB3ZSBwYXNzIGFyb3VuZCB3aGVu IGR1cmluZyBzY2FubmluZy4KKyAqCisgKiAnbGl0YnVmJyBpcyB1c2VkIHRvIGltcGxlbWVudCB0 aGUgPHhkPiBleGNsdXNpdmUgc3RhdGUsIHdoaWNoIGhhbmRsZXMKKyAqIGRvdWJsZS1xdW90ZWQg aWRlbnRpZmllcnMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfeXlfZXh0cmFfdHlwZQorewor CVN0cmluZ0luZm9EYXRhCWxpdGJ1ZjsKK30gcGdwYV95eV9leHRyYV90eXBlOworCit9CisKKyV7 CisvKiBMQ09WX0VYQ0xfU1RBUlQgKi8KKworI2RlZmluZSBZWV9ERUNMIFwKKwlleHRlcm4gaW50 IHBncGFfeXlsZXgodW5pb24gWVlTVFlQRSAqeXlsdmFsX3BhcmFtLCBMaXN0ICoqcmVzdWx0LCBc CisJCQkJCQkgIGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FuX3QgeXlzY2FubmVyKQor CisvKiBObyByZWFzb24gdG8gY29uc3RyYWluIGFtb3VudCBvZiBkYXRhIHNsdXJwZWQgKi8KKyNk ZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjc3NzIxNgorCisvKiBBdm9pZCBleGl0KCkgb24gZmF0 YWwgc2Nhbm5lciBlcnJvcnMgKGEgYml0IHVnbHkgLS0gc2VlIHl5X2ZhdGFsX2Vycm9yKSAqLwor I3VuZGVmIGZwcmludGYKKyNkZWZpbmUgZnByaW50ZihmaWxlLCBmbXQsIG1zZykgIGZwcmludGZf dG9fZXJlcG9ydChmbXQsIG1zZykKKworc3RhdGljIHZvaWQKK2ZwcmludGZfdG9fZXJlcG9ydChj b25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwllcmVwb3J0KEVSUk9SLCAoZXJy bXNnX2ludGVybmFsKCIlcyIsIG1zZykpKTsKK30KKyV9CisKKyVvcHRpb24gcmVlbnRyYW50Cisl b3B0aW9uIGJpc29uLWJyaWRnZQorJW9wdGlvbiA4Yml0Cislb3B0aW9uIG5ldmVyLWludGVyYWN0 aXZlCislb3B0aW9uIG5vZGVmYXVsdAorJW9wdGlvbiBub2lucHV0Cislb3B0aW9uIG5vdW5wdXQK KyVvcHRpb24gbm95eXdyYXAKKyVvcHRpb24gbm95eWFsbG9jCislb3B0aW9uIG5veXlyZWFsbG9j Cislb3B0aW9uIG5veXlmcmVlCislb3B0aW9uIHdhcm4KKyVvcHRpb24gcHJlZml4PSJwZ3BhX3l5 IgorJW9wdGlvbiBleHRyYS10eXBlPSJwZ3BhX3l5X2V4dHJhX3R5cGUgKiIKKworLyoKKyAqIFdo YXQgZm9sbG93cyBpcyBhIHNldmVyZWx5IHN0cmlwcGVkLWRvd24gdmVyc2lvbiBvZiB0aGUgY29y ZSBzY2FubmVyLiBXZQorICogb25seSBjYXJlIGFib3V0IHJlY29nbml6aW5nIGlkZW50aWZpZXJz IHdpdGggb3Igd2l0aG91dCBpZGVudGlmaWVyIHF1b3RpbmcKKyAqIChpLmUuIGRvdWJsZS1xdW90 aW5nKSwgZGVjaW1hbCBpbnRlZ2VycywgYW5kIGEgc21hbGwgaGFuZGZ1bCBvZiBvdGhlcgorICog dGhpbmdzLiBLZWVwIHRoZXNlIHJ1bGVzIGluIHN5bmMgd2l0aCBzcmMvYmFja2VuZC9wYXJzZXIv c2Nhbi5sLiBBcyBpbiB0aGF0CisgKiBmaWxlLCB3ZSB1c2UgYW4gZXhjbHVzaXZlIHN0YXRlIGNh bGxlZCAneGMnIGZvciBDLXN0eWxlIGNvbW1lbnRzLCBhbmQgYW4KKyAqIGV4Y2x1c2l2ZSBzdGF0 ZSBjYWxsZWQgJ3hkJyBmb3IgZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycy4KKyAqLworJXggeGMK KyV4IHhkCisKK2lkZW50X3N0YXJ0CQlbQS1aYS16XDIwMC1cMzc3X10KK2lkZW50X2NvbnQJCVtB LVphLXpcMjAwLVwzNzdfMC05XCRdCisKK2lkZW50aWZpZXIJCXtpZGVudF9zdGFydH17aWRlbnRf Y29udH0qCisKK2RlY2RpZ2l0CQlbMC05XQorZGVjaW50ZWdlcgkJe2RlY2RpZ2l0fShfP3tkZWNk aWdpdH0pKgorCitzcGFjZQkJCVsgXHRcblxyXGZcdl0KK3doaXRlc3BhY2UJCXtzcGFjZX0rCisK K2RxdW90ZQkJCVwiCit4ZHN0YXJ0CQkJe2RxdW90ZX0KK3hkc3RvcAkJCXtkcXVvdGV9Cit4ZGRv dWJsZQkJe2RxdW90ZX17ZHF1b3RlfQoreGRpbnNpZGUJCVteIl0rCisKK3hjc3RhcnQJCQlcL1wq Cit4Y3N0b3AJCQlcKitcLworeGNpbnNpZGUJCVteKi9dKworCislJQorCit7d2hpdGVzcGFjZX0J eyAvKiBpZ25vcmUgKi8gfQorCit7aWRlbnRpZmllcn0JeworCQkJCQljaGFyICAgKnN0cjsKKwkJ CQkJYm9vbAlmYWlsOworCQkJCQlwZ3BhX2FkdmljZV90YWdfdHlwZQl0YWc7CisKKwkJCQkJLyoK KwkJCQkJICogVW5saWtlIHRoZSBjb3JlIHNjYW5uZXIsIHdlIGRvbid0IHRydW5jYXRlIGlkZW50 aWZpZXJzCisJCQkJCSAqIGhlcmUuIFRoZXJlIGlzIG5vIG9idmlvdXMgcmVhc29uIHRvIGRvIHNv LgorCQkJCQkgKi8KKwkJCQkJc3RyID0gZG93bmNhc2VfaWRlbnRpZmllcih5eXRleHQsIHl5bGVu ZywgZmFsc2UsIGZhbHNlKTsKKwkJCQkJeXlsdmFsLT5zdHIgPSBzdHI7CisKKwkJCQkJLyoKKwkJ CQkJICogSWYgaXQncyBub3QgYSB0YWcsIGp1c3QgcmV0dXJuIFRPS19JREVOVDsgZWxzZSwgcmV0 dXJuCisJCQkJCSAqIGEgdG9rZW4gdHlwZSBiYXNlZCBvbiBob3cgZnVydGhlciBwYXJzaW5nIHNo b3VsZAorCQkJCQkgKiBwcm9jZWVkLgorCQkJCQkgKi8KKwkJCQkJdGFnID0gcGdwYV9wYXJzZV9h ZHZpY2VfdGFnKHN0ciwgJmZhaWwpOworCQkJCQlpZiAoZmFpbCkKKwkJCQkJCXJldHVybiBUT0tf SURFTlQ7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQkJCQkJ cmV0dXJuIFRPS19UQUdfSk9JTl9PUkRFUjsKKwkJCQkJZWxzZSBpZiAodGFnID09IFBHUEFfVEFH X0lOREVYX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTikK KwkJCQkJCXJldHVybiBUT0tfVEFHX0lOREVYOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9U QUdfQklUTUFQX0hFQVBfU0NBTikKKwkJCQkJCXJldHVybiBUT0tfVEFHX0JJVE1BUDsKKwkJCQkJ ZWxzZSBpZiAodGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOIHx8CisJCQkJCQkJIHRhZyA9PSBQR1BB X1RBR19USURfU0NBTiB8fAorCQkJCQkJCSB0YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQkJ CQkJcmV0dXJuIFRPS19UQUdfU0lNUExFOworCQkJCQllbHNlCisJCQkJCQlyZXR1cm4gVE9LX1RB R19HRU5FUklDOworCQkJCX0KKwore2RlY2ludGVnZXJ9CXsKKwkJCQkJY2hhciAgICplbmRwdHI7 CisKKwkJCQkJZXJybm8gPSAwOworCQkJCQl5eWx2YWwtPmludGVnZXIgPSBzdHJ0b2ludCh5eXRl eHQsICZlbmRwdHIsIDEwKTsKKwkJCQkJaWYgKCplbmRwdHIgIT0gJ1wwJyB8fCBlcnJubyA9PSBF UkFOR0UpCisJCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlz Y2FubmVyLAorCQkJCQkJCQkJICJpbnRlZ2VyIG91dCBvZiByYW5nZSIpOworCQkJCQlyZXR1cm4g VE9LX0lOVEVHRVI7CisJCQkJfQorCit7eGNzdGFydH0JCXsKKwkJCQkJQkVHSU4oeGMpOworCQkJ CX0KKwore3hkc3RhcnR9CQl7CisJCQkJCUJFR0lOKHhkKTsKKwkJCQkJcmVzZXRTdHJpbmdJbmZv KCZ5eWV4dHJhLT5saXRidWYpOworCQkJCX0KKworInx8IgkJCXsgcmV0dXJuIFRPS19PUjsgfQor CisiJiYiCQkJeyByZXR1cm4gVE9LX0FORDsgfQorCisuCQkJCXsgcmV0dXJuIHl5dGV4dFswXTsg fQorCis8eGM+e3hjc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQl9CisKKzx4Yz57 eGNpbnNpZGV9CXsKKwkJCQkJLyogZGlzY2FyZCBtdWx0aXBsZSBjaGFyYWN0ZXJzIHdpdGhvdXQg c2xhc2ggb3IgYXN0ZXJpc2sgKi8KKwkJCQl9CisKKzx4Yz4uCQkJeworCQkJCQkvKgorCQkJCQkg KiBEaXNjYXJkIGFueSBzaW5nbGUgY2hhcmFjdGVyLiBmbGV4IHByZWZlcnMgbG9uZ2VyCisJCQkJ CSAqIG1hdGNoZXMsIHNvIHRoaXMgcnVsZSB3aWxsIG5ldmVyIGJlIHBpY2tlZCB3aGVuIHdlIGNv dWxkCisJCQkJCSAqIGhhdmUgbWF0Y2hlZCB4Y3N0b3AuCisJCQkJCSAqCisJCQkJCSAqIE5COiBB dCBwcmVzZW50LCB3ZSBkb24ndCBib3RoZXIgdG8gc3VwcG9ydCBuZXN0ZWQKKwkJCQkJICogQy1z dHlsZSBjb21tZW50cyBoZXJlLCBidXQgdGhpcyBsb2dpYyBjb3VsZCBiZSBleHRlbmRlZAorCQkJ CQkgKiBpZiB0aGF0IHJlc3RyaWN0aW9uIHBvc2VzIGEgcHJvYmxlbS4KKwkJCQkJICovCisJCQkJ fQorCis8eGM+PDxFT0Y+PgkJeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJcGdwYV95eWVy cm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJICJ1bnRl cm1pbmF0ZWQgY29tbWVudCIpOworCQkJCX0KKworPHhkPnt4ZHN0b3B9CXsKKwkJCQkJQkVHSU4o SU5JVElBTCk7CisJCQkJCWlmICh5eWV4dHJhLT5saXRidWYubGVuID09IDApCisJCQkJCQlwZ3Bh X3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkJ ICJ6ZXJvLWxlbmd0aCBkZWxpbWl0ZWQgaWRlbnRpZmllciIpOworCQkJCQl5eWx2YWwtPnN0ciA9 IHBzdHJkdXAoeXlleHRyYS0+bGl0YnVmLmRhdGEpOworCQkJCQlyZXR1cm4gVE9LX0lERU5UOwor CQkJCX0KKworPHhkPnt4ZGRvdWJsZX0JeworCQkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmeXll eHRyYS0+bGl0YnVmLCAnIicpOworCQkJCX0KKworPHhkPnt4ZGluc2lkZX0JeworCQkJCQlhcHBl bmRCaW5hcnlTdHJpbmdJbmZvKCZ5eWV4dHJhLT5saXRidWYsIHl5dGV4dCwgeXlsZW5nKTsKKwkJ CQl9CisKKzx4ZD48PEVPRj4+CQl7CisJCQkJCUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5 ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVu dGVybWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciIpOworCQkJCX0KKworJSUKKworLyogTENPVl9F WENMX1NUT1AgKi8KKworLyoKKyAqIEhhbmRsZXIgZm9yIGVycm9ycyB3aGlsZSBzY2FubmluZyBv ciBwYXJzaW5nIGFkdmljZS4KKyAqCisgKiBiaXNvbiBwYXNzZXMgdGhlIGVycm9yIG1lc3NhZ2Ug dG8gdXMgdmlhICdtZXNzYWdlJywgYW5kIHRoZSBjb250ZXh0IGlzCisgKiBhdmFpbGFibGUgdmlh IHRoZSAneXl0ZXh0JyBtYWNyby4gV2UgYXNzZW1ibGUgdGhvc2UgdmFsdWVzIGludG8gYSBmaW5h bAorICogZXJyb3IgdGV4dCBhbmQgdGhlbiBhcnJhbmdlIHRvIHBhc3MgaXQgYmFjayB0byB0aGUg Y2FsbGVyIG9mIHBncGFfeXlwYXJzZSgpCisgKiBieSBzdG9yaW5nIGl0IGludG8gKnBhcnNlX2Vy cm9yX21zZ19wLgorICovCit2b2lkCitwZ3BhX3l5ZXJyb3IoTGlzdCAqKnJlc3VsdCwgY2hhciAq KnBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIsCisJCQkgY29uc3QgY2hhciAq bWVzc2FnZSkKK3sKKwlzdHJ1Y3QgeXlndXRzX3QgKnl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QgKikg eXlzY2FubmVyOwkvKiBuZWVkZWQgZm9yIHl5dGV4dAorCQkJCQkJCQkJCQkJCQkJICogbWFjcm8g Ki8KKworCisJLyogcmVwb3J0IG9ubHkgdGhlIGZpcnN0IGVycm9yIGluIGEgcGFyc2Ugb3BlcmF0 aW9uICovCisJaWYgKCpwYXJzZV9lcnJvcl9tc2dfcCkKKwkJcmV0dXJuOworCisJaWYgKHl5dGV4 dFswXSkKKwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IG9yIG5lYXIgXCIl c1wiIiwgbWVzc2FnZSwgeXl0ZXh0KTsKKwllbHNlCisJCSpwYXJzZV9lcnJvcl9tc2dfcCA9IHBz cHJpbnRmKCIlcyBhdCBlbmQgb2YgaW5wdXQiLCBtZXNzYWdlKTsKK30KKworLyoKKyAqIEluaXRp YWxpemUgdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBi ZWZvcmUgcGFyc2luZyBiZWdpbnMuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9pbml0KGNvbnN0 IGNoYXIgKnN0ciwgeXlzY2FuX3QgKnl5c2Nhbm5lcnApCit7CisJeXlzY2FuX3QJeXlzY2FubmVy OworCXBncGFfeXlfZXh0cmFfdHlwZQkqeXlleHQgPSBwYWxsb2MwX29iamVjdChwZ3BhX3l5X2V4 dHJhX3R5cGUpOworCisJaWYgKHl5bGV4X2luaXQoeXlzY2FubmVycCkgIT0gMCkKKwkJZWxvZyhF UlJPUiwgInl5bGV4X2luaXQoKSBmYWlsZWQ6ICVtIik7CisKKwl5eXNjYW5uZXIgPSAqeXlzY2Fu bmVycDsKKworCWluaXRTdHJpbmdJbmZvKCZ5eWV4dC0+bGl0YnVmKTsKKwlwZ3BhX3l5c2V0X2V4 dHJhKHl5ZXh0LCB5eXNjYW5uZXIpOworCisJeXlfc2Nhbl9zdHJpbmcoc3RyLCB5eXNjYW5uZXIp OworfQorCisKKy8qCisgKiBTaHV0IGRvd24gdGhlIGFkdmljZSBzY2FubmVyLgorICoKKyAqIFRo aXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBwYXJzaW5nIGlzIGNvbXBsZXRlLgorICovCit2b2lk CitwZ3BhX3NjYW5uZXJfZmluaXNoKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwl5eWxleF9kZXN0 cm95KHl5c2Nhbm5lcik7Cit9CisKKy8qCisgKiBJbnRlcmZhY2UgZnVuY3Rpb25zIHRvIG1ha2Ug ZmxleCB1c2UgcGFsbG9jKCkgaW5zdGVhZCBvZiBtYWxsb2MoKS4KKyAqIEl0J2QgYmUgYmV0dGVy IHRvIG1ha2UgdGhlc2Ugc3RhdGljLCBidXQgZmxleCBpbnNpc3RzIG90aGVyd2lzZS4KKyAqLwor Cit2b2lkICoKK3l5YWxsb2MoeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK KwlyZXR1cm4gcGFsbG9jKHNpemUpOworfQorCit2b2lkICoKK3l5cmVhbGxvYyh2b2lkICpwdHIs IHl5X3NpemVfdCBzaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYgKHB0cikKKwkJcmV0 dXJuIHJlcGFsbG9jKHB0ciwgc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4gcGFsbG9jKHNpemUpOwor fQorCit2b2lkCit5eWZyZWUodm9pZCAqcHRyLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJaWYg KHB0cikKKwkJcGZyZWUocHRyKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV90cm92ZS5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlkYjEwNzdkNDg3Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKQEAgLTAsMCAr MSw0OTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuYworICoJICBB bGwgb2YgdGhlIGFkdmljZSBnaXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0 ZWx5CisgKiAgICBvcmdhbml6ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIFRoaXMg bmFtZSBjb21lcyBmcm9tIHRoZSBFbmdsaXNoIGV4cHJlc3Npb24gInRyb3ZlIG9mIGFkdmljZSIs IHdoaWNoCisgKiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygd2lzZG9tLiBUaGlzIHNsaWdodGx5IHVu dXN1YWwgdGVybSBpcyBjaG9zZW4gdG8KKyAqIGF2b2lkIG5hbWluZyBjb25mdXNpb247IGZvciBl eGFtcGxlLCAiY29sbGVjdGlvbiBvZiBhZHZpY2UiIHdvdWxkCisgKiBpbnZpdGUgY29uZnVzaW9u IHdpdGggcGdwYV9jb2xsZWN0b3IuYy4gTm90ZSB0aGF0LCB3aGlsZSB3ZSBkb24ndCBrbm93Cisg KiB3aGV0aGVyIHRoZSBwcm92aWRlZCBhZHZpY2UgaXMgYWN0dWFsbHkgd2lzZSwgaXQncyBub3Qg b3VyIGpvYiB0bworICogcXVlc3Rpb24gdGhlIHVzZXIncyBjaG9pY2VzLgorICoKKyAqIFRoZSBn b2FsIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBsb2NhdGUgdGhlIHNwZWNp ZmljCisgKiBiaXRzIG9mIGFkdmljZSB0aGF0IHBlcnRhaW4gdG8gYW55IGdpdmVuIHBhcnQgb2Yg YSBxdWVyeSwgb3IgdG8KKyAqIGRldGVybWluZSB0aGF0IHRoZXJlIGFyZSBub25lLgorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMKKyAqCisg Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRl ICJwZ3BhX3Ryb3ZlLmgiCisKKyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisK Ky8qCisgKiBBbiBhZHZpY2UgdHJvdmUgaXMgb3JnYW5pemVkIGludG8gYSBzZXJpZXMgb2YgInNs aWNlcyIsIGVhY2ggb2Ygd2hpY2gKKyAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IG9uZSB0 b3BpYyBlLmcuIHNjYW4gbWV0aG9kcy4gRWFjaCBzbGljZSBjb25zaXN0cworICogb2YgYW4gYXJy YXkgb2YgdHJvdmUgZW50cmllcyBwbHVzIGEgaGFzaCB0YWJsZSB0aGF0IHdlIGNhbiB1c2UgdG8g ZGV0ZXJtaW5lCisgKiB3aGljaCBvbmVzIGFyZSByZWxldmFudCB0byBhIHBhcnRpY3VsYXIgcGFy dCBvZiB0aGUgcXVlcnkuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfc2xpY2UKK3sK Kwl1bnNpZ25lZAluYWxsb2NhdGVkOworCXVuc2lnbmVkCW51c2VkOworCXBncGFfdHJvdmVfZW50 cnkgKmVudHJpZXM7CisJc3RydWN0IHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaDsKK30gcGdw YV90cm92ZV9zbGljZTsKKworLyoKKyAqIFNjYW4gYWR2aWNlIGlzIHN0b3JlZCBpbnRvICdzY2Fu Jzsgam9pbiBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ2pvaW4nOyBhbmQKKyAqIGFkdmljZSB0aGF0 IGNhbiBhcHBseSB0byBib3RoIGNhc2VzIGlzIHN0b3JlZCBpbnRvICdyZWwnLiBUaGlzIGxldHMg Y2FsbGVycworICogYXNrIGp1c3QgZm9yIHdoYXQncyByZWxldmFudC4gVGhlc2Ugc2xpY2VzIGNv cnJlc3BvbmQgdG8gdGhlIHBvc3NpYmxlIHZhbHVlcworICogb2YgcGdwYV90cm92ZV9sb29rdXBf dHlwZS4KKyAqLworc3RydWN0IHBncGFfdHJvdmUKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlIGpvaW47 CisJcGdwYV90cm92ZV9zbGljZSByZWw7CisJcGdwYV90cm92ZV9zbGljZSBzY2FuOworfTsKKwor LyoKKyAqIFdlJ3JlIGdvaW5nIHRvIGJ1aWxkIGEgaGFzaCB0YWJsZSB0byBhbGxvdyBjbGllbnRz IG9mIHRoaXMgbW9kdWxlIHRvIGZpbmQKKyAqIHJlbGV2YW50IGFkdmljZSBmb3IgYSBnaXZlbiBw YXJ0IG9mIHRoZSBxdWVyeSBxdWlja2x5LiBIb3dldmVyLCB3ZSdyZSBnb2luZworICogdG8gdXNl IG9ubHkgdGhyZWUgb2YgdGhlIGZpdmUga2V5IGZpZWxkcyBhcyBoYXNoIGtleXMuIFRoZXJlIGFy ZSB0d28gcmVhc29ucworICogZm9yIHRoaXMuCisgKgorICogRmlyc3QsIGl0J3MgYWxsb3dhYmxl IHRvIHNldCBwYXJ0aXRpb25fc2NoZW1hIHRvIE5VTEwgdG8gbWF0Y2ggYSBwYXJ0aXRpb24KKyAq IHdpdGggdGhlIGNvcnJlY3QgbmFtZSBpbiBhbnkgc2NoZW1hLgorICoKKyAqIFNlY29uZCwgd2Ug ZXhwZWN0IHRoZSAib2NjdXJyZW5jZSIgYW5kICJwYXJ0aXRpb25fc2NoZW1hIiBwb3J0aW9ucyBv ZiB0aGUKKyAqIHJlbGF0aW9uIGlkZW50aWZpZXJzIHRvIGJlIG1vc3RseSB1bmludGVyZXN0aW5n LiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUKKyAqIG9jY3VycmVuY2UgZmllbGQgd2lsbCBiZSAxIGFu ZCB0aGUgcGFydGl0aW9uX3NjaGVtYSB2YWx1ZXMgd2lsbCBhbGwgYmUgdGhlCisgKiBzYW1lLiBF dmVuIHdoZW4gdGhlcmUgaXMgc29tZSB2YXJpYXRpb24sIHRoZSBhYnNvbHV0ZSBudW1iZXIgb2Yg ZW50cmllcworICogdGhhdCBoYXZlIHRoZSBzYW1lIHZhbHVlcyBmb3IgYWxsIHRocmVlIG9mIHRo ZXNlIGtleSBmaWVsZHMgc2hvdWxkIGJlCisgKiBxdWl0ZSBzbWFsbC4KKyAqLwordHlwZWRlZiBz dHJ1Y3QKK3sKKwljb25zdCBjaGFyICphbGlhc19uYW1lOworCWNvbnN0IGNoYXIgKnBhcnRpdGlv bl9uYW1lOworCWNvbnN0IGNoYXIgKnBsYW5fbmFtZTsKK30gcGdwYV90cm92ZV9lbnRyeV9rZXk7 CisKK3R5cGVkZWYgc3RydWN0Cit7CisJcGdwYV90cm92ZV9lbnRyeV9rZXkga2V5OworCWludAkJ CXN0YXR1czsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1l bnQ7CisKK3N0YXRpYyB1aW50MzIgcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3Zl X2VudHJ5X2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJvb2wKK3BncGFfdHJvdmVfZW50cnlf Y29tcGFyZV9rZXkocGdwYV90cm92ZV9lbnRyeV9rZXkgYSwgcGdwYV90cm92ZV9lbnRyeV9rZXkg YikKK3sKKwlpZiAoc3RyY21wKGEuYWxpYXNfbmFtZSwgYi5hbGlhc19uYW1lKSAhPSAwKQorCQly ZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGFydGl0 aW9uX25hbWUsIGIucGFydGl0aW9uX25hbWUpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIXN0 cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKGEucGxhbl9uYW1lLCBiLnBsYW5fbmFtZSkpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisjZGVmaW5lIFNIX1BSRUZJWAkJCXBn cGFfdHJvdmVfZW50cnkKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3BhX3Ryb3ZlX2VudHJ5 X2VsZW1lbnQKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3Ryb3ZlX2VudHJ5X2tleQorI2Rl ZmluZSBTSF9LRVkJCQkJa2V5CisjZGVmaW5lIFNIX0hBU0hfS0VZKHRiLCBrZXkpCXBncGFfdHJv dmVfZW50cnlfaGFzaF9rZXkoa2V5KQorI2RlZmluZQlTSF9FUVVBTCh0YiwgYSwgYikJcGdwYV90 cm92ZV9lbnRyeV9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBp bmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJs aWIvc2ltcGxlaGFzaC5oIgorCitzdGF0aWMgdm9pZCBwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdw YV90cm92ZV9zbGljZSAqdHNsaWNlKTsKK3N0YXRpYyB2b2lkIHBncGFfdHJvdmVfYWRkX3RvX3Ns aWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhZ190 eXBlIHRhZywKKwkJCQkJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KTsKK3N0YXRpYyB2 b2lkIHBncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpoYXNoLAor CQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkJICAgaW50IGlu ZGV4KTsKK3N0YXRpYyBCaXRtYXBzZXQgKnBncGFfdHJvdmVfc2xpY2VfbG9va3VwKHBncGFfdHJv dmVfc2xpY2UgKnRzbGljZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkKTsKKwor LyoKKyAqIEJ1aWxkIGEgdHJvdmUgb2YgYWR2aWNlIGZyb20gYSBsaXN0IG9mIGFkdmljZSBpdGVt cy4KKyAqCisgKiBDYWxsZXIgY2FuIG9idGFpbiBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zIHRvIHBh c3MgdG8gdGhpcyBmdW5jdGlvbiBieQorICogY2FsbGluZyBwZ3BhX3BhcnNlKCkuCisgKi8KK3Bn cGFfdHJvdmUgKgorcGdwYV9idWlsZF90cm92ZShMaXN0ICphZHZpY2VfaXRlbXMpCit7CisJcGdw YV90cm92ZSAqdHJvdmUgPSBwYWxsb2Nfb2JqZWN0KHBncGFfdHJvdmUpOworCisJcGdwYV9pbml0 X3Ryb3ZlX3NsaWNlKCZ0cm92ZS0+am9pbik7CisJcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCZ0cm92 ZS0+cmVsKTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5zY2FuKTsKKworCWZvcmVh Y2hfcHRyKHBncGFfYWR2aWNlX2l0ZW0sIGl0ZW0sIGFkdmljZV9pdGVtcykKKwl7CisJCXN3aXRj aCAoaXRlbS0+dGFnKQorCQl7CisJCQljYXNlIFBHUEFfVEFHX0pPSU5fT1JERVI6CisJCQkJewor CQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKworCQkJCQkvKgorCQkJCQkgKiBGb3Ig bW9zdCBhZHZpY2UgdHlwZXMsIGVhY2ggZWxlbWVudCBpbiB0aGUgdG9wLWxldmVsCisJCQkJCSAq IGxpc3QgaXMgYSBzZXBhcmF0ZSB0YXJnZXQsIGJ1dCBpdCdzIG1vc3QgY29udmVuaWVudCB0bwor CQkJCQkgKiByZWdhcmQgdGhlIGVudGlyZXR5IG9mIGEgSk9JTl9PUkRFUiBzcGVjaWZpY2F0aW9u IGFzIGEKKwkJCQkJICogc2luZ2xlIHRhcmdldC4gU2luY2UgaXQgd2Fzbid0IHJlcHJlc2VudGVk IHRoYXQgd2F5CisJCQkJCSAqIGR1cmluZyBwYXJzaW5nLCBidWlsZCBhIHN1cnJvZ2F0ZSBvYmpl Y3Qgbm93LgorCQkJCQkgKi8KKwkJCQkJdGFyZ2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZp Y2VfdGFyZ2V0KTsKKwkJCQkJdGFyZ2V0LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElT VDsKKwkJCQkJdGFyZ2V0LT5jaGlsZHJlbiA9IGl0ZW0tPnRhcmdldHM7CisKKwkJCQkJcGdwYV90 cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50YWcsIHRh cmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQ X1NDQU46CisJCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCWNhc2UgUEdQQV9U QUdfSU5ERVhfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQljYXNlIFBHUEFf VEFHX1RJRF9TQ0FOOgorCisJCQkJLyoKKwkJCQkgKiBTY2FuIGFkdmljZS4KKwkJCQkgKi8KKwkJ CQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykK KwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvciBub3csIGFsbCBvZiBvdXIgc2NhbiB0eXBlcyB0 YXJnZXQgc2luZ2xlIHJlbGF0aW9ucywKKwkJCQkJICogYnV0IGluIHRoZSBmdXR1cmUgdGhpcyBt aWdodCBub3QgYmUgdHJ1ZSwgZS5nLiBhIGN1c3RvbQorCQkJCQkgKiBzY2FuIGNvdWxkIHJlcGxh Y2UgYSBqb2luLgorCQkJCQkgKi8KKwkJCQkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfSURFTlRJRklFUik7CisJCQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+ c2NhbiwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVhazsK KworCQkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQljYXNlIFBHUEFfVEFHX0hBU0hf Sk9JTjoKKwkJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCWNhc2Ug UEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkU6CisJCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlj YXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX1BMQUlOOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9J Tl9OT05fVU5JUVVFOgorCQkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisKKwkJCQkv KgorCQkJCSAqIEpvaW4gc3RyYXRlZ3kgYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJ cGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5qb2luLAorCQkJCQkJCQkJCQlpdGVtLT50 YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX1BBUlRJ VElPTldJU0U6CisJCQljYXNlIFBHUEFfVEFHX0dBVEhFUjoKKwkJCWNhc2UgUEdQQV9UQUdfR0FU SEVSX01FUkdFOgorCQkJY2FzZSBQR1BBX1RBR19OT19HQVRIRVI6CisKKwkJCQkvKgorCQkJCSAq IEFkdmljZSBhYm91dCBhIFJlbE9wdEluZm8gcmVsZXZhbnQgdG8gYm90aCBzY2FucyBhbmQgam9p bnMuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJnZXQs IGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJv dmUtPnJlbCwKKwkJCQkJCQkJCQkJaXRlbS0+dGFnLCB0YXJnZXQpOworCQkJCX0KKwkJCQlicmVh azsKKwkJfQorCX0KKworCXJldHVybiB0cm92ZTsKK30KKworLyoKKyAqIFNlYXJjaCBhIHRyb3Zl IG9mIGFkdmljZSBmb3IgcmVsZXZhbnQgZW50cmllcy4KKyAqCisgKiBBbGwgcGFyYW1ldGVycyBh cmUgaW5wdXQgcGFyYW1ldGVycyBleGNlcHQgZm9yICpyZXN1bHQsIHdoaWNoIGlzIGFuIG91dHB1 dAorICogcGFyYW1ldGVyIHVzZWQgdG8gcmV0dXJuIHJlc3VsdHMgdG8gdGhlIGNhbGxlci4KKyAq Lwordm9pZAorcGdwYV90cm92ZV9sb29rdXAocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkgIGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRz LCBwZ3BhX3Ryb3ZlX3Jlc3VsdCAqcmVzdWx0KQoreworCXBncGFfdHJvdmVfc2xpY2UgKnRzbGlj ZTsKKwlCaXRtYXBzZXQgICppbmRleGVzOworCisJQXNzZXJ0KG5yaWRzID4gMCk7CisKKwlpZiAo dHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47 CisJZWxzZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAm dHJvdmUtPmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCWluZGV4ZXMg PSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzWzBdKTsKKwlmb3IgKGludCBp ID0gMTsgaSA8IG5yaWRzOyArK2kpCisJeworCQlCaXRtYXBzZXQgICpvdGhlcl9pbmRleGVzOwor CisJCS8qCisJCSAqIElmIHRoZSBjYWxsZXIgaXMgYXNraW5nIGFib3V0IHR3byByZWxhdGlvbnMg dGhhdCBhcmVuJ3QgcGFydCBvZiB0aGUKKwkJICogc2FtZSBzdWJxdWVyeSwgdGhleSd2ZSBtZXNz ZWQgdXAuCisJCSAqLworCQlBc3NlcnQoc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwocmlkc1sw XS5wbGFuX25hbWUsCisJCQkJCQkJCQkJICByaWRzW2ldLnBsYW5fbmFtZSkpOworCisJCW90aGVy X2luZGV4ZXMgPSBwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cCh0c2xpY2UsICZyaWRzW2ldKTsKKwkJ aW5kZXhlcyA9IGJtc191bmlvbihpbmRleGVzLCBvdGhlcl9pbmRleGVzKTsKKwl9CisKKwlyZXN1 bHQtPmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJcmVzdWx0LT5pbmRleGVzID0gaW5kZXhl czsKK30KKworLyoKKyAqIFJldHVybiBhbGwgZW50cmllcyBpbiBhIHRyb3ZlIHNsaWNlIHRvIHRo ZSBjYWxsZXIuCisgKgorICogVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGlucHV0IGFyZ3Vt ZW50cywgYW5kIHRoZSByZW1haW5kZXIgYXJlIG91dHB1dAorICogYXJndW1lbnRzLgorICovCit2 b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJICBwZ3BhX3Ryb3ZlX2VudHJ5ICoqZW50cmllcywgaW50 ICpuZW50cmllcykKK3sKKwlwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2U7CisKKwlpZiAodHlwZSA9 PSBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOKQorCQl0c2xpY2UgPSAmdHJvdmUtPnNjYW47CisJZWxz ZSBpZiAodHlwZSA9PSBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOKQorCQl0c2xpY2UgPSAmdHJvdmUt PmpvaW47CisJZWxzZQorCQl0c2xpY2UgPSAmdHJvdmUtPnJlbDsKKworCSplbnRyaWVzID0gdHNs aWNlLT5lbnRyaWVzOworCSpuZW50cmllcyA9IHRzbGljZS0+bnVzZWQ7Cit9CisKKy8qCisgKiBD b252ZXJ0IGEgdHJvdmUgZW50cnkgdG8gYW4gaXRlbSBvZiBwbGFuIGFkdmljZSB0aGF0IHdvdWxk IHByb2R1Y2UgaXQuCisgKi8KK2NoYXIgKgorcGdwYV9jc3RyaW5nX3Ryb3ZlX2VudHJ5KHBncGFf dHJvdmVfZW50cnkgKmVudHJ5KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJp bmdJbmZvKCZidWYpOworCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiVzIiwgcGdwYV9jc3RyaW5n X2FkdmljZV90YWcoZW50cnktPnRhZykpOworCisJLyogSk9JTl9PUkRFUiB0YWdzIGFyZSB0cmFu c2Zvcm1lZCBieSBwZ3BhX2J1aWxkX3Ryb3ZlOyB1bmRvIHRoYXQgaGVyZSAqLworCWlmIChlbnRy eS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZi dWYsICcoJyk7CisJZWxzZQorCQlBc3NlcnQoZW50cnktPnRhcmdldC0+dHR5cGUgPT0gUEdQQV9U QVJHRVRfT1JERVJFRF9MSVNUKTsKKworCXBncGFfZm9ybWF0X2FkdmljZV90YXJnZXQoJmJ1Ziwg ZW50cnktPnRhcmdldCk7CisKKwlpZiAoZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMKQor CXsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyAnKTsKKwkJcGdwYV9mb3JtYXRfaW5k ZXhfdGFyZ2V0KCZidWYsIGVudHJ5LT50YXJnZXQtPml0YXJnZXQpOworCX0KKworCWlmIChlbnRy eS0+dGFnICE9IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZi dWYsICcpJyk7CisKKwlyZXR1cm4gYnVmLmRhdGE7Cit9CisKKy8qCisgKiBTZXQgUEdQQV9URV8q IGZsYWdzIG9uIGEgc2V0IG9mIHRyb3ZlIGVudHJpZXMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVf c2V0X2ZsYWdzKHBncGFfdHJvdmVfZW50cnkgKmVudHJpZXMsIEJpdG1hcHNldCAqaW5kZXhlcywg aW50IGZsYWdzKQoreworCWludAkJCWkgPSAtMTsKKworCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihpbmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKmVudHJ5ID0g JmVudHJpZXNbaV07CisKKwkJZW50cnktPmZsYWdzIHw9IGZsYWdzOworCX0KK30KKworLyoKKyAq IEFkZCBhIG5ldyBhZHZpY2UgdGFyZ2V0IHRvIGFuIGV4aXN0aW5nIHBncGFfdHJvdmVfc2xpY2Ug b2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90 cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJ CQkJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50 cnk7CisKKwlpZiAodHNsaWNlLT5udXNlZCA+PSB0c2xpY2UtPm5hbGxvY2F0ZWQpCisJeworCQlp bnQJCQluZXdfYWxsb2NhdGVkOworCisJCW5ld19hbGxvY2F0ZWQgPSB0c2xpY2UtPm5hbGxvY2F0 ZWQgKiAyOworCQl0c2xpY2UtPmVudHJpZXMgPSByZXBhbGxvY19hcnJheSh0c2xpY2UtPmVudHJp ZXMsIHBncGFfdHJvdmVfZW50cnksCisJCQkJCQkJCQkJIG5ld19hbGxvY2F0ZWQpOworCQl0c2xp Y2UtPm5hbGxvY2F0ZWQgPSBuZXdfYWxsb2NhdGVkOworCX0KKworCWVudHJ5ID0gJnRzbGljZS0+ ZW50cmllc1t0c2xpY2UtPm51c2VkXTsKKwllbnRyeS0+dGFnID0gdGFnOworCWVudHJ5LT50YXJn ZXQgPSB0YXJnZXQ7CisJZW50cnktPmZsYWdzID0gMDsKKworCXBncGFfdHJvdmVfYWRkX3RvX2hh c2godHNsaWNlLT5oYXNoLCB0YXJnZXQsIHRzbGljZS0+bnVzZWQpOworCisJdHNsaWNlLT5udXNl ZCsrOworfQorCisvKgorICogVXBkYXRlIHRoZSBoYXNoIHRhYmxlIGZvciBhIG5ld2x5LWFkZGVk IGFkdmljZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3Ryb3ZlX2FkZF90b19oYXNo KHBncGFfdHJvdmVfZW50cnlfaGFzaCAqaGFzaCwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQs CisJCQkJCSAgIGludCBpbmRleCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdw YV90cm92ZV9lbnRyeV9lbGVtZW50ICplbGVtZW50OworCWJvb2wJCWZvdW5kOworCisJLyogRm9y IG5vbi1pZGVudGlmaWVycywgYWRkIGVudHJpZXMgZm9yIGFsbCBkZXNjZW5kZW50cy4gKi8KKwlp ZiAodGFyZ2V0LT50dHlwZSAhPSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJZm9yZWFj aF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4p CisJCXsKKwkJCXBncGFfdHJvdmVfYWRkX3RvX2hhc2goaGFzaCwgY2hpbGRfdGFyZ2V0LCBpbmRl eCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIFNhbml0eSBjaGVja3MuICovCisJQXNzZXJ0 KHRhcmdldC0+cmlkLm9jY3VycmVuY2UgPiAwKTsKKwlBc3NlcnQodGFyZ2V0LT5yaWQuYWxpYXNf bmFtZSAhPSBOVUxMKTsKKworCS8qIEFkZCBhbiBlbnRyeSBmb3IgdGhpcyByZWxhdGlvbiBpZGVu dGlmaWVyLiAqLworCWtleS5hbGlhc19uYW1lID0gdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZTsKKwlr ZXkucGFydGl0aW9uX25hbWUgPSB0YXJnZXQtPnJpZC5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUg PSB0YXJnZXQtPnJpZC5wbGFuX25hbWU7CisJZWxlbWVudCA9IHBncGFfdHJvdmVfZW50cnlfaW5z ZXJ0KGhhc2gsIGtleSwgJmZvdW5kKTsKKwlpZiAoIWZvdW5kKQorCQllbGVtZW50LT5pbmRleGVz ID0gTlVMTDsKKwllbGVtZW50LT5pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoZWxlbWVudC0+aW5k ZXhlcywgaW5kZXgpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIGEgbmV3IHBn cGFfdHJvdmVfc2xpY2Ugb2JqZWN0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9pbml0X3Ryb3Zl X3NsaWNlKHBncGFfdHJvdmVfc2xpY2UgKnRzbGljZSkKK3sKKwkvKgorCSAqIEluIGFuIGlkZWFs IHdvcmxkLCB3ZSdsbCBtYWtlIHRzbGljZS0+bmFsbG9jYXRlZCBiaWcgZW5vdWdoIHRoYXQgdGhl CisJICogYXJyYXkgYW5kIGhhc2ggdGFibGUgd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gY29udGFp biB0aGUgbnVtYmVyIG9mCisJICogYWR2aWNlIGl0ZW1zIGluIHRoaXMgdHJvdmUgc2xpY2UsIGJ1 dCBhIGdlbmVyb3VzIGRlZmF1bHQgdmFsdWUgaXMgbm90CisJICogZ29vZCBmb3IgcGVyZm9ybWFu Y2UsIGJlY2F1c2UgcGdwYV9pbml0X3Ryb3ZlX3NsaWNlKCkgaGFzIHRvIHplcm8gYW4KKwkgKiBh bW91bnQgb2YgbWVtb3J5IHByb3BvcnRpb25hbCB0byB0c2xpY2UtPm5hbGxvY2F0ZWQuIEhlbmNl LCB3ZSBrZWVwIHRoZQorCSAqIHN0YXJ0aW5nIHZhbHVlIHF1aXRlIHNtYWxsLCBvbiB0aGUgdGhl b3J5IHRoYXQgYWR2aWNlIHN0cmluZ3Mgd2lsbAorCSAqIG9mdGVuIGJlIHJlbGF0aXZlbHkgc2hv cnQuCisJICovCisJdHNsaWNlLT5uYWxsb2NhdGVkID0gMTY7CisJdHNsaWNlLT5udXNlZCA9IDA7 CisJdHNsaWNlLT5lbnRyaWVzID0gcGFsbG9jX2FycmF5KHBncGFfdHJvdmVfZW50cnksIHRzbGlj ZS0+bmFsbG9jYXRlZCk7CisJdHNsaWNlLT5oYXNoID0gcGdwYV90cm92ZV9lbnRyeV9jcmVhdGUo Q3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkJICAgdHNsaWNlLT5uYWxsb2NhdGVkLCBO VUxMKTsKK30KKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBmb3IgYSBrZXkgY29uc2lzdGlu ZyBvZiBhbGlhc19uYW1lLCBwYXJ0aXRpb25fbmFtZSwKKyAqIGFuZCBwbGFuX25hbWUuCisgKi8K K3N0YXRpYyB1aW50MzIKK3BncGFfdHJvdmVfZW50cnlfaGFzaF9rZXkocGdwYV90cm92ZV9lbnRy eV9rZXkga2V5KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKworCWZh c3RoYXNoX2luaXQoJmhzLCAwKTsKKworCS8qIGFsaWFzX25hbWUgbWF5IG5vdCBiZSBOVUxMICov CisJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5hbGlhc19uYW1lKTsK KworCS8qIHBhcnRpdGlvbl9uYW1lIGFuZCBwbGFuX25hbWUsIGhvd2V2ZXIsIGNhbiBiZSBOVUxM ICovCisJaWYgKGtleS5wYXJ0aXRpb25fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4gKz0gZmFzdGhh c2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wYXJ0aXRpb25fbmFtZSk7CisJaWYgKGtleS5wbGFu X25hbWUgIT0gTlVMTCkKKwkJc3BfbGVuICs9IGZhc3RoYXNoX2FjY3VtX2NzdHJpbmcoJmhzLCBr ZXkucGxhbl9uYW1lKTsKKworCS8qCisJICogaGFzaGZuX3Vuc3RhYmxlLmggcmVjb21tZW5kcyB1 c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrLiBJdCdzIG5vdAorCSAqIGNsZWFyIHRvIG1lIHdo YXQgdG8gZG8gaWYgdGhlcmUgYXJlIG11bHRpcGxlIHN0cmluZ3MsIHNvIGZvciBub3cgSSdtCisJ ICoganVzdCB1c2luZyB0aGUgdG90YWwgb2YgYWxsIG9mIHRoZSBsZW5ndGhzLgorCSAqLworCXJl dHVybiBmYXN0aGFzaF9maW5hbDMyKCZocywgc3BfbGVuKTsKK30KKworLyoKKyAqIExvb2sgZm9y IG1hdGNoaW5nIGVudHJpZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV90cm92ZV9z bGljZV9sb29rdXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLCBwZ3BhX2lkZW50aWZpZXIgKnJp ZCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJcGdwYV90cm92ZV9lbnRyeV9lbGVt ZW50ICplbGVtZW50OworCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7CisKKwlBc3NlcnQocmlk LT5vY2N1cnJlbmNlID49IDEpOworCisJa2V5LmFsaWFzX25hbWUgPSByaWQtPmFsaWFzX25hbWU7 CisJa2V5LnBhcnRpdGlvbl9uYW1lID0gcmlkLT5wYXJ0cmVsOworCWtleS5wbGFuX25hbWUgPSBy aWQtPnBsYW5fbmFtZTsKKworCWVsZW1lbnQgPSBwZ3BhX3Ryb3ZlX2VudHJ5X2xvb2t1cCh0c2xp Y2UtPmhhc2gsIGtleSk7CisKKwlpZiAoZWxlbWVudCAhPSBOVUxMKQorCXsKKwkJaW50CQkJaSA9 IC0xOworCisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihlbGVtZW50LT5pbmRleGVzLCBp KSkgPj0gMCkKKwkJeworCQkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmdHNsaWNlLT5lbnRy aWVzW2ldOworCisJCQkvKgorCQkJICogV2Uga25vdyB0aGF0IHRoaXMgdGFyZ2V0IG9yIG9uZSBv ZiBpdHMgZGVzY2VuZGVudHMgbWF0Y2hlcyB0aGUKKwkJCSAqIGlkZW50aWZpZXIgb24gdGhlIHRo cmVlIGtleSBmaWVsZHMgYWJvdmUsIGJ1dCB3ZSBkb24ndCBrbm93CisJCQkgKiB3aGljaCBkZXNj ZW5kZW50IG9yIHdoZXRoZXIgdGhlIG9jY3VyZW5jZSBhbmQgc2NoZW1hIGFsc28KKwkJCSAqIG1h dGNoLgorCQkJICovCisJCQlpZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHJpZCwg ZW50cnktPnRhcmdldCkpCisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCBpKTsK KwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfdHJvdmUuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92 ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NzljM2Y3NTc3OAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCkBA IC0wLDAgKzEsMTEzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3Ryb3ZlLmgK KyAqCSAgQWxsIG9mIHRoZSBhZHZpY2UgZ2l2ZW4gZm9yIGEgcGFydGljdWxhciBxdWVyeSwgYXBw cm9wcmlhdGVseQorICogICAgb3JnYW5pemVkIGZvciBjb252ZW5pZW50IGFjY2Vzcy4KKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oCisgKgor ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9UUk9WRV9ICisjZGVmaW5lIFBH UEFfVFJPVkVfSAorCisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1ZGUgIm5vZGVzL2Jp dG1hcHNldC5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3Ryb3ZlIHBncGFfdHJvdmU7CisKKy8q CisgKiBGbGFncyB0aGF0IGNhbiBiZSBzZXQgb24gYSBwZ3BhX3Ryb3ZlX2VudHJ5IHRvIGluZGlj YXRlIHdoYXQgaGFwcGVuZWQgd2hlbgorICogdHJ5aW5nIHRvIHBsYW4gdXNpbmcgYWR2aWNlLgor ICoKKyAqIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCBtZWFucyB0aGF0IHdlIGZvdW5kIHNvbWUgcGFy dCBvZiB0aGUgcXVlcnkgdGhhdCBhdAorICogbGVhc3QgcGFydGlhbGx5IG1hdGNoZWQgdGhlIHRh cmdldDsgZS5nLiBnaXZlbiBKT0lOX09SREVSKGEgYiksIHRoaXMgd291bGQKKyAqIGJlIHNldCBp ZiB3ZSBldmVyIHNhdyBhbnkgam9pbnJlbCBpbmNsdWRpbmcgZWl0aGVyICJhIiBvciAiYiIuCisg KgorICogUEdQQV9URV9NQVRDSF9GVUxMIG1lYW5zIHRoYXQgd2UgZm91bmQgYW4gZXhhY3QgbWF0 Y2ggZm9yIHRoZSB0YXJnZXQ7IGUuZy4KKyAqIGdpdmVuIEpPSU5fT1JERVIoYSBiKSwgdGhpcyB3 b3VsZCBiZSBzZXQgaWYgd2Ugc2F3IGEgam9pbnJlbCBjb250YWluaW5nCisgKiBleGFjdGx5ICJh IiBhbmQgImIiIGFuZCBub3RoaW5nIGVsc2UuCisgKgorICogUEdQQV9URV9JTkFQUExJQ0FCTEUg bWVhbnMgdGhhdCB0aGUgYWR2aWNlIGRvZXNuJ3QgcHJvcGVybHkgYXBwbHkgdG8gdGhlCisgKiB0 YXJnZXQ7IGUuZy4gSU5ERVhfU0NBTihmb28gYmFyX2lkeCkgd291bGQgYmUgc28gbWFya2VkIGlm IGJhcl9pZHggZG9lcyBub3QKKyAqIGV4aXN0IG9uIGZvby4gVGhlIGZhY3QgdGhhdCB0aGlzIGJp dCBoYXMgYmVlbiBzZXQgZG9lcyBub3QgbWVhbiB0aGF0IHRoZQorICogYWR2aWNlIGhhZCBubyBl ZmZlY3QuCisgKgorICogUEdQQV9URV9DT05GTElDVElORyBtZWFucyB0aGF0IGEgY29uZmxpY3Qg d2FzIGRldGVjdGVkIGJldHdlZW4gd2hhdCB0aGlzCisgKiBhZHZpY2Ugd2FudHMgYW5kIHdoYXQg c29tZSBvdGhlciBwbGFuIGFkdmljZSB3YW50czsgZS5nLiBKT0lOX09SREVSKGEgYikKKyAqIHdv dWxkIGNvbmZsaWN0IHdpdGggSEFTSF9KT0lOKGEpLCBiZWNhdXNlIHRoZSBmb3JtZXIgcmVxdWly ZXMgImEiIHRvIGJlIHRoZQorICogb3V0ZXIgdGFibGUgd2hpbGUgdGhlIGxhdHRlciByZXF1aXJl cyBpdCB0byBiZSB0aGUgaW5uZXIgdGFibGUuCisgKgorICogUEdQQV9URV9GQUlMRUQgbWVhbnMg dGhhdCB0aGUgcmVzdWx0aW5nIHBsYW4gZGlkIG5vdCBjb25mb3JtIHRvIHRoZSBhZHZpY2UuCisg Ki8KKyNkZWZpbmUgUEdQQV9URV9NQVRDSF9QQVJUSUFMCQkweDAwMDEKKyNkZWZpbmUgUEdQQV9U RV9NQVRDSF9GVUxMCQkJMHgwMDAyCisjZGVmaW5lIFBHUEFfVEVfSU5BUFBMSUNBQkxFCQkweDAw MDQKKyNkZWZpbmUgUEdQQV9URV9DT05GTElDVElORwkJCTB4MDAwOAorI2RlZmluZSBQR1BBX1RF X0ZBSUxFRAkJCQkweDAwMTAKKworLyoKKyAqIEVhY2ggZW50cnkgaW4gYSB0cm92ZSBvZiBhZHZp Y2UgcmVwcmVzZW50cyB0aGUgYXBwbGljYXRpb24gb2YgYSB0YWcgdG8KKyAqIGEgc2luZ2xlIHRh cmdldC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9lbnRyeQoreworCXBncGFfYWR2 aWNlX3RhZ190eXBlIHRhZzsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldDsKKwlpbnQJCQlm bGFnczsKK30gcGdwYV90cm92ZV9lbnRyeTsKKworLyoKKyAqIFdoYXQga2luZCBvZiBpbmZvcm1h dGlvbiBkb2VzIHRoZSBjYWxsZXIgd2FudCB0byBmaW5kIGluIGEgdHJvdmU/CisgKgorICogUEdQ QV9UUk9WRV9MT09LVVBfU0NBTiBtZWFucyB3ZSdyZSBsb29raW5nIGZvciBzY2FuIGFkdmljZS4K KyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9KT0lOIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIGpv aW4tcmVsYXRlZCBhZHZpY2UuCisgKiBUaGlzIGluY2x1ZGVzIGpvaW4gb3JkZXIgYWR2aWNlLCBq b2luIG1ldGhvZCBhZHZpY2UsIGFuZCBzZW1pam9pbi11bmlxdWVuZXNzCisgKiBhZHZpY2UuCisg KgorICogUEdQQV9UUk9WRV9MT09LVVBfUkVMIG1lYW5zIHdlJ3JlIGxvb2tpbmcgZm9yIGdlbmVy YWwgYWR2aWNlIGFib3V0IHRoaXMKKyAqIGEgUmVsT3B0SW5mbyB0aGF0IG1heSBjb3JyZXNwb25k IHRvIGVpdGhlciBhIHNjYW4gb3IgYSBqb2luLiBUaGlzIGluY2x1ZGVzCisgKiBnYXRoZXItcmVs YXRlZCBhZHZpY2UgYW5kIHBhcnRpdGlvbndpc2UgYWR2aWNlLiBOb3RlIHRoYXQgcGFydGl0aW9u d2lzZQorICogYWR2aWNlIG1pZ2h0IHNlZW0gbGlrZSBqb2luIGFkdmljZSwgYnV0IHRoYXQncyBu b3QgYSBoZWxwZnVsIHdheSBvZiB2aWV3aW5nCisgKiB0aGUgbWF0dGVyIGJlY2F1c2UgKDEpIHBh cnRpdGlvbndpc2UgYWR2aWNlIGlzIGFsc28gcmVsZXZhbnQgYXQgdGhlIHNjYW4KKyAqIGxldmVs IGFuZCAoMikgb3RoZXIgdHlwZXMgb2Ygam9pbiBhZHZpY2UgYWZmZWN0IG9ubHkgd2hhdCB0byBk byBmcm9tCisgKiBqb2luX3BhdGhfc2V0dXBfaG9vaywgYnV0IHBhcnRpdGlvbndpc2UgYWR2aWNl IGFmZmVjdHMgd2hhdCB0byBkbyBpbgorICogam9pbnJlbF9zZXR1cF9ob29rLgorICovCit0eXBl ZGVmIGVudW0gcGdwYV90cm92ZV9sb29rdXBfdHlwZQoreworCVBHUEFfVFJPVkVfTE9PS1VQX0pP SU4sCisJUEdQQV9UUk9WRV9MT09LVVBfUkVMLAorCVBHUEFfVFJPVkVfTE9PS1VQX1NDQU4KK30g cGdwYV90cm92ZV9sb29rdXBfdHlwZTsKKworLyoKKyAqIFRoaXMgc3RydWN0IGlzIHVzZWQgdG8g c3RvcmUgdGhlIHJlc3VsdCBvZiBhIHRyb3ZlIGxvb2t1cC4gRm9yIGVhY2ggbWVtYmVyCisgKiBv ZiAiaW5kZXhlcyIsIHRoZSBlbnRyeSBhdCB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXQgd2l0aGlu ICJlbnRyaWVzIiBpcyBvbmUKKyAqIG9mIHRoZSByZXN1bHRzLgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3Ryb3ZlX3Jlc3VsdAoreworCXBncGFfdHJvdmVfZW50cnkgKmVudHJpZXM7CisJQml0 bWFwc2V0ICAqaW5kZXhlczsKK30gcGdwYV90cm92ZV9yZXN1bHQ7CisKK2V4dGVybiBwZ3BhX3Ry b3ZlICpwZ3BhX2J1aWxkX3Ryb3ZlKExpc3QgKmFkdmljZV9pdGVtcyk7CitleHRlcm4gdm9pZCBw Z3BhX3Ryb3ZlX2xvb2t1cChwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkgIHBncGFfdHJvdmVf bG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgIGludCBucmlkcywKKwkJCQkJCQkgIHBncGFfaWRl bnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfcmVzdWx0ICpyZXN1bHQpOworZXh0 ZXJuIHZvaWQgcGdwYV90cm92ZV9sb29rdXBfYWxsKHBncGFfdHJvdmUgKnRyb3ZlLAorCQkJCQkJ CQkgIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2Vu dHJ5ICoqZW50cmllcywKKwkJCQkJCQkJICBpbnQgKm5lbnRyaWVzKTsKK2V4dGVybiBjaGFyICpw Z3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworZXh0ZXJu IHZvaWQgcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRyeSAqZW50cmllcywKKwkJ CQkJCQkJIEJpdG1hcHNldCAqaW5kZXhlcywgaW50IGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjRkZmZjNjAxMTRhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fk dmljZS9wZ3BhX3dhbGtlci5jCkBAIC0wLDAgKzEsOTY1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCisgKiBwZ3BhX3dhbGtlci5jCisgKgkgIFBsYW4gdHJlZSBpdGVyYXRpb24KKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYworICoKKyAq LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg InBncGFfam9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fs a2VyLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIv cGFyc2V0cmVlLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfd2Fsa19yZWN1cnNpdmVseShwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBib29sIHdp dGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vu cm9sbGVyLAorCQkJCQkJCQkgIExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJ ICBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3BhX3Byb2Nl c3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJ CQkJCQkJIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pOworCitzdGF0aWMgcGdwYV9xdWVyeV9m ZWF0dXJlICpwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LAorCQkJCQkJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkJUGxhbiAqcGxhbik7 CisKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVy ZXMsIEluZGV4IHJ0aSk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGlzKExpc3QgKmFjdGl2 ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIHZvaWQgcGdwYV9x Zl9hZGRfcGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbiwK KwkJCQkJCQkJICBMaXN0ICpydGFibGUpOworCitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2lu X29yZGVyX21hdGNoZXMocGdwYV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJCQkJCQkgICBJ bmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcnRfaWRl bnRpZmllcnMsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJ CQkJCQkJICAgYm9vbCB0b3BsZXZlbCk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9qb2luX29y ZGVyX21hdGNoZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJCQkJCQkJ CSAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpy dF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQp Oworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfc2NhbihwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5 LAorCQkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtl cl9jb250YWluc19mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJ CQkJCQkJCSBwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMp Oworc3RhdGljIGJvb2wgcGdwYV93YWxrZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5 LAorCQkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtl cl9jb250YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJ CQkJCQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIEluZGV4IHBncGFfd2Fsa2Vy X2dldF9ydGkoSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAq cnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCSBwZ3BhX2lkZW50aWZpZXIgKnJpZCk7CisKKy8qCisg KiBUb3AtbGV2ZWwgZW50cnlwb2ludCBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIFBv cHVsYXRlcyB3YWxrZXIgYmFzZWQgb24gYSB0cmF2ZXJzYWwgb2YgdGhlIFBsYW4gdHJlZXMgaW4g cHN0bXQuCisgKgorICogc2pfdW5pcXVlX3JlbHMgaXMgYSBsaXN0IG9mIHBncGFfc2pfdW5pcXVl X3JlbCBvYmplY3RzLCBvbmUgZm9yIGVhY2gKKyAqIHJlbGF0aW9uIHdlIGNvbnNpZGVyZWQgbWFr aW5nIHVuaXF1ZSBhcyBwYXJ0IG9mIHNlbWlqb2luIHBsYW5uaW5nLgorICovCit2b2lkCitwZ3Bh X3BsYW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3Rt dCAqcHN0bXQsCisJCQkJIExpc3QgKnNqX3VuaXF1ZV9yZWxzKQoreworCUxpc3RDZWxsICAgKmxj OworCUxpc3QJICAgKnNqX3VuaXF1ZV9ydGlzID0gTlVMTDsKKwlMaXN0CSAgICpzal9ub251bmlx dWVfcWZzID0gTlVMTDsKKworCS8qIEluaXRpYWxpemF0aW9uLiAqLworCW1lbXNldCh3YWxrZXIs IDAsIHNpemVvZihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQpKTsKKwl3YWxrZXItPnBzdG10ID0g cHN0bXQ7CisKKwkvKiBXYWxrIHRoZSBtYWluIHBsYW4gdHJlZS4gKi8KKwlwZ3BhX3dhbGtfcmVj dXJzaXZlbHkod2Fsa2VyLCBwc3RtdC0+cGxhblRyZWUsIDAsIE5VTEwsIE5JTCwgZmFsc2UpOwor CisJLyogTWFpbiBwbGFuIHRyZWUgd2FsayB3b24ndCByZWFjaCBzdWJwbGFucywgc28gd2FsayB0 aG9zZS4gKi8KKwlmb3JlYWNoKGxjLCBwc3RtdC0+c3VicGxhbnMpCisJeworCQlQbGFuCSAgICpw bGFuID0gbGZpcnN0KGxjKTsKKworCQlpZiAocGxhbiAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3Jl Y3Vyc2l2ZWx5KHdhbGtlciwgcGxhbiwgMCwgTlVMTCwgTklMLCBmYWxzZSk7CisJfQorCisJLyog QWRqdXN0IFJUSXMgZnJvbSBzal91bmlxdWVfcmVscyBmb3IgdGhlIGZsYXR0ZW5lZCByYW5nZSB0 YWJsZS4gKi8KKwlmb3JlYWNoX3B0cihwZ3BhX3NqX3VuaXF1ZV9yZWwsIHVyLCBzal91bmlxdWVf cmVscykKKwl7CisJCWludAkJCXJ0aW5kZXggPSAtMTsKKwkJaW50CQkJcnRvZmZzZXQgPSAwOwor CQlib29sCQlkdW1teSA9IGZhbHNlOworCQlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJ CS8qIElmIHRoaXMgaXMgYSBzdWJwbGFuLCBmaW5kIHRoZSByYW5nZSB0YWJsZSBvZmZzZXQuICov CisJCWlmICh1ci0+cGxhbl9uYW1lICE9IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9kZShTdWJQ bGFuUlRJbmZvLCBydGluZm8sIHBzdG10LT5zdWJydGluZm9zKQorCQkJeworCQkJCWlmIChzdHJj bXAodXItPnBsYW5fbmFtZSwgcnRpbmZvLT5wbGFuX25hbWUpID09IDApCisJCQkJeworCQkJCQly dG9mZnNldCA9IHJ0aW5mby0+cnRvZmZzZXQ7CisJCQkJCWR1bW15ID0gcnRpbmZvLT5kdW1teTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJCQll bG9nKEVSUk9SLCAibm8gcnRvZmZzZXQgZm9yIHBsYW4gJXMiLCB1ci0+cGxhbl9uYW1lKTsKKwkJ fQorCisJCS8qIElmIHRoaXMgZW50cnkgcGVydGFpbnMgdG8gYSBkdW1teSBzdWJxdWVyeSwgaWdu b3JlIGl0LiAqLworCQlpZiAoZHVtbXkpCisJCQljb250aW51ZTsKKworCQkvKiBPZmZzZXQgZWFj aCBlbnRyeSBmcm9tIHRoZSBvcmlnaW5hbCBzZXQuICovCisJCXdoaWxlICgocnRpbmRleCA9IGJt c19uZXh0X21lbWJlcih1ci0+cmVsaWRzLCBydGluZGV4KSkgPj0gMCkKKwkJCXJlbGlkcyA9IGJt c19hZGRfbWVtYmVyKHJlbGlkcywgcnRpbmRleCArIHJ0b2Zmc2V0KTsKKworCQkvKiBTdG9yZSB0 aGUgcmVzdWx0aW5nIHNldC4gKi8KKwkJc2pfdW5pcXVlX3J0aXMgPSBsYXBwZW5kKHNqX3VuaXF1 ZV9ydGlzLCByZWxpZHMpOworCX0KKworCS8qCisJICogUmVtb3ZlIGFueSBub24tdW5pcXVlIHNl bWpvaW4gcXVlcnkgZmVhdHVyZXMgZm9yIHdoaWNoIG1ha2luZyB0aGUgcmVsCisJICogdW5pcXVl IHdhc24ndCBjb25zaWRlcmVkLgorCSAqLworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVy ZSwgcWYsCisJCQkJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpPSU5fTk9OX1VO SVFVRV0pCisJeworCQlpZiAobGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0aXMsIHFmLT5yZWxpZHMp KQorCQkJc2pfbm9udW5pcXVlX3FmcyA9IGxhcHBlbmQoc2pfbm9udW5pcXVlX3FmcywgcWYpOwor CX0KKwl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFXSA9 IHNqX25vbnVuaXF1ZV9xZnM7CisKKwkvKgorCSAqIElmIHdlIGZpbmQgYW55IGNhc2VzIHdoZXJl IGFuYWx5c2lzIG9mIHRoZSBQbGFuIHRyZWUgc2hvd3MgdGhhdCB0aGUKKwkgKiBzZW1pam9pbiB3 YXMgbWFkZSB1bmlxdWUgYnV0IHRoaXMgcG9zc2liaWxpdHkgd2FzIG5ldmVyIG9ic2VydmVkIHRv IGJlCisJICogY29uc2lkZXJlZCBkdXJpbmcgcGxhbm5pbmcsIHRoZW4gd2UgaGF2ZSBhIGJ1ZyBz b21ld2hlcmUuCisJICovCisJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwKKwkJ CQl3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9VTklRVUVdKQorCXsKKwkJ aWYgKCFsaXN0X21lbWJlcihzal91bmlxdWVfcnRpcywgcWYtPnJlbGlkcykpCisJCXsKKwkJCVN0 cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCQlvdXRCaXRt YXBzZXQoJmJ1ZiwgcWYtPnJlbGlkcyk7CisJCQllbG9nKEVSUk9SLAorCQkJCSAidW5pcXVlIHNl bWlqb2luIGZvdW5kIGZvciByZWxpZHMgJXMgYnV0IG5vdCBvYnNlcnZlZCBkdXJpbmcgcGxhbm5p bmciLAorCQkJCSBidWYuZGF0YSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBNYWluIHdvcmtob3Jz ZSBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIElmIHdpdGhpbl9qb2luX3Byb2JsZW0g aXMgdHJ1ZSwgd2UgZW5jb3VudGVyZWQgYSBqb2luIGF0IHNvbWUgaGlnaGVyIGxldmVsCisgKiBv ZiB0aGUgdHJlZSB3YWxrIGFuZCBoYXZlbid0IHlldCBkZXNjZW5kZWQgb3V0IG9mIHRoZSBwb3J0 aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRoYXQgaXMgcGFydCBvZiB0aGF0IHNhbWUgam9pbiBw cm9ibGVtLiBXZSdyZSBubyBsb25nZXIgaW4gdGhlIHNhbWUKKyAqIGpvaW4gcHJvYmxlbSBpZiAo MSkgd2UgY3Jvc3MgaW50byBhIGRpZmZlcmVudCBzdWJxdWVyeSBvciAoMikgd2UgZGVzY2VuZAor ICogdGhyb3VnaCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwgYmVsb3cgd2hpY2ggYW55 IGZ1cnRoZXIgam9pbnMgd291bGQKKyAqIGJlIHBhcnRpdGlvbndpc2Ugam9pbnMgcGxhbm5lZCBz ZXBhcmF0ZWx5IGZyb20gdGhlIG91dGVyIGpvaW4gcHJvYmxlbS4KKyAqCisgKiBJZiBqb2luX3Vu cm9sbGVyICE9IE5VTEwsIHRoZSBqb2luIHVucm9sbGVyIGNvZGUgZXhwZWN0cyB1cyB0byBmaW5k IGEgam9pbgorICogdGhhdCBzaG91bGQgYmUgdW5yb2xsZWQgaW50byB0aGF0IG9iamVjdC4gVGhp cyBpbXBsaWVzIHRoYXQgd2UncmUgd2l0aGluIGEKKyAqIGpvaW4gcHJvYmxlbSwgYnV0IHRoZSBy ZXZlcnNlIGlzIG5vdCB0cnVlOiB3aGVuIHdlJ3ZlIHRyYXZlcnNlZCBhbGwgdGhlCisgKiBqb2lu cyBidXQgYXJlIHN0aWxsIGxvb2tpbmcgZm9yIHRoZSBzY2FuIHRoYXQgaXMgdGhlIGxlYWYgb2Yg dGhlIGpvaW4gdHJlZSwKKyAqIGpvaW5fdW5yb2xsZXIgd2lsbCBiZSBOVUxMIGJ1dCB3aXRoaW5f am9pbl9wcm9ibGVtIHdpbGwgYmUgdHJ1ZS4KKyAqCisgKiBFYWNoIGVsZW1lbnQgb2YgYWN0aXZl X3F1ZXJ5X2ZlYXR1cmVzIGNvcnJlc3BvbmRzIHRvIHNvbWUgaXRlbSBvZiBhZHZpY2UKKyAqIHRo YXQgbmVlZHMgdG8gZW51bWVyYXRlIGFsbCB0aGUgcmVsYXRpb25zIGl0IGFmZmVjdHMuIFdlIGFk ZCBSVElzIHdlIGZpbmQKKyAqIGR1cmluZyB0cmVlIHRyYXZlcnNhbCB0byBlYWNoIG9mIHRoZXNl IHF1ZXJ5IGZlYXR1cmVzLgorICoKKyAqIElmIGJlbmVhdGhfYW55X2dhdGhlciA9PSB0cnVlLCBz b21lIGhpZ2hlciBsZXZlbCBvZiB0aGUgdHJlZSB0cmF2ZXJzYWwgZm91bmQKKyAqIGEgR2F0aGVy IG9yIEdhdGhlciBNZXJnZSBub2RlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV93YWxrX3JlY3Vy c2l2ZWx5KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJ CQkgIGJvb2wgd2l0aGluX2pvaW5fcHJvYmxlbSwKKwkJCQkJICBwZ3BhX2pvaW5fdW5yb2xsZXIg KmpvaW5fdW5yb2xsZXIsCisJCQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJ CQkgIGJvb2wgYmVuZWF0aF9hbnlfZ2F0aGVyKQoreworCXBncGFfam9pbl91bnJvbGxlciAqb3V0 ZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJcGdwYV9qb2luX3Vucm9sbGVyICppbm5lcl9qb2lu X3Vucm9sbGVyID0gTlVMTDsKKwlib29sCQlqb2luX3Vucm9sbGVyX3RvcGxldmVsID0gZmFsc2U7 CisJTGlzdAkgICAqcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisJTGlzdENlbGwgICAq bGM7CisJTGlzdAkgICAqZXh0cmFwbGFucyA9IE5JTDsKKwlMaXN0CSAgICplbGlkZWRfbm9kZXMg PSBOSUw7CisKKwlBc3NlcnQod2l0aGluX2pvaW5fcHJvYmxlbSB8fCBqb2luX3Vucm9sbGVyID09 IE5VTEwpOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBu b2RlLCBkaXJlY3RseSBhZGQgaXQgdG8gdGhlIGxpc3QKKwkgKiBvZiBjdXJyZW50bHktYWN0aXZl IHF1ZXJ5IGZlYXR1cmVzLgorCSAqCisJICogT3RoZXJ3aXNlLCBjaGVjayB0aGUgZnV0dXJlX3F1 ZXJ5X2ZlYXR1cmVzIGxpc3QgdG8gc2VlIHdoZXRoZXIgdGhpcyB3YXMKKwkgKiBwcmV2aW91c2x5 IGlkZW50aWZpZWQgYXMgYSBwbGFuIG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmVhdGVkIGFzIGEK KwkgKiBxdWVyeSBmZWF0dXJlLgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBjYWxsZXIgYWxzbyBo YXMgYSBjb3B5IHRvIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgc28gd2UKKwkgKiBjYW4ndCBkZXN0 cnVjdGl2ZWx5IG1vZGlmeSBpdCB3aXRob3V0IG1ha2luZyBhIGNvcHkuCisJICovCisJaWYgKElz QShwbGFuLCBHYXRoZXIpKQorCXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBl bmQobGlzdF9jb3B5KGFjdGl2ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRkX2ZlYXR1 cmUod2Fsa2VyLCBQR1BBUUZfR0FUSEVSLCBwbGFuKSk7CisJCWJlbmVhdGhfYW55X2dhdGhlciA9 IHRydWU7CisJfQorCWVsc2UgaWYgKElzQShwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlhY3Rp dmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzKSwKKwkJCQkJcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVJfTUVS R0UsIHBsYW4pKTsKKwkJYmVuZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsK KwkJZm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgd2Fsa2VyLT5mdXR1cmVfcXVl cnlfZmVhdHVyZXMpCisJCXsKKwkJCWlmIChxZi0+cGxhbiA9PSBwbGFuKQorCQkJeworCQkJCWFj dGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpOwor CQkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IGxhcHBlbmQoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LCBxZik7CisJCQkJd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJCQlsaXN0X2Rl bGV0ZV9wdHIod2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMsIHBsYW4pOworCQkJCWJyZWFr OworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBGaW5kIGFsbCBlbGlkZWQgbm9kZXMgZm9yIHRo aXMgUGxhbiBub2RlLgorCSAqLworCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCB3YWxrZXIt PnBzdG10LT5lbGlkZWROb2RlcykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVfaWQgPT0gcGxhbi0+ cGxhbl9ub2RlX2lkKQorCQkJZWxpZGVkX25vZGVzID0gbGFwcGVuZChlbGlkZWRfbm9kZXMsIG4p OworCX0KKworCS8qIElmIHdlIGZvdW5kIGFueSBlbGlkZWRfbm9kZXMsIGhhbmRsZSB0aGVtLiAq LworCWlmIChlbGlkZWRfbm9kZXMgIT0gTklMKQorCXsKKwkJaW50CQkJbnVtX2VsaWRlZF9ub2Rl cyA9IGxpc3RfbGVuZ3RoKGVsaWRlZF9ub2Rlcyk7CisJCUVsaWRlZE5vZGUgKmxhc3RfZWxpZGVk X25vZGU7CisKKwkJLyoKKwkJICogUlRJcyBmb3IgdGhlIGZpbmFsIC0tIGFuZCB0aHVzIGxvZ2lj YWxseSB1cHBlcm1vc3QgLS0gZWxpZGVkIG5vZGUKKwkJICogc2hvdWxkIGJlIGNvbGxlY3RlZCBm b3IgcXVlcnkgZmVhdHVyZXMgcGFzc2VkIGRvd24gYnkgdGhlIGNhbGxlci4KKwkJICogSG93ZXZl ciwgZWxpZGVkIG5vZGVzIGFjdCBhcyBiYXJyaWVycyB0byBxdWVyeSBmZWF0dXJlcywgd2hpY2gK KwkJICogbWVhbnMgdGhhdCAoMSkgdGhlIHJlbWFpbmluZyBlbGlkZWQgbm9kZXMsIGlmIGFueSwg c2hvdWxkIGJlCisJCSAqIGlnbm9yZWQgZm9yIHB1cnBvc2VzIG9mIHF1ZXJ5IGZlYXR1cmVzIGFu ZCAoMikgdGhlIGxpc3Qgb2YgYWN0aXZlCisJCSAqIHF1ZXJ5IGZlYXR1cmVzIHNob3VsZCBiZSBy ZXNldCB0byBlbXB0eSBzbyB0aGF0IHdlIGRvIG5vdCBhZGQgUlRJcworCQkgKiBmcm9tIHRoZSBw bGFuIG5vZGUgdGhhdCBpcyBsb2dpY2FsbHkgYmVuZWF0aCB0aGUgZWxpZGVkIG5vZGUgdG8gdGhl CisJCSAqIHF1ZXJ5IGZlYXR1cmVzIHBhc3NlZCBkb3duIGZyb20gdGhlIGNhbGxlci4KKwkJICov CisJCWxhc3RfZWxpZGVkX25vZGUgPSBsaXN0X250aChlbGlkZWRfbm9kZXMsIG51bV9lbGlkZWRf bm9kZXMgLSAxKTsKKwkJcGdwYV9xZl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJ CQkJCQkgcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKGxhc3RfZWxpZGVkX25vZGUtPnJlbGlk cywKKwkJCQkJCQkJCQkJCQkgd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKSk7CisJCWFjdGl2ZV9xdWVy eV9mZWF0dXJlcyA9IE5JTDsKKworCQkvKgorCQkgKiBJZiB3ZSdyZSB3aXRoaW4gYSBqb2luIHBy b2JsZW0sIHRoZSBqb2luX3Vucm9sbGVyIGlzIHJlc3BvbnNpYmxlCisJCSAqIGZvciBidWlsZGlu ZyB0aGUgc2NhbiBmb3IgdGhlIGZpbmFsIGVsaWRlZCBub2RlLCBzbyB0aHJvdyBpdCBvdXQuCisJ CSAqLworCQlpZiAod2l0aGluX2pvaW5fcHJvYmxlbSkKKwkJCWVsaWRlZF9ub2RlcyA9IGxpc3Rf dHJ1bmNhdGUoZWxpZGVkX25vZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisKKwkJLyogQnVp bGQgc2NhbnMgZm9yIGFsbCAob3IgdGhlIHJlbWFpbmluZykgZWxpZGVkIG5vZGVzLiAqLworCQlm b3JlYWNoX25vZGUoRWxpZGVkTm9kZSwgZWxpZGVkX25vZGUsIGVsaWRlZF9ub2RlcykKKwkJewor CQkJKHZvaWQpIHBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHBsYW4sIGVsaWRlZF9ub2RlLAorCQkJ CQkJCQkgICBiZW5lYXRoX2FueV9nYXRoZXIsIHdpdGhpbl9qb2luX3Byb2JsZW0pOworCQl9CisK KwkJLyoKKwkJICogSWYgdGhlcmUgd2VyZSBhbnkgZWxpZGVkIG5vZGVzLCB0aGVuIGV2ZXJ5dGhp bmcgYmVuZWF0aCB0aG9zZSBub2RlcworCQkgKiBpcyBub3QgcGFydCBvZiB0aGUgc2FtZSBqb2lu IHByb2JsZW0uCisJCSAqCisJCSAqIEluIG1vcmUgZGV0YWlsLCBpZiBhbiBBcHBlbmQgb3IgTWVy Z2VBcHBlbmQgd2FzIGVsaWRlZCwgdGhlbiBhCisJCSAqIHBhcnRpdGlvbndpc2Ugam9pbiB3YXMg Y2hvc2VuIGFuZCBvbmx5IGEgc2luZ2xlIGNoaWxkIHN1cnZpdmVkOyBpZgorCQkgKiBhIFN1YnF1 ZXJ5U2NhbiB3YXMgZWxpZGVkLCB0aGUgc3VicXVlcnkgd2FzIHBsYW5uZWQgd2l0aG91dAorCQkg KiBmbGF0dGVuaW5nIGl0IGludG8gdGhlIHBhcmVudC4KKwkJICovCisJCXdpdGhpbl9qb2luX3By b2JsZW0gPSBmYWxzZTsKKwkJam9pbl91bnJvbGxlciA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBJ ZiB3ZSdyZSB3aXRoaW4gYSBqb2luIHByb2JsZW0sIHRoZSBqb2luIHVucm9sbGVyIGlzIHJlc3Bv bnNpYmxlIGZvcgorCSAqIGJ1aWxkaW5nIGFueSByZXF1aXJlZCBzY2FuIGZvciB0aGlzIG5vZGUu IElmIG5vdCwgd2UgZG8gaXQgaGVyZS4KKwkgKi8KKwlpZiAoIXdpdGhpbl9qb2luX3Byb2JsZW0p CisJCSh2b2lkKSBwZ3BhX2J1aWxkX3NjYW4od2Fsa2VyLCBwbGFuLCBOVUxMLCBiZW5lYXRoX2Fu eV9nYXRoZXIsIGZhbHNlKTsKKworCS8qCisJICogSWYgdGhpcyBqb2luIG5lZWRzIHRvIHVucm9s bGVkIGJ1dCB0aGVyZSdzIG5vIGpvaW4gdW5yb2xsZXIgYWxyZWFkeQorCSAqIGF2YWlsYWJsZSwg Y3JlYXRlIG9uZS4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlciA9PSBOVUxMICYmIHBncGFfaXNf am9pbihwbGFuKSkKKwl7CisJCWpvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2luX3Vucm9s bGVyKCk7CisJCWpvaW5fdW5yb2xsZXJfdG9wbGV2ZWwgPSB0cnVlOworCQl3aXRoaW5fam9pbl9w cm9ibGVtID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBpcyB0byBiZSB1bnJv bGxlZCwgcGdwYV91bnJvbGxfam9pbigpIHdpbGwgcmV0dXJuIHRoZSBqb2luCisJICogdW5yb2xs ZXIgb2JqZWN0IHRoYXQgc2hvdWxkIGJlIHBhc3NlZCBkb3duIHdoZW4gd2UgcmVjdXJzZSBpbnRv IHRoZQorCSAqIG91dGVyIGFuZCBpbm5lciBzaWRlcyBvZiB0aGUgcGxhbi4KKwkgKi8KKwlpZiAo am9pbl91bnJvbGxlciAhPSBOVUxMKQorCQlwZ3BhX3Vucm9sbF9qb2luKHdhbGtlciwgcGxhbiwg YmVuZWF0aF9hbnlfZ2F0aGVyLCBqb2luX3Vucm9sbGVyLAorCQkJCQkJICZvdXRlcl9qb2luX3Vu cm9sbGVyLCAmaW5uZXJfam9pbl91bnJvbGxlcik7CisKKwkvKiBBZGQgUlRJcyBmcm9tIHRoZSBw bGFuIG5vZGUgdG8gYWxsIGFjdGl2ZSBxdWVyeSBmZWF0dXJlcy4gKi8KKwlwZ3BhX3FmX2FkZF9w bGFuX3J0aXMoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBwbGFuLCB3YWxrZXItPnBzdG10LT5ydGFi bGUpOworCisJLyoKKwkgKiBSZWN1cnNlIGludG8gdGhlIG91dGVyIGFuZCBpbm5lciBzdWJ0cmVl cy4KKwkgKgorCSAqIEFzIGFuIGV4Y2VwdGlvbiwgaWYgdGhpcyBpcyBhIEZvcmVpZ25TY2FuLCBk b24ndCByZWN1cnNlLiBwb3N0Z3Jlc19mZHcKKwkgKiBzb21ldGltZXMgc3RvcmVzIGFuIEVQUSBy ZWNoZWNrIHBsYW4gaW4gcGxhbi0+bGVmdHJlZSwgYnV0IHRoYXQncyBnb2luZworCSAqIHRvIG1l bnRpb24gdGhlIHNhbWUgc2V0IG9mIHJlbGF0aW9ucyBhcyB0aGUgRm9yZWlnblNjYW4gaXRzZWxm LCBhbmQgd2UKKwkgKiBoYXZlIG5vIHdheSB0byBlbWl0IGFkdmljZSB0YXJnZXRpbmcgdGhlIEVQ USBjYXNlIHZzLiB0aGUgbm9uLUVQUSBjYXNlLgorCSAqIE1vcmVvdmVyLCBpdCdzIG5vdCBlbnRp cmVseSBjbGVhciB3aGF0IG90aGVyIEZEV3MgbWlnaHQgZG8gd2l0aCB0aGUKKwkgKiBsZWZ0IGFu ZCByaWdodCBzdWJ0cmVlcy4gTWF5YmUgc29tZSBiZXR0ZXIgaGFuZGxpbmcgaXMgbmVlZGVkIGhl cmUsIGJ1dAorCSAqIGZvciBub3csIHdlIGp1c3QgcHVudC4KKwkgKi8KKwlpZiAoIUlzQShwbGFu LCBGb3JlaWduU2NhbikpCisJeworCQlpZiAocGxhbi0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJCXBn cGFfd2Fsa19yZWN1cnNpdmVseSh3YWxrZXIsIHBsYW4tPmxlZnR0cmVlLCB3aXRoaW5fam9pbl9w cm9ibGVtLAorCQkJCQkJCQkgIG91dGVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0 dXJlcywKKwkJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCQlpZiAocGxhbi0+cmlnaHR0 cmVlICE9IE5VTEwpCisJCQlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLT5yaWdo dHRyZWUsIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgaW5uZXJfam9pbl91bnJvbGxl ciwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7 CisJfQorCisJLyoKKwkgKiBJZiB3ZSBjcmVhdGVkIGEgam9pbiB1bnJvbGxlciB1cCBhYm92ZSwg dGhlbiBpdCdzIGFsc28gb3VyIGpvaW4gdG8gdXNlCisJICogaXQgdG8gYnVpbGQgdGhlIGZpbmFs IHBncGFfdW5yb2xsZWRfam9pbiwgYW5kIHRvIGRlc3Ryb3kgdGhlIG9iamVjdC4KKwkgKi8KKwlp ZiAoam9pbl91bnJvbGxlcl90b3BsZXZlbCkKKwl7CisJCXBncGFfdW5yb2xsZWRfam9pbiAqdWpv aW47CisKKwkJdWpvaW4gPSBwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCBqb2luX3Vu cm9sbGVyKTsKKwkJd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucyA9CisJCQlsYXBwZW5k KHdhbGtlci0+dG9wbGV2ZWxfdW5yb2xsZWRfam9pbnMsIHVqb2luKTsKKwkJcGdwYV9kZXN0cm95 X2pvaW5fdW5yb2xsZXIoam9pbl91bnJvbGxlcik7CisJCSh2b2lkKSBwZ3BhX3Byb2Nlc3NfdW5y b2xsZWRfam9pbih3YWxrZXIsIHVqb2luKTsKKwl9CisKKwkvKgorCSAqIFNvbWUgcGxhbiB0eXBl cyBjYW4gaGF2ZSBhZGRpdGlvbmFsIGNoaWxkcmVuLiBOb2RlcyBsaWtlIEFwcGVuZCB0aGF0CisJ ICogY2FuIGhhdmUgYW55IG51bWJlciBvZiBjaGlsZHJlbiBzdG9yZSB0aGVtIGluIGEgTGlzdDsg YSBTdWJxdWVyeVNjYW4KKwkgKiBqdXN0IGhhcyBhIGZpZWxkIGZvciBhIHNpbmdsZSBhZGRpdGlv bmFsIFBsYW4uCisJICovCisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX0Fw cGVuZDoKKwkJCXsKKwkJCQlBcHBlbmQJICAgKmFwbGFuID0gKEFwcGVuZCAqKSBwbGFuOworCisJ CQkJZXh0cmFwbGFucyA9IGFwbGFuLT5hcHBlbmRwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2VtcHR5 KGFwbGFuLT5hcHByZWxpZHMpKQorCQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IGFjdGl2 ZV9xdWVyeV9mZWF0dXJlczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmQ6 CisJCQl7CisJCQkJTWVyZ2VBcHBlbmQgKm1hcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBwbGFuOwor CisJCQkJZXh0cmFwbGFucyA9IG1hcGxhbi0+bWVyZ2VwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2Vt cHR5KG1hcGxhbi0+YXBwcmVsaWRzKSkKKwkJCQkJcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBh Y3RpdmVfcXVlcnlfZmVhdHVyZXM7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcEFu ZDoKKwkJCWV4dHJhcGxhbnMgPSAoKEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJ CQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcE9yOgorCQkJZXh0cmFwbGFucyA9ICgoQml0bWFwT3Ig KikgcGxhbiktPmJpdG1hcHBsYW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46 CisKKwkJCS8qCisJCQkgKiBXZSBkb24ndCBwYXNzIGRvd24gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz IGFjcm9zcyBoZXJlLCBiZWNhdXNlCisJCQkgKiB0aG9zZSBhcmUgc3BlY2lmaWMgdG8gYSBzdWJx dWVyeSBsZXZlbC4KKwkJCSAqLworCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgKChT dWJxdWVyeVNjYW4gKikgcGxhbiktPnN1YnBsYW4sCisJCQkJCQkJCSAgMCwgTlVMTCwgTklMLCBi ZW5lYXRoX2FueV9nYXRoZXIpOworCQkJYnJlYWs7CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQkJ ZXh0cmFwbGFucyA9ICgoQ3VzdG9tU2NhbiAqKSBwbGFuKS0+Y3VzdG9tX3BsYW5zOworCQkJYnJl YWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwkvKiBJZiB3ZSBmb3VuZCBhIGxpc3Qg b2YgZXh0cmEgY2hpbGRyZW4sIGl0ZXJhdGUgb3ZlciBpdC4gKi8KKwlmb3JlYWNoKGxjLCBleHRy YXBsYW5zKQorCXsKKwkJUGxhbgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7CisKKwkJcGdwYV93 YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgc3VicGxhbiwgMCwgTlVMTCwgcHVzaGRvd25fcXVlcnlf ZmVhdHVyZXMsCisJCQkJCQkJICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KK30KKworLyoKKyAq IFBlcmZvcm0gZmluYWwgcHJvY2Vzc2luZyBvZiBhIG5ld2x5LWNvbnN0cnVjdGVkIHBncGFfdW5y b2xsZWRfam9pbi4gVGhpcworICogb25seSBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIHRvcGxldmVs IHBncGFfdW5yb2xsZWRfam9pbiBvYmplY3RzLCBzaW5jZSBpdAorICogcmVjdXJzZXMgdG8gc3Vi LWpvaW5zIGFzIG5lZWRlZC4KKyAqCisgKiBPdXIgZ29hbCBpcyB0byBhZGQgdGhlIHNldCBvZiBp bm5lciByZWxpZHMgdG8gdGhlIHJlbGV2YW50IGpvaW5fc3RyYXRlZ2llcworICogbGlzdCwgYW5k IHRvIGRvIHRoZSBzYW1lIGZvciBhbnkgc3ViLWpvaW5zLiBUbyB0aGF0IGVuZCwgdGhlIHJldHVy biB2YWx1ZQorICogaXMgdGhlIHNldCBvZiByZWxpZHMgZm91bmQgYmVuZWF0aCB0aGUgaW5uZXIg c2lkZSBvZiB0aGUgam9pbiwgYnV0IGl0IGlzCisgKiBleHBlY3RlZCB0aGF0IHRoZSB0b3BsZXZl bCBjYWxsZXIgd2lsbCBpZ25vcmUgdGhpcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwZ3Bh X3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCSAgIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pCit7CisJQml0bWFwc2V0ICAqYWxs X3JlbGlkcyA9IE5VTEw7CisKKwlmb3IgKGludCBrID0gMDsgayA8IHVqb2luLT5uaW5uZXI7ICsr aykKKwl7CisJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlciA9ICZ1am9pbi0+aW5uZXJba107CisJ CUJpdG1hcHNldCAgKnJlbGlkczsKKworCQlpZiAobWVtYmVyLT51bnJvbGxlZF9qb2luICE9IE5V TEwpCisJCQlyZWxpZHMgPSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIsCisJCQkJ CQkJCQkJCQltZW1iZXItPnVucm9sbGVkX2pvaW4pOworCQllbHNlCisJCXsKKwkJCUFzc2VydCht ZW1iZXItPnNjYW4gIT0gTlVMTCk7CisJCQlyZWxpZHMgPSBtZW1iZXItPnNjYW4tPnJlbGlkczsK KwkJfQorCQl3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1t1am9pbi0+c3RyYXRlZ3lba11dID0KKwkJ CWxhcHBlbmQod2Fsa2VyLT5qb2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSwgcmVs aWRzKTsKKwkJYWxsX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVycyhhbGxfcmVsaWRzLCByZWxpZHMp OworCX0KKworCXJldHVybiBhbGxfcmVsaWRzOworfQorCisvKgorICogQXJyYW5nZSBmb3IgdGhl IGdpdmVuIHBsYW4gbm9kZSB0byBiZSB0cmVhdGVkIGFzIGEgcXVlcnkgZmVhdHVyZSB3aGVuIHRo ZQorICogdHJlZSB3YWxrIHJlYWNoZXMgaXQuCisgKgorICogTWFrZSBzdXJlIHRvIG9ubHkgdXNl IHRoaXMgZm9yIG5vZGVzIHRoYXQgdGhlIHRyZWUgd2FsayBjYW4ndCBoYXZlIHJlYWNoZWQKKyAq IHlldCEKKyAqLwordm9pZAorcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtl cl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxhbikK K3sKKwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGdwYV9hZGRfZmVhdHVyZSh3YWxrZXIsIHR5 cGUsIHBsYW4pOworCisJd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMgPQorCQlsYXBwZW5k KHdhbGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7Cit9CisKKy8qCisgKiBSZXR1cm4g dGhlIGxhc3Qgb2YgYW55IGVsaWRlZCBub2RlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwbGFuIG5v ZGUgSUQuCisgKgorICogVGhlIGxhc3QgZWxpZGVkIG5vZGUgaXMgdGhlIG9uZSB0aGF0IHdvdWxk IGhhdmUgYmVlbiB1cHBlcm1vc3QgaW4gdGhlIHBsYW4KKyAqIHRyZWUgaGFkIGl0IG5vdCBiZWVu IHJlbW92ZWQgZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2lnLgorICovCitFbGlkZWROb2RlICoKK3Bn cGFfbGFzdF9lbGlkZWRfbm9kZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKnBsYW4pCit7CisJ RWxpZGVkTm9kZSAqZWxpZGVkX25vZGUgPSBOVUxMOworCisJZm9yZWFjaF9ub2RlKEVsaWRlZE5v ZGUsIG4sIHBzdG10LT5lbGlkZWROb2RlcykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVfaWQgPT0g cGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJZWxpZGVkX25vZGUgPSBuOworCX0KKworCXJldHVybiBl bGlkZWRfbm9kZTsKK30KKworLyoKKyAqIENlcnRhaW4gcGxhbiBub2RlcyBjYW4gcmVmZXIgdG8g YSBzZXQgb2YgUlRJcy4gRXh0cmFjdCBhbmQgcmV0dXJuIHRoZSBzZXQuCisgKi8KK0JpdG1hcHNl dCAqCitwZ3BhX3JlbGlkcyhQbGFuICpwbGFuKQoreworCWlmIChJc0EocGxhbiwgUmVzdWx0KSkK KwkJcmV0dXJuICgoUmVzdWx0ICopIHBsYW4pLT5yZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4s IEZvcmVpZ25TY2FuKSkKKwkJcmV0dXJuICgoRm9yZWlnblNjYW4gKikgcGxhbiktPmZzX3JlbGlk czsKKwllbHNlIGlmIChJc0EocGxhbiwgQXBwZW5kKSkKKwkJcmV0dXJuICgoQXBwZW5kICopIHBs YW4pLT5hcHByZWxpZHM7CisJZWxzZSBpZiAoSXNBKHBsYW4sIE1lcmdlQXBwZW5kKSkKKwkJcmV0 dXJuICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkczsKKworCXJldHVybiBOVUxMOwor fQorCisvKgorICogRXh0cmFjdCB0aGUgc2Nhbm5lZCBSVEkgZnJvbSBhIHBsYW4gbm9kZS4KKyAq CisgKiBSZXR1cm5zIDAgaWYgdGhlcmUgaXNuJ3Qgb25lLgorICovCitJbmRleAorcGdwYV9zY2Fu cmVsaWQoUGxhbiAqcGxhbikKK3sKKwlzd2l0Y2ggKG5vZGVUYWcocGxhbikpCisJeworCQljYXNl IFRfU2VxU2NhbjoKKwkJY2FzZSBUX1NhbXBsZVNjYW46CisJCWNhc2UgVF9CaXRtYXBIZWFwU2Nh bjoKKwkJY2FzZSBUX1RpZFNjYW46CisJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCWNhc2UgVF9T dWJxdWVyeVNjYW46CisJCWNhc2UgVF9GdW5jdGlvblNjYW46CisJCWNhc2UgVF9UYWJsZUZ1bmNT Y2FuOgorCQljYXNlIFRfVmFsdWVzU2NhbjoKKwkJY2FzZSBUX0N0ZVNjYW46CisJCWNhc2UgVF9O YW1lZFR1cGxlc3RvcmVTY2FuOgorCQljYXNlIFRfV29ya1RhYmxlU2NhbjoKKwkJY2FzZSBUX0Zv cmVpZ25TY2FuOgorCQljYXNlIFRfQ3VzdG9tU2NhbjoKKwkJY2FzZSBUX0luZGV4U2NhbjoKKwkJ Y2FzZSBUX0luZGV4T25seVNjYW46CisJCQlyZXR1cm4gKChTY2FuICopIHBsYW4pLT5zY2FucmVs aWQ7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBDb25zdHJ1Y3Qg YSBuZXcgQml0bWFwc2V0IGNvbnRhaW5pbmcgbm9uLVJURV9KT0lOIG1lbWJlcnMgb2YgJ3JlbGlk cycuCisgKi8KK0JpdG1hcHNldCAqCitwZ3BhX2ZpbHRlcl9vdXRfam9pbl9yZWxpZHMoQml0bWFw c2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSkKK3sKKwlpbnQJCQlydGkgPSAtMTsKKwlCaXRtYXBz ZXQgICpyZXN1bHQgPSBOVUxMOworCisJd2hpbGUgKChydGkgPSBibXNfbmV4dF9tZW1iZXIocmVs aWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcnRfZmV0Y2gocnRp LCBydGFibGUpOworCisJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4pCisJCQlyZXN1bHQg PSBibXNfYWRkX21lbWJlcihyZXN1bHQsIHJ0aSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoKKyAqIENyZWF0ZSBhIHBncGFfcXVlcnlfZmVhdHVyZSBhbmQgYWRkIGl0IHRvIHRoZSBs aXN0IG9mIGFsbCBxdWVyeSBmZWF0dXJlcworICogZm9yIHRoaXMgcGxhbi4KKyAqLworc3RhdGlj IHBncGFfcXVlcnlfZmVhdHVyZSAqCitwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLAorCQkJCSBwZ3BhX3FmX3R5cGUgdHlwZSwgUGxhbiAqcGxhbikKK3sK KwlwZ3BhX3F1ZXJ5X2ZlYXR1cmUgKnFmID0gcGFsbG9jMF9vYmplY3QocGdwYV9xdWVyeV9mZWF0 dXJlKTsKKworCXFmLT50eXBlID0gdHlwZTsKKwlxZi0+cGxhbiA9IHBsYW47CisKKwl3YWxrZXIt PnF1ZXJ5X2ZlYXR1cmVzW3FmLT50eXBlXSA9CisJCWxhcHBlbmQod2Fsa2VyLT5xdWVyeV9mZWF0 dXJlc1txZi0+dHlwZV0sIHFmKTsKKworCXJldHVybiBxZjsKK30KKworLyoKKyAqIEFkZCBhIHNp bmdsZSBSVEkgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLworc3RhdGljIHZvaWQK K3BncGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlfZmVhdHVyZXMsIEluZGV4IHJ0aSkK K3sKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUsIHFmLCBhY3RpdmVfcXVlcnlfZmVh dHVyZXMpCisJeworCQlxZi0+cmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocWYtPnJlbGlkcywgcnRp KTsKKwl9Cit9CisKKy8qCisgKiBBZGQgYSBzZXQgb2YgUlRJcyB0byBlYWNoIGFjdGl2ZSBxdWVy eSBmZWF0dXJlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcnRpcyhMaXN0ICphY3Rp dmVfcXVlcnlfZmVhdHVyZXMsIEJpdG1hcHNldCAqcmVsaWRzKQoreworCWZvcmVhY2hfcHRyKHBn cGFfcXVlcnlfZmVhdHVyZSwgcWYsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcykKKwl7CisJCXFmLT5y ZWxpZHMgPSBibXNfYWRkX21lbWJlcnMocWYtPnJlbGlkcywgcmVsaWRzKTsKKwl9Cit9CisKKy8q CisgKiBBZGQgUlRJcyBkaXJlY3RseSBjb250YWluZWQgaW4gYSBwbGFuIG5vZGUgdG8gZWFjaCBh Y3RpdmUgcXVlcnkgZmVhdHVyZSwKKyAqIGJ1dCBmaWx0ZXIgb3V0IGFueSBqb2luIFJUSXMsIHNp bmNlIGFkdmljZSBkb2Vzbid0IG1lbnRpb24gdGhvc2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3Bh X3FmX2FkZF9wbGFuX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBQbGFuICpwbGFu LCBMaXN0ICpydGFibGUpCit7CisJQml0bWFwc2V0ICAqcmVsaWRzOworCUluZGV4CQlydGk7CisK KwlpZiAoKHJlbGlkcyA9IHBncGFfcmVsaWRzKHBsYW4pKSAhPSBOVUxMKQorCXsKKwkJcmVsaWRz ID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgcnRhYmxlKTsKKwkJcGdwYV9x Zl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlfZmVhdHVyZXMsIHJlbGlkcyk7CisJfQorCWVsc2UgaWYg KChydGkgPSBwZ3BhX3NjYW5yZWxpZChwbGFuKSkgIT0gMCkKKwkJcGdwYV9xZl9hZGRfcnRpKGFj dGl2ZV9xdWVyeV9mZWF0dXJlcywgcnRpKTsKK30KKworLyoKKyAqIElmIHdlIGdlbmVyYXRlZCBw bGFuIGFkdmljZSB1c2luZyB0aGUgcHJvdmlkZWQgd2Fsa2VyIG9iamVjdCBhbmQgYXJyYXkKKyAq IG9mIGlkZW50aWZpZXJzLCB3b3VsZCB3ZSBnZW5lcmF0ZSB0aGUgc3BlY2lmaWVkIHRhZy90YXJn ZXQgY29tYmluYXRpb24/CisgKgorICogSWYgeWVzLCB0aGUgcGxhbiBjb25mb3JtcyB0byB0aGUg YWR2aWNlOyBpZiBubywgaXQgZG9lcyBub3QuIE5vdGUgdGhhdAorICogd2UgaGF2ZSBrbm93IHdh eSBvZiBrbm93aW5nIHdoZXRoZXIgdGhlIHBsYW5uZXIgd2FzIGZvcmNlZCB0byBlbWl0IGEgcGxh bgorICogdGhhdCBjb25mb3JtZWQgdG8gdGhlIGFkdmljZSBvciBqdXN0IGhhcHBlbmVkIHRvIGRv IHNvLgorICovCitib29sCitwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtl cl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVy cywKKwkJCQkJCSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkgcGdwYV9hZHZpY2Vf dGFyZ2V0ICp0YXJnZXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aCh3 YWxrZXItPnBzdG10LT5ydGFibGUpOworCUJpdG1hcHNldCAgKnJlbGlkcyA9IE5VTEw7CisKKwlp ZiAodGFnID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX3Vu cm9sbGVkX2pvaW4sIHVqb2luLCB3YWxrZXItPnRvcGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCQl7 CisJCQlpZiAocGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKHVqb2luLCBydGFibGVfbGVu Z3RoLAorCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywgdGFyZ2V0LCB0cnVlKSkKKwkJCQly ZXR1cm4gdHJ1ZTsKKwkJfQorCisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAodGFyZ2V0LT50 dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCXsKKwkJSW5kZXgJCXJ0aTsKKworCQly dGkgPSBwZ3BhX3dhbGtlcl9nZXRfcnRpKHJ0YWJsZV9sZW5ndGgsIHJ0X2lkZW50aWZpZXJzLCAm dGFyZ2V0LT5yaWQpOworCQlyZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24ocnRpKTsKKwl9CisJ ZWxzZQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9M SVNUKTsKKwkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRh cmdldC0+Y2hpbGRyZW4pCisJCXsKKwkJCUluZGV4CQlydGk7CisKKwkJCUFzc2VydChjaGlsZF90 YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpOworCQkJcnRpID0gcGdwYV9j b21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAg IHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkJICAgJmNoaWxkX3RhcmdldC0+cmlkKTsKKwkJ CWlmIChydGkgPT0gMCkKKwkJCQllbG9nKEVSUk9SLCAiY2Fubm90IGRldGVybWluZSBSVEkgZm9y IGFkdmljZSB0YXJnZXQiKTsKKwkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRp KTsKKwkJfQorCX0KKworCXN3aXRjaCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19KT0lOX09S REVSOgorCQkJLyogc2hvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGFib3ZlICovCisJCQlwZ191bnJl YWNoYWJsZSgpOworCQkJYnJlYWs7CisJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoK KwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJ IFBHUEFfU0NBTl9CSVRNQVBfSEVBUCwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQ QV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4o d2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX0ZPUkVJR04sCisJCQkJCQkJCQkJCSByZWxp ZHMpOworCQljYXNlIFBHUEFfVEFHX0lOREVYX09OTFlfU0NBTjoKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkJIFBHUEFfU0NBTl9JTkRFWF9P TkxZLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgor CQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkg UEdQQV9TQ0FOX0lOREVYLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19Q QVJUSVRJT05XSVNFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX3NjYW4od2Fsa2Vy LAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UsCisJCQkJCQkJCQkJCSByZWxp ZHMpOworCQljYXNlIFBHUEFfVEFHX1NFUV9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2Nv bnRhaW5zX3NjYW4od2Fsa2VyLAorCQkJCQkJCQkJCQkgUEdQQV9TQ0FOX1NFUSwKKwkJCQkJCQkJ CQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisJCQlyZXR1cm4gcGdwYV93 YWxrZXJfY29udGFpbnNfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJCSBQR1BBX1NDQU5fVElELAor CQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4g cGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZf R0FUSEVSLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVS R0U6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJ CQkJCQkJCQlQR1BBUUZfR0FUSEVSX01FUkdFLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2Fz ZSBQR1BBX1RBR19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2Nv bnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAorCQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX05PTl9V TklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VO SVFVRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJ CQkJCQkJCQkJCVBHUEFRRl9TRU1JSk9JTl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOwor CQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWlu c19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9IQVNIX0pPSU4sCisJCQkJCQkJCQkJ CSByZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQly ZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RS QVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2Ug UEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWlu c19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOLAorCQkJ CQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTEla RToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJ CQkJIEpTVFJBVF9ORVNURURfTE9PUF9NQVRFUklBTElaRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7 CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9P UF9NRU1PSVpFLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9QTEFJTjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwK KwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlk cyk7CisJCWNhc2UgUEdQQV9UQUdfTk9fR0FUSEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2Nv bnRhaW5zX25vX2dhdGhlcih3YWxrZXIsIHJlbGlkcyk7CisJfQorCisJLyogc2hvdWxkIG5vdCBn ZXQgaGVyZSAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIERvZXMgYW4gdW5yb2xsZWQg am9pbiBtYXRjaCB0aGUgam9pbiBvcmRlciBzcGVjaWZpZWQgYnkgYW4gYWR2aWNlIHRhcmdldD8K KyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyhwZ3BhX3Vu cm9sbGVkX2pvaW4gKnVqb2luLAorCQkJCQkJCSAgIEluZGV4IHJ0YWJsZV9sZW5ndGgsCisJCQkJ CQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkgICBwZ3BhX2Fk dmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkgICBib29sIHRvcGxldmVsKQoreworCWludAkJ CW5jaGlsZHJlbiA9IGxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pOworCisJQXNzZXJ0KHRh cmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKworCS8qIEF0IHRvcGxl dmVsLCB3ZSBhbGxvdyBhIHByZWZpeCBtYXRjaC4gKi8KKwlpZiAodG9wbGV2ZWwpCisJeworCQlp ZiAobmNoaWxkcmVuID4gdWpvaW4tPm5pbm5lciArIDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQor CWVsc2UKKwl7CisJCWlmIChuY2hpbGRyZW4gIT0gdWpvaW4tPm5pbm5lciArIDEpCisJCQlyZXR1 cm4gZmFsc2U7CisJfQorCisJLyogT3V0ZXJtb3N0IHJlbCBtdXN0IG1hdGNoLiAqLworCWlmICgh cGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJlcigmdWpvaW4tPm91dGVyLAorCQkJ CQkJCQkJCQkgICBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywK KwkJCQkJCQkJCQkJICAgbGluaXRpYWwodGFyZ2V0LT5jaGlsZHJlbikpKQorCQlyZXR1cm4gZmFs c2U7CisKKwkvKiBFYWNoIGlubmVyIHJlbCBtdXN0IG1hdGNoLiAqLworCWZvciAoaW50IG4gPSAw OyBuIDwgbmNoaWxkcmVuIC0gMTsgKytuKQorCXsKKwkJcGdwYV9hZHZpY2VfdGFyZ2V0ICpjaGls ZF90YXJnZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxkcmVuLCBuICsgMSk7CisKKwkJaWYgKCFw Z3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVyKCZ1am9pbi0+aW5uZXJbbl0sCisJ CQkJCQkJCQkJCQkgICBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJICAgcnRfaWRlbnRpZmll cnMsCisJCQkJCQkJCQkJCQkgICBjaGlsZF90YXJnZXQpKQorCQkJcmV0dXJuIGZhbHNlOworCX0K KworCXJldHVybiB0cnVlOworfQorCisvKgorICogRG9lcyBvbmUgbWVtYmVyIG9mIGFuIHVucm9s bGVkIGpvaW4gbWF0Y2ggYW4gYWR2aWNlIHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFf d2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIocGdwYV9qb2luX21lbWJlciAqbWVtYmVy LAorCQkJCQkJCQkJICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJICBwZ3BhX2lkZW50 aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCkKK3sKKwlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJaWYgKG1lbWJlci0+dW5y b2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJH RVRfT1JERVJFRF9MSVNUKQorCQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gcGdwYV93YWxrZXJf am9pbl9vcmRlcl9tYXRjaGVzKG1lbWJlci0+dW5yb2xsZWRfam9pbiwKKwkJCQkJCQkJCQkJICBy dGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJCQkg IHRhcmdldCwKKwkJCQkJCQkJCQkJICBmYWxzZSk7CisJfQorCisJQXNzZXJ0KG1lbWJlci0+c2Nh biAhPSBOVUxMKTsKKwlzd2l0Y2ggKHRhcmdldC0+dHR5cGUpCisJeworCQljYXNlIFBHUEFfVEFS R0VUX09SREVSRURfTElTVDoKKwkJCS8qIENvdWxkIG9ubHkgbWF0Y2ggYW4gdW5yb2xsZWQgam9p biAqLworCQkJcmV0dXJuIGZhbHNlOworCisJCWNhc2UgUEdQQV9UQVJHRVRfVU5PUkRFUkVEX0xJ U1Q6CisJCQl7CisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCBjaGlsZF90YXJn ZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCQkJeworCQkJCQlJbmRleAkJcnRpOworCisJCQkJCXJ0 aSA9IHBncGFfd2Fsa2VyX2dldF9ydGkocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsCisJ CQkJCQkJCQkJCSAgJmNoaWxkX3RhcmdldC0+cmlkKTsKKwkJCQkJcmVsaWRzID0gYm1zX2FkZF9t ZW1iZXIocmVsaWRzLCBydGkpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKworCQljYXNlIFBH UEFfVEFSR0VUX0lERU5USUZJRVI6CisJCQl7CisJCQkJSW5kZXgJCXJ0aTsKKworCQkJCXJ0aSA9 IHBncGFfd2Fsa2VyX2dldF9ydGkocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCQkJICAmdGFyZ2V0LT5yaWQpOworCQkJCXJlbGlkcyA9IGJtc19tYWtlX3NpbmdsZXRvbihy dGkpOworCQkJCWJyZWFrOworCQkJfQorCX0KKworCXJldHVybiBibXNfZXF1YWwobWVtYmVyLT5z Y2FuLT5yZWxpZHMsIHJlbGlkcyk7Cit9CisKKy8qCisgKiBEb2VzIHRoaXMgd2Fsa2VyIHNheSB0 aGF0IHRoZSBnaXZlbiBzY2FuIHN0cmF0ZWd5IHNob3VsZCBiZSB1c2VkIGZvciB0aGUKKyAqIGdp dmVuIHJlbGlkIHNldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2NvbnRhaW5zX3Nj YW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgIHBncGFfc2Nhbl9z dHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkg ICAqc2NhbnMgPSB3YWxrZXItPnNjYW5zW3N0cmF0ZWd5XTsKKworCWZvcmVhY2hfcHRyKHBncGFf c2Nhbiwgc2Nhbiwgc2NhbnMpCisJeworCQkvKgorCQkgKiBYWFguIElmIHRoaXMgaXMgaW5kZXgt cmVsYXRlZCBhZHZpY2UsIHdlIHNob3VsZCBhbHNvIHZhbGlkYXRlIHRoYXQKKwkJICogdGhlIGFk dmljZSB0YXJnZXQncyBpbmRleCB0YXJnZXQgbWF0Y2hlcyB0aGUgUGxhbiB0cmVlLgorCQkgKi8K KwkJaWYgKGJtc19lcXVhbChzY2FuLT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsK Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2VzIHRoaXMgd2Fsa2VyIHNheSB0 aGF0IHRoZSBnaXZlbiBxdWVyeSBmZWF0dXJlIGFwcGxpZXMgdG8gdGhlIGdpdmVuCisgKiByZWxp ZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJlKHBn cGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBwZ3BhX3FmX3R5cGUgdHlw ZSwKKwkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkgICAqcXVlcnlfZmVhdHVy ZXMgPSB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3R5cGVdOworCisJZm9yZWFjaF9wdHIocGdwYV9x dWVyeV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAoYm1zX2VxdWFsKHFm LT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIGpvaW4gc3Ry YXRlZ3kgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZQorICogZ2l2ZW4gcmVsaWQgc2V0PworICovCitz dGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQgKndhbGtlciwKKwkJCQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5LAorCQkJ CQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpqb2luX3N0cmF0ZWdpZXMgPSB3 YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihCaXRtYXBz ZXQsIGpzcmVsaWRzLCBqb2luX3N0cmF0ZWdpZXMpCisJeworCQlpZiAoYm1zX2VxdWFsKGpzcmVs aWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQor CisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiByZWxpZHMgc2hvdWxk IGJlIG1hcmtlZCBhcyBOT19HQVRIRVI/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9j b250YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJICAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJcmV0dXJuIGJtc19pc19zdWJzZXQocmVsaWRz LCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CisKKy8qCisgKiBDb252ZW5pZW5jZSBmdW5j dGlvbiB0byBjb252ZXJ0IGEgcmVsYXRpb24gaWRlbnRpZmllciB0byBhbiBSVEkuCisgKgorICog V2UgdGhyb3cgYW4gZXJyb3IgaGVyZSBiZWNhdXNlIHdlIGV4cGVjdCB0aGlzIHRvIGJlIHVzZWQg b24gc3lzdGVtLWdlbmVyYXRlZAorICogYWR2aWNlLiBIZW5jZSwgZmFpbHVyZSBoZXJlIGluZGlj YXRlcyBhbiBhZHZpY2UgZ2VuZXJhdGlvbiBidWcuCisgKi8KK3N0YXRpYyBJbmRleAorcGdwYV93 YWxrZXJfZ2V0X3J0aShJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQlwZ3BhX2lkZW50aWZpZXIg KnJ0X2lkZW50aWZpZXJzLAorCQkJCQlwZ3BhX2lkZW50aWZpZXIgKnJpZCkKK3sKKwlJbmRleAkJ cnRpOworCisJcnRpID0gcGdwYV9jb21wdXRlX3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xl bmd0aCwKKwkJCQkJCQkJCQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkgICByaWQpOwor CWlmIChydGkgPT0gMCkKKwkJZWxvZyhFUlJPUiwgImNhbm5vdCBkZXRlcm1pbmUgUlRJIGZvciBh ZHZpY2UgdGFyZ2V0Iik7CisJcmV0dXJuIHJ0aTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93 YWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjkxYTM2Y2Ez ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2Vy LmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfd2Fs a2VyLmgKKyAqCSAgUGxhbiB0cmVlIGl0ZXJhdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAx Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29u dHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpZm5kZWYgUEdQQV9XQUxLRVJfSAorI2RlZmluZSBQR1BBX1dBTEtFUl9ICisKKyNp bmNsdWRlICJwZ3BhX2FzdC5oIgorI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUgInBn cGFfc2Nhbi5oIgorCisvKgorICogV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwgd2Ugc2hvdWxkIGVt aXQgZWl0aGVyIFNFTUlKT0lOX1VOSVFVRSBhZHZpY2Ugb3IKKyAqIFNFTUlKT0lOX05PTl9VTklR VUUgYWR2aWNlIGZvciBlYWNoIHNlbWlqb2luIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGNob3Nl CisgKiB0byBpbXBsZW1lbnQgaXQgYXMgYSBzZW1pam9pbiBvciB3aGV0aGVyIHdlIGluc3RlYWQg Y2hvc2UgdG8gbWFrZSB0aGUKKyAqIG51bGxhYmxlIHNpZGUgdW5pcXVlIGFuZCB0aGVuIHBlcmZv cm0gYW4gaW5uZXIgam9pbi4gV2hlbiB0aGUgbWFrZS11bmlxdWUKKyAqIHN0cmF0ZWd5IGlzIG5v dCBjaG9zZW4sIGl0J3Mgbm90IGVhc3kgdG8gdGVsbCBmcm9tIHRoZSBmaW5hbCBwbGFuIHRyZWUK KyAqIHdoZXRoZXIgaXQgd2FzIGNvbnNpZGVyZWQuIFRoYXQncyBhd2t3YXJkLCBiZWNhdXNlIHdl IGRvbid0IHdhbnQgdG8gZW1pdAorICogdXNlbGVzcyBTRU1JSk9JTl9OT05fVU5JUVVFIGFkdmlj ZSB3aGVuIHRoZXJlIHdhcyBubyBkZWNpc2lvbiB0byBiZSBtYWRlLgorICoKKyAqIFRvIGF2b2lk IHRoYXQsIGR1cmluZyBwbGFubmluZywgd2UgY3JlYXRlIGEgcGdwYV9zal91bmlxdWVfcmVsIGZv ciBlYWNoCisgKiByZWxhdGlvbiB0aGF0IHdlIGNvbnNpZGVyZWQgbWFraW5nIHVuaXF1ZSBmb3Ig cHVycG9zZXMgb2Ygc2VtaWpvaW4gcGxhbm5pbmcuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFf c2pfdW5pcXVlX3JlbAoreworCWNoYXIJICAgKnBsYW5fbmFtZTsKKwlCaXRtYXBzZXQgICpyZWxp ZHM7Cit9IHBncGFfc2pfdW5pcXVlX3JlbDsKKworLyoKKyAqIFdlIHVzZSB0aGUgdGVybSAicXVl cnkgZmVhdHVyZSIgdG8gcmVmZXIgdG8gcGxhbiBub2RlcyB0aGF0IGFyZSBpbnRlcmVzdGluZwor ICogaW4gdGhlIGZvbGxvd2luZyB3YXk6IHRvIGdlbmVyYXRlIGFkdmljZSwgd2UnbGwgbmVlZCB0 byBrbm93IHRoZSBzZXQgb2YKKyAqIHNhbWUtc3VicXVlcnksIG5vbi1qb2luIFJUSXMgb2NjdXJp bmcgYXQgb3IgYmVsb3cgdGhhdCBwbGFuIG5vZGUsIHdpdGhvdXQKKyAqIGFkbWl4dHVyZSBvZiBw YXJlbnQgYW5kIGNoaWxkIFJUSXMuCisgKgorICogRm9yIGV4YW1wbGUsIEdhdGhlciBub2Rlcywg ZGVzaWdpbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUiwgYW5kIEdhdGhlciBNZXJnZQorICogbm9kZXMs IGRlc2lnbmF0ZWQgYnkgUEdQQVFGX0dBVEhFUl9NRVJHRSwgYXJlIHF1ZXJ5IGZlYXR1cmVzLCBi ZWNhdXNlIHdlJ2xsCisgKiB3YW50IHRvIGFkbWl0IHNvbWUga2luZCBvZiBhZHZpY2UgdGhhdCBk ZXNjcmliZXMgdGhlIHBvcnRpb24gb2YgdGhlIHBsYW4KKyAqIHRyZWUgdGhhdCBhcHBlYXJzIGJl bmVhdGggdGhvc2Ugbm9kZXMuCisgKgorICogRWFjaCBzZW1pam9pbiBjYW4gYmUgaW1wbGVtZW50 ZWQgZWl0aGVyIGJ5IGRpcmVjdGx5IHBlcmZvcm1pbmcgYSBzZW1pam9pbiwKKyAqIG9yIGJ5IG1h a2luZyBvbmUgc2lkZSB1bmlxdWUgYW5kIHRoZW4gcGVyZm9ybWluZyBhIG5vcm1hbCBqb2luLiBF aXRoZXIgd2F5LAorICogd2UgdXNlIGEgcXVlcnkgZmVhdHVyZSB0byBub3RpY2Ugd2hhdCBkZWNp c2lvbiB3YXMgbWFkZSwgc28gdGhhdCB3ZSBjYW4KKyAqIGRlc2NyaWJlIGl0IGJ5IGVudW1lcmF0 aW5nIHRoZSBSVElzIG9uIHRoYXQgc2lkZSBvZiB0aGUgam9pbi4KKyAqCisgKiBUbyBlbGFib3Jh dGUgb24gdGhlICJubyBhZG1peHR1cmUgb2YgcGFyZW50IGFuZCBjaGlsZCBSVElzIiBydWxlLCBp biBhbGwgb2YKKyAqIHRoZXNlIGNhc2VzLCBpZiB0aGUgZW50aXJldHkgb2YgYW4gaW5oZXJpdGFu Y2UgaGllcmFyY2h5IGFwcGVhcnMgYmVuZWF0aAorICogdGhlIHF1ZXJ5IGZlYXR1cmUsIHdlIG9u bHkgd2FudCB0byBuYW1lIHRoZSBwYXJlbnQgdGFibGUuIEJ1dCBpdCdzIGFsc28KKyAqIHBvc3Np YmxlIHRvIGhhdmUgY2FzZXMgd2hlcmUgd2UgbXVzdCBuYW1lIGNoaWxkIHRhYmxlcy4gVGhpcyBp cyBwYXJ0aWN1bGFybHkKKyAqIGxpa2VseSB0byBoYXBwZW4gd2hlbiBwYXJ0aXRpb253aXNlIGpv aW4gaXMgaW4gdXNlLCBidXQgY291bGQgaGFwcGVuIGZvcgorICogR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSBldmVuIHdpdGhvdXQgdGhhdCwgaWYgb25lIG9mIHRob3NlIGFwcGVhcnMgYmVsb3cKKyAq IGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGZvciBhIHNpbmdsZSB0YWJsZS4KKyAqLwor dHlwZWRlZiBlbnVtIHBncGFfcWZfdHlwZQoreworCVBHUEFRRl9HQVRIRVIsCisJUEdQQVFGX0dB VEhFUl9NRVJHRSwKKwlQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BBUUZfU0VNSUpP SU5fVU5JUVVFCisJLyogdXBkYXRlIE5VTV9QR1BBX1FGX1RZUEVTIGlmIHlvdSBhZGQgYW55dGhp bmcgaGVyZSAqLworfSBwZ3BhX3FmX3R5cGU7CisKKyNkZWZpbmUgTlVNX1BHUEFfUUZfVFlQRVMg KChpbnQpIFBHUEFRRl9TRU1JSk9JTl9VTklRVUUgKyAxKQorCisvKgorICogRm9yIGVhY2ggcXVl cnkgZmVhdHVyZSwgd2Uga2VlcCB0cmFjayBvZiB0aGUgZmVhdHVyZSB0eXBlIGFuZCB0aGUgc2V0 IG9mCisgKiByZWxpZHMgdGhhdCB3ZSBmb3VuZCB1bmRlcm5lYXRoIHRoZSByZWxldmFudCBwbGFu IG5vZGUuIFNlZSB0aGUgY29tbWVudHMKKyAqIG9uIHBncGFfcWZfdHlwZSwgYWJvdmUsIGZvciBh ZGRpdGlvbmFsIGRldGFpbHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfcXVlcnlfZmVhdHVy ZQoreworCXBncGFfcWZfdHlwZSB0eXBlOworCVBsYW4JICAgKnBsYW47CisJQml0bWFwc2V0ICAq cmVsaWRzOworfSBwZ3BhX3F1ZXJ5X2ZlYXR1cmU7CisKKy8qCisgKiBDb250ZXh0IG9iamVjdCBm b3IgcGxhbiB0cmVlIHdhbGsuCisgKgorICogcHN0bXQgaXMgdGhlIFBsYW5uZWRTdG10IHdlJ3Jl IHN0dWR5aW5nLgorICoKKyAqIHNjYW5zIGlzIGFuIGFycmF5IG9mIGxpc3RzIG9mIHBncGFfc2Nh biBvYmplY3RzLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICogdGhlIHNjYW4ncyBwZ3BhX3Nj YW5fc3RyYXRlZ3kuCisgKgorICogbm9fZ2F0aGVyX3NjYW5zIGlzIHRoZSBzZXQgb2Ygc2NhbiBS VElzIHRoYXQgZG8gbm90IGFwcGVhciBiZW5lYXRoIGFueQorICogR2F0aGVyIG9yIEdhdGhlciBN ZXJnZSBub2RlLgorICoKKyAqIHRvcGxldmVsX3Vucm9sbGVkX2pvaW5zIGlzIGEgbGlzdCBvZiBh bGwgcGdwYV91bnJvbGxlZF9qb2luIG9iamVjdHMgdGhhdAorICogYXJlIG5vdCBhIGNoaWxkIG9m IHNvbWUgb3RoZXIgcGdwYV91bnJvbGxlZF9qb2luLgorICoKKyAqIGpvaW5fc3RyYXRlZ3kgaXMg YW4gYXJyYXkgb2YgbGlzdHMgb2YgQml0bWFwc2V0IG9iamVjdHMuIEVhY2ggQml0bWFwc2V0Cisg KiBpcyB0aGUgc2V0IG9mIHJlbGlkcyB0aGF0IGFwcGVhcnMgb24gdGhlIGlubmVyIHNpZGUgb2Yg c29tZSBqb2luIChleGNsdWRpbmcKKyAqIFJUSXMgZnJvbSBwYXJ0aXRpb24gY2hpbGRyZW4gYW5k IHN1YnF1ZXJpZXMpLiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieQorICogcGdwYV9qb2luX3N0cmF0 ZWd5LgorICoKKyAqIHF1ZXJ5X2ZlYXR1cmVzIGlzIGFuIGFycmF5IGxpc3RzIG9mIHBncGFfcXVl cnlfZmVhdHVyZSBvYmplY3RzLCBpbmRleGVkCisgKiBieSBwZ3BhX3FmX3R5cGUuCisgKgorICog ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGlzIG9ubHkgdXNlZCBkdXJpbmcgdGhlIHBsYW4gdHJlZSB3 YWxrIGFuZCBzaG91bGQKKyAqIGJlIGVtcHR5IHdoZW4gdGhlIHRyZWUgd2FsayBjb25jbHVkZXMu IEl0IGlzIGEgbGlzdCBvZiBwZ3BhX3F1ZXJ5X2ZlYXR1cmUKKyAqIG9iamVjdHMgZm9yIFBsYW4g bm9kZXMgdGhhdCB0aGUgcGxhbiB0cmVlIHdhbGsgaGFzIG5vdCB5ZXQgZW5jb3VudGVyZWQ7Cisg KiB3aGVuIGVuY291bnRlcmVkLCB0aGV5IHdpbGwgYmUgbW92ZWQgdG8gdGhlIGxpc3Qgb2YgYWN0 aXZlIHF1ZXJ5IGZlYXR1cmVzCisgKiB0aGF0IGlzIHByb3BhZ2F0ZWQgdmlhIHRoZSBjYWxsIHN0 YWNrLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQKK3sKKwlQ bGFubmVkU3RtdCAqcHN0bXQ7CisJTGlzdAkgICAqc2NhbnNbTlVNX1BHUEFfU0NBTl9TVFJBVEVH WV07CisJQml0bWFwc2V0ICAqbm9fZ2F0aGVyX3NjYW5zOworCUxpc3QJICAgKnRvcGxldmVsX3Vu cm9sbGVkX2pvaW5zOworCUxpc3QJICAgKmpvaW5fc3RyYXRlZ2llc1tOVU1fUEdQQV9KT0lOX1NU UkFURUdZXTsKKwlMaXN0CSAgICpxdWVyeV9mZWF0dXJlc1tOVU1fUEdQQV9RRl9UWVBFU107CisJ TGlzdAkgICAqZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzOworfSBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQ7CisKK2V4dGVybiB2b2lkIHBncGFfcGxhbl93YWxrZXIocGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIsCisJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCwKKwkJCQkJCQkgTGlzdCAq c2pfdW5pcXVlX3JlbHMpOworCitleHRlcm4gdm9pZCBwZ3BhX2FkZF9mdXR1cmVfZmVhdHVyZShw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCXBncGFfcWZfdHlwZSB0 eXBlLAorCQkJCQkJCQkJUGxhbiAqcGxhbik7CisKK2V4dGVybiBFbGlkZWROb2RlICpwZ3BhX2xh c3RfZWxpZGVkX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICpwbGFuKTsKK2V4dGVybiBC aXRtYXBzZXQgKnBncGFfcmVsaWRzKFBsYW4gKnBsYW4pOworZXh0ZXJuIEluZGV4IHBncGFfc2Nh bnJlbGlkKFBsYW4gKnBsYW4pOworZXh0ZXJuIEJpdG1hcHNldCAqcGdwYV9maWx0ZXJfb3V0X2pv aW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0ICpydGFibGUpOworCitleHRlcm4gYm9v bCBwZ3BhX3dhbGtlcl93b3VsZF9hZHZpc2UocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxr ZXIsCisJCQkJCQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJ CSBwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQkJCQkgcGdwYV9hZHZpY2VfdGFyZ2V0 ICp0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL2dhdGhlci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYjA0ZWQ1Y2YzMAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2dhdGhlci5zcWwKQEAgLTAs MCArMSw3OSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3Jr ZXJzX3Blcl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAwOworU0VUIHBh cmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemUg PSAwOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworCitDUkVBVEUgVEFCTEUgZ3Rf ZGltIChpZCBzZXJpYWwgcHJpbWFyeSBrZXksIGRpbSB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9t KCk6OnRleHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBn dF9kaW07CisKK0NSRUFURSBUQUJMRSBndF9mYWN0ICgKKwlpZCBpbnQgbm90IG51bGwsCisJZGlt X2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBndF9kaW0gKGlkKQorKSBXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9mYWN0CisJU0VMRUNUIGcs IChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFla RSBndF9mYWN0OworCistLSBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdpdGgg YSBwYXJhbGxlbCBoYXNoIGpvaW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CisKKy0tIEZvcmNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb2YgYm90 aCByZWxhdGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ2dhdGhlcigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBP UkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBhIHNlcGFyYXRlIEdhdGhlciBvciBH YXRoZXIgTWVyZ2Ugb3BlcmF0aW9uIGZvciBlYWNoIHJlbGF0aW9uLgorQkVHSU47CitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmIGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBn dF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdnYXRoZXIoKGQgZC9kLmQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQg PSBkLmlkIE9SREVSIEJZIGQuaWQ7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEgR2F0aGVyIG9yIEdh dGhlciBNZXJnZSBvbiBvbmUgcmVsYXRpb24gYnV0IG5vIHBhcmFsbGVsaXNtIG9uIG90aGVyLgor QkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShm KSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVy Z2UoZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQg T1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVy KGYpIG5vX2dhdGhlcihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9S REVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihk KSBub19nYXRoZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBubyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdl IHVzZSBhdCBhbGwuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn bm9fZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxF Q1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRF UiBCWSBkLmlkOworQ09NTUlUOworCistLSBDYW4ndCBmb3JjZSBHYXRoZXIgTWVyZ2Ugd2l0aG91 dCB0aGUgT1JERVIgQlkgY2xhdXNlLCBidXQganVzdCBHYXRoZXIgaXMgT0suCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBm IEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Nx bC9qb2luX29yZGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YWEyZmM2MmQzNAot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIu c3FsCkBAIC0wLDAgKzEsOTYgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFy YWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKKworQ1JFQVRFIFRBQkxFIGpvX2RpbTEgKGlk IGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMSAoaWQsIGRpbTEsIHZh bDEpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSAzKSArIDEKKwkg IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9fZGltMTsK K0NSRUFURSBUQUJMRSBqb19kaW0yIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQs IHZhbDIgaW50KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIGpvX2RpbTIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4 dCAnIHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGc7 CitWQUNVVU0gQU5BTFlaRSBqb19kaW0yOworCitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQg aW50IHByaW1hcnkga2V5LAorCWRpbTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpv X2RpbTEgKGlkKSwKKwlkaW0yX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0y IChpZCkKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8g am9fZmFjdAorCVNFTEVDVCBnLCAoZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CisKKy0tIFdlIGV4cGVj dCB0byBqb2luIHRvIGQyIGZpcnN0IGFuZCB0aGVuIGQxLCBzaW5jZSB0aGUgY29uZGl0aW9uIG9u IGQyCistLSBpcyBtb3JlIHNlbGVjdGl2ZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisKKy0tIEZvcmNlIGEgZmV3IGRpZmZl cmVudCBqb2luIG9yZGVycy4gU29tZSBvZiB0aGVzZSBhcmUgdmVyeSBpbmVmZmljaWVudCwKKy0t IGJ1dCB0aGUgcGxhbm5lciBjb25zaWRlcnMgdGhlbSBhbGwgdmlhYmxlLgorQkVHSU47CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBkMiknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJ TEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9f ZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0g MTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQyIGQx KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVy KGQxIGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlk CisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwx ID0gMSBBTkQgdmFsMiA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pv aW5fb3JkZXIoZiAoZDEgZDIpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBUaGUgdW51c3VhbCBm b3JtdWxhdGlvbiBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhlIHF1ZXJ5 CistLSBwbGFubmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90aGVyIGpv aW4gdHlwZSwgc28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGggYSBqb2lu IHR5cGUgdGhhdCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3Qg ZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9O IGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworCistLSBXZSBzaG91bGQg bm90IGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gam9pbiBmIHRvIGQxIGZpcnN0LCBi ZWNhdXNlCistLSB0aGF0IGlzIG5vdCBhIHZhbGlkIGpvaW4gb3JkZXIsIGJ1dCB3ZSBzaG91bGQg YmUgYWJsZSB0byBmb3JjZSB0aGUgcGxhbm5lcgorLS0gdG8gbWFrZSBlaXRoZXIgZDIgb3IgZiB0 aGUgZHJpdmluZyB0YWJsZS4KK0JFR0lOOworLS0gWFhYOiBUaGUgYWR2aWNlIGZlZWRiYWNrIHNh eXMgJ3BhcnRpYWxseSBtYXRjaGVkJyBoZXJlIHdoaWNoIGlzbid0IGV4YWN0bHkKKy0tIHdyb25n IGdpdmVuIHRoZSB3YXkgdGhhdCBmbGFnIGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUsIGJ1dCBpdCdz IGF0IHRoZSB2ZXJ5CistLSBsZWFzdCBjb25mdXNpbmcuIFNvbWV0aGluZyBzaG91bGQgcHJvYmFi bHkgYmUgaW1wcm92ZWQgaGVyZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn am9pbl9vcmRlcihmIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9J TiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBm LmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3Qg ZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9O IGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExBSU4gKENPU1RT IE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lO IChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlk ICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NPTU1J VDsKKworLS0gWFhYOiBhZGQgdGVzdHMgZm9yIGpvaW4gb3JkZXIgcHJlZml4IG1hdGNoaW5nCist LSBYWFg6IGpvaW5fb3JkZXIoanVzdG9uZXJlbCkgc2hvdWxkbid0IHJlcG9ydCBwYXJ0aWFsbHkg bWF0Y2hlZApkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJh dGVneS5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGViODIzZjFjMGUKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNx bApAQCAtMCwwICsxLDc2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFs bGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb2luX2RpbSAoaWQg c2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2RpbSAoZGltKSBTRUxFQ1QgcmFuZG9tKCk6OnRl eHQgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb2luX2Rp bTsKKworQ1JFQVRFIFRBQkxFIGpvaW5fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRp bV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9pbl9kaW0gKGlkKQorKSBXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBqb2luX2ZhY3QKKwlTRUxF Q1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK0NSRUFURSBJ TkRFWCBqb2luX2ZhY3RfZGltX2lkIE9OIGpvaW5fZmFjdCAoZGltX2lkKTsKK1ZBQ1VVTSBBTkFM WVpFIGpvaW5fZmFjdDsKKworLS0gV2UgZXhwZWN0IGEgaGFzaCBqb2luIGJ5IGRlZmF1bHQuCitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0 IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKworLS0gVHJ5IGZvcmNpbmcg ZWFjaCBqb2luIG1ldGhvZCBpbiB0dXJuIHdpdGggam9pbl9kaW0gYXMgdGhlIGlubmVyIHRhYmxl LgorLS0gQWxsIG9mIHRoZXNlIHNob3VsZCB3b3JrIGV4Y2VwdCBmb3IgTUVSR0VfSk9JTl9NQVRF UklBTElaRTsgdGhhdCB3aWxsCistLSBmYWlsLCBiZWNhdXNlIHRoZSBwbGFubmVyIGtub3dzIHRo YXQgam9pbl9kaW0gKGlkKSBpcyB1bmlxdWUsIGFuZCB3aWxsCistLSByZWZ1c2UgdG8gYWRkIG1h cmsvcmVzdG9yZSBvdmVyaGVhZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdIQVNIX0pPSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fTUFU RVJJQUxJWkUoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFj dCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX01BVEVSSUFMSVpFKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdO RVNURURfTE9PUF9QTEFJTihkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZDsKK0NPTU1JVDsKKworLS0gTm93IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4g dHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ug c2hvdWxkIHdvcmsuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn SEFTSF9KT0lOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNU ICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVSSUFMSVpF KGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2Rp bSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xP T1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1Qg KiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitD T01NSVQ7CisKKy0tIFdlIGNhbid0IGZvcmNlIGEgZm9yZWlnbiBqb2luIGJldHdlZW4gdGhlc2Ug dGFibGVzLCBiZWNhdXNlIHRoZXkKKy0tIGFyZW4ndCBmb3JlaWduIHRhYmxlcy4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2Zh Y3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09NTUlUOwpkaWZmIC0t Z2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbCBiL2Nv bnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZjODM4YjIyMDRkCi0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29sbGVjdG9yLnNxbApAQCAtMCww ICsxLDQxIEBACitDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlOworU0VUIGRlYnVnX3Bh cmFsbGVsX3F1ZXJ5ID0gb2ZmOworCistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3ZSd2 ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KTsKKworLS0gU2V0IGEgc21hbGwgYWR2aWNlIGNvbGxlY3Rpb24gbGltaXQgc28gdGhhdCB3ZSds bCBleGNlZWQgaXQuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9saW1pdCA9 IDI7CisKKy0tIFNldCB1cCBhIGR1bW15IHRhYmxlLgorQ1JFQVRFIFRBQkxFIGR1bW15X3RhYmxl IChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0KQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9 IGZhbHNlLCBwYXJhbGxlbF93b3JrZXJzID0gMCk7CisKKy0tIFRlc3QgcXVlcmllcy4KK1NFTEVD VCAqIEZST00gZHVtbXlfdGFibGUgYSwgZHVtbXlfdGFibGUgYjsKK1NFTEVDVCAqIEZST00gZHVt bXlfdGFibGU7CisKKy0tIFNob3VsZCByZXR1cm4gdGhlIGFkdmljZSBmcm9tIHRoZSBzZWNvbmQg dGVzdCBxdWVyeS4KK1NFTEVDVCBhZHZpY2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2Fk dmljZSgpIE9SREVSIEJZIGlkIERFU0MgTElNSVQgMTsKKworLS0gTm93IHRyeSBjbGVhcmluZyBh ZHZpY2UgYWdhaW4uCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOwor CistLSBSYWlzZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0IHRoZSBjb2xsZWN0b3IgdXNl cyBtdWx0aXBsZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdGlvbl9s aW1pdCA9IDIwMDA7CisKKy0tIFB1c2ggYSBidW5jaCBvZiBxdWVyaWVzIHRocm91Z2ggdGhlIGNv bGxlY3Rvci4KK0RPICQkCitCRUdJTgorCUZPUiB4IElOIDEuLjIwMDAgTE9PUAorCQlFWEVDVVRF ICdTRUxFQ1QgKiBGUk9NIGR1bW15X3RhYmxlJzsKKwlFTkQgTE9PUDsKK0VORAorJCQ7CisKKy0t IENoZWNrIHRoYXQgdGhlIGNvbGxlY3RvciB3b3JrZWQuCitTRUxFQ1QgQ09VTlQoKikgRlJPTSBw Z19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZSgpOworCistLSBBbmQgY2xlYXIgb25lIG1vcmUg dGltZSwgdG8gdmVyaWZ5IHRoYXQgdGhpcyBkb2Vzbid0IGNhdXNlIGEgcHJvYmxlbQorLS0gZXZl biB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiBlbnRyaWVzLgorU0VMRUNUIHBnX2NsZWFyX2NvbGxl Y3RlZF9sb2NhbF9hZHZpY2UoKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3BhcnRpdGlvbndpc2Uuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0 aW9ud2lzZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU0MmMw NjExNzYwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFy dGl0aW9ud2lzZS5zcWwKQEAgLTAsMCArMSw3OCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOwor U0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworU0VUIGVuYWJsZV9wYXJ0 aXRpb253aXNlX2pvaW4gPSB0cnVlOworCitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHBy aW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworQ1JFQVRFIFRBQkxFIHB0MWEgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEp IHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBU QUJMRSBwdDFiIFBBUlRJVElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAw MSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQx YyBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGlt MSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsg MQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQx OworCitDUkVBVEUgVEFCTEUgcHQyIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0yIHRleHQs IHZhbDIgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MmEg UEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1 dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJiIFBBUlRJVElPTiBP RiBwdDIgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQyYyBQQVJUSVRJT04gT0YgcHQyIEZP UiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVk ID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQyIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywg J3NvbWUgb3RoZXIgdGV4dCAnIHx8IGcsIChnICUgNSkgKyAxCisJICBGUk9NIGdlbmVyYXRlX3Nl cmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDI7CisKK0NSRUFURSBUQUJMRSBwdDMg KGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTMgdGV4dCwgdmFsMyBpbnQpCisJUEFSVElUSU9O IEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQzYSBQQVJUSVRJT04gT0YgcHQzIEZPUiBW QUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFs c2UpOworQ1JFQVRFIFRBQkxFIHB0M2IgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00g KDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NS RUFURSBUQUJMRSBwdDNjIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0 byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5U TyBwdDMgKGlkLCBkaW0zLCB2YWwzKQorCVNFTEVDVCBnLCAnYSB0aGlyZCByYW5kb20gdGV4dCAn IHx8IGcsIChnICUgNykgKyAxCisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitW QUNVVU0gQU5BTFlaRSBwdDM7CisKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoIChpZCBpbnRlZ2Vy IHByaW1hcnkga2V5LCBkaW1tIHRleHQsIHZhbG0gaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAo aWQpOworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hhIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisg ICAgRk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTUwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJs ZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGIgUEFSVElUSU9OIE9GIHB0bWlz bWF0Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDE1MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0bWlzbWF0Y2ggKGlkLCBkaW1t LCB2YWxtKQorCVNFTEVDVCBnLCAneWV0IGFub3RoZXIgdGV4dCAnIHx8IGcsIChnICUgMikgKyAx CisJICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdG1p c21hdGNoOworCitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlk CisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKworLS0gU3VwcHJl c3MgcGFydGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0IHBhcnRpYWxseS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKHB0MSBwdDIg cHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBw dDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisg ICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBM QUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQz IFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsKKworLS0gQ2FuJ3QgZm9yY2Ug YSBwYXJ0aXRpb253aXNlIGpvaW4gd2l0aCBhIG1pc21hdGNoZWQgdGFibGUuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0bWlz bWF0Y2gpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBwdDEsIHB0bWlzbWF0Y2ggV0hFUkUgcHQxLmlkID0gcHRtaXNtYXRjaC5pZDsKK0NPTU1JVDsK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjI1NDE2YTc1ZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwKQEAgLTAsMCArMSwxOTUgQEAKK0xPQUQgJ3BnX3BsYW5f YWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBz ZXFfcGFnZV9jb3N0ID0gMC4xOworU0VUIHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1 X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNwdV9pbmRleF90dXBsZV9jb3N0ID0gMDsKKworQ1JFQVRF IFRBQkxFIHNjYW5fdGFibGUgKGEgaW50IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gc2Nhbl90YWJsZQorCVNFTEVD VCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7 CitDUkVBVEUgSU5ERVggc2Nhbl90YWJsZV9iIE9OIHNjYW5fdGFibGUgVVNJTkcgYnJpbiAoYik7 CitWQUNVVU0gQU5BTFlaRSBzY2FuX3RhYmxlOworCistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKwor LS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworCistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVS RSBhID0gMTsKKworLS0gQml0bWFwIGhlYXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQg OCc7CisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CisKKy0tIFRJRCByYW5n ZSBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisKKy0t IFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3VyIHRlc3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlw ZSB0aGV5CistLSB3YW50ZWQgdG8gdXNlIGFueXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JF R0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3Rh YmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90 YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdI RVJFIGIgPiAnc29tZSB0ZXh0IDgnOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVS RSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7CisKKy0tIFRyeSB0 byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0 eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdpbGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAg aGVhcCBzY2FuIGNvdWxkIHBvdGVudGlhbGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3 ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2VzIG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3Nz aWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFjayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nh bl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1Qg KiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJ RF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNF TEVDVCAqIEZST00gc2Nhbl90YWJsZTsKK0NPTU1JVDsKKworLS0gVHJ5IGFnYWluIHRvIGZvcmNl IGluZGV4IHVzZS4gVGhpcyBzaG91bGQgbm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9TQ0FOCist LSBhbmQgQklUTUFQX0hFQVBfU0NBTiwgYnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2FuJ3QgYmUg Zm9yY2VkIGJlY2F1c2UgdGhlCistLSBxdWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGluY2x1ZGVk IGluIHRoZSBpbmRleC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7 CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjZSBhIHBy aW1hcnkga2V5IGxvb2t1cCB0byB1c2UgYSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2Fu J3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4g bGlzdCkKKy0tIG9yIGEgVElEIHNjYW4gKGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFs KS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjaWJs eSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRvIGFuIGluZGV4IHNjYW4sIGJ1dCB3ZSBj YW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRleCB0aGF0IHRoZSBwbGFubmVyIHRoaW5r cyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5f dGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJs ZV9iKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNl IG9mIGEgc2VxdWVudGlhbCBzY2FuIGluIHBsYWNlIG9mIGEgYml0bWFwIGhlYXAgc2NhbiwKKy0t IGJ1dCBhIHBsYWluIGluZGV4IHNjYW4gb24gYSBCUklOIGluZGV4IGlzIG5vdCBwb3NzaWJsZS4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2Fu X3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUKKwlXSEVSRSBiID4gJ3NvbWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworQ09NTUlUOworCistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNl cXVlbnRpYWwgc2NhbiByYXRoZXIgdGhhbiBhIFRJRCBzY2FuIG9yCistLSBUSUQgcmFuZ2Ugc2Nh bi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihz Y2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygx LDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CitDT01NSVQ7CisKKy0tIFRlc3QgbW9yZSBjb21wbGV4 IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5zLgorQkVHSU47CistLSBTaG91bGQgc3RpbGwgd29y ayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CistLSBCdXQgbm90IGlmIHdlIG1lbnRpb24gdGhlIHdyb25nIHNjaGVtYS4K K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKy0tIEl0J3MgT0sgdG8g cmVwZWF0IHRoZSBzYW1lIGFkdmljZS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworLS0gQnV0IGl0IGRvZXNuJ3Qgd29yayBpZiB0 aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4gbm90aW9uYWxseSBkaWZmZXJlbnQuCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7 CitDT01NSVQ7CisKKy0tIFRlc3QgYXNzb3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJF IGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1ND QU4obm90aGluZyB3aGF0c29ldmVyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUg V0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8g bXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFsaWFzLgorQkVHSU47CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEs MTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lO IHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTihzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUg cyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZU IEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNFUV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExF RlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3Rh YmxlIHMgT04gZyA9IHMuYTsKK0NPTU1JVDsKKworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZl ciB0byBzY2FucyB3aXRoaW4gYSBzdWJxdWVyeS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9B RFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBh ID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQg MCk7CitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0g MSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7 CistLSBTaG91bGQgbWF0Y2ggZmlyc3QgcXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc0B4KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUg YSA9IDEgT0ZGU0VUIDApIHg7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VM RUNUICogRlJPTSAoU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VU IDApOworLS0gU2hvdWxkIG1hdGNoIHNlY29uZCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUg cyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3NxbC9zeW50YXguc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwv c3ludGF4LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDY5MmRj ODk1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50 YXguc3FsCkBAIC0wLDAgKzEsNTcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKKworLS0gQW4g ZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQsIGFuZCBzbyBpcyBhbiBlbXB0eSB0YXJnZXQgbGlzdC4K K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnJzsKK0VYUExBSU4gU0VMRUNUIDE7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCknOworRVhQTEFJTiBTRUxFQ1QgMTsK KworLS0gVGVzdCBhc3NvcnRlZCB2YXJpYXRpb25zIGluIGNhcGl0YWxpemF0aW9uLCB3aGl0ZXNw YWNlLCBhbmQgd2hpY2ggcGFydHMgb2YKKy0tIHRoZSByZWxhdGlvbiBpZGVudGlmaWVyIGFyZSBp bmNsdWRlZC4gVGhlc2Ugc2hvdWxkIGFsbCB3b3JrLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTih4KSc7CitFWFBMQUlOIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4gU0VMRUNUIDE7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiBTRUxFQ1QgMTsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4gKHgveSknOworRVhQTEFJTiBTRUxF Q1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFfU0NBTiAoIHggLyB5IC4g eiApICAnOworRVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn U0VRX1NDQU4oIngiIzIvInkiLiJ6IkAidCIpJzsKK0VYUExBSU4gU0VMRUNUIDE7CisKKy0tIFN5 bnRheCBlcnJvcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NB Tih4KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oIic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KCIiKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJhIic7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCMnOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICcoKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CisKKy0t IExlZ2FsIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiovJzsKK0VY UExBSU4gU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hfSk9JTihf KS8qKiovJzsKK0VYUExBSU4gU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g Jy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQTEFJTiBTRUxFQ1QgMTsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oeS8vKngq L3opJzsKK0VYUExBSU4gU0VMRUNUIDE7CisKKy0tIFVudGVybWluYXRlZCBjb21tZW50cy4KK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyonOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdKT0lOX09SREVSKCJmT08iKSAvKiBvb3BzJzsKKworLS0gTmVzdGVkIGNvbW1lbnRzIGFy ZSBub3Qgc3VwcG9ydGVkLCBzbyB0aGUgZmlyc3Qgb2YgdGhlc2UgaXMgbGVnYWwgYW5kCistLSB0 aGUgc2Vjb25kIGlzIG5vdC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKi8nOwor RVhQTEFJTiBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVm ZiAqLyovJzsKKworLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlk ZW50aWZpZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSkn OworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjVmNzU4NGMzYTAyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTQ3IEBACisjIENvcHly aWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor CisjIFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRv IGNoZWNrIGZvciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4g J2FsbCc7CisKK3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFz ZW5hbWUgcXcoZGlybmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6 ZSB0aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnbWFpbicpOworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29u ZmlndXJhdGlvbi4KKyMKKyMgV2UgcnVuIHdpdGggcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxl Y3Rpb25fbGltaXQgc2V0IHRvIGVuc3VyZSB0aGF0IHRoZQorIyBwbGFuIHRyZWUgd2Fsa2VyIGNv ZGUgcnVucyBhZ2FpbnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBJZgor IyB3ZSdyZSB1bmFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBhbnkgb2YgdGhvc2UgcGxhbiB0cmVl cywgdGhpcyB0ZXN0IHNob3VsZCBmYWlsLgorIworIyBXZSBzZXQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlIHRvIGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZpY2UKKyMgdHJv dmUgdG8gYmUgcG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBvZiB2YXJpb3VzIHNvcnRzLCBi dXQgd2hpY2ggd2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBhbnl0aGluZyBpbiB0aGUgcmVn cmVzc2lvbiB0ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMgcGxhbm5lciBob29rcyB3aWxs IGJlIGNhbGxlZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFucyBzaG91bGQK KyMgYWN0dWFsbHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9z dXBwbGllZF9hZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nCisjIHJlZ3Jl c3Npb24gdGVzdCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIEluIHRoZSByZWFsIHdvcmxkLCBp dCBzZWVtcyBsaWtlCisjIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlOIG91dHB1dCB0byBzaG93IHN1 cHBsaWVkIGFkdmljZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMgd2hldGhlciBub3JtYWwgcGxhbm5l ciBiZWhhdmlvciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0aGF0J3MgdW5kZXNpcmFibGUu Ciskbm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9NKTsKK3BnX3BsYW5f YWR2aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAwMDAKK3NoYXJlZF9wcmVsb2FkX2xp YnJhcmllcz1wZ19wbGFuX2FkdmljZQorcGdfcGxhbl9hZHZpY2UuYWR2aWNlPSdTRVFfU0NBTihl bnRpcmVseV9maWN0aXRpb3VzKSBIQVNIX0pPSU4odG90YWxfZmFicmljYXRpb24pIEdBVEhFUihj b21wbGV0ZWx5X2ltYWdpbmFyeSknCitwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBw bGllZF9hZHZpY2U9ZmFsc2UKK0VPTQorJG5vZGUtPnN0YXJ0OworCitteSAkc3JjZGlyID0gYWJz X3BhdGgoIi4uLy4uIik7CisKKyMgLS1kbHBhdGggaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gZmlu ZCB0aGUgbG9jYXRpb24gb2YgcmVncmVzcy5zbworIyBhbmQgYW55IGxpYnJhcmllcyB0aGUgcmVn cmVzc2lvbiB0ZXN0cyByZXF1aXJlLgorbXkgJGRscGF0aCA9IGRpcm5hbWUoJEVOVntSRUdSRVNT X1NITElCfSk7CisKKyMgLS1vdXRwdXRkaXIgcG9pbnRzIHRvIHRoZSBwYXRoIHdoZXJlIHRvIHBs YWNlIHRoZSBvdXRwdXQgZmlsZXMuCitteSAkb3V0cHV0ZGlyID0gJFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOjp0bXBfY2hlY2s7CisKKyMgLS1pbnB1dGRpciBwb2ludHMgdG8gdGhlIHBhdGggb2Yg dGhlIGlucHV0IGZpbGVzLgorbXkgJGlucHV0ZGlyID0gIiRzcmNkaXIvc3JjL3Rlc3QvcmVncmVz cyI7CisKKyMgUnVuIHRoZSB0ZXN0cy4KK215ICRyYyA9CisgIHN5c3RlbSgkRU5We1BHX1JFR1JF U1N9IC4gIiAiCisJICAuICItLWJpbmRpcj0gIgorCSAgLiAiLS1kbHBhdGg9XCIkZGxwYXRoXCIg IgorCSAgLiAiLS1ob3N0PSIgLiAkbm9kZS0+aG9zdCAuICIgIgorCSAgLiAiLS1wb3J0PSIgLiAk bm9kZS0+cG9ydCAuICIgIgorCSAgLiAiLS1zY2hlZHVsZT0kc3JjZGlyL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgIgorCSAgLiAiLS1tYXgtY29uY3VycmVudC10ZXN0cz0yMCAi CisJICAuICItLWlucHV0ZGlyPVwiJGlucHV0ZGlyXCIgIgorCSAgLiAiLS1vdXRwdXRkaXI9XCIk b3V0cHV0ZGlyXCIiKTsKKworIyBEdW1wIG91dCB0aGUgcmVncmVzc2lvbiBkaWZmcyBmaWxlLCBp ZiB0aGVyZSBpcyBvbmUKK2lmICgkcmMgIT0gMCkKK3sKKwlteSAkZGlmZnMgPSAiJG91dHB1dGRp ci9yZWdyZXNzaW9uLmRpZmZzIjsKKwlpZiAoLWUgJGRpZmZzKQorCXsKKwkJcHJpbnQgIj09PSBk dW1waW5nICRkaWZmcyA9PT1cbiI7CisJCXByaW50IHNsdXJwX2ZpbGUoJGRpZmZzKTsKKwkJcHJp bnQgIj09PSBFT0YgPT09XG4iOworCX0KK30KKworIyBSZXBvcnQgcmVzdWx0cworaXMoJHJjLCAw LCAncmVncmVzc2lvbiB0ZXN0cyBwYXNzJyk7CisKKyMgQ3JlYXRlIHRoZSBleHRlbnNpb24gc28g d2UgY2FuIGFjY2VzcyB0aGUgY29sbGVjdG9yCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICdDUkVBVEUgRVhURU5TSU9OIHBnX3BsYW5fYWR2aWNlJyk7CisKKyMgVmVyaWZ5IHRoYXQgYSBs YXJnZSBhbW91bnQgb2YgYWR2aWNlIHdhcyBjb2xsZWN0ZWQKK215ICRhbGxfcXVlcnlfY291bnQg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBG Uk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9NCitjbXBfb2soJGFsbF9x dWVyeV9jb3VudCwgJz4nLCAyMDAwMCwgImNvcGlvdXMgYWR2aWNlIGNvbGxlY3RlZCIpOworCisj IFZlcmlmeSB0aGF0IGxvdHMgb2YgZGlmZmVyZW50IGFkdmljZSBzdHJpbmdzIHdlcmUgY29sbGVj dGVkCitteSAkZGlzdGluY3RfcXVlcnlfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIDw8RU9NKTsKK1NFTEVDVCBDT1VOVCgqKSBGUk9NCisJKFNFTEVDVCBESVNUSU5DVCBhZHZp Y2UgRlJPTSBwZ19nZXRfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSk7CitFT00KK2NtcF9vaygk ZGlzdGluY3RfcXVlcnlfY291bnQsICc+JywgMzAwMCwgImRpdmVyc2UgYWR2aWNlIGNvbGxlY3Rl ZCIpOworCisjIFdlIHdhbnQgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIG91ciBrbm93biB0 YWdzIGluIHRoZSBjb2xsZWN0ZWQgYWR2aWNlLgorIyBQdXQgYWxsIHRhZ3MgaW50byB0aGUgaGFz aCB0aGF0IGZvbGxvd3M7IG1hcCBhbnkgdGFncyB0aGF0IGFyZW4ndCB0ZXN0ZWQKKyMgYnkgdGhl IGNvcmUgcmVncmVzc2lvbiB0ZXN0cyB0byAwLCBhbmQgb3RoZXJzIHRvIDEuCitteSAldGFnX21h cCA9ICgKKwlCSVRNQVBfSEVBUF9TQ0FOID0+IDEsCisJRk9SRUlHTl9KT0lOID0+IDAsCisJR0FU SEVSID0+IDEsCisJR0FUSEVSX01FUkdFID0+IDEsCisJSEFTSF9KT0lOID0+IDEsCisJSU5ERVhf T05MWV9TQ0FOID0+IDEsCisJSU5ERVhfU0NBTiA9PiAxLAorCUpPSU5fT1JERVIgPT4gMSwKKwlN RVJHRV9KT0lOX01BVEVSSUFMSVpFID0+IDEsCisJTUVSR0VfSk9JTl9QTEFJTiA9PiAxLAorCU5F U1RFRF9MT09QX01BVEVSSUFMSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfTUVNT0laRSA9PiAxLAor CU5FU1RFRF9MT09QX1BMQUlOID0+IDEsCisJTk9fR0FUSEVSID0+IDEsCisJUEFSVElUSU9OV0lT RSA9PiAxLAorCVNFTUlKT0lOX05PTl9VTklRVUUgPT4gMSwKKwlTRU1JSk9JTl9VTklRVUUgPT4g MSwKKwlTRVFfU0NBTiA9PiAxLAorCVRJRF9TQ0FOID0+IDEsCispOworZm9yIG15ICR0YWcgKHNv cnQga2V5cyAldGFnX21hcCkKK3sKKwlteSAkY2hlY2tpdCA9ICR0YWdfbWFweyR0YWd9OworCisJ IyBTZWFyY2ggZm9yIHRoZSBnaXZlbiB0YWcuIFRoaXMgaXMgbm90IGVudGlyZWx5IHJvYnVzdDog aXQgY291bGQgZ2V0IHRocm93bgorCSMgb2ZmIGJ5IGEgdGFibGUgYWxpYXMgc3VjaCBhcyAiRk9S RUlHTl9KT0lOKCIsIGJ1dCB0aGF0IHByb2JhYmx5IHdvbid0CisJIyBoYXBwZW4gaW4gdGhlIGNv cmUgcmVncmVzc2lvbiB0ZXN0cy4KKwlteSAkdGFnX2NvdW50ID0gJG5vZGUtPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCA8PEVPTSk7CitTRUxFQ1QgQ09VTlQoKikgRlJPTSBwZ19nZXRfY29sbGVjdGVk X3NoYXJlZF9hZHZpY2UoKQorCVdIRVJFIGFkdmljZSBMSUtFICclJHRhZyglJworRU9NCisKKwkj IENoZWNrIHRoYXQgdGhlIHRhZyBnb3QgYSBub24tdHJpdmlhbCBhbW91bnQgb2YgdXNlLCB1bmxl c3MgdG9sZCBvdGhlcndpc2UuCisJY21wX29rKCR0YWdfY291bnQsICc+JywgMTAsICJtdWx0aXBs ZSB1c2VzIG9mICR0YWciKSBpZiAkY2hlY2tpdDsKKworCSMgUmVnYXJkbGVzcywgbm90ZSB0aGUg ZXhhY3QgY291bnQgaW4gdGhlIGxvZywgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorCW5vdGUoImZv dW5kICR0YWdfY291bnQgYWR2aWNlIHN0cmluZ3MgY29udGFpbmluZyAkdGFnIik7Cit9CisKKyMg VHJpZ2dlciBhIHBhcnRpYWwgY2xlYW51cCBvZiB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3Is IGFuZCB0aGVuIGEgZnVsbAorIyBjbGVhbnVwLgorJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCA8PEVPTSk7CitTRVQgcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ9NTAw OworU0VMRUNUICogRlJPTSBwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpOworRU9N CisKK2RvbmVfdGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCA1OGM5YTNm MWUwMS4uNDdjZGI0YTdhZGEgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTY0LDYg KzM5NjQsNDQgQEAgcGdfdXVpZF90CiBwZ193Y2hhcgogcGdfd2NoYXJfdGJsCiBwZ3BfYXJtb3Jf aGVhZGVyc19zdGF0ZQorcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCitwZ3BhX2FkdmljZV9pdGVtCitw Z3BhX2FkdmljZV90YWdfdHlwZQorcGdwYV9hZHZpY2VfdGFyZ2V0CitwZ3BhX2lkZW50aWZpZXIK K3BncGFfaW5kZXhfdGFyZ2V0CitwZ3BhX2luZGV4X3R5cGUKK3BncGFfaXRtX3R5cGUKK3BncGFf am9pbl9jbGFzcworcGdwYV9qb2luX21lbWJlcgorcGdwYV9qb2luX3N0YXRlCitwZ3BhX2pvaW5f c3RyYXRlZ3kKK3BncGFfam9pbl91bnJvbGxlcgorcGdwYV9sb2NhbF9hZHZpY2UKK3BncGFfbG9j YWxfYWR2aWNlX2NodW5rCitwZ3BhX291dHB1dF9jb250ZXh0CitwZ3BhX3BsYW5fd2Fsa2VyX2Nv bnRleHQKK3BncGFfcGxhbm5lcl9zdGF0ZQorcGdwYV9xZl90eXBlCitwZ3BhX3F1ZXJ5X2ZlYXR1 cmUKK3BncGFfcmlfY2hlY2tlcgorcGdwYV9yaV9jaGVja2VyX2tleQorcGdwYV9zY2FuCitwZ3Bh X3NjYW5fc3RyYXRlZ3kKK3BncGFfc2hhcmVkX2FkdmljZQorcGdwYV9zaGFyZWRfYWR2aWNlX2No dW5rCitwZ3BhX3NoYXJlZF9zdGF0ZQorcGdwYV9zal91bmlxdWVfcmVsCitwZ3BhX3RhcmdldF90 eXBlCitwZ3BhX3Ryb3ZlCitwZ3BhX3Ryb3ZlX2VudHJ5CitwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1l bnQKK3BncGFfdHJvdmVfZW50cnlfaGFzaAorcGdwYV90cm92ZV9lbnRyeV9rZXkKK3BncGFfdHJv dmVfbG9va3VwX3R5cGUKK3BncGFfdHJvdmVfcmVzdWx0CitwZ3BhX3Ryb3ZlX3NsaWNlCitwZ3Bh X3Vucm9sbGVkX2pvaW4KIHBnc29ja2V0CiBwZ3NxbF90aGluZ190CiBwZ3NzRW50cnkKLS0gCjIu NTEuMAoK --0000000000001b5bb506460325ec--