Re: Avoid full GIN index scan when possible
Alexander Korotkov <[email protected]> Wed, 15 Jan 2020 01:47:30 +0300
| Newsgroups | gmane.comp.db.postgresql.devel.general |
|---|---|
| Message-ID | <CAPpHfdt8vCETJy9xMAvv1QQbOnNUfMfY8-pg+XGqJ-VWq4TNmg@mail.gmail.com> |
--0000000000002f7239059c21615d Content-Type: text/plain; charset="UTF-8" Hi! On Tue, Jan 14, 2020 at 9:43 PM Tom Lane <[email protected]> wrote: > Alexander Korotkov <[email protected]> writes: > > Updated patch is attached. It contains more comments as well as commit message. > > I reviewed this a little bit. I agree this seems way more straightforward > than the patches we've been considering so far. I wasn't too happy with > the state of the comments, so I rewrote them a bit in the attached v13. Thank you! > One thing I'm still not happy about is the comment in > collectMatchesForHeapRow. v12 failed to touch that at all, so I tried to > fill it in, but I'm not sure if my explanation is good. I've tried to rephrase this comment making it better from my point of view. It's hard for me to be sure about this, since I'm not native English speaker. I'd like you to take a look on it. > Also, if we know > that excludeOnly keys are going to be ignored, can we save any work in > the main loop of that function? It doesn't look so for me. We still need to collect matches for consistent function call afterwards. We may skip calling consistent function for excludeOnly keys by forcing a recheck. But that's not going to be a plain win. I thought about different optimization. We now check for at least one matching entry. Can we check for at least one *required* entry? It seems we can save some consistent function calls. > The test cases needed some work too. Notably, some of the places where > you tried to use EXPLAIN ANALYZE are unportable because they expose "Heap > Blocks" counts that are not stable. (I checked the patch on a 32-bit > machine and indeed some of these failed.) While it'd be possible to work > around that by filtering the EXPLAIN output, that would not be any simpler > or faster than our traditional style of just doing a plain EXPLAIN and a > separate execution. Thanks! > It troubles me a bit as well that the test cases don't really expose > any difference between patched and unpatched code --- I checked, and > they "passed" without applying any of the code changes. Maybe there's > not much to be done about that, since after all this is an optimization > that's not supposed to change any query results. Yep, it seems like we can't do much in this field unless we're going to expose too much internals at user level. I also had concerns about how excludeOnly keys work with lossy pages. I didn't find exact error. But I've added code, which skips excludeOnly keys checks for lossy pages. They aren't going to exclude any lossy page anyway. So, we can save some resources by skipping this. ------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --0000000000002f7239059c21615d Content-Type: application/octet-stream; name="0001-Avoid-GIN-full-scan-for-empty-ALL-keys-v14.patch" Content-Disposition: attachment; filename="0001-Avoid-GIN-full-scan-for-empty-ALL-keys-v14.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5egv54s1> X-Attachment-Id: f_k5egv54s1 Y29tbWl0IGFlMDI1YmRiZDVhNDU5MmIxZjhiNjc2M2EzMTRkNTBmMTk2Y2E4ZWUKQXV0aG9yOiBB bGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jlc3FsLm9yZz4KRGF0ZTogICBXZWQg SmFuIDE1IDAwOjE4OjMxIDIwMjAgKzAzMDAKCiAgICBBdm9pZCBmdWxsIHNjYW4gb2YgR0lOIGlu ZGV4ZXMgd2hlbiBwb3NzaWJsZQogICAgCiAgICBUaGUgc3RyYXRlZ3kgb2YgR0lOIGluZGV4IHNj YW4gaXMgZHJpdmVuIGJ5IG9wY2xhc3Mtc3BlY2lmaWMgZXh0cmFjdF9xdWVyeQogICAgbWV0aG9k LiAgVGhpcyBtZXRob2QgdGhhdCBuZWVkZWQgc2VhcmNoIG1vZGUgaXMgR0lOX1NFQVJDSF9NT0RF X0FMTC4gIFRoaXMKICAgIG1vZGUgbWVhbnMgdGhhdCBtYXRjaGluZyB0dXBsZSBtYXkgY29udGFp biBub25lIG9mIGV4dHJhY3RlZCBlbnRyaWVzLiAgU2ltcGxlCiAgICBleGFtcGxlIGlzICchdGVy bScgdHNxdWVyeSwgd2hpY2ggZG9lc24ndCBuZWVkIGFueSB0ZXJtIHRvIGV4aXN0IGluIG1hdGNo aW5nCiAgICB0c3ZlY3Rvci4KICAgIAogICAgSW4gb3JkZXIgdG8gaGFuZGxlIHN1Y2ggc2NhbiBr ZXkgR0lOIGNhbGN1bGF0ZXMgdmlydHVhbCBlbnRyeSwgd2hpY2ggY29udGFpbnMKICAgIGFsbCBU SURzIG9mIGFsbCBlbnRyaWVzIG9mIGF0dHJpYnV0ZS4gIEluIGZhY3QgdGhpcyBpcyBmdWxsIHNj YW4gb2YgaW5kZXgKICAgIGF0dHJpYnV0ZS4gIEFuZCB0eXBpY2FsbHkgdGhpcyBpcyB2ZXJ5IHNs b3csIGJ1dCBhbGxvd3MgdG8gaGFuZGxlIHNvbWUgcXVlcmllcwogICAgY29ycmVjdGx5IGluIEdJ Ti4gIEhvd2V2ZXIsIGN1cnJlbnQgYWxnb3JpdGhtIGNhbGN1bGF0ZSBzdWNoIHZpcnR1YWwgZW50 cnkgZm9yCiAgICBlYWNoIEdJTl9TRUFSQ0hfTU9ERV9BTEwgc2NhbiBrZXkgZXZlbiBpZiB0aGV5 IGFyZSBtdWx0aXBsZSBmb3IgdGhlIHNhbWUKICAgIGF0dHJpYnV0ZS4gIFRoaXMgaXMgY2xlYXJs eSBub3Qgb3B0aW1hbC4KICAgIAogICAgVGhpcyBjb21taXQgaW1wcm92ZXMgdGhlIHNpdHVhdGlv biBieSBpbnRvZHVjdGlvbiBvZiAiZXhjbHVkZSBvbmx5IiBzY2FuIGtleXMuCiAgICBTdWNoIHNj YW4ga2V5cyBhcmUgbm90IGNhcGFibGUgdG8gcmV0dXJuIHNldCBvZiBtYXRjaGluZyBUSURzLiAg SW5zdGVhZCwgdGhleQogICAgYXJlIGNhcGFibGUgb25seSB0byBmaWx0ZXIgVElEcyBwcm9kdWNl ZCBieSBub3JtYWwgc2NhbiBrZXlzLiAgVGhlcmVmb3JlLAogICAgZWFjaCBhdHRyaWJ1dGUgc2hv dWxkIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG5vcm1hbCBzY2FuIGtleSwgd2hpbGUgcmVzdCBvZiB0 aGVtCiAgICBtYXkgYmUgImV4Y2x1ZGUgb25seSIgaWYgc2VhcmNoIG1vZGUgaXMgR0lOX1NFQVJD SF9NT0RFX0FMTC4KICAgIAogICAgVGhlIHNhbWUgb3B0aW1pemF0aW9uIG1pZ2h0IGJlIGFwcGxp ZWQgdG8gdGhlIHdob2xlIHNjYW4sIG5vdCBwZXItYXR0cmlidXRlLgogICAgQnV0IHRoYXQgbGVh ZHMgdG8gTlVMTCB2YWx1ZXMgZWxpbWluYXRpb24gcHJvYmxlbS4gIFRoZXJlIGlzIHRyYWRlb2Zm IGJldHdlZW4KICAgIG11bHRpcGxlIHBvc3NpYmxlIHdheXMgdG8gZG8gdGhpcy4gIFdlIHByb2Jh Ymx5IHdhbnQgdG8gZG8gdGhpcyBsYXRlciB1c2luZwogICAgc29tZSBjb3N0LWJhc2VkIGRlY2lz aW9uIGFsZ29yaXRobS4KICAgIAogICAgRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9D QU9CYVVfWUdQNS1CRXQ1Q2MwJTNEek12ZTkydm9jUHpEJTJCWGlaZ2laczFralkwY2olM0RYQmcl NDBtYWlsLmdtYWlsLmNvbQogICAgQXV0aG9yOiBOaWtpdGEgR2x1a2hvdiwgQWxleGFuZGVyIEtv cm90a292LCBUb20gTGFuZSwgSnVsaWVuIFJvdWhhdWQKICAgIFJldmlld2VkLWJ5OiBKdWxpZW4g Um91aGF1ZCwgVG9tYXMgVm9uZHJhLCBUb20gTGFuZQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf dHJnbS9leHBlY3RlZC9wZ190cmdtLm91dCBiL2NvbnRyaWIvcGdfdHJnbS9leHBlY3RlZC9wZ190 cmdtLm91dAppbmRleCBiM2U3MDlmNDk2Mi4uOTE1OTZmODY0NTggMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcGdfdHJnbS9leHBlY3RlZC9wZ190cmdtLm91dAorKysgYi9jb250cmliL3BnX3RyZ20vZXhw ZWN0ZWQvcGdfdHJnbS5vdXQKQEAgLTM0OTgsNiArMzQ5OCwxMDcgQEAgc2VsZWN0IGNvdW50KCop IGZyb20gdGVzdF90cmdtIHdoZXJlIHQgfiAnW3F3ZXJ0eV17Mn0tP1txd2VydHldezJ9JzsKICAg MTAwMAogKDEgcm93KQogCistLSBjaGVjayBoYW5kbGluZyBvZiBpbmRleHF1YWxzIHRoYXQgZ2Vu ZXJhdGUgbm8gc2VhcmNoYWJsZSBjb25kaXRpb25zCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgY291bnQoKikgZnJvbSB0ZXN0X3RyZ20gd2hlcmUgdCBsaWtlICclOTklJyBhbmQgdCBsaWtl ICclcXdlcnR5JSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlc3RfdHJnbQorICAgICAg ICAgUmVjaGVjayBDb25kOiAoKHQgfn4gJyU5OSUnOjp0ZXh0KSBBTkQgKHQgfn4gJyVxd2VydHkl Jzo6dGV4dCkpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdHJnbV9pZHgKKyAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgodCB+fiAnJTk5JSc6OnRleHQpIEFORCAodCB+fiAn JXF3ZXJ0eSUnOjp0ZXh0KSkKKyg1IHJvd3MpCisKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3Rf dHJnbSB3aGVyZSB0IGxpa2UgJyU5OSUnIGFuZCB0IGxpa2UgJyVxd2VydHklJzsKKyBjb3VudCAK Ky0tLS0tLS0KKyAgICAxOQorKDEgcm93KQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg Y291bnQoKikgZnJvbSB0ZXN0X3RyZ20gd2hlcmUgdCBsaWtlICclOTklJyBhbmQgdCBsaWtlICcl cXclJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAg IC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRlc3RfdHJnbQorICAgICAgICAgUmVjaGVjayBDb25k OiAoKHQgfn4gJyU5OSUnOjp0ZXh0KSBBTkQgKHQgfn4gJyVxdyUnOjp0ZXh0KSkKKyAgICAgICAg IC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0cmdtX2lkeAorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKCh0IH5+ICclOTklJzo6dGV4dCkgQU5EICh0IH5+ICclcXclJzo6dGV4dCkpCisoNSBy b3dzKQorCitzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3RyZ20gd2hlcmUgdCBsaWtlICclOTkl JyBhbmQgdCBsaWtlICclcXclJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxOQorKDEgcm93KQor CistLSBlbnN1cmUgdGhhdCBwZW5kaW5nLWxpc3QgaXRlbXMgYXJlIGhhbmRsZWQgY29ycmVjdGx5 LCB0b28KK2NyZWF0ZSB0ZW1wIHRhYmxlIHRfdGVzdF90cmdtKHQgdGV4dCBDT0xMQVRFICJDIik7 CitjcmVhdGUgaW5kZXggdF90cmdtX2lkeCBvbiB0X3Rlc3RfdHJnbSB1c2luZyBnaW4gKHQgZ2lu X3RyZ21fb3BzKTsKK2luc2VydCBpbnRvIHRfdGVzdF90cmdtIHZhbHVlcyAoJ3F3ZXJ0eTk5Jyks ICgncXdlcnR5MDEnKTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBjb3VudCgqKSBmcm9t IHRfdGVzdF90cmdtIHdoZXJlIHQgbGlrZSAnJTk5JScgYW5kIHQgbGlrZSAnJXF3ZXJ0eSUnOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisg ICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiB0X3Rlc3RfdHJnbQorICAgICAgICAgUmVjaGVjayBD b25kOiAoKHQgfn4gJyU5OSUnOjp0ZXh0KSBBTkQgKHQgfn4gJyVxd2VydHklJzo6dGV4dCkpCisg ICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gdF90cmdtX2lkeAorICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKCh0IH5+ICclOTklJzo6dGV4dCkgQU5EICh0IH5+ICclcXdlcnR5JSc6 OnRleHQpKQorKDUgcm93cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gdF90ZXN0X3RyZ20gd2hl cmUgdCBsaWtlICclOTklJyBhbmQgdCBsaWtlICclcXdlcnR5JSc7CisgY291bnQgCistLS0tLS0t CisgICAgIDEKKygxIHJvdykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGNvdW50KCop IGZyb20gdF90ZXN0X3RyZ20gd2hlcmUgdCBsaWtlICclOTklJyBhbmQgdCBsaWtlICclcXclJzsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBC aXRtYXAgSGVhcCBTY2FuIG9uIHRfdGVzdF90cmdtCisgICAgICAgICBSZWNoZWNrIENvbmQ6ICgo dCB+fiAnJTk5JSc6OnRleHQpIEFORCAodCB+fiAnJXF3JSc6OnRleHQpKQorICAgICAgICAgLT4g IEJpdG1hcCBJbmRleCBTY2FuIG9uIHRfdHJnbV9pZHgKKyAgICAgICAgICAgICAgIEluZGV4IENv bmQ6ICgodCB+fiAnJTk5JSc6OnRleHQpIEFORCAodCB+fiAnJXF3JSc6OnRleHQpKQorKDUgcm93 cykKKworc2VsZWN0IGNvdW50KCopIGZyb20gdF90ZXN0X3RyZ20gd2hlcmUgdCBsaWtlICclOTkl JyBhbmQgdCBsaWtlICclcXclJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQor CistLSBydW4gdGhlIHNhbWUgcXVlcmllcyB3aXRoIHNlcXVlbnRpYWwgc2NhbiB0byBjaGVjayB0 aGUgcmVzdWx0cworc2V0IGVuYWJsZV9iaXRtYXBzY2FuPW9mZjsKK3NldCBlbmFibGVfc2Vxc2Nh bj1vbjsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3RfdHJnbSB3aGVyZSB0IGxpa2UgJyU5OSUn IGFuZCB0IGxpa2UgJyVxd2VydHklJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxOQorKDEgcm93 KQorCitzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3RyZ20gd2hlcmUgdCBsaWtlICclOTklJyBh bmQgdCBsaWtlICclcXclJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAxOQorKDEgcm93KQorCitz ZWxlY3QgY291bnQoKikgZnJvbSB0X3Rlc3RfdHJnbSB3aGVyZSB0IGxpa2UgJyU5OSUnIGFuZCB0 IGxpa2UgJyVxd2VydHklJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAgICAgMQorKDEgcm93KQorCitz ZWxlY3QgY291bnQoKikgZnJvbSB0X3Rlc3RfdHJnbSB3aGVyZSB0IGxpa2UgJyU5OSUnIGFuZCB0 IGxpa2UgJyVxdyUnOworIGNvdW50IAorLS0tLS0tLQorICAgICAxCisoMSByb3cpCisKK3Jlc2V0 IGVuYWJsZV9iaXRtYXBzY2FuOwogY3JlYXRlIHRhYmxlIHRlc3QyKHQgdGV4dCBDT0xMQVRFICJD Iik7CiBpbnNlcnQgaW50byB0ZXN0MiB2YWx1ZXMgKCdhYmNkZWYnKTsKIGluc2VydCBpbnRvIHRl c3QyIHZhbHVlcyAoJ3F1YXJrJyk7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3RyZ20vc3FsL3Bn X3RyZ20uc3FsIGIvY29udHJpYi9wZ190cmdtL3NxbC9wZ190cmdtLnNxbAppbmRleCAwODQ1OWU2 NGMzMC4uMjAxOWQxZjZiZTggMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfdHJnbS9zcWwvcGdfdHJn bS5zcWwKKysrIGIvY29udHJpYi9wZ190cmdtL3NxbC9wZ190cmdtLnNxbApAQCAtNTUsNiArNTUs MzMgQEAgc2VsZWN0IHQsc2ltaWxhcml0eSh0LCdnd2VydHl1MDk4OCcpIGFzIHNtbCBmcm9tIHRl c3RfdHJnbSB3aGVyZSB0ICUgJ2d3ZXJ0eXUwOTgKIHNlbGVjdCB0LHNpbWlsYXJpdHkodCwnZ3dl cnR5dTE5ODgnKSBhcyBzbWwgZnJvbSB0ZXN0X3RyZ20gd2hlcmUgdCAlICdnd2VydHl1MTk4OCcg b3JkZXIgYnkgc21sIGRlc2MsIHQ7CiBzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3RyZ20gd2hl cmUgdCB+ICdbcXdlcnR5XXsyfS0/W3F3ZXJ0eV17Mn0nOwogCistLSBjaGVjayBoYW5kbGluZyBv ZiBpbmRleHF1YWxzIHRoYXQgZ2VuZXJhdGUgbm8gc2VhcmNoYWJsZSBjb25kaXRpb25zCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3RyZ20gd2hlcmUgdCBs aWtlICclOTklJyBhbmQgdCBsaWtlICclcXdlcnR5JSc7CitzZWxlY3QgY291bnQoKikgZnJvbSB0 ZXN0X3RyZ20gd2hlcmUgdCBsaWtlICclOTklJyBhbmQgdCBsaWtlICclcXdlcnR5JSc7CitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgY291bnQoKikgZnJvbSB0ZXN0X3RyZ20gd2hlcmUgdCBs aWtlICclOTklJyBhbmQgdCBsaWtlICclcXclJzsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHRlc3Rf dHJnbSB3aGVyZSB0IGxpa2UgJyU5OSUnIGFuZCB0IGxpa2UgJyVxdyUnOworLS0gZW5zdXJlIHRo YXQgcGVuZGluZy1saXN0IGl0ZW1zIGFyZSBoYW5kbGVkIGNvcnJlY3RseSwgdG9vCitjcmVhdGUg dGVtcCB0YWJsZSB0X3Rlc3RfdHJnbSh0IHRleHQgQ09MTEFURSAiQyIpOworY3JlYXRlIGluZGV4 IHRfdHJnbV9pZHggb24gdF90ZXN0X3RyZ20gdXNpbmcgZ2luICh0IGdpbl90cmdtX29wcyk7Citp bnNlcnQgaW50byB0X3Rlc3RfdHJnbSB2YWx1ZXMgKCdxd2VydHk5OScpLCAoJ3F3ZXJ0eTAxJyk7 CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgY291bnQoKikgZnJvbSB0X3Rlc3RfdHJnbSB3 aGVyZSB0IGxpa2UgJyU5OSUnIGFuZCB0IGxpa2UgJyVxd2VydHklJzsKK3NlbGVjdCBjb3VudCgq KSBmcm9tIHRfdGVzdF90cmdtIHdoZXJlIHQgbGlrZSAnJTk5JScgYW5kIHQgbGlrZSAnJXF3ZXJ0 eSUnOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IGNvdW50KCopIGZyb20gdF90ZXN0X3Ry Z20gd2hlcmUgdCBsaWtlICclOTklJyBhbmQgdCBsaWtlICclcXclJzsKK3NlbGVjdCBjb3VudCgq KSBmcm9tIHRfdGVzdF90cmdtIHdoZXJlIHQgbGlrZSAnJTk5JScgYW5kIHQgbGlrZSAnJXF3JSc7 CisKKy0tIHJ1biB0aGUgc2FtZSBxdWVyaWVzIHdpdGggc2VxdWVudGlhbCBzY2FuIHRvIGNoZWNr IHRoZSByZXN1bHRzCitzZXQgZW5hYmxlX2JpdG1hcHNjYW49b2ZmOworc2V0IGVuYWJsZV9zZXFz Y2FuPW9uOworc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF90cmdtIHdoZXJlIHQgbGlrZSAnJTk5 JScgYW5kIHQgbGlrZSAnJXF3ZXJ0eSUnOworc2VsZWN0IGNvdW50KCopIGZyb20gdGVzdF90cmdt IHdoZXJlIHQgbGlrZSAnJTk5JScgYW5kIHQgbGlrZSAnJXF3JSc7CitzZWxlY3QgY291bnQoKikg ZnJvbSB0X3Rlc3RfdHJnbSB3aGVyZSB0IGxpa2UgJyU5OSUnIGFuZCB0IGxpa2UgJyVxd2VydHkl JzsKK3NlbGVjdCBjb3VudCgqKSBmcm9tIHRfdGVzdF90cmdtIHdoZXJlIHQgbGlrZSAnJTk5JScg YW5kIHQgbGlrZSAnJXF3JSc7CityZXNldCBlbmFibGVfYml0bWFwc2NhbjsKKwogY3JlYXRlIHRh YmxlIHRlc3QyKHQgdGV4dCBDT0xMQVRFICJDIik7CiBpbnNlcnQgaW50byB0ZXN0MiB2YWx1ZXMg KCdhYmNkZWYnKTsKIGluc2VydCBpbnRvIHRlc3QyIHZhbHVlcyAoJ3F1YXJrJyk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW5nZXQuYwppbmRleCA3YWU0ZWYwNWMyZi4uZjM2ZTY3NGIyOTAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW5nZXQuYwpAQCAtNTI4LDggKzUyOCwyMCBAQCBzdGFydFNjYW5LZXkoR2luU3RhdGUg KmdpbnN0YXRlLCBHaW5TY2FuT3BhcXVlIHNvLCBHaW5TY2FuS2V5IGtleSkKIAkgKiBvcmRlciwg dW50aWwgdGhlIGNvbnNpc3RlbnQgZnVuY3Rpb24gc2F5cyB0aGF0IG5vbmUgb2YgdGhlIHJlbWFp bmluZwogCSAqIGVudHJpZXMgY2FuIGZvcm0gYSBtYXRjaCwgd2l0aG91dCBhbnkgaXRlbXMgZnJv bSB0aGUgcmVxdWlyZWQgc2V0LiBUaGUKIAkgKiByZXN0IGdvIHRvIHRoZSBhZGRpdGlvbmFsIHNl dC4KKwkgKgorCSAqIEV4Y2x1ZGUtb25seSBzY2FuIGtleXMgYXJlIGtub3duIHRvIGhhdmUgbm8g cmVxdWlyZWQgZW50cmllcy4KIAkgKi8KLQlpZiAoa2V5LT5uZW50cmllcyA+IDEpCisJaWYgKGtl eS0+ZXhjbHVkZU9ubHkpCisJeworCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc28tPmtleUN0eCk7 CisKKwkJa2V5LT5ucmVxdWlyZWQgPSAwOworCQlrZXktPm5hZGRpdGlvbmFsID0ga2V5LT5uZW50 cmllczsKKwkJa2V5LT5hZGRpdGlvbmFsRW50cmllcyA9IHBhbGxvYyhrZXktPm5hZGRpdGlvbmFs ICogc2l6ZW9mKEdpblNjYW5FbnRyeSkpOworCQlmb3IgKGkgPSAwOyBpIDwga2V5LT5uYWRkaXRp b25hbDsgaSsrKQorCQkJa2V5LT5hZGRpdGlvbmFsRW50cmllc1tpXSA9IGtleS0+c2NhbkVudHJ5 W2ldOworCX0KKwllbHNlIGlmIChrZXktPm5lbnRyaWVzID4gMSkKIAl7CiAJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhzby0+dGVtcEN0eCk7CiAKQEAgLTEwMDgsMzcgKzEwMjAsNTIgQEAga2V5R2V0 SXRlbShHaW5TdGF0ZSAqZ2luc3RhdGUsIE1lbW9yeUNvbnRleHQgdGVtcEN0eCwgR2luU2Nhbktl eSBrZXksCiAJCQltaW5JdGVtID0gZW50cnktPmN1ckl0ZW07CiAJfQogCi0JaWYgKGFsbEZpbmlz aGVkKQorCWlmIChhbGxGaW5pc2hlZCAmJiAha2V5LT5leGNsdWRlT25seSkKIAl7CiAJCS8qIGFs bCBlbnRyaWVzIGFyZSBmaW5pc2hlZCAqLwogCQlrZXktPmlzRmluaXNoZWQgPSB0cnVlOwogCQly ZXR1cm47CiAJfQogCi0JLyoKLQkgKiBPaywgd2Ugbm93IGtub3cgdGhhdCB0aGVyZSBhcmUgbm8g bWF0Y2hlcyA8IG1pbkl0ZW0uCi0JICoKLQkgKiBJZiBtaW5JdGVtIGlzIGxvc3N5LCBpdCBtZWFu cyB0aGF0IHRoZXJlIHdlcmUgbm8gZXhhY3QgaXRlbXMgb24gdGhlCi0JICogcGFnZSBhbW9uZyBy ZXF1aXJlZEVudHJpZXMsIGJlY2F1c2UgbG9zc3kgcG9pbnRlcnMgc29ydCBhZnRlciBleGFjdAot CSAqIGl0ZW1zLiBIb3dldmVyLCB0aGVyZSBtaWdodCBiZSBleGFjdCBpdGVtcyBmb3IgdGhlIHNh bWUgcGFnZSBhbW9uZwotCSAqIGFkZGl0aW9uYWxFbnRyaWVzLCBzbyB3ZSBtdXN0bid0IGFkdmFu Y2UgcGFzdCB0aGVtLgotCSAqLwotCWlmIChJdGVtUG9pbnRlcklzTG9zc3lQYWdlKCZtaW5JdGVt KSkKKwlpZiAoIWtleS0+ZXhjbHVkZU9ubHkpCiAJewotCQlpZiAoR2luSXRlbVBvaW50ZXJHZXRC bG9ja051bWJlcigmYWR2YW5jZVBhc3QpIDwKLQkJCUdpbkl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1i ZXIoJm1pbkl0ZW0pKQorCQkvKgorCQkgKiBGb3IgYSBub3JtYWwgc2NhbiBrZXksIHdlIG5vdyBr bm93IHRoZXJlIGFyZSBubyBtYXRjaGVzIDwgbWluSXRlbS4KKwkJICoKKwkJICogSWYgbWluSXRl bSBpcyBsb3NzeSwgaXQgbWVhbnMgdGhhdCB0aGVyZSB3ZXJlIG5vIGV4YWN0IGl0ZW1zIG9uIHRo ZQorCQkgKiBwYWdlIGFtb25nIHJlcXVpcmVkRW50cmllcywgYmVjYXVzZSBsb3NzeSBwb2ludGVy cyBzb3J0IGFmdGVyIGV4YWN0CisJCSAqIGl0ZW1zLiBIb3dldmVyLCB0aGVyZSBtaWdodCBiZSBl eGFjdCBpdGVtcyBmb3IgdGhlIHNhbWUgcGFnZSBhbW9uZworCQkgKiBhZGRpdGlvbmFsRW50cmll cywgc28gd2UgbXVzdG4ndCBhZHZhbmNlIHBhc3QgdGhlbS4KKwkJICovCisJCWlmIChJdGVtUG9p bnRlcklzTG9zc3lQYWdlKCZtaW5JdGVtKSkKIAkJeworCQkJaWYgKEdpbkl0ZW1Qb2ludGVyR2V0 QmxvY2tOdW1iZXIoJmFkdmFuY2VQYXN0KSA8CisJCQkJR2luSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcigmbWluSXRlbSkpCisJCQl7CisJCQkJSXRlbVBvaW50ZXJTZXQoJmFkdmFuY2VQYXN0LAor CQkJCQkJCSAgIEdpbkl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJm1pbkl0ZW0pLAorCQkJCQkJ CSAgIEludmFsaWRPZmZzZXROdW1iZXIpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJQXNz ZXJ0KEdpbkl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZtaW5JdGVtKSA+IDApOwogCQkJSXRl bVBvaW50ZXJTZXQoJmFkdmFuY2VQYXN0LAogCQkJCQkJICAgR2luSXRlbVBvaW50ZXJHZXRCbG9j a051bWJlcigmbWluSXRlbSksCi0JCQkJCQkgICBJbnZhbGlkT2Zmc2V0TnVtYmVyKTsKKwkJCQkJ CSAgIE9mZnNldE51bWJlclByZXYoR2luSXRlbVBvaW50ZXJHZXRPZmZzZXROdW1iZXIoJm1pbkl0 ZW0pKSk7CiAJCX0KIAl9CiAJZWxzZQogCXsKLQkJQXNzZXJ0KEdpbkl0ZW1Qb2ludGVyR2V0T2Zm c2V0TnVtYmVyKCZtaW5JdGVtKSA+IDApOwotCQlJdGVtUG9pbnRlclNldCgmYWR2YW5jZVBhc3Qs Ci0JCQkJCSAgIEdpbkl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJm1pbkl0ZW0pLAotCQkJCQkg ICBPZmZzZXROdW1iZXJQcmV2KEdpbkl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKCZtaW5JdGVt KSkpOworCQkvKgorCQkgKiBleGNsdWRlT25seSBzY2FuIGtleXMgZG9uJ3QgaGF2ZSBhbnkgZW50 cmllcyB0aGF0IGFyZSBuZWNlc3NhcmlseQorCQkgKiBwcmVzZW50IGluIG1hdGNoaW5nIGl0ZW1z LiAgU28sIHdlIGNvbnNpZGVyIHRoZSBpdGVtIGp1c3QgYWZ0ZXIKKwkJICogYWR2YW5jZVBhc3Qu CisJCSAqLworCQlBc3NlcnQoa2V5LT5ucmVxdWlyZWQgPT0gMCk7CisJCUl0ZW1Qb2ludGVyU2V0 KCZtaW5JdGVtLAorCQkJCQkgICBHaW5JdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZhZHZhbmNl UGFzdCksCisJCQkJCSAgIE9mZnNldE51bWJlck5leHQoR2luSXRlbVBvaW50ZXJHZXRPZmZzZXRO dW1iZXIoJmFkdmFuY2VQYXN0KSkpOwogCX0KIAogCS8qCkBAIC0xMjY2LDYgKzEyOTMsMjAgQEAg c2NhbkdldEl0ZW0oSW5kZXhTY2FuRGVzYyBzY2FuLCBJdGVtUG9pbnRlckRhdGEgYWR2YW5jZVBh c3QsCiAJCXsKIAkJCUdpblNjYW5LZXkJa2V5ID0gc28tPmtleXMgKyBpOwogCisJCQkvKgorCQkJ ICogSWYgd2UncmUgY29uc2lkZXJpbmcgYSBsb3NzeSBwYWdlLCBza2lwIGV4Y2x1ZGVPbmx5IGtl eXMsICBUaGV5CisJCQkgKiBjYW4ndCBleGNsdWRlIHRoZSB3aG9sZSBwYWdlIGFueXdheS4KKwkJ CSAqLworCQkJaWYgKEl0ZW1Qb2ludGVySXNMb3NzeVBhZ2UoaXRlbSkgJiYga2V5LT5leGNsdWRl T25seSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIGdpbk5ld1NjYW5LZXkoKSBzaG91bGQgbmV2ZXIg bWFyayB0aGUgZmlyc3Qga2V5IGFzCisJCQkJICogZXhjbHVkZU9ubHkuCisJCQkJICovCisJCQkJ QXNzZXJ0KGkgPiAwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwogCQkJLyogRmV0Y2ggdGhlIG5l eHQgaXRlbSBmb3IgdGhpcyBrZXkgdGhhdCBpcyA+IGFkdmFuY2VQYXN0LiAqLwogCQkJa2V5R2V0 SXRlbSgmc28tPmdpbnN0YXRlLCBzby0+dGVtcEN0eCwga2V5LCBhZHZhbmNlUGFzdCwKIAkJCQkJ ICAgc2Nhbi0+eHNfc25hcHNob3QpOwpAQCAtMTczNiwxMSArMTc3NywxNCBAQCBjb2xsZWN0TWF0 Y2hlc0ZvckhlYXBSb3coSW5kZXhTY2FuRGVzYyBzY2FuLCBwZW5kaW5nUG9zaXRpb24gKnBvcykK IAl9CiAKIAkvKgotCSAqIE5vdyByZXR1cm4gInRydWUiIGlmIGFsbCBzY2FuIGtleXMgaGF2ZSBh dCBsZWFzdCBvbmUgbWF0Y2hpbmcgZGF0dW0KKwkgKiBBbGwgc2NhbiBrZXlzIGV4Y2VwdCBleGNs dWRlT25seSByZXF1aXJlIGF0IGxlYXN0IG9uZSBlbnRyeSB0byBtYXRjaC4KKwkgKiBleGNsdWRl T25seSBrZXlzIGFyZSBleHBlY3Rpb24sIGJlY2F1c2UgdGhlaXIgaW1wbGllZAorCSAqIEdJTl9D QVRfRU1QVFlfUVVFUlkgc2NhbkVudHJ5IGFsd2F5cyBtYXRjaC4gIE5vdyByZXR1cm4gInRydWUi IGlmIGFsbAorCSAqIG5vbi1leGx1Y2RlT25seSBzY2FuIGtleXMgaGF2ZSBhdCBsZWFzdCBvbmUg bWF0Y2hpbmcgZGF0dW0uCiAJICovCiAJZm9yIChpID0gMDsgaSA8IHNvLT5ua2V5czsgaSsrKQog CXsKLQkJaWYgKHBvcy0+aGFzTWF0Y2hLZXlbaV0gPT0gZmFsc2UpCisJCWlmIChwb3MtPmhhc01h dGNoS2V5W2ldID09IGZhbHNlICYmICFzby0+a2V5c1tpXS5leGNsdWRlT25seSkKIAkJCXJldHVy biBmYWxzZTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luc2Nh bi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5zY2FuLmMKaW5kZXggYzE1ZDA2Y2ViYTQu LjBhNjg1YmRiZmM2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnNjYW4u YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnNjYW4uYwpAQCAtMTI1LDYgKzEyNSwy NyBAQCBnaW5GaWxsU2NhbkVudHJ5KEdpblNjYW5PcGFxdWUgc28sIE9mZnNldE51bWJlciBhdHRu dW0sCiAJcmV0dXJuIHNjYW5FbnRyeTsKIH0KIAorLyoKKyAqIEFwcGVuZCBoaWRkZW4gc2NhbiBl bnRyeSBvZiBnaXZlbiBjYXRlZ29yeSB0byB0aGUgc2NhbiBrZXkuCisgKgorICogTkI6IHRoaXMg aGFkIGJldHRlciBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlIHBlciBzY2FuIGtleSwgc2luY2UKKyAq IGdpbkZpbGxTY2FuS2V5IGxlYXZlcyByb29tIGZvciBvbmx5IG9uZSBoaWRkZW4gZW50cnkuICBD dXJyZW50bHksCisgKiBpdCBzZWVtcyBzdWZmaWNpZW50bHkgY2xlYXIgdGhhdCB0aGlzIGlzIHRy dWUgdGhhdCB3ZSBkb24ndCBib3RoZXIKKyAqIHdpdGggYW55IGNyb3NzLWNoZWNrIGxvZ2ljLgor ICovCitzdGF0aWMgdm9pZAorZ2luU2NhbktleUFkZEhpZGRlbkVudHJ5KEdpblNjYW5PcGFxdWUg c28sIEdpblNjYW5LZXkga2V5LAorCQkJCQkJIEdpbk51bGxDYXRlZ29yeSBxdWVyeUNhdGVnb3J5 KQoreworCWludAkJCWkgPSBrZXktPm5lbnRyaWVzKys7CisKKwkvKiBzdHJhdGVneSBpcyBvZiBu byBpbnRlcmVzdCBiZWNhdXNlIHRoaXMgaXMgbm90IGEgcGFydGlhbC1tYXRjaCBpdGVtICovCisJ a2V5LT5zY2FuRW50cnlbaV0gPSBnaW5GaWxsU2NhbkVudHJ5KHNvLCBrZXktPmF0dG51bSwKKwkJ CQkJCQkJCQkgSW52YWxpZFN0cmF0ZWd5LCBrZXktPnNlYXJjaE1vZGUsCisJCQkJCQkJCQkJIChE YXR1bSkgMCwgcXVlcnlDYXRlZ29yeSwKKwkJCQkJCQkJCQkgZmFsc2UsIE5VTEwpOworfQorCiAv KgogICogSW5pdGlhbGl6ZSB0aGUgbmV4dCBHaW5TY2FuS2V5IHVzaW5nIHRoZSBvdXRwdXQgZnJv bSB0aGUgZXh0cmFjdFF1ZXJ5Rm4KICAqLwpAQCAtMTM3LDE3ICsxNTgsMTYgQEAgZ2luRmlsbFNj YW5LZXkoR2luU2Nhbk9wYXF1ZSBzbywgT2Zmc2V0TnVtYmVyIGF0dG51bSwKIHsKIAlHaW5TY2Fu S2V5CWtleSA9ICYoc28tPmtleXNbc28tPm5rZXlzKytdKTsKIAlHaW5TdGF0ZSAgICpnaW5zdGF0 ZSA9ICZzby0+Z2luc3RhdGU7Ci0JdWludDMyCQluVXNlclF1ZXJ5VmFsdWVzID0gblF1ZXJ5VmFs dWVzOwogCXVpbnQzMgkJaTsKIAotCS8qIE5vbi1kZWZhdWx0IHNlYXJjaCBtb2RlcyBhZGQgb25l ICJoaWRkZW4iIGVudHJ5IHRvIGVhY2gga2V5ICovCi0JaWYgKHNlYXJjaE1vZGUgIT0gR0lOX1NF QVJDSF9NT0RFX0RFRkFVTFQpCi0JCW5RdWVyeVZhbHVlcysrOwogCWtleS0+bmVudHJpZXMgPSBu UXVlcnlWYWx1ZXM7Ci0Ja2V5LT5udXNlcmVudHJpZXMgPSBuVXNlclF1ZXJ5VmFsdWVzOworCWtl eS0+bnVzZXJlbnRyaWVzID0gblF1ZXJ5VmFsdWVzOwogCi0Ja2V5LT5zY2FuRW50cnkgPSAoR2lu U2NhbkVudHJ5ICopIHBhbGxvYyhzaXplb2YoR2luU2NhbkVudHJ5KSAqIG5RdWVyeVZhbHVlcyk7 Ci0Ja2V5LT5lbnRyeVJlcyA9IChHaW5UZXJuYXJ5VmFsdWUgKikgcGFsbG9jMChzaXplb2YoR2lu VGVybmFyeVZhbHVlKSAqIG5RdWVyeVZhbHVlcyk7CisJLyogQWxsb2NhdGUgb25lIGV4dHJhIGFy cmF5IHNsb3QgZm9yIHBvc3NpYmxlICJoaWRkZW4iIGVudHJ5ICovCisJa2V5LT5zY2FuRW50cnkg PSAoR2luU2NhbkVudHJ5ICopIHBhbGxvYyhzaXplb2YoR2luU2NhbkVudHJ5KSAqCisJCQkJCQkJ CQkJCSAoblF1ZXJ5VmFsdWVzICsgMSkpOworCWtleS0+ZW50cnlSZXMgPSAoR2luVGVybmFyeVZh bHVlICopIHBhbGxvYzAoc2l6ZW9mKEdpblRlcm5hcnlWYWx1ZSkgKgorCQkJCQkJCQkJCQkJKG5R dWVyeVZhbHVlcyArIDEpKTsKIAogCWtleS0+cXVlcnkgPSBxdWVyeTsKIAlrZXktPnF1ZXJ5VmFs dWVzID0gcXVlcnlWYWx1ZXM7CkBAIC0xNTcsNiArMTc3LDEyIEBAIGdpbkZpbGxTY2FuS2V5KEdp blNjYW5PcGFxdWUgc28sIE9mZnNldE51bWJlciBhdHRudW0sCiAJa2V5LT5zZWFyY2hNb2RlID0g c2VhcmNoTW9kZTsKIAlrZXktPmF0dG51bSA9IGF0dG51bTsKIAorCS8qCisJICogSW5pdGlhbGx5 LCBzY2FuIGtleXMgb2YgR0lOX1NFQVJDSF9NT0RFX0FMTCBtb2RlIGFyZSBtYXJrZWQKKwkgKiBl eGNsdWRlT25seS4gIFRoaXMgbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIuCisJICovCisJa2V5LT5l eGNsdWRlT25seSA9IChzZWFyY2hNb2RlID09IEdJTl9TRUFSQ0hfTU9ERV9BTEwpOworCiAJSXRl bVBvaW50ZXJTZXRNaW4oJmtleS0+Y3VySXRlbSk7CiAJa2V5LT5jdXJJdGVtTWF0Y2hlcyA9IGZh bHNlOwogCWtleS0+cmVjaGVja0N1ckl0ZW0gPSBmYWxzZTsKQEAgLTE2OCw2ICsxOTQsNyBAQCBn aW5GaWxsU2NhbktleShHaW5TY2FuT3BhcXVlIHNvLCBPZmZzZXROdW1iZXIgYXR0bnVtLAogCiAJ Z2luSW5pdENvbnNpc3RlbnRGdW5jdGlvbihnaW5zdGF0ZSwga2V5KTsKIAorCS8qIFNldCB1cCBu b3JtYWwgc2NhbiBlbnRyaWVzIHVzaW5nIGV4dHJhY3RRdWVyeUZuJ3Mgb3V0cHV0cyAqLwogCWZv ciAoaSA9IDA7IGkgPCBuUXVlcnlWYWx1ZXM7IGkrKykKIAl7CiAJCURhdHVtCQlxdWVyeUtleTsK QEAgLTE3NSw1NCArMjAyLDI4IEBAIGdpbkZpbGxTY2FuS2V5KEdpblNjYW5PcGFxdWUgc28sIE9m ZnNldE51bWJlciBhdHRudW0sCiAJCWJvb2wJCWlzUGFydGlhbE1hdGNoOwogCQlQb2ludGVyCQl0 aGlzX2V4dHJhOwogCi0JCWlmIChpIDwgblVzZXJRdWVyeVZhbHVlcykKLQkJewotCQkJLyogc2V0 IHVwIG5vcm1hbCBlbnRyeSB1c2luZyBleHRyYWN0UXVlcnlGbidzIG91dHB1dHMgKi8KLQkJCXF1 ZXJ5S2V5ID0gcXVlcnlWYWx1ZXNbaV07Ci0JCQlxdWVyeUNhdGVnb3J5ID0gcXVlcnlDYXRlZ29y aWVzW2ldOwotCQkJaXNQYXJ0aWFsTWF0Y2ggPQotCQkJCShnaW5zdGF0ZS0+Y2FuUGFydGlhbE1h dGNoW2F0dG51bSAtIDFdICYmIHBhcnRpYWxfbWF0Y2hlcykKLQkJCQk/IHBhcnRpYWxfbWF0Y2hl c1tpXSA6IGZhbHNlOwotCQkJdGhpc19leHRyYSA9IChleHRyYV9kYXRhKSA/IGV4dHJhX2RhdGFb aV0gOiBOVUxMOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyogc2V0IHVwIGhpZGRlbiBlbnRyeSAq LwotCQkJcXVlcnlLZXkgPSAoRGF0dW0pIDA7Ci0JCQlzd2l0Y2ggKHNlYXJjaE1vZGUpCi0JCQl7 Ci0JCQkJY2FzZSBHSU5fU0VBUkNIX01PREVfSU5DTFVERV9FTVBUWToKLQkJCQkJcXVlcnlDYXRl Z29yeSA9IEdJTl9DQVRfRU1QVFlfSVRFTTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBHSU5fU0VB UkNIX01PREVfQUxMOgotCQkJCQlxdWVyeUNhdGVnb3J5ID0gR0lOX0NBVF9FTVBUWV9RVUVSWTsK LQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBHSU5fU0VBUkNIX01PREVfRVZFUllUSElORzoKLQkJCQkJ cXVlcnlDYXRlZ29yeSA9IEdJTl9DQVRfRU1QVFlfUVVFUlk7Ci0JCQkJCWJyZWFrOwotCQkJCWRl ZmF1bHQ6Ci0JCQkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIHNlYXJjaE1vZGU6ICVkIiwgc2Vh cmNoTW9kZSk7Ci0JCQkJCXF1ZXJ5Q2F0ZWdvcnkgPSAwOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0 ICovCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaXNQYXJ0aWFsTWF0Y2ggPSBmYWxzZTsKLQkJCXRo aXNfZXh0cmEgPSBOVUxMOwotCi0JCQkvKgotCQkJICogV2Ugc2V0IHRoZSBzdHJhdGVneSB0byBh IGZpeGVkIHZhbHVlIHNvIHRoYXQgZ2luRmlsbFNjYW5FbnRyeQotCQkJICogY2FuIGNvbWJpbmUg dGhlc2UgZW50cmllcyBmb3IgZGlmZmVyZW50IHNjYW4ga2V5cy4gIFRoaXMgaXMKLQkJCSAqIHNh ZmUgYmVjYXVzZSB0aGUgc3RyYXRlZ3kgdmFsdWUgaW4gdGhlIGVudHJ5IHN0cnVjdCBpcyBvbmx5 Ci0JCQkgKiB1c2VkIGZvciBwYXJ0aWFsLW1hdGNoIGNhc2VzLiAgSXQncyBPSyB0byBvdmVyd3Jp dGUgb3VyIGxvY2FsCi0JCQkgKiB2YXJpYWJsZSBoZXJlIGJlY2F1c2UgdGhpcyBpcyB0aGUgbGFz dCBsb29wIGl0ZXJhdGlvbi4KLQkJCSAqLwotCQkJc3RyYXRlZ3kgPSBJbnZhbGlkU3RyYXRlZ3k7 Ci0JCX0KKwkJcXVlcnlLZXkgPSBxdWVyeVZhbHVlc1tpXTsKKwkJcXVlcnlDYXRlZ29yeSA9IHF1 ZXJ5Q2F0ZWdvcmllc1tpXTsKKwkJaXNQYXJ0aWFsTWF0Y2ggPQorCQkJKGdpbnN0YXRlLT5jYW5Q YXJ0aWFsTWF0Y2hbYXR0bnVtIC0gMV0gJiYgcGFydGlhbF9tYXRjaGVzKQorCQkJPyBwYXJ0aWFs X21hdGNoZXNbaV0gOiBmYWxzZTsKKwkJdGhpc19leHRyYSA9IChleHRyYV9kYXRhKSA/IGV4dHJh X2RhdGFbaV0gOiBOVUxMOwogCiAJCWtleS0+c2NhbkVudHJ5W2ldID0gZ2luRmlsbFNjYW5FbnRy eShzbywgYXR0bnVtLAogCQkJCQkJCQkJCQkgc3RyYXRlZ3ksIHNlYXJjaE1vZGUsCiAJCQkJCQkJ CQkJCSBxdWVyeUtleSwgcXVlcnlDYXRlZ29yeSwKIAkJCQkJCQkJCQkJIGlzUGFydGlhbE1hdGNo LCB0aGlzX2V4dHJhKTsKIAl9CisKKwkvKgorCSAqIEZvciBHSU5fU0VBUkNIX01PREVfSU5DTFVE RV9FTVBUWSBhbmQgR0lOX1NFQVJDSF9NT0RFX0VWRVJZVEhJTkcgc2VhcmNoCisJICogbW9kZXMs IHdlIGFkZCB0aGUgImhpZGRlbiIgZW50cnkgaW1tZWRpYXRlbHkuICBHSU5fU0VBUkNIX01PREVf QUxMIGlzCisJICogaGFuZGxlZCBsYXRlciwgc2luY2Ugd2UgbWlnaHQgYmUgYWJsZSB0byBvbWl0 IHRoZSBoaWRkZW4gZW50cnkgZm9yIGl0LgorCSAqLworCWlmIChzZWFyY2hNb2RlID09IEdJTl9T RUFSQ0hfTU9ERV9JTkNMVURFX0VNUFRZKQorCQlnaW5TY2FuS2V5QWRkSGlkZGVuRW50cnkoc28s IGtleSwgR0lOX0NBVF9FTVBUWV9JVEVNKTsKKwllbHNlIGlmIChzZWFyY2hNb2RlID09IEdJTl9T RUFSQ0hfTU9ERV9FVkVSWVRISU5HKQorCQlnaW5TY2FuS2V5QWRkSGlkZGVuRW50cnkoc28sIGtl eSwgR0lOX0NBVF9FTVBUWV9RVUVSWSk7CiB9CiAKIC8qCkBAIC0yNjUsNiArMjY2LDcgQEAgZ2lu TmV3U2NhbktleShJbmRleFNjYW5EZXNjIHNjYW4pCiAJR2luU2Nhbk9wYXF1ZSBzbyA9IChHaW5T Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJaW50CQkJaTsKIAlib29sCQloYXNOdWxsUXVlcnkg PSBmYWxzZTsKKwlib29sCQlhdHRySGFzTm9ybWFsU2NhbltJTkRFWF9NQVhfS0VZU10gPSB7ZmFs c2V9OwogCU1lbW9yeUNvbnRleHQgb2xkQ3R4OwogCiAJLyoKQEAgLTM3MSw2ICszNzMsMzMgQEAg Z2luTmV3U2NhbktleShJbmRleFNjYW5EZXNjIHNjYW4pCiAJCQkJCSAgIHNrZXktPnNrX2FyZ3Vt ZW50LCBuUXVlcnlWYWx1ZXMsCiAJCQkJCSAgIHF1ZXJ5VmFsdWVzLCBjYXRlZ29yaWVzLAogCQkJ CQkgICBwYXJ0aWFsX21hdGNoZXMsIGV4dHJhX2RhdGEpOworCisJCS8qIFJlbWVtYmVyIGlmIHdl IGhhZCBhbnkgbm9uLWV4Y2x1ZGVPbmx5IGtleXMgKi8KKwkJaWYgKHNlYXJjaE1vZGUgIT0gR0lO X1NFQVJDSF9NT0RFX0FMTCkKKwkJCWF0dHJIYXNOb3JtYWxTY2FuW3NrZXktPnNrX2F0dG5vIC0g MV0gPSB0cnVlOworCX0KKworCS8qCisJICogUHJvY2Vzc2luZyBHSU5fU0VBUkNIX01PREVfQUxM IHNjYW4ga2V5cyByZXF1aXJlcyB1cyB0byBtYWtlIGEgc2Vjb25kCisJICogcGFzcyBvdmVyIHRo ZSBzY2FuIGtleXMuICBBYm92ZSB3ZSBtYXJrZWQgZWFjaCBzdWNoIHNjYW4ga2V5IGFzCisJICog ZXhjbHVkZU9ubHkuICBJZiB0aGUgaW52b2x2ZWQgY29sdW1uIGhhcyBhbnkgbm9ybWFsIChub3Qg ZXhjbHVkZU9ubHkpCisJICogc2NhbiBrZXkgYXMgd2VsbCwgdGhlbiB3ZSBjYW4gbGVhdmUgaXQg bGlrZSB0aGF0LiAgT3RoZXJ3aXNlLCBvbmUKKwkgKiBleGNsdWRlT25seSBzY2FuIGtleSBtdXN0 IHJlY2VpdmUgYSBHSU5fQ0FUX0VNUFRZX1FVRVJZIGhpZGRlbiBlbnRyeQorCSAqIGFuZCBiZSBz ZXQgdG8gbm9ybWFsIChleGNsdWRlT25seSA9IGZhbHNlKS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBp IDwgc28tPm5rZXlzOyBpKyspCisJeworCQlHaW5TY2FuS2V5CWtleSA9ICZzby0+a2V5c1tpXTsK KworCQlpZiAoa2V5LT5zZWFyY2hNb2RlICE9IEdJTl9TRUFSQ0hfTU9ERV9BTEwpCisJCQljb250 aW51ZTsKKworCQlpZiAoIWF0dHJIYXNOb3JtYWxTY2FuW2tleS0+YXR0bnVtIC0gMV0pCisJCXsK KwkJCWtleS0+ZXhjbHVkZU9ubHkgPSBmYWxzZTsKKwkJCWdpblNjYW5LZXlBZGRIaWRkZW5FbnRy eShzbywga2V5LCBHSU5fQ0FUX0VNUFRZX1FVRVJZKTsKKwkJCWF0dHJIYXNOb3JtYWxTY2FuW2tl eS0+YXR0bnVtIC0gMV0gPSB0cnVlOworCQl9CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1 bmNzLmMKaW5kZXggMThkNzdhYzBiNzcuLjdjNmYwNTc0YjM3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2Vs ZnVuY3MuYwpAQCAtNjM1Niw3ICs2MzU2LDggQEAgc3BnY29zdGVzdGltYXRlKFBsYW5uZXJJbmZv ICpyb290LCBJbmRleFBhdGggKnBhdGgsIGRvdWJsZSBsb29wX2NvdW50LAogCiB0eXBlZGVmIHN0 cnVjdAogewotCWJvb2wJCWhhdmVGdWxsU2NhbjsKKwlib29sCQlhdHRIYXNGdWxsU2NhbltJTkRF WF9NQVhfS0VZU107CisJYm9vbAkJYXR0SGFzTm9ybWFsU2NhbltJTkRFWF9NQVhfS0VZU107CiAJ ZG91YmxlCQlwYXJ0aWFsRW50cmllczsKIAlkb3VibGUJCWV4YWN0RW50cmllczsKIAlkb3VibGUJ CXNlYXJjaEVudHJpZXM7CkBAIC02NDUyLDE2ICs2NDUzLDIxIEBAIGdpbmNvc3RfcGF0dGVybihJ bmRleE9wdEluZm8gKmluZGV4LCBpbnQgaW5kZXhjb2wsCiAJCWNvdW50cy0+c2VhcmNoRW50cmll cysrOwogCX0KIAotCWlmIChzZWFyY2hNb2RlID09IEdJTl9TRUFSQ0hfTU9ERV9JTkNMVURFX0VN UFRZKQorCWlmIChzZWFyY2hNb2RlID09IEdJTl9TRUFSQ0hfTU9ERV9ERUZBVUxUKQorCXsKKwkJ Y291bnRzLT5hdHRIYXNOb3JtYWxTY2FuW2luZGV4Y29sXSA9IHRydWU7CisJfQorCWVsc2UgaWYg KHNlYXJjaE1vZGUgPT0gR0lOX1NFQVJDSF9NT0RFX0lOQ0xVREVfRU1QVFkpCiAJewogCQkvKiBU cmVhdCAiaW5jbHVkZSBlbXB0eSIgbGlrZSBhbiBleGFjdC1tYXRjaCBpdGVtICovCisJCWNvdW50 cy0+YXR0SGFzTm9ybWFsU2NhbltpbmRleGNvbF0gPSB0cnVlOwogCQljb3VudHMtPmV4YWN0RW50 cmllcysrOwogCQljb3VudHMtPnNlYXJjaEVudHJpZXMrKzsKIAl9Ci0JZWxzZSBpZiAoc2VhcmNo TW9kZSAhPSBHSU5fU0VBUkNIX01PREVfREVGQVVMVCkKKwllbHNlCiAJewogCQkvKiBJdCdzIEdJ Tl9TRUFSQ0hfTU9ERV9BTEwgKi8KLQkJY291bnRzLT5oYXZlRnVsbFNjYW4gPSB0cnVlOworCQlj b3VudHMtPmF0dEhhc0Z1bGxTY2FuW2luZGV4Y29sXSA9IHRydWU7CiAJfQogCiAJcmV0dXJuIHRy dWU7CkBAIC02NTk3LDcgKzY2MDMsOCBAQCBnaW5jb3N0X3NjYWxhcmFycmF5b3BleHByKFBsYW5u ZXJJbmZvICpyb290LAogCQkJLyogV2UgaWdub3JlIGFycmF5IGVsZW1lbnRzIHRoYXQgYXJlIHVu c2F0aXNmaWFibGUgcGF0dGVybnMgKi8KIAkJCW51bVBvc3NpYmxlKys7CiAKLQkJCWlmIChlbGVt Y291bnRzLmhhdmVGdWxsU2NhbikKKwkJCWlmIChlbGVtY291bnRzLmF0dEhhc0Z1bGxTY2FuW2lu ZGV4Y29sXSAmJgorCQkJCSFlbGVtY291bnRzLmF0dEhhc05vcm1hbFNjYW5baW5kZXhjb2xdKQog CQkJewogCQkJCS8qCiAJCQkJICogRnVsbCBpbmRleCBzY2FuIHdpbGwgYmUgcmVxdWlyZWQuICBX ZSB0cmVhdCB0aGlzIGFzIGlmCkBAIC02NjU0LDYgKzY2NjEsNyBAQCBnaW5jb3N0ZXN0aW1hdGUo UGxhbm5lckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJ CQkJbnVtRW50cmllczsKIAlHaW5RdWFsQ291bnRzIGNvdW50czsKIAlib29sCQltYXRjaFBvc3Np YmxlOworCWJvb2wJCWZ1bGxJbmRleFNjYW47CiAJZG91YmxlCQlwYXJ0aWFsU2NhbGU7CiAJZG91 YmxlCQllbnRyeVBhZ2VzRmV0Y2hlZCwKIAkJCQlkYXRhUGFnZXNGZXRjaGVkLApAQCAtNjY2NSw2 ICs2NjczLDcgQEAgZ2luY29zdGVzdGltYXRlKFBsYW5uZXJJbmZvICpyb290LCBJbmRleFBhdGgg KnBhdGgsIGRvdWJsZSBsb29wX2NvdW50LAogCVJlbGF0aW9uCWluZGV4UmVsOwogCUdpblN0YXRz RGF0YSBnaW5TdGF0czsKIAlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQlpOwogCiAJLyoKIAkgKiBP YnRhaW4gc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gZnJvbSB0aGUgbWV0YSBwYWdlLCBpZiBwb3Nz aWJsZS4gIEVsc2UKQEAgLTY4MjEsNyArNjgzMCwyMyBAQCBnaW5jb3N0ZXN0aW1hdGUoUGxhbm5l ckluZm8gKnJvb3QsIEluZGV4UGF0aCAqcGF0aCwgZG91YmxlIGxvb3BfY291bnQsCiAJCXJldHVy bjsKIAl9CiAKLQlpZiAoY291bnRzLmhhdmVGdWxsU2NhbiB8fCBpbmRleFF1YWxzID09IE5JTCkK KwkvKgorCSAqIElmIGF0dHJpYnV0ZSBoYXMgYSBmdWxsIHNjYW4gYW5kIGF0IHRoZSBzYW1lIHRp bWUgZG9lc24ndCBoYXZlIG5vcm1hbAorCSAqIHNjYW4sIHRoZW4gd2UnbGwgaGF2ZSB0byBzY2Fu IGFsbCBub24tbnVsbCBlbnRyaWVzIG9mIHRoYXQgYXR0cmlidXRlLgorCSAqIEN1cnJlbnRseSwg d2UgZG9uJ3QgaGF2ZSBwZXItYXR0cmlidXRlIHN0YXRpc3RpY3MgZm9yIEdJTi4gIFRodXMsIHdl CisJICogbXVzdCBhc3N1bWUgdGhlIHdob2xlIEdJTiBpbmRleCBoYXMgdG8gYmUgc2Nhbm5lZCBp biB0aGlzIGNhc2UuCisJICovCisJZnVsbEluZGV4U2NhbiA9IGZhbHNlOworCWZvciAoaSA9IDA7 IGkgPCBpbmRleC0+bmtleWNvbHVtbnM7IGkrKykKKwl7CisJCWlmIChjb3VudHMuYXR0SGFzRnVs bFNjYW5baV0gJiYgIWNvdW50cy5hdHRIYXNOb3JtYWxTY2FuW2ldKQorCQl7CisJCQlmdWxsSW5k ZXhTY2FuID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZ1bGxJbmRleFNjYW4g fHwgaW5kZXhRdWFscyA9PSBOSUwpCiAJewogCQkvKgogCQkgKiBGdWxsIGluZGV4IHNjYW4gd2ls bCBiZSByZXF1aXJlZC4gIFdlIHRyZWF0IHRoaXMgYXMgaWYgZXZlcnkga2V5IGluCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2luX3ByaXZhdGUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9naW5fcHJpdmF0ZS5oCmluZGV4IGExMzZmN2Y5MTg2Li43MWVlYWMyMDVjOSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dpbl9wcml2YXRlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2dpbl9wcml2YXRlLmgKQEAgLTMwMyw2ICszMDMsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgR2lu U2NhbktleURhdGEKIAlpbnQzMgkJc2VhcmNoTW9kZTsKIAlPZmZzZXROdW1iZXIgYXR0bnVtOwog CisJLyoKKwkgKiBBbiBleGNsdWRlT25seSBzY2FuIGtleSBpcyBub3QgYWJsZSB0byBlbnVtZXJh dGUgYWxsIG1hdGNoaW5nIHR1cGxlcy4KKwkgKiBUaGF0IGlzLCB0byBiZSBzZW1hbnRpY2FsbHkg Y29ycmVjdCBvbiBpdHMgb3duLCBpdCB3b3VsZCBuZWVkIHRvIGhhdmUgYQorCSAqIEdJTl9DQVRf RU1QVFlfUVVFUlkgc2NhbkVudHJ5LCBidXQgaXQgZG9lc24ndC4gIFN1Y2ggYSBrZXkgY2FuIHN0 aWxsIGJlCisJICogdXNlZCB0byBmaWx0ZXIgdHVwbGVzIHJldHVybmVkIGJ5IG90aGVyIHNjYW4g a2V5cywgc28gd2Ugd2lsbCBnZXQgdGhlCisJICogcmlnaHQgYW5zd2VycyBhcyBsb25nIGFzIHRo ZXJlJ3MgYXQgbGVhc3Qgb25lIG5vbi1leGNsdWRlT25seSBzY2FuIGtleQorCSAqIGZvciBlYWNo IGluZGV4IGF0dHJpYnV0ZSBjb25zaWRlcmVkIGJ5IHRoZSBzZWFyY2guICBGb3IgZWZmaWNpZW5j eQorCSAqIHJlYXNvbnMgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHVubmVjZXNzYXJ5IEdJTl9DQVRf RU1QVFlfUVVFUlkgZW50cmllcywKKwkgKiBzbyB3ZSB3aWxsIGNvbnZlcnQgYW4gZXhjbHVkZU9u bHkgc2NhbiBrZXkgdG8gbm9uLWV4Y2x1ZGVPbmx5IChieQorCSAqIGFkZGluZyBhIEdJTl9DQVRf RU1QVFlfUVVFUlkgc2NhbkVudHJ5KSBvbmx5IGlmIHRoZXJlIGFyZSBubyBvdGhlcgorCSAqIG5v bi1leGNsdWRlT25seSBzY2FuIGtleXMuCisJICovCisJYm9vbAkJZXhjbHVkZU9ubHk7CisKIAkv KgogCSAqIE1hdGNoIHN0YXR1cyBkYXRhLiAgY3VySXRlbSBpcyB0aGUgVElEIG1vc3QgcmVjZW50 bHkgdGVzdGVkIChjb3VsZCBiZSBhCiAJICogbG9zc3ktcGFnZSBwb2ludGVyKS4gIGN1ckl0ZW1N YXRjaGVzIGlzIHRydWUgaWYgaXQgcGFzc2VzIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9naW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9naW4ub3V0 CmluZGV4IGEzOTExYTZjNmM5Li5lM2M0ODA1YzIzNCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9naW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZ2lu Lm91dApAQCAtMSw3ICsxLDcgQEAKIC0tCiAtLSBUZXN0IEdJTiBpbmRleGVzLgogLS0KLS0tIFRo ZXJlIGFyZSBvdGhlciB0ZXN0cyB0byB0ZXN0IGRpZmZlcmVudCBHSU4gb3BjbGFzc2VkLiBUaGlz IGlzIGZvciB0ZXN0aW5nCistLSBUaGVyZSBhcmUgb3RoZXIgdGVzdHMgdG8gdGVzdCBkaWZmZXJl bnQgR0lOIG9wY2xhc3Nlcy4gVGhpcyBpcyBmb3IgdGVzdGluZwogLS0gR0lOIGl0c2VsZi4KIC0t IENyZWF0ZSBhbmQgcG9wdWxhdGUgYSB0ZXN0IHRhYmxlIHdpdGggYSBHSU4gaW5kZXguCiBjcmVh dGUgdGFibGUgZ2luX3Rlc3RfdGJsKGkgaW50NFtdKSB3aXRoIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBvZmYpOwpAQCAtMzUsMyArMzUsMTMyIEBAIGluc2VydCBpbnRvIGdpbl90ZXN0X3RibCBzZWxl Y3QgYXJyYXlbMSwgMiwgZ10gZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKIGluc2Vy dCBpbnRvIGdpbl90ZXN0X3RibCBzZWxlY3QgYXJyYXlbMSwgMywgZ10gZnJvbSBnZW5lcmF0ZV9z ZXJpZXMoMSwgMTAwMCkgZzsKIGRlbGV0ZSBmcm9tIGdpbl90ZXN0X3RibCB3aGVyZSBpIEA+IGFy cmF5WzJdOwogdmFjdXVtIGdpbl90ZXN0X3RibDsKKy0tIFRlc3Qgb3B0aW1pemF0aW9uIG9mIGVt cHR5IHF1ZXJpZXMKK2NyZWF0ZSB0ZW1wIHRhYmxlIHRfZ2luX3Rlc3RfdGJsKGkgaW50NFtdLCBq IGludDRbXSk7CitjcmVhdGUgaW5kZXggb24gdF9naW5fdGVzdF90YmwgdXNpbmcgZ2luIChpLCBq KTsKK2luc2VydCBpbnRvIHRfZ2luX3Rlc3RfdGJsCit2YWx1ZXMKKyAgKG51bGwsICAgIG51bGwp LAorICAoJ3t9JywgICAgbnVsbCksCisgICgnezF9JywgICBudWxsKSwKKyAgKCd7MSwyfScsIG51 bGwpLAorICAobnVsbCwgICAgJ3t9JyksCisgIChudWxsLCAgICAnezEwfScpLAorICAoJ3sxLDJ9 JywgJ3sxMH0nKSwKKyAgKCd7Mn0nLCAgICd7MTB9JyksCisgICgnezEsM30nLCAne30nKSwKKyAg KCd7MSwxfScsICd7MTB9Jyk7CitzZXQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CitleHBsYWluIChj b3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHRfZ2luX3Rlc3RfdGJsIHdoZXJlIGFycmF5WzBdIDxA IGk7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJp dG1hcCBIZWFwIFNjYW4gb24gdF9naW5fdGVzdF90YmwKKyAgIFJlY2hlY2sgQ29uZDogKCd7MH0n OjppbnRlZ2VyW10gPEAgaSkKKyAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0X2dpbl90ZXN0 X3RibF9pX2pfaWR4CisgICAgICAgICBJbmRleCBDb25kOiAoaSBAPiAnezB9Jzo6aW50ZWdlcltd KQorKDQgcm93cykKKworc2VsZWN0ICogZnJvbSB0X2dpbl90ZXN0X3RibCB3aGVyZSBhcnJheVsw XSA8QCBpOworIGkgfCBqIAorLS0tKy0tLQorKDAgcm93cykKKworc2VsZWN0ICogZnJvbSB0X2dp bl90ZXN0X3RibCB3aGVyZSBhcnJheVswXSA8QCBpIGFuZCAne30nOjppbnQ0W10gPEAgajsKKyBp IHwgaiAKKy0tLSstLS0KKygwIHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAq IGZyb20gdF9naW5fdGVzdF90Ymwgd2hlcmUgaSBAPiAne30nOworICAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBCaXRtYXAgSGVhcCBTY2FuIG9uIHRfZ2lu X3Rlc3RfdGJsCisgICBSZWNoZWNrIENvbmQ6IChpIEA+ICd7fSc6OmludGVnZXJbXSkKKyAgIC0+ ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0X2dpbl90ZXN0X3RibF9pX2pfaWR4CisgICAgICAgICBJ bmRleCBDb25kOiAoaSBAPiAne30nOjppbnRlZ2VyW10pCisoNCByb3dzKQorCitzZWxlY3QgKiBm cm9tIHRfZ2luX3Rlc3RfdGJsIHdoZXJlIGkgQD4gJ3t9JzsKKyAgIGkgICB8ICBqICAgCistLS0t LS0tKy0tLS0tLQorIHt9ICAgIHwgCisgezF9ICAgfCAKKyB7MSwyfSB8IAorIHsxLDJ9IHwgezEw fQorIHsyfSAgIHwgezEwfQorIHsxLDN9IHwge30KKyB7MSwxfSB8IHsxMH0KKyg3IHJvd3MpCisK K2NyZWF0ZSBmdW5jdGlvbiBleHBsYWluX3F1ZXJ5X2pzb24ocXVlcnlfc3FsIHRleHQpCityZXR1 cm5zIHRhYmxlIChleHBsYWluX2xpbmUganNvbikKK2xhbmd1YWdlIHBscGdzcWwgYXMKKyQkCiti ZWdpbgorICBzZXQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CisgIHNldCBlbmFibGVfYml0bWFwc2Nh biA9IG9uOworICByZXR1cm4gcXVlcnkgZXhlY3V0ZSAnRVhQTEFJTiAoQU5BTFlaRSwgRk9STUFU IGpzb24pICcgfHwgcXVlcnlfc3FsOworZW5kOworJCQ7CitjcmVhdGUgZnVuY3Rpb24gZXhlY3V0 ZV90ZXh0X3F1ZXJ5X2luZGV4KHF1ZXJ5X3NxbCB0ZXh0KQorcmV0dXJucyBzZXRvZiB0ZXh0Cits YW5ndWFnZSBwbHBnc3FsCithcworJCQKK2JlZ2luCisgIHNldCBlbmFibGVfc2Vxc2NhbiA9IG9m ZjsKKyAgc2V0IGVuYWJsZV9iaXRtYXBzY2FuID0gb247CisgIHJldHVybiBxdWVyeSBleGVjdXRl IHF1ZXJ5X3NxbDsKK2VuZDsKKyQkOworY3JlYXRlIGZ1bmN0aW9uIGV4ZWN1dGVfdGV4dF9xdWVy eV9oZWFwKHF1ZXJ5X3NxbCB0ZXh0KQorcmV0dXJucyBzZXRvZiB0ZXh0CitsYW5ndWFnZSBwbHBn c3FsCithcworJCQKK2JlZ2luCisgIHNldCBlbmFibGVfc2Vxc2NhbiA9IG9uOworICBzZXQgZW5h YmxlX2JpdG1hcHNjYW4gPSBvZmY7CisgIHJldHVybiBxdWVyeSBleGVjdXRlIHF1ZXJ5X3NxbDsK K2VuZDsKKyQkOworLS0gY2hlY2sgbnVtYmVyIG9mIHJvd3MgcmV0dXJuZWQgYnkgaW5kZXggYW5k IHJlbW92ZWQgYnkgcmVjaGVjaworc2VsZWN0CisgIHF1ZXJ5LAorICBqcy0+MC0+J1BsYW4nLT4n UGxhbnMnLT4wLT4nQWN0dWFsIFJvd3MnIGFzICJyZXR1cm4gYnkgaW5kZXgiLAorICBqcy0+MC0+ J1BsYW4nLT4nUm93cyBSZW1vdmVkIGJ5IEluZGV4IFJlY2hlY2snIGFzICJyZW1vdmVkIGJ5IHJl Y2hlY2siLAorICAocmVzX2luZGV4ID0gcmVzX2hlYXApIGFzICJtYXRjaCIKK2Zyb20KKyAgKHZh bHVlcworICAgICgkJCBpIEA+ICd7fScgJCQpLAorICAgICgkJCBqIEA+ICd7fScgJCQpLAorICAg ICgkJCBpIEA+ICd7fScgYW5kIGogQD4gJ3t9JyAkJCksCisgICAgKCQkIGkgQD4gJ3sxfScgJCQp LAorICAgICgkJCBpIEA+ICd7MX0nIGFuZCBqIEA+ICd7fScgJCQpLAorICAgICgkJCBpIEA+ICd7 MX0nIGFuZCBpIEA+ICd7fScgYW5kIGogQD4gJ3t9JyAkJCksCisgICAgKCQkIGogQD4gJ3sxMH0n ICQkKSwKKyAgICAoJCQgaiBAPiAnezEwfScgYW5kIGkgQD4gJ3t9JyAkJCksCisgICAgKCQkIGog QD4gJ3sxMH0nIGFuZCBqIEA+ICd7fScgYW5kIGkgQD4gJ3t9JyAkJCksCisgICAgKCQkIGkgQD4g J3sxfScgYW5kIGogQD4gJ3sxMH0nICQkKQorICApIHEocXVlcnkpLAorICBsYXRlcmFsIGV4cGxh aW5fcXVlcnlfanNvbigkJHNlbGVjdCAqIGZyb20gdF9naW5fdGVzdF90Ymwgd2hlcmUgJCQgfHwg cXVlcnkpIGpzLAorICBsYXRlcmFsIGV4ZWN1dGVfdGV4dF9xdWVyeV9pbmRleCgkJHNlbGVjdCBz dHJpbmdfYWdnKChpLCBqKTo6dGV4dCwgJyAnKSBmcm9tIHRfZ2luX3Rlc3RfdGJsIHdoZXJlICQk IHx8IHF1ZXJ5KSByZXNfaW5kZXgsCisgIGxhdGVyYWwgZXhlY3V0ZV90ZXh0X3F1ZXJ5X2hlYXAo JCRzZWxlY3Qgc3RyaW5nX2FnZygoaSwgaik6OnRleHQsICcgJykgZnJvbSB0X2dpbl90ZXN0X3Ri bCB3aGVyZSAkJCB8fCBxdWVyeSkgcmVzX2hlYXA7CisgICAgICAgICAgICAgICAgICAgcXVlcnkg ICAgICAgICAgICAgICAgICAgfCByZXR1cm4gYnkgaW5kZXggfCByZW1vdmVkIGJ5IHJlY2hlY2sg fCBtYXRjaCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLQorICBpIEA+ICd7fScg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNyAgICAgICAgICAgICAgIHwgMCAgICAg ICAgICAgICAgICAgIHwgdAorICBqIEA+ICd7fScgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgNiAgICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgICAgIHwgdAorICBpIEA+ICd7 fScgYW5kIGogQD4gJ3t9JyAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgIHwgMCAg ICAgICAgICAgICAgICAgIHwgdAorICBpIEA+ICd7MX0nICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgNSAgICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgICAgIHwgdAorICBpIEA+ ICd7MX0nIGFuZCBqIEA+ICd7fScgICAgICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgIHwg MCAgICAgICAgICAgICAgICAgIHwgdAorICBpIEA+ICd7MX0nIGFuZCBpIEA+ICd7fScgYW5kIGog QD4gJ3t9JyAgIHwgMyAgICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgICAgIHwgdAorICBq IEA+ICd7MTB9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAg IHwgMCAgICAgICAgICAgICAgICAgIHwgdAorICBqIEA+ICd7MTB9JyBhbmQgaSBAPiAne30nICAg ICAgICAgICAgICAgIHwgMyAgICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgICAgIHwgdAor ICBqIEA+ICd7MTB9JyBhbmQgaiBAPiAne30nIGFuZCBpIEA+ICd7fScgIHwgMyAgICAgICAgICAg ICAgIHwgMCAgICAgICAgICAgICAgICAgIHwgdAorICBpIEA+ICd7MX0nIGFuZCBqIEA+ICd7MTB9 JyAgICAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgIHwgMCAgICAgICAgICAgICAgICAgIHwg dAorKDEwIHJvd3MpCisKK3Jlc2V0IGVuYWJsZV9zZXFzY2FuOworcmVzZXQgZW5hYmxlX2JpdG1h cHNjYW47Citkcm9wIHRhYmxlIHRfZ2luX3Rlc3RfdGJsOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC90c2VhcmNoLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv dHNlYXJjaC5vdXQKaW5kZXggN2FmMjg5OTI3Y2MuLmZlMWNkOWRlYjBlIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3RzZWFyY2gub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvdHNlYXJjaC5vdXQKQEAgLTMzNyw2ICszMzcsNDEgQEAgU0VMRUNUIGNvdW50 KCopIEZST00gdGVzdF90c3ZlY3RvciBXSEVSRSBhIEBAICchbm9fc3VjaF9sZXhlbWUnOwogICAg NTA4CiAoMSByb3cpCiAKKy0tIFRlc3Qgb3B0aW1pemF0aW9uIG9mIG5vbi1lbXB0eSBHSU5fU0VB UkNIX01PREVfQUxMIHF1ZXJpZXMKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgq KSBGUk9NIHRlc3RfdHN2ZWN0b3IgV0hFUkUgYSBAQCAnIXFoJzsKKyAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJp dG1hcCBIZWFwIFNjYW4gb24gdGVzdF90c3ZlY3RvcgorICAgICAgICAgUmVjaGVjayBDb25kOiAo YSBAQCAnIScncWgnJyc6OnRzcXVlcnkpCisgICAgICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4g b24gd293aWR4CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSBAQCAnIScncWgnJyc6OnRz cXVlcnkpCisoNSByb3dzKQorCitTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RzdmVjdG9yIFdI RVJFIGEgQEAgJyFxaCc7CisgY291bnQgCistLS0tLS0tCisgICA0MTAKKygxIHJvdykKKworRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90c3ZlY3RvciBXSEVS RSBhIEBAICd3cicgQU5EIGEgQEAgJyFxaCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJpdG1hcCBI ZWFwIFNjYW4gb24gdGVzdF90c3ZlY3RvcgorICAgICAgICAgUmVjaGVjayBDb25kOiAoKGEgQEAg Jycnd3InJyc6OnRzcXVlcnkpIEFORCAoYSBAQCAnIScncWgnJyc6OnRzcXVlcnkpKQorICAgICAg ICAgLT4gIEJpdG1hcCBJbmRleCBTY2FuIG9uIHdvd2lkeAorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKChhIEBAICcnJ3dyJycnOjp0c3F1ZXJ5KSBBTkQgKGEgQEAgJyEnJ3FoJycnOjp0c3F1 ZXJ5KSkKKyg1IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdHN2ZWN0b3IgV0hF UkUgYSBAQCAnd3InIEFORCBhIEBAICchcWgnOworIGNvdW50IAorLS0tLS0tLQorICAgIDYwCiso MSByb3cpCisKIFJFU0VUIGVuYWJsZV9zZXFzY2FuOwogSU5TRVJUIElOVE8gdGVzdF90c3ZlY3Rv ciBWQUxVRVMgKCc/Pz8nLCAnREZHOjFBLDJCLDZDLDEwIEZHSCcpOwogU0VMRUNUICogRlJPTSB0 c19zdGF0KCdTRUxFQ1QgYSBGUk9NIHRlc3RfdHN2ZWN0b3InKSBPUkRFUiBCWSBuZG9jIERFU0Ms IG5lbnRyeSBERVNDLCB3b3JkIExJTUlUIDEwOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvZ2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dpbi5zcWwKaW5kZXggYzU2NmU5 YjU4YzguLjgzNjcxN2M5OTZkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9naW4u c3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2dpbi5zcWwKQEAgLTEsNyArMSw3IEBACiAt LQogLS0gVGVzdCBHSU4gaW5kZXhlcy4KIC0tCi0tLSBUaGVyZSBhcmUgb3RoZXIgdGVzdHMgdG8g dGVzdCBkaWZmZXJlbnQgR0lOIG9wY2xhc3NlZC4gVGhpcyBpcyBmb3IgdGVzdGluZworLS0gVGhl cmUgYXJlIG90aGVyIHRlc3RzIHRvIHRlc3QgZGlmZmVyZW50IEdJTiBvcGNsYXNzZXMuIFRoaXMg aXMgZm9yIHRlc3RpbmcKIC0tIEdJTiBpdHNlbGYuCiAKIC0tIENyZWF0ZSBhbmQgcG9wdWxhdGUg YSB0ZXN0IHRhYmxlIHdpdGggYSBHSU4gaW5kZXguCkBAIC0zNCwzICszNCw5MiBAQCBpbnNlcnQg aW50byBnaW5fdGVzdF90Ymwgc2VsZWN0IGFycmF5WzEsIDMsIGddIGZyb20gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMDApIGc7CiAKIGRlbGV0ZSBmcm9tIGdpbl90ZXN0X3RibCB3aGVyZSBpIEA+IGFy cmF5WzJdOwogdmFjdXVtIGdpbl90ZXN0X3RibDsKKworLS0gVGVzdCBvcHRpbWl6YXRpb24gb2Yg ZW1wdHkgcXVlcmllcworY3JlYXRlIHRlbXAgdGFibGUgdF9naW5fdGVzdF90YmwoaSBpbnQ0W10s IGogaW50NFtdKTsKK2NyZWF0ZSBpbmRleCBvbiB0X2dpbl90ZXN0X3RibCB1c2luZyBnaW4gKGks IGopOworaW5zZXJ0IGludG8gdF9naW5fdGVzdF90YmwKK3ZhbHVlcworICAobnVsbCwgICAgbnVs bCksCisgICgne30nLCAgICBudWxsKSwKKyAgKCd7MX0nLCAgIG51bGwpLAorICAoJ3sxLDJ9Jywg bnVsbCksCisgIChudWxsLCAgICAne30nKSwKKyAgKG51bGwsICAgICd7MTB9JyksCisgICgnezEs Mn0nLCAnezEwfScpLAorICAoJ3syfScsICAgJ3sxMH0nKSwKKyAgKCd7MSwzfScsICd7fScpLAor ICAoJ3sxLDF9JywgJ3sxMH0nKTsKKworc2V0IGVuYWJsZV9zZXFzY2FuID0gb2ZmOworZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0X2dpbl90ZXN0X3RibCB3aGVyZSBhcnJheVsw XSA8QCBpOworc2VsZWN0ICogZnJvbSB0X2dpbl90ZXN0X3RibCB3aGVyZSBhcnJheVswXSA8QCBp Oworc2VsZWN0ICogZnJvbSB0X2dpbl90ZXN0X3RibCB3aGVyZSBhcnJheVswXSA8QCBpIGFuZCAn e30nOjppbnQ0W10gPEAgajsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSB0 X2dpbl90ZXN0X3RibCB3aGVyZSBpIEA+ICd7fSc7CitzZWxlY3QgKiBmcm9tIHRfZ2luX3Rlc3Rf dGJsIHdoZXJlIGkgQD4gJ3t9JzsKKworY3JlYXRlIGZ1bmN0aW9uIGV4cGxhaW5fcXVlcnlfanNv bihxdWVyeV9zcWwgdGV4dCkKK3JldHVybnMgdGFibGUgKGV4cGxhaW5fbGluZSBqc29uKQorbGFu Z3VhZ2UgcGxwZ3NxbCBhcworJCQKK2JlZ2luCisgIHNldCBlbmFibGVfc2Vxc2NhbiA9IG9mZjsK KyAgc2V0IGVuYWJsZV9iaXRtYXBzY2FuID0gb247CisgIHJldHVybiBxdWVyeSBleGVjdXRlICdF WFBMQUlOIChBTkFMWVpFLCBGT1JNQVQganNvbikgJyB8fCBxdWVyeV9zcWw7CitlbmQ7CiskJDsK KworY3JlYXRlIGZ1bmN0aW9uIGV4ZWN1dGVfdGV4dF9xdWVyeV9pbmRleChxdWVyeV9zcWwgdGV4 dCkKK3JldHVybnMgc2V0b2YgdGV4dAorbGFuZ3VhZ2UgcGxwZ3NxbAorYXMKKyQkCitiZWdpbgor ICBzZXQgZW5hYmxlX3NlcXNjYW4gPSBvZmY7CisgIHNldCBlbmFibGVfYml0bWFwc2NhbiA9IG9u OworICByZXR1cm4gcXVlcnkgZXhlY3V0ZSBxdWVyeV9zcWw7CitlbmQ7CiskJDsKKworY3JlYXRl IGZ1bmN0aW9uIGV4ZWN1dGVfdGV4dF9xdWVyeV9oZWFwKHF1ZXJ5X3NxbCB0ZXh0KQorcmV0dXJu cyBzZXRvZiB0ZXh0CitsYW5ndWFnZSBwbHBnc3FsCithcworJCQKK2JlZ2luCisgIHNldCBlbmFi bGVfc2Vxc2NhbiA9IG9uOworICBzZXQgZW5hYmxlX2JpdG1hcHNjYW4gPSBvZmY7CisgIHJldHVy biBxdWVyeSBleGVjdXRlIHF1ZXJ5X3NxbDsKK2VuZDsKKyQkOworCistLSBjaGVjayBudW1iZXIg b2Ygcm93cyByZXR1cm5lZCBieSBpbmRleCBhbmQgcmVtb3ZlZCBieSByZWNoZWNrCitzZWxlY3QK KyAgcXVlcnksCisgIGpzLT4wLT4nUGxhbictPidQbGFucyctPjAtPidBY3R1YWwgUm93cycgYXMg InJldHVybiBieSBpbmRleCIsCisgIGpzLT4wLT4nUGxhbictPidSb3dzIFJlbW92ZWQgYnkgSW5k ZXggUmVjaGVjaycgYXMgInJlbW92ZWQgYnkgcmVjaGVjayIsCisgIChyZXNfaW5kZXggPSByZXNf aGVhcCkgYXMgIm1hdGNoIgorZnJvbQorICAodmFsdWVzCisgICAgKCQkIGkgQD4gJ3t9JyAkJCks CisgICAgKCQkIGogQD4gJ3t9JyAkJCksCisgICAgKCQkIGkgQD4gJ3t9JyBhbmQgaiBAPiAne30n ICQkKSwKKyAgICAoJCQgaSBAPiAnezF9JyAkJCksCisgICAgKCQkIGkgQD4gJ3sxfScgYW5kIGog QD4gJ3t9JyAkJCksCisgICAgKCQkIGkgQD4gJ3sxfScgYW5kIGkgQD4gJ3t9JyBhbmQgaiBAPiAn e30nICQkKSwKKyAgICAoJCQgaiBAPiAnezEwfScgJCQpLAorICAgICgkJCBqIEA+ICd7MTB9JyBh bmQgaSBAPiAne30nICQkKSwKKyAgICAoJCQgaiBAPiAnezEwfScgYW5kIGogQD4gJ3t9JyBhbmQg aSBAPiAne30nICQkKSwKKyAgICAoJCQgaSBAPiAnezF9JyBhbmQgaiBAPiAnezEwfScgJCQpCisg ICkgcShxdWVyeSksCisgIGxhdGVyYWwgZXhwbGFpbl9xdWVyeV9qc29uKCQkc2VsZWN0ICogZnJv bSB0X2dpbl90ZXN0X3RibCB3aGVyZSAkJCB8fCBxdWVyeSkganMsCisgIGxhdGVyYWwgZXhlY3V0 ZV90ZXh0X3F1ZXJ5X2luZGV4KCQkc2VsZWN0IHN0cmluZ19hZ2coKGksIGopOjp0ZXh0LCAnICcp IGZyb20gdF9naW5fdGVzdF90Ymwgd2hlcmUgJCQgfHwgcXVlcnkpIHJlc19pbmRleCwKKyAgbGF0 ZXJhbCBleGVjdXRlX3RleHRfcXVlcnlfaGVhcCgkJHNlbGVjdCBzdHJpbmdfYWdnKChpLCBqKTo6 dGV4dCwgJyAnKSBmcm9tIHRfZ2luX3Rlc3RfdGJsIHdoZXJlICQkIHx8IHF1ZXJ5KSByZXNfaGVh cDsKKworcmVzZXQgZW5hYmxlX3NlcXNjYW47CityZXNldCBlbmFibGVfYml0bWFwc2NhbjsKKwor ZHJvcCB0YWJsZSB0X2dpbl90ZXN0X3RibDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3RzZWFyY2guc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvdHNlYXJjaC5zcWwKaW5kZXgg ZWNlODBiOTgzYzUuLjE0ZGE3ZWRkODQxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC90c2VhcmNoLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC90c2VhcmNoLnNxbApAQCAt MTExLDYgKzExMSwxNSBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RzdmVjdG9yIFdIRVJF IGEgQEAgYW55ICgne3dyLHFofScpOwogU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90c3ZlY3Rv ciBXSEVSRSBhIEBAICdub19zdWNoX2xleGVtZSc7CiBTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3RzdmVjdG9yIFdIRVJFIGEgQEAgJyFub19zdWNoX2xleGVtZSc7CiAKKy0tIFRlc3Qgb3B0aW1p emF0aW9uIG9mIG5vbi1lbXB0eSBHSU5fU0VBUkNIX01PREVfQUxMIHF1ZXJpZXMKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdHN2ZWN0b3IgV0hFUkUgYSBA QCAnIXFoJzsKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdHN2ZWN0b3IgV0hFUkUgYSBAQCAn IXFoJzsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90 c3ZlY3RvciBXSEVSRSBhIEBAICd3cicgQU5EIGEgQEAgJyFxaCc7CitTRUxFQ1QgY291bnQoKikg RlJPTSB0ZXN0X3RzdmVjdG9yIFdIRVJFIGEgQEAgJ3dyJyBBTkQgYSBAQCAnIXFoJzsKKwogUkVT RVQgZW5hYmxlX3NlcXNjYW47CiAKIElOU0VSVCBJTlRPIHRlc3RfdHN2ZWN0b3IgVkFMVUVTICgn Pz8/JywgJ0RGRzoxQSwyQiw2QywxMCBGR0gnKTsK --0000000000002f7239059c21615d--