Name: series-workflowkqpn6 Phase: Failed StartedAt: 2026-08-26 23:10:28 +0000 UTC FinishedAt: 2026-08-26 23:12:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqpn6[0] Phase: Succeeded StartedAt: 2026-08-26 23:10:28 +0000 UTC FinishedAt: 2026-08-26 23:12:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqpn6[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 23:10:28 +0000 UTC FinishedAt: 2026-08-26 23:12:27 +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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdGVzdGluZyB0b29scyAoS1ZNIHNlbGZ0ZXN0cykgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMjBhNTljODEwY2U2YWZjNGM1Y2Q3ZTMxM2IxMjQyMDAzZDkyZjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjM6MTI6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXG5pbmRleCA2YmIzZDgyOTA2YjIyLi5iMGUzZmM4Y2Q3NmFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbkBAIC01OTcsMTggJiM0Mzs1OTcsMTYgQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCB0ZXN0X3BhcmFtcyAqcClcbiBcbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsXG4gXHRcdFx0XHQgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdID0gQ09ERV9BTkRfREFUQV9NRU1TTE9UO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9EQVRBXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcbi1cbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuLVx0XHRcdFx0ICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbi1cdFx0XHRcdCAgICBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdID0gUEFHRV9UQUJMRV9NRU1TTE9UO1xuLVxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsXG4tXHRcdFx0XHQgICAgZGF0YV9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxuLVx0XHRcdFx0ICAgIHAtXHUwMDNldGVzdF9kZXNjLVx1MDAzZWRhdGFfbWVtc2xvdF9mbGFncyk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIENPREVfQU5EX0RBVEFfTUVNU0xPVCk7XG4mIzQzO1xuJiM0MztcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuJiM0MztcdFx0XHRcdCBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNldGVzdF9kZXNjLVx1MDAzZXB0X21lbXNsb3RfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSxcbiYjNDM7XHRcdFx0XHQgVEVTVF9EQVRBX01FTVNMT1QsIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCA5YTY5YzQzOWEwZjhmLi5iNGM2NTFlYTM4NWQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0xNjQsOCAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3Qodm9pZClcbiBcbiBcdHBhZ2VzID0gc3ogLyB2bS1cdTAwM2VwYWdlX3NpemU7XG4gXHRncGFfYmFzZSA9ICgodm1fY29tcHV0ZV9tYXhfZ2ZuKHZtKSAmIzQzOyAxKSAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgLSBzejtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApO1xuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7XG4gfVxuIFxuICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPXHQweGEwXG5AQCAtMTkxLDI4ICYjNDM7MTkxLDI1IEBAIHN0YXRpYyB2b2lkIHNldHVwX3Rlc3RfZGF0YSh2b2lkKVxuIFx0Z3BhX3QgY21kcV9iYXNlO1xuIFxuIFx0dGVzdF9kYXRhLmRldmljZV90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHQgICAgZ3BhX2Jhc2UsXG4tXHRcdFx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuIFx0dGVzdF9kYXRhLmNvbGxlY3Rpb25fdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0XHRncGFfYmFzZSxcbi1cdFx0XHRcdFx0XHRcdFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0TUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbi1cdGNtZHFfYmFzZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywgZ3BhX2Jhc2UsXG4tXHRcdFx0XHQgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTtcbiYjNDM7XHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHR2aXJ0X21hcCh2bSwgY21kcV9iYXNlLCBjbWRxX2Jhc2UsIHBhZ2VzX3Blcl82NGspO1xuIFx0dGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2VfdmEgPSAodm9pZCAqKWNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5pdHRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfZGV2aWNlcyxcbi1cdFx0XHRcdFx0XHQgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHR0ZXN0X2RhdGEubHBpX3Byb3BfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRjb25maWd1cmVfbHBpcygpO1xuIFxuIFx0dGVzdF9kYXRhLmxwaV9wZW5kX3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2NwdXMsXG4tXHRcdFx0XHRcdFx0ICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB0ZXN0X2RhdGEpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggNWE3YTQ1NWI1Mzg3NS4uZmZkNGNmNzQwZDdmYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0zMyw2ICYjNDM7MzMsOCBAQFxuIFxuICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMXG4gXG4mIzQzOyNkZWZpbmUgS1ZNX0lOVkFMSURfTUVNU0xPVCBVSU5UX01BWFxuJiM0MztcbiBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24ge1xuIFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uO1xuIFx0c3RydWN0IHNwYXJzZWJpdCAqdW51c2VkX3BoeV9wYWdlcztcbkBAIC04MCwxMSAmIzQzOzgyLDQzIEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMge1xuIFx0REVDTEFSRV9IQVNIVEFCTEUoc2xvdF9oYXNoLCA5KTtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGVcbiYjNDM7ICogdmFyaW91cyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uLiAgTm90ZSwgdGhlXG4mIzQzOyAqIGRlc2NyaXB0aW9ucyBiZWxvdyBkZXNjcmliZWQgdGhlIHByaW1hcnkgdXNhZ2Ugb2YgZWFjaCB0eXBlLiAgSW5kaXZpZHVhbFxuJiM0MzsgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy5cbiYjNDM7ICpcbiYjNDM7ICogQnkgZGVmYXVsdCwgYWxsIHJlZ2lvbnMgYXJlIG1hcHBlZCB0byBtZW1zbG90ICYjMzk7MCYjMzk7LiAgVGVzdHMgY2FuIG92ZXJyaWRlIHRoZVxuJiM0MzsgKiBtZW1zbG90IGZvciBhbnkgb3IgYWxsIHR5cGVzLCBlLmcuIHNvIHRoYXQgYWxsIHRlc3QgZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhXG4mIzQzOyAqIGN1cmF0ZWQgbWVtc2xvdC5cbiYjNDM7ICovXG4gZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBDT0RFIHJlZ2lvbiBpcyB1c2VkIGJ5IGxpYi9lbGYgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0JiMzOTtzIGNvZGUgaW50b1xuJiM0MztcdCAqIGd1ZXN0IG1lbW9yeS5cbiYjNDM7XHQgKi9cbiBcdE1FTV9SRUdJT05fQ09ERSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBEQVRBIHJlZ2lvbiBpcyB1c2VkIHRvIGFsbG9jYXRlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBlLmcuIHZDUFVcbiYjNDM7XHQgKiBzdGFja3MsIFZNIGV4Y2VwdGlvbiB0YWJsZXMsIHg4NiYjMzk7cyBUU1MsIGV0Yy5cbiYjNDM7XHQgKi9cbiBcdE1FTV9SRUdJT05fREFUQSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlXG4mIzQzO1x0ICogdGFibGUgcGFnZXMuXG4mIzQzO1x0ICovXG4gXHRNRU1fUkVHSU9OX1BULFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFRFU1RfREFUQSByZWdpb24gaXMgdXNlZCBmb3IgYWxsb2NhdGluZyB0ZXN0IGRhdGEgdGhhdCBpcyBlaXRoZXJcbiYjNDM7XHQgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJiMzOTt0IGNvbnNpZGVyZWQgYSBcJiMzNDtjb3JlXCYjMzQ7IGRhdGEgc3RydWN0dXJlLlxuJiM0MztcdCAqL1xuIFx0TUVNX1JFR0lPTl9URVNUX0RBVEEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzXG4mIzQzO1x0ICogdG8gY3JlYXRlIGFuZCB1c2UgYSBvbmUtb2ZmIG1lbXNsb3QsIHdpdGhvdXQgaW1wYWN0aW5nIFwmIzM0O25vcm1hbFwmIzM0OyB0ZXN0XG4mIzQzO1x0ICogZGF0YSBhbGxvY2F0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEsXG4gXHROUl9NRU1fUkVHSU9OUyxcbiB9O1xuIFxuQEAgLTEyNywxMSAmIzQzOzE2MSw2IEBAIHN0cnVjdCBrdm1fdm0ge1xuIFxuIFx0c3RydWN0IGt2bV9iaW5hcnlfc3RhdHMgc3RhdHM7XG4gXG4tXHQvKlxuLVx0ICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZVxuLVx0ICogYWxsb2NhdG9ycywgZS5nLiwgbGliL2VsZiB1c2VzIHRoZSBtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdXG4tXHQgKiBtZW1zbG90LlxuLVx0ICovXG4gXHR1MzIgbWVtc2xvdHNbTlJfTUVNX1JFR0lPTlNdO1xuIH07XG4gXG5AQCAtMTY5LDEzICYjNDM7MTk4LDE0IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCk7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnZtX2dldF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiB7XG4tXHRhc3NlcnQodHlwZSBcdTAwM2MgTlJfTUVNX1JFR0lPTlMpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHR5cGUgXHUwMDNjIE5SX01FTV9SRUdJT05TLFxuJiM0MztcdFx0ICAgIFwmIzM0O0ludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICYjMzk7JXUmIzM5O1wmIzM0OywgdHlwZSk7XG4gXHRyZXR1cm4gbWVtc2xvdDJyZWdpb24odm0sIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbiB9XG4gXG4gLyogTWluaW11bSBhbGxvY2F0ZWQgZ3Vlc3QgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzICovXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fVkFERFJcdFx0MHgyMDAwXG4tI2RlZmluZSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFJcdDB4MTgwMDAwXG4mIzQzOyNkZWZpbmUgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSXHQweDIwMDAwMFxuIFxuICNkZWZpbmUgREVGQVVMVF9HVUVTVF9TVEFDS19WQUREUl9NSU5cdDB4YWI2MDAwXG4gI2RlZmluZSBERUZBVUxUX1NUQUNLX1BHU1x0XHQ1XG5AQCAtNzAyLDYgJiM0Mzs3MzIsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuIFx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG4gXHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG4gXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHUzMiBzbG90KVxuJiM0Mzt7XG4mIzQzO1x0VEVTVF9BU1NFUlQodm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbiYjNDM7XHRcdCAgICBcJiMzNDtNZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7IHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1XCYjMzQ7LFxuJiM0MztcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbiYjNDM7XG4mIzQzO1x0dm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0gPSBzbG90O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuJiM0MztcdFx0XHRcdFx0ICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc2xvdCk7XG4mIzQzO1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuJiM0MztcdFx0XHRcdFx0ICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0X192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuICNpZm5kZWYgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbkBAIC05OTAsMjMgJiM0MzsxMDUwLDQxIEBAIHZvaWQga3ZtX2dzaV9yb3V0aW5nX3dyaXRlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nICpyb3V0aW5nKTtcbiBcbiBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKTtcbiBcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpO1xuLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLCBncGFfdCBtaW5fZ3BhLFxuLVx0XHRcdCAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCk7XG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XG4mIzQzO2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7XG4mIzQzO1xuJiM0MztncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXG4mIzQzO1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTtcbiYjNDM7Z3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKTtcbiBcbi1zdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbi1cdFx0XHRcdCAgICAgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcbiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpXG4ge1xuIFx0LypcbiBcdCAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnRcbiBcdCAqIHByb3RlY3RlZCBtZW1vcnksIGFzIHRoZSBtYWpvcml0eSBvZiBtZW1vcnkgZm9yIHN1Y2ggVk1zIGlzXG4gXHQgKiBwcm90ZWN0ZWQsIGkuZS4gdXNpbmcgc2hhcmVkIG1lbW9yeSBpcyBlZmZlY3RpdmVseSBvcHQtaW4uXG4gXHQgKi9cbi1cdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnVtLCBtaW5fZ3BhLCBtZW1zbG90LFxuJiM0MztcdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIHR5cGUsXG4gXHRcdFx0XHQgICAgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeSh2bSkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIHR5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXMoc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBNRU1fUkVHSU9OX1BUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIDEpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogX19fX3ZtX2NyZWF0ZSgpIGRvZXMgS1ZNX0NSRUFURV9WTSBhbmQgbGl0dGxlIGVsc2UuICBfX3ZtX2NyZWF0ZSgpIGFsc29cbiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbmluZGV4IDJkMWFmYTA5ODE5YjAuLjE1ZmFhYTA2MDEyNjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuQEAgLTgsNyAmIzQzOzgsNyBAQFxuICNkZWZpbmUgU01SQU1fTUVNU0xPVFx0KCgxIFx1MDAzY1x1MDAzYyAxNikgfCAxKVxuICNkZWZpbmUgU01SQU1fUEFHRVNcdChTTVJBTV9TSVpFIC8gUEFHRV9TSVpFKVxuIFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcbiYjNDM7dm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXG4gXHRcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSk7XG4gXG4gdm9pZCBpbmplY3Rfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbmluZGV4IDAxMzI1YmY0ZDM2ZmMuLjJkY2FhMmM0YTAzODMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXG5AQCAtMTE1LDkgJiM0MzsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRpZiAodm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcbi1cdFx0XHRcdFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbiYjNDM7XHR2bS1cdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xuIFx0dm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCA5ZGRjMDQ3ZDVjMjc1Li41N2I2NTNmYmQwYjFmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNyw2ICYjNDM7MTcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hbGlnbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEtWTV9VVElMX01JTl9QRk5cdDJcbkBAIC0yODcsNiAmIzQzOzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pXG4gc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IGk7XG4gXG4gXHR2bSA9IGNhbGxvYygxLCBzaXplb2YoKnZtKSk7XG4gXHRURVNUX0FTU0VSVCh2bSAhPSBOVUxMLCBcJiMzNDtJbnN1ZmZpY2llbnQgTWVtb3J5XCYjMzQ7KTtcbkBAIC0yOTUsNiAmIzQzOzI5Nyw4IEBAIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxuIFx0dm0tXHUwMDNlcmVnaW9ucy5ncGFfdHJlZSA9IFJCX1JPT1Q7XG4gXHR2bS1cdTAwM2VyZWdpb25zLmh2YV90cmVlID0gUkJfUk9PVDtcbiBcdGhhc2hfaW5pdCh2bS1cdTAwM2VyZWdpb25zLnNsb3RfaGFzaCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UO1xuIFxuIFx0dm0tXHUwMDNlbW9kZSA9IHNoYXBlLm1vZGU7XG4gXHR2bS1cdTAwM2V0eXBlID0gc2hhcGUudHlwZTtcbkBAIC00OTEsNyAmIzQzOzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRcdFx0XHRcdCBucl9leHRyYV9wYWdlcyk7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4tXHRpbnQgaSwgZmxhZ3M7XG4mIzQzO1x0aW50IGZsYWdzO1xuIFxuIFx0a3ZtX3NldF9maWxlc19ybGltaXQobnJfcnVubmFibGVfdmNwdXMpO1xuIFxuQEAgLTUwOSw4ICYjNDM7NTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuIFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpJiM0MzsmIzQzOylcbi1cdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSAwO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIDApO1xuIFxuIFx0a3ZtX3ZtX2VsZl9sb2FkKHZtLCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSk7XG4gXG5AQCAtMTE4OSw2ICYjNDM7MTE5NSw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdClcbiB7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjtcbiBcbiYjNDM7XHRURVNUX0FTU0VSVChtZW1zbG90ICE9IEtWTV9JTlZBTElEX01FTVNMT1QsIFwmIzM0O3ZtLVx1MDAzZW1lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/XCYjMzQ7KTtcbiYjNDM7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHZtLVx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoLCByZWdpb24sIHNsb3Rfbm9kZSxcbiBcdFx0XHQgICAgICAgbWVtc2xvdClcbiBcdFx0aWYgKHJlZ2lvbi1cdTAwM2VyZWdpb24uc2xvdCA9PSBtZW1zbG90KVxuQEAgLTE0NjUsOSAmIzQzOzE0NzMsNyBAQCBzdGF0aWMgZ3ZhX3QgX19fX3ZtX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3Qgc3osIGd2YV90IG1pbl9ndmEsXG4gXHR1NjQgcGFnZXMgPSAoc3ogXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpICYjNDM7ICgoc3ogJSB2bS1cdTAwM2VwYWdlX3NpemUpICE9IDApO1xuIFxuIFx0dmlydF9wZ2RfYWxsb2Modm0pO1xuLVx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLFxuLVx0XHRcdFx0XHQgICBLVk1fVVRJTF9NSU5fUEZOICogdm0tXHUwMDNlcGFnZV9zaXplLFxuLVx0XHRcdFx0XHQgICB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTtcbiYjNDM7XHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsIHR5cGUsIHByb3RlY3RlZCk7XG4gXG4gXHQvKlxuIFx0ICogRmluZCBhbiB1bnVzZWQgcmFuZ2Ugb2YgdmlydHVhbCBwYWdlIGFkZHJlc3NlcyBvZiBhdCBsZWFzdFxuQEAgLTIwMjUsMzMgJiM0MzsyMDMxLDIxIEBAIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pXG4gfVxuIFxuIC8qXG4tICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvclxuLSAqXG4tICogSW5wdXQgQXJnczpcbi0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lXG4tICogICBudW0gLSBudW1iZXIgb2YgcGFnZXNcbi0gKiAgIG1pbl9ncGEgLSBQaHlzaWNhbCBhZGRyZXNzIG1pbmltdW1cbi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbVxuLSAqICAgcHJvdGVjdGVkIC0gVHJ1ZSBpZiB0aGUgcGFnZXMgd2lsbCBiZSB1c2VkIGFzIHByb3RlY3RlZC9wcml2YXRlIG1lbW9yeVxuJiM0MzsgKiBBbGxvY2F0ZSBjb250aWd1b3VzIChndWVzdCkgcGh5c2ljYWwgcGFnZXMgaW4gYSBnaXZlbiBtZW1vcnkgcmVnaW9uLCBhdCBvclxuJiM0MzsgKiB0aGUgbWluaW11bSBzcGVjaWZpYyBHUEEuICBJZiB0aGUgbWVtb3J5IGlzIHByb3RlY3RlZC9wcml2YXRlLCBhbHNvIGFkZCB0aGVcbiYjNDM7ICogYWxsb2NhdGUgcGFnZXMgdG8gdGhlIHJlZ2lvbiYjMzk7cyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaFxuJiM0MzsgKiBjb2RlIGtub3dzIHdoaWNoIHBhZ2VzIG5lZWQgdG8gYmUgZW5jcnlwdGVkIHdoZW4gbGF1bmNoaW5nIHRoZSBWTS5cbiAgKlxuLSAqIE91dHB1dCBBcmdzOiBOb25lXG4tICpcbi0gKiBSZXR1cm46XG4tICogICBTdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzXG4tICpcbi0gKiBXaXRoaW4gdGhlIFZNIHNwZWNpZmllZCBieSB2bSwgbG9jYXRlcyBhIHJhbmdlIG9mIGF2YWlsYWJsZSBwaHlzaWNhbFxuLSAqIHBhZ2VzIGF0IG9yIGFib3ZlIG1pbl9ncGEuIElmIGZvdW5kLCB0aGUgcGFnZXMgYXJlIG1hcmtlZCBhcyBpbiB1c2Vcbi0gKiBhbmQgdGhlaXIgYmFzZSBhZGRyZXNzIGlzIHJldHVybmVkLiBBIFRFU1RfQVNTRVJUIGZhaWx1cmUgb2NjdXJzIGlmXG4tICogbm90IGVub3VnaCBwYWdlcyBhcmUgYXZhaWxhYmxlIGF0IG9yIGFib3ZlIG1pbl9ncGEuXG4mIzQzOyAqIE5vdGUsIHN1Y2Nlc3MgaXMgZ3VhcmFudGVlZCFcbiAgKi9cbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbi1cdFx0XHQgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCxcbi1cdFx0XHQgICBib29sIHByb3RlY3RlZClcbiYjNDM7Z3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxuJiM0MztcdFx0XHQgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZClcbiB7XG4mIzQzO1x0c2l6ZV90IGFsaWdubWVudCA9IG5hdHVyYWxseV9hbGlnbmVkID8gbnJfcGFnZXMgOiAxO1xuIFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XG4gXHRzcGFyc2ViaXRfaWR4X3QgcGcsIGJhc2U7XG4gXG4tXHRURVNUX0FTU0VSVChudW0gXHUwMDNlIDAsIFwmIzM0O011c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcJiMzNDspO1xuJiM0MztcdFRFU1RfQVNTRVJUKG5yX3BhZ2VzLCBcJiMzNDtNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlXCYjMzQ7KTtcbiBcbiBcdFRFU1RfQVNTRVJUKChtaW5fZ3BhICUgdm0tXHUwMDNlcGFnZV9zaXplKSA9PSAwLCBcJiMzNDtNaW4gcGh5c2ljYWwgYWRkcmVzcyBcJiMzNDtcbiBcdFx0XCYjMzQ7bm90IGRpdmlzaWJsZSBieSBwYWdlIHNpemUuXFxuXCYjMzQ7XG5AQCAtMjA2Miw0MyAmIzQzOzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4gXHRURVNUX0FTU0VSVCghcHJvdGVjdGVkIHx8IHJlZ2lvbi1cdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLFxuIFx0XHQgICAgXCYjMzQ7UmVnaW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgcHJvdGVjdGVkIG1lbW9yeVwmIzM0Oyk7XG4gXG4tXHRiYXNlID0gcGcgPSBtaW5fZ3BhIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0O1xuLVx0ZG8ge1xuLVx0XHRmb3IgKDsgcGcgXHUwMDNjIGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHtcbi1cdFx0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuLVx0XHRcdFx0YmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4mIzQzO1x0YmFzZSA9IG1pbl9ncGEgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4mIzQzO2FnYWluOlxuJiM0MztcdGJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpO1xuJiM0MztcdGZvciAocGcgPSBiYXNlOyBwZyBcdTAwM2MgYmFzZSAmIzQzOyBucl9wYWdlczsgJiM0MzsmIzQzO3BnKSB7XG4mIzQzO1x0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuJiM0MztcdFx0XHRiYXNlID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4mIzQzO1x0XHRcdGlmICghYmFzZSlcbiYjNDM7XHRcdFx0XHRnb3RvIGVub21lbTtcbiYjNDM7XHRcdFx0Z290byBhZ2FpbjtcbiBcdFx0fVxuLVx0fSB3aGlsZSAocGcgXHUwMDI2XHUwMDI2IHBnICE9IGJhc2UgJiM0MzsgbnVtKTtcbi1cbi1cdGlmIChwZyA9PSAwKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtObyBndWVzdCBwaHlzaWNhbCBwYWdlIGF2YWlsYWJsZSwgXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7bWluX2dwYTogMHglbHggcGFnZV9zaXplOiAweCV4IG1lbXNsb3Q6ICV1XFxuXCYjMzQ7LFxuLVx0XHRcdG1pbl9ncGEsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XG4tXHRcdGZwdXRzKFwmIzM0Oy0tLS0gdm0gZHVtcCAtLS0tXFxuXCYjMzQ7LCBzdGRlcnIpO1xuLVx0XHR2bV9kdW1wKHN0ZGVyciwgdm0sIDIpO1xuLVx0XHRhYm9ydCgpO1xuIFx0fVxuIFxuLVx0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICYjNDM7IG51bTsgJiM0MzsmIzQzO3BnKSB7XG4mIzQzO1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7cGcpIHtcbiBcdFx0c3BhcnNlYml0X2NsZWFyKHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4gXHRcdGlmIChwcm90ZWN0ZWQpXG4gXHRcdFx0c3BhcnNlYml0X3NldChyZWdpb24tXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGJhc2UgKiB2bS1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1xuJiM0Mztlbm9tZW06XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRtaW5fZ3BhLCB2bS1cdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xuJiM0MztcdGZwdXRzKFwmIzM0Oy0tLS0gdm0gZHVtcCAtLS0tXFxuXCYjMzQ7LCBzdGRlcnIpO1xuJiM0MztcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4mIzQzO1x0YWJvcnQoKTtcbiYjNDM7XHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiB9XG4gXG4tZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuJiM0MztfX3dlYWsgYm9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIG1pbl9ncGEsIG1lbXNsb3QpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiYjNDM7Z3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbiYjNDM7XHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbiA9IHZtX2dldF9tZW1fcmVnaW9uKHZtLCB0eXBlKTtcbiYjNDM7XHRib29sIG5hdHVyYWxseV9hbGlnbmVkID0gZmFsc2U7XG4mIzQzO1x0Z3BhX3QgbWluX2dwYTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmVnaW9uLCBcJiMzNDtObyByZWdpb24gZm9yIHR5cGUgJiMzOTsldSYjMzk7LCBtZW1zbG90ICYjMzk7JXUmIzM5O1wmIzM0OyxcbiYjNDM7XHRcdCAgICB0eXBlLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9DT0RFOlxuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9EQVRBOlxuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0RBVEE6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIHJlZ2lvbiBpcyBiYWNrZWQgYnkgdGhlIGRlZmF1bHQgbWVtc2xvdCAoaWQ9MCksIHVzZVxuJiM0MztcdFx0ICogc2VsZnRlc3RzJiMzOTsgaGFyZGNvZGVkIG1pbmltdW0gUEZOLCBvdGhlcndpc2UgdXNlIHRoZSBiYXNlIG9mXG4mIzQzO1x0XHQgKiB0aGUgY3VzdG9tIG1lbW9yeSBzbG90IHRoYXQgYmFja3MgdGhlIHJlZ2lvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCF2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSlcbiYjNDM7XHRcdFx0bWluX2dwYSA9IEtWTV9VVElMX01JTl9QRk4gKiB2bS1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1pbl9ncGEgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9QVDpcbiYjNDM7XHRcdG1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7XG4mIzQzO1x0XHRuYXR1cmFsbHlfYWxpZ25lZCA9IGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1FTV9SRUdJT05fVEVTVF9FWFRSQTpcbiYjNDM7XHRcdG1pbl9ncGEgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRURVNUX0ZBSUwoXCYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7XCYjMzQ7LCB0eXBlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBtaW5fZ3BhLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSxcbiYjNDM7XHRcdFx0XHQgICAgICBwcm90ZWN0ZWQsIG5hdHVyYWxseV9hbGlnbmVkKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXG5pbmRleCA0N2JiZGUzZTIwNWEwLi5mY2Q0MWJjNmZiZGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt1Y2FsbF9jb21tb24uaFwmIzM0O1xuIFxuLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU5cdFx0MHgyMDAwMDBcbiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU5cdFx0MHgyMDAwMDBcbiBcbiBzdGF0aWMgZ3BhX3QgaW52YWxpZF9wZ3RhYmxlWzRdO1xuQEAgLTU3LDkgJiM0Mzs1Niw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGNoaWxkID0gdGFibGUgPSAwO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDtcbi1cdFx0dGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sXG4tXHRcdFx0XHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4tXHRcdFRFU1RfQVNTRVJUKHRhYmxlLCBcJiMzNDtGYWlsIHRvIGFsbG9jYXRlIHBhZ2UgdGFsZSBhdCBsZXZlbCAlZFxcblwmIzM0OywgaSk7XG4mIzQzO1x0XHR0YWJsZSA9IHZtX2FsbG9jX3BhZ2VfdGFibGUodm0pO1xuIFx0XHR2aXJ0X3NldF9wZ3RhYmxlKHZtLCB0YWJsZSwgY2hpbGQpO1xuIFx0XHRjaGlsZCA9IHRhYmxlO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTY5LDkgJiM0Mzs2OSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLFxuLVx0XHRcdFx0XHQgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbmluZGV4IGE5YWRiMzc4MmIzNTIuLjMzZjQ5ZDc0M2I1ZmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuQEAgLTIwLDkgJiM0MzsyMCw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTixcbi1cdFx0XHRcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbiYjNDM7XHRncGEgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBQQUdFU19QRVJfUkVHSU9OKTtcbiBcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIGdwYSksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cdTAwM2VwYWdlX3NpemUpO1xuIFxuIFx0dm0tXHUwMDNlbW11LnBnZCA9IGdwYTtcbkBAIC0zOCw4ICYjNDM7MzYsNyBAQCBzdGF0aWMgdTY0IHZpcnRfYWxsb2NfcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgcmkpXG4ge1xuIFx0dTY0IHRhZGRyO1xuIFxuLVx0dGFkZHIgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sICByaSBcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLCAwKTtcbiYjNDM7XHR0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpIFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEpO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbiBcdHJldHVybiAodGFkZHIgXHUwMDI2IFJFR0lPTl9FTlRSWV9PUklHSU4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTUyOSw3ICYjNDM7NTI5LDEwIEBAIHZvaWQgdGRwX2lkZW50aXR5X21hcF9kZWZhdWx0X21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFxuIFx0LyogT25seSBtZW1zbG90IDAgaXMgbWFwcGVkIGhlcmUsIGVuc3VyZSBpdCYjMzk7cyB0aGUgb25seSBvbmUgYmVpbmcgdXNlZCAqL1xuIFx0Zm9yIChzID0gMDsgcyBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IHMmIzQzOyYjNDM7KVxuLVx0XHRURVNUX0FTU0VSVF9FUSh2bS1cdTAwM2VtZW1zbG90c1tzXSwgMCk7XG4mIzQzO1x0XHRURVNUX0FTU0VSVCghdm0tXHUwMDNlbWVtc2xvdHNbc10gfHxcbiYjNDM7XHRcdFx0ICAgIHZtLVx1MDAzZW1lbXNsb3RzW3NdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtVbmhhbmRsZWQgbWVtc2xvdCAmIzM5OyV1JiMzOTsgZm9yIHR5cGUgJiMzOTsldSYjMzk7XCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10sIHMpO1xuIFxuIFx0aSA9IChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCkgLSAxO1xuIFx0bGFzdCA9IGkgJiM0MzsgKHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpO1xuQEAgLTE0NjUsMTMgJiM0MzsxNDY4LDEzIEBAIGJvb2wga3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcbiYjNDM7dm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXG4gXHRcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSlcbiB7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsXG4tXHRcdFx0XHQgICAgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMsIDApO1xuLVx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLFxuLVx0XHRcdFx0ICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSxcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAgICAgc21yYW1fZ3BhLCBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUyk7XG4mIzQzO1xuJiM0MztcdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSkgPT0gc21yYW1fZ3BhLFxuIFx0XHQgICAgXCYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgU01SQU1cJiMzNDspO1xuIFxuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgc21yYW1fZ3BhKSwgMHgwLCBTTVJBTV9TSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5pbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5AQCAtMzM5LDcgJiM0MzszMzksOCBAQCBzdGF0aWMgYm9vbCBwcmVwYXJlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhLCBpbnQgbnNsb3RzLCB1NjQgKm1heHNsb3RzLFxuIFx0XHRpZiAoc2xvdCA9PSBkYXRhLVx1MDAzZW5zbG90cylcbiBcdFx0XHRucGFnZXMgJiM0Mzs9IHJlbXBhZ2VzO1xuIFxuLVx0XHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cdTAwM2V2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90KTtcbiYjNDM7XHRcdGdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cdTAwM2V2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90LFxuJiM0MztcdFx0XHRcdFx0ICAgICBmYWxzZSwgZmFsc2UpO1xuIFx0XHRURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkcixcbiBcdFx0XHQgICAgXCYjMzQ7dm1fcGh5X3BhZ2VzX2FsbG9jKCkgZmFpbGVkXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5AQCAtMTAyLDI0ICYjNDM7MTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tYWluX21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLCAwLCBNQUlOX1BBR0VfQ09VTlQsIDApO1xuLVx0Lyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSxcbi1cdFx0XHRcdCAgICBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFx1MDAzY1x1MDAzYyB2bS1cdTAwM2VwYWdlX3NoaWZ0LFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9QQUdFX0NPVU5ULFxuLVx0XHRcdFx0ICAgIDBcbi1cdFx0XHRcdCAgICk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgICAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFx1MDAzY1x1MDAzYyB2bS1cdTAwM2VwYWdlX3NoaWZ0LFxuJiM0MztcdFx0XHQgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG5pbmRleCBmMzgzOTI4NGFjMDgxLi5jZDI2Y2MxYWVkODAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuQEAgLTM2LDcgJiM0MzszNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Qodm9pZClcbiBcdH07XG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuLVx0bWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApO1xuJiM0MztcdG1lbSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCwgZmFsc2UsIGZhbHNlKTtcbiBcbiBcdHJvdXRpbmcgPSBrdm1fZ3NpX3JvdXRpbmdfY3JlYXRlKCk7XG4gXHRyb3V0aW5nLVx1MDAzZW5yID0gMTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuaW5kZXggZGZmZTk2NTRmNDViZC4uYmZhNWFjOGNlMDI5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbkBAIC0xMTYsMTUgJiM0MzsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4mIzQzO1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpXG4gXHQgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS5cbiBcdCAqL1xuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTtcbiYjNDM7XHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2NcXG5cJiMzNDspO1xuIFxuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX0dQQSwgMik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG5AQCAtNjIsMTEgJiM0Mzs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0VEVTVF9BU1NFUlQocmMsIFwmIzM0O0tWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSBpcyB1bmF2YWlsYWJsZVwmIzM0Oyk7XG4gXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwgMCk7XG4mIzQzO1x0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4mIzQzO1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUpO1xuJiM0MztcbiBcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLFxuLVx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xuJiM0MztcdFx0XHRcdCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0VEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCBcJiMzNDtGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXCYjMzQ7KTtcbiBcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpO1xuIFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjIwYTU5YzgxMGNlNmFmYzRjNWNkN2UzMTNiMTI0MjAwM2Q5MmYyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjEyOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jCmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMKQEAgLTU5NywxOCAmIzQzOzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKQogCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwKIAkJCQkgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsCi0JCQkJICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKLQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsCi0JCQkJICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtkYXRhX21lbXNsb3RfZmxhZ3MpOwotCXZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLSZndDtzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLAomIzQzOwkJCQkgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLAomIzQzOwkJCQkgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgcC0mZ3Q7c3JjX3R5cGUsIGRhdGFfZ3BhLAomIzQzOwkJCQkgVEVTVF9EQVRBX01FTVNMT1QsIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKJiM0MzsJCQkJIHAtJmd0O3Rlc3RfZGVzYy0mZ3Q7ZGF0YV9tZW1zbG90X2ZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMKaW5kZXggOWE2OWM0MzlhMGY4Zi4uYjRjNjUxZWEzODVkOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYwpAQCAtMTY0LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpCiAKIAlwYWdlcyA9IHN6IC8gdm0tJmd0O3BhZ2Vfc2l6ZTsKIAlncGFfYmFzZSA9ICgodm1fY29tcHV0ZV9tYXhfZ2ZuKHZtKSAmIzQzOyAxKSAqIHZtLSZndDtwYWdlX3NpemUpIC0gc3o7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgZ3BhX2Jhc2UsCi0JCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLAomIzQzOwkJCSAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7CiB9CiAKICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPCTB4YTAKQEAgLTE5MSwyOCAmIzQzOzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZCkKIAlncGFfdCBjbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuZGV2aWNlX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLAotCQkJCQkJICAgIGdwYV9iYXNlLAotCQkJCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7CiYjNDM7CQkJCQkJICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAKIAl0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCQlncGFfYmFzZSwKLQkJCQkJCQlURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCQlNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCi0JY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSwKLQkJCQkgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTsKJiM0MzsJY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCXZpcnRfbWFwKHZtLCBjbWRxX2Jhc2UsIGNtZHFfYmFzZSwgcGFnZXNfcGVyXzY0ayk7CiAJdGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTsKIAl0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsCi0JCQkJCQkgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTsKIAogCXRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCSAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJY29uZmlndXJlX2xwaXMoKTsKIAogCXRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLAotCQkJCQkJICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHRlc3RfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaAppbmRleCA1YTdhNDU1YjUzODc1Li5mZmQ0Y2Y3NDBkN2ZhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTMzLDYgJiM0MzszMyw4IEBACiAKICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMCiAKJiM0MzsjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVgKJiM0MzsKIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiB7CiAJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uOwogCXN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7CkBAIC04MCwxMSAmIzQzOzgyLDQzIEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMgewogCURFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGUKJiM0MzsgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGUKJiM0MzsgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWwKJiM0MzsgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy4KJiM0MzsgKgomIzQzOyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAmIzM5OzAmIzM5Oy4gIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUKJiM0MzsgKiBtZW1zbG90IGZvciBhbnkgb3IgYWxsIHR5cGVzLCBlLmcuIHNvIHRoYXQgYWxsIHRlc3QgZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhCiYjNDM7ICogY3VyYXRlZCBtZW1zbG90LgomIzQzOyAqLwogZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHsKJiM0MzsJLyoKJiM0MzsJICogVGhlIENPREUgcmVnaW9uIGlzIHVzZWQgYnkgbGliL2VsZiB3aGVuIGxvYWRpbmcgdGhlIHRlc3QmIzM5O3MgY29kZSBpbnRvCiYjNDM7CSAqIGd1ZXN0IG1lbW9yeS4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9DT0RFLAomIzQzOwkvKgomIzQzOwkgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVCiYjNDM7CSAqIHN0YWNrcywgVk0gZXhjZXB0aW9uIHRhYmxlcywgeDg2JiMzOTtzIFRTUywgZXRjLgomIzQzOwkgKi8KIAlNRU1fUkVHSU9OX0RBVEEsCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlCiYjNDM7CSAqIHRhYmxlIHBhZ2VzLgomIzQzOwkgKi8KIAlNRU1fUkVHSU9OX1BULAomIzQzOwkvKgomIzQzOwkgKiBUaGUgVEVTVF9EQVRBIHJlZ2lvbiBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIHRlc3QgZGF0YSB0aGF0IGlzIGVpdGhlcgomIzQzOwkgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJiMzOTt0IGNvbnNpZGVyZWQgYSAmIzM0O2NvcmUmIzM0OyBkYXRhIHN0cnVjdHVyZS4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9URVNUX0RBVEEsCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBURVNUX0VYVFJBIHJlZ2lvbiBpcyBmb3Igc3BlY2lhbCBzbm93Zmxha2VzLCB3aGVyZSBhIHRlc3Qgd2FudHMKJiM0MzsJICogdG8gY3JlYXRlIGFuZCB1c2UgYSBvbmUtb2ZmIG1lbXNsb3QsIHdpdGhvdXQgaW1wYWN0aW5nICYjMzQ7bm9ybWFsJiMzNDsgdGVzdAomIzQzOwkgKiBkYXRhIGFsbG9jYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJTUVNX1JFR0lPTl9URVNUX0VYVFJBLAogCU5SX01FTV9SRUdJT05TLAogfTsKIApAQCAtMTI3LDExICYjNDM7MTYxLDYgQEAgc3RydWN0IGt2bV92bSB7CiAKIAlzdHJ1Y3Qga3ZtX2JpbmFyeV9zdGF0cyBzdGF0czsKIAotCS8qCi0JICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZQotCSAqIGFsbG9jYXRvcnMsIGUuZy4sIGxpYi9lbGYgdXNlcyB0aGUgbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXQotCSAqIG1lbXNsb3QuCi0JICovCiAJdTMyIG1lbXNsb3RzW05SX01FTV9SRUdJT05TXTsKIH07CiAKQEAgLTE2OSwxMyAmIzQzOzE5OCwxNCBAQCBtZW1zbG90MnJlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIG1lbXNsb3QpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnZtX2dldF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLAogCQkJCQkJCSAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpCiB7Ci0JYXNzZXJ0KHR5cGUgJmx0OyBOUl9NRU1fUkVHSU9OUyk7CiYjNDM7CVRFU1RfQVNTRVJUKHR5cGUgJmx0OyBOUl9NRU1fUkVHSU9OUywKJiM0MzsJCSAgICAmIzM0O0ludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICYjMzk7JXUmIzM5OyYjMzQ7LCB0eXBlKTsKIAlyZXR1cm4gbWVtc2xvdDJyZWdpb24odm0sIHZtLSZndDttZW1zbG90c1t0eXBlXSk7CiB9CiAKIC8qIE1pbmltdW0gYWxsb2NhdGVkIGd1ZXN0IHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3NlcyAqLwogI2RlZmluZSBLVk1fVVRJTF9NSU5fVkFERFIJCTB4MjAwMAotI2RlZmluZSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIJMHgxODAwMDAKJiM0MzsjZGVmaW5lIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUgkweDIwMDAwMAogCiAjZGVmaW5lIERFRkFVTFRfR1VFU1RfU1RBQ0tfVkFERFJfTUlOCTB4YWI2MDAwCiAjZGVmaW5lIERFRkFVTFRfU1RBQ0tfUEdTCQk1CkBAIC03MDIsNiAmIzQzOzczMiwzNiBAQCB2b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsCiAJCWdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncywKIAkJaW50IGd1ZXN0X21lbWZkX2ZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTsKIAomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJCSAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLAomIzQzOwkJCQkJICAgICAgdTMyIHNsb3QpCiYjNDM7ewomIzQzOwlURVNUX0FTU0VSVCh2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwKJiM0MzsJCSAgICAmIzM0O01lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTsgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXUmIzM0OywKJiM0MzsJCSAgICB0eXBlLCB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0pOwomIzQzOwomIzQzOwl2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0gPSBzbG90OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLAomIzQzOwkJCQkJICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLAomIzQzOwkJCQkJICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsCiYjNDM7CQkJCQkgICAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywKJiM0MzsJCQkJCSAgICB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc2xvdCk7CiYjNDM7CXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLAomIzQzOwkJCQkJICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwKJiM0MzsJCQkJCSAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcykKJiM0Mzt7CiYjNDM7CV9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCAwKTsKJiM0Mzt9CiYjNDM7CiAjaWZuZGVmIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkKIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKQogewpAQCAtOTkwLDIzICYjNDM7MTA1MCw0MSBAQCB2b2lkIGt2bV9nc2lfcm91dGluZ193cml0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZyAqcm91dGluZyk7CiAKIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pOwogCi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpOwotZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sIGdwYV90IG1pbl9ncGEsCi0JCQkgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQpOwotZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSk7CiYjNDM7Ym9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKTsKJiM0MzsKJiM0MztncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsCiYjNDM7CQkJICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpOwomIzQzO2dwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsCiYjNDM7CQkJICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKTsKIAotc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sCi0JCQkJICAgICAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KQomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsCiYjNDM7CQkJCSAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSkKIHsKIAkvKgogCSAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnQKIAkgKiBwcm90ZWN0ZWQgbWVtb3J5LCBhcyB0aGUgbWFqb3JpdHkgb2YgbWVtb3J5IGZvciBzdWNoIFZNcyBpcwogCSAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi4KIAkgKi8KLQlyZXR1cm4gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG51bSwgbWluX2dwYSwgbWVtc2xvdCwKJiM0MzsJcmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgdHlwZSwKIAkJCQkgICAgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeSh2bSkpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgTUVNX1JFR0lPTl9QVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCAxKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogX19fX3ZtX2NyZWF0ZSgpIGRvZXMgS1ZNX0NSRUFURV9WTSBhbmQgbGl0dGxlIGVsc2UuICBfX3ZtX2NyZWF0ZSgpIGFsc28KICAqIGxvYWRzIHRoZSB0ZXN0IGJpbmFyeSBpbnRvIGd1ZXN0IG1lbW9yeSBhbmQgY3JlYXRlcyBhbiBJUlEgY2hpcCAoeDg2IG9ubHkpLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oCmluZGV4IDJkMWFmYTA5ODE5YjAuLjE1ZmFhYTA2MDEyNjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmgKQEAgLTgsNyAmIzQzOzgsNyBAQAogI2RlZmluZSBTTVJBTV9NRU1TTE9UCSgoMSAmbHQ7Jmx0OyAxNikgfCAxKQogI2RlZmluZSBTTVJBTV9QQUdFUwkoU01SQU1fU0laRSAvIFBBR0VfU0laRSkKIAotdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLAomIzQzO3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLAogCQkgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpOwogCiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jCmluZGV4IDAxMzI1YmY0ZDM2ZmMuLjJkY2FhMmM0YTAzODMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYwpAQCAtMTE1LDkgJiM0MzsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJaWYgKHZtLSZndDttbXUucGdkX2NyZWF0ZWQpCiAJCXJldHVybjsKIAotCXZtLSZndDttbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywKLQkJCQkJIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwKLQkJCQkJIHZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7CiYjNDM7CXZtLSZndDttbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpOwogCXZtLSZndDttbXUucGdkX2NyZWF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKaW5kZXggOWRkYzA0N2Q1YzI3NS4uNTdiNjUzZmJkMGIxZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWxpZ24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKIAogI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOCTIKQEAgLTI4Nyw2ICYjNDM7Mjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSkKIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKQogewogCXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKIAogCXZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTsKIAlURVNUX0FTU0VSVCh2bSAhPSBOVUxMLCAmIzM0O0luc3VmZmljaWVudCBNZW1vcnkmIzM0Oyk7CkBAIC0yOTUsNiAmIzQzOzI5Nyw4IEBAIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKQogCXZtLSZndDtyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDsKIAl2bS0mZ3Q7cmVnaW9ucy5odmFfdHJlZSA9IFJCX1JPT1Q7CiAJaGFzaF9pbml0KHZtLSZndDtyZWdpb25zLnNsb3RfaGFzaCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspCiYjNDM7CQl2bS0mZ3Q7bWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UOwogCiAJdm0tJmd0O21vZGUgPSBzaGFwZS5tb2RlOwogCXZtLSZndDt0eXBlID0gc2hhcGUudHlwZTsKQEAgLTQ5MSw3ICYjNDM7NDk1LDcgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsCiAJCQkJCQkgbnJfZXh0cmFfcGFnZXMpOwogCXN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqc2xvdDA7CiAJc3RydWN0IGt2bV92bSAqdm07Ci0JaW50IGksIGZsYWdzOwomIzQzOwlpbnQgZmxhZ3M7CiAKIAlrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7CiAKQEAgLTUwOSw4ICYjNDM7NTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLAogCQlmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEOwogCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KQotCQl2bS0mZ3Q7bWVtc2xvdHNbaV0gPSAwOwomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApOwomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCAwKTsKIAogCWt2bV92bV9lbGZfbG9hZCh2bSwgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUpOwogCkBAIC0xMTg5LDYgJiM0MzsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KQogewogCXN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uOwogCiYjNDM7CVRFU1RfQVNTRVJUKG1lbXNsb3QgIT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwgJiMzNDt2bS0mZ3Q7bWVtc2xvdHNbXSB1bnBvcHVsYXRlZD8mIzM0Oyk7CiYjNDM7CiAJaGFzaF9mb3JfZWFjaF9wb3NzaWJsZSh2bS0mZ3Q7cmVnaW9ucy5zbG90X2hhc2gsIHJlZ2lvbiwgc2xvdF9ub2RlLAogCQkJICAgICAgIG1lbXNsb3QpCiAJCWlmIChyZWdpb24tJmd0O3JlZ2lvbi5zbG90ID09IG1lbXNsb3QpCkBAIC0xNDY1LDkgJiM0MzsxNDczLDcgQEAgc3RhdGljIGd2YV90IF9fX192bV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IHN6LCBndmFfdCBtaW5fZ3ZhLAogCXU2NCBwYWdlcyA9IChzeiAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdCkgJiM0MzsgKChzeiAlIHZtLSZndDtwYWdlX3NpemUpICE9IDApOwogCiAJdmlydF9wZ2RfYWxsb2Modm0pOwotCWdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywKLQkJCQkJICAgS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLSZndDtwYWdlX3NpemUsCi0JCQkJCSAgIHZtLSZndDttZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTsKJiM0MzsJZ3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLCB0eXBlLCBwcm90ZWN0ZWQpOwogCiAJLyoKIAkgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0CkBAIC0yMDI1LDMzICYjNDM7MjAzMSwyMSBAQCBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKQogfQogCiAvKgotICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvcgotICoKLSAqIElucHV0IEFyZ3M6Ci0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lCi0gKiAgIG51bSAtIG51bWJlciBvZiBwYWdlcwotICogICBtaW5fZ3BhIC0gUGh5c2ljYWwgYWRkcmVzcyBtaW5pbXVtCi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbQotICogICBwcm90ZWN0ZWQgLSBUcnVlIGlmIHRoZSBwYWdlcyB3aWxsIGJlIHVzZWQgYXMgcHJvdGVjdGVkL3ByaXZhdGUgbWVtb3J5CiYjNDM7ICogQWxsb2NhdGUgY29udGlndW91cyAoZ3Vlc3QpIHBoeXNpY2FsIHBhZ2VzIGluIGEgZ2l2ZW4gbWVtb3J5IHJlZ2lvbiwgYXQgb3IKJiM0MzsgKiB0aGUgbWluaW11bSBzcGVjaWZpYyBHUEEuICBJZiB0aGUgbWVtb3J5IGlzIHByb3RlY3RlZC9wcml2YXRlLCBhbHNvIGFkZCB0aGUKJiM0MzsgKiBhbGxvY2F0ZSBwYWdlcyB0byB0aGUgcmVnaW9uJiMzOTtzIHNldCBvZiBwcm90ZWN0ZWQgcGFnZXMsIGUuZy4gc28gdGhhdCBhcmNoCiYjNDM7ICogY29kZSBrbm93cyB3aGljaCBwYWdlcyBuZWVkIHRvIGJlIGVuY3J5cHRlZCB3aGVuIGxhdW5jaGluZyB0aGUgVk0uCiAgKgotICogT3V0cHV0IEFyZ3M6IE5vbmUKLSAqCi0gKiBSZXR1cm46Ci0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3MKLSAqCi0gKiBXaXRoaW4gdGhlIFZNIHNwZWNpZmllZCBieSB2bSwgbG9jYXRlcyBhIHJhbmdlIG9mIGF2YWlsYWJsZSBwaHlzaWNhbAotICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZQotICogYW5kIHRoZWlyIGJhc2UgYWRkcmVzcyBpcyByZXR1cm5lZC4gQSBURVNUX0FTU0VSVCBmYWlsdXJlIG9jY3VycyBpZgotICogbm90IGVub3VnaCBwYWdlcyBhcmUgYXZhaWxhYmxlIGF0IG9yIGFib3ZlIG1pbl9ncGEuCiYjNDM7ICogTm90ZSwgc3VjY2VzcyBpcyBndWFyYW50ZWVkIQogICovCi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSwKLQkJCSAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90LAotCQkJICAgYm9vbCBwcm90ZWN0ZWQpCiYjNDM7Z3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLAomIzQzOwkJCSAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKQogewomIzQzOwlzaXplX3QgYWxpZ25tZW50ID0gbmF0dXJhbGx5X2FsaWduZWQgPyBucl9wYWdlcyA6IDE7CiAJc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247CiAJc3BhcnNlYml0X2lkeF90IHBnLCBiYXNlOwogCi0JVEVTVF9BU1NFUlQobnVtICZndDsgMCwgJiMzNDtNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChucl9wYWdlcywgJiMzNDtNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlJiMzNDspOwogCiAJVEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS0mZ3Q7cGFnZV9zaXplKSA9PSAwLCAmIzM0O01pbiBwaHlzaWNhbCBhZGRyZXNzICYjMzQ7CiAJCSYjMzQ7bm90IGRpdmlzaWJsZSBieSBwYWdlIHNpemUuXG4mIzM0OwpAQCAtMjA2Miw0MyAmIzQzOzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sCiAJVEVTVF9BU1NFUlQoIXByb3RlY3RlZCB8fCByZWdpb24tJmd0O3Byb3RlY3RlZF9waHlfcGFnZXMsCiAJCSAgICAmIzM0O1JlZ2lvbiBkb2VzbiYjMzk7dCBzdXBwb3J0IHByb3RlY3RlZCBtZW1vcnkmIzM0Oyk7CiAKLQliYXNlID0gcGcgPSBtaW5fZ3BhICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0OwotCWRvIHsKLQkJZm9yICg7IHBnICZsdDsgYmFzZSAmIzQzOyBudW07ICYjNDM7JiM0MztwZykgewotCQkJaWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi0mZ3Q7dW51c2VkX3BoeV9wYWdlcywgcGcpKSB7Ci0JCQkJYmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi0mZ3Q7dW51c2VkX3BoeV9wYWdlcywgcGcpOwotCQkJCWJyZWFrOwotCQkJfQomIzQzOwliYXNlID0gbWluX2dwYSAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdDsKJiM0MzthZ2FpbjoKJiM0MzsJYmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7CiYjNDM7CWZvciAocGcgPSBiYXNlOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnJfcGFnZXM7ICYjNDM7JiM0MztwZykgewomIzQzOwkJaWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi0mZ3Q7dW51c2VkX3BoeV9wYWdlcywgcGcpKSB7CiYjNDM7CQkJYmFzZSA9IHNwYXJzZWJpdF9uZXh0X3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKTsKJiM0MzsJCQlpZiAoIWJhc2UpCiYjNDM7CQkJCWdvdG8gZW5vbWVtOwomIzQzOwkJCWdvdG8gYWdhaW47CiAJCX0KLQl9IHdoaWxlIChwZyAmYW1wOyZhbXA7IHBnICE9IGJhc2UgJiM0MzsgbnVtKTsKLQotCWlmIChwZyA9PSAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCAmIzM0OwotCQkJJiMzNDttaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcbiYjMzQ7LAotCQkJbWluX2dwYSwgdm0tJmd0O3BhZ2Vfc2l6ZSwgbWVtc2xvdCk7Ci0JCWZwdXRzKCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cbiYjMzQ7LCBzdGRlcnIpOwotCQl2bV9kdW1wKHN0ZGVyciwgdm0sIDIpOwotCQlhYm9ydCgpOwogCX0KIAotCWZvciAocGcgPSBiYXNlOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHsKJiM0MzsJZm9yIChwZyA9IGJhc2U7IHBnICZsdDsgYmFzZSAmIzQzOyBucl9wYWdlczsgJiM0MzsmIzQzO3BnKSB7CiAJCXNwYXJzZWJpdF9jbGVhcihyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKTsKIAkJaWYgKHByb3RlY3RlZCkKIAkJCXNwYXJzZWJpdF9zZXQocmVnaW9uLSZndDtwcm90ZWN0ZWRfcGh5X3BhZ2VzLCBwZyk7CiAJfQogCiAJcmV0dXJuIGJhc2UgKiB2bS0mZ3Q7cGFnZV9zaXplOwomIzQzOwomIzQzO2Vub21lbToKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7Tm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxuJiMzNDssCiYjNDM7CQltaW5fZ3BhLCB2bS0mZ3Q7cGFnZV9zaXplLCBtZW1zbG90KTsKJiM0MzsJZnB1dHMoJiMzNDstLS0tIHZtIGR1bXAgLS0tLVxuJiMzNDssIHN0ZGVycik7CiYjNDM7CXZtX2R1bXAoc3RkZXJyLCB2bSwgMik7CiYjNDM7CWFib3J0KCk7CiYjNDM7CV9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOwogfQogCi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpCiYjNDM7X193ZWFrIGJvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCkKIHsKLQlyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCBtaW5fZ3BhLCBtZW1zbG90KTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKQomIzQzO2dwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsCiYjNDM7CQkJICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKQogewotCXJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLAotCQkJCSB2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pOwomIzQzOwlzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbiA9IHZtX2dldF9tZW1fcmVnaW9uKHZtLCB0eXBlKTsKJiM0MzsJYm9vbCBuYXR1cmFsbHlfYWxpZ25lZCA9IGZhbHNlOwomIzQzOwlncGFfdCBtaW5fZ3BhOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChyZWdpb24sICYjMzQ7Tm8gcmVnaW9uIGZvciB0eXBlICYjMzk7JXUmIzM5OywgbWVtc2xvdCAmIzM5OyV1JiMzOTsmIzM0OywKJiM0MzsJCSAgICB0eXBlLCB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0pOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBNRU1fUkVHSU9OX0NPREU6CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9EQVRBOgomIzQzOwljYXNlIE1FTV9SRUdJT05fVEVTVF9EQVRBOgomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSByZWdpb24gaXMgYmFja2VkIGJ5IHRoZSBkZWZhdWx0IG1lbXNsb3QgKGlkPTApLCB1c2UKJiM0MzsJCSAqIHNlbGZ0ZXN0cyYjMzk7IGhhcmRjb2RlZCBtaW5pbXVtIFBGTiwgb3RoZXJ3aXNlIHVzZSB0aGUgYmFzZSBvZgomIzQzOwkJICogdGhlIGN1c3RvbSBtZW1vcnkgc2xvdCB0aGF0IGJhY2tzIHRoZSByZWdpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghdm0tJmd0O21lbXNsb3RzW3R5cGVdKQomIzQzOwkJCW1pbl9ncGEgPSBLVk1fVVRJTF9NSU5fUEZOICogdm0tJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltaW5fZ3BhID0gcmVnaW9uLSZndDtyZWdpb24uZ3Vlc3RfcGh5c19hZGRyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9QVDoKJiM0MzsJCW1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7CiYjNDM7CQluYXR1cmFsbHlfYWxpZ25lZCA9IGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNRU1fUkVHSU9OX1RFU1RfRVhUUkE6CiYjNDM7CQltaW5fZ3BhID0gcmVnaW9uLSZndDtyZWdpb24uZ3Vlc3RfcGh5c19hZGRyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlURVNUX0ZBSUwoJiMzNDtJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTsmIzM0OywgdHlwZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLSZndDttZW1zbG90c1t0eXBlXSwKJiM0MzsJCQkJICAgICAgcHJvdGVjdGVkLCBuYXR1cmFsbHlfYWxpZ25lZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jCmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jCkBAIC05LDcgJiM0Mzs5LDYgQEAKICNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1Y2FsbF9jb21tb24uaCYjMzQ7CiAKLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4JCTB4MjAwMDAwCiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU4JCTB4MjAwMDAwCiAKIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07CkBAIC01Nyw5ICYjNDM7NTYsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJY2hpbGQgPSB0YWJsZSA9IDA7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHZtLSZndDttbXUucGd0YWJsZV9sZXZlbHM7IGkmIzQzOyYjNDM7KSB7CiAJCWludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkOwotCQl0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTiwKLQkJCQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pOwotCQlURVNUX0FTU0VSVCh0YWJsZSwgJiMzNDtGYWlsIHRvIGFsbG9jYXRlIHBhZ2UgdGFsZSBhdCBsZXZlbCAlZFxuJiMzNDssIGkpOwomIzQzOwkJdGFibGUgPSB2bV9hbGxvY19wYWdlX3RhYmxlKHZtKTsKIAkJdmlydF9zZXRfcGd0YWJsZSh2bSwgdGFibGUsIGNoaWxkKTsKIAkJY2hpbGQgPSB0YWJsZTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwppbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKQEAgLTY5LDkgJiM0Mzs2OSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKIAlpZiAodm0tJmd0O21tdS5wZ2RfY3JlYXRlZCkKIAkJcmV0dXJuOwogCi0Jdm0tJmd0O21tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLAotCQkJCQkgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLAotCQkJCQkgdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKJiM0MzsJdm0tJmd0O21tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7CiAJdm0tJmd0O21tdS5wZ2RfY3JlYXRlZCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYwppbmRleCBhOWFkYjM3ODJiMzUyLi4zM2Y0OWQ3NDNiNWZkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jCkBAIC0yMCw5ICYjNDM7MjAsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJaWYgKHZtLSZndDttbXUucGdkX2NyZWF0ZWQpCiAJCXJldHVybjsKIAotCWdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTiwKLQkJCQkgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsCi0JCQkJICAgdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKJiM0MzsJZ3BhID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgUEFHRVNfUEVSX1JFR0lPTik7CiAJbWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLSZndDtwYWdlX3NpemUpOwogCiAJdm0tJmd0O21tdS5wZ2QgPSBncGE7CkBAIC0zOCw4ICYjNDM7MzYsNyBAQCBzdGF0aWMgdTY0IHZpcnRfYWxsb2NfcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgcmkpCiB7CiAJdTY0IHRhZGRyOwogCi0JdGFkZHIgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sICByaSAmbHQ7IDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSwKLQkJCQkgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsIDApOwomIzQzOwl0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpICZsdDsgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxKTsKIAltZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS0mZ3Q7cGFnZV9zaXplKTsKIAogCXJldHVybiAodGFkZHIgJmFtcDsgUkVHSU9OX0VOVFJZX09SSUdJTikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKQEAgLTUyOSw3ICYjNDM7NTI5LDEwIEBAIHZvaWQgdGRwX2lkZW50aXR5X21hcF9kZWZhdWx0X21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKQogCiAJLyogT25seSBtZW1zbG90IDAgaXMgbWFwcGVkIGhlcmUsIGVuc3VyZSBpdCYjMzk7cyB0aGUgb25seSBvbmUgYmVpbmcgdXNlZCAqLwogCWZvciAocyA9IDA7IHMgJmx0OyBOUl9NRU1fUkVHSU9OUzsgcyYjNDM7JiM0MzspCi0JCVRFU1RfQVNTRVJUX0VRKHZtLSZndDttZW1zbG90c1tzXSwgMCk7CiYjNDM7CQlURVNUX0FTU0VSVCghdm0tJmd0O21lbXNsb3RzW3NdIHx8CiYjNDM7CQkJICAgIHZtLSZndDttZW1zbG90c1tzXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULAomIzQzOwkJCSAgICAmIzM0O1VuaGFuZGxlZCBtZW1zbG90ICYjMzk7JXUmIzM5OyBmb3IgdHlwZSAmIzM5OyV1JiMzOTsmIzM0OywKJiM0MzsJCQkgICAgdm0tJmd0O21lbXNsb3RzW3NdLCBzKTsKIAogCWkgPSAocmVnaW9uLSZndDtyZWdpb24uZ3Vlc3RfcGh5c19hZGRyICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0KSAtIDE7CiAJbGFzdCA9IGkgJiM0MzsgKHJlZ2lvbi0mZ3Q7cmVnaW9uLm1lbW9yeV9zaXplICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0KTsKQEAgLTE0NjUsMTMgJiM0MzsxNDY4LDEzIEBAIGJvb2wga3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCi12b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzbXJhbV9ncGEsCiYjNDM7dm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsCiAJCSBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSkKIHsKLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsCi0JCQkJICAgIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTLCAwKTsKLQlURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBzbXJhbV9ncGEsCi0JCQkJICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSwKJiM0MzsJdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkgICAgICAgc21yYW1fZ3BhLCBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUyk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSkgPT0gc21yYW1fZ3BhLAogCQkgICAgJiMzNDtDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTSYjMzQ7KTsKIAogCW1lbXNldChhZGRyX2dwYTJodmEodm0sIHNtcmFtX2dwYSksIDB4MCwgU01SQU1fU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCmluZGV4IGUxMjk5NjExYmUzMjIuLjg0NGVhOWI3YmI0MWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCkBAIC0zMzksNyAmIzQzOzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsCiAJCWlmIChzbG90ID09IGRhdGEtJmd0O25zbG90cykKIAkJCW5wYWdlcyAmIzQzOz0gcmVtcGFnZXM7CiAKLQkJZ3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtJmd0O3ZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpOwomIzQzOwkJZ3BhID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLSZndDt2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90LAomIzQzOwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOwogCQlURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkciwKIAkJCSAgICAmIzM0O3ZtX3BoeV9wYWdlc19hbGxvYygpIGZhaWxlZCYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYwppbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYwpAQCAtMTAyLDI0ICYjNDM7MTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKQogCiBzdGF0aWMgdm9pZCBjcmVhdGVfbWFpbl9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKQogewotCWludCBpOwotCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgTUFJTl9QQUdFX0NPVU5ULCAwKTsKLQkvKiBzZXQgdGhlIGFycmF5IG9mIG1lbXNsb3RzIHRvIHplcm8gbGlrZSBfX3ZtX2NyZWF0ZSBkb2VzICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5SX01FTV9SRUdJT05TOyBpJiM0MzsmIzQzOykKLQkJdm0tJmd0O21lbXNsb3RzW2ldID0gMDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV90ZXN0X21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pCiB7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLAotCQkJCSAgICBWTV9NRU1fU1JDX0FOT05ZTU9VUywKLQkJCQkgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiAmbHQ7Jmx0OyB2bS0mZ3Q7cGFnZV9zaGlmdCwKLQkJCQkgICAgVEVTVF9EQVRBX01FTVNMT1QsCi0JCQkJICAgIFRFU1RfREFUQV9QQUdFX0NPVU5ULAotCQkJCSAgICAwCi0JCQkJICAgKTsKLQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7CiYjNDM7CXZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkgICAgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiAmbHQ7Jmx0OyB2bS0mZ3Q7cGFnZV9zaGlmdCwKJiM0MzsJCQkgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTsKIH0KIAogc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMKaW5kZXggZjM4MzkyODRhYzA4MS4uY2QyNmNjMWFlZDgwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jCkBAIC0zNiw3ICYjNDM7MzYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0KHZvaWQpCiAJfTsKIAogCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKLQltZW0gPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCk7CiYjNDM7CW1lbSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCwgZmFsc2UsIGZhbHNlKTsKIAogCXJvdXRpbmcgPSBrdm1fZ3NpX3JvdXRpbmdfY3JlYXRlKCk7CiAJcm91dGluZy0mZ3Q7bnIgPSAxOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMKaW5kZXggZGZmZTk2NTRmNDViZC4uYmZhNWFjOGNlMDI5NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jCkBAIC0xMTYsMTUgJiM0MzsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsCiAKIAl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpOwogCi0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsCi0JCQkJICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsCi0JCQkJICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCksIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCwKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCwKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIGFuZCBtYXAgdHdvIHBhZ2VzIHNvIHRoYXQgdGhlIEdQQSBhY2Nlc3NlZCBieSBndWVzdF9jb2RlKCkKIAkgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS4KIAkgKi8KLQlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpOwomIzQzOwlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJVEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCAmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2NcbiYjMzQ7KTsKIAogCXZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9HUEEsIDIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMKaW5kZXggM2RjYTg1ZTk1NDc4MS4uOGQxODIyNzE3YWJkYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jCkBAIC02MiwxMSAmIzQzOzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJVEVTVF9BU1NFUlQocmMsICYjMzQ7S1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlJiMzNDspOwogCXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSwgMSk7CiAKLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLAotCQkJCSAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULAotCQkJCSAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLAomIzQzOwkJCSAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULAomIzQzOwkJCSAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUpOwomIzQzOwogCWdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLAotCQkJCSBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTsKJiM0MzsJCQkJIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJVEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCAmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2MmIzM0Oyk7CiAJdmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1ZBLCBNRU1fUkVHSU9OX0dQQSwgMSk7CiAJaHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg5CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogOTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyAqZnVuY3Rpb25hbCogY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIEhhbmcgb24sIHRoYXQmIzM5O3MgdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkhIEkga25vdyB0aG9zZSBhcmUgKnBhcnQqIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRlY2huaWNhbGx5LCBidXQgdGhleSYjMzk7cmUgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIG5vdCBrZXJuZWwgY29kZS4gVGhleSBydW4gKm9uIHRvcCogb2YgdGhlIGtlcm5lbCB0byB2ZXJpZnkgaXRzIGJlaGF2aW9yLiAgQ2hhbmdlcyB0aGVyZSB3b24mIzM5O3QgZGlyZWN0bHkgYWx0ZXIga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLgoKTm93LCBsZXQmIzM5O3MgY29uc3VsdCB0aGUgcHJvdmlkZWQgZ3VpZGVsaW5lcy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IGxpc3Qgc2NlbmFyaW9zIHdoZXJlIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGNvdmVycyB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgbG9nZ2luZywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQuICBJdCBkb2VzbiYjMzk7dCAqZXhwbGljaXRseSogbWVudGlvbiBgdG9vbHMvYCwgYnV0IG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjaGFuZ2VzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgKGUuZy4sIHNlbGZ0ZXN0cywgcGVyZiwgYnBmKSBnZW5lcmFsbHkgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGl0c2VsZjsgdGhleSYjMzk7cmUgdXNlci1zcGFjZSB0b29scy4KCkxvb2tpbmcgYXQgdGhlIG9wcG9zaXRlIGNhc2UsIHRoZSBndWlkZWxpbmVzIHN0YXRlIHRoYXQgaWYgdGhlIHBhdGNoIG1vZGlmaWVzICpyZWFjaGFibGUqIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nICpvbmx5KiB3aXRoIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCwgdGhpcyBjb25kaXRpb24gaXNuJiMzOTt0IG1ldC4gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogbW9kaWZ5IGNvcmUga2VybmVsIGNvbXBvbmVudHMuIFRoZXJlZm9yZSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlIGxpc3QgZnJvbSB0aGUgcGF0Y2guICBBaCwgeWVzLCBpdCYjMzk7cyBleGNsdXNpdmVseSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2A6CgotIGBhcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY2AKLSBgYXJtNjQvdmdpY19scGlfc3RyZXNzLmNgCi0gYGluY2x1ZGUva3ZtX3V0aWwuaGAKLSBgaW5jbHVkZS94ODYvc21tLmhgCi0gYGxpYi9hcm02NC9wcm9jZXNzb3IuY2AKLSBgbGliL2t2bV91dGlsLmNgCi0gYGxpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNgCi0gYGxpYi9yaXNjdi9wcm9jZXNzb3IuY2AKLSBgbGliL3MzOTAvcHJvY2Vzc29yLmNgCi0gYGxpYi94ODYvcHJvY2Vzc29yLmNgCi0gYG1lbXNsb3RfcGVyZl90ZXN0LmNgCi0gYHMzOTAvY21tYV90ZXN0LmNgCi0gYHMzOTAvaXJxX3JvdXRpbmcuY2AKLSBgc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jYAotIGB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNgCgpZdXAsIGl0JiMzOTtzIGFsbCBzZWxmdGVzdHMuIFRoZXNlIGFyZSAqdXNlcnNwYWNlKiB0ZXN0IHByb2dyYW1zLCBub3Qga2VybmVsIGNvZGUuIFRoZXkgZG9uJiMzOTt0IHJ1biBpbnNpZGUgdGhlIGtlcm5lbC4gIFNvLCBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgb2YgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGFuZCB0aGUgZ3VpZGVsaW5lcywgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpJIHdpbGwgbm93IGNhbGwgc2V0LXJlc3VsdHMgd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzIChLVk0gc2VsZnRlc3RzKSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MDMuNzIxNTc1NDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzgyMTg0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzIChLVk0gc2VsZnRlc3RzKSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MDMuNzIxNTgyNDA3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQ1MTI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMjBhNTljODEwY2U2YWZjNGM1Y2Q3ZTMxM2IxMjQyMDAzZDkyZjIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjEyOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXFxuQEAgLTU5NywxOCArNTk3LDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3QgdGVzdF9wYXJhbXMgKnApXFxuIFxcbiBcXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLFxcbiBcXHRcXHRcXHRcXHQgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdID0gQ09ERV9BTkRfREFUQV9NRU1TTE9UO1xcbi1cXHR2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9EQVRBXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcXG4tXFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXRlc3RfZGVzYy1cXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSA9IFBBR0VfVEFCTEVfTUVNU0xPVDtcXG4tXFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLCBURVNUX0RBVEFfTUVNU0xPVCxcXG4tXFx0XFx0XFx0XFx0ICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXRlc3RfZGVzYy1cXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcXG4tXFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xcbitcXG4rXFx0X192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLVxcdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxcbitcXHRcXHRcXHRcXHQgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNldGVzdF9kZXNjLVxcdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcXG4rXFxuK1xcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXFx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSxcXG4rXFx0XFx0XFx0XFx0IFRFU1RfREFUQV9NRU1TTE9ULCBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXFxuK1xcdFxcdFxcdFxcdCBwLVxcdTAwM2V0ZXN0X2Rlc2MtXFx1MDAzZWRhdGFfbWVtc2xvdF9mbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNldHVwX3VjYWxsKHN0cnVjdCBrdm1fdm0gKnZtKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG5pbmRleCA5YTY5YzQzOWEwZjhmLi5iNGM2NTFlYTM4NWQ4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xcbkBAIC0xNjQsOCArMTY0LDggQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxcbiBcXG4gXFx0cGFnZXMgPSBzeiAvIHZtLVxcdTAwM2VwYWdlX3NpemU7XFxuIFxcdGdwYV9iYXNlID0gKCh2bV9jb21wdXRlX21heF9nZm4odm0pICsgMSkgKiB2bS1cXHUwMDNlcGFnZV9zaXplKSAtIHN6O1xcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBncGFfYmFzZSxcXG4tXFx0XFx0XFx0XFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApO1xcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMpO1xcbiB9XFxuIFxcbiAjZGVmaW5lIExQSV9QUk9QX0RFRkFVTFRfUFJJT1xcdDB4YTBcXG5AQCAtMTkxLDI4ICsxOTEsMjUgQEAgc3RhdGljIHZvaWQgc2V0dXBfdGVzdF9kYXRhKHZvaWQpXFxuIFxcdGdwYV90IGNtZHFfYmFzZTtcXG4gXFxuIFxcdHRlc3RfZGF0YS5kZXZpY2VfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBncGFfYmFzZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXG4gXFx0dGVzdF9kYXRhLmNvbGxlY3Rpb25fdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXG4tXFx0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdGNtZHFfYmFzZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFx0dmlydF9tYXAodm0sIGNtZHFfYmFzZSwgY21kcV9iYXNlLCBwYWdlc19wZXJfNjRrKTtcXG4gXFx0dGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTtcXG4gXFx0dGVzdF9kYXRhLmNtZHFfYmFzZV92YSA9ICh2b2lkICopY21kcV9iYXNlO1xcbiBcXG4gXFx0dGVzdF9kYXRhLml0dF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9kZXZpY2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbiBcXHR0ZXN0X2RhdGEubHBpX3Byb3BfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHRjb25maWd1cmVfbHBpcygpO1xcbiBcXG4gXFx0dGVzdF9kYXRhLmxwaV9wZW5kX3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2NwdXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdGVzdF9kYXRhKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbmluZGV4IDVhN2E0NTViNTM4NzUuLmZmZDRjZjc0MGQ3ZmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5AQCAtMzMsNiArMzMsOCBAQFxcbiBcXG4gI2RlZmluZSBOU0VDX1BFUl9TRUMgMTAwMDAwMDAwMExcXG4gXFxuKyNkZWZpbmUgS1ZNX0lOVkFMSURfTUVNU0xPVCBVSU5UX01BWFxcbitcXG4gc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uIHtcXG4gXFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uO1xcbiBcXHRzdHJ1Y3Qgc3BhcnNlYml0ICp1bnVzZWRfcGh5X3BhZ2VzO1xcbkBAIC04MCwxMSArODIsNDMgQEAgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9ucyB7XFxuIFxcdERFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7XFxuIH07XFxuIFxcbisvKlxcbisgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGVcXG4rICogdmFyaW91cyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uLiAgTm90ZSwgdGhlXFxuKyAqIGRlc2NyaXB0aW9ucyBiZWxvdyBkZXNjcmliZWQgdGhlIHByaW1hcnkgdXNhZ2Ugb2YgZWFjaCB0eXBlLiAgSW5kaXZpZHVhbFxcbisgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy5cXG4rICpcXG4rICogQnkgZGVmYXVsdCwgYWxsIHJlZ2lvbnMgYXJlIG1hcHBlZCB0byBtZW1zbG90ICcwJy4gIFRlc3RzIGNhbiBvdmVycmlkZSB0aGVcXG4rICogbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0IGRhdGEgaXMgYWxsb2NhdGVkIGZyb20gYVxcbisgKiBjdXJhdGVkIG1lbXNsb3QuXFxuKyAqL1xcbiBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUge1xcbitcXHQvKlxcbitcXHQgKiBUaGUgQ09ERSByZWdpb24gaXMgdXNlZCBieSBsaWIvZWxmIHdoZW4gbG9hZGluZyB0aGUgdGVzdCdzIGNvZGUgaW50b1xcbitcXHQgKiBndWVzdCBtZW1vcnkuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX0NPREUsXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBEQVRBIHJlZ2lvbiBpcyB1c2VkIHRvIGFsbG9jYXRlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBlLmcuIHZDUFVcXG4rXFx0ICogc3RhY2tzLCBWTSBleGNlcHRpb24gdGFibGVzLCB4ODYncyBUU1MsIGV0Yy5cXG4rXFx0ICovXFxuIFxcdE1FTV9SRUdJT05fREFUQSxcXG4rXFx0LypcXG4rXFx0ICogVGhlIFBUIHJlZ2lvbiwgYS5rLmEuIFBhZ2UgVGFibGUgcmVnaW9uLCBpcyB1c2VkIHRvIGFsbG9jYXRlIHBhZ2VcXG4rXFx0ICogdGFibGUgcGFnZXMuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX1BULFxcbitcXHQvKlxcbitcXHQgKiBUaGUgVEVTVF9EQVRBIHJlZ2lvbiBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIHRlc3QgZGF0YSB0aGF0IGlzIGVpdGhlclxcbitcXHQgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJ3QgY29uc2lkZXJlZCBhIFxcXCJjb3JlXFxcIiBkYXRhIHN0cnVjdHVyZS5cXG4rXFx0ICovXFxuIFxcdE1FTV9SRUdJT05fVEVTVF9EQVRBLFxcbitcXHQvKlxcbitcXHQgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzXFxuK1xcdCAqIHRvIGNyZWF0ZSBhbmQgdXNlIGEgb25lLW9mZiBtZW1zbG90LCB3aXRob3V0IGltcGFjdGluZyBcXFwibm9ybWFsXFxcIiB0ZXN0XFxuK1xcdCAqIGRhdGEgYWxsb2NhdGlvbnMuXFxuK1xcdCAqL1xcbitcXHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEsXFxuIFxcdE5SX01FTV9SRUdJT05TLFxcbiB9O1xcbiBcXG5AQCAtMTI3LDExICsxNjEsNiBAQCBzdHJ1Y3Qga3ZtX3ZtIHtcXG4gXFxuIFxcdHN0cnVjdCBrdm1fYmluYXJ5X3N0YXRzIHN0YXRzO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZVxcbi1cXHQgKiBhbGxvY2F0b3JzLCBlLmcuLCBsaWIvZWxmIHVzZXMgdGhlIG1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV1cXG4tXFx0ICogbWVtc2xvdC5cXG4tXFx0ICovXFxuIFxcdHUzMiBtZW1zbG90c1tOUl9NRU1fUkVHSU9OU107XFxuIH07XFxuIFxcbkBAIC0xNjksMTMgKzE5OCwxNCBAQCBtZW1zbG90MnJlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIG1lbXNsb3QpO1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpXFxuIHtcXG4tXFx0YXNzZXJ0KHR5cGUgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XFxuK1xcdFRFU1RfQVNTRVJUKHR5cGUgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUyxcXG4rXFx0XFx0ICAgIFxcXCJJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAnJXUnXFxcIiwgdHlwZSk7XFxuIFxcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcXG4gfVxcbiBcXG4gLyogTWluaW11bSBhbGxvY2F0ZWQgZ3Vlc3QgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzICovXFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1ZBRERSXFx0XFx0MHgyMDAwXFxuLSNkZWZpbmUgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSXFx0MHgxODAwMDBcXG4rI2RlZmluZSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFJcXHQweDIwMDAwMFxcbiBcXG4gI2RlZmluZSBERUZBVUxUX0dVRVNUX1NUQUNLX1ZBRERSX01JTlxcdDB4YWI2MDAwXFxuICNkZWZpbmUgREVGQVVMVF9TVEFDS19QR1NcXHRcXHQ1XFxuQEAgLTcwMiw2ICs3MzIsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbiBcXHRcXHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXFxuIFxcdFxcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XFxuIFxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIHNsb3QpXFxuK3tcXG4rXFx0VEVTVF9BU1NFUlQodm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXFxuK1xcdFxcdCAgICBcXFwiTWVtb3J5IHJlZ2lvbiB0eXBlICcldScgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXVcXFwiLFxcbitcXHRcXHQgICAgdHlwZSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcXG4rXFxuK1xcdHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSA9IHNsb3Q7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZsYWdzKVxcbit7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzbG90KTtcXG4rXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIGZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzKVxcbit7XFxuK1xcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCAwKTtcXG4rfVxcbitcXG4gI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKVxcbiB7XFxuQEAgLTk5MCwyMyArMTA1MCw0MSBAQCB2b2lkIGt2bV9nc2lfcm91dGluZ193cml0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZyAqcm91dGluZyk7XFxuIFxcbiBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKTtcXG4gXFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCk7XFxuLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLCBncGFfdCBtaW5fZ3BhLFxcbi1cXHRcXHRcXHQgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQpO1xcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKTtcXG4rYm9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKTtcXG4rXFxuK2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSxcXG4rXFx0XFx0XFx0ICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpO1xcbitncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxcbitcXHRcXHRcXHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpO1xcbiBcXG4tc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXFxuLVxcdFxcdFxcdFxcdCAgICAgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnRcXG4gXFx0ICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXNcXG4gXFx0ICogcHJvdGVjdGVkLCBpLmUuIHVzaW5nIHNoYXJlZCBtZW1vcnkgaXMgZWZmZWN0aXZlbHkgb3B0LWluLlxcbiBcXHQgKi9cXG4tXFx0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsXFxuK1xcdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHZtKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxcbit7XFxuK1xcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIHR5cGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXMoc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgTUVNX1JFR0lPTl9QVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4re1xcbitcXHRyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIF9fX192bV9jcmVhdGUoKSBkb2VzIEtWTV9DUkVBVEVfVk0gYW5kIGxpdHRsZSBlbHNlLiAgX192bV9jcmVhdGUoKSBhbHNvXFxuICAqIGxvYWRzIHRoZSB0ZXN0IGJpbmFyeSBpbnRvIGd1ZXN0IG1lbW9yeSBhbmQgY3JlYXRlcyBhbiBJUlEgY2hpcCAoeDg2IG9ubHkpLlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcXG5pbmRleCAyZDFhZmEwOTgxOWIwLi4xNWZhYWEwNjAxMjYyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxcbkBAIC04LDcgKzgsNyBAQFxcbiAjZGVmaW5lIFNNUkFNX01FTVNMT1RcXHQoKDEgXFx1MDAzY1xcdTAwM2MgMTYpIHwgMSlcXG4gI2RlZmluZSBTTVJBTV9QQUdFU1xcdChTTVJBTV9TSVpFIC8gUEFHRV9TSVpFKVxcbiBcXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxcbit2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcXG4gXFx0XFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTtcXG4gXFxuIHZvaWQgaW5qZWN0X3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xcbmluZGV4IDAxMzI1YmY0ZDM2ZmMuLjJkY2FhMmM0YTAzODMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcXG5AQCAtMTE1LDkgKzExNSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gXFx0aWYgKHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0XFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcXG4tXFx0XFx0XFx0XFx0XFx0IHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XFxuK1xcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xcbiBcXHR2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuaW5kZXggOWRkYzA0N2Q1YzI3NS4uNTdiNjUzZmJkMGIxZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWxpZ24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOXFx0MlxcbkBAIC0yODcsNiArMjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0dm0gPSBjYWxsb2MoMSwgc2l6ZW9mKCp2bSkpO1xcbiBcXHRURVNUX0FTU0VSVCh2bSAhPSBOVUxMLCBcXFwiSW5zdWZmaWNpZW50IE1lbW9yeVxcXCIpO1xcbkBAIC0yOTUsNiArMjk3LDggQEAgc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuIFxcdHZtLVxcdTAwM2VyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDtcXG4gXFx0dm0tXFx1MDAzZXJlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UO1xcbiBcXHRoYXNoX2luaXQodm0tXFx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXFxuK1xcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tpXSA9IEtWTV9JTlZBTElEX01FTVNMT1Q7XFxuIFxcbiBcXHR2bS1cXHUwMDNlbW9kZSA9IHNoYXBlLm1vZGU7XFxuIFxcdHZtLVxcdTAwM2V0eXBlID0gc2hhcGUudHlwZTtcXG5AQCAtNDkxLDcgKzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbnJfZXh0cmFfcGFnZXMpO1xcbiBcXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFx0aW50IGksIGZsYWdzO1xcbitcXHRpbnQgZmxhZ3M7XFxuIFxcbiBcXHRrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7XFxuIFxcbkBAIC01MDksOCArNTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbiBcXHRcXHRmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xcbiBcXG4gXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXFxuLVxcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tpXSA9IDA7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIDApO1xcbiBcXG4gXFx0a3ZtX3ZtX2VsZl9sb2FkKHZtLCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSk7XFxuIFxcbkBAIC0xMTg5LDYgKzExOTUsOCBAQCBtZW1zbG90MnJlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIG1lbXNsb3QpXFxuIHtcXG4gXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XFxuIFxcbitcXHRURVNUX0FTU0VSVChtZW1zbG90ICE9IEtWTV9JTlZBTElEX01FTVNMT1QsIFxcXCJ2bS1cXHUwMDNlbWVtc2xvdHNbXSB1bnBvcHVsYXRlZD9cXFwiKTtcXG4rXFxuIFxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tXFx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoLCByZWdpb24sIHNsb3Rfbm9kZSxcXG4gXFx0XFx0XFx0ICAgICAgIG1lbXNsb3QpXFxuIFxcdFxcdGlmIChyZWdpb24tXFx1MDAzZXJlZ2lvbi5zbG90ID09IG1lbXNsb3QpXFxuQEAgLTE0NjUsOSArMTQ3Myw3IEBAIHN0YXRpYyBndmFfdCBfX19fdm1fYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBzeiwgZ3ZhX3QgbWluX2d2YSxcXG4gXFx0dTY0IHBhZ2VzID0gKHN6IFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0KSArICgoc3ogJSB2bS1cXHUwMDNlcGFnZV9zaXplKSAhPSAwKTtcXG4gXFxuIFxcdHZpcnRfcGdkX2FsbG9jKHZtKTtcXG4tXFx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBLVk1fVVRJTF9NSU5fUEZOICogdm0tXFx1MDAzZXBhZ2Vfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdLCBwcm90ZWN0ZWQpO1xcbitcXHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsIHR5cGUsIHByb3RlY3RlZCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0XFxuQEAgLTIwMjUsMzMgKzIwMzEsMjEgQEAgY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbilcXG4gfVxcbiBcXG4gLypcXG4tICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvclxcbi0gKlxcbi0gKiBJbnB1dCBBcmdzOlxcbi0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lXFxuLSAqICAgbnVtIC0gbnVtYmVyIG9mIHBhZ2VzXFxuLSAqICAgbWluX2dwYSAtIFBoeXNpY2FsIGFkZHJlc3MgbWluaW11bVxcbi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbVxcbi0gKiAgIHByb3RlY3RlZCAtIFRydWUgaWYgdGhlIHBhZ2VzIHdpbGwgYmUgdXNlZCBhcyBwcm90ZWN0ZWQvcHJpdmF0ZSBtZW1vcnlcXG4rICogQWxsb2NhdGUgY29udGlndW91cyAoZ3Vlc3QpIHBoeXNpY2FsIHBhZ2VzIGluIGEgZ2l2ZW4gbWVtb3J5IHJlZ2lvbiwgYXQgb3JcXG4rICogdGhlIG1pbmltdW0gc3BlY2lmaWMgR1BBLiAgSWYgdGhlIG1lbW9yeSBpcyBwcm90ZWN0ZWQvcHJpdmF0ZSwgYWxzbyBhZGQgdGhlXFxuKyAqIGFsbG9jYXRlIHBhZ2VzIHRvIHRoZSByZWdpb24ncyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaFxcbisgKiBjb2RlIGtub3dzIHdoaWNoIHBhZ2VzIG5lZWQgdG8gYmUgZW5jcnlwdGVkIHdoZW4gbGF1bmNoaW5nIHRoZSBWTS5cXG4gICpcXG4tICogT3V0cHV0IEFyZ3M6IE5vbmVcXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3NcXG4tICpcXG4tICogV2l0aGluIHRoZSBWTSBzcGVjaWZpZWQgYnkgdm0sIGxvY2F0ZXMgYSByYW5nZSBvZiBhdmFpbGFibGUgcGh5c2ljYWxcXG4tICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZVxcbi0gKiBhbmQgdGhlaXIgYmFzZSBhZGRyZXNzIGlzIHJldHVybmVkLiBBIFRFU1RfQVNTRVJUIGZhaWx1cmUgb2NjdXJzIGlmXFxuLSAqIG5vdCBlbm91Z2ggcGFnZXMgYXJlIGF2YWlsYWJsZSBhdCBvciBhYm92ZSBtaW5fZ3BhLlxcbisgKiBOb3RlLCBzdWNjZXNzIGlzIGd1YXJhbnRlZWQhXFxuICAqL1xcbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcXG4tXFx0XFx0XFx0ICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QsXFxuLVxcdFxcdFxcdCAgIGJvb2wgcHJvdGVjdGVkKVxcbitncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXFxuK1xcdFxcdFxcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKVxcbiB7XFxuK1xcdHNpemVfdCBhbGlnbm1lbnQgPSBuYXR1cmFsbHlfYWxpZ25lZCA/IG5yX3BhZ2VzIDogMTtcXG4gXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XFxuIFxcdHNwYXJzZWJpdF9pZHhfdCBwZywgYmFzZTtcXG4gXFxuLVxcdFRFU1RfQVNTRVJUKG51bSBcXHUwMDNlIDAsIFxcXCJNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKG5yX3BhZ2VzLCBcXFwiTXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVxcXCIpO1xcbiBcXG4gXFx0VEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS1cXHUwMDNlcGFnZV9zaXplKSA9PSAwLCBcXFwiTWluIHBoeXNpY2FsIGFkZHJlc3MgXFxcIlxcbiBcXHRcXHRcXFwibm90IGRpdmlzaWJsZSBieSBwYWdlIHNpemUuXFxcXG5cXFwiXFxuQEAgLTIwNjIsNDMgKzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXFxuIFxcdFRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLVxcdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLFxcbiBcXHRcXHQgICAgXFxcIlJlZ2lvbiBkb2Vzbid0IHN1cHBvcnQgcHJvdGVjdGVkIG1lbW9yeVxcXCIpO1xcbiBcXG4tXFx0YmFzZSA9IHBnID0gbWluX2dwYSBcXHUwMDNlXFx1MDAzZSB2bS1cXHUwMDNlcGFnZV9zaGlmdDtcXG4tXFx0ZG8ge1xcbi1cXHRcXHRmb3IgKDsgcGcgXFx1MDAzYyBiYXNlICsgbnVtOyArK3BnKSB7XFxuLVxcdFxcdFxcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXFx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xcbi1cXHRcXHRcXHRcXHRiYXNlID0gcGcgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuK1xcdGJhc2UgPSBtaW5fZ3BhIFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbithZ2FpbjpcXG4rXFx0YmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7XFxuK1xcdGZvciAocGcgPSBiYXNlOyBwZyBcXHUwMDNjIGJhc2UgKyBucl9wYWdlczsgKytwZykge1xcbitcXHRcXHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZykpIHtcXG4rXFx0XFx0XFx0YmFzZSA9IHNwYXJzZWJpdF9uZXh0X3NldChyZWdpb24tXFx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcXG4rXFx0XFx0XFx0aWYgKCFiYXNlKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVub21lbTtcXG4rXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gXFx0XFx0fVxcbi1cXHR9IHdoaWxlIChwZyBcXHUwMDI2XFx1MDAyNiBwZyAhPSBiYXNlICsgbnVtKTtcXG4tXFxuLVxcdGlmIChwZyA9PSAwKSB7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIFxcXCJcXG4tXFx0XFx0XFx0XFxcIm1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0bWluX2dwYSwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XFxuLVxcdFxcdGZwdXRzKFxcXCItLS0tIHZtIGR1bXAgLS0tLVxcXFxuXFxcIiwgc3RkZXJyKTtcXG4tXFx0XFx0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcXG4tXFx0XFx0YWJvcnQoKTtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChwZyA9IGJhc2U7IHBnIFxcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xcbitcXHRmb3IgKHBnID0gYmFzZTsgcGcgXFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcXG4gXFx0XFx0c3BhcnNlYml0X2NsZWFyKHJlZ2lvbi1cXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpO1xcbiBcXHRcXHRpZiAocHJvdGVjdGVkKVxcbiBcXHRcXHRcXHRzcGFyc2ViaXRfc2V0KHJlZ2lvbi1cXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gYmFzZSAqIHZtLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcbitlbm9tZW06XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcXFxuXFxcIixcXG4rXFx0XFx0bWluX2dwYSwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XFxuK1xcdGZwdXRzKFxcXCItLS0tIHZtIGR1bXAgLS0tLVxcXFxuXFxcIiwgc3RkZXJyKTtcXG4rXFx0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcXG4rXFx0YWJvcnQoKTtcXG4rXFx0X19idWlsdGluX3VucmVhY2hhYmxlKCk7XFxuIH1cXG4gXFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcXG4rX193ZWFrIGJvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZClcXG4ge1xcbi1cXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCBtaW5fZ3BhLCBtZW1zbG90KTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxcbitncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxcbitcXHRcXHRcXHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpXFxuIHtcXG4tXFx0cmV0dXJuIHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXFxuLVxcdFxcdFxcdFxcdCB2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xcbitcXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbiA9IHZtX2dldF9tZW1fcmVnaW9uKHZtLCB0eXBlKTtcXG4rXFx0Ym9vbCBuYXR1cmFsbHlfYWxpZ25lZCA9IGZhbHNlO1xcbitcXHRncGFfdCBtaW5fZ3BhO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQocmVnaW9uLCBcXFwiTm8gcmVnaW9uIGZvciB0eXBlICcldScsIG1lbXNsb3QgJyV1J1xcXCIsXFxuK1xcdFxcdCAgICB0eXBlLCB2bS1cXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9DT0RFOlxcbitcXHRjYXNlIE1FTV9SRUdJT05fREFUQTpcXG4rXFx0Y2FzZSBNRU1fUkVHSU9OX1RFU1RfREFUQTpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIHJlZ2lvbiBpcyBiYWNrZWQgYnkgdGhlIGRlZmF1bHQgbWVtc2xvdCAoaWQ9MCksIHVzZVxcbitcXHRcXHQgKiBzZWxmdGVzdHMnIGhhcmRjb2RlZCBtaW5pbXVtIFBGTiwgb3RoZXJ3aXNlIHVzZSB0aGUgYmFzZSBvZlxcbitcXHRcXHQgKiB0aGUgY3VzdG9tIG1lbW9yeSBzbG90IHRoYXQgYmFja3MgdGhlIHJlZ2lvbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKVxcbitcXHRcXHRcXHRtaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWluX2dwYSA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9QVDpcXG4rXFx0XFx0bWluX2dwYSA9IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUjtcXG4rXFx0XFx0bmF0dXJhbGx5X2FsaWduZWQgPSBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcygpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNRU1fUkVHSU9OX1RFU1RfRVhUUkE6XFxuK1xcdFxcdG1pbl9ncGEgPSByZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRURVNUX0ZBSUwoXFxcIkludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICcldSdcXFwiLCB0eXBlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgbWluX2dwYSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdLFxcbitcXHRcXHRcXHRcXHQgICAgICBwcm90ZWN0ZWQsIG5hdHVyYWxseV9hbGlnbmVkKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xcbmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xcbkBAIC05LDcgKzksNiBAQFxcbiAjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1Y2FsbF9jb21tb24uaFxcXCJcXG4gXFxuLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU5cXHRcXHQweDIwMDAwMFxcbiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU5cXHRcXHQweDIwMDAwMFxcbiBcXG4gc3RhdGljIGdwYV90IGludmFsaWRfcGd0YWJsZVs0XTtcXG5AQCAtNTcsOSArNTYsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcdGNoaWxkID0gdGFibGUgPSAwO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgdm0tXFx1MDAzZW1tdS5wZ3RhYmxlX2xldmVsczsgaSsrKSB7XFxuIFxcdFxcdGludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkO1xcbi1cXHRcXHR0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTixcXG4tXFx0XFx0XFx0XFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4tXFx0XFx0VEVTVF9BU1NFUlQodGFibGUsIFxcXCJGYWlsIHRvIGFsbG9jYXRlIHBhZ2UgdGFsZSBhdCBsZXZlbCAlZFxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdHRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7XFxuIFxcdFxcdHZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7XFxuIFxcdFxcdGNoaWxkID0gdGFibGU7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuQEAgLTY5LDkgKzY5LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxcbiBcXHRpZiAodm0tXFx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0dm0tXFx1MDAzZW1tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHQgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxcbi1cXHRcXHRcXHRcXHRcXHQgdm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4rXFx0dm0tXFx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XFxuIFxcdHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcXG5pbmRleCBhOWFkYjM3ODJiMzUyLi4zM2Y0OWQ3NDNiNWZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xcbkBAIC0yMCw5ICsyMCw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gXFx0aWYgKHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTixcXG4tXFx0XFx0XFx0XFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxcbi1cXHRcXHRcXHRcXHQgICB2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xcbitcXHRncGEgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBQQUdFU19QRVJfUkVHSU9OKTtcXG4gXFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLVxcdTAwM2VwYWdlX3NpemUpO1xcbiBcXG4gXFx0dm0tXFx1MDAzZW1tdS5wZ2QgPSBncGE7XFxuQEAgLTM4LDggKzM2LDcgQEAgc3RhdGljIHU2NCB2aXJ0X2FsbG9jX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHJpKVxcbiB7XFxuIFxcdHU2NCB0YWRkcjtcXG4gXFxuLVxcdHRhZGRyID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAgcmkgXFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEsXFxuLVxcdFxcdFxcdFxcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwgMCk7XFxuK1xcdHRhZGRyID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgcmkgXFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEpO1xcbiBcXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cXHUwMDNlcGFnZV9zaXplKTtcXG4gXFxuIFxcdHJldHVybiAodGFkZHIgXFx1MDAyNiBSRUdJT05fRU5UUllfT1JJR0lOKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuQEAgLTUyOSw3ICs1MjksMTAgQEAgdm9pZCB0ZHBfaWRlbnRpdHlfbWFwX2RlZmF1bHRfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcbiBcXHQvKiBPbmx5IG1lbXNsb3QgMCBpcyBtYXBwZWQgaGVyZSwgZW5zdXJlIGl0J3MgdGhlIG9ubHkgb25lIGJlaW5nIHVzZWQgKi9cXG4gXFx0Zm9yIChzID0gMDsgcyBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBzKyspXFxuLVxcdFxcdFRFU1RfQVNTRVJUX0VRKHZtLVxcdTAwM2VtZW1zbG90c1tzXSwgMCk7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKCF2bS1cXHUwMDNlbWVtc2xvdHNbc10gfHxcXG4rXFx0XFx0XFx0ICAgIHZtLVxcdTAwM2VtZW1zbG90c1tzXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULFxcbitcXHRcXHRcXHQgICAgXFxcIlVuaGFuZGxlZCBtZW1zbG90ICcldScgZm9yIHR5cGUgJyV1J1xcXCIsXFxuK1xcdFxcdFxcdCAgICB2bS1cXHUwMDNlbWVtc2xvdHNbc10sIHMpO1xcbiBcXG4gXFx0aSA9IChyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHIgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQpIC0gMTtcXG4gXFx0bGFzdCA9IGkgKyAocmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQpO1xcbkBAIC0xNDY1LDEzICsxNDY4LDEzIEBAIGJvb2wga3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxcbit2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcXG4gXFx0XFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKVxcbiB7XFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIHNtcmFtX2dwYSxcXG4tXFx0XFx0XFx0XFx0ICAgIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgU01SQU1fTUVNU0xPVCkgPT0gc21yYW1fZ3BhLFxcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgc21yYW1fZ3BhLCBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUyk7XFxuK1xcbitcXHRURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpID09IHNtcmFtX2dwYSxcXG4gXFx0XFx0ICAgIFxcXCJDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTVxcXCIpO1xcbiBcXG4gXFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgc21yYW1fZ3BhKSwgMHgwLCBTTVJBTV9TSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xcbmluZGV4IGUxMjk5NjExYmUzMjIuLjg0NGVhOWI3YmI0MWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xcbkBAIC0zMzksNyArMzM5LDggQEAgc3RhdGljIGJvb2wgcHJlcGFyZV92bShzdHJ1Y3Qgdm1fZGF0YSAqZGF0YSwgaW50IG5zbG90cywgdTY0ICptYXhzbG90cyxcXG4gXFx0XFx0aWYgKHNsb3QgPT0gZGF0YS1cXHUwMDNlbnNsb3RzKVxcbiBcXHRcXHRcXHRucGFnZXMgKz0gcmVtcGFnZXM7XFxuIFxcbi1cXHRcXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCk7XFxuK1xcdFxcdGdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSwgZmFsc2UpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkcixcXG4gXFx0XFx0XFx0ICAgIFxcXCJ2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWRcXFwiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5pbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5AQCAtMTAyLDI0ICsxMDIsMTcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZGlydHlfdGVzdF9kYXRhKHZvaWQpXFxuIFxcbiBzdGF0aWMgdm9pZCBjcmVhdGVfbWFpbl9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgTUFJTl9QQUdFX0NPVU5ULCAwKTtcXG4tXFx0Lyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqL1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkrKylcXG4tXFx0XFx0dm0tXFx1MDAzZW1lbXNsb3RzW2ldID0gMDtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV90ZXN0X21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXFxuIHtcXG4tXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLFxcbi1cXHRcXHRcXHRcXHQgICAgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuLVxcdFxcdFxcdFxcdCAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFxcdTAwM2NcXHUwMDNjIHZtLVxcdTAwM2VwYWdlX3NoaWZ0LFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9EQVRBX01FTVNMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBURVNUX0RBVEFfUEFHRV9DT1VOVCxcXG4tXFx0XFx0XFx0XFx0ICAgIDBcXG4tXFx0XFx0XFx0XFx0ICAgKTtcXG4tXFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgICAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFxcdTAwM2NcXHUwMDNjIHZtLVxcdTAwM2VwYWdlX3NoaWZ0LFxcbitcXHRcXHRcXHQgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xcbmluZGV4IGYzODM5Mjg0YWMwODEuLmNkMjZjYzFhZWQ4MDMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcXG5AQCAtMzYsNyArMzYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0KHZvaWQpXFxuIFxcdH07XFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcXG4tXFx0bWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApO1xcbitcXHRtZW0gPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDAsIGZhbHNlLCBmYWxzZSk7XFxuIFxcbiBcXHRyb3V0aW5nID0ga3ZtX2dzaV9yb3V0aW5nX2NyZWF0ZSgpO1xcbiBcXHRyb3V0aW5nLVxcdTAwM2VuciA9IDE7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXFxuaW5kZXggZGZmZTk2NTRmNDViZC4uYmZhNWFjOGNlMDI5NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xcbkBAIC0xMTYsMTUgKzExNiwxNSBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCxcXG4gXFxuIFxcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XFxuIFxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcXG4tXFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTtcXG4rXFx0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXFxuK1xcdFxcdFxcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpXFxuIFxcdCAqIHN0YXlzIHZhbGlkIGFjcm9zcyB0aGUgbWVtc2xvdCBtb3ZlLlxcbiBcXHQgKi9cXG4tXFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTtcXG4rXFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFxcXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9HUEEsIDIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xcbmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcXG5AQCAtNjIsMTEgKzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdFRFU1RfQVNTRVJUKHJjLCBcXFwiS1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlXFxcIik7XFxuIFxcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSwgMSk7XFxuIFxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbi1cXHRcXHRcXHRcXHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcXG4tXFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwgMCk7XFxuK1xcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFKTtcXG4rXFxuIFxcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLFxcbi1cXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XFxuK1xcdFxcdFxcdFxcdCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFxcXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXFxcIik7XFxuIFxcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpO1xcbiBcXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MDQuMzE3MDQ1NzEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEzODI3MzQyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMjBhNTljODEwY2U2YWZjNGM1Y2Q3ZTMxM2IxMjQyMDAzZDkyZjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjM6MTI6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xuQEAgLTU5NywxOCArNTk3LDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3QgdGVzdF9wYXJhbXMgKnApXG4gXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLFxuIFx0XHRcdFx0ICAgIENPREVfQU5EX0RBVEFfTUVNU0xPVCwgY29kZV9ucGFnZXMsIDApO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XG4tXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcbi1cdFx0XHRcdCAgICBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4tXHRcdFx0XHQgICAgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSA9IFBBR0VfVEFCTEVfTUVNU0xPVDtcbi1cbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEsIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbi1cdFx0XHRcdCAgICBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuK1x0XHRcdFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbitcdFx0XHRcdCBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLFxuK1x0XHRcdFx0IFRFU1RfREFUQV9NRU1TTE9ULCBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4rXHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCA5YTY5YzQzOWEwZjhmLi5iNGM2NTFlYTM4NWQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0xNjQsOCArMTY0LDggQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxuIFxuIFx0cGFnZXMgPSBzeiAvIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbiBcdGdwYV9iYXNlID0gKCh2bV9jb21wdXRlX21heF9nZm4odm0pICsgMSkgKiB2bS1cdTAwM2VwYWdlX3NpemUpIC0gc3o7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBncGFfYmFzZSxcbi1cdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgsIHBhZ2VzLCAwKTtcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4rXHRcdFx0ICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgsIHBhZ2VzKTtcbiB9XG4gXG4gI2RlZmluZSBMUElfUFJPUF9ERUZBVUxUX1BSSU9cdDB4YTBcbkBAIC0xOTEsMjggKzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZClcbiBcdGdwYV90IGNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5kZXZpY2VfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgIGdwYV9iYXNlLFxuLVx0XHRcdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgpO1xuK1x0XHRcdFx0XHRcdCAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuIFx0dGVzdF9kYXRhLmNvbGxlY3Rpb25fdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0XHRncGFfYmFzZSxcbi1cdFx0XHRcdFx0XHRcdFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0XHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuLVx0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSxcbi1cdFx0XHRcdCAgICAgICBURVNUX01FTVNMT1RfSU5ERVgpO1xuK1x0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0dmlydF9tYXAodm0sIGNtZHFfYmFzZSwgY21kcV9iYXNlLCBwYWdlc19wZXJfNjRrKTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2UgPSBjbWRxX2Jhc2U7XG4gXHR0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7XG4gXG4gXHR0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsXG4tXHRcdFx0XHRcdFx0ICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHQgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHR0ZXN0X2RhdGEubHBpX3Byb3BfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0ICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdGNvbmZpZ3VyZV9scGlzKCk7XG4gXG4gXHR0ZXN0X2RhdGEubHBpX3BlbmRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfY3B1cyxcbi1cdFx0XHRcdFx0XHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdGVzdF9kYXRhKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbmluZGV4IDVhN2E0NTViNTM4NzUuLmZmZDRjZjc0MGQ3ZmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG5AQCAtMzMsNiArMzMsOCBAQFxuIFxuICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMXG4gXG4rI2RlZmluZSBLVk1fSU5WQUxJRF9NRU1TTE9UIFVJTlRfTUFYXG4rXG4gc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uIHtcbiBcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHJlZ2lvbjtcbiBcdHN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7XG5AQCAtODAsMTEgKzgyLDQzIEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMge1xuIFx0REVDTEFSRV9IQVNIVEFCTEUoc2xvdF9oYXNoLCA5KTtcbiB9O1xuIFxuKy8qXG4rICogTWVtb3J5IHJlZ2lvbiB0eXBlcyBhcmUgcGFzc2VkIHRvIHZhcmlvdXMgcGFnZSBhbGxvY2F0b3JzIHRvIGNvbW11bmljYXRlXG4rICogdmFyaW91cyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uLiAgTm90ZSwgdGhlXG4rICogZGVzY3JpcHRpb25zIGJlbG93IGRlc2NyaWJlZCB0aGUgcHJpbWFyeSB1c2FnZSBvZiBlYWNoIHR5cGUuICBJbmRpdmlkdWFsXG4rICogdGVzdHMgbWF5IGFsbG9jYXRlIG1lbW9yeSBmb3Igb3RoZXIgcHVycG9zZXMuXG4rICpcbisgKiBCeSBkZWZhdWx0LCBhbGwgcmVnaW9ucyBhcmUgbWFwcGVkIHRvIG1lbXNsb3QgJzAnLiAgVGVzdHMgY2FuIG92ZXJyaWRlIHRoZVxuKyAqIG1lbXNsb3QgZm9yIGFueSBvciBhbGwgdHlwZXMsIGUuZy4gc28gdGhhdCBhbGwgdGVzdCBkYXRhIGlzIGFsbG9jYXRlZCBmcm9tIGFcbisgKiBjdXJhdGVkIG1lbXNsb3QuXG4rICovXG4gZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHtcbitcdC8qXG4rXHQgKiBUaGUgQ09ERSByZWdpb24gaXMgdXNlZCBieSBsaWIvZWxmIHdoZW4gbG9hZGluZyB0aGUgdGVzdCdzIGNvZGUgaW50b1xuK1x0ICogZ3Vlc3QgbWVtb3J5LlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX0NPREUsXG4rXHQvKlxuK1x0ICogVGhlIERBVEEgcmVnaW9uIGlzIHVzZWQgdG8gYWxsb2NhdGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGUuZy4gdkNQVVxuK1x0ICogc3RhY2tzLCBWTSBleGNlcHRpb24gdGFibGVzLCB4ODYncyBUU1MsIGV0Yy5cbitcdCAqL1xuIFx0TUVNX1JFR0lPTl9EQVRBLFxuK1x0LypcbitcdCAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlXG4rXHQgKiB0YWJsZSBwYWdlcy5cbitcdCAqL1xuIFx0TUVNX1JFR0lPTl9QVCxcbitcdC8qXG4rXHQgKiBUaGUgVEVTVF9EQVRBIHJlZ2lvbiBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIHRlc3QgZGF0YSB0aGF0IGlzIGVpdGhlclxuK1x0ICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbid0IGNvbnNpZGVyZWQgYSBcImNvcmVcIiBkYXRhIHN0cnVjdHVyZS5cbitcdCAqL1xuIFx0TUVNX1JFR0lPTl9URVNUX0RBVEEsXG4rXHQvKlxuK1x0ICogVGhlIFRFU1RfRVhUUkEgcmVnaW9uIGlzIGZvciBzcGVjaWFsIHNub3dmbGFrZXMsIHdoZXJlIGEgdGVzdCB3YW50c1xuK1x0ICogdG8gY3JlYXRlIGFuZCB1c2UgYSBvbmUtb2ZmIG1lbXNsb3QsIHdpdGhvdXQgaW1wYWN0aW5nIFwibm9ybWFsXCIgdGVzdFxuK1x0ICogZGF0YSBhbGxvY2F0aW9ucy5cbitcdCAqL1xuK1x0TUVNX1JFR0lPTl9URVNUX0VYVFJBLFxuIFx0TlJfTUVNX1JFR0lPTlMsXG4gfTtcbiBcbkBAIC0xMjcsMTEgKzE2MSw2IEBAIHN0cnVjdCBrdm1fdm0ge1xuIFxuIFx0c3RydWN0IGt2bV9iaW5hcnlfc3RhdHMgc3RhdHM7XG4gXG4tXHQvKlxuLVx0ICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZVxuLVx0ICogYWxsb2NhdG9ycywgZS5nLiwgbGliL2VsZiB1c2VzIHRoZSBtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdXG4tXHQgKiBtZW1zbG90LlxuLVx0ICovXG4gXHR1MzIgbWVtc2xvdHNbTlJfTUVNX1JFR0lPTlNdO1xuIH07XG4gXG5AQCAtMTY5LDEzICsxOTgsMTQgQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KTtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4gXHRcdFx0XHRcdFx0XHQgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuIHtcbi1cdGFzc2VydCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XG4rXHRURVNUX0FTU0VSVCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyxcbitcdFx0ICAgIFwiSW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJyV1J1wiLCB0eXBlKTtcbiBcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuIH1cbiBcbiAvKiBNaW5pbXVtIGFsbG9jYXRlZCBndWVzdCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMgKi9cbiAjZGVmaW5lIEtWTV9VVElMX01JTl9WQUREUlx0XHQweDIwMDBcbi0jZGVmaW5lIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUlx0MHgxODAwMDBcbisjZGVmaW5lIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUlx0MHgyMDAwMDBcbiBcbiAjZGVmaW5lIERFRkFVTFRfR1VFU1RfU1RBQ0tfVkFERFJfTUlOXHQweGFiNjAwMFxuICNkZWZpbmUgREVGQVVMVF9TVEFDS19QR1NcdFx0NVxuQEAgLTcwMiw2ICs3MzIsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuIFx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG4gXHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG4gXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuK1x0XHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgdTMyIHNsb3QpXG4re1xuK1x0VEVTVF9BU1NFUlQodm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbitcdFx0ICAgIFwiTWVtb3J5IHJlZ2lvbiB0eXBlICcldScgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXVcIixcbitcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbitcbitcdHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdID0gc2xvdDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbitcdFx0XHRcdFx0ICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuK1x0XHRcdFx0XHQgICAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbitcdFx0XHRcdFx0ICAgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsXG4rXHRcdFx0XHRcdCAgICB1MzIgZmxhZ3MpXG4re1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNsb3QpO1xuK1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIGZsYWdzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4rXHRcdFx0XHRcdCAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4rXHRcdFx0XHRcdCAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbitcdFx0XHRcdFx0ICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzKVxuK3tcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCAwKTtcbit9XG4rXG4gI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5XG4gc3RhdGljIGlubGluZSBib29sIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuQEAgLTk5MCwyMyArMTA1MCw0MSBAQCB2b2lkIGt2bV9nc2lfcm91dGluZ193cml0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZyAqcm91dGluZyk7XG4gXG4gY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbik7XG4gXG4tZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KTtcbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSwgZ3BhX3QgbWluX2dwYSxcbi1cdFx0XHQgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQpO1xuLWdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pO1xuK2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7XG4rXG4rZ3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxuK1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTtcbitncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuK1x0XHRcdCAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLCBib29sIHByb3RlY3RlZCk7XG4gXG4tc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4tXHRcdFx0XHQgICAgICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbitcdFx0XHRcdCAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiB7XG4gXHQvKlxuIFx0ICogQnkgZGVmYXVsdCwgYWxsb2NhdGUgbWVtb3J5IGFzIHByb3RlY3RlZCBmb3IgVk1zIHRoYXQgc3VwcG9ydFxuIFx0ICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXNcbiBcdCAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi5cbiBcdCAqL1xuLVx0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsXG4rXHRyZXR1cm4gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCB0eXBlLFxuIFx0XHRcdFx0ICAgIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkodm0pKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcbitcdFx0XHRcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuK3tcbitcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIHR5cGUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXMoc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcylcbit7XG4rXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgTUVNX1JFR0lPTl9QVCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcbit7XG4rXHRyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7XG4rfVxuK1xuIC8qXG4gICogX19fX3ZtX2NyZWF0ZSgpIGRvZXMgS1ZNX0NSRUFURV9WTSBhbmQgbGl0dGxlIGVsc2UuICBfX3ZtX2NyZWF0ZSgpIGFsc29cbiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbmluZGV4IDJkMWFmYTA5ODE5YjAuLjE1ZmFhYTA2MDEyNjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuQEAgLTgsNyArOCw3IEBAXG4gI2RlZmluZSBTTVJBTV9NRU1TTE9UXHQoKDEgXHUwMDNjXHUwMDNjIDE2KSB8IDEpXG4gI2RlZmluZSBTTVJBTV9QQUdFU1x0KFNNUkFNX1NJWkUgLyBQQUdFX1NJWkUpXG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuK3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLFxuIFx0XHQgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpO1xuIFxuIHZvaWQgaW5qZWN0X3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXG5pbmRleCAwMTMyNWJmNGQzNmZjLi4yZGNhYTJjNGEwMzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuQEAgLTExNSw5ICsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRpZiAodm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcbi1cdFx0XHRcdFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hbGlnbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEtWTV9VVElMX01JTl9QRk5cdDJcbkBAIC0yODcsNiArMjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpO1xuIFxuIFx0dm0gPSBjYWxsb2MoMSwgc2l6ZW9mKCp2bSkpO1xuIFx0VEVTVF9BU1NFUlQodm0gIT0gTlVMTCwgXCJJbnN1ZmZpY2llbnQgTWVtb3J5XCIpO1xuQEAgLTI5NSw2ICsyOTcsOCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbiBcdHZtLVx1MDAzZXJlZ2lvbnMuZ3BhX3RyZWUgPSBSQl9ST09UO1xuIFx0dm0tXHUwMDNlcmVnaW9ucy5odmFfdHJlZSA9IFJCX1JPT1Q7XG4gXHRoYXNoX2luaXQodm0tXHUwMDNlcmVnaW9ucy5zbG90X2hhc2gpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkrKylcbitcdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UO1xuIFxuIFx0dm0tXHUwMDNlbW9kZSA9IHNoYXBlLm1vZGU7XG4gXHR2bS1cdTAwM2V0eXBlID0gc2hhcGUudHlwZTtcbkBAIC00OTEsNyArNDk1LDcgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4gXHRcdFx0XHRcdFx0IG5yX2V4dHJhX3BhZ2VzKTtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqc2xvdDA7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cdGludCBpLCBmbGFncztcbitcdGludCBmbGFncztcbiBcbiBcdGt2bV9zZXRfZmlsZXNfcmxpbWl0KG5yX3J1bm5hYmxlX3ZjcHVzKTtcbiBcbkBAIC01MDksOCArNTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuIFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXG4tXHRcdHZtLVx1MDAzZW1lbXNsb3RzW2ldID0gMDtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIDApO1xuIFxuIFx0a3ZtX3ZtX2VsZl9sb2FkKHZtLCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSk7XG4gXG5AQCAtMTE4OSw2ICsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KVxuIHtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xuIFxuK1x0VEVTVF9BU1NFUlQobWVtc2xvdCAhPSBLVk1fSU5WQUxJRF9NRU1TTE9ULCBcInZtLVx1MDAzZW1lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/XCIpO1xuK1xuIFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZSh2bS1cdTAwM2VyZWdpb25zLnNsb3RfaGFzaCwgcmVnaW9uLCBzbG90X25vZGUsXG4gXHRcdFx0ICAgICAgIG1lbXNsb3QpXG4gXHRcdGlmIChyZWdpb24tXHUwMDNlcmVnaW9uLnNsb3QgPT0gbWVtc2xvdClcbkBAIC0xNDY1LDkgKzE0NzMsNyBAQCBzdGF0aWMgZ3ZhX3QgX19fX3ZtX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3Qgc3osIGd2YV90IG1pbl9ndmEsXG4gXHR1NjQgcGFnZXMgPSAoc3ogXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpICsgKChzeiAlIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgIT0gMCk7XG4gXG4gXHR2aXJ0X3BnZF9hbGxvYyh2bSk7XG4tXHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsXG4tXHRcdFx0XHRcdCAgIEtWTV9VVElMX01JTl9QRk4gKiB2bS1cdTAwM2VwYWdlX3NpemUsXG4tXHRcdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLCBwcm90ZWN0ZWQpO1xuK1x0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLCB0eXBlLCBwcm90ZWN0ZWQpO1xuIFxuIFx0LypcbiBcdCAqIEZpbmQgYW4gdW51c2VkIHJhbmdlIG9mIHZpcnR1YWwgcGFnZSBhZGRyZXNzZXMgb2YgYXQgbGVhc3RcbkBAIC0yMDI1LDMzICsyMDMxLDIxIEBAIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pXG4gfVxuIFxuIC8qXG4tICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvclxuLSAqXG4tICogSW5wdXQgQXJnczpcbi0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lXG4tICogICBudW0gLSBudW1iZXIgb2YgcGFnZXNcbi0gKiAgIG1pbl9ncGEgLSBQaHlzaWNhbCBhZGRyZXNzIG1pbmltdW1cbi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbVxuLSAqICAgcHJvdGVjdGVkIC0gVHJ1ZSBpZiB0aGUgcGFnZXMgd2lsbCBiZSB1c2VkIGFzIHByb3RlY3RlZC9wcml2YXRlIG1lbW9yeVxuKyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yXG4rICogdGhlIG1pbmltdW0gc3BlY2lmaWMgR1BBLiAgSWYgdGhlIG1lbW9yeSBpcyBwcm90ZWN0ZWQvcHJpdmF0ZSwgYWxzbyBhZGQgdGhlXG4rICogYWxsb2NhdGUgcGFnZXMgdG8gdGhlIHJlZ2lvbidzIHNldCBvZiBwcm90ZWN0ZWQgcGFnZXMsIGUuZy4gc28gdGhhdCBhcmNoXG4rICogY29kZSBrbm93cyB3aGljaCBwYWdlcyBuZWVkIHRvIGJlIGVuY3J5cHRlZCB3aGVuIGxhdW5jaGluZyB0aGUgVk0uXG4gICpcbi0gKiBPdXRwdXQgQXJnczogTm9uZVxuLSAqXG4tICogUmV0dXJuOlxuLSAqICAgU3RhcnRpbmcgcGh5c2ljYWwgYWRkcmVzc1xuLSAqXG4tICogV2l0aGluIHRoZSBWTSBzcGVjaWZpZWQgYnkgdm0sIGxvY2F0ZXMgYSByYW5nZSBvZiBhdmFpbGFibGUgcGh5c2ljYWxcbi0gKiBwYWdlcyBhdCBvciBhYm92ZSBtaW5fZ3BhLiBJZiBmb3VuZCwgdGhlIHBhZ2VzIGFyZSBtYXJrZWQgYXMgaW4gdXNlXG4tICogYW5kIHRoZWlyIGJhc2UgYWRkcmVzcyBpcyByZXR1cm5lZC4gQSBURVNUX0FTU0VSVCBmYWlsdXJlIG9jY3VycyBpZlxuLSAqIG5vdCBlbm91Z2ggcGFnZXMgYXJlIGF2YWlsYWJsZSBhdCBvciBhYm92ZSBtaW5fZ3BhLlxuKyAqIE5vdGUsIHN1Y2Nlc3MgaXMgZ3VhcmFudGVlZCFcbiAgKi9cbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbi1cdFx0XHQgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCxcbi1cdFx0XHQgICBib29sIHByb3RlY3RlZClcbitncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXG4rXHRcdFx0ICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpXG4ge1xuK1x0c2l6ZV90IGFsaWdubWVudCA9IG5hdHVyYWxseV9hbGlnbmVkID8gbnJfcGFnZXMgOiAxO1xuIFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XG4gXHRzcGFyc2ViaXRfaWR4X3QgcGcsIGJhc2U7XG4gXG4tXHRURVNUX0FTU0VSVChudW0gXHUwMDNlIDAsIFwiTXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVwiKTtcbitcdFRFU1RfQVNTRVJUKG5yX3BhZ2VzLCBcIk11c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcIik7XG4gXG4gXHRURVNUX0FTU0VSVCgobWluX2dwYSAlIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgPT0gMCwgXCJNaW4gcGh5c2ljYWwgYWRkcmVzcyBcIlxuIFx0XHRcIm5vdCBkaXZpc2libGUgYnkgcGFnZSBzaXplLlxcblwiXG5AQCAtMjA2Miw0MyArMjA1Niw3OCBAQCBncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbiBcdFRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLVx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsXG4gXHRcdCAgICBcIlJlZ2lvbiBkb2Vzbid0IHN1cHBvcnQgcHJvdGVjdGVkIG1lbW9yeVwiKTtcbiBcbi1cdGJhc2UgPSBwZyA9IG1pbl9ncGEgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4tXHRkbyB7XG4tXHRcdGZvciAoOyBwZyBcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xuLVx0XHRcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XG4tXHRcdFx0XHRiYXNlID0gcGcgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdGJhc2UgPSBtaW5fZ3BhIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0O1xuK2FnYWluOlxuK1x0YmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7XG4rXHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgKyBucl9wYWdlczsgKytwZykge1xuK1x0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuK1x0XHRcdGJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbitcdFx0XHRpZiAoIWJhc2UpXG4rXHRcdFx0XHRnb3RvIGVub21lbTtcbitcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4tXHR9IHdoaWxlIChwZyBcdTAwMjZcdTAwMjYgcGcgIT0gYmFzZSArIG51bSk7XG4tXG4tXHRpZiAocGcgPT0gMCkge1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJObyBndWVzdCBwaHlzaWNhbCBwYWdlIGF2YWlsYWJsZSwgXCJcbi1cdFx0XHRcIm1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcblwiLFxuLVx0XHRcdG1pbl9ncGEsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XG4tXHRcdGZwdXRzKFwiLS0tLSB2bSBkdW1wIC0tLS1cXG5cIiwgc3RkZXJyKTtcbi1cdFx0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcbi1cdFx0YWJvcnQoKTtcbiBcdH1cbiBcbi1cdGZvciAocGcgPSBiYXNlOyBwZyBcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xuK1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcbiBcdFx0c3BhcnNlYml0X2NsZWFyKHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4gXHRcdGlmIChwcm90ZWN0ZWQpXG4gXHRcdFx0c3BhcnNlYml0X3NldChyZWdpb24tXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGJhc2UgKiB2bS1cdTAwM2VwYWdlX3NpemU7XG4rXG4rZW5vbWVtOlxuK1x0ZnByaW50ZihzdGRlcnIsIFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcblwiLFxuK1x0XHRtaW5fZ3BhLCB2bS1cdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xuK1x0ZnB1dHMoXCItLS0tIHZtIGR1bXAgLS0tLVxcblwiLCBzdGRlcnIpO1xuK1x0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcbitcdGFib3J0KCk7XG4rXHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiB9XG4gXG4tZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuK19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLWdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbitcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuK1x0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24gPSB2bV9nZXRfbWVtX3JlZ2lvbih2bSwgdHlwZSk7XG4rXHRib29sIG5hdHVyYWxseV9hbGlnbmVkID0gZmFsc2U7XG4rXHRncGFfdCBtaW5fZ3BhO1xuK1xuK1x0VEVTVF9BU1NFUlQocmVnaW9uLCBcIk5vIHJlZ2lvbiBmb3IgdHlwZSAnJXUnLCBtZW1zbG90ICcldSdcIixcbitcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBNRU1fUkVHSU9OX0NPREU6XG4rXHRjYXNlIE1FTV9SRUdJT05fREFUQTpcbitcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0RBVEE6XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSByZWdpb24gaXMgYmFja2VkIGJ5IHRoZSBkZWZhdWx0IG1lbXNsb3QgKGlkPTApLCB1c2VcbitcdFx0ICogc2VsZnRlc3RzJyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2ZcbitcdFx0ICogdGhlIGN1c3RvbSBtZW1vcnkgc2xvdCB0aGF0IGJhY2tzIHRoZSByZWdpb24uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKVxuK1x0XHRcdG1pbl9ncGEgPSBLVk1fVVRJTF9NSU5fUEZOICogdm0tXHUwMDNlcGFnZV9zaXplO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUVNX1JFR0lPTl9QVDpcbitcdFx0bWluX2dwYSA9IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUjtcbitcdFx0bmF0dXJhbGx5X2FsaWduZWQgPSBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcygpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOlxuK1x0XHRtaW5fZ3BhID0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0VEVTVF9GQUlMKFwiSW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJyV1J1wiLCB0eXBlKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLFxuK1x0XHRcdFx0ICAgICAgcHJvdGVjdGVkLCBuYXR1cmFsbHlfYWxpZ25lZCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuaW5kZXggNDdiYmRlM2UyMDVhMC4uZmNkNDFiYzZmYmRhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuQEAgLTksNyArOSw2IEBAXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJ1Y2FsbF9jb21tb24uaFwiXG4gXG4tI2RlZmluZSBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTlx0XHQweDIwMDAwMFxuICNkZWZpbmUgTE9PTkdBUkNIX0dVRVNUX1NUQUNLX1ZBRERSX01JTlx0XHQweDIwMDAwMFxuIFxuIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07XG5AQCAtNTcsOSArNTYsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRjaGlsZCA9IHRhYmxlID0gMDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZtLVx1MDAzZW1tdS5wZ3RhYmxlX2xldmVsczsgaSsrKSB7XG4gXHRcdGludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkO1xuLVx0XHR0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTixcbi1cdFx0XHRcdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbi1cdFx0VEVTVF9BU1NFUlQodGFibGUsIFwiRmFpbCB0byBhbGxvY2F0ZSBwYWdlIHRhbGUgYXQgbGV2ZWwgJWRcXG5cIiwgaSk7XG4rXHRcdHRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7XG4gXHRcdHZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7XG4gXHRcdGNoaWxkID0gdGFibGU7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmMxNzVkY2QxNDExNDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNjksOSArNjksNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRpZiAodm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcbi1cdFx0XHRcdFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbmluZGV4IGE5YWRiMzc4MmIzNTIuLjMzZjQ5ZDc0M2I1ZmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuQEAgLTIwLDkgKzIwLDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBQQUdFU19QRVJfUkVHSU9OLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0ICAgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuK1x0Z3BhID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgUEFHRVNfUEVSX1JFR0lPTik7XG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBncGEpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbiBcdHZtLVx1MDAzZW1tdS5wZ2QgPSBncGE7XG5AQCAtMzgsOCArMzYsNyBAQCBzdGF0aWMgdTY0IHZpcnRfYWxsb2NfcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgcmkpXG4ge1xuIFx0dTY0IHRhZGRyO1xuIFxuLVx0dGFkZHIgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sICByaSBcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLCAwKTtcbitcdHRhZGRyID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgcmkgXHUwMDNjIDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSk7XG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cdTAwM2VwYWdlX3NpemUpO1xuIFxuIFx0cmV0dXJuICh0YWRkciBcdTAwMjYgUkVHSU9OX0VOVFJZX09SSUdJTilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBkMzFmYTgxZWEwNzU2Li40NzllOWE0ODE2ODdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtNTI5LDcgKzUyOSwxMCBAQCB2b2lkIHRkcF9pZGVudGl0eV9tYXBfZGVmYXVsdF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcbiBcdC8qIE9ubHkgbWVtc2xvdCAwIGlzIG1hcHBlZCBoZXJlLCBlbnN1cmUgaXQncyB0aGUgb25seSBvbmUgYmVpbmcgdXNlZCAqL1xuIFx0Zm9yIChzID0gMDsgcyBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IHMrKylcbi1cdFx0VEVTVF9BU1NFUlRfRVEodm0tXHUwMDNlbWVtc2xvdHNbc10sIDApO1xuK1x0XHRURVNUX0FTU0VSVCghdm0tXHUwMDNlbWVtc2xvdHNbc10gfHxcbitcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbitcdFx0XHQgICAgXCJVbmhhbmRsZWQgbWVtc2xvdCAnJXUnIGZvciB0eXBlICcldSdcIixcbitcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10sIHMpO1xuIFxuIFx0aSA9IChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCkgLSAxO1xuIFx0bGFzdCA9IGkgKyAocmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCk7XG5AQCAtMTQ2NSwxMyArMTQ2OCwxMyBAQCBib29sIGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi12b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzbXJhbV9ncGEsXG4rdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXG4gXHRcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSlcbiB7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsXG4tXHRcdFx0XHQgICAgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMsIDApO1xuLVx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLFxuLVx0XHRcdFx0ICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSxcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4rXHRcdFx0ICAgICAgIHNtcmFtX2dwYSwgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMpO1xuK1xuK1x0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKSA9PSBzbXJhbV9ncGEsXG4gXHRcdCAgICBcIkNvdWxkIG5vdCBhbGxvY2F0ZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZm9yIFNNUkFNXCIpO1xuIFxuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgc21yYW1fZ3BhKSwgMHgwLCBTTVJBTV9TSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5pbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5AQCAtMzM5LDcgKzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsXG4gXHRcdGlmIChzbG90ID09IGRhdGEtXHUwMDNlbnNsb3RzKVxuIFx0XHRcdG5wYWdlcyArPSByZW1wYWdlcztcbiBcbi1cdFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCk7XG4rXHRcdGdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cdTAwM2V2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90LFxuK1x0XHRcdFx0XHQgICAgIGZhbHNlLCBmYWxzZSk7XG4gXHRcdFRFU1RfQVNTRVJUKGdwYSA9PSBndWVzdF9hZGRyLFxuIFx0XHRcdCAgICBcInZtX3BoeV9wYWdlc19hbGxvYygpIGZhaWxlZFwiKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5AQCAtMTAyLDI0ICsxMDIsMTcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZGlydHlfdGVzdF9kYXRhKHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4tXHRpbnQgaTtcbi1cbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7XG4tXHQvKiBzZXQgdGhlIGFycmF5IG9mIG1lbXNsb3RzIHRvIHplcm8gbGlrZSBfX3ZtX2NyZWF0ZSBkb2VzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSxcbi1cdFx0XHRcdCAgICBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFx1MDAzY1x1MDAzYyB2bS1cdTAwM2VwYWdlX3NoaWZ0LFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9QQUdFX0NPVU5ULFxuLVx0XHRcdFx0ICAgIDBcbi1cdFx0XHRcdCAgICk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbitcdFx0XHQgICAgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcdTAwM2NcdTAwM2Mgdm0tXHUwMDNlcGFnZV9zaGlmdCxcbitcdFx0XHQgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG5pbmRleCBmMzgzOTI4NGFjMDgxLi5jZDI2Y2MxYWVkODAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuQEAgLTM2LDcgKzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKVxuIFx0fTtcbiBcbiBcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4tXHRtZW0gPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCk7XG4rXHRtZW0gPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDAsIGZhbHNlLCBmYWxzZSk7XG4gXG4gXHRyb3V0aW5nID0ga3ZtX2dzaV9yb3V0aW5nX2NyZWF0ZSgpO1xuIFx0cm91dGluZy1cdTAwM2VuciA9IDE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbmluZGV4IGRmZmU5NjU0ZjQ1YmQuLmJmYTVhYzhjZTAyOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5AQCAtMTE2LDE1ICsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTtcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpXG4gXHQgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS5cbiBcdCAqL1xuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTtcbitcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdFRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXFxuXCIpO1xuIFxuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX0dQQSwgMik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG5AQCAtNjIsMTEgKzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRURVNUX0FTU0VSVChyYywgXCJLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUgaXMgdW5hdmFpbGFibGVcIik7XG4gXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwgMCk7XG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUpO1xuK1xuIFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsXG4tXHRcdFx0XHQgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XG4rXHRcdFx0XHQgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdFRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXCIpO1xuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1ZBLCBNRU1fUkVHSU9OX0dQQSwgMSk7XG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjEyOjA0LjMxNzA0NzM3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzgyNzEwNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuICBIYW5nIG9uLCB0aGF0J3MgdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkhIEkga25vdyB0aG9zZSBhcmUgKnBhcnQqIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRlY2huaWNhbGx5LCBidXQgdGhleSdyZSB1c2Vyc3BhY2UgdGVzdGluZyB0b29scywgbm90IGtlcm5lbCBjb2RlLiBUaGV5IHJ1biAqb24gdG9wKiBvZiB0aGUga2VybmVsIHRvIHZlcmlmeSBpdHMgYmVoYXZpb3IuICBDaGFuZ2VzIHRoZXJlIHdvbid0IGRpcmVjdGx5IGFsdGVyIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cblxuTm93LCBsZXQncyBjb25zdWx0IHRoZSBwcm92aWRlZCBndWlkZWxpbmVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgbGlzdCBzY2VuYXJpb3Mgd2hlcmUgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgY292ZXJzIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBsb2dnaW5nLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlbid0IGVtdWxhdGVkLiAgSXQgZG9lc24ndCAqZXhwbGljaXRseSogbWVudGlvbiBgdG9vbHMvYCwgYnV0IG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjaGFuZ2VzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgKGUuZy4sIHNlbGZ0ZXN0cywgcGVyZiwgYnBmKSBnZW5lcmFsbHkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaXRzZWxmOyB0aGV5J3JlIHVzZXItc3BhY2UgdG9vbHMuXG5cbkxvb2tpbmcgYXQgdGhlIG9wcG9zaXRlIGNhc2UsIHRoZSBndWlkZWxpbmVzIHN0YXRlIHRoYXQgaWYgdGhlIHBhdGNoIG1vZGlmaWVzICpyZWFjaGFibGUqIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgKm9ubHkqIHdpdGggYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLCB0aGlzIGNvbmRpdGlvbiBpc24ndCBtZXQuIFRoZSBwYXRjaCAqZG9lc24ndCogbW9kaWZ5IGNvcmUga2VybmVsIGNvbXBvbmVudHMuIFRoZXJlZm9yZSwgaXQncyB2ZXJ5IGxpa2VseSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlIGxpc3QgZnJvbSB0aGUgcGF0Y2guICBBaCwgeWVzLCBpdCdzIGV4Y2x1c2l2ZWx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYDpcblxuLSBgYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNgXG4tIGBhcm02NC92Z2ljX2xwaV9zdHJlc3MuY2Bcbi0gYGluY2x1ZGUva3ZtX3V0aWwuaGBcbi0gYGluY2x1ZGUveDg2L3NtbS5oYFxuLSBgbGliL2FybTY0L3Byb2Nlc3Nvci5jYFxuLSBgbGliL2t2bV91dGlsLmNgXG4tIGBsaWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jYFxuLSBgbGliL3Jpc2N2L3Byb2Nlc3Nvci5jYFxuLSBgbGliL3MzOTAvcHJvY2Vzc29yLmNgXG4tIGBsaWIveDg2L3Byb2Nlc3Nvci5jYFxuLSBgbWVtc2xvdF9wZXJmX3Rlc3QuY2Bcbi0gYHMzOTAvY21tYV90ZXN0LmNgXG4tIGBzMzkwL2lycV9yb3V0aW5nLmNgXG4tIGBzZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNgXG4tIGB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNgXG5cbll1cCwgaXQncyBhbGwgc2VsZnRlc3RzLiBUaGVzZSBhcmUgKnVzZXJzcGFjZSogdGVzdCBwcm9ncmFtcywgbm90IGtlcm5lbCBjb2RlLiBUaGV5IGRvbid0IHJ1biBpbnNpZGUgdGhlIGtlcm5lbC4gIFNvLCBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgb2YgdGhlIHBhdGNoJ3Mgc2NvcGUgYW5kIHRoZSBndWlkZWxpbmVzLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC5cblxuSSB3aWxsIG5vdyBjYWxsIHNldC1yZXN1bHRzIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjg5LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MTUuNjk5NzYwMzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzIChLVk0gc2VsZnRlc3RzKSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MTUuNjk5NzgxNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowkqpn6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 23:10:28 +0000 UTC FinishedAt: 2026-08-26 23:12:17 +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+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2UgdGVzdGluZyB0b29scyAoS1ZNIHNlbGZ0ZXN0cykgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtLy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMjBhNTljODEwY2U2YWZjNGM1Y2Q3ZTMxM2IxMjQyMDAzZDkyZjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjM6MTI6MDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXG5pbmRleCA2YmIzZDgyOTA2YjIyLi5iMGUzZmM4Y2Q3NmFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbkBAIC01OTcsMTggJiM0Mzs1OTcsMTYgQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCB0ZXN0X3BhcmFtcyAqcClcbiBcbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsXG4gXHRcdFx0XHQgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdID0gQ09ERV9BTkRfREFUQV9NRU1TTE9UO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9EQVRBXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcbi1cbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuLVx0XHRcdFx0ICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbi1cdFx0XHRcdCAgICBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdID0gUEFHRV9UQUJMRV9NRU1TTE9UO1xuLVxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsXG4tXHRcdFx0XHQgICAgZGF0YV9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxuLVx0XHRcdFx0ICAgIHAtXHUwMDNldGVzdF9kZXNjLVx1MDAzZWRhdGFfbWVtc2xvdF9mbGFncyk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIENPREVfQU5EX0RBVEFfTUVNU0xPVCk7XG4mIzQzO1xuJiM0MztcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuJiM0MztcdFx0XHRcdCBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNldGVzdF9kZXNjLVx1MDAzZXB0X21lbXNsb3RfZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBwLVx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSxcbiYjNDM7XHRcdFx0XHQgVEVTVF9EQVRBX01FTVNMT1QsIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCA5YTY5YzQzOWEwZjhmLi5iNGM2NTFlYTM4NWQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0xNjQsOCAmIzQzOzE2NCw4IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3Qodm9pZClcbiBcbiBcdHBhZ2VzID0gc3ogLyB2bS1cdTAwM2VwYWdlX3NpemU7XG4gXHRncGFfYmFzZSA9ICgodm1fY29tcHV0ZV9tYXhfZ2ZuKHZtKSAmIzQzOyAxKSAqIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgLSBzejtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIGdwYV9iYXNlLFxuLVx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApO1xuJiM0MztcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7XG4gfVxuIFxuICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPXHQweGEwXG5AQCAtMTkxLDI4ICYjNDM7MTkxLDI1IEBAIHN0YXRpYyB2b2lkIHNldHVwX3Rlc3RfZGF0YSh2b2lkKVxuIFx0Z3BhX3QgY21kcV9iYXNlO1xuIFxuIFx0dGVzdF9kYXRhLmRldmljZV90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayxcbi1cdFx0XHRcdFx0XHQgICAgZ3BhX2Jhc2UsXG4tXHRcdFx0XHRcdFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuIFx0dGVzdF9kYXRhLmNvbGxlY3Rpb25fdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0XHRncGFfYmFzZSxcbi1cdFx0XHRcdFx0XHRcdFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0XHRcdFx0TUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbi1cdGNtZHFfYmFzZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywgZ3BhX2Jhc2UsXG4tXHRcdFx0XHQgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTtcbiYjNDM7XHRjbWRxX2Jhc2UgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHR2aXJ0X21hcCh2bSwgY21kcV9iYXNlLCBjbWRxX2Jhc2UsIHBhZ2VzX3Blcl82NGspO1xuIFx0dGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2VfdmEgPSAodm9pZCAqKWNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5pdHRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfZGV2aWNlcyxcbi1cdFx0XHRcdFx0XHQgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHR0ZXN0X2RhdGEubHBpX3Byb3BfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRjb25maWd1cmVfbHBpcygpO1xuIFxuIFx0dGVzdF9kYXRhLmxwaV9wZW5kX3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2NwdXMsXG4tXHRcdFx0XHRcdFx0ICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcbiBcdHN5bmNfZ2xvYmFsX3RvX2d1ZXN0KHZtLCB0ZXN0X2RhdGEpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxuaW5kZXggNWE3YTQ1NWI1Mzg3NS4uZmZkNGNmNzQwZDdmYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbkBAIC0zMyw2ICYjNDM7MzMsOCBAQFxuIFxuICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMXG4gXG4mIzQzOyNkZWZpbmUgS1ZNX0lOVkFMSURfTUVNU0xPVCBVSU5UX01BWFxuJiM0MztcbiBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24ge1xuIFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uO1xuIFx0c3RydWN0IHNwYXJzZWJpdCAqdW51c2VkX3BoeV9wYWdlcztcbkBAIC04MCwxMSAmIzQzOzgyLDQzIEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMge1xuIFx0REVDTEFSRV9IQVNIVEFCTEUoc2xvdF9oYXNoLCA5KTtcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGVcbiYjNDM7ICogdmFyaW91cyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uLiAgTm90ZSwgdGhlXG4mIzQzOyAqIGRlc2NyaXB0aW9ucyBiZWxvdyBkZXNjcmliZWQgdGhlIHByaW1hcnkgdXNhZ2Ugb2YgZWFjaCB0eXBlLiAgSW5kaXZpZHVhbFxuJiM0MzsgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy5cbiYjNDM7ICpcbiYjNDM7ICogQnkgZGVmYXVsdCwgYWxsIHJlZ2lvbnMgYXJlIG1hcHBlZCB0byBtZW1zbG90ICYjMzk7MCYjMzk7LiAgVGVzdHMgY2FuIG92ZXJyaWRlIHRoZVxuJiM0MzsgKiBtZW1zbG90IGZvciBhbnkgb3IgYWxsIHR5cGVzLCBlLmcuIHNvIHRoYXQgYWxsIHRlc3QgZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhXG4mIzQzOyAqIGN1cmF0ZWQgbWVtc2xvdC5cbiYjNDM7ICovXG4gZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBDT0RFIHJlZ2lvbiBpcyB1c2VkIGJ5IGxpYi9lbGYgd2hlbiBsb2FkaW5nIHRoZSB0ZXN0JiMzOTtzIGNvZGUgaW50b1xuJiM0MztcdCAqIGd1ZXN0IG1lbW9yeS5cbiYjNDM7XHQgKi9cbiBcdE1FTV9SRUdJT05fQ09ERSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBEQVRBIHJlZ2lvbiBpcyB1c2VkIHRvIGFsbG9jYXRlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBlLmcuIHZDUFVcbiYjNDM7XHQgKiBzdGFja3MsIFZNIGV4Y2VwdGlvbiB0YWJsZXMsIHg4NiYjMzk7cyBUU1MsIGV0Yy5cbiYjNDM7XHQgKi9cbiBcdE1FTV9SRUdJT05fREFUQSxcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlXG4mIzQzO1x0ICogdGFibGUgcGFnZXMuXG4mIzQzO1x0ICovXG4gXHRNRU1fUkVHSU9OX1BULFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIFRFU1RfREFUQSByZWdpb24gaXMgdXNlZCBmb3IgYWxsb2NhdGluZyB0ZXN0IGRhdGEgdGhhdCBpcyBlaXRoZXJcbiYjNDM7XHQgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJiMzOTt0IGNvbnNpZGVyZWQgYSBcJiMzNDtjb3JlXCYjMzQ7IGRhdGEgc3RydWN0dXJlLlxuJiM0MztcdCAqL1xuIFx0TUVNX1JFR0lPTl9URVNUX0RBVEEsXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzXG4mIzQzO1x0ICogdG8gY3JlYXRlIGFuZCB1c2UgYSBvbmUtb2ZmIG1lbXNsb3QsIHdpdGhvdXQgaW1wYWN0aW5nIFwmIzM0O25vcm1hbFwmIzM0OyB0ZXN0XG4mIzQzO1x0ICogZGF0YSBhbGxvY2F0aW9ucy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEsXG4gXHROUl9NRU1fUkVHSU9OUyxcbiB9O1xuIFxuQEAgLTEyNywxMSAmIzQzOzE2MSw2IEBAIHN0cnVjdCBrdm1fdm0ge1xuIFxuIFx0c3RydWN0IGt2bV9iaW5hcnlfc3RhdHMgc3RhdHM7XG4gXG4tXHQvKlxuLVx0ICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZVxuLVx0ICogYWxsb2NhdG9ycywgZS5nLiwgbGliL2VsZiB1c2VzIHRoZSBtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdXG4tXHQgKiBtZW1zbG90LlxuLVx0ICovXG4gXHR1MzIgbWVtc2xvdHNbTlJfTUVNX1JFR0lPTlNdO1xuIH07XG4gXG5AQCAtMTY5LDEzICYjNDM7MTk4LDE0IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdCk7XG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnZtX2dldF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuIFx0XHRcdFx0XHRcdFx0ICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiB7XG4tXHRhc3NlcnQodHlwZSBcdTAwM2MgTlJfTUVNX1JFR0lPTlMpO1xuJiM0MztcdFRFU1RfQVNTRVJUKHR5cGUgXHUwMDNjIE5SX01FTV9SRUdJT05TLFxuJiM0MztcdFx0ICAgIFwmIzM0O0ludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICYjMzk7JXUmIzM5O1wmIzM0OywgdHlwZSk7XG4gXHRyZXR1cm4gbWVtc2xvdDJyZWdpb24odm0sIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbiB9XG4gXG4gLyogTWluaW11bSBhbGxvY2F0ZWQgZ3Vlc3QgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzICovXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fVkFERFJcdFx0MHgyMDAwXG4tI2RlZmluZSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFJcdDB4MTgwMDAwXG4mIzQzOyNkZWZpbmUgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSXHQweDIwMDAwMFxuIFxuICNkZWZpbmUgREVGQVVMVF9HVUVTVF9TVEFDS19WQUREUl9NSU5cdDB4YWI2MDAwXG4gI2RlZmluZSBERUZBVUxUX1NUQUNLX1BHU1x0XHQ1XG5AQCAtNzAyLDYgJiM0Mzs3MzIsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuIFx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG4gXHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG4gXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHUzMiBzbG90KVxuJiM0Mzt7XG4mIzQzO1x0VEVTVF9BU1NFUlQodm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbiYjNDM7XHRcdCAgICBcJiMzNDtNZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7IHdhcyBhbHJlYWR5IG92ZXJyaWRkZW4gd2l0aCBzbG90PSV1XCYjMzQ7LFxuJiM0MztcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbiYjNDM7XG4mIzQzO1x0dm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0gPSBzbG90O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuJiM0MztcdFx0XHRcdFx0ICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdFx0ICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXG4mIzQzO1x0XHRcdFx0XHQgICAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcyxcbiYjNDM7XHRcdFx0XHRcdCAgICB1MzIgZmxhZ3MpXG4mIzQzO3tcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc2xvdCk7XG4mIzQzO1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuJiM0MztcdFx0XHRcdFx0ICBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuJiM0MztcdFx0XHRcdFx0ICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzKVxuJiM0Mzt7XG4mIzQzO1x0X192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIDApO1xuJiM0Mzt9XG4mIzQzO1xuICNpZm5kZWYgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeVxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbkBAIC05OTAsMjMgJiM0MzsxMDUwLDQxIEBAIHZvaWQga3ZtX2dzaV9yb3V0aW5nX3dyaXRlKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nICpyb3V0aW5nKTtcbiBcbiBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKTtcbiBcbi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpO1xuLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLCBncGFfdCBtaW5fZ3BhLFxuLVx0XHRcdCAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCk7XG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSk7XG4mIzQzO2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7XG4mIzQzO1xuJiM0MztncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXG4mIzQzO1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTtcbiYjNDM7Z3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKTtcbiBcbi1zdGF0aWMgaW5saW5lIGdwYV90IHZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbi1cdFx0XHRcdCAgICAgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcbiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpXG4ge1xuIFx0LypcbiBcdCAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnRcbiBcdCAqIHByb3RlY3RlZCBtZW1vcnksIGFzIHRoZSBtYWpvcml0eSBvZiBtZW1vcnkgZm9yIHN1Y2ggVk1zIGlzXG4gXHQgKiBwcm90ZWN0ZWQsIGkuZS4gdXNpbmcgc2hhcmVkIG1lbW9yeSBpcyBlZmZlY3RpdmVseSBvcHQtaW4uXG4gXHQgKi9cbi1cdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnVtLCBtaW5fZ3BhLCBtZW1zbG90LFxuJiM0MztcdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIHR5cGUsXG4gXHRcdFx0XHQgICAgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeSh2bSkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcbiYjNDM7XHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIHR5cGUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXMoc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBNRU1fUkVHSU9OX1BUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIDEpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogX19fX3ZtX2NyZWF0ZSgpIGRvZXMgS1ZNX0NSRUFURV9WTSBhbmQgbGl0dGxlIGVsc2UuICBfX3ZtX2NyZWF0ZSgpIGFsc29cbiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbmluZGV4IDJkMWFmYTA5ODE5YjAuLjE1ZmFhYTA2MDEyNjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuQEAgLTgsNyAmIzQzOzgsNyBAQFxuICNkZWZpbmUgU01SQU1fTUVNU0xPVFx0KCgxIFx1MDAzY1x1MDAzYyAxNikgfCAxKVxuICNkZWZpbmUgU01SQU1fUEFHRVNcdChTTVJBTV9TSVpFIC8gUEFHRV9TSVpFKVxuIFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcbiYjNDM7dm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXG4gXHRcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSk7XG4gXG4gdm9pZCBpbmplY3Rfc21pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcbmluZGV4IDAxMzI1YmY0ZDM2ZmMuLjJkY2FhMmM0YTAzODMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXG5AQCAtMTE1LDkgJiM0MzsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRpZiAodm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcbi1cdFx0XHRcdFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbiYjNDM7XHR2bS1cdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xuIFx0dm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG5pbmRleCA5ZGRjMDQ3ZDVjMjc1Li41N2I2NTNmYmQwYjFmIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbkBAIC0xNyw2ICYjNDM7MTcsNyBAQFxuICNpbmNsdWRlIFx1MDAzY3N5cy9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hbGlnbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEtWTV9VVElMX01JTl9QRk5cdDJcbkBAIC0yODcsNiAmIzQzOzI4OCw3IEBAIF9fd2VhayB2b2lkIHZtX3BvcHVsYXRlX2d2YV9iaXRtYXAoc3RydWN0IGt2bV92bSAqdm0pXG4gc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXG4ge1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0aW50IGk7XG4gXG4gXHR2bSA9IGNhbGxvYygxLCBzaXplb2YoKnZtKSk7XG4gXHRURVNUX0FTU0VSVCh2bSAhPSBOVUxMLCBcJiMzNDtJbnN1ZmZpY2llbnQgTWVtb3J5XCYjMzQ7KTtcbkBAIC0yOTUsNiAmIzQzOzI5Nyw4IEBAIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKVxuIFx0dm0tXHUwMDNlcmVnaW9ucy5ncGFfdHJlZSA9IFJCX1JPT1Q7XG4gXHR2bS1cdTAwM2VyZWdpb25zLmh2YV90cmVlID0gUkJfUk9PVDtcbiBcdGhhc2hfaW5pdCh2bS1cdTAwM2VyZWdpb25zLnNsb3RfaGFzaCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UO1xuIFxuIFx0dm0tXHUwMDNlbW9kZSA9IHNoYXBlLm1vZGU7XG4gXHR2bS1cdTAwM2V0eXBlID0gc2hhcGUudHlwZTtcbkBAIC00OTEsNyAmIzQzOzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRcdFx0XHRcdCBucl9leHRyYV9wYWdlcyk7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwO1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4tXHRpbnQgaSwgZmxhZ3M7XG4mIzQzO1x0aW50IGZsYWdzO1xuIFxuIFx0a3ZtX3NldF9maWxlc19ybGltaXQobnJfcnVubmFibGVfdmNwdXMpO1xuIFxuQEAgLTUwOSw4ICYjNDM7NTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuIFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpJiM0MzsmIzQzOylcbi1cdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSAwO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTtcbiYjNDM7XHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIDApO1xuIFxuIFx0a3ZtX3ZtX2VsZl9sb2FkKHZtLCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSk7XG4gXG5AQCAtMTE4OSw2ICYjNDM7MTE5NSw4IEBAIG1lbXNsb3QycmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCB1MzIgbWVtc2xvdClcbiB7XG4gXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbjtcbiBcbiYjNDM7XHRURVNUX0FTU0VSVChtZW1zbG90ICE9IEtWTV9JTlZBTElEX01FTVNMT1QsIFwmIzM0O3ZtLVx1MDAzZW1lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/XCYjMzQ7KTtcbiYjNDM7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKHZtLVx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoLCByZWdpb24sIHNsb3Rfbm9kZSxcbiBcdFx0XHQgICAgICAgbWVtc2xvdClcbiBcdFx0aWYgKHJlZ2lvbi1cdTAwM2VyZWdpb24uc2xvdCA9PSBtZW1zbG90KVxuQEAgLTE0NjUsOSAmIzQzOzE0NzMsNyBAQCBzdGF0aWMgZ3ZhX3QgX19fX3ZtX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3Qgc3osIGd2YV90IG1pbl9ndmEsXG4gXHR1NjQgcGFnZXMgPSAoc3ogXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpICYjNDM7ICgoc3ogJSB2bS1cdTAwM2VwYWdlX3NpemUpICE9IDApO1xuIFxuIFx0dmlydF9wZ2RfYWxsb2Modm0pO1xuLVx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLFxuLVx0XHRcdFx0XHQgICBLVk1fVVRJTF9NSU5fUEZOICogdm0tXHUwMDNlcGFnZV9zaXplLFxuLVx0XHRcdFx0XHQgICB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTtcbiYjNDM7XHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsIHR5cGUsIHByb3RlY3RlZCk7XG4gXG4gXHQvKlxuIFx0ICogRmluZCBhbiB1bnVzZWQgcmFuZ2Ugb2YgdmlydHVhbCBwYWdlIGFkZHJlc3NlcyBvZiBhdCBsZWFzdFxuQEAgLTIwMjUsMzMgJiM0MzsyMDMxLDIxIEBAIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pXG4gfVxuIFxuIC8qXG4tICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvclxuLSAqXG4tICogSW5wdXQgQXJnczpcbi0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lXG4tICogICBudW0gLSBudW1iZXIgb2YgcGFnZXNcbi0gKiAgIG1pbl9ncGEgLSBQaHlzaWNhbCBhZGRyZXNzIG1pbmltdW1cbi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbVxuLSAqICAgcHJvdGVjdGVkIC0gVHJ1ZSBpZiB0aGUgcGFnZXMgd2lsbCBiZSB1c2VkIGFzIHByb3RlY3RlZC9wcml2YXRlIG1lbW9yeVxuJiM0MzsgKiBBbGxvY2F0ZSBjb250aWd1b3VzIChndWVzdCkgcGh5c2ljYWwgcGFnZXMgaW4gYSBnaXZlbiBtZW1vcnkgcmVnaW9uLCBhdCBvclxuJiM0MzsgKiB0aGUgbWluaW11bSBzcGVjaWZpYyBHUEEuICBJZiB0aGUgbWVtb3J5IGlzIHByb3RlY3RlZC9wcml2YXRlLCBhbHNvIGFkZCB0aGVcbiYjNDM7ICogYWxsb2NhdGUgcGFnZXMgdG8gdGhlIHJlZ2lvbiYjMzk7cyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaFxuJiM0MzsgKiBjb2RlIGtub3dzIHdoaWNoIHBhZ2VzIG5lZWQgdG8gYmUgZW5jcnlwdGVkIHdoZW4gbGF1bmNoaW5nIHRoZSBWTS5cbiAgKlxuLSAqIE91dHB1dCBBcmdzOiBOb25lXG4tICpcbi0gKiBSZXR1cm46XG4tICogICBTdGFydGluZyBwaHlzaWNhbCBhZGRyZXNzXG4tICpcbi0gKiBXaXRoaW4gdGhlIFZNIHNwZWNpZmllZCBieSB2bSwgbG9jYXRlcyBhIHJhbmdlIG9mIGF2YWlsYWJsZSBwaHlzaWNhbFxuLSAqIHBhZ2VzIGF0IG9yIGFib3ZlIG1pbl9ncGEuIElmIGZvdW5kLCB0aGUgcGFnZXMgYXJlIG1hcmtlZCBhcyBpbiB1c2Vcbi0gKiBhbmQgdGhlaXIgYmFzZSBhZGRyZXNzIGlzIHJldHVybmVkLiBBIFRFU1RfQVNTRVJUIGZhaWx1cmUgb2NjdXJzIGlmXG4tICogbm90IGVub3VnaCBwYWdlcyBhcmUgYXZhaWxhYmxlIGF0IG9yIGFib3ZlIG1pbl9ncGEuXG4mIzQzOyAqIE5vdGUsIHN1Y2Nlc3MgaXMgZ3VhcmFudGVlZCFcbiAgKi9cbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbi1cdFx0XHQgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCxcbi1cdFx0XHQgICBib29sIHByb3RlY3RlZClcbiYjNDM7Z3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxuJiM0MztcdFx0XHQgICAgIHUzMiBtZW1zbG90LCBib29sIHByb3RlY3RlZCwgYm9vbCBuYXR1cmFsbHlfYWxpZ25lZClcbiB7XG4mIzQzO1x0c2l6ZV90IGFsaWdubWVudCA9IG5hdHVyYWxseV9hbGlnbmVkID8gbnJfcGFnZXMgOiAxO1xuIFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XG4gXHRzcGFyc2ViaXRfaWR4X3QgcGcsIGJhc2U7XG4gXG4tXHRURVNUX0FTU0VSVChudW0gXHUwMDNlIDAsIFwmIzM0O011c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcJiMzNDspO1xuJiM0MztcdFRFU1RfQVNTRVJUKG5yX3BhZ2VzLCBcJiMzNDtNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlXCYjMzQ7KTtcbiBcbiBcdFRFU1RfQVNTRVJUKChtaW5fZ3BhICUgdm0tXHUwMDNlcGFnZV9zaXplKSA9PSAwLCBcJiMzNDtNaW4gcGh5c2ljYWwgYWRkcmVzcyBcJiMzNDtcbiBcdFx0XCYjMzQ7bm90IGRpdmlzaWJsZSBieSBwYWdlIHNpemUuXFxuXCYjMzQ7XG5AQCAtMjA2Miw0MyAmIzQzOzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4gXHRURVNUX0FTU0VSVCghcHJvdGVjdGVkIHx8IHJlZ2lvbi1cdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLFxuIFx0XHQgICAgXCYjMzQ7UmVnaW9uIGRvZXNuJiMzOTt0IHN1cHBvcnQgcHJvdGVjdGVkIG1lbW9yeVwmIzM0Oyk7XG4gXG4tXHRiYXNlID0gcGcgPSBtaW5fZ3BhIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0O1xuLVx0ZG8ge1xuLVx0XHRmb3IgKDsgcGcgXHUwMDNjIGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHtcbi1cdFx0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuLVx0XHRcdFx0YmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4tXHRcdFx0XHRicmVhaztcbi1cdFx0XHR9XG4mIzQzO1x0YmFzZSA9IG1pbl9ncGEgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4mIzQzO2FnYWluOlxuJiM0MztcdGJhc2UgPSBBTElHTihiYXNlLCBhbGlnbm1lbnQpO1xuJiM0MztcdGZvciAocGcgPSBiYXNlOyBwZyBcdTAwM2MgYmFzZSAmIzQzOyBucl9wYWdlczsgJiM0MzsmIzQzO3BnKSB7XG4mIzQzO1x0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuJiM0MztcdFx0XHRiYXNlID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4mIzQzO1x0XHRcdGlmICghYmFzZSlcbiYjNDM7XHRcdFx0XHRnb3RvIGVub21lbTtcbiYjNDM7XHRcdFx0Z290byBhZ2FpbjtcbiBcdFx0fVxuLVx0fSB3aGlsZSAocGcgXHUwMDI2XHUwMDI2IHBnICE9IGJhc2UgJiM0MzsgbnVtKTtcbi1cbi1cdGlmIChwZyA9PSAwKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcJiMzNDtObyBndWVzdCBwaHlzaWNhbCBwYWdlIGF2YWlsYWJsZSwgXCYjMzQ7XG4tXHRcdFx0XCYjMzQ7bWluX2dwYTogMHglbHggcGFnZV9zaXplOiAweCV4IG1lbXNsb3Q6ICV1XFxuXCYjMzQ7LFxuLVx0XHRcdG1pbl9ncGEsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XG4tXHRcdGZwdXRzKFwmIzM0Oy0tLS0gdm0gZHVtcCAtLS0tXFxuXCYjMzQ7LCBzdGRlcnIpO1xuLVx0XHR2bV9kdW1wKHN0ZGVyciwgdm0sIDIpO1xuLVx0XHRhYm9ydCgpO1xuIFx0fVxuIFxuLVx0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICYjNDM7IG51bTsgJiM0MzsmIzQzO3BnKSB7XG4mIzQzO1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICYjNDM7IG5yX3BhZ2VzOyAmIzQzOyYjNDM7cGcpIHtcbiBcdFx0c3BhcnNlYml0X2NsZWFyKHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4gXHRcdGlmIChwcm90ZWN0ZWQpXG4gXHRcdFx0c3BhcnNlYml0X3NldChyZWdpb24tXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGJhc2UgKiB2bS1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1xuJiM0Mztlbm9tZW06XG4mIzQzO1x0ZnByaW50ZihzdGRlcnIsIFwmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCBtaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRtaW5fZ3BhLCB2bS1cdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xuJiM0MztcdGZwdXRzKFwmIzM0Oy0tLS0gdm0gZHVtcCAtLS0tXFxuXCYjMzQ7LCBzdGRlcnIpO1xuJiM0MztcdHZtX2R1bXAoc3RkZXJyLCB2bSwgMik7XG4mIzQzO1x0YWJvcnQoKTtcbiYjNDM7XHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiB9XG4gXG4tZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuJiM0MztfX3dlYWsgYm9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIG1pbl9ncGEsIG1lbXNsb3QpO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4tZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiYjNDM7Z3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbiYjNDM7XHRcdFx0ICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKVxuIHtcbi1cdHJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbiYjNDM7XHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbiA9IHZtX2dldF9tZW1fcmVnaW9uKHZtLCB0eXBlKTtcbiYjNDM7XHRib29sIG5hdHVyYWxseV9hbGlnbmVkID0gZmFsc2U7XG4mIzQzO1x0Z3BhX3QgbWluX2dwYTtcbiYjNDM7XG4mIzQzO1x0VEVTVF9BU1NFUlQocmVnaW9uLCBcJiMzNDtObyByZWdpb24gZm9yIHR5cGUgJiMzOTsldSYjMzk7LCBtZW1zbG90ICYjMzk7JXUmIzM5O1wmIzM0OyxcbiYjNDM7XHRcdCAgICB0eXBlLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSk7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9DT0RFOlxuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9EQVRBOlxuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0RBVEE6XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIHJlZ2lvbiBpcyBiYWNrZWQgYnkgdGhlIGRlZmF1bHQgbWVtc2xvdCAoaWQ9MCksIHVzZVxuJiM0MztcdFx0ICogc2VsZnRlc3RzJiMzOTsgaGFyZGNvZGVkIG1pbmltdW0gUEZOLCBvdGhlcndpc2UgdXNlIHRoZSBiYXNlIG9mXG4mIzQzO1x0XHQgKiB0aGUgY3VzdG9tIG1lbW9yeSBzbG90IHRoYXQgYmFja3MgdGhlIHJlZ2lvbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCF2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSlcbiYjNDM7XHRcdFx0bWluX2dwYSA9IEtWTV9VVElMX01JTl9QRk4gKiB2bS1cdTAwM2VwYWdlX3NpemU7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG1pbl9ncGEgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgTUVNX1JFR0lPTl9QVDpcbiYjNDM7XHRcdG1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7XG4mIzQzO1x0XHRuYXR1cmFsbHlfYWxpZ25lZCA9IGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIE1FTV9SRUdJT05fVEVTVF9FWFRSQTpcbiYjNDM7XHRcdG1pbl9ncGEgPSByZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRURVNUX0ZBSUwoXCYjMzQ7SW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJiMzOTsldSYjMzk7XCYjMzQ7LCB0eXBlKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCBtaW5fZ3BhLCB2bS1cdTAwM2VtZW1zbG90c1t0eXBlXSxcbiYjNDM7XHRcdFx0XHQgICAgICBwcm90ZWN0ZWQsIG5hdHVyYWxseV9hbGlnbmVkKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXG5pbmRleCA0N2JiZGUzZTIwNWEwLi5mY2Q0MWJjNmZiZGFlIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXG5AQCAtOSw3ICYjNDM7OSw2IEBAXG4gI2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt1Y2FsbF9jb21tb24uaFwmIzM0O1xuIFxuLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU5cdFx0MHgyMDAwMDBcbiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU5cdFx0MHgyMDAwMDBcbiBcbiBzdGF0aWMgZ3BhX3QgaW52YWxpZF9wZ3RhYmxlWzRdO1xuQEAgLTU3LDkgJiM0Mzs1Niw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGNoaWxkID0gdGFibGUgPSAwO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgdm0tXHUwMDNlbW11LnBndGFibGVfbGV2ZWxzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRpbnZhbGlkX3BndGFibGVbaV0gPSBjaGlsZDtcbi1cdFx0dGFibGUgPSB2bV9waHlfcGFnZV9hbGxvYyh2bSwgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4sXG4tXHRcdFx0XHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XG4tXHRcdFRFU1RfQVNTRVJUKHRhYmxlLCBcJiMzNDtGYWlsIHRvIGFsbG9jYXRlIHBhZ2UgdGFsZSBhdCBsZXZlbCAlZFxcblwmIzM0OywgaSk7XG4mIzQzO1x0XHR0YWJsZSA9IHZtX2FsbG9jX3BhZ2VfdGFibGUodm0pO1xuIFx0XHR2aXJ0X3NldF9wZ3RhYmxlKHZtLCB0YWJsZSwgY2hpbGQpO1xuIFx0XHRjaGlsZCA9IHRhYmxlO1xuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuY1xuQEAgLTY5LDkgJiM0Mzs2OSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLFxuLVx0XHRcdFx0XHQgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuJiM0MztcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbmluZGV4IGE5YWRiMzc4MmIzNTIuLjMzZjQ5ZDc0M2I1ZmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuQEAgLTIwLDkgJiM0MzsyMCw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcdGlmICh2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQpXG4gXHRcdHJldHVybjtcbiBcbi1cdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTixcbi1cdFx0XHRcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbiYjNDM7XHRncGEgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBQQUdFU19QRVJfUkVHSU9OKTtcbiBcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIGdwYSksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cdTAwM2VwYWdlX3NpemUpO1xuIFxuIFx0dm0tXHUwMDNlbW11LnBnZCA9IGdwYTtcbkBAIC0zOCw4ICYjNDM7MzYsNyBAQCBzdGF0aWMgdTY0IHZpcnRfYWxsb2NfcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgcmkpXG4ge1xuIFx0dTY0IHRhZGRyO1xuIFxuLVx0dGFkZHIgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sICByaSBcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLCAwKTtcbiYjNDM7XHR0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpIFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEpO1xuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgdGFkZHIpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbiBcdHJldHVybiAodGFkZHIgXHUwMDI2IFJFR0lPTl9FTlRSWV9PUklHSU4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xuQEAgLTUyOSw3ICYjNDM7NTI5LDEwIEBAIHZvaWQgdGRwX2lkZW50aXR5X21hcF9kZWZhdWx0X21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFxuIFx0LyogT25seSBtZW1zbG90IDAgaXMgbWFwcGVkIGhlcmUsIGVuc3VyZSBpdCYjMzk7cyB0aGUgb25seSBvbmUgYmVpbmcgdXNlZCAqL1xuIFx0Zm9yIChzID0gMDsgcyBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IHMmIzQzOyYjNDM7KVxuLVx0XHRURVNUX0FTU0VSVF9FUSh2bS1cdTAwM2VtZW1zbG90c1tzXSwgMCk7XG4mIzQzO1x0XHRURVNUX0FTU0VSVCghdm0tXHUwMDNlbWVtc2xvdHNbc10gfHxcbiYjNDM7XHRcdFx0ICAgIHZtLVx1MDAzZW1lbXNsb3RzW3NdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXG4mIzQzO1x0XHRcdCAgICBcJiMzNDtVbmhhbmRsZWQgbWVtc2xvdCAmIzM5OyV1JiMzOTsgZm9yIHR5cGUgJiMzOTsldSYjMzk7XCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10sIHMpO1xuIFxuIFx0aSA9IChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCkgLSAxO1xuIFx0bGFzdCA9IGkgJiM0MzsgKHJlZ2lvbi1cdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpO1xuQEAgLTE0NjUsMTMgJiM0MzsxNDY4LDEzIEBAIGJvb2wga3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHNtcmFtX2dwYSxcbiYjNDM7dm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXG4gXHRcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSlcbiB7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsXG4tXHRcdFx0XHQgICAgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMsIDApO1xuLVx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLFxuLVx0XHRcdFx0ICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSxcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuJiM0MztcdFx0XHQgICAgICAgc21yYW1fZ3BhLCBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUyk7XG4mIzQzO1xuJiM0MztcdFRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSkgPT0gc21yYW1fZ3BhLFxuIFx0XHQgICAgXCYjMzQ7Q291bGQgbm90IGFsbG9jYXRlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NlcyBmb3IgU01SQU1cJiMzNDspO1xuIFxuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgc21yYW1fZ3BhKSwgMHgwLCBTTVJBTV9TSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5pbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5AQCAtMzM5LDcgJiM0MzszMzksOCBAQCBzdGF0aWMgYm9vbCBwcmVwYXJlX3ZtKHN0cnVjdCB2bV9kYXRhICpkYXRhLCBpbnQgbnNsb3RzLCB1NjQgKm1heHNsb3RzLFxuIFx0XHRpZiAoc2xvdCA9PSBkYXRhLVx1MDAzZW5zbG90cylcbiBcdFx0XHRucGFnZXMgJiM0Mzs9IHJlbXBhZ2VzO1xuIFxuLVx0XHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cdTAwM2V2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90KTtcbiYjNDM7XHRcdGdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cdTAwM2V2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90LFxuJiM0MztcdFx0XHRcdFx0ICAgICBmYWxzZSwgZmFsc2UpO1xuIFx0XHRURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkcixcbiBcdFx0XHQgICAgXCYjMzQ7dm1fcGh5X3BhZ2VzX2FsbG9jKCkgZmFpbGVkXCYjMzQ7KTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5AQCAtMTAyLDI0ICYjNDM7MTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKVxuIFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV9tYWluX21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLCAwLCBNQUlOX1BBR0VfQ09VTlQsIDApO1xuLVx0Lyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XG4mIzQzO1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xuJiM0MztcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSxcbi1cdFx0XHRcdCAgICBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFx1MDAzY1x1MDAzYyB2bS1cdTAwM2VwYWdlX3NoaWZ0LFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9QQUdFX0NPVU5ULFxuLVx0XHRcdFx0ICAgIDBcbi1cdFx0XHRcdCAgICk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4mIzQzO1x0XHRcdCAgICAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFx1MDAzY1x1MDAzYyB2bS1cdTAwM2VwYWdlX3NoaWZ0LFxuJiM0MztcdFx0XHQgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG5pbmRleCBmMzgzOTI4NGFjMDgxLi5jZDI2Y2MxYWVkODAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuQEAgLTM2LDcgJiM0MzszNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Qodm9pZClcbiBcdH07XG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuLVx0bWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApO1xuJiM0MztcdG1lbSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCwgZmFsc2UsIGZhbHNlKTtcbiBcbiBcdHJvdXRpbmcgPSBrdm1fZ3NpX3JvdXRpbmdfY3JlYXRlKCk7XG4gXHRyb3V0aW5nLVx1MDAzZW5yID0gMTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xuaW5kZXggZGZmZTk2NTRmNDViZC4uYmZhNWFjOGNlMDI5NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbkBAIC0xMTYsMTUgJiM0MzsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTtcbiYjNDM7XHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4mIzQzO1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpXG4gXHQgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS5cbiBcdCAqL1xuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTtcbiYjNDM7XHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFwmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2NcXG5cJiMzNDspO1xuIFxuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX0dQQSwgMik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG5AQCAtNjIsMTEgJiM0Mzs2MiwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0VEVTVF9BU1NFUlQocmMsIFwmIzM0O0tWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSBpcyB1bmF2YWlsYWJsZVwmIzM0Oyk7XG4gXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwgMCk7XG4mIzQzO1x0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbiYjNDM7XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXG4mIzQzO1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUpO1xuJiM0MztcbiBcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLFxuLVx0XHRcdFx0IE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpO1xuJiM0MztcdFx0XHRcdCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0VEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCBcJiMzNDtGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXCYjMzQ7KTtcbiBcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpO1xuIFx0aHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMjM6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjIwYTU5YzgxMGNlNmFmYzRjNWNkN2UzMTNiMTI0MjAwM2Q5MmYyMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDIzOjEyOjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jCmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMKQEAgLTU5NywxOCAmIzQzOzU5NywxNiBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IHRlc3RfcGFyYW1zICpwKQogCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwKIAkJCQkgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fQ09ERV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0Jdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSAtIHB0X3NpemUsCi0JCQkJICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKLQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0gPSBQQUdFX1RBQkxFX01FTVNMT1Q7Ci0KLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtJmd0O3NyY190eXBlLCBkYXRhX2dwYSwgVEVTVF9EQVRBX01FTVNMT1QsCi0JCQkJICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKLQkJCQkgICAgcC0mZ3Q7dGVzdF9kZXNjLSZndDtkYXRhX21lbXNsb3RfZmxhZ3MpOwotCXZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLSZndDtzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLAomIzQzOwkJCQkgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLAomIzQzOwkJCQkgcC0mZ3Q7dGVzdF9kZXNjLSZndDtwdF9tZW1zbG90X2ZsYWdzKTsKJiM0MzsKJiM0MzsJX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgcC0mZ3Q7c3JjX3R5cGUsIGRhdGFfZ3BhLAomIzQzOwkJCQkgVEVTVF9EQVRBX01FTVNMT1QsIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSwKJiM0MzsJCQkJIHAtJmd0O3Rlc3RfZGVzYy0mZ3Q7ZGF0YV9tZW1zbG90X2ZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMKaW5kZXggOWE2OWM0MzlhMGY4Zi4uYjRjNjUxZWEzODVkOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuYwpAQCAtMTY0LDggJiM0MzsxNjQsOCBAQCBzdGF0aWMgdm9pZCBzZXR1cF9tZW1zbG90KHZvaWQpCiAKIAlwYWdlcyA9IHN6IC8gdm0tJmd0O3BhZ2Vfc2l6ZTsKIAlncGFfYmFzZSA9ICgodm1fY29tcHV0ZV9tYXhfZ2ZuKHZtKSAmIzQzOyAxKSAqIHZtLSZndDtwYWdlX3NpemUpIC0gc3o7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgZ3BhX2Jhc2UsCi0JCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLAomIzQzOwkJCSAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYLCBwYWdlcyk7CiB9CiAKICNkZWZpbmUgTFBJX1BST1BfREVGQVVMVF9QUklPCTB4YTAKQEAgLTE5MSwyOCAmIzQzOzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZCkKIAlncGFfdCBjbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuZGV2aWNlX3RhYmxlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLAotCQkJCQkJICAgIGdwYV9iYXNlLAotCQkJCQkJICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7CiYjNDM7CQkJCQkJICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAKIAl0ZXN0X2RhdGEuY29sbGVjdGlvbl90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCQlncGFfYmFzZSwKLQkJCQkJCQlURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCQlNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCi0JY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSwKLQkJCQkgICAgICAgVEVTVF9NRU1TTE9UX0lOREVYKTsKJiM0MzsJY21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCXZpcnRfbWFwKHZtLCBjbWRxX2Jhc2UsIGNtZHFfYmFzZSwgcGFnZXNfcGVyXzY0ayk7CiAJdGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTsKIAl0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7CiAKIAl0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsCi0JCQkJCQkgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTsKIAogCXRlc3RfZGF0YS5scGlfcHJvcF90YWJsZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywKLQkJCQkJCSAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJY29uZmlndXJlX2xwaXMoKTsKIAogCXRlc3RfZGF0YS5scGlfcGVuZF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9jcHVzLAotCQkJCQkJICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpOwomIzQzOwkJCQkJCSAgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpOwogCiAJc3luY19nbG9iYWxfdG9fZ3Vlc3Qodm0sIHRlc3RfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaAppbmRleCA1YTdhNDU1YjUzODc1Li5mZmQ0Y2Y3NDBkN2ZhIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmgKQEAgLTMzLDYgJiM0MzszMyw4IEBACiAKICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMCiAKJiM0MzsjZGVmaW5lIEtWTV9JTlZBTElEX01FTVNMT1QgVUlOVF9NQVgKJiM0MzsKIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiB7CiAJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uOwogCXN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7CkBAIC04MCwxMSAmIzQzOzgyLDQzIEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMgewogCURFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGUKJiM0MzsgKiB2YXJpb3VzIHByb3BlcnRpZXMgYW5kIG1ldGFkYXRhIHJlbGF0ZWQgdG8gdGhlIGFsbG9jYXRpb24uICBOb3RlLCB0aGUKJiM0MzsgKiBkZXNjcmlwdGlvbnMgYmVsb3cgZGVzY3JpYmVkIHRoZSBwcmltYXJ5IHVzYWdlIG9mIGVhY2ggdHlwZS4gIEluZGl2aWR1YWwKJiM0MzsgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy4KJiM0MzsgKgomIzQzOyAqIEJ5IGRlZmF1bHQsIGFsbCByZWdpb25zIGFyZSBtYXBwZWQgdG8gbWVtc2xvdCAmIzM5OzAmIzM5Oy4gIFRlc3RzIGNhbiBvdmVycmlkZSB0aGUKJiM0MzsgKiBtZW1zbG90IGZvciBhbnkgb3IgYWxsIHR5cGVzLCBlLmcuIHNvIHRoYXQgYWxsIHRlc3QgZGF0YSBpcyBhbGxvY2F0ZWQgZnJvbSBhCiYjNDM7ICogY3VyYXRlZCBtZW1zbG90LgomIzQzOyAqLwogZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHsKJiM0MzsJLyoKJiM0MzsJICogVGhlIENPREUgcmVnaW9uIGlzIHVzZWQgYnkgbGliL2VsZiB3aGVuIGxvYWRpbmcgdGhlIHRlc3QmIzM5O3MgY29kZSBpbnRvCiYjNDM7CSAqIGd1ZXN0IG1lbW9yeS4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9DT0RFLAomIzQzOwkvKgomIzQzOwkgKiBUaGUgREFUQSByZWdpb24gaXMgdXNlZCB0byBhbGxvY2F0ZSBjb3JlIGRhdGEgc3RydWN0dXJlcywgZS5nLiB2Q1BVCiYjNDM7CSAqIHN0YWNrcywgVk0gZXhjZXB0aW9uIHRhYmxlcywgeDg2JiMzOTtzIFRTUywgZXRjLgomIzQzOwkgKi8KIAlNRU1fUkVHSU9OX0RBVEEsCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlCiYjNDM7CSAqIHRhYmxlIHBhZ2VzLgomIzQzOwkgKi8KIAlNRU1fUkVHSU9OX1BULAomIzQzOwkvKgomIzQzOwkgKiBUaGUgVEVTVF9EQVRBIHJlZ2lvbiBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIHRlc3QgZGF0YSB0aGF0IGlzIGVpdGhlcgomIzQzOwkgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJiMzOTt0IGNvbnNpZGVyZWQgYSAmIzM0O2NvcmUmIzM0OyBkYXRhIHN0cnVjdHVyZS4KJiM0MzsJICovCiAJTUVNX1JFR0lPTl9URVNUX0RBVEEsCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBURVNUX0VYVFJBIHJlZ2lvbiBpcyBmb3Igc3BlY2lhbCBzbm93Zmxha2VzLCB3aGVyZSBhIHRlc3Qgd2FudHMKJiM0MzsJICogdG8gY3JlYXRlIGFuZCB1c2UgYSBvbmUtb2ZmIG1lbXNsb3QsIHdpdGhvdXQgaW1wYWN0aW5nICYjMzQ7bm9ybWFsJiMzNDsgdGVzdAomIzQzOwkgKiBkYXRhIGFsbG9jYXRpb25zLgomIzQzOwkgKi8KJiM0MzsJTUVNX1JFR0lPTl9URVNUX0VYVFJBLAogCU5SX01FTV9SRUdJT05TLAogfTsKIApAQCAtMTI3LDExICYjNDM7MTYxLDYgQEAgc3RydWN0IGt2bV92bSB7CiAKIAlzdHJ1Y3Qga3ZtX2JpbmFyeV9zdGF0cyBzdGF0czsKIAotCS8qCi0JICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZQotCSAqIGFsbG9jYXRvcnMsIGUuZy4sIGxpYi9lbGYgdXNlcyB0aGUgbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXQotCSAqIG1lbXNsb3QuCi0JICovCiAJdTMyIG1lbXNsb3RzW05SX01FTV9SRUdJT05TXTsKIH07CiAKQEAgLTE2OSwxMyAmIzQzOzE5OCwxNCBAQCBtZW1zbG90MnJlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIG1lbXNsb3QpOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnZtX2dldF9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLAogCQkJCQkJCSAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpCiB7Ci0JYXNzZXJ0KHR5cGUgJmx0OyBOUl9NRU1fUkVHSU9OUyk7CiYjNDM7CVRFU1RfQVNTRVJUKHR5cGUgJmx0OyBOUl9NRU1fUkVHSU9OUywKJiM0MzsJCSAgICAmIzM0O0ludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICYjMzk7JXUmIzM5OyYjMzQ7LCB0eXBlKTsKIAlyZXR1cm4gbWVtc2xvdDJyZWdpb24odm0sIHZtLSZndDttZW1zbG90c1t0eXBlXSk7CiB9CiAKIC8qIE1pbmltdW0gYWxsb2NhdGVkIGd1ZXN0IHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3NlcyAqLwogI2RlZmluZSBLVk1fVVRJTF9NSU5fVkFERFIJCTB4MjAwMAotI2RlZmluZSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIJMHgxODAwMDAKJiM0MzsjZGVmaW5lIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUgkweDIwMDAwMAogCiAjZGVmaW5lIERFRkFVTFRfR1VFU1RfU1RBQ0tfVkFERFJfTUlOCTB4YWI2MDAwCiAjZGVmaW5lIERFRkFVTFRfU1RBQ0tfUEdTCQk1CkBAIC03MDIsNiAmIzQzOzczMiwzNiBAQCB2b2lkIHZtX21lbV9hZGQoc3RydWN0IGt2bV92bSAqdm0sIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsCiAJCWdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsIHUzMiBmbGFncywKIAkJaW50IGd1ZXN0X21lbWZkX2ZkLCB1NjQgZ3Vlc3RfbWVtZmRfb2Zmc2V0KTsKIAomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJCSAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLAomIzQzOwkJCQkJICAgICAgdTMyIHNsb3QpCiYjNDM7ewomIzQzOwlURVNUX0FTU0VSVCh2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwKJiM0MzsJCSAgICAmIzM0O01lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTsgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXUmIzM0OywKJiM0MzsJCSAgICB0eXBlLCB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0pOwomIzQzOwomIzQzOwl2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0gPSBzbG90OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLAomIzQzOwkJCQkJICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLAomIzQzOwkJCQkJICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsCiYjNDM7CQkJCQkgICAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcywKJiM0MzsJCQkJCSAgICB1MzIgZmxhZ3MpCiYjNDM7ewomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc2xvdCk7CiYjNDM7CXZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCBmbGFncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLAomIzQzOwkJCQkJICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwKJiM0MzsJCQkJCSAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSwKJiM0MzsJCQkJCSAgZ3BhX3QgZ3BhLCB1MzIgc2xvdCwgdTY0IG5wYWdlcykKJiM0Mzt7CiYjNDM7CV9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCAwKTsKJiM0Mzt9CiYjNDM7CiAjaWZuZGVmIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkKIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKQogewpAQCAtOTkwLDIzICYjNDM7MTA1MCw0MSBAQCB2b2lkIGt2bV9nc2lfcm91dGluZ193cml0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZyAqcm91dGluZyk7CiAKIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pOwogCi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpOwotZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sIGdwYV90IG1pbl9ncGEsCi0JCQkgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQpOwotZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSk7CiYjNDM7Ym9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKTsKJiM0MzsKJiM0MztncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsCiYjNDM7CQkJICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpOwomIzQzO2dwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsCiYjNDM7CQkJICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKTsKIAotc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sCi0JCQkJICAgICAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KQomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsCiYjNDM7CQkJCSAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSkKIHsKIAkvKgogCSAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnQKIAkgKiBwcm90ZWN0ZWQgbWVtb3J5LCBhcyB0aGUgbWFqb3JpdHkgb2YgbWVtb3J5IGZvciBzdWNoIFZNcyBpcwogCSAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi4KIAkgKi8KLQlyZXR1cm4gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG51bSwgbWluX2dwYSwgbWVtc2xvdCwKJiM0MzsJcmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgdHlwZSwKIAkJCQkgICAgdm1fYXJjaF9oYXNfcHJvdGVjdGVkX21lbW9yeSh2bSkpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwKJiM0MzsJCQkJICAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCB0eXBlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMpCiYjNDM7ewomIzQzOwlyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgTUVNX1JFR0lPTl9QVCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSkKJiM0Mzt7CiYjNDM7CXJldHVybiB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCAxKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogX19fX3ZtX2NyZWF0ZSgpIGRvZXMgS1ZNX0NSRUFURV9WTSBhbmQgbGl0dGxlIGVsc2UuICBfX3ZtX2NyZWF0ZSgpIGFsc28KICAqIGxvYWRzIHRoZSB0ZXN0IGJpbmFyeSBpbnRvIGd1ZXN0IG1lbW9yeSBhbmQgY3JlYXRlcyBhbiBJUlEgY2hpcCAoeDg2IG9ubHkpLgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUveDg2L3NtbS5oCmluZGV4IDJkMWFmYTA5ODE5YjAuLjE1ZmFhYTA2MDEyNjIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmgKQEAgLTgsNyAmIzQzOzgsNyBAQAogI2RlZmluZSBTTVJBTV9NRU1TTE9UCSgoMSAmbHQ7Jmx0OyAxNikgfCAxKQogI2RlZmluZSBTTVJBTV9QQUdFUwkoU01SQU1fU0laRSAvIFBBR0VfU0laRSkKIAotdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLAomIzQzO3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLAogCQkgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpOwogCiB2b2lkIGluamVjdF9zbWkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jCmluZGV4IDAxMzI1YmY0ZDM2ZmMuLjJkY2FhMmM0YTAzODMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuYwpAQCAtMTE1LDkgJiM0MzsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJaWYgKHZtLSZndDttbXUucGdkX2NyZWF0ZWQpCiAJCXJldHVybjsKIAotCXZtLSZndDttbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywKLQkJCQkJIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwKLQkJCQkJIHZtLSZndDttZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7CiYjNDM7CXZtLSZndDttbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpOwogCXZtLSZndDttbXUucGdkX2NyZWF0ZWQgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMKaW5kZXggOWRkYzA0N2Q1YzI3NS4uNTdiNjUzZmJkMGIxZiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtzeXMvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O3RpbWUuaCZndDsKICNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYWxpZ24uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKIAogI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOCTIKQEAgLTI4Nyw2ICYjNDM7Mjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSkKIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKQogewogCXN0cnVjdCBrdm1fdm0gKnZtOwomIzQzOwlpbnQgaTsKIAogCXZtID0gY2FsbG9jKDEsIHNpemVvZigqdm0pKTsKIAlURVNUX0FTU0VSVCh2bSAhPSBOVUxMLCAmIzM0O0luc3VmZmljaWVudCBNZW1vcnkmIzM0Oyk7CkBAIC0yOTUsNiAmIzQzOzI5Nyw4IEBAIHN0cnVjdCBrdm1fdm0gKl9fX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlKQogCXZtLSZndDtyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDsKIAl2bS0mZ3Q7cmVnaW9ucy5odmFfdHJlZSA9IFJCX1JPT1Q7CiAJaGFzaF9pbml0KHZtLSZndDtyZWdpb25zLnNsb3RfaGFzaCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9NRU1fUkVHSU9OUzsgaSYjNDM7JiM0MzspCiYjNDM7CQl2bS0mZ3Q7bWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UOwogCiAJdm0tJmd0O21vZGUgPSBzaGFwZS5tb2RlOwogCXZtLSZndDt0eXBlID0gc2hhcGUudHlwZTsKQEAgLTQ5MSw3ICYjNDM7NDk1LDcgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsCiAJCQkJCQkgbnJfZXh0cmFfcGFnZXMpOwogCXN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqc2xvdDA7CiAJc3RydWN0IGt2bV92bSAqdm07Ci0JaW50IGksIGZsYWdzOwomIzQzOwlpbnQgZmxhZ3M7CiAKIAlrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7CiAKQEAgLTUwOSw4ICYjNDM7NTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLAogCQlmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEOwogCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpICZsdDsgTlJfTUVNX1JFR0lPTlM7IGkmIzQzOyYjNDM7KQotCQl2bS0mZ3Q7bWVtc2xvdHNbaV0gPSAwOwomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApOwomIzQzOwlfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCAwKTsKIAogCWt2bV92bV9lbGZfbG9hZCh2bSwgcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUpOwogCkBAIC0xMTg5LDYgJiM0MzsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KQogewogCXN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uOwogCiYjNDM7CVRFU1RfQVNTRVJUKG1lbXNsb3QgIT0gS1ZNX0lOVkFMSURfTUVNU0xPVCwgJiMzNDt2bS0mZ3Q7bWVtc2xvdHNbXSB1bnBvcHVsYXRlZD8mIzM0Oyk7CiYjNDM7CiAJaGFzaF9mb3JfZWFjaF9wb3NzaWJsZSh2bS0mZ3Q7cmVnaW9ucy5zbG90X2hhc2gsIHJlZ2lvbiwgc2xvdF9ub2RlLAogCQkJICAgICAgIG1lbXNsb3QpCiAJCWlmIChyZWdpb24tJmd0O3JlZ2lvbi5zbG90ID09IG1lbXNsb3QpCkBAIC0xNDY1LDkgJiM0MzsxNDczLDcgQEAgc3RhdGljIGd2YV90IF9fX192bV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IHN6LCBndmFfdCBtaW5fZ3ZhLAogCXU2NCBwYWdlcyA9IChzeiAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdCkgJiM0MzsgKChzeiAlIHZtLSZndDtwYWdlX3NpemUpICE9IDApOwogCiAJdmlydF9wZ2RfYWxsb2Modm0pOwotCWdwYV90IGdwYSA9IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlcywKLQkJCQkJICAgS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLSZndDtwYWdlX3NpemUsCi0JCQkJCSAgIHZtLSZndDttZW1zbG90c1t0eXBlXSwgcHJvdGVjdGVkKTsKJiM0MzsJZ3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLCB0eXBlLCBwcm90ZWN0ZWQpOwogCiAJLyoKIAkgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0CkBAIC0yMDI1LDMzICYjNDM7MjAzMSwyMSBAQCBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKQogfQogCiAvKgotICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvcgotICoKLSAqIElucHV0IEFyZ3M6Ci0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lCi0gKiAgIG51bSAtIG51bWJlciBvZiBwYWdlcwotICogICBtaW5fZ3BhIC0gUGh5c2ljYWwgYWRkcmVzcyBtaW5pbXVtCi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbQotICogICBwcm90ZWN0ZWQgLSBUcnVlIGlmIHRoZSBwYWdlcyB3aWxsIGJlIHVzZWQgYXMgcHJvdGVjdGVkL3ByaXZhdGUgbWVtb3J5CiYjNDM7ICogQWxsb2NhdGUgY29udGlndW91cyAoZ3Vlc3QpIHBoeXNpY2FsIHBhZ2VzIGluIGEgZ2l2ZW4gbWVtb3J5IHJlZ2lvbiwgYXQgb3IKJiM0MzsgKiB0aGUgbWluaW11bSBzcGVjaWZpYyBHUEEuICBJZiB0aGUgbWVtb3J5IGlzIHByb3RlY3RlZC9wcml2YXRlLCBhbHNvIGFkZCB0aGUKJiM0MzsgKiBhbGxvY2F0ZSBwYWdlcyB0byB0aGUgcmVnaW9uJiMzOTtzIHNldCBvZiBwcm90ZWN0ZWQgcGFnZXMsIGUuZy4gc28gdGhhdCBhcmNoCiYjNDM7ICogY29kZSBrbm93cyB3aGljaCBwYWdlcyBuZWVkIHRvIGJlIGVuY3J5cHRlZCB3aGVuIGxhdW5jaGluZyB0aGUgVk0uCiAgKgotICogT3V0cHV0IEFyZ3M6IE5vbmUKLSAqCi0gKiBSZXR1cm46Ci0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3MKLSAqCi0gKiBXaXRoaW4gdGhlIFZNIHNwZWNpZmllZCBieSB2bSwgbG9jYXRlcyBhIHJhbmdlIG9mIGF2YWlsYWJsZSBwaHlzaWNhbAotICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZQotICogYW5kIHRoZWlyIGJhc2UgYWRkcmVzcyBpcyByZXR1cm5lZC4gQSBURVNUX0FTU0VSVCBmYWlsdXJlIG9jY3VycyBpZgotICogbm90IGVub3VnaCBwYWdlcyBhcmUgYXZhaWxhYmxlIGF0IG9yIGFib3ZlIG1pbl9ncGEuCiYjNDM7ICogTm90ZSwgc3VjY2VzcyBpcyBndWFyYW50ZWVkIQogICovCi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSwKLQkJCSAgIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90LAotCQkJICAgYm9vbCBwcm90ZWN0ZWQpCiYjNDM7Z3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLAomIzQzOwkJCSAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKQogewomIzQzOwlzaXplX3QgYWxpZ25tZW50ID0gbmF0dXJhbGx5X2FsaWduZWQgPyBucl9wYWdlcyA6IDE7CiAJc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247CiAJc3BhcnNlYml0X2lkeF90IHBnLCBiYXNlOwogCi0JVEVTVF9BU1NFUlQobnVtICZndDsgMCwgJiMzNDtNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlJiMzNDspOwomIzQzOwlURVNUX0FTU0VSVChucl9wYWdlcywgJiMzNDtNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlJiMzNDspOwogCiAJVEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS0mZ3Q7cGFnZV9zaXplKSA9PSAwLCAmIzM0O01pbiBwaHlzaWNhbCBhZGRyZXNzICYjMzQ7CiAJCSYjMzQ7bm90IGRpdmlzaWJsZSBieSBwYWdlIHNpemUuXG4mIzM0OwpAQCAtMjA2Miw0MyAmIzQzOzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sCiAJVEVTVF9BU1NFUlQoIXByb3RlY3RlZCB8fCByZWdpb24tJmd0O3Byb3RlY3RlZF9waHlfcGFnZXMsCiAJCSAgICAmIzM0O1JlZ2lvbiBkb2VzbiYjMzk7dCBzdXBwb3J0IHByb3RlY3RlZCBtZW1vcnkmIzM0Oyk7CiAKLQliYXNlID0gcGcgPSBtaW5fZ3BhICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0OwotCWRvIHsKLQkJZm9yICg7IHBnICZsdDsgYmFzZSAmIzQzOyBudW07ICYjNDM7JiM0MztwZykgewotCQkJaWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi0mZ3Q7dW51c2VkX3BoeV9wYWdlcywgcGcpKSB7Ci0JCQkJYmFzZSA9IHBnID0gc3BhcnNlYml0X25leHRfc2V0KHJlZ2lvbi0mZ3Q7dW51c2VkX3BoeV9wYWdlcywgcGcpOwotCQkJCWJyZWFrOwotCQkJfQomIzQzOwliYXNlID0gbWluX2dwYSAmZ3Q7Jmd0OyB2bS0mZ3Q7cGFnZV9zaGlmdDsKJiM0MzthZ2FpbjoKJiM0MzsJYmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7CiYjNDM7CWZvciAocGcgPSBiYXNlOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnJfcGFnZXM7ICYjNDM7JiM0MztwZykgewomIzQzOwkJaWYgKCFzcGFyc2ViaXRfaXNfc2V0KHJlZ2lvbi0mZ3Q7dW51c2VkX3BoeV9wYWdlcywgcGcpKSB7CiYjNDM7CQkJYmFzZSA9IHNwYXJzZWJpdF9uZXh0X3NldChyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKTsKJiM0MzsJCQlpZiAoIWJhc2UpCiYjNDM7CQkJCWdvdG8gZW5vbWVtOwomIzQzOwkJCWdvdG8gYWdhaW47CiAJCX0KLQl9IHdoaWxlIChwZyAmYW1wOyZhbXA7IHBnICE9IGJhc2UgJiM0MzsgbnVtKTsKLQotCWlmIChwZyA9PSAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAmIzM0O05vIGd1ZXN0IHBoeXNpY2FsIHBhZ2UgYXZhaWxhYmxlLCAmIzM0OwotCQkJJiMzNDttaW5fZ3BhOiAweCVseCBwYWdlX3NpemU6IDB4JXggbWVtc2xvdDogJXVcbiYjMzQ7LAotCQkJbWluX2dwYSwgdm0tJmd0O3BhZ2Vfc2l6ZSwgbWVtc2xvdCk7Ci0JCWZwdXRzKCYjMzQ7LS0tLSB2bSBkdW1wIC0tLS1cbiYjMzQ7LCBzdGRlcnIpOwotCQl2bV9kdW1wKHN0ZGVyciwgdm0sIDIpOwotCQlhYm9ydCgpOwogCX0KIAotCWZvciAocGcgPSBiYXNlOyBwZyAmbHQ7IGJhc2UgJiM0MzsgbnVtOyAmIzQzOyYjNDM7cGcpIHsKJiM0MzsJZm9yIChwZyA9IGJhc2U7IHBnICZsdDsgYmFzZSAmIzQzOyBucl9wYWdlczsgJiM0MzsmIzQzO3BnKSB7CiAJCXNwYXJzZWJpdF9jbGVhcihyZWdpb24tJmd0O3VudXNlZF9waHlfcGFnZXMsIHBnKTsKIAkJaWYgKHByb3RlY3RlZCkKIAkJCXNwYXJzZWJpdF9zZXQocmVnaW9uLSZndDtwcm90ZWN0ZWRfcGh5X3BhZ2VzLCBwZyk7CiAJfQogCiAJcmV0dXJuIGJhc2UgKiB2bS0mZ3Q7cGFnZV9zaXplOwomIzQzOwomIzQzO2Vub21lbToKJiM0MzsJZnByaW50ZihzdGRlcnIsICYjMzQ7Tm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxuJiMzNDssCiYjNDM7CQltaW5fZ3BhLCB2bS0mZ3Q7cGFnZV9zaXplLCBtZW1zbG90KTsKJiM0MzsJZnB1dHMoJiMzNDstLS0tIHZtIGR1bXAgLS0tLVxuJiMzNDssIHN0ZGVycik7CiYjNDM7CXZtX2R1bXAoc3RkZXJyLCB2bSwgMik7CiYjNDM7CWFib3J0KCk7CiYjNDM7CV9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOwogfQogCi1ncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpCiYjNDM7X193ZWFrIGJvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCkKIHsKLQlyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCBtaW5fZ3BhLCBtZW1zbG90KTsKJiM0MzsJcmV0dXJuIGZhbHNlOwogfQogCi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKQomIzQzO2dwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsCiYjNDM7CQkJICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsIGJvb2wgcHJvdGVjdGVkKQogewotCXJldHVybiB2bV9waHlfcGFnZV9hbGxvYyh2bSwgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLAotCQkJCSB2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pOwomIzQzOwlzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbiA9IHZtX2dldF9tZW1fcmVnaW9uKHZtLCB0eXBlKTsKJiM0MzsJYm9vbCBuYXR1cmFsbHlfYWxpZ25lZCA9IGZhbHNlOwomIzQzOwlncGFfdCBtaW5fZ3BhOwomIzQzOwomIzQzOwlURVNUX0FTU0VSVChyZWdpb24sICYjMzQ7Tm8gcmVnaW9uIGZvciB0eXBlICYjMzk7JXUmIzM5OywgbWVtc2xvdCAmIzM5OyV1JiMzOTsmIzM0OywKJiM0MzsJCSAgICB0eXBlLCB2bS0mZ3Q7bWVtc2xvdHNbdHlwZV0pOwomIzQzOwomIzQzOwlzd2l0Y2ggKHR5cGUpIHsKJiM0MzsJY2FzZSBNRU1fUkVHSU9OX0NPREU6CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9EQVRBOgomIzQzOwljYXNlIE1FTV9SRUdJT05fVEVTVF9EQVRBOgomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHRoZSByZWdpb24gaXMgYmFja2VkIGJ5IHRoZSBkZWZhdWx0IG1lbXNsb3QgKGlkPTApLCB1c2UKJiM0MzsJCSAqIHNlbGZ0ZXN0cyYjMzk7IGhhcmRjb2RlZCBtaW5pbXVtIFBGTiwgb3RoZXJ3aXNlIHVzZSB0aGUgYmFzZSBvZgomIzQzOwkJICogdGhlIGN1c3RvbSBtZW1vcnkgc2xvdCB0aGF0IGJhY2tzIHRoZSByZWdpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghdm0tJmd0O21lbXNsb3RzW3R5cGVdKQomIzQzOwkJCW1pbl9ncGEgPSBLVk1fVVRJTF9NSU5fUEZOICogdm0tJmd0O3BhZ2Vfc2l6ZTsKJiM0MzsJCWVsc2UKJiM0MzsJCQltaW5fZ3BhID0gcmVnaW9uLSZndDtyZWdpb24uZ3Vlc3RfcGh5c19hZGRyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgTUVNX1JFR0lPTl9QVDoKJiM0MzsJCW1pbl9ncGEgPSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFI7CiYjNDM7CQluYXR1cmFsbHlfYWxpZ25lZCA9IGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBNRU1fUkVHSU9OX1RFU1RfRVhUUkE6CiYjNDM7CQltaW5fZ3BhID0gcmVnaW9uLSZndDtyZWdpb24uZ3Vlc3RfcGh5c19hZGRyOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlURVNUX0ZBSUwoJiMzNDtJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAmIzM5OyV1JiMzOTsmIzM0OywgdHlwZSk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLSZndDttZW1zbG90c1t0eXBlXSwKJiM0MzsJCQkJICAgICAgcHJvdGVjdGVkLCBuYXR1cmFsbHlfYWxpZ25lZCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jCmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jCkBAIC05LDcgJiM0Mzs5LDYgQEAKICNpbmNsdWRlICYjMzQ7cHJvY2Vzc29yLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt1Y2FsbF9jb21tb24uaCYjMzQ7CiAKLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU4JCTB4MjAwMDAwCiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU4JCTB4MjAwMDAwCiAKIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07CkBAIC01Nyw5ICYjNDM7NTYsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJY2hpbGQgPSB0YWJsZSA9IDA7CiAJZm9yIChpID0gMDsgaSAmbHQ7IHZtLSZndDttbXUucGd0YWJsZV9sZXZlbHM7IGkmIzQzOyYjNDM7KSB7CiAJCWludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkOwotCQl0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTiwKLQkJCQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pOwotCQlURVNUX0FTU0VSVCh0YWJsZSwgJiMzNDtGYWlsIHRvIGFsbG9jYXRlIHBhZ2UgdGFsZSBhdCBsZXZlbCAlZFxuJiMzNDssIGkpOwomIzQzOwkJdGFibGUgPSB2bV9hbGxvY19wYWdlX3RhYmxlKHZtKTsKIAkJdmlydF9zZXRfcGd0YWJsZSh2bSwgdGFibGUsIGNoaWxkKTsKIAkJY2hpbGQgPSB0YWJsZTsKIAl9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYwppbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmMKQEAgLTY5LDkgJiM0Mzs2OSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSkKIAlpZiAodm0tJmd0O21tdS5wZ2RfY3JlYXRlZCkKIAkJcmV0dXJuOwogCi0Jdm0tJmd0O21tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLAotCQkJCQkgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLAotCQkJCQkgdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKJiM0MzsJdm0tJmd0O21tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7CiAJdm0tJmd0O21tdS5wZ2RfY3JlYXRlZCA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuYwppbmRleCBhOWFkYjM3ODJiMzUyLi4zM2Y0OWQ3NDNiNWZkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9zMzkwL3Byb2Nlc3Nvci5jCkBAIC0yMCw5ICYjNDM7MjAsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pCiAJaWYgKHZtLSZndDttbXUucGdkX2NyZWF0ZWQpCiAJCXJldHVybjsKIAotCWdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTiwKLQkJCQkgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsCi0JCQkJICAgdm0tJmd0O21lbXNsb3RzW01FTV9SRUdJT05fUFRdKTsKJiM0MzsJZ3BhID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgUEFHRVNfUEVSX1JFR0lPTik7CiAJbWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLSZndDtwYWdlX3NpemUpOwogCiAJdm0tJmd0O21tdS5wZ2QgPSBncGE7CkBAIC0zOCw4ICYjNDM7MzYsNyBAQCBzdGF0aWMgdTY0IHZpcnRfYWxsb2NfcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgcmkpCiB7CiAJdTY0IHRhZGRyOwogCi0JdGFkZHIgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sICByaSAmbHQ7IDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSwKLQkJCQkgICBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsIDApOwomIzQzOwl0YWRkciA9IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXModm0sIHJpICZsdDsgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxKTsKIAltZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS0mZ3Q7cGFnZV9zaXplKTsKIAogCXJldHVybiAodGFkZHIgJmFtcDsgUkVHSU9OX0VOVFJZX09SSUdJTikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmMKQEAgLTUyOSw3ICYjNDM7NTI5LDEwIEBAIHZvaWQgdGRwX2lkZW50aXR5X21hcF9kZWZhdWx0X21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKQogCiAJLyogT25seSBtZW1zbG90IDAgaXMgbWFwcGVkIGhlcmUsIGVuc3VyZSBpdCYjMzk7cyB0aGUgb25seSBvbmUgYmVpbmcgdXNlZCAqLwogCWZvciAocyA9IDA7IHMgJmx0OyBOUl9NRU1fUkVHSU9OUzsgcyYjNDM7JiM0MzspCi0JCVRFU1RfQVNTRVJUX0VRKHZtLSZndDttZW1zbG90c1tzXSwgMCk7CiYjNDM7CQlURVNUX0FTU0VSVCghdm0tJmd0O21lbXNsb3RzW3NdIHx8CiYjNDM7CQkJICAgIHZtLSZndDttZW1zbG90c1tzXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULAomIzQzOwkJCSAgICAmIzM0O1VuaGFuZGxlZCBtZW1zbG90ICYjMzk7JXUmIzM5OyBmb3IgdHlwZSAmIzM5OyV1JiMzOTsmIzM0OywKJiM0MzsJCQkgICAgdm0tJmd0O21lbXNsb3RzW3NdLCBzKTsKIAogCWkgPSAocmVnaW9uLSZndDtyZWdpb24uZ3Vlc3RfcGh5c19hZGRyICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0KSAtIDE7CiAJbGFzdCA9IGkgJiM0MzsgKHJlZ2lvbi0mZ3Q7cmVnaW9uLm1lbW9yeV9zaXplICZndDsmZ3Q7IHZtLSZndDtwYWdlX3NoaWZ0KTsKQEAgLTE0NjUsMTMgJiM0MzsxNDY4LDEzIEBAIGJvb2wga3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCh2b2lkKQogCXJldHVybiB0cnVlOwogfQogCi12b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzbXJhbV9ncGEsCiYjNDM7dm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsCiAJCSBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSkKIHsKLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsCi0JCQkJICAgIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTLCAwKTsKLQlURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBzbXJhbV9ncGEsCi0JCQkJICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSwKJiM0MzsJdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkgICAgICAgc21yYW1fZ3BhLCBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUyk7CiYjNDM7CiYjNDM7CVRFU1RfQVNTRVJUKHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgU01SQU1fUEFHRVMsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSkgPT0gc21yYW1fZ3BhLAogCQkgICAgJiMzNDtDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTSYjMzQ7KTsKIAogCW1lbXNldChhZGRyX2dwYTJodmEodm0sIHNtcmFtX2dwYSksIDB4MCwgU01SQU1fU0laRSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCmluZGV4IGUxMjk5NjExYmUzMjIuLjg0NGVhOWI3YmI0MWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jCkBAIC0zMzksNyAmIzQzOzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsCiAJCWlmIChzbG90ID09IGRhdGEtJmd0O25zbG90cykKIAkJCW5wYWdlcyAmIzQzOz0gcmVtcGFnZXM7CiAKLQkJZ3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtJmd0O3ZtLCBucGFnZXMsIGd1ZXN0X2FkZHIsIHNsb3QpOwomIzQzOwkJZ3BhID0gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhkYXRhLSZndDt2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90LAomIzQzOwkJCQkJICAgICBmYWxzZSwgZmFsc2UpOwogCQlURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkciwKIAkJCSAgICAmIzM0O3ZtX3BoeV9wYWdlc19hbGxvYygpIGZhaWxlZCYjMzQ7KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYwppbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYwpAQCAtMTAyLDI0ICYjNDM7MTAyLDE3IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2RpcnR5X3Rlc3RfZGF0YSh2b2lkKQogCiBzdGF0aWMgdm9pZCBjcmVhdGVfbWFpbl9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKQogewotCWludCBpOwotCiAJdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgTUFJTl9QQUdFX0NPVU5ULCAwKTsKLQkvKiBzZXQgdGhlIGFycmF5IG9mIG1lbXNsb3RzIHRvIHplcm8gbGlrZSBfX3ZtX2NyZWF0ZSBkb2VzICovCi0JZm9yIChpID0gMDsgaSAmbHQ7IE5SX01FTV9SRUdJT05TOyBpJiM0MzsmIzQzOykKLQkJdm0tJmd0O21lbXNsb3RzW2ldID0gMDsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7CiYjNDM7CV9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTsKJiM0MzsJX19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyZWF0ZV90ZXN0X21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pCiB7Ci0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLAotCQkJCSAgICBWTV9NRU1fU1JDX0FOT05ZTU9VUywKLQkJCQkgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiAmbHQ7Jmx0OyB2bS0mZ3Q7cGFnZV9zaGlmdCwKLQkJCQkgICAgVEVTVF9EQVRBX01FTVNMT1QsCi0JCQkJICAgIFRFU1RfREFUQV9QQUdFX0NPVU5ULAotCQkJCSAgICAwCi0JCQkJICAgKTsKLQl2bS0mZ3Q7bWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7CiYjNDM7CXZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywKJiM0MzsJCQkgICAgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiAmbHQ7Jmx0OyB2bS0mZ3Q7cGFnZV9zaGlmdCwKJiM0MzsJCQkgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTsKIH0KIAogc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMKaW5kZXggZjM4MzkyODRhYzA4MS4uY2QyNmNjMWFlZDgwMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jCkBAIC0zNiw3ICYjNDM7MzYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0KHZvaWQpCiAJfTsKIAogCXZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoJmFtcDt2Y3B1LCBndWVzdF9jb2RlKTsKLQltZW0gPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCk7CiYjNDM7CW1lbSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCwgZmFsc2UsIGZhbHNlKTsKIAogCXJvdXRpbmcgPSBrdm1fZ3NpX3JvdXRpbmdfY3JlYXRlKCk7CiAJcm91dGluZy0mZ3Q7bnIgPSAxOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMKaW5kZXggZGZmZTk2NTRmNDViZC4uYmZhNWFjOGNlMDI5NSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jCkBAIC0xMTYsMTUgJiM0MzsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsCiAKIAl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpOwogCi0Jdm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsCi0JCQkJICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsCi0JCQkJICAgIE1FTV9SRUdJT05fU0laRSAvIGdldHBhZ2VzaXplKCksIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCwKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCwKJiM0MzsJCQkgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIGFuZCBtYXAgdHdvIHBhZ2VzIHNvIHRoYXQgdGhlIEdQQSBhY2Nlc3NlZCBieSBndWVzdF9jb2RlKCkKIAkgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS4KIAkgKi8KLQlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QpOwomIzQzOwlncGEgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJVEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCAmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2NcbiYjMzQ7KTsKIAogCXZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9HUEEsIDIpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmMKaW5kZXggM2RjYTg1ZTk1NDc4MS4uOGQxODIyNzE3YWJkYyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jCkBAIC02MiwxMSAmIzQzOzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJVEVTVF9BU1NFUlQocmMsICYjMzQ7S1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlJiMzNDspOwogCXZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSwgMSk7CiAKLQl2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLAotCQkJCSAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULAotCQkJCSAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsIDApOwomIzQzOwl2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLAomIzQzOwkJCSAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULAomIzQzOwkJCSAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUpOwomIzQzOwogCWdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLAotCQkJCSBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTsKJiM0MzsJCQkJIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7CiAJVEVTVF9BU1NFUlQoZ3BhID09IE1FTV9SRUdJT05fR1BBLCAmIzM0O0ZhaWxlZCB2bV9waHlfcGFnZXNfYWxsb2MmIzM0Oyk7CiAJdmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1ZBLCBNRU1fUkVHSU9OX0dQQSwgMSk7CiAJaHZhID0gYWRkcl9ncGEyaHZhKHZtLCBNRU1fUkVHSU9OX0dQQSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDIzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjg5CgkJCQkJCQlvdXRwdXQ6IDc2CgkJCQkJCQl0aG91Z2h0czogOTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyAqZnVuY3Rpb25hbCogY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYC4gIEhhbmcgb24sIHRoYXQmIzM5O3MgdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkhIEkga25vdyB0aG9zZSBhcmUgKnBhcnQqIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRlY2huaWNhbGx5LCBidXQgdGhleSYjMzk7cmUgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMsIG5vdCBrZXJuZWwgY29kZS4gVGhleSBydW4gKm9uIHRvcCogb2YgdGhlIGtlcm5lbCB0byB2ZXJpZnkgaXRzIGJlaGF2aW9yLiAgQ2hhbmdlcyB0aGVyZSB3b24mIzM5O3QgZGlyZWN0bHkgYWx0ZXIga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLgoKTm93LCBsZXQmIzM5O3MgY29uc3VsdCB0aGUgcHJvdmlkZWQgZ3VpZGVsaW5lcy4gVGhlIGluc3RydWN0aW9ucyBleHBsaWNpdGx5IGxpc3Qgc2NlbmFyaW9zIHdoZXJlIHdlIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIEl0IGNvdmVycyB0aGluZ3MgbGlrZSBkb2N1bWVudGF0aW9uLCBjb21tZW50cywgbG9nZ2luZywgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVycyB0aGF0IGFyZW4mIzM5O3QgZW11bGF0ZWQuICBJdCBkb2VzbiYjMzk7dCAqZXhwbGljaXRseSogbWVudGlvbiBgdG9vbHMvYCwgYnV0IG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjaGFuZ2VzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgKGUuZy4sIHNlbGZ0ZXN0cywgcGVyZiwgYnBmKSBnZW5lcmFsbHkgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGl0c2VsZjsgdGhleSYjMzk7cmUgdXNlci1zcGFjZSB0b29scy4KCkxvb2tpbmcgYXQgdGhlIG9wcG9zaXRlIGNhc2UsIHRoZSBndWlkZWxpbmVzIHN0YXRlIHRoYXQgaWYgdGhlIHBhdGNoIG1vZGlmaWVzICpyZWFjaGFibGUqIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nICpvbmx5KiB3aXRoIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYCwgdGhpcyBjb25kaXRpb24gaXNuJiMzOTt0IG1ldC4gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogbW9kaWZ5IGNvcmUga2VybmVsIGNvbXBvbmVudHMuIFRoZXJlZm9yZSwgaXQmIzM5O3MgdmVyeSBsaWtlbHkgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlIGxpc3QgZnJvbSB0aGUgcGF0Y2guICBBaCwgeWVzLCBpdCYjMzk7cyBleGNsdXNpdmVseSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2A6CgotIGBhcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY2AKLSBgYXJtNjQvdmdpY19scGlfc3RyZXNzLmNgCi0gYGluY2x1ZGUva3ZtX3V0aWwuaGAKLSBgaW5jbHVkZS94ODYvc21tLmhgCi0gYGxpYi9hcm02NC9wcm9jZXNzb3IuY2AKLSBgbGliL2t2bV91dGlsLmNgCi0gYGxpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNgCi0gYGxpYi9yaXNjdi9wcm9jZXNzb3IuY2AKLSBgbGliL3MzOTAvcHJvY2Vzc29yLmNgCi0gYGxpYi94ODYvcHJvY2Vzc29yLmNgCi0gYG1lbXNsb3RfcGVyZl90ZXN0LmNgCi0gYHMzOTAvY21tYV90ZXN0LmNgCi0gYHMzOTAvaXJxX3JvdXRpbmcuY2AKLSBgc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jYAotIGB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNgCgpZdXAsIGl0JiMzOTtzIGFsbCBzZWxmdGVzdHMuIFRoZXNlIGFyZSAqdXNlcnNwYWNlKiB0ZXN0IHByb2dyYW1zLCBub3Qga2VybmVsIGNvZGUuIFRoZXkgZG9uJiMzOTt0IHJ1biBpbnNpZGUgdGhlIGtlcm5lbC4gIFNvLCBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgb2YgdGhlIHBhdGNoJiMzOTtzIHNjb3BlIGFuZCB0aGUgZ3VpZGVsaW5lcywgYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpJIHdpbGwgbm93IGNhbGwgc2V0LXJlc3VsdHMgd2l0aCBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzIChLVk0gc2VsZnRlc3RzKSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAyMzoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MDMuNzIxNTc1NDc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NzgyMTg0ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzIChLVk0gc2VsZnRlc3RzKSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MDMuNzIxNTgyNDA3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTQ1MTI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyMjBhNTljODEwY2U2YWZjNGM1Y2Q3ZTMxM2IxMjQyMDAzZDkyZjIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDIzOjEyOjAyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3BhZ2VfZmF1bHRfdGVzdC5jXFxuQEAgLTU5NywxOCArNTk3LDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3QgdGVzdF9wYXJhbXMgKnApXFxuIFxcbiBcXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLFxcbiBcXHRcXHRcXHRcXHQgICAgQ09ERV9BTkRfREFUQV9NRU1TTE9ULCBjb2RlX25wYWdlcywgMCk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdID0gQ09ERV9BTkRfREFUQV9NRU1TTE9UO1xcbi1cXHR2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9EQVRBXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcXG4tXFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgIFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXRlc3RfZGVzYy1cXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XFxuLVxcdHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSA9IFBBR0VfVEFCTEVfTUVNU0xPVDtcXG4tXFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLCBURVNUX0RBVEFfTUVNU0xPVCxcXG4tXFx0XFx0XFx0XFx0ICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0ICAgIHAtXFx1MDAzZXRlc3RfZGVzYy1cXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcXG4tXFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9EQVRBLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xcbitcXG4rXFx0X192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCBwLVxcdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxcbitcXHRcXHRcXHRcXHQgUEFHRV9UQUJMRV9NRU1TTE9ULCBwdF9zaXplIC8gZ3Vlc3RfcGFnZV9zaXplLFxcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNldGVzdF9kZXNjLVxcdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcXG4rXFxuK1xcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXFx1MDAzZXNyY190eXBlLCBkYXRhX2dwYSxcXG4rXFx0XFx0XFx0XFx0IFRFU1RfREFUQV9NRU1TTE9ULCBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXFxuK1xcdFxcdFxcdFxcdCBwLVxcdTAwM2V0ZXN0X2Rlc2MtXFx1MDAzZWRhdGFfbWVtc2xvdF9mbGFncyk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHNldHVwX3VjYWxsKHN0cnVjdCBrdm1fdm0gKnZtKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcXG5pbmRleCA5YTY5YzQzOWEwZjhmLi5iNGM2NTFlYTM4NWQ4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC92Z2ljX2xwaV9zdHJlc3MuY1xcbkBAIC0xNjQsOCArMTY0LDggQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxcbiBcXG4gXFx0cGFnZXMgPSBzeiAvIHZtLVxcdTAwM2VwYWdlX3NpemU7XFxuIFxcdGdwYV9iYXNlID0gKCh2bV9jb21wdXRlX21heF9nZm4odm0pICsgMSkgKiB2bS1cXHUwMDNlcGFnZV9zaXplKSAtIHN6O1xcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBncGFfYmFzZSxcXG4tXFx0XFx0XFx0XFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMsIDApO1xcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCwgcGFnZXMpO1xcbiB9XFxuIFxcbiAjZGVmaW5lIExQSV9QUk9QX0RFRkFVTFRfUFJJT1xcdDB4YTBcXG5AQCAtMTkxLDI4ICsxOTEsMjUgQEAgc3RhdGljIHZvaWQgc2V0dXBfdGVzdF9kYXRhKHZvaWQpXFxuIFxcdGdwYV90IGNtZHFfYmFzZTtcXG4gXFxuIFxcdHRlc3RfZGF0YS5kZXZpY2VfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBncGFfYmFzZSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXG4gXFx0dGVzdF9kYXRhLmNvbGxlY3Rpb25fdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdGdwYV9iYXNlLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHRURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXG4tXFx0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFRFU1RfTUVNU0xPVF9JTkRFWCk7XFxuK1xcdGNtZHFfYmFzZSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0aywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcXG4gXFx0dmlydF9tYXAodm0sIGNtZHFfYmFzZSwgY21kcV9iYXNlLCBwYWdlc19wZXJfNjRrKTtcXG4gXFx0dGVzdF9kYXRhLmNtZHFfYmFzZSA9IGNtZHFfYmFzZTtcXG4gXFx0dGVzdF9kYXRhLmNtZHFfYmFzZV92YSA9ICh2b2lkICopY21kcV9iYXNlO1xcbiBcXG4gXFx0dGVzdF9kYXRhLml0dF90YWJsZXMgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGsgKiBucl9kZXZpY2VzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbiBcXHR0ZXN0X2RhdGEubHBpX3Byb3BfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHRjb25maWd1cmVfbHBpcygpO1xcbiBcXG4gXFx0dGVzdF9kYXRhLmxwaV9wZW5kX3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2NwdXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XFxuIFxcbiBcXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdGVzdF9kYXRhKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbmluZGV4IDVhN2E0NTViNTM4NzUuLmZmZDRjZjc0MGQ3ZmEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcXG5AQCAtMzMsNiArMzMsOCBAQFxcbiBcXG4gI2RlZmluZSBOU0VDX1BFUl9TRUMgMTAwMDAwMDAwMExcXG4gXFxuKyNkZWZpbmUgS1ZNX0lOVkFMSURfTUVNU0xPVCBVSU5UX01BWFxcbitcXG4gc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uIHtcXG4gXFx0c3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbjIgcmVnaW9uO1xcbiBcXHRzdHJ1Y3Qgc3BhcnNlYml0ICp1bnVzZWRfcGh5X3BhZ2VzO1xcbkBAIC04MCwxMSArODIsNDMgQEAgc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9ucyB7XFxuIFxcdERFQ0xBUkVfSEFTSFRBQkxFKHNsb3RfaGFzaCwgOSk7XFxuIH07XFxuIFxcbisvKlxcbisgKiBNZW1vcnkgcmVnaW9uIHR5cGVzIGFyZSBwYXNzZWQgdG8gdmFyaW91cyBwYWdlIGFsbG9jYXRvcnMgdG8gY29tbXVuaWNhdGVcXG4rICogdmFyaW91cyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uLiAgTm90ZSwgdGhlXFxuKyAqIGRlc2NyaXB0aW9ucyBiZWxvdyBkZXNjcmliZWQgdGhlIHByaW1hcnkgdXNhZ2Ugb2YgZWFjaCB0eXBlLiAgSW5kaXZpZHVhbFxcbisgKiB0ZXN0cyBtYXkgYWxsb2NhdGUgbWVtb3J5IGZvciBvdGhlciBwdXJwb3Nlcy5cXG4rICpcXG4rICogQnkgZGVmYXVsdCwgYWxsIHJlZ2lvbnMgYXJlIG1hcHBlZCB0byBtZW1zbG90ICcwJy4gIFRlc3RzIGNhbiBvdmVycmlkZSB0aGVcXG4rICogbWVtc2xvdCBmb3IgYW55IG9yIGFsbCB0eXBlcywgZS5nLiBzbyB0aGF0IGFsbCB0ZXN0IGRhdGEgaXMgYWxsb2NhdGVkIGZyb20gYVxcbisgKiBjdXJhdGVkIG1lbXNsb3QuXFxuKyAqL1xcbiBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUge1xcbitcXHQvKlxcbitcXHQgKiBUaGUgQ09ERSByZWdpb24gaXMgdXNlZCBieSBsaWIvZWxmIHdoZW4gbG9hZGluZyB0aGUgdGVzdCdzIGNvZGUgaW50b1xcbitcXHQgKiBndWVzdCBtZW1vcnkuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX0NPREUsXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBEQVRBIHJlZ2lvbiBpcyB1c2VkIHRvIGFsbG9jYXRlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLCBlLmcuIHZDUFVcXG4rXFx0ICogc3RhY2tzLCBWTSBleGNlcHRpb24gdGFibGVzLCB4ODYncyBUU1MsIGV0Yy5cXG4rXFx0ICovXFxuIFxcdE1FTV9SRUdJT05fREFUQSxcXG4rXFx0LypcXG4rXFx0ICogVGhlIFBUIHJlZ2lvbiwgYS5rLmEuIFBhZ2UgVGFibGUgcmVnaW9uLCBpcyB1c2VkIHRvIGFsbG9jYXRlIHBhZ2VcXG4rXFx0ICogdGFibGUgcGFnZXMuXFxuK1xcdCAqL1xcbiBcXHRNRU1fUkVHSU9OX1BULFxcbitcXHQvKlxcbitcXHQgKiBUaGUgVEVTVF9EQVRBIHJlZ2lvbiBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIHRlc3QgZGF0YSB0aGF0IGlzIGVpdGhlclxcbitcXHQgKiB0ZXN0IHNwZWNpZmljLCBhbmQvb3IgaXNuJ3QgY29uc2lkZXJlZCBhIFxcXCJjb3JlXFxcIiBkYXRhIHN0cnVjdHVyZS5cXG4rXFx0ICovXFxuIFxcdE1FTV9SRUdJT05fVEVTVF9EQVRBLFxcbitcXHQvKlxcbitcXHQgKiBUaGUgVEVTVF9FWFRSQSByZWdpb24gaXMgZm9yIHNwZWNpYWwgc25vd2ZsYWtlcywgd2hlcmUgYSB0ZXN0IHdhbnRzXFxuK1xcdCAqIHRvIGNyZWF0ZSBhbmQgdXNlIGEgb25lLW9mZiBtZW1zbG90LCB3aXRob3V0IGltcGFjdGluZyBcXFwibm9ybWFsXFxcIiB0ZXN0XFxuK1xcdCAqIGRhdGEgYWxsb2NhdGlvbnMuXFxuK1xcdCAqL1xcbitcXHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEsXFxuIFxcdE5SX01FTV9SRUdJT05TLFxcbiB9O1xcbiBcXG5AQCAtMTI3LDExICsxNjEsNiBAQCBzdHJ1Y3Qga3ZtX3ZtIHtcXG4gXFxuIFxcdHN0cnVjdCBrdm1fYmluYXJ5X3N0YXRzIHN0YXRzO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZVxcbi1cXHQgKiBhbGxvY2F0b3JzLCBlLmcuLCBsaWIvZWxmIHVzZXMgdGhlIG1lbXNsb3RzW01FTV9SRUdJT05fQ09ERV1cXG4tXFx0ICogbWVtc2xvdC5cXG4tXFx0ICovXFxuIFxcdHUzMiBtZW1zbG90c1tOUl9NRU1fUkVHSU9OU107XFxuIH07XFxuIFxcbkBAIC0xNjksMTMgKzE5OCwxNCBAQCBtZW1zbG90MnJlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIG1lbXNsb3QpO1xcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUpXFxuIHtcXG4tXFx0YXNzZXJ0KHR5cGUgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XFxuK1xcdFRFU1RfQVNTRVJUKHR5cGUgXFx1MDAzYyBOUl9NRU1fUkVHSU9OUyxcXG4rXFx0XFx0ICAgIFxcXCJJbnZhbGlkIG1lbW9yeSByZWdpb24gdHlwZSAnJXUnXFxcIiwgdHlwZSk7XFxuIFxcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcXG4gfVxcbiBcXG4gLyogTWluaW11bSBhbGxvY2F0ZWQgZ3Vlc3QgdmlydHVhbCBhbmQgcGh5c2ljYWwgYWRkcmVzc2VzICovXFxuICNkZWZpbmUgS1ZNX1VUSUxfTUlOX1ZBRERSXFx0XFx0MHgyMDAwXFxuLSNkZWZpbmUgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSXFx0MHgxODAwMDBcXG4rI2RlZmluZSBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFJcXHQweDIwMDAwMFxcbiBcXG4gI2RlZmluZSBERUZBVUxUX0dVRVNUX1NUQUNLX1ZBRERSX01JTlxcdDB4YWI2MDAwXFxuICNkZWZpbmUgREVGQVVMVF9TVEFDS19QR1NcXHRcXHQ1XFxuQEAgLTcwMiw2ICs3MzIsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxcbiBcXHRcXHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXFxuIFxcdFxcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XFxuIFxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyIHNsb3QpXFxuK3tcXG4rXFx0VEVTVF9BU1NFUlQodm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdID09IEtWTV9JTlZBTElEX01FTVNMT1QsXFxuK1xcdFxcdCAgICBcXFwiTWVtb3J5IHJlZ2lvbiB0eXBlICcldScgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXVcXFwiLFxcbitcXHRcXHQgICAgdHlwZSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcXG4rXFxuK1xcdHZtLVxcdTAwM2VtZW1zbG90c1t0eXBlXSA9IHNsb3Q7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gdm1fbWVtX2JhY2tpbmdfc3JjX3R5cGUgc3JjX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgdTMyIGZsYWdzKVxcbit7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCB0eXBlLCBzbG90KTtcXG4rXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIGZsYWdzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzKVxcbit7XFxuK1xcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCAwKTtcXG4rfVxcbitcXG4gI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5XFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHN0cnVjdCBrdm1fdm0gKnZtKVxcbiB7XFxuQEAgLTk5MCwyMyArMTA1MCw0MSBAQCB2b2lkIGt2bV9nc2lfcm91dGluZ193cml0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZyAqcm91dGluZyk7XFxuIFxcbiBjb25zdCBjaGFyICpleGl0X3JlYXNvbl9zdHIodW5zaWduZWQgaW50IGV4aXRfcmVhc29uKTtcXG4gXFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCk7XFxuLWdwYV90IF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnVtLCBncGFfdCBtaW5fZ3BhLFxcbi1cXHRcXHRcXHQgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQpO1xcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKTtcXG4rYm9vbCBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcyh2b2lkKTtcXG4rXFxuK2dwYV90IF9fX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcywgZ3BhX3QgbWluX2dwYSxcXG4rXFx0XFx0XFx0ICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpO1xcbitncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxcbitcXHRcXHRcXHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpO1xcbiBcXG4tc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXFxuLVxcdFxcdFxcdFxcdCAgICAgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxcbiB7XFxuIFxcdC8qXFxuIFxcdCAqIEJ5IGRlZmF1bHQsIGFsbG9jYXRlIG1lbW9yeSBhcyBwcm90ZWN0ZWQgZm9yIFZNcyB0aGF0IHN1cHBvcnRcXG4gXFx0ICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXNcXG4gXFx0ICogcHJvdGVjdGVkLCBpLmUuIHVzaW5nIHNoYXJlZCBtZW1vcnkgaXMgZWZmZWN0aXZlbHkgb3B0LWluLlxcbiBcXHQgKi9cXG4tXFx0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsXFxuK1xcdHJldHVybiBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIHR5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5KHZtKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxcbit7XFxuK1xcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIHR5cGUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXMoc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcylcXG4re1xcbitcXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgTUVNX1JFR0lPTl9QVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4re1xcbitcXHRyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7XFxuK31cXG4rXFxuIC8qXFxuICAqIF9fX192bV9jcmVhdGUoKSBkb2VzIEtWTV9DUkVBVEVfVk0gYW5kIGxpdHRsZSBlbHNlLiAgX192bV9jcmVhdGUoKSBhbHNvXFxuICAqIGxvYWRzIHRoZSB0ZXN0IGJpbmFyeSBpbnRvIGd1ZXN0IG1lbW9yeSBhbmQgY3JlYXRlcyBhbiBJUlEgY2hpcCAoeDg2IG9ubHkpLlxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcXG5pbmRleCAyZDFhZmEwOTgxOWIwLi4xNWZhYWEwNjAxMjYyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxcbkBAIC04LDcgKzgsNyBAQFxcbiAjZGVmaW5lIFNNUkFNX01FTVNMT1RcXHQoKDEgXFx1MDAzY1xcdTAwM2MgMTYpIHwgMSlcXG4gI2RlZmluZSBTTVJBTV9QQUdFU1xcdChTTVJBTV9TSVpFIC8gUEFHRV9TSVpFKVxcbiBcXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxcbit2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcXG4gXFx0XFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKTtcXG4gXFxuIHZvaWQgaW5qZWN0X3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xcbmluZGV4IDAxMzI1YmY0ZDM2ZmMuLjJkY2FhMmM0YTAzODMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmNcXG5AQCAtMTE1LDkgKzExNSw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gXFx0aWYgKHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcXG4tXFx0XFx0XFx0XFx0XFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcXG4tXFx0XFx0XFx0XFx0XFx0IHZtLVxcdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSk7XFxuK1xcdHZtLVxcdTAwM2VtbXUucGdkID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgbnJfcGFnZXMpO1xcbiBcXHR2bS1cXHUwMDNlbW11LnBnZF9jcmVhdGVkID0gdHJ1ZTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9rdm1fdXRpbC5jXFxuaW5kZXggOWRkYzA0N2Q1YzI3NS4uNTdiNjUzZmJkMGIxZiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N0YXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3RpbWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYWxpZ24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tlcm5lbC5oXFx1MDAzZVxcbiBcXG4gI2RlZmluZSBLVk1fVVRJTF9NSU5fUEZOXFx0MlxcbkBAIC0yODcsNiArMjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGludCBpO1xcbiBcXG4gXFx0dm0gPSBjYWxsb2MoMSwgc2l6ZW9mKCp2bSkpO1xcbiBcXHRURVNUX0FTU0VSVCh2bSAhPSBOVUxMLCBcXFwiSW5zdWZmaWNpZW50IE1lbW9yeVxcXCIpO1xcbkBAIC0yOTUsNiArMjk3LDggQEAgc3RydWN0IGt2bV92bSAqX19fX3ZtX2NyZWF0ZShzdHJ1Y3Qgdm1fc2hhcGUgc2hhcGUpXFxuIFxcdHZtLVxcdTAwM2VyZWdpb25zLmdwYV90cmVlID0gUkJfUk9PVDtcXG4gXFx0dm0tXFx1MDAzZXJlZ2lvbnMuaHZhX3RyZWUgPSBSQl9ST09UO1xcbiBcXHRoYXNoX2luaXQodm0tXFx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXFxuK1xcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tpXSA9IEtWTV9JTlZBTElEX01FTVNMT1Q7XFxuIFxcbiBcXHR2bS1cXHUwMDNlbW9kZSA9IHNoYXBlLm1vZGU7XFxuIFxcdHZtLVxcdTAwM2V0eXBlID0gc2hhcGUudHlwZTtcXG5AQCAtNDkxLDcgKzQ5NSw3IEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgbnJfZXh0cmFfcGFnZXMpO1xcbiBcXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnNsb3QwO1xcbiBcXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcXG4tXFx0aW50IGksIGZsYWdzO1xcbitcXHRpbnQgZmxhZ3M7XFxuIFxcbiBcXHRrdm1fc2V0X2ZpbGVzX3JsaW1pdChucl9ydW5uYWJsZV92Y3B1cyk7XFxuIFxcbkBAIC01MDksOCArNTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxcbiBcXHRcXHRmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xcbiBcXG4gXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXFxuLVxcdFxcdHZtLVxcdTAwM2VtZW1zbG90c1tpXSA9IDA7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgMCk7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xcbitcXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIDApO1xcbiBcXG4gXFx0a3ZtX3ZtX2VsZl9sb2FkKHZtLCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSk7XFxuIFxcbkBAIC0xMTg5LDYgKzExOTUsOCBAQCBtZW1zbG90MnJlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgdTMyIG1lbXNsb3QpXFxuIHtcXG4gXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XFxuIFxcbitcXHRURVNUX0FTU0VSVChtZW1zbG90ICE9IEtWTV9JTlZBTElEX01FTVNMT1QsIFxcXCJ2bS1cXHUwMDNlbWVtc2xvdHNbXSB1bnBvcHVsYXRlZD9cXFwiKTtcXG4rXFxuIFxcdGhhc2hfZm9yX2VhY2hfcG9zc2libGUodm0tXFx1MDAzZXJlZ2lvbnMuc2xvdF9oYXNoLCByZWdpb24sIHNsb3Rfbm9kZSxcXG4gXFx0XFx0XFx0ICAgICAgIG1lbXNsb3QpXFxuIFxcdFxcdGlmIChyZWdpb24tXFx1MDAzZXJlZ2lvbi5zbG90ID09IG1lbXNsb3QpXFxuQEAgLTE0NjUsOSArMTQ3Myw3IEBAIHN0YXRpYyBndmFfdCBfX19fdm1fYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBzeiwgZ3ZhX3QgbWluX2d2YSxcXG4gXFx0dTY0IHBhZ2VzID0gKHN6IFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0KSArICgoc3ogJSB2bS1cXHUwMDNlcGFnZV9zaXplKSAhPSAwKTtcXG4gXFxuIFxcdHZpcnRfcGdkX2FsbG9jKHZtKTtcXG4tXFx0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBLVk1fVVRJTF9NSU5fUEZOICogdm0tXFx1MDAzZXBhZ2Vfc2l6ZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdLCBwcm90ZWN0ZWQpO1xcbitcXHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsIHR5cGUsIHByb3RlY3RlZCk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBGaW5kIGFuIHVudXNlZCByYW5nZSBvZiB2aXJ0dWFsIHBhZ2UgYWRkcmVzc2VzIG9mIGF0IGxlYXN0XFxuQEAgLTIwMjUsMzMgKzIwMzEsMjEgQEAgY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbilcXG4gfVxcbiBcXG4gLypcXG4tICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvclxcbi0gKlxcbi0gKiBJbnB1dCBBcmdzOlxcbi0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lXFxuLSAqICAgbnVtIC0gbnVtYmVyIG9mIHBhZ2VzXFxuLSAqICAgbWluX2dwYSAtIFBoeXNpY2FsIGFkZHJlc3MgbWluaW11bVxcbi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbVxcbi0gKiAgIHByb3RlY3RlZCAtIFRydWUgaWYgdGhlIHBhZ2VzIHdpbGwgYmUgdXNlZCBhcyBwcm90ZWN0ZWQvcHJpdmF0ZSBtZW1vcnlcXG4rICogQWxsb2NhdGUgY29udGlndW91cyAoZ3Vlc3QpIHBoeXNpY2FsIHBhZ2VzIGluIGEgZ2l2ZW4gbWVtb3J5IHJlZ2lvbiwgYXQgb3JcXG4rICogdGhlIG1pbmltdW0gc3BlY2lmaWMgR1BBLiAgSWYgdGhlIG1lbW9yeSBpcyBwcm90ZWN0ZWQvcHJpdmF0ZSwgYWxzbyBhZGQgdGhlXFxuKyAqIGFsbG9jYXRlIHBhZ2VzIHRvIHRoZSByZWdpb24ncyBzZXQgb2YgcHJvdGVjdGVkIHBhZ2VzLCBlLmcuIHNvIHRoYXQgYXJjaFxcbisgKiBjb2RlIGtub3dzIHdoaWNoIHBhZ2VzIG5lZWQgdG8gYmUgZW5jcnlwdGVkIHdoZW4gbGF1bmNoaW5nIHRoZSBWTS5cXG4gICpcXG4tICogT3V0cHV0IEFyZ3M6IE5vbmVcXG4tICpcXG4tICogUmV0dXJuOlxcbi0gKiAgIFN0YXJ0aW5nIHBoeXNpY2FsIGFkZHJlc3NcXG4tICpcXG4tICogV2l0aGluIHRoZSBWTSBzcGVjaWZpZWQgYnkgdm0sIGxvY2F0ZXMgYSByYW5nZSBvZiBhdmFpbGFibGUgcGh5c2ljYWxcXG4tICogcGFnZXMgYXQgb3IgYWJvdmUgbWluX2dwYS4gSWYgZm91bmQsIHRoZSBwYWdlcyBhcmUgbWFya2VkIGFzIGluIHVzZVxcbi0gKiBhbmQgdGhlaXIgYmFzZSBhZGRyZXNzIGlzIHJldHVybmVkLiBBIFRFU1RfQVNTRVJUIGZhaWx1cmUgb2NjdXJzIGlmXFxuLSAqIG5vdCBlbm91Z2ggcGFnZXMgYXJlIGF2YWlsYWJsZSBhdCBvciBhYm92ZSBtaW5fZ3BhLlxcbisgKiBOb3RlLCBzdWNjZXNzIGlzIGd1YXJhbnRlZWQhXFxuICAqL1xcbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcXG4tXFx0XFx0XFx0ICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QsXFxuLVxcdFxcdFxcdCAgIGJvb2wgcHJvdGVjdGVkKVxcbitncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXFxuK1xcdFxcdFxcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKVxcbiB7XFxuK1xcdHNpemVfdCBhbGlnbm1lbnQgPSBuYXR1cmFsbHlfYWxpZ25lZCA/IG5yX3BhZ2VzIDogMTtcXG4gXFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XFxuIFxcdHNwYXJzZWJpdF9pZHhfdCBwZywgYmFzZTtcXG4gXFxuLVxcdFRFU1RfQVNTRVJUKG51bSBcXHUwMDNlIDAsIFxcXCJNdXN0IGFsbG9jYXRlIGF0IGxlYXN0IG9uZSBwYWdlXFxcIik7XFxuK1xcdFRFU1RfQVNTRVJUKG5yX3BhZ2VzLCBcXFwiTXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVxcXCIpO1xcbiBcXG4gXFx0VEVTVF9BU1NFUlQoKG1pbl9ncGEgJSB2bS1cXHUwMDNlcGFnZV9zaXplKSA9PSAwLCBcXFwiTWluIHBoeXNpY2FsIGFkZHJlc3MgXFxcIlxcbiBcXHRcXHRcXFwibm90IGRpdmlzaWJsZSBieSBwYWdlIHNpemUuXFxcXG5cXFwiXFxuQEAgLTIwNjIsNDMgKzIwNTYsNzggQEAgZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXFxuIFxcdFRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLVxcdTAwM2Vwcm90ZWN0ZWRfcGh5X3BhZ2VzLFxcbiBcXHRcXHQgICAgXFxcIlJlZ2lvbiBkb2Vzbid0IHN1cHBvcnQgcHJvdGVjdGVkIG1lbW9yeVxcXCIpO1xcbiBcXG4tXFx0YmFzZSA9IHBnID0gbWluX2dwYSBcXHUwMDNlXFx1MDAzZSB2bS1cXHUwMDNlcGFnZV9zaGlmdDtcXG4tXFx0ZG8ge1xcbi1cXHRcXHRmb3IgKDsgcGcgXFx1MDAzYyBiYXNlICsgbnVtOyArK3BnKSB7XFxuLVxcdFxcdFxcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXFx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xcbi1cXHRcXHRcXHRcXHRiYXNlID0gcGcgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHR9XFxuK1xcdGJhc2UgPSBtaW5fZ3BhIFxcdTAwM2VcXHUwMDNlIHZtLVxcdTAwM2VwYWdlX3NoaWZ0O1xcbithZ2FpbjpcXG4rXFx0YmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7XFxuK1xcdGZvciAocGcgPSBiYXNlOyBwZyBcXHUwMDNjIGJhc2UgKyBucl9wYWdlczsgKytwZykge1xcbitcXHRcXHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVxcdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZykpIHtcXG4rXFx0XFx0XFx0YmFzZSA9IHNwYXJzZWJpdF9uZXh0X3NldChyZWdpb24tXFx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcXG4rXFx0XFx0XFx0aWYgKCFiYXNlKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVub21lbTtcXG4rXFx0XFx0XFx0Z290byBhZ2FpbjtcXG4gXFx0XFx0fVxcbi1cXHR9IHdoaWxlIChwZyBcXHUwMDI2XFx1MDAyNiBwZyAhPSBiYXNlICsgbnVtKTtcXG4tXFxuLVxcdGlmIChwZyA9PSAwKSB7XFxuLVxcdFxcdGZwcmludGYoc3RkZXJyLCBcXFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIFxcXCJcXG4tXFx0XFx0XFx0XFxcIm1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0bWluX2dwYSwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XFxuLVxcdFxcdGZwdXRzKFxcXCItLS0tIHZtIGR1bXAgLS0tLVxcXFxuXFxcIiwgc3RkZXJyKTtcXG4tXFx0XFx0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcXG4tXFx0XFx0YWJvcnQoKTtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChwZyA9IGJhc2U7IHBnIFxcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xcbitcXHRmb3IgKHBnID0gYmFzZTsgcGcgXFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcXG4gXFx0XFx0c3BhcnNlYml0X2NsZWFyKHJlZ2lvbi1cXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpO1xcbiBcXHRcXHRpZiAocHJvdGVjdGVkKVxcbiBcXHRcXHRcXHRzcGFyc2ViaXRfc2V0KHJlZ2lvbi1cXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gYmFzZSAqIHZtLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcbitlbm9tZW06XFxuK1xcdGZwcmludGYoc3RkZXJyLCBcXFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcXFxuXFxcIixcXG4rXFx0XFx0bWluX2dwYSwgdm0tXFx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XFxuK1xcdGZwdXRzKFxcXCItLS0tIHZtIGR1bXAgLS0tLVxcXFxuXFxcIiwgc3RkZXJyKTtcXG4rXFx0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcXG4rXFx0YWJvcnQoKTtcXG4rXFx0X19idWlsdGluX3VucmVhY2hhYmxlKCk7XFxuIH1cXG4gXFxuLWdwYV90IHZtX3BoeV9wYWdlX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdClcXG4rX193ZWFrIGJvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZClcXG4ge1xcbi1cXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAxLCBtaW5fZ3BhLCBtZW1zbG90KTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi1ncGFfdCB2bV9hbGxvY19wYWdlX3RhYmxlKHN0cnVjdCBrdm1fdm0gKnZtKVxcbitncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxcbitcXHRcXHRcXHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpXFxuIHtcXG4tXFx0cmV0dXJuIHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXFxuLVxcdFxcdFxcdFxcdCB2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xcbitcXHRzdHJ1Y3QgdXNlcnNwYWNlX21lbV9yZWdpb24gKnJlZ2lvbiA9IHZtX2dldF9tZW1fcmVnaW9uKHZtLCB0eXBlKTtcXG4rXFx0Ym9vbCBuYXR1cmFsbHlfYWxpZ25lZCA9IGZhbHNlO1xcbitcXHRncGFfdCBtaW5fZ3BhO1xcbitcXG4rXFx0VEVTVF9BU1NFUlQocmVnaW9uLCBcXFwiTm8gcmVnaW9uIGZvciB0eXBlICcldScsIG1lbXNsb3QgJyV1J1xcXCIsXFxuK1xcdFxcdCAgICB0eXBlLCB2bS1cXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xcbitcXG4rXFx0c3dpdGNoICh0eXBlKSB7XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9DT0RFOlxcbitcXHRjYXNlIE1FTV9SRUdJT05fREFUQTpcXG4rXFx0Y2FzZSBNRU1fUkVHSU9OX1RFU1RfREFUQTpcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIHJlZ2lvbiBpcyBiYWNrZWQgYnkgdGhlIGRlZmF1bHQgbWVtc2xvdCAoaWQ9MCksIHVzZVxcbitcXHRcXHQgKiBzZWxmdGVzdHMnIGhhcmRjb2RlZCBtaW5pbXVtIFBGTiwgb3RoZXJ3aXNlIHVzZSB0aGUgYmFzZSBvZlxcbitcXHRcXHQgKiB0aGUgY3VzdG9tIG1lbW9yeSBzbG90IHRoYXQgYmFja3MgdGhlIHJlZ2lvbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdKVxcbitcXHRcXHRcXHRtaW5fZ3BhID0gS1ZNX1VUSUxfTUlOX1BGTiAqIHZtLVxcdTAwM2VwYWdlX3NpemU7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bWluX2dwYSA9IHJlZ2lvbi1cXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkcjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgTUVNX1JFR0lPTl9QVDpcXG4rXFx0XFx0bWluX2dwYSA9IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUjtcXG4rXFx0XFx0bmF0dXJhbGx5X2FsaWduZWQgPSBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcygpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBNRU1fUkVHSU9OX1RFU1RfRVhUUkE6XFxuK1xcdFxcdG1pbl9ncGEgPSByZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRURVNUX0ZBSUwoXFxcIkludmFsaWQgbWVtb3J5IHJlZ2lvbiB0eXBlICcldSdcXFwiLCB0eXBlKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgbWluX2dwYSwgdm0tXFx1MDAzZW1lbXNsb3RzW3R5cGVdLFxcbitcXHRcXHRcXHRcXHQgICAgICBwcm90ZWN0ZWQsIG5hdHVyYWxseV9hbGlnbmVkKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xcbmluZGV4IDQ3YmJkZTNlMjA1YTAuLmZjZDQxYmM2ZmJkYWUgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xcbkBAIC05LDcgKzksNiBAQFxcbiAjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ1Y2FsbF9jb21tb24uaFxcXCJcXG4gXFxuLSNkZWZpbmUgTE9PTkdBUkNIX1BBR0VfVEFCTEVfUEhZU19NSU5cXHRcXHQweDIwMDAwMFxcbiAjZGVmaW5lIExPT05HQVJDSF9HVUVTVF9TVEFDS19WQUREUl9NSU5cXHRcXHQweDIwMDAwMFxcbiBcXG4gc3RhdGljIGdwYV90IGludmFsaWRfcGd0YWJsZVs0XTtcXG5AQCAtNTcsOSArNTYsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcdGNoaWxkID0gdGFibGUgPSAwO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgdm0tXFx1MDAzZW1tdS5wZ3RhYmxlX2xldmVsczsgaSsrKSB7XFxuIFxcdFxcdGludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkO1xcbi1cXHRcXHR0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTixcXG4tXFx0XFx0XFx0XFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4tXFx0XFx0VEVTVF9BU1NFUlQodGFibGUsIFxcXCJGYWlsIHRvIGFsbG9jYXRlIHBhZ2UgdGFsZSBhdCBsZXZlbCAlZFxcXFxuXFxcIiwgaSk7XFxuK1xcdFxcdHRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7XFxuIFxcdFxcdHZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7XFxuIFxcdFxcdGNoaWxkID0gdGFibGU7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG5pbmRleCBkZWQ1NDI5ZjM0NDgzLi5jMTc1ZGNkMTQxMTQ0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXFxuQEAgLTY5LDkgKzY5LDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxcbiBcXHRpZiAodm0tXFx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0dm0tXFx1MDAzZW1tdS5wZ2QgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLFxcbi1cXHRcXHRcXHRcXHRcXHQgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxcbi1cXHRcXHRcXHRcXHRcXHQgdm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcXG4rXFx0dm0tXFx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XFxuIFxcdHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xcbiB9XFxuIFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcXG5pbmRleCBhOWFkYjM3ODJiMzUyLi4zM2Y0OWQ3NDNiNWZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xcbkBAIC0yMCw5ICsyMCw3IEBAIHZvaWQgdmlydF9hcmNoX3BnZF9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcXG4gXFx0aWYgKHZtLVxcdTAwM2VtbXUucGdkX2NyZWF0ZWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgUEFHRVNfUEVSX1JFR0lPTixcXG4tXFx0XFx0XFx0XFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxcbi1cXHRcXHRcXHRcXHQgICB2bS1cXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xcbitcXHRncGEgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBQQUdFU19QRVJfUkVHSU9OKTtcXG4gXFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgZ3BhKSwgMHhmZiwgUEFHRVNfUEVSX1JFR0lPTiAqIHZtLVxcdTAwM2VwYWdlX3NpemUpO1xcbiBcXG4gXFx0dm0tXFx1MDAzZW1tdS5wZ2QgPSBncGE7XFxuQEAgLTM4LDggKzM2LDcgQEAgc3RhdGljIHU2NCB2aXJ0X2FsbG9jX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSwgaW50IHJpKVxcbiB7XFxuIFxcdHU2NCB0YWRkcjtcXG4gXFxuLVxcdHRhZGRyID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAgcmkgXFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEsXFxuLVxcdFxcdFxcdFxcdCAgIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUiwgMCk7XFxuK1xcdHRhZGRyID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgcmkgXFx1MDAzYyA0ID8gUEFHRVNfUEVSX1JFR0lPTiA6IDEpO1xcbiBcXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cXHUwMDNlcGFnZV9zaXplKTtcXG4gXFxuIFxcdHJldHVybiAodGFkZHIgXFx1MDAyNiBSRUdJT05fRU5UUllfT1JJR0lOKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuaW5kZXggZDMxZmE4MWVhMDc1Ni4uNDc5ZTlhNDgxNjg3ZCAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXFxuQEAgLTUyOSw3ICs1MjksMTAgQEAgdm9pZCB0ZHBfaWRlbnRpdHlfbWFwX2RlZmF1bHRfbWVtc2xvdHMoc3RydWN0IGt2bV92bSAqdm0pXFxuIFxcbiBcXHQvKiBPbmx5IG1lbXNsb3QgMCBpcyBtYXBwZWQgaGVyZSwgZW5zdXJlIGl0J3MgdGhlIG9ubHkgb25lIGJlaW5nIHVzZWQgKi9cXG4gXFx0Zm9yIChzID0gMDsgcyBcXHUwMDNjIE5SX01FTV9SRUdJT05TOyBzKyspXFxuLVxcdFxcdFRFU1RfQVNTRVJUX0VRKHZtLVxcdTAwM2VtZW1zbG90c1tzXSwgMCk7XFxuK1xcdFxcdFRFU1RfQVNTRVJUKCF2bS1cXHUwMDNlbWVtc2xvdHNbc10gfHxcXG4rXFx0XFx0XFx0ICAgIHZtLVxcdTAwM2VtZW1zbG90c1tzXSA9PSBLVk1fSU5WQUxJRF9NRU1TTE9ULFxcbitcXHRcXHRcXHQgICAgXFxcIlVuaGFuZGxlZCBtZW1zbG90ICcldScgZm9yIHR5cGUgJyV1J1xcXCIsXFxuK1xcdFxcdFxcdCAgICB2bS1cXHUwMDNlbWVtc2xvdHNbc10sIHMpO1xcbiBcXG4gXFx0aSA9IChyZWdpb24tXFx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHIgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQpIC0gMTtcXG4gXFx0bGFzdCA9IGkgKyAocmVnaW9uLVxcdTAwM2VyZWdpb24ubWVtb3J5X3NpemUgXFx1MDAzZVxcdTAwM2Ugdm0tXFx1MDAzZXBhZ2Vfc2hpZnQpO1xcbkBAIC0xNDY1LDEzICsxNDY4LDEzIEBAIGJvb2wga3ZtX2FyY2hfaGFzX2RlZmF1bHRfaXJxY2hpcCh2b2lkKVxcbiBcXHRyZXR1cm4gdHJ1ZTtcXG4gfVxcbiBcXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxcbit2b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IHNtcmFtX2dwYSxcXG4gXFx0XFx0IGNvbnN0IHZvaWQgKnNtaV9oYW5kbGVyLCBzaXplX3QgaGFuZGxlcl9zaXplKVxcbiB7XFxuLVxcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIHNtcmFtX2dwYSxcXG4tXFx0XFx0XFx0XFx0ICAgIFNNUkFNX01FTVNMT1QsIFNNUkFNX1BBR0VTLCAwKTtcXG4tXFx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgU01SQU1fTUVNU0xPVCkgPT0gc21yYW1fZ3BhLFxcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbitcXHRcXHRcXHQgICAgICAgc21yYW1fZ3BhLCBTTVJBTV9NRU1TTE9ULCBTTVJBTV9QQUdFUyk7XFxuK1xcbitcXHRURVNUX0FTU0VSVCh2bV9waHlfcGFnZXNfYWxsb2Modm0sIFNNUkFNX1BBR0VTLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpID09IHNtcmFtX2dwYSxcXG4gXFx0XFx0ICAgIFxcXCJDb3VsZCBub3QgYWxsb2NhdGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc2VzIGZvciBTTVJBTVxcXCIpO1xcbiBcXG4gXFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgc21yYW1fZ3BhKSwgMHgwLCBTTVJBTV9TSVpFKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xcbmluZGV4IGUxMjk5NjExYmUzMjIuLjg0NGVhOWI3YmI0MWMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuY1xcbkBAIC0zMzksNyArMzM5LDggQEAgc3RhdGljIGJvb2wgcHJlcGFyZV92bShzdHJ1Y3Qgdm1fZGF0YSAqZGF0YSwgaW50IG5zbG90cywgdTY0ICptYXhzbG90cyxcXG4gXFx0XFx0aWYgKHNsb3QgPT0gZGF0YS1cXHUwMDNlbnNsb3RzKVxcbiBcXHRcXHRcXHRucGFnZXMgKz0gcmVtcGFnZXM7XFxuIFxcbi1cXHRcXHRncGEgPSB2bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCk7XFxuK1xcdFxcdGdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSwgZmFsc2UpO1xcbiBcXHRcXHRURVNUX0FTU0VSVChncGEgPT0gZ3Vlc3RfYWRkcixcXG4gXFx0XFx0XFx0ICAgIFxcXCJ2bV9waHlfcGFnZXNfYWxsb2MoKSBmYWlsZWRcXFwiKTtcXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5pbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcXG5AQCAtMTAyLDI0ICsxMDIsMTcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZGlydHlfdGVzdF9kYXRhKHZvaWQpXFxuIFxcbiBzdGF0aWMgdm9pZCBjcmVhdGVfbWFpbl9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgTUFJTl9QQUdFX0NPVU5ULCAwKTtcXG4tXFx0Lyogc2V0IHRoZSBhcnJheSBvZiBtZW1zbG90cyB0byB6ZXJvIGxpa2UgX192bV9jcmVhdGUgZG9lcyAqL1xcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkrKylcXG4tXFx0XFx0dm0tXFx1MDAzZW1lbXNsb3RzW2ldID0gMDtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fQ09ERSwgMCk7XFxuK1xcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcXG4rXFx0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNyZWF0ZV90ZXN0X21lbXNsb3Qoc3RydWN0IGt2bV92bSAqdm0pXFxuIHtcXG4tXFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLFxcbi1cXHRcXHRcXHRcXHQgICAgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuLVxcdFxcdFxcdFxcdCAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFxcdTAwM2NcXHUwMDNjIHZtLVxcdTAwM2VwYWdlX3NoaWZ0LFxcbi1cXHRcXHRcXHRcXHQgICAgVEVTVF9EQVRBX01FTVNMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBURVNUX0RBVEFfUEFHRV9DT1VOVCxcXG4tXFx0XFx0XFx0XFx0ICAgIDBcXG4tXFx0XFx0XFx0XFx0ICAgKTtcXG4tXFx0dm0tXFx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fVEVTVF9EQVRBXSA9IFRFU1RfREFUQV9NRU1TTE9UO1xcbitcXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfREFUQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgICAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFxcdTAwM2NcXHUwMDNjIHZtLVxcdTAwM2VwYWdlX3NoaWZ0LFxcbitcXHRcXHRcXHQgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xcbmluZGV4IGYzODM5Mjg0YWMwODEuLmNkMjZjYzFhZWQ4MDMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmNcXG5AQCAtMzYsNyArMzYsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0KHZvaWQpXFxuIFxcdH07XFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcXG4tXFx0bWVtID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDApO1xcbitcXHRtZW0gPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDAsIGZhbHNlLCBmYWxzZSk7XFxuIFxcbiBcXHRyb3V0aW5nID0ga3ZtX2dzaV9yb3V0aW5nX2NyZWF0ZSgpO1xcbiBcXHRyb3V0aW5nLVxcdTAwM2VuciA9IDE7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXFxuaW5kZXggZGZmZTk2NTRmNDViZC4uYmZhNWFjOGNlMDI5NSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuY1xcbkBAIC0xMTYsMTUgKzExNiwxNSBAQCBzdGF0aWMgc3RydWN0IGt2bV92bSAqc3Bhd25fdm0oc3RydWN0IGt2bV92Y3B1ICoqdmNwdSwgcHRocmVhZF90ICp2Y3B1X3RocmVhZCxcXG4gXFxuIFxcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUodmNwdSwgZ3Vlc3RfY29kZSk7XFxuIFxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTX1RIUCxcXG4tXFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX1NMT1QsXFxuLVxcdFxcdFxcdFxcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTtcXG4rXFx0dm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0VYVFJBLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXFxuK1xcdFxcdFxcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gZ2V0cGFnZXNpemUoKSk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpXFxuIFxcdCAqIHN0YXlzIHZhbGlkIGFjcm9zcyB0aGUgbWVtc2xvdCBtb3ZlLlxcbiBcXHQgKi9cXG4tXFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTtcXG4rXFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFxcXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXFxcXG5cXFwiKTtcXG4gXFxuIFxcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9HUEEsIDIpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xcbmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcXG5AQCAtNjIsMTEgKzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXFxuIFxcdFRFU1RfQVNTRVJUKHJjLCBcXFwiS1ZNX0NBUF9FWElUX09OX0VNVUxBVElPTl9GQUlMVVJFIGlzIHVuYXZhaWxhYmxlXFxcIik7XFxuIFxcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfRVhJVF9PTl9FTVVMQVRJT05fRkFJTFVSRSwgMSk7XFxuIFxcbi1cXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLFxcbi1cXHRcXHRcXHRcXHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcXG4tXFx0XFx0XFx0XFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwgMCk7XFxuK1xcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXFxuK1xcdFxcdFxcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxcbitcXHRcXHRcXHQgICAgICAgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFKTtcXG4rXFxuIFxcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgTUVNX1JFR0lPTl9TSVpFIC8gUEFHRV9TSVpFLFxcbi1cXHRcXHRcXHRcXHQgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XFxuK1xcdFxcdFxcdFxcdCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xcbiBcXHRURVNUX0FTU0VSVChncGEgPT0gTUVNX1JFR0lPTl9HUEEsIFxcXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXFxcIik7XFxuIFxcdHZpcnRfbWFwKHZtLCBNRU1fUkVHSU9OX0dWQSwgTUVNX1JFR0lPTl9HUEEsIDEpO1xcbiBcXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MDQuMzE3MDQ1NzEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTEzODI3MzQyMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMjBhNTljODEwY2U2YWZjNGM1Y2Q3ZTMxM2IxMjQyMDAzZDkyZjIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMjM6MTI6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbmluZGV4IDZiYjNkODI5MDZiMjIuLmIwZTNmYzhjZDc2YWMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9hcm02NC9wYWdlX2ZhdWx0X3Rlc3QuY1xuQEAgLTU5NywxOCArNTk3LDE2IEBAIHN0YXRpYyB2b2lkIHNldHVwX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3QgdGVzdF9wYXJhbXMgKnApXG4gXG4gXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCAwLFxuIFx0XHRcdFx0ICAgIENPREVfQU5EX0RBVEFfTUVNU0xPVCwgY29kZV9ucGFnZXMsIDApO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9DT0RFXSA9IENPREVfQU5EX0RBVEFfTUVNU0xPVDtcbi1cdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fREFUQV0gPSBDT0RFX0FORF9EQVRBX01FTVNMT1Q7XG4tXG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhIC0gcHRfc2l6ZSxcbi1cdFx0XHRcdCAgICBQQUdFX1RBQkxFX01FTVNMT1QsIHB0X3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4tXHRcdFx0XHQgICAgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlcHRfbWVtc2xvdF9mbGFncyk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1BUXSA9IFBBR0VfVEFCTEVfTUVNU0xPVDtcbi1cbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEsIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIGRhdGFfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbi1cdFx0XHRcdCAgICBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VkYXRhX21lbXNsb3RfZmxhZ3MpO1xuLVx0dm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9URVNUX0RBVEFdID0gVEVTVF9EQVRBX01FTVNMT1Q7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCBDT0RFX0FORF9EQVRBX01FTVNMT1QpO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgQ09ERV9BTkRfREFUQV9NRU1TTE9UKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9QVCwgcC1cdTAwM2VzcmNfdHlwZSwgZGF0YV9ncGEgLSBwdF9zaXplLFxuK1x0XHRcdFx0IFBBR0VfVEFCTEVfTUVNU0xPVCwgcHRfc2l6ZSAvIGd1ZXN0X3BhZ2Vfc2l6ZSxcbitcdFx0XHRcdCBwLVx1MDAzZXRlc3RfZGVzYy1cdTAwM2VwdF9tZW1zbG90X2ZsYWdzKTtcbitcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIHAtXHUwMDNlc3JjX3R5cGUsIGRhdGFfZ3BhLFxuK1x0XHRcdFx0IFRFU1RfREFUQV9NRU1TTE9ULCBkYXRhX3NpemUgLyBndWVzdF9wYWdlX3NpemUsXG4rXHRcdFx0XHQgcC1cdTAwM2V0ZXN0X2Rlc2MtXHUwMDNlZGF0YV9tZW1zbG90X2ZsYWdzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgc2V0dXBfdWNhbGwoc3RydWN0IGt2bV92bSAqdm0pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG5pbmRleCA5YTY5YzQzOWEwZjhmLi5iNGM2NTFlYTM4NWQ4IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2FybTY0L3ZnaWNfbHBpX3N0cmVzcy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYXJtNjQvdmdpY19scGlfc3RyZXNzLmNcbkBAIC0xNjQsOCArMTY0LDggQEAgc3RhdGljIHZvaWQgc2V0dXBfbWVtc2xvdCh2b2lkKVxuIFxuIFx0cGFnZXMgPSBzeiAvIHZtLVx1MDAzZXBhZ2Vfc2l6ZTtcbiBcdGdwYV9iYXNlID0gKCh2bV9jb21wdXRlX21heF9nZm4odm0pICsgMSkgKiB2bS1cdTAwM2VwYWdlX3NpemUpIC0gc3o7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBncGFfYmFzZSxcbi1cdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgsIHBhZ2VzLCAwKTtcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4rXHRcdFx0ICAgICAgIGdwYV9iYXNlLCBURVNUX01FTVNMT1RfSU5ERVgsIHBhZ2VzKTtcbiB9XG4gXG4gI2RlZmluZSBMUElfUFJPUF9ERUZBVUxUX1BSSU9cdDB4YTBcbkBAIC0xOTEsMjggKzE5MSwyNSBAQCBzdGF0aWMgdm9pZCBzZXR1cF90ZXN0X2RhdGEodm9pZClcbiBcdGdwYV90IGNtZHFfYmFzZTtcbiBcbiBcdHRlc3RfZGF0YS5kZXZpY2VfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgIGdwYV9iYXNlLFxuLVx0XHRcdFx0XHRcdCAgICBURVNUX01FTVNMT1RfSU5ERVgpO1xuK1x0XHRcdFx0XHRcdCAgICBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuIFx0dGVzdF9kYXRhLmNvbGxlY3Rpb25fdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0XHRncGFfYmFzZSxcbi1cdFx0XHRcdFx0XHRcdFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0XHRNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFxuLVx0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBncGFfYmFzZSxcbi1cdFx0XHRcdCAgICAgICBURVNUX01FTVNMT1RfSU5ERVgpO1xuK1x0Y21kcV9iYXNlID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEpO1xuIFx0dmlydF9tYXAodm0sIGNtZHFfYmFzZSwgY21kcV9iYXNlLCBwYWdlc19wZXJfNjRrKTtcbiBcdHRlc3RfZGF0YS5jbWRxX2Jhc2UgPSBjbWRxX2Jhc2U7XG4gXHR0ZXN0X2RhdGEuY21kcV9iYXNlX3ZhID0gKHZvaWQgKiljbWRxX2Jhc2U7XG4gXG4gXHR0ZXN0X2RhdGEuaXR0X3RhYmxlcyA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXNfcGVyXzY0ayAqIG5yX2RldmljZXMsXG4tXHRcdFx0XHRcdFx0ICBncGFfYmFzZSwgVEVTVF9NRU1TTE9UX0lOREVYKTtcbitcdFx0XHRcdFx0XHQgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHR0ZXN0X2RhdGEubHBpX3Byb3BfdGFibGUgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzX3Blcl82NGssXG4tXHRcdFx0XHRcdFx0ICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0ICAgICAgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdGNvbmZpZ3VyZV9scGlzKCk7XG4gXG4gXHR0ZXN0X2RhdGEubHBpX3BlbmRfdGFibGVzID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBwYWdlc19wZXJfNjRrICogbnJfY3B1cyxcbi1cdFx0XHRcdFx0XHQgICAgICAgZ3BhX2Jhc2UsIFRFU1RfTUVNU0xPVF9JTkRFWCk7XG4rXHRcdFx0XHRcdFx0ICAgICAgIE1FTV9SRUdJT05fVEVTVF9FWFRSQSk7XG4gXG4gXHRzeW5jX2dsb2JhbF90b19ndWVzdCh2bSwgdGVzdF9kYXRhKTtcbiB9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2luY2x1ZGUva3ZtX3V0aWwuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL2t2bV91dGlsLmhcbmluZGV4IDVhN2E0NTViNTM4NzUuLmZmZDRjZjc0MGQ3ZmEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS9rdm1fdXRpbC5oXG5AQCAtMzMsNiArMzMsOCBAQFxuIFxuICNkZWZpbmUgTlNFQ19QRVJfU0VDIDEwMDAwMDAwMDBMXG4gXG4rI2RlZmluZSBLVk1fSU5WQUxJRF9NRU1TTE9UIFVJTlRfTUFYXG4rXG4gc3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uIHtcbiBcdHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24yIHJlZ2lvbjtcbiBcdHN0cnVjdCBzcGFyc2ViaXQgKnVudXNlZF9waHlfcGFnZXM7XG5AQCAtODAsMTEgKzgyLDQzIEBAIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbnMge1xuIFx0REVDTEFSRV9IQVNIVEFCTEUoc2xvdF9oYXNoLCA5KTtcbiB9O1xuIFxuKy8qXG4rICogTWVtb3J5IHJlZ2lvbiB0eXBlcyBhcmUgcGFzc2VkIHRvIHZhcmlvdXMgcGFnZSBhbGxvY2F0b3JzIHRvIGNvbW11bmljYXRlXG4rICogdmFyaW91cyBwcm9wZXJ0aWVzIGFuZCBtZXRhZGF0YSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uLiAgTm90ZSwgdGhlXG4rICogZGVzY3JpcHRpb25zIGJlbG93IGRlc2NyaWJlZCB0aGUgcHJpbWFyeSB1c2FnZSBvZiBlYWNoIHR5cGUuICBJbmRpdmlkdWFsXG4rICogdGVzdHMgbWF5IGFsbG9jYXRlIG1lbW9yeSBmb3Igb3RoZXIgcHVycG9zZXMuXG4rICpcbisgKiBCeSBkZWZhdWx0LCBhbGwgcmVnaW9ucyBhcmUgbWFwcGVkIHRvIG1lbXNsb3QgJzAnLiAgVGVzdHMgY2FuIG92ZXJyaWRlIHRoZVxuKyAqIG1lbXNsb3QgZm9yIGFueSBvciBhbGwgdHlwZXMsIGUuZy4gc28gdGhhdCBhbGwgdGVzdCBkYXRhIGlzIGFsbG9jYXRlZCBmcm9tIGFcbisgKiBjdXJhdGVkIG1lbXNsb3QuXG4rICovXG4gZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHtcbitcdC8qXG4rXHQgKiBUaGUgQ09ERSByZWdpb24gaXMgdXNlZCBieSBsaWIvZWxmIHdoZW4gbG9hZGluZyB0aGUgdGVzdCdzIGNvZGUgaW50b1xuK1x0ICogZ3Vlc3QgbWVtb3J5LlxuK1x0ICovXG4gXHRNRU1fUkVHSU9OX0NPREUsXG4rXHQvKlxuK1x0ICogVGhlIERBVEEgcmVnaW9uIGlzIHVzZWQgdG8gYWxsb2NhdGUgY29yZSBkYXRhIHN0cnVjdHVyZXMsIGUuZy4gdkNQVVxuK1x0ICogc3RhY2tzLCBWTSBleGNlcHRpb24gdGFibGVzLCB4ODYncyBUU1MsIGV0Yy5cbitcdCAqL1xuIFx0TUVNX1JFR0lPTl9EQVRBLFxuK1x0LypcbitcdCAqIFRoZSBQVCByZWdpb24sIGEuay5hLiBQYWdlIFRhYmxlIHJlZ2lvbiwgaXMgdXNlZCB0byBhbGxvY2F0ZSBwYWdlXG4rXHQgKiB0YWJsZSBwYWdlcy5cbitcdCAqL1xuIFx0TUVNX1JFR0lPTl9QVCxcbitcdC8qXG4rXHQgKiBUaGUgVEVTVF9EQVRBIHJlZ2lvbiBpcyB1c2VkIGZvciBhbGxvY2F0aW5nIHRlc3QgZGF0YSB0aGF0IGlzIGVpdGhlclxuK1x0ICogdGVzdCBzcGVjaWZpYywgYW5kL29yIGlzbid0IGNvbnNpZGVyZWQgYSBcImNvcmVcIiBkYXRhIHN0cnVjdHVyZS5cbitcdCAqL1xuIFx0TUVNX1JFR0lPTl9URVNUX0RBVEEsXG4rXHQvKlxuK1x0ICogVGhlIFRFU1RfRVhUUkEgcmVnaW9uIGlzIGZvciBzcGVjaWFsIHNub3dmbGFrZXMsIHdoZXJlIGEgdGVzdCB3YW50c1xuK1x0ICogdG8gY3JlYXRlIGFuZCB1c2UgYSBvbmUtb2ZmIG1lbXNsb3QsIHdpdGhvdXQgaW1wYWN0aW5nIFwibm9ybWFsXCIgdGVzdFxuK1x0ICogZGF0YSBhbGxvY2F0aW9ucy5cbitcdCAqL1xuK1x0TUVNX1JFR0lPTl9URVNUX0VYVFJBLFxuIFx0TlJfTUVNX1JFR0lPTlMsXG4gfTtcbiBcbkBAIC0xMjcsMTEgKzE2MSw2IEBAIHN0cnVjdCBrdm1fdm0ge1xuIFxuIFx0c3RydWN0IGt2bV9iaW5hcnlfc3RhdHMgc3RhdHM7XG4gXG4tXHQvKlxuLVx0ICogS1ZNIHJlZ2lvbiBzbG90cy4gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG1lbXNsb3RzIHVzZWQgYnkgcGFnZVxuLVx0ICogYWxsb2NhdG9ycywgZS5nLiwgbGliL2VsZiB1c2VzIHRoZSBtZW1zbG90c1tNRU1fUkVHSU9OX0NPREVdXG4tXHQgKiBtZW1zbG90LlxuLVx0ICovXG4gXHR1MzIgbWVtc2xvdHNbTlJfTUVNX1JFR0lPTlNdO1xuIH07XG4gXG5AQCAtMTY5LDEzICsxOTgsMTQgQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KTtcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqdm1fZ2V0X21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4gXHRcdFx0XHRcdFx0XHQgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuIHtcbi1cdGFzc2VydCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyk7XG4rXHRURVNUX0FTU0VSVCh0eXBlIFx1MDAzYyBOUl9NRU1fUkVHSU9OUyxcbitcdFx0ICAgIFwiSW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJyV1J1wiLCB0eXBlKTtcbiBcdHJldHVybiBtZW1zbG90MnJlZ2lvbih2bSwgdm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0pO1xuIH1cbiBcbiAvKiBNaW5pbXVtIGFsbG9jYXRlZCBndWVzdCB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMgKi9cbiAjZGVmaW5lIEtWTV9VVElMX01JTl9WQUREUlx0XHQweDIwMDBcbi0jZGVmaW5lIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUlx0MHgxODAwMDBcbisjZGVmaW5lIEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUlx0MHgyMDAwMDBcbiBcbiAjZGVmaW5lIERFRkFVTFRfR1VFU1RfU1RBQ0tfVkFERFJfTUlOXHQweGFiNjAwMFxuICNkZWZpbmUgREVGQVVMVF9TVEFDS19QR1NcdFx0NVxuQEAgLTcwMiw2ICs3MzIsMzYgQEAgdm9pZCB2bV9tZW1fYWRkKHN0cnVjdCBrdm1fdm0gKnZtLCBlbnVtIHZtX21lbV9iYWNraW5nX3NyY190eXBlIHNyY190eXBlLFxuIFx0XHRncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzLCB1MzIgZmxhZ3MsXG4gXHRcdGludCBndWVzdF9tZW1mZF9mZCwgdTY0IGd1ZXN0X21lbWZkX29mZnNldCk7XG4gXG4rXG4rc3RhdGljIGlubGluZSB2b2lkIF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLFxuK1x0XHRcdFx0XHQgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSxcbitcdFx0XHRcdFx0ICAgICAgdTMyIHNsb3QpXG4re1xuK1x0VEVTVF9BU1NFUlQodm0tXHUwMDNlbWVtc2xvdHNbdHlwZV0gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbitcdFx0ICAgIFwiTWVtb3J5IHJlZ2lvbiB0eXBlICcldScgd2FzIGFscmVhZHkgb3ZlcnJpZGRlbiB3aXRoIHNsb3Q9JXVcIixcbitcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbitcbitcdHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdID0gc2xvdDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbihzdHJ1Y3Qga3ZtX3ZtICp2bSxcbitcdFx0XHRcdFx0ICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLFxuK1x0XHRcdFx0XHQgICAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbitcdFx0XHRcdFx0ICAgIGdwYV90IGdwYSwgdTMyIHNsb3QsIHU2NCBucGFnZXMsXG4rXHRcdFx0XHRcdCAgICB1MzIgZmxhZ3MpXG4re1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIHR5cGUsIHNsb3QpO1xuK1x0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBzcmNfdHlwZSwgZ3BhLCBzbG90LCBucGFnZXMsIGZsYWdzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHZtX292ZXJyaWRlX21lbV9yZWdpb24oc3RydWN0IGt2bV92bSAqdm0sXG4rXHRcdFx0XHRcdCAgZW51bSBrdm1fbWVtX3JlZ2lvbl90eXBlIHR5cGUsXG4rXHRcdFx0XHRcdCAgZW51bSB2bV9tZW1fYmFja2luZ19zcmNfdHlwZSBzcmNfdHlwZSxcbitcdFx0XHRcdFx0ICBncGFfdCBncGEsIHUzMiBzbG90LCB1NjQgbnBhZ2VzKVxuK3tcbitcdF9fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgdHlwZSwgc3JjX3R5cGUsIGdwYSwgc2xvdCwgbnBhZ2VzLCAwKTtcbit9XG4rXG4gI2lmbmRlZiB2bV9hcmNoX2hhc19wcm90ZWN0ZWRfbWVtb3J5XG4gc3RhdGljIGlubGluZSBib29sIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkoc3RydWN0IGt2bV92bSAqdm0pXG4ge1xuQEAgLTk5MCwyMyArMTA1MCw0MSBAQCB2b2lkIGt2bV9nc2lfcm91dGluZ193cml0ZShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV9pcnFfcm91dGluZyAqcm91dGluZyk7XG4gXG4gY29uc3QgY2hhciAqZXhpdF9yZWFzb25fc3RyKHVuc2lnbmVkIGludCBleGl0X3JlYXNvbik7XG4gXG4tZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KTtcbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSwgZ3BhX3QgbWluX2dwYSxcbi1cdFx0XHQgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQpO1xuLWdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pO1xuK2Jvb2wga3ZtX2FyY2hfbmVlZHNfbmF0dXJhbGx5X2FsaWduZWRfcGFnZV90YWJsZXModm9pZCk7XG4rXG4rZ3BhX3QgX19fX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLCBncGFfdCBtaW5fZ3BhLFxuK1x0XHRcdCAgICAgdTMyIG1lbXNsb3QsIGJvb2wgcHJvdGVjdGVkLCBib29sIG5hdHVyYWxseV9hbGlnbmVkKTtcbitncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG5yX3BhZ2VzLFxuK1x0XHRcdCAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlLCBib29sIHByb3RlY3RlZCk7XG4gXG4tc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBudW0sXG4tXHRcdFx0XHQgICAgICAgZ3BhX3QgbWluX2dwYSwgdTMyIG1lbXNsb3QpXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbitcdFx0XHRcdCAgICAgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSlcbiB7XG4gXHQvKlxuIFx0ICogQnkgZGVmYXVsdCwgYWxsb2NhdGUgbWVtb3J5IGFzIHByb3RlY3RlZCBmb3IgVk1zIHRoYXQgc3VwcG9ydFxuIFx0ICogcHJvdGVjdGVkIG1lbW9yeSwgYXMgdGhlIG1ham9yaXR5IG9mIG1lbW9yeSBmb3Igc3VjaCBWTXMgaXNcbiBcdCAqIHByb3RlY3RlZCwgaS5lLiB1c2luZyBzaGFyZWQgbWVtb3J5IGlzIGVmZmVjdGl2ZWx5IG9wdC1pbi5cbiBcdCAqL1xuLVx0cmV0dXJuIF9fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBudW0sIG1pbl9ncGEsIG1lbXNsb3QsXG4rXHRyZXR1cm4gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIG5yX3BhZ2VzLCB0eXBlLFxuIFx0XHRcdFx0ICAgIHZtX2FyY2hfaGFzX3Byb3RlY3RlZF9tZW1vcnkodm0pKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSBncGFfdCB2bV9waHlfcGFnZV9hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSxcbitcdFx0XHRcdCAgICAgIGVudW0ga3ZtX21lbV9yZWdpb25fdHlwZSB0eXBlKVxuK3tcbitcdHJldHVybiB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDEsIHR5cGUpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGVfcGFnZXMoc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcylcbit7XG4rXHRyZXR1cm4gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcywgTUVNX1JFR0lPTl9QVCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgZ3BhX3Qgdm1fYWxsb2NfcGFnZV90YWJsZShzdHJ1Y3Qga3ZtX3ZtICp2bSlcbit7XG4rXHRyZXR1cm4gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgMSk7XG4rfVxuK1xuIC8qXG4gICogX19fX3ZtX2NyZWF0ZSgpIGRvZXMgS1ZNX0NSRUFURV9WTSBhbmQgbGl0dGxlIGVsc2UuICBfX3ZtX2NyZWF0ZSgpIGFsc29cbiAgKiBsb2FkcyB0aGUgdGVzdCBiaW5hcnkgaW50byBndWVzdCBtZW1vcnkgYW5kIGNyZWF0ZXMgYW4gSVJRIGNoaXAgKHg4NiBvbmx5KS5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbmluZGV4IDJkMWFmYTA5ODE5YjAuLjE1ZmFhYTA2MDEyNjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vaW5jbHVkZS94ODYvc21tLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9pbmNsdWRlL3g4Ni9zbW0uaFxuQEAgLTgsNyArOCw3IEBAXG4gI2RlZmluZSBTTVJBTV9NRU1TTE9UXHQoKDEgXHUwMDNjXHUwMDNjIDE2KSB8IDEpXG4gI2RlZmluZSBTTVJBTV9QQUdFU1x0KFNNUkFNX1NJWkUgLyBQQUdFX1NJWkUpXG4gXG4tdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgc21yYW1fZ3BhLFxuK3ZvaWQgc2V0dXBfc21yYW0oc3RydWN0IGt2bV92bSAqdm0sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3Qgc21yYW1fZ3BhLFxuIFx0XHQgY29uc3Qgdm9pZCAqc21pX2hhbmRsZXIsIHNpemVfdCBoYW5kbGVyX3NpemUpO1xuIFxuIHZvaWQgaW5qZWN0X3NtaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvYXJtNjQvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2FybTY0L3Byb2Nlc3Nvci5jXG5pbmRleCAwMTMyNWJmNGQzNmZjLi4yZGNhYTJjNGEwMzgzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9hcm02NC9wcm9jZXNzb3IuY1xuQEAgLTExNSw5ICsxMTUsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRpZiAodm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcbi1cdFx0XHRcdFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbmluZGV4IDlkZGMwNDdkNWMyNzUuLjU3YjY1M2ZiZDBiMWYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2t2bV91dGlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIva3ZtX3V0aWwuY1xuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3RhdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9hbGlnbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIEtWTV9VVElMX01JTl9QRk5cdDJcbkBAIC0yODcsNiArMjg4LDcgQEAgX193ZWFrIHZvaWQgdm1fcG9wdWxhdGVfZ3ZhX2JpdG1hcChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbitcdGludCBpO1xuIFxuIFx0dm0gPSBjYWxsb2MoMSwgc2l6ZW9mKCp2bSkpO1xuIFx0VEVTVF9BU1NFUlQodm0gIT0gTlVMTCwgXCJJbnN1ZmZpY2llbnQgTWVtb3J5XCIpO1xuQEAgLTI5NSw2ICsyOTcsOCBAQCBzdHJ1Y3Qga3ZtX3ZtICpfX19fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSlcbiBcdHZtLVx1MDAzZXJlZ2lvbnMuZ3BhX3RyZWUgPSBSQl9ST09UO1xuIFx0dm0tXHUwMDNlcmVnaW9ucy5odmFfdHJlZSA9IFJCX1JPT1Q7XG4gXHRoYXNoX2luaXQodm0tXHUwMDNlcmVnaW9ucy5zbG90X2hhc2gpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IGkrKylcbitcdFx0dm0tXHUwMDNlbWVtc2xvdHNbaV0gPSBLVk1fSU5WQUxJRF9NRU1TTE9UO1xuIFxuIFx0dm0tXHUwMDNlbW9kZSA9IHNoYXBlLm1vZGU7XG4gXHR2bS1cdTAwM2V0eXBlID0gc2hhcGUudHlwZTtcbkBAIC00OTEsNyArNDk1LDcgQEAgc3RydWN0IGt2bV92bSAqX192bV9jcmVhdGUoc3RydWN0IHZtX3NoYXBlIHNoYXBlLCB1MzIgbnJfcnVubmFibGVfdmNwdXMsXG4gXHRcdFx0XHRcdFx0IG5yX2V4dHJhX3BhZ2VzKTtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqc2xvdDA7XG4gXHRzdHJ1Y3Qga3ZtX3ZtICp2bTtcbi1cdGludCBpLCBmbGFncztcbitcdGludCBmbGFncztcbiBcbiBcdGt2bV9zZXRfZmlsZXNfcmxpbWl0KG5yX3J1bm5hYmxlX3ZjcHVzKTtcbiBcbkBAIC01MDksOCArNTEzLDEwIEBAIHN0cnVjdCBrdm1fdm0gKl9fdm1fY3JlYXRlKHN0cnVjdCB2bV9zaGFwZSBzaGFwZSwgdTMyIG5yX3J1bm5hYmxlX3ZjcHVzLFxuIFx0XHRmbGFncyB8PSBLVk1fTUVNX0dVRVNUX01FTUZEO1xuIFxuIFx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUywgMCwgMCwgbnJfcGFnZXMsIGZsYWdzKTtcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX01FTV9SRUdJT05TOyBpKyspXG4tXHRcdHZtLVx1MDAzZW1lbXNsb3RzW2ldID0gMDtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0NPREUsIDApO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fUFQsIDApO1xuK1x0X19fX3ZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fREFUQSwgMCk7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9URVNUX0RBVEEsIDApO1xuIFxuIFx0a3ZtX3ZtX2VsZl9sb2FkKHZtLCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSk7XG4gXG5AQCAtMTE4OSw2ICsxMTk1LDggQEAgbWVtc2xvdDJyZWdpb24oc3RydWN0IGt2bV92bSAqdm0sIHUzMiBtZW1zbG90KVxuIHtcbiBcdHN0cnVjdCB1c2Vyc3BhY2VfbWVtX3JlZ2lvbiAqcmVnaW9uO1xuIFxuK1x0VEVTVF9BU1NFUlQobWVtc2xvdCAhPSBLVk1fSU5WQUxJRF9NRU1TTE9ULCBcInZtLVx1MDAzZW1lbXNsb3RzW10gdW5wb3B1bGF0ZWQ/XCIpO1xuK1xuIFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZSh2bS1cdTAwM2VyZWdpb25zLnNsb3RfaGFzaCwgcmVnaW9uLCBzbG90X25vZGUsXG4gXHRcdFx0ICAgICAgIG1lbXNsb3QpXG4gXHRcdGlmIChyZWdpb24tXHUwMDNlcmVnaW9uLnNsb3QgPT0gbWVtc2xvdClcbkBAIC0xNDY1LDkgKzE0NzMsNyBAQCBzdGF0aWMgZ3ZhX3QgX19fX3ZtX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3Qgc3osIGd2YV90IG1pbl9ndmEsXG4gXHR1NjQgcGFnZXMgPSAoc3ogXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQpICsgKChzeiAlIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgIT0gMCk7XG4gXG4gXHR2aXJ0X3BnZF9hbGxvYyh2bSk7XG4tXHRncGFfdCBncGEgPSBfX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgcGFnZXMsXG4tXHRcdFx0XHRcdCAgIEtWTV9VVElMX01JTl9QRk4gKiB2bS1cdTAwM2VwYWdlX3NpemUsXG4tXHRcdFx0XHRcdCAgIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLCBwcm90ZWN0ZWQpO1xuK1x0Z3BhX3QgZ3BhID0gX192bV9waHlfcGFnZXNfYWxsb2Modm0sIHBhZ2VzLCB0eXBlLCBwcm90ZWN0ZWQpO1xuIFxuIFx0LypcbiBcdCAqIEZpbmQgYW4gdW51c2VkIHJhbmdlIG9mIHZpcnR1YWwgcGFnZSBhZGRyZXNzZXMgb2YgYXQgbGVhc3RcbkBAIC0yMDI1LDMzICsyMDMxLDIxIEBAIGNvbnN0IGNoYXIgKmV4aXRfcmVhc29uX3N0cih1bnNpZ25lZCBpbnQgZXhpdF9yZWFzb24pXG4gfVxuIFxuIC8qXG4tICogUGh5c2ljYWwgQ29udGlndW91cyBQYWdlIEFsbG9jYXRvclxuLSAqXG4tICogSW5wdXQgQXJnczpcbi0gKiAgIHZtIC0gVmlydHVhbCBNYWNoaW5lXG4tICogICBudW0gLSBudW1iZXIgb2YgcGFnZXNcbi0gKiAgIG1pbl9ncGEgLSBQaHlzaWNhbCBhZGRyZXNzIG1pbmltdW1cbi0gKiAgIG1lbXNsb3QgLSBNZW1vcnkgcmVnaW9uIHRvIGFsbG9jYXRlIHBhZ2UgZnJvbVxuLSAqICAgcHJvdGVjdGVkIC0gVHJ1ZSBpZiB0aGUgcGFnZXMgd2lsbCBiZSB1c2VkIGFzIHByb3RlY3RlZC9wcml2YXRlIG1lbW9yeVxuKyAqIEFsbG9jYXRlIGNvbnRpZ3VvdXMgKGd1ZXN0KSBwaHlzaWNhbCBwYWdlcyBpbiBhIGdpdmVuIG1lbW9yeSByZWdpb24sIGF0IG9yXG4rICogdGhlIG1pbmltdW0gc3BlY2lmaWMgR1BBLiAgSWYgdGhlIG1lbW9yeSBpcyBwcm90ZWN0ZWQvcHJpdmF0ZSwgYWxzbyBhZGQgdGhlXG4rICogYWxsb2NhdGUgcGFnZXMgdG8gdGhlIHJlZ2lvbidzIHNldCBvZiBwcm90ZWN0ZWQgcGFnZXMsIGUuZy4gc28gdGhhdCBhcmNoXG4rICogY29kZSBrbm93cyB3aGljaCBwYWdlcyBuZWVkIHRvIGJlIGVuY3J5cHRlZCB3aGVuIGxhdW5jaGluZyB0aGUgVk0uXG4gICpcbi0gKiBPdXRwdXQgQXJnczogTm9uZVxuLSAqXG4tICogUmV0dXJuOlxuLSAqICAgU3RhcnRpbmcgcGh5c2ljYWwgYWRkcmVzc1xuLSAqXG4tICogV2l0aGluIHRoZSBWTSBzcGVjaWZpZWQgYnkgdm0sIGxvY2F0ZXMgYSByYW5nZSBvZiBhdmFpbGFibGUgcGh5c2ljYWxcbi0gKiBwYWdlcyBhdCBvciBhYm92ZSBtaW5fZ3BhLiBJZiBmb3VuZCwgdGhlIHBhZ2VzIGFyZSBtYXJrZWQgYXMgaW4gdXNlXG4tICogYW5kIHRoZWlyIGJhc2UgYWRkcmVzcyBpcyByZXR1cm5lZC4gQSBURVNUX0FTU0VSVCBmYWlsdXJlIG9jY3VycyBpZlxuLSAqIG5vdCBlbm91Z2ggcGFnZXMgYXJlIGF2YWlsYWJsZSBhdCBvciBhYm92ZSBtaW5fZ3BhLlxuKyAqIE5vdGUsIHN1Y2Nlc3MgaXMgZ3VhcmFudGVlZCFcbiAgKi9cbi1ncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbi1cdFx0XHQgICBncGFfdCBtaW5fZ3BhLCB1MzIgbWVtc2xvdCxcbi1cdFx0XHQgICBib29sIHByb3RlY3RlZClcbitncGFfdCBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtLCBzaXplX3QgbnJfcGFnZXMsIGdwYV90IG1pbl9ncGEsXG4rXHRcdFx0ICAgICB1MzIgbWVtc2xvdCwgYm9vbCBwcm90ZWN0ZWQsIGJvb2wgbmF0dXJhbGx5X2FsaWduZWQpXG4ge1xuK1x0c2l6ZV90IGFsaWdubWVudCA9IG5hdHVyYWxseV9hbGlnbmVkID8gbnJfcGFnZXMgOiAxO1xuIFx0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb247XG4gXHRzcGFyc2ViaXRfaWR4X3QgcGcsIGJhc2U7XG4gXG4tXHRURVNUX0FTU0VSVChudW0gXHUwMDNlIDAsIFwiTXVzdCBhbGxvY2F0ZSBhdCBsZWFzdCBvbmUgcGFnZVwiKTtcbitcdFRFU1RfQVNTRVJUKG5yX3BhZ2VzLCBcIk11c3QgYWxsb2NhdGUgYXQgbGVhc3Qgb25lIHBhZ2VcIik7XG4gXG4gXHRURVNUX0FTU0VSVCgobWluX2dwYSAlIHZtLVx1MDAzZXBhZ2Vfc2l6ZSkgPT0gMCwgXCJNaW4gcGh5c2ljYWwgYWRkcmVzcyBcIlxuIFx0XHRcIm5vdCBkaXZpc2libGUgYnkgcGFnZSBzaXplLlxcblwiXG5AQCAtMjA2Miw0MyArMjA1Niw3OCBAQCBncGFfdCBfX3ZtX3BoeV9wYWdlc19hbGxvYyhzdHJ1Y3Qga3ZtX3ZtICp2bSwgc2l6ZV90IG51bSxcbiBcdFRFU1RfQVNTRVJUKCFwcm90ZWN0ZWQgfHwgcmVnaW9uLVx1MDAzZXByb3RlY3RlZF9waHlfcGFnZXMsXG4gXHRcdCAgICBcIlJlZ2lvbiBkb2Vzbid0IHN1cHBvcnQgcHJvdGVjdGVkIG1lbW9yeVwiKTtcbiBcbi1cdGJhc2UgPSBwZyA9IG1pbl9ncGEgXHUwMDNlXHUwMDNlIHZtLVx1MDAzZXBhZ2Vfc2hpZnQ7XG4tXHRkbyB7XG4tXHRcdGZvciAoOyBwZyBcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xuLVx0XHRcdGlmICghc3BhcnNlYml0X2lzX3NldChyZWdpb24tXHUwMDNldW51c2VkX3BoeV9wYWdlcywgcGcpKSB7XG4tXHRcdFx0XHRiYXNlID0gcGcgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbi1cdFx0XHRcdGJyZWFrO1xuLVx0XHRcdH1cbitcdGJhc2UgPSBtaW5fZ3BhIFx1MDAzZVx1MDAzZSB2bS1cdTAwM2VwYWdlX3NoaWZ0O1xuK2FnYWluOlxuK1x0YmFzZSA9IEFMSUdOKGJhc2UsIGFsaWdubWVudCk7XG4rXHRmb3IgKHBnID0gYmFzZTsgcGcgXHUwMDNjIGJhc2UgKyBucl9wYWdlczsgKytwZykge1xuK1x0XHRpZiAoIXNwYXJzZWJpdF9pc19zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKSkge1xuK1x0XHRcdGJhc2UgPSBzcGFyc2ViaXRfbmV4dF9zZXQocmVnaW9uLVx1MDAzZXVudXNlZF9waHlfcGFnZXMsIHBnKTtcbitcdFx0XHRpZiAoIWJhc2UpXG4rXHRcdFx0XHRnb3RvIGVub21lbTtcbitcdFx0XHRnb3RvIGFnYWluO1xuIFx0XHR9XG4tXHR9IHdoaWxlIChwZyBcdTAwMjZcdTAwMjYgcGcgIT0gYmFzZSArIG51bSk7XG4tXG4tXHRpZiAocGcgPT0gMCkge1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCJObyBndWVzdCBwaHlzaWNhbCBwYWdlIGF2YWlsYWJsZSwgXCJcbi1cdFx0XHRcIm1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcblwiLFxuLVx0XHRcdG1pbl9ncGEsIHZtLVx1MDAzZXBhZ2Vfc2l6ZSwgbWVtc2xvdCk7XG4tXHRcdGZwdXRzKFwiLS0tLSB2bSBkdW1wIC0tLS1cXG5cIiwgc3RkZXJyKTtcbi1cdFx0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcbi1cdFx0YWJvcnQoKTtcbiBcdH1cbiBcbi1cdGZvciAocGcgPSBiYXNlOyBwZyBcdTAwM2MgYmFzZSArIG51bTsgKytwZykge1xuK1x0Zm9yIChwZyA9IGJhc2U7IHBnIFx1MDAzYyBiYXNlICsgbnJfcGFnZXM7ICsrcGcpIHtcbiBcdFx0c3BhcnNlYml0X2NsZWFyKHJlZ2lvbi1cdTAwM2V1bnVzZWRfcGh5X3BhZ2VzLCBwZyk7XG4gXHRcdGlmIChwcm90ZWN0ZWQpXG4gXHRcdFx0c3BhcnNlYml0X3NldChyZWdpb24tXHUwMDNlcHJvdGVjdGVkX3BoeV9wYWdlcywgcGcpO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGJhc2UgKiB2bS1cdTAwM2VwYWdlX3NpemU7XG4rXG4rZW5vbWVtOlxuK1x0ZnByaW50ZihzdGRlcnIsIFwiTm8gZ3Vlc3QgcGh5c2ljYWwgcGFnZSBhdmFpbGFibGUsIG1pbl9ncGE6IDB4JWx4IHBhZ2Vfc2l6ZTogMHgleCBtZW1zbG90OiAldVxcblwiLFxuK1x0XHRtaW5fZ3BhLCB2bS1cdTAwM2VwYWdlX3NpemUsIG1lbXNsb3QpO1xuK1x0ZnB1dHMoXCItLS0tIHZtIGR1bXAgLS0tLVxcblwiLCBzdGRlcnIpO1xuK1x0dm1fZHVtcChzdGRlcnIsIHZtLCAyKTtcbitcdGFib3J0KCk7XG4rXHRfX2J1aWx0aW5fdW5yZWFjaGFibGUoKTtcbiB9XG4gXG4tZ3BhX3Qgdm1fcGh5X3BhZ2VfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIGdwYV90IG1pbl9ncGEsIHUzMiBtZW1zbG90KVxuK19fd2VhayBib29sIGt2bV9hcmNoX25lZWRzX25hdHVyYWxseV9hbGlnbmVkX3BhZ2VfdGFibGVzKHZvaWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMSwgbWluX2dwYSwgbWVtc2xvdCk7XG4rXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLWdwYV90IHZtX2FsbG9jX3BhZ2VfdGFibGUoc3RydWN0IGt2bV92bSAqdm0pXG4rZ3BhX3QgX192bV9waHlfcGFnZXNfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0sIHNpemVfdCBucl9wYWdlcyxcbitcdFx0XHQgICBlbnVtIGt2bV9tZW1fcmVnaW9uX3R5cGUgdHlwZSwgYm9vbCBwcm90ZWN0ZWQpXG4ge1xuLVx0cmV0dXJuIHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBLVk1fR1VFU1RfUEFHRV9UQUJMRV9NSU5fUEFERFIsXG4tXHRcdFx0XHQgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuK1x0c3RydWN0IHVzZXJzcGFjZV9tZW1fcmVnaW9uICpyZWdpb24gPSB2bV9nZXRfbWVtX3JlZ2lvbih2bSwgdHlwZSk7XG4rXHRib29sIG5hdHVyYWxseV9hbGlnbmVkID0gZmFsc2U7XG4rXHRncGFfdCBtaW5fZ3BhO1xuK1xuK1x0VEVTVF9BU1NFUlQocmVnaW9uLCBcIk5vIHJlZ2lvbiBmb3IgdHlwZSAnJXUnLCBtZW1zbG90ICcldSdcIixcbitcdFx0ICAgIHR5cGUsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKTtcbitcbitcdHN3aXRjaCAodHlwZSkge1xuK1x0Y2FzZSBNRU1fUkVHSU9OX0NPREU6XG4rXHRjYXNlIE1FTV9SRUdJT05fREFUQTpcbitcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0RBVEE6XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSByZWdpb24gaXMgYmFja2VkIGJ5IHRoZSBkZWZhdWx0IG1lbXNsb3QgKGlkPTApLCB1c2VcbitcdFx0ICogc2VsZnRlc3RzJyBoYXJkY29kZWQgbWluaW11bSBQRk4sIG90aGVyd2lzZSB1c2UgdGhlIGJhc2Ugb2ZcbitcdFx0ICogdGhlIGN1c3RvbSBtZW1vcnkgc2xvdCB0aGF0IGJhY2tzIHRoZSByZWdpb24uXG4rXHRcdCAqL1xuK1x0XHRpZiAoIXZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdKVxuK1x0XHRcdG1pbl9ncGEgPSBLVk1fVVRJTF9NSU5fUEZOICogdm0tXHUwMDNlcGFnZV9zaXplO1xuK1x0XHRlbHNlXG4rXHRcdFx0bWluX2dwYSA9IHJlZ2lvbi1cdTAwM2VyZWdpb24uZ3Vlc3RfcGh5c19hZGRyO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUVNX1JFR0lPTl9QVDpcbitcdFx0bWluX2dwYSA9IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUjtcbitcdFx0bmF0dXJhbGx5X2FsaWduZWQgPSBrdm1fYXJjaF9uZWVkc19uYXR1cmFsbHlfYWxpZ25lZF9wYWdlX3RhYmxlcygpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgTUVNX1JFR0lPTl9URVNUX0VYVFJBOlxuK1x0XHRtaW5fZ3BhID0gcmVnaW9uLVx1MDAzZXJlZ2lvbi5ndWVzdF9waHlzX2FkZHI7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0VEVTVF9GQUlMKFwiSW52YWxpZCBtZW1vcnkgcmVnaW9uIHR5cGUgJyV1J1wiLCB0eXBlKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRyZXR1cm4gX19fX3ZtX3BoeV9wYWdlc19hbGxvYyh2bSwgbnJfcGFnZXMsIG1pbl9ncGEsIHZtLVx1MDAzZW1lbXNsb3RzW3R5cGVdLFxuK1x0XHRcdFx0ICAgICAgcHJvdGVjdGVkLCBuYXR1cmFsbHlfYWxpZ25lZCk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9sb29uZ2FyY2gvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuaW5kZXggNDdiYmRlM2UyMDVhMC4uZmNkNDFiYzZmYmRhZSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL2xvb25nYXJjaC9wcm9jZXNzb3IuY1xuQEAgLTksNyArOSw2IEBAXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJ1Y2FsbF9jb21tb24uaFwiXG4gXG4tI2RlZmluZSBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTlx0XHQweDIwMDAwMFxuICNkZWZpbmUgTE9PTkdBUkNIX0dVRVNUX1NUQUNLX1ZBRERSX01JTlx0XHQweDIwMDAwMFxuIFxuIHN0YXRpYyBncGFfdCBpbnZhbGlkX3BndGFibGVbNF07XG5AQCAtNTcsOSArNTYsNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRjaGlsZCA9IHRhYmxlID0gMDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHZtLVx1MDAzZW1tdS5wZ3RhYmxlX2xldmVsczsgaSsrKSB7XG4gXHRcdGludmFsaWRfcGd0YWJsZVtpXSA9IGNoaWxkO1xuLVx0XHR0YWJsZSA9IHZtX3BoeV9wYWdlX2FsbG9jKHZtLCBMT09OR0FSQ0hfUEFHRV9UQUJMRV9QSFlTX01JTixcbi1cdFx0XHRcdHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbi1cdFx0VEVTVF9BU1NFUlQodGFibGUsIFwiRmFpbCB0byBhbGxvY2F0ZSBwYWdlIHRhbGUgYXQgbGV2ZWwgJWRcXG5cIiwgaSk7XG4rXHRcdHRhYmxlID0gdm1fYWxsb2NfcGFnZV90YWJsZSh2bSk7XG4gXHRcdHZpcnRfc2V0X3BndGFibGUodm0sIHRhYmxlLCBjaGlsZCk7XG4gXHRcdGNoaWxkID0gdGFibGU7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi9yaXNjdi9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvcmlzY3YvcHJvY2Vzc29yLmNcbmluZGV4IGRlZDU0MjlmMzQ0ODMuLmMxNzVkY2QxNDExNDQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3Jpc2N2L3Byb2Nlc3Nvci5jXG5AQCAtNjksOSArNjksNyBAQCB2b2lkIHZpcnRfYXJjaF9wZ2RfYWxsb2Moc3RydWN0IGt2bV92bSAqdm0pXG4gXHRpZiAodm0tXHUwMDNlbW11LnBnZF9jcmVhdGVkKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR2bS1cdTAwM2VtbXUucGdkID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBucl9wYWdlcyxcbi1cdFx0XHRcdFx0IEtWTV9HVUVTVF9QQUdFX1RBQkxFX01JTl9QQUREUixcbi1cdFx0XHRcdFx0IHZtLVx1MDAzZW1lbXNsb3RzW01FTV9SRUdJT05fUFRdKTtcbitcdHZtLVx1MDAzZW1tdS5wZ2QgPSB2bV9hbGxvY19wYWdlX3RhYmxlX3BhZ2VzKHZtLCBucl9wYWdlcyk7XG4gXHR2bS1cdTAwM2VtbXUucGdkX2NyZWF0ZWQgPSB0cnVlO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbmluZGV4IGE5YWRiMzc4MmIzNTIuLjMzZjQ5ZDc0M2I1ZmQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3MzOTAvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIvczM5MC9wcm9jZXNzb3IuY1xuQEAgLTIwLDkgKzIwLDcgQEAgdm9pZCB2aXJ0X2FyY2hfcGdkX2FsbG9jKHN0cnVjdCBrdm1fdm0gKnZtKVxuIFx0aWYgKHZtLVx1MDAzZW1tdS5wZ2RfY3JlYXRlZClcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBQQUdFU19QRVJfUkVHSU9OLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLFxuLVx0XHRcdFx0ICAgdm0tXHUwMDNlbWVtc2xvdHNbTUVNX1JFR0lPTl9QVF0pO1xuK1x0Z3BhID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgUEFHRVNfUEVSX1JFR0lPTik7XG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBncGEpLCAweGZmLCBQQUdFU19QRVJfUkVHSU9OICogdm0tXHUwMDNlcGFnZV9zaXplKTtcbiBcbiBcdHZtLVx1MDAzZW1tdS5wZ2QgPSBncGE7XG5AQCAtMzgsOCArMzYsNyBAQCBzdGF0aWMgdTY0IHZpcnRfYWxsb2NfcmVnaW9uKHN0cnVjdCBrdm1fdm0gKnZtLCBpbnQgcmkpXG4ge1xuIFx0dTY0IHRhZGRyO1xuIFxuLVx0dGFkZHIgPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sICByaSBcdTAwM2MgNCA/IFBBR0VTX1BFUl9SRUdJT04gOiAxLFxuLVx0XHRcdFx0ICAgS1ZNX0dVRVNUX1BBR0VfVEFCTEVfTUlOX1BBRERSLCAwKTtcbitcdHRhZGRyID0gdm1fYWxsb2NfcGFnZV90YWJsZV9wYWdlcyh2bSwgcmkgXHUwMDNjIDQgPyBQQUdFU19QRVJfUkVHSU9OIDogMSk7XG4gXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCB0YWRkciksIDB4ZmYsIFBBR0VTX1BFUl9SRUdJT04gKiB2bS1cdTAwM2VwYWdlX3NpemUpO1xuIFxuIFx0cmV0dXJuICh0YWRkciBcdTAwMjYgUkVHSU9OX0VOVFJZX09SSUdJTilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbGliL3g4Ni9wcm9jZXNzb3IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5pbmRleCBkMzFmYTgxZWEwNzU2Li40NzllOWE0ODE2ODdkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2xpYi94ODYvcHJvY2Vzc29yLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9saWIveDg2L3Byb2Nlc3Nvci5jXG5AQCAtNTI5LDcgKzUyOSwxMCBAQCB2b2lkIHRkcF9pZGVudGl0eV9tYXBfZGVmYXVsdF9tZW1zbG90cyhzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiBcbiBcdC8qIE9ubHkgbWVtc2xvdCAwIGlzIG1hcHBlZCBoZXJlLCBlbnN1cmUgaXQncyB0aGUgb25seSBvbmUgYmVpbmcgdXNlZCAqL1xuIFx0Zm9yIChzID0gMDsgcyBcdTAwM2MgTlJfTUVNX1JFR0lPTlM7IHMrKylcbi1cdFx0VEVTVF9BU1NFUlRfRVEodm0tXHUwMDNlbWVtc2xvdHNbc10sIDApO1xuK1x0XHRURVNUX0FTU0VSVCghdm0tXHUwMDNlbWVtc2xvdHNbc10gfHxcbitcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10gPT0gS1ZNX0lOVkFMSURfTUVNU0xPVCxcbitcdFx0XHQgICAgXCJVbmhhbmRsZWQgbWVtc2xvdCAnJXUnIGZvciB0eXBlICcldSdcIixcbitcdFx0XHQgICAgdm0tXHUwMDNlbWVtc2xvdHNbc10sIHMpO1xuIFxuIFx0aSA9IChyZWdpb24tXHUwMDNlcmVnaW9uLmd1ZXN0X3BoeXNfYWRkciBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCkgLSAxO1xuIFx0bGFzdCA9IGkgKyAocmVnaW9uLVx1MDAzZXJlZ2lvbi5tZW1vcnlfc2l6ZSBcdTAwM2VcdTAwM2Ugdm0tXHUwMDNlcGFnZV9zaGlmdCk7XG5AQCAtMTQ2NSwxMyArMTQ2OCwxMyBAQCBib29sIGt2bV9hcmNoX2hhc19kZWZhdWx0X2lycWNoaXAodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi12b2lkIHNldHVwX3NtcmFtKHN0cnVjdCBrdm1fdm0gKnZtLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBzbXJhbV9ncGEsXG4rdm9pZCBzZXR1cF9zbXJhbShzdHJ1Y3Qga3ZtX3ZtICp2bSwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBzbXJhbV9ncGEsXG4gXHRcdCBjb25zdCB2b2lkICpzbWlfaGFuZGxlciwgc2l6ZV90IGhhbmRsZXJfc2l6ZSlcbiB7XG4tXHR2bV91c2Vyc3BhY2VfbWVtX3JlZ2lvbl9hZGQodm0sIFZNX01FTV9TUkNfQU5PTllNT1VTLCBzbXJhbV9ncGEsXG4tXHRcdFx0XHQgICAgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMsIDApO1xuLVx0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgc21yYW1fZ3BhLFxuLVx0XHRcdFx0ICAgICAgIFNNUkFNX01FTVNMT1QpID09IHNtcmFtX2dwYSxcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsXG4rXHRcdFx0ICAgICAgIHNtcmFtX2dwYSwgU01SQU1fTUVNU0xPVCwgU01SQU1fUEFHRVMpO1xuK1xuK1x0VEVTVF9BU1NFUlQodm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBTTVJBTV9QQUdFUywgTUVNX1JFR0lPTl9URVNUX0VYVFJBKSA9PSBzbXJhbV9ncGEsXG4gXHRcdCAgICBcIkNvdWxkIG5vdCBhbGxvY2F0ZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzZXMgZm9yIFNNUkFNXCIpO1xuIFxuIFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgc21yYW1fZ3BhKSwgMHgwLCBTTVJBTV9TSVpFKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vbWVtc2xvdF9wZXJmX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5pbmRleCBlMTI5OTYxMWJlMzIyLi44NDRlYTliN2JiNDFjIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL21lbXNsb3RfcGVyZl90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9tZW1zbG90X3BlcmZfdGVzdC5jXG5AQCAtMzM5LDcgKzMzOSw4IEBAIHN0YXRpYyBib29sIHByZXBhcmVfdm0oc3RydWN0IHZtX2RhdGEgKmRhdGEsIGludCBuc2xvdHMsIHU2NCAqbWF4c2xvdHMsXG4gXHRcdGlmIChzbG90ID09IGRhdGEtXHUwMDNlbnNsb3RzKVxuIFx0XHRcdG5wYWdlcyArPSByZW1wYWdlcztcbiBcbi1cdFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKGRhdGEtXHUwMDNldm0sIG5wYWdlcywgZ3Vlc3RfYWRkciwgc2xvdCk7XG4rXHRcdGdwYSA9IF9fX192bV9waHlfcGFnZXNfYWxsb2MoZGF0YS1cdTAwM2V2bSwgbnBhZ2VzLCBndWVzdF9hZGRyLCBzbG90LFxuK1x0XHRcdFx0XHQgICAgIGZhbHNlLCBmYWxzZSk7XG4gXHRcdFRFU1RfQVNTRVJUKGdwYSA9PSBndWVzdF9hZGRyLFxuIFx0XHRcdCAgICBcInZtX3BoeV9wYWdlc19hbGxvYygpIGZhaWxlZFwiKTtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9jbW1hX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5pbmRleCAxNWQ4MWIyZWQ3YWQzLi43MzM4N2NjM2JjYTc2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvY21tYV90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2NtbWFfdGVzdC5jXG5AQCAtMTAyLDI0ICsxMDIsMTcgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfZGlydHlfdGVzdF9kYXRhKHZvaWQpXG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21haW5fbWVtc2xvdChzdHJ1Y3Qga3ZtX3ZtICp2bSlcbiB7XG4tXHRpbnQgaTtcbi1cbiBcdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSwgVk1fTUVNX1NSQ19BTk9OWU1PVVMsIDAsIDAsIE1BSU5fUEFHRV9DT1VOVCwgMCk7XG4tXHQvKiBzZXQgdGhlIGFycmF5IG9mIG1lbXNsb3RzIHRvIHplcm8gbGlrZSBfX3ZtX2NyZWF0ZSBkb2VzICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9NRU1fUkVHSU9OUzsgaSsrKVxuLVx0XHR2bS1cdTAwM2VtZW1zbG90c1tpXSA9IDA7XG4rXHRfX19fdm1fb3ZlcnJpZGVfbWVtX3JlZ2lvbih2bSwgTUVNX1JFR0lPTl9DT0RFLCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1BULCAwKTtcbitcdF9fX192bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX0RBVEEsIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBjcmVhdGVfdGVzdF9tZW1zbG90KHN0cnVjdCBrdm1fdm0gKnZtKVxuIHtcbi1cdHZtX3VzZXJzcGFjZV9tZW1fcmVnaW9uX2FkZCh2bSxcbi1cdFx0XHRcdCAgICBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBURVNUX0RBVEFfU1RBUlRfR0ZOIFx1MDAzY1x1MDAzYyB2bS1cdTAwM2VwYWdlX3NoaWZ0LFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9NRU1TTE9ULFxuLVx0XHRcdFx0ICAgIFRFU1RfREFUQV9QQUdFX0NPVU5ULFxuLVx0XHRcdFx0ICAgIDBcbi1cdFx0XHRcdCAgICk7XG4tXHR2bS1cdTAwM2VtZW1zbG90c1tNRU1fUkVHSU9OX1RFU1RfREFUQV0gPSBURVNUX0RBVEFfTUVNU0xPVDtcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9EQVRBLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbitcdFx0XHQgICAgICAgVEVTVF9EQVRBX1NUQVJUX0dGTiBcdTAwM2NcdTAwM2Mgdm0tXHUwMDNlcGFnZV9zaGlmdCxcbitcdFx0XHQgICAgICAgVEVTVF9EQVRBX01FTVNMT1QsIFRFU1RfREFUQV9QQUdFX0NPVU5UKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY3JlYXRlX21lbXNsb3RzKHN0cnVjdCBrdm1fdm0gKnZtKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zMzkwL2lycV9yb3V0aW5nLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vczM5MC9pcnFfcm91dGluZy5jXG5pbmRleCBmMzgzOTI4NGFjMDgxLi5jZDI2Y2MxYWVkODAzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3MzOTAvaXJxX3JvdXRpbmcuY1xuQEAgLTM2LDcgKzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdCh2b2lkKVxuIFx0fTtcbiBcbiBcdHZtID0gdm1fY3JlYXRlX3dpdGhfb25lX3ZjcHUoXHUwMDI2dmNwdSwgZ3Vlc3RfY29kZSk7XG4tXHRtZW0gPSB2bV9waHlfcGFnZXNfYWxsb2Modm0sIDIsIDQwOTYgKiA0MiwgMCk7XG4rXHRtZW0gPSBfX19fdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCA0MDk2ICogNDIsIDAsIGZhbHNlLCBmYWxzZSk7XG4gXG4gXHRyb3V0aW5nID0ga3ZtX2dzaV9yb3V0aW5nX2NyZWF0ZSgpO1xuIFx0cm91dGluZy1cdTAwM2VuciA9IDE7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3NldF9tZW1vcnlfcmVnaW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9zZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNcbmluZGV4IGRmZmU5NjU0ZjQ1YmQuLmJmYTVhYzhjZTAyOTUgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vc2V0X21lbW9yeV9yZWdpb25fdGVzdC5jXG5AQCAtMTE2LDE1ICsxMTYsMTUgQEAgc3RhdGljIHN0cnVjdCBrdm1fdm0gKnNwYXduX3ZtKHN0cnVjdCBrdm1fdmNwdSAqKnZjcHUsIHB0aHJlYWRfdCAqdmNwdV90aHJlYWQsXG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KHZjcHUsIGd1ZXN0X2NvZGUpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VU19USFAsXG4tXHRcdFx0XHQgICAgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpLCAwKTtcbitcdHZtX292ZXJyaWRlX21lbV9yZWdpb24odm0sIE1FTV9SRUdJT05fVEVTVF9FWFRSQSwgVk1fTUVNX1NSQ19BTk9OWU1PVVNfVEhQLFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBnZXRwYWdlc2l6ZSgpKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvY2F0ZSBhbmQgbWFwIHR3byBwYWdlcyBzbyB0aGF0IHRoZSBHUEEgYWNjZXNzZWQgYnkgZ3Vlc3RfY29kZSgpXG4gXHQgKiBzdGF5cyB2YWxpZCBhY3Jvc3MgdGhlIG1lbXNsb3QgbW92ZS5cbiBcdCAqL1xuLVx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCAyLCBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9UKTtcbitcdGdwYSA9IHZtX3BoeV9wYWdlc19hbGxvYyh2bSwgMiwgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdFRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXFxuXCIpO1xuIFxuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1BBLCBNRU1fUkVHSU9OX0dQQSwgMik7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni9zbWFsbGVyX21heHBoeWFkZHJfZW11bGF0aW9uX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNcbmluZGV4IDNkY2E4NWU5NTQ3ODEuLjhkMTgyMjcxN2FiZGMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3NtYWxsZXJfbWF4cGh5YWRkcl9lbXVsYXRpb25fdGVzdC5jXG5AQCAtNjIsMTEgKzYyLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRURVNUX0FTU0VSVChyYywgXCJLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUgaXMgdW5hdmFpbGFibGVcIik7XG4gXHR2bV9lbmFibGVfY2FwKHZtLCBLVk1fQ0FQX0VYSVRfT05fRU1VTEFUSU9OX0ZBSUxVUkUsIDEpO1xuIFxuLVx0dm1fdXNlcnNwYWNlX21lbV9yZWdpb25fYWRkKHZtLCBWTV9NRU1fU1JDX0FOT05ZTU9VUyxcbi1cdFx0XHRcdCAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuLVx0XHRcdFx0ICAgIE1FTV9SRUdJT05fU0laRSAvIFBBR0VfU0laRSwgMCk7XG4rXHR2bV9vdmVycmlkZV9tZW1fcmVnaW9uKHZtLCBNRU1fUkVHSU9OX1RFU1RfRVhUUkEsIFZNX01FTV9TUkNfQU5PTllNT1VTLFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX0dQQSwgTUVNX1JFR0lPTl9TTE9ULFxuK1x0XHRcdCAgICAgICBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUpO1xuK1xuIFx0Z3BhID0gdm1fcGh5X3BhZ2VzX2FsbG9jKHZtLCBNRU1fUkVHSU9OX1NJWkUgLyBQQUdFX1NJWkUsXG4tXHRcdFx0XHQgTUVNX1JFR0lPTl9HUEEsIE1FTV9SRUdJT05fU0xPVCk7XG4rXHRcdFx0XHQgTUVNX1JFR0lPTl9URVNUX0VYVFJBKTtcbiBcdFRFU1RfQVNTRVJUKGdwYSA9PSBNRU1fUkVHSU9OX0dQQSwgXCJGYWlsZWQgdm1fcGh5X3BhZ2VzX2FsbG9jXCIpO1xuIFx0dmlydF9tYXAodm0sIE1FTV9SRUdJT05fR1ZBLCBNRU1fUkVHSU9OX0dQQSwgMSk7XG4gXHRodmEgPSBhZGRyX2dwYTJodmEodm0sIE1FTV9SRUdJT05fR1BBKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDIzOjEyOjA0LjMxNzA0NzM3MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzgyNzEwNDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IG5lY2Vzc2l0YXRlIGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL2AuICBIYW5nIG9uLCB0aGF0J3MgdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnkhIEkga25vdyB0aG9zZSBhcmUgKnBhcnQqIG9mIHRoZSBrZXJuZWwgc291cmNlIHRyZWUsIHRlY2huaWNhbGx5LCBidXQgdGhleSdyZSB1c2Vyc3BhY2UgdGVzdGluZyB0b29scywgbm90IGtlcm5lbCBjb2RlLiBUaGV5IHJ1biAqb24gdG9wKiBvZiB0aGUga2VybmVsIHRvIHZlcmlmeSBpdHMgYmVoYXZpb3IuICBDaGFuZ2VzIHRoZXJlIHdvbid0IGRpcmVjdGx5IGFsdGVyIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cblxuTm93LCBsZXQncyBjb25zdWx0IHRoZSBwcm92aWRlZCBndWlkZWxpbmVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGV4cGxpY2l0bHkgbGlzdCBzY2VuYXJpb3Mgd2hlcmUgd2Ugc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQgY292ZXJzIHRoaW5ncyBsaWtlIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBsb2dnaW5nLCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgYW5kIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXJzIHRoYXQgYXJlbid0IGVtdWxhdGVkLiAgSXQgZG9lc24ndCAqZXhwbGljaXRseSogbWVudGlvbiBgdG9vbHMvYCwgYnV0IG15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCBjaGFuZ2VzIGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgKGUuZy4sIHNlbGZ0ZXN0cywgcGVyZiwgYnBmKSBnZW5lcmFsbHkgZG9uJ3QgYWZmZWN0IHRoZSBrZXJuZWwgaXRzZWxmOyB0aGV5J3JlIHVzZXItc3BhY2UgdG9vbHMuXG5cbkxvb2tpbmcgYXQgdGhlIG9wcG9zaXRlIGNhc2UsIHRoZSBndWlkZWxpbmVzIHN0YXRlIHRoYXQgaWYgdGhlIHBhdGNoIG1vZGlmaWVzICpyZWFjaGFibGUqIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAuIFNpbmNlIHdlJ3JlIGRlYWxpbmcgKm9ubHkqIHdpdGggYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS9gLCB0aGlzIGNvbmRpdGlvbiBpc24ndCBtZXQuIFRoZSBwYXRjaCAqZG9lc24ndCogbW9kaWZ5IGNvcmUga2VybmVsIGNvbXBvbmVudHMuIFRoZXJlZm9yZSwgaXQncyB2ZXJ5IGxpa2VseSBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCdzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBmaWxlIGxpc3QgZnJvbSB0aGUgcGF0Y2guICBBaCwgeWVzLCBpdCdzIGV4Y2x1c2l2ZWx5IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vYDpcblxuLSBgYXJtNjQvcGFnZV9mYXVsdF90ZXN0LmNgXG4tIGBhcm02NC92Z2ljX2xwaV9zdHJlc3MuY2Bcbi0gYGluY2x1ZGUva3ZtX3V0aWwuaGBcbi0gYGluY2x1ZGUveDg2L3NtbS5oYFxuLSBgbGliL2FybTY0L3Byb2Nlc3Nvci5jYFxuLSBgbGliL2t2bV91dGlsLmNgXG4tIGBsaWIvbG9vbmdhcmNoL3Byb2Nlc3Nvci5jYFxuLSBgbGliL3Jpc2N2L3Byb2Nlc3Nvci5jYFxuLSBgbGliL3MzOTAvcHJvY2Vzc29yLmNgXG4tIGBsaWIveDg2L3Byb2Nlc3Nvci5jYFxuLSBgbWVtc2xvdF9wZXJmX3Rlc3QuY2Bcbi0gYHMzOTAvY21tYV90ZXN0LmNgXG4tIGBzMzkwL2lycV9yb3V0aW5nLmNgXG4tIGBzZXRfbWVtb3J5X3JlZ2lvbl90ZXN0LmNgXG4tIGB4ODYvc21hbGxlcl9tYXhwaHlhZGRyX2VtdWxhdGlvbl90ZXN0LmNgXG5cbll1cCwgaXQncyBhbGwgc2VsZnRlc3RzLiBUaGVzZSBhcmUgKnVzZXJzcGFjZSogdGVzdCBwcm9ncmFtcywgbm90IGtlcm5lbCBjb2RlLiBUaGV5IGRvbid0IHJ1biBpbnNpZGUgdGhlIGtlcm5lbC4gIFNvLCBiYXNlZCBvbiB0aGUgYW5hbHlzaXMgb2YgdGhlIHBhdGNoJ3Mgc2NvcGUgYW5kIHRoZSBndWlkZWxpbmVzLCBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0aXZlbHkgYGZhbHNlYC5cblxuSSB3aWxsIG5vdyBjYWxsIHNldC1yZXN1bHRzIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjg5LCJPdXRwdXRUb2tlbnMiOjc2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MTUuNjk5NzYwMzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHRlc3RpbmcgdG9vbHMgKEtWTSBzZWxmdGVzdHMpIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS8uIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSB0ZXN0aW5nIHRvb2xzIChLVk0gc2VsZnRlc3RzKSBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0vLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMjM6MTI6MTUuNjk5NzgxNjNaIiwiU2VxIjo1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowkqpn6[1] Phase: Running StartedAt: 2026-08-26 23:12:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqpn6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-26 23:12:27 +0000 UTC FinishedAt: 2026-08-26 23:12:32 +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,}