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.94.2) (envelope-from ) id 1ueF9Z-006or5-Nn for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Jul 2025 15:43:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1ueF9X-009a0S-Ey for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Jul 2025 15:43:39 +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.94.2) (envelope-from ) id 1ueF9W-009a0I-Iu for pgsql-hackers@lists.postgresql.org; Tue, 22 Jul 2025 15:43:39 +0000 Received: from mail-yw1-x1130.google.com ([2607:f8b0:4864:20::1130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1ueF9R-000E8c-2Y for pgsql-hackers@lists.postgresql.org; Tue, 22 Jul 2025 15:43:37 +0000 Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-70e4043c5b7so47197087b3.1 for ; Tue, 22 Jul 2025 08:43:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1753199013; x=1753803813; 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=a8v/ZWFFMW6hXMz+lIOoLFHz93/rssebJ7yvhv5dt+o=; b=ccyONyrMUxUuQnuDazuGi6mrC0C4VG0Q9PGUYDVTWERbPL5W+7S28L1xdwlZUx7+Ii 8Sg/F3moUFa8TOlig0Niy4iYnERYrq4EKorPyLKu/ZH7wuLVj8hYKM6bY9kE9scs5SBL Xmz58LAs3gz5CJiuV+yUjb6unUWGdKhDTAqvWrIjeVqdBQaF0/n/BxuMp3u/66lqLCV6 LLDshLQpn6DpX0s0UCD3XkRaOh1mghOWFS7wYDYNFnXHaukuCI7mZyw4K94hn6cJoC/u kAyBJHPAjjroLk+2QRRp4dlN80ali9mUfaD7flzpdeoPNr49QRv0mVdlFIzDc92vUHge aS9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1753199013; x=1753803813; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=a8v/ZWFFMW6hXMz+lIOoLFHz93/rssebJ7yvhv5dt+o=; b=k36Tkh2fUkLjRp0LPrH1FoiM1GFAaBBp/Zpduj0smWwNLNt2HmoABLTXoR0iHTFMaM EPV5Zan6UJ19e+g0mWmo6rUsOpyA/fHg6vyrEsth4tQ9+rGgUx9sOZXshV3eDzMd/HdB cM1t3oa5302PTtOp6+eroZJIT7XGiRtz7/CAUE6U0tBHXWT5doX744qFFU1MMhIYWVnh pBKvxdm8PRu5uMow3nz+i9fEZ+WFpfQTiYC/JY6FmyTyUGFJeQkgZJltdzwMs14SLFED G7LQ4IcZjxsD0Umvw36waXiC7w7X36RFFxxjfOKIA4Bn+5+Rg19Js2GmlHjNGvxZph23 NTrA== X-Forwarded-Encrypted: i=1; AJvYcCWWH9G69lwXOV6dBxEPhV/e78FcP2FQtUwWJBkXMDndzXJxMJysa/S1BjJRvB3TvftAypKicAf5NKd9Jf+U@lists.postgresql.org X-Gm-Message-State: AOJu0Yyd+VPUi6EgaG9EInog/WMXOP+mCvn4xiErK8xV69BWiLhTz48n k5y9pS+esnWJzLwzZkxBEFcjomoJA9GROwrLrX21OHZP7Xq6Dh+Qjy6SXe3rtn4ShR+9wydAu+b JuX6hMrnMLcJvJCRxoSwfcwVoQ//NP+BJauR5LU8= X-Gm-Gg: ASbGncvRhph0t4nlik9KUhIjSb2p1EK3he2QFF6BbmK1RV7ZAm3/pycOw6MZcjJ0HvW qqa0A6ga8vmA0vJtHwlzjz1CP9jafT4yjWJFtaflWCO8novdXZlxXrlvkNkhmq/XPqn4lXbRLMk cU6BfnW5tIVWzcUjWsb+cBSuKysNkKuQH1u++rPmqx1dYfVjlzwCbgs6+nA6h6Hqrjv+19itcET XuS/1gm X-Google-Smtp-Source: AGHT+IFHP1K/5qSDXT6nGB3pmC0TOh76SRfEy4V41988B0DCTqNyTPi3ADdcx/clf+uVoDiec0D3NS4U1Pt4uVRvicQ= X-Received: by 2002:a05:690c:4882:b0:70d:f15d:b18f with SMTP id 00721157ae682-718375167d3mr315869097b3.26.1753199012911; Tue, 22 Jul 2025 08:43:32 -0700 (PDT) MIME-Version: 1.0 References: <202507071221.am6rbd6n4dct@alvherre.pgsql> <67115399-4799-4c3b-bd17-d43c98099919@vondra.me> In-Reply-To: From: Arseniy Mukhin Date: Tue, 22 Jul 2025 18:43:20 +0300 X-Gm-Features: Ac12FXwQ2_DazxoC_0ToZFlsNWRwEf7XdG6oBXIUqG_cUvgdcSuBvnni8Vt8Da4 Message-ID: Subject: Re: amcheck support for BRIN indexes To: Tomas Vondra Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000062fc23063a86747b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000062fc23063a86747b Content-Type: text/plain; charset="UTF-8" Hi, While reviewing gist amcheck patch [1] I realized that brin amcheck also must check if current snapshot is OK with index indcheckxmin (as btree, gist do it). Currently this check is contained in btree amcheck code, but other AMs need it for heapallindexed as well, so I moved it from btree to verify_common (0003 patch). Also I returned a consistentFn approach in heapallindexed as it seems more preferable. But it's not a big deal to return to the within_range approach if needed. [1] https://www.postgresql.org/message-id/flat/41F2A10C-4577-413B-9140-BE81CCE04A60%40yandex-team.ru#dc22ff33596f63f554cc551958131cde Best regards, Arseniy Mukhin --00000000000062fc23063a86747b Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0001-brin-refactoring.patch" Content-Disposition: attachment; filename="v8-0001-brin-refactoring.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdepc0yv0 RnJvbSBmZGIzNTg3NTE1NWQ5YzkwNTkwMWY3MGE3Zjk2N2MyY2Y0YmZiNWU0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogV2VkLCAxNiBBcHIgMjAyNSAxMToyNjo0NSArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjggMS80XSBicmluIHJlZmFjdG9yaW5nCgpGb3IgYWRkaW5nIEJSSU4gaW5kZXggc3Vw cG9ydCBpbiBhbWNoZWNrIHdlIG5lZWQgc29tZSB0aW55IGNoYW5nZXMgaW4gQlJJTgpjb3JlIGNv ZGU6CgoqIFdlIG5lZWQgdG8gaGF2ZSB0dXBsZSBkZXNjcmlwdG9yIGZvciBvbi1kaXNrIHN0b3Jh Z2Ugb2YgQlJJTiB0dXBsZXMuCiAgSXQgaXMgYSBwdWJsaWMgZmllbGQgJ2JkX2Rpc2t0ZGVzYycg aW4gQnJpbkRlc2MsIGJ1dCB0byBhY2Nlc3MgaXQgd2UKICBuZWVkIGZ1bmN0aW9uICdicnR1cGxl X2Rpc2tfdHVwZGVzYycgd2hpY2ggaXMgaW50ZXJuYWwuIFRoaXMgY29tbWl0CiAgbWFrZXMgaXQg ZXh0ZXJuIGFuZCByZW5hbWVzIGl0IHRvICdicmluX3R1cGxlX3R1cGRlc2MnLgoKKiBGb3IgbWV0 YSBwYWdlIGNoZWNrIHdlIG5lZWQgdG8ga25vdyBwYWdlc19wZXJfcmFuZ2UgdXBwZXIgbGltaXQu IEl0J3MKICBoYXJkY29kZWQgbm93LiBUaGlzIGNvbW1pdCBtb3ZlcyBpdHMgdmFsdWUgdG8gbWFj cm9zIEJSSU5fTUFYX1BBR0VTX1BFUl9SQU5HRQogIHNvIHRoYXQgd2UgY2FuIHVzZSBpdCBpbiBh bWNoZWNrIHRvby4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMgICB8 IDEwICsrKysrLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jIHwg IDMgKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oICAgICAgICAgICAgICB8ICAxICsKIHNy Yy9pbmNsdWRlL2FjY2Vzcy9icmluX3R1cGxlLmggICAgICAgIHwgIDIgKysKIDQgZmlsZXMgY2hh bmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJp bi9icmluX3R1cGxlLmMKaW5kZXggODYxZjM5N2U2ZGIuLmZjNjdhNzA4ZGRhIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKKysrIGIvc3JjL2JhY2tlbmQv YWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jCkBAIC01Nyw4ICs1Nyw4IEBAIHN0YXRpYyBpbmxpbmUg dm9pZCBicmluX2RlY29uc3RydWN0X3R1cGxlKEJyaW5EZXNjICpicmRlc2MsCiAvKgogICogUmV0 dXJuIGEgdHVwbGUgZGVzY3JpcHRvciB1c2VkIGZvciBvbi1kaXNrIHN0b3JhZ2Ugb2YgQlJJTiB0 dXBsZXMuCiAgKi8KLXN0YXRpYyBUdXBsZURlc2MKLWJydHVwbGVfZGlza190dXBkZXNjKEJyaW5E ZXNjICpicmRlc2MpCitUdXBsZURlc2MKK2JyaW5fdHVwbGVfdHVwZGVzYyhCcmluRGVzYyAqYnJk ZXNjKQogewogCS8qIFdlIGNhY2hlIHRoZXNlIGluIHRoZSBCcmluRGVzYyAqLwogCWlmIChicmRl c2MtPmJkX2Rpc2t0ZGVzYyA9PSBOVUxMKQpAQCAtMjgwLDcgKzI4MCw3IEBAIGJyaW5fZm9ybV90 dXBsZShCcmluRGVzYyAqYnJkZXNjLCBCbG9ja051bWJlciBibGtubywgQnJpbk1lbVR1cGxlICp0 dXBsZSwKIAogCWxlbiA9IGhvZmYgPSBNQVhBTElHTihsZW4pOwogCi0JZGF0YV9sZW4gPSBoZWFw X2NvbXB1dGVfZGF0YV9zaXplKGJydHVwbGVfZGlza190dXBkZXNjKGJyZGVzYyksCisJZGF0YV9s ZW4gPSBoZWFwX2NvbXB1dGVfZGF0YV9zaXplKGJyaW5fdHVwbGVfdHVwZGVzYyhicmRlc2MpLAog CQkJCQkJCQkJICB2YWx1ZXMsIG51bGxzKTsKIAlsZW4gKz0gZGF0YV9sZW47CiAKQEAgLTI5OSw3 ICsyOTksNyBAQCBicmluX2Zvcm1fdHVwbGUoQnJpbkRlc2MgKmJyZGVzYywgQmxvY2tOdW1iZXIg Ymxrbm8sIEJyaW5NZW1UdXBsZSAqdHVwbGUsCiAJICogbmVlZCB0byBwYXNzIGEgdmFsaWQgbnVs bCBiaXRtYXAgc28gdGhhdCBpdCB3aWxsIGNvcnJlY3RseSBza2lwCiAJICogb3V0cHV0dGluZyBu dWxsIGF0dHJpYnV0ZXMgaW4gdGhlIGRhdGEgYXJlYS4KIAkgKi8KLQloZWFwX2ZpbGxfdHVwbGUo YnJ0dXBsZV9kaXNrX3R1cGRlc2MoYnJkZXNjKSwKKwloZWFwX2ZpbGxfdHVwbGUoYnJpbl90dXBs ZV90dXBkZXNjKGJyZGVzYyksCiAJCQkJCXZhbHVlcywKIAkJCQkJbnVsbHMsCiAJCQkJCShjaGFy ICopIHJldHR1cGxlICsgaG9mZiwKQEAgLTY4Miw3ICs2ODIsNyBAQCBicmluX2RlY29uc3RydWN0 X3R1cGxlKEJyaW5EZXNjICpicmRlc2MsCiAJICogbWF5IHJldXNlIGF0dHJpYnV0ZSBlbnRyaWVz IGZvciBtb3JlIHRoYW4gb25lIGNvbHVtbiwgd2UgY2Fubm90IGNhY2hlCiAJICogb2Zmc2V0cyBo ZXJlLgogCSAqLwotCWRpc2tkc2MgPSBicnR1cGxlX2Rpc2tfdHVwZGVzYyhicmRlc2MpOworCWRp c2tkc2MgPSBicmluX3R1cGxlX3R1cGRlc2MoYnJkZXNjKTsKIAlzdG9yZWQgPSAwOwogCW9mZiA9 IDA7CiAJZm9yIChhdHRudW0gPSAwOyBhdHRudW0gPCBicmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRz OyBhdHRudW0rKykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0 aW9ucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMKaW5kZXggNTA3 NDdjMTYzOTYuLmJjNDk0ODQ3MzQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvY29t bW9uL3JlbG9wdGlvbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9wdGlv bnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9oZWFwdG9hc3QuaCIKICNp bmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5o IgorI2luY2x1ZGUgImFjY2Vzcy9icmluLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMu aCIKICNpbmNsdWRlICJhY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX3R5cGUuaCIKQEAgLTM0Myw3ICszNDQsNyBAQCBzdGF0aWMgcmVsb3B0X2ludCBpbnRSZWxP cHRzW10gPQogCQkJIk51bWJlciBvZiBwYWdlcyB0aGF0IGVhY2ggcGFnZSByYW5nZSBjb3ZlcnMg aW4gYSBCUklOIGluZGV4IiwKIAkJCVJFTE9QVF9LSU5EX0JSSU4sCiAJCQlBY2Nlc3NFeGNsdXNp dmVMb2NrCi0JCX0sIDEyOCwgMSwgMTMxMDcyCisJCX0sIDEyOCwgMSwgQlJJTl9NQVhfUEFHRVNf UEVSX1JBTkdFCiAJfSwKIAl7CiAJCXsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9i cmluLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYnJpbi5oCmluZGV4IDgyMWYxZTAyODA2Li4zMzRj ZTk3M2I2NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW4uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvYnJpbi5oCkBAIC0zNyw2ICszNyw3IEBAIHR5cGVkZWYgc3RydWN0IEJy aW5TdGF0c0RhdGEKIAogCiAjZGVmaW5lIEJSSU5fREVGQVVMVF9QQUdFU19QRVJfUkFOR0UJMTI4 CisjZGVmaW5lIEJSSU5fTUFYX1BBR0VTX1BFUl9SQU5HRQkxMzEwNzIKICNkZWZpbmUgQnJpbkdl dFBhZ2VzUGVyUmFuZ2UocmVsYXRpb24pIFwKIAkoQXNzZXJ0TWFjcm8ocmVsYXRpb24tPnJkX3Jl bC0+cmVsa2luZCA9PSBSRUxLSU5EX0lOREVYICYmIFwKIAkJCQkgcmVsYXRpb24tPnJkX3JlbC0+ cmVsYW0gPT0gQlJJTl9BTV9PSUQpLCBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mv YnJpbl90dXBsZS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5fdHVwbGUuaAppbmRleCAwMTBi YTRlYTNjMC4uMmExMmFiMDNjNDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9icmlu X3R1cGxlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2JyaW5fdHVwbGUuaApAQCAtMTA5LDQg KzEwOSw2IEBAIGV4dGVybiBCcmluTWVtVHVwbGUgKmJyaW5fbWVtdHVwbGVfaW5pdGlhbGl6ZShC cmluTWVtVHVwbGUgKmR0dXBsZSwKIGV4dGVybiBCcmluTWVtVHVwbGUgKmJyaW5fZGVmb3JtX3R1 cGxlKEJyaW5EZXNjICpicmRlc2MsCiAJCQkJCQkJCQkgICBCcmluVHVwbGUgKnR1cGxlLCBCcmlu TWVtVHVwbGUgKmRNZW10dXBsZSk7CiAKK2V4dGVybiBUdXBsZURlc2MgYnJpbl90dXBsZV90dXBk ZXNjKEJyaW5EZXNjICpicmRlc2MpOworCiAjZW5kaWYJCQkJCQkJLyogQlJJTl9UVVBMRV9IICov Ci0tIAoyLjQzLjAKCg== --00000000000062fc23063a86747b Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0004-amcheck-brin_index_check-heap-all-indexed.patch" Content-Disposition: attachment; filename="v8-0004-amcheck-brin_index_check-heap-all-indexed.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdepc0z33 RnJvbSAxNzZhZjM1ODM0ZjFjMjU0OWI2NDAxMGZiMDY2NTg2MDkwZDA4NWQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAyMiBKdWwgMjAyNSAxODowNjozNiArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjggNC80XSBhbWNoZWNrOiBicmluX2luZGV4X2NoZWNrKCkgLSBoZWFwIGFsbCBpbmRl eGVkCgpUaGlzIGNvbW1pdCBleHRlbmRzIGZ1bmN0aW9uYWxpdHkgb2YgYnJpbl9pbmRleF9jaGVj aygpIHdpdGgKaGVhcF9hbGxfaW5kZXhlZCBjaGVjazogd2UgdmFsaWRhdGUgZXZlcnkgaW5kZXgg cmFuZ2UgdHVwbGUKYWdhaW5zdCBldmVyeSBoZWFwIHR1cGxlIHdpdGhpbiB0aGUgcmFuZ2UgdXNp bmcgY29uc2lzdGVudEZuLgpBbHNvLCB3ZSBjaGVjayBoZXJlIHRoYXQgZmllbGRzICdoYXNfbnVs bHMnLCAnYWxsX251bGxzJyBhbmQKJ2VtcHR5X3JhbmdlJyBhcmUgY29uc2lzdGVudCB3aXRoIHRo ZSByYW5nZSBoZWFwIGRhdGEuIEl0J3MgdGhlIG1vc3QKZXhwZW5zaXZlIHBhcnQgb2YgdGhlIGJy aW5faW5kZXhfY2hlY2soKSwgc28gaXQncyBvcHRpb25hbC4KLS0tCiBjb250cmliL2FtY2hlY2sv YW1jaGVjay0tMS41LS0xLjYuc3FsICAgfCAgIDYgKy0KIGNvbnRyaWIvYW1jaGVjay9leHBlY3Rl ZC9jaGVja19icmluLm91dCB8ICAyMiArLQogY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmlu LnNxbCAgICAgIHwgIDIyICstCiBjb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwg ICAgfCAgNTEgKystCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYyAgICAgICAgICAgfCA0 OTAgKysrKysrKysrKysrKysrKysrKysrKystCiA1IGZpbGVzIGNoYW5nZWQsIDU2NSBpbnNlcnRp b25zKCspLCAyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svYW1j aGVjay0tMS41LS0xLjYuc3FsIGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNx bAppbmRleCAwMzU0NDUxYzQ3Mi4uNjMzN2UwNjViYjEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1j aGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwKKysrIGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2st LTEuNS0tMS42LnNxbApAQCAtOCwxMSArOCwxMyBAQAogLS0gYnJpbl9pbmRleF9jaGVjaygpCiAt LQogQ1JFQVRFIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2soaW5kZXggcmVnY2xhc3MsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFycGFnZXNjaGVjayBib29sZWFuIGRl ZmF1bHQgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJwYWdl c2NoZWNrIGJvb2xlYW4gZGVmYXVsdCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhlYXBhbGxpbmRleGVkIGJvb2xlYW4gZGVmYXVsdCBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnNpc3RlbnRfb3BlcmF0b3JfbmFtZXMgdGV4dFtdIGRl ZmF1bHQgJ3t9JwogKQogICAgIFJFVFVSTlMgVk9JRAogQVMgJ01PRFVMRV9QQVRITkFNRScsICdi cmluX2luZGV4X2NoZWNrJwogTEFOR1VBR0UgQyBTVFJJQ1QgUEFSQUxMRUwgUkVTVFJJQ1RFRDsK IAogLS0gV2UgZG9uJ3Qgd2FudCB0aGlzIHRvIGJlIGF2YWlsYWJsZSB0byBwdWJsaWMKLVJFVk9L RSBBTEwgT04gRlVOQ1RJT04gYnJpbl9pbmRleF9jaGVjayhyZWdjbGFzcywgYm9vbGVhbikgRlJP TSBQVUJMSUM7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorUkVWT0tFIEFMTCBPTiBGVU5D VElPTiBicmluX2luZGV4X2NoZWNrKHJlZ2NsYXNzLCBib29sZWFuLCBib29sZWFuLCB0ZXh0W10p IEZST00gUFVCTElDOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dCBiL2NvbnRyaWIvYW1jaGVjay9l eHBlY3RlZC9jaGVja19icmluLm91dAppbmRleCBlNWZjNTJlZDc0Ny4uYmU4NWMzMmJjNTggMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dAorKysgYi9j b250cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQKQEAgLTUsNyArNSw3IEBAICQk IExBTkdVQUdFIHNxbDsKIC0tIGVtcHR5IHRhYmxlIGluZGV4IHNob3VsZCBiZSB2YWxpZAogQ1JF QVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKIENS RUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSk7Ci1TRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VM RUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVl KTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0tLS0tLS0tCiAgCkBAIC0xOSw3ICsx OSw3IEBAIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAo YSBURVhUX21pbm1heF9vcHMsIGlkIGludDhfbWluCiBJTlNFUlQgSU5UTyBicmludGVzdCAoYSkg U0VMRUNUIHJhbmRvbV9zdHJpbmcoKHggJSAxMDApKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMw MDApIHg7CiAtLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERFTEVURSBGUk9NIGJyaW50ZXN0 IFdIRVJFIGlkID4gMTUwMCBBTkQgaWQgPCAyNTAwOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2so J2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVj ayAKIC0tLS0tLS0tLS0tLS0tLS0tLQogIApAQCAtMjgsNyArMjgsNyBAQCBTRUxFQ1QgYnJpbl9p bmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOwogLS0gcmVidWlsZCBp bmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4 IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19Q RVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6 UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0tLS0t LS0tLS0KICAKQEAgLTQyLDcgKzQyLDcgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBi cmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVMKIElOU0VS VCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAw MCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3Qg V0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygn YnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2so J2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNr IAogLS0tLS0tLS0tLS0tLS0tLS0tCiAgCkBAIC01MSw3ICs1MSw3IEBAIFNFTEVDVCBicmluX2lu ZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxkIGlu ZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHgg T04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BF Ul9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJF R0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpS RUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0t LS0tLQogIApAQCAtNjUsNyArNjUsNyBAQCBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJy aW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfbXVsdGlfb3BzKSBXSVRICiBJTlNFUlQg SU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAp IHg7CiAtLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKIERFTEVURSBGUk9NIGJyaW50ZXN0IFdI RVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2Jy aW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdi cmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSk7CiAgYnJpbl9pbmRleF9jaGVjayAK IC0tLS0tLS0tLS0tLS0tLS0tLQogIApAQCAtNzQsNyArNzQsNyBAQCBTRUxFQ1QgYnJpbl9pbmRl eF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOwogLS0gcmVidWlsZCBpbmRl eAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9O IGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9taW5tYXhfbXVsdGlfb3BzKSBXSVRIIChQQUdF U19QRVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgn OjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4 Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogIGJyaW5faW5kZXhfY2hlY2sgCiAtLS0tLS0tLS0t LS0tLS0tLS0KICAKQEAgLTg4LDcgKzg4LDcgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBP TiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfYmxvb21fb3BzKSBXSVRIIChQQUdFU18KIElO U0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDAwMCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRl c3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVj aygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2No ZWNrIAogLS0tLS0tLS0tLS0tLS0tLS0tCiAgCkBAIC05Nyw3ICs5Nyw3IEBAIFNFTEVDVCBicmlu X2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxk IGluZGV4CiBEUk9QIElOREVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9p ZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X2Jsb29tX29wcykgV0lUSCAoUEFHRVNf UEVSX1JBTkdFID0gMik7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6 UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6 OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKICBicmluX2luZGV4X2NoZWNrIAogLS0tLS0tLS0tLS0t LS0tLS0tCiAgCkBAIC0xMTMsNyArMTEzLDcgQEAgU0VMRUNUIEJPWChwb2ludChyYW5kb20oKSAq IDEwMDAsIHJhbmRvbSgpICogMTAwMCksIHBvaW50KHJhbmRvbSgpICogMTAwMCwgcmFuZG8KIEZS T00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAwKTsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdl cwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7Ci1T RUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOwor U0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0 cnVlLCAneyJAPiJ9Jyk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0tLS0tLQog IApAQCAtMTIyLDcgKzEyMiw3IEBAIFNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9p ZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CiAtLSByZWJ1aWxkIGluZGV4CiBEUk9QIElOREVYIGJyaW50 ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJ TiAoYSBCT1hfSU5DTFVTSU9OX09QUykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7Ci1TRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VM RUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVl LCAneyJAPiJ9Jyk7CiAgYnJpbl9pbmRleF9jaGVjayAKIC0tLS0tLS0tLS0tLS0tLS0tLQogIApk aWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbCBiL2NvbnRyaWIv YW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwKaW5kZXggYjM2YWYzN2ZlMDMuLjRmMTZmMzFjN2Y4 IDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svc3FsL2NoZWNrX2JyaW4uc3FsCisrKyBiL2Nv bnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwKQEAgLTcsNyArNyw3IEBAICQkIExBTkdV QUdFIHNxbDsKIC0tIGVtcHR5IHRhYmxlIGluZGV4IHNob3VsZCBiZSB2YWxpZAogQ1JFQVRFIFRB QkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKIENSRUFURSBJ TkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSk7Ci1TRUxFQ1QgYnJp bl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlLCB0cnVlKTsKIC0t IGNsZWFudXAKIERST1AgVEFCTEUgYnJpbnRlc3Q7CiAKQEAgLTE3LDEyICsxNywxMiBAQCBDUkVB VEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5t YXhfb3BzLCBpZCBpbnQ4X21pbgogSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCByYW5k b21fc3RyaW5nKCh4ICUgMTAwKSkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSB4OwogLS0g Y3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCiBERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBpZCA+ IDE1MDAgQU5EIGlkIDwgMjUwMDsKLVNFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9p ZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3Rf aWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogCiAtLSByZWJ1aWxkIGluZGV4CiBEUk9QIElO REVYIGJyaW50ZXN0X2lkeDsKIENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3Qg VVNJTkcgQlJJTiAoYSBURVhUX21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIp OwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVl KTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1 ZSwgdHJ1ZSk7CiAtLSBjbGVhbnVwCiBEUk9QIFRBQkxFIGJyaW50ZXN0OwogCkBAIC0zNCwxMiAr MzQsMTIgQEAgQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklO IChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVMKIElOU0VSVCBJTlRPIGJyaW50ZXN0IChh KSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsKIC0tIGNyZWF0ZSBz b21lIGVtcHR5IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFO RCBhIDwgNDAwMDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVH Q0xBU1MsIHRydWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJF R0NMQVNTLCB0cnVlLCB0cnVlKTsKIAogLS0gcmVidWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmlu dGVzdF9pZHg7CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJS SU4gKGEgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKLVNFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxF Q1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUp OwogLS0gY2xlYW51cAogRFJPUCBUQUJMRSBicmludGVzdDsKIApAQCAtNTEsMTIgKzUxLDEyIEBA IENSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4 X21pbm1heF9tdWx0aV9vcHMpIFdJVEgKIElOU0VSVCBJTlRPIGJyaW50ZXN0IChhKSBTRUxFQ1Qg eCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5 IHJhbmdlcwogREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgYSA+IDIwMDAwIEFORCBhIDwgNDAw MDA7Ci1TRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRy dWUpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0 cnVlLCB0cnVlKTsKIAogLS0gcmVidWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7 CiBDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50 OF9taW5tYXhfbXVsdGlfb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBi cmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1Qg YnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwog LS0gY2xlYW51cAogRFJPUCBUQUJMRSBicmludGVzdDsKIApAQCAtNjgsMTIgKzY4LDEyIEBAIENS RUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X2Js b29tX29wcykgV0lUSCAoUEFHRVNfCiBJTlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHgg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIHg7CiAtLSBjcmVhdGUgc29tZSBlbXB0eSBy YW5nZXMKIERFTEVURSBGUk9NIGJyaW50ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAw OwotU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVl KTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1 ZSwgdHJ1ZSk7CiAKIC0tIHJlYnVpbGQgaW5kZXgKIERST1AgSU5ERVggYnJpbnRlc3RfaWR4Owog Q1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhf Ymxvb21fb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKLVNFTEVDVCBicmluX2luZGV4 X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1QgYnJpbl9pbmRl eF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUpOwogLS0gY2xlYW51 cAogRFJPUCBUQUJMRSBicmludGVzdDsKIApAQCAtODcsMTIgKzg3LDEyIEBAIEZST00gZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDAwKTsKIC0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcwogREVMRVRF IEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CiAKLVNFTEVDVCBi cmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CitTRUxFQ1Qg YnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUsIHRydWUsICd7 IkA+In0nKTsKIAogLS0gcmVidWlsZCBpbmRleAogRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CiBD UkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgQk9YX0lO Q0xVU0lPTl9PUFMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOwotU0VMRUNUIGJyaW5faW5k ZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKK1NFTEVDVCBicmluX2lu ZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSwgdHJ1ZSwgJ3siQD4ifScp OwogLS0gY2xlYW51cAogRFJPUCBUQUJMRSBicmludGVzdDsKIApkaWZmIC0tZ2l0IGEvY29udHJp Yi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsIGIvY29udHJpYi9hbWNoZWNrL3QvMDA3X3Zl cmlmeV9icmluLnBsCmluZGV4IDJjNjJiNzZjYzcwLi41MWJmZWQ3ZTI3MyAxMDA2NDQKLS0tIGEv Y29udHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCisrKyBiL2NvbnRyaWIvYW1jaGVj ay90LzAwN192ZXJpZnlfYnJpbi5wbApAQCAtMjAwLDYgKzIwMCw1NSBAQCBteSBAdGVzdHMgPSAo CiAgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVf bmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFhJyk7KTsKICAgICAgICAgfSwKICAgICAgICAgZXhwZWN0 ZWQgICA9PiB3cmFwKCJyZXZtYXAgZG9lc24ndCBwb2ludCB0byBpbmRleCB0dXBsZS4gUmFuZ2Ug Ymxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpIikKKyAgICB9 LAorICAgIHsKKyAgICAgICAgIyByYW5nZSBpcyBtYXJrZWQgYXMgZW1wdHlfcmFuZ2UsIGJ1dCBo ZWFwIGhhcyBzb21lIGRhdGEgZm9yIHRoZSByYW5nZQorCisgICAgICAgIGZpbmQgICAgID0+IHBh Y2soJ0xDQycsIDAsIDB4ODgsIDB4MDMpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0Mn LCAwLCAweEE4LCAweDAxKSwKKyAgICAgICAgYmxrbm8gICAgICA9PiAyLCAjIHJlZ3VsYXIgcGFn ZQorICAgICAgICB0YWJsZV9kYXRhID0+IHN1YiB7CisgICAgICAgICAgICBteSAoJHRlc3Rfc3Ry dWN0KSA9IEBfOworICAgICAgICAgICAgcmV0dXJuIHFxKElOU0VSVCBJTlRPICR0ZXN0X3N0cnVj dC0+e3RhYmxlX25hbWV9IChhKSBWQUxVRVMgKG51bGwpOyk7CisgICAgICAgIH0sCisgICAgICAg IGV4cGVjdGVkICAgPT4gd3JhcCgncmFuZ2UgaXMgbWFya2VkIGFzIGVtcHR5IGJ1dCBjb250YWlu cyBxdWFsaWZpZWQgbGl2ZSB0dXBsZXMuIFJhbmdlIGJsa25vOiAwLCBoZWFwIHRpZCAoMCwxKScp CisgICAgfSwKKyAgICB7CisgICAgICAgICMgcmFuZ2UgaGFzbnVsbHMgJiBhbGxudWxscyBhcmUg ZmFsc2UsIGJ1dCBoZWFwIGNvbnRhaW5zIG51bGwgdmFsdWVzIGZvciB0aGUgcmFuZ2UKKworICAg ICAgICBmaW5kICAgICA9PiBwYWNrKCdMQ0MnLCAwLCAweDg4LCAweDAyKSwKKyAgICAgICAgcmVw bGFjZSAgPT4gcGFjaygnTENDJywgMCwgMHg4OCwgMHgwMCksCisgICAgICAgIGJsa25vICAgICAg PT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgdGFibGVfZGF0YSA9PiBzdWIgeworICAgICAg ICAgICAgbXkgKCR0ZXN0X3N0cnVjdCkgPSBAXzsKKyAgICAgICAgICAgIHJldHVybiBxcShJTlNF UlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9uYW1lfSAoYSkgVkFMVUVTIChudWxsKSwgKCdh YWFhYScpOyk7CisgICAgICAgIH0sCisgICAgICAgIGV4cGVjdGVkICAgPT4gd3JhcCgncmFuZ2Ug aGFzbnVsbHMgYW5kIGFsbG51bGxzIGFyZSBmYWxzZSwgYnV0IGNvbnRhaW5zIGEgbnVsbCB2YWx1 ZS4gUmFuZ2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDEpJykKKyAgICB9LAorICAgIHsKKyAgICAg ICAgIyByYW5nZSBhbGxudWxscyBpcyB0cnVlLCBidXQgaGVhcCBjb250YWlucyBub24tbnVsbCB2 YWx1ZXMgZm9yIHRoZSByYW5nZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAs IDB4ODgsIDB4MDIpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMQ0MnLCAwLCAweDg4LCAw eDAxKSwKKyAgICAgICAgYmxrbm8gICAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICB0 YWJsZV9kYXRhID0+IHN1YiB7CisgICAgICAgICAgICBteSAoJHRlc3Rfc3RydWN0KSA9IEBfOwor ICAgICAgICAgICAgcmV0dXJuIHFxKElOU0VSVCBJTlRPICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25h bWV9IChhKSBWQUxVRVMgKG51bGwpLCAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAg ZXhwZWN0ZWQgICA9PiB3cmFwKCdyYW5nZSBhbGxudWxscyBpcyB0cnVlLCBidXQgY29udGFpbnMg bm9ubnVsbCB2YWx1ZS4gUmFuZ2UgYmxrbm86IDAsIGhlYXAgdGlkICgwLDIpJykKKyAgICB9LAor ICAgIHsKKyAgICAgICAgIyBjb25zaXN0ZW50IGZ1bmN0aW9uIHJldHVybiBGQUxTRSBmb3IgdGhl IHZhbGlkIGhlYXAgdmFsdWUKKyAgICAgICAgIyByZXBsYWNlICJjY2NjYyIgd2l0aCAiYmJiYmIi IHNvIHRoYXQgbWluX21heCBpbmRleCB3YXMgdG9vIG5hcnJvdworCisgICAgICAgIGZpbmQgICAg ICAgPT4gJ2NjY2NjJywKKyAgICAgICAgcmVwbGFjZSAgICA9PiAnYmJiYmInLAorICAgICAgICBi bGtubyAgICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3Vi IHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1 cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAo J2FhYWFhJyksICgnY2NjY2MnKTspOworICAgICAgICB9LAorICAgICAgICBleHBlY3RlZCAgID0+ IHdyYXAoJ2hlYXAgdHVwbGUgaW5jb25zaXN0ZW50IHdpdGggaW5kZXguIFJhbmdlIGJsa25vOiAw LCBoZWFwIHRpZCAoMCwyKScpCiAgICAgfQogKTsKIApAQCAtMjQxLDcgKzI5MCw3IEBAIGZvcmVh Y2ggbXkgJHRlc3Rfc3RydWN0IChAdGVzdHMpIHsKICRub2RlLT5zdGFydDsKIAogZm9yZWFjaCBt eSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgewotICAgIG15ICgkcmVzdWx0LCAkc3Rkb3V0LCAkc3Rk ZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsIHFxKFNFTEVDVCBicmluX2luZGV4X2NoZWNr KCckdGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfScsIHRydWUpKSk7CisgICAgbXkgKCRyZXN1bHQs ICRzdGRvdXQsICRzdGRlcnIpID0gJG5vZGUtPnBzcWwoJ3Bvc3RncmVzJywgcXEoU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJyR0ZXN0X3N0cnVjdC0+e2luZGV4X25hbWV9JywgdHJ1ZSwgdHJ1ZSkp KTsKICAgICBsaWtlKCRzdGRlcnIsICR0ZXN0X3N0cnVjdC0+e2V4cGVjdGVkfSk7CiB9CiAKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jIGIvY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9icmluLmMKaW5kZXggZDQwMjRlNzZiNTYuLmI3YmYxNTEzNzM0IDEwMDY0NAotLS0g YS9jb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYworKysgYi9jb250cmliL2FtY2hlY2svdmVy aWZ5X2JyaW4uYwpAQCAtMzksNiArMzksOCBAQCB0eXBlZGVmIHN0cnVjdCBCcmluQ2hlY2tTdGF0 ZQogCS8qIENoZWNrIGFyZ3VtZW50cyAqLwogCiAJYm9vbAkJcmVndWxhcnBhZ2VzY2hlY2s7CisJ Ym9vbAkJaGVhcGFsbGluZGV4ZWQ7CisJQXJyYXlUeXBlICAqY29uc2lzdGVudF9vcGVyX25hbWVz OwogCiAJLyogQlJJTiBjaGVjayBjb21tb24gZmllbGRzICovCiAKQEAgLTY3LDYgKzY5LDMwIEBA IHR5cGVkZWYgc3RydWN0IEJyaW5DaGVja1N0YXRlCiAJUGFnZQkJcmVncGFnZTsKIAlPZmZzZXRO dW1iZXIgcmVncGFnZW9mZnNldDsKIAorCS8qIEhlYXAgYWxsIGluZGV4ZWQgY2hlY2sgZmllbGRz ICovCisKKwlTdHJpbmcJICAqKm9wZXJhdG9yTmFtZXM7CisJQnJpblJldm1hcCAqcmV2bWFwOwor CUJ1ZmZlcgkJYnVmOworCUZtZ3JJbmZvICAgKmNvbnNpc3RlbnRGbjsKKwkvKiBTY2FuIGtleXMg Zm9yIHJlZ3VsYXIgdmFsdWVzICovCisJU2NhbktleSAgICAqbm9ubnVsbF9zazsKKwkvKiBTY2Fu IGtleXMgZm9yIG51bGwgdmFsdWVzICovCisJU2NhbktleSAgICAqaXNudWxsX3NrOworCWRvdWJs ZQkJcmFuZ2VfY250OworCS8qIGZpcnN0IGJsb2NrIG9mIHRoZSBuZXh0IHJhbmdlICovCisJQmxv Y2tOdW1iZXIgbmV4dHJhbmdlQmxrOworCisJLyoKKwkgKiBjaGVja2FibGVfcmFuZ2Ugc2hvd3Mg aWYgY3VycmVudCByYW5nZSBjb3VsZCBiZSBjaGVja2VkIGFuZCBkdHVwCisJICogY29udGFpbnMg dmFsaWQgaW5kZXggdHVwbGUgZm9yIHRoZSByYW5nZS4gSXQgY291bGQgYmUgZmFsc2UgaWYgdGhl CisJICogY3VycmVudCByYW5nZSBpcyBub3Qgc3VtbWFyaXplZCwgb3IgaXQncyBwbGFjZWhvbGRl ciwgb3IgaXQncyBqdXN0IGEKKwkgKiBiZWdpbm5pbmcgb2YgdGhlIGNoZWNrCisJICovCisJYm9v bAkJY2hlY2thYmxlX3JhbmdlOworCUJyaW5NZW1UdXBsZSAqZHR1cDsKKwlNZW1vcnlDb250ZXh0 IHJhbmdlQ3R4OworCU1lbW9yeUNvbnRleHQgaGVhcHR1cGxlQ3R4OwogfQkJCUJyaW5DaGVja1N0 YXRlOwogCiBzdGF0aWMgdm9pZCBicmluX2NoZWNrKFJlbGF0aW9uIGlkeHJlbCwgUmVsYXRpb24g aGVhcHJlbCwgdm9pZCAqY2FsbGJhY2tfc3RhdGUsIGJvb2wgcmVhZG9ubHkpOwpAQCAtODcsNiAr MTEzLDIzIEBAIHN0YXRpYyBib29sIHJldm1hcF9wb2ludHNfdG9faW5kZXhfdHVwbGUoQnJpbkNo ZWNrU3RhdGUgKiBzdGF0ZSk7CiAKIHN0YXRpYyBJdGVtSWQgUGFnZUdldEl0ZW1JZENhcmVmdWwo QnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CiAKK3N0YXRpYyB2b2lkIGNoZWNrX2hlYXBfYWxsX2lu ZGV4ZWQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX2FuZF9w cmVwYXJlX29wZXJhdG9yX25hbWVzKEJyaW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMg dm9pZCBicmluX2NoZWNrX2NhbGxiYWNrKFJlbGF0aW9uIGluZGV4LAorCQkJCQkJCQlJdGVtUG9p bnRlciB0aWQsCisJCQkJCQkJCURhdHVtICp2YWx1ZXMsCisJCQkJCQkJCWJvb2wgKmlzbnVsbCwK KwkJCQkJCQkJYm9vbCB0dXBsZUlzQWxpdmUsCisJCQkJCQkJCXZvaWQgKmJyc3RhdGUpOworCitz dGF0aWMgdm9pZCBjaGVja19oZWFwX3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0 IERhdHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBJdGVtUG9pbnRlciB0aWQpOworCitz dGF0aWMgU2NhbktleSBwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXkoY29uc3QgQnJpbkNoZWNrU3Rh dGUgKiBzdGF0ZSwgQXR0ck51bWJlciBhdHRubyk7CisKK3N0YXRpYyBTY2FuS2V5IHByZXBhcmVf aXNudWxsX3NjYW5fa2V5KEF0dHJOdW1iZXIgYXR0bm8pOworCiBzdGF0aWMgdm9pZCBicmluX2No ZWNrX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KTsKIAog c3RhdGljIHZvaWQgcmV2bWFwX2l0ZW1fZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBj b25zdCBjaGFyICpmbXQpOwpAQCAtOTUsNiArMTM4LDcgQEAgc3RhdGljIHZvaWQgaW5kZXhfdHVw bGVfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpOwogCiBz dGF0aWMgdm9pZCBpbmRleF90dXBsZV9vbmx5X2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUgKiBzdGF0 ZSwgY29uc3QgY2hhciAqZm10KTsKIAorc3RhdGljIHZvaWQgaGVhcF9hbGxfaW5kZXhlZF9lcmVw b3J0KGNvbnN0IEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq dGlkLCBjb25zdCBjaGFyICptZXNzYWdlKTsKIAogRGF0dW0KIGJyaW5faW5kZXhfY2hlY2soUEdf RlVOQ1RJT05fQVJHUykKQEAgLTEwMyw2ICsxNDcsOCBAQCBicmluX2luZGV4X2NoZWNrKFBHX0ZV TkNUSU9OX0FSR1MpCiAJQnJpbkNoZWNrU3RhdGUgKnN0YXRlID0gcGFsbG9jMChzaXplb2YoQnJp bkNoZWNrU3RhdGUpKTsKIAogCXN0YXRlLT5yZWd1bGFycGFnZXNjaGVjayA9IFBHX0dFVEFSR19C T09MKDEpOworCXN0YXRlLT5oZWFwYWxsaW5kZXhlZCA9IFBHX0dFVEFSR19CT09MKDIpOworCXN0 YXRlLT5jb25zaXN0ZW50X29wZXJfbmFtZXMgPSBQR19HRVRBUkdfQVJSQVlUWVBFX1AoMyk7CiAK IAlhbWNoZWNrX2xvY2tfcmVsYXRpb25fYW5kX2NoZWNrKGluZHJlbGlkLAogCQkJCQkJCQkJQlJJ Tl9BTV9PSUQsCkBAIC0xMjcsOSArMTczLDI3IEBAIGJyaW5fY2hlY2soUmVsYXRpb24gaWR4cmVs LCBSZWxhdGlvbiBoZWFwcmVsLCB2b2lkICpjYWxsYmFja19zdGF0ZSwgYm9vbCByZWFkb25sCiAJ c3RhdGUtPmJkZXNjID0gYnJpbl9idWlsZF9kZXNjKGlkeHJlbCk7CiAJc3RhdGUtPm5hdHRzID0g c3RhdGUtPmJkZXNjLT5iZF90dXBkZXNjLT5uYXR0czsKIAorCS8qCisJICogV2Uga25vdyBob3cg bWFueSBhdHRyaWJ1dGVzIGluZGV4IGhhcywgc28gbGV0J3MgcHJvY2VzcyBvcGVyYXRvciBuYW1l cworCSAqIGFycmF5CisJICovCisJaWYgKHN0YXRlLT5oZWFwYWxsaW5kZXhlZCkKKwl7CisJCWNo ZWNrX2FuZF9wcmVwYXJlX29wZXJhdG9yX25hbWVzKHN0YXRlKTsKKworCQkvKgorCQkgKiBDaGVj ayBpZiB3ZSBhcmUgT0sgd2l0aCBpbmRjaGVja3htaW4sIGFuZCB1bnJlZ2lzdGVyIHNuYXBzaG90 IGFzIHdlCisJCSAqIGRvbid0IG5lZWQgaXQgZnVydGhlcgorCQkgKi8KKwkJVW5yZWdpc3RlclNu YXBzaG90KFJlZ2lzdGVyU25hcHNob3RBbmRDaGVja0luZGV4Q2hlY2tYTWluKHN0YXRlLT5pZHhy ZWwpKTsKKwl9CiAKIAljaGVja19icmluX2luZGV4X3N0cnVjdHVyZShzdGF0ZSk7CiAKKwlpZiAo c3RhdGUtPmhlYXBhbGxpbmRleGVkKQorCXsKKwkJY2hlY2tfaGVhcF9hbGxfaW5kZXhlZChzdGF0 ZSk7CisJfQogCiAJYnJpbl9mcmVlX2Rlc2Moc3RhdGUtPmJkZXNjKTsKIH0KQEAgLTYyOCw3ICs2 OTIsNiBAQCBjaGVja19yZWd1bGFyX3BhZ2VzKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCiAJc3Rh dGUtPnJlZ3BhZ2VvZmZzZXQgPSBJbnZhbGlkT2Zmc2V0TnVtYmVyOwogCXN0YXRlLT5pZHhuYmxv Y2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhzdGF0ZS0+aWR4cmVsKTsKIAotCiAJLyoK IAkgKiBQcmVwYXJlIHN0cmVhbSBkYXRhIGZvciByZWd1bGFyIHBhZ2VzIHdhbGsuIEl0IGlzIHNh ZmUgdG8gdXNlIGJhdGNobW9kZQogCSAqIGFzIGJsb2NrX3JhbmdlX3JlYWRfc3RyZWFtX2NiIHRh a2VzIG5vIGxvY2tzLgpAQCAtNzg4LDYgKzg1MSw0MTUgQEAgUGFnZUdldEl0ZW1JZENhcmVmdWwo QnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSkKIAlyZXR1cm4gaXRlbWlkOwogfQogCisvKgorICogQ2hl Y2sgdGhhdCBldmVyeSBoZWFwIHR1cGxlIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGluZGV4Lgor ICoKKyAqIEhlcmUgd2UgZ2VuZXJhdGUgU2NhbktleSBmb3IgZXZlcnkgaGVhcCB0dXBsZSBhbmQg dGVzdCBpdCBhZ2FpbnN0CisgKiBhcHByb3ByaWF0ZSByYW5nZSB1c2luZyBjb25zaXN0ZW50Rm4g KGZvciBTY2FuS2V5IGdlbmVyYXRpb24gbG9naWMgbG9vayAncHJlcGFyZV9ub25udWxsX3NjYW5f a2V5JykKKyAqCisgKiBBbHNvLCB3ZSBjaGVjayB0aGF0IGZpZWxkcyAnZW1wdHlfcmFuZ2UnLCAn YWxsX251bGxzJyBhbmQgJ2hhc19udWxscycKKyAqIGFyZSBub3QgdG9vICJuYXJyb3ciIGZvciBl YWNoIHJhbmdlLCB3aGljaCBtZWFuczoKKyAqIDEpIGhhc19udWxscyA9IGZhbHNlLCBidXQgd2Ug c2VlIG51bGwgdmFsdWUgKG9ubHkgZm9yIG9pX3JlZ3VsYXJfbnVsbHMgaXMgdHJ1ZSkKKyAqIDIp IGFsbF9udWxscyA9IHRydWUsIGJ1dCB3ZSBzZWUgbm9ubnVsbCB2YWx1ZS4KKyAqIDMpIGVtcHR5 X3JhbmdlID0gdHJ1ZSwgYnV0IHdlIHNlZSB0dXBsZSB3aXRoaW4gdGhlIHJhbmdlLgorICoKKyAq IFdlIHVzZSBhbGxvd1N5bmMgPSBmYWxzZSwgYmVjYXVzZSB0aGlzIHdheQorICogd2UgcHJvY2Vz cyBmdWxsIHJhbmdlcyBvbmUgYnkgb25lIGZyb20gdGhlIGZpcnN0IHJhbmdlLgorICogSXQncyBu b3QgbmVjZXNzYXJ5LCBidXQgbWFrZXMgdGhlIGNvZGUgc2ltcGxlciBhbmQgdGhpcyB3YXkKKyAq IHdlIG5lZWQgdG8gZmV0Y2ggZXZlcnkgaW5kZXggdHVwbGUgb25seSBvbmNlLgorICovCitzdGF0 aWMgdm9pZAorY2hlY2tfaGVhcF9hbGxfaW5kZXhlZChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQor eworCVJlbGF0aW9uCWlkeHJlbCA9IHN0YXRlLT5pZHhyZWw7CisJUmVsYXRpb24JaGVhcHJlbCA9 IHN0YXRlLT5oZWFwcmVsOworCWRvdWJsZQkJcmVsdHVwbGVzOworCUluZGV4SW5mbyAgKmluZGV4 SW5mbzsKKworCS8qIGhlYXAgYWxsIGluZGV4ZWQgY2hlY2sgZmllbGRzIGluaXRpYWxpemF0aW9u ICovCisKKwlzdGF0ZS0+cmV2bWFwID0gYnJpblJldm1hcEluaXRpYWxpemUoaWR4cmVsLCAmc3Rh dGUtPnBhZ2VzUGVyUmFuZ2UpOworCXN0YXRlLT5kdHVwID0gYnJpbl9uZXdfbWVtdHVwbGUoc3Rh dGUtPmJkZXNjKTsKKwlzdGF0ZS0+Y2hlY2thYmxlX3JhbmdlID0gZmFsc2U7CisJc3RhdGUtPmNv bnNpc3RlbnRGbiA9IHBhbGxvYzBfYXJyYXkoRm1nckluZm8sIHN0YXRlLT5uYXR0cyk7CisJc3Rh dGUtPnJhbmdlX2NudCA9IDA7CisJLyogbmV4dCByYW5nZSBpcyB0aGUgZmlyc3QgcmFuZ2UgaW4g dGhlIGJlZ2lubmluZyAqLworCXN0YXRlLT5uZXh0cmFuZ2VCbGsgPSAwOworCXN0YXRlLT5ub25u dWxsX3NrID0gcGFsbG9jMF9hcnJheShTY2FuS2V5LCBzdGF0ZS0+bmF0dHMpOworCXN0YXRlLT5p c251bGxfc2sgPSBwYWxsb2MwX2FycmF5KFNjYW5LZXksIHN0YXRlLT5uYXR0cyk7CisJc3RhdGUt PnJhbmdlQ3R4ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAor CQkJCQkJCQkJCQkiYnJpbiBjaGVjayByYW5nZSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJQUxMT0NT RVRfREVGQVVMVF9TSVpFUyk7CisJc3RhdGUtPmhlYXB0dXBsZUN0eCA9IEFsbG9jU2V0Q29udGV4 dENyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCSJicmluIGNoZWNrIHR1 cGxlIGNvbnRleHQiLAorCQkJCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkv KgorCSAqIFByZXBhcmUgIm5vbi1udWxsIiBhbmQgImlzX251bGwiIHNjYW4ga2V5cyBhbmQgY29u c2lzdGVudCBmbiBmb3IgZWFjaAorCSAqIGF0dHJpYnV0ZQorCSAqLworCWZvciAoQXR0ck51bWJl ciBhdHRubyA9IDE7IGF0dG5vIDw9IHN0YXRlLT5uYXR0czsgYXR0bm8rKykKKwl7CisJCUZtZ3JJ bmZvICAgKnRtcDsKKworCQl0bXAgPSBpbmRleF9nZXRwcm9jaW5mbyhpZHhyZWwsIGF0dG5vLCBC UklOX1BST0NOVU1fQ09OU0lTVEVOVCk7CisJCWZtZ3JfaW5mb19jb3B5KCZzdGF0ZS0+Y29uc2lz dGVudEZuW2F0dG5vIC0gMV0sIHRtcCwgQ3VycmVudE1lbW9yeUNvbnRleHQpOworCisJCXN0YXRl LT5ub25udWxsX3NrW2F0dG5vIC0gMV0gPSBwcmVwYXJlX25vbm51bGxfc2Nhbl9rZXkoc3RhdGUs IGF0dG5vKTsKKwkJc3RhdGUtPmlzbnVsbF9za1thdHRubyAtIDFdID0gcHJlcGFyZV9pc251bGxf c2Nhbl9rZXkoYXR0bm8pOworCX0KKworCWluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGlkeHJl bCk7CisKKwkvKgorCSAqIFVzZSBzbmFwc2hvdCB0byBjaGVjayBvbmx5IHRob3NlIHR1cGxlcyB0 aGF0IGFyZSBndWFyYW50ZWVkIHRvIGJlCisJICogaW5kZXhlZCBhbHJlYWR5LiBVc2luZyBTbmFw c2hvdEFueSB3b3VsZCBtYWtlIGl0IG1vcmUgZGlmZmljdWx0IHRvIHNheQorCSAqIGlmIHRoZXJl IGlzIGEgY29ycnVwdGlvbiBvciBjaGVja2VkIHR1cGxlIGp1c3QgaGF2ZW4ndCBiZWVuIGluZGV4 ZWQKKwkgKiB5ZXQuIEFsc28sIHdlIHdhbnQgdG8gc3VwcG9ydCBDSUMgaW5kZXhlcy4KKwkgKi8K KwlpbmRleEluZm8tPmlpX0NvbmN1cnJlbnQgPSB0cnVlOworCXJlbHR1cGxlcyA9IHRhYmxlX2lu ZGV4X2J1aWxkX3NjYW4oaGVhcHJlbCwgaWR4cmVsLCBpbmRleEluZm8sIGZhbHNlLCB0cnVlLAor CQkJCQkJCQkJICAgYnJpbl9jaGVja19jYWxsYmFjaywgKHZvaWQgKikgc3RhdGUsIE5VTEwpOwor CisJZWxvZyhERUJVRzMsICJyYW5nZXMgd2VyZSBjaGVja2VkOiAlZiIsIHN0YXRlLT5yYW5nZV9j bnQpOworCWVsb2coREVCVUczLCAic2NhbiB0b3RhbCB0dXBsZXM6ICVmIiwgcmVsdHVwbGVzKTsK KworCWlmIChzdGF0ZS0+YnVmICE9IEludmFsaWRCdWZmZXIpCisJCVJlbGVhc2VCdWZmZXIoc3Rh dGUtPmJ1Zik7CisKKwlicmluUmV2bWFwVGVybWluYXRlKHN0YXRlLT5yZXZtYXApOworCU1lbW9y eUNvbnRleHREZWxldGUoc3RhdGUtPnJhbmdlQ3R4KTsKKwlNZW1vcnlDb250ZXh0RGVsZXRlKHN0 YXRlLT5oZWFwdHVwbGVDdHgpOworfQorCisvKgorICogQ2hlY2sgb3BlcmF0b3IgbmFtZXMgYXJy YXkgaW5wdXQgcGFyYW1ldGVyIGFuZCBjb252ZXJ0IGl0IHRvIGFycmF5IG9mIHN0cmluZ3MKKyAq IEVtcHR5IGlucHV0IGFycmF5IG1lYW5zIHdlIHVzZSAiPSIgb3BlcmF0b3IgZm9yIGV2ZXJ5IGF0 dHJpYnV0ZQorICovCitzdGF0aWMgdm9pZAorY2hlY2tfYW5kX3ByZXBhcmVfb3BlcmF0b3JfbmFt ZXMoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSkKK3sKKwlPaWQJCQllbGVtZW50X3R5cGUgPSBBUlJf RUxFTVRZUEUoc3RhdGUtPmNvbnNpc3RlbnRfb3Blcl9uYW1lcyk7CisJaW50MTYJCXR5cGxlbjsK Kwlib29sCQl0eXBieXZhbDsKKwljaGFyCQl0eXBhbGlnbjsKKwlEYXR1bQkgICAqdmFsdWVzOwor CWJvb2wJICAgKmVsZW1fbnVsbHM7CisJaW50CQkJbnVtX2VsZW1zOworCisJc3RhdGUtPm9wZXJh dG9yTmFtZXMgPSBwYWxsb2Moc2l6ZW9mKFN0cmluZykgKiBzdGF0ZS0+bmF0dHMpOworCisJZ2V0 X3R5cGxlbmJ5dmFsYWxpZ24oZWxlbWVudF90eXBlLCAmdHlwbGVuLCAmdHlwYnl2YWwsICZ0eXBh bGlnbik7CisJZGVjb25zdHJ1Y3RfYXJyYXkoc3RhdGUtPmNvbnNpc3RlbnRfb3Blcl9uYW1lcywg ZWxlbWVudF90eXBlLCB0eXBsZW4sIHR5cGJ5dmFsLCB0eXBhbGlnbiwKKwkJCQkJICAmdmFsdWVz LCAmZWxlbV9udWxscywgJm51bV9lbGVtcyk7CisKKwkvKiBJZiB3ZSBoYXZlIHNvbWUgaW5wdXQg Y2hlY2sgaXQgYW5kIGNvbnZlcnQgdG8gU3RyaW5nKiogKi8KKwlpZiAobnVtX2VsZW1zICE9IDAp CisJeworCQlpZiAobnVtX2VsZW1zICE9IHN0YXRlLT5uYXR0cykKKwkJeworCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCSBlcnJtc2coIk9wZXJhdG9yIG5hbWVzIGFycmF5IGxlbmd0aCAldSwgYnV0IGluZGV4IGhh cyAldSBhdHRyaWJ1dGVzIiwKKwkJCQkJCQludW1fZWxlbXMsIHN0YXRlLT5uYXR0cykpKTsKKwkJ fQorCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2VsZW1zOyBpKyspCisJCXsKKwkJCWlmIChl bGVtX251bGxzW2ldKQorCQkJeworCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coIk9wZXJhdG9y IG5hbWVzIGFycmF5IGNvbnRhaW5zIE5VTEwiKSkpOworCQkJfQorCQkJc3RhdGUtPm9wZXJhdG9y TmFtZXNbaV0gPSBtYWtlU3RyaW5nKFRleHREYXR1bUdldENTdHJpbmcodmFsdWVzW2ldKSk7CisJ CX0KKwl9CisJZWxzZQorCXsKKwkJLyogSWYgdGhlcmUgaXMgbm8gaW5wdXQganVzdCB1c2UgIj0i IG9wZXJhdG9yIGZvciBhbGwgYXR0cmlidXRlcyAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IHN0 YXRlLT5uYXR0czsgaSsrKQorCQl7CisJCQlzdGF0ZS0+b3BlcmF0b3JOYW1lc1tpXSA9IG1ha2VT dHJpbmcoIj0iKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFByZXBhcmUgU2NhbktleSBmb3IgaW5k ZXggYXR0cmlidXRlLgorICoKKyAqIENvbnNpc3RlbnRGbiByZXF1aXJlcyBTY2FuS2V5LCBzbyB3 ZSBuZWVkIHRvIGdlbmVyYXRlIFNjYW5LZXkgZm9yIGV2ZXJ5CisgKiBhdHRyaWJ1dGUgc29tZWhv dy4gV2Ugd2FudCBTY2FuS2V5IHRoYXQgd291bGQgcmVzdWx0IGluIFRSVUUgZm9yIGV2ZXJ5IGhl YXAKKyAqIHR1cGxlIHdpdGhpbiB0aGUgcmFuZ2Ugd2hlbiB3ZSB1c2UgaXRzIGluZGV4ZWQgdmFs dWUgYXMgc2tfYXJndW1lbnQuCisgKiBUbyBnZW5lcmF0ZSBzdWNoIGEgU2NhbktleSB3ZSBuZWVk IHRvIGRlZmluZSB0aGUgcmlnaHQgb3BlcmFuZCB0eXBlIGFuZCB0aGUgc3RyYXRlZ3kgbnVtYmVy LgorICogUmlnaHQgb3BlcmFuZCB0eXBlIGlzIGEgdHlwZSBvZiBkYXRhIHRoYXQgaW5kZXggaXMg YnVpbHQgb24sIHNvIGl0J3MgJ29wY2ludHlwZScuCisgKiBUaGVyZSBpcyBubyBzdHJhdGVneSBu dW1iZXIgdGhhdCB3ZSBjYW4gYWx3YXlzIHVzZSwKKyAqIGJlY2F1c2UgZXZlcnkgb3BjbGFzcyBk ZWZpbmVzIGl0cyBvd24gc2V0IG9mIG9wZXJhdG9ycyBpdCBzdXBwb3J0cyBhbmQgc3RyYXRlZ3kg bnVtYmVyCisgKiBmb3IgdGhlIHNhbWUgb3BlcmF0b3IgY2FuIGRpZmZlciBmcm9tIG9wY2xhc3Mg dG8gb3BjbGFzcy4KKyAqIFNvIHRvIGdldCBzdHJhdGVneSBudW1iZXIgd2UgbG9vayB1cCBhbiBv cGVyYXRvciB0aGF0IGdpdmVzIHVzIGRlc2lyZWQgYmVoYXZpb3IKKyAqIGFuZCB3aGljaCBib3Ro IG9wZXJhbmQgdHlwZXMgYXJlICdvcGNpbnR5cGUnIGFuZCB0aGVuIHJldHJpZXZlIHRoZSBzdHJh dGVneSBudW1iZXIgZm9yIGl0LgorICogTW9zdCBvZiB0aGUgdGltZSB3ZSBjYW4gdXNlICc9Jy4g V2UgbGV0IHVzZXIgZGVmaW5lIG9wZXJhdG9yIG5hbWUgaW4gY2FzZSBvcGNsYXNzIGRvZXNuJ3QK KyAqIHN1cHBvcnQgJz0nIG9wZXJhdG9yLiBBbHNvLCBpZiBzdWNoIG9wZXJhdG9yIGRvZXNuJ3Qg ZXhpc3QsIHdlIGNhbid0IHByb2NlZWQgd2l0aCB0aGUgY2hlY2suCisgKgorICogR2VuZXJhdGVk IG9uY2UsIGFuZCB3aWxsIGJlIHJldXNlZCBmb3IgYWxsIGhlYXAgdHVwbGVzLgorICogQXJndW1l bnQgZmllbGQgd2lsbCBiZSBmaWxsZWQgZm9yIGV2ZXJ5IGhlYXAgdHVwbGUgYmVmb3JlCisgKiBj b25zaXN0ZW50IGZ1bmN0aW9uIGludm9jYXRpb24sIHNvIGxlYXZlIGl0IE5VTEwgZm9yIGEgd2hp bGUuCisgKgorICovCitzdGF0aWMgU2NhbktleQorcHJlcGFyZV9ub25udWxsX3NjYW5fa2V5KGNv bnN0IEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEF0dHJOdW1iZXIgYXR0bm8pCit7CisJU2Nhbktl eQkJc2NhbktleTsKKwlPaWQJCQlvcE9pZDsKKwlPaWQJCQlvcEZhbWlseU9pZDsKKwlib29sCQlk ZWZpbmVkOworCVN0cmF0ZWd5TnVtYmVyIHN0cmF0ZWd5OworCVJlZ1Byb2NlZHVyZSBvcFJlZ1By b2M7CisJTGlzdAkgICAqb3Blck5hbWVMaXN0OworCWludAkJCWF0dGluZGV4ID0gYXR0bm8gLSAx OworCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKHN0YXRlLT5iZGVzYy0+ YmRfdHVwZGVzYywgYXR0aW5kZXgpOworCU9pZAkJCXR5cGUgPSBzdGF0ZS0+aWR4cmVsLT5yZF9v cGNpbnR5cGVbYXR0aW5kZXhdOworCVN0cmluZwkgICAqb3BuYW1lID0gc3RhdGUtPm9wZXJhdG9y TmFtZXNbYXR0bm8gLSAxXTsKKworCW9wRmFtaWx5T2lkID0gc3RhdGUtPmlkeHJlbC0+cmRfb3Bm YW1pbHlbYXR0aW5kZXhdOworCW9wZXJOYW1lTGlzdCA9IGxpc3RfbWFrZTEob3BuYW1lKTsKKwlv cE9pZCA9IE9wZXJhdG9yTG9va3VwKG9wZXJOYW1lTGlzdCwgdHlwZSwgdHlwZSwgJmRlZmluZWQp OworCisJaWYgKG9wT2lkID09IEludmFsaWRPaWQpCisJeworCQllcmVwb3J0KEVSUk9SLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0ZVTkNUSU9OKSwKKwkJCQkgZXJybXNnKCJUaGVy ZSBpcyBubyBvcGVyYXRvciAlcyBmb3IgdHlwZSAldSIsCisJCQkJCQlvcG5hbWUtPnN2YWwsIHR5 cGUpKSk7CisJfQorCisJc3RyYXRlZ3kgPSBnZXRfb3Bfb3BmYW1pbHlfc3RyYXRlZ3kob3BPaWQs IG9wRmFtaWx5T2lkKTsKKworCWlmIChzdHJhdGVneSA9PSAwKQorCXsKKwkJZXJlcG9ydChFUlJP UiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkgZXJybXNn KCJvcGVyYXRvciAlcyBpcyBub3QgYSBtZW1iZXIgb2Ygb3BlcmF0b3IgZmFtaWx5IFwiJXNcIiIs CisJCQkJCQlvcG5hbWUtPnN2YWwsCisJCQkJCQlnZXRfb3BmYW1pbHlfbmFtZShvcEZhbWlseU9p ZCwgZmFsc2UpKSkpOworCX0KKworCW9wUmVnUHJvYyA9IGdldF9vcGNvZGUob3BPaWQpOworCXNj YW5LZXkgPSBwYWxsb2MwKHNpemVvZihTY2FuS2V5RGF0YSkpOworCVNjYW5LZXlFbnRyeUluaXRp YWxpemUoCisJCQkJCQkgICBzY2FuS2V5LAorCQkJCQkJICAgMCwKKwkJCQkJCSAgIGF0dG5vLAor CQkJCQkJICAgc3RyYXRlZ3ksCisJCQkJCQkgICB0eXBlLAorCQkJCQkJICAgYXR0ci0+YXR0Y29s bGF0aW9uLAorCQkJCQkJICAgb3BSZWdQcm9jLAorCQkJCQkJICAgKERhdHVtKSBOVUxMCisJCSk7 CisJcGZyZWUob3Blck5hbWVMaXN0KTsKKworCXJldHVybiBzY2FuS2V5OworfQorCitzdGF0aWMg U2NhbktleQorcHJlcGFyZV9pc251bGxfc2Nhbl9rZXkoQXR0ck51bWJlciBhdHRubykKK3sKKwlT Y2FuS2V5CQlzY2FuS2V5OworCisJc2NhbktleSA9IHBhbGxvYzAoc2l6ZW9mKFNjYW5LZXlEYXRh KSk7CisJU2NhbktleUVudHJ5SW5pdGlhbGl6ZShzY2FuS2V5LAorCQkJCQkJICAgU0tfSVNOVUxM IHwgU0tfU0VBUkNITlVMTCwKKwkJCQkJCSAgIGF0dG5vLAorCQkJCQkJICAgSW52YWxpZFN0cmF0 ZWd5LAorCQkJCQkJICAgSW52YWxpZE9pZCwKKwkJCQkJCSAgIEludmFsaWRPaWQsCisJCQkJCQkg ICBJbnZhbGlkT2lkLAorCQkJCQkJICAgKERhdHVtKSAwKTsKKwlyZXR1cm4gc2NhbktleTsKK30K KworLyoKKyAqIFdlIHdhbGsgZnJvbSB0aGUgZmlyc3QgcmFuZ2UgKGJsa25vID0gMCkgdG8gdGhl IGxhc3QgYXMgdGhlIHNjYW4gcHJvY2VlZC4KKyAqIEZvciBldmVyeSBoZWFwIHR1cGxlIHdlIGNo ZWNrIGlmIHdlIGFyZSBkb25lIHdpdGggdGhlIGN1cnJlbnQgcmFuZ2UsIGFuZCB3ZSBuZWVkIHRv IG1vdmUgZnVydGhlcgorICogdG8gdGhlIGN1cnJlbnQgaGVhcCB0dXBsZSdzIHJhbmdlLiBXaGls ZSBtb3ZpbmcgdG8gdGhlIG5leHQgcmFuZ2Ugd2UgY2hlY2sgdGhhdCBpdCdzIG5vdCBlbXB0eSAo YmVjYXVzZQorICogd2UgaGF2ZSBhdCBsZWFzdCBvbmUgdHVwbGUgZm9yIHRoaXMgcmFuZ2UpLgor ICogRXZlcnkgaGVhcCB0dXBsZSBhcmUgY2hlY2tlZCB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhl IHJhbmdlIGl0IGJlbG9uZ3MgdG8uCisgKiBJbiBjYXNlIG9mIHVuc3VtbWFyaXplZCByYW5nZXMg YW5kIHBsYWNlaG9sZGVycyB3ZSBza2lwIGFsbCBjaGVja3MuCisgKgorICogV2hpbGUgbW92aW5n LCB3ZSBtYXkganVtcCBvdmVyIHNvbWUgcmFuZ2VzLAorICogYnV0IGl0J3Mgb2theSBiZWNhdXNl IHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGNoZWNrIHRoZW0gYW55d2F5LgorICogV2UgYWxzbyBj YW4ndCBzYXkgd2hldGhlciBza2lwcGVkIHJhbmdlcyBzaG91bGQgYmUgbWFya2VkIGFzIGVtcHR5 IG9yIG5vdCwKKyAqIHNpbmNlIGl0J3MgcG9zc2libGUgdGhhdCB0aGVyZSB3ZXJlIHNvbWUgdHVw bGVzIGJlZm9yZSB0aGF0IGFyZSBub3cgZGVsZXRlZC4KKyAqCisgKi8KK3N0YXRpYyB2b2lkCiti cmluX2NoZWNrX2NhbGxiYWNrKFJlbGF0aW9uIGluZGV4LCBJdGVtUG9pbnRlciB0aWQsIERhdHVt ICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwgYm9vbCB0dXBsZUlzQWxpdmUsIHZvaWQgKmJyc3RhdGUp Cit7CisJQnJpbkNoZWNrU3RhdGUgKnN0YXRlOworCUJsb2NrTnVtYmVyIGhlYXBibGs7CisKKwlz dGF0ZSA9IChCcmluQ2hlY2tTdGF0ZSAqKSBicnN0YXRlOworCWhlYXBibGsgPSBJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkvKiBJZiB3ZSB3ZW50IGJleW9uZCB0aGUgY3VycmVu dCByYW5nZSBsZXQncyBmZXRjaCBuZXcgcmFuZ2UgKi8KKwlpZiAoaGVhcGJsayA+PSBzdGF0ZS0+ bmV4dHJhbmdlQmxrKQorCXsKKwkJQnJpblR1cGxlICAqdHVwOworCQlCcmluVHVwbGUgICp0dXBj b3B5ID0gTlVMTDsKKwkJTWVtb3J5Q29udGV4dCBvbGRDdHg7CisJCU9mZnNldE51bWJlciBvZmY7 CisJCVNpemUJCXNpemU7CisJCVNpemUJCWJ0dXBzeiA9IDA7CisKKwkJTWVtb3J5Q29udGV4dFJl c2V0KHN0YXRlLT5yYW5nZUN0eCk7CisJCW9sZEN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhz dGF0ZS0+cmFuZ2VDdHgpOworCisJCXN0YXRlLT5yYW5nZV9jbnQrKzsKKworCQkvKiBNb3ZlIHRv IHRoZSByYW5nZSB0aGF0IGNvbnRhaW5zIGN1cnJlbnQgaGVhcCB0dXBsZSAqLworCQl0dXAgPSBi cmluR2V0VHVwbGVGb3JIZWFwQmxvY2soc3RhdGUtPnJldm1hcCwgaGVhcGJsaywgJnN0YXRlLT5i dWYsCisJCQkJCQkJCQkgICAmb2ZmLCAmc2l6ZSwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCisJCWlm ICh0dXApCisJCXsKKwkJCXR1cGNvcHkgPSBicmluX2NvcHlfdHVwbGUodHVwLCBzaXplLCB0dXBj b3B5LCAmYnR1cHN6KTsKKwkJCUxvY2tCdWZmZXIoc3RhdGUtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5M T0NLKTsKKwkJCXN0YXRlLT5kdHVwID0gYnJpbl9kZWZvcm1fdHVwbGUoc3RhdGUtPmJkZXNjLCB0 dXBjb3B5LCBzdGF0ZS0+ZHR1cCk7CisKKwkJCS8qIFdlIGNhbid0IGNoZWNrIHBsYWNlaG9sZGVy IHJhbmdlcyAqLworCQkJc3RhdGUtPmNoZWNrYWJsZV9yYW5nZSA9ICFzdGF0ZS0+ZHR1cC0+YnRf cGxhY2Vob2xkZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBXZSBjYW4ndCBjaGVjayB1bnN1 bW1hcml6ZWQgcmFuZ2VzLiAqLworCQkJc3RhdGUtPmNoZWNrYWJsZV9yYW5nZSA9IGZhbHNlOwor CQl9CisKKwkJLyoKKwkJICogVXBkYXRlIG5leHRyYW5nZUJsayBzbyB3ZSBrbm93IHdoZW4gd2Ug YXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudAorCQkgKiByYW5nZQorCQkgKi8KKwkJc3RhdGUtPm5l eHRyYW5nZUJsayA9IChoZWFwYmxrIC8gc3RhdGUtPnBhZ2VzUGVyUmFuZ2UgKyAxKSAqIHN0YXRl LT5wYWdlc1BlclJhbmdlOworCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRDdHgpOworCisJ CS8qIFJhbmdlIG11c3Qgbm90IGJlIGVtcHR5ICovCisJCWlmIChzdGF0ZS0+Y2hlY2thYmxlX3Jh bmdlICYmIHN0YXRlLT5kdHVwLT5idF9lbXB0eV9yYW5nZSkKKwkJeworCQkJaGVhcF9hbGxfaW5k ZXhlZF9lcmVwb3J0KHN0YXRlLCB0aWQsICJyYW5nZSBpcyBtYXJrZWQgYXMgZW1wdHkgYnV0IGNv bnRhaW5zIHF1YWxpZmllZCBsaXZlIHR1cGxlcyIpOworCQl9CisKKwl9CisKKwkvKiBDaGVjayB0 dXBsZSBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGluZGV4ICovCisJaWYgKHN0YXRlLT5jaGVja2Fi bGVfcmFuZ2UpCisJeworCQljaGVja19oZWFwX3R1cGxlKHN0YXRlLCB2YWx1ZXMsIGlzbnVsbCwg dGlkKTsKKwl9CisKK30KKworLyoKKyAqIFdlIGNoZWNrIGhhc251bGxzIGZsYWdzIGZvciBudWxs IHZhbHVlcyBhbmQgb2lfcmVndWxhcl9udWxscyA9IHRydWUsCisgKiBjaGVjayBhbGxudWxscyBp cyBmYWxzZSBmb3IgYWxsIG5vbm51bGwgdmFsdWVzIG5vdCBtYXR0ZXIgb2lfcmVndWxhcl9udWxs cyBpcyBzZXQgb3Igbm90LAorICogRm9yIGFsbCBvdGhlciBjYXNlcyB3ZSBjYWxsIGNvbnNpc3Rl bnRGbiB3aXRoIGFwcHJvcHJpYXRlIHNjYW5LZXk6CisgKiAtIGZvciBvaV9yZWd1bGFyX251bGxz ID0gZmFsc2UgYW5kIG51bGwgdmFsdWVzIHdlIHVzZSAnaXNOdWxsJyBzY2FuS2V5LAorICogLSBm b3Igbm9ubnVsbCB2YWx1ZXMgd2UgdXNlICdub25udWxsJyBzY2FuS2V5CisgKi8KK3N0YXRpYyB2 b2lkCitjaGVja19oZWFwX3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IERhdHVt ICp2YWx1ZXMsIGNvbnN0IGJvb2wgKm51bGxzLCBJdGVtUG9pbnRlciB0aWQpCit7CisJaW50CQkJ YXR0aW5kZXg7CisJQnJpbk1lbVR1cGxlICpkdHVwID0gc3RhdGUtPmR0dXA7CisJQnJpbkRlc2Mg ICAqYmRlc2MgPSBzdGF0ZS0+YmRlc2M7CisJTWVtb3J5Q29udGV4dCBvbGRDdHg7CisKKwlBc3Nl cnQoc3RhdGUtPmNoZWNrYWJsZV9yYW5nZSk7CisKKwlNZW1vcnlDb250ZXh0UmVzZXQoc3RhdGUt PmhlYXB0dXBsZUN0eCk7CisJb2xkQ3R4ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0YXRlLT5o ZWFwdHVwbGVDdHgpOworCisJLyogY2hlY2sgZXZlcnkgaW5kZXggYXR0cmlidXRlICovCisJZm9y IChhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5hdHRzOyBhdHRpbmRleCsrKQorCXsK KwkJQnJpblZhbHVlcyAqYnZhbDsKKwkJRGF0dW0JCWNvbnNpc3RlbnRGblJlc3VsdDsKKwkJYm9v bAkJY29uc2lzdGVudDsKKwkJU2NhbktleQkJc2NhbktleTsKKwkJYm9vbAkJb2lfcmVndWxhcl9u dWxscyA9IGJkZXNjLT5iZF9pbmZvW2F0dGluZGV4XS0+b2lfcmVndWxhcl9udWxsczsKKworCQli dmFsID0gJmR0dXAtPmJ0X2NvbHVtbnNbYXR0aW5kZXhdOworCisJCWlmIChudWxsc1thdHRpbmRl eF0pCisJCXsKKwkJCS8qCisJCQkgKiBVc2UgaGFzbnVsbHMgZmxhZyBmb3Igb2lfcmVndWxhcl9u dWxscyBpcyB0cnVlLiBPdGhlcndpc2UsCisJCQkgKiBkZWxlZ2F0ZSBjaGVjayB0byBjb25zaXN0 ZW50Rm4KKwkJCSAqLworCQkJaWYgKG9pX3JlZ3VsYXJfbnVsbHMpCisJCQl7CisJCQkJLyogV2Ug aGF2ZSBudWxsIHZhbHVlLCBzbyBoYXNudWxscyBvciBhbGxudWxscyBtdXN0IGJlIHRydWUgKi8K KwkJCQlpZiAoIShidmFsLT5idl9oYXNudWxscyB8fCBidmFsLT5idl9hbGxudWxscykpCisJCQkJ eworCQkJCQloZWFwX2FsbF9pbmRleGVkX2VyZXBvcnQoc3RhdGUsIHRpZCwKKwkJCQkJCQkJCQkJ ICJyYW5nZSBoYXNudWxscyBhbmQgYWxsbnVsbHMgYXJlIGZhbHNlLCBidXQgY29udGFpbnMgYSBu dWxsIHZhbHVlIik7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKgorCQkJICog SW4gY2FzZSBvZiBudWxsIGFuZCBvaV9yZWd1bGFyX251bGxzID0gZmFsc2Ugd2UgdXNlIGlzTnVs bAorCQkJICogc2NhbktleSBmb3IgaW52b2NhdGlvbiBvZiBjb25zaXN0ZW50Rm4KKwkJCSAqLwor CQkJc2NhbktleSA9IHN0YXRlLT5pc251bGxfc2tbYXR0aW5kZXhdOworCQl9CisJCWVsc2UKKwkJ eworCQkJLyogV2UgaGF2ZSBhIG5vbm51bGwgdmFsdWUsIHNvIGFsbG51bGxzIHNob3VsZCBiZSBm YWxzZSAqLworCQkJaWYgKGJ2YWwtPmJ2X2FsbG51bGxzKQorCQkJeworCQkJCWhlYXBfYWxsX2lu ZGV4ZWRfZXJlcG9ydChzdGF0ZSwgdGlkLCAicmFuZ2UgYWxsbnVsbHMgaXMgdHJ1ZSwgYnV0IGNv bnRhaW5zIG5vbm51bGwgdmFsdWUiKTsKKwkJCX0KKworCQkJLyogdXNlIG5vbm51bGwgc2NhbiBr ZXkgKi8KKwkJCXNjYW5LZXkgPSBzdGF0ZS0+bm9ubnVsbF9za1thdHRpbmRleF07CisJCQlzY2Fu S2V5LT5za19hcmd1bWVudCA9IHZhbHVlc1thdHRpbmRleF07CisJCX0KKworCQkvKiBJZiBvaV9y ZWd1bGFyX251bGxzID0gdHJ1ZSB3ZSBzaG91bGQgbmV2ZXIgZ2V0IHRoZXJlIHdpdGggbnVsbCAq LworCQlBc3NlcnQoIW9pX3JlZ3VsYXJfbnVsbHMgfHwgIW51bGxzW2F0dGluZGV4XSk7CisKKwkJ aWYgKHN0YXRlLT5jb25zaXN0ZW50Rm5bYXR0aW5kZXhdLmZuX25hcmdzID49IDQpCisJCXsKKwkJ CWNvbnNpc3RlbnRGblJlc3VsdCA9IEZ1bmN0aW9uQ2FsbDRDb2xsKCZzdGF0ZS0+Y29uc2lzdGVu dEZuW2F0dGluZGV4XSwKKwkJCQkJCQkJCQkJCSAgIHN0YXRlLT5pZHhyZWwtPnJkX2luZGNvbGxh dGlvblthdHRpbmRleF0sCisJCQkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oc3RhdGUtPmJk ZXNjKSwKKwkJCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShidmFsKSwKKwkJCQkJCQkJCQkJ CSAgIFBvaW50ZXJHZXREYXR1bSgmc2NhbktleSksCisJCQkJCQkJCQkJCQkgICBJbnQzMkdldERh dHVtKDEpCisJCQkJKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWNvbnNpc3RlbnRGblJlc3VsdCA9 IEZ1bmN0aW9uQ2FsbDNDb2xsKCZzdGF0ZS0+Y29uc2lzdGVudEZuW2F0dGluZGV4XSwKKwkJCQkJ CQkJCQkJCSAgIHN0YXRlLT5pZHhyZWwtPnJkX2luZGNvbGxhdGlvblthdHRpbmRleF0sCisJCQkJ CQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oc3RhdGUtPmJkZXNjKSwKKwkJCQkJCQkJCQkJCSAg IFBvaW50ZXJHZXREYXR1bShidmFsKSwKKwkJCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShz Y2FuS2V5KQorCQkJCSk7CisJCX0KKworCQljb25zaXN0ZW50ID0gRGF0dW1HZXRCb29sKGNvbnNp c3RlbnRGblJlc3VsdCk7CisKKwkJaWYgKCFjb25zaXN0ZW50KQorCQl7CisJCQloZWFwX2FsbF9p bmRleGVkX2VyZXBvcnQoc3RhdGUsIHRpZCwgImhlYXAgdHVwbGUgaW5jb25zaXN0ZW50IHdpdGgg aW5kZXgiKTsKKwkJfQorCisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZEN0eCk7Cit9 CiAKIC8qIFJlcG9ydCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIGluZm8gKi8KIHN0YXRpYyB2b2lk CkBAIC04NTMsMyArMTMyNSwxOSBAQCByZXZtYXBfaXRlbV9lcmVwb3J0KEJyaW5DaGVja1N0YXRl ICogc3RhdGUsIGNvbnN0IGNoYXIgKmZtdCkKIAkJCQkJc3RhdGUtPnJldm1hcEJsaywKIAkJCQkJ c3RhdGUtPnJldm1hcGlkeCkpKTsKIH0KKworLyogUmVwb3J0IHdpdGggcmFuZ2UgYmxrbm8sIGhl YXAgdHVwbGUgaW5mbyAqLworc3RhdGljIHZvaWQKK2hlYXBfYWxsX2luZGV4ZWRfZXJlcG9ydChj b25zdCBCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBJdGVtUG9pbnRlckRhdGEgKnRpZCwg Y29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlBc3NlcnQoc3RhdGUtPnJhbmdlQmxrbm8gIT0gSW52 YWxpZEJsb2NrTnVtYmVyKTsKKworCWVyZXBvcnQoRVJST1IsCisJCQkoZXJyY29kZShFUlJDT0RF X0lOREVYX0NPUlJVUFRFRCksCisJCQkgZXJybXNnKCJJbmRleCAlcyBpcyBub3QgY29uc2lzdGVu dCB3aXRoIHRoZSBoZWFwIC0gJXMuIFJhbmdlIGJsa25vOiAldSwgaGVhcCB0aWQgKCV1LCV1KSIs CisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5pZHhyZWwpLAorCQkJCQltZXNz YWdlLAorCQkJCQlzdGF0ZS0+ZHR1cC0+YnRfYmxrbm8sCisJCQkJCUl0ZW1Qb2ludGVyR2V0Qmxv Y2tOdW1iZXIodGlkKSwKKwkJCQkJSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIodGlkKSkpKTsK K30KLS0gCjIuNDMuMAoK --00000000000062fc23063a86747b Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Disposition: attachment; filename="v8-0002-amcheck-brin_index_check-index-structure-check.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdepc0z11 RnJvbSAwYzFjODg1MWJhMDAxZTJlZjQ1ZDM5OTE4OTA0MWZjNWU1MzllZjI0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogTW9uLCAxNiBKdW4gMjAyNSAxODoxMToyNyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjggMi80XSBhbWNoZWNrOiBicmluX2luZGV4X2NoZWNrKCkgLSBpbmRleCBzdHJ1Y3R1 cmUgY2hlY2sKCkFkZHMgYSBuZXcgZnVuY3Rpb24gYnJpbl9pbmRleF9jaGVjaygpIGZvciB2YWxp ZGF0aW5nIEJSSU4gaW5kZXhlcy4KSXQgaW5jdWRlcyBuZXh0IGNoZWNrczoKLSBtZXRhIHBhZ2Ug Y2hlY2tzCi0gcmV2bWFwIHBvaW50ZXJzIGlzIHZhbGlkIGFuZCBwb2ludHMgdG8gaW5kZXggdHVw bGVzIHdpdGggZXhwZWN0ZWQgcmFuZ2UgYmxrbm8KLSBpbmRleCB0dXBsZXMgaGF2ZSBleHBlY3Rl ZCBmb3JtYXQKLSBzb21lIHNwZWNpYWwgY2hlY2tzIGZvciBlbXB0eV9yYW5nZXMKLSBldmVyeSBp bmRleCB0dXBsZSBoYXMgY29ycmVzcG9uZGluZyByZXZtYXAgaXRlbSB0aGF0IHBvaW50cyB0byBp dCAob3B0aW9uYWwpCi0tLQogY29udHJpYi9hbWNoZWNrL01ha2VmaWxlICAgICAgICAgICAgICAg IHwgICA1ICstCiBjb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsICAgfCAgMTgg KwogY29udHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbCAgICAgICAgIHwgICAyICstCiBjb250 cmliL2FtY2hlY2svZXhwZWN0ZWQvY2hlY2tfYnJpbi5vdXQgfCAxMzQgKysrKwogY29udHJpYi9h bWNoZWNrL21lc29uLmJ1aWxkICAgICAgICAgICAgIHwgICA0ICsKIGNvbnRyaWIvYW1jaGVjay9z cWwvY2hlY2tfYnJpbi5zcWwgICAgICB8IDEwMSArKysKIGNvbnRyaWIvYW1jaGVjay90LzAwN192 ZXJpZnlfYnJpbi5wbCAgICB8IDI5MSArKysrKysrKwogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9i cmluLmMgICAgICAgICAgIHwgODU1ICsrKysrKysrKysrKysrKysrKysrKysrKwogOCBmaWxlcyBj aGFuZ2VkLCAxNDA3IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvYW1jaGVjay9zcWwvY2hlY2tfYnJpbi5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL2FtY2hlY2svdmVyaWZ5X2JyaW4uYwoKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYW1jaGVjay9NYWtlZmlsZSBiL2NvbnRyaWIvYW1jaGVjay9NYWtlZmlsZQppbmRleCAxYjdh NjNjYmFhNC4uYmRmYjI3NGM4OWMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYW1jaGVjay9NYWtlZmls ZQorKysgYi9jb250cmliL2FtY2hlY2svTWFrZWZpbGUKQEAgLTYsMTEgKzYsMTIgQEAgT0JKUyA9 IFwKIAl2ZXJpZnlfY29tbW9uLm8gXAogCXZlcmlmeV9naW4ubyBcCiAJdmVyaWZ5X2hlYXBhbS5v IFwKLQl2ZXJpZnlfbmJ0cmVlLm8KKwl2ZXJpZnlfbmJ0cmVlLm8gXAorCXZlcmlmeV9icmluLm8K IAogRVhURU5TSU9OID0gYW1jaGVjawogREFUQSA9IGFtY2hlY2stLTEuMi0tMS4zLnNxbCBhbWNo ZWNrLS0xLjEtLTEuMi5zcWwgYW1jaGVjay0tMS4wLS0xLjEuc3FsIGFtY2hlY2stLTEuMC5zcWwg XAotCQlhbWNoZWNrLS0xLjMtLTEuNC5zcWwgYW1jaGVjay0tMS40LS0xLjUuc3FsCisJCWFtY2hl Y2stLTEuMy0tMS40LnNxbCBhbWNoZWNrLS0xLjQtLTEuNS5zcWwgYW1jaGVjay0tMS41LS0xLjYu c3FsCiBQR0ZJTEVERVNDID0gImFtY2hlY2sgLSBmdW5jdGlvbiBmb3IgdmVyaWZ5aW5nIHJlbGF0 aW9uIGludGVncml0eSIKIAogUkVHUkVTUyA9IGNoZWNrIGNoZWNrX2J0cmVlIGNoZWNrX2dpbiBj aGVja19oZWFwCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYu c3FsIGIvY29udHJpYi9hbWNoZWNrL2FtY2hlY2stLTEuNS0tMS42LnNxbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDM1NDQ1MWM0NzIKLS0tIC9kZXYvbnVsbAorKysg Yi9jb250cmliL2FtY2hlY2svYW1jaGVjay0tMS41LS0xLjYuc3FsCkBAIC0wLDAgKzEsMTggQEAK Ky8qIGNvbnRyaWIvYW1jaGVjay9hbWNoZWNrLS0xLjUtLTEuNi5zcWwgKi8KKworLS0gY29tcGxh aW4gaWYgc2NyaXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBF WFRFTlNJT04KK1xlY2hvIFVzZSAiQUxURVIgRVhURU5TSU9OIGFtY2hlY2sgVVBEQVRFIFRPICcx LjYnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworCistLQorLS0gYnJpbl9pbmRleF9jaGVj aygpCistLQorQ1JFQVRFIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2soaW5kZXggcmVnY2xhc3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFycGFnZXNjaGVjayBib29s ZWFuIGRlZmF1bHQgZmFsc2UKKykKKyAgICBSRVRVUk5TIFZPSUQKK0FTICdNT0RVTEVfUEFUSE5B TUUnLCAnYnJpbl9pbmRleF9jaGVjaycKK0xBTkdVQUdFIEMgU1RSSUNUIFBBUkFMTEVMIFJFU1RS SUNURUQ7CisKKy0tIFdlIGRvbid0IHdhbnQgdGhpcyB0byBiZSBhdmFpbGFibGUgdG8gcHVibGlj CitSRVZPS0UgQUxMIE9OIEZVTkNUSU9OIGJyaW5faW5kZXhfY2hlY2socmVnY2xhc3MsIGJvb2xl YW4pIEZST00gUFVCTElDOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh L2NvbnRyaWIvYW1jaGVjay9hbWNoZWNrLmNvbnRyb2wgYi9jb250cmliL2FtY2hlY2svYW1jaGVj ay5jb250cm9sCmluZGV4IGM4YmE2ZDdjOWJjLi4yZjMyOWVmMmNmNCAxMDA2NDQKLS0tIGEvY29u dHJpYi9hbWNoZWNrL2FtY2hlY2suY29udHJvbAorKysgYi9jb250cmliL2FtY2hlY2svYW1jaGVj ay5jb250cm9sCkBAIC0xLDUgKzEsNSBAQAogIyBhbWNoZWNrIGV4dGVuc2lvbgogY29tbWVudCA9 ICdmdW5jdGlvbnMgZm9yIHZlcmlmeWluZyByZWxhdGlvbiBpbnRlZ3JpdHknCi1kZWZhdWx0X3Zl cnNpb24gPSAnMS41JworZGVmYXVsdF92ZXJzaW9uID0gJzEuNicKIG1vZHVsZV9wYXRobmFtZSA9 ICckbGliZGlyL2FtY2hlY2snCiByZWxvY2F0YWJsZSA9IHRydWUKZGlmZiAtLWdpdCBhL2NvbnRy aWIvYW1jaGVjay9leHBlY3RlZC9jaGVja19icmluLm91dCBiL2NvbnRyaWIvYW1jaGVjay9leHBl Y3RlZC9jaGVja19icmluLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uZTVmYzUyZWQ3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2FtY2hlY2svZXhwZWN0 ZWQvY2hlY2tfYnJpbi5vdXQKQEAgLTAsMCArMSwxMzQgQEAKKy0tIGhlbHBlciBmdW5jCitDUkVB VEUgT1IgUkVQTEFDRSBGVU5DVElPTiAgcmFuZG9tX3N0cmluZyggSU5UICkgUkVUVVJOUyBURVhU IEFTICQkCitTRUxFQ1Qgc3RyaW5nX2FnZyhzdWJzdHJpbmcoJzAxMjM0NTY3ODlhYmNkZWZnaGlq a2xtbm9wcXJzdHV2d3h5eicsIGNlaWwocmFuZG9tKCkgKiAzNik6OklOVEVHRVIsIDEpLCAnJykg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgJDEpOworJCQgTEFOR1VBR0Ugc3FsOworLS0gZW1wdHkg dGFibGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklH SU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBP TiBicmludGVzdCBVU0lORyBCUklOIChhKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmlu dGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0t LS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0 OworLS0gbXVsdGlwbGUgYXR0cmlidXRlcyB0ZXN0CitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGlk IEJJR1NFUklBTCwgYSBURVhUKSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVY IGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIFRFWFRfbWlubWF4X29wcywg aWQgaW50OF9taW5tYXhfb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJ TlRPIGJyaW50ZXN0IChhKSBTRUxFQ1QgcmFuZG9tX3N0cmluZygoeCAlIDEwMCkpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMzAwMCkgeDsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVM RVRFIEZST00gYnJpbnRlc3QgV0hFUkUgaWQgPiAxNTAwIEFORCBpZCA8IDI1MDA7CitTRUxFQ1Qg YnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5f aW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWls ZCBpbmRleAorRFJPUCBJTkRFWCBicmludGVzdF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3Rf aWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5tYXhfb3BzKSBXSVRIIChQQUdF U19QRVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgn OjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0t LQorIAorKDEgcm93KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworLS0gbWlu X21heCBvcGNsYXNzCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChGSUxM RkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lO RyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitJ TlNFUlQgSU5UTyBicmludGVzdCAoYSkgU0VMRUNUIHggRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwx MDAwMDApIHg7CistLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKK0RFTEVURSBGUk9NIGJyaW50 ZXN0IFdIRVJFIGEgPiAyMDAwMCBBTkQgYSA8IDQwMDAwOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAor LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1Ag SU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0g Mik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRy dWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVzdDsKKy0tIG11bHRpX21pbl9tYXggb3Bj bGFzcworQ1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9 IDEwKTsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAo YSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5T RVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAw MDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVz dCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNr KCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0t LS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCistLSByZWJ1aWxkIGluZGV4CitEUk9QIElO REVYIGJyaW50ZXN0X2lkeDsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHggT04gYnJpbnRlc3Qg VVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5H RSA9IDIpOworU0VMRUNUIGJyaW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNT LCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSBy b3cpCisKKy0tIGNsZWFudXAKK0RST1AgVEFCTEUgYnJpbnRlc3Q7CistLSBibG9vbSBvcGNsYXNz CitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5UKSBXSVRIIChGSUxMRkFDVE9SID0gMTAp OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGlu dDhfYmxvb21fb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJy aW50ZXN0IChhKSBTRUxFQ1QgeCBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgeDsKKy0t IGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRFIEZST00gYnJpbnRlc3QgV0hFUkUgYSA+ IDIwMDAwIEFORCBhIDwgNDAwMDA7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRlc3Rf aWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworIGJyaW5faW5kZXhfY2hlY2sgCistLS0tLS0tLS0tLS0t LS0tLS0KKyAKKygxIHJvdykKKworLS0gcmVidWlsZCBpbmRleAorRFJPUCBJTkRFWCBicmludGVz dF9pZHg7CitDUkVBVEUgSU5ERVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4g KGEgaW50OF9ibG9vbV9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworU0VMRUNUIGJy aW5faW5kZXhfY2hlY2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2lu ZGV4X2NoZWNrIAorLS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIGNsZWFudXAK K0RST1AgVEFCTEUgYnJpbnRlc3Q7CistLSBpbmNsdXNpb24gb3BjbGFzcworQ1JFQVRFIFRBQkxF IGJyaW50ZXN0IChpZCBTRVJJQUwgUFJJTUFSWSBLRVksIGEgQk9YKTsKK0NSRUFURSBJTkRFWCBi cmludGVzdF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBCT1hfSU5DTFVTSU9OX09QUykg V0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitJTlNFUlQgSU5UTyBicmludGVzdCAoYSkKK1NF TEVDVCBCT1gocG9pbnQocmFuZG9tKCkgKiAxMDAwLCByYW5kb20oKSAqIDEwMDApLCBwb2ludChy YW5kb20oKSAqIDEwMDAsIHJhbmRvbSgpICogMTAwMCkpCitGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMDAwMCk7CistLSBjcmVhdGUgc29tZSBlbXB0eSByYW5nZXMKK0RFTEVURSBGUk9NIGJyaW50 ZXN0IFdIRVJFIGlkID4gMjAwMCBBTkQgaWQgPCA0MDAwOworU0VMRUNUIGJyaW5faW5kZXhfY2hl Y2soJ2JyaW50ZXN0X2lkeCc6OlJFR0NMQVNTLCB0cnVlKTsKKyBicmluX2luZGV4X2NoZWNrIAor LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1Ag SU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVz dCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJfUkFOR0Ug PSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywg dHJ1ZSk7CisgYnJpbl9pbmRleF9jaGVjayAKKy0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93 KQorCistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworLS0gY2xlYW51cAorRFJPUCBG VU5DVElPTiByYW5kb21fc3RyaW5nOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL21lc29u LmJ1aWxkIGIvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCmluZGV4IDFmMGMzNDdlZDU0Li5i YTgxNmMyZmFmMCAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL21lc29uLmJ1aWxkCisrKyBi L2NvbnRyaWIvYW1jaGVjay9tZXNvbi5idWlsZApAQCAtNSw2ICs1LDcgQEAgYW1jaGVja19zb3Vy Y2VzID0gZmlsZXMoCiAgICd2ZXJpZnlfZ2luLmMnLAogICAndmVyaWZ5X2hlYXBhbS5jJywKICAg J3ZlcmlmeV9uYnRyZWUuYycsCisgICd2ZXJpZnlfYnJpbi5jJwogKQogCiBpZiBob3N0X3N5c3Rl bSA9PSAnd2luZG93cycKQEAgLTI3LDYgKzI4LDcgQEAgaW5zdGFsbF9kYXRhKAogICAnYW1jaGVj ay0tMS4yLS0xLjMuc3FsJywKICAgJ2FtY2hlY2stLTEuMy0tMS40LnNxbCcsCiAgICdhbWNoZWNr LS0xLjQtLTEuNS5zcWwnLAorICAnYW1jaGVjay0tMS41LS0xLjYuc3FsJywKICAga3dhcmdzOiBj b250cmliX2RhdGFfYXJncywKICkKIApAQCAtNDAsNiArNDIsNyBAQCB0ZXN0cyArPSB7CiAgICAg ICAnY2hlY2tfYnRyZWUnLAogICAgICAgJ2NoZWNrX2dpbicsCiAgICAgICAnY2hlY2tfaGVhcCcs CisgICAgICAnY2hlY2tfYnJpbicKICAgICBdLAogICB9LAogICAndGFwJzogewpAQCAtNTAsNiAr NTMsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAndC8wMDRfdmVyaWZ5X25idHJlZV91bmlxdWUucGwn LAogICAgICAgJ3QvMDA1X3BpdHIucGwnLAogICAgICAgJ3QvMDA2X3ZlcmlmeV9naW4ucGwnLAor ICAgICAgJ3QvMDA3X3ZlcmlmeV9icmluLnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0 IGEvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVja19icmluLnNxbCBiL2NvbnRyaWIvYW1jaGVjay9z cWwvY2hlY2tfYnJpbi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LmIzNmFmMzdmZTAzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNoZWNrL3NxbC9jaGVj a19icmluLnNxbApAQCAtMCwwICsxLDEwMSBAQAorLS0gaGVscGVyIGZ1bmMKK0NSRUFURSBPUiBS RVBMQUNFIEZVTkNUSU9OICByYW5kb21fc3RyaW5nKCBJTlQgKSBSRVRVUk5TIFRFWFQgQVMgJCQK K1NFTEVDVCBzdHJpbmdfYWdnKHN1YnN0cmluZygnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3Bx cnN0dXZ3eHl6JywgY2VpbChyYW5kb20oKSAqIDM2KTo6SU5URUdFUiwgMSksICcnKSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAkMSk7CiskJCBMQU5HVUFHRSBzcWw7CisKKworLS0gZW1wdHkgdGFi bGUgaW5kZXggc2hvdWxkIGJlIHZhbGlkCitDUkVBVEUgVEFCTEUgYnJpbnRlc3QgKGEgQklHSU5U KSBXSVRIIChGSUxMRkFDVE9SID0gMTApOworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBi cmludGVzdCBVU0lORyBCUklOIChhKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVz dF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0 OworCistLSBtdWx0aXBsZSBhdHRyaWJ1dGVzIHRlc3QKK0NSRUFURSBUQUJMRSBicmludGVzdCAo aWQgQklHU0VSSUFMLCBhIFRFWFQpIFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5E RVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgVEVYVF9taW5tYXhfb3Bz LCBpZCBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJU IElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCByYW5kb21fc3RyaW5nKCh4ICUgMTAwKSkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwzMDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitE RUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBpZCA+IDE1MDAgQU5EIGlkIDwgMjUwMDsKK1NFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0t IHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJy aW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIFRFWFRfbWlubWF4X29wcykgV0lU SCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRl c3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVz dDsKKworCisKKy0tIG1pbl9tYXggb3BjbGFzcworQ1JFQVRFIFRBQkxFIGJyaW50ZXN0IChhIEJJ R0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKK0NSRUFURSBJTkRFWCBicmludGVzdF9pZHgg T04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9vcHMpIFdJVEggKFBBR0VTX1BF Ul9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVDVCB4IEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1wdHkgcmFuZ2VzCitE RUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0MDAwMDsKK1NFTEVD VCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0t IHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJy aW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlubWF4X29wcykgV0lU SCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9pbmRleF9jaGVjaygnYnJpbnRl c3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51cAorRFJPUCBUQUJMRSBicmludGVz dDsKKworCisKKy0tIG11bHRpX21pbl9tYXggb3BjbGFzcworQ1JFQVRFIFRBQkxFIGJyaW50ZXN0 IChhIEJJR0lOVCkgV0lUSCAoRklMTEZBQ1RPUiA9IDEwKTsKK0NSRUFURSBJTkRFWCBicmludGVz dF9pZHggT04gYnJpbnRlc3QgVVNJTkcgQlJJTiAoYSBpbnQ4X21pbm1heF9tdWx0aV9vcHMpIFdJ VEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNFTEVD VCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRlIHNvbWUgZW1w dHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEgPCA0 MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywg dHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JF QVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhfbWlu bWF4X211bHRpX29wcykgV0lUSCAoUEFHRVNfUEVSX1JBTkdFID0gMik7CitTRUxFQ1QgYnJpbl9p bmRleF9jaGVjaygnYnJpbnRlc3RfaWR4Jzo6UkVHQ0xBU1MsIHRydWUpOworLS0gY2xlYW51cAor RFJPUCBUQUJMRSBicmludGVzdDsKKworCisKKy0tIGJsb29tIG9wY2xhc3MKK0NSRUFURSBUQUJM RSBicmludGVzdCAoYSBCSUdJTlQpIFdJVEggKEZJTExGQUNUT1IgPSAxMCk7CitDUkVBVEUgSU5E RVggYnJpbnRlc3RfaWR4IE9OIGJyaW50ZXN0IFVTSU5HIEJSSU4gKGEgaW50OF9ibG9vbV9vcHMp IFdJVEggKFBBR0VTX1BFUl9SQU5HRSA9IDIpOworSU5TRVJUIElOVE8gYnJpbnRlc3QgKGEpIFNF TEVDVCB4IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSB4OworLS0gY3JlYXRlIHNvbWUg ZW1wdHkgcmFuZ2VzCitERUxFVEUgRlJPTSBicmludGVzdCBXSEVSRSBhID4gMjAwMDAgQU5EIGEg PCA0MDAwMDsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFT UywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgKK0RST1AgSU5ERVggYnJpbnRlc3RfaWR4Owor Q1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIGludDhf Ymxvb21fb3BzKSBXSVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4 X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9Q IFRBQkxFIGJyaW50ZXN0OworCisKKy0tIGluY2x1c2lvbiBvcGNsYXNzCitDUkVBVEUgVEFCTEUg YnJpbnRlc3QgKGlkIFNFUklBTCBQUklNQVJZIEtFWSwgYSBCT1gpOworQ1JFQVRFIElOREVYIGJy aW50ZXN0X2lkeCBPTiBicmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05fT1BTKSBX SVRIIChQQUdFU19QRVJfUkFOR0UgPSAyKTsKK0lOU0VSVCBJTlRPIGJyaW50ZXN0IChhKQorU0VM RUNUIEJPWChwb2ludChyYW5kb20oKSAqIDEwMDAsIHJhbmRvbSgpICogMTAwMCksIHBvaW50KHJh bmRvbSgpICogMTAwMCwgcmFuZG9tKCkgKiAxMDAwKSkKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEs IDEwMDAwKTsKKy0tIGNyZWF0ZSBzb21lIGVtcHR5IHJhbmdlcworREVMRVRFIEZST00gYnJpbnRl c3QgV0hFUkUgaWQgPiAyMDAwIEFORCBpZCA8IDQwMDA7CisKK1NFTEVDVCBicmluX2luZGV4X2No ZWNrKCdicmludGVzdF9pZHgnOjpSRUdDTEFTUywgdHJ1ZSk7CisKKy0tIHJlYnVpbGQgaW5kZXgK K0RST1AgSU5ERVggYnJpbnRlc3RfaWR4OworQ1JFQVRFIElOREVYIGJyaW50ZXN0X2lkeCBPTiBi cmludGVzdCBVU0lORyBCUklOIChhIEJPWF9JTkNMVVNJT05fT1BTKSBXSVRIIChQQUdFU19QRVJf UkFOR0UgPSAyKTsKK1NFTEVDVCBicmluX2luZGV4X2NoZWNrKCdicmludGVzdF9pZHgnOjpSRUdD TEFTUywgdHJ1ZSk7CistLSBjbGVhbnVwCitEUk9QIFRBQkxFIGJyaW50ZXN0OworCisKKy0tIGNs ZWFudXAKK0RST1AgRlVOQ1RJT04gcmFuZG9tX3N0cmluZzsKXCBObyBuZXdsaW5lIGF0IGVuZCBv ZiBmaWxlCmRpZmYgLS1naXQgYS9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwg Yi9jb250cmliL2FtY2hlY2svdC8wMDdfdmVyaWZ5X2JyaW4ucGwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjJjNjJiNzZjYzcwCi0tLSAvZGV2L251bGwKKysrIGIvY29u dHJpYi9hbWNoZWNrL3QvMDA3X3ZlcmlmeV9icmluLnBsCkBAIC0wLDAgKzEsMjkxIEBACisjIENv cHlyaWdodCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgUG9z dGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKKwor dXNlIFRlc3Q6Ok1vcmU7CisKK215ICRub2RlOworbXkgJGJsa3NpemU7CitteSAkbWV0YV9wYWdl X2Jsa25vID0gMDsKKworIworIyBUZXN0IHNldC11cAorIworJG5vZGUgPSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyLT5uZXcoJ3Rlc3QnKTsKKyRub2RlLT5pbml0KG5vX2RhdGFfY2hlY2tzdW1z ID0+IDEpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLCAnYXV0b3ZhY3V1 bT1vZmYnKTsKKyRub2RlLT5zdGFydDsKKyRibGtzaXplID0gaW50KCRub2RlLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgJ1NIT1cgYmxvY2tfc2l6ZTsnKSk7Ciskbm9kZS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHEoQ1JFQVRFIEVYVEVOU0lPTiBhbWNoZWNrKSk7CisKKyMgVGVzdHMKK215IEB0ZXN0 cyA9ICgKKyAgICB7CisgICAgICAgICMgaW52YWxpZCBtZXRhIHBhZ2UgdHlwZQorCisgICAgICAg IGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNr KCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAg ICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAor ICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIG1ldGEgcGFnZSBtYWdpYyB3b3JkCisKKyAgICAgICAg ZmluZCAgICAgPT4gcGFjaygnTCcsIDB4QTgxMDlDRkEpLAorICAgICAgICByZXBsYWNlICA9PiBw YWNrKCdMJywgMHhCQjEwOUNGQiksCisgICAgICAgIGJsa25vICAgID0+ICRtZXRhX3BhZ2VfYmxr bm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdlIGlzIGNvcnJ1cHRlZCcpLAor ICAgIH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgbWV0YSBwYWdlIGluZGV4IHZlcnNpb24K KworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEpLAorICAgICAg ICByZXBsYWNlICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDIpLAorICAgICAgICBibGtubyAg ICA9PiAkbWV0YV9wYWdlX2Jsa25vLAorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdtZXRhcGFn ZSBpcyBjb3JydXB0ZWQnKQorICAgIH0sCisgICAgeworICAgICAgICAjIHBhZ2VzX3Blcl9yYW5n ZSBiZWxvdyBsb3dlciBsaW1pdAorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0wqJywgMHhB ODEwOUNGQSwgMSwgMTI4KSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTConLCAweEE4MTA5 Q0ZBLCAxLCAwKSwKKyAgICAgICAgYmxrbm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAg ICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAorICAg IHsKKyAgICAgICAgIyBwYWdlc19wZXJfcmFuZ2UgYWJvdmUgdXBwZXIgbGltaXQKKworICAgICAg ICBmaW5kICAgICA9PiBwYWNrKCdMKicsIDB4QTgxMDlDRkEsIDEsIDEyOCksCisgICAgICAgIHJl cGxhY2UgID0+IHBhY2soJ0wqJywgMHhBODEwOUNGQSwgMSwgMTMxMDczKSwKKyAgICAgICAgYmxr bm8gICAgPT4gJG1ldGFfcGFnZV9ibGtubywKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnbWV0 YXBhZ2UgaXMgY29ycnVwdGVkJykKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyBsYXN0X3Jldm1h cF9wYWdlIGJlbG93IGxvd2VyIGxpbWl0CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTCon LCAweEE4MTA5Q0ZBLCAxLCAxMjgsIDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdMKics IDB4QTgxMDlDRkEsIDEsIDEyOCwgMCksCisgICAgICAgIGJsa25vICAgID0+ICRtZXRhX3BhZ2Vf Ymxrbm8sCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdlIGlzIGNvcnJ1cHRlZCcp LAorICAgIH0sCisgICAgeworCisgICAgICAgICMgbGFzdF9yZXZtYXBfcGFnZSBiZXlvbmQgaW5k ZXggcmVsYXRpb24gc2l6ZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ0wqJywgMHhBODEw OUNGQSwgMSwgMTI4LCAxKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTConLCAweEE4MTA5 Q0ZBLCAxLCAxMjgsIDEwMCksCisgICAgICAgIGJsa25vICAgID0+ICRtZXRhX3BhZ2VfYmxrbm8s CisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ21ldGFwYWdlIGlzIGNvcnJ1cHRlZCcpLAorICAg IH0sCisgICAgeworICAgICAgICAjIGludmFsaWQgcmV2bWFwIHBhZ2UgdHlwZQorCisgICAgICAg IGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTIpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNr KCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMSwgIyByZXZtYXAgcGFnZQorICAg ICAgICBleHBlY3RlZCA9PiB3cmFwKCdyZXZtYXAgcGFnZSBpcyBleHBlY3RlZCBhdCBibG9jayAx LCBsYXN0IHJldm1hcCBwYWdlIDEnKSwKKyAgICB9LAorICAgIHsKKyAgICAgICAgIyByZXZtYXAg aXRlbSBwb2ludHMgYmV5b25kIGluZGV4IHJlbGF0aW9uIHNpemUKKyAgICAgICAgIyByZXBsYWNl ICgyLDEpIHdpdGggKDEwMCwxKQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MqJywgMCwg MiwgMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ1MqJywgMCwgMTAwLCAxKSwKKyAgICAg ICAgYmxrbm8gICAgPT4gMSwgIyByZXZtYXAgcGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFw KCdyZXZtYXAgaXRlbSBwb2ludHMgdG8gYSBub24gZXhpc3RpbmcgYmxvY2sgMTAwLCAnCisgICAg ICAgICAgICAuICdpbmRleCBtYXggYmxvY2sgMi4gUmFuZ2UgYmxrbm86IDAsIHJldm1hcCBpdGVt OiAoMSwwKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgaW52YWxpZCByZWd1bGFyIHBhZ2Ug dHlwZQorCisgICAgICAgIGZpbmQgICAgID0+IHBhY2soJ1MnLCAweEYwOTMpLAorICAgICAgICBy ZXBsYWNlICA9PiBwYWNrKCdTJywgMHhBQUFBKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMiwgIyBy ZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgncmV2bWFwIGl0ZW0gcG9pbnRz IHRvIHRoZSBwYWdlIHdoaWNoIGlzIG5vdCByZWd1bGFyIChibGtubzogMikuICcKKyAgICAgICAg ICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEsMCknKQorICAgIH0sCisgICAg eworICAgICAgICAjIHJldm1hcCBpdGVtIHBvaW50cyBiZXlvbmQgcmVndWxhciBwYWdlIG1heCBv ZmZzZXQKKyAgICAgICAgIyByZXBsYWNlICgyLDEpIHdpdGggKDIsMikKKworICAgICAgICBmaW5k ICAgICA9PiBwYWNrKCdTKicsIDAsIDIsIDEpLAorICAgICAgICByZXBsYWNlICA9PiBwYWNrKCdT KicsIDAsIDIsIDIpLAorICAgICAgICBibGtubyAgICA9PiAxLCAjIHJldm1hcCBwYWdlCisgICAg ICAgIGV4cGVjdGVkID0+IHdyYXAoJ3Jldm1hcCBpdGVtIG9mZnNldCBudW1iZXIgMiBpcyBncmVh dGVyIHRoYW4gcmVndWxhciBwYWdlIDIgbWF4IG9mZnNldCAxLiAnCisgICAgICAgICAgICAuICdS YW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApJykKKyAgICB9LAorICAgIHsKKyAgICAg ICAgIyBpbnZhbGlkIGluZGV4IHR1cGxlIHJhbmdlIGJsa25vCisKKyAgICAgICAgZmluZCAgICAg PT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2so J0xDQycsIDEsIDB4QTgsIDB4MDEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJlZ3VsYXIg cGFnZQorICAgICAgICBleHBlY3RlZCA9PiB3cmFwKCdpbmRleCB0dXBsZSBoYXMgaW52YWxpZCBi bGtubyAxLiBSYW5nZSBibGtubzogMCwgcmV2bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTog KDIsMSknKQorICAgIH0sCisgICAgeworICAgICAgICAjIHJhbmdlIGJleW9uZCB0aGUgdGFibGUg c2l6ZSBhbmQgaXMgbm90IGVtcHR5CisKKyAgICAgICAgZmluZCAgICAgPT4gcGFjaygnTENDJywg MCwgMHhBOCwgMHgwMSksCisgICAgICAgIHJlcGxhY2UgID0+IHBhY2soJ0xDQycsIDAsIDB4ODgs IDB4MDEpLAorICAgICAgICBibGtubyAgICA9PiAyLCAjIHJlZ3VsYXIgcGFnZQorICAgICAgICBl eHBlY3RlZCA9PiB3cmFwKCd0aGUgcmFuZ2UgaXMgYmV5b25kIHRoZSB0YWJsZSBzaXplLCBidXQg aXMgbm90IG1hcmtlZCBhcyBlbXB0eSwgdGFibGUgc2l6ZTogMCBibG9ja3MuICcKKyAgICAgICAg ICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEsMCksIGluZGV4IHR1cGxlOiAo MiwxKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgY29ycnVwdCBpbmRleCB0dXBsZSBkYXRh IG9mZnNldAorICAgICAgICAjIGhlcmUgIDB4MDAsIDB4MDAsIDB4MDAgaXMgcGFkZGluZyBhbmQg Jy4nIGlzIHZhcmxlbmEgbGVuIGJ5dGUKKworICAgICAgICBmaW5kICAgICAgID0+IHBhY2soJ0xD Q0NDJywgMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCkgLiAnKC4pJyAuICdhYWFhYScsCisgICAg ICAgIHJlcGxhY2UgICAgPT4gcGFjaygnTENDQ0MnLCAwLCAweDFGLCAweDAwLCAweDAwLCAweDAw KSAuICckMScgLiAnYWFhYWEnLAorICAgICAgICBibGtubyAgICAgID0+IDIsICMgcmVndWxhciBw YWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4gc3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9z dHJ1Y3QpID0gQF87CisgICAgICAgICAgICByZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3Ry dWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVFUyAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAg ICAgICAgZXhwZWN0ZWQgICA9PiBxci9pbmRleCB0dXBsZSBoZWFkZXIgbGVuZ3RoIDMxIGlzIGdy ZWF0ZXIgdGhhbiB0dXBsZSBsZW4gLi5cLiBcUVJhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTog KDEsMCksIGluZGV4IHR1cGxlOiAoMiwxKVxFLworICAgIH0sCisgICAgeworICAgICAgICAjIGVt cHR5IHJhbmdlIGluZGV4IHR1cGxlIGRvZXNuJ3QgaGF2ZSBudWxsIGJpdG1hcAorCisgICAgICAg IGZpbmQgICAgID0+IHBhY2soJ0xDQycsIDAsIDB4QTgsIDB4MDEpLAorICAgICAgICByZXBsYWNl ICA9PiBwYWNrKCdMQ0MnLCAwLCAweDI4LCAweDAxKSwKKyAgICAgICAgYmxrbm8gICAgPT4gMiwg IyByZWd1bGFyIHBhZ2UKKyAgICAgICAgZXhwZWN0ZWQgPT4gd3JhcCgnZW1wdHkgcmFuZ2UgaW5k ZXggdHVwbGUgZG9lc25cJ3QgaGF2ZSBudWxsIGJpdG1hcC4gJworICAgICAgICAgICAgLiAnUmFu Z2UgYmxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpJykKKyAg ICB9LAorICAgIHsKKyAgICAgICAgIyBlbXB0eSByYW5nZSBpbmRleCB0dXBsZSBhbGxfbnVsbHMg LT4gZmFsc2UKKworICAgICAgICBmaW5kICAgICA9PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAx KSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygnTENDJywgMCwgMHhBOCwgMHgwMCksCisgICAg ICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBwYWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdy YXAoJ2VtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGF0dHJpYnV0ZSAwIHdpdGggYWxsbnVsbHMgaXMg ZmFsc2UuICcKKyAgICAgICAgICAgIC4gJ1JhbmdlIGJsa25vOiAwLCByZXZtYXAgaXRlbTogKDEs MCksIGluZGV4IHR1cGxlOiAoMiwxKScpCisgICAgfSwKKyAgICB7CisgICAgICAgICMgZW1wdHkg cmFuZ2UgaW5kZXggdHVwbGUgaGFzX251bGxzIC0+IHRydWUKKworICAgICAgICBmaW5kICAgICA9 PiBwYWNrKCdMQ0MnLCAwLCAweEE4LCAweDAxKSwKKyAgICAgICAgcmVwbGFjZSAgPT4gcGFjaygn TENDJywgMCwgMHhBOCwgMHgwMyksCisgICAgICAgIGJsa25vICAgID0+IDIsICMgcmVndWxhciBw YWdlCisgICAgICAgIGV4cGVjdGVkID0+IHdyYXAoJ2VtcHR5IHJhbmdlIGluZGV4IHR1cGxlIGF0 dHJpYnV0ZSAwIHdpdGggaGFzbnVsbHMgaXMgdHJ1ZS4gJworICAgICAgICAgICAgLiAnUmFuZ2Ug Ymxrbm86IDAsIHJldm1hcCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpJykKKyAgICB9 LAorICAgIHsKKyAgICAgICAgIyBpbnZhbGlkIGluZGV4IHR1cGxlIGRhdGEKKyAgICAgICAgIyBy ZXBsYWNlIHZhcmxlbmEgbGVuIHdpdGggRkYgLSBzaG91bGQgd29yayB3aXRoIGFueSBlbmRpYW5u ZXNzCisKKyAgICAgICAgZmluZCAgICAgICA9PiBwYWNrKCdMQ0NDQycsIDAsIDB4MDgsIDB4MDAs IDB4MDAsIDB4MDApIC4gJy4nIC4gJ2FhYWFhJywKKyAgICAgICAgcmVwbGFjZSAgICA9PiBwYWNr KCdMQ0NDQ0MnLCAwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweEZGKSAuICdhYWFhYScsCisg ICAgICAgIGJsa25vICAgICAgPT4gMiwgIyByZWd1bGFyIHBhZ2UKKyAgICAgICAgdGFibGVfZGF0 YSA9PiBzdWIgeworICAgICAgICAgICAgbXkgKCR0ZXN0X3N0cnVjdCkgPSBAXzsKKyAgICAgICAg ICAgIHJldHVybiBxcShJTlNFUlQgSU5UTyAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9uYW1lfSAoYSkg VkFMVUVTICgnYWFhYWEnKTspOworICAgICAgICB9LAorICAgICAgICBleHBlY3RlZCAgID0+IHFy L2F0dHJpYnV0ZSAwIHN0b3JlZCB2YWx1ZSAwIHdpdGggbGVuZ3RoIC0xIGVuZHMgYXQgb2Zmc2V0 IDEyNyBiZXlvbmQgdG90YWwgdHVwbGUgbGVuZ3RoIC4uXC5cUSBSYW5nZSBibGtubzogMCwgcmV2 bWFwIGl0ZW06ICgxLDApLCBpbmRleCB0dXBsZTogKDIsMSlcRS8KKyAgICB9LAorICAgIHsKKyAg ICAgICAgIyBvcnBoYW4gaW5kZXggdHVwbGUKKyAgICAgICAgIyByZXBsYWNlIHZhbGlkIHJldm1h cCBpdGVtIHdpdGggKDAsMCkKKworICAgICAgICBmaW5kICAgICAgID0+IHBhY2soJ1MqJywgMCwg MiwgMSksCisgICAgICAgIHJlcGxhY2UgICAgPT4gcGFjaygnUyonLCAwLCAwLCAwKSwKKyAgICAg ICAgYmxrbm8gICAgICA9PiAxLCAjIHJldm1hcCBwYWdlCisgICAgICAgIHRhYmxlX2RhdGEgPT4g c3ViIHsKKyAgICAgICAgICAgIG15ICgkdGVzdF9zdHJ1Y3QpID0gQF87CisgICAgICAgICAgICBy ZXR1cm4gcXEoSU5TRVJUIElOVE8gJHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gKGEpIFZBTFVF UyAoJ2FhYWFhJyk7KTsKKyAgICAgICAgfSwKKyAgICAgICAgZXhwZWN0ZWQgICA9PiB3cmFwKCJy ZXZtYXAgZG9lc24ndCBwb2ludCB0byBpbmRleCB0dXBsZS4gUmFuZ2UgYmxrbm86IDAsIHJldm1h cCBpdGVtOiAoMSwwKSwgaW5kZXggdHVwbGU6ICgyLDEpIikKKyAgICB9CispOworCisKKyMgaW5p dCB0ZXN0IGRhdGEKK215ICRpID0gMTsKK2ZvcmVhY2ggbXkgJHRlc3Rfc3RydWN0IChAdGVzdHMp IHsKKworICAgICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9ID0gJ3QnIC4gJGkrKzsKKyAgICAk dGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfSA9ICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IC4g J19icmluX2lkeCc7CisKKyAgICBteSAkdGVzdF9kYXRhX3NxbCA9ICcnOworICAgIGlmIChleGlz dHMgJHRlc3Rfc3RydWN0LT57dGFibGVfZGF0YX0pIHsKKyAgICAgICAgJHRlc3RfZGF0YV9zcWwg PSAkdGVzdF9zdHJ1Y3QtPnt0YWJsZV9kYXRhfS0+KCR0ZXN0X3N0cnVjdCk7CisgICAgfQorCisg ICAgJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKyAgICAgICAgQ1JFQVRFIFRBQkxF ICR0ZXN0X3N0cnVjdC0+e3RhYmxlX25hbWV9IChhIFRFWFQpOworICAgICAgICAkdGVzdF9kYXRh X3NxbAorICAgICAgICBDUkVBVEUgSU5ERVggJHRlc3Rfc3RydWN0LT57aW5kZXhfbmFtZX0gT04g JHRlc3Rfc3RydWN0LT57dGFibGVfbmFtZX0gVVNJTkcgQlJJTiAoYSk7CisgICAgKSk7CisKKyAg ICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSA9IHJlbGF0aW9uX2ZpbGVwYXRoKCR0ZXN0X3N0cnVj dC0+e2luZGV4X25hbWV9KTsKK30KKworIyBjb3JydXB0IGluZGV4Ciskbm9kZS0+c3RvcDsKKwor Zm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgeworICAgIHN0cmluZ19yZXBsYWNlX2Js b2NrKAorICAgICAgICAkdGVzdF9zdHJ1Y3QtPntyZWxwYXRofSwKKyAgICAgICAgJHRlc3Rfc3Ry dWN0LT57ZmluZH0sCisgICAgICAgICR0ZXN0X3N0cnVjdC0+e3JlcGxhY2V9LAorICAgICAgICAk dGVzdF9zdHJ1Y3QtPntibGtub30KKyAgICApOworfQorCisjIGFzc2VydGlvbnMKKyRub2RlLT5z dGFydDsKKworZm9yZWFjaCBteSAkdGVzdF9zdHJ1Y3QgKEB0ZXN0cykgeworICAgIG15ICgkcmVz dWx0LCAkc3Rkb3V0LCAkc3RkZXJyKSA9ICRub2RlLT5wc3FsKCdwb3N0Z3JlcycsIHFxKFNFTEVD VCBicmluX2luZGV4X2NoZWNrKCckdGVzdF9zdHJ1Y3QtPntpbmRleF9uYW1lfScsIHRydWUpKSk7 CisgICAgbGlrZSgkc3RkZXJyLCAkdGVzdF9zdHJ1Y3QtPntleHBlY3RlZH0pOworfQorCisKKyMg SGVscGVycworCisjIFJldHVybnMgdGhlIGZpbGVzeXN0ZW0gcGF0aCBmb3IgdGhlIG5hbWVkIHJl bGF0aW9uLgorc3ViIHJlbGF0aW9uX2ZpbGVwYXRoIHsKKyAgICBteSAoJHJlbG5hbWUpID0gQF87 CisKKyAgICBteSAkcGdkYXRhID0gJG5vZGUtPmRhdGFfZGlyOworICAgIG15ICRyZWwgPSAkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisgICAgICAgIHFxKFNFTEVDVCBwZ19yZWxhdGlvbl9m aWxlcGF0aCgnJHJlbG5hbWUnKSkpOworICAgIGRpZSAicGF0aCBub3QgZm91bmQgZm9yIHJlbGF0 aW9uICRyZWxuYW1lIiB1bmxlc3MgZGVmaW5lZCAkcmVsOworICAgIHJldHVybiAiJHBnZGF0YS8k cmVsIjsKK30KKworc3ViIHN0cmluZ19yZXBsYWNlX2Jsb2NrIHsKKyAgICBteSAoJGZpbGVuYW1l LCAkZmluZCwgJHJlcGxhY2UsICRibGtubykgPSBAXzsKKworICAgIG15ICRmaDsKKyAgICBvcGVu KCRmaCwgJys8JywgJGZpbGVuYW1lKSBvciBCQUlMX09VVCgib3BlbiBmYWlsZWQ6ICQhIik7Cisg ICAgYmlubW9kZSAkZmg7CisKKyAgICBteSAkb2Zmc2V0ID0gJGJsa25vICogJGJsa3NpemU7Cisg ICAgbXkgJGJ1ZmZlcjsKKworICAgIHN5c3NlZWsoJGZoLCAkb2Zmc2V0LCAwKSBvciBCQUlMX09V VCgic2VlayBmYWlsZWQ6ICQhIik7CisgICAgc3lzcmVhZCgkZmgsICRidWZmZXIsICRibGtzaXpl KSBvciBCQUlMX09VVCgicmVhZCBmYWlsZWQ6ICQhIik7CisKKyAgICAkYnVmZmVyID1+IHMvJGZp bmQvJyInIC4gJHJlcGxhY2UgLiAnIicvZ2VlOworCisgICAgc3lzc2VlaygkZmgsICRvZmZzZXQs IDApIG9yIEJBSUxfT1VUKCJzZWVrIGZhaWxlZDogJCEiKTsKKyAgICBzeXN3cml0ZSgkZmgsICRi dWZmZXIpIG9yIEJBSUxfT1VUKCJ3cml0ZSBmYWlsZWQ6ICQhIik7CisKKyAgICBjbG9zZSgkZmgp IG9yIEJBSUxfT1VUKCJjbG9zZSBmYWlsZWQ6ICQhIik7CisKKyAgICByZXR1cm47Cit9CisKK3N1 YiB3cmFwCit7CisgICAgbXkgJGlucHV0ID0gQF87CisgICAgcmV0dXJuIHFyL1xRJGlucHV0XEUv Cit9CisKK2RvbmVfdGVzdGluZygpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt LWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfYnJpbi5jIGIvY29udHJpYi9hbWNoZWNrL3Zl cmlmeV9icmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ0MDI0 ZTc2YjU2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9icmluLmMK QEAgLTAsMCArMSw4NTUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHZlcmlmeV9icmlu LmMKKyAqCSAgRnVuY3Rpb25zIHRvIGNoZWNrIHBvc3RncmVzcWwgYnJpbiBpbmRleGVzIGZvciBj b3JydXB0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL2FtY2hlY2svdmVyaWZ5X2Jy aW4uYworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5o IgorI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0u aCIKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvaW5kZXguaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX2FtX2QuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJh dG9yLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgi CisjaW5jbHVkZSAic3RvcmFnZS9zbWdyLmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisjaW5j bHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvYnJpbl9wYWdlLmgiCisj aW5jbHVkZSAiYWNjZXNzL2JyaW5fcmV2bWFwLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidmVyaWZ5X2NvbW1vbi5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKKworCitQR19GVU5DVElPTl9JTkZPX1YxKGJy aW5faW5kZXhfY2hlY2spOworCit0eXBlZGVmIHN0cnVjdCBCcmluQ2hlY2tTdGF0ZQoreworCisJ LyogQ2hlY2sgYXJndW1lbnRzICovCisKKwlib29sCQlyZWd1bGFycGFnZXNjaGVjazsKKworCS8q IEJSSU4gY2hlY2sgY29tbW9uIGZpZWxkcyAqLworCisJUmVsYXRpb24JaWR4cmVsOworCVJlbGF0 aW9uCWhlYXByZWw7CisJQnJpbkRlc2MgICAqYmRlc2M7CisJaW50CQkJbmF0dHM7CisJQmxvY2tO dW1iZXIgcGFnZXNQZXJSYW5nZTsKKworCS8qIEluZGV4IHN0cnVjdHVyZSBjaGVjayBmaWVsZHMg Ki8KKworCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGNoZWNrc3RyYXRlZ3k7CisJQmxvY2tOdW1iZXIg aWR4bmJsb2NrczsKKwlCbG9ja051bWJlciBoZWFwbmJsb2NrczsKKwlCbG9ja051bWJlciBsYXN0 UmV2bWFwUGFnZTsKKwkvKiBDdXJyZW50IHJhbmdlIGJsa25vICovCisJQmxvY2tOdW1iZXIgcmFu Z2VCbGtubzsKKwkvKiBDdXJyZW50IHJldm1hcCBpdGVtICovCisJQmxvY2tOdW1iZXIgcmV2bWFw QmxrOworCUJ1ZmZlcgkJcmV2bWFwYnVmOworCVBhZ2UJCXJldm1hcHBhZ2U7CisJdWludDMyCQly ZXZtYXBpZHg7CisJLyogQ3VycmVudCBpbmRleCB0dXBsZSAqLworCUJsb2NrTnVtYmVyIHJlZ3Bh Z2VCbGs7CisJQnVmZmVyCQlyZWdwYWdlYnVmOworCVBhZ2UJCXJlZ3BhZ2U7CisJT2Zmc2V0TnVt YmVyIHJlZ3BhZ2VvZmZzZXQ7CisKK30JCQlCcmluQ2hlY2tTdGF0ZTsKKworc3RhdGljIHZvaWQg YnJpbl9jaGVjayhSZWxhdGlvbiBpZHhyZWwsIFJlbGF0aW9uIGhlYXByZWwsIHZvaWQgKmNhbGxi YWNrX3N0YXRlLCBib29sIHJlYWRvbmx5KTsKKworc3RhdGljIHZvaWQgY2hlY2tfYnJpbl9pbmRl eF9zdHJ1Y3R1cmUoQnJpbkNoZWNrU3RhdGUgKiBwU3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVj a19tZXRhKEJyaW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVja19yZXZt YXAoQnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSk7CisKK3N0YXRpYyB2b2lkIGNoZWNrX3Jldm1hcF9p dGVtKEJyaW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgdm9pZCBjaGVja19pbmRleF90 dXBsZShCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBCcmluVHVwbGUgKnR1cGxlLCBJdGVtSWQgbHAp OworCitzdGF0aWMgdm9pZCBjaGVja19yZWd1bGFyX3BhZ2VzKEJyaW5DaGVja1N0YXRlICogc3Rh dGUpOworCitzdGF0aWMgYm9vbCByZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKEJyaW5DaGVj a1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgSXRlbUlkIFBhZ2VHZXRJdGVtSWRDYXJlZnVsKEJy aW5DaGVja1N0YXRlICogc3RhdGUpOworCitzdGF0aWMgdm9pZCBicmluX2NoZWNrX2VyZXBvcnQo QnJpbkNoZWNrU3RhdGUgKiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KTsKKworc3RhdGljIHZvaWQg cmV2bWFwX2l0ZW1fZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpm bXQpOworCitzdGF0aWMgdm9pZCBpbmRleF90dXBsZV9lcmVwb3J0KEJyaW5DaGVja1N0YXRlICog c3RhdGUsIGNvbnN0IGNoYXIgKmZtdCk7CisKK3N0YXRpYyB2b2lkIGluZGV4X3R1cGxlX29ubHlf ZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBjaGFyICpmbXQpOworCisKK0Rh dHVtCiticmluX2luZGV4X2NoZWNrKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJT2lkCQkJaW5kcmVs aWQgPSBQR19HRVRBUkdfT0lEKDApOworCUJyaW5DaGVja1N0YXRlICpzdGF0ZSA9IHBhbGxvYzAo c2l6ZW9mKEJyaW5DaGVja1N0YXRlKSk7CisKKwlzdGF0ZS0+cmVndWxhcnBhZ2VzY2hlY2sgPSBQ R19HRVRBUkdfQk9PTCgxKTsKKworCWFtY2hlY2tfbG9ja19yZWxhdGlvbl9hbmRfY2hlY2soaW5k cmVsaWQsCisJCQkJCQkJCQlCUklOX0FNX09JRCwKKwkJCQkJCQkJCWJyaW5fY2hlY2ssCisJCQkJ CQkJCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssCisJCQkJCQkJCQlzdGF0ZSk7CisKKwlQR19S RVRVUk5fVk9JRCgpOworfQorCisvKgorICogTWFpbiBjaGVjayBmdW5jdGlvbgorICovCitzdGF0 aWMgdm9pZAorYnJpbl9jaGVjayhSZWxhdGlvbiBpZHhyZWwsIFJlbGF0aW9uIGhlYXByZWwsIHZv aWQgKmNhbGxiYWNrX3N0YXRlLCBib29sIHJlYWRvbmx5KQoreworCUJyaW5DaGVja1N0YXRlICpz dGF0ZSA9IChCcmluQ2hlY2tTdGF0ZSAqKSBjYWxsYmFja19zdGF0ZTsKKworCS8qIEluaXRpYWxp emUgY2hlY2sgY29tbW9uIGZpZWxkcyAqLworCXN0YXRlLT5pZHhyZWwgPSBpZHhyZWw7CisJc3Rh dGUtPmhlYXByZWwgPSBoZWFwcmVsOworCXN0YXRlLT5iZGVzYyA9IGJyaW5fYnVpbGRfZGVzYyhp ZHhyZWwpOworCXN0YXRlLT5uYXR0cyA9IHN0YXRlLT5iZGVzYy0+YmRfdHVwZGVzYy0+bmF0dHM7 CisKKworCWNoZWNrX2JyaW5faW5kZXhfc3RydWN0dXJlKHN0YXRlKTsKKworCisJYnJpbl9mcmVl X2Rlc2Moc3RhdGUtPmJkZXNjKTsKK30KKworLyoKKyAqIENoZWNrIHRoYXQgaW5kZXggaGFzIGV4 cGVjdGVkIHN0cnVjdHVyZQorICoKKyAqICBTb21lIGNoZWNrIGV4cGVjdGF0aW9uczoKKyAqIC0g d2UgaG9sZCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2ssIHNvIHJldm1hcCBjb3VsZCBub3QgYmUg ZXh0ZW5kZWQgKGkuZS4gbm8gZXZhY3VhdGlvbikgd2hpbGUgY2hlY2sgYXMgd2VsbCBhcworICog ICBhbGwgcmVndWxhciBwYWdlcyBzaG91bGQgc3RheSByZWd1bGFyIGFuZCByYW5nZXMgY291bGQg bm90IGJlIHN1bW1hcml6ZWQgYW5kIGRlc3VtbWFyaXplZC4KKyAqICAgTmV2ZXJ0aGVsZXNzLCBj b25jdXJyZW50IHVwZGF0ZXMgY291bGQgbGVhZCB0byBuZXcgcmVndWxhciBwYWdlIGFsbG9jYXRp b25zCisgKiAgIGFuZCBtb3Zpbmcgb2YgaW5kZXggdHVwbGVzLgorICogLSBpZiByZXZtYXAgcG9p bnRlciBpcyB2YWxpZCB0aGVyZSBzaG91bGQgYmUgdmFsaWQgaW5kZXggdHVwbGUgaXQgcG9pbnRz IHRvLgorICogLSB0aGVyZSBhcmUgbm8gb3JwaGFuIGluZGV4IHR1cGxlcyAoaWYgdGhlcmUgaXMg YW4gaW5kZXggdHVwbGUsIHRoZSByZXZtYXAgaXRlbSBwb2ludHMgdG8gdGhpcyB0dXBsZSBhbHNv IG11c3QgZXhpc3QpCisgKiAtIGl0J3MgcG9zc2libGUgdG8gZW5jb3VudGVyIHBsYWNlaG9sZGVy IHR1cGxlcyAoYXMgYSByZXN1bHQgb2YgY3Jhc2gpCisgKiAtIGl0J3MgcG9zc2libGUgdG8gZW5j b3VudGVyIG5ldyBwYWdlcyBpbnN0ZWFkIG9mIHJlZ3VsYXIgKGFzIGEgcmVzdWx0IG9mIGNyYXNo KQorICogLSBpdCdzIHBvc3NpYmxlIHRvIGVuY291bnRlciBwYWdlcyB3aXRoIGV2YWN1YXRpb24g Yml0IChhcyBhIHJlc3VsdCBvZiBjcmFzaCkKKyAqCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19i cmluX2luZGV4X3N0cnVjdHVyZShCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCS8qIEluZGV4 IHN0cnVjdHVyZSBjaGVjayBmaWVsZHMgaW5pdGlhbGl6YXRpb24gKi8KKwlzdGF0ZS0+Y2hlY2tz dHJhdGVneSA9IEdldEFjY2Vzc1N0cmF0ZWd5KEJBU19CVUxLUkVBRCk7CisKKwljaGVja19tZXRh KHN0YXRlKTsKKworCS8qIENoZWNrIHJldm1hcCBmaXJzdCwgYmxvY2tzOiBbMSwgbGFzdFJldm1h cFBhZ2VdICovCisJY2hlY2tfcmV2bWFwKHN0YXRlKTsKKworCisJaWYgKHN0YXRlLT5yZWd1bGFy cGFnZXNjaGVjaykKKwl7CisJCS8qIENoZWNrIHJlZ3VsYXIgcGFnZXMsIGJsb2NrczogW2xhc3RS ZXZtYXBQYWdlICsgMSwgaWR4bmJsb2Nrc10gKi8KKwkJY2hlY2tfcmVndWxhcl9wYWdlcyhzdGF0 ZSk7CisJfQorCit9CisKKy8qIE1ldGEgcGFnZSBjaGVjayBhbmQgc2F2ZSBzb21lIGRhdGEgZm9y IHRoZSBmdXJ0aGVyIGNoZWNrICovCitzdGF0aWMgdm9pZAorY2hlY2tfbWV0YShCcmluQ2hlY2tT dGF0ZSAqIHN0YXRlKQoreworCUJ1ZmZlcgkJbWV0YWJ1ZjsKKwlQYWdlCQltZXRhcGFnZTsKKwlC cmluTWV0YVBhZ2VEYXRhICptZXRhZGF0YTsKKworCS8qIE1ldGEgcGFnZSBjaGVjayAqLworCW1l dGFidWYgPSBSZWFkQnVmZmVyRXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBC UklOX01FVEFQQUdFX0JMS05PLCBSQk1fTk9STUFMLAorCQkJCQkJCQkgc3RhdGUtPmNoZWNrc3Ry YXRlZ3kpOworCUxvY2tCdWZmZXIobWV0YWJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCW1ldGFw YWdlID0gQnVmZmVyR2V0UGFnZShtZXRhYnVmKTsKKwltZXRhZGF0YSA9IChCcmluTWV0YVBhZ2VE YXRhICopIFBhZ2VHZXRDb250ZW50cyhtZXRhcGFnZSk7CisJc3RhdGUtPmlkeG5ibG9ja3MgPSBS ZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHN0YXRlLT5pZHhyZWwpOworCisKKwlpZiAoIUJSSU5f SVNfTUVUQV9QQUdFKG1ldGFwYWdlKSB8fAorCQltZXRhZGF0YS0+YnJpbk1hZ2ljICE9IEJSSU5f TUVUQV9NQUdJQyB8fAorCQltZXRhZGF0YS0+YnJpblZlcnNpb24gIT0gQlJJTl9DVVJSRU5UX1ZF UlNJT04gfHwKKwkJbWV0YWRhdGEtPnBhZ2VzUGVyUmFuZ2UgPCAxIHx8IG1ldGFkYXRhLT5wYWdl c1BlclJhbmdlID4gQlJJTl9NQVhfUEFHRVNfUEVSX1JBTkdFIHx8CisJCW1ldGFkYXRhLT5sYXN0 UmV2bWFwUGFnZSA8PSBCUklOX01FVEFQQUdFX0JMS05PIHx8IG1ldGFkYXRhLT5sYXN0UmV2bWFw UGFnZSA+PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwl7CisJCWJyaW5fY2hlY2tfZXJlcG9ydChzdGF0 ZSwgIm1ldGFwYWdlIGlzIGNvcnJ1cHRlZCIpOworCX0KKworCXN0YXRlLT5sYXN0UmV2bWFwUGFn ZSA9IG1ldGFkYXRhLT5sYXN0UmV2bWFwUGFnZTsKKwlzdGF0ZS0+cGFnZXNQZXJSYW5nZSA9IG1l dGFkYXRhLT5wYWdlc1BlclJhbmdlOworCVVubG9ja1JlbGVhc2VCdWZmZXIobWV0YWJ1Zik7Cit9 CisKKy8qCisgKiBXYWxrIHJldm1hcCBwYWdlIGJ5IHBhZ2UgZnJvbSB0aGUgYmVnaW5uaW5nIGFu ZCBjaGVjayBldmVyeSByZXZtYXAgaXRlbS4KKyAqIEFsc28gY2hlY2sgdGhhdCBhbGwgcGFnZXMg d2l0aGluIFsxLCBsYXN0UmV2bWFwUGFnZV0gYXJlIHJldm1hcCBwYWdlcy4KKyAqLworc3RhdGlj IHZvaWQKK2NoZWNrX3Jldm1hcChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCVJlbGF0aW9u CWlkeHJlbCA9IHN0YXRlLT5pZHhyZWw7CisJQmxvY2tOdW1iZXIgbGFzdFJldm1hcFBhZ2UgPSBz dGF0ZS0+bGFzdFJldm1hcFBhZ2U7CisJUmVhZFN0cmVhbSAqc3RyZWFtOworCWludAkJCXN0cmVh bV9mbGFnczsKKwlSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBzdHJlYW1fY2I7CisJQmxvY2tSYW5n ZVJlYWRTdHJlYW1Qcml2YXRlIHN0cmVhbV9kYXRhOworCisJc3RhdGUtPnJhbmdlQmxrbm8gPSAw OworCXN0YXRlLT5yZWdwYWdlYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwlzdGF0ZS0+aGVhcG5ibG9j a3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKHN0YXRlLT5oZWFwcmVsKTsKKworCisJLyoK KwkgKiBQcmVwYXJlIHN0cmVhbSBkYXRhIGZvciByZXZtYXAgd2Fsay4gSXQgaXMgc2FmZSB0byB1 c2UgYmF0Y2htb2RlIGFzCisJICogYmxvY2tfcmFuZ2VfcmVhZF9zdHJlYW1fY2IgdGFrZXMgbm8g bG9ja3MuCisJICovCisJc3RyZWFtX2ZsYWdzID0gUkVBRF9TVFJFQU1fU0VRVUVOVElBTCB8IFJF QURfU1RSRUFNX1VTRV9CQVRDSElORzsKKwkvKiBGaXJzdCByZXZtYXAgcGFnZSBpcyByaWdodCBh ZnRlciBtZXRhIHBhZ2UgKi8KKwlzdHJlYW1fZGF0YS5jdXJyZW50X2Jsb2NrbnVtID0gQlJJTl9N RVRBUEFHRV9CTEtOTyArIDE7CisJc3RyZWFtX2RhdGEubGFzdF9leGNsdXNpdmUgPSBsYXN0UmV2 bWFwUGFnZSArIDE7CisKKwlzdHJlYW1fY2IgPSBibG9ja19yYW5nZV9yZWFkX3N0cmVhbV9jYjsK KwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihzdHJlYW1fZmxhZ3MsCisJCQkJ CQkJCQkJR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKSwKKwkJCQkJCQkJCQlpZHhyZWws CisJCQkJCQkJCQkJTUFJTl9GT1JLTlVNLAorCQkJCQkJCQkJCXN0cmVhbV9jYiwKKwkJCQkJCQkJ CQkmc3RyZWFtX2RhdGEsCisJCQkJCQkJCQkJMCk7CisKKwkvKiBXYWxrIGVhY2ggcmV2bWFwIHBh Z2UgKi8KKwl3aGlsZSAoKHN0YXRlLT5yZXZtYXBidWYgPSByZWFkX3N0cmVhbV9uZXh0X2J1ZmZl cihzdHJlYW0sIE5VTEwpKSAhPSBJbnZhbGlkQnVmZmVyKQorCXsKKwkJc3RhdGUtPnJldm1hcEJs ayA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKHN0YXRlLT5yZXZtYXBidWYpOworCQlMb2NrQnVmZmVy KHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKKwkJc3RhdGUtPnJldm1hcHBh Z2UgPSBCdWZmZXJHZXRQYWdlKHN0YXRlLT5yZXZtYXBidWYpOworCisJCS8qCisJCSAqIFBhZ2Vz IHdpdGggYmxvY2sgbnVtYmVycyBpbiBbMSwgbGFzdFJldm1hcFBhZ2VdIHNob3VsZCBiZSByZXZt YXAKKwkJICogcGFnZXMKKwkJICovCisJCWlmICghQlJJTl9JU19SRVZNQVBfUEFHRShzdGF0ZS0+ cmV2bWFwcGFnZSkpCisJCXsKKwkJCWJyaW5fY2hlY2tfZXJlcG9ydChzdGF0ZSwgcHNwcmludGYo InJldm1hcCBwYWdlIGlzIGV4cGVjdGVkIGF0IGJsb2NrICV1LCBsYXN0IHJldm1hcCBwYWdlICV1 IiwKKwkJCQkJCQkJCQkJICAgc3RhdGUtPnJldm1hcEJsaywKKwkJCQkJCQkJCQkJICAgbGFzdFJl dm1hcFBhZ2UpKTsKKwkJfQorCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisKKwkJLyogV2FsayBhbmQgY2hlY2sgYWxsIGJyaW4gdHVwbGVzIGZyb20g dGhlIGN1cnJlbnQgcmV2bWFwIHBhZ2UgKi8KKwkJc3RhdGUtPnJldm1hcGlkeCA9IDA7CisJCXdo aWxlIChzdGF0ZS0+cmV2bWFwaWR4IDwgUkVWTUFQX1BBR0VfTUFYSVRFTVMpCisJCXsKKwkJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJCS8qIENoZWNrIHJldm1hcCBpdGVtICovCisJCQlj aGVja19yZXZtYXBfaXRlbShzdGF0ZSk7CisKKwkJCXN0YXRlLT5yYW5nZUJsa25vICs9IHN0YXRl LT5wYWdlc1BlclJhbmdlOworCQkJc3RhdGUtPnJldm1hcGlkeCsrOworCQl9CisKKwkJZWxvZyhE RUJVRzMsICJDb21wbGV0ZSByZXZtYXAgcGFnZSBjaGVjazogJWQiLCBzdGF0ZS0+cmV2bWFwQmxr KTsKKworCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYpOworCX0KKworCXJlYWRfc3Ry ZWFtX2VuZChzdHJlYW0pOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoc3RhdGUtPnJlZ3BhZ2VidWYp KQorCXsKKwkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJfQorfQorCisvKgor ICogQ2hlY2sgcmV2bWFwIGl0ZW0uCisgKgorICogV2UgY2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRl ciBpdHNlbGYgYW5kIGlmIGl0IGlzIG9rIHdlIGNoZWNrIHRoZSBpbmRleCB0dXBsZSBpdCBwb2lu dHMgdG8uCisgKgorICogVG8gYXZvaWQgZGVhZGxvY2sgd2UgbmVlZCB0byB1bmxvY2sgcmV2bWFw IHBhZ2UgYmVmb3JlIGxvY2tpbmcgcmVndWxhciBwYWdlLAorICogc28gd2hlbiB3ZSBnZXQgdGhl IGxvY2sgb24gdGhlIHJlZ3VsYXIgcGFnZSBvdXIgaW5kZXggdHVwbGUgcG9pbnRlciBtYXkgbm8g bG9uZ2VyIGJlIHJlbGV2YW50LgorICogU28gZm9yIHNvbWUgY2hlY2tzIGJlZm9yZSByZXBvcnRp bmcgYW4gZXJyb3Igd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBvdXIgcG9pbnRlciBpcyBzdGls bCByZWxldmFudCBhbmQgaWYgaXQncyBub3QgLSByZXRyeS4KKyAqLworc3RhdGljIHZvaWQKK2No ZWNrX3Jldm1hcF9pdGVtKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7CisJSXRlbVBvaW50ZXJE YXRhICpyZXZtYXB0aWRzOworCVJldm1hcENvbnRlbnRzICpjb250ZW50czsKKwlJdGVtUG9pbnRl ckRhdGEgKmlwdHI7CisJSXRlbUlkCQlscDsKKwlCcmluVHVwbGUgICp0dXA7CisJUmVsYXRpb24J aWR4cmVsID0gc3RhdGUtPmlkeHJlbDsKKworCS8qIExvb3AgdG8gcmV0cnkgcmV2bWFwIGl0ZW0g Y2hlY2sgaWYgdGhlcmUgd2FzIGEgY29uY3VycmVudCB1cGRhdGUuICovCisJZm9yICg7OykKKwl7 CisJCUxvY2tCdWZmZXIoc3RhdGUtPnJldm1hcGJ1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOworCisJ CWNvbnRlbnRzID0gKFJldm1hcENvbnRlbnRzICopIFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQ YWdlKHN0YXRlLT5yZXZtYXBidWYpKTsKKwkJcmV2bWFwdGlkcyA9IGNvbnRlbnRzLT5ybV90aWRz OworCQkvKiBQb2ludGVyIGZvciB0aGUgcmFuZ2Ugd2l0aCBzdGFydCBhdCBzdGF0ZS0+cmFuZ2VC bGtubyAqLworCQlpcHRyID0gcmV2bWFwdGlkcyArIHN0YXRlLT5yZXZtYXBpZHg7CisKKwkJLyog QXQgZmlyc3QgY2hlY2sgcmV2bWFwIGl0ZW0gcG9pbnRlciAqLworCisJCS8qCisJCSAqIFR1cGxl IHBvaW50ZXIgaXMgaW52YWxpZCBtZWFucyByYW5nZSBpc24ndCBzdW1tYXJpemVkLCBqdXN0IG1v dmUKKwkJICogZnVydGhlcgorCQkgKi8KKwkJaWYgKCFJdGVtUG9pbnRlcklzVmFsaWQoaXB0cikp CisJCXsKKwkJCWVsb2coREVCVUczLCAiUmFuZ2UgJXUgaXMgbm90IHN1bW1hcml6ZWQiLCBzdGF0 ZS0+cmFuZ2VCbGtubyk7CisJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIFBvaW50ZXIgaXMgdmFs aWQsIGl0IHNob3VsZCBwb2ludHMgdG8gaW5kZXggdHVwbGUgZm9yIHRoZSByYW5nZQorCQkgKiB3 aXRoIGJsa25vIHJhbmdlQmxrbm8uIFJlbWVtYmVyIGl0IGFuZCB1bmxvY2sgcmV2bWFwIHBhZ2Ug dG8gYXZvaWQKKwkJICogZGVhZGxvY2sKKwkJICovCisJCXN0YXRlLT5yZWdwYWdlQmxrID0gSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcihpcHRyKTsKKwkJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJ dGVtUG9pbnRlckdldE9mZnNldE51bWJlcihpcHRyKTsKKworCQlMb2NrQnVmZmVyKHN0YXRlLT5y ZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhl IHJlZ3BhZ2UgYmxvY2sgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcmVsYXRpb24KKwkJICog c2l6ZS4gVG8gYXZvaWQgZmV0Y2hpbmcgdGhlIG51bWJlciBvZiBibG9ja3MgZm9yIGVhY2ggdHVw bGUsIHVzZQorCQkgKiBjYWNoZWQgdmFsdWUgZmlyc3QKKwkJICovCisJCWlmIChzdGF0ZS0+cmVn cGFnZUJsayA+PSBzdGF0ZS0+aWR4bmJsb2NrcykKKwkJeworCQkJLyoKKwkJCSAqIFJlZ3VsYXIg cGFnZXMgbWF5IGhhdmUgYmVlbiBhZGRlZCwgc28gcmVmcmVzaCBpZHhuYmxvY2tzIGFuZAorCQkJ ICogcmVjaGVjaworCQkJICovCisJCQlzdGF0ZS0+aWR4bmJsb2NrcyA9IFJlbGF0aW9uR2V0TnVt YmVyT2ZCbG9ja3MoaWR4cmVsKTsKKwkJCWlmIChzdGF0ZS0+cmVncGFnZUJsayA+PSBzdGF0ZS0+ aWR4bmJsb2NrcykKKwkJCXsKKwkJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJ CQkJcHNwcmludGYoInJldm1hcCBpdGVtIHBvaW50cyB0byBhIG5vbiBleGlzdGluZyBibG9jayAl dSwgaW5kZXggbWF4IGJsb2NrICV1IiwKKwkJCQkJCQkJCQkJIHN0YXRlLT5yZWdwYWdlQmxrLAor CQkJCQkJCQkJCQkgc3RhdGUtPmlkeG5ibG9ja3MgLSAxKSk7CisJCQl9CisJCX0KKworCQkvKgor CQkgKiBUbyBhdm9pZCBzb21lIHBpbi91bnBpbiBjeWNsZXMgd2UgY2FjaGUgbGFzdCB1c2VkIHJl Z3VsYXIgcGFnZS4KKwkJICogQ2hlY2sgaWYgd2UgbmVlZCBkaWZmZXJlbnQgcmVndWxhciBwYWdl IGFuZCBmZXRjaCBpdC4KKwkJICovCisJCWlmICghQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFn ZWJ1ZikgfHwgQnVmZmVyR2V0QmxvY2tOdW1iZXIoc3RhdGUtPnJlZ3BhZ2VidWYpICE9IHN0YXRl LT5yZWdwYWdlQmxrKQorCQl7CisJCQlpZiAoQnVmZmVySXNWYWxpZChzdGF0ZS0+cmVncGFnZWJ1 ZikpCisJCQl7CisJCQkJUmVsZWFzZUJ1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1Zik7CisJCQl9CisJ CQlzdGF0ZS0+cmVncGFnZWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChpZHhyZWwsIE1BSU5fRk9S S05VTSwgc3RhdGUtPnJlZ3BhZ2VCbGssIFJCTV9OT1JNQUwsCisJCQkJCQkJCQkJCQkgICBzdGF0 ZS0+Y2hlY2tzdHJhdGVneSk7CisJCX0KKworCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVm LCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXN0YXRlLT5yZWdwYWdlID0gQnVmZmVyR2V0UGFnZShz dGF0ZS0+cmVncGFnZWJ1Zik7CisKKwkJLyogUmV2bWFwIHNob3VsZCBhbHdheXMgcG9pbnQgdG8g YSByZWd1bGFyIHBhZ2UgKi8KKwkJaWYgKCFCUklOX0lTX1JFR1VMQVJfUEFHRShzdGF0ZS0+cmVn cGFnZSkpCisJCXsKKwkJCXJldm1hcF9pdGVtX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJCXBzcHJp bnRmKCJyZXZtYXAgaXRlbSBwb2ludHMgdG8gdGhlIHBhZ2Ugd2hpY2ggaXMgbm90IHJlZ3VsYXIg KGJsa25vOiAldSkiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVncGFnZUJsaykpOworCisJCX0KKwor CQkvKiBDaGVjayBpdGVtIG9mZnNldCBpcyB2YWxpZCAqLworCQlpZiAoc3RhdGUtPnJlZ3BhZ2Vv ZmZzZXQgPiBQYWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHN0YXRlLT5yZWdwYWdlKSkKKwkJeworCisJ CQkvKiBJZiBjb25jdXJyZW50IHVwZGF0ZSBtb3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRy eSAqLworCQkJaWYgKCFyZXZtYXBfcG9pbnRzX3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsK KwkJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwor CQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlyZXZtYXBfaXRlbV9lcmVwb3J0KHN0YXRlLAorCQkJ CQkJCQlwc3ByaW50ZigicmV2bWFwIGl0ZW0gb2Zmc2V0IG51bWJlciAldSBpcyBncmVhdGVyIHRo YW4gcmVndWxhciBwYWdlICV1IG1heCBvZmZzZXQgJXUiLAorCQkJCQkJCQkJCSBzdGF0ZS0+cmVn cGFnZW9mZnNldCwKKwkJCQkJCQkJCQkgc3RhdGUtPnJlZ3BhZ2VCbGssCisJCQkJCQkJCQkJIFBh Z2VHZXRNYXhPZmZzZXROdW1iZXIoc3RhdGUtPnJlZ3BhZ2UpKSk7CisJCX0KKworCQllbG9nKERF QlVHMywgIlByb2Nlc3MgcmFuZ2U6ICV1LCBpcHRyOiAoJXUsJXUpIiwgc3RhdGUtPnJhbmdlQmxr bm8sIHN0YXRlLT5yZWdwYWdlQmxrLCBzdGF0ZS0+cmVncGFnZW9mZnNldCk7CisKKwkJLyoKKwkJ ICogUmV2bWFwIHBvaW50ZXIgaXMgT0suIEl0IHBvaW50cyB0byBleGlzdGluZyByZWd1bGFyIHBh Z2UsIG9mZnNldAorCQkgKiBhbHNvIGlzIG9rLiBMZXQncyBjaGVjayBpbmRleCB0dXBsZSBpdCBw b2ludHMgdG8uCisJCSAqLworCisJCWxwID0gUGFnZUdldEl0ZW1JZENhcmVmdWwoc3RhdGUpOwor CisJCS8qIFJldm1hcCBzaG91bGQgcG9pbnQgdG8gTk9STUFMIHR1cGxlcyBvbmx5ICovCisJCWlm ICghSXRlbUlkSXNVc2VkKGxwKSkKKwkJeworCisJCQkvKiBJZiBjb25jdXJyZW50IHVwZGF0ZSBt b3ZlZCBvdXIgdHVwbGUgd2UgbmVlZCB0byByZXRyeSAqLworCQkJaWYgKCFyZXZtYXBfcG9pbnRz X3RvX2luZGV4X3R1cGxlKHN0YXRlKSkKKwkJCXsKKwkJCQlMb2NrQnVmZmVyKHN0YXRlLT5yZWdw YWdlYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlp bmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLCAicmV2bWFwIGl0ZW0gcG9pbnRzIHRvIHVudXNlZCBp bmRleCB0dXBsZSIpOworCQl9CisKKworCQl0dXAgPSAoQnJpblR1cGxlICopIFBhZ2VHZXRJdGVt KHN0YXRlLT5yZWdwYWdlLCBscCk7CisKKwkJLyogQ2hlY2sgaWYgcmFuZ2UgYmxvY2sgbnVtYmVy IGlzIGFzIGV4cGVjdGVkICovCisJCWlmICh0dXAtPmJ0X2Jsa25vICE9IHN0YXRlLT5yYW5nZUJs a25vKQorCQl7CisKKwkJCS8qIElmIGNvbmN1cnJlbnQgdXBkYXRlIG1vdmVkIG91ciB0dXBsZSB3 ZSBuZWVkIHRvIHJldHJ5ICovCisJCQlpZiAoIXJldm1hcF9wb2ludHNfdG9faW5kZXhfdHVwbGUo c3RhdGUpKQorCQkJeworCQkJCUxvY2tCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYsIEJVRkZFUl9M T0NLX1VOTE9DSyk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWluZGV4X3R1cGxlX2VyZXBv cnQoc3RhdGUsIHBzcHJpbnRmKCJpbmRleCB0dXBsZSBoYXMgaW52YWxpZCBibGtubyAldSIsIHR1 cC0+YnRfYmxrbm8pKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZSByYW5nZSBpcyBiZXlvbmQg dGhlIHRhYmxlIHNpemUgLSB0aGUgcmFuZ2UgbXVzdCBiZSBlbXB0eS4KKwkJICogSXQncyB2YWxp ZCBzaXR1YXRpb24gZm9yIGVtcHR5IHRhYmxlIG5vdy4KKwkJICovCisJCWlmIChzdGF0ZS0+cmFu Z2VCbGtubyA+PSBzdGF0ZS0+aGVhcG5ibG9ja3MpCisJCXsKKwkJCWlmICghQnJpblR1cGxlSXNF bXB0eVJhbmdlKHR1cCkpCisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJ CQkJCQkJCXBzcHJpbnRmKCJ0aGUgcmFuZ2UgaXMgYmV5b25kIHRoZSB0YWJsZSBzaXplLCAiCisJ CQkJCQkJCQkJCSAiYnV0IGlzIG5vdCBtYXJrZWQgYXMgZW1wdHksIHRhYmxlIHNpemU6ICV1IGJs b2NrcyIsCisJCQkJCQkJCQkJCSBzdGF0ZS0+aGVhcG5ibG9ja3MpKTsKKwkJCX0KKwkJfQorCisJ CS8qIENoZWNrIGluZGV4IHR1cGxlIGl0c2VsZiAqLworCQljaGVja19pbmRleF90dXBsZShzdGF0 ZSwgdHVwLCBscCk7CisKKwkJTG9ja0J1ZmZlcihzdGF0ZS0+cmVncGFnZWJ1ZiwgQlVGRkVSX0xP Q0tfVU5MT0NLKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogQ2hlY2sgdGhhdCBpbmRleCB0 dXBsZSBoYXMgZXhwZWN0ZWQgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZm9sbG93 cyB0aGUgbG9naWMgcGVyZm9ybWVkIGJ5IGJyaW5fZGVmb3JtX3R1cGxlKCkuCisgKiBBZnRlciB0 aGlzIGNoZWNrIGlzIGNvbXBsZXRlIHdlIGFyZSBzdXJlIHRoYXQgYnJpbl9kZWZvcm1fdHVwbGUg Y2FuIHByb2Nlc3MgaXQuCisgKgorICogSW4gY2FzZSBvZiBlbXB0eSByYW5nZSBjaGVjayB0aGF0 IGZvciBhbGwgYXR0cmlidXRlcyBhbGxudWxscyBhcmUgdHJ1ZSwgaGFzbnVsbHMgYXJlIGZhbHNl IGFuZAorICogdGhlcmUgaXMgbm8gZGF0YS4gQWxsIGNvcmUgb3BjbGFzc2VzIGV4cGVjdCBhbGxu dWxscyBpcyB0cnVlIGZvciBlbXB0eSByYW5nZS4KKyAqLworc3RhdGljIHZvaWQKK2NoZWNrX2lu ZGV4X3R1cGxlKEJyaW5DaGVja1N0YXRlICogc3RhdGUsIEJyaW5UdXBsZSAqdHVwbGUsIEl0ZW1J ZCBscCkKK3sKKworCWNoYXIJICAgKnRwOwkJCQkvKiB0dXBsZSBkYXRhICovCisJdWludDE2CQlv ZmY7CisJYml0czgJICAgKm51bGxiaXRzOworCVR1cGxlRGVzYwlkaXNrdGRlc2M7CisJaW50CQkJ c3RvcmVkOworCWJvb2wJCWVtcHR5X3JhbmdlID0gQnJpblR1cGxlSXNFbXB0eVJhbmdlKHR1cGxl KTsKKwlib29sCQloYXNudWxsYml0bWFwID0gQnJpblR1cGxlSGFzTnVsbHModHVwbGUpOworCXVp bnQ4CQlob2ZmID0gQnJpblR1cGxlRGF0YU9mZnNldCh0dXBsZSk7CisJdWludDE2CQl0dXBsZW4g PSBJdGVtSWRHZXRMZW5ndGgobHApOworCisKKwkvKiBDaGVjayB0aGF0IGhlYWRlciBsZW5ndGgg aXMgbm90IGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW5ndGggKi8KKwlpZiAoaG9mZiA+IHR1cGxlbikK Kwl7CisJCWluZGV4X3R1cGxlX2VyZXBvcnQoc3RhdGUsIHBzcHJpbnRmKCJpbmRleCB0dXBsZSBo ZWFkZXIgbGVuZ3RoICV1IGlzIGdyZWF0ZXIgdGhhbiB0dXBsZSBsZW4gJXUiLCBob2ZmLCB0dXBs ZW4pKTsKKwl9CisKKwkvKiBJZiB0dXBsZSBoYXMgbnVsbCBiaXRtYXAgLSBpbml0aWFsaXplIGl0 ICovCisJaWYgKGhhc251bGxiaXRtYXApCisJeworCQludWxsYml0cyA9IChiaXRzOCAqKSAoKGNo YXIgKikgdHVwbGUgKyBTaXplT2ZCcmluVHVwbGUpOworCX0KKwllbHNlCisJeworCQludWxsYml0 cyA9IE5VTEw7CisJfQorCisJLyogRW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgY2hlY2tzICovCisJ aWYgKGVtcHR5X3JhbmdlKQorCXsKKwkJLyogRW1wdHkgcmFuZ2UgdHVwbGUgc2hvdWxkIGhhdmUg bnVsbCBiaXRtYXAgKi8KKwkJaWYgKCFoYXNudWxsYml0bWFwKQorCQl7CisJCQlpbmRleF90dXBs ZV9lcmVwb3J0KHN0YXRlLCAiZW1wdHkgcmFuZ2UgaW5kZXggdHVwbGUgZG9lc24ndCBoYXZlIG51 bGwgYml0bWFwIik7CisJCX0KKworCQlBc3NlcnQobnVsbGJpdHMgIT0gTlVMTCk7CisKKwkJLyog Q2hlY2sgZXZlcnkgYXR0cmlidXRlIGhhcyBhbGxudWxscyBpcyB0cnVlIGFuZCBoYXNudWxscyBp cyBmYWxzZSAqLworCQlmb3IgKGludCBhdHRpbmRleCA9IDA7IGF0dGluZGV4IDwgc3RhdGUtPm5h dHRzOyArK2F0dGluZGV4KQorCQl7CisKKwkJCS8qIEF0dHJpYnV0ZSBhbGxudWxscyBzaG91bGQg YmUgdHJ1ZSBmb3IgZW1wdHkgcmFuZ2UgKi8KKwkJCWlmIChhdHRfaXNudWxsKGF0dGluZGV4LCBu dWxsYml0cykpCisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJ CXBzcHJpbnRmKCJlbXB0eSByYW5nZSBpbmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBhbGxu dWxscyBpcyBmYWxzZSIsCisJCQkJCQkJCQkJCSBhdHRpbmRleCkpOworCQkJfQorCisJCQkvKiBB dHRyaWJ1dGUgaGFzbnVsbHMgc2hvdWxkIGJlIGZhbHNlIGZvciBlbXB0eSByYW5nZSAqLworCQkJ aWYgKCFhdHRfaXNudWxsKHN0YXRlLT5uYXR0cyArIGF0dGluZGV4LCBudWxsYml0cykpCisJCQl7 CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRmKCJlbXB0 eSByYW5nZSBpbmRleCB0dXBsZSBhdHRyaWJ1dGUgJWQgd2l0aCBoYXNudWxscyBpcyB0cnVlIiwK KwkJCQkJCQkJCQkJIGF0dGluZGV4KSk7CisJCQl9CisJCX0KKworCQkvKiBXZSBhcmUgZG9uZSB3 aXRoIGVtcHR5IHJhbmdlIHR1cGxlICovCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFJhbmdl IGlzIG1hcmtlZCBhcyBub3QgZW1wdHkgc28gd2UgY2FuIGhhdmUgc29tZSBkYXRhIGluIHRoZSB0 dXBsZS4KKwkgKiBXYWxrIGFsbCBhdHRyaWJ1dGVzIGFuZCBjaGVja3MgdGhhdCBhbGwgc3RvcmVk IHZhbHVlcyBmaXQgaW50byB0aGUKKwkgKiB0dXBsZQorCSAqLworCisJdHAgPSAoY2hhciAqKSB0 dXBsZSArIEJyaW5UdXBsZURhdGFPZmZzZXQodHVwbGUpOworCXN0b3JlZCA9IDA7CisJb2ZmID0g MDsKKworCWRpc2t0ZGVzYyA9IGJyaW5fdHVwbGVfdHVwZGVzYyhzdGF0ZS0+YmRlc2MpOworCisJ Zm9yIChpbnQgYXR0aW5kZXggPSAwOyBhdHRpbmRleCA8IHN0YXRlLT5uYXR0czsgKythdHRpbmRl eCkKKwl7CisJCUJyaW5PcGNJbmZvICpvcGNsYXNzID0gc3RhdGUtPmJkZXNjLT5iZF9pbmZvW2F0 dGluZGV4XTsKKworCQkvKgorCQkgKiBpZiBhbGxudWxscyBpcyBzZXQgd2UgaGF2ZSBubyBkYXRh IGZvciB0aGlzIGF0dHJpYnV0ZSwgbW92ZSB0byB0aGUKKwkJICogbmV4dAorCQkgKi8KKwkJaWYg KGhhc251bGxiaXRtYXAgJiYgIWF0dF9pc251bGwoYXR0aW5kZXgsIG51bGxiaXRzKSkKKwkJewor CQkJc3RvcmVkICs9IG9wY2xhc3MtPm9pX25zdG9yZWQ7CisJCQljb250aW51ZTsKKwkJfQorCisJ CS8qIFdhbGsgYWxsIHN0b3JlZCB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IGF0dHJpYnV0ZSAqLwor CQlmb3IgKGludCBkYXR1bW5vID0gMDsgZGF0dW1ubyA8IG9wY2xhc3MtPm9pX25zdG9yZWQ7IGRh dHVtbm8rKykKKwkJeworCQkJQ29tcGFjdEF0dHJpYnV0ZSAqdGhpc2F0dCA9IFR1cGxlRGVzY0Nv bXBhY3RBdHRyKGRpc2t0ZGVzYywgc3RvcmVkKTsKKworCQkJaWYgKHRoaXNhdHQtPmF0dGxlbiA9 PSAtMSkKKwkJCXsKKwkJCQlvZmYgPSBhdHRfcG9pbnRlcl9hbGlnbmJ5KG9mZiwKKwkJCQkJCQkJ CQkgIHRoaXNhdHQtPmF0dGFsaWduYnksCisJCQkJCQkJCQkJICAtMSwKKwkJCQkJCQkJCQkgIHRw ICsgb2ZmKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlvZmYgPSBhdHRfbm9taW5hbF9hbGln bmJ5KG9mZiwgdGhpc2F0dC0+YXR0YWxpZ25ieSk7CisJCQl9CisKKwkJCS8qIENoZWNrIHRoYXQg d2UgYXJlIHN0aWxsIGluIHRoZSB0dXBsZSAqLworCQkJaWYgKGhvZmYgKyBvZmYgPiB0dXBsZW4p CisJCQl7CisJCQkJaW5kZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRm KCJhdHRyaWJ1dGUgJXUgc3RvcmVkIHZhbHVlICV1IHdpdGggbGVuZ3RoICVkICIKKwkJCQkJCQkJ CQkJICJzdGFydHMgYXQgb2Zmc2V0ICV1IGJleW9uZCB0b3RhbCB0dXBsZSBsZW5ndGggJXUiLAor CQkJCQkJCQkJCQkgYXR0aW5kZXgsIGRhdHVtbm8sIHRoaXNhdHQtPmF0dGxlbiwgb2ZmLCB0dXBs ZW4pKTsKKwkJCX0KKworCQkJb2ZmID0gYXR0X2FkZGxlbmd0aF9wb2ludGVyKG9mZiwgdGhpc2F0 dC0+YXR0bGVuLCB0cCArIG9mZik7CisKKwkJCS8qIENoZWNrIHRoYXQgd2UgYXJlIHN0aWxsIGlu IHRoZSB0dXBsZSAqLworCQkJaWYgKGhvZmYgKyBvZmYgPiB0dXBsZW4pCisJCQl7CisJCQkJaW5k ZXhfdHVwbGVfZXJlcG9ydChzdGF0ZSwKKwkJCQkJCQkJCXBzcHJpbnRmKCJhdHRyaWJ1dGUgJXUg c3RvcmVkIHZhbHVlICV1IHdpdGggbGVuZ3RoICVkICIKKwkJCQkJCQkJCQkJICJlbmRzIGF0IG9m ZnNldCAldSBiZXlvbmQgdG90YWwgdHVwbGUgbGVuZ3RoICV1IiwKKwkJCQkJCQkJCQkJIGF0dGlu ZGV4LCBkYXR1bW5vLCB0aGlzYXR0LT5hdHRsZW4sIG9mZiwgdHVwbGVuKSk7CisJCQl9CisJCQlz dG9yZWQrKzsKKwkJfQorCisJfQorCit9CisKKy8qCisgKiBDaGVjayBhbGwgcGFnZXMgd2l0aGlu IHRoZSByYW5nZSBbbGFzdFJldm1hcFBhZ2UgKyAxLCBpbmRleG5ibG9ja3NdIGFyZSByZWd1bGFy IHBhZ2VzIG9yIG5ldworICogYW5kIHRoZXJlIGlzIGEgcG9pbnRlciBpbiByZXZtYXAgdG8gZWFj aCBOT1JNQUwgaW5kZXggdHVwbGUuCisgKi8KK3N0YXRpYyB2b2lkCitjaGVja19yZWd1bGFyX3Bh Z2VzKEJyaW5DaGVja1N0YXRlICogc3RhdGUpCit7CisJUmVhZFN0cmVhbSAqc3RyZWFtOworCWlu dAkJCXN0cmVhbV9mbGFnczsKKwlSZWFkU3RyZWFtQmxvY2tOdW1iZXJDQiBzdHJlYW1fY2I7CisJ QmxvY2tSYW5nZVJlYWRTdHJlYW1Qcml2YXRlIHN0cmVhbV9kYXRhOworCisJLyogcmVzZXQgc3Rh dGUgKi8KKwlzdGF0ZS0+cmV2bWFwQmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOworCXN0YXRlLT5y ZXZtYXBidWYgPSBJbnZhbGlkQnVmZmVyOworCXN0YXRlLT5yZXZtYXBpZHggPSAtMTsKKwlzdGF0 ZS0+cmVncGFnZUJsayA9IEludmFsaWRCbG9ja051bWJlcjsKKwlzdGF0ZS0+cmVncGFnZWJ1ZiA9 IEludmFsaWRCdWZmZXI7CisJc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBJbnZhbGlkT2Zmc2V0TnVt YmVyOworCXN0YXRlLT5pZHhuYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhzdGF0 ZS0+aWR4cmVsKTsKKworCisJLyoKKwkgKiBQcmVwYXJlIHN0cmVhbSBkYXRhIGZvciByZWd1bGFy IHBhZ2VzIHdhbGsuIEl0IGlzIHNhZmUgdG8gdXNlIGJhdGNobW9kZQorCSAqIGFzIGJsb2NrX3Jh bmdlX3JlYWRfc3RyZWFtX2NiIHRha2VzIG5vIGxvY2tzLgorCSAqLworCXN0cmVhbV9mbGFncyA9 IFJFQURfU1RSRUFNX1NFUVVFTlRJQUwgfCBSRUFEX1NUUkVBTV9VU0VfQkFUQ0hJTkcgfCBSRUFE X1NUUkVBTV9GVUxMOworCS8qIEZpcnN0IHJlZ3VsYXIgcGFnZSBpcyByaWdodCBhZnRlciB0aGUg bGFzdCByZXZtYXAgcGFnZSAqLworCXN0cmVhbV9kYXRhLmN1cnJlbnRfYmxvY2tudW0gPSBzdGF0 ZS0+bGFzdFJldm1hcFBhZ2UgKyAxOworCXN0cmVhbV9kYXRhLmxhc3RfZXhjbHVzaXZlID0gc3Rh dGUtPmlkeG5ibG9ja3M7CisKKwlzdHJlYW1fY2IgPSBibG9ja19yYW5nZV9yZWFkX3N0cmVhbV9j YjsKKwlzdHJlYW0gPSByZWFkX3N0cmVhbV9iZWdpbl9yZWxhdGlvbihzdHJlYW1fZmxhZ3MsCisJ CQkJCQkJCQkJR2V0QWNjZXNzU3RyYXRlZ3koQkFTX0JVTEtSRUFEKSwKKwkJCQkJCQkJCQlzdGF0 ZS0+aWR4cmVsLAorCQkJCQkJCQkJCU1BSU5fRk9SS05VTSwKKwkJCQkJCQkJCQlzdHJlYW1fY2Is CisJCQkJCQkJCQkJJnN0cmVhbV9kYXRhLAorCQkJCQkJCQkJCTApOworCisJd2hpbGUgKChzdGF0 ZS0+cmVncGFnZWJ1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKHN0cmVhbSwgTlVMTCkpICE9 IEludmFsaWRCdWZmZXIpCisJeworCQlPZmZzZXROdW1iZXIgbWF4b2ZmOworCisJCXN0YXRlLT5y ZWdwYWdlQmxrID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoc3RhdGUtPnJlZ3BhZ2VidWYpOworCQlM b2NrQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJCXN0YXRl LT5yZWdwYWdlID0gQnVmZmVyR2V0UGFnZShzdGF0ZS0+cmVncGFnZWJ1Zik7CisKKwkJLyogU2tp cCBuZXcgcGFnZXMgKi8KKwkJaWYgKFBhZ2VJc05ldyhzdGF0ZS0+cmVncGFnZSkpCisJCXsKKwkJ CVVubG9ja1JlbGVhc2VCdWZmZXIoc3RhdGUtPnJlZ3BhZ2VidWYpOworCQkJY29udGludWU7CisJ CX0KKworCQlpZiAoIUJSSU5fSVNfUkVHVUxBUl9QQUdFKHN0YXRlLT5yZWdwYWdlKSkKKwkJewor CQkJYnJpbl9jaGVja19lcmVwb3J0KHN0YXRlLCBwc3ByaW50ZigiZXhwZWN0ZWQgbmV3IG9yIHJl Z3VsYXIgcGFnZSBhdCBibG9jayAldSIsIHN0YXRlLT5yZWdwYWdlQmxrKSk7CisJCX0KKworCQkv KiBDaGVjayB0aGF0IGFsbCBOT1JNQUwgaW5kZXggdHVwbGVzIHdpdGhpbiB0aGUgcGFnZSBhcmUg bm90IG9ycGhhbnMgKi8KKwkJbWF4b2ZmID0gUGFnZUdldE1heE9mZnNldE51bWJlcihzdGF0ZS0+ cmVncGFnZSk7CisJCWZvciAoc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPSBGaXJzdE9mZnNldE51bWJl cjsgc3RhdGUtPnJlZ3BhZ2VvZmZzZXQgPD0gbWF4b2ZmOyBzdGF0ZS0+cmVncGFnZW9mZnNldCsr KQorCQl7CisJCQlJdGVtSWQJCWxwOworCQkJQnJpblR1cGxlICAqdHVwOworCQkJQmxvY2tOdW1i ZXIgcmV2bWFwQmxrOworCisJCQlscCA9IFBhZ2VHZXRJdGVtSWRDYXJlZnVsKHN0YXRlKTsKKwor CQkJaWYgKEl0ZW1JZElzVXNlZChscCkpCisJCQl7CisJCQkJdHVwID0gKEJyaW5UdXBsZSAqKSBQ YWdlR2V0SXRlbShzdGF0ZS0+cmVncGFnZSwgbHApOworCisJCQkJLyogR2V0IHJldm1hcCBibG9j ayBudW1iZXIgZm9yIGluZGV4IHR1cGxlIGJsa25vICovCisJCQkJcmV2bWFwQmxrID0gKCh0dXAt PmJ0X2Jsa25vIC8gc3RhdGUtPnBhZ2VzUGVyUmFuZ2UpIC8gUkVWTUFQX1BBR0VfTUFYSVRFTVMp ICsgMTsKKwkJCQlpZiAocmV2bWFwQmxrID4gc3RhdGUtPmxhc3RSZXZtYXBQYWdlKQorCQkJCXsK KwkJCQkJaW5kZXhfdHVwbGVfb25seV9lcmVwb3J0KHN0YXRlLCBwc3ByaW50Zigibm8gcmV2bWFw IHBhZ2UgZm9yIHRoZSBpbmRleCB0dXBsZSB3aXRoIGJsa25vICV1IiwKKwkJCQkJCQkJCQkJCQkJ CSB0dXAtPmJ0X2Jsa25vKSk7CisJCQkJfQorCisJCQkJLyogRmV0Y2ggYW5vdGhlciByZXZtYXAg cGFnZSBpZiBuZWVkZWQgKi8KKwkJCQlpZiAoc3RhdGUtPnJldm1hcEJsayAhPSByZXZtYXBCbGsp CisJCQkJeworCQkJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKHN0YXRlLT5yZXZtYXBCbGspKQor CQkJCQl7CisJCQkJCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYpOworCQkJCQl9CisJ CQkJCXN0YXRlLT5yZXZtYXBCbGsgPSByZXZtYXBCbGs7CisJCQkJCXN0YXRlLT5yZXZtYXBidWYg PSBSZWFkQnVmZmVyRXh0ZW5kZWQoc3RhdGUtPmlkeHJlbCwgTUFJTl9GT1JLTlVNLCBzdGF0ZS0+ cmV2bWFwQmxrLCBSQk1fTk9STUFMLAorCQkJCQkJCQkJCQkJCQkgIHN0YXRlLT5jaGVja3N0cmF0 ZWd5KTsKKwkJCQl9CisKKwkJCQlzdGF0ZS0+cmV2bWFwaWR4ID0gKHR1cC0+YnRfYmxrbm8gLyBz dGF0ZS0+cGFnZXNQZXJSYW5nZSkgJSBSRVZNQVBfUEFHRV9NQVhJVEVNUzsKKwkJCQlzdGF0ZS0+ cmFuZ2VCbGtubyA9IHR1cC0+YnRfYmxrbm87CisKKwkJCQkvKiBjaGVjayB0aGF0IHJldm1hcCBp dGVtIHBvaW50cyB0byBpbmRleCB0dXBsZSAqLworCQkJCWlmICghcmV2bWFwX3BvaW50c190b19p bmRleF90dXBsZShzdGF0ZSkpCisJCQkJeworCQkJCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRl LCBwc3ByaW50ZigicmV2bWFwIGRvZXNuJ3QgcG9pbnQgdG8gaW5kZXggdHVwbGUiKSk7CisJCQkJ fQorCisJCQl9CisJCX0KKworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZWdwYWdlYnVm KTsKKwl9CisKKwlyZWFkX3N0cmVhbV9lbmQoc3RyZWFtKTsKKworCWlmIChzdGF0ZS0+cmV2bWFw YnVmICE9IEludmFsaWRCdWZmZXIpCisJeworCQlSZWxlYXNlQnVmZmVyKHN0YXRlLT5yZXZtYXBi dWYpOworCX0KK30KKworLyoKKyAqIENoZWNrIGlmIHRoZSByZXZtYXAgaXRlbSBwb2ludHMgdG8g dGhlIGluZGV4IHR1cGxlIChyZWdwYWdlQmxrLCByZWdwYWdlb2Zmc2V0KS4KKyAqIFdlIGhhdmUg bG9ja2VkIHJlZyBwYWdlLCBhbmQgbG9jayByZXZtYXAgcGFnZSBoZXJlLgorICogSXQncyBhIHZh bGlkIGxvY2sgb3JkZXJpbmcsIHNvIG5vIGRlYWRsb2NrIGlzIHBvc3NpYmxlLgorICovCitzdGF0 aWMgYm9vbAorcmV2bWFwX3BvaW50c190b19pbmRleF90dXBsZShCcmluQ2hlY2tTdGF0ZSAqIHN0 YXRlKQoreworCUl0ZW1Qb2ludGVyRGF0YSAqcmV2bWFwdGlkczsKKwlSZXZtYXBDb250ZW50cyAq Y29udGVudHM7CisJSXRlbVBvaW50ZXJEYXRhICp0aWQ7CisJYm9vbAkJcG9pbnRzOworCisJTG9j a0J1ZmZlcihzdGF0ZS0+cmV2bWFwYnVmLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJY29udGVudHMg PSAoUmV2bWFwQ29udGVudHMgKikgUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2Uoc3RhdGUt PnJldm1hcGJ1ZikpOworCXJldm1hcHRpZHMgPSBjb250ZW50cy0+cm1fdGlkczsKKwl0aWQgPSBy ZXZtYXB0aWRzICsgc3RhdGUtPnJldm1hcGlkeDsKKworCXBvaW50cyA9IEl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXJOb0NoZWNrKHRpZCkgPT0gc3RhdGUtPnJlZ3BhZ2VCbGsgJiYKKwkJSXRlbVBv aW50ZXJHZXRPZmZzZXROdW1iZXJOb0NoZWNrKHRpZCkgPT0gc3RhdGUtPnJlZ3BhZ2VvZmZzZXQ7 CisKKwlMb2NrQnVmZmVyKHN0YXRlLT5yZXZtYXBidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisJ cmV0dXJuIHBvaW50czsKK30KKworLyoKKyAqIFBhZ2VHZXRJdGVtSWQoKSB3cmFwcGVyIHRoYXQg dmFsaWRhdGVzIHJldHVybmVkIGxpbmUgcG9pbnRlci4KKyAqCisgKiBpdGVtSWQgaW4gYnJpbiBp bmRleCBjb3VsZCBiZSBVTlVTRUQgb3IgTk9STUFMLgorICovCitzdGF0aWMgSXRlbUlkCitQYWdl R2V0SXRlbUlkQ2FyZWZ1bChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlKQoreworCVBhZ2UJCXBhZ2Ug PSBzdGF0ZS0+cmVncGFnZTsKKwlPZmZzZXROdW1iZXIgb2Zmc2V0ID0gc3RhdGUtPnJlZ3BhZ2Vv ZmZzZXQ7CisJSXRlbUlkCQlpdGVtaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9mZnNldCk7CisK KwlpZiAoSXRlbUlkR2V0T2Zmc2V0KGl0ZW1pZCkgKyBJdGVtSWRHZXRMZW5ndGgoaXRlbWlkKSA+ CisJCUJMQ0tTWiAtIE1BWEFMSUdOKHNpemVvZihCcmluU3BlY2lhbFNwYWNlKSkpCisJCWluZGV4 X3R1cGxlX2VyZXBvcnQoc3RhdGUsCisJCQkJCQkJcHNwcmludGYoImxpbmUgcG9pbnRlciBwb2lu dHMgcGFzdCBlbmQgb2YgdHVwbGUgc3BhY2UgaW4gaW5kZXguICIKKwkJCQkJCQkJCSAibHBfb2Zm PSV1LCBscF9sZW49JXUgbHBfZmxhZ3M9JXUiLAorCQkJCQkJCQkJIEl0ZW1JZEdldE9mZnNldChp dGVtaWQpLAorCQkJCQkJCQkJIEl0ZW1JZEdldExlbmd0aChpdGVtaWQpLAorCQkJCQkJCQkJIEl0 ZW1JZEdldEZsYWdzKGl0ZW1pZCkKKwkJCQkJCQkJCSApCisJCQkpOworCisJLyogVmVyaWZ5IHRo YXQgbGluZSBwb2ludGVyIGlzIExQX05PUk1BTCBvciBMUF9VTlVTRUQgKi8KKwlpZiAoISgoSXRl bUlkSXNOb3JtYWwoaXRlbWlkKSAmJiBJdGVtSWRIYXNTdG9yYWdlKGl0ZW1pZCkpIHx8CisJCSAg KCFJdGVtSWRJc1VzZWQoaXRlbWlkKSAmJiAhSXRlbUlkSGFzU3RvcmFnZShpdGVtaWQpKSkpCisJ eworCQlpbmRleF90dXBsZV9lcmVwb3J0KHN0YXRlLAorCQkJCQkJCXBzcHJpbnRmKCJpbnZhbGlk IGxpbmUgcG9pbnRlciBzdG9yYWdlIGluIGluZGV4LiAiCisJCQkJCQkJCQkgImxwX29mZj0ldSwg bHBfbGVuPSV1IGxwX2ZsYWdzPSV1IiwKKwkJCQkJCQkJCSBJdGVtSWRHZXRPZmZzZXQoaXRlbWlk KSwKKwkJCQkJCQkJCSBJdGVtSWRHZXRMZW5ndGgoaXRlbWlkKSwKKwkJCQkJCQkJCSBJdGVtSWRH ZXRGbGFncyhpdGVtaWQpCisJCQkJCQkJCQkgKSk7CisJfQorCisJcmV0dXJuIGl0ZW1pZDsKK30K KworCisvKiBSZXBvcnQgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBpbmZvICovCitzdGF0aWMgdm9p ZAorYnJpbl9jaGVja19lcmVwb3J0KEJyaW5DaGVja1N0YXRlICogc3RhdGUsIGNvbnN0IGNoYXIg KmZtdCkKK3sKKwllcmVwb3J0KEVSUk9SLAorCQkJKGVycmNvZGUoRVJSQ09ERV9JTkRFWF9DT1JS VVBURUQpLAorCQkJIGVycm1zZygiSW5kZXggJXMgaXMgY29ycnVwdGVkIC0gJXMiLCBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShzdGF0ZS0+aWR4cmVsKSwgZm10KSkpOworfQorCisvKiBSZXBvcnQg d2l0aCByYW5nZSBibGtubywgcmV2bWFwIGl0ZW0gaW5mbywgaW5kZXggdHVwbGUgaW5mbyAqLwor dm9pZAoraW5kZXhfdHVwbGVfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBjb25zdCBj aGFyICpmbXQpCit7CisJQXNzZXJ0KHN0YXRlLT5yYW5nZUJsa25vICE9IEludmFsaWRCbG9ja051 bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZXZtYXBCbGsgIT0gSW52YWxpZEJsb2NrTnVtYmVyKTsK KwlBc3NlcnQoc3RhdGUtPnJldm1hcGlkeCA+PSAwICYmIHN0YXRlLT5yZXZtYXBpZHggPCBSRVZN QVBfUEFHRV9NQVhJVEVNUyk7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlQmxrICE9IEludmFsaWRC bG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlb2Zmc2V0ICE9IEludmFsaWRPZmZz ZXROdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhf Q09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVzIGlzIGNvcnJ1cHRlZCAtICVzLiBSYW5n ZSBibGtubzogJXUsIHJldm1hcCBpdGVtOiAoJXUsJXUpLCBpbmRleCB0dXBsZTogKCV1LCV1KSIs CisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5pZHhyZWwpLAorCQkJCQlmbXQs CisJCQkJCXN0YXRlLT5yYW5nZUJsa25vLAorCQkJCQlzdGF0ZS0+cmV2bWFwQmxrLAorCQkJCQlz dGF0ZS0+cmV2bWFwaWR4LAorCQkJCQlzdGF0ZS0+cmVncGFnZUJsaywKKwkJCQkJc3RhdGUtPnJl Z3BhZ2VvZmZzZXQpKSk7Cit9CisKKy8qIFJlcG9ydCB3aXRoIGluZGV4IHR1cGxlIGluZm8gKi8K K3ZvaWQKK2luZGV4X3R1cGxlX29ubHlfZXJlcG9ydChCcmluQ2hlY2tTdGF0ZSAqIHN0YXRlLCBj b25zdCBjaGFyICpmbXQpCit7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlQmxrICE9IEludmFsaWRC bG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZWdwYWdlb2Zmc2V0ICE9IEludmFsaWRPZmZz ZXROdW1iZXIpOworCisJZXJlcG9ydChFUlJPUiwKKwkJCShlcnJjb2RlKEVSUkNPREVfSU5ERVhf Q09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVzIGlzIGNvcnJ1cHRlZCAtICVzLiBJbmRl eCB0dXBsZTogKCV1LCV1KSIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5p ZHhyZWwpLAorCQkJCQlmbXQsCisJCQkJCXN0YXRlLT5yZWdwYWdlQmxrLAorCQkJCQlzdGF0ZS0+ cmVncGFnZW9mZnNldCkpKTsKK30KKworLyogUmVwb3J0IHdpdGggcmFuZ2UgYmxrbm8sIHJldm1h cCBpdGVtIGluZm8gKi8KK3ZvaWQKK3Jldm1hcF9pdGVtX2VyZXBvcnQoQnJpbkNoZWNrU3RhdGUg KiBzdGF0ZSwgY29uc3QgY2hhciAqZm10KQoreworCUFzc2VydChzdGF0ZS0+cmFuZ2VCbGtubyAh PSBJbnZhbGlkQmxvY2tOdW1iZXIpOworCUFzc2VydChzdGF0ZS0+cmV2bWFwQmxrICE9IEludmFs aWRCbG9ja051bWJlcik7CisJQXNzZXJ0KHN0YXRlLT5yZXZtYXBpZHggPj0gMCAmJiBzdGF0ZS0+ cmV2bWFwaWR4IDwgUkVWTUFQX1BBR0VfTUFYSVRFTVMpOworCisJZXJlcG9ydChFUlJPUiwKKwkJ CShlcnJjb2RlKEVSUkNPREVfSU5ERVhfQ09SUlVQVEVEKSwKKwkJCSBlcnJtc2coIkluZGV4ICVz IGlzIGNvcnJ1cHRlZCAtICVzLiBSYW5nZSBibGtubzogJXUsIHJldm1hcCBpdGVtOiAoJXUsJXUp LiIsCisJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHN0YXRlLT5pZHhyZWwpLAorCQkJCQlm bXQsCisJCQkJCXN0YXRlLT5yYW5nZUJsa25vLAorCQkJCQlzdGF0ZS0+cmV2bWFwQmxrLAorCQkJ CQlzdGF0ZS0+cmV2bWFwaWR4KSkpOworfQotLSAKMi40My4wCgo= --00000000000062fc23063a86747b Content-Type: text/x-patch; charset="US-ASCII"; name="v8-0003-amcheck-common_verify-register-snapshot-with-indc.patch" Content-Disposition: attachment; filename="v8-0003-amcheck-common_verify-register-snapshot-with-indc.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mdepc0z22 RnJvbSAwYTc1MDE1ZTEwOWY1YzU4ZGI5NDQwMjE1ZThhODg1NDBjNWVkMTE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBcnNlbml5IE11a2hpbiA8YXJzZW5peS5tdWtoaW4uZGV2QGdt YWlsLmNvbT4KRGF0ZTogVHVlLCAyMiBKdWwgMjAyNSAxNzozNzoxMyArMDMwMApTdWJqZWN0OiBb UEFUQ0ggdjggMy80XSBhbWNoZWNrOiBjb21tb25fdmVyaWZ5IC0gcmVnaXN0ZXIgc25hcHNob3Qg d2l0aAogaW5kY2hlY2t4bWluIGNoZWNrCgpNb3ZlcyBjaGVjayB0byBjb21tb25fdmVyaWZ5LiBF dmVyeSBpbmRleCBuZWVkcyBpdCBmb3IgaGVhcGFsbGluZGV4ZWQgY2hlY2suCi0tLQogY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9jb21tb24uYyB8IDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBjb250cmliL2FtY2hlY2svdmVyaWZ5X2NvbW1vbi5oIHwgIDIgKysKIGNvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMgfCAyMyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxl cyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9jb250cmliL2FtY2hlY2svdmVyaWZ5X2NvbW1vbi5jIGIvY29udHJpYi9hbWNoZWNrL3Zlcmlm eV9jb21tb24uYwppbmRleCBhMzFjZTA2ZWQ5OS4uYmJjZWZlODI4OTggMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvYW1jaGVjay92ZXJpZnlfY29tbW9uLmMKKysrIGIvY29udHJpYi9hbWNoZWNrL3Zlcmlm eV9jb21tb24uYwpAQCAtMTg5LDMgKzE4OSwzMiBAQCBpbmRleF9jaGVja2FibGUoUmVsYXRpb24g cmVsLCBPaWQgYW1faWQpCiAKIAlyZXR1cm4gYW1jaGVja19pbmRleF9tYWluZm9ya19leHBlY3Rl ZChyZWwpOwogfQorCisvKgorICogR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpIGFsd2F5cyBhY3F1 aXJlcyBhIG5ldyBNVkNDIHNuYXBzaG90IGluCisgKiBSRUFEIENPTU1JVFRFRCBtb2RlLiAgQSBu ZXcgc25hcHNob3QgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGFsbAorICogdGhlIGVudHJpZXMgaXQg cmVxdWlyZXMgaW4gdGhlIGluZGV4LgorICoKKyAqIFdlIG11c3QgZGVmZW5kIGFnYWluc3QgdGhl IHBvc3NpYmlsaXR5IHRoYXQgYW4gb2xkIHhhY3QKKyAqIHNuYXBzaG90IHdhcyByZXR1cm5lZCBh dCBoaWdoZXIgaXNvbGF0aW9uIGxldmVscyB3aGVuIHRoYXQKKyAqIHNuYXBzaG90IGlzIG5vdCBz YWZlIGZvciBpbmRleCBzY2FucyBvZiB0aGUgdGFyZ2V0IGluZGV4LiAgVGhpcworICogaXMgcG9z c2libGUgd2hlbiB0aGUgc25hcHNob3Qgc2VlcyB0dXBsZXMgdGhhdCBhcmUgYmVmb3JlIHRoZQor ICogaW5kZXgncyBpbmRjaGVja3htaW4gaG9yaXpvbi4gIFRocm93aW5nIGFuIGVycm9yIGhlcmUg c2hvdWxkIGJlCisgKiB2ZXJ5IHJhcmUuICBJdCBkb2Vzbid0IHNlZW0gd29ydGggdXNpbmcgYSBz ZWNvbmRhcnkgc25hcHNob3QgdG8KKyAqIGF2b2lkIHRoaXMuCisgKi8KK1NuYXBzaG90CitSZWdp c3RlclNuYXBzaG90QW5kQ2hlY2tJbmRleENoZWNrWE1pbihSZWxhdGlvbiBpZHhyZWwpCit7CisJ U25hcHNob3QJc25hcHNob3QgPSBSZWdpc3RlclNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNo b3QoKSk7CisKKwlpZiAoSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpICYmIGlkeHJlbC0+cmRf aW5kZXgtPmluZGNoZWNreG1pbiAmJgorCQkhVHJhbnNhY3Rpb25JZFByZWNlZGVzKEhlYXBUdXBs ZUhlYWRlckdldFhtaW4oaWR4cmVsLT5yZF9pbmRleHR1cGxlLT50X2RhdGEpLAorCQkJCQkJCSAg IHNuYXBzaG90LT54bWluKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X1RfUl9TRVJJQUxJWkFUSU9OX0ZBSUxVUkUpLAorCQkJCSBlcnJtc2coImluZGV4IFwiJXNcIiBj YW5ub3QgYmUgdmVyaWZpZWQgdXNpbmcgdHJhbnNhY3Rpb24gc25hcHNob3QiLAorCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4cmVsKSkpKTsKKworCXJldHVybiBzbmFwc2hvdDsKK30K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfY29tbW9uLmggYi9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X2NvbW1vbi5oCmluZGV4IDNmNGM1N2Y5NjNkLi43Njc5ZTMzZGE3NyAxMDA2 NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9jb21tb24uaAorKysgYi9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X2NvbW1vbi5oCkBAIC0yNiwzICsyNiw1IEBAIGV4dGVybiB2b2lkIGFtY2hl Y2tfbG9ja19yZWxhdGlvbl9hbmRfY2hlY2soT2lkIGluZHJlbGlkLAogCQkJCQkJCQkJCQlPaWQg YW1faWQsCiAJCQkJCQkJCQkJCUluZGV4RG9DaGVja0NhbGxiYWNrIGNoZWNrLAogCQkJCQkJCQkJ CQlMT0NLTU9ERSBsb2NrbW9kZSwgdm9pZCAqc3RhdGUpOworCitleHRlcm4gU25hcHNob3QgUmVn aXN0ZXJTbmFwc2hvdEFuZENoZWNrSW5kZXhDaGVja1hNaW4oUmVsYXRpb24gaWR4cmVsKTsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCmluZGV4IDA5NDljODg5ODNhLi5jOWFhOTA0NDA0NSAxMDA2NDQK LS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hl Y2svdmVyaWZ5X25idHJlZS5jCkBAIC00NDEsMjggKzQ0MSw3IEBAIGJ0X2NoZWNrX2V2ZXJ5X2xl dmVsKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgYm9vbCBoZWFwa2V5c3BhY2UsCiAJ CSAqLwogCQlpZiAoIXN0YXRlLT5yZWFkb25seSkKIAkJewotCQkJc25hcHNob3QgPSBSZWdpc3Rl clNuYXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7Ci0KLQkJCS8qCi0JCQkgKiBHZXRU cmFuc2FjdGlvblNuYXBzaG90KCkgYWx3YXlzIGFjcXVpcmVzIGEgbmV3IE1WQ0Mgc25hcHNob3Qg aW4KLQkJCSAqIFJFQUQgQ09NTUlUVEVEIG1vZGUuICBBIG5ldyBzbmFwc2hvdCBpcyBndWFyYW50 ZWVkIHRvIGhhdmUgYWxsCi0JCQkgKiB0aGUgZW50cmllcyBpdCByZXF1aXJlcyBpbiB0aGUgaW5k ZXguCi0JCQkgKgotCQkJICogV2UgbXVzdCBkZWZlbmQgYWdhaW5zdCB0aGUgcG9zc2liaWxpdHkg dGhhdCBhbiBvbGQgeGFjdAotCQkJICogc25hcHNob3Qgd2FzIHJldHVybmVkIGF0IGhpZ2hlciBp c29sYXRpb24gbGV2ZWxzIHdoZW4gdGhhdAotCQkJICogc25hcHNob3QgaXMgbm90IHNhZmUgZm9y IGluZGV4IHNjYW5zIG9mIHRoZSB0YXJnZXQgaW5kZXguICBUaGlzCi0JCQkgKiBpcyBwb3NzaWJs ZSB3aGVuIHRoZSBzbmFwc2hvdCBzZWVzIHR1cGxlcyB0aGF0IGFyZSBiZWZvcmUgdGhlCi0JCQkg KiBpbmRleCdzIGluZGNoZWNreG1pbiBob3Jpem9uLiAgVGhyb3dpbmcgYW4gZXJyb3IgaGVyZSBz aG91bGQgYmUKLQkJCSAqIHZlcnkgcmFyZS4gIEl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB1c2luZyBh IHNlY29uZGFyeSBzbmFwc2hvdCB0bwotCQkJICogYXZvaWQgdGhpcy4KLQkJCSAqLwotCQkJaWYg KElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSAmJiByZWwtPnJkX2luZGV4LT5pbmRjaGVja3ht aW4gJiYKLQkJCQkhVHJhbnNhY3Rpb25JZFByZWNlZGVzKEhlYXBUdXBsZUhlYWRlckdldFhtaW4o cmVsLT5yZF9pbmRleHR1cGxlLT50X2RhdGEpLAotCQkJCQkJCQkJICAgc25hcHNob3QtPnhtaW4p KQotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJyY29kZShFUlJDT0RFX1RfUl9TRVJJQUxJ WkFUSU9OX0ZBSUxVUkUpLAotCQkJCQkJIGVycm1zZygiaW5kZXggXCIlc1wiIGNhbm5vdCBiZSB2 ZXJpZmllZCB1c2luZyB0cmFuc2FjdGlvbiBzbmFwc2hvdCIsCi0JCQkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpKSk7CisJCQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNob3RBbmRD aGVja0luZGV4Q2hlY2tYTWluKHN0YXRlLT5yZWwpOwogCQl9CiAJfQogCi0tIAoyLjQzLjAKCg== --00000000000062fc23063a86747b--