From: Date: July 3 2009 1:43pm Subject: bzr push into mysql-5.1-telco-7.1 branch (magnus.blaudd:2928 to 2929) List-Archive: http://lists.mysql.com/commits/77888 Message-Id: <20090703114342.1ABC313405D@pilot> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_aXm024OGdD8uXSoPQW0DDQ)" --Boundary_(ID_aXm024OGdD8uXSoPQW0DDQ) MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-transfer-encoding: BASE64 Content-disposition: inline IDI5MjkgTWFnbnVzIEJsw6V1ZGQJMjAwOS0wNy0wMyBbbWVyZ2VdDQogICAgICBN ZXJnZQ0KDQogICAgcmVtb3ZlZDoNCiAgICAgIHN0b3JhZ2UvbmRiL2luY2x1ZGUv bmRiaW5mby5oDQogICAgICBzdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvbmRi aW5mby5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2Ri aW5mby9uZGJpbmZvX2hlbHBlcnMuY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMv a2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb190YWJsZWlkcy5oDQogICAgICBz dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb190YWJs ZXMuaA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL21nbXNydi9tZ21fbmRiaW5mby5j cHANCiAgICBhZGRlZDoNCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0v TmRiaW5mby5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRi aW5mby5ocHANCiAgICBtb2RpZmllZDoNCiAgICAgIG15c3FsLXRlc3Qvc3VpdGUv bmRiL3IvbmRiX2Jhc2ljLnJlc3VsdA0KICAgICAgbXlzcWwtdGVzdC9zdWl0ZS9u ZGIvci9uZGJpbmZvLnJlc3VsdA0KICAgICAgbXlzcWwtdGVzdC9zdWl0ZS9uZGIv dC9uZGJfYmFzaWMudGVzdA0KICAgICAgbXlzcWwtdGVzdC9zdWl0ZS9uZGIvdC9u ZGJpbmZvLnRlc3QNCiAgICAgIHNxbC9oYV9uZGJjbHVzdGVyLmNjDQogICAgICBz cWwvaGFfbmRiaW5mby5jYw0KICAgICAgc3RvcmFnZS9uZGIvaW5jbHVkZS9NYWtl ZmlsZS5hbQ0KICAgICAgc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2lnbmFs ZGF0YS9EYmluZm9TY2FuLmhwcA0KICAgICAgc3RvcmFnZS9uZGIvaW5jbHVkZS9r ZXJuZWwvc2lnbmFsZGF0YS9EdW1wU3RhdGVPcmQuaHBwDQogICAgICBzdG9yYWdl L25kYi9pbmNsdWRlL2tlcm5lbC9zaWduYWxkYXRhL1NpZ25hbERhdGEuaHBwDQog ICAgICBzdG9yYWdlL25kYi9zcmMvY29tbW9uL2RlYnVnZ2VyL3NpZ25hbGRhdGEv RGJpbmZvU2Nhbi5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9jb21tb24vZGVi dWdnZXIvc2lnbmFsZGF0YS9TaWduYWxEYXRhUHJpbnQuY3BwDQogICAgICBzdG9y YWdlL25kYi9zcmMvY29tbW9uL3V0aWwvTWFrZWZpbGUuYW0NCiAgICAgIHN0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL0xvY2FsUHJveHkuY3BwDQogICAgICBz dG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9Mb2NhbFByb3h5LmhwcA0KICAg ICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvTWFrZWZpbGUuYW0NCiAg ICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2JhY2t1cC9CYWNrdXAu Y3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmFjYy9E YmFjY01haW4uY3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9kYmRpY3QvRGJkaWN0LmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5l bC9ibG9ja3MvZGJpbmZvL0NNYWtlTGlzdHMudHh0DQogICAgICBzdG9yYWdlL25k Yi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vRGJpbmZvLmNwcA0KICAgICAgc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0RiaW5mby5ocHANCiAg ICAgIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Y01haW4u Y3BwDQogICAgICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnR1cC9E YnR1cERlYnVnLmNwcA0KICAgICAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJ0dXgvRGJ0dXhEZWJ1Zy5jcHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvYmxvY2tzL2RidXRpbC9EYlV0aWwuY3BwDQogICAgICBzdG9yYWdlL25k Yi9zcmMva2VybmVsL2Jsb2Nrcy9zdW1hL1N1bWEuY3BwDQogICAgICBzdG9yYWdl L25kYi9zcmMva2VybmVsL2Jsb2Nrcy90cml4L1RyaXguY3BwDQogICAgICBzdG9y YWdlL25kYi9zcmMva2VybmVsL3ZtL01ha2VmaWxlLmFtDQogICAgICBzdG9yYWdl L25kYi9zcmMva2VybmVsL3ZtL1NpbXVsYXRlZEJsb2NrLmNwcA0KICAgICAgc3Rv cmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5ocHANCiAgICAg IHN0b3JhZ2UvbmRiL3NyYy9tZ21zcnYvTWFrZWZpbGUuYW0NCiAgICAgIHN0b3Jh Z2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mby5jcHANCiAgICAgIHN0b3JhZ2UvbmRi L3NyYy9uZGJhcGkvTmRiSW5mby5ocHANCiAgICAgIHN0b3JhZ2UvbmRiL3NyYy9u ZGJhcGkvTmRiSW5mb1NjYW5PcGVyYXRpb24uY3BwDQogICAgICBzdG9yYWdlL25k Yi9zcmMvbmRiYXBpL05kYkluZm9TY2FuT3BlcmF0aW9uLmhwcA0KICAgICAgc3Rv cmFnZS9uZGIvdGVzdC9uZGJhcGkvdGVzdE5kYmluZm8uY3BwDQogMjkyOCBKb25h cyBPcmVsYW5kCTIwMDktMDctMDIgW21lcmdlXQ0KICAgICAgbWVyZ2UgNzAgdG8g NzENCg0KICAgIG1vZGlmaWVkOg0KICAgICAgc3RvcmFnZS9uZGIvdGVzdC9uZGJh cGkvdGVzdFVwZ3JhZGUuY3BwDQo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzcWwtdGVz dC9zdWl0ZS9uZGIvci9uZGJfYmFzaWMucmVzdWx0Jw0KLS0tIGEvbXlzcWwtdGVz dC9zdWl0ZS9uZGIvci9uZGJfYmFzaWMucmVzdWx0CTIwMDktMDYtMDQgMTM6MTQ6 MTQgKzAwMDANCisrKyBiL215c3FsLXRlc3Qvc3VpdGUvbmRiL3IvbmRiX2Jhc2lj LnJlc3VsdAkyMDA5LTA3LTAzIDExOjEyOjMzICswMDAwDQpAQCAtNyw3ICs3LDcg QEAgYXR0cjIgSU5ULA0KIGF0dHIzIFZBUkNIQVIoMTApDQogKSBFTkdJTkU9bmRi Y2x1c3RlcjsNCiBkcm9wIHRhYmxlIHQxOw0KLVNIT1cgR0xPQkFMIFNUQVRVUyBM SUtFICduZGIlJzsNCitTSE9XIEdMT0JBTCBTVEFUVVMgTElLRSAnbmRiXF8lJzsN CiBWYXJpYWJsZV9uYW1lCVZhbHVlDQogTmRiX2NsdXN0ZXJfbm9kZV9pZAkjDQog TmRiX2NvbmZpZ19mcm9tX2hvc3QJIw0KQEAgLTIxLDcgKzIxLDcgQEAgTmRiX3By dW5lZF9zY2FuX2NvdW50CSMNCiBOZGJfY2x1c3Rlcl9jb25uZWN0aW9uX3Bvb2wJ Iw0KIE5kYl9jb25mbGljdF9mbl9tYXgJIw0KIE5kYl9jb25mbGljdF9mbl9vbGQJ Iw0KLVNIT1cgR0xPQkFMIFZBUklBQkxFUyBMSUtFICduZGIlJzsNCitTSE9XIEdM T0JBTCBWQVJJQUJMRVMgTElLRSAnbmRiXF8lJzsNCiBWYXJpYWJsZV9uYW1lCVZh bHVlDQogbmRiX2F1dG9pbmNyZW1lbnRfcHJlZmV0Y2hfc3oJIw0KIG5kYl9iYXRj aF9zaXplCSMNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ215c3FsLXRlc3Qvc3VpdGUv bmRiL3IvbmRiaW5mby5yZXN1bHQnDQotLS0gYS9teXNxbC10ZXN0L3N1aXRlL25k Yi9yL25kYmluZm8ucmVzdWx0CTIwMDktMDYtMjMgMTQ6MDc6NTggKzAwMDANCisr KyBiL215c3FsLXRlc3Qvc3VpdGUvbmRiL3IvbmRiaW5mby5yZXN1bHQJMjAwOS0w Ny0wMyAxMToxMjozMyArMDAwMA0KQEAgLTczLDkgKzczLDE1IEBAIFRBQkxFX0lE CVRBQkxFX05BTUUJQ1JFQVRFX1NRTA0KIAlgRlJFRWAgSU5UIFVOU0lHTkVELA0K IAlgU0laRWAgSU5UIFVOU0lHTkVEDQogKSBFTkdJTkU9TkRCSU5GTzsNCis3CVRF U1QJQ1JFQVRFIFRBQkxFIGBURVNUYCAoDQorCWBOT0RFX0lEYCBJTlQgVU5TSUdO RUQsDQorCWBCTE9DS19OVU1CRVJgIElOVCBVTlNJR05FRCwNCisJYEJMT0NLX0lO U1RBTkNFYCBJTlQgVU5TSUdORUQsDQorCWBDT1VOVEVSYCBJTlQgVU5TSUdORUQN CispIEVOR0lORT1OREJJTkZPOw0KIHNlbGVjdCBjb3VudCgqKSBmcm9tIFRBQkxF UzsNCiBjb3VudCgqKQ0KLTcNCis4DQogc2VsZWN0ICogZnJvbSBUQUJMRVMgd2hl cmUgVEFCTEVfSUQgPSAyOw0KIFRBQkxFX0lECVRBQkxFX05BTUUJQ1JFQVRFX1NR TA0KIDIJTUVNVVNBR0UJQ1JFQVRFIFRBQkxFIGBNRU1VU0FHRWAgKA0KQEAgLTk3 LDYgKzEwMywxMiBAQCBUQUJMRV9JRAlUQUJMRV9OQU1FCUNSRUFURV9TUUwNCiAJ YEZSRUVgIElOVCBVTlNJR05FRCwNCiAJYFNJWkVgIElOVCBVTlNJR05FRA0KICkg RU5HSU5FPU5EQklORk87DQorNwlURVNUCUNSRUFURSBUQUJMRSBgVEVTVGAgKA0K KwlgTk9ERV9JRGAgSU5UIFVOU0lHTkVELA0KKwlgQkxPQ0tfTlVNQkVSYCBJTlQg VU5TSUdORUQsDQorCWBCTE9DS19JTlNUQU5DRWAgSU5UIFVOU0lHTkVELA0KKwlg Q09VTlRFUmAgSU5UIFVOU0lHTkVEDQorKSBFTkdJTkU9TkRCSU5GTzsNCiBzZWxl Y3QgKiBmcm9tIFRBQkxFUyB3aGVyZSBUQUJMRV9OQU1FID0gJ0xPR0RFU1RJTkFU SU9OJzsNCiBUQUJMRV9JRAlUQUJMRV9OQU1FCUNSRUFURV9TUUwNCiAzCUxPR0RF U1RJTkFUSU9OCUNSRUFURSBUQUJMRSBgTE9HREVTVElOQVRJT05gICgNCkBAIC0x MDgsNyArMTIwLDcgQEAgVEFCTEVfSUQJVEFCTEVfTkFNRQlDUkVBVEVfU1FMDQog KSBFTkdJTkU9TkRCSU5GTzsNCiBzZWxlY3QgY291bnQoKikgZnJvbSBUQUJMRVMg dDEsIFRBQkxFUyB0MiBXSEVSRSB0MS5UQUJMRV9JRCA9IHQxLlRBQkxFX0lEOw0K IGNvdW50KCopDQotNDkNCis2NA0KIHVwZGF0ZSBUQUJMRVMgc2V0IFRBQkxFX0lE PTIgd2hlcmUgVEFCTEVfSUQ9MzsNCiBFUlJPUiBIWTAwMDogVGFibGUgc3RvcmFn ZSBlbmdpbmUgZm9yICdUQUJMRVMnIGRvZXNuJ3QgaGF2ZSB0aGlzIG9wdGlvbg0K IEZMVVNIICBUQUJMRVM7DQpAQCAtMTIxLDUgKzEzMywxMiBAQCBUQUJMRV9JRA0K IDQNCiA1DQogNg0KKzcNCitTSE9XIEdMT0JBTCBTVEFUVVMgTElLRSAnbmRiaW5m b1xfJSc7DQorVmFyaWFibGVfbmFtZQlWYWx1ZQ0KK1NIT1cgR0xPQkFMIFZBUklB QkxFUyBMSUtFICduZGJpbmZvXF8lJzsNCitWYXJpYWJsZV9uYW1lCVZhbHVlDQor bmRiaW5mb19tYXhfYnl0ZXMJMA0KK25kYmluZm9fbWF4X3Jvd3MJMTANCiBkcm9w IHRhYmxlIFRBQkxFUzsNCiBEUk9QIERBVEFCQVNFIG5kYiRpbmZvOw0KDQo9PT0g bW9kaWZpZWQgZmlsZSAnbXlzcWwtdGVzdC9zdWl0ZS9uZGIvdC9uZGJfYmFzaWMu dGVzdCcNCi0tLSBhL215c3FsLXRlc3Qvc3VpdGUvbmRiL3QvbmRiX2Jhc2ljLnRl c3QJMjAwOC0xMC0wNiAxMTowMzozMiArMDAwMA0KKysrIGIvbXlzcWwtdGVzdC9z dWl0ZS9uZGIvdC9uZGJfYmFzaWMudGVzdAkyMDA5LTA3LTAzIDExOjEyOjMzICsw MDAwDQpAQCAtMjUsOSArMjUsOSBAQCBkcm9wIHRhYmxlIHQxOw0KICMgU2hvdyBz dGF0dXMgYW5kIHZhcmlhYmxlcw0KICMNCiAtLXJlcGxhY2VfY29sdW1uIDIgIw0K LVNIT1cgR0xPQkFMIFNUQVRVUyBMSUtFICduZGIlJzsNCitTSE9XIEdMT0JBTCBT VEFUVVMgTElLRSAnbmRiXF8lJzsNCiAtLXJlcGxhY2VfY29sdW1uIDIgIw0KLVNI T1cgR0xPQkFMIFZBUklBQkxFUyBMSUtFICduZGIlJzsNCitTSE9XIEdMT0JBTCBW QVJJQUJMRVMgTElLRSAnbmRiXF8lJzsNCiANCiAjDQogIyBDcmVhdGUgYSBub3Jt YWwgdGFibGUgd2l0aCBwcmltYXJ5IGtleQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAn bXlzcWwtdGVzdC9zdWl0ZS9uZGIvdC9uZGJpbmZvLnRlc3QnDQotLS0gYS9teXNx bC10ZXN0L3N1aXRlL25kYi90L25kYmluZm8udGVzdAkyMDA5LTA2LTI0IDE0OjMy OjE5ICswMDAwDQorKysgYi9teXNxbC10ZXN0L3N1aXRlL25kYi90L25kYmluZm8u dGVzdAkyMDA5LTA3LTAzIDExOjEyOjMzICswMDAwDQpAQCAtMjUsNSArMjUsOSBA QCB1cGRhdGUgVEFCTEVTIHNldCBUQUJMRV9JRD0yIHdoZXJlIFRBQkxFDQogDQog RkxVU0ggIFRBQkxFUzsNCiBTRUxFQ1QgVEFCTEVfSUQgZnJvbSBUQUJMRVM7DQor DQorU0hPVyBHTE9CQUwgU1RBVFVTIExJS0UgJ25kYmluZm9cXyUnOw0KK1NIT1cg R0xPQkFMIFZBUklBQkxFUyBMSUtFICduZGJpbmZvXF8lJzsNCisNCiBkcm9wIHRh YmxlIFRBQkxFUzsNCiBEUk9QIERBVEFCQVNFIG5kYiRpbmZvOw0KDQo9PT0gbW9k aWZpZWQgZmlsZSAnc3FsL2hhX25kYmNsdXN0ZXIuY2MnDQotLS0gYS9zcWwvaGFf bmRiY2x1c3Rlci5jYwkyMDA5LTA2LTE1IDE0OjAxOjAxICswMDAwDQorKysgYi9z cWwvaGFfbmRiY2x1c3Rlci5jYwkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpA QCAtMTM5ODUsNiArMTM5ODUsOCBAQCBzdHJ1Y3Qgc3RfbXlzcWxfc3RvcmFnZV9l bmdpbmUgbmRiY2x1c3RlDQogDQogI2luY2x1ZGUgImhhX25kYmluZm8uaCINCiAN CitleHRlcm4gc3RydWN0IHN0X215c3FsX3N5c192YXIqIG5kYmluZm9fc3lzdGVt X3ZhcmlhYmxlc1tdOw0KKw0KIHN0cnVjdCBzdF9teXNxbF9zdG9yYWdlX2VuZ2lu ZSBuZGJpbmZvX3N0b3JhZ2VfZW5naW5lPQ0KIHsgTVlTUUxfSEFORExFUlRPTl9J TlRFUkZBQ0VfVkVSU0lPTiB9Ow0KIA0KQEAgLTE0MDE0LDcgKzE0MDE2LDcgQEAg bXlzcWxfZGVjbGFyZV9wbHVnaW4obmRiY2x1c3RlcikNCiAgIG5kYmluZm9fZGVp bml0LCAgICAgICAgICAgICAvKiBwbHVnaW4gZGVpbml0ICovDQogICAweDAwMDEs ICAgICAgICAgICAgICAgICAgICAgLyogcGx1Z2luIHZlcnNpb24gKi8NCiAgIE5V TEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGF0dXMgdmFyaWFibGVzICov DQotICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgLyogc3lzdGVtIHZhcmlh YmxlcyAqLw0KKyAgbmRiaW5mb19zeXN0ZW1fdmFyaWFibGVzLCAgIC8qIHN5c3Rl bSB2YXJpYWJsZXMgKi8NCiAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAv KiBjb25maWcgb3B0aW9ucyAqLw0KIH0NCiBteXNxbF9kZWNsYXJlX3BsdWdpbl9l bmQ7DQoNCj09PSBtb2RpZmllZCBmaWxlICdzcWwvaGFfbmRiaW5mby5jYycNCi0t LSBhL3NxbC9oYV9uZGJpbmZvLmNjCTIwMDktMDYtMjQgMDg6Mzk6MDkgKzAwMDAN CisrKyBiL3NxbC9oYV9uZGJpbmZvLmNjCTIwMDktMDctMDMgMTA6MzE6MzAgKzAw MDANCkBAIC0yMCw2ICsyMCwzMiBAQA0KICNpbmNsdWRlICJoYV9uZGJpbmZvLmgi DQogI2luY2x1ZGUgIi4uL3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mby5o cHAiDQogDQorDQorc3RhdGljIE1ZU1FMX1RIRFZBUl9VSU5UKA0KKyAgbWF4X3Jv d3MsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYW1lICovDQorICBQTFVH SU5fVkFSX1JRQ01EQVJHLA0KKyAgIlNwZWNpZnkgbWF4IG51bWJlciBvZiByb3dz IHRvIGZldGNoIHBlciByb3VuZHRyaXAgdG8gY2x1c3RlciIsDQorICBOVUxMLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNoZWNrIGZ1bmMuICovDQor ICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVwZGF0ZSBm dW5jLiAqLw0KKyAgMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBkZWZhdWx0ICovDQorICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIG1pbiAqLw0KKyAgMjU2LCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBtYXggKi8NCisgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogYmxvY2sgKi8NCispOw0KKw0KK3N0YXRpYyBNWVNRTF9USERWQVJf VUlOVCgNCisgIG1heF9ieXRlcywgICAgICAgICAgICAgICAgICAgICAgICAgLyog bmFtZSAqLw0KKyAgUExVR0lOX1ZBUl9SUUNNREFSRywNCisgICJTcGVjaWZ5IGFw cHJveC4gbWF4IG51bWJlciBvZiBieXRlcyB0byBmZXRjaCBwZXIgcm91bmR0cmlw IHRvIGNsdXN0ZXIiLA0KKyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBjaGVjayBmdW5jLiAqLw0KKyAgTlVMTCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiB1cGRhdGUgZnVuYy4gKi8NCisgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCAqLw0KKyAgMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW4gKi8NCisgIDY1NTM1 LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWF4ICovDQorICAwICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrICovDQorKTsN CisNCisNCiBzdGF0aWMgTmRiSW5mbyogZ19uZGJpbmZvOw0KIA0KIGV4dGVybiBO ZGJfY2x1c3Rlcl9jb25uZWN0aW9uKiBnX25kYl9jbHVzdGVyX2Nvbm5lY3Rpb247 DQpAQCAtOTIsNiArMTE4LDE2IEBAIGludCBoYV9uZGJpbmZvOjpvcGVuKGNvbnN0 IGNoYXIgKm5hbWUsIGkNCiB7DQogICBEQlVHX0VOVEVSKCJoYV9uZGJpbmZvOjpv cGVuIik7DQogICBEQlVHX1BSSU5UKCJlbnRlciIsICgibmFtZTogJXMsIG1vZGU6 ICVkIiwgbmFtZSwgbW9kZSkpOw0KKw0KKyAgaWYgKCFnX25kYmluZm8pDQorICB7 DQorICAgIHB1c2hfd2FybmluZyhjdXJyZW50X3RoZCwgTVlTUUxfRVJST1I6OldB Uk5fTEVWRUxfTk9URSwgMSwNCisgICAgICAgICAgICAgICAgICJDYW4ndCBvcGVu IHRhYmxlIC0gJ25kYmluZm8nIGhhcyBiZWVuIHN0YXJ0ZWQgIg0KKyAgICAgICAg ICAgICAgICAgImluIGxpbWl0ZWQgbW9kZSBiZWNhdXNlIHRoZSAnbmRiY2x1c3Rl cicgIg0KKyAgICAgICAgICAgICAgICAgImVuZ2luZSBpcyBkaXNhYmxlZCIpOw0K KyAgICBEQlVHX1JFVFVSTihIQV9FUlJfV1JPTkdfQ09NTUFORCk7DQorICB9DQor DQogICBhc3NlcnQoaXNfY2xvc2VkKCkpOw0KIA0KICAgaW50IGVyciA9IGdfbmRi aW5mby0+b3BlblRhYmxlKG5hbWUsICZtX2ltcGwubV90YWJsZSk7DQpAQCAtMTIz LDEwICsxNTksMTQgQEAgaW50IGhhX25kYmluZm86OnJuZF9pbml0KGJvb2wgc2Nh bikNCiAgIERCVUdfUFJJTlQoImluZm8iLCAoInNjYW46ICVkIiwgc2NhbikpOw0K ICAgYXNzZXJ0KGlzX29wZW4oKSk7DQogICBhc3NlcnQobV9pbXBsLm1fc2Nhbl9v cCA9PSBOVUxMKTsgLy8gTm8gc2NhbiBhbHJlYWR5IG9uZ29pbmcNCisgIFRIRCog dGhkID0gY3VycmVudF90aGQ7DQogDQogICBpbnQgZXJyOw0KICAgTmRiSW5mb1Nj YW5PcGVyYXRpb24qIHNjYW5fb3AgPSBOVUxMOw0KLSAgaWYgKChlcnIgPSBnX25k YmluZm8tPmNyZWF0ZVNjYW5PcGVyYXRpb24obV9pbXBsLm1fdGFibGUsICZzY2Fu X29wKSkgIT0gMCkNCisgIGlmICgoZXJyID0gZ19uZGJpbmZvLT5jcmVhdGVTY2Fu T3BlcmF0aW9uKG1faW1wbC5tX3RhYmxlLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnNjYW5fb3AsDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSERWQVIodGhkLCBtYXhf cm93cyksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBUSERWQVIodGhkLCBtYXhfYnl0ZXMpKSkgIT0gMCkNCiAgICAgREJVR19S RVRVUk4oZXJyMm15c3FsKGVycikpOw0KIA0KICAgaWYgKChlcnIgPSBzY2FuX29w LT5yZWFkVHVwbGVzKCkpICE9IDApDQpAQCAtMjc4LDEyICszMTgsMTAgQEAgaW50 IG5kYmluZm9faW5pdCh2b2lkICpwbHVnaW4pDQogICAvKiBDaGVjayBpZiAnbmRi Y2x1c3Rlcl9pbml0JyBoYXMgYmVlbiBydW4gYW5kIGNvbm5lY3RlZCB0byBjbHVz dGVyICovDQogICBpZiAoIWdfbmRiX2NsdXN0ZXJfY29ubmVjdGlvbikNCiAgIHsN Ci0gICAgc3FsX3ByaW50X3dhcm5pbmcoIkRpc2FibGluZyAnbmRiaW5mbycgYmVj YXVzZSAnbmRiY2x1c3RlcicgaXMgIg0KLSAgICAgICAgICAgICAgICAgICAgICAi bm90IHN0YXJ0ZWQiKTsNCi0gICAgLy8gaHRvbi0+c3RhdGUgPSBTSE9XX09QVElP Tl9ESVNBQkxFRDsNCi0gICAgLy8gVE9ETyBeIHRoaXMgZG9lcyBub3QgbWFyayB0 aGUgZW5naW5lIGFzIGRpc2FibGVkDQotICAgIC8vIFdyaXRlIHNtYWxsIHBhdGNo IGZvciBNeVNRTCBTZXJ2ZXIgYWxsb3dpbmcgYW4gZW5naW5lIHRvIGRpc2FibGUg aXRzZWxmPw0KLSAgICBEQlVHX1JFVFVSTigxKTsNCisgICAgc3FsX3ByaW50X3dh cm5pbmcoIlN0YXJ0aW5nICduZGJpbmZvJyBpbiBsaW1pdGVkIG1vZGUgIg0KKyAg ICAgICAgICAgICAgICAgICAgICAiYmVjYXVzZSAnbmRiY2x1c3RlcicgZW5naW5l IGlzIGRpc2FibGVkIik7DQorDQorICAgIERCVUdfUkVUVVJOKDApOw0KICAgfQ0K IA0KICAgYm9vbCB1c2VfbG93ZXJfY2FzZSA9IChsb3dlcl9jYXNlX3RhYmxlX25h bWVzICE9IDApOw0KQEAgLTMyNiw0ICszNjQsMTEgQEAgaW50IG5kYmluZm9fZGVp bml0KHZvaWQgKnBsdWdpbikNCiAgIERCVUdfUkVUVVJOKDApOw0KIH0NCiANCitz dHJ1Y3Qgc3RfbXlzcWxfc3lzX3ZhciogbmRiaW5mb19zeXN0ZW1fdmFyaWFibGVz W109IHsNCisgIE1ZU1FMX1NZU1ZBUihtYXhfcm93cyksDQorICBNWVNRTF9TWVNW QVIobWF4X2J5dGVzKSwNCisNCisgIE5VTEwNCit9Ow0KKw0KIHRlbXBsYXRlIGNs YXNzIFZlY3Rvcjxjb25zdCBOZGJJbmZvUmVjQXR0cio+Ow0KDQo9PT0gbW9kaWZp ZWQgZmlsZSAnc3RvcmFnZS9uZGIvaW5jbHVkZS9NYWtlZmlsZS5hbScNCi0tLSBh L3N0b3JhZ2UvbmRiL2luY2x1ZGUvTWFrZWZpbGUuYW0JMjAwOS0wNS0yNyAxNToy MTo0NSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvaW5jbHVkZS9NYWtlZmlsZS5h bQkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMjAsOCArMjAsNyBAQCBu ZGJpbmNsdWRlX0hFQURFUlMgPSBcDQogbmRiX2NvbnN0YW50cy5oIFwNCiBuZGJf aW5pdC5oIFwNCiBuZGJfdHlwZXMuaCBcDQotbmRiX3ZlcnNpb24uaCBcDQotbmRi aW5mby5oDQorbmRiX3ZlcnNpb24uaA0KIA0KIG5kYmFwaWluY2x1ZGVfSEVBREVS UyA9IFwNCiBuZGJhcGkvbmRiYXBpX2xpbWl0cy5oIFwNCg0KPT09IG1vZGlmaWVk IGZpbGUgJ3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEvRGJp bmZvU2Nhbi5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9z aWduYWxkYXRhL0RiaW5mb1NjYW4uaHBwCTIwMDktMDYtMjMgMTE6NDI6NTcgKzAw MDANCisrKyBiL3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRhdGEv RGJpbmZvU2Nhbi5ocHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTIw LDEzNiArMjAsNTYgQEANCiANCiBzdHJ1Y3QgRGJpbmZvU2NhbkN1cnNvcg0KIHsN Ci0gIFVpbnQzMiBjdXJfcmVxdWVzdEluZm87DQotICBVaW50MzIgY3VyX25vZGU7 DQotICBVaW50MzIgY3VyX2Jsb2NrOw0KLSAgVWludDMyIGN1cl9pdGVtOw0KKyAg VWludDMyIGRhdGFbMTFdOw0KIH07DQogDQotc3RydWN0IERiaW5mb1NjYW5SZXE7 DQotZXh0ZXJuICJDIiB2b2lkIGRiaW5mb19yYXRlbGltaXRfaW5pdChzdHJ1Y3Qg ZGJpbmZvX3JhdGVsaW1pdCAqcmwsDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgRGJpbmZvU2NhblJlcSAqKTsNCi0NCi1zdHJ1 Y3QgRGJpbmZvU2NhblJlcQ0KK3N0cnVjdCBEYmluZm9TY2FuDQogew0KLSAgLyog UmVjaXZlcihzKSAqLw0KLSAgZnJpZW5kIGNsYXNzIEJhY2t1cDsNCi0gIGZyaWVu ZCBjbGFzcyBEYmFjYzsNCi0gIGZyaWVuZCBjbGFzcyBEYmRpY3Q7DQotICBmcmll bmQgY2xhc3MgRGJpbmZvOw0KLSAgZnJpZW5kIGNsYXNzIERidGM7DQotICBmcmll bmQgY2xhc3MgRGJ0dXA7DQotICBmcmllbmQgY2xhc3MgRGJ0dXg7DQotICBmcmll bmQgY2xhc3MgRGJVdGlsOw0KLSAgZnJpZW5kIGNsYXNzIFFtZ3I7DQotICBmcmll bmQgY2xhc3MgU3VtYTsNCi0gIGZyaWVuZCBjbGFzcyBUcml4Ow0KLQ0KLSAgZnJp ZW5kIHZvaWQgZGJpbmZvX3JhdGVsaW1pdF9pbml0KHN0cnVjdCBkYmluZm9fcmF0 ZWxpbWl0ICpybCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgRGJpbmZvU2NhblJlcSAqcik7DQotDQotICAvKiBTZW5kZXIocykg Ki8NCi0gIGZyaWVuZCBjbGFzcyBOZGJJbmZvU2Nhbk9wZXJhdGlvbjsNCi0NCi0g IGZyaWVuZCBib29sIHByaW50REJJTkZPX1NDQU5fUkVRKEZJTEUgKiBvdXRwdXQs IGNvbnN0IFVpbnQzMiAqIHRoZURhdGEsDQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVaW50MzIgbGVuLCBVaW50MTYgcmVjZWl2ZXJCbG9ja05v KTsNCi0NCiAgIFNUQVRJQ19DT05TVCggU2lnbmFsTGVuZ3RoID0gMTIgKTsNCi0g IFNUQVRJQ19DT05TVCggU2lnbmFsTGVuZ3RoV2l0aEN1cnNvciA9IDE2ICk7DQog DQotICBVaW50MzIgdGFibGVJZDsgICAgICAgICAvLyBEQklORk8gdGFibGUgSUQN Ci0gIFVpbnQzMiBhcGlSZWY7ICAgICAgICAgIC8vIEFQSSBkb2luZyBzY2FuDQot ICBVaW50MzIgYXBpVHhuSWQ7ICAgICAgICAvLyBJRCB1bmlxdWUgdG8gQVBJLg0K LSAgVWludDMyIHNlbmRlclJlZjsgICAgICAgLy8gU2VuZGVyLCBEQklORk8gb3Ig cHJveHkgZm9yIG11bHRpLXRocmVhZGVkIGJsb2NrDQotICBVaW50MzIgaW5zdGFu Y2U7ICAgICAgICAvLyBCbG9jayBpbnN0YW5jZSBmb3IgbXVsdGktdGhyZWFkZWQg YmxvY2sNCi0gIFVpbnQzMiBjb2xCaXRtYXBMbzsgICAgIC8vIGJpdG1hcCBvZiB3 aGF0IGNvbHVtbnMgeW91IHdhbnQuICg2NGJpdCkNCi0gIFVpbnQzMiBjb2xCaXRt YXBIaTsNCi0gIFVpbnQzMiByZXF1ZXN0SW5mbzsgICAgIC8vIHN0YXJ0LCBlbmRv ZmRhdGENCi0NCi0gIFNUQVRJQ19DT05TVCggU3RhcnRTY2FuICA9IDB4MSApOw0K LSAgU1RBVElDX0NPTlNUKCBBbGxDb2x1bW5zID0gMHgyICk7DQotDQotICBVaW50 MzIgbWF4Um93czsNCi0gIFVpbnQzMiBtYXhCeXRlczsNCi0gIFVpbnQzMiByb3dz X3RvdGFsOw0KLSAgVWludDMyIHdvcmRfdG90YWw7DQotDQotICB1bmlvbg0KLSAg ew0KLSAgICBVaW50MzIgY3Vyc29yZGF0YVsxXTsNCi0gICAgc3RydWN0IERiaW5m b1NjYW5DdXJzb3IgY3Vyc29yOw0KLSAgfTsNCi19Ow0KLQ0KLQ0KLWNsYXNzIERi aW5mb1NjYW5Db25mIHsNCi0gIC8qIFJlY2l2ZXIocykgKi8NCi0gIGZyaWVuZCBj bGFzcyBOZGJJbmZvU2Nhbk9wZXJhdGlvbjsNCi0NCi0gIC8qIFNlbmRlcihzKSAq Lw0KLSAgZnJpZW5kIGNsYXNzIEJhY2t1cDsNCi0gIGZyaWVuZCBjbGFzcyBEYmFj YzsNCi0gIGZyaWVuZCBjbGFzcyBEYmRpY3Q7DQotICBmcmllbmQgY2xhc3MgRGJp bmZvOw0KLSAgZnJpZW5kIGNsYXNzIERidGM7DQotICBmcmllbmQgY2xhc3MgRGJ0 dXA7DQotICBmcmllbmQgY2xhc3MgRGJ0dXg7DQotICBmcmllbmQgY2xhc3MgRGJV dGlsOw0KLSAgZnJpZW5kIGNsYXNzIExvY2FsUHJveHk7DQotICBmcmllbmQgY2xh c3MgUW1ncjsNCi0gIGZyaWVuZCBjbGFzcyBTdW1hOw0KLSAgZnJpZW5kIGNsYXNz IFRyaXg7DQotDQotICBmcmllbmQgYm9vbCBwcmludERCSU5GT19TQ0FOX0NPTkYo RklMRSAqIG91dHB1dCwgY29uc3QgVWludDMyICogdGhlRGF0YSwNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgbGVuLCBVaW50MTYg cmVjZWl2ZXJCbG9ja05vKTsNCi0NCi0gIFNUQVRJQ19DT05TVCggRG9uZUxlbmd0 aCA9IDMgKTsNCi0gIFNUQVRJQ19DT05TVCggU2lnbmFsTGVuZ3RoID0gMTIgKTsN Ci0gIFNUQVRJQ19DT05TVCggU2lnbmFsTGVuZ3RoV2l0aEN1cnNvciA9IDE2ICk7 DQorICAvLyBBUEkgaWRlbnRpZmllcnMNCisgIFVpbnQzMiByZXN1bHREYXRhOyAg ICAgIC8vIFdpbGwgYmUgcmV0dXJuZWQgaW4gVHJhbnNJZEFJOjpjb25uZWN0UHRy DQorICBVaW50MzIgdHJhbnNJZFsyXTsgICAgICAvLyBJRCB1bmlxdWUgdG8gQVBJ DQorICBVaW50MzIgcmVzdWx0UmVmOyAgICAgICAvLyBXaGVyZSB0byBzZW5kIHJl c3VsdCByb3dzDQogDQorICAvLyBQYXJhbWV0ZXJzIGZvciB0aGUgc2Nhbg0KICAg VWludDMyIHRhYmxlSWQ7ICAgICAgICAgLy8gREJJTkZPIHRhYmxlIElEDQotICBV aW50MzIgYXBpUmVmOyAgICAgICAgICAvLyBBUEkgZG9pbmcgc2Nhbg0KLSAgVWlu dDMyIGFwaVR4bklkOyAgICAgICAgLy8gSUQgdW5pcXVlIHRvIEFQSS4NCi0gIFVp bnQzMiBzZW5kZXJSZWY7ICAgICAgIC8vIFNlbmRlciBvZiBEQklORk9fU0NBTlJF UQ0KLSAgVWludDMyIGluc3RhbmNlOyAgICAgICAgLy8gQmxvY2sgaW5zdGFuY2Ug Zm9yIG11bHRpLXRocmVhZGVkIGJsb2NrDQotICBVaW50MzIgY29sQml0bWFwTG87 ICAgICAvLyBiaXRtYXAgb2Ygd2hhdCBjb2x1bW5zIHlvdSB3YW50LiAoNjRiaXQp DQotICBVaW50MzIgY29sQml0bWFwSGk7DQotICBVaW50MzIgcmVxdWVzdEluZm87 ICAgICAvLyBzdGFydCwgZW5kb2ZkYXRhDQotDQotICBTVEFUSUNfQ09OU1QoIE1v cmVEYXRhICA9IDB4MSApOw0KLSAgU1RBVElDX0NPTlNUKCBBbGxDb2x1bW5zID0g MHgyICk7DQotDQotICBVaW50MzIgbWF4Um93czsNCi0gIFVpbnQzMiBtYXhCeXRl czsNCi0gIFVpbnQzMiByb3dzX3RvdGFsOw0KLSAgVWludDMyIHdvcmRfdG90YWw7 DQorICBVaW50MzIgY29sQml0bWFwWzJdOyAgICAgLy8gYml0bWFwIG9mIHdoYXQg Y29sdW1ucyB5b3Ugd2FudC4gKDY0Yml0KQ0KKyAgVWludDMyIHJlcXVlc3RJbmZv OyAgICAgLy8gZmxhZ3MNCisgIFVpbnQzMiBtYXhSb3dzOyAgICAgICAgIC8vIE1h eCBudW1iZXIgb2Ygcm93cyB0byByZXR1cm4gcGVyIFJFUQ0KKyAgVWludDMyIG1h eEJ5dGVzOyAgICAgICAgLy8gTWF4IG51bWJlciBvZiBieXRlcyB0byByZXR1cm4g cGVyIFJFUQ0KKw0KKyAgLy8gUmVzdWx0IGZyb20gdGhlIHNjYW4NCisgIFVpbnQz MiByZXR1cm5lZFJvd3M7ICAgIC8vIE51bWJlciBvZiByb3dzIHJldHVybmVkIGZv ciB0aGlzIENPTkYNCisNCisgIC8vIEN1cnNvciB0aGF0IGNvbnRhaW5zIGRhdGEg dXNlZCBieSB0aGUga2VybmVsIGZvciBrZWVwaW5nIHRyYWNrDQorICAvLyBvZiB3 aGVyZSBpdCBpcywgaG93IG1hbnkgYnl0ZXMgb3Igcm93cyBpdCBoYXMgc2VudCBl dGMuDQorICAvLyBTZXQgdG8gemVybyBpbiBsYXN0IENPTkYgdG8gaW5kaWNhdGUg dGhhdCBzY2FuIGlzIGZpbmlzaGVkDQorICBVaW50MzIgY3Vyc29yX3N6Ow0KKyAg Ly8gQ3Vyc29yIGRhdGEgb2YgY3Vyc29yX3N6IHNpemUgZm9sbG93cw0KKyAgRGJp bmZvU2NhbkN1cnNvciBjdXJzb3I7DQorDQorICBzdGF0aWMgY29uc3QgVWludDMy KiBnZXRDdXJzb3JQdHIoY29uc3QgRGJpbmZvU2Nhbiogc2lnKSB7DQorICAgIHJl dHVybiBzaWctPmN1cnNvci5kYXRhOw0KKyAgfQ0KKyAgc3RhdGljIFVpbnQzMiog Z2V0Q3Vyc29yUHRyU2VuZChEYmluZm9TY2FuKiBzaWcpIHsNCisgICAgcmV0dXJu IHNpZy0+Y3Vyc29yLmRhdGE7DQorICB9DQogDQotICB1bmlvbg0KLSAgew0KLSAg ICBVaW50MzIgY3Vyc29yZGF0YVsxXTsNCi0gICAgc3RydWN0IERiaW5mb1NjYW5D dXJzb3IgY3Vyc29yOw0KLSAgfTsNCiB9Ow0KIA0KLS8qKg0KLSAqIFNFTkRFUjog IERCSU5GTw0KLSAqIFJFQ0lWRVI6IEFQSSxNR00NCi0gKi8NCi1jbGFzcyBEYmlu Zm9TY2FuUmVmIHsNCi0gIC8qIFJlY2l2ZXIocykgKi8NCi0gIGZyaWVuZCBjbGFz cyBOZGJJbmZvU2Nhbk9wZXJhdGlvbjsNCi0NCi0gIC8qIFNlbmRlcihzKSAqLw0K LSAgZnJpZW5kIGNsYXNzIERiaW5mbzsNCi0gIGZyaWVuZCBjbGFzcyBMb2NhbFBy b3h5Ow0KK3R5cGVkZWYgRGJpbmZvU2NhbiBEYmluZm9TY2FuUmVxOw0KK3R5cGVk ZWYgRGJpbmZvU2NhbiBEYmluZm9TY2FuQ29uZjsNCiANCi0gIGZyaWVuZCBib29s IHByaW50REJJTkZPX1NDQU5fUkVGKEZJTEUgKiBvdXRwdXQsIGNvbnN0IFVpbnQz MiAqIHRoZURhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVaW50MzIgbGVuLCBVaW50MTYgcmVjZWl2ZXJCbG9ja05vKTsNCitzdHJ1Y3Qg RGJpbmZvU2NhblJlZg0KK3sNCisgIFNUQVRJQ19DT05TVCggU2lnbmFsTGVuZ3Ro ID0gNSApOw0KIA0KLSAgU1RBVElDX0NPTlNUKCBTaWduYWxMZW5ndGggPSAzICk7 DQorICAvLyBBUEkgaWRlbnRpZmllcnMNCisgIFVpbnQzMiByZXN1bHREYXRhOyAg ICAgIC8vIFdpbGwgYmUgcmV0dXJuZWQgaW4gVHJhbnNJZEFJOjpjb25uZWN0UHRy DQorICBVaW50MzIgdHJhbnNJZFsyXTsgICAgICAvLyBJRCB1bmlxdWUgdG8gQVBJ DQorICBVaW50MzIgcmVzdWx0UmVmOyAgICAgICAvLyBXaGVyZSB0byBzZW5kIHJl c3VsdCByb3dzDQogDQotICBVaW50MzIgdGFibGVJZDsgICAgICAgICAvLyBEQklO Rk8gdGFibGUgSUQNCi0gIFVpbnQzMiBhcGlUeG5JZDsgICAgICAgIC8vIElEIHVu aXF1ZSB0byBBUEkuDQogICBVaW50MzIgZXJyb3JDb2RlOyAgICAgICAvLyBFcnJv ciBDb2RlDQogICBlbnVtIEVycm9yQ29kZQ0KICAgew0KDQo9PT0gbW9kaWZpZWQg ZmlsZSAnc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2lnbmFsZGF0YS9EdW1w U3RhdGVPcmQuaHBwJw0KLS0tIGEvc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwv c2lnbmFsZGF0YS9EdW1wU3RhdGVPcmQuaHBwCTIwMDktMDUtMjcgMTU6MjE6NDUg KzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL3NpZ25hbGRh dGEvRHVtcFN0YXRlT3JkLmhwcAkyMDA5LTA2LTI0IDIwOjU2OjUxICswMDAwDQpA QCAtMTc2LDcgKzE3Niw2IEBAIHB1YmxpYzoNCiAgICAgRHVtcERiaW5mbyA9IDE0 MDAwLA0KICAgICBEYmluZm9MaXN0VGFibGVzID0gMTQwMDEsDQogICAgIERiaW5m b0xpc3RDb2x1bW5zID0gMTQwMDIsDQotICAgIERiaW5mb1NjYW5UYWJsZSA9IDE0 MDAzLA0KIA0KICAgICBTY2hlbWFSZXNvdXJjZVNuYXBzaG90ID0gNDAwMCwgLy8g U2F2ZSByZXNvdXJjZSBjb25zdW1wdGlvbg0KICAgICBTY2hlbWFSZXNvdXJjZUNo ZWNrTGVhayA9IDQwMDEgLy8gY2hlY2sgc2FtZSBhcyBzbmFwc2hvdA0KDQo9PT0g bW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2lnbmFs ZGF0YS9TaWduYWxEYXRhLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL2luY2x1ZGUv a2VybmVsL3NpZ25hbGRhdGEvU2lnbmFsRGF0YS5ocHAJMjAwOS0wNi0xNSAxMzox MjoxOSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvc2ln bmFsZGF0YS9TaWduYWxEYXRhLmhwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAw DQpAQCAtMjc5LDggKzI3OSw3IEBAIEdTTl9QUklOVF9TSUdOQVRVUkUocHJpbnRC VUlMRF9JTkRYX0lNUEwNCiBHU05fUFJJTlRfU0lHTkFUVVJFKHByaW50QVBJX1ZF UlNJT05fUkVRKTsNCiBHU05fUFJJTlRfU0lHTkFUVVJFKHByaW50QVBJX1ZFUlNJ T05fQ09ORik7DQogDQotR1NOX1BSSU5UX1NJR05BVFVSRShwcmludERCSU5GT19T Q0FOX1JFUSk7DQotR1NOX1BSSU5UX1NJR05BVFVSRShwcmludERCSU5GT19TQ0FO X0NPTkYpOw0KK0dTTl9QUklOVF9TSUdOQVRVUkUocHJpbnREQklORk9fU0NBTik7 DQogR1NOX1BSSU5UX1NJR05BVFVSRShwcmludERCSU5GT19TQ0FOX1JFRik7DQog DQogI2VuZGlmDQoNCj09PSByZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvbmRiL2luY2x1 ZGUvbmRiaW5mby5oJw0KLS0tIGEvc3RvcmFnZS9uZGIvaW5jbHVkZS9uZGJpbmZv LmgJMjAwOS0wNi0yMyAxNDowNzo1OCArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIv aW5jbHVkZS9uZGJpbmZvLmgJMTk3MC0wMS0wMSAwMDowMDowMCArMDAwMA0KQEAg LTEsMTM5ICswLDAgQEANCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDcgTXlTUUwgQUIN Ci0NCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSAgIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5DQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lv biAyIG9mIHRoZSBMaWNlbnNlLg0KLQ0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KLSAg IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mDQotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLSAgIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQotDQotICAgWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UNCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KLSAgIEZvdW5kYXRpb24s IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAw MjExMS0xMzA3ICBVU0EgKi8NCi0NCi0jaW5jbHVkZSA8bmRiX3R5cGVzLmg+DQot DQotI2lmbmRlZiBfX05EQklORk9fSF9fDQotI2RlZmluZSBfX05EQklORk9fSF9f DQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlm DQotDQotI2RlZmluZSBOREJJTkZPX1RZUEVfU1RSSU5HIDENCi0jZGVmaW5lIE5E QklORk9fVFlQRV9OVU1CRVIgMg0KLQ0KLXN0cnVjdCBuZGJpbmZvX2NvbHVtbiB7 DQotICBjaGFyIG5hbWVbNTBdOw0KLSAgaW50IGNvbHR5cGU7DQotfTsNCi0NCi0j ZGVmaW5lIE5EQklORk9fVEFCTEVfTUVNQkVSUyBcDQotICBjaGFyIG5hbWVbNTBd OyBcDQotICBpbnQgbmNvbHM7IFwNCi0gIGludCBmbGFnczsNCi0NCi1zdHJ1Y3Qg bmRiaW5mb190YWJsZSB7DQotICBOREJJTkZPX1RBQkxFX01FTUJFUlMNCi0gIHN0 cnVjdCBuZGJpbmZvX2NvbHVtbiBjb2xbMV07DQotfTsNCi0NCi0jZGVmaW5lIERF Q0xBUkVfTkRCSU5GT19UQUJMRSh2YXIsIG51bSkgICAgICAgICBcDQotc3RydWN0 IG5kYmluZm9zdHJ1Y3QjI3ZhciB7ICAgICAgICAgICAgICAgICAgICAgXA0KLSAg TkRCSU5GT19UQUJMRV9NRU1CRVJTICAgICAgICAgICAgICAgICAgICAgICAgIFwN Ci0gIHN0cnVjdCBuZGJpbmZvX2NvbHVtbiBjb2xbbnVtXTsgICAgICAgICAgICAg ICBcDQotfSB2YXINCi0NCi1pbnQgbmRiaW5mb19jcmVhdGVfc3FsKHN0cnVjdCBu ZGJpbmZvX3RhYmxlICp0LCBjaGFyKiBzcWwsIGludCBsZW4pOw0KLQ0KLXN0YXRp YyBpbmxpbmUgY29uc3QgY2hhciogbmRiaW5mb19jb2x0eXBlX3RvX3N0cmluZyhp bnQgY29sdHlwZSkNCi17DQotICBzdGF0aWMgY29uc3QgY2hhciogbmRiaW5mb190 eXBlX3N0cmluZ1tdPSB7Ik5PTkUiLA0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJWQVJDSEFSKDUxMikiLA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTlQgVU5TSUdO RUQiDQotICB9Ow0KLQ0KLSAgaWYoY29sdHlwZT4zKQ0KLSAgICBjb2x0eXBlPSAw Ow0KLQ0KLSAgcmV0dXJuIG5kYmluZm9fdHlwZV9zdHJpbmdbY29sdHlwZV07DQot fQ0KLQ0KLXN0cnVjdCBkYmluZm9fcm93IHsNCi0gIFVpbnQzMiogYnVmOyAgICAg IC8vIFN0YXJ0IG9mIHJvdyBidWZmZXINCi0gIFVpbnQzMiogY3VycjsgICAgIC8v IEN1cnJlbnQgcG9zaXRpb24gaW4gcm93IGJ1ZmZlcg0KLSAgVWludDMyKiBlbmQ7 ICAgICAgLy8gTGFzdCBwb3NpdGlvbiBpbiBidWZmZXINCi0gIGludCBjb2xfY291 bnQ7ICAgIC8vIEN1cnJlbnQgY29sdW1uIGNvdW50ZXINCi0NCi0gIFVpbnQzMiBz aXplKHZvaWQpIGNvbnN0IHsNCi0gICAgcmV0dXJuIChVaW50MzIpKGN1cnIgLSBi dWYpOw0KLSAgfTsNCi19Ow0KLQ0KLXZvaWQgZGJpbmZvX3dyaXRlX3Jvd19pbml0 KHN0cnVjdCBkYmluZm9fcm93ICpyLCBjaGFyKiBidWYsIGludCBsZW4pOw0KLQ0K LWludCBkYmluZm9fd3JpdGVfcm93X2NvbHVtbihzdHJ1Y3QgZGJpbmZvX3JvdyAq ciwgY29uc3QgY2hhciogY29sLCBpbnQgY2xlbik7DQotDQotaW50IGRiaW5mb193 cml0ZV9yb3dfY29sdW1uX3VpbnQzMihzdHJ1Y3QgZGJpbmZvX3JvdyAqciwgVWlu dDMyIHZhbHVlKTsNCi0NCi0vKg0KLSAqIFdlIG5lZWQgdG8gY2FsbCBwcm90ZWN0 ZWQgZnVuY3Rpb24gb2YgU2ltdWxhdGVkQmxvY2sgKHNlbmRTaWduYWwpDQotICog c28gZWFzaWVyIHRvIGltcGxlbWVudCBhcyBtYWNyby4uLg0KLSAqLw0KLSNkZWZp bmUgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgciwgcmwsIGFwaVR4bklkLCBzZW5k ZXJSZWYpICAgICAgICAgICAgIFwNCi0gIGRvIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc DQotICBUcmFuc0lkQUkgKnRpZGFpPSAoVHJhbnNJZEFJKilzaWduYWwtPmdldERh dGFQdHJTZW5kKCk7ICAgICAgICAgICAgICAgXA0KLSAgdGlkYWktPmNvbm5lY3RQ dHI9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwNCi0gIHRpZGFpLT50cmFuc0lkWzBdPSBhcGlUeG5JZDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICB0aWRhaS0+ dHJhbnNJZFsxXT0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXA0KLSAgTGluZWFyU2VjdGlvblB0ciBwdHJbM107ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0g IHB0clswXS5wID0gci5idWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcDQotICBwdHJbMF0uc3ogPSByLnNpemUo KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXA0KLSAgcmwucm93cysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIHJsLmJ5dGVzICs9 IHIuc2l6ZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQotICBzZW5kU2lnbmFsKHNlbmRlclJlZiwgR1NOX0RCSU5G T19UUkFOU0lEX0FJLCBzaWduYWwsIDMsIEpCQiwgcHRyLCAxKTsgXA0KLX0gd2hp bGUgKDApDQotDQotI2RlZmluZSBkYmluZm9fcmF0ZWxpbWl0X3NlbmRjb25mKHNp Z25hbCwgcmVxLCBybCwgaXRlbW51bWJlcikgICAgICAgICAgXA0KLSAgZG8geyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCi0gIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJp bmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsgICAgICBcDQot ICBjb25mLT50YWJsZUlkPSAocmVxKS50YWJsZUlkOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgY29uZi0+c2VuZGVyUmVmPSAo cmVxKS5zZW5kZXJSZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwNCi0gIGNvbmYtPmFwaVR4bklkPSAocmVxKS5hcGlUeG5JZDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBjb25mLT5jb2xC aXRtYXBMbz0gKHJlcSkuY29sQml0bWFwTG87ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KLSAgY29uZi0+Y29sQml0bWFwSGk9IChyZXEpLmNvbEJp dG1hcEhpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNv bmYtPnJlcXVlc3RJbmZvPSAocmVxKS5yZXF1ZXN0SW5mbyB8IERiaW5mb1NjYW5D b25mOjpNb3JlRGF0YTsgICAgICBcDQotICBjb25mLT5jdXJzb3IuY3VyX3JlcXVl c3RJbmZvPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XA0KLSAgY29uZi0+Y3Vyc29yLmN1cl9ub2RlPSBnZXRPd25Ob2RlSWQoKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPmN1cnNvci5j dXJfYmxvY2s9IG51bWJlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQotICBjb25mLT5jdXJzb3IuY3VyX2l0ZW09IChpdGVtbnVtYmVy KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgY29uZi0+ bWF4Um93cz0gKHJsKS5tYXhSb3dzOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCi0gIGNvbmYtPm1heEJ5dGVzPSAocmwpLm1heEJ5 dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQot ICBjb25mLT5yb3dzX3RvdGFsPSAocmwpLnJvd3NfdG90YWwgKyAocmwpLnJvd3M7 ICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgY29uZi0+d29yZF90b3RhbD0g KHJsKS5ieXRlc190b3RhbCsgKHJsKS5ieXRlczsgICAgICAgICAgICAgICAgICAg ICAgIFwNCi0gIHNlbmRTaWduYWwoKHJlcSkuc2VuZGVyUmVmLCBHU05fREJJTkZP X1NDQU5DT05GLCBzaWduYWwsICAgICAgICAgICAgICBcDQotICAgICAgICAgICAg IERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOyAg ICAgICAgICAgICAgXA0KLX0gd2hpbGUgKDApDQotDQotDQotc3RydWN0IGRiaW5m b19yYXRlbGltaXQgew0KLSAgVWludDMyIG1heFJvd3M7DQotICBVaW50MzIgbWF4 Qnl0ZXM7DQotICBVaW50MzIgcm93c190b3RhbDsNCi0gIFVpbnQzMiBieXRlc190 b3RhbDsNCi0gIFVpbnQzMiByb3dzOw0KLSAgVWludDMyIGJ5dGVzOw0KLX07DQot DQotc3RydWN0IERiaW5mb1NjYW5SZXE7DQotdm9pZCBkYmluZm9fcmF0ZWxpbWl0 X2luaXQoc3RydWN0IGRiaW5mb19yYXRlbGltaXQgKnJsLCBzdHJ1Y3QgRGJpbmZv U2NhblJlcSAqKTsNCi0NCi1pbnQgZGJpbmZvX3JhdGVsaW1pdF9jb250aW51ZShz dHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCAqcmwpOw0KLQ0KLSNpZmRlZiBfX2NwbHVz cGx1cw0KLX0NCi0jZW5kaWYNCi0NCi0jZW5kaWYNCg0KPT09IG1vZGlmaWVkIGZp bGUgJ3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vZGVidWdnZXIvc2lnbmFsZGF0YS9E YmluZm9TY2FuLmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vZGVi dWdnZXIvc2lnbmFsZGF0YS9EYmluZm9TY2FuLmNwcAkyMDA5LTA2LTE1IDEzOjEy OjE5ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvY29tbW9uL2RlYnVnZ2Vy L3NpZ25hbGRhdGEvRGJpbmZvU2Nhbi5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCAr MDAwMA0KQEAgLTE5LDUyICsxOSw0MyBAQA0KICNpbmNsdWRlIDxzaWduYWxkYXRh L0RiaW5mb1NjYW4uaHBwPg0KIA0KIGJvb2wNCi1wcmludERCSU5GT19TQ0FOX1JF UShGSUxFKiBvdXRwdXQsIGNvbnN0IFVpbnQzMiogdGhlRGF0YSwgVWludDMyIGxl biwgVWludDE2KQ0KK3ByaW50REJJTkZPX1NDQU4oRklMRSogb3V0cHV0LCBjb25z dCBVaW50MzIqIHRoZURhdGEsIFVpbnQzMiBsZW4sIFVpbnQxNikNCiB7DQotICBj b25zdCBEYmluZm9TY2FuUmVxKiBzaWcgPSAoY29uc3QgRGJpbmZvU2NhblJlcSop dGhlRGF0YTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHRhYmxlSWQ6ICV1Iiwgc2ln LT50YWJsZUlkKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIGFwaVJlZjogMHgleCIs IHNpZy0+YXBpUmVmKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIGFwaVR4bklkOiAl dSIsIHNpZy0+YXBpVHhuSWQpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgc2VuZGVy UmVmOiAweCV4Iiwgc2lnLT5zZW5kZXJSZWYpOw0KLSAgZnByaW50ZihvdXRwdXQs ICIgaW5zdGFuY2U6ICV1Iiwgc2lnLT5pbnN0YW5jZSk7DQotICBmcHJpbnRmKG91 dHB1dCwgIiBjb2xCaXRtYXBMbzogMHgleCIsIHNpZy0+Y29sQml0bWFwTG8pOw0K LSAgZnByaW50ZihvdXRwdXQsICIgY29sQml0bWFwSGk6IDB4JXgiLCBzaWctPmNv bEJpdG1hcEhpKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHJlcXVlc3RJbmZvOiAl dSIsIHNpZy0+cmVxdWVzdEluZm8pOw0KLSAgZnByaW50ZihvdXRwdXQsICJcbiIp Ow0KLSAgZnByaW50ZihvdXRwdXQsICIgbWF4Um93czogJXUiLCBzaWctPm1heFJv d3MpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgbWF4Qnl0ZXM6ICV1Iiwgc2lnLT5t YXhCeXRlcyk7DQotICBmcHJpbnRmKG91dHB1dCwgIiByb3dzX3RvdGFsOiAldSIs IHNpZy0+cm93c190b3RhbCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiB3b3JkX3Rv dGFsOiAldSIsIHNpZy0+d29yZF90b3RhbCk7DQorICBjb25zdCBEYmluZm9TY2Fu KiBzaWcgPSAoY29uc3QgRGJpbmZvU2NhbiopdGhlRGF0YTsNCisgIGZwcmludGYo b3V0cHV0LCAiIHJlc3VsdERhdGE6IDB4JXgiLCBzaWctPnJlc3VsdERhdGEpOw0K KyAgZnByaW50ZihvdXRwdXQsICIgdHJhbnNpZDogeyAweCV4LCAweCV4fSIsIHNp Zy0+dHJhbnNJZFswXSwgc2lnLT50cmFuc0lkWzFdKTsNCisgIGZwcmludGYob3V0 cHV0LCAiIHJlc3VsdFJlZjogMHgleCIsIHNpZy0+cmVzdWx0UmVmKTsNCiAgIGZw cmludGYob3V0cHV0LCAiXG4iKTsNCi0gIHJldHVybiB0cnVlOw0KLX0NCi0NCi1i b29sDQotcHJpbnREQklORk9fU0NBTl9DT05GKEZJTEUqIG91dHB1dCwgY29uc3Qg VWludDMyKiB0aGVEYXRhLCBVaW50MzIgbGVuLCBVaW50MTYpDQotew0KLSAgY29u c3QgRGJpbmZvU2NhbkNvbmYqIHNpZyA9IChjb25zdCBEYmluZm9TY2FuQ29uZiop dGhlRGF0YTsNCiAgIGZwcmludGYob3V0cHV0LCAiIHRhYmxlSWQ6ICV1Iiwgc2ln LT50YWJsZUlkKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIGFwaVJlZjogMHgleCIs IHNpZy0+YXBpUmVmKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIGFwaVR4bklkOiAl dSIsIHNpZy0+YXBpVHhuSWQpOw0KLSAgZnByaW50ZihvdXRwdXQsICIgc2VuZGVy UmVmOiAweCV4Iiwgc2lnLT5zZW5kZXJSZWYpOw0KLSAgZnByaW50ZihvdXRwdXQs ICIgaW5zdGFuY2U6ICV1Iiwgc2lnLT5pbnN0YW5jZSk7DQotICBmcHJpbnRmKG91 dHB1dCwgIiBjb2xCaXRtYXBMbzogMHgleCIsIHNpZy0+Y29sQml0bWFwTG8pOw0K LSAgZnByaW50ZihvdXRwdXQsICIgY29sQml0bWFwSGk6IDB4JXgiLCBzaWctPmNv bEJpdG1hcEhpKTsNCi0gIGZwcmludGYob3V0cHV0LCAiIHJlcXVlc3RJbmZvOiAl dSIsIHNpZy0+cmVxdWVzdEluZm8pOw0KKyAgZnByaW50ZihvdXRwdXQsICIgY29s Qml0bWFwOiB7IDB4JXgsIDB4JXggfSIsDQorICAgICAgICAgIHNpZy0+Y29sQml0 bWFwWzBdLCBzaWctPmNvbEJpdG1hcFsxXSk7DQorICBmcHJpbnRmKG91dHB1dCwg IiByZXF1ZXN0SW5mbzogMHgleCIsIHNpZy0+cmVxdWVzdEluZm8pOw0KICAgZnBy aW50ZihvdXRwdXQsICJcbiIpOw0KICAgZnByaW50ZihvdXRwdXQsICIgbWF4Um93 czogJXUiLCBzaWctPm1heFJvd3MpOw0KICAgZnByaW50ZihvdXRwdXQsICIgbWF4 Qnl0ZXM6ICV1Iiwgc2lnLT5tYXhCeXRlcyk7DQotICBmcHJpbnRmKG91dHB1dCwg IiByb3dzX3RvdGFsOiAldSIsIHNpZy0+cm93c190b3RhbCk7DQotICBmcHJpbnRm KG91dHB1dCwgIiB3b3JkX3RvdGFsOiAldSIsIHNpZy0+d29yZF90b3RhbCk7DQog ICBmcHJpbnRmKG91dHB1dCwgIlxuIik7DQorICBmcHJpbnRmKG91dHB1dCwgIiBy ZXR1cm5lZFJvd3M6ICV1Iiwgc2lnLT5yZXR1cm5lZFJvd3MpOw0KKyAgZnByaW50 ZihvdXRwdXQsICJcbiIpOw0KKyAgZnByaW50ZihvdXRwdXQsICIgY3Vyc29yX3N6 OiAldVxuIiwgc2lnLT5jdXJzb3Jfc3opOw0KKyAgY29uc3QgVWludDMyKiBjdXJz b3JfZGF0YSA9IERiaW5mb1NjYW46OmdldEN1cnNvclB0cihzaWcpOw0KKyAgZnBy aW50ZihvdXRwdXQsICIgc2VuZGVyUmVmOiAweCV4IHNhdmVTZW5kZXJSZWY6IDB4 JXhcbiIsDQorICAgICAgICAgIGN1cnNvcl9kYXRhWzBdLCBjdXJzb3JfZGF0YVsx XSk7DQorICBmcHJpbnRmKG91dHB1dCwgIiBjdXJyUmVmOiAweCV4IHNhdmVDdXJy UmVmOiAweCV4IGZsYWdzOiAweCV4XG4iLA0KKyAgICAgICAgICBjdXJzb3JfZGF0 YVsyXSwgY3Vyc29yX2RhdGFbM10sIGN1cnNvcl9kYXRhWzRdKTsNCisgIGZwcmlu dGYob3V0cHV0LCAiIGRhdGE6IFsgMHgleCwgMHgleCwgMHgleCwgMHgleCBdXG4i LA0KKyAgICAgICAgICBjdXJzb3JfZGF0YVs1XSwgY3Vyc29yX2RhdGFbNl0sIGN1 cnNvcl9kYXRhWzddLCBjdXJzb3JfZGF0YVs4XSk7DQorICBmcHJpbnRmKG91dHB1 dCwgIiB0b3RhbFJvd3M6ICV1IHRvdGFsQnl0ZXM6ICV1XG4iLA0KKyAgICAgICAg ICBjdXJzb3JfZGF0YVs5XSwgY3Vyc29yX2RhdGFbMTBdKTsNCiAgIHJldHVybiB0 cnVlOw0KIH0NCiANCiBib29sIHByaW50REJJTkZPX1NDQU5fUkVGKEZJTEUqIG91 dHB1dCwgY29uc3QgVWludDMyKiB0aGVEYXRhLCBVaW50MzIgbGVuLCBVaW50MTYp DQogew0KICAgY29uc3QgRGJpbmZvU2NhblJlZiogc2lnID0gKGNvbnN0IERiaW5m b1NjYW5SZWYqKXRoZURhdGE7DQotICBmcHJpbnRmKG91dHB1dCwgIiB0YWJsZUlk OiAldSIsIHNpZy0+dGFibGVJZCk7DQotICBmcHJpbnRmKG91dHB1dCwgIiBhcGlU eG5JZDogJXUiLCBzaWctPmFwaVR4bklkKTsNCisgIGZwcmludGYob3V0cHV0LCAi IHJlc3VsdERhdGE6IDB4JXgiLCBzaWctPnJlc3VsdERhdGEpOw0KKyAgZnByaW50 ZihvdXRwdXQsICIgdHJhbnNpZDogeyAweCV4LCAweCV4fSIsIHNpZy0+dHJhbnNJ ZFswXSwgc2lnLT50cmFuc0lkWzFdKTsNCisgIGZwcmludGYob3V0cHV0LCAiIHJl c3VsdFJlZjogMHgleCIsIHNpZy0+cmVzdWx0UmVmKTsNCisgIGZwcmludGYob3V0 cHV0LCAiXG4iKTsNCiAgIGZwcmludGYob3V0cHV0LCAiIGVycm9yQ29kZTogJXUi LCBzaWctPmVycm9yQ29kZSk7DQogICBmcHJpbnRmKG91dHB1dCwgIlxuIik7DQog ICByZXR1cm4gdHJ1ZTsNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRi L3NyYy9jb21tb24vZGVidWdnZXIvc2lnbmFsZGF0YS9TaWduYWxEYXRhUHJpbnQu Y3BwJw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWdu YWxkYXRhL1NpZ25hbERhdGFQcmludC5jcHAJMjAwOS0wNi0xNSAxMzoxMjoxOSAr MDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3JjL2NvbW1vbi9kZWJ1Z2dlci9zaWdu YWxkYXRhL1NpZ25hbERhdGFQcmludC5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCAr MDAwMA0KQEAgLTI1MSw4ICsyNTEsOCBAQCBTaWduYWxEYXRhUHJpbnRGdW5jdGlv bnNbXSA9IHsNCiAgICx7IEdTTl9BUElfVkVSU0lPTl9SRVEsIHByaW50QVBJX1ZF UlNJT05fUkVRIH0NCiAgICx7IEdTTl9BUElfVkVSU0lPTl9DT05GLCBwcmludEFQ SV9WRVJTSU9OX0NPTkYgfQ0KIA0KLSAgLHsgR1NOX0RCSU5GT19TQ0FOUkVRLCBw cmludERCSU5GT19TQ0FOX1JFUSB9DQotICAseyBHU05fREJJTkZPX1NDQU5DT05G LCBwcmludERCSU5GT19TQ0FOX0NPTkYgfQ0KKyAgLHsgR1NOX0RCSU5GT19TQ0FO UkVRLCBwcmludERCSU5GT19TQ0FOIH0NCisgICx7IEdTTl9EQklORk9fU0NBTkNP TkYsIHByaW50REJJTkZPX1NDQU4gfQ0KICAgLHsgR1NOX0RCSU5GT19TQ0FOUkVG LCBwcmludERCSU5GT19TQ0FOX1JFRiB9DQogDQogICAseyAwLCAwIH0NCg0KPT09 IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9NYWtl ZmlsZS5hbScNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9NYWtl ZmlsZS5hbQkyMDA5LTA2LTIzIDExOjU1OjQxICswMDAwDQorKysgYi9zdG9yYWdl L25kYi9zcmMvY29tbW9uL3V0aWwvTWFrZWZpbGUuYW0JMjAwOS0wNy0wMyAxMDoz MTozMCArMDAwMA0KQEAgLTI4LDggKzI4LDcgQEAgbGliZ2VuZXJhbF9sYV9TT1VS Q0VTID0gXA0KICAgICAgICAgICAgIHN0cmR1cC5jIFwNCiAgICAgICAgICAgICBD b25maWdWYWx1ZXMuY3BwIG5kYl9pbml0LmNwcCBiYXNlc3RyaW5nX3ZzbnByaW50 Zi5jIFwNCiAgICAgICAgICAgICBCaXRtYXNrLmNwcCBcDQotCSAgICBuZGJfcmFu ZC5jIFwNCi0JICAgIG5kYmluZm8uY3BwDQorCSAgICBuZGJfcmFuZC5jIA0KIA0K IElOQ0xVREVTX0xPQyA9IEBaTElCX0lOQ0xVREVTQA0KIA0KDQo9PT0gcmVtb3Zl ZCBmaWxlICdzdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvbmRiaW5mby5jcHAn DQotLS0gYS9zdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvbmRiaW5mby5jcHAJ MjAwOS0wNi0yMyAxMTo1NTo0MSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3Jj L2NvbW1vbi91dGlsL25kYmluZm8uY3BwCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAw MDANCkBAIC0xLDU0ICswLDAgQEANCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDcgTXlT UUwgQUINCi0NCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KLSAgIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5DQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLg0KLQ0KLSAgIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LA0KLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KLSAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQotDQot ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UNCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KLSAgIEZvdW5k YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BICAwMjExMS0xMzA3ICBVU0EgKi8NCi0NCi0jaW5jbHVkZSA8c3RkaW8uaD4N Ci0jaW5jbHVkZSA8c3RyaW5nLmg+DQotI2luY2x1ZGUgPGVycm5vLmg+DQotDQot I2luY2x1ZGUgPG5kYl9nbG9iYWwuaD4NCi0jaW5jbHVkZSA8bXlfYmFzZS5oPg0K LSNpbmNsdWRlIDxtX3N0cmluZy5oPiAvKiBmb3IgbXlfc25wcmludGYgKi8NCi0N Ci0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLQ0KLWludCBuZGJpbmZvX2NyZWF0ZV9z cWwoc3RydWN0IG5kYmluZm9fdGFibGUgKnQsIGNoYXIqIHNxbCwgaW50IGxlbikN Ci17DQotICBpbnQgaTsNCi0NCi0gIG15X3NucHJpbnRmKHNxbCxsZW4sIkNSRUFU RSBUQUJMRSBgJXNgICgiLCB0LT5uYW1lKTsNCi0NCi0gIGxlbi09c3RybGVuKHNx bCk7DQotICBzcWwrPXN0cmxlbihzcWwpOw0KLSAgaWYobGVuPDApDQotICAgIHJl dHVybiBFTk9NRU07DQotDQotICBmb3IoaT0wO2k8dC0+bmNvbHM7aSsrKQ0KLSAg ew0KLSAgICBteV9zbnByaW50ZihzcWwsbGVuLCJcblx0YCVzYCAlcywiLA0KLSAg ICAgICAgICAgICB0LT5jb2xbaV0ubmFtZSwgbmRiaW5mb19jb2x0eXBlX3RvX3N0 cmluZyh0LT5jb2xbaV0uY29sdHlwZSkpOw0KLSAgICBsZW4tPXN0cmxlbihzcWwp Ow0KLSAgICBzcWwrPXN0cmxlbihzcWwpOw0KLSAgICBpZihsZW48MCkNCi0gICAg ICByZXR1cm4gRU5PTUVNOw0KLSAgfQ0KLSAgKigtLXNxbCk9J1wwJzsNCi0gIG15 X3NucHJpbnRmKHNxbCxsZW4sIlxuKSBFTkdJTkU9TkRCSU5GTzsiKTsNCi0gIGxl bi09c3RybGVuKHNxbCk7DQotICBzcWwrPXN0cmxlbihzcWwpOw0KLSAgaWYobGVu PDApDQotICAgIHJldHVybiBFTk9NRU07DQotDQotICByZXR1cm4gMDsNCi19DQoN Cj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9Mb2NhbFByb3h5LmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL0xvY2FsUHJveHkuY3BwCTIwMDktMDYtMTUgMTM6MzE6MzcgKzAwMDAN CisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL0xvY2FsUHJveHku Y3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC05NzcsNjggKzk3Nywx NDEgQEAgTG9jYWxQcm94eTo6c2VuZERST1BfVFJJR19JTVBMX0NPTkYoU2lnbg0K IA0KIC8vIEdTTl9EQklORk9fU0NBTlJFUQ0KIA0KLXZvaWQNCi1Mb2NhbFByb3h5 OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsKiBzaWduYWwpDQorYm9vbA0KK0xv Y2FsUHJveHk6OmZpbmRfbmV4dChOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3Ip IGNvbnN0DQogew0KLSAgU3NfREJJTkZPX1NDQU5SRVEmIHNzID0gc3NTZWl6ZTxT c19EQklORk9fU0NBTlJFUT4oMSk7DQorICBqYW0oKTsNCisgIGNvbnN0IFVpbnQz MiBub2RlID0gcmVmVG9Ob2RlKGN1cnNvci0+Y3VyclJlZik7DQorICBjb25zdCBV aW50MzIgYmxvY2sgPSByZWZUb01haW4oY3Vyc29yLT5jdXJyUmVmKTsNCisgIFVp bnQzMiBpbnN0YW5jZSA9IHJlZlRvSW5zdGFuY2UoY3Vyc29yLT5jdXJyUmVmKTsN CiANCi0gIGNvbnN0IERiaW5mb1NjYW5SZXEqIHJlcSA9IChjb25zdCBEYmluZm9T Y2FuUmVxKilzaWduYWwtPmdldERhdGFQdHIoKTsNCi0gIHNzLm1fcmVxID0gKnJl cTsNCi0gIG5kYnJlcXVpcmUoc2lnbmFsLT5nZXRMZW5ndGgoKSA9PSBEYmluZm9T Y2FuUmVxOjpTaWduYWxMZW5ndGggfHwNCi0gICAgICAgICAgICAgc2lnbmFsLT5n ZXRMZW5ndGgoKSA9PSBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vy c29yKTsNCi0gIHNzLm1fbGVuID0gc2lnbmFsLT5nZXRMZW5ndGgoKTsNCi0gIHNl bmRSRVEoc2lnbmFsLCBzcyk7DQotfQ0KKyAgbmRicmVxdWlyZShub2RlID09IGdl dE93bk5vZGVJZCgpKTsNCisgIG5kYnJlcXVpcmUoYmxvY2sgPT0gbnVtYmVyKCkp Ow0KIA0KLXZvaWQNCi1Mb2NhbFByb3h5OjpleGVjREJJTkZPX1NDQU5DT05GKFNp Z25hbCogc2lnbmFsKQ0KLXsNCi0gIFNzX0RCSU5GT19TQ0FOUkVRJiBzcyA9IHNz RmluZDxTc19EQklORk9fU0NBTlJFUT4oMSk7DQotICByZWN2Q09ORihzaWduYWws IHNzKTsNCisgIGlmIChpbnN0YW5jZSsrIDwgY193b3JrZXJzKQ0KKyAgew0KKyAg ICBjdXJzb3ItPmN1cnJSZWYgPSBudW1iZXJUb1JlZihibG9jaywgaW5zdGFuY2Us IG5vZGUpOw0KKyAgICByZXR1cm4gdHJ1ZTsNCisgIH0NCisNCisgIGN1cnNvci0+ Y3VyclJlZiA9IG51bWJlclRvUmVmKGJsb2NrLCBub2RlKTsNCisgIHJldHVybiBm YWxzZTsNCiB9DQogDQorDQorDQogdm9pZA0KLUxvY2FsUHJveHk6OnNlbmREQklO Rk9fU0NBTlJFUShTaWduYWwqIHNpZ25hbCwgVWludDMyIHNzSWQpDQorTG9jYWxQ cm94eTo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCogc2lnbmFsKQ0KIHsNCi0g IFNzX0RCSU5GT19TQ0FOUkVRJiBzcyA9IHNzRmluZDxTc19EQklORk9fU0NBTlJF UT4oc3NJZCk7DQorICBqYW1FbnRyeSgpOw0KKyAgY29uc3QgRGJpbmZvU2NhblJl cSogcmVxID0gKGNvbnN0IERiaW5mb1NjYW5SZXEqKSBzaWduYWwtPmdldERhdGFQ dHIoKTsNCisgIFVpbnQzMiBzaWduYWxfbGVuZ3RoID0gc2lnbmFsLT5nZXRMZW5n dGgoKTsNCisgIG5kYnJlcXVpcmUoc2lnbmFsX2xlbmd0aCA9PSBEYmluZm9TY2Fu UmVxOjpTaWduYWxMZW5ndGgrcmVxLT5jdXJzb3Jfc3opOw0KKw0KKyAgTmRiaW5m bzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJz b3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cihyZXEpOw0KKw0KKyAgaWYgKE5k YmluZm86OlNjYW5DdXJzb3I6OmdldEhhc01vcmVEYXRhKGN1cnNvci0+ZmxhZ3Mp ICYmDQorICAgICAgY3Vyc29yLT5zYXZlQ3VyclJlZikNCisgIHsNCisgICAgLyog Q29udGludWUgaW4gdGhlIHNhdmVkIGJsb2NrIHJlZiAqLw0KKyAgICBjdXJzb3It PmN1cnJSZWYgPSBjdXJzb3ItPnNhdmVDdXJyUmVmOw0KKyAgICBjdXJzb3ItPnNh dmVDdXJyUmVmID0gMDsNCisNCisgICAgLy8gU2V0IHRoaXMgYmxvY2sgYXMgc2Vu ZGVyIGFuZCByZW1lbWJlciBvcmlnaW5hbCBzZW5kZXINCisgICAgY3Vyc29yLT5z YXZlU2VuZGVyUmVmID0gY3Vyc29yLT5zZW5kZXJSZWY7DQorICAgIGN1cnNvci0+ c2VuZGVyUmVmID0gcmVmZXJlbmNlKCk7DQorDQorICAgIHNlbmRTaWduYWwoY3Vy c29yLT5jdXJyUmVmLCBHU05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAgICAg ICAgc2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1cm47DQor ICB9DQorDQorICBOZGJpbmZvOjpTY2FuQ3Vyc29yOjpzZXRIYXNNb3JlRGF0YShj dXJzb3ItPmZsYWdzLCBmYWxzZSk7DQogDQotICBEYmluZm9TY2FuUmVxKiByZXEg PSAoRGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAg KnJlcSA9IHNzLm1fcmVxOw0KLSAgcmVxLT5zZW5kZXJSZWYgPSByZWZlcmVuY2Uo KTsNCi0gIHJlcS0+aW5zdGFuY2UgPSBzcy5tX3dvcmtlcjsNCi0gIHNlbmRTaWdu YWwod29ya2VyUmVmKHNzLm1fd29ya2VyKSwgR1NOX0RCSU5GT19TQ0FOUkVRLA0K LSAgICAgICAgICAgICBzaWduYWwsIHNzLm1fbGVuLCBKQkIpOw0KKyAgaWYgKGZp bmRfbmV4dChjdXJzb3IpKQ0KKyAgew0KKyAgICBqYW0oKTsNCisgICAgbmRicmVx dWlyZShjdXJzb3ItPmN1cnJSZWYpOw0KKyAgICBuZGJyZXF1aXJlKGN1cnNvci0+ c2F2ZUN1cnJSZWYgPT0gMCk7DQorDQorICAgIC8vIFNldCB0aGlzIGJsb2NrIGFz IHNlbmRlciBhbmQgcmVtZW1iZXIgb3JpZ2luYWwgc2VuZGVyDQorICAgIGN1cnNv ci0+c2F2ZVNlbmRlclJlZiA9IGN1cnNvci0+c2VuZGVyUmVmOw0KKyAgICBjdXJz b3ItPnNlbmRlclJlZiA9IHJlZmVyZW5jZSgpOw0KKw0KKyAgICBzZW5kU2lnbmFs KGN1cnNvci0+Y3VyclJlZiwgR1NOX0RCSU5GT19TQ0FOUkVRLA0KKyAgICAgICAg ICAgICAgIHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCisgICAgcmV0dXJu Ow0KKyAgfQ0KKw0KKyAgLyogU2NhbiBpcyBkb25lLCBzZW5kIFNDQU5DT05GIGJh Y2sgdG8gY2FsbGVyICAqLw0KKw0KKyAgLyogU3dhcCBiYWNrIHNhdmVkIHNlbmRl clJlZiAqLw0KKyAgY29uc3QgVWludDMyIHNlbmRlclJlZiA9IGN1cnNvci0+c2Vu ZGVyUmVmID0gY3Vyc29yLT5zYXZlU2VuZGVyUmVmOw0KKyAgY3Vyc29yLT5zYXZl U2VuZGVyUmVmID0gMDsNCisNCisgIG5kYnJlcXVpcmUoY3Vyc29yLT5jdXJyUmVm KTsNCisgIG5kYnJlcXVpcmUoY3Vyc29yLT5zYXZlQ3VyclJlZiA9PSAwKTsNCisN CisgIG5kYnJlcXVpcmUocmVmVG9JbnN0YW5jZShjdXJzb3ItPmN1cnJSZWYpID09 IDApOw0KKyAgc2VuZFNpZ25hbChjdXJzb3ItPnNlbmRlclJlZiwgR1NOX0RCSU5G T19TQ0FOQ09ORiwgc2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgcmV0 dXJuOw0KIH0NCiANCiB2b2lkDQotTG9jYWxQcm94eTo6c2VuZERCSU5GT19TQ0FO Q09ORihTaWduYWwqIHNpZ25hbCwgVWludDMyIHNzSWQpDQorTG9jYWxQcm94eTo6 ZXhlY0RCSU5GT19TQ0FOQ09ORihTaWduYWwqIHNpZ25hbCkNCiB7DQotICBTc19E QklORk9fU0NBTlJFUSYgc3MgPSBzc0ZpbmQ8U3NfREJJTkZPX1NDQU5SRVE+KHNz SWQpOw0KKyAgamFtRW50cnkoKTsNCiAgIGNvbnN0IERiaW5mb1NjYW5Db25mKiBj b25mID0gKGNvbnN0IERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdldERhdGFQdHIo KTsNCi0gIGNvbnN0IFVpbnQzMiByZXFsZW5ndGggPSBzaWduYWwtPmdldExlbmd0 aCgpOw0KLSAgaWYgKCFsYXN0UmVwbHkoc3MpKQ0KLSAgICByZXR1cm47DQorICBV aW50MzIgc2lnbmFsX2xlbmd0aCA9IHNpZ25hbC0+Z2V0TGVuZ3RoKCk7DQorICBu ZGJyZXF1aXJlKHNpZ25hbF9sZW5ndGggPT0gRGJpbmZvU2NhbkNvbmY6OlNpZ25h bExlbmd0aCtjb25mLT5jdXJzb3Jfc3opOw0KIA0KLSAgaWYgKHNzLm1fZXJyb3Ig PT0gMCkNCisgIE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChO ZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoY29u Zik7DQorDQorICBpZiAoTmRiaW5mbzo6U2NhbkN1cnNvcjo6Z2V0SGFzTW9yZURh dGEoY3Vyc29yLT5mbGFncykpDQogICB7DQorICAgIC8qIFRoZSB1bmRlcmx5aW5n IGJsb2NrIHdhbnQgdG8gY29udGludWUgKi8NCiAgICAgamFtKCk7DQotICAgIERi aW5mb1NjYW5Db25mICpjb25mID0gKERiaW5mb1NjYW5Db25mKilzaWduYWwtPmdl dERhdGFQdHJTZW5kKCk7DQotICAgIG1lbWNweShjb25mLCZzcy5tX3JlcSwgcmVx bGVuZ3RoICogc2l6ZW9mKFVpbnQzMikpOw0KLSAgICBjb25mLT5yZXF1ZXN0SW5m byAmPSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7DQotICAgIHNlbmRTaWdu YWwoc3MubV9yZXEuc2VuZGVyUmVmLCBHU05fREJJTkZPX1NDQU5DT05GLA0KLSAg ICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0 aFdpdGhDdXJzb3IsIEpCQik7DQotICB9DQotICBlbHNlDQorICAgIA0KKyAgICAv KiBTd2FwIGJhY2sgc2F2ZWQgc2VuZGVyUmVmICovDQorICAgIGNvbnN0IFVpbnQz MiBzZW5kZXJSZWYgPSBjdXJzb3ItPnNlbmRlclJlZiA9IGN1cnNvci0+c2F2ZVNl bmRlclJlZjsNCisgICAgY3Vyc29yLT5zYXZlU2VuZGVyUmVmID0gMDsNCisNCisg ICAgLyogU2F2ZSBjdXJyUmVmIHRvIGNvbnRpbnVlIHdpdGggc2FtZSBpbnN0YW5j ZSBhZ2FpbiAqLw0KKyAgICBjdXJzb3ItPnNhdmVDdXJyUmVmID0gY3Vyc29yLT5j dXJyUmVmOw0KKyAgICBjdXJzb3ItPmN1cnJSZWYgPSByZWZlcmVuY2UoKTsNCisN CisgICAgc2VuZFNpZ25hbChzZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYs IHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCisgICAgcmV0dXJuOw0KKyAg fSANCisgIA0KKyAgLyogVGhlIHVuZGVybHlpbmcgYmxvY2sgcmVwb3J0ZWQgY29t cGxldGVkLCBmaW5kIG5leHQgaWYgYW55ICovDQorICBpZiAoZmluZF9uZXh0KGN1 cnNvcikpDQogICB7DQogICAgIGphbSgpOw0KLSAgICBEYmluZm9TY2FuUmVmICpy ZWYgPSAoRGJpbmZvU2NhblJlZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0K LSAgICByZWYtPnRhYmxlSWQgPSBjb25mLT50YWJsZUlkOw0KLSAgICByZWYtPmFw aVR4bklkID0gY29uZi0+YXBpVHhuSWQ7DQotICAgIHJlZi0+ZXJyb3JDb2RlID0g c3MubV9lcnJvcjsNCi0gICAgc2VuZFNpZ25hbChzcy5tX3JlcS5zZW5kZXJSZWYs IEdTTl9EQklORk9fU0NBTlJFRiwgc2lnbmFsLA0KLSAgICAgICAgICAgICAgIERi aW5mb1NjYW5SZWY6OlNpZ25hbExlbmd0aCwgSkJCKTsNCisNCisgICAgbmRicmVx dWlyZShjdXJzb3ItPnNlbmRlclJlZiA9PSByZWZlcmVuY2UoKSk7DQorICAgIG5k YnJlcXVpcmUoY3Vyc29yLT5zYXZlU2VuZGVyUmVmKTsgLy8gU2hvdWxkIGFscmVh ZHkgYmUgc2V0DQorDQorICAgIG5kYnJlcXVpcmUoY3Vyc29yLT5zYXZlQ3VyclJl ZiA9PSAwKTsNCisNCisgICAgc2VuZFNpZ25hbChjdXJzb3ItPmN1cnJSZWYsIEdT Tl9EQklORk9fU0NBTlJFUSwNCisgICAgICAgICAgICAgICBzaWduYWwsIHNpZ25h bF9sZW5ndGgsIEpCQik7DQorICAgIHJldHVybjsNCiAgIH0NCi0gIHNzUmVsZWFz ZTxTc19EQklORk9fU0NBTlJFUT4oc3NJZCk7DQorDQorICAvKiBTY2FuIGluIHRo aXMgYmxvY2sgYW5kIGl0cyBpbnN0YW5jZXMgYXJlIGNvbXBsZXRlZCAqLw0KKw0K KyAgLyogU3dhcCBiYWNrIHNhdmVkIHNlbmRlclJlZiAqLw0KKyAgY29uc3QgVWlu dDMyIHNlbmRlclJlZiA9IGN1cnNvci0+c2VuZGVyUmVmID0gY3Vyc29yLT5zYXZl U2VuZGVyUmVmOw0KKyAgY3Vyc29yLT5zYXZlU2VuZGVyUmVmID0gMDsNCisNCisg IG5kYnJlcXVpcmUoY3Vyc29yLT5jdXJyUmVmKTsNCisgIG5kYnJlcXVpcmUoY3Vy c29yLT5zYXZlQ3VyclJlZiA9PSAwKTsNCisNCisgIHNlbmRTaWduYWwoc2VuZGVy UmVmLCBHU05fREJJTkZPX1NDQU5DT05GLCBzaWduYWwsIHNpZ25hbF9sZW5ndGgs IEpCQik7DQorICByZXR1cm47DQogfQ0KIA0KIEJMT0NLX0ZVTkNUSU9OUyhMb2Nh bFByb3h5KQ0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tl cm5lbC9ibG9ja3MvTG9jYWxQcm94eS5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9Mb2NhbFByb3h5LmhwcAkyMDA5LTA2LTE1IDEzOjMx OjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9M b2NhbFByb3h5LmhwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtNTU2 LDIzICs1NTYsOSBAQCBwcm90ZWN0ZWQ6DQogICB2b2lkIHNlbmREUk9QX1RSSUdf SU1QTF9DT05GKFNpZ25hbCosIFVpbnQzMiBzc0lkKTsNCiANCiAgIC8vIEdTTl9E QklORk9fU0NBTlJFUQ0KLSAgc3RydWN0IFNzX0RCSU5GT19TQ0FOUkVRIDogU3NT ZXF1ZW50aWFsIHsNCi0gICAgRGJpbmZvU2NhblJlcSBtX3JlcTsNCi0gICAgVWlu dDMyIG1fbGVuOw0KLSAgICBTc19EQklORk9fU0NBTlJFUSgpIHsNCi0gICAgICBt X3NlbmRSRVEgPSAmTG9jYWxQcm94eTo6c2VuZERCSU5GT19TQ0FOUkVROw0KLSAg ICAgIG1fc2VuZENPTkYgPSAmTG9jYWxQcm94eTo6c2VuZERCSU5GT19TQ0FOQ09O RjsNCi0gICAgfQ0KLSAgICBlbnVtIHsgcG9vbFNpemUgPSAzIH07DQotICAgIHN0 YXRpYyBTc1Bvb2w8U3NfREJJTkZPX1NDQU5SRVE+JiBwb29sKExvY2FsUHJveHkq IHByb3h5KSB7DQotICAgICAgcmV0dXJuIHByb3h5LT5jX3NzX0RCSU5GT19TQ0FO UkVROw0KLSAgICB9DQotICB9Ow0KLSAgU3NQb29sPFNzX0RCSU5GT19TQ0FOUkVR PiBjX3NzX0RCSU5GT19TQ0FOUkVROw0KKyAgYm9vbCBmaW5kX25leHQoTmRiaW5m bzo6U2NhbkN1cnNvciogY3Vyc29yKSBjb25zdDsNCiAgIHZvaWQgZXhlY0RCSU5G T19TQ0FOUkVRKFNpZ25hbCopOw0KLSAgdm9pZCBzZW5kREJJTkZPX1NDQU5SRVEo U2lnbmFsKiwgVWludDMyIHNzSWQpOw0KICAgdm9pZCBleGVjREJJTkZPX1NDQU5D T05GKFNpZ25hbCopOw0KLSAgdm9pZCBzZW5kREJJTkZPX1NDQU5DT05GKFNpZ25h bCosIFVpbnQzMiBzc0lkKTsNCiB9Ow0KIA0KICNlbmRpZg0KDQo9PT0gbW9kaWZp ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvTWFrZWZpbGUu YW0nDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9NYWtlZmls ZS5hbQkyMDA5LTA1LTI3IDE1OjIxOjQ1ICswMDAwDQorKysgYi9zdG9yYWdlL25k Yi9zcmMva2VybmVsL2Jsb2Nrcy9NYWtlZmlsZS5hbQkyMDA5LTA3LTAzIDEwOjMx OjMwICswMDAwDQpAQCAtNjUsNyArNjUsNiBAQCBsaWJibG9ja3NfYV9TT1VSQ0VT ID0gdHNtYW4uY3BwIGxnbWFuLmNwDQogICBiYWNrdXAvQmFja3VwUHJveHkuY3Bw IFwNCiAgIFJlc3RvcmVQcm94eS5jcHAgXA0KICAgZGJpbmZvL0RiaW5mby5jcHAg XA0KLSAgZGJpbmZvL25kYmluZm9faGVscGVycy5jcHAgXA0KICAgZGJscWgvRGJs cWhDb21tb24uY3BwIFwNCiAgIFBnbWFuUHJveHkuY3BwIFwNCiAgIGRidHVwL0Ri dHVwQ2xpZW50LmNwcA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvYmFja3VwL0JhY2t1cC5jcHAnDQotLS0gYS9zdG9y YWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9iYWNrdXAvQmFja3VwLmNwcAkyMDA5 LTA2LTE1IDEzOjMxOjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2Vy bmVsL2Jsb2Nrcy9iYWNrdXAvQmFja3VwLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMw ICswMDAwDQpAQCAtNjMsOCArNjMsNiBAQA0KIA0KICNpbmNsdWRlIDxzaWduYWxk YXRhL0RiaW5mb1NjYW4uaHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5z SWRBSS5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5jbHVkZSA8ZGJp bmZvL25kYmluZm9fdGFibGVpZHMuaD4NCiANCiAjaW5jbHVkZSA8TmRiVGljay5o Pg0KICNpbmNsdWRlIDxkYnR1cC9EYnR1cC5ocHA+DQpAQCAtNjYwLDUzICs2NTgs NjIgQEAgdm9pZCBCYWNrdXA6OmV4ZWNEQklORk9fU0NBTlJFUShTaWduYWwgKg0K IHsNCiAgIGphbUVudHJ5KCk7DQogICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmlu Zm9TY2FuUmVxKilzaWduYWwtPnRoZURhdGE7DQorICBjb25zdCBOZGJpbmZvOjpT Y2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5mbzo6U2NhbkN1cnNvciop RGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0KIA0KLSAgY2hhciBidWZb NTEyXTsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0KLSAgc3RydWN0 IGRiaW5mb19yb3cgcjsNCisgIE5kYmluZm86OlJhdGVsaW1pdCBybDsNCiANCi0g IGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KLQ0KLSAgaWYocmVx LnRhYmxlSWQgPT0gTkRCSU5GT19CQUNLVVBfUkVDT1JEU19UQUJMRUlEKQ0KKyAg aWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6QkFDS1VQX1JFQ09SRFNfVEFCTEVJ RCkNCiAgIHsNCisjaWYgMA0KKy8vIFRPRE8NCiAgICAgQmFja3VwUmVjb3JkUHRy IHB0ciBMSU5UX1NFVF9QVFI7DQotICAgIGZvcihjX2JhY2t1cHMuZmlyc3QocHRy KTsgcHRyLmkgIT0gUk5JTDsgY19iYWNrdXBzLm5leHQocHRyKSkNCisgICAgcHRy LmkgPSBjdXJzb3ItPmRhdGFbMF07DQorICAgIHdoaWxlKGNfYmFja3Vwcy5nZXQo cHRyKSkNCiAgICAgew0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwg YnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1 bW5fdWludDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7DQotICAgICAgZGJpbmZvX3dy aXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwdHIuaSk7DQotICAgICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwdHIucC0+YmFja3VwSWQpOw0K LSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcHRyLnAt Pm1hc3RlclJlZik7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWlu dDMyKCZyLCBwdHIucC0+Y2xpZW50UmVmKTsNCi0gICAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIHB0ci5wLT5zbGF2ZVN0YXRlLmdldFN0YXRl KCkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwg KFVpbnQzMilwdHIucC0+bm9PZkJ5dGVzKTsgLy8gVE9ETw0KLSAgICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgKFVpbnQzMilwdHIucC0+bm9P ZlJlY29yZHMpOyAvLyBUT0RPDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1 bW5fdWludDMyKCZyLCAoVWludDMyKXB0ci5wLT5ub09mTG9nQnl0ZXMpOyAvLyBU T0RPDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCAo VWludDMyKXB0ci5wLT5ub09mTG9nUmVjb3Jkcyk7IC8vVE9ETw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcHRyLnAtPmVycm9yQ29k ZSk7DQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5h cGlUeG5JZCwgcmVxLmFwaVJlZik7DQotICAgIH0NCi0gIH0NCi0gIGVsc2UgaWYo IHJlcS50YWJsZUlkID09IE5EQklORk9fQkFDS1VQX1BBUkFNRVRFUlNfVEFCTEVJ RCApDQotICB7DQotICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBz aXplb2YoYnVmKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQz MigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2Nv bHVtbl91aW50MzIoJnIsIG1fY3Vycl9kaXNrX3dyaXRlX3NwZWVkKTsNCi0gICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCA0Km1fd29yZHNfd3Jp dHRlbl90aGlzX3BlcmlvZCk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1u X3VpbnQzMigmciwgbV9vdmVyZmxvd19kaXNrX3dyaXRlKTsNCi0gICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBtX3Jlc2V0X2RlbGF5X3VzZWQp Ow0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIDApOyAv LyBVbmludGVyZXN0aW5nIG1fcmVzZXRfZGlza19zcGVlZF90aW1lKTsNCi0gICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjX2JhY2t1cFBvb2wu Z2V0U2l6ZSgpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMy KCZyLCBjX2JhY2t1cEZpbGVQb29sLmdldFNpemUoKSk7DQotICAgIGRiaW5mb193 cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY190YWJsZVBvb2wuZ2V0U2l6ZSgp KTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjX3Ry aWdnZXJQb29sLmdldFNpemUoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29s dW1uX3VpbnQzMigmciwgY19mcmFnbWVudFBvb2wuZ2V0U2l6ZSgpKTsNCi0gICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjX3BhZ2VQb29sLmdl dFNpemUoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigm ciwgY19kZWZhdWx0cy5tX2NvbXByZXNzZWRfYmFja3VwKTsNCi0gICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjX2RlZmF1bHRzLm1fY29tcHJl c3NlZF9sY3ApOw0KLSAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwg cmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsNCisgICAgICBOZGJpbmZvOjpSb3cg cm93KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGdldE93 bk5vZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHB0ci5pKTsNCisg ICAgICByb3cud3JpdGVfdWludDMyKHB0ci5wLT5iYWNrdXBJZCk7DQorICAgICAg cm93LndyaXRlX3VpbnQzMihwdHIucC0+bWFzdGVyUmVmKTsNCisgICAgICByb3cu d3JpdGVfdWludDMyKHB0ci5wLT5jbGllbnRSZWYpOw0KKyAgICAgIHJvdy53cml0 ZV91aW50MzIocHRyLnAtPnNsYXZlU3RhdGUuZ2V0U3RhdGUoKSk7DQorICAgICAg cm93LndyaXRlX3VpbnQzMigoVWludDMyKXB0ci5wLT5ub09mQnl0ZXMpOyAvLyBU T0RPDQorICAgICAgcm93LndyaXRlX3VpbnQzMigoVWludDMyKXB0ci5wLT5ub09m UmVjb3Jkcyk7IC8vIFRPRE8NCisgICAgICByb3cud3JpdGVfdWludDMyKChVaW50 MzIpcHRyLnAtPm5vT2ZMb2dCeXRlcyk7IC8vIFRPRE8NCisgICAgICByb3cud3Jp dGVfdWludDMyKChVaW50MzIpcHRyLnAtPm5vT2ZMb2dSZWNvcmRzKTsgLy9UT0RP DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwdHIucC0+ZXJyb3JDb2RlKTsNCisg ICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCByb3csIHJsKTsNCisg ICAgICBjX2JhY2t1cHMubmV4dChwdHIpOw0KKyAgICAgIGlmIChybC5uZWVkX2Jy ZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQorICAgICAgICBu ZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmwsIHBvb2wpOw0K KyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCisgICAgfQ0KKyNlbmRpZg0KKyAg fQ0KKyAgZWxzZSBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpCQUNLVVBfUEFS QU1FVEVSU19UQUJMRUlEKQ0KKyAgew0KKyAgICBOZGJpbmZvOjpSb3cgcm93KHNp Z25hbCwgcmVxKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQo KSk7DQorICAgIHJvdy53cml0ZV91aW50MzIobV9jdXJyX2Rpc2tfd3JpdGVfc3Bl ZWQpOw0KKyAgICByb3cud3JpdGVfdWludDMyKDQqbV93b3Jkc193cml0dGVuX3Ro aXNfcGVyaW9kKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihtX292ZXJmbG93X2Rp c2tfd3JpdGUpOw0KKyAgICByb3cud3JpdGVfdWludDMyKG1fcmVzZXRfZGVsYXlf dXNlZCk7DQorICAgIHJvdy53cml0ZV91aW50MzIoMCk7IC8vIFVuaW50ZXJlc3Rp bmcgbV9yZXNldF9kaXNrX3NwZWVkX3RpbWUpOw0KKyAgICByb3cud3JpdGVfdWlu dDMyKGNfYmFja3VwUG9vbC5nZXRTaXplKCkpOw0KKyAgICByb3cud3JpdGVfdWlu dDMyKGNfYmFja3VwRmlsZVBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93LndyaXRl X3VpbnQzMihjX3RhYmxlUG9vbC5nZXRTaXplKCkpOw0KKyAgICByb3cud3JpdGVf dWludDMyKGNfdHJpZ2dlclBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93LndyaXRl X3VpbnQzMihjX2ZyYWdtZW50UG9vbC5nZXRTaXplKCkpOw0KKyAgICByb3cud3Jp dGVfdWludDMyKGNfcGFnZVBvb2wuZ2V0U2l6ZSgpKTsNCisgICAgcm93LndyaXRl X3VpbnQzMihjX2RlZmF1bHRzLm1fY29tcHJlc3NlZF9iYWNrdXApOw0KKyAgICBy b3cud3JpdGVfdWludDMyKGNfZGVmYXVsdHMubV9jb21wcmVzc2VkX2xjcCk7DQor ICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KICAg fQ0KLSAgZWxzZSBpZiggcmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJM RUlEICkNCisgIGVsc2UgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNf VEFCTEVJRCkNCiAgIHsNCiAgICAgc3RydWN0IHsNCiAgICAgICBjb25zdCBjaGFy KiBwb29sbmFtZTsNCkBAIC03MzUsMjUgKzc0MiwzMCBAQCB2b2lkIEJhY2t1cDo6 ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqDQogICAgICAgICAgIHsgTlVMTCwg MCwgMH0NCiAgICAgICAgIH07DQogDQorICAgIFVpbnQzMiBwb29sID0gY3Vyc29y LT5kYXRhWzBdOw0KICAgICBCbG9ja051bWJlciBibiA9IGJsb2NrVG9NYWluKG51 bWJlcigpKTsNCi0gICAgZm9yKGludCBpPTA7IHBvb2xzW2ldLnBvb2xuYW1lOyBp KyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKQ0KICAgICB7DQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYp KTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdl dE93bk5vZGVJZCgpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91 aW50MzIoJnIsIGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KLSAgICAg IGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcmVxLmluc3RhbmNl KTsgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2Nv bHVtbigmciwgcG9vbHNbaV0ucG9vbG5hbWUsIHN0cmxlbihwb29sc1tpXS5wb29s bmFtZSkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigm ciwgcG9vbHNbaV0uZnJlZSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1 bW5fdWludDMyKCZyLCBwb29sc1tpXS5zaXplKTsNCi0gICAgICBkYmluZm9fc2Vu ZF9yb3coc2lnbmFsLCByLCBybCwgcmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsN CisgICAgICBqYW0oKTsNCisgICAgICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwg cmVxKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsN CisgICAgICByb3cud3JpdGVfdWludDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2Nr IG51bWJlcg0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8v IGJsb2NrIGluc3RhbmNlDQorICAgICAgcm93LndyaXRlX3N0cmluZyhwb29sc1tw b29sXS5wb29sbmFtZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1tw b29sXS5mcmVlKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xd LnNpemUpOw0KKyAgICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJv dywgcmwpOw0KKyAgICAgIHBvb2wrKzsNCisgICAgICBpZiAocmwubmVlZF9icmVh ayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRi aW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCByZXEsIHJsLCBwb29sKTsNCisg ICAgICAgIHJldHVybjsNCisgICAgICB9DQogICAgIH0NCiAgIH0NCiANCi0gIERi aW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0 RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShjb25mLCZyZXEsIERiaW5mb1NjYW5S ZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IgKiBzaXplb2YoVWludDMyKSk7DQot ICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0 YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NB TkNPTkYsDQotICAgICAgICAgICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNp Z25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7DQorICBuZGJpbmZvX3NlbmRfc2Nh bl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQogfQ0KIA0KIGJvb2wNCg0KPT09IG1v ZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiYWNj L0RiYWNjTWFpbi5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Js b2Nrcy9kYmFjYy9EYmFjY01haW4uY3BwCTIwMDktMDYtMTUgMTM6MzE6MzcgKzAw MDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiYWNjL0Ri YWNjTWFpbi5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTM2LDEy ICszNiw2IEBADQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4N CiAjaW5jbHVkZSA8S2V5RGVzY3JpcHRvci5ocHA+DQogDQotI2luY2x1ZGUgPG5k YmluZm8uaD4NCi0jaW5jbHVkZSA8ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4N Ci0NCi0vLyBUT19ET19ST05NIGlzIGEgbGFiZWwgZm9yIGNvbW1lbnRzIG9uIHdo YXQgbmVlZHMgdG8gYmUgaW1wcm92ZWQgaW4gZnV0dXJlIHZlcnNpb25zDQotLy8g d2hlbiBtb3JlIHRpbWUgaXMgZ2l2ZW4uDQotDQogI2lmZGVmIFZNX1RSQUNFDQog I2RlZmluZSBERUJVRyh4KSBuZGJvdXQgPDwgIkRCQUNDOiAiPDwgeCA8PCBlbmRs Ow0KICNlbHNlDQpAQCAtODIyNiwzMiArODIyMCwyMyBAQCB2b2lkIERiYWNjOjpl eGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzDQogICBqYW1FbnRyeSgpOw0KICAg RGJpbmZvU2NhblJlcSByZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVE YXRhOw0KIA0KLSAgY2hhciBidWZbNTEyXTsNCi0gIHN0cnVjdCBkYmluZm9fcmF0 ZWxpbWl0IHJsOw0KLSAgc3RydWN0IGRiaW5mb19yb3cgcjsNCi0NCi0gIGRiaW5m b19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KLQ0KLSAgaWYocmVxLnRhYmxl SWQgPT0gTkRCSU5GT19NRU1VU0FHRV9UQUJMRUlEKQ0KLSAgew0KLSAgICBqYW0o KTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihi dWYpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBn ZXRPd25Ob2RlSWQoKSk7DQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgYmxvY2tUb01haW4obnVtYmVyKCkpKTsvLyBibG9jayBudW1iZXIN Ci0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCByZXEuaW5z dGFuY2UpOyAgICAgICAgIC8vIGJsb2NrIGluc3RhbmNlDQotICAgIGRiaW5mb193 cml0ZV9yb3dfY29sdW1uKCZyLCAiSW5kZXhNZW1vcnkiLCAxMSk7DQotICAgIFVp bnQzMiBwYWdlX3NpemVfa2I9IHNpemVvZigqcnBQYWdlcHRyLnApOzsNCi0gICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIChjaGFyKikmcGFnZV9zaXplX2ti LCA0KTsgLy8gOGtiDQotICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQz MigmciwgY25vT2ZBbGxvY2F0ZWRQYWdlcyk7IC8vIGFsbG9jZWQgcGFnZXMNCi0g ICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBjcGFnZXNpemUp OyAvLyBudW1iZXIgb2YgcGFnZXMNCi0gICAgZGJpbmZvX3NlbmRfcm93KHNpZ25h bCwgciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJlZik7DQotICB9DQotDQot ICBEYmluZm9TY2FuQ29uZiAqY29uZj0gKERiaW5mb1NjYW5Db25mKilzaWduYWwt PmdldERhdGFQdHJTZW5kKCk7DQotICBtZW1jcHkoY29uZiwmcmVxLCBEYmluZm9T Y2FuUmVxOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yICogc2l6ZW9mKFVpbnQzMikp Ow0KLSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihEYmluZm9TY2FuQ29uZjo6TW9y ZURhdGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2VuZGVyUmVmLCBHU05fREJJTkZP X1NDQU5DT05GLA0KLSAgICAgICAgICAgICBzaWduYWwsIERiaW5mb1NjYW5Db25m OjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOw0KKyAgTmRiaW5mbzo6UmF0 ZWxpbWl0IHJsOw0KKw0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6TUVN VVNBR0VfVEFCTEVJRCkNCisgIHsNCisgICAgamFtKCk7DQorICAgIE5kYmluZm86 OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICByb3cud3JpdGVfdWludDMyKGdl dE93bk5vZGVJZCgpKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihibG9ja1RvTWFp bihudW1iZXIoKSkpOyAvLyBibG9jayBudW1iZXINCisgICAgcm93LndyaXRlX3Vp bnQzMihpbnN0YW5jZSgpKTsgICAgICAgICAgICAvLyBibG9jayBpbnN0YW5jZQ0K KyAgICByb3cud3JpdGVfc3RyaW5nKCJJbmRleE1lbW9yeSIpOw0KKyAgICByb3cu d3JpdGVfdWludDMyKHNpemVvZigqcnBQYWdlcHRyLnApKTsNCisgICAgcm93Lndy aXRlX3VpbnQzMihjbm9PZkFsbG9jYXRlZFBhZ2VzKTsgICAvLyBhbGxvY2VkIHBh Z2VzDQorICAgIHJvdy53cml0ZV91aW50MzIoY3BhZ2VzaXplKTsgICAgICAgICAg ICAgLy8gbnVtYmVyIG9mIHBhZ2VzDQorICAgIG5kYmluZm9fc2VuZF9yb3coc2ln bmFsLCByZXEsIHJvdywgcmwpOw0KKyAgfQ0KKw0KKyAgbmRiaW5mb19zZW5kX3Nj YW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIH0NCiANCiB2b2lkDQoNCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmRp Y3QvRGJkaWN0LmNwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2RiZGljdC9EYmRpY3QuY3BwCTIwMDktMDYtMTYgMTI6MjU6MTggKzAwMDAN CisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiZGljdC9EYmRp Y3QuY3BwCTIwMDktMDctMDMgMTE6MTM6NTkgKzAwMDANCkBAIC05OSw4ICs5OSw2 IEBAIGV4dGVybiBFdmVudExvZ2dlciAqIGdfZXZlbnRMb2dnZXI7DQogDQogI2lu Y2x1ZGUgPHNpZ25hbGRhdGEvRGJpbmZvU2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNp Z25hbGRhdGEvVHJhbnNJZEFJLmhwcD4NCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0K LSNpbmNsdWRlIDxkYmluZm8vbmRiaW5mb190YWJsZWlkcy5oPg0KIA0KICNkZWZp bmUgWk5PVF9GT1VORCA2MjYNCiAjZGVmaW5lIFpBTFJFQURZRVhJU1QgNjMwDQpA QCAtMjc3LDE1ICsyNzUsMTMgQEAgRGJkaWN0OjpleGVjRFVNUF9TVEFURV9PUkQo U2lnbmFsKiBzaWduYQ0KIHZvaWQgRGJkaWN0OjpleGVjREJJTkZPX1NDQU5SRVEo U2lnbmFsICpzaWduYWwpDQogew0KICAgRGJpbmZvU2NhblJlcSByZXE9ICooRGJp bmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KLSAgY2hhciBidWZbNTEyXTsN Ci0gIHN0cnVjdCBkYmluZm9fcm93IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVs aW1pdCBybDsNCi0NCi0gIGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEp Ow0KKyAgY29uc3QgTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAg KE5kYmluZm86OlNjYW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigm cmVxKTsNCisgIE5kYmluZm86OlJhdGVsaW1pdCBybDsNCiANCiAgIGphbUVudHJ5 KCk7DQogDQotICBpZihyZXEudGFibGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxF SUQpDQorICBpZihyZXEudGFibGVJZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlE KQ0KICAgew0KICAgICBzdHJ1Y3Qgew0KICAgICAgIGNvbnN0IGNoYXIqIHBvb2xu YW1lOw0KQEAgLTM2OCwyNSArMzY0LDMwIEBAIHZvaWQgRGJkaWN0OjpleGVjREJJ TkZPX1NDQU5SRVEoU2lnbmFsICoNCiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0K ICAgICAgICAgfTsNCiANCisgICAgVWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFb MF07DQogICAgIEJsb2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkp Ow0KLSAgICBmb3IoaW50IGk9MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCisg ICAgd2hpbGUocG9vbHNbcG9vbF0ucG9vbG5hbWUpDQogICAgIHsNCi0gICAgICBk YmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAg ICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgZ2V0T3duTm9k ZUlkKCkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigm ciwgYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQotICAgICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCByZXEuaW5zdGFuY2UpOyAvLyBi bG9jayBpbnN0YW5jZQ0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZy LCBwb29sc1tpXS5wb29sbmFtZSwgc3RybGVuKHBvb2xzW2ldLnBvb2xuYW1lKSk7 DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29s c1tpXS5mcmVlKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIHBvb2xzW2ldLnNpemUpOw0KLSAgICAgIGRiaW5mb19zZW5kX3Jvdyhz aWduYWwsIHIsIHJsLCByZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KKyAgICAg IGphbSgpOw0KKyAgICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0K KyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkpOw0KKyAgICAg IHJvdy53cml0ZV91aW50MzIoYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVy DQorICAgICAgcm93LndyaXRlX3VpbnQzMihpbnN0YW5jZSgpKTsgLy8gYmxvY2sg aW5zdGFuY2UNCisgICAgICByb3cud3JpdGVfc3RyaW5nKHBvb2xzW3Bvb2xdLnBv b2xuYW1lKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLmZy ZWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uc2l6ZSk7 DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7 DQorICAgICAgcG9vbCsrOw0KKyAgICAgIGlmIChybC5uZWVkX2JyZWFrKHJlcSkp DQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQorICAgICAgICBuZGJpbmZvX3Nl bmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmwsIHBvb2wpOw0KKyAgICAgICAg cmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0KICAgfQ0KIA0KLSAgRGJpbmZvU2Nh bkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRy U2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgRGJpbmZvU2NhblJlcTo6U2ln bmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihVaW50MzIpKTsNCi0gIGNvbmYt PnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRhKTsNCi0g IHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwN Ci0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVu Z3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIG5kYmluZm9fc2VuZF9zY2FuX2NvbmYo c2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogDQoNCj09PSBtb2RpZmllZCBmaWxl ICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vQ01ha2VMaXN0 cy50eHQnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYmlu Zm8vQ01ha2VMaXN0cy50eHQJMjAwOC0xMC0wOCAwODoxMjoxOCArMDAwMA0KKysr IGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0NNYWtlTGlz dHMudHh0CTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0xOCw3ICsxOCw2 IEBAIElOQ0xVREVfRElSRUNUT1JJRVMoJHtDTUFLRV9TT1VSQ0VfRElSfS8NCiBJ TkNMVURFKCR7Q01BS0VfU09VUkNFX0RJUn0vc3RvcmFnZS9uZGIvY29uZmlnL3R5 cGVfa2VybmVsLmNtYWtlKQ0KIA0KIEFERF9MSUJSQVJZKG5kYmRiaW5mbyBTVEFU SUMNCi0JCSAgICAgIERiaW5mby5jcHANCi0JCSAgICAgIG5kYmluZm9faGVscGVy cy5jcHANCisJRGJpbmZvLmNwcA0KICkNCiANCg0KPT09IG1vZGlmaWVkIGZpbGUg J3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9EYmluZm8uY3Bw Jw0KLS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0Ri aW5mby5jcHAJMjAwOS0wNi0yMyAxNDowNzo1OCArMDAwMA0KKysrIGIvc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL0RiaW5mby5jcHAJMjAwOS0w Ny0wMyAxMDozMTozMCArMDAwMA0KQEAgLTEsNCArMSw1IEBADQotLyogQ29weXJp Z2h0IChDKSAyMDA3IE15U1FMIEFCDQorLyogQ29weXJpZ2h0IChDKSAyMDA3LTIw MDggTXlTUUwgQUIsIDIwMDkgU3VuIE1pY3Jvc3lzdGVtcyBJbmMuDQorICAgQWxs IHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJt cy4NCiANCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KICAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5DQpAQCAtMTQsNyArMTUsNiBAQA0KICAgIEZvdW5kYXRpb24sIElu Yy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjEx MS0xMzA3ICBVU0EgKi8NCiANCiAjaW5jbHVkZSAiRGJpbmZvLmhwcCINCi0jaW5j bHVkZSA8bmRiaW5mby5oPg0KIA0KICNpbmNsdWRlIDxzaWduYWxkYXRhL05vZGVG YWlsUmVwLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9SZWFkTm9kZXNDb25m LmhwcD4NCkBAIC0yMiw5ICsyMiw2IEBADQogI2luY2x1ZGUgPHNpZ25hbGRhdGEv RHVtcFN0YXRlT3JkLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9EYmluZm9T Y2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0K LSNpbmNsdWRlICJuZGJpbmZvX3RhYmxlcy5oIg0KLSNpbmNsdWRlICJuZGJpbmZv X3RhYmxlaWRzLmgiDQotI2luY2x1ZGUgPEF0dHJpYnV0ZUhlYWRlci5ocHA+DQog DQogVWludDMyIGRiaW5mb19ibG9ja3NbXSA9IHsgREJBQ0MsIERCVFVQLCBCQUNL VVAsIERCVEMsIFNVTUEsIERCVVRJTCwgVFJJWCwgREJUVVgsIERCRElDVCwgMH07 DQogDQpAQCAtMzQsNiArMzEsOCBAQCBEYmluZm86OkRiaW5mbyhCbG9ja19jb250 ZXh0JiBjdHgpIDoNCiB7DQogICBCTE9DS19DT05TVFJVQ1RPUihEYmluZm8pOw0K IA0KKyAgU1RBVElDX0FTU0VSVChzaXplb2YoRGJpbmZvU2NhbkN1cnNvcikgPT0g c2l6ZW9mKE5kYmluZm86OlNjYW5DdXJzb3IpKTsNCisNCiAgIGNfbm9kZVBvb2wu c2V0U2l6ZShNQVhfTkRCX05PREVTKTsNCiANCiAgIC8qIEFkZCBSZWNlaXZlZCBT aWduYWxzICovDQpAQCAtNDQsOCArNDMsNiBAQCBEYmluZm86OkRiaW5mbyhCbG9j a19jb250ZXh0JiBjdHgpIDoNCiAgIGFkZFJlY1NpZ25hbChHU05fREJJTkZPX1ND QU5SRVEsICZEYmluZm86OmV4ZWNEQklORk9fU0NBTlJFUSk7DQogICBhZGRSZWNT aWduYWwoR1NOX0RCSU5GT19TQ0FOQ09ORiwgJkRiaW5mbzo6ZXhlY0RCSU5GT19T Q0FOQ09ORik7DQogDQotICBhZGRSZWNTaWduYWwoR1NOX0RCSU5GT19UUkFOU0lE X0FJLCAmRGJpbmZvOjpleGVjREJJTkZPX1RSQU5TSURfQUkpOw0KLQ0KICAgYWRk UmVjU2lnbmFsKEdTTl9SRUFEX05PREVTQ09ORiwgJkRiaW5mbzo6ZXhlY1JFQURf Tk9ERVNDT05GKTsNCiAgIGFkZFJlY1NpZ25hbChHU05fTk9ERV9GQUlMUkVQLCAm RGJpbmZvOjpleGVjTk9ERV9GQUlMUkVQKTsNCiAgIGFkZFJlY1NpZ25hbChHU05f SU5DTF9OT0RFUkVRLCAmRGJpbmZvOjpleGVjSU5DTF9OT0RFUkVRKTsNCkBAIC0x MDIsNjggKzk5LDYgQEAgdm9pZCBEYmluZm86OnNlbmRTVFRPUlJZKFNpZ25hbCog c2lnbmFsKQ0KICAgc2VuZFNpZ25hbChOREJDTlRSX1JFRiwgR1NOX1NUVE9SUlks IHNpZ25hbCwgNiwgSkJCKTsNCiB9DQogDQotLyoNCi0gKiBFeGVjdXRpbmcgREJJ TkZPX1RSQU5TSURfQUkgaXMgb25seSBmb3IgZGVidWdnaW5nDQotICogV2UgdXNl IHRoaXMgYXMgcGFydCBvZiB0aGUgRFVNUCBpbnRlcmZhY2UNCi0gKiBhbmQgZHVy aW5nIGRlYnVnZ2luZy4NCi0gKi8NCi12b2lkIERiaW5mbzo6ZXhlY0RCSU5GT19U UkFOU0lEX0FJKFNpZ25hbCogc2lnbmFsKQ0KLXsNCi0gIGphbUVudHJ5KCk7DQot ICBUcmFuc0lkQUkgKnRpZGFpPSAoVHJhbnNJZEFJKilzaWduYWwtPnRoZURhdGE7 DQotDQotICBpZighYXNzZW1ibGVGcmFnbWVudHMoc2lnbmFsKSl7DQotICAgIHJl dHVybjsNCi0gIH0NCi0NCi0gIGNvbnN0IFVpbnQzMiB0YWJsZUlkPSB0aWRhaS0+ dHJhbnNJZFswXTsNCi0gIGNvbnN0IGludCBuY29scyA9IG5kYmluZm9fdGFibGVz W3RhYmxlSWRdLT5uY29sczsNCi0NCi0gIFNlY3Rpb25IYW5kbGUgaGFuZGxlKHRo aXMsIHNpZ25hbCk7DQotICBTZWdtZW50ZWRTZWN0aW9uUHRyIHB0cjsNCi0gIGhh bmRsZS5nZXRTZWN0aW9uKHB0ciwgMCk7DQotDQotICBjaGFyIHJvd2J1ZlsxMDI0 XTsNCi0gIGNoYXIgKnJvdz0gcm93YnVmOw0KLSAgY29weSgoVWludDMyKilyb3di dWYsIHB0cik7DQotDQotICAvL1VpbnQzMiByb3dzej0gcHRyLnN6Ow0KLSAgaW50 IGxlbjsNCi0NCi0gIGZvcihpbnQgaT0wOyBpPG5jb2xzOyBpKyspDQotICB7DQot ICAgIGphbSgpOw0KLSAgICBBdHRyaWJ1dGVIZWFkZXIgYWgoKihVaW50MzIqKXJv dyk7DQotICAgIHJvdys9YWguZ2V0SGVhZGVyU2l6ZSgpKnNpemVvZihVaW50MzIp Ow0KLQ0KLSAgICBuZGJvdXQgPDwgIkFJICIgPDwgYWguZ2V0QXR0cmlidXRlSWQo KSA8PCAiICI7DQotICAgIGxlbj0gYWguZ2V0Qnl0ZVNpemUoKTsNCi0gICAgbmRi b3V0IDw8ICJ8fCIgPDwgbGVuIDw8ICJ8fCIgPDwgIiAiOw0KLSAgICBuZGJvdXQg PDwgIlRhYmxlICIgPDwgdGFibGVJZCA8PCAiIDo6OiAiOw0KLSAgICBzd2l0Y2go bmRiaW5mb190YWJsZXNbdGFibGVJZF0tPmNvbFtpXS5jb2x0eXBlKQ0KLSAgICB7 DQotICAgIGNhc2UgTkRCSU5GT19UWVBFX05VTUJFUjoNCi0gICAgICBqYW0oKTsN Ci0gICAgICBuZGJvdXQgPDwgKihVaW50MzIqKXJvdzsNCi0gICAgICByb3crPSBs ZW47DQotICAgICAgYnJlYWs7DQotICAgIGNhc2UgTkRCSU5GT19UWVBFX1NUUklO RzoNCi0gICAgICBqYW0oKTsNCi0gICAgICBjaGFyIGJbNTEyXTsNCi0gICAgICBt ZW1jcHkoYixyb3csbGVuKTsNCi0gICAgICBiW2xlbl09MDsNCi0gICAgICBuZGJv dXQgPDwgYjsNCi0gICAgICByb3crPSBsZW47DQotICAgICAgYnJlYWs7DQotICAg IGRlZmF1bHQ6DQotICAgICAgbmRiYXNzZXJ0KGZhbHNlKTsNCi0gICAgICBicmVh azsNCi0gICAgfTsNCi0gICAgbmRib3V0IDw8IGVuZGw7DQotICB9DQotICByZWxl YXNlU2VjdGlvbnMoaGFuZGxlKTsNCi19DQotDQogdm9pZCBEYmluZm86OmV4ZWNE VU1QX1NUQVRFX09SRChTaWduYWwqIHNpZ25hbCkNCiB7DQogICBqYW1FbnRyeSgp Ow0KQEAgLTE3NCwxMSArMTA5LDExIEBAIHZvaWQgRGJpbmZvOjpleGVjRFVNUF9T VEFURV9PUkQoU2lnbmFsKiANCiAgICAgamFtKCk7DQogICAgIG5kYm91dF9jKCIt LS0gQkVHSU4gTkRCJElORk8uVEFCTEVTIC0tLSIpOw0KICAgICBjaGFyIGNyZWF0 ZV9zcWxbNTEyXTsNCi0gICAgZm9yKFVpbnQzMiBpPTA7aTxudW1iZXJfbmRiaW5m b190YWJsZXM7aSsrKQ0KKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgTmRiaW5mbzo6 Z2V0TnVtVGFibGVzKCk7IGkrKykNCiAgICAgew0KLSAgICAgIG5kYmluZm9fY3Jl YXRlX3NxbChuZGJpbmZvX3RhYmxlc1tpXSwNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgY3JlYXRlX3NxbCwgc2l6ZW9mKGNyZWF0ZV9zcWwpKTsNCi0gICAgICBu ZGJvdXRfYygiJWQsJXMsJXMiLGksbmRiaW5mb190YWJsZXNbaV0tPm5hbWUsY3Jl YXRlX3NxbCk7DQorICAgICAgY29uc3QgTmRiaW5mbzo6VGFibGUmIHRhYiA9IE5k YmluZm86OmdldFRhYmxlKGkpOw0KKyAgICAgIE5kYmluZm86OmNyZWF0ZV9zcWwo dGFiLCBjcmVhdGVfc3FsLCBzaXplb2YoY3JlYXRlX3NxbCkpOw0KKyAgICAgIG5k Ym91dF9jKCIlZCwlcywlcyIsIGksIHRhYi5tLm5hbWUsIGNyZWF0ZV9zcWwpOw0K ICAgICB9DQogICAgIG5kYm91dF9jKCItLS0gRU5EIE5EQiRJTkZPLlRBQkxFUyAt LS0iKTsNCiAgICAgYnJlYWs7DQpAQCAtMTg2LDMzOSArMTIxLDMzNSBAQCB2b2lk IERiaW5mbzo6ZXhlY0RVTVBfU1RBVEVfT1JEKFNpZ25hbCogDQogICBjYXNlIER1 bXBTdGF0ZU9yZDo6RGJpbmZvTGlzdENvbHVtbnM6DQogICAgIGphbSgpOw0KICAg ICBuZGJvdXRfYygiLS0tIEJFR0lOIE5EQiRJTkZPLkNPTFVNTlMgLS0tIik7DQot ICAgIGZvcihVaW50MzIgaT0wO2k8bnVtYmVyX25kYmluZm9fdGFibGVzO2krKykN CisgICAgZm9yKGludCBpID0gMDsgaSA8IE5kYmluZm86OmdldE51bVRhYmxlcygp OyBpKyspDQogICAgIHsNCi0gICAgICBzdHJ1Y3QgbmRiaW5mb190YWJsZSAqdD0g bmRiaW5mb190YWJsZXNbaV07DQorICAgICAgY29uc3QgTmRiaW5mbzo6VGFibGUm IHRhYiA9IE5kYmluZm86OmdldFRhYmxlKGkpOw0KIA0KLSAgICAgIGZvcihpbnQg aj0wO2o8dC0+bmNvbHM7aisrKQ0KLSAgICAgICAgbmRib3V0X2MoIiVkLCVkLCVz LCVkIixpLGosdC0+Y29sW2pdLm5hbWUsdC0+Y29sW2pdLmNvbHR5cGUpOw0KKyAg ICAgIGZvcihpbnQgaiA9IDA7IGogPCB0YWIubS5uY29sczsgaisrKQ0KKyAgICAg ICAgbmRib3V0X2MoIiVkLCVkLCVzLCVkIiwgaSwgaiwNCisgICAgICAgICAgICAg ICAgIHRhYi5jb2xbal0ubmFtZSwgdGFiLmNvbFtqXS5jb2x0eXBlKTsNCiAgICAg fQ0KICAgICBuZGJvdXRfYygiLS0tIEVORCBOREIkSU5GTy5DT0xVTU5TIC0tLSIp Ow0KICAgICBicmVhazsNCiANCi0gIGNhc2UgRHVtcFN0YXRlT3JkOjpEYmluZm9T Y2FuVGFibGU6DQotICAgIGphbSgpOw0KLSAgICBjb25zdCBVaW50MzIgdGFibGVJ ZD0gc2lnbmFsLT50aGVEYXRhWzFdOw0KLQ0KLSAgICBEYmluZm9TY2FuUmVxICpy ZXEgPSAoRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KLSAgICByZXEt PnRhYmxlSWQ9IHRhYmxlSWQ7DQotICAgIHJlcS0+c2VuZGVyUmVmPSByZWZlcmVu Y2UoKTsNCi0gICAgcmVxLT5hcGlSZWY9IHJlZmVyZW5jZSgpOw0KLSAgICByZXEt PmFwaVR4bklkPSB0YWJsZUlkOw0KLSAgICByZXEtPnJlcXVlc3RJbmZvPSBEYmlu Zm9TY2FuUmVxOjpBbGxDb2x1bW5zIHwgRGJpbmZvU2NhblJlcTo6U3RhcnRTY2Fu Ow0KLSAgICByZXEtPmNvbEJpdG1hcExvPSB+MDsNCi0gICAgcmVxLT5jb2xCaXRt YXBIaT0gfjA7DQotICAgIHJlcS0+bWF4Um93cz0gMjsNCi0gICAgcmVxLT5tYXhC eXRlcz0gMDsNCi0gICAgcmVxLT5yb3dzX3RvdGFsPSAwOw0KLSAgICByZXEtPndv cmRfdG90YWw9IDA7DQotDQotICAgIG5kYm91dF9jKCJCRUdJTiBEQklORk8gRFVN UCBTQ0FOIG9uICV1Iix0YWJsZUlkKTsNCi0NCi0gICAgc2VuZFNpZ25hbChyZWZl cmVuY2UoKSwgR1NOX0RCSU5GT19TQ0FOUkVRLA0KLSAgICAgICAgICAgICAgIHNp Z25hbCwgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoLCBKQkIpOw0KLSAgICBi cmVhazsNCiAgIH07DQogfQ0KIA0KLXZvaWQgRGJpbmZvOjpleGVjREJJTkZPX1ND QU5SRVEoU2lnbmFsICpzaWduYWwpDQorVWludDMyIERiaW5mbzo6ZmluZF9uZXh0 X25vZGUoVWludDMyIG5vZGUpIGNvbnN0DQogew0KLSAgamFtRW50cnkoKTsNCi0g IERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhl RGF0YTsNCisgIG5vZGUrKzsNCisgIHdoaWxlKCFjX2FsaXZlTm9kZXMuZ2V0KG5v ZGUpICYmDQorICAgICAgICBub2RlIDwgTUFYX05EQl9OT0RFUykNCisgICAgIG5v ZGUrKzsNCiANCi0gIGNvbnN0IFVpbnQzMiB0YWJsZUlkPSByZXEudGFibGVJZDsN Ci0gIGNvbnN0IFVpbnQzMiBhcGlSZWY9IHJlcS5hcGlSZWY7DQotICBjb25zdCBV aW50MzIgc2VuZGVyUmVmPSByZXEuc2VuZGVyUmVmOw0KLSAgY29uc3QgVWludDMy IGFwaVR4bklkPSByZXEuYXBpVHhuSWQ7DQotICAvL2NvbnN0IFVpbnQzMiBjb2xC aXRtYXBMbz0gcmVxLmNvbEJpdG1hcExvOw0KLSAgLy9jb25zdCBVaW50MzIgY29s Qml0bWFwSGk9IHJlcS5jb2xCaXRtYXBIaTsNCi0gIC8vY29uc3QgVWludDMyIHJl cXVlc3RJbmZvPSByZXEucmVxdWVzdEluZm87DQorICBpZiAobm9kZSA9PSBNQVhf TkRCX05PREVTKQ0KKyAgICByZXR1cm4gMDsNCisgIHJldHVybiBub2RlOw0KK30N CiANCi0gIFVpbnQzMiBpOw0KLSAgaW50IGo7DQotICBpbnQgc3RhcnRpZD0gMDsN CitVaW50MzIgRGJpbmZvOjpmaW5kX25leHRfYmxvY2soVWludDMyIGJsb2NrKSBj b25zdA0KK3sNCisgIGludCBpID0gMDsNCisgIC8vIEZpbmQgY3VycmVudCBibG9j a3MgcG9zaXRpb24NCisgIHdoaWxlIChkYmluZm9fYmxvY2tzW2ldICE9IGJsb2Nr ICYmDQorICAgICAgICAgZGJpbmZvX2Jsb2Nrc1tpXSAhPSAwKQ0KKyAgICBpKys7 DQogDQotICBpbnQgc3RhcnRUYWJsZUlkLCBzdGFydENvbHVtbklkOw0KKyAgLy8g TWFrZSBzdXJlIGN1cnJlbnQgYmxvY2sgd2FzIGZvdW5kDQorICBuZGJyZXF1aXJl KGRiaW5mb19ibG9ja3NbaV0pOw0KIA0KLSAgaW50IGNvbnRpbnVlX3NlbmRpbmc7 DQorICAvLyBSZXR1cm4gdGhlIG5leHQgYmxvY2sod2hpY2ggbWlnaHQgYmUgMCkN CisgIHJldHVybiBkYmluZm9fYmxvY2tzWysraV07DQorfQ0KIA0KLSAgY2hhciBi dWZbMTAyNF07DQotICBzdHJ1Y3QgZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRi aW5mb19yYXRlbGltaXQgcmw7DQorYm9vbCBEYmluZm86OmZpbmRfbmV4dChOZGJp bmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IpIGNvbnN0DQorew0KKyAgVWludDMyIG5v ZGUgPSByZWZUb05vZGUoY3Vyc29yLT5jdXJyUmVmKTsNCisgIFVpbnQzMiBibG9j ayA9IHJlZlRvQmxvY2soY3Vyc29yLT5jdXJyUmVmKTsNCisgIGNvbnN0IFVpbnQz MiBpbnN0YW5jZSA9IHJlZlRvSW5zdGFuY2UoY3Vyc29yLT5jdXJyUmVmKTsNCisg IG5kYnJlcXVpcmUoaW5zdGFuY2UgPT0gMCk7DQogDQotICBzd2l0Y2gocmVxLnRh YmxlSWQpDQorICBpZiAoYmxvY2spDQogICB7DQotICBjYXNlIE5EQklORk9fVEFC TEVTX1RBQkxFSUQ6DQogICAgIGphbSgpOw0KLQ0KLSAgICBjaGFyIGNyZWF0ZV9z cWxbNTEyXTsNCi0NCi0gICAgZGJpbmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJl cSk7DQotDQotICAgIGlmKCEocmVxLnJlcXVlc3RJbmZvICYgRGJpbmZvU2NhblJl cTo6U3RhcnRTY2FuKSkNCisgICAgaWYgKGJsb2NrID09IERCSU5GTykNCiAgICAg ew0KICAgICAgIGphbSgpOw0KLSAgICAgIHN0YXJ0aWQ9IHJlcS5jdXJzb3IuY3Vy X2l0ZW07DQotICAgIH0NCiANCi0gICAgZm9yKGk9c3RhcnRpZDtkYmluZm9fcmF0 ZWxpbWl0X2NvbnRpbnVlKCZybCkgJiYgaTxudW1iZXJfbmRiaW5mb190YWJsZXM7 aSsrKQ0KLSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBuZGJpbmZv X2NyZWF0ZV9zcWwobmRiaW5mb190YWJsZXNbaV0sDQotICAgICAgICAgICAgICAg ICAgICAgICAgIGNyZWF0ZV9zcWwsIHNpemVvZihjcmVhdGVfc3FsKSk7DQotDQot ICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBpKTsNCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgbmRiaW5mb190YWJsZXNb aV0tPm5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVu KG5kYmluZm9fdGFibGVzW2ldLT5uYW1lKSsxKTsNCi0gICAgICBkYmluZm9fd3Jp dGVfcm93X2NvbHVtbigmciwgY3JlYXRlX3NxbCwgc3RybGVuKGNyZWF0ZV9zcWwp KzEpOw0KKyAgICAgIC8vIFN0YXJ0aW5nIHNjYW4gb24gdGhpcyBub2RlDQorICAg ICAgbmRicmVxdWlyZShub2RlID09IGdldE93bk5vZGVJZCgpKTsNCiANCi0gICAg ICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLHIscmwsYXBpVHhuSWQsYXBpUmVmKTsN CisgICAgICAvLyBTdGFydCBvbiBmaXJzdCBibG9jaw0KKyAgICAgIGN1cnNvci0+ Y3VyclJlZiA9IG51bWJlclRvUmVmKGRiaW5mb19ibG9ja3NbMF0sIG5vZGUpOw0K KyAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQogDQotICAgIGlmKCFkYmluZm9f cmF0ZWxpbWl0X2NvbnRpbnVlKCZybCkgJiYgaSA8IG51bWJlcl9uZGJpbmZvX3Rh YmxlcykNCisgICAgLy8gRmluZCBuZXh0IGJsb2NrDQorICAgIGJsb2NrID0gZmlu ZF9uZXh0X2Jsb2NrKGJsb2NrKTsNCisgICAgaWYgKGJsb2NrKQ0KICAgICB7DQog ICAgICAgamFtKCk7DQotICAgICAgZGJpbmZvX3JhdGVsaW1pdF9zZW5kY29uZihz aWduYWwscmVxLHJsLGkpOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAg ICAgIGphbSgpOw0KLSAgICAgIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZv U2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gICAgICBjb25m LT50YWJsZUlkPSByZXEudGFibGVJZDsNCi0gICAgICBjb25mLT5zZW5kZXJSZWY9 IHJlcS5zZW5kZXJSZWY7DQotICAgICAgY29uZi0+YXBpVHhuSWQ9IHJlcS5hcGlU eG5JZDsNCi0gICAgICBjb25mLT5yZXF1ZXN0SW5mbz0gMDsNCi0gICAgICBzZW5k U2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNpZ25h bCwNCi0gICAgICAgICAgICAgICAgIERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5n dGgsIEpCQik7DQorICAgICAgY3Vyc29yLT5jdXJyUmVmID0gbnVtYmVyVG9SZWYo YmxvY2ssIG5vZGUpOw0KKyAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQorICB9 DQogDQotICAgIGJyZWFrOw0KKyAgbm9kZSA9IGZpbmRfbmV4dF9ub2RlKG5vZGUp Ow0KKyAgaWYgKG5vZGUpDQorICB7DQorICAgIGphbSgpOw0KKyAgICBibG9jayA9 IERCSU5GTzsNCisgICAgY3Vyc29yLT5jdXJyUmVmID0gbnVtYmVyVG9SZWYoYmxv Y2ssIG5vZGUpOw0KKyAgICByZXR1cm4gdHJ1ZTsNCisgIH0NCiANCi0gIGNhc2Ug TkRCSU5GT19DT0xVTU5TX1RBQkxFSUQ6DQorICAvLyBObyBtb3JlIG5vZGVzIC0+ IGRvbmUNCisgIGN1cnNvci0+Y3VyclJlZiA9IDA7DQorICByZXR1cm4gZmFsc2U7 DQorfQ0KKw0KK3ZvaWQgRGJpbmZvOjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFs ICpzaWduYWwpDQorew0KKyAgamFtRW50cnkoKTsNCisgIERiaW5mb1NjYW5SZXEq IHJlcV9wdHIgPSAoRGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyU2Vu ZCgpOw0KKyAgY29uc3QgVWludDMyIHNlbmRlclJlZiA9IHNpZ25hbC0+aGVhZGVy LnRoZVNlbmRlcnNCbG9ja1JlZjsNCisNCisgIC8vIENvcHkgc2lnbmFsIG9uIHN0 YWNrDQorICBEYmluZm9TY2FuUmVxIHJlcSA9ICpyZXFfcHRyOw0KKw0KKyAgY29u c3QgVWludDMyIHJlc3VsdERhdGEgPSByZXEucmVzdWx0RGF0YTsNCisgIGNvbnN0 IFVpbnQzMiB0cmFuc0lkMCA9IHJlcS50cmFuc0lkWzBdOw0KKyAgY29uc3QgVWlu dDMyIHRyYW5zSWQxID0gcmVxLnRyYW5zSWRbMV07DQorICBjb25zdCBVaW50MzIg cmVzdWx0UmVmID0gcmVxLnJlc3VsdFJlZjsNCisNCisgIC8vIFZhbGlkYXRlIHRh YmxlSWQNCisgIGNvbnN0IFVpbnQzMiB0YWJsZUlkID0gcmVxLnRhYmxlSWQ7DQor ICBpZiAodGFibGVJZCA+PSBOZGJpbmZvOjpnZXROdW1UYWJsZXMoKSkNCisgIHsN CisgICAgamFtKCk7DQorICAgIERiaW5mb1NjYW5SZWYgKnJlZj0gKERiaW5mb1Nj YW5SZWYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCisgICAgcmVmLT5yZXN1 bHREYXRhID0gcmVzdWx0RGF0YTsNCisgICAgcmVmLT50cmFuc0lkWzBdID0gdHJh bnNJZDA7DQorICAgIHJlZi0+dHJhbnNJZFsxXSA9IHRyYW5zSWQxOw0KKyAgICBy ZWYtPnJlc3VsdFJlZiA9IHJlc3VsdFJlZjsNCisgICAgcmVmLT5lcnJvckNvZGU9 IERiaW5mb1NjYW5SZWY6Ok5vVGFibGU7DQorICAgIHNlbmRTaWduYWwoc2VuZGVy UmVmLCBHU05fREJJTkZPX1NDQU5SRUYsIHNpZ25hbCwNCisgICAgICAgICAgICAg ICBEYmluZm9TY2FuUmVmOjpTaWduYWxMZW5ndGgsIEpCQik7DQorICAgIHJldHVy bjsNCisgIH0NCisNCisgIC8vIFRPRE8gQ2hlY2sgYWxsIHNjYW4gcGFyYW1ldGVy cw0KKw0KKyAgTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5k YmluZm86OlNjYW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVx KTsNCisgIFVpbnQzMiBzaWduYWxfbGVuZ3RoID0gc2lnbmFsLT5nZXRMZW5ndGgo KTsNCisgIGlmIChzaWduYWxfbGVuZ3RoID09IERiaW5mb1NjYW5SZXE6OlNpZ25h bExlbmd0aCkNCisgIHsNCisgICAgLy8gSW5pdGlhbGl6ZSBjdXJzb3INCiAgICAg amFtKCk7DQorICAgIGN1cnNvci0+c2VuZGVyUmVmID0gc2VuZGVyUmVmOw0KKyAg ICBjdXJzb3ItPnNhdmVTZW5kZXJSZWYgPSAwOw0KKyAgICBjdXJzb3ItPmN1cnJS ZWYgPSAwOw0KKyAgICBjdXJzb3ItPnNhdmVDdXJyUmVmID0gMDsNCisgICAgLy8g UmVzZXQgYWxsIGRhdGEgaG9sZGVycw0KKyAgICBtZW1zZXQoY3Vyc29yLT5kYXRh LCAwLCBzaXplb2YoY3Vyc29yLT5kYXRhKSk7DQorICAgIGN1cnNvci0+ZmxhZ3Mg PSAwOw0KKyAgICBjdXJzb3ItPnRvdGFsUm93cyA9IDA7DQorICAgIGN1cnNvci0+ dG90YWxCeXRlcyA9IDA7DQorICAgIHJlcS5jdXJzb3Jfc3ogPSBOZGJpbmZvOjpT Y2FuQ3Vyc29yOjpMZW5ndGg7DQorICAgIHNpZ25hbF9sZW5ndGggKz0gcmVxLmN1 cnNvcl9zejsNCisgIH0NCisgIG5kYnJlcXVpcmUoc2lnbmFsX2xlbmd0aCA9PQ0K KyAgICAgICAgICAgICBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGggKyBOZGJp bmZvOjpTY2FuQ3Vyc29yOjpMZW5ndGgpOw0KKyAgbmRicmVxdWlyZShyZXEuY3Vy c29yX3N6ID09IE5kYmluZm86OlNjYW5DdXJzb3I6Okxlbmd0aCk7DQogDQotICAg IHN0YXJ0VGFibGVJZD0gMDsNCi0gICAgc3RhcnRDb2x1bW5JZD0gMDsNCisgIHN3 aXRjaCh0YWJsZUlkKQ0KKyAgew0KKyAgY2FzZSBOZGJpbmZvOjpUQUJMRVNfVEFC TEVJRDoNCisgIHsNCisgICAgamFtKCk7DQogDQotICAgIGlmKCEocmVxLnJlcXVl c3RJbmZvICYgRGJpbmZvU2NhblJlcTo6U3RhcnRTY2FuKSkNCisgICAgTmRiaW5m bzo6UmF0ZWxpbWl0IHJsOw0KKyAgICBjaGFyIGNyZWF0ZV9zcWxbNTEyXTsNCisg ICAgVWludDMyIHRhYmxlSWQgPSBjdXJzb3ItPmRhdGFbMF07DQorDQorICAgIHdo aWxlKHRhYmxlSWQgPCBOZGJpbmZvOjpnZXROdW1UYWJsZXMoKSkNCiAgICAgew0K ICAgICAgIGphbSgpOw0KLSAgICAgIHN0YXJ0VGFibGVJZD0gcmVxLmN1cnNvci5j dXJfaXRlbSA+PiA4Ow0KLSAgICAgIHN0YXJ0Q29sdW1uSWQ9IHJlcS5jdXJzb3Iu Y3VyX2l0ZW0gJiAweEZGOw0KKyAgICAgIGNvbnN0IE5kYmluZm86OlRhYmxlJiB0 YWIgPSBOZGJpbmZvOjpnZXRUYWJsZSh0YWJsZUlkKTsNCisgICAgICBOZGJpbmZv OjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgICBOZGJpbmZvOjpjcmVhdGVf c3FsKHRhYiwgY3JlYXRlX3NxbCwgc2l6ZW9mKGNyZWF0ZV9zcWwpKTsNCisgICAg ICByb3cud3JpdGVfdWludDMyKHRhYmxlSWQpOw0KKyAgICAgIHJvdy53cml0ZV9z dHJpbmcodGFiLm0ubmFtZSk7DQorICAgICAgcm93LndyaXRlX3N0cmluZyhjcmVh dGVfc3FsKTsNCisgICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCBy b3csIHJsKTsNCisNCisgICAgICB0YWJsZUlkKys7DQorDQorICAgICAgaWYgKHJs Lm5lZWRfYnJlYWsocmVxKSkNCisgICAgICB7DQorICAgICAgICBqYW0oKTsNCisg ICAgICAgIG5kYmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwg dGFibGVJZCk7DQorICAgICAgICByZXR1cm47DQorICAgICAgfQ0KICAgICB9DQog DQotICAgIHN0cnVjdCBuZGJpbmZvX3RhYmxlICp0Ow0KKyAgICAvLyBBbGwgdGFi bGVzIHNlbnQNCisgICAgcmVxLmN1cnNvcl9zeiA9IDA7IC8vIENsb3NlIGN1cnNv cg0KKyAgICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7 DQorICAgIHJldHVybjsNCisNCisgICAgYnJlYWs7DQorICB9DQogDQotICAgIGRi aW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KKyAgY2FzZSBOZGJpbmZv OjpDT0xVTU5TX1RBQkxFSUQ6DQorICB7DQorICAgIGphbSgpOw0KIA0KLSAgICBj b250aW51ZV9zZW5kaW5nPSAxOw0KKyAgICBOZGJpbmZvOjpSYXRlbGltaXQgcmw7 DQorICAgIFVpbnQzMiB0YWJsZUlkID0gY3Vyc29yLT5kYXRhWzBdOw0KKyAgICBV aW50MzIgY29sdW1uSWQgPSBjdXJzb3ItPmRhdGFbMV07DQogDQotICAgIGZvcihp PXN0YXJ0VGFibGVJZDsgY29udGludWVfc2VuZGluZyAmJiBpPG51bWJlcl9uZGJp bmZvX3RhYmxlczsgaSsrKQ0KKyAgICB3aGlsZSh0YWJsZUlkIDwgTmRiaW5mbzo6 Z2V0TnVtVGFibGVzKCkpDQogICAgIHsNCiAgICAgICBqYW0oKTsNCi0gICAgICB0 PSBuZGJpbmZvX3RhYmxlc1tpXTsNCi0NCi0gICAgICBmb3Ioaj1zdGFydENvbHVt bklkOyBjb250aW51ZV9zZW5kaW5nICYmIGo8dC0+bmNvbHM7aisrKQ0KKyAgICAg IGNvbnN0IE5kYmluZm86OlRhYmxlJiB0YWIgPSBOZGJpbmZvOjpnZXRUYWJsZSh0 YWJsZUlkKTsNCisgICAgICB3aGlsZShjb2x1bW5JZCA8IHRhYi5tLm5jb2xzKQ0K ICAgICAgIHsNCiAgICAgICAgIGphbSgpOw0KLSAgICAgICAgZGJpbmZvX3dyaXRl X3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICAgIGRiaW5m b193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgaSk7DQotICAgICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGopOw0KLSAgICAgICAgZGJp bmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIHQtPmNvbFtqXS5uYW1lLCBzdHJsZW4o dC0+Y29sW2pdLm5hbWUpKzEpOw0KLSAgICAgICAgY29uc3QgY2hhciogY29sdHlw ZV9uYW1lPSBuZGJpbmZvX2NvbHR5cGVfdG9fc3RyaW5nKHQtPmNvbFtqXS5jb2x0 eXBlKTsNCi0gICAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBjb2x0 eXBlX25hbWUsIHN0cmxlbihjb2x0eXBlX25hbWUpKzEpOw0KLSAgICAgICAgZGJp bmZvX3NlbmRfcm93KHNpZ25hbCxyLHJsLCBhcGlUeG5JZCxhcGlSZWYpOw0KKyAg ICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWwsIHJlcSk7DQorICAgICAgICBy b3cud3JpdGVfdWludDMyKHRhYmxlSWQpOw0KKyAgICAgICAgcm93LndyaXRlX3Vp bnQzMihjb2x1bW5JZCk7DQorICAgICAgICByb3cud3JpdGVfc3RyaW5nKHRhYi5j b2xbY29sdW1uSWRdLm5hbWUpOw0KKyAgICAgICAgcm93LndyaXRlX3N0cmluZyhO ZGJpbmZvOjpjb2x0eXBlX3RvX3N0cmluZyh0YWIuY29sW2NvbHVtbklkXS5jb2x0 eXBlKSk7DQorICAgICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCBy b3csIHJsKTsNCiANCi0gICAgICAgIGNvbnRpbnVlX3NlbmRpbmc9IGRiaW5mb19y YXRlbGltaXRfY29udGludWUoJnJsKTsNCisgICAgICAgIGFzc2VydChjb2x1bW5J ZCA8IDI1Nik7DQorICAgICAgICBjb2x1bW5JZCsrOw0KKw0KKyAgICAgICAgaWYo cmwubmVlZF9icmVhayhyZXEpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBqYW0o KTsNCisgICAgICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFsLCBy ZXEsIHJsLCB0YWJsZUlkLCBjb2x1bW5JZCk7DQorICAgICAgICAgIHJldHVybjsN CisgICAgICAgIH0NCiAgICAgICB9DQotICAgICAgc3RhcnRDb2x1bW5JZD0gMDsN CisgICAgICBjb2x1bW5JZCA9IDA7DQorICAgICAgdGFibGVJZCsrOw0KICAgICB9 DQogDQotICAgIGlmKChpIDwgbnVtYmVyX25kYmluZm9fdGFibGVzIHx8IGogPCB0 LT5uY29scykpDQotICAgIHsNCi0gICAgICBqYW0oKTsNCi0gICAgICBpLS07DQot ICAgICAgZGJpbmZvX3JhdGVsaW1pdF9zZW5kY29uZihzaWduYWwsIHJlcSwgcmws IChpIDw8IDgpIHwgaik7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAg ICAgamFtKCk7DQotICAgICAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9T Y2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgICAgIGNvbmYt PnRhYmxlSWQ9IHJlcS50YWJsZUlkOw0KLSAgICAgIGNvbmYtPnNlbmRlclJlZj0g cmVxLnNlbmRlclJlZjsNCi0gICAgICBjb25mLT5hcGlUeG5JZD0gcmVxLmFwaVR4 bklkOw0KLSAgICAgIGNvbmYtPnJlcXVlc3RJbmZvPSAwOw0KLSAgICAgIHNlbmRT aWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFs LA0KLSAgICAgICAgICAgICAgICAgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0 aCwgSkJCKTsNCi0gICAgfQ0KKyAgICAvLyBBbGwgdGFibGVzIGFuZCBjb2x1bW5z IHNlbnQNCisgICAgcmVxLmN1cnNvcl9zeiA9IDA7IC8vIENsb3NlIGN1cnNvcg0K KyAgICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQog DQogICAgIGJyZWFrOw0KKyAgfQ0KIA0KICAgZGVmYXVsdDoNCisgIHsNCiAgICAg amFtKCk7DQogDQotICAgIGlmKHRhYmxlSWQgPiBudW1iZXJfbmRiaW5mb190YWJs ZXMpDQotICAgIHsNCi0gICAgICBqYW0oKTsNCi0gICAgICBEYmluZm9TY2FuUmVm ICpyZWY9IChEYmluZm9TY2FuUmVmKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7 DQotICAgICAgcmVmLT50YWJsZUlkPSB0YWJsZUlkOw0KLSAgICAgIHJlZi0+YXBp VHhuSWQ9IGFwaVR4bklkOw0KLSAgICAgIHJlZi0+ZXJyb3JDb2RlPSBEYmluZm9T Y2FuUmVmOjpOb1RhYmxlOw0KLSAgICAgIHNlbmRTaWduYWwoc2VuZGVyUmVmLCBH U05fREJJTkZPX1NDQU5SRUYsIHNpZ25hbCwNCi0gICAgICAgICAgICAgICAgIERi aW5mb1NjYW5SZWY6OlNpZ25hbExlbmd0aCwgSkJCKTsNCi0gICAgICBicmVhazsN Ci0gICAgfQ0KLQ0KICAgICBuZGJhc3NlcnQodGFibGVJZCA+IDEpOw0KIA0KLSAg ICBpZihzaWduYWwtPmdldExlbmd0aCgpID09IERiaW5mb1NjYW5SZXE6OlNpZ25h bExlbmd0aCkNCi0gICAgew0KLSAgICAgIC8qDQotICAgICAgICogV2UndmUgZ290 dGVuIGEgcmVxdWVzdCBmcm9tIGFwcGxpY2F0aW9uLCBmaXJzdA0KLSAgICAgICAq IFNjYW5SZXEgc2lnbmFsLiBzdGFydCBmcm9tIGJlZ2lubmluZw0KLSAgICAgICAq Lw0KKyAgICAvL3ByaW50U2lnbmFsSGVhZGVyKHN0ZG91dCwgc2lnbmFsLT5oZWFk ZXIsIDk5LCA5OCwgdHJ1ZSk7DQorICAgIC8vcHJpbnREQklORk9fU0NBTihzdGRv dXQsIHNpZ25hbC0+dGhlRGF0YSwgc2lnbmFsLT5nZXRMZW5ndGgoKSwgMCk7DQog DQorICAgIGlmIChOZGJpbmZvOjpTY2FuQ3Vyc29yOjpnZXRIYXNNb3JlRGF0YShj dXJzb3ItPmZsYWdzKSB8fA0KKyAgICAgICAgZmluZF9uZXh0KGN1cnNvcikpDQor ICAgIHsNCiAgICAgICBqYW0oKTsNCisgICAgICBuZGJyZXF1aXJlKGN1cnNvci0+ Y3VyclJlZik7DQogDQotICAgICAgRGJpbmZvU2NhblJlcSBpcmVxPSAqKERiaW5m b1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0gICAgICBEYmluZm9TY2FuUmVx ICpvcmVxPSAoRGJpbmZvU2NhblJlcSopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgp Ow0KKyAgICAgIC8vIENPTkYgb3IgUkVGIHNob3VsZCBiZSBzZW50IGJhY2sgaGVy ZQ0KKyAgICAgIGN1cnNvci0+c2VuZGVyUmVmID0gcmVmZXJlbmNlKCk7DQogDQot ICAgICAgbWVtY3B5KHNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKSwmaXJlcSxEYmlu Zm9TY2FuUmVxOjpTaWduYWxMZW5ndGgqc2l6ZW9mKFVpbnQzMikpOw0KLSAgICAg IG9yZXEtPnNlbmRlclJlZj0gcmVmZXJlbmNlKCk7DQotICAgICAgb3JlcS0+Y3Vy c29yLmN1cl9yZXF1ZXN0SW5mbz0gMDsNCi0gICAgICBvcmVxLT5jdXJzb3IuY3Vy X25vZGU9IDA7DQotICAgICAgb3JlcS0+Y3Vyc29yLmN1cl9ibG9jaz0gREJJTkZP Ow0KLSAgICAgIG9yZXEtPmN1cnNvci5jdXJfaXRlbT0gMDsNCi0NCi0gICAgICBm b3Iob3JlcS0+Y3Vyc29yLmN1cl9ub2RlPSAwOw0KLSAgICAgICAgICAhY19hbGl2 ZU5vZGVzLmdldChvcmVxLT5jdXJzb3IuY3VyX25vZGUpOw0KLSAgICAgICAgICBv cmVxLT5jdXJzb3IuY3VyX25vZGUrKykNCi0gICAgICAgIDsNCi0NCi0gICAgICBz ZW5kU2lnbmFsKG51bWJlclRvUmVmKERCSU5GTyxvcmVxLT5jdXJzb3IuY3VyX25v ZGUpLCBHU05fREJJTkZPX1NDQU5SRVEsDQotICAgICAgICAgICAgICAgICBzaWdu YWwsIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7 DQorICAgICAgLy8gU2VuZCBTQ0FOUkVRDQorICAgICAgTUVNQ09QWV9OT19XT1JE UyhyZXFfcHRyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgJnJlcSwgc2lnbmFs X2xlbmd0aCk7DQorICAgICAgc2VuZFNpZ25hbChjdXJzb3ItPmN1cnJSZWYsDQor ICAgICAgICAgICAgICAgICBHU05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAg ICAgICAgICBzaWduYWwsIHNpZ25hbF9sZW5ndGgsIEpCQik7DQogICAgIH0NCiAg ICAgZWxzZQ0KICAgICB7DQotICAgICAgLyoqDQotICAgICAgICogV2UgaGF2ZSBh IGN1cnNvciwgc28gd2UgbmVlZCB0byBjb250aW51ZSBzY2FubmluZy4NCi0gICAg ICAgKi8NCisgICAgICAvLyBTY2FuIGlzIGRvbmUsIHNlbmQgU0NBTkNPTkYgYmFj ayB0byBjYWxsZXINCiAgICAgICBqYW0oKTsNCi0gICAgICBpbnQgbmV4dF9kYmlu Zm9fYmxvY2s9IDA7DQotICAgICAgaWYocmVxLmN1cnNvci5jdXJfYmxvY2sgIT0g REJJTkZPKQ0KLSAgICAgIHsNCi0gICAgICAgIHdoaWxlKGRiaW5mb19ibG9ja3Nb bmV4dF9kYmluZm9fYmxvY2tdICE9IHJlcS5jdXJzb3IuY3VyX2Jsb2NrDQotICAg ICAgICAgICAgJiYgZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja10gIT0g MCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgamFtKCk7DQotICAgICAgICAgIG5l eHRfZGJpbmZvX2Jsb2NrKys7DQotICAgICAgICB9DQotICAgICAgfQ0KLQ0KLSAg ICAgIERiaW5mb1NjYW5SZXEgaXJlcT0gKihEYmluZm9TY2FuUmVxKilzaWduYWwt PnRoZURhdGE7DQotICAgICAgRGJpbmZvU2NhblJlcSAqb3JlcT0gKERiaW5mb1Nj YW5SZXEqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0NCi0gICAgICBtZW1j cHkoc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpLCZpcmVxLHNpZ25hbC0+Z2V0TGVu Z3RoKCkqc2l6ZW9mKFVpbnQzMikpOw0KLSAgICAgIG9yZXEtPnNlbmRlclJlZj0g cmVmZXJlbmNlKCk7IC8vbWFydHkNCi0gICAgICBvcmVxLT5jdXJzb3IuY3VyX2Js b2NrPSBkYmluZm9fYmxvY2tzW25leHRfZGJpbmZvX2Jsb2NrXTsNCi0NCi0gICAg ICBzZW5kU2lnbmFsKG51bWJlclRvUmVmKG9yZXEtPmN1cnNvci5jdXJfYmxvY2ss IG9yZXEtPmN1cnNvci5jdXJfbm9kZSksDQotICAgICAgICAgICAgICAgICBHU05f REJJTkZPX1NDQU5SRVEsDQotICAgICAgICAgICAgICAgICBzaWduYWwsIHNpZ25h bC0+Z2V0TGVuZ3RoKCksIEpCQik7DQorICAgICAgRGJpbmZvU2NhbkNvbmYgKmFw aWNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgp Ow0KKyAgICAgIE1FTUNPUFlfTk9fV09SRFMoYXBpY29uZiwgJnJlcSwgRGJpbmZv U2NhbkNvbmY6OlNpZ25hbExlbmd0aCk7DQorICAgICAgLy8gU2V0IGN1cnNvcl9z eiBiYWNrIHRvIDAgdG8gaW5kaWNhdGUgZW5kIG9mIHNjYW4NCisgICAgICBhcGlj b25mLT5jdXJzb3Jfc3ogPSAwOw0KKyAgICAgIHNlbmRTaWduYWwocmVzdWx0UmVm LCBHU05fREJJTkZPX1NDQU5DT05GLCBzaWduYWwsDQorICAgICAgICAgICAgICAg ICBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoLCBKQkIpOw0KICAgICB9DQog ICAgIGJyZWFrOw0KLSAgfTsNCisgIH0NCisgIH0NCiB9DQogDQogdm9pZCBEYmlu Zm86OmV4ZWNEQklORk9fU0NBTkNPTkYoU2lnbmFsICpzaWduYWwpDQogew0KLSAg RGJpbmZvU2NhbkNvbmYgY29uZj0gKihEYmluZm9TY2FuQ29uZiopc2lnbmFsLT50 aGVEYXRhOw0KKyAgY29uc3QgRGJpbmZvU2NhbkNvbmYqIGNvbmZfcHRyPSAoY29u c3QgRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0cigpOw0KKyAgLy8g Q29weSBzaWduYWwgb24gc3RhY2sNCisgIGNvbnN0IERiaW5mb1NjYW5Db25mIGNv bmY9ICpjb25mX3B0cjsNCiANCiAgIGphbUVudHJ5KCk7DQogDQotICBjb25zdCBV aW50MzIgdGFibGVJZD0gY29uZi50YWJsZUlkOw0KLSAgY29uc3QgVWludDMyIHNl bmRlclJlZj0gY29uZi5zZW5kZXJSZWY7DQotICBjb25zdCBVaW50MzIgYXBpUmVm PSBjb25mLmFwaVJlZjsNCi0gIGNvbnN0IFVpbnQzMiBhcGlUeG5JZD0gY29uZi5h cGlUeG5JZDsNCi0gIC8vY29uc3QgVWludDMyIGNvbEJpdG1hcExvPSBjb25mLmNv bEJpdG1hcExvOw0KLSAgLy9jb25zdCBVaW50MzIgY29sQml0bWFwSGk9IGNvbmYu Y29sQml0bWFwSGk7DQorICAvL3ByaW50REJJTkZPX1NDQU4oc3Rkb3V0LCBzaWdu YWwtPnRoZURhdGEsIHNpZ25hbC0+Z2V0TGVuZ3RoKCksIDApOw0KIA0KLSAgRGJp bmZvU2NhblJlcSAqb3JlcT0gKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+Z2V0RGF0 YVB0clNlbmQoKTsNCisgIFVpbnQzMiBzaWduYWxfbGVuZ3RoID0gc2lnbmFsLT5n ZXRMZW5ndGgoKTsNCisgIG5kYnJlcXVpcmUoc2lnbmFsX2xlbmd0aCA9PQ0KKyAg ICAgICAgICAgICBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGgrTmRiaW5mbzo6 U2NhbkN1cnNvcjo6TGVuZ3RoKTsNCisgIG5kYnJlcXVpcmUoY29uZi5jdXJzb3Jf c3ogPT0gTmRiaW5mbzo6U2NhbkN1cnNvcjo6TGVuZ3RoKTsNCiANCi0gIG1lbWNw eShzaWduYWwtPmdldERhdGFQdHJTZW5kKCksJmNvbmYsc2lnbmFsLT5nZXRMZW5n dGgoKSpzaXplb2YoVWludDMyKSk7DQorICAvLyBWYWxpZGF0ZSB0YWJsZUlkDQor ICBjb25zdCBVaW50MzIgdGFibGVJZD0gY29uZi50YWJsZUlkOw0KKyAgbmRiYXNz ZXJ0KHRhYmxlSWQgPCBOZGJpbmZvOjpnZXROdW1UYWJsZXMoKSk7DQogDQotICBp Zihjb25mLnJlcXVlc3RJbmZvICYgRGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRhKQ0K LSAgew0KLSAgICAvKg0KLSAgICAgKiBDb250aW51ZSBhIERVTVAgc2NhbiBvZiBE QklORk8gdGFibGUgKGhpdCBtYXhyb3dzL21heGJ5dGVzKQ0KLSAgICAgKi8NCi0g ICAgamFtKCk7DQotICAgIG9yZXEtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2Nh blJlcTo6U3RhcnRTY2FuKTsNCi0gICAgc2VuZFNpZ25hbChudW1iZXJUb1JlZihv cmVxLT5jdXJzb3IuY3VyX2Jsb2NrLCBvcmVxLT5jdXJzb3IuY3VyX25vZGUpLA0K LSAgICAgICAgICAgICAgIEdTTl9EQklORk9fU0NBTlJFUSwNCi0gICAgICAgICAg ICAgICBzaWduYWwsIHNpZ25hbC0+Z2V0TGVuZ3RoKCksIEpCQik7DQotICAgIHJl dHVybjsNCi0gIH0NCisgIGNvbnN0IFVpbnQzMiByZXN1bHRSZWYgPSBjb25mLnJl c3VsdFJlZjsNCiANCi0gIGludCBuZXh0X2RiaW5mb19ibG9jaz0gMDsNCisgIC8v IENvcHkgY3Vyc29yIG9uIHN0YWNrDQorICBuZGJyZXF1aXJlKGNvbmYuY3Vyc29y X3N6KTsNCisgIE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChO ZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJmNv bmYpOw0KIA0KLSAgaWYoc2lnbmFsLT5nZXRMZW5ndGgoKSA9PSBEYmluZm9TY2Fu Q29uZjo6RG9uZUxlbmd0aCkgLy8gd2UgaGF2ZSB0aGUgQUNLIGZyb20gYSBEVU1Q IGluaXRpYXRlZCBzY2FuDQorICBpZiAoTmRiaW5mbzo6U2NhbkN1cnNvcjo6Z2V0 SGFzTW9yZURhdGEoY3Vyc29yLT5mbGFncykgfHwgY29uZi5yZXR1cm5lZFJvd3Mp DQogICB7DQorICAgIC8vIFJhdGUgbGltaXQgYnJlYWssIHBhc3MgdGhyb3VnaCB0 byBBUEkNCiAgICAgamFtKCk7DQotICAgIG5kYm91dF9jKCJGSU5JU0hFRCBEQklO Rk8gRFVNUCBTY2FuIG9uICV1IixzaWduYWwtPnRoZURhdGFbMF0pOw0KKyAgICBu ZGJyZXF1aXJlKGN1cnNvci0+Y3VyclJlZik7DQorICAgIERiaW5mb1NjYW5Db25m ICphcGljb25mID0gKERiaW5mb1NjYW5Db25mKikgc2lnbmFsLT5nZXREYXRhUHRy U2VuZCgpOw0KKyAgICBNRU1DT1BZX05PX1dPUkRTKGFwaWNvbmYsICZjb25mLCBz aWduYWxfbGVuZ3RoKTsNCisgICAgc2VuZFNpZ25hbChyZXN1bHRSZWYsIEdTTl9E QklORk9fU0NBTkNPTkYsIHNpZ25hbCwgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCiAg ICAgcmV0dXJuOw0KICAgfQ0KIA0KLSAgaWYoY29uZi5jdXJzb3IuY3VyX2Jsb2Nr ICE9IERCSU5GTykNCisgIGlmIChmaW5kX25leHQoY3Vyc29yKSkNCiAgIHsNCiAg ICAgamFtKCk7DQotICAgIHdoaWxlKGRiaW5mb19ibG9ja3NbbmV4dF9kYmluZm9f YmxvY2tdICE9IGNvbmYuY3Vyc29yLmN1cl9ibG9jaw0KLSAgICAgICAgICAmJiBk YmluZm9fYmxvY2tzW25leHRfZGJpbmZvX2Jsb2NrXSAhPSAwKQ0KLSAgICB7DQot ICAgICAgamFtKCk7DQotICAgICAgbmV4dF9kYmluZm9fYmxvY2srKzsNCi0gICAg fQ0KLSAgfQ0KKyAgICBuZGJyZXF1aXJlKGN1cnNvci0+Y3VyclJlZik7DQogDQot ICBuZXh0X2RiaW5mb19ibG9jaysrOw0KKyAgICAvLyBDT05GIG9yIFJFRiBzaG91 bGQgYmUgc2VudCBiYWNrIGhlcmUNCisgICAgY3Vyc29yLT5zZW5kZXJSZWYgPSBy ZWZlcmVuY2UoKTsNCiANCi0gIGlmKGRiaW5mb19ibG9ja3NbbmV4dF9kYmluZm9f YmxvY2tdIT0wKQ0KLSAgew0KLSAgICBqYW0oKTsNCi0gICAgb3JlcS0+Y3Vyc29y LmN1cl9ibG9jaz0gZGJpbmZvX2Jsb2Nrc1tuZXh0X2RiaW5mb19ibG9ja107DQot ICB9DQotICBlbHNlDQotICB7DQotICAgIGZvcihvcmVxLT5jdXJzb3IuY3VyX25v ZGUrKzsNCi0gICAgICAgICFjX2FsaXZlTm9kZXMuZ2V0KG9yZXEtPmN1cnNvci5j dXJfbm9kZSkNCi0gICAgICAgICAgJiYgb3JlcS0+Y3Vyc29yLmN1cl9ub2RlIDwg TUFYX05EQl9OT0RFUzsNCi0gICAgICAgIG9yZXEtPmN1cnNvci5jdXJfbm9kZSsr KQ0KLSAgICAgIDsNCi0NCi0gICAgaWYob3JlcS0+Y3Vyc29yLmN1cl9ub2RlIDwg TUFYX05EQl9OT0RFUykNCi0gICAgew0KLSAgICAgIGphbSgpOw0KLSAgICAgIG9y ZXEtPmN1cnNvci5jdXJfcmVxdWVzdEluZm89IDA7DQotICAgICAgb3JlcS0+Y3Vy c29yLmN1cl9ibG9jaz0gREJJTkZPOw0KLSAgICAgIG9yZXEtPmN1cnNvci5jdXJf aXRlbT0gMDsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICBqYW0o KTsNCi0gICAgICBEYmluZm9TY2FuQ29uZiAqYXBpY29uZj0gKERiaW5mb1NjYW5D b25mKilzaWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQotICAgICAgYXBpY29uZi0+ dGFibGVJZD0gdGFibGVJZDsNCi0gICAgICBhcGljb25mLT5zZW5kZXJSZWY9IHNl bmRlclJlZjsNCi0gICAgICBhcGljb25mLT5hcGlUeG5JZD0gYXBpVHhuSWQ7DQot ICAgICAgc2VuZFNpZ25hbChhcGlSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNp Z25hbCwNCi0gICAgICAgICAgICAgICAgIERiaW5mb1NjYW5Db25mOjpEb25lTGVu Z3RoLCBKQkIpOw0KLSAgICAgIHJldHVybjsNCi0gICAgfQ0KKyAgICAvLyBTZW5k IFNDQU5SRVENCisgICAgTUVNQ09QWV9OT19XT1JEUyhzaWduYWwtPmdldERhdGFQ dHJTZW5kKCksDQorICAgICAgICAgICAgICAgICAgICAgJmNvbmYsIHNpZ25hbF9s ZW5ndGgpOw0KKyAgICBzZW5kU2lnbmFsKGN1cnNvci0+Y3VyclJlZiwNCisgICAg ICAgICAgICAgICBHU05fREJJTkZPX1NDQU5SRVEsDQorICAgICAgICAgICAgICAg c2lnbmFsLCBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KKyAgICByZXR1cm47DQogICB9 DQogDQotICBzZW5kU2lnbmFsKG51bWJlclRvUmVmKG9yZXEtPmN1cnNvci5jdXJf YmxvY2ssIG9yZXEtPmN1cnNvci5jdXJfbm9kZSksDQotICAgICAgICAgICAgIEdT Tl9EQklORk9fU0NBTlJFUSwNCi0gICAgICAgICAgICAgc2lnbmFsLCBzaWduYWwt PmdldExlbmd0aCgpLCBKQkIpOw0KKyAgLy8gU2NhbiBpcyBkb25lLCBzZW5kIFND QU5DT05GIGJhY2sgdG8gY2FsbGVyDQorICBqYW0oKTsNCisgIERiaW5mb1NjYW5D b25mICphcGljb25mID0gKERiaW5mb1NjYW5Db25mKikgc2lnbmFsLT5nZXREYXRh UHRyU2VuZCgpOw0KKyAgTUVNQ09QWV9OT19XT1JEUyhhcGljb25mLCAmY29uZiwg RGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aCk7DQorDQorICAvLyBTZXQgY3Vy c29yX3N6IGJhY2sgdG8gMCB0byBpbmRpY2F0ZSBlbmQgb2Ygc2Nhbg0KKyAgYXBp Y29uZi0+Y3Vyc29yX3N6ID0gMDsNCisgIHNlbmRTaWduYWwocmVzdWx0UmVmLCBH U05fREJJTkZPX1NDQU5DT05GLCBzaWduYWwsDQorICAgICAgICAgICAgIERiaW5m b1NjYW5Db25mOjpTaWduYWxMZW5ndGgsIEpCQik7DQorICByZXR1cm47DQogfQ0K IA0KIA0KDQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5l bC9ibG9ja3MvZGJpbmZvL0RiaW5mby5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy9kYmluZm8vRGJpbmZvLmhwcAkyMDA4LTEwLTA1IDA3 OjE0OjM3ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9kYmluZm8vRGJpbmZvLmhwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpA QCAtMSw0ICsxLDUgQEANCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDcgTXlTUUwgQUIN CisvKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBNeVNRTCBBQiwgMjAwOSBTdW4g TWljcm9zeXN0ZW1zIEluYy4NCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ug aXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLg0KIA0KICAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5DQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCkBAIC00OSw4ICs1 MCwxMCBAQCBwcm90ZWN0ZWQ6DQogICB2b2lkIGV4ZWNSRUFEX0NPTkZJR19SRVEo U2lnbmFsKik7DQogICB2b2lkIGV4ZWNEVU1QX1NUQVRFX09SRChTaWduYWwqIHNp Z25hbCk7DQogDQorICBVaW50MzIgZmluZF9uZXh0X25vZGUoVWludDMyIG5vZGUp IGNvbnN0Ow0KKyAgVWludDMyIGZpbmRfbmV4dF9ibG9jayhVaW50MzIgYmxvY2sp IGNvbnN0Ow0KKyAgYm9vbCBmaW5kX25leHQoTmRiaW5mbzo6U2NhbkN1cnNvciog Y3Vyc29yKSBjb25zdDsNCiAgIHZvaWQgZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25h bCAqc2lnbmFsKTsNCi0gIHZvaWQgZXhlY0RCSU5GT19UUkFOU0lEX0FJKFNpZ25h bCogc2lnbmFsKTsNCiAgIHZvaWQgZXhlY0RCSU5GT19TQ0FOQ09ORihTaWduYWwg KnNpZ25hbCk7DQogDQogICAvKiBmb3IgbWFpbnRhaW5pbmcgY19hbGl2ZU5vZGVz ICovDQoNCj09PSByZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL2RiaW5mby9uZGJpbmZvX2hlbHBlcnMuY3BwJw0KLS0tIGEvc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9faGVscGVycy5j cHAJMjAwOS0wNi0yMyAxNTozOTo1NSArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvZGJpbmZvL25kYmluZm9faGVscGVycy5jcHAJMTk3 MC0wMS0wMSAwMDowMDowMCArMDAwMA0KQEAgLTEsNjEgKzAsMCBAQA0KLSNpbmNs dWRlICJEYmluZm8uaHBwIg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2luY2x1 ZGUgPEF0dHJpYnV0ZUhlYWRlci5ocHA+DQotI2luY2x1ZGUgPHNpZ25hbGRhdGEv RGJpbmZvU2Nhbi5ocHA+DQotDQotdm9pZCBkYmluZm9fd3JpdGVfcm93X2luaXQo c3RydWN0IGRiaW5mb19yb3cgKnIsIGNoYXIqIGJ1ZiwgaW50IGxlbikNCi17DQot ICByLT5idWYgPSByLT5jdXJyID0gKFVpbnQzMiopYnVmOw0KLSAgci0+ZW5kID0g ci0+YnVmICsgbGVuOw0KLSAgci0+Y29sX2NvdW50ID0gMDsNCi19DQotDQotaW50 IGRiaW5mb193cml0ZV9yb3dfY29sdW1uKHN0cnVjdCBkYmluZm9fcm93ICpyLCBj b25zdCBjaGFyKiBjb2wsIGludCBjbGVuKQ0KLXsNCi0gIC8vIENyZWF0ZSBBdHRy aWJ1dGVIZWFkZXINCi0gIEF0dHJpYnV0ZUhlYWRlciBhaChyLT5jb2xfY291bnQr KywgY2xlbik7DQotICBjb25zdCBVaW50MzIgaGVhZGVyX3N6ID0gYWguZ2V0SGVh ZGVyU2l6ZSgpOw0KLSAgY29uc3QgVWludDMyIGRhdGFfc3ogPSBhaC5nZXREYXRh U2l6ZSgpOw0KLQ0KLSAgLy8gQ2hlY2sgcm93IGJ1ZmZlciBzcGFjZQ0KLSAgaWYo KGhlYWRlcl9zeiArIGRhdGFfc3opID4gKFVpbnQzMikoci0+ZW5kIC0gci0+Y3Vy cikpDQotICB7DQotICAgIG5kYm91dF9jKCJXYXJuaW5nLCB0b28gc21hbGwgbmRi aW5mbyByb3cgYnVmZmVyIik7DQotICAgIGFzc2VydChmYWxzZSk7DQotICAgIHJl dHVybiAtMTsgLy8gTm90IGVub3VnaCByb29tLg0KLSAgfQ0KLQ0KLSAgLy8gV3Jp dGUgQXR0cmlidXRlSGVhZGVyIHRvIGJ1ZmZlcg0KLSAgYWguaW5zZXJ0SGVhZGVy KHItPmN1cnIpOw0KLSAgci0+Y3VyciArPSBoZWFkZXJfc3o7DQotDQotICAvLyBX cml0ZSBkYXRhIHRvIGJ1ZmZlcg0KLSAgbWVtY3B5KHItPmN1cnIsIGNvbCwgY2xl bik7DQotICByLT5jdXJyICs9IGRhdGFfc3o7DQotDQotICBhc3NlcnQoci0+Y3Vy ciA8PSByLT5lbmQpOw0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KLWludCBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoc3RydWN0IGRiaW5mb19yb3cgKnIsIFVp bnQzMiB2YWx1ZSkNCi17DQotICByZXR1cm4gZGJpbmZvX3dyaXRlX3Jvd19jb2x1 bW4ociwgKGNoYXIqKSZ2YWx1ZSwgc2l6ZW9mKFVpbnQzMikpOw0KLX0NCi0NCi12 b2lkIGRiaW5mb19yYXRlbGltaXRfaW5pdChzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1p dCAqcmwsIHN0cnVjdCBEYmluZm9TY2FuUmVxICpyKQ0KLXsNCi0gIHJsLT5tYXhS b3dzPSByLT5tYXhSb3dzOw0KLSAgcmwtPm1heEJ5dGVzPSByLT5tYXhCeXRlczsN Ci0gIHJsLT5yb3dzX3RvdGFsPSByLT5yb3dzX3RvdGFsOw0KLSAgcmwtPmJ5dGVz X3RvdGFsPSByLT53b3JkX3RvdGFsOw0KLSAgcmwtPnJvd3M9IDA7DQotICBybC0+ Ynl0ZXM9IDA7DQotfQ0KLQ0KLWludCBkYmluZm9fcmF0ZWxpbWl0X2NvbnRpbnVl KHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0ICpybCkNCi17DQotICBpZigoKHJsLT5t YXhSb3dzPT0wKSB8fCAocmwtPm1heFJvd3MgPiBybC0+cm93cykpDQotICAgICAm JiAoKHJsLT5tYXhCeXRlcz09MCkgfHwgKHJsLT5tYXhCeXRlcyA+IHJsLT5ieXRl cykpICkNCi0gICAgcmV0dXJuIDE7DQotICByZXR1cm4gMDsNCi19DQoNCj09PSBy ZW1vdmVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5m by9uZGJpbmZvX3RhYmxlaWRzLmgnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2Vy bmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb190YWJsZWlkcy5oCTIwMDgtMTAtMDUg MDc6MTQ6MjEgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmgJMTk3MC0wMS0wMSAwMDowMDow MCArMDAwMA0KQEAgLTEsMjEgKzAsMCBAQA0KLQ0KLSNpZm5kZWYgTkRCSU5GT19U QUJMRUlEU19IDQotI2RlZmluZSBOREJJTkZPX1RBQkxFSURTX0gNCi0NCi0jaWZk ZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0jZGVm aW5lIE5EQklORk9fVEFCTEVTX1RBQkxFSUQgICAgMA0KLSNkZWZpbmUgTkRCSU5G T19DT0xVTU5TX1RBQkxFSUQgICAxDQotI2RlZmluZSBOREJJTkZPX01FTVVTQUdF X1RBQkxFSUQgIDINCi0jZGVmaW5lIE5EQklORk9fTE9HREVTVElOQVRJT05fVEFC TEVJRCAgMw0KLSNkZWZpbmUgTkRCSU5GT19CQUNLVVBfUkVDT1JEU19UQUJMRUlE IDQNCi0jZGVmaW5lIE5EQklORk9fQkFDS1VQX1BBUkFNRVRFUlNfVEFCTEVJRCA1 DQotI2RlZmluZSBOREJJTkZPX1BPT0xTX1RBQkxFSUQgICAgICAgICAgICAgICAg ICAgICA2DQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLQ0K LSNlbmRpZg0KDQo9PT0gcmVtb3ZlZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2Vy bmVsL2Jsb2Nrcy9kYmluZm8vbmRiaW5mb190YWJsZXMuaCcNCi0tLSBhL3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlcy5o CTIwMDktMDYtMTUgMTM6MzE6MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL2RiaW5mby9uZGJpbmZvX3RhYmxlcy5oCTE5NzAtMDEt MDEgMDA6MDA6MDAgKzAwMDANCkBAIC0xLDEzMyArMCwwIEBADQotLyogQ29weXJp Z2h0IChDKSAyMDA3IE15U1FMIEFCDQotDQotICAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkNCi0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KLSAgIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4NCi0NCi0g ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwNCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KLSAgIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUNCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLg0KLQ0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQotICAgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUNCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBICovDQotI2lmbmRl ZiBOREJJTkZPX1RBQkxFU19IDQotI2RlZmluZSBOREJJTkZPX1RBQkxFU19IDQot DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMN Ci1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0vKiogUmVzZXJ2ZWQgZm9yIERC SU5GTyBvbmx5ICovDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fVEFC TEVTLDMpDQotICAgICA9IHsgIlRBQkxFUyIsIDMsIDAsDQotICAgICAgICB7DQot ICAgICAgICAgIHsiVEFCTEVfSUQiLCAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQot ICAgICAgICAgIHsiVEFCTEVfTkFNRSIsTkRCSU5GT19UWVBFX1NUUklOR30sDQot ICAgICAgICAgIHsiQ1JFQVRFX1NRTCIsTkRCSU5GT19UWVBFX1NUUklOR30sDQot ICAgICAgICB9fTsNCi0NCi0vKiogUmVzZXJ2ZWQgZm9yIERCSU5GTyBvbmx5ICov DQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQ09MVU1OUyw0KQ0KLSAg ICAgPSB7ICJDT0xVTU5TIiwgNCwgMCwNCi0gICAgICAgIHsNCi0gICAgICAgICAg eyJUQUJMRV9JRCIsICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgICAg ICB7IkNPTFVNTl9JRCIsICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICAg ICAgIHsiQ09MVU1OX05BTUUiLCBOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICAg ICAgICAgeyJDT0xVTU5fVFlQRSIsIE5EQklORk9fVFlQRV9TVFJJTkd9LA0KLSAg ICAgICAgfX07DQotDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fTUVN VVNBR0UsNykNCi0gICAgID0geyAiTUVNVVNBR0UiLCA3LCAwLA0KLSAgICAgICAg ew0KLSAgICAgICAgICB7Ik5PREVfSUQiLCAgICAgICAgICBOREJJTkZPX1RZUEVf TlVNQkVSfSwNCi0gICAgICAgICAgeyJCTE9DS19OVU1CRVIiLCAgICAgTkRCSU5G T19UWVBFX05VTUJFUn0sDQotICAgICAgICAgIHsiQkxPQ0tfSU5TVEFOQ0UiLCAg IE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgICAgICB7IlJFU09VUkNFX05B TUUiLCAgICBOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICAgICAgICAgeyJQQUdF X1NJWkUiLCAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICAgICAg IHsiUEFHRVNfVVNFRCIsICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAg ICAgICAgICB7IlBBR0VTX1RPVEFMIiwgICAgICBOREJJTkZPX1RZUEVfTlVNQkVS fSwNCi0gICAgICAgIH19Ow0KLQ0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJp bmZvX0xPR0RFU1RJTkFUSU9OLDUpID0NCi17ICJMT0dERVNUSU5BVElPTiIsIDUs IDAsDQotIHsNCi0gICB7Ik5PREVfSUQiLE5EQklORk9fVFlQRV9OVU1CRVJ9LA0K LSAgIHsiVFlQRSIsTkRCSU5GT19UWVBFX1NUUklOR30sDQotICAgeyJQQVJBTVMi LE5EQklORk9fVFlQRV9TVFJJTkd9LA0KLSAgIHsiQ1VSUkVOVF9TSVpFIixOREJJ TkZPX1RZUEVfTlVNQkVSfSwNCi0gICB7Ik1BWF9TSVpFIixOREJJTkZPX1RZUEVf TlVNQkVSfSwNCi0gfQ0KLX07DQotDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5k YmluZm9fQkFDS1VQX1JFQ09SRFMsMTEpDQotPSB7ICJCQUNLVVBfUkVDT1JEUyIs IDExLCAwLA0KLSAgIHsNCi0gICAgIHsiTk9ERV9JRCIsICAgICAgICAgIE5EQklO Rk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJCQUNLVVBfUkVDT1JEIiwgICAgTkRC SU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkJBQ0tVUF9JRCIsICAgICAgICBO REJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiTUFTVEVSX1JFRiIsICAgICAg IE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJDTElFTlRfUkVGIiwgICAg ICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IlNUQVRFIiwgICAgICAg ICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQllURVMiLCAgICAg ICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJSRUNPUkRTIiwg ICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkxPR19CWVRF UyIsICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiTE9HX1JF Q09SRFMiLCAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJFUlJP Ul9DT0RFIiwgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgfQ0KLX07 DQotDQotREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQkFDS1VQX1BBUkFN RVRFUlMsMTQpDQotPSB7ICJCQUNLVVBfUEFSQU1FVEVSUyIsIDE0LCAwLA0KLSAg IHsNCi0gICAgIHsiTk9ERV9JRCIsICAgICAgICAgICAgICAgICAgTkRCSU5GT19U WVBFX05VTUJFUn0sDQotICAgICB7IkNVUlJFTlRfRElTS19XUklURV9TUEVFRCIs IE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJCWVRFU19XUklUVEVOX1RI SVNfUEVSSU9EIixOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiT1ZFUkZM T1dfRElTS19XUklURSIsICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAg ICB7IlJFU0VUX0RFTEFZX1VTRUQiLCAgICAgICAgIE5EQklORk9fVFlQRV9OVU1C RVJ9LA0KLSAgICAgeyJSRVNFVF9ESVNLX1NQRUVEX1RJTUUiLCAgICBOREJJTkZP X1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQkFDS1VQX1BPT0xfU0laRSIsICAgICAg ICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkJBQ0tVUF9GSUxFX1BP T0xfU0laRSIsICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJUQUJM RV9QT09MX1NJWkUiLCAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0g ICAgIHsiVFJJR0dFUl9QT09MX1NJWkUiLCAgICAgICAgTkRCSU5GT19UWVBFX05V TUJFUn0sDQotICAgICB7IkZSQUdNRU5UX1BPT0xfU0laRSIsICAgICAgIE5EQklO Rk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJQQUdFX1BPT0xfU0laRSIsICAgICAg ICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0gICAgIHsiQ09NUFJFU1NFRF9C QUNLVVAiLCAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IkNP TVBSRVNTRURfTENQIiwgICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0K LSAgIH0NCi19Ow0KLQ0KLURFQ0xBUkVfTkRCSU5GT19UQUJMRShuZGJpbmZvX1BP T0xTLDYpDQotPSB7ICJQT09MUyIsIDYsIDAsDQotICAgew0KLSAgICAgeyJOT0RF X0lEIiwgICAgICAgICAgICAgICAgICBOREJJTkZPX1RZUEVfTlVNQkVSfSwNCi0g ICAgIHsiQkxPQ0tfTlVNQkVSIiwgICAgICAgICAgICAgTkRCSU5GT19UWVBFX05V TUJFUn0sDQotICAgICB7IkJMT0NLX0lOU1RBTkNFIiwgICAgICAgICAgIE5EQklO Rk9fVFlQRV9OVU1CRVJ9LA0KLSAgICAgeyJQT09MX05BTUUiLCAgICAgICAgICAg ICAgICBOREJJTkZPX1RZUEVfU1RSSU5HfSwNCi0gICAgIHsiRlJFRSIsICAgICAg ICAgICAgICAgICAgICAgTkRCSU5GT19UWVBFX05VTUJFUn0sDQotICAgICB7IlNJ WkUiLCAgICAgICAgICAgICAgICAgICAgIE5EQklORk9fVFlQRV9OVU1CRVJ9LA0K LSAgIH0NCi19Ow0KLQ0KLXN0YXRpYyBVaW50MzIgbnVtYmVyX25kYmluZm9fdGFi bGVzPSA3Ow0KLQ0KLSNkZWZpbmUgREJJTkZPVEJMKHgpIChzdHJ1Y3QgbmRiaW5m b190YWJsZSopJngNCi0NCi1zdHJ1Y3QgbmRiaW5mb190YWJsZSAqbmRiaW5mb190 YWJsZXNbXSA9IHsNCi0gIERCSU5GT1RCTChuZGJpbmZvX1RBQkxFUyksDQotICBE QklORk9UQkwobmRiaW5mb19DT0xVTU5TKSwNCi0gIERCSU5GT1RCTChuZGJpbmZv X01FTVVTQUdFKSwNCi0gIERCSU5GT1RCTChuZGJpbmZvX0xPR0RFU1RJTkFUSU9O KSwNCi0gIERCSU5GT1RCTChuZGJpbmZvX0JBQ0tVUF9SRUNPUkRTKSwNCi0gIERC SU5GT1RCTChuZGJpbmZvX0JBQ0tVUF9QQVJBTUVURVJTKSwNCi0gIERCSU5GT1RC TChuZGJpbmZvX1BPT0xTKSwNCi19Ow0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0K LX0NCi0jZW5kaWYNCi0NCi0jZW5kaWYNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0 b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Y01haW4uY3BwJw0K LS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0Yy9EYnRjTWFp bi5jcHAJMjAwOS0wNi0zMCAxODo0OTo1MyArMDAwMA0KKysrIGIvc3RvcmFnZS9u ZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0Yy9EYnRjTWFpbi5jcHAJMjAwOS0wNy0w MyAxMToxMzo1OSArMDAwMA0KQEAgLTg4LDggKzg4LDYgQEANCiANCiAjaW5jbHVk ZSA8c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2lnbmFs ZGF0YS9UcmFuc0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQotI2lu Y2x1ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogDQogLy8gVXNl IERFQlVHIHRvIHByaW50IG1lc3NhZ2VzIHRoYXQgc2hvdWxkIGJlDQpAQCAtMTE3 ODYsMTQgKzExNzg0LDEzIEBAIERidGM6OmV4ZWNEVU1QX1NUQVRFX09SRChTaWdu YWwqIHNpZ25hbCkNCiB2b2lkIERidGM6OmV4ZWNEQklORk9fU0NBTlJFUShTaWdu YWwgKnNpZ25hbCkNCiB7DQogICBEYmluZm9TY2FuUmVxIHJlcT0gKihEYmluZm9T Y2FuUmVxKilzaWduYWwtPnRoZURhdGE7DQotICBjaGFyIGJ1Zls1MTJdOw0KLSAg c3RydWN0IGRiaW5mb19yb3cgcjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0 IHJsOw0KLSAgZGJpbmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQorICBj b25zdCBOZGJpbmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAoTmRiaW5m bzo6U2NhbkN1cnNvciopRGJpbmZvU2Nhbjo6Z2V0Q3Vyc29yUHRyKCZyZXEpOw0K KyAgTmRiaW5mbzo6UmF0ZWxpbWl0IHJsOw0KIA0KICAgamFtRW50cnkoKTsNCiAN Ci0gIGlmKHJlcS50YWJsZUlkID09IE5EQklORk9fUE9PTFNfVEFCTEVJRCkNCisg IGlmKHJlcS50YWJsZUlkID09IE5kYmluZm86OlBPT0xTX1RBQkxFSUQpDQogICB7 DQogICAgIHN0cnVjdCB7DQogICAgICAgY29uc3QgY2hhciogcG9vbG5hbWU7DQpA QCAtMTE4MjIsNjMgKzExODE5LDMwIEBAIHZvaWQgRGJ0Yzo6ZXhlY0RCSU5GT19T Q0FOUkVRKFNpZ25hbCAqc2kNCiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0KICAg ICAgICAgfTsNCiANCisgICAgVWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFbMF07 DQogICAgIEJsb2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkpOw0K LSAgICBmb3IoaW50IGk9MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCi0gICAg ew0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2Yo YnVmKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZy LCBnZXRPd25Ob2RlSWQoKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1 bW5fdWludDMyKCZyLCBibik7ICAgICAgICAgICAvLyBibG9jayBudW1iZXINCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHJlcS5pbnN0 YW5jZSk7IC8vIGJsb2NrIGluc3RhbmNlDQotICAgICAgZGJpbmZvX3dyaXRlX3Jv d19jb2x1bW4oJnIsIHBvb2xzW2ldLnBvb2xuYW1lLCBzdHJsZW4ocG9vbHNbaV0u cG9vbG5hbWUpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIHBvb2xzW2ldLmZyZWUpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uc2l6ZSk7DQotICAgICAgZGJpbmZv X3NlbmRfcm93KHNpZ25hbCwgciwgcmwsIHJlcS5hcGlUeG5JZCwgcmVxLmFwaVJl Zik7DQotICAgIH0NCi0gIH0NCi0NCi0gIC8qICBpZihyZXEtPnRhYmxlSWQgPT0N Ci0gIGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KLQ0KLSAgICBp ZighKHJlcS5yZXF1ZXN0SW5mbyAmIERiaW5mb1NjYW5SZXE6OlN0YXJ0U2Nhbikp DQotICAgICAgc3RhcnRpZD0gcmVxLmN1cl9pdGVtOw0KLQ0KLSAgICBmb3IoaT1z dGFydGlkO2RiaW5mb19yYXRlbGltaXRfY29udGludWUoJnJsKSAmJiBpPG51bWJl cl9uZGJpbmZvX3RhYmxlcztpKyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xdLnBv b2xuYW1lKQ0KICAgICB7DQogICAgICAgamFtKCk7DQotICAgICAgZGJpbmZvX3dy aXRlX3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBuZGJp bmZvX2NyZWF0ZV9zcWwobmRiaW5mb190YWJsZXNbaV0sDQotICAgICAgICAgICAg ICAgICAgICAgICAgIGNyZWF0ZV9zcWwsIHNpemVvZihjcmVhdGVfc3FsKSk7DQot DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIChjaGFyKikmaSwg c2l6ZW9mKGkpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwg bmRiaW5mb190YWJsZXNbaV0tPm5hbWUsDQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RybGVuKG5kYmluZm9fdGFibGVzW2ldLT5uYW1lKSk7DQotICAg ICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsIGNyZWF0ZV9zcWwsIHN0cmxl bihjcmVhdGVfc3FsKSk7DQotDQotICAgICAgZGJpbmZvX3NlbmRfcm93KHNpZ25h bCxyLHJsLGFwaVR4bklkLGFwaVJlZik7DQotICAgIH0NCi0NCi0gICAgaWYoIWRi aW5mb19yYXRlbGltaXRfY29udGludWUoJnJsKSAmJiBpIDwgbnVtYmVyX25kYmlu Zm9fdGFibGVzKQ0KLSAgICB7DQotICAgICAgamFtKCk7DQotICAgICAgZGJpbmZv X3JhdGVsaW1pdF9zZW5kY29uZihzaWduYWwscmVxLHJsLGkpOw0KLSAgICB9DQot ICAgIGVsc2UNCi0gICAgew0KLSAgICAgIERiaW5mb1NjYW5Db25mICpjb25mPSAo RGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gICAg ICBjb25mLT50YWJsZUlkPSByZXEudGFibGVJZDsNCi0gICAgICBjb25mLT5zZW5k ZXJSZWY9IHJlcS5zZW5kZXJSZWY7DQotICAgICAgY29uZi0+YXBpVHhuSWQ9IHJl cS5hcGlUeG5JZDsNCi0gICAgICBjb25mLT5yZXF1ZXN0SW5mbz0gMDsNCi0gICAg ICBzZW5kU2lnbmFsKHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYs IHNpZ25hbCwNCi0gICAgICAgICAgICAgICAgIERiaW5mb1NjYW5Db25mOjpTaWdu YWxMZW5ndGgsIEpCQik7DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWws IHJlcSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7 DQorICAgICAgcm93LndyaXRlX3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9j ayBudW1iZXINCisgICAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAv LyBibG9jayBpbnN0YW5jZQ0KKyAgICAgIHJvdy53cml0ZV9zdHJpbmcocG9vbHNb cG9vbF0ucG9vbG5hbWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9vbHNb cG9vbF0uZnJlZSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29s XS5zaXplKTsNCisgICAgICBuZGJpbmZvX3NlbmRfcm93KHNpZ25hbCwgcmVxLCBy b3csIHJsKTsNCisgICAgICBwb29sKys7DQorICAgICAgaWYgKHJsLm5lZWRfYnJl YWsocmVxKSkNCisgICAgICB7DQorICAgICAgICBqYW0oKTsNCisgICAgICAgIG5k YmluZm9fc2VuZF9zY2FuX2JyZWFrKHNpZ25hbCwgcmVxLCBybCwgcG9vbCk7DQor ICAgICAgICByZXR1cm47DQorICAgICAgfQ0KICAgICB9DQotICAqLw0KKyAgfQ0K IA0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2ln bmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgRGJp bmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihVaW50 MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNvbmY6 Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RC SU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9TY2Fu Q29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIG5kYmluZm9f c2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogYm9vbA0K DQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvZGJ0dXAvRGJ0dXBEZWJ1Zy5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMv a2VybmVsL2Jsb2Nrcy9kYnR1cC9EYnR1cERlYnVnLmNwcAkyMDA5LTA2LTMwIDE4 OjIyOjU2ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nr cy9kYnR1cC9EYnR1cERlYnVnLmNwcAkyMDA5LTA3LTAzIDExOjEzOjU5ICswMDAw DQpAQCAtMzAsOCArMzAsNiBAQA0KIA0KICNpbmNsdWRlIDxzaWduYWxkYXRhL0Ri aW5mb1NjYW4uaHBwPg0KICNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRBSS5o cHA+DQotI2luY2x1ZGUgPG5kYmluZm8uaD4NCi0jaW5jbHVkZSA8ZGJpbmZvL25k YmluZm9fdGFibGVpZHMuaD4NCiANCiANCiAvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov DQpAQCAtNzYsMzMgKzc0LDI4IEBAIHZvaWQgRGJ0dXA6OmV4ZWNEQklORk9fU0NB TlJFUShTaWduYWwqIHMNCiB7DQogICBqYW1FbnRyeSgpOw0KICAgRGJpbmZvU2Nh blJlcSByZXE9ICooRGJpbmZvU2NhblJlcSopc2lnbmFsLT50aGVEYXRhOw0KLSAg Y29uc3QgVWludDMyIHJlcWxlbmd0aD0gc2lnbmFsLT5nZXRMZW5ndGgoKTsNCisg IGNvbnN0IE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJp bmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7 DQogDQotICBjb25zdCBVaW50MzIgdGFibGVJZD0gcmVxLnRhYmxlSWQ7DQotICBj b25zdCBVaW50MzIgaW5zdGFuY2U9IHJlcS5pbnN0YW5jZTsNCisgIE5kYmluZm86 OlJhdGVsaW1pdCBybDsNCiANCi0gIGNoYXIgYnVmWzEwMjRdOw0KLSAgc3RydWN0 IGRiaW5mb19yb3cgcjsNCi0gIHN0cnVjdCBkYmluZm9fcmF0ZWxpbWl0IHJsOw0K LQ0KLSAgZGJpbmZvX3JhdGVsaW1pdF9pbml0KCZybCwgJnJlcSk7DQotDQotICBp Zih0YWJsZUlkID09IE5EQklORk9fTUVNVVNBR0VfVEFCTEVJRCkNCisgIGlmKHJl cS50YWJsZUlkID09IE5kYmluZm86Ok1FTVVTQUdFX1RBQkxFSUQpDQogICB7DQog ICAgIGphbSgpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwg c2l6ZW9mKGJ1ZikpOw0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50 MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19j b2x1bW5fdWludDMyKCZyLCBibG9ja1RvTWFpbihudW1iZXIoKSkpOy8vIGJsb2Nr IG51bWJlcg0KLSAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIs IGluc3RhbmNlKTsgICAgICAgICAgICAgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW4oJnIsICJEYXRhTWVtb3J5IiwgMTApOw0K LSAgICBVaW50MzIgcGFnZV9zaXplX2tiPSBzaXplb2YoUGFnZSk7Ow0KLSAgICBk YmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgKGNoYXIqKSZwYWdlX3NpemVfa2Is IDQpOyAvLyA4a2INCi0gICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMy KCZyLCBjVG90Tm9GcmFnUGFnZXMpOyAvLyBhbGxvY2VkIHBhZ2VzDQotICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgY1RvdFBhZ2VzKTsgLy8g bnVtYmVyIG9mIHBhZ2VzDQotICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwscixy bCxyZXEuYXBpVHhuSWQscmVxLmFwaVJlZik7DQorICAgIE5kYmluZm86OlJvdyBy b3coc2lnbmFsLCByZXEpOw0KKyAgICByb3cud3JpdGVfdWludDMyKGdldE93bk5v ZGVJZCgpKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihibG9ja1RvTWFpbihudW1i ZXIoKSkpOyAvLyBibG9jayBudW1iZXINCisgICAgcm93LndyaXRlX3VpbnQzMihp bnN0YW5jZSgpKTsgICAgICAgICAgICAvLyBibG9jayBpbnN0YW5jZQ0KKyAgICBy b3cud3JpdGVfc3RyaW5nKCJEYXRhTWVtb3J5Iik7DQorICAgIHJvdy53cml0ZV91 aW50MzIoc2l6ZW9mKFBhZ2UpKTsNCisgICAgcm93LndyaXRlX3VpbnQzMihjVG90 Tm9GcmFnUGFnZXMpOyAgICAgICAvLyBhbGxvY2VkIHBhZ2VzDQorICAgIHJvdy53 cml0ZV91aW50MzIoY1RvdFBhZ2VzKTsgICAgICAgICAgICAgLy8gbnVtYmVyIG9m IHBhZ2VzDQorICAgIG5kYmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywg cmwpOw0KKw0KICAgfQ0KLSAgaWYocmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09M U19UQUJMRUlEKQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNf VEFCTEVJRCkNCiAgIHsNCisgICAgamFtKCk7DQogICAgIHN0cnVjdCB7DQogICAg ICAgY29uc3QgY2hhciogcG9vbG5hbWU7DQogICAgICAgVWludDMyIGZyZWU7DQpA QCAtMTMzLDI1ICsxMjYsNTIgQEAgdm9pZCBEYnR1cDo6ZXhlY0RCSU5GT19TQ0FO UkVRKFNpZ25hbCogcw0KICAgICAgICAgICB7IE5VTEwsIDAsIDB9DQogICAgICAg ICB9Ow0KIA0KKyAgICBVaW50MzIgcG9vbCA9IGN1cnNvci0+ZGF0YVswXTsNCiAg ICAgQmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihudW1iZXIoKSk7DQotICAg IGZvcihpbnQgaT0wOyBwb29sc1tpXS5wb29sbmFtZTsgaSsrKQ0KKyAgICB3aGls ZShwb29sc1twb29sXS5wb29sbmFtZSkNCiAgICAgew0KLSAgICAgIGRiaW5mb193 cml0ZV9yb3dfaW5pdCgmciwgYnVmLCBzaXplb2YoYnVmKSk7DQotICAgICAgZGJp bmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBnZXRPd25Ob2RlSWQoKSk7 DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBibik7 ICAgICAgIC8vIGJsb2NrIG51bWJlcg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uX3VpbnQzMigmciwgaW5zdGFuY2UpOyAvLyBibG9jayBpbnN0YW5jZQ0K LSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBwb29sc1tpXS5wb29s bmFtZSwgc3RybGVuKHBvb2xzW2ldLnBvb2xuYW1lKSk7DQotICAgICAgZGJpbmZv X3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5mcmVlKTsNCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ld LnNpemUpOw0KLSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCBy ZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KKyAgICAgIGphbSgpOw0KKyAgICAg IE5kYmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgIHJvdy53cml0 ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkpOw0KKyAgICAgIHJvdy53cml0ZV91aW50 MzIoYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQorICAgICAgcm93Lndy aXRlX3VpbnQzMihpbnN0YW5jZSgpKTsgLy8gYmxvY2sgaW5zdGFuY2UNCisgICAg ICByb3cud3JpdGVfc3RyaW5nKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKTsNCisgICAg ICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLmZyZWUpOw0KKyAgICAgIHJv dy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uc2l6ZSk7DQorICAgICAgbmRiaW5m b19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQorICAgICAgcG9vbCsr Ow0KKyAgICAgIGlmIChybC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAg ICAgICAgamFtKCk7DQorICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhz aWduYWwsIHJlcSwgcmwsIHBvb2wpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAg IH0NCisgICAgfQ0KKyAgfQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6 VEVTVF9UQUJMRUlEKQ0KKyAgew0KKyAgICBVaW50MzIgY291bnRlciA9IGN1cnNv ci0+ZGF0YVswXTsNCisgICAgQmxvY2tOdW1iZXIgYm4gPSBibG9ja1RvTWFpbihu dW1iZXIoKSk7DQorICAgIHdoaWxlKGNvdW50ZXIgPCAxMDAwKQ0KKyAgICB7DQor ICAgICAgamFtKCk7DQorICAgICAgTmRiaW5mbzo6Um93IHJvdyhzaWduYWwsIHJl cSk7DQorICAgICAgcm93LndyaXRlX3VpbnQzMihnZXRPd25Ob2RlSWQoKSk7DQor ICAgICAgcm93LndyaXRlX3VpbnQzMihibik7ICAgICAgICAgICAvLyBibG9jayBu dW1iZXINCisgICAgICByb3cud3JpdGVfdWludDMyKGluc3RhbmNlKCkpOyAvLyBi bG9jayBpbnN0YW5jZQ0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoY291bnRlcik7 DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7 DQorICAgICAgY291bnRlcisrOw0KKyAgICAgIGlmIChybC5uZWVkX2JyZWFrKHJl cSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQorICAgICAgICBuZGJpbmZv X3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmwsIGNvdW50ZXIpOw0KKyAg ICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0KICAgfQ0KIA0KLSAgRGJp bmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXRE YXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgcmVxbGVuZ3RoICog c2l6ZW9mKFVpbnQzMikpOw0KLSAgY29uZi0+cmVxdWVzdEluZm8gJj0gfihEYmlu Zm9TY2FuQ29uZjo6TW9yZURhdGEpOw0KLSAgc2VuZFNpZ25hbChyZXEuc2VuZGVy UmVmLCBHU05fREJJTkZPX1NDQU5DT05GLA0KLSAgICAgICAgICAgICBzaWduYWws IERiaW5mb1NjYW5Db25mOjpTaWduYWxMZW5ndGhXaXRoQ3Vyc29yLCBKQkIpOw0K KyAgbmRiaW5mb19zZW5kX3NjYW5fY29uZihzaWduYWwsIHJlcSwgcmwpOw0KIH0N CiANCiAjaWZkZWYgVk1fVFJBQ0UNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHV4L0RidHV4RGVidWcuY3BwJw0K LS0tIGEvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXgvRGJ0dXhE ZWJ1Zy5jcHAJMjAwOS0wNi0xNSAxMzozMTozNyArMDAwMA0KKysrIGIvc3RvcmFn ZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXgvRGJ0dXhEZWJ1Zy5jcHAJMjAw OS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTIxLDIwICsyMSwxOCBAQA0KIA0K ICNpbmNsdWRlIDxzaWduYWxkYXRhL0RiaW5mb1NjYW4uaHBwPg0KICNpbmNsdWRl IDxzaWduYWxkYXRhL1RyYW5zSWRBSS5ocHA+DQotI2luY2x1ZGUgPG5kYmluZm8u aD4NCi0jaW5jbHVkZSA8ZGJpbmZvL25kYmluZm9fdGFibGVpZHMuaD4NCisNCiAN CiB2b2lkIERidHV4OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzaWduYWwp DQogew0KICAgRGJpbmZvU2NhblJlcSByZXE9ICooRGJpbmZvU2NhblJlcSopc2ln bmFsLT50aGVEYXRhOw0KLSAgY2hhciBidWZbNTEyXTsNCi0gIHN0cnVjdCBkYmlu Zm9fcm93IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsNCi0gIGRi aW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KKyAgY29uc3QgTmRiaW5m bzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNjYW5DdXJz b3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCisgIE5kYmluZm86 OlJhdGVsaW1pdCBybDsNCiANCiAgIGphbUVudHJ5KCk7DQogDQotICBpZihyZXEu dGFibGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxFSUQpDQorICBpZihyZXEudGFi bGVJZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlEKQ0KICAgew0KICAgICBzdHJ1 Y3Qgew0KICAgICAgIGNvbnN0IGNoYXIqIHBvb2xuYW1lOw0KQEAgLTY2LDI1ICs2 NCwzMCBAQCB2b2lkIERidHV4OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpz DQogICAgICAgICAgIHsgTlVMTCwgMCwgMH0NCiAgICAgICAgIH07DQogDQorICAg IFVpbnQzMiBwb29sID0gY3Vyc29yLT5kYXRhWzBdOw0KICAgICBCbG9ja051bWJl ciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigpKTsNCi0gICAgZm9yKGludCBpPTA7 IHBvb2xzW2ldLnBvb2xuYW1lOyBpKyspDQorICAgIHdoaWxlKHBvb2xzW3Bvb2xd LnBvb2xuYW1lKQ0KICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19pbml0 KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93 X2NvbHVtbl91aW50MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0gICAgICBkYmlu Zm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGJuKTsgICAgICAgICAgIC8v IGJsb2NrIG51bWJlcg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3Vp bnQzMigmciwgcmVxLmluc3RhbmNlKTsgLy8gYmxvY2sgaW5zdGFuY2UNCi0gICAg ICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgcG9vbHNbaV0ucG9vbG5hbWUs IHN0cmxlbihwb29sc1tpXS5wb29sbmFtZSkpOw0KLSAgICAgIGRiaW5mb193cml0 ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uZnJlZSk7DQotICAgICAg ZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5zaXpl KTsNCi0gICAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBybCwgcmVxLmFw aVR4bklkLCByZXEuYXBpUmVmKTsNCisgICAgICBqYW0oKTsNCisgICAgICBOZGJp bmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cud3JpdGVfdWlu dDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVfdWludDMyKGJu KTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KKyAgICAgIHJvdy53cml0ZV91 aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2NrIGluc3RhbmNlDQorICAgICAgcm93 LndyaXRlX3N0cmluZyhwb29sc1twb29sXS5wb29sbmFtZSk7DQorICAgICAgcm93 LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5mcmVlKTsNCisgICAgICByb3cud3Jp dGVfdWludDMyKHBvb2xzW3Bvb2xdLnNpemUpOw0KKyAgICAgIG5kYmluZm9fc2Vu ZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KKyAgICAgIHBvb2wrKzsNCisg ICAgICBpZiAocmwubmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsNCisgICAgICAg IGphbSgpOw0KKyAgICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJlYWsoc2lnbmFs LCByZXEsIHJsLCBwb29sKTsNCisgICAgICAgIHJldHVybjsNCisgICAgICB9DQog ICAgIH0NCiAgIH0NCiANCi0gIERiaW5mb1NjYW5Db25mICpjb25mPSAoRGJpbmZv U2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0gIG1lbWNweShj b25mLCZyZXEsIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3Ig KiBzaXplb2YoVWludDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5mbyAmPSB+KERi aW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFsKHJlcS5zZW5k ZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsDQotICAgICAgICAgICAgIHNpZ25h bCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJzb3IsIEpCQik7 DQorICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVxLCBybCk7DQog fQ0KIA0KIC8qDQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMv a2VybmVsL2Jsb2Nrcy9kYnV0aWwvRGJVdGlsLmNwcCcNCi0tLSBhL3N0b3JhZ2Uv bmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidXRpbC9EYlV0aWwuY3BwCTIwMDktMDYt MTUgMTM6MzE6MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv YmxvY2tzL2RidXRpbC9EYlV0aWwuY3BwCTIwMDktMDctMDMgMTA6MzE6MzAgKzAw MDANCkBAIC00NCw4ICs0NCw2IEBADQogDQogI2luY2x1ZGUgPHNpZ25hbGRhdGEv RGJpbmZvU2Nhbi5ocHA+DQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJ LmhwcD4NCi0jaW5jbHVkZSA8bmRiaW5mby5oPg0KLSNpbmNsdWRlIDxkYmluZm8v bmRiaW5mb190YWJsZWlkcy5oPg0KIA0KIC8qKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKg0KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQEAgLTY4NiwxNSAr Njg0LDEzIEBAIERiVXRpbDo6ZXhlY0RVTVBfU1RBVEVfT1JEKFNpZ25hbCogc2ln bmENCiB2b2lkIERiVXRpbDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2ln bmFsKQ0KIHsNCiAgIERiaW5mb1NjYW5SZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEq KXNpZ25hbC0+dGhlRGF0YTsNCi0gIGNoYXIgYnVmWzUxMl07DQotICBzdHJ1Y3Qg ZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0IGRiaW5mb19yYXRlbGltaXQgcmw7DQot DQotICBkYmluZm9fcmF0ZWxpbWl0X2luaXQoJnJsLCAmcmVxKTsNCisgIGNvbnN0 IE5kYmluZm86OlNjYW5DdXJzb3IqIGN1cnNvciA9DQorICAgIChOZGJpbmZvOjpT Y2FuQ3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHIoJnJlcSk7DQorICBO ZGJpbmZvOjpSYXRlbGltaXQgcmw7DQogDQogICBqYW1FbnRyeSgpOw0KIA0KLSAg aWYocmVxLnRhYmxlSWQgPT0gTkRCSU5GT19QT09MU19UQUJMRUlEKQ0KKyAgaWYo cmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6UE9PTFNfVEFCTEVJRCkNCiAgIHsNCiAg ICAgc3RydWN0IHsNCiAgICAgICBjb25zdCBjaGFyKiBwb29sbmFtZTsNCkBAIC03 MjYsMjUgKzcyMiwzMCBAQCB2b2lkIERiVXRpbDo6ZXhlY0RCSU5GT19TQ0FOUkVR KFNpZ25hbCAqDQogICAgICAgICAgIHsgTlVMTCwgMCwgMH0NCiAgICAgICAgIH07 DQogDQorICAgIFVpbnQzMiBwb29sID0gY3Vyc29yLT5kYXRhWzBdOw0KICAgICBC bG9ja051bWJlciBibiA9IGJsb2NrVG9NYWluKG51bWJlcigpKTsNCi0gICAgZm9y KGludCBpPTA7IHBvb2xzW2ldLnBvb2xuYW1lOyBpKyspDQorICAgIHdoaWxlKHBv b2xzW3Bvb2xdLnBvb2xuYW1lKQ0KICAgICB7DQotICAgICAgZGJpbmZvX3dyaXRl X3Jvd19pbml0KCZyLCBidWYsIHNpemVvZihidWYpKTsNCi0gICAgICBkYmluZm9f d3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGdldE93bk5vZGVJZCgpKTsNCi0g ICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIGJuKTsgICAg ICAgICAgIC8vIGJsb2NrIG51bWJlcg0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uX3VpbnQzMigmciwgcmVxLmluc3RhbmNlKTsgLy8gYmxvY2sgaW5zdGFu Y2UNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbigmciwgcG9vbHNbaV0u cG9vbG5hbWUsIHN0cmxlbihwb29sc1tpXS5wb29sbmFtZSkpOw0KLSAgICAgIGRi aW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgcG9vbHNbaV0uZnJlZSk7 DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29s c1tpXS5zaXplKTsNCi0gICAgICBkYmluZm9fc2VuZF9yb3coc2lnbmFsLCByLCBy bCwgcmVxLmFwaVR4bklkLCByZXEuYXBpUmVmKTsNCisgICAgICBqYW0oKTsNCisg ICAgICBOZGJpbmZvOjpSb3cgcm93KHNpZ25hbCwgcmVxKTsNCisgICAgICByb3cu d3JpdGVfdWludDMyKGdldE93bk5vZGVJZCgpKTsNCisgICAgICByb3cud3JpdGVf dWludDMyKGJuKTsgICAgICAgICAgIC8vIGJsb2NrIG51bWJlcg0KKyAgICAgIHJv dy53cml0ZV91aW50MzIoaW5zdGFuY2UoKSk7IC8vIGJsb2NrIGluc3RhbmNlDQor ICAgICAgcm93LndyaXRlX3N0cmluZyhwb29sc1twb29sXS5wb29sbmFtZSk7DQor ICAgICAgcm93LndyaXRlX3VpbnQzMihwb29sc1twb29sXS5mcmVlKTsNCisgICAg ICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLnNpemUpOw0KKyAgICAgIG5k YmluZm9fc2VuZF9yb3coc2lnbmFsLCByZXEsIHJvdywgcmwpOw0KKyAgICAgIHBv b2wrKzsNCisgICAgICBpZiAocmwubmVlZF9icmVhayhyZXEpKQ0KKyAgICAgIHsN CisgICAgICAgIGphbSgpOw0KKyAgICAgICAgbmRiaW5mb19zZW5kX3NjYW5fYnJl YWsoc2lnbmFsLCByZXEsIHJsLCBwb29sKTsNCisgICAgICAgIHJldHVybjsNCisg ICAgICB9DQogICAgIH0NCiAgIH0NCiANCi0gIERiaW5mb1NjYW5Db25mICpjb25m PSAoRGJpbmZvU2NhbkNvbmYqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCi0g IG1lbWNweShjb25mLCZyZXEsIERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aFdp dGhDdXJzb3IgKiBzaXplb2YoVWludDMyKSk7DQotICBjb25mLT5yZXF1ZXN0SW5m byAmPSB+KERiaW5mb1NjYW5Db25mOjpNb3JlRGF0YSk7DQotICBzZW5kU2lnbmFs KHJlcS5zZW5kZXJSZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsDQotICAgICAgICAg ICAgIHNpZ25hbCwgRGJpbmZvU2NhbkNvbmY6OlNpZ25hbExlbmd0aFdpdGhDdXJz b3IsIEpCQik7DQorICBuZGJpbmZvX3NlbmRfc2Nhbl9jb25mKHNpZ25hbCwgcmVx LCBybCk7DQogfQ0KIHZvaWQNCiBEYlV0aWw6Om11dGV4X2NyZWF0ZWQoU2lnbmFs KiBzaWduYWwsIFVpbnQzMiBwdHJJLCBVaW50MzIgcmV0VmFsKXsNCg0KPT09IG1v ZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL3N1bWEv U3VtYS5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9z dW1hL1N1bWEuY3BwCTIwMDktMDYtMTUgMTM6MzE6MzcgKzAwMDANCisrKyBiL3N0 b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL3N1bWEvU3VtYS5jcHAJMjAwOS0w Ny0wMyAxMDozMTozMCArMDAwMA0KQEAgLTYzLDggKzYzLDYgQEANCiANCiAjaW5j bHVkZSA8c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhwcD4NCiAjaW5jbHVkZSA8c2ln bmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+DQot I2luY2x1ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxlaWRzLmg+DQogDQogI2luY2x1 ZGUgPEV2ZW50TG9nZ2VyLmhwcD4NCiBleHRlcm4gRXZlbnRMb2dnZXIgKiBnX2V2 ZW50TG9nZ2VyOw0KQEAgLTE0OTYsMTUgKzE0OTQsMTMgQEAgU3VtYTo6ZXhlY0RV TVBfU1RBVEVfT1JEKFNpZ25hbCogc2lnbmFsKQ0KIHZvaWQgU3VtYTo6ZXhlY0RC SU5GT19TQ0FOUkVRKFNpZ25hbCAqc2lnbmFsKQ0KIHsNCiAgIERiaW5mb1NjYW5S ZXEgcmVxPSAqKERiaW5mb1NjYW5SZXEqKXNpZ25hbC0+dGhlRGF0YTsNCi0gIGNo YXIgYnVmWzUxMl07DQotICBzdHJ1Y3QgZGJpbmZvX3JvdyByOw0KLSAgc3RydWN0 IGRiaW5mb19yYXRlbGltaXQgcmw7DQotDQotICBkYmluZm9fcmF0ZWxpbWl0X2lu aXQoJnJsLCAmcmVxKTsNCisgIGNvbnN0IE5kYmluZm86OlNjYW5DdXJzb3IqIGN1 cnNvciA9DQorICAgIChOZGJpbmZvOjpTY2FuQ3Vyc29yKilEYmluZm9TY2FuOjpn ZXRDdXJzb3JQdHIoJnJlcSk7DQorICBOZGJpbmZvOjpSYXRlbGltaXQgcmw7DQog DQogICBqYW1FbnRyeSgpOw0KIA0KLSAgaWYocmVxLnRhYmxlSWQgPT0gTkRCSU5G T19QT09MU19UQUJMRUlEKQ0KKyAgaWYocmVxLnRhYmxlSWQgPT0gTmRiaW5mbzo6 UE9PTFNfVEFCTEVJRCkNCiAgIHsNCiAgICAgc3RydWN0IHsNCiAgICAgICBjb25z dCBjaGFyKiBwb29sbmFtZTsNCkBAIC0xNTM5LDI1ICsxNTM1LDMwIEBAIHZvaWQg U3VtYTo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNpZ25hbCAqc2kNCiAgICAgICAgICAg eyBOVUxMLCAwLCAwfQ0KICAgICAgICAgfTsNCiANCisgICAgVWludDMyIHBvb2wg PSBjdXJzb3ItPmRhdGFbMF07DQogICAgIEJsb2NrTnVtYmVyIGJuID0gYmxvY2tU b01haW4obnVtYmVyKCkpOw0KLSAgICBmb3IoaW50IGk9MDsgcG9vbHNbaV0ucG9v bG5hbWU7IGkrKykNCisgICAgd2hpbGUocG9vbHNbcG9vbF0ucG9vbG5hbWUpDQog ICAgIHsNCi0gICAgICBkYmluZm9fd3JpdGVfcm93X2luaXQoJnIsIGJ1Ziwgc2l6 ZW9mKGJ1ZikpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQz MigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAgICAgIGRiaW5mb193cml0ZV9yb3df Y29sdW1uX3VpbnQzMigmciwgYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVy DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCByZXEu aW5zdGFuY2UpOyAvLyBibG9jayBpbnN0YW5jZQ0KLSAgICAgIGRiaW5mb193cml0 ZV9yb3dfY29sdW1uKCZyLCBwb29sc1tpXS5wb29sbmFtZSwgc3RybGVuKHBvb2xz W2ldLnBvb2xuYW1lKSk7DQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19jb2x1bW5f dWludDMyKCZyLCBwb29sc1tpXS5mcmVlKTsNCi0gICAgICBkYmluZm9fd3JpdGVf cm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xzW2ldLnNpemUpOw0KLSAgICAgIGRi aW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJsLCByZXEuYXBpVHhuSWQsIHJlcS5h cGlSZWYpOw0KKyAgICAgIGphbSgpOw0KKyAgICAgIE5kYmluZm86OlJvdyByb3co c2lnbmFsLCByZXEpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoZ2V0T3duTm9k ZUlkKCkpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIoYm4pOyAgICAgICAgICAg Ly8gYmxvY2sgbnVtYmVyDQorICAgICAgcm93LndyaXRlX3VpbnQzMihpbnN0YW5j ZSgpKTsgLy8gYmxvY2sgaW5zdGFuY2UNCisgICAgICByb3cud3JpdGVfc3RyaW5n KHBvb2xzW3Bvb2xdLnBvb2xuYW1lKTsNCisgICAgICByb3cud3JpdGVfdWludDMy KHBvb2xzW3Bvb2xdLmZyZWUpOw0KKyAgICAgIHJvdy53cml0ZV91aW50MzIocG9v bHNbcG9vbF0uc2l6ZSk7DQorICAgICAgbmRiaW5mb19zZW5kX3JvdyhzaWduYWws IHJlcSwgcm93LCBybCk7DQorICAgICAgcG9vbCsrOw0KKyAgICAgIGlmIChybC5u ZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0KKyAgICAgICAgamFtKCk7DQorICAg ICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhzaWduYWwsIHJlcSwgcmwsIHBv b2wpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgIH0NCiAgICAgfQ0KICAgfQ0K IA0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9IChEYmluZm9TY2FuQ29uZiopc2ln bmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAgbWVtY3B5KGNvbmYsJnJlcSwgRGJp bmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciAqIHNpemVvZihVaW50 MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZvICY9IH4oRGJpbmZvU2NhbkNvbmY6 Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwocmVxLnNlbmRlclJlZiwgR1NOX0RC SU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAgICAgc2lnbmFsLCBEYmluZm9TY2Fu Q29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvciwgSkJCKTsNCisgIG5kYmluZm9f c2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEsIHJsKTsNCiB9DQogDQogLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioNCg0KPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvYmxvY2tzL3RyaXgvVHJpeC5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9z cmMva2VybmVsL2Jsb2Nrcy90cml4L1RyaXguY3BwCTIwMDktMDYtMTUgMTM6MzE6 MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL3Ry aXgvVHJpeC5jcHAJMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTM5LDkg KzM5LDYgQEANCiANCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9EYmluZm9TY2FuLmhw cD4NCiAjaW5jbHVkZSA8c2lnbmFsZGF0YS9UcmFuc0lkQUkuaHBwPg0KLSNpbmNs dWRlIDxuZGJpbmZvLmg+DQotI2luY2x1ZGUgPGRiaW5mby9uZGJpbmZvX3RhYmxl aWRzLmg+DQotDQogI2luY2x1ZGUgPHNpZ25hbGRhdGEvV2FpdEdDUC5ocHA+DQog DQogI2RlZmluZSBDT05TVFJBSU5UX1ZJT0xBVElPTiA4OTMNCkBAIC00OTUsMTUg KzQ5MiwxMyBAQCBUcml4OjpleGVjRFVNUF9TVEFURV9PUkQoU2lnbmFsKiBzaWdu YWwpDQogdm9pZCBUcml4OjpleGVjREJJTkZPX1NDQU5SRVEoU2lnbmFsICpzaWdu YWwpDQogew0KICAgRGJpbmZvU2NhblJlcSByZXE9ICooRGJpbmZvU2NhblJlcSop c2lnbmFsLT50aGVEYXRhOw0KLSAgY2hhciBidWZbNTEyXTsNCi0gIHN0cnVjdCBk YmluZm9fcm93IHI7DQotICBzdHJ1Y3QgZGJpbmZvX3JhdGVsaW1pdCBybDsNCi0N Ci0gIGRiaW5mb19yYXRlbGltaXRfaW5pdCgmcmwsICZyZXEpOw0KKyAgY29uc3Qg TmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmluZm86OlNj YW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0cigmcmVxKTsNCisgIE5k YmluZm86OlJhdGVsaW1pdCBybDsNCiANCiAgIGphbUVudHJ5KCk7DQogDQotICBp ZihyZXEudGFibGVJZCA9PSBOREJJTkZPX1BPT0xTX1RBQkxFSUQpDQorICBpZihy ZXEudGFibGVJZCA9PSBOZGJpbmZvOjpQT09MU19UQUJMRUlEKQ0KICAgew0KICAg ICBzdHJ1Y3Qgew0KICAgICAgIGNvbnN0IGNoYXIqIHBvb2xuYW1lOw0KQEAgLTUy MCwyNSArNTE1LDMwIEBAIHZvaWQgVHJpeDo6ZXhlY0RCSU5GT19TQ0FOUkVRKFNp Z25hbCAqc2kNCiAgICAgICAgICAgeyBOVUxMLCAwLCAwfQ0KICAgICAgICAgfTsN CiANCisgICAgVWludDMyIHBvb2wgPSBjdXJzb3ItPmRhdGFbMF07DQogICAgIEJs b2NrTnVtYmVyIGJuID0gYmxvY2tUb01haW4obnVtYmVyKCkpOw0KLSAgICBmb3Io aW50IGk9MDsgcG9vbHNbaV0ucG9vbG5hbWU7IGkrKykNCisgICAgd2hpbGUocG9v bHNbcG9vbF0ucG9vbG5hbWUpDQogICAgIHsNCi0gICAgICBkYmluZm9fd3JpdGVf cm93X2luaXQoJnIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KLSAgICAgIGRiaW5mb193 cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgZ2V0T3duTm9kZUlkKCkpOw0KLSAg ICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uX3VpbnQzMigmciwgYm4pOyAgICAg ICAgICAgLy8gYmxvY2sgbnVtYmVyDQotICAgICAgZGJpbmZvX3dyaXRlX3Jvd19j b2x1bW5fdWludDMyKCZyLCByZXEuaW5zdGFuY2UpOyAvLyBibG9jayBpbnN0YW5j ZQ0KLSAgICAgIGRiaW5mb193cml0ZV9yb3dfY29sdW1uKCZyLCBwb29sc1tpXS5w b29sbmFtZSwgc3RybGVuKHBvb2xzW2ldLnBvb2xuYW1lKSk7DQotICAgICAgZGJp bmZvX3dyaXRlX3Jvd19jb2x1bW5fdWludDMyKCZyLCBwb29sc1tpXS5mcmVlKTsN Ci0gICAgICBkYmluZm9fd3JpdGVfcm93X2NvbHVtbl91aW50MzIoJnIsIHBvb2xz W2ldLnNpemUpOw0KLSAgICAgIGRiaW5mb19zZW5kX3JvdyhzaWduYWwsIHIsIHJs LCByZXEuYXBpVHhuSWQsIHJlcS5hcGlSZWYpOw0KKyAgICAgIGphbSgpOw0KKyAg ICAgIE5kYmluZm86OlJvdyByb3coc2lnbmFsLCByZXEpOw0KKyAgICAgIHJvdy53 cml0ZV91aW50MzIoZ2V0T3duTm9kZUlkKCkpOw0KKyAgICAgIHJvdy53cml0ZV91 aW50MzIoYm4pOyAgICAgICAgICAgLy8gYmxvY2sgbnVtYmVyDQorICAgICAgcm93 LndyaXRlX3VpbnQzMihpbnN0YW5jZSgpKTsgLy8gYmxvY2sgaW5zdGFuY2UNCisg ICAgICByb3cud3JpdGVfc3RyaW5nKHBvb2xzW3Bvb2xdLnBvb2xuYW1lKTsNCisg ICAgICByb3cud3JpdGVfdWludDMyKHBvb2xzW3Bvb2xdLmZyZWUpOw0KKyAgICAg IHJvdy53cml0ZV91aW50MzIocG9vbHNbcG9vbF0uc2l6ZSk7DQorICAgICAgbmRi aW5mb19zZW5kX3JvdyhzaWduYWwsIHJlcSwgcm93LCBybCk7DQorICAgICAgcG9v bCsrOw0KKyAgICAgIGlmIChybC5uZWVkX2JyZWFrKHJlcSkpDQorICAgICAgew0K KyAgICAgICAgamFtKCk7DQorICAgICAgICBuZGJpbmZvX3NlbmRfc2Nhbl9icmVh ayhzaWduYWwsIHJlcSwgcmwsIHBvb2wpOw0KKyAgICAgICAgcmV0dXJuOw0KKyAg ICAgIH0NCiAgICAgfQ0KICAgfQ0KIA0KLSAgRGJpbmZvU2NhbkNvbmYgKmNvbmY9 IChEYmluZm9TY2FuQ29uZiopc2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KLSAg bWVtY3B5KGNvbmYsJnJlcSwgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0 aEN1cnNvciAqIHNpemVvZihVaW50MzIpKTsNCi0gIGNvbmYtPnJlcXVlc3RJbmZv ICY9IH4oRGJpbmZvU2NhbkNvbmY6Ok1vcmVEYXRhKTsNCi0gIHNlbmRTaWduYWwo cmVxLnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwNCi0gICAgICAgICAg ICAgc2lnbmFsLCBEYmluZm9TY2FuQ29uZjo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNv ciwgSkJCKTsNCisgIG5kYmluZm9fc2VuZF9zY2FuX2NvbmYoc2lnbmFsLCByZXEs IHJsKTsNCiB9DQogDQogLy8gQnVpbGQgaW5kZXgNCg0KPT09IG1vZGlmaWVkIGZp bGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTWFrZWZpbGUuYW0nDQotLS0g YS9zdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL01ha2VmaWxlLmFtCTIwMDktMDUt MjcgMTU6MjE6NDUgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwv dm0vTWFrZWZpbGUuYW0JMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTM4 LDcgKzM4LDggQEAgbGlia2VybmVsX2FfU09VUkNFUyA9IFwNCiAJbmRiZF9tYWxs b2NfaW1wbC5jcHAgXA0KIAlQb29sLmNwcCBXT1Bvb2wuY3BwIFJXUG9vbC5jcHAg RHluQXJyMjU2LmNwcCBMb2NrUXVldWUuY3BwIFwNCiAJR2xvYmFsRGF0YS5jcHAg XA0KLQlTYWZlTXV0ZXguY3BwDQorCVNhZmVNdXRleC5jcHAgXA0KKwlOZGJpbmZv LmNwcA0KIA0KIGxpYnNjaGVkX2FfU09VUkNFUyA9IFRpbWVRdWV1ZS5jcHAJCVwN CiAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRDb25maWcuY3BwIFwNCkBAIC0x MjAsNCArMTIxLDMgQEAgdGVzdFNhZmVNdXRleF9MREZMQUdTID0gQG5kYl9iaW5f YW1fbGRmbA0KICAgJCh0b3BfYnVpbGRkaXIpL3N0cmluZ3MvbGlibXlzdHJpbmdz bHQubGEgXA0KICAgQHJlYWRsaW5lX2xpbmtAIEBURVJNQ0FQX0xJQkANCiANCi0N Cg0KPT09IGFkZGVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRi aW5mby5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL05kYmlu Zm8uY3BwCTE5NzAtMDEtMDEgMDA6MDA6MDAgKzAwMDANCisrKyBiL3N0b3JhZ2Uv bmRiL3NyYy9rZXJuZWwvdm0vTmRiaW5mby5jcHAJMjAwOS0wNy0wMyAxMDozMToz MCArMDAwMA0KQEAgLTAsMCArMSwyOTEgQEANCisvKg0KKyAgIENvcHlyaWdodCAo QykgMjAwOSBTdW4gTWljcm9zeXN0ZW1zIEluYy4NCisgICBBbGwgcmlnaHRzIHJl c2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zLg0KKw0KKyAg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkN CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UuDQorDQorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YNCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisNCisgICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQ0KKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQorICAgRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEz MDEgIFVTQQ0KKyovDQorDQorI2luY2x1ZGUgIk5kYmluZm8uaHBwIg0KKyNpbmNs dWRlICJTaW11bGF0ZWRCbG9jay5ocHAiDQorI2luY2x1ZGUgPEF0dHJpYnV0ZUhl YWRlci5ocHA+DQorI2luY2x1ZGUgPHNpZ25hbGRhdGEvVHJhbnNJZEFJLmhwcD4N CisNCitOZGJpbmZvOjpSb3c6OlJvdyhTaWduYWwqIHNpZ25hbCwgRGJpbmZvU2Nh blJlcSYgcmVxKSA6DQorICBjb2xfY291bnRlcigwKSwNCisgIG1fcmVxKHJlcSkN Cit7DQorICAvLyBVc2UgdGhlICJ0ZW1wb3JhcnkiIHBhcnQgb2Ygc2lnbmFsLT50 aGVEYXRhIGFzIHJvdyBidWZmZXINCisgIHN0YXJ0ID0gc2lnbmFsLT5nZXREYXRh UHRyU2VuZCgpICsgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoOw0KKyAgY29u c3QgVWludDMyIGRhdGFfc3ogPSBzaXplb2Yoc2lnbmFsLT50aGVEYXRhKS9zaXpl b2Yoc2lnbmFsLT50aGVEYXRhWzBdKTsNCisgIGVuZCA9IHNpZ25hbC0+Z2V0RGF0 YVB0clNlbmQoKSArIGRhdGFfc3o7DQorICBhc3NlcnQoc3RhcnQgPCBlbmQpOw0K Kw0KKyAgY3VyciA9IHN0YXJ0Ow0KK30NCisNCitib29sDQorTmRiaW5mbzo6Um93 OjpjaGVja19idWZmZXJfc3BhY2UoQXR0cmlidXRlSGVhZGVyJiBhaCkgY29uc3QN Cit7DQorICBjb25zdCBVaW50MzIgbmVlZGVkID0gIGFoLmdldEhlYWRlclNpemUo KSArIGFoLmdldERhdGFTaXplKCk7DQorICBjb25zdCBVaW50MzIgYXZhaWwgPSAo VWludDMyKShlbmQgLSBjdXJyKTsNCisNCisgIGlmKG5lZWRlZCA+IGF2YWlsKQ0K KyAgew0KKyAgICBuZGJvdXRfYygiV2FybmluZywgdG9vIHNtYWxsIHJvdyBidWZm ZXIgZm9yIGF0dHJpYnV0ZTogJWQsICINCisgICAgICAgICAgICAgIm5lZWRlZDog JWQsIGF2YWlsOiAlZCIsIGFoLmdldEF0dHJpYnV0ZUlkKCksIG5lZWRlZCwgYXZh aWwpOw0KKyAgICBhc3NlcnQoZmFsc2UpOw0KKyAgICByZXR1cm4gZmFsc2U7IC8v IE5vdCBlbm91Z2ggcm9vbSBpbiByb3cgYnVmZmVyDQorICB9DQorICByZXR1cm4g dHJ1ZTsNCit9DQorDQordm9pZA0KK05kYmluZm86OlJvdzo6Y2hlY2tfYXR0cmli dXRlX3R5cGUoQXR0cmlidXRlSGVhZGVyJiBhaCwgQ29sdW1uVHlwZSB0eXBlKSBj b25zdA0KK3sNCisgIGNvbnN0IFRhYmxlJiB0YWIgPSBnZXRUYWJsZShtX3JlcS50 YWJsZUlkKTsNCisgIGNvbnN0IFVpbnQzMiBjb2xpZCA9IGFoLmdldEF0dHJpYnV0 ZUlkKCk7DQorICBhc3NlcnQoY29saWQgPCB0YWIubS5uY29scyk7DQorICBhc3Nl cnQodGFiLmNvbFtjb2xpZF0uY29sdHlwZSA9PSB0eXBlKTsNCit9DQorDQordm9p ZA0KK05kYmluZm86OlJvdzo6d3JpdGVfc3RyaW5nKGNvbnN0IGNoYXIqIHN0cikN Cit7DQorICBjb25zdCBzaXplX3QgY2xlbiA9IHN0cmxlbihzdHIpICsgMTsNCisg IC8vIENyZWF0ZSBBdHRyaWJ1dGVIZWFkZXINCisgIEF0dHJpYnV0ZUhlYWRlciBh aChjb2xfY291bnRlcisrLCBjbGVuKTsNCisgIGNoZWNrX2F0dHJpYnV0ZV90eXBl KGFoLCBOZGJpbmZvOjpTdHJpbmcpOw0KKyAgaWYgKCFjaGVja19idWZmZXJfc3Bh Y2UoYWgpKQ0KKyAgICByZXR1cm47DQorDQorICAvLyBXcml0ZSBBdHRyaWJ1dGVI ZWFkZXIgdG8gYnVmZmVyDQorICBhaC5pbnNlcnRIZWFkZXIoY3Vycik7DQorICBj dXJyICs9IGFoLmdldEhlYWRlclNpemUoKTsNCisNCisgIC8vIFdyaXRlIGRhdGEg dG8gYnVmZmVyDQorICBtZW1jcHkoY3Vyciwgc3RyLCBjbGVuKTsNCisgIGN1cnIg Kz0gYWguZ2V0RGF0YVNpemUoKTsNCisNCisgIGFzc2VydChjdXJyIDw9IGVuZCk7 DQorICByZXR1cm47DQorfQ0KKw0KK3ZvaWQNCitOZGJpbmZvOjpSb3c6OndyaXRl X3VpbnQzMihVaW50MzIgdmFsdWUpDQorew0KKyAgLy8gQ3JlYXRlIEF0dHJpYnV0 ZUhlYWRlcg0KKyAgQXR0cmlidXRlSGVhZGVyIGFoKGNvbF9jb3VudGVyKyssIHNp emVvZihVaW50MzIpKTsNCisgIGNoZWNrX2F0dHJpYnV0ZV90eXBlKGFoLCBOZGJp bmZvOjpOdW1iZXIpOw0KKyAgaWYgKCFjaGVja19idWZmZXJfc3BhY2UoYWgpKQ0K KyAgICByZXR1cm47DQorDQorICAvLyBXcml0ZSBBdHRyaWJ1dGVIZWFkZXIgdG8g YnVmZmVyDQorICBhaC5pbnNlcnRIZWFkZXIoY3Vycik7DQorICBjdXJyICs9IGFo LmdldEhlYWRlclNpemUoKTsNCisNCisgIC8vIFdyaXRlIGRhdGEgdG8gYnVmZmVy DQorICBtZW1jcHkoY3VyciwgJnZhbHVlLCBzaXplb2YoVWludDMyKSk7DQorICBj dXJyICs9IGFoLmdldERhdGFTaXplKCk7DQorDQorICBhc3NlcnQoY3VyciA8PSBl bmQpOw0KKyAgcmV0dXJuOw0KK30NCisNCisNCisjZGVmaW5lIERFQ0xBUkVfTkRC SU5GT19UQUJMRSh2YXIsIG51bSkgIFwNCitzdGF0aWMgY29uc3Qgc3RydWN0ICB7 ICAgICAgICAgICAgICAgICAgIFwNCisgIE5kYmluZm86OlRhYmxlOjpNZW1iZXJz IG07ICAgICAgICAgICAgIFwNCisgIE5kYmluZm86OkNvbHVtbiBjb2xbbnVtXTsg ICAgICAgICAgICAgIFwNCit9IHZhcg0KKw0KKw0KKy8qKiBSZXNlcnZlZCBmb3Ig REJJTkZPIG9ubHkgKi8NCitERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19U QUJMRVMsMykgPQ0KK3sgIlRBQkxFUyIsIDMsIDAsDQorICB7DQorICAgIHsiVEFC TEVfSUQiLCAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJUQUJMRV9OQU1FIixO ZGJpbmZvOjpTdHJpbmd9LA0KKyAgICB7IkNSRUFURV9TUUwiLE5kYmluZm86OlN0 cmluZ30sDQorICB9fTsNCisNCisvKiogUmVzZXJ2ZWQgZm9yIERCSU5GTyBvbmx5 ICovDQorREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fQ09MVU1OUyw0KSA9 DQoreyAiQ09MVU1OUyIsIDQsIDAsDQorICB7DQorICAgIHsiVEFCTEVfSUQiLCAg ICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkNPTFVNTl9JRCIsICAgTmRiaW5m bzo6TnVtYmVyfSwNCisgICAgeyJDT0xVTU5fTkFNRSIsIE5kYmluZm86OlN0cmlu Z30sDQorICAgIHsiQ09MVU1OX1RZUEUiLCBOZGJpbmZvOjpTdHJpbmd9LA0KKyAg fX07DQorDQorREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmluZm9fTUVNVVNBR0Us NykgPQ0KK3sgIk1FTVVTQUdFIiwgNywgMCwNCisgIHsNCisgICAgeyJOT0RFX0lE IiwgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJCTE9DS19OVU1C RVIiLCAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJCTE9DS19JTlNUQU5D RSIsICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJSRVNPVVJDRV9OQU1FIiwg ICAgTmRiaW5mbzo6U3RyaW5nfSwNCisgICAgeyJQQUdFX1NJWkUiLCAgICAgICAg TmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJQQUdFU19VU0VEIiwgICAgICAgTmRi aW5mbzo6TnVtYmVyfSwNCisgICAgeyJQQUdFU19UT1RBTCIsICAgICAgTmRiaW5m bzo6TnVtYmVyfSwNCisgIH19Ow0KKw0KK0RFQ0xBUkVfTkRCSU5GT19UQUJMRShu ZGJpbmZvX0xPR0RFU1RJTkFUSU9OLDUpID0NCit7ICJMT0dERVNUSU5BVElPTiIs IDUsIDAsDQorICB7DQorICAgIHsiTk9ERV9JRCIsTmRiaW5mbzo6TnVtYmVyfSwN CisgICAgeyJUWVBFIixOZGJpbmZvOjpTdHJpbmd9LA0KKyAgICB7IlBBUkFNUyIs TmRiaW5mbzo6U3RyaW5nfSwNCisgICAgeyJDVVJSRU5UX1NJWkUiLE5kYmluZm86 Ok51bWJlcn0sDQorICAgIHsiTUFYX1NJWkUiLE5kYmluZm86Ok51bWJlcn0sDQor ICB9DQorfTsNCisNCitERUNMQVJFX05EQklORk9fVEFCTEUobmRiaW5mb19CQUNL VVBfUkVDT1JEUywxMSkgPQ0KK3sgIkJBQ0tVUF9SRUNPUkRTIiwgMTEsIDAsDQor ICB7DQorICAgIHsiTk9ERV9JRCIsICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0s DQorICAgIHsiQkFDS1VQX1JFQ09SRCIsICAgIE5kYmluZm86Ok51bWJlcn0sDQor ICAgIHsiQkFDS1VQX0lEIiwgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAg IHsiTUFTVEVSX1JFRiIsICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsi Q0xJRU5UX1JFRiIsICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiU1RB VEUiLCAgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiQllURVMi LCAgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiUkVDT1JEUyIs ICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiTE9HX0JZVEVTIiwg ICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiTE9HX1JFQ09SRFMiLCAg ICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiRVJST1JfQ09ERSIsICAgICAg IE5kYmluZm86Ok51bWJlcn0sDQorICB9DQorfTsNCisNCitERUNMQVJFX05EQklO Rk9fVEFCTEUobmRiaW5mb19CQUNLVVBfUEFSQU1FVEVSUywxNCkgPQ0KK3sgIkJB Q0tVUF9QQVJBTUVURVJTIiwgMTQsIDAsDQorICB7DQorICAgIHsiTk9ERV9JRCIs ICAgICAgICAgICAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJDVVJS RU5UX0RJU0tfV1JJVEVfU1BFRUQiLCBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7 IkJZVEVTX1dSSVRURU5fVEhJU19QRVJJT0QiLE5kYmluZm86Ok51bWJlcn0sDQor ICAgIHsiT1ZFUkZMT1dfRElTS19XUklURSIsICAgICAgTmRiaW5mbzo6TnVtYmVy fSwNCisgICAgeyJSRVNFVF9ERUxBWV9VU0VEIiwgICAgICAgICBOZGJpbmZvOjpO dW1iZXJ9LA0KKyAgICB7IlJFU0VUX0RJU0tfU1BFRURfVElNRSIsICAgIE5kYmlu Zm86Ok51bWJlcn0sDQorICAgIHsiQkFDS1VQX1BPT0xfU0laRSIsICAgICAgICAg TmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJCQUNLVVBfRklMRV9QT09MX1NJWkUi LCAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlRBQkxFX1BPT0xfU0laRSIs ICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAgIHsiVFJJR0dFUl9QT09M X1NJWkUiLCAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgICAgeyJGUkFHTUVO VF9QT09MX1NJWkUiLCAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IlBB R0VfUE9PTF9TSVpFIiwgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0sDQorICAg IHsiQ09NUFJFU1NFRF9CQUNLVVAiLCAgICAgICAgTmRiaW5mbzo6TnVtYmVyfSwN CisgICAgeyJDT01QUkVTU0VEX0xDUCIsICAgICAgICAgICBOZGJpbmZvOjpOdW1i ZXJ9LA0KKyAgfQ0KK307DQorDQorREVDTEFSRV9OREJJTkZPX1RBQkxFKG5kYmlu Zm9fUE9PTFMsNikgPQ0KK3sgIlBPT0xTIiwgNiwgMCwNCisgIHsNCisgICAgeyJO T0RFX0lEIiwgICAgICAgICAgICAgICAgICBOZGJpbmZvOjpOdW1iZXJ9LA0KKyAg ICB7IkJMT0NLX05VTUJFUiIsICAgICAgICAgICAgIE5kYmluZm86Ok51bWJlcn0s DQorICAgIHsiQkxPQ0tfSU5TVEFOQ0UiLCAgICAgICAgICAgTmRiaW5mbzo6TnVt YmVyfSwNCisgICAgeyJQT09MX05BTUUiLCAgICAgICAgICAgICAgICBOZGJpbmZv OjpTdHJpbmd9LA0KKyAgICB7IkZSRUUiLCAgICAgICAgICAgICAgICAgICAgIE5k YmluZm86Ok51bWJlcn0sDQorICAgIHsiU0laRSIsICAgICAgICAgICAgICAgICAg ICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgIH0NCit9Ow0KKw0KK0RFQ0xBUkVfTkRC SU5GT19UQUJMRShuZGJpbmZvX1RFU1QsNCkgPQ0KK3sgIlRFU1QiLCA0LCAwLA0K KyAgew0KKyAgICB7Ik5PREVfSUQiLCAgICAgICAgICAgICAgICAgTmRiaW5mbzo6 TnVtYmVyfSwNCisgICAgeyJCTE9DS19OVU1CRVIiLCAgICAgICAgICAgIE5kYmlu Zm86Ok51bWJlcn0sDQorICAgIHsiQkxPQ0tfSU5TVEFOQ0UiLCAgICAgICAgICBO ZGJpbmZvOjpOdW1iZXJ9LA0KKyAgICB7IkNPVU5URVIiLCAgICAgICAgICAgICAg ICAgTmRiaW5mbzo6TnVtYmVyfSwNCisgIH0NCit9Ow0KKw0KKyNkZWZpbmUgREJJ TkZPVEJMKHgpIChOZGJpbmZvOjpUYWJsZSopJngNCisNCitzdGF0aWMgTmRiaW5m bzo6VGFibGUgKm5kYmluZm9fdGFibGVzW10gPSB7DQorICBEQklORk9UQkwobmRi aW5mb19UQUJMRVMpLA0KKyAgREJJTkZPVEJMKG5kYmluZm9fQ09MVU1OUyksDQor ICBEQklORk9UQkwobmRiaW5mb19NRU1VU0FHRSksDQorICBEQklORk9UQkwobmRi aW5mb19MT0dERVNUSU5BVElPTiksDQorICBEQklORk9UQkwobmRiaW5mb19CQUNL VVBfUkVDT1JEUyksDQorICBEQklORk9UQkwobmRiaW5mb19CQUNLVVBfUEFSQU1F VEVSUyksDQorICBEQklORk9UQkwobmRiaW5mb19QT09MUyksDQorICBEQklORk9U QkwobmRiaW5mb19URVNUKSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbnVtYmVyX25k YmluZm9fdGFibGVzID0NCisgIHNpemVvZihuZGJpbmZvX3RhYmxlcykgLyBzaXpl b2YobmRiaW5mb190YWJsZXNbMF0pOw0KKw0KKw0KK2ludCBOZGJpbmZvOjpnZXRO dW1UYWJsZXMoKXsNCisgIHJldHVybiBudW1iZXJfbmRiaW5mb190YWJsZXM7DQor fQ0KKw0KK2NvbnN0IE5kYmluZm86OlRhYmxlJiBOZGJpbmZvOjpnZXRUYWJsZShp bnQgaSkNCit7DQorICBhc3NlcnQoaSA+PSAwICYmIGkgPCBudW1iZXJfbmRiaW5m b190YWJsZXMpOw0KKyAgcmV0dXJuICpuZGJpbmZvX3RhYmxlc1tpXTsNCit9DQor DQorY29uc3QgTmRiaW5mbzo6VGFibGUmIE5kYmluZm86OmdldFRhYmxlKFVpbnQz MiBpKQ0KK3sNCisgIHJldHVybiBnZXRUYWJsZSgoaW50KWkpOw0KK30NCisNCitp bnQNCitOZGJpbmZvOjpjcmVhdGVfc3FsKGNvbnN0IE5kYmluZm86OlRhYmxlJiB0 YWIsDQorICAgICAgICAgICAgICAgICAgICBjaGFyKiBzcWwsIGludCBsZW4sDQor ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsaW5lX3NlcGFyYXRvcikN Cit7DQorICBteV9zbnByaW50ZihzcWwsbGVuLCJDUkVBVEUgVEFCTEUgYCVzYCAo IiwgdGFiLm0ubmFtZSk7DQorDQorICBsZW4tPXN0cmxlbihzcWwpOw0KKyAgc3Fs Kz1zdHJsZW4oc3FsKTsNCisgIGlmKGxlbjwwKQ0KKyAgICByZXR1cm4gRU5PTUVN Ow0KKw0KKyAgZm9yKGludCBpID0gMDsgaSA8IHRhYi5tLm5jb2xzOyBpKyspDQor ICB7DQorICAgIG15X3NucHJpbnRmKHNxbCwgbGVuLCAiJXNcdGAlc2AgJXMsIiwN CisgICAgICAgICAgICAgICAgbGluZV9zZXBhcmF0b3IsIHRhYi5jb2xbaV0ubmFt ZSwNCisgICAgICAgICAgICAgICAgY29sdHlwZV90b19zdHJpbmcodGFiLmNvbFtp XS5jb2x0eXBlKSk7DQorICAgIGxlbi09c3RybGVuKHNxbCk7DQorICAgIHNxbCs9 c3RybGVuKHNxbCk7DQorICAgIGlmKGxlbjwwKQ0KKyAgICAgIHJldHVybiBFTk9N RU07DQorICB9DQorICAqKC0tc3FsKT0nXDAnOw0KKyAgbXlfc25wcmludGYoc3Fs LGxlbiwiJXMpIEVOR0lORT1OREJJTkZPOyIsIGxpbmVfc2VwYXJhdG9yKTsNCisg IGxlbi09c3RybGVuKHNxbCk7DQorICBzcWwrPXN0cmxlbihzcWwpOw0KKyAgaWYo bGVuPDApDQorICAgIHJldHVybiBFTk9NRU07DQorDQorICByZXR1cm4gMDsNCit9 DQorDQorY29uc3QgY2hhcioNCitOZGJpbmZvOjpjb2x0eXBlX3RvX3N0cmluZyhD b2x1bW5UeXBlIGNvbHR5cGUpIHsNCisgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBl X3N0cmluZ1tdPSB7Ik5PTkUiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiVkFSQ0hBUig1MTIpIiwNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIklOVCBVTlNJR05FRCINCisgIH07DQorDQorICBp Zihjb2x0eXBlPjMpDQorICAgIGNvbHR5cGU9IChDb2x1bW5UeXBlKTA7DQorDQor ICByZXR1cm4gdHlwZV9zdHJpbmdbY29sdHlwZV07DQorfQ0KKw0KKw0KDQo9PT0g YWRkZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9OZGJpbmZvLmhw cCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vTmRiaW5mby5ocHAJ MTk3MC0wMS0wMSAwMDowMDowMCArMDAwMA0KKysrIGIvc3RvcmFnZS9uZGIvc3Jj L2tlcm5lbC92bS9OZGJpbmZvLmhwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAw DQpAQCAtMCwwICsxLDE1OSBAQA0KKy8qDQorICAgQ29weXJpZ2h0IChDKSAyMDA5 IFN1biBNaWNyb3N5c3RlbXMgSW5jLg0KKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQu IFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuDQorDQorICAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkNCisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAgIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZS4NCisNCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zg0KKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKw0KKyAgIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl DQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUNCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSAgVVNB DQorKi8NCisNCisjaWZuZGVmIEtFUk5FTF9OREJJTkZPX0hQUA0KKyNkZWZpbmUg S0VSTkVMX05EQklORk9fSFBQDQorDQorI2luY2x1ZGUgPHNpZ25hbGRhdGEvRGJp bmZvU2Nhbi5ocHA+DQorDQorY2xhc3MgTmRiaW5mbyB7DQorcHVibGljOg0KKw0K KyAgZW51bSBDb2x1bW5UeXBlIHsNCisgICAgU3RyaW5nID0gMSwNCisgICAgTnVt YmVyID0gMg0KKyAgfTsNCisNCisgIHN0cnVjdCBDb2x1bW4gew0KKyAgICBjaGFy IG5hbWVbNTBdOw0KKyAgICBDb2x1bW5UeXBlIGNvbHR5cGU7DQorICB9Ow0KKw0K KyAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbHR5cGVfdG9fc3RyaW5nKENvbHVtblR5 cGUgY29sdHlwZSk7DQorDQorICBlbnVtIFRhYmxlSWQgew0KKyAgICBUQUJMRVNf VEFCTEVJRCA9ICAgICAgICAgICAgIDAsDQorICAgIENPTFVNTlNfVEFCTEVJRCA9 ICAgICAgICAgICAgMSwNCisgICAgTUVNVVNBR0VfVEFCTEVJRCA9ICAgICAgICAg ICAyLA0KKyAgICBMT0dERVNUSU5BVElPTl9UQUJMRUlEID0gICAgIDMsDQorICAg IEJBQ0tVUF9SRUNPUkRTX1RBQkxFSUQgPSAgICAgNCwNCisgICAgQkFDS1VQX1BB UkFNRVRFUlNfVEFCTEVJRCA9ICA1LA0KKyAgICBQT09MU19UQUJMRUlEID0gICAg ICAgICAgICAgIDYsDQorICAgIFRFU1RfVEFCTEVJRCA9ICAgICAgICAgICAgICAg Nw0KKyAgfTsNCisNCisgIHN0cnVjdCBUYWJsZSB7DQorICAgIHN0cnVjdCBNZW1i ZXJzIHsNCisgICAgICBjaGFyIG5hbWVbNTBdOw0KKyAgICAgIGludCBuY29sczsN CisgICAgICBpbnQgZmxhZ3M7DQorICAgIH0gbTsNCisgICAgQ29sdW1uIGNvbFsx XTsNCisNCisgICAgaW50IGNvbHVtbnModm9pZCkgY29uc3Qgew0KKyAgICAgIHJl dHVybiBtLm5jb2xzOw0KKyAgICB9DQorICB9Ow0KKyAgc3RhdGljIGludCBnZXRO dW1UYWJsZXMoKTsNCisgIHN0YXRpYyBjb25zdCBUYWJsZSYgZ2V0VGFibGUoaW50 IGkpOw0KKyAgc3RhdGljIGNvbnN0IFRhYmxlJiBnZXRUYWJsZShVaW50MzIgaSk7 DQorICBzdGF0aWMgaW50IGNyZWF0ZV9zcWwoY29uc3QgVGFibGUmIHQsIGNoYXIq IHNxbCwgaW50IGxlbiwNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBsaW5lX3NlcGFyYXRvciA9ICJcbiIpOw0KKw0KKyAgY2xhc3MgUm93IHsN CisgICAgZnJpZW5kIGNsYXNzIFNpbXVsYXRlZEJsb2NrOw0KKyAgICBVaW50MzIq IHN0YXJ0OyAgICAgIC8vIFN0YXJ0IG9mIHJvdyBidWZmZXINCisgICAgVWludDMy KiBjdXJyOyAgICAgICAvLyBDdXJyZW50IHBvc2l0aW9uIGluIHJvdyBidWZmZXIN CisgICAgVWludDMyKiBlbmQ7ICAgICAgICAvLyBFbmQgb2YgYnVmZmVyDQorICAg IGludCBjb2xfY291bnRlcjsgICAgLy8gQ3VycmVudCBjb2x1bW4gY291bnRlcg0K KyAgICBEYmluZm9TY2FuJiBtX3JlcTsgIC8vIFRoZSBzY2FuIHBhcmFtZXRlcnMN CisgICAgUm93KCk7ICAgICAgICAgICAgICAvLyBOb3QgaW1wbA0KKyAgICBSb3co Y29uc3QgUm93Jik7ICAgIC8vIE5vdCBpbXBsDQorICBwdWJsaWM6DQorDQorICAg IFJvdyhjbGFzcyBTaWduYWwqIHNpZ25hbCwgRGJpbmZvU2NhblJlcSYgcmVxKTsN CisNCisgICAgVWludDMyIGdldExlbmd0aCh2b2lkKSBjb25zdCB7DQorICAgICAg cmV0dXJuIChVaW50MzIpKGN1cnIgLSBzdGFydCk7DQorICAgIH0NCisNCisgICAg VWludDMyKiBnZXREYXRhUHRyKCkgY29uc3Qgew0KKyAgICAgIHJldHVybiBzdGFy dDsNCisgICAgfQ0KKw0KKyAgICB2b2lkIHdyaXRlX3N0cmluZyhjb25zdCBjaGFy KiBjb2wpOw0KKyAgICB2b2lkIHdyaXRlX3VpbnQzMihVaW50MzIgdmFsdWUpOw0K Kw0KKyAgICBpbnQgY29sdW1ucyh2b2lkKSBjb25zdCB7DQorICAgICAgcmV0dXJu IGNvbF9jb3VudGVyOw0KKyAgICB9DQorDQorICBwcml2YXRlOg0KKyAgICBib29s IGNoZWNrX2J1ZmZlcl9zcGFjZShjbGFzcyBBdHRyaWJ1dGVIZWFkZXImIGFoKSBj b25zdDsNCisgICAgdm9pZCBjaGVja19hdHRyaWJ1dGVfdHlwZShjbGFzcyBBdHRy aWJ1dGVIZWFkZXImIGFoLCBDb2x1bW5UeXBlKSBjb25zdDsNCisgIH07DQorDQor ICBzdHJ1Y3QgU2NhbkN1cnNvcg0KKyAgew0KKyAgICBVaW50MzIgc2VuZGVyUmVm Ow0KKyAgICBVaW50MzIgc2F2ZVNlbmRlclJlZjsNCisgICAgVWludDMyIGN1cnJS ZWY7IC8vIFRoZSBjdXJyZW50IG5vZGUsIGJsb2NrIGFuZCBpbnN0YW5jZQ0KKyAg ICBVaW50MzIgc2F2ZUN1cnJSZWY7DQorICAgIC8qKg0KKyAgICAgKiBGbGFncw0K KyAgICAgKg0KKyAgICAgbSA9IE1vcmUgZGF0YSAgICAgICAgIC0gMSAgQml0IDEN CisNCisgICAgICAgICAgICAgICAxMTExMTExMTExMjIyMjIyMjIyMjMzDQorICAg ICAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQ0KKyAgICAgbQ0KKyAg ICAqLw0KKyAgICBVaW50MzIgZmxhZ3M7DQorICAgIFVpbnQzMiBkYXRhWzRdOyAg Ly8gQ3Vyc29yIGRhdGENCisNCisgICAgVWludDMyIHRvdGFsUm93czsgLy8gTUFT ViBobW0/IElzIGl0IHJlYWxseSB1c2VkLi4uDQorICAgIFVpbnQzMiB0b3RhbEJ5 dGVzOw0KKyAgICBTVEFUSUNfQ09OU1QoIExlbmd0aCA9IDEwICk7DQorICAgIA0K KyAgICBTVEFUSUNfQ09OU1QoIE1PUkVEQVRBX1NISUZUID0gMCApOw0KKyAgICBT VEFUSUNfQ09OU1QoIE1PUkVEQVRBX01BU0sgPSAxICk7DQorDQorICAgIHN0YXRp YyBib29sIGdldEhhc01vcmVEYXRhKGNvbnN0IFVpbnRSICYgZmxhZ3Mpew0KKyAg ICAgIHJldHVybiAoYm9vbCkoKGZsYWdzID4+IE1PUkVEQVRBX1NISUZUKSAmIE1P UkVEQVRBX01BU0spOw0KKyAgICB9DQorICAgIHN0YXRpYyB2b2lkIHNldEhhc01v cmVEYXRhKFVpbnRSICYgZmxhZ3MsIGJvb2wgdmFsdWUpew0KKyAgICAgIGZsYWdz ID0gKGZsYWdzICYgfihNT1JFREFUQV9NQVNLIDw8IE1PUkVEQVRBX1NISUZUKSkg fA0KKyAgICAgICAgICAgICAgKCh2YWx1ZSAmIE1PUkVEQVRBX01BU0spIDw8IE1P UkVEQVRBX1NISUZUKTsNCisgICAgfQ0KKyAgfTsNCisNCisgIGNsYXNzIFJhdGVs aW1pdCB7DQorICAgIGZyaWVuZCBjbGFzcyBTaW11bGF0ZWRCbG9jazsNCisgICAg VWludDMyIHJvd3M7DQorICAgIFVpbnQzMiBieXRlczsNCisgICAgUmF0ZWxpbWl0 KGNvbnN0IFJhdGVsaW1pdCYpOy8vIE5vdCBpbXBsDQorICBwdWJsaWM6DQorICAg IFJhdGVsaW1pdCgpIDoNCisgICAgICByb3dzKDApLA0KKyAgICAgIGJ5dGVzKDAp ew0KKyAgICB9DQorDQorICAgIGJvb2wgbmVlZF9icmVhayhjb25zdCBEYmluZm9T Y2FuJiBzY2FuKSBjb25zdCB7DQorICAgICAgLy8gQXV0b21hdGljYWxseSBsaW1p dCB0aGUgbWF4Um93cyB2YWx1ZQ0KKyAgICAgIFVpbnQzMiBtYXhSb3dzID0gbWlu KHNjYW4ubWF4Um93cyA/IHNjYW4ubWF4Um93cyA6IDI1NiwgMjU2KTsNCisNCisg ICAgICBpZiAobWF4Um93cyAhPSAwICYmIHJvd3MgPj0gbWF4Um93cykNCisgICAg ICAgIHJldHVybiB0cnVlOyAvLyBNb3JlIHRoYW4gbWF4IHJvd3MgYWxyZWFkeSBz ZW50DQorICAgICAgaWYgKHNjYW4ubWF4Qnl0ZXMgIT0gMCAmJiAgYnl0ZXMgPj0g c2Nhbi5tYXhCeXRlcykNCisgICAgICAgIHJldHVybiB0cnVlOyAvLyBNb3JlIHRo YW4gbWF4IGJ5dGVzIGFscmVhZHkgc2VudA0KKyAgICAgIHJldHVybiBmYWxzZTsN CisgICAgfQ0KKyAgfTsNCit9Ow0KKw0KKyNlbmRpZg0KDQo9PT0gbW9kaWZpZWQg ZmlsZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5j cHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL3ZtL1NpbXVsYXRlZEJs b2NrLmNwcAkyMDA5LTA2LTMwIDE4OjQ5OjUzICswMDAwDQorKysgYi9zdG9yYWdl L25kYi9zcmMva2VybmVsL3ZtL1NpbXVsYXRlZEJsb2NrLmNwcAkyMDA5LTA3LTAz IDExOjEzOjU5ICswMDAwDQpAQCAtNTQsNiArNTQsOCBAQA0KICNpbmNsdWRlIDxz aWduYWxkYXRhL0NhbGxiYWNrU2lnbmFsLmhwcD4NCiAjaW5jbHVkZSAiTG9uZ1Np Z25hbEltcGwuaHBwIg0KIA0KKyNpbmNsdWRlIDxzaWduYWxkYXRhL1RyYW5zSWRB SS5ocHA+DQorDQogI2luY2x1ZGUgPEV2ZW50TG9nZ2VyLmhwcD4NCiBleHRlcm4g RXZlbnRMb2dnZXIgKiBnX2V2ZW50TG9nZ2VyOw0KIA0KQEAgLTM2NjMsMyArMzY2 NSw5NiBAQCBTaW11bGF0ZWRCbG9jazo6ZGVidWdPdXRUYWcoY2hhciAqYnVmLCBp DQogICByZXR1cm4gYnVmOw0KIH0NCiAjZW5kaWYNCisNCit2b2lkDQorU2ltdWxh dGVkQmxvY2s6Om5kYmluZm9fc2VuZF9yb3coU2lnbmFsKiBzaWduYWwsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGJpbmZvU2NhblJl cSYgcmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IE5kYmluZm86OlJvdyYgcm93LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5kYmluZm86OlJhdGVsaW1pdCYgcmwpIGNvbnN0DQorew0KKyAgLy8g Q2hlY2sgY29ycmVjdCBudW1iZXIgb2YgY29sdW1ucyBhZ2FpbnN0IHRhYmxlDQor ICBhc3NlcnQocm93LmNvbHVtbnMoKSA9PSBOZGJpbmZvOjpnZXRUYWJsZShyZXEu dGFibGVJZCkuY29sdW1ucygpKTsNCisNCisgIFRyYW5zSWRBSSAqdGlkYWk9IChU cmFuc0lkQUkqKXNpZ25hbC0+Z2V0RGF0YVB0clNlbmQoKTsNCisgIHRpZGFpLT5j b25uZWN0UHRyPSByZXEucmVzdWx0RGF0YTsNCisgIHRpZGFpLT50cmFuc0lkWzBd PSByZXEudHJhbnNJZFswXTsNCisgIHRpZGFpLT50cmFuc0lkWzFdPSByZXEudHJh bnNJZFsxXTsNCisNCisgIExpbmVhclNlY3Rpb25QdHIgcHRyWzNdOw0KKyAgcHRy WzBdLnAgPSByb3cuZ2V0RGF0YVB0cigpOw0KKyAgcHRyWzBdLnN6ID0gcm93Lmdl dExlbmd0aCgpOw0KKw0KKyAgcmwucm93cysrOw0KKyAgcmwuYnl0ZXMgKz0gcm93 LmdldExlbmd0aCgpOw0KKw0KKyAgc2VuZFNpZ25hbChyZXEucmVzdWx0UmVmLCBH U05fREJJTkZPX1RSQU5TSURfQUksDQorICAgICAgICAgICAgIHNpZ25hbCwgVHJh bnNJZEFJOjpIZWFkZXJMZW5ndGgsIEpCQiwgcHRyLCAxKTsNCit9DQorDQordm9p ZA0KK1NpbXVsYXRlZEJsb2NrOjpuZGJpbmZvX3NlbmRfc2Nhbl9icmVhayhTaWdu YWwqIHNpZ25hbCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEYmluZm9TY2FuUmVxJiByZXEsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgTmRiaW5mbzo6UmF0ZWxpbWl0JiBybCwN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIg ZGF0YTEsIFVpbnQzMiBkYXRhMiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVaW50MzIgZGF0YTMsIFVpbnQzMiBkYXRhNCkgY29uc3QN Cit7DQorICBEYmluZm9TY2FuQ29uZiogY29uZj0gKERiaW5mb1NjYW5Db25mKilz aWduYWwtPmdldERhdGFQdHJTZW5kKCk7DQorICBjb25zdCBVaW50MzIgc2lnbmFs X2xlbmd0aCA9IERiaW5mb1NjYW5SZXE6OlNpZ25hbExlbmd0aCArIHJlcS5jdXJz b3Jfc3o7DQorICBNRU1DT1BZX05PX1dPUkRTKGNvbmYsICZyZXEsIHNpZ25hbF9s ZW5ndGgpOw0KKw0KKyAgY29uZi0+cmV0dXJuZWRSb3dzID0gcmwucm93czsNCisN CisgIC8vIFVwZGF0ZSB0aGUgY3Vyc29yIHdpdGggY3VycmVudCBpdGVtIG51bWJl cg0KKyAgTmRiaW5mbzo6U2NhbkN1cnNvciogY3Vyc29yID0NCisgICAgKE5kYmlu Zm86OlNjYW5DdXJzb3IqKURiaW5mb1NjYW46OmdldEN1cnNvclB0clNlbmQoY29u Zik7DQorDQorICBjdXJzb3ItPmRhdGFbMF0gPSBkYXRhMTsNCisgIGN1cnNvci0+ ZGF0YVsxXSA9IGRhdGEyOw0KKyAgY3Vyc29yLT5kYXRhWzJdID0gZGF0YTM7DQor ICBjdXJzb3ItPmRhdGFbM10gPSBkYXRhNDsNCisNCisgIC8vIEluY3JlYXNlIG51 bWJlciBvZiByb3dzIGFuZCBieXRlcyBzZW50IHRvIGZhcg0KKyAgY3Vyc29yLT50 b3RhbFJvd3MgKz0gcmwucm93czsNCisgIGN1cnNvci0+dG90YWxCeXRlcyArPSBy bC5ieXRlczsNCisNCisgIE5kYmluZm86OlNjYW5DdXJzb3I6OnNldEhhc01vcmVE YXRhKGN1cnNvci0+ZmxhZ3MsIHRydWUpOw0KKw0KKyAgc2VuZFNpZ25hbChjdXJz b3ItPnNlbmRlclJlZiwgR1NOX0RCSU5GT19TQ0FOQ09ORiwgc2lnbmFsLA0KKyAg ICAgICAgICAgICBzaWduYWxfbGVuZ3RoLCBKQkIpOw0KK30NCisNCit2b2lkDQor U2ltdWxhdGVkQmxvY2s6Om5kYmluZm9fc2VuZF9zY2FuX2NvbmYoU2lnbmFsKiBz aWduYWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGJpbmZvU2NhblJlcSYgcmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IE5kYmluZm86OlJhdGVsaW1pdCYgcmwpIGNvbnN0 DQorew0KKyAgRGJpbmZvU2NhbkNvbmYqIGNvbmY9IChEYmluZm9TY2FuQ29uZiop c2lnbmFsLT5nZXREYXRhUHRyU2VuZCgpOw0KKyAgY29uc3QgVWludDMyIHNpZ25h bF9sZW5ndGggPSBEYmluZm9TY2FuUmVxOjpTaWduYWxMZW5ndGggKyByZXEuY3Vy c29yX3N6Ow0KKyAgVWludDMyIHNlbmRlcl9yZWYgPSByZXEucmVzdWx0UmVmOw0K KyAgTUVNQ09QWV9OT19XT1JEUyhjb25mLCAmcmVxLCBzaWduYWxfbGVuZ3RoKTsN CisNCisgIGNvbmYtPnJldHVybmVkUm93cyA9IHJsLnJvd3M7DQorDQorICBpZiAo cmVxLmN1cnNvcl9zeikNCisgIHsNCisgICAgamFtKCk7DQorICAgIC8vIFVwZGF0 ZSB0aGUgY3Vyc29yIHdpdGggY3VycmVudCBpdGVtIG51bWJlcg0KKyAgICBOZGJp bmZvOjpTY2FuQ3Vyc29yKiBjdXJzb3IgPQ0KKyAgICAgIChOZGJpbmZvOjpTY2Fu Q3Vyc29yKilEYmluZm9TY2FuOjpnZXRDdXJzb3JQdHJTZW5kKGNvbmYpOw0KKw0K KyAgICAvLyBSZXNldCBhbGwgZGF0YSBob2xkZXJzDQorICAgIG1lbXNldChjdXJz b3ItPmRhdGEsIDAsIHNpemVvZihjdXJzb3ItPmRhdGEpKTsNCisNCisgICAgLy8g SW5jcmVhc2UgbnVtYmVyIG9mIHJvd3MgYW5kIGJ5dGVzIHNlbnQgdG8gZmFyDQor ICAgIGN1cnNvci0+dG90YWxSb3dzICs9IHJsLnJvd3M7DQorICAgIGN1cnNvci0+ dG90YWxCeXRlcyArPSBybC5ieXRlczsNCisNCisgICAgTmRiaW5mbzo6U2NhbkN1 cnNvcjo6c2V0SGFzTW9yZURhdGEoY3Vyc29yLT5mbGFncywgZmFsc2UpOw0KKw0K KyAgICBzZW5kZXJfcmVmID0gY3Vyc29yLT5zZW5kZXJSZWY7DQorDQorICB9DQor ICBzZW5kU2lnbmFsKHNlbmRlcl9yZWYsIEdTTl9EQklORk9fU0NBTkNPTkYsIHNp Z25hbCwNCisgICAgICAgICAgICAgc2lnbmFsX2xlbmd0aCwgSkJCKTsNCit9DQor DQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL3Zt L1NpbXVsYXRlZEJsb2NrLmhwcCcNCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJu ZWwvdm0vU2ltdWxhdGVkQmxvY2suaHBwCTIwMDktMDYtMzAgMTg6NDk6NTMgKzAw MDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxv Y2suaHBwCTIwMDktMDctMDMgMTE6MTM6NTkgKzAwMDANCkBAIC01OCw2ICs1OCw4 IEBADQogI2luY2x1ZGUgIm5kYmRfbWFsbG9jX2ltcGwuaHBwIg0KICNpbmNsdWRl IDxibG9ja3MvcmVjb3JkX3R5cGVzLmhwcD4NCiANCisjaW5jbHVkZSAiTmRiaW5m by5ocHAiDQorDQogI2lmZGVmIFZNX1RSQUNFDQogI2RlZmluZSBEKHgpIFwNCiAg IGRvIHsgXA0KQEAgLTEwMDYsNiArMTAwOCwyMSBAQCBwdWJsaWM6DQogICB2b2lk IGRlYnVnT3V0VW5sb2NrKCkgeyBnbG9iYWxTaWduYWxMb2dnZXJzLnVubG9jaygp OyB9DQogICBjb25zdCBjaGFyKiBkZWJ1Z091dFRhZyhjaGFyKiBidWYsIGludCBs aW5lKTsNCiAjZW5kaWYNCisNCisgIHZvaWQgbmRiaW5mb19zZW5kX3JvdyhTaWdu YWwqIHNpZ25hbCwNCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEYmlu Zm9TY2FuUmVxJiByZXEsDQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg TmRiaW5mbzo6Um93JiByb3csDQorICAgICAgICAgICAgICAgICAgICAgICAgTmRi aW5mbzo6UmF0ZWxpbWl0JiBybCkgY29uc3Q7DQorDQorICB2b2lkIG5kYmluZm9f c2VuZF9zY2FuX2JyZWFrKFNpZ25hbCogc2lnbmFsLA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEYmluZm9TY2FuUmVxJiByZXEsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYmluZm86OlJhdGVsaW1pdCYg cmwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBkYXRh MSwgVWludDMyIGRhdGEyID0gMCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVWludDMyIGRhdGEzID0gMCwgVWludDMyIGRhdGE0ID0gMCkgY29uc3Q7 DQorDQorICB2b2lkIG5kYmluZm9fc2VuZF9zY2FuX2NvbmYoU2lnbmFsKiBzaWdu YWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGJpbmZvU2NhblJl cSYgcmVxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5k YmluZm86OlJhdGVsaW1pdCYgcmwpIGNvbnN0Ow0KIH07DQogDQogLy8gb3V0c2lk ZSBibG9ja3MgZS5nLiB3aXRoaW4gYSBzdHJ1Y3QNCg0KPT09IG1vZGlmaWVkIGZp bGUgJ3N0b3JhZ2UvbmRiL3NyYy9tZ21zcnYvTWFrZWZpbGUuYW0nDQotLS0gYS9z dG9yYWdlL25kYi9zcmMvbWdtc3J2L01ha2VmaWxlLmFtCTIwMDktMDUtMjcgMTU6 MjE6NDUgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9tZ21zcnYvTWFrZWZp bGUuYW0JMjAwOS0wNy0wMyAxMDozMTozMCArMDAwMA0KQEAgLTMwLDcgKzMwLDYg QEAgbmRiX21nbWRfU09VUkNFUyA9IFwNCiAJQ29uZmlnSW5mby5jcHAgXA0KIAlJ bml0Q29uZmlnRmlsZVBhcnNlci5jcHAgXA0KIAlDb25maWcuY3BwIFwNCi0JbWdt X25kYmluZm8uY3BwIFwNCiAJQ29uZmlnTWFuYWdlci5jcHAgXA0KIAlEaXJJdGVy YXRvci5jcHANCiANCg0KPT09IHJlbW92ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3Jj L21nbXNydi9tZ21fbmRiaW5mby5jcHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMv bWdtc3J2L21nbV9uZGJpbmZvLmNwcAkyMDA4LTEwLTA2IDA2OjUzOjA0ICswMDAw DQorKysgYi9zdG9yYWdlL25kYi9zcmMvbWdtc3J2L21nbV9uZGJpbmZvLmNwcAkx OTcwLTAxLTAxIDAwOjAwOjAwICswMDAwDQpAQCAtMSwxNCArMCwwIEBADQotDQot I2luY2x1ZGUgPEJhc2VTdHJpbmcuaHBwPg0KLSNpbmNsdWRlIDxuZGJpbmZvLmg+ DQotDQotaW50IHByaW50X25kYmluZm9fdGFibGVfbWdtKHN0cnVjdCBuZGJpbmZv X3RhYmxlKiB0LCBCYXNlU3RyaW5nICZvdXQpDQotew0KLSAgaW50IGk7DQotICBv dXQuYXBwZm10KCIlZFxuIix0LT5uY29scyk7DQotDQotICBmb3IoaT0wO2k8dC0+ bmNvbHM7aSsrKQ0KLSAgICBvdXQuYXBwZm10KCIlc1xuIix0LT5jb2xbaV0ubmFt ZSk7DQotDQotICByZXR1cm4gMDsNCi19DQoNCj09PSBtb2RpZmllZCBmaWxlICdz dG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm8uY3BwJw0KLS0tIGEvc3RvcmFn ZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmNwcAkyMDA5LTA2LTI0IDA4OjM5OjA5 ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm8uY3Bw CTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC0yNjcsMTMgKzI2NywxNyBA QCBib29sIE5kYkluZm86OmxvYWRfdGFibGVzKCkNCiB9DQogDQogaW50IE5kYklu Zm86OmNyZWF0ZVNjYW5PcGVyYXRpb24oY29uc3QgSW5mb1RhYmxlKiB0YWJsZSwN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZGJJbmZvU2Nhbk9w ZXJhdGlvbioqIHJldF9zY2FuX29wKQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5kYkluZm9TY2FuT3BlcmF0aW9uKiogcmV0X3NjYW5fb3AsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludDMyIG1heF9yb3dz LCBVaW50MzIgbWF4X2J5dGVzKQ0KIHsNCi0gIE5kYkluZm9TY2FuT3BlcmF0aW9u KiBzY2FuX29wID0gbmV3IE5kYkluZm9TY2FuT3BlcmF0aW9uKG1fY29ubmVjdGlv biwgdGFibGUpOw0KKyAgTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5fb3AgPSBu ZXcgTmRiSW5mb1NjYW5PcGVyYXRpb24obV9jb25uZWN0aW9uLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGFibGUsIG1heF9yb3dzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2J5dGVzKTsNCiAg IGlmICghc2Nhbl9vcCkNCiAgICAgcmV0dXJuIEVSUl9PdXRPZk1lbW9yeTsNCi0N Ci0gIGlmICghc2Nhbl9vcC0+aW5pdCgpKQ0KKyAgLy8gR2xvYmFsIGlkIGNvdW50 ZXIsIG5vdCBjcml0aWNhbCBpZiB5b3UgZ2V0IHNhbWUgaWQgb24gdHdvIGluc3Rh bmNlcw0KKyAgLy8gc2luY2UgcmVmZXJlbmNlIGlzIGFsc28gcGFydCBvZiB0aGUg dW5pcXVlIGlkZW50aWZpZXIuDQorICBpZiAoIXNjYW5fb3AtPmluaXQobV9pZF9j b3VudGVyKyspKQ0KICAgew0KICAgICBkZWxldGUgc2Nhbl9vcDsNCiAgICAgcmV0 dXJuIEVSUl9DbHVzdGVyRmFpbHVyZTsNCkBAIC0yODQsNyArMjg4LDcgQEAgaW50 IE5kYkluZm86OmNyZWF0ZVNjYW5PcGVyYXRpb24oY29uc3QgSQ0KICAgcmV0dXJu IDA7DQogfQ0KIA0KLXZvaWQgTmRiSW5mbzo6cmVsZWFzZVNjYW5PcGVyYXRpb24o TmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5fb3ApDQordm9pZCBOZGJJbmZvOjpy ZWxlYXNlU2Nhbk9wZXJhdGlvbihOZGJJbmZvU2Nhbk9wZXJhdGlvbiogc2Nhbl9v cCkgY29uc3QNCiB7DQogICBkZWxldGUgc2Nhbl9vcDsNCiB9DQpAQCAtMjk3LDEx ICszMDEsOSBAQCB2b2lkIE5kYkluZm86OmZsdXNoX3RhYmxlcygpDQogICBhc3Nl cnQobV90YWJsZXMuZW50cmllcygpID09IE5VTV9IQVJEQ09ERURfVEFCTEVTKTsN CiB9DQogDQotaW50DQotTmRiSW5mbzo6b3BlblRhYmxlKGNvbnN0IGNoYXIqIHRh YmxlX25hbWUsDQotICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYkluZm86Oklu Zm9UYWJsZSoqIHRhYmxlX2NvcHkpDQorYm9vbA0KK05kYkluZm86OmNoZWNrX3Rh YmxlcygpDQogew0KLSAgcHRocmVhZF9tdXRleF9sb2NrKCZtX211dGV4KTsNCiAg IGlmIChtX2Nvbm5lY3Rpb24tPmdldF9jb25uZWN0X2NvdW50KCkgIT0gbV9jb25u ZWN0X2NvdW50KQ0KICAgew0KICAgICAvLyBDb25uZWN0IGNvdW50IGhhcyBjaGFu Z2VkIC0+IGZsdXNoIHRoZSBjYWNoZWQgdGFibGUgZGVmaW5pdGlvbnMNCkBAIC0z MTMsMTIgKzMxNSwyNSBAQCBOZGJJbmZvOjpvcGVuVGFibGUoY29uc3QgY2hhciog dGFibGVfbmFtDQogICAgIC8vIGZsdXNoZWQsIHRyeSB0byBsb2FkIGl0DQogICAg IGlmICghbG9hZF90YWJsZXMoKSkNCiAgICAgew0KLSAgICAgIHB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZtX211dGV4KTsNCi0gICAgICByZXR1cm4gRVJSX0NsdXN0ZXJG YWlsdXJlOw0KKyAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgfQ0KICAgfQ0KICAg Ly8gTWFrZSBzdXJlIHRoYXQgc29tZSBkeW5hbWljIHRhYmxlcyBoYXZlIGJlZW4g bG9hZGVkDQogICBhc3NlcnQobV90YWJsZXMuZW50cmllcygpID4gTlVNX0hBUkRD T0RFRF9UQUJMRVMpOw0KKyAgcmV0dXJuIHRydWU7DQorfQ0KKw0KKw0KK2ludA0K K05kYkluZm86Om9wZW5UYWJsZShjb25zdCBjaGFyKiB0YWJsZV9uYW1lLA0KKyAg ICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqKiB0YWJs ZV9jb3B5KQ0KK3sNCisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbV9tdXRleCk7DQor DQorICBpZiAoIWNoZWNrX3RhYmxlcygpKXsNCisgICAgcHRocmVhZF9tdXRleF91 bmxvY2soJm1fbXV0ZXgpOw0KKyAgICByZXR1cm4gRVJSX0NsdXN0ZXJGYWlsdXJl Ow0KKyAgfQ0KIA0KICAgSW5mb1RhYmxlKiB0YWI7DQogICBpZiAoIW1fdGFibGVz LnNlYXJjaCh0YWJsZV9uYW1lLCAmdGFiKSkNCkBAIC0zMzUsNiArMzUwLDQyIEBA IE5kYkluZm86Om9wZW5UYWJsZShjb25zdCBjaGFyKiB0YWJsZV9uYW0NCiAgIHJl dHVybiAwOw0KIH0NCiANCitpbnQNCitOZGJJbmZvOjpvcGVuVGFibGUoVWludDMy IHRhYmxlSWQsDQorICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYkluZm86Oklu Zm9UYWJsZSoqIHRhYmxlX2NvcHkpDQorew0KKyAgcHRocmVhZF9tdXRleF9sb2Nr KCZtX211dGV4KTsNCisNCisgIGlmICghY2hlY2tfdGFibGVzKCkpew0KKyAgICBw dGhyZWFkX211dGV4X3VubG9jaygmbV9tdXRleCk7DQorICAgIHJldHVybiBFUlJf Q2x1c3RlckZhaWx1cmU7DQorICB9DQorDQorICAvLyBGaW5kIHRoZSB0YWJsZSB3 aXRoIGNvcnJlY3QgaWQNCisgIGNvbnN0IEluZm9UYWJsZSogdGFibGUgPSBOVUxM Ow0KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RhYmxlcy5lbnRyaWVzKCk7 IGkrKykNCisgIHsNCisgICAgY29uc3QgSW5mb1RhYmxlKiB0bXAgPSBtX3RhYmxl cy52YWx1ZShpKTsNCisgICAgaWYgKHRtcC0+bV90YWJsZV9pZCA9PSB0YWJsZUlk KQ0KKyAgICB7DQorICAgICAgdGFibGUgPSB0bXA7DQorICAgICAgYnJlYWs7DQor ICAgIH0NCisgIH0NCisgIGlmICh0YWJsZSA9PSBOVUxMKQ0KKyAgew0KKyAgICAv LyBObyBzdWNoIHRhYmxlIGV4aXN0ZWQNCisgICAgcHRocmVhZF9tdXRleF91bmxv Y2soJm1fbXV0ZXgpOw0KKyAgICByZXR1cm4gRVJSX05vU3VjaFRhYmxlOw0KKyAg fQ0KKw0KKyAgLy8gUmV0dXJuIGEgX2NvcHlfIG9mIHRoZSB0YWJsZQ0KKyAgKnRh YmxlX2NvcHkgPSBuZXcgSW5mb1RhYmxlKCp0YWJsZSk7DQorDQorICBwdGhyZWFk X211dGV4X3VubG9jaygmbV9tdXRleCk7DQorICByZXR1cm4gMDsNCit9DQorDQog dm9pZCBOZGJJbmZvOjpjbG9zZVRhYmxlKGNvbnN0IEluZm9UYWJsZSogdGFibGUp IHsNCiAgIGRlbGV0ZSB0YWJsZTsNCiB9DQoNCj09PSBtb2RpZmllZCBmaWxlICdz dG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm8uaHBwJw0KLS0tIGEvc3RvcmFn ZS9uZGIvc3JjL25kYmFwaS9OZGJJbmZvLmhwcAkyMDA5LTA2LTI0IDA4OjM5OjA5 ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm8uaHBw CTIwMDktMDctMDMgMTA6MzE6MzAgKzAwMDANCkBAIC05MywxMSArOTMsMTMgQEAg cHVibGljOg0KICAgdm9pZCBmbHVzaF90YWJsZXMoKTsNCiANCiAgIGludCBvcGVu VGFibGUoY29uc3QgY2hhciogdGFibGVfbmFtZSwgY29uc3QgSW5mb1RhYmxlKiop Ow0KKyAgaW50IG9wZW5UYWJsZShVaW50MzIgdGFibGVJZCwgY29uc3QgSW5mb1Rh YmxlKiopOw0KICAgdm9pZCBjbG9zZVRhYmxlKGNvbnN0IEluZm9UYWJsZSogdGFi bGUpOw0KIA0KICAgaW50IGNyZWF0ZVNjYW5PcGVyYXRpb24oY29uc3QgSW5mb1Rh YmxlKiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5kYkluZm9T Y2FuT3BlcmF0aW9uKiopOw0KLSAgdm9pZCByZWxlYXNlU2Nhbk9wZXJhdGlvbihj bGFzcyBOZGJJbmZvU2Nhbk9wZXJhdGlvbiopOw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgY2xhc3MgTmRiSW5mb1NjYW5PcGVyYXRpb24qKiwNCisgICAgICAg ICAgICAgICAgICAgICAgICAgIFVpbnQzMiBtYXhfcm93cyA9IDI1NiwgVWludDMy IG1heF9ieXRlcyA9IDApOw0KKyAgdm9pZCByZWxlYXNlU2Nhbk9wZXJhdGlvbihj bGFzcyBOZGJJbmZvU2Nhbk9wZXJhdGlvbiopIGNvbnN0Ow0KIA0KIHByaXZhdGU6 DQogICBzdGF0aWMgY29uc3Qgc2l6ZV90IE5VTV9IQVJEQ09ERURfVEFCTEVTID0g MjsNCkBAIC0xMDksMTIgKzExMSwxNCBAQCBwcml2YXRlOg0KICAgSW5mb1RhYmxl KiBtX2NvbHVtbnNfdGFibGU7DQogICBCYXNlU3RyaW5nIG1fcHJlZml4Ow0KICAg Ym9vbCBtX3VzZV9sb3dlcl9jYXNlOw0KKyAgVWludDMyIG1faWRfY291bnRlcjsN CiANCiAgIGJvb2wgYWRkQ29sdW1uKFVpbnQzMiB0YWJsZUlkLCBjb25zdCBJbmZv Q29sdW1uIGFDb2wpOw0KIA0KICAgYm9vbCBsb2FkX25kYmluZm9fdGFibGVzKCk7 DQogICBib29sIGxvYWRfaGFyZGNvZGVkX3RhYmxlcyh2b2lkKTsNCiAgIGJvb2wg bG9hZF90YWJsZXMoKTsNCisgIGJvb2wgY2hlY2tfdGFibGVzKCk7DQogDQogICBC YXNlU3RyaW5nIG15c3FsX3RhYmxlX25hbWUoY29uc3QgY2hhciogdGFibGVfbmFt ZSkgY29uc3Q7DQogDQoNCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9z cmMvbmRiYXBpL05kYkluZm9TY2FuT3BlcmF0aW9uLmNwcCcNCi0tLSBhL3N0b3Jh Z2UvbmRiL3NyYy9uZGJhcGkvTmRiSW5mb1NjYW5PcGVyYXRpb24uY3BwCTIwMDkt MDYtMjkgMjA6NTY6MzcgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9uZGJh cGkvTmRiSW5mb1NjYW5PcGVyYXRpb24uY3BwCTIwMDktMDctMDMgMTE6MTM6NTkg KzAwMDANCkBAIC0yOCwxNyArMjgsMjIgQEANCiAjaW5jbHVkZSAiTmRiQXBpU2ln bmFsLmhwcCINCiANCiBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6TmRiSW5mb1NjYW5P cGVyYXRpb24oTmRiX2NsdXN0ZXJfY29ubmVjdGlvbiogY29ubmVjdGlvbiwNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg TmRiSW5mbzo6SW5mb1RhYmxlKiB0YWJsZSkgOg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFi bGUqIHRhYmxlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVaW50MzIgbWF4X3Jvd3MsIFVpbnQzMiBtYXhfYnl0ZXMpIDoNCiAg IG1fc3RhdGUoVW5kZWZpbmVkKSwNCiAgIG1fY29ubmVjdGlvbihjb25uZWN0aW9u KSwNCiAgIG1fc2lnbmFsX3NlbmRlcihOVUxMKSwNCiAgIG1fdGFibGUodGFibGUp LA0KLSAgbV9ub2RlX2lkKDApDQorICBtX25vZGVfaWQoMCksDQorICBtX21heF9y b3dzKG1heF9yb3dzKSwNCisgIG1fbWF4X2J5dGVzKG1heF9ieXRlcyksDQorICBt X3Jlc3VsdF9kYXRhKDB4MzcpLA0KKyAgbV9yZWNlaXZlZF9yb3dzKDApDQogew0K IH0NCiANCiBib29sDQotTmRiSW5mb1NjYW5PcGVyYXRpb246OmluaXQodm9pZCkN CitOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6aW5pdChVaW50MzIgaWQpDQogew0KICAg REJVR19FTlRFUigiTmRiSW5mb1NjYW5vcGVyYXRpb246OmluaXQiKTsNCiAgIGlm IChtX3N0YXRlICE9IFVuZGVmaW5lZCkNCkBAIC00OCw2ICs1MywxMCBAQCBOZGJJ bmZvU2Nhbk9wZXJhdGlvbjo6aW5pdCh2b2lkKQ0KICAgaWYgKCFtX3NpZ25hbF9z ZW5kZXIpDQogICAgIERCVUdfUkVUVVJOKGZhbHNlKTsNCiANCisgIG1fdHJhbnNp ZDAgPSBpZDsNCisgIG1fdHJhbnNpZDEgPSBtX3RhYmxlLT5nZXRUYWJsZUlkKCk7 DQorICBtX3Jlc3VsdF9yZWYgPSBtX3NpZ25hbF9zZW5kZXItPmdldE93blJlZigp Ow0KKw0KICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGFibGUtPmNvbHVt bnMoKTsgaSsrKQ0KICAgICBtX3JlY0F0dHJzLnB1c2hfYmFjayhOVUxMKTsNCiAN CkBAIC0xMDcsMzIgKzExNiwxOSBAQCBpbnQgTmRiSW5mb1NjYW5PcGVyYXRpb246 OmV4ZWN1dGUoKQ0KICAgaWYgKG1fc3RhdGUgIT0gUHJlcGFyZWQpDQogICAgIERC VUdfUkVUVVJOKC0xKTsNCiANCi0gIFNpbXBsZVNpZ25hbCBzczsNCi0gIERiaW5m b1NjYW5SZXEgKiByZXEgPSBDQVNUX1BUUihEYmluZm9TY2FuUmVxLCBzcy5nZXRE YXRhUHRyU2VuZCgpKTsNCi0gIHJlcS0+cmVxdWVzdEluZm8gPSBEYmluZm9TY2Fu UmVxOjpBbGxDb2x1bW5zIHwgRGJpbmZvU2NhblJlcTo6U3RhcnRTY2FuOw0KLSAg cmVxLT50YWJsZUlkID0gbV90YWJsZS0+Z2V0VGFibGVJZCgpOw0KLSAgcmVxLT5h cGlSZWYgPSBtX3NpZ25hbF9zZW5kZXItPmdldE93blJlZigpOw0KLSAgcmVxLT5h cGlUeG5JZCA9IDM3OyAvL21faWQ7IC8vIE1BU1YgQ2FuIGJlIHJlbW92ZWQNCi0g IHJlcS0+c2VuZGVyUmVmID0gbV9zaWduYWxfc2VuZGVyLT5nZXRPd25SZWYoKTsN Ci0gIHJlcS0+aW5zdGFuY2UgPSAwOw0KLSAgcmVxLT5jb2xCaXRtYXBMbyA9IH4w Ow0KLSAgcmVxLT5jb2xCaXRtYXBIaSA9IH4wOw0KLSAgcmVxLT5tYXhSb3dzID0g MjsNCi0gIHJlcS0+bWF4Qnl0ZXMgPSAwOw0KLSAgcmVxLT5yb3dzX3RvdGFsID0g MDsNCi0gIHJlcS0+d29yZF90b3RhbCA9IDA7DQorICBhc3NlcnQobV9jdXJzb3Iu c2l6ZSgpID09IDApOw0KIA0KICAgbV9zaWduYWxfc2VuZGVyLT5sb2NrKCk7DQot ICBpbnQgcmV0ID0gc2VuZERCSU5GT19TQ0FOUkVRKHNzLCBEYmluZm9TY2FuUmVx OjpTaWduYWxMZW5ndGgpOw0KKyAgaW50IHJldCA9IHNlbmREQklORk9fU0NBTlJF USgpOw0KICAgbV9zaWduYWxfc2VuZGVyLT51bmxvY2soKTsNCiANCi0gIG1fc3Rh dGUgPSBTdGFydGVkOw0KKyAgbV9zdGF0ZSA9IE1vcmVEYXRhOw0KIA0KICAgREJV R19SRVRVUk4ocmV0KTsNCiB9DQogDQogaW50DQotTmRiSW5mb1NjYW5PcGVyYXRp b246OnNlbmREQklORk9fU0NBTlJFUShTaW1wbGVTaWduYWwgJnNzLCBVaW50MzIg c2lnbmFsX2xlbikNCitOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6c2VuZERCSU5GT19T Q0FOUkVRKHZvaWQpDQogew0KICAgREJVR19FTlRFUigiTmRiSW5mb1NjYW5PcGVy YXRpb246OnNlbmREQklORk9fU0NBTlJFUSIpOw0KIA0KQEAgLTE0MywxMyArMTM5 LDQzIEBAIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpzZW5kREJJTkZPX1NDQU5SRVEN CiAgICAgICBEQlVHX1JFVFVSTihOZGJJbmZvOjpFUlJfQ2x1c3RlckZhaWx1cmUp Ow0KICAgfQ0KIA0KKyAgU2ltcGxlU2lnbmFsIHNzOw0KKyAgRGJpbmZvU2NhblJl cSAqIHJlcSA9IENBU1RfUFRSKERiaW5mb1NjYW5SZXEsIHNzLmdldERhdGFQdHJT ZW5kKCkpOw0KKw0KKyAgLy8gQVBJIElkZW50aWZpZXJzDQorICByZXEtPnJlc3Vs dERhdGEgPSBtX3Jlc3VsdF9kYXRhOw0KKyAgcmVxLT50cmFuc0lkWzBdID0gbV90 cmFuc2lkMDsNCisgIHJlcS0+dHJhbnNJZFsxXSA9IG1fdHJhbnNpZDE7DQorICBy ZXEtPnJlc3VsdFJlZiA9IG1fcmVzdWx0X3JlZjsNCisNCisgIC8vIFNjYW4gcGFy YW1ldGVycw0KKyAgcmVxLT50YWJsZUlkID0gbV90YWJsZS0+Z2V0VGFibGVJZCgp Ow0KKyAgcmVxLT5jb2xCaXRtYXBbMF0gPSB+MDsNCisgIHJlcS0+Y29sQml0bWFw WzFdID0gfjA7DQorICByZXEtPnJlcXVlc3RJbmZvID0gMDsNCisgIHJlcS0+bWF4 Um93cyA9IG1fbWF4X3Jvd3M7DQorICByZXEtPm1heEJ5dGVzID0gbV9tYXhfYnl0 ZXM7DQorDQorICAvLyBTY2FuIHJlc3VsdA0KKyAgcmVxLT5yZXR1cm5lZFJvd3Mg PSAwOw0KKw0KKyAgLy8gQ3Vyc29yIGRhdGENCisgIFVpbnQzMiogY3Vyc29yX3B0 ciA9IERiaW5mb1NjYW46OmdldEN1cnNvclB0clNlbmQocmVxKTsNCisgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCBtX2N1cnNvci5zaXplKCk7IGkrKykNCisgIHsN CisgICAgKmN1cnNvcl9wdHIgPSBtX2N1cnNvcltpXTsNCisgICAgREJVR19QUklO VCgiaW5mbyIsICgiY3Vyc29yWyV1XTogMHgleCIsIGksIG1fY3Vyc29yW2ldKSk7 DQorICAgIGN1cnNvcl9wdHIrKzsNCisgIH0NCisgIHJlcS0+Y3Vyc29yX3N6ID0g bV9jdXJzb3Iuc2l6ZSgpOw0KKyAgbV9jdXJzb3IuY2xlYXIoKTsNCisNCiAgIGFz c2VydChtX25vZGVfaWQpOw0KKyAgVWludDMyIGxlbiA9IERiaW5mb1NjYW5SZXE6 OlNpZ25hbExlbmd0aCArIHJlcS0+Y3Vyc29yX3N6Ow0KICAgaWYgKG1fc2lnbmFs X3NlbmRlci0+c2VuZFNpZ25hbChtX25vZGVfaWQsIHNzLCBEQklORk8sDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTTl9EQklORk9fU0NBTlJF USwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsX2xl bikgIT0gU0VORF9PSykNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR1NOX0RCSU5GT19TQ0FOUkVRLCBsZW4pICE9IFNFTkRfT0spDQogICAgIERC VUdfUkVUVVJOKE5kYkluZm86OkVSUl9DbHVzdGVyRmFpbHVyZSk7DQogDQotDQog ICBEQlVHX1JFVFVSTigwKTsNCiB9DQogDQpAQCAtMTYxLDE0ICsxODcsMTkgQEAg aW50IE5kYkluZm9TY2FuT3BlcmF0aW9uOjpyZWNlaXZlKHZvaWQpDQogICAgIGNv bnN0IFNpbXBsZVNpZ25hbCogc2lnID0gbV9zaWduYWxfc2VuZGVyLT53YWl0Rm9y KCk7DQogICAgIGlmICghc2lnKQ0KICAgICAgIERCVUdfUkVUVVJOKC0xKTsNCisg ICAgLy9zaWctPnByaW50KCk7DQogDQogICAgIGludCBzaWdfbnVtYmVyID0gc2ln LT5yZWFkU2lnbmFsTnVtYmVyKCk7DQogICAgIHN3aXRjaCAoc2lnX251bWJlcikg ew0KIA0KICAgICBjYXNlIEdTTl9EQklORk9fVFJBTlNJRF9BSToNCi0gICAgICBl eGVjREJJTkZPX1RSQU5TSURfQUkoc2lnKTsNCi0gICAgICBEQlVHX1JFVFVSTigx KTsgLy8gTW9yZSBkYXRhDQorICAgIHsNCisgICAgICBpbnQgcmV0ID0gZXhlY0RC SU5GT19UUkFOU0lEX0FJKHNpZyk7DQorICAgICAgaWYgKHJldCA9PSAwKQ0KKyAg ICAgICAgY29udGludWU7DQorICAgICAgREJVR19SRVRVUk4ocmV0KTsgLy8gTW9y ZSBkYXRhDQogICAgICAgYnJlYWs7DQorICAgIH0NCiANCiAgICAgY2FzZSBHU05f REJJTkZPX1NDQU5DT05GOg0KICAgICB7DQpAQCAtMTgwLDIyICsyMTEsMjEgQEAg aW50IE5kYkluZm9TY2FuT3BlcmF0aW9uOjpyZWNlaXZlKHZvaWQpDQogICAgIH0N CiANCiAgICAgY2FzZSBHU05fREJJTkZPX1NDQU5SRUY6DQotICAgICAgREJVR19S RVRVUk4oZXhlY0RCSU5GT19TQ0FOUkVGKHNpZykpOw0KKyAgICB7DQorICAgICAg aW50IHJldCA9IGV4ZWNEQklORk9fU0NBTlJFRihzaWcpOw0KKyAgICAgIGlmIChy ZXQgPT0gMCkNCisgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgIERCVUdfUkVUVVJO KHJldCk7DQogICAgICAgYnJlYWs7DQorICAgIH0NCiANCiAgICAgY2FzZSBHU05f Tk9ERV9GQUlMUkVQOg0KICAgICAgIC8vIElnbm9yZSBhbmQgd2FpdCBmb3IgTkZf Q09NUExFVEVSRVANCiAgICAgICBicmVhazsNCiANCiAgICAgY2FzZSBHU05fTkZf Q09NUExFVEVSRVA6DQotICAgIHsNCi0gICAgICBjb25zdCBORkNvbXBsZXRlUmVw ICogY29uc3QgcmVwID0NCi0gICAgICAgIENBU1RfQ09OU1RQVFIoTkZDb21wbGV0 ZVJlcCwgc2lnLT5nZXREYXRhUHRyKCkpOw0KLSAgICAgIE5vZGVJZCBub2RlSWQ9 IHJlcC0+ZmFpbGVkTm9kZUlkOw0KLSAgICAgIGlmIChub2RlSWQgPT0gbV9ub2Rl X2lkKQ0KLSAgICAgICAgREJVR19SRVRVUk4oLTMpOw0KKyAgICAgIERCVUdfUkVU VVJOKC0zKTsNCiAgICAgICBicmVhazsNCi0gICAgfQ0KIA0KICAgICBjYXNlIEdT Tl9TVUJfR0NQX0NPTVBMRVRFX1JFUDoNCiAgICAgY2FzZSBHU05fQVBJX1JFR0NP TkY6DQpAQCAtMjIwLDcgKzI1MCw2IEBAIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpu ZXh0UmVzdWx0KCkNCiANCiAgIHN3aXRjaChtX3N0YXRlKQ0KICAgew0KLSAgY2Fz ZSBTdGFydGVkOg0KICAgY2FzZSBNb3JlRGF0YToNCiAgIHsNCiAgICAgbV9zaWdu YWxfc2VuZGVyLT5sb2NrKCk7DQpAQCAtMjMwLDcgKzI1OSw2IEBAIE5kYkluZm9T Y2FuT3BlcmF0aW9uOjpuZXh0UmVzdWx0KCkNCiAgICAgYnJlYWs7DQogICB9DQog ICBjYXNlIEVuZDoNCi0gICAgYXNzZXJ0KGZhbHNlKTsNCiAgICAgREJVR19SRVRV Uk4oMCk7IC8vIEVPRg0KICAgICBicmVhazsNCiAgIGRlZmF1bHQ6DQpAQCAtMjU2 LDEwICsyODQsMjEgQEAgTmRiSW5mb1NjYW5PcGVyYXRpb246OmNsb3NlKCkNCiAg IERCVUdfVk9JRF9SRVRVUk47DQogfQ0KIA0KLXZvaWQNCitpbnQNCiBOZGJJbmZv U2Nhbk9wZXJhdGlvbjo6ZXhlY0RCSU5GT19UUkFOU0lEX0FJKGNvbnN0IFNpbXBs ZVNpZ25hbCAqIHNpZ25hbCkNCiB7DQogICBEQlVHX0VOVEVSKCJOZGJJbmZvU2Nh bk9wZXJhdGlvbjo6ZXhlY0RCSU5GT19UUkFOU0lEX0FJIik7DQorICBjb25zdCBU cmFuc0lkQUkqIHRyYW5zaWQgPQ0KKyAgICAgICAgICBDQVNUX0NPTlNUUFRSKFRy YW5zSWRBSSwgc2lnbmFsLT5nZXREYXRhUHRyKCkpOw0KKyAgaWYgKHRyYW5zaWQt PmNvbm5lY3RQdHIgIT0gbV9yZXN1bHRfZGF0YSB8fA0KKyAgICAgIHRyYW5zaWQt PnRyYW5zSWRbMF0gIT0gbV90cmFuc2lkMCB8fA0KKyAgICAgIHRyYW5zaWQtPnRy YW5zSWRbMV0gIT0gbV90cmFuc2lkMSkNCisgIHsNCisgICAgLy8gRHJvcCBzaWdu YWwgdGhhdCBiZWxvbmdzIHRvIHByZXZpb3VzIHNjYW4NCisgICAgREJVR19SRVRV Uk4oMCk7DQorICB9DQorICBtX3JlY2VpdmVkX3Jvd3MrKzsNCisNCiAgIGNvbnN0 IFVpbnQzMiogc3RhcnQgPSBzaWduYWwtPnB0clswXS5wOw0KICAgY29uc3QgVWlu dDMyKiBlbmQgPSBzdGFydCArIHNpZ25hbC0+cHRyWzBdLnN6Ow0KIA0KQEAgLTI4 OCw4ICszMjcsNyBAQCBOZGJJbmZvU2Nhbk9wZXJhdGlvbjo6ZXhlY0RCSU5GT19U UkFOU0lEDQogICAgIC8vIE5vIHJlYWRpbmcgYmV5b25kIGVuZCBvZiBzaWduYWwg c2l6ZQ0KICAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsNCiAgIH0NCi0NCi0gIERC VUdfVk9JRF9SRVRVUk47DQorICBEQlVHX1JFVFVSTigxKTsNCiB9DQogDQogaW50 DQpAQCAtMjk5LDE4ICszMzcsMzkgQEAgTmRiSW5mb1NjYW5PcGVyYXRpb246OmV4 ZWNEQklORk9fU0NBTkNPTg0KICAgY29uc3QgRGJpbmZvU2NhbkNvbmYqIGNvbmYg PQ0KICAgICAgICAgICBDQVNUX0NPTlNUUFRSKERiaW5mb1NjYW5Db25mLCBzaWct PmdldERhdGFQdHIoKSk7DQogDQotICBpZiAoY29uZi0+cmVxdWVzdEluZm8gJiBE YmluZm9TY2FuQ29uZjo6TW9yZURhdGEpDQorICBpZiAoY29uZi0+cmVzdWx0RGF0 YSAhPSBtX3Jlc3VsdF9kYXRhIHx8DQorICAgICAgY29uZi0+dHJhbnNJZFswXSAh PSBtX3RyYW5zaWQwIHx8DQorICAgICAgY29uZi0+dHJhbnNJZFsxXSAhPSBtX3Ry YW5zaWQxIHx8DQorICAgICAgY29uZi0+cmVzdWx0UmVmICE9IG1fcmVzdWx0X3Jl ZikNCiAgIHsNCi0gICAgREJVR19QUklOVCgiaW5mbyIsICgiUmVxdWVzdCBtb3Jl IGRhdGEiKSk7DQotICAgIFNpbXBsZVNpZ25hbCBzczsNCi0gICAgRGJpbmZvU2Nh blJlcSAqIHJlcSA9IENBU1RfUFRSKERiaW5mb1NjYW5SZXEsDQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzcy5nZXREYXRhUHRyU2VuZCgpKTsN Ci0gICAgbWVtY3B5KHJlcSwgY29uZiwgRGJpbmZvU2NhblJlcTo6U2lnbmFsTGVu Z3RoV2l0aEN1cnNvcipzaXplb2YoVWludDMyKSk7DQotICAgIHJlcS0+cmVxdWVz dEluZm8gJj0gfihEYmluZm9TY2FuUmVxOjpTdGFydFNjYW4pOw0KLSAgICByZXEt PmFwaVJlZiA9IG1fc2lnbmFsX3NlbmRlci0+Z2V0T3duUmVmKCk7IC8vIE1BU1Yg c29tZWhvdyBiZWNvbWVzIGludmFsaWQNCisgICAgLy8gRHJvcCBzaWduYWwgdGhh dCBiZWxvbmdzIHRvIHByZXZpb3VzIHNjYW4NCisgICAgREJVR19SRVRVUk4oMSk7 IC8vIENvbnRpbnVlIHdhaXRpbmcNCisgIH0NCisgIGNvbnN0IFVpbnQzMiB0YWJs ZUlkID0gY29uZi0+dGFibGVJZDsNCisgIGFzc2VydCh0YWJsZUlkID09IG1fdGFi bGUtPmdldFRhYmxlSWQoKSk7DQogDQotICAgIGludCBlcnIgPSBzZW5kREJJTkZP X1NDQU5SRVEoc3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RGJpbmZvU2NhblJlcTo6U2lnbmFsTGVuZ3RoV2l0aEN1cnNvcik7DQorICAvLyBB c3NlcnQgYWxsIHNjYW4gc2V0dGluZ3MgaXMgdW5jaGFuZ2VkDQorICBhc3NlcnQo Y29uZi0+Y29sQml0bWFwWzBdID09IH4wKTsNCisgIGFzc2VydChjb25mLT5jb2xC aXRtYXBbMV0gPT0gfjApOw0KKyAgYXNzZXJ0KGNvbmYtPnJlcXVlc3RJbmZvID09 IDApOw0KKyAgYXNzZXJ0KGNvbmYtPm1heFJvd3MgPT0gbV9tYXhfcm93cyk7DQor ICBhc3NlcnQoY29uZi0+bWF4Qnl0ZXMgPT0gbV9tYXhfYnl0ZXMpOw0KKw0KKyAg Ly8gU2F2ZSBjdXJzb3IgZGF0YQ0KKyAgYXNzZXJ0KG1fY3Vyc29yLnNpemUoKSA9 PSAwKTsNCisgIGNvbnN0IFVpbnQzMiogY3Vyc29yX3B0ciA9IERiaW5mb1NjYW46 OmdldEN1cnNvclB0cihjb25mKTsNCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg PCBjb25mLT5jdXJzb3Jfc3o7IGkrKykNCisgIHsNCisgICAgbV9jdXJzb3IucHVz aF9iYWNrKCpjdXJzb3JfcHRyKTsNCisgICAgREJVR19QUklOVCgiaW5mbyIsICgi Y3Vyc29yWyV1XTogMHgleCIsIGksIG1fY3Vyc29yW2ldKSk7DQorICAgIGN1cnNv cl9wdHIrKzsNCisgIH0NCisgIGFzc2VydChjb25mLT5jdXJzb3Jfc3ogPT0gbV9j dXJzb3Iuc2l6ZSgpKTsNCisNCisgIGlmIChjb25mLT5jdXJzb3Jfc3opDQorICB7 DQorICAgIERCVUdfUFJJTlQoImluZm8iLCAoIlJlcXVlc3QgbW9yZSBkYXRhIikp Ow0KKyAgICBpbnQgZXJyID0gc2VuZERCSU5GT19TQ0FOUkVRKCk7DQogICAgIGlm IChlcnIgIT0gMCkNCiAgICAgew0KICAgICAgIERCVUdfUFJJTlQoImluZm8iLCAo IkZhaWxlZCB0byByZXVxZXN0IG1vcmUgZGF0YSIpKTsNCkBAIC0zMzMsNiArMzky LDE1IEBAIE5kYkluZm9TY2FuT3BlcmF0aW9uOjpleGVjREJJTkZPX1NDQU5SRUYN CiAgIGNvbnN0IERiaW5mb1NjYW5SZWYqIHJlZiA9DQogICAgICAgICAgIENBU1Rf Q09OU1RQVFIoRGJpbmZvU2NhblJlZiwgc2lnbmFsLT5nZXREYXRhUHRyKCkpOw0K IA0KKyAgaWYgKHJlZi0+cmVzdWx0RGF0YSAhPSBtX3Jlc3VsdF9kYXRhIHx8DQor ICAgICAgcmVmLT50cmFuc0lkWzBdICE9IG1fdHJhbnNpZDAgfHwNCisgICAgICBy ZWYtPnRyYW5zSWRbMV0gIT0gbV90cmFuc2lkMSB8fA0KKyAgICAgIHJlZi0+cmVz dWx0UmVmICE9IG1fcmVzdWx0X3JlZik7DQorICB7DQorICAgIC8vIERyb3Agc2ln bmFsIHRoYXQgYmVsb25ncyB0byBwcmV2aW91cyBzY2FuDQorICAgIERCVUdfUkVU VVJOKDApOyAvLyBDb250aW51ZSB3YWl0aW5nDQorICB9DQorDQogICBtX3N0YXRl ID0gRXJyb3I7DQogICBEQlVHX1JFVFVSTihyZWYtPmVycm9yQ29kZSk7DQogfQ0K DQo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJ bmZvU2Nhbk9wZXJhdGlvbi5ocHAnDQotLS0gYS9zdG9yYWdlL25kYi9zcmMvbmRi YXBpL05kYkluZm9TY2FuT3BlcmF0aW9uLmhwcAkyMDA5LTA2LTI0IDA4OjA0OjMz ICswMDAwDQorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkluZm9TY2Fu T3BlcmF0aW9uLmhwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpAQCAtMjks MjUgKzI5LDM0IEBAIHB1YmxpYzoNCiBwcm90ZWN0ZWQ6DQogICBmcmllbmQgY2xh c3MgTmRiSW5mbzsNCiAgIE5kYkluZm9TY2FuT3BlcmF0aW9uKGNsYXNzIE5kYl9j bHVzdGVyX2Nvbm5lY3Rpb24qLA0KLSAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgTmRiSW5mbzo6SW5mb1RhYmxlKik7DQotICBib29sIGluaXQodm9pZCk7DQor ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUq LA0KKyAgICAgICAgICAgICAgICAgICAgICAgVWludDMyIG1heF9yb3dzLCBVaW50 MzIgbWF4X2J5dGVzKTsNCisgIGJvb2wgaW5pdChVaW50MzIgaWQpOw0KICAgfk5k YkluZm9TY2FuT3BlcmF0aW9uKCk7DQogICB2b2lkIGNsb3NlKCk7DQogcHJpdmF0 ZToNCi0gIHZvaWQgZXhlY0RCSU5GT19UUkFOU0lEX0FJKGNvbnN0IHN0cnVjdCBT aW1wbGVTaWduYWwgKiBzaWduYWwpOw0KKyAgaW50IGV4ZWNEQklORk9fVFJBTlNJ RF9BSShjb25zdCBzdHJ1Y3QgU2ltcGxlU2lnbmFsICogc2lnbmFsKTsNCiAgIGlu dCBleGVjREJJTkZPX1NDQU5DT05GKGNvbnN0IHN0cnVjdCBTaW1wbGVTaWduYWwg KiBzaWduYWwpOw0KICAgaW50IGV4ZWNEQklORk9fU0NBTlJFRihjb25zdCBzdHJ1 Y3QgU2ltcGxlU2lnbmFsICogc2lnbmFsKTsNCi0gIGludCBzZW5kREJJTkZPX1ND QU5SRVEoc3RydWN0IFNpbXBsZVNpZ25hbCYgc3MsIFVpbnQzMiBzaWduYWxfbGVu KTsNCisgIGludCBzZW5kREJJTkZPX1NDQU5SRVEoKTsNCiANCiAgIGludCByZWNl aXZlKHZvaWQpOw0KIA0KICAgZW51bSBTdGF0ZSB7IFVuZGVmaW5lZCwgSW5pdGlh bCwgUHJlcGFyZWQsDQotICAgICAgICAgICAgICAgU3RhcnRlZCwgTW9yZURhdGEs IEVuZCwgRXJyb3IgfSBtX3N0YXRlOw0KKyAgICAgICAgICAgICAgIE1vcmVEYXRh LCBFbmQsIEVycm9yIH0gbV9zdGF0ZTsNCiAgIGNsYXNzIE5kYl9jbHVzdGVyX2Nv bm5lY3Rpb24qIG1fY29ubmVjdGlvbjsNCiAgIGNsYXNzIFNpZ25hbFNlbmRlciog ICAgICAgICAgIG1fc2lnbmFsX3NlbmRlcjsNCiAgIGNvbnN0IE5kYkluZm86Oklu Zm9UYWJsZSogICAgIG1fdGFibGU7DQogICBWZWN0b3I8TmRiSW5mb1JlY0F0dHIq PiAgICAgICBtX3JlY0F0dHJzOw0KKyAgVmVjdG9yPFVpbnQzMj4gICAgICAgICAg ICAgICAgbV9jdXJzb3I7DQogICBVaW50MzIgbV9ub2RlX2lkOw0KKyAgVWludDMy IG1fdHJhbnNpZDA7DQorICBVaW50MzIgbV90cmFuc2lkMTsNCisgIFVpbnQzMiBt X3Jlc3VsdF9yZWY7DQorICBVaW50MzIgbV9tYXhfcm93czsNCisgIFVpbnQzMiBt X21heF9ieXRlczsNCisgIFVpbnQzMiBtX3Jlc3VsdF9kYXRhOw0KKyAgVWludDMy IG1fcmVjZWl2ZWRfcm93czsNCiB9Ow0KIA0KIA0KDQo9PT0gbW9kaWZpZWQgZmls ZSAnc3RvcmFnZS9uZGIvdGVzdC9uZGJhcGkvdGVzdE5kYmluZm8uY3BwJw0KLS0t IGEvc3RvcmFnZS9uZGIvdGVzdC9uZGJhcGkvdGVzdE5kYmluZm8uY3BwCTIwMDkt MDYtMjQgMDg6MDQ6MzMgKzAwMDANCisrKyBiL3N0b3JhZ2UvbmRiL3Rlc3QvbmRi YXBpL3Rlc3ROZGJpbmZvLmNwcAkyMDA5LTA3LTAzIDEwOjMxOjMwICswMDAwDQpA QCAtMjMsNyArMjMsNyBAQA0KIA0KIGludCBydW5UZXN0TmRiSW5mbyhOREJUX0Nv bnRleHQqIGN0eCwgTkRCVF9TdGVwKiBzdGVwKQ0KIHsNCi0gIE5kYkluZm8gbmRi aW5mbygmY3R4LT5tX2NsdXN0ZXJfY29ubmVjdGlvbiwgIm5kYmluZm8iKTsNCisg IE5kYkluZm8gbmRiaW5mbygmY3R4LT5tX2NsdXN0ZXJfY29ubmVjdGlvbiwgIm5k YmluZm8vIik7DQogICBpZiAoIW5kYmluZm8uaW5pdCgpKQ0KICAgew0KICAgICBn X2VyciA8PCAibmRiaW5mby5pbml0IGZhaWxlZCIgPDwgZW5kbDsNCkBAIC0zMSw5 ICszMSw5IEBAIGludCBydW5UZXN0TmRiSW5mbyhOREJUX0NvbnRleHQqIGN0eCwg TkQNCiAgIH0NCiANCiAgIGNvbnN0IE5kYkluZm86OkluZm9UYWJsZSogdGFibGU7 DQotICBpZiAobmRiaW5mby5vcGVuVGFibGUoIi4vbmRiaW5mby9UQUJMRVMiLCAm dGFibGUpICE9IDApDQorICBpZiAobmRiaW5mby5vcGVuVGFibGUoIm5kYmluZm8v VEFCTEVTIiwgJnRhYmxlKSAhPSAwKQ0KICAgew0KLSAgICBnX2VyciA8PCAiRmFp bGVkIHRvIGdldFRhYmxlKFRBQkxFUykiIDw8IGVuZGw7DQorICAgIGdfZXJyIDw8 ICJGYWlsZWQgdG8gb3BlblRhYmxlKFRBQkxFUykiIDw8IGVuZGw7DQogICAgIHJl dHVybiBOREJUX0ZBSUxFRDsNCiAgIH0NCiANCkBAIC02Miw3ICs2Miw3IEBAIGlu dCBydW5UZXN0TmRiSW5mbyhOREJUX0NvbnRleHQqIGN0eCwgTkQNCiAgICAgICBy ZXR1cm4gTkRCVF9GQUlMRUQ7DQogICAgIH0NCiANCi0gICAgd2hpbGUoc2Nhbk9w LT5uZXh0UmVzdWx0KCkpDQorICAgIHdoaWxlKHNjYW5PcC0+bmV4dFJlc3VsdCgp ID09IDEpDQogICAgIHsNCiAgICAgICBnX2luZm8gPDwgIk5BTUU6ICIgPDwgdGFi bGVOYW1lLT5jX3N0cigpIDw8IGVuZGw7DQogICAgICAgZ19pbmZvIDw8ICJTUUw6 ICIgPDwgY3JlYXRlU1FMLT5jX3N0cigpIDw8IGVuZGw7DQpAQCAtNzQsNiArNzQs MzA2IEBAIGludCBydW5UZXN0TmRiSW5mbyhOREJUX0NvbnRleHQqIGN0eCwgTkQN CiAgIHJldHVybiBOREJUX09LOw0KIH0NCiANCisNCitpbnQgcnVuU2NhbkFsbChO REJUX0NvbnRleHQqIGN0eCwgTkRCVF9TdGVwKiBzdGVwKQ0KK3sNCisgIE5kYklu Zm8gbmRiaW5mbygmY3R4LT5tX2NsdXN0ZXJfY29ubmVjdGlvbiwgIm5kYmluZm8v Iik7DQorICBpZiAoIW5kYmluZm8uaW5pdCgpKQ0KKyAgew0KKyAgICBnX2VyciA8 PCAibmRiaW5mby5pbml0IGZhaWxlZCIgPDwgZW5kbDsNCisgICAgcmV0dXJuIE5E QlRfRkFJTEVEOw0KKyAgfQ0KKw0KKyAgVWludDMyIHRhYmxlSWQgPSAwOw0KKyAg d2hpbGUodHJ1ZSkgew0KKyAgICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqIHRh YmxlOw0KKw0KKyAgICBpbnQgZXJyID0gbmRiaW5mby5vcGVuVGFibGUodGFibGVJ ZCwgJnRhYmxlKTsNCisgICAgaWYgKGVyciA9PSBOZGJJbmZvOjpFUlJfTm9TdWNo VGFibGUpDQorICAgIHsNCisgICAgICAvLyBObyBtb3JlIHRhYmxlcyAtPiByZXR1 cm4NCisgICAgICByZXR1cm4gTkRCVF9PSzsNCisgICAgfQ0KKyAgICBlbHNlIGlm IChlcnIgIT0gMCkNCisgICAgew0KKyAgICAgIC8vIFVuZXhwZWN0ZWQgcmV0dXJu IGNvZGUNCisgICAgICBnX2VyciA8PCAiRmFpbGVkIHRvIG9wZW5UYWJsZSgiIDw8 IHRhYmxlSWQgPDwgIiksIGVycjogIiA8PCBlcnIgPDwgZW5kbDsNCisgICAgICBy ZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0NCisgICAgbmRib3V0IDw8ICJ0YWJs ZSgiPDx0YWJsZUlkPDwiKTogIiA8PCB0YWJsZS0+Z2V0TmFtZSgpIDw8IGVuZGw7 DQorDQorICAgIGZvciAoaW50IGwgPSAwOyBsIDwgY3R4LT5nZXROdW1Mb29wcygp OyBsKyspDQorICAgIHsNCisgICAgICBOZGJJbmZvU2Nhbk9wZXJhdGlvbiogc2Nh bk9wID0gTlVMTDsNCisgICAgICBpZiAobmRiaW5mby5jcmVhdGVTY2FuT3BlcmF0 aW9uKHRhYmxlLCAmc2Nhbk9wKSkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8 PCAiTm8gTmRiSW5mb1NjYW5PcGVyYXRpb24iIDw8IGVuZGw7DQorICAgICAgICBy ZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChzY2Fu T3AtPnJlYWRUdXBsZXMoKSAhPSAwKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJy IDw8ICJzY2FuT3AtPnJlYWRUdXBsZXMgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAg ICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICAgIH0NCisNCisgICAgICBpbnQg Y29sdW1uSWQgPSAwOw0KKyAgICAgIHdoaWxlIChzY2FuT3AtPmdldFZhbHVlKGNv bHVtbklkKSkNCisgICAgICAgIGNvbHVtbklkKys7DQorICAgICAgLy8gQXQgbGVh c3Qgb25lIGNvbHVtbg0KKyAgICAgIGFzc2VydChjb2x1bW5JZCA+PSAxKTsNCisN CisgICAgICBpZihzY2FuT3AtPmV4ZWN1dGUoKSAhPSAwKQ0KKyAgICAgIHsNCisg ICAgICAgIGdfZXJyIDw8ICJzY2FuT3AtPmV4ZWN1dGUgZmFpbGVkIiA8PCBlbmRs Ow0KKyAgICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICAgIH0NCisNCisg ICAgICBpbnQgcm93ID0gMDsNCisgICAgICB3aGlsZShzY2FuT3AtPm5leHRSZXN1 bHQoKSA9PSAxKQ0KKyAgICAgICAgcm93Kys7DQorICAgICAgbmRib3V0IDw8ICJy b3dzOiAiIDw8IHJvdyA8PCBlbmRsOw0KKyAgICAgIG5kYmluZm8ucmVsZWFzZVNj YW5PcGVyYXRpb24oc2Nhbk9wKTsNCisgICAgfQ0KKyAgICBuZGJpbmZvLmNsb3Nl VGFibGUodGFibGUpOw0KKyAgICB0YWJsZUlkKys7DQorICB9DQorDQorICAvLyBT aG91bGQgbmV2ZXIgY29tZSBoZXJlDQorICBhc3NlcnQoZmFsc2UpOw0KKyAgcmV0 dXJuIE5EQlRfRkFJTEVEOw0KK30NCisNCitpbnQgcnVuU2NhblN0b3AoTkRCVF9D b250ZXh0KiBjdHgsIE5EQlRfU3RlcCogc3RlcCkNCit7DQorICBOZGJJbmZvIG5k YmluZm8oJmN0eC0+bV9jbHVzdGVyX2Nvbm5lY3Rpb24sICJuZGJpbmZvLyIpOw0K KyAgaWYgKCFuZGJpbmZvLmluaXQoKSkNCisgIHsNCisgICAgZ19lcnIgPDwgIm5k YmluZm8uaW5pdCBmYWlsZWQiIDw8IGVuZGw7DQorICAgIHJldHVybiBOREJUX0ZB SUxFRDsNCisgIH0NCisNCisgIFVpbnQzMiB0YWJsZUlkID0gMDsNCisgIHdoaWxl KHRydWUpIHsNCisgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxlKiB0YWJsZTsN CisNCisgICAgaW50IGVyciA9IG5kYmluZm8ub3BlblRhYmxlKHRhYmxlSWQsICZ0 YWJsZSk7DQorICAgIGlmIChlcnIgPT0gTmRiSW5mbzo6RVJSX05vU3VjaFRhYmxl KQ0KKyAgICB7DQorICAgICAgLy8gTm8gbW9yZSB0YWJsZXMgLT4gcmV0dXJuDQor ICAgICAgcmV0dXJuIE5EQlRfT0s7DQorICAgIH0NCisgICAgZWxzZSBpZiAoZXJy ICE9IDApDQorICAgIHsNCisgICAgICAvLyBVbmV4cGVjdGVkIHJldHVybiBjb2Rl DQorICAgICAgZ19lcnIgPDwgIkZhaWxlZCB0byBvcGVuVGFibGUoIiA8PCB0YWJs ZUlkIDw8ICIpLCBlcnI6ICIgPDwgZXJyIDw8IGVuZGw7DQorICAgICAgcmV0dXJu IE5EQlRfRkFJTEVEOw0KKyAgICB9DQorICAgIG5kYm91dCA8PCAidGFibGU6ICIg PDwgdGFibGUtPmdldE5hbWUoKSA8PCBlbmRsOw0KKw0KKyAgICBmb3IgKGludCBs ID0gMDsgbCA8IGN0eC0+Z2V0TnVtTG9vcHMoKSoxMDsgbCsrKQ0KKyAgICB7DQor ICAgICAgTmRiSW5mb1NjYW5PcGVyYXRpb24qIHNjYW5PcCA9IE5VTEw7DQorICAg ICAgaWYgKG5kYmluZm8uY3JlYXRlU2Nhbk9wZXJhdGlvbih0YWJsZSwgJnNjYW5P cCkpDQorICAgICAgew0KKyAgICAgICAgZ19lcnIgPDwgIk5vIE5kYkluZm9TY2Fu T3BlcmF0aW9uIiA8PCBlbmRsOw0KKyAgICAgICAgcmV0dXJuIE5EQlRfRkFJTEVE Ow0KKyAgICAgIH0NCisNCisgICAgICBpZiAoc2Nhbk9wLT5yZWFkVHVwbGVzKCkg IT0gMCkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAic2Nhbk9wLT5yZWFk VHVwbGVzIGZhaWxlZCIgPDwgZW5kbDsNCisgICAgICAgIHJldHVybiBOREJUX0ZB SUxFRDsNCisgICAgICB9DQorDQorICAgICAgaW50IGNvbHVtbklkID0gMDsNCisg ICAgICB3aGlsZSAoc2Nhbk9wLT5nZXRWYWx1ZShjb2x1bW5JZCkpDQorICAgICAg ICBjb2x1bW5JZCsrOw0KKyAgICAgIC8vIEF0IGxlYXN0IG9uZSBjb2x1bW4NCisg ICAgICBhc3NlcnQoY29sdW1uSWQgPj0gMSk7DQorDQorICAgICAgaWYoc2Nhbk9w LT5leGVjdXRlKCkgIT0gMCkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAi c2Nhbk9wLT5leGVjdXRlIGZhaWxlZCIgPDwgZW5kbDsNCisgICAgICAgIHJldHVy biBOREJUX0ZBSUxFRDsNCisgICAgICB9DQorDQorICAgICAgaW50IHN0b3BSb3cg PSByYW5kKCkgJSAxMDA7DQorICAgICAgaW50IHJvdyA9IDA7DQorICAgICAgd2hp bGUoc2Nhbk9wLT5uZXh0UmVzdWx0KCkgPT0gMSkNCisgICAgICB7DQorICAgICAg ICByb3crKzsNCisgICAgICAgIGlmIChyb3cgPT0gc3RvcFJvdykNCisgICAgICAg IHsNCisgICAgICAgICAgbmRib3V0X2MoIkFib3J0aW5nIHNjYW4gYXQgcm93ICVk Iiwgc3RvcFJvdyk7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAg ICAgIH0NCisgICAgICBuZGJpbmZvLnJlbGVhc2VTY2FuT3BlcmF0aW9uKHNjYW5P cCk7DQorICAgIH0NCisgICAgbmRiaW5mby5jbG9zZVRhYmxlKHRhYmxlKTsNCisg ICAgdGFibGVJZCsrOw0KKyAgfQ0KKw0KKyAgLy8gU2hvdWxkIG5ldmVyIGNvbWUg aGVyZQ0KKyAgYXNzZXJ0KGZhbHNlKTsNCisgIHJldHVybiBOREJUX0ZBSUxFRDsN Cit9DQorDQorDQoraW50IHJ1blJhdGVsaW1pdChOREJUX0NvbnRleHQqIGN0eCwg TkRCVF9TdGVwKiBzdGVwKQ0KK3sNCisgIE5kYkluZm8gbmRiaW5mbygmY3R4LT5t X2NsdXN0ZXJfY29ubmVjdGlvbiwgIm5kYmluZm8vIik7DQorICBpZiAoIW5kYmlu Zm8uaW5pdCgpKQ0KKyAgew0KKyAgICBnX2VyciA8PCAibmRiaW5mby5pbml0IGZh aWxlZCIgPDwgZW5kbDsNCisgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgfQ0K Kw0KKyAgVWludDMyIHRhYmxlSWQgPSA2OyAvLyBNQVNWIDANCisgIHdoaWxlKHRy dWUpIHsNCisNCisgICAgY29uc3QgTmRiSW5mbzo6SW5mb1RhYmxlKiB0YWJsZTsN CisNCisgICAgaW50IGVyciA9IG5kYmluZm8ub3BlblRhYmxlKHRhYmxlSWQsICZ0 YWJsZSk7DQorICAgIGlmIChlcnIgPT0gTmRiSW5mbzo6RVJSX05vU3VjaFRhYmxl KQ0KKyAgICB7DQorICAgICAgLy8gTm8gbW9yZSB0YWJsZXMgLT4gcmV0dXJuDQor ICAgICAgcmV0dXJuIE5EQlRfT0s7DQorICAgIH0NCisgICAgZWxzZSBpZiAoZXJy ICE9IDApDQorICAgIHsNCisgICAgICAvLyBVbmV4cGVjdGVkIHJldHVybiBjb2Rl DQorICAgICAgZ19lcnIgPDwgIkZhaWxlZCB0byBvcGVuVGFibGUoIiA8PCB0YWJs ZUlkIDw8ICIpLCBlcnI6ICIgPDwgZXJyIDw8IGVuZGw7DQorICAgICAgcmV0dXJu IE5EQlRfRkFJTEVEOw0KKyAgICB9DQorICAgIG5kYm91dCA8PCAidGFibGU6ICIg PDwgdGFibGUtPmdldE5hbWUoKSA8PCBlbmRsOw0KKyAgICANCisNCisgICAgc3Ry dWN0IHsgVWludDMyIHJvd3M7IFVpbnQzMiBieXRlczsgfSBsaW1pdHNbXSA9IHsN CisgICAgICB7IDAsIDAgfSwNCisgICAgICB7IDEsIDAgfSwgeyAyLCAwIH0sIHsg MTAsIDAgfSwgeyAzNywgMCB9LCB7IDEwMDAsIDAgfSwNCisgICAgICB7IDAsIDEg fSwgeyAwLCAyIH0sIHsgMCwgMTAgfSwgeyAwLCAzNyB9LCB7IDAsIDEwMDAgfSwN CisgICAgICB7IDEsIDEgfSwgeyAyLCAyIH0sIHsgMTAsIDEwIH0sIHsgMzcsIDM3 IH0sIHsgMTAwMCwgMTAwMCB9DQorICAgIH07DQorDQorICAgIGludCBsYXN0Um93 cyA9IDA7DQorICAgIGZvciAoaW50IGwgPSAwOyBsIDwgc2l6ZW9mKGxpbWl0cykv c2l6ZW9mKGxpbWl0c1swXSk7IGwrKykNCisgICAgew0KKw0KKyAgICAgIFVpbnQz MiBtYXhSb3dzID0gbGltaXRzW2xdLnJvd3M7DQorICAgICAgVWludDMyIG1heEJ5 dGVzID0gbGltaXRzW2xdLmJ5dGVzOw0KKw0KKyAgICAgIE5kYkluZm9TY2FuT3Bl cmF0aW9uKiBzY2FuT3AgPSBOVUxMOw0KKyAgICAgIGlmIChuZGJpbmZvLmNyZWF0 ZVNjYW5PcGVyYXRpb24odGFibGUsICZzY2FuT3AsIG1heFJvd3MsIG1heEJ5dGVz KSkNCisgICAgICB7DQorICAgICAgICBnX2VyciA8PCAiTm8gTmRiSW5mb1NjYW5P cGVyYXRpb24iIDw8IGVuZGw7DQorICAgICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7 DQorICAgICAgfQ0KKw0KKyAgICAgIGlmIChzY2FuT3AtPnJlYWRUdXBsZXMoKSAh PSAwKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJzY2FuT3AtPnJlYWRU dXBsZXMgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAgICAgcmV0dXJuIE5EQlRfRkFJ TEVEOw0KKyAgICAgIH0NCisNCisgICAgICBpbnQgY29sdW1uSWQgPSAwOw0KKyAg ICAgIHdoaWxlIChzY2FuT3AtPmdldFZhbHVlKGNvbHVtbklkKSkNCisgICAgICAg IGNvbHVtbklkKys7DQorICAgICAgLy8gQXQgbGVhc3Qgb25lIGNvbHVtbg0KKyAg ICAgIGFzc2VydChjb2x1bW5JZCA+PSAxKTsNCisNCisgICAgICBpZihzY2FuT3At PmV4ZWN1dGUoKSAhPSAwKQ0KKyAgICAgIHsNCisgICAgICAgIGdfZXJyIDw8ICJz Y2FuT3AtPmV4ZWN1dGUgZmFpbGVkIiA8PCBlbmRsOw0KKyAgICAgICAgcmV0dXJu IE5EQlRfRkFJTEVEOw0KKyAgICAgIH0NCisNCisgICAgICBpbnQgcm93ID0gMDsN CisgICAgICB3aGlsZShzY2FuT3AtPm5leHRSZXN1bHQoKSA9PSAxKQ0KKyAgICAg ICAgcm93Kys7DQorICAgICAgbmRiaW5mby5yZWxlYXNlU2Nhbk9wZXJhdGlvbihz Y2FuT3ApOw0KKw0KKyAgICAgIG5kYm91dF9jKCJbJXUsJXVdIHJvd3M6ICVkIiwg bWF4Um93cywgbWF4Qnl0ZXMsIHJvdyk7DQorICAgICAgaWYgKGxhc3RSb3dzICE9 IDApDQorICAgICAgew0KKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbnVtYmVy IG9mIHJvd3MgaXMgc2FtZSBhcyBsYXN0IHJvdW5kIG9uIHNhbWUgdGFibGUNCisg ICAgICAgIGlmIChsYXN0Um93cyAhPSByb3cpDQorICAgICAgICB7DQorICAgICAg ICAgIGdfZXJyIDw8ICJHb3QgZGlmZmVyZW50IG51bWJlciBvZiByb3dzIHRoaXMg cm91bmQsIGV4cGVjdGVkOiAiDQorICAgICAgICAgICAgICAgIDw8IGxhc3RSb3dz IDw8ICIsIGdvdDogIiA8PCByb3cgPDwgZW5kbDsNCisgICAgICAgICAgbmRiaW5m by5jbG9zZVRhYmxlKHRhYmxlKTsNCisgICAgICAgICAgcmV0dXJuIE5EQlRfRkFJ TEVEOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgICBsYXN0Um93cyA9IHJv dzsNCisgICAgfQ0KKyAgICBuZGJpbmZvLmNsb3NlVGFibGUodGFibGUpOw0KKyAg ICB0YWJsZUlkKys7DQorICB9DQorDQorICAvLyBTaG91bGQgbmV2ZXIgY29tZSBo ZXJlDQorICBhc3NlcnQoZmFsc2UpOw0KKyAgcmV0dXJuIE5EQlRfRkFJTEVEOw0K K30NCisNCitpbnQgcnVuVGVzdFRhYmxlKE5EQlRfQ29udGV4dCogY3R4LCBOREJU X1N0ZXAqIHN0ZXApDQorew0KKyAgTmRiSW5mbyBuZGJpbmZvKCZjdHgtPm1fY2x1 c3Rlcl9jb25uZWN0aW9uLCAibmRiaW5mby8iKTsNCisgIGlmICghbmRiaW5mby5p bml0KCkpDQorICB7DQorICAgIGdfZXJyIDw8ICJuZGJpbmZvLmluaXQgZmFpbGVk IiA8PCBlbmRsOw0KKyAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICB9DQorDQor ICBjb25zdCBOZGJJbmZvOjpJbmZvVGFibGUqIHRhYmxlOw0KKyAgaWYgKG5kYmlu Zm8ub3BlblRhYmxlKCJuZGJpbmZvL1RFU1QiLCAmdGFibGUpICE9IDApDQorICB7 DQorICAgIGdfZXJyIDw8ICJGYWlsZWQgdG8gb3BlblRhYmxlKFRFU1QpIiA8PCBl bmRsOw0KKyAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICB9DQorDQorICBmb3Ig KGludCBsID0gMDsgbCA8IGN0eC0+Z2V0TnVtTG9vcHMoKTsgbCsrKQ0KKyAgew0K Kw0KKyAgICBOZGJJbmZvU2Nhbk9wZXJhdGlvbiogc2Nhbk9wID0gTlVMTDsNCisg ICAgaWYgKG5kYmluZm8uY3JlYXRlU2Nhbk9wZXJhdGlvbih0YWJsZSwgJnNjYW5P cCkpDQorICAgIHsNCisgICAgICBnX2VyciA8PCAiTm8gTmRiSW5mb1NjYW5PcGVy YXRpb24iIDw8IGVuZGw7DQorICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAg ICB9DQorDQorICAgIGlmIChzY2FuT3AtPnJlYWRUdXBsZXMoKSAhPSAwKQ0KKyAg ICB7DQorICAgICAgZ19lcnIgPDwgInNjYW5PcC0+cmVhZFR1cGxlcyBmYWlsZWQi IDw8IGVuZGw7DQorICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOw0KKyAgICB9DQor DQorICAgIGNvbnN0IE5kYkluZm9SZWNBdHRyKiBub2RlSWQ9IHNjYW5PcC0+Z2V0 VmFsdWUoIk5PREVfSUQiKTsNCisgICAgY29uc3QgTmRiSW5mb1JlY0F0dHIqIGJs b2NrTnVtYmVyPSBzY2FuT3AtPmdldFZhbHVlKCJCTE9DS19OVU1CRVIiKTsNCisg ICAgY29uc3QgTmRiSW5mb1JlY0F0dHIqIGJsb2NrSW5zdGFuY2U9IHNjYW5PcC0+ Z2V0VmFsdWUoIkJMT0NLX0lOU1RBTkNFIik7DQorICAgIGNvbnN0IE5kYkluZm9S ZWNBdHRyKiBjb3VudGVyPSBzY2FuT3AtPmdldFZhbHVlKCJDT1VOVEVSIik7DQor DQorICAgIGlmKHNjYW5PcC0+ZXhlY3V0ZSgpICE9IDApDQorICAgIHsNCisgICAg ICBnX2VyciA8PCAic2Nhbk9wLT5leGVjdXRlIGZhaWxlZCIgPDwgZW5kbDsNCisg ICAgICByZXR1cm4gTkRCVF9GQUlMRUQ7DQorICAgIH0NCisNCisgICAgaW50IHJv d3MgPSAwOw0KKyAgICB3aGlsZShzY2FuT3AtPm5leHRSZXN1bHQoKSA9PSAxKQ0K KyAgICB7DQorICAgICAgcm93cysrOy8vDQorICAgIH0NCisgICAgbmRib3V0IDw8 ICJyb3dzOiAiIDw8IHJvd3MgPDwgZW5kbDsNCisgICAgbmRiaW5mby5yZWxlYXNl U2Nhbk9wZXJhdGlvbihzY2FuT3ApOw0KKyAgfQ0KKw0KKyAgbmRiaW5mby5jbG9z ZVRhYmxlKHRhYmxlKTsNCisgIHJldHVybiBOREJUX09LOw0KK30NCisNCisNCiBO REJUX1RFU1RTVUlURSh0ZXN0TmRiaW5mbyk7DQogVEVTVENBU0UoIk5kYmluZm8i LA0KICAgICAgICAgICJUZXN0IG5kYmFwaSBpbnRlcmZhY2UgdG8gTkRCJElORk8i KXsNCkBAIC04Myw2ICszODMsMjMgQEAgVEVTVENBU0UoIk5kYmluZm8xMCIsDQog ICAgICAgICAgIlRlc3QgbmRiYXBpIGludGVyZmFjZSB0byBOREIkSU5GTyIpew0K ICAgU1RFUFMocnVuVGVzdE5kYkluZm8sIDEwKTsNCiB9DQorVEVTVENBU0UoIlNj YW5BbGwiLA0KKyAgICAgICAgICJTY2FuIGFsbCBjb2x1bXMgb2YgYWxsIHRhYmxl IGtub3duIHRvIE5kYkluZm8iKXsNCisgIFNURVBTKHJ1blNjYW5BbGwsIDEpOw0K K30NCitURVNUQ0FTRSgiU2NhblN0b3AiLA0KKyAgICAgICAgICJSYW5kb21seSBz dG9wIHRoZSBzY2FuIil7DQorICBTVEVQUyhydW5TY2FuU3RvcCwgMSk7DQorfQ0K K1RFU1RDQVNFKCJSYXRlbGltaXQiLA0KKyAgICAgICAgICJTY2FuIHdpdCBkaWZm ZXJlbnQgY29tYmluYXRpb25zIG9mIHJhdGVsaW1pdCIpew0KKyAgU1RFUFMocnVu UmF0ZWxpbWl0LCAxKTsNCit9DQorVEVTVENBU0UoIlRlc3RUYWJsZSIsDQorICAg ICAgICAgIlNjYW4gdGhlIHRlc3QgdGFibGUgYW5kIG1ha2Ugc3VyZSBpdCByZXR1 cm5zIGNvcnJlY3QgbnVtYmVyICINCisgICAgICAgICAgIm9mIHJvd3Mgd2hpY2gg d2lsbCBkZXBlbmQgb24gaG93IG1hbnkgVFVQIGJsb2NrcyBhcmUgY29uZmlndXJl ZCIpew0KKyAgU1RFUChydW5UZXN0VGFibGUpOw0KK30NCiBOREJUX1RFU1RTVUlU RV9FTkQodGVzdE5kYmluZm8pOw0KIA0KIA0KDQo= --Boundary_(ID_aXm024OGdD8uXSoPQW0DDQ) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/magnus.blaudd@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/magnus.blaudd@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: magnus.blaudd@stripped # target_branch: file:///home/msvensson/mysql/tmp/7allT58Yj8/7.1-\ # ndbinfo/ # testament_sha1: 12e0dcaa1fea62ec8c9a848e55029d5bee4e0539 # timestamp: 2009-07-03 13:43:41 +0200 # source_branch: file:///home/msvensson/mysql/7.1-ndbinfo/ # base_revision_id: jonas@stripped # # Begin bundle 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 --Boundary_(ID_aXm024OGdD8uXSoPQW0DDQ)--