Thread-safe record mapper speed-ups
Max Philipp Wriedt <[email protected]> Wed, 15 Oct 2025 21:52:28 +0200
| Newsgroups | gmane.comp.jakarta.turbine.torque.devel |
|---|---|
| Message-ID | <[email protected]> |
--------------P111Vv5onH3jsurckgAjxjAa Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, after initially reporting a n^2 problem in the processRow method of RecordMappers in TORQUE-364, fixing it - only to then find our suspected concurrency troubles to be confirmed in TORQUE-372 - we can (hopefully) report a far more robust solution. Looking into the SQL result stack we would propose to re-introduce a slightly modified MappingStrategy. The key insight to fixing the concurrent modification issue lies in doing so at the ResultsetSpliterator level. This ensures that every query gets its own MappingStrategy. Doing this would also require two new methods for every RecordMapper to generate a fitting MappingStrategy and to process a row with a potential strategy. To keep backwards compatibility both would be defaulted in the interface to do nothing and forward to the old method respectively. We have already implemented a test of this locally and can see similar performance to the old, but flawed, version and are sharing the patch here. (Hopefully this actually works...) However, because the patch changes the methods the ResultsetSpliterator expects a RecordMapper to have (by calling a generateStrategy method to either do just that or return null) this would break backwards compatibility with old RecordMappers and we wanted to a feedback cycle early. Best regards, Max & Rene --------------P111Vv5onH3jsurckgAjxjAa Content-Type: text/plain; charset=UTF-8; name="MappingStrategy.patch" Content-Disposition: attachment; filename="MappingStrategy.patch" Content-Transfer-Encoding: base64 SW5kZXg6IHRvcnF1ZS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90b3JxdWUv b20vbWFwcGVyL01hcHBpbmdTdHJhdGVneS5qYXZhCjwrPklTTy04ODU5LTEKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBh Y2hlL3RvcnF1ZS9vbS9tYXBwZXIvTWFwcGluZ1N0cmF0ZWd5LmphdmEgYi90b3JxdWUtcnVu dGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL29tL21hcHBlci9NYXBwaW5n U3RyYXRlZ3kuamF2YQotLS0gYS90b3JxdWUtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9h cGFjaGUvdG9ycXVlL29tL21hcHBlci9NYXBwaW5nU3RyYXRlZ3kuamF2YQkocmV2aXNpb24g MTkyODk4MikKKysrIGIvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hl L3RvcnF1ZS9vbS9tYXBwZXIvTWFwcGluZ1N0cmF0ZWd5LmphdmEJKGRhdGUgMTc1OTg3NTMw OTkzNikKQEAgLTMxLDM2ICszMSwzNiBAQAogCiAvKioKICAqIE1hcHBpbmcgc3RyYXRlZ3kg dXNlZCBpbiBwcm9jZXNzUm93IG1ldGhvZCBvZiBnZW5lcmF0ZWQgbWFwcGVycy4KLSAqIAor ICoKICAqIEBwYXJhbSA8VD4KICAqLwogcHVibGljIGNsYXNzIE1hcHBpbmdTdHJhdGVneTxU PiB7Ci0gICAgCisKICAgICAvKioKLSAgICAgKiBUaGUge0BsaW5rIFBhaXIjZ2V0TGVmdCgp fSBpcyB0byBhbGxvdyBsYXp5IHNvcnRpbmcsIHtAbGluayBQYWlyI2dldFJpZ2h0KCl9IGNv bnRhaW5zIHRoZSBvYmplY3QgdG8gYmUgbWFwcGVkIAorICAgICAqIFRoZSB7QGxpbmsgUGFp ciNnZXRMZWZ0KCl9IGlzIHRvIGFsbG93IGxhenkgc29ydGluZywge0BsaW5rIFBhaXIjZ2V0 UmlnaHQoKX0gY29udGFpbnMgdGhlIG9iamVjdCB0byBiZSBtYXBwZWQKICAgICAgKi8KLSAg ICBwcml2YXRlIGZpbmFsIExpc3Q8UGFpcjxJbnRlZ2VyLCBGYWlsYWJsZUJpQ29uc3VtZXI8 UmVzdWx0U2V0LCBULCBUb3JxdWVFeGNlcHRpb24+Pj4gdGFza3M7Ci0gICAgCi0gICAgcHJp dmF0ZSBib29sZWFuIGFsbFNldDsKKyAgICBwcml2YXRlIGZpbmFsIExpc3Q8UGFpcjxMb25n LCBGYWlsYWJsZUJpQ29uc3VtZXI8UmVzdWx0U2V0LCBULCBUb3JxdWVFeGNlcHRpb24+Pj4g dGFza3M7CiAKLSAgICBwdWJsaWMgTWFwcGluZ1N0cmF0ZWd5KCkKLSAgICB7CisgICAgcHVi bGljIE1hcHBpbmdTdHJhdGVneSgpIHsKICAgICAgICAgdGhpcy50YXNrcyA9IG5ldyBBcnJh eUxpc3Q8PigpOwotICAgICAgICB0aGlzLmFsbFNldCA9IGZhbHNlOwogICAgIH0KIAotICAg IHB1YmxpYyB2b2lkIGFkZENvbHVtbihpbnQgb2Zmc2V0LCBGYWlsYWJsZUJpQ29uc3VtZXI8 UmVzdWx0U2V0LCBULCBUb3JxdWVFeGNlcHRpb24+IHNldHRlcikKKyAgICAvKioKKyAgICAg KiBBZGQgYSBjb2x1bW4gdG8gYmUgc2V0IGF0IHRoZSBnaXZlbiBvZmZzZXQgKGNvbHVtbiku CisgICAgICogQHBhcmFtIG9mZnNldCB0aGUgY29sdW1uIG9mZnNldCBpbnNpZGUgYSBSZXN1 bHRzZXQgYXQgd2hpY2ggdGhlIHZhbHVlIGNhbiBiZSBmb3VuZC4KKyAgICAgKiBAcGFyYW0g c2V0dGVyIGEgbWV0aG9kIG9yIGxhbWJkYSB3aGljaCBhY3R1YWxseSBzZXRzIHRoZSB2YWx1 ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBhZGRDb2x1bW4obG9uZyBvZmZzZXQsIEZh aWxhYmxlQmlDb25zdW1lcjxSZXN1bHRTZXQsIFQsIFRvcnF1ZUV4Y2VwdGlvbj4gc2V0dGVy KQogICAgIHsKICAgICAgICAgdGhpcy50YXNrcy5hZGQoUGFpci5vZihvZmZzZXQsIHNldHRl cikpOwogICAgIH0KIAogICAgIC8qKgotICAgICAqIExhc3QgZmluaXNoaW5nIHN0ZXBzIGJl Zm9yZSBleGVjdXRlLgotICAgICAqIAotICAgICAqIEBwYXJhbSBudW1fZmllbGRzIHRoZSB0 b3RhbCBjb2x1bW4gc2l6ZSBvZiB0aGUgb2JqZWN0Ci0gICAgICogQHBhcmFtIHNvcnQgPGNv ZGU+dHJ1ZTwvY29kZT4gZXhwbGljaXRlbHkgc29ydCB3aXRoIHtAbGluayBQYWlyI2dldExl ZnQoKX0gb2YgdGhlIHtAbGluayAjdGFza3N9LgorICAgICAqIExhc3QgZmluaXNoaW5nIHN0 ZXBzIGJlZm9yZSB0aGlzIHN0cmF0ZWd5IGNhbiBiZSBleGVjdXRlZC4KKyAgICAgKgorICAg ICAqIEBwYXJhbSBzb3J0IDxjb2RlPnRydWU8L2NvZGU+IGV4cGxpY2l0bHkgc29ydCB3aXRo IHtAbGluayBQYWlyI2dldExlZnQoKX0gb2YgdGhlIHtAbGluayAjdGFza3N9LgogICAgICAq LwotICAgIHB1YmxpYyB2b2lkIGZpbmlzaChpbnQgbnVtX2ZpZWxkcywgYm9vbGVhbiBzb3J0 KQorICAgIHB1YmxpYyB2b2lkIGZpbmlzaChib29sZWFuIHNvcnQpCiAgICAgewogICAgICAg ICAvLyBUaGUgbGlzdCBzaG91bGQgYWxyZWFkeSBiZSBpbiB0aGUgY29ycmVjdCBvcmRlciBi ZWNhdXNlIENyaXRlcmlhIGxvb3BzIHRocm91Z2ggdGhlIGNvbHVtbnMKICAgICAgICAgLy8g aW4gdGhlIHNhbWUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgYWRkZWQgdG8gdGhlIFNRTCBz dGF0ZW1lbnQgYnV0IGp1c3QgaW4gY2FzZSBzb21ldGhpbmcgd2VpcmQKQEAgLTY5LDcgKzY5 LDYgQEAKICAgICAgICAgaWYgKHNvcnQpIHsKICAgICAgICAgICAgIHRoaXMudGFza3Muc29y dChDb21wYXJhdG9yLmNvbXBhcmluZyhQYWlyOjpnZXRMZWZ0KSk7CiAgICAgICAgIH0KLSAg ICAgICAgdGhpcy5hbGxTZXQgPSB0aGlzLnRhc2tzLnNpemUoKSA9PSBudW1fZmllbGRzOwog ICAgIH0KIAogICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKQpAQCAtNzcsMTAgKzc2LDYg QEAKICAgICAgICAgcmV0dXJuIHRoaXMudGFza3MuaXNFbXB0eSgpOwogICAgIH0KIAotICAg IHB1YmxpYyBib29sZWFuIGlzQWxsU2V0KCkgewotICAgICAgICByZXR1cm4gdGhpcy5hbGxT ZXQ7Ci0gICAgfQotICAgIAogICAgIHB1YmxpYyB2b2lkIHJlc2V0KCkKICAgICB7CiAgICAg ICAgIC8vIHRvIHVzZSB0aGlzIGFuZCB0byB1c2Ugb25seSBhIHNpbmdsZSBzdHJhdGVneSB3 ZSBtaWdodCBuZWVkIHRvIENvbGxlY3Rpb25zLnN5bmMoQXJyYXlMaXN0KS4KQEAgLTg5LDE0 ICs4NCwxNCBAQAogCiAgICAgLyoqCiAgICAgICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUge0Bs aW5rICN0YXNrc30gbGlzdCBhbmQgZXhlY3V0ZXMgZWFjaCB0YXNrLgotICAgICAqIAorICAg ICAqCiAgICAgICogQHBhcmFtIHJlc3VsdCBSZXN1bHRzZXQKICAgICAgKiBAcGFyYW0gaW5z dGFuY2UgdGFyZ2V0IG9iamVjdAotICAgICAqIAorICAgICAqCiAgICAgICovCiAgICAgcHVi bGljIHZvaWQgZXhlY3V0ZShSZXN1bHRTZXQgcmVzdWx0LCBUIGluc3RhbmNlKQogICAgIHsK LSAgICAgICAgdGhpcy50YXNrcy5zdHJlYW0oKS5mb3JFYWNoKCBzdHJhdGVneSAtPgorICAg ICAgICB0aGlzLnRhc2tzLmZvckVhY2goIHN0cmF0ZWd5IC0+CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgIHRyeQogICAgICAgICAgICAgewpJbmRleDogdG9ycXVlLXRlbXBsYXRlcy9z cmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxhdGVzL29tL3RlbXBs YXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZtCjwrPklTTy04 ODU5LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXRlbXBsYXRlcy9zcmMv bWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxhdGVzL29tL3RlbXBsYXRl cy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZtIGIvdG9ycXVlLXRl bXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxhdGVz L29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZt Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci0tLSAvZGV2L251bGwJKGRhdGUgMTc1OTg3NzkwNTk4 MCkKKysrIGIvdG9ycXVlLXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNo ZS90b3JxdWUvdGVtcGxhdGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9tYXBw aW5nU3RyYXRlZ3lQYXRoLnZtCShkYXRlIDE3NTk4Nzc5MDU5ODApCkBAIC0wLDAgKzEsMTMz IEBACisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFT RikgdW5kZXIgb25lCisjIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50 cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3Jr IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIyByZWdhcmRpbmcgY29weXJpZ2h0IG93 bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIyB0byB5b3UgdW5kZXIg dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjIyAiTGljZW5zZSIpOyB5 b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIyB3aXRo IHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0 CisjIworIyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAK KyMjCisjIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv IGluIHdyaXRpbmcsCisjIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5z ZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJS QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBv ciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMjIHNwZWNpZmljIGxhbmd1 YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMjIHVuZGVyIHRo ZSBMaWNlbnNlLgorIyMKKyMjIyMjIworIyMKKyMjIHZlcnNpb24gJElkOiBtYXBwaW5nU3Ry YXRlZ3lQYXRoLnZtIFRJTUVTVEFNUCBtd3JpZWR0ICQKKyMjCisjIyBDcmVhdGVzIHRoZSBN YXBwaW5nU3RyYXRlZ3kgZmxvdyBmb3IgYSBSZWNvcmRNYXBwZXIuCisjIworIyMgVGhpcyB0 ZW1wbGF0ZSBleHBlY3RzIHRoZSBjdXJyZW50IHNvdXJjZSBlbGVtZW50IHRvIGJlIGEgInRh YmxlIiBlbGVtZW50CisjIyBmcm9tIHRoZSB0b3JxdWUgc2NoZW1hLgorIyMgVGhlIHNjaGVt YSBuZWVkcyB0byBiZSBwcm9jZXNzZWQgYnkgdGhlIE9NVHJhbnNmb3JtZXIuCisjIyBUaGUg YXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBzb3VyY2UgZWxlbWVudCBtdXN0IGJlIHNldAor IyMgYXMgdmVsb2NpdHkgdmFyaWFibGVzLgorIyMKKworICAgIEBPdmVycmlkZQorICAgIHB1 YmxpYyBNYXBwaW5nU3RyYXRlZ3k8JGRiT2JqZWN0Q2xhc3NOYW1lPiBnZW5lcmF0ZVN0cmF0 ZWd5KGxvbmcgcm93T2Zmc2V0LCBDcml0ZXJpYSBjcml0ZXJpYSkgeworICAgICAgICBpZiAo Y3JpdGVyaWEgPT0gbnVsbCB8fCBjcml0ZXJpYS5pc0NvbXBvc2l0ZSgpKQorICAgICAgICB7 CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBMaXN0PENv bHVtbj4gc2VsZWN0Q29sdW1ucyA9IGNyaXRlcmlhLmdldFNlbGVjdENvbHVtbnMoKTsKKyAg ICAgICAgTGlzdDxDb2x1bW4+IGNvbHVtbnNXaXRob3V0T2Zmc2V0ID0gc2VsZWN0Q29sdW1u cy5zdHJlYW0oKS5za2lwKHJvd09mZnNldCkudG9MaXN0KCk7CisgICAgICAgICMjIFRoZSBz ZWxlY3RDb2x1bW5zIHNob3VsZCBub3QgYmUgZW1wdHkgaGVyZSBpZiB3ZSBhcmUgY2FsbGVk IGJ5IHRoZSB1c3VhbCBSZXN1bHRzZXRTcGxpdGVyYXRvci4KKyAgICAgICAgaWYgKGNvbHVt bnNXaXRob3V0T2Zmc2V0LmlzRW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0 dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgTWFwcGluZ1N0cmF0ZWd5PCRkYk9iamVj dENsYXNzTmFtZT4gc3RyYXRlZ3kgPSBuZXcgTWFwcGluZ1N0cmF0ZWd5PD4oKTsKKworICAg ICAgICBTZXQ8U3RyaW5nPiBjb2x1bW5zTWFwcGVkID0gbmV3IEhhc2hTZXQ8PigpOworICAg ICAgICBsb25nIHBoeXNpY2FsQ29sdW1uSW5kZXggPSByb3dPZmZzZXQgKyAxOworICAgICAg ICBmb3IgKENvbHVtbiBjb2x1bW4gOiBjb2x1bW5zV2l0aG91dE9mZnNldCkKKyAgICAgICAg eworICAgICAgICAgICAgI3NldCAoICRlbHNlID0gIiIgKQorICAgICAgICAgICAgI2ZvcmVh Y2ggKCRjb2x1bW5FbGVtZW50IGluICR0b3JxdWVHZW4uZ2V0Q2hpbGRyZW4oImNvbHVtbiIp KQorICAgICAgICAgICAgICAgICNzZXQgKCAkc2V0dGVyID0gJGNvbHVtbkVsZW1lbnQuZ2V0 QXR0cmlidXRlKCJzZXR0ZXIiKSApCisgICAgICAgICAgICAgICAgI3NldCAoICRnZXR0ZXIg PSAkY29sdW1uRWxlbWVudC5nZXRBdHRyaWJ1dGUoImdldHRlciIpICkKKyAgICAgICAgICAg ICAgICAjc2V0ICggJHBlZXJDb2x1bW5OYW1lID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmli dXRlKCJwZWVyQ29sdW1uTmFtZSIpICkKKyAgICAgICAgICAgICAgICAke2Vsc2V9aWYgKCFj b2x1bW5zTWFwcGVkLmNvbnRhaW5zKCR7cGVlckNvbHVtbk5hbWV9X0VYUFJFU1NJT04gKSAm JiAke3BlZXJDb2x1bW5OYW1lfV9FWFBSRVNTSU9OLmVxdWFscygKKyAgICAgICAgICAgICAg ICAgICAgY29sdW1uLmdldFNxbEV4cHJlc3Npb24oKSkpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgaW50IGN1cnJlbnRJbmRleCA9IE1hdGgudG9JbnRFeGFjdChwaHlzaWNh bENvbHVtbkluZGV4KTsKKyAgICAgICAgICAgICAgICBzdHJhdGVneS5hZGRDb2x1bW4ocGh5 c2ljYWxDb2x1bW5JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChyZXMsIGluc3Qp IC0+IGluc3QuJHtzZXR0ZXJ9KCR7Z2V0dGVyfShyZXMsIGN1cnJlbnRJbmRleCkpKTsKKyAg ICAgICAgICAgICAgICBjb2x1bW5zTWFwcGVkLmFkZCggJHtwZWVyQ29sdW1uTmFtZX1fRVhQ UkVTU0lPTiApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNzZXQgKCAkZWxz ZSA9ICJlbHNlICIgKQorICAgICAgICAgICAgI2VuZAorICAgICAgICAgICAgcGh5c2ljYWxD b2x1bW5JbmRleCsrOworICAgICAgICB9CisgICAgICAgIGlmIChjb2x1bW5zTWFwcGVkLmlz RW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIHN0cmF0ZWd5OworICAgIH0KKworICAgIC8qKgorICAgICog Q29uc3RydWN0cyB0aGUgb2JqZWN0IGZyb20gdGhlIGN1cnJlbnQgcm93IGluIHRoZSByZXN1 bHRTZXQuCisgICAgKiBJbXBsZW1lbnRpbmcgbWV0aG9kcyBjYW4gYmUgc3VyZSB0aGF0IHRo ZSByZXN1bHRTZXQgY29udGFpbnMgYSByb3csCisgICAgKiBidXQgdGhleSBtdXN0IG9ubHkg b3BlcmF0ZSBvbiB0aGUgY3VycmVudCByb3csIGkuZSB0aGV5IG11c3Qgbm90IGNhbGwKKyAg ICAqIHJlc3VsdFNldC5uZXh0KCkuCisgICAgKiBUaGlzIHZlcnNpb24gbWF5IGFsc28gcmVj ZWl2ZSBhIE1hcHBpbmdTdHJhdGVneSBvYmplY3QgdG8gc3BlZWQgdXAKKyAgICAqIHRoZSBw cm9jZXNzaW5nLiBIb3dldmVyLCB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkaXNyZWdh cmRzIGFueQorICAgICogcGFzc2VkIHN0cmF0ZWd5IGFuZCBzaW1wbHkgZm9yd2FyZHMgdG8g cHJvY2Vzc1JvdyhSZXN1bHRTZXQsIGludCwgQ3JpdGVyaWEpLiAvL0ZJWE1FOiBGaXggZG9j bGluayEKKyAgICAqCisgICAgKiBAcGFyYW0gcmVzdWx0U2V0IHRoZSByZXN1bHRTZXQgdG8g b3BlcmF0ZSBvbiwgYWxyZWFkeSBwb2ludGluZworICAgICogICAgICAgIHRvIHRoZSBjb3Jy ZWN0IHJvdy4gTm90IG51bGwuCisgICAgKiBAcGFyYW0gb2Zmc2V0IGEgcG9zc2libGUgb2Zm c2V0IGluIHRoZSBjb2x1bW5zIHRvIGJlIGNvbnNpZGVyZWQKKyAgICAqICAgICAgICAoaWYg cHJldmlvdXMgY29sdW1ucyBjb250YWluIG90aGVyIG9iamVjdHMpLCBvciAwIGZvciBubyBv ZmZzZXQuCisgICAgKiBAcGFyYW0gY3JpdGVyaWEgdGhlIENyaXRlcmlhIHdoaWNoIGNvbnRh aW5zIHRoZSBxdWVyeSB0byBwcm9jZXNzLAorICAgICogICAgICAgIG9yIG51bGwgaWYgbm90 IGtub3duIG9yIHRoZSBxdWVyeSB3YXMgbm90IHByb2R1Y2VkIGJ5IGEgQ3JpdGVyaWEuCisg ICAgKiAgICAgICAgQ2FuIGJlIHVzZWQgYnkgdGhlIFJlY29yZE1hcHBlciB0byBkZXRlcm1p bmUgdGhlIGNvbHVtbnMKKyAgICAqICAgICAgICBjb250YWluZWQgaW4gdGhlIHJlc3VsdCBz ZXQuCisgICAgKiBAcGFyYW0gc3RyYXRlZ3kgdGhlIE1hcHBpbmdTdHJhdGVneSB3aGljaCB0 ZWxscyB0aGUgUmVjb3JkTWFwcGVyIHdoaWNoCisgICAgKiAgICAgICAgb2Zmc2V0cyBpbiB0 aGUgcmVzdWx0U2V0IGNvcnJlc3BvbmQgdG8gd2hpY2ggZmllbGRzIG9mIFQuCisgICAgKiAg ICAgICAgTmF5IGJlIG51bGwgaWYgbm90IGtub3duLgorICAgICoKKyAgICAqIEByZXR1cm4g dGhlIG1hcHBlZCBvYmplY3QsIG5vdCBudWxsLgorICAgICoKKyAgICAqIEB0aHJvd3MgVG9y cXVlRXhjZXB0aW9uIHdoZW4gdGhlIG1hcHBpbmcgZmFpbHMuCisgICAgKi8KKyAgICBAT3Zl cnJpZGUKKyAgICBwdWJsaWMgJHtkYk9iamVjdENsYXNzTmFtZX0gcHJvY2Vzc1JvdygKKyAg ICAgICAgUmVzdWx0U2V0IHJlc3VsdFNldCwKKyAgICAgICAgaW50IG9mZnNldCwKKyAgICAg ICAgQ3JpdGVyaWEgY3JpdGVyaWEsCisgICAgICAgIE1hcHBpbmdTdHJhdGVneTwke2RiT2Jq ZWN0Q2xhc3NOYW1lfT4gc3RyYXRlZ3kpCisgICAgICAgICAgICB0aHJvd3MgVG9ycXVlRXhj ZXB0aW9uIHsKKyAgICAgICAgaWYgKHN0cmF0ZWd5ICE9IG51bGwpCisgICAgICAgIHsKKyNz ZXQgKCAkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVudCA9ICR0b3JxdWVHZW4uZ2V0Q2hp bGQoImluaGVyaXRhbmNlLWNvbHVtbiIpICkKKyNpZiAoJGluaGVyaXRhbmNlQmFzZUNvbHVt bkVsZW1lbnQpCisgICAgJHRvcnF1ZUdlbi5tZXJnZXBvaW50KCJjcmVhdGVEYk9iamVjdElu c3RhbmNlRnJvbUluaGVyaXRhbmNlIikKKyNlbHNlCisgICAgJHRvcnF1ZUdlbi5tZXJnZXBv aW50KCJjcmVhdGVEYk9iamVjdEluc3RhbmNlIikKKyNlbmQKKworI2lmICgkdG9ycXVlR2Vu LmJvb2xlYW5PcHRpb24oInRvcnF1ZS5vbS50cmFja0xvYWRpbmciKSkKKyAgICAgICAgICAg IHRyeQorICAgICAgICAgICAgeworICAgICAgICAgICAgJHtmaWVsZH0uc2V0TG9hZGluZyh0 cnVlKTsKKyNlbmQKKyAgICAgICAgICAgIHN0cmF0ZWd5LmV4ZWN1dGUocmVzdWx0U2V0LCAk e2ZpZWxkfSk7CisgICAgICAgICAgICAke2ZpZWxkfS5zZXROZXcoZmFsc2UpOworICAgICAg ICAgICAgJHtmaWVsZH0uc2V0TW9kaWZpZWQoZmFsc2UpOworI2lmICgkdG9ycXVlR2VuLmJv b2xlYW5PcHRpb24oInRvcnF1ZS5vbS50cmFja0xvYWRpbmciKSkKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIGZpbmFsbHkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAk e2ZpZWxkfS5zZXRMb2FkaW5nKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyNlbmQKKyAgICAg ICAgICAgIHJldHVybiAke2ZpZWxkfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhp cy5wcm9jZXNzUm93KHJlc3VsdFNldCwgb2Zmc2V0LCBjcml0ZXJpYSk7CisgICAgfQpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IHRvcnF1ZS1ydW50aW1lL3NyYy9tYWlu L2phdmEvb3JnL2FwYWNoZS90b3JxdWUvb20vbWFwcGVyL1JlY29yZE1hcHBlci5qYXZhCjwr PklTTy04ODU5LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXJ1bnRpbWUv c3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RvcnF1ZS9vbS9tYXBwZXIvUmVjb3JkTWFwcGVy LmphdmEgYi90b3JxdWUtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVl L29tL21hcHBlci9SZWNvcmRNYXBwZXIuamF2YQotLS0gYS90b3JxdWUtcnVudGltZS9zcmMv bWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL29tL21hcHBlci9SZWNvcmRNYXBwZXIuamF2 YQkocmV2aXNpb24gMTkyODk4MikKKysrIGIvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2 YS9vcmcvYXBhY2hlL3RvcnF1ZS9vbS9tYXBwZXIvUmVjb3JkTWFwcGVyLmphdmEJKGRhdGUg MTc2MDU1NDM4NzgxNykKQEAgLTYyLDQgKzYyLDQzIEBACiAgICAgICAgICAgICBpbnQgcm93 T2Zmc2V0LAogICAgICAgICAgICAgQ3JpdGVyaWEgY3JpdGVyaWEpCiAgICAgICAgICAgICAg ICAgICAgIHRocm93cyBUb3JxdWVFeGNlcHRpb247CisKKyAgICAvKioKKyAgICAgKiBDb25z dHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCByb3cgaW4gdGhlIHJlc3VsdFNl dC4KKyAgICAgKiBJbXBsZW1lbnRpbmcgbWV0aG9kcyBjYW4gYmUgc3VyZSB0aGF0IHRoZSBy ZXN1bHRTZXQgY29udGFpbnMgYSByb3csCisgICAgICogYnV0IHRoZXkgbXVzdCBvbmx5IG9w ZXJhdGUgb24gdGhlIGN1cnJlbnQgcm93LCBpLmUgdGhleSBtdXN0IG5vdCBjYWxsCisgICAg ICogcmVzdWx0U2V0Lm5leHQoKS4KKyAgICAgKiBUaGlzIHZlcnNpb24gbWF5IGFsc28gcmVj ZWl2ZSBhIE1hcHBpbmdTdHJhdGVneSBvYmplY3QgdG8gc3BlZWQgdXAKKyAgICAgKiB0aGUg cHJvY2Vzc2luZy4gSG93ZXZlciwgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGlzcmVn YXJkcyBhbnkKKyAgICAgKiBwYXNzZWQgc3RyYXRlZ3kgYW5kIHNpbXBseSBmb3J3YXJkcyB0 byBwcm9jZXNzUm93KFJlc3VsdFNldCwgaW50LCBDcml0ZXJpYSkuCisgICAgICoKKyAgICAg KiBAcGFyYW0gcmVzdWx0U2V0IHRoZSByZXN1bHRTZXQgdG8gb3BlcmF0ZSBvbiwgYWxyZWFk eSBwb2ludGluZworICAgICAqICAgICAgICB0byB0aGUgY29ycmVjdCByb3cuIE5vdCBudWxs LgorICAgICAqIEBwYXJhbSByb3dPZmZzZXQgYSBwb3NzaWJsZSBvZmZzZXQgaW4gdGhlIGNv bHVtbnMgdG8gYmUgY29uc2lkZXJlZAorICAgICAqICAgICAgICAoaWYgcHJldmlvdXMgY29s dW1ucyBjb250YWluIG90aGVyIG9iamVjdHMpLCBvciAwIGZvciBubyBvZmZzZXQuCisgICAg ICogQHBhcmFtIGNyaXRlcmlhIHRoZSBDcml0ZXJpYSB3aGljaCBjb250YWlucyB0aGUgcXVl cnkgdG8gcHJvY2VzcywKKyAgICAgKiAgICAgICAgb3IgbnVsbCBpZiBub3Qga25vd24gb3Ig dGhlIHF1ZXJ5IHdhcyBub3QgcHJvZHVjZWQgYnkgYSBDcml0ZXJpYS4KKyAgICAgKiAgICAg ICAgQ2FuIGJlIHVzZWQgYnkgdGhlIFJlY29yZE1hcHBlciB0byBkZXRlcm1pbmUgdGhlIGNv bHVtbnMKKyAgICAgKiAgICAgICAgY29udGFpbmVkIGluIHRoZSByZXN1bHQgc2V0LgorICAg ICAqIEBwYXJhbSBzdHJhdGVneSB0aGUgTWFwcGluZ1N0cmF0ZWd5IHdoaWNoIHRlbGxzIHRo ZSBSZWNvcmRNYXBwZXIgd2hpY2gKKyAgICAgKiAgICAgICAgb2Zmc2V0cyBpbiB0aGUgcmVz dWx0U2V0IGNvcnJlc3BvbmQgdG8gd2hpY2ggZmllbGRzIG9mIFQuCisgICAgICogICAgICAg IE5heSBiZSBudWxsIGlmIG5vdCBrbm93bi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhl IG1hcHBlZCBvYmplY3QsIG5vdCBudWxsLgorICAgICAqCisgICAgICogQHRocm93cyBUb3Jx dWVFeGNlcHRpb24gd2hlbiB0aGUgbWFwcGluZyBmYWlscy4KKyAgICAgKi8KKyAgICBkZWZh dWx0IFQgcHJvY2Vzc1JvdygKKyAgICAgICAgICAgIFJlc3VsdFNldCByZXN1bHRTZXQsCisg ICAgICAgICAgICBpbnQgcm93T2Zmc2V0LAorICAgICAgICAgICAgQ3JpdGVyaWEgY3JpdGVy aWEsCisgICAgICAgICAgICBNYXBwaW5nU3RyYXRlZ3k8VD4gc3RyYXRlZ3kpCisgICAgICAg ICAgICAgICAgICAgIHRocm93cyBUb3JxdWVFeGNlcHRpb24geworICAgICAgICByZXR1cm4g dGhpcy5wcm9jZXNzUm93KHJlc3VsdFNldCwgcm93T2Zmc2V0LCBjcml0ZXJpYSk7CisgICAg fQorCisgICAgZGVmYXVsdCBNYXBwaW5nU3RyYXRlZ3k8VD4gZ2VuZXJhdGVTdHJhdGVneShs b25nIHJvd09mZnNldCwgQ3JpdGVyaWEgY3JpdGVyaWEpCisgICAgeworICAgICAgICByZXR1 cm4gbnVsbDsKKyAgICB9CiB9CkluZGV4OiB0b3JxdWUtdGVtcGxhdGVzL3NyYy9tYWluL3Jl c291cmNlcy9vcmcvYXBhY2hlL3RvcnF1ZS90ZW1wbGF0ZXMvb20vb3V0bGV0cy9yZWNvcmRN YXBwZXIueG1sCjwrPlVURi04Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL3RvcnF1ZS10 ZW1wbGF0ZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRl cy9vbS9vdXRsZXRzL3JlY29yZE1hcHBlci54bWwgYi90b3JxdWUtdGVtcGxhdGVzL3NyYy9t YWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3RvcnF1ZS90ZW1wbGF0ZXMvb20vb3V0bGV0cy9y ZWNvcmRNYXBwZXIueG1sCi0tLSBhL3RvcnF1ZS10ZW1wbGF0ZXMvc3JjL21haW4vcmVzb3Vy Y2VzL29yZy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRlcy9vbS9vdXRsZXRzL3JlY29yZE1hcHBl ci54bWwJKHJldmlzaW9uIDE5Mjg5ODIpCisrKyBiL3RvcnF1ZS10ZW1wbGF0ZXMvc3JjL21h aW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRlcy9vbS9vdXRsZXRzL3Jl Y29yZE1hcHBlci54bWwJKGRhdGUgMTc1ODIyMjkyNTgwOSkKQEAgLTQ4LDYgKzQ4LDEwIEBA CiAgICAgICAgICAgZWxlbWVudD0iY29sdW1uIgogICAgICAgICAgIG91dGxldD0idG9ycXVl Lm9tLnJlY29yZG1hcHBlci5iYXNlLmRiT2JqZWN0RmllbGRHZXR0ZXIiLz4KICAgICA8L21l cmdlcG9pbnQ+CisgICAgPG1lcmdlcG9pbnQgbmFtZT0ibWFwcGluZ1N0cmF0ZWd5UGF0aCI+ CisgICAgICAgIDxhY3Rpb24geHNpOnR5cGU9ImFwcGx5QWN0aW9uIgorICAgICAgICAgICAg ICAgIG91dGxldD0idG9ycXVlLm9tLnJlY29yZG1hcHBlci5iYXNlLm1hcHBpbmdTdHJhdGVn eVBhdGgiLz4KKyAgICA8L21lcmdlcG9pbnQ+CiAgIDwvb3V0bGV0PgogCiAgIDxvdXRsZXQg bmFtZT0idG9ycXVlLm9tLnJlY29yZG1hcHBlci5iYXNlLmRiT2JqZWN0RmllbGRHZXR0ZXIi CkBAIC01OSw0ICs2MywxOCBAQAogICAgICAgeHNpOnR5cGU9InZlbG9jaXR5T3V0bGV0Igog ICAgICAgcGF0aD0icmVjb3JkbWFwcGVyL2Jhc2UvY3JlYXRlRGJPYmplY3RJbnN0YW5jZUZy b21Jbmhlcml0YW5jZS52bSI+CiAgIDwvb3V0bGV0PgorCisgIDxvdXRsZXQgbmFtZT0idG9y cXVlLm9tLnJlY29yZG1hcHBlci5iYXNlLm1hcHBpbmdTdHJhdGVneVBhdGgiCisgICAgICB4 c2k6dHlwZT0idmVsb2NpdHlPdXRsZXQiCisgICAgICBwYXRoPSJyZWNvcmRtYXBwZXIvYmFz ZS9tYXBwaW5nU3RyYXRlZ3lQYXRoLnZtIj4KKyAgICAgIDxtZXJnZXBvaW50IG5hbWU9ImNy ZWF0ZURiT2JqZWN0SW5zdGFuY2UiPgorICAgICAgICAgIDxhY3Rpb24geHNpOnR5cGU9ImFw cGx5QWN0aW9uIgorICAgICAgICAgICAgICAgICAgb3V0bGV0PSJ0b3JxdWUub20uY3JlYXRl RGJPYmplY3RJbnN0YW5jZSIvPgorICAgICAgPC9tZXJnZXBvaW50PgorICAgICAgPG1lcmdl cG9pbnQgbmFtZT0iY3JlYXRlRGJPYmplY3RJbnN0YW5jZUZyb21Jbmhlcml0YW5jZSI+Cisg ICAgICAgICAgPGFjdGlvbiB4c2k6dHlwZT0idHJhdmVyc2VBbGxBY3Rpb24iCisgICAgICAg ICAgICAgICAgICBlbGVtZW50PSJpbmhlcml0YW5jZS1jb2x1bW4iCisgICAgICAgICAgICAg ICAgICBvdXRsZXQ9InRvcnF1ZS5vbS5yZWNvcmRtYXBwZXIuYmFzZWNyZWF0ZURiT2JqZWN0 SW5zdGFuY2VGcm9tSW5oZXJpdGFuY2UiLz4KKyAgICAgIDwvbWVyZ2Vwb2ludD4KKyAgPC9v dXRsZXQ+CiA8L291dGxldHM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog dG9ycXVlLXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUv dGVtcGxhdGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBwZXJC YXNlLnZtCjwrPklTTy04ODU5LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVl LXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxh dGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBwZXJCYXNlLnZt IGIvdG9ycXVlLXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3Jx dWUvdGVtcGxhdGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBw ZXJCYXNlLnZtCi0tLSBhL3RvcnF1ZS10ZW1wbGF0ZXMvc3JjL21haW4vcmVzb3VyY2VzL29y Zy9hcGFjaGUvdG9ycXVlL3RlbXBsYXRlcy9vbS90ZW1wbGF0ZXMvcmVjb3JkbWFwcGVyL2Jh c2UvcmVjb3JkTWFwcGVyQmFzZS52bQkocmV2aXNpb24gMTkyODk4MikKKysrIGIvdG9ycXVl LXRlbXBsYXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90b3JxdWUvdGVtcGxh dGVzL29tL3RlbXBsYXRlcy9yZWNvcmRtYXBwZXIvYmFzZS9yZWNvcmRNYXBwZXJCYXNlLnZt CShkYXRlIDE3NjA1NTM4Mzg1MjMpCkBAIC0xOSwyMSArMTksMjMgQEAKICMjCiAjIyB2ZXJz aW9uICRJZDogcmVjb3JkTWFwcGVyQmFzZS52bSAxOTI3ODU0IDIwMjUtMDgtMTggMDk6NTI6 NThaIG13cmllZHQgJAogIyMKLSMjIENyZWF0ZXMgdGhlIGJhc2UgcGVlcidzIG1hcHBlciBj bGFzcy4gCi0jIyAKLSMjIFRoaXMgdGVtcGxhdGUgZXhwZWN0cyB0aGUgY3VycmVudCBzb3Vy Y2UgZWxlbWVudCB0byBiZSBhICJ0YWJsZSIgZWxlbWVudCAKKyMjIENyZWF0ZXMgdGhlIGJh c2UgcGVlcidzIG1hcHBlciBjbGFzcy4KKyMjCisjIyBUaGlzIHRlbXBsYXRlIGV4cGVjdHMg dGhlIGN1cnJlbnQgc291cmNlIGVsZW1lbnQgdG8gYmUgYSAidGFibGUiIGVsZW1lbnQKICMj IGZyb20gdGhlIHRvcnF1ZSBzY2hlbWEuCiAjIyBUaGUgc2NoZW1hIG5lZWRzIHRvIGJlIHBy b2Nlc3NlZCBieSB0aGUgT01UcmFuc2Zvcm1lci4KICMjIFRoZSBhdHRyaWJ1dGVzIG9mIHRo ZSBjdXJyZW50IHNvdXJjZSBlbGVtZW50IG11c3QgYmUgc2V0Ci0jIyBhcyB2ZWxvY2l0eSB2 YXJpYWJsZXMuICAKKyMjIGFzIHZlbG9jaXR5IHZhcmlhYmxlcy4KICMjCiBwYWNrYWdlICR7 YmFzZVJlY29yZE1hcHBlclBhY2thZ2V9OwogCitpbXBvcnQgamF2YS5pby5TZXJpYWw7CiBp bXBvcnQgamF2YS5zcWwuUmVzdWx0U2V0OwogaW1wb3J0IGphdmEuc3FsLlNRTEV4Y2VwdGlv bjsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsK IGltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVj dG9yczsKIAogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9y dCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwpAQCAtNDQsMTEgKzQ2 LDExIEBACiBpbXBvcnQgb3JnLmFwYWNoZS50b3JxdWUub20ubWFwcGVyLk1hcHBpbmdTdHJh dGVneTsKIAogI2ZvcmVhY2ggKCRjb2x1bW5FbGVtZW50IGluICR0b3JxdWVHZW4uZ2V0U291 cmNlRWxlbWVudCgpLmdldENoaWxkcmVuKCJjb2x1bW4iKSkKLSAgI3NldCAoJGNvbEVudW1Q YWNrYWdlID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJlbnVtUGFja2FnZSIpKQot ICAjc2V0ICgkY29sRW51bUNsYXNzTmFtZSA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0 ZSgiZW51bUNsYXNzTmFtZSIpKQotICAjaWYgKCRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0 ZSgiaXNFbnVtIikgPT0gInRydWUiICYmICRjb2xFbnVtUGFja2FnZSAhPSAkYmFzZVJlY29y ZE1hcHBlclBhY2thZ2UpIAotaW1wb3J0ICR7Y29sRW51bVBhY2thZ2V9LiR7Y29sRW51bUNs YXNzTmFtZX07Ci0gICNlbmQKKyAgICAjc2V0ICgkY29sRW51bVBhY2thZ2UgPSAkY29sdW1u RWxlbWVudC5nZXRBdHRyaWJ1dGUoImVudW1QYWNrYWdlIikpCisgICAgI3NldCAoJGNvbEVu dW1DbGFzc05hbWUgPSAkY29sdW1uRWxlbWVudC5nZXRBdHRyaWJ1dGUoImVudW1DbGFzc05h bWUiKSkKKyAgICAjaWYgKCRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgiaXNFbnVtIikg PT0gInRydWUiICYmICRjb2xFbnVtUGFja2FnZSAhPSAkYmFzZVJlY29yZE1hcHBlclBhY2th Z2UpCisgICAgaW1wb3J0ICR7Y29sRW51bVBhY2thZ2V9LiR7Y29sRW51bUNsYXNzTmFtZX07 CisgICAgI2VuZAogI2VuZAogI2lmICgke2Jhc2VSZWNvcmRNYXBwZXJQYWNrYWdlfSAhPSAk ZGJPYmplY3RQYWNrYWdlKQogaW1wb3J0ICR7ZGJPYmplY3RQYWNrYWdlfS4ke2RiT2JqZWN0 Q2xhc3NOYW1lfTsKQEAgLTYzLDE3NiArNjUsMTIzIEBACiAjc2V0ICggJGluaGVyaXRhbmNl QmFzZUNvbHVtbkVsZW1lbnRzID0gJHRvcnF1ZUdlbi5nZXRDaGlsZHJlbigiaW5oZXJpdGFu Y2UtY29sdW1uIikpCiAjIyB0aGVyZSBzaG91bGQgYXQgbW9zdCBiZSBvbmUgaW5oZXJpdGFu Y2UtY29sdW1uIGluIGVhY2ggdGFibGUKICNmb3JlYWNoICgkaW5oZXJpdGFuY2VCYXNlQ29s dW1uRWxlbWVudCBpbiAkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVudHMpCi0gICNzZXQg KCAkY29sdW1uRWxlbWVudCA9ICRpbmhlcml0YW5jZUJhc2VDb2x1bW5FbGVtZW50LmdldENo aWxkKCJjb2x1bW4iKSApCi0gICNzZXQgKCAkaW5oZXJpdGFuY2VFbGVtZW50cyA9ICRjb2x1 bW5FbGVtZW50LmdldENoaWxkcmVuKCJpbmhlcml0YW5jZSIpKQotICAjaWYgKCRpbmhlcml0 YW5jZUVsZW1lbnRzLnNpemUoKSA+IDApCi0gICAgI2lmICgke2Jhc2VSZWNvcmRNYXBwZXJQ YWNrYWdlfSAhPSAkZGJPYmplY3RQYWNrYWdlKQotICAgICAgI2ZvcmVhY2ggKCRpbmhlcml0 YW5jZUVsZW1lbnQgaW4gJGluaGVyaXRhbmNlRWxlbWVudHMpCi0gICAgICAgICNzZXQgKCAk aW5oZXJpdGFuY2VDbGFzc05hbWUgPSAkaW5oZXJpdGFuY2VFbGVtZW50LmdldEF0dHJpYnV0 ZSgiY2xhc3NOYW1lIikgKQotaW1wb3J0ICR7ZGJPYmplY3RQYWNrYWdlfS4ke2luaGVyaXRh bmNlQ2xhc3NOYW1lfTsKLSAgICAgICNlbmQKLSAgICAjZW5kCi0gICNlbmQKKyAgICAjc2V0 ICggJGNvbHVtbkVsZW1lbnQgPSAkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVudC5nZXRD aGlsZCgiY29sdW1uIikgKQorICAgICNzZXQgKCAkaW5oZXJpdGFuY2VFbGVtZW50cyA9ICRj b2x1bW5FbGVtZW50LmdldENoaWxkcmVuKCJpbmhlcml0YW5jZSIpKQorICAgICNpZiAoJGlu aGVyaXRhbmNlRWxlbWVudHMuc2l6ZSgpID4gMCkKKyAgICAgICAgI2lmICgke2Jhc2VSZWNv cmRNYXBwZXJQYWNrYWdlfSAhPSAkZGJPYmplY3RQYWNrYWdlKQorICAgICAgICAgICAgI2Zv cmVhY2ggKCRpbmhlcml0YW5jZUVsZW1lbnQgaW4gJGluaGVyaXRhbmNlRWxlbWVudHMpCisg ICAgICAgICAgICAgICAgI3NldCAoICRpbmhlcml0YW5jZUNsYXNzTmFtZSA9ICRpbmhlcml0 YW5jZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKSApCisgICAgICAgICAgICBp bXBvcnQgJHtkYk9iamVjdFBhY2thZ2V9LiR7aW5oZXJpdGFuY2VDbGFzc05hbWV9OworICAg ICAgICAgICAgI2VuZAorICAgICAgICAjZW5kCisgICAgI2VuZAogI2VuZAogLyoqCiAgKiBN YXBzIFJlc3VsdFNldCByb3dzIGludG8gJHtkYk9iamVjdENsYXNzTmFtZX0gb2JqZWN0cy4K ICAqCi0jaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLmFkZFRpbWVT dGFtcCIpKQotICogVGhlIHNrZWxldG9uIGZvciB0aGlzIGNsYXNzIHdhcyBhdXRvZ2VuZXJh dGVkIGJ5IFRvcnF1ZSBvbjoKLSAqCi0gKiBbJHt0b3JxdWVHZW4ubm93KCl9XQotICoKLSNl bmQKKyAgICAjaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLmFkZFRp bWVTdGFtcCIpKQorICAgICAqIFRoZSBza2VsZXRvbiBmb3IgdGhpcyBjbGFzcyB3YXMgYXV0 b2dlbmVyYXRlZCBieSBUb3JxdWUgb246CisgICAgICoKKyAgICAgKiBbJHt0b3JxdWVHZW4u bm93KCl9XQorICAgICAqCisgICAgI2VuZAogICovCiBAU3VwcHJlc3NXYXJuaW5ncygidW51 c2VkIikKIHB1YmxpYyBjbGFzcyAke2Jhc2VSZWNvcmRNYXBwZXJDbGFzc05hbWV9IGltcGxl bWVudHMgUmVjb3JkTWFwcGVyPCR7ZGJPYmplY3RDbGFzc05hbWV9PgogewotI2lmICgkdG9y cXVlR2VuLmJvb2xlYW5PcHRpb24oInRvcnF1ZS5vbS5hZGRUaW1lU3RhbXAiKSkKICAgICAv KiogU2VyaWFsIHZlcnNpb24gKi8KK0BTZXJpYWwKKyAgICAjaWYgKCR0b3JxdWVHZW4uYm9v bGVhbk9wdGlvbigidG9ycXVlLm9tLmFkZFRpbWVTdGFtcCIpKQogICAgIHByaXZhdGUgc3Rh dGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9ICR7dG9ycXVlR2VuLm5vdygpLlRp bWV9TDsKIAotI2Vsc2UKLSAgICAvKiogU2VyaWFsIHZlcnNpb24gKi8KLSAgICBwcml2YXRl IHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKyAgICAjZWxzZQor ICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAx TDsKIAotI2VuZAorICAgICNlbmQKICAgICAvKiogVGhlIGNsYXNzIGxvZy4gKi8KLSAgICBw cml2YXRlIHN0YXRpYyBMb2cgbG9nCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIGxv ZwogICAgICAgICAgICAgPSBMb2dGYWN0b3J5LmdldExvZygke2Jhc2VSZWNvcmRNYXBwZXJD bGFzc05hbWV9LmNsYXNzKTsKLSAgICAgICAgICAgIAorCiAgICAgIyMgVE9SUVVFLTM2NDog Q2FjaGVkIFNRTCBleHByZXNzaW9ucyB0byBzcGVlZCB1cCBsb29raW5nIGZvciBjb2x1bW5z IHNlbGVjdGVkIGJ5IGEgZ2l2ZW4gQ3JpdGVyaWEKLSNmb3JlYWNoICgkY29sdW1uRWxlbWVu dCBpbiAkdG9ycXVlR2VuLmdldENoaWxkcmVuKCJjb2x1bW4iKSkKLSAgICAjc2V0ICggJHBl ZXJDb2x1bW5OYW1lID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJwZWVyQ29sdW1u TmFtZSIpICkKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgJHtwZWVyQ29sdW1u TmFtZX1fRVhQUkVTU0lPTiA9ICR7YmFzZVBlZXJDbGFzc05hbWV9LiR7cGVlckNvbHVtbk5h bWV9LmdldFNxbEV4cHJlc3Npb24oKTsKLSNlbmQKKyAgICAjZm9yZWFjaCAoJGNvbHVtbkVs ZW1lbnQgaW4gJHRvcnF1ZUdlbi5nZXRDaGlsZHJlbigiY29sdW1uIikpCisgICAgICAgICNz ZXQgKCAkcGVlckNvbHVtbk5hbWUgPSAkY29sdW1uRWxlbWVudC5nZXRBdHRyaWJ1dGUoInBl ZXJDb2x1bW5OYW1lIikgKQorICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg JHtwZWVyQ29sdW1uTmFtZX1fRVhQUkVTU0lPTiA9ICR7YmFzZVBlZXJDbGFzc05hbWV9LiR7 cGVlckNvbHVtbk5hbWV9LmdldFNxbEV4cHJlc3Npb24oKTsKKyAgICAjZW5kCiAKLSAgICAj IyBUT1JRVUUtMzY0OiBSZW1vdmVkIHN0cmF0ZWd5IGluc3RhbmNlIHZhcmlhYmxlIGFzIHRo aXMgYmUgY2FjaGVkIHBlciBSZWNvcmRNYXBwZXIgKFRocmVhZCBzYWZldHkvTXVsdGkgcXVl cnkgc2FmZXR5PykKLSAgICAKLSAgICAjIyBUT1JRVUUtMzY0OiBpbml0IGEgbmV3IFN0cmF0 ZWd5IGltcGxlbWVudGF0aW9uCi0gICAgIyMgVE9SUVVFLTM3MjogaW5pdCBpcyBub3QgVGhy ZWFkIHNhdmUgY2F1c2UgQXJyYXkgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbgot ICAgIHB1YmxpYyBNYXBwaW5nU3RyYXRlZ3k8JHtkYk9iamVjdENsYXNzTmFtZX0+IGluaXRT dHJhdGVneSgpCi0gICAgewotICAgICAgICAjaWYoIiR7dXNlTWFwcGluZ1N0cmF0ZWd5fSIg PT0gInRydWUiKQotICAgICAgICByZXR1cm4gbmV3IE1hcHBpbmdTdHJhdGVneTwke2RiT2Jq ZWN0Q2xhc3NOYW1lfT4oKTsKLSAgICAgICAgI2Vsc2UKLSAgICAgICAgLy8gbm8gTWFwcGlu Z1N0cmF0ZWd5IHNpbmNlIHVzZU1hcHBpbmdTdHJhdGVneSBub3Qgc2V0Ci0gICAgICAgIHJl dHVybiBudWxsOwotICAgICAgICAjZW5kCi0gICAgfQotI2lmKCIke3NpbXBsZU1hcHBpbmd9 IiA9PSAidHJ1ZSIpICNzZXQoICR1c2VTaW1wbGVNYXBwaW5nPTEgKSAjZW5kCi0KICAgICAv KioKICAgICAgKiBDb25zdHJ1Y3RzIHRoZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCByb3cg aW4gdGhlIHJlc3VsdFNldC4KICAgICAgKgogICAgICAqIEBwYXJhbSByZXN1bHRTZXQgdGhl IHJlc3VsdFNldCB0byBvcGVyYXRlIG9uLCBhbHJlYWR5IHBvaW50aW5nCi0gICAgICogICAg ICAgIHRvIHRoZSBjb3JyZWN0IHJvdy4gTm90IG51bGwuCisgICAgICogdG8gdGhlIGNvcnJl Y3Qgcm93LiBOb3QgbnVsbC4KICAgICAgKiBAcGFyYW0gb2Zmc2V0IGEgcG9zc2libGUgb2Zm c2V0IGluIHRoZSBjb2x1bW5zIHRvIGJlIGNvbnNpZGVyZWQKLSAgICAgKiAgICAgICAgKGlm IHByZXZpb3VzIGNvbHVtbnMgY29udGFpbiBvdGhlciBvYmplY3RzKSwKLSAgICAgKiAgICAg ICAgb3IgMCBmb3Igbm8gb2Zmc2V0LgorICAgICAqIChpZiBwcmV2aW91cyBjb2x1bW5zIGNv bnRhaW4gb3RoZXIgb2JqZWN0cyksCisgICAgICogb3IgMCBmb3Igbm8gb2Zmc2V0LgogICAg ICAqIEBwYXJhbSBjcml0ZXJpYSBUaGUgY3JpdGVyaWEgd2hpY2ggY3JlYXRlZCB0aGUgcmVz dWx0IHNldC4KLSAgICAgKiAgICAgICAgSWYgc2V0LCB0aGUgYXR0cmlidXRlcyB0byBzZXQg aW4gdGhlIGRhdGEgb2JqZWN0Ci0gICAgICogICAgICAgIGFyZSBkZXRlcm1pbmVkIGZyb20g dGhlIHNlbGVjdCBjb2x1bW5zIGluIHRoZSBjcml0ZXJpYTsKLSAgICAgKiAgICAgICAgaWYg bm8gbWF0Y2hpbmcgY29sdW1uIGNhbiBiZSBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC4KLSAg ICAgKiAgICAgICAgSWYgbm90IHNldCwgYWxsIG9mIHRoZSB0YWJsZSdzIGNvbHVtbnMgYXJl IHJlYWQgZnJvbSB0aGUKLSAgICAgKiAgICAgICAgcmVzdWx0IHNldCBpbiB0aGUgb3JkZXIg ZGVmaW5lZCBpbiB0aGUgdGFibGUgZGVmaW5pdGlvbi4KKyAgICAgKiBJZiBzZXQsIHRoZSBh dHRyaWJ1dGVzIHRvIHNldCBpbiB0aGUgZGF0YSBvYmplY3QKKyAgICAgKiBhcmUgZGV0ZXJt aW5lZCBmcm9tIHRoZSBzZWxlY3QgY29sdW1ucyBpbiB0aGUgY3JpdGVyaWE7CisgICAgICog aWYgbm8gbWF0Y2hpbmcgY29sdW1uIGNhbiBiZSBmb3VuZCwgbnVsbCBpcyByZXR1cm5lZC4K KyAgICAgKiBJZiBub3Qgc2V0LCBhbGwgb2YgdGhlIHRhYmxlJ3MgY29sdW1ucyBhcmUgcmVh ZCBmcm9tIHRoZQorICAgICAqIHJlc3VsdCBzZXQgaW4gdGhlIG9yZGVyIGRlZmluZWQgaW4g dGhlIHRhYmxlIGRlZmluaXRpb24uCiAgICAgICoKICAgICAgKiBAcmV0dXJuIHRoZSBtYXBw ZWQgb2JqZWN0LCBub3QgbnVsbC4KICAgICAgKgogICAgICAqIEB0aHJvd3MgVG9ycXVlRXhj ZXB0aW9uIHdoZW4gcmVhZGluZyBmaWVsZHMgZnJvbSB0aGUgUmVjb3JkU2V0IGZhaWxzCi0g ICAgICogICAgICAgICBvciBpZiBhIENyaXRlcmlhIGlzIHBhc3NlZCB3aGljaCBjb250YWlu cyBzZWxlY3QgY29sdW1ucyBvdGhlcgotICAgICAqICAgICAgICAgdGhhbiB0aGUgY29sdW1u cyBpbiB0aGUgJHtuYW1lfSB0YWJsZS4KKyAgICAgKiBvciBpZiBhIENyaXRlcmlhIGlzIHBh c3NlZCB3aGljaCBjb250YWlucyBzZWxlY3QgY29sdW1ucyBvdGhlcgorICAgICAqIHRoYW4g dGhlIGNvbHVtbnMgaW4gdGhlICR7bmFtZX0gdGFibGUuCiAgICAgICovCiAgICAgcHVibGlj ICRkYk9iamVjdENsYXNzTmFtZSBwcm9jZXNzUm93KAotICAgICAgICAgICAgICAgIFJlc3Vs dFNldCByZXN1bHRTZXQsCi0gICAgICAgICAgICAgICAgaW50IG9mZnNldCwKLSAgICAgICAg ICAgICAgICBDcml0ZXJpYSBjcml0ZXJpYSkKKyAgICAgICAgUmVzdWx0U2V0IHJlc3VsdFNl dCwKKyAgICBpbnQgb2Zmc2V0LAorICAgIENyaXRlcmlhIGNyaXRlcmlhKQogICAgICAgICAg ICAgdGhyb3dzIFRvcnF1ZUV4Y2VwdGlvbgogICAgIHsKLSNzZXQgKCAkaW5oZXJpdGFuY2VC YXNlQ29sdW1uRWxlbWVudCA9ICR0b3JxdWVHZW4uZ2V0Q2hpbGQoImluaGVyaXRhbmNlLWNv bHVtbiIpICkKLSNpZiAoJGluaGVyaXRhbmNlQmFzZUNvbHVtbkVsZW1lbnQpCi0kdG9ycXVl R2VuLm1lcmdlcG9pbnQoImNyZWF0ZURiT2JqZWN0SW5zdGFuY2VGcm9tSW5oZXJpdGFuY2Ui KQotI2Vsc2UKLSR0b3JxdWVHZW4ubWVyZ2Vwb2ludCgiY3JlYXRlRGJPYmplY3RJbnN0YW5j ZSIpCi0jZW5kCi0jaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLnRy YWNrTG9hZGluZyIpKQotICAgICAgICB0cnkgCisgICAgICAgICNzZXQgKCAkaW5oZXJpdGFu Y2VCYXNlQ29sdW1uRWxlbWVudCA9ICR0b3JxdWVHZW4uZ2V0Q2hpbGQoImluaGVyaXRhbmNl LWNvbHVtbiIpICkKKyAgICAgICAgI2lmICgkaW5oZXJpdGFuY2VCYXNlQ29sdW1uRWxlbWVu dCkKKyAgICAgICAgICAgICR0b3JxdWVHZW4ubWVyZ2Vwb2ludCgiY3JlYXRlRGJPYmplY3RJ bnN0YW5jZUZyb21Jbmhlcml0YW5jZSIpCisgICAgICAgICNlbHNlCisgICAgICAgICAgICAk dG9ycXVlR2VuLm1lcmdlcG9pbnQoImNyZWF0ZURiT2JqZWN0SW5zdGFuY2UiKQorICAgICAg ICAjZW5kCisgICAgICAgICNpZiAoJHRvcnF1ZUdlbi5ib29sZWFuT3B0aW9uKCJ0b3JxdWUu b20udHJhY2tMb2FkaW5nIikpCisgICAgICAgIHRyeQogICAgICAgICB7CiAgICAgICAgICAg ICAke2ZpZWxkfS5zZXRMb2FkaW5nKHRydWUpOwotI2VuZAotICAgICAgICAjIyBUT1JRVUUt MzY0IC0gc2ltcGxlIG1hcHBpbmcgaWYgd2UgZ290IHRoZSBleGFjdCBjb2x1bW4gc2l6ZSB3 ZSBhc3N1bWUgdGhlIGZ1bGwgdGFibGUgaXMgdXNlZCBpbiBjcml0ZXJpYSAtIHNraXBwaW5n IHRoZSBtYXBwaW5nIG9mIGV2ZXJ5IGNvbHVtbgotICAgICAgICBpZiAoY3JpdGVyaWEgPT0g bnVsbCAjaWYgKCR1c2VTaW1wbGVNYXBwaW5nKSB8fCAoY3JpdGVyaWEuZ2V0Sm9pbnMoKS5p c0VtcHR5KCkgJiYgY3JpdGVyaWEuZ2V0U2VsZWN0Q29sdW1ucygpLnNpemUoKSAtIG9mZnNl dCA9PSAgJHtiYXNlUGVlckNsYXNzTmFtZX0ubnVtQ29sdW1ucykgI2VuZCkKKyAgICAgICAg I2VuZAorICAgICAgICBpZiAoY3JpdGVyaWEgPT0gbnVsbCkKICAgICAgICAgewotI3NldCAo ICRuID0gMSApCi0jZm9yZWFjaCAoJGNvbHVtbkVsZW1lbnQgaW4gJHRvcnF1ZUdlbi5nZXRD aGlsZHJlbigiY29sdW1uIikpCi0gICNzZXQgKCAkc2V0dGVyID0gJGNvbHVtbkVsZW1lbnQu Z2V0QXR0cmlidXRlKCJzZXR0ZXIiKSApCi0gICNzZXQgKCAkZ2V0dGVyID0gJGNvbHVtbkVs ZW1lbnQuZ2V0QXR0cmlidXRlKCJnZXR0ZXIiKSApCisgICAgICAgICAgICAjc2V0ICggJG4g PSAxICkKKyAgICAgICAgICAgICNmb3JlYWNoICgkY29sdW1uRWxlbWVudCBpbiAkdG9ycXVl R2VuLmdldENoaWxkcmVuKCJjb2x1bW4iKSkKKyAgICAgICAgICAgICAgICAjc2V0ICggJHNl dHRlciA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgic2V0dGVyIikgKQorICAgICAg ICAgICAgICAgICNzZXQgKCAkZ2V0dGVyID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRl KCJnZXR0ZXIiKSApCiAgICAgICAgICAgICAgICAgJHtmaWVsZH0uJHtzZXR0ZXJ9KAotICAg ICAgICAgICAgICAgICAgICAgICAgJHtnZXR0ZXJ9KHJlc3VsdFNldCwgb2Zmc2V0ICsgJG4p KTsKLSAgI3NldCAoICRuID0gJG4gKyAxICkKLSNlbmQKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAjIyBUT1JRVUUt MzcyOiB0aHJlYWQgc2F2ZQotICAgICAgICAgICAgICAgIE1hcHBpbmdTdHJhdGVneTwke2Ri T2JqZWN0Q2xhc3NOYW1lfT4gc3RyYXRlZ3lMb2M9IGluaXRTdHJhdGVneSgpOyAKLQotICAg ICAgICAgICAgICAgIC8vIHRyeSB0byBnZXQgY29sdW1ucyB0byBiZSBtYXBwZWQKLSAgICAg ICAgICAgICAgICAvLyBmcm9tIGNyaXRlcmlhJ3Mgc2VsZWN0IGNvbHVtbnMKLSAgICAgICAg ICAgICAgICBpbnQgdG90YWxPZmZzZXQgPSBvZmZzZXQgKyAxOwotICAgICAgICAgICAgICAg IExpc3Q8Q29sdW1uPiBzZWxlY3RDb2x1bW5zID0gY3JpdGVyaWEuZ2V0U2VsZWN0Q29sdW1u cygpOwotICAgICAgICAgICAgICAgIExpc3Q8Q29sdW1uPiBjb2x1bW5zV2l0aG91dE9mZnNl dCA9IHNlbGVjdENvbHVtbnMuc3ViTGlzdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG9m ZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RDb2x1bW5zLnNpemUoKSk7 Ci0gICAgICAgICAgICAgICAgU2V0PFN0cmluZz4gY29sdW1uc01hcHBlZCA9IG5ldyBIYXNo U2V0PFN0cmluZz4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKENvbHVtbiBjb2x1bW4gOiBj b2x1bW5zV2l0aG91dE9mZnNldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgICAgIGZpbmFsIGludCBuZXh0T2Zmc2V0ID0gdG90YWxPZmZzZXQ7ICMjIGxlYWtpbmcg YXNzaWdubWVudAotI3NldCAoICRlbHNlID0gIiIgKQotI2ZvcmVhY2ggKCRjb2x1bW5FbGVt ZW50IGluICR0b3JxdWVHZW4uZ2V0Q2hpbGRyZW4oImNvbHVtbiIpKQotICAjc2V0ICggJHNl dHRlciA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgic2V0dGVyIikgKQotICAjc2V0 ICggJGdldHRlciA9ICRjb2x1bW5FbGVtZW50LmdldEF0dHJpYnV0ZSgiZ2V0dGVyIikgKQot ICAjc2V0ICggJHBlZXJDb2x1bW5OYW1lID0gJGNvbHVtbkVsZW1lbnQuZ2V0QXR0cmlidXRl KCJwZWVyQ29sdW1uTmFtZSIpICkKLSAgICAgICAgICAgICAgICAgICAgJHtlbHNlfQotICAg ICAgICAgICAgICAgICAgICBpZiAoIWNvbHVtbnNNYXBwZWQuY29udGFpbnMoJHtwZWVyQ29s dW1uTmFtZX1fRVhQUkVTU0lPTiApICYmICR7cGVlckNvbHVtbk5hbWV9X0VYUFJFU1NJT04u ZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5nZXRTcWxFeHBy ZXNzaW9uKCkpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBpZiAoc3RyYXRlZ3lMb2MhPW51bGwpIAotICAgICAgICAgICAgICAgICAgICAgICAg ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5TG9jLmFkZENvbHVtbihu ZXh0T2Zmc2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcywgaW5z dCkgLT4gaW5zdC4ke3NldHRlcn0oICR7Z2V0dGVyfShyZXMsIG5leHRPZmZzZXQpKSk7Ci0g ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2ZpZWxkfS4ke3NldHRlcn0oICR7 Z2V0dGVyfShyZXN1bHRTZXQsIHRvdGFsT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zTWFwcGVkLmFkZCggJHtw ZWVyQ29sdW1uTmFtZX1fRVhQUkVTU0lPTiApOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICNzZXQgKCAkZWxzZSA9ICJlbHNlICIpCi0jZW5kCi0gICAgICAgICAgICAgICAgICAgIHRv dGFsT2Zmc2V0Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChj b2x1bW5zTWFwcGVkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgICAgIGxvZy5kZWJ1Zygibm8gY29sdW1ucyB0byBtYXAgZm91bmQgaW4gY3JpdGVy aWEsICIKKyAgICAgICAgICAgICAgICAke2dldHRlcn0ocmVzdWx0U2V0LCBvZmZzZXQgKyAk bikpOworICAgICAgICAgICAgICAgICNzZXQgKCAkbiA9ICRuICsgMSApCisgICAgICAgICAg ICAjZW5kCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg ICAjIyBUaGlzIGlzIHRoZSBzbG93IHBhdGgsIGJ1dCB3ZSBjYW4gcmV1c2UgdGhlIHN0cmF0 ZWd5IGdlbmVyYXRpb24gbG9naWMKKyAgICAgICAgICAgICMjIHRvIGF2b2lkIGR1cGxpY2F0 aW5nIHRoZSBtYXBwaW5nIGNvZGUuCisgICAgICAgICAgICBNYXBwaW5nU3RyYXRlZ3k8JHtk Yk9iamVjdENsYXNzTmFtZX0+IHN0cmF0ZWd5ID0gZ2VuZXJhdGVTdHJhdGVneShvZmZzZXQs IGNyaXRlcmlhKTsKKyAgICAgICAgICAgIGlmIChzdHJhdGVneSA9PSBudWxsKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiQ291bGQgbm90IGdlbmVyYXRl IGEgbWFwcGluZyBzdHJhdGVneSBmb3IgdGhlIGdpdmVuIGNyaXRlcmlhLCAiCiAgICAgICAg ICAgICAgICAgICAgICAgICArICJyZXR1cm5pbmcgbnVsbCIpOwotICAgICAgICAgICAgICAg ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg aWYgKHN0cmF0ZWd5TG9jIT1udWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICAgIHN0cmF0ZWd5TG9jLmZpbmlzaCgkdG9ycXVlR2VuLmdldENoaWxkcmVuKCJjb2x1 bW4iKS5zaXplKCksICNpZigiJHttYXBwaW5nU3RyYXRlZ3lTb3J0fSI9PSJ0cnVlIil0cnVl I3tlbHNlfWZhbHNlI2VuZCk7Ci0gICAgICAgICAgICAgICAgICBzdHJhdGVneUxvYy5leGVj dXRlKHJlc3VsdFNldCwgJGZpZWxkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICAke2ZpZWxkfS5zZXROZXcoZmFsc2UpOwotICAgICAgICAgICAg JHtmaWVsZH0uc2V0TW9kaWZpZWQoZmFsc2UpOwotI2lmICgkdG9ycXVlR2VuLmJvb2xlYW5P cHRpb24oInRvcnF1ZS5vbS50cmFja0xvYWRpbmciKSkKKyAgICAgICAgICAgICAgICByZXR1 cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmF0ZWd5LmV4ZWN1dGUo cmVzdWx0U2V0LCAke2ZpZWxkfSk7CisgICAgICAgIH0KKyAgICAgICAgJHtmaWVsZH0uc2V0 TmV3KGZhbHNlKTsKKyAgICAgICAgJHtmaWVsZH0uc2V0TW9kaWZpZWQoZmFsc2UpOworICAg ICAgICAjaWYgKCR0b3JxdWVHZW4uYm9vbGVhbk9wdGlvbigidG9ycXVlLm9tLnRyYWNrTG9h ZGluZyIpKQogICAgICAgICB9CiAgICAgICAgIGZpbmFsbHkKICAgICAgICAgewogICAgICAg ICAgICAgJHtmaWVsZH0uc2V0TG9hZGluZyhmYWxzZSk7CiAgICAgICAgIH0KLSNlbmQKKyAg ICAgICAgI2VuZAogICAgICAgICByZXR1cm4gJHtmaWVsZH07CiAgICAgfQogCi0kdG9ycXVl R2VuLm1lcmdlcG9pbnQoImRiT2JqZWN0RmllbGRHZXR0ZXJzIikKLX0KKyAgICAkdG9ycXVl R2VuLm1lcmdlcG9pbnQoIm1hcHBpbmdTdHJhdGVneVBhdGgiKQorICAgICR0b3JxdWVHZW4u bWVyZ2Vwb2ludCgiZGJPYmplY3RGaWVsZEdldHRlcnMiKQorfQpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKSW5kZXg6IHRvcnF1ZS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2Fw YWNoZS90b3JxdWUvdXRpbC9SZXN1bHRzZXRTcGxpdGVyYXRvci5qYXZhCjwrPklTTy04ODU5 LTEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4v amF2YS9vcmcvYXBhY2hlL3RvcnF1ZS91dGlsL1Jlc3VsdHNldFNwbGl0ZXJhdG9yLmphdmEg Yi90b3JxdWUtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL3V0aWwv UmVzdWx0c2V0U3BsaXRlcmF0b3IuamF2YQotLS0gYS90b3JxdWUtcnVudGltZS9zcmMvbWFp bi9qYXZhL29yZy9hcGFjaGUvdG9ycXVlL3V0aWwvUmVzdWx0c2V0U3BsaXRlcmF0b3IuamF2 YQkocmV2aXNpb24gMTkyODk4MikKKysrIGIvdG9ycXVlLXJ1bnRpbWUvc3JjL21haW4vamF2 YS9vcmcvYXBhY2hlL3RvcnF1ZS91dGlsL1Jlc3VsdHNldFNwbGl0ZXJhdG9yLmphdmEJKGRh dGUgMTc1ODY1MzA5MjMzMCkKQEAgLTMxLDYgKzMxLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hl LnRvcnF1ZS5Ub3JxdWVFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50b3JxdWUuVG9y cXVlUnVudGltZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnRvcnF1ZS5jcml0ZXJp YS5Dcml0ZXJpYTsKK2ltcG9ydCBvcmcuYXBhY2hlLnRvcnF1ZS5vbS5tYXBwZXIuTWFwcGlu Z1N0cmF0ZWd5OwogaW1wb3J0IG9yZy5hcGFjaGUudG9ycXVlLm9tLm1hcHBlci5SZWNvcmRN YXBwZXI7CiAKIC8qKgpAQCAtNDEsNiArNDIsNyBAQAogcHVibGljIGNsYXNzIFJlc3VsdHNl dFNwbGl0ZXJhdG9yPFQ+IGV4dGVuZHMgQWJzdHJhY3RTcGxpdGVyYXRvcjxUPiBpbXBsZW1l bnRzIFJ1bm5hYmxlCiB7CiAgICAgcHJpdmF0ZSBmaW5hbCBSZWNvcmRNYXBwZXI8VD4gcmVj b3JkTWFwcGVyOworICAgIHByaXZhdGUgZmluYWwgTWFwcGluZ1N0cmF0ZWd5PFQ+IG1hcHBp bmdTdHJhdGVneTsKICAgICBwcml2YXRlIGZpbmFsIENyaXRlcmlhIGNyaXRlcmlhOwogICAg IHByaXZhdGUgZmluYWwgU3RhdGVtZW50IHN0YXRlbWVudDsKICAgICBwcml2YXRlIGZpbmFs IFJlc3VsdFNldCByZXN1bHRTZXQ7CkBAIC01MCwxNiArNTIsMTcgQEAKICAgICBwcml2YXRl IGxvbmcgcm93TnVtYmVyOwogCiAgICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IKKyAgICAg KiBDb25zdHJ1Y3RvciB3aXRoIGFuIGV4cGxpY2l0IE1hcHBpbmdTdHJhdGVneS4KICAgICAg KgogICAgICAqIEBwYXJhbSByZWNvcmRNYXBwZXIgYSBSZWNvcmRNYXBwZXIgdG8gbWFwIFJl c3VsdFNldCByb3dzIHRvIGVudGl0aWVzIG9mIHR5cGUgVAogICAgICAqIEBwYXJhbSBjcml0 ZXJpYSAgICAgYSBDcml0ZXJpYQogICAgICAqIEBwYXJhbSBzdGF0ZW1lbnQgICAgdGhlIHN0 YXRlbWVudCB0aGF0IGNyZWF0ZWQgdGhlIFJlc3VsdFNldAogICAgICAqIEBwYXJhbSByZXN1 bHRTZXQgICAgdGhlIEpEQkMgcmVzdWx0IHNldAorICAgICAqIEBwYXJhbSBtYXBwaW5nU3Ry YXRlZ3kgICAgIGEgTWFwcGluZ1N0cmF0ZWd5IHRvIHVzZQogICAgICAqIEB0aHJvd3MgVG9y cXVlRXhjZXB0aW9uIGJhY2tlbmQgZGF0YWJhc2UgZXhjZXB0aW9uCiAgICAgICovCiAgICAg cHVibGljIFJlc3VsdHNldFNwbGl0ZXJhdG9yKFJlY29yZE1hcHBlcjxUPiByZWNvcmRNYXBw ZXIsIENyaXRlcmlhIGNyaXRlcmlhLAotICAgICAgICAgICAgU3RhdGVtZW50IHN0YXRlbWVu dCwgUmVzdWx0U2V0IHJlc3VsdFNldCkgdGhyb3dzIFRvcnF1ZUV4Y2VwdGlvbgorICAgICAg ICAgICAgU3RhdGVtZW50IHN0YXRlbWVudCwgUmVzdWx0U2V0IHJlc3VsdFNldCwgTWFwcGlu Z1N0cmF0ZWd5PFQ+IG1hcHBpbmdTdHJhdGVneSkgdGhyb3dzIFRvcnF1ZUV4Y2VwdGlvbgog ICAgIHsKICAgICAgICAgc3VwZXIoTG9uZy5NQVhfVkFMVUUsIFNwbGl0ZXJhdG9yLk9SREVS RUQpOwogCkBAIC02Nyw2ICs3MCw4IEBACiAgICAgICAgIHRoaXMuY3JpdGVyaWEgPSBjcml0 ZXJpYTsKICAgICAgICAgdGhpcy5zdGF0ZW1lbnQgPSBzdGF0ZW1lbnQ7CiAgICAgICAgIHRo aXMucmVzdWx0U2V0ID0gcmVzdWx0U2V0OworICAgICAgICBNYXBwaW5nU3RyYXRlZ3k8VD4g bXlNYXBwaW5nU3RyYXRlZ3kgPSBtYXBwaW5nU3RyYXRlZ3k7CisKICAgICAgICAgdGhpcy5v ZmZzZXQgPSAwOyAvL2RhdGFiYXNlIHRha2VzIGNhcmUgb2Ygb2Zmc2V0CiAgICAgICAgIHRo aXMubGltaXQgPSAtMTsgLy9kYXRhYmFzZSB0YWtlcyBjYXJlIG9mIGxpbWl0CiAgICAgICAg IHRoaXMucm93TnVtYmVyID0gMDsKQEAgLTkxLDcgKzk2LDI4IEBACiAgICAgICAgICAgICAg ICAgICAgIGxpbWl0ID0gb2Zmc2V0ICsgY3JpdGVyaWEuZ2V0TGltaXQoKTsKICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEg c3RyYXRlZ3ksIGlmIG5vdCBhbHJlYWR5IHByb3ZpZGVkCisgICAgICAgICAgICBpZiAobWFw cGluZ1N0cmF0ZWd5ID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBteU1hcHBpbmdTdHJh dGVneSA9IHJlY29yZE1hcHBlci5nZW5lcmF0ZVN0cmF0ZWd5KG9mZnNldCwgY3JpdGVyaWEp OworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHRoaXMubWFwcGluZ1N0cmF0 ZWd5ID0gbXlNYXBwaW5nU3RyYXRlZ3k7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ29u c3RydWN0b3IKKyAgICAgKgorICAgICAqIEBwYXJhbSByZWNvcmRNYXBwZXIgYSBSZWNvcmRN YXBwZXIgdG8gbWFwIFJlc3VsdFNldCByb3dzIHRvIGVudGl0aWVzIG9mIHR5cGUgVAorICAg ICAqIEBwYXJhbSBjcml0ZXJpYSAgICAgYSBDcml0ZXJpYQorICAgICAqIEBwYXJhbSBzdGF0 ZW1lbnQgICAgdGhlIHN0YXRlbWVudCB0aGF0IGNyZWF0ZWQgdGhlIFJlc3VsdFNldAorICAg ICAqIEBwYXJhbSByZXN1bHRTZXQgICAgdGhlIEpEQkMgcmVzdWx0IHNldAorICAgICAqIEB0 aHJvd3MgVG9ycXVlRXhjZXB0aW9uIGJhY2tlbmQgZGF0YWJhc2UgZXhjZXB0aW9uCisgICAg ICovCisgICAgcHVibGljIFJlc3VsdHNldFNwbGl0ZXJhdG9yKFJlY29yZE1hcHBlcjxUPiBy ZWNvcmRNYXBwZXIsIENyaXRlcmlhIGNyaXRlcmlhLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdGF0ZW1lbnQgc3RhdGVtZW50LCBSZXN1bHRTZXQgcmVzdWx0U2V0KSB0 aHJvd3MgVG9ycXVlRXhjZXB0aW9uCisgICAgeworICAgICAgICB0aGlzKHJlY29yZE1hcHBl ciwgY3JpdGVyaWEsIHN0YXRlbWVudCwgcmVzdWx0U2V0LCBudWxsKTsKICAgICB9CiAKICAg ICAvKiAobm9uLUphdmFkb2MpCkBAIC0xMTcsNyArMTQzLDcgQEAKICAgICAgICAgICAgICAg ICB9CiAKICAgICAgICAgICAgICAgICByb3dOdW1iZXIrKzsKLSAgICAgICAgICAgICAgICBU IHJlc3VsdCA9IHJlY29yZE1hcHBlci5wcm9jZXNzUm93KHJlc3VsdFNldCwgMCwgY3JpdGVy aWEpOworICAgICAgICAgICAgICAgIFQgcmVzdWx0ID0gcmVjb3JkTWFwcGVyLnByb2Nlc3NS b3cocmVzdWx0U2V0LCAwLCBjcml0ZXJpYSwgbWFwcGluZ1N0cmF0ZWd5KTsKICAgICAgICAg ICAgICAgICBhY3Rpb24uYWNjZXB0KHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgICAgICB9Cg== --------------P111Vv5onH3jsurckgAjxjAa Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] --------------P111Vv5onH3jsurckgAjxjAa--