Name: series-workflown8mrw Phase: Failed StartedAt: 2026-06-30 01:11:41 +0000 UTC FinishedAt: 2026-06-30 01:18:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8mrw[0] Phase: Succeeded StartedAt: 2026-06-30 01:11:41 +0000 UTC FinishedAt: 2026-06-30 01:18:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8mrw[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 01:11:41 +0000 UTC FinishedAt: 2026-06-30 01:18:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgbW0vc3dhcC5jIHRvIG1tL2ZvbGlvX2xydS5jLCBtb3ZlcyBzd2FwX3NldHVwKCkgYW5kIHBhZ2VfY2x1c3RlciB0byBtbS9zd2FwX3N0YXRlLmMsIGFuZCByZWxvY2F0ZXMgZGVjbGFyYXRpb25zIGZyb20gaW5jbHVkZS9saW51eC9zd2FwLmggdG8gbW0vaW50ZXJuYWwuaC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGNjMjg4YmFkODQ2ZmU5MjY3ZmM3YjZmMTQwMTAyYzg2ZTM0ZWM2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDAxOjE3OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggYjliMGMyMThiZmI0NDAuLmM4NGViYzYyYTIxODNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC0xOSw5ICYjNDM7MTksNiBAQCBUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uXG4gb2YgdGhlIHZpcnR1YWwgbWVtb3J5IChWTSkgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kXG4gdGhlIHdyaXRlb3V0IG9mIGRpcnR5IGRhdGEgdG8gZGlzay5cbiBcbi1EZWZhdWx0IHZhbHVlcyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIG1vc3Qgb2YgdGhlc2Vcbi1maWxlcyBjYW4gYmUgZm91bmQgaW4gbW0vc3dhcC5jLlxuLVxuIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiBcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0XG5pbmRleCBhYWJkZDNjYmE1OGU4MC4uZDZkMTg5YjlhOTk2MzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdFxuQEAgLTExNyw3ICYjNDM7MTE3LDcgQEAgTW9yZSBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnNcbiAuLiAja2VybmVsLWRvYzo6IG1tL2htbS5jIChidWlsZCB3YXJuaW5ncylcbiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtcmVtYXAuY1xuIC4uIGtlcm5lbC1kb2M6OiBtbS9odWdldGxiLmNcbi0uLiBrZXJuZWwtZG9jOjogbW0vc3dhcC5jXG4mIzQzOy4uIGtlcm5lbC1kb2M6OiBtbS9mb2xpb19scnUuY1xuIC4uIGtlcm5lbC1kb2M6OiBtbS9tZW1jb250cm9sLmNcbiAuLiAja2VybmVsLWRvYzo6IG1tL21lbW9yeS10aWVycy5jIChidWlsZCB3YXJuaW5ncylcbiAuLiBrZXJuZWwtZG9jOjogbW0vc2htZW0uY1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDE1MDExZjU3NTJhOTk0Li45NDM5YjdjZTcwOTIyNCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE3MDg3LDcgJiM0MzsxNzA4Nyw3IEBAIEY6XHREb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RcbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0XG4gRjpcdGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiBGOlx0aW5jbHVkZS9saW51eC9tbXpvbmUuaFxuLUY6XHRtbS9zd2FwLmNcbiYjNDM7RjpcdG1tL2ZvbGlvX2xydS5jXG4gRjpcdG1tL3Ztc2Nhbi5jXG4gRjpcdG1tL3dvcmtpbmdzZXQuY1xuIFxuQEAgLTE3MjM3LDcgJiM0MzsxNzIzNyw2IEBAIEY6XHRpbmNsdWRlL2xpbnV4L3N3YXAuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L3N3YXBmaWxlLmhcbiBGOlx0aW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcbiBGOlx0bW0vcGFnZV9pby5jXG4tRjpcdG1tL3N3YXAuY1xuIEY6XHRtbS9zd2FwLmhcbiBGOlx0bW0vc3dhcF90YWJsZS5oXG4gRjpcdG1tL3N3YXBfc3RhdGUuY1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEzLi42MjQ4MjQ2NGM2NzEwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI5MywzOSAmIzQzOzI5MywxOSBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IHBhZ2Vfc3dhcF9lbnRyeShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tLyogbGludXgvbW0vd29ya2luZ3NldC5jICovXG4tYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLVx0XHRcdFx0Ym9vbCBmbHVzaCk7XG4tdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1cbiAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi9cbiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gLyogRGVmaW5pdGlvbiBvZiBnbG9iYWxfem9uZV9wYWdlX3N0YXRlIG5vdCBhdmFpbGFibGUgeWV0ICovXG4gI2RlZmluZSBucl9mcmVlX3BhZ2VzKCkgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKVxuIFxuJiM0MzsvKiBsaW51eC9tbS9mb2xpb19scnUuYyAqL1xuJiM0Mzt2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCBscnVfYWRkX2RyYWluX2FsbCh2b2lkKTtcbiBcbi0vKiBsaW51eC9tbS9zd2FwLmMgKi9cbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZCk7XG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICopO1xuLXZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7XG4tdm9pZCBmb2xpb19hZGRfbHJ1X3ZtYShzdHJ1Y3QgZm9saW8gKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xuLXZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopO1xuLXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKik7XG4tXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0Lypcbi1cdCAqIEhvbGRpbmcgUE1ELXNpemVkIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZSB1bmJhbGFuY2VzIGFjY291bnRpbmcuXG4tXHQgKiBIb2xkaW5nIHNtYWxsIG51bWJlcnMgb2YgbG93LW9yZGVyIG1USFAgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlXG4tXHQgKiB3aWxsIGJlIHNlbnNpYmxlLCBidXQgbm9ib2R5IGhhcyBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIHRoYXQgeWV0LlxuLVx0ICovXG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pO1xuLX1cbiYjNDM7LyogbGludXgvbW0vZm9saW8tY29tcGF0LmMgKi9cbiYjNDM7dm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuIGV4dGVybiBhdG9taWNfdCBscnVfZGlzYWJsZV9jb3VudDtcbiBcbkBAIC0zMzQsNDMgJiM0MzszMTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2NhY2hlX2Rpc2FibGVkKHZvaWQpXG4gXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2VuYWJsZSh2b2lkKVxuLXtcbi1cdGF0b21pY19kZWMoXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xuLX1cbi1cbi1leHRlcm4gdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcbi1leHRlcm4gdm9pZCBscnVfYWRkX2RyYWluKHZvaWQpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1KGludCBjcHUpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fYWxsKHZvaWQpO1xuLXZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tZXh0ZXJuIHZvaWQgc3dhcF9zZXR1cCh2b2lkKTtcbi1cbiAvKiBsaW51eC9tbS92bXNjYW4uYyAqL1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm1hc2spO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCk7XG4tXG4tI2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxIFx1MDAzY1x1MDAzYyAxKVxuLSNkZWZpbmUgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkUgKDEgXHUwMDNjXHUwMDNjIDIpXG4tI2RlZmluZSBNSU5fU1dBUFBJTkVTUyAwXG4tI2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcbi1cbi0vKiBKdXN0IHJlY2xhaW0gZnJvbSBhbm9uIGZvbGlvcyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gKi9cbi0jZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyAmIzQzOyAxKVxuLVxuLWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi1cdFx0XHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucyxcbi1cdFx0XHRcdFx0XHQgIGludCAqc3dhcHBpbmVzcyk7XG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbkBAIC0zOTEsMTEgJiM0MzszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19OVU1BICovXG4gXG4tI2lmZGVmIENPTkZJR19OVU1BXG4tZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvO1xuLWV4dGVybiBpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvO1xuLSNlbmRpZlxuLVxuIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xuIFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xuQEAgLTU1Miw3ICYjNDM7NDkxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZWZmOWY5ZTdlMDYxYzEuLjVmNzEyZjliYmU3MzU5IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlXG5AQCAtNTAsNyAmIzQzOzUwLDcgQEAgZW5kaWZcbiBcbiBvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiBcdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuLVx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbiYjNDM7XHRcdFx0ICAgcmVhZGFoZWFkLm8gZm9saW9fbHJ1Lm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG4gXHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxuIFx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4gXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9mb2xpb19scnUuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIG1tL3N3YXAuY1xucmVuYW1lIHRvIG1tL2ZvbGlvX2xydS5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNDY5MjRhNzk3ZWFkNWUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvX2xydS5jXG5AQCAtMSwxNyAmIzQzOzEsMTMgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLypcbi0gKiAgbGludXgvbW0vc3dhcC5jXG4mIzQzOyAqICBsaW51eC9tbS9mb2xpb19scnUuY1xuICAqXG4gICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHNcbiAgKi9cbiBcbiAvKlxuLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBvcGVyYXRpb24gb2YgdGhlXG4tICogTGludXggVk0gc3Vic3lzdGVtLiBGaW5lLXR1bmluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpblxuLSAqIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC5cbi0gKiBTdGFydGVkIDE4LjEyLjkxXG4tICogU3dhcCBhZ2luZyBhZGRlZCAyMy4yLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG4tICogQnVmZmVybWVtIGxpbWl0cyBhZGRlZCAxMi4zLjk4LCBSaWsgdmFuIFJpZWwuXG4mIzQzOyAqIEZvbGlvIExSVSBoZWxwZXJzOiBhZGQvcmVtb3ZlIGZvbGlvcyBmcm9tIExSVSBsaXN0cywgYmF0Y2hpbmcsXG4mIzQzOyAqIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uLCBhbmQgcGFnZSBjYWNoZSByZWxlYXNlIHBhdGhzLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbkBAIC00MywxMCAmIzQzOzM5LDYgQEBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvcGFnZW1hcC5oXHUwMDNlXG4gXG4tLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqL1xuLWludCBwYWdlX2NsdXN0ZXI7XG4tc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4tXG4gc3RydWN0IGNwdV9mYmF0Y2hlcyB7XG4gXHQvKlxuIFx0ICogVGhlIGZvbGxvd2luZyBmb2xpbyBiYXRjaGVzIGFyZSBncm91cGVkIHRvZ2V0aGVyIGJlY2F1c2UgdGhleSBhcmUgcHJvdGVjdGVkXG5AQCAtMTE3MSwzNSAmIzQzOzExNjMsMyBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludFxuIFx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xuIH1cbiAjZW5kaWZcbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzd2FwX3N5c2N0bF90YWJsZVtdID0ge1xuLVx0e1xuLVx0XHQucHJvY25hbWVcdD0gXCYjMzQ7cGFnZS1jbHVzdGVyXCYjMzQ7LFxuLVx0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3Rlcixcbi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuLVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4tXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbi1cdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcbi1cdH1cbi19O1xuLVxuLS8qXG4tICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbVxuLSAqL1xuLXZvaWQgX19pbml0IHN3YXBfc2V0dXAodm9pZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcbi1cbi1cdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXG4tXHRpZiAobWVncyBcdTAwM2MgMTYpXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDI7XG4tXHRlbHNlXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4tXHQvKlxuLVx0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxuLVx0ICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcbi1cdCAqL1xuLVxuLVx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCYjMzQ7dm1cJiMzNDssIHN3YXBfc3lzY3RsX3RhYmxlKTtcbi19XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4wYzJlZTQ3ZDg5MzY2NiAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0yNCw2ICYjNDM7MjQsNzMgQEBcbiBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gXG4mIzQzOy8qIG1tL3dvcmtpbmdzZXQuYyAqL1xuJiM0Mztib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4mIzQzO1x0XHRcdCAgICBib29sIGZsdXNoKTtcbiYjNDM7dm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuJiM0Mzt2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4mIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4mIzQzO3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztcbiYjNDM7LyogbW0vZm9saW9fbHJ1LmMgKi9cbiYjNDM7dm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbiYjNDM7dm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhvbGRpbmcgUE1ELXNpemVkIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZSB1bmJhbGFuY2VzIGFjY291bnRpbmcuXG4mIzQzO1x0ICogSG9sZGluZyBzbWFsbCBudW1iZXJzIG9mIGxvdy1vcmRlciBtVEhQIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZVxuJiM0MztcdCAqIHdpbGwgYmUgc2Vuc2libGUsIGJ1dCBub2JvZHkgaGFzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgdGhhdCB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9lbmFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGF0b21pY19kZWMoXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxydV9jYWNoZV9kaXNhYmxlKHZvaWQpO1xuJiM0Mzt2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7XG4mIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9jcHUoaW50IGNwdSk7XG4mIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9jcHVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4mIzQzO3ZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCBmb2xpb19tYXJrX2xhenlmcmVlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztcbiYjNDM7LyogbW0vdm1zY2FuLmMgKi9cbiYjNDM7dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbiYjNDM7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm1hc2spO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuJiM0MztcdFx0XHQgICAgICBpbnQgem9uZV9pZHgpO1xuJiM0MztcbiYjNDM7I2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxIFx1MDAzY1x1MDAzYyAxKVxuJiM0MzsjZGVmaW5lIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFICgxIFx1MDAzY1x1MDAzYyAyKVxuJiM0MzsjZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbiYjNDM7I2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcbiYjNDM7XG4mIzQzOy8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xuJiM0MzsjZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyAmIzQzOyAxKVxuJiM0MztcbiYjNDM7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgICBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4mIzQzO1x0XHRcdFx0XHQgICBpbnQgKnN3YXBwaW5lc3MpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuJiM0MztcdFx0XHRcdCAgICAgcGdfZGF0YV90ICpwZ2RhdCxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4mIzQzO2V4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcbiYjNDM7ZXh0ZXJuIGludCBzeXNjdGxfbWluX3NsYWJfcmF0aW87XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKlxuICAqIE1haW50YWlucyBzdGF0ZSBhY3Jvc3MgYSBwYWdlIHRhYmxlIG1vdmUuIFRoZSBvcGVyYXRpb24gYXNzdW1lcyBib3RoIHNvdXJjZVxuICAqIGFuZCBkZXN0aW5hdGlvbiBWTUFzIGFscmVhZHkgZXhpc3QgYW5kIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcbmluZGV4IGFiZTEzYjI5MWRkYzhiLi42YzcyZmU2Y2FlZjc1ZCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waWRfbmFtZXNwYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21lbWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3N3YXAuaFwmIzM0O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxZS4uMDkxMWJkZmUwM2YwNmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTgsOCAmIzQzOzgsNiBAQCBzdHJ1Y3QgbWVtcG9saWN5O1xuIHN0cnVjdCBzd2FwX2lvY2I7XG4gc3RydWN0IHN3YXBfbWVtY2dfdGFibGU7XG4gXG4tZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7XG4tXG4gI2lmIGRlZmluZWQoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUylcbiAjZGVmaW5lIFNXQVBfQ0FDSEVfUEZOX0JJVFMgKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgLSBQQUdFX1NISUZUKVxuICNlbGlmIGRlZmluZWQoTUFYX1BIWVNNRU1fQklUUylcbkBAIC03OSw2ICYjNDM7NzcsOCBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX1NXQVBcbiYjNDM7dm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTtcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrX3R5cGVzLmhcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xuIFxuQEAgLTMzNiw2ICYjNDM7MzM2LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3N3YXBfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xuIHN0cnVjdCBzd2FwX2lvY2I7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9yZWFkYWhlYWRfc2V0dXAodm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpzd2FwX2NsdXN0ZXJfbG9jayhcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgcGdvZmZfdCBvZmZzZXQsIGJvb2wgaXJxKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYwLi5kMDZmOGJjNDZlNzc1MiAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjIsMTAgJiM0MzsyMiwxNSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gXG4mIzQzOy8qIFN3YXAgcmVhZGFoZWFkIGNsdXN0ZXIgc2l6ZSwgYXMgYSBwb3dlciBvZiAyIHBhZ2VzLiAqL1xuJiM0MztzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjtcbiYjNDM7c3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4mIzQzO1xuIC8qXG4gICogc3dhcHBlcl9zcGFjZSBpcyBhIGZpY3Rpb24sIHJldGFpbmVkIHRvIHNpbXBsaWZ5IHRoZSBwYXRoIHRocm91Z2hcbiAgKiB2bXNjYW4mIzM5O3Mgc2hyaW5rX2ZvbGlvX2xpc3QuXG5AQCAtOTg3LDYgJiM0Mzs5OTIsMzggQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtwYWdlLWNsdXN0ZXJcJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3RlcixcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbiYjNDM7XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4mIzQzO1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyXHRcdD0gKHZvaWQgKilcdTAwMjZwYWdlX2NsdXN0ZXJfbWF4LFxuJiM0MztcdH1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzd2FwX3JlYWRhaGVhZF9zZXR1cCAtIGRlZmF1bHRzIGFuZCBzeXNjdGwgZm9yIHN3YXAgY2FjaGUgcmVhZGFoZWFkIGNsdXN0ZXJpbmdcbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcbiYjNDM7XG4mIzQzO1x0LyogVXNlIGEgc21hbGxlciBjbHVzdGVyIGZvciBzbWFsbC1tZW1vcnkgbWFjaGluZXMgKi9cbiYjNDM7XHRpZiAobWVncyBcdTAwM2MgMTYpXG4mIzQzO1x0XHRwYWdlX2NsdXN0ZXIgPSAyO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSaWdodCBub3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBtZWFucyB0aGF0IHdlXG4mIzQzO1x0ICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCYjMzQ7dm1cJiMzNDssIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZSk7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TWVNGU1xuIHN0YXRpYyBzc2l6ZV90IHZtYV9yYV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi40OWM2NjI5ZmE4NWExOSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc2NTQsNyAmIzQzOzc2NTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBuaWQ7XG4gXG4tXHRzd2FwX3NldHVwKCk7XG4mIzQzO1x0c3dhcF9yZWFkYWhlYWRfc2V0dXAoKTtcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbiAgXHRcdGtzd2FwZF9ydW4obmlkKTtcbiBcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCB2bXNjYW5fc3lzY3RsX3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNjMjg4YmFkODQ2ZmU5MjY3ZmM3YjZmMTQwMTAyYzg2ZTM0ZWM2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDMwIDAxOjE3OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CmluZGV4IGI5YjBjMjE4YmZiNDQwLi5jODRlYmM2MmEyMTgzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdApAQCAtMTksOSAmIzQzOzE5LDYgQEAgVGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSB1c2VkIHRvIHR1bmUgdGhlIG9wZXJhdGlvbgogb2YgdGhlIHZpcnR1YWwgbWVtb3J5IChWTSkgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kCiB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLgogCi1EZWZhdWx0IHZhbHVlcyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIG1vc3Qgb2YgdGhlc2UKLWZpbGVzIGNhbiBiZSBmb3VuZCBpbiBtbS9zd2FwLmMuCi0KIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bToKIAogLSBhZG1pbl9yZXNlcnZlX2tieXRlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0CmluZGV4IGFhYmRkM2NiYTU4ZTgwLi5kNmQxODliOWE5OTYzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdApAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBNb3JlIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucwogLi4gI2tlcm5lbC1kb2M6OiBtbS9obW0uYyAoYnVpbGQgd2FybmluZ3MpCiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtcmVtYXAuYwogLi4ga2VybmVsLWRvYzo6IG1tL2h1Z2V0bGIuYwotLi4ga2VybmVsLWRvYzo6IG1tL3N3YXAuYwomIzQzOy4uIGtlcm5lbC1kb2M6OiBtbS9mb2xpb19scnUuYwogLi4ga2VybmVsLWRvYzo6IG1tL21lbWNvbnRyb2wuYwogLi4gI2tlcm5lbC1kb2M6OiBtbS9tZW1vcnktdGllcnMuYyAoYnVpbGQgd2FybmluZ3MpCiAuLiBrZXJuZWwtZG9jOjogbW0vc2htZW0uYwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAxNTAxMWY1NzUyYTk5NC4uOTQzOWI3Y2U3MDkyMjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzA4Nyw3ICYjNDM7MTcwODcsNyBAQCBGOglEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QKIEY6CURvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdAogRjoJaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAogRjoJaW5jbHVkZS9saW51eC9tbXpvbmUuaAotRjoJbW0vc3dhcC5jCiYjNDM7RjoJbW0vZm9saW9fbHJ1LmMKIEY6CW1tL3Ztc2Nhbi5jCiBGOgltbS93b3JraW5nc2V0LmMKIApAQCAtMTcyMzcsNyAmIzQzOzE3MjM3LDYgQEAgRjoJaW5jbHVkZS9saW51eC9zd2FwLmgKIEY6CWluY2x1ZGUvbGludXgvc3dhcGZpbGUuaAogRjoJaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKIEY6CW1tL3BhZ2VfaW8uYwotRjoJbW0vc3dhcC5jCiBGOgltbS9zd2FwLmgKIEY6CW1tL3N3YXBfdGFibGUuaAogRjoJbW0vc3dhcF9zdGF0ZS5jCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDhmMGY2OGUyNDViYWEzLi42MjQ4MjQ2NGM2NzEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTI5MywzOSAmIzQzOzI5MywxOSBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IHBhZ2Vfc3dhcF9lbnRyeShzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlyZXR1cm4gZW50cnk7CiB9CiAKLS8qIGxpbnV4L21tL3dvcmtpbmdzZXQuYyAqLwotYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LAotCQkJCWJvb2wgZmx1c2gpOwotdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwotdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKLXZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7Ci12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLQogLyogbGludXgvbW0vcGFnZV9hbGxvYy5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7CiAKIC8qIERlZmluaXRpb24gb2YgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZSBub3QgYXZhaWxhYmxlIHlldCAqLwogI2RlZmluZSBucl9mcmVlX3BhZ2VzKCkgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKQogCiYjNDM7LyogbGludXgvbW0vZm9saW9fbHJ1LmMgKi8KJiM0Mzt2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9hbGwodm9pZCk7CiAKLS8qIGxpbnV4L21tL3N3YXAuYyAqLwotdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCi0JCXVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpOwotdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICopOwotdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTsKLXZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKLXZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopOwotdm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqKTsKLQotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JLyoKLQkgKiBIb2xkaW5nIFBNRC1zaXplZCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUgdW5iYWxhbmNlcyBhY2NvdW50aW5nLgotCSAqIEhvbGRpbmcgc21hbGwgbnVtYmVycyBvZiBsb3ctb3JkZXIgbVRIUCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUKLQkgKiB3aWxsIGJlIHNlbnNpYmxlLCBidXQgbm9ib2R5IGhhcyBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIHRoYXQgeWV0LgotCSAqLwotCXJldHVybiAhZm9saW9fdGVzdF9sYXJnZShmb2xpbyk7Ci19CiYjNDM7LyogbGludXgvbW0vZm9saW8tY29tcGF0LmMgKi8KJiM0Mzt2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGV4dGVybiBhdG9taWNfdCBscnVfZGlzYWJsZV9jb3VudDsKIApAQCAtMzM0LDQzICYjNDM7MzE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9jYWNoZV9kaXNhYmxlZCh2b2lkKQogCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2xydV9kaXNhYmxlX2NvdW50KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9lbmFibGUodm9pZCkKLXsKLQlhdG9taWNfZGVjKCZhbXA7bHJ1X2Rpc2FibGVfY291bnQpOwotfQotCi1leHRlcm4gdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTsKLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7Ci1leHRlcm4gdm9pZCBscnVfYWRkX2RyYWluX2NwdShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpOwotZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9hbGwodm9pZCk7Ci12b2lkIGZvbGlvX2RlYWN0aXZhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1leHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwotCiAvKiBsaW51eC9tbS92bXNjYW4uYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCi0JCQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrKTsKLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCk7Ci0KLSNkZWZpbmUgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCAoMSAmbHQ7Jmx0OyAxKQotI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSAmbHQ7Jmx0OyAyKQotI2RlZmluZSBNSU5fU1dBUFBJTkVTUyAwCi0jZGVmaW5lIE1BWF9TV0FQUElORVNTIDIwMAotCi0vKiBKdXN0IHJlY2xhaW0gZnJvbSBhbm9uIGZvbGlvcyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gKi8KLSNkZWZpbmUgU1dBUFBJTkVTU19BTk9OX09OTFkgKE1BWF9TV0FQUElORVNTICYjNDM7IDEpCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAotCQkJCQkJICBnZnBfdCBnZnBfbWFzaywKLQkJCQkJCSAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKLQkJCQkJCSAgaW50ICpzd2FwcGluZXNzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJCWdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwKLQkJCQkJCXBnX2RhdGFfdCAqcGdkYXQsCi0JCQkJCQl1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOwogbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7CkBAIC0zOTEsMTEgJiM0MzszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCiB9CiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICZhbXA7JmFtcDsgQ09ORklHX05VTUEgKi8KIAotI2lmZGVmIENPTkZJR19OVU1BCi1leHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87Ci1leHRlcm4gaW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbzsKLSNlbmRpZgotCiB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTsKIAogZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZCk7CkBAIC01NTIsNyAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpOwogfQpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCBlZmY5ZjllN2UwNjFjMS4uNWY3MTJmOWJiZTczNTkgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC01MCw3ICYjNDM7NTAsNyBAQCBlbmRpZgogCiBvYmoteQkJCTo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXAotCQkJICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcCiYjNDM7CQkJICAgcmVhZGFoZWFkLm8gZm9saW9fbHJ1Lm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFwKIAkJCSAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXAogCQkJICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXAogCQkJICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXApkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vZm9saW9fbHJ1LmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gbW0vc3dhcC5jCnJlbmFtZSB0byBtbS9mb2xpb19scnUuYwppbmRleCA1ODhmNTBkOGYxYThjOS4uNDY5MjRhNzk3ZWFkNWUgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpb19scnUuYwpAQCAtMSwxNyAmIzQzOzEsMTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIC8qCi0gKiAgbGludXgvbW0vc3dhcC5jCiYjNDM7ICogIGxpbnV4L21tL2ZvbGlvX2xydS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHMKICAqLwogCiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG9wZXJhdGlvbiBvZiB0aGUKLSAqIExpbnV4IFZNIHN1YnN5c3RlbS4gRmluZS10dW5pbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4KLSAqIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC4KLSAqIFN0YXJ0ZWQgMTguMTIuOTEKLSAqIFN3YXAgYWdpbmcgYWRkZWQgMjMuMi45NSwgU3RlcGhlbiBUd2VlZGllLgotICogQnVmZmVybWVtIGxpbWl0cyBhZGRlZCAxMi4zLjk4LCBSaWsgdmFuIFJpZWwuCiYjNDM7ICogRm9saW8gTFJVIGhlbHBlcnM6IGFkZC9yZW1vdmUgZm9saW9zIGZyb20gTFJVIGxpc3RzLCBiYXRjaGluZywKJiM0MzsgKiBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiwgYW5kIHBhZ2UgY2FjaGUgcmVsZWFzZSBwYXRocy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKQEAgLTQzLDEwICYjNDM7MzksNiBAQAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL3BhZ2VtYXAuaCZndDsKIAotLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqLwotaW50IHBhZ2VfY2x1c3RlcjsKLXN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxOwotCiBzdHJ1Y3QgY3B1X2ZiYXRjaGVzIHsKIAkvKgogCSAqIFRoZSBmb2xsb3dpbmcgZm9saW8gYmF0Y2hlcyBhcmUgZ3JvdXBlZCB0b2dldGhlciBiZWNhdXNlIHRoZXkgYXJlIHByb3RlY3RlZApAQCAtMTE3MSwzNSAmIzQzOzExNjMsMyBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludAogCQlscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpOwogfQogI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfc3lzY3RsX3RhYmxlW10gPSB7Ci0JewotCQkucHJvY25hbWUJPSAmIzM0O3BhZ2UtY2x1c3RlciYjMzQ7LAotCQkuZGF0YQkJPSAmYW1wO3BhZ2VfY2x1c3RlciwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAotCQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAotCQkuZXh0cmEyCQk9ICh2b2lkICopJmFtcDtwYWdlX2NsdXN0ZXJfbWF4LAotCX0KLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGFueSBzZXR1cCBmb3IgdGhlIHN3YXAgc3lzdGVtCi0gKi8KLXZvaWQgX19pbml0IHN3YXBfc2V0dXAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTsKLQotCS8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovCi0JaWYgKG1lZ3MgJmx0OyAxNikKLQkJcGFnZV9jbHVzdGVyID0gMjsKLQllbHNlCi0JCXBhZ2VfY2x1c3RlciA9IDM7Ci0JLyoKLQkgKiBSaWdodCBub3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBtZWFucyB0aGF0IHdlCi0JICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmUKLQkgKi8KLQotCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9zeXNjdGxfdGFibGUpOwotfQpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjBjMmVlNDdkODkzNjY2IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTI0LDYgJiM0MzsyNCw3MyBAQAogCiBzdHJ1Y3QgZm9saW9fYmF0Y2g7CiAKJiM0MzsvKiBtbS93b3JraW5nc2V0LmMgKi8KJiM0Mztib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiYjNDM7CQkJICAgIGJvb2wgZmx1c2gpOwomIzQzO3ZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKJiM0Mzt2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpOwomIzQzO3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzOwomIzQzOy8qIG1tL2ZvbGlvX2xydS5jICovCiYjNDM7dm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKJiM0Mzt2b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEhvbGRpbmcgUE1ELXNpemVkIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZSB1bmJhbGFuY2VzIGFjY291bnRpbmcuCiYjNDM7CSAqIEhvbGRpbmcgc21hbGwgbnVtYmVycyBvZiBsb3ctb3JkZXIgbVRIUCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUKJiM0MzsJICogd2lsbCBiZSBzZW5zaWJsZSwgYnV0IG5vYm9keSBoYXMgaW1wbGVtZW50ZWQgYW5kIHRlc3RlZCB0aGF0IHlldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhZm9saW9fdGVzdF9sYXJnZShmb2xpbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfZW5hYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlhdG9taWNfZGVjKCZhbXA7bHJ1X2Rpc2FibGVfY291bnQpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxydV9jYWNoZV9kaXNhYmxlKHZvaWQpOwomIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTsKJiM0Mzt2b2lkIGxydV9hZGRfZHJhaW5fY3B1KGludCBjcHUpOwomIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9jcHVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MzsKJiM0MzsvKiBtbS92bXNjYW4uYyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCiYjNDM7CQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrKTsKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LAomIzQzOwkJCSAgICAgIGludCB6b25lX2lkeCk7CiYjNDM7CiYjNDM7I2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxICZsdDsmbHQ7IDEpCiYjNDM7I2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSAmbHQ7Jmx0OyAyKQomIzQzOyNkZWZpbmUgTUlOX1NXQVBQSU5FU1MgMAomIzQzOyNkZWZpbmUgTUFYX1NXQVBQSU5FU1MgMjAwCiYjNDM7CiYjNDM7LyogSnVzdCByZWNsYWltIGZyb20gYW5vbiBmb2xpb3MgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltICovCiYjNDM7I2RlZmluZSBTV0FQUElORVNTX0FOT05fT05MWSAoTUFYX1NXQVBQSU5FU1MgJiM0MzsgMSkKJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJCSAgIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkJICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKJiM0MzsJCQkJCSAgIGludCAqc3dhcHBpbmVzcyk7CiYjNDM7dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCiYjNDM7CQkJCSAgICAgcGdfZGF0YV90ICpwZ2RhdCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX05VTUEKJiM0MztleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87CiYjNDM7ZXh0ZXJuIGludCBzeXNjdGxfbWluX3NsYWJfcmF0aW87CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogTWFpbnRhaW5zIHN0YXRlIGFjcm9zcyBhIHBhZ2UgdGFibGUgbW92ZS4gVGhlIG9wZXJhdGlvbiBhc3N1bWVzIGJvdGggc291cmNlCiAgKiBhbmQgZGVzdGluYXRpb24gVk1BcyBhbHJlYWR5IGV4aXN0IGFuZCBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgpkaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmMKaW5kZXggYWJlMTNiMjkxZGRjOGIuLjZjNzJmZTZjYWVmNzVkIDEwMDY0NAotLS0gYS9tbS9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waWRfbmFtZXNwYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9tZW1mZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggNzdkMmQxNGVkYTQyMWUuLjA5MTFiZGZlMDNmMDZhIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC04LDggJiM0Mzs4LDYgQEAgc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBzd2FwX2lvY2I7CiBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZTsKIAotZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7Ci0KICNpZiBkZWZpbmVkKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMpCiAjZGVmaW5lIFNXQVBfQ0FDSEVfUEZOX0JJVFMgKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgLSBQQUdFX1NISUZUKQogI2VsaWYgZGVmaW5lZChNQVhfUEhZU01FTV9CSVRTKQpAQCAtNzksNiAmIzQzOzc3LDggQEAgZW51bSBzd2FwX2NsdXN0ZXJfZmxhZ3MgewogfTsKIAogI2lmZGVmIENPTkZJR19TV0FQCiYjNDM7dm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTsKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9zd2Fwb3BzLmgmZ3Q7IC8qIGZvciBzd3Bfb2Zmc2V0ICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYmxrX3R5cGVzLmgmZ3Q7IC8qIGZvciBiaW9fZW5kX2lvX3QgKi8KIApAQCAtMzM2LDYgJiM0MzszMzYsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fc3dhcF9mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqLwogc3RydWN0IHN3YXBfaW9jYjsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9yZWFkYWhlYWRfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKnN3YXBfY2x1c3Rlcl9sb2NrKAogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgcGdvZmZfdCBvZmZzZXQsIGJvb2wgaXJxKQogewpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYwLi5kMDZmOGJjNDZlNzc1MiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMjIsMTAgJiM0MzsyMiwxNSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9odWdlX21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3lzY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCiYjNDM7LyogU3dhcCByZWFkYWhlYWQgY2x1c3RlciBzaXplLCBhcyBhIHBvd2VyIG9mIDIgcGFnZXMuICovCiYjNDM7c3RhdGljIGludCBwYWdlX2NsdXN0ZXI7CiYjNDM7c3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7CiYjNDM7CiAvKgogICogc3dhcHBlcl9zcGFjZSBpcyBhIGZpY3Rpb24sIHJldGFpbmVkIHRvIHNpbXBsaWZ5IHRoZSBwYXRoIHRocm91Z2gKICAqIHZtc2NhbiYjMzk7cyBzaHJpbmtfZm9saW9fbGlzdC4KQEAgLTk4Nyw2ICYjNDM7OTkyLDM4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJcmV0dXJuIGZvbGlvOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cGFnZS1jbHVzdGVyJiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3BhZ2VfY2x1c3RlciwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAomIzQzOwkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIJCT0gKHZvaWQgKikmYW1wO3BhZ2VfY2x1c3Rlcl9tYXgsCiYjNDM7CX0KJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZwomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTsKJiM0MzsKJiM0MzsJLyogVXNlIGEgc21hbGxlciBjbHVzdGVyIGZvciBzbWFsbC1tZW1vcnkgbWFjaGluZXMgKi8KJiM0MzsJaWYgKG1lZ3MgJmx0OyAxNikKJiM0MzsJCXBhZ2VfY2x1c3RlciA9IDI7CiYjNDM7CWVsc2UKJiM0MzsJCXBhZ2VfY2x1c3RlciA9IDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJpZ2h0IG5vdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1lYW5zIHRoYXQgd2UKJiM0MzsJICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmUKJiM0MzsJICovCiYjNDM7CiYjNDM7CXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX1NZU0ZTCiBzdGF0aWMgc3NpemVfdCB2bWFfcmFfZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi40OWM2NjI5ZmE4NWExOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc2NTQsNyAmIzQzOzc2NTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKQogewogCWludCBuaWQ7CiAKLQlzd2FwX3NldHVwKCk7CiYjNDM7CXN3YXBfcmVhZGFoZWFkX3NldHVwKCk7CiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKQogIAkJa3N3YXBkX3J1bihuaWQpOwogCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgdm1zY2FuX3N5c2N0bF90YWJsZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzcKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVmYWN0b3Jpbmcgb2YgYG1tL3N3YXAuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgcmVuYW1lcyBgbW0vc3dhcC5jYCB0byBgbW0vZm9saW9fbHJ1LmNgIGFuZCBzaHVmZmxlcyBzb21lIGNvZGUgYXJvdW5kLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKRmlyc3QsIHRoZSBmaWxlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlcyAoYHZtLnJzdGAsIGBtbS1hcGkucnN0YCksIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIGFuZCBhIHJlbmFtZSBpbiBgTWFrZWZpbGVgLiBUaGUgbWFpbiBoZWFkZXIgaW5jbHVkZSB1cGRhdGVzIGluY2x1ZGUgbW92aW5nIGRlY2xhcmF0aW9ucyBmcm9tIGBzd2FwLmhgIHRvIGBtbS9pbnRlcm5hbC5oYCBhbmQgYWRkaW5nIGBzd2FwX3JlYWRhaGVhZF9zZXR1cCgpYCB0byBgbW0vc3dhcC5oYC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBgcGFnZV9jbHVzdGVyYCB2YXJpYWJsZSBhbmQgYHN3YXBfc2V0dXAoKWAgZnVuY3Rpb24gZnJvbSBgbW0vc3dhcC5jYCB0byBgbW0vc3dhcF9zdGF0ZS5jYC4gSXQgbG9va3MgbGlrZSB0aGUgcmVuYW1lIHRvIGBmb2xpb19scnUuY2AgaXMgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgdGhlIGZpbGUgKm1vc3RseSogY29udGFpbnMgbm93LiBgc3dhcF9zZXR1cCgpYCYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBpbiBgc3dhcF9yZWFkYWhlYWRfc2V0dXAoKWAuIEFuZCB0aGUgY2FsbHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gYHZtc2Nhbi5jYC4gU28gaXQmIzM5O3MgYSByZWZhY3RvcmluZywgcGxhaW4gYW5kIHNpbXBsZSwgd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhwZWN0ZWQuCgpCdXQsIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcy4gTGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBjb21wYXJlIHRoZSByZWxldmFudCBjb2RlIGJsb2Nrcy4gSGVyZSYjMzk7cyB3aGF0IHdhcyBpbiB0aGUgb2xkIGBtbS9zd2FwLmNgOgoKYGBgYwovKiBIb3cgbWFueSBwYWdlcyBkbyB3ZSB0cnkgdG8gc3dhcCBvciBwYWdlIGluL291dCB0b2dldGhlcj8gQXMgYSBwb3dlciBvZiAyICovCmludCBwYWdlX2NsdXN0ZXI7CnN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxOwouLi4Kc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9zeXNjdGxfdGFibGVbXSA9IHsKCXsKCQkucHJvY25hbWUJPSAmIzM0O3BhZ2UtY2x1c3RlciYjMzQ7LAoJCS5kYXRhCQk9ICZhbXA7cGFnZV9jbHVzdGVyLAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCgkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKCQkuZXh0cmEyCQk9ICh2b2lkICopJmFtcDtwYWdlX2NsdXN0ZXJfbWF4LAoJfQp9OwoKLyoKICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbQogKi8Kdm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKQp7Cgl1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTsKCgkvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqLwoJaWYgKG1lZ3MgJmx0OyAxNikKCQlwYWdlX2NsdXN0ZXIgPSAyOwoJZWxzZQoJCXBhZ2VfY2x1c3RlciA9IDM7CgkvKgoJICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZQoJICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmUKCSAqLwoKCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9zeXNjdGxfdGFibGUpOwp9CmBgYAoKQW5kIGhlcmUmIzM5O3MgdGhlIG5ldyBgbW0vc3dhcF9zdGF0ZS5jYDoKCmBgYGMKJiM0MzsvKiBTd2FwIHJlYWRhaGVhZCBjbHVzdGVyIHNpemUsIGFzIGEgcG93ZXIgb2YgMiBwYWdlcy4gKi8KJiM0MztzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjsKJiM0MztzdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTsKLi4uCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cGFnZS1jbHVzdGVyJiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3BhZ2VfY2x1c3RlciwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAomIzQzOwkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIJCT0gKHZvaWQgKikmYW1wO3BhZ2VfY2x1c3Rlcl9tYXgsCiYjNDM7CX0KJiM0Mzt9OwoKJiM0MzsvKioKJiM0MzsgKiBzd2FwX3JlYWRhaGVhZF9zZXR1cCAtIGRlZmF1bHRzIGFuZCBzeXNjdGwgZm9yIHN3YXAgY2FjaGUgcmVhZGFoZWFkIGNsdXN0ZXJpbmcKJiM0MzsgKi8KJiM0Mzt2b2lkIF9faW5pdCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBtZWdzID0gUEFHRVNfVE9fTUIodG90YWxyYW1fcGFnZXMoKSk7CgomIzQzOwkvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqLwomIzQzOwlpZiAobWVncyAmbHQ7IDE2KQomIzQzOwkJcGFnZV9jbHVzdGVyID0gMjsKJiM0MzsJZWxzZQomIzQzOwkJcGFnZV9jbHVzdGVyID0gMzsKJiM0MzsJLyoKJiM0MzsJICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZQomIzQzOwkgKiBfcmVhbGx5XyBkb24mIzM5O3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZQomIzQzOwkgKi8KCiYjNDM7CXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTsKJiM0Mzt9CmBgYAoKVGhleSYjMzk7cmUgZXNzZW50aWFsbHkgaWRlbnRpY2FsISBUaGUgb25seSBkaWZmZXJlbmNlIEkgc2VlIGlzIHRoYXQgYHBhZ2VfY2x1c3RlcmAgaXMgbm93IGBzdGF0aWMgaW50YCBpbnN0ZWFkIG9mIGp1c3QgYGludGAuIEJ1dCwgaG9sZCBvbi4uLiBpZiBpdCB3YXMgcHJldmlvdXNseSBhbiBgaW50YCBpbiBgbW0vc3dhcC5jCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NsdXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jLTMwLS8qIFN3YXAgcmVhZGFoZWFkIGNsdXN0ZXIgc2l6ZSwgYXMgYSBwb3dlciBvZiAyIHBhZ2VzLiAqL1xubW0vc3dhcF9zdGF0ZS5jOjMxOnN0YXRpYyBpbnQgcGFnZV9jbHVzdGVyO1xubW0vc3dhcF9zdGF0ZS5jOjMyOnN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxO1xubW0vc3dhcF9zdGF0ZS5jLTMzLVxuLS1cbm1tL3N3YXBfc3RhdGUuYz03Njg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3dhcGluX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy03NzMtXG5tbS9zd2FwX3N0YXRlLmM6Nzc0Olx0bWF4X3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgUkVBRF9PTkNFKHBhZ2VfY2x1c3Rlcik7XG5tbS9zd2FwX3N0YXRlLmMtNzc1LVx0aWYgKG1heF9wYWdlcyBcdTAwM2M9IDEpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTc5OC0gKiBQcmltaXRpdmUgc3dhcCByZWFkYWhlYWQgY29kZS4gV2Ugc2ltcGx5IHJlYWQgYW4gYWxpZ25lZCBibG9jayBvZlxubW0vc3dhcF9zdGF0ZS5jOjc5OTogKiAoMSBcdTAwM2NcdTAwM2MgcGFnZV9jbHVzdGVyKSBlbnRyaWVzIGluIHRoZSBzd2FwIGFyZWEuIFRoaXMgbWV0aG9kIGlzIGNob3NlblxubW0vc3dhcF9zdGF0ZS5jLTgwMC0gKiBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGNvc3QgdXMgYW55IHNlZWsgdGltZS4gIFdlIGFsc28gbWFrZSBzdXJlIHRvIHF1ZXVlXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTgwNz1zdHJ1Y3QgZm9saW8gKnN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy04MjMtXG5tbS9zd2FwX3N0YXRlLmM6ODI0Olx0LyogUmVhZCBhIHBhZ2VfY2x1c3RlciBzaXplZCBhbmQgYWxpZ25lZCBjbHVzdGVyIGFyb3VuZCBvZmZzZXQuICovXG5tbS9zd2FwX3N0YXRlLmMtODI1LVx0c3RhcnRfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiB+bWFzaztcbi0tXG5tbS9zd2FwX3N0YXRlLmM9ODUwPXN0YXRpYyBpbnQgc3dhcF92bWFfcmFfd2luKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtODU3LVxubW0vc3dhcF9zdGF0ZS5jOjg1ODpcdG1heF93aW4gPSAxIFx1MDAzY1x1MDAzYyBtaW4oUkVBRF9PTkNFKHBhZ2VfY2x1c3RlciksIFNXQVBfUkFfT1JERVJfQ0VJTElORyk7XG5tbS9zd2FwX3N0YXRlLmMtODU5LVx0aWYgKG1heF93aW4gPT0gMSlcbi0tXG5tbS9zd2FwX3N0YXRlLmM9OTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3N3YXBfc3RhdGUuYy05OTctXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtwYWdlLWNsdXN0ZXJcJiMzNDssXG5tbS9zd2FwX3N0YXRlLmM6OTk4Olx0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3Rlcixcbm1tL3N3YXBfc3RhdGUuYy05OTktXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMTAwMi1cdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxubW0vc3dhcF9zdGF0ZS5jOjEwMDM6XHRcdC5leHRyYTJcdFx0PSAodm9pZCAqKVx1MDAyNnBhZ2VfY2x1c3Rlcl9tYXgsXG5tbS9zd2FwX3N0YXRlLmMtMTAwNC1cdH1cbi0tXG5tbS9zd2FwX3N0YXRlLmM9MTAxMD12b2lkIF9faW5pdCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0xMDE1LVx0aWYgKG1lZ3MgXHUwMDNjIDE2KVxubW0vc3dhcF9zdGF0ZS5jOjEwMTY6XHRcdHBhZ2VfY2x1c3RlciA9IDI7XG5tbS9zd2FwX3N0YXRlLmMtMTAxNy1cdGVsc2Vcbm1tL3N3YXBfc3RhdGUuYzoxMDE4Olx0XHRwYWdlX2NsdXN0ZXIgPSAzO1xubW0vc3dhcF9zdGF0ZS5jLTEwMTktXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgzCgkJCQkJCQlvdXRwdXQ6IDEwMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIE9ubHk6IE5vIEZ1bmN0aW9uYWwgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCBpdC4gVGhlIGBwYWdlX2NsdXN0ZXJgIHZhcmlhYmxlIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIHRoZSBgbW0vc3dhcF9zdGF0ZS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGZvciByZWZhY3RvcmluZyBwdXJwb3Nlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgcGF0Y2ggd29uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBvciB2dWxuZXJhYmlsaXRpZXMgZnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludC4gSXQmIzM5O3MgYSBjbGVhbiByZWZhY3RvciwgYW5kIEkgY2FuIG1vdmUgZm9yd2FyZCBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgbW0vc3dhcC5jIHRvIG1tL2ZvbGlvX2xydS5jLCBtb3ZlcyBzd2FwX3NldHVwKCkgYW5kIHBhZ2VfY2x1c3RlciB0byBtbS9zd2FwX3N0YXRlLmMsIGFuZCByZWxvY2F0ZXMgZGVjbGFyYXRpb25zIGZyb20gaW5jbHVkZS9saW51eC9zd2FwLmggdG8gbW0vaW50ZXJuYWwuaC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjE4OjAwLjg1ODYzNzAwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzk3NzI1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6MTg6MDAuODU4NjQxNTI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQyMTE4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Y2MyODhiYWQ4NDZmZTkyNjdmYzdiNmYxNDAxMDJjODZlMzRlYzY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDAxOjE3OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi5jODRlYmM2MmEyMTgzZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5AQCAtMTksOSArMTksNiBAQCBUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uXFxuIG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSAoVk0pIHN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsIGFuZFxcbiB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLlxcbiBcXG4tRGVmYXVsdCB2YWx1ZXMgYW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBtb3N0IG9mIHRoZXNlXFxuLWZpbGVzIGNhbiBiZSBmb3VuZCBpbiBtbS9zd2FwLmMuXFxuLVxcbiBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XFxuIFxcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdFxcbmluZGV4IGFhYmRkM2NiYTU4ZTgwLi5kNmQxODliOWE5OTYzNiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcXG5AQCAtMTE3LDcgKzExNyw3IEBAIE1vcmUgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zXFxuIC4uICNrZXJuZWwtZG9jOjogbW0vaG1tLmMgKGJ1aWxkIHdhcm5pbmdzKVxcbiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtcmVtYXAuY1xcbiAuLiBrZXJuZWwtZG9jOjogbW0vaHVnZXRsYi5jXFxuLS4uIGtlcm5lbC1kb2M6OiBtbS9zd2FwLmNcXG4rLi4ga2VybmVsLWRvYzo6IG1tL2ZvbGlvX2xydS5jXFxuIC4uIGtlcm5lbC1kb2M6OiBtbS9tZW1jb250cm9sLmNcXG4gLi4gI2tlcm5lbC1kb2M6OiBtbS9tZW1vcnktdGllcnMuYyAoYnVpbGQgd2FybmluZ3MpXFxuIC4uIGtlcm5lbC1kb2M6OiBtbS9zaG1lbS5jXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAxNTAxMWY1NzUyYTk5NC4uOTQzOWI3Y2U3MDkyMjQgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNzA4Nyw3ICsxNzA4Nyw3IEBAIEY6XFx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0XFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0XFxuIEY6XFx0aW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbiBGOlxcdGluY2x1ZGUvbGludXgvbW16b25lLmhcXG4tRjpcXHRtbS9zd2FwLmNcXG4rRjpcXHRtbS9mb2xpb19scnUuY1xcbiBGOlxcdG1tL3Ztc2Nhbi5jXFxuIEY6XFx0bW0vd29ya2luZ3NldC5jXFxuIFxcbkBAIC0xNzIzNyw3ICsxNzIzNyw2IEBAIEY6XFx0aW5jbHVkZS9saW51eC9zd2FwLmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L3N3YXBmaWxlLmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxcbiBGOlxcdG1tL3BhZ2VfaW8uY1xcbi1GOlxcdG1tL3N3YXAuY1xcbiBGOlxcdG1tL3N3YXAuaFxcbiBGOlxcdG1tL3N3YXBfdGFibGUuaFxcbiBGOlxcdG1tL3N3YXBfc3RhdGUuY1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLjYyNDgyNDY0YzY3MTBjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMjkzLDM5ICsyOTMsMTkgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdHJldHVybiBlbnRyeTtcXG4gfVxcbiBcXG4tLyogbGludXgvbW0vd29ya2luZ3NldC5jICovXFxuLWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tXFx0XFx0XFx0XFx0Ym9vbCBmbHVzaCk7XFxuLXZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4tdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTtcXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcXG4tdm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLVxcbiAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi9cXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xcbiBcXG4gLyogRGVmaW5pdGlvbiBvZiBnbG9iYWxfem9uZV9wYWdlX3N0YXRlIG5vdCBhdmFpbGFibGUgeWV0ICovXFxuICNkZWZpbmUgbnJfZnJlZV9wYWdlcygpIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUylcXG4gXFxuKy8qIGxpbnV4L21tL2ZvbGlvX2xydS5jICovXFxuK3ZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rdm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkIGxydV9hZGRfZHJhaW5fYWxsKHZvaWQpO1xcbiBcXG4tLyogbGludXgvbW0vc3dhcC5jICovXFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcXG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICopO1xcbi12b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xcbi12b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XFxuLXZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopO1xcbi12b2lkIGZvbGlvX21hcmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICopO1xcbi1cXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0LypcXG4tXFx0ICogSG9sZGluZyBQTUQtc2l6ZWQgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlIHVuYmFsYW5jZXMgYWNjb3VudGluZy5cXG4tXFx0ICogSG9sZGluZyBzbWFsbCBudW1iZXJzIG9mIGxvdy1vcmRlciBtVEhQIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZVxcbi1cXHQgKiB3aWxsIGJlIHNlbnNpYmxlLCBidXQgbm9ib2R5IGhhcyBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIHRoYXQgeWV0Llxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuICFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKTtcXG4tfVxcbisvKiBsaW51eC9tbS9mb2xpby1jb21wYXQuYyAqL1xcbit2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIFxcbiBleHRlcm4gYXRvbWljX3QgbHJ1X2Rpc2FibGVfY291bnQ7XFxuIFxcbkBAIC0zMzQsNDMgKzMxNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfY2FjaGVfZGlzYWJsZWQodm9pZClcXG4gXFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZscnVfZGlzYWJsZV9jb3VudCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfZW5hYmxlKHZvaWQpXFxuLXtcXG4tXFx0YXRvbWljX2RlYyhcXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xcbi19XFxuLVxcbi1leHRlcm4gdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcXG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTtcXG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9jcHUoaW50IGNwdSk7XFxuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xcbi1leHRlcm4gdm9pZCBscnVfYWRkX2RyYWluX2FsbCh2b2lkKTtcXG4tdm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLWV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9pZCk7XFxuLVxcbiAvKiBsaW51eC9tbS92bXNjYW4uYyAqL1xcbi1leHRlcm4gdW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbWFzayk7XFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCk7XFxuLVxcbi0jZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4tI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcXHUwMDNjXFx1MDAzYyAyKVxcbi0jZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcXG4tI2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcXG4tXFxuLS8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xcbi0jZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyArIDEpXFxuLVxcbi1leHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgaW50ICpzd2FwcGluZXNzKTtcXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHBnX2RhdGFfdCAqcGdkYXQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5AQCAtMzkxLDExICszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19TWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfTlVNQSAqL1xcbiBcXG4tI2lmZGVmIENPTkZJR19OVU1BXFxuLWV4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcXG4tZXh0ZXJuIGludCBzeXNjdGxfbWluX3NsYWJfcmF0aW87XFxuLSNlbmRpZlxcbi1cXG4gdm9pZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XFxuIFxcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTtcXG5AQCAtNTUyLDcgKzQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcbiB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGVcXG5pbmRleCBlZmY5ZjllN2UwNjFjMS4uNWY3MTJmOWJiZTczNTkgMTAwNjQ0XFxuLS0tIGEvbW0vTWFrZWZpbGVcXG4rKysgYi9tbS9NYWtlZmlsZVxcbkBAIC01MCw3ICs1MCw3IEBAIGVuZGlmXFxuIFxcbiBvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxuLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbitcXHRcXHRcXHQgICByZWFkYWhlYWQubyBmb2xpb19scnUubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4gXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxcXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL2ZvbGlvX2xydS5jXFxuc2ltaWxhcml0eSBpbmRleCA5NiVcXG5yZW5hbWUgZnJvbSBtbS9zd2FwLmNcXG5yZW5hbWUgdG8gbW0vZm9saW9fbHJ1LmNcXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNDY5MjRhNzk3ZWFkNWUgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5jXFxuKysrIGIvbW0vZm9saW9fbHJ1LmNcXG5AQCAtMSwxNyArMSwxMyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuIC8qXFxuLSAqICBsaW51eC9tbS9zd2FwLmNcXG4rICogIGxpbnV4L21tL2ZvbGlvX2xydS5jXFxuICAqXFxuICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQgIExpbnVzIFRvcnZhbGRzXFxuICAqL1xcbiBcXG4gLypcXG4tICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG9wZXJhdGlvbiBvZiB0aGVcXG4tICogTGludXggVk0gc3Vic3lzdGVtLiBGaW5lLXR1bmluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpblxcbi0gKiBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QuXFxuLSAqIFN0YXJ0ZWQgMTguMTIuOTFcXG4tICogU3dhcCBhZ2luZyBhZGRlZCAyMy4yLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXFxuLSAqIEJ1ZmZlcm1lbSBsaW1pdHMgYWRkZWQgMTIuMy45OCwgUmlrIHZhbiBSaWVsLlxcbisgKiBGb2xpbyBMUlUgaGVscGVyczogYWRkL3JlbW92ZSBmb2xpb3MgZnJvbSBMUlUgbGlzdHMsIGJhdGNoaW5nLFxcbisgKiBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiwgYW5kIHBhZ2UgY2FjaGUgcmVsZWFzZSBwYXRocy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG5AQCAtNDMsMTAgKzM5LDYgQEBcXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvcGFnZW1hcC5oXFx1MDAzZVxcbiBcXG4tLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqL1xcbi1pbnQgcGFnZV9jbHVzdGVyO1xcbi1zdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTtcXG4tXFxuIHN0cnVjdCBjcHVfZmJhdGNoZXMge1xcbiBcXHQvKlxcbiBcXHQgKiBUaGUgZm9sbG93aW5nIGZvbGlvIGJhdGNoZXMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYmVjYXVzZSB0aGV5IGFyZSBwcm90ZWN0ZWRcXG5AQCAtMTE3MSwzNSArMTE2MywzIEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XFxuIFxcdFxcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XFxuIH1cXG4gI2VuZGlmXFxuLVxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzd2FwX3N5c2N0bF90YWJsZVtdID0ge1xcbi1cXHR7XFxuLVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInBhZ2UtY2x1c3RlclxcXCIsXFxuLVxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cGFnZV9jbHVzdGVyLFxcbi1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4tXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLVxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbi1cXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4tXFx0XFx0LmV4dHJhMlxcdFxcdD0gKHZvaWQgKilcXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcXG4tXFx0fVxcbi19O1xcbi1cXG4tLypcXG4tICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbVxcbi0gKi9cXG4tdm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgbWVncyA9IFBBR0VTX1RPX01CKHRvdGFscmFtX3BhZ2VzKCkpO1xcbi1cXG4tXFx0LyogVXNlIGEgc21hbGxlciBjbHVzdGVyIGZvciBzbWFsbC1tZW1vcnkgbWFjaGluZXMgKi9cXG4tXFx0aWYgKG1lZ3MgXFx1MDAzYyAxNilcXG4tXFx0XFx0cGFnZV9jbHVzdGVyID0gMjtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRwYWdlX2NsdXN0ZXIgPSAzO1xcbi1cXHQvKlxcbi1cXHQgKiBSaWdodCBub3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBtZWFucyB0aGF0IHdlXFxuLVxcdCAqIF9yZWFsbHlfIGRvbid0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcXG4tXFx0ICovXFxuLVxcbi1cXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcXFwidm1cXFwiLCBzd2FwX3N5c2N0bF90YWJsZSk7XFxuLX1cXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uMGMyZWU0N2Q4OTM2NjYgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtMjQsNiArMjQsNzMgQEBcXG4gXFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcXG4gXFxuKy8qIG1tL3dvcmtpbmdzZXQuYyAqL1xcbitib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuK1xcdFxcdFxcdCAgICBib29sIGZsdXNoKTtcXG4rdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbit2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XFxuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XFxuK3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbitcXG4rLyogbW0vZm9saW9fbHJ1LmMgKi9cXG4rdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xcbit2b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rdm9pZCBmb2xpb19hZGRfbHJ1X3ZtYShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBIb2xkaW5nIFBNRC1zaXplZCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUgdW5iYWxhbmNlcyBhY2NvdW50aW5nLlxcbitcXHQgKiBIb2xkaW5nIHNtYWxsIG51bWJlcnMgb2YgbG93LW9yZGVyIG1USFAgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlXFxuK1xcdCAqIHdpbGwgYmUgc2Vuc2libGUsIGJ1dCBub2JvZHkgaGFzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgdGhhdCB5ZXQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2VuYWJsZSh2b2lkKVxcbit7XFxuK1xcdGF0b21pY19kZWMoXFx1MDAyNmxydV9kaXNhYmxlX2NvdW50KTtcXG4rfVxcbitcXG4rdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcXG4rdm9pZCBscnVfYWRkX2RyYWluKHZvaWQpO1xcbit2b2lkIGxydV9hZGRfZHJhaW5fY3B1KGludCBjcHUpO1xcbit2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xcbit2b2lkIGZvbGlvX2RlYWN0aXZhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3ZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rXFxuKy8qIG1tL3Ztc2Nhbi5jICovXFxuK3Vuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuK3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbitcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbWFzayk7XFxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuK1xcdFxcdFxcdCAgICAgIGludCB6b25lX2lkeCk7XFxuK1xcbisjZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4rI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcXHUwMDNjXFx1MDAzYyAyKVxcbisjZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcXG4rI2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcXG4rXFxuKy8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xcbisjZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyArIDEpXFxuK1xcbit1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgaW50ICpzd2FwcGluZXNzKTtcXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGdfZGF0YV90ICpwZ2RhdCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfTlVNQVxcbitleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87XFxuK2V4dGVybiBpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvO1xcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIE1haW50YWlucyBzdGF0ZSBhY3Jvc3MgYSBwYWdlIHRhYmxlIG1vdmUuIFRoZSBvcGVyYXRpb24gYXNzdW1lcyBib3RoIHNvdXJjZVxcbiAgKiBhbmQgZGVzdGluYXRpb24gVk1BcyBhbHJlYWR5IGV4aXN0IGFuZCBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLlxcbmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuY1xcbmluZGV4IGFiZTEzYjI5MWRkYzhiLi42YzcyZmU2Y2FlZjc1ZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1mZC5jXFxuKysrIGIvbW0vbWVtZmQuY1xcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1mZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGlkX25hbWVzcGFjZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tZW1mZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDc3ZDJkMTRlZGE0MjFlLi4wOTExYmRmZTAzZjA2YSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtOCw4ICs4LDYgQEAgc3RydWN0IG1lbXBvbGljeTtcXG4gc3RydWN0IHN3YXBfaW9jYjtcXG4gc3RydWN0IHN3YXBfbWVtY2dfdGFibGU7XFxuIFxcbi1leHRlcm4gaW50IHBhZ2VfY2x1c3RlcjtcXG4tXFxuICNpZiBkZWZpbmVkKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMpXFxuICNkZWZpbmUgU1dBUF9DQUNIRV9QRk5fQklUUyAoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUyAtIFBBR0VfU0hJRlQpXFxuICNlbGlmIGRlZmluZWQoTUFYX1BIWVNNRU1fQklUUylcXG5AQCAtNzksNiArNzcsOCBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XFxuIH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NXQVBcXG4rdm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTtcXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2Fwb3BzLmhcXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFxcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xcbiBcXG5AQCAtMzM2LDYgKzMzNiwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xcbiBzdHJ1Y3Qgc3dhcF9pb2NiO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKnN3YXBfY2x1c3Rlcl9sb2NrKFxcbiBcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHBnb2ZmX3Qgb2Zmc2V0LCBib29sIGlycSlcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA5YzNhNWNmOTk3Nzg2MC4uZDA2ZjhiYzQ2ZTc3NTIgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTIyLDEwICsyMiwxNSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZV9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2htZW1fZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG4gXFxuKy8qIFN3YXAgcmVhZGFoZWFkIGNsdXN0ZXIgc2l6ZSwgYXMgYSBwb3dlciBvZiAyIHBhZ2VzLiAqL1xcbitzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjtcXG4rc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XFxuK1xcbiAvKlxcbiAgKiBzd2FwcGVyX3NwYWNlIGlzIGEgZmljdGlvbiwgcmV0YWluZWQgdG8gc2ltcGxpZnkgdGhlIHBhdGggdGhyb3VnaFxcbiAgKiB2bXNjYW4ncyBzaHJpbmtfZm9saW9fbGlzdC5cXG5AQCAtOTg3LDYgKzk5MiwzOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInBhZ2UtY2x1c3RlclxcXCIsXFxuK1xcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cGFnZV9jbHVzdGVyLFxcbitcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbitcXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4rXFx0XFx0LmV4dHJhMlxcdFxcdD0gKHZvaWQgKilcXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcXG4rXFx0fVxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZ1xcbisgKi9cXG4rdm9pZCBfX2luaXQgc3dhcF9yZWFkYWhlYWRfc2V0dXAodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcXG4rXFxuK1xcdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXFxuK1xcdGlmIChtZWdzIFxcdTAwM2MgMTYpXFxuK1xcdFxcdHBhZ2VfY2x1c3RlciA9IDI7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cGFnZV9jbHVzdGVyID0gMztcXG4rXFx0LypcXG4rXFx0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxcbitcXHQgKiBfcmVhbGx5XyBkb24ndCB3YW50IHRvIGNsdXN0ZXIgbXVjaCBtb3JlXFxuK1xcdCAqL1xcbitcXG4rXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19TWVNGU1xcbiBzdGF0aWMgc3NpemVfdCB2bWFfcmFfZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjQ5YzY2MjlmYTg1YTE5IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzY1NCw3ICs3NjU0LDcgQEAgc3RhdGljIGludCBfX2luaXQga3N3YXBkX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgbmlkO1xcbiBcXG4tXFx0c3dhcF9zZXR1cCgpO1xcbitcXHRzd2FwX3JlYWRhaGVhZF9zZXR1cCgpO1xcbiBcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxuICBcXHRcXHRrc3dhcGRfcnVuKG5pZCk7XFxuIFxcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFxcXCJ2bVxcXCIsIHZtc2Nhbl9zeXNjdGxfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMToxODowMS40MjM1NjY0NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMjMyNzkxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Y2MyODhiYWQ4NDZmZTkyNjdmYzdiNmYxNDAxMDJjODZlMzRlYzY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDE6MTc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi5jODRlYmM2MmEyMTgzZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5AQCAtMTksOSArMTksNiBAQCBUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uXG4gb2YgdGhlIHZpcnR1YWwgbWVtb3J5IChWTSkgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kXG4gdGhlIHdyaXRlb3V0IG9mIGRpcnR5IGRhdGEgdG8gZGlzay5cbiBcbi1EZWZhdWx0IHZhbHVlcyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIG1vc3Qgb2YgdGhlc2Vcbi1maWxlcyBjYW4gYmUgZm91bmQgaW4gbW0vc3dhcC5jLlxuLVxuIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiBcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0XG5pbmRleCBhYWJkZDNjYmE1OGU4MC4uZDZkMTg5YjlhOTk2MzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdFxuQEAgLTExNyw3ICsxMTcsNyBAQCBNb3JlIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uc1xuIC4uICNrZXJuZWwtZG9jOjogbW0vaG1tLmMgKGJ1aWxkIHdhcm5pbmdzKVxuIC4uIGtlcm5lbC1kb2M6OiBtbS9tZW1yZW1hcC5jXG4gLi4ga2VybmVsLWRvYzo6IG1tL2h1Z2V0bGIuY1xuLS4uIGtlcm5lbC1kb2M6OiBtbS9zd2FwLmNcbisuLiBrZXJuZWwtZG9jOjogbW0vZm9saW9fbHJ1LmNcbiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtY29udHJvbC5jXG4gLi4gI2tlcm5lbC1kb2M6OiBtbS9tZW1vcnktdGllcnMuYyAoYnVpbGQgd2FybmluZ3MpXG4gLi4ga2VybmVsLWRvYzo6IG1tL3NobWVtLmNcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAxNTAxMWY1NzUyYTk5NC4uOTQzOWI3Y2U3MDkyMjQgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzA4Nyw3ICsxNzA4Nyw3IEBAIEY6XHREb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RcbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0XG4gRjpcdGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiBGOlx0aW5jbHVkZS9saW51eC9tbXpvbmUuaFxuLUY6XHRtbS9zd2FwLmNcbitGOlx0bW0vZm9saW9fbHJ1LmNcbiBGOlx0bW0vdm1zY2FuLmNcbiBGOlx0bW0vd29ya2luZ3NldC5jXG4gXG5AQCAtMTcyMzcsNyArMTcyMzcsNiBAQCBGOlx0aW5jbHVkZS9saW51eC9zd2FwLmhcbiBGOlx0aW5jbHVkZS9saW51eC9zd2FwZmlsZS5oXG4gRjpcdGluY2x1ZGUvbGludXgvc3dhcG9wcy5oXG4gRjpcdG1tL3BhZ2VfaW8uY1xuLUY6XHRtbS9zd2FwLmNcbiBGOlx0bW0vc3dhcC5oXG4gRjpcdG1tL3N3YXBfdGFibGUuaFxuIEY6XHRtbS9zd2FwX3N0YXRlLmNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uNjI0ODI0NjRjNjcxMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0yOTMsMzkgKzI5MywxOSBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IHBhZ2Vfc3dhcF9lbnRyeShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tLyogbGludXgvbW0vd29ya2luZ3NldC5jICovXG4tYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLVx0XHRcdFx0Ym9vbCBmbHVzaCk7XG4tdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1cbiAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi9cbiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gLyogRGVmaW5pdGlvbiBvZiBnbG9iYWxfem9uZV9wYWdlX3N0YXRlIG5vdCBhdmFpbGFibGUgeWV0ICovXG4gI2RlZmluZSBucl9mcmVlX3BhZ2VzKCkgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKVxuIFxuKy8qIGxpbnV4L21tL2ZvbGlvX2xydS5jICovXG4rdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIGxydV9hZGRfZHJhaW5fYWxsKHZvaWQpO1xuIFxuLS8qIGxpbnV4L21tL3N3YXAuYyAqL1xuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XG4tdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcbi12b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG4tdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XG4tdm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqKTtcbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHQvKlxuLVx0ICogSG9sZGluZyBQTUQtc2l6ZWQgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlIHVuYmFsYW5jZXMgYWNjb3VudGluZy5cbi1cdCAqIEhvbGRpbmcgc21hbGwgbnVtYmVycyBvZiBsb3ctb3JkZXIgbVRIUCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGVcbi1cdCAqIHdpbGwgYmUgc2Vuc2libGUsIGJ1dCBub2JvZHkgaGFzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgdGhhdCB5ZXQuXG4tXHQgKi9cbi1cdHJldHVybiAhZm9saW9fdGVzdF9sYXJnZShmb2xpbyk7XG4tfVxuKy8qIGxpbnV4L21tL2ZvbGlvLWNvbXBhdC5jICovXG4rdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuIGV4dGVybiBhdG9taWNfdCBscnVfZGlzYWJsZV9jb3VudDtcbiBcbkBAIC0zMzQsNDMgKzMxNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfY2FjaGVfZGlzYWJsZWQodm9pZClcbiBcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZscnVfZGlzYWJsZV9jb3VudCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfZW5hYmxlKHZvaWQpXG4te1xuLVx0YXRvbWljX2RlYyhcdTAwMjZscnVfZGlzYWJsZV9jb3VudCk7XG4tfVxuLVxuLWV4dGVybiB2b2lkIGxydV9jYWNoZV9kaXNhYmxlKHZvaWQpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7XG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9jcHUoaW50IGNwdSk7XG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9jcHVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9hbGwodm9pZCk7XG4tdm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpO1xuLVxuIC8qIGxpbnV4L21tL3Ztc2Nhbi5jICovXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLVx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbWFzayk7XG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KTtcbi1cbi0jZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXHUwMDNjXHUwMDNjIDEpXG4tI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcdTAwM2NcdTAwM2MgMilcbi0jZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbi0jZGVmaW5lIE1BWF9TV0FQUElORVNTIDIwMFxuLVxuLS8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xuLSNkZWZpbmUgU1dBUFBJTkVTU19BTk9OX09OTFkgKE1BWF9TV0FQUElORVNTICsgMSlcbi1cbi1leHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4tXHRcdFx0XHRcdFx0ICBpbnQgKnN3YXBwaW5lc3MpO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSxcbi1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tXHRcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4gbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5AQCAtMzkxLDExICszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19OVU1BICovXG4gXG4tI2lmZGVmIENPTkZJR19OVU1BXG4tZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvO1xuLWV4dGVybiBpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvO1xuLSNlbmRpZlxuLVxuIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xuIFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xuQEAgLTU1Miw3ICs0OTEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFxuIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSlcbitzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGVcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi41ZjcxMmY5YmJlNzM1OSAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4rKysgYi9tbS9NYWtlZmlsZVxuQEAgLTUwLDcgKzUwLDcgQEAgZW5kaWZcbiBcbiBvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiBcdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuLVx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbitcdFx0XHQgICByZWFkYWhlYWQubyBmb2xpb19scnUubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbiBcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4gXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiBcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL2ZvbGlvX2xydS5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gbW0vc3dhcC5jXG5yZW5hbWUgdG8gbW0vZm9saW9fbHJ1LmNcbmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li40NjkyNGE3OTdlYWQ1ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuY1xuKysrIGIvbW0vZm9saW9fbHJ1LmNcbkBAIC0xLDE3ICsxLDEzIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qXG4tICogIGxpbnV4L21tL3N3YXAuY1xuKyAqICBsaW51eC9tbS9mb2xpb19scnUuY1xuICAqXG4gICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHNcbiAgKi9cbiBcbiAvKlxuLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBvcGVyYXRpb24gb2YgdGhlXG4tICogTGludXggVk0gc3Vic3lzdGVtLiBGaW5lLXR1bmluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpblxuLSAqIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC5cbi0gKiBTdGFydGVkIDE4LjEyLjkxXG4tICogU3dhcCBhZ2luZyBhZGRlZCAyMy4yLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG4tICogQnVmZmVybWVtIGxpbWl0cyBhZGRlZCAxMi4zLjk4LCBSaWsgdmFuIFJpZWwuXG4rICogRm9saW8gTFJVIGhlbHBlcnM6IGFkZC9yZW1vdmUgZm9saW9zIGZyb20gTFJVIGxpc3RzLCBiYXRjaGluZyxcbisgKiBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiwgYW5kIHBhZ2UgY2FjaGUgcmVsZWFzZSBwYXRocy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG5AQCAtNDMsMTAgKzM5LDYgQEBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvcGFnZW1hcC5oXHUwMDNlXG4gXG4tLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqL1xuLWludCBwYWdlX2NsdXN0ZXI7XG4tc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4tXG4gc3RydWN0IGNwdV9mYmF0Y2hlcyB7XG4gXHQvKlxuIFx0ICogVGhlIGZvbGxvd2luZyBmb2xpbyBiYXRjaGVzIGFyZSBncm91cGVkIHRvZ2V0aGVyIGJlY2F1c2UgdGhleSBhcmUgcHJvdGVjdGVkXG5AQCAtMTE3MSwzNSArMTE2MywzIEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG4gfVxuICNlbmRpZlxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfc3lzY3RsX3RhYmxlW10gPSB7XG4tXHR7XG4tXHRcdC5wcm9jbmFtZVx0PSBcInBhZ2UtY2x1c3RlclwiLFxuLVx0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3Rlcixcbi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuLVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4tXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbi1cdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcbi1cdH1cbi19O1xuLVxuLS8qXG4tICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbVxuLSAqL1xuLXZvaWQgX19pbml0IHN3YXBfc2V0dXAodm9pZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcbi1cbi1cdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXG4tXHRpZiAobWVncyBcdTAwM2MgMTYpXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDI7XG4tXHRlbHNlXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4tXHQvKlxuLVx0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxuLVx0ICogX3JlYWxseV8gZG9uJ3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZVxuLVx0ICovXG4tXG4tXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcInZtXCIsIHN3YXBfc3lzY3RsX3RhYmxlKTtcbi19XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4wYzJlZTQ3ZDg5MzY2NiAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0yNCw2ICsyNCw3MyBAQFxuIFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcbiBcbisvKiBtbS93b3JraW5nc2V0LmMgKi9cbitib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4rXHRcdFx0ICAgIGJvb2wgZmx1c2gpO1xuK3ZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbit2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTtcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xuK3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK1xuKy8qIG1tL2ZvbGlvX2xydS5jICovXG4rdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4rXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuK3ZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXlfYmVfbHJ1X2NhY2hlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdC8qXG4rXHQgKiBIb2xkaW5nIFBNRC1zaXplZCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUgdW5iYWxhbmNlcyBhY2NvdW50aW5nLlxuK1x0ICogSG9sZGluZyBzbWFsbCBudW1iZXJzIG9mIGxvdy1vcmRlciBtVEhQIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZVxuK1x0ICogd2lsbCBiZSBzZW5zaWJsZSwgYnV0IG5vYm9keSBoYXMgaW1wbGVtZW50ZWQgYW5kIHRlc3RlZCB0aGF0IHlldC5cbitcdCAqL1xuK1x0cmV0dXJuICFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9lbmFibGUodm9pZClcbit7XG4rXHRhdG9taWNfZGVjKFx1MDAyNmxydV9kaXNhYmxlX2NvdW50KTtcbit9XG4rXG4rdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcbit2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7XG4rdm9pZCBscnVfYWRkX2RyYWluX2NwdShpbnQgY3B1KTtcbit2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xuK3ZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rXG4rLyogbW0vdm1zY2FuLmMgKi9cbit1bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuK3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuK1x0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm1hc2spO1xuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4rXHRcdFx0ICAgICAgaW50IHpvbmVfaWR4KTtcbitcbisjZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXHUwMDNjXHUwMDNjIDEpXG4rI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcdTAwM2NcdTAwM2MgMilcbisjZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbisjZGVmaW5lIE1BWF9TV0FQUElORVNTIDIwMFxuK1xuKy8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xuKyNkZWZpbmUgU1dBUFBJTkVTU19BTk9OX09OTFkgKE1BWF9TV0FQUElORVNTICsgMSlcbitcbit1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuK1x0XHRcdFx0XHQgICBnZnBfdCBnZnBfbWFzayxcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucyxcbitcdFx0XHRcdFx0ICAgaW50ICpzd2FwcGluZXNzKTtcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4rXHRcdFx0XHQgICAgIHBnX2RhdGFfdCAqcGdkYXQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuK1xuKyNpZmRlZiBDT05GSUdfTlVNQVxuK2V4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcbitleHRlcm4gaW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbztcbisjZW5kaWZcbitcbiAvKlxuICAqIE1haW50YWlucyBzdGF0ZSBhY3Jvc3MgYSBwYWdlIHRhYmxlIG1vdmUuIFRoZSBvcGVyYXRpb24gYXNzdW1lcyBib3RoIHNvdXJjZVxuICAqIGFuZCBkZXN0aW5hdGlvbiBWTUFzIGFscmVhZHkgZXhpc3QgYW5kIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcbmluZGV4IGFiZTEzYjI5MWRkYzhiLi42YzcyZmU2Y2FlZjc1ZCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbisrKyBiL21tL21lbWZkLmNcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZF9uYW1lc3BhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbWVtZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxZS4uMDkxMWJkZmUwM2YwNmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTgsOCArOCw2IEBAIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IHN3YXBfaW9jYjtcbiBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZTtcbiBcbi1leHRlcm4gaW50IHBhZ2VfY2x1c3Rlcjtcbi1cbiAjaWYgZGVmaW5lZChNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTKVxuICNkZWZpbmUgU1dBUF9DQUNIRV9QRk5fQklUUyAoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUyAtIFBBR0VfU0hJRlQpXG4gI2VsaWYgZGVmaW5lZChNQVhfUEhZU01FTV9CSVRTKVxuQEAgLTc5LDYgKzc3LDggQEAgZW51bSBzd2FwX2NsdXN0ZXJfZmxhZ3Mge1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19TV0FQXG4rdm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTtcbitcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2Fwb3BzLmhcdTAwM2UgLyogZm9yIHN3cF9vZmZzZXQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFx1MDAzZSAvKiBmb3IgYmlvX2VuZF9pb190ICovXG4gXG5AQCAtMzM2LDYgKzMzNiwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gI2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cbiBzdHJ1Y3Qgc3dhcF9pb2NiO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKnN3YXBfY2x1c3Rlcl9sb2NrKFxuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBwZ29mZl90IG9mZnNldCwgYm9vbCBpcnEpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggOWMzYTVjZjk5Nzc4NjAuLmQwNmY4YmM0NmU3NzUyIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yMiwxMCArMjIsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwic3dhcF90YWJsZS5oXCJcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG4gXG4rLyogU3dhcCByZWFkYWhlYWQgY2x1c3RlciBzaXplLCBhcyBhIHBvd2VyIG9mIDIgcGFnZXMuICovXG4rc3RhdGljIGludCBwYWdlX2NsdXN0ZXI7XG4rc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4rXG4gLypcbiAgKiBzd2FwcGVyX3NwYWNlIGlzIGEgZmljdGlvbiwgcmV0YWluZWQgdG8gc2ltcGxpZnkgdGhlIHBhdGggdGhyb3VnaFxuICAqIHZtc2NhbidzIHNocmlua19mb2xpb19saXN0LlxuQEAgLTk4Nyw2ICs5OTIsMzggQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7XG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInBhZ2UtY2x1c3RlclwiLFxuK1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3RlcixcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuK1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4rXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4rXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbitcdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcbitcdH1cbit9O1xuK1xuKy8qKlxuKyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZ1xuKyAqL1xuK3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBtZWdzID0gUEFHRVNfVE9fTUIodG90YWxyYW1fcGFnZXMoKSk7XG4rXG4rXHQvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqL1xuK1x0aWYgKG1lZ3MgXHUwMDNjIDE2KVxuK1x0XHRwYWdlX2NsdXN0ZXIgPSAyO1xuK1x0ZWxzZVxuK1x0XHRwYWdlX2NsdXN0ZXIgPSAzO1xuK1x0LypcbitcdCAqIFJpZ2h0IG5vdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1lYW5zIHRoYXQgd2VcbitcdCAqIF9yZWFsbHlfIGRvbid0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcbitcdCAqL1xuK1xuK1x0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCJ2bVwiLCBzd2FwX3JlYWRhaGVhZF9zeXNjdGxfdGFibGUpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NZU0ZTXG4gc3RhdGljIHNzaXplX3Qgdm1hX3JhX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0XHRcdCAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjQ5YzY2MjlmYTg1YTE5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzY1NCw3ICs3NjU0LDcgQEAgc3RhdGljIGludCBfX2luaXQga3N3YXBkX2luaXQodm9pZClcbiB7XG4gXHRpbnQgbmlkO1xuIFxuLVx0c3dhcF9zZXR1cCgpO1xuK1x0c3dhcF9yZWFkYWhlYWRfc2V0dXAoKTtcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbiAgXHRcdGtzd2FwZF9ydW4obmlkKTtcbiBcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwidm1cIiwgdm1zY2FuX3N5c2N0bF90YWJsZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMToxODowMS40MjM1NjgwOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzcxNDQzODIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZmFjdG9yaW5nIG9mIGBtbS9zd2FwLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCByZW5hbWVzIGBtbS9zd2FwLmNgIHRvIGBtbS9mb2xpb19scnUuY2AgYW5kIHNodWZmbGVzIHNvbWUgY29kZSBhcm91bmQuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIHRoZSBmaWxlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlcyAoYHZtLnJzdGAsIGBtbS1hcGkucnN0YCksIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIGFuZCBhIHJlbmFtZSBpbiBgTWFrZWZpbGVgLiBUaGUgbWFpbiBoZWFkZXIgaW5jbHVkZSB1cGRhdGVzIGluY2x1ZGUgbW92aW5nIGRlY2xhcmF0aW9ucyBmcm9tIGBzd2FwLmhgIHRvIGBtbS9pbnRlcm5hbC5oYCBhbmQgYWRkaW5nIGBzd2FwX3JlYWRhaGVhZF9zZXR1cCgpYCB0byBgbW0vc3dhcC5oYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBtb3ZpbmcgdGhlIGBwYWdlX2NsdXN0ZXJgIHZhcmlhYmxlIGFuZCBgc3dhcF9zZXR1cCgpYCBmdW5jdGlvbiBmcm9tIGBtbS9zd2FwLmNgIHRvIGBtbS9zd2FwX3N0YXRlLmNgLiBJdCBsb29rcyBsaWtlIHRoZSByZW5hbWUgdG8gYGZvbGlvX2xydS5jYCBpcyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBmaWxlICptb3N0bHkqIGNvbnRhaW5zIG5vdy4gYHN3YXBfc2V0dXAoKWAncyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBpbiBgc3dhcF9yZWFkYWhlYWRfc2V0dXAoKWAuIEFuZCB0aGUgY2FsbHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gYHZtc2Nhbi5jYC4gU28gaXQncyBhIHJlZmFjdG9yaW5nLCBwbGFpbiBhbmQgc2ltcGxlLCB3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBleHBlY3RlZC5cblxuQnV0LCBJIG5lZWQgdG8gYmUgKnN1cmUqIGFib3V0IHRoaXMuIExldCdzIGRpdmUgZGVlcGVyIGFuZCBjb21wYXJlIHRoZSByZWxldmFudCBjb2RlIGJsb2Nrcy4gSGVyZSdzIHdoYXQgd2FzIGluIHRoZSBvbGQgYG1tL3N3YXAuY2A6XG5cbmBgYGNcbi8qIEhvdyBtYW55IHBhZ2VzIGRvIHdlIHRyeSB0byBzd2FwIG9yIHBhZ2UgaW4vb3V0IHRvZ2V0aGVyPyBBcyBhIHBvd2VyIG9mIDIgKi9cbmludCBwYWdlX2NsdXN0ZXI7XG5zdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTtcbi4uLlxuc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9zeXNjdGxfdGFibGVbXSA9IHtcblx0e1xuXHRcdC5wcm9jbmFtZVx0PSBcInBhZ2UtY2x1c3RlclwiLFxuXHRcdC5kYXRhXHRcdD0gXHUwMDI2cGFnZV9jbHVzdGVyLFxuXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcblx0XHQubW9kZVx0XHQ9IDA2NDQsXG5cdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcblx0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG5cdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcblx0fVxufTtcblxuLypcbiAqIFBlcmZvcm0gYW55IHNldHVwIGZvciB0aGUgc3dhcCBzeXN0ZW1cbiAqL1xudm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKVxue1xuXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcblxuXHQvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqL1xuXHRpZiAobWVncyBcdTAwM2MgMTYpXG5cdFx0cGFnZV9jbHVzdGVyID0gMjtcblx0ZWxzZVxuXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG5cdC8qXG5cdCAqIFJpZ2h0IG5vdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1lYW5zIHRoYXQgd2Vcblx0ICogX3JlYWxseV8gZG9uJ3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZVxuXHQgKi9cblxuXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcInZtXCIsIHN3YXBfc3lzY3RsX3RhYmxlKTtcbn1cbmBgYFxuXG5BbmQgaGVyZSdzIHRoZSBuZXcgYG1tL3N3YXBfc3RhdGUuY2A6XG5cbmBgYGNcbisvKiBTd2FwIHJlYWRhaGVhZCBjbHVzdGVyIHNpemUsIGFzIGEgcG93ZXIgb2YgMiBwYWdlcy4gKi9cbitzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjtcbitzdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTtcbi4uLlxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xuK1x0e1xuK1x0XHQucHJvY25hbWVcdD0gXCJwYWdlLWNsdXN0ZXJcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZwYWdlX2NsdXN0ZXIsXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbitcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuK1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxuK1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4rXHRcdC5leHRyYTJcdFx0PSAodm9pZCAqKVx1MDAyNnBhZ2VfY2x1c3Rlcl9tYXgsXG4rXHR9XG4rfTtcblxuKy8qKlxuKyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZ1xuKyAqL1xuK3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBtZWdzID0gUEFHRVNfVE9fTUIodG90YWxyYW1fcGFnZXMoKSk7XG5cbitcdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXG4rXHRpZiAobWVncyBcdTAwM2MgMTYpXG4rXHRcdHBhZ2VfY2x1c3RlciA9IDI7XG4rXHRlbHNlXG4rXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4rXHQvKlxuK1x0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxuK1x0ICogX3JlYWxseV8gZG9uJ3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZVxuK1x0ICovXG5cbitcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwidm1cIiwgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTtcbit9XG5gYGBcblxuVGhleSdyZSBlc3NlbnRpYWxseSBpZGVudGljYWwhIFRoZSBvbmx5IGRpZmZlcmVuY2UgSSBzZWUgaXMgdGhhdCBgcGFnZV9jbHVzdGVyYCBpcyBub3cgYHN0YXRpYyBpbnRgIGluc3RlYWQgb2YganVzdCBgaW50YC4gQnV0LCBob2xkIG9uLi4uIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFuIGBpbnRgIGluIGBtbS9zd2FwLmNcblxuIiwiSW5wdXRUb2tlbnMiOjcyMzcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6MTg6MTUuMTM4MDA4MDA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjcxMzI4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jbHVzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYy0zMC0vKiBTd2FwIHJlYWRhaGVhZCBjbHVzdGVyIHNpemUsIGFzIGEgcG93ZXIgb2YgMiBwYWdlcy4gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE6c3RhdGljIGludCBwYWdlX2NsdXN0ZXI7XFxubW0vc3dhcF9zdGF0ZS5jOjMyOnN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxO1xcbm1tL3N3YXBfc3RhdGUuYy0zMy1cXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz03Njg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3dhcGluX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTc3My1cXG5tbS9zd2FwX3N0YXRlLmM6Nzc0OlxcdG1heF9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2MgUkVBRF9PTkNFKHBhZ2VfY2x1c3Rlcik7XFxubW0vc3dhcF9zdGF0ZS5jLTc3NS1cXHRpZiAobWF4X3BhZ2VzIFxcdTAwM2M9IDEpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzk4LSAqIFByaW1pdGl2ZSBzd2FwIHJlYWRhaGVhZCBjb2RlLiBXZSBzaW1wbHkgcmVhZCBhbiBhbGlnbmVkIGJsb2NrIG9mXFxubW0vc3dhcF9zdGF0ZS5jOjc5OTogKiAoMSBcXHUwMDNjXFx1MDAzYyBwYWdlX2NsdXN0ZXIpIGVudHJpZXMgaW4gdGhlIHN3YXAgYXJlYS4gVGhpcyBtZXRob2QgaXMgY2hvc2VuXFxubW0vc3dhcF9zdGF0ZS5jLTgwMC0gKiBiZWNhdXNlIGl0IGRvZXNuJ3QgY29zdCB1cyBhbnkgc2VlayB0aW1lLiAgV2UgYWxzbyBtYWtlIHN1cmUgdG8gcXVldWVcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz04MDc9c3RydWN0IGZvbGlvICpzd2FwX2NsdXN0ZXJfcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy04MjMtXFxubW0vc3dhcF9zdGF0ZS5jOjgyNDpcXHQvKiBSZWFkIGEgcGFnZV9jbHVzdGVyIHNpemVkIGFuZCBhbGlnbmVkIGNsdXN0ZXIgYXJvdW5kIG9mZnNldC4gKi9cXG5tbS9zd2FwX3N0YXRlLmMtODI1LVxcdHN0YXJ0X29mZnNldCA9IG9mZnNldCBcXHUwMDI2IH5tYXNrO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTg1MD1zdGF0aWMgaW50IHN3YXBfdm1hX3JhX3dpbihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtODU3LVxcbm1tL3N3YXBfc3RhdGUuYzo4NTg6XFx0bWF4X3dpbiA9IDEgXFx1MDAzY1xcdTAwM2MgbWluKFJFQURfT05DRShwYWdlX2NsdXN0ZXIpLCBTV0FQX1JBX09SREVSX0NFSUxJTkcpO1xcbm1tL3N3YXBfc3RhdGUuYy04NTktXFx0aWYgKG1heF93aW4gPT0gMSlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz05OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtOTk3LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInBhZ2UtY2x1c3RlclxcXCIsXFxubW0vc3dhcF9zdGF0ZS5jOjk5ODpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNnBhZ2VfY2x1c3RlcixcXG5tbS9zd2FwX3N0YXRlLmMtOTk5LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTEwMDItXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxubW0vc3dhcF9zdGF0ZS5jOjEwMDM6XFx0XFx0LmV4dHJhMlxcdFxcdD0gKHZvaWQgKilcXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcXG5tbS9zd2FwX3N0YXRlLmMtMTAwNC1cXHR9XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MTAxMD12b2lkIF9faW5pdCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTEwMTUtXFx0aWYgKG1lZ3MgXFx1MDAzYyAxNilcXG5tbS9zd2FwX3N0YXRlLmM6MTAxNjpcXHRcXHRwYWdlX2NsdXN0ZXIgPSAyO1xcbm1tL3N3YXBfc3RhdGUuYy0xMDE3LVxcdGVsc2VcXG5tbS9zd2FwX3N0YXRlLmM6MTAxODpcXHRcXHRwYWdlX2NsdXN0ZXIgPSAzO1xcbm1tL3N3YXBfc3RhdGUuYy0xMDE5LVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjE4OjE4LjIwNTE0ODIxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTExODU1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgT25seTogTm8gRnVuY3Rpb25hbCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBpdC4gVGhlIGBwYWdlX2NsdXN0ZXJgIHZhcmlhYmxlIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIHRoZSBgbW0vc3dhcF9zdGF0ZS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGZvciByZWZhY3RvcmluZyBwdXJwb3Nlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCB3b24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgb3IgdnVsbmVyYWJpbGl0aWVzIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuIEl0J3MgYSBjbGVhbiByZWZhY3RvciwgYW5kIEkgY2FuIG1vdmUgZm9yd2FyZCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MTAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6MTg6MjEuNjU2MzM2MTI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVuYW1lcyBtbS9zd2FwLmMgdG8gbW0vZm9saW9fbHJ1LmMsIG1vdmVzIHN3YXBfc2V0dXAoKSBhbmQgcGFnZV9jbHVzdGVyIHRvIG1tL3N3YXBfc3RhdGUuYywgYW5kIHJlbG9jYXRlcyBkZWNsYXJhdGlvbnMgZnJvbSBpbmNsdWRlL2xpbnV4L3N3YXAuaCB0byBtbS9pbnRlcm5hbC5oLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown8mrw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 01:11:41 +0000 UTC FinishedAt: 2026-06-30 01:18:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgbW0vc3dhcC5jIHRvIG1tL2ZvbGlvX2xydS5jLCBtb3ZlcyBzd2FwX3NldHVwKCkgYW5kIHBhZ2VfY2x1c3RlciB0byBtbS9zd2FwX3N0YXRlLmMsIGFuZCByZWxvY2F0ZXMgZGVjbGFyYXRpb25zIGZyb20gaW5jbHVkZS9saW51eC9zd2FwLmggdG8gbW0vaW50ZXJuYWwuaC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGNjMjg4YmFkODQ2ZmU5MjY3ZmM3YjZmMTQwMTAyYzg2ZTM0ZWM2N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDAxOjE3OjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuaW5kZXggYjliMGMyMThiZmI0NDAuLmM4NGViYzYyYTIxODNlIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbkBAIC0xOSw5ICYjNDM7MTksNiBAQCBUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uXG4gb2YgdGhlIHZpcnR1YWwgbWVtb3J5IChWTSkgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kXG4gdGhlIHdyaXRlb3V0IG9mIGRpcnR5IGRhdGEgdG8gZGlzay5cbiBcbi1EZWZhdWx0IHZhbHVlcyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIG1vc3Qgb2YgdGhlc2Vcbi1maWxlcyBjYW4gYmUgZm91bmQgaW4gbW0vc3dhcC5jLlxuLVxuIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiBcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0XG5pbmRleCBhYWJkZDNjYmE1OGU4MC4uZDZkMTg5YjlhOTk2MzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdFxuQEAgLTExNyw3ICYjNDM7MTE3LDcgQEAgTW9yZSBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnNcbiAuLiAja2VybmVsLWRvYzo6IG1tL2htbS5jIChidWlsZCB3YXJuaW5ncylcbiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtcmVtYXAuY1xuIC4uIGtlcm5lbC1kb2M6OiBtbS9odWdldGxiLmNcbi0uLiBrZXJuZWwtZG9jOjogbW0vc3dhcC5jXG4mIzQzOy4uIGtlcm5lbC1kb2M6OiBtbS9mb2xpb19scnUuY1xuIC4uIGtlcm5lbC1kb2M6OiBtbS9tZW1jb250cm9sLmNcbiAuLiAja2VybmVsLWRvYzo6IG1tL21lbW9yeS10aWVycy5jIChidWlsZCB3YXJuaW5ncylcbiAuLiBrZXJuZWwtZG9jOjogbW0vc2htZW0uY1xuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDE1MDExZjU3NTJhOTk0Li45NDM5YjdjZTcwOTIyNCAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE3MDg3LDcgJiM0MzsxNzA4Nyw3IEBAIEY6XHREb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RcbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0XG4gRjpcdGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiBGOlx0aW5jbHVkZS9saW51eC9tbXpvbmUuaFxuLUY6XHRtbS9zd2FwLmNcbiYjNDM7RjpcdG1tL2ZvbGlvX2xydS5jXG4gRjpcdG1tL3Ztc2Nhbi5jXG4gRjpcdG1tL3dvcmtpbmdzZXQuY1xuIFxuQEAgLTE3MjM3LDcgJiM0MzsxNzIzNyw2IEBAIEY6XHRpbmNsdWRlL2xpbnV4L3N3YXAuaFxuIEY6XHRpbmNsdWRlL2xpbnV4L3N3YXBmaWxlLmhcbiBGOlx0aW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcbiBGOlx0bW0vcGFnZV9pby5jXG4tRjpcdG1tL3N3YXAuY1xuIEY6XHRtbS9zd2FwLmhcbiBGOlx0bW0vc3dhcF90YWJsZS5oXG4gRjpcdG1tL3N3YXBfc3RhdGUuY1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEzLi42MjQ4MjQ2NGM2NzEwYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI5MywzOSAmIzQzOzI5MywxOSBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IHBhZ2Vfc3dhcF9lbnRyeShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tLyogbGludXgvbW0vd29ya2luZ3NldC5jICovXG4tYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLVx0XHRcdFx0Ym9vbCBmbHVzaCk7XG4tdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1cbiAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi9cbiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gLyogRGVmaW5pdGlvbiBvZiBnbG9iYWxfem9uZV9wYWdlX3N0YXRlIG5vdCBhdmFpbGFibGUgeWV0ICovXG4gI2RlZmluZSBucl9mcmVlX3BhZ2VzKCkgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKVxuIFxuJiM0MzsvKiBsaW51eC9tbS9mb2xpb19scnUuYyAqL1xuJiM0Mzt2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCBscnVfYWRkX2RyYWluX2FsbCh2b2lkKTtcbiBcbi0vKiBsaW51eC9tbS9zd2FwLmMgKi9cbi12b2lkIGxydV9ub3RlX2Nvc3RfdW5sb2NrX2lycShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGJvb2wgZmlsZSxcbi1cdFx0dW5zaWduZWQgaW50IG5yX2lvLCB1bnNpZ25lZCBpbnQgbnJfcm90YXRlZCk7XG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICopO1xuLXZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKik7XG4tdm9pZCBmb2xpb19hZGRfbHJ1X3ZtYShzdHJ1Y3QgZm9saW8gKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopO1xuLXZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopO1xuLXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKik7XG4tXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4te1xuLVx0Lypcbi1cdCAqIEhvbGRpbmcgUE1ELXNpemVkIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZSB1bmJhbGFuY2VzIGFjY291bnRpbmcuXG4tXHQgKiBIb2xkaW5nIHNtYWxsIG51bWJlcnMgb2YgbG93LW9yZGVyIG1USFAgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlXG4tXHQgKiB3aWxsIGJlIHNlbnNpYmxlLCBidXQgbm9ib2R5IGhhcyBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIHRoYXQgeWV0LlxuLVx0ICovXG4tXHRyZXR1cm4gIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pO1xuLX1cbiYjNDM7LyogbGludXgvbW0vZm9saW8tY29tcGF0LmMgKi9cbiYjNDM7dm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuIGV4dGVybiBhdG9taWNfdCBscnVfZGlzYWJsZV9jb3VudDtcbiBcbkBAIC0zMzQsNDMgJiM0MzszMTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2NhY2hlX2Rpc2FibGVkKHZvaWQpXG4gXHRyZXR1cm4gYXRvbWljX3JlYWQoXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2VuYWJsZSh2b2lkKVxuLXtcbi1cdGF0b21pY19kZWMoXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xuLX1cbi1cbi1leHRlcm4gdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcbi1leHRlcm4gdm9pZCBscnVfYWRkX2RyYWluKHZvaWQpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1KGludCBjcHUpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fYWxsKHZvaWQpO1xuLXZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tZXh0ZXJuIHZvaWQgc3dhcF9zZXR1cCh2b2lkKTtcbi1cbiAvKiBsaW51eC9tbS92bXNjYW4uYyAqL1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGludCBvcmRlcixcbi1cdFx0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm1hc2spO1xuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCk7XG4tXG4tI2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxIFx1MDAzY1x1MDAzYyAxKVxuLSNkZWZpbmUgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkUgKDEgXHUwMDNjXHUwMDNjIDIpXG4tI2RlZmluZSBNSU5fU1dBUFBJTkVTUyAwXG4tI2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcbi1cbi0vKiBKdXN0IHJlY2xhaW0gZnJvbSBhbm9uIGZvbGlvcyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gKi9cbi0jZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyAmIzQzOyAxKVxuLVxuLWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi1cdFx0XHRcdFx0XHQgIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucyxcbi1cdFx0XHRcdFx0XHQgIGludCAqc3dhcHBpbmVzcyk7XG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuLVx0XHRcdFx0XHRcdGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCxcbi1cdFx0XHRcdFx0XHRwZ19kYXRhX3QgKnBnZGF0LFxuLVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbkBAIC0zOTEsMTEgJiM0MzszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19OVU1BICovXG4gXG4tI2lmZGVmIENPTkZJR19OVU1BXG4tZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvO1xuLWV4dGVybiBpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvO1xuLSNlbmRpZlxuLVxuIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xuIFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xuQEAgLTU1Miw3ICYjNDM7NDkxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcbiB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xuICNlbHNlXG4tc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4ge1xuIFx0cmV0dXJuIFJFQURfT05DRSh2bV9zd2FwcGluZXNzKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZVxuaW5kZXggZWZmOWY5ZTdlMDYxYzEuLjVmNzEyZjliYmU3MzU5IDEwMDY0NFxuLS0tIGEvbW0vTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlXG5AQCAtNTAsNyAmIzQzOzUwLDcgQEAgZW5kaWZcbiBcbiBvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiBcdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuLVx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbiYjNDM7XHRcdFx0ICAgcmVhZGFoZWFkLm8gZm9saW9fbHJ1Lm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG4gXHRcdFx0ICAgc2htZW0ubyB1dGlsLm8gbW16b25lLm8gdm1zdGF0Lm8gYmFja2luZy1kZXYubyBcXFxuIFx0XHRcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXG4gXHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9mb2xpb19scnUuY1xuc2ltaWxhcml0eSBpbmRleCA5NiVcbnJlbmFtZSBmcm9tIG1tL3N3YXAuY1xucmVuYW1lIHRvIG1tL2ZvbGlvX2xydS5jXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNDY5MjRhNzk3ZWFkNWUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZvbGlvX2xydS5jXG5AQCAtMSwxNyAmIzQzOzEsMTMgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gLypcbi0gKiAgbGludXgvbW0vc3dhcC5jXG4mIzQzOyAqICBsaW51eC9tbS9mb2xpb19scnUuY1xuICAqXG4gICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHNcbiAgKi9cbiBcbiAvKlxuLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBvcGVyYXRpb24gb2YgdGhlXG4tICogTGludXggVk0gc3Vic3lzdGVtLiBGaW5lLXR1bmluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpblxuLSAqIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC5cbi0gKiBTdGFydGVkIDE4LjEyLjkxXG4tICogU3dhcCBhZ2luZyBhZGRlZCAyMy4yLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG4tICogQnVmZmVybWVtIGxpbWl0cyBhZGRlZCAxMi4zLjk4LCBSaWsgdmFuIFJpZWwuXG4mIzQzOyAqIEZvbGlvIExSVSBoZWxwZXJzOiBhZGQvcmVtb3ZlIGZvbGlvcyBmcm9tIExSVSBsaXN0cywgYmF0Y2hpbmcsXG4mIzQzOyAqIGFjdGl2YXRpb24vZGVhY3RpdmF0aW9uLCBhbmQgcGFnZSBjYWNoZSByZWxlYXNlIHBhdGhzLlxuICAqL1xuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbkBAIC00MywxMCAmIzQzOzM5LDYgQEBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvcGFnZW1hcC5oXHUwMDNlXG4gXG4tLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqL1xuLWludCBwYWdlX2NsdXN0ZXI7XG4tc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4tXG4gc3RydWN0IGNwdV9mYmF0Y2hlcyB7XG4gXHQvKlxuIFx0ICogVGhlIGZvbGxvd2luZyBmb2xpbyBiYXRjaGVzIGFyZSBncm91cGVkIHRvZ2V0aGVyIGJlY2F1c2UgdGhleSBhcmUgcHJvdGVjdGVkXG5AQCAtMTE3MSwzNSAmIzQzOzExNjMsMyBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludFxuIFx0XHRscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpO1xuIH1cbiAjZW5kaWZcbi1cbi1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzd2FwX3N5c2N0bF90YWJsZVtdID0ge1xuLVx0e1xuLVx0XHQucHJvY25hbWVcdD0gXCYjMzQ7cGFnZS1jbHVzdGVyXCYjMzQ7LFxuLVx0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3Rlcixcbi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuLVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4tXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbi1cdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcbi1cdH1cbi19O1xuLVxuLS8qXG4tICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbVxuLSAqL1xuLXZvaWQgX19pbml0IHN3YXBfc2V0dXAodm9pZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcbi1cbi1cdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXG4tXHRpZiAobWVncyBcdTAwM2MgMTYpXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDI7XG4tXHRlbHNlXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4tXHQvKlxuLVx0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxuLVx0ICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcbi1cdCAqL1xuLVxuLVx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCYjMzQ7dm1cJiMzNDssIHN3YXBfc3lzY3RsX3RhYmxlKTtcbi19XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4wYzJlZTQ3ZDg5MzY2NiAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmhcbkBAIC0yNCw2ICYjNDM7MjQsNzMgQEBcbiBcbiBzdHJ1Y3QgZm9saW9fYmF0Y2g7XG4gXG4mIzQzOy8qIG1tL3dvcmtpbmdzZXQuYyAqL1xuJiM0Mztib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4mIzQzO1x0XHRcdCAgICBib29sIGZsdXNoKTtcbiYjNDM7dm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuJiM0Mzt2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4mIzQzO3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XG4mIzQzO3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztcbiYjNDM7LyogbW0vZm9saW9fbHJ1LmMgKi9cbiYjNDM7dm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbiYjNDM7dm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4mIzQzO3ZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEhvbGRpbmcgUE1ELXNpemVkIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZSB1bmJhbGFuY2VzIGFjY291bnRpbmcuXG4mIzQzO1x0ICogSG9sZGluZyBzbWFsbCBudW1iZXJzIG9mIGxvdy1vcmRlciBtVEhQIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZVxuJiM0MztcdCAqIHdpbGwgYmUgc2Vuc2libGUsIGJ1dCBub2JvZHkgaGFzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgdGhhdCB5ZXQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9lbmFibGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGF0b21pY19kZWMoXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGxydV9jYWNoZV9kaXNhYmxlKHZvaWQpO1xuJiM0Mzt2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7XG4mIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9jcHUoaW50IGNwdSk7XG4mIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9jcHVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4mIzQzO3ZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7dm9pZCBmb2xpb19tYXJrX2xhenlmcmVlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0MztcbiYjNDM7LyogbW0vdm1zY2FuLmMgKi9cbiYjNDM7dW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcbiYjNDM7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm1hc2spO1xuJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LFxuJiM0MztcdFx0XHQgICAgICBpbnQgem9uZV9pZHgpO1xuJiM0MztcbiYjNDM7I2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxIFx1MDAzY1x1MDAzYyAxKVxuJiM0MzsjZGVmaW5lIE1FTUNHX1JFQ0xBSU1fUFJPQUNUSVZFICgxIFx1MDAzY1x1MDAzYyAyKVxuJiM0MzsjZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbiYjNDM7I2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcbiYjNDM7XG4mIzQzOy8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xuJiM0MzsjZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyAmIzQzOyAxKVxuJiM0MztcbiYjNDM7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiYjNDM7XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4mIzQzO1x0XHRcdFx0XHQgICBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4mIzQzO1x0XHRcdFx0XHQgICBpbnQgKnN3YXBwaW5lc3MpO1xuJiM0Mzt1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgICAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLFxuJiM0MztcdFx0XHRcdCAgICAgcGdfZGF0YV90ICpwZ2RhdCxcbiYjNDM7XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BXG4mIzQzO2V4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcbiYjNDM7ZXh0ZXJuIGludCBzeXNjdGxfbWluX3NsYWJfcmF0aW87XG4mIzQzOyNlbmRpZlxuJiM0MztcbiAvKlxuICAqIE1haW50YWlucyBzdGF0ZSBhY3Jvc3MgYSBwYWdlIHRhYmxlIG1vdmUuIFRoZSBvcGVyYXRpb24gYXNzdW1lcyBib3RoIHNvdXJjZVxuICAqIGFuZCBkZXN0aW5hdGlvbiBWTUFzIGFscmVhZHkgZXhpc3QgYW5kIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcbmluZGV4IGFiZTEzYjI5MWRkYzhiLi42YzcyZmU2Y2FlZjc1ZCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmNcbkBAIC0xOSw2ICYjNDM7MTksNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waWRfbmFtZXNwYWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1YXBpL2xpbnV4L21lbWZkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7aW50ZXJuYWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3N3YXAuaFwmIzM0O1xuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxZS4uMDkxMWJkZmUwM2YwNmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTgsOCAmIzQzOzgsNiBAQCBzdHJ1Y3QgbWVtcG9saWN5O1xuIHN0cnVjdCBzd2FwX2lvY2I7XG4gc3RydWN0IHN3YXBfbWVtY2dfdGFibGU7XG4gXG4tZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7XG4tXG4gI2lmIGRlZmluZWQoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUylcbiAjZGVmaW5lIFNXQVBfQ0FDSEVfUEZOX0JJVFMgKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgLSBQQUdFX1NISUZUKVxuICNlbGlmIGRlZmluZWQoTUFYX1BIWVNNRU1fQklUUylcbkBAIC03OSw2ICYjNDM7NzcsOCBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX1NXQVBcbiYjNDM7dm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTtcbiYjNDM7XG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrX3R5cGVzLmhcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xuIFxuQEAgLTMzNiw2ICYjNDM7MzM2LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3N3YXBfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xuIHN0cnVjdCBzd2FwX2lvY2I7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9yZWFkYWhlYWRfc2V0dXAodm9pZClcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpzd2FwX2NsdXN0ZXJfbG9jayhcbiBcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgcGdvZmZfdCBvZmZzZXQsIGJvb2wgaXJxKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYwLi5kMDZmOGJjNDZlNzc1MiAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtMjIsMTAgJiM0MzsyMiwxNSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NobWVtX2ZzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gXG4mIzQzOy8qIFN3YXAgcmVhZGFoZWFkIGNsdXN0ZXIgc2l6ZSwgYXMgYSBwb3dlciBvZiAyIHBhZ2VzLiAqL1xuJiM0MztzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjtcbiYjNDM7c3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4mIzQzO1xuIC8qXG4gICogc3dhcHBlcl9zcGFjZSBpcyBhIGZpY3Rpb24sIHJldGFpbmVkIHRvIHNpbXBsaWZ5IHRoZSBwYXRoIHRocm91Z2hcbiAgKiB2bXNjYW4mIzM5O3Mgc2hyaW5rX2ZvbGlvX2xpc3QuXG5AQCAtOTg3LDYgJiM0Mzs5OTIsMzggQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xuJiM0MztcdHtcbiYjNDM7XHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtwYWdlLWNsdXN0ZXJcJiMzNDssXG4mIzQzO1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3RlcixcbiYjNDM7XHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbiYjNDM7XHRcdC5tb2RlXHRcdD0gMDY0NCxcbiYjNDM7XHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4mIzQzO1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4mIzQzO1x0XHQuZXh0cmEyXHRcdD0gKHZvaWQgKilcdTAwMjZwYWdlX2NsdXN0ZXJfbWF4LFxuJiM0MztcdH1cbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBzd2FwX3JlYWRhaGVhZF9zZXR1cCAtIGRlZmF1bHRzIGFuZCBzeXNjdGwgZm9yIHN3YXAgY2FjaGUgcmVhZGFoZWFkIGNsdXN0ZXJpbmdcbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcbiYjNDM7XG4mIzQzO1x0LyogVXNlIGEgc21hbGxlciBjbHVzdGVyIGZvciBzbWFsbC1tZW1vcnkgbWFjaGluZXMgKi9cbiYjNDM7XHRpZiAobWVncyBcdTAwM2MgMTYpXG4mIzQzO1x0XHRwYWdlX2NsdXN0ZXIgPSAyO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBSaWdodCBub3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBtZWFucyB0aGF0IHdlXG4mIzQzO1x0ICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcbiYjNDM7XHQgKi9cbiYjNDM7XG4mIzQzO1x0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCYjMzQ7dm1cJiMzNDssIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZSk7XG4mIzQzO31cbiYjNDM7XG4gI2lmZGVmIENPTkZJR19TWVNGU1xuIHN0YXRpYyBzc2l6ZV90IHZtYV9yYV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDM1YzNiYjE1YWU5NmEzLi40OWM2NjI5ZmE4NWExOSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc2NTQsNyAmIzQzOzc2NTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKVxuIHtcbiBcdGludCBuaWQ7XG4gXG4tXHRzd2FwX3NldHVwKCk7XG4mIzQzO1x0c3dhcF9yZWFkYWhlYWRfc2V0dXAoKTtcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbiAgXHRcdGtzd2FwZF9ydW4obmlkKTtcbiBcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCB2bXNjYW5fc3lzY3RsX3RhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGNjMjg4YmFkODQ2ZmU5MjY3ZmM3YjZmMTQwMTAyYzg2ZTM0ZWM2NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVuIDMwIDAxOjE3OjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CmluZGV4IGI5YjBjMjE4YmZiNDQwLi5jODRlYmM2MmEyMTgzZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdApAQCAtMTksOSAmIzQzOzE5LDYgQEAgVGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSB1c2VkIHRvIHR1bmUgdGhlIG9wZXJhdGlvbgogb2YgdGhlIHZpcnR1YWwgbWVtb3J5IChWTSkgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kCiB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLgogCi1EZWZhdWx0IHZhbHVlcyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIG1vc3Qgb2YgdGhlc2UKLWZpbGVzIGNhbiBiZSBmb3VuZCBpbiBtbS9zd2FwLmMuCi0KIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bToKIAogLSBhZG1pbl9yZXNlcnZlX2tieXRlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0CmluZGV4IGFhYmRkM2NiYTU4ZTgwLi5kNmQxODliOWE5OTYzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdApAQCAtMTE3LDcgJiM0MzsxMTcsNyBAQCBNb3JlIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucwogLi4gI2tlcm5lbC1kb2M6OiBtbS9obW0uYyAoYnVpbGQgd2FybmluZ3MpCiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtcmVtYXAuYwogLi4ga2VybmVsLWRvYzo6IG1tL2h1Z2V0bGIuYwotLi4ga2VybmVsLWRvYzo6IG1tL3N3YXAuYwomIzQzOy4uIGtlcm5lbC1kb2M6OiBtbS9mb2xpb19scnUuYwogLi4ga2VybmVsLWRvYzo6IG1tL21lbWNvbnRyb2wuYwogLi4gI2tlcm5lbC1kb2M6OiBtbS9tZW1vcnktdGllcnMuYyAoYnVpbGQgd2FybmluZ3MpCiAuLiBrZXJuZWwtZG9jOjogbW0vc2htZW0uYwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAxNTAxMWY1NzUyYTk5NC4uOTQzOWI3Y2U3MDkyMjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNzA4Nyw3ICYjNDM7MTcwODcsNyBAQCBGOglEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QKIEY6CURvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdAogRjoJaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaAogRjoJaW5jbHVkZS9saW51eC9tbXpvbmUuaAotRjoJbW0vc3dhcC5jCiYjNDM7RjoJbW0vZm9saW9fbHJ1LmMKIEY6CW1tL3Ztc2Nhbi5jCiBGOgltbS93b3JraW5nc2V0LmMKIApAQCAtMTcyMzcsNyAmIzQzOzE3MjM3LDYgQEAgRjoJaW5jbHVkZS9saW51eC9zd2FwLmgKIEY6CWluY2x1ZGUvbGludXgvc3dhcGZpbGUuaAogRjoJaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKIEY6CW1tL3BhZ2VfaW8uYwotRjoJbW0vc3dhcC5jCiBGOgltbS9zd2FwLmgKIEY6CW1tL3N3YXBfdGFibGUuaAogRjoJbW0vc3dhcF9zdGF0ZS5jCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDhmMGY2OGUyNDViYWEzLi42MjQ4MjQ2NGM2NzEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTI5MywzOSAmIzQzOzI5MywxOSBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IHBhZ2Vfc3dhcF9lbnRyeShzdHJ1Y3QgcGFnZSAqcGFnZSkKIAlyZXR1cm4gZW50cnk7CiB9CiAKLS8qIGxpbnV4L21tL3dvcmtpbmdzZXQuYyAqLwotYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LAotCQkJCWJvb2wgZmx1c2gpOwotdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwotdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKLXZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7Ci12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLQogLyogbGludXgvbW0vcGFnZV9hbGxvYy5jICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7CiAKIC8qIERlZmluaXRpb24gb2YgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZSBub3QgYXZhaWxhYmxlIHlldCAqLwogI2RlZmluZSBucl9mcmVlX3BhZ2VzKCkgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKQogCiYjNDM7LyogbGludXgvbW0vZm9saW9fbHJ1LmMgKi8KJiM0Mzt2b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9hbGwodm9pZCk7CiAKLS8qIGxpbnV4L21tL3N3YXAuYyAqLwotdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCi0JCXVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpOwotdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICopOwotdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTsKLXZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKLXZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopOwotdm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqKTsKLQotc3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pCi17Ci0JLyoKLQkgKiBIb2xkaW5nIFBNRC1zaXplZCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUgdW5iYWxhbmNlcyBhY2NvdW50aW5nLgotCSAqIEhvbGRpbmcgc21hbGwgbnVtYmVycyBvZiBsb3ctb3JkZXIgbVRIUCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUKLQkgKiB3aWxsIGJlIHNlbnNpYmxlLCBidXQgbm9ib2R5IGhhcyBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIHRoYXQgeWV0LgotCSAqLwotCXJldHVybiAhZm9saW9fdGVzdF9sYXJnZShmb2xpbyk7Ci19CiYjNDM7LyogbGludXgvbW0vZm9saW8tY29tcGF0LmMgKi8KJiM0Mzt2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIGV4dGVybiBhdG9taWNfdCBscnVfZGlzYWJsZV9jb3VudDsKIApAQCAtMzM0LDQzICYjNDM7MzE0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGxydV9jYWNoZV9kaXNhYmxlZCh2b2lkKQogCXJldHVybiBhdG9taWNfcmVhZCgmYW1wO2xydV9kaXNhYmxlX2NvdW50KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9lbmFibGUodm9pZCkKLXsKLQlhdG9taWNfZGVjKCZhbXA7bHJ1X2Rpc2FibGVfY291bnQpOwotfQotCi1leHRlcm4gdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTsKLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7Ci1leHRlcm4gdm9pZCBscnVfYWRkX2RyYWluX2NwdShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpOwotZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9hbGwodm9pZCk7Ci12b2lkIGZvbGlvX2RlYWN0aXZhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7Ci1leHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpOwotCiAvKiBsaW51eC9tbS92bXNjYW4uYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCi0JCQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrKTsKLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCk7Ci0KLSNkZWZpbmUgTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCAoMSAmbHQ7Jmx0OyAxKQotI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSAmbHQ7Jmx0OyAyKQotI2RlZmluZSBNSU5fU1dBUFBJTkVTUyAwCi0jZGVmaW5lIE1BWF9TV0FQUElORVNTIDIwMAotCi0vKiBKdXN0IHJlY2xhaW0gZnJvbSBhbm9uIGZvbGlvcyBpbiBwcm9hY3RpdmUgbWVtb3J5IHJlY2xhaW0gKi8KLSNkZWZpbmUgU1dBUFBJTkVTU19BTk9OX09OTFkgKE1BWF9TV0FQUElORVNTICYjNDM7IDEpCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkJICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAotCQkJCQkJICBnZnBfdCBnZnBfbWFzaywKLQkJCQkJCSAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKLQkJCQkJCSAgaW50ICpzd2FwcGluZXNzKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKLQkJCQkJCWdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwKLQkJCQkJCXBnX2RhdGFfdCAqcGdkYXQsCi0JCQkJCQl1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOwogbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7CkBAIC0zOTEsMTEgJiM0MzszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpCiB9CiAjZW5kaWYgLyogQ09ORklHX1NZU0ZTICZhbXA7JmFtcDsgQ09ORklHX05VTUEgKi8KIAotI2lmZGVmIENPTkZJR19OVU1BCi1leHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87Ci1leHRlcm4gaW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbzsKLSNlbmRpZgotCiB2b2lkIGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKHN0cnVjdCBmb2xpb19iYXRjaCAqZmJhdGNoKTsKIAogZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtzd2FwZF9ydW4oaW50IG5pZCk7CkBAIC01NTIsNyAmIzQzOzQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiAKIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIAlyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpOwogfQpkaWZmIC0tZ2l0IGEvbW0vTWFrZWZpbGUgYi9tbS9NYWtlZmlsZQppbmRleCBlZmY5ZjllN2UwNjFjMS4uNWY3MTJmOWJiZTczNTkgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL21tL01ha2VmaWxlCkBAIC01MCw3ICYjNDM7NTAsNyBAQCBlbmRpZgogCiBvYmoteQkJCTo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXAogCQkJICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXAotCQkJICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcCiYjNDM7CQkJICAgcmVhZGFoZWFkLm8gZm9saW9fbHJ1Lm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFwKIAkJCSAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXAogCQkJICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXAogCQkJICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXApkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vZm9saW9fbHJ1LmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gbW0vc3dhcC5jCnJlbmFtZSB0byBtbS9mb2xpb19scnUuYwppbmRleCA1ODhmNTBkOGYxYThjOS4uNDY5MjRhNzk3ZWFkNWUgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9mb2xpb19scnUuYwpAQCAtMSwxNyAmIzQzOzEsMTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIC8qCi0gKiAgbGludXgvbW0vc3dhcC5jCiYjNDM7ICogIGxpbnV4L21tL2ZvbGlvX2xydS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHMKICAqLwogCiAvKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG9wZXJhdGlvbiBvZiB0aGUKLSAqIExpbnV4IFZNIHN1YnN5c3RlbS4gRmluZS10dW5pbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4KLSAqIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC4KLSAqIFN0YXJ0ZWQgMTguMTIuOTEKLSAqIFN3YXAgYWdpbmcgYWRkZWQgMjMuMi45NSwgU3RlcGhlbiBUd2VlZGllLgotICogQnVmZmVybWVtIGxpbWl0cyBhZGRlZCAxMi4zLjk4LCBSaWsgdmFuIFJpZWwuCiYjNDM7ICogRm9saW8gTFJVIGhlbHBlcnM6IGFkZC9yZW1vdmUgZm9saW9zIGZyb20gTFJVIGxpc3RzLCBiYXRjaGluZywKJiM0MzsgKiBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiwgYW5kIHBhZ2UgY2FjaGUgcmVsZWFzZSBwYXRocy4KICAqLwogCiAjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKQEAgLTQzLDEwICYjNDM7MzksNiBAQAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSAmbHQ7dHJhY2UvZXZlbnRzL3BhZ2VtYXAuaCZndDsKIAotLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqLwotaW50IHBhZ2VfY2x1c3RlcjsKLXN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxOwotCiBzdHJ1Y3QgY3B1X2ZiYXRjaGVzIHsKIAkvKgogCSAqIFRoZSBmb2xsb3dpbmcgZm9saW8gYmF0Y2hlcyBhcmUgZ3JvdXBlZCB0b2dldGhlciBiZWNhdXNlIHRoZXkgYXJlIHByb3RlY3RlZApAQCAtMTE3MSwzNSAmIzQzOzExNjMsMyBAQCB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludAogCQlscnV2ZWNfcmVwYXJlbnRfbHJ1KGNoaWxkX2xydXZlYywgcGFyZW50X2xydXZlYywgbHJ1LCBuaWQpOwogfQogI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfc3lzY3RsX3RhYmxlW10gPSB7Ci0JewotCQkucHJvY25hbWUJPSAmIzM0O3BhZ2UtY2x1c3RlciYjMzQ7LAotCQkuZGF0YQkJPSAmYW1wO3BhZ2VfY2x1c3RlciwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAotCQkuZXh0cmExCQk9IFNZU0NUTF9aRVJPLAotCQkuZXh0cmEyCQk9ICh2b2lkICopJmFtcDtwYWdlX2NsdXN0ZXJfbWF4LAotCX0KLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGFueSBzZXR1cCBmb3IgdGhlIHN3YXAgc3lzdGVtCi0gKi8KLXZvaWQgX19pbml0IHN3YXBfc2V0dXAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTsKLQotCS8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovCi0JaWYgKG1lZ3MgJmx0OyAxNikKLQkJcGFnZV9jbHVzdGVyID0gMjsKLQllbHNlCi0JCXBhZ2VfY2x1c3RlciA9IDM7Ci0JLyoKLQkgKiBSaWdodCBub3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBtZWFucyB0aGF0IHdlCi0JICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmUKLQkgKi8KLQotCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9zeXNjdGxfdGFibGUpOwotfQpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMDcuLjBjMmVlNDdkODkzNjY2IDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTI0LDYgJiM0MzsyNCw3MyBAQAogCiBzdHJ1Y3QgZm9saW9fYmF0Y2g7CiAKJiM0MzsvKiBtbS93b3JraW5nc2V0LmMgKi8KJiM0Mztib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsCiYjNDM7CQkJICAgIGJvb2wgZmx1c2gpOwomIzQzO3ZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKJiM0Mzt2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKJiM0Mzt2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpOwomIzQzO3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzOwomIzQzOy8qIG1tL2ZvbGlvX2xydS5jICovCiYjNDM7dm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTsKJiM0Mzt2b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEhvbGRpbmcgUE1ELXNpemVkIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZSB1bmJhbGFuY2VzIGFjY291bnRpbmcuCiYjNDM7CSAqIEhvbGRpbmcgc21hbGwgbnVtYmVycyBvZiBsb3ctb3JkZXIgbVRIUCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUKJiM0MzsJICogd2lsbCBiZSBzZW5zaWJsZSwgYnV0IG5vYm9keSBoYXMgaW1wbGVtZW50ZWQgYW5kIHRlc3RlZCB0aGF0IHlldC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhZm9saW9fdGVzdF9sYXJnZShmb2xpbyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfZW5hYmxlKHZvaWQpCiYjNDM7ewomIzQzOwlhdG9taWNfZGVjKCZhbXA7bHJ1X2Rpc2FibGVfY291bnQpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGxydV9jYWNoZV9kaXNhYmxlKHZvaWQpOwomIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTsKJiM0Mzt2b2lkIGxydV9hZGRfZHJhaW5fY3B1KGludCBjcHUpOwomIzQzO3ZvaWQgbHJ1X2FkZF9kcmFpbl9jcHVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MzsKJiM0MzsvKiBtbS92bXNjYW4uYyAqLwomIzQzO3Vuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7CiYjNDM7dW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCiYjNDM7CQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrKTsKJiM0Mzt1bnNpZ25lZCBsb25nIGxydXZlY19scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1LAomIzQzOwkJCSAgICAgIGludCB6b25lX2lkeCk7CiYjNDM7CiYjNDM7I2RlZmluZSBNRU1DR19SRUNMQUlNX01BWV9TV0FQICgxICZsdDsmbHQ7IDEpCiYjNDM7I2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSAmbHQ7Jmx0OyAyKQomIzQzOyNkZWZpbmUgTUlOX1NXQVBQSU5FU1MgMAomIzQzOyNkZWZpbmUgTUFYX1NXQVBQSU5FU1MgMjAwCiYjNDM7CiYjNDM7LyogSnVzdCByZWNsYWltIGZyb20gYW5vbiBmb2xpb3MgaW4gcHJvYWN0aXZlIG1lbW9yeSByZWNsYWltICovCiYjNDM7I2RlZmluZSBTV0FQUElORVNTX0FOT05fT05MWSAoTUFYX1NXQVBQSU5FU1MgJiM0MzsgMSkKJiM0MzsKJiM0Mzt1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKJiM0MzsJCQkJCSAgIGdmcF90IGdmcF9tYXNrLAomIzQzOwkJCQkJICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucywKJiM0MzsJCQkJCSAgIGludCAqc3dhcHBpbmVzcyk7CiYjNDM7dW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsCiYjNDM7CQkJCSAgICAgcGdfZGF0YV90ICpwZ2RhdCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX05VTUEKJiM0MztleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87CiYjNDM7ZXh0ZXJuIGludCBzeXNjdGxfbWluX3NsYWJfcmF0aW87CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogTWFpbnRhaW5zIHN0YXRlIGFjcm9zcyBhIHBhZ2UgdGFibGUgbW92ZS4gVGhlIG9wZXJhdGlvbiBhc3N1bWVzIGJvdGggc291cmNlCiAgKiBhbmQgZGVzdGluYXRpb24gVk1BcyBhbHJlYWR5IGV4aXN0IGFuZCBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgpkaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmMKaW5kZXggYWJlMTNiMjkxZGRjOGIuLjZjNzJmZTZjYWVmNzVkIDEwMDY0NAotLS0gYS9tbS9tZW1mZC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWZkLmMKQEAgLTE5LDYgJiM0MzsxOSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWVtZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waWRfbmFtZXNwYWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9tZW1mZC5oJmd0OwomIzQzOyNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3N3YXAuaCYjMzQ7CiAKIC8qCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggNzdkMmQxNGVkYTQyMWUuLjA5MTFiZGZlMDNmMDZhIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC04LDggJiM0Mzs4LDYgQEAgc3RydWN0IG1lbXBvbGljeTsKIHN0cnVjdCBzd2FwX2lvY2I7CiBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZTsKIAotZXh0ZXJuIGludCBwYWdlX2NsdXN0ZXI7Ci0KICNpZiBkZWZpbmVkKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMpCiAjZGVmaW5lIFNXQVBfQ0FDSEVfUEZOX0JJVFMgKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMgLSBQQUdFX1NISUZUKQogI2VsaWYgZGVmaW5lZChNQVhfUEhZU01FTV9CSVRTKQpAQCAtNzksNiAmIzQzOzc3LDggQEAgZW51bSBzd2FwX2NsdXN0ZXJfZmxhZ3MgewogfTsKIAogI2lmZGVmIENPTkZJR19TV0FQCiYjNDM7dm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTsKJiM0MzsKICNpbmNsdWRlICZsdDtsaW51eC9zd2Fwb3BzLmgmZ3Q7IC8qIGZvciBzd3Bfb2Zmc2V0ICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYmxrX3R5cGVzLmgmZ3Q7IC8qIGZvciBiaW9fZW5kX2lvX3QgKi8KIApAQCAtMzM2LDYgJiM0MzszMzYsMTEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fc3dhcF9mbGFncyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqLwogc3RydWN0IHN3YXBfaW9jYjsKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9yZWFkYWhlYWRfc2V0dXAodm9pZCkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKnN3YXBfY2x1c3Rlcl9sb2NrKAogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgcGdvZmZfdCBvZmZzZXQsIGJvb2wgaXJxKQogewpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYwLi5kMDZmOGJjNDZlNzc1MiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMjIsMTAgJiM0MzsyMiwxNSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9odWdlX21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2htZW1fZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3lzY3RsLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwX3RhYmxlLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtzd2FwLmgmIzM0OwogCiYjNDM7LyogU3dhcCByZWFkYWhlYWQgY2x1c3RlciBzaXplLCBhcyBhIHBvd2VyIG9mIDIgcGFnZXMuICovCiYjNDM7c3RhdGljIGludCBwYWdlX2NsdXN0ZXI7CiYjNDM7c3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7CiYjNDM7CiAvKgogICogc3dhcHBlcl9zcGFjZSBpcyBhIGZpY3Rpb24sIHJldGFpbmVkIHRvIHNpbXBsaWZ5IHRoZSBwYXRoIHRocm91Z2gKICAqIHZtc2NhbiYjMzk7cyBzaHJpbmtfZm9saW9fbGlzdC4KQEAgLTk4Nyw2ICYjNDM7OTkyLDM4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiAJcmV0dXJuIGZvbGlvOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cGFnZS1jbHVzdGVyJiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3BhZ2VfY2x1c3RlciwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAomIzQzOwkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIJCT0gKHZvaWQgKikmYW1wO3BhZ2VfY2x1c3Rlcl9tYXgsCiYjNDM7CX0KJiM0Mzt9OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZwomIzQzOyAqLwomIzQzO3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTsKJiM0MzsKJiM0MzsJLyogVXNlIGEgc21hbGxlciBjbHVzdGVyIGZvciBzbWFsbC1tZW1vcnkgbWFjaGluZXMgKi8KJiM0MzsJaWYgKG1lZ3MgJmx0OyAxNikKJiM0MzsJCXBhZ2VfY2x1c3RlciA9IDI7CiYjNDM7CWVsc2UKJiM0MzsJCXBhZ2VfY2x1c3RlciA9IDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJpZ2h0IG5vdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1lYW5zIHRoYXQgd2UKJiM0MzsJICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmUKJiM0MzsJICovCiYjNDM7CiYjNDM7CXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTsKJiM0Mzt9CiYjNDM7CiAjaWZkZWYgQ09ORklHX1NZU0ZTCiBzdGF0aWMgc3NpemVfdCB2bWFfcmFfZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDM1YzNiYjE1YWU5NmEzLi40OWM2NjI5ZmE4NWExOSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc2NTQsNyAmIzQzOzc2NTQsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBrc3dhcGRfaW5pdCh2b2lkKQogewogCWludCBuaWQ7CiAKLQlzd2FwX3NldHVwKCk7CiYjNDM7CXN3YXBfcmVhZGFoZWFkX3NldHVwKCk7CiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKQogIAkJa3N3YXBkX3J1bihuaWQpOwogCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgdm1zY2FuX3N5c2N0bF90YWJsZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMzcKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxMzg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVmYWN0b3Jpbmcgb2YgYG1tL3N3YXAuY2AqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgcmVuYW1lcyBgbW0vc3dhcC5jYCB0byBgbW0vZm9saW9fbHJ1LmNgIGFuZCBzaHVmZmxlcyBzb21lIGNvZGUgYXJvdW5kLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LgoKRmlyc3QsIHRoZSBmaWxlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlcyAoYHZtLnJzdGAsIGBtbS1hcGkucnN0YCksIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIGFuZCBhIHJlbmFtZSBpbiBgTWFrZWZpbGVgLiBUaGUgbWFpbiBoZWFkZXIgaW5jbHVkZSB1cGRhdGVzIGluY2x1ZGUgbW92aW5nIGRlY2xhcmF0aW9ucyBmcm9tIGBzd2FwLmhgIHRvIGBtbS9pbnRlcm5hbC5oYCBhbmQgYWRkaW5nIGBzd2FwX3JlYWRhaGVhZF9zZXR1cCgpYCB0byBgbW0vc3dhcC5oYC4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgbW92aW5nIHRoZSBgcGFnZV9jbHVzdGVyYCB2YXJpYWJsZSBhbmQgYHN3YXBfc2V0dXAoKWAgZnVuY3Rpb24gZnJvbSBgbW0vc3dhcC5jYCB0byBgbW0vc3dhcF9zdGF0ZS5jYC4gSXQgbG9va3MgbGlrZSB0aGUgcmVuYW1lIHRvIGBmb2xpb19scnUuY2AgaXMgYmVjYXVzZSB0aGF0JiMzOTtzIHdoYXQgdGhlIGZpbGUgKm1vc3RseSogY29udGFpbnMgbm93LiBgc3dhcF9zZXR1cCgpYCYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBpbiBgc3dhcF9yZWFkYWhlYWRfc2V0dXAoKWAuIEFuZCB0aGUgY2FsbHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gYHZtc2Nhbi5jYC4gU28gaXQmIzM5O3MgYSByZWZhY3RvcmluZywgcGxhaW4gYW5kIHNpbXBsZSwgd2l0aCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhwZWN0ZWQuCgpCdXQsIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhpcy4gTGV0JiMzOTtzIGRpdmUgZGVlcGVyIGFuZCBjb21wYXJlIHRoZSByZWxldmFudCBjb2RlIGJsb2Nrcy4gSGVyZSYjMzk7cyB3aGF0IHdhcyBpbiB0aGUgb2xkIGBtbS9zd2FwLmNgOgoKYGBgYwovKiBIb3cgbWFueSBwYWdlcyBkbyB3ZSB0cnkgdG8gc3dhcCBvciBwYWdlIGluL291dCB0b2dldGhlcj8gQXMgYSBwb3dlciBvZiAyICovCmludCBwYWdlX2NsdXN0ZXI7CnN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxOwouLi4Kc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9zeXNjdGxfdGFibGVbXSA9IHsKCXsKCQkucHJvY25hbWUJPSAmIzM0O3BhZ2UtY2x1c3RlciYjMzQ7LAoJCS5kYXRhCQk9ICZhbXA7cGFnZV9jbHVzdGVyLAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCgkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKCQkuZXh0cmEyCQk9ICh2b2lkICopJmFtcDtwYWdlX2NsdXN0ZXJfbWF4LAoJfQp9OwoKLyoKICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbQogKi8Kdm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKQp7Cgl1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTsKCgkvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqLwoJaWYgKG1lZ3MgJmx0OyAxNikKCQlwYWdlX2NsdXN0ZXIgPSAyOwoJZWxzZQoJCXBhZ2VfY2x1c3RlciA9IDM7CgkvKgoJICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZQoJICogX3JlYWxseV8gZG9uJiMzOTt0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmUKCSAqLwoKCXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9zeXNjdGxfdGFibGUpOwp9CmBgYAoKQW5kIGhlcmUmIzM5O3MgdGhlIG5ldyBgbW0vc3dhcF9zdGF0ZS5jYDoKCmBgYGMKJiM0MzsvKiBTd2FwIHJlYWRhaGVhZCBjbHVzdGVyIHNpemUsIGFzIGEgcG93ZXIgb2YgMiBwYWdlcy4gKi8KJiM0MztzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjsKJiM0MztzdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTsKLi4uCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5wcm9jbmFtZQk9ICYjMzQ7cGFnZS1jbHVzdGVyJiMzNDssCiYjNDM7CQkuZGF0YQkJPSAmYW1wO3BhZ2VfY2x1c3RlciwKJiM0MzsJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiYjNDM7CQkubW9kZQkJPSAwNjQ0LAomIzQzOwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAomIzQzOwkJLmV4dHJhMQkJPSBTWVNDVExfWkVSTywKJiM0MzsJCS5leHRyYTIJCT0gKHZvaWQgKikmYW1wO3BhZ2VfY2x1c3Rlcl9tYXgsCiYjNDM7CX0KJiM0Mzt9OwoKJiM0MzsvKioKJiM0MzsgKiBzd2FwX3JlYWRhaGVhZF9zZXR1cCAtIGRlZmF1bHRzIGFuZCBzeXNjdGwgZm9yIHN3YXAgY2FjaGUgcmVhZGFoZWFkIGNsdXN0ZXJpbmcKJiM0MzsgKi8KJiM0Mzt2b2lkIF9faW5pdCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBtZWdzID0gUEFHRVNfVE9fTUIodG90YWxyYW1fcGFnZXMoKSk7CgomIzQzOwkvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqLwomIzQzOwlpZiAobWVncyAmbHQ7IDE2KQomIzQzOwkJcGFnZV9jbHVzdGVyID0gMjsKJiM0MzsJZWxzZQomIzQzOwkJcGFnZV9jbHVzdGVyID0gMzsKJiM0MzsJLyoKJiM0MzsJICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZQomIzQzOwkgKiBfcmVhbGx5XyBkb24mIzM5O3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZQomIzQzOwkgKi8KCiYjNDM7CXJlZ2lzdGVyX3N5c2N0bF9pbml0KCYjMzQ7dm0mIzM0Oywgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTsKJiM0Mzt9CmBgYAoKVGhleSYjMzk7cmUgZXNzZW50aWFsbHkgaWRlbnRpY2FsISBUaGUgb25seSBkaWZmZXJlbmNlIEkgc2VlIGlzIHRoYXQgYHBhZ2VfY2x1c3RlcmAgaXMgbm93IGBzdGF0aWMgaW50YCBpbnN0ZWFkIG9mIGp1c3QgYGludGAuIEJ1dCwgaG9sZCBvbi4uLiBpZiBpdCB3YXMgcHJldmlvdXNseSBhbiBgaW50YCBpbiBgbW0vc3dhcC5jCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwYWdlX2NsdXN0ZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jLTMwLS8qIFN3YXAgcmVhZGFoZWFkIGNsdXN0ZXIgc2l6ZSwgYXMgYSBwb3dlciBvZiAyIHBhZ2VzLiAqL1xubW0vc3dhcF9zdGF0ZS5jOjMxOnN0YXRpYyBpbnQgcGFnZV9jbHVzdGVyO1xubW0vc3dhcF9zdGF0ZS5jOjMyOnN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxO1xubW0vc3dhcF9zdGF0ZS5jLTMzLVxuLS1cbm1tL3N3YXBfc3RhdGUuYz03Njg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3dhcGluX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy03NzMtXG5tbS9zd2FwX3N0YXRlLmM6Nzc0Olx0bWF4X3BhZ2VzID0gMSBcdTAwM2NcdTAwM2MgUkVBRF9PTkNFKHBhZ2VfY2x1c3Rlcik7XG5tbS9zd2FwX3N0YXRlLmMtNzc1LVx0aWYgKG1heF9wYWdlcyBcdTAwM2M9IDEpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTc5OC0gKiBQcmltaXRpdmUgc3dhcCByZWFkYWhlYWQgY29kZS4gV2Ugc2ltcGx5IHJlYWQgYW4gYWxpZ25lZCBibG9jayBvZlxubW0vc3dhcF9zdGF0ZS5jOjc5OTogKiAoMSBcdTAwM2NcdTAwM2MgcGFnZV9jbHVzdGVyKSBlbnRyaWVzIGluIHRoZSBzd2FwIGFyZWEuIFRoaXMgbWV0aG9kIGlzIGNob3NlblxubW0vc3dhcF9zdGF0ZS5jLTgwMC0gKiBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IGNvc3QgdXMgYW55IHNlZWsgdGltZS4gIFdlIGFsc28gbWFrZSBzdXJlIHRvIHF1ZXVlXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTgwNz1zdHJ1Y3QgZm9saW8gKnN3YXBfY2x1c3Rlcl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy04MjMtXG5tbS9zd2FwX3N0YXRlLmM6ODI0Olx0LyogUmVhZCBhIHBhZ2VfY2x1c3RlciBzaXplZCBhbmQgYWxpZ25lZCBjbHVzdGVyIGFyb3VuZCBvZmZzZXQuICovXG5tbS9zd2FwX3N0YXRlLmMtODI1LVx0c3RhcnRfb2Zmc2V0ID0gb2Zmc2V0IFx1MDAyNiB+bWFzaztcbi0tXG5tbS9zd2FwX3N0YXRlLmM9ODUwPXN0YXRpYyBpbnQgc3dhcF92bWFfcmFfd2luKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCB1bnNpZ25lZCBsb25nICpzdGFydCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtODU3LVxubW0vc3dhcF9zdGF0ZS5jOjg1ODpcdG1heF93aW4gPSAxIFx1MDAzY1x1MDAzYyBtaW4oUkVBRF9PTkNFKHBhZ2VfY2x1c3RlciksIFNXQVBfUkFfT1JERVJfQ0VJTElORyk7XG5tbS9zd2FwX3N0YXRlLmMtODU5LVx0aWYgKG1heF93aW4gPT0gMSlcbi0tXG5tbS9zd2FwX3N0YXRlLmM9OTk1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3N3YXBfc3RhdGUuYy05OTctXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDtwYWdlLWNsdXN0ZXJcJiMzNDssXG5tbS9zd2FwX3N0YXRlLmM6OTk4Olx0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3Rlcixcbm1tL3N3YXBfc3RhdGUuYy05OTktXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMTAwMi1cdFx0LmV4dHJhMVx0XHQ9IFNZU0NUTF9aRVJPLFxubW0vc3dhcF9zdGF0ZS5jOjEwMDM6XHRcdC5leHRyYTJcdFx0PSAodm9pZCAqKVx1MDAyNnBhZ2VfY2x1c3Rlcl9tYXgsXG5tbS9zd2FwX3N0YXRlLmMtMTAwNC1cdH1cbi0tXG5tbS9zd2FwX3N0YXRlLmM9MTAxMD12b2lkIF9faW5pdCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0xMDE1LVx0aWYgKG1lZ3MgXHUwMDNjIDE2KVxubW0vc3dhcF9zdGF0ZS5jOjEwMTY6XHRcdHBhZ2VfY2x1c3RlciA9IDI7XG5tbS9zd2FwX3N0YXRlLmMtMTAxNy1cdGVsc2Vcbm1tL3N3YXBfc3RhdGUuYzoxMDE4Olx0XHRwYWdlX2NsdXN0ZXIgPSAzO1xubW0vc3dhcF9zdGF0ZS5jLTEwMTktXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDAxOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDgzCgkJCQkJCQlvdXRwdXQ6IDEwMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIE9ubHk6IE5vIEZ1bmN0aW9uYWwgSW1wYWN0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCBpdC4gVGhlIGBwYWdlX2NsdXN0ZXJgIHZhcmlhYmxlIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIHRoZSBgbW0vc3dhcF9zdGF0ZS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGZvciByZWZhY3RvcmluZyBwdXJwb3Nlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIHNldHRpbmcgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoaXMgcGF0Y2ggd29uJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGF0dGFjayBzdXJmYWNlcyBvciB2dWxuZXJhYmlsaXRpZXMgZnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludC4gSXQmIzM5O3MgYSBjbGVhbiByZWZhY3RvciwgYW5kIEkgY2FuIG1vdmUgZm9yd2FyZCBhY2NvcmRpbmdseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGlzIGEgcHVyZSByZWZhY3RvcmluZyB0aGF0IHJlbmFtZXMgbW0vc3dhcC5jIHRvIG1tL2ZvbGlvX2xydS5jLCBtb3ZlcyBzd2FwX3NldHVwKCkgYW5kIHBhZ2VfY2x1c3RlciB0byBtbS9zd2FwX3N0YXRlLmMsIGFuZCByZWxvY2F0ZXMgZGVjbGFyYXRpb25zIGZyb20gaW5jbHVkZS9saW51eC9zd2FwLmggdG8gbW0vaW50ZXJuYWwuaC4gVGhlcmUgYXJlIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZXhlY3V0aW9uIGZsb3cuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjE4OjAwLjg1ODYzNzAwOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzk3NzI1OTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6MTg6MDAuODU4NjQxNTI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQyMTE4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4Y2MyODhiYWQ4NDZmZTkyNjdmYzdiNmYxNDAxMDJjODZlMzRlYzY3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDAxOjE3OjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi5jODRlYmM2MmEyMTgzZSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcXG5AQCAtMTksOSArMTksNiBAQCBUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uXFxuIG9mIHRoZSB2aXJ0dWFsIG1lbW9yeSAoVk0pIHN1YnN5c3RlbSBvZiB0aGUgTGludXgga2VybmVsIGFuZFxcbiB0aGUgd3JpdGVvdXQgb2YgZGlydHkgZGF0YSB0byBkaXNrLlxcbiBcXG4tRGVmYXVsdCB2YWx1ZXMgYW5kIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBtb3N0IG9mIHRoZXNlXFxuLWZpbGVzIGNhbiBiZSBmb3VuZCBpbiBtbS9zd2FwLmMuXFxuLVxcbiBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvdm06XFxuIFxcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdFxcbmluZGV4IGFhYmRkM2NiYTU4ZTgwLi5kNmQxODliOWE5OTYzNiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcXG5AQCAtMTE3LDcgKzExNyw3IEBAIE1vcmUgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb25zXFxuIC4uICNrZXJuZWwtZG9jOjogbW0vaG1tLmMgKGJ1aWxkIHdhcm5pbmdzKVxcbiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtcmVtYXAuY1xcbiAuLiBrZXJuZWwtZG9jOjogbW0vaHVnZXRsYi5jXFxuLS4uIGtlcm5lbC1kb2M6OiBtbS9zd2FwLmNcXG4rLi4ga2VybmVsLWRvYzo6IG1tL2ZvbGlvX2xydS5jXFxuIC4uIGtlcm5lbC1kb2M6OiBtbS9tZW1jb250cm9sLmNcXG4gLi4gI2tlcm5lbC1kb2M6OiBtbS9tZW1vcnktdGllcnMuYyAoYnVpbGQgd2FybmluZ3MpXFxuIC4uIGtlcm5lbC1kb2M6OiBtbS9zaG1lbS5jXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCAxNTAxMWY1NzUyYTk5NC4uOTQzOWI3Y2U3MDkyMjQgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC0xNzA4Nyw3ICsxNzA4Nyw3IEBAIEY6XFx0RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0XFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0XFxuIEY6XFx0aW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaFxcbiBGOlxcdGluY2x1ZGUvbGludXgvbW16b25lLmhcXG4tRjpcXHRtbS9zd2FwLmNcXG4rRjpcXHRtbS9mb2xpb19scnUuY1xcbiBGOlxcdG1tL3Ztc2Nhbi5jXFxuIEY6XFx0bW0vd29ya2luZ3NldC5jXFxuIFxcbkBAIC0xNzIzNyw3ICsxNzIzNyw2IEBAIEY6XFx0aW5jbHVkZS9saW51eC9zd2FwLmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L3N3YXBmaWxlLmhcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxcbiBGOlxcdG1tL3BhZ2VfaW8uY1xcbi1GOlxcdG1tL3N3YXAuY1xcbiBGOlxcdG1tL3N3YXAuaFxcbiBGOlxcdG1tL3N3YXBfdGFibGUuaFxcbiBGOlxcdG1tL3N3YXBfc3RhdGUuY1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuaW5kZXggOGYwZjY4ZTI0NWJhYTMuLjYyNDgyNDY0YzY3MTBjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMjkzLDM5ICsyOTMsMTkgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBwYWdlX3N3YXBfZW50cnkoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuIFxcdHJldHVybiBlbnRyeTtcXG4gfVxcbiBcXG4tLyogbGludXgvbW0vd29ya2luZ3NldC5jICovXFxuLWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcXG4tXFx0XFx0XFx0XFx0Ym9vbCBmbHVzaCk7XFxuLXZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4tdm9pZCAqd29ya2luZ3NldF9ldmljdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTtcXG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcXG4tdm9pZCB3b3JraW5nc2V0X2FjdGl2YXRpb24oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLVxcbiAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi9cXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdG90YWxyZXNlcnZlX3BhZ2VzO1xcbiBcXG4gLyogRGVmaW5pdGlvbiBvZiBnbG9iYWxfem9uZV9wYWdlX3N0YXRlIG5vdCBhdmFpbGFibGUgeWV0ICovXFxuICNkZWZpbmUgbnJfZnJlZV9wYWdlcygpIGdsb2JhbF96b25lX3BhZ2Vfc3RhdGUoTlJfRlJFRV9QQUdFUylcXG4gXFxuKy8qIGxpbnV4L21tL2ZvbGlvX2xydS5jICovXFxuK3ZvaWQgZm9saW9fYWRkX2xydShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rdm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbit2b2lkIGxydV9hZGRfZHJhaW5fYWxsKHZvaWQpO1xcbiBcXG4tLyogbGludXgvbW0vc3dhcC5jICovXFxuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxcbi1cXHRcXHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcXG4tdm9pZCBscnVfbm90ZV9jb3N0X3JlZmF1bHQoc3RydWN0IGZvbGlvICopO1xcbi12b2lkIGZvbGlvX2FkZF9scnUoc3RydWN0IGZvbGlvICopO1xcbi12b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XFxuLXZvaWQgbWFya19wYWdlX2FjY2Vzc2VkKHN0cnVjdCBwYWdlICopO1xcbi12b2lkIGZvbGlvX21hcmtfYWNjZXNzZWQoc3RydWN0IGZvbGlvICopO1xcbi1cXG4tc3RhdGljIGlubGluZSBib29sIGZvbGlvX21heV9iZV9scnVfY2FjaGVkKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLXtcXG4tXFx0LypcXG4tXFx0ICogSG9sZGluZyBQTUQtc2l6ZWQgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlIHVuYmFsYW5jZXMgYWNjb3VudGluZy5cXG4tXFx0ICogSG9sZGluZyBzbWFsbCBudW1iZXJzIG9mIGxvdy1vcmRlciBtVEhQIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZVxcbi1cXHQgKiB3aWxsIGJlIHNlbnNpYmxlLCBidXQgbm9ib2R5IGhhcyBpbXBsZW1lbnRlZCBhbmQgdGVzdGVkIHRoYXQgeWV0Llxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuICFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKTtcXG4tfVxcbisvKiBsaW51eC9tbS9mb2xpby1jb21wYXQuYyAqL1xcbit2b2lkIG1hcmtfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuIFxcbiBleHRlcm4gYXRvbWljX3QgbHJ1X2Rpc2FibGVfY291bnQ7XFxuIFxcbkBAIC0zMzQsNDMgKzMxNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfY2FjaGVfZGlzYWJsZWQodm9pZClcXG4gXFx0cmV0dXJuIGF0b21pY19yZWFkKFxcdTAwMjZscnVfZGlzYWJsZV9jb3VudCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfZW5hYmxlKHZvaWQpXFxuLXtcXG4tXFx0YXRvbWljX2RlYyhcXHUwMDI2bHJ1X2Rpc2FibGVfY291bnQpO1xcbi19XFxuLVxcbi1leHRlcm4gdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcXG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbih2b2lkKTtcXG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9jcHUoaW50IGNwdSk7XFxuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xcbi1leHRlcm4gdm9pZCBscnVfYWRkX2RyYWluX2FsbCh2b2lkKTtcXG4tdm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbi12b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLWV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9pZCk7XFxuLVxcbiAvKiBsaW51eC9tbS92bXNjYW4uYyAqL1xcbi1leHRlcm4gdW5zaWduZWQgbG9uZyB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTtcXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbi1cXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbWFzayk7XFxuLXVuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsIGludCB6b25lX2lkeCk7XFxuLVxcbi0jZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4tI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcXHUwMDNjXFx1MDAzYyAyKVxcbi0jZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcXG4tI2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcXG4tXFxuLS8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xcbi0jZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyArIDEpXFxuLVxcbi1leHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIGdmcF90IGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgaW50ICpzd2FwcGluZXNzKTtcXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHBnX2RhdGFfdCAqcGdkYXQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5AQCAtMzkxLDExICszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19TWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfTlVNQSAqL1xcbiBcXG4tI2lmZGVmIENPTkZJR19OVU1BXFxuLWV4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcXG4tZXh0ZXJuIGludCBzeXNjdGxfbWluX3NsYWJfcmF0aW87XFxuLSNlbmRpZlxcbi1cXG4gdm9pZCBjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaCk7XFxuIFxcbiBleHRlcm4gdm9pZCBfX21lbWluaXQga3N3YXBkX3J1bihpbnQgbmlkKTtcXG5AQCAtNTUyLDcgKzQ5MSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcbiB2b2lkIGxydV9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpO1xcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSlcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4ge1xcbiBcXHRyZXR1cm4gUkVBRF9PTkNFKHZtX3N3YXBwaW5lc3MpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGVcXG5pbmRleCBlZmY5ZjllN2UwNjFjMS4uNWY3MTJmOWJiZTczNTkgMTAwNjQ0XFxuLS0tIGEvbW0vTWFrZWZpbGVcXG4rKysgYi9tbS9NYWtlZmlsZVxcbkBAIC01MCw3ICs1MCw3IEBAIGVuZGlmXFxuIFxcbiBvYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxuLVxcdFxcdFxcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbitcXHRcXHRcXHQgICByZWFkYWhlYWQubyBmb2xpb19scnUubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4gXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbiBcXHRcXHRcXHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxcXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL2ZvbGlvX2xydS5jXFxuc2ltaWxhcml0eSBpbmRleCA5NiVcXG5yZW5hbWUgZnJvbSBtbS9zd2FwLmNcXG5yZW5hbWUgdG8gbW0vZm9saW9fbHJ1LmNcXG5pbmRleCA1ODhmNTBkOGYxYThjOS4uNDY5MjRhNzk3ZWFkNWUgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5jXFxuKysrIGIvbW0vZm9saW9fbHJ1LmNcXG5AQCAtMSwxNyArMSwxMyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuIC8qXFxuLSAqICBsaW51eC9tbS9zd2FwLmNcXG4rICogIGxpbnV4L21tL2ZvbGlvX2xydS5jXFxuICAqXFxuICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQgIExpbnVzIFRvcnZhbGRzXFxuICAqL1xcbiBcXG4gLypcXG4tICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG9wZXJhdGlvbiBvZiB0aGVcXG4tICogTGludXggVk0gc3Vic3lzdGVtLiBGaW5lLXR1bmluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpblxcbi0gKiBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QuXFxuLSAqIFN0YXJ0ZWQgMTguMTIuOTFcXG4tICogU3dhcCBhZ2luZyBhZGRlZCAyMy4yLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXFxuLSAqIEJ1ZmZlcm1lbSBsaW1pdHMgYWRkZWQgMTIuMy45OCwgUmlrIHZhbiBSaWVsLlxcbisgKiBGb2xpbyBMUlUgaGVscGVyczogYWRkL3JlbW92ZSBmb2xpb3MgZnJvbSBMUlUgbGlzdHMsIGJhdGNoaW5nLFxcbisgKiBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiwgYW5kIHBhZ2UgY2FjaGUgcmVsZWFzZSBwYXRocy5cXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG5AQCAtNDMsMTAgKzM5LDYgQEBcXG4gI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuICNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvcGFnZW1hcC5oXFx1MDAzZVxcbiBcXG4tLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqL1xcbi1pbnQgcGFnZV9jbHVzdGVyO1xcbi1zdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTtcXG4tXFxuIHN0cnVjdCBjcHVfZmJhdGNoZXMge1xcbiBcXHQvKlxcbiBcXHQgKiBUaGUgZm9sbG93aW5nIGZvbGlvIGJhdGNoZXMgYXJlIGdyb3VwZWQgdG9nZXRoZXIgYmVjYXVzZSB0aGV5IGFyZSBwcm90ZWN0ZWRcXG5AQCAtMTE3MSwzNSArMTE2MywzIEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XFxuIFxcdFxcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XFxuIH1cXG4gI2VuZGlmXFxuLVxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSBzd2FwX3N5c2N0bF90YWJsZVtdID0ge1xcbi1cXHR7XFxuLVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInBhZ2UtY2x1c3RlclxcXCIsXFxuLVxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cGFnZV9jbHVzdGVyLFxcbi1cXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4tXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLVxcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbi1cXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4tXFx0XFx0LmV4dHJhMlxcdFxcdD0gKHZvaWQgKilcXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcXG4tXFx0fVxcbi19O1xcbi1cXG4tLypcXG4tICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbVxcbi0gKi9cXG4tdm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgbWVncyA9IFBBR0VTX1RPX01CKHRvdGFscmFtX3BhZ2VzKCkpO1xcbi1cXG4tXFx0LyogVXNlIGEgc21hbGxlciBjbHVzdGVyIGZvciBzbWFsbC1tZW1vcnkgbWFjaGluZXMgKi9cXG4tXFx0aWYgKG1lZ3MgXFx1MDAzYyAxNilcXG4tXFx0XFx0cGFnZV9jbHVzdGVyID0gMjtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRwYWdlX2NsdXN0ZXIgPSAzO1xcbi1cXHQvKlxcbi1cXHQgKiBSaWdodCBub3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBtZWFucyB0aGF0IHdlXFxuLVxcdCAqIF9yZWFsbHlfIGRvbid0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcXG4tXFx0ICovXFxuLVxcbi1cXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcXFwidm1cXFwiLCBzd2FwX3N5c2N0bF90YWJsZSk7XFxuLX1cXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAxODFlNzlmMWQ2YTIwNy4uMGMyZWU0N2Q4OTM2NjYgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtMjQsNiArMjQsNzMgQEBcXG4gXFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcXG4gXFxuKy8qIG1tL3dvcmtpbmdzZXQuYyAqL1xcbitib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuK1xcdFxcdFxcdCAgICBib29sIGZsdXNoKTtcXG4rdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xcbit2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XFxuK3ZvaWQgd29ya2luZ3NldF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHZvaWQgKnNoYWRvdyk7XFxuK3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbitcXG4rLyogbW0vZm9saW9fbHJ1LmMgKi9cXG4rdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXFxuK1xcdFxcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xcbit2b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rdm9pZCBmb2xpb19hZGRfbHJ1X3ZtYShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHQvKlxcbitcXHQgKiBIb2xkaW5nIFBNRC1zaXplZCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUgdW5iYWxhbmNlcyBhY2NvdW50aW5nLlxcbitcXHQgKiBIb2xkaW5nIHNtYWxsIG51bWJlcnMgb2YgbG93LW9yZGVyIG1USFAgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlXFxuK1xcdCAqIHdpbGwgYmUgc2Vuc2libGUsIGJ1dCBub2JvZHkgaGFzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgdGhhdCB5ZXQuXFxuK1xcdCAqL1xcbitcXHRyZXR1cm4gIWZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgbHJ1X2NhY2hlX2VuYWJsZSh2b2lkKVxcbit7XFxuK1xcdGF0b21pY19kZWMoXFx1MDAyNmxydV9kaXNhYmxlX2NvdW50KTtcXG4rfVxcbitcXG4rdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcXG4rdm9pZCBscnVfYWRkX2RyYWluKHZvaWQpO1xcbit2b2lkIGxydV9hZGRfZHJhaW5fY3B1KGludCBjcHUpO1xcbit2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xcbit2b2lkIGZvbGlvX2RlYWN0aXZhdGUoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3ZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4rXFxuKy8qIG1tL3Ztc2Nhbi5jICovXFxuK3Vuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XFxuK3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxcbitcXHRcXHRcXHRcXHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbWFzayk7XFxuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXFxuK1xcdFxcdFxcdCAgICAgIGludCB6b25lX2lkeCk7XFxuK1xcbisjZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4rI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcXHUwMDNjXFx1MDAzYyAyKVxcbisjZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcXG4rI2RlZmluZSBNQVhfU1dBUFBJTkVTUyAyMDBcXG4rXFxuKy8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xcbisjZGVmaW5lIFNXQVBQSU5FU1NfQU5PTl9PTkxZIChNQVhfU1dBUFBJTkVTUyArIDEpXFxuK1xcbit1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICBnZnBfdCBnZnBfbWFzayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgaW50ICpzd2FwcGluZXNzKTtcXG4rdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXFxuK1xcdFxcdFxcdFxcdCAgICAgcGdfZGF0YV90ICpwZ2RhdCxcXG4rXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcXG4rXFxuKyNpZmRlZiBDT05GSUdfTlVNQVxcbitleHRlcm4gaW50IHN5c2N0bF9taW5fdW5tYXBwZWRfcmF0aW87XFxuK2V4dGVybiBpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvO1xcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIE1haW50YWlucyBzdGF0ZSBhY3Jvc3MgYSBwYWdlIHRhYmxlIG1vdmUuIFRoZSBvcGVyYXRpb24gYXNzdW1lcyBib3RoIHNvdXJjZVxcbiAgKiBhbmQgZGVzdGluYXRpb24gVk1BcyBhbHJlYWR5IGV4aXN0IGFuZCBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLlxcbmRpZmYgLS1naXQgYS9tbS9tZW1mZC5jIGIvbW0vbWVtZmQuY1xcbmluZGV4IGFiZTEzYjI5MWRkYzhiLi42YzcyZmU2Y2FlZjc1ZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1mZC5jXFxuKysrIGIvbW0vbWVtZmQuY1xcbkBAIC0xOSw2ICsxOSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1mZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGlkX25hbWVzcGFjZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjdWFwaS9saW51eC9tZW1mZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDc3ZDJkMTRlZGE0MjFlLi4wOTExYmRmZTAzZjA2YSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwLmhcXG4rKysgYi9tbS9zd2FwLmhcXG5AQCAtOCw4ICs4LDYgQEAgc3RydWN0IG1lbXBvbGljeTtcXG4gc3RydWN0IHN3YXBfaW9jYjtcXG4gc3RydWN0IHN3YXBfbWVtY2dfdGFibGU7XFxuIFxcbi1leHRlcm4gaW50IHBhZ2VfY2x1c3RlcjtcXG4tXFxuICNpZiBkZWZpbmVkKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMpXFxuICNkZWZpbmUgU1dBUF9DQUNIRV9QRk5fQklUUyAoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUyAtIFBBR0VfU0hJRlQpXFxuICNlbGlmIGRlZmluZWQoTUFYX1BIWVNNRU1fQklUUylcXG5AQCAtNzksNiArNzcsOCBAQCBlbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XFxuIH07XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NXQVBcXG4rdm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTtcXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2Fwb3BzLmhcXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFxcdTAwM2UgLyogZm9yIGJpb19lbmRfaW9fdCAqL1xcbiBcXG5AQCAtMzM2LDYgKzMzNiwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xcbiBzdHJ1Y3Qgc3dhcF9pb2NiO1xcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKnN3YXBfY2x1c3Rlcl9sb2NrKFxcbiBcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHBnb2ZmX3Qgb2Zmc2V0LCBib29sIGlycSlcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCA5YzNhNWNmOTk3Nzg2MC4uZDA2ZjhiYzQ2ZTc3NTIgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTIyLDEwICsyMiwxNSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdm1hbGxvYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHVnZV9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2htZW1fZnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2N0bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiaW50ZXJuYWwuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInN3YXAuaFxcXCJcXG4gXFxuKy8qIFN3YXAgcmVhZGFoZWFkIGNsdXN0ZXIgc2l6ZSwgYXMgYSBwb3dlciBvZiAyIHBhZ2VzLiAqL1xcbitzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjtcXG4rc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XFxuK1xcbiAvKlxcbiAgKiBzd2FwcGVyX3NwYWNlIGlzIGEgZmljdGlvbiwgcmV0YWluZWQgdG8gc2ltcGxpZnkgdGhlIHBhdGggdGhyb3VnaFxcbiAgKiB2bXNjYW4ncyBzaHJpbmtfZm9saW9fbGlzdC5cXG5AQCAtOTg3LDYgKzk5MiwzOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbiBcXHRyZXR1cm4gZm9saW87XFxuIH1cXG4gXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xcbitcXHR7XFxuK1xcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInBhZ2UtY2x1c3RlclxcXCIsXFxuK1xcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2cGFnZV9jbHVzdGVyLFxcbitcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2YoaW50KSxcXG4rXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuK1xcdFxcdC5wcm9jX2hhbmRsZXJcXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxcbitcXHRcXHQuZXh0cmExXFx0XFx0PSBTWVNDVExfWkVSTyxcXG4rXFx0XFx0LmV4dHJhMlxcdFxcdD0gKHZvaWQgKilcXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcXG4rXFx0fVxcbit9O1xcbitcXG4rLyoqXFxuKyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZ1xcbisgKi9cXG4rdm9pZCBfX2luaXQgc3dhcF9yZWFkYWhlYWRfc2V0dXAodm9pZClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcXG4rXFxuK1xcdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXFxuK1xcdGlmIChtZWdzIFxcdTAwM2MgMTYpXFxuK1xcdFxcdHBhZ2VfY2x1c3RlciA9IDI7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cGFnZV9jbHVzdGVyID0gMztcXG4rXFx0LypcXG4rXFx0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxcbitcXHQgKiBfcmVhbGx5XyBkb24ndCB3YW50IHRvIGNsdXN0ZXIgbXVjaCBtb3JlXFxuK1xcdCAqL1xcbitcXG4rXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19TWVNGU1xcbiBzdGF0aWMgc3NpemVfdCB2bWFfcmFfZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbiBcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjQ5YzY2MjlmYTg1YTE5IDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzY1NCw3ICs3NjU0LDcgQEAgc3RhdGljIGludCBfX2luaXQga3N3YXBkX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgbmlkO1xcbiBcXG4tXFx0c3dhcF9zZXR1cCgpO1xcbitcXHRzd2FwX3JlYWRhaGVhZF9zZXR1cCgpO1xcbiBcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpXFxuICBcXHRcXHRrc3dhcGRfcnVuKG5pZCk7XFxuIFxcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFxcXCJ2bVxcXCIsIHZtc2Nhbl9zeXNjdGxfdGFibGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMToxODowMS40MjM1NjY0NTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMjMyNzkxMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4Y2MyODhiYWQ4NDZmZTkyNjdmYzdiNmYxNDAxMDJjODZlMzRlYzY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMDE6MTc6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3RcbmluZGV4IGI5YjBjMjE4YmZiNDQwLi5jODRlYmM2MmEyMTgzZSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0XG5AQCAtMTksOSArMTksNiBAQCBUaGUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gdHVuZSB0aGUgb3BlcmF0aW9uXG4gb2YgdGhlIHZpcnR1YWwgbWVtb3J5IChWTSkgc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kXG4gdGhlIHdyaXRlb3V0IG9mIGRpcnR5IGRhdGEgdG8gZGlzay5cbiBcbi1EZWZhdWx0IHZhbHVlcyBhbmQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIG1vc3Qgb2YgdGhlc2Vcbi1maWxlcyBjYW4gYmUgZm91bmQgaW4gbW0vc3dhcC5jLlxuLVxuIEN1cnJlbnRseSwgdGhlc2UgZmlsZXMgYXJlIGluIC9wcm9jL3N5cy92bTpcbiBcbiAtIGFkbWluX3Jlc2VydmVfa2J5dGVzXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tbS1hcGkucnN0XG5pbmRleCBhYWJkZDNjYmE1OGU4MC4uZDZkMTg5YjlhOTk2MzYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21tLWFwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vY29yZS1hcGkvbW0tYXBpLnJzdFxuQEAgLTExNyw3ICsxMTcsNyBAQCBNb3JlIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9uc1xuIC4uICNrZXJuZWwtZG9jOjogbW0vaG1tLmMgKGJ1aWxkIHdhcm5pbmdzKVxuIC4uIGtlcm5lbC1kb2M6OiBtbS9tZW1yZW1hcC5jXG4gLi4ga2VybmVsLWRvYzo6IG1tL2h1Z2V0bGIuY1xuLS4uIGtlcm5lbC1kb2M6OiBtbS9zd2FwLmNcbisuLiBrZXJuZWwtZG9jOjogbW0vZm9saW9fbHJ1LmNcbiAuLiBrZXJuZWwtZG9jOjogbW0vbWVtY29udHJvbC5jXG4gLi4gI2tlcm5lbC1kb2M6OiBtbS9tZW1vcnktdGllcnMuYyAoYnVpbGQgd2FybmluZ3MpXG4gLi4ga2VybmVsLWRvYzo6IG1tL3NobWVtLmNcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCAxNTAxMWY1NzUyYTk5NC4uOTQzOWI3Y2U3MDkyMjQgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0xNzA4Nyw3ICsxNzA4Nyw3IEBAIEY6XHREb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3RcbiBGOlx0RG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0XG4gRjpcdGluY2x1ZGUvbGludXgvbW1faW5saW5lLmhcbiBGOlx0aW5jbHVkZS9saW51eC9tbXpvbmUuaFxuLUY6XHRtbS9zd2FwLmNcbitGOlx0bW0vZm9saW9fbHJ1LmNcbiBGOlx0bW0vdm1zY2FuLmNcbiBGOlx0bW0vd29ya2luZ3NldC5jXG4gXG5AQCAtMTcyMzcsNyArMTcyMzcsNiBAQCBGOlx0aW5jbHVkZS9saW51eC9zd2FwLmhcbiBGOlx0aW5jbHVkZS9saW51eC9zd2FwZmlsZS5oXG4gRjpcdGluY2x1ZGUvbGludXgvc3dhcG9wcy5oXG4gRjpcdG1tL3BhZ2VfaW8uY1xuLUY6XHRtbS9zd2FwLmNcbiBGOlx0bW0vc3dhcC5oXG4gRjpcdG1tL3N3YXBfdGFibGUuaFxuIEY6XHRtbS9zd2FwX3N0YXRlLmNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhMy4uNjI0ODI0NjRjNjcxMGMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0yOTMsMzkgKzI5MywxOSBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IHBhZ2Vfc3dhcF9lbnRyeShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiBcdHJldHVybiBlbnRyeTtcbiB9XG4gXG4tLyogbGludXgvbW0vd29ya2luZ3NldC5jICovXG4tYm9vbCB3b3JraW5nc2V0X3Rlc3RfcmVjZW50KHZvaWQgKnNoYWRvdywgYm9vbCBmaWxlLCBib29sICp3b3JraW5nc2V0LFxuLVx0XHRcdFx0Ym9vbCBmbHVzaCk7XG4tdm9pZCB3b3JraW5nc2V0X2FnZV9ub25yZXNpZGVudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuLXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4tdm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KTtcbi12b2lkIHdvcmtpbmdzZXRfYWN0aXZhdGlvbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1cbiAvKiBsaW51eC9tbS9wYWdlX2FsbG9jLmMgKi9cbiBleHRlcm4gdW5zaWduZWQgbG9uZyB0b3RhbHJlc2VydmVfcGFnZXM7XG4gXG4gLyogRGVmaW5pdGlvbiBvZiBnbG9iYWxfem9uZV9wYWdlX3N0YXRlIG5vdCBhdmFpbGFibGUgeWV0ICovXG4gI2RlZmluZSBucl9mcmVlX3BhZ2VzKCkgZ2xvYmFsX3pvbmVfcGFnZV9zdGF0ZShOUl9GUkVFX1BBR0VTKVxuIFxuKy8qIGxpbnV4L21tL2ZvbGlvX2xydS5jICovXG4rdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIGxydV9hZGRfZHJhaW5fYWxsKHZvaWQpO1xuIFxuLS8qIGxpbnV4L21tL3N3YXAuYyAqL1xuLXZvaWQgbHJ1X25vdGVfY29zdF91bmxvY2tfaXJxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgYm9vbCBmaWxlLFxuLVx0XHR1bnNpZ25lZCBpbnQgbnJfaW8sIHVuc2lnbmVkIGludCBucl9yb3RhdGVkKTtcbi12b2lkIGxydV9ub3RlX2Nvc3RfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKik7XG4tdm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqKTtcbi12b2lkIGZvbGlvX2FkZF9scnVfdm1hKHN0cnVjdCBmb2xpbyAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7XG4tdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKik7XG4tdm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqKTtcbi1cbi1zdGF0aWMgaW5saW5lIGJvb2wgZm9saW9fbWF5X2JlX2xydV9jYWNoZWQoc3RydWN0IGZvbGlvICpmb2xpbylcbi17XG4tXHQvKlxuLVx0ICogSG9sZGluZyBQTUQtc2l6ZWQgZm9saW9zIGluIHBlci1DUFUgTFJVIGNhY2hlIHVuYmFsYW5jZXMgYWNjb3VudGluZy5cbi1cdCAqIEhvbGRpbmcgc21hbGwgbnVtYmVycyBvZiBsb3ctb3JkZXIgbVRIUCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGVcbi1cdCAqIHdpbGwgYmUgc2Vuc2libGUsIGJ1dCBub2JvZHkgaGFzIGltcGxlbWVudGVkIGFuZCB0ZXN0ZWQgdGhhdCB5ZXQuXG4tXHQgKi9cbi1cdHJldHVybiAhZm9saW9fdGVzdF9sYXJnZShmb2xpbyk7XG4tfVxuKy8qIGxpbnV4L21tL2ZvbGlvLWNvbXBhdC5jICovXG4rdm9pZCBtYXJrX3BhZ2VfYWNjZXNzZWQoc3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuIGV4dGVybiBhdG9taWNfdCBscnVfZGlzYWJsZV9jb3VudDtcbiBcbkBAIC0zMzQsNDMgKzMxNCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBscnVfY2FjaGVfZGlzYWJsZWQodm9pZClcbiBcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZscnVfZGlzYWJsZV9jb3VudCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBscnVfY2FjaGVfZW5hYmxlKHZvaWQpXG4te1xuLVx0YXRvbWljX2RlYyhcdTAwMjZscnVfZGlzYWJsZV9jb3VudCk7XG4tfVxuLVxuLWV4dGVybiB2b2lkIGxydV9jYWNoZV9kaXNhYmxlKHZvaWQpO1xuLWV4dGVybiB2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7XG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9jcHUoaW50IGNwdSk7XG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9jcHVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tZXh0ZXJuIHZvaWQgbHJ1X2FkZF9kcmFpbl9hbGwodm9pZCk7XG4tdm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgZm9saW9fbWFya19sYXp5ZnJlZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi1leHRlcm4gdm9pZCBzd2FwX3NldHVwKHZvaWQpO1xuLVxuIC8qIGxpbnV4L21tL3Ztc2Nhbi5jICovXG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgem9uZV9yZWNsYWltYWJsZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4tZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuLVx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbWFzayk7XG4tdW5zaWduZWQgbG9uZyBscnV2ZWNfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0IGxydSwgaW50IHpvbmVfaWR4KTtcbi1cbi0jZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXHUwMDNjXHUwMDNjIDEpXG4tI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcdTAwM2NcdTAwM2MgMilcbi0jZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbi0jZGVmaW5lIE1BWF9TV0FQUElORVNTIDIwMFxuLVxuLS8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xuLSNkZWZpbmUgU1dBUFBJTkVTU19BTk9OX09OTFkgKE1BWF9TV0FQUElORVNTICsgMSlcbi1cbi1leHRlcm4gdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tXHRcdFx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzayxcbi1cdFx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnMsXG4tXHRcdFx0XHRcdFx0ICBpbnQgKnN3YXBwaW5lc3MpO1xuLWV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSxcbi1cdFx0XHRcdFx0XHRnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4tXHRcdFx0XHRcdFx0cGdfZGF0YV90ICpwZ2RhdCxcbi1cdFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICpucl9zY2FubmVkKTtcbiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBleHRlcm4gaW50IHZtX3N3YXBwaW5lc3M7XG4gbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XG5AQCAtMzkxLDExICszMzUsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19OVU1BICovXG4gXG4tI2lmZGVmIENPTkZJR19OVU1BXG4tZXh0ZXJuIGludCBzeXNjdGxfbWluX3VubWFwcGVkX3JhdGlvO1xuLWV4dGVybiBpbnQgc3lzY3RsX21pbl9zbGFiX3JhdGlvO1xuLSNlbmRpZlxuLVxuIHZvaWQgY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3Moc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpO1xuIFxuIGV4dGVybiB2b2lkIF9fbWVtaW5pdCBrc3dhcGRfcnVuKGludCBuaWQpO1xuQEAgLTU1Miw3ICs0OTEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFxuIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCk7XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSlcbitzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIHtcbiBcdHJldHVybiBSRUFEX09OQ0Uodm1fc3dhcHBpbmVzcyk7XG4gfVxuZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGVcbmluZGV4IGVmZjlmOWU3ZTA2MWMxLi41ZjcxMmY5YmJlNzM1OSAxMDA2NDRcbi0tLSBhL21tL01ha2VmaWxlXG4rKysgYi9tbS9NYWtlZmlsZVxuQEAgLTUwLDcgKzUwLDcgQEAgZW5kaWZcbiBcbiBvYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbiBcdFx0XHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxuLVx0XHRcdCAgIHJlYWRhaGVhZC5vIHN3YXAubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbitcdFx0XHQgICByZWFkYWhlYWQubyBmb2xpb19scnUubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcbiBcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4gXHRcdFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcbiBcdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuYyBiL21tL2ZvbGlvX2xydS5jXG5zaW1pbGFyaXR5IGluZGV4IDk2JVxucmVuYW1lIGZyb20gbW0vc3dhcC5jXG5yZW5hbWUgdG8gbW0vZm9saW9fbHJ1LmNcbmluZGV4IDU4OGY1MGQ4ZjFhOGM5Li40NjkyNGE3OTdlYWQ1ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuY1xuKysrIGIvbW0vZm9saW9fbHJ1LmNcbkBAIC0xLDE3ICsxLDEzIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuIC8qXG4tICogIGxpbnV4L21tL3N3YXAuY1xuKyAqICBsaW51eC9tbS9mb2xpb19scnUuY1xuICAqXG4gICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHNcbiAgKi9cbiBcbiAvKlxuLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBvcGVyYXRpb24gb2YgdGhlXG4tICogTGludXggVk0gc3Vic3lzdGVtLiBGaW5lLXR1bmluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpblxuLSAqIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC5cbi0gKiBTdGFydGVkIDE4LjEyLjkxXG4tICogU3dhcCBhZ2luZyBhZGRlZCAyMy4yLjk1LCBTdGVwaGVuIFR3ZWVkaWUuXG4tICogQnVmZmVybWVtIGxpbWl0cyBhZGRlZCAxMi4zLjk4LCBSaWsgdmFuIFJpZWwuXG4rICogRm9saW8gTFJVIGhlbHBlcnM6IGFkZC9yZW1vdmUgZm9saW9zIGZyb20gTFJVIGxpc3RzLCBiYXRjaGluZyxcbisgKiBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiwgYW5kIHBhZ2UgY2FjaGUgcmVsZWFzZSBwYXRocy5cbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG5AQCAtNDMsMTAgKzM5LDYgQEBcbiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvcGFnZW1hcC5oXHUwMDNlXG4gXG4tLyogSG93IG1hbnkgcGFnZXMgZG8gd2UgdHJ5IHRvIHN3YXAgb3IgcGFnZSBpbi9vdXQgdG9nZXRoZXI/IEFzIGEgcG93ZXIgb2YgMiAqL1xuLWludCBwYWdlX2NsdXN0ZXI7XG4tc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4tXG4gc3RydWN0IGNwdV9mYmF0Y2hlcyB7XG4gXHQvKlxuIFx0ICogVGhlIGZvbGxvd2luZyBmb2xpbyBiYXRjaGVzIGFyZSBncm91cGVkIHRvZ2V0aGVyIGJlY2F1c2UgdGhleSBhcmUgcHJvdGVjdGVkXG5AQCAtMTE3MSwzNSArMTE2MywzIEBAIHZvaWQgbHJ1X3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50XG4gXHRcdGxydXZlY19yZXBhcmVudF9scnUoY2hpbGRfbHJ1dmVjLCBwYXJlbnRfbHJ1dmVjLCBscnUsIG5pZCk7XG4gfVxuICNlbmRpZlxuLVxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfc3lzY3RsX3RhYmxlW10gPSB7XG4tXHR7XG4tXHRcdC5wcm9jbmFtZVx0PSBcInBhZ2UtY2x1c3RlclwiLFxuLVx0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3Rlcixcbi1cdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuLVx0XHQubW9kZVx0XHQ9IDA2NDQsXG4tXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4tXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbi1cdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcbi1cdH1cbi19O1xuLVxuLS8qXG4tICogUGVyZm9ybSBhbnkgc2V0dXAgZm9yIHRoZSBzd2FwIHN5c3RlbVxuLSAqL1xuLXZvaWQgX19pbml0IHN3YXBfc2V0dXAodm9pZClcbi17XG4tXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcbi1cbi1cdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXG4tXHRpZiAobWVncyBcdTAwM2MgMTYpXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDI7XG4tXHRlbHNlXG4tXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4tXHQvKlxuLVx0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxuLVx0ICogX3JlYWxseV8gZG9uJ3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZVxuLVx0ICovXG4tXG4tXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcInZtXCIsIHN3YXBfc3lzY3RsX3RhYmxlKTtcbi19XG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDE4MWU3OWYxZDZhMjA3Li4wYzJlZTQ3ZDg5MzY2NiAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC0yNCw2ICsyNCw3MyBAQFxuIFxuIHN0cnVjdCBmb2xpb19iYXRjaDtcbiBcbisvKiBtbS93b3JraW5nc2V0LmMgKi9cbitib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXG4rXHRcdFx0ICAgIGJvb2wgZmx1c2gpO1xuK3ZvaWQgd29ya2luZ3NldF9hZ2Vfbm9ucmVzaWRlbnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbit2b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTtcbit2b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpO1xuK3ZvaWQgd29ya2luZ3NldF9hY3RpdmF0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK1xuKy8qIG1tL2ZvbGlvX2xydS5jICovXG4rdm9pZCBscnVfbm90ZV9jb3N0X3VubG9ja19pcnEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBib29sIGZpbGUsXG4rXHRcdHVuc2lnbmVkIGludCBucl9pbywgdW5zaWduZWQgaW50IG5yX3JvdGF0ZWQpO1xuK3ZvaWQgbHJ1X25vdGVfY29zdF9yZWZhdWx0KHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK3ZvaWQgZm9saW9fYWRkX2xydV92bWEoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBmb2xpb19tYXlfYmVfbHJ1X2NhY2hlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdC8qXG4rXHQgKiBIb2xkaW5nIFBNRC1zaXplZCBmb2xpb3MgaW4gcGVyLUNQVSBMUlUgY2FjaGUgdW5iYWxhbmNlcyBhY2NvdW50aW5nLlxuK1x0ICogSG9sZGluZyBzbWFsbCBudW1iZXJzIG9mIGxvdy1vcmRlciBtVEhQIGZvbGlvcyBpbiBwZXItQ1BVIExSVSBjYWNoZVxuK1x0ICogd2lsbCBiZSBzZW5zaWJsZSwgYnV0IG5vYm9keSBoYXMgaW1wbGVtZW50ZWQgYW5kIHRlc3RlZCB0aGF0IHlldC5cbitcdCAqL1xuK1x0cmV0dXJuICFmb2xpb190ZXN0X2xhcmdlKGZvbGlvKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGxydV9jYWNoZV9lbmFibGUodm9pZClcbit7XG4rXHRhdG9taWNfZGVjKFx1MDAyNmxydV9kaXNhYmxlX2NvdW50KTtcbit9XG4rXG4rdm9pZCBscnVfY2FjaGVfZGlzYWJsZSh2b2lkKTtcbit2b2lkIGxydV9hZGRfZHJhaW4odm9pZCk7XG4rdm9pZCBscnVfYWRkX2RyYWluX2NwdShpbnQgY3B1KTtcbit2b2lkIGxydV9hZGRfZHJhaW5fY3B1X3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpO1xuK3ZvaWQgZm9saW9fZGVhY3RpdmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIGZvbGlvX21hcmtfbGF6eWZyZWUoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rXG4rLyogbW0vdm1zY2FuLmMgKi9cbit1bnNpZ25lZCBsb25nIHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuK3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLFxuK1x0XHRcdFx0Z2ZwX3QgZ2ZwX21hc2ssIG5vZGVtYXNrX3QgKm1hc2spO1xuK3Vuc2lnbmVkIGxvbmcgbHJ1dmVjX2xydV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgZW51bSBscnVfbGlzdCBscnUsXG4rXHRcdFx0ICAgICAgaW50IHpvbmVfaWR4KTtcbitcbisjZGVmaW5lIE1FTUNHX1JFQ0xBSU1fTUFZX1NXQVAgKDEgXHUwMDNjXHUwMDNjIDEpXG4rI2RlZmluZSBNRU1DR19SRUNMQUlNX1BST0FDVElWRSAoMSBcdTAwM2NcdTAwM2MgMilcbisjZGVmaW5lIE1JTl9TV0FQUElORVNTIDBcbisjZGVmaW5lIE1BWF9TV0FQUElORVNTIDIwMFxuK1xuKy8qIEp1c3QgcmVjbGFpbSBmcm9tIGFub24gZm9saW9zIGluIHByb2FjdGl2ZSBtZW1vcnkgcmVjbGFpbSAqL1xuKyNkZWZpbmUgU1dBUFBJTkVTU19BTk9OX09OTFkgKE1BWF9TV0FQUElORVNTICsgMSlcbitcbit1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuK1x0XHRcdFx0XHQgICBnZnBfdCBnZnBfbWFzayxcbitcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IHJlY2xhaW1fb3B0aW9ucyxcbitcdFx0XHRcdFx0ICAgaW50ICpzd2FwcGluZXNzKTtcbit1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICBnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXAsXG4rXHRcdFx0XHQgICAgIHBnX2RhdGFfdCAqcGdkYXQsXG4rXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKm5yX3NjYW5uZWQpO1xuK1xuKyNpZmRlZiBDT05GSUdfTlVNQVxuK2V4dGVybiBpbnQgc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbztcbitleHRlcm4gaW50IHN5c2N0bF9taW5fc2xhYl9yYXRpbztcbisjZW5kaWZcbitcbiAvKlxuICAqIE1haW50YWlucyBzdGF0ZSBhY3Jvc3MgYSBwYWdlIHRhYmxlIG1vdmUuIFRoZSBvcGVyYXRpb24gYXNzdW1lcyBib3RoIHNvdXJjZVxuICAqIGFuZCBkZXN0aW5hdGlvbiBWTUFzIGFscmVhZHkgZXhpc3QgYW5kIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtZmQuYyBiL21tL21lbWZkLmNcbmluZGV4IGFiZTEzYjI5MWRkYzhiLi42YzcyZmU2Y2FlZjc1ZCAxMDA2NDRcbi0tLSBhL21tL21lbWZkLmNcbisrKyBiL21tL21lbWZkLmNcbkBAIC0xOSw2ICsxOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpZF9uYW1lc3BhY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvbWVtZmQuaFx1MDAzZVxuKyNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJzd2FwLmhcIlxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxZS4uMDkxMWJkZmUwM2YwNmEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTgsOCArOCw2IEBAIHN0cnVjdCBtZW1wb2xpY3k7XG4gc3RydWN0IHN3YXBfaW9jYjtcbiBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZTtcbiBcbi1leHRlcm4gaW50IHBhZ2VfY2x1c3Rlcjtcbi1cbiAjaWYgZGVmaW5lZChNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTKVxuICNkZWZpbmUgU1dBUF9DQUNIRV9QRk5fQklUUyAoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUyAtIFBBR0VfU0hJRlQpXG4gI2VsaWYgZGVmaW5lZChNQVhfUEhZU01FTV9CSVRTKVxuQEAgLTc5LDYgKzc3LDggQEAgZW51bSBzd2FwX2NsdXN0ZXJfZmxhZ3Mge1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19TV0FQXG4rdm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKTtcbitcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2Fwb3BzLmhcdTAwM2UgLyogZm9yIHN3cF9vZmZzZXQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtfdHlwZXMuaFx1MDAzZSAvKiBmb3IgYmlvX2VuZF9pb190ICovXG4gXG5AQCAtMzM2LDYgKzMzNiwxMSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gI2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cbiBzdHJ1Y3Qgc3dhcF9pb2NiO1xuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKVxuK3tcbit9XG4rXG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKnN3YXBfY2x1c3Rlcl9sb2NrKFxuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCBwZ29mZl90IG9mZnNldCwgYm9vbCBpcnEpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xuaW5kZXggOWMzYTVjZjk5Nzc4NjAuLmQwNmY4YmM0NmU3NzUyIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0yMiwxMCArMjIsMTUgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG1lbV9mcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY3RsLmhcdTAwM2VcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuICNpbmNsdWRlIFwic3dhcF90YWJsZS5oXCJcbiAjaW5jbHVkZSBcInN3YXAuaFwiXG4gXG4rLyogU3dhcCByZWFkYWhlYWQgY2x1c3RlciBzaXplLCBhcyBhIHBvd2VyIG9mIDIgcGFnZXMuICovXG4rc3RhdGljIGludCBwYWdlX2NsdXN0ZXI7XG4rc3RhdGljIGNvbnN0IGludCBwYWdlX2NsdXN0ZXJfbWF4ID0gMzE7XG4rXG4gLypcbiAgKiBzd2FwcGVyX3NwYWNlIGlzIGEgZmljdGlvbiwgcmV0YWluZWQgdG8gc2ltcGxpZnkgdGhlIHBhdGggdGhyb3VnaFxuICAqIHZtc2NhbidzIHNocmlua19mb2xpb19saXN0LlxuQEAgLTk4Nyw2ICs5OTIsMzggQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7XG4rXHR7XG4rXHRcdC5wcm9jbmFtZVx0PSBcInBhZ2UtY2x1c3RlclwiLFxuK1x0XHQuZGF0YVx0XHQ9IFx1MDAyNnBhZ2VfY2x1c3RlcixcbitcdFx0Lm1heGxlblx0XHQ9IHNpemVvZihpbnQpLFxuK1x0XHQubW9kZVx0XHQ9IDA2NDQsXG4rXHRcdC5wcm9jX2hhbmRsZXJcdD0gcHJvY19kb2ludHZlY19taW5tYXgsXG4rXHRcdC5leHRyYTFcdFx0PSBTWVNDVExfWkVSTyxcbitcdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcbitcdH1cbit9O1xuK1xuKy8qKlxuKyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZ1xuKyAqL1xuK3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBtZWdzID0gUEFHRVNfVE9fTUIodG90YWxyYW1fcGFnZXMoKSk7XG4rXG4rXHQvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqL1xuK1x0aWYgKG1lZ3MgXHUwMDNjIDE2KVxuK1x0XHRwYWdlX2NsdXN0ZXIgPSAyO1xuK1x0ZWxzZVxuK1x0XHRwYWdlX2NsdXN0ZXIgPSAzO1xuK1x0LypcbitcdCAqIFJpZ2h0IG5vdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1lYW5zIHRoYXQgd2VcbitcdCAqIF9yZWFsbHlfIGRvbid0IHdhbnQgdG8gY2x1c3RlciBtdWNoIG1vcmVcbitcdCAqL1xuK1xuK1x0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXCJ2bVwiLCBzd2FwX3JlYWRhaGVhZF9zeXNjdGxfdGFibGUpO1xuK31cbitcbiAjaWZkZWYgQ09ORklHX1NZU0ZTXG4gc3RhdGljIHNzaXplX3Qgdm1hX3JhX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbiBcdFx0XHRcdCAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMzVjM2JiMTVhZTk2YTMuLjQ5YzY2MjlmYTg1YTE5IDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNzY1NCw3ICs3NjU0LDcgQEAgc3RhdGljIGludCBfX2luaXQga3N3YXBkX2luaXQodm9pZClcbiB7XG4gXHRpbnQgbmlkO1xuIFxuLVx0c3dhcF9zZXR1cCgpO1xuK1x0c3dhcF9yZWFkYWhlYWRfc2V0dXAoKTtcbiBcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbiAgXHRcdGtzd2FwZF9ydW4obmlkKTtcbiBcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwidm1cIiwgdm1zY2FuX3N5c2N0bF90YWJsZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwMToxODowMS40MjM1NjgwOTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzcxNDQzODIxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlZmFjdG9yaW5nIG9mIGBtbS9zd2FwLmNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCByZW5hbWVzIGBtbS9zd2FwLmNgIHRvIGBtbS9mb2xpb19scnUuY2AgYW5kIHNodWZmbGVzIHNvbWUgY29kZSBhcm91bmQuIExldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS5cblxuRmlyc3QsIHRoZSBmaWxlIGNoYW5nZXMgYXJlIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGRvY3VtZW50YXRpb24gdXBkYXRlcyAoYHZtLnJzdGAsIGBtbS1hcGkucnN0YCksIHRoZSBgTUFJTlRBSU5FUlNgIGZpbGUsIGFuZCBhIHJlbmFtZSBpbiBgTWFrZWZpbGVgLiBUaGUgbWFpbiBoZWFkZXIgaW5jbHVkZSB1cGRhdGVzIGluY2x1ZGUgbW92aW5nIGRlY2xhcmF0aW9ucyBmcm9tIGBzd2FwLmhgIHRvIGBtbS9pbnRlcm5hbC5oYCBhbmQgYWRkaW5nIGBzd2FwX3JlYWRhaGVhZF9zZXR1cCgpYCB0byBgbW0vc3dhcC5oYC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBtb3ZpbmcgdGhlIGBwYWdlX2NsdXN0ZXJgIHZhcmlhYmxlIGFuZCBgc3dhcF9zZXR1cCgpYCBmdW5jdGlvbiBmcm9tIGBtbS9zd2FwLmNgIHRvIGBtbS9zd2FwX3N0YXRlLmNgLiBJdCBsb29rcyBsaWtlIHRoZSByZW5hbWUgdG8gYGZvbGlvX2xydS5jYCBpcyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoZSBmaWxlICptb3N0bHkqIGNvbnRhaW5zIG5vdy4gYHN3YXBfc2V0dXAoKWAncyBmdW5jdGlvbmFsaXR5IGlzIG5vdyBpbiBgc3dhcF9yZWFkYWhlYWRfc2V0dXAoKWAuIEFuZCB0aGUgY2FsbHMgaGF2ZSBiZWVuIHVwZGF0ZWQgaW4gYHZtc2Nhbi5jYC4gU28gaXQncyBhIHJlZmFjdG9yaW5nLCBwbGFpbiBhbmQgc2ltcGxlLCB3aXRoIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcyBleHBlY3RlZC5cblxuQnV0LCBJIG5lZWQgdG8gYmUgKnN1cmUqIGFib3V0IHRoaXMuIExldCdzIGRpdmUgZGVlcGVyIGFuZCBjb21wYXJlIHRoZSByZWxldmFudCBjb2RlIGJsb2Nrcy4gSGVyZSdzIHdoYXQgd2FzIGluIHRoZSBvbGQgYG1tL3N3YXAuY2A6XG5cbmBgYGNcbi8qIEhvdyBtYW55IHBhZ2VzIGRvIHdlIHRyeSB0byBzd2FwIG9yIHBhZ2UgaW4vb3V0IHRvZ2V0aGVyPyBBcyBhIHBvd2VyIG9mIDIgKi9cbmludCBwYWdlX2NsdXN0ZXI7XG5zdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTtcbi4uLlxuc3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9zeXNjdGxfdGFibGVbXSA9IHtcblx0e1xuXHRcdC5wcm9jbmFtZVx0PSBcInBhZ2UtY2x1c3RlclwiLFxuXHRcdC5kYXRhXHRcdD0gXHUwMDI2cGFnZV9jbHVzdGVyLFxuXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcblx0XHQubW9kZVx0XHQ9IDA2NDQsXG5cdFx0LnByb2NfaGFuZGxlclx0PSBwcm9jX2RvaW50dmVjX21pbm1heCxcblx0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG5cdFx0LmV4dHJhMlx0XHQ9ICh2b2lkICopXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcblx0fVxufTtcblxuLypcbiAqIFBlcmZvcm0gYW55IHNldHVwIGZvciB0aGUgc3dhcCBzeXN0ZW1cbiAqL1xudm9pZCBfX2luaXQgc3dhcF9zZXR1cCh2b2lkKVxue1xuXHR1bnNpZ25lZCBsb25nIG1lZ3MgPSBQQUdFU19UT19NQih0b3RhbHJhbV9wYWdlcygpKTtcblxuXHQvKiBVc2UgYSBzbWFsbGVyIGNsdXN0ZXIgZm9yIHNtYWxsLW1lbW9yeSBtYWNoaW5lcyAqL1xuXHRpZiAobWVncyBcdTAwM2MgMTYpXG5cdFx0cGFnZV9jbHVzdGVyID0gMjtcblx0ZWxzZVxuXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG5cdC8qXG5cdCAqIFJpZ2h0IG5vdyBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIG1lYW5zIHRoYXQgd2Vcblx0ICogX3JlYWxseV8gZG9uJ3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZVxuXHQgKi9cblxuXHRyZWdpc3Rlcl9zeXNjdGxfaW5pdChcInZtXCIsIHN3YXBfc3lzY3RsX3RhYmxlKTtcbn1cbmBgYFxuXG5BbmQgaGVyZSdzIHRoZSBuZXcgYG1tL3N3YXBfc3RhdGUuY2A6XG5cbmBgYGNcbisvKiBTd2FwIHJlYWRhaGVhZCBjbHVzdGVyIHNpemUsIGFzIGEgcG93ZXIgb2YgMiBwYWdlcy4gKi9cbitzdGF0aWMgaW50IHBhZ2VfY2x1c3RlcjtcbitzdGF0aWMgY29uc3QgaW50IHBhZ2VfY2x1c3Rlcl9tYXggPSAzMTtcbi4uLlxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHN3YXBfcmVhZGFoZWFkX3N5c2N0bF90YWJsZVtdID0ge1xuK1x0e1xuK1x0XHQucHJvY25hbWVcdD0gXCJwYWdlLWNsdXN0ZXJcIixcbitcdFx0LmRhdGFcdFx0PSBcdTAwMjZwYWdlX2NsdXN0ZXIsXG4rXHRcdC5tYXhsZW5cdFx0PSBzaXplb2YoaW50KSxcbitcdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuK1x0XHQucHJvY19oYW5kbGVyXHQ9IHByb2NfZG9pbnR2ZWNfbWlubWF4LFxuK1x0XHQuZXh0cmExXHRcdD0gU1lTQ1RMX1pFUk8sXG4rXHRcdC5leHRyYTJcdFx0PSAodm9pZCAqKVx1MDAyNnBhZ2VfY2x1c3Rlcl9tYXgsXG4rXHR9XG4rfTtcblxuKy8qKlxuKyAqIHN3YXBfcmVhZGFoZWFkX3NldHVwIC0gZGVmYXVsdHMgYW5kIHN5c2N0bCBmb3Igc3dhcCBjYWNoZSByZWFkYWhlYWQgY2x1c3RlcmluZ1xuKyAqL1xuK3ZvaWQgX19pbml0IHN3YXBfcmVhZGFoZWFkX3NldHVwKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBtZWdzID0gUEFHRVNfVE9fTUIodG90YWxyYW1fcGFnZXMoKSk7XG5cbitcdC8qIFVzZSBhIHNtYWxsZXIgY2x1c3RlciBmb3Igc21hbGwtbWVtb3J5IG1hY2hpbmVzICovXG4rXHRpZiAobWVncyBcdTAwM2MgMTYpXG4rXHRcdHBhZ2VfY2x1c3RlciA9IDI7XG4rXHRlbHNlXG4rXHRcdHBhZ2VfY2x1c3RlciA9IDM7XG4rXHQvKlxuK1x0ICogUmlnaHQgbm93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gbWVhbnMgdGhhdCB3ZVxuK1x0ICogX3JlYWxseV8gZG9uJ3Qgd2FudCB0byBjbHVzdGVyIG11Y2ggbW9yZVxuK1x0ICovXG5cbitcdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwidm1cIiwgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlKTtcbit9XG5gYGBcblxuVGhleSdyZSBlc3NlbnRpYWxseSBpZGVudGljYWwhIFRoZSBvbmx5IGRpZmZlcmVuY2UgSSBzZWUgaXMgdGhhdCBgcGFnZV9jbHVzdGVyYCBpcyBub3cgYHN0YXRpYyBpbnRgIGluc3RlYWQgb2YganVzdCBgaW50YC4gQnV0LCBob2xkIG9uLi4uIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFuIGBpbnRgIGluIGBtbS9zd2FwLmNcblxuIiwiSW5wdXRUb2tlbnMiOjcyMzcsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6MTg6MTUuMTM4MDA4MDA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNjcxMzI4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9jbHVzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYy0zMC0vKiBTd2FwIHJlYWRhaGVhZCBjbHVzdGVyIHNpemUsIGFzIGEgcG93ZXIgb2YgMiBwYWdlcy4gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE6c3RhdGljIGludCBwYWdlX2NsdXN0ZXI7XFxubW0vc3dhcF9zdGF0ZS5jOjMyOnN0YXRpYyBjb25zdCBpbnQgcGFnZV9jbHVzdGVyX21heCA9IDMxO1xcbm1tL3N3YXBfc3RhdGUuYy0zMy1cXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz03Njg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc3dhcGluX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTc3My1cXG5tbS9zd2FwX3N0YXRlLmM6Nzc0OlxcdG1heF9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2MgUkVBRF9PTkNFKHBhZ2VfY2x1c3Rlcik7XFxubW0vc3dhcF9zdGF0ZS5jLTc3NS1cXHRpZiAobWF4X3BhZ2VzIFxcdTAwM2M9IDEpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzk4LSAqIFByaW1pdGl2ZSBzd2FwIHJlYWRhaGVhZCBjb2RlLiBXZSBzaW1wbHkgcmVhZCBhbiBhbGlnbmVkIGJsb2NrIG9mXFxubW0vc3dhcF9zdGF0ZS5jOjc5OTogKiAoMSBcXHUwMDNjXFx1MDAzYyBwYWdlX2NsdXN0ZXIpIGVudHJpZXMgaW4gdGhlIHN3YXAgYXJlYS4gVGhpcyBtZXRob2QgaXMgY2hvc2VuXFxubW0vc3dhcF9zdGF0ZS5jLTgwMC0gKiBiZWNhdXNlIGl0IGRvZXNuJ3QgY29zdCB1cyBhbnkgc2VlayB0aW1lLiAgV2UgYWxzbyBtYWtlIHN1cmUgdG8gcXVldWVcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz04MDc9c3RydWN0IGZvbGlvICpzd2FwX2NsdXN0ZXJfcmVhZGFoZWFkKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy04MjMtXFxubW0vc3dhcF9zdGF0ZS5jOjgyNDpcXHQvKiBSZWFkIGEgcGFnZV9jbHVzdGVyIHNpemVkIGFuZCBhbGlnbmVkIGNsdXN0ZXIgYXJvdW5kIG9mZnNldC4gKi9cXG5tbS9zd2FwX3N0YXRlLmMtODI1LVxcdHN0YXJ0X29mZnNldCA9IG9mZnNldCBcXHUwMDI2IH5tYXNrO1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTg1MD1zdGF0aWMgaW50IHN3YXBfdm1hX3JhX3dpbihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgdW5zaWduZWQgbG9uZyAqc3RhcnQsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtODU3LVxcbm1tL3N3YXBfc3RhdGUuYzo4NTg6XFx0bWF4X3dpbiA9IDEgXFx1MDAzY1xcdTAwM2MgbWluKFJFQURfT05DRShwYWdlX2NsdXN0ZXIpLCBTV0FQX1JBX09SREVSX0NFSUxJTkcpO1xcbm1tL3N3YXBfc3RhdGUuYy04NTktXFx0aWYgKG1heF93aW4gPT0gMSlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz05OTU9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgc3dhcF9yZWFkYWhlYWRfc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtOTk3LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInBhZ2UtY2x1c3RlclxcXCIsXFxubW0vc3dhcF9zdGF0ZS5jOjk5ODpcXHRcXHQuZGF0YVxcdFxcdD0gXFx1MDAyNnBhZ2VfY2x1c3RlcixcXG5tbS9zd2FwX3N0YXRlLmMtOTk5LVxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihpbnQpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTEwMDItXFx0XFx0LmV4dHJhMVxcdFxcdD0gU1lTQ1RMX1pFUk8sXFxubW0vc3dhcF9zdGF0ZS5jOjEwMDM6XFx0XFx0LmV4dHJhMlxcdFxcdD0gKHZvaWQgKilcXHUwMDI2cGFnZV9jbHVzdGVyX21heCxcXG5tbS9zd2FwX3N0YXRlLmMtMTAwNC1cXHR9XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MTAxMD12b2lkIF9faW5pdCBzd2FwX3JlYWRhaGVhZF9zZXR1cCh2b2lkKVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTEwMTUtXFx0aWYgKG1lZ3MgXFx1MDAzYyAxNilcXG5tbS9zd2FwX3N0YXRlLmM6MTAxNjpcXHRcXHRwYWdlX2NsdXN0ZXIgPSAyO1xcbm1tL3N3YXBfc3RhdGUuYy0xMDE3LVxcdGVsc2VcXG5tbS9zd2FwX3N0YXRlLmM6MTAxODpcXHRcXHRwYWdlX2NsdXN0ZXIgPSAzO1xcbm1tL3N3YXBfc3RhdGUuYy0xMDE5LVxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDAxOjE4OjE4LjIwNTE0ODIxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTExODU1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgT25seTogTm8gRnVuY3Rpb25hbCBJbXBhY3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBpdC4gVGhlIGBwYWdlX2NsdXN0ZXJgIHZhcmlhYmxlIGlzIGV4Y2x1c2l2ZWx5IHVzZWQgd2l0aGluIHRoZSBgbW0vc3dhcF9zdGF0ZS5jYCBmaWxlLiBUaGlzIG1lYW5zIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGZvciByZWZhY3RvcmluZyBwdXJwb3Nlcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb25hbGl0eSBvciBiZWhhdmlvciBvZiB0aGUgc3lzdGVtLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCB3b24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgb3IgdnVsbmVyYWJpbGl0aWVzIGZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQuIEl0J3MgYSBjbGVhbiByZWZhY3RvciwgYW5kIEkgY2FuIG1vdmUgZm9yd2FyZCBhY2NvcmRpbmdseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0ODMsIk91dHB1dFRva2VucyI6MTAzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDE6MTg6MjEuNjU2MzM2MTI2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHB1cmUgcmVmYWN0b3JpbmcgdGhhdCByZW5hbWVzIG1tL3N3YXAuYyB0byBtbS9mb2xpb19scnUuYywgbW92ZXMgc3dhcF9zZXR1cCgpIGFuZCBwYWdlX2NsdXN0ZXIgdG8gbW0vc3dhcF9zdGF0ZS5jLCBhbmQgcmVsb2NhdGVzIGRlY2xhcmF0aW9ucyBmcm9tIGluY2x1ZGUvbGludXgvc3dhcC5oIHRvIG1tL2ludGVybmFsLmguIFRoZXJlIGFyZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGV4ZWN1dGlvbiBmbG93LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaXMgYSBwdXJlIHJlZmFjdG9yaW5nIHRoYXQgcmVuYW1lcyBtbS9zd2FwLmMgdG8gbW0vZm9saW9fbHJ1LmMsIG1vdmVzIHN3YXBfc2V0dXAoKSBhbmQgcGFnZV9jbHVzdGVyIHRvIG1tL3N3YXBfc3RhdGUuYywgYW5kIHJlbG9jYXRlcyBkZWNsYXJhdGlvbnMgZnJvbSBpbmNsdWRlL2xpbnV4L3N3YXAuaCB0byBtbS9pbnRlcm5hbC5oLiBUaGVyZSBhcmUgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBleGVjdXRpb24gZmxvdy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflown8mrw[1] Phase: Running StartedAt: 2026-06-30 01:18:33 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflown8mrw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-30 01:18:33 +0000 UTC FinishedAt: 2026-06-30 01:18:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}