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 1tfaif-003XYC-DX for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2025 08:25:14 +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 1tfaie-00CpRf-Hk for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Feb 2025 08:25:12 +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 1tfaid-00CpRX-Qt for pgsql-hackers@lists.postgresql.org; Wed, 05 Feb 2025 08:25:12 +0000 Received: from mail-vs1-xe30.google.com ([2607:f8b0:4864:20::e30]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tfaia-003HMS-0N for pgsql-hackers@lists.postgresql.org; Wed, 05 Feb 2025 08:25:10 +0000 Received: by mail-vs1-xe30.google.com with SMTP id ada2fe7eead31-4b2c0a7ef74so4021309137.2 for ; Wed, 05 Feb 2025 00:25:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738743907; x=1739348707; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=OyCE1PRjRcRo7BYqpnX1dV9uTr0s1qV6lPAVFRmHsps=; b=QrB8BLSIMbpbw3Y5WBzynXRC8cJxaTzzmI1ICTvnPU0bVJZk5ohwExUfrurVlfsWSw hbyiKA1jdQ7YOp6qzyXGqrCRos/8pXDNPAKbs7SgOzA6QF+xSJPlKRCw6hmxIbjaJt2C onvp13PdUt55J+Z395yugAm0xKbrMCxnaIv6Sq8XD2A/vIfNmiHDDVgzbYJHeFb2liMj U668y/V1WTHNa1Xmv7r5ZgILBzh5IYZwJ1jQ9ISwhOcMHApY6RYOHPSuPh/bi4Neo4bK WeeoyD+IuvjmFXDkz1wM+1BO2rGwXqgN4rZc8qml1hjsIxPrh9oVtWrDnLm0K3PbJNSf ZtbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738743907; x=1739348707; h=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=OyCE1PRjRcRo7BYqpnX1dV9uTr0s1qV6lPAVFRmHsps=; b=VmMXNsFeuXFIxp+OjI+DT0EPrtY0eIdzn55WhKBFdYCA9PPMrM1q+c7GlPbY2HcsQH ZB8KDsEoxqwlfj6pQDp2/PH6QCW70mh3nL5kQIN1/0zTcIA0e5vTgtF9ZdanJgpZjkc5 8u86Tof2ze83NsG1itVULZvQWxH09xS0zyqJWpEt2uoe+JSWa1PuhOhsen3UNejN6ux/ oUSerjhlfO3ZZSsicjrNhvnNGwk1Taj4UTXCYQwgMApBljLPTcHWE63m74C2MauKoeqj TxxeEYj0hY0zDcykAfJzQC1DhlT8qrtk54qK2qyZRBvLYHAD29ZAb1l8tevRc+uGkNbw oI3w== X-Gm-Message-State: AOJu0YwrrkVA7VeWUSmz/+axGZmyM1BZczJwuXul7wPfOBPiqn8tOFNK qeZqJVXIhiaU/IkmszZzAr5OGv466cHpI6xMWrRJ6XpydAKbZEOJ9p5kfzxaY80DpJsi0SzWTyp sL0XFj4Mp2S2JLRIZE1XT05J6PBpRCqJnJ/jZGg== X-Gm-Gg: ASbGncs5R/IoY7ghnSulc2YN6VnNU1QzfcM8IPfXE03sDjclJJAmQ5t8LS21TciYHCZ UZA915+ZgIUHB4zUNkmpX11GV8atc3fhevQOpLHOR0KlCoSYjj3COGU4KRYvoGy7M1+Q6PHfw X-Google-Smtp-Source: AGHT+IErvWMxa09u3lpNuN6k+S4cjAGc81ciX6lFlq9vK3KTOywewtExXXeD1sxrkWj37OS4vXzgvPHHQDMBLHYwvc8= X-Received: by 2002:a05:6102:2c12:b0:4af:c5c8:bb4c with SMTP id ada2fe7eead31-4ba47aba04dmr1433944137.16.1738743907436; Wed, 05 Feb 2025 00:25:07 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Wed, 5 Feb 2025 16:24:31 +0800 X-Gm-Features: AWEUYZlvBdHf0cBmIQwS_Pcr-0K25W_3j6FUlUWNJVrXx3T2xIE6PUqI0nMpRfc Message-ID: Subject: Re: using index to speedup add not null constraints to a table To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000f56df5062d60dc4a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f56df5062d60dc4a Content-Type: text/plain; charset="UTF-8" hi rebased new patch attached. I also did some cosmetic changes. comments refined. make sure using index_scan mechanism to fast check column not-null can only be used via btree index. isolation tests are simplified. --000000000000f56df5062d60dc4a Content-Type: text/x-patch; charset="US-ASCII"; name="v3-0001-using-index-to-speedup-add-not-null-constraint-to.patch" Content-Disposition: attachment; filename="v3-0001-using-index-to-speedup-add-not-null-constraint-to.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m6rn56nt0 RnJvbSBiZThmZWE3OTk4NjMzOWNhZGZmMjFkYmU5YzQ0MTViMzMwYTI5NmEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNSBGZWIgMjAyNSAxNjowNToxMCArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjMg MS8xXSB1c2luZyBpbmRleCB0byBzcGVlZHVwIGFkZCBub3QgbnVsbCBjb25zdHJhaW50IHRvCiBl eGlzdGluZyB0YWJsZQoKVGhpcyBwYXRjaCB0cmllcyB0byB1c2UgaW5kZXhfYmVnaW5zY2FuKCkg LyBpbmRleF9nZXRuZXh0KCkgLyBpbmRleF9lbmRzY2FuKCkKbWVudGlvbmVkIGluIFsxXSB0byBz cGVlZHVwIGFkZGluZyBub3QtbnVsbCBjb25zdHJhaW50cyB0byB0aGUgZXhpc3RpbmcgdGFibGUu CgpUaGVyZSBhcmUgdHdvIHdheXMgdG8gYWRkIG5vdC1udWxsIGNvbnN0cmFpbnRzIHRvIGFuIGV4 aXN0aW5nIHRhYmxlLgoxLiBBVEV4ZWNBZGRDb25zdHJhaW50LT5BVEFkZENoZWNrTk5Db25zdHJh aW50LT5BZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzCjIuIEFURXhlY1NldE5vdE51bGwtPkFkZFJl bGF0aW9uTmV3Q29uc3RyYWludHMKClRoZSBsb2dpYyBpczoKMS4gSW4gQWRkUmVsYXRpb25OZXdD b25zdHJhaW50cywgaWYgY29uZGl0aW9uIG1lZXQgKHNlZSBnZXRfaW5kZXhfZm9yX3ZhbGlkYXRl X25vdG51bGwpCiAgIHRoZW4gYXR0ZW1wdCB0byB1c2UgaW5kZXhzY2FuIHRvIHByZSBjaGVjayB3 aGV0aGVyIHRoZSBjb2x1bW4gaXMgTk9UIE5VTEwuCjIuIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWlu dHMgcmV0dXJuZWQgYSBsaXN0IG9mIENvb2tlZENvbnN0cmFpbnQgbm9kZXMuCiAgIHBhc3Mgbm90 LW51bGwgY29va2VkIGNvbnN0cmFpbnQgdG8gdGFiLT5jb25zdHJhaW50cyAoYSBsaXN0IG9mIE5l d0NvbnN0cmFpbnQpLgogICBjb2RlIHNuaXBwZXQ6CiAgICBpZiAoIWNjb24tPnNraXBfdmFsaWRh dGlvbikKICAgIHsKICAgICAgICBuZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNp emVvZihOZXdDb25zdHJhaW50KSk7CiAgICAgICAgaWYgKGNjb24tPnByZV92YWxpZGF0ZWQpCiAg ICAgICAgICAgIG5ld2Nvbi0+bm5fYXR0bnVtID0gY2Nvbi0+YXR0bnVtOwogICAgICAgIHRhYi0+ Y29uc3RyYWludHMgPSBsYXBwZW5kKHRhYi0+Y29uc3RyYWludHMsIG5ld2Nvbik7CiAgICB9CjMu IEluIEFUUmV3cml0ZVRhYmxlLCBpZiBhbGwgYXR0bnVtcyBhc3NvY2lhdGVkIHdpdGggbm90LW51 bGwgY29uc3RyYWludCBoYXZlCmFscmVhZHkgYmVlbiBwcmV2YWxpZGF0ZWQsIHRoZW4gbm8gbmVl ZCB0byBuZWVkc2Nhbi4KCkNBVVRJT046CkFMVEVSIFRBQkxFIFNFVCBEQVRBIFRZUEUgYW5kIEFM VEVSIFRBQkxFIFNFVCBFWFBSRVNTSU9OIHRyaWdnZXIgYW4gaW5kZXgKcmVidWlsZCAocmVmZXIg dG8gUmVtZW1iZXJBbGxEZXBlbmRlbnRGb3JSZWJ1aWxkaW5nKS4gIFdoaWxlIHRoZSBmb3JtZXIg Y2Fubm90CmJlIGFwcGxpZWQgdG8gcGFydGl0aW9uZWQgdGFibGVzLCB0aGUgbGF0dGVyIGNhbi4g IElmIGFuIGluZGV4IHJlYnVpbGQgb2NjdXJzLAp0aGVuIGluZGV4c2NhbiBjYW5ub3QgYmUgdXNl ZCB0byBwcmV2YWxpZGF0ZSB3aGV0aGVyIGEgY29sdW1uIGNvbnRhaW5zIG51bGwKdmFsdWVzLiAg Q29uc2VxdWVudGx5LCBwcmUtdmFsaWRhdGluZyBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgaXMgY3Vy cmVudGx5IG5vdApzdXBwb3J0ZWQgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcy4KCmNvbmN1cnJlbmN5 IGNvbmNlcm46CkFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTCB3aWxsIHRha2UgYW4gQUNDRVNTIEVY Q0xVU0lWRSBsb2NrLCBzbyB0aGVyZSBpcyBsZXNzCnZhcmlhbnQgb2YgcmFjaW5nIGlzc3VlIGNh biBvY2N1cj8gIHRvIHByb3ZlIGFjY3VyYXRlLCBJIHdyb3RlIHNvbWUgaXNvbGF0aW9uCnRlc3Rz LiBzZWVbMl0KCnBlcmZvcm1hbmNlIGNvbmNlcm46Cml0IHdpbGwgYmUgc2xvd2VyIHRoYW4gbm9y bWFsIGFkZGluZyBub3QtbnVsbCBjb25zdHJhaW50IE9OTFkgSUYgeW91ciBpbmRleCBpcwpibG9h dCBhbmQgYSBsYXJnZSBwZXJjZW50IG9mIGJsb2F0IGlzIHJlbGF0ZWQgdG8gbnVsbCB2YWx1ZSBk YXRhLgpkZW1vOgoKMTAwJSBibG9hdCBhbmQgemVybyBwZXJjZW50IG51bGwgdmFsdWU6CmRyb3Ag dGFibGUgaWYgZXhpc3RzIHQgXDsgY3JlYXRlIHVubG9nZ2VkIHRhYmxlIHQoYSBpbnQsIGIgaW50 LCBjIGludCk7Cmluc2VydCBpbnRvIHQgc2VsZWN0IGcsIGcrMSBmcm9tIGdlbmVyYXRlX3Nlcmll cygxLDFfMDAwXzAwMCkgZzsKY3JlYXRlIGluZGV4IHRfaWR4X2Egb24gdChhKTsKZGVsZXRlIGZy b20gdDsKYWx0ZXIgdGFibGUgdCBhZGQgY29uc3RyYWludCB0MSBub3QgbnVsbCBhOwoKcGF0Y2gg VGltZTogIDEuODczIG1zCm1hc3RlciBUaW1lOiA2NDguMzEyIG1zCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLSAlMjAgcGVyY2VudCBjb2x1 bW4gdmFsdWUgaXMgbnVsbCBhbmQgZGVsZXRlZCBmcm9tIGhlYXAgc3RpbGwgb24gdGhlIGluZGV4 Lgpkcm9wIHRhYmxlIGlmIGV4aXN0cyB0IFw7IGNyZWF0ZSB1bmxvZ2dlZCB0YWJsZSB0KGEgaW50 LCBiIGludCk7Cmluc2VydCBpbnRvIHQgc2VsZWN0IGNhc2Ugd2hlbiBnICUgNSA9IDAgdGhlbiBu dWxsIGVsc2UgZyBlbmQsIGcrMQpmcm9tIGdlbmVyYXRlX3NlcmllcygxLDFfMDAwXzAwMCkgZzsK CmNyZWF0ZSBpbmRleCB0X2lkeF9hIG9uIHQoYSk7CmRlbGV0ZSBmcm9tIHQgd2hlcmUgYSBpcyBu dWxsOwoKYWx0ZXIgdGFibGUgdCBhZGQgY29uc3RyYWludCB0MSBub3QgbnVsbCBhOwpwYXRjaCBU aW1lOjogMTA4MC40MDcgbXMgKDAwOjAxLjA4MCkKbWFzdGVyIFRpbWU6IDk3MC42NzEgbXMKCnJl ZmVyZW5jZXM6ClsxXSBodHRwczovL3Bvc3Rnci5lcy9tL0NBJTJCVGdtb2E1Tkt6OGlHV185djd3 eiUzRC0lMkJ6UUZ1JTNERTRTWm9hVGFVMXpuTGFFWFJZcC1RJTQwbWFpbC5nbWFpbC5jb20KWzJd IGh0dHBzOi8vcG9zdGdyLmVzL20vOTAwMDU2RDEtMzJERi00OTI3LTgyNTEtM0UwQzBEQzQwN0ZE JTQwYW5hcmF6ZWwuZGUKLS0tCiBzcmMvYmFja2VuZC9jYXRhbG9nL2hlYXAuYyAgICAgICAgICAg ICAgICAgICAgfCA5MCArKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19j b25zdHJhaW50LmMgICAgICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVj bWRzLmMgICAgICAgICAgICAgIHwgODcgKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICAgICB8IDk3ICsrKysrKysrKysrKysrKysrKysK IHNyYy9pbmNsdWRlL2NhdGFsb2cvaGVhcC5oICAgICAgICAgICAgICAgICAgICB8ICAzICsKIHNy Yy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgICAgICAgICB8ICAxICsKIC4uLi9p c29sYXRpb24vZXhwZWN0ZWQvZmFzdC1zZXQtbm90bnVsbC5vdXQgICB8IDk3ICsrKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L2lzb2xhdGlvbi9pc29sYXRpb25fc2NoZWR1bGUgICAgICAgICB8 ICAxICsKIC4uLi9pc29sYXRpb24vc3BlY3MvZmFzdC1zZXQtbm90bnVsbC5zcGVjICAgICB8IDQz ICsrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FsdGVyX3RhYmxlLm91dCAgICAg fCA0MSArKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsICAgICAg ICAgIHwgNDcgKysrKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCA0OTcgaW5zZXJ0aW9ucygrKSwg MTEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvaXNvbGF0aW9uL2V4 cGVjdGVkL2Zhc3Qtc2V0LW5vdG51bGwub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qv aXNvbGF0aW9uL3NwZWNzL2Zhc3Qtc2V0LW5vdG51bGwuc3BlYwoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvaGVhcC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKaW5kZXgg NTdlZjQ2NmFjYy4uMzVjZDY0ZTg3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9o ZWFwLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMKQEAgLTU3LDYgKzU3LDcgQEAK ICNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90eXBl Y21kcy5oIgogI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNpbmNsdWRlICJleGVjdXRvci9leGVj dXRvci5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5j cy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKQEAgLTExNyw2ICsxMTgsNyBA QCBzdGF0aWMgTm9kZSAqY29va0NvbnN0cmFpbnQoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQkJ CWNoYXIgKnJlbG5hbWUpOwogCiAKK3N0YXRpYyBPaWQgZ2V0X2luZGV4X2Zvcl92YWxpZGF0ZV9u b3RudWxsKFJlbGF0aW9uIHJlbCwgaW50IGNvbG51bSk7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJCQlYWFgg VUdMWSBIQVJEIENPREVEIEJBRE5FU1MgRk9MTE9XUyBYWFgKICAqCkBAIC0yMjg2LDYgKzIyODgs OCBAQCBTdG9yZUNvbnN0cmFpbnRzKFJlbGF0aW9uIHJlbCwgTGlzdCAqY29va2VkX2NvbnN0cmFp bnRzLCBib29sIGlzX2ludGVybmFsKQogICogbmV3Q29uc3RyYWludHM6IGxpc3Qgb2YgQ29uc3Ry YWludCBub2RlcwogICogYWxsb3dfbWVyZ2U6IHRydWUgaWYgY2hlY2sgY29uc3RyYWludHMgbWF5 IGJlIG1lcmdlZCB3aXRoIGV4aXN0aW5nIG9uZXMKICAqIGlzX2xvY2FsOiB0cnVlIGlmIGRlZmlu aXRpb24gaXMgbG9jYWwsIGZhbHNlIGlmIGl0J3MgaW5oZXJpdGVkCisgKiBpbmRleF9yZWJ1aWxk OiB0cnVlIGlmIHRoZSBBTFRFUiBUQUJMRSBjb21tYW5kIGFuZCBpdCdzIHN1YmNvbW1hbmRzCisg KiB3aWxsIGRvIGFueSBpbmRleCByZWJ1aWxkIGluIHRoZSBmdXR1cmUuCiAgKiBpc19pbnRlcm5h bDogdHJ1ZSBpZiByZXN1bHQgb2Ygc29tZSBpbnRlcm5hbCBwcm9jZXNzLCBub3QgYSB1c2VyIHJl cXVlc3QKICAqIHF1ZXJ5U3RyaW5nOiB1c2VkIGR1cmluZyBleHByZXNzaW9uIHRyYW5zZm9ybWF0 aW9uIG9mIGRlZmF1bHQgdmFsdWVzIGFuZAogICoJCWNvb2tlZCBDSEVDSyBjb25zdHJhaW50cwpA QCAtMjMxMCw2ICsyMzE0LDcgQEAgQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhSZWxhdGlvbiBy ZWwsCiAJCQkJCQkgIGJvb2wgYWxsb3dfbWVyZ2UsCiAJCQkJCQkgIGJvb2wgaXNfbG9jYWwsCiAJ CQkJCQkgIGJvb2wgaXNfaW50ZXJuYWwsCisJCQkJCQkgIGJvb2wgaW5kZXhfcmVidWlsZCwKIAkJ CQkJCSAgY29uc3QgY2hhciAqcXVlcnlTdHJpbmcpCiB7CiAJTGlzdAkgICAqY29va2VkQ29uc3Ry YWludHMgPSBOSUw7CkBAIC0yMzk4LDYgKzI0MDMsNyBAQCBBZGRSZWxhdGlvbk5ld0NvbnN0cmFp bnRzKFJlbGF0aW9uIHJlbCwKIAkJY29va2VkLT5pc19sb2NhbCA9IGlzX2xvY2FsOwogCQljb29r ZWQtPmluaGNvdW50ID0gaXNfbG9jYWwgPyAwIDogMTsKIAkJY29va2VkLT5pc19ub19pbmhlcml0 ID0gZmFsc2U7CisJCWNvb2tlZC0+dmFsaWRhdGVkID0gZmFsc2U7CiAJCWNvb2tlZENvbnN0cmFp bnRzID0gbGFwcGVuZChjb29rZWRDb25zdHJhaW50cywgY29va2VkKTsKIAl9CiAKQEAgLTI1MzIs NiArMjUzOCw3IEBAIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMoUmVsYXRpb24gcmVsLAogCQkJ Y29va2VkLT5pc19sb2NhbCA9IGlzX2xvY2FsOwogCQkJY29va2VkLT5pbmhjb3VudCA9IGlzX2xv Y2FsID8gMCA6IDE7CiAJCQljb29rZWQtPmlzX25vX2luaGVyaXQgPSBjZGVmLT5pc19ub19pbmhl cml0OworCQkJY29va2VkLT52YWxpZGF0ZWQgPSBmYWxzZTsKIAkJCWNvb2tlZENvbnN0cmFpbnRz ID0gbGFwcGVuZChjb29rZWRDb25zdHJhaW50cywgY29va2VkKTsKIAkJfQogCQllbHNlIGlmIChj ZGVmLT5jb250eXBlID09IENPTlNUUl9OT1ROVUxMKQpAQCAtMjU0MCw2ICsyNTQ3LDcgQEAgQWRk UmVsYXRpb25OZXdDb25zdHJhaW50cyhSZWxhdGlvbiByZWwsCiAJCQlBdHRyTnVtYmVyCWNvbG51 bTsKIAkJCWludDE2CQlpbmhjb3VudCA9IGlzX2xvY2FsID8gMCA6IDE7CiAJCQljaGFyCSAgICpu bm5hbWU7CisJCQlPaWQJCQlpbmRleG9pZCA9IEludmFsaWRPaWQ7CiAKIAkJCS8qIERldGVybWlu ZSB3aGljaCBjb2x1bW4gdG8gbW9kaWZ5ICovCiAJCQljb2xudW0gPSBnZXRfYXR0bnVtKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSwgc3RyVmFsKGxpbml0aWFsKGNkZWYtPmtleXMpKSk7CkBAIC0yNTky LDYgKzI2MDAsMTUgQEAgQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhSZWxhdGlvbiByZWwsCiAJ CQkJCQkJCWluaGNvdW50LAogCQkJCQkJCQljZGVmLT5pc19ub19pbmhlcml0KTsKIAorCQkJLyoK KwkJCSAqIGlmIHRoZXJlIGlzIGFueSBpbmRleCB0byBiZSByZWJ1aWxkLCB0aGVuIHdlIGNhbm5v dCBkbyBpbmRleHNjYW4KKwkJCSAqIGluIGluZGV4X2NoZWNrX25vdG51bGw7IGZvciByZV9hZGRl ZCAoaXNfaW50ZXJuYWwgaXMgdHJ1ZSkKKwkJCSAqIG5vdC1udWxsIGNvbnN0cmFpbnQgYWxzbyBj YW5ub3QgdXNlIGluZGV4c2NhbiB0byBjaGVjayBudWxsCisJCQkgKiBleGlzdGVuY2UuCisJCQkq LworCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04gJiYgIWlz X2ludGVybmFsICYmICFpbmRleF9yZWJ1aWxkKQorCQkJCWluZGV4b2lkID0gZ2V0X2luZGV4X2Zv cl92YWxpZGF0ZV9ub3RudWxsKHJlbCwgY29sbnVtKTsKKwogCQkJbm5jb29rZWQgPSAoQ29va2Vk Q29uc3RyYWludCAqKSBwYWxsb2Moc2l6ZW9mKENvb2tlZENvbnN0cmFpbnQpKTsKIAkJCW5uY29v a2VkLT5jb250eXBlID0gQ09OU1RSX05PVE5VTEw7CiAJCQlubmNvb2tlZC0+Y29ub2lkID0gY29u c3RyT2lkOwpAQCAtMjYwMyw3ICsyNjIwLDE0IEBAIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMo UmVsYXRpb24gcmVsLAogCQkJbm5jb29rZWQtPmlzX2xvY2FsID0gaXNfbG9jYWw7CiAJCQlubmNv b2tlZC0+aW5oY291bnQgPSBpbmhjb3VudDsKIAkJCW5uY29va2VkLT5pc19ub19pbmhlcml0ID0g Y2RlZi0+aXNfbm9faW5oZXJpdDsKKwkJCW5uY29va2VkLT52YWxpZGF0ZWQgPSBmYWxzZTsKKwkJ CWlmIChPaWRJc1ZhbGlkKGluZGV4b2lkKSkKKwkJCQlubmNvb2tlZC0+dmFsaWRhdGVkID0gaW5k ZXhfY2hlY2tfbm90bnVsbChSZWxhdGlvbkdldFJlbGlkKHJlbCksIGluZGV4b2lkLCBjb2xudW0p OwogCisJCQlpZiAobm5jb29rZWQtPnZhbGlkYXRlZCkKKwkJCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkJCWVycm1zZ19pbnRlcm5hbCgidXNpbmcgaW5kZXggKCVkKSB2ZXJ0aWZpZWQgcmVsYXRpb24g XCIlc1wiIGNvbHVtbiBudW1iZXIgKCVkKSBkb24ndCBoYXZlIG51bGwgdmFsdWVzIiwKKwkJCQkJ CQkJCQkgaW5kZXhvaWQsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCksIGNvbG51bSkpOwog CQkJY29va2VkQ29uc3RyYWludHMgPSBsYXBwZW5kKGNvb2tlZENvbnN0cmFpbnRzLCBubmNvb2tl ZCk7CiAJCX0KIAl9CkBAIC0yNjIwLDYgKzI2NDQsNzIgQEAgQWRkUmVsYXRpb25OZXdDb25zdHJh aW50cyhSZWxhdGlvbiByZWwsCiAJcmV0dXJuIGNvb2tlZENvbnN0cmFpbnRzOwogfQogCitzdGF0 aWMgT2lkCitnZXRfaW5kZXhfZm9yX3ZhbGlkYXRlX25vdG51bGwoUmVsYXRpb24gcmVsYXRpb24s IGludCBjb2xudW0pCit7CisJUmVsYXRpb24JaW5kcmVsOworCVJlbGF0aW9uCWluZGV4X3JlbDsK KwlTeXNTY2FuRGVzYyBpbmRzY2FuOworCVNjYW5LZXlEYXRhIHNrZXk7CisJSGVhcFR1cGxlCWh0 dXA7CisJVHVwbGVEZXNjCXR1cGRlc2M7CisJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0cjsKKwlMaXN0 CSAgICpyZXN1bHQgPSBOSUw7CisKKwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlv bik7CisKKwkvKiBQcmVwYXJlIHRvIHNjYW4gcGdfaW5kZXggZm9yIGVudHJpZXMgaGF2aW5nIGlu ZHJlbGlkID0gdGhpcyByZWwuICovCisJU2NhbktleUluaXQoJnNrZXksCisJCQkJQW51bV9wZ19p bmRleF9pbmRyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJ T2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKSkpOworCisJaW5kcmVs ID0gdGFibGVfb3BlbihJbmRleFJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJaW5kc2Nh biA9IHN5c3RhYmxlX2JlZ2luc2NhbihpbmRyZWwsIEluZGV4SW5kcmVsaWRJbmRleElkLCB0cnVl LAorCQkJCQkJCQkgTlVMTCwgMSwgJnNrZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQo aHR1cCA9IHN5c3RhYmxlX2dldG5leHQoaW5kc2NhbikpKQorCXsKKwkJRm9ybV9wZ19pbmRleCBp bmRleCA9IChGb3JtX3BnX2luZGV4KSBHRVRTVFJVQ1QoaHR1cCk7CisKKwkJaWYgKCFpbmRleC0+ aW5kaW1tZWRpYXRlIHx8ICFpbmRleC0+aW5kaXN2YWxpZCB8fCAhaW5kZXgtPmluZGlzbGl2ZSkK KwkJCWNvbnRpbnVlOworCisJCWlmICghaGVhcF9hdHRpc251bGwoaHR1cCwgQW51bV9wZ19pbmRl eF9pbmRleHBycywgTlVMTCkgfHwKKwkJCSFoZWFwX2F0dGlzbnVsbChodHVwLCBBbnVtX3BnX2lu ZGV4X2luZHByZWQsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkg PCBpbmRleC0+aW5kbmtleWF0dHM7IGkrKykKKwkJeworCQkJYXR0ciA9IFR1cGxlRGVzY0F0dHIo dHVwZGVzYywgKGluZGV4LT5pbmRrZXkudmFsdWVzW2ldKSAtIDEpOworCQkJaWYgKGF0dHItPmF0 dG51bSA9PSBjb2xudW0pCisJCQl7CisJCQkJQXNzZXJ0KE9pZElzVmFsaWQoaW5kZXgtPmluZGV4 cmVsaWQpKTsKKworCQkJCS8qIGN1cnJlbnRseSwgb25seSB2YWxpZGF0ZSBjb2x1bW4gbm90LW51 bGwgY2FuIG9ubHkgZG9uZSBieSBidHJlZSBpbmRleCAqLworCQkJCWluZGV4X3JlbCA9IGluZGV4 X29wZW4oaW5kZXgtPmluZGV4cmVsaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJaWYgKGluZGV4 X3JlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfSU5ERVggJiYKKwkJCQkJaW5kZXhfcmVs LT5yZF9yZWwtPnJlbGFtID09IEJUUkVFX0FNX09JRCkKKwkJCQkJcmVzdWx0ID0gbGFwcGVuZF9v aWQocmVzdWx0LCBpbmRleC0+aW5kZXhyZWxpZCk7CisKKwkJCQlpbmRleF9jbG9zZShpbmRleF9y ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJc3lzdGFi bGVfZW5kc2NhbihpbmRzY2FuKTsKKwl0YWJsZV9jbG9zZShpbmRyZWwsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlpZihsaXN0X2xlbmd0aChyZXN1bHQpID09IDApCisJCXJldHVybiBJbnZhbGlkT2lk OworCWVsc2UKKwl7CisJCS8qIFNvcnQgdGhlIHJlc3VsdCBsaXN0IGludG8gT0lEIG9yZGVyLCBt YWtlIHRoZSByZXN1bHQgc3RhYmxlLiAqLworCQlsaXN0X3NvcnQocmVzdWx0LCBsaXN0X29pZF9j bXApOworCQlyZXR1cm4gbGlzdF9udGhfb2lkKHJlc3VsdCwgMCk7CisJfQorfQorCiAvKgogICog Q2hlY2sgZm9yIGEgcHJlLWV4aXN0aW5nIGNoZWNrIGNvbnN0cmFpbnQgdGhhdCBjb25mbGljdHMg d2l0aCBhIHByb3Bvc2VkCiAgKiBuZXcgb25lLCBhbmQgZWl0aGVyIGFkanVzdCBpdHMgY29uaXNs b2NhbC9jb25pbmhjb3VudCBzZXR0aW5ncyBvciB0aHJvdwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19jb25zdHJhaW50LmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2NvbnN0 cmFpbnQuYwppbmRleCBhYzgwNjUyYmFmLi5hZTFmNzc5ZThlIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX2NvbnN0cmFpbnQuYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2NvbnN0cmFpbnQuYwpAQCAtODM0LDYgKzgzNCw3IEBAIFJlbGF0aW9uR2V0Tm90TnVsbENvbnN0 cmFpbnRzKE9pZCByZWxpZCwgYm9vbCBjb29rZWQsIGJvb2wgaW5jbHVkZV9ub2luaCkKIAkJCWNv b2tlZC0+aXNfbG9jYWwgPSB0cnVlOwogCQkJY29va2VkLT5pbmhjb3VudCA9IDA7CiAJCQljb29r ZWQtPmlzX25vX2luaGVyaXQgPSBjb25Gb3JtLT5jb25ub2luaGVyaXQ7CisJCQljb29rZWQtPnZh bGlkYXRlZCA9IGZhbHNlOwogCiAJCQlub3RudWxscyA9IGxhcHBlbmQobm90bnVsbHMsIGNvb2tl ZCk7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMThmNjRkYjZlMy4uMzlmNGZl NTRkNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIv c3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTIxMCwxNSArMjEwLDE3IEBAIHR5 cGVkZWYgc3RydWN0IEFsdGVyZWRUYWJsZUluZm8KIH0gQWx0ZXJlZFRhYmxlSW5mbzsKIAogLyog U3RydWN0IGRlc2NyaWJpbmcgb25lIG5ldyBjb25zdHJhaW50IHRvIGNoZWNrIGluIFBoYXNlIDMg c2NhbiAqLwotLyogTm90ZTogbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIGFyZSBoYW5kbGVkIGVs c2V3aGVyZSAqLworLyogTm90ZTogbmV3IG5vdC1udWxsIGNvbnN0cmFpbnRzIGFyZSBoYW5kbGVk IGhlcmUgYWxzbyAqLwogdHlwZWRlZiBzdHJ1Y3QgTmV3Q29uc3RyYWludAogewogCWNoYXIJICAg Km5hbWU7CQkJLyogQ29uc3RyYWludCBuYW1lLCBvciBOVUxMIGlmIG5vbmUgKi8KLQlDb25zdHJU eXBlCWNvbnR5cGU7CQkvKiBDSEVDSyBvciBGT1JFSUdOICovCisJQ29uc3RyVHlwZQljb250eXBl OwkJLyogQ0hFQ0sgb3IgRk9SRUlHTiBvciBOT1QtTlVMTCAqLwogCU9pZAkJCXJlZnJlbGlkOwkJ LyogUEsgcmVsLCBpZiBGT1JFSUdOICovCiAJT2lkCQkJcmVmaW5kaWQ7CQkvKiBPSUQgb2YgUEsn cyBpbmRleCwgaWYgRk9SRUlHTiAqLwogCWJvb2wJCWNvbndpdGhwZXJpb2Q7CS8qIFdoZXRoZXIg dGhlIG5ldyBGT1JFSUdOIEtFWSB1c2VzIFBFUklPRCAqLwogCU9pZAkJCWNvbmlkOwkJCS8qIE9J RCBvZiBwZ19jb25zdHJhaW50IGVudHJ5LCBpZiBGT1JFSUdOICovCisJaW50CQkJbm5fYXR0bnVt OwkJLyogYWxyZWFkeSB2YWxpZGF0ZWQgTk9ULU5VTEwgY29uc3RyYWludCBhdHRudW0uCisJCQkJ CQkJCSAgIC0xIG1lYW5zIG5vdCBhcHBsaWNhYmxlICovCiAJTm9kZQkgICAqcXVhbDsJCQkvKiBD aGVjayBleHByIG9yIENPTlNUUl9GT1JFSUdOIENvbnN0cmFpbnQgKi8KIAlFeHByU3RhdGUgICpx dWFsc3RhdGU7CQkvKiBFeGVjdXRpb24gc3RhdGUgZm9yIENIRUNLIGV4cHIgKi8KIH0gTmV3Q29u c3RyYWludDsKQEAgLTk5MCw2ICs5OTIsNyBAQCBEZWZpbmVSZWxhdGlvbihDcmVhdGVTdG10ICpz dG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklkLAogCQkJY29va2VkLT5pc19sb2NhbCA9IHRy dWU7CS8qIG5vdCB1c2VkIGZvciBkZWZhdWx0cyAqLwogCQkJY29va2VkLT5pbmhjb3VudCA9IDA7 CS8qIGRpdHRvICovCiAJCQljb29rZWQtPmlzX25vX2luaGVyaXQgPSBmYWxzZTsKKwkJCWNvb2tl ZC0+dmFsaWRhdGVkID0gZmFsc2U7CiAJCQljb29rZWREZWZhdWx0cyA9IGxhcHBlbmQoY29va2Vk RGVmYXVsdHMsIGNvb2tlZCk7CiAJCQlhdHRyLT5hdHRoYXNkZWYgPSB0cnVlOwogCQl9CkBAIC0x MDc1LDcgKzEwNzgsNyBAQCBEZWZpbmVSZWxhdGlvbihDcmVhdGVTdG10ICpzdG10LCBjaGFyIHJl bGtpbmQsIE9pZCBvd25lcklkLAogCSAqLwogCWlmIChyYXdEZWZhdWx0cykKIAkJQWRkUmVsYXRp b25OZXdDb25zdHJhaW50cyhyZWwsIHJhd0RlZmF1bHRzLCBOSUwsCi0JCQkJCQkJCSAgdHJ1ZSwg dHJ1ZSwgZmFsc2UsIHF1ZXJ5U3RyaW5nKTsKKwkJCQkJCQkJICB0cnVlLCB0cnVlLCBmYWxzZSwg ZmFsc2UsIHF1ZXJ5U3RyaW5nKTsKIAogCS8qCiAJICogTWFrZSBjb2x1bW4gZ2VuZXJhdGlvbiBl eHByZXNzaW9ucyB2aXNpYmxlIGZvciB1c2UgYnkgcGFydGl0aW9uaW5nLgpAQCAtMTMwNiw3ICsx MzA5LDcgQEAgRGVmaW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3RtdCwgY2hhciByZWxraW5kLCBP aWQgb3duZXJJZCwKIAkgKi8KIAlpZiAoc3RtdC0+Y29uc3RyYWludHMpCiAJCUFkZFJlbGF0aW9u TmV3Q29uc3RyYWludHMocmVsLCBOSUwsIHN0bXQtPmNvbnN0cmFpbnRzLAotCQkJCQkJCQkgIHRy dWUsIHRydWUsIGZhbHNlLCBxdWVyeVN0cmluZyk7CisJCQkJCQkJCSAgdHJ1ZSwgdHJ1ZSwgZmFs c2UsIGZhbHNlLCBxdWVyeVN0cmluZyk7CiAKIAkvKgogCSAqIEZpbmFsbHksIG1lcmdlIHRoZSBu b3QtbnVsbCBjb25zdHJhaW50cyB0aGF0IGFyZSBkZWNsYXJlZCBkaXJlY3RseSB3aXRoCkBAIC02 MDcxLDYgKzYwNzQsNyBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIsIE9p ZCBPSUROZXdIZWFwKQogCVR1cGxlRGVzYwlvbGRUdXBEZXNjOwogCVR1cGxlRGVzYwluZXdUdXBE ZXNjOwogCWJvb2wJCW5lZWRzY2FuID0gZmFsc2U7CisJYm9vbAkJdmFsaWRhdGVkID0gdHJ1ZTsK IAlMaXN0CSAgICpub3RudWxsX2F0dHJzOwogCWludAkJCWk7CiAJTGlzdENlbGwgICAqbDsKQEAg LTYxMzIsNiArNjEzNiwxMCBAQCBBVFJld3JpdGVUYWJsZShBbHRlcmVkVGFibGVJbmZvICp0YWIs IE9pZCBPSUROZXdIZWFwKQogCQkJCW5lZWRzY2FuID0gdHJ1ZTsKIAkJCQljb24tPnF1YWxzdGF0 ZSA9IEV4ZWNQcmVwYXJlRXhwcigoRXhwciAqKSBjb24tPnF1YWwsIGVzdGF0ZSk7CiAJCQkJYnJl YWs7CisJCQljYXNlIENPTlNUUl9OT1ROVUxMOgorCQkJCWlmKGNvbi0+bm5fYXR0bnVtID09IC0x KQorCQkJCQl2YWxpZGF0ZWQgPSBmYWxzZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgQ09OU1RSX0ZP UkVJR046CiAJCQkJLyogTm90aGluZyB0byBkbyBoZXJlICovCiAJCQkJYnJlYWs7CkBAIC02MTcx LDcgKzYxNzksMTUgQEAgQVRSZXdyaXRlVGFibGUoQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBPaWQg T0lETmV3SGVhcCkKIAkJCWlmIChhdHRyLT5hdHRub3RudWxsICYmICFhdHRyLT5hdHRpc2Ryb3Bw ZWQpCiAJCQkJbm90bnVsbF9hdHRycyA9IGxhcHBlbmRfaW50KG5vdG51bGxfYXR0cnMsIGkpOwog CQl9Ci0JCWlmIChub3RudWxsX2F0dHJzKQorCisJCS8qCisJCSAqIHdlIG1heSBkaWQgc29tZSBw cmUtdmFsaWRhdGlvbiBhdCBwaGFzZSAyLiBpZiB2YWxpZGF0ZWQgaXMgdHJ1ZSwgdGhlbgorCQkg KiBhbGwgdGhlIG5vdC1udWxsIGNvbnN0cmFpbnRzIGZvciB0aGlzIERETCBoYXZlIGFscmVhZHkg YmVlbgorCQkgKiBwcmUtdmFsaWRhdGVkLCBubyBuZWVkIHRvIHNjYW4gaXQgYWdhaW4uICB0YWIt PmNvbnN0cmFpbnRzIGFscmVhZHkKKwkJICogaW5jbHVkZSBhbGwgQ09OU1RSX05PVE5VTEwgY29u c3RyYWludC4gU2VlIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMKKwkJICogYW5kIGluZGV4X2No ZWNrX25vdG51bGwuCisJCSovCisJCWlmIChub3RudWxsX2F0dHJzICYmICF2YWxpZGF0ZWQpCiAJ CQluZWVkc2NhbiA9IHRydWU7CiAJfQogCkBAIC03MzE3LDcgKzczMzMsNyBAQCBBVEV4ZWNBZGRD b2x1bW4oTGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWws CiAJCSAqIF9saXN0XyBvZiBkZWZhdWx0cywgYnV0IHdlIGp1c3QgZG8gb25lLgogCQkgKi8KIAkJ QWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhyZWwsIGxpc3RfbWFrZTEocmF3RW50KSwgTklMLAot CQkJCQkJCQkgIGZhbHNlLCB0cnVlLCBmYWxzZSwgTlVMTCk7CisJCQkJCQkJCSAgZmFsc2UsIHRy dWUsIGZhbHNlLCBmYWxzZSwgTlVMTCk7CiAKIAkJLyogTWFrZSB0aGUgYWRkaXRpb25hbCBjYXRh bG9nIGNoYW5nZXMgdmlzaWJsZSAqLwogCQlDb21tYW5kQ291bnRlckluY3JlbWVudCgpOwpAQCAt Nzc1OSw2ICs3Nzc1LDggQEAgQVRFeGVjU2V0Tm90TnVsbChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlv biByZWwsIGNoYXIgKmNvbk5hbWUsIGNoYXIgKmNvbE5hbWUsCiAJQ29va2VkQ29uc3RyYWludCAq Y2NvbjsKIAlMaXN0CSAgICpjb29rZWQ7CiAJYm9vbAkJaXNfbm9faW5oZXJpdCA9IGZhbHNlOwor CWJvb2wJCWluZGV4X3JlYnVpbGQgPSBmYWxzZTsKKwlBbHRlcmVkVGFibGVJbmZvICp0YWIgPSBO VUxMOwogCiAJLyogR3VhcmQgYWdhaW5zdCBzdGFjayBvdmVyZmxvdyBkdWUgdG8gb3Zlcmx5IGRl ZXAgaW5oZXJpdGFuY2UgdHJlZS4gKi8KIAljaGVja19zdGFja19kZXB0aCgpOwpAQCAtNzg3NCwx MCArNzg5Miw0NSBAQCBBVEV4ZWNTZXROb3ROdWxsKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJl bCwgY2hhciAqY29uTmFtZSwgY2hhciAqY29sTmFtZSwKIAljb25zdHJhaW50LT5pc19ub19pbmhl cml0ID0gaXNfbm9faW5oZXJpdDsKIAljb25zdHJhaW50LT5jb25uYW1lID0gY29uTmFtZTsKIAor CS8qCisJICogZm9yIEFMVEVSIFRBQkxFIEFMVEVSIENPTFVNTiBTRVQgRVhQUkVTU0lPTiwgZnVu Y3Rpb24KKwkgKiBSZW1lbWJlckluZGV4Rm9yUmVidWlsZGluZyBjYW4gb25seSByZW1lbWJlciB0 aGUgcGFydGl0aW9uZWQgaW5kZXggZW50cnkKKwkgKiAoUkVMS0lORF9QQVJUSVRJT05FRF9JTkRF WCksIG5vdCB0aGUgcmVndWxhciBpbmRleC4KKwkgKiBzbyB3ZSBjYW4gbm90IHVzZSBpbmRleF9j aGVja19ub3RudWxsIHRvIGZhc3QgY2hlY2sgdGhlIGNvbHVtbiBub3QtbnVsbAorCSAqIHN0YXR1 cyBmb3IgdGhlIHBhcnRpdGlvbmVkIHRhYmxlIG5vdy4KKwkgKiB0aGF0IGlzIHdoeSBpZiByZWN1 cnNpbmcgaXMgdHJ1ZSwgd2UgYmxpbmRseSBhc3N1bWUgaW5kZXhfcmVidWlsZCBpcworCSAqIHRy dWUuICBpbiBmdXR1cmUsIHdlIGNhbiBpdGVyYXRlIGNoYW5nZWRJbmRleE9pZHMsIGZpbmQgb3V0 IGlmIHRoZXJlIGlzCisJICogYW55IGluZGV4IHJlYnVpbGQgb3ZlciB0aGF0IG5vdC1udWxsIGNv bHVtbiBvciBub3QuCisJICovCisJdGFiID0gQVRHZXRRdWV1ZUVudHJ5KHdxdWV1ZSwgcmVsKTsK KwlpZiAobGlzdF9sZW5ndGgodGFiLT5jaGFuZ2VkSW5kZXhPaWRzKSA+IDAgfHwgcmVjdXJzaW5n KQorCQlpbmRleF9yZWJ1aWxkID0gdHJ1ZTsKKwogCS8qIGFuZCBkbyBpdCAqLwogCWNvb2tlZCA9 IEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMocmVsLCBOSUwsIGxpc3RfbWFrZTEoY29uc3RyYWlu dCksCi0JCQkJCQkJCQkgICBmYWxzZSwgIXJlY3Vyc2luZywgZmFsc2UsIE5VTEwpOworCQkJCQkJ CQkJICAgZmFsc2UsICFyZWN1cnNpbmcsIGZhbHNlLCBpbmRleF9yZWJ1aWxkLCBOVUxMKTsKIAlj Y29uID0gbGluaXRpYWwoY29va2VkKTsKKworCWlmICghY2Nvbi0+c2tpcF92YWxpZGF0aW9uKQor CXsKKwkJTmV3Q29uc3RyYWludCAqbmV3Y29uOworCisJCW5ld2NvbiA9IChOZXdDb25zdHJhaW50 ICopIHBhbGxvYzAoc2l6ZW9mKE5ld0NvbnN0cmFpbnQpKTsKKwkJbmV3Y29uLT5uYW1lID0gY2Nv bi0+bmFtZTsKKworCQlBc3NlcnQoY2Nvbi0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCk7CisJ CW5ld2Nvbi0+Y29udHlwZSA9IGNjb24tPmNvbnR5cGU7CisJCWlmIChjY29uLT52YWxpZGF0ZWQp CisJCXsKKwkJCW5ld2Nvbi0+bm5fYXR0bnVtID0gY2Nvbi0+YXR0bnVtOworCQkJQXNzZXJ0KGNj b24tPmF0dG51bSA+IDApOworCQl9CisJCWVsc2UKKwkJCW5ld2Nvbi0+bm5fYXR0bnVtID0gLTE7 CisKKwkJdGFiLT5jb25zdHJhaW50cyA9IGxhcHBlbmQodGFiLT5jb25zdHJhaW50cywgbmV3Y29u KTsKKwl9CisKIAlPYmplY3RBZGRyZXNzU2V0KGFkZHJlc3MsIENvbnN0cmFpbnRSZWxhdGlvbklk LCBjY29uLT5jb25vaWQpOwogCiAJSW52b2tlT2JqZWN0UG9zdEFsdGVySG9vayhSZWxhdGlvblJl bGF0aW9uSWQsCkBAIC04MDI1LDcgKzgwNzgsNyBAQCBBVEV4ZWNDb2x1bW5EZWZhdWx0KFJlbGF0 aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAkJICogX2xpc3RfIG9mIGRlZmF1bHRzLCBi dXQgd2UganVzdCBkbyBvbmUuCiAJCSAqLwogCQlBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJl bCwgbGlzdF9tYWtlMShyYXdFbnQpLCBOSUwsCi0JCQkJCQkJCSAgZmFsc2UsIHRydWUsIGZhbHNl LCBOVUxMKTsKKwkJCQkJCQkJICBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBOVUxMKTsKIAl9 CiAKIAlPYmplY3RBZGRyZXNzU3ViU2V0KGFkZHJlc3MsIFJlbGF0aW9uUmVsYXRpb25JZCwKQEAg LTg0ODcsNyArODU0MCw3IEBAIEFURXhlY1NldEV4cHJlc3Npb24oQWx0ZXJlZFRhYmxlSW5mbyAq dGFiLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAKIAkvKiBTdG9yZSB0aGUg Z2VuZXJhdGVkIGV4cHJlc3Npb24gKi8KIAlBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJlbCwg bGlzdF9tYWtlMShyYXdFbnQpLCBOSUwsCi0JCQkJCQkJICBmYWxzZSwgdHJ1ZSwgZmFsc2UsIE5V TEwpOworCQkJCQkJCSAgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBN YWtlIGFib3ZlIG5ldyBleHByZXNzaW9uIHZpc2libGUgKi8KIAlDb21tYW5kQ291bnRlckluY3Jl bWVudCgpOwpAQCAtOTU5MSw2ICs5NjQ0LDEwIEBAIEFUQWRkQ2hlY2tOTkNvbnN0cmFpbnQoTGlz dCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAJTGlzdAkg ICAqY2hpbGRyZW47CiAJTGlzdENlbGwgICAqY2hpbGQ7CiAJT2JqZWN0QWRkcmVzcyBhZGRyZXNz ID0gSW52YWxpZE9iamVjdEFkZHJlc3M7CisJYm9vbAkJaW5kZXhfcmVidWlsZCA9IGZhbHNlOwor CisJaWYgKGxpc3RfbGVuZ3RoKHRhYi0+Y2hhbmdlZEluZGV4T2lkcykgPiAwIHx8IHJlY3Vyc2lu ZykKKwkJaW5kZXhfcmVidWlsZCA9IHRydWU7CiAKIAkvKiBHdWFyZCBhZ2FpbnN0IHN0YWNrIG92 ZXJmbG93IGR1ZSB0byBvdmVybHkgZGVlcCBpbmhlcml0YW5jZSB0cmVlLiAqLwogCWNoZWNrX3N0 YWNrX2RlcHRoKCk7CkBAIC05NjE1LDYgKzk2NzIsNyBAQCBBVEFkZENoZWNrTk5Db25zdHJhaW50 KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCQkJ CQkJCQkJCXJlY3Vyc2luZyB8fCBpc19yZWFkZCwJLyogYWxsb3dfbWVyZ2UgKi8KIAkJCQkJCQkJ CQkhcmVjdXJzaW5nLCAvKiBpc19sb2NhbCAqLwogCQkJCQkJCQkJCWlzX3JlYWRkLAkvKiBpc19p bnRlcm5hbCAqLworCQkJCQkJCQkJCWluZGV4X3JlYnVpbGQsCiAJCQkJCQkJCQkJTlVMTCk7CS8q IHF1ZXJ5U3RyaW5nIG5vdCBhdmFpbGFibGUKIAkJCQkJCQkJCQkJCSAqIGhlcmUgKi8KIApAQCAt OTYyNiwxNSArOTY4NCwxOSBAQCBBVEFkZENoZWNrTk5Db25zdHJhaW50KExpc3QgKip3cXVldWUs IEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogCXsKIAkJQ29va2VkQ29uc3Ry YWludCAqY2NvbiA9IChDb29rZWRDb25zdHJhaW50ICopIGxmaXJzdChsY29uKTsKIAotCQlpZiAo IWNjb24tPnNraXBfdmFsaWRhdGlvbiAmJiBjY29uLT5jb250eXBlICE9IENPTlNUUl9OT1ROVUxM KQorCQlpZiAoIWNjb24tPnNraXBfdmFsaWRhdGlvbikKIAkJewogCQkJTmV3Q29uc3RyYWludCAq bmV3Y29uOwogCiAJCQluZXdjb24gPSAoTmV3Q29uc3RyYWludCAqKSBwYWxsb2MwKHNpemVvZihO ZXdDb25zdHJhaW50KSk7CiAJCQluZXdjb24tPm5hbWUgPSBjY29uLT5uYW1lOwogCQkJbmV3Y29u LT5jb250eXBlID0gY2Nvbi0+Y29udHlwZTsKKwkJCWlmIChjY29uLT52YWxpZGF0ZWQgJiYgY2Nv bi0+Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJCQluZXdjb24tPm5uX2F0dG51bSA9IGNj b24tPmF0dG51bTsKKwkJCWVsc2UKKwkJCQluZXdjb24tPm5uX2F0dG51bSA9IC0xOworCiAJCQlu ZXdjb24tPnF1YWwgPSBjY29uLT5leHByOwotCiAJCQl0YWItPmNvbnN0cmFpbnRzID0gbGFwcGVu ZCh0YWItPmNvbnN0cmFpbnRzLCBuZXdjb24pOwogCQl9CiAKQEAgLTEwNzMyLDYgKzEwNzk0LDcg QEAgYWRkRmtSZWN1cnNlUmVmZXJlbmNpbmcoTGlzdCAqKndxdWV1ZSwgQ29uc3RyYWludCAqZmtj b25zdHJhaW50LCBSZWxhdGlvbiByZWwsCiAJCQluZXdjb24tPnJlZmluZGlkID0gaW5kZXhPaWQ7 CiAJCQluZXdjb24tPmNvbmlkID0gcGFyZW50Q29uc3RyOwogCQkJbmV3Y29uLT5jb253aXRocGVy aW9kID0gZmtjb25zdHJhaW50LT5ma193aXRoX3BlcmlvZDsKKwkJCW5ld2Nvbi0+bm5fYXR0bnVt ID0gLTE7CiAJCQluZXdjb24tPnF1YWwgPSAoTm9kZSAqKSBma2NvbnN0cmFpbnQ7CiAKIAkJCXRh Yi0+Y29uc3RyYWludHMgPSBsYXBwZW5kKHRhYi0+Y29uc3RyYWludHMsIG5ld2Nvbik7CkBAIC0x MjE0Niw2ICsxMjIwOSw3IEBAIFF1ZXVlRktDb25zdHJhaW50VmFsaWRhdGlvbihMaXN0ICoqd3F1 ZXVlLCBSZWxhdGlvbiBjb25yZWwsIFJlbGF0aW9uIHJlbCwKIAkJbmV3Y29uLT5yZWZyZWxpZCA9 IGNvbi0+Y29uZnJlbGlkOwogCQluZXdjb24tPnJlZmluZGlkID0gY29uLT5jb25pbmRpZDsKIAkJ bmV3Y29uLT5jb25pZCA9IGNvbi0+b2lkOworCQluZXdjb24tPm5uX2F0dG51bSA9IC0xOwogCQlu ZXdjb24tPnF1YWwgPSAoTm9kZSAqKSBma2NvbnN0cmFpbnQ7CiAKIAkJLyogRmluZCBvciBjcmVh dGUgd29yayBxdWV1ZSBlbnRyeSBmb3IgdGhpcyB0YWJsZSAqLwpAQCAtMTIyODUsNiArMTIzNDks NyBAQCBRdWV1ZUNoZWNrQ29uc3RyYWludFZhbGlkYXRpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRp b24gY29ucmVsLCBSZWxhdGlvbiByZWwsCiAJbmV3Y29uLT5yZWZyZWxpZCA9IEludmFsaWRPaWQ7 CiAJbmV3Y29uLT5yZWZpbmRpZCA9IEludmFsaWRPaWQ7CiAJbmV3Y29uLT5jb25pZCA9IGNvbi0+ b2lkOworCW5ld2Nvbi0+bm5fYXR0bnVtID0gLTE7CiAKIAl2YWwgPSBTeXNDYWNoZUdldEF0dHJO b3ROdWxsKENPTlNUUk9JRCwgY29udHVwbGUsCiAJCQkJCQkJCSBBbnVtX3BnX2NvbnN0cmFpbnRf Y29uYmluKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXggN2M4N2YwMTJjMy4u YmNlZjI2ZjNjYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5n LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTEwOCw2ICsx MDgsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Jl bHNjYW4uaCIKKyNpbmNsdWRlICJhY2Nlc3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdGFi bGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9pbmRl eC5oIgpAQCAtMTE2NiwzICsxMTY3LDk5IEBAIEV4ZWNXaXRob3V0T3ZlcmxhcHNOb3RFbXB0eShS ZWxhdGlvbiByZWwsIE5hbWVEYXRhIGF0dG5hbWUsIERhdHVtIGF0dHZhbCwgY2hhciB0CiAJCQkJ IGVycm1zZygiZW1wdHkgV0lUSE9VVCBPVkVSTEFQUyB2YWx1ZSBmb3VuZCBpbiBjb2x1bW4gXCIl c1wiIGluIHJlbGF0aW9uIFwiJXNcIiIsCiAJCQkJCQlOYW1lU3RyKGF0dG5hbWUpLCBSZWxhdGlv bkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwogfQorCisvKgorICogY29sbnVtIGlzIHRoZSBhdHRu dW0gd2hlcmUgbm90LW51bGwgY29uc3RyYWludCB3aWxsIGJlIGNyZWF0ZWQgb24uCisqLworYm9v bAoraW5kZXhfY2hlY2tfbm90bnVsbChPaWQgdGFibGVfb2lkLCBPaWQgaW5kZXhvaWQsIEF0dHJO dW1iZXIgY29sbnVtKQoreworCVJlbGF0aW9uIGluZGV4OworCVJlbGF0aW9uIGhlYXA7CisKKwlT bmFwc2hvdERhdGEgRGlydHlTbmFwc2hvdDsKKwlJbmRleFNjYW5EZXNjIGluZGV4X3NjYW47CisJ U2NhbktleURhdGEgc2NhbmtleXNbSU5ERVhfTUFYX0tFWVNdOworCVR1cGxlVGFibGVTbG90ICpl eGlzdGluZ19zbG90OworCUluZGV4SW5mbyAgKmluZGV4SW5mbzsKKwlFU3RhdGUJICAgKmVzdGF0 ZTsKKwlpbnQJCQlpbmRua2V5YXR0czsKKwlFeHByQ29udGV4dCAqZWNvbnRleHQ7CisJYm9vbCBh bGxfbm90X251bGwgPSB0cnVlOworCUF0dHJOdW1iZXIJc2tfYXR0bm8gPSAtMTsKKworCWhlYXAg PSB0YWJsZV9vcGVuKHRhYmxlX29pZCwgTm9Mb2NrKTsKKwlpbmRleCA9IGluZGV4X29wZW4oaW5k ZXhvaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIE5lZWQgYW4gRVN0YXRlIGZvciBz bG90IHRvIGhvbGQgdGhlIGN1cnJlbnQgdHVwbGUuCisJICoKKwkgKi8KKwllc3RhdGUgPSBDcmVh dGVFeGVjdXRvclN0YXRlKCk7CisJZWNvbnRleHQgPSBHZXRQZXJUdXBsZUV4cHJDb250ZXh0KGVz dGF0ZSk7CisJZXhpc3Rpbmdfc2xvdCA9IHRhYmxlX3Nsb3RfY3JlYXRlKGhlYXAsIE5VTEwpOwor CisJLyogQXJyYW5nZSBmb3IgZWNvbnRleHQncyBzY2FuIHR1cGxlIHRvIGJlIHRoZSB0dXBsZSB1 bmRlciB0ZXN0ICovCisJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gZXhpc3Rpbmdfc2xvdDsK KworCWluZGV4SW5mbyA9IEJ1aWxkSW5kZXhJbmZvKGluZGV4KTsKKwlpbmRua2V5YXR0cyA9IElu ZGV4UmVsYXRpb25HZXROdW1iZXJPZktleUF0dHJpYnV0ZXMoaW5kZXgpOworCisJLyoKKwkgKiBT ZWFyY2ggdGhlIHR1cGxlcyB0aGF0IGFyZSBpbiB0aGUgaW5kZXggZm9yIGFueSB2aW9sYXRpb25z LCBpbmNsdWRpbmcKKwkgKiB0dXBsZXMgdGhhdCBhcmVuJ3QgdmlzaWJsZSB5ZXQuCisJICovCisJ SW5pdERpcnR5U25hcHNob3QoRGlydHlTbmFwc2hvdCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IGluZG5rZXlhdHRzOyBpKyspCisJeworCQlpZiAoaW5kZXhJbmZvLT5paV9JbmRleEF0dHJOdW1i ZXJzW2ldID09IGNvbG51bSkKKwkJeworCQkJc2tfYXR0bm8gPSBpKzE7CisJCQlicmVhazsKKwkJ fQorCX0KKworCWlmIChza19hdHRubyA9PSAtMSkKKwkJZWxvZyhFUlJPUiwgImluZGV4ICV1IHNo b3VsZCBlZmZlY3Qgb24gY29sdW1uIG51bWJlciAlZCIsIGluZGV4b2lkLCBjb2xudW0pOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBpbmRua2V5YXR0czsgaSsrKQorCXsKKwkJLyogc2V0IHVwIGFu IElTIE5VTEwgc2NhbiBrZXkgc28gdGhhdCB3ZSBpZ25vcmUgbm90IG51bGxzICovCisJCVNjYW5L ZXlFbnRyeUluaXRpYWxpemUoJnNjYW5rZXlzW2ldLAorCQkJCQkJCQlTS19JU05VTEwgfCBTS19T RUFSQ0hOVUxMLAorCQkJCQkJCQlza19hdHRubywJCS8qIGluZGV4IGNvbCB0byBzY2FuICovCisJ CQkJCQkJCUludmFsaWRTdHJhdGVneSwvKiBubyBzdHJhdGVneSAqLworCQkJCQkJCQlJbnZhbGlk T2lkLAkJLyogbm8gc3RyYXRlZ3kgc3VidHlwZSAqLworCQkJCQkJCQlJbnZhbGlkT2lkLAkJLyog bm8gY29sbGF0aW9uICovCisJCQkJCQkJCUludmFsaWRPaWQsCQkvKiBubyByZWcgcHJvYyBmb3Ig dGhpcyAqLworCQkJCQkJCQkoRGF0dW0pIDApOwkJLyogY29uc3RhbnQgKi8KKwl9CisKKwlpbmRl eF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXAsIGluZGV4LCAmRGlydHlTbmFwc2hvdCwgaW5k bmtleWF0dHMsIDApOworCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtl eWF0dHMsIE5VTEwsIDApOworCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhfc2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24sIGV4aXN0aW5nX3Nsb3QpKQorCXsKKwkJRGF0dW0JCXZhbHVl c1tJTkRFWF9NQVhfS0VZU107CisJCWJvb2wJCW51bGxzW0lOREVYX01BWF9LRVlTXTsKKworCQkv KgorCQkgKiBFeHRyYWN0IHRoZSBpbmRleCBjb2x1bW4gdmFsdWVzIGFuZCBpc251bGwgZmxhZ3Mg ZnJvbSB0aGUgZXhpc3RpbmcKKwkJICogdHVwbGUuCisJCSAqLworCQlGb3JtSW5kZXhEYXR1bShp bmRleEluZm8sIGV4aXN0aW5nX3Nsb3QsIGVzdGF0ZSwgdmFsdWVzLCBudWxscyk7CisKKwkJaWYg KG51bGxzW3NrX2F0dG5vIC0gMV0pCisJCXsKKwkJCWFsbF9ub3RfbnVsbCA9IGZhbHNlOworCQkJ YnJlYWs7CisJCX0KKwl9CisJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKKwl0YWJsZV9jbG9z ZShoZWFwLCBOb0xvY2spOworCWluZGV4X2Nsb3NlKGluZGV4LCBBY2Nlc3NTaGFyZUxvY2spOwor CUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3QoZXhpc3Rpbmdfc2xvdCk7CisJRnJlZUV4ZWN1 dG9yU3RhdGUoZXN0YXRlKTsKKworCXJldHVybiBhbGxfbm90X251bGw7Cit9ClwgTm8gbmV3bGlu ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9oZWFwLmgg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAuaAppbmRleCBjYWQ4MzBkYzM5Li5iYmI3NTgyMGM1 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2hlYXAuaAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL2hlYXAuaApAQCAtNDYsNiArNDYsOCBAQCB0eXBlZGVmIHN0cnVjdCBDb29rZWRD b25zdHJhaW50CiAJaW50MTYJCWluaGNvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIGNvbnN0cmFp bnQgaXMgaW5oZXJpdGVkICovCiAJYm9vbAkJaXNfbm9faW5oZXJpdDsJLyogY29uc3RyYWludCBo YXMgbG9jYWwgZGVmIGFuZCBjYW5ub3QgYmUKIAkJCQkJCQkJICogaW5oZXJpdGVkICovCisJYm9v bAkJdmFsaWRhdGVkOyAgCS8qIGlzIHRoaXMgY29uc3RyYWludCBhbHJlYWR5IHZhbGlkYXRlZD8K KwkJCQkJCQkJICogb25seSBmb3IgQ09OU1RSX05PVE5VTEwgaW4gQWRkUmVsYXRpb25OZXdDb25z dHJhaW50cyAqLwogfSBDb29rZWRDb25zdHJhaW50OwogCiBleHRlcm4gUmVsYXRpb24gaGVhcF9j cmVhdGUoY29uc3QgY2hhciAqcmVsbmFtZSwKQEAgLTExNCw2ICsxMTYsNyBAQCBleHRlcm4gTGlz dCAqQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQkgICBi b29sIGFsbG93X21lcmdlLAogCQkJCQkJCQkJICAgYm9vbCBpc19sb2NhbCwKIAkJCQkJCQkJCSAg IGJvb2wgaXNfaW50ZXJuYWwsCisJCQkJCQkJCQkgICBib29sIGluZGV4X3JlYnVpbGQsCiAJCQkJ CQkJCQkgICBjb25zdCBjaGFyICpxdWVyeVN0cmluZyk7CiBleHRlcm4gTGlzdCAqQWRkUmVsYXRp b25Ob3ROdWxsQ29uc3RyYWludHMoUmVsYXRpb24gcmVsLAogCQkJCQkJCQkJCSAgIExpc3QgKmNv bnN0cmFpbnRzLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaCBi L3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmgKaW5kZXggNDViODBlNmI5OC4uZDRmMTQz YzVhYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9z cmMvaW5jbHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC02NjEsNiArNjYxLDcgQEAgZXh0ZXJu IHZvaWQgY2hlY2tfZXhjbHVzaW9uX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwgUmVsYXRpb24g aW5kZXgsCiAJCQkJCQkJCQkgICBjb25zdCBEYXR1bSAqdmFsdWVzLCBjb25zdCBib29sICppc251 bGwsCiAJCQkJCQkJCQkgICBFU3RhdGUgKmVzdGF0ZSwgYm9vbCBuZXdJbmRleCk7CiAKK2V4dGVy biBib29sIGluZGV4X2NoZWNrX25vdG51bGwoT2lkIGhlYXAsIE9pZCBpbmRleG9pZCwgQXR0ck51 bWJlciBjb2xudW0pOwogLyoKICAqIHByb3RvdHlwZXMgZnJvbSBmdW5jdGlvbnMgaW4gZXhlY1Jl cGxpY2F0aW9uLmMKICAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVk L2Zhc3Qtc2V0LW5vdG51bGwub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2Zhc3Qt c2V0LW5vdG51bGwub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjM2 YWMxNGEyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vZXhwZWN0ZWQv ZmFzdC1zZXQtbm90bnVsbC5vdXQKQEAgLTAsMCArMSw5NyBAQAorUGFyc2VkIHRlc3Qgc3BlYyB3 aXRoIDIgc2Vzc2lvbnMKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGIxIGIzIG0xIGhqIGMxIGMz IHMyCitzdGVwIGIxOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3Rl cCBiMzogQkVHSU4gSVNPTEFUSU9OIExFVkVMIFJFUEVBVEFCTEUgUkVBRDsKK3N0ZXAgbTE6IERF TEVURSBGUk9NIHQ7CitzdGVwIGhqOiBBTFRFUiBUQUJMRSB0IEFERCBDT05TVFJBSU5UIHQxX25u IE5PVCBOVUxMIGE7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgYzE6IENPTU1JVDsKK3N0ZXAgaGo6IDwu Li4gY29tcGxldGVkPgorc3RlcCBjMzogQ09NTUlUOworc3RlcCBzMjogU0VMRUNUIGNvbm5hbWUs IGNvbnJlbGlkOjpyZWdjbGFzcywgY29udHlwZSwgY29udmFsaWRhdGVkCisgICAgICAgICAgIEZS T00gcGdfY29uc3RyYWludCBXSEVSRSBjb25uYW1lID0gJ3QxX25uJzsKKworY29ubmFtZXxjb25y ZWxpZHxjb250eXBlfGNvbnZhbGlkYXRlZAorLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLQordDFfbm4gIHx0ICAgICAgIHxuICAgICAgfHQgICAgICAgICAgIAorKDEgcm93KQor CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMiBiMyBtMSBoaiBjMSBjMyBzMgorc3RlcCBiMjog QkVHSU47CitzdGVwIGIzOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOwor c3RlcCBtMTogREVMRVRFIEZST00gdDsKK3N0ZXAgaGo6IEFMVEVSIFRBQkxFIHQgQUREIENPTlNU UkFJTlQgdDFfbm4gTk9UIE5VTEwgYTsgPHdhaXRpbmcgLi4uPgorc3RlcCBjMTogQ09NTUlUOwor c3RlcCBoajogPC4uLiBjb21wbGV0ZWQ+CitzdGVwIGMzOiBDT01NSVQ7CitzdGVwIHMyOiBTRUxF Q1QgY29ubmFtZSwgY29ucmVsaWQ6OnJlZ2NsYXNzLCBjb250eXBlLCBjb252YWxpZGF0ZWQKKyAg ICAgICAgICAgRlJPTSBwZ19jb25zdHJhaW50IFdIRVJFIGNvbm5hbWUgPSAndDFfbm4nOworCitj b25uYW1lfGNvbnJlbGlkfGNvbnR5cGV8Y29udmFsaWRhdGVkCistLS0tLS0tKy0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0tLS0tCit0MV9ubiAgfHQgICAgICAgfG4gICAgICB8dCAgICAgICAgICAg CisoMSByb3cpCisKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGIxIGI0IG0xIGhqIGMxIGMzIHMy CitzdGVwIGIxOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBi NDogQkVHSU47CitzdGVwIG0xOiBERUxFVEUgRlJPTSB0Oworc3RlcCBoajogQUxURVIgVEFCTEUg dCBBREQgQ09OU1RSQUlOVCB0MV9ubiBOT1QgTlVMTCBhOyA8d2FpdGluZyAuLi4+CitzdGVwIGMx OiBDT01NSVQ7CitzdGVwIGhqOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgYzM6IENPTU1JVDsKK3N0 ZXAgczI6IFNFTEVDVCBjb25uYW1lLCBjb25yZWxpZDo6cmVnY2xhc3MsIGNvbnR5cGUsIGNvbnZh bGlkYXRlZAorICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFpbnQgV0hFUkUgY29ubmFtZSA9ICd0 MV9ubic7CisKK2Nvbm5hbWV8Y29ucmVsaWR8Y29udHlwZXxjb252YWxpZGF0ZWQKKy0tLS0tLS0r LS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0KK3QxX25uICB8dCAgICAgICB8biAgICAgIHx0 ICAgICAgICAgICAKKygxIHJvdykKKworCitzdGFydGluZyBwZXJtdXRhdGlvbjogYjEgYjMgaGog cjEgYzIKK3N0ZXAgYjE6IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7Citz dGVwIGIzOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBoajog QUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0MV9ubiBOT1QgTlVMTCBhOworRVJST1I6ICBj b2x1bW4gImEiIG9mIHJlbGF0aW9uICJ0IiBjb250YWlucyBudWxsIHZhbHVlcworc3RlcCByMTog Uk9MTEJBQ0s7CitzdGVwIGMyOiBST0xMQkFDSzsKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGIx IGI0IGQxIG0xIGMyIHMxIHMyIHIxCitzdGVwIGIxOiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQ RUFUQUJMRSBSRUFEOworc3RlcCBiNDogQkVHSU47CitzdGVwIGQxOiBEUk9QIElOREVYIHRfYWJf aWR4Oworc3RlcCBtMTogREVMRVRFIEZST00gdDsgPHdhaXRpbmcgLi4uPgorc3RlcCBjMjogUk9M TEJBQ0s7CitzdGVwIG0xOiA8Li4uIGNvbXBsZXRlZD4KK3N0ZXAgczE6IEFMVEVSIFRBQkxFIHQg QUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5VTEwgYTsKK3N0ZXAgczI6IFNFTEVDVCBjb25uYW1l LCBjb25yZWxpZDo6cmVnY2xhc3MsIGNvbnR5cGUsIGNvbnZhbGlkYXRlZAorICAgICAgICAgICBG Uk9NIHBnX2NvbnN0cmFpbnQgV0hFUkUgY29ubmFtZSA9ICd0MV9ubic7CisKK2Nvbm5hbWV8Y29u cmVsaWR8Y29udHlwZXxjb252YWxpZGF0ZWQKKy0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0KK3QxX25uICB8dCAgICAgICB8biAgICAgIHx0ICAgICAgICAgICAKKygxIHJvdykK Kworc3RlcCByMTogUk9MTEJBQ0s7CisKK3N0YXJ0aW5nIHBlcm11dGF0aW9uOiBiMiBiMyBtMSBk MSBzMCBzMSBjMSBjMyBzMgorc3RlcCBiMjogQkVHSU47CitzdGVwIGIzOiBCRUdJTiBJU09MQVRJ T04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOworc3RlcCBtMTogREVMRVRFIEZST00gdDsKK3N0ZXAg ZDE6IERST1AgSU5ERVggdF9hYl9pZHg7IDx3YWl0aW5nIC4uLj4KK3N0ZXAgczA6IHNhdmVwb2lu dCBzMDsKK3N0ZXAgczE6IEFMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4gTk9UIE5V TEwgYTsKK3N0ZXAgYzE6IENPTU1JVDsKK3N0ZXAgZDE6IDwuLi4gY29tcGxldGVkPgorc3RlcCBj MzogQ09NTUlUOworc3RlcCBzMjogU0VMRUNUIGNvbm5hbWUsIGNvbnJlbGlkOjpyZWdjbGFzcywg Y29udHlwZSwgY29udmFsaWRhdGVkCisgICAgICAgICAgIEZST00gcGdfY29uc3RyYWludCBXSEVS RSBjb25uYW1lID0gJ3QxX25uJzsKKworY29ubmFtZXxjb25yZWxpZHxjb250eXBlfGNvbnZhbGlk YXRlZAorLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQordDFfbm4gIHx0ICAg ICAgIHxuICAgICAgfHQgICAgICAgICAgIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2lzb2xh dGlvbl9zY2hlZHVsZQppbmRleCAxNDMxMDlhYTRkLi4zMmQ3ZTUxYWE5IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9pc29sYXRpb24vaXNvbGF0aW9uX3NjaGVkdWxlCisrKyBiL3NyYy90ZXN0L2lzb2xh dGlvbi9pc29sYXRpb25fc2NoZWR1bGUKQEAgLTU1LDYgKzU1LDcgQEAgdGVzdDogbWVyZ2UtZGVs ZXRlCiB0ZXN0OiBtZXJnZS11cGRhdGUKIHRlc3Q6IG1lcmdlLW1hdGNoLXJlY2hlY2sKIHRlc3Q6 IG1lcmdlLWpvaW4KK3Rlc3Q6IGZhc3Qtc2V0LW5vdG51bGwKIHRlc3Q6IGRlbGV0ZS1hYm9ydC1z YXZlcHQKIHRlc3Q6IGRlbGV0ZS1hYm9ydC1zYXZlcHQtMgogdGVzdDogYWJvcnRlZC1rZXlyZXZv a2UKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9mYXN0LXNldC1ub3RudWxs LnNwZWMgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmFzdC1zZXQtbm90bnVsbC5zcGVjCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmE3ZTcxYjMxZTgKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvZmFzdC1zZXQtbm90bnVsbC5zcGVj CkBAIC0wLDAgKzEsNDMgQEAKKyMKKyMgZmFzdCBub3QtbnVsbCB0ZXN0cworIworCitzZXR1cAor eworICBDUkVBVEUgVEFCTEUgdCAoYSBpbnQsIGIgaW50KTsKKyAgQ1JFQVRFIElOREVYIHRfYWJf aWR4IG9uIHQoYSxiKTsKKyAgSU5TRVJUIElOVE8gdCB2YWx1ZXMgKG51bGwsIDEpOworICBJTlNF UlQgSU5UTyB0IFNFTEVDVCB4LCB4KjEwIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMykgZyh4KTsK K30KKwordGVhcmRvd24KK3sKKyAgRFJPUCBUQUJMRSB0OworfQorCitzZXNzaW9uIHMxCitzdGVw IGIxICB7IEJFR0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7IH0KK3N0ZXAgYjIg IHsgQkVHSU47IH0KK3N0ZXAgbTEgIHsgREVMRVRFIEZST00gdDt9CitzdGVwIHMwICB7IHNhdmVw b2ludCBzMDt9CitzdGVwIHMxICB7IEFMVEVSIFRBQkxFIHQgQUREIENPTlNUUkFJTlQgdDFfbm4g Tk9UIE5VTEwgYTt9CitzdGVwIHMyICB7IFNFTEVDVCBjb25uYW1lLCBjb25yZWxpZDo6cmVnY2xh c3MsIGNvbnR5cGUsIGNvbnZhbGlkYXRlZAorICAgICAgICAgICBGUk9NIHBnX2NvbnN0cmFpbnQg V0hFUkUgY29ubmFtZSA9ICd0MV9ubic7CisgICAgICAgICB9CitzdGVwIHIxICB7IFJPTExCQUNL OyB9CitzdGVwIGMxICB7IENPTU1JVDsgfQorCitzZXNzaW9uIHMyCitzdGVwIGIzICB7IEJFR0lO IElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7IH0KK3N0ZXAgYjQgIHsgQkVHSU47IH0K K3N0ZXAgaGogIHsgQUxURVIgVEFCTEUgdCBBREQgQ09OU1RSQUlOVCB0MV9ubiBOT1QgTlVMTCBh O30KK3N0ZXAgZDEgIHsgRFJPUCBJTkRFWCB0X2FiX2lkeDt9CitzdGVwIGMyICB7IFJPTExCQUNL OyB9CitzdGVwIGMzICB7IENPTU1JVDsgfQorCitwZXJtdXRhdGlvbiBiMSBiMyBtMSBoaiBjMSBj MyBzMgorcGVybXV0YXRpb24gYjIgYjMgbTEgaGogYzEgYzMgczIKK3Blcm11dGF0aW9uIGIxIGI0 IG0xIGhqIGMxIGMzIHMyCitwZXJtdXRhdGlvbiBiMSBiMyBoaiByMSBjMgorcGVybXV0YXRpb24g YjEgYjQgZDEgbTEgYzIgczEgczIgcjEKK3Blcm11dGF0aW9uIGIyIGIzIG0xIGQxIHMwIHMxIGMx IGMzIHMyCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2FsdGVyX3RhYmxl Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJfdGFibGUub3V0CmluZGV4IDM2 MmYzODg1NmQuLjM4ZTI0N2E3ZDQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvYWx0ZXJfdGFibGUub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvYWx0ZXJf dGFibGUub3V0CkBAIC00NzYyLDMgKzQ3NjIsNDQgQEAgZHJvcCBwdWJsaWNhdGlvbiBwdWIxOwog ZHJvcCBzY2hlbWEgYWx0ZXIxIGNhc2NhZGU7CiBkcm9wIHNjaGVtYSBhbHRlcjIgY2FzY2FkZTsK IE5PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgYWx0ZXIyLnQxCistLS0tLWZhc3QgYWRk IG5vdC1udWxsIGNvbnN0cmFpbnQgdGVzdHMuCitDUkVBVEUgVEFCTEUgdHAgKGEgaW50LCBiIGlu dCBHRU5FUkFURUQgQUxXQVlTIEFTICgyMikgc3RvcmVkKSBQQVJUSVRJT04gQlkgcmFuZ2UoYSk7 CitDUkVBVEUgVEFCTEUgdHBwMShhIGludCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSsx KSBzdG9yZWQpOworQ1JFQVRFIFRBQkxFIHRwcDIoYSBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdB WVMgQVMgKGErMTApIHN0b3JlZCk7CitBTFRFUiBUQUJMRSB0cCBBVFRBQ0ggUEFSVElUSU9OIHRw cDEgRk9SIHZhbHVlcyBmcm9tICggMSApIHRvICgxMDApOworQUxURVIgVEFCTEUgdHAgQVRUQUNI IFBBUlRJVElPTiB0cHAyIGRlZmF1bHQ7CitDUkVBVEUgSU5ERVggT04gdHAoYik7CitpbnNlcnQg aW50byB0cCBzZWxlY3QgZyBmcm9tIGdlbmVyYXRlX3NlcmllcygxMDAsMTIwKSBnOworLS1jYW5u b3QgZmFzdCBBTFRFUiBUQUJMRSBTRVQgTk9UIE5VTEwgb3IgQUxURVIgVEFCTEUgQUREIENPTlNU UkFJTlQgTk9UIE5VTEwKKy0tc28gd29uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIGluZGV4IHJlYnVp bGQuCitBTFRFUiBUQUJMRSB0cCBhbHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGwsIEFMVEVSIENP TFVNTiBiIFNFVCBFWFBSRVNTSU9OIEFTIChhICogMyk7CitBTFRFUiBUQUJMRSB0cCBhbHRlciBj b2x1bW4gYiBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUgdHAgYWRkIGNvbnN0cmFpbnQgbm5h IG5vdCBudWxsIGE7CistLS0tLS10ZXN0IG5vbi1wYXJ0aXRpb25lZCB0YWJsZQorQ1JFQVRFIFRB QkxFIHQxKGYxIElOVCwgZjIgaW50LCBmMyBpbnQsZjQgaW50LCBmNSBpbnQpOworSU5TRVJUIElO VE8gdDEgc2VsZWN0IGcsIGcrMSwgZysyLCBnKzMsIGcrNCBmcm9tIGdlbmVyYXRlX3Nlcmllcygx LCAyMCkgZzsKK0NSRUFURSBJTkRFWCB0MV9mMV9mMl9pZHggT04gdDEoZjEsZjIpOworQ1JFQVRF IFVOSVFVRSBJTkRFWCB0MV9mM2lkeCBPTiB0MShmMyk7CitDUkVBVEUgSU5ERVggdDFfZjNmNGlk eCBPTiB0MShmMykgaW5jbHVkZShmNCk7CitDUkVBVEUgSU5ERVggaGFzaF9mNV9pZHggT04gdDEg VVNJTkcgaGFzaCAoZjUgaW50NF9vcHMpOworLS1jYW5ub3QgZmFzdCBBTFRFUiBUQUJMRSBTRVQg Tk9UIE5VTEwgb3IgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgTk9UIE5VTEwKKy0tc28gd29u J3QgaW50ZXJmZXJlIHdpdGggdGhlIGluZGV4IHJlYnVpbGQuCitBTFRFUiBUQUJMRSB0MSBhbHRl ciBjb2x1bW4gZjEgc2V0IG5vdCBudWxsLCBBTFRFUiBmMSBUWVBFIEJJR0lOVDsKK0FMVEVSIFRB QkxFIHQxIGFsdGVyIGNvbHVtbiBmMSBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUgdDEgYWRk IGNvbnN0cmFpbnQgbm4gbm90IG51bGwgZjEsIEFMVEVSIGYxIFRZUEUgYmlnaW50OworLS1jYW5u b3QgZmFzdCBBTFRFUiBUQUJMRSBTRVQgTk9UIE5VTEwgYnkgdXRpbGl6aW5nIGhhc2ggaW5kZXgu CitBTFRFUiBUQUJMRSB0MSBhZGQgY29uc3RyYWludCBubl9mNSBub3QgbnVsbCBmNTsKKy0tb2su IHdpdGggQUxURVIgQ09MVU1OIFNFVCBOT1QgTlVMTCB2YXJpYW50CitBTFRFUiBUQUJMRSB0MSBh bHRlciBjb2x1bW4gZjEgZHJvcCBub3QgbnVsbCwgYWx0ZXIgY29sdW1uIGYyIGRyb3Agbm90IG51 bGw7CitBTFRFUiBUQUJMRSB0MSBhbHRlciBjb2x1bW4gZjIgc2V0IG5vdCBudWxsLCBhbHRlciBj b2x1bW4gZjEgc2V0IG5vdCBudWxsOworLS1vay4gd2l0aCBhZGQgY29uc3RyYWludCB2YXJpYW50 cworQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYxIGRyb3Agbm90IG51bGwsIGFsdGVyIGNv bHVtbiBmMiBkcm9wIG5vdCBudWxsOworQUxURVIgVEFCTEUgdDEgYWRkIGNvbnN0cmFpbnQgbm4g bm90IG51bGwgZjIsIGFkZCBjb25zdHJhaW50IG5uZjEgbm90IG51bGwgZjE7CistLW9rLgorQUxU RVIgVEFCTEUgdDEgYWRkIGNvbnN0cmFpbnQgdF9mM19wayBwcmltYXJ5IGtleSB1c2luZyBpbmRl eCB0MV9mM2lkeDsKK05PVElDRTogIEFMVEVSIFRBQkxFIC8gQUREIENPTlNUUkFJTlQgVVNJTkcg SU5ERVggd2lsbCByZW5hbWUgaW5kZXggInQxX2YzaWR4IiB0byAidF9mM19wayIKKy0tY2Fubm90 IGZhc3QgQUxURVIgVEFCTEUgU0VUIE5PVCBOVUxMIG9yIEFMVEVSIFRBQkxFIEFERCBDT05TVFJB SU5UIE5PVCBOVUxMCistLWZvciBjb2x1bW4gZjQgbm93LCBjYW4gb25seSBmb3Iga2V5IGNvbHVt bnMsIG5vdCBpbmNsdWRlIGNvbHVtbi4KK0FMVEVSIFRBQkxFIHQxIGFkZCBjb25zdHJhaW50IG5u ZjQgbm90IG51bGwgZjQ7Citkcm9wIHRhYmxlIHQxOworZHJvcCB0YWJsZSB0cHAxLCB0cHAyLCB0 cDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxlLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2FsdGVyX3RhYmxlLnNxbAppbmRleCA4NGU5M2VmNTc1Li5jZDA1 ODRiNmM2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9hbHRlcl90YWJsZS5zcWwK KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvYWx0ZXJfdGFibGUuc3FsCkBAIC0zMTA5LDMgKzMx MDksNTAgQEAgYWx0ZXIgdGFibGUgYWx0ZXIxLnQxIHNldCBzY2hlbWEgYWx0ZXIyOwogZHJvcCBw dWJsaWNhdGlvbiBwdWIxOwogZHJvcCBzY2hlbWEgYWx0ZXIxIGNhc2NhZGU7CiBkcm9wIHNjaGVt YSBhbHRlcjIgY2FzY2FkZTsKKworLS0tLS1mYXN0IGFkZCBub3QtbnVsbCBjb25zdHJhaW50IHRl c3RzLgorQ1JFQVRFIFRBQkxFIHRwIChhIGludCwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAo MjIpIHN0b3JlZCkgUEFSVElUSU9OIEJZIHJhbmdlKGEpOworQ1JFQVRFIFRBQkxFIHRwcDEoYSBp bnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGErMSkgc3RvcmVkKTsKK0NSRUFURSBUQUJM RSB0cHAyKGEgaW50LCBiIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChhKzEwKSBzdG9yZWQpOwor QUxURVIgVEFCTEUgdHAgQVRUQUNIIFBBUlRJVElPTiB0cHAxIEZPUiB2YWx1ZXMgZnJvbSAoIDEg KSB0byAoMTAwKTsKK0FMVEVSIFRBQkxFIHRwIEFUVEFDSCBQQVJUSVRJT04gdHBwMiBkZWZhdWx0 OworQ1JFQVRFIElOREVYIE9OIHRwKGIpOworaW5zZXJ0IGludG8gdHAgc2VsZWN0IGcgZnJvbSBn ZW5lcmF0ZV9zZXJpZXMoMTAwLDEyMCkgZzsKKworLS1jYW5ub3QgZmFzdCBBTFRFUiBUQUJMRSBT RVQgTk9UIE5VTEwgb3IgQUxURVIgVEFCTEUgQUREIENPTlNUUkFJTlQgTk9UIE5VTEwKKy0tc28g d29uJ3QgaW50ZXJmZXJlIHdpdGggdGhlIGluZGV4IHJlYnVpbGQuCitBTFRFUiBUQUJMRSB0cCBh bHRlciBjb2x1bW4gYiBzZXQgbm90IG51bGwsIEFMVEVSIENPTFVNTiBiIFNFVCBFWFBSRVNTSU9O IEFTIChhICogMyk7CitBTFRFUiBUQUJMRSB0cCBhbHRlciBjb2x1bW4gYiBkcm9wIG5vdCBudWxs OworQUxURVIgVEFCTEUgdHAgYWRkIGNvbnN0cmFpbnQgbm5hIG5vdCBudWxsIGE7CisKKy0tLS0t LXRlc3Qgbm9uLXBhcnRpdGlvbmVkIHRhYmxlCitDUkVBVEUgVEFCTEUgdDEoZjEgSU5ULCBmMiBp bnQsIGYzIGludCxmNCBpbnQsIGY1IGludCk7CitJTlNFUlQgSU5UTyB0MSBzZWxlY3QgZywgZysx LCBnKzIsIGcrMywgZys0IGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwKSBnOworQ1JFQVRFIElO REVYIHQxX2YxX2YyX2lkeCBPTiB0MShmMSxmMik7CitDUkVBVEUgVU5JUVVFIElOREVYIHQxX2Yz aWR4IE9OIHQxKGYzKTsKK0NSRUFURSBJTkRFWCB0MV9mM2Y0aWR4IE9OIHQxKGYzKSBpbmNsdWRl KGY0KTsKK0NSRUFURSBJTkRFWCBoYXNoX2Y1X2lkeCBPTiB0MSBVU0lORyBoYXNoIChmNSBpbnQ0 X29wcyk7CisKKy0tY2Fubm90IGZhc3QgQUxURVIgVEFCTEUgU0VUIE5PVCBOVUxMIG9yIEFMVEVS IFRBQkxFIEFERCBDT05TVFJBSU5UIE5PVCBOVUxMCistLXNvIHdvbid0IGludGVyZmVyZSB3aXRo IHRoZSBpbmRleCByZWJ1aWxkLgorQUxURVIgVEFCTEUgdDEgYWx0ZXIgY29sdW1uIGYxIHNldCBu b3QgbnVsbCwgQUxURVIgZjEgVFlQRSBCSUdJTlQ7CitBTFRFUiBUQUJMRSB0MSBhbHRlciBjb2x1 bW4gZjEgZHJvcCBub3QgbnVsbDsKK0FMVEVSIFRBQkxFIHQxIGFkZCBjb25zdHJhaW50IG5uIG5v dCBudWxsIGYxLCBBTFRFUiBmMSBUWVBFIGJpZ2ludDsKKworLS1jYW5ub3QgZmFzdCBBTFRFUiBU QUJMRSBTRVQgTk9UIE5VTEwgYnkgdXRpbGl6aW5nIGhhc2ggaW5kZXguCitBTFRFUiBUQUJMRSB0 MSBhZGQgY29uc3RyYWludCBubl9mNSBub3QgbnVsbCBmNTsKKworLS1vay4gd2l0aCBBTFRFUiBD T0xVTU4gU0VUIE5PVCBOVUxMIHZhcmlhbnQKK0FMVEVSIFRBQkxFIHQxIGFsdGVyIGNvbHVtbiBm MSBkcm9wIG5vdCBudWxsLCBhbHRlciBjb2x1bW4gZjIgZHJvcCBub3QgbnVsbDsKK0FMVEVSIFRB QkxFIHQxIGFsdGVyIGNvbHVtbiBmMiBzZXQgbm90IG51bGwsIGFsdGVyIGNvbHVtbiBmMSBzZXQg bm90IG51bGw7CistLW9rLiB3aXRoIGFkZCBjb25zdHJhaW50IHZhcmlhbnRzCitBTFRFUiBUQUJM RSB0MSBhbHRlciBjb2x1bW4gZjEgZHJvcCBub3QgbnVsbCwgYWx0ZXIgY29sdW1uIGYyIGRyb3Ag bm90IG51bGw7CitBTFRFUiBUQUJMRSB0MSBhZGQgY29uc3RyYWludCBubiBub3QgbnVsbCBmMiwg YWRkIGNvbnN0cmFpbnQgbm5mMSBub3QgbnVsbCBmMTsKKy0tb2suCitBTFRFUiBUQUJMRSB0MSBh ZGQgY29uc3RyYWludCB0X2YzX3BrIHByaW1hcnkga2V5IHVzaW5nIGluZGV4IHQxX2YzaWR4Owor CistLWNhbm5vdCBmYXN0IEFMVEVSIFRBQkxFIFNFVCBOT1QgTlVMTCBvciBBTFRFUiBUQUJMRSBB REQgQ09OU1RSQUlOVCBOT1QgTlVMTAorLS1mb3IgY29sdW1uIGY0IG5vdywgY2FuIG9ubHkgZm9y IGtleSBjb2x1bW5zLCBub3QgaW5jbHVkZSBjb2x1bW4uCitBTFRFUiBUQUJMRSB0MSBhZGQgY29u c3RyYWludCBubmY0IG5vdCBudWxsIGY0OworZHJvcCB0YWJsZSB0MTsKK2Ryb3AgdGFibGUgdHBw MSwgdHBwMiwgdHA7Ci0tIAoyLjM0LjEKCg== --000000000000f56df5062d60dc4a--