Re: Duplicate Workers entries in some EXPLAIN plans
Maciek Sakrejda <[email protected]> Tue, 14 Jan 2020 23:22:04 -0800
| Newsgroups | gmane.comp.db.postgresql.devel.general |
|---|---|
| Message-ID | <CAOtHd0CC1iVG0ZA08onswgiOU9++Qhec0WRtECk-7zWM+nE2Rg@mail.gmail.com> |
--0000000000006d637d059c28915f Content-Type: text/plain; charset="UTF-8" Thanks for the review! I looked at <b925a00f4ef> and rebased the patch on current master, ac5bdf6. I introduced a new test file because this bug is specifically about EXPLAIN output (as opposed to query execution or planning functionality), and it didn't seem like a test would fit in any of the other files. I focused on testing just the behavior around this specific bug (and fix). I think eventually we should probably test other more fundamental EXPLAIN features (and I'm happy to contribute to that) in that file, but that seems outside of the scope of this patch. Any thoughts on what we should do with text mode output (which is untouched right now)? The output Andres proposed above makes sense to me, but I'd like to get more input. --0000000000006d637d059c28915f Content-Type: text/x-patch; charset="US-ASCII"; name="merge-explain-worker-output-v2.patch" Content-Disposition: attachment; filename="merge-explain-worker-output-v2.patch" Content-Transfer-Encoding: base64 Content-ID: <f_k5ez7tnp0> X-Attachment-Id: f_k5ez7tnp0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBkMTg5YjhkNTczLi45NmE4OTczODg0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXhwbGFpbi5jCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIHZvaWQgc2hvd19zb3J0 b3JkZXJfb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgTm9kZSAqc29ydGV4cHIsCiAJCQkJCQkJCSAg IE9pZCBzb3J0T3BlcmF0b3IsIE9pZCBjb2xsYXRpb24sIGJvb2wgbnVsbHNGaXJzdCk7CiBzdGF0 aWMgdm9pZCBzaG93X3RhYmxlc2FtcGxlKFRhYmxlU2FtcGxlQ2xhdXNlICp0c2MsIFBsYW5TdGF0 ZSAqcGxhbnN0YXRlLAogCQkJCQkJCSBMaXN0ICphbmNlc3RvcnMsIEV4cGxhaW5TdGF0ZSAqZXMp Owotc3RhdGljIHZvaWQgc2hvd19zb3J0X2luZm8oU29ydFN0YXRlICpzb3J0c3RhdGUsIEV4cGxh aW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgc2hvd19zb3J0X2luZm8oU29ydFN0YXRlICpzb3J0 c3RhdGUsIFN0cmluZ0luZm8qIHdvcmtlcl9zdHJzLCBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRp YyB2b2lkIHNob3dfaGFzaF9pbmZvKEhhc2hTdGF0ZSAqaGFzaHN0YXRlLCBFeHBsYWluU3RhdGUg KmVzKTsKIHN0YXRpYyB2b2lkIHNob3dfdGlkYml0bWFwX2luZm8oQml0bWFwSGVhcFNjYW5TdGF0 ZSAqcGxhbnN0YXRlLAogCQkJCQkJCQlFeHBsYWluU3RhdGUgKmVzKTsKQEAgLTI4OSw2ICsyODks NyBAQCBOZXdFeHBsYWluU3RhdGUodm9pZCkKIAllcy0+Y29zdHMgPSB0cnVlOwogCS8qIFByZXBh cmUgb3V0cHV0IGJ1ZmZlci4gKi8KIAllcy0+c3RyID0gbWFrZVN0cmluZ0luZm8oKTsKKwllcy0+ cm9vdF9zdHIgPSBlcy0+c3RyOwogCiAJcmV0dXJuIGVzOwogfQpAQCAtMTA5MCw5ICsxMDkxLDIw IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJ Y29uc3QgY2hhciAqcGFydGlhbG1vZGUgPSBOVUxMOwogCWNvbnN0IGNoYXIgKm9wZXJhdGlvbiA9 IE5VTEw7CiAJY29uc3QgY2hhciAqY3VzdG9tX25hbWUgPSBOVUxMOworCVN0cmluZ0luZm8gKndv cmtlcl9zdHJzID0gTlVMTDsKIAlpbnQJCQlzYXZlX2luZGVudCA9IGVzLT5pbmRlbnQ7CiAJYm9v bAkJaGFzY2hpbGRyZW47CiAKKwkvKiBQcmVwYXJlIHBlci13b3JrZXIgb3V0cHV0ICovCisJaWYg KGVzLT5hbmFseXplICYmIHBsYW5zdGF0ZS0+d29ya2VyX2luc3RydW1lbnQpIHsKKwkJaW50IG51 bV93b3JrZXJzID0gcGxhbnN0YXRlLT53b3JrZXJfaW5zdHJ1bWVudC0+bnVtX3dvcmtlcnM7CisJ CWludCBuOworCQl3b3JrZXJfc3RycyA9IChTdHJpbmdJbmZvICopIHBhbGxvYzAobnVtX3dvcmtl cnMgKiBzaXplb2YoU3RyaW5nSW5mbykpOworCQlmb3IgKG4gPSAwOyBuIDwgbnVtX3dvcmtlcnM7 IG4rKykgeworCQkJd29ya2VyX3N0cnNbbl0gPSBtYWtlU3RyaW5nSW5mbygpOworCQl9CisJfQor CiAJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCXsKIAkJY2FzZSBUX1Jlc3VsdDoKQEAgLTEzNTcs NiArMTM2OSw2NCBAQCBFeHBsYWluTm9kZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5j ZXN0b3JzLAogCQlFeHBsYWluUHJvcGVydHlCb29sKCJQYXJhbGxlbCBBd2FyZSIsIHBsYW4tPnBh cmFsbGVsX2F3YXJlLCBlcyk7CiAJfQogCisJLyogUHJlcGFyZSB3b3JrZXIgZ2VuZXJhbCBleGVj dXRpb24gZGV0YWlscyAqLworCWlmIChlcy0+YW5hbHl6ZSAmJiBlcy0+dmVyYm9zZSAmJiBwbGFu c3RhdGUtPndvcmtlcl9pbnN0cnVtZW50KQorCXsKKwkJV29ya2VySW5zdHJ1bWVudGF0aW9uICp3 ID0gcGxhbnN0YXRlLT53b3JrZXJfaW5zdHJ1bWVudDsKKwkJaW50CQkJbjsKKworCQlmb3IgKG4g PSAwOyBuIDwgdy0+bnVtX3dvcmtlcnM7ICsrbikKKwkJeworCQkJSW5zdHJ1bWVudGF0aW9uICpp bnN0cnVtZW50ID0gJnctPmluc3RydW1lbnRbbl07CisJCQlkb3VibGUJCW5sb29wcyA9IGluc3Ry dW1lbnQtPm5sb29wczsKKwkJCWRvdWJsZQkJc3RhcnR1cF9tczsKKwkJCWRvdWJsZQkJdG90YWxf bXM7CisJCQlkb3VibGUJCXJvd3M7CisKKwkJCWlmIChubG9vcHMgPD0gMCkKKwkJCQljb250aW51 ZTsKKwkJCXN0YXJ0dXBfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50LT5zdGFydHVwIC8gbmxvb3Bz OworCQkJdG90YWxfbXMgPSAxMDAwLjAgKiBpbnN0cnVtZW50LT50b3RhbCAvIG5sb29wczsKKwkJ CXJvd3MgPSBpbnN0cnVtZW50LT5udHVwbGVzIC8gbmxvb3BzOworCisJCQlpZiAoZXMtPmZvcm1h dCA9PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm9TcGFj ZXMoZXMtPnN0ciwgZXMtPmluZGVudCAqIDIpOworCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0 ciwgIldvcmtlciAlZDogIiwgbik7CisJCQkJaWYgKGVzLT50aW1pbmcpCisJCQkJCWFwcGVuZFN0 cmluZ0luZm8oZXMtPnN0ciwKKwkJCQkJCQkJCSAiYWN0dWFsIHRpbWU9JS4zZi4uJS4zZiByb3dz PSUuMGYgbG9vcHM9JS4wZlxuIiwKKwkJCQkJCQkJCSBzdGFydHVwX21zLCB0b3RhbF9tcywgcm93 cywgbmxvb3BzKTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwKKwkJ CQkJCQkJCSAiYWN0dWFsIHJvd3M9JS4wZiBsb29wcz0lLjBmXG4iLAorCQkJCQkJCQkJIHJvd3Ms IG5sb29wcyk7CisJCQkJZXMtPmluZGVudCsrOworCQkJCWlmIChlcy0+YnVmZmVycykKKwkJCQkJ c2hvd19idWZmZXJfdXNhZ2UoZXMsICZpbnN0cnVtZW50LT5idWZ1c2FnZSk7CisJCQkJZXMtPmlu ZGVudC0tOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUV4cGxhaW5PcGVuV29ya2VyKHdvcmtl cl9zdHJzW25dLCBlcyk7CisKKwkJCQlpZiAoZXMtPnRpbWluZykKKwkJCQl7CisJCQkJCUV4cGxh aW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgU3RhcnR1cCBUaW1lIiwgIm1zIiwKKwkJCQkJCQkJCQkg c3RhcnR1cF9tcywgMywgZXMpOworCQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFRv dGFsIFRpbWUiLCAibXMiLAorCQkJCQkJCQkJCSB0b3RhbF9tcywgMywgZXMpOworCQkJCX0KKwkJ CQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIFJvd3MiLCBOVUxMLCByb3dzLCAwLCBlcyk7 CisJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBMb29wcyIsIE5VTEwsIG5sb29wcywg MCwgZXMpOworCQkJfQorCQl9CisKKwkJaWYgKGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRf VEVYVCkgeworCQkJRXhwbGFpbkNsb3NlV29ya2VyKGVzKTsKKwkJfQorCX0KKwogCXN3aXRjaCAo bm9kZVRhZyhwbGFuKSkKIAl7CiAJCWNhc2UgVF9TZXFTY2FuOgpAQCAtMTg1Niw3ICsxOTI2LDcg QEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJ CWJyZWFrOwogCQljYXNlIFRfU29ydDoKIAkJCXNob3dfc29ydF9rZXlzKGNhc3ROb2RlKFNvcnRT dGF0ZSwgcGxhbnN0YXRlKSwgYW5jZXN0b3JzLCBlcyk7Ci0JCQlzaG93X3NvcnRfaW5mbyhjYXN0 Tm9kZShTb3J0U3RhdGUsIHBsYW5zdGF0ZSksIGVzKTsKKwkJCXNob3dfc29ydF9pbmZvKGNhc3RO b2RlKFNvcnRTdGF0ZSwgcGxhbnN0YXRlKSwgd29ya2VyX3N0cnMsIGVzKTsKIAkJCWJyZWFrOwog CQljYXNlIFRfTWVyZ2VBcHBlbmQ6CiAJCQlzaG93X21lcmdlX2FwcGVuZF9rZXlzKGNhc3ROb2Rl KE1lcmdlQXBwZW5kU3RhdGUsIHBsYW5zdGF0ZSksCkBAIC0xODg1LDc0ICsxOTU1LDMwIEBAIEV4 cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJaWYgKGVz LT5idWZmZXJzICYmIHBsYW5zdGF0ZS0+aW5zdHJ1bWVudCkKIAkJc2hvd19idWZmZXJfdXNhZ2Uo ZXMsICZwbGFuc3RhdGUtPmluc3RydW1lbnQtPmJ1ZnVzYWdlKTsKIAotCS8qIFNob3cgd29ya2Vy IGRldGFpbCAqLwotCWlmIChlcy0+YW5hbHl6ZSAmJiBlcy0+dmVyYm9zZSAmJiAhZXMtPmhpZGVf d29ya2VycyAmJgotCQlwbGFuc3RhdGUtPndvcmtlcl9pbnN0cnVtZW50KQorCS8qIFByZXBhcmUg d29ya2VyIGJ1ZmZlciB1c2FnZSAqLworCWlmIChlcy0+YnVmZmVycyAmJiBlcy0+YW5hbHl6ZSAm JiBlcy0+dmVyYm9zZSAmJiAhZXMtPmhpZGVfd29ya2VycworCQkmJiBwbGFuc3RhdGUtPndvcmtl cl9pbnN0cnVtZW50ICYmIGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKIAl7CiAJ CVdvcmtlckluc3RydW1lbnRhdGlvbiAqdyA9IHBsYW5zdGF0ZS0+d29ya2VyX2luc3RydW1lbnQ7 Ci0JCWJvb2wJCW9wZW5lZF9ncm91cCA9IGZhbHNlOwogCQlpbnQJCQluOwogCiAJCWZvciAobiA9 IDA7IG4gPCB3LT5udW1fd29ya2VyczsgKytuKQogCQl7CiAJCQlJbnN0cnVtZW50YXRpb24gKmlu c3RydW1lbnQgPSAmdy0+aW5zdHJ1bWVudFtuXTsKIAkJCWRvdWJsZQkJbmxvb3BzID0gaW5zdHJ1 bWVudC0+bmxvb3BzOwotCQkJZG91YmxlCQlzdGFydHVwX21zOwotCQkJZG91YmxlCQl0b3RhbF9t czsKLQkJCWRvdWJsZQkJcm93czsKIAogCQkJaWYgKG5sb29wcyA8PSAwKQogCQkJCWNvbnRpbnVl OwotCQkJc3RhcnR1cF9tcyA9IDEwMDAuMCAqIGluc3RydW1lbnQtPnN0YXJ0dXAgLyBubG9vcHM7 Ci0JCQl0b3RhbF9tcyA9IDEwMDAuMCAqIGluc3RydW1lbnQtPnRvdGFsIC8gbmxvb3BzOwotCQkJ cm93cyA9IGluc3RydW1lbnQtPm50dXBsZXMgLyBubG9vcHM7CiAKLQkJCWlmIChlcy0+Zm9ybWF0 ID09IEVYUExBSU5fRk9STUFUX1RFWFQpCi0JCQl7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mb1NwYWNl cyhlcy0+c3RyLCBlcy0+aW5kZW50ICogMik7Ci0JCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3Ry LCAiV29ya2VyICVkOiAiLCBuKTsKLQkJCQlpZiAoZXMtPnRpbWluZykKLQkJCQkJYXBwZW5kU3Ry aW5nSW5mbyhlcy0+c3RyLAotCQkJCQkJCQkJICJhY3R1YWwgdGltZT0lLjNmLi4lLjNmIHJvd3M9 JS4wZiBsb29wcz0lLjBmXG4iLAotCQkJCQkJCQkJIHN0YXJ0dXBfbXMsIHRvdGFsX21zLCByb3dz LCBubG9vcHMpOwotCQkJCWVsc2UKLQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhlcy0+c3RyLAotCQkJ CQkJCQkJICJhY3R1YWwgcm93cz0lLjBmIGxvb3BzPSUuMGZcbiIsCi0JCQkJCQkJCQkgcm93cywg bmxvb3BzKTsKLQkJCQllcy0+aW5kZW50Kys7Ci0JCQkJaWYgKGVzLT5idWZmZXJzKQotCQkJCQlz aG93X2J1ZmZlcl91c2FnZShlcywgJmluc3RydW1lbnQtPmJ1ZnVzYWdlKTsKLQkJCQllcy0+aW5k ZW50LS07Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJaWYgKCFvcGVuZWRfZ3JvdXApCi0JCQkJ ewotCQkJCQlFeHBsYWluT3Blbkdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBmYWxzZSwgZXMp OwotCQkJCQlvcGVuZWRfZ3JvdXAgPSB0cnVlOwotCQkJCX0KLQkJCQlFeHBsYWluT3Blbkdyb3Vw KCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7Ci0JCQkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigi V29ya2VyIE51bWJlciIsIE5VTEwsIG4sIGVzKTsKLQotCQkJCWlmIChlcy0+dGltaW5nKQotCQkJ CXsKLQkJCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkFjdHVhbCBTdGFydHVwIFRpbWUiLCAibXMi LAotCQkJCQkJCQkJCSBzdGFydHVwX21zLCAzLCBlcyk7Ci0JCQkJCUV4cGxhaW5Qcm9wZXJ0eUZs b2F0KCJBY3R1YWwgVG90YWwgVGltZSIsICJtcyIsCi0JCQkJCQkJCQkJIHRvdGFsX21zLCAzLCBl cyk7Ci0JCQkJfQotCQkJCUV4cGxhaW5Qcm9wZXJ0eUZsb2F0KCJBY3R1YWwgUm93cyIsIE5VTEws IHJvd3MsIDAsIGVzKTsKLQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiQWN0dWFsIExvb3BzIiwg TlVMTCwgbmxvb3BzLCAwLCBlcyk7Ci0KLQkJCQlpZiAoZXMtPmJ1ZmZlcnMpCi0JCQkJCXNob3df YnVmZmVyX3VzYWdlKGVzLCAmaW5zdHJ1bWVudC0+YnVmdXNhZ2UpOwotCi0JCQkJRXhwbGFpbkNs b3NlR3JvdXAoIldvcmtlciIsIE5VTEwsIHRydWUsIGVzKTsKLQkJCX0KKwkJCUV4cGxhaW5PcGVu V29ya2VyKHdvcmtlcl9zdHJzW25dLCBlcyk7CisJCQlzaG93X2J1ZmZlcl91c2FnZShlcywgJmlu c3RydW1lbnQtPmJ1ZnVzYWdlKTsKIAkJfQorCQlFeHBsYWluQ2xvc2VXb3JrZXIoZXMpOworCX0K IAotCQlpZiAob3BlbmVkX2dyb3VwKQotCQkJRXhwbGFpbkNsb3NlR3JvdXAoIldvcmtlcnMiLCAi V29ya2VycyIsIGZhbHNlLCBlcyk7CisJLyogU2hvdyB3b3JrZXIgZGV0YWlsICovCisJaWYgKHBs YW5zdGF0ZS0+d29ya2VyX2luc3RydW1lbnQpIHsKKwkJRXhwbGFpbkZsdXNoV29ya2Vycyh3b3Jr ZXJfc3RycywgcGxhbnN0YXRlLT53b3JrZXJfaW5zdHJ1bWVudC0+bnVtX3dvcmtlcnMsIGVzKTsK IAl9CiAKIAkvKiBHZXQgcmVhZHkgdG8gZGlzcGxheSB0aGUgY2hpbGQgcGxhbnMgKi8KQEAgLTI1 NTIsNyArMjU3OCw3IEBAIHNob3dfdGFibGVzYW1wbGUoVGFibGVTYW1wbGVDbGF1c2UgKnRzYywg UGxhblN0YXRlICpwbGFuc3RhdGUsCiAgKiBJZiBpdCdzIEVYUExBSU4gQU5BTFlaRSwgc2hvdyB0 dXBsZXNvcnQgc3RhdHMgZm9yIGEgc29ydCBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1zaG93X3Nv cnRfaW5mbyhTb3J0U3RhdGUgKnNvcnRzdGF0ZSwgRXhwbGFpblN0YXRlICplcykKK3Nob3dfc29y dF9pbmZvKFNvcnRTdGF0ZSAqc29ydHN0YXRlLCBTdHJpbmdJbmZvICp3b3JrZXJfc3RycywgRXhw bGFpblN0YXRlICplcykKIHsKIAlpZiAoIWVzLT5hbmFseXplKQogCQlyZXR1cm47CkBAIC0yNTkz LDcgKzI2MTksNiBAQCBzaG93X3NvcnRfaW5mbyhTb3J0U3RhdGUgKnNvcnRzdGF0ZSwgRXhwbGFp blN0YXRlICplcykKIAlpZiAoc29ydHN0YXRlLT5zaGFyZWRfaW5mbyAhPSBOVUxMKQogCXsKIAkJ aW50CQkJbjsKLQkJYm9vbAkJb3BlbmVkX2dyb3VwID0gZmFsc2U7CiAKIAkJZm9yIChuID0gMDsg biA8IHNvcnRzdGF0ZS0+c2hhcmVkX2luZm8tPm51bV93b3JrZXJzOyBuKyspCiAJCXsKQEAgLTI2 MjAsMjEgKzI2NDUsMTUgQEAgc2hvd19zb3J0X2luZm8oU29ydFN0YXRlICpzb3J0c3RhdGUsIEV4 cGxhaW5TdGF0ZSAqZXMpCiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJaWYgKCFvcGVuZWRfZ3Jv dXApCi0JCQkJewotCQkJCQlFeHBsYWluT3Blbkdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBm YWxzZSwgZXMpOwotCQkJCQlvcGVuZWRfZ3JvdXAgPSB0cnVlOwotCQkJCX0KLQkJCQlFeHBsYWlu T3Blbkdyb3VwKCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7Ci0JCQkJRXhwbGFpblByb3BlcnR5 SW50ZWdlcigiV29ya2VyIE51bWJlciIsIE5VTEwsIG4sIGVzKTsKKwkJCQlFeHBsYWluT3Blbldv cmtlcih3b3JrZXJfc3Ryc1tuXSwgZXMpOwogCQkJCUV4cGxhaW5Qcm9wZXJ0eVRleHQoIlNvcnQg TWV0aG9kIiwgc29ydE1ldGhvZCwgZXMpOwogCQkJCUV4cGxhaW5Qcm9wZXJ0eUludGVnZXIoIlNv cnQgU3BhY2UgVXNlZCIsICJrQiIsIHNwYWNlVXNlZCwgZXMpOwogCQkJCUV4cGxhaW5Qcm9wZXJ0 eVRleHQoIlNvcnQgU3BhY2UgVHlwZSIsIHNwYWNlVHlwZSwgZXMpOwotCQkJCUV4cGxhaW5DbG9z ZUdyb3VwKCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7CiAJCQl9CiAJCX0KLQkJaWYgKG9wZW5l ZF9ncm91cCkKLQkJCUV4cGxhaW5DbG9zZUdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBmYWxz ZSwgZXMpOworCQlpZiAoZXMtPmZvcm1hdCAhPSBFWFBMQUlOX0ZPUk1BVF9URVhUKSB7CisJCQlF eHBsYWluQ2xvc2VXb3JrZXIoZXMpOworCQl9CiAJfQogfQogCkBAIC0zNzUxLDYgKzM3NzAsNjIg QEAgRXhwbGFpbkNsb3NlR3JvdXAoY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqbGFi ZWxuYW1lLAogCX0KIH0KIAorLyoKKyAqIEJlZ2luIG91dHB1dCBmb3IgYSBzcGVjaWZpYyB3b3Jr ZXIuIElmIHdlIGFyZSBjdXJyZW50bHkgcHJvZHVjaW5nIG91dHB1dAorICogZm9yIGFub3RoZXIg d29ya2VyLCBjbG9zZSB0aGF0IHdvcmtlciBhdXRvbWF0aWNhbGx5LgorICovCit2b2lkCitFeHBs YWluT3BlbldvcmtlcihTdHJpbmdJbmZvIHdvcmtlcl9zdHIsIEV4cGxhaW5TdGF0ZSAqZXMpCit7 CisJLyoKKwkgKiBXZSBpbmRlbnQgdHdpY2UtLW9uY2UgZm9yIHRoZSAiV29ya2VyIiBncm91cCBh bmQgb25jZSBmb3IgdGhlICJXb3JrZXJzIgorCSAqIGdyb3VwLS1idXQgb25seSBuZWVkIHRvIGFk anVzdCBpbmRlbnRhdGlvbiBvbmNlIGZvciBlYWNoIHN0cmluZyBvZgorCSAqIEV4cGxhaW5PcGVu V29ya2VyIGNhbGxzLgorCSAqLworCWlmIChlcy0+c3RyID09IGVzLT5yb290X3N0cikgeworCQll cy0+aW5kZW50ICs9IDI7CisJfQorCisJZXMtPnByaW50X3dvcmtlcnMgPSB0cnVlOworCWVzLT5z dHIgPSB3b3JrZXJfc3RyOworfQorCisvKgorICogRXhwbGljaXRseSBlbmQgb3V0cHV0IGZvciB0 aGUgY3VycmVudCB3b3JrZXIgYW5kIHJlc3VtZSBvdXRwdXQKKyAqIGZvciB0aGUgcm9vdCBvZiB0 aGUgbm9kZS4KKyAqLwordm9pZAorRXhwbGFpbkNsb3NlV29ya2VyKEV4cGxhaW5TdGF0ZSAqZXMp Cit7CisJZXMtPmluZGVudCAtPSAyOworCWVzLT5zdHIgPSBlcy0+cm9vdF9zdHI7Cit9CisKKy8q CisgKiBGbHVzaCBvdXRwdXQgcmVnaXN0ZXJlZCBzbyBmYXIgdG8gdGhlIG91dHB1dCBidWZmZXIg YW5kIGRlYWxsb2NhdGUKKyAqIG1lY2hhbmlzbSBmb3Igd3JpdGluZyB0byB3b3JrZXJzLgorICov Cit2b2lkCitFeHBsYWluRmx1c2hXb3JrZXJzKFN0cmluZ0luZm8qIHdvcmtlcl9zdHJzLCBpbnQg bnVtX3dvcmtlcnMsIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJaW50IGk7CisKKwlpZiAoIWVzLT5w cmludF93b3JrZXJzKSB7CisJCXJldHVybjsKKwl9CisKKwlFeHBsYWluT3Blbkdyb3VwKCJXb3Jr ZXJzIiwgIldvcmtlcnMiLCBmYWxzZSwgZXMpOworCWZvciAoaSA9IDA7IGkgPCBudW1fd29ya2Vy czsgaSsrKSB7CisJCUV4cGxhaW5PcGVuR3JvdXAoIldvcmtlciIsIE5VTEwsIHRydWUsIGVzKTsK KwkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiV29ya2VyIE51bWJlciIsIE5VTEwsIGksIGVzKTsK KwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhlcy0+c3RyLCB3b3JrZXJfc3Ryc1tpXS0+ZGF0YSk7 CisJCUV4cGxhaW5DbG9zZUdyb3VwKCJXb3JrZXIiLCBOVUxMLCB0cnVlLCBlcyk7CisJfQorCUV4 cGxhaW5DbG9zZUdyb3VwKCJXb3JrZXJzIiwgIldvcmtlcnMiLCBmYWxzZSwgZXMpOworCS8vIGRv IHdlIGhhdmUgYW55IG90aGVyIGNsZWFudXAgdG8gZG8/CisJZXMtPnByaW50X3dvcmtlcnMgPSBm YWxzZTsKK30KKwogLyoKICAqIEVtaXQgYSAiZHVtbXkiIGdyb3VwIHRoYXQgbmV2ZXIgaGFzIGFu eSBtZW1iZXJzLgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4u aCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA0NTAyN2E3YzQ3Li4yOTE5 YjI3ODBkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC0yNyw3ICsyNyw3IEBAIHR5cGVkZWYg ZW51bSBFeHBsYWluRm9ybWF0CiAKIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogewotCVN0 cmluZ0luZm8Jc3RyOwkJCS8qIG91dHB1dCBidWZmZXIgKi8KKwlTdHJpbmdJbmZvCXN0cjsJCQkv KiBjdXJyZW50IG91dHB1dCBidWZmZXIgKi8KIAkvKiBvcHRpb25zICovCiAJYm9vbAkJdmVyYm9z ZTsJCS8qIGJlIHZlcmJvc2UgKi8KIAlib29sCQlhbmFseXplOwkJLyogcHJpbnQgYWN0dWFsIHRp bWVzICovCkBAIC00MCw2ICs0MCw4IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCS8q IHN0YXRlIGZvciBvdXRwdXQgZm9ybWF0dGluZyAtLS0gbm90IHJlc2V0IGZvciBlYWNoIG5ldyBw bGFuIHRyZWUgKi8KIAlpbnQJCQlpbmRlbnQ7CQkJLyogY3VycmVudCBpbmRlbnRhdGlvbiBsZXZl bCAqLwogCUxpc3QJICAgKmdyb3VwaW5nX3N0YWNrOyAvKiBmb3JtYXQtc3BlY2lmaWMgZ3JvdXBp bmcgc3RhdGUgKi8KKwlib29sICAgICAgICBwcmludF93b3JrZXJzOyAgLyogd2hldGhlciBjdXJy ZW50IG5vZGUgaGFzIHdvcmtlciBtZXRhZGF0YSAqLworCVN0cmluZ0luZm8Jcm9vdF9zdHI7CQkv KiByb290IG91dHB1dCBidWZmZXIgKi8KIAkvKiBzdGF0ZSByZWxhdGVkIHRvIHRoZSBjdXJyZW50 IHBsYW4gdHJlZSAoZmlsbGVkIGJ5IEV4cGxhaW5QcmludFBsYW4pICovCiAJUGxhbm5lZFN0bXQg KnBzdG10OwkJCS8qIHRvcCBvZiBwbGFuICovCiAJTGlzdAkgICAqcnRhYmxlOwkJCS8qIHJhbmdl IHRhYmxlICovCkBAIC0xMTEsNCArMTEzLDkgQEAgZXh0ZXJuIHZvaWQgRXhwbGFpbk9wZW5Hcm91 cChjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpsYWJlbG5hbWUsCiBleHRlcm4gdm9p ZCBFeHBsYWluQ2xvc2VHcm91cChjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpsYWJl bG5hbWUsCiAJCQkJCQkJICBib29sIGxhYmVsZWQsIEV4cGxhaW5TdGF0ZSAqZXMpOwogCitleHRl cm4gdm9pZCBFeHBsYWluT3BlbldvcmtlcihTdHJpbmdJbmZvIHdvcmtlcl9zdHIsIEV4cGxhaW5T dGF0ZSAqZXMpOworZXh0ZXJuIHZvaWQgRXhwbGFpbkNsb3NlV29ya2VyKEV4cGxhaW5TdGF0ZSAq ZXMpOworZXh0ZXJuIHZvaWQgRXhwbGFpbkZsdXNoV29ya2VycyhTdHJpbmdJbmZvICp3b3JrZXJf c3RycywgaW50IG51bV93b3JrZXJzLCBFeHBsYWluU3RhdGUgKmVzKTsKKworCiAjZW5kaWYJCQkJ CQkJLyogRVhQTEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2V4cGxhaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kYjk5MTRkYjdiCi0tLSAvZGV2L251 bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9leHBsYWluLm91dApAQCAtMCwwICsx LDc1IEBACistLQorLS0gRVhQTEFJTgorLS0KKy0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIGV4YW1p bmluZyBqc29uIGV4cGxhaW4gb3V0cHV0CistLSByZXR1cm4gYSBqc29uIGV4cGxhaW4gb2YgZ2l2 ZW4gcXVlcnkKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGpzb25fZXhwbGFpbihxdWVyeSB0 ZXh0LCB2YXJpYWRpYyBvcHRzIHRleHRbXSkKKyAgUkVUVVJOUyBqc29uIExBTkdVQUdFIFBMUEdT UUwgQVMgJCQKK0RFQ0xBUkUKKyAgcGxhbiBqc29uOworQkVHSU4KKyAgRVhFQ1VURSAnRVhQTEFJ TiAoJyB8fCBhcnJheV90b19zdHJpbmcoYXJyYXlfYXBwZW5kKG9wdHMsICdGT1JNQVQgSlNPTikg JyksICcsICcpIHx8IHF1ZXJ5IElOVE8gU1RSSUNUIHBsYW47CisgIFJFVFVSTiBwbGFuOworRU5E OworJCQ7CisvKgorICogVGFrZXMgYSBqc29uIG9iamVjdCBhbmQgcHJvY2Vzc2VzIGl0cyBrZXlz IGFuZCB2YWx1ZXMuIEZvciBldmVyeQorICogbWF0Y2hpbmcga2V5IHdob3NlIHZhbHVlIGlzIGEg bnVtYmVyLCBzZXQgaXQgdG8gemVybyB0byBmYWNpbGl0YXRlCisgKiBjb21wYXJpc29ucyBmb3Ig dmFsdWVzIHRoYXQgY2FuIHZhcnkgYWNyb3NzIGV4ZWN1dGlvbnMuIElmIG5vdCBhIG51bWJlciwK KyAqIHNldCB0aGUgdmFsdWUgdG8gLTEgdG8gaW5kaWNhdGUgd2UgbWF0Y2hlZCBhbiB1bmV4cGVj dGVkIGtleS4gUmV0dXJuCisgKiBub24tbWF0Y2hpbmcga2V5cyBhbmQgdmFsdWVzIHVubW9kaWZp ZWQuCisgKi8KK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGpzb25fbm9ybWFsaXplX251bWVy aWNfa2V5c19tYXRjaGluZyhvYmoganNvbiwgcmVnZXhwIHRleHQpCisgIFJFVFVSTlMganNvbiBM QU5HVUFHRSBTUUwgQVMgJCQKK1NFTEVDVAorICBjb2FsZXNjZShqc29uX29iamVjdF9hZ2coCisg ICAga2V5LAorICAgIENBU0UKKyAgICAgIFdIRU4ga2V5IH4gcmVnZXhwIFRIRU4KKyAgICAgICAg Q0FTRSBqc29uX3R5cGVvZih2YWx1ZSkKKwkgIFdIRU4gJ251bWJlcicgVEhFTiAwOjp0ZXh0Ojpq c29uCisJICBFTFNFICgtMSk6OnRleHQ6Ompzb24KKwlFTkQKKyAgICAgIEVMU0UgdmFsdWUKKyAg ICBFTkQKKyAgKSwgJ3t9JykKK0ZST00KKyAganNvbl9lYWNoKG9iaikKKyQkOworLS0gZXhwbGFp biBvbmx5IHdvcmtlciBpbmZvcm1hdGlvbiwgbm9ybWFsaXppbmcgYW55IHZhbHVlcyB0aGF0IGNv dWxkIHZhcnkgYWNyb3NzIGV4ZWN1dGlvbnMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGV4 cGxhaW5fd29ya2VycyhwbGFuX25vZGUganNvbikKKyAgUkVUVVJOUyBqc29uIExBTkdVQUdFIFNR TCBBUyAkJAorU0VMRUNUCisgIGNvYWxlc2NlKGpzb25fb2JqZWN0X2FnZyhrZXksIHZhbHVlKSwg J3t9JykKK0ZST00gKAorICBTRUxFQ1QKKyAgICBrZXksCisgICAgQ0FTRSBrZXkKKyAgICAgIFdI RU4gJ1dvcmtlcnMnIFRIRU4KKyAgICAgICAgKFNFTEVDVCBqc29uX2FnZygKKwkgICBqc29uX25v cm1hbGl6ZV9udW1lcmljX2tleXNfbWF0Y2hpbmcod29ya2VyLCAnKEJsb2Nrc3xUaW1lKSR8U29y dCBTcGFjZSBVc2VkJykKKyAgICAgICAgKQorICAgICAgICBGUk9NIGpzb25fYXJyYXlfZWxlbWVu dHModmFsdWUpIEFTIHdvcmtlcnMod29ya2VyKSkKKyAgICAgIFdIRU4gJ1BsYW5zJyBUSEVOCisJ KFNFTEVDVCBqc29uX2FnZygKKwkgIGV4cGxhaW5fd29ya2VycyhjaGlsZCkKKwkpCisJRlJPTSBq c29uX2FycmF5X2VsZW1lbnRzKHZhbHVlKSBBUyBjaGlsZHJlbihjaGlsZCkpCisgICAgRU5EIEFT IHZhbHVlCisgIEZST00KKyAgICBqc29uX2VhY2gocGxhbl9ub2RlKSBBUyBlbnRyaWVzKGtleSwg dmFsdWUpCisgIFdIRVJFCisgICAga2V5IElOICgnV29ya2VycycsICdQbGFucycpCispIEFTIHBs YW5fZmllbGRzKGtleSwgdmFsdWUpOworJCQ7CistLSB0ZXN0IHRoYXQgcGVyLXdvcmtlciBzb3J0 IGFuZCBidWZmZXJzIG91dHB1dCBpcyBjb21iaW5lZCBjb3JyZWN0bHkgaW4gRVhQTEFJTgorc2V0 IGZvcmNlX3BhcmFsbGVsX21vZGUgPSB0cnVlOworU0VMRUNUIGV4cGxhaW5fd29ya2Vycyhqc29u X2V4cGxhaW4oJCQKKyAgU0VMRUNUICogRlJPTSAoVkFMVUVTKDEpLCgyKSkgeCBPUkRFUiBCWSB4 OworJCQsICd2ZXJib3NlJywgJ2FuYWx5emUnLCAnYnVmZmVycycpIC0+IDAgLT4gJ1BsYW4nKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFpbl93 b3JrZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsg IlBsYW5zIiA6IFt7ICJXb3JrZXJzIiA6IFt7ICJXb3JrZXIgTnVtYmVyIiA6IDAsICJBY3R1YWwg U3RhcnR1cCBUaW1lIiA6IDAsICJBY3R1YWwgVG90YWwgVGltZSIgOiAwLCAiQWN0dWFsIFJvd3Mi IDogMiwgIkFjdHVhbCBMb29wcyIgOiAxLCAiU29ydCBNZXRob2QiIDogInF1aWNrc29ydCIsICJT b3J0IFNwYWNlIFVzZWQiIDogMCwgIlNvcnQgU3BhY2UgVHlwZSIgOiAiTWVtb3J5IiwgIlNoYXJl ZCBIaXQgQmxvY2tzIiA6IDAsICJTaGFyZWQgUmVhZCBCbG9ja3MiIDogMCwgIlNoYXJlZCBEaXJ0 aWVkIEJsb2NrcyIgOiAwLCAiU2hhcmVkIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJMb2NhbCBIaXQg QmxvY2tzIiA6IDAsICJMb2NhbCBSZWFkIEJsb2NrcyIgOiAwLCAiTG9jYWwgRGlydGllZCBCbG9j a3MiIDogMCwgIkxvY2FsIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJUZW1wIFJlYWQgQmxvY2tzIiA6 IDAsICJUZW1wIFdyaXR0ZW4gQmxvY2tzIiA6IDAgfV0sICJQbGFucyIgOiBbeyAiV29ya2VycyIg OiBbeyAiV29ya2VyIE51bWJlciIgOiAwLCAiQWN0dWFsIFN0YXJ0dXAgVGltZSIgOiAwLCAiQWN0 dWFsIFRvdGFsIFRpbWUiIDogMCwgIkFjdHVhbCBSb3dzIiA6IDIsICJBY3R1YWwgTG9vcHMiIDog MSwgIlNoYXJlZCBIaXQgQmxvY2tzIiA6IDAsICJTaGFyZWQgUmVhZCBCbG9ja3MiIDogMCwgIlNo YXJlZCBEaXJ0aWVkIEJsb2NrcyIgOiAwLCAiU2hhcmVkIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJM b2NhbCBIaXQgQmxvY2tzIiA6IDAsICJMb2NhbCBSZWFkIEJsb2NrcyIgOiAwLCAiTG9jYWwgRGly dGllZCBCbG9ja3MiIDogMCwgIkxvY2FsIFdyaXR0ZW4gQmxvY2tzIiA6IDAsICJUZW1wIFJlYWQg QmxvY2tzIiA6IDAsICJUZW1wIFdyaXR0ZW4gQmxvY2tzIiA6IDAgfV0gfV0gfV0gfQorKDEgcm93 KQorCityZXNldCBmb3JjZV9wYXJhbGxlbF9tb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1 bGUKaW5kZXggZDMzYTRlMTQzZC4uZDJiMTdkZDNlYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj aGVkdWxlCkBAIC0xMTIsNyArMTEyLDcgQEAgdGVzdDogcGxhbmNhY2hlIGxpbWl0IHBscGdzcWwg Y29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNpb24gdHIKICMgLS0t LS0tLS0tLQogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAjIC0tLS0tLS0tLS0K LXRlc3Q6IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFy dCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydAor dGVzdDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlvbnMgaGFzaF9wYXJ0 IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8gdHVwbGVzb3J0IGV4 cGxhaW4KIAogIyBldmVudCB0cmlnZ2VycyBjYW5ub3QgcnVuIGNvbmN1cnJlbnRseSB3aXRoIGFu eSB0ZXN0IHRoYXQgcnVucyBEREwKIHRlc3Q6IGV2ZW50X3RyaWdnZXIKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf c2NoZWR1bGUKaW5kZXggZjg2ZjVjNTY4Mi4uYWNiYTM5MTMzMiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxf c2NoZWR1bGUKQEAgLTE5Myw2ICsxOTMsNyBAQCB0ZXN0OiBpbmRleGluZwogdGVzdDogcGFydGl0 aW9uX2FnZ3JlZ2F0ZQogdGVzdDogcGFydGl0aW9uX2luZm8KIHRlc3Q6IHR1cGxlc29ydAordGVz dDogZXhwbGFpbgogdGVzdDogZXZlbnRfdHJpZ2dlcgogdGVzdDogZmFzdF9kZWZhdWx0CiB0ZXN0 OiBzdGF0cwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9leHBsYWluLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi41ZmI2ZTdkMmUxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvZXhwbGFpbi5zcWwKQEAgLTAsMCArMSw3NyBAQAorLS0KKy0tIEVYUExBSU4KKy0t CisKKy0tIGhlbHBlciBmdW5jdGlvbnMgZm9yIGV4YW1pbmluZyBqc29uIGV4cGxhaW4gb3V0cHV0 CisKKy0tIHJldHVybiBhIGpzb24gZXhwbGFpbiBvZiBnaXZlbiBxdWVyeQorQ1JFQVRFIE9SIFJF UExBQ0UgRlVOQ1RJT04ganNvbl9leHBsYWluKHF1ZXJ5IHRleHQsIHZhcmlhZGljIG9wdHMgdGV4 dFtdKQorICBSRVRVUk5TIGpzb24gTEFOR1VBR0UgUExQR1NRTCBBUyAkJAorREVDTEFSRQorICBw bGFuIGpzb247CitCRUdJTgorICBFWEVDVVRFICdFWFBMQUlOICgnIHx8IGFycmF5X3RvX3N0cmlu ZyhhcnJheV9hcHBlbmQob3B0cywgJ0ZPUk1BVCBKU09OKSAnKSwgJywgJykgfHwgcXVlcnkgSU5U TyBTVFJJQ1QgcGxhbjsKKyAgUkVUVVJOIHBsYW47CitFTkQ7CiskJDsKKworLyoKKyAqIFRha2Vz IGEganNvbiBvYmplY3QgYW5kIHByb2Nlc3NlcyBpdHMga2V5cyBhbmQgdmFsdWVzLiBGb3IgZXZl cnkKKyAqIG1hdGNoaW5nIGtleSB3aG9zZSB2YWx1ZSBpcyBhIG51bWJlciwgc2V0IGl0IHRvIHpl cm8gdG8gZmFjaWxpdGF0ZQorICogY29tcGFyaXNvbnMgZm9yIHZhbHVlcyB0aGF0IGNhbiB2YXJ5 IGFjcm9zcyBleGVjdXRpb25zLiBJZiBub3QgYSBudW1iZXIsCisgKiBzZXQgdGhlIHZhbHVlIHRv IC0xIHRvIGluZGljYXRlIHdlIG1hdGNoZWQgYW4gdW5leHBlY3RlZCBrZXkuIFJldHVybgorICog bm9uLW1hdGNoaW5nIGtleXMgYW5kIHZhbHVlcyB1bm1vZGlmaWVkLgorICovCitDUkVBVEUgT1Ig UkVQTEFDRSBGVU5DVElPTiBqc29uX25vcm1hbGl6ZV9udW1lcmljX2tleXNfbWF0Y2hpbmcob2Jq IGpzb24sIHJlZ2V4cCB0ZXh0KQorICBSRVRVUk5TIGpzb24gTEFOR1VBR0UgU1FMIEFTICQkCitT RUxFQ1QKKyAgY29hbGVzY2UoanNvbl9vYmplY3RfYWdnKAorICAgIGtleSwKKyAgICBDQVNFCisg ICAgICBXSEVOIGtleSB+IHJlZ2V4cCBUSEVOCisgICAgICAgIENBU0UganNvbl90eXBlb2YodmFs dWUpCisJICBXSEVOICdudW1iZXInIFRIRU4gMDo6dGV4dDo6anNvbgorCSAgRUxTRSAoLTEpOjp0 ZXh0Ojpqc29uCisJRU5ECisgICAgICBFTFNFIHZhbHVlCisgICAgRU5ECisgICksICd7fScpCitG Uk9NCisgIGpzb25fZWFjaChvYmopCiskJDsKKworLS0gZXhwbGFpbiBvbmx5IHdvcmtlciBpbmZv cm1hdGlvbiwgbm9ybWFsaXppbmcgYW55IHZhbHVlcyB0aGF0IGNvdWxkIHZhcnkgYWNyb3NzIGV4 ZWN1dGlvbnMKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGV4cGxhaW5fd29ya2VycyhwbGFu X25vZGUganNvbikKKyAgUkVUVVJOUyBqc29uIExBTkdVQUdFIFNRTCBBUyAkJAorU0VMRUNUCisg IGNvYWxlc2NlKGpzb25fb2JqZWN0X2FnZyhrZXksIHZhbHVlKSwgJ3t9JykKK0ZST00gKAorICBT RUxFQ1QKKyAgICBrZXksCisgICAgQ0FTRSBrZXkKKyAgICAgIFdIRU4gJ1dvcmtlcnMnIFRIRU4K KyAgICAgICAgKFNFTEVDVCBqc29uX2FnZygKKwkgICBqc29uX25vcm1hbGl6ZV9udW1lcmljX2tl eXNfbWF0Y2hpbmcod29ya2VyLCAnKEJsb2Nrc3xUaW1lKSR8U29ydCBTcGFjZSBVc2VkJykKKyAg ICAgICAgKQorICAgICAgICBGUk9NIGpzb25fYXJyYXlfZWxlbWVudHModmFsdWUpIEFTIHdvcmtl cnMod29ya2VyKSkKKyAgICAgIFdIRU4gJ1BsYW5zJyBUSEVOCisJKFNFTEVDVCBqc29uX2FnZygK KwkgIGV4cGxhaW5fd29ya2VycyhjaGlsZCkKKwkpCisJRlJPTSBqc29uX2FycmF5X2VsZW1lbnRz KHZhbHVlKSBBUyBjaGlsZHJlbihjaGlsZCkpCisgICAgRU5EIEFTIHZhbHVlCisgIEZST00KKyAg ICBqc29uX2VhY2gocGxhbl9ub2RlKSBBUyBlbnRyaWVzKGtleSwgdmFsdWUpCisgIFdIRVJFCisg ICAga2V5IElOICgnV29ya2VycycsICdQbGFucycpCispIEFTIHBsYW5fZmllbGRzKGtleSwgdmFs dWUpOworJCQ7CisKKy0tIHRlc3QgdGhhdCBwZXItd29ya2VyIHNvcnQgYW5kIGJ1ZmZlcnMgb3V0 cHV0IGlzIGNvbWJpbmVkIGNvcnJlY3RseSBpbiBFWFBMQUlOCitzZXQgZm9yY2VfcGFyYWxsZWxf bW9kZSA9IHRydWU7CisKK1NFTEVDVCBleHBsYWluX3dvcmtlcnMoanNvbl9leHBsYWluKCQkCisg IFNFTEVDVCAqIEZST00gKFZBTFVFUygxKSwoMikpIHggT1JERVIgQlkgeDsKKyQkLCAndmVyYm9z ZScsICdhbmFseXplJywgJ2J1ZmZlcnMnKSAtPiAwIC0+ICdQbGFuJyk7CisKK3Jlc2V0IGZvcmNl X3BhcmFsbGVsX21vZGU7Cg== --0000000000006d637d059c28915f--